From 38103d52e912934ed5b032d0d7a135181b53ea6a Mon Sep 17 00:00:00 2001 From: guanjihuan Date: Sun, 26 Nov 2023 14:28:00 +0800 Subject: [PATCH] 0.1.44 --- PyPI/setup.cfg | 2 +- PyPI/src/guan.egg-info/PKG-INFO | 2 +- PyPI/src/guan.egg-info/SOURCES.txt | 6 +- PyPI/src/guan/Hamiltonian_of_examples.py | 574 +++++++++ .../Hamiltonian_of_finite_size_systems.py | 260 ---- ...miltonian_of_models_in_reciprocal_space.py | 315 ----- PyPI/src/guan/__init__.py | 6 +- .../band_structures_and_wave_functions.py | 37 +- PyPI/src/guan/data_processing.py | 1054 ++++++++++------ PyPI/src/guan/file_processing.py | 727 ----------- PyPI/src/guan/others.py | 1058 ++++++++++++++++- PyPI/src/guan/plot_figures.py | 413 ------- PyPI/src/guan/quantum_transport.py | 2 +- PyPI/src/guan/read_and_write.py | 263 ---- README.md | 9 +- 15 files changed, 2358 insertions(+), 2370 deletions(-) create mode 100644 PyPI/src/guan/Hamiltonian_of_examples.py delete mode 100644 PyPI/src/guan/Hamiltonian_of_finite_size_systems.py delete mode 100644 PyPI/src/guan/Hamiltonian_of_models_in_reciprocal_space.py delete mode 100644 PyPI/src/guan/file_processing.py delete mode 100644 PyPI/src/guan/plot_figures.py delete mode 100644 PyPI/src/guan/read_and_write.py diff --git a/PyPI/setup.cfg b/PyPI/setup.cfg index dadcc2e..e324de0 100644 --- a/PyPI/setup.cfg +++ b/PyPI/setup.cfg @@ -1,7 +1,7 @@ [metadata] # replace with your username: name = guan -version = 0.1.43 +version = 0.1.44 author = guanjihuan author_email = guanjihuan@163.com description = An open source python package diff --git a/PyPI/src/guan.egg-info/PKG-INFO b/PyPI/src/guan.egg-info/PKG-INFO index d183204..21f7ca1 100644 --- a/PyPI/src/guan.egg-info/PKG-INFO +++ b/PyPI/src/guan.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: guan -Version: 0.1.43 +Version: 0.1.44 Summary: An open source python package Home-page: https://py.guanjihuan.com Author: guanjihuan diff --git a/PyPI/src/guan.egg-info/SOURCES.txt b/PyPI/src/guan.egg-info/SOURCES.txt index f61e2af..7c3d4ec 100644 --- a/PyPI/src/guan.egg-info/SOURCES.txt +++ b/PyPI/src/guan.egg-info/SOURCES.txt @@ -4,18 +4,14 @@ pyproject.toml setup.cfg src/guan/Fourier_transform.py src/guan/Green_functions.py -src/guan/Hamiltonian_of_finite_size_systems.py -src/guan/Hamiltonian_of_models_in_reciprocal_space.py +src/guan/Hamiltonian_of_examples.py src/guan/__init__.py src/guan/band_structures_and_wave_functions.py src/guan/basic_functions.py src/guan/data_processing.py src/guan/density_of_states.py -src/guan/file_processing.py src/guan/others.py -src/guan/plot_figures.py src/guan/quantum_transport.py -src/guan/read_and_write.py src/guan/topological_invariant.py src/guan.egg-info/PKG-INFO src/guan.egg-info/SOURCES.txt diff --git a/PyPI/src/guan/Hamiltonian_of_examples.py b/PyPI/src/guan/Hamiltonian_of_examples.py new file mode 100644 index 0000000..e8056b6 --- /dev/null +++ b/PyPI/src/guan/Hamiltonian_of_examples.py @@ -0,0 +1,574 @@ +# Module: Hamiltonian_of_examples + +# 构建一维的有限尺寸体系哈密顿量(可设置是否为周期边界条件) +def hamiltonian_of_finite_size_system_along_one_direction(N, on_site=0, hopping=1, period=0): + import numpy as np + on_site = np.array(on_site) + hopping = np.array(hopping) + if on_site.shape==(): + dim = 1 + else: + dim = on_site.shape[0] + hamiltonian = np.zeros((N*dim, N*dim), dtype=complex) + for i0 in range(N): + hamiltonian[i0*dim+0:i0*dim+dim, i0*dim+0:i0*dim+dim] = on_site + for i0 in range(N-1): + hamiltonian[i0*dim+0:i0*dim+dim, (i0+1)*dim+0:(i0+1)*dim+dim] = hopping + hamiltonian[(i0+1)*dim+0:(i0+1)*dim+dim, i0*dim+0:i0*dim+dim] = hopping.transpose().conj() + if period == 1: + hamiltonian[(N-1)*dim+0:(N-1)*dim+dim, 0:dim] = hopping + hamiltonian[0:dim, (N-1)*dim+0:(N-1)*dim+dim] = hopping.transpose().conj() + import guan + guan.statistics_of_guan_package() + return hamiltonian + +# 构建二维的方格子有限尺寸体系哈密顿量(可设置是否为周期边界条件) +def hamiltonian_of_finite_size_system_along_two_directions_for_square_lattice(N1, N2, on_site=0, hopping_1=1, hopping_2=1, period_1=0, period_2=0): + import numpy as np + on_site = np.array(on_site) + hopping_1 = np.array(hopping_1) + hopping_2 = np.array(hopping_2) + if on_site.shape==(): + dim = 1 + else: + dim = on_site.shape[0] + hamiltonian = np.zeros((N1*N2*dim, N1*N2*dim), dtype=complex) + for i1 in range(N1): + for i2 in range(N2): + hamiltonian[i1*N2*dim+i2*dim+0:i1*N2*dim+i2*dim+dim, i1*N2*dim+i2*dim+0:i1*N2*dim+i2*dim+dim] = on_site + for i1 in range(N1-1): + for i2 in range(N2): + hamiltonian[i1*N2*dim+i2*dim+0:i1*N2*dim+i2*dim+dim, (i1+1)*N2*dim+i2*dim+0:(i1+1)*N2*dim+i2*dim+dim] = hopping_1 + hamiltonian[(i1+1)*N2*dim+i2*dim+0:(i1+1)*N2*dim+i2*dim+dim, i1*N2*dim+i2*dim+0:i1*N2*dim+i2*dim+dim] = hopping_1.transpose().conj() + for i1 in range(N1): + for i2 in range(N2-1): + hamiltonian[i1*N2*dim+i2*dim+0:i1*N2*dim+i2*dim+dim, i1*N2*dim+(i2+1)*dim+0:i1*N2*dim+(i2+1)*dim+dim] = hopping_2 + hamiltonian[i1*N2*dim+(i2+1)*dim+0:i1*N2*dim+(i2+1)*dim+dim, i1*N2*dim+i2*dim+0:i1*N2*dim+i2*dim+dim] = hopping_2.transpose().conj() + if period_1 == 1: + for i2 in range(N2): + hamiltonian[(N1-1)*N2*dim+i2*dim+0:(N1-1)*N2*dim+i2*dim+dim, i2*dim+0:i2*dim+dim] = hopping_1 + hamiltonian[i2*dim+0:i2*dim+dim, (N1-1)*N2*dim+i2*dim+0:(N1-1)*N2*dim+i2*dim+dim] = hopping_1.transpose().conj() + if period_2 == 1: + for i1 in range(N1): + hamiltonian[i1*N2*dim+(N2-1)*dim+0:i1*N2*dim+(N2-1)*dim+dim, i1*N2*dim+0:i1*N2*dim+dim] = hopping_2 + hamiltonian[i1*N2*dim+0:i1*N2*dim+dim, i1*N2*dim+(N2-1)*dim+0:i1*N2*dim+(N2-1)*dim+dim] = hopping_2.transpose().conj() + import guan + guan.statistics_of_guan_package() + return hamiltonian + +# 构建三维的立方格子有限尺寸体系哈密顿量(可设置是否为周期边界条件) +def hamiltonian_of_finite_size_system_along_three_directions_for_cubic_lattice(N1, N2, N3, on_site=0, hopping_1=1, hopping_2=1, hopping_3=1, period_1=0, period_2=0, period_3=0): + import numpy as np + on_site = np.array(on_site) + hopping_1 = np.array(hopping_1) + hopping_2 = np.array(hopping_2) + hopping_3 = np.array(hopping_3) + if on_site.shape==(): + dim = 1 + else: + dim = on_site.shape[0] + hamiltonian = np.zeros((N1*N2*N3*dim, N1*N2*N3*dim), dtype=complex) + for i1 in range(N1): + for i2 in range(N2): + for i3 in range(N3): + hamiltonian[i1*N2*N3*dim+i2*N3*dim+i3*dim+0:i1*N2*N3*dim+i2*N3*dim+i3*dim+dim, i1*N2*N3*dim+i2*N3*dim+i3*dim+0:i1*N2*N3*dim+i2*N3*dim+i3*dim+dim] = on_site + for i1 in range(N1-1): + for i2 in range(N2): + for i3 in range(N3): + hamiltonian[i1*N2*N3*dim+i2*N3*dim+i3*dim+0:i1*N2*N3*dim+i2*N3*dim+i3*dim+dim, (i1+1)*N2*N3*dim+i2*N3*dim+i3*dim+0:(i1+1)*N2*N3*dim+i2*N3*dim+i3*dim+dim] = hopping_1 + hamiltonian[(i1+1)*N2*N3*dim+i2*N3*dim+i3*dim+0:(i1+1)*N2*N3*dim+i2*N3*dim+i3*dim+dim, i1*N2*N3*dim+i2*N3*dim+i3*dim+0:i1*N2*N3*dim+i2*N3*dim+i3*dim+dim] = hopping_1.transpose().conj() + for i1 in range(N1): + for i2 in range(N2-1): + for i3 in range(N3): + hamiltonian[i1*N2*N3*dim+i2*N3*dim+i3*dim+0:i1*N2*N3*dim+i2*N3*dim+i3*dim+dim, i1*N2*N3*dim+(i2+1)*N3*dim+i3*dim+0:i1*N2*N3*dim+(i2+1)*N3*dim+i3*dim+dim] = hopping_2 + hamiltonian[i1*N2*N3*dim+(i2+1)*N3*dim+i3*dim+0:i1*N2*N3*dim+(i2+1)*N3*dim+i3*dim+dim, i1*N2*N3*dim+i2*N3*dim+i3*dim+0:i1*N2*N3*dim+i2*N3*dim+i3*dim+dim] = hopping_2.transpose().conj() + for i1 in range(N1): + for i2 in range(N2): + for i3 in range(N3-1): + hamiltonian[i1*N2*N3*dim+i2*N3*dim+i3*dim+0:i1*N2*N3*dim+i2*N3*dim+i3*dim+dim, i1*N2*N3*dim+i2*N3*dim+(i3+1)*dim+0:i1*N2*N3*dim+i2*N3*dim+(i3+1)*dim+dim] = hopping_3 + hamiltonian[i1*N2*N3*dim+i2*N3*dim+(i3+1)*dim+0:i1*N2*N3*dim+i2*N3*dim+(i3+1)*dim+dim, i1*N2*N3*dim+i2*N3*dim+i3*dim+0:i1*N2*N3*dim+i2*N3*dim+i3*dim+dim] = hopping_3.transpose().conj() + if period_1 == 1: + for i2 in range(N2): + for i3 in range(N3): + hamiltonian[(N1-1)*N2*N3*dim+i2*N3*dim+i3*dim+0:(N1-1)*N2*N3*dim+i2*N3*dim+i3*dim+dim, i2*N3*dim+i3*dim+0:i2*N3*dim+i3*dim+dim] = hopping_1 + hamiltonian[i2*N3*dim+i3*dim+0:i2*N3*dim+i3*dim+dim, (N1-1)*N2*N3*dim+i2*N3*dim+i3*dim+0:(N1-1)*N2*N3*dim+i2*N3*dim+i3*dim+dim] = hopping_1.transpose().conj() + if period_2 == 1: + for i1 in range(N1): + for i3 in range(N3): + hamiltonian[i1*N2*N3*dim+(N2-1)*N3*dim+i3*dim+0:i1*N2*N3*dim+(N2-1)*N3*dim+i3*dim+dim, i1*N2*N3*dim+i3*dim+0:i1*N2*N3*dim+i3*dim+dim] = hopping_2 + hamiltonian[i1*N2*N3*dim+i3*dim+0:i1*N2*N3*dim+i3*dim+dim, i1*N2*N3*dim+(N2-1)*N3*dim+i3*dim+0:i1*N2*N3*dim+(N2-1)*N3*dim+i3*dim+dim] = hopping_2.transpose().conj() + if period_3 == 1: + for i1 in range(N1): + for i2 in range(N2): + hamiltonian[i1*N2*N3*dim+i2*N3*dim+(N3-1)*dim+0:i1*N2*N3*dim+i2*N3*dim+(N3-1)*dim+dim, i1*N2*N3*dim+i2*N3*dim+0:i1*N2*N3*dim+i2*N3*dim+dim] = hopping_3 + hamiltonian[i1*N2*N3*dim+i2*N3*dim+0:i1*N2*N3*dim+i2*N3*dim+dim, i1*N2*N3*dim+i2*N3*dim+(N3-1)*dim+0:i1*N2*N3*dim+i2*N3*dim+(N3-1)*dim+dim] = hopping_3.transpose().conj() + import guan + guan.statistics_of_guan_package() + return hamiltonian + +# 构建有限尺寸的SSH模型哈密顿量 +def hamiltonian_of_finite_size_ssh_model(N, v=0.6, w=1, onsite_1=0, onsite_2=0, period=1): + import numpy as np + hamiltonian = np.zeros((2*N, 2*N)) + for i in range(N): + hamiltonian[i*2+0, i*2+0] = onsite_1 + hamiltonian[i*2+1, i*2+1] = onsite_2 + hamiltonian[i*2+0, i*2+1] = v + hamiltonian[i*2+1, i*2+0] = v + for i in range(N-1): + hamiltonian[i*2+1, (i+1)*2+0] = w + hamiltonian[(i+1)*2+0, i*2+1] = w + if period==1: + hamiltonian[0, 2*N-1] = w + hamiltonian[2*N-1, 0] = w + import guan + guan.statistics_of_guan_package() + return hamiltonian + +# 获取Zigzag边的石墨烯条带的元胞间跃迁 +def get_hopping_term_of_graphene_ribbon_along_zigzag_direction(N, eta=0): + import numpy as np + hopping = np.zeros((4*N, 4*N), dtype=complex) + for i0 in range(N): + hopping[4*i0+0, 4*i0+0] = eta + hopping[4*i0+1, 4*i0+1] = eta + hopping[4*i0+2, 4*i0+2] = eta + hopping[4*i0+3, 4*i0+3] = eta + hopping[4*i0+1, 4*i0+0] = 1 + hopping[4*i0+2, 4*i0+3] = 1 + import guan + guan.statistics_of_guan_package() + return hopping + +# 构建有限尺寸的石墨烯哈密顿量(可设置是否为周期边界条件) +def hamiltonian_of_finite_size_system_along_two_directions_for_graphene(N1, N2, period_1=0, period_2=0): + import numpy as np + import guan + on_site = guan.hamiltonian_of_finite_size_system_along_one_direction(4) + hopping_1 = guan.get_hopping_term_of_graphene_ribbon_along_zigzag_direction(1) + hopping_2 = np.zeros((4, 4), dtype=complex) + hopping_2[3, 0] = 1 + hamiltonian = guan.hamiltonian_of_finite_size_system_along_two_directions_for_square_lattice(N1, N2, on_site, hopping_1, hopping_2, period_1, period_2) + guan.statistics_of_guan_package() + return hamiltonian + +# 获取石墨烯有效模型沿着x方向的在位能和跃迁项(其中,动量qy为参数) +def get_onsite_and_hopping_terms_of_2d_effective_graphene_along_one_direction(qy, t=1, staggered_potential=0, eta=0, valley_index=0): + import numpy as np + constant = -np.sqrt(3)/2 + h00 = np.zeros((2, 2), dtype=complex) + h00[0, 0] = staggered_potential + h00[1, 1] = -staggered_potential + h00[0, 1] = -1j*constant*t*np.sin(qy) + h00[1, 0] = 1j*constant*t*np.sin(qy) + h01 = np.zeros((2, 2), dtype=complex) + h01[0, 0] = eta + h01[1, 1] = eta + if valley_index == 0: + h01[0, 1] = constant*t*(-1j/2) + h01[1, 0] = constant*t*(-1j/2) + else: + h01[0, 1] = constant*t*(1j/2) + h01[1, 0] = constant*t*(1j/2) + import guan + guan.statistics_of_guan_package() + return h00, h01 + +# 获取BHZ模型的在位能和跃迁项 +def get_onsite_and_hopping_terms_of_bhz_model(A=0.3645/5, B=-0.686/25, C=0, D=-0.512/25, M=-0.01, a=1): + import numpy as np + E_s = C+M-4*(D+B)/(a**2) + E_p = C-M-4*(D-B)/(a**2) + V_ss = (D+B)/(a**2) + V_pp = (D-B)/(a**2) + V_sp = -1j*A/(2*a) + H0 = np.zeros((4, 4), dtype=complex) + H1 = np.zeros((4, 4), dtype=complex) + H2 = np.zeros((4, 4), dtype=complex) + H0[0, 0] = E_s + H0[1, 1] = E_p + H0[2, 2] = E_s + H0[3, 3] = E_p + H1[0, 0] = V_ss + H1[1, 1] = V_pp + H1[2, 2] = V_ss + H1[3, 3] = V_pp + H1[0, 1] = V_sp + H1[1, 0] = -np.conj(V_sp) + H1[2, 3] = np.conj(V_sp) + H1[3, 2] = -V_sp + H2[0, 0] = V_ss + H2[1, 1] = V_pp + H2[2, 2] = V_ss + H2[3, 3] = V_pp + H2[0, 1] = 1j*V_sp + H2[1, 0] = 1j*np.conj(V_sp) + H2[2, 3] = -1j*np.conj(V_sp) + H2[3, 2] = -1j*V_sp + import guan + guan.statistics_of_guan_package() + return H0, H1, H2 + +# 获取半个BHZ模型的在位能和跃迁项(自旋向上) +def get_onsite_and_hopping_terms_of_half_bhz_model_for_spin_up(A=0.3645/5, B=-0.686/25, C=0, D=-0.512/25, M=-0.01, a=1): + import numpy as np + E_s = C+M-4*(D+B)/(a**2) + E_p = C-M-4*(D-B)/(a**2) + V_ss = (D+B)/(a**2) + V_pp = (D-B)/(a**2) + V_sp = -1j*A/(2*a) + H0 = np.zeros((2, 2), dtype=complex) + H1 = np.zeros((2, 2), dtype=complex) + H2 = np.zeros((2, 2), dtype=complex) + H0[0, 0] = E_s + H0[1, 1] = E_p + H1[0, 0] = V_ss + H1[1, 1] = V_pp + H1[0, 1] = V_sp + H1[1, 0] = -np.conj(V_sp) + H2[0, 0] = V_ss + H2[1, 1] = V_pp + H2[0, 1] = 1j*V_sp + H2[1, 0] = 1j*np.conj(V_sp) + import guan + guan.statistics_of_guan_package() + return H0, H1, H2 + +# 获取半个BHZ模型的在位能和跃迁项(自旋向下) +def get_onsite_and_hopping_terms_of_half_bhz_model_for_spin_down(A=0.3645/5, B=-0.686/25, C=0, D=-0.512/25, M=-0.01, a=1): + import numpy as np + E_s = C+M-4*(D+B)/(a**2) + E_p = C-M-4*(D-B)/(a**2) + V_ss = (D+B)/(a**2) + V_pp = (D-B)/(a**2) + V_sp = -1j*A/(2*a) + H0 = np.zeros((2, 2), dtype=complex) + H1 = np.zeros((2, 2), dtype=complex) + H2 = np.zeros((2, 2), dtype=complex) + H0[0, 0] = E_s + H0[1, 1] = E_p + H1[0, 0] = V_ss + H1[1, 1] = V_pp + H1[0, 1] = np.conj(V_sp) + H1[1, 0] = -V_sp + H2[0, 0] = V_ss + H2[1, 1] = V_pp + H2[0, 1] = -1j*np.conj(V_sp) + H2[1, 0] = -1j*V_sp + import guan + guan.statistics_of_guan_package() + return H0, H1, H2 + +# 一维链的哈密顿量(倒空间) +def hamiltonian_of_simple_chain(k): + import guan + hamiltonian = guan.one_dimensional_fourier_transform(k, unit_cell=0, hopping=1) + guan.statistics_of_guan_package() + return hamiltonian + +# 二维方格子的哈密顿量(倒空间) +def hamiltonian_of_square_lattice(k1, k2): + import guan + hamiltonian = guan.two_dimensional_fourier_transform_for_square_lattice(k1, k2, unit_cell=0, hopping_1=1, hopping_2=1) + guan.statistics_of_guan_package() + return hamiltonian + +# 准一维方格子条带的哈密顿量(倒空间) +def hamiltonian_of_square_lattice_in_quasi_one_dimension(k, N=10, period=0): + import numpy as np + import guan + h00 = np.zeros((N, N), dtype=complex) # hopping in a unit cell + h01 = np.zeros((N, N), dtype=complex) # hopping between unit cells + for i in range(N-1): + h00[i, i+1] = 1 + h00[i+1, i] = 1 + if period == 1: + h00[N-1, 0] = 1 + h00[0, N-1] = 1 + for i in range(N): + h01[i, i] = 1 + hamiltonian = guan.one_dimensional_fourier_transform(k, unit_cell=h00, hopping=h01) + guan.statistics_of_guan_package() + return hamiltonian + +# 三维立方格子的哈密顿量(倒空间) +def hamiltonian_of_cubic_lattice(k1, k2, k3): + import guan + hamiltonian = guan.three_dimensional_fourier_transform_for_cubic_lattice(k1, k2, k3, unit_cell=0, hopping_1=1, hopping_2=1, hopping_3=1) + guan.statistics_of_guan_package() + return hamiltonian + +# SSH模型的哈密顿量(倒空间) +def hamiltonian_of_ssh_model(k, v=0.6, w=1): + import numpy as np + import cmath + hamiltonian = np.zeros((2, 2), dtype=complex) + hamiltonian[0,1] = v+w*cmath.exp(-1j*k) + hamiltonian[1,0] = v+w*cmath.exp(1j*k) + import guan + guan.statistics_of_guan_package() + return hamiltonian + +# 石墨烯的哈密顿量(倒空间) +def hamiltonian_of_graphene(k1, k2, staggered_potential=0, t=1, a='default'): + import numpy as np + import cmath + import math + if a == 'default': + a = 1/math.sqrt(3) + h0 = np.zeros((2, 2), dtype=complex) # mass term + h1 = np.zeros((2, 2), dtype=complex) # nearest hopping + h0[0, 0] = staggered_potential + h0[1, 1] = -staggered_potential + h1[1, 0] = t*(cmath.exp(1j*k2*a)+cmath.exp(1j*math.sqrt(3)/2*k1*a-1j/2*k2*a)+cmath.exp(-1j*math.sqrt(3)/2*k1*a-1j/2*k2*a)) + h1[0, 1] = h1[1, 0].conj() + hamiltonian = h0 + h1 + import guan + guan.statistics_of_guan_package() + return hamiltonian + +# 石墨烯有效模型的哈密顿量(倒空间) +def effective_hamiltonian_of_graphene(qx, qy, t=1, staggered_potential=0, valley_index=0): + import numpy as np + hamiltonian = np.zeros((2, 2), dtype=complex) + hamiltonian[0, 0] = staggered_potential + hamiltonian[1, 1] = -staggered_potential + constant = -np.sqrt(3)/2 + if valley_index == 0: + hamiltonian[0, 1] = constant*t*(qx-1j*qy) + hamiltonian[1, 0] = constant*t*(qx+1j*qy) + else: + hamiltonian[0, 1] = constant*t*(-qx-1j*qy) + hamiltonian[1, 0] = constant*t*(-qx+1j*qy) + import guan + guan.statistics_of_guan_package() + return hamiltonian + +# 石墨烯有效模型离散化后的哈密顿量(倒空间) +def effective_hamiltonian_of_graphene_after_discretization(qx, qy, t=1, staggered_potential=0, valley_index=0): + import numpy as np + hamiltonian = np.zeros((2, 2), dtype=complex) + hamiltonian[0, 0] = staggered_potential + hamiltonian[1, 1] = -staggered_potential + constant = -np.sqrt(3)/2 + if valley_index == 0: + hamiltonian[0, 1] = constant*t*(np.sin(qx)-1j*np.sin(qy)) + hamiltonian[1, 0] = constant*t*(np.sin(qx)+1j*np.sin(qy)) + else: + hamiltonian[0, 1] = constant*t*(-np.sin(qx)-1j*np.sin(qy)) + hamiltonian[1, 0] = constant*t*(-np.sin(qx)+1j*np.sin(qy)) + import guan + guan.statistics_of_guan_package() + return hamiltonian + +# 准一维Zigzag边石墨烯条带的哈密顿量(倒空间) +def hamiltonian_of_graphene_with_zigzag_in_quasi_one_dimension(k, N=10, M=0, t=1, period=0): + import numpy as np + import guan + h00 = np.zeros((4*N, 4*N), dtype=complex) # hopping in a unit cell + h01 = np.zeros((4*N, 4*N), dtype=complex) # hopping between unit cells + for i in range(N): + h00[i*4+0, i*4+0] = M + h00[i*4+1, i*4+1] = -M + h00[i*4+2, i*4+2] = M + h00[i*4+3, i*4+3] = -M + h00[i*4+0, i*4+1] = t + h00[i*4+1, i*4+0] = t + h00[i*4+1, i*4+2] = t + h00[i*4+2, i*4+1] = t + h00[i*4+2, i*4+3] = t + h00[i*4+3, i*4+2] = t + for i in range(N-1): + h00[i*4+3, (i+1)*4+0] = t + h00[(i+1)*4+0, i*4+3] = t + if period == 1: + h00[(N-1)*4+3, 0] = t + h00[0, (N-1)*4+3] = t + for i in range(N): + h01[i*4+1, i*4+0] = t + h01[i*4+2, i*4+3] = t + hamiltonian = guan.one_dimensional_fourier_transform(k, unit_cell=h00, hopping=h01) + guan.statistics_of_guan_package() + return hamiltonian + +# Haldane模型的哈密顿量(倒空间) +def hamiltonian_of_haldane_model(k1, k2, M=2/3, t1=1, t2=1/3, phi='default', a='default'): + import numpy as np + import cmath + import math + if phi == 'default': + phi=math.pi/4 + if a == 'default': + a=1/math.sqrt(3) + h0 = np.zeros((2, 2), dtype=complex) # mass term + h1 = np.zeros((2, 2), dtype=complex) # nearest hopping + h2 = np.zeros((2, 2), dtype=complex) # next nearest hopping + h0[0, 0] = M + h0[1, 1] = -M + h1[1, 0] = t1*(cmath.exp(1j*k2*a)+cmath.exp(1j*math.sqrt(3)/2*k1*a-1j/2*k2*a)+cmath.exp(-1j*math.sqrt(3)/2*k1*a-1j/2*k2*a)) + h1[0, 1] = h1[1, 0].conj() + h2[0, 0] = t2*cmath.exp(-1j*phi)*(cmath.exp(1j*math.sqrt(3)*k1*a)+cmath.exp(-1j*math.sqrt(3)/2*k1*a+1j*3/2*k2*a)+cmath.exp(-1j*math.sqrt(3)/2*k1*a-1j*3/2*k2*a)) + h2[1, 1] = t2*cmath.exp(1j*phi)*(cmath.exp(1j*math.sqrt(3)*k1*a)+cmath.exp(-1j*math.sqrt(3)/2*k1*a+1j*3/2*k2*a)+cmath.exp(-1j*math.sqrt(3)/2*k1*a-1j*3/2*k2*a)) + hamiltonian = h0 + h1 + h2 + h2.transpose().conj() + import guan + guan.statistics_of_guan_package() + return hamiltonian + +# 准一维Haldane模型条带的哈密顿量(倒空间) +def hamiltonian_of_haldane_model_in_quasi_one_dimension(k, N=10, M=2/3, t1=1, t2=1/3, phi='default', period=0): + import numpy as np + import cmath + import math + if phi == 'default': + phi=math.pi/4 + h00 = np.zeros((4*N, 4*N), dtype=complex) # hopping in a unit cell + h01 = np.zeros((4*N, 4*N), dtype=complex) # hopping between unit cells + for i in range(N): + h00[i*4+0, i*4+0] = M + h00[i*4+1, i*4+1] = -M + h00[i*4+2, i*4+2] = M + h00[i*4+3, i*4+3] = -M + h00[i*4+0, i*4+1] = t1 + h00[i*4+1, i*4+0] = t1 + h00[i*4+1, i*4+2] = t1 + h00[i*4+2, i*4+1] = t1 + h00[i*4+2, i*4+3] = t1 + h00[i*4+3, i*4+2] = t1 + h00[i*4+0, i*4+2] = t2*cmath.exp(-1j*phi) + h00[i*4+2, i*4+0] = h00[i*4+0, i*4+2].conj() + h00[i*4+1, i*4+3] = t2*cmath.exp(-1j*phi) + h00[i*4+3, i*4+1] = h00[i*4+1, i*4+3].conj() + for i in range(N-1): + h00[i*4+3, (i+1)*4+0] = t1 + h00[(i+1)*4+0, i*4+3] = t1 + h00[i*4+2, (i+1)*4+0] = t2*cmath.exp(1j*phi) + h00[(i+1)*4+0, i*4+2] = h00[i*4+2, (i+1)*4+0].conj() + h00[i*4+3, (i+1)*4+1] = t2*cmath.exp(1j*phi) + h00[(i+1)*4+1, i*4+3] = h00[i*4+3, (i+1)*4+1].conj() + if period == 1: + h00[(N-1)*4+3, 0] = t1 + h00[0, (N-1)*4+3] = t1 + h00[(N-1)*4+2, 0] = t2*cmath.exp(1j*phi) + h00[0, (N-1)*4+2] = h00[(N-1)*4+2, 0].conj() + h00[(N-1)*4+3, 1] = t2*cmath.exp(1j*phi) + h00[1, (N-1)*4+3] = h00[(N-1)*4+3, 1].conj() + for i in range(N): + h01[i*4+1, i*4+0] = t1 + h01[i*4+2, i*4+3] = t1 + h01[i*4+0, i*4+0] = t2*cmath.exp(1j*phi) + h01[i*4+1, i*4+1] = t2*cmath.exp(-1j*phi) + h01[i*4+2, i*4+2] = t2*cmath.exp(1j*phi) + h01[i*4+3, i*4+3] = t2*cmath.exp(-1j*phi) + h01[i*4+1, i*4+3] = t2*cmath.exp(1j*phi) + h01[i*4+2, i*4+0] = t2*cmath.exp(-1j*phi) + if i != 0: + h01[i*4+1, (i-1)*4+3] = t2*cmath.exp(1j*phi) + for i in range(N-1): + h01[i*4+2, (i+1)*4+0] = t2*cmath.exp(-1j*phi) + hamiltonian = h00 + h01*cmath.exp(1j*k) + h01.transpose().conj()*cmath.exp(-1j*k) + import guan + guan.statistics_of_guan_package() + return hamiltonian + +# 一个量子反常霍尔效应的哈密顿量(倒空间) +def hamiltonian_of_one_QAH_model(k1, k2, t1=1, t2=1, t3=0.5, m=-1): + import numpy as np + import math + hamiltonian = np.zeros((2, 2), dtype=complex) + hamiltonian[0, 1] = 2*t1*math.cos(k1)-1j*2*t1*math.cos(k2) + hamiltonian[1, 0] = 2*t1*math.cos(k1)+1j*2*t1*math.cos(k2) + hamiltonian[0, 0] = m+2*t3*math.sin(k1)+2*t3*math.sin(k2)+2*t2*math.cos(k1+k2) + hamiltonian[1, 1] = -(m+2*t3*math.sin(k1)+2*t3*math.sin(k2)+2*t2*math.cos(k1+k2)) + import guan + guan.statistics_of_guan_package() + return hamiltonian + +# BHZ模型的哈密顿量(倒空间) +def hamiltonian_of_bhz_model(kx, ky, A=0.3645/5, B=-0.686/25, C=0, D=-0.512/25, M=-0.01): + import numpy as np + import math + hamiltonian = np.zeros((4, 4), dtype=complex) + varepsilon = C-2*D*(2-math.cos(kx)-math.cos(ky)) + d3 = -2*B*(2-(M/2/B)-math.cos(kx)-math.cos(ky)) + d1_d2 = A*(math.sin(kx)+1j*math.sin(ky)) + hamiltonian[0, 0] = varepsilon+d3 + hamiltonian[1, 1] = varepsilon-d3 + hamiltonian[0, 1] = np.conj(d1_d2) + hamiltonian[1, 0] = d1_d2 + hamiltonian[2, 2] = varepsilon+d3 + hamiltonian[3, 3] = varepsilon-d3 + hamiltonian[2, 3] = -d1_d2 + hamiltonian[3, 2] = -np.conj(d1_d2) + import guan + guan.statistics_of_guan_package() + return hamiltonian + +# 半BHZ模型的哈密顿量(自旋向上)(倒空间) +def hamiltonian_of_half_bhz_model_for_spin_up(kx, ky, A=0.3645/5, B=-0.686/25, C=0, D=-0.512/25, M=-0.01): + import numpy as np + import math + hamiltonian = np.zeros((2, 2), dtype=complex) + varepsilon = C-2*D*(2-math.cos(kx)-math.cos(ky)) + d3 = -2*B*(2-(M/2/B)-math.cos(kx)-math.cos(ky)) + d1_d2 = A*(math.sin(kx)+1j*math.sin(ky)) + hamiltonian[0, 0] = varepsilon+d3 + hamiltonian[1, 1] = varepsilon-d3 + hamiltonian[0, 1] = np.conj(d1_d2) + hamiltonian[1, 0] = d1_d2 + import guan + guan.statistics_of_guan_package() + return hamiltonian + +# 半BHZ模型的哈密顿量(自旋向下)(倒空间) +def hamiltonian_of_half_bhz_model_for_spin_down(kx, ky, A=0.3645/5, B=-0.686/25, C=0, D=-0.512/25, M=-0.01): + import numpy as np + import math + hamiltonian = np.zeros((2, 2), dtype=complex) + varepsilon = C-2*D*(2-math.cos(kx)-math.cos(ky)) + d3 = -2*B*(2-(M/2/B)-math.cos(kx)-math.cos(ky)) + d1_d2 = A*(math.sin(kx)+1j*math.sin(ky)) + hamiltonian[0, 0] = varepsilon+d3 + hamiltonian[1, 1] = varepsilon-d3 + hamiltonian[0, 1] = -d1_d2 + hamiltonian[1, 0] = -np.conj(d1_d2) + import guan + guan.statistics_of_guan_package() + return hamiltonian + +# BBH模型的哈密顿量(倒空间) +def hamiltonian_of_bbh_model(kx, ky, gamma_x=0.5, gamma_y=0.5, lambda_x=1, lambda_y=1): + import numpy as np + import cmath + # label of atoms in a unit cell + # (2) —— (0) + # | | + # (1) —— (3) + hamiltonian = np.zeros((4, 4), dtype=complex) + hamiltonian[0, 2] = gamma_x+lambda_x*cmath.exp(1j*kx) + hamiltonian[1, 3] = gamma_x+lambda_x*cmath.exp(-1j*kx) + hamiltonian[0, 3] = gamma_y+lambda_y*cmath.exp(1j*ky) + hamiltonian[1, 2] = -gamma_y-lambda_y*cmath.exp(-1j*ky) + hamiltonian[2, 0] = np.conj(hamiltonian[0, 2]) + hamiltonian[3, 1] = np.conj(hamiltonian[1, 3]) + hamiltonian[3, 0] = np.conj(hamiltonian[0, 3]) + hamiltonian[2, 1] = np.conj(hamiltonian[1, 2]) + import guan + guan.statistics_of_guan_package() + return hamiltonian + +# Kagome模型的哈密顿量(倒空间) +def hamiltonian_of_kagome_lattice(kx, ky, t=1): + import numpy as np + import math + k1_dot_a1 = kx + k2_dot_a2 = kx/2+ky*math.sqrt(3)/2 + k3_dot_a3 = -kx/2+ky*math.sqrt(3)/2 + hamiltonian = np.zeros((3, 3), dtype=complex) + hamiltonian[0, 1] = 2*math.cos(k1_dot_a1) + hamiltonian[0, 2] = 2*math.cos(k2_dot_a2) + hamiltonian[1, 2] = 2*math.cos(k3_dot_a3) + hamiltonian = hamiltonian + hamiltonian.transpose().conj() + hamiltonian = -t*hamiltonian + import guan + guan.statistics_of_guan_package() + return hamiltonian \ No newline at end of file diff --git a/PyPI/src/guan/Hamiltonian_of_finite_size_systems.py b/PyPI/src/guan/Hamiltonian_of_finite_size_systems.py deleted file mode 100644 index a8ffaa8..0000000 --- a/PyPI/src/guan/Hamiltonian_of_finite_size_systems.py +++ /dev/null @@ -1,260 +0,0 @@ -# Module: Hamiltonian_of_finite_size_systems - -# 构建一维的有限尺寸体系哈密顿量(可设置是否为周期边界条件) -def hamiltonian_of_finite_size_system_along_one_direction(N, on_site=0, hopping=1, period=0): - import numpy as np - on_site = np.array(on_site) - hopping = np.array(hopping) - if on_site.shape==(): - dim = 1 - else: - dim = on_site.shape[0] - hamiltonian = np.zeros((N*dim, N*dim), dtype=complex) - for i0 in range(N): - hamiltonian[i0*dim+0:i0*dim+dim, i0*dim+0:i0*dim+dim] = on_site - for i0 in range(N-1): - hamiltonian[i0*dim+0:i0*dim+dim, (i0+1)*dim+0:(i0+1)*dim+dim] = hopping - hamiltonian[(i0+1)*dim+0:(i0+1)*dim+dim, i0*dim+0:i0*dim+dim] = hopping.transpose().conj() - if period == 1: - hamiltonian[(N-1)*dim+0:(N-1)*dim+dim, 0:dim] = hopping - hamiltonian[0:dim, (N-1)*dim+0:(N-1)*dim+dim] = hopping.transpose().conj() - import guan - guan.statistics_of_guan_package() - return hamiltonian - -# 构建二维的方格子有限尺寸体系哈密顿量(可设置是否为周期边界条件) -def hamiltonian_of_finite_size_system_along_two_directions_for_square_lattice(N1, N2, on_site=0, hopping_1=1, hopping_2=1, period_1=0, period_2=0): - import numpy as np - on_site = np.array(on_site) - hopping_1 = np.array(hopping_1) - hopping_2 = np.array(hopping_2) - if on_site.shape==(): - dim = 1 - else: - dim = on_site.shape[0] - hamiltonian = np.zeros((N1*N2*dim, N1*N2*dim), dtype=complex) - for i1 in range(N1): - for i2 in range(N2): - hamiltonian[i1*N2*dim+i2*dim+0:i1*N2*dim+i2*dim+dim, i1*N2*dim+i2*dim+0:i1*N2*dim+i2*dim+dim] = on_site - for i1 in range(N1-1): - for i2 in range(N2): - hamiltonian[i1*N2*dim+i2*dim+0:i1*N2*dim+i2*dim+dim, (i1+1)*N2*dim+i2*dim+0:(i1+1)*N2*dim+i2*dim+dim] = hopping_1 - hamiltonian[(i1+1)*N2*dim+i2*dim+0:(i1+1)*N2*dim+i2*dim+dim, i1*N2*dim+i2*dim+0:i1*N2*dim+i2*dim+dim] = hopping_1.transpose().conj() - for i1 in range(N1): - for i2 in range(N2-1): - hamiltonian[i1*N2*dim+i2*dim+0:i1*N2*dim+i2*dim+dim, i1*N2*dim+(i2+1)*dim+0:i1*N2*dim+(i2+1)*dim+dim] = hopping_2 - hamiltonian[i1*N2*dim+(i2+1)*dim+0:i1*N2*dim+(i2+1)*dim+dim, i1*N2*dim+i2*dim+0:i1*N2*dim+i2*dim+dim] = hopping_2.transpose().conj() - if period_1 == 1: - for i2 in range(N2): - hamiltonian[(N1-1)*N2*dim+i2*dim+0:(N1-1)*N2*dim+i2*dim+dim, i2*dim+0:i2*dim+dim] = hopping_1 - hamiltonian[i2*dim+0:i2*dim+dim, (N1-1)*N2*dim+i2*dim+0:(N1-1)*N2*dim+i2*dim+dim] = hopping_1.transpose().conj() - if period_2 == 1: - for i1 in range(N1): - hamiltonian[i1*N2*dim+(N2-1)*dim+0:i1*N2*dim+(N2-1)*dim+dim, i1*N2*dim+0:i1*N2*dim+dim] = hopping_2 - hamiltonian[i1*N2*dim+0:i1*N2*dim+dim, i1*N2*dim+(N2-1)*dim+0:i1*N2*dim+(N2-1)*dim+dim] = hopping_2.transpose().conj() - import guan - guan.statistics_of_guan_package() - return hamiltonian - -# 构建三维的立方格子有限尺寸体系哈密顿量(可设置是否为周期边界条件) -def hamiltonian_of_finite_size_system_along_three_directions_for_cubic_lattice(N1, N2, N3, on_site=0, hopping_1=1, hopping_2=1, hopping_3=1, period_1=0, period_2=0, period_3=0): - import numpy as np - on_site = np.array(on_site) - hopping_1 = np.array(hopping_1) - hopping_2 = np.array(hopping_2) - hopping_3 = np.array(hopping_3) - if on_site.shape==(): - dim = 1 - else: - dim = on_site.shape[0] - hamiltonian = np.zeros((N1*N2*N3*dim, N1*N2*N3*dim), dtype=complex) - for i1 in range(N1): - for i2 in range(N2): - for i3 in range(N3): - hamiltonian[i1*N2*N3*dim+i2*N3*dim+i3*dim+0:i1*N2*N3*dim+i2*N3*dim+i3*dim+dim, i1*N2*N3*dim+i2*N3*dim+i3*dim+0:i1*N2*N3*dim+i2*N3*dim+i3*dim+dim] = on_site - for i1 in range(N1-1): - for i2 in range(N2): - for i3 in range(N3): - hamiltonian[i1*N2*N3*dim+i2*N3*dim+i3*dim+0:i1*N2*N3*dim+i2*N3*dim+i3*dim+dim, (i1+1)*N2*N3*dim+i2*N3*dim+i3*dim+0:(i1+1)*N2*N3*dim+i2*N3*dim+i3*dim+dim] = hopping_1 - hamiltonian[(i1+1)*N2*N3*dim+i2*N3*dim+i3*dim+0:(i1+1)*N2*N3*dim+i2*N3*dim+i3*dim+dim, i1*N2*N3*dim+i2*N3*dim+i3*dim+0:i1*N2*N3*dim+i2*N3*dim+i3*dim+dim] = hopping_1.transpose().conj() - for i1 in range(N1): - for i2 in range(N2-1): - for i3 in range(N3): - hamiltonian[i1*N2*N3*dim+i2*N3*dim+i3*dim+0:i1*N2*N3*dim+i2*N3*dim+i3*dim+dim, i1*N2*N3*dim+(i2+1)*N3*dim+i3*dim+0:i1*N2*N3*dim+(i2+1)*N3*dim+i3*dim+dim] = hopping_2 - hamiltonian[i1*N2*N3*dim+(i2+1)*N3*dim+i3*dim+0:i1*N2*N3*dim+(i2+1)*N3*dim+i3*dim+dim, i1*N2*N3*dim+i2*N3*dim+i3*dim+0:i1*N2*N3*dim+i2*N3*dim+i3*dim+dim] = hopping_2.transpose().conj() - for i1 in range(N1): - for i2 in range(N2): - for i3 in range(N3-1): - hamiltonian[i1*N2*N3*dim+i2*N3*dim+i3*dim+0:i1*N2*N3*dim+i2*N3*dim+i3*dim+dim, i1*N2*N3*dim+i2*N3*dim+(i3+1)*dim+0:i1*N2*N3*dim+i2*N3*dim+(i3+1)*dim+dim] = hopping_3 - hamiltonian[i1*N2*N3*dim+i2*N3*dim+(i3+1)*dim+0:i1*N2*N3*dim+i2*N3*dim+(i3+1)*dim+dim, i1*N2*N3*dim+i2*N3*dim+i3*dim+0:i1*N2*N3*dim+i2*N3*dim+i3*dim+dim] = hopping_3.transpose().conj() - if period_1 == 1: - for i2 in range(N2): - for i3 in range(N3): - hamiltonian[(N1-1)*N2*N3*dim+i2*N3*dim+i3*dim+0:(N1-1)*N2*N3*dim+i2*N3*dim+i3*dim+dim, i2*N3*dim+i3*dim+0:i2*N3*dim+i3*dim+dim] = hopping_1 - hamiltonian[i2*N3*dim+i3*dim+0:i2*N3*dim+i3*dim+dim, (N1-1)*N2*N3*dim+i2*N3*dim+i3*dim+0:(N1-1)*N2*N3*dim+i2*N3*dim+i3*dim+dim] = hopping_1.transpose().conj() - if period_2 == 1: - for i1 in range(N1): - for i3 in range(N3): - hamiltonian[i1*N2*N3*dim+(N2-1)*N3*dim+i3*dim+0:i1*N2*N3*dim+(N2-1)*N3*dim+i3*dim+dim, i1*N2*N3*dim+i3*dim+0:i1*N2*N3*dim+i3*dim+dim] = hopping_2 - hamiltonian[i1*N2*N3*dim+i3*dim+0:i1*N2*N3*dim+i3*dim+dim, i1*N2*N3*dim+(N2-1)*N3*dim+i3*dim+0:i1*N2*N3*dim+(N2-1)*N3*dim+i3*dim+dim] = hopping_2.transpose().conj() - if period_3 == 1: - for i1 in range(N1): - for i2 in range(N2): - hamiltonian[i1*N2*N3*dim+i2*N3*dim+(N3-1)*dim+0:i1*N2*N3*dim+i2*N3*dim+(N3-1)*dim+dim, i1*N2*N3*dim+i2*N3*dim+0:i1*N2*N3*dim+i2*N3*dim+dim] = hopping_3 - hamiltonian[i1*N2*N3*dim+i2*N3*dim+0:i1*N2*N3*dim+i2*N3*dim+dim, i1*N2*N3*dim+i2*N3*dim+(N3-1)*dim+0:i1*N2*N3*dim+i2*N3*dim+(N3-1)*dim+dim] = hopping_3.transpose().conj() - import guan - guan.statistics_of_guan_package() - return hamiltonian - -# 构建有限尺寸的SSH模型哈密顿量 -def hamiltonian_of_finite_size_ssh_model(N, v=0.6, w=1, onsite_1=0, onsite_2=0, period=1): - import numpy as np - hamiltonian = np.zeros((2*N, 2*N)) - for i in range(N): - hamiltonian[i*2+0, i*2+0] = onsite_1 - hamiltonian[i*2+1, i*2+1] = onsite_2 - hamiltonian[i*2+0, i*2+1] = v - hamiltonian[i*2+1, i*2+0] = v - for i in range(N-1): - hamiltonian[i*2+1, (i+1)*2+0] = w - hamiltonian[(i+1)*2+0, i*2+1] = w - if period==1: - hamiltonian[0, 2*N-1] = w - hamiltonian[2*N-1, 0] = w - import guan - guan.statistics_of_guan_package() - return hamiltonian - -# 获取Zigzag边的石墨烯条带的元胞间跃迁 -def get_hopping_term_of_graphene_ribbon_along_zigzag_direction(N, eta=0): - import numpy as np - hopping = np.zeros((4*N, 4*N), dtype=complex) - for i0 in range(N): - hopping[4*i0+0, 4*i0+0] = eta - hopping[4*i0+1, 4*i0+1] = eta - hopping[4*i0+2, 4*i0+2] = eta - hopping[4*i0+3, 4*i0+3] = eta - hopping[4*i0+1, 4*i0+0] = 1 - hopping[4*i0+2, 4*i0+3] = 1 - import guan - guan.statistics_of_guan_package() - return hopping - -# 构建有限尺寸的石墨烯哈密顿量(可设置是否为周期边界条件) -def hamiltonian_of_finite_size_system_along_two_directions_for_graphene(N1, N2, period_1=0, period_2=0): - import numpy as np - import guan - on_site = guan.hamiltonian_of_finite_size_system_along_one_direction(4) - hopping_1 = guan.get_hopping_term_of_graphene_ribbon_along_zigzag_direction(1) - hopping_2 = np.zeros((4, 4), dtype=complex) - hopping_2[3, 0] = 1 - hamiltonian = guan.hamiltonian_of_finite_size_system_along_two_directions_for_square_lattice(N1, N2, on_site, hopping_1, hopping_2, period_1, period_2) - guan.statistics_of_guan_package() - return hamiltonian - -# 获取石墨烯有效模型沿着x方向的在位能和跃迁项(其中,动量qy为参数) -def get_onsite_and_hopping_terms_of_2d_effective_graphene_along_one_direction(qy, t=1, staggered_potential=0, eta=0, valley_index=0): - import numpy as np - constant = -np.sqrt(3)/2 - h00 = np.zeros((2, 2), dtype=complex) - h00[0, 0] = staggered_potential - h00[1, 1] = -staggered_potential - h00[0, 1] = -1j*constant*t*np.sin(qy) - h00[1, 0] = 1j*constant*t*np.sin(qy) - h01 = np.zeros((2, 2), dtype=complex) - h01[0, 0] = eta - h01[1, 1] = eta - if valley_index == 0: - h01[0, 1] = constant*t*(-1j/2) - h01[1, 0] = constant*t*(-1j/2) - else: - h01[0, 1] = constant*t*(1j/2) - h01[1, 0] = constant*t*(1j/2) - import guan - guan.statistics_of_guan_package() - return h00, h01 - -# 获取BHZ模型的在位能和跃迁项 -def get_onsite_and_hopping_terms_of_bhz_model(A=0.3645/5, B=-0.686/25, C=0, D=-0.512/25, M=-0.01, a=1): - import numpy as np - E_s = C+M-4*(D+B)/(a**2) - E_p = C-M-4*(D-B)/(a**2) - V_ss = (D+B)/(a**2) - V_pp = (D-B)/(a**2) - V_sp = -1j*A/(2*a) - H0 = np.zeros((4, 4), dtype=complex) - H1 = np.zeros((4, 4), dtype=complex) - H2 = np.zeros((4, 4), dtype=complex) - H0[0, 0] = E_s - H0[1, 1] = E_p - H0[2, 2] = E_s - H0[3, 3] = E_p - H1[0, 0] = V_ss - H1[1, 1] = V_pp - H1[2, 2] = V_ss - H1[3, 3] = V_pp - H1[0, 1] = V_sp - H1[1, 0] = -np.conj(V_sp) - H1[2, 3] = np.conj(V_sp) - H1[3, 2] = -V_sp - H2[0, 0] = V_ss - H2[1, 1] = V_pp - H2[2, 2] = V_ss - H2[3, 3] = V_pp - H2[0, 1] = 1j*V_sp - H2[1, 0] = 1j*np.conj(V_sp) - H2[2, 3] = -1j*np.conj(V_sp) - H2[3, 2] = -1j*V_sp - import guan - guan.statistics_of_guan_package() - return H0, H1, H2 - -# 获取半个BHZ模型的在位能和跃迁项(自旋向上) -def get_onsite_and_hopping_terms_of_half_bhz_model_for_spin_up(A=0.3645/5, B=-0.686/25, C=0, D=-0.512/25, M=-0.01, a=1): - import numpy as np - E_s = C+M-4*(D+B)/(a**2) - E_p = C-M-4*(D-B)/(a**2) - V_ss = (D+B)/(a**2) - V_pp = (D-B)/(a**2) - V_sp = -1j*A/(2*a) - H0 = np.zeros((2, 2), dtype=complex) - H1 = np.zeros((2, 2), dtype=complex) - H2 = np.zeros((2, 2), dtype=complex) - H0[0, 0] = E_s - H0[1, 1] = E_p - H1[0, 0] = V_ss - H1[1, 1] = V_pp - H1[0, 1] = V_sp - H1[1, 0] = -np.conj(V_sp) - H2[0, 0] = V_ss - H2[1, 1] = V_pp - H2[0, 1] = 1j*V_sp - H2[1, 0] = 1j*np.conj(V_sp) - import guan - guan.statistics_of_guan_package() - return H0, H1, H2 - -# 获取半个BHZ模型的在位能和跃迁项(自旋向下) -def get_onsite_and_hopping_terms_of_half_bhz_model_for_spin_down(A=0.3645/5, B=-0.686/25, C=0, D=-0.512/25, M=-0.01, a=1): - import numpy as np - E_s = C+M-4*(D+B)/(a**2) - E_p = C-M-4*(D-B)/(a**2) - V_ss = (D+B)/(a**2) - V_pp = (D-B)/(a**2) - V_sp = -1j*A/(2*a) - H0 = np.zeros((2, 2), dtype=complex) - H1 = np.zeros((2, 2), dtype=complex) - H2 = np.zeros((2, 2), dtype=complex) - H0[0, 0] = E_s - H0[1, 1] = E_p - H1[0, 0] = V_ss - H1[1, 1] = V_pp - H1[0, 1] = np.conj(V_sp) - H1[1, 0] = -V_sp - H2[0, 0] = V_ss - H2[1, 1] = V_pp - H2[0, 1] = -1j*np.conj(V_sp) - H2[1, 0] = -1j*V_sp - import guan - guan.statistics_of_guan_package() - return H0, H1, H2 \ No newline at end of file diff --git a/PyPI/src/guan/Hamiltonian_of_models_in_reciprocal_space.py b/PyPI/src/guan/Hamiltonian_of_models_in_reciprocal_space.py deleted file mode 100644 index ffd5bbd..0000000 --- a/PyPI/src/guan/Hamiltonian_of_models_in_reciprocal_space.py +++ /dev/null @@ -1,315 +0,0 @@ -# Module: Hamiltonian_of_models_in_reciprocal_space - -# 一维链的哈密顿量 -def hamiltonian_of_simple_chain(k): - import guan - hamiltonian = guan.one_dimensional_fourier_transform(k, unit_cell=0, hopping=1) - guan.statistics_of_guan_package() - return hamiltonian - -# 二维方格子的哈密顿量 -def hamiltonian_of_square_lattice(k1, k2): - import guan - hamiltonian = guan.two_dimensional_fourier_transform_for_square_lattice(k1, k2, unit_cell=0, hopping_1=1, hopping_2=1) - guan.statistics_of_guan_package() - return hamiltonian - -# 准一维方格子条带的哈密顿量 -def hamiltonian_of_square_lattice_in_quasi_one_dimension(k, N=10, period=0): - import numpy as np - import guan - h00 = np.zeros((N, N), dtype=complex) # hopping in a unit cell - h01 = np.zeros((N, N), dtype=complex) # hopping between unit cells - for i in range(N-1): - h00[i, i+1] = 1 - h00[i+1, i] = 1 - if period == 1: - h00[N-1, 0] = 1 - h00[0, N-1] = 1 - for i in range(N): - h01[i, i] = 1 - hamiltonian = guan.one_dimensional_fourier_transform(k, unit_cell=h00, hopping=h01) - guan.statistics_of_guan_package() - return hamiltonian - -# 三维立方格子的哈密顿量 -def hamiltonian_of_cubic_lattice(k1, k2, k3): - import guan - hamiltonian = guan.three_dimensional_fourier_transform_for_cubic_lattice(k1, k2, k3, unit_cell=0, hopping_1=1, hopping_2=1, hopping_3=1) - guan.statistics_of_guan_package() - return hamiltonian - -# SSH模型的哈密顿量 -def hamiltonian_of_ssh_model(k, v=0.6, w=1): - import numpy as np - import cmath - hamiltonian = np.zeros((2, 2), dtype=complex) - hamiltonian[0,1] = v+w*cmath.exp(-1j*k) - hamiltonian[1,0] = v+w*cmath.exp(1j*k) - import guan - guan.statistics_of_guan_package() - return hamiltonian - -# 石墨烯的哈密顿量 -def hamiltonian_of_graphene(k1, k2, staggered_potential=0, t=1, a='default'): - import numpy as np - import cmath - import math - if a == 'default': - a = 1/math.sqrt(3) - h0 = np.zeros((2, 2), dtype=complex) # mass term - h1 = np.zeros((2, 2), dtype=complex) # nearest hopping - h0[0, 0] = staggered_potential - h0[1, 1] = -staggered_potential - h1[1, 0] = t*(cmath.exp(1j*k2*a)+cmath.exp(1j*math.sqrt(3)/2*k1*a-1j/2*k2*a)+cmath.exp(-1j*math.sqrt(3)/2*k1*a-1j/2*k2*a)) - h1[0, 1] = h1[1, 0].conj() - hamiltonian = h0 + h1 - import guan - guan.statistics_of_guan_package() - return hamiltonian - -# 石墨烯有效模型的哈密顿量 -def effective_hamiltonian_of_graphene(qx, qy, t=1, staggered_potential=0, valley_index=0): - import numpy as np - hamiltonian = np.zeros((2, 2), dtype=complex) - hamiltonian[0, 0] = staggered_potential - hamiltonian[1, 1] = -staggered_potential - constant = -np.sqrt(3)/2 - if valley_index == 0: - hamiltonian[0, 1] = constant*t*(qx-1j*qy) - hamiltonian[1, 0] = constant*t*(qx+1j*qy) - else: - hamiltonian[0, 1] = constant*t*(-qx-1j*qy) - hamiltonian[1, 0] = constant*t*(-qx+1j*qy) - import guan - guan.statistics_of_guan_package() - return hamiltonian - -# 石墨烯有效模型离散化后的哈密顿量 -def effective_hamiltonian_of_graphene_after_discretization(qx, qy, t=1, staggered_potential=0, valley_index=0): - import numpy as np - hamiltonian = np.zeros((2, 2), dtype=complex) - hamiltonian[0, 0] = staggered_potential - hamiltonian[1, 1] = -staggered_potential - constant = -np.sqrt(3)/2 - if valley_index == 0: - hamiltonian[0, 1] = constant*t*(np.sin(qx)-1j*np.sin(qy)) - hamiltonian[1, 0] = constant*t*(np.sin(qx)+1j*np.sin(qy)) - else: - hamiltonian[0, 1] = constant*t*(-np.sin(qx)-1j*np.sin(qy)) - hamiltonian[1, 0] = constant*t*(-np.sin(qx)+1j*np.sin(qy)) - import guan - guan.statistics_of_guan_package() - return hamiltonian - -# 准一维Zigzag边石墨烯条带的哈密顿量 -def hamiltonian_of_graphene_with_zigzag_in_quasi_one_dimension(k, N=10, M=0, t=1, period=0): - import numpy as np - import guan - h00 = np.zeros((4*N, 4*N), dtype=complex) # hopping in a unit cell - h01 = np.zeros((4*N, 4*N), dtype=complex) # hopping between unit cells - for i in range(N): - h00[i*4+0, i*4+0] = M - h00[i*4+1, i*4+1] = -M - h00[i*4+2, i*4+2] = M - h00[i*4+3, i*4+3] = -M - h00[i*4+0, i*4+1] = t - h00[i*4+1, i*4+0] = t - h00[i*4+1, i*4+2] = t - h00[i*4+2, i*4+1] = t - h00[i*4+2, i*4+3] = t - h00[i*4+3, i*4+2] = t - for i in range(N-1): - h00[i*4+3, (i+1)*4+0] = t - h00[(i+1)*4+0, i*4+3] = t - if period == 1: - h00[(N-1)*4+3, 0] = t - h00[0, (N-1)*4+3] = t - for i in range(N): - h01[i*4+1, i*4+0] = t - h01[i*4+2, i*4+3] = t - hamiltonian = guan.one_dimensional_fourier_transform(k, unit_cell=h00, hopping=h01) - guan.statistics_of_guan_package() - return hamiltonian - -# Haldane模型的哈密顿量 -def hamiltonian_of_haldane_model(k1, k2, M=2/3, t1=1, t2=1/3, phi='default', a='default'): - import numpy as np - import cmath - import math - if phi == 'default': - phi=math.pi/4 - if a == 'default': - a=1/math.sqrt(3) - h0 = np.zeros((2, 2), dtype=complex) # mass term - h1 = np.zeros((2, 2), dtype=complex) # nearest hopping - h2 = np.zeros((2, 2), dtype=complex) # next nearest hopping - h0[0, 0] = M - h0[1, 1] = -M - h1[1, 0] = t1*(cmath.exp(1j*k2*a)+cmath.exp(1j*math.sqrt(3)/2*k1*a-1j/2*k2*a)+cmath.exp(-1j*math.sqrt(3)/2*k1*a-1j/2*k2*a)) - h1[0, 1] = h1[1, 0].conj() - h2[0, 0] = t2*cmath.exp(-1j*phi)*(cmath.exp(1j*math.sqrt(3)*k1*a)+cmath.exp(-1j*math.sqrt(3)/2*k1*a+1j*3/2*k2*a)+cmath.exp(-1j*math.sqrt(3)/2*k1*a-1j*3/2*k2*a)) - h2[1, 1] = t2*cmath.exp(1j*phi)*(cmath.exp(1j*math.sqrt(3)*k1*a)+cmath.exp(-1j*math.sqrt(3)/2*k1*a+1j*3/2*k2*a)+cmath.exp(-1j*math.sqrt(3)/2*k1*a-1j*3/2*k2*a)) - hamiltonian = h0 + h1 + h2 + h2.transpose().conj() - import guan - guan.statistics_of_guan_package() - return hamiltonian - -# 准一维Haldane模型条带的哈密顿量 -def hamiltonian_of_haldane_model_in_quasi_one_dimension(k, N=10, M=2/3, t1=1, t2=1/3, phi='default', period=0): - import numpy as np - import cmath - import math - if phi == 'default': - phi=math.pi/4 - h00 = np.zeros((4*N, 4*N), dtype=complex) # hopping in a unit cell - h01 = np.zeros((4*N, 4*N), dtype=complex) # hopping between unit cells - for i in range(N): - h00[i*4+0, i*4+0] = M - h00[i*4+1, i*4+1] = -M - h00[i*4+2, i*4+2] = M - h00[i*4+3, i*4+3] = -M - h00[i*4+0, i*4+1] = t1 - h00[i*4+1, i*4+0] = t1 - h00[i*4+1, i*4+2] = t1 - h00[i*4+2, i*4+1] = t1 - h00[i*4+2, i*4+3] = t1 - h00[i*4+3, i*4+2] = t1 - h00[i*4+0, i*4+2] = t2*cmath.exp(-1j*phi) - h00[i*4+2, i*4+0] = h00[i*4+0, i*4+2].conj() - h00[i*4+1, i*4+3] = t2*cmath.exp(-1j*phi) - h00[i*4+3, i*4+1] = h00[i*4+1, i*4+3].conj() - for i in range(N-1): - h00[i*4+3, (i+1)*4+0] = t1 - h00[(i+1)*4+0, i*4+3] = t1 - h00[i*4+2, (i+1)*4+0] = t2*cmath.exp(1j*phi) - h00[(i+1)*4+0, i*4+2] = h00[i*4+2, (i+1)*4+0].conj() - h00[i*4+3, (i+1)*4+1] = t2*cmath.exp(1j*phi) - h00[(i+1)*4+1, i*4+3] = h00[i*4+3, (i+1)*4+1].conj() - if period == 1: - h00[(N-1)*4+3, 0] = t1 - h00[0, (N-1)*4+3] = t1 - h00[(N-1)*4+2, 0] = t2*cmath.exp(1j*phi) - h00[0, (N-1)*4+2] = h00[(N-1)*4+2, 0].conj() - h00[(N-1)*4+3, 1] = t2*cmath.exp(1j*phi) - h00[1, (N-1)*4+3] = h00[(N-1)*4+3, 1].conj() - for i in range(N): - h01[i*4+1, i*4+0] = t1 - h01[i*4+2, i*4+3] = t1 - h01[i*4+0, i*4+0] = t2*cmath.exp(1j*phi) - h01[i*4+1, i*4+1] = t2*cmath.exp(-1j*phi) - h01[i*4+2, i*4+2] = t2*cmath.exp(1j*phi) - h01[i*4+3, i*4+3] = t2*cmath.exp(-1j*phi) - h01[i*4+1, i*4+3] = t2*cmath.exp(1j*phi) - h01[i*4+2, i*4+0] = t2*cmath.exp(-1j*phi) - if i != 0: - h01[i*4+1, (i-1)*4+3] = t2*cmath.exp(1j*phi) - for i in range(N-1): - h01[i*4+2, (i+1)*4+0] = t2*cmath.exp(-1j*phi) - hamiltonian = h00 + h01*cmath.exp(1j*k) + h01.transpose().conj()*cmath.exp(-1j*k) - import guan - guan.statistics_of_guan_package() - return hamiltonian - -# 一个量子反常霍尔效应的哈密顿量 -def hamiltonian_of_one_QAH_model(k1, k2, t1=1, t2=1, t3=0.5, m=-1): - import numpy as np - import math - hamiltonian = np.zeros((2, 2), dtype=complex) - hamiltonian[0, 1] = 2*t1*math.cos(k1)-1j*2*t1*math.cos(k2) - hamiltonian[1, 0] = 2*t1*math.cos(k1)+1j*2*t1*math.cos(k2) - hamiltonian[0, 0] = m+2*t3*math.sin(k1)+2*t3*math.sin(k2)+2*t2*math.cos(k1+k2) - hamiltonian[1, 1] = -(m+2*t3*math.sin(k1)+2*t3*math.sin(k2)+2*t2*math.cos(k1+k2)) - import guan - guan.statistics_of_guan_package() - return hamiltonian - -# BHZ模型的哈密顿量 -def hamiltonian_of_bhz_model(kx, ky, A=0.3645/5, B=-0.686/25, C=0, D=-0.512/25, M=-0.01): - import numpy as np - import math - hamiltonian = np.zeros((4, 4), dtype=complex) - varepsilon = C-2*D*(2-math.cos(kx)-math.cos(ky)) - d3 = -2*B*(2-(M/2/B)-math.cos(kx)-math.cos(ky)) - d1_d2 = A*(math.sin(kx)+1j*math.sin(ky)) - hamiltonian[0, 0] = varepsilon+d3 - hamiltonian[1, 1] = varepsilon-d3 - hamiltonian[0, 1] = np.conj(d1_d2) - hamiltonian[1, 0] = d1_d2 - hamiltonian[2, 2] = varepsilon+d3 - hamiltonian[3, 3] = varepsilon-d3 - hamiltonian[2, 3] = -d1_d2 - hamiltonian[3, 2] = -np.conj(d1_d2) - import guan - guan.statistics_of_guan_package() - return hamiltonian - -# 半BHZ模型的哈密顿量(自旋向上) -def hamiltonian_of_half_bhz_model_for_spin_up(kx, ky, A=0.3645/5, B=-0.686/25, C=0, D=-0.512/25, M=-0.01): - import numpy as np - import math - hamiltonian = np.zeros((2, 2), dtype=complex) - varepsilon = C-2*D*(2-math.cos(kx)-math.cos(ky)) - d3 = -2*B*(2-(M/2/B)-math.cos(kx)-math.cos(ky)) - d1_d2 = A*(math.sin(kx)+1j*math.sin(ky)) - hamiltonian[0, 0] = varepsilon+d3 - hamiltonian[1, 1] = varepsilon-d3 - hamiltonian[0, 1] = np.conj(d1_d2) - hamiltonian[1, 0] = d1_d2 - import guan - guan.statistics_of_guan_package() - return hamiltonian - -# 半BHZ模型的哈密顿量(自旋向下) -def hamiltonian_of_half_bhz_model_for_spin_down(kx, ky, A=0.3645/5, B=-0.686/25, C=0, D=-0.512/25, M=-0.01): - import numpy as np - import math - hamiltonian = np.zeros((2, 2), dtype=complex) - varepsilon = C-2*D*(2-math.cos(kx)-math.cos(ky)) - d3 = -2*B*(2-(M/2/B)-math.cos(kx)-math.cos(ky)) - d1_d2 = A*(math.sin(kx)+1j*math.sin(ky)) - hamiltonian[0, 0] = varepsilon+d3 - hamiltonian[1, 1] = varepsilon-d3 - hamiltonian[0, 1] = -d1_d2 - hamiltonian[1, 0] = -np.conj(d1_d2) - import guan - guan.statistics_of_guan_package() - return hamiltonian - -# BBH模型的哈密顿量 -def hamiltonian_of_bbh_model(kx, ky, gamma_x=0.5, gamma_y=0.5, lambda_x=1, lambda_y=1): - import numpy as np - import cmath - # label of atoms in a unit cell - # (2) —— (0) - # | | - # (1) —— (3) - hamiltonian = np.zeros((4, 4), dtype=complex) - hamiltonian[0, 2] = gamma_x+lambda_x*cmath.exp(1j*kx) - hamiltonian[1, 3] = gamma_x+lambda_x*cmath.exp(-1j*kx) - hamiltonian[0, 3] = gamma_y+lambda_y*cmath.exp(1j*ky) - hamiltonian[1, 2] = -gamma_y-lambda_y*cmath.exp(-1j*ky) - hamiltonian[2, 0] = np.conj(hamiltonian[0, 2]) - hamiltonian[3, 1] = np.conj(hamiltonian[1, 3]) - hamiltonian[3, 0] = np.conj(hamiltonian[0, 3]) - hamiltonian[2, 1] = np.conj(hamiltonian[1, 2]) - import guan - guan.statistics_of_guan_package() - return hamiltonian - -# Kagome模型的哈密顿量 -def hamiltonian_of_kagome_lattice(kx, ky, t=1): - import numpy as np - import math - k1_dot_a1 = kx - k2_dot_a2 = kx/2+ky*math.sqrt(3)/2 - k3_dot_a3 = -kx/2+ky*math.sqrt(3)/2 - hamiltonian = np.zeros((3, 3), dtype=complex) - hamiltonian[0, 1] = 2*math.cos(k1_dot_a1) - hamiltonian[0, 2] = 2*math.cos(k2_dot_a2) - hamiltonian[1, 2] = 2*math.cos(k3_dot_a3) - hamiltonian = hamiltonian + hamiltonian.transpose().conj() - hamiltonian = -t*hamiltonian - import guan - guan.statistics_of_guan_package() - return hamiltonian \ No newline at end of file diff --git a/PyPI/src/guan/__init__.py b/PyPI/src/guan/__init__.py index bef4501..01646fb 100644 --- a/PyPI/src/guan/__init__.py +++ b/PyPI/src/guan/__init__.py @@ -2,15 +2,11 @@ from .basic_functions import * from .Fourier_transform import * -from .Hamiltonian_of_finite_size_systems import * -from .Hamiltonian_of_models_in_reciprocal_space import * +from .Hamiltonian_of_examples import * from .band_structures_and_wave_functions import * from .Green_functions import * from .density_of_states import * from .quantum_transport import * from .topological_invariant import * -from .plot_figures import * -from .read_and_write import * -from .file_processing import * from .data_processing import * from .others import * \ No newline at end of file diff --git a/PyPI/src/guan/band_structures_and_wave_functions.py b/PyPI/src/guan/band_structures_and_wave_functions.py index 7d51264..06b3f77 100644 --- a/PyPI/src/guan/band_structures_and_wave_functions.py +++ b/PyPI/src/guan/band_structures_and_wave_functions.py @@ -154,7 +154,7 @@ def find_vector_array_with_fixed_gauge_by_making_one_component_real(vector_array guan.statistics_of_guan_package() return vector_array -# 旋转两个简并的波函数(说明:参数比较多,效率不高) +# 旋转两个简并的波函数(说明:参数比较多,算法效率不高) def rotation_of_degenerate_vectors(vector1, vector2, index1=None, index2=None, precision=0.01, criterion=0.01, show_theta=0): import numpy as np import math @@ -185,7 +185,7 @@ def rotation_of_degenerate_vectors(vector1, vector2, index1=None, index2=None, p guan.statistics_of_guan_package() return vector1, vector2 -# 旋转两个简并的波函数向量组(说明:参数比较多,效率不高) +# 旋转两个简并的波函数向量组(说明:参数比较多,算法效率不高) def rotation_of_degenerate_vectors_array(vector1_array, vector2_array, precision=0.01, criterion=0.01, show_theta=0): import numpy as np import guan @@ -201,4 +201,35 @@ def rotation_of_degenerate_vectors_array(vector1_array, vector2_array, precision for i0 in range(Num_k): vector1_array[i0], vector2_array[i0] = guan.rotation_of_degenerate_vectors(vector1=vector1_array[i0], vector2=vector2_array[i0], index1=index1, index2=index2, precision=precision, criterion=criterion, show_theta=show_theta) guan.statistics_of_guan_package() - return vector1_array, vector2_array \ No newline at end of file + return vector1_array, vector2_array + +# 在一组数据中找到数值相近的数 +def find_close_values_in_one_array(array, precision=1e-2): + new_array = [] + i0 = 0 + for a1 in array: + j0 = 0 + for a2 in array: + if j0>i0 and abs(a1-a2)i0 and abs(a1-a2)1: - repeated_file.append(item) - import guan - guan.statistics_of_guan_package() - return repeated_file - -# 统计各个子文件夹中的文件数量 -def count_file_in_sub_directory(directory='./', sort=0, reverse=1, print_show=1, smaller_than_num=None): - import os - import numpy as np - dirs_list = [] - for root, dirs, files in os.walk(directory): - if dirs != []: - for i0 in range(len(dirs)): - dirs_list.append(root+'/'+dirs[i0]) - count_file_array = [] - for sub_dir in dirs_list: - file_list = [] - for root, dirs, files in os.walk(sub_dir): - for i0 in range(len(files)): - file_list.append(files[i0]) - count_file = len(file_list) - count_file_array.append(count_file) - if sort == 0: - if print_show == 1: - if smaller_than_num == None: - print(sub_dir) - print(count_file) - print() - else: - if count_file

', html, re.S) - if random_on==1: - random.shuffle(contents) - if reverse==1: - contents.reverse() - for content in contents: - soup2 = BeautifulSoup(content, features='lxml') - all_h2 = soup2.find_all('h2') - for h2 in all_h2: - if re.search('\d*. ', h2.get_text()): - word = re.findall('[a-zA-Z].*', h2.get_text(), re.S)[0] - exist = os.path.exists(directory+word+'.mp3') - if not exist: - try: - if re.search(word, html_file): - r = requests.get("https://file.guanjihuan.com/words/"+directory+word+".mp3", stream=True) - with open(directory+word+'.mp3', 'wb') as f: - for chunk in r.iter_content(chunk_size=32): - f.write(chunk) - except: - pass - print(h2.get_text()) - try: - pygame.mixer.init() - track = pygame.mixer.music.load(directory+word+'.mp3') - pygame.mixer.music.play() - if show_link==1: - print('https://www.ldoceonline.com/dictionary/'+word) - except: - pass - translation = re.findall('

.*?

', content, re.S)[0][3:-4] - if show_translation==1: - time.sleep(translation_time) - print(translation) - time.sleep(rest_time) - pygame.mixer.music.stop() - print() - import guan - guan.statistics_of_guan_package() - -# 播放挑选过后的学术单词 -def play_selected_academic_words(reverse=0, random_on=0, bre_or_ame='ame', show_link=1, rest_time=3): - from bs4 import BeautifulSoup - import re - import urllib.request - import requests - import os - import pygame - import time - import ssl - import random - ssl._create_default_https_context = ssl._create_unverified_context - html = urllib.request.urlopen("https://www.guanjihuan.com/archives/24732").read().decode('utf-8') - if bre_or_ame == 'ame': - directory = 'words_mp3_ameProns/' - elif bre_or_ame == 'bre': - directory = 'words_mp3_breProns/' - exist_directory = os.path.exists(directory) - html_file = urllib.request.urlopen("https://file.guanjihuan.com/words/"+directory).read().decode('utf-8') - if exist_directory == 0: - os.makedirs(directory) - soup = BeautifulSoup(html, features='lxml') - contents = re.findall('
  • \d.*?
  • ', html, re.S) - if random_on==1: - random.shuffle(contents) - if reverse==1: - contents.reverse() - for content in contents: - soup2 = BeautifulSoup(content, features='lxml') - all_li = soup2.find_all('li') - for li in all_li: - if re.search('\d*. ', li.get_text()): - word = re.findall('\s[a-zA-Z].*?\s', li.get_text(), re.S)[0][1:-1] - exist = os.path.exists(directory+word+'.mp3') - if not exist: - try: - if re.search(word, html_file): - r = requests.get("https://file.guanjihuan.com/words/"+directory+word+".mp3", stream=True) - with open(directory+word+'.mp3', 'wb') as f: - for chunk in r.iter_content(chunk_size=32): - f.write(chunk) - except: - pass - print(li.get_text()) - try: - pygame.mixer.init() - track = pygame.mixer.music.load(directory+word+'.mp3') - pygame.mixer.music.play() - if show_link==1: - print('https://www.ldoceonline.com/dictionary/'+word) - except: - pass - time.sleep(rest_time) - pygame.mixer.music.stop() - print() - import guan - guan.statistics_of_guan_package() - -# 播放元素周期表上的单词 -def play_element_words(random_on=0, show_translation=1, show_link=1, translation_time=2, rest_time=1): - from bs4 import BeautifulSoup - import re - import urllib.request - import requests - import os - import pygame - import time - import ssl - import random - ssl._create_default_https_context = ssl._create_unverified_context - html = urllib.request.urlopen("https://www.guanjihuan.com/archives/10897").read().decode('utf-8') - directory = 'prons/' - exist_directory = os.path.exists(directory) - html_file = urllib.request.urlopen("https://file.guanjihuan.com/words/periodic_table_of_elements/"+directory).read().decode('utf-8') - if exist_directory == 0: - os.makedirs(directory) - soup = BeautifulSoup(html, features='lxml') - contents = re.findall('

    ', html, re.S) - if random_on==1: - random.shuffle(contents) - for content in contents: - soup2 = BeautifulSoup(content, features='lxml') - all_h2 = soup2.find_all('h2') - for h2 in all_h2: - if re.search('\d*. ', h2.get_text()): - word = re.findall('[a-zA-Z].* \(', h2.get_text(), re.S)[0][:-2] - exist = os.path.exists(directory+word+'.mp3') - if not exist: - try: - if re.search(word, html_file): - r = requests.get("https://file.guanjihuan.com/words/periodic_table_of_elements/prons/"+word+".mp3", stream=True) - with open(directory+word+'.mp3', 'wb') as f: - for chunk in r.iter_content(chunk_size=32): - f.write(chunk) - except: - pass - print(h2.get_text()) - try: - pygame.mixer.init() - track = pygame.mixer.music.load(directory+word+'.mp3') - pygame.mixer.music.play() - if show_link==1: - print('https://www.merriam-webster.com/dictionary/'+word) - except: - pass - translation = re.findall('

    .*?

    ', content, re.S)[0][3:-4] - if show_translation==1: - time.sleep(translation_time) - print(translation) - time.sleep(rest_time) - pygame.mixer.music.stop() - print() - import guan - guan.statistics_of_guan_package() \ No newline at end of file diff --git a/PyPI/src/guan/others.py b/PyPI/src/guan/others.py index 840b578..f9684a0 100644 --- a/PyPI/src/guan/others.py +++ b/PyPI/src/guan/others.py @@ -1,3 +1,1027 @@ +# Module: others + +# 获取运行的日期和时间并写入文件 +def statistics_with_day_and_time(content='', filename='a', file_format='.txt'): + import datetime + datetime_today = str(datetime.date.today()) + datetime_time = datetime.datetime.now().strftime('%H:%M:%S') + with open(filename+file_format, 'a', encoding="utf-8") as f2: + if content == '': + f2.write(datetime_today+' '+datetime_time+'\n') + else: + f2.write(datetime_today+' '+datetime_time+' '+content+'\n') + import guan + guan.statistics_of_guan_package() + +# 统计Python文件中import的数量并排序 +def count_number_of_import_statements(filename, file_format='.py', num=1000): + with open(filename+file_format, 'r') as file: + lines = file.readlines() + import_array = [] + for line in lines: + if 'import ' in line: + line = line.strip() + import_array.append(line) + from collections import Counter + import_statement_counter = Counter(import_array).most_common(num) + import guan + guan.statistics_of_guan_package() + return import_statement_counter + +# 根据一定的字符长度来分割文本 +def split_text(text, wrap_width=3000): + import textwrap + split_text_list = textwrap.wrap(text, wrap_width) + import guan + guan.statistics_of_guan_package() + return split_text_list + +# 获取CPU使用率 +def get_cpu_usage(interval=1): + import psutil + cpu_usage = psutil.cpu_percent(interval=interval) + import guan + guan.statistics_of_guan_package() + return cpu_usage + +# 获取本月的所有日期 +def get_days_of_the_current_month(str_or_datetime='str'): + import datetime + today = datetime.date.today() + first_day_of_month = today.replace(day=1) + if first_day_of_month.month == 12: + next_month = first_day_of_month.replace(year=first_day_of_month.year + 1, month=1) + else: + next_month = first_day_of_month.replace(month=first_day_of_month.month + 1) + current_date = first_day_of_month + day_array = [] + while current_date < next_month: + if str_or_datetime=='str': + day_array.append(str(current_date)) + elif str_or_datetime=='datetime': + day_array.append(current_date) + current_date += datetime.timedelta(days=1) + import guan + guan.statistics_of_guan_package() + return day_array + +# 获取上个月份 +def get_last_month(): + import datetime + today = datetime.date.today() + last_month = today.month - 1 + if last_month == 0: + last_month = 12 + year_of_last_month = today.year - 1 + else: + year_of_last_month = today.year + import guan + guan.statistics_of_guan_package() + return year_of_last_month, last_month + +# 获取上上个月份 +def get_the_month_before_last(): + import datetime + today = datetime.date.today() + the_month_before_last = today.month - 2 + if the_month_before_last == 0: + the_month_before_last = 12 + year_of_the_month_before_last = today.year - 1 + else: + year_of_the_month_before_last = today.year + if the_month_before_last == -1: + the_month_before_last = 11 + year_of_the_month_before_last = today.year - 1 + else: + year_of_the_month_before_last = today.year + import guan + guan.statistics_of_guan_package() + return year_of_the_month_before_last, the_month_before_last + +# 获取上个月的所有日期 +def get_days_of_the_last_month(str_or_datetime='str'): + import datetime + import guan + today = datetime.date.today() + year_of_last_month, last_month = guan.get_last_month() + first_day_of_month = today.replace(year=year_of_last_month, month=last_month, day=1) + if first_day_of_month.month == 12: + next_month = first_day_of_month.replace(year=first_day_of_month.year + 1, month=1) + else: + next_month = first_day_of_month.replace(month=first_day_of_month.month + 1) + current_date = first_day_of_month + day_array = [] + while current_date < next_month: + if str_or_datetime=='str': + day_array.append(str(current_date)) + elif str_or_datetime=='datetime': + day_array.append(current_date) + current_date += datetime.timedelta(days=1) + guan.statistics_of_guan_package() + return day_array + +# 获取上上个月的所有日期 +def get_days_of_the_month_before_last(str_or_datetime='str'): + import datetime + import guan + today = datetime.date.today() + year_of_last_last_month, last_last_month = guan.get_the_month_before_last() + first_day_of_month = today.replace(year=year_of_last_last_month, month=last_last_month, day=1) + if first_day_of_month.month == 12: + next_month = first_day_of_month.replace(year=first_day_of_month.year + 1, month=1) + else: + next_month = first_day_of_month.replace(month=first_day_of_month.month + 1) + current_date = first_day_of_month + day_array = [] + while current_date < next_month: + if str_or_datetime=='str': + day_array.append(str(current_date)) + elif str_or_datetime=='datetime': + day_array.append(current_date) + current_date += datetime.timedelta(days=1) + guan.statistics_of_guan_package() + return day_array + +# 获取所有股票 +def all_stocks(): + import numpy as np + import akshare as ak + stocks = ak.stock_zh_a_spot_em() + title = np.array(stocks.columns) + stock_data = stocks.values + import guan + guan.statistics_of_guan_package() + return title, stock_data + +# 获取所有股票的代码 +def all_stock_symbols(): + import guan + title, stock_data = guan.all_stocks() + stock_symbols = stock_data[:, 1] + guan.statistics_of_guan_package() + return stock_symbols + +# 从股票代码获取股票名称 +def find_stock_name_from_symbol(symbol='000002'): + import guan + title, stock_data = guan.all_stocks() + for stock in stock_data: + if symbol in stock: + stock_name = stock[2] + guan.statistics_of_guan_package() + return stock_name + +# 获取单个股票的历史数据 +def history_data_of_one_stock(symbol='000002', period='daily', start_date="19000101", end_date='21000101'): + # period = 'daily' + # period = 'weekly' + # period = 'monthly' + import numpy as np + import akshare as ak + stock = ak.stock_zh_a_hist(symbol=symbol, period=period, start_date=start_date, end_date=end_date) + title = np.array(stock.columns) + stock_data = stock.values[::-1] + import guan + guan.statistics_of_guan_package() + return title, stock_data + +# 获取软件包中的所有模块名 +def get_all_modules_in_one_package(package_name='guan'): + import pkgutil + package = __import__(package_name) + module_names = [name for _, name, _ in pkgutil.iter_modules(package.__path__)] + import guan + guan.statistics_of_guan_package() + return module_names + +# 获取软件包中一个模块的所有函数名 +def get_all_functions_in_one_module(module_name, package_name='guan'): + import inspect + function_names = [] + module = __import__(f"{package_name}.{module_name}", fromlist=[""]) + for name, obj in inspect.getmembers(module): + if inspect.isfunction(obj): + function_names.append(name) + import guan + guan.statistics_of_guan_package() + return function_names + +# 获取软件包中的所有函数名 +def get_all_functions_in_one_package(package_name='guan', print_show=1): + import guan + module_names = guan.get_all_modules_in_one_package(package_name=package_name) + all_function_names = [] + for module_name in module_names: + function_names = guan.get_all_functions_in_one_module(module_name, package_name='guan') + if print_show == 1: + print('Module:', module_name) + for name in function_names: + all_function_names.append(name) + if print_show == 1: + print('function:', name) + if print_show == 1: + print() + guan.statistics_of_guan_package() + return all_function_names + +# 获取包含某个字符的进程PID值 +def get_PID(name): + import subprocess + command = "ps -ef | grep "+name + result = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) + if result.returncode == 0: + ps_ef = result.stdout + import re + ps_ef = re.split(r'\s+', ps_ef) + id_running = ps_ef[1] + import guan + guan.statistics_of_guan_package() + return id_running + +# 在服务器上运行函数(说明:接口服务可能为关闭状态,如果无法使用请联系管理员。目前仅支持长度较短的函数,此外由于服务器只获取一个函数内的代码,因此需要函数是独立的可运行的代码。需要注意的是:返回的值是字符串类型,需要自行转换成数字类型。) +def run(function_name, args=(), return_show=0, get_print=1): + import socket + import json + import guan + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client_socket: + client_socket.connect(('socket.guanjihuan.com', 12345)) + function_source = guan.get_function_source(function_name) + message = { + 'server': "python", + 'function_name': function_name.__name__, + 'function_source': function_source, + 'args': str(args), + 'get_print': get_print, + } + send_message = json.dumps(message) + client_socket.send(send_message.encode()) + return_data = None + while True: + try: + data = client_socket.recv(1024) + return_text = data.decode() + return_dict = json.loads(return_text) + return_data = return_dict['return_data'] + print_data = return_dict['print_data'] + end_message = return_dict['end_message'] + if get_print == 1: + print(print_data) + if return_show == 1: + print(return_data) + if end_message == 1 or return_text == '': + break + except: + break + client_socket.close() + guan.statistics_of_guan_package() + return return_data + +# 在服务器上运行大语言模型,通过Python函数调用(说明:接口服务可能为关闭状态,如果无法使用请联系管理员) +def chat(prompt='你好', stream_show=1, top_p=0.8, temperature=0.8): + import socket + import json + response = '' + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client_socket: + client_socket.settimeout(15) + client_socket.connect(('socket.guanjihuan.com', 12345)) + message = { + 'server': "chat.guanjihuan.com", + 'prompt': prompt, + 'top_p': top_p, + 'temperature': temperature, + } + send_message = json.dumps(message) + client_socket.send(send_message.encode()) + while True: + try: + data = client_socket.recv(1024) + stream_response = data.decode() + response_dict = json.loads(stream_response) + stream_response = response_dict['response'] + end_message = response_dict['end_message'] + if end_message == 1: + break + elif stream_response == '': + break + else: + if stream_show == 1: + print(stream_response) + print('\n---\n') + response = stream_response + except: + break + client_socket.close() + import guan + guan.statistics_of_guan_package() + return response + +# 查找文件名相同的文件 +def find_repeated_file_with_same_filename(directory='./', ignored_directory_with_words=[], ignored_file_with_words=[], num=1000): + import os + from collections import Counter + file_list = [] + for root, dirs, files in os.walk(directory): + for i0 in range(len(files)): + file_list.append(files[i0]) + for word in ignored_directory_with_words: + if word in root: + file_list.remove(files[i0]) + for word in ignored_file_with_words: + if word in files[i0]: + try: + file_list.remove(files[i0]) + except: + pass + count_file = Counter(file_list).most_common(num) + repeated_file = [] + for item in count_file: + if item[1]>1: + repeated_file.append(item) + import guan + guan.statistics_of_guan_package() + return repeated_file + +# 统计各个子文件夹中的文件数量 +def count_file_in_sub_directory(directory='./', sort=0, reverse=1, print_show=1, smaller_than_num=None): + import os + import numpy as np + dirs_list = [] + for root, dirs, files in os.walk(directory): + if dirs != []: + for i0 in range(len(dirs)): + dirs_list.append(root+'/'+dirs[i0]) + count_file_array = [] + for sub_dir in dirs_list: + file_list = [] + for root, dirs, files in os.walk(sub_dir): + for i0 in range(len(files)): + file_list.append(files[i0]) + count_file = len(file_list) + count_file_array.append(count_file) + if sort == 0: + if print_show == 1: + if smaller_than_num == None: + print(sub_dir) + print(count_file) + print() + else: + if count_file

    ', html, re.S) + if random_on==1: + random.shuffle(contents) + if reverse==1: + contents.reverse() + for content in contents: + soup2 = BeautifulSoup(content, features='lxml') + all_h2 = soup2.find_all('h2') + for h2 in all_h2: + if re.search('\d*. ', h2.get_text()): + word = re.findall('[a-zA-Z].*', h2.get_text(), re.S)[0] + exist = os.path.exists(directory+word+'.mp3') + if not exist: + try: + if re.search(word, html_file): + r = requests.get("https://file.guanjihuan.com/words/"+directory+word+".mp3", stream=True) + with open(directory+word+'.mp3', 'wb') as f: + for chunk in r.iter_content(chunk_size=32): + f.write(chunk) + except: + pass + print(h2.get_text()) + try: + pygame.mixer.init() + track = pygame.mixer.music.load(directory+word+'.mp3') + pygame.mixer.music.play() + if show_link==1: + print('https://www.ldoceonline.com/dictionary/'+word) + except: + pass + translation = re.findall('

    .*?

    ', content, re.S)[0][3:-4] + if show_translation==1: + time.sleep(translation_time) + print(translation) + time.sleep(rest_time) + pygame.mixer.music.stop() + print() + import guan + guan.statistics_of_guan_package() + +# 播放挑选过后的学术单词 +def play_selected_academic_words(reverse=0, random_on=0, bre_or_ame='ame', show_link=1, rest_time=3): + from bs4 import BeautifulSoup + import re + import urllib.request + import requests + import os + import pygame + import time + import ssl + import random + ssl._create_default_https_context = ssl._create_unverified_context + html = urllib.request.urlopen("https://www.guanjihuan.com/archives/24732").read().decode('utf-8') + if bre_or_ame == 'ame': + directory = 'words_mp3_ameProns/' + elif bre_or_ame == 'bre': + directory = 'words_mp3_breProns/' + exist_directory = os.path.exists(directory) + html_file = urllib.request.urlopen("https://file.guanjihuan.com/words/"+directory).read().decode('utf-8') + if exist_directory == 0: + os.makedirs(directory) + soup = BeautifulSoup(html, features='lxml') + contents = re.findall('
  • \d.*?
  • ', html, re.S) + if random_on==1: + random.shuffle(contents) + if reverse==1: + contents.reverse() + for content in contents: + soup2 = BeautifulSoup(content, features='lxml') + all_li = soup2.find_all('li') + for li in all_li: + if re.search('\d*. ', li.get_text()): + word = re.findall('\s[a-zA-Z].*?\s', li.get_text(), re.S)[0][1:-1] + exist = os.path.exists(directory+word+'.mp3') + if not exist: + try: + if re.search(word, html_file): + r = requests.get("https://file.guanjihuan.com/words/"+directory+word+".mp3", stream=True) + with open(directory+word+'.mp3', 'wb') as f: + for chunk in r.iter_content(chunk_size=32): + f.write(chunk) + except: + pass + print(li.get_text()) + try: + pygame.mixer.init() + track = pygame.mixer.music.load(directory+word+'.mp3') + pygame.mixer.music.play() + if show_link==1: + print('https://www.ldoceonline.com/dictionary/'+word) + except: + pass + time.sleep(rest_time) + pygame.mixer.music.stop() + print() + import guan + guan.statistics_of_guan_package() + +# 播放元素周期表上的单词 +def play_element_words(random_on=0, show_translation=1, show_link=1, translation_time=2, rest_time=1): + from bs4 import BeautifulSoup + import re + import urllib.request + import requests + import os + import pygame + import time + import ssl + import random + ssl._create_default_https_context = ssl._create_unverified_context + html = urllib.request.urlopen("https://www.guanjihuan.com/archives/10897").read().decode('utf-8') + directory = 'prons/' + exist_directory = os.path.exists(directory) + html_file = urllib.request.urlopen("https://file.guanjihuan.com/words/periodic_table_of_elements/"+directory).read().decode('utf-8') + if exist_directory == 0: + os.makedirs(directory) + soup = BeautifulSoup(html, features='lxml') + contents = re.findall('

    ', html, re.S) + if random_on==1: + random.shuffle(contents) + for content in contents: + soup2 = BeautifulSoup(content, features='lxml') + all_h2 = soup2.find_all('h2') + for h2 in all_h2: + if re.search('\d*. ', h2.get_text()): + word = re.findall('[a-zA-Z].* \(', h2.get_text(), re.S)[0][:-2] + exist = os.path.exists(directory+word+'.mp3') + if not exist: + try: + if re.search(word, html_file): + r = requests.get("https://file.guanjihuan.com/words/periodic_table_of_elements/prons/"+word+".mp3", stream=True) + with open(directory+word+'.mp3', 'wb') as f: + for chunk in r.iter_content(chunk_size=32): + f.write(chunk) + except: + pass + print(h2.get_text()) + try: + pygame.mixer.init() + track = pygame.mixer.music.load(directory+word+'.mp3') + pygame.mixer.music.play() + if show_link==1: + print('https://www.merriam-webster.com/dictionary/'+word) + except: + pass + translation = re.findall('

    .*?

    ', content, re.S)[0][3:-4] + if show_translation==1: + time.sleep(translation_time) + print(translation) + time.sleep(rest_time) + pygame.mixer.music.stop() + print() + import guan + guan.statistics_of_guan_package() + +# Guan软件包的使用统计(不涉及到用户的个人数据) +global_variable_of_first_guan_package_calling = [] +def statistics_of_guan_package(): + import guan + function_name = guan.get_calling_function_name(layer=2) + global global_variable_of_first_guan_package_calling + if function_name not in global_variable_of_first_guan_package_calling: + global_variable_of_first_guan_package_calling.append(function_name) + function_calling_name = guan.get_calling_function_name(layer=3) + if function_calling_name == '': + try: + import socket + datetime_date = guan.get_date() + datetime_time = guan.get_time() + current_version = guan.get_current_version('guan') + client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + client_socket.settimeout(0.5) + client_socket.connect(('socket.guanjihuan.com', 12345)) + mac_address = guan.get_mac_address() + message = { + 'server': 'py.guanjihuan.com', + 'date': datetime_date, + 'time': datetime_time, + 'version': current_version, + 'MAC_address': mac_address, + 'function_name': function_name + } + import json + send_message = json.dumps(message) + client_socket.send(send_message.encode()) + client_socket.close() + except: + pass + # 获取当前日期字符串 def get_date(bar=True): import datetime @@ -34,40 +1058,6 @@ def get_calling_function_name(layer=1): calling_function_name = caller.function return calling_function_name -# Guan软件包的使用统计(不涉及到用户的个人数据) -global_variable_of_first_guan_package_calling = [] -def statistics_of_guan_package(): - import guan - function_name = guan.get_calling_function_name(layer=2) - global global_variable_of_first_guan_package_calling - if function_name not in global_variable_of_first_guan_package_calling: - global_variable_of_first_guan_package_calling.append(function_name) - function_calling_name = guan.get_calling_function_name(layer=3) - if function_calling_name == '': - try: - import socket - datetime_date = guan.get_date() - datetime_time = guan.get_time() - current_version = guan.get_current_version('guan') - client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - client_socket.settimeout(0.5) - client_socket.connect(('socket.guanjihuan.com', 12345)) - mac_address = guan.get_mac_address() - message = { - 'server': 'py.guanjihuan.com', - 'date': datetime_date, - 'time': datetime_time, - 'version': current_version, - 'MAC_address': mac_address, - 'function_name': function_name - } - import json - send_message = json.dumps(message) - client_socket.send(send_message.encode()) - client_socket.close() - except: - pass - # 获取Python软件包的最新版本 def get_latest_version(package_name='guan', timeout=2): import requests diff --git a/PyPI/src/guan/plot_figures.py b/PyPI/src/guan/plot_figures.py deleted file mode 100644 index 229a262..0000000 --- a/PyPI/src/guan/plot_figures.py +++ /dev/null @@ -1,413 +0,0 @@ -# Module: plot_figures - -# 导入plt, fig, ax -def import_plt_and_start_fig_ax(adjust_bottom=0.2, adjust_left=0.2, labelsize=20): - import matplotlib.pyplot as plt - fig, ax = plt.subplots() - plt.subplots_adjust(bottom=adjust_bottom, left=adjust_left) - ax.grid() - ax.tick_params(labelsize=labelsize) - labels = ax.get_xticklabels() + ax.get_yticklabels() - [label.set_fontname('Times New Roman') for label in labels] - import guan - guan.statistics_of_guan_package() - return plt, fig, ax - -# 基于plt, fig, ax开始画图 -def plot_without_starting_fig(plt, fig, ax, x_array, y_array, xlabel='x', ylabel='y', title='', fontsize=20, style='', y_min=None, y_max=None, linewidth=None, markersize=None, color=None): - if color==None: - ax.plot(x_array, y_array, style, linewidth=linewidth, markersize=markersize) - else: - ax.plot(x_array, y_array, style, linewidth=linewidth, markersize=markersize, color=color) - ax.set_title(title, fontsize=fontsize, fontfamily='Times New Roman') - ax.set_xlabel(xlabel, fontsize=fontsize, fontfamily='Times New Roman') - ax.set_ylabel(ylabel, fontsize=fontsize, fontfamily='Times New Roman') - if y_min!=None or y_max!=None: - if y_min==None: - y_min=min(y_array) - if y_max==None: - y_max=max(y_array) - ax.set_ylim(y_min, y_max) - import guan - guan.statistics_of_guan_package() - -# 画图 -def plot(x_array, y_array, xlabel='x', ylabel='y', title='', fontsize=20, labelsize=20, show=1, save=0, filename='a', file_format='.jpg', dpi=300, style='', y_min=None, y_max=None, linewidth=None, markersize=None, adjust_bottom=0.2, adjust_left=0.2): - import guan - plt, fig, ax = guan.import_plt_and_start_fig_ax(adjust_bottom=adjust_bottom, adjust_left=adjust_left, labelsize=labelsize) - ax.plot(x_array, y_array, style, linewidth=linewidth, markersize=markersize) - ax.set_title(title, fontsize=fontsize, fontfamily='Times New Roman') - ax.set_xlabel(xlabel, fontsize=fontsize, fontfamily='Times New Roman') - ax.set_ylabel(ylabel, fontsize=fontsize, fontfamily='Times New Roman') - if y_min!=None or y_max!=None: - if y_min==None: - y_min=min(y_array) - if y_max==None: - y_max=max(y_array) - ax.set_ylim(y_min, y_max) - if save == 1: - plt.savefig(filename+file_format, dpi=dpi) - if show == 1: - plt.show() - plt.close('all') - guan.statistics_of_guan_package() - -# 一组横坐标数据,两组纵坐标数据画图 -def plot_two_array(x_array, y1_array, y2_array, xlabel='x', ylabel='y', title='', fontsize=20, labelsize=20, show=1, save=0, filename='a', file_format='.jpg', dpi=300, style_1='', style_2='', y_min=None, y_max=None, linewidth_1=None, linewidth_2=None, markersize_1=None, markersize_2=None, adjust_bottom=0.2, adjust_left=0.2): - import guan - plt, fig, ax = guan.import_plt_and_start_fig_ax(adjust_bottom=adjust_bottom, adjust_left=adjust_left, labelsize=labelsize) - ax.plot(x_array, y1_array, style_1, linewidth=linewidth_1, markersize=markersize_1) - ax.plot(x_array, y2_array, style_2, linewidth=linewidth_2, markersize=markersize_2) - ax.set_title(title, fontsize=fontsize, fontfamily='Times New Roman') - ax.set_xlabel(xlabel, fontsize=fontsize, fontfamily='Times New Roman') - ax.set_ylabel(ylabel, fontsize=fontsize, fontfamily='Times New Roman') - if y_min!=None or y_max!=None: - if y_min==None: - y1_min=min(y1_array) - y2_min=min(y2_array) - y_min=min([y1_min, y2_min]) - if y_max==None: - y1_max=max(y1_array) - y2_max=max(y2_array) - y_max=max([y1_max, y2_max]) - ax.set_ylim(y_min, y_max) - if save == 1: - plt.savefig(filename+file_format, dpi=dpi) - if show == 1: - plt.show() - plt.close('all') - guan.statistics_of_guan_package() - -# 两组横坐标数据,两组纵坐标数据画图 -def plot_two_array_with_two_horizontal_array(x1_array, x2_array, y1_array, y2_array, xlabel='x', ylabel='y', title='', fontsize=20, labelsize=20, show=1, save=0, filename='a', file_format='.jpg', dpi=300, style_1='', style_2='', y_min=None, y_max=None, linewidth_1=None, linewidth_2=None, markersize_1=None, markersize_2=None, adjust_bottom=0.2, adjust_left=0.2): - import guan - plt, fig, ax = guan.import_plt_and_start_fig_ax(adjust_bottom=adjust_bottom, adjust_left=adjust_left, labelsize=labelsize) - ax.plot(x1_array, y1_array, style_1, linewidth=linewidth_1, markersize=markersize_1) - ax.plot(x2_array, y2_array, style_2, linewidth=linewidth_2, markersize=markersize_2) - ax.set_title(title, fontsize=fontsize, fontfamily='Times New Roman') - ax.set_xlabel(xlabel, fontsize=fontsize, fontfamily='Times New Roman') - ax.set_ylabel(ylabel, fontsize=fontsize, fontfamily='Times New Roman') - if y_min!=None or y_max!=None: - if y_min==None: - y1_min=min(y1_array) - y2_min=min(y2_array) - y_min=min([y1_min, y2_min]) - if y_max==None: - y1_max=max(y1_array) - y2_max=max(y2_array) - y_max=max([y1_max, y2_max]) - ax.set_ylim(y_min, y_max) - if save == 1: - plt.savefig(filename+file_format, dpi=dpi) - if show == 1: - plt.show() - plt.close('all') - guan.statistics_of_guan_package() - -# 一组横坐标数据,三组纵坐标数据画图 -def plot_three_array(x_array, y1_array, y2_array, y3_array, xlabel='x', ylabel='y', title='', fontsize=20, labelsize=20, show=1, save=0, filename='a', file_format='.jpg', dpi=300, style_1='', style_2='', style_3='', y_min=None, y_max=None, linewidth_1=None, linewidth_2=None, linewidth_3=None,markersize_1=None, markersize_2=None, markersize_3=None, adjust_bottom=0.2, adjust_left=0.2): - import guan - plt, fig, ax = guan.import_plt_and_start_fig_ax(adjust_bottom=adjust_bottom, adjust_left=adjust_left, labelsize=labelsize) - ax.plot(x_array, y1_array, style_1, linewidth=linewidth_1, markersize=markersize_1) - ax.plot(x_array, y2_array, style_2, linewidth=linewidth_2, markersize=markersize_2) - ax.plot(x_array, y3_array, style_3, linewidth=linewidth_3, markersize=markersize_3) - ax.set_title(title, fontsize=fontsize, fontfamily='Times New Roman') - ax.set_xlabel(xlabel, fontsize=fontsize, fontfamily='Times New Roman') - ax.set_ylabel(ylabel, fontsize=fontsize, fontfamily='Times New Roman') - if y_min!=None or y_max!=None: - if y_min==None: - y1_min=min(y1_array) - y2_min=min(y2_array) - y3_min=min(y3_array) - y_min=min([y1_min, y2_min, y3_min]) - if y_max==None: - y1_max=max(y1_array) - y2_max=max(y2_array) - y3_max=max(y3_array) - y_max=max([y1_max, y2_max, y3_max]) - ax.set_ylim(y_min, y_max) - if save == 1: - plt.savefig(filename+file_format, dpi=dpi) - if show == 1: - plt.show() - plt.close('all') - guan.statistics_of_guan_package() - -# 三组横坐标数据,三组纵坐标数据画图 -def plot_three_array_with_three_horizontal_array(x1_array, x2_array, x3_array, y1_array, y2_array, y3_array, xlabel='x', ylabel='y', title='', fontsize=20, labelsize=20, show=1, save=0, filename='a', file_format='.jpg', dpi=300, style_1='', style_2='', style_3='', y_min=None, y_max=None, linewidth_1=None, linewidth_2=None, linewidth_3=None,markersize_1=None, markersize_2=None, markersize_3=None, adjust_bottom=0.2, adjust_left=0.2): - import guan - plt, fig, ax = guan.import_plt_and_start_fig_ax(adjust_bottom=adjust_bottom, adjust_left=adjust_left, labelsize=labelsize) - ax.plot(x1_array, y1_array, style_1, linewidth=linewidth_1, markersize=markersize_1) - ax.plot(x2_array, y2_array, style_2, linewidth=linewidth_2, markersize=markersize_2) - ax.plot(x3_array, y3_array, style_3, linewidth=linewidth_3, markersize=markersize_3) - ax.set_title(title, fontsize=fontsize, fontfamily='Times New Roman') - ax.set_xlabel(xlabel, fontsize=fontsize, fontfamily='Times New Roman') - ax.set_ylabel(ylabel, fontsize=fontsize, fontfamily='Times New Roman') - if y_min!=None or y_max!=None: - if y_min==None: - y1_min=min(y1_array) - y2_min=min(y2_array) - y3_min=min(y3_array) - y_min=min([y1_min, y2_min, y3_min]) - if y_max==None: - y1_max=max(y1_array) - y2_max=max(y2_array) - y3_max=max(y3_array) - y_max=max([y1_max, y2_max, y3_max]) - ax.set_ylim(y_min, y_max) - if save == 1: - plt.savefig(filename+file_format, dpi=dpi) - if show == 1: - plt.show() - plt.close('all') - guan.statistics_of_guan_package() - -# 画三维图 -def plot_3d_surface(x_array, y_array, matrix, xlabel='x', ylabel='y', zlabel='z', title='', fontsize=20, labelsize=15, show=1, save=0, filename='a', file_format='.jpg', dpi=300, z_min=None, z_max=None, rcount=100, ccount=100): - import numpy as np - import matplotlib.pyplot as plt - from matplotlib import cm - from matplotlib.ticker import LinearLocator - matrix = np.array(matrix) - fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) - plt.subplots_adjust(bottom=0.1, right=0.65) - x_array, y_array = np.meshgrid(x_array, y_array) - if len(matrix.shape) == 2: - surf = ax.plot_surface(x_array, y_array, matrix, rcount=rcount, ccount=ccount, cmap=cm.coolwarm, linewidth=0, antialiased=False) - elif len(matrix.shape) == 3: - for i0 in range(matrix.shape[2]): - surf = ax.plot_surface(x_array, y_array, matrix[:,:,i0], rcount=rcount, ccount=ccount, cmap=cm.coolwarm, linewidth=0, antialiased=False) - ax.set_title(title, fontsize=fontsize, fontfamily='Times New Roman') - ax.set_xlabel(xlabel, fontsize=fontsize, fontfamily='Times New Roman') - ax.set_ylabel(ylabel, fontsize=fontsize, fontfamily='Times New Roman') - ax.set_zlabel(zlabel, fontsize=fontsize, fontfamily='Times New Roman') - ax.zaxis.set_major_locator(LinearLocator(5)) - ax.zaxis.set_major_formatter('{x:.2f}') - if z_min!=None or z_max!=None: - if z_min==None: - z_min=matrix.min() - if z_max==None: - z_max=matrix.max() - ax.set_zlim(z_min, z_max) - ax.tick_params(labelsize=labelsize) - labels = ax.get_xticklabels() + ax.get_yticklabels() + ax.get_zticklabels() - [label.set_fontname('Times New Roman') for label in labels] - cax = plt.axes([0.8, 0.1, 0.05, 0.8]) - cbar = fig.colorbar(surf, cax=cax) - cbar.ax.tick_params(labelsize=labelsize) - for l in cbar.ax.yaxis.get_ticklabels(): - l.set_family('Times New Roman') - if save == 1: - plt.savefig(filename+file_format, dpi=dpi) - if show == 1: - plt.show() - plt.close('all') - import guan - guan.statistics_of_guan_package() - -# 画Contour图 -def plot_contour(x_array, y_array, matrix, xlabel='x', ylabel='y', title='', fontsize=20, labelsize=15, cmap='jet', levels=None, show=1, save=0, filename='a', file_format='.jpg', dpi=300): - import numpy as np - import matplotlib.pyplot as plt - fig, ax = plt.subplots() - plt.subplots_adjust(bottom=0.2, right=0.75, left=0.2) - x_array, y_array = np.meshgrid(x_array, y_array) - contour = ax.contourf(x_array,y_array,matrix,cmap=cmap, levels=levels) - ax.set_title(title, fontsize=fontsize, fontfamily='Times New Roman') - ax.set_xlabel(xlabel, fontsize=fontsize, fontfamily='Times New Roman') - ax.set_ylabel(ylabel, fontsize=fontsize, fontfamily='Times New Roman') - ax.tick_params(labelsize=labelsize) - labels = ax.get_xticklabels() + ax.get_yticklabels() - [label.set_fontname('Times New Roman') for label in labels] - cax = plt.axes([0.8, 0.2, 0.05, 0.68]) - cbar = fig.colorbar(contour, cax=cax) - cbar.ax.tick_params(labelsize=labelsize) - for l in cbar.ax.yaxis.get_ticklabels(): - l.set_family('Times New Roman') - if save == 1: - plt.savefig(filename+file_format, dpi=dpi) - if show == 1: - plt.show() - plt.close('all') - import guan - guan.statistics_of_guan_package() - -# 画棋盘图/伪彩色图 -def plot_pcolor(x_array, y_array, matrix, xlabel='x', ylabel='y', title='', fontsize=20, labelsize=15, cmap='jet', levels=None, show=1, save=0, filename='a', file_format='.jpg', dpi=300): - import numpy as np - import matplotlib.pyplot as plt - fig, ax = plt.subplots() - plt.subplots_adjust(bottom=0.2, right=0.75, left=0.2) - x_array, y_array = np.meshgrid(x_array, y_array) - contour = ax.pcolor(x_array,y_array,matrix, cmap=cmap) - ax.set_title(title, fontsize=fontsize, fontfamily='Times New Roman') - ax.set_xlabel(xlabel, fontsize=fontsize, fontfamily='Times New Roman') - ax.set_ylabel(ylabel, fontsize=fontsize, fontfamily='Times New Roman') - ax.tick_params(labelsize=labelsize) - labels = ax.get_xticklabels() + ax.get_yticklabels() - [label.set_fontname('Times New Roman') for label in labels] - cax = plt.axes([0.8, 0.2, 0.05, 0.68]) - cbar = fig.colorbar(contour, cax=cax) - cbar.ax.tick_params(labelsize=labelsize) - for l in cbar.ax.yaxis.get_ticklabels(): - l.set_family('Times New Roman') - if save == 1: - plt.savefig(filename+file_format, dpi=dpi) - if show == 1: - plt.show() - plt.close('all') - import guan - guan.statistics_of_guan_package() - -# 通过坐标画点和线 -def draw_dots_and_lines(coordinate_array, draw_dots=1, draw_lines=1, max_distance=1.1, line_style='-k', linewidth=1, dot_style='ro', markersize=3, show=1, save=0, filename='a', file_format='.eps', dpi=300): - import numpy as np - import matplotlib.pyplot as plt - coordinate_array = np.array(coordinate_array) - print(coordinate_array.shape) - x_range = max(coordinate_array[:, 0])-min(coordinate_array[:, 0]) - y_range = max(coordinate_array[:, 1])-min(coordinate_array[:, 1]) - fig, ax = plt.subplots(figsize=(6*x_range/y_range,6)) - plt.subplots_adjust(left=0, bottom=0, right=1, top=1) - plt.axis('off') - if draw_lines==1: - for i1 in range(coordinate_array.shape[0]): - for i2 in range(coordinate_array.shape[0]): - if np.sqrt((coordinate_array[i1, 0] - coordinate_array[i2, 0])**2+(coordinate_array[i1, 1] - coordinate_array[i2, 1])**2) < max_distance: - ax.plot([coordinate_array[i1, 0], coordinate_array[i2, 0]], [coordinate_array[i1, 1], coordinate_array[i2, 1]], line_style, linewidth=linewidth) - if draw_dots==1: - for i in range(coordinate_array.shape[0]): - ax.plot(coordinate_array[i, 0], coordinate_array[i, 1], dot_style, markersize=markersize) - if show==1: - plt.show() - if save==1: - if file_format=='.eps': - plt.savefig(filename+file_format) - else: - plt.savefig(filename+file_format, dpi=dpi) - import guan - guan.statistics_of_guan_package() - -# 合并两个图片 -def combine_two_images(image_path_array, figsize=(16,8), show=0, save=1, filename='a', file_format='.jpg', dpi=300): - import numpy as np - num = np.array(image_path_array).shape[0] - if num != 2: - print('Error: The number of images should be two!') - else: - import matplotlib.pyplot as plt - import matplotlib.image as mpimg - fig = plt.figure(figsize=figsize) - plt.subplots_adjust(left=0, right=1, bottom=0, top=1, wspace=0, hspace=0) - ax1 = fig.add_subplot(121) - ax2 = fig.add_subplot(122) - image_1 = mpimg.imread(image_path_array[0]) - image_2 = mpimg.imread(image_path_array[1]) - ax1.imshow(image_1) - ax2.imshow(image_2) - ax1.axis('off') - ax2.axis('off') - if show == 1: - plt.show() - if save == 1: - plt.savefig(filename+file_format, dpi=dpi) - plt.close('all') - import guan - guan.statistics_of_guan_package() - -# 合并三个图片 -def combine_three_images(image_path_array, figsize=(16,5), show=0, save=1, filename='a', file_format='.jpg', dpi=300): - import numpy as np - num = np.array(image_path_array).shape[0] - if num != 3: - print('Error: The number of images should be three!') - else: - import matplotlib.pyplot as plt - import matplotlib.image as mpimg - fig = plt.figure(figsize=figsize) - plt.subplots_adjust(left=0, right=1, bottom=0, top=1, wspace=0, hspace=0) - ax1 = fig.add_subplot(131) - ax2 = fig.add_subplot(132) - ax3 = fig.add_subplot(133) - image_1 = mpimg.imread(image_path_array[0]) - image_2 = mpimg.imread(image_path_array[1]) - image_3 = mpimg.imread(image_path_array[2]) - ax1.imshow(image_1) - ax2.imshow(image_2) - ax3.imshow(image_3) - ax1.axis('off') - ax2.axis('off') - ax3.axis('off') - if show == 1: - plt.show() - if save == 1: - plt.savefig(filename+file_format, dpi=dpi) - plt.close('all') - import guan - guan.statistics_of_guan_package() - -# 合并四个图片 -def combine_four_images(image_path_array, figsize=(16,16), show=0, save=1, filename='a', file_format='.jpg', dpi=300): - import numpy as np - num = np.array(image_path_array).shape[0] - if num != 4: - print('Error: The number of images should be four!') - else: - import matplotlib.pyplot as plt - import matplotlib.image as mpimg - fig = plt.figure(figsize=figsize) - plt.subplots_adjust(left=0, right=1, bottom=0, top=1, wspace=0, hspace=0) - ax1 = fig.add_subplot(221) - ax2 = fig.add_subplot(222) - ax3 = fig.add_subplot(223) - ax4 = fig.add_subplot(224) - image_1 = mpimg.imread(image_path_array[0]) - image_2 = mpimg.imread(image_path_array[1]) - image_3 = mpimg.imread(image_path_array[2]) - image_4 = mpimg.imread(image_path_array[3]) - ax1.imshow(image_1) - ax2.imshow(image_2) - ax3.imshow(image_3) - ax4.imshow(image_4) - ax1.axis('off') - ax2.axis('off') - ax3.axis('off') - ax4.axis('off') - if show == 1: - plt.show() - if save == 1: - plt.savefig(filename+file_format, dpi=dpi) - plt.close('all') - import guan - guan.statistics_of_guan_package() - -# 对于某个目录中的txt文件,批量读取和画图 -def batch_reading_and_plotting(directory, xlabel='x', ylabel='y'): - import re - import os - import guan - for root, dirs, files in os.walk(directory): - for file in files: - if re.search('^txt.', file[::-1]): - filename = file[:-4] - x_array, y_array = guan.read_one_dimensional_data(filename=filename) - guan.plot(x_array, y_array, xlabel=xlabel, ylabel=ylabel, title=filename, show=0, save=1, filename=filename) - guan.statistics_of_guan_package() - -# 制作GIF动画 -def make_gif(image_path_array, filename='a', duration=0.1): - import imageio - images = [] - for image_path in image_path_array: - im = imageio.imread(image_path) - images.append(im) - imageio.mimsave(filename+'.gif', images, 'GIF', duration=duration) - import guan - guan.statistics_of_guan_package() - -# 选取颜色 -def color_matplotlib(): - color_array = ['tab:blue', 'tab:orange', 'tab:green', 'tab:red', 'tab:purple', 'tab:brown', 'tab:pink', 'tab:gray', 'tab:olive', 'tab:cyan'] - import guan - guan.statistics_of_guan_package() - return color_array \ No newline at end of file diff --git a/PyPI/src/guan/quantum_transport.py b/PyPI/src/guan/quantum_transport.py index c8c802b..4df3b65 100644 --- a/PyPI/src/guan/quantum_transport.py +++ b/PyPI/src/guan/quantum_transport.py @@ -479,7 +479,7 @@ def calculate_scattering_matrix_and_get_information(fermi_energy, h00, h01, leng return number_of_active_channels, number_of_evanescent_channels, k_of_right_moving_active_channels, k_of_left_moving_active_channels, velocity_of_right_moving_active_channels, velocity_of_left_moving_active_channels, transmission_matrix_for_active_channels, reflection_matrix_for_active_channels, total_transmission_of_channels, total_conductance, total_reflection_of_channels, sum_of_transmission_and_reflection_of_channels -# 从散射矩阵中,打印出散射矩阵的信息 +# 从散射矩阵中打印出散射矩阵的信息 def print_or_write_scattering_matrix_with_information_of_scattering_matrix(number_of_active_channels, number_of_evanescent_channels, k_of_right_moving_active_channels, k_of_left_moving_active_channels, velocity_of_right_moving_active_channels, velocity_of_left_moving_active_channels, transmission_matrix_for_active_channels, reflection_matrix_for_active_channels, total_transmission_of_channels, total_conductance, total_reflection_of_channels, sum_of_transmission_and_reflection_of_channels, print_show=1, write_file=0, filename='a', file_format='.txt'): if print_show == 1: print('\nActive channel (left or right) = ', number_of_active_channels) diff --git a/PyPI/src/guan/read_and_write.py b/PyPI/src/guan/read_and_write.py deleted file mode 100644 index 9d607f7..0000000 --- a/PyPI/src/guan/read_and_write.py +++ /dev/null @@ -1,263 +0,0 @@ -# Module: read_and_write - -# 将数据存到文件 -def dump_data(data, filename, file_format='.txt'): - import pickle - with open(filename+file_format, 'wb') as f: - pickle.dump(data, f) - import guan - guan.statistics_of_guan_package() - -# 从文件中恢复数据到变量 -def load_data(filename, file_format='.txt'): - import pickle - with open(filename+file_format, 'rb') as f: - data = pickle.load(f) - import guan - guan.statistics_of_guan_package() - return data - -# 读取文件中的一维数据(每一行一组x和y) -def read_one_dimensional_data(filename='a', file_format='.txt'): - import numpy as np - f = open(filename+file_format, 'r') - text = f.read() - f.close() - row_list = np.array(text.split('\n')) - dim_column = np.array(row_list[0].split()).shape[0] - x_array = np.array([]) - y_array = np.array([]) - for row in row_list: - column = np.array(row.split()) - if column.shape[0] != 0: - x_array = np.append(x_array, [float(column[0])], axis=0) - y_row = np.zeros(dim_column-1) - for dim0 in range(dim_column-1): - y_row[dim0] = float(column[dim0+1]) - if np.array(y_array).shape[0] == 0: - y_array = [y_row] - else: - y_array = np.append(y_array, [y_row], axis=0) - import guan - guan.statistics_of_guan_package() - return x_array, y_array - -# 读取文件中的一维数据(每一行一组x和y)(支持复数形式) -def read_one_dimensional_complex_data(filename='a', file_format='.txt'): - import numpy as np - f = open(filename+file_format, 'r') - text = f.read() - f.close() - row_list = np.array(text.split('\n')) - dim_column = np.array(row_list[0].split()).shape[0] - x_array = np.array([]) - y_array = np.array([]) - for row in row_list: - column = np.array(row.split()) - if column.shape[0] != 0: - x_array = np.append(x_array, [complex(column[0])], axis=0) - y_row = np.zeros(dim_column-1, dtype=complex) - for dim0 in range(dim_column-1): - y_row[dim0] = complex(column[dim0+1]) - if np.array(y_array).shape[0] == 0: - y_array = [y_row] - else: - y_array = np.append(y_array, [y_row], axis=0) - import guan - guan.statistics_of_guan_package() - return x_array, y_array - -# 读取文件中的二维数据(第一行和列分别为横纵坐标) -def read_two_dimensional_data(filename='a', file_format='.txt'): - import numpy as np - f = open(filename+file_format, 'r') - text = f.read() - f.close() - row_list = np.array(text.split('\n')) - dim_column = np.array(row_list[0].split()).shape[0] - x_array = np.array([]) - y_array = np.array([]) - matrix = np.array([]) - for i0 in range(row_list.shape[0]): - column = np.array(row_list[i0].split()) - if i0 == 0: - x_str = column[1::] - x_array = np.zeros(x_str.shape[0]) - for i00 in range(x_str.shape[0]): - x_array[i00] = float(x_str[i00]) - elif column.shape[0] != 0: - y_array = np.append(y_array, [float(column[0])], axis=0) - matrix_row = np.zeros(dim_column-1) - for dim0 in range(dim_column-1): - matrix_row[dim0] = float(column[dim0+1]) - if np.array(matrix).shape[0] == 0: - matrix = [matrix_row] - else: - matrix = np.append(matrix, [matrix_row], axis=0) - import guan - guan.statistics_of_guan_package() - return x_array, y_array, matrix - -# 读取文件中的二维数据(第一行和列分别为横纵坐标)(支持复数形式) -def read_two_dimensional_complex_data(filename='a', file_format='.txt'): - import numpy as np - f = open(filename+file_format, 'r') - text = f.read() - f.close() - row_list = np.array(text.split('\n')) - dim_column = np.array(row_list[0].split()).shape[0] - x_array = np.array([]) - y_array = np.array([]) - matrix = np.array([]) - for i0 in range(row_list.shape[0]): - column = np.array(row_list[i0].split()) - if i0 == 0: - x_str = column[1::] - x_array = np.zeros(x_str.shape[0], dtype=complex) - for i00 in range(x_str.shape[0]): - x_array[i00] = complex(x_str[i00]) - elif column.shape[0] != 0: - y_array = np.append(y_array, [complex(column[0])], axis=0) - matrix_row = np.zeros(dim_column-1, dtype=complex) - for dim0 in range(dim_column-1): - matrix_row[dim0] = complex(column[dim0+1]) - if np.array(matrix).shape[0] == 0: - matrix = [matrix_row] - else: - matrix = np.append(matrix, [matrix_row], axis=0) - import guan - guan.statistics_of_guan_package() - return x_array, y_array, matrix - -# 读取文件中的二维数据(不包括x和y) -def read_two_dimensional_data_without_xy_array(filename='a', file_format='.txt'): - import numpy as np - matrix = np.loadtxt(filename+file_format) - import guan - guan.statistics_of_guan_package() - return matrix - -# 打开文件用于新增内容 -def open_file(filename='a', file_format='.txt'): - f = open(filename+file_format, 'a', encoding='UTF-8') - import guan - guan.statistics_of_guan_package() - return f - -# 在文件中写入一维数据(每一行一组x和y) -def write_one_dimensional_data(x_array, y_array, filename='a', file_format='.txt'): - import guan - with open(filename+file_format, 'w', encoding='UTF-8') as f: - guan.write_one_dimensional_data_without_opening_file(x_array, y_array, f) - import guan - guan.statistics_of_guan_package() - -# 在文件中写入一维数据(每一行一组x和y)(需要输入文件) -def write_one_dimensional_data_without_opening_file(x_array, y_array, f): - import numpy as np - x_array = np.array(x_array) - y_array = np.array(y_array) - i0 = 0 - for x0 in x_array: - f.write(str(x0)+' ') - if len(y_array.shape) == 1: - f.write(str(y_array[i0])+'\n') - elif len(y_array.shape) == 2: - for j0 in range(y_array.shape[1]): - f.write(str(y_array[i0, j0])+' ') - f.write('\n') - i0 += 1 - import guan - guan.statistics_of_guan_package() - -# 在文件中写入二维数据(第一行和列分别为横纵坐标) -def write_two_dimensional_data(x_array, y_array, matrix, filename='a', file_format='.txt'): - import guan - with open(filename+file_format, 'w', encoding='UTF-8') as f: - guan.write_two_dimensional_data_without_opening_file(x_array, y_array, matrix, f) - guan.statistics_of_guan_package() - -# 在文件中写入二维数据(第一行和列分别为横纵坐标)(需要输入文件) -def write_two_dimensional_data_without_opening_file(x_array, y_array, matrix, f): - import numpy as np - x_array = np.array(x_array) - y_array = np.array(y_array) - matrix = np.array(matrix) - f.write('0 ') - for x0 in x_array: - f.write(str(x0)+' ') - f.write('\n') - i0 = 0 - for y0 in y_array: - f.write(str(y0)) - j0 = 0 - for x0 in x_array: - f.write(' '+str(matrix[i0, j0])+' ') - j0 += 1 - f.write('\n') - i0 += 1 - import guan - guan.statistics_of_guan_package() - -# 在文件中写入二维数据(不包括x和y) -def write_two_dimensional_data_without_xy_array(matrix, filename='a', file_format='.txt'): - import guan - with open(filename+file_format, 'w', encoding='UTF-8') as f: - guan.write_two_dimensional_data_without_xy_array_and_without_opening_file(matrix, f) - guan.statistics_of_guan_package() - -# 在文件中写入二维数据(不包括x和y)(需要输入文件) -def write_two_dimensional_data_without_xy_array_and_without_opening_file(matrix, f): - for row in matrix: - for element in row: - f.write(str(element)+' ') - f.write('\n') - import guan - guan.statistics_of_guan_package() - -# 以显示编号的样式,打印数组 -def print_array_with_index(array, show_index=1, index_type=0): - if show_index==0: - for i0 in array: - print(i0) - else: - if index_type==0: - index = 0 - for i0 in array: - print(index, i0) - index += 1 - else: - index = 0 - for i0 in array: - index += 1 - print(index, i0) - import guan - guan.statistics_of_guan_package() - -# 读取文件夹中某个文件类型的所有文本文件 -def read_text_files_in_directory(directory='./', file_format='.md'): - import os - file_list = [] - for root, dirs, files in os.walk(directory): - for i0 in range(len(files)): - if file_format in files[i0]: - file_list.append(root+'/'+files[i0]) - content_array = [] - for file in file_list: - with open(file, 'r') as f: - content_array.append(f.read()) - import guan - guan.statistics_of_guan_package() - return file_list, content_array - -# 在多个文本文件中查找关键词 -def find_words_in_multiple_files(words, directory='./', file_format='.md'): - import guan - file_list, content_array = guan.read_text_files_in_directory(directory=directory, file_format=file_format) - num_files = len(file_list) - file_list_with_words = [] - for i0 in range(num_files): - if words in content_array[i0]: - file_list_with_words.append(file_list[i0]) - guan.statistics_of_guan_package() - return file_list_with_words \ No newline at end of file diff --git a/README.md b/README.md index 9c0ce0a..3467d24 100755 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ## Guan package -Guan is an open-source python package developed and maintained by https://www.guanjihuan.com/about (Ji-Huan Guan, 关济寰). With this package, you can calculate band structures, density of states, quantum transport and topological invariant of tight-binding models by invoking the functions you need. Other frequently used functions are also integrated in this package, such as figure plotting, file-reading/writing, file processing, data processing. +Guan is an open-source python package developed and maintained by https://www.guanjihuan.com/about (Ji-Huan Guan, 关济寰). With this package, you can calculate band structures, density of states, quantum transport and topological invariant of tight-binding models by invoking the functions you need. Other frequently used functions are also integrated, such as figure-plotting and file-reading/writing. The primary location of this package is on https://py.guanjihuan.com. @@ -16,17 +16,14 @@ import guan + basic functions + Fourier transform -+ Hamiltonian of finite size systems -+ Hamiltonian of models in reciprocal space ++ Hamiltonian of examples + band structures and wave functions + Green functions + density of states + quantum transport + topological invariant -+ plot figures -+ read and write -+ file processing + data processing ++ others ## About this package