Changelog#
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]#
[2.2.1] - 2026-03-09#
Added#
Changed#
Made python-mumps an optional dependency, only required for the implicit solver.
When SymPy cannot determine whether an off-diagonal zeroth-order block is zero, emit a warning and proceed instead of erroring.
Removed#
Dropped support for Python 3.11, numpy 1.26, and scipy 1.12 according to the SPEC-0.
[2.2.0] - 2025-06-05#
Added#
Added a reference implementation of arbitrary order Schrieffer-Wolff transformation to the documentation and a comparison of its convergence radius with Pymablock algorithm.
Added support for bosonic, fermionic, spin, and ladder (Floquet) second-quantized Hamiltonians in the operator formalism.
Added a tutorial on the Rabi model with a periodic drive.
Added documentation for the second quantization formalism.
Added a comparison with Schrieffer-Wolff and a demonstration of the convergence radius.
Changed#
If the Hamiltonian contains only one block,
fully_diagonalizecan be provided asvalueinstead of{0: value}.Updated the dispersive shift tutorial to include the second quantization approach.
Updated the Jaynes-Cummings tutorial to the new second quantization API.
Removed#
Dropped support for Numpy 1.25, Scipy 1.11, and Sympy 1.12 according to the SPEC-0.
[2.1.0] - 2024-11-19#
Added#
Generalized the algorithm to support an arbitrary number of blocks. To specify multiple blocks, provide either a list with eigenvectors of each block in
subspace_eigenvectors, or a list marking to which block each basis state belongs insubspace_indices.Implemented full diagonalization of the Hamiltonian within blocks except for degenerate eigensubspaces. In case of one block with non-degenerate eigenvalues, this implements the Rayleigh-Schrödinger perturbation theory.
Implemented selective diagonalization of the Hamiltonian within blocks, which can eliminate any subset of the off-diagonal elements within a block.
Implemented functionality for making optimized series algorithms, see
series_computationand a domain-specific language to define those. This is an advanced and an experimental feature, subject to change.Added a function
operator_to_BlockSeriesto transform operators to the same representation as the Hamiltonian, and illustrated its use in the tutorial.Included a tutorial on how to manipulate complex symbolic Hamiltonians and demonstrate multi-block diagonalization.
Included a tutorial on how to compute the dispersive shift in a transmon-resonator system.
Changed#
Auxiliary vectors for the implicit KPM solver should now be passed using
solver_options["aux_vectors"]rather than as the last entry insubspace_eigenvectors.
Improved#
Further reduced the number of matrix products by around 30% for high orders and down to a guaranteed minimum for 3rd order.
Improved the efficiency of the MUMPS solver on real Hamiltonians.
Allowed subspaces to have degenerate eigenvalues if the corresponding energy denominators are never used. This may happen in multiblock perturbation theory.
Fixed#
Fix incorrect shape of BlockSeries blocks if \(H_0\) has a zero block (#127).
Removed#
Dropped support for Python 3.10 and sympy 1.11 according to the SPEC-0.
[2.0.0] - 2024-02-03#
Improved#
Switched to the
python-mumpswrapper for the direct solver, which is available on all platforms and is more feature-complete.The implicit KPM solver now guarantees reaching a requested accuracy.
A new algorithm that has optimal scaling while avoiding multiplication by \(H_0\), and supports implicit data. This combines advantages of all previous algorithms, and therefore supersedes them.
Sped up
cauchy_dot_productwhen there are more than 3 series by reusing intermediate results.Optimized memory usage of
~pymablock.block_diagonalizeby deleting intermediate results when they are no longer needed.
Added#
A complete description of the algorithm to the documentation, see documentation.
String representation of BlockSeries for readability.
Removed#
expanded,symbolic,implicit, andgeneralfunctions and algorithms (functionality taken over by the new general algorithm, withblock_diagonalizethe main interface).the
algorithmargument fromblock_diagonalize(there is only one algorithm now).exclude_lastargument ofcauchy_dot_product(instead we check whtether other terms lack 0th order).
[1.0.0] - 2023-06-05#
First release of Pymablock.