Skip to content

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.

Guidelines for updating this changelog

When making changes to this project, please update the "Unreleased" section with your changes under the appropriate category:

  • Added for new features.

  • Changed for changes in existing functionality.

  • Deprecated for soon-to-be removed features.

  • Removed for now removed features.

  • Fixed for any bug fixes.

When releasing a new version, move the "Unreleased" changes to a new version section with the release date.

Unreleased

Added

  • Addition of FiniteMPS/FiniteMPO with different scalar types, through a new Base.similar(ψ, ::Type{S}) for S <: Number on FiniteMPS. (#484)

  • Zipup, an algorithm for approximate/approximate! that compresses a finite MPO-MPS product in a single sweep, optionally followed by a sweep in the opposite direction that imposes the final truncation. The sweep direction is selected by the left_to_right keyword. Both approximate((O, ϕ), alg) and approximate!(ψ, (O, ϕ), alg) are supported, where the destination ψ is a write target rather than an initial guess and may alias ϕ; they return (ψ, ϵ).

Changed

  • environments now follows a single positional contract for every state and operator kind: environments(below, operator, above, alg), where alg is the environment algorithm (slot 4). The operator form requires an explicit above. Auxiliary inputs are keyword-only: leftstart/rightstart for finite and window environments, and lenvs/renvs for window and quasiparticle environments. The two-argument form environments(below, above) (with two states) is reserved for the operator-free overlap environments. There is no two-argument environments(below, operator) shorthand: a two-argument call is always the overlap, since the second argument cannot be disambiguated between a ket and an operator (undecidable for density matrices, where states and operators share a representation). (#436)

  • transfer_spectrum now computes the spectrum for all sectors of the transfer space at once, returning a TensorKit.SectorVector that can be indexed per sector. The sector keyword is removed; a specific selection of sectors (with per-sector counts) can be requested by passing howmany as an AbstractDict/iterable of sector => count pairs. The below state and the eigensolver algorithm are optional positional arguments, and the algorithm can be resolved per sector. The Krylov dimension adapts to the number of values requested in each sector, controlled by the new oversampling and oversampling_factor keywords. Accordingly, marek_gap and correlation_length now return a TensorKit.SectorDict of per-sector results by default; pass sector = ... to obtain a single sector's result as before.

  • All trscheme keyword arguments are renamed to trunc (#482).

Deprecated

Removed

Fixed

  • Base.:+/- on FiniteMPS returned a wrong state for near-parallel operands carried by different tensor networks, e.g. norm(E₀ * gs - H * gs) coming out as 2 * norm(gs) * E₀ instead of ~0. The lazy gauge sweep in CView.getindex re-derived AL/C entries that were already cached, and since different code paths install different factorizations (a truncated SVD from DMRG vs. a positive QR from the sweep) the replacement differed by a bond unitary, so + combined tensors belonging to two different gauges. The same staleness was latent in every consumer that reads several gauge tensors across a center move, dot included. (#473, #484)

  • Addition of single-site operands. FiniteMPS + FiniteMPS asserted length > 1, and FiniteMPO + FiniteMPO threw a space error, because both split the chain into a left and a right block and fuse them at the seam — of which there is none at length 1. Such an operand has no internal bond to fuse, so the sum is now simply the sum of the two tensors. (#484)

  • convert(TensorMap, ::FiniteMPO) on a single-site MPO stripped the left virtual leg of mpo[1] and the right virtual leg of mpo[end] and contracted the two — which at length 1 is the same tensor, so it returned O * O on twice the physical space instead of O. (#484)

Performance

0.13.11 - 2026-05-04

Added

  • MultilineMPO space getters (#407)

Changed

  • Refactored time-evolution MPO construction (#422)

  • Updated TensorKitManifolds compat to 0.8 (#421)

  • Updated MatrixAlgebraKit algorithm specification (#418)

  • Preparations for GPU / non-CPU array support (#375, #392)

  • Generalized calc_galerkin to AbstractMPS (#395)

  • Removed explicit call to InfiniteMPS in VUMPS (#396)

  • Generalized regauge! to AbstractVector (#393)

Fixed

  • Various fixes for compatibility with latest TensorKit versions (#416)

  • changebonds inconsistencies (#415)

  • Small fixes for density operators (#409)

  • Tolerance on positivity test (#398)

Performance

  • Benchmarks and AC/AC2 contraction improvements (#345)

0.13.10 - 2026-02-26

Added

  • expectation_value for local MPO tensors (#327)

  • Base.copy for MPS types now performs a deep copy (#387)

Changed

  • entropy can now also be called directly on a spectrum (singular value vector) (#377)

  • Updated compat bounds to remove broken package versions

Fixed

  • Fixed Adapt extension for GPU support (#389)

0.13.9 - 2026-02-03

Added

  • LocalPreferences.toml file to ensure TensorOperations properly precompiles on testing infrastructure

  • GeometryStyle and OperatorStyle traits for dispatching on finite/infinite geometry and operator types (#352, #354)

  • Base.isfinite methods for MPS types (#347)

  • Bose-Hubbard example (#342)

  • WindowMPS example update (#350)

  • Multifusion category compatibility (#297)

Fixed

  • Dynamic tolerances yielded NaN during the initialization stage due to 1 / sqrt(iter) where iter = 0 (#335)

  • InfiniteMPOHamiltonian environments with low bond dimension and high Krylov dimension now are properly clamped (#335)

  • Logical operator precedence in getproperty function (#346)

  • Typo in VUMPSSvdCut (#361)

  • Typo in time formatting for logs (#336)

  • Domain/codomain of MPODerivativeOperator (#370)

  • In-place operations handled more carefully (#337)

  • Orthogonalization algorithms now use correct methods (#373)

Changed

  • The changebonds(state, ::RandExpand) algorithm now no longer has to perform a truncated SVD to obtain the desired spaces, and instead sample the space directly and then generates a random isometry. This should be slightly more performant, but otherwise equivalent (#335)

  • IDMRG refactored to follow the IterativeSolver interface and share code between IDMRG and IDMRG2 (#348)

  • Bumped compatibility for TensorKit 0.16 and MatrixAlgebraKit 0.6 (#365)

  • Removed _left_orth and _right_orth workarounds in favor of new orthogonalization methods

  • Reduced allocation while computing Galerkin error (#366)

  • Updated show methods to reflect new TensorKit printing (#341)

  • More informative errors for finite MPS (#367)

  • Minor documentation and docstring improvements (#363, #372, #371)

Deprecated

Removed

0.13.8 - 2024-10-31

See full history and previous releases on GitHub.