-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Closed
Description
Circuits obtained by initialize
cannot be combined.
Expected Behavior
Circuits generated by initialize()
should behave the same with those created manually.
Circuits constructed manually can be combined with +
as below:
qp = QuantumProgram()
q = qp.create_quantum_register("q", 1)
c = qp.create_classical_register("c", 1)
qc1 = qp.create_circuit("H1", [q], [c])
qc1.h(q)
qc2 = qp.create_circuit("H2", [q], [c])
qc2.x(q)
qc2.h(q)
qp.add_circuit("H1_and_H2", qc1 + qc2)
circuit_drawer(qp.get_circuit("H1_and_H2"))
This will create a concatenated circuit as in the image below:
Current Behavior
The following code generates error:
qp = QuantumProgram()
q = qp.create_quantum_register("q", 1)
c = qp.create_classical_register("c", 1)
qc1Error = qp.create_circuit("H1", [q], [c])
qc1Error.initialize([1.0/np.sqrt(2), 1.0/np.sqrt(2)], [ q[0] ])
qc2Error = qp.create_circuit("H2", [q], [c])
qc2Error.initialize([1.0/np.sqrt(2), -1.0/np.sqrt(2)], [ q[0] ])
qp.add_circuit("H1_and_H2", qc1Error + qc2Error)
Note that qc1Error and qc2Error are essentially "H" and "X H" as below:
Possible Solution
No Idea. Here is the error message:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-27-515dca717837> in <module>()
10 qc2Error.initialize([1.0/np.sqrt(2), -1.0/np.sqrt(2)], [ q[0] ])
11
---> 12 qp.add_circuit("H1_and_H2", qc1Error + qc2Error)
13
14
~/miniconda3/envs/QISKitenv/lib/python3.6/site-packages/qiskit/_quantumcircuit.py in __add__(self, rhs)
142 def __add__(self, rhs):
143 """Overload + to implement self.concatenate."""
--> 144 return self.combine(rhs)
145
146 def __iadd__(self, rhs):
~/miniconda3/envs/QISKitenv/lib/python3.6/site-packages/qiskit/_quantumcircuit.py in combine(self, rhs)
114 circuit = QuantumCircuit(*combined_registers)
115 for gate in itertools.chain(self.data, rhs.data):
--> 116 gate.reapply(circuit)
117 return circuit
118
~/miniconda3/envs/QISKitenv/lib/python3.6/site-packages/qiskit/extensions/quantum_initializer/_initializer.py in reapply(self, circ)
101 def reapply(self, circ):
102 """Reapply this gate to the corresponding qubits in circ."""
--> 103 self._modifiers(circ.initialize(self.name, self.param, self.arg))
104
105 def gates_to_uncompute(self):
TypeError: initialize() takes 3 positional arguments but 4 were given
Steps to Reproduce (for bugs)
Context
Your Environment
- Version used:
- Environment name and version (e.g. Python 3.6.1):
- Operating System and version:
Metadata
Metadata
Assignees
Labels
No labels