Обходной путь для критического изменения ConnectedMoleculeComponents с 12.1.1 на 12.2.0
Для работы использовался следующий код 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
.
Итак, мои вопросы:
- Есть ли способ решения этой проблемы?
- Есть ли надежда на то, что Wolfram Research сможет опубликовать более подробный список критических изменений, желательно за несколько недель до выхода новой версии?
Заранее спасибо за вашу помощь.
Ответы
Пока ошибка не будет исправлена, это должно работать как замена 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
