diff --git a/docs/tutorials/01_algorithms_introduction.ipynb b/docs/tutorials/01_algorithms_introduction.ipynb index 73192f5b..4dd67703 100644 --- a/docs/tutorials/01_algorithms_introduction.ipynb +++ b/docs/tutorials/01_algorithms_introduction.ipynb @@ -322,7 +322,7 @@ "source": [ "def callback(**kwargs):\n", " if kwargs[\"count\"] == 0:\n", - " print(f\"Callback function has been called!\")" + " print(\"Callback function has been called!\")" ] }, { diff --git a/docs/tutorials/05_qaoa.ipynb b/docs/tutorials/05_qaoa.ipynb index c375c4b5..5c43b1a2 100644 --- a/docs/tutorials/05_qaoa.ipynb +++ b/docs/tutorials/05_qaoa.ipynb @@ -208,7 +208,6 @@ ], "source": [ "from qiskit.primitives import StatevectorSampler\n", - "from qiskit.quantum_info import Pauli\n", "from qiskit.result import QuasiDistribution\n", "\n", "from qiskit_algorithms import QAOA\n", @@ -375,7 +374,7 @@ "source": [ "def callback(**kwargs):\n", " if kwargs[\"count\"] == 0:\n", - " print(f\"Callback function has been called!\")" + " print(\"Callback function has been called!\")" ] }, { diff --git a/docs/tutorials/06_grover.ipynb b/docs/tutorials/06_grover.ipynb index fe3209ff..a01b7f27 100644 --- a/docs/tutorials/06_grover.ipynb +++ b/docs/tutorials/06_grover.ipynb @@ -747,7 +747,7 @@ "source": [ "def callback(**kwargs):\n", " if kwargs[\"count\"] == 0:\n", - " print(f\"Callback function has been called!\")" + " print(\"Callback function has been called!\")" ] }, { diff --git a/docs/tutorials/10_pvqd.ipynb b/docs/tutorials/10_pvqd.ipynb index eb70792b..dbc75759 100644 --- a/docs/tutorials/10_pvqd.ipynb +++ b/docs/tutorials/10_pvqd.ipynb @@ -692,7 +692,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -701,7 +701,6 @@ "\n", "def exact(final_time, timestep, hamiltonian, initial_state):\n", " \"\"\"Get the exact values for energy and the observable.\"\"\"\n", - " O = observable.to_matrix()\n", " H = hamiltonian.to_matrix()\n", "\n", " energ, magn = [], [] # list of energies and magnetizations evaluated at timesteps timestep\n", diff --git a/qiskit_algorithms/amplitude_amplifiers/amplification_problem.py b/qiskit_algorithms/amplitude_amplifiers/amplification_problem.py index ee5017a6..7cbb70ef 100644 --- a/qiskit_algorithms/amplitude_amplifiers/amplification_problem.py +++ b/qiskit_algorithms/amplitude_amplifiers/amplification_problem.py @@ -14,7 +14,7 @@ from __future__ import annotations from collections.abc import Callable -from typing import Any, List, cast +from typing import Any, cast from qiskit.circuit import QuantumCircuit, Gate from qiskit.circuit.library import GroverOperator @@ -177,10 +177,10 @@ def is_good_state(self) -> Callable[[str], bool]: return self._is_good_state # returns None if no is_good_state arg has been set elif isinstance(self._is_good_state, list): if all(isinstance(good_bitstr, str) for good_bitstr in self._is_good_state): - return lambda bitstr: bitstr in cast(List[str], self._is_good_state) + return lambda bitstr: bitstr in cast(list[str], self._is_good_state) else: return lambda bitstr: all( - bitstr[good_index] == "1" for good_index in cast(List[int], self._is_good_state) + bitstr[good_index] == "1" for good_index in cast(list[int], self._is_good_state) ) return lambda bitstr: bitstr in cast(Statevector, self._is_good_state).probabilities_dict() diff --git a/qiskit_algorithms/amplitude_amplifiers/amplitude_amplifier.py b/qiskit_algorithms/amplitude_amplifiers/amplitude_amplifier.py index ca203019..30d14620 100644 --- a/qiskit_algorithms/amplitude_amplifiers/amplitude_amplifier.py +++ b/qiskit_algorithms/amplitude_amplifiers/amplitude_amplifier.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2021, 2023. +# (C) Copyright IBM 2021, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -24,7 +24,7 @@ class AmplitudeAmplifier(ABC): """The interface for amplification algorithms.""" @abstractmethod - def amplify(self, amplification_problem: AmplificationProblem) -> "AmplitudeAmplifierResult": + def amplify(self, amplification_problem: AmplificationProblem) -> AmplitudeAmplifierResult: """Run the amplification algorithm. Args: diff --git a/qiskit_algorithms/amplitude_amplifiers/grover.py b/qiskit_algorithms/amplitude_amplifiers/grover.py index 3ebdb34f..e515be93 100644 --- a/qiskit_algorithms/amplitude_amplifiers/grover.py +++ b/qiskit_algorithms/amplitude_amplifiers/grover.py @@ -192,7 +192,7 @@ def sampler(self, sampler: BaseSamplerV2) -> None: """ self._sampler = sampler - def amplify(self, amplification_problem: AmplificationProblem) -> "GroverResult": + def amplify(self, amplification_problem: AmplificationProblem) -> GroverResult: """Run the Grover algorithm. Args: diff --git a/qiskit_algorithms/amplitude_estimators/ae.py b/qiskit_algorithms/amplitude_estimators/ae.py index 1e037743..d71804bc 100644 --- a/qiskit_algorithms/amplitude_estimators/ae.py +++ b/qiskit_algorithms/amplitude_estimators/ae.py @@ -228,7 +228,7 @@ def _evaluate_count_results(self, counts) -> tuple[dict[float, float], dict[int, @staticmethod def compute_mle( - result: "AmplitudeEstimationResult", apply_post_processing: bool = False + result: AmplitudeEstimationResult, apply_post_processing: bool = False ) -> float: """Compute the Maximum Likelihood Estimator (MLE). @@ -285,7 +285,7 @@ def loglikelihood(a): return a_opt - def estimate(self, estimation_problem: EstimationProblem) -> "AmplitudeEstimationResult": + def estimate(self, estimation_problem: EstimationProblem) -> AmplitudeEstimationResult: """Run the amplitude estimation algorithm on provided estimation problem. Args: @@ -379,7 +379,7 @@ def estimate(self, estimation_problem: EstimationProblem) -> "AmplitudeEstimatio @staticmethod def compute_confidence_interval( - result: "AmplitudeEstimationResult", + result: AmplitudeEstimationResult, alpha: float = 0.05, kind: str = "likelihood_ratio", ) -> tuple[float, float]: diff --git a/qiskit_algorithms/amplitude_estimators/amplitude_estimator.py b/qiskit_algorithms/amplitude_estimators/amplitude_estimator.py index a5c4b97e..5ba16bda 100644 --- a/qiskit_algorithms/amplitude_estimators/amplitude_estimator.py +++ b/qiskit_algorithms/amplitude_estimators/amplitude_estimator.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2018, 2023. +# (C) Copyright IBM 2018, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -24,7 +24,7 @@ class AmplitudeEstimator(ABC): """The Amplitude Estimation interface.""" @abstractmethod - def estimate(self, estimation_problem: EstimationProblem) -> "AmplitudeEstimatorResult": + def estimate(self, estimation_problem: EstimationProblem) -> AmplitudeEstimatorResult: """Run the amplitude estimation algorithm. Args: diff --git a/qiskit_algorithms/amplitude_estimators/estimation_problem.py b/qiskit_algorithms/amplitude_estimators/estimation_problem.py index 282ca4cd..875bd83e 100644 --- a/qiskit_algorithms/amplitude_estimators/estimation_problem.py +++ b/qiskit_algorithms/amplitude_estimators/estimation_problem.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2020, 2024. +# (C) Copyright IBM 2020, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -202,7 +202,7 @@ def grover_operator(self, grover_operator: QuantumCircuit | None) -> None: """ self._grover_operator = grover_operator - def rescale(self, scaling_factor: float) -> "EstimationProblem": + def rescale(self, scaling_factor: float) -> EstimationProblem: """Rescale the good state amplitude in the estimation problem. Args: diff --git a/qiskit_algorithms/amplitude_estimators/fae.py b/qiskit_algorithms/amplitude_estimators/fae.py index 62b96686..e8d523ad 100644 --- a/qiskit_algorithms/amplitude_estimators/fae.py +++ b/qiskit_algorithms/amplitude_estimators/fae.py @@ -13,7 +13,7 @@ """Faster Amplitude Estimation.""" from __future__ import annotations -from typing import cast, Tuple, Any +from typing import cast, Any import warnings import numpy as np @@ -182,7 +182,7 @@ def construct_circuit( return circuit - def estimate(self, estimation_problem: EstimationProblem) -> "FasterAmplitudeEstimationResult": + def estimate(self, estimation_problem: EstimationProblem) -> FasterAmplitudeEstimationResult: """Run the amplitude estimation algorithm on provided estimation problem. Args: @@ -264,7 +264,7 @@ def cos_estimate(power, shots): result.estimation_processed = problem.post_processing(value) # type: ignore[assignment] result.confidence_interval = value_ci result.confidence_interval_processed = cast( - Tuple[float, float], (problem.post_processing(x) for x in value_ci) + tuple[float, float], (problem.post_processing(x) for x in value_ci) ) result.theta_intervals = theta_cis diff --git a/qiskit_algorithms/amplitude_estimators/iae.py b/qiskit_algorithms/amplitude_estimators/iae.py index 82770497..34800991 100644 --- a/qiskit_algorithms/amplitude_estimators/iae.py +++ b/qiskit_algorithms/amplitude_estimators/iae.py @@ -13,7 +13,8 @@ """The Iterative Quantum Amplitude Estimation Algorithm.""" from __future__ import annotations -from typing import cast, Callable, Tuple, Any +from typing import cast, Any +from collections.abc import Callable import warnings import numpy as np from scipy.stats import beta @@ -268,9 +269,7 @@ def _good_state_probability( return int(one_counts), one_counts / sum(counts_dict.values()) - def estimate( - self, estimation_problem: EstimationProblem - ) -> "IterativeAmplitudeEstimationResult": + def estimate(self, estimation_problem: EstimationProblem) -> IterativeAmplitudeEstimationResult: """Run the amplitude estimation algorithm on provided estimation problem. Args: @@ -384,7 +383,7 @@ def estimate( a_intervals.append([a_l, a_u]) # get the latest confidence interval for the estimate of a - confidence_interval = cast(Tuple[float, float], a_intervals[-1]) + confidence_interval = cast(tuple[float, float], a_intervals[-1]) # the final estimate is the mean of the confidence interval estimation = np.mean(confidence_interval) diff --git a/qiskit_algorithms/amplitude_estimators/mlae.py b/qiskit_algorithms/amplitude_estimators/mlae.py index eac75932..9f514f6b 100644 --- a/qiskit_algorithms/amplitude_estimators/mlae.py +++ b/qiskit_algorithms/amplitude_estimators/mlae.py @@ -13,14 +13,13 @@ """The Maximum Likelihood Amplitude Estimation algorithm.""" from __future__ import annotations -from collections.abc import Sequence -from typing import Callable, List, Tuple, cast, Any +from collections.abc import Callable, Sequence +from typing import cast, Any import warnings import numpy as np from scipy.optimize import brute from scipy.stats import norm, chi2 - from qiskit import ClassicalRegister, QuantumRegister, QuantumCircuit from qiskit.primitives import BaseSamplerV2, StatevectorSampler @@ -29,7 +28,8 @@ from ..custom_types import Transpiler from ..exceptions import AlgorithmError -MINIMIZER = Callable[[Callable[[float], float], List[Tuple[float, float]]], float] + +MINIMIZER = Callable[[Callable[[float], float], list[tuple[float, float]]], float] class MaximumLikelihoodAmplitudeEstimation(AmplitudeEstimator): @@ -181,7 +181,7 @@ def construct_circuits( @staticmethod def compute_confidence_interval( - result: "MaximumLikelihoodAmplitudeEstimationResult", + result: MaximumLikelihoodAmplitudeEstimationResult, alpha: float, kind: str = "fisher", apply_post_processing: bool = False, @@ -269,7 +269,7 @@ def loglikelihood(theta): def estimate( self, estimation_problem: EstimationProblem - ) -> "MaximumLikelihoodAmplitudeEstimationResult": + ) -> MaximumLikelihoodAmplitudeEstimationResult: """Run the amplitude estimation algorithm on provided estimation problem. Args: @@ -320,7 +320,7 @@ def estimate( num_state_qubits = circuits[0].num_qubits - circuits[0].num_ancillas theta, good_counts = cast( - Tuple[float, List[float]], + tuple[float, list[float]], self.compute_mle(result.circuit_results, estimation_problem, num_state_qubits, True), ) @@ -424,7 +424,7 @@ def _safe_max( def _compute_fisher_information( - result: "MaximumLikelihoodAmplitudeEstimationResult", + result: MaximumLikelihoodAmplitudeEstimationResult, num_sum_terms: int | None = None, observed: bool = False, ) -> float: @@ -558,7 +558,7 @@ def loglikelihood(theta, one_counts, all_counts): # then yield [0, pi/2] confint = [_safe_min(above_thres, default=0), _safe_max(above_thres, default=np.pi / 2)] mapped_confint = cast( - Tuple[float, float], tuple(result.post_processing(np.sin(bound) ** 2) for bound in confint) + tuple[float, float], tuple(result.post_processing(np.sin(bound) ** 2) for bound in confint) ) return mapped_confint diff --git a/qiskit_algorithms/custom_types.py b/qiskit_algorithms/custom_types.py index 8cb21f45..13999770 100644 --- a/qiskit_algorithms/custom_types.py +++ b/qiskit_algorithms/custom_types.py @@ -13,16 +13,29 @@ """Types used by the qiskit-algorithms package.""" from __future__ import annotations -from typing import Any, Protocol, Union +from typing import Any, Protocol, TypeAlias, TypeVar, overload from qiskit import QuantumCircuit -_Circuits = Union[list[QuantumCircuit], QuantumCircuit] +_T = TypeVar("_T") # Pylint does not allow single character class names. +ListOrDict = list[_T | None] | dict[str, _T] + +_Circuits: TypeAlias = list[QuantumCircuit] | QuantumCircuit class Transpiler(Protocol): """A Generic type to represent a transpiler.""" - def run(self, circuits: _Circuits, **options: Any) -> _Circuits: + @overload + def run(self, circuits: list[QuantumCircuit], /, **options: Any) -> list[QuantumCircuit]: + """Transpile a list of quantum circuits.""" + ... + + @overload + def run(self, circuits: QuantumCircuit, /, **options: Any) -> QuantumCircuit: + """Transpile a single quantum circuit.""" + ... + + def run(self, circuits: _Circuits, /, **options: Any) -> _Circuits: """Transpile a circuit or a list of quantum circuits.""" pass diff --git a/qiskit_algorithms/eigensolvers/eigensolver.py b/qiskit_algorithms/eigensolvers/eigensolver.py index c60ab65e..79b17086 100644 --- a/qiskit_algorithms/eigensolvers/eigensolver.py +++ b/qiskit_algorithms/eigensolvers/eigensolver.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2022, 2023. +# (C) Copyright IBM 2022, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -21,7 +21,7 @@ from qiskit.quantum_info.operators.base_operator import BaseOperator from ..algorithm_result import AlgorithmResult -from ..list_or_dict import ListOrDict +from ..custom_types import ListOrDict class Eigensolver(ABC): @@ -37,7 +37,7 @@ def compute_eigenvalues( self, operator: BaseOperator, aux_operators: ListOrDict[BaseOperator] | None = None, - ) -> "EigensolverResult": + ) -> EigensolverResult: """ Computes the minimum eigenvalue. The ``operator`` and ``aux_operators`` are supplied here. While an ``operator`` is required by algorithms, ``aux_operators`` are optional. diff --git a/qiskit_algorithms/eigensolvers/numpy_eigensolver.py b/qiskit_algorithms/eigensolvers/numpy_eigensolver.py index b5deb93a..42147c89 100644 --- a/qiskit_algorithms/eigensolvers/numpy_eigensolver.py +++ b/qiskit_algorithms/eigensolvers/numpy_eigensolver.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2022, 2024. +# (C) Copyright IBM 2022, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -14,8 +14,8 @@ from __future__ import annotations -from collections.abc import Iterable -from typing import Callable, Union, Tuple, Dict, List, Optional, cast +from collections.abc import Callable, Iterable +from typing import cast import logging import numpy as np from scipy import sparse as scisparse @@ -26,12 +26,12 @@ from qiskit_algorithms.utils.validation import validate_min from .eigensolver import Eigensolver, EigensolverResult from ..exceptions import AlgorithmError -from ..list_or_dict import ListOrDict +from ..custom_types import ListOrDict logger = logging.getLogger(__name__) FilterType = Callable[ - [Union[List, np.ndarray], float, Optional[ListOrDict[Tuple[float, Dict[str, float]]]]], bool + [list | np.ndarray, float, ListOrDict[tuple[float, dict[str, float]]] | None], bool ] @@ -162,9 +162,9 @@ def _solve_sparse(op_matrix: scisparse.csr_matrix, k: int) -> tuple[np.ndarray, def _solve_dense(op_matrix: np.ndarray) -> tuple[np.ndarray, np.ndarray]: if op_matrix.all() == op_matrix.conj().T.all(): # Operator is Hermitian - return cast(Tuple[np.ndarray, np.ndarray], np.linalg.eigh(op_matrix)) + return cast(tuple[np.ndarray, np.ndarray], np.linalg.eigh(op_matrix)) else: - return cast(Tuple[np.ndarray, np.ndarray], np.linalg.eig(op_matrix)) + return cast(tuple[np.ndarray, np.ndarray], np.linalg.eig(op_matrix)) @staticmethod def _eval_aux_operators( diff --git a/qiskit_algorithms/eigensolvers/vqd.py b/qiskit_algorithms/eigensolvers/vqd.py index 9b98a416..023388c6 100644 --- a/qiskit_algorithms/eigensolvers/vqd.py +++ b/qiskit_algorithms/eigensolvers/vqd.py @@ -33,7 +33,7 @@ from .eigensolver import Eigensolver, EigensolverResult from ..custom_types import Transpiler from ..exceptions import AlgorithmError -from ..list_or_dict import ListOrDict +from ..custom_types import ListOrDict from ..observables_evaluator import estimate_observables from ..optimizers import Optimizer, Minimizer, OptimizerResult from ..utils import validate_bounds, validate_initial_point @@ -444,7 +444,7 @@ def _get_evaluate_energy( # pylint: disable=too-many-positional-arguments step: int, operator: BaseOperator, betas: np.ndarray, - current_optimal_point: dict["str", Any], + current_optimal_point: dict[str, Any], prev_states: list[QuantumCircuit] | None = None, ) -> Callable[[np.ndarray], float | np.ndarray]: """Returns a function handle to evaluate the ansatz's energy for any given parameters. diff --git a/qiskit_algorithms/gradients/base/estimator_gradient_result.py b/qiskit_algorithms/gradients/base/estimator_gradient_result.py index 17b742ba..e51a4503 100644 --- a/qiskit_algorithms/gradients/base/estimator_gradient_result.py +++ b/qiskit_algorithms/gradients/base/estimator_gradient_result.py @@ -16,7 +16,8 @@ from __future__ import annotations from dataclasses import dataclass -from typing import Any, Sequence +from typing import Any +from collections.abc import Sequence import numpy as np diff --git a/qiskit_algorithms/gradients/base/qgt_result.py b/qiskit_algorithms/gradients/base/qgt_result.py index 543ec378..b53980a9 100644 --- a/qiskit_algorithms/gradients/base/qgt_result.py +++ b/qiskit_algorithms/gradients/base/qgt_result.py @@ -16,7 +16,8 @@ from __future__ import annotations from dataclasses import dataclass -from typing import Any, Sequence +from typing import Any +from collections.abc import Sequence import numpy as np diff --git a/qiskit_algorithms/gradients/base/sampler_gradient_result.py b/qiskit_algorithms/gradients/base/sampler_gradient_result.py index 0bf09d3d..5b205c48 100644 --- a/qiskit_algorithms/gradients/base/sampler_gradient_result.py +++ b/qiskit_algorithms/gradients/base/sampler_gradient_result.py @@ -15,7 +15,8 @@ from __future__ import annotations -from typing import Any, Sequence +from typing import Any +from collections.abc import Sequence from dataclasses import dataclass diff --git a/qiskit_algorithms/gradients/finite_diff/finite_diff_sampler_gradient.py b/qiskit_algorithms/gradients/finite_diff/finite_diff_sampler_gradient.py index 182275f9..6de8ec6e 100644 --- a/qiskit_algorithms/gradients/finite_diff/finite_diff_sampler_gradient.py +++ b/qiskit_algorithms/gradients/finite_diff/finite_diff_sampler_gradient.py @@ -15,7 +15,8 @@ from __future__ import annotations from collections import defaultdict -from typing import Literal, Sequence, Any +from collections.abc import Sequence +from typing import Literal, Any import numpy as np diff --git a/qiskit_algorithms/gradients/qfi_result.py b/qiskit_algorithms/gradients/qfi_result.py index 77a39ad2..6d0bc7f7 100644 --- a/qiskit_algorithms/gradients/qfi_result.py +++ b/qiskit_algorithms/gradients/qfi_result.py @@ -16,7 +16,8 @@ from __future__ import annotations from dataclasses import dataclass -from typing import Any, Sequence +from typing import Any +from collections.abc import Sequence import numpy as np diff --git a/qiskit_algorithms/gradients/reverse/reverse_qgt.py b/qiskit_algorithms/gradients/reverse/reverse_qgt.py index 6cf01907..0d931745 100644 --- a/qiskit_algorithms/gradients/reverse/reverse_qgt.py +++ b/qiskit_algorithms/gradients/reverse/reverse_qgt.py @@ -14,7 +14,7 @@ from __future__ import annotations from collections.abc import Sequence -from typing import cast, List +from typing import cast import logging import numpy as np @@ -114,7 +114,7 @@ def _run_unique( # initialize the state variables -- naming convention is the same as the paper parameter_binds = dict(zip(circuit.parameters, values)) - bound_unitaries = cast(List[QuantumCircuit], bind(unitaries, parameter_binds)) + bound_unitaries = cast(list[QuantumCircuit], bind(unitaries, parameter_binds)) chi = Statevector(bound_unitaries[0]) psi = chi.copy() diff --git a/qiskit_algorithms/list_or_dict.py b/qiskit_algorithms/list_or_dict.py deleted file mode 100644 index 658459b0..00000000 --- a/qiskit_algorithms/list_or_dict.py +++ /dev/null @@ -1,18 +0,0 @@ -# This code is part of a Qiskit project. -# -# (C) Copyright IBM 2022, 2023. -# -# This code is licensed under the Apache License, Version 2.0. You may -# obtain a copy of this license in the LICENSE.txt file in the root directory -# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0. -# -# Any modifications or derivative works of this code must retain this -# copyright notice, and modified files need to carry a notice indicating -# that they have been altered from the originals. - -"""Introduced new type to maintain readability.""" - -from typing import TypeVar, List, Union, Optional, Dict - -_T = TypeVar("_T") # Pylint does not allow single character class names. -ListOrDict = Union[List[Optional[_T]], Dict[str, _T]] diff --git a/qiskit_algorithms/minimum_eigensolvers/adapt_vqe.py b/qiskit_algorithms/minimum_eigensolvers/adapt_vqe.py index d4033d9a..d2b28d93 100644 --- a/qiskit_algorithms/minimum_eigensolvers/adapt_vqe.py +++ b/qiskit_algorithms/minimum_eigensolvers/adapt_vqe.py @@ -16,9 +16,8 @@ import logging import re import warnings -from collections.abc import Sequence +from collections.abc import Iterable, Sequence from enum import Enum -from typing import Iterable import numpy as np from qiskit import QuantumCircuit @@ -27,8 +26,8 @@ from qiskit.quantum_info.operators.base_operator import BaseOperator from qiskit.version import get_version_info as get_qiskit_version_info +from qiskit_algorithms.custom_types import ListOrDict from qiskit_algorithms.exceptions import AlgorithmError -from qiskit_algorithms.list_or_dict import ListOrDict from qiskit_algorithms.utils.validation import validate_min from .minimum_eigensolver import MinimumEigensolver from .vqe import VQE, VQEResult diff --git a/qiskit_algorithms/minimum_eigensolvers/minimum_eigensolver.py b/qiskit_algorithms/minimum_eigensolvers/minimum_eigensolver.py index 5c5d4244..d2eb259c 100644 --- a/qiskit_algorithms/minimum_eigensolvers/minimum_eigensolver.py +++ b/qiskit_algorithms/minimum_eigensolvers/minimum_eigensolver.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2022, 2023. +# (C) Copyright IBM 2022, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -20,7 +20,7 @@ from qiskit.quantum_info.operators.base_operator import BaseOperator from ..algorithm_result import AlgorithmResult -from ..list_or_dict import ListOrDict +from ..custom_types import ListOrDict class MinimumEigensolver(ABC): @@ -35,7 +35,7 @@ def compute_minimum_eigenvalue( self, operator: BaseOperator, aux_operators: ListOrDict[BaseOperator] | None = None, - ) -> "MinimumEigensolverResult": + ) -> MinimumEigensolverResult: """ Computes the minimum eigenvalue. The ``operator`` and ``aux_operators`` are supplied here. While an ``operator`` is required by algorithms, ``aux_operators`` are optional. diff --git a/qiskit_algorithms/minimum_eigensolvers/numpy_minimum_eigensolver.py b/qiskit_algorithms/minimum_eigensolvers/numpy_minimum_eigensolver.py index 6e564c7c..98d09827 100644 --- a/qiskit_algorithms/minimum_eigensolvers/numpy_minimum_eigensolver.py +++ b/qiskit_algorithms/minimum_eigensolvers/numpy_minimum_eigensolver.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2022, 2023. +# (C) Copyright IBM 2022, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -14,7 +14,7 @@ from __future__ import annotations -from typing import Callable, Union, Tuple, Dict, List, Optional +from collections.abc import Callable import logging import numpy as np @@ -23,13 +23,13 @@ from ..eigensolvers.numpy_eigensolver import NumPyEigensolver from .minimum_eigensolver import MinimumEigensolver, MinimumEigensolverResult -from ..list_or_dict import ListOrDict +from ..custom_types import ListOrDict logger = logging.getLogger(__name__) # future type annotations not supported in type aliases in 3.8 FilterType = Callable[ - [Union[List, np.ndarray], float, Optional[ListOrDict[Tuple[float, Dict[str, float]]]]], bool + [list | np.ndarray, float, ListOrDict[tuple[float, dict[str, float]]] | None], bool ] diff --git a/qiskit_algorithms/minimum_eigensolvers/qaoa.py b/qiskit_algorithms/minimum_eigensolvers/qaoa.py index bdc8b7dc..7b538dfe 100644 --- a/qiskit_algorithms/minimum_eigensolvers/qaoa.py +++ b/qiskit_algorithms/minimum_eigensolvers/qaoa.py @@ -14,7 +14,8 @@ from __future__ import annotations -from typing import Callable, Any +from typing import Any +from collections.abc import Callable import numpy as np from qiskit.circuit import QuantumCircuit diff --git a/qiskit_algorithms/minimum_eigensolvers/sampling_mes.py b/qiskit_algorithms/minimum_eigensolvers/sampling_mes.py index 82cfa4de..a0500245 100644 --- a/qiskit_algorithms/minimum_eigensolvers/sampling_mes.py +++ b/qiskit_algorithms/minimum_eigensolvers/sampling_mes.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2022, 2023. +# (C) Copyright IBM 2022, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -20,7 +20,7 @@ from qiskit.quantum_info.operators.base_operator import BaseOperator from qiskit.result import QuasiDistribution from ..algorithm_result import AlgorithmResult -from ..list_or_dict import ListOrDict +from ..custom_types import ListOrDict class SamplingMinimumEigensolver(ABC): @@ -31,7 +31,7 @@ def compute_minimum_eigenvalue( self, operator: BaseOperator, aux_operators: ListOrDict[BaseOperator] | None = None, - ) -> "SamplingMinimumEigensolverResult": + ) -> SamplingMinimumEigensolverResult: """Compute the minimum eigenvalue of a diagonal operator. Args: diff --git a/qiskit_algorithms/minimum_eigensolvers/sampling_vqe.py b/qiskit_algorithms/minimum_eigensolvers/sampling_vqe.py index fe928ea4..84d9c8ef 100644 --- a/qiskit_algorithms/minimum_eigensolvers/sampling_vqe.py +++ b/qiskit_algorithms/minimum_eigensolvers/sampling_vqe.py @@ -28,7 +28,7 @@ from qiskit.quantum_info.operators.base_operator import BaseOperator from ..exceptions import AlgorithmError -from ..list_or_dict import ListOrDict +from ..custom_types import ListOrDict from ..optimizers import Minimizer, Optimizer, OptimizerResult from ..variational_algorithm import VariationalAlgorithm, VariationalResult from .diagonal_estimator import _DiagonalEstimator diff --git a/qiskit_algorithms/minimum_eigensolvers/vqe.py b/qiskit_algorithms/minimum_eigensolvers/vqe.py index 34f5948d..a2b9df81 100644 --- a/qiskit_algorithms/minimum_eigensolvers/vqe.py +++ b/qiskit_algorithms/minimum_eigensolvers/vqe.py @@ -17,11 +17,10 @@ import logging import warnings from time import time -from collections.abc import Callable -from typing import Any, Iterable +from collections.abc import Callable, Iterable +from typing import Any import numpy as np - from qiskit.circuit import QuantumCircuit from qiskit.primitives import BaseEstimatorV2 from qiskit.quantum_info import SparsePauliOp @@ -29,18 +28,18 @@ from qiskit_algorithms.gradients import BaseEstimatorGradient from ..custom_types import Transpiler - from ..exceptions import AlgorithmError -from ..list_or_dict import ListOrDict +from ..custom_types import ListOrDict from ..optimizers import Optimizer, Minimizer, OptimizerResult from ..variational_algorithm import VariationalAlgorithm, VariationalResult from .minimum_eigensolver import MinimumEigensolver, MinimumEigensolverResult from ..observables_evaluator import estimate_observables from ..utils import validate_initial_point, validate_bounds -# private function as we expect this to be updated in the next released +# private function as we expect this to be updated in the next release from ..utils.set_batching import _set_default_batchsize + logger = logging.getLogger(__name__) diff --git a/qiskit_algorithms/observables_evaluator.py b/qiskit_algorithms/observables_evaluator.py index 94f3b70f..6365b24e 100644 --- a/qiskit_algorithms/observables_evaluator.py +++ b/qiskit_algorithms/observables_evaluator.py @@ -24,7 +24,7 @@ from qiskit.quantum_info.operators.base_operator import BaseOperator from .exceptions import AlgorithmError -from .list_or_dict import ListOrDict +from .custom_types import ListOrDict # TODO: make estimate_observables accept EstimatorPubLike inputs diff --git a/qiskit_algorithms/optimizers/gradient_descent.py b/qiskit_algorithms/optimizers/gradient_descent.py index 9b692c6a..10c20186 100644 --- a/qiskit_algorithms/optimizers/gradient_descent.py +++ b/qiskit_algorithms/optimizers/gradient_descent.py @@ -13,10 +13,11 @@ """A standard gradient descent optimizer.""" from __future__ import annotations -from collections.abc import Generator +from collections.abc import Callable, Generator from dataclasses import dataclass, field -from typing import Any, Callable, SupportsFloat +from typing import Any, SupportsFloat import numpy as np + from .optimizer import Optimizer, OptimizerSupportLevel, OptimizerResult, POINT from .steppable_optimizer import AskData, TellData, OptimizerState, SteppableOptimizer from .optimizer_utils import LearningRate diff --git a/qiskit_algorithms/optimizers/optimizer.py b/qiskit_algorithms/optimizers/optimizer.py index cf6ef062..d827d89f 100644 --- a/qiskit_algorithms/optimizers/optimizer.py +++ b/qiskit_algorithms/optimizers/optimizer.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2018, 2023. +# (C) Copyright IBM 2018, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -18,7 +18,7 @@ from collections.abc import Callable from enum import IntEnum import logging -from typing import Any, Union, Protocol +from typing import Any, Protocol import numpy as np import scipy @@ -27,7 +27,7 @@ logger = logging.getLogger(__name__) -POINT = Union[float, np.ndarray] # pylint: disable=invalid-name +POINT = float | np.ndarray # pylint: disable=invalid-name class OptimizerResult(AlgorithmResult): diff --git a/qiskit_algorithms/optimizers/qnspsa.py b/qiskit_algorithms/optimizers/qnspsa.py index 80294029..4e75871e 100644 --- a/qiskit_algorithms/optimizers/qnspsa.py +++ b/qiskit_algorithms/optimizers/qnspsa.py @@ -14,15 +14,14 @@ from __future__ import annotations -from collections.abc import Iterator -from typing import Any, Callable +from collections.abc import Callable, Iterator +from typing import Any import numpy as np from qiskit.circuit import QuantumCircuit - from qiskit.primitives import BaseSamplerV2 -from qiskit_algorithms.state_fidelities import ComputeUncompute +from qiskit_algorithms.state_fidelities import ComputeUncompute from .spsa import SPSA, CALLBACK, TERMINATIONCHECKER, _batch_evaluate from ..custom_types import Transpiler diff --git a/qiskit_algorithms/optimizers/spsa.py b/qiskit_algorithms/optimizers/spsa.py index 9e679ef9..b8bbaac0 100644 --- a/qiskit_algorithms/optimizers/spsa.py +++ b/qiskit_algorithms/optimizers/spsa.py @@ -17,8 +17,8 @@ from __future__ import annotations from collections import deque -from collections.abc import Iterator -from typing import Callable, Any, SupportsFloat +from collections.abc import Callable, Iterator +from typing import Any, SupportsFloat import logging import warnings from time import time diff --git a/qiskit_algorithms/phase_estimators/ipe.py b/qiskit_algorithms/phase_estimators/ipe.py index a7fa880b..fbbaf169 100644 --- a/qiskit_algorithms/phase_estimators/ipe.py +++ b/qiskit_algorithms/phase_estimators/ipe.py @@ -159,7 +159,7 @@ def _estimate_phase_iteratively(self, unitary, state_preparation): # pylint: disable=signature-differs def estimate( self, unitary: QuantumCircuit, state_preparation: QuantumCircuit | None = None - ) -> "IterativePhaseEstimationResult": + ) -> IterativePhaseEstimationResult: """ Estimate the eigenphase of the input unitary and initial-state pair. diff --git a/qiskit_algorithms/phase_estimators/phase_estimation_scale.py b/qiskit_algorithms/phase_estimators/phase_estimation_scale.py index 25e06a32..3bd48d15 100644 --- a/qiskit_algorithms/phase_estimators/phase_estimation_scale.py +++ b/qiskit_algorithms/phase_estimators/phase_estimation_scale.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2020, 2023. +# (C) Copyright IBM 2020, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -116,7 +116,7 @@ def scale_phases(self, phases: list | dict, id_coefficient: float = 0.0) -> dict @classmethod def from_pauli_sum( cls, pauli_sum: SparsePauliOp | Operator | BaseOperator - ) -> "PhaseEstimationScale": + ) -> PhaseEstimationScale: """Create a PhaseEstimationScale from a `SummedOp` representing a sum of Pauli Operators. It is assumed that the ``pauli_sum`` is the sum of ``PauliOp`` objects. The bound on diff --git a/qiskit_algorithms/phase_estimators/phase_estimator.py b/qiskit_algorithms/phase_estimators/phase_estimator.py index e4001cbb..db46c333 100644 --- a/qiskit_algorithms/phase_estimators/phase_estimator.py +++ b/qiskit_algorithms/phase_estimators/phase_estimator.py @@ -34,7 +34,7 @@ def estimate( self, unitary: QuantumCircuit, state_preparation: QuantumCircuit | None = None, - ) -> "PhaseEstimatorResult": + ) -> PhaseEstimatorResult: """Estimate the phase.""" raise NotImplementedError diff --git a/qiskit_algorithms/state_fidelities/base_state_fidelity.py b/qiskit_algorithms/state_fidelities/base_state_fidelity.py index b9f1b0b4..1d302bad 100644 --- a/qiskit_algorithms/state_fidelities/base_state_fidelity.py +++ b/qiskit_algorithms/state_fidelities/base_state_fidelity.py @@ -15,8 +15,8 @@ from __future__ import annotations from abc import ABC, abstractmethod -from collections.abc import MutableMapping -from typing import cast, Sequence, List, Any +from collections.abc import MutableMapping, Sequence +from typing import cast, Any import numpy as np from qiskit import QuantumCircuit @@ -112,11 +112,11 @@ def _preprocess_values( # ensure 2d if len(values) > 0 and not isinstance(values[0], Sequence) or len(values) == 0: - values = [cast(List[float], values)] + values = [cast(list[float], values)] # we explicitly cast the type here because mypy appears to be unable to understand the # above few lines where we ensure that values are 2d - return cast(Sequence[List[float]], values) + return cast(Sequence[list[float]], values) def _check_qubits_match(self, circuit_1: QuantumCircuit, circuit_2: QuantumCircuit) -> None: """ diff --git a/qiskit_algorithms/time_evolvers/classical_methods/evolve.py b/qiskit_algorithms/time_evolvers/classical_methods/evolve.py index 57f42f2c..f51e74a9 100644 --- a/qiskit_algorithms/time_evolvers/classical_methods/evolve.py +++ b/qiskit_algorithms/time_evolvers/classical_methods/evolve.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2022, 2023. +# (C) Copyright IBM 2022, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -24,7 +24,7 @@ from ..time_evolution_result import TimeEvolutionResult from ...exceptions import AlgorithmError -from ...list_or_dict import ListOrDict +from ...custom_types import ListOrDict logger = logging.getLogger(__name__) diff --git a/qiskit_algorithms/time_evolvers/time_evolution_problem.py b/qiskit_algorithms/time_evolvers/time_evolution_problem.py index 7688070f..91f73808 100644 --- a/qiskit_algorithms/time_evolvers/time_evolution_problem.py +++ b/qiskit_algorithms/time_evolvers/time_evolution_problem.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2022, 2024. +# (C) Copyright IBM 2022, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -20,7 +20,7 @@ from qiskit.quantum_info import Statevector from qiskit.quantum_info.operators.base_operator import BaseOperator -from ..list_or_dict import ListOrDict +from ..custom_types import ListOrDict class TimeEvolutionProblem: diff --git a/qiskit_algorithms/time_evolvers/time_evolution_result.py b/qiskit_algorithms/time_evolvers/time_evolution_result.py index 8bc51f0f..a6dd34af 100644 --- a/qiskit_algorithms/time_evolvers/time_evolution_result.py +++ b/qiskit_algorithms/time_evolvers/time_evolution_result.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2021, 2023. +# (C) Copyright IBM 2021, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -16,7 +16,8 @@ from qiskit import QuantumCircuit from qiskit.quantum_info import Statevector -from qiskit_algorithms.list_or_dict import ListOrDict + +from qiskit_algorithms.custom_types import ListOrDict from ..algorithm_result import AlgorithmResult diff --git a/qiskit_algorithms/time_evolvers/variational/solvers/ode/var_qte_ode_solver.py b/qiskit_algorithms/time_evolvers/variational/solvers/ode/var_qte_ode_solver.py index 583f5348..4772bc5d 100644 --- a/qiskit_algorithms/time_evolvers/variational/solvers/ode/var_qte_ode_solver.py +++ b/qiskit_algorithms/time_evolvers/variational/solvers/ode/var_qte_ode_solver.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2023. +# (C) Copyright IBM 2023, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -15,7 +15,6 @@ from collections.abc import Sequence from functools import partial -from typing import Type import numpy as np from scipy.integrate import OdeSolver, solve_ivp @@ -31,7 +30,7 @@ def __init__( self, init_params: Sequence[float], ode_function: AbstractOdeFunction, - ode_solver: Type[OdeSolver] | str = ForwardEulerSolver, + ode_solver: type[OdeSolver] | str = ForwardEulerSolver, num_timesteps: int | None = None, ) -> None: """ diff --git a/qiskit_algorithms/time_evolvers/variational/var_qite.py b/qiskit_algorithms/time_evolvers/variational/var_qite.py index fc4d2dca..7ee4dcc1 100644 --- a/qiskit_algorithms/time_evolvers/variational/var_qite.py +++ b/qiskit_algorithms/time_evolvers/variational/var_qite.py @@ -13,8 +13,8 @@ """Variational Quantum Imaginary Time Evolution algorithm.""" from __future__ import annotations -from collections.abc import Mapping, Sequence -from typing import Type, Callable, Any +from collections.abc import Callable, Mapping, Sequence +from typing import Any import numpy as np from scipy.integrate import OdeSolver @@ -80,7 +80,7 @@ def __init__( initial_parameters: Mapping[Parameter, float] | Sequence[float], variational_principle: ImaginaryVariationalPrinciple | None = None, estimator: BaseEstimatorV2 | None = None, - ode_solver: Type[OdeSolver] | str = ForwardEulerSolver, + ode_solver: type[OdeSolver] | str = ForwardEulerSolver, lse_solver: Callable[[np.ndarray, np.ndarray], np.ndarray] | None = None, num_timesteps: int | None = None, imag_part_tol: float = 1e-7, diff --git a/qiskit_algorithms/time_evolvers/variational/var_qrte.py b/qiskit_algorithms/time_evolvers/variational/var_qrte.py index 32d7f006..5d348419 100644 --- a/qiskit_algorithms/time_evolvers/variational/var_qrte.py +++ b/qiskit_algorithms/time_evolvers/variational/var_qrte.py @@ -13,21 +13,18 @@ """Variational Quantum Real Time Evolution algorithm.""" from __future__ import annotations -from collections.abc import Mapping, Sequence -from typing import Type, Callable, Any +from collections.abc import Callable, Mapping, Sequence +from typing import Any import numpy as np from scipy.integrate import OdeSolver - from qiskit import QuantumCircuit from qiskit.circuit import Parameter from qiskit.primitives import BaseEstimatorV2 from .solvers.ode.forward_euler_solver import ForwardEulerSolver - from .variational_principles import RealVariationalPrinciple, RealMcLachlanPrinciple from .var_qte import VarQTE - from ..real_time_evolver import RealTimeEvolver from ...custom_types import Transpiler @@ -81,7 +78,7 @@ def __init__( initial_parameters: Mapping[Parameter, float] | Sequence[float], variational_principle: RealVariationalPrinciple | None = None, estimator: BaseEstimatorV2 | None = None, - ode_solver: Type[OdeSolver] | str = ForwardEulerSolver, + ode_solver: type[OdeSolver] | str = ForwardEulerSolver, lse_solver: Callable[[np.ndarray, np.ndarray], np.ndarray] | None = None, num_timesteps: int | None = None, imag_part_tol: float = 1e-7, diff --git a/qiskit_algorithms/time_evolvers/variational/var_qte.py b/qiskit_algorithms/time_evolvers/variational/var_qte.py index d61357bb..195fe408 100644 --- a/qiskit_algorithms/time_evolvers/variational/var_qte.py +++ b/qiskit_algorithms/time_evolvers/variational/var_qte.py @@ -15,7 +15,7 @@ from abc import ABC from collections.abc import Mapping, Callable, Sequence -from typing import Type, Any +from typing import Any import numpy as np from scipy.integrate import OdeSolver @@ -78,7 +78,7 @@ def __init__( initial_parameters: Mapping[Parameter, float] | Sequence[float], variational_principle: VariationalPrinciple, estimator: BaseEstimatorV2, - ode_solver: Type[OdeSolver] | str = ForwardEulerSolver, + ode_solver: type[OdeSolver] | str = ForwardEulerSolver, lse_solver: Callable[[np.ndarray, np.ndarray], np.ndarray] | None = None, num_timesteps: int | None = None, imag_part_tol: float = 1e-7, diff --git a/qiskit_algorithms/time_evolvers/variational/var_qte_result.py b/qiskit_algorithms/time_evolvers/variational/var_qte_result.py index d6cb8992..d01bbf6e 100644 --- a/qiskit_algorithms/time_evolvers/variational/var_qte_result.py +++ b/qiskit_algorithms/time_evolvers/variational/var_qte_result.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2023, 2024. +# (C) Copyright IBM 2023, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -19,7 +19,7 @@ from ..time_evolution_result import TimeEvolutionResult -from ...list_or_dict import ListOrDict +from ...custom_types import ListOrDict class VarQTEResult(TimeEvolutionResult): diff --git a/qiskit_algorithms/utils/circuit_key.py b/qiskit_algorithms/utils/circuit_key.py index 3b0345c4..0cbd89a8 100644 --- a/qiskit_algorithms/utils/circuit_key.py +++ b/qiskit_algorithms/utils/circuit_key.py @@ -15,7 +15,7 @@ This file is to be deleted once all interfaces such as the BaseStateFidelity's and gradients' accept PUB-like inputs instead of separate arguments. """ -from typing import Iterable +from collections.abc import Iterable import numpy as np from qiskit import QuantumCircuit diff --git a/qiskit_algorithms/utils/validation.py b/qiskit_algorithms/utils/validation.py index ae838d8d..76f66e9e 100644 --- a/qiskit_algorithms/utils/validation.py +++ b/qiskit_algorithms/utils/validation.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2019, 2023. +# (C) Copyright IBM 2019, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -14,10 +14,8 @@ Validation module """ -from typing import Set - -def validate_in_set(name: str, value: object, values: Set[object]) -> None: +def validate_in_set(name: str, value: object, values: set[object]) -> None: """ Args: name: value name. diff --git a/test/algorithms_test_case.py b/test/algorithms_test_case.py index c4445c9d..2ba8b430 100644 --- a/test/algorithms_test_case.py +++ b/test/algorithms_test_case.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2018, 2023. +# (C) Copyright IBM 2018, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -12,7 +12,6 @@ """Algorithms Test Case""" -from typing import Optional from abc import ABC import warnings import inspect @@ -75,7 +74,7 @@ def setUpClass(cls) -> None: level = logging._nameToLevel.get(os.getenv("LOG_LEVEL"), logging.INFO) cls.log.setLevel(level) - def get_resource_path(self, filename: str, path: Optional[str] = None) -> str: + def get_resource_path(self, filename: str, path: str | None = None) -> str: """Get the absolute path to a resource. Args: filename: filename or relative path to the resource. diff --git a/test/eigensolvers/test_numpy_eigensolver.py b/test/eigensolvers/test_numpy_eigensolver.py index b336b76f..8d4f58a9 100644 --- a/test/eigensolvers/test_numpy_eigensolver.py +++ b/test/eigensolvers/test_numpy_eigensolver.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2018, 2023. +# (C) Copyright IBM 2018, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -13,7 +13,6 @@ """Test NumPyEigensolver""" import unittest -from test import QiskitAlgorithmsTestCase import numpy as np from ddt import data, ddt @@ -22,6 +21,7 @@ from qiskit_algorithms.eigensolvers import NumPyEigensolver from qiskit_algorithms import AlgorithmError +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order H2_SPARSE_PAULI = SparsePauliOp( ["II", "ZI", "IZ", "ZZ", "XX"], diff --git a/test/eigensolvers/test_vqd.py b/test/eigensolvers/test_vqd.py index 6221fc62..e0c94c63 100644 --- a/test/eigensolvers/test_vqd.py +++ b/test/eigensolvers/test_vqd.py @@ -13,7 +13,6 @@ """Test VQD""" import unittest -from test import QiskitAlgorithmsTestCase import numpy as np from ddt import data, ddt, idata, unpack @@ -28,6 +27,7 @@ from qiskit_algorithms.optimizers import COBYLA, L_BFGS_B, SLSQP, SPSA from qiskit_algorithms.state_fidelities import ComputeUncompute from qiskit_algorithms.utils import algorithm_globals +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order H2_SPARSE_PAULI = SparsePauliOp.from_list( diff --git a/test/gradients/logging_primitives.py b/test/gradients/logging_primitives.py index 442c45fa..5dca44ab 100644 --- a/test/gradients/logging_primitives.py +++ b/test/gradients/logging_primitives.py @@ -12,7 +12,7 @@ """Test primitives that check what kind of operations are in the circuits they execute.""" from __future__ import annotations -from typing import Iterable +from collections.abc import Iterable from qiskit.primitives import StatevectorEstimator, StatevectorSampler from qiskit.primitives.containers.estimator_pub import EstimatorPub diff --git a/test/gradients/test_estimator_gradient.py b/test/gradients/test_estimator_gradient.py index 89f5c5aa..b1d413f5 100644 --- a/test/gradients/test_estimator_gradient.py +++ b/test/gradients/test_estimator_gradient.py @@ -14,7 +14,6 @@ """Test Estimator Gradients""" import unittest -from test import QiskitAlgorithmsTestCase import numpy as np from ddt import ddt, data, unpack @@ -37,8 +36,9 @@ ReverseEstimatorGradient, DerivativeType, ) - from .logging_primitives import LoggingEstimator +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order + gradient_factories = [ lambda estimator: FiniteDiffEstimatorGradient(estimator, epsilon=1e-6, method="central"), diff --git a/test/gradients/test_qfi.py b/test/gradients/test_qfi.py index 17ba279e..5c82529e 100644 --- a/test/gradients/test_qfi.py +++ b/test/gradients/test_qfi.py @@ -14,7 +14,6 @@ """Test QFI.""" import unittest -from test import QiskitAlgorithmsTestCase from ddt import ddt, data import numpy as np @@ -25,6 +24,7 @@ from qiskit.primitives import StatevectorEstimator from qiskit_algorithms.gradients import LinCombQGT, ReverseQGT, QFI, DerivativeType +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order @ddt diff --git a/test/gradients/test_qgt.py b/test/gradients/test_qgt.py index e7b20095..0127b753 100644 --- a/test/gradients/test_qgt.py +++ b/test/gradients/test_qgt.py @@ -14,19 +14,17 @@ """Test QGT.""" import unittest -from test import QiskitAlgorithmsTestCase from ddt import ddt, data import numpy as np - from qiskit import QuantumCircuit, generate_preset_pass_manager from qiskit.circuit import Parameter from qiskit.circuit.library import real_amplitudes from qiskit.primitives import StatevectorEstimator from qiskit_algorithms.gradients import DerivativeType, LinCombQGT, ReverseQGT - from .logging_primitives import LoggingEstimator +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order @ddt diff --git a/test/gradients/test_sampler_gradient.py b/test/gradients/test_sampler_gradient.py index c08d324d..478f0c03 100644 --- a/test/gradients/test_sampler_gradient.py +++ b/test/gradients/test_sampler_gradient.py @@ -14,7 +14,6 @@ """Test Sampler Gradients""" import unittest -from test import QiskitAlgorithmsTestCase import numpy as np from ddt import ddt, data, unpack @@ -32,6 +31,8 @@ SPSASamplerGradient, ) from .logging_primitives import LoggingSampler +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order + gradient_factories = [ ( diff --git a/test/minimum_eigensolvers/test_adapt_vqe.py b/test/minimum_eigensolvers/test_adapt_vqe.py index 2a2f5932..f816da00 100644 --- a/test/minimum_eigensolvers/test_adapt_vqe.py +++ b/test/minimum_eigensolvers/test_adapt_vqe.py @@ -13,12 +13,9 @@ """Test of the AdaptVQE minimum eigensolver""" import unittest -from test import QiskitAlgorithmsTestCase from ddt import ddt, data, unpack - import numpy as np - from qiskit import generate_preset_pass_manager from qiskit.circuit import QuantumCircuit, QuantumRegister from qiskit.circuit.library import EvolvedOperatorAnsatz @@ -30,6 +27,7 @@ from qiskit_algorithms.minimum_eigensolvers.adapt_vqe import AdaptVQE, TerminationCriterion from qiskit_algorithms.optimizers import SLSQP from qiskit_algorithms.utils import algorithm_globals +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order FIVE_QUBITS_BACKEND = GenericBackendV2( diff --git a/test/minimum_eigensolvers/test_numpy_minimum_eigensolver.py b/test/minimum_eigensolvers/test_numpy_minimum_eigensolver.py index 433492fa..aa00d2a8 100644 --- a/test/minimum_eigensolvers/test_numpy_minimum_eigensolver.py +++ b/test/minimum_eigensolvers/test_numpy_minimum_eigensolver.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2022, 2023. +# (C) Copyright IBM 2022, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -13,14 +13,13 @@ """Test NumPy minimum eigensolver""" import unittest -from test import QiskitAlgorithmsTestCase import numpy as np from ddt import ddt, data - from qiskit.quantum_info import Operator, SparsePauliOp from qiskit_algorithms.minimum_eigensolvers import NumPyMinimumEigensolver +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order H2_SPARSE_PAULI = SparsePauliOp( ["II", "ZI", "IZ", "ZZ", "XX"], diff --git a/test/minimum_eigensolvers/test_qaoa.py b/test/minimum_eigensolvers/test_qaoa.py index dbda0325..5a61196f 100644 --- a/test/minimum_eigensolvers/test_qaoa.py +++ b/test/minimum_eigensolvers/test_qaoa.py @@ -14,7 +14,6 @@ import unittest from functools import partial -from test import QiskitAlgorithmsTestCase import numpy as np import rustworkx as rx @@ -29,6 +28,7 @@ from qiskit_algorithms.minimum_eigensolvers import QAOA from qiskit_algorithms.optimizers import COBYLA, NELDER_MEAD from qiskit_algorithms.utils import algorithm_globals +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order W1 = np.array([[0, 1, 0, 1], [1, 0, 1, 0], [0, 1, 0, 1], [1, 0, 1, 0]]) diff --git a/test/minimum_eigensolvers/test_sampling_vqe.py b/test/minimum_eigensolvers/test_sampling_vqe.py index 9fe24bcb..da859bff 100644 --- a/test/minimum_eigensolvers/test_sampling_vqe.py +++ b/test/minimum_eigensolvers/test_sampling_vqe.py @@ -15,12 +15,10 @@ import unittest from functools import partial -from test import QiskitAlgorithmsTestCase import numpy as np from ddt import data, ddt from scipy.optimize import minimize as scipy_minimize - from qiskit.circuit import ParameterVector, QuantumCircuit # TODO: RealAmplitudes is still imported to check the resize of the ansatz, remove when this @@ -34,6 +32,7 @@ from qiskit_algorithms.optimizers import SPSA, QNSPSA, SLSQP, OptimizerResult from qiskit_algorithms.state_fidelities import ComputeUncompute from qiskit_algorithms.utils import algorithm_globals +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order # pylint: disable=invalid-name diff --git a/test/minimum_eigensolvers/test_vqe.py b/test/minimum_eigensolvers/test_vqe.py index 77949fba..c80324b9 100644 --- a/test/minimum_eigensolvers/test_vqe.py +++ b/test/minimum_eigensolvers/test_vqe.py @@ -13,13 +13,11 @@ """Test the variational quantum eigensolver algorithm.""" import unittest -from test import QiskitAlgorithmsTestCase - from functools import partial + import numpy as np from scipy.optimize import minimize as scipy_minimize from ddt import data, ddt - from qiskit import QuantumCircuit, generate_preset_pass_manager # TODO: RealAmplitudes is still imported to check the resize of the ansatz, remove when this @@ -46,6 +44,7 @@ ) from qiskit_algorithms.state_fidelities import ComputeUncompute from qiskit_algorithms.utils import algorithm_globals +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order THREE_QUBITS_BACKEND = GenericBackendV2(num_qubits=3, coupling_map=[[0, 1], [1, 2]], seed=54) diff --git a/test/optimizers/test_adam.py b/test/optimizers/test_adam.py index 883590e2..78351973 100644 --- a/test/optimizers/test_adam.py +++ b/test/optimizers/test_adam.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2024. +# (C) Copyright IBM 2024, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -12,13 +12,12 @@ """Tests for the ADAM optimizer.""" -from test import QiskitAlgorithmsTestCase - from ddt import ddt, data import numpy as np from qiskit_algorithms.optimizers import ADAM, Optimizer from qiskit_algorithms.utils import algorithm_globals +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order @ddt diff --git a/test/optimizers/test_gradient_descent.py b/test/optimizers/test_gradient_descent.py index f0fc3935..47dd9bd5 100644 --- a/test/optimizers/test_gradient_descent.py +++ b/test/optimizers/test_gradient_descent.py @@ -12,13 +12,13 @@ """Tests for the Gradient Descent optimizer.""" -from test import QiskitAlgorithmsTestCase import numpy as np from qiskit.circuit.library import pauli_two_design from qiskit.quantum_info import SparsePauliOp, Statevector from qiskit_algorithms.optimizers import GradientDescent, GradientDescentState from qiskit_algorithms.optimizers.steppable_optimizer import TellData, AskData +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order class TestGradientDescent(QiskitAlgorithmsTestCase): @@ -26,7 +26,6 @@ class TestGradientDescent(QiskitAlgorithmsTestCase): def setUp(self): super().setUp() - np.random.seed(12) self.initial_point = np.array([1, 1, 1, 1, 0]) def objective(self, x): diff --git a/test/optimizers/test_optimizer_aqgd.py b/test/optimizers/test_optimizer_aqgd.py index a36a45f0..4b97eb87 100644 --- a/test/optimizers/test_optimizer_aqgd.py +++ b/test/optimizers/test_optimizer_aqgd.py @@ -13,7 +13,7 @@ """Test of AQGD optimizer""" import unittest -from test import QiskitAlgorithmsTestCase, slow_test + import numpy as np from ddt import ddt, data from qiskit.circuit.library import real_amplitudes @@ -25,6 +25,7 @@ from qiskit_algorithms.optimizers import AQGD from qiskit_algorithms.minimum_eigensolvers import VQE from qiskit_algorithms.utils import algorithm_globals +from test import QiskitAlgorithmsTestCase, slow_test # pylint: disable=wrong-import-order @ddt diff --git a/test/optimizers/test_optimizer_nft.py b/test/optimizers/test_optimizer_nft.py index 3ef5ab6b..7232ee2f 100644 --- a/test/optimizers/test_optimizer_nft.py +++ b/test/optimizers/test_optimizer_nft.py @@ -13,13 +13,14 @@ """Test of NFT optimizer""" import unittest -from test import QiskitAlgorithmsTestCase + from qiskit.circuit.library import real_amplitudes from qiskit.primitives import StatevectorEstimator from qiskit.quantum_info import SparsePauliOp from qiskit_algorithms.optimizers import NFT from qiskit_algorithms.minimum_eigensolvers import VQE +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order class TestOptimizerNFT(QiskitAlgorithmsTestCase): diff --git a/test/optimizers/test_optimizers.py b/test/optimizers/test_optimizers.py index 6b35890b..50693de6 100644 --- a/test/optimizers/test_optimizers.py +++ b/test/optimizers/test_optimizers.py @@ -14,13 +14,9 @@ import unittest -from test import QiskitAlgorithmsTestCase - -from typing import Optional, List, Tuple from ddt import ddt, data, unpack import numpy as np from scipy.optimize import rosen, rosen_der - from qiskit.circuit.library import real_amplitudes from qiskit.exceptions import MissingOptionalLibraryError from qiskit.primitives import StatevectorSampler @@ -52,6 +48,7 @@ SciPyOptimizer, ) from qiskit_algorithms.utils import algorithm_globals +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order @ddt @@ -67,7 +64,7 @@ def run_optimizer( optimizer: Optimizer, max_nfev: int, grad: bool = False, - bounds: Optional[List[Tuple[float, float]]] = None, + bounds: list[tuple[float, float]] | None = None, ): """Test the optimizer. diff --git a/test/optimizers/test_optimizers_scikitquant.py b/test/optimizers/test_optimizers_scikitquant.py index b797f3eb..26bcdea8 100644 --- a/test/optimizers/test_optimizers_scikitquant.py +++ b/test/optimizers/test_optimizers_scikitquant.py @@ -13,10 +13,8 @@ """Test of scikit-quant optimizers.""" import unittest -from test import QiskitAlgorithmsTestCase from ddt import ddt, data, unpack - import numpy from qiskit.circuit.library import real_amplitudes from qiskit.exceptions import MissingOptionalLibraryError @@ -26,6 +24,7 @@ from qiskit_algorithms.minimum_eigensolvers import VQE from qiskit_algorithms.optimizers import BOBYQA, SNOBFIT, IMFIL from qiskit_algorithms.utils import algorithm_globals +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order @ddt diff --git a/test/optimizers/test_spsa.py b/test/optimizers/test_spsa.py index e56512c6..3ffbfc53 100644 --- a/test/optimizers/test_spsa.py +++ b/test/optimizers/test_spsa.py @@ -12,18 +12,15 @@ """Tests for the SPSA optimizer.""" -from test import QiskitAlgorithmsTestCase from ddt import ddt, data - import numpy as np - from qiskit.circuit.library import pauli_two_design from qiskit.primitives import StatevectorEstimator, StatevectorSampler - from qiskit.quantum_info import SparsePauliOp, Statevector from qiskit_algorithms.optimizers import SPSA, QNSPSA from qiskit_algorithms.utils import algorithm_globals +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order @ddt @@ -32,7 +29,7 @@ class TestSPSA(QiskitAlgorithmsTestCase): def setUp(self): super().setUp() - np.random.seed(12) + self.random_generator = np.random.default_rng(12) algorithm_globals.random_seed = 12 # @slow_test @@ -141,7 +138,7 @@ def test_termination_checker(self): """Test the termination_callback""" def objective(x): - return np.linalg.norm(x) + np.random.rand(1) + return np.linalg.norm(x) + self.random_generator.random(1) class TerminationChecker: """Example termination checker""" @@ -204,7 +201,7 @@ def objective(x): def test_qnspsa_fidelity_primitives(self): """Test the primitives can be used in get_fidelity.""" ansatz = pauli_two_design(2, reps=1, seed=2) - initial_point = np.random.random(ansatz.num_parameters) + initial_point = self.random_generator.random(ansatz.num_parameters) with self.subTest(msg="pass as kwarg"): fidelity = QNSPSA.get_fidelity(ansatz, sampler=StatevectorSampler(seed=123)) diff --git a/test/optimizers/test_umda.py b/test/optimizers/test_umda.py index 86e0454d..ce54f875 100644 --- a/test/optimizers/test_umda.py +++ b/test/optimizers/test_umda.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2021, 2023. +# (C) Copyright IBM 2021, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -12,13 +12,12 @@ """Tests for the UMDA optimizer.""" -from test import QiskitAlgorithmsTestCase - import numpy as np from scipy.optimize import rosen from qiskit_algorithms.optimizers.umda import UMDA from qiskit_algorithms.utils import algorithm_globals +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order class TestUMDA(QiskitAlgorithmsTestCase): diff --git a/test/optimizers/utils/test_learning_rate.py b/test/optimizers/utils/test_learning_rate.py index 067d54d0..6ee9307c 100644 --- a/test/optimizers/utils/test_learning_rate.py +++ b/test/optimizers/utils/test_learning_rate.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2022, 2023. +# (C) Copyright IBM 2022, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -12,10 +12,10 @@ """Tests for LearningRate.""" -from test import QiskitAlgorithmsTestCase import numpy as np from qiskit_algorithms.optimizers.optimizer_utils import LearningRate +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order class TestLearningRate(QiskitAlgorithmsTestCase): @@ -23,7 +23,6 @@ class TestLearningRate(QiskitAlgorithmsTestCase): def setUp(self): super().setUp() - np.random.seed(12) self.initial_point = np.array([1, 1, 1, 1, 0]) def objective(self, x): diff --git a/test/state_fidelities/test_compute_uncompute.py b/test/state_fidelities/test_compute_uncompute.py index 97bd342d..1ab81bf4 100644 --- a/test/state_fidelities/test_compute_uncompute.py +++ b/test/state_fidelities/test_compute_uncompute.py @@ -13,7 +13,6 @@ """Tests for Fidelity.""" import unittest -from test import QiskitAlgorithmsTestCase import numpy as np from ddt import ddt @@ -23,6 +22,7 @@ from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager from qiskit_algorithms.state_fidelities import ComputeUncompute +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order @ddt @@ -190,7 +190,7 @@ def test_input_format(self): fidelity = ComputeUncompute(self._sampler) circuit = real_amplitudes(2) - values = np.random.random(circuit.num_parameters) + values = np.random.default_rng().random(circuit.num_parameters) shift = np.ones_like(values) * 0.01 # lists of circuits, lists of numpy arrays diff --git a/test/test_amplitude_estimators.py b/test/test_amplitude_estimators.py index 938d9025..f8df9c36 100644 --- a/test/test_amplitude_estimators.py +++ b/test/test_amplitude_estimators.py @@ -13,7 +13,7 @@ """Test the quantum amplitude estimation algorithm.""" import unittest -from test import QiskitAlgorithmsTestCase + import numpy as np from ddt import ddt, idata, data, unpack from qiskit import QuantumRegister, QuantumCircuit, generate_preset_pass_manager @@ -28,6 +28,7 @@ FasterAmplitudeEstimation, EstimationProblem, ) +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order class BernoulliStateIn(QuantumCircuit): diff --git a/test/test_grover.py b/test/test_grover.py index 47297319..dbc897dd 100644 --- a/test/test_grover.py +++ b/test/test_grover.py @@ -14,7 +14,6 @@ import unittest from itertools import product -from test import QiskitAlgorithmsTestCase import numpy as np from ddt import data, ddt @@ -26,6 +25,7 @@ from qiskit_algorithms import AmplificationProblem, Grover from qiskit_algorithms.utils.optionals import CAN_USE_PHASE_ORACLE +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order @ddt diff --git a/test/test_phase_estimator.py b/test/test_phase_estimator.py index 386f1e8b..dc1408fe 100644 --- a/test/test_phase_estimator.py +++ b/test/test_phase_estimator.py @@ -12,7 +12,6 @@ """Test phase estimation""" import unittest -from test import QiskitAlgorithmsTestCase import numpy as np from ddt import ddt, data, unpack @@ -29,6 +28,7 @@ PhaseEstimation, PhaseEstimationScale, ) +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order @ddt diff --git a/test/test_validation.py b/test/test_validation.py index 2d9ae22d..e11af4d8 100644 --- a/test/test_validation.py +++ b/test/test_validation.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2019, 2023. +# (C) Copyright IBM 2019, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -14,8 +14,6 @@ import unittest -from test import QiskitAlgorithmsTestCase - from qiskit_algorithms.utils.validation import ( validate_in_set, validate_min, @@ -27,6 +25,7 @@ validate_range_exclusive_min, validate_range_exclusive_max, ) +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order class TestValidation(QiskitAlgorithmsTestCase): diff --git a/test/time_evolvers/classical_methods/test_scipy_imaginary_evolver.py b/test/time_evolvers/classical_methods/test_scipy_imaginary_evolver.py index 9e602c07..1143762d 100644 --- a/test/time_evolvers/classical_methods/test_scipy_imaginary_evolver.py +++ b/test/time_evolvers/classical_methods/test_scipy_imaginary_evolver.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2022, 2023. +# (C) Copyright IBM 2022, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -12,17 +12,17 @@ """Test Classical Imaginary Evolver.""" import unittest -from test import QiskitAlgorithmsTestCase from typing import cast + from ddt import data, ddt, unpack import numpy as np - from qiskit import QuantumCircuit from qiskit.quantum_info.states.statevector import Statevector from qiskit.quantum_info import SparsePauliOp from qiskit_algorithms import SciPyImaginaryEvolver from qiskit_algorithms.time_evolvers.time_evolution_problem import TimeEvolutionProblem +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order @ddt diff --git a/test/time_evolvers/classical_methods/test_scipy_real_evolver.py b/test/time_evolvers/classical_methods/test_scipy_real_evolver.py index 6da6328a..9d63f17b 100644 --- a/test/time_evolvers/classical_methods/test_scipy_real_evolver.py +++ b/test/time_evolvers/classical_methods/test_scipy_real_evolver.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2022, 2023. +# (C) Copyright IBM 2022, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -12,13 +12,14 @@ """Test Classical Real Evolver.""" import unittest -from test import QiskitAlgorithmsTestCase + from ddt import data, ddt, unpack import numpy as np from qiskit import QuantumCircuit, QuantumRegister from qiskit.quantum_info import Statevector, SparsePauliOp from qiskit_algorithms import SciPyRealEvolver, TimeEvolutionProblem +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order def zero(n): diff --git a/test/time_evolvers/test_pvqd.py b/test/time_evolvers/test_pvqd.py index c73646f1..68090b24 100644 --- a/test/time_evolvers/test_pvqd.py +++ b/test/time_evolvers/test_pvqd.py @@ -12,12 +12,10 @@ """Tests for PVQD.""" import unittest -from test import QiskitAlgorithmsTestCase from functools import partial import numpy as np from ddt import data, ddt, unpack - from qiskit.circuit import Gate, Parameter, QuantumCircuit from qiskit.circuit.library import efficient_su2 from qiskit.primitives import StatevectorEstimator, StatevectorSampler @@ -31,6 +29,7 @@ from qiskit_algorithms.state_fidelities import ComputeUncompute from qiskit_algorithms.time_evolvers.pvqd import PVQD from qiskit_algorithms.utils import algorithm_globals +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order # pylint: disable=unused-argument, invalid-name diff --git a/test/time_evolvers/test_time_evolution_problem.py b/test/time_evolvers/test_time_evolution_problem.py index f5ecd218..e25b8be2 100644 --- a/test/time_evolvers/test_time_evolution_problem.py +++ b/test/time_evolvers/test_time_evolution_problem.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2022, 2023. +# (C) Copyright IBM 2022, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -12,13 +12,14 @@ """Test evolver problem class.""" import unittest -from test import QiskitAlgorithmsTestCase + from ddt import data, ddt from qiskit import QuantumCircuit from qiskit.quantum_info import Pauli, SparsePauliOp, Statevector from qiskit.circuit import Parameter from qiskit_algorithms import TimeEvolutionProblem +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order @ddt diff --git a/test/time_evolvers/test_time_evolution_result.py b/test/time_evolvers/test_time_evolution_result.py index 55615d79..8181d3a7 100644 --- a/test/time_evolvers/test_time_evolution_result.py +++ b/test/time_evolvers/test_time_evolution_result.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2022, 2023. +# (C) Copyright IBM 2022, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -11,10 +11,12 @@ # that they have been altered from the originals. """Class for testing evolution result.""" import unittest -from test import QiskitAlgorithmsTestCase + from qiskit import QuantumCircuit from qiskit.quantum_info import Statevector + from qiskit_algorithms import TimeEvolutionResult +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order class TestTimeEvolutionResult(QiskitAlgorithmsTestCase): diff --git a/test/time_evolvers/test_trotter_qrte.py b/test/time_evolvers/test_trotter_qrte.py index a13fa636..d12668ac 100644 --- a/test/time_evolvers/test_trotter_qrte.py +++ b/test/time_evolvers/test_trotter_qrte.py @@ -13,13 +13,11 @@ """Test TrotterQRTE.""" import unittest -from test import QiskitAlgorithmsTestCase from ddt import ddt, data, unpack import numpy as np from scipy.linalg import expm from numpy.testing import assert_raises - from qiskit import QuantumCircuit from qiskit.circuit.library import ZGate from qiskit.quantum_info import Statevector, Pauli, SparsePauliOp @@ -30,6 +28,7 @@ from qiskit_algorithms import TimeEvolutionProblem, TrotterQRTE from qiskit_algorithms.utils import algorithm_globals +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order @ddt diff --git a/test/time_evolvers/variational/solvers/ode/test_forward_euler_solver.py b/test/time_evolvers/variational/solvers/ode/test_forward_euler_solver.py index 577aaadc..665a9a94 100644 --- a/test/time_evolvers/variational/solvers/ode/test_forward_euler_solver.py +++ b/test/time_evolvers/variational/solvers/ode/test_forward_euler_solver.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2023. +# (C) Copyright IBM 2023, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -13,7 +13,7 @@ """Test Forward Euler solver.""" import unittest -from test import QiskitAlgorithmsTestCase + import numpy as np from ddt import ddt, data, unpack from scipy.integrate import solve_ivp @@ -21,6 +21,7 @@ from qiskit_algorithms.time_evolvers.variational.solvers.ode.forward_euler_solver import ( ForwardEulerSolver, ) +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order @ddt diff --git a/test/time_evolvers/variational/solvers/ode/test_ode_function.py b/test/time_evolvers/variational/solvers/ode/test_ode_function.py index dc1d5410..a4ce6c40 100644 --- a/test/time_evolvers/variational/solvers/ode/test_ode_function.py +++ b/test/time_evolvers/variational/solvers/ode/test_ode_function.py @@ -14,7 +14,6 @@ import unittest -from test import QiskitAlgorithmsTestCase import numpy as np from qiskit.quantum_info import SparsePauliOp from qiskit.circuit import Parameter @@ -29,6 +28,7 @@ from qiskit_algorithms.time_evolvers.variational import ( ImaginaryMcLachlanPrinciple, ) +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order class TestOdeFunctionGenerator(QiskitAlgorithmsTestCase): diff --git a/test/time_evolvers/variational/solvers/ode/test_var_qte_ode_solver.py b/test/time_evolvers/variational/solvers/ode/test_var_qte_ode_solver.py index 47fd8407..d1914e78 100644 --- a/test/time_evolvers/variational/solvers/ode/test_var_qte_ode_solver.py +++ b/test/time_evolvers/variational/solvers/ode/test_var_qte_ode_solver.py @@ -13,10 +13,9 @@ """Test solver of ODEs.""" import unittest -from test import QiskitAlgorithmsTestCase + from ddt import ddt, data, unpack import numpy as np - from qiskit.circuit.library import efficient_su2 from qiskit.quantum_info import SparsePauliOp @@ -35,6 +34,7 @@ from qiskit_algorithms.time_evolvers.variational import ( ImaginaryMcLachlanPrinciple, ) +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order @ddt diff --git a/test/time_evolvers/variational/solvers/test_varqte_linear_solver.py b/test/time_evolvers/variational/solvers/test_varqte_linear_solver.py index 9d1648aa..9427f407 100644 --- a/test/time_evolvers/variational/solvers/test_varqte_linear_solver.py +++ b/test/time_evolvers/variational/solvers/test_varqte_linear_solver.py @@ -13,12 +13,6 @@ """Test solver of linear equations.""" import unittest -from test import QiskitAlgorithmsTestCase - -# fmt: off -from test.time_evolvers.variational.solvers.expected_results.\ - test_varqte_linear_solver_expected_1 import expected_metric_res_1 -# fmt: on import numpy as np from qiskit.circuit.library import efficient_su2 @@ -31,6 +25,14 @@ VarQTELinearSolver, ) +# fmt: off +# pylint: disable=wrong-import-order +from test.time_evolvers.variational.solvers.expected_results.\ + test_varqte_linear_solver_expected_1 import expected_metric_res_1 +# pylint: enable=wrong-import-order +# fmt: on +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order + class TestVarQTELinearSolver(QiskitAlgorithmsTestCase): """Test solver of linear equations.""" diff --git a/test/time_evolvers/variational/test_var_qite.py b/test/time_evolvers/variational/test_var_qite.py index fd5d8fd6..20edbfae 100644 --- a/test/time_evolvers/variational/test_var_qite.py +++ b/test/time_evolvers/variational/test_var_qite.py @@ -38,7 +38,6 @@ class TestVarQITE(QiskitAlgorithmsTestCase): def setUp(self): super().setUp() self.seed = 11 - np.random.seed(self.seed) def test_run_d_1_with_aux_ops(self): """Test VarQITE for d = 1 and t = 1 with evaluating auxiliary operator and the Forward diff --git a/test/time_evolvers/variational/test_var_qrte.py b/test/time_evolvers/variational/test_var_qrte.py index e6c6845b..7f3c50f3 100644 --- a/test/time_evolvers/variational/test_var_qrte.py +++ b/test/time_evolvers/variational/test_var_qrte.py @@ -13,11 +13,9 @@ """Test Variational Quantum Real Time Evolution algorithm.""" import unittest -from test import QiskitAlgorithmsTestCase from ddt import ddt import numpy as np - from qiskit import QuantumCircuit, generate_preset_pass_manager from qiskit.circuit import Parameter, ParameterVector from qiskit.circuit.library import efficient_su2 @@ -29,6 +27,7 @@ from qiskit_algorithms import TimeEvolutionProblem, VarQRTE from qiskit_algorithms.time_evolvers.variational import RealMcLachlanPrinciple from qiskit_algorithms.utils import algorithm_globals +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order @ddt @@ -38,7 +37,6 @@ class TestVarQRTE(QiskitAlgorithmsTestCase): def setUp(self): super().setUp() self.seed = 11 - np.random.seed(self.seed) def test_time_dependent_hamiltonian(self): """Simple test case with a time dependent Hamiltonian.""" diff --git a/test/time_evolvers/variational/test_var_qte.py b/test/time_evolvers/variational/test_var_qte.py index 84967176..138f4916 100644 --- a/test/time_evolvers/variational/test_var_qte.py +++ b/test/time_evolvers/variational/test_var_qte.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2023. +# (C) Copyright IBM 2023, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -13,14 +13,13 @@ import unittest -from test import QiskitAlgorithmsTestCase from numpy.testing import assert_raises from ddt import data, ddt import numpy as np - from qiskit.circuit import Parameter from qiskit_algorithms.time_evolvers.variational.var_qte import VarQTE +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order @ddt diff --git a/test/time_evolvers/variational/variational_principles/imaginary/test_imaginary_mc_lachlan_principle.py b/test/time_evolvers/variational/variational_principles/imaginary/test_imaginary_mc_lachlan_principle.py index 82ba6fc7..300f5ca3 100644 --- a/test/time_evolvers/variational/variational_principles/imaginary/test_imaginary_mc_lachlan_principle.py +++ b/test/time_evolvers/variational/variational_principles/imaginary/test_imaginary_mc_lachlan_principle.py @@ -14,13 +14,7 @@ import unittest -# fmt: off -from test.time_evolvers.variational.variational_principles.expected_results.\ - test_imaginary_mc_lachlan_variational_principle_expected1 import expected_bound_metric_tensor_1 -# fmt: on -from test import QiskitAlgorithmsTestCase import numpy as np - from qiskit.quantum_info import SparsePauliOp from qiskit.circuit.library import efficient_su2 from qiskit.primitives import StatevectorEstimator @@ -29,6 +23,13 @@ from qiskit_algorithms.time_evolvers.variational import ( ImaginaryMcLachlanPrinciple, ) +# fmt: off +# pylint: disable=wrong-import-order +from test.time_evolvers.variational.variational_principles.expected_results.\ + test_imaginary_mc_lachlan_variational_principle_expected1 import expected_bound_metric_tensor_1 +# pylint: enable=wrong-import-order +# fmt: on +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order class TestImaginaryMcLachlanPrinciple(QiskitAlgorithmsTestCase): diff --git a/test/time_evolvers/variational/variational_principles/real/test_real_mc_lachlan_principle.py b/test/time_evolvers/variational/variational_principles/real/test_real_mc_lachlan_principle.py index bfa40d1a..3fe7ab61 100644 --- a/test/time_evolvers/variational/variational_principles/real/test_real_mc_lachlan_principle.py +++ b/test/time_evolvers/variational/variational_principles/real/test_real_mc_lachlan_principle.py @@ -14,20 +14,20 @@ import unittest -from test import QiskitAlgorithmsTestCase - -# fmt: off -from test.time_evolvers.variational.variational_principles.expected_results.\ - test_imaginary_mc_lachlan_variational_principle_expected2 import expected_bound_metric_tensor_2 -# fmt: on import numpy as np - from qiskit.quantum_info import SparsePauliOp from qiskit.circuit.library import efficient_su2 from qiskit.primitives import StatevectorEstimator from qiskit_algorithms.gradients import LinCombEstimatorGradient, DerivativeType from qiskit_algorithms.time_evolvers.variational import RealMcLachlanPrinciple +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order +# fmt: off +# pylint: disable=wrong-import-order +from test.time_evolvers.variational.variational_principles.expected_results.\ + test_imaginary_mc_lachlan_variational_principle_expected2 import expected_bound_metric_tensor_2 +# pylint: enable=wrong-import-order +# fmt: on class TestRealMcLachlanPrinciple(QiskitAlgorithmsTestCase): diff --git a/test/utils/test_validate_bounds.py b/test/utils/test_validate_bounds.py index 63f16604..4d164042 100644 --- a/test/utils/test_validate_bounds.py +++ b/test/utils/test_validate_bounds.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2022, 2023. +# (C) Copyright IBM 2022, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -12,13 +12,12 @@ """Test validate bounds.""" -from test import QiskitAlgorithmsTestCase - from unittest.mock import Mock import numpy as np from qiskit_algorithms.utils import algorithm_globals, validate_bounds +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order class TestValidateBounds(QiskitAlgorithmsTestCase): diff --git a/test/utils/test_validate_initial_point.py b/test/utils/test_validate_initial_point.py index 9a8f1549..709835a5 100644 --- a/test/utils/test_validate_initial_point.py +++ b/test/utils/test_validate_initial_point.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2022, 2023. +# (C) Copyright IBM 2022, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -12,13 +12,12 @@ """Test validate initial point.""" -from test import QiskitAlgorithmsTestCase - from unittest.mock import Mock import numpy as np from qiskit_algorithms.utils import algorithm_globals, validate_initial_point +from test import QiskitAlgorithmsTestCase # pylint: disable=wrong-import-order class TestValidateInitialPoint(QiskitAlgorithmsTestCase): diff --git a/tools/check_copyright.py b/tools/check_copyright.py index 6085e0a1..660ac39d 100644 --- a/tools/check_copyright.py +++ b/tools/check_copyright.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2020, 2023. +# (C) Copyright IBM 2020, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -12,7 +12,6 @@ """ Fix copyright year in header """ -from typing import Tuple, Union, List import builtins import sys import os @@ -47,7 +46,7 @@ def _get_year_from_date(date) -> int: return int(date[:4]) - def _cmd_execute(self, args: List[str]) -> Tuple[str, Union[None, str]]: + def _cmd_execute(self, args: list[str]) -> tuple[str, None | str]: # execute command env = {} for k in ["SYSTEMROOT", "PATH"]: @@ -73,7 +72,7 @@ def _cmd_execute(self, args: List[str]) -> Tuple[str, Union[None, str]]: err_str = err_str if err_str else None return out_str, err_str - def _get_changed_files(self) -> List[str]: + def _get_changed_files(self) -> list[str]: out_str, err_str = self._cmd_execute(["git", "diff", "--name-only", "HEAD"]) if err_str: raise builtins.Exception(err_str) @@ -98,7 +97,7 @@ def _get_file_last_year(self, relative_path: str) -> int: return last_year - def check_copyright(self, file_path) -> Tuple[bool, bool, bool]: + def check_copyright(self, file_path) -> tuple[bool, bool, bool]: """check copyright for a file""" file_with_utf8 = False file_with_invalid_year = False @@ -177,11 +176,11 @@ def check_copyright(self, file_path) -> Tuple[bool, bool, bool]: return file_with_utf8, file_with_invalid_year, file_has_header - def check(self) -> Tuple[int, int, int]: + def check(self) -> tuple[int, int, int]: """check copyright""" return self._check_copyright(self._root_dir) - def _check_copyright(self, path: str) -> Tuple[int, int, int]: + def _check_copyright(self, path: str) -> tuple[int, int, int]: files_with_utf8 = 0 files_with_invalid_year = 0 files_with_header = 0 diff --git a/tools/extract_deprecation.py b/tools/extract_deprecation.py index 5a61d982..004a00e8 100644 --- a/tools/extract_deprecation.py +++ b/tools/extract_deprecation.py @@ -1,6 +1,6 @@ # This code is part of a Qiskit project. # -# (C) Copyright IBM 2021, 2023. +# (C) Copyright IBM 2021, 2025. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -12,7 +12,6 @@ """ Extract deprecation messages from input """ -from typing import List import sys import os import argparse