slater.py

on github (download).

import logging
import numpy as np

from temfpy import slater, setup_logging
from temfpy.utils import HT

setup_logging(logging.DEBUG)


def hoppingH(L, t=-1):
    M = np.diag(t * np.ones(L - 1), 1)
    return M + M.T


def randomH(L, range=3):
    x, y = np.meshgrid(np.arange(L), np.arange(L), indexing="ij")
    scale = np.exp(-abs(x - y) / range)
    M = np.random.normal(size=(2, L, L), scale=scale)
    M = M[0] + 1j * M[1]
    return M + HT(M)


chi = 200

L = 32
H = randomH(L)
C, _ = slater.correlation_matrix(H)

mps = slater.C_to_MPS(C, {"chi_max": chi})

CdC = mps.correlation_function("Cd", "C").T
dev = CdC - C
print(np.max(np.abs(dev)), np.linalg.norm(dev))
print(np.linalg.norm(CdC.imag))