The SyTen software package is primarily aimed to be a tensor network toolkit with a set of standard matrix-product state, binary tree-tensor network states and infinite projected entangled pair state utilities included.
A preliminary website exists at syten.eu, which also contains a (slightly stripped) version of the documentation generated from the current master branch.
For installation instructions, see INSTALL.md. For contributor guidelines, see CONTRIBUTING.md. For authors and contributors, see CONTRIBUTORS.md. A tutorial exists in TUTORIAL.md which was found to be helpful in at least one case. There is also a list of Works using the toolkit.
There is a small, fairly self-explanatory utility note
included in the repository which can be used to manage the bugs
branch. This branch acts as a rudimentary bug-tracking system. Execute ./note
in the root directory of the repository to launch the utility.
inc contains the library itself. inc is structured into folders as follows:
syten::GenericDenseTensor
and syten::SparseTensor
. These are tensors in the pure sense, i.e. collections of numbers in some multidimensional grid. They do not know about quantum numbers, transformation properties or anything else. They are templated on the tensor rank and the contained scalar type. syten::SparseTensor
uses a coordinate format to store Clebsch-Gordan coefficients. syten::GenericDenseTensor
is a variant of some specialised dense tensor classes (at the moment, syten::DenseTensor
, syten::IdentityDenseTensor
and syten::OffsetDenseTensor
) which aim to store the data in slightly more efficient ways.syten::Tensor
. As syten::GenericDenseTensor
and syten::SparseTensor
, it is templated on the tensor rank but fixes the scalar types to syten::SDef and syten::CDef. Tensor legs are defined via their number and the basis of a tensor on a given leg is defined by its tensor block structure.syten::STensor
. This tensor class builds on top of syten::Tensor
but hides the compile-time rank into a run-time std::variant
. It furthermore introduces named bases on each tensor leg, allowing for ITensor-like tensor-tensor products. The maximal tensor rank supported by this class is defined via the SYTEN_STENSOR_MAX_RANK macro and needs to be set at compile time. To use this class at all, you need to set the SYTEN_STENSOR macro; it is currently very much work in progress. Comments and commits welcome!bin contains a set of standard binaries, lat is intended for the definition of lattice models (in lat/mps, lat/btt and lat/ipeps respectively) and binaries generating those models (in lat directly).
helpers/
contains various helper scripts and files. See individual comments in those files for their expected input and use or the overall page Helper Scripts.
The directory ext/
is not really considered part of the toolkit and provided mainly for convenience. It holds external libraries (currently a copy of liblz4
, pybind11
and fmt
) along with some glue code (install and deinstall scripts and the like). While these files are often adapted to quite some extend, the original author is not the committer.
This follows very closely the structure in the matrix product toolkit by Ian McCulloch:
Python bindings exposing many of the C++ functions are currently work in progress. Simple examples already work and more and more are expected to work in the future. Instead of using a compiled C++ binary to call e.g. into the C++ MPS library, the iPEPS code uses Python bindings to use the iPEPS library from an easily extended executable script.
Alternatives to the comparably small SyTen toolkit include: