aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien George2015-02-22 14:48:18 +0000
committerDamien George2015-02-22 14:48:18 +0000
commit5cbeacebdb8407425e692205f7333452e8a57784 (patch)
tree7862a270c4b0a78379994b7610b0856cb1826f7c
parent9ab94c468cb0d2a22eadbce2f493e016c462109e (diff)
py: Make math special functions configurable and disabled by default.
The implementation of these functions is very large (order 4k) and they are rarely used, so we don't enable them by default. They are however enabled in stmhal and unix, since we have the room.
-rw-r--r--py/modmath.c4
-rw-r--r--py/mpconfig.h5
-rw-r--r--py/qstrdefs.h2
-rw-r--r--stmhal/mpconfigport.h1
-rw-r--r--unix/mpconfigport.h1
5 files changed, 13 insertions, 0 deletions
diff --git a/py/modmath.c b/py/modmath.c
index 38ed390dd..46423d2b5 100644
--- a/py/modmath.c
+++ b/py/modmath.c
@@ -120,6 +120,7 @@ MATH_FUN_1_TO_BOOL(isnan, isnan)
MATH_FUN_1_TO_INT(trunc, trunc)
/// \function ldexp(x, exp)
MATH_FUN_2(ldexp, ldexp)
+#if MICROPY_PY_MATH_SPECIAL_FUNCTIONS
/// \function erf(x)
/// Return the error function of `x`.
MATH_FUN_1(erf, erf)
@@ -132,6 +133,7 @@ MATH_FUN_1(gamma, tgamma)
/// \function lgamma(x)
/// return the natural logarithm of the gamma function of `x`.
MATH_FUN_1(lgamma, lgamma)
+#endif
//TODO: factorial, fsum
// Functions that return a tuple
@@ -211,10 +213,12 @@ STATIC const mp_map_elem_t mp_module_math_globals_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR_trunc), (mp_obj_t)&mp_math_trunc_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_radians), (mp_obj_t)&mp_math_radians_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_degrees), (mp_obj_t)&mp_math_degrees_obj },
+ #if MICROPY_PY_MATH_SPECIAL_FUNCTIONS
{ MP_OBJ_NEW_QSTR(MP_QSTR_erf), (mp_obj_t)&mp_math_erf_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_erfc), (mp_obj_t)&mp_math_erfc_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_gamma), (mp_obj_t)&mp_math_gamma_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_lgamma), (mp_obj_t)&mp_math_lgamma_obj },
+ #endif
};
STATIC MP_DEFINE_CONST_DICT(mp_module_math_globals, mp_module_math_globals_table);
diff --git a/py/mpconfig.h b/py/mpconfig.h
index b235d6fe6..bde8dfb9e 100644
--- a/py/mpconfig.h
+++ b/py/mpconfig.h
@@ -419,6 +419,11 @@ typedef double mp_float_t;
#define MICROPY_PY_MATH (1)
#endif
+// Whether to provide special math functions: math.{erf,erfc,gamma,lgamma}
+#ifndef MICROPY_PY_MATH_SPECIAL_FUNCTIONS
+#define MICROPY_PY_MATH_SPECIAL_FUNCTIONS (0)
+#endif
+
// Whether to provide "cmath" module
#ifndef MICROPY_PY_CMATH
#define MICROPY_PY_CMATH (0)
diff --git a/py/qstrdefs.h b/py/qstrdefs.h
index f273367d5..77514f521 100644
--- a/py/qstrdefs.h
+++ b/py/qstrdefs.h
@@ -363,11 +363,13 @@ Q(frexp)
Q(ldexp)
Q(degrees)
Q(radians)
+#if MICROPY_PY_MATH_SPECIAL_FUNCTIONS
Q(erf)
Q(erfc)
Q(gamma)
Q(lgamma)
#endif
+#endif
#if MICROPY_PY_CMATH
Q(cmath)
diff --git a/stmhal/mpconfigport.h b/stmhal/mpconfigport.h
index 0224d93f4..39256bebb 100644
--- a/stmhal/mpconfigport.h
+++ b/stmhal/mpconfigport.h
@@ -61,6 +61,7 @@
#define MICROPY_PY_MICROPYTHON_MEM_INFO (1)
#define MICROPY_PY_SYS_EXIT (1)
#define MICROPY_PY_SYS_STDFILES (1)
+#define MICROPY_PY_MATH_SPECIAL_FUNCTIONS (1)
#define MICROPY_PY_CMATH (1)
#define MICROPY_PY_IO (1)
#define MICROPY_PY_IO_FILEIO (1)
diff --git a/unix/mpconfigport.h b/unix/mpconfigport.h
index a0366d9c6..bbfae7b21 100644
--- a/unix/mpconfigport.h
+++ b/unix/mpconfigport.h
@@ -64,6 +64,7 @@
#define MICROPY_PY_SYS_PLATFORM "linux"
#define MICROPY_PY_SYS_MAXSIZE (1)
#define MICROPY_PY_SYS_STDFILES (1)
+#define MICROPY_PY_MATH_SPECIAL_FUNCTIONS (1)
#define MICROPY_PY_CMATH (1)
#define MICROPY_PY_IO_FILEIO (1)
#define MICROPY_PY_GC_COLLECT_RETVAL (1)