alambiq 0.1.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 (617) hide show
  1. alambiq-0.1.0/.dockerignore +43 -0
  2. alambiq-0.1.0/.gitattributes +5 -0
  3. alambiq-0.1.0/.github/workflows/ci.yml +126 -0
  4. alambiq-0.1.0/.github/workflows/release.yml +56 -0
  5. alambiq-0.1.0/.gitignore +23 -0
  6. alambiq-0.1.0/AGENTS.md +175 -0
  7. alambiq-0.1.0/CHANGELOG.md +72 -0
  8. alambiq-0.1.0/LICENSE +202 -0
  9. alambiq-0.1.0/LICENSING.md +142 -0
  10. alambiq-0.1.0/MANIFEST.in +10 -0
  11. alambiq-0.1.0/PKG-INFO +171 -0
  12. alambiq-0.1.0/README.md +115 -0
  13. alambiq-0.1.0/docs/README.md +18 -0
  14. alambiq-0.1.0/docs/concepts.md +141 -0
  15. alambiq-0.1.0/docs/data-sources.md +46 -0
  16. alambiq-0.1.0/docs/getting-started.md +102 -0
  17. alambiq-0.1.0/docs/images/report-kinetics.png +0 -0
  18. alambiq-0.1.0/docs/images/report-lanmodulin.png +0 -0
  19. alambiq-0.1.0/docs/install.md +151 -0
  20. alambiq-0.1.0/docs/methods/README.md +36 -0
  21. alambiq-0.1.0/docs/methods/binding-and-qmmm.md +212 -0
  22. alambiq-0.1.0/docs/methods/candidate-models.md +128 -0
  23. alambiq-0.1.0/docs/methods/constructs.md +91 -0
  24. alambiq-0.1.0/docs/methods/embeddings-and-prediction.md +103 -0
  25. alambiq-0.1.0/docs/methods/measurements.md +172 -0
  26. alambiq-0.1.0/docs/methods/operation.md +342 -0
  27. alambiq-0.1.0/docs/methods/proteins.md +92 -0
  28. alambiq-0.1.0/docs/methods/reactions.md +118 -0
  29. alambiq-0.1.0/docs/methods/search-and-alignment.md +118 -0
  30. alambiq-0.1.0/docs/methods/structure-and-dynamics.md +161 -0
  31. alambiq-0.1.0/docs/methods/variant-proposal-benchmark.json +259 -0
  32. alambiq-0.1.0/docs/methods/variant-proposal.md +113 -0
  33. alambiq-0.1.0/docs/operation-formats.md +1197 -0
  34. alambiq-0.1.0/docs/python.md +98 -0
  35. alambiq-0.1.0/docs/reports.md +117 -0
  36. alambiq-0.1.0/environments/binding-free-energy/README.md +163 -0
  37. alambiq-0.1.0/environments/binding-free-energy/environment.yaml +47 -0
  38. alambiq-0.1.0/environments/binding-free-energy/locks/linux-aarch64.cuda13.explicit.txt +349 -0
  39. alambiq-0.1.0/environments/binding-free-energy/locks/linux-aarch64.cuda13.packages.json +4185 -0
  40. alambiq-0.1.0/environments/binding-free-energy/locks/osx-arm64.explicit.txt +308 -0
  41. alambiq-0.1.0/environments/binding-free-energy/locks/osx-arm64.packages.json +3693 -0
  42. alambiq-0.1.0/environments/binding-free-energy/verification.openff-20261003.json +622 -0
  43. alambiq-0.1.0/environments/binding-free-energy/verification.openff-docker-linux-aarch64-20261009.json +228 -0
  44. alambiq-0.1.0/environments/binding-free-energy/verification.openff-linux-aarch64-20261009.json +205 -0
  45. alambiq-0.1.0/environments/binding-free-energy/verification.openff-osx-arm64-20261008.json +169 -0
  46. alambiq-0.1.0/environments/binding-free-energy/verification.runtime-simplification-20261003.json +324 -0
  47. alambiq-0.1.0/environments/boltz2/README.md +101 -0
  48. alambiq-0.1.0/environments/boltz2/environment.linux-aarch64.yaml +7 -0
  49. alambiq-0.1.0/environments/boltz2/environment.yaml +8 -0
  50. alambiq-0.1.0/environments/boltz2/locks/linux-aarch64.conda-packages.json +341 -0
  51. alambiq-0.1.0/environments/boltz2/locks/linux-aarch64.pip-packages.json +701 -0
  52. alambiq-0.1.0/environments/boltz2/locks/osx-arm64.conda-explicit.txt +22 -0
  53. alambiq-0.1.0/environments/boltz2/locks/osx-arm64.conda-packages.json +225 -0
  54. alambiq-0.1.0/environments/boltz2/locks/osx-arm64.pip-freeze.txt +71 -0
  55. alambiq-0.1.0/environments/boltz2/locks/osx-arm64.pip-packages.json +545 -0
  56. alambiq-0.1.0/environments/boltz2/manifest.yaml +153 -0
  57. alambiq-0.1.0/environments/boltz2/requirements.torch-cu130.txt +2 -0
  58. alambiq-0.1.0/environments/boltz2/requirements.txt +1 -0
  59. alambiq-0.1.0/environments/boltz2/resource-lock.osx-arm64.json +40 -0
  60. alambiq-0.1.0/environments/boltz2/verification.linux-aarch64.json +240 -0
  61. alambiq-0.1.0/environments/boltz2/verification.portable-runtime.json +971 -0
  62. alambiq-0.1.0/environments/boltz2-mps/environment.yaml +8 -0
  63. alambiq-0.1.0/environments/boltz2-mps/locks/osx-arm64.pip-freeze.txt +71 -0
  64. alambiq-0.1.0/environments/boltz2-mps/locks/osx-arm64.pip-packages.json +545 -0
  65. alambiq-0.1.0/environments/boltz2-mps/locks/osx-arm64.pip-requirements.txt +67 -0
  66. alambiq-0.1.0/environments/boltz2-mps/manifest.yaml +188 -0
  67. alambiq-0.1.0/environments/docker/Dockerfile +34 -0
  68. alambiq-0.1.0/environments/docker/Dockerfile.boltz +23 -0
  69. alambiq-0.1.0/environments/docker/Dockerfile.complex +22 -0
  70. alambiq-0.1.0/environments/docker/Dockerfile.mmseqs +29 -0
  71. alambiq-0.1.0/environments/docker/Dockerfile.models +24 -0
  72. alambiq-0.1.0/environments/docker/Dockerfile.openfe +34 -0
  73. alambiq-0.1.0/environments/docker/Dockerfile.openmm +20 -0
  74. alambiq-0.1.0/environments/docker/Dockerfile.p2rank +18 -0
  75. alambiq-0.1.0/environments/docker/Dockerfile.qmmm +16 -0
  76. alambiq-0.1.0/environments/docker/Dockerfile.reaction-free-energy +16 -0
  77. alambiq-0.1.0/environments/docker/Dockerfile.tests +18 -0
  78. alambiq-0.1.0/environments/docker/Dockerfile.thermompnn +20 -0
  79. alambiq-0.1.0/environments/docker/README.md +167 -0
  80. alambiq-0.1.0/environments/docker/verification.linux-arm64-spark-20261025.json +176 -0
  81. alambiq-0.1.0/environments/install_openff_sources.py +62 -0
  82. alambiq-0.1.0/environments/openff-complex-preparation/README.md +130 -0
  83. alambiq-0.1.0/environments/openff-complex-preparation/environment.yaml +24 -0
  84. alambiq-0.1.0/environments/openff-complex-preparation/locks/linux-aarch64.explicit.txt +196 -0
  85. alambiq-0.1.0/environments/openff-complex-preparation/locks/linux-aarch64.packages.json +2349 -0
  86. alambiq-0.1.0/environments/openff-complex-preparation/locks/osx-arm64.explicit.txt +180 -0
  87. alambiq-0.1.0/environments/openff-complex-preparation/locks/osx-arm64.packages.json +2157 -0
  88. alambiq-0.1.0/environments/openff-complex-preparation/verification.docker-linux-aarch64-20261009.json +111 -0
  89. alambiq-0.1.0/environments/openff-complex-preparation/verification.linux-aarch64.json +59 -0
  90. alambiq-0.1.0/environments/openff-complex-preparation/verification.migration.json +126 -0
  91. alambiq-0.1.0/environments/openff-complex-preparation/verification.native-joins-linux-aarch64-20261008.json +665 -0
  92. alambiq-0.1.0/environments/openff-complex-preparation/verification.osx-arm64.json +121 -0
  93. alambiq-0.1.0/environments/openff-complex-preparation/verification.predicted-native-osx-arm64-20261008.json +257 -0
  94. alambiq-0.1.0/environments/openff-complex-preparation/verification.predicted-settings-20261008.json +40 -0
  95. alambiq-0.1.0/environments/openff-sources.json +18 -0
  96. alambiq-0.1.0/environments/openmm/README.md +226 -0
  97. alambiq-0.1.0/environments/openmm/environment.apple-ensemble.yaml +8 -0
  98. alambiq-0.1.0/environments/openmm/environment.yaml +9 -0
  99. alambiq-0.1.0/environments/openmm/locks/linux-aarch64.cuda13.explicit.txt +48 -0
  100. alambiq-0.1.0/environments/openmm/locks/linux-aarch64.cuda13.packages.json +573 -0
  101. alambiq-0.1.0/environments/openmm/locks/osx-arm64.apple-ensemble.explicit.txt +39 -0
  102. alambiq-0.1.0/environments/openmm/locks/osx-arm64.apple-ensemble.packages.json +352 -0
  103. alambiq-0.1.0/environments/openmm/locks/osx-arm64.explicit.txt +39 -0
  104. alambiq-0.1.0/environments/openmm/locks/osx-arm64.packages.json +429 -0
  105. alambiq-0.1.0/environments/openmm/manifest.yaml +97 -0
  106. alambiq-0.1.0/environments/openmm/requirements.cuda13.txt +6 -0
  107. alambiq-0.1.0/environments/openmm/verification.bglb-apple-pocket-20261004.json +1402 -0
  108. alambiq-0.1.0/environments/openmm/verification.gb3-50ns-padding1-failure-20261003.json +1973 -0
  109. alambiq-0.1.0/environments/openmm/verification.gb3-padding2-50ns-20261004.json +15391 -0
  110. alambiq-0.1.0/environments/openmm/verification.gb3-padding2-pilot-20261003.json +3506 -0
  111. alambiq-0.1.0/environments/openmm/verification.gb3-pilot-20261003.json +1426 -0
  112. alambiq-0.1.0/environments/openmm/verification.gb3-retained-stage-reanalysis-20261008.json +212 -0
  113. alambiq-0.1.0/environments/openmm/verification.metadynamics-cuda-pme-20261004.json +557 -0
  114. alambiq-0.1.0/environments/openmm/verification.metadynamics-recovery.linux-aarch64.json +115 -0
  115. alambiq-0.1.0/environments/openmm/verification.metadynamics-recovery.osx-arm64.json +228 -0
  116. alambiq-0.1.0/environments/openmm/verification.metadynamics.osx-arm64.json +466 -0
  117. alambiq-0.1.0/environments/openmm/verification.protein-substitutions-20261004.json +256 -0
  118. alambiq-0.1.0/environments/openmm/verification.readiness-and-throughput.json +844 -0
  119. alambiq-0.1.0/environments/p2rank/README.md +105 -0
  120. alambiq-0.1.0/environments/p2rank/environment.yaml +5 -0
  121. alambiq-0.1.0/environments/p2rank/linux-aarch64.packages.json +717 -0
  122. alambiq-0.1.0/environments/p2rank/verification.linux-aarch64.json +282 -0
  123. alambiq-0.1.0/environments/protein-representations/README.md +97 -0
  124. alambiq-0.1.0/environments/protein-representations/environment.yaml +15 -0
  125. alambiq-0.1.0/environments/protein-representations/locks/osx-arm64.conda-packages.json +249 -0
  126. alambiq-0.1.0/environments/protein-representations/locks/osx-arm64.pip-packages.json +689 -0
  127. alambiq-0.1.0/environments/protein-representations/manifest.yaml +31 -0
  128. alambiq-0.1.0/environments/protein-representations/verification.accelerators.linux-aarch64.json +2395 -0
  129. alambiq-0.1.0/environments/protein-representations/verification.portable.osx-arm64.json +125 -0
  130. alambiq-0.1.0/environments/qmmm/README.md +181 -0
  131. alambiq-0.1.0/environments/qmmm/environment.yaml +7 -0
  132. alambiq-0.1.0/environments/qmmm/install_cuda.py +288 -0
  133. alambiq-0.1.0/environments/qmmm/linux-aarch64-cpu.explicit.txt +75 -0
  134. alambiq-0.1.0/environments/qmmm/linux-aarch64-cpu.packages.json +890 -0
  135. alambiq-0.1.0/environments/qmmm/linux-aarch64-cuda13.explicit.txt +88 -0
  136. alambiq-0.1.0/environments/qmmm/linux-aarch64-cuda13.packages.json +1046 -0
  137. alambiq-0.1.0/environments/qmmm/osx-arm64.explicit.txt +70 -0
  138. alambiq-0.1.0/environments/qmmm/osx-arm64.packages.json +830 -0
  139. alambiq-0.1.0/environments/qmmm/verification.cpu-container.json +274 -0
  140. alambiq-0.1.0/environments/qmmm/verification.cuda-install.json +117 -0
  141. alambiq-0.1.0/environments/qmmm/verification.openff-preparation-linux-aarch64-20261008.json +130 -0
  142. alambiq-0.1.0/environments/qmmm/verification.openff-preparation-osx-arm64-20261008.json +188 -0
  143. alambiq-0.1.0/environments/reaction-free-energy/README.md +82 -0
  144. alambiq-0.1.0/environments/reaction-free-energy/environment.yaml +6 -0
  145. alambiq-0.1.0/environments/reaction-free-energy/locks/linux-aarch64.explicit.txt +43 -0
  146. alambiq-0.1.0/environments/reaction-free-energy/locks/linux-aarch64.packages.json +470 -0
  147. alambiq-0.1.0/environments/reaction-free-energy/locks/osx-arm64.explicit.txt +38 -0
  148. alambiq-0.1.0/environments/reaction-free-energy/locks/osx-arm64.packages.json +342 -0
  149. alambiq-0.1.0/environments/reaction-free-energy/verification.linux-aarch64.json +1046 -0
  150. alambiq-0.1.0/environments/thermompnn/BGLB_BENCHMARK.md +107 -0
  151. alambiq-0.1.0/environments/thermompnn/README.md +134 -0
  152. alambiq-0.1.0/environments/thermompnn/benchmark_bglb.py +297 -0
  153. alambiq-0.1.0/environments/thermompnn/bglb-protocol.json +78 -0
  154. alambiq-0.1.0/environments/thermompnn/environment.yaml +10 -0
  155. alambiq-0.1.0/environments/thermompnn/requirements.osx-arm64.txt +11 -0
  156. alambiq-0.1.0/environments/thermompnn/verification.benchstab-eligibility.json +4328 -0
  157. alambiq-0.1.0/environments/thermompnn/verification.bglb-functional-stability.json +2004 -0
  158. alambiq-0.1.0/environments/thermompnn/verification.first-use.osx-arm64.json +273 -0
  159. alambiq-0.1.0/environments/thermompnn/verification.osx-arm64.json +787 -0
  160. alambiq-0.1.0/examples/README.md +71 -0
  161. alambiq-0.1.0/examples/cofactor-regeneration/README.md +34 -0
  162. alambiq-0.1.0/examples/cofactor-regeneration/assess-with.json +18 -0
  163. alambiq-0.1.0/examples/cofactor-regeneration/assess-without.json +18 -0
  164. alambiq-0.1.0/examples/cofactor-regeneration/campaign.yaml +25 -0
  165. alambiq-0.1.0/examples/cofactor-regeneration/with-regeneration.json +161 -0
  166. alambiq-0.1.0/examples/cofactor-regeneration/without-regeneration.json +126 -0
  167. alambiq-0.1.0/examples/connected-investigation/README.md +80 -0
  168. alambiq-0.1.0/examples/connected-investigation/campaign.yaml +107 -0
  169. alambiq-0.1.0/examples/connected-investigation/lysozyme.fasta +2 -0
  170. alambiq-0.1.0/examples/connected-investigation/panel.json +174 -0
  171. alambiq-0.1.0/examples/connected-investigation/prepare.py +283 -0
  172. alambiq-0.1.0/examples/connected-investigation/progress.json +112 -0
  173. alambiq-0.1.0/examples/connected-investigation/rates.csv +11 -0
  174. alambiq-0.1.0/examples/connected-investigation/returned.csv +19 -0
  175. alambiq-0.1.0/examples/connected-investigation/scores.json +1 -0
  176. alambiq-0.1.0/examples/connected-investigation/template.json +72 -0
  177. alambiq-0.1.0/examples/connected-investigation/truth.json +40 -0
  178. alambiq-0.1.0/examples/ensemble-vs-nmr/1P7E.cif +2155 -0
  179. alambiq-0.1.0/examples/ensemble-vs-nmr/README.md +40 -0
  180. alambiq-0.1.0/examples/ensemble-vs-nmr/campaign.yaml +305 -0
  181. alambiq-0.1.0/examples/kinetics-from-measurements/README.md +29 -0
  182. alambiq-0.1.0/examples/kinetics-from-measurements/campaign.yaml +39 -0
  183. alambiq-0.1.0/examples/kinetics-from-measurements/rates.csv +11 -0
  184. alambiq-0.1.0/examples/lanmodulin-comparison/8DQ2.cif +7263 -0
  185. alambiq-0.1.0/examples/lanmodulin-comparison/8FNS.cif +3986 -0
  186. alambiq-0.1.0/examples/lanmodulin-comparison/A0A4V2JDD3.json +1 -0
  187. alambiq-0.1.0/examples/lanmodulin-comparison/C5B164.json +1 -0
  188. alambiq-0.1.0/examples/lanmodulin-comparison/README.md +109 -0
  189. alambiq-0.1.0/examples/lanmodulin-comparison/campaign.yaml +68 -0
  190. alambiq-0.1.0/examples/lanmodulin-comparison/comparison.a3m +4 -0
  191. alambiq-0.1.0/examples/lanmodulin-comparison/context-proteins.fasta +20 -0
  192. alambiq-0.1.0/examples/lanmodulin-comparison/context.gff3 +13 -0
  193. alambiq-0.1.0/examples/lanmodulin-comparison/hans.fasta +2 -0
  194. alambiq-0.1.0/examples/lanmodulin-comparison/lanm-pair.fasta +4 -0
  195. alambiq-0.1.0/examples/lanmodulin-comparison/panel.fasta +24 -0
  196. alambiq-0.1.0/examples/lanmodulin-comparison/query.fasta +2 -0
  197. alambiq-0.1.0/examples/measured-variant-rounds/README.md +40 -0
  198. alambiq-0.1.0/examples/measured-variant-rounds/campaign.yaml +48 -0
  199. alambiq-0.1.0/examples/measured-variant-rounds/initial-observations.csv +186 -0
  200. alambiq-0.1.0/examples/measured-variant-rounds/panel.json +2709 -0
  201. alambiq-0.1.0/examples/operation-from-progress-curves/EAG-TbSADH-first-order.json +214 -0
  202. alambiq-0.1.0/examples/operation-from-progress-curves/EAG-TbSADH-saturation.json +246 -0
  203. alambiq-0.1.0/examples/operation-from-progress-curves/README.md +45 -0
  204. alambiq-0.1.0/examples/operation-from-progress-curves/campaign.yaml +26 -0
  205. alambiq-0.1.0/examples/operation-from-progress-curves/free-TbSADH-first-order.json +214 -0
  206. alambiq-0.1.0/examples/operation-from-progress-curves/free-TbSADH-saturation.json +246 -0
  207. alambiq-0.1.0/examples/operation-from-progress-curves/source-measurements.json +43 -0
  208. alambiq-0.1.0/examples/pockets-and-complex/1A3N.cif +8411 -0
  209. alambiq-0.1.0/examples/pockets-and-complex/P69905.json +1 -0
  210. alambiq-0.1.0/examples/pockets-and-complex/README.md +38 -0
  211. alambiq-0.1.0/examples/pockets-and-complex/campaign.yaml +15 -0
  212. alambiq-0.1.0/examples/pockets-and-complex/complex.yaml +17 -0
  213. alambiq-0.1.0/examples/pockets-and-complex/hemoglobin-alpha.fasta +2 -0
  214. alambiq-0.1.0/examples/protein-first-look/1A3N.cif +8411 -0
  215. alambiq-0.1.0/examples/protein-first-look/P69905.json +1 -0
  216. alambiq-0.1.0/examples/protein-first-look/README.md +37 -0
  217. alambiq-0.1.0/examples/protein-first-look/campaign.yaml +9 -0
  218. alambiq-0.1.0/examples/protein-first-look/hemoglobin-alpha.fasta +2 -0
  219. alambiq-0.1.0/examples/relatives-and-context/README.md +43 -0
  220. alambiq-0.1.0/examples/relatives-and-context/campaign.yaml +24 -0
  221. alambiq-0.1.0/examples/relatives-and-context/context.gff3 +31 -0
  222. alambiq-0.1.0/examples/relatives-and-context/globin-search.a3m +8 -0
  223. alambiq-0.1.0/examples/relatives-and-context/hemoglobin-alpha.fasta +2 -0
  224. alambiq-0.1.0/examples/relatives-and-context/proteins.fasta +58 -0
  225. alambiq-0.1.0/examples/relatives-and-context/representation-panel.fasta +12 -0
  226. alambiq-0.1.0/examples/relatives-and-context/representation-panel.sources.json +60 -0
  227. alambiq-0.1.0/examples/relatives-and-context/subset.json +19 -0
  228. alambiq-0.1.0/examples/representative-panel/README.md +36 -0
  229. alambiq-0.1.0/examples/representative-panel/campaign.yaml +7 -0
  230. alambiq-0.1.0/examples/representative-panel/embed.yaml +7 -0
  231. alambiq-0.1.0/examples/representative-panel/embeddings.json +1 -0
  232. alambiq-0.1.0/examples/representative-panel/representation-panel.fasta +12 -0
  233. alambiq-0.1.0/examples/representative-panel/representation-panel.sources.json +60 -0
  234. alambiq-0.1.0/examples/transformation-and-routes/README.md +39 -0
  235. alambiq-0.1.0/examples/transformation-and-routes/campaign.yaml +51 -0
  236. alambiq-0.1.0/examples/transformation-to-enzymes/README.md +46 -0
  237. alambiq-0.1.0/examples/transformation-to-enzymes/campaign.yaml +26 -0
  238. alambiq-0.1.0/examples/transformation-to-enzymes/candidates.fasta +14 -0
  239. alambiq-0.1.0/examples/transformation-to-enzymes/references.fasta +6 -0
  240. alambiq-0.1.0/examples/variant-to-construct/README.md +40 -0
  241. alambiq-0.1.0/examples/variant-to-construct/campaign.yaml +33 -0
  242. alambiq-0.1.0/examples/variant-to-construct/codon-choices.json +22 -0
  243. alambiq-0.1.0/examples/variant-to-construct/linker.faa +2 -0
  244. alambiq-0.1.0/examples/variant-to-construct/puc19.gb +103 -0
  245. alambiq-0.1.0/examples/variant-to-construct/tag.faa +2 -0
  246. alambiq-0.1.0/examples/variant-to-construct/variant.fasta +2 -0
  247. alambiq-0.1.0/pyproject.toml +90 -0
  248. alambiq-0.1.0/setup.cfg +4 -0
  249. alambiq-0.1.0/src/alambiq/__init__.py +65 -0
  250. alambiq-0.1.0/src/alambiq/__main__.py +4 -0
  251. alambiq-0.1.0/src/alambiq/_native_process.py +155 -0
  252. alambiq-0.1.0/src/alambiq/api.py +192 -0
  253. alambiq-0.1.0/src/alambiq/capabilities/__init__.py +85 -0
  254. alambiq-0.1.0/src/alambiq/capabilities/characterize/__init__.py +0 -0
  255. alambiq-0.1.0/src/alambiq/capabilities/characterize/enzyme_characterize_candidates.py +283 -0
  256. alambiq-0.1.0/src/alambiq/capabilities/characterize/enzyme_characterize_candidates_report.py +77 -0
  257. alambiq-0.1.0/src/alambiq/capabilities/characterize/enzyme_retrieve_candidates.py +220 -0
  258. alambiq-0.1.0/src/alambiq/capabilities/characterize/enzyme_retrieve_candidates_report.py +46 -0
  259. alambiq-0.1.0/src/alambiq/capabilities/characterize/genome_inspect_context.py +215 -0
  260. alambiq-0.1.0/src/alambiq/capabilities/characterize/genome_inspect_context_report.py +46 -0
  261. alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_complete.py +282 -0
  262. alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_complete_report.py +33 -0
  263. alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_embed.py +216 -0
  264. alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_embed_report.py +23 -0
  265. alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_explore_embeddings.py +185 -0
  266. alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_explore_embeddings_report.py +59 -0
  267. alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_inspect.py +281 -0
  268. alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_inspect_report.py +75 -0
  269. alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_match_profiles.py +287 -0
  270. alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_match_profiles_report.py +58 -0
  271. alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_predict_stability_change.py +296 -0
  272. alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_predict_stability_change_report.py +30 -0
  273. alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_predict_tracks.py +206 -0
  274. alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_predict_tracks_report.py +32 -0
  275. alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_score_substitutions.py +226 -0
  276. alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_score_substitutions_report.py +66 -0
  277. alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_search.py +150 -0
  278. alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_search_report.py +34 -0
  279. alambiq-0.1.0/src/alambiq/capabilities/characterize/science/__init__.py +0 -0
  280. alambiq-0.1.0/src/alambiq/capabilities/characterize/science/alignment.py +195 -0
  281. alambiq-0.1.0/src/alambiq/capabilities/characterize/science/annotation.py +232 -0
  282. alambiq-0.1.0/src/alambiq/capabilities/characterize/science/boltz.py +113 -0
  283. alambiq-0.1.0/src/alambiq/capabilities/characterize/science/completion.py +105 -0
  284. alambiq-0.1.0/src/alambiq/capabilities/characterize/science/confidence.py +110 -0
  285. alambiq-0.1.0/src/alambiq/capabilities/characterize/science/dossier.py +323 -0
  286. alambiq-0.1.0/src/alambiq/capabilities/characterize/science/embeddings.py +269 -0
  287. alambiq-0.1.0/src/alambiq/capabilities/characterize/science/enzyme.py +332 -0
  288. alambiq-0.1.0/src/alambiq/capabilities/characterize/science/genome.py +328 -0
  289. alambiq-0.1.0/src/alambiq/capabilities/characterize/science/msa.py +103 -0
  290. alambiq-0.1.0/src/alambiq/capabilities/characterize/science/profiles.py +198 -0
  291. alambiq-0.1.0/src/alambiq/capabilities/characterize/science/stability.py +196 -0
  292. alambiq-0.1.0/src/alambiq/capabilities/characterize/sequence_generate_msa.py +283 -0
  293. alambiq-0.1.0/src/alambiq/capabilities/characterize/sequence_generate_msa_report.py +45 -0
  294. alambiq-0.1.0/src/alambiq/capabilities/characterize/sequence_inspect_msa.py +180 -0
  295. alambiq-0.1.0/src/alambiq/capabilities/characterize/sequence_inspect_msa_report.py +102 -0
  296. alambiq-0.1.0/src/alambiq/capabilities/characterize/structure_predict_biomolecular_complex.py +386 -0
  297. alambiq-0.1.0/src/alambiq/capabilities/characterize/structure_predict_biomolecular_complex_report.py +74 -0
  298. alambiq-0.1.0/src/alambiq/capabilities/engineer/__init__.py +0 -0
  299. alambiq-0.1.0/src/alambiq/capabilities/engineer/candidate_fit.py +178 -0
  300. alambiq-0.1.0/src/alambiq/capabilities/engineer/candidate_fit_report.py +58 -0
  301. alambiq-0.1.0/src/alambiq/capabilities/engineer/candidate_select.py +225 -0
  302. alambiq-0.1.0/src/alambiq/capabilities/engineer/candidate_select_report.py +59 -0
  303. alambiq-0.1.0/src/alambiq/capabilities/engineer/coding_optimize.py +154 -0
  304. alambiq-0.1.0/src/alambiq/capabilities/engineer/coding_optimize_report.py +39 -0
  305. alambiq-0.1.0/src/alambiq/capabilities/engineer/construct_assemble.py +157 -0
  306. alambiq-0.1.0/src/alambiq/capabilities/engineer/construct_assemble_report.py +26 -0
  307. alambiq-0.1.0/src/alambiq/capabilities/engineer/construct_compose.py +193 -0
  308. alambiq-0.1.0/src/alambiq/capabilities/engineer/construct_compose_report.py +32 -0
  309. alambiq-0.1.0/src/alambiq/capabilities/engineer/science/__init__.py +0 -0
  310. alambiq-0.1.0/src/alambiq/capabilities/engineer/science/assembly.py +482 -0
  311. alambiq-0.1.0/src/alambiq/capabilities/engineer/science/candidates.py +494 -0
  312. alambiq-0.1.0/src/alambiq/capabilities/engineer/science/coding.py +250 -0
  313. alambiq-0.1.0/src/alambiq/capabilities/engineer/science/composition.py +238 -0
  314. alambiq-0.1.0/src/alambiq/capabilities/engineer/science/selection.py +415 -0
  315. alambiq-0.1.0/src/alambiq/capabilities/engineer/science/variants.py +217 -0
  316. alambiq-0.1.0/src/alambiq/capabilities/engineer/variant_propose.py +266 -0
  317. alambiq-0.1.0/src/alambiq/capabilities/engineer/variant_propose_report.py +49 -0
  318. alambiq-0.1.0/src/alambiq/capabilities/investigate/__init__.py +0 -0
  319. alambiq-0.1.0/src/alambiq/capabilities/investigate/reaction_analyze_enzyme_panel.py +212 -0
  320. alambiq-0.1.0/src/alambiq/capabilities/investigate/reaction_analyze_enzyme_panel_report.py +48 -0
  321. alambiq-0.1.0/src/alambiq/capabilities/investigate/reaction_estimate_thermodynamics.py +344 -0
  322. alambiq-0.1.0/src/alambiq/capabilities/investigate/reaction_estimate_thermodynamics_report.py +61 -0
  323. alambiq-0.1.0/src/alambiq/capabilities/investigate/reaction_explore_routes.py +347 -0
  324. alambiq-0.1.0/src/alambiq/capabilities/investigate/reaction_explore_routes_report.py +73 -0
  325. alambiq-0.1.0/src/alambiq/capabilities/investigate/reaction_inspect.py +312 -0
  326. alambiq-0.1.0/src/alambiq/capabilities/investigate/reaction_inspect_report.py +80 -0
  327. alambiq-0.1.0/src/alambiq/capabilities/investigate/science/__init__.py +0 -0
  328. alambiq-0.1.0/src/alambiq/capabilities/investigate/science/binding.py +673 -0
  329. alambiq-0.1.0/src/alambiq/capabilities/investigate/science/comparison.py +330 -0
  330. alambiq-0.1.0/src/alambiq/capabilities/investigate/science/coupling_naming.py +125 -0
  331. alambiq-0.1.0/src/alambiq/capabilities/investigate/science/couplings.py +209 -0
  332. alambiq-0.1.0/src/alambiq/capabilities/investigate/science/enzyme_panel.py +568 -0
  333. alambiq-0.1.0/src/alambiq/capabilities/investigate/science/observables.py +100 -0
  334. alambiq-0.1.0/src/alambiq/capabilities/investigate/science/periodic_images.py +121 -0
  335. alambiq-0.1.0/src/alambiq/capabilities/investigate/science/pockets.py +237 -0
  336. alambiq-0.1.0/src/alambiq/capabilities/investigate/science/predicted_complex.py +274 -0
  337. alambiq-0.1.0/src/alambiq/capabilities/investigate/science/qmmm.py +87 -0
  338. alambiq-0.1.0/src/alambiq/capabilities/investigate/science/rbfe.py +266 -0
  339. alambiq-0.1.0/src/alambiq/capabilities/investigate/science/reactions.py +430 -0
  340. alambiq-0.1.0/src/alambiq/capabilities/investigate/science/reactive.py +925 -0
  341. alambiq-0.1.0/src/alambiq/capabilities/investigate/science/replicas.py +282 -0
  342. alambiq-0.1.0/src/alambiq/capabilities/investigate/science/routes.py +568 -0
  343. alambiq-0.1.0/src/alambiq/capabilities/investigate/science/sampling.py +180 -0
  344. alambiq-0.1.0/src/alambiq/capabilities/investigate/science/simulation.py +190 -0
  345. alambiq-0.1.0/src/alambiq/capabilities/investigate/science/thermodynamics.py +477 -0
  346. alambiq-0.1.0/src/alambiq/capabilities/investigate/science/trajectory.py +646 -0
  347. alambiq-0.1.0/src/alambiq/capabilities/investigate/science/umbrella.py +203 -0
  348. alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_analyze_binding_free_energy.py +433 -0
  349. alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_analyze_binding_free_energy_report.py +89 -0
  350. alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_analyze_reaction_free_energy.py +307 -0
  351. alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_analyze_reaction_free_energy_report.py +93 -0
  352. alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_compare_replica_structures.py +292 -0
  353. alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_compare_replica_structures_report.py +73 -0
  354. alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_compare_scalar_couplings.py +457 -0
  355. alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_compare_scalar_couplings_report.py +62 -0
  356. alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_evaluate_qmmm_state.py +252 -0
  357. alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_evaluate_qmmm_state_report.py +57 -0
  358. alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_inspect_trajectory.py +392 -0
  359. alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_inspect_trajectory_report.py +93 -0
  360. alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_run_metadynamics.py +315 -0
  361. alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_run_metadynamics_report.py +60 -0
  362. alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_run_molecular_dynamics.py +314 -0
  363. alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_run_molecular_dynamics_report.py +50 -0
  364. alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_run_qmmm_dynamics.py +279 -0
  365. alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_run_qmmm_dynamics_report.py +36 -0
  366. alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_run_relative_free_energy.py +318 -0
  367. alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_run_relative_free_energy_report.py +43 -0
  368. alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_compare.py +197 -0
  369. alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_compare_report.py +68 -0
  370. alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_detect_binding_pockets.py +228 -0
  371. alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_detect_binding_pockets_report.py +42 -0
  372. alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_finite_environment.py +226 -0
  373. alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_finite_environment_report.py +39 -0
  374. alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_predicted_complex_for_dynamics.py +262 -0
  375. alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_predicted_complex_for_dynamics_report.py +52 -0
  376. alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_protein_ligand_system.py +359 -0
  377. alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_protein_ligand_system_report.py +81 -0
  378. alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_protein_system.py +410 -0
  379. alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_protein_system_report.py +60 -0
  380. alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_reactive_coordinates.py +332 -0
  381. alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_reactive_coordinates_report.py +72 -0
  382. alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_relative_binding_inputs.py +355 -0
  383. alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_relative_binding_inputs_report.py +58 -0
  384. alambiq-0.1.0/src/alambiq/capabilities/measure/__init__.py +0 -0
  385. alambiq-0.1.0/src/alambiq/capabilities/measure/assay_balance.py +178 -0
  386. alambiq-0.1.0/src/alambiq/capabilities/measure/assay_fit.py +433 -0
  387. alambiq-0.1.0/src/alambiq/capabilities/measure/assay_fit_report.py +137 -0
  388. alambiq-0.1.0/src/alambiq/capabilities/measure/assay_inspect.py +187 -0
  389. alambiq-0.1.0/src/alambiq/capabilities/measure/balance_report.py +37 -0
  390. alambiq-0.1.0/src/alambiq/capabilities/measure/inspect_report.py +25 -0
  391. alambiq-0.1.0/src/alambiq/capabilities/measure/science/__init__.py +5 -0
  392. alambiq-0.1.0/src/alambiq/capabilities/measure/science/balance.py +279 -0
  393. alambiq-0.1.0/src/alambiq/capabilities/measure/science/fitting.py +1109 -0
  394. alambiq-0.1.0/src/alambiq/capabilities/measure/science/inspection.py +609 -0
  395. alambiq-0.1.0/src/alambiq/capabilities/measure/science/replicates.py +144 -0
  396. alambiq-0.1.0/src/alambiq/capabilities/measure/science/tables.py +250 -0
  397. alambiq-0.1.0/src/alambiq/capabilities/operate/__init__.py +0 -0
  398. alambiq-0.1.0/src/alambiq/capabilities/operate/compare.py +192 -0
  399. alambiq-0.1.0/src/alambiq/capabilities/operate/compare_report.py +36 -0
  400. alambiq-0.1.0/src/alambiq/capabilities/operate/define.py +404 -0
  401. alambiq-0.1.0/src/alambiq/capabilities/operate/define_report.py +113 -0
  402. alambiq-0.1.0/src/alambiq/capabilities/operate/fit.py +169 -0
  403. alambiq-0.1.0/src/alambiq/capabilities/operate/fit_report.py +40 -0
  404. alambiq-0.1.0/src/alambiq/capabilities/operate/progress_chart.py +58 -0
  405. alambiq-0.1.0/src/alambiq/capabilities/operate/propagate.py +237 -0
  406. alambiq-0.1.0/src/alambiq/capabilities/operate/propagate_report.py +74 -0
  407. alambiq-0.1.0/src/alambiq/capabilities/operate/resources.py +154 -0
  408. alambiq-0.1.0/src/alambiq/capabilities/operate/resources_report.py +52 -0
  409. alambiq-0.1.0/src/alambiq/capabilities/operate/science/__init__.py +5 -0
  410. alambiq-0.1.0/src/alambiq/capabilities/operate/science/comparison.py +341 -0
  411. alambiq-0.1.0/src/alambiq/capabilities/operate/science/definition.py +354 -0
  412. alambiq-0.1.0/src/alambiq/capabilities/operate/science/fitting.py +606 -0
  413. alambiq-0.1.0/src/alambiq/capabilities/operate/science/performance.py +430 -0
  414. alambiq-0.1.0/src/alambiq/capabilities/operate/science/propagation.py +123 -0
  415. alambiq-0.1.0/src/alambiq/capabilities/operate/science/resources.py +243 -0
  416. alambiq-0.1.0/src/alambiq/capabilities/operate/science/simulation.py +987 -0
  417. alambiq-0.1.0/src/alambiq/capabilities/operate/simulate.py +138 -0
  418. alambiq-0.1.0/src/alambiq/capabilities/operate/simulate_report.py +52 -0
  419. alambiq-0.1.0/src/alambiq/capabilities/operate/summarize.py +157 -0
  420. alambiq-0.1.0/src/alambiq/capabilities/operate/summarize_report.py +63 -0
  421. alambiq-0.1.0/src/alambiq/capabilities/shared/__init__.py +1 -0
  422. alambiq-0.1.0/src/alambiq/capabilities/shared/records.py +67 -0
  423. alambiq-0.1.0/src/alambiq/capabilities/shared/sequences.py +72 -0
  424. alambiq-0.1.0/src/alambiq/capabilities/shared/sources.py +76 -0
  425. alambiq-0.1.0/src/alambiq/cli.py +275 -0
  426. alambiq-0.1.0/src/alambiq/core/__init__.py +1 -0
  427. alambiq-0.1.0/src/alambiq/core/cache.py +127 -0
  428. alambiq-0.1.0/src/alambiq/core/campaigns.py +109 -0
  429. alambiq-0.1.0/src/alambiq/core/context.py +71 -0
  430. alambiq-0.1.0/src/alambiq/core/envs.py +350 -0
  431. alambiq-0.1.0/src/alambiq/core/execution.py +337 -0
  432. alambiq-0.1.0/src/alambiq/core/loader.py +172 -0
  433. alambiq-0.1.0/src/alambiq/core/model.py +95 -0
  434. alambiq-0.1.0/src/alambiq/core/records.py +238 -0
  435. alambiq-0.1.0/src/alambiq/core/registry.py +204 -0
  436. alambiq-0.1.0/src/alambiq/core/resources.py +370 -0
  437. alambiq-0.1.0/src/alambiq/core/store.py +113 -0
  438. alambiq-0.1.0/src/alambiq/engines/P2RankOffline.java +13 -0
  439. alambiq-0.1.0/src/alambiq/engines/__init__.py +0 -0
  440. alambiq-0.1.0/src/alambiq/engines/_runner.py +74 -0
  441. alambiq-0.1.0/src/alambiq/engines/boltz_download.py +30 -0
  442. alambiq-0.1.0/src/alambiq/engines/boltz_predict.py +345 -0
  443. alambiq-0.1.0/src/alambiq/engines/echo_probe.py +26 -0
  444. alambiq-0.1.0/src/alambiq/engines/esm3_predict.py +280 -0
  445. alambiq-0.1.0/src/alambiq/engines/esmc_embed.py +96 -0
  446. alambiq-0.1.0/src/alambiq/engines/esmc_score.py +102 -0
  447. alambiq-0.1.0/src/alambiq/engines/hints.py +29 -0
  448. alambiq-0.1.0/src/alambiq/engines/mmseqs_msa.py +91 -0
  449. alambiq-0.1.0/src/alambiq/engines/mmseqs_panel.py +139 -0
  450. alambiq-0.1.0/src/alambiq/engines/mmseqs_profiles.py +114 -0
  451. alambiq-0.1.0/src/alambiq/engines/mmseqs_search.py +150 -0
  452. alambiq-0.1.0/src/alambiq/engines/openfe_prepare_binding.py +358 -0
  453. alambiq-0.1.0/src/alambiq/engines/openfe_rbfe.py +321 -0
  454. alambiq-0.1.0/src/alambiq/engines/openff_finite_environment.py +491 -0
  455. alambiq-0.1.0/src/alambiq/engines/openff_prepare_complex.py +489 -0
  456. alambiq-0.1.0/src/alambiq/engines/openff_prepare_system.py +302 -0
  457. alambiq-0.1.0/src/alambiq/engines/openmm_common.py +242 -0
  458. alambiq-0.1.0/src/alambiq/engines/openmm_md.py +477 -0
  459. alambiq-0.1.0/src/alambiq/engines/openmm_metadynamics.py +334 -0
  460. alambiq-0.1.0/src/alambiq/engines/openmm_prepare.py +686 -0
  461. alambiq-0.1.0/src/alambiq/engines/openmm_xml.py +57 -0
  462. alambiq-0.1.0/src/alambiq/engines/p2rank_predict.py +111 -0
  463. alambiq-0.1.0/src/alambiq/engines/qmmm_coupling.py +212 -0
  464. alambiq-0.1.0/src/alambiq/engines/qmmm_dynamics_runner.py +357 -0
  465. alambiq-0.1.0/src/alambiq/engines/qmmm_native.py +321 -0
  466. alambiq-0.1.0/src/alambiq/engines/qmmm_pyscf.py +416 -0
  467. alambiq-0.1.0/src/alambiq/engines/qmmm_runner.py +422 -0
  468. alambiq-0.1.0/src/alambiq/engines/thermompnn_predict.py +121 -0
  469. alambiq-0.1.0/src/alambiq/engines/umbrella_analysis.py +806 -0
  470. alambiq-0.1.0/src/alambiq/report/__init__.py +0 -0
  471. alambiq-0.1.0/src/alambiq/report/assets/3Dmol-min.js +2 -0
  472. alambiq-0.1.0/src/alambiq/report/assets/3Dmol-min.js.LICENSE.txt +5 -0
  473. alambiq-0.1.0/src/alambiq/report/assets/LICENSE +90 -0
  474. alambiq-0.1.0/src/alambiq/report/assets/README.md +18 -0
  475. alambiq-0.1.0/src/alambiq/report/charts.py +417 -0
  476. alambiq-0.1.0/src/alambiq/report/page.py +204 -0
  477. alambiq-0.1.0/src/alambiq/report/viewers.py +196 -0
  478. alambiq-0.1.0/src/alambiq/resources/THIRD_PARTY_NOTICES.md +35 -0
  479. alambiq-0.1.0/src/alambiq/resources/__init__.py +1 -0
  480. alambiq-0.1.0/src/alambiq/resources/boltz2-2.2.1.json +41 -0
  481. alambiq-0.1.0/src/alambiq/resources/esm3-small.json +80 -0
  482. alambiq-0.1.0/src/alambiq/resources/esmc-300m.json +56 -0
  483. alambiq-0.1.0/src/alambiq/resources/p2rank-2.5.1.json +3014 -0
  484. alambiq-0.1.0/src/alambiq/resources/pfam-38.2-profiles.json +75 -0
  485. alambiq-0.1.0/src/alambiq/resources/thermompnn.json +68 -0
  486. alambiq-0.1.0/src/alambiq/resources/uniref50-2026_02.json +81 -0
  487. alambiq-0.1.0/src/alambiq.egg-info/PKG-INFO +171 -0
  488. alambiq-0.1.0/src/alambiq.egg-info/SOURCES.txt +615 -0
  489. alambiq-0.1.0/src/alambiq.egg-info/dependency_links.txt +1 -0
  490. alambiq-0.1.0/src/alambiq.egg-info/entry_points.txt +2 -0
  491. alambiq-0.1.0/src/alambiq.egg-info/requires.txt +46 -0
  492. alambiq-0.1.0/src/alambiq.egg-info/top_level.txt +1 -0
  493. alambiq-0.1.0/tests/core/__init__.py +0 -0
  494. alambiq-0.1.0/tests/core/native_signal_fixture.py +82 -0
  495. alambiq-0.1.0/tests/core/test_candidate_strategies.py +287 -0
  496. alambiq-0.1.0/tests/core/test_cli_resources.py +167 -0
  497. alambiq-0.1.0/tests/core/test_condition_fits.py +498 -0
  498. alambiq-0.1.0/tests/core/test_conformance.py +224 -0
  499. alambiq-0.1.0/tests/core/test_connected_investigation.py +173 -0
  500. alambiq-0.1.0/tests/core/test_construct_capabilities.py +269 -0
  501. alambiq-0.1.0/tests/core/test_core_imports.py +101 -0
  502. alambiq-0.1.0/tests/core/test_determinism.py +93 -0
  503. alambiq-0.1.0/tests/core/test_docker_files.py +62 -0
  504. alambiq-0.1.0/tests/core/test_documentation.py +130 -0
  505. alambiq-0.1.0/tests/core/test_engine_launcher.py +369 -0
  506. alambiq-0.1.0/tests/core/test_engine_openff_finite.py +263 -0
  507. alambiq-0.1.0/tests/core/test_engine_qmmm_coupling.py +277 -0
  508. alambiq-0.1.0/tests/core/test_engine_qmmm_dynamics.py +215 -0
  509. alambiq-0.1.0/tests/core/test_engine_qmmm_native.py +285 -0
  510. alambiq-0.1.0/tests/core/test_engine_qmmm_pyscf.py +400 -0
  511. alambiq-0.1.0/tests/core/test_engine_qmmm_state.py +353 -0
  512. alambiq-0.1.0/tests/core/test_engine_suites.py +49 -0
  513. alambiq-0.1.0/tests/core/test_engine_umbrella_analysis.py +673 -0
  514. alambiq-0.1.0/tests/core/test_engineering_capabilities.py +379 -0
  515. alambiq-0.1.0/tests/core/test_enzyme_capabilities.py +396 -0
  516. alambiq-0.1.0/tests/core/test_esm3_capabilities.py +569 -0
  517. alambiq-0.1.0/tests/core/test_examples.py +274 -0
  518. alambiq-0.1.0/tests/core/test_execution.py +517 -0
  519. alambiq-0.1.0/tests/core/test_first_mistakes.py +326 -0
  520. alambiq-0.1.0/tests/core/test_genome_inspect_context.py +229 -0
  521. alambiq-0.1.0/tests/core/test_licenses.py +75 -0
  522. alambiq-0.1.0/tests/core/test_loader.py +130 -0
  523. alambiq-0.1.0/tests/core/test_measurement_options.py +548 -0
  524. alambiq-0.1.0/tests/core/test_native_capture.py +92 -0
  525. alambiq-0.1.0/tests/core/test_native_descendants.py +53 -0
  526. alambiq-0.1.0/tests/core/test_native_process.py +139 -0
  527. alambiq-0.1.0/tests/core/test_native_signal.py +90 -0
  528. alambiq-0.1.0/tests/core/test_operating_conditions.py +907 -0
  529. alambiq-0.1.0/tests/core/test_operation_capabilities.py +338 -0
  530. alambiq-0.1.0/tests/core/test_operation_define.py +484 -0
  531. alambiq-0.1.0/tests/core/test_operation_propagate.py +448 -0
  532. alambiq-0.1.0/tests/core/test_option_coverage.py +535 -0
  533. alambiq-0.1.0/tests/core/test_pilot_capabilities.py +304 -0
  534. alambiq-0.1.0/tests/core/test_protein_embed.py +286 -0
  535. alambiq-0.1.0/tests/core/test_protein_explore_embeddings.py +339 -0
  536. alambiq-0.1.0/tests/core/test_protein_inspect.py +309 -0
  537. alambiq-0.1.0/tests/core/test_protein_match_profiles.py +345 -0
  538. alambiq-0.1.0/tests/core/test_protein_predict_stability_change.py +455 -0
  539. alambiq-0.1.0/tests/core/test_protein_score_substitutions.py +212 -0
  540. alambiq-0.1.0/tests/core/test_reaction_analyze_enzyme_panel.py +689 -0
  541. alambiq-0.1.0/tests/core/test_reaction_estimate_thermodynamics.py +518 -0
  542. alambiq-0.1.0/tests/core/test_reaction_explore_routes.py +423 -0
  543. alambiq-0.1.0/tests/core/test_reaction_inspect.py +454 -0
  544. alambiq-0.1.0/tests/core/test_relocation.py +240 -0
  545. alambiq-0.1.0/tests/core/test_report_lint.py +325 -0
  546. alambiq-0.1.0/tests/core/test_report_visuals.py +935 -0
  547. alambiq-0.1.0/tests/core/test_resources.py +456 -0
  548. alambiq-0.1.0/tests/core/test_reuse_identity.py +416 -0
  549. alambiq-0.1.0/tests/core/test_run_records.py +272 -0
  550. alambiq-0.1.0/tests/core/test_runtime_budgets.py +46 -0
  551. alambiq-0.1.0/tests/core/test_sequence_generate_msa.py +467 -0
  552. alambiq-0.1.0/tests/core/test_sequence_inspect_msa.py +244 -0
  553. alambiq-0.1.0/tests/core/test_simulation_analyze_binding_free_energy.py +639 -0
  554. alambiq-0.1.0/tests/core/test_simulation_analyze_reaction_free_energy.py +428 -0
  555. alambiq-0.1.0/tests/core/test_simulation_compare_replica_structures.py +603 -0
  556. alambiq-0.1.0/tests/core/test_simulation_compare_scalar_couplings.py +649 -0
  557. alambiq-0.1.0/tests/core/test_simulation_evaluate_qmmm_state.py +388 -0
  558. alambiq-0.1.0/tests/core/test_simulation_inspect_trajectory.py +904 -0
  559. alambiq-0.1.0/tests/core/test_simulation_run_metadynamics.py +462 -0
  560. alambiq-0.1.0/tests/core/test_simulation_run_molecular_dynamics.py +516 -0
  561. alambiq-0.1.0/tests/core/test_simulation_run_qmmm_dynamics.py +369 -0
  562. alambiq-0.1.0/tests/core/test_simulation_run_relative_free_energy.py +533 -0
  563. alambiq-0.1.0/tests/core/test_structure_compare.py +370 -0
  564. alambiq-0.1.0/tests/core/test_structure_detect_binding_pockets.py +358 -0
  565. alambiq-0.1.0/tests/core/test_structure_predict_biomolecular_complex.py +606 -0
  566. alambiq-0.1.0/tests/core/test_structure_prepare_finite_environment.py +324 -0
  567. alambiq-0.1.0/tests/core/test_structure_prepare_predicted_complex_for_dynamics.py +579 -0
  568. alambiq-0.1.0/tests/core/test_structure_prepare_protein_ligand_system.py +366 -0
  569. alambiq-0.1.0/tests/core/test_structure_prepare_protein_system.py +434 -0
  570. alambiq-0.1.0/tests/core/test_structure_prepare_reactive_coordinates.py +482 -0
  571. alambiq-0.1.0/tests/core/test_structure_prepare_relative_binding_inputs.py +389 -0
  572. alambiq-0.1.0/tests/core/test_variant_benchmark.py +199 -0
  573. alambiq-0.1.0/tests/core/test_variant_propose.py +350 -0
  574. alambiq-0.1.0/tests/core/test_writing.py +231 -0
  575. alambiq-0.1.0/tests/fixtures/README.md +16 -0
  576. alambiq-0.1.0/tests/fixtures/constructs/puc19.gb +103 -0
  577. alambiq-0.1.0/tests/fixtures/enzyme-reaction-panel/panel.json +12322 -0
  578. alambiq-0.1.0/tests/fixtures/enzyme-reaction-panel/parameters.json +2934 -0
  579. alambiq-0.1.0/tests/fixtures/enzyme-reaction-panel/source-accounting.json +36316 -0
  580. alambiq-0.1.0/tests/fixtures/hemoglobin/P69905.json +1 -0
  581. alambiq-0.1.0/tests/fixtures/hemoglobin/hemoglobin-alpha.fasta +2 -0
  582. alambiq-0.1.0/tests/fixtures/operation/ensemble-observations.json +66 -0
  583. alambiq-0.1.0/tests/fixtures/operation/enzyme-assessment.json +37 -0
  584. alambiq-0.1.0/tests/fixtures/operation/enzyme-batch.json +69 -0
  585. alambiq-0.1.0/tests/fixtures/operation/first-order-fit.json +175 -0
  586. alambiq-0.1.0/tests/fixtures/operation/first-order-observations.json +67 -0
  587. alambiq-0.1.0/tests/fixtures/operation/first-order.json +58 -0
  588. alambiq-0.1.0/tests/fixtures/operation/member-0.json +58 -0
  589. alambiq-0.1.0/tests/fixtures/operation/member-1.json +58 -0
  590. alambiq-0.1.0/tests/fixtures/operation/member-2.json +58 -0
  591. alambiq-0.1.0/tests/fixtures/operation/resources.json +106 -0
  592. alambiq-0.1.0/tests/fixtures/reactions/chorismate/manifest.json +33 -0
  593. alambiq-0.1.0/tests/fixtures/structures/181L.cif +3599 -0
  594. alambiq-0.1.0/tests/fixtures/structures/1A3N.cif +8411 -0
  595. alambiq-0.1.0/tests/fixtures/structures/1L2Y.cif +12625 -0
  596. alambiq-0.1.0/tests/fixtures/structures/1P7E.cif +2155 -0
  597. alambiq-0.1.0/tests/fixtures/variant-benchmark/bslipa-t50-observations.csv +2173 -0
  598. alambiq-0.1.0/tests/snapshots/reports/cofactor-regeneration.txt +15 -0
  599. alambiq-0.1.0/tests/snapshots/reports/connected-investigation.txt +37 -0
  600. alambiq-0.1.0/tests/snapshots/reports/kinetics-from-measurements.txt +7 -0
  601. alambiq-0.1.0/tests/snapshots/reports/lanmodulin-comparison.txt +18 -0
  602. alambiq-0.1.0/tests/snapshots/reports/measured-variant-rounds.txt +28 -0
  603. alambiq-0.1.0/tests/snapshots/reports/operation-from-progress-curves.txt +17 -0
  604. alambiq-0.1.0/tests/snapshots/reports/pockets-and-complex.txt +8 -0
  605. alambiq-0.1.0/tests/snapshots/reports/protein-first-look.txt +6 -0
  606. alambiq-0.1.0/tests/snapshots/reports/relatives-and-context.txt +12 -0
  607. alambiq-0.1.0/tests/snapshots/reports/representative-panel.txt +4 -0
  608. alambiq-0.1.0/tests/snapshots/reports/transformation-and-routes.txt +12 -0
  609. alambiq-0.1.0/tests/snapshots/reports/transformation-to-enzymes.txt +27 -0
  610. alambiq-0.1.0/tests/snapshots/reports/variant-to-construct.txt +11 -0
  611. alambiq-0.1.0/tools/README.md +43 -0
  612. alambiq-0.1.0/tools/benchmark_variant_proposal.py +427 -0
  613. alambiq-0.1.0/tools/check_distribution.py +152 -0
  614. alambiq-0.1.0/tools/check_getting_started.py +90 -0
  615. alambiq-0.1.0/tools/check_installed_package.py +113 -0
  616. alambiq-0.1.0/tools/scan_licenses.py +132 -0
  617. alambiq-0.1.0/uv.lock +4537 -0
@@ -0,0 +1,43 @@
1
+ # Allowlist: never send private runs, models, credentials or Git history.
2
+ **
3
+ !pyproject.toml
4
+ !uv.lock
5
+ !README.md
6
+ !LICENSE
7
+ !src/
8
+ !src/**
9
+ !environments/
10
+ !environments/docker/
11
+ !environments/docker/Dockerfile
12
+ !environments/docker/Dockerfile.openmm
13
+ !environments/docker/Dockerfile.models
14
+ !environments/docker/Dockerfile.boltz
15
+ !environments/docker/Dockerfile.complex
16
+ !environments/docker/Dockerfile.mmseqs
17
+ !environments/docker/Dockerfile.p2rank
18
+ !environments/docker/Dockerfile.reaction-free-energy
19
+ !environments/reaction-free-energy/
20
+ !environments/reaction-free-energy/environment.yaml
21
+ !environments/docker/Dockerfile.qmmm
22
+ !environments/qmmm/
23
+ !environments/qmmm/environment.yaml
24
+ !environments/docker/Dockerfile.openfe
25
+ !environments/binding-free-energy/
26
+ !environments/binding-free-energy/environment.yaml
27
+ !environments/binding-free-energy/locks/
28
+ !environments/binding-free-energy/locks/linux-aarch64.cuda13.explicit.txt
29
+ !environments/install_openff_sources.py
30
+ !environments/openff-sources.json
31
+ !environments/p2rank/
32
+ !environments/p2rank/environment.yaml
33
+ !environments/openff-complex-preparation/
34
+ !environments/openff-complex-preparation/environment.yaml
35
+ !environments/boltz2/
36
+ !environments/boltz2/requirements.txt
37
+ !environments/boltz2/requirements.torch-cu130.txt
38
+ !environments/protein-representations/
39
+ !environments/protein-representations/environment.yaml
40
+ !environments/openmm/
41
+ !environments/openmm/requirements.cuda13.txt
42
+ **/__pycache__/**
43
+ **/*.pyc
@@ -0,0 +1,5 @@
1
+ # Byte-pinned external inputs: preserve line endings and review via source hashes.
2
+ tests/fixtures/**/*.cif -text -diff
3
+ tests/fixtures/**/*.json -text -diff
4
+ tests/fixtures/**/*.fasta -text
5
+ tests/fixtures/**/*.gb -text
@@ -0,0 +1,126 @@
1
+ name: Installed package validation
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches: [main]
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ env:
12
+ PREFECT_SERVER_ANALYTICS_ENABLED: "false"
13
+ PREFECT_HOME: .alambiq/ci/prefect
14
+ ALAMBIQ_PREFECT_HOME: .alambiq/ci/prefect
15
+ PREFECT_SERVER_EPHEMERAL_STARTUP_TIMEOUT_SECONDS: "120"
16
+ PYTHONDONTWRITEBYTECODE: "1"
17
+ OMP_NUM_THREADS: "2"
18
+ OPENBLAS_NUM_THREADS: "2"
19
+ MKL_NUM_THREADS: "2"
20
+ NUMBA_NUM_THREADS: "2"
21
+
22
+ jobs:
23
+ wheel:
24
+ runs-on: ubuntu-latest
25
+ timeout-minutes: 15
26
+ steps:
27
+ - uses: actions/checkout@v4
28
+ - uses: actions/setup-python@v5
29
+ with:
30
+ python-version: "3.11"
31
+ cache: pip
32
+ - run: python -m pip install uv==0.9.10 ruff==0.15.2
33
+ - run: uv lock --check
34
+ - run: ruff check src tests tools
35
+ - run: uv build --wheel --sdist --out-dir .alambiq/ci/wheel
36
+ - run: python tools/check_distribution.py
37
+ - run: python tools/check_getting_started.py
38
+ - run: uv export --frozen --all-extras --no-emit-project --no-hashes --output-file .alambiq/ci/wheel/dependencies.txt
39
+ - uses: actions/upload-artifact@v4
40
+ with:
41
+ name: installed-wheel
42
+ path: .alambiq/ci/wheel/
43
+ if-no-files-found: error
44
+ include-hidden-files: true
45
+
46
+ installed:
47
+ needs: wheel
48
+ runs-on: ${{ matrix.os }}
49
+ timeout-minutes: 60
50
+ strategy:
51
+ fail-fast: false
52
+ matrix:
53
+ os: [ubuntu-latest, macos-14]
54
+ python-version: ["3.11", "3.13"]
55
+ steps:
56
+ - uses: actions/checkout@v4
57
+ - uses: actions/setup-python@v5
58
+ with:
59
+ python-version: ${{ matrix.python-version }}
60
+ cache: pip
61
+ - uses: actions/download-artifact@v4
62
+ with:
63
+ name: installed-wheel
64
+ path: .alambiq/ci/wheel
65
+ - name: Install the wheel with every pip-installable extra
66
+ shell: bash
67
+ run: |
68
+ for wheel in .alambiq/ci/wheel/*.whl; do
69
+ python -m pip install --constraint .alambiq/ci/wheel/dependencies.txt "$wheel[chemistry,routes,thermodynamics,quantitative,dossier,construct,coding-design,trajectory,openmm,protein-repair,embedding-analysis]" pytest
70
+ done
71
+ python -m pip check
72
+ - name: The wheel names its capabilities
73
+ run: alambiq capability list
74
+ - name: The example campaign validates and runs
75
+ run: |
76
+ alambiq validate examples/kinetics-from-measurements/campaign.yaml
77
+ alambiq run examples/kinetics-from-measurements/campaign.yaml --run-dir .alambiq/ci/runs/kinetics
78
+ - name: Licences of the installed dependencies
79
+ run: python tools/scan_licenses.py
80
+ - name: Headless browser for the report checks
81
+ run: |
82
+ python -m pip install playwright==1.62.0
83
+ python -m playwright install --with-deps chromium
84
+ - name: Tests against the installed wheel
85
+ shell: bash
86
+ run: |
87
+ for wheel in .alambiq/ci/wheel/*.whl; do
88
+ python -I tools/check_installed_package.py --wheel "$wheel" --require-extras --receipt .alambiq/ci/installed-${{ matrix.os }}-${{ matrix.python-version }}.json
89
+ done
90
+ - uses: actions/upload-artifact@v4
91
+ if: always()
92
+ with:
93
+ name: evidence-${{ matrix.os }}-${{ matrix.python-version }}
94
+ path: .alambiq/ci/*.json
95
+ include-hidden-files: true
96
+
97
+ docker:
98
+ runs-on: ubuntu-latest
99
+ timeout-minutes: 30
100
+ steps:
101
+ - uses: actions/checkout@v4
102
+ - name: Build the core image with the extras the examples need
103
+ run: |
104
+ docker build -f environments/docker/Dockerfile \
105
+ --build-arg 'ALAMBIQ_EXTRAS=quantitative dossier trajectory chemistry routes thermodynamics construct coding-design embedding-analysis' \
106
+ -t alambiq:ci-core .
107
+ - name: The image lists its capabilities
108
+ run: docker run --rm alambiq:ci-core capability list
109
+ - name: An example runs read-only with no network
110
+ run: |
111
+ mkdir -p .alambiq/docker-results
112
+ docker run --rm --network none --read-only \
113
+ --tmpfs /tmp:rw,nosuid,nodev,mode=1777,size=1g \
114
+ --user "$(id -u):$(id -g)" \
115
+ -v "$PWD:/work:ro" -v "$PWD/.alambiq/docker-results:/results" \
116
+ alambiq:ci-core run examples/kinetics-from-measurements/campaign.yaml \
117
+ --run-dir /results/kinetics --report /results/kinetics.html
118
+ test -s .alambiq/docker-results/kinetics.html
119
+ - name: The engine layers that need no download build
120
+ run: |
121
+ for layer in mmseqs p2rank; do
122
+ docker build -f environments/docker/Dockerfile.$layer \
123
+ --build-arg BASE_IMAGE=alambiq:ci-core -t alambiq:ci-$layer .
124
+ done
125
+ docker run --rm alambiq:ci-mmseqs env check mmseqs
126
+ docker run --rm alambiq:ci-p2rank env check p2rank
@@ -0,0 +1,56 @@
1
+ name: Release
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+ workflow_dispatch:
7
+ inputs:
8
+ target:
9
+ description: Index to publish to
10
+ type: choice
11
+ options: [testpypi, pypi]
12
+ default: testpypi
13
+
14
+ permissions:
15
+ contents: read
16
+
17
+ jobs:
18
+ build:
19
+ runs-on: ubuntu-latest
20
+ timeout-minutes: 20
21
+ steps:
22
+ - uses: actions/checkout@v4
23
+ - uses: actions/setup-python@v5
24
+ with:
25
+ python-version: "3.11"
26
+ cache: pip
27
+ - run: python -m pip install uv==0.9.10 build twine
28
+ - run: uv lock --check
29
+ - run: python tools/check_distribution.py
30
+ - run: python -m build --outdir dist
31
+ - run: twine check dist/*
32
+ - uses: actions/upload-artifact@v4
33
+ with:
34
+ name: distributions
35
+ path: dist/
36
+ if-no-files-found: error
37
+
38
+ publish:
39
+ needs: build
40
+ runs-on: ubuntu-latest
41
+ environment: ${{ github.event_name == 'workflow_dispatch' && inputs.target || 'pypi' }}
42
+ permissions:
43
+ id-token: write
44
+ steps:
45
+ - uses: actions/download-artifact@v4
46
+ with:
47
+ name: distributions
48
+ path: dist/
49
+ - name: Publish to TestPyPI
50
+ if: github.event_name == 'workflow_dispatch' && inputs.target == 'testpypi'
51
+ uses: pypa/gh-action-pypi-publish@release/v1
52
+ with:
53
+ repository-url: https://test.pypi.org/legacy/
54
+ - name: Publish to PyPI
55
+ if: github.event_name == 'release' || inputs.target == 'pypi'
56
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,23 @@
1
+ .DS_Store
2
+ .venv/
3
+ __pycache__/
4
+ *.py[cod]
5
+ *.egg-info/
6
+ .pytest_cache/
7
+ .ruff_cache/
8
+ .mypy_cache/
9
+ .coverage
10
+ htmlcov/
11
+ build/
12
+ dist/
13
+ .alambiq/
14
+
15
+ # Heavy scientific resources and generated results never belong in Git.
16
+ /resources/
17
+ runs/
18
+ /artifacts/
19
+ *.sif
20
+ *.img
21
+ *.ckpt
22
+ *.pt
23
+ *.pth
@@ -0,0 +1,175 @@
1
+ # Alambiq agent instructions
2
+
3
+ Alambiq is open-source software for biotechnology R&D, organized as capabilities.
4
+
5
+ ## Sources of truth
6
+
7
+ - `docs/concepts.md` defines the terms capability, campaign, step, binding, request,
8
+ result, run, run record, reuse, engine environment and resource; `docs/methods/` explains how to
9
+ choose and read the capabilities of each method area.
10
+ - A capability is declared in code: `alambiq capability show ID` prints its request
11
+ fields, result, method and limits from that declaration. Do not restate the request fields, result or limits
12
+ of a capability in another file, such as a manifest, a schema or an agent skill file.
13
+ Methods pages explain the choice and interpretation of capabilities and link to
14
+ `alambiq capability show`.
15
+ - Document implemented behavior and measured limits; do not add development forecasts
16
+ or release promises.
17
+
18
+ ## Required discipline
19
+
20
+ - Organize reusable code by scientific capability, never by application sector or
21
+ release number. Implement scientific computation in functions that do not depend on
22
+ the capability registry, the run context or Prefect, so that tests call them
23
+ directly. The capability function reads the request, calls such a function and builds
24
+ the result.
25
+ - A campaign written in YAML and one written in Python are built into the same
26
+ `Campaign` model and run by the same code.
27
+ - The researcher plans the research. Alambiq runs the requests that the researcher
28
+ writes and does not generate requests; do not add an autonomous scientific planner.
29
+ - Prefect is the sole workflow runtime, and no parallel executor is added. Code for
30
+ requests, resource identities and result presentation does not import Prefect;
31
+ `src/alambiq/core/execution.py` is the module that does.
32
+ - Engines run in their own pinned environments. An engine receives a JSON request file
33
+ and writes a JSON result file; engine modules import only the standard library and
34
+ their own engine.
35
+ - Preserve domain-specific types; do not introduce one type for every biological
36
+ entity.
37
+ - Add a dependency or an abstraction only for a need stated in the change description.
38
+ Remove superseded code. Shared viewers and exports are part of the report file and
39
+ must not require an externally hosted service.
40
+ - A Alambiq installation runs on one machine. Do not add scheduler management or
41
+ distributed execution unless a need for it is stated.
42
+ - Report results and source identities. A diagnostic names what is wrong (the field,
43
+ column, unit, file, step or variable). The researcher interprets results and makes
44
+ research decisions. A scientifically implausible value is a finding in the result,
45
+ never a validation error.
46
+ - Keep resource files, engine environments and generated artifacts outside Git.
47
+ - Select scientific software and model weights whose licenses permit commercial use
48
+ without fees, individually negotiated agreements, or academic-only or
49
+ noncommercial-only restrictions. Prefer MIT, BSD and Apache-2.0; the pattern `ALLOWED` in
50
+ `tools/scan_licenses.py` defines the other accepted licenses. Check the license of the
51
+ code, the model weights and the data separately, at the version in use: the license of a
52
+ Python package that calls a model is separate from the license of the model. Avoid GPL scientific
53
+ executables in the recipes under `environments/`. Preserve third-party
54
+ notices.
55
+ - Obtain explicit approval from the repository owner before downloading a resource,
56
+ calling a paid service, running an expensive computation, contacting an external
57
+ party, publishing or pushing.
58
+ - When a test fails, find the cause and fix it. Do not weaken the test to make it pass.
59
+ - Test each change in the behavior of a method against a known answer, and test the
60
+ failure cases that apply. Preserve attribution, the identity of inputs and outputs
61
+ (content digests), units, source type and applicable licensing information.
62
+ - In documentation, help text, reports and comments, state implemented behavior, input
63
+ requirements, assumptions and observations directly, in affirmative sentences and not
64
+ as negations of what is absent.
65
+
66
+ ## Writing
67
+
68
+ Repository text is reference documentation, written like a technical manual or the methods
69
+ section of a paper. `tests/core/test_writing.py` enforces the mechanical rules.
70
+
71
+ - **Voice.** Impersonal and in the present tense. Procedures use the imperative
72
+ (`Install the core.`). No second or first person, no contractions, no rhetorical
73
+ questions, no exclamation marks.
74
+ - **Headings.** Sentence-case noun phrases naming the subject: "Run records", not "What a
75
+ run keeps". Bare imperatives only in step-by-step guides and recipes ("Install", "Build").
76
+ A heading never asks a question or promises a result.
77
+ - **Definitions.** A term is defined once, by what it is and what distinguishes it, and used
78
+ the same way afterwards. Example: "A capability is a function with a declared request
79
+ type, a declared result type and documented limits. It is identified by `prefix.action`."
80
+ - **Vocabulary.** "Alambiq" names the software. The terms are capability, campaign, step,
81
+ binding, request, result, run, run record, reuse, engine environment and resource. Do not use "workbench",
82
+ "platform", "tool" or "workflow" for the software or its parts (OpenMM's platforms and
83
+ Prefect's workflows keep their own names).
84
+ - **Stable text.** Prose does not state counts of the repository's own contents (capabilities,
85
+ examples, pages, tests, extras) or other details that a listing command or a test already
86
+ gives; the command is the source. Numbers that belong to the method (limits, defaults,
87
+ ranges, results) and dated evidence (a verification receipt) stay.
88
+ - **Precision.** Quantify or state the condition instead of "a few", "usually", "roughly",
89
+ "often". State a limit as a condition: "The interval assumes independent residuals."
90
+ Every number has its unit. Counts are digits ("3 replicas").
91
+ - **Scope.** Text states what the software does and the conditions under which a result
92
+ holds, as positive conditions: "The interval assumes independent residuals", "Applies to
93
+ single substitutions of a natural enzyme", "Requires a structure without ligands". It does
94
+ not list what the software does not do, claim, establish or replace ("does not establish",
95
+ "makes no claim", "is not a substitute for", "not cleared"). A negative sentence stays only
96
+ where a reader would otherwise use a result where it does not hold and no positive
97
+ condition says so; it is one sentence, at the place where the result is used. License text
98
+ states the terms that apply.
99
+ - **Plain prose.** No evaluative adjectives or adverbs ("simply", "carefully", "robust"),
100
+ no metaphors ("lands", "keeps", "carries"), no sentence about the page itself, no
101
+ asides set off with dashes. Qualities are shown by tests, never claimed in text.
102
+ - **Spelling.** American ("analyze", "license", "modeled", "behavior", "center").
103
+ - **Release labels.** Text describes what exists. It contains no release names, forecasts
104
+ or promises.
105
+
106
+ ## Validation
107
+
108
+ Run these commands before proposing a change, in a Python environment where the project
109
+ is installed (or with `PYTHONPATH=src` set). The last command writes its run to a new
110
+ temporary directory.
111
+
112
+ ```bash
113
+ python -m pytest tests/core
114
+ ruff check src tests tools
115
+ python -m alambiq validate examples/kinetics-from-measurements/campaign.yaml
116
+ python -m alambiq run examples/kinetics-from-measurements/campaign.yaml
117
+ ```
118
+
119
+ `tests/core` is the whole suite. A test that needs an engine environment declares it and
120
+ is skipped when `ALAMBIQ_ENV_<NAME>` (for example `ALAMBIQ_ENV_OPENMM`) does not point
121
+ at that environment's Python; the skip message names the missing prerequisite.
122
+
123
+ Besides the method tests, `tests/core` contains these checks of the whole repository:
124
+
125
+ - `test_examples.py`: every example runs from its `campaign.yaml`, and the test asserts
126
+ the values the example was built to return.
127
+ - `test_report_lint.py`: every report parses, loads nothing from the network, shows no
128
+ Python or NumPy representation, `NaN`, `inf` or `None` in its text, and in each numeric
129
+ column the header states the unit, or states that the column is a count, an index, a
130
+ rank or a fraction. The outline of each report (sections, headings, notes, table
131
+ headers and collapsed sections) matches the snapshot in `tests/snapshots/reports/`;
132
+ `ALAMBIQ_UPDATE_SNAPSHOTS=1` rewrites the snapshots.
133
+ - `test_first_mistakes.py`: each input mistake that a first-time user makes (listed in
134
+ the test) produces a message that names the field, column, unit, file, step or variable
135
+ at fault, a nonzero exit status and no traceback.
136
+ - `test_determinism.py`: the steps that draw random numbers or start from random points
137
+ (candidate selection, codon recoding, fits to progress curves) return identical outputs
138
+ when an example runs twice in new run directories, and a different seed changes a
139
+ random selection.
140
+ - `test_runtime_budgets.py`: no step of an engine-free example exceeds its time budget,
141
+ which is about 10 times the time measured on a laptop, with a minimum of 5 s.
142
+ - `test_documentation.py`: every relative link resolves, every capability appears on a
143
+ methods page that the methods index lists, every path and `alambiq` subcommand named
144
+ in a shell block exists, and every example has a README with the same sections and
145
+ appears in the index of examples.
146
+ - `test_writing.py`: the mechanical rules above.
147
+ - `test_licenses.py`: every resource specification states a license from the accepted set
148
+ and the size and SHA-256 digest of each file, the third-party notices name every
149
+ resource and the bundled viewer, and no installed dependency has a license that
150
+ `tools/scan_licenses.py` classifies as refused or unknown.
151
+ - `test_core_imports.py`: all capabilities register and are listed when the optional
152
+ packages (NumPy, SciPy, RDKit and others) cannot be imported.
153
+ - `test_conformance.py`: every capability states its limits, describes each request field
154
+ and its result, has a test that exercises each request field, except the justified
155
+ exemptions listed in the test, and has a function that renders its result in the report.
156
+
157
+ When a change breaks one of these checks, find the cause; do not relax the check. Check a
158
+ known answer in every method test: an analytic result, a quantity recomputed
159
+ independently from the written files, or a transformation whose answer is fixed (for
160
+ example, the difference between a structure and itself is zero).
161
+
162
+ Checks outside the suite:
163
+
164
+ - `python tools/check_distribution.py` builds the wheel and the source distribution,
165
+ inspects their contents and installs the wheel into a new environment.
166
+ - `python tools/scan_licenses.py` lists each installed dependency whose license is not
167
+ classed as allowed; `--all` lists every dependency.
168
+ - `python tools/check_getting_started.py` runs the commands of `docs/getting-started.md`
169
+ in a copy of the repository made for the check.
170
+ - `python -I tools/check_installed_package.py --wheel PATH --receipt FILE` runs the tests
171
+ against an installed wheel and records the module origins and the skipped tests.
172
+
173
+ Build local wheels from a fresh checkout or clear `build/` first: a wheel built from a
174
+ `build/` directory that still holds a module removed from the source tree contains that
175
+ module.
@@ -0,0 +1,72 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0
4
+
5
+ Alambiq is organized around capabilities that have declared request and result types.
6
+
7
+ ### Capabilities and runs
8
+
9
+ - Capabilities in families (characterize, investigate, engineer, measure,
10
+ operate). Each capability is a function with a declared request type, a declared result
11
+ type and documented limits, and has tests in `tests/core`. `alambiq capability list`
12
+ prints the capabilities; `alambiq capability show ID` prints the request, result,
13
+ method and limits of one capability.
14
+ - A campaign is a list of steps; each step has `params` and `bind` (see
15
+ [Concepts](docs/concepts.md)). Prefect executes the campaign. Results are stored in a
16
+ content-addressed artifact store. A step is reused when its key is unchanged
17
+ (see [Reuse](docs/concepts.md#reuse)).
18
+ - Docker images for the engine environments (MMseqs2, P2Rank, ThermoMPNN, pymbar, QM/MM,
19
+ OpenMM CUDA, OpenFF, ESM, Boltz-2, OpenFE). An engine environment is built from a plain
20
+ Python image and copied onto the core image, so a change to the core does not rebuild
21
+ it. `Dockerfile.tests` adds the test runner (pytest) to any image, so that the repository
22
+ tests, mounted at run time, run against the engines of that image. The images were built
23
+ for linux/arm64 on a Linux ARM64 host with an NVIDIA GB10 GPU on 2026-10-25. The
24
+ environment check of each image and the examples named in the receipt were run there, and
25
+ the engine tests were run there with 20 QM/MM engine tests skipped
26
+ (`environments/docker/verification.linux-arm64-spark-20261025.json`). The
27
+ Apple GPU environment of Boltz-2 is available only as a native environment.
28
+ - Engines run in engine environments (separate Python environments with pinned packages,
29
+ named by `ALAMBIQ_ENV_<NAME>`) and are started by a runner that imports only the Python
30
+ standard library. Models and databases are pinned resources: each is installed before
31
+ a run and verified before use.
32
+ - Every run writes a run record (`run.json`); a copy of every run, including the latest, is
33
+ stored under `history/` in the run directory. `alambiq history RUN_DIR` lists the runs, and
34
+ `alambiq replay RUN_DIR STEP --out DIR` writes one step of a recorded run as a
35
+ campaign that runs it again.
36
+
37
+ ### Reports
38
+
39
+ - One HTML file per run, with no external references. Charts are inline SVG that records
40
+ the plotted x and y values. An offline structure viewer (3Dmol.js, BSD-3-Clause) is
41
+ added when a structure is shown. Alignments are shown as aligned rows in blocks. When the run
42
+ directory holds at least 2 recorded runs of the campaign, the report ends with a table of
43
+ those runs.
44
+
45
+ ### Methods
46
+
47
+ - `assay.fit` fits Arrhenius, first-order decay and pH-profile models in addition to the
48
+ linear and Michaelis-Menten models, with derived quantities and their uncertainty.
49
+ - `operation.define` converts measured kinetics into an operating definition (see
50
+ [Operation file formats](docs/operation-formats.md)), with temperature and pH
51
+ dependence, a stated operating state (`state`: temperature and pH) and, for a reversible
52
+ pair, the Haldane relation to the equilibrium constant. `operation.propagate`
53
+ propagates the uncertainty of a fitted Michaelis-Menten rate to the predicted
54
+ concentrations.
55
+ - `protein.score_substitutions` scores substitutions with ESM C by masked marginals.
56
+ `variant.propose` ranks them by the language-model score, the predicted change in folding
57
+ free energy or the mean of both percentile ranks, with filters that include the presence
58
+ of the mutant residue in homologs. A benchmark on 4
59
+ measured datasets (3 of single substitutions of natural enzymes and 1 of an engineered
60
+ lineage) is in [the methods page](docs/methods/variant-proposal.md). The Spearman
61
+ correlation between the language-model score and the measurements is +0.37 for the
62
+ thermostability of Bacillus subtilis Lipase A, +0.58 for the activity of human
63
+ glucokinase, +0.37 for the abundance of human glucokinase and -0.42 (95 % interval -0.73
64
+ to -0.01) for an amine transaminase lineage.
65
+ - `candidate.select` has 7 strategies, among them `highest-predicted-diverse`, which
66
+ weights predicted response against diversity, and `pareto`, which takes non-dominated
67
+ fronts over 2 to 5 fitted objectives.
68
+
69
+ ### Examples and documentation
70
+
71
+ - Runnable examples with asserted headline values, methods pages and an installation
72
+ guide.