def test_cx_equivalence_3cx(self, seed=3): """Check circuits with 3 cx gates are outside the 0, 1, and 2 qubit regions. """ state = np.random.default_rng(seed) rnd = 2 * np.pi * state.random(size=24) qr = QuantumRegister(2, name='q') qc = QuantumCircuit(qr) qc.u(rnd[0], rnd[1], rnd[2], qr[0]) qc.u(rnd[3], rnd[4], rnd[5], qr[1]) qc.cx(qr[1], qr[0]) qc.u(rnd[6], rnd[7], rnd[8], qr[0]) qc.u(rnd[9], rnd[10], rnd[11], qr[1]) qc.cx(qr[0], qr[1]) qc.u(rnd[12], rnd[13], rnd[14], qr[0]) qc.u(rnd[15], rnd[16], rnd[17], qr[1]) qc.cx(qr[1], qr[0]) qc.u(rnd[18], rnd[19], rnd[20], qr[0]) qc.u(rnd[21], rnd[22], rnd[23], qr[1]) sim = UnitarySimulatorPy() unitary = execute(qc, sim).result().get_unitary() self.assertEqual(two_qubit_cnot_decompose.num_basis_gates(unitary), 3) self.assertTrue(Operator(two_qubit_cnot_decompose(unitary)).equiv(unitary))
def test_cx_equivalence_2cx(self, seed=2): """Check circuits with 2 cx gates locally equivalent to some circuit with 2 cx. """ state = np.random.default_rng(seed) rnd = 2 * np.pi * state.random(size=18) qr = QuantumRegister(2, name='q') qc = QuantumCircuit(qr) qc.u(rnd[0], rnd[1], rnd[2], qr[0]) qc.u(rnd[3], rnd[4], rnd[5], qr[1]) qc.cx(qr[1], qr[0]) qc.u(rnd[6], rnd[7], rnd[8], qr[0]) qc.u(rnd[9], rnd[10], rnd[11], qr[1]) qc.cx(qr[0], qr[1]) qc.u(rnd[12], rnd[13], rnd[14], qr[0]) qc.u(rnd[15], rnd[16], rnd[17], qr[1]) sim = UnitarySimulatorPy() unitary = execute(qc, sim).result().get_unitary() self.assertEqual(two_qubit_cnot_decompose.num_basis_gates(unitary), 2) self.assertTrue(Operator(two_qubit_cnot_decompose(unitary)).equiv(unitary))
def test_cx_equivalence_3cx_random(self, rnd, seed): """Check random circuits with 3 cx gates are outside the 0, 1, and 2 qubit regions. """ qr = QuantumRegister(2, name='q') qc = QuantumCircuit(qr) qc.u3(rnd[0], rnd[1], rnd[2], qr[0]) qc.u3(rnd[3], rnd[4], rnd[5], qr[1]) qc.cx(qr[1], qr[0]) qc.u3(rnd[6], rnd[7], rnd[8], qr[0]) qc.u3(rnd[9], rnd[10], rnd[11], qr[1]) qc.cx(qr[0], qr[1]) qc.u3(rnd[12], rnd[13], rnd[14], qr[0]) qc.u3(rnd[15], rnd[16], rnd[17], qr[1]) qc.cx(qr[1], qr[0]) qc.u3(rnd[18], rnd[19], rnd[20], qr[0]) qc.u3(rnd[21], rnd[22], rnd[23], qr[1]) sim = UnitarySimulatorPy() unitary = execute(qc, sim, seed_simulator=seed).result().get_unitary() self.assertEqual(two_qubit_cnot_decompose.num_basis_gates(unitary), 3)
def test_cx_equivalence_2cx_random(self): """Check random circuits with 2 cx gates locally equivalent to some circuit with 2 cx. """ qr = QuantumRegister(2, name='q') qc = QuantumCircuit(qr) rnd = 2 * np.pi * np.random.random(size=3) qc.u3(rnd[0], rnd[1], rnd[2], qr[0]) rnd = 2 * np.pi * np.random.random(size=3) qc.u3(rnd[0], rnd[1], rnd[2], qr[1]) qc.cx(qr[1], qr[0]) rnd = 2 * np.pi * np.random.random(size=3) qc.u3(rnd[0], rnd[1], rnd[2], qr[0]) rnd = 2 * np.pi * np.random.random(size=3) qc.u3(rnd[0], rnd[1], rnd[2], qr[1]) qc.cx(qr[0], qr[1]) rnd = 2 * np.pi * np.random.random(size=3) qc.u3(rnd[0], rnd[1], rnd[2], qr[0]) rnd = 2 * np.pi * np.random.random(size=3) qc.u3(rnd[0], rnd[1], rnd[2], qr[1]) sim = UnitarySimulatorPy() U = execute(qc, sim).result().get_unitary() self.assertEqual(two_qubit_cnot_decompose.num_basis_gates(U), 2)
def test_cx_equivalence_0cx_random(self, rnd, seed): """Check random circuits with 0 cx gates locally equivalent to identity.""" qr = QuantumRegister(2, name="q") qc = QuantumCircuit(qr) qc.u(rnd[0], rnd[1], rnd[2], qr[0]) qc.u(rnd[3], rnd[4], rnd[5], qr[1]) sim = UnitarySimulatorPy() unitary = execute(qc, sim, seed_simulator=seed).result().get_unitary() self.assertEqual(two_qubit_cnot_decompose.num_basis_gates(unitary), 0)
def test_cx_equivalence_2cx_random(self, rnd, seed): """Check random circuits with 2 cx gates locally equivalent to some circuit with 2 cx. """ qr = QuantumRegister(2, name='q') qc = QuantumCircuit(qr) qc.u3(rnd[0], rnd[1], rnd[2], qr[0]) qc.u3(rnd[3], rnd[4], rnd[5], qr[1]) qc.cx(qr[1], qr[0]) qc.u3(rnd[6], rnd[7], rnd[8], qr[0]) qc.u3(rnd[9], rnd[10], rnd[11], qr[1]) qc.cx(qr[0], qr[1]) qc.u3(rnd[12], rnd[13], rnd[14], qr[0]) qc.u3(rnd[15], rnd[16], rnd[17], qr[1]) sim = UnitarySimulatorPy() unitary = execute(qc, sim, seed_simulator=seed).result().get_unitary() self.assertEqual(two_qubit_cnot_decompose.num_basis_gates(unitary), 2)