rowan-python 3.1.15__tar.gz → 3.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rowan_python-3.2.0/.editorconfig +16 -0
- rowan_python-3.2.0/.envrc +6 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/.github/workflows/build-and-deploy-docs.yml +9 -7
- rowan_python-3.2.0/.github/workflows/python-publish.yml +51 -0
- rowan_python-3.2.0/.github/workflows/test.yml +58 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/.gitignore +9 -0
- rowan_python-3.2.0/.python-version +1 -0
- rowan_python-3.2.0/.rumdl.toml +21 -0
- rowan_python-3.2.0/GEMINI.md +3 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/PKG-INFO +37 -10
- rowan_python-3.2.0/README.md +75 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/index.md +11 -11
- rowan_python-3.2.0/docs/workflows/basic-calculation.md +35 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/settings.md +15 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/types.md +45 -9
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/basic_calculation_with_solvent.py +4 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/batch_docking.py +4 -1
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/bde.py +1 -2
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/boltz_paired_msa.py +1 -1
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/boltz_single_msa.py +1 -1
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/chai_paired_msa.py +1 -1
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/chai_single_msa.py +1 -1
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/cofolding_screen.py +2 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/colabfold_paired_msa.py +1 -1
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/colabfold_single_msa.py +1 -1
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/conformer_dependent_redox.py +2 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/conformers.py +1 -2
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/conformers_screen.py +1 -2
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/covalent_docking.py +2 -1
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/covalent_inhibitor_scan.py +2 -1
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/descriptors.py +1 -2
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/docking.py +7 -4
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/docking_screen.py +6 -1
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/double_ended_ts_search.py +1 -2
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/electronic_properties.py +4 -3
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/hydrogen_bond_basicity.py +1 -2
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/induced_fit_docking.py +9 -6
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/multistage_optimization.py +1 -2
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/optimization.py +1 -2
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/periodic_dft.py +6 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/pka.py +1 -2
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/pocket_detection.py +4 -1
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/pose_analysis_md.py +6 -1
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/protein_binder_design.py +1 -2
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/protein_cofolding_with_templates.py +2 -1
- rowan_python-3.1.15/examples/pdb_download.py → rowan_python-3.2.0/examples/protein_file_download.py +5 -1
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/protein_md.py +6 -2
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/rbfe_resubmit.py +5 -1
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/redox_potential.py +2 -3
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/relative_binding_free_energy_perturbation.py +4 -1
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/resubmit_with_perturbations.py +15 -6
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/retrieve_workflow.py +5 -1
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/scan.py +1 -2
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/spin_states.py +1 -2
- {rowan_python-3.1.15 → rowan_python-3.2.0}/mkdocs.yml +1 -1
- rowan_python-3.2.0/prek.toml +65 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/pyproject.toml +58 -54
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/__init__.py +2 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/api_keys.py +70 -58
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/calculation.py +25 -19
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/config.py +85 -64
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/folder.py +161 -113
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/molecule.py +99 -72
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/project.py +71 -50
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/protein.py +237 -127
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/user.py +47 -47
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/utils.py +20 -13
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/_molecular_dynamics.py +86 -53
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/admet.py +21 -19
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/analogue_docking.py +85 -64
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/base.py +316 -226
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/basic_calculation.py +63 -52
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/batch_docking.py +31 -26
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/bde.py +63 -48
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/binding_affinity.py +54 -49
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/conformer_search.py +113 -79
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/constants.py +5 -2
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/covalent_inhibitor_scan.py +52 -47
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/descriptors.py +27 -22
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/docking.py +102 -83
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/double_ended_ts_search.py +42 -37
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/electronic_properties.py +45 -38
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/fukui.py +32 -27
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/hydrogen_bond_donor_acceptor_strength.py +23 -18
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/interaction_energy_decomposition.py +30 -25
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/ion_mobility.py +26 -22
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/irc.py +66 -54
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/logp.py +30 -25
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/macropka.py +32 -27
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/membrane_permeability.py +22 -17
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/msa.py +33 -24
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/multistage_optimization.py +35 -31
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/nmr.py +46 -42
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/pka.py +47 -41
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/pocket_detection.py +34 -29
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/pose_analysis_md.py +76 -72
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/protein_binder_design.py +55 -50
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/protein_cofolding.py +79 -74
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/protein_md.py +80 -75
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/protein_preparation.py +44 -36
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/rbfe_graph.py +40 -34
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/redox_potential.py +25 -20
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/relative_binding_free_energy_perturbation.py +92 -73
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/scan.py +48 -41
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/solubility.py +67 -58
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/solvent_dependent_conformers.py +44 -37
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/spin_states.py +62 -54
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/strain.py +38 -31
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/tautomer_search.py +41 -36
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/basic_calculation.md +1 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/double_ended_ts_search.md +1 -1
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/pose_analysis_md.md +3 -3
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/protein_md.md +3 -3
- {rowan_python-3.1.15 → rowan_python-3.2.0}/tests/test_binding_affinity.py +5 -4
- {rowan_python-3.1.15 → rowan_python-3.2.0}/tests/test_cofolding_workflow_updates.py +4 -5
- rowan_python-3.2.0/tests/test_conformer_search.py +81 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/tests/test_docking_workflow.py +10 -8
- {rowan_python-3.1.15 → rowan_python-3.2.0}/tests/test_docking_workflow_updates.py +3 -4
- {rowan_python-3.1.15 → rowan_python-3.2.0}/tests/test_macropka_nmr.py +3 -3
- {rowan_python-3.1.15 → rowan_python-3.2.0}/tests/test_mango_forcefields.py +7 -5
- {rowan_python-3.1.15 → rowan_python-3.2.0}/tests/test_md_workflow_updates.py +74 -19
- rowan_python-3.2.0/tests/test_protein.py +66 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/tests/test_solvent_dependent_conformers.py +3 -3
- {rowan_python-3.1.15 → rowan_python-3.2.0}/tests/test_tautomer_search.py +3 -3
- {rowan_python-3.1.15 → rowan_python-3.2.0}/tests/test_utils.py +9 -7
- rowan_python-3.2.0/tests/test_workflow_results.py +66 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/tests/test_workflow_submission.py +5 -6
- rowan_python-3.2.0/uv.lock +1386 -0
- rowan_python-3.1.15/.agents/plugins/marketplace.json +0 -20
- rowan_python-3.1.15/.envrc +0 -4
- rowan_python-3.1.15/.github/workflows/python-publish.yml +0 -45
- rowan_python-3.1.15/.github/workflows/test.yml +0 -34
- rowan_python-3.1.15/.pre-commit-config.yaml +0 -36
- rowan_python-3.1.15/AGENTS.md +0 -124
- rowan_python-3.1.15/CLAUDE.md +0 -1
- rowan_python-3.1.15/GEMINI.md +0 -1
- rowan_python-3.1.15/README.md +0 -49
- rowan_python-3.1.15/docs/workflows/basic-calculation.md +0 -11
- rowan_python-3.1.15/pixi.lock +0 -1996
- rowan_python-3.1.15/tests/test_protein.py +0 -39
- {rowan_python-3.1.15 → rowan_python-3.2.0}/.claude-plugin/marketplace.json +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/.codex-plugin/plugin.json +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/.github/workflows/publish-skill.yml +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/LICENSE +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/api/api-keys.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/api/calculation.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/api/folder.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/api/molecule.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/api/project.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/api/protein.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/api/user.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/api/webhooks.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/api/workflow.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/images/RowanLogoLarge.png +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/images/RowanSquareLogo.png +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/images/favicon.svg +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/stylesheets/colors.css +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/admet.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/analogue-docking.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/batch-docking.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/binding-affinity.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/bond-dissociation-energy.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/conformer-search-settings.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/conformer-search.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/covalent-inhibitor-scan.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/descriptors.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/docking.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/double-ended-ts-search.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/electronic-properties.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/fukui.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/hydrogen-bond-donor-acceptor-strength.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/interaction-energy-decomposition.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/ion-mobility.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/irc.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/logp.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/macropka.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/membrane-permeability.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/msa.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/multistage-optimization.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/nmr.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/pka.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/pocket-detection.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/pose-analysis-md.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/protein-binder-design.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/protein-cofolding.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/protein-md.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/protein-preparation.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/rbfe-graph.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/redox-potential.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/relative-binding-free-energy-perturbation.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/scan.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/solubility.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/solvent-dependent-conformers.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/spin-states.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/strain.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/docs/workflows/tautomer-search.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/PROTAC_solubility.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/admet.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/analogue_docking.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/aqueous_solubility.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/basic_calculation.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/basic_calculation_from_json.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/basic_calculation_with_constraint.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/batch_solubility.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/binding_affinity.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/data/1iep_receptorH.pdb +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/data/Al_FCC.xyz +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/data/citalopram_1iep.xyz +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/data/ibuprofen_conformers.sdf +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/data/tyk2_ligands.sdf +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/data/tyk2_structure.pdb +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/data/workflow_example.json +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/dcd_download.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/estimate_workflow.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/fukui_index.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/interaction_energy_decomposition.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/ion_mobility.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/irc.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/logp.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/macropka.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/membrane_permeability.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/nmr.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/phenol_pka.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/project_scoped_api_key.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/protein_cofolding.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/protein_cofolding_modified_inputs.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/protein_cofolding_with_constraints.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/protein_preparation.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/rbfe_graph.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/solvent_dependent_conformers.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/strain.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/tautomer.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/template.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/temporary_workflow_sharing.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/examples/webhook.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/constants.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/py.typed +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/types.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/rowan/workflows/__init__.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/.claude-plugin/plugin.json +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/SKILL.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/admet.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/analogue_docking.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/batch_docking.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/bde.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/binding_affinity.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/conformer_search.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/covalent_inhibitor_scan.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/descriptors.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/docking.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/electronic_properties.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/folders_and_projects.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/fukui.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/hydrogen_bond_donor_acceptor_strength.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/interaction_energy_decomposition.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/ion_mobility.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/irc.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/logp.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/macropka.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/mcp_execution.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/membrane_permeability.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/msa.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/multistage_optimization.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/nmr.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/pka.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/pocket_detection.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/protein_binder_design.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/protein_cofolding.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/protein_preparation.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/python_sdk.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/rbfe_graph.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/redox_potential.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/relative_binding_free_energy_perturbation.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/scan.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/solubility.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/solvent_dependent_conformers.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/spin_states.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/strain.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/tautomer_search.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/reference/webhooks.md +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/skills/computational-chemistry-and-biology/scripts/check_env.py +0 -0
- {rowan_python-3.1.15 → rowan_python-3.2.0}/tests/test_plugin.py +0 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# http://editorconfig.org/#file-format-details
|
|
2
|
+
root = true
|
|
3
|
+
|
|
4
|
+
[*]
|
|
5
|
+
charset = utf-8
|
|
6
|
+
end_of_line = lf
|
|
7
|
+
indent_size = 4
|
|
8
|
+
indent_style = space
|
|
9
|
+
insert_final_newline = true
|
|
10
|
+
trim_trailing_whitespace = true
|
|
11
|
+
|
|
12
|
+
[*.md]
|
|
13
|
+
trim_trailing_whitespace = false
|
|
14
|
+
|
|
15
|
+
[Makefile]
|
|
16
|
+
indent_style = tab
|
|
@@ -14,19 +14,21 @@ jobs:
|
|
|
14
14
|
|
|
15
15
|
steps:
|
|
16
16
|
- name: Checkout repository
|
|
17
|
-
uses: actions/checkout@
|
|
17
|
+
uses: actions/checkout@v6
|
|
18
18
|
with:
|
|
19
19
|
fetch-depth: 0
|
|
20
20
|
ref: master
|
|
21
21
|
|
|
22
|
-
- name: Install
|
|
23
|
-
uses:
|
|
22
|
+
- name: Install uv
|
|
23
|
+
uses: astral-sh/setup-uv@v10.1.0
|
|
24
24
|
with:
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
enable-cache: true
|
|
26
|
+
|
|
27
|
+
- name: Install dependencies
|
|
28
|
+
run: uv sync --locked --no-dev --group docs
|
|
27
29
|
|
|
28
30
|
- name: Build MkDocs site
|
|
29
|
-
run:
|
|
31
|
+
run: uv run --no-sync mkdocs build --clean
|
|
30
32
|
|
|
31
33
|
- name: Install SSH Key
|
|
32
34
|
uses: shimataro/ssh-key-action@v2
|
|
@@ -39,5 +41,5 @@ jobs:
|
|
|
39
41
|
|
|
40
42
|
- name: Deploy with rsync
|
|
41
43
|
run: |
|
|
42
|
-
rsync -avz --delete
|
|
44
|
+
rsync -avz --delete site/ \
|
|
43
45
|
${{ secrets.DOCS_USERNAME }}@${{ secrets.DOCS_IP }}:${{ secrets.DOCS_TARGET_DIR }}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
name: Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
concurrency:
|
|
12
|
+
group: ${{ github.workflow }}
|
|
13
|
+
cancel-in-progress: false
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
run:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
# Enable after configuring the repository environment.
|
|
19
|
+
# environment:
|
|
20
|
+
# name: pypi
|
|
21
|
+
steps:
|
|
22
|
+
- name: Skip if running with act
|
|
23
|
+
if: ${{ env.ACT == 'true' }}
|
|
24
|
+
run: exit 1
|
|
25
|
+
|
|
26
|
+
- name: Checkout
|
|
27
|
+
uses: actions/checkout@v6
|
|
28
|
+
|
|
29
|
+
- name: Install uv
|
|
30
|
+
uses: astral-sh/setup-uv@v10.1.0
|
|
31
|
+
|
|
32
|
+
- name: Install Python
|
|
33
|
+
run: uv python install
|
|
34
|
+
|
|
35
|
+
- name: Build
|
|
36
|
+
run: uv build
|
|
37
|
+
|
|
38
|
+
- name: Smoke test (wheel)
|
|
39
|
+
run: >-
|
|
40
|
+
uv run --isolated --no-project --directory "$RUNNER_TEMP"
|
|
41
|
+
--with "$GITHUB_WORKSPACE"/dist/*.whl python -c "import rowan"
|
|
42
|
+
|
|
43
|
+
- name: Smoke test (source distribution)
|
|
44
|
+
run: >-
|
|
45
|
+
uv run --isolated --no-project --directory "$RUNNER_TEMP"
|
|
46
|
+
--with "$GITHUB_WORKSPACE"/dist/*.tar.gz python -c "import rowan"
|
|
47
|
+
|
|
48
|
+
- name: Publish
|
|
49
|
+
env:
|
|
50
|
+
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
|
|
51
|
+
run: uv publish
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
name: Test
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request: {}
|
|
5
|
+
push:
|
|
6
|
+
branches: master
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
concurrency:
|
|
12
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
13
|
+
cancel-in-progress: true
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
test:
|
|
17
|
+
strategy:
|
|
18
|
+
matrix:
|
|
19
|
+
python-version: ["3.12", "3.14"]
|
|
20
|
+
os: [ubuntu-latest]
|
|
21
|
+
|
|
22
|
+
name: Python ${{ matrix.os }} ${{ matrix.python-version }}
|
|
23
|
+
runs-on: ${{ matrix.os }}
|
|
24
|
+
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v6
|
|
27
|
+
|
|
28
|
+
- name: Install the latest version of uv
|
|
29
|
+
uses: astral-sh/setup-uv@v7.6
|
|
30
|
+
with:
|
|
31
|
+
enable-cache: true
|
|
32
|
+
|
|
33
|
+
- name: Install Python
|
|
34
|
+
run: uv python install ${{ matrix.python-version }}
|
|
35
|
+
|
|
36
|
+
- name: Install dependencies
|
|
37
|
+
run: uv sync --locked
|
|
38
|
+
|
|
39
|
+
- name: Check TOML/YAML/whitespace
|
|
40
|
+
run: |
|
|
41
|
+
uv run prek run --all-files --show-diff-on-failure --color=always \
|
|
42
|
+
check-toml check-yaml trailing-whitespace end-of-file-fixer
|
|
43
|
+
|
|
44
|
+
- run: uv run rumdl fmt --check --diff .
|
|
45
|
+
- run: uv run rumdl check .
|
|
46
|
+
|
|
47
|
+
- run: uv run ruff format --check --diff .
|
|
48
|
+
- run: uv run ruff check .
|
|
49
|
+
|
|
50
|
+
- run: uv run ty check
|
|
51
|
+
|
|
52
|
+
- run: uv run pytest --cov --cov-report=xml
|
|
53
|
+
|
|
54
|
+
# Enable after configuring Codecov and its repository token.
|
|
55
|
+
# - name: Upload coverage to Codecov
|
|
56
|
+
# uses: codecov/codecov-action@v5
|
|
57
|
+
# with:
|
|
58
|
+
# token: ${{ secrets.CODECOV_TOKEN }}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Ignore environment file with ROWAN_API_KEY
|
|
2
2
|
.env
|
|
3
|
+
# Variant env files (.env.test, .env.single-tenant, ...); .envrc is tracked for direnv
|
|
4
|
+
.env.*
|
|
5
|
+
.app.json
|
|
6
|
+
|
|
7
|
+
# macOS
|
|
8
|
+
.DS_Store
|
|
3
9
|
|
|
4
10
|
# Created by https://www.toptal.com/developers/gitignore/api/python
|
|
5
11
|
# Edit at https://www.toptal.com/developers/gitignore?templates=python
|
|
@@ -203,3 +209,6 @@ cyp/
|
|
|
203
209
|
msa_directory/
|
|
204
210
|
|
|
205
211
|
notes.md
|
|
212
|
+
|
|
213
|
+
# Machine-specific agent settings
|
|
214
|
+
.claude/settings.local.json
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.14
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
[global]
|
|
2
|
+
|
|
3
|
+
disable = [
|
|
4
|
+
"MD013", # line length
|
|
5
|
+
"MD033", # no inline HTML
|
|
6
|
+
]
|
|
7
|
+
|
|
8
|
+
exclude = [
|
|
9
|
+
".git",
|
|
10
|
+
"node_modules",
|
|
11
|
+
"vendor",
|
|
12
|
+
"dist",
|
|
13
|
+
"build",
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
respect-gitignore = true
|
|
17
|
+
|
|
18
|
+
[per-file-ignores]
|
|
19
|
+
# Skill files start with frontmatter, not headings
|
|
20
|
+
".claude/**/*.md" = ["MD041"]
|
|
21
|
+
".agents/**/*.md" = ["MD041"]
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: rowan-python
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.2.0
|
|
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
|
|
7
|
-
Author-email: Corin Wagen <corin@rowansci.com>
|
|
7
|
+
Author-email: Corin Wagen <corin@rowansci.com>, Eli Mann <eli@rowansci.com>
|
|
8
|
+
License-Expression: MIT
|
|
8
9
|
License-File: LICENSE
|
|
9
10
|
Requires-Python: >=3.12
|
|
10
11
|
Requires-Dist: httpx
|
|
@@ -17,16 +18,25 @@ Description-Content-Type: text/markdown
|
|
|
17
18
|
# Rowan Python Library
|
|
18
19
|
|
|
19
20
|
[](https://pypi.python.org/pypi/rowan-python)
|
|
20
|
-
[](https://docs.astral.sh/uv/)
|
|
21
22
|
[](https://github.com/charliermarsh/ruff)
|
|
22
23
|
[](https://pypi.python.org/pypi/rowan-python/)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
[](LICENSE)
|
|
25
|
+
[](https://github.com/rowansci/rowan-python/actions)
|
|
26
|
+
[](https://github.com/astral-sh/ty)
|
|
27
|
+
<!-- Enable these badges with the corresponding tooling/services.
|
|
28
|
+
[](https://rumdl.dev)
|
|
29
|
+
[](https://codecov.io/gh/rowansci/rowan-python)
|
|
30
|
+
-->
|
|
31
|
+
|
|
32
|
+
The Rowan Python library is the Python SDK for running Rowan computational chemistry workflows
|
|
33
|
+
programmatically. Use it from scripts and applications to submit calculations, monitor workflow
|
|
34
|
+
progress, retrieve results, and manage molecules, proteins, folders, and projects through the
|
|
35
|
+
Rowan API.
|
|
26
36
|
|
|
27
37
|
## Documentation
|
|
28
38
|
|
|
29
|
-
|
|
39
|
+
Read the [Rowan Python API documentation](https://docs.rowansci.com/python-api).
|
|
30
40
|
|
|
31
41
|
## Agent skill
|
|
32
42
|
|
|
@@ -34,6 +44,9 @@ Ships with a [computational chemistry and biology skill](skills/computational-ch
|
|
|
34
44
|
that helps coding agents choose and run Rowan workflows through either Rowan MCP tools or the
|
|
35
45
|
Rowan Python SDK.
|
|
36
46
|
|
|
47
|
+
When using Rowan MCP tools, always read and follow this skill and its workflow references first.
|
|
48
|
+
The skill provides the scientific guidance and execution requirements for MCP workflows.
|
|
49
|
+
|
|
37
50
|
### Claude Code
|
|
38
51
|
|
|
39
52
|
```bash
|
|
@@ -48,6 +61,23 @@ codex plugin marketplace add rowansci/rowan-python --ref master
|
|
|
48
61
|
codex plugin add computational-chemistry-and-biology@rowan
|
|
49
62
|
```
|
|
50
63
|
|
|
64
|
+
### Rowan MCP server (optional)
|
|
65
|
+
|
|
66
|
+
The skill also works with the hosted Rowan MCP server, which provides Rowan tools directly to the
|
|
67
|
+
agent. Add it once per client:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Claude Code
|
|
71
|
+
claude mcp add --transport http rowan https://mcp.rowansci.com/
|
|
72
|
+
|
|
73
|
+
# Codex
|
|
74
|
+
codex mcp add rowan --url https://mcp.rowansci.com/
|
|
75
|
+
codex mcp login rowan
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Both clients prompt for OAuth sign-in on first use. Without the server, the skill falls back to the
|
|
79
|
+
Rowan Python SDK, which authenticates with `ROWAN_API_KEY` instead.
|
|
80
|
+
|
|
51
81
|
Start a new Claude Code or Codex session after installation. For manual installation, download the
|
|
52
82
|
[latest skill ZIP](https://github.com/rowansci/rowan-python/releases/download/skill-latest/computational-chemistry-and-biology-skill.zip)
|
|
53
83
|
and extract it into your agent's skills directory.
|
|
@@ -57,9 +87,6 @@ and extract it into your agent's skills directory.
|
|
|
57
87
|
To run the examples, you will need to set your ROWAN_API_KEY environment variable or set it directly in the script.
|
|
58
88
|
If running the examples in a cloned version of the repository, you can add your api key to a local `.env` file, which will automatically be loaded into the environment by direnv (if installed).
|
|
59
89
|
|
|
60
|
-
|
|
61
90
|
## Issues
|
|
62
91
|
|
|
63
92
|
To report issues, please use the "Issues" tab above.
|
|
64
|
-
|
|
65
|
-
*Corin Wagen, 2023*
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Rowan Python Library
|
|
2
|
+
|
|
3
|
+
[](https://pypi.python.org/pypi/rowan-python)
|
|
4
|
+
[](https://docs.astral.sh/uv/)
|
|
5
|
+
[](https://github.com/charliermarsh/ruff)
|
|
6
|
+
[](https://pypi.python.org/pypi/rowan-python/)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
[](https://github.com/rowansci/rowan-python/actions)
|
|
9
|
+
[](https://github.com/astral-sh/ty)
|
|
10
|
+
<!-- Enable these badges with the corresponding tooling/services.
|
|
11
|
+
[](https://rumdl.dev)
|
|
12
|
+
[](https://codecov.io/gh/rowansci/rowan-python)
|
|
13
|
+
-->
|
|
14
|
+
|
|
15
|
+
The Rowan Python library is the Python SDK for running Rowan computational chemistry workflows
|
|
16
|
+
programmatically. Use it from scripts and applications to submit calculations, monitor workflow
|
|
17
|
+
progress, retrieve results, and manage molecules, proteins, folders, and projects through the
|
|
18
|
+
Rowan API.
|
|
19
|
+
|
|
20
|
+
## Documentation
|
|
21
|
+
|
|
22
|
+
Read the [Rowan Python API documentation](https://docs.rowansci.com/python-api).
|
|
23
|
+
|
|
24
|
+
## Agent skill
|
|
25
|
+
|
|
26
|
+
Ships with a [computational chemistry and biology skill](skills/computational-chemistry-and-biology/)
|
|
27
|
+
that helps coding agents choose and run Rowan workflows through either Rowan MCP tools or the
|
|
28
|
+
Rowan Python SDK.
|
|
29
|
+
|
|
30
|
+
When using Rowan MCP tools, always read and follow this skill and its workflow references first.
|
|
31
|
+
The skill provides the scientific guidance and execution requirements for MCP workflows.
|
|
32
|
+
|
|
33
|
+
### Claude Code
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
claude plugin marketplace add https://github.com/rowansci/rowan-python.git
|
|
37
|
+
claude plugin install computational-chemistry-and-biology@rowan
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Codex
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
codex plugin marketplace add rowansci/rowan-python --ref master
|
|
44
|
+
codex plugin add computational-chemistry-and-biology@rowan
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Rowan MCP server (optional)
|
|
48
|
+
|
|
49
|
+
The skill also works with the hosted Rowan MCP server, which provides Rowan tools directly to the
|
|
50
|
+
agent. Add it once per client:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# Claude Code
|
|
54
|
+
claude mcp add --transport http rowan https://mcp.rowansci.com/
|
|
55
|
+
|
|
56
|
+
# Codex
|
|
57
|
+
codex mcp add rowan --url https://mcp.rowansci.com/
|
|
58
|
+
codex mcp login rowan
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Both clients prompt for OAuth sign-in on first use. Without the server, the skill falls back to the
|
|
62
|
+
Rowan Python SDK, which authenticates with `ROWAN_API_KEY` instead.
|
|
63
|
+
|
|
64
|
+
Start a new Claude Code or Codex session after installation. For manual installation, download the
|
|
65
|
+
[latest skill ZIP](https://github.com/rowansci/rowan-python/releases/download/skill-latest/computational-chemistry-and-biology-skill.zip)
|
|
66
|
+
and extract it into your agent's skills directory.
|
|
67
|
+
|
|
68
|
+
## Running examples
|
|
69
|
+
|
|
70
|
+
To run the examples, you will need to set your ROWAN_API_KEY environment variable or set it directly in the script.
|
|
71
|
+
If running the examples in a cloned version of the repository, you can add your api key to a local `.env` file, which will automatically be loaded into the environment by direnv (if installed).
|
|
72
|
+
|
|
73
|
+
## Issues
|
|
74
|
+
|
|
75
|
+
To report issues, please use the "Issues" tab above.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
{ width="320" }
|
|
2
|
-
|
|
3
1
|
# Rowan Python API
|
|
4
2
|
|
|
3
|
+
{ width="320" }
|
|
4
|
+
|
|
5
5
|
The `rowan` package is the official Python client for the [Rowan](https://rowansci.com) computational
|
|
6
6
|
chemistry platform. Submit workflows, poll or stream results, and manage
|
|
7
7
|
molecules, proteins, folders, and projects—all from plain Python.
|
|
@@ -10,21 +10,21 @@ molecules, proteins, folders, and projects—all from plain Python.
|
|
|
10
10
|
|
|
11
11
|
=== "pip"
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
```bash
|
|
14
|
+
pip install rowan-python
|
|
15
|
+
```
|
|
16
16
|
|
|
17
17
|
=== "pixi"
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
```bash
|
|
20
|
+
pixi add --pypi rowan-python
|
|
21
|
+
```
|
|
22
22
|
|
|
23
23
|
=== "uv"
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
```bash
|
|
26
|
+
uv add rowan-python
|
|
27
|
+
```
|
|
28
28
|
|
|
29
29
|
## Authentication
|
|
30
30
|
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Basic Calculation
|
|
2
|
+
|
|
3
|
+
## Configuration
|
|
4
|
+
|
|
5
|
+
Use the exported enums instead of raw strings when setting the method and engine:
|
|
6
|
+
|
|
7
|
+
```python
|
|
8
|
+
import rowan
|
|
9
|
+
|
|
10
|
+
molecule = rowan.Molecule.from_smiles("CCO")
|
|
11
|
+
workflow = rowan.submit_basic_calculation_workflow(
|
|
12
|
+
initial_molecule=molecule,
|
|
13
|
+
tasks=["optimize"],
|
|
14
|
+
method=rowan.Method.GFN2_XTB,
|
|
15
|
+
engine=rowan.Engine.XTB,
|
|
16
|
+
)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Pass an [`OptimizationSettings`](settings.md) object or
|
|
20
|
+
an equivalent dictionary to `opt_settings`. `optimize_cell` defaults to `False`; set it to `True`
|
|
21
|
+
only when optimizing a periodic cell.
|
|
22
|
+
|
|
23
|
+
```python
|
|
24
|
+
opt_settings = rowan.OptimizationSettings(max_steps=200, optimize_cell=False)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
::: rowan.workflows.basic_calculation
|
|
28
|
+
handler: python
|
|
29
|
+
options:
|
|
30
|
+
show_source: false
|
|
31
|
+
show_root_heading: false
|
|
32
|
+
show_root_toc_entry: false
|
|
33
|
+
members_order: source
|
|
34
|
+
group_by_category: true
|
|
35
|
+
filters: ["!^_"]
|
|
@@ -12,6 +12,21 @@
|
|
|
12
12
|
members:
|
|
13
13
|
- Settings
|
|
14
14
|
|
|
15
|
+
## Basis sets
|
|
16
|
+
|
|
17
|
+
Pass a basis set name as a string for ordinary calculations. Use `rowan.BasisSet` when configuring
|
|
18
|
+
atom- or element-specific overrides.
|
|
19
|
+
|
|
20
|
+
::: stjames.basis_set
|
|
21
|
+
handler: python
|
|
22
|
+
options:
|
|
23
|
+
show_source: false
|
|
24
|
+
show_root_heading: false
|
|
25
|
+
show_root_toc_entry: false
|
|
26
|
+
members_order: source
|
|
27
|
+
group_by_category: true
|
|
28
|
+
filters: ["!^_"]
|
|
29
|
+
|
|
15
30
|
::: stjames.opt_settings
|
|
16
31
|
handler: python
|
|
17
32
|
options:
|
|
@@ -3,54 +3,90 @@
|
|
|
3
3
|
Value types shared across many workflows — the vocabulary you use for `preset`, `method`, and
|
|
4
4
|
structural inputs regardless of which workflow you're submitting.
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
Legacy enum members retained for parsing historical workflows are omitted below.
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Enum members and their accepted string values are listed below. Import these types from `rowan`,
|
|
9
|
+
not `stjames`.
|
|
10
|
+
|
|
11
|
+
## Methods
|
|
12
|
+
|
|
13
|
+
::: stjames.method.Method
|
|
9
14
|
handler: python
|
|
10
15
|
options:
|
|
11
16
|
show_source: false
|
|
17
|
+
show_bases: false
|
|
12
18
|
show_root_heading: false
|
|
13
19
|
show_root_toc_entry: false
|
|
20
|
+
show_if_no_docstring: true
|
|
21
|
+
separate_signature: false
|
|
14
22
|
members_order: source
|
|
15
23
|
group_by_category: true
|
|
16
|
-
filters:
|
|
24
|
+
filters:
|
|
25
|
+
- "!^_"
|
|
26
|
+
- "!^default_engine$"
|
|
27
|
+
- "!^(MACE_MP_0|MACE_MP_0B2_L|EGRET_1|EGRET_1E|EGRET_1T)$"
|
|
28
|
+
- "!^SMIRNOFF_2_(0_0|2_1)_AMBER_AM1BCC$"
|
|
17
29
|
|
|
18
|
-
|
|
30
|
+
## Engines
|
|
31
|
+
|
|
32
|
+
::: stjames.engine.Engine
|
|
19
33
|
handler: python
|
|
20
34
|
options:
|
|
21
35
|
show_source: false
|
|
36
|
+
show_bases: false
|
|
22
37
|
show_root_heading: false
|
|
23
38
|
show_root_toc_entry: false
|
|
39
|
+
show_if_no_docstring: true
|
|
40
|
+
separate_signature: false
|
|
24
41
|
members_order: source
|
|
25
42
|
group_by_category: true
|
|
26
|
-
filters:
|
|
43
|
+
filters:
|
|
44
|
+
- "!^_"
|
|
45
|
+
- "!^(EGRET|MACE|TERACHEM)$"
|
|
27
46
|
|
|
28
|
-
|
|
47
|
+
## Tasks
|
|
48
|
+
|
|
49
|
+
::: stjames.task.Task
|
|
29
50
|
handler: python
|
|
30
51
|
options:
|
|
31
52
|
show_source: false
|
|
53
|
+
show_bases: false
|
|
32
54
|
show_root_heading: false
|
|
33
55
|
show_root_toc_entry: false
|
|
56
|
+
show_if_no_docstring: true
|
|
57
|
+
separate_signature: false
|
|
34
58
|
members_order: source
|
|
35
59
|
group_by_category: true
|
|
36
|
-
filters:
|
|
60
|
+
filters:
|
|
61
|
+
- "!^_"
|
|
62
|
+
- "!^STRESS$"
|
|
37
63
|
|
|
38
|
-
|
|
64
|
+
## Corrections
|
|
65
|
+
|
|
66
|
+
::: stjames.correction.Correction
|
|
39
67
|
handler: python
|
|
40
68
|
options:
|
|
41
69
|
show_source: false
|
|
70
|
+
show_bases: false
|
|
42
71
|
show_root_heading: false
|
|
43
72
|
show_root_toc_entry: false
|
|
73
|
+
show_if_no_docstring: true
|
|
74
|
+
separate_signature: false
|
|
44
75
|
members_order: source
|
|
45
76
|
group_by_category: true
|
|
46
77
|
filters: ["!^_"]
|
|
47
78
|
|
|
48
|
-
|
|
79
|
+
## Modes
|
|
80
|
+
|
|
81
|
+
::: stjames.mode.Mode
|
|
49
82
|
handler: python
|
|
50
83
|
options:
|
|
51
84
|
show_source: false
|
|
85
|
+
show_bases: false
|
|
52
86
|
show_root_heading: false
|
|
53
87
|
show_root_toc_entry: false
|
|
88
|
+
show_if_no_docstring: true
|
|
89
|
+
separate_signature: false
|
|
54
90
|
members_order: source
|
|
55
91
|
group_by_category: true
|
|
56
92
|
filters: ["!^_"]
|
|
@@ -18,6 +18,8 @@ def compute_energy_with_solvent_correction(
|
|
|
18
18
|
|
|
19
19
|
print(f"View workflow privately at: https://labs.rowansci.com/calculation/{opt_workflow.uuid}")
|
|
20
20
|
opt_result = opt_workflow.result()
|
|
21
|
+
if opt_result.molecule is None:
|
|
22
|
+
raise ValueError("Optimization returned no molecule")
|
|
21
23
|
|
|
22
24
|
sp_workflow = rowan.submit_basic_calculation_workflow(
|
|
23
25
|
initial_molecule=opt_result.molecule,
|
|
@@ -31,6 +33,8 @@ def compute_energy_with_solvent_correction(
|
|
|
31
33
|
print(f"View workflow privately at: https://labs.rowansci.com/calculation/{sp_workflow.uuid}")
|
|
32
34
|
sp_result = sp_workflow.result()
|
|
33
35
|
|
|
36
|
+
if sp_result.energy is None:
|
|
37
|
+
raise ValueError("Single-point calculation returned no energy")
|
|
34
38
|
return sp_result.energy
|
|
35
39
|
|
|
36
40
|
|
|
@@ -18,7 +18,10 @@ preparation_workflow = rowan.submit_protein_preparation_workflow(
|
|
|
18
18
|
name="Prepare CDK2",
|
|
19
19
|
folder=folder,
|
|
20
20
|
)
|
|
21
|
-
|
|
21
|
+
preparation_result = preparation_workflow.result()
|
|
22
|
+
prepared_protein_uuid = preparation_result.prepared_protein_uuid
|
|
23
|
+
if prepared_protein_uuid is None:
|
|
24
|
+
raise ValueError("Protein preparation returned no prepared protein")
|
|
22
25
|
|
|
23
26
|
workflow = rowan.submit_batch_docking_workflow(
|
|
24
27
|
ligands,
|
|
@@ -14,7 +14,7 @@ msa_workflow = rowan.submit_msa_workflow(
|
|
|
14
14
|
"VLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSHGSAQVKGHGKKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR",
|
|
15
15
|
"VHLTPEEKSAVTALWGKVNVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH",
|
|
16
16
|
],
|
|
17
|
-
output_formats=
|
|
17
|
+
output_formats={rowan.MSAFormat.BOLTZ},
|
|
18
18
|
name="Boltz Paired MSA Example",
|
|
19
19
|
folder=folder,
|
|
20
20
|
)
|
|
@@ -13,7 +13,7 @@ msa_workflow = rowan.submit_msa_workflow(
|
|
|
13
13
|
initial_protein_sequences=[
|
|
14
14
|
"HPETLVKVKDAEDQLGARVGYIELDLNSGKILESFRPEERFPMMSTFKVLLCGAVLSRIDAGQEQLGRRIHYSQNDLVEYSPVTEKHLTDGMTVRELCSAAITMSDNTAANLLLTTIGGPKELTAFLHNMGDHVTRLDRWEPELNEAIPNDERDTTMPVAMATTLRKLLTGELLTLASRQQLIDWMEADKVAGPLLRSALPAGWFIADKSGAGERGSRGIIAALGPDGKPSRIVVIYTTGSQATMDERNRQIAEIGASLIKHW"
|
|
15
15
|
],
|
|
16
|
-
output_formats=
|
|
16
|
+
output_formats={rowan.MSAFormat.BOLTZ},
|
|
17
17
|
name="Boltz MSA Example",
|
|
18
18
|
folder=folder,
|
|
19
19
|
)
|
|
@@ -25,7 +25,7 @@ msa_workflow = rowan.submit_msa_workflow(
|
|
|
25
25
|
"VLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSHGSAQVKGHGKKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR",
|
|
26
26
|
"VHLTPEEKSAVTALWGKVNVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH",
|
|
27
27
|
],
|
|
28
|
-
output_formats=
|
|
28
|
+
output_formats={rowan.MSAFormat.CHAI},
|
|
29
29
|
name="CHAI Paired MSA Example",
|
|
30
30
|
folder=folder,
|
|
31
31
|
)
|
|
@@ -22,7 +22,7 @@ msa_workflow = rowan.submit_msa_workflow(
|
|
|
22
22
|
initial_protein_sequences=[
|
|
23
23
|
"HPETLVKVKDAEDQLGARVGYIELDLNSGKILESFRPEERFPMMSTFKVLLCGAVLSRIDAGQEQLGRRIHYSQNDLVEYSPVTEKHLTDGMTVRELCSAAITMSDNTAANLLLTTIGGPKELTAFLHNMGDHVTRLDRWEPELNEAIPNDERDTTMPVAMATTLRKLLTGELLTLASRQQLIDWMEADKVAGPLLRSALPAGWFIADKSGAGERGSRGIIAALGPDGKPSRIVVIYTTGSQATMDERNRQIAEIGASLIKHW"
|
|
24
24
|
],
|
|
25
|
-
output_formats=
|
|
25
|
+
output_formats={rowan.MSAFormat.CHAI},
|
|
26
26
|
name="CHAI MSA Example",
|
|
27
27
|
folder=folder,
|
|
28
28
|
)
|