mirror of https://github.com/Qiskit/qiskit.git
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:
parent
dcec79ef0a
commit
89ea58b1f8
|
@ -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
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
fixes:
|
||||
- |
|
||||
The class :class:`.Pauli` now support creation from :class:`.QuantumCircuit`
|
||||
that use new-style :class:`.Bit`.
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue