Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions qiskit/circuit/library/data_preparation/initializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
from qiskit.circuit.instruction import Instruction
from qiskit.circuit.library.generalized_gates import Isometry
from .state_preparation import StatePreparation
from qiskit.circuit.exceptions import CircuitError

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

def broadcast_arguments(self, qargs, cargs):
return self._stateprep.broadcast_arguments(qargs, cargs)

def inverse(self, annotated: bool = False):
"""Raises an error as Initialize cannot be inverted."""
raise CircuitError(
"Initialize is not unitary thus can not be inverted. "
"If you want an invertible state preparation, use StatePreparation instead."
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
fixes:
- |
Fixed an unclear error message in :meth:`.Initialize.inverse`, which now immediately
raises an error when called since the instruction is not invertible.

See `#15595 <https://github.com/Qiskit/qiskit/issues/15595>`__.
8 changes: 8 additions & 0 deletions test/python/circuit/test_initializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
from qiskit.exceptions import QiskitError
from qiskit.circuit.library import Initialize
from test import QiskitTestCase
from qiskit.circuit.exceptions import CircuitError


@ddt
Expand Down Expand Up @@ -514,6 +515,13 @@ def test_repeat(self):
statevector = Statevector(qc)
self.assertTrue(np.allclose(statevector, desired_vector))

def test_irreversible_initialize(self):
"""Test failure of the initialize.inverse() method"""
circuit = QuantumCircuit(4, 0)
circuit.initialize(0, circuit.qubits)
with self.assertRaises(CircuitError):
_ = circuit.inverse()


class TestInstructionParam(QiskitTestCase):
"""Test conversion of numpy type parameters."""
Expand Down