1
2
3
4
5
6
7
8
9
10
11 import random
12 from rdkit.six.moves import range
13 from rdkit import Chem
14
15
17 splitB = molB.split('\n')
18 res = []
19 res.extend(splitB[0:3])
20 idx = 3
21 inL = splitB[idx]
22 res.append(inL)
23 nAts = int(inL[0:3])
24 nBonds = int(inL[3:6])
25
26 idx += 1
27 atLines = splitB[idx:idx + nAts]
28
29 order = list(range(nAts))
30 random.shuffle(order, random=random.random)
31
32 for i in order:
33 res.append(atLines[i])
34
35
36 idx += nAts
37 for i in range(nBonds):
38 inL = splitB[idx]
39 idx1 = int(inL[0:3]) - 1
40 idx2 = int(inL[3:6]) - 1
41 idx1 = order.index(idx1)
42 idx2 = order.index(idx2)
43 inL = '% 3d% 3d' % (idx1 + 1, idx2 + 1) + inL[6:]
44 res.append(inL)
45 idx += 1
46 res.append('M END')
47 return '\n'.join(res)
48
49
57
58
60 refSmi = Chem.MolToSmiles(mol, False)
61 for i in range(nReps):
62 m2 = RandomizeMol(mol)
63 smi = Chem.MolToSmiles(m2, False)
64 if smi != refSmi:
65 raise ValueError('\nRef: %s\n : %s' % (refSmi, smi))
66
67
68 if __name__ == '__main__':
69 from rdkit.Chem import Randomize
70 CheckCanonicalization(Chem.MolFromSmiles('CON'))
71 CheckCanonicalization(Chem.MolFromSmiles('c1ccccn1'))
72 CheckCanonicalization(Chem.MolFromSmiles('C/C=C/F'))
73