pyrolite 0.0.14__zip

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 (119) hide show
  1. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__init__.py +10 -0
  2. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/__init__.cpython-36.pyc +0 -0
  3. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/_version.cpython-36.pyc +0 -0
  4. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/alteration.cpython-36.pyc +0 -0
  5. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/classification.cpython-36.pyc +0 -0
  6. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/compositions.cpython-36.pyc +0 -0
  7. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/geochem.cpython-36.pyc +0 -0
  8. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/melts.cpython-36.pyc +0 -0
  9. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/norm.cpython-36.pyc +0 -0
  10. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/normalisation.cpython-36.pyc +0 -0
  11. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/plot.cpython-36.pyc +0 -0
  12. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/_version.py +21 -0
  13. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/alteration.py +66 -0
  14. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/classification.py +222 -0
  15. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__init__.py +9 -0
  16. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__pycache__/__init__.cpython-36.pyc +0 -0
  17. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__pycache__/aggregate.cpython-36.pyc +0 -0
  18. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__pycache__/codata.cpython-36.pyc +0 -0
  19. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__pycache__/impute.cpython-36.pyc +0 -0
  20. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__pycache__/renorm.cpython-36.pyc +0 -0
  21. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/aggregate.py +391 -0
  22. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/codata.py +266 -0
  23. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/impute.py +82 -0
  24. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/renorm.py +40 -0
  25. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/compositions.py +524 -0
  26. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/GEOROC_CFB_Dataset_List.csv +42 -0
  27. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/GEOROC_Convergent_Dataset_List.csv +42 -0
  28. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/GEOROC_OBFB_Dataset_List.csv +5 -0
  29. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/GEOROC_OIB_Dataset_List.csv +49 -0
  30. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/GEOROC_OceanicPlateau_Dataset_List.csv +18 -0
  31. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/contents.json +1 -0
  32. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/melts/__pycache__/env.cpython-35.pyc +0 -0
  33. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/melts/__pycache__/env.cpython-36.pyc +0 -0
  34. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/melts/env.py +1063 -0
  35. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.Ba.modelfield +0 -0
  36. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.Bs.modelfield +0 -0
  37. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.F.modelfield +0 -0
  38. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.O1.modelfield +0 -0
  39. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.O2.modelfield +0 -0
  40. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.O3.modelfield +0 -0
  41. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.Pc.modelfield +0 -0
  42. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.Ph.modelfield +0 -0
  43. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.R.modelfield +0 -0
  44. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.S1.modelfield +0 -0
  45. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.S2.modelfield +0 -0
  46. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.S3.modelfield +0 -0
  47. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.T1.modelfield +0 -0
  48. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.T2.modelfield +0 -0
  49. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.U1.modelfield +0 -0
  50. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.U2.modelfield +0 -0
  51. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.U3.modelfield +0 -0
  52. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.modelfields +0 -0
  53. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.nan.modelfield +0 -0
  54. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.none.modelfield +0 -0
  55. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS.clsf.gz +0 -0
  56. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/aphanitic.clsf.gz +0 -0
  57. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/gabbroic.clsf.gz +0 -0
  58. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/peralkalinity.clsf.gz +0 -0
  59. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/phaneritic.clsf.gz +0 -0
  60. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/ultramafic.clsf.gz +0 -0
  61. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/CH_PalmeONeill2014.csv +95 -0
  62. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/DDMM_WorkmanHart2005.csv +105 -0
  63. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/DMM_WorkmanHart2005.csv +105 -0
  64. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/DM_SaltersStrake2004.csv +95 -0
  65. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/EDMM_WorkmanHart2005.csv +105 -0
  66. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/PM_PalmeONeill2014.csv +95 -0
  67. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/timescale/geotimescale_spans.csv +180 -0
  68. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/geochem.py +821 -0
  69. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/melts.py +92 -0
  70. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__init__.py +10 -0
  71. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/__init__.cpython-36.pyc +0 -0
  72. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/db.cpython-36.pyc +0 -0
  73. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/ions.cpython-36.pyc +0 -0
  74. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/mineral.cpython-36.pyc +0 -0
  75. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/sites.cpython-36.pyc +0 -0
  76. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/db.py +88 -0
  77. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/ions.py +78 -0
  78. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/mineral.py +587 -0
  79. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/sites.py +134 -0
  80. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/norm.py +224 -0
  81. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/normalisation.py +204 -0
  82. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/plot.py +514 -0
  83. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__init__.py +13 -0
  84. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/__init__.cpython-36.pyc +0 -0
  85. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/database.cpython-36.pyc +0 -0
  86. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/env.cpython-36.pyc +0 -0
  87. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/general.cpython-36.pyc +0 -0
  88. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/georoc.cpython-36.pyc +0 -0
  89. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/math.cpython-36.pyc +0 -0
  90. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/melts.cpython-36.pyc +0 -0
  91. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/multip.cpython-36.pyc +0 -0
  92. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/multiprocessing.cpython-36.pyc +0 -0
  93. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/pd.cpython-36.pyc +0 -0
  94. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/plot.cpython-36.pyc +0 -0
  95. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/skl.cpython-36.pyc +0 -0
  96. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/spatial.cpython-36.pyc +0 -0
  97. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/text.cpython-36.pyc +0 -0
  98. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/time.cpython-36.pyc +0 -0
  99. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/wfs.cpython-36.pyc +0 -0
  100. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/database.py +88 -0
  101. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/env.py +81 -0
  102. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/general.py +266 -0
  103. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/georoc.py +444 -0
  104. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/math.py +371 -0
  105. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/melts.py +397 -0
  106. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/multip.py +29 -0
  107. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/multiprocessing.py +29 -0
  108. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/pd.py +214 -0
  109. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/plot.py +345 -0
  110. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/skl.py +847 -0
  111. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/spatial.py +91 -0
  112. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/text.py +207 -0
  113. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/time.py +224 -0
  114. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/wfs.py +10 -0
  115. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite-0.0.14-py3.6.egg-info/PKG-INFO +61 -0
  116. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite-0.0.14-py3.6.egg-info/SOURCES.txt +83 -0
  117. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite-0.0.14-py3.6.egg-info/dependency_links.txt +1 -0
  118. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite-0.0.14-py3.6.egg-info/requires.txt +47 -0
  119. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite-0.0.14-py3.6.egg-info/top_level.txt +1 -0
@@ -0,0 +1,92 @@
1
+ import os, sys
2
+ import re
3
+ import pandas as pd
4
+ import logging
5
+ from .util.melts import *
6
+ from .util.pd import to_frame
7
+ from pyrolite.geochem import common_oxides, common_elements
8
+ from pyrolite.util.melts import MELTS_Env
9
+
10
+
11
+ logging.getLogger(__name__).addHandler(logging.NullHandler())
12
+ logger = logging.getLogger(__name__)
13
+
14
+
15
+ class MeltsSystem:
16
+
17
+ def __init__(self, composition):
18
+
19
+ self.composition = composition
20
+ self.liquid = None
21
+ self.solid = None
22
+ self.potentialSolid = None
23
+ self.parameters = None
24
+
25
+ def equilirate(self):
26
+ method = 'equilibrate'
27
+
28
+ def findLiquidus(self):
29
+ method = 'findLiquidus'
30
+
31
+ def findWetLiquidus(self):
32
+ method = 'findWetLiquidus'
33
+
34
+
35
+
36
+ def from_melts_cstr(composition_str):
37
+ """Parses melts composition strings to dictionaries."""
38
+ regex = r"""(?P<el>[a-zA-Z'^.]+)(?P<num>[^a-zA-Z]+)"""
39
+ result = re.findall(regex, composition_str)
40
+ convert_element = lambda s: re.sub(r"""[\']+""",
41
+ str(s.count("""'"""))+'+',
42
+ s)
43
+ return {convert_element(el): float(val) for (el, val) in result}
44
+
45
+
46
+ def to_meltsfiles(df, linesep=os.linesep, **kwargs):
47
+ """
48
+ Creates a number of melts files from a dataframe.
49
+ """
50
+
51
+ # Type checking such that series will be passed directly to MELTSfiles
52
+ if isinstance(df, pd.DataFrame):
53
+ for ix in range(df.index.size):
54
+ to_meltsfile(df.iloc[ix, :])
55
+ elif isinstance(df, pd.Series):
56
+ to_meltsfile(src, **kwargs)
57
+
58
+
59
+ def to_meltsfile(ser, linesep=os.linesep, **kwargs):
60
+ lines = []
61
+ # majors --> SiO2 45.7
62
+ # output majors to Wt% values, may need to reorder them for MELTS..
63
+ majors = [i for i in ser.index if i in common_oxides()]
64
+ for k, v in zip(majors, ser[majors].values):
65
+ if not pd.isnull(v): # no NaN data in MELTS files
66
+ lines.append('Initial Composition: {} {}'.format(k, v))
67
+
68
+ # traces --> Initial Trace: Sm 0.2
69
+
70
+ # output traces to ppm values
71
+ traces = [i for i in ser.index if i in common_elements()]
72
+ for k, v in zip(traces, ser[traces].values):
73
+ if not pd.isnull(v): # no NaN data in MELTS files
74
+ lines.append('Initial Trace: {} {}'.format(k, v))
75
+ # output valid kwargs
76
+ valid = ['Mode',
77
+ 'Temperature',
78
+ 'Pressure',
79
+ 'dp/dt',
80
+ 'log fo2 Path',
81
+ 'Log fO2 Delta']
82
+
83
+ # potentially pass these as tuples (start, stop, increment)
84
+ # temperature, pressure --> Initial Temperature: 1500.0
85
+ # temperature, pressure --> Final Temperature: 2000.0
86
+ # temperature, pressure --> Increment Temperature: 3.00
87
+
88
+ # dp/dt: 0.00
89
+ # log fo2 Path: None
90
+ # Log fO2 Delta: 0.0
91
+ # Mode: Fractionate Solids
92
+ return linesep.join(lines)
@@ -0,0 +1,10 @@
1
+ import logging
2
+ from .mineral import Mineral
3
+
4
+ logging.getLogger(__name__).addHandler(logging.NullHandler())
5
+ logger = logging.getLogger(__name__)
6
+
7
+
8
+ # Todo: class attributes to aggregate all collected minerals
9
+
10
+ __db__ = Mineral.db
@@ -0,0 +1,88 @@
1
+ import periodictable as pt
2
+ from .mineral import *
3
+ from .sites import *
4
+ # %% Generic Mineral Group Templates ---------------------------------------------------
5
+ OLIVINE = MineralTemplate(
6
+ "olivine",
7
+ MX(
8
+ "M1",
9
+ affinities={
10
+ "Mg{2+}": 0,
11
+ "Fe{2+}": 1,
12
+ "Mn{2+}": 2,
13
+ "Li{+}": 3,
14
+ "Ca{2+}": 4,
15
+ "Na{+}": 5,
16
+ },
17
+ ),
18
+ MX(
19
+ "M2",
20
+ affinities={
21
+ "Al{3+}": 0,
22
+ "Fe{3+}": 1,
23
+ "Ti{4+}": 2,
24
+ "Cr{3+}": 3,
25
+ "V{3+}": 4,
26
+ "Ti{3+}": 5,
27
+ "Zr{4+}": 6,
28
+ "Sc{3+}": 7,
29
+ "Zn{2+}": 8,
30
+ "Mg{2+}": 9,
31
+ "Fe{2+}": 10,
32
+ "Mn{2+}": 11,
33
+ },
34
+ ),
35
+ TX(),
36
+ *[OX()] * 2,
37
+ )
38
+
39
+ PYROXENE = MineralTemplate(
40
+ "pyroxene",
41
+ MX(
42
+ "M1",
43
+ affinities={
44
+ "Mg{2+}": 0,
45
+ "Fe{2+}": 1,
46
+ "Mn{2+}": 2,
47
+ "Li{+}": 3,
48
+ "Ca{2+}": 4,
49
+ "Na{+}": 5,
50
+ },
51
+ ),
52
+ MX(
53
+ "M2",
54
+ affinities={
55
+ "Al{3+}": 0,
56
+ "Fe{3+}": 1,
57
+ "Ti{4+}": 2,
58
+ "Cr{3+}": 3,
59
+ "V{3+}": 4,
60
+ "Ti{3+}": 5,
61
+ "Zr{4+}": 6,
62
+ "Sc{3+}": 7,
63
+ "Zn{2+}": 8,
64
+ "Mg{2+}": 9,
65
+ "Fe{2+}": 10,
66
+ "Mn{2+}": 11,
67
+ },
68
+ ),
69
+ *[TX()] * 2,
70
+ *[OX()] * 6,
71
+ )
72
+
73
+ Mineral("forsterite", OLIVINE, pt.formula("Mg2SiO4"))
74
+ Mineral("fayalite", OLIVINE, pt.formula("Fe2SiO4"))
75
+ Mineral("tephroite", OLIVINE, pt.formula("Mn2SiO4"))
76
+ Mineral("liebenbergite", OLIVINE, pt.formula("Ni1.5Mg0.5SiO4"))
77
+
78
+ Mineral("enstatite", PYROXENE, pt.formula("Mg2Si2O6"))
79
+ Mineral("ferrosilite", PYROXENE, pt.formula("Fe2Si2O6"))
80
+ Mineral("diopside", PYROXENE, pt.formula("CaMgSi2O6"))
81
+ Mineral("hedenbergite", PYROXENE, pt.formula("CaFeSi2O6"))
82
+ Mineral("johannsenite", PYROXENE, pt.formula("CaMnSi2O6"))
83
+ Mineral("esseneite", PYROXENE, pt.formula("Ca Al Fe{3+} SiO6"))
84
+ Mineral("jadeite", PYROXENE, pt.formula("NaAlSi2O6"))
85
+ Mineral("aegirine", PYROXENE, pt.formula("NaFe{3+}Si2O6"))
86
+ Mineral("namansilite", PYROXENE, pt.formula("NaMn{3+}Si2O6"))
87
+ Mineral("kosmochlor", PYROXENE, pt.formula("NaCrSi2O6"))
88
+ Mineral("spodumene", PYROXENE, pt.formula("LiAlSi2O6"))
@@ -0,0 +1,78 @@
1
+ import periodictable as pt
2
+ from periodictable.core import Element
3
+ from periodictable.formulas import Formula
4
+ from collections import defaultdict
5
+ import logging
6
+
7
+ logging.getLogger(__name__).addHandler(logging.NullHandler())
8
+ logger = logging.getLogger(__name__)
9
+
10
+ __default_charges__ = defaultdict(lambda: None)
11
+ __default_charges__.update(
12
+ dict(
13
+ H=1,
14
+ Li=1,
15
+ Be=1,
16
+ B=3,
17
+ C=4,
18
+ O=-2,
19
+ F=-1,
20
+ Na=1,
21
+ Mg=2,
22
+ Al=3,
23
+ Si=4,
24
+ P=3,
25
+ Cl=-1,
26
+ K=1,
27
+ Ca=2,
28
+ Sc=3,
29
+ Ti=4,
30
+ V=3,
31
+ Cr=3,
32
+ Mn=2,
33
+ Fe=2,
34
+ Co=2,
35
+ Ni=2,
36
+ Cu=2,
37
+ Zn=2,
38
+ Br=-1,
39
+ Rb=1,
40
+ Sr=2,
41
+ Y=3,
42
+ Zr=4,
43
+ Nb=5,
44
+ Sn=4,
45
+ I=-1,
46
+ Cs=1,
47
+ Ba=2,
48
+ La=3,
49
+ Ce=3,
50
+ Pr=3,
51
+ Nd=3,
52
+ Sm=3,
53
+ Eu=3,
54
+ Gd=3,
55
+ Tb=3,
56
+ Dy=3,
57
+ Ho=3,
58
+ Er=3,
59
+ Tm=3,
60
+ Yb=3,
61
+ Lu=3,
62
+ Hf=4,
63
+ Pb=2,
64
+ Th=4,
65
+ U=4,
66
+ )
67
+ )
68
+
69
+ # Monkey patching for default charges
70
+
71
+ Element.default_charge = 0
72
+ Formula.default_charge = property(
73
+ lambda self: sum([m * a.default_charge for a, m in self.atoms.items()])
74
+ )
75
+
76
+ for el, c in __default_charges__.items():
77
+ getattr(pt, el).default_charge = c
78
+ assert isinstance(getattr(pt, el), Element)