def test_to_braket_raises_on_unsupported_gates(): for num_qubits in range(3, 5): print(num_qubits) qubits = [LineQubit(int(qubit)) for qubit in range(num_qubits)] op = ops.MatrixGate(_rotation_of_pi_over_7(num_qubits)).on(*qubits) circuit = Circuit(op) with pytest.raises(ValueError): to_braket(circuit)
def test_to_from_braket_common_one_qubit_gates(): """These gates should stay the same (i.e., not get decomposed) when converting Cirq -> Braket -> Cirq. """ rots = [ops.rx, ops.ry, ops.rz] angles = [1 / 5, 3 / 5, -4 / 5] qubit = LineQubit(0) cirq_circuit = Circuit( # Paulis. ops.X(qubit), ops.Y(qubit), ops.Z(qubit), # Single-qubit rotations. [rot(angle).on(qubit) for rot, angle in zip(rots, angles)], # Rz alter egos. ops.T(qubit), ops.T(qubit) ** -1, ops.S(qubit), ops.S(qubit) ** -1, # Rx alter egos. ops.X(qubit) ** 0.5, ops.X(qubit) ** -0.5, ) test_circuit = from_braket(to_braket(cirq_circuit)) assert _equal(test_circuit, cirq_circuit, require_qubit_equality=True)
def test_to_from_braket_uncommon_one_qubit_gates(uncommon_gate): """These gates get decomposed when converting Cirq -> Braket -> Cirq, but the unitaries should be equal up to global phase. """ cirq_circuit = Circuit(uncommon_gate.on(LineQubit(0))) test_circuit = from_braket(to_braket(cirq_circuit)) testing.assert_allclose_up_to_global_phase( protocols.unitary(test_circuit), protocols.unitary(cirq_circuit), atol=1e-7, )
def test_to_from_braket_common_three_qubit_gates(common_gate): """These gates should stay the same (i.e., not get decomposed) when converting Cirq -> Braket -> Cirq. """ cirq_circuit = Circuit(common_gate.on(*LineQubit.range(3))) test_circuit = from_braket(to_braket(cirq_circuit)) testing.assert_allclose_up_to_global_phase( protocols.unitary(test_circuit), protocols.unitary(cirq_circuit), atol=1e-7, ) assert _equal(test_circuit, cirq_circuit, require_qubit_equality=True)
def test_to_from_braket_common_two_qubit_gates(common_gate): """These gates should stay the same (i.e., not get decomposed) when converting Cirq -> Braket -> Cirq. """ cirq_circuit = Circuit(common_gate.on(*LineQubit.range(2))) test_circuit = from_braket(to_braket(cirq_circuit)) testing.assert_allclose_up_to_global_phase( protocols.unitary(test_circuit), protocols.unitary(cirq_circuit), atol=1e-7, ) # Cirq AAPowGate has a different global phase than braket AA which gets # lost in translation. Here, AA = XX, YY, or ZZ. if not isinstance(common_gate, (ops.XXPowGate, ops.YYPowGate, ops.ZZPowGate)): assert _equal(test_circuit, cirq_circuit, require_qubit_equality=True)
def test_to_from_braket_bell_circuit(qreg): cirq_circuit = Circuit(ops.H(qreg[0]), ops.CNOT(*qreg)) test_circuit = from_braket(to_braket(cirq_circuit)) assert _equal(test_circuit, cirq_circuit, require_qubit_equality=True)