-
Notifications
You must be signed in to change notification settings - Fork 0
/
unitTest.py
148 lines (129 loc) · 5.3 KB
/
unitTest.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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# -*- coding: utf-8 -*-
"""
Created on Wed Jul 5 11:54:33 2017
@author: Nat
"""
import numpy as np
from initialization import DfConfig as cf
config = cf()
ts = 0
ts2 = 0
exec(open('sampleData.py').read())
# unit test for trendStationaryTest(config, ts)
def testKPSS(config):
from utilities import trendStationaryTest as tst
tmp = np.arange(0, 200, 1) + np.random.normal(0, 0.001, 200)
result = [tst(np.diff(np.power(tmp, config.maxD), diffOrder),
config.kpssRegType, config.significance) for
diffOrder in np.arange(0, config.maxD + 1)]
return result == ['non-stationary'] * config.maxD + ['trend-stationary']
# unit test for findTrendDiff(config, ts)
def testFindTrendDiffOrder(config):
from utilities import findTrendDiff as ftd
tmp = np.arange(0, 200, 1) + np.random.normal(0, 0.0001, 200)
result = [ftd(np.power(tmp, min(diffOrder, config.maxD + 1)),
config.maxD, config.kpssRegType, config.significance) for
diffOrder in np.arange(1, config.maxD + 3)]
return result == [min(x, config.maxD + 1) for x in np.arange(1, config.maxD + 3)]
# unit test for seasonal dummy
def testSeasonalDummy(ts, frequency = 12):
from utilities import seasonalDummy as sd
test = sd(ts, frequency)
return (test[0, 0] > 0.86602) & (test[0, 0] < 0.86603)
# unit test for SDtest
def testSDtest(ts, frequency = 12):
from utilities import SDtest
test = SDtest(ts, frequency)
return (test > 1.524365) & (test < 1.524366)
# unit test for myTrendDiff
def testTrendDiff():
from utilities import myTrendDiff as mtd
a = np.arange(0, 20) * np.arange(0, 20)
try:
lag1 = (mtd(a, 1, padding = False) == np.diff(a, 1)).all()
except AttributeError: lag1 = False
try:
lag2 = (mtd(a, 2, padding = False) == np.diff(a, 2)).all()
except AttributeError: lag2 = False
try:
lag3 = (mtd(a, 3, padding = True) == np.hstack(([0,1,2], np.diff(a, 3)))).all()
except AttributeError: lag3 = False
return lag1 & lag2 & lag3
# unit test for seasonalDiff
def testSeasonalDiff():
from utilities import seasonalDiff
a = np.arange(0, 20) * np.arange(0, 20)
try:
lag1 = (seasonalDiff(a, 4, 1) == np.arange(16, 144, 8)).all()
except AttributeError: lag1 = False
try:
lag2 = (seasonalDiff(a, 4, 2) == np.array([32] * 12)).all()
except AttributeError: lag2 = False
try:
lag3 = (seasonalDiff(a, 4, 3) == np.array([0] * 8)).all()
except AttributeError: lag3 = False
try:
lag4 = (seasonalDiff(a, 4, 3, padding = True) \
== np.hstack(([0,1,4,9,16,24,32,40,32,32,32,32], np.array([0] * 8)))).all()
except AttributeError: lag4 = False
return lag1 & lag2 & lag3 & lag4
# unit test for myAutoArima and mySarimaxGridSearch
def testMyAutoArima(ts, config):
from myArima import myAutoArima as maa
return maa(ts, config) == [0, 1, 1, 0, 0, 0, 0]
# unit test for seasonality detection
def testSeasonalDetection(config):
from utilities import seasonalDetection as sDet
test = [np.cos(np.pi * x / 6) for x in np.arange(0, 100)]
return sDet(test, config.recommendedFreq, config.significance) == 12
# unit test for inverse differencing of seasonal differenced timeseries
def testInverseSeasonalDiff():
from utilities import inverseSeasonalDiff as isd
a = np.arange(0, 20) * np.arange(0, 20)
b1 = np.arange(16, 144, 8)
c1 = isd(a[0: 4], b1, 4, 1)
b2 = np.array([32] * 12)
c2 = isd(a[0: 8], b2, 4, 2)
b3 = np.array([0] * 8)
c3 = isd(a[0: 12], b3, 4, 3)
return (c1 == a).all() & (c2 == a).all() & (c3 == a).all()
# unit test for inverse differencing of trend differenced timeseries
def testInverseTrendDiff():
from utilities import inverseTrendDiff as itd
a = np.arange(0, 20) * np.arange(0, 20)
b1 = np.diff(a, 1)
c1 = itd(a[0:1], b1, 1)
b2 = np.diff(a, 2)
c2 = itd(a[0:2], b2, 2)
b3 = np.diff(a, 3)
c3 = itd(a[0:3], b3, 3)
return (c1 == a).all() & (c2 == a).all() & (c3 == a).all()
# test lstm adding autoregressive columns in window
def testLstmAddARcols(ts):
ts = np.array(ts).reshape([-1,1])
tmp = np.column_stack((ts * ts, ts))
from lstm import addARcols as ar
result = ar(tmp, lag = 4)
return (result.shape[1] == 6) & (np.sum(result[0:4,0]) == 0)
# test lstm adding seasonal autoregressive columns in window
def testLstmAddSeasonalARcols(ts):
ts = np.array(ts).reshape([-1,1])
tmp = np.column_stack((ts * ts, ts))
from lstm import addSeasonalARcols as sar
result = sar(tmp, frequency = 4, seasLag = 2)
return (result.shape[1] == 4) & (np.sum(result[0:8,0]) == 0)
# test myLstm()
def testMyLstm(ts2):
from lstm import myLstm, scores
trainPredInv, trainY_actual, \
testPredInv, testY_actual = myLstm(ts2, [2,1,0,1,1,0,4])
trainR2, testR2 = scores(trainPredInv, trainY_actual,
testPredInv, testY_actual )
return trainR2, testR2
def testAll():
return testKPSS(config) & testFindTrendDiffOrder(config) & \
testSeasonalDummy(ts) & testSDtest(ts) & testTrendDiff() & \
testSeasonalDiff() & testMyAutoArima(ts, config) & \
testSeasonalDetection(config) & \
testInverseTrendDiff() & testInverseSeasonalDiff() & \
testLstmAddARcols(ts) & testLstmAddSeasonalARcols(ts)