TB2J 0.9.0__py3-none-any.whl → 0.9.0.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. TB2J/Jdownfolder.py +110 -24
  2. TB2J/Jtensor.py +1 -1
  3. TB2J/MAE.py +188 -0
  4. TB2J/__init__.py +1 -1
  5. TB2J/abacus/MAE.py +320 -0
  6. TB2J/abacus/abacus_wrapper.py +20 -2
  7. TB2J/abacus/occupations.py +278 -0
  8. TB2J/abacus/test_density_matrix.py +38 -0
  9. TB2J/exchange.py +1 -1
  10. TB2J/green.py +2 -13
  11. TB2J/mathutils/__init__.py +1 -0
  12. TB2J/mathutils/fermi.py +22 -0
  13. TB2J/mathutils/kR_convert.py +90 -0
  14. TB2J/mathutils/lowdin.py +12 -0
  15. TB2J/mathutils/rotate_spin.py +35 -0
  16. TB2J/patch.py +50 -0
  17. TB2J/pauli.py +17 -0
  18. TB2J/utils.py +82 -1
  19. {TB2J-0.9.0.data → TB2J-0.9.0.2.data}/scripts/TB2J_downfold.py +8 -0
  20. {TB2J-0.9.0.dist-info → TB2J-0.9.0.2.dist-info}/METADATA +6 -9
  21. {TB2J-0.9.0.dist-info → TB2J-0.9.0.2.dist-info}/RECORD +33 -23
  22. {TB2J-0.9.0.dist-info → TB2J-0.9.0.2.dist-info}/WHEEL +1 -1
  23. {TB2J-0.9.0.data → TB2J-0.9.0.2.data}/scripts/TB2J_eigen.py +0 -0
  24. {TB2J-0.9.0.data → TB2J-0.9.0.2.data}/scripts/TB2J_magnon.py +0 -0
  25. {TB2J-0.9.0.data → TB2J-0.9.0.2.data}/scripts/TB2J_magnon_dos.py +0 -0
  26. {TB2J-0.9.0.data → TB2J-0.9.0.2.data}/scripts/TB2J_merge.py +0 -0
  27. {TB2J-0.9.0.data → TB2J-0.9.0.2.data}/scripts/TB2J_rotate.py +0 -0
  28. {TB2J-0.9.0.data → TB2J-0.9.0.2.data}/scripts/TB2J_rotateDM.py +0 -0
  29. {TB2J-0.9.0.data → TB2J-0.9.0.2.data}/scripts/abacus2J.py +0 -0
  30. {TB2J-0.9.0.data → TB2J-0.9.0.2.data}/scripts/siesta2J.py +0 -0
  31. {TB2J-0.9.0.data → TB2J-0.9.0.2.data}/scripts/wann2J.py +0 -0
  32. {TB2J-0.9.0.dist-info → TB2J-0.9.0.2.dist-info}/LICENSE +0 -0
  33. {TB2J-0.9.0.dist-info → TB2J-0.9.0.2.dist-info}/top_level.txt +0 -0
TB2J/green.py CHANGED
@@ -7,6 +7,8 @@ import tempfile
7
7
  from pathos.multiprocessing import ProcessPool
8
8
  import sys
9
9
  import pickle
10
+ import warnings
11
+ from TB2J.mathutils.fermi import fermi
10
12
 
11
13
  MAX_EXP_ARGUMENT = np.log(sys.float_info.max)
12
14
 
@@ -26,19 +28,6 @@ def eigen_to_G(evals, evecs, efermi, energy):
26
28
  )
27
29
 
28
30
 
29
- def fermi(e, mu, width=0.01):
30
- """
31
- the fermi function.
32
- .. math::
33
- f=\\frac{1}{\exp((e-\mu)/width)+1}
34
-
35
- :param e,mu,width: e,\mu,width
36
- """
37
-
38
- x = (e - mu) / width
39
- return np.where(x < MAX_EXP_ARGUMENT, 1 / (1.0 + np.exp(x)), 0.0)
40
-
41
-
42
31
  def find_energy_ingap(evals, rbound, gap=4.0):
43
32
  """
44
33
  find a energy inside a gap below rbound (right bound),
@@ -0,0 +1 @@
1
+ from .lowdin import Lowdin
@@ -0,0 +1,22 @@
1
+ import numpy as np
2
+ import warnings
3
+ import sys
4
+
5
+ MAX_EXP_ARGUMENT = np.log(sys.float_info.max)
6
+
7
+
8
+ def fermi(e, mu, width=0.01):
9
+ """
10
+ the fermi function.
11
+ .. math::
12
+ f=\\frac{1}{\exp((e-\mu)/width)+1}
13
+
14
+ :param e,mu,width: e,\mu,width
15
+ """
16
+ x = (e - mu) / width
17
+ # disable overflow warning
18
+ with warnings.catch_warnings():
19
+ warnings.simplefilter("ignore")
20
+ ret = np.where(x < MAX_EXP_ARGUMENT, 1 / (1.0 + np.exp(x)), 0.0)
21
+
22
+ return ret
@@ -0,0 +1,90 @@
1
+ import numpy as np
2
+
3
+
4
+ def HR_to_k(HR, Rlist, kpts):
5
+ # Hk[k,:,:] = sum_R (H[R] exp(i2pi k.R))
6
+ phase = np.exp(2.0j * np.pi * np.tensordot(kpts, Rlist, axes=([1], [1])))
7
+ Hk = np.einsum("rlm, kr -> klm", HR, phase)
8
+ return Hk
9
+
10
+
11
+ def Hk_to_R(Hk, Rlist, kpts, kweights):
12
+ phase = np.exp(-2.0j * np.pi * np.tensordot(kpts, Rlist, axes=([1], [1])))
13
+ HR = np.einsum("klm, kr, k->rlm", Hk, phase, kweights)
14
+ return HR
15
+
16
+
17
+ def k_to_R(kpts, Rlist, Mk, kweights=None):
18
+ """
19
+ Transform k-space wavefunctions to real space.
20
+ params:
21
+ kpts: k-points
22
+ Rlist: list of R vectors
23
+ Mk: matrix of shape [nkpt, n1, n2] in k-space.
24
+
25
+ return:
26
+ MR: matrix of shape [nR, n1, n2], the matrix in R-space.
27
+
28
+ """
29
+ nkpt, n1, n2 = Mk.shape
30
+ if kweights is None:
31
+ kweights = np.ones(nkpt, dtype=float) / nkpt
32
+ phase = np.exp(-2.0j * np.pi * np.tensordot(kpts, Rlist, axes=([1], [1])))
33
+ MR = np.einsum("klm, kr, k -> rlm", Mk, phase, kweights)
34
+ return MR
35
+
36
+ # nkpt, n1, n2 = Mk.shape
37
+ # nR = Rlist.shape[0]
38
+ # MR = np.zeros((nR, n1, n2), dtype=complex)
39
+ # if kweights is None:
40
+ # kweights = np.ones(nkpt, dtype=float)/nkpt
41
+ # for iR, R in enumerate(Rlist):
42
+ # for ik in range(nkpt):
43
+ # MR[iR] += Mk[ik] * np.exp(-2.0j*np.pi * np.dot(kpts[ik], R)) * kweights[ik]
44
+ # return MR
45
+
46
+
47
+ def R_to_k(kpts, Rlist, MR):
48
+ """
49
+ Transform real-space wavefunctions to k-space.
50
+ params:
51
+ kpts: k-points
52
+ Rlist: list of R vectors
53
+ MR: matrix of shape [nR, n1, n2] in R-space.
54
+
55
+ return:
56
+ Mk: matrix of shape [nkpt, n1, n2], the matrix in k-space.
57
+
58
+ """
59
+ phase = np.exp(2.0 * np.pi * 1j * np.tensordot(kpts, Rlist, axes=([1], [1])))
60
+ Mk = np.einsum("rlm, kr -> klm", MR, phase)
61
+
62
+ # nkpt, n1, n2 = Mk.shape
63
+ # nR = Rlist.shape[0]
64
+ # Mk = np.zeros((nkpt, n1, n2), dtype=complex)
65
+ # for iR, R in enumerate(Rlist):
66
+ # for ik in range(nkpt):
67
+ # Mk[ik] += MR[iR] * np.exp(2.0 * np.pi * 1j * np.dot(kpts[ik], R))
68
+ return Mk
69
+
70
+
71
+ def R_to_onek(kpt, Rlist, MR):
72
+ """
73
+ Transform real-space wavefunctions to k-space.
74
+ params:
75
+ kpt: k-point
76
+ Rlist: list of R vectors
77
+ MR: matrix of shape [nR, n1, n2] in R-space.
78
+
79
+ return:
80
+ Mk: matrix of shape [n1, n2], the matrix in k-space.
81
+
82
+ """
83
+ phase = np.exp(2.0j * np.pi * np.dot(Rlist, kpt))
84
+ Mk = np.einsum("rlm, r -> lm", MR, phase)
85
+ return Mk
86
+ # n1, n2 = MR.shape[1:]
87
+ # Mk = np.zeros((n1, n2), dtype=complex)
88
+ # for iR, R in enumerate(Rlist):
89
+ # Mk += MR[iR] * np.exp(2.0j*np.pi * np.dot(kpt, R))
90
+ # return Mk
@@ -0,0 +1,12 @@
1
+ import numpy as np
2
+ from scipy.linalg import inv, eigh
3
+
4
+
5
+ def Lowdin(S):
6
+ """
7
+ Calculate S^(-1/2).
8
+ Which is used in lowind's symmetric orthonormalization.
9
+ psi_prime = S^(-1/2) psi
10
+ """
11
+ eigval, eigvec = eigh(S)
12
+ return eigvec @ np.diag(np.sqrt(1.0 / eigval)) @ (eigvec.T.conj())
@@ -0,0 +1,35 @@
1
+ import numpy as np
2
+ from TB2J.pauli import pauli_block_all, s0, s1, s2, s3, gather_pauli_blocks
3
+
4
+
5
+ def rotate_Matrix_from_z_to_axis(M, axis, normalize=True):
6
+ """
7
+ Given a spinor matrix M, rotate it from z-axis to axis.
8
+ The spinor matrix M is a 2x2 matrix, which can be decomposed as I, x, y, z components using Pauli matrices.
9
+ """
10
+ MI, Mx, My, Mz = pauli_block_all(M)
11
+ axis = axis / np.linalg.norm(axis)
12
+ # M_new = s0* MI + Mz * (axis[0] * s1 + axis[1] * s2 + axis[2] * s3) *2
13
+ M_new = gather_pauli_blocks(MI, Mz * axis[0], Mz * axis[1], Mz * axis[2])
14
+ return M_new
15
+
16
+
17
+ def test_rotate_Matrix_from_z_to_axis():
18
+ M = np.array([[1.1, 0], [0, 0.9]])
19
+ print(pauli_block_all(M))
20
+ Mnew = rotate_Matrix_from_z_to_axis(M, [1, 1, 1])
21
+ print(pauli_block_all(Mnew))
22
+ print(Mnew)
23
+
24
+ M = np.array(
25
+ [
26
+ [-9.90532976e-06 + 0.0j, 0.00000000e00 + 0.0j],
27
+ [0.00000000e00 + 0.0j, -9.88431291e-06 + 0.0j],
28
+ ]
29
+ )
30
+ print(M)
31
+ print(rotate_Matrix_from_z_to_axis(M, [0, 0, 1]))
32
+
33
+
34
+ if __name__ == "__main__":
35
+ test_rotate_Matrix_from_z_to_axis()
TB2J/patch.py ADDED
@@ -0,0 +1,50 @@
1
+ import types
2
+ from unittest import mock
3
+
4
+ class A(object):#but seems to work for old style objects too
5
+ def funcx(self,x):
6
+ print("x1=",x)
7
+ print("called from", self)
8
+
9
+ def method(self,x):
10
+ print("xmethod=",x)
11
+ print("called from", self)
12
+
13
+ def patch_me(target):
14
+ def method(target,x):
15
+ print("x=",x)
16
+ print("called from", target)
17
+ target.method = types.MethodType(method,target)
18
+
19
+ def method(self,x):
20
+ print("x=",x)
21
+ print("called from", self)
22
+
23
+ @mock.patch("__main__.A")
24
+ def funcx(self,x):
25
+ print("new x=",x)
26
+ print("called from", self)
27
+
28
+ A.method=method
29
+ #add more if needed
30
+ a = A()
31
+ print(A.__dict__)
32
+ print(a)
33
+ #out: <__main__.A object at 0x2b73ac88bfd0>
34
+
35
+ @mock.patch("__main__.a")
36
+ def funcx(self,x):
37
+ print("x=",x)
38
+ print("called from", self)
39
+
40
+ a.funcx(3)
41
+ patch_me(a) #patch instance
42
+ a.method=method
43
+ #a.method(5)
44
+ #out: x= 5
45
+ #out: called from <__main__.A object at 0x2b73ac88bfd0>
46
+ patch_me(A)
47
+
48
+ a.method(6) #can patch class too
49
+ #out: x= 6
50
+ #out: called from <class '__main__.A'>
TB2J/pauli.py CHANGED
@@ -143,7 +143,24 @@ def pauli_block_all(M):
143
143
  return MI, Mx, My, Mz
144
144
 
145
145
 
146
+ def gather_pauli_blocks(MI, Mx, My, Mz):
147
+ """
148
+ Gather the I, x, y, z component of a matrix.
149
+ """
150
+ return np.kron(MI, s0) + np.kron(Mx, s1) + np.kron(My, s2) + np.kron(Mz, s3)
151
+
152
+
153
+ def test_gather_pauli_blocks():
154
+ M = np.random.rand(4, 4)
155
+ MI, Mx, My, Mz = pauli_block_all(M)
156
+ M2 = gather_pauli_blocks(MI, Mx, My, Mz)
157
+ assert np.allclose(M, M2)
158
+
159
+
146
160
  def op_norm(M):
161
+ """
162
+ Return the operator norm of a matrix.
163
+ """
147
164
  return max(svd(M)[1])
148
165
 
149
166
 
TB2J/utils.py CHANGED
@@ -87,6 +87,7 @@ def auto_assign_wannier_to_atom(positions, atoms, max_distance=0.1, half=False):
87
87
  """
88
88
  pos = np.array(positions)
89
89
  atompos = atoms.get_scaled_positions(wrap=False)
90
+ cell = atoms.get_cell()
90
91
  ind_atoms = []
91
92
  newpos = []
92
93
  refpos = []
@@ -95,8 +96,9 @@ def auto_assign_wannier_to_atom(positions, atoms, max_distance=0.1, half=False):
95
96
  dp = p[None, :] - atompos
96
97
  # residual of d
97
98
  r = dp - np.round(dp)
99
+ r_cart = r @ cell
98
100
  # find the min of residual
99
- normd = np.linalg.norm(r, axis=1)
101
+ normd = np.linalg.norm(r_cart, axis=1)
100
102
  iatom = np.argmin(normd)
101
103
  # ref+residual
102
104
  rmin = r[iatom]
@@ -330,3 +332,82 @@ def simpson_nonuniform(x, f):
330
332
  result += f[N - 1] * (h[N - 1] ** 2 + 3 * h[N - 1] * h[N - 2]) / (6 * h[N - 2])
331
333
  result -= f[N - 2] * h[N - 1] ** 3 / (6 * h[N - 2] * (h[N - 2] + h[N - 1]))
332
334
  return result
335
+
336
+
337
+ def simpson_nonuniform_weight(x):
338
+ """
339
+ Simpson rule for irregularly spaced data.
340
+ x: list or np.array of floats
341
+ Sampling points for the function values
342
+ Returns
343
+ -------
344
+ weight : list or np.array of floats
345
+ weight for the Simpson rule
346
+ For the function f(x), the integral is approximated as
347
+ $\int f(x) dx \approx \sum_i weight[i] * f(x[i])$
348
+ """
349
+
350
+ weight = np.zeros_like(x)
351
+ N = len(x) - 1
352
+ h = np.diff(x)
353
+
354
+ for i in range(1, N, 2):
355
+ hph = h[i] + h[i - 1]
356
+ weight[i] += (h[i] ** 3 + h[i - 1] ** 3 + 3.0 * h[i] * h[i - 1] * hph) / (
357
+ 6 * h[i] * h[i - 1]
358
+ )
359
+ weight[i - 1] += (
360
+ 2.0 * h[i - 1] ** 3 - h[i] ** 3 + 3.0 * h[i] * h[i - 1] ** 2
361
+ ) / (6 * h[i - 1] * hph)
362
+ weight[i + 1] += (
363
+ 2.0 * h[i] ** 3 - h[i - 1] ** 3 + 3.0 * h[i - 1] * h[i] ** 2
364
+ ) / (6 * h[i] * hph)
365
+
366
+ if (N + 1) % 2 == 0:
367
+ weight[N] += (2 * h[N - 1] ** 2 + 3.0 * h[N - 2] * h[N - 1]) / (
368
+ 6 * (h[N - 2] + h[N - 1])
369
+ )
370
+ weight[N - 1] += (h[N - 1] ** 2 + 3 * h[N - 1] * h[N - 2]) / (6 * h[N - 2])
371
+ weight[N - 2] -= h[N - 1] ** 3 / (6 * h[N - 2] * (h[N - 2] + h[N - 1]))
372
+ return weight
373
+
374
+
375
+ def trapz_nonuniform_weight(x):
376
+ """
377
+ trapezoidal rule for irregularly spaced data.
378
+ x: list or np.array of floats
379
+ Sampling points for the function values
380
+ Returns
381
+ -------
382
+ weight : list or np.array of floats
383
+ weight for the trapezoidal rule
384
+ For the function f(x), the integral is approximated as
385
+ $\int f(x) dx \approx \sum_i weight[i] * f(x[i])$
386
+ """
387
+ h = np.diff(x)
388
+ weight = np.zeros_like(x)
389
+ weight[0] = h[0] / 2.0
390
+ weight[1:-1] = (h[1:] + h[:-1]) / 2.0
391
+ weight[-1] = h[-1] / 2.0
392
+ return weight
393
+
394
+
395
+ def test_simpson_nonuniform():
396
+ x = np.array([0.0, 0.1, 0.3, 0.5, 0.8, 1.0])
397
+ w = simpson_nonuniform_weight(x)
398
+ # assert np.allclose(w, [0.1, 0.4, 0.4, 0.4, 0.4, 0.1])
399
+ assert np.allclose(simpson_nonuniform(x, x**8), 0.12714277533333335)
400
+ print("simpson_weight:", simpson_nonuniform_weight(x) @ x**8, 0.12714277533333335)
401
+ print("trapz_weight:", trapz_nonuniform_weight(x) @ x**8)
402
+
403
+ x2 = np.linspace(0, 1, 500)
404
+ print(simpson_nonuniform_weight(x2) @ x2**8, 1 / 9.0)
405
+ print(simpson_nonuniform_weight(x2) @ x2**8)
406
+ print("simpson_weight:", simpson_nonuniform_weight(x2) @ x2**8)
407
+ print("trapz_weight:", trapz_nonuniform_weight(x2) @ x2**8)
408
+
409
+ assert np.allclose(simpson_nonuniform(x, x**8), 1 / 9.0)
410
+
411
+
412
+ if __name__ == "__main__":
413
+ test_simpson_nonuniform()
@@ -58,6 +58,13 @@ def main():
58
58
  default=False,
59
59
  )
60
60
 
61
+ parser.add_argument(
62
+ "--method",
63
+ help="The method to downfold the exchange parameter. Options are Lowdin and PWF (projected Wannier function). ",
64
+ type=str,
65
+ default="Lowdin",
66
+ )
67
+
61
68
  args = parser.parse_args()
62
69
 
63
70
  if len(args.metals) == []:
@@ -73,6 +80,7 @@ def main():
73
80
  outpath=args.outpath,
74
81
  qmesh=args.qmesh,
75
82
  iso_only=args.iso_only,
83
+ method=args.method,
76
84
  )
77
85
 
78
86
 
@@ -1,12 +1,10 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: TB2J
3
- Version: 0.9.0
3
+ Version: 0.9.0.2
4
4
  Summary: TB2J: First principle to Heisenberg exchange J using tight-binding Green function method
5
- Home-page: UNKNOWN
6
5
  Author: Xu He
7
6
  Author-email: mailhexu@gmail.com
8
7
  License: BSD-2-clause
9
- Platform: UNKNOWN
10
8
  Classifier: Development Status :: 3 - Alpha
11
9
  Classifier: Programming Language :: Python :: 3
12
10
  Classifier: Operating System :: OS Independent
@@ -16,14 +14,13 @@ Classifier: Topic :: Scientific/Engineering :: Physics
16
14
  Classifier: License :: OSI Approved :: BSD License
17
15
  Requires-Python: >=3.6
18
16
  License-File: LICENSE
19
- Requires-Dist: ase (>=3.19)
17
+ Requires-Dist: numpy >1.16.5
18
+ Requires-Dist: scipy
20
19
  Requires-Dist: matplotlib
21
- Requires-Dist: numpy (>1.16.5)
22
- Requires-Dist: packaging (>=20.0)
20
+ Requires-Dist: ase >=3.19
21
+ Requires-Dist: tqdm
23
22
  Requires-Dist: pathos
23
+ Requires-Dist: packaging >=20.0
24
24
  Requires-Dist: pre-commit
25
- Requires-Dist: scipy
26
- Requires-Dist: tqdm
27
25
 
28
26
  TB2J is a Python package aimed to compute automatically the magnetic interactions (superexchange and Dzyaloshinskii-Moriya) between atoms of magnetic crystals from DFT Hamiltonian based on Wannier functions or Linear combination of atomic orbitals. It uses the Green's function method and take the local rigid spin rotation as a perturbation. The package can take the output from Wannier90, which is interfaced with many density functional theory codes or from codes based on localised orbitals. A minimal user input is needed, which allows for an easily integration into a high-throughput workflows.
29
-
@@ -1,20 +1,21 @@
1
- TB2J/Jdownfolder.py,sha256=Nw2ixvn2Uq-o1wficz6rdaYHjfRN3U_kQCvrNJGNb68,6980
2
- TB2J/Jtensor.py,sha256=0fhfOcfVQGu75gytEnApKWTJZfg9ksKJ0anJgco5wRQ,3179
1
+ TB2J/Jdownfolder.py,sha256=Rmg6KfQ-Lkhei5daTJ2POzr0XL-R1WM-rzUnDcfoDhc,9595
2
+ TB2J/Jtensor.py,sha256=t6OsqrSlYW6Im4H7ykVAW8Al_pFXN4C5yj2UEsV6r7g,3181
3
+ TB2J/MAE.py,sha256=-KWqxjKJvPFuxsMjm0c3nESyUFDeFTqsV7QzPJN-Fxo,7579
3
4
  TB2J/Oiju.py,sha256=cNGv8N5uH_swGq7cnAt2OyiDfqtjLlLrwseGu0E4iaM,3383
4
5
  TB2J/Oiju_epc.py,sha256=oytM3NYW7nWmklrGgNlqwIpI_JYv_hb7ZnR4o9nYNog,6809
5
- TB2J/__init__.py,sha256=H9NWRZb7NbeRRPLP_V1fARmLNXranorVM-OOY-8_2ug,22
6
+ TB2J/__init__.py,sha256=hcEWkag_UvLm1ZSbjsgcTWkGVlR3Bwmzg1QYAwsvf-g,24
6
7
  TB2J/basis.py,sha256=DFo6_QUwjBwisP6zGxvoO0lpGTMDPAOkiL9giNCjOjA,1558
7
8
  TB2J/citation.py,sha256=gcQeyJZaT1Qrtsl8Y3s4neOH3-vvgmIcCvXeV2o3vj0,2891
8
9
  TB2J/contour.py,sha256=aw8LX6wVFCRPhcpkzuI0jGnHisvk4cezvUhkF_6Yx94,2633
9
10
  TB2J/cut_cell.py,sha256=kr9WeQhBQLm8QXL2B3NcsSYmSw-OAtJk3f9wksAOZbs,2952
10
11
  TB2J/density_matrix.py,sha256=D5k8Oe21OCiLVORNYbo4TZOFG0slrQSbj91kJ3TMFjs,1514
11
12
  TB2J/epc.py,sha256=zLbtqZJhDr8DnnGN6YENcXwrMb3Qxu6KB08mLy9Pw20,3474
12
- TB2J/exchange.py,sha256=Xg2fuUZbj-Icpqc65Ictllxvdvct8Ec4KQPAmEyo0oM,29586
13
+ TB2J/exchange.py,sha256=dsXQhlxXaBurxa7z3YkBjqmEFFtfEy1xaHf0VT3eKZE,29581
13
14
  TB2J/exchangeCL2.py,sha256=TIr-d2X56AiGe4qEhyXyZhRuwXvQG6clJMwDmjnTOaE,10985
14
15
  TB2J/exchange_pert.py,sha256=jmFMtQbYa_uczM4VAeS6TijkIHRFIqEzZJswzE9Wfuo,8523
15
16
  TB2J/exchange_qspace.py,sha256=ZL68qBGFUaQ9BsSPsJaaoWOr9RssPiqX34R_9I3nk_8,8436
16
17
  TB2J/gpaw_wrapper.py,sha256=aJ--9Dtyq7jOP1Hkh-Sh1nWcfXm6zKcljOCO0DNCAr0,6890
17
- TB2J/green.py,sha256=X-D8UZcIyz6zh_0W9VgUUv5yXPP3KWJ6C03m6CMWE3o,13377
18
+ TB2J/green.py,sha256=QAJbDaR91QLres5gUPk37iqVsuQdPTt92VtEYLCl240,13170
18
19
  TB2J/greentest.py,sha256=2ISSfhor9ecSEOi_E6b4Cv26wEIQlwlzca0ru8z44_E,1603
19
20
  TB2J/io_merge.py,sha256=t85k3L6IL9X5ys-PWK7CzResb3xJsyqM3LAlKPUe9vM,6825
20
21
  TB2J/kpoints.py,sha256=6XK2KqTncidEq3o9GuO6VEZRPNTRtWeXg9QfcV-9smI,532
@@ -22,7 +23,8 @@ TB2J/manager.py,sha256=4-4x9jJRHpUEqJuhc5HqpXfh2-Ze5G9Wg8gOtn-AqR4,15372
22
23
  TB2J/mathutils.py,sha256=tHA6q3KPDpXLIbZHdDZ2NU5s886VVM_oEG490zQ6Ris,300
23
24
  TB2J/myTB.py,sha256=ok_B4my29bOIghMSZfx0Es6G8FaXaIiLP4gPxTdSj00,17659
24
25
  TB2J/orbmap.py,sha256=RCMJkOPGbfPrcZzcc5ia1ZMKBQWxGcyj8W1ve8BJaEw,6669
25
- TB2J/pauli.py,sha256=_FIF62jq2CkQdWC473a3S2F6NmzCdeCnglO9PjNVmMI,4120
26
+ TB2J/patch.py,sha256=Z3KZklID9U8zKuk6Ek1Tq95JcY3eT4770dsdcXz6mAA,1067
27
+ TB2J/pauli.py,sha256=zOELm7Vgxw6SMaO5l7qVWx1pBKZt25RLnEpnVM3dz_0,4545
26
28
  TB2J/pert.py,sha256=RaCJfewl0doht4cjAnzzGKe-uj2le4aqe0iPKFrq9fo,1192
27
29
  TB2J/plot.py,sha256=AnFIFWE2vlmj7Z6f_7-dX_O1stJN-qbuiurPj43dUCM,4104
28
30
  TB2J/rotate_atoms.py,sha256=Dwptn-wdDW4zYzjYb95yxTzuZOe9WPuLjh3d3-YcSs0,3277
@@ -31,14 +33,17 @@ TB2J/sisl_wrapper.py,sha256=A5x1-tt8efUSPeGY5wM5m6-pJYQFXTCzQHVqD6RBa2g,14792
31
33
  TB2J/supercell.py,sha256=4hgLGPBLRUDhtD-eF29v46ex7fHdkH-OENjS2wGLFww,19588
32
34
  TB2J/tensor_rotate.py,sha256=4-DfT_Mg5e40fbd74M5W0D5DqmUq-kVOOLDkkkI834A,8083
33
35
  TB2J/utest.py,sha256=z_ahi7tpHQF9WlHNQihcQ7qzfezRJQXQt28eB1X_z64,3897
34
- TB2J/utils.py,sha256=_ARYKAeWfP1p5w0mEl-d7KwNfXoqC85TveYl0iCBD3c,9880
36
+ TB2J/utils.py,sha256=DHkc7BK0KUGesfoAv1OxMgIw_iZzcFXh--3ybsFSd_c,12535
35
37
  TB2J/versioninfo.py,sha256=wZwS9QDFRVDe7rf8JyPDDI8UGdTQiO6Pb_sWv8GAegA,337
38
+ TB2J/abacus/MAE.py,sha256=q9aSVDRZFAnZL3gHdNmde7sxj80oe-BRjwDO-ipyfew,12237
36
39
  TB2J/abacus/__init__.py,sha256=5sHiDnF2L-Y80QeET9zOiS83a5T_TQAXvnIhcYB6wNU,56
37
40
  TB2J/abacus/abacus_api.py,sha256=D_NyXW-Pno92d3RVHByx0l1HDPHQAvXsmQVt8cfIGR8,7267
38
- TB2J/abacus/abacus_wrapper.py,sha256=QR3ZW6v-d7dgneKwBO5s9FfCjBp-fkWMEaTO4SlcROA,8461
41
+ TB2J/abacus/abacus_wrapper.py,sha256=PaO7qEE-h1tv2nKsV8h2RZUrmAWjkw8MKapj8Fk9U5s,9006
39
42
  TB2J/abacus/gen_exchange_abacus.py,sha256=lKZqkWMnLQtaSwgn8O5Fzr-pV6tzwoMqfZU_vbET6gU,2973
43
+ TB2J/abacus/occupations.py,sha256=vaMVeZwldgzGDxjA7i3-2-V6akXjpgJwJFWKozJ-l2k,8947
40
44
  TB2J/abacus/orbital_api.py,sha256=l48Hn5z7TA0TH7Is4NDmz74b6B9L2ztYO4dRR37U4mQ,1562
41
45
  TB2J/abacus/stru_api.py,sha256=aBKKlZ2hvAZChVCfNxRdxH51rfHKqZn6kOlazY-yW8k,67888
46
+ TB2J/abacus/test_density_matrix.py,sha256=f0xHOTzIssT-XTvBJrQHU0JVbvBYOE1Mduh-j7qiLO8,774
42
47
  TB2J/abacus/test_read_HRSR.py,sha256=cAT-e79jGjCBXLTJ9UYX0WvalG_yD4Awl79tTOUcwaQ,1254
43
48
  TB2J/abacus/test_read_stru.py,sha256=CpK4zWhlCVAMCmYQmp9Hy-A40OblZQLFpo5JokpNcWQ,785
44
49
  TB2J/external/__init__.py,sha256=yD_ZIMi76H49rj6GAQpiB7UlKa3TgSaMkkLHT6M-8w8,137
@@ -51,6 +56,11 @@ TB2J/io_exchange/io_tomsasd.py,sha256=NqkAC1Fl-CUnFA21eBzSy_S5F_oeQFJysw4UukQbN8
51
56
  TB2J/io_exchange/io_txt.py,sha256=BMr1eSILlKpgtjvDx7uw2VMAkEKSvGEPNxpaT_zev0I,10547
52
57
  TB2J/io_exchange/io_uppasd.py,sha256=bI4iPEgnK4TvCZNvb6x2xYXgjW7pEehCqmcizy2pqFU,3301
53
58
  TB2J/io_exchange/io_vampire.py,sha256=UllC4twf06_q2vBCnAYFzEDGvS8mSefwQXDquBuyc0M,5583
59
+ TB2J/mathutils/__init__.py,sha256=tQLBfHkZqdVfVxPOahy42qMUkFYnFFFhM-uc4QsYFxI,27
60
+ TB2J/mathutils/fermi.py,sha256=tzEicVoxE_5DxPDDZMvi4ynR1_Iqf-Qh0-0zfm-iVBo,480
61
+ TB2J/mathutils/kR_convert.py,sha256=p_9XWJVNanTzTK2rI6KRjTkbSq42la6N448-zJOsMwY,2671
62
+ TB2J/mathutils/lowdin.py,sha256=tHA6q3KPDpXLIbZHdDZ2NU5s886VVM_oEG490zQ6Ris,300
63
+ TB2J/mathutils/rotate_spin.py,sha256=XtfwHGfIqI9nRYZcCd_yQ3Ud1AXVJj9fwqIHloMcaCs,1111
54
64
  TB2J/spinham/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
65
  TB2J/spinham/base_parser.py,sha256=oQRHvFE_BlUtTaTZykKgvicu40oXcbICB-D1aAt-qlA,2196
56
66
  TB2J/spinham/constants.py,sha256=y4-hRyl5EAR42k24Oa5XhAsUQtKVn1MAgyqNf-p3PrM,762
@@ -66,18 +76,18 @@ TB2J/spinham/supercell.py,sha256=y17uUC6r3gQb278FhxIW4CABihfLTvKFj6flyXrCPR8,122
66
76
  TB2J/wannier/__init__.py,sha256=7ojCbM84PYv1X1Tbo4NHI-d3gWmQsZB_xiYqbfxVV1E,80
67
77
  TB2J/wannier/w90_parser.py,sha256=dbd63LuKyv2DVUzqRINGsbDzEsOxsQyE8_Ear_LQIRg,4620
68
78
  TB2J/wannier/w90_tb_parser.py,sha256=qt8pnuprmPp9iIAYwPkPbmEzk6ZPgMq2xognoQp7vwc,4610
69
- TB2J-0.9.0.data/scripts/TB2J_downfold.py,sha256=F9oImXFysejCMP7eIBjbCX2jdHFOCvDW5beF1sG-UM8,1854
70
- TB2J-0.9.0.data/scripts/TB2J_eigen.py,sha256=Qs9v2hnMm2Tpfoa4h53muUKty2dZjwx8948MBoQooNg,1128
71
- TB2J-0.9.0.data/scripts/TB2J_magnon.py,sha256=q7UwAmorRcFNk4tfE7gl_ny05l6p7pbD9Wm_LkIpKEw,3101
72
- TB2J-0.9.0.data/scripts/TB2J_magnon_dos.py,sha256=TMXQvD2dIbO5FZ4tUMmxJgCgH2O2hDAPUNfEKO4z-x4,110
73
- TB2J-0.9.0.data/scripts/TB2J_merge.py,sha256=y834SF4rIRn1L1ptkhczvavQpC-8Px6DTmDOOSaq_DE,1854
74
- TB2J-0.9.0.data/scripts/TB2J_rotate.py,sha256=zgiDFuYZNmzKK0rwDmTaYD2OpRlmKA_VGeBx83w2Xwc,873
75
- TB2J-0.9.0.data/scripts/TB2J_rotateDM.py,sha256=kCvF7gotuqAX1VnJ06cwfVm7RrhrdtiV5v7d9P2Pn_E,567
76
- TB2J-0.9.0.data/scripts/abacus2J.py,sha256=M4B07lvTCDczTPTqvnDh_PERzCARAd09TLKv4aIdSQM,4408
77
- TB2J-0.9.0.data/scripts/siesta2J.py,sha256=hBzS7ZgoHM3oXlTCQd-xVA07Ks2FiIwyRpQWUFITRPE,4303
78
- TB2J-0.9.0.data/scripts/wann2J.py,sha256=2t2hWwyELskYCwkGDziCgiIAnfr6odLLJ6cQBJ2RQwQ,5714
79
- TB2J-0.9.0.dist-info/LICENSE,sha256=CbZI-jyRTjiqIcWa244cRSHJdjjtUNqGR4HeJkgEwJw,1332
80
- TB2J-0.9.0.dist-info/METADATA,sha256=4ooTIlcMyCl-axTuL5PI9qfK4i7k5zFEoHFl-CiYXOc,1462
81
- TB2J-0.9.0.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
82
- TB2J-0.9.0.dist-info/top_level.txt,sha256=whYa5ByLYhl5XnTPBHSWr-IGD6VWmr5Ql2bye2qwV_s,5
83
- TB2J-0.9.0.dist-info/RECORD,,
79
+ TB2J-0.9.0.2.data/scripts/TB2J_downfold.py,sha256=i4BVqnpDdgrX_amookVWeLGefGBn-qeAutWiwuY9SfQ,2099
80
+ TB2J-0.9.0.2.data/scripts/TB2J_eigen.py,sha256=Qs9v2hnMm2Tpfoa4h53muUKty2dZjwx8948MBoQooNg,1128
81
+ TB2J-0.9.0.2.data/scripts/TB2J_magnon.py,sha256=q7UwAmorRcFNk4tfE7gl_ny05l6p7pbD9Wm_LkIpKEw,3101
82
+ TB2J-0.9.0.2.data/scripts/TB2J_magnon_dos.py,sha256=TMXQvD2dIbO5FZ4tUMmxJgCgH2O2hDAPUNfEKO4z-x4,110
83
+ TB2J-0.9.0.2.data/scripts/TB2J_merge.py,sha256=y834SF4rIRn1L1ptkhczvavQpC-8Px6DTmDOOSaq_DE,1854
84
+ TB2J-0.9.0.2.data/scripts/TB2J_rotate.py,sha256=zgiDFuYZNmzKK0rwDmTaYD2OpRlmKA_VGeBx83w2Xwc,873
85
+ TB2J-0.9.0.2.data/scripts/TB2J_rotateDM.py,sha256=kCvF7gotuqAX1VnJ06cwfVm7RrhrdtiV5v7d9P2Pn_E,567
86
+ TB2J-0.9.0.2.data/scripts/abacus2J.py,sha256=M4B07lvTCDczTPTqvnDh_PERzCARAd09TLKv4aIdSQM,4408
87
+ TB2J-0.9.0.2.data/scripts/siesta2J.py,sha256=hBzS7ZgoHM3oXlTCQd-xVA07Ks2FiIwyRpQWUFITRPE,4303
88
+ TB2J-0.9.0.2.data/scripts/wann2J.py,sha256=2t2hWwyELskYCwkGDziCgiIAnfr6odLLJ6cQBJ2RQwQ,5714
89
+ TB2J-0.9.0.2.dist-info/LICENSE,sha256=CbZI-jyRTjiqIcWa244cRSHJdjjtUNqGR4HeJkgEwJw,1332
90
+ TB2J-0.9.0.2.dist-info/METADATA,sha256=WhFy-Jej3lhp1tyTWrIr_J4hbutGY_DD1S5zJk1YqYk,1420
91
+ TB2J-0.9.0.2.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
92
+ TB2J-0.9.0.2.dist-info/top_level.txt,sha256=whYa5ByLYhl5XnTPBHSWr-IGD6VWmr5Ql2bye2qwV_s,5
93
+ TB2J-0.9.0.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.37.1)
2
+ Generator: bdist_wheel (0.43.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
File without changes
File without changes