TB2J 0.9.9.9__py3-none-any.whl → 0.9.9.10__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 (25) hide show
  1. TB2J/io_exchange/io_exchange.py +53 -21
  2. TB2J/io_exchange/io_vampire.py +6 -3
  3. TB2J/magnon/__init__.py +2 -2
  4. TB2J/magnon/magnon3.py +546 -56
  5. TB2J/magnon/magnon_band.py +180 -0
  6. TB2J/magnon/plot.py +60 -21
  7. TB2J/mathutils/auto_kpath.py +154 -0
  8. tb2j-0.9.9.10.data/scripts/TB2J_plot_magnon_bands.py +7 -0
  9. {tb2j-0.9.9.9.dist-info → tb2j-0.9.9.10.dist-info}/METADATA +3 -1
  10. {tb2j-0.9.9.9.dist-info → tb2j-0.9.9.10.dist-info}/RECORD +25 -22
  11. {tb2j-0.9.9.9.data → tb2j-0.9.9.10.data}/scripts/TB2J_downfold.py +0 -0
  12. {tb2j-0.9.9.9.data → tb2j-0.9.9.10.data}/scripts/TB2J_eigen.py +0 -0
  13. {tb2j-0.9.9.9.data → tb2j-0.9.9.10.data}/scripts/TB2J_magnon.py +0 -0
  14. {tb2j-0.9.9.9.data → tb2j-0.9.9.10.data}/scripts/TB2J_magnon2.py +0 -0
  15. {tb2j-0.9.9.9.data → tb2j-0.9.9.10.data}/scripts/TB2J_magnon_dos.py +0 -0
  16. {tb2j-0.9.9.9.data → tb2j-0.9.9.10.data}/scripts/TB2J_merge.py +0 -0
  17. {tb2j-0.9.9.9.data → tb2j-0.9.9.10.data}/scripts/TB2J_rotate.py +0 -0
  18. {tb2j-0.9.9.9.data → tb2j-0.9.9.10.data}/scripts/TB2J_rotateDM.py +0 -0
  19. {tb2j-0.9.9.9.data → tb2j-0.9.9.10.data}/scripts/abacus2J.py +0 -0
  20. {tb2j-0.9.9.9.data → tb2j-0.9.9.10.data}/scripts/siesta2J.py +0 -0
  21. {tb2j-0.9.9.9.data → tb2j-0.9.9.10.data}/scripts/wann2J.py +0 -0
  22. {tb2j-0.9.9.9.dist-info → tb2j-0.9.9.10.dist-info}/WHEEL +0 -0
  23. {tb2j-0.9.9.9.dist-info → tb2j-0.9.9.10.dist-info}/entry_points.txt +0 -0
  24. {tb2j-0.9.9.9.dist-info → tb2j-0.9.9.10.dist-info}/licenses/LICENSE +0 -0
  25. {tb2j-0.9.9.9.dist-info → tb2j-0.9.9.10.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,180 @@
1
+ """Module for handling magnon band structure data and plotting."""
2
+ from dataclasses import dataclass
3
+ from pathlib import Path
4
+ from typing import List, Optional, Tuple, Union
5
+ import json
6
+
7
+ import numpy as np
8
+ import matplotlib.pyplot as plt
9
+
10
+ @dataclass
11
+ class MagnonBand:
12
+ """Magnon band structure data and plotting functionality.
13
+
14
+ Parameters
15
+ ----------
16
+ energies : np.ndarray
17
+ Band energies of shape (nkpts, nbands)
18
+ kpoints : np.ndarray
19
+ k-points coordinates of shape (nkpts, 3)
20
+ kpath_labels : List[Tuple[int, str]]
21
+ List of (index, label) tuples for special k-points
22
+ special_points : dict
23
+ Dictionary mapping k-point names to their coordinates
24
+ xcoords : Optional[Union[np.ndarray, List[np.ndarray]]]
25
+ x-coordinates for plotting. Can be continuous or segmented.
26
+ """
27
+
28
+ energies: np.ndarray
29
+ kpoints: np.ndarray
30
+ kpath_labels: List[Tuple[int, str]]
31
+ special_points: dict
32
+ xcoords: Optional[Union[np.ndarray, List[np.ndarray]]] = None
33
+
34
+ def __post_init__(self):
35
+ """Convert input arrays to numpy arrays and set default x-coordinates."""
36
+ self.energies = np.array(self.energies)
37
+ self.kpoints = np.array(self.kpoints)
38
+
39
+ if self.xcoords is None:
40
+ self.xcoords = np.arange(len(self.kpoints))
41
+
42
+ def plot(self, ax=None, filename=None, show=False, **kwargs):
43
+ """Plot the magnon band structure.
44
+
45
+ Parameters
46
+ ----------
47
+ ax : matplotlib.axes.Axes, optional
48
+ Matplotlib axes for plotting. If None, creates new figure.
49
+ filename : str, optional
50
+ If provided, saves plot to this file.
51
+ show : bool, optional
52
+ Whether to show the plot on screen. Default is False.
53
+ **kwargs : dict
54
+ Additional arguments passed to plot function:
55
+ - linewidth: float, default 1.5
56
+ - color: str, default 'blue'
57
+ - linestyle: str, default '-'
58
+
59
+ Returns
60
+ -------
61
+ matplotlib.axes.Axes
62
+ The axes object containing the plot
63
+ """
64
+ if ax is None:
65
+ fig, ax = plt.subplots(constrained_layout=True)
66
+
67
+ # Plot settings
68
+ linewidth = kwargs.pop('linewidth', 1.5)
69
+ color = kwargs.pop('color', 'blue')
70
+ linestyle = kwargs.pop('linestyle', '-')
71
+
72
+ # Plot bands
73
+ if isinstance(self.xcoords, list): # Segmented path
74
+ start_idx = 0
75
+ for x in self.xcoords:
76
+ nbands = x.shape[0]
77
+ segment_bands = self.energies[start_idx:start_idx + nbands].T
78
+ for band in segment_bands:
79
+ ax.plot(
80
+ x,
81
+ band[start_idx:start_idx + nbands],
82
+ linewidth=linewidth,
83
+ color=color,
84
+ linestyle=linestyle,
85
+ **kwargs,
86
+ )
87
+ start_idx += nbands
88
+ ax.set_xlim([self.xcoords[0][0], self.xcoords[-1][-1]])
89
+ else: # Continuous path
90
+ for band in self.energies.T:
91
+ ax.plot(
92
+ self.xcoords,
93
+ band,
94
+ linewidth=linewidth,
95
+ color=color,
96
+ linestyle=linestyle,
97
+ **kwargs,
98
+ )
99
+ ax.set_xlim([self.xcoords[0], self.xcoords[-1]])
100
+
101
+ # Set y-limits with padding
102
+ bmin, bmax = self.energies.min(), self.energies.max()
103
+ ymin = bmin - 0.05 * abs(bmin - bmax)
104
+ ymax = bmax + 0.05 * abs(bmax - bmin)
105
+ ax.set_ylim([ymin, ymax])
106
+
107
+ # Add k-point labels and vertical lines
108
+ kpoint_pos = [i for i, _ in self.kpath_labels]
109
+ kpoint_labels = [label for _, label in self.kpath_labels]
110
+ ax.set_xticks(kpoint_pos)
111
+ ax.set_xticklabels(kpoint_labels)
112
+ ax.vlines(
113
+ x=kpoint_pos,
114
+ ymin=ymin,
115
+ ymax=ymax,
116
+ color='black',
117
+ linewidth=linewidth / 5,
118
+ )
119
+
120
+ ax.set_ylabel('Energy (meV)')
121
+
122
+ if filename is not None:
123
+ plt.savefig(filename, dpi=300, bbox_inches='tight')
124
+ if show:
125
+ plt.show()
126
+
127
+ return ax
128
+
129
+ def save(self, filename: str):
130
+ """Save band structure data to a JSON file.
131
+
132
+ Parameters
133
+ ----------
134
+ filename : str
135
+ Output filename (will append .json if needed)
136
+ """
137
+ if not filename.endswith('.json'):
138
+ filename = filename + '.json'
139
+
140
+ data = {
141
+ 'kpoints': self.kpoints.tolist(),
142
+ 'energies': self.energies.tolist(),
143
+ 'kpath_labels': [(int(i), str(l)) for i, l in self.kpath_labels],
144
+ 'special_points': {k: v.tolist() for k, v in self.special_points.items()},
145
+ 'xcoords': self.xcoords.tolist() if isinstance(self.xcoords, np.ndarray)
146
+ else [x.tolist() for x in self.xcoords] if self.xcoords is not None
147
+ else None,
148
+ }
149
+
150
+ with open(filename, 'w') as f:
151
+ json.dump(data, f, indent=2)
152
+
153
+ @classmethod
154
+ def load(cls, filename: str) -> 'MagnonBand':
155
+ """Load band structure from a JSON file.
156
+
157
+ Parameters
158
+ ----------
159
+ filename : str
160
+ Input JSON filename
161
+
162
+ Returns
163
+ -------
164
+ MagnonBand
165
+ Loaded band structure object
166
+ """
167
+ with open(filename) as f:
168
+ data = json.load(f)
169
+
170
+ # Convert lists back to numpy arrays
171
+ data['kpoints'] = np.array(data['kpoints'])
172
+ data['energies'] = np.array(data['energies'])
173
+ if data['xcoords'] is not None:
174
+ if isinstance(data['xcoords'][0], list): # Segmented path
175
+ data['xcoords'] = [np.array(x) for x in data['xcoords']]
176
+ else: # Continuous path
177
+ data['xcoords'] = np.array(data['xcoords'])
178
+ data['special_points'] = {k: np.array(v) for k, v in data['special_points'].items()}
179
+
180
+ return cls(**data)
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,154 @@
1
+ #!/usr/bin/env python
2
+ from __future__ import division
3
+ import ase
4
+ import matplotlib.pyplot as plt
5
+ import numpy as np
6
+ from ase.geometry import cell_to_cellpar, cellpar_to_cell
7
+ from ase.dft.kpoints import get_special_points, parse_path_string
8
+ from ase.cell import Cell
9
+ from ase.dft.kpoints import bandpath
10
+
11
+ # from minimulti.spin.hamiltonian import SpinHamiltonian
12
+ # from minimulti.spin.mover import SpinMover
13
+
14
+
15
+ def group_band_path(bp, eps=1e-8, shift=0.15):
16
+ """Groups band paths by separating segments with small distances between points.
17
+
18
+ Parameters
19
+ ----------
20
+ bp : ASE.cell.BandPath
21
+ The band path object containing k-points and special points
22
+ eps : float, optional
23
+ The threshold distance below which points are considered to be in the same group.
24
+ Default is 1e-8.
25
+ shift : float, optional
26
+ The shift distance to apply between different segments for visualization.
27
+ Default is 0.15.
28
+
29
+ Returns
30
+ -------
31
+ tuple
32
+ Contains:
33
+ - xlist : list of arrays
34
+ The x-coordinates for each segment, shifted for visualization
35
+ - kptlist : list of arrays
36
+ The k-points for each segment
37
+ - Xs : array
38
+ The x-coordinates of special points, shifted for visualization
39
+ - knames : list
40
+ The names of special k-points
41
+ """
42
+ xs, Xs, knames = bp.get_linear_kpoint_axis()
43
+ kpts = bp.kpts
44
+
45
+ m = xs[1:] - xs[:-1] < eps
46
+ segments = [0] + list(np.where(m)[0] + 1) + [len(xs)]
47
+
48
+ # split Xlist
49
+ xlist, kptlist = [], []
50
+ for i, (start, end) in enumerate(zip(segments[:-1], segments[1:])):
51
+ kptlist.append(kpts[start:end])
52
+ xlist.append(xs[start:end] + i * shift)
53
+
54
+ m = Xs[1:] - Xs[:-1] < eps
55
+
56
+ s = np.where(m)[0] + 1
57
+
58
+ for i in s:
59
+ Xs[i:] += shift
60
+
61
+ return xlist, kptlist, Xs, knames
62
+
63
+
64
+ def test_group_band_path():
65
+ """Visualize the band path grouping functionality.
66
+
67
+ This function demonstrates how group_band_path works by:
68
+ 1. Creating a simple test case (H atom with rectangular cell)
69
+ 2. Generating a band path with 50 points
70
+ 3. Grouping the path segments using group_band_path
71
+ 4. Plotting each segment to visualize how segments are shifted
72
+
73
+ The resulting plot shows:
74
+ - Each path segment plotted separately
75
+ - Special k-points labeled on x-axis
76
+ - Segments shifted relative to each other for clarity
77
+
78
+ Note: This is a visualization function rather than a unit test.
79
+ It helps understand the band path grouping behavior visually.
80
+ """
81
+ atoms = ase.Atoms("H", cell=[1, 1, 2])
82
+ bp = atoms.cell.bandpath(npoints=50)
83
+ xlist, kptlist, Xs, knames, spk = group_band_path(bp)
84
+
85
+ for x, k in zip(xlist, kptlist):
86
+ plt.plot(x, x)
87
+
88
+ plt.xticks(Xs, knames)
89
+ plt.show()
90
+
91
+
92
+
93
+
94
+ def auto_kpath(cell, knames, kvectors=None, npoints=100, supercell_matrix=None):
95
+ """Generates an automatic k-path for band structure calculations.
96
+
97
+ Parameters
98
+ ----------
99
+ cell : array_like
100
+ The unit cell vectors
101
+ knames : list or None
102
+ Names of the high-symmetry k-points. If None and kvectors is None,
103
+ automatically determines the path. If kvectors is provided, these names
104
+ correspond to the provided k-vectors.
105
+ kvectors : array_like, optional
106
+ Explicit k-vectors for the path. If None, vectors are determined from
107
+ knames or automatically. Default is None.
108
+ npoints : int, optional
109
+ Number of k-points along the path. Default is 100.
110
+ supercell_matrix : array_like, optional
111
+ Transformation matrix for supercell calculations. If provided, k-points
112
+ are transformed accordingly. Default is None.
113
+
114
+ Returns
115
+ -------
116
+ tuple
117
+ Contains:
118
+ - xlist : list of arrays
119
+ The x-coordinates for each path segment
120
+ - kptlist : list of arrays
121
+ The k-points for each segment
122
+ - Xs : array
123
+ The x-coordinates of special points
124
+ - knames : list
125
+ The names of special k-points
126
+ - spk : dict
127
+ Dictionary mapping k-point names to their coordinates
128
+ """
129
+ if knames is None and kvectors is None:
130
+ # fully automatic k-path
131
+ bp = Cell(cell).bandpath(npoints=npoints)
132
+ spk = bp.special_points
133
+ xlist, kptlist, Xs, knames = group_band_path(bp)
134
+ elif knames is not None and kvectors is None:
135
+ # user specified kpath by name
136
+ bp = Cell(cell).bandpath(knames, npoints=npoints)
137
+ spk = bp.special_points
138
+ kpts = bp.kpts
139
+ xlist, kptlist, Xs, knames = group_band_path(bp)
140
+ else:
141
+ # user spcified kpath and kvector.
142
+ kpts, x, Xs = bandpath(kvectors, cell, npoints)
143
+ spk = dict(zip(knames, kvectors))
144
+ xlist = [x]
145
+ kptlist = [kpts]
146
+
147
+ if supercell_matrix is not None:
148
+ kptlist = [np.dot(k, supercell_matrix) for k in kptlist]
149
+ print("High symmetry k-points:")
150
+ for name, k in spk.items():
151
+ if name == "G":
152
+ name = "Gamma"
153
+ print(f"{name}: {k}")
154
+ 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.10
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,6 +25,8 @@ Requires-Dist: HamiltonIO>=0.2.3
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
@@ -55,20 +55,22 @@ TB2J/interfaces/abacus/test_density_matrix.py,sha256=bMWWJYtDS57SpPZ-eZXZ9Hr_UK4
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=px0FcH_Vx7FfoB2rA3ERXImjfrbYuBB7UImBxg6R_8E,22585
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=IhuDqqkWP5NzMjaPoVk2C5aw4xIgrxgWfNdrZfoPd70,27064
67
+ TB2J/magnon/magnon_band.py,sha256=S8W0sP-uR0urmi85QZRIDevIYnALUKAd1DPF99KLvAI,6076
67
68
  TB2J/magnon/magnon_io.py,sha256=H4bmzCcnh1D3Sb6UBIIKWa6jIrA20dg9lX4wfLXHEjo,1241
68
69
  TB2J/magnon/magnon_math.py,sha256=hJ2k24eR4TzdaFMxfxgCr10lWV4GEcfaf2WxhWj-uUk,1320
69
- TB2J/magnon/plot.py,sha256=kwq9LL0FRVo-SLYNkE-ghlyjz8DZD-c4LAWg8si5GJo,1674
70
+ TB2J/magnon/plot.py,sha256=QxkI2bIs-wF31rUzyxL-SRR_r7XY-gFVLb9SVFnGaJY,3197
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=9vhb_3iRSYE7eRmY1sVRqkK3i4KzaGAw1w0SmCzIA7Y,5119
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.10.data/scripts/TB2J_downfold.py,sha256=i4BVqnpDdgrX_amookVWeLGefGBn-qeAutWiwuY9SfQ,2099
93
+ tb2j-0.9.9.10.data/scripts/TB2J_eigen.py,sha256=Qs9v2hnMm2Tpfoa4h53muUKty2dZjwx8948MBoQooNg,1128
94
+ tb2j-0.9.9.10.data/scripts/TB2J_magnon.py,sha256=q7UwAmorRcFNk4tfE7gl_ny05l6p7pbD9Wm_LkIpKEw,3101
95
+ tb2j-0.9.9.10.data/scripts/TB2J_magnon2.py,sha256=tMa7Fg_Wd2UytnrH3C_AsgGM7BciUW0iy6NiPlWvar8,1920
96
+ tb2j-0.9.9.10.data/scripts/TB2J_magnon_dos.py,sha256=TMXQvD2dIbO5FZ4tUMmxJgCgH2O2hDAPUNfEKO4z-x4,110
97
+ tb2j-0.9.9.10.data/scripts/TB2J_merge.py,sha256=y834SF4rIRn1L1ptkhczvavQpC-8Px6DTmDOOSaq_DE,1854
98
+ tb2j-0.9.9.10.data/scripts/TB2J_plot_magnon_bands.py,sha256=qUbisPFLvW_j1IdTpc_jU0WiT-7CT-WErbkhNvAPM0Y,91
99
+ tb2j-0.9.9.10.data/scripts/TB2J_rotate.py,sha256=zgiDFuYZNmzKK0rwDmTaYD2OpRlmKA_VGeBx83w2Xwc,873
100
+ tb2j-0.9.9.10.data/scripts/TB2J_rotateDM.py,sha256=kCvF7gotuqAX1VnJ06cwfVm7RrhrdtiV5v7d9P2Pn_E,567
101
+ tb2j-0.9.9.10.data/scripts/abacus2J.py,sha256=ozYI7qZyja1WEs9oCYVpeYAfVj5PGhehhmdZFcvrd3g,1795
102
+ tb2j-0.9.9.10.data/scripts/siesta2J.py,sha256=QJ6c0DbqxaqYEesxiL5R9nK9-flNLrr7hajKfCwirYc,2318
103
+ tb2j-0.9.9.10.data/scripts/wann2J.py,sha256=OA31VHEXbQMD-JozoLUHDF6vB9Sr62d804OApSKtSnU,3240
104
+ tb2j-0.9.9.10.dist-info/licenses/LICENSE,sha256=CbZI-jyRTjiqIcWa244cRSHJdjjtUNqGR4HeJkgEwJw,1332
105
+ tb2j-0.9.9.10.dist-info/METADATA,sha256=BlrZOTmf-aA9vZ2QD5g3JzA4nHxJPNjvJlGeHVQ9KYI,1745
106
+ tb2j-0.9.9.10.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
107
+ tb2j-0.9.9.10.dist-info/entry_points.txt,sha256=Hdz1WC9waUzyFVmowKnbbZ6j-J4adHh_Ko6JpxGYAtE,131
108
+ tb2j-0.9.9.10.dist-info/top_level.txt,sha256=whYa5ByLYhl5XnTPBHSWr-IGD6VWmr5Ql2bye2qwV_s,5
109
+ tb2j-0.9.9.10.dist-info/RECORD,,