posecheck-fast 0.1.6__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.
- posecheck_fast-0.1.6/PKG-INFO +73 -0
- posecheck_fast-0.1.6/README.md +52 -0
- posecheck_fast-0.1.6/pyproject.toml +95 -0
- posecheck_fast-0.1.6/src/posecheck_fast/__init__.py +53 -0
- posecheck_fast-0.1.6/src/posecheck_fast/datasets/__init__.py +1 -0
- posecheck_fast-0.1.6/src/posecheck_fast/filters/__init__.py +15 -0
- posecheck_fast-0.1.6/src/posecheck_fast/filters/fast_filters.py +532 -0
- posecheck_fast-0.1.6/src/posecheck_fast/metrics/__init__.py +31 -0
- posecheck_fast-0.1.6/src/posecheck_fast/metrics/aggregation.py +388 -0
- posecheck_fast-0.1.6/src/posecheck_fast/metrics/rmsd.py +273 -0
- posecheck_fast-0.1.6/src/posecheck_fast/utils/__init__.py +1 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: posecheck-fast
|
|
3
|
+
Version: 0.1.6
|
|
4
|
+
Summary: Fast docking evaluation metrics: symmetry-corrected RMSD and PoseBusters filters
|
|
5
|
+
Keywords: docking,rmsd,posebusters,molecular-docking,benchmark
|
|
6
|
+
Author: Nikolenko
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
Requires-Dist: numpy>=1.21
|
|
9
|
+
Requires-Dist: pandas>=1.3
|
|
10
|
+
Requires-Dist: spyrmsd>=0.6
|
|
11
|
+
Requires-Dist: rdkit>=2022.3
|
|
12
|
+
Requires-Dist: torch>=1.10
|
|
13
|
+
Requires-Dist: posebusters>=0.2
|
|
14
|
+
Requires-Dist: tqdm>=4.60
|
|
15
|
+
Requires-Dist: pytest>=7.0 ; extra == 'dev'
|
|
16
|
+
Requires-Dist: pytest-cov>=4.0 ; extra == 'dev'
|
|
17
|
+
Requires-Dist: ruff>=0.4 ; extra == 'dev'
|
|
18
|
+
Requires-Python: >=3.11
|
|
19
|
+
Provides-Extra: dev
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
|
|
22
|
+
# posecheck-fast
|
|
23
|
+
|
|
24
|
+
[](https://pypi.org/project/posecheck-fast/)
|
|
25
|
+
[](https://github.com/LigandPro/posecheck-fast/actions/workflows/ci.yml)
|
|
26
|
+
[](https://opensource.org/licenses/MIT)
|
|
27
|
+
[](https://www.python.org/downloads/)
|
|
28
|
+
|
|
29
|
+
Fast docking evaluation metrics: symmetry-corrected RMSD and lightweight PoseBusters filters.
|
|
30
|
+
|
|
31
|
+
## Installation
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
uv pip install posecheck-fast
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Features
|
|
38
|
+
|
|
39
|
+
- **Symmetry-corrected RMSD** — accounts for molecular symmetry (benzene, carboxylates, etc.)
|
|
40
|
+
- **Fast PoseBusters filters** — 4 key checks in ~10ms instead of full 27-test suite (~1-2s)
|
|
41
|
+
|
|
42
|
+
## Usage
|
|
43
|
+
|
|
44
|
+
```python
|
|
45
|
+
from posecheck_fast import compute_all_isomorphisms, get_symmetry_rmsd_with_isomorphisms
|
|
46
|
+
|
|
47
|
+
# Symmetry-corrected RMSD
|
|
48
|
+
isomorphisms = compute_all_isomorphisms(rdkit_mol)
|
|
49
|
+
rmsd = get_symmetry_rmsd_with_isomorphisms(true_coords, pred_coords, isomorphisms)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
```python
|
|
53
|
+
from posecheck_fast import check_intermolecular_distance
|
|
54
|
+
|
|
55
|
+
# Fast filters: not_too_far_away, no_clashes, no_volume_clash, no_internal_clash
|
|
56
|
+
results = check_intermolecular_distance(
|
|
57
|
+
mol_orig=rdkit_mol,
|
|
58
|
+
pos_pred=pred_positions, # (n_samples, n_atoms, 3)
|
|
59
|
+
pos_cond=protein_positions, # (n_protein_atoms, 3)
|
|
60
|
+
atom_names_pred=lig_atoms,
|
|
61
|
+
atom_names_cond=prot_atoms,
|
|
62
|
+
)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Related
|
|
66
|
+
|
|
67
|
+
- [PoseBench](https://github.com/BioinfoMachineLearning/PoseBench) — full benchmark suite
|
|
68
|
+
- [PoseBusters](https://github.com/maabuu/posebusters) — full 27-test validation
|
|
69
|
+
- [spyrmsd](https://github.com/RMeli/spyrmsd) — symmetry RMSD algorithms
|
|
70
|
+
|
|
71
|
+
## License
|
|
72
|
+
|
|
73
|
+
MIT
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# posecheck-fast
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/posecheck-fast/)
|
|
4
|
+
[](https://github.com/LigandPro/posecheck-fast/actions/workflows/ci.yml)
|
|
5
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
|
+
[](https://www.python.org/downloads/)
|
|
7
|
+
|
|
8
|
+
Fast docking evaluation metrics: symmetry-corrected RMSD and lightweight PoseBusters filters.
|
|
9
|
+
|
|
10
|
+
## Installation
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
uv pip install posecheck-fast
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Features
|
|
17
|
+
|
|
18
|
+
- **Symmetry-corrected RMSD** — accounts for molecular symmetry (benzene, carboxylates, etc.)
|
|
19
|
+
- **Fast PoseBusters filters** — 4 key checks in ~10ms instead of full 27-test suite (~1-2s)
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
```python
|
|
24
|
+
from posecheck_fast import compute_all_isomorphisms, get_symmetry_rmsd_with_isomorphisms
|
|
25
|
+
|
|
26
|
+
# Symmetry-corrected RMSD
|
|
27
|
+
isomorphisms = compute_all_isomorphisms(rdkit_mol)
|
|
28
|
+
rmsd = get_symmetry_rmsd_with_isomorphisms(true_coords, pred_coords, isomorphisms)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```python
|
|
32
|
+
from posecheck_fast import check_intermolecular_distance
|
|
33
|
+
|
|
34
|
+
# Fast filters: not_too_far_away, no_clashes, no_volume_clash, no_internal_clash
|
|
35
|
+
results = check_intermolecular_distance(
|
|
36
|
+
mol_orig=rdkit_mol,
|
|
37
|
+
pos_pred=pred_positions, # (n_samples, n_atoms, 3)
|
|
38
|
+
pos_cond=protein_positions, # (n_protein_atoms, 3)
|
|
39
|
+
atom_names_pred=lig_atoms,
|
|
40
|
+
atom_names_cond=prot_atoms,
|
|
41
|
+
)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Related
|
|
45
|
+
|
|
46
|
+
- [PoseBench](https://github.com/BioinfoMachineLearning/PoseBench) — full benchmark suite
|
|
47
|
+
- [PoseBusters](https://github.com/maabuu/posebusters) — full 27-test validation
|
|
48
|
+
- [spyrmsd](https://github.com/RMeli/spyrmsd) — symmetry RMSD algorithms
|
|
49
|
+
|
|
50
|
+
## License
|
|
51
|
+
|
|
52
|
+
MIT
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "posecheck-fast"
|
|
3
|
+
version = "0.1.6"
|
|
4
|
+
description = "Fast docking evaluation metrics: symmetry-corrected RMSD and PoseBusters filters"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.11"
|
|
7
|
+
license = "MIT"
|
|
8
|
+
authors = [
|
|
9
|
+
{ name = "Nikolenko" }
|
|
10
|
+
]
|
|
11
|
+
keywords = ["docking", "rmsd", "posebusters", "molecular-docking", "benchmark"]
|
|
12
|
+
|
|
13
|
+
dependencies = [
|
|
14
|
+
"numpy>=1.21",
|
|
15
|
+
"pandas>=1.3",
|
|
16
|
+
"spyrmsd>=0.6",
|
|
17
|
+
"rdkit>=2022.03",
|
|
18
|
+
"torch>=1.10",
|
|
19
|
+
"posebusters>=0.2",
|
|
20
|
+
"tqdm>=4.60",
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
[project.optional-dependencies]
|
|
24
|
+
dev = [
|
|
25
|
+
"pytest>=7.0",
|
|
26
|
+
"pytest-cov>=4.0",
|
|
27
|
+
"ruff>=0.4",
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
[build-system]
|
|
31
|
+
requires = ["uv_build"]
|
|
32
|
+
build-backend = "uv_build"
|
|
33
|
+
|
|
34
|
+
[tool.uv.build-backend]
|
|
35
|
+
module-name = "posecheck_fast"
|
|
36
|
+
|
|
37
|
+
[dependency-groups]
|
|
38
|
+
dev = [
|
|
39
|
+
"pytest>=7.0",
|
|
40
|
+
"pytest-cov>=4.0",
|
|
41
|
+
"ruff>=0.4",
|
|
42
|
+
"pre-commit>=4.0",
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
[tool.ruff]
|
|
46
|
+
src = ["src/"]
|
|
47
|
+
target-version = "py311"
|
|
48
|
+
|
|
49
|
+
[tool.ruff.lint]
|
|
50
|
+
select = [
|
|
51
|
+
"E", # pycodestyle errors
|
|
52
|
+
"F", # Pyflakes (undefined names, unused imports, etc.)
|
|
53
|
+
"W", # pycodestyle warnings
|
|
54
|
+
"I", # isort (import sorting)
|
|
55
|
+
"N", # pep8-naming
|
|
56
|
+
"UP", # pyupgrade (modernize Python code)
|
|
57
|
+
"B", # flake8-bugbear (common bugs)
|
|
58
|
+
"C4", # flake8-comprehensions
|
|
59
|
+
"PIE", # flake8-pie (misc lints)
|
|
60
|
+
"RET", # flake8-return (return statement improvements)
|
|
61
|
+
"SIM", # flake8-simplify
|
|
62
|
+
"NPY", # NumPy-specific rules
|
|
63
|
+
]
|
|
64
|
+
|
|
65
|
+
ignore = [
|
|
66
|
+
"E501", # Line too long (handled by formatter)
|
|
67
|
+
"E741", # Ambiguous variable name (allow 'l', 'O', etc. for math)
|
|
68
|
+
"N803", # Argument name should be lowercase (allow CamelCase for classes)
|
|
69
|
+
"N806", # Variable should be lowercase (allow uppercase in math/ML code)
|
|
70
|
+
"B008", # Do not perform function call in argument defaults (common in ML)
|
|
71
|
+
"RET504", # Unnecessary variable assignment before return
|
|
72
|
+
"SIM108", # Use ternary operator (can reduce readability)
|
|
73
|
+
"SIM102", # Avoid assigning lambda expressions (OK for ML configs)
|
|
74
|
+
"N812", # Lowercase imported as non-lowercase (allow for 'import torch.nn.functional as F')
|
|
75
|
+
"N802", # Function name should be lowercase (allow for class-factory style)
|
|
76
|
+
"E731", # Do not assign a lambda expression (allow in configs/utilities)
|
|
77
|
+
"C408", # Unnecessary 'dict' call (allow for explicitness)
|
|
78
|
+
"SIM113", # Use 'any'/'all' for simple comparisons (allow explicit loops)
|
|
79
|
+
]
|
|
80
|
+
|
|
81
|
+
fixable = ["ALL"]
|
|
82
|
+
unfixable = []
|
|
83
|
+
|
|
84
|
+
[tool.ruff.lint.per-file-ignores]
|
|
85
|
+
"__init__.py" = ["F401"]
|
|
86
|
+
"tests/**/*.py" = ["S101"]
|
|
87
|
+
|
|
88
|
+
[tool.ruff.format]
|
|
89
|
+
quote-style = "double"
|
|
90
|
+
indent-style = "space"
|
|
91
|
+
skip-magic-trailing-comma = false
|
|
92
|
+
line-ending = "auto"
|
|
93
|
+
|
|
94
|
+
[tool.ruff.lint.pydocstyle]
|
|
95
|
+
convention = "numpy"
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"""
|
|
2
|
+
posecheck-fast: Fast docking evaluation metrics
|
|
3
|
+
|
|
4
|
+
Provides:
|
|
5
|
+
- Symmetry-corrected RMSD computation
|
|
6
|
+
- Fast PoseBusters filters (without full energy evaluation)
|
|
7
|
+
- Docking metrics (success rates, averages)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from posecheck_fast.filters.fast_filters import (
|
|
11
|
+
calc_posebusters,
|
|
12
|
+
check_geometry,
|
|
13
|
+
check_intermolecular_distance,
|
|
14
|
+
check_volume_overlap,
|
|
15
|
+
)
|
|
16
|
+
from posecheck_fast.metrics.aggregation import (
|
|
17
|
+
filter_results_by_fast,
|
|
18
|
+
filter_results_by_posebusters,
|
|
19
|
+
get_best_results_by_score,
|
|
20
|
+
get_final_results_for_df,
|
|
21
|
+
get_simple_metrics_df,
|
|
22
|
+
)
|
|
23
|
+
from posecheck_fast.metrics.rmsd import (
|
|
24
|
+
TimeoutException,
|
|
25
|
+
compute_all_isomorphisms,
|
|
26
|
+
get_symmetry_rmsd,
|
|
27
|
+
get_symmetry_rmsd_with_isomorphisms,
|
|
28
|
+
symmrmsd,
|
|
29
|
+
time_limit,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
__version__ = "0.1.4"
|
|
33
|
+
|
|
34
|
+
__all__ = [
|
|
35
|
+
# RMSD
|
|
36
|
+
"compute_all_isomorphisms",
|
|
37
|
+
"get_symmetry_rmsd_with_isomorphisms",
|
|
38
|
+
"get_symmetry_rmsd",
|
|
39
|
+
"symmrmsd",
|
|
40
|
+
"TimeoutException",
|
|
41
|
+
"time_limit",
|
|
42
|
+
# Filters
|
|
43
|
+
"calc_posebusters",
|
|
44
|
+
"check_intermolecular_distance",
|
|
45
|
+
"check_volume_overlap",
|
|
46
|
+
"check_geometry",
|
|
47
|
+
# Metrics
|
|
48
|
+
"get_simple_metrics_df",
|
|
49
|
+
"get_final_results_for_df",
|
|
50
|
+
"filter_results_by_posebusters",
|
|
51
|
+
"filter_results_by_fast",
|
|
52
|
+
"get_best_results_by_score",
|
|
53
|
+
]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Dataset utilities for posecheck-fast."""
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"""Fast PoseBusters filters for docking evaluation."""
|
|
2
|
+
|
|
3
|
+
from posecheck_fast.filters.fast_filters import (
|
|
4
|
+
calc_posebusters,
|
|
5
|
+
check_geometry,
|
|
6
|
+
check_intermolecular_distance,
|
|
7
|
+
check_volume_overlap,
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
__all__ = [
|
|
11
|
+
"calc_posebusters",
|
|
12
|
+
"check_intermolecular_distance",
|
|
13
|
+
"check_volume_overlap",
|
|
14
|
+
"check_geometry",
|
|
15
|
+
]
|