Features that are planned to be implemented before the release of v1.0.0, in no particular order.
- Separate
Sectors
module - Make
TrivialTensorMap
andTensorMap
be the same - Simplify
TensorMap
type to hiderowr
andcolr
- Change block order in
rowr
/colr
to speed up particular contractions - Make
AdjointTensorMap
generic - Rewrite planar operations in order to be AD-compatible
- Fix rrules for fermionic tensors
- Fix GPU support
- Proper threading support
- Rewrite documentation
This adds a DiagonalTensorMap
type for representing tensor maps in which all of the
blocks are diagonal. This only makes sense for maps between a single index in the domain and
the codomain (which are furthermore required to be the same), as otherwise the fusion and
splitting trees from the domain and codomain to the blocked sectors would itself be
nondiagonal. This new type will be used to capture the singular values and eigenvalues as
tensor maps in the corresponding decompositions. The number of free parameters in a
DiagonalTensorMap
instance on vector space V
is equal to reduceddim(V)
, a new function
that sums up the degeneracy dimension dim(V, c)
for each of the sectors c
in V
. This
function can be useful by itself and is also exported from the TensorKit
module. An
instance of DiagonalTensorMap
can then be created as DiagonalTensorMap(data, V)
where
data
is a vector of length reduceddim(V)
.
This adds the scalar type as a parameter to the AbstractTensorMap
type. This is useful in
the contexts where different types of tensors are used (AdjointTensor
, BraidingTensor
,
...), which still have the same scalartype. Additionally, this removes many specializations
for methods in order to reduce ambiguity errors.
This PR changes the behaviour of copy
as an instantiator for creating a TensorMap
from a
BraidingTensor
. The rationale is that while this does sometimes happen in Julia Base
,
this is always in the context of lazy wrapper types, for which it makes sense to not copy
the parent and then create a new wrapper. BraidingTensor
does not wrap anything, so this
definition makes less sense.
This PR refactors the constructors for TensorMap
to be more in line with Array
constructors in Julia. In particular, this means that the default way to create
uninitialized tensors is now TensorMap{E}(undef, codomain ← domain)
, reminiscent of
Array{E}(undef, dims)
. Several convenience constructors are also added: ones
, zeros
,
rand
and randn
construct tensors when dims
is replaced by domain ← codomain
.
This PR bumps the compatibility of TensorOperations
to v5. This is a breaking change
as there are some changes in the API.
This promotes TensorKitSectors to its own package, in order to make the dependencies lighter and to separate the concerns of the two packages.
In order to simplify the FusionTree
struct, we removed the usage of anything other than
Int
as a vertex-label when working with GenericFusion
sectors.
This PR changed the data structure of TensorMap
to consist of a single vector of data,
where all blocks and subblocks are various views into this object. This entails major
simplifications for the outwards-facing interface, as now the TensorMap
type requires less
parameters, and the fusion-tree structure is more clearly considered as an implementation
detail that can be left hidden to the user. Various other improvements and documentation
work was also carried out.