12. Changes

12.1. v0.15.0 (2024-01-26)

12.1.1. Incompatible Changes

  • The graphs created by dg::Builder::addAbstract()/DGBuilder.addAbstract() will no longer be empty, but have a single vertex with the label set to the identifier given in the description.

  • Repeated calls to dg::Builder::addAbstract()/DGBuilder.addAbstract() will no longer create subnetworks independently, but will act as if a single call was made with a concatenation of the inputs.

  • CMake, change the option BUILD_TESTING_SANITIZERS to BUILD_WITH_SANITIZERS and default it to OFF. It did not cause libraries to be build with sanitizers as promised. Now it does, and is therefore not enabled by default.

  • rule::Composer::eval()/RCEvaluator.eval() now by default prunes duplicate rules. The old behaviour can be obtained by setting the new parameter onlyUnique to false.

12.1.2. New Features

12.1.3. Bugs Fixed

12.2. v0.14.0 (2022-11-29)

12.2.1. Incompatible Changes

Doc, several pages have changed URL:

  • libmod/libmod.html to libmod/index.html

  • pymod/pymod.html to pymod/index.html

  • postmod/postmod.html to postmod/index.html

  • modWrapper/modWrapper.html to exe/index.html

  • epim/epim.html to epim/index.html

  • dataDesc/dataDesc.html to formats/index.html

  • dgStrat/dgStrat.html to dgStrat/index.html

  • As default, a Python package is now installed with pip which enables import of mod without extra PYTHONPATH manipulation. This may potentially clash with other packages of the same name. Use -DBUILD_PY_MOD_PIP=off for CMake to disable this (see Compiling from Source).

  • Due to a change in escaping of # characters in DG vertex/hyperedge labels when printing, some custom labels with additional escaping may need adjustment. See also the bug fix entry regarding this.

  • Bump Boost version required to 1.76 or higher to avoid an incompatibility with Python 3.10 (https://github.com/boostorg/python/pull/344).

12.2.2. New Features

12.2.3. Bugs Fixed

12.3. v0.13.0 (2021-07-08)

12.3.1. Incompatible Changes

12.3.2. New Features

12.3.3. Bugs Fixed

12.3.4. Other

  • Test, set C++ standard in CMake tests.

  • Doc, fix description of RCExpExp and RCExpComposeCommon.

  • Doc, for libMØD classes, make a synopsis with links to declarations.

  • Doc, fix documentation for post::makeUniqueFilePrefix() so it is documented to be in namespace post.

  • Docker, for building the Ubuntu image, download Boost from the new URL.

  • Conda, require a newer Graphviz version with rsvg from conda-forge instead of custom version.

  • Refresh the messages from and the documentation on The Wrapper Script.

  • Doc, clarify use of pip may need --user for home folder installation.

  • Doc, properly document that a CWDPath is a valid argument for

  • Doc, clarify conditions on methods in dg::DG/DG regarding “hasActiveBuilder” and “isLocked”.

12.4. v0.12.0 (2021-01-18)

12.4.1. Incompatible Changes

12.4.2. New Features

  • A pre-compiled Conda installation is now available on Linux, see Installation and https://anaconda.org/jakobandersen/mod.

  • Added new higher-level installation instructions at Installation, with documentation for how to install via Conda and using the Docker image.

  • Update bindep.txt and Quick Start guide for Arch.

  • Add Brewfile to to make installation of dependencies much easier on macOS.

  • Improved verbose output from “add” strategies during dg::Builder::execute()/DGBuilder.execute().

  • Improved rule application performance when evaluating rule strategies and executing dg::Builder::apply()/DGBuilder.apply().

  • Added a relaxed mode to dg::Builder::apply()/DGBuilder.apply() via the onlyProper parameter.

  • Add missing graph attributes to vertices and edges of the four graph interfaces of Rule.

  • Add new class graph::Union/UnionGraph.

  • Improve handling of pre-compiled Latex format files used in the post-processor (thanks also to Nikolai Nøjgaard):

    • Add build option to not install the file during normal installation. See -DBUILD_POST_MOD_FMT in Installation.

    • Teach the post-processor to dynamically compile the format file if it is not installed.

    • Add options mod_post --install-format and mod_post --install-format-sudo for installing/updating the pre-compiled format file after MØD was installed. This can be used on an installation configured with -DBUILD_POST_MOD_FMT=off or for resolving a known issue.

  • Make AtomData/AtomData LessThanComparable.

  • Make build work on macOS and add installation instructions.

  • Rule composition: when using rcCommon, skip duplicate overlaps yielded by the underlying enumeration algorithm.

12.4.3. Bugs Fixed

12.4.4. Other

  • Doc, rearrange and deduplicate documentation for graph interfaces in PyMØD. Introduce the Protocols section which documents common protocols that several classes implement. The documentation of the following classes has been simplified by mostly referring to these protocols:

  • Doc, improve documentation of the graph interfaces of Rule.

12.5. v0.11.0 (2020-08-31)

12.5.1. Incompatible Changes

12.5.2. New Features

12.5.3. Bugs Fixed

12.5.4. Other

12.6. v0.10.0 (2020-02-05)

12.6.1. Incompatible Changes

12.6.2. New Features

12.6.3. Bugs Fixed

12.6.4. Other

  • Various fixes for documentation formatting including new themeing.

  • Installation, highlight the more relevant CMAKE_PREFIX_PATH instead of CMAKE_PROGRAM_PATH.

  • Bump recommended lower bound on GCC version to 6.1 in the documentation.

  • Updated documentation for mod::Derivation/Derivation.

  • Documentation, added explicit example section.

12.7. v0.9.0 (2019-08-02)

12.7.1. Incompatible Changes

  • Change to CMake as build system. See Installation for how to build the package, or used it as a submodule in another CMake project.

  • Now requires v0.4 of GraphCanon (and PermGroup).

  • dg::DG::getGraphDatabase() now returns a std::vector instead of a std::unordered_set.

  • Hide internal symbols in the library to increase optimization opportunities, and hide symbols in library dependencies. Libraries linking against libmod may stop linking, but configuration options has been added to disable symbol hiding.

12.7.2. New Features

12.7.3. Bugs Fixed

  • Fixed off-by-one error in DG dump loading, dgDump/dg::DG::dump.

  • Fixed issues with auto in function signatures which is not yet in the C++ standard.

12.7.4. Other

12.8. v0.8.0 (2019-04-04)

12.8.1. Incompatible Changes

  • Now requires v0.3 of GraphCanon (and PermGroup).

  • graph::Graph::getMolarMass/Graph.molarMass has been removed.

  • Python interface: remove auto-generated hash-functions from all classes. Note, most code broken by this was already silemtly broken.

  • Python interface: consistently disable all custom attributes on all classes.

  • Removed dg::Strategy::GraphState::getHyperEdges/DGStratGraphState.hyperEdges. Use the graph interface of dg::DG/DG instead.

  • All atoms, including hydrogens, are now present with ids in strings from graph::Graph::getSmilesWithIds()/Graph.smilesWithIds.

  • dg::DG::print()/DG.print now returns a pair of strings, instead of just one string. The first entry is the old return value. The second entry is the tex-file to depend on for layout coordinates.

  • SMILES parsing: disallow isotope 0 as it is equivalent to not specifying an isotope.

  • All classes in the Python interface without a custom hash function has their hash function removed. This is to prevent inconsistencies between hash and equality.

12.8.2. New Features

12.8.3. Bugs Fixed

  • Throw InputError/InputError when loading a DG dump when a rule in the dump can not be linked to a rule from the user.

  • Fix molecule decoding of atoms with negative charge and a radical.

  • Fix dangling reference bug in first-order term handling.

  • Fix inifiinite loop bug in first-order term handling.

  • Remove extraneous template parameter lists to make it compile on GCC 8.

  • Fix the documentation of Graph.minExternalId, Graph.maxExternalId, Rule.minExternalId, and Rule.maxExternalId. It was not being rendered.

  • Fixed documentation of the constructor for AtomData.

  • Fix dangling references in morphism callbacks.

  • Make sure Open Babel is not called in some cases where it is not needed.

  • Find the library file for Boost.Python for Boost >= 1.67.

  • Fix ambiguity between variadic arguments and function parameter packs, making term morphisms and stereo morphisms slow.

  • Removed sanity check from GraphDFS loading which dominated the run time.

  • Document inputGraphs and inputRules.

12.8.4. Other

  • Now compiles with -fno-stack-protector (some OS distributions messes with default flags).

  • The Makefile from mod --get-latex now cleans .vrb, .snm, and .nav files as well.

12.9. v0.7.0 (2018-03-08)

12.9.1. Incompatible Changes

  • Boost >= 1.64 is now required.

  • Two new libraries, GraphCanon and PermGroup, are now required dependencies.

  • Sphinx 1.7.1 is now required for building the documentation.

  • dg::DG::HyperEdge::print()/DGHyperEdge.print now also takes an argument for colouring vertices/edges that are not matched by the rule. The default is now that matched vertices/edges are the default colour, while those that are not matched are grey.

  • Most of the outer interface headers have now been moved to subfolders, and their content has been moved to corresponding namespaces. Several classes has been slightly renamed during the move, and some headers has been split into multiple header files.

  • The previously deprecated class DerivationRef has now been removed along with DG.derivations in the Python interface.

  • The previously deprecated method DG.vertexGraphs in the Python interface has been removed.

12.9.2. New Features

  • Added functions to map external ids of graphs and rules to internal vertices.

  • Added functions to get vertex coordinates for rules.

  • dg::DG::print()/DG.print now returns the name of the PDF-file that will be created in post-processing.

  • Add dg::Printer::setWithInlineGraphs()/DGPrinter.withInlineGraphs to input raw tex files for graphs in nodes instead of compiled PDFs. The generated tex code for the graphs is different to ensure unique Tikz node names.

  • Add inline as a special argument for the graph Latex macros to input the raw tex file, instead of including a compiled PDF.

  • Add graph::Graph::getSmilesWithIds()/Graph.smilesWithIds for getting a string annotated with the internal vertex ids in form of the class labels.

  • The automorphism group of each graph is now available.

12.9.3. Experimental New Features

12.9.4. Bugs Fixed

  • Multiple rules for the same derivation is now properly recorded.

  • Fix documentation of rule::Rule::makeInverse()/Rule.makeInverse, it throws LogicError/LogicError not InputError/InputError.

  • Set the name of a rule from rule::Rule::makeInverse()/Rule.makeInverse to something more descriptive.

  • Fix graph/rule depiction bug with non-zero rotation.

  • Fix DG dump loading to also load derivations with no rules.

  • Don’t crash when trying dg::DG::findVertex()/DG.findVertex with a graph not in the derivation graph.

  • Don’t crash when trying to print derivations with multiple rules.

  • Fix documentation formatting errors.

  • #2, throw exceptions from dg::DG::ruleComp/dgRuleComp and dg::DG::calc/DG.calc when isomorphic graphs are given.

  • Throw more appropriate exception if dg::DG::print()/DG.print is called before dg::DG::calc/DG.calc.

  • Various issues in graph/rule depiction related to positioning of hydrogens, charges, etc.

  • Build system: give better error messages if a file is given where a path is expected.

  • The produced SMILES strings are now truely canonical, as the new GraphCanon library is used.

  • Fix AtomData/AtomData to properly print radicals on uncharged atoms.

  • Throw more friendly exceptions when loading graphs/rules that have loop/parallel edges.

12.9.5. Other

  • The documentation now has a “Known Issues” section, describing an issue where post-processing may fail if pdflatex has been upgraded after installation

12.10. v0.6.0 (2016-12-22)

12.10.1. Incompatible Changes

  • A C++14 compiler is now required (e.g., GCC 5.1 or later).

  • The required Boost version is now either 1.59 or at least 1.61. Version 1.60 do not work due to https://github.com/boostorg/python/issues/56.

  • Make filenames in post-processing more Latex friendly.

  • Rules specified in GML using constrainAdj must now enclose the operator in double quotes.

  • DG: remove most of the interface related to DerivationRef. Use the graph interface instead. E.g.,

    • Deprecate DerivationRef. They now interconvert with dg::DG::HyperEdge/DGHyperEdge.

    • Change DG::getDerivationRef into dg::DG::findEdge()/DG.findEdge.

    • Make DG.derivations return the edges instead in the Python interface. It is removed in the C++ interface. It will be removed from Python in the future.

    • Remove DG::inDerivations and DG::outDerivations.

    • Deprecate DG::vertexGraphs in Python, remove in C++.

  • Move the graph interface for DG and Graph into separate headers: DGGraphInterface.h and GraphGraphInterface.h.

  • Move GraphPrinter into a separate header.

  • Move DGPrinter and DGPrintData into a separate header.

  • All SBML features have been removed from the library.

  • The deprecated DG::printMatrix function has been removed.

  • dg::DG::calc/DG.calc will no longer print a message when it is done.

  • dg::DG::print()/DG.print by default now only prints the hypergraph rendering. (For now, set Config::DG::printNonHyper to enable printing of the non-hypergraph rendering)

  • graph::Graph::print()/Graph.print and rule::Rule::print()/Rule.print will now emit only one depiction when the two printers are equal.

  • rule::Rule::print()/Rule.print, change the default colours used to indicate changes. Now different colours are used in L, K, R.

  • DGHyperEdge.print, change the default match colour.

  • Add < operator to vertices and edges of Graph, Rule, and DG.

12.10.2. New Features

  • rule::Rule::makeInverse()/Rule.makeInverse.

  • Reimplementation of GML parsing. It is now less strict with respect to ordering.

  • Rule application constraint that checks the shortest path between two given vertices.

  • Interactive mode for the wrapper script (option -i). It will use IPython as interpreter if it is available.

  • The molecule model now includes radicals. The SMILES format has been extended to support radicals as well.

  • Plugin infrastructure to load additional Python modules when using the wrapper script.

  • Graph interface for rules: for a rule \(L \leftarrow K\rightarrow R`\), the three graphs can be accessed. The rule it self acts as the graph that is the pushout of the rule span.

  • Graph loading: the ids used in GML and GraphDFS, as well as the class labels in SMILES can now be converted into vertices for the loaded graphs. If the class labels of a SMILES string are not unique, then none of them are available for querying.

  • Add -v as alias for --version in the wrapper script.

  • Add quite mode, -q, to the wrapper script.

  • Add graph::Printer::setRotation()/GraphPrinter.rotation. Internally computed coordinates will be rotated by the set amount of degrees.

12.10.3. Bugs Fixed

  • operator<< for Derivation: only try to print the rule if there is one.

  • Properly throw an exception when graph GML parsing fails.

  • Don’t throw an exception while throwing an exception when graphs are disconnected.

  • Fix bug in checking of certain constrainAdj during certain types of rule composition.

  • Properly handle empty vertex/hyperedge ranges for DGs. Thanks to Robert Haas for reporting.

12.11. v0.5.0 (2016-03-07)

Initial public version.