def test_gives_the_same_unitary_as_original_gate_up_to_global_phase( self, gate_to_be_decomposed, target_qubits ): circuit = Circuit([gate_to_be_decomposed(*target_qubits)]) decomposed_circuit = decompose_zquantum_circuit(circuit, DECOMPOSITION_RULES) assert _is_scaled_identity( circuit.to_unitary() @ np.linalg.inv(decomposed_circuit.to_unitary()), )
def test_commutes_with_parameter_substitution(self): theta, gamma = sympy.symbols("theta, gamma") circuit = Circuit([ RX(theta / 2)(0), X(1), RY(gamma / 4).controlled(1)(1, 2), YY(0.1)(0, 4) ]) symbols_map = {theta: 0.1, gamma: 0.5} parameterized_unitary = circuit.to_unitary() unitary = circuit.bind(symbols_map).to_unitary() np.testing.assert_array_almost_equal( np.array(parameterized_unitary.subs(symbols_map), dtype=complex), unitary)