def test_instructions_gate(self):
        """Test `instructions`."""
        sched = Schedule()
        inst_map = InstructionScheduleMap()

        inst_map.add(U1Gate(0), 1, sched)
        inst_map.add(U3Gate(0, 0, 0), 0, sched)

        instructions = inst_map.instructions
        for inst in ["u1", "u3"]:
            self.assertTrue(inst in instructions)
Ejemplo n.º 2
0
 def _define(self):
     """Calculate a subcircuit that implements this unitary."""
     if self.num_qubits == 1:
         q = QuantumRegister(1, "q")
         theta, phi, lam = _DECOMPOSER1Q.angles(self.to_matrix())
         self.definition = [(U3Gate(theta, phi, lam), [q[0]], [])]
     elif self.num_qubits == 2:
         self.definition = two_qubit_cnot_decompose(self.to_matrix()).data
     else:
         q = QuantumRegister(self.num_qubits, "q")
         self.definition = [(isometry.Isometry(self.to_matrix(), 0,
                                               0), q[:], [])]
Ejemplo n.º 3
0
 def test_has_from_mock_gate(self):
     """Test `has` and `assert_has` from mock data."""
     inst_map = FakeOpenPulse2Q().defaults().instruction_schedule_map
     self.assertTrue(inst_map.has(U1Gate(0), [0]))
     self.assertTrue(inst_map.has(CXGate(), (0, 1)))
     self.assertTrue(inst_map.has(U3Gate(0, 0, 0), 0))
     self.assertTrue(inst_map.has('measure', [0, 1]))
     self.assertFalse(inst_map.has(U1Gate(0), [0, 1]))
     with self.assertRaises(PulseError):
         inst_map.assert_has('dne', [0])
     with self.assertRaises(PulseError):
         inst_map.assert_has(CXGate(), 100)
Ejemplo n.º 4
0
 def _define(self):
     """Calculate a subcircuit that implements this unitary."""
     if self.num_qubits == 1:
         q = QuantumRegister(1, "q")
         qc = QuantumCircuit(q, name=self.name)
         theta, phi, lam, global_phase = _DECOMPOSER1Q.angles_and_phase(self.to_matrix())
         qc._append(U3Gate(theta, phi, lam), [q[0]], [])
         qc.global_phase = global_phase
         self.definition = qc
     elif self.num_qubits == 2:
         self.definition = two_qubit_cnot_decompose(self.to_matrix())
     else:
         self.definition = qs_decomposition(self.to_matrix())
Ejemplo n.º 5
0
 def _circuit_u321(theta, phi, lam, phase, simplify=True, atol=DEFAULT_ATOL):
     qr = QuantumRegister(1, "qr")
     circuit = QuantumCircuit(qr, global_phase=phase)
     if not simplify:
         atol = -1.0
     if abs(theta) < atol:
         tot = _mod_2pi(phi + lam, atol)
         if abs(tot) > atol:
             circuit._append(U1Gate(tot), [qr[0]], [])
     elif abs(theta - np.pi / 2) < atol:
         circuit._append(U2Gate(_mod_2pi(phi, atol), _mod_2pi(lam, atol)), [qr[0]], [])
     else:
         circuit._append(U3Gate(theta, _mod_2pi(phi, atol), _mod_2pi(lam, atol)), [qr[0]], [])
     return circuit
Ejemplo n.º 6
0
 def _define(self):
     """Calculate a subcircuit that implements this unitary."""
     if self.num_qubits == 1:
         q = QuantumRegister(1, "q")
         qc = QuantumCircuit(q, name=self.name)
         theta, phi, lam = _DECOMPOSER1Q.angles(self.to_matrix())
         qc._append(U3Gate(theta, phi, lam), [q[0]], [])
         self.definition = qc
     elif self.num_qubits == 2:
         self.definition = two_qubit_cnot_decompose(self.to_matrix())
     else:
         q = QuantumRegister(self.num_qubits, "q")
         qc = QuantumCircuit(q, name=self.name)
         qc.append(isometry.Isometry(self.to_matrix(), 0, 0), qargs=q[:])
         self.definition = qc
    def test_optimize_u3_to_u2(self):
        """U3(pi/2, 0, pi/4) ->  U2(0, pi/4). Basis [u1, u2, u3]."""
        qr = QuantumRegister(2, 'qr')
        circuit = QuantumCircuit(qr)
        circuit.append(U3Gate(np.pi / 2, 0, np.pi / 4), [qr[0]])

        expected = QuantumCircuit(qr)
        expected.append(U2Gate(0, np.pi / 4), [qr[0]])

        basis = ['u1', 'u2', 'u3']
        passmanager = PassManager()
        passmanager.append(BasisTranslator(sel, basis))
        passmanager.append(Optimize1qGatesDecomposition(basis))
        result = passmanager.run(circuit)

        self.assertEqual(expected, result)
    def test_optimize_u3_to_u2(self):
        """U3(pi/2, 0, pi/4) ->  U2(0, pi/4). Basis [u1, u2, u3]."""
        qr = QuantumRegister(2, "qr")
        circuit = QuantumCircuit(qr)
        circuit.append(U3Gate(np.pi / 2, 0, np.pi / 4), [qr[0]])

        expected = QuantumCircuit(qr)
        expected.append(U2Gate(0, np.pi / 4), [qr[0]])

        basis = ["u1", "u2", "u3"]
        passmanager = PassManager()
        passmanager.append(BasisTranslator(sel, basis))
        passmanager.append(Optimize1qGatesDecomposition(basis))
        result = passmanager.run(circuit)
        self.assertEqual(expected, result)
        msg = f"expected:\n{expected}\nresult:\n{result}"
        self.assertEqual(expected, result, msg=msg)
Ejemplo n.º 9
0
 def _circuit_u321(theta,
                   phi,
                   lam,
                   phase,
                   simplify=True,
                   atol=DEFAULT_ATOL):
     rtol = 1e-9  # default is 1e-5, too far from atol=1e-12
     circuit = QuantumCircuit(1, global_phase=phase)
     if simplify and (np.isclose(theta, 0.0, atol=atol, rtol=rtol)):
         if not np.isclose(
                 phi + lam, [0.0, 2 * np.pi], atol=atol, rtol=rtol).any():
             circuit.append(U1Gate(_mod2pi(phi + lam)), [0])
     elif simplify and np.isclose(theta, np.pi / 2, atol=atol, rtol=rtol):
         circuit.append(U2Gate(phi, lam), [0])
     else:
         circuit.append(U3Gate(theta, phi, lam), [0])
     return circuit
Ejemplo n.º 10
0
 def _circuit_u321(theta,
                   phi,
                   lam,
                   phase,
                   simplify=True,
                   atol=DEFAULT_ATOL):
     rtol = 1e-9  # default is 1e-5, too far from atol=1e-12
     qr = QuantumRegister(1, 'qr')
     circuit = QuantumCircuit(qr, global_phase=phase)
     if simplify and (math.isclose(theta, 0.0, abs_tol=atol, rel_tol=rtol)):
         phi_lam = phi + lam
         if not (math.isclose(phi_lam, 0.0, abs_tol=atol, rel_tol=rtol) or
                 math.isclose(phi_lam, 2*np.pi, abs_tol=atol, rel_tol=rtol)):
             circuit._append(U1Gate(_mod2pi(phi+lam)), [qr[0]], [])
     elif simplify and math.isclose(theta, np.pi/2, abs_tol=atol, rel_tol=rtol):
         circuit._append(U2Gate(phi, lam), [qr[0]], [])
     else:
         circuit._append(U3Gate(theta, phi, lam), [qr[0]], [])
     return circuit
Ejemplo n.º 11
0
 def _circuit_u3(theta, phi, lam, phase, simplify=True, atol=DEFAULT_ATOL):
     # pylint: disable=unused-argument
     circuit = QuantumCircuit(1, global_phase=phase)
     circuit.append(U3Gate(theta, phi, lam), [0])
     return circuit
 def local_rotations_inv(theta1, phi1, lam1, theta2, phi2, lam2):
     return Operator(U3Gate(-theta1, -lam1, -phi1)).\
         expand(Operator(U3Gate(-theta2, -lam2, -phi2)))
 def _circuit_u3(theta, phi, lam, phase, simplify=True, atol=DEFAULT_ATOL):
     # pylint: disable=unused-argument
     qr = QuantumRegister(1, 'qr')
     circuit = QuantumCircuit(qr, global_phase=phase)
     circuit._append(U3Gate(theta, phi, lam), [qr[0]], [])
     return circuit
Ejemplo n.º 14
0
from qiskit.circuit import EquivalenceLibrary, Parameter, QuantumCircuit, QuantumRegister
from qiskit.circuit.library.standard_gates import U2Gate, U3Gate, HGate, U1Gate, CCXGate, TdgGate, TGate, RZGate, CXGate
from qiskit.qasm import pi

eq_lib = EquivalenceLibrary()

theta = Parameter('theta')
phi = Parameter('phi')
lamda = Parameter('lamda')

u3 = U3Gate(theta, phi, lamda)
u2 = U2Gate(theta, phi)
u1 = U1Gate(theta)
ccx = CCXGate()
        
q = QuantumRegister(1, 'q')
equiv_u3 = QuantumCircuit(q)
equiv_u3.append(RZGate(phi+(pi/2)), [q[0]], [])
equiv_u3.append(HGate(),[q[0]], [] )
equiv_u3.append(RZGate(theta),[q[0]], [])
equiv_u3.append(HGate(), [q[0]], [])
equiv_u3.append(RZGate(lamda-(pi/2)),[q[0]], 0)
eq_lib.add_equivalence(u3, equiv_u3)


q = QuantumRegister(1, 'q')
equiv_u2 = QuantumCircuit(q)
equiv_u2.append(RZGate(theta+(pi/2)), [q[0]], [])
equiv_u2.append(HGate(),[q[0]], [] )
equiv_u2.append(RZGate(pi/2),[q[0]], [])
equiv_u2.append(HGate(), [q[0]], [])