You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
QuTiP 5 is a redesign of many of the core components of QuTiP (Qobj, QobjEvo, solvers) to make them more consistent and more flexible.
Qobj may now be stored in either sparse or dense representations,
and the two may be mixed sensibly as needed. QobjEvo is now used
consistently throughout QuTiP, and the implementation has been
substantially cleaned up. A new Coefficient class is used to
represent the time-dependent factors inside QobjEvo.
The solvers have been rewritten to work well with the new data layer
and the concept of Integrators which solve ODEs has been introduced.
In future, new data layers may provide their own Integrators
specialized to their representation of the underlying data.
Much of the user-facing API of QuTiP remains familiar, but there have
had to be many small breaking changes. If we can make changes to
easy migrating code from QuTiP 4 to QuTiP 5, please let us know.
A notebook to help with migration is available on colab.
An extensive list of changes follows.
Contributors
QuTiP 5 has been a large effort by many people over the last three years.
In particular:
Jake Lishman led the implementation of the new data layer and coefficients.
Eric Giguère led the implementation of the new QobjEvo interface and solvers.
Boxi Li led the updating of QuTiP's QIP support and the creation of qutip_qip.
Other members of the QuTiP Admin team have been heavily involved in reviewing,
testing and designing QuTiP 5:
Alexander Pitchford
Asier Galicia
Nathan Shammah
Shahnawaz Ahmed
Neill Lambert
Simon Cross
Paul Menczel
Two Google Summer of Code contributors updated the tutorials and benchmarks to
QuTiP 5:
Christian Staufenbiel updated many of the tutorials.
Four experimental data layers backends were written either as part of Google Summer
of Code or as separate projects. While these are still alpha quality, they helped
significantly to test the data layer API:
Valan Baptist Mathuranayagam (Changed qutip-notebooks to qutip-tutorials and fixed the typo in the link redirecting to the changelog section in the PR template, Update links in template #2107)
Cristian Emiliano Godinez Ramirez (Added inherited members to API doc of MESolver, SMESolver, SSESolver, NonMarkovianMCSolver, Dev uhack solver docs #2167)
Andrey Rakhubovsky (Corrected grammar in Bloch-Redfield master equation documentation, Capitalize Monte Carlo #2174)
Previously Qobj data was stored in a SciPy-like sparse matrix. Now the
representation is flexible. Implementations for dense and sparse formats are
included in QuTiP and custom implementations are possible. QuTiP's performance
on dense states and operators is significantly improved as a result.
Some highlights:
The data is still acessible via the .data attribute, but is now an
instance of the underlying data type instead of a SciPy-like sparse matrix.
The operations available in qutip.core.data may be used on .data,
regardless of the data type.
Qobj with different data types may be mixed in arithmetic and other
operations. A sensible output type will be automatically determined.
The new .to(...) method may be used to convert a Qobj from one data type
to another. E.g. .to("dense") will convert to the dense representation and .to("csr") will convert to the sparse type.
Many Qobj methods and methods that create Qobj now accepted a dtype
parameter that allows the data type of the returned Qobj to specified.
The new & operator may be used to obtain the tensor product.
The new @ operator may be used to obtain the matrix / operator product. bar @ ket returns a scalar.
The new .contract() method will collapse 1D subspaces of the dimensions of
the Qobj.
The new .logm() method returns the matrix logarithm of an operator.
The methods .set_data, .get_data, .extract_state, .eliminate_states, .evaluate and .check_isunitary have been removed.
The property dtype return the representation of the data used.
The new data_as allow to obtain the data as a common python formats:
numpy array, scipy sparse matrix, JAX Array, etc.
QobjEvo changes
The QobjEvo type for storing time-dependent quantum objects has been
significantly expanded, standardized and extended. The time-dependent
coefficients are now represented using a new Coefficient type that
may be independently created and manipulated if required.
Some highlights:
The .compile() method has been removed. Coefficients specified as
strings are automatically compiled if possible and the compilation is
cached across different Python runs and instances.
Mixing coefficient types within a single Qobj is now supported.
Many new attributes were added to QobjEvo for convenience. Examples
include .dims, .shape, .superrep and .isconstant.
Many old attributes such as .cte, .use_cython, .type, .const,
and .coeff_file were removed.
A new Spline coefficient supports spline interpolations of different
orders. The old Cubic_Spline coefficient has been removed.
The new .arguments(...) method allows additional arguments to the
underlying coefficient functions to be updated.
The _step_func_coeff argument has been replaced by the order
parameter. _step_func_coeff=False is equivalent to order=3. _step_func_coeff=True is equivalent to order=0. Higher values
of order gives spline interpolations of higher orders.
The spline type can take bc_type to control the boundary conditions.
QobjEvo can be creating from the multiplication of a Qobj with a coefficient: oper * qutip.coefficient(f, args=args) is equivalent to qutip.QobjEvo([[oper, f]], args=args).
Coefficient function can be defined in a pythonic manner: def f(t, A, w).
The dictionary args second argument is no longer needed.
Function using the exact f(t, args) signature will use the old method for
backward compatibility.
Solver changes
The solvers in QuTiP have been heavily reworked and standardized.
Under the hood solvers now make use of swappable ODE Integrators.
Many Integrators are included (see the list below) and
custom implementations are possible. Solvers now consistently
accept a QobjEvo instance at the Hamiltonian or Liouvillian, or
any object which can be passed to the QobjEvo constructor.
A breakdown of highlights follows.
All solvers:
Solver options are now supplied in an ordinary Python dict. qutip.Options is deprecated and returns a dict for backwards
compatibility.
A specific ODE integrator may be selected by supplying a method option.
Each solver provides a class interface. Creating an instance
of the class allows a solver to be run multiple times for the
same system without having to repeatedly reconstruct the
right-hand side of the ODE to be integrated.
A QobjEvo instance is accepted for most operators, e.g., H, c_ops, e_ops, a_ops.
The progress bar is now selected using the progress_bar option.
A new progess bar using the tqdm Python library is provided.
Dynamic arguments, where the value of an operator depends on
the current state of the evolution interface reworked. Now a property of the
solver is to be used as an arguments: args={"state": MESolver.StateFeedback(default=rho0)}
Integrators:
The SciPy zvode integrator is available with the BDF and
Adams methods as bdf and adams.
The SciPy dop853 integrator (an eighth order Runge-Kutta method by
Dormand & Prince) is available as dop853.
The SciPy lsoda integrator is available as lsoda.
QuTiP's own implementation of Verner's "most efficient" Runge-Kutta methods
of order 7 and 9 are available as vern7 and vern9. See http://people.math.sfu.ca/~jverner/ for a description of the methods.
QuTiP's own implementation of a solver that directly diagonalizes the
the system to be integrated is available as diag. It only works on
time-independent systems and is slow to setup, but once the diagonalization
is complete, it generates solutions very quickly.
QuTiP's own implementatoin of an approximate Krylov subspace integrator is
available as krylov. This integrator is only usable with sesolve.
Result class:
A new .e_data attribute provides expectation values as a dictionary.
Unlike .expect, the values are provided in a Python list rather than
a numpy array, which better supports non-numeric types.
The contents of the .stats attribute changed significantly and is
now more consistent across solvers.
Monte-Carlo Solver (mcsolve):
The system, H, may now be a super-operator.
The seed parameter now supports supplying numpy SeedSequence or Generator types.
The new timeout and target_tol parameters allow the solver to exit
early if a timeout or target tolerance is reached.
The ntraj option no longer supports a list of numbers of trajectories.
Instead, just run the solver multiple times and use the class MCSolver
if setting up the solver uses a significant amount of time.
The map_func parameter has been replaced by the map option.
A loky based parallel map as been added.
A mpi based parallel map as been added.
The result returned by mcsolve now supports calculating photocurrents
and calculating the steady state over N trajectories.
The old parfor parallel execution function has been removed from qutip.parallel. Use parallel_map, loky_map or mpi_pmap instead.
Added improved sampling options which converge much faster when the
probability of collapse is small.
Non Markovian Monte-Carlo Solver (nm_mcsolve):
New Monte-Carlo Solver supporting negative decay rates.
Based on the influence martingale approach, Donvil et al., Nat Commun 13, 4140 (2022).
Most of the improvements made to the regular Monte-Carlo solver are also available here.
The value of the influence martingale is available through the .trace attribute of the result.
Stochastic Equation Solvers (ssesolve, smesolve)
Function call greatly changed: many keyword arguments are now options.
m_ops and dW_factors are now changed from the default from the new class interface only.
Use the same parallel maps as mcsolve: support for loky and mpi map added.
End conditions timeout and target_tol added.
The seed parameter now supports supplying numpy SeedSequence.
The a_ops and spectra support implementations been heavily reworked to
reuse the techniques from the new Coefficient and QobjEvo classes.
The use_secular parameter has been removed. Use sec_cutoff=-1 instead.
The required tolerance is now read from qutip.settings.
Krylov Subspace Solver (krylovsolve):
The Krylov solver is now implemented using SESolver and the krylov
ODE integrator. The function krylovsolve is maintained for convenience
and now supports many more options.
The sparse parameter has been removed. Supply a sparse Qobj for the
Hamiltonian instead.
Floquet Solver (fsesolve and fmmesolve):
The Floquet solver has been rewritten to use a new FloquetBasis class
which manages the transformations from lab to Floquet basis and back.
Many of the internal methods used by the old Floquet solvers have
been removed. The Floquet tensor may still be retried using
the function floquet_tensor.
The Floquet Markov Master Equation solver has had many changes and
new options added. The environment temperature may be specified using w_th, and the result states are stored in the lab basis and optionally
in the Floquet basis using store_floquet_state.
The spectra functions supplied to fmmesolve must now be vectorized
(i.e. accept and return numpy arrays for frequencies and densities) and
must accept negative frequence (i.e. usually include a w > 0 factor
so that the returned densities are zero for negative frequencies).
The number of sidebands to keep, kmax may only be supplied when using
the FMESolver
The Tsteps parameter has been removed from both fsesolve and fmmesolve. The precompute option to FloquetBasis may be used
instead.
Evolution of State Solver (essovle):
The function essolve has been removed. Use the diag integration
method with sesolve or mesolve instead.
Steady-state solvers (steadystate module):
The method parameter and solver parameters have been separated. Previously
they were mixed together in the method parameter.
The previous options are now passed as parameters to the steady state
solver and mostly passed through to the underlying SciPy functions.
The logging and statistics have been removed.
Correlation functions (correlation module):
A new correlation_3op function has been added. It supports MESolver
or BRMESolver.
The correlation, correlation_4op, and correlation_ss functions have been
removed.
Support for calculating correlation with mcsolve has been removed.
Propagators (propagator module):
A class interface, qutip.Propagator, has been added for propagators.
Propagation of time-dependent systems is now supported using QobjEvo.
The unitary_mode and parallel options have been removed.
Correlation spectra (spectrum module):
The functions spectrum_ss and spectrum_pi have been removed and
are now internal functions.
The use_pinv parameter for spectrum has been removed and the
functionality merged into the solver parameter. Use solver="pi"
instead.
Hierarchical Equation of Motion Solver (HEOM)
Updated the solver to use the new QuTiP integrators and data layer.
Updated all the HEOM tutorials to QuTiP 5.
Added support for combining bosonic and fermionic baths.
Sped up the construction of the RHS of the HEOM solver by a factor of 4x.
As in QuTiP 4, the HEOM supports arbitrary spectral densities, bosonic and fermionic baths, Páde and Matsubara expansions of the correlation functions, calculating the Matsubara terminator and inspection of the ADOs (auxiliary density operators).
QuTiP core
There have been numerous other small changes to core QuTiP features:
qft(...) the function that returns the quantum Fourier
transform operator was moved from qutip.qip.algorithm into qutip.
The Bloch-Redfield solver tensor, brtensor, has been moved into qutip.core. See the section above on the Bloch-Redfield solver
for details.
The functions mat2vec and vec2mat for transforming states to and
from super-operator states have been renamed to stack_columns and unstack_columns.
The function liouvillian_ref has been removed. Used liouvillian
instead.
The superoperator transforms super_to_choi, choi_to_super, choi_to_kraus, choi_to_chi and chi_to_choi have been removed.
Used to_choi, to_super, to_kraus and to_chi instead.
All of the random object creation functions now accepted a
numpy Generator as a seed.
The dims parameter of all random object creation functions has
been removed. Supply the dimensions as the first parameter if
explicit dimensions are required.
The function rand_unitary_haar has been removed. Use rand_unitary(distribution="haar") instead.
The functions rand_dm_hs and rand_dm_ginibre have been removed.
Use rand_dm(distribution="hs") and rand_dm(distribution="ginibre")
instead.
The function rand_ket_haar has been removed. Use rand_ket(distribution="haar") instead.
The measurement functions have had the target parameter for
expanding the measurement operator removed. Used expand_operator
to expand the operator instead.
qutip.Bloch now supports applying colours per-point, state or vector in add_point, add_states, and add_vectors.
Dimensions use a class instead of layered lists.
Allow measurement functions to support degenerate operators.
Add qeye_like and qzero_like.
Added fermionic annihilation and creation operators.
QuTiP settings
Previously qutip.settings was an ordinary module. Now qutip.settings is
an instance of a settings class. All the runtime modifiable settings for
core operations are in qutip.settings.core. The other settings are not
modifiable at runtime.
Removed load. reset and save functions.
Removed .debug, .fortran, .openmp_thresh.
New .compile stores the compilation options for compiled coefficients.
New .core["rtol"] core option gives the default relative tolerance used by QuTiP.
The absolute tolerance setting .atol has been moved to .core["atol"].
Visualization
Added arguments to plot_wigner and plot_wigner_fock_distribution to specify parameters for wigner.
Removed Bloch3D. The same functionality is provided by Bloch.
Added fig, ax and cmap keyword arguments to all visualization functions.
Most visualization functions now respect the colorblind_safe setting.
Added new functions to create animations from a list of Qobj or directly from solver results with saved states.
Package reorganization
qutip.qip has been moved into its own package, qutip-qip. Once installed, qutip-qip is available as either qutip.qip or qutip_qip. Some widely useful gates have been retained in qutip.gates.
qutip.control has been moved to qutip-qtrl and once installed qutip-qtrl is available as either qutip.control or qutip_qtrl. Note that quitp_qtrl is provided primarily for backwards compatibility. Improvements to optimal control will take place in the new qutip_qoc package.
qutip.lattice has been moved into its own package, qutip-lattice. It is available from <https://github.com/qutip/qutip-lattice>.
qutip.sparse has been removed. It contained the old sparse matrix representation and is replaced by the new implementation in qutip.data.
qutip.piqs functions are no longer available from the qutip namespace. They are accessible from qutip.piqs instead.
Miscellaneous
Support has been added for 64-bit integer sparse matrix indices, allowing
sparse matrices with up to 2**63 rows and columns. This support needs to
be enabled at compilation time by calling setup.py and passing --with-idxint-64.
Feature removals
Support for OpenMP has been removed. If there is enough demand and a good plan for how to organize it, OpenMP support may return in a future QuTiP release.
The qutip.parfor function has been removed. Use qutip.parallel_map instead.
qutip.graph has been removed and replaced by SciPy's graph functions.
qutip.topology has been removed. It contained only one function berry_curvature.
The ~/.qutip/qutiprc config file is no longer supported. It contained settings for the OpenMP support.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
QuTiP 5.0.0
QuTiP 5 is a redesign of many of the core components of QuTiP (
Qobj
,QobjEvo
, solvers) to make them more consistent and more flexible.Qobj
may now be stored in either sparse or dense representations,and the two may be mixed sensibly as needed.
QobjEvo
is now usedconsistently throughout QuTiP, and the implementation has been
substantially cleaned up. A new
Coefficient
class is used torepresent the time-dependent factors inside
QobjEvo
.The solvers have been rewritten to work well with the new data layer
and the concept of
Integrators
which solve ODEs has been introduced.In future, new data layers may provide their own
Integrators
specialized to their representation of the underlying data.
Much of the user-facing API of QuTiP remains familiar, but there have
had to be many small breaking changes. If we can make changes to
easy migrating code from QuTiP 4 to QuTiP 5, please let us know.
A notebook to help with migration is available on colab.
An extensive list of changes follows.
Contributors
QuTiP 5 has been a large effort by many people over the last three years.
In particular:
qutip_qip
.Other members of the QuTiP Admin team have been heavily involved in reviewing,
testing and designing QuTiP 5:
Two Google Summer of Code contributors updated the tutorials and benchmarks to
QuTiP 5:
During an internship at RIKEN, Patrick Hopf created a new quantum control method and
improved the existing methods interface:
Four experimental data layers backends were written either as part of Google Summer
of Code or as separate projects. While these are still alpha quality, they helped
significantly to test the data layer API:
qutip-tensorflow
: a TensorFlow backend by Asier Galicia (https://github.com/qutip/qutip-tensorflow)qutip-cupy
: a CuPy GPU backend by Felipe Bivort Haiek (https://github.com/qutip/qutip-cupy/)qutip-tensornetwork
: a TensorNetwork backend by Asier Galicia (https://github.com/qutip/qutip-tensornetwork)qutip-jax
: a JAX backend by Eric Giguère (https://github.com/qutip/qutip-jax/)Finally, Yuji Tamakoshi updated the visualization function and added animation
functions as part of Google Summer of Code project.
We have also had many other contributors, whose specific contributions are
detailed below:
fmmesolve
multiple c_ops and rate integration fix #1962)bloch_redfield_tensor
function to accept strings and callables fora_ops
,bloch_redfield_tensor
support different spectra types #1951)qutip_qip
to be imported asqutip.qip
, Setting qutip-qip as an optional plugin for qutip-5 [unitaryhack] #1920)process_fidelity
andaverage_gate_fidelity
, Implement and test process fidelity #1712, refactor process_fidelity using new function _hilbert_space_dims #1748 , Reduce average gate fidelity to process fidelity #1788)qutip.Bloch
, added option for color in bloch.py #1335)kraus_to_choi
making it faster, Fasterkraus_to_choi
in qutip 5 #2284)expect
documentation, Typos in qutip.expect()'s docstring #2331)Qobj changes
Previously
Qobj
data was stored in a SciPy-like sparse matrix. Now therepresentation is flexible. Implementations for dense and sparse formats are
included in QuTiP and custom implementations are possible. QuTiP's performance
on dense states and operators is significantly improved as a result.
Some highlights:
.data
attribute, but is now aninstance of the underlying data type instead of a SciPy-like sparse matrix.
The operations available in
qutip.core.data
may be used on.data
,regardless of the data type.
Qobj
with different data types may be mixed in arithmetic and otheroperations. A sensible output type will be automatically determined.
.to(...)
method may be used to convert aQobj
from one data typeto another. E.g.
.to("dense")
will convert to the dense representation and.to("csr")
will convert to the sparse type.Qobj
methods and methods that createQobj
now accepted adtype
parameter that allows the data type of the returned
Qobj
to specified.&
operator may be used to obtain the tensor product.@
operator may be used to obtain the matrix / operator product.bar @ ket
returns a scalar..contract()
method will collapse 1D subspaces of the dimensions ofthe
Qobj
..logm()
method returns the matrix logarithm of an operator..set_data
,.get_data
,.extract_state
,.eliminate_states
,.evaluate
and.check_isunitary
have been removed.dtype
return the representation of the data used.data_as
allow to obtain the data as a common python formats:numpy array, scipy sparse matrix, JAX Array, etc.
QobjEvo changes
The
QobjEvo
type for storing time-dependent quantum objects has beensignificantly expanded, standardized and extended. The time-dependent
coefficients are now represented using a new
Coefficient
type thatmay be independently created and manipulated if required.
Some highlights:
.compile()
method has been removed. Coefficients specified asstrings are automatically compiled if possible and the compilation is
cached across different Python runs and instances.
Qobj
is now supported.QobjEvo
for convenience. Examplesinclude
.dims
,.shape
,.superrep
and.isconstant
..cte
,.use_cython
,.type
,.const
,and
.coeff_file
were removed.Spline
coefficient supports spline interpolations of differentorders. The old
Cubic_Spline
coefficient has been removed..arguments(...)
method allows additional arguments to theunderlying coefficient functions to be updated.
_step_func_coeff
argument has been replaced by theorder
parameter.
_step_func_coeff=False
is equivalent toorder=3
._step_func_coeff=True
is equivalent toorder=0
. Higher valuesof
order
gives spline interpolations of higher orders.bc_type
to control the boundary conditions.oper * qutip.coefficient(f, args=args)
is equivalent toqutip.QobjEvo([[oper, f]], args=args)
.def f(t, A, w)
.The dictionary
args
second argument is no longer needed.Function using the exact
f(t, args)
signature will use the old method forbackward compatibility.
Solver changes
The solvers in QuTiP have been heavily reworked and standardized.
Under the hood solvers now make use of swappable ODE
Integrators
.Many
Integrators
are included (see the list below) andcustom implementations are possible. Solvers now consistently
accept a
QobjEvo
instance at the Hamiltonian or Liouvillian, orany object which can be passed to the
QobjEvo
constructor.A breakdown of highlights follows.
All solvers:
qutip.Options
is deprecated and returns a dict for backwardscompatibility.
method
option.of the class allows a solver to be run multiple times for the
same system without having to repeatedly reconstruct the
right-hand side of the ODE to be integrated.
QobjEvo
instance is accepted for most operators, e.g.,H
,c_ops
,e_ops
,a_ops
.progress_bar
option.A new progess bar using the
tqdm
Python library is provided.the current state of the evolution interface reworked. Now a property of the
solver is to be used as an arguments:
args={"state": MESolver.StateFeedback(default=rho0)}
Integrators:
Adams methods as
bdf
andadams
.Dormand & Prince) is available as
dop853
.lsoda
.of order 7 and 9 are available as
vern7
andvern9
. Seehttp://people.math.sfu.ca/~jverner/ for a description of the methods.
the system to be integrated is available as
diag
. It only works ontime-independent systems and is slow to setup, but once the diagonalization
is complete, it generates solutions very quickly.
available as
krylov
. This integrator is only usable withsesolve
.Result class:
.e_data
attribute provides expectation values as a dictionary.Unlike
.expect
, the values are provided in a Python list rather thana numpy array, which better supports non-numeric types.
.stats
attribute changed significantly and isnow more consistent across solvers.
Monte-Carlo Solver (mcsolve):
seed
parameter now supports supplying numpySeedSequence
orGenerator
types.timeout
andtarget_tol
parameters allow the solver to exitearly if a timeout or target tolerance is reached.
Instead, just run the solver multiple times and use the class
MCSolver
if setting up the solver uses a significant amount of time.
map_func
parameter has been replaced by themap
option.mcsolve
now supports calculating photocurrentsand calculating the steady state over N trajectories.
parfor
parallel execution function has been removed fromqutip.parallel
. Useparallel_map
,loky_map
ormpi_pmap
instead.probability of collapse is small.
Non Markovian Monte-Carlo Solver (nm_mcsolve):
.trace
attribute of the result.Stochastic Equation Solvers (ssesolve, smesolve)
timeout
andtarget_tol
added.seed
parameter now supports supplying numpySeedSequence
.Bloch-Redfield Master Equation Solver (brmesolve):
a_ops
andspectra
support implementations been heavily reworked toreuse the techniques from the new Coefficient and QobjEvo classes.
use_secular
parameter has been removed. Usesec_cutoff=-1
instead.qutip.settings
.Krylov Subspace Solver (krylovsolve):
SESolver
and thekrylov
ODE integrator. The function
krylovsolve
is maintained for convenienceand now supports many more options.
sparse
parameter has been removed. Supply a sparseQobj
for theHamiltonian instead.
Floquet Solver (fsesolve and fmmesolve):
FloquetBasis
classwhich manages the transformations from lab to Floquet basis and back.
been removed. The Floquet tensor may still be retried using
the function
floquet_tensor
.new options added. The environment temperature may be specified using
w_th
, and the result states are stored in the lab basis and optionallyin the Floquet basis using
store_floquet_state
.fmmesolve
must now be vectorized(i.e. accept and return numpy arrays for frequencies and densities) and
must accept negative frequence (i.e. usually include a
w > 0
factorso that the returned densities are zero for negative frequencies).
kmax
may only be supplied when usingthe
FMESolver
Tsteps
parameter has been removed from bothfsesolve
andfmmesolve
. Theprecompute
option toFloquetBasis
may be usedinstead.
Evolution of State Solver (essovle):
essolve
has been removed. Use thediag
integrationmethod with
sesolve
ormesolve
instead.Steady-state solvers (steadystate module):
method
parameter andsolver
parameters have been separated. Previouslythey were mixed together in the
method
parameter.solver and mostly passed through to the underlying SciPy functions.
Correlation functions (correlation module):
correlation_3op
function has been added. It supportsMESolver
or
BRMESolver
.correlation
,correlation_4op
, andcorrelation_ss
functions have beenremoved.
mcsolve
has been removed.Propagators (propagator module):
qutip.Propagator
, has been added for propagators.QobjEvo
.unitary_mode
andparallel
options have been removed.Correlation spectra (spectrum module):
spectrum_ss
andspectrum_pi
have been removed andare now internal functions.
use_pinv
parameter forspectrum
has been removed and thefunctionality merged into the
solver
parameter. Usesolver="pi"
instead.
Hierarchical Equation of Motion Solver (HEOM)
QuTiP core
There have been numerous other small changes to core QuTiP features:
qft(...)
the function that returns the quantum Fouriertransform operator was moved from
qutip.qip.algorithm
intoqutip
.brtensor
, has been moved intoqutip.core
. See the section above on the Bloch-Redfield solverfor details.
mat2vec
andvec2mat
for transforming states to andfrom super-operator states have been renamed to
stack_columns
andunstack_columns
.liouvillian_ref
has been removed. Usedliouvillian
instead.
super_to_choi
,choi_to_super
,choi_to_kraus
,choi_to_chi
andchi_to_choi
have been removed.Used
to_choi
,to_super
,to_kraus
andto_chi
instead.numpy
Generator
as a seed.dims
parameter of all random object creation functions hasbeen removed. Supply the dimensions as the first parameter if
explicit dimensions are required.
rand_unitary_haar
has been removed. Userand_unitary(distribution="haar")
instead.rand_dm_hs
andrand_dm_ginibre
have been removed.Use
rand_dm(distribution="hs")
andrand_dm(distribution="ginibre")
instead.
rand_ket_haar
has been removed. Userand_ket(distribution="haar")
instead.target
parameter forexpanding the measurement operator removed. Used
expand_operator
to expand the operator instead.
qutip.Bloch
now supports applying colours per-point, state or vector inadd_point
,add_states
, andadd_vectors
.qeye_like
andqzero_like
.QuTiP settings
Previously
qutip.settings
was an ordinary module. Nowqutip.settings
isan instance of a settings class. All the runtime modifiable settings for
core operations are in
qutip.settings.core
. The other settings are notmodifiable at runtime.
load
.reset
andsave
functions..debug
,.fortran
,.openmp_thresh
..compile
stores the compilation options for compiled coefficients..core["rtol"]
core option gives the default relative tolerance used by QuTiP..atol
has been moved to.core["atol"]
.Visualization
plot_wigner
andplot_wigner_fock_distribution
to specify parameters forwigner
.Bloch3D
. The same functionality is provided byBloch
.fig
,ax
andcmap
keyword arguments to all visualization functions.colorblind_safe
setting.Qobj
or directly from solver results with saved states.Package reorganization
qutip.qip
has been moved into its own package, qutip-qip. Once installed, qutip-qip is available as eitherqutip.qip
orqutip_qip
. Some widely useful gates have been retained inqutip.gates
.qutip.control
has been moved to qutip-qtrl and once installed qutip-qtrl is available as eitherqutip.control
orqutip_qtrl
. Note thatquitp_qtrl
is provided primarily for backwards compatibility. Improvements to optimal control will take place in the newqutip_qoc
package.qutip.lattice
has been moved into its own package, qutip-lattice. It is available from<https://github.com/qutip/qutip-lattice>
.qutip.sparse
has been removed. It contained the old sparse matrix representation and is replaced by the new implementation inqutip.data
.qutip.piqs
functions are no longer available from thequtip
namespace. They are accessible fromqutip.piqs
instead.Miscellaneous
sparse matrices with up to 2**63 rows and columns. This support needs to
be enabled at compilation time by calling
setup.py
and passing--with-idxint-64
.Feature removals
qutip.parfor
function has been removed. Usequtip.parallel_map
instead.qutip.graph
has been removed and replaced by SciPy's graph functions.qutip.topology
has been removed. It contained only one functionberry_curvature
.~/.qutip/qutiprc
config file is no longer supported. It contained settings for the OpenMP support.three_level_atom
orbital
Changes from QuTiP 5.0.0b1:
Features
Miscellaneous
This discussion was created from the release QuTiP 5.0.0.
Beta Was this translation helpful? Give feedback.
All reactions