Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Retain all deprecated
Bit
properties in QPY roundtrip (#9525)
* Retain more deprecated Bit properties in QPY roundtrip A major bugfix for QPY's handling of loose circuit bits in c0ac5fb (gh-9095) caused the deprecated bit properties `index` and `register` to be lost after the QPY roundtrip. As far as Terra's data model is concerned, the two circuits would still compare equal after this loss; the output registers would still be equal to the inputs, and bit equality is not considered directly since it general bit instances are not expected to be equal between circuits. Losing this information caused some downstream issues for the IBM runtime, which was still relying on `Bit.index` working in some cases, despite it issuing a deprecating warning since Terra 0.17 (April 2021). While this can be corrected downstream, QPY can still do a better job of roundtripping the deprecated information while it is still present. The QPY format does not currently store enough information to _completely_ roundtrip this information in cases that some but not all owned bits from a register are present in the circuit. (This partial data is a decent part of the cause of the bugs that gh-9095 fixed.) Since this is just in the support of deprecated functionality that Terra's data model does not even require for circuit equality (QPY's goal), it seems not worth it to produce a new QPY binary format version to store this, when the deprecated properties being removed would obsolete the format again immediately. * Fix lint * Correct deprecated bit information in QPY This allows complete round-tripping of all the deprecated register+index information in the `Bit` instances through QPY, restoring us to the _intended_ behaviour before gh-9095. The behaviour in the dumper before that did not allow full reconstruction, because some of the information was lost for bits that were encountered in more than one register. This fixes the dumper to always output all the indexing information for all bits, not to use `-1` whenever a bit _is_ in the circuit but has previously been encountered. The `standalone` field on a register is sufficient to tell whether the bits contained in it should have their "owner" information set; it's not possible (in valid Qiskit code) to have a register that owns only _some_ of its bits. To accomodate this, the register reader now needs to be two-pass. * Add deprecated-bit checks to backwards compatibility tests * Rewrite release note * Improve internal documentation --------- Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
- Loading branch information