def test_boson_site(): for Nmax in [1, 2, 5, 10]: for conserve in ['N', 'parity', None]: S = site.BosonSite(Nmax, conserve=conserve) S.test_sanity() npt.assert_array_almost_equal_nulp(np.dot(S.Bd.to_ndarray(), S.B.to_ndarray()), S.N.to_ndarray(), 2)
def test_boson_site(): hcs = dict(Id='Id', JW='JW', B='Bd', Bd='B', N='N', NN='NN', dN='dN', dNdN='dNdN', P='P') for Nmax in [1, 2, 5, 10]: sites = [] for conserve in ['N', 'parity', None]: S = site.BosonSite(Nmax, conserve=conserve) S.test_sanity() for op in S.onsite_ops: assert S.hc_ops[op] == hcs[op] npt.assert_array_almost_equal_nulp( np.dot(S.Bd.to_ndarray(), S.B.to_ndarray()), S.N.to_ndarray(), 2) sites.append(S) check_same_operators(sites)
def test_boson_site_ops(): for Nmax in [1, 2, 5, 10]: sites = [] for conserve in ['N', 'parity', None]: S = site.BosonSite(Nmax, conserve=conserve) check_same_operators(sites)
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)