Closed Cryoris closed 2 years ago
This seems pretty fixable without a QPY format bump. It's our old friend bool
causing problems here: QPY decides if it needs to output a definition based on bool(instruction.definition)
, but bool(empty)
is False
because QuantumCircuit
defines __len__
as a pass through to the number of operations, and bool
essentially tries len(x) != 0
.
Pretty sure I can fix this no problems, and it'll be stable for backport.
Environment
What is happening?
Serializing + deserializing a circuit containing an empty gate (i.e. no operations) with QPY yields a gate where the definition is
None
instead of an empty circuit. If the definition isNone
the transpiler cannot decompose the gate, unless the gate is in the basis set (like e.g.x
orcx
are).This is a problem in particular for Qiskit runtime as users might unintentionally construct circuits that contain empty gates, as e.g. was the case in Qiskit/qiskit-nature#449.
How can we reproduce the issue?
produces
What should happen?
The gate should have a definition which is an empty circuit instead of being just
None
.Any suggestions?
No response