抽象基类,用于生成类似h5py的对象。
h5py-like的Python项目详细描述
h5py_类
在Python 3.7 +中的一些类似于H5Py的API的基类和助手函数。
用例
有一个库可以读取/写入块数字数组的连续区域, 想让它有点像h5py。
不支持
- 空数据空间和标量数据空间
- 广播(标量除外)
- 尺寸刻度
与h5py的区别
- 访问模式被转换为枚举,尽管它们在很大程度上与
str
表单兼容"x"
优先于"w-"
进行独占创建
用法
请参阅the tests package中的普通hdf5实现。
创建自己的Dataset
、Group
、File
和AttributeManager
类,
实现他们的抽象方法。
因为^ {CD6}}s应该子类^ ^ {CD5}},这里的基类是一个MIXIN。
它应该出现在mro中的Group
之前。
包含写操作的方法应该被赋予@mutation
装饰符。
这将检查它们的mode
属性,如果它是只读的,则会引发错误。
fromh5py_likeimportDatasetBase,GroupBase,AttributeManagerBase,FileMixin,mutationclassMyDataset(DatasetBase):# ... implement abstract methods@mutationdef__setitem__(self,idx,val):...classMyGroup(GroupBase):# ... implement abstract methodspassclassMyFile(FileMixin,MyGroup):# ... implement abstract methodspassclassMyAttributeManager(AttributeManagerBase):# ... implement abstract methodspass
助手
h5py_like.shape_utils
包含各种帮助函数,
模拟NUMPY的灵活性。
测试
包括一套基本的类似于h5py的功能测试。
要使用它,您必须使用pytest,并定义一个fixture,该fixture将生成File
实现的实例。
然后您只需要将提供的抽象测试类子类化:
conftest.py
importpytest@pytest.fixturedeffile_():yieldMyFile("my_name")
test_implementation.py
fromh5py_like.test_utilsimportFileTestBase,GroupTestBase,DatasetTestBase,ModeTestBase# concrete class names must start with TestclassTestFile(FileTestBase):passclassTestGroup(GroupTestBase):passclassTestDataset(DatasetTestBase):passclassTestMode(ModeTestBase):deffactory(self,mode):# Instantiate your File object in the given mode in a way which is repeatable within a method.returnMyFile(mode)
如果数据集实现支持分块和线程,请改用ThreadedDatasetTestBase
基类。
提供的基类测试一些预期的功能,即使您没有在测试类中编写任何方法。 如果您愿意,可以添加更多的测试,或者覆盖那些您想要更改的测试,或者装饰任何您要跳过或xfail的测试。
GroupTestBase
提供了一个group_name
属性和一个self.group(parent)
方法来创建该名称的组。
DatasetTestBase
提供了dataset_
name
、shape
、和dtype
以及一个self.dataset(parent)
方法来生成该数据集。
注释
如果您只想实现h5py类api的一部分,只需raise NotImplementedError()
。
然后你的课程会明确说明他们做什么,不支持什么。