Solusi untuk perubahan besar dalam ConnectedMoleculeComponents dari 12.1.1 menjadi 12.2.0
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 ConnectedMoleculeComponents
saya 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:
- Apakah ada solusi untuk masalah ini?
- 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
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