In my program (see below) I use squ() to add unitary gate into my circuit, print this circuit, run it and print result.
Then I want to print this circuit as qasm-code by using qasm() but an error is occurred, see below...
Please help me to fix this error
import numpy as np
from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister, execute, version
from qiskit import BasicAer
backend = BasicAer.get_backend('unitary_simulator')
qr_squ = QuantumRegister(1)
qc_squ = QuantumCircuit(qr_squ)
sqrtx_array = np.array([[0.5 + 0.5j, 0.5 - 0.5j],
[0.5 - 0.5j, 0.5 + 0.5j]], dtype=np.complex)
qc_squ.squ(sqrtx_array, qr_squ[0])
print(qc_squ)
job_squ = execute(qc_squ, backend)
result_squ = job_squ.result().get_unitary(qc_squ, decimals=3)
print(f'Unitary of result is: {result_squ}')
print()
print('Call qasm() raises an error:')
print(qc_squ.qasm())
βββββββββββ
q0_0: β€ UNITARY β
βββββββββββ
Unitary of result is: [[0.5+0.5j 0.5-0.5j]
[0.5-0.5j 0.5+0.5j]]
Call qasm() raises an error:
Traceback (most recent call last):
File "/home/za/PycharmProjects/qiskit_env/api_qasm_error.py", line 23, in <module>
print(qc_squ.qasm())
File "/home/za/anaconda3/envs/qiskit_env/lib/python3.8/site-packages/qiskit/circuit/quantumcircuit.py", line 739, in qasm
string_temp += "%s %s;\n" % (instruction.qasm(),
File "/home/za/anaconda3/envs/qiskit_env/lib/python3.8/site-packages/qiskit/circuit/instruction.py", line 314, in qasm
[pi_check(i, ndigits=8, output='qasm') for i in self.params]))
File "/home/za/anaconda3/envs/qiskit_env/lib/python3.8/site-packages/qiskit/circuit/instruction.py", line 314, in <listcomp>
[pi_check(i, ndigits=8, output='qasm') for i in self.params]))
File "/home/za/anaconda3/envs/qiskit_env/lib/python3.8/site-packages/qiskit/circuit/tools/pi_check.py", line 134, in pi_check
complex_inpt = complex(inpt)
TypeError: only length-1 arrays can be converted to Python scalars
Process finished with exit code 1
Run this prorgam
qasm() should be to return qasm-code without error
I don't know exactly but may be fix the current implementation of qasm()
Hey, I'll take a crack at this this weekend
@Zhuravlev-A-E does this output look right to you?
βββββββββββ
q0_0: β€ UNITARY β
βββββββββββ
Unitary of result is: [[0.5+0.5j 0.5-0.5j]
[0.5-0.5j 0.5+0.5j]]
Call qasm() raises an error:
OPENQASM 2.0;
include "qelib1.inc";
qreg q0[1];
gate unitary4818764816 p0 {
rz(-pi/2) p0;
ry(-pi/2) p0;
rz(pi/2) p0;
}
unitary4818764816 q0[0];
Hi Scott!
Thank you very much for the answer!
I think yes, it will look quite normal.
Best regards,
Zhuravlev-A-E
ΡΠ±, 16 ΠΌΠ°Ρ 2020 Π³. Π² 07:58, Scott Wyman Neagle notifications@github.com:
@Zhuravlev-A-E https://github.com/Zhuravlev-A-E does this output look
right to you?βββββββββββq0_0: β€ UNITARY β
βββββββββββUnitary of result is: [[0.5+0.5j 0.5-0.5j]
[0.5-0.5j 0.5+0.5j]]
Call qasm() raises an error:
OPENQASM 2.0;
include "qelib1.inc";
qreg q0[1];
gate unitary4818764816 p0 {
rz(-pi/2) p0;
ry(-pi/2) p0;
rz(pi/2) p0;
}
unitary4818764816 q0[0];
β
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/Qiskit/qiskit-terra/issues/4447#issuecomment-629553687,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ANGQDJL2WIJVCSOCJQI6E5LRRXJLPANCNFSM4NAMSD2A
.
I checked the new squ.py - it issued the qasm-code and worked without errors!
Thank you very much!!!
In addition:
Unfortunately, the same error occurs when qasm () is called for circuit with the addition of the iso() gate:
ru_8 = random_unitary(8)
circ_iso = QuantumCircuit(3)
circ_iso.iso(ru_8.data, [0, 1, 2], [])
print(circ_iso.qasm())
Traceback (most recent call last):
File "/home/za/PycharmProjects/qiskit_env/try_unitary_to_instruction.py", line 40, in <module>
print(circ_iso.qasm())
File "/home/za/anaconda3/envs/qiskit_env/lib/python3.8/site-packages/qiskit/circuit/quantumcircuit.py", line 739, in qasm
string_temp += "%s %s;\n" % (instruction.qasm(),
File "/home/za/anaconda3/envs/qiskit_env/lib/python3.8/site-packages/qiskit/circuit/instruction.py", line 314, in qasm
[pi_check(i, ndigits=8, output='qasm') for i in self.params]))
File "/home/za/anaconda3/envs/qiskit_env/lib/python3.8/site-packages/qiskit/circuit/instruction.py", line 314, in <listcomp>
[pi_check(i, ndigits=8, output='qasm') for i in self.params]))
File "/home/za/anaconda3/envs/qiskit_env/lib/python3.8/site-packages/qiskit/circuit/tools/pi_check.py", line 134, in pi_check
complex_inpt = complex(inpt)
TypeError: only length-1 arrays can be converted to Python scalars
The fix suggested in https://github.com/Qiskit/qiskit-terra/pull/4469 changes the class hierarchy and that sparked a small discussion on the nature/location of Unitary gates. I created #5011 to follow that discussion there.
Is it possible to fix this issue without changing the class hierarchy?