def test_multi_sites_combine_charges(): spin = site.SpinSite(0.5, 'Sz') spin1 = site.SpinSite(1, 'Sz') ferm = site.SpinHalfFermionSite(cons_N='N', cons_Sz='Sz') spin_ops = { op_name: get_site_op_flat(spin, op_name) for op_name in spin.opnames } spin1_ops = { op_name: get_site_op_flat(spin1, op_name) for op_name in spin1.opnames } ferm_ops = { op_name: get_site_op_flat(ferm, op_name) for op_name in ferm.opnames } site.multi_sites_combine_charges([spin, ferm]) assert tuple(spin.leg.chinfo.names) == ('2*Sz', 'N', 'Sz') spin.test_sanity() ferm.test_sanity() for op_name, op_flat in spin_ops.items(): op_flat2 = get_site_op_flat(spin, op_name) npt.assert_equal(op_flat, op_flat2) for op_name, op_flat in ferm_ops.items(): op_flat2 = get_site_op_flat(ferm, op_name) npt.assert_equal(op_flat, op_flat2) spin = site.SpinSite(0.5, 'Sz') ferm = site.SpinHalfFermionSite(cons_N='N', cons_Sz='Sz') site.multi_sites_combine_charges([ferm, spin], same_charges=[[(0, 'Sz'), (1, '2*Sz')]]) assert tuple(ferm.leg.chinfo.names) == ('N', 'Sz') spin.test_sanity() ferm.test_sanity() for op_name, op_flat in spin_ops.items(): op_flat2 = get_site_op_flat(spin, op_name) npt.assert_equal(op_flat, op_flat2) for op_name, op_flat in ferm_ops.items(): op_flat2 = get_site_op_flat(ferm, op_name) npt.assert_equal(op_flat, op_flat2) # and finally a few more, changing orders as well ferm = site.SpinHalfFermionSite(cons_N='N', cons_Sz='Sz') spin = site.SpinSite(0.5, 'Sz') spin1 = site.SpinSite(1, 'Sz') site.multi_sites_combine_charges([ferm, spin1, spin], same_charges=[[(0, 'Sz'), (2, '2*Sz')]]) assert tuple(ferm.leg.chinfo.names) == ('N', 'Sz', '2*Sz') spin.test_sanity() ferm.test_sanity() spin1.test_sanity() for op_name, op_flat in spin_ops.items(): op_flat2 = get_site_op_flat(spin, op_name) npt.assert_equal(op_flat, op_flat2) for op_name, op_flat in ferm_ops.items(): op_flat2 = get_site_op_flat(ferm, op_name) npt.assert_equal(op_flat, op_flat2) for op_name, op_flat in spin1_ops.items(): op_flat2 = get_site_op_flat(spin1, op_name) npt.assert_equal(op_flat, op_flat2)
def test_spin_site_ops(): for s in [0.5, 1, 1.5, 2, 5]: sites = [] for conserve in [None, 'Sz', 'parity']: S = site.SpinSite(s, conserve) sites.append(S) check_same_operators(sites)
def test_IrregularLattice(): s1 = site.SpinHalfSite('Sz') s2 = site.SpinSite(0.5, 'Sz') reg = lattice.Honeycomb(3, 3, [s1, s2], bc=['open', 'periodic']) ir = lattice.IrregularLattice(reg, [[1, 1, 0], [1, 1, 1], [0, 0, 0]], ([[1, 1, 2], [1, 1, 3]], [7, 10]), [s2, s2], [[-0.1, 0.0], [0.1, 0.0]]) known = { # written down by hand for this particular case (0, 1, (0, 0)): {'i': [5, 11, 0, 12, 1, 7, 13], 'j': [8, 14, 3, 15, 4, 10, 16]}, (1, 0, (1, 0)): {'i': [ 2, 8, 4, 10], 'j': [5, 11, 7, 13]}, (1, 0, (0, 1)): {'i': [ 2, 14, 3, 15, 10, 16], 'j': [0, 12, 1, 13, 5, 11]}, } for (u0, u1, dx), expect in known.items(): i, j, lat, sh = ir.possible_couplings(u0, u1, dx) print(i, j) sort = np.lexsort(lat.T) i = i[sort] j = j[sort] npt.assert_equal(i, np.array(expect['i'])) npt.assert_equal(j, np.array(expect['j'])) ops = [(None, dx, u1), (None, [0, 0], u0)] m_ji, m_lat_indices, m_coupling_shape = ir.possible_multi_couplings(ops) sort = np.lexsort(m_lat_indices.T) npt.assert_equal(m_ji[sort, 1], np.array(expect['i'])) npt.assert_equal(m_ji[sort, 0], np.array(expect['j']))
def test_spin_site(): for s in [0.5, 1, 1.5, 2, 5]: print('s = ', s) for conserve in [None, 'Sz', 'parity']: print("conserve = ", conserve) S = site.SpinSite(s, conserve) S.test_sanity() if conserve != 'Sz': SxSy = ['Sx', 'Sy'] else: SxSy = None check_spin_site(S, SxSy=SxSy)
def test_spin_site(): hcs = dict(Id='Id', JW='JW', Sx='Sx', Sy='Sy', Sz='Sz', Sp='Sm', Sm='Sp') for s in [0.5, 1, 1.5, 2, 5]: print('s = ', s) sites = [] for conserve in [None, 'Sz', 'parity']: print("conserve = ", conserve) S = site.SpinSite(s, conserve) S.test_sanity() for op in S.onsite_ops: assert S.hc_ops[op] == hcs[op] if conserve != 'Sz': SxSy = ['Sx', 'Sy'] else: SxSy = None check_spin_site(S, SxSy=SxSy) sites.append(S) check_same_operators(sites)
def test_TrivialLattice(): s1 = site.SpinHalfSite('Sz') s2 = site.SpinSite(0.5, 'Sz') s3 = site.SpinSite(1.0, 'Sz') lat = lattice.TrivialLattice([s1, s2, s3, s2, s1]) lat.test_sanity()
def test_set_common_charges(): spin = site.SpinSite(0.5, 'Sz') spin1 = site.SpinSite(1, 'Sz') ferm = site.SpinHalfFermionSite(cons_N='N', cons_Sz='Sz') boson = site.BosonSite(2, 'N') spin_ops = { op_name: get_site_op_flat(spin, op_name) for op_name in spin.opnames } spin1_ops = { op_name: get_site_op_flat(spin1, op_name) for op_name in spin1.opnames } ferm_ops = { op_name: get_site_op_flat(ferm, op_name) for op_name in ferm.opnames } boson_ops = { op_name: get_site_op_flat(boson, op_name) for op_name in boson.opnames } site.set_common_charges([spin, ferm]) assert tuple(spin.leg.chinfo.names) == ('2*Sz', 'N') spin.test_sanity() ferm.test_sanity() for op_name, op_flat in spin_ops.items(): op_flat2 = get_site_op_flat(spin, op_name) npt.assert_equal(op_flat, op_flat2) for op_name, op_flat in ferm_ops.items(): op_flat2 = get_site_op_flat(ferm, op_name) npt.assert_equal(op_flat, op_flat2) spin = site.SpinSite(0.5, 'Sz') ferm = site.SpinHalfFermionSite(cons_N='N', cons_Sz='Sz') site.set_common_charges([ferm, spin], new_charges=[[(1, 0, '2*Sz'), (1, 1, '2*Sz')]]) assert tuple(ferm.leg.chinfo.names) == ('2*Sz', ) spin.test_sanity() ferm.test_sanity() for op_name, op_flat in spin_ops.items(): op_flat2 = get_site_op_flat(spin, op_name) npt.assert_equal(op_flat, op_flat2) for op_name, op_flat in ferm_ops.items(): op_flat2 = get_site_op_flat(ferm, op_name) npt.assert_equal(op_flat, op_flat2) # and finally a few more, changing orders as well ferm = site.SpinHalfFermionSite(cons_N='N', cons_Sz='Sz') spin = site.SpinSite(0.5, 'Sz') spin1 = site.SpinSite(1, 'Sz') boson = site.BosonSite(2, 'N') site.set_common_charges( [ferm, spin1, spin, boson], new_charges=[[(1, 0, '2*Sz'), (1, 2, '2*Sz')], [(2, 0, 'N'), (1, 3, 'N')], [(0.5, 1, '2*Sz')]], new_names=['2*(Sz_f + Sz_spin-half)', '2*N_f+N_b', 'Sz_spin-1']) assert tuple(ferm.leg.chinfo.names) == ('2*(Sz_f + Sz_spin-half)', '2*N_f+N_b', 'Sz_spin-1') spin.test_sanity() ferm.test_sanity() spin1.test_sanity() boson.test_sanity() for op_name, op_flat in spin_ops.items(): op_flat2 = get_site_op_flat(spin, op_name) npt.assert_equal(op_flat, op_flat2) for op_name, op_flat in ferm_ops.items(): op_flat2 = get_site_op_flat(ferm, op_name) npt.assert_equal(op_flat, op_flat2) for op_name, op_flat in spin1_ops.items(): op_flat2 = get_site_op_flat(spin1, op_name) npt.assert_equal(op_flat, op_flat2) for op_name, op_flat in boson_ops.items(): op_flat2 = get_site_op_flat(boson, op_name) npt.assert_equal(op_flat, op_flat2)