diff --git a/qiskit/pulse/instructions/instruction.py b/qiskit/pulse/instructions/instruction.py index bf6097e50e43..3a1764f817f6 100644 --- a/qiskit/pulse/instructions/instruction.py +++ b/qiskit/pulse/instructions/instruction.py @@ -29,7 +29,7 @@ from qiskit.pulse.exceptions import PulseError from qiskit.utils import optionals as _optionals -from qiskit.utils.deprecation import deprecate_function +from qiskit.utils.deprecation import deprecate_func # pylint: disable=bad-docstring-quotes @@ -223,10 +223,12 @@ def is_parameterized(self) -> bool: """Return True iff the instruction is parameterized.""" return any(self.parameters) - @deprecate_function( - "Drawing individual pulses is deprecated since Terra 0.23, and will be removed in a future" - " version of the library. No direct alternative is being provided, but instructions can" - " be visualized as part of a complete schedule using `qiskit.visualization.pulse_drawer`.", + @deprecate_func( + additional_msg=( + "No direct alternative is being provided to drawing individual pulses. But, " + "instructions can be visualized as part of a complete schedule using " + "``qiskit.visualization.pulse_drawer``." + ), since="0.23.0", ) @_optionals.HAS_MATPLOTLIB.require_in_call diff --git a/qiskit/pulse/library/parametric_pulses.py b/qiskit/pulse/library/parametric_pulses.py index 201478193a4c..6dc05850e926 100644 --- a/qiskit/pulse/library/parametric_pulses.py +++ b/qiskit/pulse/library/parametric_pulses.py @@ -36,7 +36,6 @@ class ParametricPulseShapes(Enum): ... new_supported_pulse_name = library.YourPulseWaveformClass """ -import warnings from abc import abstractmethod from typing import Any, Dict, Optional, Union @@ -49,6 +48,7 @@ class ParametricPulseShapes(Enum): from qiskit.pulse.library.discrete import gaussian, gaussian_square, drag, constant from qiskit.pulse.library.pulse import Pulse from qiskit.pulse.library.waveform import Waveform +from qiskit.utils.deprecation import deprecate_func class ParametricPulse(Pulse): @@ -63,6 +63,14 @@ class ParametricPulse(Pulse): """ @abstractmethod + @deprecate_func( + additional_msg=( + "Instead, use SymbolicPulse because of QPY serialization support. See " + "qiskit.pulse.library.symbolic_pulses for details." + ), + since="0.22", + pending=True, + ) def __init__( self, duration: Union[int, ParameterExpression], @@ -79,14 +87,6 @@ def __init__( amplitude is constrained to 1. """ super().__init__(duration=duration, name=name, limit_amplitude=limit_amplitude) - - warnings.warn( - "ParametricPulse and its subclass will be deprecated and will be replaced with " - "SymbolicPulse and its subclass because of QPY serialization support. " - "See qiskit.pulse.library.symbolic_pulses for details.", - PendingDeprecationWarning, - stacklevel=3, - ) self.validate_parameters() @abstractmethod @@ -132,6 +132,14 @@ class Gaussian(ParametricPulse): and practical DSP reasons it has the name ``Gaussian``. """ + @deprecate_func( + additional_msg=( + "Instead, use Gaussian from qiskit.pulse.library.symbolic_pulses because of " + "QPY serialization support." + ), + since="0.22", + pending=True, + ) def __init__( self, duration: Union[int, ParameterExpression], @@ -236,6 +244,14 @@ class GaussianSquare(ParametricPulse): and practical DSP reasons it has the name ``GaussianSquare``. """ + @deprecate_func( + additional_msg=( + "Instead, use GaussianSquare from qiskit.pulse.library.symbolic_pulses because of " + "QPY serialization support." + ), + since="0.22", + pending=True, + ) def __init__( self, duration: Union[int, ParameterExpression], @@ -398,6 +414,14 @@ class Drag(ParametricPulse): Phys. Rev. Lett. 103, 110501 – Published 8 September 2009.* """ + @deprecate_func( + additional_msg=( + "Instead, use Drag from qiskit.pulse.library.symbolic_pulses because of " + "QPY serialization support." + ), + since="0.22", + pending=True, + ) def __init__( self, duration: Union[int, ParameterExpression], @@ -513,6 +537,14 @@ class Constant(ParametricPulse): f(x) = 0 , elsewhere """ + @deprecate_func( + additional_msg=( + "Instead, use Constant from qiskit.pulse.library.symbolic_pulses because of " + "QPY serialization support." + ), + since="0.22", + pending=True, + ) def __init__( self, duration: Union[int, ParameterExpression], diff --git a/qiskit/pulse/library/symbolic_pulses.py b/qiskit/pulse/library/symbolic_pulses.py index 29292eae80bd..9102df2355e3 100644 --- a/qiskit/pulse/library/symbolic_pulses.py +++ b/qiskit/pulse/library/symbolic_pulses.py @@ -29,6 +29,7 @@ from qiskit.pulse.library.pulse import Pulse from qiskit.pulse.library.waveform import Waveform from qiskit.utils import optionals as _optional +from qiskit.utils.deprecation import deprecate_arg if _optional.HAS_SYMENGINE: import symengine as sym @@ -586,6 +587,18 @@ class ScalableSymbolicPulse(SymbolicPulse): :math:'\text{amp}\times\exp\left(i\times\text{angle}\right)' is compared. """ + @deprecate_arg( + "amp", + deprecation_description=( + "Setting ``amp`` to a complex in the ScalableSymbolicPulse constructor" + ), + additional_msg=( + "Instead, use a float for ``amp`` (for the magnitude) and a float for ``angle``" + ), + since="0.23.0", + pending=True, + predicate=lambda amp: isinstance(amp, complex), + ) def __init__( self, pulse_type: str, @@ -620,18 +633,10 @@ def __init__( Raises: PulseError: If both `amp` is complex and `angle` is not `None` or 0. - """ - # This should be removed once complex amp support is deprecated. - if isinstance(amp, complex): - if angle is None or angle == 0: - warnings.warn( - "Complex amp will be deprecated. " - "Use float amp (for the magnitude) and float angle instead.", - PendingDeprecationWarning, - ) - else: - raise PulseError("amp can't be complex with angle not None or 0") + # This should be removed once complex amp support is removed. + if isinstance(amp, complex) and angle is not None and angle != 0: + raise PulseError("amp can't be complex with angle not None or 0") if angle is None: angle = 0 diff --git a/qiskit/pulse/transforms/alignments.py b/qiskit/pulse/transforms/alignments.py index a00ee82873ba..c4cac6d4b782 100644 --- a/qiskit/pulse/transforms/alignments.py +++ b/qiskit/pulse/transforms/alignments.py @@ -13,7 +13,6 @@ import abc from typing import Callable, Dict, Any, Union, Tuple -import warnings import numpy as np @@ -21,6 +20,7 @@ from qiskit.pulse.exceptions import PulseError from qiskit.pulse.schedule import Schedule, ScheduleComponent from qiskit.pulse.utils import instruction_duration_validation +from qiskit.utils.deprecation import deprecate_func class AlignmentKind(abc.ABC): @@ -45,14 +45,9 @@ def align(self, schedule: Schedule) -> Schedule: """ pass + @deprecate_func(since="0.21") def to_dict(self) -> Dict[str, Any]: """Returns dictionary to represent this alignment.""" - warnings.warn( - "The AlignmentKind.to_dict method is deprecated as of Qiskit Terra " - "0.21 and will be removed no sooner than 3 months after the release date.", - category=DeprecationWarning, - stacklevel=2, - ) return {"alignment": self.__class__.__name__} @property @@ -335,14 +330,9 @@ def align(self, schedule: Schedule) -> Schedule: return aligned + @deprecate_func(since="0.21") def to_dict(self) -> Dict[str, Any]: """Returns dictionary to represent this alignment.""" - warnings.warn( - "The AlignEquispaced.to_dict method is deprecated as of Qiskit Terra " - "0.21 and will be removed no sooner than 3 months after the release date.", - category=DeprecationWarning, - stacklevel=2, - ) return {"alignment": self.__class__.__name__, "duration": self.duration} @@ -424,17 +414,12 @@ def align(self, schedule: Schedule) -> Schedule: return aligned + @deprecate_func(since="0.21") def to_dict(self) -> Dict[str, Any]: """Returns dictionary to represent this alignment. .. note:: ``func`` is not presented in this dictionary. Just name. """ - warnings.warn( - "The AlignFunc.to_dict method is deprecated as of Qiskit Terra " - "0.21 and will be removed no sooner than 3 months after the release date.", - category=DeprecationWarning, - stacklevel=2, - ) return { "alignment": self.__class__.__name__, "duration": self.duration, diff --git a/qiskit/pulse/utils.py b/qiskit/pulse/utils.py index ee3d6b6e039a..1e2577d5f2a9 100644 --- a/qiskit/pulse/utils.py +++ b/qiskit/pulse/utils.py @@ -18,7 +18,7 @@ from qiskit.circuit.parameterexpression import ParameterExpression from qiskit.pulse.exceptions import UnassignedDurationError, QiskitError -from qiskit.utils import deprecate_function # pylint: disable=cyclic-import +from qiskit.utils.deprecation import deprecate_func, deprecate_function def format_meas_map(meas_map: List[List[int]]) -> Dict[int, List[int]]: @@ -98,8 +98,8 @@ def instruction_duration_validation(duration: int): ) -@deprecate_function( - "Deprecated since Terra 0.22.0. Use 'qiskit.utils.deprecate_function' instead.", +@deprecate_func( + additional_msg="Instead, use 'qiskit.utils.deprecate_func'.", since="0.22.0", ) def deprecated_functionality(func):