Solução alternativa para uma alteração significativa em ConnectedMoleculeComponents de 12.1.1 para 12.2.0

Dec 18 2020

O código a seguir costumava funcionar em 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

O átomo com índice 2 é destacado abaixo:

Em Mathematica Version 12.2.0, o código funciona até a chamada para Apply[MoleculeModify]. Mas, ao invocar ConnectedMoleculeComponents, recebo os seguintes erros:

Durante a avaliação de In [415]: = KeyMap :: invak: O argumento> LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation] não é uma associação válida.

Durante a avaliação de In [415]: = KeySort :: invrl: O argumento KeyMap [FromDigits] [LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation]] não é uma associação válida ou uma lista de regras.

Durante a avaliação de In [415]: = KeyValueMap :: invak: O argumento KeySort [KeyMap [FromDigits] [LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation]]] não é uma associação válida.

Durante a avaliação de In [415]: = Molecule :: nintrp: Incapaz de interpretar LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [Atom [Missing [KeyAbsent, getAtomsList]]] como um nome ou identificador químico.

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}, " Aromatic "], Bond [{11, 12}," Double "], Bond [{11, 13}," Single "], Bond [{10, 3}," Aromatic "], Bond [{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]

A última vez que reclamei sobre alterações interruptivas na versão mais recente, foi então Mathematica Version 12.1.0que fui alertado para primeiro verificar o aviso sobre alterações incompatíveis . Desta vez, eu verifiquei o link. Mas não há nada nesse link ativado ConnectedMoleculeComponents.

Então, minhas perguntas são:

  1. Existe uma solução alternativa para esse problema?
  2. Existe alguma esperança de influenciar a Wolfram Research a publicar uma lista mais completa de alterações importantes, de preferência semanas antes do lançamento da nova versão?

Agradeço antecipadamente por sua ajuda.

Respostas

8 JasonB. Dec 18 2020 at 09:25

Até que o bug seja corrigido, isso deve funcionar como uma substituição para 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
]

Para o exemplo, funciona muito bem,

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