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,210 @@
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 GroupIV
22
+ from .base.periods import PeriodIV, PeriodV, PeriodVI, PeriodVII
23
+
24
+
25
+ class Ti(Element, PeriodIV, GroupIV):
26
+ __slots__ = ()
27
+
28
+ @property
29
+ def atomic_number(self):
30
+ return 22
31
+
32
+ @property
33
+ def isotopes_distribution(self):
34
+ return {46: 0.0825, 47: 0.0744, 48: 0.7372, 49: 0.0541, 50: 0.0518}
35
+
36
+ @property
37
+ def isotopes_masses(self):
38
+ return {46: 45.95263, 47: 46.951764, 48: 47.947947, 49: 48.947871, 50: 49.944792}
39
+
40
+ @property
41
+ def _common_valences(self):
42
+ return 0, 4
43
+
44
+ @property
45
+ def _valences_exceptions(self):
46
+ return ((4, False, 0, ()), # [Ti(CN)6]2- or SCN or OCN or ONC
47
+ (2, False, 0, ((2, 'O'),)), # [TiO(CN)4]2-
48
+ (2, False, 0, ((1, 'O'), (1, 'O'))),
49
+
50
+ (-2, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))), # [TiF6]2-
51
+ (-2, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))), # [TiCl6]2-
52
+ (-2, False, 0, ((1, 'Br'), (1, 'Br'), (1, 'Br'), (1, 'Br'), (1, 'Br'), (1, 'Br'))), # [TiBr6]2-
53
+ (-2, False, 0, ((1, 'I'), (1, 'I'), (1, 'I'), (1, 'I'), (1, 'I'), (1, 'I'))), # [TiI6]2-
54
+
55
+ (-2, False, 0, ((1, 'O'), (1, 'O'), (1, 'O'), (1, 'O'), (1, 'O'), (1, 'O'))),
56
+ (-2, False, 0, ((2, 'O'), (1, 'O'), (1, 'O'), (1, 'O'), (1, 'O'))),
57
+ (-2, False, 0, ((2, 'O'), (2, 'O'), (1, 'O'), (1, 'O'))),
58
+ (-2, False, 0, ((2, 'O'), (2, 'O'), (2, 'O'))), # [TiO3]2-
59
+ (-2, False, 0, ((2, 'O'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))), # [TiOF4]2-
60
+
61
+ (0, False, 0, ((1, 'F'), (1, 'F'))),
62
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'))),
63
+ (0, False, 0, ((1, 'Br'), (1, 'Br'))),
64
+ (0, False, 0, ((1, 'I'), (1, 'I'))),
65
+ (0, False, 0, ((1, 'H'), (1, 'H'))),
66
+ (0, False, 0, ((1, 'O'), (1, 'O'))),
67
+ (0, False, 0, ((2, 'O'),)),
68
+
69
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'))),
70
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
71
+ (0, False, 0, ((1, 'Br'), (1, 'Br'), (1, 'Br'))),
72
+ (0, False, 0, ((1, 'I'), (1, 'I'), (1, 'I'))),
73
+ (0, False, 0, ((1, 'O'), (1, 'O'), (1, 'O'))),
74
+ (0, False, 0, ((2, 'O'), (1, 'O'))),
75
+ (0, False, 0, ((1, 'N'), (1, 'N'), (1, 'N'))), # TiN
76
+ (0, False, 0, ((2, 'N'), (1, 'N'))),
77
+ (0, False, 0, ((3, 'N'),)))
78
+
79
+ @property
80
+ def atomic_radius(self):
81
+ return 1.76
82
+
83
+ @property
84
+ def mdl_isotope(self):
85
+ return 48
86
+
87
+
88
+ class Zr(Element, PeriodV, GroupIV):
89
+ __slots__ = ()
90
+
91
+ @property
92
+ def atomic_number(self):
93
+ return 40
94
+
95
+ @property
96
+ def isotopes_distribution(self):
97
+ return {89: 0., 90: 0.5145, 91: 0.1122, 92: 0.1715, 94: 0.1738, 96: 0.028}
98
+
99
+ @property
100
+ def isotopes_masses(self):
101
+ return {89: 88.908890, 90: 89.904704, 91: 90.905645, 92: 91.905040, 94: 93.906316, 96: 95.908276}
102
+
103
+ @property
104
+ def _common_valences(self):
105
+ return 0, 4
106
+
107
+ @property
108
+ def _valences_exceptions(self):
109
+ return ((0, False, 0, ((1, 'F'), (1, 'F'))),
110
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'))),
111
+ (0, False, 0, ((1, 'Br'), (1, 'Br'))),
112
+ (0, False, 0, ((1, 'I'), (1, 'I'))),
113
+ (0, False, 0, ((1, 'H'), (1, 'H'))),
114
+ (0, False, 0, ((1, 'H'), (1, 'Cl'))),
115
+ (0, False, 0, ((1, 'H'), (1, 'Br'))),
116
+ (0, False, 0, ((1, 'H'), (1, 'I'))),
117
+ (0, False, 0, ((1, 'C'), (1, 'C'))), # ZrCp2(CH3)2
118
+
119
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'))),
120
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
121
+ (0, False, 0, ((1, 'Br'), (1, 'Br'), (1, 'Br'))),
122
+ (0, False, 0, ((1, 'I'), (1, 'I'), (1, 'I'))),
123
+
124
+ (0, False, 0, ((1, 'N'), (1, 'N'), (1, 'N'))), # ZrN
125
+ (0, False, 0, ((2, 'N'), (1, 'N'))),
126
+ (0, False, 0, ((3, 'N'),)),
127
+ (0, False, 0, ((1, 'N'), (1, 'N'))), # Zr2N3
128
+ (0, False, 0, ((2, 'N'),)))
129
+
130
+ @property
131
+ def atomic_radius(self):
132
+ return 2.06
133
+
134
+ @property
135
+ def mdl_isotope(self):
136
+ return 91
137
+
138
+
139
+ class Hf(Element, PeriodVI, GroupIV):
140
+ __slots__ = ()
141
+
142
+ @property
143
+ def atomic_number(self):
144
+ return 72
145
+
146
+ @property
147
+ def isotopes_distribution(self):
148
+ return {174: 0.0016, 176: 0.0526, 177: 0.186, 178: 0.2728, 179: 0.1362, 180: 0.3508}
149
+
150
+ @property
151
+ def isotopes_masses(self):
152
+ return {174: 173.94004, 176: 175.941402, 177: 176.94322, 178: 177.943698, 179: 178.945815, 180: 179.946549}
153
+
154
+ @property
155
+ def _common_valences(self):
156
+ return 0, 4
157
+
158
+ @property
159
+ def _valences_exceptions(self):
160
+ return ((0, False, 0, ((1, 'Cl'),)),
161
+ (0, False, 0, ((1, 'Br'), (1, 'Br'))),
162
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
163
+ (0, False, 0, ((1, 'Br'), (1, 'Br'), (1, 'Br'))),
164
+ (0, False, 0, ((1, 'I'), (1, 'I'), (1, 'I'))),
165
+ (0, False, 0, ((1, 'N'), (1, 'N'), (1, 'N'))), # HfN
166
+ (0, False, 0, ((2, 'N'), (1, 'N'))),
167
+ (0, False, 0, ((3, 'N'),)))
168
+
169
+ @property
170
+ def atomic_radius(self):
171
+ return 2.08
172
+
173
+ @property
174
+ def mdl_isotope(self):
175
+ return 178
176
+
177
+
178
+ class Rf(Element, PeriodVII, GroupIV):
179
+ __slots__ = ()
180
+
181
+ @property
182
+ def atomic_number(self):
183
+ return 104
184
+
185
+ @property
186
+ def isotopes_distribution(self):
187
+ return {267: 1.0}
188
+
189
+ @property
190
+ def isotopes_masses(self):
191
+ return {267: 267.12153}
192
+
193
+ @property
194
+ def _common_valences(self):
195
+ return 0, 4
196
+
197
+ @property
198
+ def _valences_exceptions(self):
199
+ return (4, False, 0, ()),
200
+
201
+ @property
202
+ def atomic_radius(self):
203
+ return 2.08 # unknown, taken radius of previous element in group
204
+
205
+ @property
206
+ def mdl_isotope(self):
207
+ return 261
208
+
209
+
210
+ __all__ = ['Ti', 'Zr', 'Hf', 'Rf']
@@ -0,0 +1,196 @@
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.nasurova@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 GroupIX
23
+ from .base.periods import PeriodIV, PeriodV, PeriodVI, PeriodVII
24
+
25
+
26
+ class Co(Element, PeriodIV, GroupIX):
27
+ __slots__ = ()
28
+
29
+ @property
30
+ def atomic_number(self):
31
+ return 27
32
+
33
+ @property
34
+ def isotopes_distribution(self):
35
+ return {55: 0., 57: 0., 58: 0., 59: 1.0, 60: 0.}
36
+
37
+ @property
38
+ def isotopes_masses(self):
39
+ return {55: 54.941999, 57: 56.936291, 58: 57.935753, 59: 58.933200, 60: 59.933817}
40
+
41
+ @property
42
+ def _common_valences(self):
43
+ return 0, 2, 3
44
+
45
+ @property
46
+ def _valences_exceptions(self):
47
+ return ((2, False, 0, ()),
48
+ (3, False, 0, ()),
49
+ (0, False, 0, ((1, 'H'),)), # HCo(CO)n
50
+ (2, False, 0, ((1, 'N'),)), # B12
51
+
52
+ (-3, False, 0, ((2, 'O'), (1, 'O'), (1, 'O'), (1, 'O'))), # [CoO4]3-
53
+ (-2, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))), # [CoF6]2-
54
+
55
+ (-1, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'))), # [CoF3]-
56
+ (-1, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
57
+ (-1, False, 0, ((1, 'O'), (1, 'O'), (1, 'O'))), # [Co(OH)3]-
58
+
59
+ (-2, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))), # [CoF4]2-
60
+ (-2, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
61
+ (-2, False, 0, ((1, 'Br'), (1, 'Br'), (1, 'Br'), (1, 'Br'))),
62
+ (-2, False, 0, ((1, 'I'), (1, 'I'), (1, 'I'), (1, 'I'))),
63
+ (-2, False, 0, ((1, 'O'), (1, 'O'), (1, 'O'), (1, 'O'))), # [Co(OH)4]2-
64
+
65
+ (-3, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))), # [CoCl5]3-
66
+
67
+ (-3, False, 0, ((1, 'O'), (1, 'O'), (1, 'O'), (1, 'O'), (1, 'O'), (1, 'O'))), # [Co(OH)6]3-
68
+ (-4, False, 0, ((1, 'O'), (1, 'O'), (1, 'O'), (1, 'O'), (1, 'O'), (1, 'O')))) # [Co(OH)6]4-
69
+
70
+ @property
71
+ def atomic_radius(self):
72
+ return 1.52
73
+
74
+ @property
75
+ def mdl_isotope(self):
76
+ return 59
77
+
78
+
79
+ class Rh(Element, PeriodV, GroupIX):
80
+ __slots__ = ()
81
+
82
+ @property
83
+ def atomic_number(self):
84
+ return 45
85
+
86
+ @property
87
+ def isotopes_distribution(self):
88
+ return {103: 1.0, 105: 0.}
89
+
90
+ @property
91
+ def isotopes_masses(self):
92
+ return {103: 102.905504, 105: 104.905694}
93
+
94
+ @property
95
+ def _common_valences(self):
96
+ return 0, 3, 4
97
+
98
+ @property
99
+ def _valences_exceptions(self):
100
+ return ((0, False, 0, ((2, 'O'),)), # RhO
101
+ (0, False, 0, ((1, 'O'), (1, 'O'))), # Rh(OH)2
102
+ (0, False, 0, ((2, 'S'),)),
103
+ (0, False, 0, ((1, 'S'), (1, 'S'))),
104
+ (-1, False, 0, ((1, 'Br'), (1, 'Br'), (1, 'Br'), (1, 'Br'))), # [RhBr4]-
105
+ (-3, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))), # [RhCl6]3-
106
+ (-3, False, 0, ((1, 'O'), (1, 'O'), (1, 'O'), (1, 'O'), (1, 'O'), (1, 'O'))), # [Rh(NO2)6]3-
107
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))),
108
+ (0, False, 0, ((1, 'H'),)), # HRh(CO)4, HRh(CO)[P(Ph)3]3
109
+ (0, False, 0, ((1, 'Cl'),))) # Rh2Cl2
110
+
111
+ @property
112
+ def atomic_radius(self):
113
+ return 1.73
114
+
115
+ @property
116
+ def mdl_isotope(self):
117
+ return 103
118
+
119
+
120
+ class Ir(Element, PeriodVI, GroupIX):
121
+ __slots__ = ()
122
+
123
+ @property
124
+ def atomic_number(self):
125
+ return 77
126
+
127
+ @property
128
+ def isotopes_distribution(self):
129
+ return {191: 0.373, 192: 0., 193: 0.627}
130
+
131
+ @property
132
+ def isotopes_masses(self):
133
+ return {191: 190.960591, 192: 191.962605, 193: 192.962924}
134
+
135
+ @property
136
+ def _common_valences(self):
137
+ return 0, 3, 4
138
+
139
+ @property
140
+ def _valences_exceptions(self):
141
+ return ((0, False, 0, ((1, 'O'),)),
142
+ (0, False, 0, ((1, 'F'),)),
143
+ (0, False, 0, ((1, 'Cl'),)),
144
+ (0, False, 0, ((1, 'Br'),)),
145
+ (0, False, 0, ((1, 'I'),)),
146
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'))),
147
+ (0, False, 0, ((1, 'Br'), (1, 'Br'))),
148
+ (0, False, 0, ((1, 'I'), (1, 'I'))),
149
+ (0, False, 0, ((1, 'S'), (1, 'S'))),
150
+ (0, False, 0, ((2, 'S'),)),
151
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))),
152
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))),
153
+ (-3, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))))
154
+
155
+ @property
156
+ def atomic_radius(self):
157
+ return 1.8
158
+
159
+ @property
160
+ def mdl_isotope(self):
161
+ return 192
162
+
163
+
164
+ class Mt(Element, PeriodVII, GroupIX):
165
+ __slots__ = ()
166
+
167
+ @property
168
+ def atomic_number(self):
169
+ return 109
170
+
171
+ @property
172
+ def isotopes_distribution(self):
173
+ return {278: 1.0}
174
+
175
+ @property
176
+ def isotopes_masses(self):
177
+ return {278: 278.15481}
178
+
179
+ @property
180
+ def _common_valences(self):
181
+ return 0,
182
+
183
+ @property
184
+ def _valences_exceptions(self):
185
+ return ()
186
+
187
+ @property
188
+ def atomic_radius(self):
189
+ return 1.8 # unknown, taken radius of previous element in group
190
+
191
+ @property
192
+ def mdl_isotope(self):
193
+ return 278
194
+
195
+
196
+ __all__ = ['Co', 'Rh', 'Ir', 'Mt']
@@ -0,0 +1,192 @@
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 GroupV
23
+ from .base.periods import PeriodIV, PeriodV, PeriodVI, PeriodVII
24
+
25
+
26
+ class V(Element, PeriodIV, GroupV):
27
+ __slots__ = ()
28
+
29
+ @property
30
+ def atomic_number(self):
31
+ return 23
32
+
33
+ @property
34
+ def isotopes_distribution(self):
35
+ return {50: 0.0025, 51: 0.9975}
36
+
37
+ @property
38
+ def isotopes_masses(self):
39
+ return {50: 49.947163, 51: 50.943964}
40
+
41
+ @property
42
+ def _common_valences(self):
43
+ return 0, 2
44
+
45
+ @property
46
+ def _valences_exceptions(self):
47
+ return ((2, False, 0, ()), (3, False, 0, ()), (2, False, 0, ((2, 'O'),)),
48
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'))),
49
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
50
+ (0, False, 0, ((1, 'Br'), (1, 'Br'), (1, 'Br'))),
51
+ (0, False, 0, ((2, 'O'), (1, 'O'))),
52
+ (0, False, 0, ((2, 'O'), (1, 'Cl'))),
53
+
54
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))),
55
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
56
+ (0, False, 0, ((1, 'Br'), (1, 'Br'), (1, 'Br'), (1, 'Br'))),
57
+ (0, False, 0, ((2, 'O'), (2, 'O'))),
58
+ (0, False, 0, ((2, 'O'), (1, 'Cl'), (1, 'Cl'))),
59
+
60
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))),
61
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'O'))),
62
+ (0, False, 0, ((2, 'S'), (2, 'S'), (1, 'S'))),
63
+ (0, False, 0, ((2, 'O'), (1, 'O'), (1, 'O'), (1, 'O'))),
64
+ (0, False, 0, ((2, 'O'), (1, 'F'), (1, 'F'), (1, 'F'))),
65
+ (0, False, 0, ((2, 'O'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))))
66
+
67
+ @property
68
+ def atomic_radius(self):
69
+ return 1.71
70
+
71
+ @property
72
+ def mdl_isotope(self):
73
+ return 51
74
+
75
+
76
+ class Nb(Element, PeriodV, GroupV):
77
+ __slots__ = ()
78
+
79
+ @property
80
+ def atomic_number(self):
81
+ return 41
82
+
83
+ @property
84
+ def isotopes_distribution(self):
85
+ return {93: 1.0}
86
+
87
+ @property
88
+ def isotopes_masses(self):
89
+ return {93: 92.906378}
90
+
91
+ @property
92
+ def _common_valences(self):
93
+ return 0,
94
+
95
+ @property
96
+ def _valences_exceptions(self):
97
+ return ((0, False, 0, ((2, 'O'),)),
98
+ (0, False, 0, ((2, 'O'), (1, 'O'))),
99
+ (0, False, 0, ((3, 'N'),)),
100
+
101
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))),
102
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
103
+ (0, False, 0, ((1, 'Br'), (1, 'Br'), (1, 'Br'), (1, 'Br'))),
104
+ (0, False, 0, ((2, 'O'), (2, 'O'))),
105
+ (0, False, 0, ((2, 'S'), (2, 'S'))),
106
+
107
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))),
108
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
109
+ (0, False, 0, ((2, 'O'), (1, 'F'), (1, 'F'), (1, 'F'))),
110
+ (0, False, 0, ((2, 'O'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
111
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'O'))),
112
+ (0, False, 0, ((2, 'O'), (1, 'O'), (1, 'O'), (1, 'O'))))
113
+
114
+ @property
115
+ def atomic_radius(self):
116
+ return 1.98
117
+
118
+ @property
119
+ def mdl_isotope(self):
120
+ return 93
121
+
122
+
123
+ class Ta(Element, PeriodVI, GroupV):
124
+ __slots__ = ()
125
+
126
+ @property
127
+ def atomic_number(self):
128
+ return 73
129
+
130
+ @property
131
+ def isotopes_distribution(self):
132
+ return {180: 0.00012, 181: 0.99988}
133
+
134
+ @property
135
+ def isotopes_masses(self):
136
+ return {180: 179.947466, 181: 180.947996}
137
+
138
+ @property
139
+ def _common_valences(self):
140
+ return 0,
141
+
142
+ @property
143
+ def _valences_exceptions(self):
144
+ return ((0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))),
145
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
146
+ (0, False, 0, ((2, 'O'), (1, 'F'), (1, 'F'), (1, 'F'))),
147
+ (0, False, 0, ((2, 'O'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
148
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'O'))),
149
+ (0, False, 0, ((2, 'O'), (1, 'O'), (1, 'O'), (1, 'O'))))
150
+
151
+ @property
152
+ def atomic_radius(self):
153
+ return 2.0
154
+
155
+ @property
156
+ def mdl_isotope(self):
157
+ return 181
158
+
159
+
160
+ class Db(Element, PeriodVII, GroupV):
161
+ __slots__ = ()
162
+
163
+ @property
164
+ def atomic_number(self):
165
+ return 105
166
+
167
+ @property
168
+ def isotopes_distribution(self):
169
+ return {268: 1.0}
170
+
171
+ @property
172
+ def isotopes_masses(self):
173
+ return {268: 268.125676}
174
+
175
+ @property
176
+ def _common_valences(self):
177
+ return 0,
178
+
179
+ @property
180
+ def _valences_exceptions(self):
181
+ return ()
182
+
183
+ @property
184
+ def atomic_radius(self):
185
+ return 2.0 # unknown, taken radius of previous element in group
186
+
187
+ @property
188
+ def mdl_isotope(self):
189
+ return 270
190
+
191
+
192
+ __all__ = ['V', 'Nb', 'Ta', 'Db']