From 7a9b86f79157dea035dea312d60b2b293fa969ee Mon Sep 17 00:00:00 2001 From: guanjihuan Date: Mon, 27 Nov 2023 16:42:45 +0800 Subject: [PATCH] =?UTF-8?q?0.1.48=20=E5=A2=9E=E5=8A=A0=E8=A3=85=E9=A5=B0?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PyPI/setup.cfg | 2 +- PyPI/src/guan.egg-info/PKG-INFO | 2 +- PyPI/src/guan/Fourier_transform.py | 34 ++-- PyPI/src/guan/Green_functions.py | 32 ++- PyPI/src/guan/Hamiltonian_of_examples.py | 76 +++----- PyPI/src/guan/__init__.py | 8 + .../band_structures_and_wave_functions.py | 32 ++- PyPI/src/guan/basic_functions.py | 48 +++-- PyPI/src/guan/data_processing.py | 136 +++++-------- PyPI/src/guan/density_of_states.py | 17 +- PyPI/src/guan/others.py | 184 ++++++++---------- PyPI/src/guan/quantum_transport.py | 52 +++-- PyPI/src/guan/topological_invariant.py | 27 ++- 13 files changed, 271 insertions(+), 379 deletions(-) diff --git a/PyPI/setup.cfg b/PyPI/setup.cfg index 138d616..5cb64ae 100644 --- a/PyPI/setup.cfg +++ b/PyPI/setup.cfg @@ -1,7 +1,7 @@ [metadata] # replace with your username: name = guan -version = 0.1.47 +version = 0.1.48 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 4ff679e..1e04bb8 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.47 +Version: 0.1.48 Summary: An open source python package Home-page: https://py.guanjihuan.com Author: guanjihuan diff --git a/PyPI/src/guan/Fourier_transform.py b/PyPI/src/guan/Fourier_transform.py index 50912f4..5622d80 100644 --- a/PyPI/src/guan/Fourier_transform.py +++ b/PyPI/src/guan/Fourier_transform.py @@ -1,17 +1,18 @@ # Module: Fourier_transform +import guan # 通过元胞和跃迁项得到一维的哈密顿量(需要输入k值) +@guan.function_decorator def one_dimensional_fourier_transform(k, unit_cell, hopping): import numpy as np import cmath unit_cell = np.array(unit_cell) hopping = np.array(hopping) hamiltonian = unit_cell+hopping*cmath.exp(1j*k)+hopping.transpose().conj()*cmath.exp(-1j*k) - import guan - guan.statistics_of_guan_package() return hamiltonian # 通过元胞和跃迁项得到二维方格子的哈密顿量(需要输入k值) +@guan.function_decorator def two_dimensional_fourier_transform_for_square_lattice(k1, k2, unit_cell, hopping_1, hopping_2): import numpy as np import cmath @@ -19,11 +20,10 @@ def two_dimensional_fourier_transform_for_square_lattice(k1, k2, unit_cell, hopp hopping_1 = np.array(hopping_1) hopping_2 = np.array(hopping_2) hamiltonian = unit_cell+hopping_1*cmath.exp(1j*k1)+hopping_1.transpose().conj()*cmath.exp(-1j*k1)+hopping_2*cmath.exp(1j*k2)+hopping_2.transpose().conj()*cmath.exp(-1j*k2) - import guan - guan.statistics_of_guan_package() return hamiltonian # 通过元胞和跃迁项得到三维立方格子的哈密顿量(需要输入k值) +@guan.function_decorator def three_dimensional_fourier_transform_for_cubic_lattice(k1, k2, k3, unit_cell, hopping_1, hopping_2, hopping_3): import numpy as np import cmath @@ -32,43 +32,41 @@ def three_dimensional_fourier_transform_for_cubic_lattice(k1, k2, k3, unit_cell, hopping_2 = np.array(hopping_2) hopping_3 = np.array(hopping_3) hamiltonian = unit_cell+hopping_1*cmath.exp(1j*k1)+hopping_1.transpose().conj()*cmath.exp(-1j*k1)+hopping_2*cmath.exp(1j*k2)+hopping_2.transpose().conj()*cmath.exp(-1j*k2)+hopping_3*cmath.exp(1j*k3)+hopping_3.transpose().conj()*cmath.exp(-1j*k3) - import guan - guan.statistics_of_guan_package() return hamiltonian # 通过元胞和跃迁项得到一维的哈密顿量(返回的哈密顿量为携带k的函数) +@guan.function_decorator def one_dimensional_fourier_transform_with_k(unit_cell, hopping): import functools import guan hamiltonian_function = functools.partial(guan.one_dimensional_fourier_transform, unit_cell=unit_cell, hopping=hopping) - guan.statistics_of_guan_package() return hamiltonian_function # 通过元胞和跃迁项得到二维方格子的哈密顿量(返回的哈密顿量为携带k的函数) +@guan.function_decorator def two_dimensional_fourier_transform_for_square_lattice_with_k1_k2(unit_cell, hopping_1, hopping_2): import functools import guan hamiltonian_function = functools.partial(guan.two_dimensional_fourier_transform_for_square_lattice, unit_cell=unit_cell, hopping_1=hopping_1, hopping_2=hopping_2) - guan.statistics_of_guan_package() return hamiltonian_function # 通过元胞和跃迁项得到三维立方格子的哈密顿量(返回的哈密顿量为携带k的函数) +@guan.function_decorator def three_dimensional_fourier_transform_for_cubic_lattice_with_k1_k2_k3(unit_cell, hopping_1, hopping_2, hopping_3): import functools import guan hamiltonian_function = functools.partial(guan.three_dimensional_fourier_transform_for_cubic_lattice, unit_cell=unit_cell, hopping_1=hopping_1, hopping_2=hopping_2, hopping_3=hopping_3) - guan.statistics_of_guan_package() return hamiltonian_function # 由实空间格矢得到倒空间格矢(一维) +@guan.function_decorator def calculate_one_dimensional_reciprocal_lattice_vector(a1): import numpy as np b1 = 2*np.pi/a1 - import guan - guan.statistics_of_guan_package() return b1 # 由实空间格矢得到倒空间格矢(二维) +@guan.function_decorator def calculate_two_dimensional_reciprocal_lattice_vectors(a1, a2): import numpy as np a1 = np.array(a1) @@ -80,11 +78,10 @@ def calculate_two_dimensional_reciprocal_lattice_vectors(a1, a2): b2 = 2*np.pi*np.cross(a3, a1)/np.dot(a1, np.cross(a2, a3)) b1 = np.delete(b1, 2) b2 = np.delete(b2, 2) - import guan - guan.statistics_of_guan_package() return b1, b2 # 由实空间格矢得到倒空间格矢(三维) +@guan.function_decorator def calculate_three_dimensional_reciprocal_lattice_vectors(a1, a2, a3): import numpy as np a1 = np.array(a1) @@ -93,19 +90,17 @@ def calculate_three_dimensional_reciprocal_lattice_vectors(a1, a2, a3): b1 = 2*np.pi*np.cross(a2, a3)/np.dot(a1, np.cross(a2, a3)) b2 = 2*np.pi*np.cross(a3, a1)/np.dot(a1, np.cross(a2, a3)) b3 = 2*np.pi*np.cross(a1, a2)/np.dot(a1, np.cross(a2, a3)) - import guan - guan.statistics_of_guan_package() return b1, b2, b3 # 由实空间格矢得到倒空间格矢(一维),这里为符号运算 +@guan.function_decorator def calculate_one_dimensional_reciprocal_lattice_vector_with_sympy(a1): import sympy b1 = 2*sympy.pi/a1 - import guan - guan.statistics_of_guan_package() return b1 # 由实空间格矢得到倒空间格矢(二维),这里为符号运算 +@guan.function_decorator def calculate_two_dimensional_reciprocal_lattice_vectors_with_sympy(a1, a2): import sympy a1 = sympy.Matrix(1, 3, [a1[0], a1[1], 0]) @@ -117,11 +112,10 @@ def calculate_two_dimensional_reciprocal_lattice_vectors_with_sympy(a1, a2): b2 = 2*sympy.pi*cross_a3_a1/a1.dot(cross_a2_a3) b1 = sympy.Matrix(1, 2, [b1[0], b1[1]]) b2 = sympy.Matrix(1, 2, [b2[0], b2[1]]) - import guan - guan.statistics_of_guan_package() return b1, b2 # 由实空间格矢得到倒空间格矢(三维),这里为符号运算 +@guan.function_decorator def calculate_three_dimensional_reciprocal_lattice_vectors_with_sympy(a1, a2, a3): import sympy cross_a2_a3 = a2.cross(a3) @@ -130,6 +124,4 @@ def calculate_three_dimensional_reciprocal_lattice_vectors_with_sympy(a1, a2, a3 b1 = 2*sympy.pi*cross_a2_a3/a1.dot(cross_a2_a3) b2 = 2*sympy.pi*cross_a3_a1/a1.dot(cross_a2_a3) b3 = 2*sympy.pi*cross_a1_a2/a1.dot(cross_a2_a3) - import guan - guan.statistics_of_guan_package() return b1, b2, b3 diff --git a/PyPI/src/guan/Green_functions.py b/PyPI/src/guan/Green_functions.py index 7f4713f..6d11942 100644 --- a/PyPI/src/guan/Green_functions.py +++ b/PyPI/src/guan/Green_functions.py @@ -1,6 +1,8 @@ # Module: Green_functions +import guan # 输入哈密顿量,得到格林函数 +@guan.function_decorator def green_function(fermi_energy, hamiltonian, broadening, self_energy=0): import numpy as np if np.array(hamiltonian).shape==(): @@ -8,11 +10,10 @@ def green_function(fermi_energy, hamiltonian, broadening, self_energy=0): else: dim = np.array(hamiltonian).shape[0] green = np.linalg.inv((fermi_energy+broadening*1j)*np.eye(dim)-hamiltonian-self_energy) - import guan - guan.statistics_of_guan_package() return green # 在Dyson方程中的一个中间格林函数G_{nn}^{n} +@guan.function_decorator def green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening, self_energy=0): import numpy as np h01 = np.array(h01) @@ -21,36 +22,32 @@ def green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening, se else: dim = np.array(h00).shape[0] green_nn_n = np.linalg.inv((fermi_energy+broadening*1j)*np.identity(dim)-h00-np.dot(np.dot(h01.transpose().conj(), green_nn_n_minus), h01)-self_energy) - import guan - guan.statistics_of_guan_package() return green_nn_n # 在Dyson方程中的一个中间格林函数G_{in}^{n} +@guan.function_decorator def green_function_in_n(green_in_n_minus, h01, green_nn_n): import numpy as np green_in_n = np.dot(np.dot(green_in_n_minus, h01), green_nn_n) - import guan - guan.statistics_of_guan_package() return green_in_n # 在Dyson方程中的一个中间格林函数G_{ni}^{n} +@guan.function_decorator def green_function_ni_n(green_nn_n, h01, green_ni_n_minus): import numpy as np h01 = np.array(h01) green_ni_n = np.dot(np.dot(green_nn_n, h01.transpose().conj()), green_ni_n_minus) - import guan - guan.statistics_of_guan_package() return green_ni_n # 在Dyson方程中的一个中间格林函数G_{ii}^{n} +@guan.function_decorator def green_function_ii_n(green_ii_n_minus, green_in_n_minus, h01, green_nn_n, green_ni_n_minus): import numpy as np green_ii_n = green_ii_n_minus+np.dot(np.dot(np.dot(np.dot(green_in_n_minus, h01), green_nn_n), h01.transpose().conj()),green_ni_n_minus) - import guan - guan.statistics_of_guan_package() return green_ii_n # 计算转移矩阵(该矩阵可以用来计算表面格林函数) +@guan.function_decorator def transfer_matrix(fermi_energy, h00, h01): import numpy as np h01 = np.array(h01) @@ -63,11 +60,10 @@ def transfer_matrix(fermi_energy, h00, h01): transfer[0:dim, dim:2*dim] = np.dot(-1*np.linalg.inv(h01), h01.transpose().conj()) transfer[dim:2*dim, 0:dim] = np.identity(dim) transfer[dim:2*dim, dim:2*dim] = 0 - import guan - guan.statistics_of_guan_package() return transfer # 计算电极的表面格林函数 +@guan.function_decorator def surface_green_function_of_lead(fermi_energy, h00, h01): import numpy as np h01 = np.array(h01) @@ -90,11 +86,10 @@ def surface_green_function_of_lead(fermi_energy, h00, h01): s4 = temp[0:dim, dim:2*dim] right_lead_surface = np.linalg.inv(fermi_energy*np.identity(dim)-h00-np.dot(np.dot(h01, s2), np.linalg.inv(s1))) left_lead_surface = np.linalg.inv(fermi_energy*np.identity(dim)-h00-np.dot(np.dot(h01.transpose().conj(), s3), np.linalg.inv(s4))) - import guan - guan.statistics_of_guan_package() return right_lead_surface, left_lead_surface # 计算电极的自能(基于Dyson方程的小矩阵形式) +@guan.function_decorator def self_energy_of_lead(fermi_energy, h00, h01): import numpy as np import guan @@ -104,10 +99,10 @@ def self_energy_of_lead(fermi_energy, h00, h01): left_self_energy = np.dot(np.dot(h01.transpose().conj(), left_lead_surface), h01) gamma_right = (right_self_energy - right_self_energy.transpose().conj())*1j gamma_left = (left_self_energy - left_self_energy.transpose().conj())*1j - guan.statistics_of_guan_package() return right_self_energy, left_self_energy, gamma_right, gamma_left # 计算电极的自能(基于中心区整体的大矩阵形式) +@guan.function_decorator def self_energy_of_lead_with_h_LC_and_h_CR(fermi_energy, h00, h01, h_LC, h_CR): import numpy as np import guan @@ -118,10 +113,10 @@ def self_energy_of_lead_with_h_LC_and_h_CR(fermi_energy, h00, h01, h_LC, h_CR): left_self_energy = np.dot(np.dot(h_LC.transpose().conj(), left_lead_surface), h_LC) gamma_right = (right_self_energy - right_self_energy.transpose().conj())*1j gamma_left = (left_self_energy - left_self_energy.transpose().conj())*1j - guan.statistics_of_guan_package() return right_self_energy, left_self_energy, gamma_right, gamma_left # 计算电极的自能(基于中心区整体的大矩阵形式,可适用于多端电导的计算) +@guan.function_decorator def self_energy_of_lead_with_h_lead_to_center(fermi_energy, h00, h01, h_lead_to_center): import numpy as np import guan @@ -129,25 +124,24 @@ def self_energy_of_lead_with_h_lead_to_center(fermi_energy, h00, h01, h_lead_to_ right_lead_surface, left_lead_surface = guan.surface_green_function_of_lead(fermi_energy, h00, h01) self_energy = np.dot(np.dot(h_lead_to_center.transpose().conj(), right_lead_surface), h_lead_to_center) gamma = (self_energy - self_energy.transpose().conj())*1j - guan.statistics_of_guan_package() return self_energy, gamma # 计算考虑电极自能后的中心区的格林函数 +@guan.function_decorator def green_function_with_leads(fermi_energy, h00, h01, h_LC, h_CR, center_hamiltonian): import numpy as np import guan dim = np.array(center_hamiltonian).shape[0] right_self_energy, left_self_energy, gamma_right, gamma_left = guan.self_energy_of_lead_with_h_LC_and_h_CR(fermi_energy, h00, h01, h_LC, h_CR) green = np.linalg.inv(fermi_energy*np.identity(dim)-center_hamiltonian-left_self_energy-right_self_energy) - guan.statistics_of_guan_package() return green, gamma_right, gamma_left # 计算用于计算局域电流的格林函数G_n +@guan.function_decorator def electron_correlation_function_green_n_for_local_current(fermi_energy, h00, h01, h_LC, h_CR, center_hamiltonian): import numpy as np import guan right_self_energy, left_self_energy, gamma_right, gamma_left = guan.self_energy_of_lead_with_h_LC_and_h_CR(fermi_energy, h00, h01, h_LC, h_CR) green = guan.green_function(fermi_energy, center_hamiltonian, broadening=0, self_energy=left_self_energy+right_self_energy) G_n = np.imag(np.dot(np.dot(green, gamma_left), green.transpose().conj())) - guan.statistics_of_guan_package() return G_n \ No newline at end of file diff --git a/PyPI/src/guan/Hamiltonian_of_examples.py b/PyPI/src/guan/Hamiltonian_of_examples.py index e8056b6..cf6e20e 100644 --- a/PyPI/src/guan/Hamiltonian_of_examples.py +++ b/PyPI/src/guan/Hamiltonian_of_examples.py @@ -1,6 +1,8 @@ # Module: Hamiltonian_of_examples +import guan # 构建一维的有限尺寸体系哈密顿量(可设置是否为周期边界条件) +@guan.function_decorator 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) @@ -18,11 +20,10 @@ def hamiltonian_of_finite_size_system_along_one_direction(N, on_site=0, hopping= 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 # 构建二维的方格子有限尺寸体系哈密顿量(可设置是否为周期边界条件) +@guan.function_decorator 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) @@ -52,11 +53,10 @@ def hamiltonian_of_finite_size_system_along_two_directions_for_square_lattice(N1 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 # 构建三维的立方格子有限尺寸体系哈密顿量(可设置是否为周期边界条件) +@guan.function_decorator 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) @@ -102,11 +102,10 @@ def hamiltonian_of_finite_size_system_along_three_directions_for_cubic_lattice(N 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模型哈密顿量 +@guan.function_decorator 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)) @@ -121,11 +120,10 @@ def hamiltonian_of_finite_size_ssh_model(N, v=0.6, w=1, onsite_1=0, onsite_2=0, 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边的石墨烯条带的元胞间跃迁 +@guan.function_decorator 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) @@ -136,11 +134,10 @@ def get_hopping_term_of_graphene_ribbon_along_zigzag_direction(N, eta=0): 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 # 构建有限尺寸的石墨烯哈密顿量(可设置是否为周期边界条件) +@guan.function_decorator 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 @@ -149,10 +146,10 @@ def hamiltonian_of_finite_size_system_along_two_directions_for_graphene(N1, N2, 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为参数) +@guan.function_decorator 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 @@ -170,11 +167,10 @@ def get_onsite_and_hopping_terms_of_2d_effective_graphene_along_one_direction(qy 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模型的在位能和跃迁项 +@guan.function_decorator 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) @@ -205,11 +201,10 @@ def get_onsite_and_hopping_terms_of_bhz_model(A=0.3645/5, B=-0.686/25, C=0, D=-0 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模型的在位能和跃迁项(自旋向上) +@guan.function_decorator 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) @@ -230,11 +225,10 @@ def get_onsite_and_hopping_terms_of_half_bhz_model_for_spin_up(A=0.3645/5, B=-0. 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模型的在位能和跃迁项(自旋向下) +@guan.function_decorator 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) @@ -255,25 +249,24 @@ def get_onsite_and_hopping_terms_of_half_bhz_model_for_spin_down(A=0.3645/5, B=- 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 # 一维链的哈密顿量(倒空间) +@guan.function_decorator 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 # 二维方格子的哈密顿量(倒空间) +@guan.function_decorator 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 # 准一维方格子条带的哈密顿量(倒空间) +@guan.function_decorator def hamiltonian_of_square_lattice_in_quasi_one_dimension(k, N=10, period=0): import numpy as np import guan @@ -288,28 +281,27 @@ def hamiltonian_of_square_lattice_in_quasi_one_dimension(k, N=10, period=0): 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 # 三维立方格子的哈密顿量(倒空间) +@guan.function_decorator 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模型的哈密顿量(倒空间) +@guan.function_decorator 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 # 石墨烯的哈密顿量(倒空间) +@guan.function_decorator def hamiltonian_of_graphene(k1, k2, staggered_potential=0, t=1, a='default'): import numpy as np import cmath @@ -323,11 +315,10 @@ def hamiltonian_of_graphene(k1, k2, staggered_potential=0, t=1, a='default'): 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 # 石墨烯有效模型的哈密顿量(倒空间) +@guan.function_decorator 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) @@ -340,11 +331,10 @@ def effective_hamiltonian_of_graphene(qx, qy, t=1, staggered_potential=0, valley 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 # 石墨烯有效模型离散化后的哈密顿量(倒空间) +@guan.function_decorator 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) @@ -357,11 +347,10 @@ def effective_hamiltonian_of_graphene_after_discretization(qx, qy, t=1, staggere 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边石墨烯条带的哈密顿量(倒空间) +@guan.function_decorator 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 @@ -388,10 +377,10 @@ def hamiltonian_of_graphene_with_zigzag_in_quasi_one_dimension(k, N=10, M=0, t=1 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模型的哈密顿量(倒空间) +@guan.function_decorator 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 @@ -410,11 +399,10 @@ def hamiltonian_of_haldane_model(k1, k2, M=2/3, t1=1, t2=1/3, phi='default', a=' 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模型条带的哈密顿量(倒空间) +@guan.function_decorator 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 @@ -466,11 +454,10 @@ def hamiltonian_of_haldane_model_in_quasi_one_dimension(k, N=10, M=2/3, t1=1, t2 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 # 一个量子反常霍尔效应的哈密顿量(倒空间) +@guan.function_decorator def hamiltonian_of_one_QAH_model(k1, k2, t1=1, t2=1, t3=0.5, m=-1): import numpy as np import math @@ -479,11 +466,10 @@ def hamiltonian_of_one_QAH_model(k1, k2, t1=1, t2=1, t3=0.5, m=-1): 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模型的哈密顿量(倒空间) +@guan.function_decorator 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 @@ -499,11 +485,10 @@ def hamiltonian_of_bhz_model(kx, ky, A=0.3645/5, B=-0.686/25, C=0, D=-0.512/25, 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模型的哈密顿量(自旋向上)(倒空间) +@guan.function_decorator 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 @@ -515,11 +500,10 @@ def hamiltonian_of_half_bhz_model_for_spin_up(kx, ky, A=0.3645/5, B=-0.686/25, C 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模型的哈密顿量(自旋向下)(倒空间) +@guan.function_decorator 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 @@ -531,11 +515,10 @@ def hamiltonian_of_half_bhz_model_for_spin_down(kx, ky, A=0.3645/5, B=-0.686/25, 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模型的哈密顿量(倒空间) +@guan.function_decorator 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 @@ -552,11 +535,10 @@ def hamiltonian_of_bbh_model(kx, ky, gamma_x=0.5, gamma_y=0.5, lambda_x=1, lambd 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模型的哈密顿量(倒空间) +@guan.function_decorator def hamiltonian_of_kagome_lattice(kx, ky, t=1): import numpy as np import math @@ -569,6 +551,4 @@ def hamiltonian_of_kagome_lattice(kx, ky, t=1): 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 01646fb..33759d0 100644 --- a/PyPI/src/guan/__init__.py +++ b/PyPI/src/guan/__init__.py @@ -1,5 +1,13 @@ # Guan is an open-source python package developed and maintained by https://www.guanjihuan.com/about (Ji-Huan Guan, 关济寰). The primary location of this package is on website https://py.guanjihuan.com. The GitHub location of this package is on https://github.com/guanjihuan/py.guanjihuan.com. +# 函数的装饰器,用于软件包的统计 +def function_decorator(func): + def wrapper(): + func() + import guan + guan.statistics_of_guan_package(func.__name__) + return wrapper + from .basic_functions import * from .Fourier_transform import * from .Hamiltonian_of_examples import * diff --git a/PyPI/src/guan/band_structures_and_wave_functions.py b/PyPI/src/guan/band_structures_and_wave_functions.py index 06b3f77..836cca8 100644 --- a/PyPI/src/guan/band_structures_and_wave_functions.py +++ b/PyPI/src/guan/band_structures_and_wave_functions.py @@ -1,17 +1,18 @@ # Module: band_structures_and_wave_functions +import guan # 计算哈密顿量的本征值 +@guan.function_decorator def calculate_eigenvalue(hamiltonian): import numpy as np if np.array(hamiltonian).shape==(): eigenvalue = np.real(hamiltonian) else: eigenvalue, eigenvector = np.linalg.eigh(hamiltonian) - import guan - guan.statistics_of_guan_package() return eigenvalue # 输入哈密顿量函数(带一组参数),计算一组参数下的本征值,返回本征值向量组 +@guan.function_decorator def calculate_eigenvalue_with_one_parameter(x_array, hamiltonian_function, print_show=0): import numpy as np dim_x = np.array(x_array).shape[0] @@ -32,11 +33,10 @@ def calculate_eigenvalue_with_one_parameter(x_array, hamiltonian_function, print eigenvalue, eigenvector = np.linalg.eigh(hamiltonian) eigenvalue_array[i0, :] = eigenvalue i0 += 1 - import guan - guan.statistics_of_guan_package() return eigenvalue_array # 输入哈密顿量函数(带两组参数),计算两组参数下的本征值,返回本征值向量组 +@guan.function_decorator def calculate_eigenvalue_with_two_parameters(x_array, y_array, hamiltonian_function, print_show=0, print_show_more=0): import numpy as np dim_x = np.array(x_array).shape[0] @@ -67,19 +67,17 @@ def calculate_eigenvalue_with_two_parameters(x_array, y_array, hamiltonian_funct eigenvalue_array[i0, j0, :] = eigenvalue j0 += 1 i0 += 1 - import guan - guan.statistics_of_guan_package() return eigenvalue_array # 计算哈密顿量的本征矢 +@guan.function_decorator def calculate_eigenvector(hamiltonian): import numpy as np eigenvalue, eigenvector = np.linalg.eigh(hamiltonian) - import guan - guan.statistics_of_guan_package() return eigenvector # 通过二分查找的方法获取和相邻波函数一样规范的波函数 +@guan.function_decorator def find_vector_with_the_same_gauge_with_binary_search(vector_target, vector_ref, show_error=1, show_times=0, show_phase=0, n_test=1000, precision=1e-6): import numpy as np import cmath @@ -116,11 +114,10 @@ def find_vector_with_the_same_gauge_with_binary_search(vector_target, vector_ref vector_target = vector_target*cmath.exp(1j*phase) if show_phase==1: print('Phase=', phase) - import guan - guan.statistics_of_guan_package() return vector_target # 通过使得波函数的一个非零分量为实数,得到固定规范的波函数 +@guan.function_decorator def find_vector_with_fixed_gauge_by_making_one_component_real(vector, precision=0.005, index=None): import numpy as np import cmath @@ -136,11 +133,10 @@ def find_vector_with_fixed_gauge_by_making_one_component_real(vector, precision= vector = vector*cmath.exp(1j*phase) if np.real(vector[index]) < 0: vector = -vector - import guan - guan.statistics_of_guan_package() return vector # 通过使得波函数的一个非零分量为实数,得到固定规范的波函数(在一组波函数中选取最大的那个分量) +@guan.function_decorator def find_vector_array_with_fixed_gauge_by_making_one_component_real(vector_array, precision=0.005): import numpy as np import guan @@ -151,10 +147,10 @@ def find_vector_array_with_fixed_gauge_by_making_one_component_real(vector_array index = np.argmax(np.abs(vector_sum)) for i0 in range(Num_k): vector_array[i0] = guan.find_vector_with_fixed_gauge_by_making_one_component_real(vector_array[i0], precision=precision, index=index) - guan.statistics_of_guan_package() return vector_array # 旋转两个简并的波函数(说明:参数比较多,算法效率不高) +@guan.function_decorator 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 @@ -181,11 +177,10 @@ def rotation_of_degenerate_vectors(vector1, vector2, index1=None, index2=None, p break if np.abs(vector1_test[index2])1: repeated_file.append(item) - import guan - guan.statistics_of_guan_package() return repeated_file # 统计各个子文件夹中的文件数量 +@guan.function_decorator def count_file_in_sub_directory(directory='./', sort=0, reverse=1, print_show=1, smaller_than_num=None): import os import numpy as np @@ -402,12 +398,10 @@ def count_file_in_sub_directory(directory='./', sort=0, reverse=1, print_show=1, print(dirs_list[i0]) print(count_file_array[i0]) print() - - import guan - guan.statistics_of_guan_package() return sub_directory, num_in_sub_directory # 改变当前的目录位置 +@guan.function_decorator def change_directory_by_replacement(current_key_word='code', new_key_word='data'): import os code_path = os.getcwd() @@ -416,10 +410,9 @@ def change_directory_by_replacement(current_key_word='code', new_key_word='data' if os.path.exists(data_path) == False: os.makedirs(data_path) os.chdir(data_path) - import guan - guan.statistics_of_guan_package() # 在多个子文件夹中产生必要的文件,例如 readme.md +@guan.function_decorator def creat_necessary_file(directory, filename='readme', file_format='.md', content='', overwrite=None, ignored_directory_with_words=[]): import os directory_with_file = [] @@ -447,20 +440,18 @@ def creat_necessary_file(directory, filename='readme', file_format='.md', conten f = open(filename+file_format, 'w', encoding="utf-8") f.write(content) f.close() - import guan - guan.statistics_of_guan_package() # 删除特定文件名的文件(慎用) +@guan.function_decorator def delete_file_with_specific_name(directory, filename='readme', file_format='.md'): import os for root, dirs, files in os.walk(directory): for i0 in range(len(files)): if files[i0] == filename+file_format: os.remove(root+'/'+files[i0]) - import guan - guan.statistics_of_guan_package() # 将所有文件移到根目录(慎用) +@guan.function_decorator def move_all_files_to_root_directory(directory): import os import shutil @@ -473,10 +464,9 @@ def move_all_files_to_root_directory(directory): os.rmdir(root) except: pass - import guan - guan.statistics_of_guan_package() # 将文件目录结构写入Markdown文件 +@guan.function_decorator def write_file_list_in_markdown(directory='./', filename='a', reverse_positive_or_negative=1, starting_from_h1=None, banned_file_format=[], hide_file_format=None, divided_line=None, show_second_number=None, show_third_number=None): import os f = open(filename+'.md', 'w', encoding="utf-8") @@ -578,10 +568,9 @@ def write_file_list_in_markdown(directory='./', filename='a', reverse_positive_o f.write('#') f.write('###### '+str(filename6)+'\n\n') f.close() - import guan - guan.statistics_of_guan_package() # 从网页的标签中获取内容 +@guan.function_decorator def get_html_from_tags(link, tags=['title', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'li', 'a']): from bs4 import BeautifulSoup import urllib.request @@ -597,19 +586,17 @@ def get_html_from_tags(link, tags=['title', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', content = text else: content = content + '\n\n' + text - import guan - guan.statistics_of_guan_package() return content # 生成二维码 +@guan.function_decorator def creat_qrcode(data="https://www.guanjihuan.com", filename='a', file_format='.png'): import qrcode img = qrcode.make(data) img.save(filename+file_format) - import guan - guan.statistics_of_guan_package() # 将PDF文件转成文本 +@guan.function_decorator def pdf_to_text(pdf_path): from pdfminer.pdfparser import PDFParser, PDFDocument from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter @@ -638,21 +625,19 @@ def pdf_to_text(pdf_path): for x in layout: if isinstance(x, LTTextBox): content = content + x.get_text().strip() - import guan - guan.statistics_of_guan_package() return content # 获取PDF文件页数 +@guan.function_decorator def get_pdf_page_number(pdf_path): import PyPDF2 pdf_file = open(pdf_path, 'rb') pdf_reader = PyPDF2.PdfReader(pdf_file) num_pages = len(pdf_reader.pages) - import guan - guan.statistics_of_guan_package() return num_pages # 获取PDF文件指定页面的内容 +@guan.function_decorator def pdf_to_txt_for_a_specific_page(pdf_path, page_num=1): import PyPDF2 pdf_file = open(pdf_path, 'rb') @@ -663,11 +648,10 @@ def pdf_to_txt_for_a_specific_page(pdf_path, page_num=1): page = pdf_reader.pages[page_num0] page_text = page.extract_text() pdf_file.close() - import guan - guan.statistics_of_guan_package() return page_text # 获取PDF文献中的链接。例如: link_starting_form='https://doi.org' +@guan.function_decorator def get_links_from_pdf(pdf_path, link_starting_form=''): import PyPDF2 import re @@ -688,12 +672,11 @@ def get_links_from_pdf(pdf_path, link_starting_form=''): if u['/A']['/URI'] != old: links.append(u['/A']['/URI']) i0 += 1 - old = u['/A']['/URI'] - import guan - guan.statistics_of_guan_package() + old = u['/A']['/URI'] return links # 通过Sci-Hub网站下载文献 +@guan.function_decorator def download_with_scihub(address=None, num=1): from bs4 import BeautifulSoup import re @@ -729,10 +712,9 @@ def download_with_scihub(address=None, num=1): print('Completed!\n') if num != 1: print('All completed!\n') - import guan - guan.statistics_of_guan_package() # 将字符串转成音频 +@guan.function_decorator def str_to_audio(str='hello world', filename='str', rate=125, voice=1, read=1, save=0, compress=0, bitrate='16k', print_text=0): import pyttsx3 import guan @@ -754,9 +736,9 @@ def str_to_audio(str='hello world', filename='str', rate=125, voice=1, read=1, s if read==1: engine.say(str) engine.runAndWait() - guan.statistics_of_guan_package() # 将txt文件转成音频 +@guan.function_decorator def txt_to_audio(txt_path, rate=125, voice=1, read=1, save=0, compress=0, bitrate='16k', print_text=0): import pyttsx3 import guan @@ -782,9 +764,9 @@ def txt_to_audio(txt_path, rate=125, voice=1, read=1, save=0, compress=0, bitrat if read==1: engine.say(text) engine.runAndWait() - guan.statistics_of_guan_package() # 将PDF文件转成音频 +@guan.function_decorator def pdf_to_audio(pdf_path, rate=125, voice=1, read=1, save=0, compress=0, bitrate='16k', print_text=0): import pyttsx3 import guan @@ -810,18 +792,17 @@ def pdf_to_audio(pdf_path, rate=125, voice=1, read=1, save=0, compress=0, bitrat if read==1: engine.say(text) engine.runAndWait() - guan.statistics_of_guan_package() # 将wav音频文件压缩成MP3音频文件 +@guan.function_decorator def compress_wav_to_mp3(wav_path, output_filename='a.mp3', bitrate='16k'): # Note: Beside the installation of pydub, you may also need download FFmpeg on http://www.ffmpeg.org/download.html and add the bin path to the environment variable. from pydub import AudioSegment sound = AudioSegment.from_mp3(wav_path) sound.export(output_filename,format="mp3",bitrate=bitrate) - import guan - guan.statistics_of_guan_package() # 播放学术单词 +@guan.function_decorator def play_academic_words(reverse=0, random_on=0, bre_or_ame='ame', show_translation=1, show_link=1, translation_time=2, rest_time=1): from bs4 import BeautifulSoup import re @@ -880,10 +861,9 @@ def play_academic_words(reverse=0, random_on=0, bre_or_ame='ame', show_translati time.sleep(rest_time) pygame.mixer.music.stop() print() - import guan - guan.statistics_of_guan_package() # 播放挑选过后的学术单词 +@guan.function_decorator 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 @@ -938,10 +918,9 @@ def play_selected_academic_words(reverse=0, random_on=0, bre_or_ame='ame', show_ time.sleep(rest_time) pygame.mixer.music.stop() print() - import guan - guan.statistics_of_guan_package() # 播放元素周期表上的单词 +@guan.function_decorator 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 @@ -995,42 +974,41 @@ def play_element_words(random_on=0, show_translation=1, show_link=1, 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(): +def statistics_of_guan_package(function_name=None): import guan - function_name = guan.get_calling_function_name(layer=2) + if function_name == None: + function_name = guan.get_calling_function_name(layer=2) + else: + pass 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 + 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): @@ -1055,12 +1033,6 @@ def get_mac_address(): mac_address = '-'.join([mac_address[i:i+2] for i in range(0, 11, 2)]) return mac_address -# 获取函数的源码 -def get_function_source(function_name): - import inspect - function_source = inspect.getsource(function_name) - return function_source - # 获取调用本函数的函数名 def get_calling_function_name(layer=1): import inspect diff --git a/PyPI/src/guan/quantum_transport.py b/PyPI/src/guan/quantum_transport.py index 4df3b65..7e3b0d6 100644 --- a/PyPI/src/guan/quantum_transport.py +++ b/PyPI/src/guan/quantum_transport.py @@ -1,6 +1,8 @@ # Module: quantum_transport +import guan # 计算电导 +@guan.function_decorator def calculate_conductance(fermi_energy, h00, h01, length=100): import numpy as np import copy @@ -17,10 +19,10 @@ def calculate_conductance(fermi_energy, h00, h01, length=100): green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0, self_energy=right_self_energy) green_0n_n = guan.green_function_in_n(green_0n_n, h01, green_nn_n) conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) - guan.statistics_of_guan_package() return conductance # 计算不同费米能下的电导 +@guan.function_decorator def calculate_conductance_with_fermi_energy_array(fermi_energy_array, h00, h01, length=100, print_show=0): import numpy as np import guan @@ -32,10 +34,10 @@ def calculate_conductance_with_fermi_energy_array(fermi_energy_array, h00, h01, if print_show == 1: print(fermi_energy, conductance_array[i0]) i0 += 1 - guan.statistics_of_guan_package() return conductance_array # 计算在势垒散射下的电导 +@guan.function_decorator def calculate_conductance_with_barrier(fermi_energy, h00, h01, length=100, barrier_length=20, barrier_potential=1): import numpy as np import copy @@ -56,10 +58,10 @@ def calculate_conductance_with_barrier(fermi_energy, h00, h01, length=100, barri green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0, self_energy=right_self_energy) green_0n_n = guan.green_function_in_n(green_0n_n, h01, green_nn_n) conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) - guan.statistics_of_guan_package() return conductance # 计算在无序散射下的电导 +@guan.function_decorator def calculate_conductance_with_disorder(fermi_energy, h00, h01, disorder_intensity=2.0, disorder_concentration=1.0, length=100, calculation_times=1): import numpy as np import copy @@ -85,10 +87,10 @@ def calculate_conductance_with_disorder(fermi_energy, h00, h01, disorder_intensi conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) conductance_averaged += conductance conductance_averaged = conductance_averaged/calculation_times - guan.statistics_of_guan_package() return conductance_averaged # 计算在无序垂直切片的散射下的电导 +@guan.function_decorator def calculate_conductance_with_slice_disorder(fermi_energy, h00, h01, disorder_intensity=2.0, disorder_concentration=1.0, length=100): import numpy as np import copy @@ -109,10 +111,10 @@ def calculate_conductance_with_slice_disorder(fermi_energy, h00, h01, disorder_i green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0, self_energy=right_self_energy) green_0n_n = guan.green_function_in_n(green_0n_n, h01, green_nn_n) conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) - guan.statistics_of_guan_package() return conductance # 计算在无序水平切片的散射下的电导 +@guan.function_decorator def calculate_conductance_with_disorder_inside_unit_cell_which_keeps_translational_symmetry(fermi_energy, h00, h01, disorder_intensity=2.0, disorder_concentration=1.0, length=100): import numpy as np import copy @@ -134,10 +136,10 @@ def calculate_conductance_with_disorder_inside_unit_cell_which_keeps_translation green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0, self_energy=right_self_energy) green_0n_n = guan.green_function_in_n(green_0n_n, h01, green_nn_n) conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) - guan.statistics_of_guan_package() return conductance # 计算在随机空位的散射下的电导 +@guan.function_decorator def calculate_conductance_with_random_vacancy(fermi_energy, h00, h01, vacancy_concentration=0.5, vacancy_potential=1e9, length=100): import numpy as np import copy @@ -159,10 +161,10 @@ def calculate_conductance_with_random_vacancy(fermi_energy, h00, h01, vacancy_co green_nn_n = guan.green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0, self_energy=right_self_energy) green_0n_n = guan.green_function_in_n(green_0n_n, h01, green_nn_n) conductance = np.trace(np.dot(np.dot(np.dot(gamma_left, green_0n_n), gamma_right), green_0n_n.transpose().conj())) - guan.statistics_of_guan_package() return conductance # 计算在不同无序散射强度下的电导 +@guan.function_decorator def calculate_conductance_with_disorder_intensity_array(fermi_energy, h00, h01, disorder_intensity_array, disorder_concentration=1.0, length=100, calculation_times=1, print_show=0): import numpy as np import guan @@ -176,10 +178,10 @@ def calculate_conductance_with_disorder_intensity_array(fermi_energy, h00, h01, print(disorder_intensity, conductance_array[i0]/calculation_times) i0 += 1 conductance_array = conductance_array/calculation_times - guan.statistics_of_guan_package() return conductance_array # 计算在不同无序浓度下的电导 +@guan.function_decorator def calculate_conductance_with_disorder_concentration_array(fermi_energy, h00, h01, disorder_concentration_array, disorder_intensity=2.0, length=100, calculation_times=1, print_show=0): import numpy as np import guan @@ -193,10 +195,10 @@ def calculate_conductance_with_disorder_concentration_array(fermi_energy, h00, h print(disorder_concentration, conductance_array[i0]/calculation_times) i0 += 1 conductance_array = conductance_array/calculation_times - guan.statistics_of_guan_package() return conductance_array # 计算在不同无序散射长度下的电导 +@guan.function_decorator def calculate_conductance_with_scattering_length_array(fermi_energy, h00, h01, length_array, disorder_intensity=2.0, disorder_concentration=1.0, calculation_times=1, print_show=0): import numpy as np import guan @@ -210,10 +212,10 @@ def calculate_conductance_with_scattering_length_array(fermi_energy, h00, h01, l print(length, conductance_array[i0]/calculation_times) i0 += 1 conductance_array = conductance_array/calculation_times - guan.statistics_of_guan_package() return conductance_array # 计算得到Gamma矩阵和格林函数,用于计算六端口的量子输运 +@guan.function_decorator def get_gamma_array_and_green_for_six_terminal_transmission(fermi_energy, h00_for_lead_4, h01_for_lead_4, h00_for_lead_2, h01_for_lead_2, center_hamiltonian, width=10, length=50, internal_degree=1, moving_step_of_leads=10): import numpy as np import guan @@ -257,10 +259,10 @@ def get_gamma_array_and_green_for_six_terminal_transmission(fermi_energy, h00_fo self_energy6, gamma6 = guan.self_energy_of_lead_with_h_lead_to_center(fermi_energy, h00_for_lead_6, h01_for_lead_1, h_lead6_to_center) gamma_array = [gamma1, gamma2, gamma3, gamma4, gamma5, gamma6] green = np.linalg.inv(fermi_energy*np.eye(internal_degree*width*length)-center_hamiltonian-self_energy1-self_energy2-self_energy3-self_energy4-self_energy5-self_energy6) - guan.statistics_of_guan_package() return gamma_array, green # 计算六端口的透射矩阵 +@guan.function_decorator def calculate_six_terminal_transmission_matrix(fermi_energy, h00_for_lead_4, h01_for_lead_4, h00_for_lead_2, h01_for_lead_2, center_hamiltonian, width=10, length=50, internal_degree=1, moving_step_of_leads=10): import numpy as np import guan @@ -282,10 +284,10 @@ def calculate_six_terminal_transmission_matrix(fermi_energy, h00_for_lead_4, h01 if j0!=i0: transmission_matrix[i0, i0] = transmission_matrix[i0, i0]-transmission_matrix[i0, j0] transmission_matrix = np.real(transmission_matrix) - guan.statistics_of_guan_package() return transmission_matrix # 计算从电极1出发的透射系数 +@guan.function_decorator def calculate_six_terminal_transmissions_from_lead_1(fermi_energy, h00_for_lead_4, h01_for_lead_4, h00_for_lead_2, h01_for_lead_2, center_hamiltonian, width=10, length=50, internal_degree=1, moving_step_of_leads=10): import numpy as np import guan @@ -295,21 +297,20 @@ def calculate_six_terminal_transmissions_from_lead_1(fermi_energy, h00_for_lead_ transmission_14 = np.real(np.trace(np.dot(np.dot(np.dot(gamma_array[0], green), gamma_array[3]), green.transpose().conj()))) transmission_15 = np.real(np.trace(np.dot(np.dot(np.dot(gamma_array[0], green), gamma_array[4]), green.transpose().conj()))) transmission_16 = np.real(np.trace(np.dot(np.dot(np.dot(gamma_array[0], green), gamma_array[5]), green.transpose().conj()))) - guan.statistics_of_guan_package() return transmission_12, transmission_13, transmission_14, transmission_15, transmission_16 # 通过动量k的虚部,判断通道为传播通道还是衰减通道 +@guan.function_decorator def if_active_channel(k_of_channel): import numpy as np if np.abs(np.imag(k_of_channel))<1e-6: if_active = 1 else: if_active = 0 - import guan - guan.statistics_of_guan_package() return if_active # 获取通道的动量和速度,用于计算散射矩阵 +@guan.function_decorator def get_k_and_velocity_of_channel(fermi_energy, h00, h01): import numpy as np import math @@ -343,10 +344,10 @@ def get_k_and_velocity_of_channel(fermi_energy, h00, h01): velocity_of_channel[dim0] = eigenvalue[dim0]*np.dot(np.dot(temp[0:dim, :].transpose().conj(), h01),temp[0:dim, :])[dim0, dim0] velocity_of_channel = -2*np.imag(velocity_of_channel) eigenvector = copy.deepcopy(temp) - guan.statistics_of_guan_package() return k_of_channel, velocity_of_channel, eigenvalue, eigenvector # 获取分类后的动量和速度,以及U和F,用于计算散射矩阵 +@guan.function_decorator def get_classified_k_velocity_u_and_f(fermi_energy, h00, h01): import numpy as np import guan @@ -396,10 +397,10 @@ def get_classified_k_velocity_u_and_f(fermi_energy, h00, h01): lambda_matrix_left = np.diag(lambda_left) f_right = np.dot(np.dot(u_right, lambda_matrix_right), np.linalg.inv(u_right)) f_left = np.dot(np.dot(u_left, lambda_matrix_left), np.linalg.inv(u_left)) - guan.statistics_of_guan_package() return k_right, k_left, velocity_right, velocity_left, f_right, f_left, u_right, u_left, ind_right_active # 计算散射矩阵 +@guan.function_decorator def calculate_scattering_matrix(fermi_energy, h00, h01, length=100): import numpy as np import math @@ -442,10 +443,10 @@ def calculate_scattering_matrix(fermi_energy, h00, h01, length=100): for sum_of_tran_refl in sum_of_tran_refl_array: if sum_of_tran_refl > 1.001: print('Error Alert: scattering matrix is not normalized!') - guan.statistics_of_guan_package() return transmission_matrix, reflection_matrix, k_right, k_left, velocity_right, velocity_left, ind_right_active # 从散射矩阵中,获取散射矩阵的信息 +@guan.function_decorator def information_of_scattering_matrix(transmission_matrix, reflection_matrix, k_right, k_left, velocity_right, velocity_left, ind_right_active): import numpy as np if np.array(transmission_matrix).shape==(): @@ -464,22 +465,20 @@ def information_of_scattering_matrix(transmission_matrix, reflection_matrix, k_r total_conductance = np.sum(np.square(np.abs(transmission_matrix[0:ind_right_active, 0:ind_right_active]))) total_reflection_of_channels = np.sum(np.square(np.abs(reflection_matrix[0:ind_right_active, 0:ind_right_active])), axis=0) sum_of_transmission_and_reflection_of_channels = np.sum(np.square(np.abs(transmission_matrix[0:ind_right_active, 0:ind_right_active])), axis=0) + np.sum(np.square(np.abs(reflection_matrix[0:ind_right_active, 0:ind_right_active])), axis=0) - import guan - guan.statistics_of_guan_package() 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 # 已知h00和h01,计算散射矩阵并获得散射矩阵的信息 +@guan.function_decorator def calculate_scattering_matrix_and_get_information(fermi_energy, h00, h01, length=100): import guan transmission_matrix, reflection_matrix, k_right, k_left, velocity_right, velocity_left, ind_right_active = guan.calculate_scattering_matrix(fermi_energy, h00, h01, length=length) 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 = guan.information_of_scattering_matrix(transmission_matrix, reflection_matrix, k_right, k_left, velocity_right, velocity_left, ind_right_active) - guan.statistics_of_guan_package() - 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 # 从散射矩阵中打印出散射矩阵的信息 +@guan.function_decorator 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) @@ -522,10 +521,9 @@ def print_or_write_scattering_matrix_with_information_of_scattering_matrix(numbe f.write('\n') f.write('Total transmission of channels:\n'+str(total_transmission_of_channels)+'\n') f.write('Total conductance = '+str(total_conductance)+'\n') - import guan - guan.statistics_of_guan_package() # 已知h00和h01,计算散射矩阵并打印出散射矩阵的信息 +@guan.function_decorator def print_or_write_scattering_matrix(fermi_energy, h00, h01, length=100, print_show=1, write_file=0, filename='a', file_format='.txt'): import guan transmission_matrix, reflection_matrix, k_right, k_left, velocity_right, velocity_left, ind_right_active = guan.calculate_scattering_matrix(fermi_energy, h00, h01, length=length) @@ -534,9 +532,8 @@ def print_or_write_scattering_matrix(fermi_energy, h00, h01, length=100, print_s guan.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=print_show, write_file=write_file, filename=filename, file_format=file_format) - guan.statistics_of_guan_package() - # 在无序下,计算散射矩阵 +@guan.function_decorator def calculate_scattering_matrix_with_disorder(fermi_energy, h00, h01, length=100, disorder_intensity=2.0, disorder_concentration=1.0): import numpy as np import math @@ -583,10 +580,10 @@ def calculate_scattering_matrix_with_disorder(fermi_energy, h00, h01, length=100 for sum_of_tran_refl in sum_of_tran_refl_array: if sum_of_tran_refl > 1.001: print('Error Alert: scattering matrix is not normalized!') - guan.statistics_of_guan_package() return transmission_matrix, reflection_matrix, k_right, k_left, velocity_right, velocity_left, ind_right_active # 在无序下,计算散射矩阵,并获取散射矩阵多次计算的平均信息 +@guan.function_decorator def calculate_scattering_matrix_with_disorder_and_get_averaged_information(fermi_energy, h00, h01, length=100, disorder_intensity=2.0, disorder_concentration=1.0, calculation_times=1): import guan transmission_matrix_for_active_channels_averaged = 0 @@ -600,5 +597,4 @@ def calculate_scattering_matrix_with_disorder_and_get_averaged_information(fermi reflection_matrix_for_active_channels_averaged += reflection_matrix_for_active_channels transmission_matrix_for_active_channels_averaged = transmission_matrix_for_active_channels_averaged/calculation_times reflection_matrix_for_active_channels_averaged = reflection_matrix_for_active_channels_averaged/calculation_times - guan.statistics_of_guan_package() return transmission_matrix_for_active_channels_averaged, reflection_matrix_for_active_channels_averaged \ No newline at end of file diff --git a/PyPI/src/guan/topological_invariant.py b/PyPI/src/guan/topological_invariant.py index 325c5c6..596b634 100644 --- a/PyPI/src/guan/topological_invariant.py +++ b/PyPI/src/guan/topological_invariant.py @@ -1,6 +1,8 @@ # Module: topological_invariant +import guan # 通过高效法计算方格子的陈数 +@guan.function_decorator def calculate_chern_number_for_square_lattice_with_efficient_method(hamiltonian_function, precision=100, print_show=0): import numpy as np import math @@ -36,10 +38,10 @@ def calculate_chern_number_for_square_lattice_with_efficient_method(hamiltonian_ F = cmath.log(Ux*Uy_x*(1/Ux_y)*(1/Uy)) chern_number[i] = chern_number[i] + F chern_number = chern_number/(2*math.pi*1j) - guan.statistics_of_guan_package() return chern_number # 通过高效法计算方格子的陈数(可计算简并的情况) +@guan.function_decorator def calculate_chern_number_for_square_lattice_with_efficient_method_for_degenerate_case(hamiltonian_function, index_of_bands=[0, 1], precision=100, print_show=0): import numpy as np import math @@ -106,11 +108,10 @@ def calculate_chern_number_for_square_lattice_with_efficient_method_for_degenera det_value= det_value*dot_matrix chern_number += cmath.log(det_value) chern_number = chern_number/(2*math.pi*1j) - import guan - guan.statistics_of_guan_package() return chern_number # 通过Wilson loop方法计算方格子的陈数 +@guan.function_decorator def calculate_chern_number_for_square_lattice_with_wilson_loop(hamiltonian_function, precision_of_plaquettes=20, precision_of_wilson_loop=5, print_show=0): import numpy as np import math @@ -152,11 +153,10 @@ def calculate_chern_number_for_square_lattice_with_wilson_loop(hamiltonian_funct arg = np.log(np.diagonal(wilson_loop))/1j chern_number = chern_number + arg chern_number = chern_number/(2*math.pi) - import guan - guan.statistics_of_guan_package() return chern_number # 通过Wilson loop方法计算方格子的陈数(可计算简并的情况) +@guan.function_decorator def calculate_chern_number_for_square_lattice_with_wilson_loop_for_degenerate_case(hamiltonian_function, index_of_bands=[0, 1], precision_of_plaquettes=20, precision_of_wilson_loop=5, print_show=0): import numpy as np import math @@ -217,11 +217,10 @@ def calculate_chern_number_for_square_lattice_with_wilson_loop_for_degenerate_ca arg = np.log(wilson_loop)/1j chern_number = chern_number + arg chern_number = chern_number/(2*math.pi) - import guan - guan.statistics_of_guan_package() return chern_number # 通过高效法计算贝利曲率 +@guan.function_decorator def calculate_berry_curvature_with_efficient_method(hamiltonian_function, k_min='default', k_max='default', precision=100, print_show=0): import numpy as np import cmath @@ -265,10 +264,10 @@ def calculate_berry_curvature_with_efficient_method(hamiltonian_function, k_min= berry_curvature_array[j0, i0, i] = berry_curvature j0 += 1 i0 += 1 - guan.statistics_of_guan_package() return k_array, berry_curvature_array # 通过高效法计算贝利曲率(可计算简并的情况) +@guan.function_decorator def calculate_berry_curvature_with_efficient_method_for_degenerate_case(hamiltonian_function, index_of_bands=[0, 1], k_min='default', k_max='default', precision=100, print_show=0): import numpy as np import cmath @@ -344,11 +343,10 @@ def calculate_berry_curvature_with_efficient_method_for_degenerate_case(hamilton berry_curvature_array[j00, i00] = berry_curvature j00 += 1 i00 += 1 - import guan - guan.statistics_of_guan_package() return k_array, berry_curvature_array # 通过Wilson loop方法计算贝里曲率 +@guan.function_decorator def calculate_berry_curvature_with_wilson_loop(hamiltonian_function, k_min='default', k_max='default', precision_of_plaquettes=20, precision_of_wilson_loop=5, print_show=0): import numpy as np import math @@ -402,11 +400,10 @@ def calculate_berry_curvature_with_wilson_loop(hamiltonian_function, k_min='defa berry_curvature_array[j00, i00, :]=berry_curvature j00 += 1 i00 += 1 - import guan - guan.statistics_of_guan_package() return k_array, berry_curvature_array # 通过Wilson loop方法计算贝里曲率(可计算简并的情况) +@guan.function_decorator def calculate_berry_curvature_with_wilson_loop_for_degenerate_case(hamiltonian_function, index_of_bands=[0, 1], k_min='default', k_max='default', precision_of_plaquettes=20, precision_of_wilson_loop=5, print_show=0): import numpy as np import math @@ -475,11 +472,10 @@ def calculate_berry_curvature_with_wilson_loop_for_degenerate_case(hamiltonian_f berry_curvature_array[j000, i000]=berry_curvature j000 += 1 i000 += 1 - import guan - guan.statistics_of_guan_package() return k_array, berry_curvature_array # 计算蜂窝格子的陈数(高效法) +@guan.function_decorator def calculate_chern_number_for_honeycomb_lattice(hamiltonian_function, a=1, precision=300, print_show=0): import numpy as np import math @@ -520,10 +516,10 @@ def calculate_chern_number_for_honeycomb_lattice(hamiltonian_function, a=1, prec F = cmath.log(Ux*Uy_x*(1/Ux_y)*(1/Uy)) chern_number[i] = chern_number[i] + F chern_number = chern_number/(2*math.pi*1j) - guan.statistics_of_guan_package() return chern_number # 计算Wilson loop +@guan.function_decorator def calculate_wilson_loop(hamiltonian_function, k_min='default', k_max='default', precision=100, print_show=0): import numpy as np import guan @@ -548,5 +544,4 @@ def calculate_wilson_loop(hamiltonian_function, k_min='default', k_max='default' for i0 in range(precision-1): F = np.dot(eigenvector_array[i0+1].transpose().conj(), eigenvector_array[i0]) wilson_loop_array[i] = np.dot(F, wilson_loop_array[i]) - guan.statistics_of_guan_package() return wilson_loop_array \ No newline at end of file