# Per-skill test environments. # # `python tests/run_all.py --isolated` builds one throwaway uv environment per # skill from this file, so a skill whose upstream pins conflict with another's # never has to share an interpreter. Nothing here is installed into the project # environment, and `uv sync` is unaffected. # # Each skill's `packages` list is the set the skill's SKILL.md, references, and # scripts actually name -- transitive dependencies are left to the resolver. # Skills whose bundled tooling is standard-library only have `packages = []`; # they still get a clean environment with just pytest. # # `python` overrides the interpreter for that skill alone. This is the reason # per-skill environments are worth the trouble: PyTDC and DeepChem need 3.11, # molfeat caps at 3.10, and AiZynthFinder will not install above 3.12. uv # downloads the interpreter on demand. # # Packages listed under [unavailable] are documented by a skill but cannot be # installed here at all; the reason is recorded so nobody re-derives it. [defaults] python = "3.13" # --- knowledge graphs and target discovery -------------------------------- [skills.ncats-arax] packages = [] # Standard-library-only API clients: the whole point of these three is that a # retrieval layer should not need an install to work. [skills.open-targets] packages = [] [skills.chembl] packages = [] [skills.uniprot-rcsb] packages = [] [skills.depmap] packages = ["numpy", "pandas", "requests", "scipy"] [skills.primekg] packages = ["pandas"] # --- proteins: design, folding, and docking ------------------------------- [skills.glycoengineering] packages = ["glycoshield", "pandas", "requests"] [skills.esm] packages = ["esm", "torch", "matplotlib", "numpy", "scikit-learn", "requests", "tqdm"] [skills.diffdock] packages = ["torch", "rdkit", "openmm", "esm", "pandas"] # ANARCI is on PyPI but needs HMMER (hmmscan) as a system binary; without it # the numbering tests skip and the standard-library ones still run. [skills.antibody-engineering] packages = ["anarci"] # --- small molecules: cheminformatics and molecular ML -------------------- [skills.rdkit] packages = ["rdkit"] [skills.datamol] packages = ["datamol", "rdkit", "s3fs", "gcsfs"] [skills.medchem] packages = ["medchem", "datamol", "rdkit", "pandas", "tqdm"] [skills.molfeat] python = "3.10" packages = ["molfeat", "datamol", "torch"] [skills.molecular-dynamics] packages = ["mdanalysis", "openmm", "matplotlib", "numpy", "pandas", "scipy"] [skills.rowan] packages = ["rowan-python", "rdkit", "pandas"] # The bundled helpers are standard-library only; the docking and folding # engines themselves are external (see [unavailable]). [skills.autodock-vina] packages = [] [skills.boltz] packages = [] [skills.deepchem] python = "3.11" # torch is what the skill's own `compatibility` line and the `deepchem[torch]` # install command require: without a backend, dc.models.GCNModel and friends do # not exist, so no model path is reachable at all. packages = ["deepchem", "torch", "numpy", "scikit-learn"] [skills.pytdc] python = "3.11" packages = ["pytdc", "setuptools"] [skills.tamarind] packages = ["tamarind", "requests"] [skills.adaptyv] packages = [] # --- design, synthesis, and chemical space --------------------------------- # # Each of these drives a heavy external tool (REINVENT4, AiZynthFinder, OpenFE, # fpocket, admet-ai). The bundled scripts only build its input and parse its # output, so the suites stay standard-library-only and run without the tool. [skills.generative-design] packages = [] [skills.retrosynthesis] packages = [] [skills.chemical-space] packages = [] [skills.admet-prediction] packages = [] [skills.free-energy-perturbation] packages = [] [skills.binding-site-analysis] packages = [] # --- clinical, regulatory, and translational ------------------------------- [skills.clinicaltrials] packages = [] [skills.openfda] packages = [] [skills.target-safety] packages = [] [skills.patent-landscape] packages = [] [skills.pkpd-translation] packages = [] # --- modalities beyond small molecules ------------------------------------- [skills.protein-binder-design] packages = [] [skills.degraders] packages = [] [skills.immunogenicity] packages = [] [skills.oligonucleotides] packages = [] # --- packages a skill documents that cannot be installed here ------------- # # The runner prints these when it sets up the skill, so the gap is visible in # the test output rather than rediscovered each time. [unavailable] adaptyv-sdk = "adaptyv skill: distributed from GitHub only, not on PyPI" dgl = "molfeat skill: no cp313 wheels" "flash-attn" = "esm skill: needs a CUDA toolchain to build" "lilly-medchem-rules" = "medchem skill: conda-forge only; the Lilly demerit filter is optional" vina = "autodock-vina skill: the docking engine is a binary (conda-forge or a release); the bundled scripts do not import it" meeko = "autodock-vina skill: installs from PyPI but is only used through its command-line scripts" boltz = "boltz skill: pulls a CUDA torch stack and caps at Python <3.13; the bundled scripts only read and write its files" hmmer = "antibody-engineering skill: a system binary (conda-forge/homebrew), not a Python package; ANARCI needs hmmscan on PATH"