def construct_circuit(self, x, qr=None, inverse=False): """ Construct the first order expansion based on given data. Args: x (numpy.ndarray): 1-D to-be-transformed data. qr (QauntumRegister): the QuantumRegister object for the circuit, if None, generate new registers with name q. inverse (bool): whether or not inverse the circuit Returns: QuantumCircuit: a quantum circuit transform data x. """ if not isinstance(x, np.ndarray): raise TypeError("x should be numpy array.") if x.ndim != 1: raise ValueError("x should be 1-D array.") if x.shape[0] != self._num_qubits: raise ValueError( "number of qubits and data dimension must be the same.") if qr is None: QuantumRegister(self._num_qubits, 'q') qc = QuantumCircuit(qr) composite_gate = self._build_composite_gate(x, qr) qc._attach(composite_gate if inverse == False else composite_gate.inverse()) return qc
circuit = QuantumCircuit(quantum_r, classical_r) circuit.h(quantum_r[0]) circuit.rx(0, quantum_r[0]) circuit.cx(quantum_r[0], quantum_r[1]) circuit.cx(quantum_r[0], quantum_r[1]) circuit.h(quantum_r[0]) circuit.cx(quantum_r[0], quantum_r[1]) composite_gate_1 = CompositeGate("composite1", [], [quantum_r[x] for x in range(4)]) composite_gate_1._attach(CnotGate(quantum_r[0], quantum_r[1])) circuit._attach(composite_gate_1) circuit.h(quantum_r[0]) composite_gate_2 = CompositeGate("composite2", [], [quantum_r[x] for x in range(4)]) composite_gate_2._attach(CnotGate(quantum_r[0], quantum_r[1])) circuit._attach(composite_gate_2) circuit.cx(quantum_r[0], quantum_r[1]) circuit.h(quantum_r[0]) composite_gate_3 = CompositeGate("composite3", [], [quantum_r[x] for x in range(4)]) composite_gate_3._attach(CnotGate(quantum_r[0], quantum_r[1])) composite_gate_3._attach(CnotGate(quantum_r[0], quantum_r[2]))