From 733e2a336760a18b324ec3830ce767da210d6b9d Mon Sep 17 00:00:00 2001 From: Caleb Smith <112727936+Ca1eb3@users.noreply.github.com> Date: Mon, 8 Jan 2024 04:58:50 -0600 Subject: [PATCH] Move EvolvedOperatorAnsatz to NLocal directory (#11385) * Move EvolvedOperatorAnsatz * add release note fix import * fix import * add doc string to function * fix imports * Add tests for Moved Class * update library init * Fix library init imports * Add deprecation to old class * update formatting * Fix tests * fix import * Move EvolvedOperatorAnsatz * add release note fix import * fix import * add doc string to function * fix imports * Add tests for Moved Class * update library init * Fix library init imports * Add deprecation to old class * update formatting * Fix tests * fix import * Change deprecation to upgrade * Fix init doc --------- Co-authored-by: Shelly Garion <46566946+ShellyGarion@users.noreply.github.com> --- qiskit/circuit/library/__init__.py | 4 ++-- qiskit/circuit/library/n_local/__init__.py | 2 ++ .../library/{ => n_local}/evolved_operator_ansatz.py | 9 +++++++-- qiskit/circuit/library/n_local/qaoa_ansatz.py | 3 ++- .../move_evolved_operator_ansatz-5406bc071013c443.yaml | 9 +++++++++ test/python/circuit/library/test_evolved_op_ansatz.py | 6 ++++-- 6 files changed, 26 insertions(+), 7 deletions(-) rename qiskit/circuit/library/{ => n_local}/evolved_operator_ansatz.py (97%) create mode 100644 releasenotes/notes/move_evolved_operator_ansatz-5406bc071013c443.yaml diff --git a/qiskit/circuit/library/__init__.py b/qiskit/circuit/library/__init__.py index 76b06aa99aba..710b9533d9cd 100644 --- a/qiskit/circuit/library/__init__.py +++ b/qiskit/circuit/library/__init__.py @@ -330,7 +330,6 @@ PhaseEstimation GroverOperator PhaseOracle - EvolvedOperatorAnsatz PauliEvolutionGate HamiltonianGate UnitaryOverlap @@ -352,6 +351,7 @@ PauliTwoDesign RealAmplitudes EfficientSU2 + EvolvedOperatorAnsatz ExcitationPreserving QAOAAnsatz @@ -559,6 +559,7 @@ PauliTwoDesign, RealAmplitudes, EfficientSU2, + EvolvedOperatorAnsatz, ExcitationPreserving, QAOAAnsatz, ) @@ -577,5 +578,4 @@ from .phase_estimation import PhaseEstimation from .grover_operator import GroverOperator from .phase_oracle import PhaseOracle -from .evolved_operator_ansatz import EvolvedOperatorAnsatz from .overlap import UnitaryOverlap diff --git a/qiskit/circuit/library/n_local/__init__.py b/qiskit/circuit/library/n_local/__init__.py index 7c1846dc88e9..4a238dcedbb8 100644 --- a/qiskit/circuit/library/n_local/__init__.py +++ b/qiskit/circuit/library/n_local/__init__.py @@ -17,6 +17,7 @@ from .pauli_two_design import PauliTwoDesign from .real_amplitudes import RealAmplitudes from .efficient_su2 import EfficientSU2 +from .evolved_operator_ansatz import EvolvedOperatorAnsatz from .excitation_preserving import ExcitationPreserving from .qaoa_ansatz import QAOAAnsatz @@ -26,6 +27,7 @@ "RealAmplitudes", "PauliTwoDesign", "EfficientSU2", + "EvolvedOperatorAnsatz", "ExcitationPreserving", "QAOAAnsatz", ] diff --git a/qiskit/circuit/library/evolved_operator_ansatz.py b/qiskit/circuit/library/n_local/evolved_operator_ansatz.py similarity index 97% rename from qiskit/circuit/library/evolved_operator_ansatz.py rename to qiskit/circuit/library/n_local/evolved_operator_ansatz.py index 572213089451..bb1eed3430d6 100644 --- a/qiskit/circuit/library/evolved_operator_ansatz.py +++ b/qiskit/circuit/library/n_local/evolved_operator_ansatz.py @@ -17,14 +17,14 @@ import numpy as np +from qiskit.circuit.library.pauli_evolution import PauliEvolutionGate from qiskit.circuit.parameter import Parameter from qiskit.circuit.quantumregister import QuantumRegister from qiskit.circuit.quantumcircuit import QuantumCircuit from qiskit.quantum_info import Operator, Pauli, SparsePauliOp from qiskit.synthesis.evolution import LieTrotter -from .pauli_evolution import PauliEvolutionGate -from .n_local.n_local import NLocal +from .n_local import NLocal class EvolvedOperatorAnsatz(NLocal): @@ -98,6 +98,11 @@ def _check_configuration(self, raise_on_failure: bool = True) -> bool: @property def num_qubits(self) -> int: + """Returns the number of qubits in this circuit. + + Returns: + The number of qubits. + """ if self.operators is None: return 0 diff --git a/qiskit/circuit/library/n_local/qaoa_ansatz.py b/qiskit/circuit/library/n_local/qaoa_ansatz.py index b05507ea5068..d62e12c4d941 100644 --- a/qiskit/circuit/library/n_local/qaoa_ansatz.py +++ b/qiskit/circuit/library/n_local/qaoa_ansatz.py @@ -17,12 +17,13 @@ import numpy as np -from qiskit.circuit.library.evolved_operator_ansatz import EvolvedOperatorAnsatz, _is_pauli_identity from qiskit.circuit.parametervector import ParameterVector from qiskit.circuit.quantumcircuit import QuantumCircuit from qiskit.circuit.quantumregister import QuantumRegister from qiskit.quantum_info import SparsePauliOp +from .evolved_operator_ansatz import EvolvedOperatorAnsatz, _is_pauli_identity + class QAOAAnsatz(EvolvedOperatorAnsatz): """A generalized QAOA quantum circuit with a support of custom initial states and mixers. diff --git a/releasenotes/notes/move_evolved_operator_ansatz-5406bc071013c443.yaml b/releasenotes/notes/move_evolved_operator_ansatz-5406bc071013c443.yaml new file mode 100644 index 000000000000..91f993f594af --- /dev/null +++ b/releasenotes/notes/move_evolved_operator_ansatz-5406bc071013c443.yaml @@ -0,0 +1,9 @@ +--- +upgrade: + - | + The class :class:`.EvolvedOperatorAnsatz` has been migrated from + :mod:`qiskit.circuit.library` to :mod:`qiskit.circuit.library.n_local` to match + the location of its base class. This move has not affected the usual import path + of the class: ``from qiskit.circuit.library import EvolvedOperatorAnsatz``, but + now it is also accessible doing ``from qiskit.circuit.library.n_local import + EvolvedOperatorAnsatz``. diff --git a/test/python/circuit/library/test_evolved_op_ansatz.py b/test/python/circuit/library/test_evolved_op_ansatz.py index 000eb8cfb9df..c0b233692e5c 100644 --- a/test/python/circuit/library/test_evolved_op_ansatz.py +++ b/test/python/circuit/library/test_evolved_op_ansatz.py @@ -17,7 +17,8 @@ from qiskit.circuit import QuantumCircuit from qiskit.quantum_info import SparsePauliOp, Operator, Pauli -from qiskit.circuit.library import EvolvedOperatorAnsatz, HamiltonianGate +from qiskit.circuit.library import HamiltonianGate +from qiskit.circuit.library.n_local import EvolvedOperatorAnsatz from qiskit.synthesis.evolution import MatrixExponential from qiskit.test import QiskitTestCase @@ -51,11 +52,11 @@ def test_custom_evolution(self): reference.append(HamiltonianGate(matrix, parameters[0]), [0, 1, 2]) decomposed = evo.decompose().decompose() + self.assertEqual(decomposed, reference) def test_changing_operators(self): """Test rebuilding after the operators changed.""" - ops = [Pauli("X"), Pauli("Y"), Pauli("Z")] evo = EvolvedOperatorAnsatz(ops) evo.operators = [Pauli("X"), Pauli("Y")] @@ -79,6 +80,7 @@ def test_insert_barriers(self): for parameter in evo.parameters: ref.rz(2.0 * parameter, 0) ref.barrier() + self.assertEqual(evo.decompose(reps=2), ref) def test_empty_build_fails(self):