rowan-python 3.1.14__tar.gz → 3.1.15__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.
- {rowan_python-3.1.14 → rowan_python-3.1.15}/PKG-INFO +2 -2
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/analogue-docking.md +3 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/batch-docking.md +4 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/docking.md +10 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/binding_affinity.py +1 -1
- rowan_python-3.1.15/examples/induced_fit_docking.py +61 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/pose_analysis_md.py +6 -2
- rowan_python-3.1.15/examples/protein_cofolding_modified_inputs.py +44 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/protein_md.py +4 -0
- rowan_python-3.1.15/examples/temporary_workflow_sharing.py +19 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/pixi.lock +16 -16
- {rowan_python-3.1.14 → rowan_python-3.1.15}/pyproject.toml +2 -2
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/__init__.py +6 -1
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/__init__.py +6 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/analogue_docking.py +1 -4
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/base.py +77 -4
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/batch_docking.py +31 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/binding_affinity.py +1 -6
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/docking.py +66 -1
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/pose_analysis_md.py +13 -1
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/protein_cofolding.py +24 -7
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/protein_md.py +9 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/solvent_dependent_conformers.py +8 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/tautomer_search.py +7 -1
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/SKILL.md +1 -1
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/analogue_docking.md +5 -6
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/batch_docking.md +8 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/binding_affinity.md +1 -2
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/docking.md +24 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/pose_analysis_md.md +1 -1
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/protein_cofolding.md +12 -5
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/protein_md.md +1 -1
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/python_sdk.md +20 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/solvent_dependent_conformers.md +2 -1
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/tautomer_search.md +1 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/tests/test_binding_affinity.py +1 -1
- rowan_python-3.1.15/tests/test_cofolding_workflow_updates.py +121 -0
- rowan_python-3.1.15/tests/test_docking_workflow.py +150 -0
- rowan_python-3.1.15/tests/test_docking_workflow_updates.py +117 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/tests/test_md_workflow_updates.py +30 -4
- rowan_python-3.1.15/tests/test_solvent_dependent_conformers.py +87 -0
- rowan_python-3.1.15/tests/test_tautomer_search.py +51 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/tests/test_workflow_submission.py +76 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/.agents/plugins/marketplace.json +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/.claude-plugin/marketplace.json +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/.codex-plugin/plugin.json +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/.envrc +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/.github/workflows/build-and-deploy-docs.yml +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/.github/workflows/publish-skill.yml +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/.github/workflows/python-publish.yml +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/.github/workflows/test.yml +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/.gitignore +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/.pre-commit-config.yaml +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/AGENTS.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/CLAUDE.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/GEMINI.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/LICENSE +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/README.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/api/api-keys.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/api/calculation.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/api/folder.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/api/molecule.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/api/project.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/api/protein.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/api/user.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/api/webhooks.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/api/workflow.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/images/RowanLogoLarge.png +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/images/RowanSquareLogo.png +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/images/favicon.svg +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/index.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/stylesheets/colors.css +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/admet.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/basic-calculation.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/binding-affinity.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/bond-dissociation-energy.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/conformer-search-settings.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/conformer-search.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/covalent-inhibitor-scan.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/descriptors.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/double-ended-ts-search.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/electronic-properties.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/fukui.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/hydrogen-bond-donor-acceptor-strength.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/interaction-energy-decomposition.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/ion-mobility.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/irc.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/logp.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/macropka.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/membrane-permeability.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/msa.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/multistage-optimization.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/nmr.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/pka.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/pocket-detection.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/pose-analysis-md.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/protein-binder-design.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/protein-cofolding.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/protein-md.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/protein-preparation.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/rbfe-graph.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/redox-potential.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/relative-binding-free-energy-perturbation.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/scan.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/settings.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/solubility.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/solvent-dependent-conformers.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/spin-states.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/strain.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/tautomer-search.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/docs/workflows/types.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/PROTAC_solubility.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/admet.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/analogue_docking.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/aqueous_solubility.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/basic_calculation.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/basic_calculation_from_json.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/basic_calculation_with_constraint.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/basic_calculation_with_solvent.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/batch_docking.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/batch_solubility.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/bde.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/boltz_paired_msa.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/boltz_single_msa.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/chai_paired_msa.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/chai_single_msa.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/cofolding_screen.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/colabfold_paired_msa.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/colabfold_single_msa.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/conformer_dependent_redox.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/conformers.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/conformers_screen.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/covalent_docking.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/covalent_inhibitor_scan.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/data/1iep_receptorH.pdb +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/data/Al_FCC.xyz +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/data/citalopram_1iep.xyz +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/data/ibuprofen_conformers.sdf +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/data/tyk2_ligands.sdf +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/data/tyk2_structure.pdb +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/data/workflow_example.json +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/dcd_download.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/descriptors.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/docking.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/docking_screen.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/double_ended_ts_search.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/electronic_properties.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/estimate_workflow.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/fukui_index.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/hydrogen_bond_basicity.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/interaction_energy_decomposition.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/ion_mobility.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/irc.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/logp.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/macropka.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/membrane_permeability.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/multistage_optimization.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/nmr.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/optimization.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/pdb_download.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/periodic_dft.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/phenol_pka.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/pka.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/pocket_detection.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/project_scoped_api_key.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/protein_binder_design.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/protein_cofolding.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/protein_cofolding_with_constraints.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/protein_cofolding_with_templates.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/protein_preparation.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/rbfe_graph.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/rbfe_resubmit.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/redox_potential.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/relative_binding_free_energy_perturbation.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/resubmit_with_perturbations.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/retrieve_workflow.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/scan.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/solvent_dependent_conformers.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/spin_states.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/strain.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/tautomer.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/template.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/examples/webhook.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/mkdocs.yml +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/api_keys.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/calculation.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/config.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/constants.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/folder.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/molecule.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/project.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/protein.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/py.typed +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/types.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/user.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/utils.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/_molecular_dynamics.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/admet.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/basic_calculation.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/bde.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/conformer_search.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/constants.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/covalent_inhibitor_scan.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/descriptors.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/double_ended_ts_search.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/electronic_properties.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/fukui.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/hydrogen_bond_donor_acceptor_strength.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/interaction_energy_decomposition.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/ion_mobility.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/irc.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/logp.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/macropka.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/membrane_permeability.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/msa.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/multistage_optimization.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/nmr.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/pka.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/pocket_detection.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/protein_binder_design.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/protein_preparation.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/rbfe_graph.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/redox_potential.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/relative_binding_free_energy_perturbation.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/scan.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/solubility.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/spin_states.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/rowan/workflows/strain.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/.claude-plugin/plugin.json +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/admet.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/basic_calculation.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/bde.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/conformer_search.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/covalent_inhibitor_scan.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/descriptors.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/double_ended_ts_search.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/electronic_properties.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/folders_and_projects.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/fukui.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/hydrogen_bond_donor_acceptor_strength.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/interaction_energy_decomposition.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/ion_mobility.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/irc.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/logp.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/macropka.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/mcp_execution.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/membrane_permeability.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/msa.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/multistage_optimization.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/nmr.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/pka.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/pocket_detection.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/protein_binder_design.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/protein_preparation.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/rbfe_graph.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/redox_potential.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/relative_binding_free_energy_perturbation.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/scan.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/solubility.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/spin_states.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/strain.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/reference/webhooks.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/skills/computational-chemistry-and-biology/scripts/check_env.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/tests/test_macropka_nmr.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/tests/test_mango_forcefields.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/tests/test_plugin.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/tests/test_protein.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.15}/tests/test_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: rowan-python
|
|
3
|
-
Version: 3.1.
|
|
3
|
+
Version: 3.1.15
|
|
4
4
|
Summary: Rowan Python Library
|
|
5
5
|
Project-URL: Homepage, https://github.com/rowansci/rowan-client
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/rowansci/rowan-client/issues
|
|
@@ -11,7 +11,7 @@ Requires-Dist: httpx
|
|
|
11
11
|
Requires-Dist: nest-asyncio
|
|
12
12
|
Requires-Dist: rdkit
|
|
13
13
|
Requires-Dist: setuptools
|
|
14
|
-
Requires-Dist: stjames>=0.0.
|
|
14
|
+
Requires-Dist: stjames>=0.0.261
|
|
15
15
|
Description-Content-Type: text/markdown
|
|
16
16
|
|
|
17
17
|
# Rowan Python Library
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Batch Docking
|
|
2
2
|
|
|
3
|
+
Use `num_poses_to_save` to retain the best pose for that many top-scoring compounds, and set
|
|
4
|
+
`run_mmgbsa=True` to refine those saved poses. `result.refined_scores` maps every input SMILES
|
|
5
|
+
to a `DockingScore` for a retained compound or `None` otherwise.
|
|
6
|
+
|
|
3
7
|
::: rowan.workflows.batch_docking
|
|
4
8
|
handler: python
|
|
5
9
|
options:
|
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
The docking workflow supports Vina docking and both noncovalent and covalent gnina docking.
|
|
4
4
|
Passing `GninaSettings` selects gnina; it does not by itself enable covalent docking.
|
|
5
5
|
|
|
6
|
+
## Induced-fit docking
|
|
7
|
+
|
|
8
|
+
Pass `rowan.InducedFitSettings()` to `induced_fit_settings` when nearby receptor side chains may
|
|
9
|
+
need to relax around the ligand. Induced fit requires Vina or QVina2 and adds substantial work
|
|
10
|
+
beyond rigid docking.
|
|
11
|
+
|
|
12
|
+
Results contain both rigid and induced-receptor poses ranked by `induced_fit_score`. Use
|
|
13
|
+
`get_induced_receptor()` or `get_induced_receptors()` to retrieve the relaxed receptors associated
|
|
14
|
+
with induced poses. See `examples/induced_fit_docking.py` for a complete example.
|
|
15
|
+
|
|
6
16
|
## Covalent docking
|
|
7
17
|
|
|
8
18
|
Set both covalent atom indices on `GninaSettings` to form a bond between a known ligand atom and
|
|
@@ -25,4 +25,4 @@ for name, score in zip(ligands.keys(), result.scores, strict=False):
|
|
|
25
25
|
if score is None:
|
|
26
26
|
print(f"{name}: scoring failed")
|
|
27
27
|
continue
|
|
28
|
-
print(f"{name}: {score.binding_affinity:.2f} kcal/mol
|
|
28
|
+
print(f"{name}: {score.binding_affinity:.2f} kcal/mol")
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import rowan
|
|
2
|
+
|
|
3
|
+
# Set your API key or use the ROWAN_API_KEY environment variable
|
|
4
|
+
# rowan.api_key = "rowan-sk..."
|
|
5
|
+
folder = rowan.get_folder("examples")
|
|
6
|
+
|
|
7
|
+
# Dasatinib — redocked into its own ABL1 co-crystal structure (PDB: 2GQG)
|
|
8
|
+
dasatinib = rowan.Molecule.from_smiles("Cc1nc(Nc2ncc(C(=O)Nc3c(C)cccc3Cl)s2)cc(N2CCN(CCO)CC2)n1")
|
|
9
|
+
|
|
10
|
+
protein = rowan.create_protein_from_pdb_id("2GQG")
|
|
11
|
+
protein = protein.select_chains(["A"])
|
|
12
|
+
preparation_workflow = rowan.submit_protein_preparation_workflow(
|
|
13
|
+
protein=protein.uuid,
|
|
14
|
+
add_missing_method="pdbfixer",
|
|
15
|
+
name="Prepare ABL1",
|
|
16
|
+
folder=folder,
|
|
17
|
+
)
|
|
18
|
+
prepared_protein_uuid = preparation_workflow.result().prepared_protein_uuid
|
|
19
|
+
|
|
20
|
+
# Pocket is [[center_x, center_y, center_z], [size_x, size_y, size_z]] in Å.
|
|
21
|
+
center = [44.59, 79.75, 39.59]
|
|
22
|
+
size = [24.15, 21.33, 19.88]
|
|
23
|
+
|
|
24
|
+
# Induced-fit docking soft-docks candidate poses, relaxes the receptor around each with
|
|
25
|
+
# restrained local minimization, and redocks into the relaxed receptor. It requires
|
|
26
|
+
# VinaSettings with executable="vina" or "qvina2" (the default is "vina").
|
|
27
|
+
induced_fit_settings = rowan.InducedFitSettings(
|
|
28
|
+
max_receptors=6,
|
|
29
|
+
flexible_sidechain_radius=5.0,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
workflow = rowan.submit_docking_workflow(
|
|
33
|
+
prepared_protein_uuid,
|
|
34
|
+
pocket=[center, size],
|
|
35
|
+
initial_molecule=dasatinib,
|
|
36
|
+
induced_fit_settings=induced_fit_settings,
|
|
37
|
+
name="Dasatinib induced-fit docking",
|
|
38
|
+
folder=folder,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
print(f"View workflow privately at: https://labs.rowansci.com/docking/{workflow.uuid}")
|
|
42
|
+
|
|
43
|
+
result = workflow.result()
|
|
44
|
+
print(result)
|
|
45
|
+
|
|
46
|
+
# With induced-fit docking, poses are ranked by induced_fit_score rather than raw docking score.
|
|
47
|
+
for i, score in enumerate(result.scores):
|
|
48
|
+
print(
|
|
49
|
+
f" Pose {i}: induced_fit_score={score.induced_fit_score:.3f} "
|
|
50
|
+
f"score={score.score:.3f} receptor_strain={score.receptor_strain}"
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
# Download the top-scoring complex and best-ranked relaxed receptor as PDBs
|
|
54
|
+
complex_protein = result.get_complex(0)
|
|
55
|
+
complex_protein.download_pdb_file(name="dasatinib_2GQG_induced_complex")
|
|
56
|
+
print("Saved dasatinib_2GQG_induced_complex.pdb")
|
|
57
|
+
|
|
58
|
+
induced_receptors = result.get_induced_receptors()
|
|
59
|
+
if induced_receptors:
|
|
60
|
+
induced_receptors[0].download_pdb_file(name="dasatinib_2GQG_induced_receptor")
|
|
61
|
+
print("Saved dasatinib_2GQG_induced_receptor.pdb")
|
|
@@ -45,5 +45,9 @@ print(
|
|
|
45
45
|
)
|
|
46
46
|
md_result = md_workflow.result()
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
print(
|
|
48
|
+
trajectory = md_result.trajectories[0]
|
|
49
|
+
print(f"Ligand RMSD: {trajectory.ligand_rmsd}")
|
|
50
|
+
print(f"Protein RMSD: {trajectory.protein_rmsd}")
|
|
51
|
+
print(f"Protein RMSF: {trajectory.rmsf}")
|
|
52
|
+
print(f"Potential energy: {trajectory.potential_energy} Hartree")
|
|
53
|
+
print(f"MM/GBSA scores: {trajectory.mmgbsa_scores} kcal/mol")
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"""Cofolding with modified polymers and a covalent bond constraint."""
|
|
2
|
+
|
|
3
|
+
import rowan
|
|
4
|
+
|
|
5
|
+
# Set your API key or use the ROWAN_API_KEY environment variable.
|
|
6
|
+
# rowan.api_key = "rowan-sk..."
|
|
7
|
+
folder = rowan.get_folder("examples")
|
|
8
|
+
|
|
9
|
+
protein = rowan.ProteinSequence(
|
|
10
|
+
sequence="ASA",
|
|
11
|
+
modifications=[rowan.ResidueModification(position=1, ccd="SEP")],
|
|
12
|
+
)
|
|
13
|
+
dna = rowan.DNASequence(
|
|
14
|
+
sequence="AC",
|
|
15
|
+
modifications=[rowan.NucleotideModification(position=1, ccd="5MC")],
|
|
16
|
+
)
|
|
17
|
+
rna = rowan.RNASequence(
|
|
18
|
+
sequence="AU",
|
|
19
|
+
modifications=[rowan.NucleotideModification(position=1, ccd="PSU")],
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
protein_atom = rowan.ConstraintTarget(
|
|
23
|
+
input_type="protein", input_index=0, token_index=1, atom_name="OG"
|
|
24
|
+
)
|
|
25
|
+
ligand_atom = rowan.ConstraintTarget(input_type="ligand", input_index=0, token_index=0)
|
|
26
|
+
covalent_bond = rowan.BondConstraint(atom_1=protein_atom, atom_2=ligand_atom)
|
|
27
|
+
|
|
28
|
+
workflow = rowan.submit_protein_cofolding_workflow(
|
|
29
|
+
initial_protein_sequences=[protein],
|
|
30
|
+
initial_dna_sequences=[dna],
|
|
31
|
+
initial_rna_sequences=[rna],
|
|
32
|
+
initial_smiles_list=["CBr"],
|
|
33
|
+
bond_constraints=[covalent_bond],
|
|
34
|
+
model=rowan.CofoldingModel.BOLTZ_2,
|
|
35
|
+
num_samples=1,
|
|
36
|
+
name="Modified polymers with covalent constraint",
|
|
37
|
+
folder=folder,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
print(f"View workflow privately at: https://labs.rowansci.com/protein-cofolding/{workflow.uuid}")
|
|
41
|
+
result = workflow.result()
|
|
42
|
+
print(result)
|
|
43
|
+
for i, prediction in enumerate(result.predictions):
|
|
44
|
+
print(f" sample {i}: scores={prediction.scores}")
|
|
@@ -21,3 +21,7 @@ md_workflow = rowan.submit_protein_md_workflow(
|
|
|
21
21
|
)
|
|
22
22
|
|
|
23
23
|
print(f"View MD workflow privately at: https://labs.rowansci.com/protein-md/{md_workflow.uuid}")
|
|
24
|
+
trajectory = md_workflow.result().trajectories[0]
|
|
25
|
+
print(f"Protein RMSD: {trajectory.protein_rmsd}")
|
|
26
|
+
print(f"Protein RMSF: {trajectory.rmsf}")
|
|
27
|
+
print(f"Potential energy: {trajectory.potential_energy} Hartree")
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"""Example: temporarily share a workflow with anyone who has its link."""
|
|
2
|
+
|
|
3
|
+
import rowan
|
|
4
|
+
|
|
5
|
+
# Set your API key or use the ROWAN_API_KEY environment variable.
|
|
6
|
+
# rowan.api_key = "rowan-sk..."
|
|
7
|
+
|
|
8
|
+
workflow = rowan.retrieve_workflow("your-workflow-uuid")
|
|
9
|
+
|
|
10
|
+
# Temporary shares can last for up to 120 minutes. This does not make the workflow
|
|
11
|
+
# permanently public: `workflow.public` remains unchanged.
|
|
12
|
+
workflow = workflow.temporarily_share(duration_minutes=60)
|
|
13
|
+
|
|
14
|
+
print(f"Share URL: https://labs.rowansci.com/workflow/{workflow.uuid}")
|
|
15
|
+
print(f"Public until: {workflow.public_until}")
|
|
16
|
+
print(f"Temporary share active: {workflow.is_temporarily_public}")
|
|
17
|
+
|
|
18
|
+
# End access before the expiration time if needed.
|
|
19
|
+
# workflow = workflow.end_temporary_share()
|
|
@@ -51,6 +51,7 @@ environments:
|
|
|
51
51
|
- pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl
|
|
52
52
|
- pypi: https://files.pythonhosted.org/packages/57/b0/0e52c878c53f245edd3a11020f20979b3f490f245af532c7cae3027754b5/idna-3.19-py3-none-any.whl
|
|
53
53
|
- pypi: https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
|
|
54
|
+
- pypi: https://files.pythonhosted.org/packages/65/e8/891341b63e2bb9e2aa3950583fa05182c572e80ec0d9542af24d57f0e923/stjames-0.0.263-py3-none-any.whl
|
|
54
55
|
- pypi: https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl
|
|
55
56
|
- pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
|
|
56
57
|
- pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl
|
|
@@ -59,7 +60,6 @@ environments:
|
|
|
59
60
|
- pypi: https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl
|
|
60
61
|
- pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl
|
|
61
62
|
- pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl
|
|
62
|
-
- pypi: https://files.pythonhosted.org/packages/a2/38/803820d0533c768bc8da6519ca0cd76a82e36c413a3c1eeaf22aa524af6d/stjames-0.0.260-py3-none-any.whl
|
|
63
63
|
- pypi: https://files.pythonhosted.org/packages/c7/99/461bd36dbdfac6c1c53efa370bd55a83227542d0d118f1677dbf1a3dacd5/numpy-2.5.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
|
|
64
64
|
- pypi: https://files.pythonhosted.org/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl
|
|
65
65
|
- pypi: https://files.pythonhosted.org/packages/e0/91/39c3af510b0aa32bbda03374259200f28430febfd1bf5e511fe765282ce5/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
|
|
@@ -93,6 +93,7 @@ environments:
|
|
|
93
93
|
- pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl
|
|
94
94
|
- pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl
|
|
95
95
|
- pypi: https://files.pythonhosted.org/packages/57/b0/0e52c878c53f245edd3a11020f20979b3f490f245af532c7cae3027754b5/idna-3.19-py3-none-any.whl
|
|
96
|
+
- pypi: https://files.pythonhosted.org/packages/65/e8/891341b63e2bb9e2aa3950583fa05182c572e80ec0d9542af24d57f0e923/stjames-0.0.263-py3-none-any.whl
|
|
96
97
|
- pypi: https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl
|
|
97
98
|
- pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
|
|
98
99
|
- pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl
|
|
@@ -100,7 +101,6 @@ environments:
|
|
|
100
101
|
- pypi: https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl
|
|
101
102
|
- pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl
|
|
102
103
|
- pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl
|
|
103
|
-
- pypi: https://files.pythonhosted.org/packages/a2/38/803820d0533c768bc8da6519ca0cd76a82e36c413a3c1eeaf22aa524af6d/stjames-0.0.260-py3-none-any.whl
|
|
104
104
|
- pypi: https://files.pythonhosted.org/packages/ae/d5/d8a4eb6d6c7f66b91dd37c576d76e9e60fba900caf5372c17bcf949febc2/pydantic_core-2.46.5-cp314-cp314-macosx_11_0_arm64.whl
|
|
105
105
|
- pypi: https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl
|
|
106
106
|
- pypi: https://files.pythonhosted.org/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl
|
|
@@ -170,6 +170,7 @@ environments:
|
|
|
170
170
|
- pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl
|
|
171
171
|
- pypi: https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl
|
|
172
172
|
- pypi: https://files.pythonhosted.org/packages/64/69/4a5af2bc115a9a33fefe51709749de8262be3f9ba063d1753a837cdbc49c/markdown-3.10.3-py3-none-any.whl
|
|
173
|
+
- pypi: https://files.pythonhosted.org/packages/65/e8/891341b63e2bb9e2aa3950583fa05182c572e80ec0d9542af24d57f0e923/stjames-0.0.263-py3-none-any.whl
|
|
173
174
|
- pypi: https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl
|
|
174
175
|
- pypi: https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl
|
|
175
176
|
- pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl
|
|
@@ -194,7 +195,6 @@ environments:
|
|
|
194
195
|
- pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl
|
|
195
196
|
- pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl
|
|
196
197
|
- pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl
|
|
197
|
-
- pypi: https://files.pythonhosted.org/packages/a2/38/803820d0533c768bc8da6519ca0cd76a82e36c413a3c1eeaf22aa524af6d/stjames-0.0.260-py3-none-any.whl
|
|
198
198
|
- pypi: https://files.pythonhosted.org/packages/a3/9c/a1bda6439c19c4783d50df896142b67b9e7d432db36675d339a32778669d/coverage-7.16.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
|
|
199
199
|
- pypi: https://files.pythonhosted.org/packages/a6/43/9f45ec4d14e596efc32c925a78104934790438b0c0628b70d741016734ad/pymdown_extensions-11.0.2-py3-none-any.whl
|
|
200
200
|
- pypi: https://files.pythonhosted.org/packages/ad/21/17c1bc9e6f47c972ad66fb2ac2568f99f90f1207eeb6fc3b34d094dba7b5/mkdocs_material-9.7.7-py3-none-any.whl
|
|
@@ -277,6 +277,7 @@ environments:
|
|
|
277
277
|
- pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl
|
|
278
278
|
- pypi: https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl
|
|
279
279
|
- pypi: https://files.pythonhosted.org/packages/64/69/4a5af2bc115a9a33fefe51709749de8262be3f9ba063d1753a837cdbc49c/markdown-3.10.3-py3-none-any.whl
|
|
280
|
+
- pypi: https://files.pythonhosted.org/packages/65/e8/891341b63e2bb9e2aa3950583fa05182c572e80ec0d9542af24d57f0e923/stjames-0.0.263-py3-none-any.whl
|
|
280
281
|
- pypi: https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl
|
|
281
282
|
- pypi: https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl
|
|
282
283
|
- pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl
|
|
@@ -298,7 +299,6 @@ environments:
|
|
|
298
299
|
- pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl
|
|
299
300
|
- pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl
|
|
300
301
|
- pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl
|
|
301
|
-
- pypi: https://files.pythonhosted.org/packages/a2/38/803820d0533c768bc8da6519ca0cd76a82e36c413a3c1eeaf22aa524af6d/stjames-0.0.260-py3-none-any.whl
|
|
302
302
|
- pypi: https://files.pythonhosted.org/packages/a6/43/9f45ec4d14e596efc32c925a78104934790438b0c0628b70d741016734ad/pymdown_extensions-11.0.2-py3-none-any.whl
|
|
303
303
|
- pypi: https://files.pythonhosted.org/packages/a6/e9/6e8be8df02b35d85e2b8809f7f1cfa290bdf5882b55127a539d049482db0/ast_serialize-0.8.0-cp39-abi3-macosx_11_0_arm64.whl
|
|
304
304
|
- pypi: https://files.pythonhosted.org/packages/ad/21/17c1bc9e6f47c972ad66fb2ac2568f99f90f1207eeb6fc3b34d094dba7b5/mkdocs_material-9.7.7-py3-none-any.whl
|
|
@@ -912,7 +912,7 @@ packages:
|
|
|
912
912
|
name: rowan-python
|
|
913
913
|
requires_dist:
|
|
914
914
|
- httpx
|
|
915
|
-
- stjames>=0.0.
|
|
915
|
+
- stjames>=0.0.261
|
|
916
916
|
- setuptools
|
|
917
917
|
- rdkit
|
|
918
918
|
- nest-asyncio
|
|
@@ -1293,6 +1293,17 @@ packages:
|
|
|
1293
1293
|
- mkdocs-section-index ; extra == 'docs'
|
|
1294
1294
|
- mkdocs-literate-nav ; extra == 'docs'
|
|
1295
1295
|
requires_python: '>=3.10'
|
|
1296
|
+
- pypi: https://files.pythonhosted.org/packages/65/e8/891341b63e2bb9e2aa3950583fa05182c572e80ec0d9542af24d57f0e923/stjames-0.0.263-py3-none-any.whl
|
|
1297
|
+
name: stjames
|
|
1298
|
+
version: 0.0.263
|
|
1299
|
+
sha256: 3b5f1e79a8de0f73e1940f132a8546f6530a7925fe78b7a16d405ab14516e8cf
|
|
1300
|
+
requires_dist:
|
|
1301
|
+
- pydantic>=2.4
|
|
1302
|
+
- numpy
|
|
1303
|
+
- requests
|
|
1304
|
+
- more-itertools
|
|
1305
|
+
- rdkit ; extra == 'rdkit'
|
|
1306
|
+
requires_python: '>=3.11'
|
|
1296
1307
|
- pypi: https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl
|
|
1297
1308
|
name: typing-inspection
|
|
1298
1309
|
version: 0.4.4
|
|
@@ -1627,17 +1638,6 @@ packages:
|
|
|
1627
1638
|
- pysocks>=1.5.6,!=1.5.7 ; extra == 'socks'
|
|
1628
1639
|
- chardet>=3.0.2,<8 ; extra == 'use-chardet-on-py3'
|
|
1629
1640
|
requires_python: '>=3.10'
|
|
1630
|
-
- pypi: https://files.pythonhosted.org/packages/a2/38/803820d0533c768bc8da6519ca0cd76a82e36c413a3c1eeaf22aa524af6d/stjames-0.0.260-py3-none-any.whl
|
|
1631
|
-
name: stjames
|
|
1632
|
-
version: 0.0.260
|
|
1633
|
-
sha256: 17a4b3ed20399b2e8a789a39615e40cb30ee8d2a58665b855989f5a4f32c5706
|
|
1634
|
-
requires_dist:
|
|
1635
|
-
- pydantic>=2.4
|
|
1636
|
-
- numpy
|
|
1637
|
-
- requests
|
|
1638
|
-
- more-itertools
|
|
1639
|
-
- rdkit ; extra == 'rdkit'
|
|
1640
|
-
requires_python: '>=3.11'
|
|
1641
1641
|
- pypi: https://files.pythonhosted.org/packages/a3/9c/a1bda6439c19c4783d50df896142b67b9e7d432db36675d339a32778669d/coverage-7.16.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
|
|
1642
1642
|
name: coverage
|
|
1643
1643
|
version: 7.16.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "rowan-python"
|
|
3
|
-
version = "3.1.
|
|
3
|
+
version = "3.1.15"
|
|
4
4
|
description = "Rowan Python Library"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -9,7 +9,7 @@ authors = [
|
|
|
9
9
|
]
|
|
10
10
|
dependencies = [
|
|
11
11
|
"httpx",
|
|
12
|
-
"stjames>=0.0.
|
|
12
|
+
"stjames>=0.0.261",
|
|
13
13
|
"setuptools",
|
|
14
14
|
"rdkit",
|
|
15
15
|
"nest-asyncio",
|
|
@@ -15,6 +15,7 @@ from stjames import (
|
|
|
15
15
|
ConformerClusteringSettings,
|
|
16
16
|
ConformerGenSettingsUnion,
|
|
17
17
|
Correction,
|
|
18
|
+
DNASequence,
|
|
18
19
|
DockingSettings,
|
|
19
20
|
Engine,
|
|
20
21
|
ETKDGSettings,
|
|
@@ -22,6 +23,7 @@ from stjames import (
|
|
|
22
23
|
GninaSettings,
|
|
23
24
|
GreedyClusteringSettings,
|
|
24
25
|
iMTDSettings,
|
|
26
|
+
InducedFitSettings,
|
|
25
27
|
KMeansClusteringSettings,
|
|
26
28
|
Method,
|
|
27
29
|
Mode,
|
|
@@ -29,12 +31,15 @@ from stjames import (
|
|
|
29
31
|
MultiStageOptSettings,
|
|
30
32
|
NessoAffinitySettings,
|
|
31
33
|
NMR_SUPPORTED_SOLVENTS,
|
|
34
|
+
NucleotideModification,
|
|
32
35
|
OpenConfSettings,
|
|
33
36
|
OptimizationSettings,
|
|
34
37
|
PBCDFTSettings,
|
|
35
38
|
PeriodicCell,
|
|
36
39
|
ProteinSequence,
|
|
37
40
|
ProteinForceField,
|
|
41
|
+
ResidueModification,
|
|
42
|
+
RNASequence,
|
|
38
43
|
ScanSettings,
|
|
39
44
|
Settings,
|
|
40
45
|
Solvent,
|
|
@@ -71,7 +76,7 @@ from .api_keys import *
|
|
|
71
76
|
from .calculation import *
|
|
72
77
|
from .folder import *
|
|
73
78
|
from .molecule import *
|
|
74
|
-
from .types import ProteinUUID, RdkitMol, StJamesMolecule, StructureInput
|
|
79
|
+
from .types import ProteinUUID, RdkitMol, SMILES, StJamesMolecule, StructureInput
|
|
75
80
|
from .workflows import *
|
|
76
81
|
from .project import *
|
|
77
82
|
from .protein import *
|
|
@@ -110,13 +110,19 @@ from .protein_binder_design import (
|
|
|
110
110
|
submit_protein_binder_design_workflow,
|
|
111
111
|
)
|
|
112
112
|
from .protein_cofolding import (
|
|
113
|
+
BondConstraint,
|
|
113
114
|
CofoldingModel,
|
|
114
115
|
CofoldingResult,
|
|
115
116
|
CofoldingTemplate,
|
|
116
117
|
ConstraintTarget,
|
|
117
118
|
ContactConstraint,
|
|
119
|
+
DNASequence,
|
|
120
|
+
NucleotideModification,
|
|
118
121
|
PocketConstraint,
|
|
119
122
|
ProteinCofoldingResult,
|
|
123
|
+
ProteinSequence,
|
|
124
|
+
ResidueModification,
|
|
125
|
+
RNASequence,
|
|
120
126
|
submit_protein_cofolding_workflow,
|
|
121
127
|
)
|
|
122
128
|
from .protein_md import ProteinMDResult, submit_protein_md_workflow
|
|
@@ -191,8 +191,7 @@ def submit_analogue_docking_workflow(
|
|
|
191
191
|
scoring_function: Literal["vina", "vinardo"] = "vinardo",
|
|
192
192
|
exhaustiveness: int = 8,
|
|
193
193
|
max_poses: int = 4,
|
|
194
|
-
num_conformers_per_analogue: int =
|
|
195
|
-
require_posebusters: bool = False,
|
|
194
|
+
num_conformers_per_analogue: int = 20,
|
|
196
195
|
run_local_optimization: bool = False,
|
|
197
196
|
name: str = "Analogue Docking Workflow",
|
|
198
197
|
folder_uuid: str | None = None,
|
|
@@ -214,7 +213,6 @@ def submit_analogue_docking_workflow(
|
|
|
214
213
|
:param exhaustiveness: How many times Vina attempts to find a pose for each conformer.
|
|
215
214
|
:param max_poses: Maximum number of poses generated per input conformer.
|
|
216
215
|
:param num_conformers_per_analogue: Maximum number of conformers to generate per analogue.
|
|
217
|
-
:param require_posebusters: Filter conformers based on PoseBusters validity before docking.
|
|
218
216
|
:param run_local_optimization: Whether to run a local opt in docking pocket or just score.
|
|
219
217
|
:param name: Name of the workflow.
|
|
220
218
|
:param folder_uuid: UUID of the folder to place the workflow in.
|
|
@@ -254,7 +252,6 @@ def submit_analogue_docking_workflow(
|
|
|
254
252
|
protein=protein,
|
|
255
253
|
docking_settings=docking_settings,
|
|
256
254
|
num_conformers_per_analogue=num_conformers_per_analogue,
|
|
257
|
-
require_posebusters=require_posebusters,
|
|
258
255
|
run_local_optimization=run_local_optimization,
|
|
259
256
|
)
|
|
260
257
|
|
|
@@ -75,9 +75,19 @@ class DispatchInfo:
|
|
|
75
75
|
|
|
76
76
|
|
|
77
77
|
class WorkflowError(Exception):
|
|
78
|
-
"""Raised when a workflow
|
|
78
|
+
"""Raised when a workflow cannot return a result.
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
The complete backend log is available through :attr:`logfile` rather than being included in
|
|
81
|
+
the exception text. It provides diagnostic context only and is not a source of workflow result
|
|
82
|
+
values.
|
|
83
|
+
|
|
84
|
+
:param message: error summary
|
|
85
|
+
:param logfile: workflow log returned by the API, when available
|
|
86
|
+
"""
|
|
87
|
+
|
|
88
|
+
def __init__(self, message: str, *, logfile: str = "") -> None:
|
|
89
|
+
self.logfile = logfile
|
|
90
|
+
super().__init__(message)
|
|
81
91
|
|
|
82
92
|
|
|
83
93
|
@dataclass(slots=True, repr=False)
|
|
@@ -195,6 +205,8 @@ class Workflow(BaseModel):
|
|
|
195
205
|
:param notes: Workflow notes.
|
|
196
206
|
:param starred: Whether the workflow is starred.
|
|
197
207
|
:param public: Whether the workflow is public.
|
|
208
|
+
:param public_until: Date and time until which the workflow is temporarily public.
|
|
209
|
+
:param is_temporarily_public: Whether temporary public access is currently active.
|
|
198
210
|
:param workflow_type: Type of the workflow.
|
|
199
211
|
:param data: Data of the workflow.
|
|
200
212
|
:param email_when_complete: Whether to send an email when the workflow completes.
|
|
@@ -217,6 +229,8 @@ class Workflow(BaseModel):
|
|
|
217
229
|
notes: str
|
|
218
230
|
starred: bool
|
|
219
231
|
public: bool
|
|
232
|
+
public_until: datetime | None = None
|
|
233
|
+
is_temporarily_public: bool = False
|
|
220
234
|
workflow_type: str = Field(alias="object_type")
|
|
221
235
|
data: dict[str, Any] | None = Field(default=None, alias="object_data")
|
|
222
236
|
email_when_complete: bool
|
|
@@ -325,6 +339,58 @@ Workflow: {self.name}
|
|
|
325
339
|
|
|
326
340
|
return self
|
|
327
341
|
|
|
342
|
+
def temporarily_share(self, duration_minutes: int, in_place: bool = False) -> Self:
|
|
343
|
+
"""Temporarily make the workflow publicly accessible.
|
|
344
|
+
|
|
345
|
+
Temporary sharing does not change :attr:`public`. The returned workflow instead records
|
|
346
|
+
the expiration in :attr:`public_until` and reports the active state through
|
|
347
|
+
:attr:`is_temporarily_public`.
|
|
348
|
+
|
|
349
|
+
:param duration_minutes: Number of minutes to share the workflow, up to 120.
|
|
350
|
+
:param in_place: Whether to update the current instance in-place.
|
|
351
|
+
:returns: Workflow with the temporary sharing state returned by the API.
|
|
352
|
+
:raises HTTPError: If the API request fails.
|
|
353
|
+
"""
|
|
354
|
+
with api_client() as client:
|
|
355
|
+
response = client.post(
|
|
356
|
+
f"/workflow/{self.uuid}/temporarily_share",
|
|
357
|
+
params={"duration_minutes": duration_minutes},
|
|
358
|
+
)
|
|
359
|
+
response.raise_for_status()
|
|
360
|
+
data = response.json()
|
|
361
|
+
|
|
362
|
+
if not in_place:
|
|
363
|
+
return type(self).model_validate(data)
|
|
364
|
+
|
|
365
|
+
updated_workflow = self.model_validate(data)
|
|
366
|
+
for field_name in type(self).model_fields:
|
|
367
|
+
setattr(self, field_name, getattr(updated_workflow, field_name))
|
|
368
|
+
|
|
369
|
+
return self
|
|
370
|
+
|
|
371
|
+
def end_temporary_share(self, in_place: bool = False) -> Self:
|
|
372
|
+
"""End temporary public access to the workflow.
|
|
373
|
+
|
|
374
|
+
Permanent public access through :attr:`public` is unaffected.
|
|
375
|
+
|
|
376
|
+
:param in_place: Whether to update the current instance in-place.
|
|
377
|
+
:returns: Workflow with the temporary sharing state returned by the API.
|
|
378
|
+
:raises HTTPError: If the API request fails.
|
|
379
|
+
"""
|
|
380
|
+
with api_client() as client:
|
|
381
|
+
response = client.post(f"/workflow/{self.uuid}/end_temporary_share")
|
|
382
|
+
response.raise_for_status()
|
|
383
|
+
data = response.json()
|
|
384
|
+
|
|
385
|
+
if not in_place:
|
|
386
|
+
return type(self).model_validate(data)
|
|
387
|
+
|
|
388
|
+
updated_workflow = self.model_validate(data)
|
|
389
|
+
for field_name in type(self).model_fields:
|
|
390
|
+
setattr(self, field_name, getattr(updated_workflow, field_name))
|
|
391
|
+
|
|
392
|
+
return self
|
|
393
|
+
|
|
328
394
|
def done(self) -> bool:
|
|
329
395
|
"""
|
|
330
396
|
Check if the workflow has finished (success, failure, or stopped).
|
|
@@ -350,7 +416,8 @@ Workflow: {self.name}
|
|
|
350
416
|
If False, return immediately with whatever data is available.
|
|
351
417
|
:param poll_interval: Seconds between status checks while waiting.
|
|
352
418
|
:returns: WorkflowResult subclass with typed access to results.
|
|
353
|
-
:raises WorkflowError: If the workflow failed or was stopped.
|
|
419
|
+
:raises WorkflowError: If the workflow failed or was stopped. Inspect the exception's
|
|
420
|
+
`logfile` attribute for the backend log.
|
|
354
421
|
"""
|
|
355
422
|
if self.status == stjames.Status.DRAFT:
|
|
356
423
|
raise WorkflowError(
|
|
@@ -365,7 +432,13 @@ Workflow: {self.name}
|
|
|
365
432
|
|
|
366
433
|
if self.status in {stjames.Status.FAILED, stjames.Status.STOPPED}:
|
|
367
434
|
status = self.status.name.lower()
|
|
368
|
-
|
|
435
|
+
message = f"Workflow '{self.name}' {status} (uuid={self.uuid})"
|
|
436
|
+
if self.logfile:
|
|
437
|
+
message += ". See WorkflowError.logfile for diagnostic details."
|
|
438
|
+
raise WorkflowError(
|
|
439
|
+
message,
|
|
440
|
+
logfile=self.logfile,
|
|
441
|
+
)
|
|
369
442
|
|
|
370
443
|
if not self.data:
|
|
371
444
|
status = self.status.name.lower() if self.status else "unknown"
|
|
@@ -7,6 +7,7 @@ from ..protein import Protein
|
|
|
7
7
|
from ..types import ProteinUUID
|
|
8
8
|
from ..utils import api_client
|
|
9
9
|
from .base import Workflow, WorkflowResult, register_result
|
|
10
|
+
from .docking import DockingScore
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
@register_result("batch_docking")
|
|
@@ -33,6 +34,29 @@ class BatchDockingResult(WorkflowResult):
|
|
|
33
34
|
padded = list(scores) + [None] * (len(smiles_list) - len(scores))
|
|
34
35
|
return dict(zip(smiles_list, padded, strict=True))
|
|
35
36
|
|
|
37
|
+
@property
|
|
38
|
+
def refined_scores(self) -> dict[str, DockingScore | None]:
|
|
39
|
+
"""Saved docking results indexed by input SMILES."""
|
|
40
|
+
smiles_list = self._workflow.initial_smiles_list
|
|
41
|
+
scores = self._workflow.refined_scores or []
|
|
42
|
+
padded = list(scores) + [None] * (len(smiles_list) - len(scores))
|
|
43
|
+
return {
|
|
44
|
+
smiles: (
|
|
45
|
+
DockingScore(
|
|
46
|
+
score=score.score,
|
|
47
|
+
pose=score.pose,
|
|
48
|
+
complex_pdb=score.complex_pdb,
|
|
49
|
+
posebusters_valid=score.posebusters_valid,
|
|
50
|
+
strain=score.strain,
|
|
51
|
+
rmsd=score.rmsd,
|
|
52
|
+
mmgbsa_score=score.mmgbsa_score,
|
|
53
|
+
)
|
|
54
|
+
if score is not None
|
|
55
|
+
else None
|
|
56
|
+
)
|
|
57
|
+
for smiles, score in zip(smiles_list, padded, strict=True)
|
|
58
|
+
}
|
|
59
|
+
|
|
36
60
|
|
|
37
61
|
def submit_batch_docking_workflow(
|
|
38
62
|
smiles_list: list[str],
|
|
@@ -41,6 +65,8 @@ def submit_batch_docking_workflow(
|
|
|
41
65
|
executable: str = "vina",
|
|
42
66
|
scoring_function: str = "vinardo",
|
|
43
67
|
exhaustiveness: float = 8,
|
|
68
|
+
num_poses_to_save: int = 0,
|
|
69
|
+
run_mmgbsa: bool = False,
|
|
44
70
|
name: str = "Batch Docking Workflow",
|
|
45
71
|
folder_uuid: str | None = None,
|
|
46
72
|
folder: Folder | None = None,
|
|
@@ -57,6 +83,9 @@ def submit_batch_docking_workflow(
|
|
|
57
83
|
:param executable: Which docking implementation to use.
|
|
58
84
|
:param scoring_function: Which docking scoring function to use.
|
|
59
85
|
:param exhaustiveness: Docking exhaustiveness parameter.
|
|
86
|
+
:param num_poses_to_save: Number of top-scoring compounds whose best pose to save.
|
|
87
|
+
:param run_mmgbsa: Whether to refine the saved poses with MM/GBSA. Ignored when
|
|
88
|
+
`num_poses_to_save` is zero.
|
|
60
89
|
:param name: Name of the workflow.
|
|
61
90
|
:param folder_uuid: UUID of the folder to place the workflow in.
|
|
62
91
|
:param folder: Folder object to store the workflow in.
|
|
@@ -84,6 +113,8 @@ def submit_batch_docking_workflow(
|
|
|
84
113
|
protein=protein,
|
|
85
114
|
pocket=pocket,
|
|
86
115
|
docking_settings=docking_settings,
|
|
116
|
+
num_poses_to_save=num_poses_to_save,
|
|
117
|
+
run_mmgbsa=run_mmgbsa,
|
|
87
118
|
)
|
|
88
119
|
|
|
89
120
|
data = {
|
|
@@ -28,11 +28,9 @@ class BindingAffinityScore:
|
|
|
28
28
|
|
|
29
29
|
:param binding_affinity: binding affinity in kcal/mol for SQM settings, or log10(M)
|
|
30
30
|
for GNINA, AEV-PLIG, and NESSO settings.
|
|
31
|
-
:param strain: strain energy in kcal/mol, or None if not computed
|
|
32
31
|
"""
|
|
33
32
|
|
|
34
33
|
binding_affinity: float
|
|
35
|
-
strain: float | None
|
|
36
34
|
|
|
37
35
|
|
|
38
36
|
@register_result("binding_affinity")
|
|
@@ -50,10 +48,7 @@ class BindingAffinityResult(WorkflowResult):
|
|
|
50
48
|
"""Binding affinity scores in input order, with `None` for failed inputs."""
|
|
51
49
|
return [
|
|
52
50
|
(
|
|
53
|
-
BindingAffinityScore(
|
|
54
|
-
binding_affinity=result.binding_affinity,
|
|
55
|
-
strain=result.strain,
|
|
56
|
-
)
|
|
51
|
+
BindingAffinityScore(binding_affinity=result.binding_affinity)
|
|
57
52
|
if result is not None
|
|
58
53
|
else None
|
|
59
54
|
)
|