High-performance tensor software
inspired by tensor diagrams

Code Examples

Contracting two ITensors

C = A * B

Factoring an ITensor

U,S,V = svd(T,i,j)
Click here for more code examples


The Julia version of ITensor (recommended) is easy to install through the Julia package manager:

$ julia
julia> ]
pkg> add ITensors

For the C++ version of ITensor see C++ installation instructions.

To learn more about which version may be best for you to use and why, please read this FAQ page about Julia versus C++ ITensor.

What Makes ITensor Unique?

Intelligent Indices

The indices of an ITensor have unique identities. When contracting two ITensors, matching indices "find" each other and contract automatically. Adding two ITensors is literally as easy as A+B. Groups of ITensors can be arranged into networks which know their topology.

Quantum Number Conserving ITensors

ITensors can be quantum number conserving (invariant under group symmetries) by storing block-sparse data and other information. Quantum number conserving ITensors are nearly as easy to use as regular, dense ITensors.

Quantum Physics Tools

Easily turn human-readable sums of operators into a compressed MPO tensor network, a quantum circuit, and more. These intermediate formats can be used to find ground states, perform real-time or imaginary-time evolution, and other tasks.

MPS and MPO Algorithms

ITensor includes a full set of algorithms involving matrix product state (MPS) and matrix product operators (MPO), such as state-of-the-art DMRG and time-evolution codes, and algorithms for summing, multiplying, and optimizing MPS and MPOs.