Repository navigation
Releases: atomsforhumanity/qcdata
Release list
0.23.1
Changed
Frame.from_outputaccepts anyProgramOutput(its results are checked to beSinglePointDataat runtime), so drivers need no casts for child outputs typed asData.ProgramInput.from_spectakesstructuresas anyMapping, so adict[str, Structure]type-checks against the wider value type.
0.23.0
Added
Frame: one structure inside a larger calculation (an optimizer step, an IRC point, a path image) with what was computed there. It is aProgramOutputwithoutinput_data, since the parent's input already holds the program, model, and keywords:structure,results(aSinglePointData, neverNone),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), andplogs/ptraceback, shared byProgramOutputandFrame. Outputs serializesuccessfirst and logs and execution last.CalcType.ircwithPathData: frames in order along a path (for an IRC, reverse end, transition state, forward end) andts_index, withtransition_state,forward_barrier, andreverse_barrier.CalcType.path_optimizationwithPathOptimizationData: the path at every iteration (paths: list[PathData]) andfinal_path. Its input carries the chain inProgramInput.structures["initial_chain"], endpoints included and in order.- A shared reading interface for results holding structures:
structures,energies,to_xyz(),save("*.xyz")onOptimizationData,PathData,PathOptimizationData, andConformerSearchData. ProgramInput.require_structure()(returns theStructureor raises for a chain input; narrows the type for type checkers) andProgramInput.initial_chain.
Changed
- Breaking:
OptimizationData.trajectoryis nowOptimizationData.framesand holdsFrames instead ofProgramOutputs. Read a step's structure asstep.structureinstead ofstep.input_data.structure.trajectory=and saved files with"trajectory"still load (with aFutureWarning),ProgramOutputs passed as steps become frames, and.trajectoryremains as a deprecated property. - Breaking:
ScanData.trajectoryis nowScanData.points, with the same compatibility. - Breaking:
ConformerSearchData.conformersand.rotamersholdFrames (each conformer's energy inframe.results.energy), sorted by energy with energy-less frames last.conformer_energies,rotamer_energies, and their*_relativeforms 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.structureisStructure | None. Validation requires it for every calculation type exceptpath_optimization, which requiresstructures["initial_chain"](at least two structures with the same atoms) and nostructure. Type checkers no longer knowstructureis set; userequire_structure(). ProgramInput.structuresvalues may be aStructureor an orderedlist[Structure].
0.22.0
Added
- Supports Python 3.15; CI tests the oldest (3.11) and newest (3.15) supported versions.
Changed
CalcTypeandLengthUnitareenum.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, asstr()always did. Equality with strings, JSON, and validation are unchanged.
0.21.0
Changed
- 🚨 Requires Python 3.11 or newer. Python 3.10 reached end of life in October 2026.
0.20.2
Changed
SinglePointData.normal_modes_cartesianis 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 likefreqs_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-extensionsbelow 11, which broke the docs build.
0.20.1
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 withscripts/prepare_release.pyand an approval-gated PyPI deployment. Added CONTRIBUTING.md and AGENTS.md. - Depend on
qcrefinstead of the deprecatedqcconst.
Release 0.20.0
Added
SinglePointData.atomic_charges(per-atom partial charges in e) andSinglePointData.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
Added
- Add public
get_data_type(calctype)andProgramInput.from_spec()helpers for parsers and execution packages.
Changed
-
Every model now writes the installed
qcdata_versionto 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()andjson_dumps()useexclude_unset=Truefor compact files, retaining explicitly supplied values and computed version stamps. Passexclude_unset=Falseto 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
.datacompatibility 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.
FileInputrequiresFileData; 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 asNone, and XYZ export rejects points without a final structure. Visualization handles empty failed outputs. -
Breaking: renamed execution fields to
host_cpuandhost_mem_gib(fractional GiB supported), without compatibility aliases. Removed the prototypeStructure.swap_indicesmethod. -
Updated qcinf to >=0.4.1, removing the qcio dependency and obsolete structure-type workaround.
-
ProgramOutput.resultsis now the canonical scientific payload field and serialized key. Scientific models retain theirDatanames..dataand legacy"data"inputs remain temporarily supported withFutureWarning; providing both field names is invalid. -
Breaking: removed the
Results,*Results, andMoleculealiases,qcdata.models.resultsandqcioimport shims,molecule=andids=constructor compatibility, stdout/files forwarding, deprecated output convenience properties, and helpers moved to qcinf. Use canonical APIs directly. -
Breaking: result payloads now inherit from
FileDataand requireProvenancecontaining program identity and optional version.ProgramOutput.provenanceis replaced byexecution: ExecutionInfo, defaulting toExecutionInfo()when runtime details are unknown. Migrate serialized outputs and each trajectory entry by moving producer identity intoresults.provenanceand runtime fields intoexecution. -
Breaking: all inputs now require
program. ReplacedProgramArgs,ProgramArgsSub, andDualProgramInputwith recursiveProgramSpecand structure-boundProgramInput. Migratesubprogram/subprogram_argstosubprograms, giving each child its ownprogramandcalctype; sibling calculation types must be unique.modelis optional and remains a separateModelobject. 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
Full Changelog: 0.18.1...0.19.0
Release 0.18.0
0.18.0 - 2026-07-15
Changed
- Moved single-point primary-result validation from
SinglePointDatatoProgramOutputso failed calculations can carry empty or partialSinglePointDatawhile successful calculations still require their requested primary result.