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_opsexpectation values being always stored asComplexF64insesolve,mesolve,mcsolve,ssesolve, andsmesolve. They now follow the element type of the problem, so that arbitrary precision solutions returnsol.expectwith the requested precision instead of silently narrowing it to double precision. (#745)Fix
sesolve_mapandmesolve_mapsharing mutable e_ops-saving callback state across trajectories when a customprob_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) inmcsolve. (#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
fdestroyandfcreate:Fix
mcsolveerror when both keyword argumentse_opsandsave_end=falseare 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
CUDACoreandcuSPARSEas dependencies instead ofCUDA. (#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) toSteadyStateODESolverandSteadyStateLinearSolver. (#708)Simplify the implementation of
SteadyStateDirectSolverandSteadyStateLinearSolver. (#708)Move
steadystate_floquetto deprecated function, usesteadystate_fourierinstead. (#708)
Bump compat for several package of SciML ecosystem. (#697)
SciMLBase.jlv3OrdinaryDiffEqCore.jlv4OrdinaryDiffEqLowOrderRK.jlv2OrdinaryDiffEqVerner.jlv2StochasticDiffEqHighOrder.jlv2
v0.45.0
Release date: 2026-04-19
Restructure
DimensionsandSpaceto align withqutip(Python) (#659). Note that this update basically overwrites many changes made in PR #600:Replace
ProductDimensionsandHilbertSpacestructures withDimensions+Space/TensorSpace/LiouvilleSpace.Remove
get_hilbert_sizeandget_liouville_size, and useget_sizeinstead.
Use
Base.AbstractVecOrTuplefor type definitions. (#679, #683)Allow specifying random number generator by keyword argument
rngfor the following randomQobjgenerating functions (#680):rand_ketrand_dmrand_unitary
Fix benchmarks instability for autodiff. (#681)
Use
StochasticDiffEqHighOrderas dependency instead ofStochasticDiffEqfor stochastic solvers. (#682)Fix arithmetic operations (
+,-,*) for quantum objects. (#688)Throw
ArgumentErrorfor the functions that should not allow time-dependent collapse operators (c_ops). (#689)Use FillArrays for
qeyeand better support to GPU forsteadystateandcorrelationfunctions. (#690)Improve
correlation_2op_1tandcorrelation_3op_1t. (#692)
v0.44.0
Release date: 2026-03-11
Align with last changes in CUDA.jl v5.9.6+. Use
GPUArrays.AbstractGPUSparseArrayinstead ofCUDA.CUSPARSE.AbstractCuSparseArrayto 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
AbstractMatrixformat2vec. (#670)
v0.43.1
Release date: 2026-02-23
Remove internal function
_check_dims_to. (#657)Improve memory efficiency of
liouvillian_dressed_nonsecularby implementing the filtering directly during the Kronecker product. (#656)
v0.43.0
Release date: 2026-02-04
Restructure
DimensionsandSpace. Avoid usingprod(::Dimensions)for getting matrix sizes, and instead useget_hilbert_sizeandget_liouville_size. (#600)Merge
ProductDimensionsandGeneralProductDimensionsintoProductDimensions. 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
spreandspostidentity 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_heatmapandmatrix_histogramfor visualizing operators. (#621)Allow rectangular eigenvector matrices in
liouvillian_generalizedand expand its documentation with proper citation. Rename it toliouvillian_dressed_nonsecular. (#624)Optimize
liouvillian_dressed_nonsecular: avoid O(N⁴) dense filter matrices. (#627)Restrict
CUDA.jlversion compatibility to < 5.9.6 due to breaking changes in that release. (#630)Move from
JuliaFormatter.jltoRunic.jlfor code formatting. (#633)Improve eigsolve_al initial state handling and returned values and vectors. (#636)
Convert
tlistto 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
sesolveandmesolveto handleOperatorandSuperOperatoras initial conditions for propagator calculation. This introduces astates_typefield toTimeEvolutionProblem. (#606, #619)Support time-dependent operators on
dsf_mesolve(#610)Fix
thermal_dmandenr_thermal_dmfor extreme cases. (#614, #613)
v0.39.1
Release date: 2025-11-19
- Add
spreandspostmethods forComposedOperatorand cache propagator in every time evolution solver. (#596)
v0.39.0
Release date: 2025-11-17
Change default solver detection in
eigensolvewhen usingsigmakeyword argument (shift-inverse algorithm). If the operator is aSparseMatrixCSC, the default solver isUMFPACKFactorization, otherwise it is automatically chosen by LinearSolve.jl, depending on the type of the operator. (#580)Add keyword argument
assume_hermitiantoliouvillian. 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.jlfor 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
ProgressMeterKWARGSinQuantumToolbox.settingsfor customizing progress bar. (#579)
v0.38.0
Release date: 2025-10-27
Introduce new methods of
sesolve_mapandmesolve_mapfor advanced usage. Users can now customize their owniterator structure,prob_funcandoutput_func. (#565)Use
ProgressMeter.jlfor 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,mesolveandeigensolve. (#576)
v0.37.0
Release date: 2025-10-12
Fix
cite()bibtex output. (#552)Implement
sesolve_mapandmesolve_mapfor solving multiple initial states and parameter sets in parallel. (#554)Add
qeye_likeandqzero_like, which are synonyms ofoneandzero. (#555)Add steadystate and DSF benchmarks. The
SteadyStateODESOlvertolerances are lowered toterminate_reltol=1e-4andterminate_abstol=1e-6to improve speed at the cost of accuracy. (#557)
v0.36.0
Release date: 2025-09-29
Add
QuantumToolbox.cite()for bibtex generator ofQuantumToolbox.jl. (#544)Add
sortbyandrevkeyword arguments to eigensolvers. (#546)
v0.35.0
Release date: 2025-09-03
Add support of
QobjEvoforsteadystate(ODE solver only). (#536)Changes to
SteadyStateODESolver. (#537)Introduce the tolerances for
steadystateterminate condition (two new fields:terminate_reltol = 1e-5andterminate_abstol = 1e-7)Fix keyword argument handling for
SteadyStateODESolverbefore passing tomesolve.
Fix incorrect
negativityandpartial_transposefor arbitrary subsystem dimension. (#539)
v0.34.1
Release date: 2025-08-23
Improve Bloch sphere rendering for animation. (#520)
Add support to
Enzyme.jlforsesolveandmesolve. (#531)
v0.34.0
Release date: 2025-07-29
Improve efficiency of
bloch_redfield_tensorby avoiding unnecessary conversions. (#509)Support
SciMLOperators v1.4+. (#470)Fix compatibility with
Makie v0.24+. (#513)Add
keep_runs_resultsoption for multi-trajectory solvers to align withQuTiP. (#512)Breaking changes for multi-trajectory solutions:
the original fields
expectandstatesnow store the results depend on keyword argumentkeep_runs_results(decide whether to store all trajectories results or not).remove field
average_expectremove field
runs_expect
New statistical analysis functions:
average_statesaverage_expectstd_expect
Add support to ForwardDiff.jl for
sesolveandmesolve. (#515)Add documentation about automatic differentiation. (#517)
v0.33.0
Release date: 2025-07-22
Implement
EnrSpaceand corresponding functionality. (#500)Check for orthogonality breakdown in
Lanczossolver forspectrum. (#501)Store both
timesandtimes_statesin 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
Lanczossolver forspectrum. (#476)Add Bloch-Redfield master equation solver. (#473)
Implement Bloch Sphere rendering and align style with qutip. (#472, #480, #485, #487, #489)
Add
Base.copymethod forAbstractQuantumObject. (#486)Add documentation for Bloch-Redfield master equation. (#494)
v0.31.1
Release date: 2025-05-16
- Introduce
QuantumToolbox.settingsandauto_tidyup. (#460)
v0.31.0
Release date: 2025-05-03
v0.30.1
Release date: 2025-04-24
Support different length for
toandfromon GeneralDimensions. (#448)Extend the
Makie.jlextension 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
fockstates non-mutating to support Zygote.jl. (#438)Remove Reexport.jl from the dependencies. (#443)
Add support for automatic differentiation for
sesolveandmesolve. (#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
OperatorKetstate input formesolveandsmesolve. (#423)Introduce
plot_fock_distributionto 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
AbstractQuantumObjectinsc_opsfor faster specific method inssesolveandsmesolve. (#408)Change save callbacks from
PresetTimeCallbacktoFunctionCallingCallback. (#410)Align
eigenstatesandeigenenergiesto QuTiP. (#411)Introduce
vector_to_operatorandoperator_to_vector. (#413)Introduce some entropy related functions. (#414, #416)
entropy_linearentropy_mutualentropy_conditionalentropy_relative
Fix
entanglementand introduceconcurrence. (#414, #418, #419)Introduce some metric functions. (#414, #420)
hilbert_disthellinger_distbures_distbures_angle
Align
steadystateODE solver to other methods and improve GPU support. (#421)
v0.27.0
Release date: 2025-02-14
Rename
sparse_to_denseasto_denseanddense_to_sparseasto_sparse. (#392)Fix erroneous definition of the stochastic term in
smesolve. (#393)Change name of
MultiSiteOperatortomultisite_operator. (#394)Fix
smesolvefor specifying initial state as density matrix. (#395)Add more generic solver for
steadystate_floquetto allow more linear solvers. (#396)Fix time evolution output when using
saveatkeyword argument. (#398)Align some attributes of
mcsolve,ssesolveandsmesolveresults withQuTiP. (#402)Improve ensemble generation of
ssesolveand change parameters handling on stochastic processes. (#403)Set default trajectories to 500 and rename the keyword argument
ensemble_methodtoensemblealg. (#405)Introduce measurement on
ssesolveandsmesolve. (#404)
v0.26.0
Release date: 2025-02-09
Fix CUDA
sparse_to_dense. (#386)Improve pseudo inverse spectrum solver. (#388)
Add
smesolvefunction 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)
Add checks for
tlistin time evolution solvers. The checks are to ensure thattlistis 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
BlockDiagonalFormstruct and changing the function name frombdftoblock_diagonal_form. (#349)Add GPUArrays compatibility for
ptracefunction, by using KernelAbstractions.jl. (#350)Introduce
Space,Dimensions,GeneralDimensionsstructures to support wider definitions and operations ofQobj/QobjEvo, and potential functionalities in the future. (#271, #353, #360)Improve lazy tensor warning for
SciMLOperators. (#370)Change order of
AbstractQuantumObjectdata type. For example, fromQuantumObject{DataType,ObjType,DimsType}toQuantumObject{ObjType,DimsType,DataType}. (#371)
v0.24.0
Release date: 2024-12-13
Support
Base.zeroandBase.oneforAbstractQuantumObject. (#342, #346)Introduce visualization and function
plot_wignerfor easy plotting of Wigner functions. (#86, #292, #347)
v0.23.1
Release date: 2024-12-06
- Update
[compat]to fix the incompatibility betweenQuantumToolbox v0.22.0+andDiffEqCallbacks < v4.2.1. (#335)
v0.23.0
Release date: 2024-12-04
Change
SingleSiteOperatorwith the more generalMultiSiteOperator. (#324)Make
spectrumandcorrelationfunctions align withPython QuTiP, introduce spectrum solverPseudoInverse, remove spectrum solverFFTCorrelation, and introducespectrum_correlation_fft. (#330)
v0.22.0
Release date: 2024-11-20
Change the parameters structure of
sesolve,mesolveandmcsolvefunctions 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.mdbefore new release. (#309)
v0.21.4
Release date: 2024-11-13
- This is just a demonstration about
Changelog.jl. (#139, #306)