diff --git a/releasenotes/notes/0.3/0.3-summary-8bdd0273e78a9795.yaml b/releasenotes/notes/0.3/0.3-summary-8bdd0273e78a9795.yaml new file mode 100644 index 000000000..e7f60c551 --- /dev/null +++ b/releasenotes/notes/0.3/0.3-summary-8bdd0273e78a9795.yaml @@ -0,0 +1,115 @@ +--- +prelude: > + This release has several major changes: + - Adds perturbation theory sub module for computing and utilizing the Dyson series + and Magnus expansion in a multi-variable setting. These tools can be applied to both + Hamiltonian and Lindblad dynamics, and more generally to any linear matrix differential + equation. + - Introduces functionality for simulating Qiskit Pulse schedules using the + :class:`.Solver` class. + - Adds new solver methods accessible through :func:`.solve_ode` and :func:`.solve_lmde`. +features: + - | + Adds support for Python 3.10. Starting with this release + Qiskit Dynamics now supports running with Python 3.7 through 3.10. + - | + The :meth:`.Solver.solve` method can now run multiple simulations in a single call by + specifying one or more of the ``t_span``, ``y0``, and ``signals`` + arguments as lists of valid single inputs. This supports specifying all as a list of the + same length (with a different value for each to be used in each simulation), or a subset + can be specified with lists of the same length, with the other arguments giving only a single + value (to be used repeatedly while varying the other parameters). Results are returned as a + list of the results of the individual simulations. The list of simulations is performed + in a serial loop. + - | + The :class:`.Solver` class has been upgraded to enable Qiskit Pulse schedule simulation. + :class:`.Solver` can be configured to interpet pulse schedules at instantiation, + and schedules can be simulated by passing them via the ``signals`` argument to + :meth:`.Solver.solve`. + - | + Adds function :func:`.solve_lmde_perturbation` for computing Dyson series and Magnus + expansion terms, a results container class :class:`.PerturbationResults`, and the + class :class:`.ArrayPolynomial` for evaluating and performing computations with + multi-variable array-valued polynomials (used in the solver classes of the next item). + - | + Adds classes :class:`.DysonSolver` and :class:`.MagnusSolver` implementing perturbation + expansion-based fixed-step solvers for linear matrix differential equations. + - | + Adds support for solvers from the `diffrax package + `_. + To call a diffrax solver, pass it as the ``method`` kwarg to :func:`solve_lmde`. For example:: + + from diffrax import Dopri5 + from qiskit-dynamics import solve_ode + + results = solve_ode(rhs=rhs, t_span=t_span, y0=y0, method=Dopri5()) + - | + Adds new methods ``'lanczos_diag'`` and the JAX version ``'jax_lanczos_diag'`` + to `solve_lmde`. This is an approximate matrix-exponentiation method, based + on diagonalizing an approximate projection of the generator to a small subspace + (the Krylov Subspace), obtained via the Lanczos algorithm. The size of this + subspace is determined by the parameter ``k_dim``, which controls the accuracy of the + approximation. The method is recommended for sparse systems with large dimension. +upgrade: + - | + The :class:`.Solver` API has been updated so that ``signals`` are passed + as a kwarg to the :meth:`.Solver.solve` method rather than being set at + instantiation. A new instantiation argument, ``rwa_carrier_freqs``, has been + added to control behaviour of the rotating wave approximation in the absence + of signals being specified. + - | + The ``InstructionsToSignals`` converter has been updated to allow channel + filtering via an optional instantiation argument named ``channels``. + If set, the converter only returns signals for those channels, specified by name such + as ``"d0"``, in the same order in which they are given. Furthermore, the + ``carriers`` argument is updated to a dictionary to make the mapping from + channel names to carrier frequencies more obvious. + - | + The following deprecated imports from the dispatch module have have been + removed from the package: + ``qiskit_dynamics.dispatch.Array``, + ``qiskit_dynamics.dispatch.wrap``, + ``qiskit_dynamics.dispatch.set_default_backend``, + ``qiskit_dynamics.dispatch.default_backend``, + ``qiskit_dynamics.dispatch.available_backends``, + ``qiskit_dynamics.dispatch.backend_types``. + + ``Array`` and ``wrap`` and must now be imported from the + :mod:`qiskit_dynamics.array` module, and the other functions must be + accessed as :class:`.Array` class methods. + - | + Adds ``multiset`` package as a dependency. +deprecations: + - | + Passing the ``carriers`` argument to ``InstructionToSignals`` as a ``list`` + has been deprecated and will be removed next release. The ``carriers`` argument + should now be passed as a dictionary with channel names as keys and carrier + frequencies as values. This option will be removed in the 0.4.0 release. + - | + The ``signals`` property and ``hamiltonian_signals`` and ``dissipator_signals`` init kwargs + of :class:`.Solver` have been deprecated. Signals are now specified as a kwarg to the + :meth:`.Solver.solve` method. The deprecated functionality is scheduled to be removed in the + 0.4.0 release. + - | + The :meth:`.Solver.copy` method has been deprecated and is scheduled to be removed + in the 0.4.0 release. +fixes: + - | + Fixes the :meth:`.Solver.solve` method to preserve dimensionality data of the input + states when producing output states. E.g. if ``y0`` is a ``Statevector``, the output + states ``yf`` will satisfy ``yf.dims() == y0.dims()``. + - | + The ``rotating_wave_approximation`` function has been fixed in the case of + the ``model`` argument being a ``LindbladModel`` with ``return_signal_map=True``. + The returned signal mapping function was erroneously defined to take two inputs, + one for Hamiltonian signals and one for dissipator signals. This behaviour has been updated + to be consistent with the documentation, which states that, in general, this function accepts + only a single argument (in this case a tuple storing both sets of signals). + - | + ``RotatingFrame.operator_into_frame_basis`` and ``RotatingFrame.operator_out_of_frame_basis`` + were fixed to work on lists of scipy CSR matrices. +other: + - | + The ``DiscreteSignal.envelope`` function has been changed so that if ``t`` is + outside the interval defined by ``start_time`` and ``start_time + dt * len(samples)`` + it will return ``0.0``. diff --git a/releasenotes/notes/add-diffrax-solvers-946869d5a304318a.yaml b/releasenotes/notes/add-diffrax-solvers-946869d5a304318a.yaml deleted file mode 100644 index 0920dbac7..000000000 --- a/releasenotes/notes/add-diffrax-solvers-946869d5a304318a.yaml +++ /dev/null @@ -1,17 +0,0 @@ ---- -features: - - | - Added support for solvers from the diffrax package: - https://github.com/patrick-kidger/diffrax. A new option - is enabled to pass in an object -- a solver from diffrax - instead of a string for a jax or scipy solver, for example:: - - from diffrax import Dopri5 - from qiskit-dynamics import solve_ode - - sol = solve_ode( - rhs: some_function, - t_span: some_t_span, - y0: some_initial_conditions, - method: Dopri5() - ) diff --git a/releasenotes/notes/added-lanczos-lmde-method-69965748e383cf03.yaml b/releasenotes/notes/added-lanczos-lmde-method-69965748e383cf03.yaml deleted file mode 100644 index aa87d9202..000000000 --- a/releasenotes/notes/added-lanczos-lmde-method-69965748e383cf03.yaml +++ /dev/null @@ -1,9 +0,0 @@ ---- -features: - - | - New methods ``'lanczos_diag'`` and the JAX version ``'jax_lanczos_diag'`` have been - added to `solve_lmde`. This is an approximate matrix-exponentiation method, based - on diagonalizing an approximate projection of the generator to a small subspace (the Krylov Subspace), - obtained via the Lanczos algorithm. The size of this subspace is determined by the parameter ``k_dim``, - which controls the accuracy of the approximation. The method is recommended for sparse systems with - large dimension. \ No newline at end of file diff --git a/releasenotes/notes/discrete_signal_bounds_handling-e960ae879c409233.yaml b/releasenotes/notes/discrete_signal_bounds_handling-e960ae879c409233.yaml deleted file mode 100644 index 49c6b1428..000000000 --- a/releasenotes/notes/discrete_signal_bounds_handling-e960ae879c409233.yaml +++ /dev/null @@ -1,6 +0,0 @@ ---- -other: - - | - The `DiscreteSignal.envelope` function has been changed so that if `t` is - outside the interval defined by `start_time` and `start_time + dt * - len(samples)` it will return `0.0`. \ No newline at end of file diff --git a/releasenotes/notes/lindblad-rwa-bug-491aaeed27ab4780.yaml b/releasenotes/notes/lindblad-rwa-bug-491aaeed27ab4780.yaml deleted file mode 100644 index ce7e52d7f..000000000 --- a/releasenotes/notes/lindblad-rwa-bug-491aaeed27ab4780.yaml +++ /dev/null @@ -1,9 +0,0 @@ ---- -fixes: - - | - The ``rotating_wave_approximation`` function has been fixed in the case of - the ``model`` argument being a ``LindbladModel`` with ``return_signal_map=True``. - The returned signal mapping function was erroneously defined to take two inputs, - one for Hamiltonian signals and one for dissipator signals. This behaviour has been updated - to be consistent with the documentation, which states that in general this function accepts - only a single argument (in this case a tuple storing both sets of signals). diff --git a/releasenotes/notes/perturbation-module-b819dfac35c60551.yaml b/releasenotes/notes/perturbation-module-b819dfac35c60551.yaml deleted file mode 100644 index c5d774616..000000000 --- a/releasenotes/notes/perturbation-module-b819dfac35c60551.yaml +++ /dev/null @@ -1,19 +0,0 @@ ---- -prelude: > - Adds perturbation theory sub module for computing and utilizing the Dyson series - and Magnus expansion in a multi-variable setting. -features: - - | - Adds :class:`.ArrayPolynomial` for representing multi-variable array-valued polynomials. - - | - Adds function :func:`.solve_lmde_perturbation` for computing Dyson series and Magnus - expansion terms for solutions to linear matrix differential equations. - - | - Adds data container class :class:`.PerturbationResults` for storing and accessing the - results of :func:`.solve_lmde_perturbation`. - - | - Adds classes :class:`.DysonSolver` and :class:`.MagnusSolver` implementing perturbation - expansion-based fixed-step solvers for linear matrix differential equations. -upgrade: - - | - Adds ``multiset`` package as a dependency. diff --git a/releasenotes/notes/pulse-converter-filtering-8c919fa5b330a709.yaml b/releasenotes/notes/pulse-converter-filtering-8c919fa5b330a709.yaml deleted file mode 100644 index 032e55024..000000000 --- a/releasenotes/notes/pulse-converter-filtering-8c919fa5b330a709.yaml +++ /dev/null @@ -1,15 +0,0 @@ ---- -upgrade: - - | - The ``InstructionsToSignals`` converter has been updated to allow channel - filtering. The converter now accepts an optional argument named ``channels``. - It makes the converter return only those channels, specified by name such - as "d0", in the same order in which they are given. Furthermore, the - ``carriers`` argument is updated to a dictionary to make the mapping from - channel names to carrier frequencies more obvious. -deprecations: - - | - Passing the ``carriers`` argument to ``InstructionToSignals`` as a ``list`` - has been deprecated and will be removed next release. The ``carriers`` argument - should now be passed as a dictionary with channel names as keys and carrier - frequencies as values. diff --git a/releasenotes/notes/python-310-support-f7040d4ff5e4022e.yaml b/releasenotes/notes/python-310-support-f7040d4ff5e4022e.yaml deleted file mode 100644 index 81ded8008..000000000 --- a/releasenotes/notes/python-310-support-f7040d4ff5e4022e.yaml +++ /dev/null @@ -1,5 +0,0 @@ ---- -features: - - | - Added support for running with Python 3.10. Starting with this release Qiskit Dynamics now supports - running with Python 3.7 through 3.10. diff --git a/releasenotes/notes/remove-deprecated-c6628799fc549840.yaml b/releasenotes/notes/remove-deprecated-c6628799fc549840.yaml deleted file mode 100644 index 15f2e5fc8..000000000 --- a/releasenotes/notes/remove-deprecated-c6628799fc549840.yaml +++ /dev/null @@ -1,15 +0,0 @@ ---- -upgrade: - - | - The following deprecated imports from the dispatch module have have been - removed from the package: - ``qiskit_dynamics.dispatch.Array`, - ``qiskit_dynamics.dispatch.wrap``, - ``qiskit_dynamics.dispatch.set_default_backend``, - ``qiskit_dynamics.dispatch.default_backend``, - ``qiskit_dynamics.dispatch.available_backends``, - ``qiskit_dynamics.dispatch.backend_types``. - - ``Array`` and ``wrap`` and must now be imported from the - :mod:`qiskit_dynamics.array` module, and the other functions must be - accessed as :class:`~qiskit_dynamics.array.Array` class methods. diff --git a/releasenotes/notes/schedule-simulation-139b9e37f815fec7.yaml b/releasenotes/notes/schedule-simulation-139b9e37f815fec7.yaml deleted file mode 100644 index a605fc69e..000000000 --- a/releasenotes/notes/schedule-simulation-139b9e37f815fec7.yaml +++ /dev/null @@ -1,6 +0,0 @@ ---- -upgrade: - - | - The ``Solver`` class has been upgraded to enable Qiskit Pulse schedule simulation. - Configuration information for interpeting pulse schedules is provided at instantiation, - and schedules can be solved by passing them via the ``signals`` argument to ``Solver.solve``. diff --git a/releasenotes/notes/solver-generalization-ad588a54c830c66f.yaml b/releasenotes/notes/solver-generalization-ad588a54c830c66f.yaml deleted file mode 100644 index 29b717107..000000000 --- a/releasenotes/notes/solver-generalization-ad588a54c830c66f.yaml +++ /dev/null @@ -1,27 +0,0 @@ ---- -upgrade: - - | - The :class:`~.Solver` API has been updated so that ``signals`` are passed - as a kwarg to the :meth:`.Solver.solve` method rather than being set as a - class attribute. A new instantiation argument, ``rwa_carrier_freqs``, has been - added to control behaviour of the rotating wave approximation in the absence - of signals being specified. -features: - - | - The :meth:`.Solver.solve` method can now run multiple simulations in a single call by - specifying one or more of the ``t_span``, ``y0``, and ``signals`` - arguments as lists of valid single inputs. This supports specifying all as a list of the - same length (with a different value for each to be used in each simulation), or a subset - can be specified with lists of the same length, with the other arguments giving only a single - value (to be used repeatedly while varying the other parameters). Results are returned as a - list of the results of the individual simulations. The list of simulations is performed - in a serial loop. -deprecations: - - | - The ``signals`` property and ``hamiltonian_signals`` and ``dissipator_signals`` init kwargs - of :class:`.Solver` have been deprecated. Signals are now specified as a kwarg to the - :meth:`.Solver.solve` method. The deprecated functionality is scheduled to be removed in the - 0.4.0 release. - - | - The :meth:`~.Solver.copy` method has been deprecated and is scheduled to be removed - in the 0.4.0 release. diff --git a/releasenotes/notes/solver-state-types-b5715520753ce510.yaml b/releasenotes/notes/solver-state-types-b5715520753ce510.yaml deleted file mode 100644 index 01e081ff8..000000000 --- a/releasenotes/notes/solver-state-types-b5715520753ce510.yaml +++ /dev/null @@ -1,6 +0,0 @@ ---- -upgrade: - - | - The ``Solver.solve`` method has been updated to preserve dimensionality data of the input - states when producing output states. E.g. if ``y0`` is a ``Statevector``, the output - states ``yf`` will satisfy ``yf.dims() == y0.dims()``. diff --git a/releasenotes/notes/sparse-rotating-frame-bug-88fffd0f39d8128b.yaml b/releasenotes/notes/sparse-rotating-frame-bug-88fffd0f39d8128b.yaml deleted file mode 100644 index 4e49af12b..000000000 --- a/releasenotes/notes/sparse-rotating-frame-bug-88fffd0f39d8128b.yaml +++ /dev/null @@ -1,5 +0,0 @@ ---- -fixes: - - | - ``RotatingFrame.operator_into_frame_basis`` and ``RotatingFrame.operator_out_of_frame_basis`` - were fixed to work on lists of scipy CSR matrices.