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.
- alambiq-0.1.0/.dockerignore +43 -0
- alambiq-0.1.0/.gitattributes +5 -0
- alambiq-0.1.0/.github/workflows/ci.yml +126 -0
- alambiq-0.1.0/.github/workflows/release.yml +56 -0
- alambiq-0.1.0/.gitignore +23 -0
- alambiq-0.1.0/AGENTS.md +175 -0
- alambiq-0.1.0/CHANGELOG.md +72 -0
- alambiq-0.1.0/LICENSE +202 -0
- alambiq-0.1.0/LICENSING.md +142 -0
- alambiq-0.1.0/MANIFEST.in +10 -0
- alambiq-0.1.0/PKG-INFO +171 -0
- alambiq-0.1.0/README.md +115 -0
- alambiq-0.1.0/docs/README.md +18 -0
- alambiq-0.1.0/docs/concepts.md +141 -0
- alambiq-0.1.0/docs/data-sources.md +46 -0
- alambiq-0.1.0/docs/getting-started.md +102 -0
- alambiq-0.1.0/docs/images/report-kinetics.png +0 -0
- alambiq-0.1.0/docs/images/report-lanmodulin.png +0 -0
- alambiq-0.1.0/docs/install.md +151 -0
- alambiq-0.1.0/docs/methods/README.md +36 -0
- alambiq-0.1.0/docs/methods/binding-and-qmmm.md +212 -0
- alambiq-0.1.0/docs/methods/candidate-models.md +128 -0
- alambiq-0.1.0/docs/methods/constructs.md +91 -0
- alambiq-0.1.0/docs/methods/embeddings-and-prediction.md +103 -0
- alambiq-0.1.0/docs/methods/measurements.md +172 -0
- alambiq-0.1.0/docs/methods/operation.md +342 -0
- alambiq-0.1.0/docs/methods/proteins.md +92 -0
- alambiq-0.1.0/docs/methods/reactions.md +118 -0
- alambiq-0.1.0/docs/methods/search-and-alignment.md +118 -0
- alambiq-0.1.0/docs/methods/structure-and-dynamics.md +161 -0
- alambiq-0.1.0/docs/methods/variant-proposal-benchmark.json +259 -0
- alambiq-0.1.0/docs/methods/variant-proposal.md +113 -0
- alambiq-0.1.0/docs/operation-formats.md +1197 -0
- alambiq-0.1.0/docs/python.md +98 -0
- alambiq-0.1.0/docs/reports.md +117 -0
- alambiq-0.1.0/environments/binding-free-energy/README.md +163 -0
- alambiq-0.1.0/environments/binding-free-energy/environment.yaml +47 -0
- alambiq-0.1.0/environments/binding-free-energy/locks/linux-aarch64.cuda13.explicit.txt +349 -0
- alambiq-0.1.0/environments/binding-free-energy/locks/linux-aarch64.cuda13.packages.json +4185 -0
- alambiq-0.1.0/environments/binding-free-energy/locks/osx-arm64.explicit.txt +308 -0
- alambiq-0.1.0/environments/binding-free-energy/locks/osx-arm64.packages.json +3693 -0
- alambiq-0.1.0/environments/binding-free-energy/verification.openff-20261003.json +622 -0
- alambiq-0.1.0/environments/binding-free-energy/verification.openff-docker-linux-aarch64-20261009.json +228 -0
- alambiq-0.1.0/environments/binding-free-energy/verification.openff-linux-aarch64-20261009.json +205 -0
- alambiq-0.1.0/environments/binding-free-energy/verification.openff-osx-arm64-20261008.json +169 -0
- alambiq-0.1.0/environments/binding-free-energy/verification.runtime-simplification-20261003.json +324 -0
- alambiq-0.1.0/environments/boltz2/README.md +101 -0
- alambiq-0.1.0/environments/boltz2/environment.linux-aarch64.yaml +7 -0
- alambiq-0.1.0/environments/boltz2/environment.yaml +8 -0
- alambiq-0.1.0/environments/boltz2/locks/linux-aarch64.conda-packages.json +341 -0
- alambiq-0.1.0/environments/boltz2/locks/linux-aarch64.pip-packages.json +701 -0
- alambiq-0.1.0/environments/boltz2/locks/osx-arm64.conda-explicit.txt +22 -0
- alambiq-0.1.0/environments/boltz2/locks/osx-arm64.conda-packages.json +225 -0
- alambiq-0.1.0/environments/boltz2/locks/osx-arm64.pip-freeze.txt +71 -0
- alambiq-0.1.0/environments/boltz2/locks/osx-arm64.pip-packages.json +545 -0
- alambiq-0.1.0/environments/boltz2/manifest.yaml +153 -0
- alambiq-0.1.0/environments/boltz2/requirements.torch-cu130.txt +2 -0
- alambiq-0.1.0/environments/boltz2/requirements.txt +1 -0
- alambiq-0.1.0/environments/boltz2/resource-lock.osx-arm64.json +40 -0
- alambiq-0.1.0/environments/boltz2/verification.linux-aarch64.json +240 -0
- alambiq-0.1.0/environments/boltz2/verification.portable-runtime.json +971 -0
- alambiq-0.1.0/environments/boltz2-mps/environment.yaml +8 -0
- alambiq-0.1.0/environments/boltz2-mps/locks/osx-arm64.pip-freeze.txt +71 -0
- alambiq-0.1.0/environments/boltz2-mps/locks/osx-arm64.pip-packages.json +545 -0
- alambiq-0.1.0/environments/boltz2-mps/locks/osx-arm64.pip-requirements.txt +67 -0
- alambiq-0.1.0/environments/boltz2-mps/manifest.yaml +188 -0
- alambiq-0.1.0/environments/docker/Dockerfile +34 -0
- alambiq-0.1.0/environments/docker/Dockerfile.boltz +23 -0
- alambiq-0.1.0/environments/docker/Dockerfile.complex +22 -0
- alambiq-0.1.0/environments/docker/Dockerfile.mmseqs +29 -0
- alambiq-0.1.0/environments/docker/Dockerfile.models +24 -0
- alambiq-0.1.0/environments/docker/Dockerfile.openfe +34 -0
- alambiq-0.1.0/environments/docker/Dockerfile.openmm +20 -0
- alambiq-0.1.0/environments/docker/Dockerfile.p2rank +18 -0
- alambiq-0.1.0/environments/docker/Dockerfile.qmmm +16 -0
- alambiq-0.1.0/environments/docker/Dockerfile.reaction-free-energy +16 -0
- alambiq-0.1.0/environments/docker/Dockerfile.tests +18 -0
- alambiq-0.1.0/environments/docker/Dockerfile.thermompnn +20 -0
- alambiq-0.1.0/environments/docker/README.md +167 -0
- alambiq-0.1.0/environments/docker/verification.linux-arm64-spark-20261025.json +176 -0
- alambiq-0.1.0/environments/install_openff_sources.py +62 -0
- alambiq-0.1.0/environments/openff-complex-preparation/README.md +130 -0
- alambiq-0.1.0/environments/openff-complex-preparation/environment.yaml +24 -0
- alambiq-0.1.0/environments/openff-complex-preparation/locks/linux-aarch64.explicit.txt +196 -0
- alambiq-0.1.0/environments/openff-complex-preparation/locks/linux-aarch64.packages.json +2349 -0
- alambiq-0.1.0/environments/openff-complex-preparation/locks/osx-arm64.explicit.txt +180 -0
- alambiq-0.1.0/environments/openff-complex-preparation/locks/osx-arm64.packages.json +2157 -0
- alambiq-0.1.0/environments/openff-complex-preparation/verification.docker-linux-aarch64-20261009.json +111 -0
- alambiq-0.1.0/environments/openff-complex-preparation/verification.linux-aarch64.json +59 -0
- alambiq-0.1.0/environments/openff-complex-preparation/verification.migration.json +126 -0
- alambiq-0.1.0/environments/openff-complex-preparation/verification.native-joins-linux-aarch64-20261008.json +665 -0
- alambiq-0.1.0/environments/openff-complex-preparation/verification.osx-arm64.json +121 -0
- alambiq-0.1.0/environments/openff-complex-preparation/verification.predicted-native-osx-arm64-20261008.json +257 -0
- alambiq-0.1.0/environments/openff-complex-preparation/verification.predicted-settings-20261008.json +40 -0
- alambiq-0.1.0/environments/openff-sources.json +18 -0
- alambiq-0.1.0/environments/openmm/README.md +226 -0
- alambiq-0.1.0/environments/openmm/environment.apple-ensemble.yaml +8 -0
- alambiq-0.1.0/environments/openmm/environment.yaml +9 -0
- alambiq-0.1.0/environments/openmm/locks/linux-aarch64.cuda13.explicit.txt +48 -0
- alambiq-0.1.0/environments/openmm/locks/linux-aarch64.cuda13.packages.json +573 -0
- alambiq-0.1.0/environments/openmm/locks/osx-arm64.apple-ensemble.explicit.txt +39 -0
- alambiq-0.1.0/environments/openmm/locks/osx-arm64.apple-ensemble.packages.json +352 -0
- alambiq-0.1.0/environments/openmm/locks/osx-arm64.explicit.txt +39 -0
- alambiq-0.1.0/environments/openmm/locks/osx-arm64.packages.json +429 -0
- alambiq-0.1.0/environments/openmm/manifest.yaml +97 -0
- alambiq-0.1.0/environments/openmm/requirements.cuda13.txt +6 -0
- alambiq-0.1.0/environments/openmm/verification.bglb-apple-pocket-20261004.json +1402 -0
- alambiq-0.1.0/environments/openmm/verification.gb3-50ns-padding1-failure-20261003.json +1973 -0
- alambiq-0.1.0/environments/openmm/verification.gb3-padding2-50ns-20261004.json +15391 -0
- alambiq-0.1.0/environments/openmm/verification.gb3-padding2-pilot-20261003.json +3506 -0
- alambiq-0.1.0/environments/openmm/verification.gb3-pilot-20261003.json +1426 -0
- alambiq-0.1.0/environments/openmm/verification.gb3-retained-stage-reanalysis-20261008.json +212 -0
- alambiq-0.1.0/environments/openmm/verification.metadynamics-cuda-pme-20261004.json +557 -0
- alambiq-0.1.0/environments/openmm/verification.metadynamics-recovery.linux-aarch64.json +115 -0
- alambiq-0.1.0/environments/openmm/verification.metadynamics-recovery.osx-arm64.json +228 -0
- alambiq-0.1.0/environments/openmm/verification.metadynamics.osx-arm64.json +466 -0
- alambiq-0.1.0/environments/openmm/verification.protein-substitutions-20261004.json +256 -0
- alambiq-0.1.0/environments/openmm/verification.readiness-and-throughput.json +844 -0
- alambiq-0.1.0/environments/p2rank/README.md +105 -0
- alambiq-0.1.0/environments/p2rank/environment.yaml +5 -0
- alambiq-0.1.0/environments/p2rank/linux-aarch64.packages.json +717 -0
- alambiq-0.1.0/environments/p2rank/verification.linux-aarch64.json +282 -0
- alambiq-0.1.0/environments/protein-representations/README.md +97 -0
- alambiq-0.1.0/environments/protein-representations/environment.yaml +15 -0
- alambiq-0.1.0/environments/protein-representations/locks/osx-arm64.conda-packages.json +249 -0
- alambiq-0.1.0/environments/protein-representations/locks/osx-arm64.pip-packages.json +689 -0
- alambiq-0.1.0/environments/protein-representations/manifest.yaml +31 -0
- alambiq-0.1.0/environments/protein-representations/verification.accelerators.linux-aarch64.json +2395 -0
- alambiq-0.1.0/environments/protein-representations/verification.portable.osx-arm64.json +125 -0
- alambiq-0.1.0/environments/qmmm/README.md +181 -0
- alambiq-0.1.0/environments/qmmm/environment.yaml +7 -0
- alambiq-0.1.0/environments/qmmm/install_cuda.py +288 -0
- alambiq-0.1.0/environments/qmmm/linux-aarch64-cpu.explicit.txt +75 -0
- alambiq-0.1.0/environments/qmmm/linux-aarch64-cpu.packages.json +890 -0
- alambiq-0.1.0/environments/qmmm/linux-aarch64-cuda13.explicit.txt +88 -0
- alambiq-0.1.0/environments/qmmm/linux-aarch64-cuda13.packages.json +1046 -0
- alambiq-0.1.0/environments/qmmm/osx-arm64.explicit.txt +70 -0
- alambiq-0.1.0/environments/qmmm/osx-arm64.packages.json +830 -0
- alambiq-0.1.0/environments/qmmm/verification.cpu-container.json +274 -0
- alambiq-0.1.0/environments/qmmm/verification.cuda-install.json +117 -0
- alambiq-0.1.0/environments/qmmm/verification.openff-preparation-linux-aarch64-20261008.json +130 -0
- alambiq-0.1.0/environments/qmmm/verification.openff-preparation-osx-arm64-20261008.json +188 -0
- alambiq-0.1.0/environments/reaction-free-energy/README.md +82 -0
- alambiq-0.1.0/environments/reaction-free-energy/environment.yaml +6 -0
- alambiq-0.1.0/environments/reaction-free-energy/locks/linux-aarch64.explicit.txt +43 -0
- alambiq-0.1.0/environments/reaction-free-energy/locks/linux-aarch64.packages.json +470 -0
- alambiq-0.1.0/environments/reaction-free-energy/locks/osx-arm64.explicit.txt +38 -0
- alambiq-0.1.0/environments/reaction-free-energy/locks/osx-arm64.packages.json +342 -0
- alambiq-0.1.0/environments/reaction-free-energy/verification.linux-aarch64.json +1046 -0
- alambiq-0.1.0/environments/thermompnn/BGLB_BENCHMARK.md +107 -0
- alambiq-0.1.0/environments/thermompnn/README.md +134 -0
- alambiq-0.1.0/environments/thermompnn/benchmark_bglb.py +297 -0
- alambiq-0.1.0/environments/thermompnn/bglb-protocol.json +78 -0
- alambiq-0.1.0/environments/thermompnn/environment.yaml +10 -0
- alambiq-0.1.0/environments/thermompnn/requirements.osx-arm64.txt +11 -0
- alambiq-0.1.0/environments/thermompnn/verification.benchstab-eligibility.json +4328 -0
- alambiq-0.1.0/environments/thermompnn/verification.bglb-functional-stability.json +2004 -0
- alambiq-0.1.0/environments/thermompnn/verification.first-use.osx-arm64.json +273 -0
- alambiq-0.1.0/environments/thermompnn/verification.osx-arm64.json +787 -0
- alambiq-0.1.0/examples/README.md +71 -0
- alambiq-0.1.0/examples/cofactor-regeneration/README.md +34 -0
- alambiq-0.1.0/examples/cofactor-regeneration/assess-with.json +18 -0
- alambiq-0.1.0/examples/cofactor-regeneration/assess-without.json +18 -0
- alambiq-0.1.0/examples/cofactor-regeneration/campaign.yaml +25 -0
- alambiq-0.1.0/examples/cofactor-regeneration/with-regeneration.json +161 -0
- alambiq-0.1.0/examples/cofactor-regeneration/without-regeneration.json +126 -0
- alambiq-0.1.0/examples/connected-investigation/README.md +80 -0
- alambiq-0.1.0/examples/connected-investigation/campaign.yaml +107 -0
- alambiq-0.1.0/examples/connected-investigation/lysozyme.fasta +2 -0
- alambiq-0.1.0/examples/connected-investigation/panel.json +174 -0
- alambiq-0.1.0/examples/connected-investigation/prepare.py +283 -0
- alambiq-0.1.0/examples/connected-investigation/progress.json +112 -0
- alambiq-0.1.0/examples/connected-investigation/rates.csv +11 -0
- alambiq-0.1.0/examples/connected-investigation/returned.csv +19 -0
- alambiq-0.1.0/examples/connected-investigation/scores.json +1 -0
- alambiq-0.1.0/examples/connected-investigation/template.json +72 -0
- alambiq-0.1.0/examples/connected-investigation/truth.json +40 -0
- alambiq-0.1.0/examples/ensemble-vs-nmr/1P7E.cif +2155 -0
- alambiq-0.1.0/examples/ensemble-vs-nmr/README.md +40 -0
- alambiq-0.1.0/examples/ensemble-vs-nmr/campaign.yaml +305 -0
- alambiq-0.1.0/examples/kinetics-from-measurements/README.md +29 -0
- alambiq-0.1.0/examples/kinetics-from-measurements/campaign.yaml +39 -0
- alambiq-0.1.0/examples/kinetics-from-measurements/rates.csv +11 -0
- alambiq-0.1.0/examples/lanmodulin-comparison/8DQ2.cif +7263 -0
- alambiq-0.1.0/examples/lanmodulin-comparison/8FNS.cif +3986 -0
- alambiq-0.1.0/examples/lanmodulin-comparison/A0A4V2JDD3.json +1 -0
- alambiq-0.1.0/examples/lanmodulin-comparison/C5B164.json +1 -0
- alambiq-0.1.0/examples/lanmodulin-comparison/README.md +109 -0
- alambiq-0.1.0/examples/lanmodulin-comparison/campaign.yaml +68 -0
- alambiq-0.1.0/examples/lanmodulin-comparison/comparison.a3m +4 -0
- alambiq-0.1.0/examples/lanmodulin-comparison/context-proteins.fasta +20 -0
- alambiq-0.1.0/examples/lanmodulin-comparison/context.gff3 +13 -0
- alambiq-0.1.0/examples/lanmodulin-comparison/hans.fasta +2 -0
- alambiq-0.1.0/examples/lanmodulin-comparison/lanm-pair.fasta +4 -0
- alambiq-0.1.0/examples/lanmodulin-comparison/panel.fasta +24 -0
- alambiq-0.1.0/examples/lanmodulin-comparison/query.fasta +2 -0
- alambiq-0.1.0/examples/measured-variant-rounds/README.md +40 -0
- alambiq-0.1.0/examples/measured-variant-rounds/campaign.yaml +48 -0
- alambiq-0.1.0/examples/measured-variant-rounds/initial-observations.csv +186 -0
- alambiq-0.1.0/examples/measured-variant-rounds/panel.json +2709 -0
- alambiq-0.1.0/examples/operation-from-progress-curves/EAG-TbSADH-first-order.json +214 -0
- alambiq-0.1.0/examples/operation-from-progress-curves/EAG-TbSADH-saturation.json +246 -0
- alambiq-0.1.0/examples/operation-from-progress-curves/README.md +45 -0
- alambiq-0.1.0/examples/operation-from-progress-curves/campaign.yaml +26 -0
- alambiq-0.1.0/examples/operation-from-progress-curves/free-TbSADH-first-order.json +214 -0
- alambiq-0.1.0/examples/operation-from-progress-curves/free-TbSADH-saturation.json +246 -0
- alambiq-0.1.0/examples/operation-from-progress-curves/source-measurements.json +43 -0
- alambiq-0.1.0/examples/pockets-and-complex/1A3N.cif +8411 -0
- alambiq-0.1.0/examples/pockets-and-complex/P69905.json +1 -0
- alambiq-0.1.0/examples/pockets-and-complex/README.md +38 -0
- alambiq-0.1.0/examples/pockets-and-complex/campaign.yaml +15 -0
- alambiq-0.1.0/examples/pockets-and-complex/complex.yaml +17 -0
- alambiq-0.1.0/examples/pockets-and-complex/hemoglobin-alpha.fasta +2 -0
- alambiq-0.1.0/examples/protein-first-look/1A3N.cif +8411 -0
- alambiq-0.1.0/examples/protein-first-look/P69905.json +1 -0
- alambiq-0.1.0/examples/protein-first-look/README.md +37 -0
- alambiq-0.1.0/examples/protein-first-look/campaign.yaml +9 -0
- alambiq-0.1.0/examples/protein-first-look/hemoglobin-alpha.fasta +2 -0
- alambiq-0.1.0/examples/relatives-and-context/README.md +43 -0
- alambiq-0.1.0/examples/relatives-and-context/campaign.yaml +24 -0
- alambiq-0.1.0/examples/relatives-and-context/context.gff3 +31 -0
- alambiq-0.1.0/examples/relatives-and-context/globin-search.a3m +8 -0
- alambiq-0.1.0/examples/relatives-and-context/hemoglobin-alpha.fasta +2 -0
- alambiq-0.1.0/examples/relatives-and-context/proteins.fasta +58 -0
- alambiq-0.1.0/examples/relatives-and-context/representation-panel.fasta +12 -0
- alambiq-0.1.0/examples/relatives-and-context/representation-panel.sources.json +60 -0
- alambiq-0.1.0/examples/relatives-and-context/subset.json +19 -0
- alambiq-0.1.0/examples/representative-panel/README.md +36 -0
- alambiq-0.1.0/examples/representative-panel/campaign.yaml +7 -0
- alambiq-0.1.0/examples/representative-panel/embed.yaml +7 -0
- alambiq-0.1.0/examples/representative-panel/embeddings.json +1 -0
- alambiq-0.1.0/examples/representative-panel/representation-panel.fasta +12 -0
- alambiq-0.1.0/examples/representative-panel/representation-panel.sources.json +60 -0
- alambiq-0.1.0/examples/transformation-and-routes/README.md +39 -0
- alambiq-0.1.0/examples/transformation-and-routes/campaign.yaml +51 -0
- alambiq-0.1.0/examples/transformation-to-enzymes/README.md +46 -0
- alambiq-0.1.0/examples/transformation-to-enzymes/campaign.yaml +26 -0
- alambiq-0.1.0/examples/transformation-to-enzymes/candidates.fasta +14 -0
- alambiq-0.1.0/examples/transformation-to-enzymes/references.fasta +6 -0
- alambiq-0.1.0/examples/variant-to-construct/README.md +40 -0
- alambiq-0.1.0/examples/variant-to-construct/campaign.yaml +33 -0
- alambiq-0.1.0/examples/variant-to-construct/codon-choices.json +22 -0
- alambiq-0.1.0/examples/variant-to-construct/linker.faa +2 -0
- alambiq-0.1.0/examples/variant-to-construct/puc19.gb +103 -0
- alambiq-0.1.0/examples/variant-to-construct/tag.faa +2 -0
- alambiq-0.1.0/examples/variant-to-construct/variant.fasta +2 -0
- alambiq-0.1.0/pyproject.toml +90 -0
- alambiq-0.1.0/setup.cfg +4 -0
- alambiq-0.1.0/src/alambiq/__init__.py +65 -0
- alambiq-0.1.0/src/alambiq/__main__.py +4 -0
- alambiq-0.1.0/src/alambiq/_native_process.py +155 -0
- alambiq-0.1.0/src/alambiq/api.py +192 -0
- alambiq-0.1.0/src/alambiq/capabilities/__init__.py +85 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/__init__.py +0 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/enzyme_characterize_candidates.py +283 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/enzyme_characterize_candidates_report.py +77 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/enzyme_retrieve_candidates.py +220 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/enzyme_retrieve_candidates_report.py +46 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/genome_inspect_context.py +215 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/genome_inspect_context_report.py +46 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_complete.py +282 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_complete_report.py +33 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_embed.py +216 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_embed_report.py +23 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_explore_embeddings.py +185 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_explore_embeddings_report.py +59 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_inspect.py +281 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_inspect_report.py +75 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_match_profiles.py +287 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_match_profiles_report.py +58 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_predict_stability_change.py +296 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_predict_stability_change_report.py +30 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_predict_tracks.py +206 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_predict_tracks_report.py +32 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_score_substitutions.py +226 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_score_substitutions_report.py +66 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_search.py +150 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/protein_search_report.py +34 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/science/__init__.py +0 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/science/alignment.py +195 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/science/annotation.py +232 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/science/boltz.py +113 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/science/completion.py +105 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/science/confidence.py +110 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/science/dossier.py +323 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/science/embeddings.py +269 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/science/enzyme.py +332 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/science/genome.py +328 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/science/msa.py +103 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/science/profiles.py +198 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/science/stability.py +196 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/sequence_generate_msa.py +283 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/sequence_generate_msa_report.py +45 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/sequence_inspect_msa.py +180 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/sequence_inspect_msa_report.py +102 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/structure_predict_biomolecular_complex.py +386 -0
- alambiq-0.1.0/src/alambiq/capabilities/characterize/structure_predict_biomolecular_complex_report.py +74 -0
- alambiq-0.1.0/src/alambiq/capabilities/engineer/__init__.py +0 -0
- alambiq-0.1.0/src/alambiq/capabilities/engineer/candidate_fit.py +178 -0
- alambiq-0.1.0/src/alambiq/capabilities/engineer/candidate_fit_report.py +58 -0
- alambiq-0.1.0/src/alambiq/capabilities/engineer/candidate_select.py +225 -0
- alambiq-0.1.0/src/alambiq/capabilities/engineer/candidate_select_report.py +59 -0
- alambiq-0.1.0/src/alambiq/capabilities/engineer/coding_optimize.py +154 -0
- alambiq-0.1.0/src/alambiq/capabilities/engineer/coding_optimize_report.py +39 -0
- alambiq-0.1.0/src/alambiq/capabilities/engineer/construct_assemble.py +157 -0
- alambiq-0.1.0/src/alambiq/capabilities/engineer/construct_assemble_report.py +26 -0
- alambiq-0.1.0/src/alambiq/capabilities/engineer/construct_compose.py +193 -0
- alambiq-0.1.0/src/alambiq/capabilities/engineer/construct_compose_report.py +32 -0
- alambiq-0.1.0/src/alambiq/capabilities/engineer/science/__init__.py +0 -0
- alambiq-0.1.0/src/alambiq/capabilities/engineer/science/assembly.py +482 -0
- alambiq-0.1.0/src/alambiq/capabilities/engineer/science/candidates.py +494 -0
- alambiq-0.1.0/src/alambiq/capabilities/engineer/science/coding.py +250 -0
- alambiq-0.1.0/src/alambiq/capabilities/engineer/science/composition.py +238 -0
- alambiq-0.1.0/src/alambiq/capabilities/engineer/science/selection.py +415 -0
- alambiq-0.1.0/src/alambiq/capabilities/engineer/science/variants.py +217 -0
- alambiq-0.1.0/src/alambiq/capabilities/engineer/variant_propose.py +266 -0
- alambiq-0.1.0/src/alambiq/capabilities/engineer/variant_propose_report.py +49 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/__init__.py +0 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/reaction_analyze_enzyme_panel.py +212 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/reaction_analyze_enzyme_panel_report.py +48 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/reaction_estimate_thermodynamics.py +344 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/reaction_estimate_thermodynamics_report.py +61 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/reaction_explore_routes.py +347 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/reaction_explore_routes_report.py +73 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/reaction_inspect.py +312 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/reaction_inspect_report.py +80 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/science/__init__.py +0 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/science/binding.py +673 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/science/comparison.py +330 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/science/coupling_naming.py +125 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/science/couplings.py +209 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/science/enzyme_panel.py +568 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/science/observables.py +100 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/science/periodic_images.py +121 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/science/pockets.py +237 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/science/predicted_complex.py +274 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/science/qmmm.py +87 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/science/rbfe.py +266 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/science/reactions.py +430 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/science/reactive.py +925 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/science/replicas.py +282 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/science/routes.py +568 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/science/sampling.py +180 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/science/simulation.py +190 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/science/thermodynamics.py +477 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/science/trajectory.py +646 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/science/umbrella.py +203 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_analyze_binding_free_energy.py +433 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_analyze_binding_free_energy_report.py +89 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_analyze_reaction_free_energy.py +307 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_analyze_reaction_free_energy_report.py +93 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_compare_replica_structures.py +292 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_compare_replica_structures_report.py +73 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_compare_scalar_couplings.py +457 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_compare_scalar_couplings_report.py +62 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_evaluate_qmmm_state.py +252 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_evaluate_qmmm_state_report.py +57 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_inspect_trajectory.py +392 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_inspect_trajectory_report.py +93 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_run_metadynamics.py +315 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_run_metadynamics_report.py +60 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_run_molecular_dynamics.py +314 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_run_molecular_dynamics_report.py +50 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_run_qmmm_dynamics.py +279 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_run_qmmm_dynamics_report.py +36 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_run_relative_free_energy.py +318 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/simulation_run_relative_free_energy_report.py +43 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_compare.py +197 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_compare_report.py +68 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_detect_binding_pockets.py +228 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_detect_binding_pockets_report.py +42 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_finite_environment.py +226 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_finite_environment_report.py +39 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_predicted_complex_for_dynamics.py +262 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_predicted_complex_for_dynamics_report.py +52 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_protein_ligand_system.py +359 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_protein_ligand_system_report.py +81 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_protein_system.py +410 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_protein_system_report.py +60 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_reactive_coordinates.py +332 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_reactive_coordinates_report.py +72 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_relative_binding_inputs.py +355 -0
- alambiq-0.1.0/src/alambiq/capabilities/investigate/structure_prepare_relative_binding_inputs_report.py +58 -0
- alambiq-0.1.0/src/alambiq/capabilities/measure/__init__.py +0 -0
- alambiq-0.1.0/src/alambiq/capabilities/measure/assay_balance.py +178 -0
- alambiq-0.1.0/src/alambiq/capabilities/measure/assay_fit.py +433 -0
- alambiq-0.1.0/src/alambiq/capabilities/measure/assay_fit_report.py +137 -0
- alambiq-0.1.0/src/alambiq/capabilities/measure/assay_inspect.py +187 -0
- alambiq-0.1.0/src/alambiq/capabilities/measure/balance_report.py +37 -0
- alambiq-0.1.0/src/alambiq/capabilities/measure/inspect_report.py +25 -0
- alambiq-0.1.0/src/alambiq/capabilities/measure/science/__init__.py +5 -0
- alambiq-0.1.0/src/alambiq/capabilities/measure/science/balance.py +279 -0
- alambiq-0.1.0/src/alambiq/capabilities/measure/science/fitting.py +1109 -0
- alambiq-0.1.0/src/alambiq/capabilities/measure/science/inspection.py +609 -0
- alambiq-0.1.0/src/alambiq/capabilities/measure/science/replicates.py +144 -0
- alambiq-0.1.0/src/alambiq/capabilities/measure/science/tables.py +250 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/__init__.py +0 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/compare.py +192 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/compare_report.py +36 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/define.py +404 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/define_report.py +113 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/fit.py +169 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/fit_report.py +40 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/progress_chart.py +58 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/propagate.py +237 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/propagate_report.py +74 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/resources.py +154 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/resources_report.py +52 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/science/__init__.py +5 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/science/comparison.py +341 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/science/definition.py +354 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/science/fitting.py +606 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/science/performance.py +430 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/science/propagation.py +123 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/science/resources.py +243 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/science/simulation.py +987 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/simulate.py +138 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/simulate_report.py +52 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/summarize.py +157 -0
- alambiq-0.1.0/src/alambiq/capabilities/operate/summarize_report.py +63 -0
- alambiq-0.1.0/src/alambiq/capabilities/shared/__init__.py +1 -0
- alambiq-0.1.0/src/alambiq/capabilities/shared/records.py +67 -0
- alambiq-0.1.0/src/alambiq/capabilities/shared/sequences.py +72 -0
- alambiq-0.1.0/src/alambiq/capabilities/shared/sources.py +76 -0
- alambiq-0.1.0/src/alambiq/cli.py +275 -0
- alambiq-0.1.0/src/alambiq/core/__init__.py +1 -0
- alambiq-0.1.0/src/alambiq/core/cache.py +127 -0
- alambiq-0.1.0/src/alambiq/core/campaigns.py +109 -0
- alambiq-0.1.0/src/alambiq/core/context.py +71 -0
- alambiq-0.1.0/src/alambiq/core/envs.py +350 -0
- alambiq-0.1.0/src/alambiq/core/execution.py +337 -0
- alambiq-0.1.0/src/alambiq/core/loader.py +172 -0
- alambiq-0.1.0/src/alambiq/core/model.py +95 -0
- alambiq-0.1.0/src/alambiq/core/records.py +238 -0
- alambiq-0.1.0/src/alambiq/core/registry.py +204 -0
- alambiq-0.1.0/src/alambiq/core/resources.py +370 -0
- alambiq-0.1.0/src/alambiq/core/store.py +113 -0
- alambiq-0.1.0/src/alambiq/engines/P2RankOffline.java +13 -0
- alambiq-0.1.0/src/alambiq/engines/__init__.py +0 -0
- alambiq-0.1.0/src/alambiq/engines/_runner.py +74 -0
- alambiq-0.1.0/src/alambiq/engines/boltz_download.py +30 -0
- alambiq-0.1.0/src/alambiq/engines/boltz_predict.py +345 -0
- alambiq-0.1.0/src/alambiq/engines/echo_probe.py +26 -0
- alambiq-0.1.0/src/alambiq/engines/esm3_predict.py +280 -0
- alambiq-0.1.0/src/alambiq/engines/esmc_embed.py +96 -0
- alambiq-0.1.0/src/alambiq/engines/esmc_score.py +102 -0
- alambiq-0.1.0/src/alambiq/engines/hints.py +29 -0
- alambiq-0.1.0/src/alambiq/engines/mmseqs_msa.py +91 -0
- alambiq-0.1.0/src/alambiq/engines/mmseqs_panel.py +139 -0
- alambiq-0.1.0/src/alambiq/engines/mmseqs_profiles.py +114 -0
- alambiq-0.1.0/src/alambiq/engines/mmseqs_search.py +150 -0
- alambiq-0.1.0/src/alambiq/engines/openfe_prepare_binding.py +358 -0
- alambiq-0.1.0/src/alambiq/engines/openfe_rbfe.py +321 -0
- alambiq-0.1.0/src/alambiq/engines/openff_finite_environment.py +491 -0
- alambiq-0.1.0/src/alambiq/engines/openff_prepare_complex.py +489 -0
- alambiq-0.1.0/src/alambiq/engines/openff_prepare_system.py +302 -0
- alambiq-0.1.0/src/alambiq/engines/openmm_common.py +242 -0
- alambiq-0.1.0/src/alambiq/engines/openmm_md.py +477 -0
- alambiq-0.1.0/src/alambiq/engines/openmm_metadynamics.py +334 -0
- alambiq-0.1.0/src/alambiq/engines/openmm_prepare.py +686 -0
- alambiq-0.1.0/src/alambiq/engines/openmm_xml.py +57 -0
- alambiq-0.1.0/src/alambiq/engines/p2rank_predict.py +111 -0
- alambiq-0.1.0/src/alambiq/engines/qmmm_coupling.py +212 -0
- alambiq-0.1.0/src/alambiq/engines/qmmm_dynamics_runner.py +357 -0
- alambiq-0.1.0/src/alambiq/engines/qmmm_native.py +321 -0
- alambiq-0.1.0/src/alambiq/engines/qmmm_pyscf.py +416 -0
- alambiq-0.1.0/src/alambiq/engines/qmmm_runner.py +422 -0
- alambiq-0.1.0/src/alambiq/engines/thermompnn_predict.py +121 -0
- alambiq-0.1.0/src/alambiq/engines/umbrella_analysis.py +806 -0
- alambiq-0.1.0/src/alambiq/report/__init__.py +0 -0
- alambiq-0.1.0/src/alambiq/report/assets/3Dmol-min.js +2 -0
- alambiq-0.1.0/src/alambiq/report/assets/3Dmol-min.js.LICENSE.txt +5 -0
- alambiq-0.1.0/src/alambiq/report/assets/LICENSE +90 -0
- alambiq-0.1.0/src/alambiq/report/assets/README.md +18 -0
- alambiq-0.1.0/src/alambiq/report/charts.py +417 -0
- alambiq-0.1.0/src/alambiq/report/page.py +204 -0
- alambiq-0.1.0/src/alambiq/report/viewers.py +196 -0
- alambiq-0.1.0/src/alambiq/resources/THIRD_PARTY_NOTICES.md +35 -0
- alambiq-0.1.0/src/alambiq/resources/__init__.py +1 -0
- alambiq-0.1.0/src/alambiq/resources/boltz2-2.2.1.json +41 -0
- alambiq-0.1.0/src/alambiq/resources/esm3-small.json +80 -0
- alambiq-0.1.0/src/alambiq/resources/esmc-300m.json +56 -0
- alambiq-0.1.0/src/alambiq/resources/p2rank-2.5.1.json +3014 -0
- alambiq-0.1.0/src/alambiq/resources/pfam-38.2-profiles.json +75 -0
- alambiq-0.1.0/src/alambiq/resources/thermompnn.json +68 -0
- alambiq-0.1.0/src/alambiq/resources/uniref50-2026_02.json +81 -0
- alambiq-0.1.0/src/alambiq.egg-info/PKG-INFO +171 -0
- alambiq-0.1.0/src/alambiq.egg-info/SOURCES.txt +615 -0
- alambiq-0.1.0/src/alambiq.egg-info/dependency_links.txt +1 -0
- alambiq-0.1.0/src/alambiq.egg-info/entry_points.txt +2 -0
- alambiq-0.1.0/src/alambiq.egg-info/requires.txt +46 -0
- alambiq-0.1.0/src/alambiq.egg-info/top_level.txt +1 -0
- alambiq-0.1.0/tests/core/__init__.py +0 -0
- alambiq-0.1.0/tests/core/native_signal_fixture.py +82 -0
- alambiq-0.1.0/tests/core/test_candidate_strategies.py +287 -0
- alambiq-0.1.0/tests/core/test_cli_resources.py +167 -0
- alambiq-0.1.0/tests/core/test_condition_fits.py +498 -0
- alambiq-0.1.0/tests/core/test_conformance.py +224 -0
- alambiq-0.1.0/tests/core/test_connected_investigation.py +173 -0
- alambiq-0.1.0/tests/core/test_construct_capabilities.py +269 -0
- alambiq-0.1.0/tests/core/test_core_imports.py +101 -0
- alambiq-0.1.0/tests/core/test_determinism.py +93 -0
- alambiq-0.1.0/tests/core/test_docker_files.py +62 -0
- alambiq-0.1.0/tests/core/test_documentation.py +130 -0
- alambiq-0.1.0/tests/core/test_engine_launcher.py +369 -0
- alambiq-0.1.0/tests/core/test_engine_openff_finite.py +263 -0
- alambiq-0.1.0/tests/core/test_engine_qmmm_coupling.py +277 -0
- alambiq-0.1.0/tests/core/test_engine_qmmm_dynamics.py +215 -0
- alambiq-0.1.0/tests/core/test_engine_qmmm_native.py +285 -0
- alambiq-0.1.0/tests/core/test_engine_qmmm_pyscf.py +400 -0
- alambiq-0.1.0/tests/core/test_engine_qmmm_state.py +353 -0
- alambiq-0.1.0/tests/core/test_engine_suites.py +49 -0
- alambiq-0.1.0/tests/core/test_engine_umbrella_analysis.py +673 -0
- alambiq-0.1.0/tests/core/test_engineering_capabilities.py +379 -0
- alambiq-0.1.0/tests/core/test_enzyme_capabilities.py +396 -0
- alambiq-0.1.0/tests/core/test_esm3_capabilities.py +569 -0
- alambiq-0.1.0/tests/core/test_examples.py +274 -0
- alambiq-0.1.0/tests/core/test_execution.py +517 -0
- alambiq-0.1.0/tests/core/test_first_mistakes.py +326 -0
- alambiq-0.1.0/tests/core/test_genome_inspect_context.py +229 -0
- alambiq-0.1.0/tests/core/test_licenses.py +75 -0
- alambiq-0.1.0/tests/core/test_loader.py +130 -0
- alambiq-0.1.0/tests/core/test_measurement_options.py +548 -0
- alambiq-0.1.0/tests/core/test_native_capture.py +92 -0
- alambiq-0.1.0/tests/core/test_native_descendants.py +53 -0
- alambiq-0.1.0/tests/core/test_native_process.py +139 -0
- alambiq-0.1.0/tests/core/test_native_signal.py +90 -0
- alambiq-0.1.0/tests/core/test_operating_conditions.py +907 -0
- alambiq-0.1.0/tests/core/test_operation_capabilities.py +338 -0
- alambiq-0.1.0/tests/core/test_operation_define.py +484 -0
- alambiq-0.1.0/tests/core/test_operation_propagate.py +448 -0
- alambiq-0.1.0/tests/core/test_option_coverage.py +535 -0
- alambiq-0.1.0/tests/core/test_pilot_capabilities.py +304 -0
- alambiq-0.1.0/tests/core/test_protein_embed.py +286 -0
- alambiq-0.1.0/tests/core/test_protein_explore_embeddings.py +339 -0
- alambiq-0.1.0/tests/core/test_protein_inspect.py +309 -0
- alambiq-0.1.0/tests/core/test_protein_match_profiles.py +345 -0
- alambiq-0.1.0/tests/core/test_protein_predict_stability_change.py +455 -0
- alambiq-0.1.0/tests/core/test_protein_score_substitutions.py +212 -0
- alambiq-0.1.0/tests/core/test_reaction_analyze_enzyme_panel.py +689 -0
- alambiq-0.1.0/tests/core/test_reaction_estimate_thermodynamics.py +518 -0
- alambiq-0.1.0/tests/core/test_reaction_explore_routes.py +423 -0
- alambiq-0.1.0/tests/core/test_reaction_inspect.py +454 -0
- alambiq-0.1.0/tests/core/test_relocation.py +240 -0
- alambiq-0.1.0/tests/core/test_report_lint.py +325 -0
- alambiq-0.1.0/tests/core/test_report_visuals.py +935 -0
- alambiq-0.1.0/tests/core/test_resources.py +456 -0
- alambiq-0.1.0/tests/core/test_reuse_identity.py +416 -0
- alambiq-0.1.0/tests/core/test_run_records.py +272 -0
- alambiq-0.1.0/tests/core/test_runtime_budgets.py +46 -0
- alambiq-0.1.0/tests/core/test_sequence_generate_msa.py +467 -0
- alambiq-0.1.0/tests/core/test_sequence_inspect_msa.py +244 -0
- alambiq-0.1.0/tests/core/test_simulation_analyze_binding_free_energy.py +639 -0
- alambiq-0.1.0/tests/core/test_simulation_analyze_reaction_free_energy.py +428 -0
- alambiq-0.1.0/tests/core/test_simulation_compare_replica_structures.py +603 -0
- alambiq-0.1.0/tests/core/test_simulation_compare_scalar_couplings.py +649 -0
- alambiq-0.1.0/tests/core/test_simulation_evaluate_qmmm_state.py +388 -0
- alambiq-0.1.0/tests/core/test_simulation_inspect_trajectory.py +904 -0
- alambiq-0.1.0/tests/core/test_simulation_run_metadynamics.py +462 -0
- alambiq-0.1.0/tests/core/test_simulation_run_molecular_dynamics.py +516 -0
- alambiq-0.1.0/tests/core/test_simulation_run_qmmm_dynamics.py +369 -0
- alambiq-0.1.0/tests/core/test_simulation_run_relative_free_energy.py +533 -0
- alambiq-0.1.0/tests/core/test_structure_compare.py +370 -0
- alambiq-0.1.0/tests/core/test_structure_detect_binding_pockets.py +358 -0
- alambiq-0.1.0/tests/core/test_structure_predict_biomolecular_complex.py +606 -0
- alambiq-0.1.0/tests/core/test_structure_prepare_finite_environment.py +324 -0
- alambiq-0.1.0/tests/core/test_structure_prepare_predicted_complex_for_dynamics.py +579 -0
- alambiq-0.1.0/tests/core/test_structure_prepare_protein_ligand_system.py +366 -0
- alambiq-0.1.0/tests/core/test_structure_prepare_protein_system.py +434 -0
- alambiq-0.1.0/tests/core/test_structure_prepare_reactive_coordinates.py +482 -0
- alambiq-0.1.0/tests/core/test_structure_prepare_relative_binding_inputs.py +389 -0
- alambiq-0.1.0/tests/core/test_variant_benchmark.py +199 -0
- alambiq-0.1.0/tests/core/test_variant_propose.py +350 -0
- alambiq-0.1.0/tests/core/test_writing.py +231 -0
- alambiq-0.1.0/tests/fixtures/README.md +16 -0
- alambiq-0.1.0/tests/fixtures/constructs/puc19.gb +103 -0
- alambiq-0.1.0/tests/fixtures/enzyme-reaction-panel/panel.json +12322 -0
- alambiq-0.1.0/tests/fixtures/enzyme-reaction-panel/parameters.json +2934 -0
- alambiq-0.1.0/tests/fixtures/enzyme-reaction-panel/source-accounting.json +36316 -0
- alambiq-0.1.0/tests/fixtures/hemoglobin/P69905.json +1 -0
- alambiq-0.1.0/tests/fixtures/hemoglobin/hemoglobin-alpha.fasta +2 -0
- alambiq-0.1.0/tests/fixtures/operation/ensemble-observations.json +66 -0
- alambiq-0.1.0/tests/fixtures/operation/enzyme-assessment.json +37 -0
- alambiq-0.1.0/tests/fixtures/operation/enzyme-batch.json +69 -0
- alambiq-0.1.0/tests/fixtures/operation/first-order-fit.json +175 -0
- alambiq-0.1.0/tests/fixtures/operation/first-order-observations.json +67 -0
- alambiq-0.1.0/tests/fixtures/operation/first-order.json +58 -0
- alambiq-0.1.0/tests/fixtures/operation/member-0.json +58 -0
- alambiq-0.1.0/tests/fixtures/operation/member-1.json +58 -0
- alambiq-0.1.0/tests/fixtures/operation/member-2.json +58 -0
- alambiq-0.1.0/tests/fixtures/operation/resources.json +106 -0
- alambiq-0.1.0/tests/fixtures/reactions/chorismate/manifest.json +33 -0
- alambiq-0.1.0/tests/fixtures/structures/181L.cif +3599 -0
- alambiq-0.1.0/tests/fixtures/structures/1A3N.cif +8411 -0
- alambiq-0.1.0/tests/fixtures/structures/1L2Y.cif +12625 -0
- alambiq-0.1.0/tests/fixtures/structures/1P7E.cif +2155 -0
- alambiq-0.1.0/tests/fixtures/variant-benchmark/bslipa-t50-observations.csv +2173 -0
- alambiq-0.1.0/tests/snapshots/reports/cofactor-regeneration.txt +15 -0
- alambiq-0.1.0/tests/snapshots/reports/connected-investigation.txt +37 -0
- alambiq-0.1.0/tests/snapshots/reports/kinetics-from-measurements.txt +7 -0
- alambiq-0.1.0/tests/snapshots/reports/lanmodulin-comparison.txt +18 -0
- alambiq-0.1.0/tests/snapshots/reports/measured-variant-rounds.txt +28 -0
- alambiq-0.1.0/tests/snapshots/reports/operation-from-progress-curves.txt +17 -0
- alambiq-0.1.0/tests/snapshots/reports/pockets-and-complex.txt +8 -0
- alambiq-0.1.0/tests/snapshots/reports/protein-first-look.txt +6 -0
- alambiq-0.1.0/tests/snapshots/reports/relatives-and-context.txt +12 -0
- alambiq-0.1.0/tests/snapshots/reports/representative-panel.txt +4 -0
- alambiq-0.1.0/tests/snapshots/reports/transformation-and-routes.txt +12 -0
- alambiq-0.1.0/tests/snapshots/reports/transformation-to-enzymes.txt +27 -0
- alambiq-0.1.0/tests/snapshots/reports/variant-to-construct.txt +11 -0
- alambiq-0.1.0/tools/README.md +43 -0
- alambiq-0.1.0/tools/benchmark_variant_proposal.py +427 -0
- alambiq-0.1.0/tools/check_distribution.py +152 -0
- alambiq-0.1.0/tools/check_getting_started.py +90 -0
- alambiq-0.1.0/tools/check_installed_package.py +113 -0
- alambiq-0.1.0/tools/scan_licenses.py +132 -0
- 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,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
|
alambiq-0.1.0/.gitignore
ADDED
|
@@ -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
|
alambiq-0.1.0/AGENTS.md
ADDED
|
@@ -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.
|