Release Notes

0.6.0

Prelude

Qiskit Dynamics 0.6.0 is the last release of the package for the foreseeable future. This release contains a series of bug fixes, as well as a new module systems for building and operating on models of quantum systems. The readme has been modified to note that the package is no longer being maintained.

New Features

  • This release introduces the new systems module, containing tools for building abstract models of quantum systems. The module provides high-level interfaces for building models and performing non-trivial calculations, with the goal of minimizing the need for a user to explicitly build and work with arrays (an error-prone process). These interfaces sit at a level of abstraction above the Solver interface, though still utilize this underlying functionality. See the Systems Modelling Tutorial and the How-to use advanced system modelling functionality for detailed examples.

Upgrade Notes

  • Support for Python 3.13 has been added.

  • DynamicsBackend now returns results in hexadecimal. Previously, results were returned in n-ary, where n is the value of the max_outcome_level option. The hexadecimal values are generated by calling hex(int(x, n)), where n is max_outcome_level and x is the original n-ary value.

  • Corresponding to the above change, the default behaviour for max_outcome_level is now to treat a None value as 1.

  • This version of Qiskit Dynamics requires qiskit <= 1.3, as a result of the removal of qiskit.pulse in Qiskit 2.0. Due to the minimal dependance of Qiskit Dynamics on other parts of Qiskit, any workflow not utilizing qiskit.pulse should still be compatible with the latest version of Qiskit.

  • In addition to the above, while Qiskit Dynamics does not formally depend on Qiskit Experiments, the DynamicsBackend will now only work with Qiskit Experiments 0.8 releases.

  • DynamicsBackend.solve() method can now work without specifying a t_span argument. The default t_span is set to be [0, solve_input.duration] for each provided solve_input. This allows users to solve the dynamics of a quantum circuit without having to specify its duration in advance.

  • Support for Python 3.9 has been dropped.

  • The dependency qiskit_ibm_runtime has been bounded to version 0.36.1.

  • Qiskit Dynamics requires a version of Qiskit Experiments <0.9.

  • To enable compatibility with QuTiP 5.0.0, qutip.Qobj instances are now converted to a raw array type in Dynamics via the qutip.Qobj.full method. This method always returns a dense array, and hence qutip.Qobj instances are no longer turned into scipy.sparse.csr_matrix instances in Dynamics.

Deprecation Notes

  • The array and dispatch submodules have been removed.

Bug Fixes

  • Setting of the num_qubits Target attribute in DynamicsBackend initialization has been removed. Users will now need to set this at Target instantiation if needed.

  • The data type of memory data produced by DynamicsBackend for measurement level 1 was changed from a Numpy array to a list in order to match the type documented for the ExperimentResultData class in Qiskit. To get the old Numpy format back, it is sufficient to call numpy.array on the result data.

0.5.0

Prelude

Qiskit Dynamics 0.5.0 introduces a major change to the internal array dispatching mechanism. Users can now work directly with their supported array library of choice, without the need to personally manage the dispatching behaviour using the Array class as in previous versions. Internally, Qiskit Dynamics now uses Arraylias for dispatching. See the user guide entry on using different array libraries with Qiskit Dynamics for more details on the updated approach.
To accompany this change, arguments that explicitly control the array library used to store matrices (e.g. evaluation_mode) in models and related classes have also been changed. See the upgrade notes for a list of such changes, as well as the updated user guide on configuring simulations for performance for how to use the new versions of these arguments.
Due to the scale of these changes, this release will generally break any pre-existing Dynamics code utilizing Array or any of the aformentioned model and solver arguments. The Array class and array and dispatch submodules have been deprecated, and will be removed in 0.6.0. The documentation for the previous release 0.4.5 is still available here.

New Features

  • Adds the DynamicsBackend.solve() method for running simulations of circuits and schedules for arbitrary input types, and returning the ODE simulation results.

Upgrade Notes

  • Support for Python 3.12 has been added, and Python 3.8 has been dropped.

  • The upper bound on JAX and Diffrax in the last version of Qiskit Dynamics has been removed. Users should try to use the latest version of JAX.

  • The interface for GeneratorModel, HamiltonianModel, and LindbladModel have been modified. The copy method has been removed, and all setter methods other than in_frame_basis and signals have been removed. The evaluation_mode construction argument has been replaced by array_library, which controls which array library is used internally to store and evaluate operations, and the additional vectorized boolean argument has been added to LindbladModel to control whether the equation is evaluated in vectorized mode. Note that, regardless of array library used, dense arrays must be supplied to the constructors of these classes, due to peculiarities of the internal setup for sparse libraries.

  • In conjunction with the change to the evaluation_mode argument in the model classes, the Solver class has been updated to take the array_library constructor argument, as well as the vectorized constructor argument (for use when Lindblad terms are present).

  • Similar to the Solver initialization method, the DynamicsBackend.from_backend() constructor method argument evaluation_mode has been removed and replaced by the arguments array_library and vectorized.

  • The logic in Solver.solve() for automatic jit compiling when using JAX and simulating a list of schedules has been updated to no longer be based on when Array.default_backend() == "jax". The attempted automatic jit now occurs based purely on whether method="jax_odeint", or method is a Diffrax integration method. A warning will be raised if the array_library is not known to be compatible with the compilation routine. (For now, "scipy_sparse" is the only array_library not compatible with this routine, however a warning will still be raised if no explicit array_library is provided, as in this case the JAX-compatibility is unknown.)

Deprecation Notes

  • The array and dispatch submodules of Qiskit Dynamics have been deprecated as of version 0.5.0, and will be removed in version 0.6.0.