1 /* This file is a collection of wrappers around the 2 * Amos Fortran library of functions that take complex 3 * variables (see www.netlib.org) so that they can be called from 4 * the cephes library of corresponding name but work with complex 5 * arguments. 6 */ 7 8 #ifndef _AMOS_WRAPPERS_H 9 #define _AMOS_WRAPPERS_H 10 #include "Python.h" 11 #include "sf_error.h" 12 13 #include <numpy/npy_math.h> 14 15 #define DO_SFERR(name, varp) \ 16 do { \ 17 if (nz !=0 || ierr != 0) { \ 18 sf_error(name, ierr_to_sferr(nz, ierr), NULL);\ 19 set_nan_if_no_computation_done(varp, ierr); \ 20 } \ 21 } while (0) 22 23 int ierr_to_sferr( int nz, int ierr); 24 void set_nan_if_no_computation_done(npy_cdouble *var, int ierr); 25 int airy_wrap(double x, double *ai, double *aip, double *bi, double *bip); 26 int cairy_wrap(npy_cdouble z, npy_cdouble *ai, npy_cdouble *aip, npy_cdouble *bi, npy_cdouble *bip); 27 int cairy_wrap_e(npy_cdouble z, npy_cdouble *ai, npy_cdouble *aip, npy_cdouble *bi, npy_cdouble *bip); 28 int cairy_wrap_e_real(double z, double *ai, double *aip, double *bi, double *bip); 29 npy_cdouble cbesi_wrap( double v, npy_cdouble z); 30 npy_cdouble cbesi_wrap_e( double v, npy_cdouble z); 31 double cbesi_wrap_e_real( double v, double z); 32 npy_cdouble cbesj_wrap( double v, npy_cdouble z); 33 npy_cdouble cbesj_wrap_e( double v, npy_cdouble z); 34 double cbesj_wrap_real(double v, double z); 35 double cbesj_wrap_e_real( double v, double z); 36 npy_cdouble cbesy_wrap( double v, npy_cdouble z); 37 double cbesy_wrap_real(double v, double x); 38 npy_cdouble cbesy_wrap_e( double v, npy_cdouble z); 39 double cbesy_wrap_e_real( double v, double z); 40 npy_cdouble cbesk_wrap( double v, npy_cdouble z); 41 npy_cdouble cbesk_wrap_e( double v, npy_cdouble z); 42 double cbesk_wrap_real( double v, double z); 43 double cbesk_wrap_e_real( double v, double z); 44 double cbesk_wrap_real_int(int n, double z); 45 npy_cdouble cbesh_wrap1( double v, npy_cdouble z); 46 npy_cdouble cbesh_wrap1_e( double v, npy_cdouble z); 47 npy_cdouble cbesh_wrap2( double v, npy_cdouble z); 48 npy_cdouble cbesh_wrap2_e( double v, npy_cdouble z); 49 double sin_pi(double x); 50 /* 51 int cairy_(double *, int *, int *, doublecomplex *, int *, int *); 52 int cbiry_(doublecomplex *, int *, int *, doublecomplex *, int *, int *); 53 int cbesi_(doublecomplex *, double *, int *, int *, doublecomplex *, int *, int *); 54 int cbesj_(doublecomplex *, double *, int *, int *, doublecomplex *, int *, int *); 55 int cbesk_(doublecomplex *, double *, int *, int *, doublecomplex *, int *, int *); 56 int cbesy_(doublecomplex *, double *, int *, int *, doublecomplex *, int *, doublecomplex *, int *); 57 int cbesh_(doublecomplex *, double *, int *, int *, int *, doublecomplex *, int *, int *); 58 */ 59 60 #endif 61 62 63 64 65 66 67 68 69 70 71 72