def test_global_phase(self, num_ctrl_qubits): """test global phase""" mat1 = np.array([[0, 1], [1, 0]], dtype=float) mat2 = np.exp(1j) * mat1 gate1 = UnitaryGate(mat1) gate2 = UnitaryGate(mat2) cgate1 = gate1.control(num_ctrl_qubits) cgate2 = gate2.control(num_ctrl_qubits) cop_mat1 = _compute_control_matrix(mat1, num_ctrl_qubits) cop_mat2 = _compute_control_matrix(mat2, num_ctrl_qubits, phase=1) self.assertTrue(is_unitary_matrix(mat1)) self.assertTrue(is_unitary_matrix(mat2)) self.assertTrue(is_unitary_matrix(cop_mat1)) self.assertTrue(is_unitary_matrix(cop_mat2)) self.assertTrue(Operator(cgate1).equiv(Operator(cgate2))) self.assertTrue(matrix_equal(cop_mat1, cop_mat2, ignore_phase=True))
def test_controlled_random_unitary(self, num_ctrl_qubits): """test controlled unitary""" num_target = 2 base_gate = UnitaryGate(scipy.stats.unitary_group.rvs(num_target)) base_mat = base_gate.to_matrix() cgate = base_gate.control(num_ctrl_qubits) test_op = Operator(cgate) cop_mat = _compute_control_matrix(base_mat, num_ctrl_qubits) self.assertTrue(matrix_equal(cop_mat, test_op.data, ignore_phase=True))