Last active
December 25, 2015 07:28
-
-
Save ewmoore/6939178 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
if [ $# -eq 2 ] | |
then | |
funcs=($2) | |
else | |
funcs=(CCOS CSIN CTAN CCOSH CSINH CTANH CACOS CASIN CATAN CACOSH CASINH CATANH CEXP CLOG CSQRT CPOW) | |
fi | |
for f in ${funcs[*]} | |
do | |
echo $f | |
gcc -lm -D$1 -D$f numpy/core/test_c99complex.c build/temp.linux-x86_64-2.7/build/src.linux-x86_64-2.7/numpy/core/src/npymath/*.o | |
./a.out | |
done | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/numpy/core/setup.py b/numpy/core/setup.py | |
index 8477e89..66e36be 100644 | |
--- a/numpy/core/setup.py | |
+++ b/numpy/core/setup.py | |
@@ -208,43 +208,43 @@ def check_complex(config, mathlibs): | |
if st: | |
pub.append(('NPY_HAVE_%s' % type2def(t), 1)) | |
- def check_prec(prec): | |
- flist = [f + prec for f in C99_COMPLEX_FUNCS] | |
- decl = dict([(f, True) for f in flist]) | |
- if not config.check_funcs_once(flist, call=decl, decl=decl, | |
- libraries=mathlibs): | |
- for f in flist: | |
- if config.check_func(f, call=True, decl=True, | |
- libraries=mathlibs): | |
- priv.append((fname2def(f), 1)) | |
- else: | |
- priv.extend([(fname2def(f), 1) for f in flist]) | |
- | |
- flist = [f + prec for f in C99_COMPLEX_FUNCS_CHECKED] | |
- decl = dict([(f, True) for f in flist]) | |
- exists = [] | |
- if not config.check_funcs_once(flist, call=decl, decl=decl, | |
- libraries=mathlibs): | |
- for f in C99_COMPLEX_FUNCS_CHECKED: | |
- if config.check_func(f + prec, call=True, decl=True, | |
- libraries=mathlibs): | |
- exists.append(f) | |
- else: | |
- exists.extend(C99_COMPLEX_FUNCS_CHECKED) | |
- | |
- if len(exists) > 0: | |
- fp = open('./numpy/core/test_c99complex.c', 'r') | |
- obody = fp.read() | |
- fp.close() | |
- precname = {'f':'FLOAT', '':'DOUBLE', 'l':'LONGDOUBLE'}[prec] | |
- for f in exists: | |
- body = obody.replace('PYTESTPRECISION', precname).replace('PYTESTFUNC', f.upper()) | |
- if config.try_run(body, libraries=mathlibs): | |
- priv.append((fname2def(f + prec), 1)) | |
- | |
- check_prec('') | |
- check_prec('f') | |
- check_prec('l') | |
+# def check_prec(prec): | |
+# flist = [f + prec for f in C99_COMPLEX_FUNCS] | |
+# decl = dict([(f, True) for f in flist]) | |
+# if not config.check_funcs_once(flist, call=decl, decl=decl, | |
+# libraries=mathlibs): | |
+# for f in flist: | |
+# if config.check_func(f, call=True, decl=True, | |
+# libraries=mathlibs): | |
+# priv.append((fname2def(f), 1)) | |
+# else: | |
+# priv.extend([(fname2def(f), 1) for f in flist]) | |
+# | |
+# flist = [f + prec for f in C99_COMPLEX_FUNCS_CHECKED] | |
+# decl = dict([(f, True) for f in flist]) | |
+# exists = [] | |
+# if not config.check_funcs_once(flist, call=decl, decl=decl, | |
+# libraries=mathlibs): | |
+# for f in C99_COMPLEX_FUNCS_CHECKED: | |
+# if config.check_func(f + prec, call=True, decl=True, | |
+# libraries=mathlibs): | |
+# exists.append(f) | |
+# else: | |
+# exists.extend(C99_COMPLEX_FUNCS_CHECKED) | |
+# | |
+# if len(exists) > 0: | |
+# fp = open('./numpy/core/test_c99complex.c', 'r') | |
+# obody = fp.read() | |
+# fp.close() | |
+# precname = {'f':'FLOAT', '':'DOUBLE', 'l':'LONGDOUBLE'}[prec] | |
+# for f in exists: | |
+# body = obody.replace('PYTESTPRECISION', precname).replace('PYTESTFUNC', f.upper()) | |
+# if config.try_run(body, libraries=mathlibs): | |
+# priv.append((fname2def(f + prec), 1)) | |
+# | |
+# check_prec('') | |
+# check_prec('f') | |
+# check_prec('l') | |
return priv, pub | |
diff --git a/numpy/core/src/npymath/npy_math_complex.c.src b/numpy/core/src/npymath/npy_math_complex.c.src | |
index 68c629b..3308cdf 100644 | |
--- a/numpy/core/src/npymath/npy_math_complex.c.src | |
+++ b/numpy/core/src/npymath/npy_math_complex.c.src | |
@@ -1610,3 +1610,149 @@ static inline npy_longdouble _real_part_reciprocall(npy_longdouble x, | |
/**end repeat1**/ | |
/**end repeat**/ | |
+ | |
+void npy_cacosl_wrap(npy_longdouble zr, npy_longdouble zi, npy_longdouble* rr, npy_longdouble* ri) | |
+{ | |
+ npy_clongdouble z = npy_cpackl(zr, zi); | |
+ z = npy_cacosl(z); | |
+ *rr = npy_creall(z); | |
+ *ri = npy_cimagl(z); | |
+ return; | |
+} | |
+ | |
+void npy_casinl_wrap(npy_longdouble zr, npy_longdouble zi, npy_longdouble* rr, npy_longdouble* ri) | |
+{ | |
+ npy_clongdouble z = npy_cpackl(zr, zi); | |
+ z = npy_casinl(z); | |
+ *rr = npy_creall(z); | |
+ *ri = npy_cimagl(z); | |
+ return; | |
+} | |
+ | |
+void npy_catanl_wrap(npy_longdouble zr, npy_longdouble zi, npy_longdouble* rr, npy_longdouble* ri) | |
+{ | |
+ npy_clongdouble z = npy_cpackl(zr, zi); | |
+ z = npy_catanl(z); | |
+ *rr = npy_creall(z); | |
+ *ri = npy_cimagl(z); | |
+ return; | |
+} | |
+ | |
+void npy_cacoshl_wrap(npy_longdouble zr, npy_longdouble zi, npy_longdouble* rr, npy_longdouble* ri) | |
+{ | |
+ npy_clongdouble z = npy_cpackl(zr, zi); | |
+ z = npy_cacoshl(z); | |
+ *rr = npy_creall(z); | |
+ *ri = npy_cimagl(z); | |
+ return; | |
+} | |
+ | |
+void npy_casinhl_wrap(npy_longdouble zr, npy_longdouble zi, npy_longdouble* rr, npy_longdouble* ri) | |
+{ | |
+ npy_clongdouble z = npy_cpackl(zr, zi); | |
+ z = npy_casinhl(z); | |
+ *rr = npy_creall(z); | |
+ *ri = npy_cimagl(z); | |
+ return; | |
+} | |
+ | |
+void npy_catanhl_wrap(npy_longdouble zr, npy_longdouble zi, npy_longdouble* rr, npy_longdouble* ri) | |
+{ | |
+ npy_clongdouble z = npy_cpackl(zr, zi); | |
+ z = npy_catanhl(z); | |
+ *rr = npy_creall(z); | |
+ *ri = npy_cimagl(z); | |
+ return; | |
+} | |
+ | |
+void npy_ccosl_wrap(npy_longdouble zr, npy_longdouble zi, npy_longdouble* rr, npy_longdouble* ri) | |
+{ | |
+ npy_clongdouble z = npy_cpackl(zr, zi); | |
+ z = npy_ccosl(z); | |
+ *rr = npy_creall(z); | |
+ *ri = npy_cimagl(z); | |
+ return; | |
+} | |
+ | |
+void npy_csinl_wrap(npy_longdouble zr, npy_longdouble zi, npy_longdouble* rr, npy_longdouble* ri) | |
+{ | |
+ npy_clongdouble z = npy_cpackl(zr, zi); | |
+ z = npy_csinl(z); | |
+ *rr = npy_creall(z); | |
+ *ri = npy_cimagl(z); | |
+ return; | |
+} | |
+ | |
+void npy_ctanl_wrap(npy_longdouble zr, npy_longdouble zi, npy_longdouble* rr, npy_longdouble* ri) | |
+{ | |
+ npy_clongdouble z = npy_cpackl(zr, zi); | |
+ z = npy_ctanl(z); | |
+ *rr = npy_creall(z); | |
+ *ri = npy_cimagl(z); | |
+ return; | |
+} | |
+ | |
+void npy_ccoshl_wrap(npy_longdouble zr, npy_longdouble zi, npy_longdouble* rr, npy_longdouble* ri) | |
+{ | |
+ npy_clongdouble z = npy_cpackl(zr, zi); | |
+ z = npy_ccoshl(z); | |
+ *rr = npy_creall(z); | |
+ *ri = npy_cimagl(z); | |
+ return; | |
+} | |
+ | |
+void npy_csinhl_wrap(npy_longdouble zr, npy_longdouble zi, npy_longdouble* rr, npy_longdouble* ri) | |
+{ | |
+ npy_clongdouble z = npy_cpackl(zr, zi); | |
+ z = npy_csinhl(z); | |
+ *rr = npy_creall(z); | |
+ *ri = npy_cimagl(z); | |
+ return; | |
+} | |
+ | |
+void npy_ctanhl_wrap(npy_longdouble zr, npy_longdouble zi, npy_longdouble* rr, npy_longdouble* ri) | |
+{ | |
+ npy_clongdouble z = npy_cpackl(zr, zi); | |
+ z = npy_ctanhl(z); | |
+ *rr = npy_creall(z); | |
+ *ri = npy_cimagl(z); | |
+ return; | |
+} | |
+ | |
+void npy_cexpl_wrap(npy_longdouble zr, npy_longdouble zi, npy_longdouble* rr, npy_longdouble* ri) | |
+{ | |
+ npy_clongdouble z = npy_cpackl(zr, zi); | |
+ z = npy_cexpl(z); | |
+ *rr = npy_creall(z); | |
+ *ri = npy_cimagl(z); | |
+ return; | |
+} | |
+ | |
+void npy_clogl_wrap(npy_longdouble zr, npy_longdouble zi, npy_longdouble* rr, npy_longdouble* ri) | |
+{ | |
+ npy_clongdouble z = npy_cpackl(zr, zi); | |
+ z = npy_clogl(z); | |
+ *rr = npy_creall(z); | |
+ *ri = npy_cimagl(z); | |
+ return; | |
+} | |
+ | |
+void npy_csqrtl_wrap(npy_longdouble zr, npy_longdouble zi, npy_longdouble* rr, npy_longdouble* ri) | |
+{ | |
+ npy_clongdouble z = npy_cpackl(zr, zi); | |
+ z = npy_csqrtl(z); | |
+ *rr = npy_creall(z); | |
+ *ri = npy_cimagl(z); | |
+ return; | |
+} | |
+ | |
+void npy_cpowl_wrap(npy_longdouble zr, npy_longdouble zi, npy_longdouble wr, npy_longdouble wi, npy_longdouble* rr, npy_longdouble* ri) | |
+{ | |
+ npy_clongdouble z = npy_cpackl(zr, zi); | |
+ npy_clongdouble w = npy_cpackl(wr, wi); | |
+ z = npy_cpowl(z, w); | |
+ *rr = npy_creall(z); | |
+ *ri = npy_cimagl(z); | |
+ return; | |
+} | |
+ | |
diff --git a/numpy/core/test_c99complex.c b/numpy/core/test_c99complex.c | |
index bb841aa..464a373 100644 | |
--- a/numpy/core/test_c99complex.c | |
+++ b/numpy/core/test_c99complex.c | |
@@ -63,6 +63,254 @@ const TYPE NZERO = -1.0 * 0.0; | |
#define ADDSUFFIX_INT(A, B) CONCAT(A, B) | |
#define ADDSUFFIX(A) ADDSUFFIX_INT(A, SUFFIX) | |
+complex TYPE ADDSUFFIX(npy_cacos)(complex TYPE); | |
+complex TYPE ADDSUFFIX(npy_casin)(complex TYPE); | |
+complex TYPE ADDSUFFIX(npy_catan)(complex TYPE); | |
+complex TYPE ADDSUFFIX(npy_cacosh)(complex TYPE); | |
+complex TYPE ADDSUFFIX(npy_casinh)(complex TYPE); | |
+complex TYPE ADDSUFFIX(npy_catanh)(complex TYPE); | |
+ | |
+complex TYPE ADDSUFFIX(npy_ccos)(complex TYPE); | |
+complex TYPE ADDSUFFIX(npy_csin)(complex TYPE); | |
+complex TYPE ADDSUFFIX(npy_ctan)(complex TYPE); | |
+complex TYPE ADDSUFFIX(npy_ccosh)(complex TYPE); | |
+complex TYPE ADDSUFFIX(npy_csinh)(complex TYPE); | |
+complex TYPE ADDSUFFIX(npy_ctanh)(complex TYPE); | |
+ | |
+complex TYPE ADDSUFFIX(npy_clog)(complex TYPE); | |
+complex TYPE ADDSUFFIX(npy_cexp)(complex TYPE); | |
+complex TYPE ADDSUFFIX(npy_cpow)(complex TYPE, complex TYPE); | |
+complex TYPE ADDSUFFIX(npy_csqrt)(complex TYPE); | |
+ | |
+#ifndef LONGDOUBLE | |
+#define cacos npy_cacos | |
+#define casin npy_casin | |
+#define catan npy_catan | |
+#define cacosh npy_cacosh | |
+#define casinh npy_casinh | |
+#define catanh npy_catanh | |
+ | |
+#define ccos npy_ccos | |
+#define csin npy_csin | |
+#define ctan npy_ctan | |
+#define ccosh npy_ccosh | |
+#define csinh npy_csinh | |
+#define ctanh npy_ctanh | |
+ | |
+#define clog npy_clog | |
+#define cexp npy_cexp | |
+#define cpow npy_cpow | |
+#define csqrt npy_csqrt | |
+#else | |
+ | |
+void npy_cacosl_wrap(long double, long double, long double *, long double *); | |
+void npy_casinl_wrap(long double, long double, long double *, long double *); | |
+void npy_catanl_wrap(long double, long double, long double *, long double *); | |
+void npy_cacoshl_wrap(long double, long double, long double *, long double *); | |
+void npy_casinhl_wrap(long double, long double, long double *, long double *); | |
+void npy_catanhl_wrap(long double, long double, long double *, long double *); | |
+void npy_ccosl_wrap(long double, long double, long double *, long double *); | |
+void npy_csinl_wrap(long double, long double, long double *, long double *); | |
+void npy_ctanl_wrap(long double, long double, long double *, long double *); | |
+void npy_ccoshl_wrap(long double, long double, long double *, long double *); | |
+void npy_csinhl_wrap(long double, long double, long double *, long double *); | |
+void npy_ctanhl_wrap(long double, long double, long double *, long double *); | |
+void npy_cexpl_wrap(long double, long double, long double *, long double *); | |
+void npy_clogl_wrap(long double, long double, long double *, long double *); | |
+void npy_csqrtl_wrap(long double, long double, long double *, long double *); | |
+void npy_cpowl_wrap(long double, long double, long double, long double, long double *, long double *); | |
+ | |
+long double complex cpacklll(long double r, long double i) | |
+{ | |
+ union { | |
+ long double complex z; | |
+ long double a[2]; | |
+ } z1; | |
+ z1.a[0] = r; | |
+ z1.a[1] = i; | |
+ return z1.z; | |
+} | |
+ | |
+long double complex wcacosl(long double complex z) | |
+{ | |
+ long double zr, zi, rr, ri; | |
+ zr = creall(z); | |
+ zi = cimagl(z); | |
+ npy_cacosl_wrap(zr, zi, &rr, &ri); | |
+ z = cpacklll(rr, ri); | |
+ return z; | |
+} | |
+ | |
+long double complex wcasinl(long double complex z) | |
+{ | |
+ long double zr, zi, rr, ri; | |
+ zr = creall(z); | |
+ zi = cimagl(z); | |
+ npy_casinl_wrap(zr, zi, &rr, &ri); | |
+ z = cpacklll(rr, ri); | |
+ return z; | |
+} | |
+ | |
+long double complex wcatanl(long double complex z) | |
+{ | |
+ long double zr, zi, rr, ri; | |
+ zr = creall(z); | |
+ zi = cimagl(z); | |
+ npy_catanl_wrap(zr, zi, &rr, &ri); | |
+ z = cpacklll(rr, ri); | |
+ return z; | |
+} | |
+ | |
+long double complex wcacoshl(long double complex z) | |
+{ | |
+ long double zr, zi, rr, ri; | |
+ zr = creall(z); | |
+ zi = cimagl(z); | |
+ npy_cacoshl_wrap(zr, zi, &rr, &ri); | |
+ z = cpacklll(rr, ri); | |
+ return z; | |
+} | |
+ | |
+long double complex wcasinhl(long double complex z) | |
+{ | |
+ long double zr, zi, rr, ri; | |
+ zr = creall(z); | |
+ zi = cimagl(z); | |
+ npy_casinhl_wrap(zr, zi, &rr, &ri); | |
+ z = cpacklll(rr, ri); | |
+ return z; | |
+} | |
+ | |
+long double complex wcatanhl(long double complex z) | |
+{ | |
+ long double zr, zi, rr, ri; | |
+ zr = creall(z); | |
+ zi = cimagl(z); | |
+ npy_catanhl_wrap(zr, zi, &rr, &ri); | |
+ z = cpacklll(rr, ri); | |
+ return z; | |
+} | |
+ | |
+long double complex wccosl(long double complex z) | |
+{ | |
+ long double zr, zi, rr, ri; | |
+ zr = creall(z); | |
+ zi = cimagl(z); | |
+ npy_ccosl_wrap(zr, zi, &rr, &ri); | |
+ z = cpacklll(rr, ri); | |
+ return z; | |
+} | |
+ | |
+long double complex wcsinl(long double complex z) | |
+{ | |
+ long double zr, zi, rr, ri; | |
+ zr = creall(z); | |
+ zi = cimagl(z); | |
+ npy_csinl_wrap(zr, zi, &rr, &ri); | |
+ z = cpacklll(rr, ri); | |
+ return z; | |
+} | |
+ | |
+long double complex wctanl(long double complex z) | |
+{ | |
+ long double zr, zi, rr, ri; | |
+ zr = creall(z); | |
+ zi = cimagl(z); | |
+ npy_ctanl_wrap(zr, zi, &rr, &ri); | |
+ z = cpacklll(rr, ri); | |
+ return z; | |
+} | |
+ | |
+long double complex wccoshl(long double complex z) | |
+{ | |
+ long double zr, zi, rr, ri; | |
+ zr = creall(z); | |
+ zi = cimagl(z); | |
+ npy_ccoshl_wrap(zr, zi, &rr, &ri); | |
+ z = cpacklll(rr, ri); | |
+ return z; | |
+} | |
+ | |
+long double complex wcsinhl(long double complex z) | |
+{ | |
+ long double zr, zi, rr, ri; | |
+ zr = creall(z); | |
+ zi = cimagl(z); | |
+ npy_csinhl_wrap(zr, zi, &rr, &ri); | |
+ z = cpacklll(rr, ri); | |
+ return z; | |
+} | |
+ | |
+long double complex wctanhl(long double complex z) | |
+{ | |
+ long double zr, zi, rr, ri; | |
+ zr = creall(z); | |
+ zi = cimagl(z); | |
+ npy_ctanhl_wrap(zr, zi, &rr, &ri); | |
+ z = cpacklll(rr, ri); | |
+ return z; | |
+} | |
+ | |
+long double complex wcexpl(long double complex z) | |
+{ | |
+ long double zr, zi, rr, ri; | |
+ zr = creall(z); | |
+ zi = cimagl(z); | |
+ npy_cexpl_wrap(zr, zi, &rr, &ri); | |
+ z = cpacklll(rr, ri); | |
+ return z; | |
+} | |
+ | |
+long double complex wclogl(long double complex z) | |
+{ | |
+ long double zr, zi, rr, ri; | |
+ zr = creall(z); | |
+ zi = cimagl(z); | |
+ npy_clogl_wrap(zr, zi, &rr, &ri); | |
+ z = cpacklll(rr, ri); | |
+ return z; | |
+} | |
+ | |
+long double complex wcsqrtl(long double complex z) | |
+{ | |
+ long double zr, zi, rr, ri; | |
+ zr = creall(z); | |
+ zi = cimagl(z); | |
+ npy_csqrtl_wrap(zr, zi, &rr, &ri); | |
+ z = cpacklll(rr, ri); | |
+ return z; | |
+} | |
+ | |
+long double complex wcpowl(long double complex z, long double complex w) | |
+{ | |
+ long double zr, zi, wr, wi, rr, ri; | |
+ zr = creall(z); | |
+ zi = cimagl(z); | |
+ wr = creall(w); | |
+ wi = cimagl(w); | |
+ npy_cpowl_wrap(zr, zi, wr, wi, &rr, &ri); | |
+ z = cpacklll(rr, ri); | |
+ return z; | |
+} | |
+ | |
+#define cacos wcacos | |
+#define casin wcasin | |
+#define catan wcatan | |
+#define cacosh wcacosh | |
+#define casinh wcasinh | |
+#define catanh wcatanh | |
+#define ccos wccos | |
+#define csin wcsin | |
+#define ctan wctan | |
+#define ccosh wccosh | |
+#define csinh wcsinh | |
+#define ctanh wctanh | |
+#define cexp wcexp | |
+#define clog wclog | |
+#define csqrt wcsqrt | |
+#define cpow wcpow | |
+#endif | |
+ | |
#define TEST_PRINTF(func, xr, xi, er, ei, rr, ri) \ | |
printf("%d: " STRINGIZE(func) STRINGIZE(SUFFIX) "(" FMT " + " FMT "j): " \ | |
"expected: " FMT " + " FMT "j: received: " FMT " + " FMT "j\n", \ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment