TB2J 0.9.9.9__py3-none-any.whl → 0.9.9.12__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/Jtensor.py +5 -6
  2. TB2J/MAEGreen.py +8 -0
  3. TB2J/__init__.py +1 -1
  4. TB2J/exchange.py +1 -1
  5. TB2J/interfaces/abacus/stru_api.py +3 -1
  6. TB2J/interfaces/siesta_interface.py +2 -1
  7. TB2J/io_exchange/io_exchange.py +65 -23
  8. TB2J/io_exchange/io_vampire.py +6 -3
  9. TB2J/io_merge.py +15 -1
  10. TB2J/magnon/__init__.py +2 -2
  11. TB2J/magnon/magnon3.py +566 -56
  12. TB2J/magnon/magnon_band.py +185 -0
  13. TB2J/magnon/magnon_math.py +1 -0
  14. TB2J/magnon/plot.py +60 -21
  15. TB2J/mathutils/auto_kpath.py +151 -0
  16. tb2j-0.9.9.12.data/scripts/TB2J_plot_magnon_bands.py +7 -0
  17. {tb2j-0.9.9.9.dist-info → tb2j-0.9.9.12.dist-info}/METADATA +4 -2
  18. {tb2j-0.9.9.9.dist-info → tb2j-0.9.9.12.dist-info}/RECORD +33 -30
  19. {tb2j-0.9.9.9.data → tb2j-0.9.9.12.data}/scripts/TB2J_downfold.py +0 -0
  20. {tb2j-0.9.9.9.data → tb2j-0.9.9.12.data}/scripts/TB2J_eigen.py +0 -0
  21. {tb2j-0.9.9.9.data → tb2j-0.9.9.12.data}/scripts/TB2J_magnon.py +0 -0
  22. {tb2j-0.9.9.9.data → tb2j-0.9.9.12.data}/scripts/TB2J_magnon2.py +0 -0
  23. {tb2j-0.9.9.9.data → tb2j-0.9.9.12.data}/scripts/TB2J_magnon_dos.py +0 -0
  24. {tb2j-0.9.9.9.data → tb2j-0.9.9.12.data}/scripts/TB2J_merge.py +0 -0
  25. {tb2j-0.9.9.9.data → tb2j-0.9.9.12.data}/scripts/TB2J_rotate.py +0 -0
  26. {tb2j-0.9.9.9.data → tb2j-0.9.9.12.data}/scripts/TB2J_rotateDM.py +0 -0
  27. {tb2j-0.9.9.9.data → tb2j-0.9.9.12.data}/scripts/abacus2J.py +0 -0
  28. {tb2j-0.9.9.9.data → tb2j-0.9.9.12.data}/scripts/siesta2J.py +0 -0
  29. {tb2j-0.9.9.9.data → tb2j-0.9.9.12.data}/scripts/wann2J.py +0 -0
  30. {tb2j-0.9.9.9.dist-info → tb2j-0.9.9.12.dist-info}/WHEEL +0 -0
  31. {tb2j-0.9.9.9.dist-info → tb2j-0.9.9.12.dist-info}/entry_points.txt +0 -0
  32. {tb2j-0.9.9.9.dist-info → tb2j-0.9.9.12.dist-info}/licenses/LICENSE +0 -0
  33. {tb2j-0.9.9.9.dist-info → tb2j-0.9.9.12.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,185 @@
1
+ """Module for handling magnon band structure data and plotting."""
2
+
3
+ import json
4
+ from dataclasses import dataclass
5
+ from typing import List, Optional, Tuple, Union
6
+
7
+ import matplotlib.pyplot as plt
8
+ import numpy as np
9
+
10
+
11
+ @dataclass
12
+ class MagnonBand:
13
+ """Magnon band structure data and plotting functionality.
14
+
15
+ Parameters
16
+ ----------
17
+ energies : np.ndarray
18
+ Band energies of shape (nkpts, nbands)
19
+ kpoints : np.ndarray
20
+ k-points coordinates of shape (nkpts, 3)
21
+ kpath_labels : List[Tuple[int, str]]
22
+ List of (index, label) tuples for special k-points
23
+ special_points : dict
24
+ Dictionary mapping k-point names to their coordinates
25
+ xcoords : Optional[Union[np.ndarray, List[np.ndarray]]]
26
+ x-coordinates for plotting. Can be continuous or segmented.
27
+ """
28
+
29
+ energies: np.ndarray
30
+ kpoints: np.ndarray
31
+ kpath_labels: List[Tuple[int, str]]
32
+ special_points: dict
33
+ xcoords: Optional[Union[np.ndarray, List[np.ndarray]]] = None
34
+
35
+ def __post_init__(self):
36
+ """Convert input arrays to numpy arrays and set default x-coordinates."""
37
+ self.energies = np.array(self.energies)
38
+ self.kpoints = np.array(self.kpoints)
39
+
40
+ if self.xcoords is None:
41
+ self.xcoords = np.arange(len(self.kpoints))
42
+
43
+ def plot(self, ax=None, filename=None, show=False, shift=0.0,**kwargs):
44
+ """Plot the magnon band structure.
45
+
46
+ Parameters
47
+ ----------
48
+ ax : matplotlib.axes.Axes, optional
49
+ Matplotlib axes for plotting. If None, creates new figure.
50
+ filename : str, optional
51
+ If provided, saves plot to this file.
52
+ show : bool, optional
53
+ Whether to show the plot on screen. Default is False.
54
+ **kwargs : dict
55
+ Additional arguments passed to plot function:
56
+ - linewidth: float, default 1.5
57
+ - color: str, default 'blue'
58
+ - linestyle: str, default '-'
59
+
60
+ Returns
61
+ -------
62
+ matplotlib.axes.Axes
63
+ The axes object containing the plot
64
+ """
65
+ if ax is None:
66
+ fig, ax = plt.subplots(constrained_layout=True)
67
+
68
+ # Plot settings
69
+ linewidth = kwargs.pop("linewidth", 1.5)
70
+ color = kwargs.pop("color", "blue")
71
+ linestyle = kwargs.pop("linestyle", "-")
72
+
73
+ # Plot bands
74
+ if isinstance(self.xcoords, list): # Segmented path
75
+ start_idx = 0
76
+ for x in self.xcoords:
77
+ nbands = x.shape[0]
78
+ segment_bands = self.energies[start_idx : start_idx + nbands].T
79
+ for band in segment_bands:
80
+ ax.plot(
81
+ x,
82
+ band[start_idx : start_idx + nbands]+shift,
83
+ linewidth=linewidth,
84
+ color=color,
85
+ linestyle=linestyle,
86
+ **kwargs,
87
+ )
88
+ start_idx += nbands
89
+ ax.set_xlim([self.xcoords[0][0], self.xcoords[-1][-1]])
90
+ else: # Continuous path
91
+ for band in self.energies.T:
92
+ ax.plot(
93
+ self.xcoords,
94
+ band+shift,
95
+ linewidth=linewidth,
96
+ color=color,
97
+ linestyle=linestyle,
98
+ **kwargs,
99
+ )
100
+ ax.set_xlim([self.xcoords[0], self.xcoords[-1]])
101
+
102
+ # Set y-limits with padding
103
+ bmin, bmax = self.energies.min(), self.energies.max()
104
+ ymin = bmin - 0.05 * abs(bmin - bmax)
105
+ ymax = bmax + 0.05 * abs(bmax - bmin)
106
+ ax.set_ylim([ymin, ymax])
107
+
108
+ # Add k-point labels and vertical lines
109
+ kpoint_pos = [i for i, _ in self.kpath_labels]
110
+ kpoint_labels = [label for _, label in self.kpath_labels]
111
+ ax.set_xticks(kpoint_pos)
112
+ ax.set_xticklabels(kpoint_labels)
113
+ ax.vlines(
114
+ x=kpoint_pos,
115
+ ymin=ymin,
116
+ ymax=ymax,
117
+ color="black",
118
+ linewidth=linewidth / 5,
119
+ )
120
+
121
+ ax.set_ylabel("Energy (meV)")
122
+
123
+ if filename is not None:
124
+ plt.savefig(filename, dpi=300, bbox_inches="tight")
125
+ if show:
126
+ plt.show()
127
+
128
+ return ax
129
+
130
+ def save(self, filename: str):
131
+ """Save band structure data to a JSON file.
132
+
133
+ Parameters
134
+ ----------
135
+ filename : str
136
+ Output filename (will append .json if needed)
137
+ """
138
+ if not filename.endswith(".json"):
139
+ filename = filename + ".json"
140
+
141
+ data = {
142
+ "kpoints": self.kpoints.tolist(),
143
+ "energies": self.energies.tolist(),
144
+ "kpath_labels": [(int(i), str(l)) for i, l in self.kpath_labels],
145
+ "special_points": {k: v.tolist() for k, v in self.special_points.items()},
146
+ "xcoords": self.xcoords.tolist()
147
+ if isinstance(self.xcoords, np.ndarray)
148
+ else [x.tolist() for x in self.xcoords]
149
+ if self.xcoords is not None
150
+ else None,
151
+ }
152
+
153
+ with open(filename, "w") as f:
154
+ json.dump(data, f, indent=2)
155
+
156
+ @classmethod
157
+ def load(cls, filename: str) -> "MagnonBand":
158
+ """Load band structure from a JSON file.
159
+
160
+ Parameters
161
+ ----------
162
+ filename : str
163
+ Input JSON filename
164
+
165
+ Returns
166
+ -------
167
+ MagnonBand
168
+ Loaded band structure object
169
+ """
170
+ with open(filename) as f:
171
+ data = json.load(f)
172
+
173
+ # Convert lists back to numpy arrays
174
+ data["kpoints"] = np.array(data["kpoints"])
175
+ data["energies"] = np.array(data["energies"])
176
+ if data["xcoords"] is not None:
177
+ if isinstance(data["xcoords"][0], list): # Segmented path
178
+ data["xcoords"] = [np.array(x) for x in data["xcoords"]]
179
+ else: # Continuous path
180
+ data["xcoords"] = np.array(data["xcoords"])
181
+ data["special_points"] = {
182
+ k: np.array(v) for k, v in data["special_points"].items()
183
+ }
184
+
185
+ return cls(**data)
@@ -32,6 +32,7 @@ def get_rotation_arrays(magmoms, u=uz):
32
32
  v = magmoms
33
33
  n = np.cross(u, v)
34
34
  n /= np.linalg.norm(n, axis=-1).reshape(dim, 1)
35
+ #z = u #np.repeat(u, dim, axis=0)
35
36
  z = np.repeat(u, dim, axis=0)
36
37
  A = np.stack([z, np.cross(n, z), n], axis=1)
37
38
  B = np.stack([v, np.cross(n, v), n], axis=1)
TB2J/magnon/plot.py CHANGED
@@ -6,10 +6,23 @@ class BandsPlot:
6
6
  _UNITS = "meV"
7
7
  _NSYSTEMS = 1
8
8
 
9
- def __init__(self, bands, kpath, **kwargs):
10
- self.bands = bands
9
+ def __init__(self, bands, kpath, xlist=None, **kwargs):
10
+ """Initialize BandsPlot.
11
+
12
+ Parameters
13
+ ----------
14
+ bands : array_like
15
+ Band energies
16
+ kpath : list of (index, label) tuples
17
+ K-point labels and their indices
18
+ xlist : list of arrays, optional
19
+ X-coordinates for segmented paths. If None, uses range(nbands)
20
+ **kwargs : dict
21
+ Additional plotting options
22
+ """
23
+ self.bands = bands * 1000 # Convert to meV
11
24
  self.kpath = kpath
12
- self.bands *= 1000
25
+ self.xlist = xlist
13
26
 
14
27
  plot_options = kwargs
15
28
  self.linewidth = plot_options.pop("linewidth", 1.5)
@@ -19,29 +32,55 @@ class BandsPlot:
19
32
  self.plot_options = plot_options
20
33
 
21
34
  def plot(self, filename=None):
22
- fig, axs = plt.subplots(1, self._NSYSTEMS, constrained_layout=True)
35
+ """Plot the band structure.
23
36
 
24
- kdata = np.arange(self.bands.shape[0])
25
- for band in self.bands.T:
26
- axs.plot(
27
- kdata,
28
- band,
29
- linewidth=self.linewidth,
30
- color=self.color,
31
- **self.plot_options,
32
- )
37
+ Parameters
38
+ ----------
39
+ filename : str, optional
40
+ If provided, saves the plot to this file
41
+ """
42
+ fig, axs = plt.subplots(1, self._NSYSTEMS, constrained_layout=True)
33
43
 
44
+ # Get min/max for y-axis limits
34
45
  bmin, bmax = self.bands.min(), self.bands.max()
35
- ymin, ymax = (
36
- bmin - 0.05 * np.abs(bmin - bmax),
37
- bmax + 0.05 * np.abs(bmax - bmin),
38
- )
39
-
46
+ ymin = bmin - 0.05 * np.abs(bmin - bmax)
47
+ ymax = bmax + 0.05 * np.abs(bmax - bmin)
40
48
  axs.set_ylim([ymin, ymax])
41
- axs.set_xlim([0, kdata[-1]])
42
49
 
50
+ # Plot bands
51
+ if self.xlist is not None:
52
+ # Plot segments
53
+ start_idx = 0
54
+ for x in self.xlist:
55
+ nbands = x.shape[0]
56
+ segment_bands = self.bands[start_idx : start_idx + nbands].T
57
+ for band in segment_bands:
58
+ axs.plot(
59
+ x,
60
+ band[start_idx : start_idx + nbands],
61
+ linewidth=self.linewidth,
62
+ color=self.color,
63
+ **self.plot_options,
64
+ )
65
+ start_idx += nbands
66
+ # Set xlim to cover all segments
67
+ axs.set_xlim([self.xlist[0][0], self.xlist[-1][-1]])
68
+ else:
69
+ # Standard continuous plotting
70
+ kdata = np.arange(self.bands.shape[0])
71
+ for band in self.bands.T:
72
+ axs.plot(
73
+ kdata,
74
+ band,
75
+ linewidth=self.linewidth,
76
+ color=self.color,
77
+ **self.plot_options,
78
+ )
79
+ axs.set_xlim([0, kdata[-1]])
80
+
81
+ # Add k-point labels and vertical lines
43
82
  kpoint_labels = list(zip(*self.kpath))
44
- axs.set_xticks(*kpoint_labels, fontsize=self.ticksize)
83
+ axs.set_xticks(kpoint_labels[0], kpoint_labels[1], fontsize=self.ticksize)
45
84
  axs.vlines(
46
85
  x=kpoint_labels[0],
47
86
  ymin=ymin,
@@ -55,4 +94,4 @@ class BandsPlot:
55
94
  if filename is None:
56
95
  plt.show()
57
96
  else:
58
- fig.save(filename, dpi=300, bbox_inches="tight")
97
+ plt.savefig(filename, dpi=300, bbox_inches="tight")
@@ -0,0 +1,151 @@
1
+ #!/usr/bin/env python
2
+ from __future__ import division
3
+
4
+ import ase
5
+ import matplotlib.pyplot as plt
6
+ import numpy as np
7
+ from ase.cell import Cell
8
+ from ase.dft.kpoints import bandpath
9
+
10
+ # from minimulti.spin.hamiltonian import SpinHamiltonian
11
+ # from minimulti.spin.mover import SpinMover
12
+
13
+
14
+ def group_band_path(bp, eps=1e-8, shift=0.15):
15
+ """Groups band paths by separating segments with small distances between points.
16
+
17
+ Parameters
18
+ ----------
19
+ bp : ASE.cell.BandPath
20
+ The band path object containing k-points and special points
21
+ eps : float, optional
22
+ The threshold distance below which points are considered to be in the same group.
23
+ Default is 1e-8.
24
+ shift : float, optional
25
+ The shift distance to apply between different segments for visualization.
26
+ Default is 0.15.
27
+
28
+ Returns
29
+ -------
30
+ tuple
31
+ Contains:
32
+ - xlist : list of arrays
33
+ The x-coordinates for each segment, shifted for visualization
34
+ - kptlist : list of arrays
35
+ The k-points for each segment
36
+ - Xs : array
37
+ The x-coordinates of special points, shifted for visualization
38
+ - knames : list
39
+ The names of special k-points
40
+ """
41
+ xs, Xs, knames = bp.get_linear_kpoint_axis()
42
+ kpts = bp.kpts
43
+
44
+ m = xs[1:] - xs[:-1] < eps
45
+ segments = [0] + list(np.where(m)[0] + 1) + [len(xs)]
46
+
47
+ # split Xlist
48
+ xlist, kptlist = [], []
49
+ for i, (start, end) in enumerate(zip(segments[:-1], segments[1:])):
50
+ kptlist.append(kpts[start:end])
51
+ xlist.append(xs[start:end] + i * shift)
52
+
53
+ m = Xs[1:] - Xs[:-1] < eps
54
+
55
+ s = np.where(m)[0] + 1
56
+
57
+ for i in s:
58
+ Xs[i:] += shift
59
+
60
+ return xlist, kptlist, Xs, knames
61
+
62
+
63
+ def test_group_band_path():
64
+ """Visualize the band path grouping functionality.
65
+
66
+ This function demonstrates how group_band_path works by:
67
+ 1. Creating a simple test case (H atom with rectangular cell)
68
+ 2. Generating a band path with 50 points
69
+ 3. Grouping the path segments using group_band_path
70
+ 4. Plotting each segment to visualize how segments are shifted
71
+
72
+ The resulting plot shows:
73
+ - Each path segment plotted separately
74
+ - Special k-points labeled on x-axis
75
+ - Segments shifted relative to each other for clarity
76
+
77
+ Note: This is a visualization function rather than a unit test.
78
+ It helps understand the band path grouping behavior visually.
79
+ """
80
+ atoms = ase.Atoms("H", cell=[1, 1, 2])
81
+ bp = atoms.cell.bandpath(npoints=50)
82
+ xlist, kptlist, Xs, knames, spk = group_band_path(bp)
83
+
84
+ for x, k in zip(xlist, kptlist):
85
+ plt.plot(x, x)
86
+
87
+ plt.xticks(Xs, knames)
88
+ plt.show()
89
+
90
+
91
+ def auto_kpath(cell, knames, kvectors=None, npoints=100, supercell_matrix=None):
92
+ """Generates an automatic k-path for band structure calculations.
93
+
94
+ Parameters
95
+ ----------
96
+ cell : array_like
97
+ The unit cell vectors
98
+ knames : list or None
99
+ Names of the high-symmetry k-points. If None and kvectors is None,
100
+ automatically determines the path. If kvectors is provided, these names
101
+ correspond to the provided k-vectors.
102
+ kvectors : array_like, optional
103
+ Explicit k-vectors for the path. If None, vectors are determined from
104
+ knames or automatically. Default is None.
105
+ npoints : int, optional
106
+ Number of k-points along the path. Default is 100.
107
+ supercell_matrix : array_like, optional
108
+ Transformation matrix for supercell calculations. If provided, k-points
109
+ are transformed accordingly. Default is None.
110
+
111
+ Returns
112
+ -------
113
+ tuple
114
+ Contains:
115
+ - xlist : list of arrays
116
+ The x-coordinates for each path segment
117
+ - kptlist : list of arrays
118
+ The k-points for each segment
119
+ - Xs : array
120
+ The x-coordinates of special points
121
+ - knames : list
122
+ The names of special k-points
123
+ - spk : dict
124
+ Dictionary mapping k-point names to their coordinates
125
+ """
126
+ if knames is None and kvectors is None:
127
+ # fully automatic k-path
128
+ bp = Cell(cell).bandpath(npoints=npoints)
129
+ spk = bp.special_points
130
+ xlist, kptlist, Xs, knames = group_band_path(bp)
131
+ elif knames is not None and kvectors is None:
132
+ # user specified kpath by name
133
+ bp = Cell(cell).bandpath(knames, npoints=npoints)
134
+ spk = bp.special_points
135
+ kpts = bp.kpts
136
+ xlist, kptlist, Xs, knames = group_band_path(bp)
137
+ else:
138
+ # user spcified kpath and kvector.
139
+ kpts, x, Xs = bandpath(kvectors, cell, npoints)
140
+ spk = dict(zip(knames, kvectors))
141
+ xlist = [x]
142
+ kptlist = [kpts]
143
+
144
+ if supercell_matrix is not None:
145
+ kptlist = [np.dot(k, supercell_matrix) for k in kptlist]
146
+ print("High symmetry k-points:")
147
+ for name, k in spk.items():
148
+ if name == "G":
149
+ name = "Gamma"
150
+ print(f"{name}: {k}")
151
+ return xlist, kptlist, Xs, knames, spk
@@ -0,0 +1,7 @@
1
+ #!python
2
+
3
+
4
+ if __name__ == "__main__":
5
+ from TB2J.magnon.magnon3 import main
6
+
7
+ main()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: TB2J
3
- Version: 0.9.9.9
3
+ Version: 0.9.9.12
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
@@ -21,10 +21,12 @@ 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.2.3
24
+ Requires-Dist: HamiltonIO>=0.2.4
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: tomli>=2.0.0
29
+ Requires-Dist: tomli-w>=1.0.0
28
30
  Dynamic: author
29
31
  Dynamic: author-email
30
32
  Dynamic: classifier
@@ -1,17 +1,17 @@
1
1
  TB2J/Jdownfolder.py,sha256=n5BeQCYP4mD9JsAPeE1F3ZKKR3SUxADfDbaG_rzi77k,9658
2
- TB2J/Jtensor.py,sha256=t6OsqrSlYW6Im4H7ykVAW8Al_pFXN4C5yj2UEsV6r7g,3181
2
+ TB2J/Jtensor.py,sha256=Wi06AAbfKFU6f2a2jkFr9zU2cwwfVroajTp-dwCtkTE,3160
3
3
  TB2J/MAE.py,sha256=fM8U-Dgp9HcQOEeC_kyZV1oVrygBvcux9BraUXVouvY,10994
4
- TB2J/MAEGreen.py,sha256=Iq4hlZrKEOycPvpV66_t13WIcJ1FJgBS79NleXYpFzw,15528
4
+ TB2J/MAEGreen.py,sha256=DHoU6nlM0Fk42T_SYd_s-VafB6wCZNzVzRXhuv-hCwM,15762
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=AuZFEUeBNk8Hny02OhG2Y1omWiUh5m4XffiIIrWZkoI,24
7
+ TB2J/__init__.py,sha256=TcMW0FTsZFR9McJTh8TBwZl2lylHc2uwsxVV9PsgSwY,25
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
11
11
  TB2J/contour.py,sha256=zLHQZZ3hhgLkLFPATCraLOJyLJKLC0fba_L_5sRz23o,3246
12
12
  TB2J/density_matrix.py,sha256=D5k8Oe21OCiLVORNYbo4TZOFG0slrQSbj91kJ3TMFjs,1514
13
13
  TB2J/epc.py,sha256=zLbtqZJhDr8DnnGN6YENcXwrMb3Qxu6KB08mLy9Pw20,3474
14
- TB2J/exchange.py,sha256=P0GR2mlb-c_59fM_rFmc2C5zN8G7z5-cCsI7YAN5Aik,26980
14
+ TB2J/exchange.py,sha256=rJ7XeHOo6j9A0alauM2XQ5DvTO741dq_pDQQxyyn8mE,26981
15
15
  TB2J/exchangeCL2.py,sha256=P7bklMXVYX_tn9DbjEPqeTir1SeZyfPBIP1fhWUzLmY,11419
16
16
  TB2J/exchange_params.py,sha256=VW9nGVio6M_Ub9-36L_LExhjgdD1E_joYpI8AxmM360,8029
17
17
  TB2J/exchange_pert.py,sha256=jmFMtQbYa_uczM4VAeS6TijkIHRFIqEzZJswzE9Wfuo,8523
@@ -19,7 +19,7 @@ TB2J/exchange_qspace.py,sha256=ZL68qBGFUaQ9BsSPsJaaoWOr9RssPiqX34R_9I3nk_8,8436
19
19
  TB2J/gpaw_wrapper.py,sha256=aJ--9Dtyq7jOP1Hkh-Sh1nWcfXm6zKcljOCO0DNCAr0,6890
20
20
  TB2J/green.py,sha256=ySXjoV3Cj_E2C41dRfc3TkS7M4vmM6qcHXkt-_-jxsY,17071
21
21
  TB2J/greentest.py,sha256=2ISSfhor9ecSEOi_E6b4Cv26wEIQlwlzca0ru8z44_E,1603
22
- TB2J/io_merge.py,sha256=E1_GfAB2HGpW-ipaO2lqU9SvaslwkiLxssn4DqJpMT8,6899
22
+ TB2J/io_merge.py,sha256=xj5sIo5o62HYwSnijGycem_rAc8kSzY-HI2IJDRhzyE,7405
23
23
  TB2J/kpoints.py,sha256=9L7tBarFBHoIhpuc9zuwA6HdnlgH834SQrPek4yRoWk,3191
24
24
  TB2J/myTB.py,sha256=ok_B4my29bOIghMSZfx0Es6G8FaXaIiLP4gPxTdSj00,17659
25
25
  TB2J/mycfr.py,sha256=ZF1PEE2khlKd_4gPyMkoNXepX3XqwWAL2kDbRJNVX-Y,3908
@@ -43,32 +43,34 @@ 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=nkb8CTjHtv3DgMok4njyiaE-vDGDJFCjLHat71R_Z48,7561
46
+ TB2J/interfaces/siesta_interface.py,sha256=Y4rRn_MRZUOI4y4btgCKTtVy8iXrSpaBuK7SMCJ1C2o,7594
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=bQFnvvy-0hruTavH_VspMk1wD32t2UFybEkCgwkwle0,11941
51
51
  TB2J/interfaces/abacus/gen_exchange_abacus.py,sha256=v-AUHGkJWeMNf4D5A4wOpCjM6DygQsFB6SWu-BGdTxM,3262
52
52
  TB2J/interfaces/abacus/orbital_api.py,sha256=QEAyy4y_uM5GnwRyLvmShjd_z5A2fwqk7L8yj0Y2Mgc,1577
53
- TB2J/interfaces/abacus/stru_api.py,sha256=Ac03ikHRsZRXqTul4IUge7D2iG_xLh4_oyYfeP9tzGE,67881
53
+ TB2J/interfaces/abacus/stru_api.py,sha256=UsIs55Y_1AM31N2oCjwmgHIMgRIcusKA6g3K2tjr3uM,67945
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
57
  TB2J/io_exchange/__init__.py,sha256=LqEnG67qDVKt4hCUywDEQvUIJ7jsQjmtueOW_J16NOE,54
58
- TB2J/io_exchange/io_exchange.py,sha256=3swwPeheUog2pLrpBnyx76_AG7pPT8mVNEwv2ZTHoRI,21309
58
+ TB2J/io_exchange/io_exchange.py,sha256=KnR2UyvMSoBye8dD6ETqZW6nld-CcYchcCrAmHbVsBA,22735
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
- TB2J/io_exchange/io_vampire.py,sha256=59Bq5NZ3z6ACDdZdNrYnLnnKPVsZVqnYx7R6LQvO52E,5725
64
- TB2J/magnon/__init__.py,sha256=jdUFkOlhrpHRmKavAXVcFdZgtY7lKZVzMPFlLmmCErM,113
63
+ TB2J/io_exchange/io_vampire.py,sha256=u4NZhqoC_JBcVq19WZfBkyM5p8u-OMuRoUrtFIcPp5E,5762
64
+ TB2J/magnon/__init__.py,sha256=Q69duroGIIotgW_71ZdHYarSiJLGAu9NPYgEacUk6eI,117
65
65
  TB2J/magnon/io_exchange2.py,sha256=EcC3x6H13qq61WBsr__xKzHDtSvy_dMz1tEdUaqSG2I,23265
66
- TB2J/magnon/magnon3.py,sha256=GNqJVf73xibVbI9wVvaN2_uigbnNJKbHZxqjICwz3vw,10958
66
+ TB2J/magnon/magnon3.py,sha256=75YmSTT652q7lLEmJmn4-TbIkwJnjjelMfu0eyEzjA0,27401
67
+ TB2J/magnon/magnon_band.py,sha256=8HJWl1zcYSxJQflFUj4qaITnTWE-rhF5zQ1YgQN78oU,6098
67
68
  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
69
+ TB2J/magnon/magnon_math.py,sha256=b4Po_aZm8aIhr5u2nbjjtDDMTKV_ecI2d6Fc_AhiuNc,1358
70
+ TB2J/magnon/plot.py,sha256=oNavax15jRfW4Sxl6FgwLXSrMntyVz2cgVDbmgkWehw,3193
70
71
  TB2J/magnon/structure.py,sha256=rKefzXgQlEjVvV-A7E2IogVDWwf5egZr3Wxxu6HuJU4,7685
71
72
  TB2J/mathutils/__init__.py,sha256=E70Mx8mLXh3DJGmdN3TLWmGYMcsbvKxmgxUbAI6Mzmo,49
73
+ TB2J/mathutils/auto_kpath.py,sha256=bDXDyQzRByVpPSOpz7NU7F5hYqS6IX-47lwWoMU89lM,4978
72
74
  TB2J/mathutils/fermi.py,sha256=72tZ5CptGmYaBUD0xLWltuH7LBXcrMUwODyW6-WqlzI,638
73
75
  TB2J/mathutils/fibonacci_sphere.py,sha256=1rqf5n3a9aDjSydA4qGkR1eIeLJKuoblA73cchWJzNg,2342
74
76
  TB2J/mathutils/kR_convert.py,sha256=p_9XWJVNanTzTK2rI6KRjTkbSq42la6N448-zJOsMwY,2671
@@ -87,20 +89,21 @@ TB2J/spinham/supercell.py,sha256=y17uUC6r3gQb278FhxIW4CABihfLTvKFj6flyXrCPR8,122
87
89
  TB2J/wannier/__init__.py,sha256=7ojCbM84PYv1X1Tbo4NHI-d3gWmQsZB_xiYqbfxVV1E,80
88
90
  TB2J/wannier/w90_parser.py,sha256=dbd63LuKyv2DVUzqRINGsbDzEsOxsQyE8_Ear_LQIRg,4620
89
91
  TB2J/wannier/w90_tb_parser.py,sha256=qt8pnuprmPp9iIAYwPkPbmEzk6ZPgMq2xognoQp7vwc,4610
90
- tb2j-0.9.9.9.data/scripts/TB2J_downfold.py,sha256=i4BVqnpDdgrX_amookVWeLGefGBn-qeAutWiwuY9SfQ,2099
91
- tb2j-0.9.9.9.data/scripts/TB2J_eigen.py,sha256=Qs9v2hnMm2Tpfoa4h53muUKty2dZjwx8948MBoQooNg,1128
92
- tb2j-0.9.9.9.data/scripts/TB2J_magnon.py,sha256=q7UwAmorRcFNk4tfE7gl_ny05l6p7pbD9Wm_LkIpKEw,3101
93
- tb2j-0.9.9.9.data/scripts/TB2J_magnon2.py,sha256=tMa7Fg_Wd2UytnrH3C_AsgGM7BciUW0iy6NiPlWvar8,1920
94
- tb2j-0.9.9.9.data/scripts/TB2J_magnon_dos.py,sha256=TMXQvD2dIbO5FZ4tUMmxJgCgH2O2hDAPUNfEKO4z-x4,110
95
- tb2j-0.9.9.9.data/scripts/TB2J_merge.py,sha256=y834SF4rIRn1L1ptkhczvavQpC-8Px6DTmDOOSaq_DE,1854
96
- tb2j-0.9.9.9.data/scripts/TB2J_rotate.py,sha256=zgiDFuYZNmzKK0rwDmTaYD2OpRlmKA_VGeBx83w2Xwc,873
97
- tb2j-0.9.9.9.data/scripts/TB2J_rotateDM.py,sha256=kCvF7gotuqAX1VnJ06cwfVm7RrhrdtiV5v7d9P2Pn_E,567
98
- tb2j-0.9.9.9.data/scripts/abacus2J.py,sha256=ozYI7qZyja1WEs9oCYVpeYAfVj5PGhehhmdZFcvrd3g,1795
99
- tb2j-0.9.9.9.data/scripts/siesta2J.py,sha256=QJ6c0DbqxaqYEesxiL5R9nK9-flNLrr7hajKfCwirYc,2318
100
- tb2j-0.9.9.9.data/scripts/wann2J.py,sha256=OA31VHEXbQMD-JozoLUHDF6vB9Sr62d804OApSKtSnU,3240
101
- tb2j-0.9.9.9.dist-info/licenses/LICENSE,sha256=CbZI-jyRTjiqIcWa244cRSHJdjjtUNqGR4HeJkgEwJw,1332
102
- tb2j-0.9.9.9.dist-info/METADATA,sha256=WWe2x4jQqlWmF0ykFgISDw0zUtFFtym_TE_ekp2kJf8,1686
103
- tb2j-0.9.9.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
104
- tb2j-0.9.9.9.dist-info/entry_points.txt,sha256=Hdz1WC9waUzyFVmowKnbbZ6j-J4adHh_Ko6JpxGYAtE,131
105
- tb2j-0.9.9.9.dist-info/top_level.txt,sha256=whYa5ByLYhl5XnTPBHSWr-IGD6VWmr5Ql2bye2qwV_s,5
106
- tb2j-0.9.9.9.dist-info/RECORD,,
92
+ tb2j-0.9.9.12.data/scripts/TB2J_downfold.py,sha256=i4BVqnpDdgrX_amookVWeLGefGBn-qeAutWiwuY9SfQ,2099
93
+ tb2j-0.9.9.12.data/scripts/TB2J_eigen.py,sha256=Qs9v2hnMm2Tpfoa4h53muUKty2dZjwx8948MBoQooNg,1128
94
+ tb2j-0.9.9.12.data/scripts/TB2J_magnon.py,sha256=q7UwAmorRcFNk4tfE7gl_ny05l6p7pbD9Wm_LkIpKEw,3101
95
+ tb2j-0.9.9.12.data/scripts/TB2J_magnon2.py,sha256=tMa7Fg_Wd2UytnrH3C_AsgGM7BciUW0iy6NiPlWvar8,1920
96
+ tb2j-0.9.9.12.data/scripts/TB2J_magnon_dos.py,sha256=TMXQvD2dIbO5FZ4tUMmxJgCgH2O2hDAPUNfEKO4z-x4,110
97
+ tb2j-0.9.9.12.data/scripts/TB2J_merge.py,sha256=y834SF4rIRn1L1ptkhczvavQpC-8Px6DTmDOOSaq_DE,1854
98
+ tb2j-0.9.9.12.data/scripts/TB2J_plot_magnon_bands.py,sha256=qUbisPFLvW_j1IdTpc_jU0WiT-7CT-WErbkhNvAPM0Y,91
99
+ tb2j-0.9.9.12.data/scripts/TB2J_rotate.py,sha256=zgiDFuYZNmzKK0rwDmTaYD2OpRlmKA_VGeBx83w2Xwc,873
100
+ tb2j-0.9.9.12.data/scripts/TB2J_rotateDM.py,sha256=kCvF7gotuqAX1VnJ06cwfVm7RrhrdtiV5v7d9P2Pn_E,567
101
+ tb2j-0.9.9.12.data/scripts/abacus2J.py,sha256=ozYI7qZyja1WEs9oCYVpeYAfVj5PGhehhmdZFcvrd3g,1795
102
+ tb2j-0.9.9.12.data/scripts/siesta2J.py,sha256=QJ6c0DbqxaqYEesxiL5R9nK9-flNLrr7hajKfCwirYc,2318
103
+ tb2j-0.9.9.12.data/scripts/wann2J.py,sha256=OA31VHEXbQMD-JozoLUHDF6vB9Sr62d804OApSKtSnU,3240
104
+ tb2j-0.9.9.12.dist-info/licenses/LICENSE,sha256=CbZI-jyRTjiqIcWa244cRSHJdjjtUNqGR4HeJkgEwJw,1332
105
+ tb2j-0.9.9.12.dist-info/METADATA,sha256=Anj_G_XNOwWJm5YoXyx4drNpy1N0-aJTqpGpk5YX6lE,1745
106
+ tb2j-0.9.9.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
107
+ tb2j-0.9.9.12.dist-info/entry_points.txt,sha256=Hdz1WC9waUzyFVmowKnbbZ6j-J4adHh_Ko6JpxGYAtE,131
108
+ tb2j-0.9.9.12.dist-info/top_level.txt,sha256=whYa5ByLYhl5XnTPBHSWr-IGD6VWmr5Ql2bye2qwV_s,5
109
+ tb2j-0.9.9.12.dist-info/RECORD,,