Skip to content
Merged
4 changes: 2 additions & 2 deletions CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ authors:
given-names: "Jutho"
orcid: "https://orcid.org/0000-0002-0858-291X"
title: "TensorKit.jl"
version: "0.15.0"
version: "0.16.0"
doi: "10.5281/zenodo.8421339"
date-released: "2025-10-03"
date-released: "2025-12-05"
url: "https://github.com/QuantumKitHub/TensorKit.jl"
preferred-citation:
type: article
Expand Down
122 changes: 0 additions & 122 deletions Changelog.md

This file was deleted.

6 changes: 2 additions & 4 deletions Project.toml
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
name = "TensorKit"
uuid = "07d1fe3e-3e46-537d-9eac-e9e13d0d4cec"
authors = ["Jutho Haegeman"]
version = "0.15.3"
authors = ["Jutho Haegeman, Lukas Devos"]
version = "0.16.0"

[deps]
LRUCache = "8ac3fa9e-de4c-5943-b1dc-09c6b5f20637"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
MatrixAlgebraKit = "6c742aac-3347-4629-af66-fc926824e5e4"
OhMyThreads = "67456a42-1dca-4109-a031-0a68de7e3ad5"
PackageExtensionCompat = "65ce6f38-6b18-4e1d-a461-8949797d7930"
Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
ScopedValues = "7e506255-f358-4e82-b7e4-beb19740aa63"
Expand Down Expand Up @@ -37,7 +36,6 @@ LRUCache = "1.0.2"
LinearAlgebra = "1"
MatrixAlgebraKit = "0.6.0"
OhMyThreads = "0.8.0"
PackageExtensionCompat = "1"
Printf = "1"
Random = "1"
SafeTestsets = "0.1"
Expand Down
1 change: 1 addition & 0 deletions docs/make.jl
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ pages = [
],
"Index" => ["index/index.md"],
"Appendix" => ["appendix/symmetric_tutorial.md", "appendix/categories.md"],
"Changelog" => "Changelog.md",
]

mathengine = MathJax3(
Expand Down
146 changes: 146 additions & 0 deletions docs/src/Changelog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## 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.
- **Performance** for performance improvements.

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

## [Unreleased](https://github.com/QuantumKitHub/TensorKit.jl/compare/v0.16.0...HEAD)

## [0.16.0](https://github.com/QuantumKitHub/TensorKit.jl/releases/tag/v0.16.0) - 2025-12-05

### Added

- `rrule` for `transpose` operation ([#319](https://github.com/QuantumKitHub/TensorKit.jl/pull/319))
- New functions for multifusion support: `unitspace`, `zerospace`, `leftunitspace`, `rightunitspace`, `isunitspace` ([#291](https://github.com/QuantumKitHub/TensorKit.jl/pull/291))
- Support for projections and orthogonal complements ([#312](https://github.com/QuantumKitHub/TensorKit.jl/pull/312))

### Changed

- Tensors now no longer print their data by default, only their spaces. Use `blocks(t)` or `subblocks(t)` to inspect data ([#304](https://github.com/QuantumKitHub/TensorKit.jl/pull/304))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I forgot about the status of that. I do think people are not too happy with no output being shown; would it be so bad to shows blocks(t) by default?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Or is this having a lot of repercussions again on MPSKit etc?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We definitely used to show the output of subblocks(t), which we could add back here (even though I strongly prefer blocks(t), I think that is what people wanted?).
I think MPSKit wouldn't be affected since that would have to use the compact = true setting anyways, which shouldn't print this.
If we were to do this, I would however want to limit the output of that by default.
While I agree that for small tensors this can be useful, this is a nuisance for larger tensors...
Do you think this constitutes breaking changes though?

- Updated `left_orth`, `right_orth`, `left_null` and `right_null` interfaces for MatrixAlgebraKit v0.6 ([#312](https://github.com/QuantumKitHub/TensorKit.jl/pull/312))
- Updated `ishermitian` and `isisometric` implementations ([#312](https://github.com/QuantumKitHub/TensorKit.jl/pull/312))
- Sector functions now by default use `unit` instead of `one`, `isunit` instead of `isone`, and `dual` instead of `conj` ([#291](https://github.com/QuantumKitHub/TensorKit.jl/pull/291))
- Reworked TensorOperations implementation to use backend and allocator system ([#311](https://github.com/QuantumKitHub/TensorKit.jl/pull/311))
- Major documentation update/overhaul ([#289](https://github.com/QuantumKitHub/TensorKit.jl/pull/289))
- Added symmetric tensor tutorial as appendix ([#316](https://github.com/QuantumKitHub/TensorKit.jl/pull/316))
- Improved error messages throughout codebase ([#309](https://github.com/QuantumKitHub/TensorKit.jl/pull/309))

### Deprecated

### Removed

- All deprecations from v0.15: old factorization function names (`leftorth`, `rightorth`, `tsvd`, `eig`, `eigh`)
- Old truncation strategy names (`truncdim`, `truncbelow`)
- Old factorization struct types (`OrthogonalFactorization`)
- Old constructor syntaxes and deprecated `rand*` function names

### Fixed

- Avoid unnecessary copy in `twist` for tensors with bosonic braiding ([#305](https://github.com/QuantumKitHub/TensorKit.jl/pull/305))
- Small fixes and typos ([#295](https://github.com/QuantumKitHub/TensorKit.jl/pull/295))

## [0.15.3](https://github.com/QuantumKitHub/TensorKit.jl/releases/tag/v0.15.3) - 2025-10-30

### Fixed

- Fixed typo in `show(::GradedSpace)` ([#308](https://github.com/QuantumKitHub/TensorKit.jl/pull/308))
- Updated printing of `ProductSpace{<:Any,0}`
- Added tests for show methods

## [0.15.2](https://github.com/QuantumKitHub/TensorKit.jl/releases/tag/v0.15.2) - 2025-10-28

### Added

- `subblocks` iterator for easier inspection of tensor data ([#304](https://github.com/QuantumKitHub/TensorKit.jl/pull/304))

### Changed

- Tensors no longer print their data by default, only their spaces. Use `blocks(t)` or `subblocks(t)` to inspect data ([#304](https://github.com/QuantumKitHub/TensorKit.jl/pull/304))
- Updated compatibility to TensorKitSectors v0.3 ([#290](https://github.com/QuantumKitHub/TensorKit.jl/pull/290))
- Refactored test suite and split into groups ([#298](https://github.com/QuantumKitHub/TensorKit.jl/pull/298))

### Fixed

- Fixed `TruncationIntersection` implementation and test ([#300](https://github.com/QuantumKitHub/TensorKit.jl/pull/300))
- Avoided unnecessary allocations in rrules for contractions and tensor products ([#306](https://github.com/QuantumKitHub/TensorKit.jl/pull/306))

## [0.15.1](https://github.com/QuantumKitHub/TensorKit.jl/releases/tag/v0.15.1) - 2025-10-09

### Fixed

- Small fixes and typo corrections ([#295](https://github.com/QuantumKitHub/TensorKit.jl/pull/295))

## [0.15.0](https://github.com/QuantumKitHub/TensorKit.jl/releases/tag/v0.15.0) - 2025-10-03

### Added

- [MatrixAlgebraKit](https://github.com/QuantumKitHub/MatrixAlgebraKit.jl) as new backend for tensor factorizations ([#230](https://github.com/QuantumKitHub/TensorKit.jl/pull/230))
- `foreachblock(f, t::AbstractTensorMap...)` - uniform interface to iterate through tensor blocks
- `eig_trunc` and `eigh_trunc` - truncated eigenvalue decompositions
- `ominus` (and unicode `⊖`) - compute orthogonal complement of a space
- Backend selection for factorizations - swap algorithms or implementations

### Changed

- `left_orth` and `right_orth` now always output tensors with a single connecting space
- `left_orth` and `right_orth` now always have connecting space with `isdual=false`
- Code formatter is now [Runic.jl](https://github.com/fredrikekre/Runic.jl)

### Deprecated

- Factorization functions `leftorth`, `rightorth`, `tsvd`, `eig`, `eigh` in favor of MatrixAlgebraKit variants (`left_orth`, `right_orth`, `svd_compact`, `eig_full`, `eigh_full`)
- Truncation strategies: `truncdim` (use `truncrank`) and `truncbelow` (use `trunctol`)
- `OrthogonalFactorization` structs (constructors deprecated to return equivalent MatrixAlgebraKit algorithm structs)

### Removed

- Direct permute-and-factorize operations (incompatible with `permute` vs `braid` distinction)
- `Polar` decomposition behavior for `left_orth`/`right_orth` (use `left_polar`/`right_polar` instead for `isposdef` R factors)

## [0.14.0](https://github.com/QuantumKitHub/TensorKit.jl/releases/tag/v0.14.0) - 2024-12-19

### Added

- `DiagonalTensorMap` type for representing tensor maps with diagonal blocks
- `reduceddim(V)` function that sums up degeneracy dimensions for each sector
- New index manipulation functions:
- `flip(t, i)`
- `insertleftunit(t, i)`
- `insertrightunit(t, i)`
- `removeunit(t, i)`

### Changed

- Singular values and eigenvalues now explicitly represented as `DiagonalTensorMap` instances
- SVD truncation now guarantees smaller singular values are removed first, irrespective of sector quantum dimension

## [0.13.0](https://github.com/QuantumKitHub/TensorKit.jl/releases/tag/v0.13.0) - 2024-11-24

### Added

- Refactored `TensorMap` constructors to align with Julia `Array` constructors
- Convenience constructors: `ones`, `zeros`, `rand`, `randn` for tensors
- TensorOperations v5 support

### Changed

- Scalar type as parameter to `AbstractTensorMap` type: `AbstractTensorMap{E, S, N₁, N₂}`
- Default way to create uninitialized tensors is now `TensorMap{E}(undef, codomain ← domain)`
- Behavior of `copy` for `BraidingTensor` to properly instantiate a `TensorMap`
- TensorKitSectors promoted to separate package
- `TensorMap` data structure now consists of single vector with blocks as views
- `FusionTree` vertices now only use `Int` labels for `GenericFusion` sectors
12 changes: 0 additions & 12 deletions ext/TensorKitChainRulesCoreExt/constructors.jl
Original file line number Diff line number Diff line change
Expand Up @@ -106,18 +106,6 @@ function ChainRulesCore.rrule(
return TensorKit.copy_oftype(t, T), copy_oftype_pullback
end

function ChainRulesCore.rrule(
::typeof(TensorKit.permutedcopy_oftype), t::AbstractTensorMap, T::Type{<:Number}, p::Index2Tuple
)
project = ProjectTo(t)
function permutedcopy_oftype_pullback(Δt)
invp = TensorKit._canonicalize(TupleTools.invperm(linearize(p)), t)
return NoTangent(), project(TensorKit.permute(unthunk(Δt), invp)), NoTangent(),
NoTangent()
end
return TensorKit.permutedcopy_oftype(t, T, p), permutedcopy_oftype_pullback
end

function ChainRulesCore.rrule(::typeof(Base.convert), T::Type{<:Array}, t::AbstractTensorMap)
A = convert(T, t)
function convert_pullback(ΔA)
Expand Down
2 changes: 0 additions & 2 deletions ext/TensorKitChainRulesCoreExt/factorizations.jl

This file was deleted.

13 changes: 1 addition & 12 deletions src/TensorKit.jl
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ export FusionTree
export IndexSpace, HomSpace, TensorSpace, TensorMapSpace
export AbstractTensorMap, AbstractTensor, TensorMap, Tensor # tensors and tensor properties
export DiagonalTensorMap, BraidingTensor
export TruncationScheme
export SpaceMismatch, SectorMismatch, IndexError # error types

# Export general vector space methods
Expand Down Expand Up @@ -84,6 +83,7 @@ export left_orth, right_orth, left_null, right_null,
exp, exp!,
eigh_full!, eigh_full, eigh_trunc!, eigh_trunc, eigh_vals!, eigh_vals,
eig_full!, eig_full, eig_trunc!, eig_trunc, eig_vals!, eig_vals,
eigen, eigen!,
ishermitian, project_hermitian, project_hermitian!,
isantihermitian, project_antihermitian, project_antihermitian!,
isisometric, isunitary, project_isometric, project_isometric!,
Expand Down Expand Up @@ -148,8 +148,6 @@ import Base.Meta

using Random: Random, rand!, randn!

using PackageExtensionCompat

# Auxiliary files
#-----------------
include("auxiliary/auxiliary.jl")
Expand Down Expand Up @@ -248,13 +246,4 @@ include("planar/macros.jl")
@specialize
include("planar/planaroperations.jl")

# deprecations: to be removed in version 1.0 or sooner
include("auxiliary/deprecate.jl")

# Extensions
# ----------
function __init__()
return @require_extensions
end

end
Loading
Loading