示例#1
0
class TestVisit(TestCase):
    """
        Feature: The .visit and .visititems methods allow iterative access to
        group and subgroup members
    """
    def setUp(self):
        self.f = File(self.mktemp(), 'w')
        self.groups = [
            'grp1', 'grp1/sg1', 'grp1/sg2', 'grp2', 'grp2/sg1', 'grp2/sg1/ssg1'
        ]
        for x in self.groups:
            self.f.create_group(x)

    def tearDown(self):
        self.f.close()

    def test_visit(self):
        """ All subgroups are visited """
        l = []
        self.f.visit(l.append)
        self.assertSameElements(l, self.groups)

    def test_visititems(self):
        """ All subgroups and contents are visited """
        l = []
        comp = [(x, self.f[x]) for x in self.groups]
        self.f.visititems(lambda x, y: l.append((x, y)))
        self.assertSameElements(comp, l)

    def test_bailout(self):
        """ Returning a non-None value immediately aborts iteration """
        x = self.f.visit(lambda x: x)
        self.assertEqual(x, self.groups[0])
        x = self.f.visititems(lambda x, y: (x, y))
        self.assertEqual(x, (self.groups[0], self.f[self.groups[0]]))
示例#2
0
 def test_visit(self):
     fname = self.mktemp()
     fid = File(fname, 'w')
     fid.create_dataset('foo', (100, ), dtype='uint8')
     with pytest.raises(TestException, match='throwing exception'):
         fid.visititems(throwing)
     fid.close()
示例#3
0
def get_dataset(h5file: File, path: DatasetPath) -> Dataset:
    res = None
    if isinstance(path, DatasetPathContains):
        res = h5file.visititems(partial(_v_item, path.path))
    elif isinstance(path, DatasetPathWithAttribute):
        res = h5file.visititems(partial(_v_attrs, path.attribute, path.value))
    return res
示例#4
0
文件: soleil.py 项目: vallsv/pyFAI
def get_dataset(h5file: File, path: DatasetPath) -> Dataset:
    res = None
    if isinstance(path, DatasetPathContains):
        res = h5file.visititems(partial(_v_item, path.path))
    elif isinstance(path, DatasetPathWithAttribute):
        res = h5file.visititems(partial(_v_attrs,
                                        path.attribute, path.value))
    return res
示例#5
0
def hdf5_keys(dataset: h5py.File):
    keys = []

    def visitor(key, value):
        if isinstance(value, h5py.Dataset):
            keys.append(key)

    dataset.visititems(visitor)
    return keys
def find_virtual_datasets(file: h5py.File):
    """Return a list of 2-tuples: (path in file, dataset)"""
    res = []

    def visit(path, obj):
        if isinstance(obj, h5py.Dataset) and obj.is_virtual:
            res.append((path, obj))

    file.visititems(visit)
    return sorted(res)
示例#7
0
def axf2dict(axf: h5py.File) -> Dict:
    megaobject = NestedDict()

    def itemsvisitor(k, v):
        print(k, type(v), v)
        keys = k.split("/")
        if type(v) is Dataset:
            d: Dataset = v
            print(d.shape)
            if d.shape == ():
                print(d.dtype, d.value)
                if str(d.dtype).startswith('|S'):
                    megaobject[keys] = str(d.value)
                elif d.dtype == np.float32:
                    megaobject[keys] = float(d.value)
                elif d.dtype == np.int32:
                    megaobject[keys] = int(d.value)
                elif d.dtype == np.uint8:
                    megaobject[keys] = int(d.value)
                elif d.dtype == np.uint32:
                    megaobject[keys] = int(d.value)
                else:
                    megaobject[keys] = d.value
            elif len(d.shape) == 1:
                print(d.dtype, type(d[0]), np.array(d))
                if isinstance(d[0], bytes):
                    megaobject[keys] = list(map(lambda x: str(x), d))
                elif isinstance(d[0], np.float32):
                    megaobject[keys] = list(map(lambda x: float(x), d))
                elif isinstance(d[0], np.int32):
                    megaobject[keys] = list(map(lambda x: int(x), d))
                else:
                    megaobject[keys] = list(d)
                json.dumps(megaobject[keys])
            else:
                x = reduce(lambda a, b: a * b, d.shape)
                if x < 100:
                    ll = np.array(d).tolist()
                    megaobject[keys] = ll
                else:
                    megaobject[keys] = f'BIG{d.shape}'
                json.dumps(megaobject[keys])
        elif type(v) is Group:
            print('group')
            megaobject[keys] = {}
        else:
            raise Exception(f"unhandled type {type(v)} {k}")

    axf.visititems(itemsvisitor)
    return megaobject.dict
示例#8
0
class TestVisit(TestCase):

    """
        Feature: The .visit and .visititems methods allow iterative access to
        group and subgroup members
    """

    def setUp(self):
        self.f = File(self.mktemp(), 'w')
        self.groups = [
            'grp1', 'grp1/sg1', 'grp1/sg2', 'grp2', 'grp2/sg1', 'grp2/sg1/ssg1'
            ]
        for x in self.groups:
            self.f.create_group(x)

    def tearDown(self):
        self.f.close()

    def test_visit(self):
        """ All subgroups are visited """
        l = []
        self.f.visit(l.append)
        self.assertSameElements(l, self.groups)

    def test_visititems(self):
        """ All subgroups and contents are visited """
        l = []
        comp = [(x, self.f[x]) for x in self.groups]
        self.f.visititems(lambda x, y: l.append((x,y)))
        self.assertSameElements(comp, l)

    def test_bailout(self):
        """ Returning a non-None value immediately aborts iteration """
        x = self.f.visit(lambda x: x)
        self.assertEqual(x, self.groups[0])
        x = self.f.visititems(lambda x, y: (x,y))
        self.assertEqual(x, (self.groups[0], self.f[self.groups[0]]))