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.
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__init__.py +10 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/__init__.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/_version.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/alteration.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/classification.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/compositions.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/geochem.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/melts.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/norm.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/normalisation.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/plot.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/_version.py +21 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/alteration.py +66 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/classification.py +222 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__init__.py +9 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__pycache__/__init__.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__pycache__/aggregate.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__pycache__/codata.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__pycache__/impute.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__pycache__/renorm.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/aggregate.py +391 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/codata.py +266 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/impute.py +82 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/renorm.py +40 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/compositions.py +524 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/GEOROC_CFB_Dataset_List.csv +42 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/GEOROC_Convergent_Dataset_List.csv +42 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/GEOROC_OBFB_Dataset_List.csv +5 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/GEOROC_OIB_Dataset_List.csv +49 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/GEOROC_OceanicPlateau_Dataset_List.csv +18 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/contents.json +1 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/melts/__pycache__/env.cpython-35.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/melts/__pycache__/env.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/melts/env.py +1063 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.Ba.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.Bs.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.F.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.O1.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.O2.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.O3.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.Pc.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.Ph.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.R.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.S1.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.S2.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.S3.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.T1.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.T2.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.U1.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.U2.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.U3.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.modelfields +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.nan.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.none.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS.clsf.gz +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/aphanitic.clsf.gz +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/gabbroic.clsf.gz +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/peralkalinity.clsf.gz +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/phaneritic.clsf.gz +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/ultramafic.clsf.gz +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/CH_PalmeONeill2014.csv +95 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/DDMM_WorkmanHart2005.csv +105 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/DMM_WorkmanHart2005.csv +105 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/DM_SaltersStrake2004.csv +95 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/EDMM_WorkmanHart2005.csv +105 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/PM_PalmeONeill2014.csv +95 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/timescale/geotimescale_spans.csv +180 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/geochem.py +821 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/melts.py +92 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__init__.py +10 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/__init__.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/db.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/ions.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/mineral.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/sites.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/db.py +88 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/ions.py +78 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/mineral.py +587 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/sites.py +134 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/norm.py +224 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/normalisation.py +204 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/plot.py +514 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__init__.py +13 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/__init__.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/database.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/env.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/general.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/georoc.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/math.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/melts.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/multip.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/multiprocessing.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/pd.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/plot.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/skl.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/spatial.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/text.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/time.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/wfs.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/database.py +88 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/env.py +81 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/general.py +266 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/georoc.py +444 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/math.py +371 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/melts.py +397 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/multip.py +29 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/multiprocessing.py +29 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/pd.py +214 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/plot.py +345 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/skl.py +847 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/spatial.py +91 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/text.py +207 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/time.py +224 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/wfs.py +10 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite-0.0.14-py3.6.egg-info/PKG-INFO +61 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite-0.0.14-py3.6.egg-info/SOURCES.txt +83 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite-0.0.14-py3.6.egg-info/dependency_links.txt +1 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite-0.0.14-py3.6.egg-info/requires.txt +47 -0
- 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)
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -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
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|