TB2J 0.9.3rc0__py3-none-any.whl → 0.9.5rc0__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.
TB2J/MAE.py CHANGED
@@ -11,8 +11,9 @@ import matplotlib.pyplot as plt
11
11
  from pathlib import Path
12
12
  from TB2J.mathutils.rotate_spin import spherical_to_cartesian
13
13
  from HamiltonIO.model.occupations import Occupations
14
- from TB2J.abacus.abacus_wrapper import AbacusSplitSOCParser
15
- from HamiltonIO.siesta import SislWrapper
14
+ #from TB2J.abacus.abacus_wrapper import AbacusSplitSOCParser
15
+ from HamiltonIO.abacus.abacus_wrapper import AbacusSplitSOCParser
16
+ from HamiltonIO.siesta import SislParser, SiestaHamiltonian
16
17
  import tqdm
17
18
 
18
19
 
@@ -75,7 +76,10 @@ class MAE:
75
76
  # e,rho = self.model.get_band_energy(dm=True)
76
77
  # self.calc_ref()
77
78
  # thetas = np.linspace(*angle_range, npoints)
78
- for i, (theta, phi) in tqdm.tqdm(enumerate(zip(thetas, phis))):
79
+ nangles = len(thetas)
80
+ for i in tqdm.trange(nangles):
81
+ theta = thetas[i]
82
+ phi = phis[i]
79
83
  self.model.set_Hsoc_rotation_angle([theta, phi])
80
84
  e = self.get_band_energy()
81
85
  es.append(e)
@@ -96,28 +100,27 @@ def abacus_get_MAE(
96
100
  outpath_nosoc=path_nosoc, outpath_soc=path_soc, binary=False
97
101
  )
98
102
  model = parser.parse()
99
- model.nel = 16
100
103
  ham = MAE(model, kmesh, gamma=gamma)
101
104
  es = ham.get_band_energy_vs_angles(thetas, psis)
102
105
  if outfile:
103
106
  with open(outfile, "w") as f:
104
107
  f.write("#theta, psi, energy\n")
105
108
  for theta, psi, e in zip(thetas, psis, es):
106
- f.write(f"{theta}, {psi}, {e}\n")
109
+ f.write(f"{theta:5.3f}, {psi:5.3f}, {e:10.9f}\n")
107
110
  return es
108
111
 
109
112
 
110
113
  def siesta_get_MAE(fdf_fname, kmesh, thetas, phis, gamma=True, outfile="MAE.txt"):
111
114
  """ """
112
- parser = SiestaParser(fdf_fname=fdf_fname, read_H_soc=True)
113
- model = parser.parse()
115
+ model= SislParser(fdf_fname=fdf_fname, read_H_soc=True).get_model()
114
116
  ham = MAE(model, kmesh, gamma=gamma)
115
117
  es = ham.get_band_energy_vs_angles(thetas, phis)
116
118
  if outfile:
117
119
  with open(outfile, "w") as f:
118
120
  f.write("#theta, psi, energy\n")
119
121
  for theta, psi, e in zip(thetas, phis, es):
120
- f.write(f"{theta}, {psi}, {e}\n")
122
+ #f.write(f"{theta}, {psi}, {e}\n")
123
+ f.write(f"{theta:5.3f}, {psi:5.3f}, {e:10.9f}\n")
121
124
  return es
122
125
 
123
126
 
@@ -36,6 +36,7 @@ class AbacusWrapper(AbstractTB):
36
36
  self.set_HR_soc(HR_soc=HR_soc, HR_nosoc=HR_nosoc, HR_full=HR)
37
37
  self.soc_rotation_angle = 0.0
38
38
 
39
+
39
40
  def set_HR_soc(self, HR_soc=None, HR_nosoc=None, HR_full=None):
40
41
  self.split_soc = True
41
42
  self.HR_soc = HR_soc
@@ -156,6 +157,9 @@ class AbacusParser:
156
157
  # read the information
157
158
  self.read_atoms()
158
159
  self.efermi = self.read_efermi()
160
+ self.nel = self.read_nel()
161
+ print(f"efermi: {self.efermi}")
162
+ print(f"nel: {self.nel}")
159
163
  self.read_basis()
160
164
 
161
165
  def read_spin(self):
@@ -254,10 +258,10 @@ class AbacusParser:
254
258
  nel = None
255
259
  with open(fname, "r") as myfile:
256
260
  for line in myfile:
257
- if "NELECT" in line:
258
- nel = float(line.split()[2])
261
+ if "number of electrons" in line:
262
+ nel = float(line.split()[-1])
259
263
  if nel is None:
260
- raise ValueError(f"NELECT not found in the {str(fname)} file.")
264
+ raise ValueError(f"number of electron not found in the {str(fname)} file.")
261
265
  return nel
262
266
 
263
267
  def get_basis(self):
@@ -306,6 +310,7 @@ class AbacusSplitSOCParser:
306
310
  nspin=2,
307
311
  HR_soc=HR_soc,
308
312
  HR_nosoc=HR_nosoc,
313
+ nel=self.parser_nosoc.nel,
309
314
  )
310
315
  model.efermi = self.parser_soc.efermi
311
316
  model.basis = self.parser_nosoc.basis
@@ -6,7 +6,8 @@ The main function to compute exchange interaction from abacus data
6
6
 
7
7
  import os
8
8
  from pathlib import Path
9
- from TB2J.abacus.abacus_wrapper import AbacusParser
9
+ #from TB2J.abacus.abacus_wrapper import AbacusParser
10
+ from HamiltonIO.abacus import AbacusParser
10
11
  from TB2J.exchange import ExchangeNCL, ExchangeCL
11
12
  from TB2J.exchangeCL2 import ExchangeCL2
12
13
 
TB2J/manager.py CHANGED
@@ -7,11 +7,15 @@ from TB2J.exchange_qspace import ExchangeCLQspace
7
7
  from TB2J.utils import read_basis, auto_assign_basis_name
8
8
  from ase.io import read
9
9
 
10
- #from TB2J.sisl_wrapper import SislWrapper
10
+ # from TB2J.sisl_wrapper import SislWrapper
11
+
12
+ from HamiltonIO.siesta import SislParser
11
13
  try:
12
- from HamiltonIO.siesta import SislWrapper
14
+ from HamiltonIO.siesta import SislParser
13
15
  except ImportError:
14
- print("Cannot import SislWrapper from HamiltonIO.siesta. Please install HamiltonIO first.")
16
+ print(
17
+ "Cannot import SislWrapper from HamiltonIO.siesta. Please install HamiltonIO first."
18
+ )
15
19
  from TB2J.sisl_wrapper import SislWrapper
16
20
  from TB2J.gpaw_wrapper import GPAWWrapper
17
21
  from TB2J.wannier import parse_atoms
@@ -283,14 +287,16 @@ def gen_exchange_siesta(
283
287
  include_orbs[element] = None
284
288
  magnetic_elements = list(include_orbs.keys())
285
289
 
286
- fdf = sisl.get_sile(fdf_fname)
290
+ #fdf = sisl.get_sile(fdf_fname)
287
291
  # geom = fdf.read_geometry()
288
- H = fdf.read_hamiltonian()
289
- geom = H.geometry
290
- if H.spin.is_colinear:
292
+ #H = fdf.read_hamiltonian()
293
+ #geom = H.geometry
294
+ parser=SislParser(fdf_fname=fdf_fname, ispin=None, read_H_soc=False)
295
+ if parser.spin.is_colinear:
291
296
  print("Reading Siesta hamiltonian: colinear spin.")
292
- tbmodel_up = SislWrapper(fdf_fname=None,sisl_hamiltonian=H, spin=0, geom=geom)
293
- tbmodel_dn = SislWrapper(fdf_fname=None, sisl_hamiltonian=H, spin=1, geom=geom)
297
+ #tbmodel_up = SislWrapper(fdf_fname=None, sisl_hamiltonian=H, spin=0, geom=geom)
298
+ #tbmodel_dn = SislWrapper(fdf_fname=None, sisl_hamiltonian=H, spin=1, geom=geom)
299
+ tbmodel_up, tbmodel_dn = parser.get_model()
294
300
  basis = dict(zip(tbmodel_up.orbs, list(range(tbmodel_up.norb))))
295
301
  print("Starting to calculate exchange.")
296
302
  description = f""" Input from collinear Siesta data.
@@ -320,7 +326,7 @@ def gen_exchange_siesta(
320
326
  print("\n")
321
327
  print(f"All calculation finsihed. The results are in {output_path} directory.")
322
328
 
323
- elif H.spin.is_colinear and False:
329
+ elif parser.spin.is_colinear and False:
324
330
  print(
325
331
  "Reading Siesta hamiltonian: colinear spin. Treat as non-colinear. For testing only."
326
332
  )
@@ -355,10 +361,10 @@ def gen_exchange_siesta(
355
361
  print("\n")
356
362
  print(f"All calculation finsihed. The results are in {output_path} directory.")
357
363
 
358
- elif H.spin.is_spinorbit or H.spin.is_noncolinear:
364
+ elif parser.spin.is_spinorbit or H.spin.is_noncolinear:
359
365
  print("Reading Siesta hamiltonian: non-colinear spin.")
360
- tbmodel = SislWrapper(fdf_fname=None, sisl_hamiltonian=H, spin=None, geom=geom)
361
- basis = dict(zip(tbmodel.orbs, list(range(tbmodel.nbasis))))
366
+ model = parser.get_model()
367
+ basis = dict(zip(model.orbs, list(range(model.nbasis))))
362
368
  print("Starting to calculate exchange.")
363
369
  description = f""" Input from non-collinear Siesta data.
364
370
  working directory: {os.getcwd()}
@@ -368,8 +374,8 @@ Warning: The DMI component parallel to the spin orientation, the Jani which has
368
374
  If you need these component, try to do three calculations with spin along x, y, z, or use structure with z rotated to x, y and z. And then use TB2J_merge.py to get the full set of parameters.
369
375
  \n"""
370
376
  exchange = ExchangeNCL(
371
- tbmodels=tbmodel,
372
- atoms=tbmodel.atoms,
377
+ tbmodels=model,
378
+ atoms=model.atoms,
373
379
  basis=basis,
374
380
  efermi=0.0,
375
381
  magnetic_elements=magnetic_elements,
TB2J/pauli.py CHANGED
@@ -143,11 +143,39 @@ def pauli_block_all(M):
143
143
  return MI, Mx, My, Mz
144
144
 
145
145
 
146
- def gather_pauli_blocks(MI, Mx, My, Mz):
146
+ def gather_pauli_blocks(MI, Mx, My, Mz, coeffs=[1.0, 1.0, 1.0, 1.0]):
147
147
  """
148
148
  Gather the I, x, y, z component of a matrix.
149
149
  """
150
- return np.kron(MI, s0) + np.kron(Mx, s1) + np.kron(My, s2) + np.kron(Mz, s3)
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)
152
+
153
+ def pauli_part(M, coeffs=[1.0, 1.0, 1.0, 1.0]):
154
+ """
155
+ Get the I, x, y, z part of a matrix.
156
+ """
157
+ MI, Mx, My, Mz = pauli_block_all(M)
158
+ return gather_pauli_blocks(MI, Mx, My, Mz, coeffs=coeffs)
159
+
160
+ def chargepart(M):
161
+ """
162
+ Get the charge part of a matrix.
163
+ """
164
+ MI = (M[::2, ::2] + M[1::2, 1::2]) / 2.0
165
+ Mcopy = np.zeros_like(M)
166
+ Mcopy[::2, ::2] = MI
167
+ Mcopy[1::2, 1::2] = MI
168
+ return Mcopy
169
+
170
+ def spinpart(M):
171
+ """
172
+ Get the spin part of a matrix.
173
+ """
174
+ MI = (M[::2, ::2] + M[1::2, 1::2]) / 2.0
175
+ Mcopy = M.copy()
176
+ Mcopy[::2, ::2] -= MI
177
+ Mcopy[1::2, 1::2] -= MI
178
+ return Mcopy
151
179
 
152
180
 
153
181
  def test_gather_pauli_blocks():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: TB2J
3
- Version: 0.9.3rc0
3
+ Version: 0.9.5rc0
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,7 +21,6 @@ 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: pre-commit
25
- Requires-Dist: HamiltonIO >=0.1.4
24
+ Requires-Dist: HamiltonIO >=0.1.5
26
25
 
27
26
  TB2J is a Python package aimed to compute automatically the magnetic interactions (superexchange and Dzyaloshinskii-Moriya) between atoms of magnetic crystals from DFT Hamiltonian based on Wannier functions or Linear combination of atomic orbitals. It uses the Green's function method and take the local rigid spin rotation as a perturbation. The package can take the output from Wannier90, which is interfaced with many density functional theory codes or from codes based on localised orbitals. A minimal user input is needed, which allows for an easily integration into a high-throughput workflows.
@@ -1,6 +1,6 @@
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=0yU11DNKwcW5fL2EWgangIqHdWW4Vp97IiXGdi70Ayo,7396
3
+ TB2J/MAE.py,sha256=-KWqxjKJvPFuxsMjm0c3nESyUFDeFTqsV7QzPJN-Fxo,7579
4
4
  TB2J/Oiju.py,sha256=cNGv8N5uH_swGq7cnAt2OyiDfqtjLlLrwseGu0E4iaM,3383
5
5
  TB2J/Oiju_epc.py,sha256=oytM3NYW7nWmklrGgNlqwIpI_JYv_hb7ZnR4o9nYNog,6809
6
6
  TB2J/__init__.py,sha256=hcEWkag_UvLm1ZSbjsgcTWkGVlR3Bwmzg1QYAwsvf-g,24
@@ -19,12 +19,12 @@ TB2J/green.py,sha256=giWSPhrLKc3ZKOpwyY3snUKFWH08GMqBlsJWbFG9Qo8,13565
19
19
  TB2J/greentest.py,sha256=2ISSfhor9ecSEOi_E6b4Cv26wEIQlwlzca0ru8z44_E,1603
20
20
  TB2J/io_merge.py,sha256=t85k3L6IL9X5ys-PWK7CzResb3xJsyqM3LAlKPUe9vM,6825
21
21
  TB2J/kpoints.py,sha256=6XK2KqTncidEq3o9GuO6VEZRPNTRtWeXg9QfcV-9smI,532
22
- TB2J/manager.py,sha256=Ogb_yRCnroNmGttKPRcbF70ddF9UNV_1UytdKbNFN4E,15685
22
+ TB2J/manager.py,sha256=w_zKrmsTtlNNiR0tO3kNoQqRf9aCKdbIa8s2cgvESwI,15826
23
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
26
  TB2J/patch.py,sha256=Z3KZklID9U8zKuk6Ek1Tq95JcY3eT4770dsdcXz6mAA,1067
27
- TB2J/pauli.py,sha256=zOELm7Vgxw6SMaO5l7qVWx1pBKZt25RLnEpnVM3dz_0,4545
27
+ TB2J/pauli.py,sha256=2UKVHyWSzNDL43KzbGYa26h550lfrlreksCEh_2tWe4,5246
28
28
  TB2J/pert.py,sha256=RaCJfewl0doht4cjAnzzGKe-uj2le4aqe0iPKFrq9fo,1192
29
29
  TB2J/plot.py,sha256=AnFIFWE2vlmj7Z6f_7-dX_O1stJN-qbuiurPj43dUCM,4104
30
30
  TB2J/rotate_atoms.py,sha256=Dwptn-wdDW4zYzjYb95yxTzuZOe9WPuLjh3d3-YcSs0,3277
@@ -38,8 +38,8 @@ TB2J/versioninfo.py,sha256=wZwS9QDFRVDe7rf8JyPDDI8UGdTQiO6Pb_sWv8GAegA,337
38
38
  TB2J/abacus/MAE.py,sha256=q9aSVDRZFAnZL3gHdNmde7sxj80oe-BRjwDO-ipyfew,12237
39
39
  TB2J/abacus/__init__.py,sha256=5sHiDnF2L-Y80QeET9zOiS83a5T_TQAXvnIhcYB6wNU,56
40
40
  TB2J/abacus/abacus_api.py,sha256=D_NyXW-Pno92d3RVHByx0l1HDPHQAvXsmQVt8cfIGR8,7267
41
- TB2J/abacus/abacus_wrapper.py,sha256=k0ZyTQ0jungp7jtlVCcdFQVK9YKeWokZvASCvfKCuKs,11880
42
- TB2J/abacus/gen_exchange_abacus.py,sha256=lKZqkWMnLQtaSwgn8O5Fzr-pV6tzwoMqfZU_vbET6gU,2973
41
+ TB2J/abacus/abacus_wrapper.py,sha256=MCQt1qjweJ1-NnzxH7QBCVmQ7p9K9cgE3a5mldui9TA,12055
42
+ TB2J/abacus/gen_exchange_abacus.py,sha256=xdas1BtjLlxWdxtJPqoUousfo-Gk1iOg9jIfkgUrYjU,3017
43
43
  TB2J/abacus/occupations.py,sha256=vaMVeZwldgzGDxjA7i3-2-V6akXjpgJwJFWKozJ-l2k,8947
44
44
  TB2J/abacus/orbital_api.py,sha256=l48Hn5z7TA0TH7Is4NDmz74b6B9L2ztYO4dRR37U4mQ,1562
45
45
  TB2J/abacus/stru_api.py,sha256=aBKKlZ2hvAZChVCfNxRdxH51rfHKqZn6kOlazY-yW8k,67888
@@ -76,18 +76,18 @@ 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.3rc0.data/scripts/TB2J_downfold.py,sha256=i4BVqnpDdgrX_amookVWeLGefGBn-qeAutWiwuY9SfQ,2099
80
- TB2J-0.9.3rc0.data/scripts/TB2J_eigen.py,sha256=Qs9v2hnMm2Tpfoa4h53muUKty2dZjwx8948MBoQooNg,1128
81
- TB2J-0.9.3rc0.data/scripts/TB2J_magnon.py,sha256=q7UwAmorRcFNk4tfE7gl_ny05l6p7pbD9Wm_LkIpKEw,3101
82
- TB2J-0.9.3rc0.data/scripts/TB2J_magnon_dos.py,sha256=TMXQvD2dIbO5FZ4tUMmxJgCgH2O2hDAPUNfEKO4z-x4,110
83
- TB2J-0.9.3rc0.data/scripts/TB2J_merge.py,sha256=y834SF4rIRn1L1ptkhczvavQpC-8Px6DTmDOOSaq_DE,1854
84
- TB2J-0.9.3rc0.data/scripts/TB2J_rotate.py,sha256=zgiDFuYZNmzKK0rwDmTaYD2OpRlmKA_VGeBx83w2Xwc,873
85
- TB2J-0.9.3rc0.data/scripts/TB2J_rotateDM.py,sha256=kCvF7gotuqAX1VnJ06cwfVm7RrhrdtiV5v7d9P2Pn_E,567
86
- TB2J-0.9.3rc0.data/scripts/abacus2J.py,sha256=M4B07lvTCDczTPTqvnDh_PERzCARAd09TLKv4aIdSQM,4408
87
- TB2J-0.9.3rc0.data/scripts/siesta2J.py,sha256=hBzS7ZgoHM3oXlTCQd-xVA07Ks2FiIwyRpQWUFITRPE,4303
88
- TB2J-0.9.3rc0.data/scripts/wann2J.py,sha256=2t2hWwyELskYCwkGDziCgiIAnfr6odLLJ6cQBJ2RQwQ,5714
89
- TB2J-0.9.3rc0.dist-info/LICENSE,sha256=CbZI-jyRTjiqIcWa244cRSHJdjjtUNqGR4HeJkgEwJw,1332
90
- TB2J-0.9.3rc0.dist-info/METADATA,sha256=9kUPr5GCrvzdnzjbhCmByaSBj6qZ-991Hab3hJ7WUzE,1455
91
- TB2J-0.9.3rc0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
92
- TB2J-0.9.3rc0.dist-info/top_level.txt,sha256=whYa5ByLYhl5XnTPBHSWr-IGD6VWmr5Ql2bye2qwV_s,5
93
- TB2J-0.9.3rc0.dist-info/RECORD,,
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,,