Problemumgehung für eine wichtige Änderung in ConnectedMoleculeComponents von 12.1.1 auf 12.2.0

Dec 18 2020

Der folgende Code wurde verwendet, um zu arbeiten Mathematica Version 12.1.1:

ClearAll[mol];
mol = Molecule["NC(Cc1ccc(O)c(I)c1)C(=O)O", IncludeHydrogens -> True];

{mol, {"DeleteAtom", 2}} //
Apply[MoleculeModify] //
ConnectedMoleculeComponents

Das Atom mit Index 2 ist unten hervorgehoben:

In Mathematica Version 12.2.0funktioniert der Code bis zum Aufruf von Apply[MoleculeModify]. Beim Aufrufen ConnectedMoleculeComponentserhalte ich jedoch folgende Fehler:

Während der Auswertung von In [415]: = KeyMap :: invak: Das Argument> LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation] ist keine> gültige Zuordnung.

Während der Auswertung von In [415]: = KeySort :: invrl: Das Argument KeyMap [FromDigits] [LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation]] ist keine gültige Zuordnung oder Liste von Regeln.

Während der Auswertung von In [415]: = KeyValueMap :: invak: Das Argument KeySort [KeyMap [FromDigits] [LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation]] ist keine gültige Zuordnung.

Während der Auswertung von In [415]: = Molecule :: nintrp: LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [Atom [Missing [KeyAbsent, getAtomsList]]] kann nicht als Name oder chemischer Bezeichner interpretiert werden.

Out [417] = MoleculeModify [Molecule [{"N", "C", "C", "C", "C", "C", "O", "C", "I", "C", "C", "O", "O", "H", "H", "H", "H", "H", "H", "H", "H", "H"}, { Bindung [{2, 3}, "Single"], Bindung [{3, 4}, "Aromatisch"], Bindung [{4, 5}, "Aromatisch"], Bindung [{5, 6}, "Aromatisch" ], Bindung [{6, 7}, "Single"], Bindung [{6, 8}, "Aromatisch"], Bindung [{8, 9}, "Single"], Bindung [{8, 10}, " Aromatisch "], Bindung [{11, 12}," Doppel "], Bindung [{11, 13}," Einfach "], Bindung [{10, 3}," Aromatisch "], Bindung [{1, 14} , "Single"], Bond [{1, 15}, "Single"], Bond [{2, 16}, "Single"], Bond [{2, 17}, "Single"], Bond [{4, 18}, "Single"], Bond [{5, 19}, "Single"], Bond [{7, 20}, "Single"], Bond [{10, 21}, "Single"], Bond [{ 13, 22}, "Single"]}, {}], {"ExtractParts", {{2, 3, 4, 5, 6, 7, 8, 9, 10, 16, 17, 18, 19, 20, 21}, {11, 12, 13, 22}, {1, 14, 15}}, ValenceErrorHandling -> False]

Als ich mich das letzte Mal über fehlerhafte Änderungen in der neuesten Version beschwerteMathematica Version 12.1.0 , wurde ich ermahnt, zuerst den Hinweis auf inkompatible Änderungen zu überprüfen . Dieses Mal habe ich den Link überprüft. Aber es gibt nichts an diesem Link weiter ConnectedMoleculeComponents.

Meine Fragen sind also:

  1. Gibt es eine Problemumgehung für dieses Problem?
  2. Gibt es eine Hoffnung, Wolfram Research zu beeinflussen, um eine gründlichere Liste der wichtigsten Änderungen zu veröffentlichen, vorzugsweise Wochen vor der Veröffentlichung der neuen Version?

Vielen Dank im Voraus für Ihre Hilfe.

Antworten

8 JasonB. Dec 18 2020 at 09:25

Bis der Fehler behoben ist, sollte dies als Ersatz für Folgendes dienen ConnectedMoleculeComponents:

fixStereo[indices_, replacement_][stereo_] := If[
    SameQ[Complement[Select[Flatten @ Values @ stereo, IntegerQ], indices],
        {}
    ],
    replacement @ stereo, Nothing
];
moleculePart[mol_, indices_] := Module[
    {
        atomlist = AtomList[mol, indices],
        bondlist = BondList[mol, indices],
        options = Options @ mol,
        fixIndices = ReplaceAll[Thread[indices -> Range[Length[indices]]]]
    },
    options = Replace[
        options,
        {
            RuleDelayed[
                HoldPattern[Rule[opt:AtomCoordinates | AtomDiagramCoordinates, x_]],
                opt -> Part[x, indices]
            ],
            HoldPattern[Rule[StereochemistryElements, x_List]] :> (StereochemistryElements -> Map[fixStereo[indices, fixIndices], x])
        },
        {1}
    ];
    Molecule[atomlist, fixIndices @ bondlist, options]
];
connectedMoleculeComponents[mol_] := Map[
    moleculePart[mol, #]&,
    ConnectedComponents @ MoleculeGraph @ mol
]

Für das Beispiel funktioniert es gut,

mol = Molecule["NC(Cc1ccc(O)c(I)c1)C(=O)O", IncludeHydrogens -> True] // 
    MoleculeModify[{"DeleteAtom", 2}] // connectedMoleculeComponents