def test_MPOGraph(): for bc in mpo.MPO._valid_bc: for L in [1, 2, 4]: print("L =", L) g = mpo.MPOGraph([spin_half] * L, bc) g.add(0, 'IdL', 'IdR', 'Sz', 0.1) if L > 1: g.add(0, 'IdL', 'Sz0', 'Sz', 1.) g.add(1, 'Sz0', 'IdR', 'Sz', 0.5) g.add(0, 'IdL', (0, 'Sp'), 'Sp', 0.3) g.add(1, (0, 'Sp'), 'IdR', 'Sm', 0.2) if L > 2: g.add_string(0, 3, (0, 'Sp'), 'Id') g.add(3, (0, 'Sp'), 'IdR', 'Sm', 0.1) g.add_missing_IdL_IdR() g.test_sanity() print(repr(g)) print(str(g)) print("build MPO") g_mpo = g.build_MPO() g_mpo.test_sanity()
def test_MPOGraph_term_conversion(): L = 4 g1 = mpo.MPOGraph([spin_half] * L, 'infinite') g1.test_sanity() for i in range(L): g1.add(i, 'IdL', 'IdR', 'Sz', 0.5) g1.add(i, 'IdL', (i, 'Sp', 'Id'), 'Sp', 1.) g1.add(i + 1, (i, 'Sp', 'Id'), 'IdR', 'Sm', 1.5) g1.add_missing_IdL_IdR() terms = [[("Sz", i)] for i in range(L)] terms += [[("Sp", i), ("Sm", i + 1)] for i in range(L)] prefactors = [0.5] * L + [1.5] * L term_list = TermList(terms, prefactors) g2 = mpo.MPOGraph.from_term_list(term_list, [spin_half] * L, 'infinite') g2.test_sanity() assert g1.graph == g2.graph terms[3:3] = [[("Sm", 2), ("Sp", 0), ("Sz", 1)]] prefactors[3:3] = [3.] term_list = TermList(terms, prefactors) g3 = mpo.MPOGraph.from_term_list(term_list, [spin_half] * L, 'infinite') g1.add(1, (0, 'Sp', 'Id'), (0, 'Sp', 'Id', 1, 'Sz', 'Id'), 'Sz', 1.) g1.add(2, (0, 'Sp', 'Id', 1, 'Sz', 'Id'), 'IdR', 'Sm', 3.) assert g1.graph == g3.graph