pyjess 0.4.1__cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl → 0.5.1__cp39-cp39-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.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[str, bytes, os.PathLike[Any], TextIO]) -> Atom: ...
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[str, bytes, os.PathLike[Any], TextIO]) -> Atom: ...
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 opened in
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
- return cls.loads(file.read())
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.molecule = self.molecule
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 readonly Molecule molecule
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.molecule._mol)
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.molecule._mol)
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,30 +1,31 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: pyjess
3
- Version: 0.4.1
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
-
9
- Copyright (c) 2024 Martin Larralde <martin.larralde@embl.de>
10
-
11
- Permission is hereby granted, free of charge, to any person obtaining a copy
12
- of this software and associated documentation files (the "Software"), to deal
13
- in the Software without restriction, including without limitation the rights
14
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
- copies of the Software, and to permit persons to whom the Software is
16
- furnished to do so, subject to the following conditions:
17
-
18
- The above copyright notice and this permission notice shall be included in all
19
- copies or substantial portions of the Software.
20
-
21
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27
- SOFTWARE.
8
+
9
+ Copyright (c) 2024-2025 Martin Larralde <martin.larralde@embl.de>
10
+
11
+ Permission is hereby granted, free of charge, to any person obtaining a copy
12
+ of this software and associated documentation files (the "Software"), to deal
13
+ in the Software without restriction, including without limitation the rights
14
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
+ copies of the Software, and to permit persons to whom the Software is
16
+ furnished to do so, subject to the following conditions:
17
+
18
+ The above copyright notice and this permission notice shall be included in all
19
+ copies or substantial portions of the Software.
20
+
21
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27
+ SOFTWARE.
28
+
28
29
  Classifier: Development Status :: 4 - Beta
29
30
  Classifier: Intended Audience :: Developers
30
31
  Classifier: Intended Audience :: Science/Research
@@ -46,11 +47,12 @@ Classifier: Topic :: Scientific/Engineering :: Medical Science Apps.
46
47
  Classifier: Typing :: Typed
47
48
  Project-URL: Homepage, https://github.com/althonos/pyjess/
48
49
  Project-URL: Documentation, https://pyjess.readthedocs.io/en/stable/
49
- Project-URL: Bug tracker, https://github.com/althonos/pyjess/issues
50
+ Project-URL: Bug Tracker, https://github.com/althonos/pyjess/issues
50
51
  Project-URL: Changelog, https://github.com/althonos/pyjess/blob/master/CHANGELOG.md
51
52
  Project-URL: Coverage, https://codecov.io/gh/althonos/pyjess/
52
53
  Project-URL: Builds, https://github.com/althonos/pyjess/actions
53
- Project-URL: Pypi, https://pypi.org/project/pyjess
54
+ Project-URL: PyPI, https://pypi.org/project/pyjess
55
+ Project-URL: PiWheels, https://piwheels.org/project/pyjess/
54
56
  Requires-Python: >=3.7
55
57
  Provides-Extra: test
56
58
  Requires-Dist: importlib-resources; python_version < "3.9" and extra == "test"
@@ -74,7 +76,7 @@ Description-Content-Type: text/markdown
74
76
  [![Issues](https://img.shields.io/github/issues/althonos/pyjess.svg?style=flat-square&maxAge=600)](https://github.com/althonos/pyjess/issues)
75
77
  [![Docs](https://img.shields.io/readthedocs/pyjess/latest?style=flat-square&maxAge=600)](https://pyjess.readthedocs.io)
76
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)
77
- [![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)
78
80
 
79
81
 
80
82
  ## 🗺️ Overview
@@ -83,8 +85,8 @@ Jess is an algorithm for constraint-based structural template matching
83
85
  proposed by Jonathan Barker *et al.*[\[1\]](#ref1). It can be used to identify
84
86
  catalytic residues from a known template inside a protein structure. Jess
85
87
  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
88
+ Andrew Wallace *et al.*[\[2\]](#ref2), removing some pre-computation and
89
+ structural requirements from the original algorithm. Jess was further
88
90
  updated and maintained by [Ioannis Riziotis](https://github.com/iriziotis)
89
91
  during his PhD in the [Thornton group](https://www.ebi.ac.uk/research/thornton/).
90
92
 
@@ -105,34 +107,44 @@ as well as the code required to compile from source with Cython:
105
107
  $ pip install pyjess
106
108
  ```
107
109
 
108
- <!-- Otherwise, PyJess is also available as a [Bioconda](https://bioconda.github.io/)
110
+ Otherwise, PyJess is also available as a [Bioconda](https://bioconda.github.io/)
109
111
  package:
110
112
  ```console
111
113
  $ conda install -c bioconda pyjess
112
- ``` -->
114
+ ```
113
115
 
114
116
  Check the [*install* page](https://pyjess.readthedocs.io/en/stable/install.html)
115
117
  of the documentation for other ways to install PyJess on your machine.
116
118
 
119
+
120
+ ## 🔖 Citation
121
+
122
+ PyJess is scientific software, and builds on top of Jess. Please cite
123
+ Jess if you are using it in an academic work, for instance as:
124
+
125
+ > PyJess, a Python library binding to Jess (Barker *et al.*, 2003).
126
+
127
+
117
128
  ## 💡 Example
118
129
 
119
130
  Load templates to be used as references from different template files:
120
131
 
121
132
  ```python
122
- import glob
133
+ import pathlib
123
134
  import pyjess
124
135
 
125
136
  templates = []
126
- for path in sorted(glob.iglob("vendor/jess/examples/template_*.qry")):
127
- templates.append(Template.load(path, id=os.path.basename(path)))
137
+ for path in sorted(pathlib.Path("vendor/jess/examples").glob("template_*.qry")):
138
+ with path.open() as file:
139
+ templates.append(pyjess.Template.load(file, id=path.stem))
128
140
  ```
129
141
 
130
142
  Create a `Jess` instance and use it to query a molecule (a PDB structure)
131
143
  against the stored templates:
132
144
 
133
145
  ```python
134
- jess = Jess(templates)
135
- mol = Molecule("vendor/jess/examples/test_pdbs/pdb1a0p.ent")
146
+ jess = pyjess.Jess(templates)
147
+ mol = pyjess.Molecule.load("vendor/jess/examples/test_pdbs/pdb1a0p.ent")
136
148
  query = jess.query(mol, rmsd_threshold=2.0, distance_cutoff=3.0, max_dynamic_distance=3.0)
137
149
  ```
138
150
 
@@ -162,7 +174,7 @@ with multiprocessing.ThreadPool() as pool:
162
174
  hits = pool.map(jess.query, molecules)
163
175
  ```
164
176
 
165
- *⚠️ Prior to PyJess `v0.2.1`, the Jess code was running some thread-unsafe operations which have now been patched.
177
+ *⚠️ Prior to PyJess `v0.2.1`, the Jess code was running some thread-unsafe operations which have now been patched.
166
178
  If running Jess in parallel, make sure to use `v0.2.1` or later to use the code patched with re-entrant functions*.
167
179
 
168
180
  <!-- ## ⏱️ Benchmarks -->
@@ -172,7 +184,7 @@ If running Jess in parallel, make sure to use `v0.2.1` or later to use the code
172
184
 
173
185
  ### ⚠️ Issue Tracker
174
186
 
175
- 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)
176
188
  if you need to report or ask something. If you are filing in on a bug,
177
189
  please include as much information as you can about the issue, and try to
178
190
  recreate the same bug in a simple, easily reproducible situation.
@@ -1,25 +1,25 @@
1
- pyjess/.gitignore,sha256=uQBOufp4v50qn0aZKv6zbSo00cjfB-v9KySog7rlmIU,19
2
- pyjess/__init__.py,sha256=h4XXLdS4FnyVa-MBs_k3eZMG1jWxeiOJnwfBaJA9gyQ,745
3
- pyjess/_jess.cpython-39-aarch64-linux-gnu.so,sha256=Mq61IrMbrSCMfUa3xeKICoIPLjGkCHxzFVM9xRWm8-U,408688
4
- pyjess/_jess.pyi,sha256=QIQSeQgNG-w0QZTuvacHjnv3IlEfV-3AOll9To3ZdM4,6899
5
1
  pyjess/CMakeLists.txt,sha256=Oa0pniEQx9jXyFCJGyrswn9ahWSSVuW1madyeP6StoI,35
6
- pyjess/_jess.pyx,sha256=E7D4tvgjnGo9q-YdWGdO-r472NdJanUEs8hYbB6rBaM,47303
2
+ pyjess/_jess.pyi,sha256=OjbEcgr16eFEnAFbT_zp-jqjd4XME2V_gxuKZJBXVoc,6896
3
+ pyjess/_jess.pyx,sha256=kbAp0zWfxliPvzJ9c5G3oeRUKFcxtedo4oav-1uQotQ,50546
4
+ pyjess/_jess.cpython-39-aarch64-linux-gnu.so,sha256=6FYJ23KqSFiiznFCg2IYJS5aLbsPjVovwC4en9NtdFc,408808
7
5
  pyjess/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- pyjess/tests/utils.py,sha256=dsaphex7qomJCvSHWnVy79iYDPGiL59xqGAtRoVAeWc,196
6
+ pyjess/.gitignore,sha256=uQBOufp4v50qn0aZKv6zbSo00cjfB-v9KySog7rlmIU,19
7
+ pyjess/__init__.py,sha256=h4XXLdS4FnyVa-MBs_k3eZMG1jWxeiOJnwfBaJA9gyQ,745
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-0.4.1.dist-info/RECORD,,
23
- pyjess-0.4.1.dist-info/METADATA,sha256=iHTTiJz29i7uRreAEeB_ow4-DArxSGb5Nz2Y9N4RblQ,10785
24
- pyjess-0.4.1.dist-info/WHEEL,sha256=xVfALr-PjH4P3cUBvdv4kqYHNbGwV0Tghj5iW6pjP2M,154
25
- pyjess-0.4.1.dist-info/licenses/COPYING,sha256=W3hXwpT6UtiSFrO8yeDddZLU5tKIAX238e0N5slPQGA,1098
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=ss7GlFc9AR0tdo9xZyyrp3UiAYrcDGPUzPps17BmN40,154
24
+ pyjess-0.5.1.dist-info/METADATA,sha256=OMnKlTvBTrR8tfxUFdUJXnJPezgo10GrHWTxap3eG7A,11248
25
+ pyjess-0.5.1.dist-info/licenses/COPYING,sha256=gLCfHtBLTrghVX7GkpmZqoozWMNN46502m_OUiYy01Y,1103
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: scikit-build-core 0.10.7
2
+ Generator: scikit-build-core 0.11.5
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp39-cp39-manylinux_2_17_aarch64
5
5
  Tag: cp39-cp39-manylinux2014_aarch64
@@ -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