def _define(self): """ gate swap a,b { cx a,b; cx b,a; cx a,b; } """ definition = [] q = QuantumRegister(2, "q") rule = [ (CX_PIGate(1), [q[1]], []), (RZGate(pi / 2), [q[1]], []), (CX_PIGate(1), [q[1]], []), (CzGate(), [q[0], q[1]], []), (CX_PIGate(1), [q[1]], []), (RZGate(pi / 2), [q[1]], []), (CX_PIGate(1), [q[1]], []), (CX_PIGate(1), [q[0]], []), (RZGate(pi / 2), [q[0]], []), (CX_PIGate(1), [q[0]], []), (CzGate(), [q[1], q[0]], []), (CX_PIGate(1), [q[0]], []), (RZGate(pi / 2), [q[0]], []), (CX_PIGate(1), [q[0]], []), (CX_PIGate(1), [q[1]], []), (RZGate(pi / 2), [q[1]], []), (CX_PIGate(1), [q[1]], []), (CzGate(), [q[0], q[1]], []), (CX_PIGate(1), [q[1]], []), (RZGate(pi / 2), [q[1]], []), (CX_PIGate(1), [q[1]], []), ] for inst in rule: definition.append(inst) self.definition = definition
def test_substituting_node_preserves_name_args_condition(self, inplace): """Verify name, args and condition are preserved by a substitution.""" dag = DAGCircuit() qr = QuantumRegister(2) cr = ClassicalRegister(1) dag.add_qreg(qr) dag.add_creg(cr) dag.apply_operation_back(HGate(), [qr[1]]) node_to_be_replaced = dag.apply_operation_back(CnotGate(), [qr[1], qr[0]], condition=(cr, 1)) node_to_be_replaced.name = 'test_name' dag.apply_operation_back(HGate(), [qr[1]]) replacement_node = dag.substitute_node(node_to_be_replaced, CzGate(), inplace=inplace) raise_if_dagcircuit_invalid(dag) self.assertEqual(replacement_node.name, 'test_name') self.assertEqual(replacement_node.qargs, [qr[1], qr[0]]) self.assertEqual(replacement_node.cargs, []) self.assertEqual(replacement_node.condition, (cr, 1)) self.assertEqual(replacement_node is node_to_be_replaced, inplace)
def _define(self): """ gate cz a,b { h b; cx a,b; h b; } """ definition = [] q = QuantumRegister(2, "q") rule = [(HGate(), [q[1]], []), (CzGate(), [q[0], q[1]], []), (HGate(), [q[1]], [])] for inst in rule: definition.append(inst) self.definition = definition
def create_dag_op(self, name, args, qubits): """Create a DAG op node. """ if name == "u0": op = U0Gate(args[0], qubits[0]) elif name == "u1": op = U1Gate(args[0], qubits[0]) elif name == "u2": op = U2Gate(args[0], args[1], qubits[0]) elif name == "u3": op = U3Gate(args[0], args[1], args[2], qubits[0]) elif name == "x": op = XGate(qubits[0]) elif name == "y": op = YGate(qubits[0]) elif name == "z": op = ZGate(qubits[0]) elif name == "t": op = TGate(qubits[0]) elif name == "tdg": op = TdgGate(qubits[0]) elif name == "s": op = SGate(qubits[0]) elif name == "sdg": op = SdgGate(qubits[0]) elif name == "swap": op = SwapGate(qubits[0], qubits[1]) elif name == "rx": op = RXGate(args[0], qubits[0]) elif name == "ry": op = RYGate(args[0], qubits[0]) elif name == "rz": op = RZGate(args[0], qubits[0]) elif name == "rzz": op = RZZGate(args[0], qubits[0], qubits[1]) elif name == "id": op = IdGate(qubits[0]) elif name == "h": op = HGate(qubits[0]) elif name == "cx": op = CnotGate(qubits[0], qubits[1]) elif name == "cy": op = CyGate(qubits[0], qubits[1]) elif name == "cz": op = CzGate(qubits[0], qubits[1]) elif name == "ch": op = CHGate(qubits[0], qubits[1]) elif name == "crz": op = CrzGate(args[0], qubits[0], qubits[1]) elif name == "cu1": op = Cu1Gate(args[0], qubits[0], qubits[1]) elif name == "cu3": op = Cu3Gate(args[0], args[1], args[2], qubits[0], qubits[1]) elif name == "ccx": op = ToffoliGate(qubits[0], qubits[1], qubits[2]) elif name == "cswap": op = FredkinGate(qubits[0], qubits[1], qubits[2]) else: raise BackendError("unknown operation for name ast node name %s" % name) self.circuit.add_basis_element(op.name, len(op.qargs), len(op.cargs), len(op.param)) self.start_gate(op) self.end_gate(op)