master:

 - New Python cookbook script demonstrating molecule atom/bond order canonicalization
 - New Python cookbook script reporting information about detected feature matches between one or more input pharmacophores and a given reference pharmacophore
 - Constructor of class Pharm::PharmacophoreFitScore via a flag now allows to specify whether an on-the-fly performed 3D feature overlap
   perception (prior to score calculation) shall be carried out in 'query mode' or not (before, ftr. mappings were always perceived in non-query
   mode which is still the default)
 - New Python cookbook script demonstrating the alignment of multiple input pharmacophores read from a file to a given reference pharmacophore
 - Constructors of class templates Util::FileDataReader and Util::FileDataWriter now throw a Base::IOError if file opening fails
 - Corrected the calculation of skeletal formula visualization bounding boxes which were too small due to not capturing all rendered graphics primitives
 - Generated SMILES, SMARTS, JME and INCHI output data now, by default, end with a newline character which is more in line with
   user expectations
 - Improved and much more comprehensive Sphinx documentation index
 - Additional Python cookbook script demonstrating the calculation of Kuvek binding pocket shape and electrostatics descriptors
 - New class Descr::KuvekPocketDescriptorCalculator for calculating receptor binding pocket shape and electrostatics descriptors
   according to Kuvek et al.
 - PML data input/output code now reads/writes the value of the pharmacophore feature attribute 'envCompound' (if available)
 - New pharm. feature property Pharm::FeatureProperty::ENVIRONMENT_RESIDUE_INFO plus associated functions
 - Overhaul of the CDPL Python tutorial which is now based on a Jupyter notebook
 - Support for free-threaded CPython builds (V3.13t and V3.14t)
 - New fingerprint/descriptor-based similarity screening command line tool 'SimScreen'
 - Changed the default feature distance bin size of Descr::NPoint3DPharmacophoreFingerprintGenerator instances to 3.0 (before 0.5)
 - Changed the default feature distance bin size of Descr::NPointPharmacophoreFingerprintGenerator instances to 2.0 (before 0.5)
 - Added method Descr::PathFingerprintGenerator::includeHydrogens() (and Descr::PathFingerprintGenerator::hydrogensIncluded())
   which allows to specify whether hydrogen atoms shall be ignored or not
 - Changed the calculation of Manhattan similarity scores so that a value of 1.0 now indicates the highest possible similarity and 0.0 the lowest one
   (before: highest sim. = 0.0, lowest sim. = 1.0)
 - Added method Descr::NPointPharmacophoreFingerprintGenerator::setFeatureFilterFunction() (and Descr::NPointPharmacophoreFingerprintGenerator::getFeatureFilterFunction())
   which allows to set a callback function that tells for each pharm. feature whether it shall be considered for fingerprint generation or not
 - Improved the extraction of ChOX property table view column names from SD-file property record headers
 - Additional Python cookbook script demonstrating the molecule substrucuture editing functionality
 - Additional Python cookbook script demonstrating the perception of functional groups of molecular graphs
 - Additional Python cookbook script demonstrating the generation of visual 3D representations of pharmacophore models
 - Declaration of new type Vis::STLFeatureContainerWriter implementing the output of visual 3D representations of Pharm::FeatureContainer instances in the
   Stereolithography (STL) format
 - Declaration of new type Vis::PLYFeatureContainerWriter implementing the output of visual 3D representations of Pharm::FeatureContainer instances in the
   Polygon File Format (PLY)
 - Declaration of new type Vis::VRMLFeatureContainerWriter implementing the output of visual 3D representations of Pharm::FeatureContainer instances in the
   Virtual Reality Modeling Language 97 (VRML) format
 - Declaration of new type Vis::R3DFeatureContainerWriter implementing the output of visual 3D representations of Pharm::FeatureContainer instances in the
   Raster3D (R3D) format
 - New class template Vis::FeatureContainerObject3DWriter implementing the output of visual 3D representations of Pharm::FeatureContainer instances
   in a supported output format (currently PLY, STL, R3D and VRML)
 - Declaration of new type Vis::STLFeatureContainerOutputHandler mediating the output of visual 3D representations of Pharm::FeatureContainer instances in the
   Stereolithography (STL) format
 - Declaration of new type Vis::PLYFeatureContainerOutputHandler mediating the output of visual 3D representations of Pharm::FeatureContainer instances in the
   Polygon File Format (PLY)
 - Declaration of new type Vis::VRMLFeatureContainerOutputHandler mediating the output of visual 3D representations of Pharm::FeatureContainer instances in the
   Virtual Reality Modeling Language 97 (VRML) format
 - Declaration of new type Vis::R3DFeatureContainerOutputHandler mediating the output of visual 3D representations of Pharm::FeatureContainer instances in the
   Raster3D (R3D) format
 - New class Vis::STLObject3DWriter implementing the output of 3D scene data described by Vis::Object3D instances in the Stereolithography (STL) format
 - New class Vis::VRMLObject3DWriter implementing the output of 3D scene data described by Vis::Object3D instances in the
   Virtual Reality Modeling Language 97 (VRML) format
 - New class Vis::PLYObject3DWriter implementing the output of 3D scene data described by Vis::Object3D instances in the Polygon File Format (PLY)
 - New class Vis::R3DObject3DWriter implementing the output of 3D scene data described by Vis::Object3D instances in the Raster3D (R3D) format
 - Declaration of new type Vis::STLObject3DOutputHandler mediating the output of 3D scene data described by Vis::Object3D instances in the
   Stereolithography (STL) format
 - Declaration of new type Vis::PLYObject3DOutputHandler mediating the output of 3D scene data described by Vis::Object3D instances in the
   Polygon File Format (PLY)
 - Declaration of new type Vis::VRMLObject3DOutputHandler mediating the output of 3D scene data described by Vis::Object3D instances in the
   Virtual Reality Modeling Language 97 (VRML) format
 - Declaration of new type Vis::R3DObject3DOutputHandler mediating the output of 3D scene data described by Vis::Object3D instances in the
   Raster3D (R3D) format
 - Declaration of new type Vis::Object3DWriter for the output of 3D scene data described by Vis::Object3D instances in a supported output format
   (currently PLY, STL, R3D and VRML)
 - Declaration of new type Vis::Object3DReader for reading 3D model data stored in a supported input format (none, currently) into a given
   Vis::Object3D instance
 - New control-parameter default values Vis::ControlParameterDefault::FEATURE_COLOR_TABLE, Vis::ControlParameterDefault::DEFAULT_MATERIAL
   and Vis::ControlParameterDefault::SHOW_FEATURE_CENTERS
 - New control-parameters Vis::ControlParameter::FEATURE_COLOR_TABLE, Vis::ControlParameter::DEFAULT_MATERIAL and
   Vis::ControlParameter::SHOW_FEATURE_CENTERS plus associated functions
 - New data format descriptors Vis::DataFormat::STL, Vis::DataFormat::PLY, Vis::DataFormat::VRML and Vis::DataFormat::R3D
 - New class Vis::FeatureContainerObject3DFactory implementing the creation of a visual 3D representation of Pharm::FeatureContainer instances
 - New class Vis::Object3DFactory defining the common interface of classes which implement the creation of 3D representations (as Vis::Object3D instances)
   of different types of built-in data structures (e.g. Pharm::FeatureContainer, Chem::MolecularGraph, ...)
 - New class Vis::DefaultFeatureColorTable specifying default colors for built-in pharmacophoric feature types
 - New utility functions Vis::subdivideSpherical(), Vis::removeVertexDuplicates(), Vis::calcVertexFromFaceNormals(),
   Vis::translate(), Vis::scale(), Vis::rotateX(), Vis::rotateY(), Vis::rotateZ() and Vis::transform() for the manipulation
   of Vis::TriangleMesh3D instances
 - New class Vis::IcosahedronMesh3D implementing the generation of icosahedron vertices and faces
 - New class Vis::RightFrustumMesh3D implementing the creation of triangle meshes modeling various shapes in the right frustum category
   (arbitary (truncated) pyramids)
 - New class Vis::TorusMesh3D implementing the creation of triangle meshes modeling the shape of a torus
 - New class Vis::TriangleMesh3D used to store the basic data (vertices, faces, vertex normals) of triangle meshes
 - New property default values Vis::Object3DPropertyDefault::SHAPE and Vis::Object3DPropertyDefault::TRANSFORMATION_MATRIX
 - New properties Vis::Object3DProperty::SHAPE, Vis::Object3DProperty::TRANSFORMATION_MATRIX and Vis::Object3DProperty::MATERIAL plus associated functions
 - New class Vis::Shape3DVisitor for the type-safe processing of Vis::Shape3D subclass instances
 - New class Vis::Shape3D serving as base class of data structures implementing the description of particular types of 3D shape geometries
 - New class Vis::Material for the specification of ambient, diffuse, specular color and translucency properties of a 3D shapes's material
 - New class Vis::Object3D which allows to store the description of the geometry of an arbitrary 3D shape together with a transformation matrix and material properties.
   Moreover, Vis::Object3D instances may be used to build a simple 3D scene graph by connecting Vis::Object3D instances in a parent -> child object(s) manner
 - Removed namespace Vis::AtomColorTable
 - New class Vis::DefaultAtomColorTable replacing namespace member Vis::AtomColorTable::ELEMENT_COLORS_2D
 - New control-parameter Chem::ControlParameter::MDL_ENABLE_AROMATIC_BOND_TYPES (plus associated functions) specifying
   what kind of bond type shall be output for aromatic bonds when writing molecular graph data in an MDL CTab based format.
   If the control-parameter is true then on reading the aromaticity flag of bonds with 'aromatic' type will be set to true and false, otherwise
 - The SDF reader now does not raise an exception anymore if the last molecule record lacks a $$$$ delimiter
 - Readers for various text-based file formats now allow the last line of a file to be terminated directly by EOF
 - Added methods to class Chem::CommonConnectedSubstructureSearch that allow to customize the way atom, bond and molecular graph
   match expression functions employed for substructure matching will be retrieved (default: use the expressions provided as properties)
 - Renamed functions Biomol::*PDBIgnoreConectRecordsParameter() into Biomol::*PDBIgnoreCONECTRecordsParameter()
 - Fixed methods write() and writelines() of class Base.IOStream which both failed when being called with an argument of
   type str or sequences thereof
 - New method getbytes() in class Base.StringIOStream that allows to retrieve written data
   as Python bytes object
 - New function Chem::align2DCoordinates() that computes and carries out a transformation which aligns
   2D coordinates of a set of atoms with given reference coordinates in the best possible way
 - New molecular graph property MolProp::MolecularGraphProperty::FUNCTIONAL_GROUPS plus associated functions for the storage of
   perceived functional groups (see below)
 - New class MolProp::FunctionalGroupList plus convencience functions MolProp::perceiveFunctionalGroups()
   that identify and extract functional group substructures of a molecular graph via the algorithm developed by P. Ertl.
   Core atoms/bonds of detected functional groups are made available as a list of Chem::Fragment objects. The name property
   (accessible via function Chem::getName()) of each func. group fragment then provides the generalized form of the
   functional group as a canonical SMILES string
 - New control-parameter Chem::ControlParameter::SMILES_OUTPUT_HYDROGEN_COUNT (plus associated functions) allowing to control whether implicit
   hydrogen count specifications for atoms in brackets shall be written on SMILES output (default: yes)
 - SMILES reading/writing code has been extended to support atoms with the novel type Chem::AtomType::R
 - New atom type constant Chem::AtomType::R for the specification of atoms representing R-groups
 - New option --conj-ring-bond-pattern of command line tool 'TautGen' for enabling (=default)/disabling the new
   conj. ring bond order flipping tautomerization rule (see below)
 - Significant improvement of the tautomer scoring function with focus on the evaluation of hydroxy-pyridine
   containing and highly conjugated molecule tautomers 
 - The command line tool 'TautGen' provides two new options -r and -R that allow control whether input 2D or 3D
   atom coordinates shall be retained (might lead to distorted and/or invalid 2D/3D structures) or removed (default)
   from the generated tautomers
 - The command line tool 'TautGen' now removes all for the sake of processing added explicit hydrogens from the
   generated tautomers before output
 - Added new tautomerization rule id Chem::TautomerizationType::CONJ_RING_BOND_SWITCH
 - New tautomerization rule implementation Chem::ConjugatedRingBondPatternSwitching for flipping the orders
   of bonds in conjugated rings having one or more N, O, S, Se or P substituent(s) bearing at least one hydrogen
 - Support for the display of 2D structure renderings of Chem::MolecularGraph and Chem::Reaction instances in
   Jupyter notebooks
 - New utility functions Vis::prepareFor2DVisualization() that perform 2D visualization specific setup work for
   Chem::MolecularGraph and Chem::Reaction instances
 - New utility functions Chem::editSubstructures() for editing substructures of Chem::Molecule instances (directly
   or as a copy of a provided Chem::MolecularGraph instance). The substructure search and optional exclude pattern(s)
   are specified by SMARTS strings. Multiple search/exclude patterns can be specified as whitespace separated lists
   of the respective patterns. The editing result pattern is provided as a SMILES string (with extensions implemented
   especially for substructure editing)
 - New class Chem::SubstructureEditor for editing the atoms and/or bonds of molecular graph substructures according to
   a specified target substructure template
 - Made the ChEMBL standardization code also work with Chem::MolecularGraph objects if
   standardization shall be performed on a supplied target Chem::Molecule instance
 - Signature of method Base::DataOutputHandler::createWriter(std::iostream&) has been changed to
   Base::DataOutputHandler<T>::createWriter(std::ostream&) in order to support write-only output streams
 - Fixed an issue with the command line tool 'PSDScreen' where the default value of option -u
   was not properly set at program startup. In screening mode 'ALL-MATCHES', multiple program executions
   using the same input files might thus have led to varying number of reported hits 
 - The screening hit rate reported by command line tool 'PSDScreen' now always specifies the number of
   matched unique database molecules in relation to the total amount of screened molecules -
   irrespective of the number of query pharmacophores and screening mode (-m option)
 - Fixed an issue with spiro ring systems in the implementation of the 'extended smallest set of smallest rings'
   perception algorithm
 - C++ standard input, output and error streams (std::cin, std::cout and std::cerr) are now exposed
   as class variables Base.IStream.STD_IN, Base.OStream.STD_OUT and Base.OStream.STD_ERR, respectively
   For example, Base.IStream.STD_IN might be passed as argument to the constructor of a Chem.MoleculeReader
   instance which will then read molecule data from the standard input of the current process
 - Support for the automated generation and installation of a CMake package configuration file that
   significantly lowers the barrier for downstream C++ applications to use functionality provied by the CDPL C++ API

v1.2.3:

 - New control-parameters Chem::ControlParameter::MOL2_READ_PARTIAL_AS_FORMAL_CHARGES and ControlParameter::Chem::MOL2_OUTPUT_FORMAL_CHARGES plus
   associated functions that allow to control whether formal instead of partial charges shall be read from/written to
   MOL2 files
 - Fix for a Base::ItemNotFound exception that gets thrown during the merging of temporary PSD files which occur
   when running the program 'PSDCreate' in multi-threaded mode
 - New class template Descr::BulkSimilarityCalculator for the calculation of multiple query <-> target descriptor
   similarities/distances in a single run 
 - Similarity and distance functions in namespace Descr are now also available in the form of functor classes
 - New similarity and distance functions in namespace Descr applicable to generic mathematical vectors
 - New feature of program 'ChOX' that allows to display structure/reaction data associated
   with the currently shown molecules/reactions

v1.2.2:

 - The command line tool 'PSDCreate' now offers the possibility to process only a subset of the input molecules that
   can be specified by means of a start (option -s) and an end molecule index (option -e)
 - Fixed an issue leading to a segmentation fault in the course of parsing (invalid) SMILES/SMARTS strings that occurs
   if a ring closure at a chiral atom cannot be completed due to either missing or erroneously placed closure numbers
 - Added new setter/getter method pair outputZeroBasedIndices(bool)/outputZeroBasedIndices() to class Pharm::FileScreeningHitCollector
   that allows to control whether any indices (mol. index, conf. index, etc.) stored to mol. SD entries shall be zero- or one-based
 - The command line tool 'PSDScreen' now offers a new option -r that allows to specify a report file in which
   sceening hit information gets written as lines of tab-separated values (without any mol. structure data).
   The new option can be used in additon or instead of option -o which, as before, specifies an output file for saving
   structural hit molecule data
 - Reduction of RAM consumption when querying pharmacophore feature count data stored in PSD files
 - Reduction of pharmacophore screening database (PSD) file sizes by ~55% due to the introduction of more compact
   molecule/pharmacophore data storage formats
 - Fixed a bug in the command line tool 'StructGen' that led to process termination caused by a Base::ItemNotFound
   exception which was thrown when exceeding the set time limit without having generated a set of 3D atom coordinates

V1.2.1:

 - New implementation of Greene's algorithm for the calculation of atom hydrophobicities which
   is now more correct and ~100 times faster than the previous one
 - All disk space consumed by an existing pharmacophore screening database (PSD) that is specified as
   destination file for a new database to be created by the program 'PSDCreate' is now
   completely freed and not just internally marked as unallocated space
 - Fixed a bug in function Pharm::removePositionalDuplicates(Pharmacophore&) that resulted in the
   duplicate features (that should be removed) to be retained instead of the non-duplicated ones
 - Sphinx documentation updates

V1.2.0:

 - Added new setter/getter method pair groupReferenceFeatures()/referenceFeaturesGrouped() to class Pharm::PharmacophoreFitScore for controlling
   whether multiple directed features of the same type at the same position shall be considered as independent individual features or as different
   orientation options of a single feature
 - New utility functions Pharm::clearOrientations(), Pharm::removePositionalDuplicates(), Pharm::removeFeaturesWithType() for the
   manipulation of pharmacophore data
 - Fixed an issue concerning the calculation of pharmacophore fit scores that previously also considered mappings
   of multiple query features to the same target feature. Now, more correctly, the best score that could be calculated
   for all possible one-to-one feature mappings is reported.
 - Improved the visual appearance of command line tool progress bars
 - Sphinx documentation updates
 - New command line tool 'SubSearch' for performing substructure searching on molecular data files with support
   for multiple query substructures and customizable logical expressions
 - Unified the naming of control-parameters and associated functions in namespaces Chem, Pharm, Grid, and Biomol
 - Improved support for different Python installation flavors on macOS (the help provided by Yakov Pechersky is greatly appreciated)
 - Added support for the I/O of molecular structure data in CML format
 - Fallback perception of atom/bond stereochemistry from input 3D coordinates during conformer generation molecule preprocessing
   now does not require the presence of explicit hydrogens anymore
 - Renamed function MolProp::isCarbonylLikeAtom() into MolProp::isCarbonylLike()
 - Renamed function MolProp::isAmideCenterAtom() into MolProp::isAmideCenter()
 - New atom classification functions MolProp::isBridgehead() and MolProp::isSpiroCenter()
 - CDPL Python bindings wheel files for Linux are now built on manylinux_2_28
 - Added support for the I/O of molecular structure data in mmCIF format
 - Added new constants to namespace Biomol::ResidueType which now fully cover the set of residue types defined by the mmCIF/PDBX specification
 - Added method to classes Biomol::ResidueDictionary/Biomol::ResidueDictionary::Entry for the lookup of residue parent structure information
 - Added method to classes Biomol::ResidueDictionary/Biomol::ResidueDictionary::Entry for the lookup of residue single letter codes
 - Renamed some previously PDB format-specific control-parameters and associated functions in namespace Biomol for their
   future dual-use by the mmCIF data I/O code
 - Added new control-parameters, atom properties and associated functions to namespace Biomol
 - Updated embedded MessagePack library to version 6.1.1
 - Updated embedded SQLite3 database to version 3.46.1
 - Updated embedded MMTF library to version 1.1.0
 - Updated PDB residue dictionary which now features 44906 chemical components
 - CDPL Python bindings now support NumPy V>=2.0
 - Removed function Biomol::convertMOL2ToPDBResidueInfo(): if possible, the conversion of MOL2 substructure to
   PDB residue/sequence information is now carried out automatically
 - Fixed a bug in program 'ChOX' that prevented the successful saving of data to PSD files
 - Program 'ChOX' now uses the same file open/save dialog instance for all opened main windows 
 - New class Chem::MultiSubstructureSearch for performing substructure searching with multiple query substructures that
   can be combined in the form of boolean expressions
 - Program 'ChOX' now supports basic cut/copy/paste as well as drag and drop operations
 - New feature of the program 'ChOX' that allows to perform substructure searching with logical combinations of SMARTS patterns
 - New feature of the program 'ChOX' that allows to highlight substructures defined by SMARTS patterns
 - New classes Descr::NPoint2DPharmacophoreFingerprintGenerator and Descr::NPoint3DPharmacophoreFingerprintGeneratorfor
   for the generation of variably sized hashed 2D and 3D pharmacophore fingerprints
 - Removed methods setNumBits() and getNumBits() in class Descr::PathFingerprintGenerator (fp-length now
   implicitly given by the size of the bitset provided as argument to method generate())
 - New class Descr::PubChemFingerprintGenerator for the generation of 881 bit PubChem fingerprints
 - New class Chem::ExtendedSSSR for the perception extended smallest sets of smallest rings
 - The SDF reader now also accepts input data that do not end with a newline character
 - Made the MOL2 reader implementation more tolerant regarding missing sections
 - Fixed missing support for certain chemical element symbols in class Chem::SMARTSMoleculeReader
 - Extended the set of supported chemical elements to atomic number 114
 - New class Descr::MACCSFingerprintGenerator for the generation of 166 bit MACCS key fingerprints
 - Fixed a bug in Math::RegularSpatialGrid that caused an erroneous transformation of world to grid-local coordinates
 - Fixed a problem in Chem::RECAPFragmentGenerator that led to the generation of too few fragments for H-depleted molecules
 - Fixed a problem in Chem::BRICSFragmentGenerator that led to the generation of too few fragments for H-depleted molecules
 - Control-parameter Vis::ControlParameter::BACKGROUND_COLOR was replaced by Vis::ControlParameter::BACKGROUND_BRUSH which now allows to also
   specify a background fill pattern (see Vis::Brush) for 2D structure renderings
 - New unit test case for Vis::TextBlockPrimitive2D and CDPL::Vis test case updates
 - Vis::CairoRenderer2D now supports the rendering of overlined, underlined and striked-out text
 - Fixed an issue with the calculation of text bounds by Vis::CairoFontMetrics and Vis::QtFontMetrics
   that led to too small bounding boxes in the presence of leading and/or trailing whitespace
 - Updated the internally used 'rapidxml' XML-parser library to the lastest version and fixed an issue with
   whitespace-only data elements that were missing in the generated DOM-trees
 - New 2D graphics primitive Vis::TextBlockPrimitive2D for the rendering of multi-line text blocks supporting
   several options for the styling of individual text fragments
 - Support for setting the image output scaling factor in the program 'ChOX'
 - New control-parameter Vis::ControlParameter::OUTPUT_SCLAING_FACTOR that allows to achieve higher resolutions of 2D structure/reaction
   depictions saved in pixel-based output formats
 - Fixed an issue in program 'ChOX' where the background color setting of 2D structure/reaction depictions was ignored on
   file output
 - New class Vis::StructureGridView2D for the visualization of multiple molecules as 2D structure diagrams 
   arranged in a grid of arbitrary size
 - Support for atom and bond highlighting in 2D structure/reaction depictions
 - Fixed several minor bugs in Python example scripts
 - Support for fully customizable atom and bond labels in 2D structure/reaction depictions

V1.1.1:

 - Significantly improved the generation of 2D coordinates for macrocyclic structures
 - Fixed an issue with the generation of conformers under application of a fixed substructure template where the generated
   conformers sometimes displayed the mirror image of the specified 3D template structure
 - The command line tools 'structgen' and 'confgen' erroneously used the already reserved letter 'p' as shortcut for
   the option '--fixed-substr-min-atoms'. The new shortcut is '~'
 - Support for Python version 3.12 in Manylinux2014-based pip package builds
 - Rewrote code that uses the boost filesystem library to use C++17 equivalents (conditional, only if a proper std::filesystem
   implementation is available)
 - Compiling CDPKit now requires a compiler with C++17 support

V1.1.0:

 - The tool 'tautgen' provides two new tautomer generation modes BEST_SCORING and BEST_SCORING_UNIQUE
   (the new default mode) for generating only the chemically most reasonable tautomers
 - New getter/setter method pair in class Chem::TautomerGenerator that allows to suppress the output of generated tautomers
   which represent just a different resonance structure of a previously reported tautomeric form
 - Overhaul of the tautomer generation code for increased efficiency and flexibility
 - Documentation updates and corrections
 - Versatile new Python example script for database preparation
 - New Python example script demonstrating how the torsion driving functionality can be used for conformer sampling
 - Fixed bugs in classes Chem::MaxCommonAtomSubstructureSearch and Chem::MaxCommonBondSubstructureSearch that led to a
   loss of expected matches
 - The visual molecule and reaction data inspection tool 'ChOX' now allows to display atom and bond configuration labels
 - The 2D molecule structure rendering code (implemented by class Vis::StructureView2D) now
   allows to display atom and bond configuration labels
 - Full implementation of the CIP sequence rule stack for the correct labeling of atom and bond stereocenters
 - New 3D structure generator feature that allows to enforce a particular 3D structure for defined parts of the input molecules
 - New conformer generator feature that allows to specify substructures of the input molecules that
   shall adopt a particular conformation which is then kept 'fixed' during conformer generation
 - Renamed all ForceField::MMFF94XXXInteractionData data structures into ForceField::MMFF94XXXInteractionList
   (XXX = force field interaction type)
 - New class ForceField::ElasticPotential plus elastic potential energy and gradient calculation functions
 - Conformer generator settings now allow to specify rotatable bond count dependent values for RMSD threshold, energy window and
   max. output ensemble size
 - The output conformer ensemble compilation process now strives for higher energetic diversity among the picked conformers which, on average,
   leads to higher accuracy in the reproduction of experimental structures
 - Update of the torsion library used for systematic conformer generation
 - The pharmacophore screening application 'psdscreen' provides a new option '--unique-hits'
   which enforces that a database molecule matched by multiple query pharmacophores is saved only once to the output hit list
 - Fix for a bug in the SMARTS parser that led to the storage of wrong bond directions
 - Bond direction specifications (up/down) in SMILES and SMARTS strings are now correctly interpreted
 - Support for reading/writing molecular structures in XYZ format 
 - Systematic conformer sampling speed optimizations
 - Reduction of the memory footprint of the conformer generation procedure which could become unacceptably large
   under some circumstances
 - Fixed a bug that may lead to the generation of conformers with wrong geometries at exocyclic double bonds
 - Refactoring of stereochemistry related code
 - New command line application 'isogen' for the enumeration of R/S and E/Z stereoisomers of molecules
 - New class (Chem::StereoisomerGenerator) for the exhaustive enumeration of R/S and E/Z stereoisomers
 - New 2D drawing primitives (Vis::Path2D and Vis::PathPrimitive2D) and support for clipping operations
   (class Vis::ClipPathPrimitive2D)
 - Fixed a bug in the 'shapescreen' tool that led to the calculation of erroneous similarity scores
   when option '--score-only' was specified
 - Fix for a minor bug that affected the indentation of SD-file property entries
 - New class (Chem::BemisMurckoAnalyzer) for the extraction of Bemis-Murcko scaffolds
 - New CDPL::Chem functions for the alignment of conformers
 - Function overload resolution order fixes in the CDPL.Math Python package
 - Prevented the throwing of exceptions when the env. variable LC_ALL has not been initialized
 - Python exports of Util::Map and Util::MultiMap do not provide the properties 'keys', 'values', and 'entries' anymore.
   They were replaced by the corresponding methods keys(), values() and items()
 - MolProp::getAtomCount() function has been extended by a 'strict' argument which, if set to 'false', instructs
   the accounting procedure to regard the meaning of generic atom types (e.g. any halogen)
 - New utility functions Chem::calcBasicProperties() enabling a more comfortable initialization of Chem::MolecularGraph
   and Chem::Reaction instances for further processing
 - CDPL Python bindings code cleanup
 - CDPL API cleanup
 - When deep copying Chem::Reaction or Chem::Molecule instances, values of properties referencing atoms and/or bonds (e.g. stereodescriptors, SSSR)
   now get automatically translated to values referencing the corresponding atoms/bonds of the copying target
 - The calculation of GRAIL descriptors (classes GRAIL::GRAIL(X)DescriptorCalculator) now only considers heavy atoms which do not represent
   a complementary feature type in the calculation of environment HBA/HBD occupation scores 
 - Class GRAIL::GRAILDescriptorCalculator now calculates a shorter descriptor (35 elements) with
   not further subdivided H-bond donor/acceptor feature types
 - Class GRAIL::GRAILDescriptorCalculator renamed into GRAILXDescriptorCalculator

V1.0.2:

 - Manylinux2014 wheel files now support Python3.11
 - Added support for building CDPL Python bindings wheel files under Windows
 - Build system cleanup
 
V1.0.1:

 - Added support for building manylinux2014 compliant CDPL Python bindings wheel files
 - Documentation updates

V1.0.0:

 - Initial release
