alglib4 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +47 -0
- data/ext/alglib/alglib.cpp +537 -0
- data/ext/alglib/alglib_array_converters.cpp +86 -0
- data/ext/alglib/alglib_array_converters.h +15 -0
- data/ext/alglib/alglib_utils.cpp +10 -0
- data/ext/alglib/alglib_utils.h +6 -0
- data/ext/alglib/alglibinternal.cpp +21749 -0
- data/ext/alglib/alglibinternal.h +2168 -0
- data/ext/alglib/alglibmisc.cpp +9106 -0
- data/ext/alglib/alglibmisc.h +2114 -0
- data/ext/alglib/ap.cpp +20094 -0
- data/ext/alglib/ap.h +7244 -0
- data/ext/alglib/dataanalysis.cpp +52588 -0
- data/ext/alglib/dataanalysis.h +10601 -0
- data/ext/alglib/diffequations.cpp +1342 -0
- data/ext/alglib/diffequations.h +282 -0
- data/ext/alglib/extconf.rb +5 -0
- data/ext/alglib/fasttransforms.cpp +4696 -0
- data/ext/alglib/fasttransforms.h +1018 -0
- data/ext/alglib/integration.cpp +4249 -0
- data/ext/alglib/integration.h +869 -0
- data/ext/alglib/interpolation.cpp +74502 -0
- data/ext/alglib/interpolation.h +12264 -0
- data/ext/alglib/kernels_avx2.cpp +2171 -0
- data/ext/alglib/kernels_avx2.h +201 -0
- data/ext/alglib/kernels_fma.cpp +1065 -0
- data/ext/alglib/kernels_fma.h +137 -0
- data/ext/alglib/kernels_sse2.cpp +735 -0
- data/ext/alglib/kernels_sse2.h +100 -0
- data/ext/alglib/linalg.cpp +65182 -0
- data/ext/alglib/linalg.h +9927 -0
- data/ext/alglib/optimization.cpp +135331 -0
- data/ext/alglib/optimization.h +19235 -0
- data/ext/alglib/solvers.cpp +20488 -0
- data/ext/alglib/solvers.h +4781 -0
- data/ext/alglib/specialfunctions.cpp +10672 -0
- data/ext/alglib/specialfunctions.h +2305 -0
- data/ext/alglib/statistics.cpp +19791 -0
- data/ext/alglib/statistics.h +1359 -0
- data/ext/alglib/stdafx.h +2 -0
- data/gpl2.txt +339 -0
- data/gpl3.txt +674 -0
- data/lib/alglib/version.rb +3 -0
- data/lib/alglib.rb +4 -0
- metadata +101 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: a3aee870b0d2e9667bd0e978a055f39ea975a4fb2fdba253139a4704a3569c25
|
4
|
+
data.tar.gz: c9beecf884b47e975e95eae558c068b5b8bd5485a35ed7515ffeacbde65e7486
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 52719d634e362bd7309fa56dcb383862f51197442f076a678980d9d7ed91a191fabf5804e1f9a453debf2001d703512e1ea1cc58a08a61e28d518222fc1fc963
|
7
|
+
data.tar.gz: 2fc1f983cf849ff546089d17ddde8ba9dc69713602308e7bc8f121c5bbd33422f4947eafd3a2e464adbdc9edfbc1afa02a235428ef1ec202644a2dd7718207ff
|
data/README.md
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# ruby-alglib
|
2
|
+
|
3
|
+
[](https://github.com/kojix2/ruby-alglib/actions/workflows/ci.yml)
|
4
|
+
|
5
|
+
- `statistics.h` of [ALGLIB](https://www.alglib.net/) for Ruby.
|
6
|
+
- ALGLIB is a numerical analysis and data processing library. This repository provides bindings primarily for statistics.
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
From source code:
|
11
|
+
|
12
|
+
```sh
|
13
|
+
git clone https://github.com/kojix2/ruby-alglib
|
14
|
+
cd ruby-alglib
|
15
|
+
bundle install
|
16
|
+
rake ext:alglib # Download ALGLIB Free Edition from https://www.alglib.net/ and extract to ext/alglib.
|
17
|
+
rake compile
|
18
|
+
rake install
|
19
|
+
```
|
20
|
+
|
21
|
+
- Note that the license of ALGLIB Free Edition is GPL or Personal/Academic license.
|
22
|
+
- If you want to use ALGLIB in a commercial application, you will need to purchase a commercial license.
|
23
|
+
- [Can I use ALGLIB Free Edition in a commercial application which runs on server?](https://www.alglib.net/faq.php#6bca163136cda10b16de68704cbea625)
|
24
|
+
- You can also use the Commercial Edition of ALGLIB. In that case, you need to replace the files in `ext/alglib` with the files in the Commercial Edition.
|
25
|
+
- Windows is not supported.
|
26
|
+
|
27
|
+
## Usage
|
28
|
+
|
29
|
+
`sample_moments` `sample_mean` `sample_variance` `sample_skewness` `sample_kurtosis` `sample_adev` `sample_median` `sample_percentile` `cov2` `pearson_corr2` `spearman_corr2` `pearson_correlation_significance` `spearman_rank_correlation_significance` `jarque_bera_test` `f_test` `one_sample_variance_test` `wilcoxon_signed_rank_test` `mann_whitney_u_test` `student_test_1` `student_test_2` `unequal_variance_t_test`
|
30
|
+
|
31
|
+
## Development
|
32
|
+
|
33
|
+
Not-To-Do List
|
34
|
+
|
35
|
+
- Creating namespaces under Alglib. (e.g. Alglib::Statistics)
|
36
|
+
- Trying to implement all functions even if you do not plan to use them.
|
37
|
+
- Adding features that will require frequent maintenance.
|
38
|
+
- Enforcing the above policies on forked repos.
|
39
|
+
|
40
|
+
## License
|
41
|
+
|
42
|
+
- ruby-alglib itself is distributed under the **MIT** license.
|
43
|
+
- However, [ALGLIB for C++ Free Edition](https://www.alglib.net/download.php) is under the **GPL+** license.
|
44
|
+
- Please read [FAQ](https://www.alglib.net/faq.php) carefully before you use ALGLIB to understand what is allowed in the free version.
|
45
|
+
- [Can I use ALGLIB Free Edition in a commercial application which runs on server?](https://www.alglib.net/faq.php#6bca163136cda10b16de68704cbea625)
|
46
|
+
> You can, but there is at least one reason to buy commercial license. Everything is OK while it is just running on your server. But any action connected with distribution - selling, sublicensing, transferring to someone under nondisclosure agreement - will trigger copyleft clause. So it is safer and more convenient to buy commercial license.
|
47
|
+
- Theoretically, ruby-alglib should work with the commercial version. That is why it is MIT. But we have not verified this.
|
@@ -0,0 +1,537 @@
|
|
1
|
+
#include <rice/rice.hpp>
|
2
|
+
#include <rice/stl.hpp>
|
3
|
+
#include <algorithm>
|
4
|
+
// #include "numo.hpp"
|
5
|
+
#include "dataanalysis.h"
|
6
|
+
#include "statistics.h"
|
7
|
+
#include "alglib_array_converters.h"
|
8
|
+
#include "alglib_utils.h"
|
9
|
+
|
10
|
+
using namespace Rice;
|
11
|
+
|
12
|
+
// pca subpackage
|
13
|
+
|
14
|
+
// void pcabuildbasis(const real_2d_array &x, real_1d_array &s2, real_2d_array &v, const xparams _xparams = alglib::xdefault);
|
15
|
+
Hash rb_pcabuildbasis(Array x)
|
16
|
+
{
|
17
|
+
Hash result;
|
18
|
+
auto a = ruby_array_to_real_2d_array(x);
|
19
|
+
alglib::real_1d_array s2;
|
20
|
+
alglib::real_2d_array v;
|
21
|
+
alglib::pcabuildbasis(a, s2, v, alglib::xdefault);
|
22
|
+
result["s2"] = real_1d_array_to_ruby_array(s2);
|
23
|
+
result["v"] = real_2d_array_to_ruby_array(v);
|
24
|
+
return result;
|
25
|
+
}
|
26
|
+
|
27
|
+
// statistics package
|
28
|
+
|
29
|
+
// void samplemoments(const real_1d_array &x, const ae_int_t n, double &mean, double &variance, double &skewness, double &kurtosis, const xparams _xparams = alglib::xdefault);
|
30
|
+
Hash rb_samplemoments(Array x)
|
31
|
+
{
|
32
|
+
Hash result;
|
33
|
+
auto a = ruby_array_to_real_1d_array(x);
|
34
|
+
double mean, variance, skewness, kurtosis;
|
35
|
+
|
36
|
+
alglib::samplemoments(a, x.size(), mean, variance, skewness, kurtosis, alglib::xdefault);
|
37
|
+
|
38
|
+
result["mean"] = mean;
|
39
|
+
result["variance"] = variance;
|
40
|
+
result["skewness"] = skewness;
|
41
|
+
result["kurtosis"] = kurtosis;
|
42
|
+
|
43
|
+
return result;
|
44
|
+
}
|
45
|
+
|
46
|
+
// double samplemean(const real_1d_array &x, const ae_int_t n, const xparams _xparams = alglib::xdefault);
|
47
|
+
double rb_samplemean(Array x)
|
48
|
+
{
|
49
|
+
auto a = ruby_array_to_real_1d_array(x);
|
50
|
+
return alglib::samplemean(a, x.size());
|
51
|
+
}
|
52
|
+
|
53
|
+
// double samplevariance(const real_1d_array &x, const ae_int_t n, const xparams _xparams = alglib::xdefault);
|
54
|
+
double rb_samplevariance(Array x)
|
55
|
+
{
|
56
|
+
auto a = ruby_array_to_real_1d_array(x);
|
57
|
+
return alglib::samplevariance(a, x.size());
|
58
|
+
}
|
59
|
+
|
60
|
+
// double sampleskewness(const real_1d_array &x, const ae_int_t n, const xparams _xparams = alglib::xdefault);
|
61
|
+
double rb_sampleskewness(Array x)
|
62
|
+
{
|
63
|
+
auto a = ruby_array_to_real_1d_array(x);
|
64
|
+
return alglib::sampleskewness(a, x.size());
|
65
|
+
}
|
66
|
+
|
67
|
+
// double samplekurtosis(const real_1d_array &x, const ae_int_t n, const xparams _xparams = alglib::xdefault);
|
68
|
+
double rb_samplekurtosis(Array x)
|
69
|
+
{
|
70
|
+
auto a = ruby_array_to_real_1d_array(x);
|
71
|
+
return alglib::samplekurtosis(a, x.size());
|
72
|
+
}
|
73
|
+
|
74
|
+
// void sampleadev(const real_1d_array &x, const ae_int_t n, double &adev, const xparams _xparams = alglib::xdefault);
|
75
|
+
double rb_sampleadev(Array x)
|
76
|
+
{
|
77
|
+
auto a = ruby_array_to_real_1d_array(x);
|
78
|
+
double adev;
|
79
|
+
alglib::sampleadev(a, x.size(), adev);
|
80
|
+
return adev;
|
81
|
+
}
|
82
|
+
|
83
|
+
// void samplemedian(const real_1d_array &x, const ae_int_t n, double &median, const xparams _xparams = alglib::xdefault);
|
84
|
+
double rb_samplemedian(Array x)
|
85
|
+
{
|
86
|
+
auto a = ruby_array_to_real_1d_array(x);
|
87
|
+
double median;
|
88
|
+
alglib::samplemedian(a, x.size(), median);
|
89
|
+
return median;
|
90
|
+
}
|
91
|
+
|
92
|
+
// void samplepercentile(const real_1d_array &x, const ae_int_t n, const double p, double &v, const xparams _xparams = alglib::xdefault);
|
93
|
+
double rb_samplepercentile(Array x, double p)
|
94
|
+
{
|
95
|
+
auto a = ruby_array_to_real_1d_array(x);
|
96
|
+
double v;
|
97
|
+
alglib::samplepercentile(a, x.size(), p, v);
|
98
|
+
return v;
|
99
|
+
}
|
100
|
+
|
101
|
+
// double cov2(const real_1d_array &x, const real_1d_array &y, const ae_int_t n, const xparams _xparams = alglib::xdefault);
|
102
|
+
double rb_cov2(Array x, Array y)
|
103
|
+
{
|
104
|
+
check_size(x, y);
|
105
|
+
auto a = ruby_array_to_real_1d_array(x);
|
106
|
+
auto b = ruby_array_to_real_1d_array(y);
|
107
|
+
return alglib::cov2(a, b, x.size());
|
108
|
+
}
|
109
|
+
|
110
|
+
// double pearsoncorr2(const real_1d_array &x, const real_1d_array &y, const ae_int_t n, const xparams _xparams = alglib::xdefault);
|
111
|
+
double rb_pearsoncorr2(Array x, Array y)
|
112
|
+
{
|
113
|
+
check_size(x, y);
|
114
|
+
auto a = ruby_array_to_real_1d_array(x);
|
115
|
+
auto b = ruby_array_to_real_1d_array(y);
|
116
|
+
return alglib::pearsoncorr2(a, b, x.size());
|
117
|
+
}
|
118
|
+
|
119
|
+
// double spearmancorr2(const real_1d_array &x, const real_1d_array &y, const ae_int_t n, const xparams _xparams = alglib::xdefault);
|
120
|
+
double rb_spearmancorr2(Array x, Array y)
|
121
|
+
{
|
122
|
+
check_size(x, y);
|
123
|
+
auto a = ruby_array_to_real_1d_array(x);
|
124
|
+
auto b = ruby_array_to_real_1d_array(y);
|
125
|
+
return alglib::spearmancorr2(a, b, x.size());
|
126
|
+
}
|
127
|
+
|
128
|
+
// void covm(const real_2d_array &x, const ae_int_t n, const ae_int_t m, real_2d_array &c, const xparams _xparams = alglib::xdefault);
|
129
|
+
|
130
|
+
// void pearsoncorrm(const real_2d_array &x, const ae_int_t n, const ae_int_t m, real_2d_array &c, const xparams _xparams = alglib::xdefault);
|
131
|
+
|
132
|
+
// void spearmancorrm(const real_2d_array &x, const ae_int_t n, const ae_int_t m, real_2d_array &c, const xparams _xparams = alglib::xdefault);
|
133
|
+
|
134
|
+
// void covm2(const real_2d_array &x, const real_2d_array &y, const ae_int_t n, const ae_int_t m1, const ae_int_t m2, real_2d_array &c, const xparams _xparams = alglib::xdefault);
|
135
|
+
|
136
|
+
// void pearsoncorrm2(const real_2d_array &x, const real_2d_array &y, const ae_int_t n, const ae_int_t m1, const ae_int_t m2, real_2d_array &c, const xparams _xparams = alglib::xdefault);
|
137
|
+
|
138
|
+
// void spearmancorrm2(const real_2d_array &x, const real_2d_array &y, const ae_int_t n, const ae_int_t m1, const ae_int_t m2, real_2d_array &c, const xparams _xparams = alglib::xdefault);
|
139
|
+
|
140
|
+
// void rankdata(real_2d_array &xy, const ae_int_t npoints, const ae_int_t nfeatures, const xparams _xparams = alglib::xdefault);
|
141
|
+
|
142
|
+
// void rankdatacentered(real_2d_array &xy, const ae_int_t npoints, const ae_int_t nfeatures, const xparams _xparams = alglib::xdefault);
|
143
|
+
|
144
|
+
// Helper function to generic statistical tests
|
145
|
+
template <typename Func, typename... Args>
|
146
|
+
Hash perform_test(Func test, Args... args)
|
147
|
+
{
|
148
|
+
Hash result;
|
149
|
+
double bothtails, lefttail, righttail;
|
150
|
+
test(args..., bothtails, lefttail, righttail, alglib::xdefault);
|
151
|
+
result["bothtails"] = bothtails;
|
152
|
+
result["lefttail"] = lefttail;
|
153
|
+
result["righttail"] = righttail;
|
154
|
+
return result;
|
155
|
+
}
|
156
|
+
|
157
|
+
// void pearsoncorrelationsignificance(const double r, const ae_int_t n, double &bothtails, double &lefttail, double &righttail, const xparams _xparams = alglib::xdefault);
|
158
|
+
Hash rb_pearsoncorrelationsignificance(double r, alglib::ae_int_t n)
|
159
|
+
{
|
160
|
+
return perform_test(alglib::pearsoncorrelationsignificance, r, n);
|
161
|
+
}
|
162
|
+
|
163
|
+
// void spearmanrankcorrelationsignificance(const double r, const ae_int_t n, double &bothtails, double &lefttail, double &righttail, const xparams _xparams = alglib::xdefault);
|
164
|
+
Hash rb_spearmanrankcorrelationsignificance(double r, alglib::ae_int_t n)
|
165
|
+
{
|
166
|
+
return perform_test(alglib::spearmanrankcorrelationsignificance, r, n);
|
167
|
+
}
|
168
|
+
|
169
|
+
Hash rb_jarqueberatest(Array x)
|
170
|
+
{
|
171
|
+
Hash result;
|
172
|
+
auto a = ruby_array_to_real_1d_array(x);
|
173
|
+
double p;
|
174
|
+
alglib::jarqueberatest(a, x.size(), p);
|
175
|
+
result["p"] = p;
|
176
|
+
return result;
|
177
|
+
}
|
178
|
+
|
179
|
+
Hash rb_ftest(Array x, Array y)
|
180
|
+
{
|
181
|
+
auto a = ruby_array_to_real_1d_array(x);
|
182
|
+
auto b = ruby_array_to_real_1d_array(y);
|
183
|
+
return perform_test(alglib::ftest, a, x.size(), b, y.size());
|
184
|
+
}
|
185
|
+
|
186
|
+
Hash rb_onesamplevariancetest(Array x, double variance)
|
187
|
+
{
|
188
|
+
auto a = ruby_array_to_real_1d_array(x);
|
189
|
+
return perform_test(alglib::onesamplevariancetest, a, x.size(), variance);
|
190
|
+
}
|
191
|
+
|
192
|
+
Hash rb_wilcoxonsignedranktest(Array x, double e)
|
193
|
+
{
|
194
|
+
auto a = ruby_array_to_real_1d_array(x);
|
195
|
+
return perform_test(alglib::wilcoxonsignedranktest, a, x.size(), e);
|
196
|
+
}
|
197
|
+
|
198
|
+
Hash rb_mannwhitneyutest(Array x, Array y)
|
199
|
+
{
|
200
|
+
auto a = ruby_array_to_real_1d_array(x);
|
201
|
+
auto b = ruby_array_to_real_1d_array(y);
|
202
|
+
return perform_test(alglib::mannwhitneyutest, a, x.size(), b, y.size());
|
203
|
+
}
|
204
|
+
|
205
|
+
Hash rb_studentttest1(Array x, double mean)
|
206
|
+
{
|
207
|
+
auto a = ruby_array_to_real_1d_array(x);
|
208
|
+
return perform_test(alglib::studentttest1, a, x.size(), mean);
|
209
|
+
}
|
210
|
+
|
211
|
+
Hash rb_studentttest2(Array x, Array y)
|
212
|
+
{
|
213
|
+
auto a = ruby_array_to_real_1d_array(x);
|
214
|
+
auto b = ruby_array_to_real_1d_array(y);
|
215
|
+
return perform_test(alglib::studentttest2, a, x.size(), b, y.size());
|
216
|
+
}
|
217
|
+
|
218
|
+
Hash rb_unequalvariancettest(Array x, Array y)
|
219
|
+
{
|
220
|
+
auto a = ruby_array_to_real_1d_array(x);
|
221
|
+
auto b = ruby_array_to_real_1d_array(y);
|
222
|
+
return perform_test(alglib::unequalvariancettest, a, x.size(), b, y.size());
|
223
|
+
}
|
224
|
+
|
225
|
+
// specialfunctions.h
|
226
|
+
|
227
|
+
// double gammafunction(const double x, const xparams _xparams = alglib::xdefault);
|
228
|
+
double rb_gammafunction(double x)
|
229
|
+
{
|
230
|
+
return alglib::gammafunction(x);
|
231
|
+
}
|
232
|
+
|
233
|
+
// double lngamma(const double x, double &sgngam, const xparams _xparams = alglib::xdefault);
|
234
|
+
Array rb_lngamma(double x)
|
235
|
+
{
|
236
|
+
Array result = Array(rb_ary_new2(2));
|
237
|
+
double sgngam;
|
238
|
+
result.push(alglib::lngamma(x, sgngam));
|
239
|
+
result.push(sgngam);
|
240
|
+
return result;
|
241
|
+
}
|
242
|
+
|
243
|
+
// double errorfunction(const double x, const xparams _xparams = alglib::xdefault);
|
244
|
+
double rb_errorfunction(double x)
|
245
|
+
{
|
246
|
+
return alglib::errorfunction(x);
|
247
|
+
}
|
248
|
+
|
249
|
+
// double errorfunctionc(const double x, const xparams _xparams = alglib::xdefault);
|
250
|
+
double rb_errorfunctionc(double x)
|
251
|
+
{
|
252
|
+
return alglib::errorfunctionc(x);
|
253
|
+
}
|
254
|
+
|
255
|
+
// double normalpdf(const double x, const xparams _xparams = alglib::xdefault);
|
256
|
+
double rb_normalpdf(double x)
|
257
|
+
{
|
258
|
+
return alglib::normalpdf(x);
|
259
|
+
}
|
260
|
+
|
261
|
+
// double normalcdf(const double x, const xparams _xparams = alglib::xdefault);
|
262
|
+
double rb_normalcdf(double x)
|
263
|
+
{
|
264
|
+
return alglib::normalcdf(x);
|
265
|
+
}
|
266
|
+
|
267
|
+
// double inverf(const double e, const xparams _xparams = alglib::xdefault);
|
268
|
+
double rb_inverf(double e)
|
269
|
+
{
|
270
|
+
return alglib::inverf(e);
|
271
|
+
}
|
272
|
+
|
273
|
+
// double invnormalcdf(const double y0, const xparams _xparams = alglib::xdefault);
|
274
|
+
double rb_invnormalcdf(double y0)
|
275
|
+
{
|
276
|
+
return alglib::invnormalcdf(y0);
|
277
|
+
}
|
278
|
+
|
279
|
+
// double bivariatenormalpdf(const double x, const double y, const double rho, const xparams _xparams = alglib::xdefault);
|
280
|
+
double rb_bivariatenormalpdf(double x, double y, double rho)
|
281
|
+
{
|
282
|
+
return alglib::bivariatenormalpdf(x, y, rho);
|
283
|
+
}
|
284
|
+
|
285
|
+
// double bivariatenormalcdf(const double x, const double y, const double rho, const xparams _xparams = alglib::xdefault);
|
286
|
+
double rb_bivariatenormalcdf(double x, double y, double rho)
|
287
|
+
{
|
288
|
+
return alglib::bivariatenormalcdf(x, y, rho);
|
289
|
+
}
|
290
|
+
|
291
|
+
// double incompletebeta(const double a, const double b, const double x, const xparams _xparams = alglib::xdefault);
|
292
|
+
double rb_incompletebeta(double a, double b, double x)
|
293
|
+
{
|
294
|
+
return alglib::incompletebeta(a, b, x);
|
295
|
+
}
|
296
|
+
|
297
|
+
// double invincompletebeta(const double a, const double b, const double y, const xparams _xparams = alglib::xdefault);
|
298
|
+
double rb_invincompletebeta(double a, double b, double y)
|
299
|
+
{
|
300
|
+
return alglib::invincompletebeta(a, b, y);
|
301
|
+
}
|
302
|
+
|
303
|
+
// double studenttdistribution(const ae_int_t k, const double t, const xparams _xparams = alglib::xdefault);
|
304
|
+
double rb_studenttdistribution(alglib::ae_int_t k, double t)
|
305
|
+
{
|
306
|
+
return alglib::studenttdistribution(k, t);
|
307
|
+
}
|
308
|
+
|
309
|
+
// double invstudenttdistribution(const ae_int_t k, const double p, const xparams _xparams = alglib::xdefault);
|
310
|
+
double rb_invstudenttdistribution(alglib::ae_int_t k, double p)
|
311
|
+
{
|
312
|
+
return alglib::invstudenttdistribution(k, p);
|
313
|
+
}
|
314
|
+
|
315
|
+
// double fdistribution(const ae_int_t a, const ae_int_t b, const double x, const xparams _xparams = alglib::xdefault);
|
316
|
+
double rb_fdistribution(alglib::ae_int_t a, alglib::ae_int_t b, double x)
|
317
|
+
{
|
318
|
+
return alglib::fdistribution(a, b, x);
|
319
|
+
}
|
320
|
+
|
321
|
+
// double fcdistribution(const ae_int_t a, const ae_int_t b, const double x, const xparams _xparams = alglib::xdefault);
|
322
|
+
double rb_fcdistribution(alglib::ae_int_t a, alglib::ae_int_t b, double x)
|
323
|
+
{
|
324
|
+
return alglib::fcdistribution(a, b, x);
|
325
|
+
}
|
326
|
+
|
327
|
+
// double invfdistribution(const ae_int_t a, const ae_int_t b, const double y, const xparams _xparams = alglib::xdefault);
|
328
|
+
double rb_invfdistribution(alglib::ae_int_t a, alglib::ae_int_t b, double y)
|
329
|
+
{
|
330
|
+
return alglib::invfdistribution(a, b, y);
|
331
|
+
}
|
332
|
+
|
333
|
+
// double incompletegamma(const double a, const double x, const xparams _xparams = alglib::xdefault);
|
334
|
+
double rb_incompletegamma(double a, double x)
|
335
|
+
{
|
336
|
+
return alglib::incompletegamma(a, x);
|
337
|
+
}
|
338
|
+
|
339
|
+
// double incompletegammac(const double a, const double x, const xparams _xparams = alglib::xdefault);
|
340
|
+
double rb_incompletegammac(double a, double x)
|
341
|
+
{
|
342
|
+
return alglib::incompletegammac(a, x);
|
343
|
+
}
|
344
|
+
|
345
|
+
// double invincompletegammac(const double a, const double y0, const xparams _xparams = alglib::xdefault);
|
346
|
+
double rb_invincompletegammac(double a, double y0)
|
347
|
+
{
|
348
|
+
return alglib::invincompletegammac(a, y0);
|
349
|
+
}
|
350
|
+
|
351
|
+
// double chisquaredistribution(const double v, const double x, const xparams _xparams = alglib::xdefault);
|
352
|
+
double rb_chisquaredistribution(double v, double x)
|
353
|
+
{
|
354
|
+
return alglib::chisquaredistribution(v, x);
|
355
|
+
}
|
356
|
+
|
357
|
+
// double chisquarecdistribution(const double v, const double x, const xparams _xparams = alglib::xdefault);
|
358
|
+
double rb_chisquarecdistribution(double v, double x)
|
359
|
+
{
|
360
|
+
return alglib::chisquarecdistribution(v, x);
|
361
|
+
}
|
362
|
+
|
363
|
+
// double invchisquaredistribution(const double v, const double y, const xparams _xparams = alglib::xdefault);
|
364
|
+
double rb_invchisquaredistribution(double v, double y)
|
365
|
+
{
|
366
|
+
return alglib::invchisquaredistribution(v, y);
|
367
|
+
}
|
368
|
+
|
369
|
+
// double binomialdistribution(const ae_int_t k, const ae_int_t n, const double p, const xparams _xparams = alglib::xdefault);
|
370
|
+
double rb_binomialdistribution(alglib::ae_int_t k, alglib::ae_int_t n, double p)
|
371
|
+
{
|
372
|
+
return alglib::binomialdistribution(k, n, p);
|
373
|
+
}
|
374
|
+
|
375
|
+
// double binomialcdistribution(const ae_int_t k, const ae_int_t n, const double p, const xparams _xparams = alglib::xdefault);
|
376
|
+
double rb_binomialcdistribution(alglib::ae_int_t k, alglib::ae_int_t n, double p)
|
377
|
+
{
|
378
|
+
return alglib::binomialcdistribution(k, n, p);
|
379
|
+
}
|
380
|
+
|
381
|
+
// double invbinomialdistribution(const ae_int_t k, const ae_int_t n, const double y, const xparams _xparams = alglib::xdefault);
|
382
|
+
double rb_invbinomialdistribution(alglib::ae_int_t k, alglib::ae_int_t n, double y)
|
383
|
+
{
|
384
|
+
return alglib::invbinomialdistribution(k, n, y);
|
385
|
+
}
|
386
|
+
|
387
|
+
// double exponentialintegralei(const double x, const xparams _xparams = alglib::xdefault);
|
388
|
+
double rb_exponentialintegralei(double x)
|
389
|
+
{
|
390
|
+
return alglib::exponentialintegralei(x);
|
391
|
+
}
|
392
|
+
|
393
|
+
// double exponentialintegralen(const double x, const ae_int_t n, const xparams _xparams = alglib::xdefault);
|
394
|
+
double rb_exponentialintegralen(double x, alglib::ae_int_t n)
|
395
|
+
{
|
396
|
+
return alglib::exponentialintegralen(x, n);
|
397
|
+
}
|
398
|
+
|
399
|
+
//
|
400
|
+
|
401
|
+
// double poissondistribution(const ae_int_t k, const double m, const xparams _xparams = alglib::xdefault);
|
402
|
+
double rb_poissondistribution(alglib::ae_int_t k, double m)
|
403
|
+
{
|
404
|
+
return alglib::poissondistribution(k, m);
|
405
|
+
}
|
406
|
+
|
407
|
+
// double poissoncdistribution(const ae_int_t k, const double m, const xparams _xparams = alglib::xdefault);
|
408
|
+
double rb_poissoncdistribution(alglib::ae_int_t k, double m)
|
409
|
+
{
|
410
|
+
return alglib::poissoncdistribution(k, m);
|
411
|
+
}
|
412
|
+
|
413
|
+
// double invpoissondistribution(const ae_int_t k, const double y, const xparams _xparams = alglib::xdefault);
|
414
|
+
double rb_invpoissondistribution(alglib::ae_int_t k, double y)
|
415
|
+
{
|
416
|
+
return alglib::invpoissondistribution(k, y);
|
417
|
+
}
|
418
|
+
|
419
|
+
// double beta(const double a, const double b, const xparams _xparams = alglib::xdefault);
|
420
|
+
double rb_beta(double a, double b)
|
421
|
+
{
|
422
|
+
return alglib::beta(a, b);
|
423
|
+
}
|
424
|
+
|
425
|
+
// alglibmisc.h
|
426
|
+
|
427
|
+
double rb_hqrndnormal()
|
428
|
+
{
|
429
|
+
alglib::hqrndstate state;
|
430
|
+
alglib::hqrndrandomize(state);
|
431
|
+
return alglib::hqrndnormal(state);
|
432
|
+
}
|
433
|
+
|
434
|
+
Array rb_hqrndnormalv(alglib::ae_int_t n)
|
435
|
+
{
|
436
|
+
Array result = Array(rb_ary_new2(n));
|
437
|
+
alglib::hqrndstate state;
|
438
|
+
alglib::hqrndrandomize(state);
|
439
|
+
alglib::real_1d_array x;
|
440
|
+
alglib::hqrndnormalv(state, n, x);
|
441
|
+
for (alglib::ae_int_t i = 0; i < n; i++)
|
442
|
+
{
|
443
|
+
result.push(x[i]);
|
444
|
+
}
|
445
|
+
return result;
|
446
|
+
}
|
447
|
+
|
448
|
+
extern "C" void Init_alglib()
|
449
|
+
{
|
450
|
+
Module rb_mAlglib = define_module("Alglib");
|
451
|
+
|
452
|
+
// Data_Type<alglib::hqrndstate> rb_cHqRndState =
|
453
|
+
// define_class_under<alglib::hqrndstate>(rb_mAlglib, "HqRndState")
|
454
|
+
// .define_constructor(Constructor<alglib::hqrndstate>())
|
455
|
+
// .define_method("initialize_copy", &alglib::hqrndstate::operator=);
|
456
|
+
|
457
|
+
Data_Type<alglib::real_1d_array> rb_cReal1DArray =
|
458
|
+
define_class_under<alglib::real_1d_array>(rb_mAlglib, "Real1DArray")
|
459
|
+
.define_constructor(Constructor<alglib::real_1d_array>())
|
460
|
+
.define_method("getcontent", static_cast<double *(alglib::real_1d_array::*)()>(&alglib::real_1d_array::getcontent));
|
461
|
+
|
462
|
+
Data_Type<alglib::integer_1d_array> rb_cInteger1DArray =
|
463
|
+
define_class_under<alglib::integer_1d_array>(rb_mAlglib, "Integer1DArray")
|
464
|
+
.define_constructor(Constructor<alglib::integer_1d_array>())
|
465
|
+
.define_method("getcontent", static_cast<alglib::ae_int_t *(alglib::integer_1d_array::*)()>(&alglib::integer_1d_array::getcontent));
|
466
|
+
|
467
|
+
Data_Type<alglib::real_2d_array> rb_cReal2DArray =
|
468
|
+
define_class_under<alglib::real_2d_array>(rb_mAlglib, "Real2DArray")
|
469
|
+
.define_constructor(Constructor<alglib::real_2d_array>())
|
470
|
+
.define_method("getcontent", static_cast<double *(alglib::real_2d_array::*)(alglib::ae_int_t)>(&alglib::real_2d_array::operator[]));
|
471
|
+
|
472
|
+
rb_mAlglib
|
473
|
+
.define_module_function("ruby_array_to_real_1d_array", &ruby_array_to_real_1d_array)
|
474
|
+
.define_module_function("ruby_array_to_integer_1d_array", &ruby_array_to_integer_1d_array)
|
475
|
+
.define_module_function("ruby_array_to_real_2d_array", &ruby_array_to_real_2d_array)
|
476
|
+
.define_module_function("real_1d_array_to_ruby_array", &real_1d_array_to_ruby_array)
|
477
|
+
.define_module_function("real_2d_array_to_ruby_array", &real_2d_array_to_ruby_array)
|
478
|
+
.define_module_function("integer_1d_array_to_ruby_array", &integer_1d_array_to_ruby_array)
|
479
|
+
.define_module_function("pca_build_basis", &rb_pcabuildbasis);
|
480
|
+
|
481
|
+
rb_mAlglib
|
482
|
+
.define_module_function("sample_moments", &rb_samplemoments)
|
483
|
+
.define_module_function("sample_mean", &rb_samplemean)
|
484
|
+
.define_module_function("sample_variance", &rb_samplevariance)
|
485
|
+
.define_module_function("sample_skewness", &rb_sampleskewness)
|
486
|
+
.define_module_function("sample_kurtosis", &rb_samplekurtosis)
|
487
|
+
.define_module_function("sample_adev", &rb_sampleadev)
|
488
|
+
.define_module_function("sample_median", &rb_samplemedian)
|
489
|
+
.define_module_function("sample_percentile", &rb_samplepercentile)
|
490
|
+
.define_module_function("cov2", &rb_cov2)
|
491
|
+
.define_module_function("pearson_corr2", &rb_pearsoncorr2)
|
492
|
+
.define_module_function("spearman_corr2", &rb_spearmancorr2)
|
493
|
+
.define_module_function("pearson_correlation_significance", &rb_pearsoncorrelationsignificance)
|
494
|
+
.define_module_function("spearman_rank_correlation_significance", &rb_spearmanrankcorrelationsignificance)
|
495
|
+
.define_module_function("jarque_bera_test", &rb_jarqueberatest)
|
496
|
+
.define_module_function("f_test", &rb_ftest)
|
497
|
+
.define_module_function("one_sample_variance_test", &rb_onesamplevariancetest)
|
498
|
+
.define_module_function("wilcoxon_signed_rank_test", &rb_wilcoxonsignedranktest)
|
499
|
+
.define_module_function("mann_whitney_u_test", &rb_mannwhitneyutest)
|
500
|
+
.define_module_function("student_test_1", &rb_studentttest1)
|
501
|
+
.define_module_function("student_test_2", &rb_studentttest2)
|
502
|
+
.define_module_function("unequal_variance_t_test", &rb_unequalvariancettest)
|
503
|
+
.define_module_function("hqrnd_normal", &rb_hqrndnormal)
|
504
|
+
.define_module_function("hqrnd_normalv", &rb_hqrndnormalv)
|
505
|
+
.define_module_function("gamma_function", &rb_gammafunction)
|
506
|
+
.define_module_function("lngamma", &rb_lngamma)
|
507
|
+
.define_module_function("error_function", &rb_errorfunction)
|
508
|
+
.define_module_function("error_functionc", &rb_errorfunctionc)
|
509
|
+
.define_module_function("normal_pdf", &rb_normalpdf)
|
510
|
+
.define_module_function("normal_cdf", &rb_normalcdf)
|
511
|
+
.define_module_function("inv_erf", &rb_inverf)
|
512
|
+
.define_module_function("inv_normal_cdf", &rb_invnormalcdf)
|
513
|
+
.define_module_function("bivariate_normal_pdf", &rb_bivariatenormalpdf)
|
514
|
+
.define_module_function("bivariate_normal_cdf", &rb_bivariatenormalcdf)
|
515
|
+
.define_module_function("incomplete_beta", &rb_incompletebeta)
|
516
|
+
.define_module_function("inv_incomplete_beta", &rb_invincompletebeta)
|
517
|
+
.define_module_function("student_t_distribution", &rb_studenttdistribution)
|
518
|
+
.define_module_function("inv_student_t_distribution", &rb_invstudenttdistribution)
|
519
|
+
.define_module_function("f_distribution", &rb_fdistribution)
|
520
|
+
.define_module_function("fc_distribution", &rb_fcdistribution)
|
521
|
+
.define_module_function("inv_f_distribution", &rb_invfdistribution)
|
522
|
+
.define_module_function("incomplete_gamma", &rb_incompletegamma)
|
523
|
+
.define_module_function("incomplete_gamma_c", &rb_incompletegammac)
|
524
|
+
.define_module_function("inv_incomplete_gamma_c", &rb_invincompletegammac)
|
525
|
+
.define_module_function("chi_square_distribution", &rb_chisquaredistribution)
|
526
|
+
.define_module_function("chi_square_c_distribution", &rb_chisquarecdistribution)
|
527
|
+
.define_module_function("inv_chi_square_distribution", &rb_invchisquaredistribution)
|
528
|
+
.define_module_function("binomial_distribution", &rb_binomialdistribution)
|
529
|
+
.define_module_function("binomial_c_distribution", &rb_binomialcdistribution)
|
530
|
+
.define_module_function("inv_binomial_distribution", &rb_invbinomialdistribution)
|
531
|
+
.define_module_function("exponential_integralei", &rb_exponentialintegralei)
|
532
|
+
.define_module_function("exponential_integralen", &rb_exponentialintegralen)
|
533
|
+
.define_module_function("poisson_distribution", &rb_poissondistribution)
|
534
|
+
.define_module_function("poisson_c_distribution", &rb_poissoncdistribution)
|
535
|
+
.define_module_function("inv_poisson_distribution", &rb_invpoissondistribution)
|
536
|
+
.define_module_function("beta", &rb_beta);
|
537
|
+
}
|
@@ -0,0 +1,86 @@
|
|
1
|
+
#include "alglib_array_converters.h"
|
2
|
+
|
3
|
+
alglib::real_1d_array ruby_array_to_real_1d_array(Array ruby_array)
|
4
|
+
{
|
5
|
+
alglib::real_1d_array real_array;
|
6
|
+
real_array.setlength(ruby_array.size());
|
7
|
+
for (size_t i = 0; i < ruby_array.size(); i++)
|
8
|
+
{
|
9
|
+
real_array[i] = detail::From_Ruby<double>().convert(ruby_array[i].value());
|
10
|
+
}
|
11
|
+
return real_array;
|
12
|
+
}
|
13
|
+
|
14
|
+
alglib::integer_1d_array ruby_array_to_integer_1d_array(Array ruby_array)
|
15
|
+
{
|
16
|
+
alglib::integer_1d_array integer_array;
|
17
|
+
integer_array.setlength(ruby_array.size());
|
18
|
+
for (size_t i = 0; i < ruby_array.size(); i++)
|
19
|
+
{
|
20
|
+
integer_array[i] = detail::From_Ruby<int>().convert(ruby_array[i].value());
|
21
|
+
}
|
22
|
+
return integer_array;
|
23
|
+
}
|
24
|
+
|
25
|
+
Array real_1d_array_to_ruby_array(const alglib::real_1d_array &arr)
|
26
|
+
{
|
27
|
+
Array ruby_array;
|
28
|
+
for (int i = 0; i < arr.length(); ++i)
|
29
|
+
{
|
30
|
+
ruby_array.push(arr[i]);
|
31
|
+
}
|
32
|
+
return ruby_array;
|
33
|
+
}
|
34
|
+
|
35
|
+
Array integer_1d_array_to_ruby_array(const alglib::integer_1d_array &arr)
|
36
|
+
{
|
37
|
+
Array ruby_array;
|
38
|
+
for (int i = 0; i < arr.length(); ++i)
|
39
|
+
{
|
40
|
+
ruby_array.push(arr[i]);
|
41
|
+
}
|
42
|
+
return ruby_array;
|
43
|
+
}
|
44
|
+
|
45
|
+
alglib::real_2d_array ruby_array_to_real_2d_array(Array ruby_array)
|
46
|
+
{
|
47
|
+
if (ruby_array.size() == 0)
|
48
|
+
{
|
49
|
+
throw std::invalid_argument("Input array is empty");
|
50
|
+
}
|
51
|
+
|
52
|
+
int rows = ruby_array.size();
|
53
|
+
int cols = detail::From_Ruby<Array>().convert(ruby_array.call("first")).size();
|
54
|
+
|
55
|
+
alglib::real_2d_array real_array;
|
56
|
+
real_array.setlength(rows, cols);
|
57
|
+
|
58
|
+
for (int i = 0; i < rows; ++i)
|
59
|
+
{
|
60
|
+
Array row = detail::From_Ruby<Array>().convert(ruby_array[i].value());
|
61
|
+
if (row.size() != cols)
|
62
|
+
{
|
63
|
+
throw std::invalid_argument("All rows must have the same size");
|
64
|
+
}
|
65
|
+
for (int j = 0; j < cols; ++j)
|
66
|
+
{
|
67
|
+
real_array[i][j] = detail::From_Ruby<double>().convert(row[j].value());
|
68
|
+
}
|
69
|
+
}
|
70
|
+
return real_array;
|
71
|
+
}
|
72
|
+
|
73
|
+
Array real_2d_array_to_ruby_array(const alglib::real_2d_array &real_array)
|
74
|
+
{
|
75
|
+
Array result;
|
76
|
+
for (int i = 0; i < real_array.rows(); i++)
|
77
|
+
{
|
78
|
+
Array row;
|
79
|
+
for (int j = 0; j < real_array.cols(); j++)
|
80
|
+
{
|
81
|
+
row.push(real_array[i][j]);
|
82
|
+
}
|
83
|
+
result.push(row);
|
84
|
+
}
|
85
|
+
return result;
|
86
|
+
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#include <rice/rice.hpp>
|
2
|
+
#include <rice/stl.hpp>
|
3
|
+
#include "ap.h"
|
4
|
+
|
5
|
+
using namespace Rice;
|
6
|
+
|
7
|
+
extern "C"
|
8
|
+
{
|
9
|
+
alglib::real_1d_array ruby_array_to_real_1d_array(Array ruby_array);
|
10
|
+
alglib::integer_1d_array ruby_array_to_integer_1d_array(Array ruby_array);
|
11
|
+
alglib::real_2d_array ruby_array_to_real_2d_array(Array ruby_array);
|
12
|
+
Array real_1d_array_to_ruby_array(const alglib::real_1d_array &arr);
|
13
|
+
Array real_2d_array_to_ruby_array(const alglib::real_2d_array &real_array);
|
14
|
+
Array integer_1d_array_to_ruby_array(const alglib::integer_1d_array &arr);
|
15
|
+
}
|