Skip to content

Commit b50d603

Browse files
committed
Avoid using char2dtype dict
1 parent 73562aa commit b50d603

File tree

1 file changed

+15
-39
lines changed

1 file changed

+15
-39
lines changed

blosc2/blosc2_ext.pyx

Lines changed: 15 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -357,14 +357,14 @@ cdef extern from "blosc2.h":
357357

358358
ctypedef struct user_filters_udata:
359359
char* py_func
360-
char input_cdtype
361-
char output_cdtype
360+
int input_cdtype
361+
int output_cdtype
362362
int32_t chunkshape
363363

364364
ctypedef struct filler_udata:
365365
char* py_func
366366
int64_t inputs_id
367-
char output_cdtype
367+
int output_cdtype
368368
int32_t chunkshape
369369

370370

@@ -1095,8 +1095,8 @@ cdef class SChunk:
10951095
cdef user_filters_udata* postf_udata = <user_filters_udata * > malloc(sizeof(user_filters_udata))
10961096
postf_udata.py_func = <char * > malloc(strlen(func_id) + 1)
10971097
strcpy(postf_udata.py_func, func_id)
1098-
postf_udata.input_cdtype = dtype_input.char.encode("utf-8")[0]
1099-
postf_udata.output_cdtype = dtype_output.char.encode("utf-8")[0]
1098+
postf_udata.input_cdtype = dtype_input.num
1099+
postf_udata.output_cdtype = dtype_output.num
11001100
postf_udata.chunkshape = self.schunk.chunksize // self.schunk.typesize
11011101

11021102
postparams.user_data = postf_udata
@@ -1130,7 +1130,7 @@ cdef class SChunk:
11301130
fill_udata.py_func = <char *> malloc(strlen(func_id) + 1)
11311131
strcpy(fill_udata.py_func, func_id)
11321132
fill_udata.inputs_id = inputs_id
1133-
fill_udata.output_cdtype = np.dtype(dtype_output).char.encode("utf-8")[0]
1133+
fill_udata.output_cdtype = np.dtype(dtype_output).num
11341134
fill_udata.chunkshape = self.schunk.chunksize // self.schunk.typesize
11351135

11361136
preparams.user_data = fill_udata
@@ -1159,8 +1159,8 @@ cdef class SChunk:
11591159
cdef user_filters_udata* pref_udata = <user_filters_udata*> malloc(sizeof(user_filters_udata))
11601160
pref_udata.py_func = <char *> malloc(strlen(func_id) + 1)
11611161
strcpy(pref_udata.py_func, func_id)
1162-
pref_udata.input_cdtype = dtype_input.char.encode("utf-8")[0]
1163-
pref_udata.output_cdtype = dtype_output.char.encode("utf-8")[0]
1162+
pref_udata.input_cdtype = dtype_input.num
1163+
pref_udata.output_cdtype = dtype_output.num
11641164
pref_udata.chunkshape = self.schunk.chunksize // self.schunk.typesize
11651165

11661166
preparams.user_data = pref_udata
@@ -1182,39 +1182,16 @@ cdef class SChunk:
11821182
blosc2_schunk_free(self.schunk)
11831183

11841184

1185-
char2dtype = {np.dtype(np.bool_).char: np.NPY_BOOL,
1186-
np.dtype(np.int8).char: np.NPY_INT8,
1187-
np.dtype(np.int16).char: np.NPY_INT16,
1188-
np.dtype(np.int32).char: np.NPY_INT32,
1189-
np.dtype(np.int64).char: np.NPY_INT64,
1190-
np.dtype(np.uint8).char: np.NPY_UINT8,
1191-
np.dtype(np.uint16).char: np.NPY_UINT16,
1192-
np.dtype(np.uint32).char: np.NPY_UINT32,
1193-
np.dtype(np.uint64).char: np.NPY_UINT64,
1194-
np.dtype(np.float16).char: np.NPY_FLOAT16,
1195-
np.dtype(np.float32).char: np.NPY_FLOAT32,
1196-
np.dtype(np.float64).char: np.NPY_FLOAT64,
1197-
np.dtype(np.complex64).char: np.NPY_COMPLEX64,
1198-
np.dtype(np.complex128).char: np.NPY_COMPLEX128,
1199-
np.dtype(np.datetime64).char: np.NPY_DATETIME,
1200-
np.dtype(np.timedelta64).char: np.NPY_TIMEDELTA,
1201-
}
1202-
12031185
# postfilter
12041186
cdef int general_postfilter(blosc2_postfilter_params *params):
12051187
cdef user_filters_udata *udata = <user_filters_udata *> params.user_data
12061188
cdef int nd = 1
12071189
cdef np.npy_intp dims = params.size // params.typesize
1208-
1209-
input_cdtype = chr(udata.input_cdtype)
1210-
output_cdtype = chr(udata.output_cdtype)
1211-
input = np.PyArray_SimpleNewFromData(nd, &dims, char2dtype[input_cdtype], params.input)
1212-
output = np.PyArray_SimpleNewFromData(nd, &dims, char2dtype[output_cdtype], params.output)
1190+
input = np.PyArray_SimpleNewFromData(nd, &dims, udata.input_cdtype, params.input)
1191+
output = np.PyArray_SimpleNewFromData(nd, &dims, udata.output_cdtype, params.output)
12131192
offset = params.nchunk * udata.chunkshape + params.offset // params.typesize
1214-
12151193
func_id = udata.py_func.decode()
12161194
blosc2.postfilter_funcs[func_id](input, output, offset)
1217-
12181195
return 0
12191196

12201197

@@ -1225,8 +1202,8 @@ cdef int general_filler(blosc2_prefilter_params *params):
12251202
cdef np.npy_intp dims = params.output_size // params.output_typesize
12261203

12271204
inputs_tuple = _ctypes.PyObj_FromPtr(udata.inputs_id)
1228-
output_cdtype = chr(udata.output_cdtype)
1229-
output = np.PyArray_SimpleNewFromData(nd, &dims, char2dtype[output_cdtype], params.output)
1205+
1206+
output = np.PyArray_SimpleNewFromData(nd, &dims, udata.output_cdtype, params.output)
12301207
offset = params.nchunk * udata.chunkshape + params.output_offset // params.output_typesize
12311208

12321209
inputs = []
@@ -1267,10 +1244,9 @@ cdef int general_prefilter(blosc2_prefilter_params *params):
12671244
cdef int nd = 1
12681245
cdef np.npy_intp dims = params.output_size // params.output_typesize
12691246

1270-
input_cdtype = chr(udata.input_cdtype)
1271-
output_cdtype = chr(udata.output_cdtype)
1272-
input = np.PyArray_SimpleNewFromData(nd, &dims, char2dtype[input_cdtype], params.input)
1273-
output = np.PyArray_SimpleNewFromData(nd, &dims, char2dtype[output_cdtype], params.output)
1247+
1248+
input = np.PyArray_SimpleNewFromData(nd, &dims, udata.input_cdtype, params.input)
1249+
output = np.PyArray_SimpleNewFromData(nd, &dims, udata.output_cdtype, params.output)
12741250
offset = params.nchunk * udata.chunkshape + params.output_offset // params.output_typesize
12751251

12761252
func_id = udata.py_func.decode()

0 commit comments

Comments
 (0)