def test_last_novalue(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) fname = "test.h5" nxFile = None eFile = None # gname = "testGroup" # gtype = "NXentry" # fdname = "testField" # fdtype = "int64" # file handle nxFile = FileWriter.create_file(fname, overwrite=True).root() # element file objects eFile = EFile([], None, nxFile) el = Element(self._tfname, self._fattrs2, eFile) fi = EField(self._fattrs2, el) el2 = EDimensions(self._fattrs4, fi) el3 = EDim(self._attrs3, el2) self.assertEqual(fi.tagName, "field") self.assertEqual(fi.content, []) self.assertEqual(fi._tagAttrs, self._fattrs2) self.assertEqual(fi.doc, "") self.assertEqual(fi._lastObject(), None) self.assertEqual(type(el2.last), EField) self.assertEqual(el2.last.rank, "1") self.assertEqual(el3._beforeLast().lengths, {}) self.assertEqual(fi.lengths, {}) self.assertEqual(fi.rank, "1") nxFile.close() os.remove(fname)
def test_store_default(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) self._fname = '%s/%s%s.h5' % (os.getcwd(), self.__class__.__name__, fun) FileWriter.writer = H5CppWriter self._nxFile = FileWriter.create_file(self._fname, overwrite=True).root() eFile = EFile({}, None, self._nxFile) el = EGroup(self._gattrs, eFile) self.assertTrue(isinstance(el, Element)) self.assertTrue(isinstance(el, FElement)) self.assertTrue(isinstance(el, FElementWithAttr)) self.assertEqual(el.tagName, "group") self.assertEqual(el.content, []) el.store() self.assertEqual(el.h5Object.name, self._gattrs["name"]) self.assertEqual(len(el.h5Object.attributes), 1) self.assertEqual(el.h5Object.attributes["NX_class"][...], self._gattrs["type"]) # self.myAssertRaise(ValueError, el.store) self._nxFile.close() os.remove(self._fname)
def test_fetchName_notype(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) self._fname = '%s/%s%s.h5' % (os.getcwd(), self.__class__.__name__, fun) FileWriter.writer = H5CppWriter self._nxFile = FileWriter.create_file(self._fname, overwrite=True).root() eFile = EFile({}, None, self._nxFile) gattrs = {"type": "NXentry"} el = EGroup(gattrs, eFile) self.assertTrue(isinstance(el, Element)) self.assertTrue(isinstance(el, FElement)) self.assertTrue(isinstance(el, FElementWithAttr)) self.assertEqual(el.tagName, "group") self.assertEqual(el.content, []) self.assertEqual(type(el.h5Object), H5CppWriter.H5CppGroup) self.assertEqual(el.h5Object.name, gattrs["type"][2:]) self.assertEqual(len(el.h5Object.attributes), 1) self.assertEqual(el.h5Object.attributes["NX_class"][...], gattrs["type"]) self.assertEqual(el.h5Object.attributes["NX_class"].dtype, "string") self.assertEqual(el.h5Object.attributes["NX_class"].shape, ()) # gNames = {} el._tagAttrs.pop("type") self._nxFile.close() os.remove(self._fname)
def test_store_1d_single(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) self._fname = '%s/%s%s.h5' % (os.getcwd(), self.__class__.__name__, fun) FileWriter.writer = H5CppWriter self._nxFile = FileWriter.create_file(self._fname, overwrite=True).root() eFile = EFile({}, None, self._nxFile) el = EGroup(self._gattrs, eFile) self.assertEqual(el.tagAttributes, {}) attrs = { # "string":["My string","NX_CHAR", "string" , (1,)], # "datetime":["12:34:34","NX_DATE_TIME", "string", (1,) ], # "iso8601":["12:34:34","ISO8601", "string", (1,)], "int": [-123, "NX_INT", "int64", (1, )], "int8": [12, "NX_INT8", "int8", (1, )], "int16": [-123, "NX_INT16", "int16", (1, )], "int32": [12345, "NX_INT32", "int32", (1, )], "int64": [-12345, "NX_INT64", "int64", (1, )], "uint": [123, "NX_UINT", "uint64", (1, )], "uint8": [12, "NX_UINT8", "uint8", (1, )], "uint16": [123, "NX_UINT16", "uint16", (1, )], "uint32": [12345, "NX_UINT32", "uint32", (1, )], "uint64": [12345, "NX_UINT64", "uint64", (1, )], "float": [-12.345, "NX_FLOAT", "float64", (1, ), 1.e-14], "number": [-12.345e+2, "NX_NUMBER", "float64", (1, ), 1.e-14], "float32": [-12.345e-1, "NX_FLOAT32", "float32", (1, ), 1.e-5], "float64": [-12.345, "NX_FLOAT64", "float64", (1, ), 1.e-14], "bool": [True, "NX_BOOLEAN", "bool", (1, )], "bool2": ["FaLse", "NX_BOOLEAN", "bool", (1, )], "bool3": ["false", "NX_BOOLEAN", "bool", (1, )], "bool4": ["true", "NX_BOOLEAN", "bool", (1, )] } for nm in attrs.keys(): if attrs[nm][2] == 'string': "writing multi-dimensional string is not supported by pninx" continue el.tagAttributes[nm] = (attrs[nm][1], str(attrs[nm][0]), attrs[nm][3]) el.store() at = el.h5Object.attributes[nm] self.assertEqual(at.dtype, attrs[nm][2]) if attrs[nm][2] == "bool": self.assertEqual(Converters.toBool(str(attrs[nm][0])), at[...]) elif len(attrs[nm]) > 4: self.assertTrue(abs(at[...] - attrs[nm][0]) <= attrs[nm][4]) else: if isinstance(at[...], numpy.ndarray): self.assertEqual( at[...], numpy.array(attrs[nm][0], dtype=attrs[nm][2])) else: self.assertEqual(at[...], attrs[nm][0]) self._nxFile.close() os.remove(self._fname)
def test_default_constructor_thesame_name(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) self._fname = '%s/%s%s.h5' % (os.getcwd(), self.__class__.__name__, fun) FileWriter.writer = H5CppWriter self._nxFile = FileWriter.create_file(self._fname, overwrite=True).root() eFile = EFile({}, None, self._nxFile) el = EGroup(self._gattrs, eFile) self.assertTrue(isinstance(el, Element)) self.assertTrue(isinstance(el, FElement)) self.assertTrue(isinstance(el, FElementWithAttr)) self.assertEqual(el.tagName, "group") self.assertEqual(el.content, []) self.assertEqual(type(el.h5Object), H5CppWriter.H5CppGroup) self.assertEqual(el.h5Object.name, self._gattrs["name"]) self.assertEqual(len(el.h5Object.attributes), 1) self.assertEqual(el.h5Object.attributes["NX_class"][...], self._gattrs["type"]) self.assertEqual(el.h5Object.attributes["NX_class"].dtype, "string") self.assertEqual(el.h5Object.attributes["NX_class"].shape, ()) self.assertEqual(el.h5Object.attributes["NX_class"].shape, ()) self.myAssertRaise(XMLSettingSyntaxError, EGroup, self._gattrs, eFile) self._nxFile.close() os.remove(self._fname)
def test_lastObject_hp5y(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) self._fname = '%s/%s%s.h5' % (os.getcwd(), self.__class__.__name__, fun) FileWriter.writer = H5CppWriter fname = self._fname nxFile = None eFile = None gname = "testGroup" gtype = "NXentry" fdname = "testField" fdtype = "int64" # file handle nxFile = FileWriter.create_file(fname, overwrite=True).root() # element file objects eFile = EFile([], None, nxFile) group = nxFile.create_group(gname, gtype) group.create_field(fdname, fdtype) el = Element(self._tfname, self._fattrs, eFile) el2 = Element(self._tfname, self._fattrs, el) self.assertEqual(el.tagName, self._tfname) self.assertEqual(el.content, []) self.assertEqual(el._tagAttrs, self._fattrs) self.assertEqual(el.doc, "") self.assertEqual(el._lastObject(), nxFile) self.assertEqual(el2._lastObject(), None) nxFile.close() os.remove(fname)
def test_last_h5cpp(self): print("Run: %s.test_last() " % self.__class__.__name__) fname = "test.h5" nxFile = None eFile = None # gname = "testGroup" # gtype = "NXentry" # fdname = "testField" # fdtype = "int64" # file handle FileWriter.writer = H5CppWriter nxFile = FileWriter.create_file(fname, overwrite=True).root() # element file objects eFile = EFile([], None, nxFile) el = Element(self._tfname, self._fattrs2, eFile) fi = EField(self._fattrs3, el) el2 = EDimensions(self._fattrs3, fi) self.assertEqual(fi.tagName, "field") self.assertEqual(fi.content, []) self.assertEqual(fi._tagAttrs, self._fattrs3) self.assertEqual(fi.doc, "") self.assertEqual(fi._lastObject(), None) self.assertEqual(type(el2.last), EField) self.assertEqual(el2.last.rank, "2") nxFile.close() os.remove(fname)
def test_store_last_index2(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) fname = "test.h5" nxFile = None eFile = None # gname = "testGroup" # gtype = "NXentry" # fdname = "testField" # fdtype = "int64" # file handle nxFile = FileWriter.create_file(fname, overwrite=True).root() # element file objects eFile = EFile([], None, nxFile) el = Element(self._tfname, self._fattrs2, eFile) fi = EField(self._fattrs2, el) el2 = EDimensions(self._fattrs3, fi) el3 = EDim(self._attrs5, el2) ds = TstDataSource() ds.value0d = self.__rnd.randint(1, 10) el3.source = ds el4 = EDim(self._attrs4, el2) ds2 = TstDataSource() ds2.value0d = self.__rnd.randint(1, 10) el4.source = ds2 el3.store() el4.store() self.assertEqual(fi.tagName, "field") self.assertEqual(fi.content, []) self.assertEqual(fi._tagAttrs, self._fattrs2) self.assertEqual(fi.doc, "") self.assertEqual(fi._lastObject(), None) self.assertEqual(type(el2.last), EField) self.assertEqual(el2.last.rank, "2") self.assertEqual(el3._beforeLast().lengths, { '1': '%s' % ds.value0d, '2': '%s' % ds2.value0d }) self.assertEqual(fi.lengths, { '1': '%s' % ds.value0d, '2': '%s' % ds2.value0d }) self.assertEqual(fi.rank, "2") nxFile.close() os.remove(fname)
def test_constructor_aTn(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) self._fname = '%s/%s%s.h5' % (os.getcwd(), self.__class__.__name__, fun) FileWriter.writer = H5CppWriter self._nxFile = FileWriter.create_file(self._fname, overwrite=True).root() eFile = EFile({}, None, self._nxFile) gattrs = {"type": "NXentry", "name": "shortname"} # map of tag attribute types maTn = { "signal": 1, "axis": 2, "primary": 3, "offset": 4, "stride": 6, "file_time": "12:34", "file_update_time": "12:45", "restricts": 12, "ignoreExtraGroups": True, "ignoreExtraFields": False, "ignoreExtraAttributes": True, "minOccus": 1, "maxOccus": 2 } gattrs = dict(gattrs, **(maTn)) el = EGroup(gattrs, eFile) self.assertTrue(isinstance(el, Element)) self.assertTrue(isinstance(el, FElement)) self.assertTrue(isinstance(el, FElementWithAttr)) self.assertEqual(el.tagName, "group") self.assertEqual(el.content, []) self.assertEqual(type(el.h5Object), H5CppWriter.H5CppGroup) self.assertEqual(el.h5Object.name, gattrs["name"]) self.assertEqual(len(el.h5Object.attributes), 14) self.assertEqual(el.h5Object.attributes["NX_class"][...], gattrs["type"]) self.assertEqual(el.h5Object.attributes["NX_class"].dtype, "string") self.assertEqual(el.h5Object.attributes["NX_class"].shape, ()) for k in maTn.keys(): self.assertEqual(el.h5Object.attributes[k][...], gattrs[k]) self.assertEqual(el.h5Object.attributes[k].dtype, NTP.nTnp[NTP.aTn[k]]) self.assertEqual(el.h5Object.attributes[k].shape, ()) self._nxFile.close() os.remove(self._fname)
def test_default_constructor(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) self._fname = '%s/%s%s.h5' % (os.getcwd(), self.__class__.__name__, fun) el = EFile({}, None, None) self.assertTrue(isinstance(el, Element)) self.assertTrue(isinstance(el, FElement)) self.assertEqual(el.tagName, 'file') self.assertEqual(el.content, []) self.assertEqual(el.doc, "") self.assertEqual(el.source, None) self.assertEqual(el.error, None) self.assertEqual(el.h5Object, None) self.assertEqual(el.last, None)
def test_constructor_notype(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) self._fname = '%s/%s%s.h5' % (os.getcwd(), self.__class__.__name__, fun) FileWriter.writer = H5CppWriter self._nxFile = FileWriter.create_file(self._fname, overwrite=True).root() eFile = EFile({}, None, self._nxFile) gattrs = {"short_name": "shortname"} self.myAssertRaise(XMLSettingSyntaxError, EGroup, gattrs, eFile) self._nxFile.close() os.remove(self._fname)
def test_constructor_aTnv(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) self._fname = '%s/%s%s.h5' % (os.getcwd(), self.__class__.__name__, fun) FileWriter.writer = H5CppWriter self._nxFile = FileWriter.create_file(self._fname, overwrite=True).root() eFile = EFile({}, None, self._nxFile) gattrs = {"type": "NXentry", "name": "shortname"} # map of tag attribute types maTnv = {"vector": "1 2 3 4 5"} raTnv = {"vector": [1, 2, 3, 4, 5]} gattrs = dict(gattrs, **(maTnv)) rattrs = dict(gattrs) rattrs = dict(rattrs, **(raTnv)) error = 1.e-14 el = EGroup(gattrs, eFile) self.assertTrue(isinstance(el, Element)) self.assertTrue(isinstance(el, FElement)) self.assertTrue(isinstance(el, FElementWithAttr)) self.assertEqual(el.tagName, "group") self.assertEqual(el.content, []) self.assertEqual(type(el.h5Object), H5CppWriter.H5CppGroup) self.assertEqual(el.h5Object.name, gattrs["name"]) self.assertEqual(len(el.h5Object.attributes), 2) self.assertEqual(el.h5Object.attributes["NX_class"][...], gattrs["type"]) self.assertEqual(el.h5Object.attributes["NX_class"].dtype, "string") self.assertEqual(el.h5Object.attributes["NX_class"].shape, ()) for k in raTnv.keys(): for i in range(len(rattrs[k])): self.assertTrue( abs(el.h5Object.attributes[k][i] - rattrs[k][i]) <= error) self.assertEqual(el.h5Object.attributes[k].dtype, NTP.nTnp[NTP.aTnv[k]]) self.assertEqual(el.h5Object.attributes[k].shape, (len(rattrs[k]), )) self._nxFile.close() os.remove(self._fname)
def test_constructor_nx(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) self._fname = '%s/%s%s.h5' % (os.getcwd(), self.__class__.__name__, fun) self._nxFile = FileWriter.create_file(self._fname, overwrite=True).root() el = EFile({}, None, self._nxFile) self.assertTrue(isinstance(el, Element)) self.assertTrue(isinstance(el, FElement)) self.assertEqual(el.tagName, 'file') self.assertEqual(el.content, []) self.assertEqual(el.doc, "") self.assertEqual(el.source, None) self.assertEqual(el.error, None) self.assertEqual(el._tagAttrs, {}) self.assertEqual(type(el.h5Object), H5PYWriter.H5PYGroup) self._nxFile.close() os.remove(self._fname)
def test_store_2d_single(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) self._fname = '%s/%s%s.h5' % (os.getcwd(), self.__class__.__name__, fun) FileWriter.writer = H5CppWriter self._nxFile = FileWriter.create_file(self._fname, overwrite=True).root() eFile = EFile({}, None, self._nxFile) el = EGroup(self._gattrs, eFile) self.assertEqual(el.tagAttributes, {}) attrs = { # "string":["My string","NX_CHAR", "string" , (1,)], # "datetime":["12:34:34","NX_DATE_TIME", "string", (1,) ], # "iso8601":["12:34:34","ISO8601", "string", (1,)], "int": [-123, "NX_INT", "int64", (1, )], "int8": [12, "NX_INT8", "int8", (1, )], "int16": [-123, "NX_INT16", "int16", (1, )], "int32": [12345, "NX_INT32", "int32", (1, )], "int64": [-12345, "NX_INT64", "int64", (1, )], "uint": [123, "NX_UINT", "uint64", (1, )], "uint8": [12, "NX_UINT8", "uint8", (1, )], "uint16": [123, "NX_UINT16", "uint16", (1, )], "uint32": [12345, "NX_UINT32", "uint32", (1, )], "uint64": [12345, "NX_UINT64", "uint64", (1, )], "float": [-12.345, "NX_FLOAT", "float64", (1, ), 1.e-14], "number": [-12.345e+2, "NX_NUMBER", "float64", (1, ), 1.e-14], "float32": [-12.345e-1, "NX_FLOAT32", "float32", (1, ), 1.e-5], "float64": [-12.345, "NX_FLOAT64", "float64", (1, ), 1.e-14], "bool": [True, "NX_BOOLEAN", "bool", (1, )], "bool2": ["FaLse", "NX_BOOLEAN", "bool", (1, )], "bool3": ["false", "NX_BOOLEAN", "bool", (1, )], "bool4": ["true", "NX_BOOLEAN", "bool", (1, )] } for nm in attrs.keys(): if attrs[nm][2] != "bool": mlen = [ self.__rnd.randint(1, 1), self.__rnd.randint(1, 1), (2 << numpy.dtype(attrs[nm][2]).itemsize) ] # print "SH",nm,mlen[2] attrs[nm][0] = [[ attrs[nm][0] * self.__rnd.randint(0, 3) for r in range(mlen[1]) ] for c in range(mlen[0])] else: mlen = [self.__rnd.randint(1, 1), self.__rnd.randint(1, 1)] if nm == 'bool': attrs[nm][0] = [[ bool(self.__rnd.randint(0, 1)) for c in range(mlen[1]) ] for r in range(mlen[0])] else: attrs[nm][0] = [[ ("True" if self.__rnd.randint(0, 1) else "False") for c in range(mlen[1]) ] for r in range(mlen[0])] attrs[nm][3] = (mlen[0], mlen[1]) for nm in attrs.keys(): el.tagAttributes[nm] = (attrs[nm][1], "".join([ "".join([str(it) + " " for it in sub]) + "\n" for sub in attrs[nm][0] ]), attrs[nm][3]) el.store() at = el.h5Object.attributes[nm] self.assertEqual(at.dtype, attrs[nm][2]) if attrs[nm][2] == "bool": for i in range(len(attrs[nm][0])): for j in range(len(attrs[nm][0][i])): self.assertEqual( Converters.toBool(str(attrs[nm][0][i][j])), at[...]) pass elif len(attrs[nm]) > 4: for i in range(len(attrs[nm][0])): for j in range(len(attrs[nm][0][i])): self.assertTrue( abs(at[...] - attrs[nm][0][i][j]) <= attrs[nm][4]) else: for i in range(len(attrs[nm][0])): for j in range(len(attrs[nm][0][i])): self.assertEqual(at[...], attrs[nm][0][i][j]) self._nxFile.close() os.remove(self._fname)