From 29f1310b39316d30ca698c40f839d0ee1c09dbf7 Mon Sep 17 00:00:00 2001 From: guanjihuan <34735497+guanjihuan@users.noreply.github.com> Date: Thu, 24 Jun 2021 09:42:35 +0800 Subject: [PATCH] update --- PyPI/build/lib/guan/__init__.py | 985 -------------------- PyPI/dist/guan-0.0.1-py3-none-any.whl | Bin 9044 -> 0 bytes PyPI/dist/guan-0.0.1.tar.gz | Bin 9564 -> 0 bytes PyPI/src/guan.egg-info/PKG-INFO | 19 - PyPI/src/guan.egg-info/SOURCES.txt | 9 - PyPI/src/guan.egg-info/dependency_links.txt | 1 - PyPI/src/guan.egg-info/top_level.txt | 1 - 7 files changed, 1015 deletions(-) delete mode 100644 PyPI/build/lib/guan/__init__.py delete mode 100644 PyPI/dist/guan-0.0.1-py3-none-any.whl delete mode 100644 PyPI/dist/guan-0.0.1.tar.gz delete mode 100644 PyPI/src/guan.egg-info/PKG-INFO delete mode 100644 PyPI/src/guan.egg-info/SOURCES.txt delete mode 100644 PyPI/src/guan.egg-info/dependency_links.txt delete mode 100644 PyPI/src/guan.egg-info/top_level.txt diff --git a/PyPI/build/lib/guan/__init__.py b/PyPI/build/lib/guan/__init__.py deleted file mode 100644 index 1db4c8b..0000000 --- a/PyPI/build/lib/guan/__init__.py +++ /dev/null @@ -1,985 +0,0 @@ -import numpy as np -import cmath -from math import * -import copy - - - - -# test - -def test(): - print('\nSuccess in the installation of GUAN package!\n') - - - - -# basic functions - -## Pauli matrices - -def sigma_0(): - return np.eye(2) - -def sigma_x(): - return np.array([[0, 1],[1, 0]]) - -def sigma_y(): - return np.array([[0, -1j],[1j, 0]]) - -def sigma_z(): - return np.array([[1, 0],[0, -1]]) - - -## Kronecker product of Pauli matrices - -def sigma_00(): - return np.kron(sigma_0(), sigma_0()) - -def sigma_0x(): - return np.kron(sigma_0(), sigma_x()) - -def sigma_0y(): - return np.kron(sigma_0(), sigma_y()) - -def sigma_0z(): - return np.kron(sigma_0(), sigma_z()) - - -def sigma_x0(): - return np.kron(sigma_x(), sigma_0()) - -def sigma_xx(): - return np.kron(sigma_x(), sigma_x()) - -def sigma_xy(): - return np.kron(sigma_x(), sigma_y()) - -def sigma_xz(): - return np.kron(sigma_x(), sigma_z()) - - -def sigma_y0(): - return np.kron(sigma_y(), sigma_0()) - -def sigma_yx(): - return np.kron(sigma_y(), sigma_x()) - -def sigma_yy(): - return np.kron(sigma_y(), sigma_y()) - -def sigma_yz(): - return np.kron(sigma_y(), sigma_z()) - - -def sigma_z0(): - return np.kron(sigma_z(), sigma_0()) - -def sigma_zx(): - return np.kron(sigma_z(), sigma_x()) - -def sigma_zy(): - return np.kron(sigma_z(), sigma_y()) - -def sigma_zz(): - return np.kron(sigma_z(), sigma_z()) - - - - -# Hermitian Hamiltonian of tight binding model - -def finite_size_along_one_direction(N, on_site=0, hopping=1, period=0): - 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() - return hamiltonian - - -def finite_size_along_two_directions_for_square_lattice(N1, N2, on_site=0, hopping_1=1, hopping_2=1, period_1=0, period_2=0): - 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() - return hamiltonian - - -def finite_size_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): - 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() - return hamiltonian - - -def one_dimensional_fourier_transform(k, unit_cell, hopping): - unit_cell = np.array(unit_cell) - hopping = np.array(hopping) - hamiltonian = unit_cell+hopping*cmath.exp(1j*k)+hopping.transpose().conj()*cmath.exp(-1j*k) - return hamiltonian - - -def two_dimensional_fourier_transform_for_square_lattice(k1, k2, unit_cell, hopping_1, hopping_2): - unit_cell = np.array(unit_cell) - hopping_1 = np.array(hopping_1) - hopping_2 = np.array(hopping_2) - hamiltonian = unit_cell+hopping_1*cmath.exp(1j*k1)+hopping_1.transpose().conj()*cmath.exp(-1j*k1)+hopping_2*cmath.exp(1j*k2)+hopping_2.transpose().conj()*cmath.exp(-1j*k2) - return hamiltonian - - -def three_dimensional_fourier_transform_for_cubic_lattice(k1, k2, k3, unit_cell, hopping_1, hopping_2, hopping_3): - unit_cell = np.array(unit_cell) - hopping_1 = np.array(hopping_1) - hopping_2 = np.array(hopping_2) - hopping_3 = np.array(hopping_3) - hamiltonian = unit_cell+hopping_1*cmath.exp(1j*k1)+hopping_1.transpose().conj()*cmath.exp(-1j*k1)+hopping_2*cmath.exp(1j*k2)+hopping_2.transpose().conj()*cmath.exp(-1j*k2)+hopping_3*cmath.exp(1j*k3)+hopping_3.transpose().conj()*cmath.exp(-1j*k3) - return hamiltonian - - - - -# Hamiltonian of graphene lattice - -def hopping_along_zigzag_direction_for_graphene(N): - hopping = np.zeros((4*N, 4*N), dtype=complex) - for i0 in range(N): - hopping[4*i0+1, 4*i0+0] = 1 - hopping[4*i0+2, 4*i0+3] = 1 - return hopping - - -def finite_size_along_two_directions_for_graphene(N1, N2, period_1=0, period_2=0): - on_site = finite_size_along_one_direction(4) - hopping_1 = hopping_along_zigzag_direction_for_graphene(1) - hopping_2 = np.zeros((4, 4), dtype=complex) - hopping_2[3, 0] = 1 - hamiltonian = finite_size_along_two_directions_for_square_lattice(N1, N2, on_site, hopping_1, hopping_2, period_1, period_2) - return hamiltonian - - - - -# calculate band structures - -def calculate_eigenvalue(hamiltonian): - if np.array(hamiltonian).shape==(): - eigenvalue = np.real(hamiltonian) - else: - eigenvalue, eigenvector = np.linalg.eig(hamiltonian) - eigenvalue = np.sort(np.real(eigenvalue)) - return eigenvalue - - -def calculate_eigenvalue_with_one_parameter(x, hamiltonian_function): - dim_x = np.array(x).shape[0] - i0 = 0 - if np.array(hamiltonian_function(0)).shape==(): - eigenvalue_array = np.zeros((dim_x, 1)) - for x0 in x: - hamiltonian = hamiltonian_function(x0) - eigenvalue_array[i0, 0] = np.real(hamiltonian) - i0 += 1 - else: - dim = np.array(hamiltonian_function(0)).shape[0] - eigenvalue_array = np.zeros((dim_x, dim)) - for x0 in x: - hamiltonian = hamiltonian_function(x0) - eigenvalue, eigenvector = np.linalg.eig(hamiltonian) - eigenvalue_array[i0, :] = np.sort(np.real(eigenvalue[:])) - i0 += 1 - return eigenvalue_array - - -def calculate_eigenvalue_with_two_parameters(x, y, hamiltonian_function): - dim_x = np.array(x).shape[0] - dim_y = np.array(y).shape[0] - if np.array(hamiltonian_function(0,0)).shape==(): - eigenvalue_array = np.zeros((dim_y, dim_x, 1)) - i0 = 0 - for y0 in y: - j0 = 0 - for x0 in x: - hamiltonian = hamiltonian_function(x0, y0) - eigenvalue_array[i0, j0, 0] = np.real(hamiltonian) - j0 += 1 - i0 += 1 - else: - dim = np.array(hamiltonian_function(0, 0)).shape[0] - eigenvalue_array = np.zeros((dim_y, dim_x, dim)) - i0 = 0 - for y0 in y: - j0 = 0 - for x0 in x: - hamiltonian = hamiltonian_function(x0, y0) - eigenvalue, eigenvector = np.linalg.eig(hamiltonian) - eigenvalue_array[i0, j0, :] = np.sort(np.real(eigenvalue[:])) - j0 += 1 - i0 += 1 - return eigenvalue_array - - - - -# calculate wave functions - -def calculate_eigenvector(hamiltonian): - eigenvalue, eigenvector = np.linalg.eig(hamiltonian) - eigenvector = eigenvector[:, np.argsort(np.real(eigenvalue))] - return eigenvector - - - - -# calculate Green functions - -def green_function(fermi_energy, hamiltonian, broadening, self_energy=0): - if np.array(hamiltonian).shape==(): - dim = 1 - else: - dim = np.array(hamiltonian).shape[0] - green = np.linalg.inv((fermi_energy+broadening*1j)*np.eye(dim)-hamiltonian-self_energy) - return green - - -def green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening, self_energy=0): - h01 = np.array(h01) - if np.array(h00).shape==(): - dim = 1 - else: - dim = np.array(h00).shape[0] - green_nn_n = np.linalg.inv((fermi_energy+broadening*1j)*np.identity(dim)-h00-np.dot(np.dot(h01.transpose().conj(), green_nn_n_minus), h01)-self_energy) - return green_nn_n - - -def green_function_in_n(green_in_n_minus, h01, green_nn_n): - green_in_n = np.dot(np.dot(green_in_n_minus, h01), green_nn_n) - return green_in_n - - -def green_function_ni_n(green_nn_n, h01, green_ni_n_minus): - h01 = np.array(h01) - green_ni_n = np.dot(np.dot(green_nn_n, h01.transpose().conj()), green_ni_n_minus) - return green_ni_n - - -def green_function_ii_n(green_ii_n_minus, green_in_n_minus, h01, green_nn_n, green_ni_n_minus): - green_ii_n = green_ii_n_minus+np.dot(np.dot(np.dot(np.dot(green_in_n_minus, h01), green_nn_n), h01.transpose().conj()),green_ni_n_minus) - return green_ii_n - - - - -# calculate density of states - -def total_density_of_states(fermi_energy, hamiltonian, broadening=0.01): - green = green_function(fermi_energy, hamiltonian, broadening) - total_dos = -np.trace(np.imag(green))/pi - return total_dos - - -def total_density_of_states_with_fermi_energy_array(fermi_energy_array, hamiltonian, broadening=0.01): - dim = np.array(fermi_energy_array).shape[0] - total_dos_array = np.zeros(dim) - i0 = 0 - for fermi_energy in fermi_energy_array: - total_dos_array[i0] = total_density_of_states(fermi_energy, hamiltonian, broadening) - i0 += 1 - return total_dos_array - - -def local_density_of_states_for_square_lattice(fermi_energy, hamiltonian, N1, N2, internal_degree=1, broadening=0.01): - # dim_hamiltonian = N1*N2*internal_degree - green = green_function(fermi_energy, hamiltonian, broadening) - local_dos = np.zeros((N2, N1)) - for i1 in range(N1): - for i2 in range(N2): - for i in range(internal_degree): - local_dos[i2, i1] = local_dos[i2, i1]-np.imag(green[i1*N2*internal_degree+i2*internal_degree+i, i1*N2*internal_degree+i2*internal_degree+i])/pi - return local_dos - - -def local_density_of_states_for_cubic_lattice(fermi_energy, hamiltonian, N1, N2, N3, internal_degree=1, broadening=0.01): - # dim_hamiltonian = N1*N2*N3*internal_degree - green = green_function(fermi_energy, hamiltonian, broadening) - local_dos = np.zeros((N3, N2, N1)) - for i1 in range(N1): - for i2 in range(N2): - for i3 in range(N3): - for i in range(internal_degree): - local_dos[i3, i2, i1] = local_dos[i3, i2, i1]-np.imag(green[i1*N2*N3*internal_degree+i2*N3*internal_degree+i3*internal_degree+i, i1*N2*N3*internal_degree+i2*N3*internal_degree+i3*internal_degree+i])/pi - return local_dos - - -def local_density_of_states_for_square_lattice_using_dyson_equation(fermi_energy, h00, h01, N2, N1, internal_degree=1, broadening=0.01): - # dim_h00 = N2*internal_degree - local_dos = np.zeros((N2, N1)) - green_11_1 = green_function(fermi_energy, h00, broadening) - for i1 in range(N1): - green_nn_n_minus = green_11_1 - green_in_n_minus = green_11_1 - green_ni_n_minus = green_11_1 - green_ii_n_minus = green_11_1 - for i2_0 in range(i1): - green_nn_n = green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening) - green_nn_n_minus = green_nn_n - if i1!=0: - green_in_n_minus = green_nn_n - green_ni_n_minus = green_nn_n - green_ii_n_minus = green_nn_n - for size_0 in range(N1-1-i1): - green_nn_n = green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening) - green_nn_n_minus = green_nn_n - green_ii_n = green_function_ii_n(green_ii_n_minus, green_in_n_minus, h01, green_nn_n, green_ni_n_minus) - green_ii_n_minus = green_ii_n - green_in_n = green_function_in_n(green_in_n_minus, h01, green_nn_n) - green_in_n_minus = green_in_n - green_ni_n = green_function_ni_n(green_nn_n, h01, green_ni_n_minus) - green_ni_n_minus = green_ni_n - for i2 in range(N2): - for i in range(internal_degree): - local_dos[i2, i1] = local_dos[i2, i1] - np.imag(green_ii_n_minus[i2*internal_degree+i, i2*internal_degree+i])/pi - return local_dos - - -def local_density_of_states_for_cubic_lattice_using_dyson_equation(fermi_energy, h00, h01, N3, N2, N1, internal_degree=1, broadening=0.01): - # dim_h00 = N2*N3*internal_degree - local_dos = np.zeros((N3, N2, N1)) - green_11_1 = green_function(fermi_energy, h00, broadening) - for i1 in range(N1): - green_nn_n_minus = green_11_1 - green_in_n_minus = green_11_1 - green_ni_n_minus = green_11_1 - green_ii_n_minus = green_11_1 - for i1_0 in range(i1): - green_nn_n = green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening) - green_nn_n_minus = green_nn_n - if i1!=0: - green_in_n_minus = green_nn_n - green_ni_n_minus = green_nn_n - green_ii_n_minus = green_nn_n - for size_0 in range(N1-1-i1): - green_nn_n = green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening) - green_nn_n_minus = green_nn_n - green_ii_n = green_function_ii_n(green_ii_n_minus, green_in_n_minus, h01, green_nn_n, green_ni_n_minus) - green_ii_n_minus = green_ii_n - green_in_n = green_function_in_n(green_in_n_minus, h01, green_nn_n) - green_in_n_minus = green_in_n - green_ni_n = green_function_ni_n(green_nn_n, h01, green_ni_n_minus) - green_ni_n_minus = green_ni_n - for i2 in range(N2): - for i3 in range(N3): - for i in range(internal_degree): - local_dos[i3, i2, i1] = local_dos[i3, i2, i1] -np.imag(green_ii_n_minus[i2*N3*internal_degree+i3*internal_degree+i, i2*N3*internal_degree+i3*internal_degree+i])/pi - return local_dos - - - - -# calculate conductance - -def transfer_matrix(fermi_energy, h00, h01): - h01 = np.array(h01) - if np.array(h00).shape==(): - dim = 1 - else: - dim = np.array(h00).shape[0] - transfer = np.zeros((2*dim, 2*dim), dtype=complex) - transfer[0:dim, 0:dim] = np.dot(np.linalg.inv(h01), fermi_energy*np.identity(dim)-h00) - transfer[0:dim, dim:2*dim] = np.dot(-1*np.linalg.inv(h01), h01.transpose().conj()) - transfer[dim:2*dim, 0:dim] = np.identity(dim) - transfer[dim:2*dim, dim:2*dim] = 0 - return transfer - - -def surface_green_function_of_lead(fermi_energy, h00, h01): - h01 = np.array(h01) - if np.array(h00).shape==(): - dim = 1 - else: - dim = np.array(h00).shape[0] - fermi_energy = fermi_energy+1e-9*1j - transfer = transfer_matrix(fermi_energy, h00, h01) - eigenvalue, eigenvector = np.linalg.eig(transfer) - ind = np.argsort(np.abs(eigenvalue)) - temp = np.zeros((2*dim, 2*dim), dtype=complex) - i0 = 0 - for ind0 in ind: - temp[:, i0] = eigenvector[:, ind0] - i0 += 1 - s1 = temp[dim:2*dim, 0:dim] - s2 = temp[0:dim, 0:dim] - s3 = temp[dim:2*dim, dim:2*dim] - s4 = temp[0:dim, dim:2*dim] - right_lead_surface = np.linalg.inv(fermi_energy*np.identity(dim)-h00-np.dot(np.dot(h01, s2), np.linalg.inv(s1))) - left_lead_surface = np.linalg.inv(fermi_energy*np.identity(dim)-h00-np.dot(np.dot(h01.transpose().conj(), s3), np.linalg.inv(s4))) - return right_lead_surface, left_lead_surface - - -def self_energy_of_lead(fermi_energy, h00, h01): - h01 = np.array(h01) - right_lead_surface, left_lead_surface = surface_green_function_of_lead(fermi_energy, h00, h01) - right_self_energy = np.dot(np.dot(h01, right_lead_surface), h01.transpose().conj()) - left_self_energy = np.dot(np.dot(h01.transpose().conj(), left_lead_surface), h01) - return right_self_energy, left_self_energy - - -def calculate_conductance(fermi_energy, h00, h01, length=100): - right_self_energy, left_self_energy = self_energy_of_lead(fermi_energy, h00, h01) - for ix in range(length): - if ix == 0: - green_nn_n = green_function(fermi_energy, h00, broadening=0, self_energy=left_self_energy) - green_0n_n = copy.deepcopy(green_nn_n) - elif ix != length-1: - green_nn_n = green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0) - green_0n_n = green_function_in_n(green_0n_n, h01, green_nn_n) - else: - green_nn_n = green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0, self_energy=right_self_energy) - green_0n_n = green_function_in_n(green_0n_n, h01, green_nn_n) - right_self_energy = (right_self_energy - right_self_energy.transpose().conj())*(0+1j) - left_self_energy = (left_self_energy - left_self_energy.transpose().conj())*(0+1j) - conductance = np.trace(np.dot(np.dot(np.dot(left_self_energy, green_0n_n), right_self_energy), green_0n_n.transpose().conj())) - return conductance - - -def calculate_conductance_with_fermi_energy_array(fermi_energy_array, h00, h01, length=100): - dim = np.array(fermi_energy_array).shape[0] - conductance_array = np.zeros(dim) - i0 = 0 - for fermi_energy_0 in fermi_energy_array: - conductance_array[i0] = np.real(calculate_conductance(fermi_energy_0, h00, h01, length)) - i0 += 1 - return conductance_array - - - - -# calculate scattering matrix - -def if_active_channel(k_of_channel): - if np.abs(np.imag(k_of_channel))<1e-6: - if_active = 1 - else: - if_active = 0 - return if_active - - -def get_k_and_velocity_of_channel(fermi_energy, h00, h01): - if np.array(h00).shape==(): - dim = 1 - else: - dim = np.array(h00).shape[0] - transfer = transfer_matrix(fermi_energy, h00, h01) - eigenvalue, eigenvector = np.linalg.eig(transfer) - k_of_channel = np.log(eigenvalue)/1j - ind = np.argsort(np.real(k_of_channel)) - k_of_channel = np.sort(k_of_channel) - temp = np.zeros((2*dim, 2*dim), dtype=complex) - temp2 = np.zeros((2*dim), dtype=complex) - i0 = 0 - for ind0 in ind: - temp[:, i0] = eigenvector[:, ind0] - temp2[i0] = eigenvalue[ind0] - i0 += 1 - eigenvalue = copy.deepcopy(temp2) - temp = temp[0:dim, :] - factor = np.zeros(2*dim, dtype=complex) - for dim0 in range(dim): - factor = factor+np.square(np.abs(temp[dim0, :])) - for dim0 in range(2*dim): - temp[:, dim0] = temp[:, dim0]/np.sqrt(factor[dim0]) - velocity_of_channel = np.zeros((2*dim), dtype=complex) - for dim0 in range(2*dim): - velocity_of_channel[dim0] = eigenvalue[dim0]*np.dot(np.dot(temp[0:dim, :].transpose().conj(), h01),temp[0:dim, :])[dim0, dim0] - velocity_of_channel = -2*np.imag(velocity_of_channel) - eigenvector = copy.deepcopy(temp) - return k_of_channel, velocity_of_channel, eigenvalue, eigenvector - - -def get_classified_k_velocity_u_and_f(fermi_energy, h00, h01): - if np.array(h00).shape==(): - dim = 1 - else: - dim = np.array(h00).shape[0] - k_of_channel, velocity_of_channel, eigenvalue, eigenvector = get_k_and_velocity_of_channel(fermi_energy, h00, h01) - ind_right_active = 0; ind_right_evanescent = 0; ind_left_active = 0; ind_left_evanescent = 0 - k_right = np.zeros(dim, dtype=complex); k_left = np.zeros(dim, dtype=complex) - velocity_right = np.zeros(dim, dtype=complex); velocity_left = np.zeros(dim, dtype=complex) - lambda_right = np.zeros(dim, dtype=complex); lambda_left = np.zeros(dim, dtype=complex) - u_right = np.zeros((dim, dim), dtype=complex); u_left = np.zeros((dim, dim), dtype=complex) - for dim0 in range(2*dim): - if_active = if_active_channel(k_of_channel[dim0]) - if if_active_channel(k_of_channel[dim0]) == 1: - direction = np.sign(velocity_of_channel[dim0]) - else: - direction = np.sign(np.imag(k_of_channel[dim0])) - if direction == 1: - if if_active == 1: # right-moving active channel - k_right[ind_right_active] = k_of_channel[dim0] - velocity_right[ind_right_active] = velocity_of_channel[dim0] - lambda_right[ind_right_active] = eigenvalue[dim0] - u_right[:, ind_right_active] = eigenvector[:, dim0] - ind_right_active += 1 - else: # right-moving evanescent channel - k_right[dim-1-ind_right_evanescent] = k_of_channel[dim0] - velocity_right[dim-1-ind_right_evanescent] = velocity_of_channel[dim0] - lambda_right[dim-1-ind_right_evanescent] = eigenvalue[dim0] - u_right[:, dim-1-ind_right_evanescent] = eigenvector[:, dim0] - ind_right_evanescent += 1 - else: - if if_active == 1: # left-moving active channel - k_left[ind_left_active] = k_of_channel[dim0] - velocity_left[ind_left_active] = velocity_of_channel[dim0] - lambda_left[ind_left_active] = eigenvalue[dim0] - u_left[:, ind_left_active] = eigenvector[:, dim0] - ind_left_active += 1 - else: # left-moving evanescent channel - k_left[dim-1-ind_left_evanescent] = k_of_channel[dim0] - velocity_left[dim-1-ind_left_evanescent] = velocity_of_channel[dim0] - lambda_left[dim-1-ind_left_evanescent] = eigenvalue[dim0] - u_left[:, dim-1-ind_left_evanescent] = eigenvector[:, dim0] - ind_left_evanescent += 1 - lambda_matrix_right = np.diag(lambda_right) - lambda_matrix_left = np.diag(lambda_left) - f_right = np.dot(np.dot(u_right, lambda_matrix_right), np.linalg.inv(u_right)) - f_left = np.dot(np.dot(u_left, lambda_matrix_left), np.linalg.inv(u_left)) - return k_right, k_left, velocity_right, velocity_left, f_right, f_left, u_right, u_left, ind_right_active - - -def calculate_scattering_matrix(fermi_energy, h00, h01, length=100): - h01 = np.array(h01) - if np.array(h00).shape==(): - dim = 1 - else: - dim = np.array(h00).shape[0] - k_right, k_left, velocity_right, velocity_left, f_right, f_left, u_right, u_left, ind_right_active = get_classified_k_velocity_u_and_f(fermi_energy, h00, h01) - right_self_energy = np.dot(h01, f_right) - left_self_energy = np.dot(h01.transpose().conj(), np.linalg.inv(f_left)) - for i0 in range(length): - if i0 == 0: - green_nn_n = green_function(fermi_energy, h00, broadening=0, self_energy=left_self_energy) - green_00_n = copy.deepcopy(green_nn_n) - green_0n_n = copy.deepcopy(green_nn_n) - green_n0_n = copy.deepcopy(green_nn_n) - elif i0 != length-1: - green_nn_n = green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0) - else: - green_nn_n = green_function_nn_n(fermi_energy, h00, h01, green_nn_n, broadening=0, self_energy=right_self_energy) - green_00_n = green_function_ii_n(green_00_n, green_0n_n, h01, green_nn_n, green_n0_n) - green_0n_n = green_function_in_n(green_0n_n, h01, green_nn_n) - green_n0_n = green_function_ni_n(green_nn_n, h01, green_n0_n) - temp = np.dot(h01.transpose().conj(), np.linalg.inv(f_right)-np.linalg.inv(f_left)) - transmission_matrix = np.dot(np.dot(np.linalg.inv(u_right), np.dot(green_n0_n, temp)), u_right) - reflection_matrix = np.dot(np.dot(np.linalg.inv(u_left), np.dot(green_00_n, temp)-np.identity(dim)), u_right) - for dim0 in range(dim): - for dim1 in range(dim): - if_active = if_active_channel(k_right[dim0])*if_active_channel(k_right[dim1]) - if if_active == 1: - transmission_matrix[dim0, dim1] = np.sqrt(np.abs(velocity_right[dim0]/velocity_right[dim1])) * transmission_matrix[dim0, dim1] - reflection_matrix[dim0, dim1] = np.sqrt(np.abs(velocity_left[dim0]/velocity_right[dim1]))*reflection_matrix[dim0, dim1] - else: - transmission_matrix[dim0, dim1] = 0 - reflection_matrix[dim0, dim1] = 0 - sum_of_tran_refl_array = np.sum(np.square(np.abs(transmission_matrix[0:ind_right_active, 0:ind_right_active])), axis=0)+np.sum(np.square(np.abs(reflection_matrix[0:ind_right_active, 0:ind_right_active])), axis=0) - for sum_of_tran_refl in sum_of_tran_refl_array: - if sum_of_tran_refl > 1.001: - print('Error Alert: scattering matrix is not normalized!') - return transmission_matrix, reflection_matrix, k_right, k_left, velocity_right, velocity_left, ind_right_active - - -def print_or_write_scattering_matrix(fermi_energy, h00, h01, length=100, on_print=1, on_write=0): - if np.array(h00).shape==(): - dim = 1 - else: - dim = np.array(h00).shape[0] - transmission_matrix, reflection_matrix, k_right, k_left, velocity_right, velocity_left, ind_right_active = calculate_scattering_matrix(fermi_energy, h00, h01, length) - if on_print == 1: - print('\nActive channel (left or right) = ', ind_right_active) - print('Evanescent channel (left or right) = ', dim-ind_right_active, '\n') - print('K of right-moving active channels:\n', np.real(k_right[0:ind_right_active])) - print('K of left-moving active channels:\n', np.real(k_left[0:ind_right_active]), '\n') - print('Velocity of right-moving active channels:\n', np.real(velocity_right[0:ind_right_active])) - print('Velocity of left-moving active channels:\n', np.real(velocity_left[0:ind_right_active]), '\n') - print('Transmission matrix:\n', np.square(np.abs(transmission_matrix[0:ind_right_active, 0:ind_right_active]))) - print('Reflection matrix:\n', np.square(np.abs(reflection_matrix[0:ind_right_active, 0:ind_right_active])), '\n') - print('Total transmission of channels:\n', np.sum(np.square(np.abs(transmission_matrix[0:ind_right_active, 0:ind_right_active])), axis=0)) - print('Total reflection of channels:\n',np.sum(np.square(np.abs(reflection_matrix[0:ind_right_active, 0:ind_right_active])), axis=0)) - print('Sum of transmission and reflection of channels:\n', np.sum(np.square(np.abs(transmission_matrix[0:ind_right_active, 0:ind_right_active])), axis=0) + np.sum(np.square(np.abs(reflection_matrix[0:ind_right_active, 0:ind_right_active])), axis=0)) - print('Total conductance = ', np.sum(np.square(np.abs(transmission_matrix[0:ind_right_active, 0:ind_right_active]))), '\n') - if on_write == 1: - with open('a.txt', 'w') as f: - f.write('Active channel (left or right) = ' + str(ind_right_active) + '\n') - f.write('Evanescent channel (left or right) = ' + str(dim - ind_right_active) + '\n\n') - f.write('Channel K Velocity\n') - for ind0 in range(ind_right_active): - f.write(' '+str(ind0 + 1) + ' | '+str(np.real(k_right[ind0]))+' ' + str(np.real(velocity_right[ind0]))+'\n') - f.write('\n') - for ind0 in range(ind_right_active): - f.write(' -' + str(ind0 + 1) + ' | ' + str(np.real(k_left[ind0])) + ' ' + str(np.real(velocity_left[ind0])) + '\n') - f.write('\nScattering matrix:\n ') - for ind0 in range(ind_right_active): - f.write(str(ind0+1)+' ') - f.write('\n') - for ind1 in range(ind_right_active): - f.write(' '+str(ind1+1)+' ') - for ind2 in range(ind_right_active): - f.write('%f' % np.square(np.abs(transmission_matrix[ind1, ind2]))+' ') - f.write('\n') - f.write('\n') - for ind1 in range(ind_right_active): - f.write(' -'+str(ind1+1)+' ') - for ind2 in range(ind_right_active): - f.write('%f' % np.square(np.abs(reflection_matrix[ind1, ind2]))+' ') - f.write('\n') - f.write('\n') - f.write('Total transmission of channels:\n'+str(np.sum(np.square(np.abs(transmission_matrix[0:ind_right_active, 0:ind_right_active])), axis=0))+'\n') - f.write('Total conductance = '+str(np.sum(np.square(np.abs(transmission_matrix[0:ind_right_active, 0:ind_right_active]))))+'\n') - - - - -# calculate Chern number - -def calculate_chern_number_for_square_lattice(hamiltonian_function, precision=100): - if np.array(hamiltonian_function(0, 0)).shape==(): - dim = 1 - else: - dim = np.array(hamiltonian_function(0, 0)).shape[0] - delta = 2*pi/precision - chern_number = np.zeros(dim, dtype=complex) - for kx in np.arange(-pi, pi, delta): - for ky in np.arange(-pi, pi, delta): - H = hamiltonian_function(kx, ky) - vector = calculate_eigenvector(H) - H_delta_kx = hamiltonian_function(kx+delta, ky) - vector_delta_kx = calculate_eigenvector(H_delta_kx) - H_delta_ky = hamiltonian_function(kx, ky+delta) - vector_delta_ky = calculate_eigenvector(H_delta_ky) - H_delta_kx_ky = hamiltonian_function(kx+delta, ky+delta) - vector_delta_kx_ky = calculate_eigenvector(H_delta_kx_ky) - for i in range(dim): - vector_i = vector[:, i] - vector_delta_kx_i = vector_delta_kx[:, i] - vector_delta_ky_i = vector_delta_ky[:, i] - vector_delta_kx_ky_i = vector_delta_kx_ky[:, i] - Ux = np.dot(np.conj(vector_i), vector_delta_kx_i)/abs(np.dot(np.conj(vector_i), vector_delta_kx_i)) - Uy = np.dot(np.conj(vector_i), vector_delta_ky_i)/abs(np.dot(np.conj(vector_i), vector_delta_ky_i)) - Ux_y = np.dot(np.conj(vector_delta_ky_i), vector_delta_kx_ky_i)/abs(np.dot(np.conj(vector_delta_ky_i), vector_delta_kx_ky_i)) - Uy_x = np.dot(np.conj(vector_delta_kx_i), vector_delta_kx_ky_i)/abs(np.dot(np.conj(vector_delta_kx_i), vector_delta_kx_ky_i)) - F = cmath.log(Ux*Uy_x*(1/Ux_y)*(1/Uy)) - chern_number[i] = chern_number[i] + F - chern_number = chern_number/(2*pi*1j) - return chern_number - - - - -# calculate Wilson loop - -def calculate_wilson_loop(hamiltonian_function, k_min=-pi, k_max=pi, precision=100): - k_array = np.linspace(k_min, k_max, precision) - dim = np.array(hamiltonian_function(0)).shape[0] - wilson_loop_array = np.ones(dim, dtype=complex) - for i in range(dim): - eigenvector_array = [] - for k in k_array: - eigenvector = calculate_eigenvector(hamiltonian_function(k)) - if k != k_max: - eigenvector_array.append(eigenvector[:, i]) - else: - eigenvector_array.append(eigenvector_array[0]) - for i0 in range(precision-1): - F = np.dot(eigenvector_array[i0+1].transpose().conj(), eigenvector_array[i0]) - wilson_loop_array[i] = np.dot(F, wilson_loop_array[i]) - return wilson_loop_array - - - - -# read and write - -def read_one_dimensional_data(filename='a'): - f = open(filename+'.txt', 'r') - text = f.read() - f.close() - row_list = np.array(text.split('\n')) - dim_column = np.array(row_list[0].split()).shape[0] - x = np.array([]) - y = np.array([]) - for row in row_list: - column = np.array(row.split()) - if column.shape[0] != 0: - x = np.append(x, [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).shape[0] == 0: - y = [y_row] - else: - y = np.append(y, [y_row], axis=0) - return x, y - - -def read_two_dimensional_data(filename='a'): - f = open(filename+'.txt', 'r') - text = f.read() - f.close() - row_list = np.array(text.split('\n')) - dim_column = np.array(row_list[0].split()).shape[0] - x = np.array([]) - y = 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 = np.zeros(x_str.shape[0]) - for i00 in range(x_str.shape[0]): - x[i00] = float(x_str[i00]) - elif column.shape[0] != 0: - y = np.append(y, [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) - return x, y, matrix - - -def write_one_dimensional_data(x, y, filename='a'): - with open(filename+'.txt', 'w') as f: - i0 = 0 - for x0 in x: - f.write(str(x0)+' ') - if len(y.shape) == 1: - f.write(str(y[i0])+'\n') - elif len(y.shape) == 2: - for j0 in range(y.shape[1]): - f.write(str(y[i0, j0])+' ') - f.write('\n') - i0 += 1 - - -def write_two_dimensional_data(x, y, matrix, filename='a'): - with open(filename+'.txt', 'w') as f: - f.write('0 ') - for x0 in x: - f.write(str(x0)+' ') - f.write('\n') - i0 = 0 - for y0 in y: - f.write(str(y0)) - j0 = 0 - for x0 in x: - f.write(' '+str(matrix[i0, j0])+' ') - j0 += 1 - f.write('\n') - i0 += 1 - - - - -# plot figures - -def plot(x, y, xlabel='x', ylabel='y', title='', filename='a', show=1, save=0, type='', y_min=None, y_max=None): - import matplotlib.pyplot as plt - fig, ax = plt.subplots() - plt.subplots_adjust(bottom=0.20, left=0.18) - ax.plot(x, y, type) - ax.grid() - ax.set_title(title, fontsize=20, fontfamily='Times New Roman') - ax.set_xlabel(xlabel, fontsize=20, fontfamily='Times New Roman') - ax.set_ylabel(ylabel, fontsize=20, fontfamily='Times New Roman') - if y_min!=None or y_max!=None: - if y_min==None: - y_min=min(y) - if y_max==None: - y_max=max(y) - ax.set_ylim(y_min, y_max) - ax.tick_params(labelsize=20) - labels = ax.get_xticklabels() + ax.get_yticklabels() - [label.set_fontname('Times New Roman') for label in labels] - if save == 1: - plt.savefig(filename+'.jpg', dpi=300) - if show == 1: - plt.show() - plt.close('all') - - -def plot_3d_surface(x, y, matrix, xlabel='x', ylabel='y', zlabel='z', title='', filename='a', show=1, save=0, z_min=None, z_max=None): - 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, y = np.meshgrid(x, y) - if len(matrix.shape) == 2: - surf = ax.plot_surface(x, y, matrix, cmap=cm.coolwarm, linewidth=0, antialiased=False) - elif len(matrix.shape) == 3: - for i0 in range(matrix.shape[2]): - surf = ax.plot_surface(x, y, matrix[:,:,i0], cmap=cm.coolwarm, linewidth=0, antialiased=False) - ax.set_title(title, fontsize=20, fontfamily='Times New Roman') - ax.set_xlabel(xlabel, fontsize=20, fontfamily='Times New Roman') - ax.set_ylabel(ylabel, fontsize=20, fontfamily='Times New Roman') - ax.set_zlabel(zlabel, fontsize=20, 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=15) - labels = ax.get_xticklabels() + ax.get_yticklabels() + ax.get_zticklabels() - [label.set_fontname('Times New Roman') for label in labels] - cax = plt.axes([0.80, 0.15, 0.05, 0.75]) - cbar = fig.colorbar(surf, cax=cax) - cbar.ax.tick_params(labelsize=15) - for l in cbar.ax.yaxis.get_ticklabels(): - l.set_family('Times New Roman') - if save == 1: - plt.savefig(filename+'.jpg', dpi=300) - if show == 1: - plt.show() - plt.close('all') - - -def plot_contour(x, y, matrix, xlabel='x', ylabel='y', title='', filename='a', show=1, save=0): - import matplotlib.pyplot as plt - fig, ax = plt.subplots() - plt.subplots_adjust(bottom=0.2, right=0.75, left = 0.16) - x, y = np.meshgrid(x, y) - contour = ax.contourf(x,y,matrix,cmap='jet') - ax.set_title(title, fontsize=20, fontfamily='Times New Roman') - ax.set_xlabel(xlabel, fontsize=20, fontfamily='Times New Roman') - ax.set_ylabel(ylabel, fontsize=20, fontfamily='Times New Roman') - ax.tick_params(labelsize=15) - labels = ax.get_xticklabels() + ax.get_yticklabels() - [label.set_fontname('Times New Roman') for label in labels] - cax = plt.axes([0.78, 0.17, 0.08, 0.71]) - cbar = fig.colorbar(contour, cax=cax) - cbar.ax.tick_params(labelsize=15) - for l in cbar.ax.yaxis.get_ticklabels(): - l.set_family('Times New Roman') - if save == 1: - plt.savefig(filename+'.jpg', dpi=300) - if show == 1: - plt.show() - plt.close('all') - - - - -# download - -def download_with_scihub(address=None, num=1): - from bs4 import BeautifulSoup - import re - import requests - import os - if num==1 and address!=None: - address_array = [address] - else: - address_array = [] - for i in range(num): - address = input('\nInput:') - address_array.append(address) - for address in address_array: - r = requests.post('https://sci-hub.st/', data={'request': address}) - print('\nResponse:', r) - print('Address:', r.url) - soup = BeautifulSoup(r.text, features='lxml') - pdf_URL = soup.iframe['src'] - if re.search(re.compile('^https:'), pdf_URL): - pass - else: - pdf_URL = 'https:'+pdf_URL - print('PDF address:', pdf_URL) - name = re.search(re.compile('fdp.*?/'),pdf_URL[::-1]).group()[::-1][1::] - print('PDF name:', name) - print('Directory:', os.getcwd()) - print('\nDownloading...') - r = requests.get(pdf_URL, stream=True) - with open(name, 'wb') as f: - for chunk in r.iter_content(chunk_size=32): - f.write(chunk) - print('Completed!\n') - if num != 1: - print('All completed!\n') \ No newline at end of file diff --git a/PyPI/dist/guan-0.0.1-py3-none-any.whl b/PyPI/dist/guan-0.0.1-py3-none-any.whl deleted file mode 100644 index 48e86a6c5e8628ea6cf900a9faad7ba3d7fe0015..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9044 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 diff --git a/PyPI/src/guan.egg-info/PKG-INFO b/PyPI/src/guan.egg-info/PKG-INFO deleted file mode 100644 index 815a414..0000000 --- a/PyPI/src/guan.egg-info/PKG-INFO +++ /dev/null @@ -1,19 +0,0 @@ -Metadata-Version: 2.1 -Name: guan -Version: 0.0.1 -Summary: An open source python package -Home-page: https://py.guanjihuan.com -Author: guanjihuan -Author-email: guanjihuan@163.com -License: UNKNOWN -Project-URL: Bug Tracker, https://py.guanjihuan.com -Platform: UNKNOWN -Classifier: Programming Language :: Python :: 3 -Classifier: License :: OSI Approved :: MIT License -Classifier: Operating System :: OS Independent -Requires-Python: >=3.6 -Description-Content-Type: text/markdown -License-File: LICENSE - -GUAN is an open-source python package developed and maintained by https://www.guanjihuan.com. The primary location of this package is on website https://py.guanjihuan.com. - diff --git a/PyPI/src/guan.egg-info/SOURCES.txt b/PyPI/src/guan.egg-info/SOURCES.txt deleted file mode 100644 index d26d474..0000000 --- a/PyPI/src/guan.egg-info/SOURCES.txt +++ /dev/null @@ -1,9 +0,0 @@ -LICENSE -README.md -pyproject.toml -setup.cfg -src/guan/__init__.py -src/guan.egg-info/PKG-INFO -src/guan.egg-info/SOURCES.txt -src/guan.egg-info/dependency_links.txt -src/guan.egg-info/top_level.txt \ No newline at end of file diff --git a/PyPI/src/guan.egg-info/dependency_links.txt b/PyPI/src/guan.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/PyPI/src/guan.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/PyPI/src/guan.egg-info/top_level.txt b/PyPI/src/guan.egg-info/top_level.txt deleted file mode 100644 index ff25243..0000000 --- a/PyPI/src/guan.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -guan