rowan-python 2.0.2__tar.gz → 2.1.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.
Files changed (45) hide show
  1. {rowan_python-2.0.2 → rowan_python-2.1.0}/LICENSE +1 -1
  2. {rowan_python-2.0.2 → rowan_python-2.1.0}/PKG-INFO +1 -1
  3. {rowan_python-2.0.2 → rowan_python-2.1.0}/examples/conformers.py +1 -1
  4. rowan_python-2.1.0/examples/data/workflow_example.json +177 -0
  5. {rowan_python-2.0.2 → rowan_python-2.1.0}/examples/docking_screen.py +3 -1
  6. {rowan_python-2.0.2 → rowan_python-2.1.0}/examples/irc.py +1 -1
  7. {rowan_python-2.0.2 → rowan_python-2.1.0}/examples/macropka.py +1 -1
  8. {rowan_python-2.0.2 → rowan_python-2.1.0}/examples/optimization.py +1 -1
  9. {rowan_python-2.0.2 → rowan_python-2.1.0}/examples/pka.py +1 -1
  10. {rowan_python-2.0.2 → rowan_python-2.1.0}/examples/protein_cofolding.py +1 -1
  11. {rowan_python-2.0.2 → rowan_python-2.1.0}/examples/scan.py +1 -1
  12. {rowan_python-2.0.2 → rowan_python-2.1.0}/pixi.lock +56 -55
  13. {rowan_python-2.0.2 → rowan_python-2.1.0}/pyproject.toml +2 -2
  14. {rowan_python-2.0.2 → rowan_python-2.1.0}/rowan/__init__.py +1 -0
  15. rowan_python-2.1.0/rowan/project.py +136 -0
  16. {rowan_python-2.0.2 → rowan_python-2.1.0}/rowan/protein.py +7 -2
  17. {rowan_python-2.0.2 → rowan_python-2.1.0}/rowan/utils.py +3 -3
  18. {rowan_python-2.0.2 → rowan_python-2.1.0}/rowan/workflow.py +1 -1
  19. rowan_python-2.0.2/examples/data/workflow_example.json +0 -190
  20. {rowan_python-2.0.2 → rowan_python-2.1.0}/.envrc +0 -0
  21. {rowan_python-2.0.2 → rowan_python-2.1.0}/.github/workflows/python-publish.yml +0 -0
  22. {rowan_python-2.0.2 → rowan_python-2.1.0}/.github/workflows/test.yml +0 -0
  23. {rowan_python-2.0.2 → rowan_python-2.1.0}/.gitignore +0 -0
  24. {rowan_python-2.0.2 → rowan_python-2.1.0}/.pre-commit-config.yaml +0 -0
  25. {rowan_python-2.0.2 → rowan_python-2.1.0}/README.md +0 -0
  26. {rowan_python-2.0.2 → rowan_python-2.1.0}/docs/images/deciduous-tree-favicon.png +0 -0
  27. {rowan_python-2.0.2 → rowan_python-2.1.0}/docs/index.md +0 -0
  28. {rowan_python-2.0.2 → rowan_python-2.1.0}/docs/rowan_rdkit.md +0 -0
  29. {rowan_python-2.0.2 → rowan_python-2.1.0}/docs/stylesheets/colors.css +0 -0
  30. {rowan_python-2.0.2 → rowan_python-2.1.0}/examples/PROTAC_solubility.py +0 -0
  31. {rowan_python-2.0.2 → rowan_python-2.1.0}/examples/basic_calculation_from_json.py +0 -0
  32. {rowan_python-2.0.2 → rowan_python-2.1.0}/examples/basic_calculation_with_constraint.py +0 -0
  33. {rowan_python-2.0.2 → rowan_python-2.1.0}/examples/basic_calculation_with_solvent.py +0 -0
  34. {rowan_python-2.0.2 → rowan_python-2.1.0}/examples/bde.py +0 -0
  35. {rowan_python-2.0.2 → rowan_python-2.1.0}/examples/cofolding_screen.py +0 -0
  36. {rowan_python-2.0.2 → rowan_python-2.1.0}/examples/conformer_dependent_redox.py +0 -0
  37. {rowan_python-2.0.2 → rowan_python-2.1.0}/examples/multistage_opt.py +0 -0
  38. {rowan_python-2.0.2 → rowan_python-2.1.0}/examples/phenol_pka.py +0 -0
  39. {rowan_python-2.0.2 → rowan_python-2.1.0}/mkdocs.yml +0 -0
  40. {rowan_python-2.0.2 → rowan_python-2.1.0}/rowan/constants.py +0 -0
  41. {rowan_python-2.0.2 → rowan_python-2.1.0}/rowan/folder.py +0 -0
  42. {rowan_python-2.0.2 → rowan_python-2.1.0}/rowan/py.typed +0 -0
  43. {rowan_python-2.0.2 → rowan_python-2.1.0}/rowan/rowan_rdkit/__init__.py +0 -0
  44. {rowan_python-2.0.2 → rowan_python-2.1.0}/rowan/rowan_rdkit/chem_utils.py +0 -0
  45. {rowan_python-2.0.2 → rowan_python-2.1.0}/rowan/user.py +0 -0
@@ -1,6 +1,6 @@
1
1
  The MIT License
2
2
 
3
- Copyright (c) Rowan (https://rowansci.com)
3
+ Copyright (c) Rowan Scientific Corporation
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rowan-python
3
- Version: 2.0.2
3
+ Version: 2.1.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
@@ -28,4 +28,4 @@ result = rowan.submit_conformer_search_workflow(
28
28
  initial_molecule=Molecule.from_smiles("CCOCC"),
29
29
  )
30
30
 
31
- print(result)
31
+ print(result.wait_for_result().fetch_latest(in_place=True))
@@ -0,0 +1,177 @@
1
+ {
2
+ "mode": "auto",
3
+ "engine": "omol25",
4
+ "messages": [],
5
+ "settings": {
6
+ "mode": "rapid",
7
+ "tasks": [
8
+ "optimize"
9
+ ],
10
+ "method": "omol25_conserving_s",
11
+ "basis_set": null,
12
+ "corrections": [],
13
+ "opt_settings": {
14
+ "max_steps": 250,
15
+ "constraints": [],
16
+ "optimize_cell": false,
17
+ "energy_threshold": 0.00005,
18
+ "transition_state": false,
19
+ "recalc_hess_every": 0,
20
+ "max_gradient_threshold": 0.005,
21
+ "rms_gradient_threshold": 0.0035
22
+ },
23
+ "scf_settings": {
24
+ "soscf": "upon_failure",
25
+ "max_iters": 250
26
+ },
27
+ "level_of_theory": "omol25_conserving_s",
28
+ "compute_settings": {
29
+ "compute_type_used": null,
30
+ "requested_compute_type": "cpu"
31
+ },
32
+ "solvent_settings": null,
33
+ "thermochem_settings": {
34
+ "temperature": 298,
35
+ "concentration": 0.0408740470708,
36
+ "scaling_factor": 1,
37
+ "cutoff_frequency": 100
38
+ }
39
+ },
40
+ "initial_molecule": {
41
+ "cell": null,
42
+ "atoms": [
43
+ {
44
+ "position": [
45
+ -1.57521701,
46
+ 0.46946663,
47
+ 0.02709079
48
+ ],
49
+ "atomic_number": 6
50
+ },
51
+ {
52
+ "position": [
53
+ -0.55694222,
54
+ -0.3145698,
55
+ -0.78629029
56
+ ],
57
+ "atomic_number": 6
58
+ },
59
+ {
60
+ "position": [
61
+ 0.64857101,
62
+ -0.77828652,
63
+ 0.03187563
64
+ ],
65
+ "atomic_number": 6
66
+ },
67
+ {
68
+ "position": [
69
+ 1.50511158,
70
+ 0.36668167,
71
+ 0.55011421
72
+ ],
73
+ "atomic_number": 6
74
+ },
75
+ {
76
+ "position": [
77
+ -1.16251671,
78
+ 1.42010117,
79
+ 0.37728614
80
+ ],
81
+ "atomic_number": 1
82
+ },
83
+ {
84
+ "position": [
85
+ -1.90971756,
86
+ -0.10479157,
87
+ 0.89680558
88
+ ],
89
+ "atomic_number": 1
90
+ },
91
+ {
92
+ "position": [
93
+ -2.45269203,
94
+ 0.69552118,
95
+ -0.58729768
96
+ ],
97
+ "atomic_number": 1
98
+ },
99
+ {
100
+ "position": [
101
+ -0.22095177,
102
+ 0.29430816,
103
+ -1.63370132
104
+ ],
105
+ "atomic_number": 1
106
+ },
107
+ {
108
+ "position": [
109
+ -1.05225015,
110
+ -1.19769669,
111
+ -1.20718455
112
+ ],
113
+ "atomic_number": 1
114
+ },
115
+ {
116
+ "position": [
117
+ 0.31306273,
118
+ -1.39292336,
119
+ 0.87531072
120
+ ],
121
+ "atomic_number": 1
122
+ },
123
+ {
124
+ "position": [
125
+ 1.27184498,
126
+ -1.42141593,
127
+ -0.6008237
128
+ ],
129
+ "atomic_number": 1
130
+ },
131
+ {
132
+ "position": [
133
+ 2.3966558,
134
+ -0.02720645,
135
+ 1.04864872
136
+ ],
137
+ "atomic_number": 1
138
+ },
139
+ {
140
+ "position": [
141
+ 0.96154654,
142
+ 0.97685605,
143
+ 1.27736127
144
+ ],
145
+ "atomic_number": 1
146
+ },
147
+ {
148
+ "position": [
149
+ 1.83349502,
150
+ 1.01395547,
151
+ -0.26919568
152
+ ],
153
+ "atomic_number": 1
154
+ }
155
+ ],
156
+ "charge": 0,
157
+ "dipole": null,
158
+ "energy": null,
159
+ "smiles": "CCCC",
160
+ "stress": null,
161
+ "elapsed": null,
162
+ "gradient": null,
163
+ "velocities": null,
164
+ "multiplicity": 1,
165
+ "homo_lumo_gap": null,
166
+ "scf_completed": null,
167
+ "scf_iterations": null,
168
+ "mulliken_charges": null,
169
+ "calculation_index": null,
170
+ "vibrational_modes": null,
171
+ "zero_point_energy": null,
172
+ "thermal_energy_corr": null,
173
+ "thermal_enthalpy_corr": null,
174
+ "mulliken_spin_densities": null,
175
+ "thermal_free_energy_corr": null
176
+ }
177
+ }
@@ -116,7 +116,9 @@ results = {}
116
116
  docking_result_folder = rowan.create_folder(name="Docking results")
117
117
 
118
118
 
119
- protein = rowan.create_protein_from_pdb_id("CDK2", "1HCK")
119
+ protein = rowan.create_protein_from_pdb_id(
120
+ "CDK2", "1HCK", project_uuid=rowan.default_project().uuid
121
+ )
120
122
 
121
123
  protein.sanitize()
122
124
  time.sleep(60)
@@ -21,4 +21,4 @@ H 1.26740151 0.88347299 0.53620841
21
21
  preopt=False,
22
22
  )
23
23
 
24
- print(result)
24
+ print(result.wait_for_result().fetch_latest(in_place=True))
@@ -10,4 +10,4 @@ result = rowan.submit_macropka_workflow(
10
10
  )
11
11
 
12
12
 
13
- print(result)
13
+ print(result.wait_for_result().fetch_latest(in_place=True))
@@ -18,4 +18,4 @@ result = rowan.submit_basic_calculation_workflow(
18
18
  name="Water Optimization",
19
19
  )
20
20
 
21
- print(result)
21
+ print(result.wait_for_result().fetch_latest(in_place=True))
@@ -19,4 +19,4 @@ result = rowan.submit_pka_workflow(
19
19
  name="Pyridine pKa",
20
20
  )
21
21
 
22
- print(result)
22
+ print(result.wait_for_result().fetch_latest(in_place=True))
@@ -14,4 +14,4 @@ result = rowan.submit_protein_cofolding_workflow(
14
14
  name="Torcetrapib Cofolding",
15
15
  )
16
16
 
17
- print(result)
17
+ print(result.wait_for_result().fetch_latest(in_place=True))
@@ -25,4 +25,4 @@ result = rowan.submit_scan_workflow(
25
25
  calculation_engine="xtb",
26
26
  )
27
27
 
28
- print(result)
28
+ print(result.wait_for_result().fetch_latest(in_place=True))
@@ -32,7 +32,7 @@ environments:
32
32
  - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl
33
33
  - pypi: https://files.pythonhosted.org/packages/6f/12/e5e0282d673bb9746bacfb6e2dba8719989d3660cdb2ea79aee9a9651afb/anyio-4.10.0-py3-none-any.whl
34
34
  - pypi: https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl
35
- - pypi: https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
35
+ - pypi: https://files.pythonhosted.org/packages/7e/95/42aa2156235cbc8fa61208aded06ef46111c4d3f0de233107b3f38631803/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
36
36
  - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl
37
37
  - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
38
38
  - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl
@@ -47,7 +47,7 @@ environments:
47
47
  - pypi: https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl
48
48
  - pypi: https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl
49
49
  - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl
50
- - pypi: https://files.pythonhosted.org/packages/a0/ff/be39dd5325ae00c8b36e903512b5a62cae40ea3205deb7517de753c9fcad/stjames-0.0.96-py3-none-any.whl
50
+ - pypi: https://files.pythonhosted.org/packages/5b/90/184bc0c808dc643dfd35bd6cca3c7cf0e23cc8a8982fa93fdd9d5d5e7710/stjames-0.0.99-py3-none-any.whl
51
51
  - pypi: https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl
52
52
  - pypi: https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl
53
53
  - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl
@@ -72,7 +72,7 @@ environments:
72
72
  - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl
73
73
  - pypi: https://files.pythonhosted.org/packages/6f/12/e5e0282d673bb9746bacfb6e2dba8719989d3660cdb2ea79aee9a9651afb/anyio-4.10.0-py3-none-any.whl
74
74
  - pypi: https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl
75
- - pypi: https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl
75
+ - pypi: https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl
76
76
  - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl
77
77
  - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
78
78
  - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl
@@ -87,7 +87,7 @@ environments:
87
87
  - pypi: https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl
88
88
  - pypi: https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl
89
89
  - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl
90
- - pypi: https://files.pythonhosted.org/packages/a0/ff/be39dd5325ae00c8b36e903512b5a62cae40ea3205deb7517de753c9fcad/stjames-0.0.96-py3-none-any.whl
90
+ - pypi: https://files.pythonhosted.org/packages/5b/90/184bc0c808dc643dfd35bd6cca3c7cf0e23cc8a8982fa93fdd9d5d5e7710/stjames-0.0.99-py3-none-any.whl
91
91
  - pypi: https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl
92
92
  - pypi: https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl
93
93
  - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl
@@ -128,21 +128,21 @@ environments:
128
128
  - pypi: https://files.pythonhosted.org/packages/10/bf/fa31834dc27a7f05e5290eae47c82690edc3a7b37d58f7fb35a1bdbf355b/backrefs-5.9-py313-none-any.whl
129
129
  - pypi: https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl
130
130
  - pypi: https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl
131
- - pypi: https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
131
+ - pypi: https://files.pythonhosted.org/packages/7e/95/42aa2156235cbc8fa61208aded06ef46111c4d3f0de233107b3f38631803/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
132
132
  - pypi: https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl
133
133
  - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl
134
- - pypi: https://files.pythonhosted.org/packages/1f/4a/722098d1848db4072cda71b69ede1e55730d9063bf868375264d0d302bc9/coverage-7.10.2-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
134
+ - pypi: https://files.pythonhosted.org/packages/ea/2f/6ae1db51dc34db499bfe340e89f79a63bd115fc32513a7bacdf17d33cd86/coverage-7.10.3-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
135
135
  - pypi: https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl
136
136
  - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl
137
137
  - pypi: https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl
138
138
  - pypi: https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl
139
139
  - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl
140
- - pypi: https://files.pythonhosted.org/packages/4b/dd/00256082bf552b88373fd871526737ed456e2b7a0a5c97588d169d049c16/griffe-1.10.0-py3-none-any.whl
140
+ - pypi: https://files.pythonhosted.org/packages/d7/4b/d1048082a7c9af83c0a426880a7bbebb517b3646a6e57f43315421c672b6/griffe-1.12.0-py3-none-any.whl
141
141
  - pypi: https://files.pythonhosted.org/packages/7b/03/699f059a54b7873a11bf53389236c06640bf47be590aa87a521d7c4bb044/griffe_pydantic-1.1.6-py3-none-any.whl
142
142
  - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl
143
143
  - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
144
144
  - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl
145
- - pypi: https://files.pythonhosted.org/packages/7a/cd/18f8da995b658420625f7ef13f037be53ae04ec5ad33f9b718240dcfd48c/identify-2.6.12-py2.py3-none-any.whl
145
+ - pypi: https://files.pythonhosted.org/packages/e7/ce/461b60a3ee109518c055953729bf9ed089a04db895d47e95444071dcdef2/identify-2.6.13-py2.py3-none-any.whl
146
146
  - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl
147
147
  - pypi: https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl
148
148
  - pypi: https://files.pythonhosted.org/packages/63/f8/0031ee2b906a15a33d6bfc12dd09c3dfa966b3cb5b284ecfb7549e6ac3c4/ipython-9.4.0-py3-none-any.whl
@@ -174,7 +174,7 @@ environments:
174
174
  - pypi: https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
175
175
  - pypi: https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl
176
176
  - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl
177
- - pypi: https://files.pythonhosted.org/packages/88/74/a88bf1b1efeae488a0c0b7bdf71429c313722d1fc0f377537fbe554e6180/pre_commit-4.2.0-py2.py3-none-any.whl
177
+ - pypi: https://files.pythonhosted.org/packages/5b/a5/987a405322d78a73b66e39e4a90e4ef156fd7141bf71df987e50717c321b/pre_commit-4.3.0-py2.py3-none-any.whl
178
178
  - pypi: https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl
179
179
  - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl
180
180
  - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl
@@ -190,17 +190,17 @@ environments:
190
190
  - pypi: https://files.pythonhosted.org/packages/8b/6a/c6ec8e124bc621ce0706894f877c6f57d7c9c53cbc73510ac046d40b4dc7/rdkit-2025.3.5-cp313-cp313-manylinux_2_28_x86_64.whl
191
191
  - pypi: https://files.pythonhosted.org/packages/d9/0f/90088510d4758e0ee475ae1fc7f96e7bccd0e31f24107567075482b2fe9e/rdkit_stubs-0.8-py3-none-any.whl
192
192
  - pypi: https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl
193
- - pypi: https://files.pythonhosted.org/packages/55/bf/9cb1ea5e3066779e42ade8d0cd3d3b0582a5720a814ae1586f85014656b6/ruff-0.12.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
193
+ - pypi: https://files.pythonhosted.org/packages/e8/67/0c3c9179a3ad19791ef1b8f7138aa27d4578c78700551c60d9260b2c660d/ruff-0.12.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
194
194
  - pypi: https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl
195
195
  - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl
196
196
  - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl
197
197
  - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl
198
- - pypi: https://files.pythonhosted.org/packages/a0/ff/be39dd5325ae00c8b36e903512b5a62cae40ea3205deb7517de753c9fcad/stjames-0.0.96-py3-none-any.whl
198
+ - pypi: https://files.pythonhosted.org/packages/5b/90/184bc0c808dc643dfd35bd6cca3c7cf0e23cc8a8982fa93fdd9d5d5e7710/stjames-0.0.99-py3-none-any.whl
199
199
  - pypi: https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl
200
200
  - pypi: https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl
201
201
  - pypi: https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl
202
202
  - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl
203
- - pypi: https://files.pythonhosted.org/packages/ca/ff/ded57ac5ff40a09e6e198550bab075d780941e0b0f83cbeabd087c59383a/virtualenv-20.33.1-py3-none-any.whl
203
+ - pypi: https://files.pythonhosted.org/packages/76/06/04c8e804f813cf972e3262f3f8584c232de64f0cde9f703b46cf53a45090/virtualenv-20.34.0-py3-none-any.whl
204
204
  - pypi: https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl
205
205
  - pypi: https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl
206
206
  - pypi: ./
@@ -228,21 +228,21 @@ environments:
228
228
  - pypi: https://files.pythonhosted.org/packages/10/bf/fa31834dc27a7f05e5290eae47c82690edc3a7b37d58f7fb35a1bdbf355b/backrefs-5.9-py313-none-any.whl
229
229
  - pypi: https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl
230
230
  - pypi: https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl
231
- - pypi: https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl
231
+ - pypi: https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl
232
232
  - pypi: https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl
233
233
  - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl
234
- - pypi: https://files.pythonhosted.org/packages/02/a4/8d1088cd644750c94bc305d3cf56082b4cdf7fb854a25abb23359e74892f/coverage-7.10.2-cp313-cp313-macosx_11_0_arm64.whl
234
+ - pypi: https://files.pythonhosted.org/packages/56/da/28717da68f8ba68f14b9f558aaa8f3e39ada8b9a1ae4f4977c8f98b286d5/coverage-7.10.3-cp313-cp313-macosx_11_0_arm64.whl
235
235
  - pypi: https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl
236
236
  - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl
237
237
  - pypi: https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl
238
238
  - pypi: https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl
239
239
  - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl
240
- - pypi: https://files.pythonhosted.org/packages/4b/dd/00256082bf552b88373fd871526737ed456e2b7a0a5c97588d169d049c16/griffe-1.10.0-py3-none-any.whl
240
+ - pypi: https://files.pythonhosted.org/packages/d7/4b/d1048082a7c9af83c0a426880a7bbebb517b3646a6e57f43315421c672b6/griffe-1.12.0-py3-none-any.whl
241
241
  - pypi: https://files.pythonhosted.org/packages/7b/03/699f059a54b7873a11bf53389236c06640bf47be590aa87a521d7c4bb044/griffe_pydantic-1.1.6-py3-none-any.whl
242
242
  - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl
243
243
  - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
244
244
  - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl
245
- - pypi: https://files.pythonhosted.org/packages/7a/cd/18f8da995b658420625f7ef13f037be53ae04ec5ad33f9b718240dcfd48c/identify-2.6.12-py2.py3-none-any.whl
245
+ - pypi: https://files.pythonhosted.org/packages/e7/ce/461b60a3ee109518c055953729bf9ed089a04db895d47e95444071dcdef2/identify-2.6.13-py2.py3-none-any.whl
246
246
  - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl
247
247
  - pypi: https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl
248
248
  - pypi: https://files.pythonhosted.org/packages/63/f8/0031ee2b906a15a33d6bfc12dd09c3dfa966b3cb5b284ecfb7549e6ac3c4/ipython-9.4.0-py3-none-any.whl
@@ -274,7 +274,7 @@ environments:
274
274
  - pypi: https://files.pythonhosted.org/packages/f9/0e/37d7d3eca6c879fbd9dba21268427dffda1ab00d4eb05b32923d4fbe3b12/pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl
275
275
  - pypi: https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl
276
276
  - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl
277
- - pypi: https://files.pythonhosted.org/packages/88/74/a88bf1b1efeae488a0c0b7bdf71429c313722d1fc0f377537fbe554e6180/pre_commit-4.2.0-py2.py3-none-any.whl
277
+ - pypi: https://files.pythonhosted.org/packages/5b/a5/987a405322d78a73b66e39e4a90e4ef156fd7141bf71df987e50717c321b/pre_commit-4.3.0-py2.py3-none-any.whl
278
278
  - pypi: https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl
279
279
  - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl
280
280
  - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl
@@ -290,17 +290,17 @@ environments:
290
290
  - pypi: https://files.pythonhosted.org/packages/c6/1d/4cc7d00c388dde4cb4ce6ff7c4314f0f2c0e342d5b7a7b779fc12c32cf5a/rdkit-2025.3.5-cp313-cp313-macosx_11_0_arm64.whl
291
291
  - pypi: https://files.pythonhosted.org/packages/d9/0f/90088510d4758e0ee475ae1fc7f96e7bccd0e31f24107567075482b2fe9e/rdkit_stubs-0.8-py3-none-any.whl
292
292
  - pypi: https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl
293
- - pypi: https://files.pythonhosted.org/packages/a8/c9/3e24a8472484269b6b1821794141f879c54645a111ded4b6f58f9ab0705f/ruff-0.12.7-py3-none-macosx_11_0_arm64.whl
293
+ - pypi: https://files.pythonhosted.org/packages/99/9d/e91f84dfe3866fa648c10512904991ecc326fd0b66578b324ee6ecb8f725/ruff-0.12.8-py3-none-macosx_11_0_arm64.whl
294
294
  - pypi: https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl
295
295
  - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl
296
296
  - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl
297
297
  - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl
298
- - pypi: https://files.pythonhosted.org/packages/a0/ff/be39dd5325ae00c8b36e903512b5a62cae40ea3205deb7517de753c9fcad/stjames-0.0.96-py3-none-any.whl
298
+ - pypi: https://files.pythonhosted.org/packages/5b/90/184bc0c808dc643dfd35bd6cca3c7cf0e23cc8a8982fa93fdd9d5d5e7710/stjames-0.0.99-py3-none-any.whl
299
299
  - pypi: https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl
300
300
  - pypi: https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl
301
301
  - pypi: https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl
302
302
  - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl
303
- - pypi: https://files.pythonhosted.org/packages/ca/ff/ded57ac5ff40a09e6e198550bab075d780941e0b0f83cbeabd087c59383a/virtualenv-20.33.1-py3-none-any.whl
303
+ - pypi: https://files.pythonhosted.org/packages/76/06/04c8e804f813cf972e3262f3f8584c232de64f0cde9f703b46cf53a45090/virtualenv-20.34.0-py3-none-any.whl
304
304
  - pypi: https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl
305
305
  - pypi: https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl
306
306
  - pypi: ./
@@ -417,15 +417,15 @@ packages:
417
417
  version: 3.4.0
418
418
  sha256: b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9
419
419
  requires_python: '>=3.8'
420
- - pypi: https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
420
+ - pypi: https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl
421
421
  name: charset-normalizer
422
- version: 3.4.2
423
- sha256: 6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c
422
+ version: 3.4.3
423
+ sha256: 14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe
424
424
  requires_python: '>=3.7'
425
- - pypi: https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl
425
+ - pypi: https://files.pythonhosted.org/packages/7e/95/42aa2156235cbc8fa61208aded06ef46111c4d3f0de233107b3f38631803/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
426
426
  name: charset-normalizer
427
- version: 3.4.2
428
- sha256: 926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0
427
+ version: 3.4.3
428
+ sha256: 416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f
429
429
  requires_python: '>=3.7'
430
430
  - pypi: https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl
431
431
  name: click
@@ -439,17 +439,17 @@ packages:
439
439
  version: 0.4.6
440
440
  sha256: 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
441
441
  requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*'
442
- - pypi: https://files.pythonhosted.org/packages/02/a4/8d1088cd644750c94bc305d3cf56082b4cdf7fb854a25abb23359e74892f/coverage-7.10.2-cp313-cp313-macosx_11_0_arm64.whl
442
+ - pypi: https://files.pythonhosted.org/packages/56/da/28717da68f8ba68f14b9f558aaa8f3e39ada8b9a1ae4f4977c8f98b286d5/coverage-7.10.3-cp313-cp313-macosx_11_0_arm64.whl
443
443
  name: coverage
444
- version: 7.10.2
445
- sha256: 96e5921342574a14303dfdb73de0019e1ac041c863743c8fe1aa6c2b4a257226
444
+ version: 7.10.3
445
+ sha256: 4af09c7574d09afbc1ea7da9dcea23665c01f3bc1b1feb061dac135f98ffc53a
446
446
  requires_dist:
447
447
  - tomli ; python_full_version <= '3.11' and extra == 'toml'
448
448
  requires_python: '>=3.9'
449
- - pypi: https://files.pythonhosted.org/packages/1f/4a/722098d1848db4072cda71b69ede1e55730d9063bf868375264d0d302bc9/coverage-7.10.2-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
449
+ - pypi: https://files.pythonhosted.org/packages/ea/2f/6ae1db51dc34db499bfe340e89f79a63bd115fc32513a7bacdf17d33cd86/coverage-7.10.3-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
450
450
  name: coverage
451
- version: 7.10.2
452
- sha256: 6eb586fa7d2aee8d65d5ae1dd71414020b2f447435c57ee8de8abea0a77d5074
451
+ version: 7.10.3
452
+ sha256: 913ceddb4289cbba3a310704a424e3fb7aac2bc0c3a23ea473193cb290cf17d4
453
453
  requires_dist:
454
454
  - tomli ; python_full_version <= '3.11' and extra == 'toml'
455
455
  requires_python: '>=3.9'
@@ -504,10 +504,10 @@ packages:
504
504
  - markdown ; extra == 'dev'
505
505
  - flake8 ; extra == 'dev'
506
506
  - wheel ; extra == 'dev'
507
- - pypi: https://files.pythonhosted.org/packages/4b/dd/00256082bf552b88373fd871526737ed456e2b7a0a5c97588d169d049c16/griffe-1.10.0-py3-none-any.whl
507
+ - pypi: https://files.pythonhosted.org/packages/d7/4b/d1048082a7c9af83c0a426880a7bbebb517b3646a6e57f43315421c672b6/griffe-1.12.0-py3-none-any.whl
508
508
  name: griffe
509
- version: 1.10.0
510
- sha256: a5eec6d5431cc49eb636b8a078d2409844453c1b0e556e4ba26f8c923047cd11
509
+ version: 1.12.0
510
+ sha256: 634cf7bf93ab7d12003f3704043e8e530637fc3d40c67a2a052e57d2fcde173a
511
511
  requires_dist:
512
512
  - colorama>=0.4
513
513
  requires_python: '>=3.9'
@@ -563,10 +563,10 @@ packages:
563
563
  purls: []
564
564
  size: 11857802
565
565
  timestamp: 1720853997952
566
- - pypi: https://files.pythonhosted.org/packages/7a/cd/18f8da995b658420625f7ef13f037be53ae04ec5ad33f9b718240dcfd48c/identify-2.6.12-py2.py3-none-any.whl
566
+ - pypi: https://files.pythonhosted.org/packages/e7/ce/461b60a3ee109518c055953729bf9ed089a04db895d47e95444071dcdef2/identify-2.6.13-py2.py3-none-any.whl
567
567
  name: identify
568
- version: 2.6.12
569
- sha256: ad9672d5a72e0d2ff7c5c8809b62dfa60458626352fb0eb7b55e69bdc45334a2
568
+ version: 2.6.13
569
+ sha256: 60381139b3ae39447482ecc406944190f690d4a2997f2584062089848361b33b
570
570
  requires_dist:
571
571
  - ukkonen ; extra == 'license'
572
572
  requires_python: '>=3.9'
@@ -1250,10 +1250,10 @@ packages:
1250
1250
  - pytest-benchmark ; extra == 'testing'
1251
1251
  - coverage ; extra == 'testing'
1252
1252
  requires_python: '>=3.9'
1253
- - pypi: https://files.pythonhosted.org/packages/88/74/a88bf1b1efeae488a0c0b7bdf71429c313722d1fc0f377537fbe554e6180/pre_commit-4.2.0-py2.py3-none-any.whl
1253
+ - pypi: https://files.pythonhosted.org/packages/5b/a5/987a405322d78a73b66e39e4a90e4ef156fd7141bf71df987e50717c321b/pre_commit-4.3.0-py2.py3-none-any.whl
1254
1254
  name: pre-commit
1255
- version: 4.2.0
1256
- sha256: a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd
1255
+ version: 4.3.0
1256
+ sha256: 2b0747ad7e6e967169136edffee14c16e148a778a54e4f967921aa1ebf2308d8
1257
1257
  requires_dist:
1258
1258
  - cfgv>=2.0.0
1259
1259
  - identify>=1.0.0
@@ -1494,8 +1494,8 @@ packages:
1494
1494
  requires_python: '>=3.8'
1495
1495
  - pypi: ./
1496
1496
  name: rowan-python
1497
- version: 2.0.2
1498
- sha256: 1be16d4b806a376989c925f8c8770bbd1b855b7f8a05a82094f070138d766353
1497
+ version: 2.1.0
1498
+ sha256: c8838a78320174b0b9f997ab09b77e7c3b08a6f64e39f1aaad16c22921535ee6
1499
1499
  requires_dist:
1500
1500
  - httpx
1501
1501
  - stjames>=0.0.83
@@ -1504,15 +1504,15 @@ packages:
1504
1504
  - nest-asyncio
1505
1505
  requires_python: '>=3.9'
1506
1506
  editable: true
1507
- - pypi: https://files.pythonhosted.org/packages/55/bf/9cb1ea5e3066779e42ade8d0cd3d3b0582a5720a814ae1586f85014656b6/ruff-0.12.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
1507
+ - pypi: https://files.pythonhosted.org/packages/99/9d/e91f84dfe3866fa648c10512904991ecc326fd0b66578b324ee6ecb8f725/ruff-0.12.8-py3-none-macosx_11_0_arm64.whl
1508
1508
  name: ruff
1509
- version: 0.12.7
1510
- sha256: 06bfb01e1623bf7f59ea749a841da56f8f653d641bfd046edee32ede7ff6c606
1509
+ version: 0.12.8
1510
+ sha256: 2fae54e752a3150f7ee0e09bce2e133caf10ce9d971510a9b925392dc98d2fec
1511
1511
  requires_python: '>=3.7'
1512
- - pypi: https://files.pythonhosted.org/packages/a8/c9/3e24a8472484269b6b1821794141f879c54645a111ded4b6f58f9ab0705f/ruff-0.12.7-py3-none-macosx_11_0_arm64.whl
1512
+ - pypi: https://files.pythonhosted.org/packages/e8/67/0c3c9179a3ad19791ef1b8f7138aa27d4578c78700551c60d9260b2c660d/ruff-0.12.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
1513
1513
  name: ruff
1514
- version: 0.12.7
1515
- sha256: 2e1c2a3b8626339bb6369116e7030a4cf194ea48f49b64bb505732a7fce4f4e3
1514
+ version: 0.12.8
1515
+ sha256: 560e0cd641e45591a3e42cb50ef61ce07162b9c233786663fdce2d8557d99818
1516
1516
  requires_python: '>=3.7'
1517
1517
  - pypi: https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl
1518
1518
  name: setuptools
@@ -1594,10 +1594,10 @@ packages:
1594
1594
  - pygments ; extra == 'tests'
1595
1595
  - littleutils ; extra == 'tests'
1596
1596
  - cython ; extra == 'tests'
1597
- - pypi: https://files.pythonhosted.org/packages/a0/ff/be39dd5325ae00c8b36e903512b5a62cae40ea3205deb7517de753c9fcad/stjames-0.0.96-py3-none-any.whl
1597
+ - pypi: https://files.pythonhosted.org/packages/5b/90/184bc0c808dc643dfd35bd6cca3c7cf0e23cc8a8982fa93fdd9d5d5e7710/stjames-0.0.99-py3-none-any.whl
1598
1598
  name: stjames
1599
- version: 0.0.96
1600
- sha256: dbf8ade7834fb5c883c30539bd5eb923f1924cbf53a0c1ecc924e30b94893685
1599
+ version: 0.0.99
1600
+ sha256: 28019a6dd4e4dab576aae7b5eb0b6477539ce79a8e22b02f11af2b1b91c32c4a
1601
1601
  requires_dist:
1602
1602
  - pydantic>=2.4
1603
1603
  - numpy
@@ -1673,15 +1673,16 @@ packages:
1673
1673
  - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks'
1674
1674
  - zstandard>=0.18.0 ; extra == 'zstd'
1675
1675
  requires_python: '>=3.9'
1676
- - pypi: https://files.pythonhosted.org/packages/ca/ff/ded57ac5ff40a09e6e198550bab075d780941e0b0f83cbeabd087c59383a/virtualenv-20.33.1-py3-none-any.whl
1676
+ - pypi: https://files.pythonhosted.org/packages/76/06/04c8e804f813cf972e3262f3f8584c232de64f0cde9f703b46cf53a45090/virtualenv-20.34.0-py3-none-any.whl
1677
1677
  name: virtualenv
1678
- version: 20.33.1
1679
- sha256: 07c19bc66c11acab6a5958b815cbcee30891cd1c2ccf53785a28651a0d8d8a67
1678
+ version: 20.34.0
1679
+ sha256: 341f5afa7eee943e4984a9207c025feedd768baff6753cd660c857ceb3e36026
1680
1680
  requires_dist:
1681
1681
  - distlib>=0.3.7,<1
1682
1682
  - filelock>=3.12.2,<4
1683
1683
  - importlib-metadata>=6.6 ; python_full_version < '3.8'
1684
1684
  - platformdirs>=3.9.1,<5
1685
+ - typing-extensions>=4.13.2 ; python_full_version < '3.11'
1685
1686
  - furo>=2023.7.26 ; extra == 'docs'
1686
1687
  - proselint>=0.13 ; extra == 'docs'
1687
1688
  - sphinx>=7.1.2,!=7.3 ; extra == 'docs'
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "rowan-python"
3
- version = "2.0.2"
3
+ version = "2.1.0"
4
4
  description = "Rowan Python Library"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.9"
@@ -120,7 +120,7 @@ ignore = [
120
120
  convention = "numpy"
121
121
 
122
122
  [tool.mypy]
123
- exclude = ["scripts", "benchmark", "build", "subrepos/stjames/tests", "subrepos/aimnet2calc", "feature"]
123
+ exclude = ["scripts", "benchmark", "build", "subrepos/stjames/tests", "subrepos/aimnet2calc", "feature", "examples"]
124
124
  plugins = ["pydantic.mypy"]
125
125
  warn_unused_ignores = true
126
126
 
@@ -3,6 +3,7 @@ from . import constants
3
3
 
4
4
  from .folder import *
5
5
  from .workflow import *
6
+ from .project import *
6
7
  from .protein import *
7
8
  from .user import *
8
9
  from .utils import *
@@ -0,0 +1,136 @@
1
+ from datetime import datetime
2
+ from typing import Any, Self
3
+
4
+ from pydantic import BaseModel
5
+
6
+ from .utils import api_client
7
+
8
+
9
+ class Project(BaseModel):
10
+ """
11
+ A class representing a project in the Rowan API.
12
+
13
+ :ivar uuid: The UUID of the project.
14
+ :ivar name: The name of the project.
15
+ :ivar created_at: The date and time the project was created.
16
+ """
17
+
18
+ uuid: str
19
+ name: str | None = None
20
+ created_at: datetime | None = None
21
+
22
+ def __repr__(self) -> str:
23
+ return f"<Project name='{self.name}' created_at='{self.created_at}' uuid='{self.uuid}'>"
24
+
25
+ def update(
26
+ self,
27
+ name: str | None = None,
28
+ ) -> Self:
29
+ """
30
+ Update a project.
31
+
32
+ :param name: The new name of the project.
33
+
34
+ :return: The updated project object.
35
+ """
36
+ payload = {
37
+ "name": name if name is not None else self.name,
38
+ }
39
+
40
+ with api_client() as client:
41
+ response = client.post(f"/project/{self.uuid}", json=payload)
42
+ response.raise_for_status()
43
+ updated_data = response.json()
44
+
45
+ self.name = updated_data.get("name")
46
+ return self
47
+
48
+ def delete(self) -> None:
49
+ """
50
+ Delete the project.
51
+
52
+ This is a destructive action, it will delete all the folders and
53
+ workflows that are inside this project.
54
+
55
+ :raises requests.HTTPError: if the request to the API fails.
56
+ """
57
+ with api_client() as client:
58
+ response = client.delete(f"/project/{self.uuid}")
59
+ response.raise_for_status()
60
+
61
+
62
+ def retrieve_project(uuid: str) -> Project:
63
+ """
64
+ Retrieves a project from the API by UUID. Project UUID can be found in the project's URL.
65
+
66
+ :param uuid: The UUID of the project to retrieve.
67
+ :return: A Project object representing the retrieved project.
68
+ :raises HTTPError: If the API request fails.
69
+ """
70
+ with api_client() as client:
71
+ response = client.get(f"/project/{uuid}")
72
+ response.raise_for_status()
73
+ return Project(**response.json())
74
+
75
+
76
+ def list_projects(
77
+ name_contains: str | None = None,
78
+ page: int = 0,
79
+ size: int = 10,
80
+ ) -> list[Project]:
81
+ """
82
+ Retrieve a list of projects based on the specified criteria.
83
+
84
+ :param name_contains: Substring to search for in project names.
85
+ :param page: Pagination parameter to specify the page number.
86
+ :param size: Pagination parameter to specify the number of items per page.
87
+ :return: A list of Folder objects that match the search criteria.
88
+ :raises requests.HTTPError: if the request to the API fails.
89
+ """
90
+
91
+ params: dict[str, Any] = {
92
+ "page": page,
93
+ "size": size,
94
+ }
95
+
96
+ if name_contains is not None:
97
+ params["name_contains"] = name_contains
98
+
99
+ with api_client() as client:
100
+ response = client.get("/project", params=params)
101
+ response.raise_for_status()
102
+ items = response.json()
103
+
104
+ return [Project(**item) for item in items]
105
+
106
+
107
+ def create_project(
108
+ name: str,
109
+ ) -> Project:
110
+ """
111
+ Create a new project.
112
+
113
+ :param name: The name of the project.
114
+ :return: The newly created project.
115
+ """
116
+ data = {
117
+ "name": name,
118
+ }
119
+ with api_client() as client:
120
+ response = client.post("/project", json=data)
121
+ response.raise_for_status()
122
+ project_data = response.json()
123
+ return Project(**project_data)
124
+
125
+
126
+ def default_project() -> Project:
127
+ """
128
+ Retrieves the default project from the API.
129
+
130
+ :return: A Project object representing the default project.
131
+ :raises HTTPError: If the API request fails.
132
+ """
133
+ with api_client() as client:
134
+ response = client.get("/user/me/default_project")
135
+ response.raise_for_status()
136
+ return Project(**response.json())
@@ -189,12 +189,13 @@ def upload_protein(name: str, file_path: Path) -> Protein:
189
189
  return Protein(**final_response.json())
190
190
 
191
191
 
192
- def create_protein_from_pdb_id(name: str, code: str) -> Protein:
192
+ def create_protein_from_pdb_id(name: str, code: str, project_uuid: str) -> Protein:
193
193
  """
194
194
  Creates a protein from a PDB ID.
195
195
 
196
196
  :param name: The name of the protein to create
197
197
  :param code: The PDB ID of the protein to create
198
+ :param project_uuid: The UUID of the project to create the protein in
198
199
  :return: A Protein object representing the created protein
199
200
  :raises requests.HTTPError: if the request to the API fails
200
201
  """
@@ -207,7 +208,11 @@ def create_protein_from_pdb_id(name: str, code: str) -> Protein:
207
208
  protein_data = conversion_response.json()
208
209
 
209
210
  # Step 2: Use the converted data to create the final protein object.
210
- creation_payload = {"name": name, "protein_data": protein_data, "ancestor_uuid": None}
211
+ creation_payload = {
212
+ "name": name,
213
+ "protein_data": protein_data,
214
+ "project_uuid": project_uuid,
215
+ }
211
216
  final_response = client.post("/protein", json=creation_payload)
212
217
  final_response.raise_for_status()
213
218
 
@@ -19,10 +19,10 @@ def get_api_key() -> str:
19
19
 
20
20
  :return: The API key.
21
21
  """
22
- if (api_key := os.environ.get("ROWAN_API_KEY")) is not None:
23
- return api_key
24
- elif hasattr(rowan, "api_key"):
22
+ if hasattr(rowan, "api_key") and rowan.api_key:
25
23
  return rowan.api_key
24
+ elif (api_key := os.environ.get("ROWAN_API_KEY")) is not None:
25
+ return api_key
26
26
 
27
27
  raise ValueError(
28
28
  "No API key provided. You can set your API key using 'rowan.api_key = <API-KEY>',"
@@ -52,7 +52,7 @@ class Workflow(BaseModel):
52
52
  starred: bool
53
53
  public: bool
54
54
  workflow_type: str = Field(alias="object_type")
55
- data: dict[str, Any] = Field(default={}, alias="object_data")
55
+ data: dict[str, Any] | None = Field(default=None, alias="object_data")
56
56
  email_when_complete: bool
57
57
  max_credits: int | None = None
58
58
  elapsed: float | None = None
@@ -1,190 +0,0 @@
1
- {
2
- "mode": "auto",
3
- "engine": "xtb",
4
- "messages": [],
5
- "settings": {
6
- "mode": "rapid",
7
- "tasks": [
8
- "optimize"
9
- ],
10
- "method": "gfn2_xtb",
11
- "basis_set": null,
12
- "corrections": [],
13
- "opt_settings": {
14
- "max_steps": 250,
15
- "constraints": [
16
- {
17
- "atoms": [
18
- 4,
19
- 3,
20
- 2,
21
- 1
22
- ],
23
- "value": 0,
24
- "constraint_type": "dihedral"
25
- }
26
- ],
27
- "optimize_cell": false,
28
- "energy_threshold": 0.00005,
29
- "transition_state": false,
30
- "recalc_hess_every": 0,
31
- "max_gradient_threshold": 0.005,
32
- "rms_gradient_threshold": 0.0035
33
- },
34
- "scf_settings": {
35
- "soscf": false,
36
- "max_iters": 250
37
- },
38
- "level_of_theory": "gfn2_xtb",
39
- "compute_settings": {
40
- "compute_type_used": null,
41
- "requested_compute_type": "cpu"
42
- },
43
- "solvent_settings": null,
44
- "thermochem_settings": {
45
- "temperature": 298,
46
- "concentration": 0.0408740470708,
47
- "scaling_factor": 1,
48
- "cutoff_frequency": 100
49
- }
50
- },
51
- "calculation_uuid": "54027970-5efb-42df-8125-c8984d8ca7eb",
52
- "initial_molecule": {
53
- "cell": null,
54
- "atoms": [
55
- {
56
- "position": [
57
- -1.57731622,
58
- 0.46259034,
59
- 0.02288227
60
- ],
61
- "atomic_number": 6
62
- },
63
- {
64
- "position": [
65
- -0.55246934,
66
- -0.31349805,
67
- -0.78986664
68
- ],
69
- "atomic_number": 6
70
- },
71
- {
72
- "position": [
73
- 0.65178196,
74
- -0.77563238,
75
- 0.03104792
76
- ],
77
- "atomic_number": 6
78
- },
79
- {
80
- "position": [
81
- 1.5013315,
82
- 0.37070813,
83
- 0.55769072
84
- ],
85
- "atomic_number": 6
86
- },
87
- {
88
- "position": [
89
- -1.17009891,
90
- 1.41344062,
91
- 0.37886292
92
- ],
93
- "atomic_number": 1
94
- },
95
- {
96
- "position": [
97
- -1.91277475,
98
- -0.11690438,
99
- 0.88874548
100
- ],
101
- "atomic_number": 1
102
- },
103
- {
104
- "position": [
105
- -2.45332233,
106
- 0.68757176,
107
- -0.59399069
108
- ],
109
- "atomic_number": 1
110
- },
111
- {
112
- "position": [
113
- -0.21575239,
114
- 0.30052639,
115
- -1.63326648
116
- ],
117
- "atomic_number": 1
118
- },
119
- {
120
- "position": [
121
- -1.04230601,
122
- -1.19688302,
123
- -1.21658189
124
- ],
125
- "atomic_number": 1
126
- },
127
- {
128
- "position": [
129
- 0.31558706,
130
- -1.39539838,
131
- 0.87044712
132
- ],
133
- "atomic_number": 1
134
- },
135
- {
136
- "position": [
137
- 1.28031633,
138
- -1.41330121,
139
- -0.60197473
140
- ],
141
- "atomic_number": 1
142
- },
143
- {
144
- "position": [
145
- 2.39258685,
146
- -0.02154188,
147
- 1.05803044
148
- ],
149
- "atomic_number": 1
150
- },
151
- {
152
- "position": [
153
- 0.95227634,
154
- 0.97534316,
155
- 1.28543953
156
- ],
157
- "atomic_number": 1
158
- },
159
- {
160
- "position": [
161
- 1.83015992,
162
- 1.0229789,
163
- -0.25746596
164
- ],
165
- "atomic_number": 1
166
- }
167
- ],
168
- "charge": 0,
169
- "dipole": null,
170
- "energy": null,
171
- "smiles": "CCCC",
172
- "stress": null,
173
- "elapsed": null,
174
- "gradient": null,
175
- "velocities": null,
176
- "multiplicity": 1,
177
- "homo_lumo_gap": null,
178
- "scf_completed": null,
179
- "scf_iterations": null,
180
- "mulliken_charges": null,
181
- "calculation_index": null,
182
- "vibrational_modes": null,
183
- "zero_point_energy": null,
184
- "thermal_energy_corr": null,
185
- "thermal_enthalpy_corr": null,
186
- "mulliken_spin_densities": null,
187
- "thermal_free_energy_corr": null
188
- }
189
- }
190
-
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes