TB2J 0.9.9.3__py3-none-any.whl → 0.9.9.6__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 (36) hide show
  1. TB2J/Jdownfolder.py +3 -2
  2. TB2J/MAEGreen.py +22 -17
  3. TB2J/__init__.py +1 -1
  4. TB2J/exchange_params.py +1 -2
  5. TB2J/interfaces/abacus/gen_exchange_abacus.py +3 -0
  6. TB2J/interfaces/siesta_interface.py +15 -7
  7. TB2J/io_exchange/__init__.py +2 -0
  8. TB2J/io_exchange/io_exchange.py +40 -12
  9. TB2J/magnon/__init__.py +3 -0
  10. TB2J/magnon/io_exchange2.py +695 -0
  11. TB2J/magnon/magnon3.py +334 -0
  12. TB2J/magnon/magnon_io.py +48 -0
  13. TB2J/magnon/magnon_math.py +53 -0
  14. TB2J/magnon/plot.py +58 -0
  15. TB2J/magnon/structure.py +348 -0
  16. TB2J/mathutils/__init__.py +2 -0
  17. TB2J/mathutils/fibonacci_sphere.py +1 -1
  18. TB2J/mathutils/rotate_spin.py +0 -3
  19. TB2J/symmetrize_J.py +1 -1
  20. tb2j-0.9.9.6.data/scripts/TB2J_magnon2.py +78 -0
  21. {tb2j-0.9.9.3.data → tb2j-0.9.9.6.data}/scripts/abacus2J.py +1 -1
  22. {tb2j-0.9.9.3.dist-info → tb2j-0.9.9.6.dist-info}/METADATA +1 -2
  23. {tb2j-0.9.9.3.dist-info → tb2j-0.9.9.6.dist-info}/RECORD +36 -28
  24. {tb2j-0.9.9.3.data → tb2j-0.9.9.6.data}/scripts/TB2J_downfold.py +0 -0
  25. {tb2j-0.9.9.3.data → tb2j-0.9.9.6.data}/scripts/TB2J_eigen.py +0 -0
  26. {tb2j-0.9.9.3.data → tb2j-0.9.9.6.data}/scripts/TB2J_magnon.py +0 -0
  27. {tb2j-0.9.9.3.data → tb2j-0.9.9.6.data}/scripts/TB2J_magnon_dos.py +0 -0
  28. {tb2j-0.9.9.3.data → tb2j-0.9.9.6.data}/scripts/TB2J_merge.py +0 -0
  29. {tb2j-0.9.9.3.data → tb2j-0.9.9.6.data}/scripts/TB2J_rotate.py +0 -0
  30. {tb2j-0.9.9.3.data → tb2j-0.9.9.6.data}/scripts/TB2J_rotateDM.py +0 -0
  31. {tb2j-0.9.9.3.data → tb2j-0.9.9.6.data}/scripts/siesta2J.py +0 -0
  32. {tb2j-0.9.9.3.data → tb2j-0.9.9.6.data}/scripts/wann2J.py +0 -0
  33. {tb2j-0.9.9.3.dist-info → tb2j-0.9.9.6.dist-info}/WHEEL +0 -0
  34. {tb2j-0.9.9.3.dist-info → tb2j-0.9.9.6.dist-info}/entry_points.txt +0 -0
  35. {tb2j-0.9.9.3.dist-info → tb2j-0.9.9.6.dist-info}/licenses/LICENSE +0 -0
  36. {tb2j-0.9.9.3.dist-info → tb2j-0.9.9.6.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,348 @@
1
+ from warnings import warn
2
+
3
+ import numpy as np
4
+
5
+ valid_symbols = [
6
+ # 0
7
+ "Ae",
8
+ # 1
9
+ "H",
10
+ "He",
11
+ # 2
12
+ "Li",
13
+ "Be",
14
+ "B",
15
+ "C",
16
+ "N",
17
+ "O",
18
+ "F",
19
+ "Ne",
20
+ # 3
21
+ "Na",
22
+ "Mg",
23
+ "Al",
24
+ "Si",
25
+ "P",
26
+ "S",
27
+ "Cl",
28
+ "Ar",
29
+ # 4
30
+ "K",
31
+ "Ca",
32
+ "Sc",
33
+ "Ti",
34
+ "V",
35
+ "Cr",
36
+ "Mn",
37
+ "Fe",
38
+ "Co",
39
+ "Ni",
40
+ "Cu",
41
+ "Zn",
42
+ "Ga",
43
+ "Ge",
44
+ "As",
45
+ "Se",
46
+ "Br",
47
+ "Kr",
48
+ # 5
49
+ "Rb",
50
+ "Sr",
51
+ "Y",
52
+ "Zr",
53
+ "Nb",
54
+ "Mo",
55
+ "Tc",
56
+ "Ru",
57
+ "Rh",
58
+ "Pd",
59
+ "Ag",
60
+ "Cd",
61
+ "In",
62
+ "Sn",
63
+ "Sb",
64
+ "Te",
65
+ "I",
66
+ "Xe",
67
+ # 6
68
+ "Cs",
69
+ "Ba",
70
+ "La",
71
+ "Ce",
72
+ "Pr",
73
+ "Nd",
74
+ "Pm",
75
+ "Sm",
76
+ "Eu",
77
+ "Gd",
78
+ "Tb",
79
+ "Dy",
80
+ "Ho",
81
+ "Er",
82
+ "Tm",
83
+ "Yb",
84
+ "Lu",
85
+ "Hf",
86
+ "Ta",
87
+ "W",
88
+ "Re",
89
+ "Os",
90
+ "Ir",
91
+ "Pt",
92
+ "Au",
93
+ "Hg",
94
+ "Tl",
95
+ "Pb",
96
+ "Bi",
97
+ "Po",
98
+ "At",
99
+ "Rn",
100
+ # 7
101
+ "Fr",
102
+ "Ra",
103
+ "Ac",
104
+ "Th",
105
+ "Pa",
106
+ "U",
107
+ "Np",
108
+ "Pu",
109
+ "Am",
110
+ "Cm",
111
+ "Bk",
112
+ "Cf",
113
+ "Es",
114
+ "Fm",
115
+ "Md",
116
+ "No",
117
+ "Lr",
118
+ "Rf",
119
+ "Db",
120
+ "Sg",
121
+ "Bh",
122
+ "Hs",
123
+ "Mt",
124
+ "Ds",
125
+ "Rg",
126
+ "Cn",
127
+ "Nh",
128
+ "Fl",
129
+ "Mc",
130
+ "Lv",
131
+ "Ts",
132
+ "Og",
133
+ ]
134
+
135
+
136
+ def get_attribute_array(array, attribute, dtype=float):
137
+ try:
138
+ the_array = np.array(array, dtype=dtype)
139
+ except (IndexError, ValueError, TypeError) as err:
140
+ typename = dtype.__name__
141
+ raise type(err)(
142
+ f"'{attribute}' must be an arraylike object of '{typename}' elements."
143
+ )
144
+
145
+ return the_array
146
+
147
+
148
+ def validate_symbols(value):
149
+ try:
150
+ values_list = value.split()
151
+ except AttributeError:
152
+ try:
153
+ values_list = list(value)
154
+ except (ValueError, TypeError):
155
+ raise TypeError("'elements' must be an iterable of 'str' or 'int' entries.")
156
+
157
+ if all(isinstance(s, str) for s in values_list):
158
+ symbols = values_list
159
+ for symbol in symbols:
160
+ if symbol not in valid_symbols:
161
+ raise ValueError(f"Unrecognized element '{symbol}'.")
162
+ elif all(isinstance(i, (int, np.integer)) for i in values_list):
163
+ if any(i < 0 for i in values_list):
164
+ raise ValueError("Atomic numbers must be positive.")
165
+ try:
166
+ symbols = [valid_symbols[i] for i in values_list]
167
+ except IndexError:
168
+ raise ValueError("Atomic number exceeds 118.")
169
+ else:
170
+ raise ValueError("'elements' must be an iterable of 'str' or 'int' entries.")
171
+
172
+ return symbols
173
+
174
+
175
+ class BaseMagneticStructure:
176
+ def __init__(
177
+ self,
178
+ atoms=None,
179
+ cell=None,
180
+ elements=None,
181
+ positions=None,
182
+ magmoms=None,
183
+ pbc=None,
184
+ collinear=True,
185
+ ):
186
+ if atoms is not None:
187
+ if any(arg is not None for arg in [cell, elements, positions]):
188
+ warn(
189
+ "WARNING: 'atoms' overrides the 'cell', 'elements', and 'positions' arguments."
190
+ )
191
+ cell = atoms.cell.array
192
+ elements = atoms.numbers
193
+ positions = atoms.get_scaled_positions()
194
+ pbc = atoms.pbc if pbc is None else pbc
195
+ else:
196
+ if cell is None:
197
+ cell = np.zeros((3, 3))
198
+ if elements is None:
199
+ elements = ()
200
+ if positions is None:
201
+ positions = np.zeros((len(elements), 3))
202
+ if pbc is None:
203
+ pbc = (True, True, True)
204
+ if magmoms is None:
205
+ magmoms_shape = positions.shape[0] if collinear else positions.shape
206
+ magmoms = np.zeros(magmoms_shape)
207
+
208
+ self.cell = cell
209
+ self.elements = elements
210
+ self.positions = positions
211
+ self.collinear = collinear
212
+ self.magmoms = magmoms
213
+ self.pbc = pbc
214
+
215
+ self._Q = None
216
+ self._n = np.array([0, 0, 1])
217
+
218
+ @property
219
+ def cell(self):
220
+ return self._cell
221
+
222
+ @property
223
+ def reciprocal_cell(self):
224
+ return 2 * np.pi * np.linalg.inv(self._cell)
225
+
226
+ @cell.setter
227
+ def cell(self, value):
228
+ cell_array = get_attribute_array(value, "cell")
229
+ if cell_array.shape != (3, 3):
230
+ raise ValueError("'cell' must have a (3, 3) shape.")
231
+
232
+ self._cell = cell_array
233
+
234
+ @property
235
+ def elements(self):
236
+ return self._symbols
237
+
238
+ @elements.setter
239
+ def elements(self, value):
240
+ symbols = validate_symbols(value)
241
+ self._symbols = symbols
242
+
243
+ @property
244
+ def numbers(self):
245
+ return [valid_symbols.index(symbol) for symbol in self._symbols]
246
+
247
+ @property
248
+ def positions(self):
249
+ return self._positions
250
+
251
+ @property
252
+ def cartesian_positions(self):
253
+ return self._positions @ self._cell
254
+
255
+ @positions.setter
256
+ def positions(self, value):
257
+ natoms = len(self.elements)
258
+ posarray = get_attribute_array(value, "positions")
259
+ if posarray.shape != (natoms, 3):
260
+ raise ValueError(
261
+ "'positions' must have a (natoms, 3) shape, where natoms is the length of 'elements'. Make sure to set 'elements' first."
262
+ )
263
+
264
+ self._positions = posarray
265
+
266
+ @property
267
+ def magmoms(self):
268
+ return self._magmoms
269
+
270
+ @magmoms.setter
271
+ def magmoms(self, value):
272
+ magarray = get_attribute_array(value, "magmoms")
273
+ if self.collinear and magarray.shape != (len(self._positions),):
274
+ raise ValueError(
275
+ "'magmoms' must be a 1dim array with the same length as 'positions'. Make sure to set 'positions' first."
276
+ )
277
+ elif not self.collinear and magarray.shape != self._positions.shape:
278
+ raise ValueError(
279
+ "'magmoms' must have the same shape as 'positions'. Make sure to set 'positions' first."
280
+ )
281
+
282
+ self._magmoms = magarray
283
+
284
+ @property
285
+ def pbc(self):
286
+ return self._pbc
287
+
288
+ @pbc.setter
289
+ def pbc(self, value):
290
+ try:
291
+ periodic_boundary_conditions = tuple(bool(b) for b in value)
292
+ except (ValueError, TypeError):
293
+ raise TypeError("'pbc' must be an iterable of 'bool' entries.")
294
+
295
+ if len(periodic_boundary_conditions) != 3:
296
+ raise ValueError("'pbc' must be of length 3.")
297
+
298
+ self._pbc = periodic_boundary_conditions
299
+
300
+ @property
301
+ def propagation_vector(self):
302
+ return self._Q
303
+
304
+ @propagation_vector.setter
305
+ def propagation_vector(self, value):
306
+ Q = get_attribute_array(value, "propagation_vector")
307
+ if Q.shape != (3,):
308
+ raise ValueError(
309
+ "The 'propagation_vector' must be a vector with 3 numbers."
310
+ )
311
+
312
+ self._Q = Q
313
+
314
+ @property
315
+ def normal_vector(self):
316
+ return self._n
317
+
318
+ @normal_vector.setter
319
+ def normal_vector(self, value):
320
+ n = get_attribute_array(value, "normal_vector")
321
+ if n.shape != (3,):
322
+ raise ValueError("The 'normal_vector' must be a vector with 3 numbers.")
323
+
324
+ self._n = n
325
+
326
+ def to_ase(self):
327
+ from ase.atoms import Atoms
328
+
329
+ atoms = Atoms(
330
+ cell=self.cell,
331
+ positions=self.cartesian_positions,
332
+ numbers=[valid_symbols.index(symbol) for symbol in self.elements],
333
+ pbc=self.pbc,
334
+ )
335
+
336
+ return atoms
337
+
338
+ @classmethod
339
+ def from_structure_file(
340
+ cls, filename, magmoms=None, collinear=True, pbc=(True, True, True)
341
+ ):
342
+ from ase.io import read
343
+
344
+ atoms = read(filename)
345
+ atoms.pbc = pbc
346
+ obj = cls(atoms=atoms, magmoms=magmoms, collinear=collinear)
347
+
348
+ return obj
@@ -1 +1,3 @@
1
1
  from .lowdin import Lowdin
2
+
3
+ __all__ = ["Lowdin"]
@@ -50,7 +50,7 @@ def test_fibonacci_sphere():
50
50
  import matplotlib.pyplot as plt
51
51
 
52
52
  # Generate points on the sphere
53
- samples = 20000
53
+ samples = 200
54
54
  theta, phi = fibonacci_sphere(samples)
55
55
  # theta, phi = fibonacci_semisphere(samples)
56
56
 
@@ -11,7 +11,6 @@ def rotate_Matrix_from_z_to_axis(M, axis, normalize=True):
11
11
  """
12
12
  MI, Mx, My, Mz = pauli_block_all(M)
13
13
  axis = axis / np.linalg.norm(axis)
14
- # M_new = s0* MI + Mz * (axis[0] * s1 + axis[1] * s2 + axis[2] * s3) *2
15
14
  M_new = gather_pauli_blocks(MI, Mz * axis[0], Mz * axis[1], Mz * axis[2])
16
15
  return M_new
17
16
 
@@ -96,7 +95,6 @@ def rotate_spinor_matrix_einsum(M, theta, phi):
96
95
  n1 = np.product(shape[:-1]) // 2
97
96
  n2 = M.shape[-1] // 2
98
97
  Mnew = np.reshape(M, (n1, 2, n2, 2)) # .swapaxes(1, 2)
99
- # print("Mnew:", Mnew)
100
98
  U = rotation_matrix(theta, phi)
101
99
  UT = U.conj().T
102
100
  Mnew = np.einsum(
@@ -132,7 +130,6 @@ def rotate_spinor_matrix_reshape(M, theta, phi):
132
130
  """
133
131
  N = M.shape[0] // 2
134
132
  Mnew = np.reshape(M, (N, 2, N, 2)).swapaxes(1, 2)
135
- # print("Mnew:", Mnew)
136
133
  U = rotation_matrix(theta, phi)
137
134
  UT = U.conj().T
138
135
  Mnew = UT @ Mnew @ U
TB2J/symmetrize_J.py CHANGED
@@ -102,7 +102,7 @@ def symmetrize_J_cli():
102
102
  from argparse import ArgumentParser
103
103
 
104
104
  parser = ArgumentParser(
105
- description="Symmetrize exchange parameters. Currently, it take the crystal symmetry into account and not the magnetic moment into account."
105
+ description="Symmetrize exchange parameters. Currently, it take the crystal symmetry into account and not the magnetic moment."
106
106
  )
107
107
  parser.add_argument(
108
108
  "-i",
@@ -0,0 +1,78 @@
1
+ #!python
2
+ from TB2J.magnon import plot_tb2j_magnon_bands
3
+
4
+
5
+ def plot_tb2j_magnon_bands_cli():
6
+ """Command line interface for plotting magnon band structures from TB2J data."""
7
+ import argparse
8
+
9
+ parser = argparse.ArgumentParser(
10
+ description="Plot magnon band structure from TB2J data",
11
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
12
+ )
13
+
14
+ parser.add_argument(
15
+ "-f", "--file", default="TB2J.pickle", help="Path to TB2J pickle file"
16
+ )
17
+
18
+ parser.add_argument(
19
+ "-p",
20
+ "--path",
21
+ help="High-symmetry k-point path (e.g., 'GXMG' for square lattice)",
22
+ )
23
+
24
+ parser.add_argument(
25
+ "-n",
26
+ "--npoints",
27
+ type=int,
28
+ default=300,
29
+ help="Number of k-points for band structure calculation",
30
+ )
31
+
32
+ parser.add_argument(
33
+ "-a",
34
+ "--anisotropic",
35
+ action="store_true",
36
+ help="Include anisotropic interactions",
37
+ )
38
+
39
+ parser.add_argument(
40
+ "-q",
41
+ "--quadratic",
42
+ action="store_true",
43
+ help="Include biquadratic interactions",
44
+ )
45
+
46
+ parser.add_argument("-o", "--output", help="Output filename for the plot")
47
+
48
+ parser.add_argument(
49
+ "--no-pbc",
50
+ nargs="+",
51
+ type=int,
52
+ choices=[0, 1, 2],
53
+ help="Disable periodic boundary conditions in specified directions (0=x, 1=y, 2=z)",
54
+ )
55
+
56
+ args = parser.parse_args()
57
+
58
+ # Set up periodic boundary conditions
59
+ pbc = [True, True, True]
60
+ if args.no_pbc:
61
+ for direction in args.no_pbc:
62
+ pbc[direction] = False
63
+ pbc = tuple(pbc)
64
+
65
+ # Plot the bands
66
+ plot_tb2j_magnon_bands(
67
+ pickle_file=args.file,
68
+ path=args.path,
69
+ npoints=args.npoints,
70
+ anisotropic=args.anisotropic,
71
+ quadratic=args.quadratic,
72
+ pbc=pbc,
73
+ filename=args.output,
74
+ )
75
+
76
+
77
+ if __name__ == "__main__":
78
+ plot_tb2j_magnon_bands_cli()
@@ -50,7 +50,7 @@ def run_abacus2J():
50
50
  description=args.description,
51
51
  output_path=args.output_path,
52
52
  use_cache=args.use_cache,
53
- nproc=args.nproc,
53
+ nproc=args.np,
54
54
  exclude_orbs=args.exclude_orbs,
55
55
  orb_decomposition=args.orb_decomposition,
56
56
  index_magnetic_atoms=index_magnetic_atoms,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: TB2J
3
- Version: 0.9.9.3
3
+ Version: 0.9.9.6
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
@@ -25,7 +25,6 @@ Requires-Dist: HamiltonIO>=0.2.1
25
25
  Requires-Dist: pre-commit
26
26
  Requires-Dist: sympair>0.1.0
27
27
  Requires-Dist: sisl>=0.9.0
28
- Requires-Dist: netcdf4
29
28
  Dynamic: author
30
29
  Dynamic: author-email
31
30
  Dynamic: classifier
@@ -1,10 +1,10 @@
1
- TB2J/Jdownfolder.py,sha256=xs0gmcKwOA3ejXqk3JPPgnYVu8CvkK8cteuvHuu1oSk,9603
1
+ TB2J/Jdownfolder.py,sha256=n5BeQCYP4mD9JsAPeE1F3ZKKR3SUxADfDbaG_rzi77k,9658
2
2
  TB2J/Jtensor.py,sha256=t6OsqrSlYW6Im4H7ykVAW8Al_pFXN4C5yj2UEsV6r7g,3181
3
3
  TB2J/MAE.py,sha256=fM8U-Dgp9HcQOEeC_kyZV1oVrygBvcux9BraUXVouvY,10994
4
- TB2J/MAEGreen.py,sha256=pCX12GDNaOz8XgMlui8NjAERM43Ux3HyOKfiD80czXI,15306
4
+ TB2J/MAEGreen.py,sha256=Iq4hlZrKEOycPvpV66_t13WIcJ1FJgBS79NleXYpFzw,15528
5
5
  TB2J/Oiju.py,sha256=cNGv8N5uH_swGq7cnAt2OyiDfqtjLlLrwseGu0E4iaM,3383
6
6
  TB2J/Oiju_epc.py,sha256=oytM3NYW7nWmklrGgNlqwIpI_JYv_hb7ZnR4o9nYNog,6809
7
- TB2J/__init__.py,sha256=bhvNrEcDHXt9O-K1rdRAtMHwmvdSm_-Y28VwdCZFsik,24
7
+ TB2J/__init__.py,sha256=hcEWkag_UvLm1ZSbjsgcTWkGVlR3Bwmzg1QYAwsvf-g,24
8
8
  TB2J/anisotropy.py,sha256=0zmvXkmDmakbBOwGYLa3IIkv5cE99SHLAQJsGoZz7JQ,25463
9
9
  TB2J/basis.py,sha256=DFo6_QUwjBwisP6zGxvoO0lpGTMDPAOkiL9giNCjOjA,1558
10
10
  TB2J/citation.py,sha256=gcQeyJZaT1Qrtsl8Y3s4neOH3-vvgmIcCvXeV2o3vj0,2891
@@ -13,7 +13,7 @@ TB2J/density_matrix.py,sha256=D5k8Oe21OCiLVORNYbo4TZOFG0slrQSbj91kJ3TMFjs,1514
13
13
  TB2J/epc.py,sha256=zLbtqZJhDr8DnnGN6YENcXwrMb3Qxu6KB08mLy9Pw20,3474
14
14
  TB2J/exchange.py,sha256=HSvB_keITEeaoNG661feoEcCwjkQlavQQiIi1ONsI3Y,27035
15
15
  TB2J/exchangeCL2.py,sha256=P7bklMXVYX_tn9DbjEPqeTir1SeZyfPBIP1fhWUzLmY,11419
16
- TB2J/exchange_params.py,sha256=d1nFBFwut9SvxUmPRzPzRxD6y0KAP2IvGoEOQ2Jec9U,8049
16
+ TB2J/exchange_params.py,sha256=VW9nGVio6M_Ub9-36L_LExhjgdD1E_joYpI8AxmM360,8029
17
17
  TB2J/exchange_pert.py,sha256=jmFMtQbYa_uczM4VAeS6TijkIHRFIqEzZJswzE9Wfuo,8523
18
18
  TB2J/exchange_qspace.py,sha256=ZL68qBGFUaQ9BsSPsJaaoWOr9RssPiqX34R_9I3nk_8,8436
19
19
  TB2J/gpaw_wrapper.py,sha256=aJ--9Dtyq7jOP1Hkh-Sh1nWcfXm6zKcljOCO0DNCAr0,6890
@@ -31,7 +31,7 @@ TB2J/plot.py,sha256=AnFIFWE2vlmj7Z6f_7-dX_O1stJN-qbuiurPj43dUCM,4104
31
31
  TB2J/rotate_atoms.py,sha256=Dwptn-wdDW4zYzjYb95yxTzuZOe9WPuLjh3d3-YcSs0,3277
32
32
  TB2J/rotate_siestaDM.py,sha256=I4ytO8uFP8_GFyBs9-zMdiMSZS3Y3lj2dSLfNBNI2ZY,1078
33
33
  TB2J/sisl_wrapper.py,sha256=A5x1-tt8efUSPeGY5wM5m6-pJYQFXTCzQHVqD6RBa2g,14792
34
- TB2J/symmetrize_J.py,sha256=IypvLL0JxExq-cmqc4o0nLL8psE7OC9ijj9YMcsqJeA,4487
34
+ TB2J/symmetrize_J.py,sha256=pv65f7TXW371kfnByIkg885XFEGg4UmWlzqY7cOUNAk,4474
35
35
  TB2J/tensor_rotate.py,sha256=4-DfT_Mg5e40fbd74M5W0D5DqmUq-kVOOLDkkkI834A,8083
36
36
  TB2J/thetaphi.py,sha256=Z7N3EOSM7rjHd7b9HxMYLPQO__uR0VwEiV9b471Yudc,399
37
37
  TB2J/utest.py,sha256=z_ahi7tpHQF9WlHNQihcQ7qzfezRJQXQt28eB1X_z64,3897
@@ -43,30 +43,37 @@ TB2J/interfaces/__init__.py,sha256=4tiLoXQ73Nlyi9L4j8jJXOYzXluVNPxQZkwfkQZEGHg,3
43
43
  TB2J/interfaces/gpaw_interface.py,sha256=GCDlJ-hRWfChvWwsgBDYSmVqO4sH9HAuGZTV9GqgN6c,1504
44
44
  TB2J/interfaces/lawaf_interface.py,sha256=PieLnmppdafOYsgeHznqOou1g9L1sam5jOm3KaObdqo,4408
45
45
  TB2J/interfaces/manager.py,sha256=PQMLEfMCT5GnDWSl2nI4JOgRPm_fysyR-6Y6l97xWcw,860
46
- TB2J/interfaces/siesta_interface.py,sha256=olvo2xdBOSNk3zn67nuKrxbW--EKPoWwEzKRBwJbrVY,7366
46
+ TB2J/interfaces/siesta_interface.py,sha256=nkb8CTjHtv3DgMok4njyiaE-vDGDJFCjLHat71R_Z48,7561
47
47
  TB2J/interfaces/wannier90_interface.py,sha256=qzRgXUBb7t1Aiegrl_RV51BB8csdtVM0EP0Z4pjmTcs,4467
48
48
  TB2J/interfaces/abacus/__init__.py,sha256=leas71oCvM_HxrF4gnO5A_VKcJmDAgsI1BUctLU3OBw,177
49
49
  TB2J/interfaces/abacus/abacus_api.py,sha256=lNV4LNkLcKw7Zux4MQYM9wnh3eFTlcSqbf4Pb7pqhrk,7243
50
50
  TB2J/interfaces/abacus/abacus_wrapper.py,sha256=8ZA8oA_YWvRF0Uj_SX1q1vl8ZyEVhHC_tu37JhV02gg,12041
51
- TB2J/interfaces/abacus/gen_exchange_abacus.py,sha256=N8H-iwyOmOJIo2ZC_owmyrXLhcr_QmZzTI4yxhxYZns,3121
51
+ TB2J/interfaces/abacus/gen_exchange_abacus.py,sha256=v-AUHGkJWeMNf4D5A4wOpCjM6DygQsFB6SWu-BGdTxM,3262
52
52
  TB2J/interfaces/abacus/orbital_api.py,sha256=SpSm5fhyqLYbprNd6Lxx0oR1Fw5TUJHfNc-0x_4FW1U,1561
53
53
  TB2J/interfaces/abacus/stru_api.py,sha256=Ac03ikHRsZRXqTul4IUge7D2iG_xLh4_oyYfeP9tzGE,67881
54
54
  TB2J/interfaces/abacus/test_density_matrix.py,sha256=bMWWJYtDS57SpPZ-eZXZ9Hr_UK4mv8ZHM7SzItG3IVA,774
55
55
  TB2J/interfaces/abacus/test_read_HRSR.py,sha256=W1oO_yigT50Yb5_u-KB_IfTpM7kArGkBuMSMs0H4CTs,1235
56
56
  TB2J/interfaces/abacus/test_read_stru.py,sha256=hoKPHVco8vwzC7Gao4bOPCdAPhh29x-9DTJJqRr7AYM,788
57
- TB2J/io_exchange/__init__.py,sha256=KfGHum7B8E4G_KKfillqw0lErtoyKEuFUUttHLs-mg4,32
58
- TB2J/io_exchange/io_exchange.py,sha256=6fefcfYAyRojkCJA5bFwAa2Hjwx6epysfyX8Snj9DWc,20102
57
+ TB2J/io_exchange/__init__.py,sha256=LqEnG67qDVKt4hCUywDEQvUIJ7jsQjmtueOW_J16NOE,54
58
+ TB2J/io_exchange/io_exchange.py,sha256=YEFJT8nPy-aGUgGRhIgrC73pf6IQfL7bgGovUkGKv60,21273
59
59
  TB2J/io_exchange/io_multibinit.py,sha256=8PDmWxzGuv-GwJosj2ZTmiyNY_duFVWJ4ekCuSqGdd8,6739
60
60
  TB2J/io_exchange/io_tomsasd.py,sha256=NqkAC1Fl-CUnFA21eBzSy_S5F_oeQFJysw4UukQbN8o,4173
61
61
  TB2J/io_exchange/io_txt.py,sha256=BMr1eSILlKpgtjvDx7uw2VMAkEKSvGEPNxpaT_zev0I,10547
62
62
  TB2J/io_exchange/io_uppasd.py,sha256=bI4iPEgnK4TvCZNvb6x2xYXgjW7pEehCqmcizy2pqFU,3301
63
63
  TB2J/io_exchange/io_vampire.py,sha256=UllC4twf06_q2vBCnAYFzEDGvS8mSefwQXDquBuyc0M,5583
64
- TB2J/mathutils/__init__.py,sha256=tQLBfHkZqdVfVxPOahy42qMUkFYnFFFhM-uc4QsYFxI,27
64
+ TB2J/magnon/__init__.py,sha256=jdUFkOlhrpHRmKavAXVcFdZgtY7lKZVzMPFlLmmCErM,113
65
+ TB2J/magnon/io_exchange2.py,sha256=EcC3x6H13qq61WBsr__xKzHDtSvy_dMz1tEdUaqSG2I,23265
66
+ TB2J/magnon/magnon3.py,sha256=GNqJVf73xibVbI9wVvaN2_uigbnNJKbHZxqjICwz3vw,10958
67
+ TB2J/magnon/magnon_io.py,sha256=H4bmzCcnh1D3Sb6UBIIKWa6jIrA20dg9lX4wfLXHEjo,1241
68
+ TB2J/magnon/magnon_math.py,sha256=hJ2k24eR4TzdaFMxfxgCr10lWV4GEcfaf2WxhWj-uUk,1320
69
+ TB2J/magnon/plot.py,sha256=kwq9LL0FRVo-SLYNkE-ghlyjz8DZD-c4LAWg8si5GJo,1674
70
+ TB2J/magnon/structure.py,sha256=rKefzXgQlEjVvV-A7E2IogVDWwf5egZr3Wxxu6HuJU4,7685
71
+ TB2J/mathutils/__init__.py,sha256=E70Mx8mLXh3DJGmdN3TLWmGYMcsbvKxmgxUbAI6Mzmo,49
65
72
  TB2J/mathutils/fermi.py,sha256=72tZ5CptGmYaBUD0xLWltuH7LBXcrMUwODyW6-WqlzI,638
66
- TB2J/mathutils/fibonacci_sphere.py,sha256=l0USn25ZCAWF6l4UleyWaeLthsj9TThV9iWmfi6DbaM,2344
73
+ TB2J/mathutils/fibonacci_sphere.py,sha256=1rqf5n3a9aDjSydA4qGkR1eIeLJKuoblA73cchWJzNg,2342
67
74
  TB2J/mathutils/kR_convert.py,sha256=p_9XWJVNanTzTK2rI6KRjTkbSq42la6N448-zJOsMwY,2671
68
75
  TB2J/mathutils/lowdin.py,sha256=RYbm9OcnFnjcZFdC5YcNUsI9cOJmoDLsWSSCaP0GqKQ,499
69
- TB2J/mathutils/rotate_spin.py,sha256=lbGzve_36FyNjanXqdxYDb102kA4_5OycRlBcm-tH-g,8360
76
+ TB2J/mathutils/rotate_spin.py,sha256=sPTnwJThfohCHIY7EuzBV2K3mIXcJI5y1QBytGmEKR4,8229
70
77
  TB2J/spinham/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
78
  TB2J/spinham/base_parser.py,sha256=oQRHvFE_BlUtTaTZykKgvicu40oXcbICB-D1aAt-qlA,2196
72
79
  TB2J/spinham/constants.py,sha256=y4-hRyl5EAR42k24Oa5XhAsUQtKVn1MAgyqNf-p3PrM,762
@@ -80,19 +87,20 @@ TB2J/spinham/supercell.py,sha256=y17uUC6r3gQb278FhxIW4CABihfLTvKFj6flyXrCPR8,122
80
87
  TB2J/wannier/__init__.py,sha256=7ojCbM84PYv1X1Tbo4NHI-d3gWmQsZB_xiYqbfxVV1E,80
81
88
  TB2J/wannier/w90_parser.py,sha256=dbd63LuKyv2DVUzqRINGsbDzEsOxsQyE8_Ear_LQIRg,4620
82
89
  TB2J/wannier/w90_tb_parser.py,sha256=qt8pnuprmPp9iIAYwPkPbmEzk6ZPgMq2xognoQp7vwc,4610
83
- tb2j-0.9.9.3.data/scripts/TB2J_downfold.py,sha256=i4BVqnpDdgrX_amookVWeLGefGBn-qeAutWiwuY9SfQ,2099
84
- tb2j-0.9.9.3.data/scripts/TB2J_eigen.py,sha256=Qs9v2hnMm2Tpfoa4h53muUKty2dZjwx8948MBoQooNg,1128
85
- tb2j-0.9.9.3.data/scripts/TB2J_magnon.py,sha256=q7UwAmorRcFNk4tfE7gl_ny05l6p7pbD9Wm_LkIpKEw,3101
86
- tb2j-0.9.9.3.data/scripts/TB2J_magnon_dos.py,sha256=TMXQvD2dIbO5FZ4tUMmxJgCgH2O2hDAPUNfEKO4z-x4,110
87
- tb2j-0.9.9.3.data/scripts/TB2J_merge.py,sha256=y834SF4rIRn1L1ptkhczvavQpC-8Px6DTmDOOSaq_DE,1854
88
- tb2j-0.9.9.3.data/scripts/TB2J_rotate.py,sha256=zgiDFuYZNmzKK0rwDmTaYD2OpRlmKA_VGeBx83w2Xwc,873
89
- tb2j-0.9.9.3.data/scripts/TB2J_rotateDM.py,sha256=kCvF7gotuqAX1VnJ06cwfVm7RrhrdtiV5v7d9P2Pn_E,567
90
- tb2j-0.9.9.3.data/scripts/abacus2J.py,sha256=VD1ldQP-PIMyxo3Rzzwk_06fJEbbU7oiU3aRXNHK0a0,1826
91
- tb2j-0.9.9.3.data/scripts/siesta2J.py,sha256=QJ6c0DbqxaqYEesxiL5R9nK9-flNLrr7hajKfCwirYc,2318
92
- tb2j-0.9.9.3.data/scripts/wann2J.py,sha256=OA31VHEXbQMD-JozoLUHDF6vB9Sr62d804OApSKtSnU,3240
93
- tb2j-0.9.9.3.dist-info/licenses/LICENSE,sha256=CbZI-jyRTjiqIcWa244cRSHJdjjtUNqGR4HeJkgEwJw,1332
94
- tb2j-0.9.9.3.dist-info/METADATA,sha256=7VsFeKTxyCZMuwfFLB3bjdBZEdqfQEu7T_-AB3HDr_o,1709
95
- tb2j-0.9.9.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
96
- tb2j-0.9.9.3.dist-info/entry_points.txt,sha256=Hdz1WC9waUzyFVmowKnbbZ6j-J4adHh_Ko6JpxGYAtE,131
97
- tb2j-0.9.9.3.dist-info/top_level.txt,sha256=whYa5ByLYhl5XnTPBHSWr-IGD6VWmr5Ql2bye2qwV_s,5
98
- tb2j-0.9.9.3.dist-info/RECORD,,
90
+ tb2j-0.9.9.6.data/scripts/TB2J_downfold.py,sha256=i4BVqnpDdgrX_amookVWeLGefGBn-qeAutWiwuY9SfQ,2099
91
+ tb2j-0.9.9.6.data/scripts/TB2J_eigen.py,sha256=Qs9v2hnMm2Tpfoa4h53muUKty2dZjwx8948MBoQooNg,1128
92
+ tb2j-0.9.9.6.data/scripts/TB2J_magnon.py,sha256=q7UwAmorRcFNk4tfE7gl_ny05l6p7pbD9Wm_LkIpKEw,3101
93
+ tb2j-0.9.9.6.data/scripts/TB2J_magnon2.py,sha256=tMa7Fg_Wd2UytnrH3C_AsgGM7BciUW0iy6NiPlWvar8,1920
94
+ tb2j-0.9.9.6.data/scripts/TB2J_magnon_dos.py,sha256=TMXQvD2dIbO5FZ4tUMmxJgCgH2O2hDAPUNfEKO4z-x4,110
95
+ tb2j-0.9.9.6.data/scripts/TB2J_merge.py,sha256=y834SF4rIRn1L1ptkhczvavQpC-8Px6DTmDOOSaq_DE,1854
96
+ tb2j-0.9.9.6.data/scripts/TB2J_rotate.py,sha256=zgiDFuYZNmzKK0rwDmTaYD2OpRlmKA_VGeBx83w2Xwc,873
97
+ tb2j-0.9.9.6.data/scripts/TB2J_rotateDM.py,sha256=kCvF7gotuqAX1VnJ06cwfVm7RrhrdtiV5v7d9P2Pn_E,567
98
+ tb2j-0.9.9.6.data/scripts/abacus2J.py,sha256=4vCY7eih6JBc92rG6WZhUfcgf_GMJq2H21TweRaWG3s,1823
99
+ tb2j-0.9.9.6.data/scripts/siesta2J.py,sha256=QJ6c0DbqxaqYEesxiL5R9nK9-flNLrr7hajKfCwirYc,2318
100
+ tb2j-0.9.9.6.data/scripts/wann2J.py,sha256=OA31VHEXbQMD-JozoLUHDF6vB9Sr62d804OApSKtSnU,3240
101
+ tb2j-0.9.9.6.dist-info/licenses/LICENSE,sha256=CbZI-jyRTjiqIcWa244cRSHJdjjtUNqGR4HeJkgEwJw,1332
102
+ tb2j-0.9.9.6.dist-info/METADATA,sha256=IgCZdXn3F2aPwgNULjxTLVW_5f9rarNR3gW-asYa3yU,1686
103
+ tb2j-0.9.9.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
104
+ tb2j-0.9.9.6.dist-info/entry_points.txt,sha256=Hdz1WC9waUzyFVmowKnbbZ6j-J4adHh_Ko6JpxGYAtE,131
105
+ tb2j-0.9.9.6.dist-info/top_level.txt,sha256=whYa5ByLYhl5XnTPBHSWr-IGD6VWmr5Ql2bye2qwV_s,5
106
+ tb2j-0.9.9.6.dist-info/RECORD,,
File without changes