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,10 @@
1
+ import sys
2
+ import logging
3
+ from ._version import get_versions
4
+
5
+ __version__ = get_versions()["version"]
6
+ del get_versions
7
+
8
+ # http://docs.python-guide.org/en/latest/writing/logging/
9
+ logging.getLogger(__name__).addHandler(logging.NullHandler())
10
+ logging.captureWarnings(True)
@@ -0,0 +1,21 @@
1
+
2
+ # This file was generated by 'versioneer.py' (0.18) from
3
+ # revision-control system data, or from the parent directory name of an
4
+ # unpacked source archive. Distribution tarballs contain a pre-generated copy
5
+ # of this file.
6
+
7
+ import json
8
+
9
+ version_json = '''
10
+ {
11
+ "date": "2019-01-10T15:35:23+0800",
12
+ "dirty": false,
13
+ "error": null,
14
+ "full-revisionid": "92999f23ac48a00a8ddb00ad9469cf92c67dba75",
15
+ "version": "0.0.14"
16
+ }
17
+ ''' # END VERSION_JSON
18
+
19
+
20
+ def get_versions():
21
+ return json.loads(version_json)
@@ -0,0 +1,66 @@
1
+ import numpy as np
2
+ import pandas as pd
3
+ import logging
4
+
5
+ logging.getLogger(__name__).addHandler(logging.NullHandler())
6
+ logger = logging.getLogger(__name__)
7
+
8
+
9
+ def CIA(df: pd.DataFrame):
10
+ """
11
+ Chemical Index of Alteration
12
+ type: molecular
13
+ ref: Nesbitt and Young (1982)
14
+ """
15
+ return 100 * df.Al2O3 / (df.Al2O3 + df.CaO + df.Na2O + df.K2O)
16
+
17
+
18
+ def CIW(df: pd.DataFrame):
19
+ """
20
+ Chemical Index of Weathering
21
+ type: molecular
22
+ ref: Harnois (1988)
23
+ """
24
+ return 100.0 * df.Al2O3 / (df.Al2O3 + df.CaO + df.Na2O)
25
+
26
+
27
+ def PIA(df: pd.DataFrame):
28
+ """
29
+ Plagioclase Index of Alteration
30
+ type: molecular
31
+ ref: Fedo et al. (1995)
32
+ """
33
+ return 100.0 * (df.Al2O3 - df.K2O) / (df.Al2O3 + df.CaO + df.Na2O - df.K2O)
34
+
35
+
36
+ def SAR(df: pd.DataFrame):
37
+ """
38
+ Silica-Alumina Ratio
39
+ type: molecular
40
+ ref:
41
+ """
42
+ return df.SiO2 / df.Al2O3
43
+
44
+
45
+ def SiTiIndex(df: pd.DataFrame):
46
+ """
47
+ Silica-Titania Index
48
+ Jayaverdena and Izawa (1994)
49
+ type: molecular
50
+ ref:
51
+ """
52
+ # may need to recalculate titania from titanium ppm
53
+ si_ti = df.SiO2 / df.TiO2
54
+ si_al = df.SiO2 / df.Al2O3
55
+ al_ti = df.Al2O3 / df.TiO2
56
+ return si_ti / (si_ti + si_al + al_ti)
57
+
58
+
59
+ def WIP(df: pd.DataFrame):
60
+ """
61
+ Weathering Index of Parker
62
+ Parker (1970)
63
+ type: molecular
64
+ ref:
65
+ """
66
+ return 2 * df.Na2O / 0.35 + df.MgO / 0.9 + 2 * df.K2O / 0.25 + df.CaO / 0.7
@@ -0,0 +1,222 @@
1
+ import os
2
+ import sys
3
+ from pathlib import Path
4
+ import pickle
5
+ import numpy as np
6
+ import pandas as pd
7
+ import matplotlib.pyplot as plt
8
+ from matplotlib.patches import Polygon
9
+ from matplotlib.collections import PatchCollection
10
+ import logging
11
+ import joblib
12
+
13
+ logging.getLogger(__name__).addHandler(logging.NullHandler())
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ class ClassifierModel(object):
18
+ def __init__(self, rebuild=False, deterministic=False):
19
+ self.clsf_modelname = str(type(self).__name__)
20
+ if __name__ == "__main__":
21
+ modeldir = Path(os.getcwd()) / "models"
22
+ else:
23
+ modeldir = Path(__file__).resolve().parent / "data" / "models"
24
+ self.diskname = modeldir / str(self.clsf_modelname)
25
+ self.deterministic = deterministic
26
+ self.clsf = None
27
+ # Try load classifer
28
+ if rebuild:
29
+ self.rebuild_clsf()
30
+ try:
31
+ self.clsf = self.load_clsf(self.diskname.with_suffix(".clsf.gz"))
32
+ # logger.info(f'Loaded {self.diskname}')
33
+ except:
34
+ self.rebuild_clsf()
35
+
36
+ def rebuild_clsf(self):
37
+ self.clsf = self.build_clsf()
38
+ self.dump_clsf(self.diskname.with_suffix(".clsf.gz"))
39
+ # logger.info(f'Built {self.clsf_modelname}')
40
+
41
+ def load_clsf(self, file):
42
+ assert file.exists() and file.is_file()
43
+ # logger.info(f'Loading {self.diskname}')
44
+ return joblib.load(file)
45
+
46
+ def build_clsf(self):
47
+ # logger.info(f'Building {self.clsf_modelname}')
48
+ clsf = None
49
+ return clsf
50
+
51
+ def dump_clsf(self, filename):
52
+ joblib.dump(self.clsf, filename, compress=("gzip", 3))
53
+ # logger.info(f'Dumped {filename}')
54
+ assert filename.exists() and filename.is_file()
55
+
56
+ def classify(self, df: pd.DataFrame):
57
+ return self.clsf.predict(df)
58
+
59
+ def __str__(self):
60
+ pass
61
+
62
+ def __repr__(self):
63
+ pass
64
+
65
+
66
+ class SimpleDeterministicClassifer(object):
67
+ def __init__(self, parent: ClassifierModel):
68
+ self.parent = parent
69
+ self.fields = None
70
+ self.load_fields()
71
+
72
+ def load_fields(self):
73
+ if self.parent:
74
+ self.clsf_modelname = str(self.parent.clsf_modelname)
75
+ self.modeldir = self.parent.diskname.resolve()
76
+ af = self.modeldir / str(self.clsf_modelname + ".modelfields")
77
+ if af.exists() and af.is_file():
78
+ # logger.info(f'''Loading {self.clsf_modelname} classifer fields from "allfile".''')
79
+ loadup = joblib.load(af)
80
+ self.fclasses = [k for (k, v) in loadup.items()]
81
+ self.fields = {c: loadup[c] for ix, c in enumerate(self.fclasses)}
82
+ else:
83
+ # logger.info(f'Loading {self.clsf_modelname} classifer fields from files.')
84
+ fieldfiles = self.modeldir.glob(self.clsf_modelname + ".*.modelfield")
85
+ loadup = [joblib.load(f) for f in fieldfiles]
86
+ self.fclasses = [f.suffix.replace(".", "") for f in loadup]
87
+ self.fields = {c: loadup[ix] for ix, c in enumerate(self.fclasses)}
88
+ # logger.info(f'''Loaded {self.clsf_modelname} classifer fields.''')
89
+ else:
90
+ pass
91
+
92
+ def add_to_axes(self, ax=None, **kwargs):
93
+ polys = [(c, self.fields[c]) for c in self.fclasses if self.fields[c]["poly"]]
94
+ if ax is None:
95
+ fig, ax = plt.subplots(1)
96
+ pgns = []
97
+ for c, f in polys:
98
+ label = f["names"]
99
+ pg = Polygon(f["poly"], closed=True, **kwargs)
100
+ pgns.append(pg)
101
+ x, y = pg.get_xy().T
102
+ ax.annotate(c, xy=(np.nanmean(x), np.nanmean(y)))
103
+ ax.add_patch(pg)
104
+ # ax.add_collection(PatchCollection(pgns), autolim=True)
105
+
106
+ def predict(self, df: pd.DataFrame, cols: list = ["x", "y"]):
107
+ points = df.loc[:, cols].values
108
+ polys = [
109
+ Polygon(self.fields[c]["poly"], closed=True) for c in self.fclasses
110
+ ] # if self.fields[c]['poly']
111
+ indexes = np.array([p.contains_points(points) for p in polys]).T
112
+ notfound = np.logical_not(indexes.sum(axis=-1))
113
+ out = pd.Series(index=df.index)
114
+ outlist = list(map(lambda ix: self.fclasses[ix], np.argmax(indexes, axis=-1)))
115
+ out.loc[:] = outlist
116
+ out.loc[(notfound)] = "none"
117
+ return out
118
+
119
+
120
+ class PeralkalinityClassifier(object):
121
+ def __init__(self, parent: ClassifierModel):
122
+ self.parent = parent
123
+ self.fields = None
124
+
125
+ def predict(self, df: pd.DataFrame):
126
+ TotalAlkali = df.Na2O + df.K2O
127
+ perkalkaline_where = (df.Al2O3 < (TotalAlkali + df.CaO)) & (
128
+ TotalAlkali > df.Al2O3
129
+ )
130
+ metaluminous_where = (df.Al2O3 > (TotalAlkali + df.CaO)) & (
131
+ TotalAlkali < df.Al2O3
132
+ )
133
+ peraluminous_where = (df.Al2O3 < (TotalAlkali + df.CaO)) & (
134
+ TotalAlkali < df.Al2O3
135
+ )
136
+ out = pd.Series(index=df.index)
137
+ out.loc[peraluminous_where] = "Peraluminous"
138
+ out.loc[metaluminous_where] = "Metaluminous"
139
+ out.loc[perkalkaline_where] = "Peralkaline"
140
+ return out
141
+
142
+
143
+ class Geochemistry(object):
144
+ class peralkalinity(ClassifierModel):
145
+ def __init__(self, *args, **kwargs):
146
+ super().__init__(*args, deterministic=True, **kwargs)
147
+
148
+ def build_clsf(self):
149
+ return PeralkalinityClassifier(self)
150
+
151
+ class TAS(ClassifierModel):
152
+ def __init__(self, *args, **kwargs):
153
+ super().__init__(*args, deterministic=True, **kwargs)
154
+
155
+ def build_clsf(self):
156
+ return SimpleDeterministicClassifer(self)
157
+
158
+ def add_to_axes(self, ax=None, **kwargs):
159
+ if ax is None:
160
+ fig, ax = plt.subplots(1)
161
+ self.clsf.add_to_axes(ax=ax, **kwargs)
162
+ ax.set_xlim((35, 85))
163
+ ax.set_ylim((0, 20))
164
+ ax.set_ylabel("$Na_2O + K_2O$")
165
+ ax.set_xlabel("$SiO_2$")
166
+
167
+ def classify(self, df: pd.DataFrame):
168
+ return self.clsf.predict(df, cols=["SiO2", "TotalAlkali"])
169
+
170
+
171
+ class Petrology(object):
172
+ class aphanitic(ClassifierModel):
173
+ """
174
+ QAPF Diagram
175
+ """
176
+
177
+ def __init__(self, *args, **kwargs):
178
+ super().__init__(*args, deterministic=True, **kwargs)
179
+
180
+ def build_clsf(self):
181
+ # Build
182
+ clsf = "thing"
183
+ return clsf
184
+
185
+ class phaneritic(ClassifierModel):
186
+ """
187
+ QAPF Diagram
188
+ """
189
+
190
+ def __init__(self, *args, **kwargs):
191
+ super().__init__(*args, deterministic=True, **kwargs)
192
+
193
+ def build_clsf(self):
194
+ # Build
195
+ clsf = "thing"
196
+ return clsf
197
+
198
+ class gabbroic(ClassifierModel):
199
+ """
200
+ Pyroxene-Olivine-Plagioclase
201
+ """
202
+
203
+ def __init__(self, *args, **kwargs):
204
+ super().__init__(*args, deterministic=True, **kwargs)
205
+
206
+ def build_clsf(self):
207
+ # Build
208
+ clsf = "thing"
209
+ return clsf
210
+
211
+ class ultramafic(ClassifierModel):
212
+ """
213
+ Olivine-Orthopyroxene-Clinopyroxene
214
+ """
215
+
216
+ def __init__(self, *args, **kwargs):
217
+ super().__init__(*args, deterministic=True, **kwargs)
218
+
219
+ def build_clsf(self):
220
+ # Build
221
+ clsf = "thing"
222
+ return clsf
@@ -0,0 +1,9 @@
1
+ # from .aggregate import *
2
+ # from .impute import *
3
+ # from .codata import *
4
+ # from .renorm import *
5
+
6
+ import logging
7
+
8
+ logging.getLogger(__name__).addHandler(logging.NullHandler())
9
+ logger = logging.getLogger(__name__)