Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
30 changes: 30 additions & 0 deletions docs/source/release_notes.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,36 @@
Release Notes
=============

0.64 / 2026-03-04
-----------------

Some cleanup and some small bug fixes. Some old code and migrations were removed and some
incorrect endpoints were fixed.

One bigger change is the improved use of upserts (ON CONFLICT DO NOTHING) in postgres, particularly
for the molecule table but also on specification tables. This should eliminate some deadlocks
that were happening due to the use of advisory locks.

Some bugs found during the development of the web app were fixed. These related to the "/me" endpoint which
is not used by the PortalClient, but will be used by the web app. Also, we improved the performance
of dataset listing, which was getting slow on our large instances.

This release also introduces pydantic v2 in a few isolated areas (configuration files), with more
coming the next version.

Notable PRs:

- (:pr:`977`) Adding & cleaning documentation
- (:pr:`978`) Update server and compute config to use pydantic v2
- (:pr:`980`) Remove pre-v0.50 database migrations
- (:pr:`985`) Making dataset views should always include required record fields
- (:pr:`988`) Improve errors for exporting to qcschema with missing data
- (:pr:`991`, :pr:`992`) Fix /me endpoints and add tests
- (:pr:`993`) Add owner/user to project listing
- (:pr:`994`) Rework database locking to use upserts when possible
- (:pr:`995`) Faster record count in dataset list


0.63 / 2025-09-26
-----------------

Expand Down
2 changes: 1 addition & 1 deletion qcarchivetesting/conda-envs/fulltest_server.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ dependencies:
- pydantic-settings
- zstandard
- apsw>=3.42
- qcelemental<0.70a0
- qcelemental>=0.30,<0.70a0
- tabulate
- tqdm
- pandas
Expand Down
4 changes: 2 additions & 2 deletions qcarchivetesting/conda-envs/fulltest_snowflake.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ dependencies:
- pydantic-settings
- zstandard
- apsw>=3.42
- qcelemental<0.70a0
- qcelemental>=0.30,<0.70a0
- tabulate
- tqdm
- pandas
Expand Down Expand Up @@ -47,7 +47,7 @@ dependencies:
- scipy # TODO Required for geometric REMOVE EVENTUALLY

# Worker codes below
- qcengine<0.70a0
- qcengine>=0.34,<0.70a0
- psi4>=1.9.1
- rdkit

Expand Down
2 changes: 1 addition & 1 deletion qcarchivetesting/conda-envs/fulltest_testing.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ dependencies:
- pydantic-settings
- zstandard
- apsw>=3.42
- qcelemental<0.70a0
- qcelemental>=0.30,<0.70a0
- tabulate
- tqdm
- pandas
Expand Down
4 changes: 2 additions & 2 deletions qcarchivetesting/conda-envs/fulltest_worker.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ dependencies:
- pydantic-settings
- zstandard
- apsw>=3.42
- qcelemental<0.70a0
- qcelemental>=0.30,<0.70a0
- tabulate
- tqdm
- pandas
Expand All @@ -28,7 +28,7 @@ dependencies:
- parsl

# Worker codes below
- qcengine<0.70a0
- qcengine>=0.34,<0.70a0
- psi4>=1.9.1
- rdkit
- geometric
Expand Down
4 changes: 2 additions & 2 deletions qcarchivetesting/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ description = "A distributed compute and database platform for quantum chemistry
readme = "README.md"
license = "BSD-3-Clause"
license-files = ["LICENSE"]
requires-python = ">=3.10"
requires-python = ">=3.10,<3.14"
classifiers = [
"Programming Language :: Python :: 3",
"Development Status :: 4 - Beta",
Expand All @@ -23,7 +23,7 @@ classifiers = [
]
dependencies = [
"qcfractal",
"qcengine<0.70a0",
"qcengine>=0.34,<0.70a0",
"pytest",
"deepdiff",
]
Expand Down
2 changes: 1 addition & 1 deletion qcfractal/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ description = "A distributed compute and database platform for quantum chemistry
readme = "README.md"
license = "BSD-3-Clause"
license-files = ["LICENSE"]
requires-python = ">=3.10"
requires-python = ">=3.10,<3.14"
classifiers = [
"Programming Language :: Python :: 3",
"Development Status :: 4 - Beta",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

"""

import sqlalchemy as sa
from alembic import op

# revision identifiers, used by Alembic.
Expand All @@ -19,6 +20,122 @@ def upgrade():
op.drop_constraint("ux_neb_specification_keys", "neb_specification", type_="unique")
op.drop_constraint("ux_reaction_specification_keys", "reaction_specification", type_="unique")

# We need to find duplicates due to a NULL optimization_specification_id
# then update references and delete
op.execute(sa.text("""
WITH ranked AS (
SELECT
id,
MIN(id) OVER (
PARTITION BY specification_hash, singlepoint_specification_id
) AS canonical_id
FROM neb_specification
WHERE optimization_specification_id IS NULL
),
dupes AS (
SELECT id AS duplicate_id, canonical_id
FROM ranked
WHERE id <> canonical_id
)
UPDATE neb_record r
SET specification_id = d.canonical_id
FROM dupes d
WHERE r.specification_id = d.duplicate_id;
"""))

op.execute(sa.text("""
WITH ranked AS (
SELECT
id,
MIN(id) OVER (
PARTITION BY specification_hash, singlepoint_specification_id
) AS canonical_id
FROM neb_specification
WHERE optimization_specification_id IS NULL
),
dupes AS (
SELECT id AS duplicate_id, canonical_id
FROM ranked
WHERE id <> canonical_id
)
UPDATE neb_dataset_specification rds
SET specification_id = d.canonical_id
FROM dupes d
WHERE rds.specification_id = d.duplicate_id;
"""))

op.execute(sa.text("""
WITH ranked AS (
SELECT
id,
MIN(id) OVER (
PARTITION BY specification_hash, singlepoint_specification_id
) AS canonical_id
FROM neb_specification
WHERE optimization_specification_id IS NULL
)
DELETE FROM neb_specification r
USING ranked d
WHERE r.id = d.id
AND d.id <> d.canonical_id;
"""))

# Now for reactions, which can have singlepoint or optimization specification ids be null
op.execute(sa.text("""
WITH ranked AS (
SELECT
id,
MIN(id) OVER (
PARTITION BY specification_hash, singlepoint_specification_id, optimization_specification_id
) AS canonical_id
FROM reaction_specification
),
dupes AS (
SELECT id AS duplicate_id, canonical_id
FROM ranked
WHERE id <> canonical_id
)
UPDATE reaction_record r
SET specification_id = d.canonical_id
FROM dupes d
WHERE r.specification_id = d.duplicate_id;
"""))

op.execute(sa.text("""
WITH ranked AS (
SELECT
id,
MIN(id) OVER (
PARTITION BY specification_hash, singlepoint_specification_id, optimization_specification_id
) AS canonical_id
FROM reaction_specification
),
dupes AS (
SELECT id AS duplicate_id, canonical_id
FROM ranked
WHERE id <> canonical_id
)
UPDATE reaction_dataset_specification rds
SET specification_id = d.canonical_id
FROM dupes d
WHERE rds.specification_id = d.duplicate_id;
"""))

op.execute(sa.text("""
WITH ranked AS (
SELECT
id,
MIN(id) OVER (
PARTITION BY specification_hash, singlepoint_specification_id, optimization_specification_id
) AS canonical_id
FROM reaction_specification
)
DELETE FROM reaction_specification r
USING ranked d
WHERE r.id = d.id
AND d.id <> d.canonical_id;
"""))

op.create_unique_constraint(
"ux_neb_specification_keys",
"neb_specification",
Expand Down
3 changes: 2 additions & 1 deletion qcfractalcompute/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ description = "A distributed compute and database platform for quantum chemistry
readme = "README.md"
license = "BSD-3-Clause"
license-files = ["LICENSE"]
requires-python = ">=3.10"
requires-python = ">=3.10,<3.14"
classifiers = [
"Programming Language :: Python :: 3",
"Development Status :: 4 - Beta",
Expand All @@ -24,6 +24,7 @@ classifiers = [
dependencies = [
"qcportal",
"parsl",
"qcengine>=0.34,<0.70a0",
]


Expand Down
7 changes: 3 additions & 4 deletions qcportal/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ description = "A distributed compute and database platform for quantum chemistry
readme = "README.md"
license = "BSD-3-Clause"
license-files = ["LICENSE"]
requires-python = ">=3.10"
requires-python = ">=3.10,<3.14"
classifiers = [
"Programming Language :: Python :: 3",
"Development Status :: 4 - Beta",
Expand All @@ -26,12 +26,11 @@ dependencies = [
"msgpack",
"requests",
"pyyaml",
"pydantic>2.10",
"pydantic>=2.11",
"pydantic-settings",
"zstandard",
"apsw>=3.42",
"qcelemental<0.70a0",
"pint", # Required for qcelemental. Doesn't install with py3.13. REMOVE EVENTUALLY
"qcelemental>=0.30,<0.70a0",
"tabulate",
"tqdm",
"pandas",
Expand Down
Loading