import warnings import unittest import numpy from tables import * from tables.tests import common from tables.tests import common from tables.tests.common import ( allequal, numeric_imported) if numeric_imported: import Numeric # To delete the internal attributes automagically unittest.TestCase.tearDown = common.cleanup # Check read Tables from pytables version 0.8 class BackCompatTablesTestCase(common.PyTablesTestCase): #---------------------------------------- def test01_readTable(self): """Checking backward compatibility of old formats of tables""" if common.verbose: print '\n', '-=' * 30 print "Running %s.test01_readTable..." % self.__class__.__name__ # Create an instance of an HDF5 Table warnings.filterwarnings("ignore", category=UserWarning) self.fileh = openFile(self._testFilename(self.file), "r") warnings.filterwarnings("default", category=UserWarning) table = self.fileh.getNode("/tuple0") # Read the 100 records result = [ rec['var2'] for rec in table] if common.verbose: print "Nrows in", table._v_pathname, ":", table.nrows print "Last record in table ==>", rec print "Total selected records in table ==> ", len(result) assert len(result) == 100 self.fileh.close() class Table2_1LZO(BackCompatTablesTestCase): file = "Table2_1_lzo_nrv2e_shuffle.h5" # pytables 0.8.x versions and after class Tables_LZO1(BackCompatTablesTestCase): file = "Tables_lzo1.h5" # files compressed with LZO1 class Tables_LZO1_shuffle(BackCompatTablesTestCase): file = "Tables_lzo1_shuffle.h5" # files compressed with LZO1 and shuffle class Tables_LZO2(BackCompatTablesTestCase): file = "Tables_lzo2.h5" # files compressed with LZO2 class Tables_LZO2_shuffle(BackCompatTablesTestCase): file = "Tables_lzo2_shuffle.h5" # files compressed with LZO2 and shuffle # Check read attributes from PyTables >= 1.0 properly class BackCompatAttrsTestCase(common.PyTablesTestCase): file = "zerodim-attrs-%s.h5" def test01_readAttr(self): """Checking backward compatibility of old formats for attributes""" if common.verbose: print '\n', '-=' * 30 print "Running %s.test01_readAttr..." % self.__class__.__name__ # Read old formats filename = self._testFilename(self.file) self.fileh = openFile(filename % self.format, "r") a = self.fileh.getNode("/a") scalar = numpy.array(1, dtype="int32") vector = numpy.array([1], dtype="int32") if self.format == "1.3": assert allequal(a.attrs.arrdim1, vector) assert allequal(a.attrs.arrscalar, scalar) assert a.attrs.pythonscalar == 1 elif self.format == "1.4": assert allequal(a.attrs.arrdim1, vector) assert allequal(a.attrs.arrscalar, scalar) assert allequal(a.attrs.pythonscalar, scalar) self.fileh.close() class Attrs_1_3(BackCompatAttrsTestCase): format = "1.3" # pytables 1.0.x versions and earlier class Attrs_1_4(BackCompatAttrsTestCase): format = "1.4" # pytables 1.1.x versions and later class VLArrayTestCase(common.PyTablesTestCase): def test01_backCompat(self): """Checking backward compatibility with old flavors of VLArray""" # Open a PYTABLES_FORMAT_VERSION=1.6 file filename = self._testFilename("flavored_vlarrays-format1.6.h5") fileh = openFile(filename, "r") # Check that we can read the contents without problems (nor warnings!) vlarray1 = fileh.root.vlarray1 assert vlarray1.flavor == "numeric" if numeric_imported: assert allequal(vlarray1[1], Numeric.array([5, 6, 7], typecode='i'), "numeric") vlarray2 = fileh.root.vlarray2 assert vlarray2.flavor == "python" assert vlarray2[1] == ['5', '6', '77'] fileh.close() # Make sure that 1.x files with TimeXX types continue to be readable # and that its byteorder is correctly retrieved. class TimeTestCase(common.PyTablesTestCase): def setUp(self): # Open a PYTABLES_FORMAT_VERSION=1.x file filename = self._testFilename("time-table-vlarray-1_x.h5") self.fileh = openFile(filename, "r") def tearDown(self): self.fileh.close() def test00_table(self): """Checking backward compatibility with old TimeXX types (tables).""" # Check that we can read the contents without problems (nor warnings!) table = self.fileh.root.table self.assert_(table.byteorder == "little") def test01_vlarray(self): """Checking backward compatibility with old TimeXX types (vlarrays).""" # Check that we can read the contents without problems (nor warnings!) vlarray4 = self.fileh.root.vlarray4 self.assert_(vlarray4.byteorder == "little") vlarray8 = self.fileh.root.vlarray4 self.assert_(vlarray8.byteorder == "little") #---------------------------------------------------------------------- def suite(): theSuite = unittest.TestSuite() niter = 1 lzo_avail = whichLibVersion("lzo") is not None for n in range(niter): theSuite.addTest(unittest.makeSuite(VLArrayTestCase)) theSuite.addTest(unittest.makeSuite(TimeTestCase)) if lzo_avail: theSuite.addTest(unittest.makeSuite(Table2_1LZO)) theSuite.addTest(unittest.makeSuite(Tables_LZO1)) theSuite.addTest(unittest.makeSuite(Tables_LZO1_shuffle)) theSuite.addTest(unittest.makeSuite(Tables_LZO2)) theSuite.addTest(unittest.makeSuite(Tables_LZO2_shuffle)) return theSuite if __name__ == '__main__': unittest.main( defaultTest='suite' )