=========
Changelog
=========
.. _`sec:cl052`:
v0.5.2 / 2026-02-16
===================
`Docs `_
Enhancements
------------
* :pr:`45` Maint -- Switch from mkdocs back to Sphinx for Pydantic formatting and cross-project compatibility.
v0.5.1 / 2025-06-14
===================
Bug Fixes
---------
* :pr:`40` Core -- Fix bug where an input ``fix_symmetry='c1'`` molecule didn't apply no symmetry to its fragments.
v0.5.0 / 2025-06-13
===================
Breaking Changes
----------------
New Features
------------
* :pr:`38` Feature -- alpha ManyBody QCSchema v2 added accessible through ``from qcmanybody.models.v2 import ManyBodyInput`` etc. Changes are:
* In v2, ``ManyBodyResult`` gained ``native_files`` and ``molecule`` fields. The latter is unchanged by QCManyBody from the input. Also, ``cluster_results`` became required so the protocol can process it (can always be empty dict).
* In v2, ``ManyBodyInput`` gained ``provenance`` and ``id`` fields.
* In v2, ``ManyBodySpecification`` gained a ``program`` field, empty by default since prog may be supplied by argument.
* ``ManyBodyResult.component_results`` in v1 is now in v2 ``ManyBodyResult.cluster_results``.
* ``ManyBodyProtocols.component_results`` in v1 is now in v2 ``ManyBodyProtocols.cluster_results`` with the same default.
* In v2, ``ManyBodyInput.extras`` field was removed. Extras should be on ``ManyBodySpecification``.
* In v2, ``ManyBodyProperties``, ``ManyBodyKeywords``, and ``ManyBodySpecification`` lost their ``schema_version`` field.
* All v2 models got their ``schema_name`` standardized to ``qcschema_many_body_``. ``ManyBodyProtocols`` got a ``schema_name`` for the first time.
* ``ManyBodyResult.success`` now in v2 is fixed True.
* ``ManyBodyResult.properties`` composed of ``ManyBodyResultProperties`` in v1 is now in v2 composed of ``ManyBodyProperties``.
* ``ManyBodySpecification.protocols`` composed of ``AtomicResultProtocols`` in v1 is now in v2 composed of ``AtomicProtocols``.
* ``ManyBodyResult.component_properties`` composed of ``AtomicResultProperties`` in v1 is now in v2 ``ManyBodyResult.cluster_properties`` composed of ``AtomicProperties``.
Enhancements
------------
* :pr:`38` Utils -- updated the precise math function for arrays according to the NumPy deprecation warning.
* :pr:`39` Docs -- Added high-level interface overview.
Bug Fixes
---------
* :pr:`38` Docs -- Fix typos in core docs page.
Misc.
-----
* :pr:`38` Maint -- Pydantic package version must be v2 or v1 >=1.10.17. This ensures the v2 API will be available for optional QCSchema v2, while QCManyBody remains on v1 API (importable from package v2).
* :pr:`38` Maint -- Updated license and package spec.
v0.4.0 / 2025-01-16
===================
Breaking Changes
----------------
* :pr:`36` Feature -- as the embedded point charges aren't fully validated and (in the QCEngine computer function of the high-level interface) only work with Psi4 anyways, they are now hidden. Set environment variable ``QCMANYBODY_EMBEDDING_CHARGES=1`` to access functionality.
New Features
------------
Enhancements
------------
* :pr:`36` Utils -- when adding up results from many molecular species, now the compensated sums ``math.fsum`` or ``numpy.sum`` are used.
Bug Fixes
---------
Misc.
-----
* Maint -- pinned to QCElemental <0.70 to use only QCSchema v1.
v0.3.0 / 2024-07-21
===================
Breaking Changes
----------------
* :pr:`28` Intf -- low-level "core" interface renamed from ``ManyBodyCalculator`` to ``ManyBodyCore``. The old name will continue to work for a few months. Also, its file changed from ``manybody.py`` to ``core.py`` but it was already a top-level import.
* :pr:`30` Intf -- low-level "core" interface now requires named arguments beyond the first recognizable ones (mol, bsse_type, levels).
* :pr:`32` Intf -- "high-level" interface now no longer stores QCVariables (or any other results dicts) in extras.
* :pr:`32` Utils -- ``qcmanybody.utils.collect_vars`` now returns with keys from ManyBodyResultProperties rather than QCVariables.
* :pr:`32` Utils -- arguments rearranged in ``qcmanybody.tests.utils.run_qcengine`` (use serial backend for core interface) to align with ``ManyBodyCore`` init arguments.
New Features
------------
* :pr:`32` Schema -- a new function ``ManyBodyResultProperties.to_qcvariables()`` returns a translation map to QCVariables keys.
* :pr:`32` Schema -- a new function ``qcmanybody.utils.translate_qcvariables(map)`` switches between QCVariable and QCSchema keys.
* :pr:`33` Schema -- ``ManyBodySpecification.extras`` added.
* :pr:`34` Schema -- Add schema_version to ``AtomicSpecification``, ``ManyBodySpecification``, ``ManyBodyKeywords``, ``ManyBodyInput``, and ``ManyBodyResultProperties``.
Enhancements
------------
* :pr:`28` Intf -- high-level interface is now importable from the top level module.
* :pr:`29` Maint -- QCEngine is needed only for the continuous running function of the high-level interface, so making it an optional dependency.
* :pr:`30` Intf -- low-level "core" interface now accepts a molecule in partial schema dictionary format rather than requiring a constructed ``qcelemental.Molecule`` object. If the molecule is a single large fragment, an error is thrown.
* :pr:`30` Docs -- add end-to-end demos in test_examples.
* :pr:`31` Schema -- add "none" as a bsse_type alias to "nocp".
* :pr:`34` Schema -- Allow environment variable QCMANYBODY_MAX_NBODY to influence the body-level to which ``ManyBodyResultProperties`` is defined added.
* :pr:`34` Schema -- added discriminator to input for ``GeneralizedOptimizationInput`` and ``GeneralizedOptimizationResult`` models to allow input from dicts (rather than models) in OptKing. Further specialized QCElemental.
* :pr:`34` Schema -- ``ManyBodyResultProperties`` is still only explicitly enumerated up to tetramers, but now it allows through higher-body fields when they match a pattern.
* :pr:`34` Maint -- start testing optimizations through QCEngine.
* :pr:`34` Util -- add ``labeler(..., opaque=False)`` option to produce eye-friendly ``(1)@(1, 2)`` style labels as well as the semi-opaque internal style. Also always convert single ints to tuples now. Function ``delabeler`` can decode the new style.
* :pr:`34` Intf -- sort "core" ``nbodies_per_mc_level`` dictionary so model chemistries are in a predictable 1b, 2b, ..., supersystem order. Check that high-level (different data structure) agrees.
* :pr:`34` Util -- add short ordinal model chemistry level (e.g., §A) to the ``format_calc_plan`` and ``print_nbody_energy`` summaries.
* :pr:`34` Util -- add function ``modelchem_labels`` to associate n-body level, model chemistry level, one-char ordinal modelchem label, and n-bodies-covered modelchem label.
v0.2.1 / 2024-05-14
===================
Enhancements
------------
* :pr:`27` Intf -- move high-level interface from ``qcmb.qcng_computer.ManyBodyComputerQCNG`` to ``qcmb.computer.ManyBodyComputer``. Suppressed remaining printing.
v0.2.0 / 2024-05-13
===================
New Features
------------
* :pr:`25` Schema -- added a new field ``ManyBodyResults.component_results`` to store subsystem ``AtomicResult`` s (or other Result if layered computation). By default this is not stored, but it can be with ``ManyBodyInput.protocols.component_results = "all"``.
* :pr:`25` Schema -- added ``GeneralizedOptimizationInput`` and ``GeneralizedOptimizationResult`` models as temporary extensions of ``OptimizationInput/Result`` when the optimizer can run ``ManyBodyInput`` s through QCEngine, not just ``AtomicInput`` s. Needs special QCElemental, QCEngine, and OptKing to work for now.
Enhancements
------------
* :pr:`22` Intf -- move high-level interface to main directory and remove unused functions. Most common route into interface is now: ``qcmb.ManyBodyComputerQCNG.from_manybodyinput``.
* :pr:`25` Schema -- ``AtomicSpecification.protocols`` set in ``ManyBodySpecification.specification`` will now be observed.
* :pr:`26` Schema -- add ``AtomicSpecification.extras``.
Bug Fixes
---------
* :pr:`25` Schema -- ``ManyBodyKeywords.embedding_charges`` now default to None rather than empty dict.
Misc.
-----
* :pr:`21` Docs -- installation and molecule.
* :pr:`24` Intf -- release "frozen" pydantic on high-level ManyBodyComputerQCNG, so core-interface ManyBodyCalculator can live on the class.
* :pr:`26` Cleanup -- remove most debug printing.
v0.1.0 / 2024-04-24
===================
New Features
------------
* Runs CP, NoCP, VMFC energies, gradients, and Hessians.