pfaffian.py

on github (download).

import logging
import numpy as np
from temfpy import pfaffian, setup_logging

setup_logging(logging.DEBUG)


def majorana_nn_Hamiltonian(L, t=1j):
    M = np.diag(t * np.ones(2 * L - 1), 1)
    return M + M.T.conj()


def majorana_random_Hamiltonian(L, range=3):
    x, y = np.meshgrid(np.arange(2 * L), np.arange(2 * L), indexing="ij")
    scale = np.exp(-abs(x - y) / range)
    M = np.random.normal(scale=scale)
    return 1j * (M - M.T)


L = 20

H = majorana_random_Hamiltonian(L)
C = pfaffian.correlation_matrix(H, basis="M->C")

chi = 200

psi = pfaffian.C_to_MPS(C, {"chi_max": chi}, basis="C")

CdC = psi.correlation_function("Cd", "C").T
dev = CdC - C[::2, ::2]
print(np.max(np.abs(dev)), np.linalg.norm(dev))
print(np.linalg.norm(CdC.imag))

CC = psi.correlation_function("C", "C").T
dev = CC - C[::2, 1::2]
print(np.max(np.abs(dev)), np.linalg.norm(dev))
print(np.linalg.norm(CC.imag))