Solusi untuk perubahan besar dalam ConnectedMoleculeComponents dari 12.1.1 menjadi 12.2.0

Dec 18 2020

Kode berikut digunakan untuk bekerja di 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 dengan indeks 2 disorot di bawah ini:

Di Mathematica Version 12.2.0, kode berfungsi hingga panggilan ke Apply[MoleculeModify]. Tetapi saat memohon ConnectedMoleculeComponentssaya mendapatkan kesalahan berikut:

Selama evaluasi In [415]: = KeyMap :: invak: Argumen> LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation] bukan> Asosiasi yang valid.

Selama evaluasi In [415]: = KeySort :: invrl: Argumen KeyMap [FromDigits] [LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation]] bukan merupakan Asosiasi yang valid atau daftar aturan.

Selama evaluasi In [415]: = KeyValueMap :: invak: Argumen KeySort [KeyMap [FromDigits] [LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation]]] bukan Asosiasi yang valid.

Selama evaluasi In [415]: = Molecule :: nintrp: Tidak dapat menafsirkan LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [Atom [Hilang [KeyAbsent, getAtomsList]]] sebagai nama atau pengenal bahan kimia.

Keluar [417] = MoleculeModify [Molekul [{"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]

Terakhir kali saya mengeluh tentang perubahan yang melanggar di versi terbaru, yang kemudian Mathematica Version 12.1.0, saya dinasihati untuk memeriksa pemberitahuan terlebih dahulu tentang perubahan yang tidak kompatibel . Kali ini, saya memeriksa tautannya. Tapi tidak ada apa pun di tautan itu ConnectedMoleculeComponents.

Jadi, pertanyaan saya adalah:

  1. Apakah ada solusi untuk masalah ini?
  2. Adakah harapan untuk mempengaruhi Wolfram Research untuk menerbitkan daftar perubahan yang lebih menyeluruh, sebaiknya berminggu-minggu sebelum versi baru keluar?

Terima kasih sebelumnya atas bantuan Anda.

Jawaban

8 JasonB. Dec 18 2020 at 09:25

Sampai bug diperbaiki, ini seharusnya berfungsi sebagai pengganti 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
]

Misalnya, ini berfungsi dengan baik,

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