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))
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")
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.")
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.')
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')
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))
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))
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))
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")
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')
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))
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))