rowan-python 3.1.8__tar.gz → 3.1.10__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.8 → rowan_python-3.1.10}/PKG-INFO +2 -2
- {rowan_python-3.1.8 → rowan_python-3.1.10}/docs/index.md +11 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/covalent_inhibitor_scan.py +3 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/docking.py +1 -1
- rowan_python-3.1.10/examples/logp.py +19 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/protein_md.py +1 -1
- {rowan_python-3.1.8 → rowan_python-3.1.10}/pixi.lock +46 -46
- {rowan_python-3.1.8 → rowan_python-3.1.10}/pyproject.toml +3 -2
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/__init__.py +2 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/protein.py +62 -20
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/__init__.py +1 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/analogue_docking.py +1 -1
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/base.py +2 -2
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/docking.py +1 -1
- rowan_python-3.1.10/rowan/workflows/logp.py +80 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/nmr.py +40 -2
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/pose_analysis_md.py +4 -2
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/protein_cofolding.py +6 -2
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/protein_md.py +30 -4
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/relative_binding_free_energy_perturbation.py +3 -1
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/SKILL.md +2 -1
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/admet.md +1 -1
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/analogue_docking.md +2 -2
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/basic_calculation.md +2 -2
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/batch_docking.md +3 -3
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/bde.md +3 -3
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/conformer_search.md +3 -3
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/covalent_inhibitor_scan.md +2 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/descriptors.md +3 -3
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/docking.md +2 -2
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/double_ended_ts_search.md +5 -3
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/electronic_properties.md +1 -1
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/folders_and_projects.md +15 -15
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/fukui.md +1 -1
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/hydrogen_bond_donor_acceptor_strength.md +1 -1
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/interaction_energy_decomposition.md +3 -1
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/ion_mobility.md +2 -2
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/irc.md +2 -2
- rowan_python-3.1.10/skills/computational-chemistry-and-biology/reference/logp.md +37 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/macropka.md +1 -1
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/mcp_execution.md +3 -3
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/membrane_permeability.md +2 -2
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/msa.md +2 -2
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/multistage_optimization.md +1 -1
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/nmr.md +3 -5
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/pka.md +2 -2
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/pocket_detection.md +3 -3
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/pose_analysis_md.md +3 -3
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/protein_binder_design.md +6 -3
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/protein_cofolding.md +9 -7
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/protein_md.md +12 -8
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/protein_prep.md +16 -12
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/python_sdk.md +4 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/rbfe_graph.md +2 -2
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/redox_potential.md +1 -1
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/relative_binding_free_energy_perturbation.md +2 -2
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/scan.md +6 -4
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/solubility.md +4 -2
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/solvent_dependent_conformers.md +1 -1
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/spin_states.md +2 -2
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/strain.md +4 -2
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/tautomer_search.md +1 -1
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/webhooks.md +7 -7
- {rowan_python-3.1.8 → rowan_python-3.1.10}/.agents/plugins/marketplace.json +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/.claude-plugin/marketplace.json +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/.codex-plugin/plugin.json +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/.envrc +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/.github/workflows/build-and-deploy-docs.yml +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/.github/workflows/publish-skill.yml +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/.github/workflows/python-publish.yml +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/.github/workflows/test.yml +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/.gitignore +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/.pre-commit-config.yaml +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/AGENTS.md +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/CLAUDE.md +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/GEMINI.md +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/LICENSE +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/README.md +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/docs/images/deciduous-tree-favicon.png +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/docs/stylesheets/colors.css +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/PROTAC_solubility.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/admet.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/analogue_docking.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/aqueous_solubility.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/basic_calculation.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/basic_calculation_from_json.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/basic_calculation_with_constraint.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/basic_calculation_with_solvent.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/batch_docking.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/bde.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/binding_affinity.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/boltz_paired_msa.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/boltz_single_msa.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/chai_paired_msa.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/chai_single_msa.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/cofolding_screen.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/colabfold_paired_msa.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/colabfold_single_msa.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/conformer_dependent_redox.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/conformers.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/conformers_screen.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/covalent_docking.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/data/1iep_receptorH.pdb +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/data/Al_FCC.xyz +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/data/citalopram_1iep.xyz +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/data/ibuprofen_conformers.sdf +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/data/tyk2_ligands.sdf +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/data/tyk2_structure.pdb +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/data/workflow_example.json +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/dcd_download.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/descriptors.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/docking_screen.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/double_ended_ts_search.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/electronic_properties.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/estimate_workflow.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/fukui_index.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/hydrogen_bond_basicity.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/interaction_energy_decomposition.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/ion_mobility.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/irc.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/macropka.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/membrane_permeability.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/multistage_optimization.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/nmr.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/optimization.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/pdb_download.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/periodic_dft.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/phenol_pka.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/pka.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/pocket_detection.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/pose_analysis_md.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/project_scoped_api_key.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/protein_binder_design.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/protein_cofolding.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/protein_cofolding_with_constraints.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/protein_cofolding_with_templates.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/rbfe_graph.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/rbfe_resubmit.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/redox_potential.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/relative_binding_free_energy_perturbation.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/resubmit_with_perturbations.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/retrieve_workflow.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/scan.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/solvent_dependent_conformers.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/spin_states.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/strain.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/tautomer.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/template.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/examples/webhook.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/mkdocs.yml +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/api_keys.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/calculation.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/config.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/constants.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/folder.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/molecule.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/project.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/py.typed +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/test_utils.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/types.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/user.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/utils.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/admet.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/basic_calculation.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/batch_docking.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/bde.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/binding_affinity.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/conformer_search.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/constants.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/covalent_inhibitor_scan.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/descriptors.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/double_ended_ts_search.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/electronic_properties.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/fukui.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/hydrogen_bond_donor_acceptor_strength.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/interaction_energy_decomposition.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/ion_mobility.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/irc.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/macropka.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/membrane_permeability.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/msa.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/multistage_optimization.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/pka.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/pocket_detection.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/protein_binder_design.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/rbfe_graph.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/redox_potential.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/scan.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/solubility.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/solvent_dependent_conformers.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/spin_states.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/strain.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/rowan/workflows/tautomer_search.py +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/reference/binding_affinity.md +0 -0
- {rowan_python-3.1.8 → rowan_python-3.1.10}/skills/computational-chemistry-and-biology/scripts/check_env.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rowan-python
|
|
3
|
-
Version: 3.1.
|
|
3
|
+
Version: 3.1.10
|
|
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
|
|
14
|
+
Requires-Dist: stjames<0.0.238,>=0.0.237
|
|
15
15
|
Description-Content-Type: text/markdown
|
|
16
16
|
|
|
17
17
|
# Rowan Python Library
|
|
@@ -209,6 +209,17 @@
|
|
|
209
209
|
group_by_category: true
|
|
210
210
|
filters: ["!^__"]
|
|
211
211
|
|
|
212
|
+
## LogP
|
|
213
|
+
::: rowan.workflows.logp
|
|
214
|
+
handler: python
|
|
215
|
+
options:
|
|
216
|
+
show_source: false
|
|
217
|
+
show_root_heading: false
|
|
218
|
+
show_root_toc_entry: false
|
|
219
|
+
members_order: source
|
|
220
|
+
group_by_category: true
|
|
221
|
+
filters: ["!^__"]
|
|
222
|
+
|
|
212
223
|
## MacropKa
|
|
213
224
|
::: rowan.workflows.macropka
|
|
214
225
|
handler: python
|
|
@@ -15,10 +15,13 @@ protein.prepare(remove_heterogens=False)
|
|
|
15
15
|
protein_reactive_atom_index = 1571
|
|
16
16
|
ligand_reactive_atom_index = 4492
|
|
17
17
|
|
|
18
|
+
ligand_smiles = "CC(C)(C)C[C@@H](C#N)C(=O)N1CCC[C@H](C1)n2nc(c3ccc(Oc4ccccc4)cc3)c5c(N)ncnc25"
|
|
19
|
+
|
|
18
20
|
workflow = rowan.submit_covalent_inhibitor_scan_workflow(
|
|
19
21
|
protein=protein,
|
|
20
22
|
protein_reactive_atom_index=protein_reactive_atom_index,
|
|
21
23
|
ligand_reactive_atom_index=ligand_reactive_atom_index,
|
|
24
|
+
ligand_smiles=ligand_smiles,
|
|
22
25
|
settings=rowan.CovalentInhibitorScanSettings(scan_num=4),
|
|
23
26
|
name="BTK covalent inhibitor scan (Cys481, 4YHF)",
|
|
24
27
|
folder=folder,
|
|
@@ -35,5 +35,5 @@ for i, score in enumerate(result.scores):
|
|
|
35
35
|
|
|
36
36
|
# Download the top-scoring protein–ligand complex as a PDB
|
|
37
37
|
complex_protein = result.get_complex(0)
|
|
38
|
-
complex_protein.download_pdb_file("dasatinib_2GQG_complex
|
|
38
|
+
complex_protein.download_pdb_file(name="dasatinib_2GQG_complex")
|
|
39
39
|
print("Saved dasatinib_2GQG_complex.pdb")
|
|
@@ -0,0 +1,19 @@
|
|
|
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
|
+
oseltamivir_SMILES = "C1CCOC(=O)C1=C[C@@H](OC(CC)CC)[C@H](NC(C)=O)[C@@H]([NH3+])C1CCC1"
|
|
8
|
+
|
|
9
|
+
workflow = rowan.submit_logp_workflow(
|
|
10
|
+
initial_smiles=oseltamivir_SMILES,
|
|
11
|
+
method="chemprop_sangster2026",
|
|
12
|
+
name="Oseltamivir logP",
|
|
13
|
+
folder=folder,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
print(f"View workflow privately at: https://labs.rowansci.com/logp/{workflow.uuid}")
|
|
17
|
+
result = workflow.result()
|
|
18
|
+
print(result)
|
|
19
|
+
# e.g. <LogPResult logp=2.541>
|
|
@@ -37,11 +37,12 @@ environments:
|
|
|
37
37
|
- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda
|
|
38
38
|
- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd70dff1_3.conda
|
|
39
39
|
- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda
|
|
40
|
-
- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.
|
|
40
|
+
- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda
|
|
41
41
|
- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda
|
|
42
42
|
- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda
|
|
43
43
|
- pypi: ./
|
|
44
44
|
- pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl
|
|
45
|
+
- pypi: https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl
|
|
45
46
|
- pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl
|
|
46
47
|
- pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl
|
|
47
48
|
- pypi: https://files.pythonhosted.org/packages/41/5f/0f992cb24560673496c5d68de61913b57166ce530ffda07c1f280e0cc464/numpy-2.5.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
|
|
@@ -56,14 +57,13 @@ environments:
|
|
|
56
57
|
- pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl
|
|
57
58
|
- pypi: https://files.pythonhosted.org/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl
|
|
58
59
|
- pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl
|
|
60
|
+
- pypi: https://files.pythonhosted.org/packages/df/95/bdd01bbd523a63b113407c34c99af8495daa4651757cc28f3fabc393d131/stjames-0.0.237-py3-none-any.whl
|
|
59
61
|
- pypi: https://files.pythonhosted.org/packages/e1/11/1a9a693e424b2a75755d56ecb67ccc6f77e6e5bb7417dec5e73d9c410314/rdkit-2026.3.4-cp314-cp314-manylinux_2_28_x86_64.whl
|
|
60
62
|
- pypi: https://files.pythonhosted.org/packages/e8/3d/1087453384dbde46a8c7f9356eead2c58be8a7bf156bca40243377c85715/more_itertools-11.1.0-py3-none-any.whl
|
|
61
|
-
- pypi: https://files.pythonhosted.org/packages/ec/4f/60f375c1abfbb364cb56ee70d4cae5c2cc9762d434531c61f066d8610605/stjames-0.0.233-py3-none-any.whl
|
|
62
|
-
- pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl
|
|
63
63
|
- pypi: https://files.pythonhosted.org/packages/f4/c4/b3e049d2aa3766180c78507110543d9d50894cc97f57de543f1be521dcdc/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
|
|
64
64
|
- pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl
|
|
65
65
|
osx-arm64:
|
|
66
|
-
- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.
|
|
66
|
+
- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda
|
|
67
67
|
- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda
|
|
68
68
|
- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda
|
|
69
69
|
- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda
|
|
@@ -81,6 +81,7 @@ environments:
|
|
|
81
81
|
- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda
|
|
82
82
|
- pypi: ./
|
|
83
83
|
- pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl
|
|
84
|
+
- pypi: https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl
|
|
84
85
|
- pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl
|
|
85
86
|
- pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl
|
|
86
87
|
- pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl
|
|
@@ -97,9 +98,8 @@ environments:
|
|
|
97
98
|
- pypi: https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl
|
|
98
99
|
- pypi: https://files.pythonhosted.org/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl
|
|
99
100
|
- pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl
|
|
101
|
+
- pypi: https://files.pythonhosted.org/packages/df/95/bdd01bbd523a63b113407c34c99af8495daa4651757cc28f3fabc393d131/stjames-0.0.237-py3-none-any.whl
|
|
100
102
|
- pypi: https://files.pythonhosted.org/packages/e8/3d/1087453384dbde46a8c7f9356eead2c58be8a7bf156bca40243377c85715/more_itertools-11.1.0-py3-none-any.whl
|
|
101
|
-
- pypi: https://files.pythonhosted.org/packages/ec/4f/60f375c1abfbb364cb56ee70d4cae5c2cc9762d434531c61f066d8610605/stjames-0.0.233-py3-none-any.whl
|
|
102
|
-
- pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl
|
|
103
103
|
- pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl
|
|
104
104
|
dev:
|
|
105
105
|
channels:
|
|
@@ -126,7 +126,7 @@ environments:
|
|
|
126
126
|
- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda
|
|
127
127
|
- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd70dff1_3.conda
|
|
128
128
|
- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda
|
|
129
|
-
- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.
|
|
129
|
+
- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda
|
|
130
130
|
- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda
|
|
131
131
|
- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda
|
|
132
132
|
- pypi: ./
|
|
@@ -135,6 +135,7 @@ environments:
|
|
|
135
135
|
- pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl
|
|
136
136
|
- pypi: https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl
|
|
137
137
|
- pypi: https://files.pythonhosted.org/packages/06/79/b4c714bef36bc4ec2beeae1e0c124f0223888cd8c6feb1cdc56038116920/filelock-3.32.0-py3-none-any.whl
|
|
138
|
+
- pypi: https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl
|
|
138
139
|
- pypi: https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl
|
|
139
140
|
- pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl
|
|
140
141
|
- pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl
|
|
@@ -171,6 +172,7 @@ environments:
|
|
|
171
172
|
- pypi: https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
|
|
172
173
|
- pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl
|
|
173
174
|
- pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl
|
|
175
|
+
- pypi: https://files.pythonhosted.org/packages/91/66/6bd3cf90500653d55dc0ffc8507aa8300bd49d0214b2e8cb4d3fef2943ba/ruff-0.16.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
|
|
174
176
|
- pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl
|
|
175
177
|
- pypi: https://files.pythonhosted.org/packages/96/42/3e5985a0a7e57de470b320c6d6a1a67c844f6737a587f3d44dd13d1819e7/wcwidth-0.8.2-py3-none-any.whl
|
|
176
178
|
- pypi: https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl
|
|
@@ -199,24 +201,22 @@ environments:
|
|
|
199
201
|
- pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl
|
|
200
202
|
- pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl
|
|
201
203
|
- pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl
|
|
204
|
+
- pypi: https://files.pythonhosted.org/packages/df/95/bdd01bbd523a63b113407c34c99af8495daa4651757cc28f3fabc393d131/stjames-0.0.237-py3-none-any.whl
|
|
202
205
|
- pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl
|
|
203
206
|
- pypi: https://files.pythonhosted.org/packages/e1/11/1a9a693e424b2a75755d56ecb67ccc6f77e6e5bb7417dec5e73d9c410314/rdkit-2026.3.4-cp314-cp314-manylinux_2_28_x86_64.whl
|
|
204
207
|
- pypi: https://files.pythonhosted.org/packages/e4/d3/5268aeabf2ad82658c4e2ff3a060648d0f02f3926cb53247c0e4d0dab49e/griffelib-2.1.0-py3-none-any.whl
|
|
205
208
|
- pypi: https://files.pythonhosted.org/packages/e8/3d/1087453384dbde46a8c7f9356eead2c58be8a7bf156bca40243377c85715/more_itertools-11.1.0-py3-none-any.whl
|
|
206
|
-
- pypi: https://files.pythonhosted.org/packages/ec/4f/60f375c1abfbb364cb56ee70d4cae5c2cc9762d434531c61f066d8610605/stjames-0.0.233-py3-none-any.whl
|
|
207
209
|
- pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl
|
|
208
|
-
- pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl
|
|
209
210
|
- pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl
|
|
210
211
|
- pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl
|
|
211
212
|
- pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl
|
|
212
213
|
- pypi: https://files.pythonhosted.org/packages/f4/c4/b3e049d2aa3766180c78507110543d9d50894cc97f57de543f1be521dcdc/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
|
|
213
|
-
- pypi: https://files.pythonhosted.org/packages/f6/f9/a0d4871d12fae702eb1f41b686caf05f1f8b124dc6db6f784f53d74918fa/ruff-0.15.22-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
|
|
214
214
|
- pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl
|
|
215
215
|
- pypi: https://files.pythonhosted.org/packages/fb/49/bc925106abcdac498074f2cbe6137e94e09f418dd2b7775df5b577dc0313/pre_commit-4.6.1-py2.py3-none-any.whl
|
|
216
216
|
- pypi: https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl
|
|
217
217
|
- pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl
|
|
218
218
|
osx-arm64:
|
|
219
|
-
- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.
|
|
219
|
+
- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda
|
|
220
220
|
- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda
|
|
221
221
|
- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda
|
|
222
222
|
- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda
|
|
@@ -238,6 +238,7 @@ environments:
|
|
|
238
238
|
- pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl
|
|
239
239
|
- pypi: https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl
|
|
240
240
|
- pypi: https://files.pythonhosted.org/packages/06/79/b4c714bef36bc4ec2beeae1e0c124f0223888cd8c6feb1cdc56038116920/filelock-3.32.0-py3-none-any.whl
|
|
241
|
+
- pypi: https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl
|
|
241
242
|
- pypi: https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl
|
|
242
243
|
- pypi: https://files.pythonhosted.org/packages/15/14/2ba1d61452d7c2a7fe12741e8d374e52b183476b07aa7f9e2a0d02b0720a/mypy-2.3.0-cp314-cp314-macosx_11_0_arm64.whl
|
|
243
244
|
- pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl
|
|
@@ -252,6 +253,7 @@ environments:
|
|
|
252
253
|
- pypi: https://files.pythonhosted.org/packages/3e/5c/fb93d3092640a24dfb7bd7727a24016d7c01774ca013e60efd3f683c8002/backrefs-7.0-py314-none-any.whl
|
|
253
254
|
- pypi: https://files.pythonhosted.org/packages/40/3a/948263ca3b9d65bb2b1b0c521b3a49fad5d59ada58724bd87d2bd5ff3f36/ipython-9.15.0-py3-none-any.whl
|
|
254
255
|
- pypi: https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl
|
|
256
|
+
- pypi: https://files.pythonhosted.org/packages/42/ce/741cd197496a1abbf51352710fd15ed995d2a2be87189c1da26a450d6e83/ruff-0.16.0-py3-none-macosx_11_0_arm64.whl
|
|
255
257
|
- pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl
|
|
256
258
|
- pypi: https://files.pythonhosted.org/packages/52/22/0ba7be75e0d99335008532312abc0a1ce50f8895739941bca887cf75d157/rdkit-2026.3.4-cp314-cp314-macosx_11_0_arm64.whl
|
|
257
259
|
- pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl
|
|
@@ -293,7 +295,6 @@ environments:
|
|
|
293
295
|
- pypi: https://files.pythonhosted.org/packages/c1/f6/ec7ec652c51db77c2f61d8573338e13e4704303265ccc658cb4031d9f354/ast_serialize-0.6.0-cp39-abi3-macosx_11_0_arm64.whl
|
|
294
296
|
- pypi: https://files.pythonhosted.org/packages/c7/7b/14882602ddee241d7984a742fcb423cb4a30fb0d6efc546ac3129fba475a/python_discovery-1.5.0-py3-none-any.whl
|
|
295
297
|
- pypi: https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl
|
|
296
|
-
- pypi: https://files.pythonhosted.org/packages/c9/10/74e53572aa758dfaa678c2a2646b5c5515d884b7ca56be4d2ce03ca4b560/ruff-0.15.22-py3-none-macosx_11_0_arm64.whl
|
|
297
298
|
- pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl
|
|
298
299
|
- pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl
|
|
299
300
|
- pypi: https://files.pythonhosted.org/packages/d1/fc/10ab7e80650a9c9e8f4f1105f8c8e73567f88ed0c06ada589ab81d38687c/mkdocstrings_python-2.0.5-py3-none-any.whl
|
|
@@ -305,12 +306,11 @@ environments:
|
|
|
305
306
|
- pypi: https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz
|
|
306
307
|
- pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl
|
|
307
308
|
- pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl
|
|
309
|
+
- pypi: https://files.pythonhosted.org/packages/df/95/bdd01bbd523a63b113407c34c99af8495daa4651757cc28f3fabc393d131/stjames-0.0.237-py3-none-any.whl
|
|
308
310
|
- pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl
|
|
309
311
|
- pypi: https://files.pythonhosted.org/packages/e4/d3/5268aeabf2ad82658c4e2ff3a060648d0f02f3926cb53247c0e4d0dab49e/griffelib-2.1.0-py3-none-any.whl
|
|
310
312
|
- pypi: https://files.pythonhosted.org/packages/e8/3d/1087453384dbde46a8c7f9356eead2c58be8a7bf156bca40243377c85715/more_itertools-11.1.0-py3-none-any.whl
|
|
311
|
-
- pypi: https://files.pythonhosted.org/packages/ec/4f/60f375c1abfbb364cb56ee70d4cae5c2cc9762d434531c61f066d8610605/stjames-0.0.233-py3-none-any.whl
|
|
312
313
|
- pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl
|
|
313
|
-
- pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl
|
|
314
314
|
- pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl
|
|
315
315
|
- pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl
|
|
316
316
|
- pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl
|
|
@@ -597,16 +597,16 @@ packages:
|
|
|
597
597
|
- zstd >=1.5.7,<1.6.0a0
|
|
598
598
|
size: 601375
|
|
599
599
|
timestamp: 1764777111296
|
|
600
|
-
- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.
|
|
601
|
-
sha256:
|
|
602
|
-
md5:
|
|
600
|
+
- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda
|
|
601
|
+
sha256: 0a0544cf95f64394fe4959286f5c71f5444ad58feb0602e53becb27448d24da6
|
|
602
|
+
md5: 0f51e2391ade309db462a55611263e9c
|
|
603
603
|
depends:
|
|
604
604
|
- __unix
|
|
605
605
|
license: ISC
|
|
606
606
|
purls: []
|
|
607
607
|
run_exports: {}
|
|
608
|
-
size:
|
|
609
|
-
timestamp:
|
|
608
|
+
size: 131780
|
|
609
|
+
timestamp: 1784754889428
|
|
610
610
|
- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda
|
|
611
611
|
build_number: 8
|
|
612
612
|
sha256: ad6d2e9ac39751cc0529dd1566a26751a0bf2542adb0c232533d32e176e21db5
|
|
@@ -820,7 +820,7 @@ packages:
|
|
|
820
820
|
name: rowan-python
|
|
821
821
|
requires_dist:
|
|
822
822
|
- httpx
|
|
823
|
-
- stjames>=0.0.
|
|
823
|
+
- stjames>=0.0.237,<0.0.238
|
|
824
824
|
- setuptools
|
|
825
825
|
- rdkit
|
|
826
826
|
- nest-asyncio
|
|
@@ -851,6 +851,11 @@ packages:
|
|
|
851
851
|
version: 3.32.0
|
|
852
852
|
sha256: d396bea984af47333ef05e50eae7eff88c84256de6112aea0ec48a233c064fe3
|
|
853
853
|
requires_python: '>=3.10'
|
|
854
|
+
- pypi: https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl
|
|
855
|
+
name: certifi
|
|
856
|
+
version: 2026.7.22
|
|
857
|
+
sha256: 62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775
|
|
858
|
+
requires_python: '>=3.7'
|
|
854
859
|
- pypi: https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl
|
|
855
860
|
name: python-dotenv
|
|
856
861
|
version: 1.2.2
|
|
@@ -1072,6 +1077,11 @@ packages:
|
|
|
1072
1077
|
version: 2.5.1
|
|
1073
1078
|
sha256: 54ad769f17bc2d833b620851989f62054fb9ab93c969d9e1dc3c8e3d56beea21
|
|
1074
1079
|
requires_python: '>=3.12'
|
|
1080
|
+
- pypi: https://files.pythonhosted.org/packages/42/ce/741cd197496a1abbf51352710fd15ed995d2a2be87189c1da26a450d6e83/ruff-0.16.0-py3-none-macosx_11_0_arm64.whl
|
|
1081
|
+
name: ruff
|
|
1082
|
+
version: 0.16.0
|
|
1083
|
+
sha256: e01c21d10eb1b29f47b7454e1f4056db9a3f0260c646aa88457c610291db9f81
|
|
1084
|
+
requires_python: '>=3.7'
|
|
1075
1085
|
- pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl
|
|
1076
1086
|
name: typing-extensions
|
|
1077
1087
|
version: 4.16.0
|
|
@@ -1376,6 +1386,11 @@ packages:
|
|
|
1376
1386
|
- pytest ; extra == 'dev'
|
|
1377
1387
|
- tox ; extra == 'dev'
|
|
1378
1388
|
- black ; extra == 'lint'
|
|
1389
|
+
- pypi: https://files.pythonhosted.org/packages/91/66/6bd3cf90500653d55dc0ffc8507aa8300bd49d0214b2e8cb4d3fef2943ba/ruff-0.16.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
|
|
1390
|
+
name: ruff
|
|
1391
|
+
version: 0.16.0
|
|
1392
|
+
sha256: 4f11a8d11010301d0a398a2fdef67691feca7294da6aef55e2150e8fa2cd520b
|
|
1393
|
+
requires_python: '>=3.7'
|
|
1379
1394
|
- pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl
|
|
1380
1395
|
name: identify
|
|
1381
1396
|
version: 2.6.19
|
|
@@ -1681,11 +1696,6 @@ packages:
|
|
|
1681
1696
|
- trove-classifiers>=2024.10.12 ; extra == 'tests'
|
|
1682
1697
|
- defusedxml ; extra == 'xmp'
|
|
1683
1698
|
requires_python: '>=3.10'
|
|
1684
|
-
- pypi: https://files.pythonhosted.org/packages/c9/10/74e53572aa758dfaa678c2a2646b5c5515d884b7ca56be4d2ce03ca4b560/ruff-0.15.22-py3-none-macosx_11_0_arm64.whl
|
|
1685
|
-
name: ruff
|
|
1686
|
-
version: 0.15.22
|
|
1687
|
-
sha256: 11c1c715af53a09f714e011106bffc419751ec8232fcb5da42173284ea3fec6f
|
|
1688
|
-
requires_python: '>=3.7'
|
|
1689
1699
|
- pypi: https://files.pythonhosted.org/packages/ca/87/b4d6c38e0ccd5e85dc54cecdf933a152c60b28fe5d993a6d8a72fa6d5896/ast_serialize-0.6.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
|
|
1690
1700
|
name: ast-serialize
|
|
1691
1701
|
version: 0.6.0
|
|
@@ -1782,6 +1792,17 @@ packages:
|
|
|
1782
1792
|
- mkdocs-section-index ; extra == 'docs'
|
|
1783
1793
|
- mkdocs-literate-nav ; extra == 'docs'
|
|
1784
1794
|
requires_python: '>=3.10'
|
|
1795
|
+
- pypi: https://files.pythonhosted.org/packages/df/95/bdd01bbd523a63b113407c34c99af8495daa4651757cc28f3fabc393d131/stjames-0.0.237-py3-none-any.whl
|
|
1796
|
+
name: stjames
|
|
1797
|
+
version: 0.0.237
|
|
1798
|
+
sha256: 790c32bdc829efe52b7ccc442083d0d95fc01587d4063a08ea73cd9f686f6d21
|
|
1799
|
+
requires_dist:
|
|
1800
|
+
- pydantic>=2.4
|
|
1801
|
+
- numpy
|
|
1802
|
+
- requests
|
|
1803
|
+
- more-itertools
|
|
1804
|
+
- rdkit ; extra == 'rdkit'
|
|
1805
|
+
requires_python: '>=3.11'
|
|
1785
1806
|
- pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl
|
|
1786
1807
|
name: packaging
|
|
1787
1808
|
version: '26.2'
|
|
@@ -1808,17 +1829,6 @@ packages:
|
|
|
1808
1829
|
version: 11.1.0
|
|
1809
1830
|
sha256: 4b65538ae22f6fed0ce4874efd317463a7489796a0939fa66824dd542125a192
|
|
1810
1831
|
requires_python: '>=3.10'
|
|
1811
|
-
- pypi: https://files.pythonhosted.org/packages/ec/4f/60f375c1abfbb364cb56ee70d4cae5c2cc9762d434531c61f066d8610605/stjames-0.0.233-py3-none-any.whl
|
|
1812
|
-
name: stjames
|
|
1813
|
-
version: 0.0.233
|
|
1814
|
-
sha256: bd3bdf9c701b7649187c25c6d73e7bee46b5ac32cddad43c47979243a28d1023
|
|
1815
|
-
requires_dist:
|
|
1816
|
-
- pydantic>=2.4
|
|
1817
|
-
- numpy
|
|
1818
|
-
- requests
|
|
1819
|
-
- more-itertools
|
|
1820
|
-
- rdkit ; extra == 'rdkit'
|
|
1821
|
-
requires_python: '>=3.11'
|
|
1822
1832
|
- pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl
|
|
1823
1833
|
name: python-dateutil
|
|
1824
1834
|
version: 2.9.0.post0
|
|
@@ -1826,11 +1836,6 @@ packages:
|
|
|
1826
1836
|
requires_dist:
|
|
1827
1837
|
- six>=1.5
|
|
1828
1838
|
requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*'
|
|
1829
|
-
- pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl
|
|
1830
|
-
name: certifi
|
|
1831
|
-
version: 2026.6.17
|
|
1832
|
-
sha256: 2227dcbaafe0d2f59279d1762ddddc37783ed4354594f194ffc31d20f41fc3db
|
|
1833
|
-
requires_python: '>=3.7'
|
|
1834
1839
|
- pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl
|
|
1835
1840
|
name: stack-data
|
|
1836
1841
|
version: 0.6.3
|
|
@@ -1865,11 +1870,6 @@ packages:
|
|
|
1865
1870
|
version: 3.4.9
|
|
1866
1871
|
sha256: c25fe15c70c59eb7c5ce8c06a1f3fa1da0ecc5ea1e7a5922c40fd2fa9b0d5046
|
|
1867
1872
|
requires_python: '>=3.7'
|
|
1868
|
-
- pypi: https://files.pythonhosted.org/packages/f6/f9/a0d4871d12fae702eb1f41b686caf05f1f8b124dc6db6f784f53d74918fa/ruff-0.15.22-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
|
|
1869
|
-
name: ruff
|
|
1870
|
-
version: 0.15.22
|
|
1871
|
-
sha256: 365523eb91d9224e1bcb03b022fbf0facb8f9e23792a2c53d9d4b3924bdbdebb
|
|
1872
|
-
requires_python: '>=3.7'
|
|
1873
1873
|
- pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl
|
|
1874
1874
|
name: ghp-import
|
|
1875
1875
|
version: 2.1.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "rowan-python"
|
|
3
|
-
version = "3.1.
|
|
3
|
+
version = "3.1.10"
|
|
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.237,<0.0.238",
|
|
13
13
|
"setuptools",
|
|
14
14
|
"rdkit",
|
|
15
15
|
"nest-asyncio",
|
|
@@ -83,6 +83,7 @@ ignore = [
|
|
|
83
83
|
"PLR0911", # Too many returns
|
|
84
84
|
"PLR0912", # Too many branches
|
|
85
85
|
"PLR0913", # Too many arguments to function call
|
|
86
|
+
"PLR0917", # Too many positional arguments
|
|
86
87
|
"PLR0914", # Too many locals
|
|
87
88
|
"PLR0915", # Too many statements
|
|
88
89
|
"PLR1702", # Too many nested-blocks
|
|
@@ -3,6 +3,7 @@ from . import constants
|
|
|
3
3
|
from stjames import (
|
|
4
4
|
Atom,
|
|
5
5
|
BandStructure,
|
|
6
|
+
Binder,
|
|
6
7
|
BindingPoseContact,
|
|
7
8
|
HydrationBridgeResidue,
|
|
8
9
|
HydrationSite,
|
|
@@ -24,6 +25,7 @@ from stjames import (
|
|
|
24
25
|
Mode,
|
|
25
26
|
MSAFormat,
|
|
26
27
|
MultiStageOptSettings,
|
|
28
|
+
NMR_SUPPORTED_SOLVENTS,
|
|
27
29
|
OpenConfSettings,
|
|
28
30
|
OptimizationSettings,
|
|
29
31
|
PBCDFTSettings,
|
|
@@ -4,7 +4,8 @@ from datetime import datetime
|
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
from typing import Any, Self
|
|
6
6
|
|
|
7
|
-
from pydantic import BaseModel
|
|
7
|
+
from pydantic import BaseModel, PrivateAttr
|
|
8
|
+
from stjames.pdb import PDB, pdb_object_to_pdb_filestring
|
|
8
9
|
|
|
9
10
|
from .project import Project
|
|
10
11
|
from .utils import api_client
|
|
@@ -37,6 +38,8 @@ class Protein(BaseModel):
|
|
|
37
38
|
public: bool | None = None
|
|
38
39
|
pocket: list[list[float]] | None = None
|
|
39
40
|
|
|
41
|
+
_workflow_uuid: str | None = PrivateAttr(default=None)
|
|
42
|
+
|
|
40
43
|
def __repr__(self) -> str:
|
|
41
44
|
return f"<Protein name='{self.name}' created_at='{self.created_at}' uuid='{self.uuid}'>"
|
|
42
45
|
|
|
@@ -119,18 +122,24 @@ class Protein(BaseModel):
|
|
|
119
122
|
response.raise_for_status()
|
|
120
123
|
return Protein(**response.json())
|
|
121
124
|
|
|
122
|
-
def refresh(self, in_place: bool = True) -> Self:
|
|
125
|
+
def refresh(self, in_place: bool = True, workflow_uuid: str | None = None) -> Self:
|
|
123
126
|
"""
|
|
124
127
|
Loads protein data
|
|
125
128
|
|
|
129
|
+
:param workflow_uuid: UUID of a workflow referencing this protein, for proteins reachable
|
|
130
|
+
only through a workflow you can read. Not needed for proteins from a workflow result.
|
|
126
131
|
:returns: protein with loaded data
|
|
127
132
|
"""
|
|
133
|
+
workflow_uuid = workflow_uuid or self._workflow_uuid
|
|
134
|
+
params = {"workflow_uuid": workflow_uuid} if workflow_uuid else None
|
|
128
135
|
with api_client() as client:
|
|
129
|
-
response = client.get(f"/protein/{self.uuid}")
|
|
136
|
+
response = client.get(f"/protein/{self.uuid}", params=params)
|
|
130
137
|
response.raise_for_status()
|
|
131
138
|
protein_data = response.json()
|
|
132
139
|
if not in_place:
|
|
133
|
-
|
|
140
|
+
refreshed = self.__class__.model_validate(protein_data)
|
|
141
|
+
refreshed._workflow_uuid = workflow_uuid
|
|
142
|
+
return refreshed
|
|
134
143
|
|
|
135
144
|
self.name = protein_data.get("name")
|
|
136
145
|
self.data = protein_data.get("data")
|
|
@@ -138,6 +147,7 @@ class Protein(BaseModel):
|
|
|
138
147
|
self.pocket = protein_data.get("pocket")
|
|
139
148
|
self.sanitized = protein_data.get("sanitized")
|
|
140
149
|
self.used_in_workflow = protein_data.get("used_in_workflow")
|
|
150
|
+
self._workflow_uuid = workflow_uuid
|
|
141
151
|
return self
|
|
142
152
|
|
|
143
153
|
def update(
|
|
@@ -291,7 +301,7 @@ class Protein(BaseModel):
|
|
|
291
301
|
|
|
292
302
|
raise RuntimeError(f"Protein preparation timed out after {timeout:.0f}s for {self.uuid}.")
|
|
293
303
|
|
|
294
|
-
def validate_protein_forcefield(self,
|
|
304
|
+
def validate_protein_forcefield(self, exclude_residues: list[str | int] | None = None) -> None:
|
|
295
305
|
"""
|
|
296
306
|
Validate that this protein can be parameterized with the MD forcefield.
|
|
297
307
|
|
|
@@ -299,16 +309,24 @@ class Protein(BaseModel):
|
|
|
299
309
|
recognized by OpenMM and that there are no clashing atoms. Call this
|
|
300
310
|
before submitting any MD workflow to catch preparation issues early.
|
|
301
311
|
|
|
302
|
-
Ligand residues (
|
|
303
|
-
separately by the MD workflow from the provided SMILES.
|
|
312
|
+
Ligand residues (`LIG`) are always excluded — they are parameterized
|
|
313
|
+
separately by the MD workflow from the provided SMILES. Pass the keys of a
|
|
314
|
+
binder's `small_molecules` to exclude those as well.
|
|
315
|
+
|
|
316
|
+
A name is matched case-insensitively and excludes only the first residue
|
|
317
|
+
with that name, so further copies are still validated. Integer entries are
|
|
318
|
+
0-based indices into the protein's sorted non-polymer records, and reference
|
|
319
|
+
a record without naming it.
|
|
304
320
|
|
|
305
321
|
If validation fails, try re-preparing with ``remove_invalid_hydrogens=True``:
|
|
306
322
|
``protein.prepare(remove_invalid_hydrogens=True)``
|
|
307
323
|
|
|
308
|
-
:param
|
|
324
|
+
:param exclude_residues: additional residue names and/or 0-based non-polymer indices to skip
|
|
309
325
|
:raises requests.HTTPError: if validation fails or the API request fails.
|
|
310
326
|
"""
|
|
311
|
-
|
|
327
|
+
entries: list[str | int] = ["LIG"]
|
|
328
|
+
entries += [r.upper() if isinstance(r, str) else r for r in exclude_residues or []]
|
|
329
|
+
excluded = list(dict.fromkeys(entries))
|
|
312
330
|
with api_client() as client:
|
|
313
331
|
response = client.post(
|
|
314
332
|
f"/protein/{self.uuid}/validate_forcefield",
|
|
@@ -316,42 +334,66 @@ class Protein(BaseModel):
|
|
|
316
334
|
)
|
|
317
335
|
response.raise_for_status()
|
|
318
336
|
|
|
319
|
-
def download_pdb_file(
|
|
337
|
+
def download_pdb_file(
|
|
338
|
+
self,
|
|
339
|
+
path: Path | str | None = None,
|
|
340
|
+
name: str | None = None,
|
|
341
|
+
workflow_uuid: str | None = None,
|
|
342
|
+
) -> None:
|
|
320
343
|
"""
|
|
321
|
-
Downloads the PDB file for a protein
|
|
344
|
+
Downloads the PDB file for a protein.
|
|
345
|
+
|
|
346
|
+
Builds the file locally from this protein's data, calling `refresh()` if needed, so it
|
|
347
|
+
works anywhere `refresh()` does — including proteins reachable only through a workflow.
|
|
322
348
|
|
|
323
349
|
:param path: Directory to save the file to (defaults to current directory)
|
|
324
350
|
:param name: Optional custom name for the file (defaults to protein name)
|
|
351
|
+
:param workflow_uuid: UUID of a workflow referencing this protein, for proteins reachable
|
|
352
|
+
only through a workflow you can read. Not needed for proteins from a workflow result.
|
|
325
353
|
:raises requests.HTTPError: if the request to the API fails
|
|
326
354
|
"""
|
|
327
355
|
path = Path(path) if path is not None else Path.cwd()
|
|
328
356
|
|
|
329
357
|
path.mkdir(parents=True, exist_ok=True)
|
|
330
358
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
359
|
+
if self.data is None:
|
|
360
|
+
self.refresh(workflow_uuid=workflow_uuid)
|
|
361
|
+
|
|
362
|
+
pdb_object = PDB.model_validate(self.data)
|
|
363
|
+
pdb_string = pdb_object_to_pdb_filestring(
|
|
364
|
+
pdb=pdb_object,
|
|
365
|
+
header=True,
|
|
366
|
+
source=True,
|
|
367
|
+
keyword=True,
|
|
368
|
+
crystallography=True,
|
|
369
|
+
remark=False,
|
|
370
|
+
)
|
|
334
371
|
|
|
335
|
-
file_path = path / f"{name or self.name}.pdb"
|
|
336
|
-
with open(file_path, "
|
|
337
|
-
f.write(
|
|
372
|
+
file_path = path / f"{name or self.name or self.uuid}.pdb"
|
|
373
|
+
with open(file_path, "w") as f:
|
|
374
|
+
f.write(pdb_string)
|
|
338
375
|
|
|
339
376
|
|
|
340
|
-
def retrieve_protein(uuid: str) -> Protein:
|
|
377
|
+
def retrieve_protein(uuid: str, workflow_uuid: str | None = None) -> Protein:
|
|
341
378
|
"""
|
|
342
379
|
Retrieves a protein from the API using its UUID.
|
|
343
380
|
|
|
344
381
|
:param uuid: UUID of the protein to retrieve.
|
|
382
|
+
:param workflow_uuid: UUID of a workflow referencing this protein, for proteins reachable
|
|
383
|
+
only through a workflow you can read. Not needed for proteins from a workflow result.
|
|
345
384
|
:returns: Protein object representing the retrieved protein.
|
|
346
385
|
:raises requests.HTTPError: if the request to the API fails.
|
|
347
386
|
"""
|
|
387
|
+
params = {"workflow_uuid": workflow_uuid} if workflow_uuid else None
|
|
348
388
|
|
|
349
389
|
with api_client() as client:
|
|
350
|
-
response = client.get(f"/protein/{uuid}")
|
|
390
|
+
response = client.get(f"/protein/{uuid}", params=params)
|
|
351
391
|
response.raise_for_status()
|
|
352
392
|
protein_data = response.json()
|
|
353
393
|
|
|
354
|
-
|
|
394
|
+
protein = Protein(**protein_data)
|
|
395
|
+
protein._workflow_uuid = workflow_uuid
|
|
396
|
+
return protein
|
|
355
397
|
|
|
356
398
|
|
|
357
399
|
def list_proteins(
|
|
@@ -83,6 +83,7 @@ from .interaction_energy_decomposition import (
|
|
|
83
83
|
)
|
|
84
84
|
from .ion_mobility import IonMobilityResult, submit_ion_mobility_workflow
|
|
85
85
|
from .irc import IRCResult, submit_irc_workflow
|
|
86
|
+
from .logp import LogPResult, submit_logp_workflow
|
|
86
87
|
from .macropka import (
|
|
87
88
|
MacropKaMicrostate,
|
|
88
89
|
MacropKaResult,
|
|
@@ -160,7 +160,7 @@ class AnalogueDockingResult(WorkflowResult):
|
|
|
160
160
|
|
|
161
161
|
cache_key = f"complex_{smiles}_{index}"
|
|
162
162
|
if cache_key not in self._cache:
|
|
163
|
-
self._cache[cache_key] = retrieve_protein(uuid)
|
|
163
|
+
self._cache[cache_key] = retrieve_protein(uuid, workflow_uuid=self.workflow_uuid)
|
|
164
164
|
return self._cache[cache_key]
|
|
165
165
|
|
|
166
166
|
def get_complexes(self, smiles: str) -> list[Protein]:
|
|
@@ -144,10 +144,10 @@ the server (a field is missing, extra, or the wrong type). Underlying validation
|
|
|
144
144
|
RESULT_REGISTRY: dict[str, type[WorkflowResult]] = {}
|
|
145
145
|
|
|
146
146
|
|
|
147
|
-
def register_result(workflow_type: str) -> Callable[[type[
|
|
147
|
+
def register_result[R: WorkflowResult](workflow_type: str) -> Callable[[type[R]], type[R]]:
|
|
148
148
|
"""Decorator to register a result class for a workflow type."""
|
|
149
149
|
|
|
150
|
-
def decorator(cls: type[
|
|
150
|
+
def decorator(cls: type[R]) -> type[R]:
|
|
151
151
|
RESULT_REGISTRY[workflow_type] = cls
|
|
152
152
|
return cls
|
|
153
153
|
|
|
@@ -133,7 +133,7 @@ class DockingResult(WorkflowResult):
|
|
|
133
133
|
|
|
134
134
|
cache_key = f"complex_{index}"
|
|
135
135
|
if cache_key not in self._cache:
|
|
136
|
-
self._cache[cache_key] = retrieve_protein(uuid)
|
|
136
|
+
self._cache[cache_key] = retrieve_protein(uuid, workflow_uuid=self.workflow_uuid)
|
|
137
137
|
return self._cache[cache_key]
|
|
138
138
|
|
|
139
139
|
def get_complexes(self) -> list[Protein]:
|