Solución alternativa para un cambio radical en ConnectedMoleculeComponents de 12.1.1 a 12.2.0

Dec 18 2020

El siguiente código solía trabajar en 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

El átomo con índice 2 se destaca a continuación:

En Mathematica Version 12.2.0, el código funciona hasta la llamada a Apply[MoleculeModify]. Pero al invocar ConnectedMoleculeComponentsobtengo los siguientes errores:

Durante la evaluación de In [415]: = KeyMap :: invak: El argumento> LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation] no es una> Asociación válida.

Durante la evaluación de In [415]: = KeySort :: invrl: El argumento KeyMap [FromDigits] [LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation]] no es una Asociación válida o una lista de reglas.

Durante la evaluación de In [415]: = KeyValueMap :: invak: El argumento KeySort [KeyMap [FromDigits] [LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation]]] no es una Asociación válida.

Durante la evaluación de In [415]: = Molecule :: nintrp: No se puede interpretar LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [Atom [Missing [KeyAbsent, getAtomsList]]] como un nombre o identificador químico.

Out [417] = MoleculeModify [Molécula [{"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}, " Aromático "], Bond [{11, 12}," Doble "], Bond [{11, 13}," Single "], Bond [{10, 3}," Aromático "], Bond [{1, 14} , "Soltero"], Bono [{1, 15}, "Soltero"], Bono [{2, 16}, "Soltero"], Bono [{2, 17}, "Soltero"], Bono [{4, 18}, "Soltero"], Bono [{5, 19}, "Soltero"], Bono [{7, 20}, "Soltero"], Bono [{10, 21}, "Soltero"], Bono [{ 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 -> Falso]

La última vez que me quejé de cambios rotos en la última versión, que fue entonces Mathematica Version 12.1.0, me advirtieron que primero revisara el aviso sobre cambios incompatibles . Esta vez, verifiqué el enlace. Pero no hay nada en ese enlace ConnectedMoleculeComponents.

Entonces, mis preguntas son:

  1. ¿Hay alguna solución alternativa a este problema?
  2. ¿Existe alguna esperanza de influir en Wolfram Research para que publique una lista más completa de cambios importantes, preferiblemente semanas antes de que salga la nueva versión?

Gracias de antemano por tu ayuda.

Respuestas

8 JasonB. Dec 18 2020 at 09:25

Hasta que se solucione el error, esto debería funcionar como un reemplazo 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
]

Por ejemplo, funciona bien,

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