Obejście poważnej zmiany w ConnectedMoleculeComponents z 12.1.1 na 12.2.0

Dec 18 2020

Poniższy kod używany do pracy w 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

Atom o indeksie 2 jest wyróżniony poniżej:

W Mathematica Version 12.2.0programie kod działa aż do wywołania Apply[MoleculeModify]. Ale po wywołaniu ConnectedMoleculeComponentsotrzymuję następujące błędy:

Podczas oceny In [415]: = KeyMap :: invak: argument> LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation] nie jest> prawidłowym skojarzeniem.

Podczas oceny In [415]: = KeySort :: invrl: argument KeyMap [FromDigits] [LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation]] nie jest prawidłowym skojarzeniem ani listą reguł.

Podczas oceny In [415]: = KeyValueMap :: invak: argument KeySort [KeyMap [FromDigits] [LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation]]] nie jest prawidłowym powiązaniem.

Podczas oceny In [415]: = Molecule :: nintrp: Nie można zinterpretować LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [Atom [Missing [KeyAbsent, getAtomsList]]] jako nazwy lub identyfikatora chemicznego.

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”}, { Bond [{2, 3}, "Single"], Bond [{3, 4}, "Aromatic"], Bond [{4, 5}, "Aromatic"], Bond [{5, 6}, "Aromatic" ], Bond [{6, 7}, "Single"], Bond [{6, 8}, "Aromatic"], Bond [{8, 9}, "Single"], Bond [{8, 10}, " Aromatyczny "], Wiązanie [{11, 12}," Podwójne "], Wiązanie [{11, 13}," Pojedyncze "], Wiązanie [{10, 3}," Aromatyczne "], Wiązanie [{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]

Ostatnim razem, gdy skarżyłem się na przełomowe zmiany w najnowszej wersji, czyli wtedy Mathematica Version 12.1.0, upomniano mnie, abym najpierw sprawdził informację o niekompatybilnych zmianach . Tym razem sprawdziłem link. Ale pod tym linkiem nie ma nic ConnectedMoleculeComponents.

Więc moje pytania to:

  1. Czy istnieje obejście tego problemu?
  2. Czy jest jakaś nadzieja na wpłynięcie na Wolfram Research, aby opublikował dokładniejszą listę ważnych zmian, najlepiej na kilka tygodni przed premierą nowej wersji?

Z góry dziękuje za twoją pomoc.

Odpowiedzi

8 JasonB. Dec 18 2020 at 09:25

Dopóki błąd nie zostanie naprawiony, powinno to działać jako zamiennik dla 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
]

Na przykład działa dobrze,

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