ConnectedMoleculeComponents'ta 12.1.1'den 12.2.0'a bir kesinti değişikliği için geçici çözüm

Dec 18 2020

Çalışmak için kullanılan aşağıdaki kod 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

Dizin 2'ye sahip atom aşağıda vurgulanmıştır:

İçinde Mathematica Version 12.2.0, kod çağrıya kadar çalışır Apply[MoleculeModify]. Ancak çağırırken ConnectedMoleculeComponentsaşağıdaki hataları alıyorum:

In [415] değerlendirmesi sırasında: = KeyMap :: invak: argüman> LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation]> geçerli bir İlişkilendirme değil.

In [415] değerlendirmesi sırasında: = KeySort :: invrl: KeyMap [FromDigits] [LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation]] argümanı geçerli bir İlişkilendirme veya kurallar listesi değil.

In [415] değerlendirmesi sırasında: = KeyValueMap :: invak: KeySort [KeyMap [FromDigits] [LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation]]] argümanı geçerli bir İlişkilendirme değil.

In [415] değerlendirmesi sırasında: = Molekül :: nintrp: LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [Atom [Eksik [KeyAbsent, getAtomsList]]] bir ad veya kimyasal tanımlayıcı olarak yorumlanamıyor.

Out [417] = Molekül Değiştir [Molekülü [{"N", "C", "C", "C", "C", "C", "O", "C", "I", "C", "C", "O", "O", "H", "H", "H", "H", "H", "H", "H", "H", "H"}, { Bağ [{2, 3}, "Tek"], Bağ [{3, 4}, "Aromatik"], Bağ [{4, 5}, "Aromatik"], Bağ [{5, 6}, "Aromatik" ], Tahvil [{6, 7}, "Tek"], Tahvil [{6, 8}, "Aromatik"], Tahvil [{8, 9}, "Tek"], Tahvil [{8, 10}, " Aromatik "], Bağ [{11, 12}," Çift "], Bağ [{11, 13}," Tek "], Bağ [{10, 3}," Aromatik "], Bağ [{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]

En son son sürümdeki değişiklikleri bozmaktan en son şikayet ettiğimde , o zaman Mathematica Version 12.1.0, ilk olarak uyumsuz değişiklikler hakkındaki uyarıyı kontrol etmem konusunda uyarılmıştım . Bu sefer bağlantıyı kontrol ettim. Ama bu bağlantıda hiçbir şey yok ConnectedMoleculeComponents.

Yani sorularım:

  1. Bu sorun için bir çözüm var mı?
  2. Wolfram Research'ü, değişikliklerin daha kapsamlı bir listesini, tercihen yeni sürümün yayınlanmasından haftalar önce yayınlaması için etkileme ümidi var mı?

Yardımlarınız için şimdiden teşekkür ederiz.

Yanıtlar

8 JasonB. Dec 18 2020 at 09:25

Hata düzeltilene kadar bu, aşağıdakilerin yerine geçmelidir 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
]

Örnek için gayet iyi çalışıyor,

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