class XioTest(unittest.TestCase): def setUp(self): #Test of an indexed file self.f = XIOFile('data/types.xio.gz', indexing=True) #Test of an indexed file with a preset number of lines self.j = XIOFile('data/types.xio.gz', 'r', 10, indexing=True) #Test of an an-unidexed file, now default self.g = XIOFile('data/types.xio.gz', indexing=False) #Test write mode (old legacy format) self.h = XIOFile('data/trywriting.xio.gz', 'w', fileformat='legacy') self.h.xio_writeline('<irio:sfint32 value="35" ' 'sensorName="xioFileClass/desk3/skeletonCount" ' 'timestamp="13765381"></irio:sfint32>\n') self.h.xio_writeline(self.h.xio_formatline('sfint32', 37, 'desk3', 'skeletonCount', 13765381)) self.h.xiofile_close() #Test write mode (new default venice format) self.l = XIOFile('data/trywriting2.xio.gz', 'w') self.l.xio_writeline(self.l.xio_formatline('sfint32', 37, 'desk3', 'skeletonCount', 13765381)) self.l.xiofile_close() #Test write mode, by opening the file previously written to self.i = XIOFile('data/trywriting.xio.gz', 'r', indexing=True) self.m = XIOFile('data/trywriting2.xio.gz', 'r', indexing=True) #Test copy utility, copy part of the file to a new file xiofile_quickcopy('data/types.xio.gz', 'data/newtypes.xio.gz', 0, 5) #Test result of copy, by loading the copy self.k = XIOFile('data/newtypes.xio.gz', 'r', indexing=True) #Test of an un-compressed file self.n = XIOFile('data/types.xio', indexing=True) #File to specifically test line ranges self.o = XIOFile('data/linestest.xio.gz', indexing=True) #Similar for unindexed mode self.p = XIOFile('data/linestest.xio.gz') self.n = XIOFile('data/types.xio', indexing=True) self.q = XIOFile('data/parsing5.xio.gz', indexing=True) self.nr = XIOFile('data/unreadable.xio.gz') def test_xiofile_indexed(self): self.failUnlessEqual(str(type(self.f)), '<class \'mumodo.xiofile.XIOFile\'>') self.failUnlessEqual(self.f.mode, 'r') self.failUnlessEqual(self.f.indexed, True) self.failUnlessEqual(self.f.max_lines, 15) self.failUnlessEqual(self.f.min_time, 1376571532081L) self.failUnlessEqual(self.f.max_time, 1376571532082L) self.failUnlessEqual(self.f.xio_getline(2), '<irio:sfint32 xmlns="' '" xmlns:ns3="http://www.techfak.uni-bielefeld.de/ags/wbski/' 'instantloggerprotocol" value="2" timestamp="1376571532081" ' 'sensorName="dsglab-desk-3/skeletonCount" ' 'type="Sample"></irio:sfint32>\n') self.failUnlessEqual(self.f.xio_getline_attime(1376571532081, relative=False), '<irio:sfint32 xmlns="" xmlns:ns3="http://' 'www.techfak.uni-bielefeld.de/ags/wbski/' 'instantloggerprotocol" value="90310" ' 'timestamp="1376571532081" sensorName="dsglab' '-desk-3/framenumber" type="Sample">' '</irio:sfint32>\n') self.failUnlessEqual(self.f.xio_getline_attime(1), '<irio:mfvec3f xmln' 's="" xmlns:ns3="http://www.techfak.uni-bielefeld.de/ags/wbski/in' 'stantloggerprotocol" value="[0.2124978 -0.1224827 1.858883, 0.30' '30231 -0.1534625 1.925013, 0.01070284 -0.04043572 1.811359, 0.51' '68817 0.04873443 1.994409, 0.209666 -0.148198 1.78842, 0.299611 ' '-0.1756292 1.85338, -0.01972085 -0.3181056 1.753447, 0.5168398 -' '0.1499471 1.939156, 0.2531285 0.3707453 1.670671, 0.2336805 0.03' '969637 1.820125, 0.1654053 -0.02932697 1.817514, 0.3024898 -0.02' '393005 1.848226, 0.4543798 0.03429135 1.977719, 0.5566682 -0.032' '79109 2.062352, 0.234128 0.2108699 1.780103, 0.1076903 0.1457002' ' 1.790787, 0.3986858 0.1662227 1.876898, 0.2335398 0.06816141 1.' '811909, -0.01211493 -0.2486881 1.766024, 0.5297669 -0.1118848 1.' '973672]" timestamp="1376571532082" sensorName="dsglab-desk-3/joi' 'ntPositions3D1" type="Sample"></irio:mfvec3f>\n') self.failUnlessEqual(self.f.xio_parseline_lineno(5), {'valuetype': 'sffloat', 'fieldname': 'soundAngle', 'sensorname': 'dsglab-desk-3', 'value': -24.015615, 'time': 1376571532081L}) self.failUnlessEqual(self.f.xio_parseline_attime(), {'valuetype': 'sfint32', 'fieldname': 'framenumber', 'sensorname': 'dsglab-desk-3', 'value': 90310, 'time': 1376571532081L}) self.failUnlessEqual([l for l in self.f.xio_linegen(0, 5)][2], {'valuetype': 'sfint32', 'fieldname': 'skeletonCount', 'sensorname': 'dsglab-desk-3', 'value': 2, 'time': 1376571532081L}) self.failUnlessEqual(list(self.f.xio_linegen_timerange(0, 10))[3], {'valuetype': 'sffloat', 'fieldname': 'interactionSpace', 'sensorname': 'dsglab-desk-3', 'value': 0.083201334, 'time': 1376571532081L}) self.failUnlessEqual(len(list(self.q.xio_linegen_timerange(0, 4, on_errors='stop'))), 4) self.failUnlessEqual(list(self.q.xio_linegen_timerange(1, 4, on_errors='stop'))[0]['value'], 2) def test_xiofile_lesslines(self): self.failUnlessEqual(self.j.mode, 'r') self.failUnlessEqual(self.j.indexed, True) self.failUnlessEqual(self.j.max_lines, 9) self.failUnlessEqual(self.j.max_time, 1376571532081L) self.failUnlessEqual(self.j.xio_getline(8), '<irio:mfvec3f xmlns="" ' 'xmlns:ns3="http://www.techfak.uni-bielefeld.de/ags/wbski/instan' 'tloggerprotocol" value="[0.0 0.0 0.0, 0.0 0.0 0.0, 0.0 0.0 0.0, ' '0.1671641 -0.3231136 1.178103, 0.2154177 0.04740157 1.772092, ' '0.0 0.0 0.0]" timestamp="1376571532081" sensorName="dsglab-desk' '-3/positions3D" type="Sample"></irio:mfvec3f>\n') self.failUnlessEqual(self.j.xio_getline_attime(1376571532081, relative=False), '<irio:sfint32 xmlns="" xmlns:ns3="http://www.' 'techfak.uni-bielefeld.de/ags/wbski/instantlog' 'gerprotocol" value="90310" timestamp="1376571' '532081" sensorName="dsglab-desk-3/framenumber" ' 'type="Sample"></irio:sfint32>\n') self.failUnlessEqual(self.j.xio_parseline_lineno(5), {'valuetype': 'sffloat', 'fieldname': 'soundAngle', 'sensorname': 'dsglab-desk-3', 'value': -24.015615, 'time': 1376571532081L}) self.failUnlessEqual(self.j.xio_parseline_attime(), {'valuetype': 'sfint32', 'fieldname': 'framenumber', 'sensorname': 'dsglab-desk-3', 'value': 90310, 'time': 1376571532081L}) self.failUnlessEqual([l for l in self.j.xio_linegen(0, 5)][2], {'valuetype': 'sfint32', 'fieldname': 'skeletonCount', 'sensorname': 'dsglab-desk-3', 'value': 2, 'time': 1376571532081L}) self.failUnlessEqual([x for x in self.j.xio_linegen_timerange(0, 6)][3], {'valuetype': 'sffloat', 'fieldname': 'interactionSpace', 'sensorname': 'dsglab-desk-3', 'value': 0.083201334, 'time': 1376571532081L}) def test_xiofile_unindexed(self): self.failUnlessEqual(self.g.mode, 'r') self.failUnlessEqual(self.g.indexed, False) self.failUnlessEqual(self.g.min_time, 1376571532081L) self.failUnlessEqual([ln for ln in self.g.xio_quicklinegen(0, 13)][6], {'valuetype': 'sffloat', 'fieldname': 'soundAmplitude', 'sensorname': 'dsglab-desk-3', 'value': -1.0, 'time': 1376571532081L}) self.failUnlessEqual(len([z for z in self.q.xio_quicklinegen(0, 6, on_errors='stop')]), 4) self.failUnlessEqual(self.g.xio_quicksearch(15), (False, 1376571532081L)) self.failUnlessEqual(self.g.xio_quicksearch(1376571532082), (True, 1376571532082L)) #Test that unindexed is now the default mode self.failUnlessEqual(XIOFile('data/types.xio.gz').indexed, False) self.failUnlessEqual(type(self.nr), XIOFile) def test_writing_in_xiofile(self): #Read from previously written to file self.failUnlessEqual(self.i.xio_getline(0), '<irio:sfint32 value="35" ' 'sensorName="xioFileClass/desk3/skeletonCount" timestamp=' '"13765381"></irio:sfint32>\n') #Read from previously formatted XIO line (legacy mode) self.failUnlessEqual(self.i.xio_getline(1), '<irio:sfint32 value="37" ' 'sensorName="xioFileClass/desk3/skeletonCount" timestamp=' '"13765381"></irio:sfint32>\n') #Read from previously formatted XIO line (venice mode) self.failUnlessEqual(self.m.xio_getline(0), '<sfint32 value="37" ' 'timestamp="13765381" sensorName="desk3/skeletonCount"/>\n') #Test the mode of writing to a file self.failUnlessEqual(XIOFile('data/trywriting.xio.gz', 'w').mode, 'w') def test_copying_an_iofile(self): self.failUnlessEqual(self.k.xio_getline(2), '<irio:sfint32 xmlns="" ' 'xmlns:ns3="http://www.techfak.uni-bielefeld.de/ags/wbski/insta' 'ntloggerprotocol" value="2" timestamp="1376571532081" sensor' 'Name="dsglab-desk-3/skeletonCount" type="Sample"></irio:sfin' 't32>\n') def test_parsing_of_types(self): self.failUnlessEqual(self.f.xio_parsetypes("0.1671641 -0.31289", 'sfvec2f')[1], -0.31289) self.failUnlessEqual(self.f.xio_parsetypes("0.1671641 -0.3 0.3", 'sfvec3f')[0], 0.1671641) self.failUnlessEqual(self.f.xio_parsetypes("0.9260816 -0.1602955 " "0.0856332 -0.3306738", 'sfrotation')[0], 0.9260816) self.failUnlessEqual(self.f.xio_parsetypes("90310", 'sfint32'), 90310) self.failUnlessEqual(self.f.xio_parsetypes("0.083201334", 'sffloat'), 0.083201334) self.failUnlessEqual(self.f.xio_parsetypes("Some string", 'sfstring'), 'Some string') self.failUnlessEqual(self.f.xio_parsetypes("[309.0 -0.5838974, " "336.0 -0.5788992, 317.0 -0.4093522]", 'mfvec2f')[1][0], 336.0) self.failUnlessEqual(self.f.xio_parsetypes("[0.9260816 -0.1602955 " "0.0856332 -0.3306738, 0.9676204 0.07145812 " "0.1676264 -0.1746593, 0.8931494 -0.2351457 " "-0.1472739 -0.3539787]", 'mfrotation')[1][0], 0.9676204) self.failUnlessEqual(self.j.xio_parsetypes("[0.2154177 0.04740157" " 1.772092, 0.0 0.0 0.0]", 'mfvec3f')[0][1], 0.04740157) self.failUnlessEqual(self.j.xio_parsetypes("[a, 0.04740157, b, c, E]", 'mffloat')[1], 0.04740157) self.assertTrue(math.isnan(self.j.xio_parsetypes("[a, 0.04740157]", 'mffloat')[0])) self.failUnlessEqual(self.j.xio_parsetypes("[a, 0.04740157]", 'mfstring')[1], '0.04740157') self.failUnlessEqual(self.j.xio_parsetypes("True", 'sfbool'), True) self.failUnlessEqual(self.j.xio_parsetypes("true", 'boolean'), True) self.failUnlessEqual(self.j.xio_parsetypes("", 'sfbool'), False) self.failUnlessEqual(self.j.xio_parsetypes("yes", 'boolean'), False) def test_parsing_of_names(self): self.failUnlessEqual(self.f.xio_parsename("dsglab-desk-3/" "jointOrientations0"), ('dsglab-desk-3', 'jointOrientations0')) self.failUnlessEqual(self.j.xio_parsename("dsglab-desk-3/positions3D"), ('dsglab-desk-3', 'positions3D')) def test_parsing_of_lines(self): self.failUnlessEqual(str(self.j.xio_parseline('<irio:mfvec3f xmlns="' '" xmlns:ns3="http://www.techfak.uni-bielefeld.de/ags/wbski/insta' 'ntloggerprotocol" value="[0.0 0.0 0.0, 0.0 0.0 0.0, 0.0 0.0 0.0,' ' 0.1671641 -0.3231136 1.178103, 0.2154177 0.04740157 1.772092,' ' 0.0 0.0 0.0]" timestamp="1376571532081" sensorName="dsglab-' 'desk-3/positions3D" type="Sample"></irio:mfvec3f>\n')['value']), '[0.0 0.0 0.0, 0.0 0.0 0.0, 0.0 0.0 0.0, ' '0.1671641 -0.3231136 1.178103, 0.2154177 ' '0.04740157 1.772092, 0.0 0.0 0.0]') self.failUnlessEqual(self.f.xio_parseline('<irio:sfint32 xmlns="' '" xmlns:ns3="http://www.techfak.uni-bielefeld.de/ags/wbski/' 'instantloggerprotocol" value="2" timestamp="1376571532081" ' 'sensorName="dsglab-desk-3/skeletonCount" type="Sample">' '</irio:sfint32>\n'), {'valuetype': 'sfint32', 'fieldname': 'skeletonCount', 'sensorname': 'dsglab-desk-3', 'value': 2, 'time': 1376571532081L}) self.failUnlessEqual(self.m.xio_parseline('<sfint32 value="37" ' 'timestamp="13765381" sensorName="desk3/skeletonCount"/>\n'), {'valuetype': 'sfint32', 'fieldname': 'skeletonCount', 'sensorname': 'desk3', 'value': 37, 'time': 13765381}) def test_xiofile_uncompressed(self): self.failUnlessEqual(self.n.mode, 'r') self.failUnlessEqual(self.n.indexed, True) self.failUnlessEqual(self.n.max_lines, 15) self.failUnlessEqual(self.n.max_time, 1376571532082L) self.failUnlessEqual(self.n.xio_getline(2), '<irio:sfint32 xmlns="' '" xmlns:ns3="http://www.techfak.uni-bielefeld.de/ags/wbski/' 'instantloggerprotocol" value="2" timestamp="1376571532081" ' 'sensorName="dsglab-desk-3/skeletonCount" ' 'type="Sample"></irio:sfint32>\n') self.failUnlessEqual(self.n.xio_getline_attime(1376571532081, relative=False), '<irio:sfint32 xmlns="" xmlns:ns3="http://' 'www.techfak.uni-bielefeld.de/ags/wbski/' 'instantloggerprotocol" value="90310" ' 'timestamp="1376571532081" sensorName="dsglab' '-desk-3/framenumber" type="Sample">' '</irio:sfint32>\n') self.failUnlessEqual(self.n.xio_getline_attime(1), '<irio:mfvec3f xmln' 's="" xmlns:ns3="http://www.techfak.uni-bielefeld.de/ags/wbski/in' 'stantloggerprotocol" value="[0.2124978 -0.1224827 1.858883, 0.30' '30231 -0.1534625 1.925013, 0.01070284 -0.04043572 1.811359, 0.51' '68817 0.04873443 1.994409, 0.209666 -0.148198 1.78842, 0.299611 ' '-0.1756292 1.85338, -0.01972085 -0.3181056 1.753447, 0.5168398 -' '0.1499471 1.939156, 0.2531285 0.3707453 1.670671, 0.2336805 0.03' '969637 1.820125, 0.1654053 -0.02932697 1.817514, 0.3024898 -0.02' '393005 1.848226, 0.4543798 0.03429135 1.977719, 0.5566682 -0.032' '79109 2.062352, 0.234128 0.2108699 1.780103, 0.1076903 0.1457002' ' 1.790787, 0.3986858 0.1662227 1.876898, 0.2335398 0.06816141 1.' '811909, -0.01211493 -0.2486881 1.766024, 0.5297669 -0.1118848 1.' '973672]" timestamp="1376571532082" sensorName="dsglab-desk-3/joi' 'ntPositions3D1" type="Sample"></irio:mfvec3f>\n') self.failUnlessEqual(self.n.xio_parseline_lineno(5), {'valuetype': 'sffloat', 'fieldname': 'soundAngle', 'sensorname': 'dsglab-desk-3', 'value': -24.015615, 'time': 1376571532081L}) self.failUnlessEqual(self.n.xio_parseline_attime(), {'valuetype': 'sfint32', 'fieldname': 'framenumber', 'sensorname': 'dsglab-desk-3', 'value': 90310, 'time': 1376571532081L}) self.failUnlessEqual([l for l in self.n.xio_linegen(0, 5)][2], {'valuetype': 'sfint32', 'fieldname': 'skeletonCount', 'sensorname': 'dsglab-desk-3', 'value': 2, 'time': 1376571532081L}) self.failUnlessEqual([y for y in self.q.xio_linegen(0, 6, on_errors='stop')][-1], {'fieldname': 'gazeQualityLevelLeft', 'sensorname': 'lab-labtop/FaceLabNode 3', 'time': 1341393414828L, 'value': 2, 'valuetype': 'sfint32'})
class XioTest(unittest.TestCase): def setUp(self): #Test of an indexed file self.f = XIOFile('data/types.xio.gz', indexing=True) #Test of an indexed file with a preset number of lines self.j = XIOFile('data/types.xio.gz', 'r', 10, indexing=True) #Test of an an-unidexed file, now default self.g = XIOFile('data/types.xio.gz', indexing=False) #Test write mode (old legacy format) self.h = XIOFile('data/trywriting.xio.gz', 'w', fileformat='legacy') self.h.xio_writeline('<irio:sfint32 value="35" ' 'sensorName="xioFileClass/desk3/skeletonCount" ' 'timestamp="13765381"></irio:sfint32>\n') self.h.xio_writeline( self.h.xio_formatline('sfint32', 37, 'desk3', 'skeletonCount', 13765381)) self.h.xiofile_close() #Test write mode (new default venice format) self.l = XIOFile('data/trywriting2.xio.gz', 'w') self.l.xio_writeline( self.l.xio_formatline('sfint32', 37, 'desk3', 'skeletonCount', 13765381)) self.l.xiofile_close() #Test write mode, by opening the file previously written to self.i = XIOFile('data/trywriting.xio.gz', 'r', indexing=True) self.m = XIOFile('data/trywriting2.xio.gz', 'r', indexing=True) #Test copy utility, copy part of the file to a new file xiofile_quickcopy('data/types.xio.gz', 'data/newtypes.xio.gz', 0, 5) #Test result of copy, by loading the copy self.k = XIOFile('data/newtypes.xio.gz', 'r', indexing=True) #Test of an un-compressed file self.n = XIOFile('data/types.xio', indexing=True) #File to specifically test line ranges self.o = XIOFile('data/linestest.xio.gz', indexing=True) #Similar for unindexed mode self.p = XIOFile('data/linestest.xio.gz') self.n = XIOFile('data/types.xio', indexing=True) self.q = XIOFile('data/parsing5.xio.gz', indexing=True) self.nr = XIOFile('data/unreadable.xio.gz') def test_xiofile_indexed(self): self.failUnlessEqual(str(type(self.f)), '<class \'mumodo.xiofile.XIOFile\'>') self.failUnlessEqual(self.f.mode, 'r') self.failUnlessEqual(self.f.indexed, True) self.failUnlessEqual(self.f.max_lines, 15) self.failUnlessEqual(self.f.min_time, 1376571532081L) self.failUnlessEqual(self.f.max_time, 1376571532082L) self.failUnlessEqual( self.f.xio_getline(2), '<irio:sfint32 xmlns="' '" xmlns:ns3="http://www.techfak.uni-bielefeld.de/ags/wbski/' 'instantloggerprotocol" value="2" timestamp="1376571532081" ' 'sensorName="dsglab-desk-3/skeletonCount" ' 'type="Sample"></irio:sfint32>\n') self.failUnlessEqual( self.f.xio_getline_attime(1376571532081, relative=False), '<irio:sfint32 xmlns="" xmlns:ns3="http://' 'www.techfak.uni-bielefeld.de/ags/wbski/' 'instantloggerprotocol" value="90310" ' 'timestamp="1376571532081" sensorName="dsglab' '-desk-3/framenumber" type="Sample">' '</irio:sfint32>\n') self.failUnlessEqual( self.f.xio_getline_attime(1), '<irio:mfvec3f xmln' 's="" xmlns:ns3="http://www.techfak.uni-bielefeld.de/ags/wbski/in' 'stantloggerprotocol" value="[0.2124978 -0.1224827 1.858883, 0.30' '30231 -0.1534625 1.925013, 0.01070284 -0.04043572 1.811359, 0.51' '68817 0.04873443 1.994409, 0.209666 -0.148198 1.78842, 0.299611 ' '-0.1756292 1.85338, -0.01972085 -0.3181056 1.753447, 0.5168398 -' '0.1499471 1.939156, 0.2531285 0.3707453 1.670671, 0.2336805 0.03' '969637 1.820125, 0.1654053 -0.02932697 1.817514, 0.3024898 -0.02' '393005 1.848226, 0.4543798 0.03429135 1.977719, 0.5566682 -0.032' '79109 2.062352, 0.234128 0.2108699 1.780103, 0.1076903 0.1457002' ' 1.790787, 0.3986858 0.1662227 1.876898, 0.2335398 0.06816141 1.' '811909, -0.01211493 -0.2486881 1.766024, 0.5297669 -0.1118848 1.' '973672]" timestamp="1376571532082" sensorName="dsglab-desk-3/joi' 'ntPositions3D1" type="Sample"></irio:mfvec3f>\n') self.failUnlessEqual( self.f.xio_parseline_lineno(5), { 'valuetype': 'sffloat', 'fieldname': 'soundAngle', 'sensorname': 'dsglab-desk-3', 'value': -24.015615, 'time': 1376571532081L }) self.failUnlessEqual( self.f.xio_parseline_attime(), { 'valuetype': 'sfint32', 'fieldname': 'framenumber', 'sensorname': 'dsglab-desk-3', 'value': 90310, 'time': 1376571532081L }) self.failUnlessEqual( [l for l in self.f.xio_linegen(0, 5)][2], { 'valuetype': 'sfint32', 'fieldname': 'skeletonCount', 'sensorname': 'dsglab-desk-3', 'value': 2, 'time': 1376571532081L }) self.failUnlessEqual( list(self.f.xio_linegen_timerange(0, 10))[3], { 'valuetype': 'sffloat', 'fieldname': 'interactionSpace', 'sensorname': 'dsglab-desk-3', 'value': 0.083201334, 'time': 1376571532081L }) self.failUnlessEqual( len(list(self.q.xio_linegen_timerange(0, 4, on_errors='stop'))), 4) self.failUnlessEqual( list(self.q.xio_linegen_timerange(1, 4, on_errors='stop'))[0]['value'], 2) def test_xiofile_lesslines(self): self.failUnlessEqual(self.j.mode, 'r') self.failUnlessEqual(self.j.indexed, True) self.failUnlessEqual(self.j.max_lines, 9) self.failUnlessEqual(self.j.max_time, 1376571532081L) self.failUnlessEqual( self.j.xio_getline(8), '<irio:mfvec3f xmlns="" ' 'xmlns:ns3="http://www.techfak.uni-bielefeld.de/ags/wbski/instan' 'tloggerprotocol" value="[0.0 0.0 0.0, 0.0 0.0 0.0, 0.0 0.0 0.0, ' '0.1671641 -0.3231136 1.178103, 0.2154177 0.04740157 1.772092, ' '0.0 0.0 0.0]" timestamp="1376571532081" sensorName="dsglab-desk' '-3/positions3D" type="Sample"></irio:mfvec3f>\n') self.failUnlessEqual( self.j.xio_getline_attime(1376571532081, relative=False), '<irio:sfint32 xmlns="" xmlns:ns3="http://www.' 'techfak.uni-bielefeld.de/ags/wbski/instantlog' 'gerprotocol" value="90310" timestamp="1376571' '532081" sensorName="dsglab-desk-3/framenumber" ' 'type="Sample"></irio:sfint32>\n') self.failUnlessEqual( self.j.xio_parseline_lineno(5), { 'valuetype': 'sffloat', 'fieldname': 'soundAngle', 'sensorname': 'dsglab-desk-3', 'value': -24.015615, 'time': 1376571532081L }) self.failUnlessEqual( self.j.xio_parseline_attime(), { 'valuetype': 'sfint32', 'fieldname': 'framenumber', 'sensorname': 'dsglab-desk-3', 'value': 90310, 'time': 1376571532081L }) self.failUnlessEqual( [l for l in self.j.xio_linegen(0, 5)][2], { 'valuetype': 'sfint32', 'fieldname': 'skeletonCount', 'sensorname': 'dsglab-desk-3', 'value': 2, 'time': 1376571532081L }) self.failUnlessEqual( [x for x in self.j.xio_linegen_timerange(0, 6)][3], { 'valuetype': 'sffloat', 'fieldname': 'interactionSpace', 'sensorname': 'dsglab-desk-3', 'value': 0.083201334, 'time': 1376571532081L }) def test_xiofile_unindexed(self): self.failUnlessEqual(self.g.mode, 'r') self.failUnlessEqual(self.g.indexed, False) self.failUnlessEqual(self.g.min_time, 1376571532081L) self.failUnlessEqual( [ln for ln in self.g.xio_quicklinegen(0, 13)][6], { 'valuetype': 'sffloat', 'fieldname': 'soundAmplitude', 'sensorname': 'dsglab-desk-3', 'value': -1.0, 'time': 1376571532081L }) self.failUnlessEqual( len([z for z in self.q.xio_quicklinegen(0, 6, on_errors='stop')]), 4) self.failUnlessEqual(self.g.xio_quicksearch(15), (False, 1376571532081L)) self.failUnlessEqual(self.g.xio_quicksearch(1376571532082), (True, 1376571532082L)) #Test that unindexed is now the default mode self.failUnlessEqual(XIOFile('data/types.xio.gz').indexed, False) self.failUnlessEqual(type(self.nr), XIOFile) def test_writing_in_xiofile(self): #Read from previously written to file self.failUnlessEqual( self.i.xio_getline(0), '<irio:sfint32 value="35" ' 'sensorName="xioFileClass/desk3/skeletonCount" timestamp=' '"13765381"></irio:sfint32>\n') #Read from previously formatted XIO line (legacy mode) self.failUnlessEqual( self.i.xio_getline(1), '<irio:sfint32 value="37" ' 'sensorName="xioFileClass/desk3/skeletonCount" timestamp=' '"13765381"></irio:sfint32>\n') #Read from previously formatted XIO line (venice mode) self.failUnlessEqual( self.m.xio_getline(0), '<sfint32 value="37" ' 'timestamp="13765381" sensorName="desk3/skeletonCount"/>\n') #Test the mode of writing to a file self.failUnlessEqual(XIOFile('data/trywriting.xio.gz', 'w').mode, 'w') def test_copying_an_iofile(self): self.failUnlessEqual( self.k.xio_getline(2), '<irio:sfint32 xmlns="" ' 'xmlns:ns3="http://www.techfak.uni-bielefeld.de/ags/wbski/insta' 'ntloggerprotocol" value="2" timestamp="1376571532081" sensor' 'Name="dsglab-desk-3/skeletonCount" type="Sample"></irio:sfin' 't32>\n') def test_parsing_of_types(self): self.failUnlessEqual( self.f.xio_parsetypes("0.1671641 -0.31289", 'sfvec2f')[1], -0.31289) self.failUnlessEqual( self.f.xio_parsetypes("0.1671641 -0.3 0.3", 'sfvec3f')[0], 0.1671641) self.failUnlessEqual( self.f.xio_parsetypes( "0.9260816 -0.1602955 " "0.0856332 -0.3306738", 'sfrotation')[0], 0.9260816) self.failUnlessEqual(self.f.xio_parsetypes("90310", 'sfint32'), 90310) self.failUnlessEqual(self.f.xio_parsetypes("0.083201334", 'sffloat'), 0.083201334) self.failUnlessEqual(self.f.xio_parsetypes("Some string", 'sfstring'), 'Some string') self.failUnlessEqual( self.f.xio_parsetypes( "[309.0 -0.5838974, " "336.0 -0.5788992, 317.0 -0.4093522]", 'mfvec2f')[1][0], 336.0) self.failUnlessEqual( self.f.xio_parsetypes( "[0.9260816 -0.1602955 " "0.0856332 -0.3306738, 0.9676204 0.07145812 " "0.1676264 -0.1746593, 0.8931494 -0.2351457 " "-0.1472739 -0.3539787]", 'mfrotation')[1][0], 0.9676204) self.failUnlessEqual( self.j.xio_parsetypes( "[0.2154177 0.04740157" " 1.772092, 0.0 0.0 0.0]", 'mfvec3f')[0][1], 0.04740157) self.failUnlessEqual( self.j.xio_parsetypes("[a, 0.04740157, b, c, E]", 'mffloat')[1], 0.04740157) self.assertTrue( math.isnan(self.j.xio_parsetypes("[a, 0.04740157]", 'mffloat')[0])) self.failUnlessEqual( self.j.xio_parsetypes("[a, 0.04740157]", 'mfstring')[1], '0.04740157') self.failUnlessEqual(self.j.xio_parsetypes("True", 'sfbool'), True) self.failUnlessEqual(self.j.xio_parsetypes("true", 'boolean'), True) self.failUnlessEqual(self.j.xio_parsetypes("", 'sfbool'), False) self.failUnlessEqual(self.j.xio_parsetypes("yes", 'boolean'), False) def test_parsing_of_names(self): self.failUnlessEqual( self.f.xio_parsename("dsglab-desk-3/" "jointOrientations0"), ('dsglab-desk-3', 'jointOrientations0')) self.failUnlessEqual(self.j.xio_parsename("dsglab-desk-3/positions3D"), ('dsglab-desk-3', 'positions3D')) def test_parsing_of_lines(self): self.failUnlessEqual( str( self.j.xio_parseline( '<irio:mfvec3f xmlns="' '" xmlns:ns3="http://www.techfak.uni-bielefeld.de/ags/wbski/insta' 'ntloggerprotocol" value="[0.0 0.0 0.0, 0.0 0.0 0.0, 0.0 0.0 0.0,' ' 0.1671641 -0.3231136 1.178103, 0.2154177 0.04740157 1.772092,' ' 0.0 0.0 0.0]" timestamp="1376571532081" sensorName="dsglab-' 'desk-3/positions3D" type="Sample"></irio:mfvec3f>\n') ['value']), '[0.0 0.0 0.0, 0.0 0.0 0.0, 0.0 0.0 0.0, ' '0.1671641 -0.3231136 1.178103, 0.2154177 ' '0.04740157 1.772092, 0.0 0.0 0.0]') self.failUnlessEqual( self.f.xio_parseline( '<irio:sfint32 xmlns="' '" xmlns:ns3="http://www.techfak.uni-bielefeld.de/ags/wbski/' 'instantloggerprotocol" value="2" timestamp="1376571532081" ' 'sensorName="dsglab-desk-3/skeletonCount" type="Sample">' '</irio:sfint32>\n'), { 'valuetype': 'sfint32', 'fieldname': 'skeletonCount', 'sensorname': 'dsglab-desk-3', 'value': 2, 'time': 1376571532081L }) self.failUnlessEqual( self.m.xio_parseline( '<sfint32 value="37" ' 'timestamp="13765381" sensorName="desk3/skeletonCount"/>\n'), { 'valuetype': 'sfint32', 'fieldname': 'skeletonCount', 'sensorname': 'desk3', 'value': 37, 'time': 13765381 }) def test_xiofile_uncompressed(self): self.failUnlessEqual(self.n.mode, 'r') self.failUnlessEqual(self.n.indexed, True) self.failUnlessEqual(self.n.max_lines, 15) self.failUnlessEqual(self.n.max_time, 1376571532082L) self.failUnlessEqual( self.n.xio_getline(2), '<irio:sfint32 xmlns="' '" xmlns:ns3="http://www.techfak.uni-bielefeld.de/ags/wbski/' 'instantloggerprotocol" value="2" timestamp="1376571532081" ' 'sensorName="dsglab-desk-3/skeletonCount" ' 'type="Sample"></irio:sfint32>\n') self.failUnlessEqual( self.n.xio_getline_attime(1376571532081, relative=False), '<irio:sfint32 xmlns="" xmlns:ns3="http://' 'www.techfak.uni-bielefeld.de/ags/wbski/' 'instantloggerprotocol" value="90310" ' 'timestamp="1376571532081" sensorName="dsglab' '-desk-3/framenumber" type="Sample">' '</irio:sfint32>\n') self.failUnlessEqual( self.n.xio_getline_attime(1), '<irio:mfvec3f xmln' 's="" xmlns:ns3="http://www.techfak.uni-bielefeld.de/ags/wbski/in' 'stantloggerprotocol" value="[0.2124978 -0.1224827 1.858883, 0.30' '30231 -0.1534625 1.925013, 0.01070284 -0.04043572 1.811359, 0.51' '68817 0.04873443 1.994409, 0.209666 -0.148198 1.78842, 0.299611 ' '-0.1756292 1.85338, -0.01972085 -0.3181056 1.753447, 0.5168398 -' '0.1499471 1.939156, 0.2531285 0.3707453 1.670671, 0.2336805 0.03' '969637 1.820125, 0.1654053 -0.02932697 1.817514, 0.3024898 -0.02' '393005 1.848226, 0.4543798 0.03429135 1.977719, 0.5566682 -0.032' '79109 2.062352, 0.234128 0.2108699 1.780103, 0.1076903 0.1457002' ' 1.790787, 0.3986858 0.1662227 1.876898, 0.2335398 0.06816141 1.' '811909, -0.01211493 -0.2486881 1.766024, 0.5297669 -0.1118848 1.' '973672]" timestamp="1376571532082" sensorName="dsglab-desk-3/joi' 'ntPositions3D1" type="Sample"></irio:mfvec3f>\n') self.failUnlessEqual( self.n.xio_parseline_lineno(5), { 'valuetype': 'sffloat', 'fieldname': 'soundAngle', 'sensorname': 'dsglab-desk-3', 'value': -24.015615, 'time': 1376571532081L }) self.failUnlessEqual( self.n.xio_parseline_attime(), { 'valuetype': 'sfint32', 'fieldname': 'framenumber', 'sensorname': 'dsglab-desk-3', 'value': 90310, 'time': 1376571532081L }) self.failUnlessEqual( [l for l in self.n.xio_linegen(0, 5)][2], { 'valuetype': 'sfint32', 'fieldname': 'skeletonCount', 'sensorname': 'dsglab-desk-3', 'value': 2, 'time': 1376571532081L }) self.failUnlessEqual( [y for y in self.q.xio_linegen(0, 6, on_errors='stop')][-1], { 'fieldname': 'gazeQualityLevelLeft', 'sensorname': 'lab-labtop/FaceLabNode 3', 'time': 1341393414828L, 'value': 2, 'valuetype': 'sfint32' })
class MumodoTest(unittest.TestCase): def setUp(self): self.f = open_streamframe_from_xiofile( "data/fseeksmaller.xio.gz", "lab-labtop/irioKinect 2", window_size=5, with_fields=[], without_fields=[], discard_duplicates=True, start_time=0, end_time=13, relative=True, timestamp_offset=10, ) self.f2 = open_streamframe_from_xiofile( "data/fseeksmaller.xio.gz", "lab-labtop/irioKinect", window_size=5, with_fields=[], without_fields=[], discard_duplicates=True, start_time=0, end_time=13, relative=True, timestamp_offset=10, ) # self.outtake_from_stream = self.f.ix[1341393414826]['framenumber'] self.fraw = open_streamframe_from_xiofile( "data/fseeksmaller.xio.gz", "lab-labtop/irioKinect 2", window_size=5, with_fields=[], without_fields=[], discard_duplicates=True, start_time=0, end_time=13, relative=True, timestamp_offset="raw", ) self.ff = open_streamframe_from_xiofile( "data/fseeksmaller.xio.gz", "lab-labtop/irioKinect 2", window_size=5, with_fields=[], without_fields=[], discard_duplicates=True, start_time=0, end_time=13, relative=True, ) save_streamframe_to_xiofile({"lab-labtop/irioKinect 2": self.f}, "data/sf_to_xio.xio.gz") save_streamframe_to_xiofile( {"lab-labtop/irioKinect 2": self.f, "lab-labtop/irioKinect": self.f2}, "data/sf_to_xio2.xio.gz" ) self.rsn = open_streamframe_from_xiofile("data/fseeksmaller.xio.gz", "wrong/sensor/name") self.outtake_from_xio = XIOFile("data/sf_to_xio.xio.gz", indexing=True) self.outtake_from_xio_2 = XIOFile("data/sf_to_xio2.xio.gz", indexing=True) self.q = [ ex for ex in quantize(self.outtake_from_xio.xio_quicklinegen(0, 13, True, True), "lab-labtop/irioKinect 2") ][0]["soundAngle"] self.ivf = open_intervalframe_from_textgrid( "data/r1_12_15with" "Point.TextGrid", encoding="utf-8", asobjects=False, include_empty_intervals=False )["P"] self.cv = convert_pointtier_to_streamframe(self.ivf) self.pf = convert_streamframe_to_pointtier(self.f) self.outtake_from_pf = convert_streamframe_to_pointtier(self.f)["soundAngle"].ix[0]["time"] self.if_from_tg = open_intervalframe_from_textgrid( "data/r1-20120704-" "cam1-head-zm.TextGrid", encoding="utf-8", asobjects=False, include_empty_intervals=False, ) self.if_from_tg_tier = self.if_from_tg.values()[0] save_intervalframe_to_textgrid(self.if_from_tg, "data/testif.TextGrid", encoding="utf-8") self.tg = tgt.read_textgrid("data/testif.TextGrid", encoding="utf-8", include_empty_intervals=False) self.ic1 = open_intervalframe_from_increco("data/test.inc_reco") self.ic2 = open_intervalframe_from_increco("data/test.inc_reco", lastonly=True) def test_stream_from_xio(self): self.failUnlessEqual(self.f.ix[10]["framenumber"], 45771.0) self.failUnlessEqual(self.f.index[1], 20) self.failUnlessEqual(self.fraw.index[0], 1341393414826) self.failUnlessEqual(self.ff.index[1], 10) # wrong sensor name should result in an empty DataFrame # being returned self.failUnlessEqual(len(self.rsn), 0) def test_stream_to_xio(self): self.failUnlessEqual( self.outtake_from_xio.xio_getline(5), '<sffloat value="-0.7323895" timestamp="10"' ' sensorName="lab-labtop/irioKinect 2/so' 'undAngle"/>\n', ) def test_many_stream_to_xio(self): self.failUnlessEqual( self.outtake_from_xio_2.xio_getline(6), '<sffloat value="46286.0" timestamp="14"' ' sensorName="lab-labtop/irioKinect/fram' 'enumber"/>\n', ) self.failUnlessEqual( self.outtake_from_xio_2.xio_getline(5), '<sffloat value="-0.7323895" timestamp="10"' ' sensorName="lab-labtop/irioKinect 2/so' 'undAngle"/>\n', ) def test_interval_from_textgrid(self): self.failUnlessEqual(self.if_from_tg_tier.ix[100]["end_time"], 1095.864) def test_interval_to_textgrid(self): self.failUnlessEqual(type(self.tg.tiers[0].intervals[10]), tgt.core.Interval) def test_quantize(self): self.failUnlessEqual(self.q, -0.7323895) def test_pointtier_to_stream(self): self.failUnlessEqual(str(self.cv["mark"].values[1]), "B") def test_stream_to_pointframe(self): self.failUnlessEqual(self.outtake_from_pf, 10) def test_intervals_from_increco(self): self.failUnlessEqual(len(self.ic1.keys()), 106) self.failUnlessEqual(self.ic1.keys()[3:6], ["6.43", "3.78", "6.5"]) self.failUnlessEqual(self.ic1["3.78"].ix[0]["text"], "der") self.failUnlessEqual(len(self.ic2.keys()), 1) self.failUnlessEqual(self.ic2.keys()[0], "38.4") self.failUnlessEqual(self.ic2["38.4"].ix[0]["text"], "ragt") def tearDown(self): os.system("rm data/sf_to_xio.xio.gz") os.system("rm data/sf_to_xio2.xio.gz")
class MumodoTest(unittest.TestCase): def setUp(self): self.f = open_streamframe_from_xiofile('data/fseeksmaller.xio.gz', "lab-labtop/irioKinect 2", window_size=5, with_fields=[], without_fields=[], discard_duplicates=True, start_time=0, end_time=13, relative=True, timestamp_offset=10) self.f2 = open_streamframe_from_xiofile('data/fseeksmaller.xio.gz', "lab-labtop/irioKinect", window_size=5, with_fields=[], without_fields=[], discard_duplicates=True, start_time=0, end_time=13, relative=True, timestamp_offset=10) #self.outtake_from_stream = self.f.ix[1341393414826]['framenumber'] self.fraw = open_streamframe_from_xiofile('data/fseeksmaller.xio.gz', "lab-labtop/irioKinect 2", window_size=5, with_fields=[], without_fields=[], discard_duplicates=True, start_time=0, end_time=13, relative=True, timestamp_offset='raw') self.ff = open_streamframe_from_xiofile('data/fseeksmaller.xio.gz', "lab-labtop/irioKinect 2", window_size=5, with_fields=[], without_fields=[], discard_duplicates=True, start_time=0, end_time=13, relative=True) save_streamframe_to_xiofile({"lab-labtop/irioKinect 2": self.f}, 'data/sf_to_xio.xio.gz') save_streamframe_to_xiofile({"lab-labtop/irioKinect 2": self.f, "lab-labtop/irioKinect": self.f2}, 'data/sf_to_xio2.xio.gz') self.rsn = open_streamframe_from_xiofile('data/fseeksmaller.xio.gz', "wrong/sensor/name") self.outtake_from_xio = XIOFile('data/sf_to_xio.xio.gz', indexing=True) self.outtake_from_xio_2 = XIOFile('data/sf_to_xio2.xio.gz', indexing=True) self.q = [ex for ex in quantize(self.outtake_from_xio.xio_quicklinegen\ (0, 13, True, True), "lab-labtop/irioKinect 2")][0]['soundAngle'] self.ivf = open_intervalframe_from_textgrid('data/r1_12_15with' 'Point.TextGrid', encoding='utf-8', asobjects = False, include_empty_intervals = False)['P'] self.cv = convert_pointtier_to_streamframe(self.ivf) self.pf = convert_streamframe_to_pointtier(self.f) self.outtake_from_pf = \ convert_streamframe_to_pointtier(self.f)['soundAngle'].ix[0]['time'] self.if_from_tg = open_intervalframe_from_textgrid('data/r1-20120704-' 'cam1-head-zm.TextGrid', encoding='utf-8', asobjects = False, include_empty_intervals = False) self.if_from_tg_tier = self.if_from_tg.values()[0] save_intervalframe_to_textgrid(self.if_from_tg, 'data/testif.TextGrid', encoding='utf-8') self.tg = tgt.read_textgrid('data/testif.TextGrid', encoding='utf-8', include_empty_intervals=False) self.ic1 = open_intervalframe_from_increco('data/test.inc_reco') self.ic2 = open_intervalframe_from_increco('data/test.inc_reco', lastonly=True) def test_stream_from_xio(self): self.failUnlessEqual(self.f.ix[10]['framenumber'], 45771.0) self.failUnlessEqual(self.f.index[1], 20) self.failUnlessEqual(self.fraw.index[0], 1341393414826) self.failUnlessEqual(self.ff.index[1], 10) #wrong sensor name should result in an empty DataFrame #being returned self.failUnlessEqual(len(self.rsn), 0) def test_stream_to_xio(self): self.failUnlessEqual(self.outtake_from_xio.xio_getline(5), '<sffloat value="-0.7323895" timestamp="10"' ' sensorName="lab-labtop/irioKinect 2/so' 'undAngle"/>\n') def test_many_stream_to_xio(self): self.failUnlessEqual(self.outtake_from_xio_2.xio_getline(6), '<sffloat value="46286.0" timestamp="14"' ' sensorName="lab-labtop/irioKinect/fram' 'enumber"/>\n') self.failUnlessEqual(self.outtake_from_xio_2.xio_getline(5), '<sffloat value="-0.7323895" timestamp="10"' ' sensorName="lab-labtop/irioKinect 2/so' 'undAngle"/>\n') def test_interval_from_textgrid(self): self.failUnlessEqual(self.if_from_tg_tier.ix[100]['end_time'], 1095.864) def test_interval_to_textgrid(self): self.failUnlessEqual(type(self.tg.tiers[0].intervals[10]), tgt.core.Interval) def test_quantize(self): self.failUnlessEqual(self.q, -0.7323895) def test_pointtier_to_stream(self): self.failUnlessEqual(str(self.cv['mark'].values[1]), 'B') def test_stream_to_pointframe(self): self.failUnlessEqual(self.outtake_from_pf, 10) def test_intervals_from_increco(self): self.failUnlessEqual(len(self.ic1.keys()), 106) self.failUnlessEqual(self.ic1.keys()[3:6], ['6.43', '3.78', '6.5']) self.failUnlessEqual(self.ic1['3.78'].ix[0]['text'], 'der') self.failUnlessEqual(len(self.ic2.keys()), 1) self.failUnlessEqual(self.ic2.keys()[0], '38.4') self.failUnlessEqual(self.ic2['38.4'].ix[0]['text'], 'ragt') def tearDown(self): os.system('rm data/sf_to_xio.xio.gz') os.system('rm data/sf_to_xio2.xio.gz')