Обходной путь для критического изменения ConnectedMoleculeComponents с 12.1.1 на 12.2.0

Dec 18 2020

Для работы использовался следующий код 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

Атом с индексом 2 выделен ниже:

В Mathematica Version 12.2.0коде работает до вызова Apply[MoleculeModify]. Но при вызове ConnectedMoleculeComponentsполучаю следующие ошибки:

Во время оценки In [415]: = KeyMap :: invak: Аргумент> LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation] не является> допустимой ассоциацией.

Во время оценки In [415]: = KeySort :: invrl: Аргумент KeyMap [FromDigits] [LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation]] не является действительной ассоциацией или списком правил.

Во время оценки In [415]: = KeyValueMap :: invak: Аргумент KeySort [KeyMap [FromDigits] [LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation]]] не является допустимой ассоциацией.

Во время оценки In [415]: = Molecule :: nintrp: Невозможно интерпретировать LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [Atom [Missing [KeyAbsent, getAtomsList]]] как имя или химический идентификатор.

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"}, { Связка [{2, 3}, «Одинарная»], Связка [{3, 4}, «Ароматическая»], Связка [{4, 5}, «Ароматическая»], Связка [{5, 6}, «Ароматическая» ], Bond [{6, 7}, "Single"], Bond [{6, 8}, "Aromatic"], Bond [{8, 9}, "Single"], Bond [{8, 10}, " Ароматический »], Связанный [{11, 12},« Двойной »], Связанный [{11, 13},« Одинарный »], Связанный [{10, 3},« Ароматический »], Связанный [{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}, "Один"]}, {}], {"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]

В последний раз, когда я жаловался на критические изменения в последней версии Mathematica Version 12.1.0, меня посоветовали сначала проверить уведомление о несовместимых изменениях . На этот раз я действительно проверил ссылку. Но по этой ссылке ничего нет ConnectedMoleculeComponents.

Итак, мои вопросы:

  1. Есть ли способ решения этой проблемы?
  2. Есть ли надежда на то, что Wolfram Research сможет опубликовать более подробный список критических изменений, желательно за несколько недель до выхода новой версии?

Заранее спасибо за вашу помощь.

Ответы

8 JasonB. Dec 18 2020 at 09:25

Пока ошибка не будет исправлена, это должно работать как замена 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
]

Для примера это работает нормально,

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