pyjess 0.7.0a5__tar.gz → 0.7.0a6__tar.gz
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-0.7.0a5 → pyjess-0.7.0a6}/.github/workflows/test.yml +57 -99
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/CHANGELOG.md +23 -2
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/PKG-INFO +52 -12
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/README.md +51 -11
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/docs/conf.py +4 -0
- pyjess-0.7.0a6/docs/guide/cli.rst +15 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/docs/guide/index.rst +1 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/docs/guide/install.rst +8 -1
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/docs/guide/optimizations.rst +18 -1
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/docs/requirements.txt +2 -1
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/pyproject.toml +9 -3
- pyjess-0.7.0a6/src/pyjess/__main__.py +4 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/_jess.pyi +30 -3
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/_jess.pyx +476 -70
- pyjess-0.7.0a6/src/pyjess/cli.py +281 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/tests/__init__.py +2 -0
- pyjess-0.7.0a6/src/pyjess/tests/test_doctest.py +78 -0
- pyjess-0.7.0a6/src/pyjess/tests/test_hit.py +57 -0
- pyjess-0.7.0a6/src/pyjess/tests/test_molecule.py +287 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/tests/test_template.py +1 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/scripts/cmake/CythonExtension.cmake +11 -2
- pyjess-0.7.0a5/src/pyjess/tests/test_hit.py +0 -33
- pyjess-0.7.0a5/src/pyjess/tests/test_molecule.py +0 -171
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/.github/workflows/package.yml +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/.github/workflows/requirements.txt +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/.gitignore +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/.gitmodules +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/.readthedocs.yaml +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/CMakeLists.txt +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/CONTRIBUTING.md +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/COPYING +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/docs/.gitignore +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/docs/Makefile +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/docs/_static/css/main.css +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/docs/_static/js/custom-icon.js +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/docs/_static/json/switcher.json +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/docs/api/index.rst +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/docs/api/jess.rst +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/docs/api/molecule.rst +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/docs/api/template.rst +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/docs/guide/changes.md +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/docs/guide/contributing.md +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/docs/guide/copyright.rst +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/docs/index.rst +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/docs/make.bat +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/include/jess/__init__.pxd +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/include/jess/annulus.pxd +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/include/jess/atom.pxd +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/include/jess/candidate_set.pxd +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/include/jess/jess.pxd +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/include/jess/join.pxd +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/include/jess/kdtree.pxd +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/include/jess/molecule.pxd +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/include/jess/region.pxd +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/include/jess/res_index.pxd +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/include/jess/scanner.pxd +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/include/jess/super.pxd +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/include/jess/template.pxd +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/include/jess/tess_atom.pxd +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/include/jess/tess_template.pxd +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/Annulus.c.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/Annulus.h.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/Atom.c.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/Atom.h.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/Box.c.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/Box.h.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/CMakeLists.txt.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/CandidateSet.c.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/CandidateSet.h.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/Jess.c.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/Jess.h.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/Join.c.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/Join.h.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/KdTree.c.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/KdTree.h.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/Main.c.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/Molecule.c.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/Molecule.h.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/ResIndex.c.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/ResIndex.h.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/Scanner.c.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/Scanner.h.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/Super.c.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/Template.h.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/TessAtom.c.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/TessAtom.h.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/TessTemplate.c.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/TessTemplate.h.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/patches/qselect.h.patch +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/pkg/aur/PKGBUILD.in +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/CMakeLists.txt +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/jess/CMakeLists.txt +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/.gitignore +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/CMakeLists.txt +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/__init__.py +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/py.typed +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/tests/data/1.3.3.tpl +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/tests/data/1AMY+1.3.3.txt +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/tests/data/1AMY.cif +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/tests/data/1AMY.pdb +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/tests/data/1sur.qry +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/tests/data/4.1.2.tpl +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/tests/data/5ayx.EF.pdb +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/tests/data/__init__.py +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/tests/data/pdb1lnb.pdb +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/tests/data/template_01.qry +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/tests/data/template_02.qry +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/tests/test_atom.py +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/tests/test_jess.py +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/tests/test_template_atom.py +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/pyjess/tests/utils.py +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/scripts/apply_patch.py +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/scripts/cmake/pystate_patch.h +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/src/scripts/generate_patches.py +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/.gitignore +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/README.md +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/examples/template_01.qry +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/examples/template_02.qry +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/examples/test_pdbs/pdb1lnb.ent +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/filter_output.py +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/Annulus.c +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/Annulus.h +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/Atom.c +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/Atom.h +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/Jess.c +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/Jess.h +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/Join.c +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/Join.h +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/KdTree.c +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/KdTree.h +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/Main.c +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/Molecule.c +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/Molecule.h +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/Region.c +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/Region.h +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/Scanner.c +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/Scanner.h +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/Super.c +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/Super.h +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/Template.h +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/TessAtom.c +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/TessAtom.h +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/TessTemplate.c +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/TessTemplate.h +0 -0
- {pyjess-0.7.0a5 → pyjess-0.7.0a6}/vendor/jess/src/jess +0 -0
|
@@ -14,40 +14,18 @@ jobs:
|
|
|
14
14
|
strategy:
|
|
15
15
|
fail-fast: false
|
|
16
16
|
matrix:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
python-impl: CPython
|
|
30
|
-
- python-version: 3.11
|
|
31
|
-
python-release: v3.11
|
|
32
|
-
python-impl: CPython
|
|
33
|
-
- python-version: 3.12
|
|
34
|
-
python-release: v3.12
|
|
35
|
-
python-impl: CPython
|
|
36
|
-
- python-version: 3.13
|
|
37
|
-
python-release: v3.13
|
|
38
|
-
python-impl: CPython
|
|
39
|
-
- python-version: pypy-3.7
|
|
40
|
-
python-release: v3.7
|
|
41
|
-
python-impl: PyPy
|
|
42
|
-
- python-version: pypy-3.8
|
|
43
|
-
python-release: v3.8
|
|
44
|
-
python-impl: PyPy
|
|
45
|
-
- python-version: pypy-3.9
|
|
46
|
-
python-release: v3.9
|
|
47
|
-
python-impl: PyPy
|
|
48
|
-
- python-version: pypy-3.10
|
|
49
|
-
python-release: v3.10
|
|
50
|
-
python-impl: PyPy
|
|
17
|
+
python-version:
|
|
18
|
+
- "3.7"
|
|
19
|
+
- "3.8"
|
|
20
|
+
- "3.9"
|
|
21
|
+
- "3.10"
|
|
22
|
+
- "3.11"
|
|
23
|
+
- "3.12"
|
|
24
|
+
- "3.13"
|
|
25
|
+
- "pypy-3.7"
|
|
26
|
+
- "pypy-3.8"
|
|
27
|
+
- "pypy-3.9"
|
|
28
|
+
- "pypy-3.10"
|
|
51
29
|
steps:
|
|
52
30
|
- name: Checkout code
|
|
53
31
|
uses: actions/checkout@v4
|
|
@@ -63,7 +41,13 @@ jobs:
|
|
|
63
41
|
run: python -m pip install -r .github/workflows/requirements.txt
|
|
64
42
|
- name: Build C extension in debug mode
|
|
65
43
|
run: python -m pip install -e . -vv --no-build-isolation
|
|
66
|
-
- name: Test package
|
|
44
|
+
- name: Test package without optional dependencies
|
|
45
|
+
run: python -m unittest pyjess.tests -vv
|
|
46
|
+
- name: Install Python requirements
|
|
47
|
+
if: ${{ !startsWith(matrix.python-version, 'pypy') }}
|
|
48
|
+
run: python -m pip install gemmi biopython biotite
|
|
49
|
+
- name: Test package with optional dependencies
|
|
50
|
+
if: ${{ !startsWith(matrix.python-version, 'pypy') }}
|
|
67
51
|
run: python -m unittest pyjess.tests -vv
|
|
68
52
|
# - name: Upload to Codecov
|
|
69
53
|
# if: matrix.python-impl == 'CPython'
|
|
@@ -82,34 +66,18 @@ jobs:
|
|
|
82
66
|
strategy:
|
|
83
67
|
fail-fast: false
|
|
84
68
|
matrix:
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
python-impl: CPython
|
|
98
|
-
- python-version: '3.12'
|
|
99
|
-
python-release: v3.12
|
|
100
|
-
python-impl: CPython
|
|
101
|
-
- python-version: 3.13
|
|
102
|
-
python-release: v3.13
|
|
103
|
-
python-impl: CPython
|
|
104
|
-
- python-version: pypy-3.8
|
|
105
|
-
python-release: v3.8
|
|
106
|
-
python-impl: PyPy
|
|
107
|
-
- python-version: pypy-3.9
|
|
108
|
-
python-release: v3.9
|
|
109
|
-
python-impl: PyPy
|
|
110
|
-
- python-version: pypy-3.10
|
|
111
|
-
python-release: v3.10
|
|
112
|
-
python-impl: PyPy
|
|
69
|
+
python-version:
|
|
70
|
+
- "3.7"
|
|
71
|
+
- "3.8"
|
|
72
|
+
- "3.9"
|
|
73
|
+
- "3.10"
|
|
74
|
+
- "3.11"
|
|
75
|
+
- "3.12"
|
|
76
|
+
- "3.13"
|
|
77
|
+
- "pypy-3.7"
|
|
78
|
+
- "pypy-3.8"
|
|
79
|
+
- "pypy-3.9"
|
|
80
|
+
- "pypy-3.10"
|
|
113
81
|
steps:
|
|
114
82
|
- name: Checkout code
|
|
115
83
|
uses: actions/checkout@v4
|
|
@@ -129,7 +97,13 @@ jobs:
|
|
|
129
97
|
run: python -m pip install -r .github/workflows/requirements.txt
|
|
130
98
|
- name: Build C extension in debug mode
|
|
131
99
|
run: python -m pip install -e . -vv --no-build-isolation
|
|
132
|
-
- name: Test package
|
|
100
|
+
- name: Test package without optional dependencies
|
|
101
|
+
run: python -m unittest pyjess.tests -vv
|
|
102
|
+
- name: Install Python requirements
|
|
103
|
+
if: ${{ !startsWith(matrix.python-version, 'pypy') }}
|
|
104
|
+
run: python -m pip install gemmi biopython biotite
|
|
105
|
+
- name: Test package with optional dependencies
|
|
106
|
+
if: ${{ !startsWith(matrix.python-version, 'pypy') }}
|
|
133
107
|
run: python -m unittest pyjess.tests -vv
|
|
134
108
|
# - name: Upload to Codecov
|
|
135
109
|
# if: matrix.python-impl == 'CPython'
|
|
@@ -148,40 +122,18 @@ jobs:
|
|
|
148
122
|
strategy:
|
|
149
123
|
fail-fast: false
|
|
150
124
|
matrix:
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
python-impl: CPython
|
|
164
|
-
- python-version: '3.11'
|
|
165
|
-
python-release: v3.11
|
|
166
|
-
python-impl: CPython
|
|
167
|
-
- python-version: '3.12'
|
|
168
|
-
python-release: v3.12
|
|
169
|
-
python-impl: CPython
|
|
170
|
-
- python-version: 3.13
|
|
171
|
-
python-release: v3.13
|
|
172
|
-
python-impl: CPython
|
|
173
|
-
- python-version: pypy-3.7
|
|
174
|
-
python-release: v3.7
|
|
175
|
-
python-impl: PyPy
|
|
176
|
-
- python-version: pypy-3.8
|
|
177
|
-
python-release: v3.8
|
|
178
|
-
python-impl: PyPy
|
|
179
|
-
- python-version: pypy-3.9
|
|
180
|
-
python-release: v3.9
|
|
181
|
-
python-impl: PyPy
|
|
182
|
-
- python-version: pypy-3.10
|
|
183
|
-
python-release: v3.10
|
|
184
|
-
python-impl: PyPy
|
|
125
|
+
python-version:
|
|
126
|
+
- "3.7"
|
|
127
|
+
- "3.8"
|
|
128
|
+
- "3.9"
|
|
129
|
+
- "3.10"
|
|
130
|
+
- "3.11"
|
|
131
|
+
- "3.12"
|
|
132
|
+
- "3.13"
|
|
133
|
+
- "pypy-3.7"
|
|
134
|
+
- "pypy-3.8"
|
|
135
|
+
- "pypy-3.9"
|
|
136
|
+
- "pypy-3.10"
|
|
185
137
|
steps:
|
|
186
138
|
- name: Checkout code
|
|
187
139
|
uses: actions/checkout@v4
|
|
@@ -198,5 +150,11 @@ jobs:
|
|
|
198
150
|
run: python -m pip install -r .github/workflows/requirements.txt
|
|
199
151
|
- name: Build C extension
|
|
200
152
|
run: python -m pip install . -vv --no-build-isolation
|
|
201
|
-
- name: Test without
|
|
153
|
+
- name: Test package without optional dependencies
|
|
154
|
+
run: python -m unittest pyjess.tests -vv
|
|
155
|
+
- name: Install Python requirements
|
|
156
|
+
if: ${{ !startsWith(matrix.python-version, 'pypy') }}
|
|
157
|
+
run: python -m pip install gemmi biopython biotite
|
|
158
|
+
- name: Test package with optional dependencies
|
|
159
|
+
if: ${{ !startsWith(matrix.python-version, 'pypy') }}
|
|
202
160
|
run: python -m unittest pyjess.tests -vv
|
|
@@ -6,11 +6,32 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
|
-
[Unreleased]: https://github.com/althonos/pyjess/compare/v0.7.0-alpha.
|
|
9
|
+
[Unreleased]: https://github.com/althonos/pyjess/compare/v0.7.0-alpha.6...HEAD
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## [v0.7.0-alpha.6] - 2025-09-12
|
|
13
|
+
[v0.7.0-alpha.6]: https://github.com/althonos/pyjess/compare/v0.7.0-alpha.5...v0.7.0-alpha.6
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
- Command Line Interface with the same features as the Jess CLI.
|
|
17
|
+
- `Molecule.from_biopython`, `Molecule.from_biotite` and `Molecule.from_gemmi` to create a `Molecule` with objects from other libraries.
|
|
18
|
+
- `Hit.dump` and `Hit.dumps` methods to write a hit to PDB format.
|
|
19
|
+
- `Molecule.load` option to skip parsing of `HETATM` from PDB files.
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
- Issue with alignment of atom names in `TemplateAtom`.
|
|
23
|
+
- Validate data in PDB parser to ensure it is not parsing a mmCIF file.
|
|
24
|
+
- Parsing of mmCIF files with atoms missing occupancy values.
|
|
25
|
+
- Incorrect alignment of `TemplateAtom` names for names of less than 4 characters.
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
- Setup deployment of Limited API wheels for CPython 3.8 onwards.
|
|
29
|
+
- Implement format detection between PDB and mmCIF in `Molecule.load`.
|
|
30
|
+
- Implement `Template.copy` and `TemplateAtom.copy` using C-level API rather than Python copy.
|
|
10
31
|
|
|
11
32
|
|
|
12
33
|
## [v0.7.0-alpha.5] - 2025-09-03
|
|
13
|
-
[v0.7.0-alpha.5]: https://github.com/althonos/pyjess/compare/v0.7.0-alpha.
|
|
34
|
+
[v0.7.0-alpha.5]: https://github.com/althonos/pyjess/compare/v0.7.0-alpha.4...v0.7.0-alpha.5
|
|
14
35
|
|
|
15
36
|
### Fixed
|
|
16
37
|
- Issue with new residue support introduced in `v0.7.0-alpha.4`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: pyjess
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.0a6
|
|
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>
|
|
@@ -131,7 +131,9 @@ Jess if you are using it in an academic work, for instance as:
|
|
|
131
131
|
|
|
132
132
|
## 💡 Example
|
|
133
133
|
|
|
134
|
-
|
|
134
|
+
#### Prepare templates
|
|
135
|
+
|
|
136
|
+
Load [`Template`](https://pyjess.readthedocs.io/en/latest/api/template.html#pyjess.Template)
|
|
135
137
|
objects to be used as references from different template files:
|
|
136
138
|
|
|
137
139
|
```python
|
|
@@ -143,15 +145,46 @@ for path in sorted(pathlib.Path("vendor/jess/examples").glob("template_*.qry")):
|
|
|
143
145
|
templates.append(pyjess.Template.load(path, id=path.stem))
|
|
144
146
|
```
|
|
145
147
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
+
#### Prepare query structures
|
|
149
|
+
|
|
150
|
+
Load a [`Molecule`](https://pyjess.readthedocs.io/en/latest/api/molecule.html#pyjess.Molecule)
|
|
151
|
+
(a PDB structure) from a PDB file, create one with the Python API, or
|
|
152
|
+
convert it from a [`Bio.Model`](https://biopython.org/docs/1.76/api/Bio.PDB.Model.html),
|
|
153
|
+
[`gemmi.Model`](https://gemmi.readthedocs.io/en/latest/mol.html#model),
|
|
154
|
+
or [`biotite.structure.AtomArray`](https://www.biotite-python.org/latest/apidoc/biotite.structure.AtomArray.html)
|
|
155
|
+
object:
|
|
148
156
|
|
|
149
157
|
```python
|
|
150
|
-
|
|
158
|
+
# load from PDB file or mmCIF file
|
|
151
159
|
mol = pyjess.Molecule.load("vendor/jess/examples/test_pdbs/pdb1a0p.ent")
|
|
160
|
+
|
|
161
|
+
# load with BioPython
|
|
162
|
+
parser = Bio.PDB.PDBParser()
|
|
163
|
+
structure = parser.get_structure('pdb1a0p', "vendor/jess/examples/test_pdbs/pdb1a0p.ent")
|
|
164
|
+
mol = Molecule.from_biopython(structure, id="1a0p")
|
|
165
|
+
|
|
166
|
+
# load with Gemmi
|
|
167
|
+
structure = gemmi.read_pdb_string("vendor/jess/examples/test_pdbs/pdb1a0p.ent")
|
|
168
|
+
mol = Molecule.from_gemmi(structure[0], id="1a0p")
|
|
169
|
+
|
|
170
|
+
# load with Biotite
|
|
171
|
+
pdb_file = biotite.structure.io.pdb.PDBFile.read(f)
|
|
172
|
+
structure = pdb_file.get_structure(altloc="all", extra_fields=["atom_id", "b_factor", "occupancy", "charge"])
|
|
173
|
+
mol = Molecule.from_biotite(structure[0])
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Match templates
|
|
177
|
+
|
|
178
|
+
Create a [`Jess`](https://pyjess.readthedocs.io/en/latest/api/jess.html#pyjess.Jess)
|
|
179
|
+
instance and use it to query a against the stored templates:
|
|
180
|
+
|
|
181
|
+
```python
|
|
182
|
+
jess = pyjess.Jess(templates)
|
|
152
183
|
query = jess.query(mol, rmsd_threshold=2.0, distance_cutoff=3.0, max_dynamic_distance=3.0)
|
|
153
184
|
```
|
|
154
185
|
|
|
186
|
+
### Process hits
|
|
187
|
+
|
|
155
188
|
The hits are computed iteratively, and the different output statistics are
|
|
156
189
|
computed on-the-fly when requested:
|
|
157
190
|
|
|
@@ -162,13 +195,19 @@ for hit in query:
|
|
|
162
195
|
print(atom.name, atom.x, atom.y, atom.z)
|
|
163
196
|
```
|
|
164
197
|
|
|
198
|
+
Hits can also be rendered in PDB format like in the original Jess output,
|
|
199
|
+
either by writing to a file directly, or to a Python string:
|
|
200
|
+
```python
|
|
201
|
+
for hit in query:
|
|
202
|
+
hit.dump(sys.stdout, format="pdb")
|
|
203
|
+
```
|
|
165
204
|
|
|
166
205
|
## 🧶 Thread-safety
|
|
167
206
|
|
|
168
|
-
Once a [`Jess`](https://pyjess.readthedocs.io/en/latest/api/jess.html#pyjess.Jess)
|
|
207
|
+
Once a [`Jess`](https://pyjess.readthedocs.io/en/latest/api/jess.html#pyjess.Jess)
|
|
169
208
|
instance has been created, the templates cannot be edited anymore,
|
|
170
|
-
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
|
|
171
|
-
several molecules against the same templates in parallel using e.g a
|
|
209
|
+
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
|
|
210
|
+
several molecules against the same templates in parallel using e.g a
|
|
172
211
|
[`ThreadPool`](https://docs.python.org/3/library/multiprocessing.html#multiprocessing.pool.ThreadPool):
|
|
173
212
|
|
|
174
213
|
```python
|
|
@@ -185,8 +224,8 @@ If running Jess in parallel, make sure to use `v0.2.1` or later to use the code
|
|
|
185
224
|
|
|
186
225
|
## ⏱️ Benchmarks
|
|
187
226
|
|
|
188
|
-
The following table reports the runtime of PyJess to match N=132 protein
|
|
189
|
-
structures to the M=7607 templates of
|
|
227
|
+
The following table reports the runtime of PyJess to match N=132 protein
|
|
228
|
+
structures to the M=7607 templates of
|
|
190
229
|
[EnzyMM](https://github.com/RayHackett/enzymm), using J=12 threads to parallelize.
|
|
191
230
|
|
|
192
231
|
| Version | Runtime (s) | Match Speed (N * M / s * J) | Speedup |
|
|
@@ -198,7 +237,7 @@ structures to the M=7607 templates of
|
|
|
198
237
|
| ``v0.6.0`` | 54.5 | 1535.4 | x11.34 |
|
|
199
238
|
| ``v0.7.0`` | 52.4 | 1597.5 | **x11.80** |
|
|
200
239
|
|
|
201
|
-
*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)
|
|
240
|
+
*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)
|
|
202
241
|
CPU running @4.70GHz with 10 physical cores / 12 logical cores.*
|
|
203
242
|
|
|
204
243
|
## 💭 Feedback
|
|
@@ -227,7 +266,8 @@ in the [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) format.
|
|
|
227
266
|
|
|
228
267
|
## ⚖️ License
|
|
229
268
|
|
|
230
|
-
This library is provided under the [MIT License](https://choosealicense.com/licenses/mit/).
|
|
269
|
+
This library is provided under the [MIT License](https://choosealicense.com/licenses/mit/).
|
|
270
|
+
The JESS code is distributed under the [MIT License](https://choosealicense.com/licenses/mit/) as well.
|
|
231
271
|
|
|
232
272
|
*This project is in no way not affiliated, sponsored, or otherwise endorsed
|
|
233
273
|
by the JESS authors. It was developed
|
|
@@ -69,7 +69,9 @@ Jess if you are using it in an academic work, for instance as:
|
|
|
69
69
|
|
|
70
70
|
## 💡 Example
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
#### Prepare templates
|
|
73
|
+
|
|
74
|
+
Load [`Template`](https://pyjess.readthedocs.io/en/latest/api/template.html#pyjess.Template)
|
|
73
75
|
objects to be used as references from different template files:
|
|
74
76
|
|
|
75
77
|
```python
|
|
@@ -81,15 +83,46 @@ for path in sorted(pathlib.Path("vendor/jess/examples").glob("template_*.qry")):
|
|
|
81
83
|
templates.append(pyjess.Template.load(path, id=path.stem))
|
|
82
84
|
```
|
|
83
85
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
+
#### Prepare query structures
|
|
87
|
+
|
|
88
|
+
Load a [`Molecule`](https://pyjess.readthedocs.io/en/latest/api/molecule.html#pyjess.Molecule)
|
|
89
|
+
(a PDB structure) from a PDB file, create one with the Python API, or
|
|
90
|
+
convert it from a [`Bio.Model`](https://biopython.org/docs/1.76/api/Bio.PDB.Model.html),
|
|
91
|
+
[`gemmi.Model`](https://gemmi.readthedocs.io/en/latest/mol.html#model),
|
|
92
|
+
or [`biotite.structure.AtomArray`](https://www.biotite-python.org/latest/apidoc/biotite.structure.AtomArray.html)
|
|
93
|
+
object:
|
|
86
94
|
|
|
87
95
|
```python
|
|
88
|
-
|
|
96
|
+
# load from PDB file or mmCIF file
|
|
89
97
|
mol = pyjess.Molecule.load("vendor/jess/examples/test_pdbs/pdb1a0p.ent")
|
|
98
|
+
|
|
99
|
+
# load with BioPython
|
|
100
|
+
parser = Bio.PDB.PDBParser()
|
|
101
|
+
structure = parser.get_structure('pdb1a0p', "vendor/jess/examples/test_pdbs/pdb1a0p.ent")
|
|
102
|
+
mol = Molecule.from_biopython(structure, id="1a0p")
|
|
103
|
+
|
|
104
|
+
# load with Gemmi
|
|
105
|
+
structure = gemmi.read_pdb_string("vendor/jess/examples/test_pdbs/pdb1a0p.ent")
|
|
106
|
+
mol = Molecule.from_gemmi(structure[0], id="1a0p")
|
|
107
|
+
|
|
108
|
+
# load with Biotite
|
|
109
|
+
pdb_file = biotite.structure.io.pdb.PDBFile.read(f)
|
|
110
|
+
structure = pdb_file.get_structure(altloc="all", extra_fields=["atom_id", "b_factor", "occupancy", "charge"])
|
|
111
|
+
mol = Molecule.from_biotite(structure[0])
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Match templates
|
|
115
|
+
|
|
116
|
+
Create a [`Jess`](https://pyjess.readthedocs.io/en/latest/api/jess.html#pyjess.Jess)
|
|
117
|
+
instance and use it to query a against the stored templates:
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
jess = pyjess.Jess(templates)
|
|
90
121
|
query = jess.query(mol, rmsd_threshold=2.0, distance_cutoff=3.0, max_dynamic_distance=3.0)
|
|
91
122
|
```
|
|
92
123
|
|
|
124
|
+
### Process hits
|
|
125
|
+
|
|
93
126
|
The hits are computed iteratively, and the different output statistics are
|
|
94
127
|
computed on-the-fly when requested:
|
|
95
128
|
|
|
@@ -100,13 +133,19 @@ for hit in query:
|
|
|
100
133
|
print(atom.name, atom.x, atom.y, atom.z)
|
|
101
134
|
```
|
|
102
135
|
|
|
136
|
+
Hits can also be rendered in PDB format like in the original Jess output,
|
|
137
|
+
either by writing to a file directly, or to a Python string:
|
|
138
|
+
```python
|
|
139
|
+
for hit in query:
|
|
140
|
+
hit.dump(sys.stdout, format="pdb")
|
|
141
|
+
```
|
|
103
142
|
|
|
104
143
|
## 🧶 Thread-safety
|
|
105
144
|
|
|
106
|
-
Once a [`Jess`](https://pyjess.readthedocs.io/en/latest/api/jess.html#pyjess.Jess)
|
|
145
|
+
Once a [`Jess`](https://pyjess.readthedocs.io/en/latest/api/jess.html#pyjess.Jess)
|
|
107
146
|
instance has been created, the templates cannot be edited anymore,
|
|
108
|
-
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
|
|
109
|
-
several molecules against the same templates in parallel using e.g a
|
|
147
|
+
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
|
|
148
|
+
several molecules against the same templates in parallel using e.g a
|
|
110
149
|
[`ThreadPool`](https://docs.python.org/3/library/multiprocessing.html#multiprocessing.pool.ThreadPool):
|
|
111
150
|
|
|
112
151
|
```python
|
|
@@ -123,8 +162,8 @@ If running Jess in parallel, make sure to use `v0.2.1` or later to use the code
|
|
|
123
162
|
|
|
124
163
|
## ⏱️ Benchmarks
|
|
125
164
|
|
|
126
|
-
The following table reports the runtime of PyJess to match N=132 protein
|
|
127
|
-
structures to the M=7607 templates of
|
|
165
|
+
The following table reports the runtime of PyJess to match N=132 protein
|
|
166
|
+
structures to the M=7607 templates of
|
|
128
167
|
[EnzyMM](https://github.com/RayHackett/enzymm), using J=12 threads to parallelize.
|
|
129
168
|
|
|
130
169
|
| Version | Runtime (s) | Match Speed (N * M / s * J) | Speedup |
|
|
@@ -136,7 +175,7 @@ structures to the M=7607 templates of
|
|
|
136
175
|
| ``v0.6.0`` | 54.5 | 1535.4 | x11.34 |
|
|
137
176
|
| ``v0.7.0`` | 52.4 | 1597.5 | **x11.80** |
|
|
138
177
|
|
|
139
|
-
*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)
|
|
178
|
+
*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)
|
|
140
179
|
CPU running @4.70GHz with 10 physical cores / 12 logical cores.*
|
|
141
180
|
|
|
142
181
|
## 💭 Feedback
|
|
@@ -165,7 +204,8 @@ in the [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) format.
|
|
|
165
204
|
|
|
166
205
|
## ⚖️ License
|
|
167
206
|
|
|
168
|
-
This library is provided under the [MIT License](https://choosealicense.com/licenses/mit/).
|
|
207
|
+
This library is provided under the [MIT License](https://choosealicense.com/licenses/mit/).
|
|
208
|
+
The JESS code is distributed under the [MIT License](https://choosealicense.com/licenses/mit/) as well.
|
|
169
209
|
|
|
170
210
|
*This project is in no way not affiliated, sponsored, or otherwise endorsed
|
|
171
211
|
by the JESS authors. It was developed
|
|
@@ -74,6 +74,7 @@ extensions = [
|
|
|
74
74
|
"sphinx.ext.extlinks",
|
|
75
75
|
"sphinx_design",
|
|
76
76
|
"sphinxcontrib.jquery",
|
|
77
|
+
"sphinxarg.ext",
|
|
77
78
|
"nbsphinx",
|
|
78
79
|
"recommonmark",
|
|
79
80
|
"IPython.sphinxext.ipython_console_highlighting",
|
|
@@ -190,6 +191,9 @@ autosummary_generate = []
|
|
|
190
191
|
# Example configuration for intersphinx: refer to the Python standard library.
|
|
191
192
|
intersphinx_mapping = {
|
|
192
193
|
"python": ("https://docs.python.org/3/", None),
|
|
194
|
+
"biopython": ("https://biopython.org/docs/latest/", None),
|
|
195
|
+
"biotite": ("https://www.biotite-python.org/latest/", None),
|
|
196
|
+
"gemmi": ("https://gemmi.readthedocs.io/en/latest/", None),
|
|
193
197
|
}
|
|
194
198
|
|
|
195
199
|
# -- Options for recommonmark extension --------------------------------------
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
Command Line Interface
|
|
2
|
+
======================
|
|
3
|
+
|
|
4
|
+
Starting from ``v0.7.0``, PyJess features a command-line interface that is
|
|
5
|
+
automatically installed with the package. It features the same options as
|
|
6
|
+
the Jess command-line, as well as some options specific to PyJess.
|
|
7
|
+
|
|
8
|
+
.. rubric:: Usage
|
|
9
|
+
|
|
10
|
+
.. argparse::
|
|
11
|
+
:module: pyjess.cli
|
|
12
|
+
:func: argument_parser
|
|
13
|
+
:prog: pyjess
|
|
14
|
+
:nodescription:
|
|
15
|
+
:noepilog:
|
|
@@ -15,12 +15,19 @@ PyPi
|
|
|
15
15
|
PyJess is hosted on GitHub, but the easiest way to install it is to download
|
|
16
16
|
the latest release from its `PyPi repository <https://pypi.python.org/pypi/pyjess>`_.
|
|
17
17
|
It will install all dependencies then install ``pyjess`` either from a wheel if
|
|
18
|
-
one is available, or from source after compiling the
|
|
18
|
+
one is available, or from source after compiling the C source code from Jess :
|
|
19
19
|
|
|
20
20
|
.. code:: console
|
|
21
21
|
|
|
22
22
|
$ pip install --user pyjess
|
|
23
23
|
|
|
24
|
+
To install additional dependencies required for parsing mmCIF files in
|
|
25
|
+
addition to PDB files, run instead:
|
|
26
|
+
|
|
27
|
+
.. code:: console
|
|
28
|
+
|
|
29
|
+
$ pip install --user pyjess[cif]
|
|
30
|
+
|
|
24
31
|
|
|
25
32
|
Conda
|
|
26
33
|
^^^^^
|
|
@@ -4,7 +4,7 @@ Optimizations
|
|
|
4
4
|
.. currentmodule:: pyjess
|
|
5
5
|
|
|
6
6
|
While PyJess started as a Cython wrapper of Jess, it also
|
|
7
|
-
contains several optimizations to make the
|
|
7
|
+
contains several optimizations to make the software perform better
|
|
8
8
|
while maintaining consistency with the original Jess code.
|
|
9
9
|
Some of these optimizations are described below, as well as
|
|
10
10
|
the version where they were introduced.
|
|
@@ -256,3 +256,20 @@ as it creates a new `Scanner` which allocates memory for each `Template` / `Mole
|
|
|
256
256
|
pair to match. Effectively, most of these buffers can actually be reused
|
|
257
257
|
across `Templates` for a given `Molecule`, provided sufficient bookkeeping. Our
|
|
258
258
|
implementation keeps allocation to a minimum across an entire `Query`.
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
Manual case-insensitive string comparison
|
|
262
|
+
-----------------------------------------
|
|
263
|
+
|
|
264
|
+
.. versionadded:: 0.7.0
|
|
265
|
+
|
|
266
|
+
The original Jess code uses the ``strcasecmp`` function to compare atom names,
|
|
267
|
+
an operation that is perfomed on most match modes. This function is optimized
|
|
268
|
+
for long strings: for instance, the GNU libc contains an AVX2 implementation
|
|
269
|
+
of the equality code. In Jess, however, this function is usually called with
|
|
270
|
+
very short strings (3 or 4 characters).
|
|
271
|
+
|
|
272
|
+
To reduce overhead due to calling an external function, and encourage the
|
|
273
|
+
compiler to unroll the equality comparison loop, we implement name
|
|
274
|
+
comparison in an inline function defined in the ``TessAtom.h`` header. On
|
|
275
|
+
a single template, this saved around 5% of the CPU cycles.
|
|
@@ -4,7 +4,7 @@ build-backend = "scikit_build_core.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pyjess"
|
|
7
|
-
version = "0.7.0-alpha.
|
|
7
|
+
version = "0.7.0-alpha.6"
|
|
8
8
|
description = "Cython bindings and Python interface to JESS, a 3D template matching software."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.7"
|
|
@@ -49,8 +49,15 @@ classifiers = [
|
|
|
49
49
|
test = ["importlib-resources ; python_version < '3.9'"]
|
|
50
50
|
cif = ["gemmi ~=0.7.0"]
|
|
51
51
|
|
|
52
|
+
[project.scripts]
|
|
53
|
+
pyjess = "pyjess.cli:main"
|
|
54
|
+
|
|
55
|
+
[project.entry-points.console_scripts]
|
|
56
|
+
pyjess = "pyjess.cli:main"
|
|
57
|
+
|
|
52
58
|
[tool.scikit-build]
|
|
53
59
|
build-dir = "build/{build_type}"
|
|
60
|
+
wheel.py-api = "cp38"
|
|
54
61
|
editable.rebuild = true
|
|
55
62
|
editable.verbose = false
|
|
56
63
|
sdist.exclude = ["vendor/jess/examples"]
|
|
@@ -74,8 +81,7 @@ if.env.MOLD = true
|
|
|
74
81
|
cmake.define.CMAKE_LINKER_TYPE = "mold"
|
|
75
82
|
|
|
76
83
|
[tool.cibuildwheel]
|
|
77
|
-
|
|
78
|
-
build-frontend = { name = "pip", args = ["--no-build-isolation"] }
|
|
84
|
+
build-frontend = { name = "pip" }
|
|
79
85
|
build-verbosity = 1
|
|
80
86
|
free-threaded-support = false
|
|
81
87
|
test-command = "python -m unittest pyjess.tests -v"
|