Spaces:
Paused
Paused
| from ctypes import ( | |
| addressof, | |
| c_char_p, | |
| c_int, | |
| c_long, | |
| c_uint, | |
| c_void_p, | |
| CFUNCTYPE, | |
| POINTER, | |
| Structure, | |
| ) | |
| import pytest | |
| import h5py | |
| from h5py import h5z | |
| from .common import insubprocess | |
| # Type of filter callback function of H5Z_class2_t | |
| H5ZFuncT = CFUNCTYPE( | |
| c_long, # restype | |
| # argtypes | |
| c_uint, # flags | |
| c_long, # cd_nelemts | |
| POINTER(c_uint), # cd_values | |
| c_long, # nbytes | |
| POINTER(c_long), # buf_size | |
| POINTER(c_void_p), # buf | |
| ) | |
| class H5ZClass2T(Structure): | |
| """H5Z_class2_t structure defining a filter""" | |
| _fields_ = [ | |
| ("version", c_int), | |
| ("id_", c_int), | |
| ("encoder_present", c_uint), | |
| ("decoder_present", c_uint), | |
| ("name", c_char_p), | |
| ("can_apply", c_void_p), | |
| ("set_local", c_void_p), | |
| ("filter_", H5ZFuncT), | |
| ] | |
| def test_register_filter(): | |
| filter_id = 256 # Test ID | |
| def failing_filter_callback(flags, cd_nelemts, cd_values, nbytes, buf_size, buf): | |
| return 0 | |
| dummy_filter_class = H5ZClass2T( | |
| version=h5z.CLASS_T_VERS, | |
| id_=filter_id, | |
| encoder_present=1, | |
| decoder_present=1, | |
| name=b"dummy filter", | |
| can_apply=None, | |
| set_local=None, | |
| filter_=failing_filter_callback, | |
| ) | |
| h5z.register_filter(addressof(dummy_filter_class)) | |
| try: | |
| assert h5z.filter_avail(filter_id) | |
| filter_flags = h5z.get_filter_info(filter_id) | |
| assert ( | |
| filter_flags | |
| == h5z.FILTER_CONFIG_ENCODE_ENABLED | h5z.FILTER_CONFIG_DECODE_ENABLED | |
| ) | |
| finally: | |
| h5z.unregister_filter(filter_id) | |
| assert not h5z.filter_avail(filter_id) | |
| def test_unregister_filter(request): | |
| if h5py.h5z.filter_avail(h5py.h5z.FILTER_LZF): | |
| res = h5py.h5z.unregister_filter(h5py.h5z.FILTER_LZF) | |
| assert res | |