-
Notifications
You must be signed in to change notification settings - Fork 7
/
test_titration_class.py
129 lines (115 loc) · 3.38 KB
/
test_titration_class.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import pandas as pd, numpy as np
import calkulate as calk
tt_alkalinity = 2238.6
tt_kwargs = dict(
dic=2031.53,
total_silicate=2.5,
total_phosphate=0.31,
)
tt = calk.Titration(
analyte_mass=0.1,
salinity=33.571,
file_name="seawater-CRM-144.dat",
# file_name="0-0 0 (0)calk-3-5.dat",
file_path="tests/data/",
file_prepare_kwargs=tt_kwargs,
)
tt.calkulate(tt_alkalinity)
# Simulate a similar titration
st = calk.Titration(
analyte_mass=0.1,
salinity=33.571,
simulate_alkalinity=tt_alkalinity,
simulate_kwargs=dict(
emf0=tt.emf0,
titrant_molinity=tt.titrant_molinity,
titrant_mass_stop=4.2e-3,
titrant_mass_step=0.15e-3,
**tt_kwargs,
),
)
st.calkulate(tt_alkalinity)
# Simulate again using the more user-friendly function
st2 = calk.simulate.titration(
tt_alkalinity,
analyte_mass=0.1,
emf0=tt.emf0,
titrant_molinity=tt.titrant_molinity,
titrant_mass_stop=4.2e-3,
titrant_mass_step=0.15e-3,
**tt_kwargs,
)
st.get_dic_loss()
dt = calk.simulate.titration(
tt_alkalinity,
analyte_mass=0.1,
emf0=tt.emf0,
k_dic_loss=2,
titrant_molinity=tt.titrant_molinity,
titrant_mass_stop=4.2e-3,
titrant_mass_step=0.15e-3,
**tt_kwargs,
)
dt.plot_alkalinity()
dt.titration["dic"] = dt.dic * dt.titration.dilution_factor * 1e-6
dt.solve()
dt.plot_alkalinity()
dt.update_dic_loss()
dt.plot_alkalinity()
dt.update_dic_loss()
dt.plot_alkalinity()
dt.update_dic_loss()
dt.plot_alkalinity()
def test_class():
"""Does the Titration object have the expected attributes?"""
assert hasattr(tt, "alkalinity")
assert hasattr(tt, "emf0")
assert hasattr(tt, "alkalinity_gran")
assert hasattr(tt, "emf0_gran")
assert hasattr(tt, "titration")
assert isinstance(tt.alkalinity, float)
assert isinstance(tt.emf0, float)
assert isinstance(tt.alkalinity_gran, float)
assert isinstance(tt.emf0_gran, float)
assert isinstance(tt.titration, pd.DataFrame)
def test_class_simulated():
"""Does the simulated Titration object have the expected attributes?"""
assert hasattr(st, "alkalinity")
assert hasattr(st, "emf0")
assert hasattr(st, "alkalinity_gran")
assert hasattr(st, "emf0_gran")
assert hasattr(st, "titration")
assert isinstance(st.alkalinity, float)
assert isinstance(st.emf0, float)
assert isinstance(st.alkalinity_gran, float)
assert isinstance(st.emf0_gran, float)
assert isinstance(st.titration, pd.DataFrame)
def test_dic_loss():
"""Does the DIC-loss function work as expected?"""
assert not hasattr(tt, "k_dic_loss")
tt.get_dic_loss()
assert hasattr(tt, "k_dic_loss")
assert "dic_loss_modelled" in tt.titration
assert "fCO2_loss_modelled" in tt.titration
alkalinity0 = tt.alkalinity
tt.titration["dic"] = tt.titration.dic_loss_modelled
tt.solve()
assert not pd.isnull(tt.alkalinity)
assert not np.isclose(tt.alkalinity, alkalinity0)
assert hasattr(st, "k_dic_loss")
assert np.isclose(st.k_dic_loss, 0, rtol=0, atol=1e-10)
def test_plots():
"""Do the plots throw no errors?"""
tt.plot_emf()
tt.plot_pH()
tt.plot_gran_emf0()
tt.plot_gran_alkalinity()
tt.plot_alkalinity()
tt.plot_components()
tt.plot_components(log_scale=False)
tt.plot_dic_loss()
tt.plot_fCO2_loss()
# test_class()
# test_class_simulated()
# test_dic_loss()
# test_plots()