pyjess 0.4.1__cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl → 0.5.1__cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.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-37m-aarch64-linux-gnu.so +0 -0
- pyjess/_jess.pyi +3 -4
- pyjess/_jess.pyx +100 -12
- pyjess/tests/test_jess.py +23 -0
- {pyjess-0.4.1.dist-info → pyjess-0.5.1.dist-info}/METADATA +25 -14
- {pyjess-0.4.1.dist-info → pyjess-0.5.1.dist-info}/RECORD +17 -17
- {pyjess-0.4.1.dist-info → pyjess-0.5.1.dist-info}/licenses/COPYING +1 -1
- {pyjess-0.4.1.dist-info → pyjess-0.5.1.dist-info}/WHEEL +0 -0
|
Binary file
|
pyjess/_jess.pyi
CHANGED
|
@@ -39,7 +39,7 @@ class Molecule(Sequence[Atom]):
|
|
|
39
39
|
|
|
40
40
|
class Atom:
|
|
41
41
|
@classmethod
|
|
42
|
-
def load(cls, file: Union[
|
|
42
|
+
def load(cls, file: Union[TextIO, str, os.PathLike[str]]) -> Atom: ...
|
|
43
43
|
@classmethod
|
|
44
44
|
def loads(cls, text: str) -> Atom: ...
|
|
45
45
|
def __init__(
|
|
@@ -100,7 +100,7 @@ class Atom:
|
|
|
100
100
|
|
|
101
101
|
class TemplateAtom:
|
|
102
102
|
@classmethod
|
|
103
|
-
def load(cls, file: Union[
|
|
103
|
+
def load(cls, file: Union[TextIO, str, os.PathLike[str]]) -> Atom: ...
|
|
104
104
|
@classmethod
|
|
105
105
|
def loads(cls, text: str) -> TemplateAtom: ...
|
|
106
106
|
def __init__(
|
|
@@ -188,14 +188,13 @@ class Hit(Generic[_T]):
|
|
|
188
188
|
@property
|
|
189
189
|
def template(self) -> _T: ...
|
|
190
190
|
@property
|
|
191
|
-
def molecule(self) -> Molecule: ...
|
|
192
|
-
@property
|
|
193
191
|
def determinant(self) -> float: ...
|
|
194
192
|
@property
|
|
195
193
|
def log_evalue(self) -> float: ...
|
|
196
194
|
@property
|
|
197
195
|
def evalue(self) -> float: ...
|
|
198
196
|
def atoms(self, transform: bool = True) -> List[Atom]: ...
|
|
197
|
+
def molecule(self, transform: bool = False) -> Molecule: ...
|
|
199
198
|
|
|
200
199
|
class Jess(Generic[_T], Sequence[_T]):
|
|
201
200
|
def __init__(self, templates: Iterable[_T] = ()): ...
|
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
|
|
@@ -461,7 +472,7 @@ cdef class Atom:
|
|
|
461
472
|
return NotImplemented
|
|
462
473
|
other_ = other
|
|
463
474
|
# FIXME: it should be possible to do a memcmp here.
|
|
464
|
-
return self._state() == other_._state()
|
|
475
|
+
return self._state() == other_._state()
|
|
465
476
|
|
|
466
477
|
def __hash__(self):
|
|
467
478
|
return hash(tuple(self._state().values()))
|
|
@@ -598,11 +609,16 @@ cdef class TemplateAtom:
|
|
|
598
609
|
"""Load a template atom from the given file.
|
|
599
610
|
|
|
600
611
|
Arguments:
|
|
601
|
-
file (file-like object): A file-like object
|
|
602
|
-
text mode to read the template atom from.
|
|
612
|
+
file (str, os.PathLike or file-like object): A file-like object
|
|
613
|
+
opened in text or binary mode to read the template atom from.
|
|
603
614
|
|
|
604
615
|
"""
|
|
605
|
-
|
|
616
|
+
try:
|
|
617
|
+
handle = open(file)
|
|
618
|
+
except TypeError:
|
|
619
|
+
handle = nullcontext(file)
|
|
620
|
+
with handle as f:
|
|
621
|
+
return cls.loads(f.read())
|
|
606
622
|
|
|
607
623
|
@classmethod
|
|
608
624
|
def loads(cls, text):
|
|
@@ -849,7 +865,7 @@ cdef class TemplateAtom:
|
|
|
849
865
|
|
|
850
866
|
.. versionchanged:: 0.4.1
|
|
851
867
|
Property now returns a `tuple` rather than a `list`.
|
|
852
|
-
|
|
868
|
+
|
|
853
869
|
"""
|
|
854
870
|
assert self._atom is not NULL
|
|
855
871
|
|
|
@@ -871,11 +887,11 @@ cdef class TemplateAtom:
|
|
|
871
887
|
"""Create a copy of this template atom.
|
|
872
888
|
|
|
873
889
|
Returns:
|
|
874
|
-
`~pyjess.TemplateAtom`: A new template atom object with
|
|
890
|
+
`~pyjess.TemplateAtom`: A new template atom object with
|
|
875
891
|
identical attributes.
|
|
876
|
-
|
|
892
|
+
|
|
877
893
|
.. versionadded:: 0.4.0
|
|
878
|
-
|
|
894
|
+
|
|
879
895
|
"""
|
|
880
896
|
return type(self)(**self._state())
|
|
881
897
|
|
|
@@ -894,10 +910,42 @@ cdef class Template:
|
|
|
894
910
|
|
|
895
911
|
@classmethod
|
|
896
912
|
def loads(cls, text, str id = None):
|
|
913
|
+
"""Load a template from a string.
|
|
914
|
+
|
|
915
|
+
Arguments:
|
|
916
|
+
file (`str`, `os.PathLike`, or file-like object): Either the path
|
|
917
|
+
to a file, or a file-like object opened in **text mode**
|
|
918
|
+
containing the template.
|
|
919
|
+
id (`str`, optional): The identifier of the template. By default,
|
|
920
|
+
the parser will take the one from the ``PDB_ID`` remark if
|
|
921
|
+
found in the header.
|
|
922
|
+
|
|
923
|
+
Returns:
|
|
924
|
+
`~pyjess.Template`: The template parsed from the given string.
|
|
925
|
+
|
|
926
|
+
See Also:
|
|
927
|
+
`Template.load` to load a template from a file-like object or
|
|
928
|
+
from a path.
|
|
929
|
+
|
|
930
|
+
"""
|
|
897
931
|
return cls.load(io.StringIO(text), id=id)
|
|
898
932
|
|
|
899
933
|
@classmethod
|
|
900
934
|
def load(cls, file, str id = None):
|
|
935
|
+
"""Load a template from the given file.
|
|
936
|
+
|
|
937
|
+
Arguments:
|
|
938
|
+
file (`str`, `os.PathLike` or file-like object): Either the
|
|
939
|
+
path to a file, or a file-like object opened in **text mode**
|
|
940
|
+
to read the template from.
|
|
941
|
+
id (`str`, optional): The identifier of the template. By default,
|
|
942
|
+
the parser will take the one from the ``PDB_ID`` remark if
|
|
943
|
+
found in the header.
|
|
944
|
+
|
|
945
|
+
Returns:
|
|
946
|
+
`~pyjess.Template`: The template parsed from the given file.
|
|
947
|
+
|
|
948
|
+
"""
|
|
901
949
|
try:
|
|
902
950
|
handle = open(file)
|
|
903
951
|
except TypeError:
|
|
@@ -974,6 +1022,7 @@ cdef class Template:
|
|
|
974
1022
|
self._tpl.count = jess.tess_template.TessTemplate_count
|
|
975
1023
|
self._tpl.range = jess.tess_template.TessTemplate_range
|
|
976
1024
|
self._tpl.check = jess.tess_template.TessTemplate_check
|
|
1025
|
+
self._tpl.candidates = jess.tess_template.TessTemplate_candidates
|
|
977
1026
|
self._tpl.name = jess.tess_template.TessTemplate_name
|
|
978
1027
|
self._tpl.logE = jess.tess_template.TessTemplate_logE
|
|
979
1028
|
self._tpl.distWeight = jess.tess_template.TessTemplate_distWeight
|
|
@@ -1181,7 +1230,7 @@ cdef class Query:
|
|
|
1181
1230
|
hit._sup = NULL
|
|
1182
1231
|
hit._atoms = NULL
|
|
1183
1232
|
hit.rmsd = INFINITY
|
|
1184
|
-
hit.
|
|
1233
|
+
hit._molecule = self.molecule
|
|
1185
1234
|
hit_tpl = NULL
|
|
1186
1235
|
|
|
1187
1236
|
# search the next hit without the GIL to allow parallel queries.
|
|
@@ -1261,7 +1310,7 @@ cdef class Hit:
|
|
|
1261
1310
|
|
|
1262
1311
|
cdef readonly double rmsd
|
|
1263
1312
|
cdef readonly Template template
|
|
1264
|
-
cdef
|
|
1313
|
+
cdef Molecule _molecule
|
|
1265
1314
|
|
|
1266
1315
|
def __dealloc__(self):
|
|
1267
1316
|
jess.super.Superposition_free(self._sup)
|
|
@@ -1292,7 +1341,7 @@ cdef class Hit:
|
|
|
1292
1341
|
cdef double e
|
|
1293
1342
|
|
|
1294
1343
|
with nogil:
|
|
1295
|
-
n = jess.molecule.Molecule_count(self.
|
|
1344
|
+
n = jess.molecule.Molecule_count(self._molecule._mol)
|
|
1296
1345
|
e = self.template._tpl.logE(self.template._tpl, self.rmsd, n)
|
|
1297
1346
|
return e
|
|
1298
1347
|
|
|
@@ -1304,7 +1353,7 @@ cdef class Hit:
|
|
|
1304
1353
|
cdef double e
|
|
1305
1354
|
|
|
1306
1355
|
with nogil:
|
|
1307
|
-
n = jess.molecule.Molecule_count(self.
|
|
1356
|
+
n = jess.molecule.Molecule_count(self._molecule._mol)
|
|
1308
1357
|
e = exp(self.template._tpl.logE(self.template._tpl, self.rmsd, n))
|
|
1309
1358
|
return e
|
|
1310
1359
|
|
|
@@ -1349,6 +1398,45 @@ cdef class Hit:
|
|
|
1349
1398
|
|
|
1350
1399
|
return atoms
|
|
1351
1400
|
|
|
1401
|
+
cpdef Molecule molecule(self, bint transform=False):
|
|
1402
|
+
"""Get the molecule matching the template.
|
|
1403
|
+
|
|
1404
|
+
Arguments:
|
|
1405
|
+
transform (`bool`): Whether or not to transform coordinates
|
|
1406
|
+
of the molecule atoms into template frame.
|
|
1407
|
+
|
|
1408
|
+
Returns:
|
|
1409
|
+
`~pyjess.Molecule`: The matching molecule, optionally
|
|
1410
|
+
rotated to match the template coordinate.
|
|
1411
|
+
|
|
1412
|
+
.. versionadded:: 0.5.0
|
|
1413
|
+
|
|
1414
|
+
"""
|
|
1415
|
+
assert self.template._tpl is not NULL
|
|
1416
|
+
assert self._sup is not NULL
|
|
1417
|
+
|
|
1418
|
+
cdef _Atom* atom
|
|
1419
|
+
cdef Molecule mol
|
|
1420
|
+
cdef size_t i
|
|
1421
|
+
cdef size_t j
|
|
1422
|
+
cdef size_t k
|
|
1423
|
+
cdef const double* M = jess.super.Superposition_rotation(self._sup)
|
|
1424
|
+
cdef const double* c = jess.super.Superposition_centroid(self._sup, 0)
|
|
1425
|
+
cdef const double* v = jess.super.Superposition_centroid(self._sup, 1)
|
|
1426
|
+
|
|
1427
|
+
if not transform:
|
|
1428
|
+
return self._molecule
|
|
1429
|
+
|
|
1430
|
+
mol = self._molecule.copy()
|
|
1431
|
+
for k in range(mol._mol.count):
|
|
1432
|
+
atom = mol._mol.atom[k]
|
|
1433
|
+
for i in range(3):
|
|
1434
|
+
atom.x[i] = v[i]
|
|
1435
|
+
for j in range(3):
|
|
1436
|
+
atom.x[i] += M[3*i + j] * (self._molecule._mol.atom[k].x[j] - c[j])
|
|
1437
|
+
|
|
1438
|
+
return mol
|
|
1439
|
+
|
|
1352
1440
|
|
|
1353
1441
|
cdef class Jess:
|
|
1354
1442
|
"""A handle to run Jess over a list of templates.
|
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
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pyjess
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.1
|
|
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>
|
|
7
7
|
License: MIT License
|
|
8
8
|
|
|
9
|
-
Copyright (c) 2024 Martin Larralde <martin.larralde@embl.de>
|
|
9
|
+
Copyright (c) 2024-2025 Martin Larralde <martin.larralde@embl.de>
|
|
10
10
|
|
|
11
11
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
12
12
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -51,6 +51,7 @@ Project-URL: Changelog, https://github.com/althonos/pyjess/blob/master/CHANGELOG
|
|
|
51
51
|
Project-URL: Coverage, https://codecov.io/gh/althonos/pyjess/
|
|
52
52
|
Project-URL: Builds, https://github.com/althonos/pyjess/actions
|
|
53
53
|
Project-URL: Pypi, https://pypi.org/project/pyjess
|
|
54
|
+
Project-URL: Piwheels, https://piwheels.org/project/pyjess/
|
|
54
55
|
Requires-Python: >=3.7
|
|
55
56
|
Provides-Extra: test
|
|
56
57
|
Requires-Dist: importlib-resources; python_version < "3.9" and extra == "test"
|
|
@@ -74,7 +75,7 @@ Description-Content-Type: text/markdown
|
|
|
74
75
|
[](https://github.com/althonos/pyjess/issues)
|
|
75
76
|
[](https://pyjess.readthedocs.io)
|
|
76
77
|
[](https://github.com/althonos/pyjess/blob/main/CHANGELOG.md)
|
|
77
|
-
[&style=flat-square&label=downloads&color=303f9f&cacheSeconds=86400)](https://pepy.tech/project/pyjess)
|
|
78
79
|
|
|
79
80
|
|
|
80
81
|
## 🗺️ Overview
|
|
@@ -83,8 +84,8 @@ Jess is an algorithm for constraint-based structural template matching
|
|
|
83
84
|
proposed by Jonathan Barker *et al.*[\[1\]](#ref1). It can be used to identify
|
|
84
85
|
catalytic residues from a known template inside a protein structure. Jess
|
|
85
86
|
is an evolution of TESS, a geometric hashing algorithm developed by
|
|
86
|
-
Andrew Wallace *et al.*[\[2\]](#ref2), removing some pre-computation and
|
|
87
|
-
structural requirements from the original algorithm. Jess was further
|
|
87
|
+
Andrew Wallace *et al.*[\[2\]](#ref2), removing some pre-computation and
|
|
88
|
+
structural requirements from the original algorithm. Jess was further
|
|
88
89
|
updated and maintained by [Ioannis Riziotis](https://github.com/iriziotis)
|
|
89
90
|
during his PhD in the [Thornton group](https://www.ebi.ac.uk/research/thornton/).
|
|
90
91
|
|
|
@@ -105,34 +106,44 @@ as well as the code required to compile from source with Cython:
|
|
|
105
106
|
$ pip install pyjess
|
|
106
107
|
```
|
|
107
108
|
|
|
108
|
-
|
|
109
|
+
Otherwise, PyJess is also available as a [Bioconda](https://bioconda.github.io/)
|
|
109
110
|
package:
|
|
110
111
|
```console
|
|
111
112
|
$ conda install -c bioconda pyjess
|
|
112
|
-
```
|
|
113
|
+
```
|
|
113
114
|
|
|
114
115
|
Check the [*install* page](https://pyjess.readthedocs.io/en/stable/install.html)
|
|
115
116
|
of the documentation for other ways to install PyJess on your machine.
|
|
116
117
|
|
|
118
|
+
|
|
119
|
+
## 🔖 Citation
|
|
120
|
+
|
|
121
|
+
PyJess is scientific software, and builds on top of Jess. Please cite
|
|
122
|
+
Jess if you are using it in an academic work, for instance as:
|
|
123
|
+
|
|
124
|
+
> PyJess, a Python library binding to Jess (Barker *et al.*, 2003).
|
|
125
|
+
|
|
126
|
+
|
|
117
127
|
## 💡 Example
|
|
118
128
|
|
|
119
129
|
Load templates to be used as references from different template files:
|
|
120
130
|
|
|
121
131
|
```python
|
|
122
|
-
import
|
|
132
|
+
import pathlib
|
|
123
133
|
import pyjess
|
|
124
134
|
|
|
125
135
|
templates = []
|
|
126
|
-
for path in sorted(
|
|
127
|
-
|
|
136
|
+
for path in sorted(pathlib.Path("vendor/jess/examples").glob("template_*.qry")):
|
|
137
|
+
with path.open() as file:
|
|
138
|
+
templates.append(pyjess.Template.load(file, id=path.stem))
|
|
128
139
|
```
|
|
129
140
|
|
|
130
141
|
Create a `Jess` instance and use it to query a molecule (a PDB structure)
|
|
131
142
|
against the stored templates:
|
|
132
143
|
|
|
133
144
|
```python
|
|
134
|
-
jess = Jess(templates)
|
|
135
|
-
mol = Molecule("vendor/jess/examples/test_pdbs/pdb1a0p.ent")
|
|
145
|
+
jess = pyjess.Jess(templates)
|
|
146
|
+
mol = pyjess.Molecule.load("vendor/jess/examples/test_pdbs/pdb1a0p.ent")
|
|
136
147
|
query = jess.query(mol, rmsd_threshold=2.0, distance_cutoff=3.0, max_dynamic_distance=3.0)
|
|
137
148
|
```
|
|
138
149
|
|
|
@@ -162,7 +173,7 @@ with multiprocessing.ThreadPool() as pool:
|
|
|
162
173
|
hits = pool.map(jess.query, molecules)
|
|
163
174
|
```
|
|
164
175
|
|
|
165
|
-
*⚠️ Prior to PyJess `v0.2.1`, the Jess code was running some thread-unsafe operations which have now been patched.
|
|
176
|
+
*⚠️ Prior to PyJess `v0.2.1`, the Jess code was running some thread-unsafe operations which have now been patched.
|
|
166
177
|
If running Jess in parallel, make sure to use `v0.2.1` or later to use the code patched with re-entrant functions*.
|
|
167
178
|
|
|
168
179
|
<!-- ## ⏱️ Benchmarks -->
|
|
@@ -172,7 +183,7 @@ If running Jess in parallel, make sure to use `v0.2.1` or later to use the code
|
|
|
172
183
|
|
|
173
184
|
### ⚠️ Issue Tracker
|
|
174
185
|
|
|
175
|
-
Found a bug ? Have an enhancement request ? Head over to the [GitHub issue tracker](https://github.com/althonos/
|
|
186
|
+
Found a bug ? Have an enhancement request ? Head over to the [GitHub issue tracker](https://github.com/althonos/pyjess/issues)
|
|
176
187
|
if you need to report or ask something. If you are filing in on a bug,
|
|
177
188
|
please include as much information as you can about the issue, and try to
|
|
178
189
|
recreate the same bug in a simple, easily reproducible situation.
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
pyjess/_jess.cpython-37m-aarch64-linux-gnu.so,sha256=Z7_H7UfMIJzic2nE8vFxJ6BPKj6zp9urygq0PN46Akg,415336
|
|
2
|
-
pyjess/.gitignore,sha256=uQBOufp4v50qn0aZKv6zbSo00cjfB-v9KySog7rlmIU,19
|
|
3
|
-
pyjess/__init__.py,sha256=h4XXLdS4FnyVa-MBs_k3eZMG1jWxeiOJnwfBaJA9gyQ,745
|
|
4
|
-
pyjess/_jess.pyi,sha256=QIQSeQgNG-w0QZTuvacHjnv3IlEfV-3AOll9To3ZdM4,6899
|
|
5
1
|
pyjess/CMakeLists.txt,sha256=Oa0pniEQx9jXyFCJGyrswn9ahWSSVuW1madyeP6StoI,35
|
|
6
|
-
pyjess/_jess.
|
|
2
|
+
pyjess/_jess.pyi,sha256=OjbEcgr16eFEnAFbT_zp-jqjd4XME2V_gxuKZJBXVoc,6896
|
|
3
|
+
pyjess/_jess.pyx,sha256=kbAp0zWfxliPvzJ9c5G3oeRUKFcxtedo4oav-1uQotQ,50546
|
|
7
4
|
pyjess/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
-
pyjess
|
|
5
|
+
pyjess/.gitignore,sha256=uQBOufp4v50qn0aZKv6zbSo00cjfB-v9KySog7rlmIU,19
|
|
6
|
+
pyjess/__init__.py,sha256=h4XXLdS4FnyVa-MBs_k3eZMG1jWxeiOJnwfBaJA9gyQ,745
|
|
7
|
+
pyjess/_jess.cpython-37m-aarch64-linux-gnu.so,sha256=ITZ5zwJxmKi9zzADWOnZ1PAGy_6Z9cMD6FfVcwn5Gpw,417056
|
|
8
|
+
pyjess/tests/test_template_atom.py,sha256=s9tJ_SAgvKeGwbVjaTWY-EtsUeQp3eu4NF5ja3oO_84,3405
|
|
9
|
+
pyjess/tests/test_jess.py,sha256=lTp_KzkbPF5J0nWewO4LJrKeKuXtSlzj114kPG-54zM,10642
|
|
9
10
|
pyjess/tests/test_atom.py,sha256=omNznNbRXMDt2j1plAUlfWPGCfmtkYpj2jysEX1zQuY,4631
|
|
11
|
+
pyjess/tests/test_template.py,sha256=XMLELYRB4j7xavziZ-ntq15PjhNHNfJJkctUq9BkvEI,4541
|
|
10
12
|
pyjess/tests/test_molecule.py,sha256=RHBE0yL_j71nQOwXJ6t_PzkZi4BaFPY5Q0VwKWM6elk,5311
|
|
13
|
+
pyjess/tests/utils.py,sha256=dsaphex7qomJCvSHWnVy79iYDPGiL59xqGAtRoVAeWc,196
|
|
11
14
|
pyjess/tests/__init__.py,sha256=MdHWtr6A8S4TBWlkoj4olFK2FXAGc5uJdbWtgFrDLpk,528
|
|
12
|
-
pyjess/tests/test_jess.py,sha256=mgHx6kDW5yzdvZiiybAVrd1J4k3Li3r-t4le6RFEE5o,9757
|
|
13
|
-
pyjess/tests/test_template.py,sha256=XMLELYRB4j7xavziZ-ntq15PjhNHNfJJkctUq9BkvEI,4541
|
|
14
|
-
pyjess/tests/test_template_atom.py,sha256=s9tJ_SAgvKeGwbVjaTWY-EtsUeQp3eu4NF5ja3oO_84,3405
|
|
15
|
-
pyjess/tests/data/1.3.3.tpl,sha256=mg3STlRiNESM0chuOQ8CodW3Ohnxbt1_nx4PId63iOI,988
|
|
16
15
|
pyjess/tests/data/template_02.qry,sha256=IAI6eiDA-Qji7cFYW9S8e0XYNTlHb8XtJibP3PVGuHw,607
|
|
17
|
-
pyjess/tests/data/1AMY.pdb,sha256=t2CaGLdOyPrhyeMpe1TbwZ8u7QmfxCIG1Pit8-vzvgo,319221
|
|
18
|
-
pyjess/tests/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
|
-
pyjess/tests/data/1AMY+1.3.3.txt,sha256=41R3aa6jozzSSfzboxhyK5xfX8e47aiq2U4W7aCzRm8,103584
|
|
20
16
|
pyjess/tests/data/template_01.qry,sha256=y3jTNf-WH2wL7OizKGJEPvLIlF3qHDAyR3LdKqWjy60,605
|
|
21
17
|
pyjess/tests/data/pdb1lnb.pdb,sha256=E9Jjy4qQ75O1UKIXcVyVJHE1XDNx1Rb7ENPVrehW6N8,270054
|
|
22
|
-
pyjess
|
|
23
|
-
pyjess
|
|
24
|
-
pyjess
|
|
25
|
-
pyjess
|
|
18
|
+
pyjess/tests/data/1AMY.pdb,sha256=t2CaGLdOyPrhyeMpe1TbwZ8u7QmfxCIG1Pit8-vzvgo,319221
|
|
19
|
+
pyjess/tests/data/1AMY+1.3.3.txt,sha256=41R3aa6jozzSSfzboxhyK5xfX8e47aiq2U4W7aCzRm8,103584
|
|
20
|
+
pyjess/tests/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
|
+
pyjess/tests/data/1.3.3.tpl,sha256=mg3STlRiNESM0chuOQ8CodW3Ohnxbt1_nx4PId63iOI,988
|
|
22
|
+
pyjess-0.5.1.dist-info/RECORD,,
|
|
23
|
+
pyjess-0.5.1.dist-info/WHEEL,sha256=3pwvh1oM8-y4943HioszAJjngUGY7ols47C1CujoGoM,156
|
|
24
|
+
pyjess-0.5.1.dist-info/METADATA,sha256=PhFPRpjXmBV5buGbsOCI_POYVUNYzVksJ4LSYcBkZn0,11218
|
|
25
|
+
pyjess-0.5.1.dist-info/licenses/COPYING,sha256=gLCfHtBLTrghVX7GkpmZqoozWMNN46502m_OUiYy01Y,1103
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2024 Martin Larralde <martin.larralde@embl.de>
|
|
3
|
+
Copyright (c) 2024-2025 Martin Larralde <martin.larralde@embl.de>
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
|
File without changes
|