From 555363b379a3268c566ed336945e224ab4efa9e3 Mon Sep 17 00:00:00 2001 From: Matthew Treinish Date: Mon, 8 Jan 2024 12:16:51 -0500 Subject: [PATCH] Deprecate qiskit.tools This commit deprecates the qiskit.tools module. Most of the functionality in this module will be removed in the Qiskit 1.0.0 release. The sole exception is the qiskit.tools.parallel module and it's associated public function qiskit.tools.parallel_map which has been moved to qiskit.utils. --- qiskit/passmanager/passmanager.py | 2 +- qiskit/test/base.py | 2 +- qiskit/tools/__init__.py | 44 +++++++++++++------ qiskit/tools/events/__init__.py | 5 +++ qiskit/tools/events/progressbar.py | 2 +- qiskit/tools/jupyter/__init__.py | 4 ++ qiskit/tools/monitor/__init__.py | 7 +++ .../transpiler/passes/layout/sabre_layout.py | 2 +- qiskit/utils/__init__.py | 12 +++++ qiskit/utils/mitigation/_filters.py | 3 +- qiskit/{tools => utils}/parallel.py | 2 +- .../deprecate-tools-392582e5d3c698eb.yaml | 39 ++++++++++++++++ 12 files changed, 105 insertions(+), 19 deletions(-) rename qiskit/{tools => utils}/parallel.py (99%) create mode 100644 releasenotes/notes/deprecate-tools-392582e5d3c698eb.yaml diff --git a/qiskit/passmanager/passmanager.py b/qiskit/passmanager/passmanager.py index 74d5feb91088..f480ff1c3954 100644 --- a/qiskit/passmanager/passmanager.py +++ b/qiskit/passmanager/passmanager.py @@ -21,7 +21,7 @@ import dill -from qiskit.tools.parallel import parallel_map +from qiskit.utils.parallel import parallel_map from .base_tasks import Task, PassManagerIR from .exceptions import PassManagerError from .flow_controllers import FlowControllerLinear diff --git a/qiskit/test/base.py b/qiskit/test/base.py index 839e15b0191f..d84bd42b4a92 100644 --- a/qiskit/test/base.py +++ b/qiskit/test/base.py @@ -28,7 +28,7 @@ import unittest from unittest.util import safe_repr -from qiskit.tools.parallel import get_platform_parallel_default +from qiskit.utils.parallel import get_platform_parallel_default from qiskit.utils import optionals as _optionals from qiskit.circuit import QuantumCircuit from .decorators import enforce_subclasses_call diff --git a/qiskit/tools/__init__.py b/qiskit/tools/__init__.py index 6bddd22ba889..c0963cd7c603 100644 --- a/qiskit/tools/__init__.py +++ b/qiskit/tools/__init__.py @@ -17,15 +17,6 @@ .. currentmodule:: qiskit.tools -Parallel Routines ------------------ - -A helper function for calling a custom function with python ``ProcessPoolExecutor``. -Tasks can be executed in parallel using this function. -It has a built-in event publisher to show the progress of the parallel tasks. - -.. autofunction:: parallel_map - Monitoring ---------- @@ -38,7 +29,34 @@ .. automodule:: qiskit.tools.events """ - -from .parallel import parallel_map -from .monitor import job_monitor, backend_monitor, backend_overview -from .events import progressbar +import importlib +import warnings + + +_DEPRECATED_NAMES = { + "parallel_map": "qiskit.utils", + "parallel": "qiskit.utils.parallel", +} + + +_DEPRECATED_REMOVALS = {"job_monitor", "backend_monitor", "backend_overview", "progressbar"} + + +def __getattr__(name): + if name in _DEPRECATED_NAMES: + module_name = _DEPRECATED_NAMES[name] + warnings.warn( + f"Accessing '{name}' from '{__name__}' is deprecated since Qiskit 0.46.0 " + f"and will be removed in Qiskit 1.0.0. Import from '{module_name}' instead ", + DeprecationWarning, + 2, + ) + return getattr(importlib.import_module(module_name), name) + if name in _DEPRECATED_REMOVALS: + warnings.warn( + f"'{name}' has been deprecated and will be removed in Qiskit 1.0.0.", + DeprecationWarning, + 2, + ) + return getattr(importlib.import_module(".monitor", "qiskit.tools"), name) + raise AttributeError(f"module '{__name__}' has no attribute '{name}'") diff --git a/qiskit/tools/events/__init__.py b/qiskit/tools/events/__init__.py index d15a537bb942..d16fe93bfec2 100644 --- a/qiskit/tools/events/__init__.py +++ b/qiskit/tools/events/__init__.py @@ -21,5 +21,10 @@ .. autoclass:: TextProgressBar """ +import warnings from .progressbar import TextProgressBar + +warnings.warn( + "qiskit.tools.events is deprecated and will be removed in Qiskit 1.0.0", DeprecationWarning, 2 +) diff --git a/qiskit/tools/events/progressbar.py b/qiskit/tools/events/progressbar.py index 459662e87a9b..204b982e74e7 100644 --- a/qiskit/tools/events/progressbar.py +++ b/qiskit/tools/events/progressbar.py @@ -48,7 +48,7 @@ import time import datetime import sys -from qiskit.tools.events.pubsub import Subscriber +from .pubsub import Subscriber class BaseProgressBar(Subscriber): diff --git a/qiskit/tools/jupyter/__init__.py b/qiskit/tools/jupyter/__init__.py index 6bc05d46f743..7be4e6b3ec1b 100644 --- a/qiskit/tools/jupyter/__init__.py +++ b/qiskit/tools/jupyter/__init__.py @@ -109,6 +109,10 @@ from .monospace import MonospacedOutput from .job_watcher import JobWatcher, JobWatcherMagic +warnings.warn( + "qiskit.tools.jupyter is deprecated and will be removed in Qiskit 1.0.0", DeprecationWarning, 2 +) + _IP = get_ipython() if _IP is not None: _IP.register_magics(ProgressBarMagic) diff --git a/qiskit/tools/monitor/__init__.py b/qiskit/tools/monitor/__init__.py index cd0f22b90e48..8b64f415c78d 100644 --- a/qiskit/tools/monitor/__init__.py +++ b/qiskit/tools/monitor/__init__.py @@ -12,5 +12,12 @@ """A module for monitoring jobs, backends, etc.""" +import warnings + from .job_monitor import job_monitor from .overview import backend_monitor, backend_overview + + +warnings.warn( + "qiskit.tools.monitor is deprecated and will be removed in Qiskit 1.0.0", DeprecationWarning, 2 +) diff --git a/qiskit/transpiler/passes/layout/sabre_layout.py b/qiskit/transpiler/passes/layout/sabre_layout.py index ca71ebee2777..2859fb6075c8 100644 --- a/qiskit/transpiler/passes/layout/sabre_layout.py +++ b/qiskit/transpiler/passes/layout/sabre_layout.py @@ -43,7 +43,7 @@ from qiskit.transpiler.passes.routing.sabre_swap import _build_sabre_dag, _apply_sabre_result from qiskit.transpiler.target import Target from qiskit.transpiler.coupling import CouplingMap -from qiskit.tools.parallel import CPU_COUNT +from qiskit.utils.parallel import CPU_COUNT logger = logging.getLogger(__name__) diff --git a/qiskit/utils/__init__.py b/qiskit/utils/__init__.py index 789b8c0da9b0..cdaef40bba15 100644 --- a/qiskit/utils/__init__.py +++ b/qiskit/utils/__init__.py @@ -52,6 +52,15 @@ are run on a device or simulator by passing a QuantumInstance setup with the desired backend etc. +Parallel Routines +----------------- +A helper function for calling a custom function with python +``ProcessPoolExecutor``. Tasks can be executed in parallel using this function. +It has a built-in event publisher to show the progress of the parallel +tasks. + +.. autofunction:: parallel_map + Optional Dependency Checkers (:mod:`qiskit.utils.optionals`) ============================================================ @@ -81,6 +90,8 @@ from .name_unnamed_args import name_args from .algorithm_globals import algorithm_globals +from .parallel import parallel_map + __all__ = [ "LazyDependencyManager", @@ -102,4 +113,5 @@ "local_hardware_info", "is_main_process", "apply_prefix", + "parallel_map", ] diff --git a/qiskit/utils/mitigation/_filters.py b/qiskit/utils/mitigation/_filters.py index d29700338d4e..120453445e1e 100644 --- a/qiskit/utils/mitigation/_filters.py +++ b/qiskit/utils/mitigation/_filters.py @@ -29,7 +29,6 @@ import qiskit from qiskit import QiskitError -from qiskit.tools import parallel_map from qiskit.utils.mitigation.circuits import count_keys from qiskit.utils.deprecation import deprecate_func @@ -112,6 +111,7 @@ def apply(self, raw_data, method="least_squares"): """ from scipy.optimize import minimize from scipy import linalg as la + from .. import parallel_map # check forms of raw_data if isinstance(raw_data, dict): @@ -365,6 +365,7 @@ def apply( """ from scipy.optimize import minimize from scipy import linalg as la + from .. import parallel_map all_states = count_keys(self.nqubits) num_of_states = 2**self.nqubits diff --git a/qiskit/tools/parallel.py b/qiskit/utils/parallel.py similarity index 99% rename from qiskit/tools/parallel.py rename to qiskit/utils/parallel.py index 1b48791e3477..e330f7f4189f 100644 --- a/qiskit/tools/parallel.py +++ b/qiskit/utils/parallel.py @@ -53,7 +53,7 @@ import sys from qiskit.exceptions import QiskitError -from qiskit.utils.multiprocessing import local_hardware_info +from .multiprocessing import local_hardware_info from qiskit.tools.events.pubsub import Publisher from qiskit import user_config diff --git a/releasenotes/notes/deprecate-tools-392582e5d3c698eb.yaml b/releasenotes/notes/deprecate-tools-392582e5d3c698eb.yaml new file mode 100644 index 000000000000..485db54151bb --- /dev/null +++ b/releasenotes/notes/deprecate-tools-392582e5d3c698eb.yaml @@ -0,0 +1,39 @@ +--- +deprecations: + - | + The ``qiskit.tools.jupyter`` module has been deprecated and will be removed + in Qiskit 1.0.0. This module is deprecated because the functionality in + this module is tied to the legacy ``qiskit-ibmq-provider`` package which is + no longer supported and also only supported :class:`.BackendV1`. If you're + using this functionality currently, similar jupyter tools exist in the + `qiskit-ibm-provider `__ + package which can be used instead. The documentation for this module can + be found here: + + https://docs.quantum.ibm.com/api/qiskit-ibm-provider/ibm_jupyter + + - | + The ``qiskit.tools.monitor`` module has been deprecated and will be removed + in Qiskit 1.0.0. This module is deprecated because the functionality in + this module is tied to the legacy ``qiskit-ibmq-provider`` package which is + no longer supported and also only supported :class:`.BackendV1`. + - | + The ``qiskit.tools.visualization`` module has been deprecated and will be + removed in Qiskit 1.0.0. This module was a legacy redirect from the original + location of Qiskit's visualization module and was moved to + :mod:`qiskit.visualization` in Qiskit 0.8.0. If you're still using this + path you can just update your imports from ``qiskit.tools.visualization`` + to :mod:`qiskit.visualization`. + - | + The ``qiskit.tools.events`` module and the :func:`.progressbar` utility + it exposed has been deprecated and will be removed in the Qiskit 1.0.0 + release. This module's functionality was not widely used and better covered + by dedicated packages such as `tqdm `__. + - | + The ``qiskit.tools`` module has been deprecated and will be removed in + Qiskit 1.0.0. Except as noted in the release notes above for specific + submodules (``qiskit.tools.jupyter``, ``qiskit.tools.monitor``, ``qiskit.tools.events`` and + ``qiskit.tools.visualization``) the functionality in this module have + been migrated to :mod:`qiskit.utils`. If you're using any functionality + in this module you can update your imports from ``qiskit.tools`` to + :mod:`qiskit.utils`.