Skip to content

Commit af4e48d

Browse files
Add argument check to move_pauli_strings_into_circuit (#7985)
The `circuit_left` argument of `move_pauli_strings_into_circuit` should contain only a PauliStringPhasor-type operations. Raise exception if that is not the case. Fixes #7934 --------- Co-authored-by: Pavol Juhas <juhas@google.com>
1 parent de66262 commit af4e48d

2 files changed

Lines changed: 19 additions & 0 deletions

File tree

cirq-core/cirq/contrib/paulistring/recombine.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,14 @@ def _sorted_best_string_placements(
6969
def move_pauli_strings_into_circuit(
7070
circuit_left: circuits.Circuit | circuitdag.CircuitDag, circuit_right: circuits.Circuit
7171
) -> circuits.Circuit:
72+
non_pauli_string_phasor = next(
73+
(o for o in circuit_left.all_operations() if not isinstance(o, ops.PauliStringPhasor)), None
74+
)
75+
if non_pauli_string_phasor is not None:
76+
raise ValueError(
77+
f'Expected only PauliStringPhasor operations in circuit_left. '
78+
f'Found {non_pauli_string_phasor}.'
79+
)
7280
if isinstance(circuit_left, circuitdag.CircuitDag):
7381
string_dag = circuitdag.CircuitDag(
7482
incoming_graph_data=circuit_left, can_reorder=pauli_string_reorder_pred

cirq-core/cirq/contrib/paulistring/recombine_test.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
from __future__ import annotations
1616

17+
import pytest
18+
1719
import cirq
1820
from cirq.contrib.paulistring import (
1921
convert_and_separate_circuit,
@@ -49,3 +51,12 @@ def test_move_non_clifford_into_clifford() -> None:
4951
opt_len2 = len(cirq.optimize_for_target_gateset(c_recombined2, gateset=gateset))
5052
assert opt_len1 <= baseline_len
5153
assert opt_len2 <= baseline_len
54+
55+
56+
def test_move_pauli_strings_into_circuit_raises() -> None:
57+
# check that example in #7934 raises exception
58+
q0 = cirq.LineQubit(0)
59+
with pytest.raises(
60+
ValueError, match='Expected only PauliStringPhasor operations in circuit_left.'
61+
):
62+
move_pauli_strings_into_circuit(cirq.Circuit(cirq.X(q0)), cirq.Circuit())

0 commit comments

Comments
 (0)