netket.models.tensor_networks.MPDOPeriodic#

class netket.models.tensor_networks.MPDOPeriodic[source]#

Bases: Module

A Matrix Product Density Operator (MPDO) with periodic boundary conditions for a quantum mixed state of discrete degrees of freedom. The purification is used.

The MPDO is defined as (see F. Verstraete, J. J. García-Ripoll, J. I. Cirac, Phys. Rev. Lett. 93, 207204 (2004)).

\[\rho(s_1,\dots, s_N, s_1',\dots, s_N') = \sum_{\alpha_1, \dots, \alpha_{N-1}} \mathrm{Tr} \left[ M^{\alpha_1}_{s_1,s_1'} \dots M^{\alpha_{N-1}}_{s_N, s_N'} M^{\alpha_N}_{s_1, s_1'} \right],\]

for arbitrary local quantum numbers \(s_i\) and \(s_i'\), where \(M^{\alpha_i}_{s_i,s_i'}\) are \(D^2 \times D^2\) matrices that can be decomposed as

\[M^{\alpha_i}_{s_i,s_i'} = \sum_{a=1}^{\chi} A^{\alpha_i, a}_{s_i} \otimes (A^{\alpha_i, a}_{s_i'})^*,\]

with \(A^{\alpha_i, a}_{s_i}\) being \(D \times D\) matrices. The bond dimension is denoted by \(D\) and the Kraus dimension by \(\chi\), which corresponds to the variable kraus_dim in the code.

The periodic boundary conditions imply that there are connections between the first and the last tensors, forming a trace over the product of matrices for the entire system.

The implementation is based on this paper.

Attributes
checkpoint: bool = True#

Whether to use jax.checkpoint on the scan function for memory efficiency.

kraus_dim: int = 2#

The local Kraus dimension of the MPDO tensors. See formula above.

symperiod: Optional[bool] = None#

Periodicity in the chain of MPDO tensors. The chain of MPDO tensors is constructed as a sequence of identical unit cells consisting of symperiod tensors. if None, symperiod equals the number of physical degrees of freedom.

unroll: int = 1#

the number of scan iterations to unroll within a single iteration of a loop.

hilbert: HomogeneousHilbert#

Hilbert space on which the state is defined.

bond_dim: int#

Bond dimension of the MPDO tensors. See formula above.

kernel_init: Callable[[Any, Sequence[int], Any], Union[ndarray, Array]]#

the initializer for the MPS weights. This is added to an identity tensor.

Methods
__call__(x)[source]#

Queries this MPDO for the input configurations x, which should contain rows and columns entries concatenated.

Parameters:

x – the input configuration

contract_mpdo(qn)[source]#

Internal function, used to contract the tensor network with some input tensor.

Parameters:

qn – The input tensor to be contracted with this MPDO