From ed26d2f7ecf48b4f801e39603047a1a3c7d85632 Mon Sep 17 00:00:00 2001 From: Andreas Bengtsson Date: Fri, 25 Aug 2023 15:43:09 -0700 Subject: [PATCH] Fix ordering issue in random_rotations_between_grid_interaction_layers_circuit (#6261) --- .../random_quantum_circuit_generation.py | 2 +- .../random_quantum_circuit_generation_test.py | 29 ++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/cirq-core/cirq/experiments/random_quantum_circuit_generation.py b/cirq-core/cirq/experiments/random_quantum_circuit_generation.py index 17f57d101b3..cff89d9b8d0 100644 --- a/cirq-core/cirq/experiments/random_quantum_circuit_generation.py +++ b/cirq-core/cirq/experiments/random_quantum_circuit_generation.py @@ -693,5 +693,5 @@ def _two_qubit_layer( prng: 'np.random.RandomState', ) -> 'cirq.OP_TREE': for a, b in coupled_qubit_pairs: - if (a, b) in layer: + if (a, b) in layer or (b, a) in layer: yield two_qubit_op_factory(a, b, prng) diff --git a/cirq-core/cirq/experiments/random_quantum_circuit_generation_test.py b/cirq-core/cirq/experiments/random_quantum_circuit_generation_test.py index a035ee7c501..115bf737dc2 100644 --- a/cirq-core/cirq/experiments/random_quantum_circuit_generation_test.py +++ b/cirq-core/cirq/experiments/random_quantum_circuit_generation_test.py @@ -259,6 +259,30 @@ def __init__(self): 'seed, expected_circuit_length, single_qubit_layers_slice, ' 'two_qubit_layers_slice', ( + ( + (cirq.q(0, 0), cirq.q(0, 1), cirq.q(0, 2)), + 4, + lambda a, b, _: cirq.CZ(a, b), + [[(cirq.q(0, 0), cirq.q(0, 1))], [(cirq.q(0, 1), cirq.q(0, 2))]], + (cirq.X**0.5,), + True, + 1234, + 9, + slice(None, None, 2), + slice(1, None, 2), + ), + ( + (cirq.q(0, 0), cirq.q(0, 1), cirq.q(0, 2)), + 4, + lambda a, b, _: cirq.CZ(a, b), + [[(cirq.q(0, 1), cirq.q(0, 0))], [(cirq.q(0, 1), cirq.q(0, 2))]], + (cirq.X**0.5,), + True, + 1234, + 9, + slice(None, None, 2), + slice(1, None, 2), + ), ( cirq.GridQubit.rect(4, 3), 20, @@ -406,7 +430,10 @@ def _validate_two_qubit_layers( # Operation is two-qubit assert cirq.num_qubits(op) == 2 # Operation fits pattern - assert op.qubits in pattern[i % len(pattern)] + assert ( + op.qubits in pattern[i % len(pattern)] + or op.qubits[::-1] in pattern[i % len(pattern)] + ) active_pairs.add(op.qubits) # All interactions that should be in this layer are present assert all(