-
Notifications
You must be signed in to change notification settings - Fork 7
/
t_fit.py
86 lines (72 loc) · 2.71 KB
/
t_fit.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
"""unit tests for fit module"""
import unittest
import pickle
import numpy as np
from numpy import logspace, log10, log, vstack
from gpfit.fit import MaxAffine, SoftmaxAffine, ImplicitSoftmaxAffine
SEED = 33404
class TestFit(unittest.TestCase):
"""Test fit class"""
np.random.seed(SEED)
u = logspace(0, log10(3), 101)
w = (u**2 + 3)/(u + 1)**2
x = log(u)
y = log(w)
K = 3
def test_max_affine(self):
np.random.seed(SEED)
f = MaxAffine(self.x, self.y, self.K)
self.assertTrue(f.error["rms"] < 1e-2)
self.assertEqual(f.print_fit(), [
"w = 0.807159 * (u_1)**-0.0703921",
"w = 0.995106 * (u_1)**-0.431386",
"w = 0.92288 * (u_1)**-0.247099",
])
def test_softmax_affine(self):
np.random.seed(SEED)
f = SoftmaxAffine(self.x, self.y, self.K)
self.assertTrue(f.error["rms"] < 1e-4)
self.assertEqual(f.print_fit(), [
"w**3.44109 = 0.15339 * (u_1)**0.584655"
" + 0.431128 * (u_1)**-2.14831"
" + 0.415776 * (u_1)**-2.14794"
])
def test_implicit_softmax_affine(self):
np.random.seed(SEED)
f = ImplicitSoftmaxAffine(self.x, self.y, self.K)
self.assertTrue(f.error["rms"] < 1e-5)
self.assertEqual(f.print_fit(), [
"1 = (0.947385/w**0.0920329) * (u_1)**0.0176859"
" + (0.992721/w**0.349639) * (u_1)**-0.201861"
" + (0.961596/w**0.116677) * (u_1)**-0.0112199"
])
def test_incorrect_inputs(self):
with self.assertRaises(ValueError):
MaxAffine(self.x, vstack((self.y, self.y)), self.K)
def test_save_and_load(self):
np.random.seed(SEED)
f1 = ImplicitSoftmaxAffine(self.x, self.y, self.K)
f1.save("artifacts/fit.pkl")
strings1 = f1.print_fit()
f2 = pickle.load(open("artifacts/fit.pkl", "rb"))
self.assertTrue(f2.error["rms"] < 1e-5)
strings2 = f2.print_fit()
self.assertEqual(strings1, strings2)
def test_savetxt(self):
np.random.seed(SEED)
f = ImplicitSoftmaxAffine(self.x, self.y, self.K)
f.savetxt("artifacts/fit.txt")
with open("artifacts/fit.txt", "r") as f:
fitstring = f.read()
self.assertEqual(fitstring, (
"1 = (0.947385/w**0.0920329) * (u_1)**0.0176859"
" + (0.992721/w**0.349639) * (u_1)**-0.201861"
" + (0.961596/w**0.116677) * (u_1)**-0.0112199"
))
TESTS = [TestFit]
if __name__ == '__main__':
SUITE = unittest.TestSuite()
LOADER = unittest.TestLoader()
for t in TESTS:
SUITE.addTests(LOADER.loadTestsFromTestCase(t))
unittest.TextTestRunner(verbosity=2).run(SUITE)