|
|
import sys
|
|
|
import os
|
|
|
if not hasattr(sys, 'argv') or len(sys.argv)==0:
|
|
|
sys.argv = ['']
|
|
|
current_script_path = os.path.dirname(os.path.realpath(__file__))
|
|
|
sys.path.append(current_script_path)
|
|
|
|
|
|
import sciqlopqt
|
|
|
import pysciqlopcore
|
|
|
|
|
|
import numpy as np
|
|
|
import pandas as pds
|
|
|
import datetime
|
|
|
import time
|
|
|
import unittest
|
|
|
import ddt
|
|
|
|
|
|
def listify(obj):
|
|
|
if hasattr(obj, "__getitem__"):
|
|
|
return obj
|
|
|
return [obj]
|
|
|
|
|
|
@ddt.ddt
|
|
|
class TimeSeriesCtors(unittest.TestCase):
|
|
|
@ddt.data(
|
|
|
(pysciqlopcore.ScalarTimeSerie,10),
|
|
|
(pysciqlopcore.VectorTimeSerie,10),
|
|
|
(pysciqlopcore.SpectrogramTimeSerie,[10,10]),
|
|
|
(pysciqlopcore.MultiComponentTimeSerie,[10,10]),
|
|
|
(pysciqlopcore.ScalarTimeSerie,0),
|
|
|
(pysciqlopcore.VectorTimeSerie,0),
|
|
|
(pysciqlopcore.SpectrogramTimeSerie,[0,10]),
|
|
|
(pysciqlopcore.MultiComponentTimeSerie,[0,10])
|
|
|
)
|
|
|
def test_construct(self, case):
|
|
|
ts = case[0](case[1])
|
|
|
self.assertEqual(ts.shape,listify(case[1]))
|
|
|
|
|
|
class TimeSeriesData(unittest.TestCase):
|
|
|
def test_set_ScalarTimeSerie_values(self):
|
|
|
ts = pysciqlopcore.ScalarTimeSerie(10)
|
|
|
ts.t[0]=111.
|
|
|
self.assertEqual(ts.t[0],111.)
|
|
|
ts[0]=123.
|
|
|
self.assertEqual(ts[0],123.)
|
|
|
|
|
|
def test_set_VectorTimeSerie_values(self):
|
|
|
ts = pysciqlopcore.VectorTimeSerie(10)
|
|
|
ts.t[0]=111.
|
|
|
self.assertEqual(ts.t[0],111.)
|
|
|
ts[0].x=111.
|
|
|
ts[0].y=222.
|
|
|
ts[0].z=333.
|
|
|
self.assertEqual(ts[0].x,111.)
|
|
|
self.assertEqual(ts[0].y,222.)
|
|
|
self.assertEqual(ts[0].z,333.)
|
|
|
|
|
|
def test_set_SpectrogramTimeSerie_values(self):
|
|
|
ts = pysciqlopcore.SpectrogramTimeSerie((10,100))
|
|
|
ts.t[0]=111.
|
|
|
self.assertEqual(ts.t[0],111.)
|
|
|
ts[0][11]=123.
|
|
|
self.assertEqual(ts[0][11],123.)
|
|
|
|
|
|
def test_build_ScalarTimeSerie_from_np_arrays(self):
|
|
|
ts = pysciqlopcore.ScalarTimeSerie(np.arange(10), np.arange(10)*10)
|
|
|
for i in range(len(ts)):
|
|
|
self.assertEqual(ts[i],i*10.)
|
|
|
|
|
|
def test_build_VectorTimeSerie_from_np_arrays(self):
|
|
|
v=np.ones((10,3))
|
|
|
for i in range(3):
|
|
|
v.transpose()[:][i] = np.arange(10)*10**i
|
|
|
ts = pysciqlopcore.VectorTimeSerie(np.arange(10), v)
|
|
|
for i in range(len(ts)):
|
|
|
self.assertEqual(ts[i].x,i)
|
|
|
self.assertEqual(ts[i].y,i*10.)
|
|
|
self.assertEqual(ts[i].z,i*100.)
|
|
|
|
|
|
|
|
|
def test_build_MultiComponentTimeSerie_from_np_arrays(self):
|
|
|
v=np.ones((10,5))
|
|
|
for i in range(5):
|
|
|
v.transpose()[:][i] = np.arange(10)*10**i
|
|
|
ts = pysciqlopcore.MultiComponentTimeSerie(np.arange(10), v)
|
|
|
for i in range(len(ts)):
|
|
|
self.assertEqual(ts[i][0],i)
|
|
|
self.assertEqual(ts[i][1],i*10.)
|
|
|
self.assertEqual(ts[i][2],i*100.)
|
|
|
|
|
|
def test_build_MultiComponentTimeSerie_from_np_arrays_of_nan(self):
|
|
|
v=np.empty((2,5))
|
|
|
v.fill(np.nan)
|
|
|
ts = pysciqlopcore.MultiComponentTimeSerie(np.arange(2), v)
|
|
|
for i in range(len(ts)):
|
|
|
self.assertTrue(np.isnan(ts[i][0]))
|
|
|
self.assertTrue(np.isnan(ts[i][1]))
|
|
|
self.assertTrue(np.isnan(ts[i][2]))
|
|
|
self.assertTrue(np.isnan(ts[i][3]))
|
|
|
|
|
|
def test_build_VectorTimeSerie_from_np_arrays_row(self):
|
|
|
v=np.ones((10,3))
|
|
|
for i in range(3):
|
|
|
v.transpose()[:][i] = np.arange(10)*10**i
|
|
|
ts = pysciqlopcore.VectorTimeSerie(np.arange(10), v)
|
|
|
for i in range(len(ts)):
|
|
|
self.assertEqual(ts[i].x,i)
|
|
|
self.assertEqual(ts[i].y,i*10.)
|
|
|
self.assertEqual(ts[i].z,i*100.)
|
|
|
|
|
|
def test_build_ScalarTimeSerie_from_np_dataframe(self):
|
|
|
df = pds.DataFrame(data=np.zeros((10,1)),index=np.arange(10))
|
|
|
df[0] = np.arange(10)
|
|
|
ts = pysciqlopcore.ScalarTimeSerie(df.index.values, df.values)
|
|
|
for i in range(len(ts)):
|
|
|
self.assertEqual(ts[i],i)
|
|
|
|
|
|
def test_build_VectorTimeSerie_from_np_dataframe(self):
|
|
|
df = pds.DataFrame(data=np.zeros((10,3)),index=np.arange(10))
|
|
|
for i in range(3):
|
|
|
df[i] = np.arange(10)*10**i
|
|
|
ts = pysciqlopcore.VectorTimeSerie(df.index.values, df.values)
|
|
|
for i in range(len(ts)):
|
|
|
self.assertEqual(ts[i].x,i)
|
|
|
self.assertEqual(ts[i].y,i*10.)
|
|
|
self.assertEqual(ts[i].z,i*100.)
|
|
|
|
|
|
def test_build_SpectrogramTimeSerie_from_np_arrays(self):
|
|
|
v=np.ones((10,30))
|
|
|
for i in range(30):
|
|
|
v.transpose()[:][i] = np.arange(10)*10**(i/10.)
|
|
|
ts = pysciqlopcore.SpectrogramTimeSerie(np.arange(10),np.arange(30), v)
|
|
|
for i in range(len(ts)):
|
|
|
for j in range(30):
|
|
|
self.assertEqual(ts[i][j], i*10**(j/10.))
|
|
|
for i in range(30):
|
|
|
self.assertEqual(ts.axis(1)[i], i)
|
|
|
|
|
|
class VariableData(unittest.TestCase):
|
|
|
def test_default_state(self):
|
|
|
v=pysciqlopcore.Variable2("hello")
|
|
|
self.assertEqual(str(v.name), str("hello"))
|
|
|
self.assertEqual(type(v.data), type(None))
|
|
|
self.assertEqual(len(v), 0)
|
|
|
|
|
|
def test_set_name(self):
|
|
|
v=pysciqlopcore.Variable2("hello")
|
|
|
self.assertEqual(str(v.name), str("hello"))
|
|
|
v.name="newName"
|
|
|
self.assertEqual(str(v.name), str("newName"))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
unittest.main(exit=False)
|
|
|
|
|
|
|