fixed >=, <= error in binary_op
This commit is contained in:
parent
0ede57ff42
commit
0f336ab65b
4 changed files with 65 additions and 53 deletions
|
|
@ -306,7 +306,7 @@ void ndarray_rewind_array(uint8_t ndim, uint8_t *array, size_t *shape, int32_t *
|
|||
coords[ULAB_MAX_DIMS - 1 - i] = 0;
|
||||
coords[ULAB_MAX_DIMS - 2 - i] += 1;
|
||||
} else { // coordinates can change only, if the last coordinate changes
|
||||
break;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1311,8 +1311,8 @@ mp_obj_t ndarray_binary_op(mp_binary_op_t _op, mp_obj_t lobj, mp_obj_t robj) {
|
|||
break;
|
||||
#endif
|
||||
#if NDARRAY_HAS_BINARY_OP_MORE_EQUAL
|
||||
return ndarray_binary_more(lhs, rhs, ndim, shape, lstrides, rstrides, MP_BINARY_OP_MORE_EQUAL);
|
||||
case MP_BINARY_OP_MORE_EQUAL:
|
||||
return ndarray_binary_more(lhs, rhs, ndim, shape, lstrides, rstrides, MP_BINARY_OP_MORE_EQUAL);
|
||||
break;
|
||||
#endif
|
||||
#if NDARRAY_HAS_BINARY_OP_SUBTRACT
|
||||
|
|
|
|||
|
|
@ -310,128 +310,128 @@ ndarray_obj_t *ndarray_binary_more(ndarray_obj_t *lhs, ndarray_obj_t *rhs,
|
|||
if(op == MP_BINARY_OP_MORE) {
|
||||
if(lhs->dtype == NDARRAY_UINT8) {
|
||||
if(rhs->dtype == NDARRAY_UINT8) {
|
||||
EQUALITY_LOOP(results, array, uint8_t, uint8_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, uint8_t, uint8_t, larray, lstrides, rarray, rstrides, >);
|
||||
} else if(rhs->dtype == NDARRAY_INT8) {
|
||||
EQUALITY_LOOP(results, array, uint8_t, int8_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, uint8_t, int8_t, larray, lstrides, rarray, rstrides, >);
|
||||
} else if(rhs->dtype == NDARRAY_UINT16) {
|
||||
EQUALITY_LOOP(results, array, uint8_t, uint16_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, uint8_t, uint16_t, larray, lstrides, rarray, rstrides, >);
|
||||
} else if(rhs->dtype == NDARRAY_INT16) {
|
||||
EQUALITY_LOOP(results, array, uint8_t, int16_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, uint8_t, int16_t, larray, lstrides, rarray, rstrides, >);
|
||||
} else if(rhs->dtype == NDARRAY_FLOAT) {
|
||||
EQUALITY_LOOP(results, array, uint8_t, mp_float_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, uint8_t, mp_float_t, larray, lstrides, rarray, rstrides, >);
|
||||
}
|
||||
} else if(lhs->dtype == NDARRAY_INT8) {
|
||||
if(rhs->dtype == NDARRAY_UINT8) {
|
||||
EQUALITY_LOOP(results, array, int8_t, uint8_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, int8_t, uint8_t, larray, lstrides, rarray, rstrides, >);
|
||||
} else if(rhs->dtype == NDARRAY_INT8) {
|
||||
EQUALITY_LOOP(results, array, int8_t, int8_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, int8_t, int8_t, larray, lstrides, rarray, rstrides, >);
|
||||
} else if(rhs->dtype == NDARRAY_UINT16) {
|
||||
EQUALITY_LOOP(results, array, int8_t, uint16_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, int8_t, uint16_t, larray, lstrides, rarray, rstrides, >);
|
||||
} else if(rhs->dtype == NDARRAY_INT16) {
|
||||
EQUALITY_LOOP(results, array, int8_t, int16_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, int8_t, int16_t, larray, lstrides, rarray, rstrides, >);
|
||||
} else if(rhs->dtype == NDARRAY_FLOAT) {
|
||||
EQUALITY_LOOP(results, array, int8_t, mp_float_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, int8_t, mp_float_t, larray, lstrides, rarray, rstrides, >);
|
||||
}
|
||||
} else if(lhs->dtype == NDARRAY_UINT16) {
|
||||
if(rhs->dtype == NDARRAY_UINT8) {
|
||||
EQUALITY_LOOP(results, array, uint16_t, uint8_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, uint16_t, uint8_t, larray, lstrides, rarray, rstrides, >);
|
||||
} else if(rhs->dtype == NDARRAY_INT8) {
|
||||
EQUALITY_LOOP(results, array, uint16_t, int8_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, uint16_t, int8_t, larray, lstrides, rarray, rstrides, >);
|
||||
} else if(rhs->dtype == NDARRAY_UINT16) {
|
||||
EQUALITY_LOOP(results, array, uint16_t, uint16_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, uint16_t, uint16_t, larray, lstrides, rarray, rstrides, >);
|
||||
} else if(rhs->dtype == NDARRAY_INT16) {
|
||||
EQUALITY_LOOP(results, array, uint16_t, int16_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, uint16_t, int16_t, larray, lstrides, rarray, rstrides, >);
|
||||
} else if(rhs->dtype == NDARRAY_FLOAT) {
|
||||
EQUALITY_LOOP(results, array, uint16_t, mp_float_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, uint16_t, mp_float_t, larray, lstrides, rarray, rstrides, >);
|
||||
}
|
||||
} else if(lhs->dtype == NDARRAY_INT16) {
|
||||
if(rhs->dtype == NDARRAY_UINT8) {
|
||||
EQUALITY_LOOP(results, array, int16_t, uint8_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, int16_t, uint8_t, larray, lstrides, rarray, rstrides, >);
|
||||
} else if(rhs->dtype == NDARRAY_INT8) {
|
||||
EQUALITY_LOOP(results, array, int16_t, int8_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, int16_t, int8_t, larray, lstrides, rarray, rstrides, >);
|
||||
} else if(rhs->dtype == NDARRAY_UINT16) {
|
||||
EQUALITY_LOOP(results, array, int16_t, uint16_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, int16_t, uint16_t, larray, lstrides, rarray, rstrides, >);
|
||||
} else if(rhs->dtype == NDARRAY_INT16) {
|
||||
EQUALITY_LOOP(results, array, int16_t, int16_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, int16_t, int16_t, larray, lstrides, rarray, rstrides, >);
|
||||
} else if(rhs->dtype == NDARRAY_FLOAT) {
|
||||
EQUALITY_LOOP(results, array, uint16_t, mp_float_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, uint16_t, mp_float_t, larray, lstrides, rarray, rstrides, >);
|
||||
}
|
||||
} else if(lhs->dtype == NDARRAY_FLOAT) {
|
||||
if(rhs->dtype == NDARRAY_UINT8) {
|
||||
EQUALITY_LOOP(results, array, mp_float_t, uint8_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, mp_float_t, uint8_t, larray, lstrides, rarray, rstrides, >);
|
||||
} else if(rhs->dtype == NDARRAY_INT8) {
|
||||
EQUALITY_LOOP(results, array, mp_float_t, int8_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, mp_float_t, int8_t, larray, lstrides, rarray, rstrides, >);
|
||||
} else if(rhs->dtype == NDARRAY_UINT16) {
|
||||
EQUALITY_LOOP(results, array, mp_float_t, uint16_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, mp_float_t, uint16_t, larray, lstrides, rarray, rstrides, >);
|
||||
} else if(rhs->dtype == NDARRAY_INT16) {
|
||||
EQUALITY_LOOP(results, array, mp_float_t, int16_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, mp_float_t, int16_t, larray, lstrides, rarray, rstrides, >);
|
||||
} else if(rhs->dtype == NDARRAY_FLOAT) {
|
||||
EQUALITY_LOOP(results, array, mp_float_t, mp_float_t, larray, lstrides, rarray, rstrides, <);
|
||||
EQUALITY_LOOP(results, array, mp_float_t, mp_float_t, larray, lstrides, rarray, rstrides, >);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* NDARRAY_HAS_BINARY_OP_MORE | NDARRAY_HAS_BINARY_OP_LESS*/
|
||||
#if NDARRAY_HAS_BINARY_OP_MORE_EQUAL | NDARRAY_HAS_BINARY_OP_LESS_EQUAL
|
||||
if(op == MP_BINARY_OP_MORE) {
|
||||
if(op == MP_BINARY_OP_MORE_EQUAL) {
|
||||
if(lhs->dtype == NDARRAY_UINT8) {
|
||||
if(rhs->dtype == NDARRAY_UINT8) {
|
||||
EQUALITY_LOOP(results, array, uint8_t, uint8_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, uint8_t, uint8_t, larray, lstrides, rarray, rstrides, >=);
|
||||
} else if(rhs->dtype == NDARRAY_INT8) {
|
||||
EQUALITY_LOOP(results, array, uint8_t, int8_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, uint8_t, int8_t, larray, lstrides, rarray, rstrides, >=);
|
||||
} else if(rhs->dtype == NDARRAY_UINT16) {
|
||||
EQUALITY_LOOP(results, array, uint8_t, uint16_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, uint8_t, uint16_t, larray, lstrides, rarray, rstrides, >=);
|
||||
} else if(rhs->dtype == NDARRAY_INT16) {
|
||||
EQUALITY_LOOP(results, array, uint8_t, int16_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, uint8_t, int16_t, larray, lstrides, rarray, rstrides, >=);
|
||||
} else if(rhs->dtype == NDARRAY_FLOAT) {
|
||||
EQUALITY_LOOP(results, array, uint8_t, mp_float_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, uint8_t, mp_float_t, larray, lstrides, rarray, rstrides, >=);
|
||||
}
|
||||
} else if(lhs->dtype == NDARRAY_INT8) {
|
||||
if(rhs->dtype == NDARRAY_UINT8) {
|
||||
EQUALITY_LOOP(results, array, int8_t, uint8_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, int8_t, uint8_t, larray, lstrides, rarray, rstrides, >=);
|
||||
} else if(rhs->dtype == NDARRAY_INT8) {
|
||||
EQUALITY_LOOP(results, array, int8_t, int8_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, int8_t, int8_t, larray, lstrides, rarray, rstrides, >=);
|
||||
} else if(rhs->dtype == NDARRAY_UINT16) {
|
||||
EQUALITY_LOOP(results, array, int8_t, uint16_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, int8_t, uint16_t, larray, lstrides, rarray, rstrides, >=);
|
||||
} else if(rhs->dtype == NDARRAY_INT16) {
|
||||
EQUALITY_LOOP(results, array, int8_t, int16_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, int8_t, int16_t, larray, lstrides, rarray, rstrides, >=);
|
||||
} else if(rhs->dtype == NDARRAY_FLOAT) {
|
||||
EQUALITY_LOOP(results, array, int8_t, mp_float_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, int8_t, mp_float_t, larray, lstrides, rarray, rstrides, >=);
|
||||
}
|
||||
} else if(lhs->dtype == NDARRAY_UINT16) {
|
||||
if(rhs->dtype == NDARRAY_UINT8) {
|
||||
EQUALITY_LOOP(results, array, uint16_t, uint8_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, uint16_t, uint8_t, larray, lstrides, rarray, rstrides, >=);
|
||||
} else if(rhs->dtype == NDARRAY_INT8) {
|
||||
EQUALITY_LOOP(results, array, uint16_t, int8_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, uint16_t, int8_t, larray, lstrides, rarray, rstrides, >=);
|
||||
} else if(rhs->dtype == NDARRAY_UINT16) {
|
||||
EQUALITY_LOOP(results, array, uint16_t, uint16_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, uint16_t, uint16_t, larray, lstrides, rarray, rstrides, >=);
|
||||
} else if(rhs->dtype == NDARRAY_INT16) {
|
||||
EQUALITY_LOOP(results, array, uint16_t, int16_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, uint16_t, int16_t, larray, lstrides, rarray, rstrides, >=);
|
||||
} else if(rhs->dtype == NDARRAY_FLOAT) {
|
||||
EQUALITY_LOOP(results, array, uint16_t, mp_float_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, uint16_t, mp_float_t, larray, lstrides, rarray, rstrides, >=);
|
||||
}
|
||||
} else if(lhs->dtype == NDARRAY_INT16) {
|
||||
if(rhs->dtype == NDARRAY_UINT8) {
|
||||
EQUALITY_LOOP(results, array, int16_t, uint8_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, int16_t, uint8_t, larray, lstrides, rarray, rstrides, >=);
|
||||
} else if(rhs->dtype == NDARRAY_INT8) {
|
||||
EQUALITY_LOOP(results, array, int16_t, int8_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, int16_t, int8_t, larray, lstrides, rarray, rstrides, >=);
|
||||
} else if(rhs->dtype == NDARRAY_UINT16) {
|
||||
EQUALITY_LOOP(results, array, int16_t, uint16_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, int16_t, uint16_t, larray, lstrides, rarray, rstrides, >=);
|
||||
} else if(rhs->dtype == NDARRAY_INT16) {
|
||||
EQUALITY_LOOP(results, array, int16_t, int16_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, int16_t, int16_t, larray, lstrides, rarray, rstrides, >=);
|
||||
} else if(rhs->dtype == NDARRAY_FLOAT) {
|
||||
EQUALITY_LOOP(results, array, uint16_t, mp_float_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, uint16_t, mp_float_t, larray, lstrides, rarray, rstrides, >=);
|
||||
}
|
||||
} else if(lhs->dtype == NDARRAY_FLOAT) {
|
||||
if(rhs->dtype == NDARRAY_UINT8) {
|
||||
EQUALITY_LOOP(results, array, mp_float_t, uint8_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, mp_float_t, uint8_t, larray, lstrides, rarray, rstrides, >=);
|
||||
} else if(rhs->dtype == NDARRAY_INT8) {
|
||||
EQUALITY_LOOP(results, array, mp_float_t, int8_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, mp_float_t, int8_t, larray, lstrides, rarray, rstrides, >=);
|
||||
} else if(rhs->dtype == NDARRAY_UINT16) {
|
||||
EQUALITY_LOOP(results, array, mp_float_t, uint16_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, mp_float_t, uint16_t, larray, lstrides, rarray, rstrides, >=);
|
||||
} else if(rhs->dtype == NDARRAY_INT16) {
|
||||
EQUALITY_LOOP(results, array, mp_float_t, int16_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, mp_float_t, int16_t, larray, lstrides, rarray, rstrides, >=);
|
||||
} else if(rhs->dtype == NDARRAY_FLOAT) {
|
||||
EQUALITY_LOOP(results, array, mp_float_t, mp_float_t, larray, lstrides, rarray, rstrides, <=);
|
||||
EQUALITY_LOOP(results, array, mp_float_t, mp_float_t, larray, lstrides, rarray, rstrides, >=);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -559,6 +559,7 @@ static mp_obj_t numerical_cross(mp_obj_t _a, mp_obj_t _b) {
|
|||
mp_float_t *array = (mp_float_t *)ndarray->array;
|
||||
for(uint8_t i=0; i < 3; i++) array[i] = results[i];
|
||||
}
|
||||
m_del(mp_float_t, results, 3);
|
||||
return MP_OBJ_FROM_PTR(ndarray);
|
||||
}
|
||||
|
||||
|
|
|
|||
11
code/ulab.h
11
code/ulab.h
|
|
@ -12,6 +12,17 @@
|
|||
#ifndef __ULAB__
|
||||
#define __ULAB__
|
||||
|
||||
// The pre-processor constants in this file determine how ulab behaves:
|
||||
//
|
||||
// - how many dimensions ulab can handle
|
||||
// - which functions are included in the compiled firmware
|
||||
// - whether the python syntax is numpy-like, or modular
|
||||
// - whether arrays can be sliced and iterated over
|
||||
// - which binary/unary operators are supported
|
||||
//
|
||||
// A considerable amount of flash space can be saved by removing (setting
|
||||
// the corresponding constants to 0) the unnecessary functions and features.
|
||||
|
||||
// Setting this variable to 1 produces numpy-compatible firmware,
|
||||
// i.e., functions can be called at the top level,
|
||||
// without having to import the sub-modules (linalg and fft are exceptions,
|
||||
|
|
|
|||
Loading…
Reference in a new issue