Release Notes
This page is the readable version of the CHANGELOG, which has the full list of changes. Versions are newest first, and Semantic Versioning applies: a minor version adds features, and anything marked breaking will need a change to your code or a recalculation of your results.
Entries before 0.13.0 use the old package name, maxwellbloch, and its old class names, as they were at the time. See MaxwellBloch is now clerq for the rename.
Unreleased
Not yet released; this is on the next branch.
Your code keeps working: the old names still run and raise a DeprecationWarning. Switching to the new names now will save you work when they are removed in a future release.
Clearer names, all available from import clerq.
| Before | Now |
|---|---|
clerq.mb_solve.MBSolve |
clerq.PropagationSolver |
clerq.ob_solve.OBSolve |
clerq.LindbladSolver |
clerq.ob_atom.OBAtom |
clerq.System |
clerq.field.Field |
clerq.Field |
mbsolve(), obsolve() |
solve() |
atom (argument, attribute, JSON key) |
system |
- “System” replaces “atom” because the solvers work for any few-level open quantum system, not only atoms.
- The modules are now
clerq.propagation,clerq.lindblad,clerq.systemandclerq.system_base. - Helper functions that take a solver always call that argument
solver. Before, it wasmb_solveinspectral,fixedandfileio, andmbsinplot. mbsolve_euler()andmbsolve_ab()are deprecated in favour ofsolve(step=...).- The
mbsolveandobsolvecommand-line scripts keep their names.
Cached results. A .qu savefile made by an earlier version no longer matches its problem definition (which now has a system key), so it is solved again and overwritten the first time you use it.
Other changes
PropagationSolverandSystemhave class docstrings describing their arguments.- The release assets on GitHub are now just the wheel, the sdist and their attestations.
- The documentation has correct API page titles, and several docstrings that disagreed with their signatures are fixed.
- The lockfile is updated to clear security alerts in documentation and development packages. The installed package is unaffected.
0.13.1 — 9 October 2026
A fix-up release after the rename.
Fixed
- The
mbsolveandobsolvecommand-line scripts work again. They had been broken since 0.10.0 and 0.11.0, andmbsolvealso failed on Python 3.14. The unused--pbarchunksizeoption is removed. - The example notebooks are recalibrated after the 0.13.0 factor-of-2 fix, so each example solves the physical problem it was designed for and gives the same results as in 0.12.0.
Added
- The stimulated three-pulse photon echo example.
CITATION.cff, so GitHub’s “Cite this repository” works.
Changed
- clerq is described as classical Maxwell fields propagating through open quantum systems, not as a Maxwell–Bloch solver.
- The documentation outputs are regenerated cleanly, and there is a page explaining the new name.
0.13.0 — 9 October 2026
The Maxwell propagation equation was missing a factor of 2, so the optical depth in earlier versions was half its physical value. Absorption and propagation results change, so recompute any cached .qu results and any figures made with earlier versions. The theory curves in clerq.spectral are updated to match.
- Renamed from
maxwellblochtoclerq. Changeimport maxwellblochtoimport clerq. The PyPI name is alsoclerq, the Plotly theme is named"clerq", and.qufiles record theclerqversion. - The documentation moved from Sphinx and Read the Docs to Quarto, at clerq.org.
0.12.0 — 6 May 2026
- Plotting:
plot.field_profileandplot.field_z_profile_anim, ashow_z_boundsoption, and aspeed_of_lightoption to plot in the fixed frame.plot.spectrumaccepts x-axis bounds. - Faster: the number-density profile is computed once up front, and the inner loop over sigma operators is vectorised.
- Examples: the SIT, linear absorption, V-system and Λ EIT/slow-light examples are each merged into one notebook.
0.11.0 — 3 May 2026
New
- Counter-propagating fields:
Field(counter_propagating=True)models a field travelling against the others. If the field has depleted so much that forward-only propagation is no longer valid, aCounterPropagatingDepletionErroris raised (turn the check off withcheck_counter_prop_depletion=False). - Plotting module
plot, built on Plotly with a shared theme: field space-time and envelope plots, spectra, populations, coherences and pulse area. Install it with theplotextra. - Spectral windows: the FFT functions in
spectralaccept a SciPywindow, andplot.spectrumgainsfreq_range, anarcsinhfrequency scale andwindow. - New examples: Autler–Townes splitting, CPT dark resonance, adiabatons, two-pulse photon echo, odd-π sech pulses and the Rb 87 D2 cycling transition, plus an examples gallery page.
Breaking
- The printed progress reports of
MBSolve.mbsolveand itspbar_chunk_sizeargument are replaced by a tqdm progress bar. Useprogress(defaultTrue) andprogress_show_areato control it, and remove anypbar_chunk_sizeargument.
0.10.0 — 25 April 2026
Breaking
OBSolve.solveis renamedOBSolve.obsolve.
New
- Savefile check: a
.qufile stores a hash of its problem definition and the library versions. Loading a file built from a different problem raisesValueError, and older files load with a warning. - Generated API reference pages.
Fixed
- A missing savefile directory is created before the
.qufile is written. - An
IndexErrorwhen fields are added to a system after construction.
Changed
maxwell_boltzmannmoved toutilityand gained anoffsetparameter.
0.9.0 — 24 April 2026
- About 43× faster inner propagation loop, from building the field interpolation once per z-step with QuTiP 5.
Field.upper_levels()andField.lower_levels()return the sorted level indices a field couples.LevelFchecks that|J−I| ≤ F ≤ J+Iand raisesValueErrorfor impossible hyperfine quantum numbers.- Internal methods are renamed with a leading
_to mark them as private (for examplebuild_H_0is now_build_H_0). If you called any of these directly, update the name.
0.8.1 — 23 April 2026
Maintenance: type annotations throughout, mutable default arguments fixed, more tests, and a docs build in CI. fixed.rabi_freq_abs is removed; use fixed.rabi_freq(..., part="abs").
0.8.0 — 15 April 2026
A modernisation release.
- Supports QuTiP 5, NumPy 2 and SciPy 1.14+.
- Python 3.10 or later is required.
- Packaging moved to
pyproject.toml; uv is the main environment manager. - CI moved to GitHub Actions with trusted publishing to PyPI.
Older releases
| Version | Date | Highlights |
|---|---|---|
| 0.7.1 | 10 Aug 2020 | Fixed a bug when adding multiple fields. |
| 0.7.0 | 11 Jul 2020 | mbsolve and obsolve scripts; set sech pulse width by FWHM and sech/Gaussian amplitude by area in multiples of π; the default Rabi frequency of a field changed from 0.0 to 1.0; Structure, Angular Momentum and Examples docs. |
| 0.6.0 | 17 May 2020 | Fixed Doppler broadening; Usage and Examples docs. |
| 0.5.0 | 7 Aug 2019 | Hyperfine structure: strength factors, Clebsch–Gordan coefficients, Wigner 3j and 6j symbols, isotropic fields; set the initial state; solver options; fixed the detuning term for fields coupling several upper levels. |
| 0.4.0 | 28 Aug 2018 | Atom labels; empty velocity classes allowed; ob_atom renamed atom; fields default to a constant time function; MP4 script fixes. |
| 0.3.0 | 8 Jan 2018 | Spectral and fixed-frame modules; FFT analysis; custom input fields; run from the command line; MP4 and GIF tools; Travis CI. |
| 0.2.0 | 27 Mar 2017 | First release: solves the Maxwell–Bloch equations. |