Source code for pySPACE.tests.unittests.data_types.test_base

"""Unit test for BaseData type

    This unit test creates TimeSeries objects and FeatureVector,
    tries to change and inherit meta information and runs separate
    tests for key, tag, specs and inheritance.
 
    .. todo::  test pickling?
    
    :Author: Sirko Straube (sirko.straube@dfki.de), David Feess
    :Last Revision: 2012/04/02
"""

if __name__ == '__main__':
    import sys
    import os
    # The root of the code
    file_path = os.path.dirname(os.path.abspath(__file__))
    sys.path.append(file_path[:file_path.rfind('pySPACE')-1])
         
from pySPACE.resources.data_types.time_series import TimeSeries
from pySPACE.resources.data_types.feature_vector import FeatureVector
import unittest, numpy


[docs]class BaseDataTestCase(unittest.TestCase): """Test BaseData data type"""
[docs] def setUp(self): """Create some example data """ # Create some TimeSeries: self.x1 = TimeSeries([1,2,3,4,5,6], ['a','b','c','d','e','f'], 12, marker_name='S4', name='Name_text ending with Standard', start_time=1000.0, end_time=1004.0) self.x1.specs={'Nice_Parameter': 1, 'Less_Nice_Param': '2'} self.x1.generate_meta() #automatically generate key and tag self.x2 = TimeSeries([1,2,3,4,5,6], ['a','b','c','d','e','f'], 12, marker_name='S4', start_time=2000.0, end_time=2004.0, name='Name_text ending with Standard') #manually generate key and tag import uuid self.x2_key=uuid.uuid4() self.x2.key=self.x2_key self.x2.tag='Tag of x2' self.x2.specs={'Nice_Parameter': 1, 'Less_Nice_Param': '2'} self.x3 = TimeSeries([1,2,3,4,5,6], ['a','b','c','d','e','f'], 12, marker_name='S4', start_time=3000.0, end_time=3004.0) self.x3.specs={'Nice_Parameter': 1, 'Less_Nice_Param': '2'} self.x3.generate_meta() self.x4 = TimeSeries([1,2,3,4,5,6], ['a','b','c','d','e','f'], 12,marker_name='S4') self.x4.specs={'Nice_Parameter': 1, 'Less_Nice_Param': '2'} self.x5 = TimeSeries([1,2], ['a','b'], 12) self.x5.inherit_meta_from(self.x2) self.x6 = TimeSeries([1,2,3,4,5,6], ['a','b','c','d','e','f'], 12) self.x6.specs={'Nice_Parameter': 11, 'Less_Nice_Param': '21'} self.x6.generate_meta() #safe information self.x6_key=self.x6.key self.x6.inherit_meta_from(self.x2) self.some_nice_dict = {'guido': 4127, 'irv': 4127, 'jack': 4098} self.x6.add_to_history(self.x5, self.some_nice_dict) # Create some FeatureVectors: self.f1 = FeatureVector([1,2,3,4,5,6],['a','b','c','d','e','f']) self.f1.specs={'NiceParam':1,'LessNiceParam':2} self.f2 = FeatureVector([1,2,3,4,5,6],['a','b','c','d','e','f'], tag = 'Tag of f2') self.f2.specs={'NiceParam':1,'LessNiceParam':2} self.f3 = FeatureVector([1,2], ['a','b']) self.f3.inherit_meta_from(self.x2) self.f3.add_to_history(self.x5)
[docs] def testTag(self): """Test tag behavior""" # Generate from Meta Data self.assertEqual(self.x1.tag, 'Epoch Start: 1000ms; End: 1004ms; Class: Standard') # Tag passed, use that! self.assertEqual(self.x2.tag, 'Tag of x2') self.assertEqual(self.f2.tag, 'Tag of f2') # No tag and only partial meta passed self.assertEqual(self.x3.tag, 'Epoch Start: 3000ms; End: 3004ms; Class: na') # No Tag and no meta passed, Tag remains None self.assertEqual(self.x4.tag, None) self.assertEqual(self.f1.tag, None)
[docs] def testKey(self): """Test key behavior""" import uuid self.assertEqual(type(self.x1.key),uuid.UUID) # If Key passed, use that! self.assertEqual(self.x2.key, self.x2_key)
[docs] def testInheritAndAddStuff(self): """test inheritance of meta data from other objects""" # Inherit self.assertEqual(self.x5.tag, self.x2.tag) self.assertEqual(self.x5.key, self.x2.key) self.assertEqual(self.f3.tag, self.x2.tag) self.assertEqual(self.f3.key, self.x2.key) #Inherit #suppress warning of BaseData type and cast data back to numpy hist_x6=self.x6.history[0].view(numpy.ndarray) data_x5=self.x5.view(numpy.ndarray) # history self.assertEqual((hist_x6==data_x5).all(),True) self.assertEqual(self.x6.history[0].key,self.x5.key) self.assertEqual(self.x6.history[0].tag,self.x5.tag) self.assertEqual(self.x6.history[0].specs['node_specs'],self.some_nice_dict) hist_f3=self.f3.history[0].view(numpy.ndarray) self.assertEqual((hist_f3==data_x5).all(),True) self.assertEqual(self.f3.history[0].key,self.x5.key) self.assertEqual(self.f3.history[0].tag,self.x5.tag) #if key (and tag) were already set, these original values #have to be kept # self.assertEqual(self.x6.key, self.x6_key) self.assertEqual(self.x6.tag, self.x2.tag) self.x6.inherit_meta_from(self.f3) #should not change tag and key self.assertEqual(self.x6.key, self.x6_key) self.assertEqual(self.x6.tag, self.x2.tag) #testing multiple histories x7 = TimeSeries([1,2,3,4,5,6], ['a','b','c','d','e','f'], 12,marker_name='S4') x7.add_to_history(self.x1) x7.add_to_history(self.x2) x7.add_to_history(self.x3) x7.add_to_history(self.x4) x7.add_to_history(self.x5) x7.add_to_history(self.x6) x7.add_to_history(self.x1) self.assertEqual(len(x7.history),7) self.assertEqual(x7.history[0].key,x7.history[6].key) self.assertEqual(x7.history[5].history,[])
[docs] def testSpecs(self): """Test specs behavior""" # so far, there's not much going on with specs... # same problem as in testkey # timeseries doesn't set spec self.assertEqual(self.x1.specs, {'Nice_Parameter': 1, 'Less_Nice_Param': '2'}) # Inherit self.assertEqual(self.x5.specs,self.x2.specs)
if __name__ == '__main__': suite = unittest.TestLoader().loadTestsFromName('test_base_data') unittest.TextTestRunner(verbosity=2).run(suite)