From e233650e2f216ed3f0d8c0728c87408a4edd0d1e Mon Sep 17 00:00:00 2001 From: Tilock Sadhukhan Date: Tue, 9 Jun 2026 15:18:38 +0530 Subject: [PATCH] Skip zero-qubit global_phase instructions during circuit separation --- qiskit_addon_cutting/utils/transforms.py | 5 +++++ ...lobal-phase-separation-6b1f4c2d9a0e7e51.yaml | 7 +++++++ test/utils/test_transforms.py | 17 ++++++++++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/fix-global-phase-separation-6b1f4c2d9a0e7e51.yaml diff --git a/qiskit_addon_cutting/utils/transforms.py b/qiskit_addon_cutting/utils/transforms.py index c0f347276..4fd1785f1 100644 --- a/qiskit_addon_cutting/utils/transforms.py +++ b/qiskit_addon_cutting/utils/transforms.py @@ -225,6 +225,11 @@ def _separate_instructions_by_partition( } for i, inst in enumerate(circuit.data): + # A zero-qubit global-phase instruction spans no partition, so it + # cannot be assigned to any subcircuit; skip it. + if inst.operation.name == "global_phase": + continue + # Collect the partition labels spanned by the instruction partitions_spanned = set() for qubit in inst.qubits: diff --git a/releasenotes/notes/fix-global-phase-separation-6b1f4c2d9a0e7e51.yaml b/releasenotes/notes/fix-global-phase-separation-6b1f4c2d9a0e7e51.yaml new file mode 100644 index 000000000..677b5790f --- /dev/null +++ b/releasenotes/notes/fix-global-phase-separation-6b1f4c2d9a0e7e51.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + Fixed an ``AssertionError`` raised by ``separate_circuit()`` (and, in turn, + ``partition_problem()``) when the input circuit contained a zero-qubit + ``global_phase`` instruction. Such an instruction spans no partition, so it + is now skipped when assigning operations to subcircuits. diff --git a/test/utils/test_transforms.py b/test/utils/test_transforms.py index 089991be0..49bed5c53 100644 --- a/test/utils/test_transforms.py +++ b/test/utils/test_transforms.py @@ -20,7 +20,7 @@ QuantumCircuit, CircuitInstruction, ) -from qiskit.circuit.library import efficient_su2, Measure +from qiskit.circuit.library import efficient_su2, Measure, GlobalPhaseGate from qiskit.circuit.library.standard_gates import RZZGate from qiskit_addon_cutting import partition_circuit_qubits @@ -357,6 +357,21 @@ def test_separate_circuit(self): subcircuits[i].data[j].operation.name, inst.operation.name ) + with self.subTest("Zero-qubit global-phase instruction is dropped"): + qc = QuantumCircuit(2) + qc.append(GlobalPhaseGate(0.5), []) + qc.x(0) + qc.y(1) + + subcircuits = separate_circuit(qc, "AB").subcircuits + + self.assertEqual( + ["x"], [inst.operation.name for inst in subcircuits["A"].data] + ) + self.assertEqual( + ["y"], [inst.operation.name for inst in subcircuits["B"].data] + ) + with self.subTest("Bad partition labels"): circuit = QuantumCircuit(2) partition_labels = "ABB"