Skip to content

Releases: atomsforhumanity/qcdata

0.23.1

Choose a tag to compare

@github-actions github-actions released this 23 Oct 23:22
4be3362

Changed

  • Frame.from_output accepts any ProgramOutput (its results are checked to be SinglePointData at runtime), so drivers need no casts for child outputs typed as Data.
  • ProgramInput.from_spec takes structures as any Mapping, so a dict[str, Structure] type-checks against the wider value type.

0.23.0

Choose a tag to compare

@github-actions github-actions released this 23 Oct 23:05
5093852

Added

  • Frame: one structure inside a larger calculation (an optimizer step, an IRC point, a path image) with what was computed there. It is a ProgramOutput without input_data, since the parent's input already holds the program, model, and keywords: structure, results (a SinglePointData, never None), success, logs, traceback, execution. Frame.from_output(child_output) records a child calculation; ProgramInput.from_spec(parent_spec, frame.structure) rebuilds a step's input.
  • OutputBase: success, logs, traceback, execution, the failure rule (a traceback is required), and plogs/ptraceback, shared by ProgramOutput and Frame. Outputs serialize success first and logs and execution last.
  • CalcType.irc with PathData: frames in order along a path (for an IRC, reverse end, transition state, forward end) and ts_index, with transition_state, forward_barrier, and reverse_barrier.
  • CalcType.path_optimization with PathOptimizationData: the path at every iteration (paths: list[PathData]) and final_path. Its input carries the chain in ProgramInput.structures["initial_chain"], endpoints included and in order.
  • A shared reading interface for results holding structures: structures, energies, to_xyz(), save("*.xyz") on OptimizationData, PathData, PathOptimizationData, and ConformerSearchData.
  • ProgramInput.require_structure() (returns the Structure or raises for a chain input; narrows the type for type checkers) and ProgramInput.initial_chain.

Changed

  • Breaking: OptimizationData.trajectory is now OptimizationData.frames and holds Frames instead of ProgramOutputs. Read a step's structure as step.structure instead of step.input_data.structure. trajectory= and saved files with "trajectory" still load (with a FutureWarning), ProgramOutputs passed as steps become frames, and .trajectory remains as a deprecated property.
  • Breaking: ScanData.trajectory is now ScanData.points, with the same compatibility.
  • Breaking: ConformerSearchData.conformers and .rotamers hold Frames (each conformer's energy in frame.results.energy), sorted by energy with energy-less frames last. conformer_energies, rotamer_energies, and their *_relative forms are now properties. Lists of structures with energy arrays, and saved files in that form, still load. Read structures with .structures (conformers) or [f.structure for f in data.rotamers].
  • Fields holding several results are named after what they hold: frames, paths, points, conformers, rotamers.
  • Breaking: ProgramInput.structure is Structure | None. Validation requires it for every calculation type except path_optimization, which requires structures["initial_chain"] (at least two structures with the same atoms) and no structure. Type checkers no longer know structure is set; use require_structure().
  • ProgramInput.structures values may be a Structure or an ordered list[Structure].

0.22.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 20:39
54b5a62

Added

  • Supports Python 3.15; CI tests the oldest (3.11) and newest (3.15) supported versions.

Changed

  • CalcType and LengthUnit are enum.StrEnums: str(), format(), and f-strings give the value ("energy") on every supported Python. With (str, Enum), f-strings gave "energy" on Python 3.11 but "CalcType.energy" on 3.12 and later, as str() always did. Equality with strings, JSON, and validation are unchanged.

0.21.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 19:07
90e83fd

Changed

  • 🚨 Requires Python 3.11 or newer. Python 3.10 reached end of life in October 2026.

0.20.2

Choose a tag to compare

@github-actions github-actions released this 20 Oct 22:57
8f576c9

Changed

  • SinglePointData.normal_modes_cartesian is defined precisely: each mode is a Cartesian displacement (not mass-weighted) scaled to unit length, dimensionless, in the input structure's frame and atom order, ordered like freqs_wavenumber, with arbitrary sign. The previous description ("displacements in Bohr") left the scale undefined, and programs disagreed.
  • The documentation site is built and published by a Docs workflow on every release tag (or by hand), instead of locally. Pinned pymdown-extensions below 11, which broke the docs build.

0.20.1

Choose a tag to compare

@github-actions github-actions released this 15 Oct 04:15
10103ee

Changed

  • Development tooling: shared ruff (including Google docstring rules), mypy (fully typed library code), and pytest settings; pre-commit hooks that run the locked tools through uv run; one CI workflow; a tag-driven release workflow with scripts/prepare_release.py and an approval-gated PyPI deployment. Added CONTRIBUTING.md and AGENTS.md.
  • Depend on qcref instead of the deprecated qcconst.

Release 0.20.0

Choose a tag to compare

@coltonbh coltonbh released this 14 Oct 22:49

Added

  • SinglePointData.atomic_charges (per-atom partial charges in e) and SinglePointData.point_charge_gradient (n_charges x 3 gradient on external point charges in Hartrees/Bohr, for QM/MM electrostatic embedding).

Removed

  • qcdata.qcel (to_qcel_input, from_qcel_output_results) and the QCElemental test dependency. The qc* suite no longer delegates to QCEngine; programs are supported through native qccodec codecs.

Full Changelog: 0.19.0...0.20.0

Release 0.19.0

Choose a tag to compare

@coltonbh coltonbh released this 14 Oct 22:49

Added

  • Add public get_data_type(calctype) and ProgramInput.from_spec() helpers for parsers and execution packages.

Changed

  • Every model now writes the installed qcdata_version to JSON/YAML/TOML; nested models are stamped too. Loading accepts an existing stamp, and resaving replaces it with the current package version. XYZ structures include a version comment; QCSchema exports exclude qcdata-specific stamps.

  • Default save() and json_dumps() use exclude_unset=True for compact files, retaining explicitly supplied values and computed version stamps. Pass exclude_unset=False to include unset/default-valued fields. The JSON helper handles individual models and lists consistently, including paths. Models retain shallow freezing; direct container mutation is unsupported and the supported update workflow is dump/edit/validate.

  • JSON schemas describe scientific array dimensions correctly. NumPy energy defaults use factories, eliminating non-serializable-default schema warnings.

  • QCSchema conversion preserves source extras and additional producer metadata without claiming QCEngine produced every result. Completed public data/identifier exports and corrected viewer documentation.

  • The temporary .data compatibility property and legacy input key are scheduled for removal in the next major release after this one.

  • Breaking: result types now follow the input contract on both success and failure. FileInput requires FileData; structured inputs require their corresponding scientific data type even for empty failures. Empty payloads deserialize using the input calculation type, including in nested trajectories.

  • Empty optimization final values return None; empty scan trajectories are supported. Scan structures preserve missing points as None, and XYZ export rejects points without a final structure. Visualization handles empty failed outputs.

  • Breaking: renamed execution fields to host_cpu and host_mem_gib (fractional GiB supported), without compatibility aliases. Removed the prototype Structure.swap_indices method.

  • Updated qcinf to >=0.4.1, removing the qcio dependency and obsolete structure-type workaround.

  • ProgramOutput.results is now the canonical scientific payload field and serialized key. Scientific models retain their Data names. .data and legacy "data" inputs remain temporarily supported with FutureWarning; providing both field names is invalid.

  • Breaking: removed the Results, *Results, and Molecule aliases, qcdata.models.results and qcio import shims, molecule= and ids= constructor compatibility, stdout/files forwarding, deprecated output convenience properties, and helpers moved to qcinf. Use canonical APIs directly.

  • Breaking: result payloads now inherit from FileData and require Provenance containing program identity and optional version. ProgramOutput.provenance is replaced by execution: ExecutionInfo, defaulting to ExecutionInfo() when runtime details are unknown. Migrate serialized outputs and each trajectory entry by moving producer identity into results.provenance and runtime fields into execution.

  • Breaking: all inputs now require program. Replaced ProgramArgs, ProgramArgsSub, and DualProgramInput with recursive ProgramSpec and structure-bound ProgramInput. Migrate subprogram / subprogram_args to subprograms, giving each child its own program and calctype; sibling calculation types must be unique. model is optional and remains a separate Model object. Existing serialized inputs require the same migration.

  • Added immediate-child lookup with get_subprogram(calctype), recursive visualization details, and an explicit error when converting a model-free input to QCSchema AtomicInput.

What's Changed

  • • feat!: redesign calculation inputs, results, and execution metadata by @coltonbh in #106

Full Changelog: 0.18.1...0.19.0

Release 0.18.0

Choose a tag to compare

@github-actions github-actions released this 15 Jul 23:31

0.18.0 - 2026-07-15

Changed

  • Moved single-point primary-result validation from SinglePointData to ProgramOutput so failed calculations can carry empty or partial SinglePointData while successful calculations still require their requested primary result.

Release 0.17.2

Choose a tag to compare

@github-actions github-actions released this 01 Jun 01:09

0.17.2 - 2026-05-31

Added

  • ProgramInput.structures and DualProgramInput.structures for additional named structures required by calculations with multiple complete structure inputs, while keeping .structure as the required primary/start/reference structure. #103 by @coltonbh.