def test_convert_to_ion_circuit(): q0 = cirq.LineQubit(0) q1 = cirq.LineQubit(1) us = cirq.Duration(nanos=1000) ion_device = cirq.IonDevice(us, us, us, [q0, q1]) clifford_circuit_1 = cirq.Circuit() clifford_circuit_1.append( [cirq.X(q0), cirq.H(q1), cirq.ms(np.pi / 4).on(q0, q1)]) ion_circuit_1 = cirq.ion.ConvertToIonGates().convert_circuit( clifford_circuit_1) ion_device.validate_circuit(ion_circuit_1) cirq.testing.assert_circuits_with_terminal_measurements_are_equivalent( clifford_circuit_1, ion_circuit_1, atol=1e-6) clifford_circuit_2 = cirq.Circuit() clifford_circuit_2.append( [cirq.X(q0), cirq.CNOT(q1, q0), cirq.ms(np.pi / 4).on(q0, q1)]) ion_circuit_2 = cirq.ion.ConvertToIonGates().convert_circuit( clifford_circuit_2) ion_device.validate_circuit(ion_circuit_2) cirq.testing.assert_circuits_with_terminal_measurements_are_equivalent( clifford_circuit_2, ion_circuit_2, atol=1e-6)
def test_init(): d = ion_device(3) ms = 1000 * cirq.Duration(nanos=1) q0 = cirq.LineQubit(0) q1 = cirq.LineQubit(1) q2 = cirq.LineQubit(2) assert d.qubits == {q0, q1, q2} assert d.duration_of(cirq.Z(q0)) == 10 * ms assert d.duration_of(cirq.measure(q0)) == 100 * ms assert d.duration_of(cirq.measure(q0, q1)) == 100 * ms assert d.duration_of(cirq.ops.XX(q0, q1)) == 200 * ms with pytest.raises(ValueError, match="Unsupported gate type"): _ = d.duration_of(cirq.I(q0)) with pytest.raises(TypeError, match="NamedQubit"): with cirq.testing.assert_deprecated( "Use cirq_aqt.aqt_device.AQTDevice", deadline='v0.16'): _ = cirq.IonDevice( measurement_duration=ms, twoq_gates_duration=ms, oneq_gates_duration=ms, qubits=[cirq.LineQubit(0), cirq.NamedQubit("a")], )
def get_aqt_device( num_qubits: int) -> Tuple[cirq.IonDevice, List[cirq.LineQubit]]: """Returns an AQT ion device Args: num_qubits: number of qubits Returns: IonDevice, qubit_list """ qubit_list = cirq.LineQubit.range(num_qubits) us = 1000 * cirq.Duration(nanos=1) ion_device = cirq.IonDevice( measurement_duration=100 * us, twoq_gates_duration=200 * us, oneq_gates_duration=10 * us, qubits=qubit_list, ) return ion_device, qubit_list
def test_convert_to_ion_circuit(): q0 = cirq.LineQubit(0) q1 = cirq.LineQubit(1) us = cirq.Duration(nanos=1000) with cirq.testing.assert_deprecated("cirq_aqt.aqt_device.AQTDevice", deadline='v0.16', count=2): ion_device = cirq.IonDevice(us, us, us, [q0, q1]) with cirq.testing.assert_deprecated("cirq_aqt.aqt_device.AQTTargetGateset", deadline='v0.16', count=None): convert_to_ion_gates = cirq.ion.ConvertToIonGates() clifford_circuit_1 = cirq.Circuit() clifford_circuit_1.append( [cirq.X(q0), cirq.H(q1), cirq.ms(np.pi / 4).on(q0, q1)]) ion_circuit_1 = convert_to_ion_gates.convert_circuit(clifford_circuit_1) ion_circuit_1_using_device = ion_device.decompose_circuit( clifford_circuit_1) ion_device.validate_circuit(ion_circuit_1) ion_device.validate_circuit(ion_circuit_1_using_device) cirq.testing.assert_circuits_with_terminal_measurements_are_equivalent( clifford_circuit_1, ion_circuit_1, atol=1e-6) cirq.testing.assert_circuits_with_terminal_measurements_are_equivalent( clifford_circuit_1, ion_circuit_1_using_device, atol=1e-6) clifford_circuit_2 = cirq.Circuit() clifford_circuit_2.append( [cirq.X(q0), cirq.CNOT(q1, q0), cirq.ms(np.pi / 4).on(q0, q1)]) ion_circuit_2 = convert_to_ion_gates.convert_circuit(clifford_circuit_2) ion_circuit_2_using_device = ion_device.decompose_circuit( clifford_circuit_2) ion_device.validate_circuit(ion_circuit_2) ion_device.validate_circuit(ion_circuit_2_using_device) cirq.testing.assert_circuits_with_terminal_measurements_are_equivalent( clifford_circuit_2, ion_circuit_2, atol=1e-6) cirq.testing.assert_circuits_with_terminal_measurements_are_equivalent( clifford_circuit_2, ion_circuit_2_using_device, atol=1e-6)
def test_init(): d = ion_device(3) ms = 1000 * cirq.Duration(nanos=1) q0 = cirq.LineQubit(0) q1 = cirq.LineQubit(1) q2 = cirq.LineQubit(2) assert d.qubits == {q0, q1, q2} assert d.duration_of(cirq.Z(q0)) == 10 * ms assert d.duration_of(cirq.measure(q0)) == 100 * ms assert d.duration_of(cirq.measure(q0, q1)) == 100 * ms assert d.duration_of(cirq.ops.XX(q0, q1)) == 200 * ms with pytest.raises(ValueError): _ = d.duration_of(cirq.SingleQubitGate().on(q0)) with pytest.raises(TypeError, match="NamedQubit"): _ = cirq.IonDevice( measurement_duration=ms, twoq_gates_duration=ms, oneq_gates_duration=ms, qubits=[cirq.LineQubit(0), cirq.NamedQubit("a")], )