def test_convert2DDict(self): """convert2DDict produces valid template input""" data = dict(a=dict(b=4, c=5)) vals, row_keys, col_keys = convert2DDict(data) self.assertEqual(set(row_keys), set(["a"])) b = DictArrayTemplate(row_keys, col_keys).wrap(vals) self.assertEqual(b.array.tolist(), [[4, 5]]) # row keys, then column self.assertEqual(b.template.names, [["a"], ["b", "c"]]) data = { "a": {"a": 0, "b": 1, "e": 0}, "b": {"a": 1, "b": 0, "e": 4}, "e": {"a": 0, "b": 4, "e": 0}, } vals, row_keys, col_keys = convert2DDict(data) b = DictArrayTemplate(row_keys, col_keys).wrap(vals) got = b.to_dict() self.assertEqual(got, data) self.assertEqual(b.template.names, [["a", "b", "e"], ["a", "b", "e"]]) data = dict(a=dict(b=4, c=5)) vals, row_keys, col_keys = convert2DDict(data, make_symmetric=True) self.assertEqual(row_keys, col_keys) self.assertEqual(vals, [[0, 4, 5], [4, 0, 0], [5, 0, 0]])
def test_to_dict_nested(self): """DictArray.to_dict() should convert nested DictArray instances to dict's too.""" a = numpy.identity(3, int) b = DictArrayTemplate("abc", "ABC") b = b.wrap(a) self.assertEqual(b.array.tolist(), [[1, 0, 0], [0, 1, 0], [0, 0, 1]]) c = DictArrayTemplate("de", "DE").wrap([[b, b], [b, b]]) self.assertTrue(isinstance(c.to_dict()["d"], dict))
def test_write(self): """exercising write method""" data = [[3, 7], [2, 8], [5, 5]] darr = DictArrayTemplate(list("ABC"), list("ab")).wrap(data) with TemporaryDirectory(dir=".") as dirname: outpath = os.path.join(dirname, "delme.tsv") darr.write(outpath) with open(outpath) as infile: contents = [l.strip().split() for l in infile] header = contents.pop(0) self.assertEqual(header, ["dim-1", "dim-2", "value"]) got = {(k1, k2): int(v) for k1, k2, v in contents} self.assertEqual(got, darr.to_dict(flatten=True))
def test_to_dict(self): """DictArray should convert 1D / 2D arrays with/without named row""" # 1D data, only 1D keys provided data = [0, 35, 45] keys = "a", "b", "c" darr = DictArrayTemplate(keys).wrap(data) self.assertEqual(darr.to_dict(), dict(zip(keys, data))) # 2D data, 2D keys, both string, provided data = [[0, 35, 45]] darr = DictArrayTemplate(["0"], keys).wrap(data) darr.to_dict() self.assertEqual(darr.to_dict(), {"0": {"a": 0, "b": 35, "c": 45}}) # 2D data, 2D keys, one int, one string, provided darr = DictArrayTemplate([1], keys).wrap(data) self.assertEqual(darr.to_dict(), {1: {"a": 0, "b": 35, "c": 45}}) darr = DictArrayTemplate([0], keys).wrap(data) self.assertEqual(darr.to_dict(), {0: {"a": 0, "b": 35, "c": 45}})