Open dberthault opened 2 hours ago
Huh, thanks for the report, this is definitely a weird one. Feels like the Rust and Python sides of the parser must be getting out-of-sync somehow, and I'm assuming that it's related to the legacy handling for instructions that the much older parser used to treat as "built in" without needing a definition.
Here's a minimal reproducer:
from qiskit import qasm2
from qiskit.circuit import library
custom = qasm2.CustomInstruction("whoops", 0, 1, library.XGate, builtin=True)
prog = """
OPENQASM 2.0;
gate whoops a { U(0, 0, 0) a; }
gate ignored a { U(pi, pi, pi) a; }
qreg q[1];
ignored q[0];
"""
qasm2.loads(prog, custom_instructions=[custom]).draw()
The output circuit only calls for gate ignored
, but the name and definition that gets assigned is whoops
.
Environment
What is happening?
When one creates a circuit with
qiskit.QuantumCircuit.from_qasm_str
an Fswap gate will sometimes be mapped to swap. This seems to only happen if there is a swap before the fswap in the qasm file.gives
But
gives
How can we reproduce the issue?
Run this code:
It outputs
What should happen?
I should output
Any suggestions?
No response