chython 2.19__cp313-cp313-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. chython/__init__.py +35 -0
  2. chython/_functions.py +95 -0
  3. chython/_java.py +57 -0
  4. chython/algorithms/__init__.py +18 -0
  5. chython/algorithms/_isomorphism.cp313-win_amd64.pyd +0 -0
  6. chython/algorithms/_isomorphism.pyx +189 -0
  7. chython/algorithms/_rings.cp313-win_amd64.pyd +0 -0
  8. chython/algorithms/_rings.pyx +478 -0
  9. chython/algorithms/aromatics/__init__.py +27 -0
  10. chython/algorithms/aromatics/_rules.py +124 -0
  11. chython/algorithms/aromatics/kekule.py +532 -0
  12. chython/algorithms/aromatics/test/__init__.py +18 -0
  13. chython/algorithms/aromatics/test/test_kekule.py +160 -0
  14. chython/algorithms/aromatics/test/test_thiele.py +263 -0
  15. chython/algorithms/aromatics/thiele.py +222 -0
  16. chython/algorithms/calculate2d/__init__.py +23 -0
  17. chython/algorithms/calculate2d/clean2d.js +1 -0
  18. chython/algorithms/calculate2d/molecule.py +191 -0
  19. chython/algorithms/calculate2d/reaction.py +75 -0
  20. chython/algorithms/conformers.py +106 -0
  21. chython/algorithms/depict.py +596 -0
  22. chython/algorithms/fingerprints/__init__.py +43 -0
  23. chython/algorithms/fingerprints/linear.py +202 -0
  24. chython/algorithms/fingerprints/morgan.py +132 -0
  25. chython/algorithms/fingerprints/test/__init__.py +18 -0
  26. chython/algorithms/fingerprints/test/test_linear.py +127 -0
  27. chython/algorithms/fingerprints/test/test_morgan.py +79 -0
  28. chython/algorithms/groups/__init__.py +212 -0
  29. chython/algorithms/groups/_functional.py +290 -0
  30. chython/algorithms/groups/_oxidations.py +70 -0
  31. chython/algorithms/groups/_protective.py +964 -0
  32. chython/algorithms/groups/_reactions.py +809 -0
  33. chython/algorithms/groups/_reductions.py +88 -0
  34. chython/algorithms/groups/_transformations.py +278 -0
  35. chython/algorithms/groups/test/__init__.py +18 -0
  36. chython/algorithms/groups/test/test_deprotection.py +108 -0
  37. chython/algorithms/groups/test/test_reactions.py +377 -0
  38. chython/algorithms/isomorphism.py +664 -0
  39. chython/algorithms/mapping/__init__.py +188 -0
  40. chython/algorithms/mapping/_groups.py +94 -0
  41. chython/algorithms/mapping/_reactions.py +72 -0
  42. chython/algorithms/mapping/attention.py +266 -0
  43. chython/algorithms/mapping/reconstruct.py +346 -0
  44. chython/algorithms/mcs.py +201 -0
  45. chython/algorithms/morgan.py +77 -0
  46. chython/algorithms/rings.py +178 -0
  47. chython/algorithms/smiles.py +597 -0
  48. chython/algorithms/standardize/__init__.py +30 -0
  49. chython/algorithms/standardize/_groups.py +958 -0
  50. chython/algorithms/standardize/_isomers.py +330 -0
  51. chython/algorithms/standardize/_metal_organics.py +189 -0
  52. chython/algorithms/standardize/_reagents.py +44 -0
  53. chython/algorithms/standardize/_salts.py +68 -0
  54. chython/algorithms/standardize/molecule.py +475 -0
  55. chython/algorithms/standardize/reaction.py +384 -0
  56. chython/algorithms/standardize/resonance.py +191 -0
  57. chython/algorithms/standardize/salts.py +128 -0
  58. chython/algorithms/standardize/saturation.py +373 -0
  59. chython/algorithms/standardize/test/__init__.py +18 -0
  60. chython/algorithms/standardize/test/test_canonicalize.py +66 -0
  61. chython/algorithms/standardize/test/test_groups.py +146 -0
  62. chython/algorithms/standardize/test/test_isomers.py +198 -0
  63. chython/algorithms/stereo.py +1215 -0
  64. chython/algorithms/tautomers/__init__.py +167 -0
  65. chython/algorithms/tautomers/_acid.py +59 -0
  66. chython/algorithms/tautomers/_base.py +116 -0
  67. chython/algorithms/tautomers/_keto_enol.py +107 -0
  68. chython/algorithms/tautomers/acid_base.py +208 -0
  69. chython/algorithms/tautomers/heteroarenes.py +103 -0
  70. chython/algorithms/tautomers/keto_enol.py +143 -0
  71. chython/algorithms/tautomers/test/__init__.py +18 -0
  72. chython/algorithms/tautomers/test/test_tautomers.py +80 -0
  73. chython/algorithms/test/__init__.py +18 -0
  74. chython/algorithms/test/test_isomorphism.py +58 -0
  75. chython/algorithms/test/test_smiles.py +76 -0
  76. chython/algorithms/x3dom.py +350 -0
  77. chython/containers/__init__.py +48 -0
  78. chython/containers/_pack_v2.cp313-win_amd64.pyd +0 -0
  79. chython/containers/_pack_v2.pyx +271 -0
  80. chython/containers/_unpack_v0v2.cp313-win_amd64.pyd +0 -0
  81. chython/containers/_unpack_v0v2.pyx +302 -0
  82. chython/containers/bonds.py +255 -0
  83. chython/containers/cgr.py +115 -0
  84. chython/containers/chimera.py +63 -0
  85. chython/containers/graph.py +199 -0
  86. chython/containers/molecule.py +817 -0
  87. chython/containers/query.py +71 -0
  88. chython/containers/rdkit.py +183 -0
  89. chython/containers/reaction.py +324 -0
  90. chython/containers/test/__init__.py +18 -0
  91. chython/containers/test/test_molecule.py +117 -0
  92. chython/containers/test/test_pack.py +60 -0
  93. chython/containers/test/test_rdkit.py +70 -0
  94. chython/containers/test/test_reaction.py +40 -0
  95. chython/exceptions.py +114 -0
  96. chython/files/MRVrw.py +532 -0
  97. chython/files/PDBrw.py +255 -0
  98. chython/files/RDFrw.py +309 -0
  99. chython/files/SDFrw.py +221 -0
  100. chython/files/__init__.py +30 -0
  101. chython/files/_convert.py +207 -0
  102. chython/files/_mapping.py +117 -0
  103. chython/files/_xyz.cp313-win_amd64.pyd +0 -0
  104. chython/files/_xyz.pyx +74 -0
  105. chython/files/daylight/__init__.py +24 -0
  106. chython/files/daylight/parser.py +157 -0
  107. chython/files/daylight/smarts.py +107 -0
  108. chython/files/daylight/smiles.py +260 -0
  109. chython/files/daylight/test/__init__.py +18 -0
  110. chython/files/daylight/test/test_daylight_smarts.py +289 -0
  111. chython/files/daylight/test/test_daylight_smiles.py +101 -0
  112. chython/files/daylight/test/test_parser.py +118 -0
  113. chython/files/daylight/test/test_tokenize.py +77 -0
  114. chython/files/daylight/tokenize.py +376 -0
  115. chython/files/libinchi/__init__.py +22 -0
  116. chython/files/libinchi/libinchi.dll +0 -0
  117. chython/files/libinchi/wrapper.py +554 -0
  118. chython/files/mdl/__init__.py +25 -0
  119. chython/files/mdl/emol.py +251 -0
  120. chython/files/mdl/erxn.py +67 -0
  121. chython/files/mdl/mol.py +186 -0
  122. chython/files/mdl/read.py +223 -0
  123. chython/files/mdl/rxn.py +67 -0
  124. chython/files/mdl/stereo.py +63 -0
  125. chython/files/mdl/write.py +201 -0
  126. chython/files/opsin.py +35 -0
  127. chython/files/test/__init__.py +0 -0
  128. chython/files/test/test_inchi.py +27 -0
  129. chython/files/test/test_mrv.py +47 -0
  130. chython/files/test/test_sdf_rdf.py +64 -0
  131. chython/files/test/test_xyz.py +20 -0
  132. chython/files/xyz.py +78 -0
  133. chython/periodictable/__init__.py +69 -0
  134. chython/periodictable/base/__init__.py +25 -0
  135. chython/periodictable/base/dynamic.py +149 -0
  136. chython/periodictable/base/element.py +451 -0
  137. chython/periodictable/base/groups.py +90 -0
  138. chython/periodictable/base/periods.py +46 -0
  139. chython/periodictable/base/query.py +473 -0
  140. chython/periodictable/base/vector.py +119 -0
  141. chython/periodictable/groupI.py +252 -0
  142. chython/periodictable/groupII.py +223 -0
  143. chython/periodictable/groupIII.py +1154 -0
  144. chython/periodictable/groupIV.py +210 -0
  145. chython/periodictable/groupIX.py +196 -0
  146. chython/periodictable/groupV.py +192 -0
  147. chython/periodictable/groupVI.py +183 -0
  148. chython/periodictable/groupVII.py +162 -0
  149. chython/periodictable/groupVIII.py +161 -0
  150. chython/periodictable/groupX.py +166 -0
  151. chython/periodictable/groupXI.py +164 -0
  152. chython/periodictable/groupXII.py +158 -0
  153. chython/periodictable/groupXIII.py +239 -0
  154. chython/periodictable/groupXIV.py +262 -0
  155. chython/periodictable/groupXV.py +276 -0
  156. chython/periodictable/groupXVI.py +457 -0
  157. chython/periodictable/groupXVII.py +324 -0
  158. chython/periodictable/groupXVIII.py +260 -0
  159. chython/periodictable/test/__init__.py +0 -0
  160. chython/periodictable/test/test_element.py +100 -0
  161. chython/reactor/__init__.py +24 -0
  162. chython/reactor/base.py +222 -0
  163. chython/reactor/reactor.py +177 -0
  164. chython/reactor/test/__init__.py +18 -0
  165. chython/reactor/test/test_reactor.py +40 -0
  166. chython/reactor/test/test_transformer.py +78 -0
  167. chython/reactor/transformer.py +72 -0
  168. chython/utils/__init__.py +50 -0
  169. chython/utils/free_wilson.py +114 -0
  170. chython/utils/grid.py +130 -0
  171. chython/utils/retro.py +139 -0
  172. chython-2.19.dist-info/METADATA +105 -0
  173. chython-2.19.dist-info/RECORD +175 -0
  174. chython-2.19.dist-info/WHEEL +4 -0
  175. chython-2.19.dist-info/licenses/LICENSE +165 -0
@@ -0,0 +1,964 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright 2022-2026 Ramil Nugmanov <nougmanoff@protonmail.com>
4
+ # This file is part of chython.
5
+ #
6
+ # chython is free software; you can redistribute it and/or modify
7
+ # it under the terms of the GNU Lesser General Public License as published by
8
+ # the Free Software Foundation; either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU Lesser General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Lesser General Public License
17
+ # along with this program; if not, see <https://www.gnu.org/licenses/>.
18
+ #
19
+ from lazy_object_proxy import Proxy
20
+
21
+
22
+ def _rules():
23
+ from ... import smarts
24
+
25
+ rules = {}
26
+
27
+ rules['hydroxyl_thiocarbamate'] = (
28
+ smarts('[O;D2:1]-;!@[C;x3;z2](=[S;D1])[N;D3;x0]([C;D1])[C;D1]'),
29
+ [1], # atoms to keep
30
+ [], # atoms to add (atom_number, atom_type, bond_type)
31
+ 'CC(C)OC(=S)N(C)C', # protected
32
+ 'CC(C)O', # cleaved
33
+ [] # optional decoys
34
+ )
35
+
36
+ rules['hydroxyl_fmoc'] = (
37
+ smarts('[O;D2:1]-;!@[C;z2;x3](=O)[O;D2;x0]-[C;D2;x1;z1][C;D3;z1;x0;r5]1[C;a;r6]:2:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D3]:2-[C;a;r6]:3:[C;D2]:[C;D2]:[C;D2]:[C;D2]:C1:3'),
38
+ [1],
39
+ [],
40
+ 'CC(C)OC(=O)OCC1C2=CC=CC=C2C2=C1C=CC=C2',
41
+ 'CC(C)O',
42
+ []
43
+ )
44
+
45
+ rules['hydroxyl_troc'] = (
46
+ smarts('[O;D2:1]-;!@[C;z2;x3](=O)[O;D2;x0]-[C;D2][C;D4;x3]([Cl;D1])([Cl;D1])[Cl;D1]'),
47
+ [1],
48
+ [],
49
+ 'CC(C)OC(=O)OCC(Cl)(Cl)Cl',
50
+ 'CC(C)O',
51
+ []
52
+ )
53
+
54
+ rules['hydroxyl_teoc'] = (
55
+ smarts('[O;D2:1]-;!@[C;z2;x3](=O)[O;D2;x0]-[C;D2;z1;x1][C;D2;x1;z1][Si;D4;z1;x0]([C;D1])([C;D1])[C;D1]'),
56
+ [1],
57
+ [],
58
+ 'CC(C)OC(=O)OCC[Si](C)(C)C',
59
+ 'CC(C)O',
60
+ []
61
+ )
62
+
63
+ rules['hydroxyl_alloc'] = (
64
+ smarts('[O;D2:1]-;!@[C;z2;x3](=O)[O;D2;x0]-[C;D2;z1;x1][C;D2;x0;z2]=[C;D1]'),
65
+ [1],
66
+ [],
67
+ 'CC(C)OC(=O)OCC=C',
68
+ 'CC(C)O',
69
+ []
70
+ )
71
+
72
+ rules['hydroxyl_tms'] = (
73
+ smarts('[O;D2:1]-;!@[Si;D4;z1;x1]([C;D1])([C;D1])[C;D1]'),
74
+ [1],
75
+ [],
76
+ 'CC(C)O[Si](C)(C)C',
77
+ 'CC(C)O',
78
+ ['CC(C)O[SiH](C)C', 'CC(C)O[Si](C)(C)OC', 'CC(C)O[Si](C)(C)CC']
79
+ )
80
+
81
+ rules['hydroxyl_tes'] = (
82
+ smarts('[O;D2:1]-;!@[Si;D4;z1;x1]([C;D2;x1;z1][C;D1])([C;D2;x1;z1][C;D1])[C;D2;x1;z1][C;D1]'),
83
+ [1],
84
+ [],
85
+ 'CC(C)O[Si](CC)(CC)CC',
86
+ 'CC(C)O',
87
+ ['CC(C)O[SiH](C)C', 'CC(C)O[Si](C)(C)OC']
88
+ )
89
+
90
+ rules['hydroxyl_tbs'] = (
91
+ smarts('[O;D2:1]-;!@[Si;D4;z1;x1]([C;D1])([C;D1])[C;D4;x1;z1]([C;D1])([C;D1])[C;D1]'),
92
+ [1],
93
+ [],
94
+ 'CC(C)O[Si](C)(C)C(C)(C)C',
95
+ 'CC(C)O',
96
+ ['CC(C)O[SiH](C)C', 'CC(C)O[Si](C)(C)OC']
97
+ )
98
+
99
+ rules['hydroxyl_tips'] = (
100
+ smarts('[O;D2:1]-;!@[Si;D4;z1;x1]([C;D3;z1;x1]([C;D1])[C;D1])([C;D3;z1;x1]([C;D1])[C;D1])[C;D3;z1;x1]([C;D1])[C;D1]'),
101
+ [1],
102
+ [],
103
+ 'CC(C)O[Si](C(C)C)(C(C)C)C(C)C',
104
+ 'CC(C)O',
105
+ ['CC(C)O[SiH](C)C', 'CC(C)O[Si](C)(C)OC']
106
+ )
107
+
108
+ rules['hydroxyl_tbdps'] = (
109
+ smarts('[O;D2:1]-;!@[Si;D4;z1;x1]([C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1)([C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1)[C;D4;x1;z1]([C;D1])([C;D1])[C;D1]'),
110
+ [1],
111
+ [],
112
+ 'CC(C)O[Si](c1ccccc1)(c1ccccc1)C(C)(C)C',
113
+ 'CC(C)O',
114
+ ['CC(C)O[SiH](C)C', 'CC(C)O[Si](c1ccc(C)cc1)(c1ccccc1)C(C)(C)C']
115
+ )
116
+
117
+ rules['hydroxyl_o_nitrobenzyl'] = (
118
+ smarts('[O;D2:1]-;!@[C;D2;z1;x1]-[C;a;r6]:1:[C;D3;x1]([N+](=O)[O-]):[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
119
+ [1],
120
+ [],
121
+ 'CC(C)OCc1c(N(=O)=O)cccc1',
122
+ 'CC(C)O',
123
+ ['CC(C)OC(OC)c1c(N(=O)=O)cccc1']
124
+ )
125
+
126
+ rules['hydroxyl_methoxy_benzyl'] = (
127
+ smarts('[O;D2:1]-;!@[C;D2;z1;x1]-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D3;x1]([O;D2;x0][C;D1]):[C;D2]:[C;D2]:1'),
128
+ [1],
129
+ [],
130
+ 'CC(C)OCc1ccc(OC)cc1',
131
+ 'CC(C)O',
132
+ ['CC(C)OCc1ccc(OCC)cc1', 'CC(C)OCc1cc(OC)ccc1']
133
+ )
134
+
135
+ rules['hydroxyl_dimethoxybenzyl'] = (
136
+ smarts('[O;D2:1]-;!@[C;D2;z1;x1]-[C;a;r6]:1:[C;D3;x1]([O;D2;x0][C;D1]):[C;D2]:[C;D3;x1]([O;D2;x0][C;D1]):[C;D2]:[C;D2]:1'),
137
+ [1],
138
+ [],
139
+ 'CC(C)OCc1c(OC)cc(OC)cc1',
140
+ 'CC(C)O',
141
+ []
142
+ )
143
+
144
+ rules['hydroxyl_naphthyl'] = (
145
+ smarts('[O;D2:1]-;!@[C;D2;z1;x1]-[C;a;r6]:1:[C;D2]:[C;D3]:2:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D3]:2:[C;D2]:[C;D2]:1'),
146
+ [1],
147
+ [],
148
+ 'CC(C)OCC1=CC2=C(C=CC=C2)C=C1',
149
+ 'CC(C)O',
150
+ ['CC(C)OCc1ccccc1']
151
+ )
152
+
153
+ rules['hydroxyl_bom'] = (
154
+ smarts('[O;D2:1]-;!@[C;D2;x2;z1][O;D2;x0][C;D2;z1;x1]-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
155
+ [1],
156
+ [],
157
+ 'CC(C)OCOCc1ccccc1',
158
+ 'CC(C)O',
159
+ []
160
+ )
161
+
162
+ rules['hydroxyl_piv'] = (
163
+ smarts('[O;D2:1]-;!@[C;z2;x2](=O)-[C;D4;x0;z1]([C;D1])([C;D1])[C;D1]'),
164
+ [1],
165
+ [],
166
+ 'CC(C)OC(=O)C(C)(C)C',
167
+ 'CC(C)O',
168
+ []
169
+ )
170
+
171
+ rules['hydroxyl_methoxy_benzoate'] = (
172
+ smarts('[O;D2:1]-;!@[C;z2;x2](=O)-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D3;x1]([O;D2;x0][C;D1]):[C;D2]:[C;D2]:1'),
173
+ [1],
174
+ [],
175
+ 'COC1=CC=C(C=C1)C(=O)OC(C)C',
176
+ 'CC(C)O',
177
+ ['C1=CC=C(C=C1)C(=O)OC(C)C']
178
+ )
179
+
180
+ rules['hydroxyl_benzoate'] = (
181
+ smarts('[O;D2:1]-;!@[C;z2;x2](=O)-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
182
+ [1],
183
+ [],
184
+ 'C1=CC=C(C=C1)C(=O)OC(C)C',
185
+ 'CC(C)O',
186
+ ['COC1=CC=C(C=C1)C(=O)OC(C)C']
187
+ )
188
+
189
+ rules['hydroxyl_tfa'] = (
190
+ smarts('[O;D2:1]-;!@[C;z2;x2](=O)-[C;D4;z1;x3](F)(F)F'),
191
+ [1],
192
+ [],
193
+ 'CC(C)OC(=O)C(F)(F)F',
194
+ 'CC(C)O',
195
+ []
196
+ )
197
+
198
+ rules['hydroxyl_mom'] = (
199
+ smarts('[O;D2:1]-;!@[C;D2;x2;z1][O;D2;x0][C;D1]'),
200
+ [1],
201
+ [],
202
+ 'CC(C)OCOC',
203
+ 'CC(C)O',
204
+ ['CC(C)OC(C)OC']
205
+ )
206
+
207
+ rules['hydroxyl_mem'] = (
208
+ smarts('[O;D2:1]-;!@[C;D2;x2;z1][O;D2;x0][C;D2;z1;x1][C;D2;z1;x1][O;D2;x0][C;D1]'),
209
+ [1],
210
+ [],
211
+ 'COCCOCOC(C)C',
212
+ 'CC(C)O',
213
+ []
214
+ )
215
+
216
+ rules['hydroxyl_thp'] = (
217
+ smarts('[O;D2:1]-;!@[C;D3;x2;z1;r6]1[O;D2][C;D2][C;D2][C;D2][C;D2]1'),
218
+ [1],
219
+ [],
220
+ 'CC(C)OC1CCCCO1',
221
+ 'CC(C)O',
222
+ []
223
+ )
224
+
225
+ rules['hydroxyl_ee'] = (
226
+ smarts('[O;D2:1]-;!@[C;D3;x2;z1]([O;D2;x0][C;D2;x1;z1][C;D1])[C;D1]'),
227
+ [1],
228
+ [],
229
+ 'CC(C)OC(C)OCC',
230
+ 'CC(C)O',
231
+ ['CC(C)OC(CC)OCC']
232
+ )
233
+
234
+ rules['hydroxyl_mop'] = (
235
+ smarts('[O;D2:1]-;!@[C;D4;x2;z1]([O;D2;x0][C;D1])([C;D1])[C;D1]'),
236
+ [1],
237
+ [],
238
+ 'CC(C)OC(C)(C)OC',
239
+ 'CC(C)O',
240
+ []
241
+ )
242
+
243
+ rules['hydroxyl_sem'] = (
244
+ smarts('[O;D2:1]-;!@[C;D2;x2;z1][O;D2;x0][C;D2;z1;x1][C;D2;z1;x1][Si;D4;z1;x0]([C;D1])([C;D1])[C;D1]'),
245
+ [1],
246
+ [],
247
+ 'CC(C)OCOCC[Si](C)(C)C',
248
+ 'CC(C)O',
249
+ []
250
+ )
251
+
252
+ rules['hydroxyl_tritil'] = (
253
+ smarts('[O;D2:1]-;!@[C;D4;z1;x1](-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1)(-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1)-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
254
+ [1],
255
+ [],
256
+ 'CC(C)OC(c1ccccc1)(c1ccccc1)c1ccccc1',
257
+ 'CC(C)O',
258
+ ['COc1ccc(cc1)C(OC(C)C)(c1ccccc1)c1ccc(OC)cc1']
259
+ )
260
+
261
+ rules['hydroxyl_dimetoxy_tritil'] = (
262
+ smarts('[O;D2:1]-;!@[C;D4;z1;x1](-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D3;x1]([O;D2;x0][C;D1]):[C;D2]:[C;D2]:1)(-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D3;x1]([O;D2;x0][C;D1]):[C;D2]:[C;D2]:1)-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
263
+ [1],
264
+ [],
265
+ 'COc1ccc(cc1)C(OC(C)C)(c1ccccc1)c1ccc(OC)cc1',
266
+ 'CC(C)O',
267
+ ['CC(C)OC(c1ccccc1)(c1ccccc1)c1ccccc1']
268
+ )
269
+
270
+ rules['hydroxyl_chloro_tritil'] = (
271
+ smarts('[O;D2:1]-;!@[C;D4;z1;x1](-[C;a;r6]:1:[C;D3;x1]([Cl;D1]):[C;D2]:[C;D2]:[C;D2]:[C;D2]:1)(-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1)-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
272
+ [1],
273
+ [],
274
+ 'CC(C)OC(c1c(Cl)cccc1)(c1ccccc1)c1ccccc1',
275
+ 'CC(C)O',
276
+ []
277
+ )
278
+
279
+ rules['hydroxyl_mmt'] = (
280
+ smarts('[O;D2:1]-;!@[C;D4;z1;x1](-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D3;x1]([O;D2;x0][C;D1]):[C;D2]:[C;D2]:1)(-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1)-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
281
+ [1],
282
+ [],
283
+ 'c1ccc(cc1)C(OC(C)C)(c1ccccc1)c1ccc(OC)cc1',
284
+ 'CC(C)O',
285
+ ['CC(C)OC(c1ccccc1)(c1ccccc1)c1ccccc1']
286
+ )
287
+
288
+ rules['hydroxyl_mpe'] = (
289
+ smarts('[O;D2:1]-;!@[C;D4;x1;z1]([C;D1])([C;D2;x0;z1][C;D1])[C;D2;x0;z1][C;D1]'),
290
+ [1],
291
+ [],
292
+ 'CC(C)OC(CC)(CC)C',
293
+ 'CC(C)O',
294
+ []
295
+ )
296
+
297
+ rules['hydroxyl_trifluoroethyl'] = (
298
+ smarts('[O;D2:1]-;!@[C;D2;x1;z1][C;D4;x3;z1](F)(F)F'),
299
+ [1],
300
+ [],
301
+ 'CC(C)OCC(F)(F)F',
302
+ 'CC(C)O',
303
+ []
304
+ )
305
+
306
+ rules['hydroxyl_dmab_enamine'] = (
307
+ smarts('[O;D2:1]-;!@[C;D2;x1;z1]-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D3;x1](:[C;D2]:[C;D2]:1)-[N;D2;x0;z1]-[C;z2;x1;D3]([C;D2;x0;z1][C;D3;x0;z1]([C;D1])[C;D1])=[C;D3;r6;x0;z2]1[C;x1;z2;D3](=O)[C;D2][C;D4;x0;z1]([C;D1])([C;D1])[C;D2][C;D3;x1;z2]1=O'),
308
+ [1],
309
+ [],
310
+ 'CC(C)CC(NC1=CC=C(COC(C)=O)C=C1)=C1C(=O)CC(C)(C)CC1=O',
311
+ 'CC(O)=O',
312
+ []
313
+ )
314
+
315
+ rules['hydroxyl_dmab_imine'] = (
316
+ smarts('[O;D2:1]-;!@[C;D2;x1;z1]-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D3;x1](:[C;D2]:[C;D2]:1)-[N;D2;x0;z2]=[C;x1;D3]([C;D2;x0;z1][C;D3;x0;z1]([C;D1])[C;D1])-[C;D3;r6;x0;z1]1[C;x1;z2;D3](=O)[C;D2][C;D4;x0;z1]([C;D1])([C;D1])[C;D2][C;D3;x1;z2]1=O'),
317
+ [1],
318
+ [],
319
+ 'CC(C)CC(=NC1=CC=C(COC(C)=O)C=C1)C1C(=O)CC(C)(C)CC1=O',
320
+ 'CC(O)=O',
321
+ []
322
+ )
323
+
324
+ rules['diol_12_acetone'] = (
325
+ smarts('[O;D2;x0;r5:1]1-;@[C;D4;x2;z1]([C;D1])([C;D1])-[O;D2;x0:2][C:3]!#[C:4]1'),
326
+ [1, 2, 3, 4],
327
+ [],
328
+ 'CC1COC(C)(C)O1',
329
+ 'CC(O)CO',
330
+ []
331
+ )
332
+
333
+ rules['diol_13_acetone'] = (
334
+ smarts('[O;D2;x0;r6:1]1-;@[C;D4;x2;z1]([C;D1])([C;D1])-[O;D2;x0:2][C:3][C:4]!#[C:5]1'),
335
+ [1, 2, 3, 4, 5],
336
+ [],
337
+ 'CC1CCOC(C)(C)O1',
338
+ 'CC(O)CCO',
339
+ []
340
+ )
341
+
342
+ rules['hydroxyl_amine_acetone'] = (
343
+ smarts('[O;D2;x0;r5:1]1-;@[C;D4;x2;z1]([C;D1])([C;D1])-[N;z1:2][C:3]!#[C:4]1'),
344
+ [1, 2, 3, 4],
345
+ [],
346
+ 'CC1CN(C(C)=O)C(C)(C)O1',
347
+ 'CC(O)CNC(C)=O',
348
+ []
349
+ )
350
+
351
+ rules['diol_12_formalin'] = (
352
+ smarts('[O;D2;x0;r5:1]1-;@[C;D2;x2;z1]-[O;D2;x0:2][C:3]!#[C:4]1'),
353
+ [1, 2, 3, 4],
354
+ [],
355
+ 'CC1COCO1',
356
+ 'CC(O)CO',
357
+ []
358
+ )
359
+
360
+ rules['diol_13_formalin'] = (
361
+ smarts('[O;D2;x0;r6:1]1-;@[C;D2;x2;z1]-[O;D2;x0:2][C:3][C:4]!#[C:5]1'),
362
+ [1, 2, 3, 4, 5],
363
+ [],
364
+ 'CC1CCOCO1',
365
+ 'CC(O)CCO',
366
+ []
367
+ )
368
+
369
+ rules['diol_12_cyclopentanone'] = (
370
+ smarts('[O;D2;x0;r5:1]1-;@[C;D4;x2;z1]2([C;D2;x0;z1][C;D2;x0;z1][C;D2;x0;z1][C;D2;x0;z1]2)-[O;D2;x0:2][C:3]!#[C:4]1'),
371
+ [1, 2, 3, 4],
372
+ [],
373
+ 'CC1COC2(CCCC2)O1',
374
+ 'CC(O)CO',
375
+ []
376
+ )
377
+
378
+ rules['diol_13_cyclopentanone'] = (
379
+ smarts('[O;D2;x0;r6:1]1-;@[C;D4;x2;z1]2([C;D2;x0;z1][C;D2;x0;z1][C;D2;x0;z1][C;D2;x0;z1]2)-[O;D2;x0:2][C:3][C:4]!#[C:5]1'),
380
+ [1, 2, 3, 4, 5],
381
+ [],
382
+ 'CC1CCOC2(CCCC2)O1',
383
+ 'CC(O)CCO',
384
+ []
385
+ )
386
+
387
+ rules['diol_12_cyclohexanone'] = (
388
+ smarts('[O;D2;x0;r5:1]1-;@[C;D4;x2;z1]2([C;D2;x0;z1][C;D2;x0;z1][C;D2;x0;z1][C;D2;x0;z1][C;D2;x0;z1]2)-[O;D2;x0:2][C:3]!#[C:4]1'),
389
+ [1, 2, 3, 4],
390
+ [],
391
+ 'CC1COC2(CCCCC2)O1',
392
+ 'CC(O)CO',
393
+ []
394
+ )
395
+
396
+ rules['diol_13_cyclohexanone'] = (
397
+ smarts('[O;D2;x0;r6:1]1-;@[C;D4;x2;z1]2([C;D2;x0;z1][C;D2;x0;z1][C;D2;x0;z1][C;D2;x0;z1][C;D2;x0;z1]2)-[O;D2;x0:2][C:3][C:4]!#[C:5]1'),
398
+ [1, 2, 3, 4, 5],
399
+ [],
400
+ 'CC1CCOC2(CCCCC2)O1',
401
+ 'CC(O)CCO',
402
+ []
403
+ )
404
+
405
+ rules['diol_12_diacetal'] = (
406
+ smarts('[O;D2;x0;r6:1]1-;@[C;D4;x2;z1]([O;D2;x0][C;D1])([C;D1])[C;D4;x2;z1]([O;D2;x0][C;D1])([C;D1])-[O;D2;x0:2][C:3]!#[C:4]1'),
407
+ [1, 2, 3, 4],
408
+ [],
409
+ 'COC1(C)OCC(C)OC1(C)OC',
410
+ 'CC(O)CO',
411
+ []
412
+ )
413
+
414
+ rules['diol_13_diacetal'] = (
415
+ smarts('[O;D2;x0;r7:1]1-;@[C;D4;x2;z1]([O;D2;x0][C;D1])([C;D1])[C;D4;x2;z1]([O;D2;x0][C;D1])([C;D1])-[O;D2;x0:2][C:3][C:4]!#[C:5]1'),
416
+ [1, 2, 3, 4, 5],
417
+ [],
418
+ 'COC1(C)OCCC(C)OC1(C)OC',
419
+ 'CC(O)CCO',
420
+ []
421
+ )
422
+
423
+ rules['diol_12_benzylidene'] = (
424
+ smarts('[O;D2;x0;r5:1]1-;@[C;D3;x2;z1]([C;a;r6]:2:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:2)-[O;D2;x0:2][C:3]!#[C:4]1'),
425
+ [1, 2, 3, 4],
426
+ [],
427
+ 'CC1COC(O1)c1ccccc1',
428
+ 'CC(O)CO',
429
+ []
430
+ )
431
+
432
+ rules['diol_13_benzylidene'] = (
433
+ smarts('[O;D2;x0;r6:1]1-;@[C;D3;x2;z1]([C;a;r6]:2:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:2)-[O;D2;x0:2][C:3][C:4]!#[C:5]1'),
434
+ [1, 2, 3, 4, 5],
435
+ [],
436
+ 'CC1CCOC(O1)c1ccccc1',
437
+ 'CC(O)CCO',
438
+ []
439
+ )
440
+
441
+ rules['carbonyl_dithiolane'] = (
442
+ smarts('[C;D3,D4;z1;x2;r5:1]1[S;D2;x0;z1][C;D2;x1;z1][C;D2;x1;z1][S;D2;x0;z1]1'),
443
+ [1],
444
+ [(1, 'O', 2)],
445
+ 'CC1SCCS1',
446
+ 'CC=O',
447
+ []
448
+ )
449
+
450
+ rules['carbonyl_dithiane'] = (
451
+ smarts('[C;D3,D4;z1;x2;r6:1]1[S;D2;x0;z1][C;D2;x1;z1][C;D2;x0;z1][C;D2;x1;z1][S;D2;x0;z1]1'),
452
+ [1],
453
+ [(1, 'O', 2)],
454
+ 'CC1SCCCS1',
455
+ 'CC=O',
456
+ []
457
+ )
458
+
459
+ rules['carbonyl_dimethylsulfide'] = (
460
+ smarts('[C;D3,D4;z1;x2:1](-;!@[S;D2][C;D1])-;!@[S;D2][C;D1]'),
461
+ [1],
462
+ [(1, 'O', 2)],
463
+ 'CSC(CC)SC',
464
+ 'CCC=O',
465
+ []
466
+ )
467
+
468
+ rules['carbonyl_dioxolane'] = (
469
+ smarts('[C;D3,D4;z1;x2;r5:1]1[O;D2;x0][C;D2;x1;z1][C;D2;x1;z1][O;D2;x0]1'),
470
+ [1],
471
+ [(1, 'O', 2)],
472
+ 'CC1OCCO1',
473
+ 'CC=O',
474
+ []
475
+ )
476
+
477
+ rules['carbonyl_dioxane'] = (
478
+ smarts('[C;D3,D4;z1;x2;r6:1]1[O;D2;x0][C;D2;x1;z1][C;D2;x0;z1][C;D2;x1;z1][O;D2;x0]1'),
479
+ [1],
480
+ [(1, 'O', 2)],
481
+ 'CC1OCCCO1',
482
+ 'CC=O',
483
+ []
484
+ )
485
+
486
+ rules['carbonyl_dimethoxy'] = (
487
+ smarts('[C;D3,D4;z1;x2:1](-;!@[O;D2;x0][C;D1])-;!@[O;D2;x0][C;D1]'),
488
+ [1],
489
+ [(1, 'O', 2)],
490
+ 'COC(C)OC',
491
+ 'CC=O',
492
+ []
493
+ )
494
+
495
+ rules['carboxyl_trioxabicyclooctane'] = (
496
+ smarts('[C;D4;x3;r6:1]12-;@[O;D2][C;D2;x1;z1][C;D4;x0;z1]([C;D1])([C;D2;x1;z1][O;D2]1)[C;D2;x1;z1][O;D2]2'),
497
+ [1],
498
+ [(1, 'O', 2), (1, 'O', 1)],
499
+ 'CC(C)C12OCC(C)(CO1)CO2',
500
+ 'CC(C)C(O)=O',
501
+ ['CC(C)C12OCC(CC)(CO1)CO2', 'CC(C)C12OC(C)C(C)(CO1)CO2']
502
+ )
503
+
504
+ rules['amine_methylcarbamate'] = (
505
+ smarts('[N;D2,D3:1]-;!@[C;z2;x3](=O)[O;D2;x0][C;D1]'),
506
+ [1],
507
+ [],
508
+ 'c1ccccc1NC(=O)OC',
509
+ 'c1ccccc1N',
510
+ ['c1ccccc1NC(=O)OCC']
511
+ )
512
+
513
+ rules['amine_ethylcarbamate'] = (
514
+ smarts('[N;D2,D3:1]-;!@[C;z2;x3](=O)[O;D2;x0][C;D2;x1;z1][C;D1]'),
515
+ [1],
516
+ [],
517
+ 'c1ccccc1NC(=O)OCC',
518
+ 'c1ccccc1N',
519
+ []
520
+ )
521
+
522
+ rules['amine_alloc'] = (
523
+ smarts('[N;D2,D3:1]-;!@[C;z2;x3](=O)[O;D2;x0]-[C;D2;z1;x1][C;D2;x0;z2]=[C;D1]'),
524
+ [1],
525
+ [],
526
+ 'c1ccccc1NC(=O)OCC=C',
527
+ 'c1ccccc1N',
528
+ ['c1ccccc1NC(=O)OCC=CC']
529
+ )
530
+
531
+ rules['amine_teoc'] = (
532
+ smarts('[N;D2,D3:1]-;!@[C;z2;x3](=O)[O;D2;x0]-[C;D2;z1;x1][C;D2;x1;z1][Si;D4;z1;x0]([C;D1])([C;D1])[C;D1]'),
533
+ [1],
534
+ [],
535
+ 'c1ccccc1NC(=O)OCC[Si](C)(C)C',
536
+ 'c1ccccc1N',
537
+ []
538
+ )
539
+
540
+ rules['amine_sem'] = (
541
+ smarts('[N;D2,D3:1]-;!@[C;D2;x2;z1][O;D2;x0]-[C;D2;z1;x1][C;D2;x1;z1][Si;D4;z1;x0]([C;D1])([C;D1])[C;D1]'),
542
+ [1],
543
+ [],
544
+ 'CN(C)COCC[Si](C)(C)C',
545
+ 'CNC',
546
+ []
547
+ )
548
+
549
+ rules['amine_troc'] = (
550
+ smarts('[N;D2,D3:1]-;!@[C;z2;x3](=O)[O;D2;x0]-[C;D2][C;D4;x3]([Cl;D1])([Cl;D1])[Cl;D1]'),
551
+ [1],
552
+ [],
553
+ 'c1ccccc1NC(=O)OCC(Cl)(Cl)Cl',
554
+ 'c1ccccc1N',
555
+ ['c1ccccc1NC(=O)OC(C)C(Cl)(Cl)Cl']
556
+ )
557
+
558
+ rules['amine_cbz'] = (
559
+ smarts('[N;D2,D3:1]-;!@[C;z2;x3](=O)-[O;D2;x0][C;D2;x1;z1][C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
560
+ [1],
561
+ [],
562
+ 'c1ccccc1NC(=O)OCc2ccccc2',
563
+ 'c1ccccc1N',
564
+ ['c1ccccc1NC(=O)OC(C)c2ccccc2']
565
+ )
566
+
567
+ rules['amine_chloro_cbz'] = (
568
+ smarts('[N;D2,D3:1]-;!@[C;z2;x3](=O)-[O;D2;x0][C;D2;x1;z1][C;a;r6]:1:[C;D3;x1]([Cl;D1]):[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
569
+ [1],
570
+ [],
571
+ 'Clc1ccccc1COC(=O)Nc1ccccc1',
572
+ 'c1ccccc1N',
573
+ ['c1ccccc1NC(=O)OC(C)c2ccccc2']
574
+ )
575
+
576
+ rules['amine_phenylsulfonyl'] = (
577
+ smarts('[N;D2,D3:1]-;!@[S;D4;x3](=O)(=O)-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
578
+ [1],
579
+ [],
580
+ 'c1ccccc1S(=O)(=O)Nc1ccccc1',
581
+ 'c1ccccc1N',
582
+ []
583
+ )
584
+
585
+ rules['amine_tosyl'] = (
586
+ smarts('[N;D2,D3:1]-;!@[S;D4;x3](=O)(=O)-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D3;x0]([C;D1]):[C;D2]:[C;D2]:1'),
587
+ [1],
588
+ [],
589
+ 'Cc1ccc(cc1)S(=O)(=O)Nc1ccccc1',
590
+ 'c1ccccc1N',
591
+ []
592
+ )
593
+
594
+ rules['amine_nosyl'] = (
595
+ smarts('[N;D2,D3:1]-;!@[S;D4;x3](=O)(=O)-[C;a;r6]:1:[C;D3;x1]([N+](=O)[O-]):[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
596
+ [1],
597
+ [],
598
+ '[O-][N+](=O)c1ccccc1S(=O)(=O)Nc1ccccc1',
599
+ 'c1ccccc1N',
600
+ []
601
+ )
602
+
603
+ rules['amine_boc'] = (
604
+ smarts('[N;D2,D3:1]-;!@[C;z2;x3](=O)-[O;D2;x0]-[C;D4;x1;z1]([C;D1])([C;D1])[C;D1]'),
605
+ [1],
606
+ [],
607
+ 'c1ccccc1NC(=O)OC(C)(C)C',
608
+ 'c1ccccc1N',
609
+ []
610
+ )
611
+
612
+ rules['amine_tfa'] = (
613
+ smarts('[N;D2,D3:1]-;!@[C;z2;x2](=O)-[C;D4;z1;x3](F)(F)F'),
614
+ [1],
615
+ [],
616
+ 'CNC(=O)C(F)(F)F',
617
+ 'CN',
618
+ []
619
+ )
620
+
621
+ rules['amine_fmoc'] = (
622
+ smarts('[N;D2,D3:1]-;!@[C;z2;x3](=O)[O;D2;x0]-[C;D2;x1;z1][C;D3;z1;x0;r5]1[C;a;r6]:2:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D3]:2-[C;a;r6]:3:[C;D2]:[C;D2]:[C;D2]:[C;D2]:C1:3'),
623
+ [1],
624
+ [],
625
+ 'O=C(Nc1ccccc1)OCC1c2ccccc2-c2ccccc12',
626
+ 'c1ccccc1N',
627
+ []
628
+ )
629
+
630
+ rules['amine_pbf'] = (
631
+ smarts('[N;D2,D3:1]-;!@[S;D4;x3](=O)(=O)-[C;a;r6]:1:[C;D3;x0]([C;D1]):[C;D3;x0]([C;D1]):[C;D3;x1]:2-[O;D2;x0;r5][C;D4;x1]([C;D1])([C;D1])[C;D2;x0;z1][C;D3]:2:[C;D3;x0]([C;D1]):1'),
632
+ [1],
633
+ [],
634
+ 'CN(C)S(=O)(=O)c1c(C)c2CC(C)(C)Oc2c(C)c1C',
635
+ 'CNC',
636
+ []
637
+ )
638
+
639
+ rules['amine_mtr'] = (
640
+ smarts('[N;D2,D3:1]-;!@[S;D4;x3](=O)(=O)-[C;a;r6]:1:[C;D3;x0]([C;D1]):[C;D3;x0]([C;D1]):[C;D3;x1](-;!@[O;D2;x0][C;D1]):[C;D2]:[C;D3;x0]([C;D1]):1'),
641
+ [1],
642
+ [],
643
+ 'COC1=C(C)C(C)=C(C(C)=C1)S(=O)(=O)N(C)C',
644
+ 'CNC',
645
+ []
646
+ )
647
+
648
+ rules['amine_dde_enamine'] = (
649
+ smarts('[N;D2,D3:1]-;!@[C;z2;x1;D3]([C;D1])=[C;D3;r6;x0;z2]1[C;x1;z2;D3](=O)[C;D2][C;D4;x0;z1]([C;D1])([C;D1])[C;D2][C;D3;x1;z2]1=O'),
650
+ [1],
651
+ [],
652
+ 'CC(C)NC(C)=C1C(=O)CC(C)(C)CC1=O',
653
+ 'CC(C)N',
654
+ []
655
+ )
656
+
657
+ rules['amine_dde_imine'] = (
658
+ smarts('[N;D2:1]=;!@[C;x1;D3]([C;D1])-[C;D3;r6;x0;z1]1[C;x1;z2;D3](=O)[C;D2][C;D4;x0;z1]([C;D1])([C;D1])[C;D2][C;D3;x1;z2]1=O'),
659
+ [1],
660
+ [],
661
+ 'CC(C)N=C(C)C1C(=O)CC(C)(C)CC1=O',
662
+ 'CC(C)N',
663
+ []
664
+ )
665
+
666
+ rules['amine_ivdde_enamine'] = (
667
+ smarts('[N;D2,D3:1]-;!@[C;z2;x1;D3]([C;D2;x0;z1][C;D3;x0;z1]([C;D1])[C;D1])=[C;D3;r6;x0;z2]1[C;x1;z2;D3](=O)[C;D2][C;D4;x0;z1]([C;D1])([C;D1])[C;D2][C;D3;x1;z2]1=O'),
668
+ [1],
669
+ [],
670
+ 'CC(C)CC(NC(C)C)=C1C(=O)CC(C)(C)CC1=O',
671
+ 'CC(C)N',
672
+ []
673
+ )
674
+
675
+ rules['amine_ivdde_imine'] = (
676
+ smarts('[N;D2:1]=;!@[C;x1;D3]([C;D2;x0;z1][C;D3;x0;z1]([C;D1])[C;D1])-[C;D3;r6;x0;z1]1[C;x1;z2;D3](=O)[C;D2][C;D4;x0;z1]([C;D1])([C;D1])[C;D2][C;D3;x1;z2]1=O'),
677
+ [1],
678
+ [],
679
+ 'CC(C)CC(=NC(C)C)C1C(=O)CC(C)(C)CC1=O',
680
+ 'CC(C)N',
681
+ []
682
+ )
683
+
684
+ rules['amine_phth'] = (
685
+ smarts('[N;D3:1]1[C;z2;x2;D3](=O)[C;a;r6]:2:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D3]:2[C;z2;x2;D3]1=O'),
686
+ [1],
687
+ [],
688
+ 'O=C1c2ccccc2C(=O)N1Cc1ccccc1',
689
+ 'NCc1ccccc1',
690
+ []
691
+ )
692
+
693
+ rules['amine_benzyl'] = (
694
+ smarts('[N;D2,D3:1]-;!@[C;D2;z1;x1]-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
695
+ [1],
696
+ [],
697
+ 'CC(C)NCc1ccccc1',
698
+ 'CC(C)N',
699
+ []
700
+ )
701
+
702
+ rules['amine_methoxy_benzyl'] = (
703
+ smarts('[N;D2,D3:1]-;!@[C;D2;z1;x1]-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D3;x1]([O;D2;x0][C;D1]):[C;D2]:[C;D2]:1'),
704
+ [1],
705
+ [],
706
+ 'CC(C)NCc1ccc(OC)cc1',
707
+ 'CC(C)N',
708
+ []
709
+ )
710
+
711
+ rules['amine_dimethoxybenzyl'] = (
712
+ smarts('[N;D2,D3:1]-;!@[C;D2;z1;x1]-[C;a;r6]:1:[C;D3;x1]([O;D2;x0][C;D1]):[C;D2]:[C;D3;x1]([O;D2;x0][C;D1]):[C;D2]:[C;D2]:1'),
713
+ [1],
714
+ [],
715
+ 'CC(C)NCc1c(OC)cc(OC)cc1',
716
+ 'CC(C)N',
717
+ []
718
+ )
719
+
720
+ rules['amine_mtt'] = (
721
+ smarts('[N;D2,D3:1]-;!@[C;D4;z1;x1](-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D3;x0]([C;D1]):[C;D2]:[C;D2]:1)(-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1)-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
722
+ [1],
723
+ [],
724
+ 'CC(C)NC(c1ccccc1)(c1ccccc1)c1ccc(C)cc1',
725
+ 'CC(C)N',
726
+ []
727
+ )
728
+
729
+ rules['amine_bhoc'] = (
730
+ smarts('[N;D2,D3:1]-;!@[C;z2;x3](=O)[O;D2;x0]-[C;D3;z1;x1](-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1)-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
731
+ [1],
732
+ [],
733
+ 'CNC(=O)OC(c1ccccc1)c1ccccc1',
734
+ 'CN',
735
+ []
736
+ )
737
+
738
+ rules['amine_tritil'] = (
739
+ smarts('[N;D2,D3:1]-;!@[C;D4;z1;x1](-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1)(-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1)-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
740
+ [1],
741
+ [],
742
+ 'CC(C)NC(c1ccccc1)(c1ccccc1)c1ccccc1',
743
+ 'CC(C)N',
744
+ []
745
+ )
746
+
747
+ rules['amine_chloro_tritil'] = (
748
+ smarts('[N;D2,D3:1]-;!@[C;D4;z1;x1](-[C;a;r6]:1:[C;D3;x1]([Cl;D1]):[C;D2]:[C;D2]:[C;D2]:[C;D2]:1)(-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1)-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
749
+ [1],
750
+ [],
751
+ 'CC(C)NC(c1c(Cl)cccc1)(c1ccccc1)c1ccccc1',
752
+ 'CC(C)N',
753
+ []
754
+ )
755
+
756
+ rules['amine_thp'] = (
757
+ smarts('[N;D2,D3:1]-;!@[C;D3;x2;z1;r6]1[O;D2][C;D2][C;D2][C;D2][C;D2]1'),
758
+ [1],
759
+ [],
760
+ 'c1cn(C2CCCCO2)nc1',
761
+ 'c1c[nH]nc1',
762
+ []
763
+ )
764
+
765
+ rules['amine_sulfinyl'] = (
766
+ smarts('[N;D2,D3:1]-;!@[S;D3;x2;z2](=O)[C;D4;x1;z1]([C;D1])([C;D1])[C;D1]'),
767
+ [1],
768
+ [],
769
+ 'c1ccccc1NS(=O)C(C)(C)C',
770
+ 'c1ccccc1N',
771
+ []
772
+ )
773
+
774
+ rules['amine_acyl'] = (
775
+ smarts('[N;D2,D3:1]-;!@[C;z2;x2](=O)-[C;D1]'),
776
+ [1],
777
+ [],
778
+ 'c1ccccc1NC(=O)C',
779
+ 'c1ccccc1N',
780
+ []
781
+ )
782
+
783
+ rules['amine_benzhydrylidene'] = (
784
+ smarts('[N;D2:1]=;!@[C;D3;z2;x1](-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1)-[C;a;r6]:2:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:2'),
785
+ [1],
786
+ [],
787
+ 'c1ccccc1N=C(c1ccccc1)c1ccccc1',
788
+ 'c1ccccc1N',
789
+ []
790
+ )
791
+
792
+ rules['amine_tbu'] = (
793
+ smarts('[N;D2,D3:1]-;!@[C;D4;x1;z1]([C;D1])([C;D1])[C;D1]'),
794
+ [1],
795
+ [],
796
+ 'c1ccccc1NC(C)(C)C',
797
+ 'c1ccccc1N',
798
+ []
799
+ )
800
+
801
+ rules['amine_benzoate'] = (
802
+ smarts('[N;D2,D3:1]-;!@[C;z2;x2](=O)-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
803
+ [1],
804
+ [],
805
+ 'c1ccccc1NC(=O)c1ccccc1',
806
+ 'c1ccccc1N',
807
+ []
808
+ )
809
+
810
+ rules['thiol_tritil'] = (
811
+ smarts('[S;D2;x0;z1:1]-;!@[C;D4;z1;x1](-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1)(-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1)-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
812
+ [1],
813
+ [],
814
+ 'CC(C)SC(c1ccccc1)(c1ccccc1)c1ccccc1',
815
+ 'CC(C)S',
816
+ []
817
+ )
818
+
819
+ rules['thiol_mmt'] = (
820
+ smarts('[S;D2;x0;z1:1]-;!@[C;D4;z1;x1](-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D3;x1]([O;D2;x0][C;D1]):[C;D2]:[C;D2]:1)(-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1)-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
821
+ [1],
822
+ [],
823
+ 'c1ccc(cc1)C(SC(C)C)(c1ccccc1)c1ccc(OC)cc1',
824
+ 'CC(C)S',
825
+ []
826
+ )
827
+
828
+ rules['thiol_dimetoxy_tritil'] = (
829
+ smarts('[S;D2;x0;z1:1]-;!@[C;D4;z1;x1](-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D3;x1]([O;D2;x0][C;D1]):[C;D2]:[C;D2]:1)(-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D3;x1]([O;D2;x0][C;D1]):[C;D2]:[C;D2]:1)-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
830
+ [1],
831
+ [],
832
+ 'COc1ccc(cc1)C(SC(C)C)(c1ccccc1)c1ccc(OC)cc1',
833
+ 'CC(C)S',
834
+ []
835
+ )
836
+
837
+ rules['thiol_chloro_tritil'] = (
838
+ smarts('[S;D2;x0;z1:1]-;!@[C;D4;z1;x1](-[C;a;r6]:1:[C;D3;x1]([Cl;D1]):[C;D2]:[C;D2]:[C;D2]:[C;D2]:1)(-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1)-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
839
+ [1],
840
+ [],
841
+ 'CC(C)SC(c1c(Cl)cccc1)(c1ccccc1)c1ccccc1',
842
+ 'CC(C)S',
843
+ []
844
+ )
845
+
846
+ rules['thiol_benzyl'] = (
847
+ smarts('[S;D2;x0;z1:1]-;!@[C;D2;z1;x1]-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
848
+ [1],
849
+ [],
850
+ 'CC(C)SCc1ccccc1',
851
+ 'CC(C)S',
852
+ []
853
+ )
854
+
855
+ rules['thiol_tbu'] = (
856
+ smarts('[S;D2;x0;z1:1]-;!@[C;D4;x1;z1]([C;D1])([C;D1])[C;D1]'),
857
+ [1],
858
+ [],
859
+ 'CC(C)SC(C)(C)C',
860
+ 'CC(C)S',
861
+ []
862
+ )
863
+
864
+ rules['thiol_stbu'] = (
865
+ smarts('[S;D2;x1;z1:1]-;!@[S;D2;z1;x1]-[C;D4;x1;z1]([C;D1])([C;D1])[C;D1]'),
866
+ [1],
867
+ [],
868
+ 'CC(C)SSC(C)(C)C',
869
+ 'CC(C)S',
870
+ []
871
+ )
872
+
873
+ rules['thiol_strimethoxyphenyl'] = (
874
+ smarts('[S;D2;x1;z1:1]-;!@[S;D2;z1;x1]-[C;a;r6]:1:[C;D3;x1]([O;D2;x0][C;D1]):[C;D2]:[C;D3;x1]([O;D2;x0][C;D1]):[C;D2]:[C;D3;x1]:1[O;D2;x0][C;D1]'),
875
+ [1],
876
+ [],
877
+ 'COc1cc(OC)c(SSC(C)C)c(OC)c1',
878
+ 'CC(C)S',
879
+ []
880
+ )
881
+
882
+ rules['thiol_amine_dimethoxybenzyl'] = (
883
+ smarts('[S;D2;r5;x0;z1:1]1[C:3][C:4][N;z1:2]-[C;D3;x2;z1]1-[C;a;r6]:1:[C;D3;x1]([O;D2;x0][C;D1]):[C;D2]:[C;D3;x1]([O;D2;x0][C;D1]):[C;D2]:[C;D2]:1'),
884
+ [1, 2, 3, 4],
885
+ [],
886
+ 'COC1=CC=C(C2NC(C)CS2)C(OC)=C1',
887
+ 'NC(C)CS',
888
+ []
889
+ )
890
+
891
+ # hydroxyl Boc: O-C(=O)-O-C(C)(C)C (tert-butoxycarbonyl on O)
892
+ rules['hydroxyl_boc'] = (
893
+ smarts('[O;D2:1]-;!@[C;z2;x3](=O)[O;D2;x0]-[C;D4;x1;z1]([C;D1])([C;D1])[C;D1]'),
894
+ [1],
895
+ [],
896
+ 'CC(C)OC(=O)OC(C)(C)C',
897
+ 'CC(C)O',
898
+ []
899
+ )
900
+
901
+ # General patterns that are subsets of more specific ones above.
902
+ # Must come last to prevent false matches due to atom overlap.
903
+
904
+ rules['hydroxyl_tbu'] = (
905
+ smarts('[O;D2:1]-;!@[C;D4;x1;z1]([C;D1])([C;D1])[C;D1]'),
906
+ [1],
907
+ [],
908
+ 'CC(C)OC(C)(C)C',
909
+ 'CC(C)O',
910
+ []
911
+ )
912
+
913
+ rules['hydroxyl_allyl'] = (
914
+ smarts('[O;D2:1]-;!@[C;D2;z1;x1][C;D2;x0;z2]=[C;D1]'),
915
+ [1],
916
+ [],
917
+ 'CC(C)OCC=C',
918
+ 'CC(C)O',
919
+ []
920
+ )
921
+
922
+ rules['hydroxyl_benzyl'] = (
923
+ smarts('[O;D2:1]-;!@[C;D2;z1;x1]-[C;a;r6]:1:[C;D2]:[C;D2]:[C;D2]:[C;D2]:[C;D2]:1'),
924
+ [1],
925
+ [],
926
+ 'CC(C)OCc1ccccc1',
927
+ 'CC(C)O',
928
+ ['CC(C)OCc1cccc(C)c1', 'CC(C)OC(C)c1ccccc1']
929
+ )
930
+
931
+ rules['hydroxyl_acyl'] = (
932
+ smarts('[O;D2:1]-;!@[C;z2;x2](=O)-[C;D1]'),
933
+ [1],
934
+ [],
935
+ 'CC(C)OC(=O)C',
936
+ 'CC(C)O',
937
+ ['CC(C)OC(=O)CC']
938
+ )
939
+
940
+ rules['hydroxyl_methyl'] = (
941
+ smarts('[O;D2:1]-;!@[C;D1]'),
942
+ [1],
943
+ [],
944
+ 'CC(C)OC',
945
+ 'CC(C)O',
946
+ ['CC(C)OCC']
947
+ )
948
+
949
+ rules['hydroxyl_ethyl'] = (
950
+ smarts('[O;D2:1]-;!@[C;D2;z1;x1]-[C;D1]'),
951
+ [1],
952
+ [],
953
+ 'CC(C)OCC',
954
+ 'CC(C)O',
955
+ []
956
+ )
957
+
958
+ return rules
959
+
960
+
961
+ rules = Proxy(_rules)
962
+
963
+
964
+ __all__ = ['rules']