def test_init_errors(): line = cirq.LineQubit.range(3) us = cirq.Duration(nanos=10**3) ms = cirq.Duration(nanos=10**6) with pytest.raises(ValueError, match="Unsupported qubit type"): with cirq.testing.assert_deprecated( "Use cirq_pasqal.PasqalDevice", deadline='v0.16', count=2 ): _ = neutral_atoms.NeutralAtomDevice( measurement_duration=50 * ms, gate_duration=100 * us, control_radius=1.5, max_parallel_z=3, max_parallel_xy=3, max_parallel_c=3, qubits=line, ) with pytest.raises(ValueError, match="max_parallel_c must be less"): with cirq.testing.assert_deprecated( "Use cirq_pasqal.PasqalDevice", deadline='v0.16', count=1 ): _ = neutral_atoms.NeutralAtomDevice( measurement_duration=50 * ms, gate_duration=100 * us, control_radius=1.5, max_parallel_z=3, max_parallel_xy=3, max_parallel_c=4, qubits=[cirq.GridQubit(0, 0)], )
def test_init_errors(): line = cirq.LineQubit.range(3) us = cirq.Duration(nanos=10**3) ms = cirq.Duration(nanos=10**6) with pytest.raises(ValueError, match="Unsupported qubit type"): _ = neutral_atoms.NeutralAtomDevice(measurement_duration=50 * ms, gate_duration=100 * us, control_radius=1.5, max_parallel_z=3, max_parallel_xy=3, max_parallel_c=3, qubits=line) with pytest.raises(ValueError, match="max_parallel_c must be less"): _ = neutral_atoms.NeutralAtomDevice(measurement_duration=50 * ms, gate_duration=100 * us, control_radius=1.5, max_parallel_z=3, max_parallel_xy=3, max_parallel_c=4, qubits=[cirq.GridQubit(0, 0)])
def square_device(width: int, height: int, holes=(), max_controls=2) -> neutral_atoms.NeutralAtomDevice: us = cirq.Duration(nanos=10**3) ms = cirq.Duration(nanos=10**6) return neutral_atoms.NeutralAtomDevice(measurement_duration=50 * ms, gate_duration=100 * us, control_radius=1.5, max_parallel_z=3, max_parallel_xy=3, max_parallel_c=max_controls, qubits=[cirq.GridQubit(row, col) for col in range(width) for row in range(height) if cirq.GridQubit(row, col) not in holes])
def square_device( width: int, height: int, holes=(), max_controls=2, use_timedelta=False ) -> neutral_atoms.NeutralAtomDevice: us = cirq.Duration(nanos=10 ** 3) if not use_timedelta else timedelta(microseconds=1) ms = cirq.Duration(nanos=10 ** 6) if not use_timedelta else timedelta(microseconds=1000) return neutral_atoms.NeutralAtomDevice( # type: ignore measurement_duration=50 * ms, # type: ignore gate_duration=100 * us, # type: ignore control_radius=1.5, max_parallel_z=3, max_parallel_xy=3, max_parallel_c=max_controls, qubits=[ cirq.GridQubit(row, col) for col in range(width) for row in range(height) if cirq.GridQubit(row, col) not in holes ], )
def test_validate_moment_errors(): d = square_device(3, 3) q00 = cirq.GridQubit(0, 0) q01 = cirq.GridQubit(0, 1) q10 = cirq.GridQubit(1, 0) q11 = cirq.GridQubit(1, 1) q12 = cirq.GridQubit(1, 2) q02 = cirq.GridQubit(0, 2) q04 = cirq.GridQubit(0, 4) q03 = cirq.GridQubit(0, 3) q20 = cirq.GridQubit(2, 0) q21 = cirq.GridQubit(2, 1) m = cirq.Moment([cirq.Z.on(q00), (cirq.Z**2).on(q01)]) with pytest.raises(ValueError, match="Non-identical simultaneous "): d.validate_moment(m) m = cirq.Moment([cirq.X.on(q00), cirq.Y.on(q01)]) with pytest.raises(ValueError, match="Non-identical simultaneous "): d.validate_moment(m) m = cirq.Moment([cirq.CNOT.on(q00, q01), cirq.CZ.on(q12, q02)]) with pytest.raises(ValueError, match="Non-identical simultaneous "): d.validate_moment(m) m = cirq.Moment([cirq.CNOT.on(q00, q01), cirq.CNOT.on(q12, q02)]) with pytest.raises(ValueError, match="Too many qubits acted on by " "controlled gates"): d.validate_moment(m) m = cirq.Moment([cirq.CNOT.on(q00, q01), cirq.Z.on(q02)]) with pytest.raises(ValueError, match="Can't perform non-controlled " "operations at same time as controlled operations"): d.validate_moment(m) m = cirq.Moment(cirq.Z.on_each(*d.qubits)) with pytest.raises(ValueError, match="Too many simultaneous Z gates"): d.validate_moment(m) m = cirq.Moment(cirq.X.on_each(*(d.qubit_list()[1:]))) with pytest.raises(ValueError, match="Bad number of simultaneous XY gates"): d.validate_moment(m) m = cirq.Moment([cirq.MeasurementGate(1).on(q00), cirq.Z.on(q01)]) with pytest.raises(ValueError, match="Measurements can't be simultaneous " "with other operations"): d.validate_moment(m) d.validate_moment(cirq.Moment([cirq.X.on(q00), cirq.Z.on(q01)])) us = cirq.Duration(nanos=10**3) ms = cirq.Duration(nanos=10**6) d2 = neutral_atoms.NeutralAtomDevice(measurement_duration=50 * ms, gate_duration=100 * us, control_radius=1.5, max_parallel_z=4, max_parallel_xy=4, max_parallel_c=4, qubits=[ cirq.GridQubit(row, col) for col in range(2) for row in range(2) ]) m = cirq.Moment([cirq.CNOT.on(q00, q01), cirq.CNOT.on(q10, q11)]) with pytest.raises(ValueError, match="Interacting controlled operations"): d2.validate_moment(m) d2 = neutral_atoms.NeutralAtomDevice(measurement_duration=50 * ms, gate_duration=100 * us, control_radius=1.1, max_parallel_z=6, max_parallel_xy=6, max_parallel_c=6, qubits=[ cirq.GridQubit(row, col) for col in range(5) for row in range(5) ]) m = cirq.Moment( [cirq.CZ.on(q00, q01), cirq.CZ.on(q03, q04), cirq.CZ.on(q20, q21)]) d2.validate_moment(m) m = cirq.Moment( [cirq.CZ.on(q00, q01), cirq.CZ.on(q02, q03), cirq.CZ.on(q10, q11)]) with pytest.raises(ValueError, match="Interacting controlled operations"): d2.validate_moment(m)