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.
- pyjess/_jess.cpython-38-darwin.so +0 -0
- pyjess/_jess.pyi +2 -0
- pyjess/_jess.pyx +79 -30
- pyjess/tests/__init__.py +2 -0
- pyjess/tests/test_hit.py +33 -0
- pyjess/tests/test_jess.py +34 -0
- {pyjess-0.5.0.dist-info → pyjess-0.5.2.dist-info}/METADATA +3 -3
- {pyjess-0.5.0.dist-info → pyjess-0.5.2.dist-info}/RECORD +10 -9
- {pyjess-0.5.0.dist-info → pyjess-0.5.2.dist-info}/WHEEL +1 -1
- {pyjess-0.5.0.dist-info → pyjess-0.5.2.dist-info}/licenses/COPYING +0 -0
|
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
|
|
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
|
-
|
|
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
|
-
|
|
1274
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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 =
|
|
1370
|
-
cdef const double* c =
|
|
1371
|
-
cdef const double* v =
|
|
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
|
|
1412
|
-
cdef const double* c
|
|
1413
|
-
cdef const double* v
|
|
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[
|
|
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))
|
pyjess/tests/test_hit.py
ADDED
|
@@ -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.
|
|
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
|
[](https://github.com/althonos/pyjess/issues)
|
|
77
77
|
[](https://pyjess.readthedocs.io)
|
|
78
78
|
[](https://github.com/althonos/pyjess/blob/main/CHANGELOG.md)
|
|
79
|
-
[&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/
|
|
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.
|
|
2
|
-
pyjess-0.5.
|
|
3
|
-
pyjess-0.5.
|
|
4
|
-
pyjess-0.5.
|
|
5
|
-
pyjess/_jess.cpython-38-darwin.so,sha256=
|
|
6
|
-
pyjess/_jess.pyi,sha256=
|
|
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=
|
|
10
|
+
pyjess/_jess.pyx,sha256=7fZoPrLnUBXmE9eCq1wiBBrbGIcuOxyn9Szbct-nBKw,51879
|
|
11
11
|
pyjess/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
-
pyjess/tests/__init__.py,sha256=
|
|
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=
|
|
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
|
|
File without changes
|