-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add single point jobs to the end of torsiondrives #167
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I can't get this to work :( It works when I don't specify an evaluation engine, or when I use XTB or RDKit as the evaluation engine, but using XTB for optimization and Psi4 as evaluation fails. Confusingly, it fails with an error about not being able to find XTB. This doesn't seem to be an environment issue; the same code in the same Jupyter kernel works if I replace the evaluation QCSpec constructor call with the code from the default section.
Can you reproduce this? If not, I can try to get it into a test on CI so we have a common platform.
My code is:
from openff.bespokefit.workflows import BespokeWorkflowFactory
from openff.qcsubmit.common_structures import QCSpec
from openff.toolkit.topology import Molecule
from openff.bespokefit.schema.optimizers import ForceBalanceSchema
from openff.bespokefit.schema.smirnoff import ProperTorsionHyperparameters
from openff.bespokefit.schema.targets import TorsionProfileTargetSchema
from openff.bespokefit.executor import BespokeExecutor, BespokeWorkerConfig, wait_until_complete
factory = BespokeWorkflowFactory(
default_qc_spec=QCSpec(
method="gfn2xtb",
basis=None,
program="xtb",
spec_name="xtb",
spec_description="gfn2xtb",
),
evaluation_qc_spec = QCSpec()
)
input_molecule = Molecule.from_smiles("C(C(=O)O)N") # Glycine
workflow_schema = factory.optimization_schema_from_molecule(
molecule=input_molecule
)
with BespokeExecutor(
n_fragmenter_workers = 1,
n_optimizer_workers = 1,
n_qc_compute_workers = 2,
qc_compute_worker_config=BespokeWorkerConfig(n_cores=1)
) as executor:
# Submit our workflow to the executor
task_id = executor.submit(input_schema=workflow_schema)
# Wait until the executor is done
output = wait_until_complete(task_id)
if output.status == "success":
# Save the resulting force field to an OFFXML file
output.bespoke_force_field.to_file("output-ff.offxml")
elif output.status == "errored":
# OR the print the error message if unsuccessful
print(output.error)
And I get the following error:
[✓] fragmentation successful
[x] qc-generation failed
[{"type": "ValueError", "message": "TorsionDrive error at -150:\ngeomeTRIC run_json
error:\nTraceback (most recent call last):\n File \"/home/joshmitchell/conda/envs/bespokefi
t/lib/python3.9/site-packages/geometric/run_json.py\", line 225, in geometric_run_json\n
geometric.optimize.Optimize(coords, M, IC, engine, None, params)\n File \"/home/joshmitchel
l/conda/envs/bespokefit/lib/python3.9/site-packages/geometric/optimize.py\", line 1331, in
Optimize\n return optimizer.optimizeGeometry()\n File \"/home/joshmitchell/conda/envs/be
spokefit/lib/python3.9/site-packages/geometric/optimize.py\", line 1293, in
optimizeGeometry\n self.calcEnergyForce()\n File \"/home/joshmitchell/conda/envs/bespoke
fit/lib/python3.9/site-packages/geometric/optimize.py\", line 1002, in calcEnergyForce\n
spcalc = self.engine.calc(self.X, self.dirname)\n File \"/home/joshmitchell/conda/envs/besp
okefit/lib/python3.9/site-packages/geometric/engine.py\", line 873, in calc\n return
self.calc_new(coords, dirname)\n File \"/home/joshmitchell/conda/envs/bespokefit/lib/python
3.9/site-packages/geometric/engine.py\", line 865, in calc_new\n raise
QCEngineAPIEngineError(\"QCEngineAPI computation did not execute correctly. Message: \" +
ret[\"error\"][\"error_message\"])\ngeometric.errors.QCEngineAPIEngineError: QCEngineAPI
computation did not execute correctly. Message: QCEngine Resource Error: Program xtb is
registered with QCEngine, but cannot be found.\n", "traceback": "Traceback (most recent call
last):\n File \"/home/joshmitchell/conda/envs/bespokefit/lib/python3.9/site-packages/celery
/app/trace.py\", line 451, in trace_task\n R = retval = fun(*args, **kwargs)\n File \"/h
ome/joshmitchell/conda/envs/bespokefit/lib/python3.9/site-packages/celery/app/trace.py\",
line 734, in __protected_call__\n return self.run(*args, **kwargs)\n File \"/home/joshmi
tchell/Documents/openff/bespokefit/openff/bespokefit/executor/services/qcgenerator/worker.py
\", line 182, in compute_torsion_drive\n return_value = qcengine.compute_procedure(\n
File \"/home/joshmitchell/conda/envs/bespokefit/lib/python3.9/site-packages/qcengine/compute
.py\", line 149, in compute_procedure\n return handle_output_metadata(output_data,
metadata, raise_error=raise_error, return_dict=return_dict)\n File
\"/home/joshmitchell/conda/envs/bespokefit/lib/python3.9/site-packages/qcengine/util.py\",
line 177, in handle_output_metadata\n raise
ValueError(output_fusion[\"error\"][\"error_message\"])\nValueError: TorsionDrive error at
-150:\ngeomeTRIC run_json error:\nTraceback (most recent call last):\n File \"/home/joshmit
chell/conda/envs/bespokefit/lib/python3.9/site-packages/geometric/run_json.py\", line 225,
in geometric_run_json\n geometric.optimize.Optimize(coords, M, IC, engine, None,
params)\n File \"/home/joshmitchell/conda/envs/bespokefit/lib/python3.9/site-packages/geome
tric/optimize.py\", line 1331, in Optimize\n return optimizer.optimizeGeometry()\n File
\"/home/joshmitchell/conda/envs/bespokefit/lib/python3.9/site-packages/geometric/optimize.py
\", line 1293, in optimizeGeometry\n self.calcEnergyForce()\n File \"/home/joshmitchell/
conda/envs/bespokefit/lib/python3.9/site-packages/geometric/optimize.py\", line 1002, in
calcEnergyForce\n spcalc = self.engine.calc(self.X, self.dirname)\n File \"/home/joshmit
chell/conda/envs/bespokefit/lib/python3.9/site-packages/geometric/engine.py\", line 873, in
calc\n return self.calc_new(coords, dirname)\n File \"/home/joshmitchell/conda/envs/besp
okefit/lib/python3.9/site-packages/geometric/engine.py\", line 865, in calc_new\n raise
QCEngineAPIEngineError(\"QCEngineAPI computation did not execute correctly. Message: \" +
ret[\"error\"][\"error_message\"])\ngeometric.errors.QCEngineAPIEngineError: QCEngineAPI
computation did not execute correctly. Message: QCEngine Resource Error: Program xtb is
registered with QCEngine, but cannot be found.\n\n"}]
Here's my conda environment
# packages in environment at /home/joshmitchell/conda/envs/bespokefit: # # Name Version Build Channel _libgcc_mutex 0.1 conda_forge conda-forge _openmp_mutex 4.5 1_gnu conda-forge alabaster 0.7.12 py_0 conda-forge ambit 0.5.1 hbe8a562_1 psi4 amqp 5.1.0 pyhd8ed1ab_0 conda-forge anyio 3.5.0 py39hf3d152e_0 conda-forge argcomplete 2.0.0 pyhd8ed1ab_0 conda-forge argon2-cffi 21.3.0 pyhd8ed1ab_0 conda-forge argon2-cffi-bindings 21.2.0 py39h3811e60_1 conda-forge arrow-cpp 2.0.0 py39h5894ca3_15_cpu conda-forge asgiref 3.5.0 pyhd8ed1ab_0 conda-forge asttokens 2.0.5 pyhd8ed1ab_0 conda-forge astunparse 1.6.3 pyhd8ed1ab_0 conda-forge attrs 21.4.0 pyhd8ed1ab_0 conda-forge autodoc-pydantic 1.6.1 pyhd8ed1ab_0 conda-forge aws-c-common 0.4.59 h36c2ea0_1 conda-forge aws-c-event-stream 0.1.6 had2084c_6 conda-forge aws-checksums 0.1.10 h4e93380_0 conda-forge aws-sdk-cpp 1.8.70 h57dc084_1 conda-forge babel 2.9.1 pyh44b312d_0 conda-forge backcall 0.2.0 pyh9f0ad1d_0 conda-forge backports 1.0 py_2 conda-forge backports.functools_lru_cache 1.6.4 pyhd8ed1ab_0 conda-forge basis_set_exchange 0.9 pyhd8ed1ab_0 conda-forge beautifulsoup4 4.10.0 pypi_0 pypi billiard 3.6.4.0 py39h3811e60_1 conda-forge blas 1.0 mkl conda-forge bleach 4.1.0 pyhd8ed1ab_0 conda-forge blosc 1.21.0 h9c3ff4c_0 conda-forge boost 1.74.0 py39h5472131_5 conda-forge boost-cpp 1.74.0 hc6e9bd1_3 conda-forge brotli 1.0.9 h7f98852_6 conda-forge brotli-bin 1.0.9 h7f98852_6 conda-forge brotlipy 0.7.0 py39h3811e60_1003 conda-forge bzip2 1.0.8 h7f98852_4 conda-forge c-ares 1.18.1 h7f98852_0 conda-forge ca-certificates 2022.5.18 ha878542_0 conda-forge cached-property 1.5.2 hd8ed1ab_1 conda-forge cached_property 1.5.2 pyha770c72_1 conda-forge cachetools 5.0.0 pyhd8ed1ab_0 conda-forge cairo 1.16.0 h6cf1ce9_1008 conda-forge celery 5.2.3 pyhd8ed1ab_0 conda-forge certifi 2022.5.18 py39hf3d152e_0 conda-forge cffi 1.15.0 py39h4bc2ebd_0 conda-forge charset-normalizer 2.0.12 pyhd8ed1ab_0 conda-forge chemper 1.0.0 pyh9f0ad1d_0 conda-forge chemps2 1.8.10 hbe8a562_0 psi4 click 8.0.4 py39hf3d152e_0 conda-forge click-didyoumean 0.3.0 pyhd8ed1ab_0 conda-forge click-option-group 0.5.3 pyhd8ed1ab_1 conda-forge click-plugins 1.1.1 py_0 conda-forge click-repl 0.2.0 pyhd8ed1ab_0 conda-forge codecov 2.1.11 pyhd3deb0d_0 conda-forge colorama 0.4.4 pyh9f0ad1d_0 conda-forge commonmark 0.9.1 py_0 conda-forge coverage 6.3.2 py39hb9d737c_1 conda-forge cryptography 36.0.0 py39h9ce1e76_0 css-html-js-minify 2.5.5 pypi_0 pypi cudatoolkit 11.6.0 habf752d_10 conda-forge cycler 0.11.0 pyhd8ed1ab_0 conda-forge dataclasses 0.8 pyhc8e2a94_3 conda-forge debugpy 1.5.1 py39he80948d_0 conda-forge decorator 5.1.1 pyhd8ed1ab_0 conda-forge defusedxml 0.7.1 pyhd8ed1ab_0 conda-forge deprecated 1.2.13 pyh6c4a22f_0 conda-forge dftd3 3.2.1 h84218bc_2 psi4 dkh 1.2 h173d85e_2 psi4 docutils 0.17.1 py39hf3d152e_1 conda-forge entrypoints 0.4 pyhd8ed1ab_0 conda-forge executing 0.8.3 pyhd8ed1ab_0 conda-forge fastapi 0.75.0 pyhd8ed1ab_0 conda-forge fftw 3.3.9 h27cfd23_1 flit-core 3.7.1 pyhd8ed1ab_0 conda-forge fontconfig 2.13.96 ha180cfb_0 conda-forge fonttools 4.29.1 py39h3811e60_0 conda-forge forcebalance 1.9.2 py39h5472131_1 conda-forge freetype 2.10.4 h0708190_1 conda-forge future 0.18.2 py39hf3d152e_4 conda-forge gau2grid 2.0.7 hd18ef5c_0 psi4 gcp 2.0.2 he991be0_2 psi4 gdma 2.2.6 h0e1e685_6 psi4 geometric 0.9.7.2 py_0 conda-forge gettext 0.19.8.1 h73d1719_1008 conda-forge gflags 2.2.2 he1b5a44_1004 conda-forge glog 0.4.0 h49b9bf7_3 conda-forge greenlet 1.1.2 py39he80948d_1 conda-forge grpc-cpp 1.34.1 h2157cd5_4 h11 0.12.0 pyhd8ed1ab_0 conda-forge h2 4.1.0 py39hf3d152e_0 conda-forge h5py 3.1.0 nompi_py39h25020de_100 conda-forge hdf5 1.10.6 nompi_h3c11f04_101 conda-forge hpack 4.0.0 pyh9f0ad1d_0 conda-forge httpcore 0.14.7 pyhd8ed1ab_0 conda-forge httpx 0.22.0 py39hf3d152e_0 conda-forge hyperframe 6.0.1 pyhd8ed1ab_0 conda-forge icu 68.2 h9c3ff4c_0 conda-forge idna 3.3 pyhd8ed1ab_0 conda-forge imagesize 1.3.0 pyhd8ed1ab_0 conda-forge importlib-metadata 4.11.2 py39hf3d152e_0 conda-forge importlib_metadata 4.11.2 hd8ed1ab_0 conda-forge importlib_resources 5.4.0 pyhd8ed1ab_0 conda-forge iniconfig 1.1.1 pyh9f0ad1d_0 conda-forge intel-openmp 2021.4.0 h06a4308_3561 ipykernel 6.9.1 py39hef51801_0 conda-forge ipython 8.1.1 py39hf3d152e_0 conda-forge ipython_genutils 0.2.0 py_1 conda-forge ipywidgets 7.6.5 pyhd8ed1ab_0 conda-forge jedi 0.18.1 py39hf3d152e_0 conda-forge jinja2 3.0.3 pyhd8ed1ab_0 conda-forge jpeg 9e h7f98852_0 conda-forge jsonschema 4.4.0 pyhd8ed1ab_0 conda-forge jupyter_client 7.1.2 pyhd8ed1ab_0 conda-forge jupyter_core 4.9.2 py39hf3d152e_0 conda-forge jupyterlab_pygments 0.1.2 pyh9f0ad1d_0 conda-forge jupyterlab_widgets 1.0.2 pyhd8ed1ab_0 conda-forge keyutils 1.6.1 h166bdaf_0 conda-forge kiwisolver 1.3.2 py39h1a9c180_1 conda-forge kombu 5.2.4 py39hf3d152e_0 conda-forge krb5 1.19.2 h08a2579_4 conda-forge latexcodec 2.0.1 pyh9f0ad1d_0 conda-forge lcms2 2.12 hddcbb42_0 conda-forge ld_impl_linux-64 2.36.1 hea4e1c9_2 conda-forge libblas 3.9.0 12_linux64_mkl conda-forge libbrotlicommon 1.0.9 h7f98852_6 conda-forge libbrotlidec 1.0.9 h7f98852_6 conda-forge libbrotlienc 1.0.9 h7f98852_6 conda-forge libcblas 3.9.0 12_linux64_mkl conda-forge libcurl 7.81.0 h494985f_0 conda-forge libedit 3.1.20191231 he28a2e2_2 conda-forge libev 4.33 h516909a_1 conda-forge libevent 2.1.10 h28343ad_4 conda-forge libffi 3.4.2 h7f98852_5 conda-forge libgcc-ng 11.2.0 h1d223b6_13 conda-forge libgfortran-ng 7.5.0 h14aa051_20 conda-forge libgfortran4 7.5.0 h14aa051_20 conda-forge libglib 2.70.2 h174f98d_4 conda-forge libgomp 11.2.0 h1d223b6_13 conda-forge libiconv 1.16 h516909a_0 conda-forge libint2 2.6.0 hc9558a2_9 psi4 liblapack 3.9.0 12_linux64_mkl conda-forge libnghttp2 1.47.0 he49606f_0 conda-forge libnsl 2.0.0 h7f98852_0 conda-forge libpng 1.6.37 h21135ba_2 conda-forge libprotobuf 3.14.0 h780b84a_0 conda-forge libsass 0.21.0 pypi_0 pypi libsodium 1.0.18 h36c2ea0_1 conda-forge libssh2 1.10.0 ha35d2d1_2 conda-forge libstdcxx-ng 11.2.0 he4da1e4_13 conda-forge libthrift 0.13.0 hfb8234f_6 libtiff 4.2.0 hbd63e13_2 conda-forge libutf8proc 2.7.0 h7f98852_0 conda-forge libuuid 2.32.1 h7f98852_1000 conda-forge libwebp-base 1.2.2 h7f98852_1 conda-forge libxc 5.1.5 h84b9e52_1 psi4 libxcb 1.13 h7f98852_1004 conda-forge libxml2 2.9.12 h72842e0_0 conda-forge libxslt 1.1.33 h15afd5d_2 conda-forge libzlib 1.2.11 h36c2ea0_1013 conda-forge lxml 4.8.0 py39h107f48f_0 conda-forge lz4-c 1.9.3 h9c3ff4c_1 conda-forge lzo 2.10 h516909a_1000 conda-forge markdown-it-py 2.0.1 pyhd8ed1ab_0 conda-forge markupsafe 2.1.0 py39hb9d737c_1 conda-forge matplotlib-base 3.5.1 py39h2fa2bec_0 conda-forge matplotlib-inline 0.1.3 pyhd8ed1ab_0 conda-forge mdit-py-plugins 0.3.0 pyhd8ed1ab_0 conda-forge mdtraj 1.9.7 py39h138c130_1 conda-forge mdurl 0.1.0 pyhd8ed1ab_0 conda-forge mistune 0.8.4 py39h3811e60_1005 conda-forge mkl 2021.4.0 h06a4308_640 mkl-service 2.4.0 py39h7e14d7c_0 conda-forge mock 4.0.3 py39hf3d152e_2 conda-forge msgpack-python 1.0.3 py39h1a9c180_0 conda-forge munkres 1.1.4 pyh9f0ad1d_0 conda-forge myst-parser 0.17.0 pyhd8ed1ab_0 conda-forge nbclient 0.5.12 pyhd8ed1ab_0 conda-forge nbconvert 6.4.2 py39hf3d152e_0 conda-forge nbformat 5.1.3 pyhd8ed1ab_0 conda-forge ncurses 6.3 h9c3ff4c_0 conda-forge nest-asyncio 1.5.4 pyhd8ed1ab_0 conda-forge networkx 2.7.1 pyhd8ed1ab_0 conda-forge nglview 3.0.3 pyh8a188c0_0 conda-forge notebook 6.4.8 pyha770c72_0 conda-forge numexpr 2.7.3 py39hde0f152_1 conda-forge numpy 1.22.2 py39h91f2184_0 conda-forge ocl-icd 2.3.1 h7f98852_0 conda-forge ocl-icd-system 1.0.0 1 conda-forge olefile 0.46 pyh9f0ad1d_1 conda-forge openeye-toolkits 2021.2.0 py39_0 openeye openff-bespokefit 0.1.0+1.gf93a353.dirty dev_0 openff-forcefields 2.0.0 pyh6c4a22f_0 conda-forge openff-fragmenter-base 0.1.2 pyhd8ed1ab_0 conda-forge openff-qcsubmit 0.3.0 pyhd8ed1ab_0 conda-forge openff-sphinx-theme 0.0.32+139.ge7f8151 pypi_0 pypi openff-toolkit-base 0.10.3 pyhd8ed1ab_0 conda-forge openff-utilities 0.1.3 pyh6c4a22f_0 conda-forge openjpeg 2.4.0 hb52868f_1 conda-forge openmm 7.6.0 py39h71eca04_0 conda-forge openssl 3.0.3 h166bdaf_0 conda-forge orc 1.6.6 h7950760_1 conda-forge packaging 21.3 pyhd8ed1ab_0 conda-forge pandas 1.4.1 py39hde0f152_0 conda-forge pandoc 2.17.1.1 ha770c72_0 conda-forge pandocfilters 1.5.0 pyhd8ed1ab_0 conda-forge parquet-cpp 1.5.1 1 conda-forge parso 0.8.3 pyhd8ed1ab_0 conda-forge pcmsolver 1.2.1.1 py39h6d17ec8_2 psi4 pcre 8.45 h9c3ff4c_0 conda-forge pexpect 4.8.0 pyh9f0ad1d_2 conda-forge pickleshare 0.7.5 py39hde42818_1002 conda-forge pillow 8.2.0 py39hf95b381_1 conda-forge pint 0.17 pyhd8ed1ab_0 psi4 pip 22.0.4 pyhd8ed1ab_0 conda-forge pixman 0.40.0 h36c2ea0_0 conda-forge plotly 5.6.0 pyhd8ed1ab_0 conda-forge pluggy 1.0.0 py39hf3d152e_2 conda-forge prometheus_client 0.13.1 pyhd8ed1ab_0 conda-forge prompt-toolkit 3.0.27 pyha770c72_0 conda-forge prompt_toolkit 3.0.27 hd8ed1ab_0 conda-forge psi4 1.5+e9f4d6d py39hbf93d9d_0 psi4 psutil 5.9.0 py39h3811e60_0 conda-forge pthread-stubs 0.4 h36c2ea0_1001 conda-forge ptyprocess 0.7.0 pyhd3deb0d_0 conda-forge pure_eval 0.2.2 pyhd8ed1ab_0 conda-forge py 1.11.0 pyh6c4a22f_0 conda-forge py-cpuinfo 8.0.0 pyhd8ed1ab_0 conda-forge pyarrow 2.0.0 py39h3ebc44c_15_cpu conda-forge pybtex 0.24.0 py39hf3d152e_1 conda-forge pybtex-docutils 1.0.1 py39hf3d152e_1 conda-forge pycairo 1.21.0 py39h0934665_0 conda-forge pycparser 2.21 pyhd8ed1ab_0 conda-forge pydantic 1.9.0 py39h3811e60_0 conda-forge pygments 2.11.2 pyhd8ed1ab_0 conda-forge pymbar 3.0.6 py39hce5d2b2_0 conda-forge pyopenssl 22.0.0 pyhd8ed1ab_0 conda-forge pyparsing 3.0.7 pyhd8ed1ab_0 conda-forge pyrsistent 0.18.1 py39h3811e60_0 conda-forge pysocks 1.7.1 py39hf3d152e_4 conda-forge pytables 3.6.1 py39hf6dc253_3 conda-forge pytest 7.0.1 py39hf3d152e_0 conda-forge pytest-asyncio 0.18.2 pyhd8ed1ab_0 conda-forge pytest-celery 0.0.0a1 pyh9f0ad1d_1 conda-forge pytest-cov 3.0.0 pyhd8ed1ab_0 conda-forge python 3.9.10 hc74c709_2_cpython conda-forge python-dateutil 2.8.2 pyhd8ed1ab_0 conda-forge python-slugify 6.1.1 pypi_0 pypi python_abi 3.9 2_cp39 conda-forge pytz 2021.3 pyhd8ed1ab_0 conda-forge pyyaml 6.0 py39h3811e60_3 conda-forge pyzmq 22.3.0 py39h37b5a0c_1 conda-forge qcelemental 0.24.0 pyhd8ed1ab_0 psi4 qcengine 0.22.0 pyhd8ed1ab_0 psi4 qcportal 0.15.8 pyhd8ed1ab_0 conda-forge rdkit 2021.09.5 py39h89e00b9_0 conda-forge re2 2020.11.01 h58526e2_0 conda-forge readline 8.1 h46c0cb4_0 conda-forge redis-py 4.1.4 pyhd8ed1ab_1 conda-forge redis-server 6.2.6 h28343ad_0 conda-forge regex 2022.3.2 py39hb9d737c_0 conda-forge reportlab 3.5.68 py39he59360d_1 conda-forge requests 2.27.1 pyhd8ed1ab_0 conda-forge requests-mock 1.9.3 pyhd8ed1ab_0 conda-forge rfc3986 1.5.0 pyhd8ed1ab_0 conda-forge rich 11.2.0 pyhd8ed1ab_0 conda-forge scipy 1.5.3 py39hf3f25e7_0 conda-forge send2trash 1.8.0 pyhd8ed1ab_0 conda-forge setuptools 59.6.0 py39hf3d152e_0 conda-forge simint 0.7 h642920c_1 psi4 six 1.16.0 pyh6c4a22f_0 conda-forge smirnoff99frosst 1.1.0 pyh44b312d_0 conda-forge snappy 1.1.8 he1b5a44_3 conda-forge sniffio 1.2.0 py39hf3d152e_2 conda-forge snowballstemmer 2.2.0 pyhd8ed1ab_0 conda-forge soupsieve 2.3.1 pypi_0 pypi sphinx 4.4.0 pyh6c4a22f_1 conda-forge sphinx-click 3.1.0 pyhd8ed1ab_0 conda-forge sphinx-notfound-page 0.8 pyhd8ed1ab_0 conda-forge sphinxcontrib-applehelp 1.0.2 py_0 conda-forge sphinxcontrib-bibtex 2.4.1 pyhd8ed1ab_0 conda-forge sphinxcontrib-devhelp 1.0.2 py_0 conda-forge sphinxcontrib-htmlhelp 2.0.0 pyhd8ed1ab_0 conda-forge sphinxcontrib-jsmath 1.0.1 py_0 conda-forge sphinxcontrib-qthelp 1.0.3 py_0 conda-forge sphinxcontrib-serializinghtml 1.1.5 pyhd8ed1ab_1 conda-forge sqlalchemy 1.4.32 py39hb9d737c_0 conda-forge sqlite 3.37.0 h9cd32fc_0 conda-forge stack_data 0.2.0 pyhd8ed1ab_0 conda-forge starlette 0.17.1 pyhd8ed1ab_0 conda-forge tenacity 8.0.1 pyhd8ed1ab_0 conda-forge terminado 0.13.3 py39hf3d152e_0 conda-forge testpath 0.6.0 pyhd8ed1ab_0 conda-forge text-unidecode 1.3 pypi_0 pypi tk 8.6.12 h27826a3_0 conda-forge toml 0.10.2 pyhd8ed1ab_0 conda-forge tomli 2.0.1 pyhd8ed1ab_0 conda-forge tornado 6.1 py39h3811e60_2 conda-forge torsiondrive 1.1.0 pyhd8ed1ab_0 conda-forge tqdm 4.63.0 pyhd8ed1ab_0 conda-forge traitlets 5.1.1 pyhd8ed1ab_0 conda-forge typing-extensions 4.1.1 hd8ed1ab_0 conda-forge typing_extensions 4.1.1 pyha770c72_0 conda-forge tzdata 2021e he74cb21_0 conda-forge unicodedata2 14.0.0 py39h3811e60_0 conda-forge unidecode 1.3.3 pypi_0 pypi urllib3 1.26.8 pyhd8ed1ab_1 conda-forge uvicorn 0.17.5 py39hf3d152e_0 conda-forge vine 5.0.0 pyhd8ed1ab_1 conda-forge wcwidth 0.2.5 pyh9f0ad1d_2 conda-forge webencodings 0.5.1 py_1 conda-forge wheel 0.37.1 pyhd8ed1ab_0 conda-forge widgetsnbextension 3.5.2 py39hf3d152e_1 conda-forge wrapt 1.13.3 py39h3811e60_1 conda-forge xmltodict 0.12.0 py_0 conda-forge xorg-kbproto 1.0.7 h7f98852_1002 conda-forge xorg-libice 1.0.10 h7f98852_0 conda-forge xorg-libsm 1.2.3 hd9c2040_1000 conda-forge xorg-libx11 1.7.2 h7f98852_0 conda-forge xorg-libxau 1.0.9 h7f98852_0 conda-forge xorg-libxdmcp 1.1.3 h7f98852_0 conda-forge xorg-libxext 1.3.4 h7f98852_1 conda-forge xorg-libxrender 0.9.10 h7f98852_1003 conda-forge xorg-renderproto 0.11.1 h7f98852_1002 conda-forge xorg-xextproto 7.3.0 h7f98852_1002 conda-forge xorg-xproto 7.0.31 h7f98852_1007 conda-forge xtb 6.3.3 h323e27b_1 conda-forge xtb-python 20.2 py39hbd71b63_2 conda-forge xz 5.2.5 h516909a_1 conda-forge yaml 0.2.5 h7f98852_2 conda-forge zeromq 4.3.4 h9c3ff4c_1 conda-forge zipp 3.7.0 pyhd8ed1ab_1 conda-forge zlib 1.2.11 h36c2ea0_1013 conda-forge zstd 1.4.9 ha95c52a_0 conda-forge
default_qc_spec: QCSpec = Field( | ||
default=QCSpec(), | ||
description="The default specification (e.g. method, basis and program) to use when " | ||
"performing any new QC calculations", | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this is a superior API, but it is also a breaking change. We should split this change out into its own PR so that it can be merged as part of a later major version bump, or alongside a deprecation warning.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for taking a pass at this @jthorton - I think this will be a really helpful feature!
It may be good to rephrase this as 'you can optionally set a different optimization spec' rather than 'you can optionally set a different evaluation spec' as it's probably this 'optimization spec' that users will optionally want to swap out?
You might also want to consider add the single point step as a separate celery task chained to the TD task (same with opt -> sp or hess -> sp) as an easier way to handle the caching. I can take a stab at this if you'd like!
sp_specification: Optional[QCGenerationTask] = Field( | ||
None, | ||
description="An extra optional specification used to compute the reference energy surface on the optimised geometries.", | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It might be good to rejigger the classes here to be a bit more flexible as our initial design was maybe a bit rigid 😅
You could consider creating a QCModel
class as kind of a lightweight alternative to the QCSpec
class (or upstream this into QCSubmit
) that defines both the program and model to use, but without extra unused fields such as names, descriptions, or QCF specific fields like storing wavefunctions:
class QCModel(Model):
"""Defines a specification for how a QC calculation should be performed, including
the level of theory to perform the calculation at and the program to use to perform the
calculation itself
"""
program: str = Field(..., description="The program to use to evaluate the method and basis.")
and then replace the QCGenerationTask
with a more appropriately named BaseQCTaskSpec
class that has a calculation spec as a field rather than a separate model and program field:
class BaseQCTaskSpec(BaseModel, abc.ABC):
"""A base for classes that describe a particular task to perform that will require
running one or more QC calculations to yield a property (e.g. energy, hessian, ...)
of interest
""""
type: Literal["base-task"] = "base-task"
calculation_model: QCModel = Field(
...,
description="The model that defines at what level of theory any requisite QC "
"calculations should be performed."
)
This could also be named something like evaluation_model
, single_point_model
, energy_model
or something more creative that I can't think of...
In this way, you could then here instead introduce an optimization_model
field and move this up next to the optimization_spec
field. The calculation_model
field then corresponds to the spec that the final energy, hessian, and gradients are evaluated used, as well as the spec used to perform the optimization if this isn't set. It would probably be good to also add this to the HessianTaskSpec
as well for symmetry as we'll probably want the ability to do similar when computing hessians and optimised geometry ddE's!
sp_specification: Optional[QCGenerationTask] = Field( | |
None, | |
description="An extra optional specification used to compute the reference energy surface on the optimised geometries.", | |
) | |
optimization_model: Optional[QCGenerationTask] = Field( | |
None, | |
description="The (optional) QC model to used when performing the geometry optimization, prior to " | |
"evaluating properties of the final geometry using the ``calculation_model``. This is useful in cases " | |
"whereby you would like to optimize the geometry using a cheaper, less accurate, level of theory, but " | |
"evaluate the property of interest such as the energy or hessian at a more expensive but more accurate " | |
"level of theory. If ``None``, the ``calculation_model`` will be used.". | |
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the thoughtful comments on this and I totally agree with the use of a new simple QCModel
, I have wanted this in qcsubmit for a while now and it would be very useful as would still get the program, method and basis validation, if we create the separate model here we would lose that without repeating the code though.
I agree that reworking the naming does make more sense maybe having a calculation_specification
and a optimization_specification
would be best? I also like the proposed structure of the optimization_model
.
For hessian and geometry optimisations this would have a different meaning in that the geometry is pre-optimised with the optimization_specification
and then fully optimised with the calculation_specification
and then an optional hessian calculation is performed. A hessian calculation not at a stationary point on that particular PES would not help our fitting otherwise.
default_qc_spec: Optional[Tuple[str, str, str]], | ||
evaluation_qc_spec: Optional[Tuple[str, str, str]], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It might be good to swap this to
default_qc_spec: Optional[Tuple[str, str, str]], | |
evaluation_qc_spec: Optional[Tuple[str, str, str]], | |
default_qc_spec: Optional[Tuple[str, str, str]], | |
optimization_qc_spec: Optional[Tuple[str, str, str]], |
as the optimization spec is likely the optional thing users will want to tweak, rather than the final level of theory?
@Yoshanuikabundi thanks for testing this out are you able to get it to work using the command line in testing I was able to get the following command to work @SimonBoothroyd thanks for adding the celery chain method as a better cache I can confirm this works locally in testing using mixes of xtb and torchani with and without the evaluation spec! |
@jthorton That doesn't work for me either. I get an error >>> from openff.toolkit.utils import OpenEyeToolkitWrapper
Warning: Unable to load toolkit 'AmberTools'.
>>> from openff.toolkit.topology import Molecule
>>> mol = Molecule.from_smiles('CC(=O)NC1=CC=C(C=C1)O')
>>> mol.assign_fractional_bond_orders(toolkit_registry=OpenEyeToolkitWrapper())
Warning: Cannot perform Hydrogen sampling with GPU-Omega: GPU-Omega disabled.
>>> [bond.fractional_bond_order for bond in mol.bonds]
[0.9328407302962394, 1.7896946473206128, 1.0503395974114669, 1.0077414418332689, 1.3542463038526484, 1.3665352067357714, 1.4201200930306779, 1.3590751548759754, 1.3497841291201231, 1.4360197031144404, 1.0592737737496132, 0.963580406289029, 0.9686460657691334, 0.9736420716448231, 0.8935818125657808, 0.949355386022238, 0.9478468145627605, 0.9455632868669739, 0.9326707086716735, 0.9276628547590544] It seems like an environment issue, but I don't know what it could be. I also get the same error when I add AmberTools to the environment. I'll try it again when I get access to my old machine back, hopefully next week. Sorry that's not very useful! Note: I had to run this command with ANSI colors switched off in the terminal to see it all, as part of the reported SMARTS code is an ANSI code. Full error$ openff-bespoke executor run --smiles 'CC(=O)NC1=CC=C(C=C1)O' --workflow default --output acetaminophen_ani1.json --directory bespoke-executor --output-force-field "acetaminophen_ani1.offxml" --n-qc-compute-workers 2 --qc-compute-n-cores 1 --default-qc-spec xtb gfn2xtb none --evaluation-qc-spec torchani ani1ccx none My environment is below. Note that it does include OpenEye. This environment was created directly from the test.yaml conda env file on this branch: Conda env# packages in environment at /home/joshmitchell/Documents/openff/bespokefit/.soap/test: # # Name Version Build Channel _libgcc_mutex 0.1 conda_forge conda-forge _openmp_mutex 4.5 2_gnu conda-forge amqp 5.1.1 pyhd8ed1ab_0 conda-forge anyio 3.6.1 py39hf3d152e_0 conda-forge argcomplete 2.0.0 pyhd8ed1ab_0 conda-forge argon2-cffi 21.3.0 pyhd8ed1ab_0 conda-forge argon2-cffi-bindings 21.2.0 py39hb9d737c_2 conda-forge arrow-cpp 2.0.0 py39h5894ca3_15_cpu conda-forge asgiref 3.5.2 pyhd8ed1ab_0 conda-forge asttokens 2.0.5 pyhd8ed1ab_0 conda-forge astunparse 1.6.3 pyhd8ed1ab_0 conda-forge async-timeout 4.0.2 pyhd8ed1ab_0 conda-forge attrs 21.4.0 pyhd8ed1ab_0 conda-forge aws-c-common 0.4.59 h36c2ea0_1 conda-forge aws-c-event-stream 0.1.6 had2084c_6 conda-forge aws-checksums 0.1.10 h4e93380_0 conda-forge aws-sdk-cpp 1.8.70 h57dc084_1 conda-forge backcall 0.2.0 pyh9f0ad1d_0 conda-forge backports 1.0 py_2 conda-forge backports.functools_lru_cache 1.6.4 pyhd8ed1ab_0 conda-forge basis_set_exchange 0.9 pyhd8ed1ab_0 conda-forge beautifulsoup4 4.11.1 pyha770c72_0 conda-forge billiard 3.6.4.0 py39hb9d737c_2 conda-forge bleach 5.0.0 pyhd8ed1ab_0 conda-forge blosc 1.21.1 hd32f23e_0 conda-forge boost 1.74.0 py39h5472131_5 conda-forge boost-cpp 1.74.0 hc6e9bd1_3 conda-forge brotli 1.0.9 h166bdaf_7 conda-forge brotli-bin 1.0.9 h166bdaf_7 conda-forge brotlipy 0.7.0 py39hb9d737c_1004 conda-forge bzip2 1.0.8 h7f98852_4 conda-forge c-ares 1.18.1 h7f98852_0 conda-forge ca-certificates 2022.5.18.1 ha878542_0 conda-forge cached-property 1.5.2 hd8ed1ab_1 conda-forge cached_property 1.5.2 pyha770c72_1 conda-forge cachetools 5.0.0 pyhd8ed1ab_0 conda-forge cairo 1.16.0 h6cf1ce9_1008 conda-forge celery 5.2.7 pyhd8ed1ab_0 conda-forge certifi 2022.5.18.1 py39hf3d152e_0 conda-forge cffi 1.15.0 py39h4bc2ebd_0 conda-forge charset-normalizer 2.0.12 pyhd8ed1ab_0 conda-forge chemper 1.0.0 pyh9f0ad1d_0 conda-forge click 8.1.3 py39hf3d152e_0 conda-forge click-didyoumean 0.3.0 pyhd8ed1ab_0 conda-forge click-option-group 0.5.3 pyhd8ed1ab_1 conda-forge click-plugins 1.1.1 py_0 conda-forge click-repl 0.2.0 pyhd8ed1ab_0 conda-forge codecov 2.1.11 pyhd3deb0d_0 conda-forge colorama 0.4.4 pyh9f0ad1d_0 conda-forge commonmark 0.9.1 py_0 conda-forge coverage 6.4 py39hb9d737c_0 conda-forge cryptography 37.0.1 py39h9ce1e76_0 cudatoolkit 11.7.0 hd8887f6_10 conda-forge cycler 0.11.0 pyhd8ed1ab_0 conda-forge dataclasses 0.8 pyhc8e2a94_3 conda-forge debugpy 1.6.0 py39h5a03fae_0 conda-forge decorator 5.1.1 pyhd8ed1ab_0 conda-forge defusedxml 0.7.1 pyhd8ed1ab_0 conda-forge deprecated 1.2.13 pyh6c4a22f_0 conda-forge entrypoints 0.4 pyhd8ed1ab_0 conda-forge executing 0.8.3 pyhd8ed1ab_0 conda-forge expat 2.4.8 h27087fc_0 conda-forge fastapi 0.78.0 pyhd8ed1ab_0 conda-forge fftw 3.3.10 nompi_h77c792f_102 conda-forge flit-core 3.7.1 pyhd8ed1ab_0 conda-forge fontconfig 2.14.0 h8e229c2_0 conda-forge fonttools 4.33.3 py39hb9d737c_0 conda-forge forcebalance 1.9.3 py39hac2352c_0 conda-forge freetype 2.10.4 h0708190_1 conda-forge future 0.18.2 py39hf3d152e_5 conda-forge geometric 0.9.7.2 py_0 conda-forge gettext 0.19.8.1 h73d1719_1008 conda-forge gflags 2.2.2 he1b5a44_1004 conda-forge glog 0.4.0 h49b9bf7_3 conda-forge greenlet 1.1.2 py39h5a03fae_2 conda-forge grpc-cpp 1.34.1 h2157cd5_4 h11 0.12.0 pyhd8ed1ab_0 conda-forge h2 4.1.0 pyhd8ed1ab_0 conda-forge h5py 3.6.0 nompi_py39h7e08c79_100 conda-forge hdf5 1.12.1 nompi_h4df4325_104 conda-forge hpack 4.0.0 pyh9f0ad1d_0 conda-forge httpcore 0.15.0 pyhd8ed1ab_0 conda-forge httpx 0.23.0 py39hf3d152e_0 conda-forge hyperframe 6.0.1 pyhd8ed1ab_0 conda-forge icu 68.2 h9c3ff4c_0 conda-forge idna 3.3 pyhd8ed1ab_0 conda-forge importlib-metadata 4.11.4 py39hf3d152e_0 conda-forge importlib_metadata 4.11.4 hd8ed1ab_0 conda-forge importlib_resources 5.7.1 pyhd8ed1ab_1 conda-forge iniconfig 1.1.1 pyh9f0ad1d_0 conda-forge ipykernel 6.13.0 py39hef51801_0 conda-forge ipython 8.4.0 py39hf3d152e_0 conda-forge ipython_genutils 0.2.0 py_1 conda-forge ipywidgets 7.7.0 pyhd8ed1ab_0 conda-forge jedi 0.18.1 py39hf3d152e_1 conda-forge jinja2 3.1.2 pyhd8ed1ab_0 conda-forge jpeg 9e h166bdaf_1 conda-forge jsonschema 4.5.1 pyhd8ed1ab_0 conda-forge jupyter_client 7.3.1 pyhd8ed1ab_0 conda-forge jupyter_core 4.10.0 py39hf3d152e_0 conda-forge jupyterlab_pygments 0.2.2 pyhd8ed1ab_0 conda-forge jupyterlab_widgets 1.1.0 pyhd8ed1ab_0 conda-forge keyutils 1.6.1 h166bdaf_0 conda-forge kiwisolver 1.4.2 py39hf939315_1 conda-forge kombu 5.2.4 py39hf3d152e_1 conda-forge krb5 1.19.3 h08a2579_0 conda-forge lcms2 2.12 hddcbb42_0 conda-forge ld_impl_linux-64 2.36.1 hea4e1c9_2 conda-forge libblas 3.9.0 14_linux64_openblas conda-forge libbrotlicommon 1.0.9 h166bdaf_7 conda-forge libbrotlidec 1.0.9 h166bdaf_7 conda-forge libbrotlienc 1.0.9 h166bdaf_7 conda-forge libcblas 3.9.0 14_linux64_openblas conda-forge libcurl 7.83.1 h2283fc2_0 conda-forge libedit 3.1.20191231 he28a2e2_2 conda-forge libev 4.33 h516909a_1 conda-forge libevent 2.1.10 h28343ad_4 conda-forge libffi 3.4.2 h7f98852_5 conda-forge libgcc-ng 12.1.0 h8d9b700_16 conda-forge libgfortran-ng 12.1.0 h69a702a_16 conda-forge libgfortran5 12.1.0 hdcd56e2_16 conda-forge libglib 2.70.2 h174f98d_4 conda-forge libgomp 12.1.0 h8d9b700_16 conda-forge libiconv 1.16 h516909a_0 conda-forge liblapack 3.9.0 14_linux64_openblas conda-forge libnghttp2 1.47.0 he49606f_0 conda-forge libnsl 2.0.0 h7f98852_0 conda-forge libopenblas 0.3.20 pthreads_h78a6416_0 conda-forge libpng 1.6.37 h21135ba_2 conda-forge libprotobuf 3.14.0 h780b84a_0 conda-forge libsodium 1.0.18 h36c2ea0_1 conda-forge libssh2 1.10.0 ha35d2d1_2 conda-forge libstdcxx-ng 12.1.0 ha89aaad_16 conda-forge libthrift 0.13.0 hfb8234f_6 libtiff 4.2.0 hbd63e13_2 conda-forge libutf8proc 2.7.0 h7f98852_0 conda-forge libuuid 2.32.1 h7f98852_1000 conda-forge libwebp-base 1.2.2 h7f98852_1 conda-forge libxcb 1.13 h7f98852_1004 conda-forge libxml2 2.9.10 h72842e0_4 conda-forge libxslt 1.1.33 h15afd5d_2 conda-forge libzlib 1.2.12 h166bdaf_0 conda-forge lxml 4.8.0 py39hb9d737c_3 conda-forge lz4-c 1.9.3 h9c3ff4c_1 conda-forge lzo 2.10 h516909a_1000 conda-forge markupsafe 2.1.1 py39hb9d737c_1 conda-forge matplotlib-base 3.5.2 py39h700656a_0 conda-forge matplotlib-inline 0.1.3 pyhd8ed1ab_0 conda-forge mdtraj 1.9.7 py39h138c130_1 conda-forge mistune 0.8.4 py39h3811e60_1005 conda-forge msgpack-python 1.0.3 py39hf939315_1 conda-forge munkres 1.1.4 pyh9f0ad1d_0 conda-forge nbclient 0.6.3 pyhd8ed1ab_0 conda-forge nbconvert 6.5.0 pyhd8ed1ab_0 conda-forge nbconvert-core 6.5.0 pyhd8ed1ab_0 conda-forge nbconvert-pandoc 6.5.0 pyhd8ed1ab_0 conda-forge nbformat 5.4.0 pyhd8ed1ab_0 conda-forge ncurses 6.3 h27087fc_1 conda-forge nest-asyncio 1.5.5 pyhd8ed1ab_0 conda-forge networkx 2.8.2 pyhd8ed1ab_0 conda-forge nglview 3.0.3 pyh8a188c0_0 conda-forge nomkl 1.0 h5ca1d4c_0 conda-forge notebook 6.4.11 pyha770c72_0 conda-forge numexpr 2.8.0 py39h194a79d_102 conda-forge numpy 1.22.4 py39hc58783e_0 conda-forge ocl-icd 2.3.1 h7f98852_0 conda-forge ocl-icd-system 1.0.0 1 conda-forge olefile 0.46 pyh9f0ad1d_1 conda-forge openeye-toolkits 2021.2.0 py39_0 openeye openff-bespokefit 0.1.1+15.gb7999db.dirty dev_0 openff-forcefields 2.0.0 pyh6c4a22f_0 conda-forge openff-fragmenter-base 0.1.2 pyhd8ed1ab_0 conda-forge openff-qcsubmit 0.3.1 pyhd8ed1ab_0 conda-forge openff-toolkit-base 0.10.6 pyhd8ed1ab_0 conda-forge openff-utilities 0.1.3 pyh6c4a22f_0 conda-forge openjpeg 2.4.0 hb52868f_1 conda-forge openmm 7.7.0 py39h15fbce5_1 conda-forge openssl 3.0.3 h166bdaf_0 conda-forge orc 1.6.6 h7950760_1 conda-forge packaging 21.3 pyhd8ed1ab_0 conda-forge pandas 1.4.2 py39h1832856_2 conda-forge pandoc 2.18 ha770c72_0 conda-forge pandocfilters 1.5.0 pyhd8ed1ab_0 conda-forge parquet-cpp 1.5.1 2 conda-forge parso 0.8.3 pyhd8ed1ab_0 conda-forge pcre 8.45 h9c3ff4c_0 conda-forge pexpect 4.8.0 pyh9f0ad1d_2 conda-forge pickleshare 0.7.5 py_1003 conda-forge pillow 8.2.0 py39hf95b381_1 conda-forge pint 0.19.2 pyhd8ed1ab_0 conda-forge pip 22.1.1 pyhd8ed1ab_0 conda-forge pixman 0.40.0 h36c2ea0_0 conda-forge plotly 5.8.0 pyhd8ed1ab_1 conda-forge pluggy 1.0.0 py39hf3d152e_3 conda-forge prometheus_client 0.14.1 pyhd8ed1ab_0 conda-forge prompt-toolkit 3.0.29 pyha770c72_0 conda-forge prompt_toolkit 3.0.29 hd8ed1ab_0 conda-forge psutil 5.9.1 py39hb9d737c_0 conda-forge pthread-stubs 0.4 h36c2ea0_1001 conda-forge ptyprocess 0.7.0 pyhd3deb0d_0 conda-forge pure_eval 0.2.2 pyhd8ed1ab_0 conda-forge py 1.11.0 pyh6c4a22f_0 conda-forge py-cpuinfo 8.0.0 pyhd8ed1ab_0 conda-forge pyarrow 2.0.0 py39h3ebc44c_15_cpu conda-forge pycairo 1.21.0 py39h0934665_1 conda-forge pycparser 2.21 pyhd8ed1ab_0 conda-forge pydantic 1.9.1 py39hb9d737c_0 conda-forge pygments 2.12.0 pyhd8ed1ab_0 conda-forge pymbar 3.0.7 py39hd257fcd_0 conda-forge pyopenssl 22.0.0 pyhd8ed1ab_0 conda-forge pyparsing 3.0.9 pyhd8ed1ab_0 conda-forge pyrsistent 0.18.1 py39hb9d737c_1 conda-forge pysocks 1.7.1 py39hf3d152e_5 conda-forge pytables 3.7.0 py39h2669a42_0 conda-forge pytest 7.1.2 py39hf3d152e_0 conda-forge pytest-asyncio 0.18.3 pyhd8ed1ab_0 conda-forge pytest-celery 0.0.0a1 pyh9f0ad1d_1 conda-forge pytest-cov 3.0.0 pyhd8ed1ab_0 conda-forge python 3.9.13 h2660328_0_cpython conda-forge python-constraint 1.4.0 py_0 conda-forge python-dateutil 2.8.2 pyhd8ed1ab_0 conda-forge python-fastjsonschema 2.15.3 pyhd8ed1ab_0 conda-forge python_abi 3.9 2_cp39 conda-forge pytz 2022.1 pyhd8ed1ab_0 conda-forge pyyaml 6.0 py39hb9d737c_4 conda-forge pyzmq 23.0.0 py39headdf64_0 conda-forge qcelemental 0.24.0 pyhd8ed1ab_0 conda-forge qcengine 0.23.0 pyhd8ed1ab_0 conda-forge qcportal 0.15.8 pyhd8ed1ab_0 conda-forge rdkit 2022.03.2 py39h89e00b9_1 conda-forge re2 2020.11.01 h58526e2_0 conda-forge readline 8.1 h46c0cb4_0 conda-forge redis-py 4.3.1 pyhd8ed1ab_0 conda-forge redis-server 7.0.0 h1b5e8cb_0 conda-forge regex 2022.4.24 py39hb9d737c_0 conda-forge reportlab 3.5.68 py39he59360d_1 conda-forge requests 2.27.1 pyhd8ed1ab_0 conda-forge requests-mock 1.9.3 pyhd8ed1ab_0 conda-forge rfc3986 1.5.0 pyhd8ed1ab_0 conda-forge rich 12.4.4 pyhd8ed1ab_0 conda-forge scipy 1.8.1 py39he49c0e8_0 conda-forge send2trash 1.8.0 pyhd8ed1ab_0 conda-forge setuptools 62.3.2 py39hf3d152e_0 conda-forge six 1.16.0 pyh6c4a22f_0 conda-forge smirnoff99frosst 1.1.0 pyh44b312d_0 conda-forge snappy 1.1.9 hbd366e4_1 conda-forge sniffio 1.2.0 py39hf3d152e_3 conda-forge soupsieve 2.3.1 pyhd8ed1ab_0 conda-forge sqlalchemy 1.4.36 py39hb9d737c_0 conda-forge sqlite 3.38.5 h4ff8645_0 conda-forge stack_data 0.2.0 pyhd8ed1ab_0 conda-forge starlette 0.19.1 pyhd8ed1ab_0 conda-forge tenacity 8.0.1 pyhd8ed1ab_0 conda-forge terminado 0.15.0 py39hf3d152e_0 conda-forge tinycss2 1.1.1 pyhd8ed1ab_0 conda-forge tk 8.6.12 h27826a3_0 conda-forge toml 0.10.2 pyhd8ed1ab_0 conda-forge tomli 2.0.1 pyhd8ed1ab_0 conda-forge tornado 6.1 py39hb9d737c_3 conda-forge torsiondrive 1.1.0 pyhd8ed1ab_0 conda-forge tqdm 4.64.0 pyhd8ed1ab_0 conda-forge traitlets 5.2.1.post0 pyhd8ed1ab_0 conda-forge typing-extensions 4.2.0 hd8ed1ab_1 conda-forge typing_extensions 4.2.0 pyha770c72_1 conda-forge tzdata 2022a h191b570_0 conda-forge unicodedata2 14.0.0 py39hb9d737c_1 conda-forge urllib3 1.26.9 pyhd8ed1ab_0 conda-forge uvicorn 0.17.6 py39hf3d152e_1 conda-forge vine 5.0.0 pyhd8ed1ab_1 conda-forge wcwidth 0.2.5 pyh9f0ad1d_2 conda-forge webencodings 0.5.1 py_1 conda-forge wheel 0.37.1 pyhd8ed1ab_0 conda-forge widgetsnbextension 3.6.0 py39hf3d152e_0 conda-forge wrapt 1.14.1 py39hb9d737c_0 conda-forge xmltodict 0.13.0 pyhd8ed1ab_0 conda-forge xorg-kbproto 1.0.7 h7f98852_1002 conda-forge xorg-libice 1.0.10 h7f98852_0 conda-forge xorg-libsm 1.2.3 hd9c2040_1000 conda-forge xorg-libx11 1.7.2 h7f98852_0 conda-forge xorg-libxau 1.0.9 h7f98852_0 conda-forge xorg-libxdmcp 1.1.3 h7f98852_0 conda-forge xorg-libxext 1.3.4 h7f98852_1 conda-forge xorg-libxrender 0.9.10 h7f98852_1003 conda-forge xorg-renderproto 0.11.1 h7f98852_1002 conda-forge xorg-xextproto 7.3.0 h7f98852_1002 conda-forge xorg-xproto 7.0.31 h7f98852_1007 conda-forge xz 5.2.5 h516909a_1 conda-forge yaml 0.2.5 h7f98852_2 conda-forge zeromq 4.3.4 h9c3ff4c_1 conda-forge zipp 3.8.0 pyhd8ed1ab_0 conda-forge zlib 1.2.12 h166bdaf_0 conda-forge zstd 1.4.9 ha95c52a_0 conda-forge |
Description
This PR expands the torsiondrive task with an optional second QC specification which is used to perform single-point energy evaluations on the optimised geometries to resolve the PES.
Implements #157
Todos
Notable points that this PR has either accomplished or will accomplish.
Questions
Status