示例#1
0
 def test_cnot_rxx_decompose(self):
     """Verify CNOT decomposition into RXX gate is correct"""
     cnot = Operator(CXGate())
     decomps = [cnot_rxx_decompose(),
                cnot_rxx_decompose(plus_ry=True, plus_rxx=True),
                cnot_rxx_decompose(plus_ry=True, plus_rxx=False),
                cnot_rxx_decompose(plus_ry=False, plus_rxx=True),
                cnot_rxx_decompose(plus_ry=False, plus_rxx=False)]
     for decomp in decomps:
         self.assertTrue(cnot.equiv(decomp))
示例#2
0
 def test_conjugate(self):
     """Test transpose method"""
     samples = 10
     rng = np.random.default_rng(777)
     for num_qubits in range(1, 5):
         for _ in range(samples):
             circ = random_cnotdihedral_circuit(num_qubits, 5 * num_qubits, seed=rng)
             elem = CNOTDihedral(circ)
             value = elem.conjugate().to_operator()
             target = Operator(circ).conjugate()
             self.assertTrue(target.equiv(value), "Error: conjugate circuit is not the same")
示例#3
0
 def test_init_from_pauli(self):
     """Test initialization from Pauli"""
     samples = 10
     rng = np.random.default_rng(999)
     for num_qubits in range(1, 5):
         for _ in range(samples):
             pauli = random.random_pauli(num_qubits, seed=rng)
             elem = CNOTDihedral(pauli)
             value = Operator(pauli)
             target = Operator(elem)
             self.assertTrue(value.equiv(target), "Error: Pauli operator is not the same.")
示例#4
0
 def test_init_from_pauli(self):
     """Test initialization from Pauli"""
     samples = 10
     nseed = 999
     for qubit_num in range(1, 5):
         for i in range(samples):
             pauli = Pauli.random(qubit_num, seed=nseed + i)
             elem = CNOTDihedral(pauli)
             value = Operator(pauli)
             target = Operator(elem)
             self.assertTrue(value.equiv(target),
                             'Error: Pauli operator is not the same.')
示例#5
0
 def test_conjugate(self):
     """Test transpose method"""
     samples = 10
     nseed = 777
     for qubit_num in range(1, 5):
         for i in range(samples):
             elem = random_cnotdihedral(qubit_num, seed=nseed + i)
             circ = elem.to_circuit()
             value = elem.conjugate().to_operator()
             target = Operator(circ).conjugate()
             self.assertTrue(target.equiv(value),
                             'Error: conjugate circuit is not the same')
示例#6
0
 def test_to_operator_nqubit_gates(self, gates, num_qubits):
     """Test {num_qubits}-qubit circuit with gates {gates}"""
     samples = 10
     num_gates = 20
     seed = 300
     for i in range(samples):
         circ = random_clifford_circuit(num_qubits,
                                        num_gates,
                                        gates=gates,
                                        seed=seed + i)
         value = Clifford(circ).to_operator()
         target = Operator(circ)
         self.assertTrue(target.equiv(value))
示例#7
0
 def test_transpose(self, num_qubits):
     """Test transpose method"""
     samples = 10
     num_gates = 1
     seed = 500
     gates = 'all'
     for i in range(samples):
         circ = random_clifford_circuit(num_qubits,
                                        num_gates,
                                        gates=gates,
                                        seed=seed + i)
         value = Clifford(circ).transpose().to_operator()
         target = Operator(circ).transpose()
         self.assertTrue(target.equiv(value))
示例#8
0
 def test_conjugate(self, num_qubits):
     """Test conjugate method"""
     samples = 10
     num_gates = 10
     seed = 400
     gates = "all"
     for i in range(samples):
         circ = random_clifford_circuit(num_qubits,
                                        num_gates,
                                        gates=gates,
                                        seed=seed + i)
         value = Clifford(circ).conjugate().to_operator()
         target = Operator(circ).conjugate()
         self.assertTrue(target.equiv(value))
示例#9
0
 def test_to_matrix(self):
     """Test to_matrix method"""
     samples = 10
     rng = np.random.default_rng(888)
     for num_qubits in range(1, 5):
         for _ in range(samples):
             circ = random_cnotdihedral_circuit(num_qubits, 5 * num_qubits, seed=rng)
             elem = CNOTDihedral(circ)
             mat = elem.to_matrix()
             self.assertIsInstance(mat, np.ndarray)
             self.assertEqual(mat.shape, 2 * (2**num_qubits,))
             value = Operator(mat)
             target = Operator(circ)
             self.assertTrue(value.equiv(target), "Error: matrix of the circuit is not the same")
示例#10
0
 def test_to_matrix(self):
     """Test to_matrix method"""
     samples = 10
     nseed = 888
     for qubit_num in range(1, 5):
         for i in range(samples):
             elem = random_cnotdihedral(qubit_num, seed=nseed + i)
             circ = elem.to_circuit()
             mat = elem.to_matrix()
             self.assertIsInstance(mat, np.ndarray)
             self.assertEqual(mat.shape, 2 * (2**qubit_num, ))
             value = Operator(mat)
             target = Operator(circ)
             self.assertTrue(
                 value.equiv(target),
                 'Error: matrix of the circuit is not the same')
示例#11
0
 def test_to_matrix(self, num_qubits):
     """Test to_matrix method"""
     samples = 10
     num_gates = 10
     seed = 333
     gates = 'all'
     for i in range(samples):
         circ = random_clifford_circuit(num_qubits,
                                        num_gates,
                                        gates=gates,
                                        seed=seed + i)
         mat = Clifford(circ).to_matrix()
         self.assertIsInstance(mat, np.ndarray)
         self.assertEqual(mat.shape, 2 * (2**num_qubits, ))
         value = Operator(mat)
         target = Operator(circ)
         self.assertTrue(value.equiv(target))
示例#12
0
 def test_to_instruction(self, num_qubits):
     """Test to_instruction method"""
     samples = 10
     num_gates = 10
     seed = 800
     gates = 'all'
     for i in range(samples):
         circ = random_clifford_circuit(num_qubits,
                                        num_gates,
                                        gates=gates,
                                        seed=seed + i)
         decomp = Clifford(circ).to_instruction()
         self.assertIsInstance(decomp, Gate)
         self.assertEqual(decomp.num_qubits, circ.num_qubits)
         value = Operator(decomp)
         target = Operator(circ)
         self.assertTrue(value.equiv(target))
    def test_template(self, template_circuit):
        """test to verify that all templates are equivalent to the identity"""

        target = Operator(template_circuit)
        value = Operator(np.eye(2 ** template_circuit.num_qubits))
        self.assertTrue(target.equiv(value))