def subspace_variance(coef): Hp_total = deepcopy(Hp[0]) for n in range(1,len(Hp)): Hp_total = H_operations.add(Hp_total,Hp[n],np.array([1,coef[n-1]])) Hm = Hp_total.herm_conj() H = H_operations.add(Hp_total,Hm,np.array([1,1])) H.sector.find_eig() z=zm_state(3,1,pxp) from Calculations import gen_fsa_basis fsa_dim = int(2*pxp.N/3) fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(),z.prod_basis(),fsa_dim) # for n in range(0,np.size(fsa_basis,axis=1)): # for m in range(0,np.size(fsa_basis,axis=1)): # temp = np.abs(np.vdot(fsa_basis[:,n],fsa_basis[:,m])) # if temp > 1e-5: # print(temp,n,m) fsa_basis,temp = np.linalg.qr(fsa_basis) H2 = np.dot(H.sector.matrix(),H.sector.matrix()) H2_fsa = np.dot(np.conj(np.transpose(fsa_basis)),np.dot(H2,fsa_basis)) H_fsa = np.dot(np.conj(np.transpose(fsa_basis)),np.dot(H.sector.matrix(),fsa_basis)) subspace_variance = np.real(np.trace(H2_fsa-np.dot(H_fsa,H_fsa))) return subspace_variance
def spacing_error(coef): Hp_total = deepcopy(Hp[0]) for n in range(1, len(Hp)): Hp_total = H_operations.add(Hp_total, Hp[n], np.array([1, coef[n - 1]])) Hm = Hp_total.herm_conj() Hz = 1 / 2 * com(Hp_total.sector.matrix(k), Hm.sector.matrix(k)) e, u = np.linalg.eigh(Hz) psi = u[:, 0] from Calculations import gen_fsa_basis, gram_schmidt fsa_dim = int(pxp.N) fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(k), psi, fsa_dim) gs = gram_schmidt(fsa_basis) gs.ortho() fsa_basis = gs.ortho_basis exp_vals = np.zeros(np.size(fsa_basis, axis=1)) for n in range(0, np.size(exp_vals, axis=0)): exp_vals[n] = np.real(exp(Hz, fsa_basis[:, n])) exp_diff = np.zeros(np.size(exp_vals) - 1) for n in range(0, np.size(exp_diff, axis=0)): exp_diff[n] = exp_vals[n + 1] - exp_vals[n] M = np.zeros((np.size(exp_diff), np.size(exp_diff))) for n in range(0, np.size(M, axis=0)): for m in range(0, np.size(M, axis=1)): M[n, m] = np.abs(exp_diff[n] - exp_diff[m]) error = np.power(np.trace(np.dot(M, np.conj(np.transpose(M)))), 0.5) return error
def subspace_variance(coef): Hp_total = deepcopy(Hp[0]) for n in range(1, len(Hp)): Hp_total = H_operations.add(Hp_total, Hp[n], np.array([1, coef[n - 1]])) Hm = Hp_total.herm_conj() H = H_operations.add(Hp_total, Hm, np.array([1, 1])) H.sector.find_eig(k) Hz = 1 / 2 * com(Hp_total.sector.matrix(k), Hm.sector.matrix(k)) e, u = np.linalg.eigh(Hz) psi = u[:, 0] from Calculations import gen_fsa_basis, gram_schmidt fsa_dim = int(pxp.N) fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(k), psi, fsa_dim) gs = gram_schmidt(fsa_basis) gs.ortho() fsa_basis = gs.ortho_basis H2 = np.dot(H.sector.matrix(k), H.sector.matrix(k)) H2_fsa = np.dot(np.conj(np.transpose(fsa_basis)), np.dot(H2, fsa_basis)) H_fsa = np.dot(np.conj(np.transpose(fsa_basis)), np.dot(H.sector.matrix(k), fsa_basis)) subspace_variance = np.real(np.trace(H2_fsa - np.dot(H_fsa, H_fsa))) return subspace_variance
def spacing_error(coef): Hp_total = deepcopy(Hp[0]) for n in range(1, len(Hp)): Hp_total = H_operations.add(Hp_total, Hp[n], np.array([1, coef[n - 1]])) Hm = Hp_total.herm_conj() Hz = 1 / 2 * com(Hp_total.sector.matrix(), Hm.sector.matrix()) z = zm_state(2, 1, pxp, 1) from Calculations import gen_fsa_basis fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(), z.prod_basis(), pxp.N) exp_vals = np.zeros(np.size(fsa_basis, axis=1)) for n in range(0, np.size(exp_vals, axis=0)): exp_vals[n] = np.real(exp(Hz, fsa_basis[:, n])) exp_diff = np.zeros(np.size(exp_vals) - 1) for n in range(0, np.size(exp_diff, axis=0)): exp_diff[n] = exp_vals[n + 1] - exp_vals[n] M = np.zeros((np.size(exp_diff), np.size(exp_diff))) for n in range(0, np.size(M, axis=0)): for m in range(0, np.size(M, axis=1)): M[n, m] = np.abs(exp_diff[n] - exp_diff[m]) error = np.power(np.trace(np.dot(M, np.conj(np.transpose(M)))), 0.5) return error
def spacing_error(coef, psi): Hp_total = deepcopy(Hp[0]) for n in range(1, len(Hp)): Hp_total = H_operations.add(Hp_total, Hp[n], np.array([1, coef[n - 1]])) Hm = np.conj(np.transpose(Hp_total.sector.matrix())) Hz = 1 / 2 * com(Hp_total.sector.matrix(), Hm) from Calculations import gen_fsa_basis fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(), psi, pxp.N) Hz_exp = np.zeros(np.size(fsa_basis, axis=1)) for n in range(0, np.size(fsa_basis, axis=1)): Hz_exp[n] = exp(Hz, fsa_basis[:, n]) Hz_diff = np.zeros(np.size(Hz_exp) - 1) for n in range(0, np.size(Hz_diff, axis=0)): Hz_diff[n] = Hz_exp[n + 1] - Hz_exp[n] M = np.zeros((np.size(Hz_diff), np.size(Hz_diff))) for n in range(0, np.size(M, axis=0)): for m in range(0, np.size(M, axis=0)): M[n, m] = np.abs(Hz_diff[n] - Hz_diff[m]) error = np.power(np.trace(np.dot(M, np.conj(np.transpose(M)))), 0.5) print(coef, error) return error
def max_variance(coef): Hp_total = deepcopy(Hp[0]) for n in range(1, len(Hp)): Hp_total = H_operations.add(Hp_total, Hp[n], np.array([1, coef[n - 1]])) Hm = Hp_total.herm_conj() Hz = 1 / 2 * com(Hp_total.sector.matrix(), Hm.sector.matrix()) z = zm_state(2, 1, pxp, 1) from Calculations import gen_fsa_basis fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(), z.prod_basis(), pxp.N) var_vals = np.zeros(np.size(fsa_basis, axis=1)) for n in range(0, np.size(var_vals, axis=0)): var_vals[n] = np.real(var(Hz, fsa_basis[:, n])) error = np.max(var_vals) return error
def var_error(coef, pxp_config, pxxxp_config): Hp = gen_Hp(pxp_config, pxxxp_config, coef) Hm = np.conj(np.transpose(Hp)) H = Hp + Hm Hz = 1 / 2 * com(Hp, Hm) z = zm_state(2, 1, pxp, 1) fsa_basis = gen_fsa_basis(Hp, z.prod_basis(), pxp.N) gs = gram_schmidt(fsa_basis) gs.ortho() fsa_basis = gs.ortho_basis Hz_var = np.zeros(np.size(fsa_basis, axis=1)) for n in range(0, np.size(Hz_var, axis=0)): Hz_var[n] = var(Hz, fsa_basis[:, n]) # error = np.max(Hz_var) error = np.sum(Hz_var) print(coef, error) return error
def subspace_variance(coef): coef = coef[0] Hp_total = deepcopy(Hp[0]) Hp_total = H_operations.add(Hp_total,Hp[1],np.array([1,coef])) Hm = Hp_total.herm_conj() H = H_operations.add(Hp_total,Hm,np.array([1,1])) H.sector.find_eig() z=zm_state(2,2,pxp,1) from Calculations import gen_fsa_basis fsa_dim = 2*pxp.N fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(),z.prod_basis(),fsa_dim) H2 = np.dot(H.sector.matrix(),H.sector.matrix()) H2_fsa = np.dot(np.conj(np.transpose(fsa_basis)),np.dot(H2,fsa_basis)) H_fsa = np.dot(np.conj(np.transpose(fsa_basis)),np.dot(H.sector.matrix(),fsa_basis)) subspace_variance = np.real(np.trace(H2_fsa-np.dot(H_fsa,H_fsa))) return subspace_variance
def max_variance(coef): Hp_total = deepcopy(Hp[0]) for n in range(1,len(Hp)): Hp_total = H_operations.add(Hp_total,Hp[n],np.array([1,coef[n-1]])) Hm = Hp_total.herm_conj() Hz = 1/2 * com(Hp_total.sector.matrix(),Hm.sector.matrix()) e,u = np.linalg.eigh(Hz) psi = u[:,0] from Calculations import gen_fsa_basis,gram_schmidt fsa_dim = int(pxp.N) fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(),psi,fsa_dim) gs = gram_schmidt(fsa_basis) gs.ortho() fsa_basis = gs.ortho_basis var_vals = np.zeros(np.size(fsa_basis,axis=1)) for n in range(0,np.size(var_vals,axis=0)): var_vals[n] = np.real(var(Hz,fsa_basis[:,n])) error = np.max(var_vals) return error
def spacing_error(coef, pxp_config, pxxxp_config): Hp = gen_Hp(pxp_config, pxp_config, coef) Hm = np.conj(np.transpose(Hp)) Hz = 1 / 2 * com(Hp, Hm) #find lowest weight state e, u = np.linalg.eigh(Hz) lowest_weight = u[:, 0] z = zm_state(2, 1, pxp, 1) fsa_basis = gen_fsa_basis(Hp, z.prod_basis(), pxp.N) gs = gram_schmidt(fsa_basis) gs.ortho() fsa_basis = gs.ortho_basis if np.size(np.shape(fsa_basis)) == 2: Hz_exp = np.zeros(np.size(fsa_basis, axis=1)) for n in range(0, np.size(Hz_exp, axis=0)): Hz_exp[n] = exp(Hz, fsa_basis[:, n]) Hz_diff = np.zeros(np.size(Hz_exp) - 1) for n in range(0, np.size(Hz_diff, axis=0)): Hz_diff[n] = np.abs(Hz_exp[n + 1] - Hz_exp[n]) #spacing error error_matrix = np.zeros((np.size(Hz_diff), np.size(Hz_diff))) for n in range(0, np.size(error_matrix, axis=0)): for m in range(0, np.size(error_matrix, axis=0)): error_matrix[n, m] = np.abs(Hz_diff[n] - Hz_diff[m]) error = np.power( np.trace(np.dot(error_matrix, np.conj(np.transpose(error_matrix)))), 0.5) print(coef, error) return error else: return 1000
coef = np.load("./pxxxp,1stOrder,coef,12.npy") # coef = np.zeros(len(Hp)-1) Hp_total = deepcopy(Hp[0]) for n in range(1,len(Hp)): Hp_total = H_operations.add(Hp_total,Hp[n],np.array([1,coef[n-1]])) Hm = Hp_total.herm_conj() H = H_operations.add(Hp_total,Hm,np.array([1,1])) H.sector.find_eig(k[0]) eig_overlap(z,H,k[0]).plot(tol=-15) plt.show() fidelity(z,H,"use sym").plot(np.arange(0,20,0.01),z) plt.show() from Calculations import gen_fsa_basis fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(k[0]),z.sym_basis(k[0],pxp_syms),int(2*pxp.N/4)) H_fsa = np.dot(np.conj(np.transpose(fsa_basis)),np.dot(H.sector.matrix(k[0]),fsa_basis)) e,u = np.linalg.eigh(H_fsa) overlap_fsa = np.log10(np.abs(u[0,:])**2) exact_overlap = eig_overlap(z,H,k[0]).eval() plt.scatter(H.sector.eigvalues(k[0]),exact_overlap) plt.scatter(e,overlap_fsa,marker="x",color="red",s=100) plt.show() t=np.arange(0,20,0.01) f = fidelity(z,H,"use sym").eval(t,z) plt.plot(t,f) plt.show() u_comp = np.dot(fsa_basis,u) fsa_exact_overlap = np.zeros(np.size(u_comp,axis=1))
Hp = np.zeros((pxp.dim, pxp.dim)) for n in range(0, np.size(pxp.basis, axis=0)): bits = np.copy(pxp.basis[n]) for m in range(0, pxp.N): if bits[m] == 2: new_bits = np.copy(bits) new_bits[m] = 0 new_ref = bin_to_int_base_m(new_bits, pxp.base) Hp[pxp.keys[new_ref], n] += 2 * (-1)**m Hm = np.conj(np.transpose(Hp)) Hx = 1 / 2 * (Hp + Hm) #scarred eigenstates psi = ref_state(0, pxp).prod_basis() from Calculations import gen_fsa_basis fsa_basis = gen_fsa_basis(Hm, psi, pxp.N) H0 = Hamiltonian(pxp) H0.site_ops[1] = x H0.site_ops[2] = y H0.site_ops[3] = z H0.site_ops[4] = z2 H0.model = np.array([[1, 1], [2, 2]]) H0.model_coef = np.array([J, J]) H0.gen() H1 = Hamiltonian(pxp) H1.site_ops[1] = x H1.site_ops[2] = y H1.site_ops[3] = z H1.site_ops[4] = z2
Hp_test.gen() from Hamiltonian_Classes import H_operations Hp_test = H_operations.add(Hp_test0, Hp_test, np.array([1, coef_f0])) print((np.abs(Hp_test.sector.matrix() - Hp) < 1e-5).all()) Hz = 1 / 2 * com(Hp, Hm) e, u = np.linalg.eigh(Hz) z = zm_state(2, 1, pxp, 1) lw = u[:, 0] print("\n|<lw | Z_2 > |") print(np.abs(np.vdot(lw, z.prod_basis()))) print("\n") from Calculations import gen_fsa_basis, gram_schmidt fsa_basis = gen_fsa_basis(Hp, z.prod_basis(), pxp.N) gs = gram_schmidt(fsa_basis) gs.ortho() fsa_basis = gs.ortho_basis Hz_exp = np.zeros(np.size(fsa_basis, axis=1)) Hz_var = np.zeros(np.size(fsa_basis, axis=1)) print("Exp/Var") for n in range(0, np.size(Hz_exp, axis=0)): Hz_exp[n] = exp(Hz, fsa_basis[:, n]) Hz_var[n] = var(Hz, fsa_basis[:, n]) print(Hz_exp[n], Hz_var[n]) print("\n Spacing") Hz_diff = np.zeros(np.size(Hz_exp) - 1) for n in range(0, np.size(Hz_diff, axis=0)):
H.model_coef = np.array([1]) H.gen() Hp = Hamiltonian(pxp, pxp_syms) Hp.site_ops[1] = np.array([[0, 0], [1, 0]]) Hp.site_ops[2] = np.array([[0, 1], [0, 0]]) Hp.model = np.array([[0, 1, 2, 1, 0], [0, 2, 1, 2, 0], [0, 2, 1, 2, 0], [0, 1, 2, 1, 0]]) Hp.model_coef = np.array([1, 1, 1, 1]) Hp.uc_size = np.array([4, 4, 4, 4]) Hp.uc_pos = np.array([2, 3, 0, 1]) Hp.gen() from Calculations import gen_fsa_basis z = zm_state(4, 1, pxp) fsa_basis = gen_fsa_basis(Hp.sector.matrix(), z.prod_basis(), int(2 * pxp.N / 4)) print(np.shape(fsa_basis)) H_fsa = np.dot(np.conj(np.transpose(fsa_basis)), np.dot(H.sector.matrix(), fsa_basis)) e, u = np.linalg.eigh(H_fsa) fsa_energy = e fsa_overlap = np.log10(np.abs(u[0, :])**2) plt.scatter(fsa_energy, fsa_overlap, marker="x", color="red", s=100) H.sector.find_eig() eig_overlap(z, H).plot(tol=-10) plt.show() H.sector.find_eig() ent = entropy(pxp) ent_vals = np.zeros(pxp.dim) for n in range(0, np.size(pxp.basis, axis=0)):
# exact_energy = [] # exact_overlap = [] # for n in range(0,np.size(k,axis=0)): # H.sector.find_eig(k[n]) # exact_energy = np.append(exact_energy,H.sector.eigvalues(k[n])) # exact_overlap = np.append(exact_overlap,eig_overlap(z,H,k[n]).eval()) # t=np.arange(0,20,0.01) # f = fidelity(z,H,"use sym").eval(t,z) # plt.scatter(exact_energy,exact_overlap) # plt.show() # plt.plot(t,f) # plt.show() fsa_dim = 2*pxp.N from Calculations import gen_fsa_basis fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(),z.prod_basis(),fsa_dim) H_fsa = np.dot(np.conj(np.transpose(fsa_basis)),np.dot(H.sector.matrix(),fsa_basis)) # # H.sector.find_eig() # # exact_overlap = eig_overlap(z,H).eval() # # exact_energy = H.sector.eigvalues() e,u = np.linalg.eigh(H_fsa) fsa_overlap = np.log10(np.abs(u[0,:])**2) fsa_energy = e # plt.scatter(exact_energy,exact_overlap) # plt.scatter(fsa_energy,fsa_overlap,marker="x",color="red",s=100) # plt.show() # t=np.arange(0,20,0.01)
pbar = ProgressBar() for n in pbar(range(0, np.size(ent_vals, axis=0))): ent_vals[n] = ent.eval(eigvectors[:, n]) Hp = Hamiltonian(pxp, pxp_syms) Hp.site_ops[1] = np.array([[0, 0], [1, 0]]) Hp.site_ops[2] = np.array([[0, 1], [0, 0]]) Hp.model = np.array([[0, 1, 2, 1, 0], [0, 2, 1, 2, 0], [0, 2, 1, 2, 0], [0, 1, 2, 1, 0]]) Hp.model_coef = np.array([1, 1, 1, 1]) Hp.uc_size = np.array([4, 4, 4, 4]) Hp.uc_pos = np.array([2, 3, 0, 1]) Hp.gen() H.gen() from Calculations import gen_fsa_basis fsa_basis = gen_fsa_basis(Hp.sector.matrix(), z.prod_basis(), pxp.N) H_fsa = np.dot(np.conj(np.transpose(fsa_basis)), np.dot(H.sector.matrix(), fsa_basis)) efsa, ufsa = np.linalg.eigh(H_fsa) u_comp = np.dot(fsa_basis, ufsa) ent_fsa = np.zeros(np.size(u_comp, axis=1)) for n in range(0, np.size(ent_fsa, axis=0)): ent_fsa[n] = ent.eval(u_comp[:, n]) plt.scatter(eigvalues, ent_vals) plt.scatter(efsa, ent_fsa, marker="x", color="red", s=100) plt.xlabel(r"$E$") plt.ylabel(r"$S$") plt.title(r"$PXXXP$ $\vert Z_4 \rangle$ Sector, Bipartite Entropy, N=" + str(pxp.N)) plt.show()
# # np.save("couplings2ising,pert_coef,"+str(pxp.N),coef) # np.save("NEWising,pert_coef,"+str(pxp.N),coef) # # coef = 0 Hp_total = deepcopy(Hp[0]) for n in range(1, len(Hp)): Hp_total = H_operations.add(Hp_total, Hp[n], np.array([1, coef[n - 1]])) Hm = Hp_total.herm_conj() Hz = 1 / 2 * com(Hp_total.sector.matrix(), Hm.sector.matrix()) e, u = np.linalg.eigh(Hz) psi = u[:, 0] # np.save("xy,pert,lw_state,"+str(pxp.N),psi) from Calculations import gen_fsa_basis, gram_schmidt fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(), psi, pxp.N) gs = gram_schmidt(fsa_basis) gs.ortho() fsa_basis = gs.ortho_basis Hz_exp = np.zeros(np.size(fsa_basis, axis=1)) Hz_var = np.zeros(np.size(fsa_basis, axis=1)) print("\nExp/Var") for n in range(0, np.size(fsa_basis, axis=1)): Hz_exp[n] = exp(Hz, fsa_basis[:, n]) Hz_var[n] = var(Hz, fsa_basis[:, n]) print(Hz_exp[n], Hz_var[n]) print("\nHz Spacing") Hz_diff = np.zeros(np.size(Hz_exp) - 1) for n in range(0, np.size(Hz_diff, axis=0)):
plt.scatter(exact_energy, exact_overlap) plt.show() t = np.arange(0, 20, 0.01) f = np.zeros(np.size(t)) for n in range(0, np.size(t, axis=0)): evolved_state = time_evolve_state(psi_energy, H.sector.eigvalues(k), t[n]) f[n] = np.abs(np.vdot(evolved_state, psi_energy)**2) plt.plot(t, f) plt.xlabel(r"$t$") plt.ylabel(r"$\vert \langle \psi(0) \vert \psi(t) \rangle \vert^2$") plt.title(r"Ising, SU(2) Perts (No repeated terms), N=" + str(pxp.N)) plt.show() fsa_dim = int(pxp.N) from Calculations import gen_fsa_basis, gram_schmidt fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(k), psi, fsa_dim) gs = gram_schmidt(fsa_basis) gs.ortho() fsa_basis = gs.ortho_basis H_fsa = np.dot(np.conj(np.transpose(fsa_basis)), np.dot(H.sector.matrix(k), fsa_basis)) e, u = np.linalg.eigh(H_fsa) fsa_overlap = np.log10(np.abs(u[0, :])**2) fsa_energy = e plt.scatter(exact_energy, exact_overlap) plt.scatter(fsa_energy, fsa_overlap, marker="x", color="red", s=100) plt.xlabel(r"$E$") plt.ylabel(r"$\log(\vert \langle \psi \vert E \rangle \vert^2)$") plt.title(r"Ising, SU(2) Perts (No repeated terms), N=" + str(pxp.N))
z = zm_state(2, 1, pxp, 1) e, u = np.linalg.eigh(H) overlap = np.log10(np.abs(u[pxp.keys[z.ref], :])**2) psi_energy = np.conj(u[pxp.keys[z.ref], :]) t = np.arange(0, 20, 0.01) f = np.zeros(np.size(t)) for n in range(0, np.size(t, axis=0)): evolved_state = time_evolve_state(psi_energy, e, t[n]) f[n] = np.abs(np.vdot(evolved_state, psi_energy))**2 plt.plot(t, f) plt.show() from Calculations import gen_fsa_basis # fsa_basis = gen_fsa_basis(Hp,z.prod_basis(),int(2*pxp.N/3)) fsa_basis = gen_fsa_basis(Hp, z.prod_basis(), int(pxp.N)) H_fsa = np.dot(np.conj(np.transpose(fsa_basis)), np.dot(H, fsa_basis)) to_del = [] for n in range(0, np.size(overlap, axis=0)): if overlap[n] < -10: to_del = np.append(to_del, n) for n in range(np.size(to_del, axis=0) - 1, -1, -1): overlap = np.delete(overlap, to_del[n]) e = np.delete(e, to_del[n]) e_fsa, u_fsa = np.linalg.eigh(H_fsa) overlap_fsa = np.log10(np.abs(u_fsa[0, :])**2) plt.scatter(e, overlap) plt.scatter(e_fsa, overlap_fsa, marker="x", color="red", s=100, label="FSA")
for m in range(0,np.size(k,axis=0)): Hp[n].gen(k[m]) # coef = np.zeros(9) coef = np.load("../../../../pxp,2nd_order_perts/z2/data/all_terms/18/18_all_terms/pxp,z2,2nd_order_perts,fid_coef,18.npy") # coef[0] = 0.108 Hp_total = deepcopy(Hp[0]) for n in range(1,len(Hp)): Hp_total = H_operations.add(Hp_total,Hp[n],np.array([1,coef[n-1]])) Hm = Hp_total.herm_conj() H = H_operations.add(Hp_total,Hm,np.array([1,1])) z=zm_state(2,1,pxp,1) fsa_dim = pxp.N from Calculations import gen_fsa_basis fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(k[0]),z.sym_basis(k[0],pxp_syms),fsa_dim) H_fsa = np.dot(np.conj(np.transpose(fsa_basis)),np.dot(H.sector.matrix(k[0]),fsa_basis)) H.sector.find_eig(k[0]) exact_overlap = eig_overlap(z,H,k[0]).eval() exact_energy = H.sector.eigvalues(k[0]) e,u = np.linalg.eigh(H_fsa) fsa_overlap = np.log10(np.abs(u[0,:])**2) fsa_energy = e plt.scatter(exact_energy,exact_overlap) plt.scatter(fsa_energy,fsa_overlap,marker="x",color="red",s=100) plt.show() t=np.arange(0,20,0.01)