Skip to content

ChangeLog

All notable changes to QuantumToolbox.jl will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

  • Add documentation about arbitrary precision computations. (#745)

  • Fix e_ops expectation values being always stored as ComplexF64 in sesolve, mesolve, mcsolve, ssesolve, and smesolve. They now follow the element type of the problem, so that arbitrary precision solutions return sol.expect with the requested precision instead of silently narrowing it to double precision. (#745)

  • Fix sesolve_map and mesolve_map sharing mutable e_ops-saving callback state across trajectories when a custom prob_funcis supplied, which could throw aBoundsErroror produce incorrect results. Both now accept asafetycopykeyword (smart-defaulting totruefor a customprob_func,falseotherwise) mirroringSciMLBase.EnsembleProblem. (#645, #747)

v0.47.2

Release date: 2026-06-21

  • Add support for time-dependent collapse operators (QobjEvo) in mcsolve. (#733)

  • Support Base.lastindex (end) for quantum objects. (#736)

v0.47.1

Release date: 2026-06-11

  • Improvement for multisite_operator (#722, #725, #727):

    • Add a convenient method when the Hilbert space dimension of all sites are equal.

    • Improve the documentation and docstring.

  • Updates for fdestroy and fcreate:

    • Efficient Jordan Wigner transformation. (#723)

    • Add Bravyi-Kitaev fermion-to-qubit mapping via the keyword argument method = :BK (method = :JW for Jordan-Wigner transformation remains the default). (#724)

  • Fix mcsolve error when both keyword arguments e_ops and save_end=false are specified. (#728)

  • Fix wrong order in filtered kronecker product in liouvillian_dressed_nonsecular. (#729)

v0.47.0

Release date: 2026-05-19

  • Fix entropy_mutual (mutual information) when the input state is a pure state (Ket). (#716)

  • Use expm1 in n_thermal for stability. (#717, #718)

  • Use CUDACore and cuSPARSE as dependencies instead of CUDA. (#687)

v0.46.0

Release date: 2026-05-11

  • Several improvements in SteadyStateSolver:

    • Allow specifying initial guess for SteadyStateLinearSolver. (#698)

    • Add keyword argument (return_details) to SteadyStateODESolver and SteadyStateLinearSolver. (#708)

    • Simplify the implementation of SteadyStateDirectSolver and SteadyStateLinearSolver. (#708)

    • Move steadystate_floquet to deprecated function, use steadystate_fourier instead. (#708)

  • Bump compat for several package of SciML ecosystem. (#697)

    • SciMLBase.jl v3

    • OrdinaryDiffEqCore.jl v4

    • OrdinaryDiffEqLowOrderRK.jl v2

    • OrdinaryDiffEqVerner.jl v2

    • StochasticDiffEqHighOrder.jl v2

v0.45.0

Release date: 2026-04-19

  • Restructure Dimensions and Space to align with qutip (Python) (#659). Note that this update basically overwrites many changes made in PR #600:

    • Replace ProductDimensions and HilbertSpace structures with Dimensions + Space/TensorSpace/LiouvilleSpace.

    • Remove get_hilbert_size and get_liouville_size, and use get_size instead.

  • Use Base.AbstractVecOrTuple for type definitions. (#679, #683)

  • Allow specifying random number generator by keyword argument rng for the following random Qobj generating functions (#680):

    • rand_ket

    • rand_dm

    • rand_unitary

  • Fix benchmarks instability for autodiff. (#681)

  • Use StochasticDiffEqHighOrder as dependency instead of StochasticDiffEq for stochastic solvers. (#682)

  • Fix arithmetic operations (+, -, *) for quantum objects. (#688)

  • Throw ArgumentError for the functions that should not allow time-dependent collapse operators (c_ops). (#689)

  • Use FillArrays for qeye and better support to GPU for steadystate and correlation functions. (#690)

  • Improve correlation_2op_1t and correlation_3op_1t. (#692)

v0.44.0

Release date: 2026-03-11

  • Align with last changes in CUDA.jl v5.9.6+. Use GPUArrays.AbstractGPUSparseArray instead of CUDA.CUSPARSE.AbstractCuSparseArray to support more GPU backends. (#625)

  • Update to DocumenterVitepress.jl v0.3. (#667)

  • Add limit tests of the filter in liouvillian_dressed_nonsecular. In the limit of the filter width going to zero, we should recover the dressed liouvillian within secular approximation (see, e.g., https://doi.org/10.1103/PhysRevA.84.043832). (#669)

  • Support generic AbstractMatrix for mat2vec. (#670)

v0.43.1

Release date: 2026-02-23

  • Remove internal function _check_dims_to. (#657)

  • Improve memory efficiency of liouvillian_dressed_nonsecular by implementing the filtering directly during the Kronecker product. (#656)

v0.43.0

Release date: 2026-02-04

  • Restructure Dimensions and Space. Avoid using prod(::Dimensions) for getting matrix sizes, and instead use get_hilbert_size and get_liouville_size. (#600)

  • Merge ProductDimensions and GeneralProductDimensions into ProductDimensions. The dimensions are now assumed to be always general. This simplifies the structure and usage of dimensions. (#649)

  • Add support to time-dependent Hamiltonian and collapse operators in lr_mesolve. (#650)

  • Adapt time evolution solver options as well as spre and spost identity type to input. (#653)

v0.42.0

Release date: 2026-01-17

  • Allow specifying element types (eltype) for states and operators generating functions. (#641)

v0.41.0

Release date: 2026-01-12

  • Introduce matrix_heatmap and matrix_histogram for visualizing operators. (#621)

  • Allow rectangular eigenvector matrices in liouvillian_generalized and expand its documentation with proper citation. Rename it to liouvillian_dressed_nonsecular. (#624)

  • Optimize liouvillian_dressed_nonsecular: avoid O(N⁴) dense filter matrices. (#627)

  • Restrict CUDA.jl version compatibility to < 5.9.6 due to breaking changes in that release. (#630)

  • Move from JuliaFormatter.jl to Runic.jl for code formatting. (#633)

  • Improve eigsolve_al initial state handling and returned values and vectors. (#636)

  • Convert tlist to promoted type in all time evolution solvers. (#638)

v0.40.0

Release date: 2025-12-21

  • Add error message for bad input in state/operator generating functions (#603)

  • Extend sesolve and mesolve to handle Operator and SuperOperator as initial conditions for propagator calculation. This introduces a states_type field to TimeEvolutionProblem. (#606, #619)

  • Support time-dependent operators on dsf_mesolve (#610)

  • Fix thermal_dm and enr_thermal_dm for extreme cases. (#614, #613)

v0.39.1

Release date: 2025-11-19

  • Add spre and spost methods for ComposedOperator and cache propagator in every time evolution solver. (#596)

v0.39.0

Release date: 2025-11-17

  • Change default solver detection in eigensolve when using sigma keyword argument (shift-inverse algorithm). If the operator is a SparseMatrixCSC, the default solver is UMFPACKFactorization, otherwise it is automatically chosen by LinearSolve.jl, depending on the type of the operator. (#580)

  • Add keyword argument assume_hermitian to liouvillian. This allows users to disable the assumption that the Hamiltonian is Hermitian. (#581)

  • Improve accuracy of ODE solvers for general cases. (#586)

  • Use LinearSolve's internal methods for preconditioners in SteadyStateLinearSolver. (#588)

  • Use FillArrays.jl for handling superoperators. This makes the code cleaner and potentially more efficient. (#589)

  • Make sure state generating functions return dense array by default. (#591)

v0.38.1

Release date: 2025-10-27

  • Add ProgressMeterKWARGS in QuantumToolbox.settings for customizing progress bar. (#579)

v0.38.0

Release date: 2025-10-27

  • Introduce new methods of sesolve_map and mesolve_map for advanced usage. Users can now customize their own iterator structure, prob_func and output_func. (#565)

  • Use ProgressMeter.jl for progress bar rather than our in-house implementation. (#569, #575)

  • Simplify type structure for time evolution solutions. (#572)

  • Add support to arbitrary precision computation. Tested for sesolve, mesolve and eigensolve. (#576)

v0.37.0

Release date: 2025-10-12

  • Fix cite() bibtex output. (#552)

  • Implement sesolve_map and mesolve_map for solving multiple initial states and parameter sets in parallel. (#554)

  • Add qeye_like and qzero_like, which are synonyms of one and zero. (#555)

  • Add steadystate and DSF benchmarks. The SteadyStateODESOlver tolerances are lowered to terminate_reltol=1e-4 and terminate_abstol=1e-6 to improve speed at the cost of accuracy. (#557)

v0.36.0

Release date: 2025-09-29

  • Add QuantumToolbox.cite() for bibtex generator of QuantumToolbox.jl. (#544)

  • Add sortby and rev keyword arguments to eigensolvers. (#546)

v0.35.0

Release date: 2025-09-03

  • Add support of QobjEvo for steadystate (ODE solver only). (#536)

  • Changes to SteadyStateODESolver. (#537)

    • Introduce the tolerances for steadystate terminate condition (two new fields: terminate_reltol = 1e-5 and terminate_abstol = 1e-7)

    • Fix keyword argument handling for SteadyStateODESolver before passing to mesolve.

  • Fix incorrect negativity and partial_transpose for arbitrary subsystem dimension. (#539)

v0.34.1

Release date: 2025-08-23

  • Improve Bloch sphere rendering for animation. (#520)

  • Add support to Enzyme.jl for sesolve and mesolve. (#531)

v0.34.0

Release date: 2025-07-29

  • Improve efficiency of bloch_redfield_tensor by avoiding unnecessary conversions. (#509)

  • Support SciMLOperators v1.4+. (#470)

  • Fix compatibility with Makie v0.24+. (#513)

  • Add keep_runs_results option for multi-trajectory solvers to align with QuTiP. (#512)

    • Breaking changes for multi-trajectory solutions:

      • the original fields expect and states now store the results depend on keyword argument keep_runs_results (decide whether to store all trajectories results or not).

      • remove field average_expect

      • remove field runs_expect

    • New statistical analysis functions:

      • average_states

      • average_expect

      • std_expect

  • Add support to ForwardDiff.jl for sesolve and mesolve. (#515)

  • Add documentation about automatic differentiation. (#517)

v0.33.0

Release date: 2025-07-22

  • Implement EnrSpace and corresponding functionality. (#500)

  • Check for orthogonality breakdown in Lanczos solver for spectrum. (#501)

  • Store both times and times_states in time evolution solutions. (#506, #504)

  • Fix errors in Julia v1.12. (#507)

v0.32.1

Release date: 2025-06-24

This is a release just for updating documentation.

v0.32.0

Release date: 2025-06-23

  • Introduce Lanczos solver for spectrum. (#476)

  • Add Bloch-Redfield master equation solver. (#473)

  • Implement Bloch Sphere rendering and align style with qutip. (#472, #480, #485, #487, #489)

  • Add Base.copy method for AbstractQuantumObject. (#486)

  • Add documentation for Bloch-Redfield master equation. (#494)

v0.31.1

Release date: 2025-05-16

  • Introduce QuantumToolbox.settings and auto_tidyup. (#460)

v0.31.0

Release date: 2025-05-03

  • Return sesolve when mesolve allows it. (#455)

  • Simplify structure of QuantumObjectTypes. (#456)

v0.30.1

Release date: 2025-04-24

  • Support different length for to and from on GeneralDimensions. (#448)

  • Extend the Makie.jl extension to all the other available backends. (#450)

  • Fix definition of noise derivative in stochastic solvers. (#453)

v0.30.0

Release date: 2025-04-12

  • Make CUDA conversion more general using Adapt.jl. (#436, #437)

  • Make the generation of fock states non-mutating to support Zygote.jl. (#438)

  • Remove Reexport.jl from the dependencies. (#443)

  • Add support for automatic differentiation for sesolve and mesolve. (#440)

v0.29.1

Release date: 2025-03-07

  • Minor changes for GPU matrices element type and word size handling. (#430)

v0.29.0

Release date: 2025-03-07

  • Add support for OperatorKet state input for mesolve and smesolve. (#423)

  • Introduce plot_fock_distribution to plot the population of a state (ket, bra, or density matrix) in its basis (assumed to be Fock basis). (#428)

v0.28.0

Release date: 2025-02-22

  • Support for single AbstractQuantumObject in sc_ops for faster specific method in ssesolve and smesolve. (#408)

  • Change save callbacks from PresetTimeCallback to FunctionCallingCallback. (#410)

  • Align eigenstates and eigenenergies to QuTiP. (#411)

  • Introduce vector_to_operator and operator_to_vector. (#413)

  • Introduce some entropy related functions. (#414, #416)

    • entropy_linear

    • entropy_mutual

    • entropy_conditional

    • entropy_relative

  • Fix entanglement and introduce concurrence. (#414, #418, #419)

  • Introduce some metric functions. (#414, #420)

    • hilbert_dist

    • hellinger_dist

    • bures_dist

    • bures_angle

  • Align steadystate ODE solver to other methods and improve GPU support. (#421)

v0.27.0

Release date: 2025-02-14

  • Rename sparse_to_dense as to_dense and dense_to_sparse as to_sparse. (#392)

  • Fix erroneous definition of the stochastic term in smesolve. (#393)

  • Change name of MultiSiteOperator to multisite_operator. (#394)

  • Fix smesolve for specifying initial state as density matrix. (#395)

  • Add more generic solver for steadystate_floquet to allow more linear solvers. (#396)

  • Fix time evolution output when using saveat keyword argument. (#398)

  • Align some attributes of mcsolve, ssesolve and smesolve results with QuTiP. (#402)

  • Improve ensemble generation of ssesolve and change parameters handling on stochastic processes. (#403)

  • Set default trajectories to 500 and rename the keyword argument ensemble_method to ensemblealg. (#405)

  • Introduce measurement on ssesolve and smesolve. (#404)

v0.26.0

Release date: 2025-02-09

  • Fix CUDA sparse_to_dense. (#386)

  • Improve pseudo inverse spectrum solver. (#388)

  • Add smesolve function for stochastic master equation. (#389)

v0.25.2

Release date: 2025-02-02

  • Move code quality dependencies to separate environment. (#380)

  • Add additional normalization of the state during time evolution of ssesolve. This improves the numerical stability of the solver. (#383)

v0.25.1

Release date: 2025-01-29

  • Fix Dynamical Fock Dimension states saving due to wrong saving of dimensions. (#375)

  • Support a list of observables for expect. (#374, #376)

  • Add checks for tlist in time evolution solvers. The checks are to ensure that tlist is not empty, the elements are in increasing order, and the elements are unique. (#378)

v0.25.0

Release date: 2025-01-20

  • Change the structure of block diagonalization functions, using BlockDiagonalForm struct and changing the function name from bdf to block_diagonal_form. (#349)

  • Add GPUArrays compatibility for ptrace function, by using KernelAbstractions.jl. (#350)

  • Introduce Space, Dimensions, GeneralDimensions structures to support wider definitions and operations of Qobj/QobjEvo, and potential functionalities in the future. (#271, #353, #360)

  • Improve lazy tensor warning for SciMLOperators. (#370)

  • Change order of AbstractQuantumObject data type. For example, from QuantumObject{DataType,ObjType,DimsType} to QuantumObject{ObjType,DimsType,DataType}. (#371)

v0.24.0

Release date: 2024-12-13

  • Improve the construction of QobjEvo. (#338, #339)

  • Support Base.zero and Base.one for AbstractQuantumObject. (#342, #346)

  • Introduce visualization and function plot_wigner for easy plotting of Wigner functions. (#86, #292, #347)

v0.23.1

Release date: 2024-12-06

  • Update [compat] to fix the incompatibility between QuantumToolbox v0.22.0+ and DiffEqCallbacks < v4.2.1. (#335)

v0.23.0

Release date: 2024-12-04

  • Change SingleSiteOperator with the more general MultiSiteOperator. (#324)

  • Make spectrum and correlation functions align with Python QuTiP, introduce spectrum solver PseudoInverse, remove spectrum solver FFTCorrelation, and introduce spectrum_correlation_fft. (#330)

v0.22.0

Release date: 2024-11-20

  • Change the parameters structure of sesolve, mesolve and mcsolve functions to possibly support automatic differentiation. (#311)

  • Fix type instability and reduce extra memory allocation in liouvillian. (#315, #318)

v0.21.5

Release date: 2024-11-15

  • This is a demonstration of how to bump version number and also modify CHANGELOG.md before new release. (#309)

v0.21.4

Release date: 2024-11-13