Tensor Network algorithms implemented in python.
Project description
tnpy
This project is a python implementation of Tensor Network, a numerical approach to quantum many-body systems.
tnpy is built on top of quimb, along with TensorNetwork for tensor contractions, with optimized support for various backend engines (TensorFlow, JAX, PyTorch, and Numpy). For eigen-solver we adopt primme, an iterative multi-method solver with preconditioning.
Currently, we support Matrix Product State (MPS) algorithms, with more are coming...
- Finite-sized Density Matrix Renormalization Group (fDMRG)
- Tree tensor Strong Disorder Renormalization Group (tSDRG)
fDMRG & tSDRG are on alpha-release. For others, please expect edge cases.
Requirments
See pyproject.toml
for more details.
But these two are essential building blocks.
Regarding any installation problems with Primme, please refer to Primme official. Also, it's required to have lapack and blas installed in prior to Primme.
Installation
-
using Docker
docker run --rm -it tanlin2013/tnpy
-
using pip:
pip install tnpy
for the latest release, or
pip install git+https://github.com/tanlin2013/tnpy@main
for the development version.
Documentation
For details about tnpy, see the reference documentation.
Getting started
-
Defining the Matrix Product Operator of your model as a Callable function with argument
site
of the typeint
, e.g. the function_elem(self, site)
below. The MPO class then accepts the Callable as an input and constructs a MPO object.import numpy as np from tnpy.operators import SpinOperators, MPO from tnpy.finite_dmrg import FiniteDMRG class XXZ: def __init__(self, N: int, delta: float) -> None: self.N = N self.delta = delta def _elem(self, site: int) -> np.ndarray: Sp, Sm, Sz, I2, O2 = SpinOperators() return np.array( [[I2, -0.5 * Sp, -0.5 * Sm, -self.delta * Sz, O2], [O2, O2, O2, O2, Sm], [O2, O2, O2, O2, Sp], [O2, O2, O2, O2, Sz], [O2, O2, O2, O2, I2]] ) @property def mpo(self) -> MPO: return MPO(self.N, self._elem)
-
Call the algorithm to optimize the state.
N = 100 # length of spin chain chi = 60 # virtual bond dimension model = XXZ(N, delta) fdmrg = FiniteDMRG( mpo=model.mpo, chi=chi ) fdmrg.update(tol=1e-8)
-
Compute any physical quantities whatever you want from the obtained state. The resulting MPS is of the type
tensornetwork.FiniteMPS
, see here for more details.my_mps = fdmrg.mps
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.