add complex utilities
This commit is contained in:
parent
91c01ef5fe
commit
1013daa902
5 changed files with 138 additions and 0 deletions
|
|
@ -13,6 +13,8 @@ SRC_USERMOD += $(USERMODULES_DIR)/numpy/ndarray/ndarray_iter.c
|
|||
SRC_USERMOD += $(USERMODULES_DIR)/ndarray_properties.c
|
||||
SRC_USERMOD += $(USERMODULES_DIR)/numpy/approx.c
|
||||
SRC_USERMOD += $(USERMODULES_DIR)/numpy/compare.c
|
||||
SRC_USERMOD += $(USERMODULES_DIR)/numpy/carray/carray.c
|
||||
SRC_USERMOD += $(USERMODULES_DIR)/numpy/carray/carray_tools.c
|
||||
SRC_USERMOD += $(USERMODULES_DIR)/ulab_create.c
|
||||
SRC_USERMOD += $(USERMODULES_DIR)/numpy/fft/fft.c
|
||||
SRC_USERMOD += $(USERMODULES_DIR)/numpy/fft/fft_tools.c
|
||||
|
|
|
|||
65
code/numpy/carray/carray.c
Normal file
65
code/numpy/carray/carray.c
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
|
||||
/*
|
||||
* This file is part of the micropython-ulab project,
|
||||
*
|
||||
* https://github.com/v923z/micropython-ulab
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2021 Zoltán Vörös
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "py/obj.h"
|
||||
#include "py/objint.h"
|
||||
#include "py/runtime.h"
|
||||
#include "py/builtin.h"
|
||||
#include "py/misc.h"
|
||||
|
||||
#include "../../ulab.h"
|
||||
#include "../../ndarray.h"
|
||||
|
||||
#if ULAB_SUPPORTS_COMPLEX
|
||||
|
||||
STATIC mp_obj_t carray_real(mp_obj_t _source) {
|
||||
if(MP_OBJ_IS_TYPE(_source, &ulab_ndarray_type)) {
|
||||
ndarray_obj_t *source = MP_OBJ_TO_PTR(_source);
|
||||
if(source->dtype != NDARRAY_COMPLEX) {
|
||||
ndarray_obj_t *target = ndarray_new_dense_ndarray(source->ndim, source->shape, source->dtype);
|
||||
ndarray_copy_array(source, target, 0);
|
||||
return MP_OBJ_FROM_PTR(target);
|
||||
} else { // the input is most definitely a complex array
|
||||
ndarray_obj_t *target = ndarray_new_dense_ndarray(source->ndim, source->shape, NDARRAY_FLOAT);
|
||||
ndarray_copy_array(source, target, 0);
|
||||
return MP_OBJ_FROM_PTR(target);
|
||||
}
|
||||
} else {
|
||||
mp_raise_NotImplementedError(translate("function is implemented for ndarrays only"));
|
||||
}
|
||||
return mp_const_none;
|
||||
}
|
||||
|
||||
MP_DEFINE_CONST_FUN_OBJ_1(carray_real_obj, carray_real);
|
||||
|
||||
STATIC mp_obj_t carray_imag(mp_obj_t _source) {
|
||||
if(MP_OBJ_IS_TYPE(_source, &ulab_ndarray_type)) {
|
||||
ndarray_obj_t *source = MP_OBJ_TO_PTR(_source);
|
||||
if(source->dtype != NDARRAY_COMPLEX) { // if not complex, then the imaginary part is zero
|
||||
ndarray_obj_t *target = ndarray_new_dense_ndarray(source->ndim, source->shape, source->dtype);
|
||||
return MP_OBJ_FROM_PTR(target);
|
||||
} else { // the input is most definitely a complex array
|
||||
ndarray_obj_t *target = ndarray_new_dense_ndarray(source->ndim, source->shape, NDARRAY_FLOAT);
|
||||
ndarray_copy_array(source, target, source->itemsize / 2);
|
||||
return MP_OBJ_FROM_PTR(target);
|
||||
}
|
||||
} else {
|
||||
mp_raise_NotImplementedError(translate("function is implemented for ndarrays only"));
|
||||
}
|
||||
return mp_const_none;
|
||||
}
|
||||
|
||||
MP_DEFINE_CONST_FUN_OBJ_1(carray_imag_obj, carray_imag);
|
||||
|
||||
#endif
|
||||
18
code/numpy/carray/carray.h
Normal file
18
code/numpy/carray/carray.h
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
|
||||
/*
|
||||
* This file is part of the micropython-ulab project,
|
||||
*
|
||||
* https://github.com/v923z/micropython-ulab
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2021 Zoltán Vörös
|
||||
*/
|
||||
|
||||
#ifndef _CARRAY_
|
||||
#define _CARRAY_
|
||||
|
||||
MP_DECLARE_CONST_FUN_OBJ_1(carray_real_obj);
|
||||
MP_DECLARE_CONST_FUN_OBJ_1(carray_imag_obj);
|
||||
|
||||
#endif
|
||||
28
code/numpy/carray/carray_tools.c
Normal file
28
code/numpy/carray/carray_tools.c
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
|
||||
/*
|
||||
* This file is part of the micropython-ulab project,
|
||||
*
|
||||
* https://github.com/v923z/micropython-ulab
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2021 Zoltán Vörös
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "py/obj.h"
|
||||
#include "py/runtime.h"
|
||||
#include "py/misc.h"
|
||||
|
||||
#include "../../ulab.h"
|
||||
#include "../../ndarray.h"
|
||||
|
||||
#if ULAB_SUPPORTS_COMPLEX
|
||||
|
||||
void raise_complex_NotImplementedError(void) {
|
||||
mp_raise_NotImplementedError(translate("not implemented for complex dtype"));
|
||||
}
|
||||
|
||||
#endif
|
||||
25
code/numpy/carray/carray_tools.h
Normal file
25
code/numpy/carray/carray_tools.h
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
|
||||
/*
|
||||
* This file is part of the micropython-ulab project,
|
||||
*
|
||||
* https://github.com/v923z/micropython-ulab
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2021 Zoltán Vörös
|
||||
*/
|
||||
|
||||
#ifndef _CARRAY_TOOLS_
|
||||
#define _CARRAY_TOOLS_
|
||||
|
||||
void raise_complex_NotImplementedError(void);
|
||||
|
||||
#if ULAB_SUPPORTS_COMPLEX
|
||||
#define NOT_IMPLEMENTED_FOR_COMPLEX() raise_complex_NotImplementedError();
|
||||
#define COMPLEX_DTYPE_NOT_IMPLEMENTED(dtype) if((dtype) == NDARRAY_COMPLEX) raise_complex_NotImplementedError();
|
||||
#else
|
||||
#define NOT_IMPLEMENTED_FOR_COMPLEX() // do nothing
|
||||
#define COMPLEX_DTYPE_NOT_IMPLEMENTED(dtype) // do nothing
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Loading…
Reference in a new issue