@@ -90,22 +90,24 @@ typedef struct _vectorized_function_obj_t {
90
90
const mp_obj_type_t * type ;
91
91
} vectorized_function_obj_t ;
92
92
93
+
94
+ #if ULAB_MATH_FUNCTIONS_OUT_KEYWORD
95
+
93
96
#if ULAB_HAS_FUNCTION_ITERATOR
94
- #define ITERATE_VECTOR (type , array , source , sarray , shift )\
97
+ #define ITERATE_VECTOR (type , target , tarray , tstrides , source , sarray )\
95
98
({\
96
99
size_t *scoords = ndarray_new_coords((source)->ndim);\
97
- for(size_t i= 0; i < (source)->len/ (source)->shape[ULAB_MAX_DIMS -1]; i++) {\
98
- for(size_t l= 0; l < (source)->shape[ULAB_MAX_DIMS - 1]; l++) {\
99
- *(array ) = f(*((type *)(sarray)));\
100
- (array ) += (shift) ;\
100
+ for(size_t i = 0; i < (source)->len / (source)->shape[ULAB_MAX_DIMS - 1]; i++) {\
101
+ for(size_t l = 0; l < (source)->shape[ULAB_MAX_DIMS - 1]; l++) {\
102
+ *(tarray ) = f(*((type *)(sarray)));\
103
+ (tarray ) += (tstrides)[ULAB_MAX_DIMS - 1] ;\
101
104
(sarray) += (source)->strides[ULAB_MAX_DIMS - 1];\
102
105
}\
103
106
ndarray_rewind_array((source)->ndim, sarray, (source)->shape, (source)->strides, scoords);\
104
107
}\
105
108
})
106
- #endif /* ULAB_HAS_FUNCTION_ITERATOR */
107
109
108
- #if ULAB_MATH_FUNCTIONS_OUT_KEYWORD
110
+ #else
109
111
110
112
#if ULAB_MAX_DIMS == 1
111
113
#define ITERATE_VECTOR (type , target , tarray , tstrides , source , sarray ) do {\
@@ -202,6 +204,7 @@ typedef struct _vectorized_function_obj_t {
202
204
} while(i < (source)->shape[ULAB_MAX_DIMS - 4]);\
203
205
} while(0)
204
206
#endif /* ULAB_MAX_DIMS == 4 */
207
+ #endif /* ULAB_HAS_FUNCTION_ITERATOR */
205
208
206
209
#define MATH_FUN_1 (py_name , c_name ) \
207
210
static mp_obj_t vector_ ## py_name(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { \
@@ -210,6 +213,22 @@ typedef struct _vectorized_function_obj_t {
210
213
211
214
#else /* ULAB_MATH_FUNCTIONS_OUT_KEYWORD */
212
215
216
+ #if ULAB_HAS_FUNCTION_ITERATOR
217
+ #define ITERATE_VECTOR (type , array , source , sarray , shift )\
218
+ ({\
219
+ size_t *scoords = ndarray_new_coords((source)->ndim);\
220
+ for(size_t i=0; i < (source)->len / (source)->shape[ULAB_MAX_DIMS - 1]; i++) {\
221
+ for(size_t l = 0; l < (source)->shape[ULAB_MAX_DIMS - 1]; l++) {\
222
+ *(array) = f(*((type *)(sarray)));\
223
+ (array)++;\
224
+ (sarray) += (source)->strides[ULAB_MAX_DIMS - 1];\
225
+ }\
226
+ ndarray_rewind_array((source)->ndim, sarray, (source)->shape, (source)->strides, scoords);\
227
+ }\
228
+ })
229
+
230
+ #else
231
+
213
232
#if ULAB_MAX_DIMS == 1
214
233
#define ITERATE_VECTOR (type , array , source , sarray ) do {\
215
234
size_t l = 0;\
@@ -290,6 +309,8 @@ typedef struct _vectorized_function_obj_t {
290
309
} while(0)
291
310
#endif /* ULAB_MAX_DIMS == 4 */
292
311
312
+ #endif /* ULAB_HAS_FUNCTION_ITERATOR */
313
+
293
314
#define MATH_FUN_1 (py_name , c_name ) \
294
315
static mp_obj_t vector_ ## py_name(mp_obj_t x_obj) { \
295
316
return vector_generic_vector(x_obj, MICROPY_FLOAT_C_FUN(c_name)); \
0 commit comments