Skip to content

QuTiP 4.7.0

Choose a tag to compare
@hodgestar hodgestar released this 13 Apr 16:27
· 127 commits to qutip-4.6.X since this release

This release sees the addition of two new solvers -- qutip.krylovsolve based on the Krylov subspace approximation and qutip.nonmarkov.heom that reimplements the BoFiN HEOM solver.

Bloch sphere rendering gained support for drawing arcs and lines on the sphere, and for setting the transparency of rendered points and vectors, Hinton plots gained support for specifying a coloring style, and matrix histograms gained better default colors and more flexible styling options.

Other significant improvements include better scaling of the Floquet solver, support for passing Path objects when saving and loading files, support for passing callable functions as e_ops to mesolve and sesolve, and faster state number enumeration and Husimi Q functions.

Import bugfixes include some bugs affecting plotting with matplotlib 3.5 and fixing support for qutrits (and other non-qubit) quantum circuits.

The many other small improvements, bug fixes, documentation enhancements, and behind the scenese development changes are included in the list below.

QuTiP 4.7.X will be the last series of releases for QuTiP 4. Patch releases will continue for the 4.7.X series but the main development effort will move to QuTiP 5.

The many, many contributors who filed issues, submitted or reviewed pull requests, and improved the documentation for this release are listed next to their contributions below. Thank you to all of you.


  • MAJOR Added krylovsolve as a new solver based on krylov subspace approximation. (#1739 by Emiliano Fortes)
  • MAJOR Imported BoFiN HEOM ( into QuTiP and replaced the HEOM solver with a compatibility wrapper around BoFiN bosonic solver. (#1601, #1726, and #1724 by Simon Cross, Tarun Raheja and Neill Lambert)
  • MAJOR Added support for plotting lines and arcs on the Bloch sphere. (#1690 by Gaurav Saxena, Asier Galicia and Simon Cross)
  • Added transparency parameter to the add_point, add_vector and add_states methods in the Bloch and Bloch3d classes. (#1837 by Xavier Spronken)
  • Support Path objects in qutip.fileio. (#1813 by Adrià Labay)
  • Improved the weighting in steadystate solver, so that the default weight matches the documented behaviour and the dense solver applies the weights in the same manner as the sparse solver. (#1275 and #1802 by NS2 Group at LPS and Simon Cross)
  • Added a color_style option to the hinton plotting function. (#1595 by Cassandra Granade)
  • Improved the scaling of floquet_master_equation_rates and floquet_master_equation_tensor and fixed transposition and basis change errors in floquet_master_equation_tensor and floquet_markov_mesolve. (#1248 by Camille Le Calonnec, Jake Lishman and Eric Giguère)
  • Removed linspace_with and view_methods from qutip.utilities. For the former it is far better to use numpy.linspace and for the later Python's in-built help function or other tools. (#1680 by Eric Giguère)
  • Added support for passing callable functions as e_ops to mesolve and sesolve. (#1655 by Marek Narożniak)
  • Added the function steadystate_floquet, which returns the "effective" steadystate of a periodic driven system. (#1660 by Alberto Mercurio)
  • Improved mcsolve memory efficiency by not storing final states when they are not needed. (#1669 by Eric Giguère)
  • Improved the default colors and styling of matrix_histogram and provided additional styling options. (#1573 and #1628 by Mahdi Aslani)
  • Sped up state_number_enumerate, state_number_index, state_index_number, and added some error checking. enr_state_dictionaries now returns a list for idx2state. (#1604 by Johannes Feist)
  • Added new Husimi Q algorithms, improving the speed for density matrices, and giving a near order-of-magnitude improvement when calculating the Q function for many different states, using the new qutip.QFunc class, instead of the qutip.qfunc function. (#934 and #1583 by Daniel Weigand and Jake Lishman)
  • Updated licence holders with regards to new governance model, and remove extraneous licensing information from source files. (#1579 by Jake Lishman)
  • Removed the vendored copy of LaTeX's qcircuit package which is GPL licensed. We now rely on the package being installed by user. It is installed by default with TexLive. (#1580 by Jake Lishman)
  • The signatures of rand_ket and rand_ket_haar were changed to allow N (the size of the random ket) to be determined automatically when dims are specified. (#1509 by Purva Thakre)

Bug Fixes

  • Fix circuit index used when plotting circuits with non-reversed states. (#1847 by Christian Staufenbiel)
  • Changed implementation of qutip.orbital to use scipy.special.spy_harm to remove bugs in angle interpretation. (#1844 by Christian Staufenbiel)
  • Fixed QobjEvo.tidyup to use settings.auto_tidyup_atol when removing small elements in sparse matrices. (#1832 by Eric Giguère)
  • Ensured that tidyup's default tolerance is read from settings at each call. (#1830 by Eric Giguère)
  • Fixed scipy.sparse deprecation warnings raised by qutip.fast_csr_matrix. (#1827 by Simon Cross)
  • Fixed rendering of vectors on the Bloch sphere when using matplotlib 3.5 and above. (#1818 by Simon Cross)
  • Fixed the displaying of Lattice1d instances and their unit cells. Previously calling them raised exceptions in simple cases. (#1819, #1697 and #1702 by Simon Cross and Saumya Biswas)
  • Fixed the displaying of the title for hinton and matrix_histogram plots when a title is given. Previously the supplied title was not displayed. (#1707 by Vladimir Vargas-Calderón)
  • Removed an incorrect check on the initial state dimensions in the QubitCircuit constructor. This allows, for example, the construction of qutrit circuits. (#1807 by Boxi Li)
  • Fixed the checking of method and offset parameters in coherent and coherent_dm. (#1469 and #1741 by Joseph Fox-Rabinovitz and Simon Cross)
  • Removed the Hamiltonian saved in the sesolve solver results. (#1689 by Eric Giguère)
  • Fixed a bug in rand_herm with pos_def=True and density>0.5 where the diagonal was incorrectly filled. (#1562 by Eric Giguère)

Documentation Improvements

  • Added contributors image to the documentation. (#1828 by Leonard Assis)
  • Fixed the Theory of Quantum Information bibliography link. (#1840 by Anto Luketina)
  • Fixed minor grammar errors in the dynamics guide. (#1822 by Victor Omole)
  • Fixed many small documentation typos. (#1569 by Ashish Panigrahi)
  • Added Pulser to the list of libraries that use QuTiP. (#1570 by Ashish Panigrahi)
  • Corrected typo in the states and operators guide. (#1567 by Laurent Ajdnik)
  • Converted http links to https. (#1555 by Jake Lishamn)

Developer Changes

  • Add GitHub actions test run on windows-latest. (#1853 and #1855 by Simon Cross)
  • Bumped the version of pillow used to build documentation from 9.0.0 to 9.0.1. (#1835 by dependabot)
  • Migrated the qutip.superop_reps tests to pytest. (#1825 by Felipe Bivort Haiek)
  • Migrated the qutip.steadystates tests to pytest. (#1679 by Eric Giguère)
  • Changed the CI badge to the GitHub Actions badge. (#1581 by Jake Lishman)
  • Updated CodeClimate configuration to treat our Python source files as Python 3. (#1577 by Jake Lishman)
  • Reduced cyclomatic complexity in qutip._mkl. (#1576 by Jake Lishman)
  • Fixed PEP8 warnings in qutip.control, qutip.mcsolve, qutip.random_objects, and qutip.stochastic. (#1575 by Jake Lishman)
  • Bumped the version of urllib3 used to build documentation from 1.26.4 to 1.26.5. (#1563 by dependabot)
  • Moved tests to GitHub Actions. (#1551 by Jake Lishman)
  • The GitHub contributing guidelines were re-added and updated to point to the more complete guidelines in the documentation. (#1549 by Jake Lishman)
  • The release documentation was reworked after the initial 4.6.1 to match the actual release process. (#1544 by Jake Lishman)