pyjess 0.5.0__cp38-cp38-macosx_11_0_arm64.whl → 0.5.2__cp38-cp38-macosx_11_0_arm64.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.

Potentially problematic release.


This version of pyjess might be problematic. Click here for more details.

Binary file
pyjess/_jess.pyi CHANGED
@@ -183,6 +183,8 @@ class Query(Generic[_T], Iterator[Hit[_T]]):
183
183
  def __next__(self) -> Hit[_T]: ...
184
184
 
185
185
  class Hit(Generic[_T]):
186
+ def __getstate__(self) -> Dict[str, object]: ...
187
+ def __setstate__(self, state: Dict[str, object]) -> None: ...
186
188
  @property
187
189
  def rmsd(self) -> float: ...
188
190
  @property
pyjess/_jess.pyx CHANGED
@@ -31,6 +31,7 @@ cimport jess.molecule
31
31
  cimport jess.super
32
32
  cimport jess.tess_template
33
33
  cimport jess.tess_atom
34
+ cimport jess.res_index
34
35
  from jess.atom cimport Atom as _Atom
35
36
  from jess.jess cimport Jess as _Jess
36
37
  from jess.jess cimport JessQuery as _JessQuery
@@ -172,6 +173,7 @@ cdef class Molecule:
172
173
  if self._mol is NULL:
173
174
  raise MemoryError("Failed to allocate molecule")
174
175
 
176
+ self._mol.index = NULL
175
177
  self._mol.count = count
176
178
  for i in range(count):
177
179
  self._mol.atom[i] = NULL
@@ -184,6 +186,10 @@ cdef class Molecule:
184
186
  raise MemoryError("Failed to allocate atom")
185
187
  memcpy(self._mol.atom[i], atom._atom, sizeof(_Atom))
186
188
 
189
+ self._mol.index = jess.res_index.ResIndex_create(self._mol.atom, count)
190
+ if self._mol.index is NULL:
191
+ raise MemoryError("Failed to allocate residue index")
192
+
187
193
  def __len__(self):
188
194
  assert self._mol is not NULL
189
195
  return self._mol.count
@@ -274,6 +280,7 @@ cdef class Molecule:
274
280
  if copy._mol is NULL:
275
281
  raise MemoryError("Failed to allocate molecule")
276
282
  # copy molecule attributes
283
+ copy._mol.index = NULL
277
284
  copy._mol.count = self._mol.count
278
285
  memset(copy._mol.id, b' ', 5)
279
286
  # copy molecule atoms
@@ -282,6 +289,10 @@ cdef class Molecule:
282
289
  if copy._mol.atom[i] is NULL:
283
290
  raise MemoryError("Failed to allocate atom")
284
291
  memcpy(copy._mol.atom[i], self._mol.atom[i], sizeof(_Atom))
292
+ # regenerate index
293
+ copy._mol.index = jess.res_index.ResIndex_create(copy._mol.atom, copy._mol.count)
294
+ if copy._mol.index is NULL:
295
+ raise MemoryError("Failed to allocate residue index")
285
296
 
286
297
  copy._id = self._id
287
298
  return copy
@@ -1011,6 +1022,7 @@ cdef class Template:
1011
1022
  self._tpl.count = jess.tess_template.TessTemplate_count
1012
1023
  self._tpl.range = jess.tess_template.TessTemplate_range
1013
1024
  self._tpl.check = jess.tess_template.TessTemplate_check
1025
+ self._tpl.candidates = jess.tess_template.TessTemplate_candidates
1014
1026
  self._tpl.name = jess.tess_template.TessTemplate_name
1015
1027
  self._tpl.logE = jess.tess_template.TessTemplate_logE
1016
1028
  self._tpl.distWeight = jess.tess_template.TessTemplate_distWeight
@@ -1193,7 +1205,7 @@ cdef class Query:
1193
1205
  cdef bint _rewind(self) noexcept nogil:
1194
1206
  self._partial = True
1195
1207
 
1196
- cdef int _copy_atoms(self, _Template* tpl, Hit hit) except -1 nogil:
1208
+ cdef int _copy_atoms(self, const _Template* tpl, Hit hit) except -1 nogil:
1197
1209
  cdef _Atom** atoms = jess.jess.JessQuery_atoms(self._jq)
1198
1210
  cdef int count = tpl.count(tpl)
1199
1211
 
@@ -1204,6 +1216,15 @@ cdef class Query:
1204
1216
  memcpy(&hit._atoms[i], atoms[i], sizeof(_Atom))
1205
1217
  return count
1206
1218
 
1219
+ cdef int _copy_superposition(self, _Superposition* sup, Hit hit) noexcept nogil:
1220
+ cdef const double* M = jess.super.Superposition_rotation(sup)
1221
+ cdef const double* c = jess.super.Superposition_centroid(sup, 0)
1222
+ cdef const double* v = jess.super.Superposition_centroid(sup, 1)
1223
+ memcpy(hit._rotation, M, 9*sizeof(double))
1224
+ memcpy(hit._centre[0], c, 3*sizeof(double))
1225
+ memcpy(hit._centre[1], v, 3*sizeof(double))
1226
+ return 0
1227
+
1207
1228
  def __next__(self):
1208
1229
  assert self._jq is not NULL
1209
1230
 
@@ -1215,11 +1236,11 @@ cdef class Query:
1215
1236
  cdef Hit hit = Hit.__new__(Hit)
1216
1237
 
1217
1238
  # prepare the hit to be returned
1218
- hit._sup = NULL
1219
- hit._atoms = NULL
1220
1239
  hit.rmsd = INFINITY
1240
+ hit._atoms = NULL
1221
1241
  hit._molecule = self.molecule
1222
1242
  hit_tpl = NULL
1243
+ hit_found = False
1223
1244
 
1224
1245
  # search the next hit without the GIL to allow parallel queries.
1225
1246
  with nogil:
@@ -1228,14 +1249,13 @@ cdef class Query:
1228
1249
  # was obtained with the current template and not with the
1229
1250
  # previous one
1230
1251
  tpl = jess.jess.JessQuery_template(self._jq)
1231
- if hit._sup != NULL and hit_tpl != tpl:
1252
+ if hit_found and hit_tpl != tpl:
1232
1253
  self._rewind()
1233
1254
  break
1234
1255
 
1235
1256
  # load superposition and compute RMSD for the current iteration
1236
1257
  sup = jess.jess.JessQuery_superposition(self._jq)
1237
1258
  rmsd = jess.super.Superposition_rmsd(sup)
1238
- keep_sup = False
1239
1259
 
1240
1260
  # NB(@althonos): we don't need to compute the E-value to get the
1241
1261
  # best match by molecule/template pair since the
@@ -1260,22 +1280,20 @@ cdef class Query:
1260
1280
  stacklevel=2,
1261
1281
  )
1262
1282
  else:
1263
- if hit._sup != NULL:
1264
- jess.super.Superposition_free(hit._sup)
1265
1283
  self._copy_atoms(tpl, hit)
1266
- hit._sup = sup
1284
+ self._copy_superposition(sup, hit)
1267
1285
  hit.rmsd = rmsd
1268
1286
  hit_tpl = tpl
1287
+ hit_found = True
1269
1288
 
1270
1289
  # free superposition items that are not used in a hit, and
1271
1290
  # return hits immediately if we are not in best match mode
1272
1291
  self._candidates += 1
1273
- if hit._sup != sup:
1274
- jess.super.Superposition_free(sup)
1275
- if hit._sup != NULL and not self.best_match:
1292
+ jess.super.Superposition_free(sup)
1293
+ if hit_found and not self.best_match:
1276
1294
  break
1277
1295
 
1278
- if hit._sup == NULL:
1296
+ if not hit_found:
1279
1297
  raise StopIteration
1280
1298
 
1281
1299
  # get the template object for the hit
@@ -1293,7 +1311,8 @@ cdef class Hit:
1293
1311
  molecule (`~pyjess.Molecule`): The query molecule.
1294
1312
 
1295
1313
  """
1296
- cdef _Superposition* _sup
1314
+ cdef double[9] _rotation
1315
+ cdef double[2][3] _centre
1297
1316
  cdef _Atom* _atoms
1298
1317
 
1299
1318
  cdef readonly double rmsd
@@ -1301,19 +1320,49 @@ cdef class Hit:
1301
1320
  cdef Molecule _molecule
1302
1321
 
1303
1322
  def __dealloc__(self):
1304
- jess.super.Superposition_free(self._sup)
1305
1323
  free(self._atoms)
1306
1324
 
1325
+ def __getstate__(self):
1326
+ return {
1327
+ "rotation": list(self._rotation),
1328
+ "centre": list(self._centre),
1329
+ "atoms": self.atoms(transform=False),
1330
+ "rmsd": self.rmsd,
1331
+ "template": self.template,
1332
+ "molecule": self.molecule(transform=False),
1333
+ }
1334
+
1335
+ def __setstate__(self, state):
1336
+ cdef size_t i
1337
+ cdef size_t count
1338
+ cdef Atom atom
1339
+
1340
+ self.rmsd = state["rmsd"]
1341
+ self.template = state["template"]
1342
+ self._molecule = state["molecule"]
1343
+ self._rotation = state["rotation"]
1344
+ self._centre = state["centre"]
1345
+
1346
+ # check number of atoms is consistent
1347
+ count = len(self.template)
1348
+ if len(state["atoms"]) != count:
1349
+ raise ValueError(f"unexpected number of atoms: {len(state['atoms'])!r} (expected {count!r})")
1350
+ # allocate or reallocate memory for atoms
1351
+ self._atoms = <_Atom*> realloc(self._atoms, count * sizeof(_Atom))
1352
+ if self._atoms is NULL:
1353
+ raise MemoryError("Failed to allocate hit atoms")
1354
+ # copy atom data
1355
+ for i, atom in enumerate(state["atoms"]):
1356
+ memcpy(&self._atoms[i], atom._atom, sizeof(_Atom))
1357
+
1307
1358
  @property
1308
1359
  def determinant(self):
1309
1360
  """`float`: The determinant of the rotation matrix.
1310
1361
  """
1311
- assert self._sup is not NULL
1312
- cdef const double* p
1362
+ cdef const double* p = self._rotation
1313
1363
  cdef double det = 0.0
1314
1364
 
1315
1365
  with nogil:
1316
- p = jess.super.Superposition_rotation(self._sup)
1317
1366
  det += p[0] * (p[4] * p[8] - p[5] * p[7])
1318
1367
  det -= p[1] * (p[3] * p[8] - p[5] * p[6])
1319
1368
  det += p[2] * (p[3] * p[7] - p[4] * p[6])
@@ -1357,7 +1406,6 @@ cdef class Hit:
1357
1406
 
1358
1407
  """
1359
1408
  assert self.template._tpl is not NULL
1360
- assert self._sup is not NULL
1361
1409
 
1362
1410
  cdef Atom atom
1363
1411
  cdef int i
@@ -1366,21 +1414,23 @@ cdef class Hit:
1366
1414
  cdef int count = self.template._tpl.count(self.template._tpl)
1367
1415
  cdef list atoms = []
1368
1416
 
1369
- cdef const double* M = jess.super.Superposition_rotation(self._sup)
1370
- cdef const double* c = jess.super.Superposition_centroid(self._sup, 0)
1371
- cdef const double* v = jess.super.Superposition_centroid(self._sup, 1)
1417
+ cdef const double* M = self._rotation
1418
+ cdef const double* c = self._centre[0]
1419
+ cdef const double* v = self._centre[1]
1372
1420
 
1373
1421
  for k in range(count):
1374
-
1375
1422
  atom = Atom.__new__(Atom)
1376
- atom._atom = <_Atom*> malloc(sizeof(_Atom))
1377
- memcpy(atom._atom, &self._atoms[k], sizeof(_Atom))
1378
-
1379
1423
  if transform:
1424
+ atom._atom = <_Atom*> malloc(sizeof(_Atom))
1425
+ memcpy(atom._atom, &self._atoms[k], sizeof(_Atom))
1380
1426
  for i in range(3):
1381
1427
  atom._atom.x[i] = v[i]
1382
1428
  for j in range(3):
1383
1429
  atom._atom.x[i] += M[3*i + j] * (self._atoms[k].x[j] - c[j])
1430
+ else:
1431
+ atom.owned = True
1432
+ atom.owner = self
1433
+ atom._atom = &self._atoms[k]
1384
1434
 
1385
1435
  atoms.append(atom)
1386
1436
 
@@ -1401,23 +1451,22 @@ cdef class Hit:
1401
1451
 
1402
1452
  """
1403
1453
  assert self.template._tpl is not NULL
1404
- assert self._sup is not NULL
1405
1454
 
1406
1455
  cdef _Atom* atom
1407
1456
  cdef Molecule mol
1408
1457
  cdef size_t i
1409
1458
  cdef size_t j
1410
1459
  cdef size_t k
1411
- cdef const double* M = jess.super.Superposition_rotation(self._sup)
1412
- cdef const double* c = jess.super.Superposition_centroid(self._sup, 0)
1413
- cdef const double* v = jess.super.Superposition_centroid(self._sup, 1)
1460
+ cdef const double* M = self._rotation
1461
+ cdef const double* c = self._centre[0]
1462
+ cdef const double* v = self._centre[1]
1414
1463
 
1415
1464
  if not transform:
1416
1465
  return self._molecule
1417
1466
 
1418
1467
  mol = self._molecule.copy()
1419
1468
  for k in range(mol._mol.count):
1420
- atom = mol._mol.atom[i]
1469
+ atom = mol._mol.atom[k]
1421
1470
  for i in range(3):
1422
1471
  atom.x[i] = v[i]
1423
1472
  for j in range(3):
pyjess/tests/__init__.py CHANGED
@@ -1,5 +1,6 @@
1
1
  from . import (
2
2
  test_atom,
3
+ test_hit,
3
4
  test_jess,
4
5
  test_molecule,
5
6
  test_template_atom,
@@ -8,6 +9,7 @@ from . import (
8
9
 
9
10
  def load_tests(loader, suite, pattern):
10
11
  suite.addTests(loader.loadTestsFromModule(test_atom))
12
+ suite.addTests(loader.loadTestsFromModule(test_hit))
11
13
  suite.addTests(loader.loadTestsFromModule(test_jess))
12
14
  suite.addTests(loader.loadTestsFromModule(test_molecule))
13
15
  suite.addTests(loader.loadTestsFromModule(test_template_atom))
@@ -0,0 +1,33 @@
1
+ import math
2
+ import unittest
3
+ import sys
4
+ import pickle
5
+
6
+ from .._jess import Template, Molecule, Jess
7
+ from .utils import files
8
+ from . import data
9
+
10
+
11
+ class TestHit(unittest.TestCase):
12
+
13
+ @unittest.skipUnless(files, "importlib.resources not available")
14
+ @classmethod
15
+ def setUpClass(cls):
16
+ with files(data).joinpath("template_01.qry").open() as f:
17
+ template = Template.load(f)
18
+ jess = Jess([template])
19
+ with files(data).joinpath("pdb1lnb.pdb").open() as f:
20
+ molecule = Molecule.load(f)
21
+
22
+ cls.hit = next(jess.query(molecule, 1, 2, 2))
23
+
24
+ def test_pickle(self):
25
+ hit = pickle.loads(pickle.dumps(self.hit))
26
+ self.assertIsNot(self.hit, hit)
27
+ self.assertEqual(self.hit.rmsd, hit.rmsd)
28
+ self.assertEqual(self.hit.determinant, hit.determinant)
29
+ self.assertEqual(self.hit.evalue, hit.evalue)
30
+ self.assertEqual(self.hit.template, hit.template)
31
+ self.assertListEqual(self.hit.atoms(transform=True), hit.atoms(transform=True))
32
+ self.assertListEqual(self.hit.atoms(transform=False), hit.atoms(transform=False))
33
+ self.assertEqual(self.hit.molecule(transform=False), hit.molecule(transform=False))
pyjess/tests/test_jess.py CHANGED
@@ -92,6 +92,29 @@ class TestJess(unittest.TestCase):
92
92
  self.assertEqual(len(jess[:1]), 1)
93
93
  self.assertEqual(len(jess[1:]), 0)
94
94
 
95
+
96
+ @unittest.skipUnless(files, "importlib.resources not available")
97
+ def test_multiple_query_split(self):
98
+ with files(data).joinpath("template_01.qry").open() as f:
99
+ template1 = Template.load(f)
100
+ with files(data).joinpath("template_02.qry").open() as f:
101
+ template2 = Template.load(f)
102
+ j0 = Jess([template1, template2])
103
+ j1 = Jess([template1])
104
+ j2 = Jess([template2])
105
+
106
+ with files(data).joinpath("1AMY.pdb").open() as f:
107
+ molecule = Molecule.load(f)
108
+
109
+ h0 = list(j0.query(molecule, 2, 5, 5))
110
+ h1 = list(j1.query(molecule, 2, 5, 5))
111
+ h2 = list(j2.query(molecule, 2, 5, 5))
112
+
113
+ self.assertEqual(len(h0), len(h1) + len(h2))
114
+ for hit0, hit1 in zip(h0, (*h1, *h2)):
115
+ self.assertEqual(hit0.atoms(), hit1.atoms())
116
+ self.assertEqual(hit0.evalue, hit1.evalue)
117
+
95
118
  @unittest.skipUnless(files, "importlib.resources not available")
96
119
  def test_query_template_subclass(self):
97
120
 
@@ -217,3 +240,14 @@ class TestJess(unittest.TestCase):
217
240
  self.assertAlmostEqual(atom.occupancy, float(atom_line[55:61]), places=3)
218
241
  self.assertAlmostEqual(atom.temperature_factor, float(atom_line[61:67]), places=3)
219
242
 
243
+ atoms = hit.atoms(transform=False)
244
+ self.assertEqual(len(atoms), len(atom_lines))
245
+ for atom, atom_line in zip(atoms, atom_lines):
246
+ self.assertEqual(atom.serial, int(atom_line[7:12]))
247
+ self.assertEqual(atom.name, atom_line[13:17].strip())
248
+ self.assertEqual(atom.residue_name, atom_line[17:21].strip())
249
+ self.assertEqual(atom.chain_id, atom_line[21:23].strip())
250
+ self.assertEqual(atom.residue_number, int(atom_line[23:27]))
251
+ self.assertAlmostEqual(atom.occupancy, float(atom_line[55:61]), places=3)
252
+ self.assertAlmostEqual(atom.temperature_factor, float(atom_line[61:67]), places=3)
253
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pyjess
3
- Version: 0.5.0
3
+ Version: 0.5.2
4
4
  Summary: Cython bindings and Python interface to JESS, a 3D template matching software.
5
5
  Keywords: bioinformatics,structure,template,matching
6
6
  Author-Email: Martin Larralde <martin.larralde@embl.de>
@@ -76,7 +76,7 @@ Description-Content-Type: text/markdown
76
76
  [![Issues](https://img.shields.io/github/issues/althonos/pyjess.svg?style=flat-square&maxAge=600)](https://github.com/althonos/pyjess/issues)
77
77
  [![Docs](https://img.shields.io/readthedocs/pyjess/latest?style=flat-square&maxAge=600)](https://pyjess.readthedocs.io)
78
78
  [![Changelog](https://img.shields.io/badge/keep%20a-changelog-8A0707.svg?maxAge=2678400&style=flat-square)](https://github.com/althonos/pyjess/blob/main/CHANGELOG.md)
79
- [![Downloads](https://img.shields.io/pypi/dm/pyjess?style=flat-square&color=303f9f&maxAge=86400&label=downloads)](https://pepy.tech/project/pyjess)
79
+ [![Downloads](https://img.shields.io/badge/dynamic/regex?url=https%3A%2F%2Fpepy.tech%2Fprojects%2Fpyjess&search=%5B0-9%5D%2B.%5B0-9%5D%2B(k%7CM)&style=flat-square&label=downloads&color=303f9f&cacheSeconds=86400)](https://pepy.tech/project/pyjess)
80
80
 
81
81
 
82
82
  ## 🗺️ Overview
@@ -184,7 +184,7 @@ If running Jess in parallel, make sure to use `v0.2.1` or later to use the code
184
184
 
185
185
  ### ⚠️ Issue Tracker
186
186
 
187
- Found a bug ? Have an enhancement request ? Head over to the [GitHub issue tracker](https://github.com/althonos/[pyjess]/issues)
187
+ Found a bug ? Have an enhancement request ? Head over to the [GitHub issue tracker](https://github.com/althonos/pyjess/issues)
188
188
  if you need to report or ask something. If you are filing in on a bug,
189
189
  please include as much information as you can about the issue, and try to
190
190
  recreate the same bug in a simple, easily reproducible situation.
@@ -1,19 +1,20 @@
1
- pyjess-0.5.0.dist-info/RECORD,,
2
- pyjess-0.5.0.dist-info/WHEEL,sha256=e866hv7yNJ_T12xjD8b55JO_Epn_ySKlJm4M2IOihtU,112
3
- pyjess-0.5.0.dist-info/METADATA,sha256=sz5NWDSx0uyq_myc5StGdXX-lD3tNYVXz1K4efR5wZg,11151
4
- pyjess-0.5.0.dist-info/licenses/COPYING,sha256=gLCfHtBLTrghVX7GkpmZqoozWMNN46502m_OUiYy01Y,1103
5
- pyjess/_jess.cpython-38-darwin.so,sha256=mB47c-3-o9D9xzk6TlJztE-aoJxVQqbST63iostzTZM,315848
6
- pyjess/_jess.pyi,sha256=OjbEcgr16eFEnAFbT_zp-jqjd4XME2V_gxuKZJBXVoc,6896
1
+ pyjess-0.5.2.dist-info/RECORD,,
2
+ pyjess-0.5.2.dist-info/WHEEL,sha256=SvMeeWsTcOo2F3V-vhJiezSDbD8qncDjW76bNJE9h4A,112
3
+ pyjess-0.5.2.dist-info/METADATA,sha256=tsCMCW4Qh7vkECoA8aybf9sb0I8QTcdifZ7P7SDm1oI,11248
4
+ pyjess-0.5.2.dist-info/licenses/COPYING,sha256=gLCfHtBLTrghVX7GkpmZqoozWMNN46502m_OUiYy01Y,1103
5
+ pyjess/_jess.cpython-38-darwin.so,sha256=5ZSM_SScDpVp9DP6tZLcCCtGMW91KNxKSr9acNyBN6M,350312
6
+ pyjess/_jess.pyi,sha256=PhDo0l5LoYyLQPC2l-ZwyXKmyrC7y8T0i-yQYwcx--4,7015
7
7
  pyjess/CMakeLists.txt,sha256=Oa0pniEQx9jXyFCJGyrswn9ahWSSVuW1madyeP6StoI,35
8
8
  pyjess/__init__.py,sha256=h4XXLdS4FnyVa-MBs_k3eZMG1jWxeiOJnwfBaJA9gyQ,745
9
9
  pyjess/.gitignore,sha256=uQBOufp4v50qn0aZKv6zbSo00cjfB-v9KySog7rlmIU,19
10
- pyjess/_jess.pyx,sha256=tRPxQyvCBxvVbIjAb8iuCLtIpPAP0w_P_42Uy1wv8oc,49965
10
+ pyjess/_jess.pyx,sha256=7fZoPrLnUBXmE9eCq1wiBBrbGIcuOxyn9Szbct-nBKw,51879
11
11
  pyjess/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- pyjess/tests/__init__.py,sha256=MdHWtr6A8S4TBWlkoj4olFK2FXAGc5uJdbWtgFrDLpk,528
12
+ pyjess/tests/__init__.py,sha256=ka1wkfXesesZ3f6p5Dg55P4YYyS3R4gKRmhpQRtWVec,599
13
13
  pyjess/tests/test_molecule.py,sha256=RHBE0yL_j71nQOwXJ6t_PzkZi4BaFPY5Q0VwKWM6elk,5311
14
14
  pyjess/tests/utils.py,sha256=dsaphex7qomJCvSHWnVy79iYDPGiL59xqGAtRoVAeWc,196
15
+ pyjess/tests/test_hit.py,sha256=qN0qcGWHdvM9PZzBLWwuORhAXaZLp9c-CuZgO3GAbr8,1212
15
16
  pyjess/tests/test_atom.py,sha256=omNznNbRXMDt2j1plAUlfWPGCfmtkYpj2jysEX1zQuY,4631
16
- pyjess/tests/test_jess.py,sha256=mgHx6kDW5yzdvZiiybAVrd1J4k3Li3r-t4le6RFEE5o,9757
17
+ pyjess/tests/test_jess.py,sha256=tEu0K2B2-zLEMPFgQ1wk7lXhsZuRDyMzm58crT6G_ZY,11363
17
18
  pyjess/tests/test_template.py,sha256=XMLELYRB4j7xavziZ-ntq15PjhNHNfJJkctUq9BkvEI,4541
18
19
  pyjess/tests/test_template_atom.py,sha256=s9tJ_SAgvKeGwbVjaTWY-EtsUeQp3eu4NF5ja3oO_84,3405
19
20
  pyjess/tests/data/pdb1lnb.pdb,sha256=E9Jjy4qQ75O1UKIXcVyVJHE1XDNx1Rb7ENPVrehW6N8,270054
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: scikit-build-core 0.11.1
2
+ Generator: scikit-build-core 0.11.6
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp38-cp38-macosx_11_0_arm64
5
5