chython 2.19__cp313-cp313-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. chython/__init__.py +35 -0
  2. chython/_functions.py +95 -0
  3. chython/_java.py +57 -0
  4. chython/algorithms/__init__.py +18 -0
  5. chython/algorithms/_isomorphism.cp313-win_amd64.pyd +0 -0
  6. chython/algorithms/_isomorphism.pyx +189 -0
  7. chython/algorithms/_rings.cp313-win_amd64.pyd +0 -0
  8. chython/algorithms/_rings.pyx +478 -0
  9. chython/algorithms/aromatics/__init__.py +27 -0
  10. chython/algorithms/aromatics/_rules.py +124 -0
  11. chython/algorithms/aromatics/kekule.py +532 -0
  12. chython/algorithms/aromatics/test/__init__.py +18 -0
  13. chython/algorithms/aromatics/test/test_kekule.py +160 -0
  14. chython/algorithms/aromatics/test/test_thiele.py +263 -0
  15. chython/algorithms/aromatics/thiele.py +222 -0
  16. chython/algorithms/calculate2d/__init__.py +23 -0
  17. chython/algorithms/calculate2d/clean2d.js +1 -0
  18. chython/algorithms/calculate2d/molecule.py +191 -0
  19. chython/algorithms/calculate2d/reaction.py +75 -0
  20. chython/algorithms/conformers.py +106 -0
  21. chython/algorithms/depict.py +596 -0
  22. chython/algorithms/fingerprints/__init__.py +43 -0
  23. chython/algorithms/fingerprints/linear.py +202 -0
  24. chython/algorithms/fingerprints/morgan.py +132 -0
  25. chython/algorithms/fingerprints/test/__init__.py +18 -0
  26. chython/algorithms/fingerprints/test/test_linear.py +127 -0
  27. chython/algorithms/fingerprints/test/test_morgan.py +79 -0
  28. chython/algorithms/groups/__init__.py +212 -0
  29. chython/algorithms/groups/_functional.py +290 -0
  30. chython/algorithms/groups/_oxidations.py +70 -0
  31. chython/algorithms/groups/_protective.py +964 -0
  32. chython/algorithms/groups/_reactions.py +809 -0
  33. chython/algorithms/groups/_reductions.py +88 -0
  34. chython/algorithms/groups/_transformations.py +278 -0
  35. chython/algorithms/groups/test/__init__.py +18 -0
  36. chython/algorithms/groups/test/test_deprotection.py +108 -0
  37. chython/algorithms/groups/test/test_reactions.py +377 -0
  38. chython/algorithms/isomorphism.py +664 -0
  39. chython/algorithms/mapping/__init__.py +188 -0
  40. chython/algorithms/mapping/_groups.py +94 -0
  41. chython/algorithms/mapping/_reactions.py +72 -0
  42. chython/algorithms/mapping/attention.py +266 -0
  43. chython/algorithms/mapping/reconstruct.py +346 -0
  44. chython/algorithms/mcs.py +201 -0
  45. chython/algorithms/morgan.py +77 -0
  46. chython/algorithms/rings.py +178 -0
  47. chython/algorithms/smiles.py +597 -0
  48. chython/algorithms/standardize/__init__.py +30 -0
  49. chython/algorithms/standardize/_groups.py +958 -0
  50. chython/algorithms/standardize/_isomers.py +330 -0
  51. chython/algorithms/standardize/_metal_organics.py +189 -0
  52. chython/algorithms/standardize/_reagents.py +44 -0
  53. chython/algorithms/standardize/_salts.py +68 -0
  54. chython/algorithms/standardize/molecule.py +475 -0
  55. chython/algorithms/standardize/reaction.py +384 -0
  56. chython/algorithms/standardize/resonance.py +191 -0
  57. chython/algorithms/standardize/salts.py +128 -0
  58. chython/algorithms/standardize/saturation.py +373 -0
  59. chython/algorithms/standardize/test/__init__.py +18 -0
  60. chython/algorithms/standardize/test/test_canonicalize.py +66 -0
  61. chython/algorithms/standardize/test/test_groups.py +146 -0
  62. chython/algorithms/standardize/test/test_isomers.py +198 -0
  63. chython/algorithms/stereo.py +1215 -0
  64. chython/algorithms/tautomers/__init__.py +167 -0
  65. chython/algorithms/tautomers/_acid.py +59 -0
  66. chython/algorithms/tautomers/_base.py +116 -0
  67. chython/algorithms/tautomers/_keto_enol.py +107 -0
  68. chython/algorithms/tautomers/acid_base.py +208 -0
  69. chython/algorithms/tautomers/heteroarenes.py +103 -0
  70. chython/algorithms/tautomers/keto_enol.py +143 -0
  71. chython/algorithms/tautomers/test/__init__.py +18 -0
  72. chython/algorithms/tautomers/test/test_tautomers.py +80 -0
  73. chython/algorithms/test/__init__.py +18 -0
  74. chython/algorithms/test/test_isomorphism.py +58 -0
  75. chython/algorithms/test/test_smiles.py +76 -0
  76. chython/algorithms/x3dom.py +350 -0
  77. chython/containers/__init__.py +48 -0
  78. chython/containers/_pack_v2.cp313-win_amd64.pyd +0 -0
  79. chython/containers/_pack_v2.pyx +271 -0
  80. chython/containers/_unpack_v0v2.cp313-win_amd64.pyd +0 -0
  81. chython/containers/_unpack_v0v2.pyx +302 -0
  82. chython/containers/bonds.py +255 -0
  83. chython/containers/cgr.py +115 -0
  84. chython/containers/chimera.py +63 -0
  85. chython/containers/graph.py +199 -0
  86. chython/containers/molecule.py +817 -0
  87. chython/containers/query.py +71 -0
  88. chython/containers/rdkit.py +183 -0
  89. chython/containers/reaction.py +324 -0
  90. chython/containers/test/__init__.py +18 -0
  91. chython/containers/test/test_molecule.py +117 -0
  92. chython/containers/test/test_pack.py +60 -0
  93. chython/containers/test/test_rdkit.py +70 -0
  94. chython/containers/test/test_reaction.py +40 -0
  95. chython/exceptions.py +114 -0
  96. chython/files/MRVrw.py +532 -0
  97. chython/files/PDBrw.py +255 -0
  98. chython/files/RDFrw.py +309 -0
  99. chython/files/SDFrw.py +221 -0
  100. chython/files/__init__.py +30 -0
  101. chython/files/_convert.py +207 -0
  102. chython/files/_mapping.py +117 -0
  103. chython/files/_xyz.cp313-win_amd64.pyd +0 -0
  104. chython/files/_xyz.pyx +74 -0
  105. chython/files/daylight/__init__.py +24 -0
  106. chython/files/daylight/parser.py +157 -0
  107. chython/files/daylight/smarts.py +107 -0
  108. chython/files/daylight/smiles.py +260 -0
  109. chython/files/daylight/test/__init__.py +18 -0
  110. chython/files/daylight/test/test_daylight_smarts.py +289 -0
  111. chython/files/daylight/test/test_daylight_smiles.py +101 -0
  112. chython/files/daylight/test/test_parser.py +118 -0
  113. chython/files/daylight/test/test_tokenize.py +77 -0
  114. chython/files/daylight/tokenize.py +376 -0
  115. chython/files/libinchi/__init__.py +22 -0
  116. chython/files/libinchi/libinchi.dll +0 -0
  117. chython/files/libinchi/wrapper.py +554 -0
  118. chython/files/mdl/__init__.py +25 -0
  119. chython/files/mdl/emol.py +251 -0
  120. chython/files/mdl/erxn.py +67 -0
  121. chython/files/mdl/mol.py +186 -0
  122. chython/files/mdl/read.py +223 -0
  123. chython/files/mdl/rxn.py +67 -0
  124. chython/files/mdl/stereo.py +63 -0
  125. chython/files/mdl/write.py +201 -0
  126. chython/files/opsin.py +35 -0
  127. chython/files/test/__init__.py +0 -0
  128. chython/files/test/test_inchi.py +27 -0
  129. chython/files/test/test_mrv.py +47 -0
  130. chython/files/test/test_sdf_rdf.py +64 -0
  131. chython/files/test/test_xyz.py +20 -0
  132. chython/files/xyz.py +78 -0
  133. chython/periodictable/__init__.py +69 -0
  134. chython/periodictable/base/__init__.py +25 -0
  135. chython/periodictable/base/dynamic.py +149 -0
  136. chython/periodictable/base/element.py +451 -0
  137. chython/periodictable/base/groups.py +90 -0
  138. chython/periodictable/base/periods.py +46 -0
  139. chython/periodictable/base/query.py +473 -0
  140. chython/periodictable/base/vector.py +119 -0
  141. chython/periodictable/groupI.py +252 -0
  142. chython/periodictable/groupII.py +223 -0
  143. chython/periodictable/groupIII.py +1154 -0
  144. chython/periodictable/groupIV.py +210 -0
  145. chython/periodictable/groupIX.py +196 -0
  146. chython/periodictable/groupV.py +192 -0
  147. chython/periodictable/groupVI.py +183 -0
  148. chython/periodictable/groupVII.py +162 -0
  149. chython/periodictable/groupVIII.py +161 -0
  150. chython/periodictable/groupX.py +166 -0
  151. chython/periodictable/groupXI.py +164 -0
  152. chython/periodictable/groupXII.py +158 -0
  153. chython/periodictable/groupXIII.py +239 -0
  154. chython/periodictable/groupXIV.py +262 -0
  155. chython/periodictable/groupXV.py +276 -0
  156. chython/periodictable/groupXVI.py +457 -0
  157. chython/periodictable/groupXVII.py +324 -0
  158. chython/periodictable/groupXVIII.py +260 -0
  159. chython/periodictable/test/__init__.py +0 -0
  160. chython/periodictable/test/test_element.py +100 -0
  161. chython/reactor/__init__.py +24 -0
  162. chython/reactor/base.py +222 -0
  163. chython/reactor/reactor.py +177 -0
  164. chython/reactor/test/__init__.py +18 -0
  165. chython/reactor/test/test_reactor.py +40 -0
  166. chython/reactor/test/test_transformer.py +78 -0
  167. chython/reactor/transformer.py +72 -0
  168. chython/utils/__init__.py +50 -0
  169. chython/utils/free_wilson.py +114 -0
  170. chython/utils/grid.py +130 -0
  171. chython/utils/retro.py +139 -0
  172. chython-2.19.dist-info/METADATA +105 -0
  173. chython-2.19.dist-info/RECORD +175 -0
  174. chython-2.19.dist-info/WHEEL +4 -0
  175. chython-2.19.dist-info/licenses/LICENSE +165 -0
@@ -0,0 +1,183 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright 2019-2026 Ramil Nugmanov <nougmanoff@protonmail.com>
4
+ # Copyright 2019 Tagir Akhmetshin <tagirshin@gmail.com>
5
+ # Copyright 2019 Dayana Bashirova <dayana.bashirova@yandex.ru>
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 GroupVI
23
+ from .base.periods import PeriodIV, PeriodV, PeriodVI, PeriodVII
24
+
25
+
26
+ class Cr(Element, PeriodIV, GroupVI):
27
+ __slots__ = ()
28
+
29
+ @property
30
+ def atomic_number(self):
31
+ return 24
32
+
33
+ @property
34
+ def isotopes_distribution(self):
35
+ return {50: 0.04345, 51: 0., 52: 0.83789, 53: 0.09501, 54: 0.02365}
36
+
37
+ @property
38
+ def isotopes_masses(self):
39
+ return {50: 49.946050, 51: 50.944767, 52: 51.940512, 53: 52.940654, 54: 53.938885}
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, ()), (3, False, 0, ()),
48
+ (0, False, 0, ((2, 'O'), (2, 'O'))), # CrO2
49
+ (0, False, 0, ((2, 'O'), (1, 'O'), (1, 'O'))),
50
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))), # CrF4
51
+ (0, False, 0, ((1, 'C'), (1, 'C'), (1, 'C'), (1, 'C'))), # CrC4
52
+
53
+ (0, False, 0, ((2, 'O'), (2, 'O'), (2, 'O'))),
54
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'O'), (1, 'O'))),
55
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'O'), (1, 'Cl'))),
56
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'Cl'), (1, 'Cl'))))
57
+
58
+ @property
59
+ def atomic_radius(self):
60
+ return 1.66
61
+
62
+ @property
63
+ def mdl_isotope(self):
64
+ return 52
65
+
66
+
67
+ class Mo(Element, PeriodV, GroupVI):
68
+ __slots__ = ()
69
+
70
+ @property
71
+ def atomic_number(self):
72
+ return 42
73
+
74
+ @property
75
+ def isotopes_distribution(self):
76
+ return {92: 0.1484, 94: 0.0925, 95: 0.1592, 96: 0.1668, 97: 0.0955, 98: 0.2413, 99: 0., 100: 0.0963}
77
+
78
+ @property
79
+ def isotopes_masses(self):
80
+ return {92: 91.906810, 94: 93.905088, 95: 94.905841, 96: 95.904679, 97: 96.906021, 98: 97.905408, 99: 98.907712,
81
+ 100: 99.907477}
82
+
83
+ @property
84
+ def _common_valences(self):
85
+ return 0,
86
+
87
+ @property
88
+ def _valences_exceptions(self):
89
+ return ((0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))),
90
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
91
+ (0, False, 0, ((1, 'Br'), (1, 'Br'), (1, 'Br'), (1, 'Br'))),
92
+ (0, False, 0, ((2, 'O'), (2, 'O'))),
93
+ (0, False, 0, ((2, 'S'), (2, 'S'))),
94
+
95
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))),
96
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
97
+ (0, False, 0, ((1, 'Br'), (1, 'Br'), (1, 'Br'), (1, 'Br'), (1, 'Br'))),
98
+
99
+ (0, False, 0, ((2, 'O'), (2, 'O'), (2, 'O'))),
100
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'O'), (1, 'O'))),
101
+
102
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))),
103
+ (0, False, 0, ((2, 'O'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))))
104
+
105
+ @property
106
+ def atomic_radius(self):
107
+ return 1.90
108
+
109
+ @property
110
+ def mdl_isotope(self):
111
+ return 96
112
+
113
+
114
+ class W(Element, PeriodVI, GroupVI):
115
+ __slots__ = ()
116
+
117
+ @property
118
+ def atomic_number(self):
119
+ return 74
120
+
121
+ @property
122
+ def isotopes_distribution(self):
123
+ return {180: 0.0012, 182: 0.265, 183: 0.1431, 184: 0.3064, 186: 0.2843}
124
+
125
+ @property
126
+ def isotopes_masses(self):
127
+ return {180: 179.946706, 182: 181.948206, 183: 182.950224, 184: 183.950933, 186: 185.954362}
128
+
129
+ @property
130
+ def _common_valences(self):
131
+ return 0,
132
+
133
+ @property
134
+ def _valences_exceptions(self):
135
+ return ((0, False, 0, ((2, 'O'), (2, 'O'), (2, 'O'))),
136
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'O'), (1, 'O'))),
137
+
138
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))),
139
+ (0, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl'))),
140
+ (0, False, 0, ((2, 'O'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))))
141
+
142
+ @property
143
+ def atomic_radius(self):
144
+ return 1.93
145
+
146
+ @property
147
+ def mdl_isotope(self):
148
+ return 184
149
+
150
+
151
+ class Sg(Element, PeriodVII, GroupVI):
152
+ __slots__ = ()
153
+
154
+ @property
155
+ def atomic_number(self):
156
+ return 106
157
+
158
+ @property
159
+ def isotopes_distribution(self):
160
+ return {269: 1.0}
161
+
162
+ @property
163
+ def isotopes_masses(self):
164
+ return {269: 269.128634}
165
+
166
+ @property
167
+ def _common_valences(self):
168
+ return 0,
169
+
170
+ @property
171
+ def _valences_exceptions(self):
172
+ return ()
173
+
174
+ @property
175
+ def atomic_radius(self):
176
+ return 1.93 # unknown, taken radius of previous element in group
177
+
178
+ @property
179
+ def mdl_isotope(self):
180
+ return 269
181
+
182
+
183
+ __all__ = ['Cr', 'Mo', 'W', 'Sg']
@@ -0,0 +1,162 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright 2019-2026 Ramil Nugmanov <nougmanoff@protonmail.com>
4
+ # Copyright 2019 Tagir Akhmetshin <tagirshin@gmail.com>
5
+ # Copyright 2019 Alexander Nikanshin <17071996sasha@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 GroupVII
23
+ from .base.periods import PeriodIV, PeriodV, PeriodVI, PeriodVII
24
+
25
+
26
+ class Mn(Element, PeriodIV, GroupVII):
27
+ __slots__ = ()
28
+
29
+ @property
30
+ def atomic_number(self):
31
+ return 25
32
+
33
+ @property
34
+ def isotopes_distribution(self):
35
+ return {52: 0., 55: 1.0}
36
+
37
+ @property
38
+ def isotopes_masses(self):
39
+ return {52: 51.945566, 55: 54.938050}
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, ()),
48
+ (0, False, 0, ((2, 'O'), (2, 'O'))),
49
+ (0, False, 0, ((2, 'O'),)), # MnO
50
+ (0, False, 0, ((2, 'O'), (1, 'O'))), # Mn2O3
51
+ (0, False, 0, ((1, 'O'), (1, 'O'), (1, 'O'))),
52
+ (0, False, 0, ((2, 'O'), (2, 'O'))), # MnO2
53
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'O'), (1, 'O'))), # [MnO4]2-
54
+ (0, False, 0, ((2, 'O'), (2, 'O'), (2, 'O'), (1, 'O')))) # [MnO4]-
55
+
56
+ @property
57
+ def atomic_radius(self):
58
+ return 1.61
59
+
60
+ @property
61
+ def mdl_isotope(self):
62
+ return 55
63
+
64
+
65
+ class Tc(Element, PeriodV, GroupVII):
66
+ __slots__ = ()
67
+
68
+ @property
69
+ def atomic_number(self):
70
+ return 43
71
+
72
+ @property
73
+ def isotopes_distribution(self):
74
+ return {98: 0., 99: 1.0}
75
+
76
+ @property
77
+ def isotopes_masses(self):
78
+ return {98: 97.907216, 99: 98.906255}
79
+
80
+ @property
81
+ def _common_valences(self):
82
+ return 0,
83
+
84
+ @property
85
+ def _valences_exceptions(self):
86
+ return ((0, False, 0, ((2, 'O'), (2, 'O'))), # TcO2
87
+ (0, False, 0, ((2, 'S'), (2, 'S')))) # TcS2
88
+
89
+ @property
90
+ def atomic_radius(self):
91
+ return 1.83
92
+
93
+ @property
94
+ def mdl_isotope(self):
95
+ return 98
96
+
97
+
98
+ class Re(Element, PeriodVI, GroupVII):
99
+ __slots__ = ()
100
+
101
+ @property
102
+ def atomic_number(self):
103
+ return 75
104
+
105
+ @property
106
+ def isotopes_distribution(self):
107
+ return {185: 0.374, 186: 0., 187: 0.626, 188: 0.}
108
+
109
+ @property
110
+ def isotopes_masses(self):
111
+ return {185: 184.952956, 186: 185.954986, 187: 186.955751, 188: 187.958114}
112
+
113
+ @property
114
+ def _common_valences(self):
115
+ return 0,
116
+
117
+ @property
118
+ def _valences_exceptions(self):
119
+ return ()
120
+
121
+ @property
122
+ def atomic_radius(self):
123
+ return 1.88
124
+
125
+ @property
126
+ def mdl_isotope(self):
127
+ return 186
128
+
129
+
130
+ class Bh(Element, PeriodVII, GroupVII):
131
+ __slots__ = ()
132
+
133
+ @property
134
+ def atomic_number(self):
135
+ return 107
136
+
137
+ @property
138
+ def isotopes_distribution(self):
139
+ return {270: 1.0}
140
+
141
+ @property
142
+ def isotopes_masses(self):
143
+ return {270: 270.133363}
144
+
145
+ @property
146
+ def _common_valences(self):
147
+ return 0,
148
+
149
+ @property
150
+ def _valences_exceptions(self):
151
+ return ()
152
+
153
+ @property
154
+ def atomic_radius(self):
155
+ return 1.88 # unknown, taken radius of previous element in group
156
+
157
+ @property
158
+ def mdl_isotope(self):
159
+ return 270
160
+
161
+
162
+ __all__ = ['Mn', 'Tc', 'Re', 'Bh']
@@ -0,0 +1,161 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright 2019-2026 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 GroupVIII
22
+ from .base.periods import PeriodIV, PeriodV, PeriodVI, PeriodVII
23
+
24
+
25
+ class Fe(Element, PeriodIV, GroupVIII):
26
+ __slots__ = ()
27
+
28
+ @property
29
+ def atomic_number(self):
30
+ return 26
31
+
32
+ @property
33
+ def isotopes_distribution(self):
34
+ return {54: 0.05845, 55: 0., 56: 0.91754, 57: 0.02119, 58: 0.00282, 59: 0.}
35
+
36
+ @property
37
+ def isotopes_masses(self):
38
+ return {54: 53.939615, 55: 54.938293, 56: 55.934942, 57: 56.935399, 58: 57.933281, 59: 58.934876}
39
+
40
+ @property
41
+ def _common_valences(self):
42
+ return 0, 2, 3
43
+
44
+ @property
45
+ def _valences_exceptions(self):
46
+ return (2, False, 0, ()), (3, False, 0, ())
47
+
48
+ @property
49
+ def atomic_radius(self):
50
+ return 1.56
51
+
52
+ @property
53
+ def mdl_isotope(self):
54
+ return 56
55
+
56
+
57
+ class Ru(Element, PeriodV, GroupVIII):
58
+ __slots__ = ()
59
+
60
+ @property
61
+ def atomic_number(self):
62
+ return 44
63
+
64
+ @property
65
+ def isotopes_distribution(self):
66
+ return {96: 0.0554, 98: 0.0187, 99: 0.1276, 100: 0.126, 101: 0.1706, 102: 0.3155, 104: 0.1862, 106: 0.}
67
+
68
+ @property
69
+ def isotopes_masses(self):
70
+ return {96: 95.907598, 98: 97.905287, 99: 98.905939, 100: 99.90422, 101: 100.905582, 102: 101.904349,
71
+ 104: 103.90543, 106: 105.907329}
72
+
73
+ @property
74
+ def _common_valences(self):
75
+ return 0,
76
+
77
+ @property
78
+ def _valences_exceptions(self):
79
+ return ((0, False, 0, ((2, 'O'), (2, 'O'), (2, 'O'), (2, 'O'))), # RuO4
80
+ (0, False, 0, ((1, 'O'), (2, 'O'), (2, 'O'), (2, 'O'))), # [RuO4]-
81
+ (0, False, 0, ((2, 'C'), (1, 'Cl'), (1, 'Cl'))), # Grubbs
82
+ (0, False, 0, ((2, 'C'), (1, 'C'), (1, 'Cl'), (1, 'Cl')))) # Hoveyda–Grubbs
83
+
84
+ @property
85
+ def atomic_radius(self):
86
+ return 1.78
87
+
88
+ @property
89
+ def mdl_isotope(self):
90
+ return 101
91
+
92
+
93
+ class Os(Element, PeriodVI, GroupVIII):
94
+ __slots__ = ()
95
+
96
+ @property
97
+ def atomic_number(self):
98
+ return 76
99
+
100
+ @property
101
+ def isotopes_distribution(self):
102
+ return {184: 0.0002, 186: 0.0159, 187: 0.0196, 188: 0.1324, 189: 0.1615, 190: 0.2626, 191: 0., 192: 0.4078}
103
+
104
+ @property
105
+ def isotopes_masses(self):
106
+ return {184: 183.952491, 186: 185.953838, 187: 186.955748, 188: 187.955836, 189: 188.958145, 190: 189.958445,
107
+ 191: 190.960930, 192: 191.961479}
108
+
109
+ @property
110
+ def _common_valences(self):
111
+ return 0,
112
+
113
+ @property
114
+ def _valences_exceptions(self):
115
+ return ((0, False, 0, ((2, 'O'), (2, 'O'), (2, 'O'), (2, 'O'))),
116
+ (0, False, 0, ((2, 'O'), (2, 'O'), (2, 'O'), (1, 'O'), (1, 'O'))),
117
+ (0, False, 0, ((2, 'O'), (2, 'O'), (2, 'O'))),
118
+ (0, False, 0, ((2, 'O'), (2, 'O'), (1, 'O'), (1, 'O'))))
119
+
120
+ @property
121
+ def atomic_radius(self):
122
+ return 1.85
123
+
124
+ @property
125
+ def mdl_isotope(self):
126
+ return 190
127
+
128
+
129
+ class Hs(Element, PeriodVII, GroupVIII):
130
+ __slots__ = ()
131
+
132
+ @property
133
+ def atomic_number(self):
134
+ return 108
135
+
136
+ @property
137
+ def isotopes_distribution(self):
138
+ return {240: 1.0}
139
+
140
+ @property
141
+ def isotopes_masses(self):
142
+ return {270: 270.134293}
143
+
144
+ @property
145
+ def _common_valences(self):
146
+ return 0,
147
+
148
+ @property
149
+ def _valences_exceptions(self):
150
+ return ()
151
+
152
+ @property
153
+ def atomic_radius(self):
154
+ return 1.85 # unknown, taken radius of previous element in group
155
+
156
+ @property
157
+ def mdl_isotope(self):
158
+ return 270
159
+
160
+
161
+ __all__ = ['Fe', 'Ru', 'Os', 'Hs']
@@ -0,0 +1,166 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright 2019-2026 Ramil Nugmanov <nougmanoff@protonmail.com>
4
+ # Copyright 2019 Tagir Akhmetshin <tagirshin@gmail.com>
5
+ # Copyright 2019 Dayana Bashirova <dayana.bashirova@yandex.ru>
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 GroupX
23
+ from .base.periods import PeriodIV, PeriodV, PeriodVI, PeriodVII
24
+
25
+
26
+ class Ni(Element, PeriodIV, GroupX):
27
+ __slots__ = ()
28
+
29
+ @property
30
+ def atomic_number(self):
31
+ return 28
32
+
33
+ @property
34
+ def isotopes_distribution(self):
35
+ return {58: 0.680769, 60: 0.262231, 61: 0.011399, 62: 0.036345, 63: 0., 64: 0.009256}
36
+
37
+ @property
38
+ def isotopes_masses(self):
39
+ return {58: 57.935348, 60: 59.930791, 61: 60.931060, 62: 61.928349, 63: 62.929669, 64: 63.927970}
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, ()),
48
+ (1, False, 0, ((1, 'C'),)),
49
+ (0, False, 0, ((2, 'O'), (1, 'O')))) # Ni2O3
50
+
51
+ @property
52
+ def atomic_radius(self):
53
+ return 1.49
54
+
55
+ @property
56
+ def mdl_isotope(self):
57
+ return 59
58
+
59
+
60
+ class Pd(Element, PeriodV, GroupX):
61
+ __slots__ = ()
62
+
63
+ @property
64
+ def atomic_number(self):
65
+ return 46
66
+
67
+ @property
68
+ def isotopes_distribution(self):
69
+ return {102: 0.0102, 103: 0., 104: 0.1114, 105: 0.2233, 106: 0.2733, 108: 0.2646, 109: 0., 110: 0.1172}
70
+
71
+ @property
72
+ def isotopes_masses(self):
73
+ return {102: 101.905608, 103: 102.906087, 104: 103.904035, 105: 104.905084, 106: 105.903483, 108: 107.903894,
74
+ 109: 108.905950, 110: 109.905152}
75
+
76
+ @property
77
+ def _common_valences(self):
78
+ return 0, 2
79
+
80
+ @property
81
+ def _valences_exceptions(self):
82
+ return ((2, False, 0, ()),
83
+ (1, False, 0, ((1, 'C'),)),
84
+ (-2, False, 0, ((1, 'O'), (1, 'O'), (1, 'O'), (1, 'O'))), # [Pd(OH)4]2-
85
+ (-2, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))), # [PdF4]2-
86
+ (-2, False, 0, ((1, 'Cl'), (1, 'Cl'), (1, 'Cl'), (1, 'Cl')))) # [PdCl4]2-
87
+
88
+ @property
89
+ def atomic_radius(self):
90
+ return 1.69
91
+
92
+ @property
93
+ def mdl_isotope(self):
94
+ return 106
95
+
96
+
97
+ class Pt(Element, PeriodVI, GroupX):
98
+ __slots__ = ()
99
+
100
+ @property
101
+ def atomic_number(self):
102
+ return 78
103
+
104
+ @property
105
+ def isotopes_distribution(self):
106
+ return {190: 0.00014, 192: 0.00782, 194: 0.32967, 195: 0.33832, 196: 0.25242, 198: 0.07163}
107
+
108
+ @property
109
+ def isotopes_masses(self):
110
+ return {190: 189.95993, 192: 191.961035, 194: 193.962664, 195: 194.964774, 196: 195.964935, 198: 197.967876}
111
+
112
+ @property
113
+ def _common_valences(self):
114
+ return 0, 2
115
+
116
+ @property
117
+ def _valences_exceptions(self):
118
+ return ((2, False, 0, ()),
119
+ (0, False, 0, ((1, 'N'), (1, 'N'), (1, 'Cl'), (1, 'Cl'))),
120
+ (0, False, 0, ((1, 'N'), (1, 'N'), (1, 'O'), (1, 'O'))),
121
+ (0, False, 0, ((1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'), (1, 'F'))), # PtF6
122
+ (0, False, 0, ((2, 'O'), (2, 'O'), (2, 'O'))), # PtO3
123
+ (0, False, 0, ((2, 'O'), (2, 'O'))))
124
+
125
+ @property
126
+ def atomic_radius(self):
127
+ return 1.77
128
+
129
+ @property
130
+ def mdl_isotope(self):
131
+ return 195
132
+
133
+
134
+ class Ds(Element, PeriodVII, GroupX):
135
+ __slots__ = ()
136
+
137
+ @property
138
+ def atomic_number(self):
139
+ return 110
140
+
141
+ @property
142
+ def isotopes_distribution(self):
143
+ return {281: 1.0}
144
+
145
+ @property
146
+ def isotopes_masses(self):
147
+ return {281: 281.164516}
148
+
149
+ @property
150
+ def _common_valences(self):
151
+ return 0,
152
+
153
+ @property
154
+ def _valences_exceptions(self):
155
+ return ()
156
+
157
+ @property
158
+ def atomic_radius(self):
159
+ return 1.77 # unknown, taken radius of previous element in group
160
+
161
+ @property
162
+ def mdl_isotope(self):
163
+ return 281
164
+
165
+
166
+ __all__ = ['Ni', 'Pd', 'Pt', 'Ds']