Skip to content

Commit 1aeb988

Browse files
CosminDinuThieryCryorisShellyGarion
authored
Fix: Initialize.inverse() now raises CircuitError immediately (#15782)
* Fix: Initialize.inverse() now raises CircuitError immediately * move importations to the beggining * Fix: apply black formatting * Apply suggestions from code review by Cryoris Co-authored-by: Julien Gacon <gaconju@gmail.com> --------- Co-authored-by: Julien Gacon <gaconju@gmail.com> Co-authored-by: Shelly Garion <46566946+ShellyGarion@users.noreply.github.com>
1 parent 0b7d000 commit 1aeb988

3 files changed

Lines changed: 23 additions & 0 deletions

File tree

qiskit/circuit/library/data_preparation/initializer.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from qiskit.circuit.instruction import Instruction
2424
from qiskit.circuit.library.generalized_gates import Isometry
2525
from .state_preparation import StatePreparation
26+
from qiskit.circuit.exceptions import CircuitError
2627

2728
if typing.TYPE_CHECKING:
2829
from qiskit.quantum_info.states.statevector import Statevector
@@ -106,3 +107,10 @@ def params(self, parameters: Statevector | Sequence[complex] | str | int) -> Non
106107

107108
def broadcast_arguments(self, qargs, cargs):
108109
return self._stateprep.broadcast_arguments(qargs, cargs)
110+
111+
def inverse(self, annotated: bool = False):
112+
"""Raises an error as Initialize cannot be inverted."""
113+
raise CircuitError(
114+
"Initialize is not unitary thus can not be inverted. "
115+
"If you want an invertible state preparation, use StatePreparation instead."
116+
)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
fixes:
3+
- |
4+
Fixed an unclear error message in :meth:`.Initialize.inverse`, which now immediately
5+
raises an error when called since the instruction is not invertible.
6+
7+
See `#15595 <https://github.com/Qiskit/qiskit/issues/15595>`__.

test/python/circuit/test_initializer.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
from qiskit.exceptions import QiskitError
3131
from qiskit.circuit.library import Initialize
3232
from test import QiskitTestCase
33+
from qiskit.circuit.exceptions import CircuitError
3334

3435

3536
@ddt
@@ -514,6 +515,13 @@ def test_repeat(self):
514515
statevector = Statevector(qc)
515516
self.assertTrue(np.allclose(statevector, desired_vector))
516517

518+
def test_irreversible_initialize(self):
519+
"""Test failure of the initialize.inverse() method"""
520+
circuit = QuantumCircuit(4, 0)
521+
circuit.initialize(0, circuit.qubits)
522+
with self.assertRaises(CircuitError):
523+
_ = circuit.inverse()
524+
517525

518526
class TestInstructionParam(QiskitTestCase):
519527
"""Test conversion of numpy type parameters."""

0 commit comments

Comments
 (0)