TB2J 0.9.5rc0__py3-none-any.whl → 0.9.7rc0__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 (59) hide show
  1. TB2J/MAE.py +144 -27
  2. TB2J/MAEGreen.py +84 -0
  3. TB2J/anisotropy.py +672 -0
  4. TB2J/contour.py +8 -0
  5. TB2J/exchange.py +38 -172
  6. TB2J/exchangeCL2.py +11 -13
  7. TB2J/exchange_params.py +213 -0
  8. TB2J/green.py +62 -27
  9. TB2J/interfaces/__init__.py +12 -0
  10. TB2J/interfaces/abacus/__init__.py +4 -0
  11. TB2J/{abacus → interfaces/abacus}/abacus_api.py +3 -3
  12. TB2J/{abacus → interfaces/abacus}/abacus_wrapper.py +11 -8
  13. TB2J/{abacus → interfaces/abacus}/gen_exchange_abacus.py +5 -3
  14. TB2J/{abacus → interfaces/abacus}/orbital_api.py +4 -4
  15. TB2J/{abacus → interfaces/abacus}/stru_api.py +11 -11
  16. TB2J/{abacus → interfaces/abacus}/test_read_HRSR.py +0 -1
  17. TB2J/{abacus → interfaces/abacus}/test_read_stru.py +5 -3
  18. TB2J/interfaces/gpaw_interface.py +54 -0
  19. TB2J/interfaces/lawaf_interface.py +129 -0
  20. TB2J/interfaces/manager.py +23 -0
  21. TB2J/interfaces/siesta_interface.py +202 -0
  22. TB2J/interfaces/wannier90_interface.py +115 -0
  23. TB2J/io_exchange/io_exchange.py +21 -7
  24. TB2J/io_merge.py +2 -1
  25. TB2J/mathutils/fermi.py +11 -6
  26. TB2J/mathutils/lowdin.py +12 -2
  27. TB2J/mathutils/rotate_spin.py +222 -4
  28. TB2J/pauli.py +11 -3
  29. TB2J/symmetrize_J.py +120 -0
  30. TB2J/utils.py +82 -1
  31. {TB2J-0.9.5rc0.data → TB2J-0.9.7rc0.data}/scripts/abacus2J.py +5 -4
  32. {TB2J-0.9.5rc0.data → TB2J-0.9.7rc0.data}/scripts/siesta2J.py +21 -4
  33. TB2J-0.9.7rc0.data/scripts/wann2J.py +96 -0
  34. {TB2J-0.9.5rc0.dist-info → TB2J-0.9.7rc0.dist-info}/METADATA +5 -3
  35. {TB2J-0.9.5rc0.dist-info → TB2J-0.9.7rc0.dist-info}/RECORD +47 -46
  36. {TB2J-0.9.5rc0.dist-info → TB2J-0.9.7rc0.dist-info}/WHEEL +1 -1
  37. TB2J-0.9.7rc0.dist-info/entry_points.txt +3 -0
  38. TB2J/abacus/MAE.py +0 -320
  39. TB2J/abacus/__init__.py +0 -1
  40. TB2J/abacus/occupations.py +0 -278
  41. TB2J/cut_cell.py +0 -82
  42. TB2J/io_exchange/io_pickle.py +0 -0
  43. TB2J/manager.py +0 -445
  44. TB2J/mathutils.py +0 -12
  45. TB2J/patch.py +0 -50
  46. TB2J/spinham/h_matrix.py +0 -68
  47. TB2J/spinham/obtain_J.py +0 -79
  48. TB2J/supercell.py +0 -532
  49. TB2J-0.9.5rc0.data/scripts/wann2J.py +0 -194
  50. TB2J/{abacus → interfaces/abacus}/test_density_matrix.py +1 -1
  51. {TB2J-0.9.5rc0.data → TB2J-0.9.7rc0.data}/scripts/TB2J_downfold.py +0 -0
  52. {TB2J-0.9.5rc0.data → TB2J-0.9.7rc0.data}/scripts/TB2J_eigen.py +0 -0
  53. {TB2J-0.9.5rc0.data → TB2J-0.9.7rc0.data}/scripts/TB2J_magnon.py +0 -0
  54. {TB2J-0.9.5rc0.data → TB2J-0.9.7rc0.data}/scripts/TB2J_magnon_dos.py +0 -0
  55. {TB2J-0.9.5rc0.data → TB2J-0.9.7rc0.data}/scripts/TB2J_merge.py +0 -0
  56. {TB2J-0.9.5rc0.data → TB2J-0.9.7rc0.data}/scripts/TB2J_rotate.py +0 -0
  57. {TB2J-0.9.5rc0.data → TB2J-0.9.7rc0.data}/scripts/TB2J_rotateDM.py +0 -0
  58. {TB2J-0.9.5rc0.dist-info → TB2J-0.9.7rc0.dist-info}/LICENSE +0 -0
  59. {TB2J-0.9.5rc0.dist-info → TB2J-0.9.7rc0.dist-info}/top_level.txt +0 -0
TB2J/pauli.py CHANGED
@@ -148,7 +148,13 @@ def gather_pauli_blocks(MI, Mx, My, Mz, coeffs=[1.0, 1.0, 1.0, 1.0]):
148
148
  Gather the I, x, y, z component of a matrix.
149
149
  """
150
150
  cI, cx, cy, cz = coeffs
151
- return cI*np.kron(MI, s0) + cx*np.kron(Mx, s1) + cy*np.kron(My, s2) + cz*np.kron(Mz, s3)
151
+ return (
152
+ cI * np.kron(MI, s0)
153
+ + cx * np.kron(Mx, s1)
154
+ + cy * np.kron(My, s2)
155
+ + cz * np.kron(Mz, s3)
156
+ )
157
+
152
158
 
153
159
  def pauli_part(M, coeffs=[1.0, 1.0, 1.0, 1.0]):
154
160
  """
@@ -157,23 +163,25 @@ def pauli_part(M, coeffs=[1.0, 1.0, 1.0, 1.0]):
157
163
  MI, Mx, My, Mz = pauli_block_all(M)
158
164
  return gather_pauli_blocks(MI, Mx, My, Mz, coeffs=coeffs)
159
165
 
166
+
160
167
  def chargepart(M):
161
168
  """
162
169
  Get the charge part of a matrix.
163
170
  """
164
171
  MI = (M[::2, ::2] + M[1::2, 1::2]) / 2.0
165
172
  Mcopy = np.zeros_like(M)
166
- Mcopy[::2, ::2] = MI
173
+ Mcopy[::2, ::2] = MI
167
174
  Mcopy[1::2, 1::2] = MI
168
175
  return Mcopy
169
176
 
177
+
170
178
  def spinpart(M):
171
179
  """
172
180
  Get the spin part of a matrix.
173
181
  """
174
182
  MI = (M[::2, ::2] + M[1::2, 1::2]) / 2.0
175
183
  Mcopy = M.copy()
176
- Mcopy[::2, ::2] -= MI
184
+ Mcopy[::2, ::2] -= MI
177
185
  Mcopy[1::2, 1::2] -= MI
178
186
  return Mcopy
179
187
 
TB2J/symmetrize_J.py ADDED
@@ -0,0 +1,120 @@
1
+ from sympair import SymmetryPairFinder, SymmetryPairGroupDict
2
+ import numpy as np
3
+ from pathlib import Path
4
+ from TB2J.versioninfo import print_license
5
+ import copy
6
+
7
+
8
+ class TB2JSymmetrizer:
9
+ def __init__(self, exc, symprec=1e-8, verbose=True):
10
+ # list of pairs with the index of atoms
11
+ ijRs = exc.ijR_list_index_atom()
12
+ finder = SymmetryPairFinder(atoms=exc.atoms, pairs=ijRs, symprec=symprec)
13
+ self.verbose = verbose
14
+
15
+ if verbose:
16
+ print("=" * 30)
17
+ print_license()
18
+ print("-" * 30)
19
+ print(
20
+ "WARNING: The symmetry detection is based on the crystal symmetry, not the magnetic symmetry. Make sure if this is what you want."
21
+ )
22
+ print("-" * 30)
23
+ if exc.has_dmi:
24
+ print(
25
+ "WARNING: Currently only the isotropic exchange is symmetrized. Symmetrization of DMI and anisotropic exchange are not yet implemented."
26
+ )
27
+
28
+ print(f"Finding crystal symmetry with symprec of {symprec} Angstrom.")
29
+ print("Symmetry found:")
30
+ print(finder.spacegroup)
31
+ print(f"-" * 30)
32
+ self.pgdict = finder.get_symmetry_pair_group_dict()
33
+ self.exc = exc
34
+ self.new_exc = copy.deepcopy(exc)
35
+
36
+ def print_license(self):
37
+ print_license()
38
+
39
+ def symmetrize_J(self):
40
+ """
41
+ Symmetrize the exchange parameters J.
42
+ """
43
+ symJdict = {}
44
+ Jdict = self.exc.exchange_Jdict
45
+ ngroup = self.pgdict
46
+ for pairgroup in self.pgdict.groups:
47
+ ijRs = pairgroup.get_all_ijR()
48
+ ijRs_spin = [self.exc.ijR_index_atom_to_spin(*ijR) for ijR in ijRs]
49
+ Js = [self.exc.get_J(*ijR_spin) for ijR_spin in ijRs_spin]
50
+ Javg = np.average(Js)
51
+ for i, j, R in ijRs_spin:
52
+ symJdict[(R, i, j)] = Javg
53
+ self.new_exc.exchange_Jdict = symJdict
54
+
55
+ def output(self, path="TB2J_symmetrized"):
56
+ if path is None:
57
+ path = Path(".")
58
+ self.new_exc.write_all(path=path)
59
+
60
+ def run(self, path=None):
61
+ print("** Symmetrizing exchange parameters.")
62
+ self.symmetrize_J()
63
+ print("** Outputing the symmetrized exchange parameters.")
64
+ print(f"** Output path: {path} .")
65
+ self.output(path=path)
66
+ print("** Finished.")
67
+
68
+
69
+ def symmetrize_J(
70
+ exc=None,
71
+ path=None,
72
+ fname="TB2J.pickle",
73
+ symprec=1e-5,
74
+ output_path="TB2J_symmetrized",
75
+ ):
76
+ """
77
+ symmetrize the exchange parameters
78
+ parameters:
79
+ exc: exchange
80
+ """
81
+ if exc is None:
82
+ exc = SpinIO.load_pickle(path=path, fname=fname)
83
+ symmetrizer = TB2JSymmetrizer(exc, symprec=symprec)
84
+ symmetrizer.run(path=output_path)
85
+
86
+
87
+ def symmetrize_J_cli():
88
+ from argparse import ArgumentParser
89
+
90
+ parser = ArgumentParser(
91
+ description="Symmetrize exchange parameters. Currently, it take the crystal symmetry into account and not the magnetic moment into account."
92
+ )
93
+ parser.add_argument(
94
+ "-i",
95
+ "--inpath",
96
+ default=None,
97
+ help="input path to the exchange parameters",
98
+ )
99
+ parser.add_argument(
100
+ "-o",
101
+ "--outpath",
102
+ default="TB2J_results_symmetrized",
103
+ help="output path to the symmetrized exchange parameters",
104
+ )
105
+ parser.add_argument(
106
+ "-s",
107
+ "--symprec",
108
+ type=float,
109
+ default=1e-5,
110
+ help="precision for symmetry detection. default is 1e-5 Angstrom",
111
+ )
112
+ args = parser.parse_args()
113
+ if args.inpath is None:
114
+ parser.print_help()
115
+ raise ValueError("Please provide the input path to the exchange.")
116
+ symmetrize_J(path=args.inpath, output_path=args.outpath, symprec=args.symprec)
117
+
118
+
119
+ if __name__ == "__main__":
120
+ symmetrize_J_cli()
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()
@@ -1,8 +1,9 @@
1
1
  #!python
2
- from TB2J.abacus.gen_exchange_abacus import gen_exchange_abacus
3
- from TB2J.versioninfo import print_license
4
- import sys
5
2
  import argparse
3
+ import sys
4
+
5
+ from TB2J.interfaces import gen_exchange_abacus
6
+ from TB2J.versioninfo import print_license
6
7
 
7
8
 
8
9
  def run_abacus2J():
@@ -141,7 +142,7 @@ def run_abacus2J():
141
142
  description=args.description,
142
143
  output_path=args.output_path,
143
144
  use_cache=args.use_cache,
144
- np=args.np,
145
+ nproc=args.np,
145
146
  exclude_orbs=args.exclude_orbs,
146
147
  orb_decomposition=args.orb_decomposition,
147
148
  )
@@ -1,8 +1,9 @@
1
1
  #!python
2
- from TB2J.manager import gen_exchange_siesta
3
- from TB2J.versioninfo import print_license
4
- import sys
5
2
  import argparse
3
+ import sys
4
+
5
+ from TB2J.interfaces import gen_exchange_siesta
6
+ from TB2J.versioninfo import print_license
6
7
 
7
8
 
8
9
  def run_siesta2J():
@@ -107,6 +108,20 @@ def run_siesta2J():
107
108
  default="TB2J_results",
108
109
  )
109
110
 
111
+ parser.add_argument(
112
+ "--split_soc",
113
+ help="whether the SOC part of the Hamiltonian can be read from the output of siesta. Default: False",
114
+ action="store_true",
115
+ default=False,
116
+ )
117
+
118
+ parser.add_argument(
119
+ "--orth",
120
+ help="whether to use orthogonalization before the diagonization of the electron Hamiltonian. Default: False",
121
+ action="store_true",
122
+ default=False,
123
+ )
124
+
110
125
  args = parser.parse_args()
111
126
 
112
127
  if args.elements is None:
@@ -134,9 +149,11 @@ def run_siesta2J():
134
149
  description=args.description,
135
150
  output_path=args.output_path,
136
151
  use_cache=args.use_cache,
137
- np=args.np,
152
+ nproc=args.np,
138
153
  exclude_orbs=args.exclude_orbs,
139
154
  orb_decomposition=args.orb_decomposition,
155
+ read_H_soc=args.split_soc,
156
+ orth=args.orth,
140
157
  )
141
158
 
142
159
 
@@ -0,0 +1,96 @@
1
+ #!python
2
+ import argparse
3
+ import sys
4
+
5
+ from TB2J.exchange_params import add_exchange_args_to_parser
6
+ from TB2J.interfaces import gen_exchange
7
+ from TB2J.versioninfo import print_license
8
+
9
+
10
+ def run_wann2J():
11
+ print_license()
12
+ parser = argparse.ArgumentParser(
13
+ description="wann2J: Using magnetic force theorem to calculate exchange parameter J from wannier functions"
14
+ )
15
+ parser.add_argument(
16
+ "--path", help="path to the wannier files", default="./", type=str
17
+ )
18
+ parser.add_argument(
19
+ "--posfile", help="name of the position file", default="POSCAR", type=str
20
+ )
21
+ parser.add_argument(
22
+ "--prefix_spinor",
23
+ help="prefix to the spinor wannier files",
24
+ default="wannier90",
25
+ type=str,
26
+ )
27
+ parser.add_argument(
28
+ "--prefix_up",
29
+ help="prefix to the spin up wannier files",
30
+ default="wannier90.up",
31
+ type=str,
32
+ )
33
+ parser.add_argument(
34
+ "--prefix_down",
35
+ help="prefix to the spin down wannier files",
36
+ default="wannier90.dn",
37
+ type=str,
38
+ )
39
+ parser.add_argument(
40
+ "--groupby",
41
+ help="In the spinor case, the order of the orbitals have two conventions: 1: group by spin (orb1_up, orb2_up,... orb1_down, ...), 2,group by orbital (orb1_up, orb1_down, orb2_up, ...,). Use 'spin' in the former case and 'orbital' in the latter case. The default is spin.",
42
+ default="spin",
43
+ type=str,
44
+ )
45
+ parser.add_argument(
46
+ "--wannier_type",
47
+ help="The type of Wannier function, either Wannier90 or banddownfolder",
48
+ type=str,
49
+ default="Wannier90",
50
+ )
51
+
52
+ # parser.add_argument("--qspace",
53
+ # action="store_true",
54
+ # help="Whether to calculate J in qspace first and transform to real space.",
55
+ # default=False)
56
+
57
+ add_exchange_args_to_parser(parser)
58
+
59
+ args = parser.parse_args()
60
+
61
+ if args.efermi is None:
62
+ print("Please input fermi energy using --efermi ")
63
+ sys.exit()
64
+ if args.elements is None:
65
+ print("Please input the magnetic elements, e.g. --elements Fe Ni")
66
+ sys.exit()
67
+
68
+ gen_exchange(
69
+ path=args.path,
70
+ colinear=(not args.spinor),
71
+ groupby=args.groupby,
72
+ posfile=args.posfile,
73
+ efermi=args.efermi,
74
+ kmesh=args.kmesh,
75
+ magnetic_elements=args.elements,
76
+ Rcut=args.rcut,
77
+ prefix_SOC=args.prefix_spinor,
78
+ prefix_up=args.prefix_up,
79
+ prefix_dn=args.prefix_down,
80
+ emin=args.emin,
81
+ emax=args.emax,
82
+ nz=args.nz,
83
+ use_cache=args.use_cache,
84
+ nproc=args.np,
85
+ description=args.description,
86
+ output_path=args.output_path,
87
+ exclude_orbs=args.exclude_orbs,
88
+ wannier_type=args.wannier_type,
89
+ # qspace=args.qspace,
90
+ write_density_matrix=args.write_dm,
91
+ orb_decomposition=args.orb_decomposition,
92
+ )
93
+
94
+
95
+ if __name__ == "__main__":
96
+ run_wann2J()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: TB2J
3
- Version: 0.9.5rc0
3
+ Version: 0.9.7rc0
4
4
  Summary: TB2J: First principle to Heisenberg exchange J using tight-binding Green function method
5
5
  Author: Xu He
6
6
  Author-email: mailhexu@gmail.com
@@ -14,13 +14,15 @@ Classifier: Topic :: Scientific/Engineering :: Physics
14
14
  Classifier: License :: OSI Approved :: BSD License
15
15
  Requires-Python: >=3.6
16
16
  License-File: LICENSE
17
- Requires-Dist: numpy >1.16.5
17
+ Requires-Dist: numpy <2.0
18
18
  Requires-Dist: scipy
19
19
  Requires-Dist: matplotlib
20
20
  Requires-Dist: ase >=3.19
21
21
  Requires-Dist: tqdm
22
22
  Requires-Dist: pathos
23
23
  Requires-Dist: packaging >=20.0
24
- Requires-Dist: HamiltonIO >=0.1.5
24
+ Requires-Dist: HamiltonIO >=0.1.7
25
+ Requires-Dist: pre-commit
26
+ Requires-Dist: sympair >0.1.0
25
27
 
26
28
  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.
@@ -1,73 +1,73 @@
1
1
  TB2J/Jdownfolder.py,sha256=Rmg6KfQ-Lkhei5daTJ2POzr0XL-R1WM-rzUnDcfoDhc,9595
2
2
  TB2J/Jtensor.py,sha256=t6OsqrSlYW6Im4H7ykVAW8Al_pFXN4C5yj2UEsV6r7g,3181
3
- TB2J/MAE.py,sha256=-KWqxjKJvPFuxsMjm0c3nESyUFDeFTqsV7QzPJN-Fxo,7579
3
+ TB2J/MAE.py,sha256=9VwwLpUALaaVwn4LTnhSISJMT7MDym247sSKT5Rum0o,10989
4
+ TB2J/MAEGreen.py,sha256=SkDct7cD5hDAAYW9Y3oYQZVt1AyLA53xDqLL1mT5Nq0,3461
4
5
  TB2J/Oiju.py,sha256=cNGv8N5uH_swGq7cnAt2OyiDfqtjLlLrwseGu0E4iaM,3383
5
6
  TB2J/Oiju_epc.py,sha256=oytM3NYW7nWmklrGgNlqwIpI_JYv_hb7ZnR4o9nYNog,6809
6
7
  TB2J/__init__.py,sha256=hcEWkag_UvLm1ZSbjsgcTWkGVlR3Bwmzg1QYAwsvf-g,24
8
+ TB2J/anisotropy.py,sha256=zz4ID6_Yjf5gxPJt1psc6liNKhTG8X5AtHdpq0dCEzM,22616
7
9
  TB2J/basis.py,sha256=DFo6_QUwjBwisP6zGxvoO0lpGTMDPAOkiL9giNCjOjA,1558
8
10
  TB2J/citation.py,sha256=gcQeyJZaT1Qrtsl8Y3s4neOH3-vvgmIcCvXeV2o3vj0,2891
9
- TB2J/contour.py,sha256=aw8LX6wVFCRPhcpkzuI0jGnHisvk4cezvUhkF_6Yx94,2633
10
- TB2J/cut_cell.py,sha256=kr9WeQhBQLm8QXL2B3NcsSYmSw-OAtJk3f9wksAOZbs,2952
11
+ TB2J/contour.py,sha256=4wFZSPV81WwuUrvn1MENMnP-cW5ICDy8azOdTO8HJdw,2877
11
12
  TB2J/density_matrix.py,sha256=D5k8Oe21OCiLVORNYbo4TZOFG0slrQSbj91kJ3TMFjs,1514
12
13
  TB2J/epc.py,sha256=zLbtqZJhDr8DnnGN6YENcXwrMb3Qxu6KB08mLy9Pw20,3474
13
- TB2J/exchange.py,sha256=Tltunv85eNr-jsVL_SvfqG_WVkQyJX99RszaJRQRBD8,29945
14
- TB2J/exchangeCL2.py,sha256=QSbQ_WxgJyiByn2U-tJ3xy2iYIQI8YMrN3vhw9_k2Cs,11149
14
+ TB2J/exchange.py,sha256=2uTz88pZf3NuKLLiFTHyXf5URhCZkzUlxkVJdtzZPHk,25252
15
+ TB2J/exchangeCL2.py,sha256=vJgVBpvtTE2K7Xf7hGQNc3C87VvVXTa689Qd5827ItE,11165
16
+ TB2J/exchange_params.py,sha256=zhOPyvgngPXlYbZ8TUEFXIpYak3MPh3Lh24m8WWWgnU,5846
15
17
  TB2J/exchange_pert.py,sha256=jmFMtQbYa_uczM4VAeS6TijkIHRFIqEzZJswzE9Wfuo,8523
16
18
  TB2J/exchange_qspace.py,sha256=ZL68qBGFUaQ9BsSPsJaaoWOr9RssPiqX34R_9I3nk_8,8436
17
19
  TB2J/gpaw_wrapper.py,sha256=aJ--9Dtyq7jOP1Hkh-Sh1nWcfXm6zKcljOCO0DNCAr0,6890
18
- TB2J/green.py,sha256=giWSPhrLKc3ZKOpwyY3snUKFWH08GMqBlsJWbFG9Qo8,13565
20
+ TB2J/green.py,sha256=Dz189KtGsHlANBU4TiSTZpxGEpETFZaphwyIaNp3a5E,14721
19
21
  TB2J/greentest.py,sha256=2ISSfhor9ecSEOi_E6b4Cv26wEIQlwlzca0ru8z44_E,1603
20
- TB2J/io_merge.py,sha256=t85k3L6IL9X5ys-PWK7CzResb3xJsyqM3LAlKPUe9vM,6825
22
+ TB2J/io_merge.py,sha256=E1_GfAB2HGpW-ipaO2lqU9SvaslwkiLxssn4DqJpMT8,6899
21
23
  TB2J/kpoints.py,sha256=6XK2KqTncidEq3o9GuO6VEZRPNTRtWeXg9QfcV-9smI,532
22
- TB2J/manager.py,sha256=w_zKrmsTtlNNiR0tO3kNoQqRf9aCKdbIa8s2cgvESwI,15826
23
- TB2J/mathutils.py,sha256=tHA6q3KPDpXLIbZHdDZ2NU5s886VVM_oEG490zQ6Ris,300
24
24
  TB2J/myTB.py,sha256=ok_B4my29bOIghMSZfx0Es6G8FaXaIiLP4gPxTdSj00,17659
25
25
  TB2J/orbmap.py,sha256=RCMJkOPGbfPrcZzcc5ia1ZMKBQWxGcyj8W1ve8BJaEw,6669
26
- TB2J/patch.py,sha256=Z3KZklID9U8zKuk6Ek1Tq95JcY3eT4770dsdcXz6mAA,1067
27
- TB2J/pauli.py,sha256=2UKVHyWSzNDL43KzbGYa26h550lfrlreksCEh_2tWe4,5246
26
+ TB2J/pauli.py,sha256=ESpAhk6LG5ugzuW1YFUTqiDxcg-pQ7wNnzR2FtUnvKM,5295
28
27
  TB2J/pert.py,sha256=RaCJfewl0doht4cjAnzzGKe-uj2le4aqe0iPKFrq9fo,1192
29
28
  TB2J/plot.py,sha256=AnFIFWE2vlmj7Z6f_7-dX_O1stJN-qbuiurPj43dUCM,4104
30
29
  TB2J/rotate_atoms.py,sha256=Dwptn-wdDW4zYzjYb95yxTzuZOe9WPuLjh3d3-YcSs0,3277
31
30
  TB2J/rotate_siestaDM.py,sha256=eR97rspdrRaK9YTwQwUKfobI0S9UnEcbEZ2f5IgR7Tk,1070
32
31
  TB2J/sisl_wrapper.py,sha256=A5x1-tt8efUSPeGY5wM5m6-pJYQFXTCzQHVqD6RBa2g,14792
33
- TB2J/supercell.py,sha256=4hgLGPBLRUDhtD-eF29v46ex7fHdkH-OENjS2wGLFww,19588
32
+ TB2J/symmetrize_J.py,sha256=2wME5qaPvAfKzaPSefLeXlGvt6AfWzhaCk3N3FDdg2w,3810
34
33
  TB2J/tensor_rotate.py,sha256=4-DfT_Mg5e40fbd74M5W0D5DqmUq-kVOOLDkkkI834A,8083
35
34
  TB2J/utest.py,sha256=z_ahi7tpHQF9WlHNQihcQ7qzfezRJQXQt28eB1X_z64,3897
36
- TB2J/utils.py,sha256=_ARYKAeWfP1p5w0mEl-d7KwNfXoqC85TveYl0iCBD3c,9880
35
+ TB2J/utils.py,sha256=DHkc7BK0KUGesfoAv1OxMgIw_iZzcFXh--3ybsFSd_c,12535
37
36
  TB2J/versioninfo.py,sha256=wZwS9QDFRVDe7rf8JyPDDI8UGdTQiO6Pb_sWv8GAegA,337
38
- TB2J/abacus/MAE.py,sha256=q9aSVDRZFAnZL3gHdNmde7sxj80oe-BRjwDO-ipyfew,12237
39
- TB2J/abacus/__init__.py,sha256=5sHiDnF2L-Y80QeET9zOiS83a5T_TQAXvnIhcYB6wNU,56
40
- TB2J/abacus/abacus_api.py,sha256=D_NyXW-Pno92d3RVHByx0l1HDPHQAvXsmQVt8cfIGR8,7267
41
- TB2J/abacus/abacus_wrapper.py,sha256=MCQt1qjweJ1-NnzxH7QBCVmQ7p9K9cgE3a5mldui9TA,12055
42
- TB2J/abacus/gen_exchange_abacus.py,sha256=xdas1BtjLlxWdxtJPqoUousfo-Gk1iOg9jIfkgUrYjU,3017
43
- TB2J/abacus/occupations.py,sha256=vaMVeZwldgzGDxjA7i3-2-V6akXjpgJwJFWKozJ-l2k,8947
44
- TB2J/abacus/orbital_api.py,sha256=l48Hn5z7TA0TH7Is4NDmz74b6B9L2ztYO4dRR37U4mQ,1562
45
- TB2J/abacus/stru_api.py,sha256=aBKKlZ2hvAZChVCfNxRdxH51rfHKqZn6kOlazY-yW8k,67888
46
- TB2J/abacus/test_density_matrix.py,sha256=f0xHOTzIssT-XTvBJrQHU0JVbvBYOE1Mduh-j7qiLO8,774
47
- TB2J/abacus/test_read_HRSR.py,sha256=cAT-e79jGjCBXLTJ9UYX0WvalG_yD4Awl79tTOUcwaQ,1254
48
- TB2J/abacus/test_read_stru.py,sha256=CpK4zWhlCVAMCmYQmp9Hy-A40OblZQLFpo5JokpNcWQ,785
49
37
  TB2J/external/__init__.py,sha256=yD_ZIMi76H49rj6GAQpiB7UlKa3TgSaMkkLHT6M-8w8,137
50
38
  TB2J/external/p_tqdm.py,sha256=ug1jy3-43r8iW7bC37xzPSIe0EjYKH_GUluGzMiQiDw,5831
39
+ TB2J/interfaces/__init__.py,sha256=4tiLoXQ73Nlyi9L4j8jJXOYzXluVNPxQZkwfkQZEGHg,307
40
+ TB2J/interfaces/gpaw_interface.py,sha256=GCDlJ-hRWfChvWwsgBDYSmVqO4sH9HAuGZTV9GqgN6c,1504
41
+ TB2J/interfaces/lawaf_interface.py,sha256=PieLnmppdafOYsgeHznqOou1g9L1sam5jOm3KaObdqo,4408
42
+ TB2J/interfaces/manager.py,sha256=PQMLEfMCT5GnDWSl2nI4JOgRPm_fysyR-6Y6l97xWcw,860
43
+ TB2J/interfaces/siesta_interface.py,sha256=1XOTZYM0uRBqdsTbDo86PZOM0J_uaiDZ9-gPW2PXooE,7704
44
+ TB2J/interfaces/wannier90_interface.py,sha256=qzRgXUBb7t1Aiegrl_RV51BB8csdtVM0EP0Z4pjmTcs,4467
45
+ TB2J/interfaces/abacus/__init__.py,sha256=leas71oCvM_HxrF4gnO5A_VKcJmDAgsI1BUctLU3OBw,177
46
+ TB2J/interfaces/abacus/abacus_api.py,sha256=lNV4LNkLcKw7Zux4MQYM9wnh3eFTlcSqbf4Pb7pqhrk,7243
47
+ TB2J/interfaces/abacus/abacus_wrapper.py,sha256=LyfbiuzsE4NiPIw3GOuZDezxi7CSmLvaYWyn3doV8jQ,12015
48
+ TB2J/interfaces/abacus/gen_exchange_abacus.py,sha256=U4s1wC_M2h0MJxlCbs92Ue8AHdMXfc6AK9BB5FjdIwU,3008
49
+ TB2J/interfaces/abacus/orbital_api.py,sha256=9_t89bWptSw0mI9IvmYXODerj0s5e9eiKMAp74YE0Sk,1495
50
+ TB2J/interfaces/abacus/stru_api.py,sha256=Ac03ikHRsZRXqTul4IUge7D2iG_xLh4_oyYfeP9tzGE,67881
51
+ TB2J/interfaces/abacus/test_density_matrix.py,sha256=bMWWJYtDS57SpPZ-eZXZ9Hr_UK4mv8ZHM7SzItG3IVA,774
52
+ TB2J/interfaces/abacus/test_read_HRSR.py,sha256=W1oO_yigT50Yb5_u-KB_IfTpM7kArGkBuMSMs0H4CTs,1235
53
+ TB2J/interfaces/abacus/test_read_stru.py,sha256=hoKPHVco8vwzC7Gao4bOPCdAPhh29x-9DTJJqRr7AYM,788
51
54
  TB2J/io_exchange/__init__.py,sha256=KfGHum7B8E4G_KKfillqw0lErtoyKEuFUUttHLs-mg4,32
52
- TB2J/io_exchange/io_exchange.py,sha256=RxCZ7OOxhiIzGrIidCOqxNbgLsrHUfCqDVinMvrPdmI,19354
55
+ TB2J/io_exchange/io_exchange.py,sha256=ZeA8lpYUAQO1CqZnQL70IgS9TbAFyfPuadLGfKVf-Ms,19769
53
56
  TB2J/io_exchange/io_multibinit.py,sha256=8PDmWxzGuv-GwJosj2ZTmiyNY_duFVWJ4ekCuSqGdd8,6739
54
- TB2J/io_exchange/io_pickle.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
57
  TB2J/io_exchange/io_tomsasd.py,sha256=NqkAC1Fl-CUnFA21eBzSy_S5F_oeQFJysw4UukQbN8o,4173
56
58
  TB2J/io_exchange/io_txt.py,sha256=BMr1eSILlKpgtjvDx7uw2VMAkEKSvGEPNxpaT_zev0I,10547
57
59
  TB2J/io_exchange/io_uppasd.py,sha256=bI4iPEgnK4TvCZNvb6x2xYXgjW7pEehCqmcizy2pqFU,3301
58
60
  TB2J/io_exchange/io_vampire.py,sha256=UllC4twf06_q2vBCnAYFzEDGvS8mSefwQXDquBuyc0M,5583
59
61
  TB2J/mathutils/__init__.py,sha256=tQLBfHkZqdVfVxPOahy42qMUkFYnFFFhM-uc4QsYFxI,27
60
- TB2J/mathutils/fermi.py,sha256=tzEicVoxE_5DxPDDZMvi4ynR1_Iqf-Qh0-0zfm-iVBo,480
62
+ TB2J/mathutils/fermi.py,sha256=72tZ5CptGmYaBUD0xLWltuH7LBXcrMUwODyW6-WqlzI,638
61
63
  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=NT12khB8lN1qf_jQ2SwnAhhtWxptZXkzpUQ2JvZEnkM,1710
64
+ TB2J/mathutils/lowdin.py,sha256=RYbm9OcnFnjcZFdC5YcNUsI9cOJmoDLsWSSCaP0GqKQ,499
65
+ TB2J/mathutils/rotate_spin.py,sha256=SfqadtkmoqkrD6lJ7tSCxfnv6QcEQ9_rE6Ee0gHONyk,8333
64
66
  TB2J/spinham/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
67
  TB2J/spinham/base_parser.py,sha256=oQRHvFE_BlUtTaTZykKgvicu40oXcbICB-D1aAt-qlA,2196
66
68
  TB2J/spinham/constants.py,sha256=y4-hRyl5EAR42k24Oa5XhAsUQtKVn1MAgyqNf-p3PrM,762
67
- TB2J/spinham/h_matrix.py,sha256=MfHIz6RViKkEB3Mu-WcwNx5uk7A5sjAlbqVG9wYA4xk,2784
68
69
  TB2J/spinham/hamiltonian.py,sha256=OfsjlGIgFwpXaohopZcgPamSfjm3X46_zc245eyTr_A,16607
69
70
  TB2J/spinham/hamiltonian_terms.py,sha256=7e84tfEjvAfZltUkrSWi1sUEiW_itLKy83lxi5iBpcQ,9714
70
- TB2J/spinham/obtain_J.py,sha256=sg8tiCRRLEN57Olb3MHIuqkDhAkmu-w87AkM00ylXtA,2401
71
71
  TB2J/spinham/plot.py,sha256=tLLNqFAATVrP1kmSVLPKzn686i-CUyqu4qgOcs-okHI,6599
72
72
  TB2J/spinham/qsolver.py,sha256=Sr9I3aGfVNYn5wzwPx1QonHe6ZZUXBAujWRa7nTA5u4,4986
73
73
  TB2J/spinham/spin_api.py,sha256=oN3AKg1WQl0YzR4f5ealcJOaVoAy8d7HodIwrbXvQeY,2219
@@ -76,18 +76,19 @@ TB2J/spinham/supercell.py,sha256=y17uUC6r3gQb278FhxIW4CABihfLTvKFj6flyXrCPR8,122
76
76
  TB2J/wannier/__init__.py,sha256=7ojCbM84PYv1X1Tbo4NHI-d3gWmQsZB_xiYqbfxVV1E,80
77
77
  TB2J/wannier/w90_parser.py,sha256=dbd63LuKyv2DVUzqRINGsbDzEsOxsQyE8_Ear_LQIRg,4620
78
78
  TB2J/wannier/w90_tb_parser.py,sha256=qt8pnuprmPp9iIAYwPkPbmEzk6ZPgMq2xognoQp7vwc,4610
79
- TB2J-0.9.5rc0.data/scripts/TB2J_downfold.py,sha256=i4BVqnpDdgrX_amookVWeLGefGBn-qeAutWiwuY9SfQ,2099
80
- TB2J-0.9.5rc0.data/scripts/TB2J_eigen.py,sha256=Qs9v2hnMm2Tpfoa4h53muUKty2dZjwx8948MBoQooNg,1128
81
- TB2J-0.9.5rc0.data/scripts/TB2J_magnon.py,sha256=q7UwAmorRcFNk4tfE7gl_ny05l6p7pbD9Wm_LkIpKEw,3101
82
- TB2J-0.9.5rc0.data/scripts/TB2J_magnon_dos.py,sha256=TMXQvD2dIbO5FZ4tUMmxJgCgH2O2hDAPUNfEKO4z-x4,110
83
- TB2J-0.9.5rc0.data/scripts/TB2J_merge.py,sha256=y834SF4rIRn1L1ptkhczvavQpC-8Px6DTmDOOSaq_DE,1854
84
- TB2J-0.9.5rc0.data/scripts/TB2J_rotate.py,sha256=zgiDFuYZNmzKK0rwDmTaYD2OpRlmKA_VGeBx83w2Xwc,873
85
- TB2J-0.9.5rc0.data/scripts/TB2J_rotateDM.py,sha256=kCvF7gotuqAX1VnJ06cwfVm7RrhrdtiV5v7d9P2Pn_E,567
86
- TB2J-0.9.5rc0.data/scripts/abacus2J.py,sha256=M4B07lvTCDczTPTqvnDh_PERzCARAd09TLKv4aIdSQM,4408
87
- TB2J-0.9.5rc0.data/scripts/siesta2J.py,sha256=hBzS7ZgoHM3oXlTCQd-xVA07Ks2FiIwyRpQWUFITRPE,4303
88
- TB2J-0.9.5rc0.data/scripts/wann2J.py,sha256=2t2hWwyELskYCwkGDziCgiIAnfr6odLLJ6cQBJ2RQwQ,5714
89
- TB2J-0.9.5rc0.dist-info/LICENSE,sha256=CbZI-jyRTjiqIcWa244cRSHJdjjtUNqGR4HeJkgEwJw,1332
90
- TB2J-0.9.5rc0.dist-info/METADATA,sha256=FGkO-SIi13BZYGhx7szEosm6WT73xTVPxTyYxWNns7U,1429
91
- TB2J-0.9.5rc0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
92
- TB2J-0.9.5rc0.dist-info/top_level.txt,sha256=whYa5ByLYhl5XnTPBHSWr-IGD6VWmr5Ql2bye2qwV_s,5
93
- TB2J-0.9.5rc0.dist-info/RECORD,,
79
+ TB2J-0.9.7rc0.data/scripts/TB2J_downfold.py,sha256=i4BVqnpDdgrX_amookVWeLGefGBn-qeAutWiwuY9SfQ,2099
80
+ TB2J-0.9.7rc0.data/scripts/TB2J_eigen.py,sha256=Qs9v2hnMm2Tpfoa4h53muUKty2dZjwx8948MBoQooNg,1128
81
+ TB2J-0.9.7rc0.data/scripts/TB2J_magnon.py,sha256=q7UwAmorRcFNk4tfE7gl_ny05l6p7pbD9Wm_LkIpKEw,3101
82
+ TB2J-0.9.7rc0.data/scripts/TB2J_magnon_dos.py,sha256=TMXQvD2dIbO5FZ4tUMmxJgCgH2O2hDAPUNfEKO4z-x4,110
83
+ TB2J-0.9.7rc0.data/scripts/TB2J_merge.py,sha256=y834SF4rIRn1L1ptkhczvavQpC-8Px6DTmDOOSaq_DE,1854
84
+ TB2J-0.9.7rc0.data/scripts/TB2J_rotate.py,sha256=zgiDFuYZNmzKK0rwDmTaYD2OpRlmKA_VGeBx83w2Xwc,873
85
+ TB2J-0.9.7rc0.data/scripts/TB2J_rotateDM.py,sha256=kCvF7gotuqAX1VnJ06cwfVm7RrhrdtiV5v7d9P2Pn_E,567
86
+ TB2J-0.9.7rc0.data/scripts/abacus2J.py,sha256=_Wiu0NekWKNZ1XVAEBNQOWTi8hE_KXg6iGxfHgcdKqI,4396
87
+ TB2J-0.9.7rc0.data/scripts/siesta2J.py,sha256=wQ9fbyiVyau7WwfusNvHxqBGfD_9_7GZmYZ6pqe6RaM,4806
88
+ TB2J-0.9.7rc0.data/scripts/wann2J.py,sha256=pTFDf6h72I_LN_NX5UivyCoJPgwvyAyHW175nSAJvLo,2987
89
+ TB2J-0.9.7rc0.dist-info/LICENSE,sha256=CbZI-jyRTjiqIcWa244cRSHJdjjtUNqGR4HeJkgEwJw,1332
90
+ TB2J-0.9.7rc0.dist-info/METADATA,sha256=kFTVwu8e7Fcb9srTmKweSf8AmnGq636h4Fu3Ix-e5Tk,1482
91
+ TB2J-0.9.7rc0.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
92
+ TB2J-0.9.7rc0.dist-info/entry_points.txt,sha256=Hdz1WC9waUzyFVmowKnbbZ6j-J4adHh_Ko6JpxGYAtE,131
93
+ TB2J-0.9.7rc0.dist-info/top_level.txt,sha256=whYa5ByLYhl5XnTPBHSWr-IGD6VWmr5Ql2bye2qwV_s,5
94
+ TB2J-0.9.7rc0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: setuptools (72.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ TB2J_symmetrize.py = TB2J.symmetrize_J:symmetrize_J_cli
3
+ lawaf2J.py = TB2J.interfaces.lawaf_interface:lawaf2J_cli