Compare commits
5 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c231a0fe91 | ||
|
|
2b274f1233 | ||
|
|
68017a2238 | ||
|
|
d4373ab499 | ||
|
|
635cb6cdee |
5 changed files with 21 additions and 25 deletions
|
|
@ -6,7 +6,7 @@
|
|||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2019-2022 Zoltán Vörös
|
||||
* Copyright (c) 2019-2024 Zoltán Vörös
|
||||
* 2020 Jeff Epler for Adafruit Industries
|
||||
* 2020 Taku Fukada
|
||||
*/
|
||||
|
|
@ -509,7 +509,7 @@ static size_t multiply_size(size_t a, size_t b) {
|
|||
return result;
|
||||
}
|
||||
|
||||
ndarray_obj_t *ndarray_new_ndarray(uint8_t ndim, size_t *shape, int32_t *strides, uint8_t dtype) {
|
||||
ndarray_obj_t *ndarray_new_ndarray(uint8_t ndim, size_t *shape, int32_t *strides, uint8_t dtype, uint8_t *buffer) {
|
||||
// Creates the base ndarray with shape, and initialises the values to straight 0s
|
||||
ndarray_obj_t *ndarray = m_new_obj(ndarray_obj_t);
|
||||
ndarray->base.type = &ulab_ndarray_type;
|
||||
|
|
@ -536,7 +536,11 @@ ndarray_obj_t *ndarray_new_ndarray(uint8_t ndim, size_t *shape, int32_t *strides
|
|||
|
||||
// if the length is 0, still allocate a single item, so that contractions can be handled
|
||||
size_t len = multiply_size(ndarray->itemsize, MAX(1, ndarray->len));
|
||||
uint8_t *array = m_new0(byte, len);
|
||||
uint8_t *array;
|
||||
array = buffer;
|
||||
if(array == NULL) {
|
||||
array = m_new0(byte, len);
|
||||
}
|
||||
// this should set all elements to 0, irrespective of the of the dtype (all bits are zero)
|
||||
// we could, perhaps, leave this step out, and initialise the array only, when needed
|
||||
ndarray->array = array;
|
||||
|
|
@ -547,12 +551,12 @@ ndarray_obj_t *ndarray_new_ndarray(uint8_t ndim, size_t *shape, int32_t *strides
|
|||
ndarray_obj_t *ndarray_new_dense_ndarray(uint8_t ndim, size_t *shape, uint8_t dtype) {
|
||||
// creates a dense array, i.e., one, where the strides are derived directly from the shapes
|
||||
// the function should work in the general n-dimensional case
|
||||
int32_t *strides = m_new(int32_t, ULAB_MAX_DIMS);
|
||||
strides[ULAB_MAX_DIMS-1] = (int32_t)ulab_binary_get_size(dtype);
|
||||
for(size_t i=ULAB_MAX_DIMS; i > 1; i--) {
|
||||
strides[i-2] = strides[i-1] * MAX(1, shape[i-1]);
|
||||
}
|
||||
return ndarray_new_ndarray(ndim, shape, strides, dtype);
|
||||
// int32_t *strides = m_new(int32_t, ULAB_MAX_DIMS);
|
||||
// strides[ULAB_MAX_DIMS - 1] = (int32_t)ulab_binary_get_size(dtype);
|
||||
// for(size_t i = ULAB_MAX_DIMS; i > 1; i--) {
|
||||
// strides[i-2] = strides[i-1] * MAX(1, shape[i-1]);
|
||||
// }
|
||||
return ndarray_new_ndarray(ndim, shape, NULL, dtype, NULL);
|
||||
}
|
||||
|
||||
ndarray_obj_t *ndarray_new_ndarray_from_tuple(mp_obj_tuple_t *_shape, uint8_t dtype) {
|
||||
|
|
@ -650,7 +654,7 @@ ndarray_obj_t *ndarray_copy_view(ndarray_obj_t *source) {
|
|||
if(source->boolean) {
|
||||
dtype = NDARRAY_BOOL;
|
||||
}
|
||||
ndarray_obj_t *ndarray = ndarray_new_ndarray(source->ndim, source->shape, strides, dtype);
|
||||
ndarray_obj_t *ndarray = ndarray_new_ndarray(source->ndim, source->shape, strides, dtype, NULL);
|
||||
ndarray_copy_array(source, ndarray, 0);
|
||||
return ndarray;
|
||||
}
|
||||
|
|
@ -1884,7 +1888,7 @@ mp_obj_t ndarray_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
|
|||
#if ULAB_SUPPORTS_COMPLEX
|
||||
if(self->dtype == NDARRAY_COMPLEX) {
|
||||
int32_t *strides = strides_from_shape(self->shape, NDARRAY_FLOAT);
|
||||
ndarray_obj_t *target = ndarray_new_ndarray(self->ndim, self->shape, strides, NDARRAY_FLOAT);
|
||||
ndarray_obj_t *target = ndarray_new_ndarray(self->ndim, self->shape, strides, NDARRAY_FLOAT, NULL);
|
||||
ndarray = MP_OBJ_TO_PTR(carray_abs(self, target));
|
||||
} else {
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -187,8 +187,9 @@ int32_t *ndarray_contract_strides(ndarray_obj_t *, uint8_t );
|
|||
|
||||
ndarray_obj_t *ndarray_from_iterable(mp_obj_t , uint8_t );
|
||||
ndarray_obj_t *ndarray_new_dense_ndarray(uint8_t , size_t *, uint8_t );
|
||||
// ndarray_obj_t *ndarray_ndarray_from_buffer(uint8_t , size_t *, uint8_t , mp_obj_t , size_t );
|
||||
ndarray_obj_t *ndarray_new_ndarray_from_tuple(mp_obj_tuple_t *, uint8_t );
|
||||
ndarray_obj_t *ndarray_new_ndarray(uint8_t , size_t *, int32_t *, uint8_t );
|
||||
ndarray_obj_t *ndarray_new_ndarray(uint8_t , size_t *, int32_t *, uint8_t , uint8_t *);
|
||||
ndarray_obj_t *ndarray_new_linear_array(size_t , uint8_t );
|
||||
ndarray_obj_t *ndarray_new_view(ndarray_obj_t *, uint8_t , size_t *, int32_t *, int32_t );
|
||||
bool ndarray_is_dense(ndarray_obj_t *);
|
||||
|
|
|
|||
|
|
@ -838,19 +838,10 @@ mp_obj_t create_frombuffer(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw
|
|||
len = count;
|
||||
}
|
||||
}
|
||||
ndarray_obj_t *ndarray = m_new_obj(ndarray_obj_t);
|
||||
ndarray->base.type = &ulab_ndarray_type;
|
||||
ndarray->dtype = dtype == NDARRAY_BOOL ? NDARRAY_UINT8 : dtype;
|
||||
ndarray->boolean = dtype == NDARRAY_BOOL ? NDARRAY_BOOLEAN : NDARRAY_NUMERIC;
|
||||
ndarray->ndim = 1;
|
||||
ndarray->len = len;
|
||||
ndarray->itemsize = sz;
|
||||
ndarray->shape[ULAB_MAX_DIMS - 1] = len;
|
||||
ndarray->strides[ULAB_MAX_DIMS - 1] = sz;
|
||||
|
||||
size_t *shape = ndarray_shape_vector(0, 0, 0, len);
|
||||
uint8_t *buffer = bufinfo.buf;
|
||||
ndarray->array = buffer + offset;
|
||||
return MP_OBJ_FROM_PTR(ndarray);
|
||||
return ndarray_new_ndarray(1, shape, NULL, dtype, buffer + offset);
|
||||
}
|
||||
return mp_const_none;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -746,7 +746,7 @@ mp_obj_t numerical_argsort(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw
|
|||
numerical_reduce_axes(ndarray, ax, shape, strides);
|
||||
|
||||
// We could return an NDARRAY_UINT8 array, if all lengths are shorter than 256
|
||||
ndarray_obj_t *indices = ndarray_new_ndarray(ndarray->ndim, ndarray->shape, NULL, NDARRAY_UINT16);
|
||||
ndarray_obj_t *indices = ndarray_new_ndarray(ndarray->ndim, ndarray->shape, NULL, NDARRAY_UINT16, NULL);
|
||||
int32_t *istrides = m_new0(int32_t, ULAB_MAX_DIMS);
|
||||
numerical_reduce_axes(indices, ax, shape, istrides);
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
#include "user/user.h"
|
||||
#include "utils/utils.h"
|
||||
|
||||
#define ULAB_VERSION 6.5.2
|
||||
#define ULAB_VERSION 6.5.3
|
||||
#define xstr(s) str(s)
|
||||
#define str(s) #s
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue