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,164 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright 2019-2024 Ramil Nugmanov <nougmanoff@protonmail.com>
4
+ # Copyright 2019 Alexander Nikanshin <17071996sasha@gmail.com>
5
+ # Copyright 2019 Tagir Akhmetshin <tagirshin@gmail.com>
6
+ # This file is part of chython.
7
+ #
8
+ # chython is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU Lesser General Public License as published by
10
+ # the Free Software Foundation; either version 3 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU Lesser General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU Lesser General Public License
19
+ # along with this program; if not, see <https://www.gnu.org/licenses/>.
20
+ #
21
+ from .base import Element
22
+ from .base.groups import GroupXI
23
+ from .base.periods import PeriodIV, PeriodV, PeriodVI, PeriodVII
24
+
25
+
26
+ class Cu(Element, PeriodIV, GroupXI):
27
+ __slots__ = ()
28
+
29
+ @property
30
+ def atomic_number(self):
31
+ return 29
32
+
33
+ @property
34
+ def isotopes_distribution(self):
35
+ return {63: 0.6917, 64: 0., 65: 0.3083, 67: 0.}
36
+
37
+ @property
38
+ def isotopes_masses(self):
39
+ return {63: 62.929601, 64: 63.929764, 65: 64.927794, 67: 66.927730}
40
+
41
+ @property
42
+ def _common_valences(self):
43
+ return 0, 1, 2
44
+
45
+ @property
46
+ def _valences_exceptions(self):
47
+ return ((1, False, 0, ()), (2, False, 0, ()),
48
+ (-1, False, 0, ((1, 'Cl'), (1, 'Cl'))), # [CuCl2]-
49
+ (-3, False, 0, ((1, 'S'), (1, 'S')))) # [CuS2]3-
50
+
51
+ @property
52
+ def atomic_radius(self):
53
+ return 1.45
54
+
55
+ @property
56
+ def mdl_isotope(self):
57
+ return 64
58
+
59
+
60
+ class Ag(Element, PeriodV, GroupXI):
61
+ __slots__ = ()
62
+
63
+ @property
64
+ def atomic_number(self):
65
+ return 47
66
+
67
+ @property
68
+ def isotopes_distribution(self):
69
+ return {107: 0.51839, 109: 0.48161, 110: 0., 111: 0.}
70
+
71
+ @property
72
+ def isotopes_masses(self):
73
+ return {107: 106.905093, 109: 108.904756, 110: 109.906107, 111: 110.905291}
74
+
75
+ @property
76
+ def _common_valences(self):
77
+ return 0, 1
78
+
79
+ @property
80
+ def _valences_exceptions(self):
81
+ return ((1, False, 0, ()),
82
+ (-1, False, 0, ((1, 'Cl'), (1, 'Cl'))), # [AgCl2]-
83
+ (-1, False, 0, ((1, 'O'), (1, 'O'))), # [Ag(OH)2]-
84
+ (-1, False, 0, ((1, 'S'), (1, 'S'))), # [AgS2]-
85
+ (0, False, 0, ((1, 'F'), (1, 'F')))) # AgF2
86
+
87
+ @property
88
+ def atomic_radius(self):
89
+ return 1.65
90
+
91
+ @property
92
+ def mdl_isotope(self):
93
+ return 108
94
+
95
+
96
+ class Au(Element, PeriodVI, GroupXI):
97
+ __slots__ = ()
98
+
99
+ @property
100
+ def atomic_number(self):
101
+ return 79
102
+
103
+ @property
104
+ def isotopes_distribution(self):
105
+ return {195: 0., 197: 1.0, 198: 0.}
106
+
107
+ @property
108
+ def isotopes_masses(self):
109
+ return {195: 194.965035, 197: 196.966552, 198: 197.968244}
110
+
111
+ @property
112
+ def _common_valences(self):
113
+ return 0,
114
+
115
+ @property
116
+ def _valences_exceptions(self):
117
+ return ((1, False, 0, ()), (3, False, 0, ()),
118
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
119
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'O'))),
120
+ (0, False, 0, ((1, 'Br'), (1, 'Br'), (1, 'Br'))),
121
+ (-1, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))))
122
+
123
+ @property
124
+ def atomic_radius(self):
125
+ return 1.74
126
+
127
+ @property
128
+ def mdl_isotope(self):
129
+ return 197
130
+
131
+
132
+ class Rg(Element, PeriodVII, GroupXI):
133
+ __slots__ = ()
134
+
135
+ @property
136
+ def atomic_number(self):
137
+ return 111
138
+
139
+ @property
140
+ def isotopes_distribution(self):
141
+ return {282: 1.0}
142
+
143
+ @property
144
+ def isotopes_masses(self):
145
+ return {282: 282.169127}
146
+
147
+ @property
148
+ def _common_valences(self):
149
+ return 0,
150
+
151
+ @property
152
+ def _valences_exceptions(self):
153
+ return ()
154
+
155
+ @property
156
+ def atomic_radius(self):
157
+ return 1.74 # unknown, taken radius of previous element in group
158
+
159
+ @property
160
+ def mdl_isotope(self):
161
+ return 281
162
+
163
+
164
+ __all__ = ['Cu', 'Ag', 'Au', 'Rg']
@@ -0,0 +1,158 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright 2019-2024 Ramil Nugmanov <nougmanoff@protonmail.com>
4
+ # Copyright 2019 Dayana Bashirova <dayana.bashirova@yandex.ru>
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 GroupXII
22
+ from .base.periods import PeriodIV, PeriodV, PeriodVI, PeriodVII
23
+
24
+
25
+ class Zn(Element, PeriodIV, GroupXII):
26
+ __slots__ = ()
27
+
28
+ @property
29
+ def atomic_number(self):
30
+ return 30
31
+
32
+ @property
33
+ def isotopes_distribution(self):
34
+ return {62: 0., 64: 0.4863, 66: 0.279, 67: 0.041, 68: 0.1875, 69: 0., 70: 0.0062}
35
+
36
+ @property
37
+ def isotopes_masses(self):
38
+ return {62: 61.934330, 64: 63.929147, 66: 65.926037, 67: 66.927131, 68: 67.924848, 69: 68.926550, 70: 69.925325}
39
+
40
+ @property
41
+ def _common_valences(self):
42
+ return 0, 2
43
+
44
+ @property
45
+ def _valences_exceptions(self):
46
+ return ((2, False, 0, ()), (1, False, 0, ((1, 'C'),)),
47
+ (-2, False, 0, ((1, 'O'), (1, 'O'), (1, 'O'), (1, 'O')))) # Zn[(OH)4]2-
48
+
49
+ @property
50
+ def atomic_radius(self):
51
+ return 1.42
52
+
53
+ @property
54
+ def mdl_isotope(self):
55
+ return 65
56
+
57
+
58
+ class Cd(Element, PeriodV, GroupXII):
59
+ __slots__ = ()
60
+
61
+ @property
62
+ def atomic_number(self):
63
+ return 48
64
+
65
+ @property
66
+ def isotopes_distribution(self):
67
+ return {106: 0.0125, 108: 0.0089, 110: 0.1249, 111: 0.128, 112: 0.2413, 113: 0.1222, 114: 0.2873, 116: 0.0749}
68
+
69
+ @property
70
+ def isotopes_masses(self):
71
+ return {106: 105.906458, 108: 107.904183, 110: 109.903006, 111: 110.904182, 112: 111.902757, 113: 112.904401,
72
+ 114: 113.903358, 116: 115.904755}
73
+
74
+ @property
75
+ def _common_valences(self):
76
+ return 0, 2
77
+
78
+ @property
79
+ def _valences_exceptions(self):
80
+ return ((2, False, 0, ()),
81
+ (-2, False, 0, ((1, 'O'), (1, 'O'), (1, 'O'), (1, 'O')))) # Cd[(OH)4]2-
82
+
83
+ @property
84
+ def atomic_radius(self):
85
+ return 1.61
86
+
87
+ @property
88
+ def mdl_isotope(self):
89
+ return 112
90
+
91
+
92
+ class Hg(Element, PeriodVI, GroupXII):
93
+ __slots__ = ()
94
+
95
+ @property
96
+ def atomic_number(self):
97
+ return 80
98
+
99
+ @property
100
+ def isotopes_distribution(self):
101
+ return {196: 0.0015, 197: 0., 198: 0.0997, 199: 0.1687, 200: 0.231, 201: 0.1318, 202: 0.2986, 203: 0.,
102
+ 204: 0.0687}
103
+
104
+ @property
105
+ def isotopes_masses(self):
106
+ return {196: 195.965815, 197: 196.967213, 198: 197.966752, 199: 198.968262, 200: 199.968309, 201: 200.970285,
107
+ 202: 201.970626, 203: 202.972873, 204: 203.973476}
108
+
109
+ @property
110
+ def _common_valences(self):
111
+ return 0, 2
112
+
113
+ @property
114
+ def _valences_exceptions(self):
115
+ return (2, False, 0, ()),
116
+
117
+ @property
118
+ def atomic_radius(self):
119
+ return 1.71
120
+
121
+ @property
122
+ def mdl_isotope(self):
123
+ return 201
124
+
125
+
126
+ class Cn(Element, PeriodVII, GroupXII):
127
+ __slots__ = ()
128
+
129
+ @property
130
+ def atomic_number(self):
131
+ return 112
132
+
133
+ @property
134
+ def isotopes_distribution(self):
135
+ return {285: 1.0}
136
+
137
+ @property
138
+ def isotopes_masses(self):
139
+ return {285: 285.177444}
140
+
141
+ @property
142
+ def _common_valences(self):
143
+ return 0,
144
+
145
+ @property
146
+ def _valences_exceptions(self):
147
+ return ()
148
+
149
+ @property
150
+ def atomic_radius(self):
151
+ return 1.71 # unknown, taken radius of previous element in group
152
+
153
+ @property
154
+ def mdl_isotope(self):
155
+ return 285
156
+
157
+
158
+ __all__ = ['Zn', 'Cd', 'Hg', 'Cn']
@@ -0,0 +1,239 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright 2019-2024 Ramil Nugmanov <nougmanoff@protonmail.com>
4
+ # Copyright 2019 Tagir Akhmetshin <tagirshin@gmail.com>
5
+ # Copyright 2019 Tansu Nasyrova <tansu.nasyrova@gmail.com>
6
+ # This file is part of chython.
7
+ #
8
+ # chython is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU Lesser General Public License as published by
10
+ # the Free Software Foundation; either version 3 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU Lesser General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU Lesser General Public License
19
+ # along with this program; if not, see <https://www.gnu.org/licenses/>.
20
+ #
21
+ from .base import Element
22
+ from .base.groups import GroupXIII
23
+ from .base.periods import PeriodII, PeriodIII, PeriodIV, PeriodV, PeriodVI, PeriodVII
24
+
25
+
26
+ class B(Element, PeriodII, GroupXIII):
27
+ __slots__ = ()
28
+
29
+ @property
30
+ def atomic_number(self):
31
+ return 5
32
+
33
+ @property
34
+ def isotopes_distribution(self):
35
+ return {10: 0.199, 11: 0.801}
36
+
37
+ @property
38
+ def isotopes_masses(self):
39
+ return {10: 10.012937, 11: 11.009305}
40
+
41
+ @property
42
+ def _common_valences(self):
43
+ return 3,
44
+
45
+ @property
46
+ def _valences_exceptions(self):
47
+ return ((-1, False, 4, ()), (0, False, 0, ()),
48
+ (0, True, 2, ())) # radical OGB-dataset
49
+
50
+ @property
51
+ def atomic_radius(self):
52
+ return .87
53
+
54
+ @property
55
+ def mdl_isotope(self):
56
+ return 11
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 Al(Element, PeriodIII, GroupXIII):
68
+ __slots__ = ()
69
+
70
+ @property
71
+ def atomic_number(self):
72
+ return 13
73
+
74
+ @property
75
+ def isotopes_distribution(self):
76
+ return {27: 1.0}
77
+
78
+ @property
79
+ def isotopes_masses(self):
80
+ return {27: 26.981538}
81
+
82
+ @property
83
+ def _common_valences(self):
84
+ return 0,
85
+
86
+ @property
87
+ def _valences_exceptions(self):
88
+ return ((3, False, 0, ()),
89
+ (2, False, 1, ()), (1, False, 2, ()), (0, False, 3, ()), (-1, False, 4, ()), # accept [AlHx]
90
+ (-3, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))))
91
+
92
+ @property
93
+ def atomic_radius(self):
94
+ return 1.18
95
+
96
+ @property
97
+ def mdl_isotope(self):
98
+ return 27
99
+
100
+
101
+ class Ga(Element, PeriodIV, GroupXIII):
102
+ __slots__ = ()
103
+
104
+ @property
105
+ def atomic_number(self):
106
+ return 31
107
+
108
+ @property
109
+ def isotopes_distribution(self):
110
+ return {67: 0., 68: 0., 69: 0.60108, 71: 0.39892}
111
+
112
+ @property
113
+ def isotopes_masses(self):
114
+ return {67: 66.928202, 68: 67.927980, 69: 68.925581, 71: 70.924705}
115
+
116
+ @property
117
+ def _common_valences(self):
118
+ return 0, 3
119
+
120
+ @property
121
+ def _valences_exceptions(self):
122
+ return ((3, False, 0, ()),
123
+ (0, False, 0, ((1, 'Cl'),)), (0, False, 0, ((1, 'Br'),)), (0, False, 0, ((1, 'I'),)),
124
+ (-1, False, 0, ((1, 'H'), (1, 'H'), (1, 'H'), (1, 'H'))),
125
+ (-1, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))),
126
+ (-1, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
127
+ (-1, False, 0, ((1, 'Br'), (1, 'Br'), (1, 'Br'), (1, 'Br'))),
128
+ (-1, False, 0, ((1, 'I'), (1, 'I'), (1, 'I'), (1, 'I'))))
129
+
130
+ @property
131
+ def atomic_radius(self):
132
+ return 1.36
133
+
134
+ @property
135
+ def mdl_isotope(self):
136
+ return 70
137
+
138
+
139
+ class In(Element, PeriodV, GroupXIII):
140
+ __slots__ = ()
141
+
142
+ @property
143
+ def atomic_number(self):
144
+ return 49
145
+
146
+ @property
147
+ def isotopes_distribution(self):
148
+ return {111: 0., 113: 0.0429, 115: 0.9571}
149
+
150
+ @property
151
+ def isotopes_masses(self):
152
+ return {111: 110.905103, 113: 112.904061, 115: 114.903878}
153
+
154
+ @property
155
+ def _common_valences(self):
156
+ return 0, 3
157
+
158
+ @property
159
+ def _valences_exceptions(self):
160
+ return ((3, False, 0, ()),
161
+ (0, False, 0, ((1, 'Cl'),)), (0, False, 0, ((1, 'Br'),)), (0, False, 0, ((1, 'I'),)),
162
+ (0, False, 0, ((1, 'O'),)))
163
+
164
+ @property
165
+ def atomic_radius(self):
166
+ return 1.56
167
+
168
+ @property
169
+ def mdl_isotope(self):
170
+ return 115
171
+
172
+
173
+ class Tl(Element, PeriodVI, GroupXIII):
174
+ __slots__ = ()
175
+
176
+ @property
177
+ def atomic_number(self):
178
+ return 81
179
+
180
+ @property
181
+ def isotopes_distribution(self):
182
+ return {203: 0.29524, 205: 0.70476}
183
+
184
+ @property
185
+ def isotopes_masses(self):
186
+ return {203: 202.972329, 205: 204.974412}
187
+
188
+ @property
189
+ def _common_valences(self):
190
+ return 0, 1
191
+
192
+ @property
193
+ def _valences_exceptions(self):
194
+ return ((1, False, 0, ()), (3, False, 0, ()),
195
+ (-3, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
196
+ (1, False, 0, ((1, 'C'), (1, 'C'))))
197
+
198
+ @property
199
+ def atomic_radius(self):
200
+ return 1.56
201
+
202
+ @property
203
+ def mdl_isotope(self):
204
+ return 204
205
+
206
+
207
+ class Nh(Element, PeriodVII, GroupXIII):
208
+ __slots__ = ()
209
+
210
+ @property
211
+ def atomic_number(self):
212
+ return 113
213
+
214
+ @property
215
+ def isotopes_distribution(self):
216
+ return {286: 1.0}
217
+
218
+ @property
219
+ def isotopes_masses(self):
220
+ return {286: 286.182555}
221
+
222
+ @property
223
+ def _common_valences(self):
224
+ return 0,
225
+
226
+ @property
227
+ def _valences_exceptions(self):
228
+ return ()
229
+
230
+ @property
231
+ def atomic_radius(self):
232
+ return 1.56 # unknown, taken radius of previous element in group
233
+
234
+ @property
235
+ def mdl_isotope(self):
236
+ return 278
237
+
238
+
239
+ __all__ = ['B', 'Al', 'Ga', 'In', 'Tl', 'Nh']