quemb.molbe.sparse_2el_integral.SemiSparseSym3DTensor

class quemb.molbe.sparse_2el_integral.SemiSparseSym3DTensor(unique_dense_data, nao, naux, exch_reachable)

Special datastructure for semi-sparse and partially symmetric 3-indexed tensors.

For a tensor, \(T_{ijk}\), to be stored in this datastructure we assume

  • 2-fold permutational symmetry for the \(i, j\) indices, i.e. \(T_{ijk} = T_{jik}\)

  • sparsity along the \(i, j\) indices, i.e. \(T_{ijk} = 0\) for many \(i, j\)

  • dense storage along the \(k\) index

It can be used for example to store the 3-center, 2-electron integrals \((\mu \nu | P)\), with AOs \(\mu, \nu\) and auxiliary basis indices \(P\). Semi-sparsely, because it is assumed that there are many exchange pairs \(\mu, \nu\) which are zero, while the integral along the auxiliary basis \(P\) is stored densely as numpy array.

2-fold permutational symmetry for the \(\mu, \nu\) pairs is assumed, i.e.

\[(\mu \nu | P) == (\nu, \mu | P)\]

Note that this class is immutable which enables to store the unique, non-zero data in a dense manner, which has some performance benefits.

Attributes

class_type = jitclass.SemiSparseSym3DTensor#7fd651874d70<_keys:array(int64, 1d, C),unique_dense_data:array(float64, 2d, C),exch_reachable:ListType[array(int64, 1d, C)],exch_reachable_unique:ListType[array(int64, 1d, C)],nao:int64,naux:int64>
unique_dense_data: ndarray[tuple[int, ...], dtype[float64]]
nao: int
naux: int
exch_reachable: list[ndarray[tuple[int], dtype[NewType(OrbitalIdx, integer)]]]
exch_reachable_unique: list[ndarray[tuple[int], dtype[NewType(OrbitalIdx, integer)]]]

Methods

__init__(unique_dense_data, nao, naux, ...)

idx(b)

Return compound index

to_dense()

Convert to dense 3D tensor