Skip to content

v0.20.0 Release - #193

Merged
dglmoore merged 8 commits into
mainfrom
dev
Jul 13, 2026
Merged

v0.20.0 Release#193
dglmoore merged 8 commits into
mainfrom
dev

Conversation

@dglmoore

Copy link
Copy Markdown
Contributor

Summary

This branch bundles a set of PostgreSQL storage/performance improvements, a new EQ3/6 kernel filter setting, and a bug fix for error-message propagation to the Postgres output.

  • Eq36Settings.filter — a new setting that accepts an EQL query (with a limited set of conditions) for filtering out generated equilibrium_space.Points at generation time, e.g. dropping points where a specific aqueous species is present below some limit.
  • Widened equilibrium_* identity primary keys from INTEGER to BIGINT. The per-equilibrium-point tables accumulate one row per species/solid/gas/reactant per point, so their int4 identity range was the first thing to overflow on large runs. The FK columns that store these ids (equilibrium_space_id, equilibrium_solid_solution_id) are widened to match.
  • Curated the PostgreSQL indexes. Profiled known real-world queries and rebalanced the index set to trade query performance against on-disc storage, rather than bloating the footprint without the hoped-for speedups.
  • Granular bulk-load control — added --[no-]indexes / --[no-]fks / --[no-]checks flags to eleanor postgres bulkload drop/recreate (all on by default). recreate is now idempotent per class (it skips CHECK/FK constraints already present), so an asymmetric drop/recreate is safe instead of an error. Rebuilt B-tree indexes are packed at fillfactor = 100 since a recreate is a one-shot bulk build over write-once data; GIN/BRIN indexes are unaffected.
  • Renamed bulk-load helpers drop_indexes / recreate_indexesdrop_bulk_load_objects / recreate_bulk_load_objects to reflect that they act on secondary indexes and FK/CHECK constraints.
  • Fixed error-message propagation to PostgresSink. The Runner was overwriting Point.exception with None, so the sink drew a missing error message; the message now comes from ComputeResult.error.

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Refactor / code quality

Testing

  • Existing tests pass (pytest)
  • New tests added to cover this change
  • Manually verified against a real EQ3/6 run (if applicable)

Checklist

  • Code follows the style guides (ruff check, ruff format, basedpyright)
  • Pre-commit hooks pass (pre-commit run --all-files)
  • Public functions and methods have type annotations and docstrings
  • CHANGELOG.md updated under [Unreleased] (for user-facing changes)

dglmoore added 8 commits July 6, 2026 16:02
The sailor overwrites the exception to None before forwarding the point
and ErrorInfo along to the caller as a ComputeResult. Downstream, the
output sinks need to use the ErrorInfo rather than the exception on the
vs.Point.

A future change will probably remove the exception property from the
vs.Point dataclass.
Adds the `eleanor.kernel.eq36.Eq36Settings.filter` property which allows
the user to provide a query with which to filter ES points at generation
time.
We are trying to strike a balance between good query performance for the
obvious things out of the box, but also avoid bloating the storage
footprint
The equilibrium_aqueous_species table in particular overflows pretty
quickly. We need a bigger boat.
@dglmoore dglmoore changed the title v0.20.0 v0.20.0 Release Jul 13, 2026
@dglmoore
dglmoore merged commit fdb6919 into main Jul 13, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant