-----
Added
.....
- ``Molecule``:
- Bond stereopermutator addition and removal functions
- Manual atom stereopermutator thermalization control
- ``Graph``: Added modifying functions to the interface for stand-alone class use
- Graph algorithms
- Ranking equivalent groups and ranking distinct atoms algorithms exploiting
ranking results to classify chemical equivalence.
- Shortest path generator between vertices in the graph
- Edit distance. Algorithm to calculate minimal set of vertex and edge
alterations to transform one graph into another.
- Reaction edit distance. Variation of the graph edit distance algorithm that
conserves element types. Also adds an associated function that plots the
edits.
- Conformer deduplication: More ``Relabeler``-related functions
- Experimental SMILES emitter: ``IO/SmilesEmitter.h``
- Limited support for periodic boundary conditions via
``Utils::PeriodicSystem``. Periodic systems can be interpreted, canonicalized
and serialized, but not conformer generated. Ranking across boundaries is yet
unsupported.
- Python bindings:
- Added modifying functions to ``Graph``
- Direct copying support for ``Molecule`` instead of via pickling
- Added build-time generation of typing stubs with pybind11-stubgen
Changed
.......
- Graph and Molecule are now implementations of a common interface for graph
information and modification. This interface might be expanded in the future.
- More colorful graphviz rendering for elements
- Conan: Better integration with community packages. No longer require full CMake
from all dependencies but follow conan `packaging philosophy <https://github.com/conan-io/conan-center-index/blob/master/docs/faqs.md#why-are-cmake-findconfig-files-and-pkg-config-files-not-packaged>`_.
- CMake: option ``MOLASSEMBLER_PARALLELIZE`` is now ``SCINE_PARALLELIZE`` to
follow SCINE convention.
- Interpretations without bond orders infer bond orders in binary fashion from
Utils' BondDetector instead of from UFF parameters
- Bond stereopermutator alignment:
``BondStereopermutator::Alignment::BetweenEclipsedAndStaggered`` now generates
the same amount of alignments as
``BondStereopermutator::Alignment::Eclipsed``, not twice as many.
- Auxiliary library ``Stereopermutations``
- Refactor ``Stereopermutation``'s abstract characters to a strong index type,
``Rank``. Also affects ``Composite``
- Auxiliary library ``Temple``
- Adds a permutation type, and a closely related strong index permutation
- Refactor ``map`` to be able to apply it to tuples and arrays, too.
- Clean up ``ContainerTraits.h``
- SMILES parser
- Parsing errors as part of exception string, not written to stdout
- Perfect matching of aromatic subgraphs, error reporting
- Fix valence filling bug for atom types with multiple valid valences
- Python bindings
- Altered name of ``ChiralStatePreservation`` enum member from ``None`` to
``DoNotPreserve`` (the former is a reserved keyword)
- Better automatic type signature annotations in docstrings
- Mostly internal refactors with strong indexes for more type safety handling
permutations mapping ``SiteIndex``, ``Stereopermutation::Rank`` and
``Shapes::Vertex``. Sole exception: The exposed
C++ ``AtomStereopermutator::ShapeMap`` type, though the API for the previous
and current type are nearly identical.
Deprecated
..........
- ``Graph`` properties ``N`` and ``B`` for the number of atoms and the number of
bonds have been deprecated in favor of new ``V`` and ``E`` properties in order
to match complexity annotations and single-letter object properties
- ``StereopermutatorList`` method ``try_remove`` is deprecated in favor of
``remove``, which now behaves as ``try_remove`` would (no throwing).
- Several ``AtomStereopermutator`` methods have been deprecated in favor of
refactors with other function arguments not tightly coupled to the ``Graph``
class, permitting stand-alone class use
Removed
.......
- Several constant global data variables in the private API have been replaced
with stateless functions or function-local caches.
- Constexpr shape property generation: It was clang-only and provided no
tangible performance benefits. Best code is no code. Got rid of a few global
variables in the process.
Fixed
.....
- Conformer generation: Removed an incorrect check for non-terminal vertices
without an atom stereopermutator failing in some haptic cases
- Permutator propagation:
- Fixed missing propagation of atom stereopermutator placement and re-keying
the atom stereopermutator map in StereopermutatorList
- Add missing propagation of bond stereopermutator state on vertex removal
- Trial stereopermutation vertex links weren't permuted along with the site
indices
- Directed conformer generation: Fixed incorrect precondition check with
unassigned stereopermutators
- Python bindings' ``interpret.interpret`` has been renamed to an
``interpret.molecules`` overload as originally intended.
- Shape mapping generator between the same two shapes did not return the
identity mapping