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,457 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright 2019-2024 Ramil Nugmanov <nougmanoff@protonmail.com>
4
+ # Copyright 2019 Dayana Bashirova <dayana.bashirova@yandex.ru>
5
+ # Copyright 2019 Tagir Akhmetshin <tagirshin@gmail.com>
6
+ # Copyright 2019 Tansu Nasyrova <tansu.nasyrova@gmail.com>
7
+ # This file is part of chython.
8
+ #
9
+ # chython is free software; you can redistribute it and/or modify
10
+ # it under the terms of the GNU Lesser General Public License as published by
11
+ # the Free Software Foundation; either version 3 of the License, or
12
+ # (at your option) any later version.
13
+ #
14
+ # This program is distributed in the hope that it will be useful,
15
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
+ # GNU Lesser General Public License for more details.
18
+ #
19
+ # You should have received a copy of the GNU Lesser General Public License
20
+ # along with this program; if not, see <https://www.gnu.org/licenses/>.
21
+ #
22
+ from .base import Element
23
+ from .base.groups import GroupXVI
24
+ from .base.periods import PeriodII, PeriodIII, PeriodIV, PeriodV, PeriodVI, PeriodVII
25
+
26
+
27
+ class O(Element, PeriodII, GroupXVI):
28
+ __slots__ = ()
29
+
30
+ @property
31
+ def atomic_number(self):
32
+ return 8
33
+
34
+ @property
35
+ def isotopes_distribution(self):
36
+ return {15: 0., 16: 0.99757, 17: 0.00038, 18: 0.00205}
37
+
38
+ @property
39
+ def isotopes_masses(self):
40
+ return {15: 15.003065, 16: 15.994915, 17: 16.999132, 18: 17.99916}
41
+
42
+ @property
43
+ def _common_valences(self):
44
+ return 2,
45
+
46
+ @property
47
+ def _valences_exceptions(self):
48
+ return (-1, False, 1, ()), (-2, False, 0, ()), (0, True, 1, ()), (1, False, 3, ())
49
+
50
+ @property
51
+ def atomic_radius(self):
52
+ return .48
53
+
54
+ @property
55
+ def mdl_isotope(self):
56
+ return 16
57
+
58
+ @property
59
+ def is_forming_single_bonds(self):
60
+ return True
61
+
62
+ @property
63
+ def is_forming_double_bonds(self):
64
+ return True
65
+
66
+
67
+ class S(Element, PeriodIII, GroupXVI):
68
+ __slots__ = ()
69
+
70
+ @property
71
+ def atomic_number(self):
72
+ return 16
73
+
74
+ @property
75
+ def isotopes_distribution(self):
76
+ return {32: 0.9493, 33: 0.0076, 34: 0.0429, 35: 0., 36: 0.0002}
77
+
78
+ @property
79
+ def isotopes_masses(self):
80
+ return {32: 31.972071, 33: 32.971458, 34: 33.967867, 35: 34.969032, 36: 35.967081}
81
+
82
+ @property
83
+ def _common_valences(self):
84
+ return 2,
85
+
86
+ @property
87
+ def _valences_exceptions(self):
88
+ return ((-1, False, 1, ()), (-2, False, 0, ()), # anions
89
+ (0, True, 1, ()), (0, True, 3, ()), # radical OGB-dataset
90
+ (0, False, 0, ()), # elemental
91
+
92
+ (1, False, 0, ((2, 'C'), (1, 'C'))),
93
+ (1, False, 0, ((2, 'C'), (1, 'S'))),
94
+ (1, False, 0, ((2, 'N'), (1, 'C'))),
95
+
96
+ (1, False, 0, ((1, 'C'), (1, 'C'), (1, 'C'))),
97
+ (1, False, 0, ((1, 'C'), (1, 'C'), (1, 'B'))),
98
+ (1, False, 0, ((1, 'C'), (1, 'C'), (1, 'O'))),
99
+ (1, False, 0, ((1, 'C'), (1, 'C'), (1, 'N'))),
100
+
101
+ (1, False, 0, ((2, 'O'), (1, 'C'), (1, 'C'), (1, 'C'))),
102
+ (1, False, 0, ((2, 'O'), (1, 'C'), (1, 'C'), (1, 'N'))),
103
+
104
+ (0, False, 0, ((2, 'O'), (2, 'O'))),
105
+ (0, False, 0, ((2, 'O'), (2, 'N'))),
106
+ (0, False, 0, ((2, 'N'), (2, 'N'))),
107
+ (0, False, 0, ((2, 'O'), (2, 'C'))),
108
+ (0, False, 0, ((2, 'C'), (2, 'C'))),
109
+ (0, False, 0, ((2, 'C'), (2, 'N'))),
110
+
111
+ (0, False, 0, ((2, 'O'), (1, 'O'), (1, 'O'))),
112
+ (0, False, 0, ((2, 'O'), (1, 'O'), (1, 'S'))),
113
+ (0, False, 0, ((2, 'O'), (1, 'O'), (1, 'N'))),
114
+ (0, False, 0, ((2, 'O'), (1, 'O'), (1, 'F'))),
115
+ (0, False, 0, ((2, 'O'), (1, 'O'), (1, 'Cl'))),
116
+ (0, False, 0, ((2, 'O'), (1, 'O'), (1, 'Br'))),
117
+ (0, False, 0, ((2, 'O'), (1, 'O'), (1, 'C'))),
118
+
119
+ (0, False, 0, ((2, 'O'), (1, 'N'), (1, 'N'))),
120
+ (0, False, 0, ((2, 'O'), (1, 'N'), (1, 'Cl'))),
121
+ (0, False, 0, ((2, 'O'), (1, 'N'), (1, 'C'))),
122
+ (0, False, 0, ((2, 'O'), (1, 'N'), (1, 'S'))),
123
+
124
+ (0, False, 0, ((2, 'O'), (1, 'Cl'), (1, 'Cl'))),
125
+ (0, False, 0, ((2, 'O'), (1, 'Br'), (1, 'Br'))),
126
+
127
+ (0, False, 0, ((2, 'O'), (1, 'S'), (1, 'S'))),
128
+
129
+ (0, False, 0, ((2, 'O'), (1, 'C'), (1, 'C'))),
130
+ (0, False, 0, ((2, 'O'), (1, 'C'), (1, 'F'))),
131
+ (0, False, 0, ((2, 'O'), (1, 'C'), (1, 'Cl'))),
132
+ (0, False, 0, ((2, 'O'), (1, 'C'), (1, 'Br'))),
133
+ (0, False, 0, ((2, 'O'), (1, 'C'), (1, 'S'))),
134
+ (0, False, 0, ((2, 'O'), (1, 'C'), (1, 'P'))),
135
+
136
+ (0, False, 0, ((2, 'N'), (1, 'F'), (1, 'F'))),
137
+ (0, False, 0, ((2, 'N'), (1, 'C'), (1, 'C'))),
138
+ (0, False, 0, ((2, 'N'), (1, 'C'), (1, 'O'))),
139
+ (0, False, 0, ((2, 'N'), (1, 'C'), (1, 'Cl'))),
140
+ (0, False, 0, ((2, 'N'), (1, 'C'), (1, 'S'))),
141
+ (0, False, 0, ((2, 'N'), (1, 'N'), (1, 'C'))),
142
+ (0, False, 0, ((2, 'N'), (1, 'N'), (1, 'N'))),
143
+ (0, False, 0, ((2, 'N'), (1, 'N'), (1, 'O'))),
144
+ (0, False, 0, ((2, 'N'), (1, 'O'), (1, 'O'))),
145
+
146
+ (0, False, 0, ((2, 'C'), (1, 'C'), (1, 'C'))),
147
+ (0, False, 0, ((2, 'C'), (1, 'C'), (1, 'F'))),
148
+ (0, False, 0, ((2, 'C'), (1, 'C'), (1, 'S'))),
149
+ (0, False, 0, ((2, 'C'), (1, 'C'), (1, 'N'))),
150
+ (0, False, 0, ((2, 'C'), (1, 'S'), (1, 'S'))),
151
+ (0, False, 0, ((2, 'C'), (1, 'S'), (1, 'N'))),
152
+ (0, False, 0, ((2, 'C'), (1, 'N'), (1, 'N'))),
153
+ (0, False, 0, ((2, 'C'), (1, 'O'), (1, 'O'))),
154
+
155
+ (0, False, 0, ((2, 'S'), (1, 'C'), (1, 'C'))),
156
+ (0, False, 0, ((2, 'S'), (1, 'C'), (1, 'O'))),
157
+ (0, False, 0, ((2, 'S'), (1, 'O'), (1, 'O'))),
158
+ (0, False, 0, ((2, 'S'), (1, 'C'), (1, 'N'))),
159
+ (0, False, 0, ((2, 'S'), (1, 'C'), (1, 'S'))),
160
+
161
+ (0, False, 0, ((1, 'N'), (1, 'F'), (1, 'F'), (1, 'F'))),
162
+ (0, False, 0, ((1, 'F'), (1, 'C'), (1, 'C'), (1, 'C'))),
163
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'C'))),
164
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))),
165
+
166
+ (0, False, 0, ((1, 'O'), (1, 'C'), (1, 'C'), (1, 'C'))),
167
+ (0, False, 0, ((1, 'O'), (1, 'O'), (1, 'C'), (1, 'C'))),
168
+ (0, False, 0, ((1, 'O'), (1, 'O'), (1, 'O'), (1, 'C'))),
169
+ (0, False, 0, ((1, 'O'), (1, 'O'), (1, 'O'), (1, 'N'))),
170
+ (0, False, 0, ((1, 'O'), (1, 'O'), (1, 'N'), (1, 'C'))),
171
+ (0, False, 0, ((1, 'O'), (1, 'N'), (1, 'C'), (1, 'C'))),
172
+
173
+ (0, False, 0, ((1, 'C'), (1, 'C'), (1, 'Cl'), (1, 'Cl'))),
174
+ (0, False, 0, ((1, 'C'), (1, 'C'), (1, 'N'), (1, 'N'))),
175
+
176
+ (0, False, 0, ((1, 'S'), (1, 'C'), (1, 'C'), (1, 'C'))),
177
+ (0, False, 0, ((1, 'C'), (1, 'C'), (1, 'C'), (1, 'C'))),
178
+ (0, False, 0, ((1, 'C'), (1, 'C'), (1, 'C'), (1, 'I'))),
179
+
180
+ (0, False, 0, ((2, 'O'), (2, 'O'), (2, 'O'))),
181
+ (0, False, 0, ((2, 'O'), (2, 'O'), (2, 'C'))),
182
+
183
+ # sulfat derivatives
184
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'O'), (1, 'O'))),
185
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'O'), (1, 'N'))),
186
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'O'), (1, 'C'))),
187
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'O'), (1, 'S'))),
188
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'O'), (1, 'F'))),
189
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'O'), (1, 'Cl'))),
190
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'O'), (1, 'Br'))),
191
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'O'), (1, 'I'))),
192
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'N'), (1, 'N'))),
193
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'N'), (1, 'C'))),
194
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'N'), (1, 'S'))),
195
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'N'), (1, 'F'))),
196
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'N'), (1, 'Cl'))),
197
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'C'), (1, 'C'))),
198
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'C'), (1, 'S'))),
199
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'C'), (1, 'F'))),
200
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'C'), (1, 'Cl'))),
201
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'C'), (1, 'Br'))),
202
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'C'), (1, 'I'))),
203
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'F'), (1, 'F'))),
204
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'Cl'), (1, 'Cl'))),
205
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'Cl'), (1, 'F'))),
206
+
207
+ (0, False, 0, ((2, 'O'), (2, 'N'), (1, 'N'), (1, 'O'))),
208
+ (0, False, 0, ((2, 'O'), (2, 'N'), (1, 'N'), (1, 'N'))),
209
+ (0, False, 0, ((2, 'O'), (2, 'N'), (1, 'N'), (1, 'C'))),
210
+ (0, False, 0, ((2, 'O'), (2, 'N'), (1, 'O'), (1, 'O'))),
211
+ (0, False, 0, ((2, 'O'), (2, 'N'), (1, 'O'), (1, 'C'))),
212
+ (0, False, 0, ((2, 'O'), (2, 'N'), (1, 'C'), (1, 'C'))),
213
+ (0, False, 0, ((2, 'O'), (2, 'N'), (1, 'C'), (1, 'Cl'))),
214
+ (0, False, 0, ((2, 'O'), (2, 'N'), (1, 'C'), (1, 'F'))),
215
+
216
+ (0, False, 0, ((2, 'N'), (2, 'N'), (1, 'C'), (1, 'C'))),
217
+
218
+ # aci forms of tautomers
219
+ (0, False, 0, ((2, 'O'), (2, 'C'), (1, 'C'), (1, 'C'))),
220
+ (0, False, 0, ((2, 'O'), (2, 'C'), (1, 'O'), (1, 'C'))),
221
+ (0, False, 0, ((2, 'O'), (2, 'C'), (1, 'O'), (1, 'N'))),
222
+ (0, False, 0, ((2, 'O'), (2, 'C'), (1, 'O'), (1, 'O'))),
223
+ (0, False, 0, ((2, 'O'), (2, 'C'), (1, 'N'), (1, 'C'))),
224
+ (0, False, 0, ((2, 'O'), (2, 'C'), (1, 'N'), (1, 'N'))),
225
+
226
+ (0, False, 0, ((2, 'N'), (2, 'C'), (1, 'C'), (1, 'O'))),
227
+
228
+ (0, False, 0, ((2, 'O'), (2, 'S'), (1, 'O'), (1, 'O'))), # [S2O3]2-
229
+ (0, False, 0, ((2, 'O'), (2, 'S'), (1, 'O'), (1, 'C'))),
230
+ (0, False, 0, ((2, 'O'), (2, 'S'), (1, 'C'), (1, 'C'))),
231
+
232
+ (0, False, 0, ((2, 'S'), (2, 'S'), (1, 'O'), (1, 'O'))),
233
+
234
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))),
235
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'O'))),
236
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'C'))))
237
+
238
+ @property
239
+ def atomic_radius(self):
240
+ return .87
241
+
242
+ @property
243
+ def mdl_isotope(self):
244
+ return 32
245
+
246
+ @property
247
+ def is_forming_single_bonds(self):
248
+ return True
249
+
250
+ @property
251
+ def is_forming_double_bonds(self):
252
+ return True
253
+
254
+
255
+ class Se(Element, PeriodIV, GroupXVI):
256
+ __slots__ = ()
257
+
258
+ @property
259
+ def atomic_number(self):
260
+ return 34
261
+
262
+ @property
263
+ def isotopes_distribution(self):
264
+ return {73: 0., 74: 0.0089, 75: 0., 76: 0.0937, 77: 0.0763, 78: 0.2377, 80: 0.4961, 82: 0.0873}
265
+
266
+ @property
267
+ def isotopes_masses(self):
268
+ return {73: 72.926765, 74: 73.922477, 75: 74.922523, 76: 75.919214, 77: 76.919915, 78: 77.917310, 80: 79.916522,
269
+ 82: 81.916700}
270
+
271
+ @property
272
+ def _common_valences(self):
273
+ return 2,
274
+
275
+ @property
276
+ def _valences_exceptions(self):
277
+ return ((-1, False, 1, ()), (-2, False, 0, ()),
278
+ (0, False, 0, ()), # elemental
279
+ (1, False, 0, ((1, 'C'), (1, 'C'), (1, 'C'))),
280
+ (1, False, 0, ((1, 'C'), (2, 'C'))),
281
+
282
+ (0, False, 0, ((2, 'O'), (2, 'O'))),
283
+ (0, False, 0, ((2, 'S'), (2, 'S'))),
284
+ (0, False, 0, ((2, 'N'), (2, 'N'))),
285
+
286
+ (0, False, 0, ((2, 'O'), (1, 'O'), (1, 'O'))),
287
+ (0, False, 0, ((2, 'O'), (1, 'Cl'), (1, 'Cl'))),
288
+ (0, False, 0, ((2, 'O'), (1, 'F'), (1, 'F'))),
289
+ (0, False, 0, ((2, 'O'), (1, 'C'), (1, 'C'))),
290
+ (0, False, 0, ((2, 'O'), (1, 'N'), (1, 'C'))),
291
+ (0, False, 0, ((2, 'O'), (1, 'O'), (1, 'C'))),
292
+
293
+ (0, False, 0, ((2, 'C'), (1, 'C'), (1, 'C'))),
294
+ (0, False, 0, ((2, 'C'), (1, 'O'), (1, 'O'))),
295
+
296
+ (0, False, 0, ((1, 'C'), (1, 'C'), (1, 'Cl'), (1, 'Cl'))),
297
+ (0, False, 0, ((1, 'C'), (1, 'C'), (1, 'Cl'), (1, 'O'))),
298
+ (0, False, 0, ((1, 'C'), (1, 'C'), (1, 'Br'), (1, 'Br'))),
299
+ (0, False, 0, ((1, 'C'), (1, 'C'), (1, 'Br'), (1, 'O'))),
300
+
301
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'O'), (1, 'O'))),
302
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'Cl'), (1, 'Cl'))),
303
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'C'), (1, 'C'))),
304
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'C'), (1, 'O'))),
305
+ (0, False, 0, ((2, 'O'), (2, 'N'), (1, 'C'), (1, 'C'))),
306
+ (0, False, 0, ((2, 'O'), (2, 'N'), (1, 'C'), (1, 'O'))),
307
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))))
308
+
309
+ @property
310
+ def atomic_radius(self):
311
+ return 1.03
312
+
313
+ @property
314
+ def mdl_isotope(self):
315
+ return 79
316
+
317
+ @property
318
+ def is_forming_single_bonds(self):
319
+ return True
320
+
321
+ @property
322
+ def is_forming_double_bonds(self):
323
+ return True
324
+
325
+
326
+ class Te(Element, PeriodV, GroupXVI):
327
+ __slots__ = ()
328
+
329
+ @property
330
+ def atomic_number(self):
331
+ return 52
332
+
333
+ @property
334
+ def isotopes_distribution(self):
335
+ return {120: 0.0009, 122: 0.0255, 123: 0.0089, 124: 0.0474, 125: 0.0707, 126: 0.1884, 128: 0.3174, 130: 0.3408}
336
+
337
+ @property
338
+ def isotopes_masses(self):
339
+ return {120: 119.90402, 122: 121.903047, 123: 122.904273, 124: 123.90282, 125: 124.904425, 126: 125.903306,
340
+ 128: 127.904461, 130: 129.906223}
341
+
342
+ @property
343
+ def _common_valences(self):
344
+ return 2,
345
+
346
+ @property
347
+ def _valences_exceptions(self):
348
+ return ((0, False, 0, ()), # elemental,
349
+ (1, False, 0, ((1, 'C'), (1, 'C'), (1, 'C'))),
350
+ (-1, False, 0, ((1, 'C'), (1, 'O'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
351
+ (1, False, 0, ((1, 'C'), (2, 'C'))),
352
+ (0, False, 0, ((2, 'O'), (2, 'O'))),
353
+ (0, False, 0, ((2, 'O'), (1, 'O'), (1, 'O'))),
354
+ (0, False, 0, ((2, 'O'), (1, 'O'), (1, 'C'))),
355
+ (0, False, 0, ((2, 'O'), (1, 'C'), (1, 'C'))),
356
+ (0, False, 0, ((1, 'C'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
357
+ (0, False, 0, ((1, 'C'), (1, 'C'), (1, 'Cl'), (1, 'Cl'))),
358
+ (0, False, 0, ((1, 'C'), (1, 'C'), (1, 'Br'), (1, 'Br'))),
359
+ (0, False, 0, ((1, 'C'), (1, 'C'), (1, 'O'), (1, 'Cl'))),
360
+ (0, False, 0, ((1, 'C'), (1, 'C'), (1, 'O'), (1, 'O'))),
361
+ (0, False, 0, ((1, 'C'), (1, 'C'), (1, 'C'), (1, 'C'))),
362
+ (0, False, 0, ((1, 'C'), (1, 'O'), (1, 'Cl'), (1, 'Cl'))),
363
+
364
+ (0, False, 0, ((1, 'O'), (1, 'O'), (1, 'Cl'), (1, 'Cl'))),
365
+
366
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'O'), (1, 'O'))),
367
+ (0, False, 0, ((1, 'O'), (1, 'O'), (1, 'O'), (1, 'O'), (1, 'O'), (1, 'O'))),
368
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))),
369
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'O'))))
370
+
371
+ @property
372
+ def atomic_radius(self):
373
+ return 1.23
374
+
375
+ @property
376
+ def mdl_isotope(self):
377
+ return 128
378
+
379
+ @property
380
+ def is_forming_single_bonds(self):
381
+ return True
382
+
383
+ @property
384
+ def is_forming_double_bonds(self):
385
+ return True
386
+
387
+
388
+ class Po(Element, PeriodVI, GroupXVI):
389
+ __slots__ = ()
390
+
391
+ @property
392
+ def atomic_number(self):
393
+ return 84
394
+
395
+ @property
396
+ def isotopes_distribution(self):
397
+ return {210: 1.0}
398
+
399
+ @property
400
+ def isotopes_masses(self):
401
+ return {210: 209.982874}
402
+
403
+ @property
404
+ def _common_valences(self):
405
+ return 0, 2
406
+
407
+ @property
408
+ def _valences_exceptions(self):
409
+ return ((0, False, 0, ((2, 'O'), (2, 'O'), (2, 'O'))),
410
+ (0, False, 0, ((2, 'O'), (2, 'O'))),
411
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
412
+ (0, False, 0, ((1, 'Br'), (1, 'Br'), (1, 'Br'), (1, 'Br'))),
413
+ (0, False, 0, ((1, 'I'), (1, 'I'), (1, 'I'), (1, 'I'))),
414
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))))
415
+
416
+ @property
417
+ def atomic_radius(self):
418
+ return 1.35
419
+
420
+ @property
421
+ def mdl_isotope(self):
422
+ return 209
423
+
424
+
425
+ class Lv(Element, PeriodVII, GroupXVI):
426
+ __slots__ = ()
427
+
428
+ @property
429
+ def atomic_number(self):
430
+ return 116
431
+
432
+ @property
433
+ def isotopes_distribution(self):
434
+ return {293: 1.0}
435
+
436
+ @property
437
+ def isotopes_masses(self):
438
+ return {293: 293.204555}
439
+
440
+ @property
441
+ def _common_valences(self):
442
+ return 0,
443
+
444
+ @property
445
+ def _valences_exceptions(self):
446
+ return ()
447
+
448
+ @property
449
+ def atomic_radius(self):
450
+ return 1.35 # unknown, taken radius of previous element in group
451
+
452
+ @property
453
+ def mdl_isotope(self):
454
+ return 293
455
+
456
+
457
+ __all__ = ['O', 'S', 'Se', 'Te', 'Po', 'Lv']