Cython API for special functions

Scalar, typed versions of many of the functions in scipy.special can be accessed directly from Cython; the complete list is given below. Functions are overloaded using Cython fused types so their names match their Python counterpart. The module follows the following conventions:

  • If a function’s Python counterpart returns multiple values, then the function returns its outputs via pointers in the final arguments.

  • If a function’s Python counterpart returns a single value, then the function’s output is returned directly.

The module is usable from Cython via:

cimport scipy.special.cython_special

Error handling

Functions can indicate an error by returning nan; however they cannot emit warnings like their counterparts in scipy.special.

Available functions

  • voigt_profile:

    double voigt_profile(double, double, double)
    
  • agm:

    double agm(double, double)
    
  • airy:

    void airy(double, double *, double *, double *, double *)
    void airy(double complex, double complex *, double complex *, double complex *, double complex *)
    
  • airye:

    void airye(double complex, double complex *, double complex *, double complex *, double complex *)
    void airye(double, double *, double *, double *, double *)
    
  • bdtr:

    double bdtr(double, double, double)
    double bdtr(double, long, double)
    
  • bdtrc:

    double bdtrc(double, double, double)
    double bdtrc(double, long, double)
    
  • bdtri:

    double bdtri(double, double, double)
    double bdtri(double, long, double)
    
  • bdtrik:

    double bdtrik(double, double, double)
    
  • bdtrin:

    double bdtrin(double, double, double)
    
  • bei:

    double bei(double)
    
  • beip:

    double beip(double)
    
  • ber:

    double ber(double)
    
  • berp:

    double berp(double)
    
  • besselpoly:

    double besselpoly(double, double, double)
    
  • beta:

    double beta(double, double)
    
  • betainc:

    double betainc(double, double, double)
    
  • betaincinv:

    double betaincinv(double, double, double)
    
  • betaln:

    double betaln(double, double)
    
  • binom:

    double binom(double, double)
    
  • boxcox:

    double boxcox(double, double)
    
  • boxcox1p:

    double boxcox1p(double, double)
    
  • btdtr:

    double btdtr(double, double, double)
    
  • btdtri:

    double btdtri(double, double, double)
    
  • btdtria:

    double btdtria(double, double, double)
    
  • btdtrib:

    double btdtrib(double, double, double)
    
  • cbrt:

    double cbrt(double)
    
  • chdtr:

    double chdtr(double, double)
    
  • chdtrc:

    double chdtrc(double, double)
    
  • chdtri:

    double chdtri(double, double)
    
  • chdtriv:

    double chdtriv(double, double)
    
  • chndtr:

    double chndtr(double, double, double)
    
  • chndtridf:

    double chndtridf(double, double, double)
    
  • chndtrinc:

    double chndtrinc(double, double, double)
    
  • chndtrix:

    double chndtrix(double, double, double)
    
  • cosdg:

    double cosdg(double)
    
  • cosm1:

    double cosm1(double)
    
  • cotdg:

    double cotdg(double)
    
  • dawsn:

    double dawsn(double)
    double complex dawsn(double complex)
    
  • ellipe:

    double ellipe(double)
    
  • ellipeinc:

    double ellipeinc(double, double)
    
  • ellipj:

    void ellipj(double, double, double *, double *, double *, double *)
    
  • ellipkinc:

    double ellipkinc(double, double)
    
  • ellipkm1:

    double ellipkm1(double)
    
  • ellipk:

    double ellipk(double)
    
  • entr:

    double entr(double)
    
  • erf:

    double complex erf(double complex)
    double erf(double)
    
  • erfc:

    double complex erfc(double complex)
    double erfc(double)
    
  • erfcx:

    double erfcx(double)
    double complex erfcx(double complex)
    
  • erfi:

    double erfi(double)
    double complex erfi(double complex)
    
  • erfinv:

    double erfinv(double)
    
  • erfcinv:

    double erfcinv(double)
    
  • eval_chebyc:

    double complex eval_chebyc(double, double complex)
    double eval_chebyc(double, double)
    double eval_chebyc(long, double)
    
  • eval_chebys:

    double complex eval_chebys(double, double complex)
    double eval_chebys(double, double)
    double eval_chebys(long, double)
    
  • eval_chebyt:

    double complex eval_chebyt(double, double complex)
    double eval_chebyt(double, double)
    double eval_chebyt(long, double)
    
  • eval_chebyu:

    double complex eval_chebyu(double, double complex)
    double eval_chebyu(double, double)
    double eval_chebyu(long, double)
    
  • eval_gegenbauer:

    double complex eval_gegenbauer(double, double, double complex)
    double eval_gegenbauer(double, double, double)
    double eval_gegenbauer(long, double, double)
    
  • eval_genlaguerre:

    double complex eval_genlaguerre(double, double, double complex)
    double eval_genlaguerre(double, double, double)
    double eval_genlaguerre(long, double, double)
    
  • eval_hermite:

    double eval_hermite(long, double)
    
  • eval_hermitenorm:

    double eval_hermitenorm(long, double)
    
  • eval_jacobi:

    double complex eval_jacobi(double, double, double, double complex)
    double eval_jacobi(double, double, double, double)
    double eval_jacobi(long, double, double, double)
    
  • eval_laguerre:

    double complex eval_laguerre(double, double complex)
    double eval_laguerre(double, double)
    double eval_laguerre(long, double)
    
  • eval_legendre:

    double complex eval_legendre(double, double complex)
    double eval_legendre(double, double)
    double eval_legendre(long, double)
    
  • eval_sh_chebyt:

    double complex eval_sh_chebyt(double, double complex)
    double eval_sh_chebyt(double, double)
    double eval_sh_chebyt(long, double)
    
  • eval_sh_chebyu:

    double complex eval_sh_chebyu(double, double complex)
    double eval_sh_chebyu(double, double)
    double eval_sh_chebyu(long, double)
    
  • eval_sh_jacobi:

    double complex eval_sh_jacobi(double, double, double, double complex)
    double eval_sh_jacobi(double, double, double, double)
    double eval_sh_jacobi(long, double, double, double)
    
  • eval_sh_legendre:

    double complex eval_sh_legendre(double, double complex)
    double eval_sh_legendre(double, double)
    double eval_sh_legendre(long, double)
    
  • exp1:

    double complex exp1(double complex)
    double exp1(double)
    
  • exp10:

    double exp10(double)
    
  • exp2:

    double exp2(double)
    
  • expi:

    double complex expi(double complex)
    double expi(double)
    
  • expit:

    double expit(double)
    float expit(float)
    long double expit(long double)
    
  • expm1:

    double complex expm1(double complex)
    double expm1(double)
    
  • expn:

    double expn(double, double)
    double expn(long, double)
    
  • exprel:

    double exprel(double)
    
  • fdtr:

    double fdtr(double, double, double)
    
  • fdtrc:

    double fdtrc(double, double, double)
    
  • fdtri:

    double fdtri(double, double, double)
    
  • fdtridfd:

    double fdtridfd(double, double, double)
    
  • fresnel:

    void fresnel(double, double *, double *)
    void fresnel(double complex, double complex *, double complex *)
    
  • gamma:

    double complex gamma(double complex)
    double gamma(double)
    
  • gammainc:

    double gammainc(double, double)
    
  • gammaincc:

    double gammaincc(double, double)
    
  • gammainccinv:

    double gammainccinv(double, double)
    
  • gammaincinv:

    double gammaincinv(double, double)
    
  • gammaln:

    double gammaln(double)
    
  • gammasgn:

    double gammasgn(double)
    
  • gdtr:

    double gdtr(double, double, double)
    
  • gdtrc:

    double gdtrc(double, double, double)
    
  • gdtria:

    double gdtria(double, double, double)
    
  • gdtrib:

    double gdtrib(double, double, double)
    
  • gdtrix:

    double gdtrix(double, double, double)
    
  • hankel1:

    double complex hankel1(double, double complex)
    
  • hankel1e:

    double complex hankel1e(double, double complex)
    
  • hankel2:

    double complex hankel2(double, double complex)
    
  • hankel2e:

    double complex hankel2e(double, double complex)
    
  • huber:

    double huber(double, double)
    
  • hyp0f1:

    double complex hyp0f1(double, double complex)
    double hyp0f1(double, double)
    
  • hyp1f1:

    double hyp1f1(double, double, double)
    double complex hyp1f1(double, double, double complex)
    
  • hyp2f1:

    double hyp2f1(double, double, double, double)
    double complex hyp2f1(double, double, double, double complex)
    
  • hyperu:

    double hyperu(double, double, double)
    
  • i0:

    double i0(double)
    
  • i0e:

    double i0e(double)
    
  • i1:

    double i1(double)
    
  • i1e:

    double i1e(double)
    
  • inv_boxcox:

    double inv_boxcox(double, double)
    
  • inv_boxcox1p:

    double inv_boxcox1p(double, double)
    
  • it2i0k0:

    void it2i0k0(double, double *, double *)
    
  • it2j0y0:

    void it2j0y0(double, double *, double *)
    
  • it2struve0:

    double it2struve0(double)
    
  • itairy:

    void itairy(double, double *, double *, double *, double *)
    
  • iti0k0:

    void iti0k0(double, double *, double *)
    
  • itj0y0:

    void itj0y0(double, double *, double *)
    
  • itmodstruve0:

    double itmodstruve0(double)
    
  • itstruve0:

    double itstruve0(double)
    
  • iv:

    double complex iv(double, double complex)
    double iv(double, double)
    
  • ive:

    double complex ive(double, double complex)
    double ive(double, double)
    
  • j0:

    double j0(double)
    
  • j1:

    double j1(double)
    
  • jv:

    double complex jv(double, double complex)
    double jv(double, double)
    
  • jve:

    double complex jve(double, double complex)
    double jve(double, double)
    
  • k0:

    double k0(double)
    
  • k0e:

    double k0e(double)
    
  • k1:

    double k1(double)
    
  • k1e:

    double k1e(double)
    
  • kei:

    double kei(double)
    
  • keip:

    double keip(double)
    
  • kelvin:

    void kelvin(double, double complex *, double complex *, double complex *, double complex *)
    
  • ker:

    double ker(double)
    
  • kerp:

    double kerp(double)
    
  • kl_div:

    double kl_div(double, double)
    
  • kn:

    double kn(double, double)
    double kn(long, double)
    
  • kolmogi:

    double kolmogi(double)
    
  • kolmogorov:

    double kolmogorov(double)
    
  • kv:

    double complex kv(double, double complex)
    double kv(double, double)
    
  • kve:

    double complex kve(double, double complex)
    double kve(double, double)
    
  • log1p:

    double complex log1p(double complex)
    double log1p(double)
    
  • log_ndtr:

    double complex log_ndtr(double complex)
    double log_ndtr(double)
    
  • loggamma:

    double loggamma(double)
    double complex loggamma(double complex)
    
  • logit:

    double logit(double)
    float logit(float)
    long double logit(long double)
    
  • lpmv:

    double lpmv(double, double, double)
    
  • mathieu_a:

    double mathieu_a(double, double)
    
  • mathieu_b:

    double mathieu_b(double, double)
    
  • mathieu_cem:

    void mathieu_cem(double, double, double, double *, double *)
    
  • mathieu_modcem1:

    void mathieu_modcem1(double, double, double, double *, double *)
    
  • mathieu_modcem2:

    void mathieu_modcem2(double, double, double, double *, double *)
    
  • mathieu_modsem1:

    void mathieu_modsem1(double, double, double, double *, double *)
    
  • mathieu_modsem2:

    void mathieu_modsem2(double, double, double, double *, double *)
    
  • mathieu_sem:

    void mathieu_sem(double, double, double, double *, double *)
    
  • modfresnelm:

    void modfresnelm(double, double complex *, double complex *)
    
  • modfresnelp:

    void modfresnelp(double, double complex *, double complex *)
    
  • modstruve:

    double modstruve(double, double)
    
  • nbdtr:

    double nbdtr(double, double, double)
    double nbdtr(long, long, double)
    
  • nbdtrc:

    double nbdtrc(double, double, double)
    double nbdtrc(long, long, double)
    
  • nbdtri:

    double nbdtri(double, double, double)
    double nbdtri(long, long, double)
    
  • nbdtrik:

    double nbdtrik(double, double, double)
    
  • nbdtrin:

    double nbdtrin(double, double, double)
    
  • ncfdtr:

    double ncfdtr(double, double, double, double)
    
  • ncfdtri:

    double ncfdtri(double, double, double, double)
    
  • ncfdtridfd:

    double ncfdtridfd(double, double, double, double)
    
  • ncfdtridfn:

    double ncfdtridfn(double, double, double, double)
    
  • ncfdtrinc:

    double ncfdtrinc(double, double, double, double)
    
  • nctdtr:

    double nctdtr(double, double, double)
    
  • nctdtridf:

    double nctdtridf(double, double, double)
    
  • nctdtrinc:

    double nctdtrinc(double, double, double)
    
  • nctdtrit:

    double nctdtrit(double, double, double)
    
  • ndtr:

    double complex ndtr(double complex)
    double ndtr(double)
    
  • ndtri:

    double ndtri(double)
    
  • nrdtrimn:

    double nrdtrimn(double, double, double)
    
  • nrdtrisd:

    double nrdtrisd(double, double, double)
    
  • obl_ang1:

    void obl_ang1(double, double, double, double, double *, double *)
    
  • obl_ang1_cv:

    void obl_ang1_cv(double, double, double, double, double, double *, double *)
    
  • obl_cv:

    double obl_cv(double, double, double)
    
  • obl_rad1:

    void obl_rad1(double, double, double, double, double *, double *)
    
  • obl_rad1_cv:

    void obl_rad1_cv(double, double, double, double, double, double *, double *)
    
  • obl_rad2:

    void obl_rad2(double, double, double, double, double *, double *)
    
  • obl_rad2_cv:

    void obl_rad2_cv(double, double, double, double, double, double *, double *)
    
  • owens_t:

    double owens_t(double, double)
    
  • pbdv:

    void pbdv(double, double, double *, double *)
    
  • pbvv:

    void pbvv(double, double, double *, double *)
    
  • pbwa:

    void pbwa(double, double, double *, double *)
    
  • pdtr:

    double pdtr(double, double)
    
  • pdtrc:

    double pdtrc(double, double)
    
  • pdtri:

    double pdtri(double, double)
    double pdtri(long, double)
    
  • pdtrik:

    double pdtrik(double, double)
    
  • poch:

    double poch(double, double)
    
  • pro_ang1:

    void pro_ang1(double, double, double, double, double *, double *)
    
  • pro_ang1_cv:

    void pro_ang1_cv(double, double, double, double, double, double *, double *)
    
  • pro_cv:

    double pro_cv(double, double, double)
    
  • pro_rad1:

    void pro_rad1(double, double, double, double, double *, double *)
    
  • pro_rad1_cv:

    void pro_rad1_cv(double, double, double, double, double, double *, double *)
    
  • pro_rad2:

    void pro_rad2(double, double, double, double, double *, double *)
    
  • pro_rad2_cv:

    void pro_rad2_cv(double, double, double, double, double, double *, double *)
    
  • pseudo_huber:

    double pseudo_huber(double, double)
    
  • psi:

    double complex psi(double complex)
    double psi(double)
    
  • radian:

    double radian(double, double, double)
    
  • rel_entr:

    double rel_entr(double, double)
    
  • rgamma:

    double complex rgamma(double complex)
    double rgamma(double)
    
  • round:

    double round(double)
    
  • shichi:

    void shichi(double complex, double complex *, double complex *)
    void shichi(double, double *, double *)
    
  • sici:

    void sici(double complex, double complex *, double complex *)
    void sici(double, double *, double *)
    
  • sindg:

    double sindg(double)
    
  • smirnov:

    double smirnov(double, double)
    double smirnov(long, double)
    
  • smirnovi:

    double smirnovi(double, double)
    double smirnovi(long, double)
    
  • spence:

    double complex spence(double complex)
    double spence(double)
    
  • sph_harm:

    double complex sph_harm(double, double, double, double)
    double complex sph_harm(long, long, double, double)
    
  • stdtr:

    double stdtr(double, double)
    
  • stdtridf:

    double stdtridf(double, double)
    
  • stdtrit:

    double stdtrit(double, double)
    
  • struve:

    double struve(double, double)
    
  • tandg:

    double tandg(double)
    
  • tklmbda:

    double tklmbda(double, double)
    
  • wofz:

    double complex wofz(double complex)
    
  • wrightomega:

    double complex wrightomega(double complex)
    double wrightomega(double)
    
  • xlog1py:

    double xlog1py(double, double)
    double complex xlog1py(double complex, double complex)
    
  • xlogy:

    double xlogy(double, double)
    double complex xlogy(double complex, double complex)
    
  • y0:

    double y0(double)
    
  • y1:

    double y1(double)
    
  • yn:

    double yn(double, double)
    double yn(long, double)
    
  • yv:

    double complex yv(double, double complex)
    double yv(double, double)
    
  • yve:

    double complex yve(double, double complex)
    double yve(double, double)
    
  • zetac:

    double zetac(double)
    
  • wright_bessel:

    double wright_bessel(double, double, double)
    
  • ndtri_exp:

    double ndtri_exp(double)
    

Custom functions

Some functions in scipy.special which are not ufuncs have custom Cython wrappers.

Spherical Bessel functions

The optional derivative boolean argument is replaced with an optional Cython bint, leading to the following signatures.

  • spherical_jn:

    double complex spherical_jn(long, double complex)
    double complex spherical_jn(long, double complex, bint)
    double spherical_jn(long, double)
    double spherical_jn(long, double, bint)
    
  • spherical_yn:

    double complex spherical_yn(long, double complex)
    double complex spherical_yn(long, double complex, bint)
    double spherical_yn(long, double)
    double spherical_yn(long, double, bint)
    
  • spherical_in:

    double complex spherical_in(long, double complex)
    double complex spherical_in(long, double complex, bint)
    double spherical_in(long, double)
    double spherical_in(long, double, bint)
    
  • spherical_kn:

    double complex spherical_kn(long, double complex)
    double complex spherical_kn(long, double complex, bint)
    double spherical_kn(long, double)
    double spherical_kn(long, double, bint)