diff --git a/docs/manuals/characterization/stark_experiment.rst b/docs/manuals/characterization/stark_experiment.rst index fd4f11fbda..68e51d353e 100644 --- a/docs/manuals/characterization/stark_experiment.rst +++ b/docs/manuals/characterization/stark_experiment.rst @@ -1,6 +1,14 @@ AC Stark Effect =============== +.. caution:: + + The experiments described in this manual are deprecated as of Qiskit + Experiments 0.8 and will be removed in a future release. They rely on Qiskit + Pulse, which is `deprecated in Qiskit SDK + `_, with planned removal in + Qiskit 2.0. + When a qubit is driven with an off-resonant tone, the qubit frequency :math:`f_0` is slightly shifted through what is known as the (AC) Stark effect. This technique is sometimes used to characterize qubit properties in the vicinity of @@ -145,6 +153,14 @@ by a variant of the Hahn-echo pulse sequence [5]_. %matplotlib inline + import warnings + + warnings.filterwarnings( + "ignore", + message=".*Due to the deprecation of Qiskit Pulse.*", + category=DeprecationWarning, + ) + from qiskit_experiments.library import StarkRamseyXY from qiskit import schedule, pulse from qiskit_ibm_runtime.fake_provider import FakeHanoiV2 diff --git a/docs/manuals/measurement/restless_measurements.rst b/docs/manuals/measurement/restless_measurements.rst index 313d4cde94..9f7e6078cf 100644 --- a/docs/manuals/measurement/restless_measurements.rst +++ b/docs/manuals/measurement/restless_measurements.rst @@ -1,6 +1,11 @@ Restless Measurements ===================== +.. caution:: + + Support for restless measurements is deprecated as of Qiskit Experiments 0.8 + and will be removed in a future version. + When running circuits, the qubits are typically reset to the ground state after each measurement to ensure that the next circuit has a well-defined initial state. This can be done passively by waiting several :math:`T_1`-times so that qubits in @@ -65,6 +70,14 @@ they use always starts with the qubits in the ground state. .. jupyter-execute:: :hide-code: + import warnings + + warnings.filterwarnings( + "ignore", + message=".*Support for restless.*", + category=DeprecationWarning, + ) + # Temporary workaround for missing support in Qiskit and qiskit-ibm-runtime from qiskit_experiments.test.patching import patch_sampler_test_support patch_sampler_test_support() diff --git a/docs/release_notes.rst b/docs/release_notes.rst index 71fa677e58..5ba90ffebb 100644 --- a/docs/release_notes.rst +++ b/docs/release_notes.rst @@ -5,6 +5,158 @@ Release Notes .. release-notes:: :earliest-version: 0.7.0 +.. _Release Notes_0.7.0: + +0.7.0 +===== + +.. _Release Notes_0.7.0_Prelude: + +Prelude +------- + +.. releasenotes/notes/0.7/0_7_release-96efcec2c45dcf74.yaml @ b'517532eb307897896d549f7e3de69485801d67a8' + +The Qiskit Experiments 0.7 release adds the Layer Fidelity experiment and makes some fixes and improvements. + + +.. _Release Notes_0.7.0_New Features: + +New Features +------------ + +.. releasenotes/notes/0.7/layer-fidelity-1e09dea9e5b69515.yaml @ b'517532eb307897896d549f7e3de69485801d67a8' + +- Add a new experiment class :class:`.LayerFidelity` to measure + `layer fidelity and EPLG (error per layered gate) `_, + which is a holistic benchmark to characterize the full quality of the devices at scale. + + It has an experimental feature: its :meth:`circuits` + exceptionally returns circuits on physical qubits (not virtual qubits as usual). + Its analysis class :class:`.LayerFidelityAnalysis` returns :class:`.AnalysisResultData` + which contains several ``extra`` entries to help additional analyses: e.g. + ``qubits`` to ease the query of sub-analysis results and + ``reason`` to tell users why the ``quality`` of the analysis was ``"bad"``. + + For example, the syntax for pulling out the individual fidelities looks like below. + + .. code-block:: python + + df = exp_data.analysis_results(dataframe=True) + df[(df.name=="ProcessFidelity") & (df.qubits==(59, 60))].value + + See `an example notebook + `_ + for more examples such as how to select a best possible qubit chain to measure and + how to plot EPLG as a function of (sub)chain length. + +.. releasenotes/notes/0.7/residuals_plot-377aabb9193a5a98.yaml @ b'517532eb307897896d549f7e3de69485801d67a8' + +- Added an option to plot residuals for single-figure experiments, which is enable by setting ``plot_residuals`` to ``True``. + +.. releasenotes/notes/0.7/residuals_plot-377aabb9193a5a98.yaml @ b'517532eb307897896d549f7e3de69485801d67a8' + +- Introduced ``sub_plot_heights_list`` and ``sub_plot_widths_list`` attributes in :class:`.PlotStyle` for customizable + subplot sizes where each list needs to sum up to 1. This feature currently works only for experiments with + no subplots. + + +.. _Release Notes_0.7.0_Known Issues: + +Known Issues +------------ + +.. releasenotes/notes/0.7/0_6_deprecations-9a399c48c2d461f1.yaml @ b'517532eb307897896d549f7e3de69485801d67a8' + +- Fit parameters are not populated in composite curve analysis results and are + found only in the fit summary artifact. In a future release, they will be + removed from all analysis result objects and live in the artifacts only. + + +.. _Release Notes_0.7.0_Upgrade Notes: + +Upgrade Notes +------------- + +.. releasenotes/notes/0.7/0_7_release-96efcec2c45dcf74.yaml @ b'517532eb307897896d549f7e3de69485801d67a8' + +- Changes in behavior that users should be aware of when upgrading Qiskit Experiments + to this version are listed below in subsections by functional area. + + +.. _Release Notes_0.7.0_Package Upgrades: + +Package Upgrades +^^^^^^^^^^^^^^^^ + +.. releasenotes/notes/0.7/0_6_deprecations-9a399c48c2d461f1.yaml @ b'517532eb307897896d549f7e3de69485801d67a8' + +- Several deprecated modules, methods, functions, and options have been removed and will no longer work: + + * The visualization module of :mod:`.CurveAnalysis` has been replaced by the + standalone :mod:`.visualization` module. The ``LegacyCurveCompatDrawer`` has + been removed from :mod:`.visualization`. + * The ``curve_drawer`` option to :class:`.CompositeCurveAnalysis` has been + replaced by the plotter in the visualization module. + * The ``SeriesDef`` dataclass has been removed and replaced by the ``LMFIT`` module. + * The ``CurveData`` dataclass has been removed and replaced by :class:`.ScatterTable`'s DataFrame representation. + * ``random_cliffords()`` and ``random_clifford_circuits()`` have been + removed from :class:`.CliffordUtils` and replaced by :meth:`.StandardRB.__sample_sequence`. + * ``beta`` has been renamed to ``outcome_prior`` in the tomography utility + function ``binomial_weights()``. + * The ``return_data_points`` option has been removed from curve analysis. + Data points are now automatically provided in :class:`.ExperimentData` objects via the ``curve_data`` + artifact. + * The default value of ``flatten_results`` in composite experiments has changed to ``True``. + + +.. _Release Notes_0.7.0_Deprecation Notes: + +Deprecation Notes +----------------- + +.. releasenotes/notes/0.7/0_6_deprecations-9a399c48c2d461f1.yaml @ b'517532eb307897896d549f7e3de69485801d67a8' + +- Accessing experiment data artifacts by numerical index has been + deprecated. Use the name or ID of the artifact instead. + + +.. _Release Notes_0.7.0_Bug Fixes: + +Bug Fixes +--------- + +.. releasenotes/notes/0.7/fix-ecr-epg-59c8db98494966b0.yaml @ b'7a0924c24549ab4f38819a86c0ac49214d819ba2' + +- Fixed a bug in EPG (error per gate) computation in :class:`~.RBAnalysis` + where it fails with a ``TypeError`` for backends with ECR gate + as a 2-qubit basis gate (e.g. IBM Eagle processors). + See + `#1419 + `_. + for the details of the bug. + +.. releasenotes/notes/0.7/fix-epg-gatecount-60777f7a3f3566bc.yaml @ b'517532eb307897896d549f7e3de69485801d67a8' + +- The gate counting for EPG in the RB analysis code was not including the + inverse, so that the total number of operations per Clifford was incorrect, + leading to incorrect reporting of EPG from EPC. Fixed by adding +1 for the + inverse gate. + + +.. _Release Notes_0.7.0_Other Notes: + +Other Notes +----------- + +.. releasenotes/notes/0.7/add-examples-to-characterization-experiments-e77d4d26c6b49694.yaml @ b'517532eb307897896d549f7e3de69485801d67a8' + +- Added minimal working code examples to many experiment API pages, + especially characterization experiments. The minimal working code example + is a code snippet which users can copy and paste to run the experiment. + Users are required to specify a backend to use the code example. By default, + the backend used in the examples is a simulator such as ``FakeManilaV2``. + .. _Release Notes_0.6.1: 0.6.1 diff --git a/docs/tutorials/calibrations.rst b/docs/tutorials/calibrations.rst index f26e2e7373..377a9dfb0c 100644 --- a/docs/tutorials/calibrations.rst +++ b/docs/tutorials/calibrations.rst @@ -1,6 +1,14 @@ Calibrations: Schedules and gate parameters from experiments ============================================================ +.. caution:: + + Support for calibrating pulses is deprecated as of Qiskit Experiments 0.8 + and will be removed in a future version. There is no alternative support + path because Qiskit Pulse is `deprecated in Qiskit SDK + `_ with planned removal in + Qiskit 2.0. + To produce high fidelity quantum operations, we want to be able to run good gates. The calibration module in Qiskit Experiments allows users to run experiments to find the pulse shapes and parameter values that maximize the fidelity of the resulting quantum @@ -33,6 +41,17 @@ This automatic updating can also be disabled using the ``auto_update`` flag. This tutorial requires the :mod:`qiskit_dynamics` package to run simulations. You can install it with ``python -m pip install qiskit-dynamics``. +.. jupyter-execute:: + :hide-code: + + import warnings + + warnings.filterwarnings( + "ignore", + message=".*Due to the deprecation of Qiskit Pulse.*", + category=DeprecationWarning, + ) + .. jupyter-execute:: import pandas as pd diff --git a/docs/tutorials/data_processor.rst b/docs/tutorials/data_processor.rst index 96eb265a0c..890a1a164e 100644 --- a/docs/tutorials/data_processor.rst +++ b/docs/tutorials/data_processor.rst @@ -68,6 +68,17 @@ The code below sets up the Rabi experiment. This tutorial requires the :mod:`qiskit_dynamics` package to run simulations. You can install it with ``python -m pip install qiskit-dynamics``. +.. jupyter-execute:: + :hide-code: + + import warnings + + warnings.filterwarnings( + "ignore", + message=".*Due to the deprecation of Qiskit Pulse.*", + category=DeprecationWarning, + ) + .. jupyter-execute:: import numpy as np diff --git a/docs/tutorials/visualization.rst b/docs/tutorials/visualization.rst index de971ef8bb..e9dd4a38c0 100644 --- a/docs/tutorials/visualization.rst +++ b/docs/tutorials/visualization.rst @@ -38,6 +38,17 @@ First, we display the default figure from a :class:`.Rabi` experiment as a start :external+qiskit_ibm_runtime:doc:`qiskit-ibm-runtime ` packages to run simulations. You can install them with ``python -m pip install qiskit-dynamics qiskit-aer qiskit-ibm-runtime``. +.. jupyter-execute:: + :hide-code: + + import warnings + + warnings.filterwarnings( + "ignore", + message=".*Due to the deprecation of Qiskit Pulse.*", + category=DeprecationWarning, + ) + .. jupyter-execute:: import numpy as np diff --git a/qiskit_experiments/calibration_management/basis_gate_library.py b/qiskit_experiments/calibration_management/basis_gate_library.py index c5fd5a6781..cbc69d225c 100644 --- a/qiskit_experiments/calibration_management/basis_gate_library.py +++ b/qiskit_experiments/calibration_management/basis_gate_library.py @@ -25,6 +25,7 @@ from qiskit.circuit import Parameter from qiskit import pulse from qiskit.pulse import ScheduleBlock +from qiskit.utils.deprecation import deprecate_func from qiskit_experiments.calibration_management.calibration_key_types import DefaultCalValue from qiskit_experiments.exceptions import CalibrationError @@ -39,6 +40,14 @@ class BasisGateLibrary(ABC, Mapping): # Parameters that do not belong to a schedule, a set of names __parameters_without_schedule__ = set() + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=( + "Due to the deprecation of Qiskit Pulse, support for pulse " + "gate calibrations has been deprecated." + ), + ) def __init__( self, basis_gates: Optional[List[str]] = None, diff --git a/qiskit_experiments/calibration_management/calibrations.py b/qiskit_experiments/calibration_management/calibrations.py index 4058dcad7e..af5572570f 100644 --- a/qiskit_experiments/calibration_management/calibrations.py +++ b/qiskit_experiments/calibration_management/calibrations.py @@ -63,6 +63,14 @@ class Calibrations: ScheduleBlock are supported. """ + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=( + "Due to the deprecation of Qiskit Pulse, support for pulse " + "gate calibrations has been deprecated." + ), + ) def __init__( self, coupling_map: Optional[List[List[int]]] = None, diff --git a/qiskit_experiments/curve_analysis/standard_analysis/resonance.py b/qiskit_experiments/curve_analysis/standard_analysis/resonance.py index 375b4cc166..156f92d1d2 100644 --- a/qiskit_experiments/curve_analysis/standard_analysis/resonance.py +++ b/qiskit_experiments/curve_analysis/standard_analysis/resonance.py @@ -17,6 +17,8 @@ import lmfit import numpy as np +from qiskit.utils.deprecation import deprecate_func + import qiskit_experiments.curve_analysis as curve from qiskit_experiments.framework import Options @@ -59,6 +61,14 @@ class ResonanceAnalysis(curve.CurveAnalysis): """ + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=( + "Due to the deprecation of Qiskit Pulse, experiments and related classses " + "involving pulse gate calibrations like this one have been deprecated." + ), + ) def __init__( self, name: Optional[str] = None, diff --git a/qiskit_experiments/framework/backend_data.py b/qiskit_experiments/framework/backend_data.py index 3eea026cfe..5558676d06 100644 --- a/qiskit_experiments/framework/backend_data.py +++ b/qiskit_experiments/framework/backend_data.py @@ -18,6 +18,7 @@ class unifies data access for various data fields. import warnings from qiskit.providers.models import PulseBackendConfiguration # pylint: disable=no-name-in-module from qiskit.providers import BackendV1, BackendV2 +from qiskit.utils.deprecation import deprecate_func class BackendData: @@ -53,6 +54,14 @@ def name(self): return self._backend.name return str(self._backend) + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=( + "Due to the deprecation of Qiskit Pulse, utility functions involving " + "pulse like this one have been deprecated." + ), + ) def control_channel(self, qubits): """Returns the backend control channel for the given qubits""" try: @@ -67,6 +76,14 @@ def control_channel(self, qubits): return [] return [] + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=( + "Due to the deprecation of Qiskit Pulse, utility functions involving " + "pulse like this one have been deprecated." + ), + ) def drive_channel(self, qubit): """Returns the backend drive channel for the given qubit""" try: @@ -81,6 +98,14 @@ def drive_channel(self, qubit): return None return None + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=( + "Due to the deprecation of Qiskit Pulse, utility functions involving " + "pulse like this one have been deprecated." + ), + ) def measure_channel(self, qubit): """Returns the backend measure channel for the given qubit""" try: @@ -95,6 +120,14 @@ def measure_channel(self, qubit): return None return None + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=( + "Due to the deprecation of Qiskit Pulse, utility functions involving " + "pulse like this one have been deprecated." + ), + ) def acquire_channel(self, qubit): """Returns the backend acquire channel for the given qubit""" try: @@ -122,6 +155,15 @@ def granularity(self): return 1 @property + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + is_property=True, + additional_msg=( + "Due to the deprecation of Qiskit Pulse, utility functions involving " + "pulse like this one have been deprecated." + ), + ) def min_length(self): """Returns the backend's time constraint minimum duration""" try: @@ -134,6 +176,15 @@ def min_length(self): return 0 @property + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + is_property=True, + additional_msg=( + "Due to the deprecation of Qiskit Pulse, utility functions involving " + "pulse like this one have been deprecated." + ), + ) def pulse_alignment(self): """Returns the backend's time constraint pulse alignment""" try: @@ -146,6 +197,15 @@ def pulse_alignment(self): return 1 @property + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + is_property=True, + additional_msg=( + "Due to the deprecation of Qiskit Pulse, utility functions involving " + "pulse like this one have been deprecated." + ), + ) def acquire_alignment(self): """Returns the backend's time constraint acquire alignment""" try: @@ -212,6 +272,15 @@ def provider(self): return None @property + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + is_property=True, + additional_msg=( + "Due to the deprecation of Qiskit Pulse, utility functions involving " + "pulse like this one have been deprecated." + ), + ) def drive_freqs(self): """Returns the backend's qubit drive frequencies""" if self._v1: @@ -223,6 +292,15 @@ def drive_freqs(self): return [] @property + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + is_property=True, + additional_msg=( + "Due to the deprecation of Qiskit Pulse, utility functions involving " + "pulse like this one have been deprecated." + ), + ) def meas_freqs(self): """Returns the backend's measurement stimulus frequencies. diff --git a/qiskit_experiments/framework/backend_timing.py b/qiskit_experiments/framework/backend_timing.py index 523971391b..0eea6fce67 100644 --- a/qiskit_experiments/framework/backend_timing.py +++ b/qiskit_experiments/framework/backend_timing.py @@ -16,6 +16,7 @@ from qiskit import QiskitError from qiskit.providers.backend import Backend +from qiskit.utils.deprecation import deprecate_func from qiskit_experiments.framework import BackendData @@ -283,6 +284,14 @@ def round_delay( return samples_out + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=( + "Due to the deprecation of Qiskit Pulse, utility functions involving " + "pulse like this one have been deprecated." + ), + ) def round_pulse( self, *, time: Optional[float] = None, samples: Optional[Union[int, float]] = None ) -> int: @@ -363,6 +372,14 @@ def delay_time( return self.dt * self.round_delay(time=time, samples=samples) + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=( + "Due to the deprecation of Qiskit Pulse, utility functions involving " + "pulse like this one have been deprecated." + ), + ) def pulse_time( self, *, time: Optional[float] = None, samples: Optional[Union[int, float]] = None ) -> float: diff --git a/qiskit_experiments/framework/restless_mixin.py b/qiskit_experiments/framework/restless_mixin.py index 19d65c238f..7a75cbd596 100644 --- a/qiskit_experiments/framework/restless_mixin.py +++ b/qiskit_experiments/framework/restless_mixin.py @@ -15,6 +15,7 @@ import logging from typing import Callable, Sequence, Optional from qiskit.qobj.utils import MeasLevel, MeasReturnType +from qiskit.utils.deprecation import deprecate_func from qiskit.providers import Backend from qiskit_experiments.framework import Options @@ -66,6 +67,11 @@ class makes it easy to determine if restless measurements are supported for a gi _physical_qubits: Sequence[int] _num_qubits: int + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=("Support for restless experiments has been deprecated."), + ) def enable_restless( self, rep_delay: Optional[float] = None, diff --git a/qiskit_experiments/library/characterization/analysis/cr_hamiltonian_analysis.py b/qiskit_experiments/library/characterization/analysis/cr_hamiltonian_analysis.py index 9fa793600d..2d1a41f624 100644 --- a/qiskit_experiments/library/characterization/analysis/cr_hamiltonian_analysis.py +++ b/qiskit_experiments/library/characterization/analysis/cr_hamiltonian_analysis.py @@ -15,6 +15,8 @@ from typing import List, Dict import numpy as np +from qiskit.utils.deprecation import deprecate_func + import qiskit_experiments.curve_analysis as curve from qiskit_experiments.framework import AnalysisResultData from qiskit_experiments.visualization import PlotStyle @@ -44,6 +46,14 @@ class CrossResonanceHamiltonianAnalysis(curve.CompositeCurveAnalysis): """ + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=( + "Due to the deprecation of Qiskit Pulse, experiments and related classses " + "involving pulse gate calibrations like this one have been deprecated." + ), + ) def __init__(self): analyses = [] for control_state in (0, 1): diff --git a/qiskit_experiments/library/characterization/analysis/drag_analysis.py b/qiskit_experiments/library/characterization/analysis/drag_analysis.py index 351349ec08..33093be1e9 100644 --- a/qiskit_experiments/library/characterization/analysis/drag_analysis.py +++ b/qiskit_experiments/library/characterization/analysis/drag_analysis.py @@ -13,11 +13,13 @@ """DRAG pulse calibration experiment.""" import warnings -from typing import List, Union +from typing import List, Optional, Union import lmfit import numpy as np +from qiskit.utils.deprecation import deprecate_func + import qiskit_experiments.curve_analysis as curve from qiskit_experiments.framework import ExperimentData from qiskit_experiments.exceptions import AnalysisError @@ -253,3 +255,33 @@ def _initialize( self._options.data_subfit_map = data_subfit_map super()._initialize(experiment_data) + + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=( + "Due to the deprecation of Qiskit Pulse, experiments and related classses " + "involving pulse gate calibrations like this one have been deprecated." + ), + ) + def __init__( + self, + models: Optional[List[lmfit.Model]] = None, + name: Optional[str] = None, + ): + """Initialize data fields that are privately accessed by methods. + + Args: + models: List of LMFIT ``Model`` class to define fitting functions and + parameters. If multiple models are provided, the analysis performs + multi-objective optimization where the parameters with the same name + are shared among provided models. When multiple models are provided, + user must specify the ``data_subfit_map`` value in the analysis options + to allocate experimental results to a particular fit model. + name: Optional. Name of this analysis. + """ + super().__init__() + + self._models = models or [] + self._name = name or self.__class__.__name__ + self._plot_config_cache = {} diff --git a/qiskit_experiments/library/characterization/analysis/resonator_spectroscopy_analysis.py b/qiskit_experiments/library/characterization/analysis/resonator_spectroscopy_analysis.py index fa2fc44661..6fecffe2f2 100644 --- a/qiskit_experiments/library/characterization/analysis/resonator_spectroscopy_analysis.py +++ b/qiskit_experiments/library/characterization/analysis/resonator_spectroscopy_analysis.py @@ -12,9 +12,11 @@ """Spectroscopy analysis class for resonators.""" -from typing import List, Tuple +from typing import List, Optional, Tuple import numpy as np +from qiskit.utils.deprecation import deprecate_func + import qiskit_experiments.curve_analysis as curve from qiskit_experiments.framework import AnalysisResultData, ExperimentData from qiskit_experiments.framework.matplotlib import get_non_gui_ax @@ -25,6 +27,20 @@ class ResonatorSpectroscopyAnalysis(curve.ResonanceAnalysis): """Class to analysis resonator spectroscopy.""" + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=( + "Due to the deprecation of Qiskit Pulse, experiments and related classses " + "involving pulse gate calibrations like this one have been deprecated." + ), + ) + def __init__( + self, + name: Optional[str] = None, + ): + super().__init__(name=name) + @classmethod def _default_options(cls): """Return default analysis options. diff --git a/qiskit_experiments/library/characterization/cr_hamiltonian.py b/qiskit_experiments/library/characterization/cr_hamiltonian.py index 96ec192f60..dd2c0e0c71 100644 --- a/qiskit_experiments/library/characterization/cr_hamiltonian.py +++ b/qiskit_experiments/library/characterization/cr_hamiltonian.py @@ -13,6 +13,7 @@ Cross resonance Hamiltonian tomography. """ +import warnings from typing import List, Tuple, Sequence, Optional, Type import numpy as np @@ -20,6 +21,7 @@ from qiskit.circuit.parameterexpression import ParameterValueType from qiskit.exceptions import QiskitError from qiskit.providers import Backend +from qiskit.utils.deprecation import deprecate_func from qiskit_experiments.framework import ( BaseExperiment, BackendTiming, @@ -134,6 +136,14 @@ class CRPulseGate(circuit.Gate): def __init__(self, width: ParameterValueType): super().__init__("cr_gate", 2, [width]) + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=( + "Due to the deprecation of Qiskit Pulse, experiments involving pulse " + "gate calibrations like this one have been deprecated." + ), + ) def __init__( self, physical_qubits: Tuple[int, int], @@ -176,9 +186,15 @@ def __init__( self._gate_cls = cr_gate or self.CRPulseGate self._backend_timing = None - super().__init__( - physical_qubits, analysis=CrossResonanceHamiltonianAnalysis(), backend=backend - ) + with warnings.catch_warnings(): + warnings.filterwarnings( + "ignore", + message="deprecation of Qiskit Pulse", + module="qiskit_experiments", + category=DeprecationWarning, + ) + analysis = CrossResonanceHamiltonianAnalysis() + super().__init__(physical_qubits, analysis=analysis, backend=backend) self.set_experiment_options(durations=durations, **kwargs) @classmethod diff --git a/qiskit_experiments/library/characterization/drag.py b/qiskit_experiments/library/characterization/drag.py index d7ede194ca..558415a8a0 100644 --- a/qiskit_experiments/library/characterization/drag.py +++ b/qiskit_experiments/library/characterization/drag.py @@ -12,6 +12,7 @@ """Rough drag experiment.""" +import warnings from typing import Iterable, List, Optional, Sequence import numpy as np @@ -20,6 +21,7 @@ from qiskit.exceptions import QiskitError from qiskit.providers.backend import Backend from qiskit.pulse import ScheduleBlock +from qiskit.utils.deprecation import deprecate_func from qiskit_experiments.framework import BaseExperiment, Options from qiskit_experiments.framework.restless_mixin import RestlessMixin @@ -68,6 +70,14 @@ class RoughDrag(BaseExperiment, RestlessMixin): .. jupyter-execute:: :hide-code: + import warnings + + warnings.filterwarnings( + "ignore", + message=".*Due to the deprecation of Qiskit Pulse.*", + category=DeprecationWarning, + ) + # backend from qiskit_experiments.test.pulse_backend import SingleTransmonTestBackend backend = SingleTransmonTestBackend(5.2e9,-.25e9, 1e9, 0.8e9, 1e4, noise=False, seed=101) @@ -120,6 +130,14 @@ def _default_experiment_options(cls) -> Options: return options + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=( + "Due to the deprecation of Qiskit Pulse, experiments involving pulse " + "gate calibrations like this one have been deprecated." + ), + ) def __init__( self, physical_qubits: Sequence[int], @@ -142,8 +160,15 @@ def __init__( QiskitError: If the schedule does not have a free parameter. """ - # Create analysis in finalize to reflect user change to reps - super().__init__(physical_qubits, analysis=DragCalAnalysis(), backend=backend) + with warnings.catch_warnings(): + warnings.filterwarnings( + "ignore", + message="deprecation of Qiskit Pulse", + module="qiskit_experiments", + category=DeprecationWarning, + ) + analysis = DragCalAnalysis() + super().__init__(physical_qubits, analysis=analysis, backend=backend) if betas is not None: self.set_experiment_options(betas=betas) diff --git a/qiskit_experiments/library/characterization/multi_state_discrimination.py b/qiskit_experiments/library/characterization/multi_state_discrimination.py index b0a33b9313..4acb492e94 100644 --- a/qiskit_experiments/library/characterization/multi_state_discrimination.py +++ b/qiskit_experiments/library/characterization/multi_state_discrimination.py @@ -12,6 +12,7 @@ """Multi state discrimination experiment.""" +import warnings from typing import Dict, List, Optional, Sequence from qiskit import QuantumCircuit @@ -141,6 +142,14 @@ def circuits(self) -> List[QuantumCircuit]: Returns: A list of circuits preparing the different energy states. """ + warnings.warn( + ( + "Setting pulse schedules for x gates is deprecated as of " + "version 0.8 due to the deprecation of Qiskit Pulse. It will be " + "removed in a future release." + ), + DeprecationWarning, + ) circuits = [] for level in range(self.experiment_options.n_states): circuit = QuantumCircuit(1) diff --git a/qiskit_experiments/library/characterization/qubit_spectroscopy.py b/qiskit_experiments/library/characterization/qubit_spectroscopy.py index a915bb98f3..1ca8b1b61c 100644 --- a/qiskit_experiments/library/characterization/qubit_spectroscopy.py +++ b/qiskit_experiments/library/characterization/qubit_spectroscopy.py @@ -49,6 +49,14 @@ class QubitSpectroscopy(Spectroscopy): .. jupyter-execute:: :hide-code: + import warnings + + warnings.filterwarnings( + "ignore", + message=".*Due to the deprecation of Qiskit Pulse.*", + category=DeprecationWarning, + ) + # backend from qiskit_experiments.test.pulse_backend import SingleTransmonTestBackend backend = SingleTransmonTestBackend(5.2e9,-.25e9, 1e9, 0.8e9, 1e4, noise=True, seed=199) diff --git a/qiskit_experiments/library/characterization/rabi.py b/qiskit_experiments/library/characterization/rabi.py index c8d997116c..7306ce23f5 100644 --- a/qiskit_experiments/library/characterization/rabi.py +++ b/qiskit_experiments/library/characterization/rabi.py @@ -21,6 +21,7 @@ from qiskit.providers import Backend from qiskit.pulse import ScheduleBlock from qiskit.exceptions import QiskitError +from qiskit.utils.deprecation import deprecate_func from qiskit_experiments.framework import BaseExperiment, Options from qiskit_experiments.framework.restless_mixin import RestlessMixin @@ -61,6 +62,14 @@ class Rabi(BaseExperiment, RestlessMixin): .. jupyter-execute:: :hide-code: + import warnings + + warnings.filterwarnings( + "ignore", + message=".*Due to the deprecation of Qiskit Pulse.*", + category=DeprecationWarning, + ) + # backend from qiskit_experiments.test.pulse_backend import SingleTransmonTestBackend backend = SingleTransmonTestBackend(5.2e9,-0.25e9, 1e9, 0.8e9, 1e4, noise=True, seed=199) @@ -115,6 +124,14 @@ def _default_experiment_options(cls) -> Options: return options + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=( + "Due to the deprecation of Qiskit Pulse, experiments involving pulse " + "gate calibrations like this one have been deprecated." + ), + ) def __init__( self, physical_qubits: Sequence[int], @@ -230,6 +247,14 @@ class EFRabi(Rabi): .. jupyter-execute:: :hide-code: + import warnings + + warnings.filterwarnings( + "ignore", + message=".*Due to the deprecation of Qiskit Pulse.*", + category=DeprecationWarning, + ) + # backend from qiskit_experiments.test.pulse_backend import SingleTransmonTestBackend backend = SingleTransmonTestBackend(5.2e9, -0.25e9, 1e9, 0.8e9, 1e4, noise=True, seed=198) diff --git a/qiskit_experiments/library/characterization/resonator_spectroscopy.py b/qiskit_experiments/library/characterization/resonator_spectroscopy.py index 373bf18e6f..f1f5f65fa5 100644 --- a/qiskit_experiments/library/characterization/resonator_spectroscopy.py +++ b/qiskit_experiments/library/characterization/resonator_spectroscopy.py @@ -12,6 +12,7 @@ """Spectroscopy experiment class for resonators.""" +import warnings from typing import Iterable, Optional, Sequence, Tuple import numpy as np @@ -176,7 +177,14 @@ def __init__( QiskitError: If no frequencies are given and absolute frequencies are desired and no backend is given or the backend does not have default measurement frequencies. """ - analysis = ResonatorSpectroscopyAnalysis() + with warnings.catch_warnings(): + warnings.filterwarnings( + "ignore", + message="deprecation of Qiskit Pulse", + module="qiskit_experiments", + category=DeprecationWarning, + ) + analysis = ResonatorSpectroscopyAnalysis() if frequencies is None: frequencies = np.linspace(-20.0e6, 20.0e6, 51) diff --git a/qiskit_experiments/library/characterization/spectroscopy.py b/qiskit_experiments/library/characterization/spectroscopy.py index 90ec4b9281..ab0cd01e4d 100644 --- a/qiskit_experiments/library/characterization/spectroscopy.py +++ b/qiskit_experiments/library/characterization/spectroscopy.py @@ -12,6 +12,7 @@ """Abstract spectroscopy experiment base class.""" +import warnings from abc import ABC, abstractmethod from typing import Iterable, Optional, Sequence @@ -20,6 +21,7 @@ from qiskit.exceptions import QiskitError from qiskit.providers import Backend from qiskit.qobj.utils import MeasLevel +from qiskit.utils.deprecation import deprecate_func from qiskit_experiments.framework import BaseAnalysis, BaseExperiment, Options from qiskit_experiments.curve_analysis import ResonanceAnalysis @@ -60,6 +62,14 @@ def _default_run_options(cls) -> Options: return options + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=( + "Due to the deprecation of Qiskit Pulse, experiments involving pulse " + "gate calibrations like this one have been deprecated." + ), + ) def __init__( self, physical_qubits: Sequence[int], @@ -84,7 +94,14 @@ def __init__( QiskitError: If there are less than three frequency shifts. """ - analysis = analysis or ResonanceAnalysis() + with warnings.catch_warnings(): + warnings.filterwarnings( + "ignore", + message="deprecation of Qiskit Pulse", + module="qiskit_experiments", + category=DeprecationWarning, + ) + analysis = analysis or ResonanceAnalysis() super().__init__(physical_qubits, analysis=analysis, backend=backend) diff --git a/qiskit_experiments/library/driven_freq_tuning/p1_spect.py b/qiskit_experiments/library/driven_freq_tuning/p1_spect.py index 5ee1bbc18e..7c81611419 100644 --- a/qiskit_experiments/library/driven_freq_tuning/p1_spect.py +++ b/qiskit_experiments/library/driven_freq_tuning/p1_spect.py @@ -13,6 +13,7 @@ from __future__ import annotations +import warnings from collections.abc import Sequence import numpy as np @@ -20,6 +21,7 @@ from qiskit.circuit import QuantumCircuit, Gate, Parameter, ParameterExpression from qiskit.providers.backend import Backend from qiskit.utils import optionals as _optional +from qiskit.utils.deprecation import deprecate_func from qiskit_experiments.framework import BackendTiming, BaseExperiment, Options from .p1_spect_analysis import StarkP1SpectAnalysis @@ -72,6 +74,14 @@ class StarkP1Spectroscopy(BaseExperiment): """ + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=( + "Due to the deprecation of Qiskit Pulse, experiments involving pulse " + "gate calibrations like this one have been deprecated." + ), + ) def __init__( self, physical_qubits: Sequence[int], @@ -89,9 +99,18 @@ def __init__( """ self._timing = None + with warnings.catch_warnings(): + warnings.filterwarnings( + "ignore", + message="deprecation of Qiskit Pulse", + module="qiskit_experiments", + category=DeprecationWarning, + ) + analysis = StarkP1SpectAnalysis() + super().__init__( physical_qubits=physical_qubits, - analysis=StarkP1SpectAnalysis(), + analysis=analysis, backend=backend, ) self.set_experiment_options(**experiment_options) diff --git a/qiskit_experiments/library/driven_freq_tuning/p1_spect_analysis.py b/qiskit_experiments/library/driven_freq_tuning/p1_spect_analysis.py index 857f440bb8..154f0715aa 100644 --- a/qiskit_experiments/library/driven_freq_tuning/p1_spect_analysis.py +++ b/qiskit_experiments/library/driven_freq_tuning/p1_spect_analysis.py @@ -16,6 +16,8 @@ import numpy as np from uncertainties import unumpy as unp +from qiskit.utils.deprecation import deprecate_func + import qiskit_experiments.data_processing as dp import qiskit_experiments.visualization as vis from qiskit_experiments.data_processing.exceptions import DataProcessorError @@ -48,6 +50,20 @@ class StarkP1SpectAnalysis(BaseAnalysis): """ + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=( + "Due to the deprecation of Qiskit Pulse, experiments and related classses " + "involving pulse gate calibrations like this one have been deprecated." + ), + ) + def __init__(self): + """Initialize the analysis object.""" + # Pass through to parent. This method is only here to be decorated by + # deprecate_func + super().__init__() + @property def plotter(self) -> vis.CurvePlotter: """Curve plotter instance.""" diff --git a/qiskit_experiments/library/driven_freq_tuning/ramsey.py b/qiskit_experiments/library/driven_freq_tuning/ramsey.py index e214a5c4b4..fc46b198cf 100644 --- a/qiskit_experiments/library/driven_freq_tuning/ramsey.py +++ b/qiskit_experiments/library/driven_freq_tuning/ramsey.py @@ -21,6 +21,7 @@ from qiskit.circuit import QuantumCircuit, Gate, Parameter from qiskit.providers.backend import Backend from qiskit.utils import optionals as _optional +from qiskit.utils.deprecation import deprecate_func from qiskit_experiments.framework import BaseExperiment, Options, BackendTiming from qiskit_experiments.library.characterization.analysis import RamseyXYAnalysis @@ -88,6 +89,14 @@ class StarkRamseyXY(BaseExperiment): """ + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=( + "Due to the deprecation of Qiskit Pulse, experiments involving pulse " + "gate calibrations like this one have been deprecated." + ), + ) def __init__( self, physical_qubits: Sequence[int], diff --git a/qiskit_experiments/library/driven_freq_tuning/ramsey_amp_scan.py b/qiskit_experiments/library/driven_freq_tuning/ramsey_amp_scan.py index 528c3fd8bd..e82d5d7910 100644 --- a/qiskit_experiments/library/driven_freq_tuning/ramsey_amp_scan.py +++ b/qiskit_experiments/library/driven_freq_tuning/ramsey_amp_scan.py @@ -13,6 +13,7 @@ from __future__ import annotations +import warnings from collections.abc import Sequence import numpy as np @@ -20,6 +21,7 @@ from qiskit.circuit import QuantumCircuit, Gate, ParameterExpression, Parameter from qiskit.providers.backend import Backend from qiskit.utils import optionals as _optional +from qiskit.utils.deprecation import deprecate_func from qiskit_experiments.framework import BaseExperiment, Options, BackendTiming from .ramsey_amp_scan_analysis import StarkRamseyXYAmpScanAnalysis @@ -93,6 +95,14 @@ class StarkRamseyXYAmpScan(BaseExperiment): """ + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=( + "Due to the deprecation of Qiskit Pulse, experiments involving pulse " + "gate calibrations like this one have been deprecated." + ), + ) def __init__( self, physical_qubits: Sequence[int], @@ -109,9 +119,18 @@ def __init__( """ self._timing = None + with warnings.catch_warnings(): + warnings.filterwarnings( + "ignore", + message="deprecation of Qiskit Pulse", + module="qiskit_experiments", + category=DeprecationWarning, + ) + analysis = StarkRamseyXYAmpScanAnalysis() + super().__init__( physical_qubits=physical_qubits, - analysis=StarkRamseyXYAmpScanAnalysis(), + analysis=analysis, backend=backend, ) self.set_experiment_options(**experiment_options) diff --git a/qiskit_experiments/library/driven_freq_tuning/ramsey_amp_scan_analysis.py b/qiskit_experiments/library/driven_freq_tuning/ramsey_amp_scan_analysis.py index bde5750c32..fb24772514 100644 --- a/qiskit_experiments/library/driven_freq_tuning/ramsey_amp_scan_analysis.py +++ b/qiskit_experiments/library/driven_freq_tuning/ramsey_amp_scan_analysis.py @@ -19,6 +19,8 @@ import numpy as np from uncertainties import unumpy as unp +from qiskit.utils.deprecation import deprecate_func + import qiskit_experiments.curve_analysis as curve import qiskit_experiments.visualization as vis from qiskit_experiments.framework import ExperimentData, AnalysisResultData @@ -154,6 +156,14 @@ class StarkRamseyXYAmpScanAnalysis(curve.CurveAnalysis): """ + @deprecate_func( + since="0.8", + package_name="qiskit-experiments", + additional_msg=( + "Due to the deprecation of Qiskit Pulse, experiments and related classses " + "involving pulse gate calibrations like this one have been deprecated." + ), + ) def __init__(self): models = [ diff --git a/releasenotes/notes/0.7/0_6_deprecations-9a399c48c2d461f1.yaml b/releasenotes/notes/0.7/0_6_deprecations-9a399c48c2d461f1.yaml deleted file mode 100644 index 763de714ac..0000000000 --- a/releasenotes/notes/0.7/0_6_deprecations-9a399c48c2d461f1.yaml +++ /dev/null @@ -1,29 +0,0 @@ ---- -upgrade_package: - - | - Several deprecated modules, methods, functions, and options have been removed and will no longer work: - - * The visualization module of :mod:`.CurveAnalysis` has been replaced by the - standalone :mod:`.visualization` module. The ``LegacyCurveCompatDrawer`` has - been removed from :mod:`.visualization`. - * The ``curve_drawer`` option to :class:`.CompositeCurveAnalysis` has been - replaced by the plotter in the visualization module. - * The ``SeriesDef`` dataclass has been removed and replaced by the ``LMFIT`` module. - * The ``CurveData`` dataclass has been removed and replaced by :class:`.ScatterTable`'s DataFrame representation. - * ``random_cliffords()`` and ``random_clifford_circuits()`` have been - removed from :class:`.CliffordUtils` and replaced by :meth:`.StandardRB.__sample_sequence`. - * ``beta`` has been renamed to ``outcome_prior`` in the tomography utility - function ``binomial_weights()``. - * The ``return_data_points`` option has been removed from curve analysis. - Data points are now automatically provided in :class:`.ExperimentData` objects via the ``curve_data`` - artifact. - * The default value of ``flatten_results`` in composite experiments has changed to ``True``. -deprecations: - - | - Accessing experiment data artifacts by numerical index has been - deprecated. Use the name or ID of the artifact instead. -issues: - - | - Fit parameters are not populated in composite curve analysis results and are - found only in the fit summary artifact. In a future release, they will be - removed from all analysis result objects and live in the artifacts only. diff --git a/releasenotes/notes/0.7/0_7_release-96efcec2c45dcf74.yaml b/releasenotes/notes/0.7/0_7_release-96efcec2c45dcf74.yaml deleted file mode 100644 index 3b79545dcc..0000000000 --- a/releasenotes/notes/0.7/0_7_release-96efcec2c45dcf74.yaml +++ /dev/null @@ -1,7 +0,0 @@ ---- -prelude: > - The Qiskit Experiments 0.7 release adds the Layer Fidelity experiment and makes some fixes and improvements. -upgrade: - - | - Changes in behavior that users should be aware of when upgrading Qiskit Experiments - to this version are listed below in subsections by functional area. \ No newline at end of file diff --git a/releasenotes/notes/0.7/add-examples-to-characterization-experiments-e77d4d26c6b49694.yaml b/releasenotes/notes/0.7/add-examples-to-characterization-experiments-e77d4d26c6b49694.yaml deleted file mode 100644 index ab79938846..0000000000 --- a/releasenotes/notes/0.7/add-examples-to-characterization-experiments-e77d4d26c6b49694.yaml +++ /dev/null @@ -1,8 +0,0 @@ ---- -other: - - | - Added minimal working code examples to many experiment API pages, - especially characterization experiments. The minimal working code example - is a code snippet which users can copy and paste to run the experiment. - Users are required to specify a backend to use the code example. By default, - the backend used in the examples is a simulator such as ``FakeManilaV2``. diff --git a/releasenotes/notes/0.7/fix-ecr-epg-59c8db98494966b0.yaml b/releasenotes/notes/0.7/fix-ecr-epg-59c8db98494966b0.yaml deleted file mode 100644 index b370d59978..0000000000 --- a/releasenotes/notes/0.7/fix-ecr-epg-59c8db98494966b0.yaml +++ /dev/null @@ -1,10 +0,0 @@ ---- -fixes: - - | - Fixed a bug in EPG (error per gate) computation in :class:`~.RBAnalysis` - where it fails with a ``TypeError`` for backends with ECR gate - as a 2-qubit basis gate (e.g. IBM Eagle processors). - See - `#1419 - `_. - for the details of the bug. diff --git a/releasenotes/notes/0.7/fix-epg-gatecount-60777f7a3f3566bc.yaml b/releasenotes/notes/0.7/fix-epg-gatecount-60777f7a3f3566bc.yaml deleted file mode 100644 index 1f69daab49..0000000000 --- a/releasenotes/notes/0.7/fix-epg-gatecount-60777f7a3f3566bc.yaml +++ /dev/null @@ -1,7 +0,0 @@ ---- -fixes: - - | - The gate counting for EPG in the RB analysis code was not including the - inverse, so that the total number of operations per Clifford was incorrect, - leading to incorrect reporting of EPG from EPC. Fixed by adding +1 for the - inverse gate. diff --git a/releasenotes/notes/0.7/layer-fidelity-1e09dea9e5b69515.yaml b/releasenotes/notes/0.7/layer-fidelity-1e09dea9e5b69515.yaml deleted file mode 100644 index b3d110bdd4..0000000000 --- a/releasenotes/notes/0.7/layer-fidelity-1e09dea9e5b69515.yaml +++ /dev/null @@ -1,25 +0,0 @@ ---- -features: - - | - Add a new experiment class :class:`.LayerFidelity` to measure - `layer fidelity and EPLG (error per layered gate) `_, - which is a holistic benchmark to characterize the full quality of the devices at scale. - - It has an experimental feature: its :meth:`circuits` - exceptionally returns circuits on physical qubits (not virtual qubits as usual). - Its analysis class :class:`.LayerFidelityAnalysis` returns :class:`.AnalysisResultData` - which contains several ``extra`` entries to help additional analyses: e.g. - ``qubits`` to ease the query of sub-analysis results and - ``reason`` to tell users why the ``quality`` of the analysis was ``"bad"``. - - For example, the syntax for pulling out the individual fidelities looks like below. - - .. code-block:: python - - df = exp_data.analysis_results(dataframe=True) - df[(df.name=="ProcessFidelity") & (df.qubits==(59, 60))].value - - See `an example notebook - `_ - for more examples such as how to select a best possible qubit chain to measure and - how to plot EPLG as a function of (sub)chain length. \ No newline at end of file diff --git a/releasenotes/notes/0.7/residuals_plot-377aabb9193a5a98.yaml b/releasenotes/notes/0.7/residuals_plot-377aabb9193a5a98.yaml deleted file mode 100644 index 45d330c624..0000000000 --- a/releasenotes/notes/0.7/residuals_plot-377aabb9193a5a98.yaml +++ /dev/null @@ -1,8 +0,0 @@ ---- -features: - - | - Added an option to plot residuals for single-figure experiments, which is enable by setting ``plot_residuals`` to ``True``. - - | - Introduced ``sub_plot_heights_list`` and ``sub_plot_widths_list`` attributes in :class:`.PlotStyle` for customizable - subplot sizes where each list needs to sum up to 1. This feature currently works only for experiments with - no subplots. diff --git a/releasenotes/notes/0.8/deprecate-pulse-2a13fc783985ac27.yaml b/releasenotes/notes/0.8/deprecate-pulse-2a13fc783985ac27.yaml new file mode 100644 index 0000000000..262dfd94f9 --- /dev/null +++ b/releasenotes/notes/0.8/deprecate-pulse-2a13fc783985ac27.yaml @@ -0,0 +1,32 @@ +--- +deprecations: + - | + Experiments involving pulse gate calibrations have been deprecated, due to + the upcoming `deprecation of Qiskit Pulse in Qiskit 2.0 + `_. These experiments + include ``QubitSpectroscopy``, ``EFSpectroscopy``, ``Rabi``, ``EFRabi``, + ``ResonatorSpectroscopy``, ``RoughDrag``, ``StarkRamseyXY``, + ``StarkRamseyXYAmpScan``, ``StarkP1Spectroscopy``, + ``CrossResonanceHamiltonian``, ``EchoedCrossResonanceHamiltonian``, + ``RoughFrequencyCal``, ``RoughEFFrequencyCal``, ``FrequencyCal``, + ``FineFrequencyCal``, ``RoughDragCal``, ``FineXDragCal``, + ``FineSXDragCal``, ``FineDragCal``, ``FineAmplitudeCal``, + ``FineXAmplitudeCal``, ``FineSXAmplitudeCal``, ``HalfAngleCal``, + ``RoughAmplitudeCal``, ``RoughXSXAmplitudeCal``, and + ``EFRoughXSXAmplitudeCal``. + - | + Also due to the deprecation of Qiskit Pulse, support for providing pulse + gate calibrations to excite higher levels has been deprecated from + :class:`.MultiStateDiscrimination`. + - | + The ``Calibrations`` class and all of Qiskit Experiments' calibration + support is deprecated. The calibrations features were based on adjusting + parameters of pulses used in gates. With the deprecation of Qiskit Pulse, + these features are now also deprecated. + - | + Support for running experiments in restless mode using the + ``RestlessMixin`` is deprecated. With improvements in the reliability of + IBM Quantum's qubit initialization, circuit exectuion has already become + reasonably fast and restless measurements do not add much performance + improvement. It is expected that the restless features are little used as + there has been no recent user feedback about them. diff --git a/releasenotes/notes/0.8/fixes_qiskit_1_2-6d60334235081088.yaml b/releasenotes/notes/0.8/fixes_qiskit_1_2-6d60334235081088.yaml new file mode 100644 index 0000000000..65bbed504f --- /dev/null +++ b/releasenotes/notes/0.8/fixes_qiskit_1_2-6d60334235081088.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + Qiskit Experiments was updated to be compatible with Qiskit 1.2, + including removing references to ``QuantumCircuit._parameter_table`` + which prevented randomized benchmarking and layer fidelity + experiments from running. \ No newline at end of file diff --git a/releasenotes/notes/primitives_add-1a3bcbb2f189d18e.yaml b/releasenotes/notes/0.8/primitives_add-1a3bcbb2f189d18e.yaml similarity index 100% rename from releasenotes/notes/primitives_add-1a3bcbb2f189d18e.yaml rename to releasenotes/notes/0.8/primitives_add-1a3bcbb2f189d18e.yaml diff --git a/test/base.py b/test/base.py index d7fa6b763f..486de3ca06 100644 --- a/test/base.py +++ b/test/base.py @@ -145,6 +145,20 @@ def setUpClass(cls): message=".*have no effect in local testing mode.*", category=UserWarning, ) + # All of the pulse related code is going to be removed, so we just + # ignore its warnings for now. + warnings.filterwarnings( + "default", + message=".*Due to the deprecation of Qiskit Pulse.*", + category=DeprecationWarning, + ) + # All of the restless related code is going to be removed, so we just + # ignore its warnings for now. + warnings.filterwarnings( + "default", + message=".*Support for restless experiments has been deprecated.*", + category=DeprecationWarning, + ) # Some functionality may be deprecated in Qiskit Experiments. If # the deprecation warnings aren't filtered, the tests will fail as