示例#1
0
    def set_basis(self, basis):
        """Declare the set of basis gates to emit."""

        # minimal basis
        self.circuit.add_basis_element(name="U",
                                       number_qubits=1,
                                       number_classical=0,
                                       number_parameters=3)
        self.circuit.add_basis_element("CX", 2, 0, 0)
        self.circuit.add_basis_element("measure", 1, 1, 0)
        self.circuit.add_basis_element("reset", 1, 0, 0)
        self.circuit.add_basis_element("barrier", -1)

        # extra simulator basis that will not be unrolled to the above
        self.circuit.add_basis_element("snapshot", -1, 0, 1)
        self.circuit.add_basis_element("save", -1, 0, 1)
        self.circuit.add_basis_element("load", -1, 0, 1)
        self.circuit.add_basis_element("noise", -1, 0, 1)

        # extra user defined basis
        circuit = QuantumCircuit(
        )  # TODO: make nicer when definitions not attached to circuit
        for b in basis:
            if b not in self.circuit.basis and b in circuit.definitions:
                definition = circuit.definitions[b]
                self.circuit.add_basis_element(
                    name=b,
                    number_qubits=definition["n_bits"],
                    number_classical=0,
                    number_parameters=definition["n_args"])
    def test_dag_neq_same_topology(self):
        """ DAG equivalence check: False. Same topology."""
        circ2 = QuantumCircuit(self.qr1, self.qr2)
        circ2.cx(self.qr1[2], self.qr1[3])
        circ2.u2(0.1, 0.2, self.qr1[3])
        circ2.h(self.qr1[0])
        circ2.h(self.qr1[2])
        circ2.t(self.qr1[2])
        circ2.cx(self.qr1[2],
                 self.qr1[1])  # <--- The difference: ch(qr1[2], qr1[1])
        circ2.ccx(self.qr2[0], self.qr2[1], self.qr1[0])
        dag2 = DAGCircuit.fromQuantumCircuit(circ2)

        self.assertNotEqual(self.dag1, dag2)
 def setUp(self):
     self.qr1 = QuantumRegister(4, 'qr1')
     self.qr2 = QuantumRegister(2, 'qr2')
     circ1 = QuantumCircuit(self.qr2, self.qr1)
     circ1.h(self.qr1[0])
     circ1.cx(self.qr1[2], self.qr1[3])
     circ1.h(self.qr1[2])
     circ1.t(self.qr1[2])
     circ1.ch(self.qr1[2], self.qr1[1])
     circ1.u2(0.1, 0.2, self.qr1[3])
     circ1.ccx(self.qr2[0], self.qr2[1], self.qr1[0])
     self.dag1 = DAGCircuit.fromQuantumCircuit(circ1)
    def test_dag_eq(self):
        """ DAG equivalence check: True."""
        circ2 = QuantumCircuit(self.qr1, self.qr2)
        circ2.cx(self.qr1[2], self.qr1[3])
        circ2.u2(0.1, 0.2, self.qr1[3])
        circ2.h(self.qr1[0])
        circ2.h(self.qr1[2])
        circ2.t(self.qr1[2])
        circ2.ch(self.qr1[2], self.qr1[1])
        circ2.ccx(self.qr2[0], self.qr2[1], self.qr1[0])
        dag2 = DAGCircuit.fromQuantumCircuit(circ2)

        self.assertEqual(self.dag1, dag2)
    def setUp(self):
        qr1 = QuantumRegister(4)
        qr2 = QuantumRegister(2)
        circ = QuantumCircuit(qr1, qr2)
        circ.h(qr1[0])
        circ.cx(qr1[2], qr1[3])
        circ.h(qr1[2])
        circ.t(qr1[2])
        circ.ch(qr1[2], qr1[1])
        circ.u2(0.1, 0.2, qr1[3])
        circ.ccx(qr2[0], qr2[1], qr1[0])

        self.dag = DAGCircuit.fromQuantumCircuit(circ)