Make circuit_to_dag
convert blocks in control flow ops to DAGCircuit
#10280
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The two main data structures for storing a circuit in Qiskit are
QuantumCircuit
andDAGCircuit
. They support lossless conversion. Control flow operations include blocks of "code" as subcircuits. Currently these are stored only asQuantumCircuit
s. This necessitates an increasing amount of conversion between the two when manipulating circuits. In particular when doing transpilation.This PR modifies
circuit_to_dag
anddag_to_circuit
to recursively descend into blocks in control flow operations to convert them to the same type as the top-level structure.There is a concomitant simplification of the code that (at present partially) supports control flow operations.
Pro arguments
Contra arguments
I don't think these are sufficiently strong to warrant not merging this PR (or something similar).
QuantumCircuit
. If you hit these code paths unintended errors will be raised.Related issues
transpile
#9417TODO
This PR will take a bit of work to merge even if the basic scheme is acceptable. Some items.
tox -epy
) fail. I guess these are not difficult to fix.