Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,9 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
python-version: ["3.12", "3.13"]
python-version: ["3.12", "3.13", "3.14"]
openeye: [true, false]
nagl: [true, false]
exclude:
- openeye: true
python-version: "3.13"

env:
OE_LICENSE: ${{ github.workspace }}/oe_license.txt
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/examples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
python-version: [ "3.12"]
python-version: [ "3.12", "3.13", "3.14" ]

env:
PYTEST_ARGS: -r fE -v -x --tb=short -nauto --durations=10
Expand Down
3 changes: 1 addition & 2 deletions devtools/conda-envs/examples.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@ dependencies:
- openff-nagl-models >=2025
- nglview
# Toolkit-specific
# https://github.com/rdkit/rdkit/issues/7221 and https://github.com/rdkit/rdkit/issues/7583
- rdkit =2024
- rdkit
# Test-only/optional/dev/typing/examples
- pytest =8
- pytest-xdist
Expand Down
4 changes: 1 addition & 3 deletions devtools/conda-envs/test_env.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,7 @@ dependencies:
- openff-nagl-models >=0.3.0
# Toolkit-specific
- ambertools >=22
# rdkit 2024.03.6 and 2024.09.1 packages fail when run natively on osx-arm64 macs
# https://github.com/rdkit/rdkit/issues/7583
- rdkit !=2024.03.6,!=2024.09.1
- rdkit >=2025

- openeye::openeye-toolkits
# Test-only/optional/dev/typing
Expand Down
3 changes: 1 addition & 2 deletions devtools/conda-envs/test_env_no_openeye.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@ dependencies:
- openff-nagl-models >=0.3.0
# Toolkit-specific
- ambertools >=22
# https://github.com/rdkit/rdkit/issues/7221 and https://github.com/rdkit/rdkit/issues/7583
- rdkit !=2024.03.6,!=2024.03.5
- rdkit >=2025
# Test-only/optional/dev/typing
- pytest =8
- pytest-cov
Expand Down
156 changes: 87 additions & 69 deletions examples/QCArchive_interface/QCarchive_interface.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,19 @@
"execution_count": 1,
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-25T19:46:15.496419Z",
"iopub.status.busy": "2026-05-25T19:46:15.496314Z",
"iopub.status.idle": "2026-05-25T19:46:21.504039Z",
"shell.execute_reply": "2026-05-25T19:46:21.503399Z",
"shell.execute_reply.started": "2026-05-25T19:46:15.496407Z"
"iopub.execute_input": "2026-09-18T18:11:52.229678Z",
"iopub.status.busy": "2026-09-18T18:11:52.229615Z",
"iopub.status.idle": "2026-09-18T18:11:56.853976Z",
"shell.execute_reply": "2026-09-18T18:11:56.853311Z",
"shell.execute_reply.started": "2026-09-18T18:11:52.229671Z"
},
"scrolled": true
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "678eea5ba7b04d1892b4a5e800deea61",
"model_id": "d80f270f7f8345599434d07c7a6f7a2d",
"version_major": 2,
"version_minor": 0
},
Expand All @@ -42,7 +42,7 @@
"output_type": "stream",
"text": [
" id type record_count name\n",
"---- ---------------- -------------- ---------------------------------------------------------------------------------------\n",
"---- ---------------- -------------- ----------------------------------------------------------------------------------------\n",
" 35 torsiondrive 454 OpenFF Fragmenter Phenyl Benchmark\n",
" 36 torsiondrive 820 OpenFF Group1 Torsions\n",
" 41 optimization 937 OpenFF Optimization Set 1\n",
Expand Down Expand Up @@ -240,7 +240,7 @@
" 463 singlepoint 158905 tmQM xtb Dataset T=100K low-mw high-coordinate mult=5 v0.0\n",
" 464 singlepoint 206240 tmQM xtb Dataset T=100K low-mw high-coordinate mult=3 v0.0\n",
" 465 singlepoint 968 OpenFF TMC Atom Energies v0.0\n",
" 467 optimization 1968 TM Benchmark Optimization Dataset Step 2 v0.0\n",
" 467 optimization 2624 TM Benchmark Optimization Dataset Step 2 v0.0\n",
" 468 singlepoint 68794 tmQM xtb Dataset T=100K low-mw high-coordinate geom-mult=3 v0.0\n",
" 469 singlepoint 102338 tmQM xtb Dataset T=100K low-mw high-coordinate geom-mult=1 v0.0\n",
" 470 torsiondrive 1371 OpenFF SMIRNOFF Sage 2.3.0\n",
Expand All @@ -250,8 +250,12 @@
" 474 optimization 6780 OpenFF NSP Optimization Set 1 Nitrogen v4.0\n",
" 475 optimization 7940 OpenFF NSP Optimization Set 1 Sulfur v4.0\n",
" 476 torsiondrive 27 OpenFF Lipid Torsion Drives v4.1\n",
" 477 optimization 80972 OpenFF Organometallic Complexes Architector Minimum Energy Structures v0.0\n",
" 478 optimization 2350 OpenFF SPICE2 Subset Optimization Dataset v4.0\n"
" 477 optimization 161944 OpenFF Organometallic Complexes Architector Minimum Energy Structures v0.0\n",
" 478 optimization 2350 OpenFF SPICE2 Subset Optimization Dataset v4.0\n",
" 479 torsiondrive 50 OpenFF PEG Ether Fragments TorsionDrives v4.0\n",
" 480 optimization 389480 OpenFF Architector Methyl-Capped Metal Complexes Optimization Dataset v0.0\n",
" 481 optimization 389480 OpenFF Architector Unconstrained Methyl-Capped Metal Complexes Optimization Dataset v0.0\n",
" 482 optimization 142198 tmQM Charge Multiplicity Variant Optimization Dataset v0.0\n"
]
}
],
Expand All @@ -277,11 +281,11 @@
"execution_count": 2,
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-25T19:46:21.504712Z",
"iopub.status.busy": "2026-05-25T19:46:21.504518Z",
"iopub.status.idle": "2026-05-25T19:46:21.588739Z",
"shell.execute_reply": "2026-05-25T19:46:21.588122Z",
"shell.execute_reply.started": "2026-05-25T19:46:21.504701Z"
"iopub.execute_input": "2026-09-18T18:11:56.854869Z",
"iopub.status.busy": "2026-09-18T18:11:56.854594Z",
"iopub.status.idle": "2026-09-18T18:11:56.896999Z",
"shell.execute_reply": "2026-09-18T18:11:56.896318Z",
"shell.execute_reply.started": "2026-09-18T18:11:56.854858Z"
}
},
"outputs": [],
Expand All @@ -304,11 +308,11 @@
"execution_count": 3,
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-25T19:46:21.589232Z",
"iopub.status.busy": "2026-05-25T19:46:21.589131Z",
"iopub.status.idle": "2026-05-25T19:46:21.913250Z",
"shell.execute_reply": "2026-05-25T19:46:21.912544Z",
"shell.execute_reply.started": "2026-05-25T19:46:21.589223Z"
"iopub.execute_input": "2026-09-18T18:11:56.897664Z",
"iopub.status.busy": "2026-09-18T18:11:56.897490Z",
"iopub.status.idle": "2026-09-18T18:11:57.098351Z",
"shell.execute_reply": "2026-09-18T18:11:57.097211Z",
"shell.execute_reply.started": "2026-09-18T18:11:56.897636Z"
}
},
"outputs": [],
Expand All @@ -328,11 +332,11 @@
"execution_count": 4,
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-25T19:46:21.913688Z",
"iopub.status.busy": "2026-05-25T19:46:21.913583Z",
"iopub.status.idle": "2026-05-25T19:46:21.922641Z",
"shell.execute_reply": "2026-05-25T19:46:21.921956Z",
"shell.execute_reply.started": "2026-05-25T19:46:21.913678Z"
"iopub.execute_input": "2026-09-18T18:11:57.098938Z",
"iopub.status.busy": "2026-09-18T18:11:57.098830Z",
"iopub.status.idle": "2026-09-18T18:11:57.123227Z",
"shell.execute_reply": "2026-09-18T18:11:57.122574Z",
"shell.execute_reply.started": "2026-09-18T18:11:57.098927Z"
}
},
"outputs": [
Expand Down Expand Up @@ -417,7 +421,18 @@
" [ 3.28745938e+00, -6.00243631e+00, -9.86032950e+00]]),\n",
" 'name': 'C29ClFH26N4O4S',\n",
" 'identifiers': {'molecule_hash': '58aaa33a5e7d9445e4276a015de257c3d6bde558',\n",
" 'molecular_formula': 'C29ClFH26N4O4S'},\n",
" 'molecular_formula': 'C29ClFH26N4O4S',\n",
" 'smiles': None,\n",
" 'inchi': None,\n",
" 'inchikey': None,\n",
" 'canonical_explicit_hydrogen_smiles': None,\n",
" 'canonical_isomeric_explicit_hydrogen_mapped_smiles': None,\n",
" 'canonical_isomeric_explicit_hydrogen_smiles': None,\n",
" 'canonical_isomeric_smiles': None,\n",
" 'canonical_smiles': None,\n",
" 'pubchem_cid': None,\n",
" 'pubchem_sid': None,\n",
" 'pubchem_conformerid': None},\n",
" 'molecular_charge': 0.0,\n",
" 'molecular_multiplicity': 1,\n",
" 'masses': array([12. , 12. , 12. , 12. , 12. ,\n",
Expand Down Expand Up @@ -577,11 +592,11 @@
"execution_count": 5,
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-25T19:46:21.923099Z",
"iopub.status.busy": "2026-05-25T19:46:21.922993Z",
"iopub.status.idle": "2026-05-25T19:46:22.098581Z",
"shell.execute_reply": "2026-05-25T19:46:22.097808Z",
"shell.execute_reply.started": "2026-05-25T19:46:21.923089Z"
"iopub.execute_input": "2026-09-18T18:11:57.123774Z",
"iopub.status.busy": "2026-09-18T18:11:57.123661Z",
"iopub.status.idle": "2026-09-18T18:11:57.266596Z",
"shell.execute_reply": "2026-09-18T18:11:57.266198Z",
"shell.execute_reply.started": "2026-09-18T18:11:57.123763Z"
}
},
"outputs": [],
Expand All @@ -602,11 +617,11 @@
"execution_count": 6,
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-25T19:46:22.099156Z",
"iopub.status.busy": "2026-05-25T19:46:22.099023Z",
"iopub.status.idle": "2026-05-25T19:46:22.184984Z",
"shell.execute_reply": "2026-05-25T19:46:22.184376Z",
"shell.execute_reply.started": "2026-05-25T19:46:22.099144Z"
"iopub.execute_input": "2026-09-18T18:11:57.266937Z",
"iopub.status.busy": "2026-09-18T18:11:57.266872Z",
"iopub.status.idle": "2026-09-18T18:11:57.316732Z",
"shell.execute_reply": "2026-09-18T18:11:57.316385Z",
"shell.execute_reply.started": "2026-09-18T18:11:57.266930Z"
},
"scrolled": true
},
Expand All @@ -615,7 +630,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'qcelemental.models.v1.molecule.Molecule'>\n",
"<class 'qcelemental.models._v1v2.molecule.Molecule'>\n",
"6 6\n",
"6 6\n",
"6 6\n",
Expand Down Expand Up @@ -713,11 +728,11 @@
"execution_count": 7,
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-25T19:46:22.185851Z",
"iopub.status.busy": "2026-05-25T19:46:22.185700Z",
"iopub.status.idle": "2026-05-25T19:46:22.200983Z",
"shell.execute_reply": "2026-05-25T19:46:22.200374Z",
"shell.execute_reply.started": "2026-05-25T19:46:22.185837Z"
"iopub.execute_input": "2026-09-18T18:11:57.317110Z",
"iopub.status.busy": "2026-09-18T18:11:57.317041Z",
"iopub.status.idle": "2026-09-18T18:11:57.337507Z",
"shell.execute_reply": "2026-09-18T18:11:57.336716Z",
"shell.execute_reply.started": "2026-09-18T18:11:57.317104Z"
}
},
"outputs": [
Expand Down Expand Up @@ -765,18 +780,18 @@
"execution_count": 8,
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-25T19:46:22.201533Z",
"iopub.status.busy": "2026-05-25T19:46:22.201425Z",
"iopub.status.idle": "2026-05-25T19:46:22.226037Z",
"shell.execute_reply": "2026-05-25T19:46:22.224987Z",
"shell.execute_reply.started": "2026-05-25T19:46:22.201523Z"
"iopub.execute_input": "2026-09-18T18:11:57.338368Z",
"iopub.status.busy": "2026-09-18T18:11:57.338112Z",
"iopub.status.idle": "2026-09-18T18:11:57.361884Z",
"shell.execute_reply": "2026-09-18T18:11:57.361507Z",
"shell.execute_reply.started": "2026-09-18T18:11:57.338352Z"
}
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "e792d4ffed78496f8c91ab5f78effb6e",
"model_id": "893433354cf84b14bed5634e4528aa57",
"version_major": 2,
"version_minor": 0
},
Expand All @@ -798,18 +813,18 @@
"execution_count": 9,
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-25T19:46:22.226744Z",
"iopub.status.busy": "2026-05-25T19:46:22.226631Z",
"iopub.status.idle": "2026-05-25T19:46:22.247736Z",
"shell.execute_reply": "2026-05-25T19:46:22.246655Z",
"shell.execute_reply.started": "2026-05-25T19:46:22.226734Z"
"iopub.execute_input": "2026-09-18T18:11:57.362299Z",
"iopub.status.busy": "2026-09-18T18:11:57.362235Z",
"iopub.status.idle": "2026-09-18T18:11:57.382705Z",
"shell.execute_reply": "2026-09-18T18:11:57.381992Z",
"shell.execute_reply.started": "2026-09-18T18:11:57.362293Z"
}
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "5d9fa5b8107c433e8d66f75114ea60a0",
"model_id": "17c03a78ef5d40efaaabe63f568bbe57",
"version_major": 2,
"version_minor": 0
},
Expand Down Expand Up @@ -844,11 +859,11 @@
"execution_count": 10,
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-25T19:46:22.248423Z",
"iopub.status.busy": "2026-05-25T19:46:22.248192Z",
"iopub.status.idle": "2026-05-25T19:46:22.653973Z",
"shell.execute_reply": "2026-05-25T19:46:22.653067Z",
"shell.execute_reply.started": "2026-05-25T19:46:22.248409Z"
"iopub.execute_input": "2026-09-18T18:11:57.383224Z",
"iopub.status.busy": "2026-09-18T18:11:57.383165Z",
"iopub.status.idle": "2026-09-18T18:11:57.605683Z",
"shell.execute_reply": "2026-09-18T18:11:57.605119Z",
"shell.execute_reply.started": "2026-09-18T18:11:57.383219Z"
}
},
"outputs": [],
Expand All @@ -857,11 +872,14 @@
"\n",
"# set up the RDKit task\n",
"rdkit_task = {\n",
" \"schema_name\": \"qcschema_input\",\n",
" \"schema_name\": \"qcschema_atomic_input\",\n",
" \"schema_version\": 2,\n",
" \"molecule\": qc_molecule,\n",
" \"driver\": \"energy\",\n",
" \"model\": {\"method\": \"uff\", \"basis\": None},\n",
" \"keywords\": {\"scf_type\": \"df\"},\n",
" \"specification\": {\n",
" \"driver\": \"energy\",\n",
" \"model\": {\"method\": \"uff\", \"basis\": None},\n",
" \"keywords\": {\"scf_type\": \"df\"},\n",
" },\n",
"}\n",
"\n",
"# now lets compute the energy using qcengine and RDKit and print the result\n",
Expand All @@ -873,11 +891,11 @@
"execution_count": 11,
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-25T19:46:22.654680Z",
"iopub.status.busy": "2026-05-25T19:46:22.654534Z",
"iopub.status.idle": "2026-05-25T19:46:22.658193Z",
"shell.execute_reply": "2026-05-25T19:46:22.657207Z",
"shell.execute_reply.started": "2026-05-25T19:46:22.654666Z"
"iopub.execute_input": "2026-09-18T18:11:57.606313Z",
"iopub.status.busy": "2026-09-18T18:11:57.606225Z",
"iopub.status.idle": "2026-09-18T18:11:57.617644Z",
"shell.execute_reply": "2026-09-18T18:11:57.617253Z",
"shell.execute_reply.started": "2026-09-18T18:11:57.606306Z"
},
"tags": []
},
Expand Down Expand Up @@ -912,7 +930,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.13"
"version": "3.13.15"
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
Expand Down
2 changes: 1 addition & 1 deletion openff/toolkit/_tests/test_parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -819,7 +819,7 @@ def test_index(self):
parameters.index("[#2:1]")

p4 = ParameterType(smirks="[#2:1]")
with pytest.raises(ValueError, match="is not in list"):
with pytest.raises(ValueError, match=" not in list"):
parameters.index(p4)

with pytest.raises(TypeError, match="non-None values for start"):
Expand Down
8 changes: 6 additions & 2 deletions openff/toolkit/topology/molecule.py
Original file line number Diff line number Diff line change
Expand Up @@ -4451,7 +4451,7 @@ def to_qcschema(self, multiplicity=1, conformer=0, extras=None):

Returns
---------
qcelemental.models.Molecule
qcelemental.models.v2.Molecule
Comment thread
mattwthompson marked this conversation as resolved.
A validated QCElemental Molecule.

Examples
Expand Down Expand Up @@ -4504,7 +4504,11 @@ def to_qcschema(self, multiplicity=1, conformer=0, extras=None):
"identifiers": identifiers,
}

return qcel.models.Molecule.from_data(schema_dict, validate=True)
try:
return qcel.models.v2.Molecule.from_data(schema_dict, validate=True)
except AttributeError: # other errors to capture here?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This could be tightened up with something hasattr(qcel.models, "v2") instead.

# fallback for older QCElemental models (Pydantic V1 or V1/V2 compatibility)
return qcel.models.Molecule.from_data(schema_dict, validate=True)

@classmethod
def from_mapped_smiles(
Expand Down
Loading