pyjess


Namepyjess JSON
Version 0.7.0 PyPI version JSON
download
home_pageNone
SummaryCython bindings and Python interface to JESS, a 3D template matching software.
upload_time2025-09-13 12:32:54
maintainerNone
docs_urlNone
authorNone
requires_python>=3.7
licenseMIT License Copyright (c) 2024-2025 Martin Larralde <martin.larralde@embl.de> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords bioinformatics structure template matching
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # πŸπŸ” PyJess [![Stars](https://img.shields.io/github/stars/althonos/pyjess.svg?style=social&maxAge=3600&label=Star)](https://github.com/althonos/pyjess/stargazers)

*[Cython](https://cython.org/) bindings and Python interface to [Jess](https://github.com/iriziotis/jess), a 3D template matching software.*

[![Actions](https://img.shields.io/github/actions/workflow/status/althonos/pyjess/test.yml?branch=main&logo=github&style=flat-square&maxAge=300)](https://github.com/althonos/pyjess/actions)
[![Coverage](https://img.shields.io/codecov/c/gh/althonos/pyjess?style=flat-square&maxAge=3600&logo=codecov)](https://codecov.io/gh/althonos/pyjess/)
[![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square&maxAge=2678400)](https://choosealicense.com/licenses/mit/)
[![PyPI](https://img.shields.io/pypi/v/pyjess.svg?style=flat-square&maxAge=3600&logo=PyPI)](https://pypi.org/project/pyjess)
[![Bioconda](https://img.shields.io/conda/vn/bioconda/pyjess?style=flat-square&maxAge=3600&logo=anaconda)](https://anaconda.org/bioconda/pyjess)
[![AUR](https://img.shields.io/aur/version/python-pyjess?logo=archlinux&style=flat-square&maxAge=3600)](https://aur.archlinux.org/packages/python-pyjess)
[![Wheel](https://img.shields.io/pypi/wheel/pyjess.svg?style=flat-square&maxAge=3600)](https://pypi.org/project/pyjess/#files)
[![Python Versions](https://img.shields.io/pypi/pyversions/pyjess.svg?style=flat-square&maxAge=600&logo=python)](https://pypi.org/project/pyjess/#files)
[![Python Implementations](https://img.shields.io/pypi/implementation/pyjess.svg?style=flat-square&maxAge=600&label=impl)](https://pypi.org/project/pyjess/#files)
[![Source](https://img.shields.io/badge/source-GitHub-303030.svg?maxAge=2678400&style=flat-square)](https://github.com/althonos/pyjess/)
[![Mirror](https://img.shields.io/badge/mirror-LUMC-003EAA.svg?maxAge=2678400&style=flat-square)](https://git.lumc.nl/mflarralde/pyjess/)
[![Issues](https://img.shields.io/github/issues/althonos/pyjess.svg?style=flat-square&maxAge=600)](https://github.com/althonos/pyjess/issues)
[![Docs](https://img.shields.io/readthedocs/pyjess/latest?style=flat-square&maxAge=600)](https://pyjess.readthedocs.io)
[![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)
[![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)


## πŸ—ΊοΈ Overview

Jess is an algorithm for constraint-based structural template matching
proposed by Jonathan Barker *et al.*[\[1\]](#ref1). It can be used to identify
catalytic residues from a known template inside a protein structure. Jess
is an evolution of TESS, a geometric hashing algorithm developed by
Andrew Wallace *et al.*[\[2\]](#ref2), removing some pre-computation and
structural requirements from the original algorithm. Jess was further
updated and maintained by [Ioannis Riziotis](https://github.com/iriziotis)
during his PhD in the [Thornton group](https://www.ebi.ac.uk/research/thornton/).

PyJess is a Python module that provides bindings to Jess using
[Cython](https://cython.org/). It allows creating templates, querying them
with protein structures, and retrieving the hits using a Python API without
performing any external I/O. It's also more than 10x faster than Jess thanks to
[algorithmic optimizations](https://pyjess.readthedocs.io/en/latest/guide/optimizations.html)
added to improve the original Jess code while producing consistent results.


## πŸ”§ Installing

PyJess is available for all modern Python versions (3.7+).

It can be installed directly from [PyPI](https://pypi.org/project/pyjess/),
which hosts some pre-built x86-64 wheels for Linux, MacOS, and Windows,
as well as the code required to compile from source with Cython:
```console
$ pip install pyjess
```

Otherwise, PyJess is also available as a [Bioconda](https://bioconda.github.io/)
package:
```console
$ conda install -c bioconda pyjess
```

Check the [*install* page](https://pyjess.readthedocs.io/en/stable/guide/install.html)
of the documentation for other ways to install PyJess on your machine.


## πŸ”– Citation

PyJess is scientific software, and builds on top of Jess. Please cite
Jess if you are using it in an academic work, for instance as:

> PyJess, a Python library binding to Jess (Barker *et al.*, 2003).


## πŸ’‘ Example

#### Prepare templates

Load [`Template`](https://pyjess.readthedocs.io/en/latest/api/template.html#pyjess.Template)
objects to be used as references from different template files:

```python
import pathlib
import pyjess

templates = []
for path in sorted(pathlib.Path("vendor/jess/examples").glob("template_*.qry")):
    templates.append(pyjess.Template.load(path, id=path.stem))
```

#### Prepare query structures

Load a [`Molecule`](https://pyjess.readthedocs.io/en/latest/api/molecule.html#pyjess.Molecule)
(a PDB structure) from a PDB file, create one with the Python API, or
convert it from a [`Bio.Model`](https://biopython.org/docs/1.76/api/Bio.PDB.Model.html),
[`gemmi.Model`](https://gemmi.readthedocs.io/en/latest/mol.html#model),
or [`biotite.structure.AtomArray`](https://www.biotite-python.org/latest/apidoc/biotite.structure.AtomArray.html)
object:

```python
# load from PDB file or mmCIF file
mol = pyjess.Molecule.load("vendor/jess/examples/test_pdbs/pdb1a0p.ent")

# load with BioPython
parser = Bio.PDB.PDBParser()
structure = parser.get_structure('pdb1a0p', "vendor/jess/examples/test_pdbs/pdb1a0p.ent")
mol = Molecule.from_biopython(structure, id="1a0p")

# load with Gemmi
structure = gemmi.read_pdb_string("vendor/jess/examples/test_pdbs/pdb1a0p.ent")
mol = Molecule.from_gemmi(structure[0], id="1a0p")

# load with Biotite
pdb_file = biotite.structure.io.pdb.PDBFile.read(f)
structure = pdb_file.get_structure(altloc="all", extra_fields=["atom_id", "b_factor", "occupancy", "charge"])
mol = Molecule.from_biotite(structure[0])
```

### Match templates

Create a [`Jess`](https://pyjess.readthedocs.io/en/latest/api/jess.html#pyjess.Jess)
instance and use it to query a against the stored templates:

```python
jess = pyjess.Jess(templates)
query = jess.query(mol, rmsd_threshold=2.0, distance_cutoff=3.0, max_dynamic_distance=3.0)
```

### Process hits

The hits are computed iteratively, and the different output statistics are
computed on-the-fly when requested:

```python
for hit in query:
    print(hit.molecule.id, hit.template.id, hit.rmsd, hit.log_evalue)
    for atom in hit.atoms():
        print(atom.name, atom.x, atom.y, atom.z)
```

Hits can also be rendered in PDB format like in the original Jess output,
either by writing to a file directly, or to a Python string:
```python
for hit in query:
    hit.dump(sys.stdout, format="pdb")
```

## 🧢 Thread-safety

Once a [`Jess`](https://pyjess.readthedocs.io/en/latest/api/jess.html#pyjess.Jess)
instance has been created, the templates cannot be edited anymore,
making the [`Jess.query`](https://pyjess.readthedocs.io/en/latest/api/jess.html#pyjess.Jess.query) method re-entrant and thread-safe. This allows querying
several molecules against the same templates in parallel using e.g a
[`ThreadPool`](https://docs.python.org/3/library/multiprocessing.html#multiprocessing.pool.ThreadPool):

```python
molecules = []
for path in glob.glob("vendor/jess/examples/test_pdbs/*.ent"):
    molecules.append(Molecule.load(path))

with multiprocessing.ThreadPool() as pool:
    hits = pool.map(jess.query, molecules)
```

*⚠️ Prior to PyJess `v0.2.1`, the Jess code was running some thread-unsafe operations which have now been patched.
If running Jess in parallel, make sure to use `v0.2.1` or later to use the code patched with re-entrant functions*.

## ⏱️ Benchmarks

The following table reports the runtime of PyJess to match N=132 protein
structures to the M=7607 templates of
[EnzyMM](https://github.com/RayHackett/enzymm), using J=12 threads to parallelize.

| Version     | Runtime (s) | Match Speed (N * M / s * J) | Speedup     |
| ----------- | ----------- | --------------------------- | ----------- |
| ``v0.4.2``  | 618.1       | 135.4                       | N/A         |
| ``v0.5.0``  | 586.3       | 142.7                       | x1.05       |
| ``v0.5.1``  | 365.6       | 228.9                       | x1.69       |
| ``v0.5.2``  | 327.2       | 255.7                       | x1.88       |
| ``v0.6.0``  | 54.5        | 1535.4                      | x11.34      |
| ``v0.7.0``  | 52.4        | 1597.5                      | **x11.80**  |

*Benchmarks were run on a quiet [i7-1255U](https://www.intel.com/content/www/us/en/products/sku/226259/intel-core-i71255u-processor-12m-cache-up-to-4-70-ghz/specifications.html)
CPU running @4.70GHz with 10 physical cores / 12 logical cores.*

## πŸ’­ Feedback

### ⚠️ Issue Tracker

Found a bug ? Have an enhancement request ? Head over to the [GitHub issue tracker](https://github.com/althonos/pyjess/issues)
if you need to report or ask something. If you are filing in on a bug,
please include as much information as you can about the issue, and try to
recreate the same bug in a simple, easily reproducible situation.


### πŸ—οΈ Contributing

Contributions are more than welcome! See
[`CONTRIBUTING.md`](https://github.com/althonos/pyjess/blob/main/CONTRIBUTING.md)
for more details.


## πŸ“‹ Changelog

This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html)
and provides a [changelog](https://github.com/althonos/pyjess/blob/main/CHANGELOG.md)
in the [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) format.


## βš–οΈ License

This library is provided under the [MIT License](https://choosealicense.com/licenses/mit/).
The JESS code is distributed under the [MIT License](https://choosealicense.com/licenses/mit/) as well.

*This project is in no way not affiliated, sponsored, or otherwise endorsed
by the JESS authors. It was developed
by [Martin Larralde](https://github.com/althonos/) during his PhD project
at the [Leiden University Medical Center](https://www.lumc.nl/en/) in
the [Zeller team](https://github.com/zellerlab).*


## πŸ“š References

- <a id="ref1">\[1\]</a> Barker, J. A., & Thornton, J. M. (2003). An algorithm for constraint-based structural template matching: application to 3D templates with statistical analysis. Bioinformatics (Oxford, England), 19(13), 1644–1649. [doi:10.1093/bioinformatics/btg226](https://doi.org/10.1093/bioinformatics/btg226).
- <a id="ref2">\[2\]</a> Wallace, A. C., Borkakoti, N., & Thornton, J. M. (1997). TESS: a geometric hashing algorithm for deriving 3D coordinate templates for searching structural databases. Application to enzyme active sites. Protein science : a publication of the Protein Society, 6(11), 2308–2323. [doi:10.1002/pro.5560061104](https://doi.org/10.1002/pro.5560061104).

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "pyjess",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "bioinformatics, structure, template, matching",
    "author": null,
    "author_email": "Martin Larralde <martin.larralde@embl.de>",
    "download_url": "https://files.pythonhosted.org/packages/21/36/827192d1d00462955c25d6a55d93e38c2e712b9f93004d4abc3191c976f3/pyjess-0.7.0.tar.gz",
    "platform": null,
    "description": "# \ud83d\udc0d\ud83d\udd0d PyJess [![Stars](https://img.shields.io/github/stars/althonos/pyjess.svg?style=social&maxAge=3600&label=Star)](https://github.com/althonos/pyjess/stargazers)\n\n*[Cython](https://cython.org/) bindings and Python interface to [Jess](https://github.com/iriziotis/jess), a 3D template matching software.*\n\n[![Actions](https://img.shields.io/github/actions/workflow/status/althonos/pyjess/test.yml?branch=main&logo=github&style=flat-square&maxAge=300)](https://github.com/althonos/pyjess/actions)\n[![Coverage](https://img.shields.io/codecov/c/gh/althonos/pyjess?style=flat-square&maxAge=3600&logo=codecov)](https://codecov.io/gh/althonos/pyjess/)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square&maxAge=2678400)](https://choosealicense.com/licenses/mit/)\n[![PyPI](https://img.shields.io/pypi/v/pyjess.svg?style=flat-square&maxAge=3600&logo=PyPI)](https://pypi.org/project/pyjess)\n[![Bioconda](https://img.shields.io/conda/vn/bioconda/pyjess?style=flat-square&maxAge=3600&logo=anaconda)](https://anaconda.org/bioconda/pyjess)\n[![AUR](https://img.shields.io/aur/version/python-pyjess?logo=archlinux&style=flat-square&maxAge=3600)](https://aur.archlinux.org/packages/python-pyjess)\n[![Wheel](https://img.shields.io/pypi/wheel/pyjess.svg?style=flat-square&maxAge=3600)](https://pypi.org/project/pyjess/#files)\n[![Python Versions](https://img.shields.io/pypi/pyversions/pyjess.svg?style=flat-square&maxAge=600&logo=python)](https://pypi.org/project/pyjess/#files)\n[![Python Implementations](https://img.shields.io/pypi/implementation/pyjess.svg?style=flat-square&maxAge=600&label=impl)](https://pypi.org/project/pyjess/#files)\n[![Source](https://img.shields.io/badge/source-GitHub-303030.svg?maxAge=2678400&style=flat-square)](https://github.com/althonos/pyjess/)\n[![Mirror](https://img.shields.io/badge/mirror-LUMC-003EAA.svg?maxAge=2678400&style=flat-square)](https://git.lumc.nl/mflarralde/pyjess/)\n[![Issues](https://img.shields.io/github/issues/althonos/pyjess.svg?style=flat-square&maxAge=600)](https://github.com/althonos/pyjess/issues)\n[![Docs](https://img.shields.io/readthedocs/pyjess/latest?style=flat-square&maxAge=600)](https://pyjess.readthedocs.io)\n[![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)\n[![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)\n\n\n## \ud83d\uddfa\ufe0f Overview\n\nJess is an algorithm for constraint-based structural template matching\nproposed by Jonathan Barker *et al.*[\\[1\\]](#ref1). It can be used to identify\ncatalytic residues from a known template inside a protein structure. Jess\nis an evolution of TESS, a geometric hashing algorithm developed by\nAndrew Wallace *et al.*[\\[2\\]](#ref2), removing some pre-computation and\nstructural requirements from the original algorithm. Jess was further\nupdated and maintained by [Ioannis Riziotis](https://github.com/iriziotis)\nduring his PhD in the [Thornton group](https://www.ebi.ac.uk/research/thornton/).\n\nPyJess is a Python module that provides bindings to Jess using\n[Cython](https://cython.org/). It allows creating templates, querying them\nwith protein structures, and retrieving the hits using a Python API without\nperforming any external I/O. It's also more than 10x faster than Jess thanks to\n[algorithmic optimizations](https://pyjess.readthedocs.io/en/latest/guide/optimizations.html)\nadded to improve the original Jess code while producing consistent results.\n\n\n## \ud83d\udd27 Installing\n\nPyJess is available for all modern Python versions (3.7+).\n\nIt can be installed directly from [PyPI](https://pypi.org/project/pyjess/),\nwhich hosts some pre-built x86-64 wheels for Linux, MacOS, and Windows,\nas well as the code required to compile from source with Cython:\n```console\n$ pip install pyjess\n```\n\nOtherwise, PyJess is also available as a [Bioconda](https://bioconda.github.io/)\npackage:\n```console\n$ conda install -c bioconda pyjess\n```\n\nCheck the [*install* page](https://pyjess.readthedocs.io/en/stable/guide/install.html)\nof the documentation for other ways to install PyJess on your machine.\n\n\n## \ud83d\udd16 Citation\n\nPyJess is scientific software, and builds on top of Jess. Please cite\nJess if you are using it in an academic work, for instance as:\n\n> PyJess, a Python library binding to Jess (Barker *et al.*, 2003).\n\n\n## \ud83d\udca1 Example\n\n#### Prepare templates\n\nLoad [`Template`](https://pyjess.readthedocs.io/en/latest/api/template.html#pyjess.Template)\nobjects to be used as references from different template files:\n\n```python\nimport pathlib\nimport pyjess\n\ntemplates = []\nfor path in sorted(pathlib.Path(\"vendor/jess/examples\").glob(\"template_*.qry\")):\n    templates.append(pyjess.Template.load(path, id=path.stem))\n```\n\n#### Prepare query structures\n\nLoad a [`Molecule`](https://pyjess.readthedocs.io/en/latest/api/molecule.html#pyjess.Molecule)\n(a PDB structure) from a PDB file, create one with the Python API, or\nconvert it from a [`Bio.Model`](https://biopython.org/docs/1.76/api/Bio.PDB.Model.html),\n[`gemmi.Model`](https://gemmi.readthedocs.io/en/latest/mol.html#model),\nor [`biotite.structure.AtomArray`](https://www.biotite-python.org/latest/apidoc/biotite.structure.AtomArray.html)\nobject:\n\n```python\n# load from PDB file or mmCIF file\nmol = pyjess.Molecule.load(\"vendor/jess/examples/test_pdbs/pdb1a0p.ent\")\n\n# load with BioPython\nparser = Bio.PDB.PDBParser()\nstructure = parser.get_structure('pdb1a0p', \"vendor/jess/examples/test_pdbs/pdb1a0p.ent\")\nmol = Molecule.from_biopython(structure, id=\"1a0p\")\n\n# load with Gemmi\nstructure = gemmi.read_pdb_string(\"vendor/jess/examples/test_pdbs/pdb1a0p.ent\")\nmol = Molecule.from_gemmi(structure[0], id=\"1a0p\")\n\n# load with Biotite\npdb_file = biotite.structure.io.pdb.PDBFile.read(f)\nstructure = pdb_file.get_structure(altloc=\"all\", extra_fields=[\"atom_id\", \"b_factor\", \"occupancy\", \"charge\"])\nmol = Molecule.from_biotite(structure[0])\n```\n\n### Match templates\n\nCreate a [`Jess`](https://pyjess.readthedocs.io/en/latest/api/jess.html#pyjess.Jess)\ninstance and use it to query a against the stored templates:\n\n```python\njess = pyjess.Jess(templates)\nquery = jess.query(mol, rmsd_threshold=2.0, distance_cutoff=3.0, max_dynamic_distance=3.0)\n```\n\n### Process hits\n\nThe hits are computed iteratively, and the different output statistics are\ncomputed on-the-fly when requested:\n\n```python\nfor hit in query:\n    print(hit.molecule.id, hit.template.id, hit.rmsd, hit.log_evalue)\n    for atom in hit.atoms():\n        print(atom.name, atom.x, atom.y, atom.z)\n```\n\nHits can also be rendered in PDB format like in the original Jess output,\neither by writing to a file directly, or to a Python string:\n```python\nfor hit in query:\n    hit.dump(sys.stdout, format=\"pdb\")\n```\n\n## \ud83e\uddf6 Thread-safety\n\nOnce a [`Jess`](https://pyjess.readthedocs.io/en/latest/api/jess.html#pyjess.Jess)\ninstance has been created, the templates cannot be edited anymore,\nmaking the [`Jess.query`](https://pyjess.readthedocs.io/en/latest/api/jess.html#pyjess.Jess.query) method re-entrant and thread-safe. This allows querying\nseveral molecules against the same templates in parallel using e.g a\n[`ThreadPool`](https://docs.python.org/3/library/multiprocessing.html#multiprocessing.pool.ThreadPool):\n\n```python\nmolecules = []\nfor path in glob.glob(\"vendor/jess/examples/test_pdbs/*.ent\"):\n    molecules.append(Molecule.load(path))\n\nwith multiprocessing.ThreadPool() as pool:\n    hits = pool.map(jess.query, molecules)\n```\n\n*\u26a0\ufe0f Prior to PyJess `v0.2.1`, the Jess code was running some thread-unsafe operations which have now been patched.\nIf running Jess in parallel, make sure to use `v0.2.1` or later to use the code patched with re-entrant functions*.\n\n## \u23f1\ufe0f Benchmarks\n\nThe following table reports the runtime of PyJess to match N=132 protein\nstructures to the M=7607 templates of\n[EnzyMM](https://github.com/RayHackett/enzymm), using J=12 threads to parallelize.\n\n| Version     | Runtime (s) | Match Speed (N * M / s * J) | Speedup     |\n| ----------- | ----------- | --------------------------- | ----------- |\n| ``v0.4.2``  | 618.1       | 135.4                       | N/A         |\n| ``v0.5.0``  | 586.3       | 142.7                       | x1.05       |\n| ``v0.5.1``  | 365.6       | 228.9                       | x1.69       |\n| ``v0.5.2``  | 327.2       | 255.7                       | x1.88       |\n| ``v0.6.0``  | 54.5        | 1535.4                      | x11.34      |\n| ``v0.7.0``  | 52.4        | 1597.5                      | **x11.80**  |\n\n*Benchmarks were run on a quiet [i7-1255U](https://www.intel.com/content/www/us/en/products/sku/226259/intel-core-i71255u-processor-12m-cache-up-to-4-70-ghz/specifications.html)\nCPU running @4.70GHz with 10 physical cores / 12 logical cores.*\n\n## \ud83d\udcad Feedback\n\n### \u26a0\ufe0f Issue Tracker\n\nFound a bug ? Have an enhancement request ? Head over to the [GitHub issue tracker](https://github.com/althonos/pyjess/issues)\nif you need to report or ask something. If you are filing in on a bug,\nplease include as much information as you can about the issue, and try to\nrecreate the same bug in a simple, easily reproducible situation.\n\n\n### \ud83c\udfd7\ufe0f Contributing\n\nContributions are more than welcome! See\n[`CONTRIBUTING.md`](https://github.com/althonos/pyjess/blob/main/CONTRIBUTING.md)\nfor more details.\n\n\n## \ud83d\udccb Changelog\n\nThis project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html)\nand provides a [changelog](https://github.com/althonos/pyjess/blob/main/CHANGELOG.md)\nin the [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) format.\n\n\n## \u2696\ufe0f License\n\nThis library is provided under the [MIT License](https://choosealicense.com/licenses/mit/).\nThe JESS code is distributed under the [MIT License](https://choosealicense.com/licenses/mit/) as well.\n\n*This project is in no way not affiliated, sponsored, or otherwise endorsed\nby the JESS authors. It was developed\nby [Martin Larralde](https://github.com/althonos/) during his PhD project\nat the [Leiden University Medical Center](https://www.lumc.nl/en/) in\nthe [Zeller team](https://github.com/zellerlab).*\n\n\n## \ud83d\udcda References\n\n- <a id=\"ref1\">\\[1\\]</a> Barker, J. A., & Thornton, J. M. (2003). An algorithm for constraint-based structural template matching: application to 3D templates with statistical analysis. Bioinformatics (Oxford, England), 19(13), 1644\u20131649. [doi:10.1093/bioinformatics/btg226](https://doi.org/10.1093/bioinformatics/btg226).\n- <a id=\"ref2\">\\[2\\]</a> Wallace, A. C., Borkakoti, N., & Thornton, J. M. (1997). TESS: a geometric hashing algorithm for deriving 3D coordinate templates for searching structural databases. Application to enzyme active sites. Protein science : a publication of the Protein Society, 6(11), 2308\u20132323. [doi:10.1002/pro.5560061104](https://doi.org/10.1002/pro.5560061104).\n",
    "bugtrack_url": null,
    "license": "MIT License\n        \n        Copyright (c) 2024-2025 Martin Larralde <martin.larralde@embl.de>\n        \n        Permission is hereby granted, free of charge, to any person obtaining a copy\n        of this software and associated documentation files (the \"Software\"), to deal\n        in the Software without restriction, including without limitation the rights\n        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n        copies of the Software, and to permit persons to whom the Software is\n        furnished to do so, subject to the following conditions:\n        \n        The above copyright notice and this permission notice shall be included in all\n        copies or substantial portions of the Software.\n        \n        THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n        SOFTWARE.",
    "summary": "Cython bindings and Python interface to JESS, a 3D template matching software.",
    "version": "0.7.0",
    "project_urls": {
        "Bug tracker": "https://github.com/althonos/pyjess/issues",
        "Builds": "https://github.com/althonos/pyjess/actions",
        "Changelog": "https://github.com/althonos/pyjess/blob/master/CHANGELOG.md",
        "Coverage": "https://codecov.io/gh/althonos/pyjess/",
        "Documentation": "https://pyjess.readthedocs.io/en/stable/",
        "Homepage": "https://github.com/althonos/pyjess/",
        "Piwheels": "https://piwheels.org/project/pyjess/",
        "Pypi": "https://pypi.org/project/pyjess"
    },
    "split_keywords": [
        "bioinformatics",
        " structure",
        " template",
        " matching"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "cb3b7e07cb249c23d7f423a3f3bb6aad30f6fc10b7b1e6f37521fa87caba841d",
                "md5": "b627c24d2c7fcaf69f661d3301bedbce",
                "sha256": "6f23f1d0b21b578cec3f28af1445daa8aeb2996c91effa71a8cb95649b94fa4f"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-cp37-cp37m-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b627c24d2c7fcaf69f661d3301bedbce",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 496332,
            "upload_time": "2025-09-13T12:32:09",
            "upload_time_iso_8601": "2025-09-13T12:32:09.335208Z",
            "url": "https://files.pythonhosted.org/packages/cb/3b/7e07cb249c23d7f423a3f3bb6aad30f6fc10b7b1e6f37521fa87caba841d/pyjess-0.7.0-cp37-cp37m-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4e5ef24d5a5ecc8230789e2092f91178b9f1e869779fa71f3e860205d7bcf6a8",
                "md5": "6fa2c3d88c04694f819d1c7221d99a98",
                "sha256": "6fad251f99b75696162443ea5ad22547e6ab7777276b7871c40ffa82432517bf"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "6fa2c3d88c04694f819d1c7221d99a98",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 537806,
            "upload_time": "2025-09-13T12:32:11",
            "upload_time_iso_8601": "2025-09-13T12:32:11.428551Z",
            "url": "https://files.pythonhosted.org/packages/4e/5e/f24d5a5ecc8230789e2092f91178b9f1e869779fa71f3e860205d7bcf6a8/pyjess-0.7.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6dfee4daf4321c15b32ef535cee543cb82e24deb13c53d8f9d68369cdb19ab61",
                "md5": "bb69b8f3f69ec6ae20b7de8e17d9fb98",
                "sha256": "9b54a24026004eea1ed500be7098b24d71716c1fae7776941cc10ff2f6c0e08f"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "bb69b8f3f69ec6ae20b7de8e17d9fb98",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 554273,
            "upload_time": "2025-09-13T12:32:14",
            "upload_time_iso_8601": "2025-09-13T12:32:14.218006Z",
            "url": "https://files.pythonhosted.org/packages/6d/fe/e4daf4321c15b32ef535cee543cb82e24deb13c53d8f9d68369cdb19ab61/pyjess-0.7.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ca26126a52730ea2b843dd7fa6c5864c998d1d0695e0c524b8baa760475d146c",
                "md5": "ab23a7a63876326d4822c40b61af89ef",
                "sha256": "afa1c57b7b72a0a115447ee11d9800f5c146c18e24c3f095e417c8f7fa2dda5f"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-cp37-cp37m-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "ab23a7a63876326d4822c40b61af89ef",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 491715,
            "upload_time": "2025-09-13T12:32:15",
            "upload_time_iso_8601": "2025-09-13T12:32:15.857335Z",
            "url": "https://files.pythonhosted.org/packages/ca/26/126a52730ea2b843dd7fa6c5864c998d1d0695e0c524b8baa760475d146c/pyjess-0.7.0-cp37-cp37m-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "249776ca04c60ab2457d907328842906b62c135370c813dd512d692594de8c60",
                "md5": "b5372ea7b70546c080e4d6ff1bdff9c7",
                "sha256": "82c922e00e885b6f955d1103e007028ba5ae3b987a3d211b3ef210450e778735"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-cp38-abi3-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b5372ea7b70546c080e4d6ff1bdff9c7",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 454888,
            "upload_time": "2025-09-13T12:32:17",
            "upload_time_iso_8601": "2025-09-13T12:32:17.460206Z",
            "url": "https://files.pythonhosted.org/packages/24/97/76ca04c60ab2457d907328842906b62c135370c813dd512d692594de8c60/pyjess-0.7.0-cp38-abi3-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fb6f33c0bb8f27b16fe3c2b1879574bf08f732f33d5175393b7a17e627a19797",
                "md5": "0e9e63e1e281a0e2e39549c03831f99e",
                "sha256": "42706791562b9b6b3e6314da91567887365b98e6a839532b9bd38000b2900b15"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-cp38-abi3-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "0e9e63e1e281a0e2e39549c03831f99e",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 445923,
            "upload_time": "2025-09-13T12:32:18",
            "upload_time_iso_8601": "2025-09-13T12:32:18.762304Z",
            "url": "https://files.pythonhosted.org/packages/fb/6f/33c0bb8f27b16fe3c2b1879574bf08f732f33d5175393b7a17e627a19797/pyjess-0.7.0-cp38-abi3-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a7251d22f89f572ec71cd38f3d75fdffd3aeac1dc474939aecdea19a7abd13c4",
                "md5": "0cb9c65817c05d8483d9d0277c4cda8a",
                "sha256": "ca8f60158144252651c56077151ad99e972fd22c45ce440e188511642d9295c9"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "0cb9c65817c05d8483d9d0277c4cda8a",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 478430,
            "upload_time": "2025-09-13T12:32:20",
            "upload_time_iso_8601": "2025-09-13T12:32:20.029553Z",
            "url": "https://files.pythonhosted.org/packages/a7/25/1d22f89f572ec71cd38f3d75fdffd3aeac1dc474939aecdea19a7abd13c4/pyjess-0.7.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "129e55eb32663a1624748a9e999680e08800c27808614a251d5727819b71cace",
                "md5": "0694ccd86fcbd49cf8f086453b6fe6fa",
                "sha256": "92e74cda18dc3b41da778f93033e051c328c4c9483d3fe6c36da5f667634d61b"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0694ccd86fcbd49cf8f086453b6fe6fa",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 491248,
            "upload_time": "2025-09-13T12:32:21",
            "upload_time_iso_8601": "2025-09-13T12:32:21.677616Z",
            "url": "https://files.pythonhosted.org/packages/12/9e/55eb32663a1624748a9e999680e08800c27808614a251d5727819b71cace/pyjess-0.7.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "11b142233125ad30ed8a12e8ac2b3bbc1e4fb0c3ef0ebea0d9c25380a6c89aba",
                "md5": "a9560ddf47b7c6b64276823757d9e45a",
                "sha256": "1c8070227435deb223b6850739e4b3c2d2ba90a42f46164b5eb1a4ae19a73fa9"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-cp38-abi3-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "a9560ddf47b7c6b64276823757d9e45a",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 457490,
            "upload_time": "2025-09-13T12:32:23",
            "upload_time_iso_8601": "2025-09-13T12:32:23.181138Z",
            "url": "https://files.pythonhosted.org/packages/11/b1/42233125ad30ed8a12e8ac2b3bbc1e4fb0c3ef0ebea0d9c25380a6c89aba/pyjess-0.7.0-cp38-abi3-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c907ea3e7770b1d42203a0130db3bcd5e41e6fb032f4cdd51773cfd0d8fd5192",
                "md5": "db9327ee4274211e681c19ea2aff57cb",
                "sha256": "d693b3374822359adbb54fb77995231f0f139ea54861685a6041f2ce7252cd16"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl",
            "has_sig": false,
            "md5_digest": "db9327ee4274211e681c19ea2aff57cb",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.7",
            "size": 456362,
            "upload_time": "2025-09-13T12:32:24",
            "upload_time_iso_8601": "2025-09-13T12:32:24.809363Z",
            "url": "https://files.pythonhosted.org/packages/c9/07/ea3e7770b1d42203a0130db3bcd5e41e6fb032f4cdd51773cfd0d8fd5192/pyjess-0.7.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d3c992ca2ae12ba88d624efa85c071d368450e5d512a77ad366be553ed4c0da2",
                "md5": "23888ceeaa170f49db8760aca0b6740f",
                "sha256": "2345ef776a0ce3b57bb7a9b6a3ee7e8e288abebde2f5b6d8c17fbb870ec292a9"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "23888ceeaa170f49db8760aca0b6740f",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.7",
            "size": 447494,
            "upload_time": "2025-09-13T12:32:26",
            "upload_time_iso_8601": "2025-09-13T12:32:26.560133Z",
            "url": "https://files.pythonhosted.org/packages/d3/c9/92ca2ae12ba88d624efa85c071d368450e5d512a77ad366be553ed4c0da2/pyjess-0.7.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a4d223f8b971f90c1146037a0b2fe6d03d28a29381ebbdb73f072e6d39ffa66a",
                "md5": "cf06e6eefe843de241f3de42aaa06300",
                "sha256": "445d98215f2fbd823e7e7def7f72f2a9eb821a1c770d17d07e81cd68ff8b3ec0"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "cf06e6eefe843de241f3de42aaa06300",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.7",
            "size": 472720,
            "upload_time": "2025-09-13T12:32:28",
            "upload_time_iso_8601": "2025-09-13T12:32:28.282858Z",
            "url": "https://files.pythonhosted.org/packages/a4/d2/23f8b971f90c1146037a0b2fe6d03d28a29381ebbdb73f072e6d39ffa66a/pyjess-0.7.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2450999200a395ab4f0b249aaf46bc665a5d0e332f8baaee268754876c5a63f1",
                "md5": "ac28939e5c8974681d9fa61a29dff162",
                "sha256": "7f40c1e93bd1a7b3a3d3fd0491784f8869b34baf3e47999b9f1a17816bb47a50"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ac28939e5c8974681d9fa61a29dff162",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.7",
            "size": 486296,
            "upload_time": "2025-09-13T12:32:29",
            "upload_time_iso_8601": "2025-09-13T12:32:29.603616Z",
            "url": "https://files.pythonhosted.org/packages/24/50/999200a395ab4f0b249aaf46bc665a5d0e332f8baaee268754876c5a63f1/pyjess-0.7.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "679f4180bb9dd8900fccfb8451c8da2192b874da3b1e48a4cf9469a2d37c21c9",
                "md5": "cd8b4591ba7fdaa21a44ab54239cae8a",
                "sha256": "8cdd6e54ad038ec38abbaca20627f59a2cab8039fac9de0f0f6f88e6c09f9c73"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-pp310-pypy310_pp73-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "cd8b4591ba7fdaa21a44ab54239cae8a",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.7",
            "size": 452684,
            "upload_time": "2025-09-13T12:32:31",
            "upload_time_iso_8601": "2025-09-13T12:32:31.031492Z",
            "url": "https://files.pythonhosted.org/packages/67/9f/4180bb9dd8900fccfb8451c8da2192b874da3b1e48a4cf9469a2d37c21c9/pyjess-0.7.0-pp310-pypy310_pp73-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fa5f8c6a006ade2ee4dd42981f45c1d5f37455af6986d91763982f6fb9cc7486",
                "md5": "74375363dac0a56f5e51e6140a6adb59",
                "sha256": "23f25d9ade2cd587c14a8fdb9505a07f9069042e36e36f154ead80a2eb3af769"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-pp37-pypy37_pp73-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "74375363dac0a56f5e51e6140a6adb59",
            "packagetype": "bdist_wheel",
            "python_version": "pp37",
            "requires_python": ">=3.7",
            "size": 458732,
            "upload_time": "2025-09-13T12:32:32",
            "upload_time_iso_8601": "2025-09-13T12:32:32.666329Z",
            "url": "https://files.pythonhosted.org/packages/fa/5f/8c6a006ade2ee4dd42981f45c1d5f37455af6986d91763982f6fb9cc7486/pyjess-0.7.0-pp37-pypy37_pp73-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "48c730f0c88c24752de5fa4849a585fe93dc343d22b663590e1d91aaff1757fa",
                "md5": "1756d4a24a2a8319ff116e3b2e4f5a8f",
                "sha256": "8433c4066e911fb1fecea545901c4e0ec94416e47aad491da7201cab72de6af6"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "1756d4a24a2a8319ff116e3b2e4f5a8f",
            "packagetype": "bdist_wheel",
            "python_version": "pp37",
            "requires_python": ">=3.7",
            "size": 483210,
            "upload_time": "2025-09-13T12:32:34",
            "upload_time_iso_8601": "2025-09-13T12:32:34.246068Z",
            "url": "https://files.pythonhosted.org/packages/48/c7/30f0c88c24752de5fa4849a585fe93dc343d22b663590e1d91aaff1757fa/pyjess-0.7.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "df053c4c07863ab46013d92691d38bd6f9c3241b7efc31bd3d65616be48377c1",
                "md5": "35efd150075ddc40d91a54d3c0c5c16c",
                "sha256": "a37a627fc88bc63aa88f85307a2b06f24be92dd67089ce1e6be9dea8443d1734"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "35efd150075ddc40d91a54d3c0c5c16c",
            "packagetype": "bdist_wheel",
            "python_version": "pp37",
            "requires_python": ">=3.7",
            "size": 494752,
            "upload_time": "2025-09-13T12:32:35",
            "upload_time_iso_8601": "2025-09-13T12:32:35.564469Z",
            "url": "https://files.pythonhosted.org/packages/df/05/3c4c07863ab46013d92691d38bd6f9c3241b7efc31bd3d65616be48377c1/pyjess-0.7.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7f31049e2620bf14021ac3b66f069705244c71cff043b041bf2ed77d9a37e391",
                "md5": "66d8f59957e768572dc4b6cda28078d0",
                "sha256": "0cadde282a8e595f244e7aaeb74c5c787f48364fbdd0d89ff709aa7ab2f452fd"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-pp37-pypy37_pp73-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "66d8f59957e768572dc4b6cda28078d0",
            "packagetype": "bdist_wheel",
            "python_version": "pp37",
            "requires_python": ">=3.7",
            "size": 460332,
            "upload_time": "2025-09-13T12:32:37",
            "upload_time_iso_8601": "2025-09-13T12:32:37.241903Z",
            "url": "https://files.pythonhosted.org/packages/7f/31/049e2620bf14021ac3b66f069705244c71cff043b041bf2ed77d9a37e391/pyjess-0.7.0-pp37-pypy37_pp73-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6e49fad8a1364c25984d708a80979afd9a327da0384b6dd082708b8d76564924",
                "md5": "1d2b784f0a89ace7c237db5165032e33",
                "sha256": "269998cf86bda79b7009d6e25c2a3d52471021e4e3cccb57b7842298c5f6dcb3"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1d2b784f0a89ace7c237db5165032e33",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.7",
            "size": 455158,
            "upload_time": "2025-09-13T12:32:38",
            "upload_time_iso_8601": "2025-09-13T12:32:38.532810Z",
            "url": "https://files.pythonhosted.org/packages/6e/49/fad8a1364c25984d708a80979afd9a327da0384b6dd082708b8d76564924/pyjess-0.7.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "27ed9931d6ea27d6ba53bf798f6eda7b65a15a8ee9086742c74311f1f2fd193f",
                "md5": "a2884710e1f6c6ce82d35565be03895c",
                "sha256": "0538efb597dcb5b0211711f8ced64985fbd5cb09e5717e7595544b7580e5ad6a"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "a2884710e1f6c6ce82d35565be03895c",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.7",
            "size": 446599,
            "upload_time": "2025-09-13T12:32:40",
            "upload_time_iso_8601": "2025-09-13T12:32:40.349637Z",
            "url": "https://files.pythonhosted.org/packages/27/ed/9931d6ea27d6ba53bf798f6eda7b65a15a8ee9086742c74311f1f2fd193f/pyjess-0.7.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8ce5c6dffbced2fe199be801f00fec6986c20301e644fb1b7c8709bf24f497b2",
                "md5": "340bc39eb4cdbb035c6b360dbab79ab8",
                "sha256": "3485820bebf39ac618e09f55b2233d01afcaa9b2ea3d46619cff7ec6dad9dd90"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "340bc39eb4cdbb035c6b360dbab79ab8",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.7",
            "size": 474895,
            "upload_time": "2025-09-13T12:32:42",
            "upload_time_iso_8601": "2025-09-13T12:32:42.036637Z",
            "url": "https://files.pythonhosted.org/packages/8c/e5/c6dffbced2fe199be801f00fec6986c20301e644fb1b7c8709bf24f497b2/pyjess-0.7.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "16b2dd456528506581da0b5807b595d4f7ac580db0da32b6cfe6c077caf343bc",
                "md5": "76430bc1587d9023efc7afc3d0869358",
                "sha256": "340b898d4eefbdc95522bab620b20bd473f87fa5afe11734817a9cddf1db0567"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "76430bc1587d9023efc7afc3d0869358",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.7",
            "size": 487006,
            "upload_time": "2025-09-13T12:32:43",
            "upload_time_iso_8601": "2025-09-13T12:32:43.316878Z",
            "url": "https://files.pythonhosted.org/packages/16/b2/dd456528506581da0b5807b595d4f7ac580db0da32b6cfe6c077caf343bc/pyjess-0.7.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3da2b50362df1f58bf74428ded4835c4df1a1fca94c4a396ef767097be335d7e",
                "md5": "2ab27eb91bf3b6096efc9b9eeee64e08",
                "sha256": "e6f38f0bd0a73d1d4a7e5b93e45a05c21c3209bbbc335b292d51f74effd15c30"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-pp38-pypy38_pp73-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "2ab27eb91bf3b6096efc9b9eeee64e08",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.7",
            "size": 450704,
            "upload_time": "2025-09-13T12:32:44",
            "upload_time_iso_8601": "2025-09-13T12:32:44.518251Z",
            "url": "https://files.pythonhosted.org/packages/3d/a2/b50362df1f58bf74428ded4835c4df1a1fca94c4a396ef767097be335d7e/pyjess-0.7.0-pp38-pypy38_pp73-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "40bbca40b84ae61f089c217c62ce59bd47815cf8c54d41216ae22ca1a091dc6e",
                "md5": "784efa747d71cad7fdbe9bb0eafab2cf",
                "sha256": "f0e725a9a1b4bb3b9365cac51c5eac8e5e994ebbf628a9a392bc3bff5a4b1eb4"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl",
            "has_sig": false,
            "md5_digest": "784efa747d71cad7fdbe9bb0eafab2cf",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.7",
            "size": 455788,
            "upload_time": "2025-09-13T12:32:46",
            "upload_time_iso_8601": "2025-09-13T12:32:46.161022Z",
            "url": "https://files.pythonhosted.org/packages/40/bb/ca40b84ae61f089c217c62ce59bd47815cf8c54d41216ae22ca1a091dc6e/pyjess-0.7.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "df59ea98ad48fb2cf82910d6cc1fc948f7d8698d656b4ab45feb1e91a13005f5",
                "md5": "c184669c389c9cdcf1dd40a2772e2e93",
                "sha256": "ac1182133b33aeaa3ea0fa59b958ea0502bd8d86dd608d0ba489ba34c423dddf"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "c184669c389c9cdcf1dd40a2772e2e93",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.7",
            "size": 446056,
            "upload_time": "2025-09-13T12:32:47",
            "upload_time_iso_8601": "2025-09-13T12:32:47.822258Z",
            "url": "https://files.pythonhosted.org/packages/df/59/ea98ad48fb2cf82910d6cc1fc948f7d8698d656b4ab45feb1e91a13005f5/pyjess-0.7.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "13cdbbc48a4f257d1fd1b3245d7e6b6884a1b0b85ec795cbce15ddad4ba6dfc0",
                "md5": "2943a62a011783ac9009b7047be4953c",
                "sha256": "5ead61a5d7a3d3fa4d1b9516da1d57351f39d71f437c5f9f593d6ee2b352899d"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "2943a62a011783ac9009b7047be4953c",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.7",
            "size": 471843,
            "upload_time": "2025-09-13T12:32:49",
            "upload_time_iso_8601": "2025-09-13T12:32:49.425488Z",
            "url": "https://files.pythonhosted.org/packages/13/cd/bbc48a4f257d1fd1b3245d7e6b6884a1b0b85ec795cbce15ddad4ba6dfc0/pyjess-0.7.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7ea14dff4450686c3a4d0da9c86d4c2c410bbedee7c4c88ad71cb3e6d1428654",
                "md5": "88ebba3490a653c24696f8ee1db52a2b",
                "sha256": "a9d9358e7ad9d8d4a6c61afbae547017680bd9810f5e485a41ec02ea5df94ec9"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "88ebba3490a653c24696f8ee1db52a2b",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.7",
            "size": 485060,
            "upload_time": "2025-09-13T12:32:51",
            "upload_time_iso_8601": "2025-09-13T12:32:51.088137Z",
            "url": "https://files.pythonhosted.org/packages/7e/a1/4dff4450686c3a4d0da9c86d4c2c410bbedee7c4c88ad71cb3e6d1428654/pyjess-0.7.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "682022d40ae63017855df46c71ac6d4d4b5cf01340acdd898b8d6d9e0829ba3e",
                "md5": "8bcb35832217e91cb5d41c626be2bc63",
                "sha256": "222d2a3e1cea055aecc8889e3f84d964fb5feff6d2423a60107d4ec8a70a8759"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0-pp39-pypy39_pp73-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "8bcb35832217e91cb5d41c626be2bc63",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.7",
            "size": 451700,
            "upload_time": "2025-09-13T12:32:52",
            "upload_time_iso_8601": "2025-09-13T12:32:52.353041Z",
            "url": "https://files.pythonhosted.org/packages/68/20/22d40ae63017855df46c71ac6d4d4b5cf01340acdd898b8d6d9e0829ba3e/pyjess-0.7.0-pp39-pypy39_pp73-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2136827192d1d00462955c25d6a55d93e38c2e712b9f93004d4abc3191c976f3",
                "md5": "f4d659f20f29c2b864d2a7a77726fd62",
                "sha256": "75d8ab51e385e2a3bac700ad3636d3392904cda0a204383d031d993eef3dc790"
            },
            "downloads": -1,
            "filename": "pyjess-0.7.0.tar.gz",
            "has_sig": false,
            "md5_digest": "f4d659f20f29c2b864d2a7a77726fd62",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 390275,
            "upload_time": "2025-09-13T12:32:54",
            "upload_time_iso_8601": "2025-09-13T12:32:54.050066Z",
            "url": "https://files.pythonhosted.org/packages/21/36/827192d1d00462955c25d6a55d93e38c2e712b9f93004d4abc3191c976f3/pyjess-0.7.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-13 12:32:54",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "althonos",
    "github_project": "pyjess",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "pyjess"
}
        
Elapsed time: 1.47411s