ConnectedMoleculeComponents의 주요 변경 사항을 12.1.1에서 12.2.0으로 변경하는 해결 방법
에서 작업하는 데 사용되는 다음 코드 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
인덱스가 2 인 원자는 아래에 강조 표시됩니다.

에서 Mathematica Version 12.2.0
, 코드에 대한 호출까지 작동합니다 Apply[MoleculeModify]
. 그러나 호출 ConnectedMoleculeComponents
하면 다음과 같은 오류가 발생합니다.
In [415] : = KeyMap :: invak 평가 중 :> LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation] 인수가> 유효한 연관이 아닙니다.
In [415] : = KeySort :: invrl을 평가하는 동안 : KeyMap [FromDigits] [LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation]] 인수가 유효한 연결 또는 규칙 목록이 아닙니다.
In [415] : = KeyValueMap :: invak 평가 중 : KeySort [KeyMap [FromDigits] [LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [atomPropertyAssociation]]] 인수가 유효한 연결이 아닙니다.
In [415] : = Molecule :: nintrp를 평가하는 동안 : LibraryFunctionError [LIBRARY_FUNCTION_ERROR, 6] [Atom [Missing [KeyAbsent, getAtomsList]]]를 이름 또는 화학 식별자로 해석 할 수 없습니다.
Out [417] = MoleculeModify [분자 [{ "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]
마지막으로 최신 버전의 주요 변경 사항 에 대해 불만을 제기했을 때 그 당시에 는 호환되지 않는 변경 사항에 대한 알림Mathematica Version 12.1.0
을 먼저 확인 하라는 권고를 받았습니다 . 이번에는 링크를 확인했습니다. 그러나 그 링크에는 아무것도 없습니다 ConnectedMoleculeComponents
.
그래서 내 질문은 다음과 같습니다.
- 이 문제에 대한 해결 방법이 있습니까?
- Wolfram Research에 영향을 미치고 새로운 버전이 출시되기 몇 주 전에보다 철저한 변경 사항 목록을 게시 할 수 있기를 바라십니까?
도움을 주셔서 미리 감사드립니다.
답변
버그가 수정 될 때까지 다음을 대체 할 수 있습니다 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
]
예를 들어 잘 작동합니다.
mol = Molecule["NC(Cc1ccc(O)c(I)c1)C(=O)O", IncludeHydrogens -> True] //
MoleculeModify[{"DeleteAtom", 2}] // connectedMoleculeComponents
