Changelog
All notable changes to this project will be documented in this file.
[1.0.0] - 2025-12-06
Enable support for Python 3.11, 3.12, 3.13 and 3.14.
Drop support for Python 3.6 and 3.7.
It is now possible to define new algebras by extending the base class
expression.Generator. This functionality has been documented in the API reference, and a new example has been added.New auxiliary type
expression.LinearFunctionGenthat is used to define commutation relations and simplification rules for user-defined algebras.The property
expression.Generator.algebra_idhas been turned into a method.Added methods
__copy__()and__deepcopy__()to a few mutable objects:expression.Monomial,expression.Expression[R|C],loperator.HilbertSpaceandloperator.SpacePartition.New read-only attribute
loperator.ElementarySpace.dimalso inherited byloperator.ESpace(Fermion|Boson|Spin).Dimension of
loperator.ESpaceBosonhad to be a power of 2. Now this restriction is lifted. Arguments of its constructor and ofloperator.make_space_boson()have been adjusted accordingly: They now expect the dimension argumentdiminstead of its binary logarithmn_bits.Constructors of
loperator.HilbertSpaceare changed to accept the argumentdim_bosoninstead of its binary logarithmbits_per_boson.New read-only attribute
loperator.HilbertSpace.is_sparsethat isTrueif some of the constituent elementary spaces have non-power-of-two dimensions.New read-only attribute
loperator.HilbertSpace.vec_sizethat is equal to the minimal size of a state vector container compatible with this Hilbert space.Semantics of the existing attribute
loperator.HilbertSpace.dimhas been changed. Now it is equal to the exact dimension of the Hilbert space, which is smaller thanloperator.HilbertSpace.vec_sizeif the Hilbert space is sparse.New method
loperator.HilbertSpace.es_dim(es)that returns dimension of a constituent elementary space.New method
loperator.HilbertSpace.foreach_elementary_space(f)that applies a given function to each constituent elementary space.New classes
CompressedStateView(R|C). These objects areLOperator(R|C)-compatible views that perform basis state index translation from a (possibly) sparse Hilbert space of dimensiondimto the continuous range[0; dim-1].Methods
loperator.SpacePartition.merge_subspaces()andloperator.SpacePartition.find_connections()no longer accept thehsargument and instead use theloperator.HilbertSpaceobject provided upon construction.setup.pyhas been updated to look for the libcommute header files in thesrc/libcommutesubdirectory of pycommute’s source tree in addition to the location specified via theLIBCOMMUTE_INCLUDEDIRenvironment variable. This change makes it easier to distribute both libraries in one archive.
[0.7.1] - 2021-12-17
Enable support for Python 3.10.
New methods
loperator.SpacePartition.subspace_basis()andloperator.SpacePartition.subspace_bases().Minor documentation updates.
[0.7.0] - 2021-10-09
New function
loperator.make_matrix()with three overloads. These wrapped C++ functions construct and return a matrix representation (2D NumPy array) of a linear operator acting (1) in a full Hilbert space, (2) in its subspace spanned by a given list of basis vectors or (3) between two subspaces of the Hilbert space.New classes
loperator.NFermionSectorView(R|C). These objects areLOperator(R|C)-compatible views that represent state vectors defined in an N-fermion subspace of a full Hilbert space. In addition to the view classes, there are two new utility functionsloperator.n_fermion_sector_size()andloperator.n_fermion_sector_basis_states().New classes
loperator.NFermionMultiSectorView(R|C). These objects areLOperator(R|C)-compatible views that represent state vectors defined in an N-fermion multisector. A multisector is a set of all basis states, which haveN_1particles within a subset of fermionic modes{S_1},N_2particles within another subset{S_2}and so on. There can be any number of individual pairs({S_i}, N_i)(sectors contributing to the multisector) as long as all subsets{S_i}are disjoint. In addition to the view classes, there are two new utility functionsloperator.n_fermion_multisector_size()andloperator.n_fermion_multisector_basis_states().New method
loperator.HilbertSpace.has_algebra().New method
loperator.SpacePartition.find_connections().
[0.6.1] - 2021-03-30
New method
expression.Indices.__getitem__().New method
loperator.HilbertSpace.index().CI: Tagged versions are now built into Docker images and pushed to Docker Hub.