Skip to content
This repository has been archived by the owner on Jun 24, 2020. It is now read-only.

Add ndtri, igam, chdtr #3

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,8 @@
"pytest",
"scipy",
],
cffi_modules=["src/_cffi_src/build_hyper.py:ffi"],
cffi_modules=["src/_cffi_src/build_hyper.py:ffi",
"src/_cffi_src/build_ndtri.py:ffi",
"src/_cffi_src/build_igam.py:ffi",
"src/_cffi_src/build_chi2.py:ffi"],
)
24 changes: 24 additions & 0 deletions src/_cffi_src/build_chi2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Inspired by pyca/cryptography (Apache/BSD)

from cffi import FFI


ffi = FFI()
ffi.cdef("""
double chdtr( double df, double x );
double chdtri( double df, double y );
double chdtrc( double df, double x );
""")
ffi.set_source(
"_chi2",
"""
double chdtr( double df, double x );
double chdtri( double df, double y );
double chdtrc( double df, double x );
""",
libraries=["md"],
)


if __name__ == '__main__':
ffi.compile()
22 changes: 22 additions & 0 deletions src/_cffi_src/build_igam.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Inspired by pyca/cryptography (Apache/BSD)

from cffi import FFI


ffi = FFI()
ffi.cdef("""
double igam(double s, double x);
double igamc(double s, double x);
""")
ffi.set_source(
"_igam",
"""
double igam(double s, double x);
double igamc(double s, double x);
""",
libraries=["md"],
)


if __name__ == '__main__':
ffi.compile()
20 changes: 20 additions & 0 deletions src/_cffi_src/build_ndtri.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Inspired by pyca/cryptography (Apache/BSD)

from cffi import FFI


ffi = FFI()
ffi.cdef("""
double ndtri(double y0);
""")
ffi.set_source(
"_ndtri",
"""
double ndtri(double y0);
""",
libraries=["md"],
)


if __name__ == '__main__':
ffi.compile()
30 changes: 30 additions & 0 deletions src/pycephes/chi2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import numpy as np
from numba import cffi_support, float32, float64, vectorize

import _chi2
from _chi2 import lib, ffi

cffi_support.register_module(_chi2)
_chdtr = lib.chdtr
_chdtrc = lib.chdtrc
_chdtri = lib.chdtri

@vectorize([float64(float64, float64),
float32(float32, float32)])
def cdf(x, df):
return _chdtr(df, x)

@vectorize([float64(float64, float64),
float32(float32, float32)])
def ppf(p, df):
return _chdtri(df, 1.0-p)

@vectorize([float64(float64, float64),
float32(float32, float32)])
def sf(p, df):
return _chdtrc(df, p)

@vectorize([float64(float64, float64),
float32(float32, float32)])
def isf(p, df):
return _chdtri(df, p)
19 changes: 19 additions & 0 deletions src/pycephes/igam.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import numpy as np
from numba import cffi_support, float32, float64, vectorize

import _igam
from _igam import lib, ffi

cffi_support.register_module(_igam)
_igam = lib.igam
_igamc = lib.igamc

@vectorize([float64(float64, float64),
float32(float32, float32)])
def lower(s, x):
return _igam(s, x)

@vectorize([float64(float64, float64),
float32(float32, float32)])
def upper(s, x):
return _igamc(s, x)
14 changes: 14 additions & 0 deletions src/pycephes/ndtri.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import numpy as np
from numba import njit, cffi_support

import _ndtri
from _ndtri import lib, ffi

cffi_support.register_module(_ndtri)

_ndtri = lib.ndtri


@njit
def ndtri(q):
return _ndtri(q)