-
-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathbuild_lib.py
145 lines (118 loc) · 4.14 KB
/
build_lib.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
import glob
import os
import platform
from cffi import FFI
include_dirs = ["src", "include"]
rmath_src = glob.glob(os.path.join("src", "*.c"))
# Take out dSFMT dependant files; Just use the basic rng
rmath_src = [f
for f in rmath_src
if ("librandom.c" not in f) and ("randmtzig.c" not in f)]
extra_compile_args = ['-DMATHLIB_STANDALONE']
if platform.system != 'Windows':
extra_compile_args.append('-std=c99')
ffi = FFI()
ffi.set_source("rvlib._rmath_ffi",
"#include <Rmath.h>",
include_dirs=include_dirs,
sources=rmath_src,
extra_compile_args=extra_compile_args)
ffi.cdef("""\
// Special functions
double gammafn(double);
double lgammafn(double);
double digamma(double);
double beta(double, double);
double bessel_k(double, double, double);
// Seed
void set_seed(unsigned int, unsigned int);
void get_seed(unsigned int *, unsigned int *);
// Distributions
// Normal Distribution
double dnorm(double, double, double, int);
double pnorm(double, double, double, int, int);
double rnorm(double, double);
double qnorm(double, double, double, int, int);
// Uniform Distribution
double dunif(double, double, double, int);
double punif(double, double, double, int, int);
double qunif(double, double, double, int, int);
double runif(double, double);
// Gamma Distribution
double dgamma(double, double, double, int);
double pgamma(double, double, double, int, int);
double qgamma(double, double, double, int, int);
double rgamma(double, double);
// Beta Distribution
double dbeta(double, double, double, int);
double pbeta(double, double, double, int, int);
double qbeta(double, double, double, int, int);
double rbeta(double, double);
// Lognormal Distribution
double dlnorm(double, double, double, int);
double plnorm(double, double, double, int, int);
double qlnorm(double, double, double, int, int);
double rlnorm(double, double);
// Chi-squared Distribution
double dchisq(double, double, int);
double pchisq(double, double, int, int);
double qchisq(double, double, int, int);
double rchisq(double);
// F Distibution
double df(double, double, double, int);
double pf(double, double, double, int, int);
double qf(double, double, double, int, int);
double rf(double, double);
// Student t Distibution
double dt(double, double, int);
double pt(double, double, int, int);
double qt(double, double, int, int);
double rt(double);
// Binomial Distribution
double dbinom(double, double, double, int);
double pbinom(double, double, double, int, int);
double qbinom(double, double, double, int, int);
double rbinom(double, double);
// Cauchy Distribution
double dcauchy(double, double, double, int);
double pcauchy(double, double, double, int, int);
double qcauchy(double, double, double, int, int);
double rcauchy(double, double);
// Exponential Distribution
double dexp(double, double, int);
double pexp(double, double, int, int);
double qexp(double, double, int, int);
double rexp(double);
// Geometric Distribution
double dgeom(double, double, int);
double pgeom(double, double, int, int);
double qgeom(double, double, int, int);
double rgeom(double);
// Hypergeometric Distibution
double dhyper(double, double, double, double, int);
double phyper(double, double, double, double, int, int);
double qhyper(double, double, double, double, int, int);
double rhyper(double, double, double);
// Negative Binomial Distribution
double dnbinom(double, double, double, int);
double pnbinom(double, double, double, int, int);
double qnbinom(double, double, double, int, int);
double rnbinom(double, double);
// Poisson Distribution
double dpois(double, double, int);
double ppois(double, double, int, int);
double qpois(double, double, int, int);
double rpois(double);
// Weibull Distribution
double dweibull(double, double, double, int);
double pweibull(double, double, double, int, int);
double qweibull(double, double, double, int, int);
double rweibull(double, double);
// Logistic Distribution
double dlogis(double, double, double, int);
double plogis(double, double, double, int, int);
double qlogis(double, double, double, int, int);
double rlogis(double, double);
""")
if __name__ == "__main__":
ffi.compile(verbose=True)