Support new-style Bit in Pauli convertor from QuantumCircuit (#10757)

* Do not use Bit.index in quantum_info/operators/symplectic/pauli.py

* bugfix

* Fix cross-reference

---------

Co-authored-by: Jake Lishman <jake@binhbar.com>
This commit is contained in:
Luciano Bello 2023-09-01 17:58:26 +02:00 committed by GitHub
parent dcec79ef0a
commit 89ea58b1f8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 2 deletions

View File

@ -157,7 +157,12 @@ class Pauli(BasePauli):
_CANONICAL_PHASE_LABEL = {"": 0, "-i": 1, "-": 2, "i": 3}
def __init__(
self, data: str | tuple | Pauli | ScalarOp | None = None, x=None, *, z=None, label=None
self,
data: str | tuple | Pauli | ScalarOp | QuantumCircuit | None = None,
x=None,
*,
z=None,
label=None,
):
"""Initialize the Pauli.
@ -712,7 +717,7 @@ class Pauli(BasePauli):
if not isinstance(inner.operation, (Barrier, Delay)):
next_instr = BasePauli(*cls._from_circuit(inner.operation))
if next_instr is not None:
qargs = [tup.index for tup in inner.qubits]
qargs = [instr.find_bit(tup).index for tup in inner.qubits]
ret = ret.compose(next_instr, qargs=qargs)
return ret._z, ret._x, ret._phase

View File

@ -0,0 +1,5 @@
---
fixes:
- |
The class :class:`.Pauli` now support creation from :class:`.QuantumCircuit`
that use new-style :class:`.Bit`.

View File

@ -23,6 +23,7 @@ import numpy as np
from ddt import ddt, data, unpack
from qiskit import QuantumCircuit
from qiskit.circuit import Qubit
from qiskit.exceptions import QiskitError
from qiskit.circuit.library import (
IGate,
@ -484,6 +485,15 @@ class TestPauli(QiskitTestCase):
test = Pauli(label)
self.assertEqual(expected, test)
def test_circuit_with_bit(self):
"""Test new-style Bit support when converting from QuantumCircuit"""
circ = QuantumCircuit([Qubit()])
circ.x(0)
value = Pauli(circ)
target = Pauli("X")
self.assertEqual(value, target)
if __name__ == "__main__":
unittest.main()