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)