Mathematica Version 12.1 has introduced numerous breaking changes (as far as my code base is concerned). Here is a simple example:

ClearAll[sml, mol1, mol2];
sml = "O=C(NCC1=CC(NC(C2=CN=C3C=CC=CN23)=O)=C(C)C=C1)NC4=CC=CC(F)=C4";
mol1 = Molecule[sml];
mol2 = Molecule[sml, IncludeHydrogens -> True];

MoleculeContainsQ[mol1, MoleculePattern[{"C", "H", "H"}, {Bond[{1, 2}], Bond[{1, 3}]}]]
(* Returns False in Version 12.1; used to return True in Version 12.0 *)

MoleculeContainsQ[mol2, MoleculePattern[{"C", "H", "H"}, {Bond[{1, 2}], Bond[{1, 3}]}]]
(* Returns True in Version 12.1 *)

For what it is worth, I consider the behaviour of Version 12.0 to be correct.

This is not the only change. There are many others. But instead of ranting, I would just like to know if there is a way to find out about such changes before uninstalling the old version and installing the new one. Is there a place where Wolfram Research announces API changes and solicits feedback?

Thanks in advance.

  • 1
    $\begingroup$ Report to WRI to get more information. $\endgroup$
    – Edmund
    Mar 19, 2020 at 1:00
  • $\begingroup$ Thanks for the suggestion. I just submitted feedback through Help > Give Feedback. $\endgroup$ Mar 19, 2020 at 1:19
  • 6
    $\begingroup$ I cannot comment about the correctness of the present example, but I do observe that MoleculeContainsQ was marked as Experimental in the 12.0 documentation (and still is in 12.1). This tag indicates increased chance for breaking changes or odd behaviour in general. $\endgroup$
    – WReach
    Mar 19, 2020 at 2:05
  • 3
    $\begingroup$ reference.wolfram.com/language/tutorial/… $\endgroup$
    – ktm
    Mar 19, 2020 at 13:34

1 Answer 1


As posted in the comments, Incompatible Changes since Mathematica Version 1, or in the in-product documentation under tutorial/IncompatibleChanges, is the official list.

The breaking change affecting OP seems to be

A Molecule object constructed from a "SMILES" string will only explicitly contain those hydrogen atoms explicitly included in the input.

So if you enter Molecule["O"] versus Molecule["[H][O][H]"] you get two different representations of the water molecule. This is I think a good change, and makes the created Molecule more consistent with the input, and really should have been the behavior from the start.

Molecule and its accompanying functions are still experimental so that we can fix any flaws in the design. We don't introduce breaking changes lightly, since it has the potential to break user code.

If you would like a molecule pattern that will match a "CH2" group whether or not the hydrogens are explicit, you can use Atom["C","HydrogenCount"->2]. Or use a SMARTS pattern, MoleculePattern["[CH2]"].

  • $\begingroup$ Thanks for the link, I was completely wrong about there not being a page for breaking changes $\endgroup$
    – Szabolcs
    Mar 19, 2020 at 16:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.