ConnectedMoleculeComponents'ta 12.1.1'den 12.2.0'a bir kesinti değişikliği için geçici çözüm
Ç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 ConnectedMoleculeComponents
aş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:
- Bu sorun için bir çözüm var mı?
- 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
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
