chython 2.4__cp312-cp312-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 (171) hide show
  1. chython/__init__.py +31 -0
  2. chython/_functions.py +69 -0
  3. chython/algorithms/__init__.py +18 -0
  4. chython/algorithms/_isomorphism.cp312-win_amd64.pyd +0 -0
  5. chython/algorithms/_isomorphism.pyx +189 -0
  6. chython/algorithms/aromatics/__init__.py +27 -0
  7. chython/algorithms/aromatics/_rules.py +124 -0
  8. chython/algorithms/aromatics/kekule.py +530 -0
  9. chython/algorithms/aromatics/test/__init__.py +18 -0
  10. chython/algorithms/aromatics/test/test_kekule.py +160 -0
  11. chython/algorithms/aromatics/test/test_thiele.py +263 -0
  12. chython/algorithms/aromatics/thiele.py +226 -0
  13. chython/algorithms/calculate2d/__init__.py +23 -0
  14. chython/algorithms/calculate2d/clean2d.js +1 -0
  15. chython/algorithms/calculate2d/molecule.py +149 -0
  16. chython/algorithms/calculate2d/reaction.py +80 -0
  17. chython/algorithms/depict.py +523 -0
  18. chython/algorithms/fingerprints/__init__.py +48 -0
  19. chython/algorithms/fingerprints/linear.py +208 -0
  20. chython/algorithms/fingerprints/morgan.py +137 -0
  21. chython/algorithms/fingerprints/test/__init__.py +18 -0
  22. chython/algorithms/fingerprints/test/test_linear.py +127 -0
  23. chython/algorithms/fingerprints/test/test_morgan.py +79 -0
  24. chython/algorithms/isomorphism.py +667 -0
  25. chython/algorithms/mapping/__init__.py +28 -0
  26. chython/algorithms/mapping/_groups.py +94 -0
  27. chython/algorithms/mapping/_reactions.py +72 -0
  28. chython/algorithms/mapping/attention.py +216 -0
  29. chython/algorithms/mapping/fixmapper.py +84 -0
  30. chython/algorithms/mapping/groups.py +137 -0
  31. chython/algorithms/mcs.py +202 -0
  32. chython/algorithms/morgan.py +82 -0
  33. chython/algorithms/rings.py +551 -0
  34. chython/algorithms/smiles.py +556 -0
  35. chython/algorithms/standardize/__init__.py +30 -0
  36. chython/algorithms/standardize/_charged.py +115 -0
  37. chython/algorithms/standardize/_groups.py +926 -0
  38. chython/algorithms/standardize/_metal_organics.py +189 -0
  39. chython/algorithms/standardize/_reagents.py +44 -0
  40. chython/algorithms/standardize/_salts.py +68 -0
  41. chython/algorithms/standardize/molecule.py +479 -0
  42. chython/algorithms/standardize/reaction.py +429 -0
  43. chython/algorithms/standardize/resonance.py +196 -0
  44. chython/algorithms/standardize/salts.py +128 -0
  45. chython/algorithms/standardize/saturation.py +378 -0
  46. chython/algorithms/standardize/test/__init__.py +18 -0
  47. chython/algorithms/standardize/test/test_groups.py +118 -0
  48. chython/algorithms/stereo.py +1222 -0
  49. chython/algorithms/tautomers/__init__.py +171 -0
  50. chython/algorithms/tautomers/_acid.py +59 -0
  51. chython/algorithms/tautomers/_base.py +116 -0
  52. chython/algorithms/tautomers/_keto_enol.py +107 -0
  53. chython/algorithms/tautomers/acid_base.py +214 -0
  54. chython/algorithms/tautomers/heteroarenes.py +108 -0
  55. chython/algorithms/tautomers/keto_enol.py +148 -0
  56. chython/algorithms/tautomers/test/__init__.py +18 -0
  57. chython/algorithms/tautomers/test/test_tautomers.py +80 -0
  58. chython/algorithms/test/__init__.py +18 -0
  59. chython/algorithms/test/test_isomorphism.py +58 -0
  60. chython/algorithms/test/test_smiles.py +76 -0
  61. chython/algorithms/x3dom.py +355 -0
  62. chython/containers/__init__.py +43 -0
  63. chython/containers/_pack_v2.cp312-win_amd64.pyd +0 -0
  64. chython/containers/_pack_v2.pyx +271 -0
  65. chython/containers/_unpack_v0v2.cp312-win_amd64.pyd +0 -0
  66. chython/containers/_unpack_v0v2.pyx +300 -0
  67. chython/containers/bonds.py +255 -0
  68. chython/containers/cgr.py +115 -0
  69. chython/containers/graph.py +200 -0
  70. chython/containers/molecule.py +695 -0
  71. chython/containers/query.py +66 -0
  72. chython/containers/reaction.py +324 -0
  73. chython/exceptions.py +114 -0
  74. chython/files/MRVrw.py +523 -0
  75. chython/files/PDBrw.py +257 -0
  76. chython/files/RDFrw.py +298 -0
  77. chython/files/SDFrw.py +221 -0
  78. chython/files/__init__.py +29 -0
  79. chython/files/_convert.py +207 -0
  80. chython/files/_mapping.py +117 -0
  81. chython/files/_xyz.cp312-win_amd64.pyd +0 -0
  82. chython/files/_xyz.pyx +74 -0
  83. chython/files/daylight/__init__.py +24 -0
  84. chython/files/daylight/parser.py +157 -0
  85. chython/files/daylight/smarts.py +107 -0
  86. chython/files/daylight/smiles.py +245 -0
  87. chython/files/daylight/test/__init__.py +18 -0
  88. chython/files/daylight/test/test_daylight_smarts.py +289 -0
  89. chython/files/daylight/test/test_daylight_smiles.py +101 -0
  90. chython/files/daylight/test/test_parser.py +118 -0
  91. chython/files/daylight/test/test_tokenize.py +77 -0
  92. chython/files/daylight/tokenize.py +376 -0
  93. chython/files/libinchi/__init__.py +22 -0
  94. chython/files/libinchi/libinchi.dll +0 -0
  95. chython/files/libinchi/wrapper.py +555 -0
  96. chython/files/mdl/__init__.py +25 -0
  97. chython/files/mdl/emol.py +209 -0
  98. chython/files/mdl/erxn.py +67 -0
  99. chython/files/mdl/mol.py +144 -0
  100. chython/files/mdl/read.py +225 -0
  101. chython/files/mdl/rxn.py +67 -0
  102. chython/files/mdl/stereo.py +63 -0
  103. chython/files/mdl/write.py +165 -0
  104. chython/files/xyz.py +78 -0
  105. chython/periodictable/__init__.py +69 -0
  106. chython/periodictable/base/__init__.py +25 -0
  107. chython/periodictable/base/dynamic.py +149 -0
  108. chython/periodictable/base/element.py +452 -0
  109. chython/periodictable/base/groups.py +90 -0
  110. chython/periodictable/base/periods.py +46 -0
  111. chython/periodictable/base/query.py +473 -0
  112. chython/periodictable/base/vector.py +119 -0
  113. chython/periodictable/groupI.py +252 -0
  114. chython/periodictable/groupII.py +223 -0
  115. chython/periodictable/groupIII.py +1154 -0
  116. chython/periodictable/groupIV.py +210 -0
  117. chython/periodictable/groupIX.py +196 -0
  118. chython/periodictable/groupV.py +192 -0
  119. chython/periodictable/groupVI.py +183 -0
  120. chython/periodictable/groupVII.py +162 -0
  121. chython/periodictable/groupVIII.py +161 -0
  122. chython/periodictable/groupX.py +166 -0
  123. chython/periodictable/groupXI.py +164 -0
  124. chython/periodictable/groupXII.py +158 -0
  125. chython/periodictable/groupXIII.py +239 -0
  126. chython/periodictable/groupXIV.py +262 -0
  127. chython/periodictable/groupXV.py +276 -0
  128. chython/periodictable/groupXVI.py +457 -0
  129. chython/periodictable/groupXVII.py +324 -0
  130. chython/periodictable/groupXVIII.py +260 -0
  131. chython/reactor/__init__.py +24 -0
  132. chython/reactor/base.py +212 -0
  133. chython/reactor/deprotection.py +565 -0
  134. chython/reactor/groups.py +128 -0
  135. chython/reactor/reactions/__init__.py +157 -0
  136. chython/reactor/reactions/_amidation.py +58 -0
  137. chython/reactor/reactions/_amine_isocyanate.py +52 -0
  138. chython/reactor/reactions/_buchwald_hartwig.py +50 -0
  139. chython/reactor/reactions/_esterification.py +49 -0
  140. chython/reactor/reactions/_macmillan.py +43 -0
  141. chython/reactor/reactions/_reductive_amination.py +50 -0
  142. chython/reactor/reactions/_sonogashira.py +49 -0
  143. chython/reactor/reactions/_sulfonamidation.py +52 -0
  144. chython/reactor/reactions/_suzuki_miyaura.py +88 -0
  145. chython/reactor/reactions/ufe.py +99 -0
  146. chython/reactor/reactor.py +170 -0
  147. chython/reactor/retro/__init__.py +77 -0
  148. chython/reactor/retro/_amidation.py +39 -0
  149. chython/reactor/retro/_aryl_amination.py +32 -0
  150. chython/reactor/retro/_mitsunobu.py +49 -0
  151. chython/reactor/retro/_sonogashira.py +49 -0
  152. chython/reactor/retro/_suzuki_miyaura.py +54 -0
  153. chython/reactor/scaffold.py +122 -0
  154. chython/reactor/test/__init__.py +18 -0
  155. chython/reactor/test/test_deprotection.py +57 -0
  156. chython/reactor/test/test_reactor.py +40 -0
  157. chython/reactor/test/test_scaffold.py +57 -0
  158. chython/reactor/test/test_transformer.py +40 -0
  159. chython/reactor/transformer.py +62 -0
  160. chython/utils/__init__.py +57 -0
  161. chython/utils/free_wilson.py +114 -0
  162. chython/utils/grid.py +130 -0
  163. chython/utils/rdkit.py +165 -0
  164. chython/utils/retro.py +139 -0
  165. chython/utils/svg.py +57 -0
  166. chython/utils/test/__init__.py +18 -0
  167. chython/utils/test/test_rdkit.py +71 -0
  168. chython-2.4.dist-info/LICENSE +165 -0
  169. chython-2.4.dist-info/METADATA +101 -0
  170. chython-2.4.dist-info/RECORD +171 -0
  171. chython-2.4.dist-info/WHEEL +4 -0
@@ -0,0 +1,1154 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright 2019-2024 Ramil Nugmanov <nougmanoff@protonmail.com>
4
+ # Copyright 2019 Tagir Akhmetshin <tagirshin@gmail.com>
5
+ # This file is part of chython.
6
+ #
7
+ # chython is free software; you can redistribute it and/or modify
8
+ # it under the terms of the GNU Lesser General Public License as published by
9
+ # the Free Software Foundation; either version 3 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU Lesser General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU Lesser General Public License
18
+ # along with this program; if not, see <https://www.gnu.org/licenses/>.
19
+ #
20
+ from .base import Element
21
+ from .base.groups import GroupIII
22
+ from .base.periods import PeriodIV, PeriodV, PeriodVI, PeriodVII
23
+
24
+
25
+ class Sc(Element, PeriodIV, GroupIII):
26
+ __slots__ = ()
27
+
28
+ @property
29
+ def atomic_number(self):
30
+ return 21
31
+
32
+ @property
33
+ def isotopes_distribution(self):
34
+ return {44: 0., 45: 1.0}
35
+
36
+ @property
37
+ def isotopes_masses(self):
38
+ return {44: 43.959403, 45: 44.955910}
39
+
40
+ @property
41
+ def _common_valences(self):
42
+ return 0, 3
43
+
44
+ @property
45
+ def _valences_exceptions(self):
46
+ return (3, False, 0, ()), (-3, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F')))
47
+
48
+ @property
49
+ def atomic_radius(self):
50
+ return 1.84
51
+
52
+ @property
53
+ def mdl_isotope(self):
54
+ return 45
55
+
56
+
57
+ class Y(Element, PeriodV, GroupIII):
58
+ __slots__ = ()
59
+
60
+ @property
61
+ def atomic_number(self):
62
+ return 39
63
+
64
+ @property
65
+ def isotopes_distribution(self):
66
+ return {86: 0., 89: 1.0, 90: 0.}
67
+
68
+ @property
69
+ def isotopes_masses(self):
70
+ return {86: 85.914886, 89: 88.905848, 90: 89.907152}
71
+
72
+ @property
73
+ def _common_valences(self):
74
+ return 0, 3
75
+
76
+ @property
77
+ def _valences_exceptions(self):
78
+ return (3, False, 0, ()),
79
+
80
+ @property
81
+ def atomic_radius(self):
82
+ return 2.12
83
+
84
+ @property
85
+ def mdl_isotope(self):
86
+ return 89
87
+
88
+
89
+ class La(Element, PeriodVI, GroupIII):
90
+ __slots__ = ()
91
+
92
+ @property
93
+ def atomic_number(self):
94
+ return 57
95
+
96
+ @property
97
+ def isotopes_distribution(self):
98
+ return {138: 0.0009, 139: 0.9991}
99
+
100
+ @property
101
+ def isotopes_masses(self):
102
+ return {138: 137.907107, 139: 138.906348}
103
+
104
+ @property
105
+ def _common_valences(self):
106
+ return 0, 3
107
+
108
+ @property
109
+ def _valences_exceptions(self):
110
+ return (3, False, 0, ()),
111
+
112
+ @property
113
+ def atomic_radius(self):
114
+ return 2.12 # unknown, taken radius of previous element in group
115
+
116
+ @property
117
+ def mdl_isotope(self):
118
+ return 139
119
+
120
+
121
+ class Ce(Element, PeriodVI, GroupIII):
122
+ __slots__ = ()
123
+
124
+ @property
125
+ def atomic_number(self):
126
+ return 58
127
+
128
+ @property
129
+ def isotopes_distribution(self):
130
+ return {136: 0.00185, 138: 0.00251, 140: 0.8845, 142: 0.11114}
131
+
132
+ @property
133
+ def isotopes_masses(self):
134
+ return {136: 135.90714, 138: 137.905986, 140: 139.905434, 142: 141.90924}
135
+
136
+ @property
137
+ def _common_valences(self):
138
+ return 0, 3
139
+
140
+ @property
141
+ def _valences_exceptions(self):
142
+ return ((3, False, 0, ()),
143
+ (0, False, 0, ((1, 'O'), (1, 'O'), (1, 'O'), (1, 'O'))),
144
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))),
145
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
146
+ (0, False, 0, ((2, 'O'), (2, 'O'))))
147
+
148
+ @property
149
+ def atomic_radius(self):
150
+ return 2.12 # unknown, taken radius of previous element in group
151
+
152
+ @property
153
+ def mdl_isotope(self):
154
+ return 140
155
+
156
+
157
+ class Pr(Element, PeriodVI, GroupIII):
158
+ __slots__ = ()
159
+
160
+ @property
161
+ def atomic_number(self):
162
+ return 59
163
+
164
+ @property
165
+ def isotopes_distribution(self):
166
+ return {141: 1.0}
167
+
168
+ @property
169
+ def isotopes_masses(self):
170
+ return {141: 140.907648}
171
+
172
+ @property
173
+ def _common_valences(self):
174
+ return 0, 3
175
+
176
+ @property
177
+ def _valences_exceptions(self):
178
+ return ((3, False, 0, ()),
179
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))),
180
+ (0, False, 0, ((2, 'O'), (2, 'O'))))
181
+
182
+ @property
183
+ def atomic_radius(self):
184
+ return 2.47
185
+
186
+ @property
187
+ def mdl_isotope(self):
188
+ return 141
189
+
190
+
191
+ class Nd(Element, PeriodVI, GroupIII):
192
+ __slots__ = ()
193
+
194
+ @property
195
+ def atomic_number(self):
196
+ return 60
197
+
198
+ @property
199
+ def isotopes_distribution(self):
200
+ return {142: 0.272, 143: 0.122, 144: 0.238, 145: 0.083, 146: 0.172, 148: 0.057, 150: 0.056}
201
+
202
+ @property
203
+ def isotopes_masses(self):
204
+ return {142: 141.907719, 143: 142.90981, 144: 143.910083, 145: 144.912569, 146: 145.913112, 148: 147.916889,
205
+ 150: 149.920887}
206
+
207
+ @property
208
+ def _common_valences(self):
209
+ return 0, 3
210
+
211
+ @property
212
+ def _valences_exceptions(self):
213
+ return ((3, False, 0, ()),
214
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))),
215
+ (0, False, 0, ((2, 'O'),)),
216
+ (0, False, 0, ((1, 'O'), (1, 'O'))),
217
+ (0, False, 0, ((1, 'F'), (1, 'F'))),
218
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'))),
219
+ (0, False, 0, ((1, 'Br'), (1, 'Br'))),
220
+ (0, False, 0, ((1, 'I'), (1, 'I'))),
221
+ (0, False, 0, ((1, 'F'), (1, 'Cl'))),
222
+ (0, False, 0, ((1, 'F'), (1, 'Br'))),
223
+ (0, False, 0, ((1, 'F'), (1, 'I'))),
224
+ (0, False, 0, ((1, 'C'), (1, 'C'))),
225
+ (0, False, 0, ((1, 'H'), (1, 'H'))))
226
+
227
+ @property
228
+ def atomic_radius(self):
229
+ return 2.06
230
+
231
+ @property
232
+ def mdl_isotope(self):
233
+ return 144
234
+
235
+
236
+ class Pm(Element, PeriodVI, GroupIII):
237
+ __slots__ = ()
238
+
239
+ @property
240
+ def atomic_number(self):
241
+ return 61
242
+
243
+ @property
244
+ def isotopes_distribution(self):
245
+ return {145: 1.0}
246
+
247
+ @property
248
+ def isotopes_masses(self):
249
+ return {145: 144.912749}
250
+
251
+ @property
252
+ def _common_valences(self):
253
+ return 0, 3
254
+
255
+ @property
256
+ def _valences_exceptions(self):
257
+ return (3, False, 0, ()),
258
+
259
+ @property
260
+ def atomic_radius(self):
261
+ return 2.05
262
+
263
+ @property
264
+ def mdl_isotope(self):
265
+ return 145
266
+
267
+
268
+ class Sm(Element, PeriodVI, GroupIII):
269
+ __slots__ = ()
270
+
271
+ @property
272
+ def atomic_number(self):
273
+ return 62
274
+
275
+ @property
276
+ def isotopes_distribution(self):
277
+ return {144: 0.0307, 145: 0., 147: 0.1499, 148: 0.1124, 149: 0.1382, 150: 0.0738, 152: 0.2675, 153: 0.,
278
+ 154: 0.2275}
279
+
280
+ @property
281
+ def isotopes_masses(self):
282
+ return {144: 143.911995, 145: 144.913410, 147: 146.914893, 148: 147.914818, 149: 148.917180, 150: 149.917271,
283
+ 152: 151.919728, 153: 152.922097, 154: 153.922205}
284
+
285
+ @property
286
+ def _common_valences(self):
287
+ return 0, 3
288
+
289
+ @property
290
+ def _valences_exceptions(self):
291
+ return ((3, False, 0, ()),
292
+ (0, False, 0, ((1, 'O'), (1, 'O'))),
293
+ (0, False, 0, ((1, 'F'), (1, 'F'))),
294
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'))),
295
+ (0, False, 0, ((1, 'Br'), (1, 'Br'))),
296
+ (0, False, 0, ((1, 'I'), (1, 'I'))),
297
+ (0, False, 0, ((1, 'F'), (1, 'Cl'))),
298
+ (0, False, 0, ((1, 'F'), (1, 'Br'))),
299
+ (0, False, 0, ((1, 'F'), (1, 'I'))),
300
+ (0, False, 0, ((1, 'C'), (1, 'C'))),
301
+ (0, False, 0, ((1, 'H'), (1, 'H'))),
302
+ (0, False, 0, ((2, 'O'),)))
303
+
304
+ @property
305
+ def atomic_radius(self):
306
+ return 2.38
307
+
308
+ @property
309
+ def mdl_isotope(self):
310
+ return 150
311
+
312
+
313
+ class Eu(Element, PeriodVI, GroupIII):
314
+ __slots__ = ()
315
+
316
+ @property
317
+ def atomic_number(self):
318
+ return 63
319
+
320
+ @property
321
+ def isotopes_distribution(self):
322
+ return {151: 0.4781, 152: 0., 153: 0.5219}
323
+
324
+ @property
325
+ def isotopes_masses(self):
326
+ return {151: 150.919846, 152: 151.921744, 153: 152.921226}
327
+
328
+ @property
329
+ def _common_valences(self):
330
+ return 0, 3
331
+
332
+ @property
333
+ def _valences_exceptions(self):
334
+ return ((3, False, 0, ()),
335
+ (0, False, 0, ((1, 'O'), (1, 'O'))),
336
+ (0, False, 0, ((1, 'F'), (1, 'F'))),
337
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'))),
338
+ (0, False, 0, ((1, 'Br'), (1, 'Br'))),
339
+ (0, False, 0, ((1, 'I'), (1, 'I'))),
340
+ (0, False, 0, ((1, 'F'), (1, 'Cl'))),
341
+ (0, False, 0, ((1, 'F'), (1, 'Br'))),
342
+ (0, False, 0, ((1, 'F'), (1, 'I'))),
343
+ (0, False, 0, ((1, 'C'), (1, 'C'))),
344
+ (0, False, 0, ((1, 'H'), (1, 'H'))),
345
+ (0, False, 0, ((2, 'O'),)))
346
+
347
+ @property
348
+ def atomic_radius(self):
349
+ return 2.31
350
+
351
+ @property
352
+ def mdl_isotope(self):
353
+ return 152
354
+
355
+
356
+ class Gd(Element, PeriodVI, GroupIII):
357
+ __slots__ = ()
358
+
359
+ @property
360
+ def atomic_number(self):
361
+ return 64
362
+
363
+ @property
364
+ def isotopes_distribution(self):
365
+ return {152: 0.002, 153: 0., 154: 0.0218, 155: 0.148, 156: 0.2047, 157: 0.1565, 158: 0.2484, 160: 0.2186}
366
+
367
+ @property
368
+ def isotopes_masses(self):
369
+ return {152: 151.919788, 153: 152.921750, 154: 153.920862, 155: 154.922619, 156: 155.922120, 157: 156.923957,
370
+ 158: 157.924101, 160: 159.927051}
371
+
372
+ @property
373
+ def _common_valences(self):
374
+ return 0, 3
375
+
376
+ @property
377
+ def _valences_exceptions(self):
378
+ return (3, False, 0, ()),
379
+
380
+ @property
381
+ def atomic_radius(self):
382
+ return 2.33
383
+
384
+ @property
385
+ def mdl_isotope(self):
386
+ return 157
387
+
388
+
389
+ class Tb(Element, PeriodVI, GroupIII):
390
+ __slots__ = ()
391
+
392
+ @property
393
+ def atomic_number(self):
394
+ return 65
395
+
396
+ @property
397
+ def isotopes_distribution(self):
398
+ return {159: 1.0, 160: 0.}
399
+
400
+ @property
401
+ def isotopes_masses(self):
402
+ return {159: 158.925343, 160: 159.927168}
403
+
404
+ @property
405
+ def _common_valences(self):
406
+ return 0, 3
407
+
408
+ @property
409
+ def _valences_exceptions(self):
410
+ return ((3, False, 0, ()),
411
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))),
412
+ (0, False, 0, ((2, 'O'), (2, 'O'))))
413
+
414
+ @property
415
+ def atomic_radius(self):
416
+ return 2.25
417
+
418
+ @property
419
+ def mdl_isotope(self):
420
+ return 159
421
+
422
+
423
+ class Dy(Element, PeriodVI, GroupIII):
424
+ __slots__ = ()
425
+
426
+ @property
427
+ def atomic_number(self):
428
+ return 66
429
+
430
+ @property
431
+ def isotopes_distribution(self):
432
+ return {156: 0.0006, 158: 0.001, 160: 0.0234, 161: 0.1891, 162: 0.2551, 163: 0.249, 164: 0.2818}
433
+
434
+ @property
435
+ def isotopes_masses(self):
436
+ return {156: 155.924278, 158: 157.924405, 160: 159.925194, 161: 160.92693, 162: 161.926795, 163: 162.928728,
437
+ 164: 163.929171}
438
+
439
+ @property
440
+ def _common_valences(self):
441
+ return 0, 3
442
+
443
+ @property
444
+ def _valences_exceptions(self):
445
+ return ((3, False, 0, ()),
446
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))),
447
+ (0, False, 0, ((2, 'O'), (2, 'O'))))
448
+
449
+ @property
450
+ def atomic_radius(self):
451
+ return 2.28
452
+
453
+ @property
454
+ def mdl_isotope(self):
455
+ return 163
456
+
457
+
458
+ class Ho(Element, PeriodVI, GroupIII):
459
+ __slots__ = ()
460
+
461
+ @property
462
+ def atomic_number(self):
463
+ return 67
464
+
465
+ @property
466
+ def isotopes_distribution(self):
467
+ return {165: 1.0, 166: 0.}
468
+
469
+ @property
470
+ def isotopes_masses(self):
471
+ return {165: 164.930319, 166: 165.932284}
472
+
473
+ @property
474
+ def _common_valences(self):
475
+ return 0, 3
476
+
477
+ @property
478
+ def _valences_exceptions(self):
479
+ return ((3, False, 0, ()),
480
+ (0, False, 0, ((1, 'O'), (1, 'O'))),
481
+ (0, False, 0, ((1, 'F'), (1, 'F'))),
482
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'))),
483
+ (0, False, 0, ((1, 'Br'), (1, 'Br'))),
484
+ (0, False, 0, ((1, 'I'), (1, 'I'))),
485
+ (0, False, 0, ((1, 'F'), (1, 'Cl'))),
486
+ (0, False, 0, ((1, 'F'), (1, 'Br'))),
487
+ (0, False, 0, ((1, 'F'), (1, 'I'))),
488
+ (0, False, 0, ((1, 'C'), (1, 'C'))),
489
+ (0, False, 0, ((1, 'H'), (1, 'H'))),
490
+ (0, False, 0, ((2, 'O'),)))
491
+
492
+ @property
493
+ def atomic_radius(self):
494
+ return 2.26
495
+
496
+ @property
497
+ def mdl_isotope(self):
498
+ return 165
499
+
500
+
501
+ class Er(Element, PeriodVI, GroupIII):
502
+ __slots__ = ()
503
+
504
+ @property
505
+ def atomic_number(self):
506
+ return 68
507
+
508
+ @property
509
+ def isotopes_distribution(self):
510
+ return {162: 0.0014, 164: 0.0161, 166: 0.3361, 167: 0.2293, 168: 0.2678, 170: 0.1493}
511
+
512
+ @property
513
+ def isotopes_masses(self):
514
+ return {162: 161.928775, 164: 163.929197, 166: 165.93029, 167: 166.932045, 168: 167.932368, 170: 169.93546}
515
+
516
+ @property
517
+ def _common_valences(self):
518
+ return 0, 3
519
+
520
+ @property
521
+ def _valences_exceptions(self):
522
+ return (3, False, 0, ()),
523
+
524
+ @property
525
+ def atomic_radius(self):
526
+ return 2.26
527
+
528
+ @property
529
+ def mdl_isotope(self):
530
+ return 167
531
+
532
+
533
+ class Tm(Element, PeriodVI, GroupIII):
534
+ __slots__ = ()
535
+
536
+ @property
537
+ def atomic_number(self):
538
+ return 69
539
+
540
+ @property
541
+ def isotopes_distribution(self):
542
+ return {169: 1.0, 170: 0.}
543
+
544
+ @property
545
+ def isotopes_masses(self):
546
+ return {169: 168.934211, 170: 169.935801}
547
+
548
+ @property
549
+ def _common_valences(self):
550
+ return 0, 3
551
+
552
+ @property
553
+ def _valences_exceptions(self):
554
+ return ((3, False, 0, ()),
555
+ (0, False, 0, ((1, 'O'), (1, 'O'))),
556
+ (0, False, 0, ((1, 'F'), (1, 'F'))),
557
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'))),
558
+ (0, False, 0, ((1, 'Br'), (1, 'Br'))),
559
+ (0, False, 0, ((1, 'I'), (1, 'I'))),
560
+ (0, False, 0, ((1, 'F'), (1, 'Cl'))),
561
+ (0, False, 0, ((1, 'F'), (1, 'Br'))),
562
+ (0, False, 0, ((1, 'F'), (1, 'I'))),
563
+ (0, False, 0, ((1, 'C'), (1, 'C'))),
564
+ (0, False, 0, ((1, 'H'), (1, 'H'))),
565
+ (0, False, 0, ((2, 'O'),)))
566
+
567
+ @property
568
+ def atomic_radius(self):
569
+ return 2.22
570
+
571
+ @property
572
+ def mdl_isotope(self):
573
+ return 169
574
+
575
+
576
+ class Yb(Element, PeriodVI, GroupIII):
577
+ __slots__ = ()
578
+
579
+ @property
580
+ def atomic_number(self):
581
+ return 70
582
+
583
+ @property
584
+ def isotopes_distribution(self):
585
+ return {168: 0.0013, 169: 0., 170: 0.0304, 171: 0.1428, 172: 0.2183, 173: 0.1613, 174: 0.3183, 176: 0.1276}
586
+
587
+ @property
588
+ def isotopes_masses(self):
589
+ return {168: 167.933894, 169: 168.935190, 170: 169.934759, 171: 170.936322, 172: 171.936378, 173: 172.938207,
590
+ 174: 173.938858, 176: 175.942568}
591
+
592
+ @property
593
+ def _common_valences(self):
594
+ return 0, 3
595
+
596
+ @property
597
+ def _valences_exceptions(self):
598
+ return ((3, False, 0, ()),
599
+ (0, False, 0, ((1, 'O'), (1, 'O'))),
600
+ (0, False, 0, ((1, 'F'), (1, 'F'))),
601
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'))),
602
+ (0, False, 0, ((1, 'Br'), (1, 'Br'))),
603
+ (0, False, 0, ((1, 'I'), (1, 'I'))),
604
+ (0, False, 0, ((1, 'F'), (1, 'Cl'))),
605
+ (0, False, 0, ((1, 'F'), (1, 'Br'))),
606
+ (0, False, 0, ((1, 'F'), (1, 'I'))),
607
+ (0, False, 0, ((1, 'C'), (1, 'C'))),
608
+ (0, False, 0, ((1, 'H'), (1, 'H'))),
609
+ (0, False, 0, ((2, 'O'),)))
610
+
611
+ @property
612
+ def atomic_radius(self):
613
+ return 2.22
614
+
615
+ @property
616
+ def mdl_isotope(self):
617
+ return 173
618
+
619
+
620
+ class Lu(Element, PeriodVI, GroupIII):
621
+ __slots__ = ()
622
+
623
+ @property
624
+ def atomic_number(self):
625
+ return 71
626
+
627
+ @property
628
+ def isotopes_distribution(self):
629
+ return {175: 0.9741, 176: 0.0259, 177: 0.}
630
+
631
+ @property
632
+ def isotopes_masses(self):
633
+ return {175: 174.940768, 176: 175.942682, 177: 176.943758}
634
+
635
+ @property
636
+ def _common_valences(self):
637
+ return 0, 3
638
+
639
+ @property
640
+ def _valences_exceptions(self):
641
+ return (3, False, 0, ()),
642
+
643
+ @property
644
+ def atomic_radius(self):
645
+ return 2.17
646
+
647
+ @property
648
+ def mdl_isotope(self):
649
+ return 175
650
+
651
+
652
+ class Ac(Element, PeriodVII, GroupIII):
653
+ __slots__ = ()
654
+
655
+ @property
656
+ def atomic_number(self):
657
+ return 89
658
+
659
+ @property
660
+ def isotopes_distribution(self):
661
+ return {225: 0., 227: 1.0}
662
+
663
+ @property
664
+ def isotopes_masses(self):
665
+ return {225: 225.023230, 227: 227.027752}
666
+
667
+ @property
668
+ def _common_valences(self):
669
+ return 0, 3
670
+
671
+ @property
672
+ def _valences_exceptions(self):
673
+ return (3, False, 0, ()),
674
+
675
+ @property
676
+ def atomic_radius(self):
677
+ return 2.17 # unknown, taken radius of previous element in group
678
+
679
+ @property
680
+ def mdl_isotope(self):
681
+ return 227
682
+
683
+
684
+ class Th(Element, PeriodVII, GroupIII):
685
+ __slots__ = ()
686
+
687
+ @property
688
+ def atomic_number(self):
689
+ return 90
690
+
691
+ @property
692
+ def isotopes_distribution(self):
693
+ return {227: 0., 232: 1.0}
694
+
695
+ @property
696
+ def isotopes_masses(self):
697
+ return {227: 227.027704, 232: 232.038050}
698
+
699
+ @property
700
+ def _common_valences(self):
701
+ return 0, 4
702
+
703
+ @property
704
+ def _valences_exceptions(self):
705
+ return ((4, False, 0, ()),
706
+ (0, False, 0, ((1, 'Br'), (1, 'Br'), (1, 'Br'))),
707
+ (0, False, 0, ((1, 'I'), (1, 'I'), (1, 'I'))),
708
+ (0, False, 0, ((1, 'Br'), (1, 'Br'))),
709
+ (0, False, 0, ((1, 'I'), (1, 'I'))),
710
+ (0, False, 0, ((1, 'H'), (1, 'H'))))
711
+
712
+ @property
713
+ def atomic_radius(self):
714
+ return 2.17 # unknown, taken radius of previous element in group
715
+
716
+ @property
717
+ def mdl_isotope(self):
718
+ return 232
719
+
720
+
721
+ class Pa(Element, PeriodVII, GroupIII):
722
+ __slots__ = ()
723
+
724
+ @property
725
+ def atomic_number(self):
726
+ return 91
727
+
728
+ @property
729
+ def isotopes_distribution(self):
730
+ return {231: 1.0, 233: 0.}
731
+
732
+ @property
733
+ def isotopes_masses(self):
734
+ return {231: 231.035879, 233: 233.040247}
735
+
736
+ @property
737
+ def _common_valences(self):
738
+ return 0, 4, 5
739
+
740
+ @property
741
+ def _valences_exceptions(self):
742
+ return ((4, False, 0, ()),
743
+ (0, False, 0, ((1, 'H'), (1, 'H'), (1, 'H'))),
744
+ (0, False, 0, ((2, 'O'),)))
745
+
746
+ @property
747
+ def atomic_radius(self):
748
+ return 2.17 # unknown, taken radius of previous element in group
749
+
750
+ @property
751
+ def mdl_isotope(self):
752
+ return 231
753
+
754
+
755
+ class U(Element, PeriodVII, GroupIII):
756
+ __slots__ = ()
757
+
758
+ @property
759
+ def atomic_number(self):
760
+ return 92
761
+
762
+ @property
763
+ def isotopes_distribution(self):
764
+ return {234: 5.5e-05, 235: 0.0072, 238: 0.992745}
765
+
766
+ @property
767
+ def isotopes_masses(self):
768
+ return {234: 234.040946, 235: 235.043923, 238: 238.050783}
769
+
770
+ @property
771
+ def _common_valences(self):
772
+ return 0, 3, 4, 5, 6
773
+
774
+ @property
775
+ def _valences_exceptions(self):
776
+ return ((3, False, 0, ()), (4, False, 0, ()),
777
+ (2, False, 0, ((2, 'O'), (2, 'O'))))
778
+
779
+ @property
780
+ def atomic_radius(self):
781
+ return 2.17 # unknown, taken radius of previous element in group
782
+
783
+ @property
784
+ def mdl_isotope(self):
785
+ return 238
786
+
787
+
788
+ class Np(Element, PeriodVII, GroupIII):
789
+ __slots__ = ()
790
+
791
+ @property
792
+ def atomic_number(self):
793
+ return 93
794
+
795
+ @property
796
+ def isotopes_distribution(self):
797
+ return {237: 1.0}
798
+
799
+ @property
800
+ def isotopes_masses(self):
801
+ return {237: 237.048173}
802
+
803
+ @property
804
+ def _common_valences(self):
805
+ return 0, 2, 3, 4, 5, 6, 7
806
+
807
+ @property
808
+ def _valences_exceptions(self):
809
+ return ((3, False, 0, ()), (4, False, 0, ()),
810
+ (1, False, 0, ((2, 'O'), (2, 'O'))),
811
+ (2, False, 0, ((2, 'O'), (2, 'O'))))
812
+
813
+ @property
814
+ def atomic_radius(self):
815
+ return 2.17 # unknown, taken radius of previous element in group
816
+
817
+ @property
818
+ def mdl_isotope(self):
819
+ return 237
820
+
821
+
822
+ class Pu(Element, PeriodVII, GroupIII):
823
+ __slots__ = ()
824
+
825
+ @property
826
+ def atomic_number(self):
827
+ return 94
828
+
829
+ @property
830
+ def isotopes_distribution(self):
831
+ return {239: 1.0, 242: 0.}
832
+
833
+ @property
834
+ def isotopes_masses(self):
835
+ return {239: 239.052163, 242: 242.058743}
836
+
837
+ @property
838
+ def _common_valences(self):
839
+ return 0, 3, 4, 5, 6
840
+
841
+ @property
842
+ def _valences_exceptions(self):
843
+ return ((3, False, 0, ()), (4, False, 0, ()),
844
+ (1, False, 0, ((2, 'O'), (2, 'O'))),
845
+ (2, False, 0, ((2, 'O'), (2, 'O'))),
846
+ (0, False, 0, ((2, 'Se'), )),
847
+ (0, False, 0, ((2, 'S'),)),
848
+ (0, False, 0, ((2, 'Te'),)),
849
+ (0, False, 0, ((2, 'O'),)),
850
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'))),
851
+ (0, False, 0, ((1, 'Br'), (1, 'Br'))),
852
+ (0, False, 0, ((1, 'I'), (1, 'I'))),
853
+ (0, False, 0, ((1, 'H'), (1, 'H'))))
854
+
855
+ @property
856
+ def atomic_radius(self):
857
+ return 2.17 # unknown, taken radius of previous element in group
858
+
859
+ @property
860
+ def mdl_isotope(self):
861
+ return 244
862
+
863
+
864
+ class Am(Element, PeriodVII, GroupIII):
865
+ __slots__ = ()
866
+
867
+ @property
868
+ def atomic_number(self):
869
+ return 95
870
+
871
+ @property
872
+ def isotopes_distribution(self):
873
+ return {241: 1.0, 243: 0.}
874
+
875
+ @property
876
+ def isotopes_masses(self):
877
+ return {241: 241.056829, 243: 243.061380}
878
+
879
+ @property
880
+ def _common_valences(self):
881
+ return 0, 2, 3, 4
882
+
883
+ @property
884
+ def _valences_exceptions(self):
885
+ return (3, False, 0, ()),
886
+
887
+ @property
888
+ def atomic_radius(self):
889
+ return 2.17 # unknown, taken radius of previous element in group
890
+
891
+ @property
892
+ def mdl_isotope(self):
893
+ return 243
894
+
895
+
896
+ class Cm(Element, PeriodVII, GroupIII):
897
+ __slots__ = ()
898
+
899
+ @property
900
+ def atomic_number(self):
901
+ return 96
902
+
903
+ @property
904
+ def isotopes_distribution(self):
905
+ return {243: 0., 244: 1.0, 248: 0.}
906
+
907
+ @property
908
+ def isotopes_masses(self):
909
+ return {243: 243.061389, 244: 244.062753, 248: 248.072349}
910
+
911
+ @property
912
+ def _common_valences(self):
913
+ return 0, 3, 4
914
+
915
+ @property
916
+ def _valences_exceptions(self):
917
+ return (0, False, 0, ((2, 'O'),)), (0, False, 0, ((1, 'H'), (1, 'H')))
918
+
919
+ @property
920
+ def atomic_radius(self):
921
+ return 2.17 # unknown, taken radius of previous element in group
922
+
923
+ @property
924
+ def mdl_isotope(self):
925
+ return 247
926
+
927
+
928
+ class Bk(Element, PeriodVII, GroupIII):
929
+ __slots__ = ()
930
+
931
+ @property
932
+ def atomic_number(self):
933
+ return 97
934
+
935
+ @property
936
+ def isotopes_distribution(self):
937
+ return {249: 1.0}
938
+
939
+ @property
940
+ def isotopes_masses(self):
941
+ return {249: 249.074987}
942
+
943
+ @property
944
+ def _common_valences(self):
945
+ return 0, 2, 3, 4
946
+
947
+ @property
948
+ def _valences_exceptions(self):
949
+ return (3, False, 0, ()), (4, False, 0, ())
950
+
951
+ @property
952
+ def atomic_radius(self):
953
+ return 2.17 # unknown, taken radius of previous element in group
954
+
955
+ @property
956
+ def mdl_isotope(self):
957
+ return 247
958
+
959
+
960
+ class Cf(Element, PeriodVII, GroupIII):
961
+ __slots__ = ()
962
+
963
+ @property
964
+ def atomic_number(self):
965
+ return 98
966
+
967
+ @property
968
+ def isotopes_distribution(self):
969
+ return {249: 1.0}
970
+
971
+ @property
972
+ def isotopes_masses(self):
973
+ return {249: 249.074854}
974
+
975
+ @property
976
+ def _common_valences(self):
977
+ return 0, 2, 3, 4
978
+
979
+ @property
980
+ def _valences_exceptions(self):
981
+ return (3, False, 0, ()),
982
+
983
+ @property
984
+ def atomic_radius(self):
985
+ return 2.17 # unknown, taken radius of previous element in group
986
+
987
+ @property
988
+ def mdl_isotope(self):
989
+ return 251
990
+
991
+
992
+ class Es(Element, PeriodVII, GroupIII):
993
+ __slots__ = ()
994
+
995
+ @property
996
+ def atomic_number(self):
997
+ return 99
998
+
999
+ @property
1000
+ def isotopes_distribution(self):
1001
+ return {252: 1.0}
1002
+
1003
+ @property
1004
+ def isotopes_masses(self):
1005
+ return {252: 252.08298}
1006
+
1007
+ @property
1008
+ def _common_valences(self):
1009
+ return 0, 2, 3
1010
+
1011
+ @property
1012
+ def _valences_exceptions(self):
1013
+ return (3, False, 0, ()),
1014
+
1015
+ @property
1016
+ def atomic_radius(self):
1017
+ return 2.17 # unknown, taken radius of previous element in group
1018
+
1019
+ @property
1020
+ def mdl_isotope(self):
1021
+ return 252
1022
+
1023
+
1024
+ class Fm(Element, PeriodVII, GroupIII):
1025
+ __slots__ = ()
1026
+
1027
+ @property
1028
+ def atomic_number(self):
1029
+ return 100
1030
+
1031
+ @property
1032
+ def isotopes_distribution(self):
1033
+ return {257: 1.0}
1034
+
1035
+ @property
1036
+ def isotopes_masses(self):
1037
+ return {257: 257.095106}
1038
+
1039
+ @property
1040
+ def _common_valences(self):
1041
+ return 0, 2, 3
1042
+
1043
+ @property
1044
+ def _valences_exceptions(self):
1045
+ return (3, False, 0, ()),
1046
+
1047
+ @property
1048
+ def atomic_radius(self):
1049
+ return 2.17 # unknown, taken radius of previous element in group
1050
+
1051
+ @property
1052
+ def mdl_isotope(self):
1053
+ return 257
1054
+
1055
+
1056
+ class Md(Element, PeriodVII, GroupIII):
1057
+ __slots__ = ()
1058
+
1059
+ @property
1060
+ def atomic_number(self):
1061
+ return 101
1062
+
1063
+ @property
1064
+ def isotopes_distribution(self):
1065
+ return {258: 1.0}
1066
+
1067
+ @property
1068
+ def isotopes_masses(self):
1069
+ return {258: 258.098431}
1070
+
1071
+ @property
1072
+ def _common_valences(self):
1073
+ return 0, 2, 3
1074
+
1075
+ @property
1076
+ def _valences_exceptions(self):
1077
+ return (3, False, 0, ()),
1078
+
1079
+ @property
1080
+ def atomic_radius(self):
1081
+ return 2.17 # unknown, taken radius of previous element in group
1082
+
1083
+ @property
1084
+ def mdl_isotope(self):
1085
+ return 258
1086
+
1087
+
1088
+ class No(Element, PeriodVII, GroupIII):
1089
+ __slots__ = ()
1090
+
1091
+ @property
1092
+ def atomic_number(self):
1093
+ return 102
1094
+
1095
+ @property
1096
+ def isotopes_distribution(self):
1097
+ return {259: 1.0}
1098
+
1099
+ @property
1100
+ def isotopes_masses(self):
1101
+ return {259: 259.10103}
1102
+
1103
+ @property
1104
+ def _common_valences(self):
1105
+ return 0, 2, 3
1106
+
1107
+ @property
1108
+ def _valences_exceptions(self):
1109
+ return (2, False, 0, ()),
1110
+
1111
+ @property
1112
+ def atomic_radius(self):
1113
+ return 2.17 # unknown, taken radius of previous element in group
1114
+
1115
+ @property
1116
+ def mdl_isotope(self):
1117
+ return 259
1118
+
1119
+
1120
+ class Lr(Element, PeriodVII, GroupIII):
1121
+ __slots__ = ()
1122
+
1123
+ @property
1124
+ def atomic_number(self):
1125
+ return 103
1126
+
1127
+ @property
1128
+ def isotopes_distribution(self):
1129
+ return {266: 1.0}
1130
+
1131
+ @property
1132
+ def isotopes_masses(self):
1133
+ return {266: 266.11983}
1134
+
1135
+ @property
1136
+ def _common_valences(self):
1137
+ return 0, 3
1138
+
1139
+ @property
1140
+ def _valences_exceptions(self):
1141
+ return (3, False, 0, ()),
1142
+
1143
+ @property
1144
+ def atomic_radius(self):
1145
+ return 2.17 # unknown, taken radius of previous element in group
1146
+
1147
+ @property
1148
+ def mdl_isotope(self):
1149
+ return 260
1150
+
1151
+
1152
+ __all__ = ['Sc', 'Y',
1153
+ 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', 'Gd', 'Tb', 'Dy', 'Ho', 'Er', 'Tm', 'Yb', 'Lu',
1154
+ 'Ac', 'Th', 'Pa', 'U', 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf', 'Es', 'Fm', 'Md', 'No', 'Lr']