rowan-python 1.1.9__tar.gz → 1.1.11__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.
Files changed (35) hide show
  1. rowan_python-1.1.11/.envrc +7 -0
  2. {rowan_python-1.1.9 → rowan_python-1.1.11}/.github/workflows/python-publish.yml +6 -0
  3. rowan_python-1.1.11/.github/workflows/test.yml +33 -0
  4. rowan_python-1.1.11/.gitignore +200 -0
  5. rowan_python-1.1.11/.pre-commit-config.yaml +36 -0
  6. {rowan_python-1.1.9 → rowan_python-1.1.11}/PKG-INFO +8 -3
  7. {rowan_python-1.1.9 → rowan_python-1.1.11}/README.md +5 -0
  8. rowan_python-1.1.11/examples/bde.py +34 -0
  9. rowan_python-1.1.11/examples/conformers.py +36 -0
  10. rowan_python-1.1.11/examples/multistage_opt.py +21 -0
  11. rowan_python-1.1.11/examples/optimization.py +27 -0
  12. rowan_python-1.1.11/examples/pka.py +30 -0
  13. rowan_python-1.1.11/examples/scan.py +34 -0
  14. rowan_python-1.1.11/pixi.lock +1477 -0
  15. rowan_python-1.1.11/pyproject.toml +131 -0
  16. {rowan_python-1.1.9 → rowan_python-1.1.11}/rowan/__init__.py +1 -0
  17. {rowan_python-1.1.9 → rowan_python-1.1.11}/rowan/calculation.py +4 -1
  18. {rowan_python-1.1.9 → rowan_python-1.1.11}/rowan/client.py +21 -11
  19. {rowan_python-1.1.9 → rowan_python-1.1.11}/rowan/folder.py +28 -35
  20. {rowan_python-1.1.9 → rowan_python-1.1.11}/rowan/protein.py +3 -3
  21. rowan_python-1.1.11/rowan/protein_cofolding.py +36 -0
  22. rowan_python-1.1.11/rowan/py.typed +0 -0
  23. rowan_python-1.1.11/rowan/rowan_rdkit/__init__.py +29 -0
  24. rowan_python-1.1.11/rowan/rowan_rdkit/chem_utils.py +966 -0
  25. rowan_python-1.1.11/rowan/utils.py +158 -0
  26. {rowan_python-1.1.9 → rowan_python-1.1.11}/rowan/workflow.py +35 -26
  27. rowan_python-1.1.9/.gitignore +0 -18
  28. rowan_python-1.1.9/examples/run.py +0 -17
  29. rowan_python-1.1.9/pixi.lock +0 -3115
  30. rowan_python-1.1.9/pyproject.toml +0 -43
  31. rowan_python-1.1.9/rowan/rowan_rdkit/__init__.py +0 -5
  32. rowan_python-1.1.9/rowan/rowan_rdkit/chem_utils.py +0 -732
  33. rowan_python-1.1.9/rowan/utils.py +0 -157
  34. {rowan_python-1.1.9 → rowan_python-1.1.11}/LICENSE +0 -0
  35. {rowan_python-1.1.9 → rowan_python-1.1.11}/rowan/constants.py +0 -0
@@ -0,0 +1,7 @@
1
+ watch_file pixi.lock
2
+ eval "$(pixi shell-hook -e dev)"
3
+
4
+ if [ -f .env ]; then
5
+ watch_file .env
6
+ set -a && source .env && set +a
7
+ fi
@@ -21,6 +21,12 @@ jobs:
21
21
  runs-on: ubuntu-latest
22
22
 
23
23
  steps:
24
+ - name: Skip if running with act
25
+ if: ${{ env.ACT == 'true' }}
26
+ run: |
27
+ echo "Skipping job because we're in act"
28
+ exit 1
29
+
24
30
  - uses: actions/checkout@v3
25
31
  - name: Set up Python
26
32
  uses: actions/setup-python@v3
@@ -0,0 +1,33 @@
1
+ name: Pytest Dev
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches:
7
+
8
+ jobs:
9
+ test:
10
+ strategy:
11
+ matrix:
12
+ python-version: ["3.13"]
13
+ os: [ubuntu-latest]
14
+
15
+ name: Python ${{ matrix.os }} ${{ matrix.python-version }}
16
+ runs-on: ${{ matrix.os }}
17
+
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+
21
+ - uses: actions/setup-python@v5
22
+ with:
23
+ python-version: ${{ matrix.python-version }}
24
+
25
+ - uses: prefix-dev/setup-pixi@v0.8.7
26
+ with:
27
+ pixi-version: v0.45.0
28
+ cache: true
29
+ environments: dev
30
+
31
+ - run: pixi run fmt
32
+ - run: pixi run lint
33
+ - run: pixi run types
@@ -0,0 +1,200 @@
1
+ # Ignore environment file with ROWAN_API_KEY
2
+ .env
3
+
4
+ # Created by https://www.toptal.com/developers/gitignore/api/python
5
+ # Edit at https://www.toptal.com/developers/gitignore?templates=python
6
+
7
+ ### Python ###
8
+ # Byte-compiled / optimized / DLL files
9
+ __pycache__/
10
+ *.py[cod]
11
+ *$py.class
12
+
13
+ # C extensions
14
+ *.so
15
+
16
+ # Distribution / packaging
17
+ .Python
18
+ build/
19
+ develop-eggs/
20
+ dist/
21
+ downloads/
22
+ eggs/
23
+ .eggs/
24
+ lib/
25
+ lib64/
26
+ parts/
27
+ sdist/
28
+ var/
29
+ wheels/
30
+ share/python-wheels/
31
+ *.egg-info/
32
+ .installed.cfg
33
+ *.egg
34
+ MANIFEST
35
+
36
+ # PyInstaller
37
+ # Usually these files are written by a python script from a template
38
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
39
+ *.manifest
40
+ *.spec
41
+
42
+ # Installer logs
43
+ pip-log.txt
44
+ pip-delete-this-directory.txt
45
+
46
+ # Unit test / coverage reports
47
+ htmlcov/
48
+ .tox/
49
+ .nox/
50
+ .coverage
51
+ .coverage.*
52
+ .cache
53
+ nosetests.xml
54
+ coverage.xml
55
+ *.cover
56
+ *.py,cover
57
+ .hypothesis/
58
+ .pytest_cache/
59
+ cover/
60
+
61
+ # Translations
62
+ *.mo
63
+ *.pot
64
+
65
+ # Django stuff:
66
+ *.log
67
+ local_settings.py
68
+ db.sqlite3
69
+ db.sqlite3-journal
70
+
71
+ # Flask stuff:
72
+ instance/
73
+ .webassets-cache
74
+
75
+ # Scrapy stuff:
76
+ .scrapy
77
+
78
+ # Sphinx documentation
79
+ docs/_build/
80
+
81
+ # PyBuilder
82
+ .pybuilder/
83
+ target/
84
+
85
+ # Jupyter Notebook
86
+ .ipynb_checkpoints
87
+
88
+ # IPython
89
+ profile_default/
90
+ ipython_config.py
91
+
92
+ .vscode/
93
+ # pyenv
94
+ # For a library or package, you might want to ignore these files since the code is
95
+ # intended to run in multiple environments; otherwise, check them in:
96
+ # .python-version
97
+
98
+ # pipenv
99
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
100
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
101
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
102
+ # install all needed dependencies.
103
+ #Pipfile.lock
104
+
105
+ # poetry
106
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
107
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
108
+ # commonly ignored for libraries.
109
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
110
+ #poetry.lock
111
+
112
+ # pdm
113
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
114
+ #pdm.lock
115
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
116
+ # in version control.
117
+ # https://pdm.fming.dev/#use-with-ide
118
+ .pdm.toml
119
+
120
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
121
+ __pypackages__/
122
+
123
+ # Celery stuff
124
+ celerybeat-schedule
125
+ celerybeat.pid
126
+
127
+ # SageMath parsed files
128
+ *.sage.py
129
+
130
+ # Environments
131
+ .env
132
+ .venv
133
+ env/
134
+ venv/
135
+ ENV/
136
+ env.bak/
137
+ venv.bak/
138
+
139
+ # Spyder project settings
140
+ .spyderproject
141
+ .spyproject
142
+
143
+ # Rope project settings
144
+ .ropeproject
145
+
146
+ # mkdocs documentation
147
+ /site
148
+
149
+ # mypy
150
+ .mypy_cache/
151
+ .dmypy.json
152
+ dmypy.json
153
+
154
+ # Pyre type checker
155
+ .pyre/
156
+
157
+ # pytype static type analyzer
158
+ .pytype/
159
+
160
+ # Cython debug symbols
161
+ cython_debug/
162
+
163
+ # PyCharm
164
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
165
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
166
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
167
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
168
+ #.idea/
169
+
170
+ ### Python Patch ###
171
+ # Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration
172
+ poetry.toml
173
+
174
+ # ruff
175
+ .ruff_cache/
176
+
177
+ # LSP config files
178
+ pyrightconfig.json
179
+
180
+ # End of https://www.toptal.com/developers/gitignore/api/python
181
+
182
+ # Pixi
183
+ .pixi
184
+
185
+ # psi4 crap
186
+ timer.dat
187
+ psi*.clean
188
+
189
+ *.CP
190
+ *.CPC
191
+
192
+ *.lprof
193
+
194
+ # pyscf
195
+ pyscf.chk
196
+ local/
197
+
198
+ .pixi/
199
+
200
+ cyp/
@@ -0,0 +1,36 @@
1
+ # Exclude .pixi, data, and patches
2
+ exclude: '(.pixi|\.dat$|\.patch$)'
3
+ repos:
4
+ - repo: https://github.com/pre-commit/pre-commit-hooks
5
+ rev: v5.0.0 # this is optional, use `pre-commit autoupdate` to get the latest rev!
6
+ hooks:
7
+ - id: check-yaml
8
+ - id: check-toml
9
+ - id: end-of-file-fixer
10
+ - id: trailing-whitespace
11
+
12
+ - repo: local
13
+ hooks:
14
+ - id: ruff
15
+ name: ruff-format
16
+ stages: [pre-commit, pre-push]
17
+ language: system
18
+ entry: pixi run fmt
19
+ types: [python]
20
+ pass_filenames: false
21
+
22
+ - id: ruff
23
+ name: ruff-check
24
+ stages: [pre-commit, pre-push]
25
+ language: system
26
+ entry: pixi run lint
27
+ types: [python]
28
+ pass_filenames: false
29
+
30
+ - id: Mypy
31
+ name: mypy
32
+ stages: [pre-commit]
33
+ language: system
34
+ entry: pixi run types
35
+ types: [python]
36
+ pass_filenames: false
@@ -1,17 +1,17 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rowan-python
3
- Version: 1.1.9
3
+ Version: 1.1.11
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
7
  Author-email: Corin Wagen <corin@rowansci.com>
8
8
  License-File: LICENSE
9
- Requires-Python: >=3.8
9
+ Requires-Python: >=3.9
10
10
  Requires-Dist: httpx
11
11
  Requires-Dist: nest-asyncio
12
12
  Requires-Dist: rdkit
13
13
  Requires-Dist: setuptools
14
- Requires-Dist: stjames>=0.0.62
14
+ Requires-Dist: stjames>=0.0.83
15
15
  Description-Content-Type: text/markdown
16
16
 
17
17
  # Rowan Python Library
@@ -28,6 +28,11 @@ The Rowan Python library provides convenient access to the Rowan API from applic
28
28
 
29
29
  The documentation is available [here](https://docs.rowansci.com/python-api).
30
30
 
31
+ ## Running examples
32
+
33
+ To run the examples, you will need to set your ROWAN_API_KEY environment variable or set it directly in the script.
34
+ 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).
35
+
31
36
 
32
37
  ## Issues
33
38
 
@@ -12,6 +12,11 @@ The Rowan Python library provides convenient access to the Rowan API from applic
12
12
 
13
13
  The documentation is available [here](https://docs.rowansci.com/python-api).
14
14
 
15
+ ## Running examples
16
+
17
+ To run the examples, you will need to set your ROWAN_API_KEY environment variable or set it directly in the script.
18
+ 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).
19
+
15
20
 
16
21
  ## Issues
17
22
 
@@ -0,0 +1,34 @@
1
+ """
2
+ Calculate the Bond-Dissociation Energy (BDE) of a molecule using the Rowan API.
3
+
4
+ | Calculation | Initial | Final | Single | Optimizes |
5
+ | Mode | Optimization | Optimization | Point | Fragments? |
6
+ |-------------|--------------|--------------|------------------------|------------|
7
+ | Reckless | | GFN-FF | GFN2-xTB | No |
8
+ | Rapid | | GFN2-xTB | r²SCAN-3c | Yes |
9
+ | Careful | | r²SCAN-3c | ωB97X-3c | Yes |
10
+ | Meticulous | r²SCAN-3c | ωB97X-3c | ωB97M-D3BJ/def2-TZVPPD | Yes |
11
+
12
+ Rapid is recommended for most work.
13
+
14
+ See documentation at: https://docs.rowansci.com/science/workflows/bond-dissociation-energy
15
+ """
16
+
17
+ import json
18
+
19
+ from stjames import Molecule
20
+
21
+ import rowan
22
+
23
+ # rowan.api_key = ""
24
+
25
+ # Run calculation remotely
26
+ result = rowan.compute(
27
+ Molecule.from_smiles("CCCC"),
28
+ workflow_type="bde",
29
+ name="Butane BDE",
30
+ mode="reckless",
31
+ all_CH=True,
32
+ )
33
+
34
+ print(json.dumps(result, indent=4))
@@ -0,0 +1,36 @@
1
+ """
2
+ Calculate the conformers of a molecule using the Rowan API.
3
+
4
+ | Mode | Reckless | Rapid | Careful | Meticulous |
5
+ |-----------------------------------------------|----------|-------|---------|------------|
6
+ | Conformer generation program | RDKit | RDKit | CREST | CREST |
7
+ | Level of theory used for conformer generation | MMFF | MMFF | GFN-FF | GFN2-xTB |
8
+ | CREST Mode | | | quick | normal |
9
+ | ETKDG number of initial conformers | 200 | 300 | | |
10
+ | Initial energy cutoff (kcal/mol) | 10 | 15 | 10 | 15 |
11
+ | RMSD similarity cutoff (Å) | 0.25 | 0.10 | 0.00 | 0.00 |
12
+ | xTB screening max number of conformers | 50 | 100 | 150 | 500 |
13
+ | Final energy cutoff (kcal/mol) | 5 | 5 | 5 | 10 |
14
+
15
+ Rapid is recommended for most work.
16
+
17
+ See documentation at: https://docs.rowansci.com/science/workflows/conformers
18
+ """
19
+
20
+ import json
21
+
22
+ from stjames import Molecule
23
+
24
+ import rowan
25
+
26
+ # rowan.api_key = ""
27
+
28
+ # Run calculation remotely
29
+ result = rowan.compute(
30
+ Molecule.from_smiles("CCOCC"),
31
+ workflow_type="conformers",
32
+ name="Diethyl ether conformers",
33
+ mode="reckless",
34
+ )
35
+
36
+ print(json.dumps(result, indent=4))
@@ -0,0 +1,21 @@
1
+ from pprint import pprint
2
+
3
+ import stjames
4
+
5
+ import rowan
6
+
7
+ # Set ROWAN_API_KEY environment variable to your API key or set rowan.api_key directly
8
+ # rowan.api_key = "rowan-sk..."
9
+
10
+ # load molecule by SMILES (stjames can load a variety of file formats)
11
+ molecule = stjames.Molecule.from_smiles("C1CCC1") # cyclobutane
12
+
13
+ # run calculation remotely and return result
14
+ result = rowan.compute(
15
+ molecule,
16
+ workflow_type="multistage_opt",
17
+ name="Multistage optimization cyclobutane",
18
+ mode="reckless",
19
+ )
20
+
21
+ pprint(result)
@@ -0,0 +1,27 @@
1
+ """
2
+ Run an optimization calculation on a molecule using Rowan.
3
+
4
+ See documentation at: https://docs.rowansci.com/science/quantum-chemistry/geometry-optimization
5
+ """
6
+
7
+ import json
8
+
9
+ from stjames import Molecule
10
+
11
+ import rowan
12
+
13
+ # rowan.api_key = ""
14
+
15
+ # Run calculation remotely
16
+ result = rowan.compute(
17
+ Molecule.from_smiles("O"),
18
+ workflow_type="basic_calculation",
19
+ name="Water Optimization",
20
+ settings={
21
+ "method": "GFN2-xTB",
22
+ "tasks": ["optimize"],
23
+ },
24
+ engine="xtb",
25
+ )
26
+
27
+ print(json.dumps(result, indent=4))
@@ -0,0 +1,30 @@
1
+ """
2
+ Calculate the pKa of the conjugate acid of pyridine using the Rowan API.
3
+
4
+ Experimental value ≈5.23
5
+
6
+ See documentiation at: https://docs.rowansci.com/science/workflows/pka
7
+ and preprint at: https://rowansci.com/publications/pka-prediction
8
+ """
9
+
10
+ from stjames import Molecule
11
+
12
+ import rowan
13
+
14
+ # rowan.api_key = ""
15
+
16
+ # Run calculation remotely
17
+ result = rowan.compute(
18
+ Molecule.from_smiles("n1ccccc1"),
19
+ workflow_type="pka",
20
+ name="Pyridine pKa",
21
+ mode="reckless",
22
+ )
23
+
24
+ logfile = result["object_logfile"]
25
+ strongest_base = result["object_data"]["strongest_base"]
26
+
27
+ print(f"""\
28
+ {logfile}
29
+
30
+ pKa of conjugate acid: {strongest_base:.2f}""")
@@ -0,0 +1,34 @@
1
+ """
2
+ Run an scan calculation on a molecule using Rowan.
3
+
4
+ See documentation at: https://docs.rowansci.com/science/workflows/scan
5
+ """
6
+
7
+ import json
8
+
9
+ from stjames import Molecule
10
+
11
+ import rowan
12
+
13
+ # rowan.api_key = ""
14
+
15
+ # Run calculation remotely
16
+ result = rowan.compute(
17
+ Molecule.from_smiles("O"),
18
+ workflow_type="scan",
19
+ name="Water Angle scan",
20
+ scan_settings={
21
+ "type": "angle",
22
+ "atoms": [2, 1, 3], # 1-indexed
23
+ "start": 100,
24
+ "stop": 110,
25
+ "num": 5,
26
+ },
27
+ calc_settings={
28
+ "method": "GFN2-xTB",
29
+ "tasks": ["optimize"],
30
+ },
31
+ calc_engine="xtb",
32
+ )
33
+
34
+ print(json.dumps(result, indent=4))