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