acellera-lomap2 3.3.0__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.
Files changed (178) hide show
  1. acellera_lomap2-3.3.0/.git-blame-ignore-revs +2 -0
  2. acellera_lomap2-3.3.0/.gitattributes +2 -0
  3. acellera_lomap2-3.3.0/.github/pull_request_template.md +21 -0
  4. acellera_lomap2-3.3.0/.github/workflows/ci.yaml +95 -0
  5. acellera_lomap2-3.3.0/.github/workflows/clean_cache.yaml +34 -0
  6. acellera_lomap2-3.3.0/.github/workflows/mypy.yaml +56 -0
  7. acellera_lomap2-3.3.0/.github/workflows/pull_request_template.md +20 -0
  8. acellera_lomap2-3.3.0/.gitignore +116 -0
  9. acellera_lomap2-3.3.0/.pre-commit-config.yaml +37 -0
  10. acellera_lomap2-3.3.0/.readthedocs.yaml +19 -0
  11. acellera_lomap2-3.3.0/AUTHORS.md +20 -0
  12. acellera_lomap2-3.3.0/CITATION.bib +13 -0
  13. acellera_lomap2-3.3.0/LICENSE.txt +19 -0
  14. acellera_lomap2-3.3.0/MANIFEST.in +14 -0
  15. acellera_lomap2-3.3.0/PKG-INFO +100 -0
  16. acellera_lomap2-3.3.0/README.md +60 -0
  17. acellera_lomap2-3.3.0/docs/CHANGELOG.rst +171 -0
  18. acellera_lomap2-3.3.0/docs/Makefile +20 -0
  19. acellera_lomap2-3.3.0/docs/_static/.gitkeep +0 -0
  20. acellera_lomap2-3.3.0/docs/api.rst +48 -0
  21. acellera_lomap2-3.3.0/docs/citing.rst +8 -0
  22. acellera_lomap2-3.3.0/docs/conf.py +51 -0
  23. acellera_lomap2-3.3.0/docs/environment.yaml +13 -0
  24. acellera_lomap2-3.3.0/docs/getting_started.rst +107 -0
  25. acellera_lomap2-3.3.0/docs/index.rst +28 -0
  26. acellera_lomap2-3.3.0/docs/installation.rst +67 -0
  27. acellera_lomap2-3.3.0/docs/legacy.rst +22 -0
  28. acellera_lomap2-3.3.0/docs/make.bat +35 -0
  29. acellera_lomap2-3.3.0/environment.yaml +13 -0
  30. acellera_lomap2-3.3.0/news/TEMPLATE.rst +23 -0
  31. acellera_lomap2-3.3.0/pyproject.toml +83 -0
  32. acellera_lomap2-3.3.0/rever.xsh +7 -0
  33. acellera_lomap2-3.3.0/setup.cfg +4 -0
  34. acellera_lomap2-3.3.0/src/acellera_lomap2.egg-info/PKG-INFO +100 -0
  35. acellera_lomap2-3.3.0/src/acellera_lomap2.egg-info/SOURCES.txt +176 -0
  36. acellera_lomap2-3.3.0/src/acellera_lomap2.egg-info/dependency_links.txt +1 -0
  37. acellera_lomap2-3.3.0/src/acellera_lomap2.egg-info/entry_points.txt +2 -0
  38. acellera_lomap2-3.3.0/src/acellera_lomap2.egg-info/not-zip-safe +1 -0
  39. acellera_lomap2-3.3.0/src/acellera_lomap2.egg-info/requires.txt +14 -0
  40. acellera_lomap2-3.3.0/src/acellera_lomap2.egg-info/top_level.txt +1 -0
  41. acellera_lomap2-3.3.0/src/lomap/__init__.py +37 -0
  42. acellera_lomap2-3.3.0/src/lomap/_due.py +77 -0
  43. acellera_lomap2-3.3.0/src/lomap/dbmol.py +1668 -0
  44. acellera_lomap2-3.3.0/src/lomap/fp.py +100 -0
  45. acellera_lomap2-3.3.0/src/lomap/graphgen.py +1441 -0
  46. acellera_lomap2-3.3.0/src/lomap/gufe_bindings/__init__.py +4 -0
  47. acellera_lomap2-3.3.0/src/lomap/gufe_bindings/mapper.py +144 -0
  48. acellera_lomap2-3.3.0/src/lomap/gufe_bindings/network_generation.py +164 -0
  49. acellera_lomap2-3.3.0/src/lomap/gufe_bindings/scorers.py +577 -0
  50. acellera_lomap2-3.3.0/src/lomap/mcs.py +1500 -0
  51. acellera_lomap2-3.3.0/src/lomap/tests/__init__.py +0 -0
  52. acellera_lomap2-3.3.0/src/lomap/tests/basic/1,3,7-trimethylnaphthalene.mol2 +63 -0
  53. acellera_lomap2-3.3.0/src/lomap/tests/basic/1-butyl-4-methylbenzene.mol2 +62 -0
  54. acellera_lomap2-3.3.0/src/lomap/tests/basic/2,6-dimethylnaphthalene.mol2 +57 -0
  55. acellera_lomap2-3.3.0/src/lomap/tests/basic/2-methyl-6-propylnaphthalene.mol2 +69 -0
  56. acellera_lomap2-3.3.0/src/lomap/tests/basic/2-methylnaphthalene.mol2 +51 -0
  57. acellera_lomap2-3.3.0/src/lomap/tests/basic/2-naftanol.mol2 +47 -0
  58. acellera_lomap2-3.3.0/src/lomap/tests/basic/MCS.pickle +2361 -0
  59. acellera_lomap2-3.3.0/src/lomap/tests/basic/__init__.py +0 -0
  60. acellera_lomap2-3.3.0/src/lomap/tests/basic/chlorophenyl.sdf +95 -0
  61. acellera_lomap2-3.3.0/src/lomap/tests/basic/methylcyclohexane.mol2 +50 -0
  62. acellera_lomap2-3.3.0/src/lomap/tests/basic/molecules.gpickle +275 -0
  63. acellera_lomap2-3.3.0/src/lomap/tests/basic/thrombin_ligands.sdf +5293 -0
  64. acellera_lomap2-3.3.0/src/lomap/tests/basic/toluene.mol2 +38 -0
  65. acellera_lomap2-3.3.0/src/lomap/tests/basic/toluyl.sdf +98 -0
  66. acellera_lomap2-3.3.0/src/lomap/tests/chiral/Chiral1R.sdf +90 -0
  67. acellera_lomap2-3.3.0/src/lomap/tests/chiral/Chiral1S.sdf +92 -0
  68. acellera_lomap2-3.3.0/src/lomap/tests/chiral/Chiral2R.sdf +95 -0
  69. acellera_lomap2-3.3.0/src/lomap/tests/chiral/Chiral3RS.sdf +125 -0
  70. acellera_lomap2-3.3.0/src/lomap/tests/chiral/Chiral3SR.sdf +123 -0
  71. acellera_lomap2-3.3.0/src/lomap/tests/chiral/Chiral3SS.sdf +128 -0
  72. acellera_lomap2-3.3.0/src/lomap/tests/chiral/Chiral4RR.sdf +71 -0
  73. acellera_lomap2-3.3.0/src/lomap/tests/chiral/Chiral4RS.sdf +71 -0
  74. acellera_lomap2-3.3.0/src/lomap/tests/chiral/RingChiralR.sdf +82 -0
  75. acellera_lomap2-3.3.0/src/lomap/tests/chiral/RingChiralS.sdf +86 -0
  76. acellera_lomap2-3.3.0/src/lomap/tests/chiral/SpiroR.sdf +106 -0
  77. acellera_lomap2-3.3.0/src/lomap/tests/chiral/SpiroS.sdf +106 -0
  78. acellera_lomap2-3.3.0/src/lomap/tests/chiral/__init__.py +0 -0
  79. acellera_lomap2-3.3.0/src/lomap/tests/chiral/bace_cat_13d.sdf +132 -0
  80. acellera_lomap2-3.3.0/src/lomap/tests/chiral/bace_cat_13d_inverted.sdf +158 -0
  81. acellera_lomap2-3.3.0/src/lomap/tests/chiral/bace_cat_13d_perm1.sdf +96 -0
  82. acellera_lomap2-3.3.0/src/lomap/tests/chiral/bace_cat_13d_perm2.sdf +96 -0
  83. acellera_lomap2-3.3.0/src/lomap/tests/chiral/bace_cat_13d_perm3.sdf +96 -0
  84. acellera_lomap2-3.3.0/src/lomap/tests/chiral/bace_cat_13d_perm4.sdf +96 -0
  85. acellera_lomap2-3.3.0/src/lomap/tests/chiral/bace_cat_13d_perm5.sdf +96 -0
  86. acellera_lomap2-3.3.0/src/lomap/tests/chiral/bace_mk1.sdf +145 -0
  87. acellera_lomap2-3.3.0/src/lomap/tests/chiral/tpbs2_lig1.sdf +152 -0
  88. acellera_lomap2-3.3.0/src/lomap/tests/chiral/tpbs2_lig1a.sdf +152 -0
  89. acellera_lomap2-3.3.0/src/lomap/tests/chiral/tpbs2_lig2.sdf +161 -0
  90. acellera_lomap2-3.3.0/src/lomap/tests/data/__init__.py +0 -0
  91. acellera_lomap2-3.3.0/src/lomap/tests/data/lig_41.sdf +101 -0
  92. acellera_lomap2-3.3.0/src/lomap/tests/data/lig_74.sdf +100 -0
  93. acellera_lomap2-3.3.0/src/lomap/tests/linksfile/__init__.py +0 -0
  94. acellera_lomap2-3.3.0/src/lomap/tests/linksfile/links1.txt +1 -0
  95. acellera_lomap2-3.3.0/src/lomap/tests/linksfile/links2.txt +2 -0
  96. acellera_lomap2-3.3.0/src/lomap/tests/linksfile/links3.txt +6 -0
  97. acellera_lomap2-3.3.0/src/lomap/tests/linksfile/phenyl.sdf +93 -0
  98. acellera_lomap2-3.3.0/src/lomap/tests/linksfile/phenylcyclobutyl.sdf +119 -0
  99. acellera_lomap2-3.3.0/src/lomap/tests/linksfile/phenylfuran.sdf +115 -0
  100. acellera_lomap2-3.3.0/src/lomap/tests/linksfile/toluyl.sdf +98 -0
  101. acellera_lomap2-3.3.0/src/lomap/tests/radial/__init__.py +0 -0
  102. acellera_lomap2-3.3.0/src/lomap/tests/radial/ejm_31.mol2 +73 -0
  103. acellera_lomap2-3.3.0/src/lomap/tests/radial/ejm_42.mol2 +79 -0
  104. acellera_lomap2-3.3.0/src/lomap/tests/radial/ejm_43.mol2 +85 -0
  105. acellera_lomap2-3.3.0/src/lomap/tests/radial/ejm_44.mol2 +91 -0
  106. acellera_lomap2-3.3.0/src/lomap/tests/radial/ejm_45.mol2 +88 -0
  107. acellera_lomap2-3.3.0/src/lomap/tests/radial/ejm_46.mol2 +82 -0
  108. acellera_lomap2-3.3.0/src/lomap/tests/radial/ejm_47.mol2 +88 -0
  109. acellera_lomap2-3.3.0/src/lomap/tests/radial/ejm_48.mol2 +94 -0
  110. acellera_lomap2-3.3.0/src/lomap/tests/radial/ejm_49.mol2 +88 -0
  111. acellera_lomap2-3.3.0/src/lomap/tests/radial/ejm_50.mol2 +75 -0
  112. acellera_lomap2-3.3.0/src/lomap/tests/radial/ejm_54.mol2 +83 -0
  113. acellera_lomap2-3.3.0/src/lomap/tests/radial/ejm_55.mol2 +75 -0
  114. acellera_lomap2-3.3.0/src/lomap/tests/radial/jmc_23.mol2 +82 -0
  115. acellera_lomap2-3.3.0/src/lomap/tests/radial/jmc_27.mol2 +82 -0
  116. acellera_lomap2-3.3.0/src/lomap/tests/radial/jmc_28.mol2 +88 -0
  117. acellera_lomap2-3.3.0/src/lomap/tests/radial/jmc_30.mol2 +84 -0
  118. acellera_lomap2-3.3.0/src/lomap/tests/radial/molecules.gpickle +0 -0
  119. acellera_lomap2-3.3.0/src/lomap/tests/radial/radial.gpickle +542 -0
  120. acellera_lomap2-3.3.0/src/lomap/tests/radial/radial_hub.gpickle +529 -0
  121. acellera_lomap2-3.3.0/src/lomap/tests/radial/radial_hub_fingerprint.gpickle +529 -0
  122. acellera_lomap2-3.3.0/src/lomap/tests/radial/radial_hub_fingerprint_fast.gpickle +555 -0
  123. acellera_lomap2-3.3.0/src/lomap/tests/test_deprecations_and_errors.py +32 -0
  124. acellera_lomap2-3.3.0/src/lomap/tests/test_duecredit.py +86 -0
  125. acellera_lomap2-3.3.0/src/lomap/tests/test_lomap.py +848 -0
  126. acellera_lomap2-3.3.0/src/lomap/tests/test_lomapatommapper.py +66 -0
  127. acellera_lomap2-3.3.0/src/lomap/tests/test_mcs.py +527 -0
  128. acellera_lomap2-3.3.0/src/lomap/tests/test_new_api.py +71 -0
  129. acellera_lomap2-3.3.0/src/lomap/tests/test_scorer.py +148 -0
  130. acellera_lomap2-3.3.0/src/lomap/tests/transforms/__init__.py +0 -0
  131. acellera_lomap2-3.3.0/src/lomap/tests/transforms/bromophenyl.sdf +95 -0
  132. acellera_lomap2-3.3.0/src/lomap/tests/transforms/cdk2_lig1.sdf +111 -0
  133. acellera_lomap2-3.3.0/src/lomap/tests/transforms/cdk2_lig11.sdf +109 -0
  134. acellera_lomap2-3.3.0/src/lomap/tests/transforms/cdk2_lig13.sdf +107 -0
  135. acellera_lomap2-3.3.0/src/lomap/tests/transforms/cdk2_lig14.sdf +107 -0
  136. acellera_lomap2-3.3.0/src/lomap/tests/transforms/cdk2_lig14_translated.sdf +107 -0
  137. acellera_lomap2-3.3.0/src/lomap/tests/transforms/cdk2_lig15.sdf +99 -0
  138. acellera_lomap2-3.3.0/src/lomap/tests/transforms/cdk2_lig16.sdf +99 -0
  139. acellera_lomap2-3.3.0/src/lomap/tests/transforms/cdk2_lig2.sdf +115 -0
  140. acellera_lomap2-3.3.0/src/lomap/tests/transforms/chlorophenol.sdf +97 -0
  141. acellera_lomap2-3.3.0/src/lomap/tests/transforms/chlorophenyl.sdf +95 -0
  142. acellera_lomap2-3.3.0/src/lomap/tests/transforms/chlorophenyl2.sdf +97 -0
  143. acellera_lomap2-3.3.0/src/lomap/tests/transforms/chlorotoluyl1.sdf +105 -0
  144. acellera_lomap2-3.3.0/src/lomap/tests/transforms/chlorotoluyl2.sdf +107 -0
  145. acellera_lomap2-3.3.0/src/lomap/tests/transforms/fluorophenyl.sdf +95 -0
  146. acellera_lomap2-3.3.0/src/lomap/tests/transforms/iodophenyl.sdf +95 -0
  147. acellera_lomap2-3.3.0/src/lomap/tests/transforms/methoxyphenyl.sdf +105 -0
  148. acellera_lomap2-3.3.0/src/lomap/tests/transforms/napthyl.sdf +106 -0
  149. acellera_lomap2-3.3.0/src/lomap/tests/transforms/napthyl2.sdf +174 -0
  150. acellera_lomap2-3.3.0/src/lomap/tests/transforms/napthyl3.sdf +177 -0
  151. acellera_lomap2-3.3.0/src/lomap/tests/transforms/phenyl.sdf +93 -0
  152. acellera_lomap2-3.3.0/src/lomap/tests/transforms/phenylamide.sdf +104 -0
  153. acellera_lomap2-3.3.0/src/lomap/tests/transforms/phenylcyclobutyl.sdf +119 -0
  154. acellera_lomap2-3.3.0/src/lomap/tests/transforms/phenylcyclononyl.sdf +160 -0
  155. acellera_lomap2-3.3.0/src/lomap/tests/transforms/phenylcyclopentyl.sdf +131 -0
  156. acellera_lomap2-3.3.0/src/lomap/tests/transforms/phenylcyclopentylmethyl1.sdf +138 -0
  157. acellera_lomap2-3.3.0/src/lomap/tests/transforms/phenylcyclopentylmethyl2.sdf +136 -0
  158. acellera_lomap2-3.3.0/src/lomap/tests/transforms/phenylcyclopropyl.sdf +113 -0
  159. acellera_lomap2-3.3.0/src/lomap/tests/transforms/phenylethyl.sdf +110 -0
  160. acellera_lomap2-3.3.0/src/lomap/tests/transforms/phenylfuran.sdf +115 -0
  161. acellera_lomap2-3.3.0/src/lomap/tests/transforms/phenylimidazole.sdf +114 -0
  162. acellera_lomap2-3.3.0/src/lomap/tests/transforms/phenylisoxazole.sdf +110 -0
  163. acellera_lomap2-3.3.0/src/lomap/tests/transforms/phenylmethylamino.sdf +110 -0
  164. acellera_lomap2-3.3.0/src/lomap/tests/transforms/phenyloxazole.sdf +114 -0
  165. acellera_lomap2-3.3.0/src/lomap/tests/transforms/phenylphenyl.sdf +122 -0
  166. acellera_lomap2-3.3.0/src/lomap/tests/transforms/phenylpyrazole.sdf +114 -0
  167. acellera_lomap2-3.3.0/src/lomap/tests/transforms/phenylpyridine1.sdf +116 -0
  168. acellera_lomap2-3.3.0/src/lomap/tests/transforms/phenylpyridine2.sdf +118 -0
  169. acellera_lomap2-3.3.0/src/lomap/tests/transforms/phenylpyrimidine.sdf +119 -0
  170. acellera_lomap2-3.3.0/src/lomap/tests/transforms/phenylpyrrole.sdf +117 -0
  171. acellera_lomap2-3.3.0/src/lomap/tests/transforms/phenylsulfonamide.sdf +111 -0
  172. acellera_lomap2-3.3.0/src/lomap/tests/transforms/sulfonamide.sdf +110 -0
  173. acellera_lomap2-3.3.0/src/lomap/tests/transforms/sulfone.sdf +110 -0
  174. acellera_lomap2-3.3.0/src/lomap/tests/transforms/tetrahydronaphthyl.sdf +117 -0
  175. acellera_lomap2-3.3.0/src/lomap/tests/transforms/toluyl.sdf +98 -0
  176. acellera_lomap2-3.3.0/src/lomap/tests/transforms/toluyl2.sdf +101 -0
  177. acellera_lomap2-3.3.0/src/lomap/tests/transforms/toluyl3.sdf +102 -0
  178. acellera_lomap2-3.3.0/src/lomap/utils.py +107 -0
@@ -0,0 +1,2 @@
1
+ # https://github.com/OpenFreeEnergy/Lomap/pull/130 -- ruff auto-formatting
2
+ 23ea8b4a6019b3c83da278696ddeb38e27cf57bb
@@ -0,0 +1,2 @@
1
+ Lomap/_version.py export-subst
2
+ lomap/_version.py export-subst
@@ -0,0 +1,21 @@
1
+ <!--
2
+ Thank you for pull request.
3
+ Below are a few things we ask you kindly to self-check before getting a review. Remove checks that are not relevant.
4
+ -->
5
+
6
+ <!--
7
+ Please note any issues this fixes using [closing keywords]( https://help.github.com/articles/closing-issues-using-keywords/ ):
8
+ -->
9
+
10
+ <!--
11
+ see https://regro.github.io/rever-docs/news.html for details on how to add news entry (you do not need to run the rever command)
12
+ -->
13
+
14
+ Checklist
15
+ * [ ] All new code is appropriately documented (user-facing code _must_ have complete docstrings).
16
+ * [ ] Added a ``news`` entry, or the changes are not user-facing.
17
+ * [ ] Ran pre-commit: you can run [pre-commit](https://pre-commit.com) locally or comment on this PR with `pre-commit.ci autofix`.
18
+ * [ ] Add yourself to the AUTHORS.md list.
19
+
20
+ ## Developers certificate of origin
21
+ - [ ] I certify that this contribution is covered by the MIT License [here](https://github.com/OpenFreeEnergy/openfe/blob/main/LICENSE) and the **Developer Certificate of Origin** at <https://developercertificate.org/>.
@@ -0,0 +1,95 @@
1
+ name: CI
2
+
3
+ on:
4
+ pull_request:
5
+ branches:
6
+ - "main"
7
+ schedule:
8
+ # At 07:00 UTC on Monday and Thursday
9
+ - cron: "0 7 * * *"
10
+ push:
11
+ branches:
12
+ - main
13
+ workflow_dispatch:
14
+
15
+ concurrency:
16
+ # Probably overly cautious group naming.
17
+ # Commits to develop/master will cancel each other, but PRs will only cancel
18
+ # commits within the same PR
19
+ group: "${{ github.ref }}-${{ github.head_ref }}"
20
+ cancel-in-progress: true
21
+
22
+ defaults:
23
+ run:
24
+ shell: bash -leo pipefail {0}
25
+
26
+ jobs:
27
+ test:
28
+ name: Test on ${{ matrix.os }}, Python ${{ matrix.python-version }}, Gufe ${{ matrix.gufe }}
29
+ runs-on: ${{ matrix.os }}
30
+ strategy:
31
+ fail-fast: false
32
+ matrix:
33
+ python-version: ["3.11", "3.12", "3.13"]
34
+ os: [ubuntu-latest, macos-15-intel, macos-latest]
35
+ gufe: ["yes"]
36
+ include:
37
+ - os: "ubuntu-latest"
38
+ python-version: "3.12"
39
+ gufe: "no"
40
+
41
+ steps:
42
+ - uses: actions/checkout@v6
43
+
44
+ - name: Additional info about the build
45
+ run: |
46
+ uname -a
47
+ df -h
48
+ ulimit -a
49
+
50
+ - name: Get current date
51
+ id: date
52
+ run: echo "date=$(date +%Y-%m-%d)" >> "${GITHUB_OUTPUT}"
53
+
54
+ - uses: mamba-org/setup-micromamba@v3
55
+ with:
56
+ micromamba-binary-path: ~/.local/bin/micromamba
57
+ environment-file: environment.yaml
58
+ environment-name: lomap-env
59
+ cache-environment: true
60
+ cache-downloads: true
61
+ create-args: >-
62
+ python=${{ matrix.python-version }}
63
+ init-shell: bash
64
+
65
+ - name: "Install optional gufe"
66
+ if: ${{ matrix.gufe == 'yes' }}
67
+ run: |
68
+ micromamba install -c conda-forge "gufe>=1.6.1"
69
+
70
+ - name: Install package
71
+ run: python -m pip install --no-deps -v -e .
72
+
73
+ - name: Test imports
74
+ run: |
75
+ python -Ic "import lomap; print(lomap.__version__)"
76
+
77
+ - name: Environment Information
78
+ run: |
79
+ micromamba info
80
+ micromamba list
81
+
82
+ - name: Test the package
83
+ env:
84
+ DUECREDIT_ENABLE: 'yes'
85
+ run: pytest -n auto -vv
86
+
87
+ - name: Codecov
88
+ uses: codecov/codecov-action@v5
89
+ if: ${{ github.repository == 'OpenFreeEnergy/Lomap'
90
+ && github.event_name == 'pull_request' }}
91
+ with:
92
+ token: ${{ secrets.CODECOV_TOKEN }}
93
+ file: coverage.xml
94
+ fail_ci_if_error: False
95
+ verbose: True
@@ -0,0 +1,34 @@
1
+ # from https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#force-deleting-cache-entries
2
+ name: cleanup caches by a branch
3
+ on:
4
+ pull_request:
5
+ types:
6
+ - closed
7
+
8
+ jobs:
9
+ cleanup:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - name: Check out code
13
+ uses: actions/checkout@v4
14
+
15
+ - name: Cleanup
16
+ run: |
17
+ gh extension install actions/gh-actions-cache
18
+
19
+ REPO=${{ github.repository }}
20
+ BRANCH="refs/pull/${{ github.event.pull_request.number }}/merge"
21
+
22
+ echo "Fetching list of cache key"
23
+ cacheKeysForPR=$(gh actions-cache list -R $REPO -B $BRANCH | cut -f 1 )
24
+
25
+ ## Setting this to not fail the workflow while deleting cache keys.
26
+ set +e
27
+ echo "Deleting caches..."
28
+ for cacheKey in $cacheKeysForPR
29
+ do
30
+ gh actions-cache delete $cacheKey -R $REPO -B $BRANCH --confirm
31
+ done
32
+ echo "Done"
33
+ env:
34
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,56 @@
1
+ name: "mypy static type checking"
2
+ on:
3
+ pull_request:
4
+ branches:
5
+ - main
6
+ paths:
7
+ - "**.py"
8
+ push:
9
+ branches:
10
+ - main
11
+ paths:
12
+ - "**.py"
13
+
14
+ concurrency:
15
+ group: "${{ github.workflow }}-${{ github.ref }}"
16
+ cancel-in-progress: true
17
+
18
+ defaults:
19
+ run:
20
+ shell: bash -leo pipefail {0}
21
+
22
+ jobs:
23
+ mypy:
24
+ runs-on: ubuntu-latest
25
+ steps:
26
+ - uses: actions/checkout@v6
27
+
28
+ - name: Get current date
29
+ id: date
30
+ run: echo "date=$(date +%Y-%m-%d)" >> "${GITHUB_OUTPUT}"
31
+
32
+ - uses: mamba-org/setup-micromamba@v3
33
+ with:
34
+ micromamba-binary-path: ~/.local/bin/micromamba
35
+ environment-file: environment.yaml
36
+ environment-name: lomap-env
37
+ cache-environment: true
38
+ cache-downloads: true
39
+ create-args: >-
40
+ python=3.12
41
+ mypy
42
+ types-networkx
43
+ gufe>=1.6.1
44
+ init-shell: bash
45
+
46
+ - name: "Install steps"
47
+ run: |
48
+ python -m pip install --no-deps -e .
49
+
50
+ - name: "Environment Information"
51
+ run: |
52
+ micromamba info
53
+ micromamba list
54
+
55
+ - name: "Lint with mypy"
56
+ run: mypy
@@ -0,0 +1,20 @@
1
+ <!--
2
+ Thank you for pull request.
3
+ Below are a few things we ask you kindly to self-check before getting a review. Remove checks that are not relevant.
4
+ -->
5
+
6
+ <!--
7
+ Please note any issues this fixes using [closing keywords]( https://help.github.com/articles/closing-issues-using-keywords/ ):
8
+ -->
9
+
10
+ <!--
11
+ see https://regro.github.io/rever-docs/news.html for details on how to add news entry (you do not need to run the rever command)
12
+ -->
13
+
14
+ Checklist
15
+ * [ ] All new code is appropriately documented (user-facing code _must_ have complete docstrings).
16
+ * [ ] Added a ``news`` entry, or the changes are not user-facing.
17
+ * [ ] Ran pre-commit: you can run [pre-commit](https://pre-commit.com) locally or comment on this PR with `pre-commit.ci autofix`.
18
+
19
+ ## Developers certificate of origin
20
+ - [ ] I certify that this contribution is covered by the MIT License [here](https://github.com/OpenFreeEnergy/openfe/blob/main/LICENSE) and the **Developer Certificate of Origin** at <https://developercertificate.org/>.
@@ -0,0 +1,116 @@
1
+ .duecredit.p
2
+
3
+ # Byte-compiled / optimized / DLL files
4
+ __pycache__/
5
+ *.py[cod]
6
+ *$py.class
7
+
8
+ # C extensions
9
+ *.so
10
+
11
+ # Distribution / packaging
12
+ .Python
13
+ build/
14
+ develop-eggs/
15
+ dist/
16
+ downloads/
17
+ eggs/
18
+ .eggs/
19
+ lib/
20
+ lib64/
21
+ parts/
22
+ sdist/
23
+ var/
24
+ wheels/
25
+ *.egg-info/
26
+ .installed.cfg
27
+ *.egg
28
+ MANIFEST
29
+
30
+ # PyInstaller
31
+ # Usually these files are written by a python script from a template
32
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
33
+ *.manifest
34
+ *.spec
35
+
36
+ # Installer logs
37
+ pip-log.txt
38
+ pip-delete-this-directory.txt
39
+
40
+ # Unit test / coverage reports
41
+ htmlcov/
42
+ .tox/
43
+ .nox/
44
+ .coverage
45
+ .coverage.*
46
+ .cache
47
+ nosetests.xml
48
+ coverage.xml
49
+ *.cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+
53
+ # Translations
54
+ *.mo
55
+ *.pot
56
+
57
+ # Django stuff:
58
+ *.log
59
+ local_settings.py
60
+ db.sqlite3
61
+
62
+ # Flask stuff:
63
+ instance/
64
+ .webassets-cache
65
+
66
+ # Scrapy stuff:
67
+ .scrapy
68
+
69
+ # Sphinx documentation
70
+ docs/_build/
71
+
72
+ # PyBuilder
73
+ target/
74
+
75
+ # Jupyter Notebook
76
+ .ipynb_checkpoints
77
+
78
+ # IPython
79
+ profile_default/
80
+ ipython_config.py
81
+
82
+ # pyenv
83
+ .python-version
84
+
85
+ # celery beat schedule file
86
+ celerybeat-schedule
87
+
88
+ # SageMath parsed files
89
+ *.sage.py
90
+
91
+ # Environments
92
+ .env
93
+ .venv
94
+ env/
95
+ venv/
96
+ ENV/
97
+ env.bak/
98
+ venv.bak/
99
+
100
+ # Spyder project settings
101
+ .spyderproject
102
+ .spyproject
103
+
104
+ # Rope project settings
105
+ .ropeproject
106
+
107
+ # mkdocs documentation
108
+ /site
109
+
110
+ # mypy
111
+ .mypy_cache/
112
+ .dmypy.json
113
+ dmypy.json
114
+
115
+ # Rever
116
+ rever/
@@ -0,0 +1,37 @@
1
+ # See https://pre-commit.com for more information
2
+ # See https://pre-commit.com/hooks.html for more hooks
3
+
4
+ # comment / label "pre-commit.ci autofix" to a pull request to manually trigger auto-fixing
5
+ ci:
6
+ autofix_prs: false
7
+ autoupdate_schedule: monthly
8
+ repos:
9
+ - repo: https://github.com/pre-commit/pre-commit-hooks
10
+ rev: v6.0.0
11
+ hooks:
12
+ - id: trailing-whitespace
13
+ exclude: '\.(pdb|gro|top|sdf|xml|cif|graphml|gpickle)$'
14
+ - id: check-added-large-files
15
+ args: ["--maxkb=4000"]
16
+ - id: check-case-conflict
17
+ - id: check-symlinks
18
+ - id: check-toml
19
+ - id: check-yaml
20
+ - id: debug-statements
21
+ - id: destroyed-symlinks
22
+ - id: end-of-file-fixer
23
+ exclude: '\.(graphml|gpickle|pickle)$'
24
+
25
+ - repo: https://github.com/tox-dev/pyproject-fmt
26
+ rev: "v2.23.0"
27
+ hooks:
28
+ - id: pyproject-fmt
29
+
30
+ - repo: https://github.com/astral-sh/ruff-pre-commit
31
+ rev: v0.15.15
32
+ hooks:
33
+ # Run the linter.
34
+ - id: ruff
35
+ args: [--fix ]
36
+ # Run the formatter.
37
+ - id: ruff-format
@@ -0,0 +1,19 @@
1
+ version: 2
2
+
3
+ build:
4
+ os: "ubuntu-24.04"
5
+ tools:
6
+ python: "mambaforge-4.10"
7
+
8
+ sphinx:
9
+ configuration: docs/conf.py
10
+ fail_on_warning: true
11
+
12
+ conda:
13
+ environment: docs/environment.yaml
14
+
15
+ python:
16
+ # Install our python package before building the docs
17
+ install:
18
+ - method: pip
19
+ path: .
@@ -0,0 +1,20 @@
1
+ Lomap is developed by:
2
+
3
+ - Gaetano Calabro' gcalabro@uci.edu
4
+ - David Mobley dmobley@uci.edu
5
+ - Mark Mackey
6
+ - Lester Hedges
7
+ - Antonia S J S Mey
8
+ - Jenke Scheen
9
+ - Mike M Henry
10
+ - Richard J Gowers
11
+ - Irfan Alibay
12
+ - David Swenson
13
+ - Nigel Palmer
14
+ - Shuai Liu
15
+ - Alyssa Travitz
16
+ - Hannah Baumann
17
+ - Shaochen Shi
18
+ - Ashley Mitchell
19
+ - Tom Ginsberg
20
+ - Josh Horton
@@ -0,0 +1,13 @@
1
+ %% Citations for LOMAP
2
+
3
+ @article{liu2013lead,
4
+ title={Lead optimization mapper: automating free energy calculations for lead optimization},
5
+ abstract={Alchemical free energy calculations hold increasing promise as an aid to drug discovery efforts. However, applications of these techniques in discovery projects have been relatively few, partly because of the difficulty of planning and setting up calculations. Here, we introduce lead optimization mapper, LOMAP, an automated algorithm to plan efficient relative free energy calculations between potential ligands within a substantial library of perhaps hundreds of compounds. In this approach, ligands are first grouped by structural similarity primarily based on the size of a (loosely defined) maximal common substructure, and then calculations are planned within and between sets of structurally related compounds. An emphasis is placed on ensuring that relative free energies can be obtained between any pair of compounds without combining the results of too many different relative free energy calculations (to avoid accumulation of error) and by providing some redundancy to allow for the possibility of error and consistency checking and provide some insight into when results can be expected to be unreliable. The algorithm is discussed in detail and a Python implementation, based on both Schrödinger’s and OpenEye’s APIs, has been made available freely under the BSD license.},
6
+ author={Liu, Shuai and Wu, Yujie and Lin, Teng and Abel, Robert and Redmann, Jonathan P and Summa, Christopher M and Jaber, Vivian R and Lim, Nathan M and Mobley, David L},
7
+ journal={Journal of computer-aided molecular design},
8
+ volume={27},
9
+ number={9},
10
+ pages={755--770},
11
+ year={2013},
12
+ publisher={Springer}
13
+ }
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2016-2017, Mobley Lab at UC Irvine.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
14
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
15
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
16
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
17
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
18
+ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
19
+ OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,14 @@
1
+ graft src/lomap
2
+ recursive-include src/lomap/tests *sdf
3
+ recursive-include src/lomap/tests *mol2
4
+ recursive-include src/lomap/tests *gpickle
5
+ recursive-include src/lomap/tests *pickle
6
+ recursive-include src/lomap/tests *txt
7
+
8
+
9
+ include MANIFEST.in
10
+ include README.md
11
+ include LICENSE.txt
12
+ include examples/example.py
13
+ include versioneer.py
14
+ include src/lomap/_version.py
@@ -0,0 +1,100 @@
1
+ Metadata-Version: 2.4
2
+ Name: acellera-lomap2
3
+ Version: 3.3.0
4
+ Summary: Lead Optimization Mapper 2
5
+ Author: Gaetano Calabro and David Mobley
6
+ Maintainer-email: The Open Free Energy developers <openfreeenergy@omsf.io>
7
+ License-Expression: MIT
8
+ Project-URL: Homepage, https://github.com/OpenFreeEnergy/Lomap
9
+ Keywords: alchemical free energy,network,perturbation,setup
10
+ Classifier: Development Status :: 5 - Production/Stable
11
+ Classifier: Environment :: Console
12
+ Classifier: Intended Audience :: Science/Research
13
+ Classifier: Natural Language :: English
14
+ Classifier: Operating System :: MacOS :: MacOS X
15
+ Classifier: Operating System :: POSIX :: Linux
16
+ Classifier: Programming Language :: Python :: 3 :: Only
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Programming Language :: Python :: 3.14
21
+ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
22
+ Classifier: Topic :: Scientific/Engineering :: Chemistry
23
+ Classifier: Topic :: Scientific/Engineering :: Mathematics
24
+ Classifier: Topic :: Scientific/Engineering :: Physics
25
+ Requires-Python: >=3.10
26
+ Description-Content-Type: text/markdown
27
+ License-File: LICENSE.txt
28
+ Requires-Dist: matplotlib
29
+ Requires-Dist: networkx
30
+ Requires-Dist: numpy
31
+ Requires-Dist: rdkit
32
+ Provides-Extra: credits
33
+ Requires-Dist: duecredit; extra == "credits"
34
+ Provides-Extra: graphviz
35
+ Requires-Dist: pygraphviz; extra == "graphviz"
36
+ Provides-Extra: test
37
+ Requires-Dist: codecov; extra == "test"
38
+ Requires-Dist: pytest; extra == "test"
39
+ Dynamic: license-file
40
+
41
+ [![CI](https://github.com/OpenFreeEnergy/Lomap/actions/workflows/CI.yaml/badge.svg)](https://github.com/OpenFreeEnergy/Lomap/actions/workflows/CI.yaml)
42
+ [![Documentation Status](https://readthedocs.org/projects/lomap/badge/?version=latest)](https://lomap.readthedocs.io/en/latest/?badge=latest)
43
+ [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.16898468.svg)](https://doi.org/10.5281/zenodo.16898468)
44
+ # Lomap
45
+ The Lead Optimization Mapper (LOMAP) is an automated algorithm for planning
46
+ efficient relative free energy calculation networks across a set of ligands,
47
+ built on freely available tools such as RDKit.
48
+ With the optional [`gufe`](https://github.com/OpenFreeEnergy/gufe) dependency installed,
49
+ it also integrates with the [Open Free Energy](https://openfree.energy) ecosystem.
50
+ The method is described in the original
51
+ [LOMAP publication](https://doi.org/10.1007/s10822-013-9678-y).
52
+
53
+ ## Installation
54
+
55
+ `lomap` is available on conda-forge as the `lomap2` package. See the
56
+ [installation documentation](https://lomap.readthedocs.io/en/latest/installation.html)
57
+ for install instructions, including the development install and optional
58
+ dependencies (`gufe` and `pygraphviz`).
59
+
60
+ ## Quickstart
61
+
62
+ This example uses LOMAP's optional `gufe` bindings to load two example ligands
63
+ bundled with the package and plan a perturbation network between them with the
64
+ default atom mapper and scorer.
65
+
66
+ ```python
67
+ # requires the optional `gufe` dependency (see Installation)
68
+ import importlib.resources
69
+
70
+ import lomap
71
+ from gufe import SmallMoleculeComponent
72
+
73
+ # Two example ligands ship with the package under lomap.tests.data
74
+ data = importlib.resources.files("lomap.tests.data")
75
+ ligands = [
76
+ SmallMoleculeComponent.from_sdf_file(data / name)
77
+ for name in ["lig_41.sdf", "lig_74.sdf"]
78
+ ]
79
+
80
+ # Build a LigandNetwork using LOMAP's scoring and network-construction rules
81
+ network = lomap.generate_lomap_network(
82
+ ligands=ligands,
83
+ mappers=lomap.LomapAtomMapper(),
84
+ scorer=lomap.default_lomap_score,
85
+ )
86
+ print(f"{len(network.nodes)} ligands, {len(network.edges)} edges")
87
+ ```
88
+
89
+ For proposing individual mappings, customising edge scores, and the full set of
90
+ network options, see the [documentation](https://lomap.readthedocs.io).
91
+
92
+ ## Authors
93
+
94
+ See [AUTHORS.md](https://github.com/OpenFreeEnergy/Lomap/blob/main/AUTHORS.md).
95
+
96
+ ## History
97
+
98
+ Open Free Energy took over maintenance of LOMAP in 2022. The original
99
+ development repository has since been archived, but can be found at
100
+ https://github.com/MobleyLab/Lomap.
@@ -0,0 +1,60 @@
1
+ [![CI](https://github.com/OpenFreeEnergy/Lomap/actions/workflows/CI.yaml/badge.svg)](https://github.com/OpenFreeEnergy/Lomap/actions/workflows/CI.yaml)
2
+ [![Documentation Status](https://readthedocs.org/projects/lomap/badge/?version=latest)](https://lomap.readthedocs.io/en/latest/?badge=latest)
3
+ [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.16898468.svg)](https://doi.org/10.5281/zenodo.16898468)
4
+ # Lomap
5
+ The Lead Optimization Mapper (LOMAP) is an automated algorithm for planning
6
+ efficient relative free energy calculation networks across a set of ligands,
7
+ built on freely available tools such as RDKit.
8
+ With the optional [`gufe`](https://github.com/OpenFreeEnergy/gufe) dependency installed,
9
+ it also integrates with the [Open Free Energy](https://openfree.energy) ecosystem.
10
+ The method is described in the original
11
+ [LOMAP publication](https://doi.org/10.1007/s10822-013-9678-y).
12
+
13
+ ## Installation
14
+
15
+ `lomap` is available on conda-forge as the `lomap2` package. See the
16
+ [installation documentation](https://lomap.readthedocs.io/en/latest/installation.html)
17
+ for install instructions, including the development install and optional
18
+ dependencies (`gufe` and `pygraphviz`).
19
+
20
+ ## Quickstart
21
+
22
+ This example uses LOMAP's optional `gufe` bindings to load two example ligands
23
+ bundled with the package and plan a perturbation network between them with the
24
+ default atom mapper and scorer.
25
+
26
+ ```python
27
+ # requires the optional `gufe` dependency (see Installation)
28
+ import importlib.resources
29
+
30
+ import lomap
31
+ from gufe import SmallMoleculeComponent
32
+
33
+ # Two example ligands ship with the package under lomap.tests.data
34
+ data = importlib.resources.files("lomap.tests.data")
35
+ ligands = [
36
+ SmallMoleculeComponent.from_sdf_file(data / name)
37
+ for name in ["lig_41.sdf", "lig_74.sdf"]
38
+ ]
39
+
40
+ # Build a LigandNetwork using LOMAP's scoring and network-construction rules
41
+ network = lomap.generate_lomap_network(
42
+ ligands=ligands,
43
+ mappers=lomap.LomapAtomMapper(),
44
+ scorer=lomap.default_lomap_score,
45
+ )
46
+ print(f"{len(network.nodes)} ligands, {len(network.edges)} edges")
47
+ ```
48
+
49
+ For proposing individual mappings, customising edge scores, and the full set of
50
+ network options, see the [documentation](https://lomap.readthedocs.io).
51
+
52
+ ## Authors
53
+
54
+ See [AUTHORS.md](https://github.com/OpenFreeEnergy/Lomap/blob/main/AUTHORS.md).
55
+
56
+ ## History
57
+
58
+ Open Free Energy took over maintenance of LOMAP in 2022. The original
59
+ development repository has since been archived, but can be found at
60
+ https://github.com/MobleyLab/Lomap.