def test_order_3(self): a = DataDict() a["a"] = 10 a["d"] = 10 a["g"] = 10 a["c"] = 10 self.assertEqual(a.keys(), ["a", "d", "g", "c"])
def parse_data(self, datastream): vardata = DataDict() while True: for lineparser in self.parse_stream: linedata = datastream.pop(0).split() for func, varname in lineparser: vardata.setdefault(varname, []).append(func(linedata)) if not datastream: break return vardata
def test_view_1(self): a = DataDict(a=VA([11, 17]), b=VA([7, 5, 23])) v = a.view() self.assertNotEqual(id(a.a), id(v.a)) self.assertNotEqual(id(a.b), id(v.b)) self.assertAllclose(a.a, v.a) self.assertAllclose(a.b, v.b) v.a[0] = 9 v.b[0] = 90 self.assertAllclose(v.a, VA([9, 17])) self.assertAllclose(v.b, VA([90, 5, 23])) self.assertAllclose(a.a, v.a) self.assertAllclose(a.b, v.b)
def merge_blocks_to_association_list(blocks): data = DataDict() coords = [] # Create DataDict with one entry per variable in the blocks # For each variable add a dictionary that is indexed by the DimPartials for b in blocks: coord = [] for name, dim in b.ivardata.items(): if isinstance(dim, DimPartial): coord.append((name, array(dim.data)[0])) coord.sort() coord = tuple(coord) coords.append(coord) for v in b.vardata.keys(): data.setdefault(v, []).append((coord, b.vardata[v])) return data
def parse_blocks(self, stream): for comments, header, data in stream: db = DataBlock() db.comments = Comments(comments) header = header[0].strip().split("\t") Nhead = len(header) #data = np.array(data) if Nhead != len(data[0]): msg = "Different number of header variables "\ "from data columns" raise SPDataIOError(msg) output = DataDict() for varname, column in zip(header, zip(*data)): output.setdefault(varname, []).append(column) for varname in output: data = output[varname] if len(data) > 1: output[varname] = np.array(output[varname], order="F").T else: output[varname] = np.array(output[varname][0]) freq = DimSweep(header[0], output[header[0]]) db[header[0]] = freq for x in output.keys()[1:]: if output[x].ndim == 1: db[x] = hfarray(output[x], dims=(freq,)) else: repdim = DimRep("rep", output[x].shape[1]) db[x] = hfarray(output[x], dims=(freq, repdim)).squeeze() remove = [] for vname in db.comments.property: if vname[:1] == "@": unit = db.comments.property[vname].unit data = [float(db.comments.property[vname])] db[vname[1:]] = DimPartial(vname[1:], data=data, unit=unit) remove.append(vname) for v in remove: del db.comments.property[v] db.comments.fullcomments = [com for com in db.comments.fullcomments if not com.startswith("@")] yield db
def parse_blocks(self, stream): for comments, header, data in stream: db = DataBlock() db.comments = Comments(comments) header = header[0].strip().split("\t") Nhead = len(header) #data = np.array(data) if Nhead != len(data[0]): msg = "Different number of header variables "\ "from data columns" raise SPDataIOError(msg) output = DataDict() for varname, column in zip(header, zip(*data)): output.setdefault(varname, []).append(column) for varname in output: data = output[varname] if len(data) > 1: output[varname] = np.array(output[varname], order="F").T else: output[varname] = np.array(output[varname][0]) freq = DimSweep(header[0], output[header[0]]) db[header[0]] = freq for x in output.keys()[1:]: if output[x].ndim == 1: db[x] = hfarray(output[x], dims=(freq, )) else: repdim = DimRep("rep", output[x].shape[1]) db[x] = hfarray(output[x], dims=(freq, repdim)).squeeze() remove = [] for vname in db.comments.property: if vname[:1] == "@": unit = db.comments.property[vname].unit data = [float(db.comments.property[vname])] db[vname[1:]] = DimPartial(vname[1:], data=data, unit=unit) remove.append(vname) for v in remove: del db.comments.property[v] db.comments.fullcomments = [ com for com in db.comments.fullcomments if not com.startswith("@") ] yield db
def setUp(self): self.a = DataDict() self.b = DataDict(a=VA(1), c=VA(3), b=VA(2), d=VA(4)) self.c = DataDict(e=VA(12), a=VA(4))
class Test_DataDict(TestCase): def setUp(self): self.a = DataDict() self.b = DataDict(a=VA(1), c=VA(3), b=VA(2), d=VA(4)) self.c = DataDict(e=VA(12), a=VA(4)) def _outputformat(self, var, finaloutformat): v = getattr(self, var) v.outputformat = "%.0f" for x in v.values(): self.assertEqual(x.outputformat, "%.0f") self.assertEqual(v.outputformat, finaloutformat) def test_outputformat_1(self): self._outputformat("a", "%.16e") def test_outputformat_2(self): self._outputformat("b", "%.0f") def test_outputformat_3(self): self._outputformat("c", "%.0f") def test_outputformat_4(self): self.a["q"] = 10 self.assertEqual(self.a.outputformat, "%.16e") def test_order_1(self): self.assertEqual(self.a.order, []) self.assertEqual(self.b.order, []) self.assertEqual(self.c.order, []) def test_order_2(self): self.b.order = ["a", "c", "b"] self.c.order = ["e"] self.assertEqual(self.a.keys(), []) self.assertEqual(self.b.keys(), ["a", "c", "b", "d"]) self.assertEqual(self.c.keys(), ["e", "a"]) def test_order_3(self): a = DataDict() a["a"] = 10 a["d"] = 10 a["g"] = 10 a["c"] = 10 self.assertEqual(a.keys(), ["a", "d", "g", "c"]) def test_attr_getter_1(self): self.assertRaises(AttributeError, lambda: self.a.a) def test_attr_getter_2(self): self.assertRaises(AttributeError, lambda: self.b.e) self.assertEqual(self.b.a, 1) self.assertEqual(self.b.b, 2) self.assertEqual(self.b.c, 3) self.assertEqual(self.b.d, 4) def test_attr_getter_3(self): self.assertRaises(AttributeError, lambda: self.c.b) self.assertEqual(self.c.a, 4) self.assertEqual(self.c.e, 12) def test_attr_del_1(self): self.b.order = ["a", "c", "b"] del self.b.a self.assertDictEqual(self.b, dict(c=VA(3), b=VA(2), d=VA(4))) self.assertEqual(self.b.keys(), ["c", "b", "d"]) del self.b.c self.assertDictEqual(self.b, dict(b=VA(2), d=VA(4))) self.assertEqual(self.b.keys(), ["b", "d"]) del self.b.d self.assertDictEqual(self.b, dict(b=VA(2), )) self.assertEqual(self.b.keys(), ["b"]) del self.b.b self.assertDictEqual(self.b, dict()) self.assertEqual(self.b.keys(), []) def test_delitem_1(self): del self.a["k"] self.assertDictEqual(self.a, dict()) def test_delitem_2(self): c = self.c c.order = ["e"] del c["k"] self.assertEqual(c.keys(), ["e", "a"]) self.assertDictEqual(c, dict(e=VA(12), a=VA(4))) del c["e"] self.assertEqual(c.keys(), ["a"]) self.assertDictEqual(c, dict(a=VA(4))) del c["a"] self.assertEqual(c.keys(), []) self.assertDictEqual(c, dict()) def test_set_attr_1(self): a = self.a a.keys a.order = [] a.a = VA(10) self.assertEqual(a.keys(), ["a"]) self.assertDictEqual(a, dict(a=VA(10))) a.v = VA(22) self.assertEqual(a.keys(), ["a", "v"]) self.assertDictEqual(a, dict(a=VA(10), v=VA(22))) a.a = VA(12) self.assertEqual(a.keys(), ["a", "v"]) self.assertDictEqual(a, dict(a=VA(12), v=VA(22))) def test_set_default_1(self): a = self.a p = a.setdefault("a", VA(10)) self.assertEqual(p, VA(10)) self.assertEqual(a.keys(), ["a"]) self.assertDictEqual(a, dict(a=VA(10))) p = a.setdefault("v", VA(22)) self.assertEqual(p, VA(22)) self.assertEqual(a.keys(), ["a", "v"]) self.assertDictEqual(a, dict(a=VA(10), v=VA(22))) p = a.setdefault("a", VA(22)) self.assertEqual(p, VA(10)) self.assertEqual(a.keys(), ["a", "v"]) self.assertDictEqual(a, dict(a=VA(10), v=VA(22))) def test_rename_1(self): b = self.b b.order = ["a", "c", "b"] b.rename("a", "A") self.assertDictEqual(b, dict(A=VA(1), c=VA(3), b=VA(2), d=VA(4))) self.assertEqual(b.keys(), ["A", "c", "b", "d"]) def test_view_1(self): a = DataDict(a=VA([11, 17]), b=VA([7, 5, 23])) v = a.view() self.assertNotEqual(id(a.a), id(v.a)) self.assertNotEqual(id(a.b), id(v.b)) self.assertAllclose(a.a, v.a) self.assertAllclose(a.b, v.b) v.a[0] = 9 v.b[0] = 90 self.assertAllclose(v.a, VA([9, 17])) self.assertAllclose(v.b, VA([90, 5, 23])) self.assertAllclose(a.a, v.a) self.assertAllclose(a.b, v.b) def test_copy_1(self): a = DataDict(a=VA([11, 17]), b=VA([7, 5, 23])) v = a.copy() self.assertEqual(a.order, v.order) self.assertNotEqual(id(a.a), id(v.a)) self.assertNotEqual(id(a.b), id(v.b)) self.assertAllclose(a.a, v.a) self.assertAllclose(a.b, v.b) v.a[0] = 9 v.b[0] = 90 self.assertAllclose(v.a, VA([9, 17])) self.assertAllclose(v.b, VA([90, 5, 23])) self.assertAllclose(a.a, VA([11, 17])) self.assertAllclose(a.b, VA([7, 5, 23])) def test_items_1(self): c = self.c c.order = ["e"] self.assertEqual(c.items(), [("e", VA(12)), ("a", VA(4))]) def test_iteritems_1(self): c = self.c c.order = ["e"] self.assertEqual(list(c.iteritems()), [("e", VA(12)), ("a", VA(4))]) def test_values_1(self): c = self.c c.order = ["e"] self.assertEqual(c.values(), [VA(12), VA(4)])