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))
Пример #2
0
 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))