rb-gsl 1.16.0.5 → 1.16.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (612) hide show
  1. checksums.yaml +4 -4
  2. data/rb-gsl.gemspec +5 -10
  3. metadata +10 -713
  4. data/.gitignore +0 -12
  5. data/.travis.yml +0 -24
  6. data/AUTHORS +0 -12
  7. data/COPYING +0 -341
  8. data/ChangeLog +0 -621
  9. data/Gemfile +0 -4
  10. data/README.md +0 -77
  11. data/Rakefile +0 -20
  12. data/THANKS +0 -17
  13. data/examples/alf/alf.gp +0 -15
  14. data/examples/alf/alf.rb +0 -32
  15. data/examples/blas/blas.rb +0 -13
  16. data/examples/blas/dnrm2.rb +0 -16
  17. data/examples/blas/level1.rb +0 -81
  18. data/examples/blas/level2.rb +0 -11
  19. data/examples/blas/level3.rb +0 -12
  20. data/examples/bspline.rb +0 -57
  21. data/examples/cdf.rb +0 -16
  22. data/examples/cheb.rb +0 -21
  23. data/examples/combination.rb +0 -23
  24. data/examples/complex/RC-lpf.rb +0 -47
  25. data/examples/complex/add.rb +0 -36
  26. data/examples/complex/coerce.rb +0 -14
  27. data/examples/complex/complex.rb +0 -25
  28. data/examples/complex/fpmi.rb +0 -70
  29. data/examples/complex/functions.rb +0 -77
  30. data/examples/complex/michelson.rb +0 -36
  31. data/examples/complex/mul.rb +0 -28
  32. data/examples/complex/oscillator.rb +0 -17
  33. data/examples/complex/set.rb +0 -37
  34. data/examples/const/physconst.rb +0 -151
  35. data/examples/const/travel.rb +0 -45
  36. data/examples/deriv/demo.rb +0 -13
  37. data/examples/deriv/deriv.rb +0 -36
  38. data/examples/deriv/diff.rb +0 -35
  39. data/examples/dht.rb +0 -42
  40. data/examples/dirac.rb +0 -56
  41. data/examples/eigen/eigen.rb +0 -34
  42. data/examples/eigen/herm.rb +0 -22
  43. data/examples/eigen/narray.rb +0 -9
  44. data/examples/eigen/nonsymm.rb +0 -37
  45. data/examples/eigen/nonsymmv.rb +0 -43
  46. data/examples/eigen/qhoscillator.gp +0 -35
  47. data/examples/eigen/qhoscillator.rb +0 -90
  48. data/examples/eigen/vander.rb +0 -41
  49. data/examples/fft/fft.rb +0 -17
  50. data/examples/fft/fft2.rb +0 -17
  51. data/examples/fft/forward.rb +0 -25
  52. data/examples/fft/forward2.rb +0 -26
  53. data/examples/fft/radix2.rb +0 -18
  54. data/examples/fft/real-halfcomplex.rb +0 -33
  55. data/examples/fft/real-halfcomplex2.rb +0 -30
  56. data/examples/fft/realradix2.rb +0 -19
  57. data/examples/fft/sunspot.dat +0 -256
  58. data/examples/fft/sunspot.rb +0 -16
  59. data/examples/fit/expdata.dat +0 -20
  60. data/examples/fit/expfit.rb +0 -31
  61. data/examples/fit/gaussfit.rb +0 -29
  62. data/examples/fit/gaussian_2peaks.rb +0 -34
  63. data/examples/fit/hillfit.rb +0 -40
  64. data/examples/fit/lognormal.rb +0 -26
  65. data/examples/fit/lorentzfit.rb +0 -22
  66. data/examples/fit/multifit.rb +0 -72
  67. data/examples/fit/ndlinear.rb +0 -133
  68. data/examples/fit/nonlinearfit.rb +0 -89
  69. data/examples/fit/plot.gp +0 -36
  70. data/examples/fit/polyfit.rb +0 -9
  71. data/examples/fit/powerfit.rb +0 -21
  72. data/examples/fit/sigmoidfit.rb +0 -40
  73. data/examples/fit/sinfit.rb +0 -22
  74. data/examples/fit/wlinear.rb +0 -46
  75. data/examples/fresnel.rb +0 -11
  76. data/examples/function/function.rb +0 -36
  77. data/examples/function/log.rb +0 -7
  78. data/examples/function/min.rb +0 -33
  79. data/examples/function/sin.rb +0 -10
  80. data/examples/function/synchrotron.rb +0 -18
  81. data/examples/gallery/butterfly.rb +0 -7
  82. data/examples/gallery/cayley.rb +0 -12
  83. data/examples/gallery/cornu.rb +0 -23
  84. data/examples/gallery/eight.rb +0 -11
  85. data/examples/gallery/koch.rb +0 -40
  86. data/examples/gallery/lemniscate.rb +0 -11
  87. data/examples/gallery/polar.rb +0 -11
  88. data/examples/gallery/rgplot/cossin.rb +0 -35
  89. data/examples/gallery/rgplot/rgplot.replaced +0 -0
  90. data/examples/gallery/rgplot/roesller.rb +0 -55
  91. data/examples/gallery/roesller.rb +0 -39
  92. data/examples/gallery/scarabaeus.rb +0 -14
  93. data/examples/histogram/cauchy.rb +0 -27
  94. data/examples/histogram/cauchy.sh +0 -2
  95. data/examples/histogram/exponential.rb +0 -19
  96. data/examples/histogram/gauss.rb +0 -16
  97. data/examples/histogram/gsl-histogram.rb +0 -40
  98. data/examples/histogram/histo2d.rb +0 -31
  99. data/examples/histogram/histo3d.rb +0 -34
  100. data/examples/histogram/histogram-pdf.rb +0 -27
  101. data/examples/histogram/histogram.rb +0 -26
  102. data/examples/histogram/integral.rb +0 -28
  103. data/examples/histogram/poisson.rb +0 -27
  104. data/examples/histogram/power.rb +0 -25
  105. data/examples/histogram/rebin.rb +0 -17
  106. data/examples/histogram/smp.dat +0 -5
  107. data/examples/histogram/xexp.rb +0 -21
  108. data/examples/integration/ahmed.rb +0 -21
  109. data/examples/integration/cosmology.rb +0 -75
  110. data/examples/integration/friedmann.gp +0 -16
  111. data/examples/integration/friedmann.rb +0 -35
  112. data/examples/integration/gamma-zeta.rb +0 -35
  113. data/examples/integration/integration.rb +0 -22
  114. data/examples/integration/qag.rb +0 -8
  115. data/examples/integration/qag2.rb +0 -14
  116. data/examples/integration/qag3.rb +0 -8
  117. data/examples/integration/qagi.rb +0 -28
  118. data/examples/integration/qagi2.rb +0 -49
  119. data/examples/integration/qagiu.rb +0 -29
  120. data/examples/integration/qagp.rb +0 -20
  121. data/examples/integration/qags.rb +0 -14
  122. data/examples/integration/qawc.rb +0 -18
  123. data/examples/integration/qawf.rb +0 -41
  124. data/examples/integration/qawo.rb +0 -29
  125. data/examples/integration/qaws.rb +0 -30
  126. data/examples/integration/qng.rb +0 -17
  127. data/examples/interp/demo.gp +0 -20
  128. data/examples/interp/demo.rb +0 -45
  129. data/examples/interp/interp.rb +0 -37
  130. data/examples/interp/points +0 -10
  131. data/examples/interp/spline.rb +0 -20
  132. data/examples/jacobi/deriv.rb +0 -40
  133. data/examples/jacobi/integrate.rb +0 -34
  134. data/examples/jacobi/interp.rb +0 -43
  135. data/examples/jacobi/jacobi.rb +0 -11
  136. data/examples/linalg/HH.rb +0 -15
  137. data/examples/linalg/HH_narray.rb +0 -13
  138. data/examples/linalg/LQ_solve.rb +0 -73
  139. data/examples/linalg/LU.rb +0 -84
  140. data/examples/linalg/LU2.rb +0 -31
  141. data/examples/linalg/LU_narray.rb +0 -24
  142. data/examples/linalg/PTLQ.rb +0 -47
  143. data/examples/linalg/QR.rb +0 -18
  144. data/examples/linalg/QRPT.rb +0 -47
  145. data/examples/linalg/QR_solve.rb +0 -78
  146. data/examples/linalg/QR_solve_narray.rb +0 -13
  147. data/examples/linalg/SV.rb +0 -16
  148. data/examples/linalg/SV_narray.rb +0 -12
  149. data/examples/linalg/SV_solve.rb +0 -49
  150. data/examples/linalg/chol.rb +0 -29
  151. data/examples/linalg/chol_narray.rb +0 -15
  152. data/examples/linalg/complex.rb +0 -57
  153. data/examples/linalg/invert_narray.rb +0 -10
  154. data/examples/math/const.rb +0 -67
  155. data/examples/math/elementary.rb +0 -35
  156. data/examples/math/functions.rb +0 -41
  157. data/examples/math/inf_nan.rb +0 -34
  158. data/examples/math/minmax.rb +0 -22
  159. data/examples/math/power.rb +0 -18
  160. data/examples/math/test.rb +0 -31
  161. data/examples/matrix/a.dat +0 -0
  162. data/examples/matrix/add.rb +0 -45
  163. data/examples/matrix/b.dat +0 -4
  164. data/examples/matrix/cat.rb +0 -31
  165. data/examples/matrix/colvectors.rb +0 -24
  166. data/examples/matrix/complex.rb +0 -41
  167. data/examples/matrix/det.rb +0 -29
  168. data/examples/matrix/diagonal.rb +0 -23
  169. data/examples/matrix/get_all.rb +0 -159
  170. data/examples/matrix/hilbert.rb +0 -31
  171. data/examples/matrix/iterator.rb +0 -19
  172. data/examples/matrix/matrix.rb +0 -57
  173. data/examples/matrix/minmax.rb +0 -53
  174. data/examples/matrix/mul.rb +0 -39
  175. data/examples/matrix/rand.rb +0 -20
  176. data/examples/matrix/read.rb +0 -29
  177. data/examples/matrix/rowcol.rb +0 -47
  178. data/examples/matrix/set.rb +0 -41
  179. data/examples/matrix/set_all.rb +0 -100
  180. data/examples/matrix/view.rb +0 -32
  181. data/examples/matrix/view_all.rb +0 -148
  182. data/examples/matrix/write.rb +0 -23
  183. data/examples/min.rb +0 -29
  184. data/examples/monte/miser.rb +0 -47
  185. data/examples/monte/monte.rb +0 -47
  186. data/examples/monte/plain.rb +0 -47
  187. data/examples/monte/vegas.rb +0 -46
  188. data/examples/multimin/bundle.rb +0 -66
  189. data/examples/multimin/cqp.rb +0 -109
  190. data/examples/multimin/fdfminimizer.rb +0 -40
  191. data/examples/multimin/fminimizer.rb +0 -41
  192. data/examples/multiroot/demo.rb +0 -36
  193. data/examples/multiroot/fdfsolver.rb +0 -50
  194. data/examples/multiroot/fsolver.rb +0 -33
  195. data/examples/multiroot/fsolver2.rb +0 -32
  196. data/examples/multiroot/fsolver3.rb +0 -26
  197. data/examples/narray/histogram.rb +0 -14
  198. data/examples/narray/mandel.rb +0 -27
  199. data/examples/narray/narray.rb +0 -28
  200. data/examples/narray/narray2.rb +0 -44
  201. data/examples/narray/sf.rb +0 -26
  202. data/examples/ntuple/create.rb +0 -17
  203. data/examples/ntuple/project.rb +0 -31
  204. data/examples/odeiv/binarysystem.gp +0 -23
  205. data/examples/odeiv/binarysystem.rb +0 -104
  206. data/examples/odeiv/demo.gp +0 -24
  207. data/examples/odeiv/demo.rb +0 -69
  208. data/examples/odeiv/demo2.gp +0 -26
  209. data/examples/odeiv/duffing.rb +0 -45
  210. data/examples/odeiv/frei1.rb +0 -109
  211. data/examples/odeiv/frei2.rb +0 -76
  212. data/examples/odeiv/legendre.rb +0 -52
  213. data/examples/odeiv/odeiv.rb +0 -32
  214. data/examples/odeiv/odeiv2.rb +0 -45
  215. data/examples/odeiv/oscillator.rb +0 -42
  216. data/examples/odeiv/sedov.rb +0 -97
  217. data/examples/odeiv/whitedwarf.gp +0 -40
  218. data/examples/odeiv/whitedwarf.rb +0 -158
  219. data/examples/ool/conmin.rb +0 -100
  220. data/examples/ool/gencan.rb +0 -99
  221. data/examples/ool/pgrad.rb +0 -100
  222. data/examples/ool/spg.rb +0 -100
  223. data/examples/pdf/bernoulli.rb +0 -5
  224. data/examples/pdf/beta.rb +0 -7
  225. data/examples/pdf/binomiral.rb +0 -10
  226. data/examples/pdf/cauchy.rb +0 -6
  227. data/examples/pdf/chisq.rb +0 -8
  228. data/examples/pdf/exponential.rb +0 -7
  229. data/examples/pdf/exppow.rb +0 -6
  230. data/examples/pdf/fdist.rb +0 -7
  231. data/examples/pdf/flat.rb +0 -7
  232. data/examples/pdf/gamma.rb +0 -8
  233. data/examples/pdf/gauss-tail.rb +0 -5
  234. data/examples/pdf/gauss.rb +0 -6
  235. data/examples/pdf/geometric.rb +0 -5
  236. data/examples/pdf/gumbel.rb +0 -6
  237. data/examples/pdf/hypergeometric.rb +0 -11
  238. data/examples/pdf/landau.rb +0 -5
  239. data/examples/pdf/laplace.rb +0 -7
  240. data/examples/pdf/logarithmic.rb +0 -5
  241. data/examples/pdf/logistic.rb +0 -6
  242. data/examples/pdf/lognormal.rb +0 -6
  243. data/examples/pdf/neg-binomiral.rb +0 -10
  244. data/examples/pdf/pareto.rb +0 -7
  245. data/examples/pdf/pascal.rb +0 -10
  246. data/examples/pdf/poisson.rb +0 -5
  247. data/examples/pdf/rayleigh-tail.rb +0 -6
  248. data/examples/pdf/rayleigh.rb +0 -6
  249. data/examples/pdf/tdist.rb +0 -6
  250. data/examples/pdf/weibull.rb +0 -8
  251. data/examples/permutation/ex1.rb +0 -22
  252. data/examples/permutation/permutation.rb +0 -16
  253. data/examples/poly/bell.rb +0 -6
  254. data/examples/poly/bessel.rb +0 -6
  255. data/examples/poly/cheb.rb +0 -6
  256. data/examples/poly/cheb_II.rb +0 -6
  257. data/examples/poly/cubic.rb +0 -9
  258. data/examples/poly/demo.rb +0 -20
  259. data/examples/poly/eval.rb +0 -28
  260. data/examples/poly/eval_derivs.rb +0 -14
  261. data/examples/poly/fit.rb +0 -21
  262. data/examples/poly/hermite.rb +0 -6
  263. data/examples/poly/poly.rb +0 -13
  264. data/examples/poly/quadratic.rb +0 -25
  265. data/examples/random/diffusion.rb +0 -34
  266. data/examples/random/gaussian.rb +0 -9
  267. data/examples/random/generator.rb +0 -27
  268. data/examples/random/hdsobol.rb +0 -21
  269. data/examples/random/poisson.rb +0 -9
  270. data/examples/random/qrng.rb +0 -19
  271. data/examples/random/randomwalk.rb +0 -37
  272. data/examples/random/randomwalk2d.rb +0 -19
  273. data/examples/random/rayleigh.rb +0 -36
  274. data/examples/random/rng.rb +0 -33
  275. data/examples/random/rngextra.rb +0 -14
  276. data/examples/roots/bisection.rb +0 -25
  277. data/examples/roots/brent.rb +0 -43
  278. data/examples/roots/demo.rb +0 -30
  279. data/examples/roots/newton.rb +0 -46
  280. data/examples/roots/recombination.gp +0 -11
  281. data/examples/roots/recombination.rb +0 -61
  282. data/examples/roots/steffenson.rb +0 -48
  283. data/examples/sf/ShiChi.rb +0 -6
  284. data/examples/sf/SiCi.rb +0 -6
  285. data/examples/sf/airy_Ai.rb +0 -8
  286. data/examples/sf/airy_Bi.rb +0 -8
  287. data/examples/sf/bessel_IK.rb +0 -12
  288. data/examples/sf/bessel_JY.rb +0 -13
  289. data/examples/sf/beta_inc.rb +0 -9
  290. data/examples/sf/clausen.rb +0 -6
  291. data/examples/sf/dawson.rb +0 -5
  292. data/examples/sf/debye.rb +0 -9
  293. data/examples/sf/dilog.rb +0 -6
  294. data/examples/sf/ellint.rb +0 -6
  295. data/examples/sf/expint.rb +0 -8
  296. data/examples/sf/fermi.rb +0 -10
  297. data/examples/sf/gamma_inc_P.rb +0 -9
  298. data/examples/sf/gegenbauer.rb +0 -8
  299. data/examples/sf/hyperg.rb +0 -7
  300. data/examples/sf/laguerre.rb +0 -19
  301. data/examples/sf/lambertW.rb +0 -5
  302. data/examples/sf/legendre_P.rb +0 -10
  303. data/examples/sf/lngamma.rb +0 -5
  304. data/examples/sf/psi.rb +0 -54
  305. data/examples/sf/sphbessel.gp +0 -27
  306. data/examples/sf/sphbessel.rb +0 -30
  307. data/examples/sf/synchrotron.rb +0 -5
  308. data/examples/sf/transport.rb +0 -10
  309. data/examples/sf/zetam1.rb +0 -5
  310. data/examples/siman.rb +0 -44
  311. data/examples/sort/heapsort.rb +0 -23
  312. data/examples/sort/heapsort_vector_complex.rb +0 -21
  313. data/examples/sort/sort.rb +0 -23
  314. data/examples/sort/sort2.rb +0 -16
  315. data/examples/stats/mean.rb +0 -17
  316. data/examples/stats/statistics.rb +0 -18
  317. data/examples/stats/test.rb +0 -9
  318. data/examples/sum.rb +0 -34
  319. data/examples/tamu_anova.rb +0 -18
  320. data/examples/vector/a.dat +0 -0
  321. data/examples/vector/add.rb +0 -56
  322. data/examples/vector/b.dat +0 -4
  323. data/examples/vector/c.dat +0 -3
  324. data/examples/vector/collect.rb +0 -26
  325. data/examples/vector/compare.rb +0 -28
  326. data/examples/vector/complex.rb +0 -51
  327. data/examples/vector/complex_get_all.rb +0 -85
  328. data/examples/vector/complex_set_all.rb +0 -131
  329. data/examples/vector/complex_view_all.rb +0 -77
  330. data/examples/vector/connect.rb +0 -22
  331. data/examples/vector/decimate.rb +0 -38
  332. data/examples/vector/diff.rb +0 -31
  333. data/examples/vector/filescan.rb +0 -17
  334. data/examples/vector/floor.rb +0 -23
  335. data/examples/vector/get_all.rb +0 -82
  336. data/examples/vector/gnuplot.rb +0 -38
  337. data/examples/vector/graph.rb +0 -28
  338. data/examples/vector/histogram.rb +0 -22
  339. data/examples/vector/linspace.rb +0 -24
  340. data/examples/vector/log.rb +0 -17
  341. data/examples/vector/logic.rb +0 -33
  342. data/examples/vector/logspace.rb +0 -25
  343. data/examples/vector/minmax.rb +0 -47
  344. data/examples/vector/mul.rb +0 -49
  345. data/examples/vector/narray.rb +0 -46
  346. data/examples/vector/read.rb +0 -29
  347. data/examples/vector/set.rb +0 -35
  348. data/examples/vector/set_all.rb +0 -121
  349. data/examples/vector/smpv.dat +0 -15
  350. data/examples/vector/test.rb +0 -43
  351. data/examples/vector/test_gslblock.rb +0 -58
  352. data/examples/vector/vector.rb +0 -110
  353. data/examples/vector/view.rb +0 -35
  354. data/examples/vector/view_all.rb +0 -73
  355. data/examples/vector/where.rb +0 -29
  356. data/examples/vector/write.rb +0 -24
  357. data/examples/vector/zip.rb +0 -34
  358. data/examples/wavelet/ecg.dat +0 -256
  359. data/examples/wavelet/wavelet1.rb +0 -50
  360. data/ext/gsl_native/alf.c +0 -206
  361. data/ext/gsl_native/array.c +0 -553
  362. data/ext/gsl_native/array_complex.c +0 -245
  363. data/ext/gsl_native/blas.c +0 -28
  364. data/ext/gsl_native/blas1.c +0 -733
  365. data/ext/gsl_native/blas2.c +0 -1088
  366. data/ext/gsl_native/blas3.c +0 -880
  367. data/ext/gsl_native/block.c +0 -40
  368. data/ext/gsl_native/block_source.h +0 -885
  369. data/ext/gsl_native/bspline.c +0 -122
  370. data/ext/gsl_native/bundle.c +0 -3
  371. data/ext/gsl_native/cdf.c +0 -740
  372. data/ext/gsl_native/cheb.c +0 -531
  373. data/ext/gsl_native/combination.c +0 -275
  374. data/ext/gsl_native/common.c +0 -293
  375. data/ext/gsl_native/complex.c +0 -1002
  376. data/ext/gsl_native/const.c +0 -331
  377. data/ext/gsl_native/const_additional.c +0 -99
  378. data/ext/gsl_native/cqp.c +0 -283
  379. data/ext/gsl_native/deriv.c +0 -187
  380. data/ext/gsl_native/dht.c +0 -353
  381. data/ext/gsl_native/diff.c +0 -164
  382. data/ext/gsl_native/dirac.c +0 -388
  383. data/ext/gsl_native/eigen.c +0 -2322
  384. data/ext/gsl_native/error.c +0 -193
  385. data/ext/gsl_native/extconf.rb +0 -118
  386. data/ext/gsl_native/fft.c +0 -1095
  387. data/ext/gsl_native/fit.c +0 -204
  388. data/ext/gsl_native/fresnel.c +0 -312
  389. data/ext/gsl_native/function.c +0 -518
  390. data/ext/gsl_native/geometry.c +0 -139
  391. data/ext/gsl_native/graph.c +0 -1590
  392. data/ext/gsl_native/gsl.c +0 -259
  393. data/ext/gsl_native/gsl_narray.c +0 -794
  394. data/ext/gsl_native/histogram.c +0 -1964
  395. data/ext/gsl_native/histogram2d.c +0 -1042
  396. data/ext/gsl_native/histogram3d.c +0 -884
  397. data/ext/gsl_native/histogram3d_source.c +0 -749
  398. data/ext/gsl_native/histogram_find.c +0 -99
  399. data/ext/gsl_native/histogram_oper.c +0 -150
  400. data/ext/gsl_native/ieee.c +0 -88
  401. data/ext/gsl_native/include/rb_gsl.h +0 -136
  402. data/ext/gsl_native/include/rb_gsl_array.h +0 -214
  403. data/ext/gsl_native/include/rb_gsl_cheb.h +0 -19
  404. data/ext/gsl_native/include/rb_gsl_common.h +0 -348
  405. data/ext/gsl_native/include/rb_gsl_complex.h +0 -25
  406. data/ext/gsl_native/include/rb_gsl_const.h +0 -23
  407. data/ext/gsl_native/include/rb_gsl_dirac.h +0 -6
  408. data/ext/gsl_native/include/rb_gsl_eigen.h +0 -17
  409. data/ext/gsl_native/include/rb_gsl_fft.h +0 -49
  410. data/ext/gsl_native/include/rb_gsl_fit.h +0 -23
  411. data/ext/gsl_native/include/rb_gsl_function.h +0 -23
  412. data/ext/gsl_native/include/rb_gsl_graph.h +0 -68
  413. data/ext/gsl_native/include/rb_gsl_histogram.h +0 -63
  414. data/ext/gsl_native/include/rb_gsl_histogram3d.h +0 -97
  415. data/ext/gsl_native/include/rb_gsl_integration.h +0 -17
  416. data/ext/gsl_native/include/rb_gsl_interp.h +0 -41
  417. data/ext/gsl_native/include/rb_gsl_linalg.h +0 -21
  418. data/ext/gsl_native/include/rb_gsl_math.h +0 -20
  419. data/ext/gsl_native/include/rb_gsl_odeiv.h +0 -18
  420. data/ext/gsl_native/include/rb_gsl_poly.h +0 -67
  421. data/ext/gsl_native/include/rb_gsl_rational.h +0 -30
  422. data/ext/gsl_native/include/rb_gsl_rng.h +0 -20
  423. data/ext/gsl_native/include/rb_gsl_root.h +0 -22
  424. data/ext/gsl_native/include/rb_gsl_sf.h +0 -110
  425. data/ext/gsl_native/include/rb_gsl_statistics.h +0 -17
  426. data/ext/gsl_native/include/rb_gsl_tensor.h +0 -43
  427. data/ext/gsl_native/include/rb_gsl_with_narray.h +0 -31
  428. data/ext/gsl_native/include/templates_off.h +0 -87
  429. data/ext/gsl_native/include/templates_on.h +0 -241
  430. data/ext/gsl_native/integration.c +0 -1154
  431. data/ext/gsl_native/interp.c +0 -499
  432. data/ext/gsl_native/jacobi.c +0 -733
  433. data/ext/gsl_native/linalg.c +0 -3915
  434. data/ext/gsl_native/linalg_complex.c +0 -726
  435. data/ext/gsl_native/math.c +0 -706
  436. data/ext/gsl_native/matrix.c +0 -36
  437. data/ext/gsl_native/matrix_complex.c +0 -1733
  438. data/ext/gsl_native/matrix_double.c +0 -557
  439. data/ext/gsl_native/matrix_int.c +0 -255
  440. data/ext/gsl_native/matrix_source.h +0 -2708
  441. data/ext/gsl_native/min.c +0 -219
  442. data/ext/gsl_native/monte.c +0 -978
  443. data/ext/gsl_native/multifit.c +0 -1862
  444. data/ext/gsl_native/multimin.c +0 -778
  445. data/ext/gsl_native/multimin_fsdf.c +0 -156
  446. data/ext/gsl_native/multiroots.c +0 -952
  447. data/ext/gsl_native/multiset.c +0 -210
  448. data/ext/gsl_native/ndlinear.c +0 -320
  449. data/ext/gsl_native/nmf.c +0 -171
  450. data/ext/gsl_native/nmf_wrap.c +0 -75
  451. data/ext/gsl_native/ntuple.c +0 -469
  452. data/ext/gsl_native/odeiv.c +0 -947
  453. data/ext/gsl_native/ool.c +0 -879
  454. data/ext/gsl_native/permutation.c +0 -598
  455. data/ext/gsl_native/poly.c +0 -39
  456. data/ext/gsl_native/poly2.c +0 -265
  457. data/ext/gsl_native/poly_source.h +0 -1871
  458. data/ext/gsl_native/qrng.c +0 -160
  459. data/ext/gsl_native/randist.c +0 -1848
  460. data/ext/gsl_native/rational.c +0 -480
  461. data/ext/gsl_native/rng.c +0 -595
  462. data/ext/gsl_native/root.c +0 -407
  463. data/ext/gsl_native/sf.c +0 -1446
  464. data/ext/gsl_native/sf_airy.c +0 -200
  465. data/ext/gsl_native/sf_bessel.c +0 -871
  466. data/ext/gsl_native/sf_clausen.c +0 -28
  467. data/ext/gsl_native/sf_coulomb.c +0 -206
  468. data/ext/gsl_native/sf_coupling.c +0 -121
  469. data/ext/gsl_native/sf_dawson.c +0 -29
  470. data/ext/gsl_native/sf_debye.c +0 -148
  471. data/ext/gsl_native/sf_dilog.c +0 -43
  472. data/ext/gsl_native/sf_elementary.c +0 -46
  473. data/ext/gsl_native/sf_ellint.c +0 -206
  474. data/ext/gsl_native/sf_elljac.c +0 -30
  475. data/ext/gsl_native/sf_erfc.c +0 -89
  476. data/ext/gsl_native/sf_exp.c +0 -169
  477. data/ext/gsl_native/sf_expint.c +0 -201
  478. data/ext/gsl_native/sf_fermi_dirac.c +0 -148
  479. data/ext/gsl_native/sf_gamma.c +0 -343
  480. data/ext/gsl_native/sf_gegenbauer.c +0 -97
  481. data/ext/gsl_native/sf_hyperg.c +0 -203
  482. data/ext/gsl_native/sf_laguerre.c +0 -113
  483. data/ext/gsl_native/sf_lambert.c +0 -47
  484. data/ext/gsl_native/sf_legendre.c +0 -368
  485. data/ext/gsl_native/sf_log.c +0 -105
  486. data/ext/gsl_native/sf_mathieu.c +0 -235
  487. data/ext/gsl_native/sf_power.c +0 -47
  488. data/ext/gsl_native/sf_psi.c +0 -89
  489. data/ext/gsl_native/sf_synchrotron.c +0 -48
  490. data/ext/gsl_native/sf_transport.c +0 -76
  491. data/ext/gsl_native/sf_trigonometric.c +0 -210
  492. data/ext/gsl_native/sf_zeta.c +0 -115
  493. data/ext/gsl_native/signal.c +0 -303
  494. data/ext/gsl_native/siman.c +0 -713
  495. data/ext/gsl_native/sort.c +0 -207
  496. data/ext/gsl_native/spline.c +0 -377
  497. data/ext/gsl_native/stats.c +0 -787
  498. data/ext/gsl_native/sum.c +0 -168
  499. data/ext/gsl_native/tamu_anova.c +0 -56
  500. data/ext/gsl_native/tensor.c +0 -35
  501. data/ext/gsl_native/tensor_source.h +0 -1122
  502. data/ext/gsl_native/vector.c +0 -35
  503. data/ext/gsl_native/vector_complex.c +0 -2241
  504. data/ext/gsl_native/vector_double.c +0 -1433
  505. data/ext/gsl_native/vector_int.c +0 -202
  506. data/ext/gsl_native/vector_source.h +0 -3321
  507. data/ext/gsl_native/wavelet.c +0 -923
  508. data/lib/gsl.rb +0 -8
  509. data/lib/gsl/gnuplot.rb +0 -41
  510. data/lib/gsl/oper.rb +0 -43
  511. data/lib/gsl/version.rb +0 -3
  512. data/lib/ool.rb +0 -22
  513. data/lib/ool/conmin.rb +0 -30
  514. data/lib/rbgsl.rb +0 -1
  515. data/rdoc/alf.rdoc +0 -77
  516. data/rdoc/blas.rdoc +0 -269
  517. data/rdoc/bspline.rdoc +0 -42
  518. data/rdoc/changes.rdoc +0 -159
  519. data/rdoc/cheb.rdoc +0 -99
  520. data/rdoc/cholesky_complex.rdoc +0 -46
  521. data/rdoc/combi.rdoc +0 -125
  522. data/rdoc/complex.rdoc +0 -210
  523. data/rdoc/const.rdoc +0 -546
  524. data/rdoc/dht.rdoc +0 -122
  525. data/rdoc/diff.rdoc +0 -133
  526. data/rdoc/ehandling.rdoc +0 -50
  527. data/rdoc/eigen.rdoc +0 -401
  528. data/rdoc/fft.rdoc +0 -535
  529. data/rdoc/fit.rdoc +0 -284
  530. data/rdoc/function.rdoc +0 -94
  531. data/rdoc/graph.rdoc +0 -137
  532. data/rdoc/hist.rdoc +0 -409
  533. data/rdoc/hist2d.rdoc +0 -279
  534. data/rdoc/hist3d.rdoc +0 -112
  535. data/rdoc/integration.rdoc +0 -398
  536. data/rdoc/interp.rdoc +0 -231
  537. data/rdoc/intro.rdoc +0 -27
  538. data/rdoc/linalg.rdoc +0 -681
  539. data/rdoc/linalg_complex.rdoc +0 -88
  540. data/rdoc/math.rdoc +0 -276
  541. data/rdoc/matrix.rdoc +0 -1093
  542. data/rdoc/min.rdoc +0 -189
  543. data/rdoc/monte.rdoc +0 -234
  544. data/rdoc/multimin.rdoc +0 -312
  545. data/rdoc/multiroot.rdoc +0 -293
  546. data/rdoc/narray.rdoc +0 -177
  547. data/rdoc/ndlinear.rdoc +0 -250
  548. data/rdoc/nonlinearfit.rdoc +0 -348
  549. data/rdoc/ntuple.rdoc +0 -88
  550. data/rdoc/odeiv.rdoc +0 -378
  551. data/rdoc/perm.rdoc +0 -221
  552. data/rdoc/poly.rdoc +0 -335
  553. data/rdoc/qrng.rdoc +0 -90
  554. data/rdoc/randist.rdoc +0 -233
  555. data/rdoc/ref.rdoc +0 -93
  556. data/rdoc/rng.rdoc +0 -203
  557. data/rdoc/roots.rdoc +0 -305
  558. data/rdoc/sf.rdoc +0 -1622
  559. data/rdoc/siman.rdoc +0 -89
  560. data/rdoc/sort.rdoc +0 -94
  561. data/rdoc/start.rdoc +0 -16
  562. data/rdoc/stats.rdoc +0 -219
  563. data/rdoc/sum.rdoc +0 -65
  564. data/rdoc/tensor.rdoc +0 -251
  565. data/rdoc/tut.rdoc +0 -5
  566. data/rdoc/use.rdoc +0 -177
  567. data/rdoc/vector.rdoc +0 -1243
  568. data/rdoc/vector_complex.rdoc +0 -347
  569. data/rdoc/wavelet.rdoc +0 -218
  570. data/test/gsl/blas_test.rb +0 -79
  571. data/test/gsl/bspline_test.rb +0 -63
  572. data/test/gsl/cdf_test.rb +0 -1512
  573. data/test/gsl/cheb_test.rb +0 -80
  574. data/test/gsl/combination_test.rb +0 -100
  575. data/test/gsl/complex_test.rb +0 -20
  576. data/test/gsl/const_test.rb +0 -29
  577. data/test/gsl/deriv_test.rb +0 -62
  578. data/test/gsl/dht_test.rb +0 -79
  579. data/test/gsl/diff_test.rb +0 -53
  580. data/test/gsl/eigen_test.rb +0 -563
  581. data/test/gsl/err_test.rb +0 -23
  582. data/test/gsl/fit_test.rb +0 -101
  583. data/test/gsl/histo_test.rb +0 -14
  584. data/test/gsl/index_test.rb +0 -61
  585. data/test/gsl/integration_test.rb +0 -274
  586. data/test/gsl/interp_test.rb +0 -27
  587. data/test/gsl/linalg_test.rb +0 -463
  588. data/test/gsl/matrix_nmf_test.rb +0 -37
  589. data/test/gsl/matrix_test.rb +0 -98
  590. data/test/gsl/min_test.rb +0 -89
  591. data/test/gsl/monte_test.rb +0 -77
  592. data/test/gsl/multifit_test.rb +0 -753
  593. data/test/gsl/multimin_test.rb +0 -157
  594. data/test/gsl/multiroot_test.rb +0 -135
  595. data/test/gsl/multiset_test.rb +0 -52
  596. data/test/gsl/odeiv_test.rb +0 -275
  597. data/test/gsl/oper_test.rb +0 -98
  598. data/test/gsl/poly_test.rb +0 -338
  599. data/test/gsl/qrng_test.rb +0 -94
  600. data/test/gsl/quartic_test.rb +0 -28
  601. data/test/gsl/randist_test.rb +0 -122
  602. data/test/gsl/rng_test.rb +0 -303
  603. data/test/gsl/roots_test.rb +0 -78
  604. data/test/gsl/sf_test.rb +0 -2079
  605. data/test/gsl/stats_test.rb +0 -122
  606. data/test/gsl/sum_test.rb +0 -69
  607. data/test/gsl/tensor_test.rb +0 -396
  608. data/test/gsl/vector_test.rb +0 -223
  609. data/test/gsl/wavelet_test.rb +0 -130
  610. data/test/gsl_test.rb +0 -321
  611. data/test/test_helper.rb +0 -42
  612. data/uncrustify.cfg +0 -1693
@@ -1,193 +0,0 @@
1
- /*
2
- error.c
3
- Ruby/GSL: Ruby extension library for GSL (GNU Scientific Library)
4
- (C) Copyright 2001-2006 by Yoshiki Tsunesada
5
-
6
- Ruby/GSL is free software: you can redistribute it and/or modify it
7
- under the terms of the GNU General Public License.
8
- This library is distributed in the hope that it will be useful, but
9
- WITHOUT ANY WARRANTY.
10
- */
11
- #include "include/rb_gsl.h"
12
- #include <gsl/gsl_errno.h>
13
- #include "include/rb_gsl_array.h"
14
- #include "include/rb_gsl_common.h"
15
- #include "include/rb_gsl_function.h"
16
-
17
- static VALUE eHandler;
18
- static VALUE cgsl_error[35];
19
- static VALUE *pgsl_error;
20
-
21
- static void Init_rb_gsl_define_GSL_CONST(VALUE module);
22
- void rb_gsl_error_handler(const char *reason, const char *file,
23
- int line, int gsl_errno);
24
- static void rb_gsl_my_error_handler(const char *reason, const char *file,
25
- int line, int gsl_errno);
26
-
27
- void rb_gsl_error_handler(const char *reason, const char *file,
28
- int line, int gsl_errno)
29
- {
30
- const char *emessage = gsl_strerror(gsl_errno);
31
- rb_raise(pgsl_error[gsl_errno],
32
- "Ruby/GSL error code %d, %s (file %s, line %d), %s",
33
- gsl_errno, reason, file, line, emessage);
34
- }
35
-
36
- static void rb_gsl_my_error_handler(const char *reason, const char *file,
37
- int line, int gsl_errno)
38
- {
39
- VALUE vreason, vfile;
40
- VALUE vline, verrno;
41
- vreason = rb_str_new2(reason);
42
- vfile = rb_str_new2(file);
43
- vline = INT2FIX(line);
44
- verrno = INT2FIX(gsl_errno);
45
- rb_funcall(eHandler, RBGSL_ID_call, 4, vreason, vfile, vline, verrno);
46
- }
47
-
48
- static VALUE rb_gsl_set_error_handler(int argc, VALUE *argv, VALUE module)
49
- {
50
- if (rb_block_given_p()) {
51
- eHandler = rb_block_proc();
52
- gsl_set_error_handler(&rb_gsl_my_error_handler);
53
- return Qtrue;
54
- }
55
- switch (argc) {
56
- case 0:
57
- gsl_set_error_handler(&rb_gsl_error_handler);
58
- return Qtrue;
59
- break;
60
- case 1:
61
- CHECK_PROC(argv[0]);
62
- eHandler = argv[0];
63
- gsl_set_error_handler(&rb_gsl_my_error_handler);
64
- return Qtrue;
65
- break;
66
- default:
67
- rb_raise(rb_eArgError, "too many arguments (%d for 0 or 1 Proc)", argc);
68
- break;
69
- }
70
- }
71
-
72
- static VALUE rb_gsl_set_default_error_handler(VALUE module)
73
- {
74
- gsl_set_error_handler(&rb_gsl_error_handler);
75
- return Qtrue;
76
- }
77
-
78
- static void rb_gsl_define_exceptions(VALUE module)
79
- {
80
- VALUE mgsl_error;
81
- mgsl_error = rb_define_module_under(module, "ERROR");
82
- pgsl_error = &cgsl_error[2];
83
- pgsl_error[-2] = rb_define_class_under(mgsl_error, "CONTINUE", rb_cFixnum);
84
- pgsl_error[-1] = rb_define_class_under(mgsl_error, "FAILURE", rb_eRuntimeError);
85
- pgsl_error[0] = rb_define_class_under(mgsl_error, "SUCCESS", rb_cFixnum);
86
- pgsl_error[1] = rb_define_class_under(mgsl_error, "EDOM", rb_eRangeError);
87
- pgsl_error[2] = rb_define_class_under(mgsl_error, "ERANGE", rb_eRangeError);
88
- pgsl_error[3] = rb_define_class_under(mgsl_error, "EFAULT", rb_eRuntimeError);
89
- pgsl_error[4] = rb_define_class_under(mgsl_error, "EINVAL", rb_eIndexError);
90
- pgsl_error[5] = rb_define_class_under(mgsl_error, "EFAILED", rb_eRuntimeError);
91
- pgsl_error[6] = rb_define_class_under(mgsl_error, "EFACTOR", rb_eRuntimeError);
92
- pgsl_error[7] = rb_define_class_under(mgsl_error, "ESANITY", rb_eRuntimeError);
93
- pgsl_error[8] = rb_define_class_under(mgsl_error, "ENOMEM", rb_eNoMemError);
94
- pgsl_error[9] = rb_define_class_under(mgsl_error, "EBADFUNC", rb_eRuntimeError);
95
- pgsl_error[10] = rb_define_class_under(mgsl_error, "ERUNAWAY", rb_eRuntimeError);
96
- pgsl_error[11] = rb_define_class_under(mgsl_error, "EMAXITER", rb_eRuntimeError);
97
- pgsl_error[12] = rb_define_class_under(mgsl_error, "EZERODIV", rb_eZeroDivError);
98
- pgsl_error[13] = rb_define_class_under(mgsl_error, "EBADTOL", rb_eRuntimeError);
99
- pgsl_error[14] = rb_define_class_under(mgsl_error, "ETOL", rb_eRuntimeError);
100
- pgsl_error[15] = rb_define_class_under(mgsl_error, "EUNDRFLW", rb_eRangeError);
101
- pgsl_error[16] = rb_define_class_under(mgsl_error, "EOVRFLW", rb_eRangeError);
102
- pgsl_error[17] = rb_define_class_under(mgsl_error, "ELOSS", rb_eRuntimeError);
103
- pgsl_error[18] = rb_define_class_under(mgsl_error, "EROUND", rb_eRuntimeError);
104
- pgsl_error[19] = rb_define_class_under(mgsl_error, "EBADLEN", rb_eIndexError);
105
- pgsl_error[20] = rb_define_class_under(mgsl_error, "ENOTSQR", rb_eRuntimeError);
106
- pgsl_error[21] = rb_define_class_under(mgsl_error, "ESING", rb_eRuntimeError);
107
- pgsl_error[22] = rb_define_class_under(mgsl_error, "EDIVERGE", rb_eRuntimeError);
108
- pgsl_error[23] = rb_define_class_under(mgsl_error, "EUNSUP", rb_eRuntimeError);
109
- pgsl_error[24] = rb_define_class_under(mgsl_error, "EUNIMPL", rb_eNotImpError);
110
- pgsl_error[25] = rb_define_class_under(mgsl_error, "ECACHE", rb_eRuntimeError);
111
- pgsl_error[26] = rb_define_class_under(mgsl_error, "ETABLE", rb_eRuntimeError);
112
- pgsl_error[27] = rb_define_class_under(mgsl_error, "ENOPROG", rb_eRuntimeError);
113
- pgsl_error[28] = rb_define_class_under(mgsl_error, "ENOPROGJ", rb_eRuntimeError);
114
- pgsl_error[29] = rb_define_class_under(mgsl_error, "ETOLF", rb_eRuntimeError);
115
- pgsl_error[30] = rb_define_class_under(mgsl_error, "ETOLX", rb_eRuntimeError);
116
- pgsl_error[31] = rb_define_class_under(mgsl_error, "ETOLG", rb_eRuntimeError);
117
- pgsl_error[32] = rb_define_class_under(mgsl_error, "EOF", rb_eEOFError);
118
- }
119
-
120
- static void Init_rb_gsl_define_GSL_CONST(VALUE module)
121
- {
122
- rb_define_const(module, "SUCCESS", INT2FIX(GSL_SUCCESS));
123
- rb_define_const(module, "FAILURE", INT2FIX(GSL_FAILURE));
124
- rb_define_const(module, "CONTINUE", INT2FIX(GSL_CONTINUE));
125
- rb_define_const(module, "EDOM", INT2FIX(GSL_EDOM));
126
- rb_define_const(module, "ERANGE", INT2FIX(GSL_ERANGE));
127
- rb_define_const(module, "EFAULT", INT2FIX(GSL_EFAULT));
128
- rb_define_const(module, "EINVAL", INT2FIX(GSL_EINVAL));
129
- rb_define_const(module, "EFAILED", INT2FIX(GSL_EFAILED));
130
- rb_define_const(module, "EFACTOR", INT2FIX(GSL_EFACTOR));
131
- rb_define_const(module, "ESANITY", INT2FIX(GSL_ESANITY));
132
- rb_define_const(module, "ENOMEM", INT2FIX(GSL_ENOMEM));
133
- rb_define_const(module, "EBADFUNC", INT2FIX(GSL_EBADFUNC));
134
- rb_define_const(module, "ERUNAWAY", INT2FIX(GSL_ERUNAWAY));
135
- rb_define_const(module, "EMAXITER", INT2FIX(GSL_EMAXITER));
136
- rb_define_const(module, "EZERODIV", INT2FIX(GSL_EZERODIV));
137
- rb_define_const(module, "EBADTOL", INT2FIX(GSL_EBADTOL));
138
- rb_define_const(module, "ETOL", INT2FIX(GSL_ETOL));
139
- rb_define_const(module, "EUNDRFLW", INT2FIX(GSL_EUNDRFLW));
140
- rb_define_const(module, "EOVRFLW", INT2FIX(GSL_EOVRFLW));
141
- rb_define_const(module, "ELOSS", INT2FIX(GSL_ELOSS));
142
- rb_define_const(module, "EROUND", INT2FIX(GSL_EROUND));
143
- rb_define_const(module, "EBADLEN", INT2FIX(GSL_EBADLEN));
144
- rb_define_const(module, "ENOTSQR", INT2FIX(GSL_ENOTSQR));
145
- rb_define_const(module, "ESING", INT2FIX(GSL_ESING));
146
- rb_define_const(module, "EDIVERGE", INT2FIX(GSL_EDIVERGE));
147
- rb_define_const(module, "EUNSUP", INT2FIX(GSL_EUNSUP));
148
- rb_define_const(module, "EUNIMPL", INT2FIX(GSL_EUNIMPL));
149
- rb_define_const(module, "ECACHE", INT2FIX(GSL_ECACHE));
150
- rb_define_const(module, "ETABLE", INT2FIX(GSL_ETABLE));
151
- rb_define_const(module, "ENOPROG", INT2FIX(GSL_ENOPROG));
152
- rb_define_const(module, "ENOPROGJ", INT2FIX(GSL_ENOPROGJ));
153
- rb_define_const(module, "ETOLF", INT2FIX(GSL_ETOLF));
154
- rb_define_const(module, "ETOLX", INT2FIX(GSL_ETOLX));
155
- rb_define_const(module, "ETOLG", INT2FIX(GSL_ETOLG));
156
- rb_define_const(module, "EOF", INT2FIX(GSL_EOF));
157
- }
158
-
159
- static VALUE rb_gsl_set_error_handler_off(VALUE module)
160
- {
161
- gsl_set_error_handler_off();
162
- return Qtrue;
163
- }
164
-
165
- static void define_module_functions(VALUE module);
166
- static VALUE rb_gsl_strerror(VALUE obj, VALUE errn);
167
- static void define_module_functions(VALUE module)
168
- {
169
- rb_define_module_function(module, "set_error_handler_off",
170
- rb_gsl_set_error_handler_off, 0);
171
- rb_define_module_function(module, "strerror",
172
- rb_gsl_strerror, 1);
173
- rb_define_module_function(module, "set_error_handler",
174
- rb_gsl_set_error_handler, -1);
175
- rb_define_module_function(module, "set_default_error_handler",
176
- rb_gsl_set_default_error_handler, 0);
177
- }
178
-
179
- static VALUE rb_gsl_strerror(VALUE obj, VALUE errn)
180
- {
181
- int gsl_errno = FIX2INT(errn);
182
- return rb_str_new2(gsl_strerror(gsl_errno));
183
- }
184
-
185
- void Init_gsl_error(VALUE module)
186
- {
187
- Init_rb_gsl_define_GSL_CONST(module);
188
-
189
- gsl_set_error_handler(&rb_gsl_error_handler);
190
-
191
- define_module_functions(module);
192
- rb_gsl_define_exceptions(module);
193
- }
@@ -1,118 +0,0 @@
1
- require 'mkmf'
2
-
3
- def gsl_config_arg(arg)
4
- yield arg_config("--with-gsl-#{arg}") {
5
- sh = 'sh ' if RUBY_PLATFORM =~ /mingw/
6
- IO.popen("#{sh}gsl-config --#{arg}") { |f| f.gets.chomp }
7
- }, lambda { |val| puts "checking gsl #{arg}... #{val}"; val }
8
- rescue => err
9
- abort "*** ERROR: missing required library to compile this module: #{err}"
10
- end
11
-
12
- def gsl_def(const, value = nil)
13
- value = "=#{value}" if value
14
- $defs << "-D#{const}#{value}"
15
- end
16
-
17
- def gsl_have_header(library, header)
18
- have_library(library) if have_header(header)
19
- end
20
-
21
- def gsl_have_library(func)
22
- have_func(func) if have_library('gsl', func)
23
- end
24
-
25
- def gsl_dir_config(target, idir = nil, ldir = idir)
26
- dir_config(target, idir || $sitearchdir, ldir || $sitearchdir)
27
- end
28
-
29
- def gsl_gem_config(target, dir = 'ext')
30
- path = begin
31
- require 'rubygems'
32
-
33
- spec = Gem::Specification.find_by_path("#{target}.h")
34
- File.join(spec.full_gem_path, dir) if spec
35
- rescue LoadError
36
- end
37
-
38
- gsl_dir_config(target, path)
39
-
40
- $LOCAL_LIBS += " -l:#{target}.so" if arg_config("--force-link-#{target}") ||
41
- $CFLAGS.include?('-Wl,--no-undefined') ||
42
- $LDFLAGS.include?('-Wl,--no-undefined')
43
- end
44
-
45
- $CFLAGS += ' -Wall -Iinclude'
46
-
47
- gsl_config_arg(:version) { |version, check|
48
- gsl_def(:GSL_VERSION, check[version])
49
-
50
- ver = version.split('.').map { |x| x.to_i }
51
-
52
- later = lambda { |other|
53
- ary = other.split('.').map { |x| x.to_i }
54
-
55
- gte = ver[0] > ary[0] ? true :
56
- ver[0] < ary[0] ? false :
57
- ver[1] > ary[1] ? true :
58
- ver[1] < ary[1] ? false :
59
- ver.size < ary.size ? false :
60
- ver.size == 3 && ary.size == 3 ? ver[2] >= ary[2] : true
61
-
62
- ary.pop && ary[-1] += 1 if ary.last == 90
63
-
64
- gte && gsl_def("GSL_#{ary.join('_')}_LATER")
65
- }
66
-
67
- raise 'Ruby/GSL requires gsl-1.15 or later.' unless later['1.15']
68
-
69
- %w[1.15 1.16].each { |v| later[v] }
70
- }
71
-
72
- gsl_config_arg(:cflags) { |cflags, check|
73
- $CFLAGS += ' ' + check[cflags]
74
- }
75
-
76
- gsl_config_arg(:libs) { |libs, check|
77
- libs.tr!(File::PATH_SEPARATOR, ' ')
78
-
79
- if enable_config('atlas')
80
- dir_config('cblas')
81
- dir_config('atlas')
82
-
83
- if have_library('cblas') && have_library('atlas')
84
- libs.gsub!('-lgslcblas', '-lcblas -latlas')
85
- end
86
- end
87
-
88
- $LOCAL_LIBS += ' ' + check[libs]
89
- }
90
-
91
- have_func('round')
92
-
93
- %w[alf qrngextra rngextra tensor].each { |library|
94
- gsl_have_header(library, "#{library}/#{library}.h")
95
- }
96
-
97
- gsl_have_header('bundle_method', 'gsl/gsl_multimin_fsdf.h')
98
- gsl_have_header('cqp', 'gsl/gsl_cqp.h')
99
- gsl_have_header('jacobi', 'jacobi.h')
100
- gsl_have_header('ndlinear', 'ndlinear/gsl_multifit_ndlinear.h')
101
- gsl_have_header('ool', 'ool/ool_version.h')
102
-
103
- gsl_have_library('gsl_eigen_francis')
104
- gsl_have_library('gsl_poly_solve_quartic')
105
-
106
- gsl_def(:HAVE_GNU_GRAPH) if find_executable('graph')
107
-
108
- gsl_gem_config('narray', 'src')
109
-
110
- have_header('narray.h')
111
- have_library('narray') if RUBY_PLATFORM =~ /cygwin|mingw/
112
-
113
- unless arg_config('--disable-tamu-anova')
114
- gsl_dir_config('tamu_anova')
115
- gsl_have_header('tamuanova', 'tamu_anova/tamu_anova.h')
116
- end
117
-
118
- create_makefile('gsl_native')
@@ -1,1095 +0,0 @@
1
- /*
2
- fft.c
3
- Ruby/GSL: Ruby extension library for GSL (GNU Scientific Library)
4
- (C) Copyright 2004 by Yoshiki Tsunesada
5
-
6
- Ruby/GSL is free software: you can redistribute it and/or modify it
7
- under the terms of the GNU General Public License.
8
- This library is distributed in the hope that it will be useful, but
9
- WITHOUT ANY WARRANTY.
10
- */
11
-
12
- #include "include/rb_gsl_fft.h"
13
-
14
- VALUE mgsl_fft;
15
- VALUE cgsl_fft_wavetable;
16
- VALUE cgsl_fft_complex_wavetable, cgsl_fft_complex_workspace;
17
- VALUE cgsl_fft_real_wavetable, cgsl_fft_halfcomplex_wavetable;
18
- VALUE cgsl_fft_real_workspace;
19
-
20
- extern VALUE cgsl_vector_int;
21
- extern VALUE cgsl_vector_complex;
22
-
23
- static void GSL_FFT_Workspace_free(GSL_FFT_Workspace *space);
24
-
25
- static VALUE rb_gsl_fft_complex_wavetable_new(VALUE klass, VALUE n)
26
- {
27
- CHECK_FIXNUM(n);
28
- return Data_Wrap_Struct(cgsl_fft_complex_wavetable, 0,
29
- gsl_fft_complex_wavetable_free,
30
- gsl_fft_complex_wavetable_alloc(FIX2INT(n)));
31
- }
32
-
33
- static VALUE rb_gsl_fft_real_wavetable_new(VALUE klass, VALUE n)
34
- {
35
- CHECK_FIXNUM(n);
36
- return Data_Wrap_Struct(klass, 0, gsl_fft_real_wavetable_free,
37
- gsl_fft_real_wavetable_alloc(FIX2INT(n)));
38
- }
39
-
40
- static VALUE rb_gsl_fft_halfcomplex_wavetable_new(VALUE klass, VALUE n)
41
- {
42
- CHECK_FIXNUM(n);
43
- return Data_Wrap_Struct(klass, 0, gsl_fft_halfcomplex_wavetable_free,
44
- gsl_fft_halfcomplex_wavetable_alloc(FIX2INT(n)));
45
-
46
- }
47
-
48
- static void GSL_FFT_Wavetable_free(GSL_FFT_Wavetable *table)
49
- {
50
- gsl_fft_complex_wavetable_free((gsl_fft_complex_wavetable *) table);
51
- }
52
-
53
- static VALUE rb_gsl_fft_complex_workspace_new(VALUE klass, VALUE n)
54
- {
55
- CHECK_FIXNUM(n);
56
- return Data_Wrap_Struct(klass, 0, gsl_fft_complex_workspace_free,
57
- gsl_fft_complex_workspace_alloc(FIX2INT(n)));
58
- }
59
-
60
- static VALUE rb_gsl_fft_real_workspace_new(VALUE klass, VALUE n)
61
- {
62
- CHECK_FIXNUM(n);
63
- return Data_Wrap_Struct(klass, 0, gsl_fft_real_workspace_free,
64
- gsl_fft_real_workspace_alloc(FIX2INT(n)));
65
- }
66
-
67
- static void GSL_FFT_Workspace_free(GSL_FFT_Workspace *space)
68
- {
69
- gsl_fft_complex_workspace_free((gsl_fft_complex_workspace *) space);
70
- }
71
-
72
- // The FFT methods used to allow passing stride and n values as optional
73
- // parameters to control which elements get transformed. This created problems
74
- // for Views which can have their own stride, so support for stride and n
75
- // parameters to the transform methods is being dropped. This method used to
76
- // be called to determine the stride and n values to use based on the
77
- // parameters and/or the vector itself (depending on how many parameters were
78
- // passed). Now this function is somewhat unneceesary, but to simplify the code
79
- // refactoring, it has been left in place for the time being. Eventually it
80
- // can be refactored away completely.
81
- static VALUE get_complex_stride_n(VALUE obj,
82
- gsl_vector_complex **vin,
83
- gsl_complex_packed_array *data, size_t *stride, size_t *n)
84
- {
85
- gsl_vector_complex *v = NULL;
86
-
87
- // obj must be a GSL::Vector::Complex
88
- CHECK_VECTOR_COMPLEX(obj);
89
- Data_Get_Struct(obj, gsl_vector_complex, v);
90
-
91
- if(vin) *vin = v;
92
- *data = (gsl_complex_packed_array) v->data;
93
- *stride = v->stride;
94
- *n = v->size;
95
- return obj;
96
- }
97
-
98
- static VALUE rb_fft_complex_radix2(VALUE obj,
99
- int (*trans)(gsl_complex_packed_array,
100
- size_t, size_t), int flag)
101
- {
102
- size_t stride, n;
103
- gsl_complex_packed_array data;
104
- gsl_vector_complex *vin, *vout;
105
- VALUE ary;
106
- ary = get_complex_stride_n(obj, &vin, &data, &stride, &n);
107
- if (flag == RB_GSL_FFT_COPY) {
108
- vout = gsl_vector_complex_alloc(n);
109
- gsl_vector_complex_memcpy(vout, vin);
110
- (*trans)(vout->data, vout->stride /*1*/, vout->size /*n*/);
111
- return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, vout);
112
- } else { /* in-place */
113
- (*trans)(data, stride, n);
114
- return ary;
115
- }
116
- }
117
-
118
- static VALUE rb_gsl_fft_complex_radix2_forward(VALUE obj)
119
- {
120
- return rb_fft_complex_radix2(obj, gsl_fft_complex_radix2_forward,
121
- RB_GSL_FFT_COPY);
122
- }
123
-
124
- static VALUE rb_gsl_fft_complex_radix2_forward2(VALUE obj)
125
- {
126
- return rb_fft_complex_radix2(obj, gsl_fft_complex_radix2_forward,
127
- RB_GSL_FFT_INPLACE);
128
- }
129
-
130
- static VALUE rb_gsl_fft_complex_radix2_transform(VALUE obj, VALUE val_sign)
131
- {
132
- size_t stride, n;
133
- gsl_complex_packed_array data;
134
- gsl_fft_direction sign;
135
- gsl_vector_complex *vin, *vout;
136
- sign = NUM2INT(val_sign);
137
- get_complex_stride_n(obj, &vin, &data, &stride, &n);
138
- vout = gsl_vector_complex_alloc(n);
139
- gsl_vector_complex_memcpy(vout, vin);
140
- gsl_fft_complex_radix2_transform(vout->data, vout->stride /*1*/, vout->size /*n*/, sign);
141
- return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, vout);
142
- }
143
-
144
- static VALUE rb_gsl_fft_complex_radix2_transform2(VALUE obj, VALUE val_sign)
145
- {
146
- size_t stride, n;
147
- gsl_complex_packed_array data;
148
- gsl_fft_direction sign;
149
- VALUE ary;
150
- sign = NUM2INT(val_sign);
151
- ary = get_complex_stride_n(obj, NULL, &data, &stride, &n);
152
- gsl_fft_complex_radix2_transform(data, stride, n, sign);
153
- return ary;
154
- }
155
-
156
- static VALUE rb_gsl_fft_complex_radix2_backward(VALUE obj)
157
- {
158
- return rb_fft_complex_radix2(obj, gsl_fft_complex_radix2_backward,
159
- RB_GSL_FFT_COPY);
160
- }
161
-
162
- static VALUE rb_gsl_fft_complex_radix2_inverse(VALUE obj)
163
- {
164
- return rb_fft_complex_radix2(obj, gsl_fft_complex_radix2_inverse,
165
- RB_GSL_FFT_COPY);
166
- }
167
-
168
- static VALUE rb_gsl_fft_complex_radix2_dif_forward(VALUE obj)
169
- {
170
- return rb_fft_complex_radix2(obj,
171
- gsl_fft_complex_radix2_dif_forward,
172
- RB_GSL_FFT_COPY);
173
- }
174
-
175
- static VALUE rb_gsl_fft_complex_radix2_backward2(VALUE obj)
176
- {
177
- return rb_fft_complex_radix2(obj, gsl_fft_complex_radix2_backward,
178
- RB_GSL_FFT_INPLACE);
179
- }
180
-
181
- static VALUE rb_gsl_fft_complex_radix2_inverse2(VALUE obj)
182
- {
183
- return rb_fft_complex_radix2(obj, gsl_fft_complex_radix2_inverse,
184
- RB_GSL_FFT_INPLACE);
185
- }
186
-
187
-
188
- static VALUE rb_gsl_fft_complex_radix2_dif_forward2(VALUE obj)
189
- {
190
- return rb_fft_complex_radix2(obj,
191
- gsl_fft_complex_radix2_dif_forward,
192
- RB_GSL_FFT_INPLACE);
193
- }
194
-
195
- static VALUE rb_gsl_fft_complex_radix2_dif_transform(VALUE obj, VALUE val_sign)
196
- {
197
- size_t stride, n;
198
- gsl_complex_packed_array data;
199
- gsl_vector_complex *vin, *vout;
200
- gsl_fft_direction sign;
201
- sign = NUM2INT(val_sign);
202
- get_complex_stride_n(obj, &vin, &data, &stride, &n);
203
- vout = gsl_vector_complex_alloc(n);
204
- gsl_vector_complex_memcpy(vout, vin);
205
- gsl_fft_complex_radix2_dif_transform(vout->data, vout->stride /*1*/, vout->size /*n*/, sign);
206
- return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, vout);
207
- }
208
-
209
- /* in-place */
210
- static VALUE rb_gsl_fft_complex_radix2_dif_transform2(VALUE obj, VALUE val_sign)
211
- {
212
- size_t stride, n;
213
- gsl_complex_packed_array data;
214
- gsl_fft_direction sign;
215
- VALUE ary;
216
- sign = NUM2INT(val_sign);
217
- ary = get_complex_stride_n(obj, NULL, &data, &stride, &n);
218
- gsl_fft_complex_radix2_dif_transform(data, stride, n, sign);
219
- return ary;
220
- }
221
-
222
- static VALUE rb_gsl_fft_complex_radix2_dif_backward(VALUE obj)
223
- {
224
- return rb_fft_complex_radix2(obj,
225
- gsl_fft_complex_radix2_dif_backward,
226
- RB_GSL_FFT_COPY);
227
- }
228
- static VALUE rb_gsl_fft_complex_radix2_dif_inverse(VALUE obj)
229
- {
230
- return rb_fft_complex_radix2(obj,
231
- gsl_fft_complex_radix2_dif_inverse,
232
- RB_GSL_FFT_COPY);
233
- }
234
-
235
- static VALUE rb_gsl_fft_complex_radix2_dif_backward2(VALUE obj)
236
- {
237
- return rb_fft_complex_radix2(obj,
238
- gsl_fft_complex_radix2_dif_backward,
239
- RB_GSL_FFT_INPLACE);
240
- }
241
- static VALUE rb_gsl_fft_complex_radix2_dif_inverse2(VALUE obj)
242
- {
243
- return rb_fft_complex_radix2(obj,
244
- gsl_fft_complex_radix2_dif_inverse,
245
- RB_GSL_FFT_INPLACE);
246
- }
247
-
248
- static VALUE rb_GSL_FFT_Wavetable_n(VALUE obj)
249
- {
250
- GSL_FFT_Wavetable *table;
251
- Data_Get_Struct(obj, GSL_FFT_Wavetable, table);
252
- return INT2FIX(table->n);
253
- }
254
-
255
- static VALUE rb_GSL_FFT_Wavetable_nf(VALUE obj)
256
- {
257
- GSL_FFT_Wavetable *table;
258
- Data_Get_Struct(obj, GSL_FFT_Wavetable, table);
259
- return INT2FIX(table->nf);
260
- }
261
-
262
- static VALUE rb_GSL_FFT_Wavetable_factor(VALUE obj)
263
- {
264
- GSL_FFT_Wavetable *table;
265
- gsl_vector_int *v;
266
- size_t i;
267
- Data_Get_Struct(obj, GSL_FFT_Wavetable, table);
268
- v = gsl_vector_int_alloc(table->nf);
269
- for (i = 0; i < table->nf; i++) gsl_vector_int_set(v, i, table->factor[i]);
270
- return Data_Wrap_Struct(cgsl_vector_int, 0, gsl_vector_int_free, v);
271
- }
272
-
273
- enum {
274
- NONE_OF_TWO = 0,
275
- ALLOC_SPACE = 1,
276
- ALLOC_TABLE = 2,
277
- BOTH_OF_TWO = 3,
278
- } FFTComplexStructAllocFlag;
279
-
280
- static void gsl_fft_free(int flag, GSL_FFT_Wavetable *table,
281
- GSL_FFT_Workspace *space);
282
-
283
- // Parse argc, argv. obj must be GSL::Vector::Complex.
284
- // This can be simplified at some point.
285
- // See comments preceding get_complex_stride_n()
286
- static int gsl_fft_get_argv_complex(int argc, VALUE *argv, VALUE obj,
287
- gsl_vector_complex ** vin,
288
- gsl_complex_packed_array *data, size_t *stride,
289
- size_t *n, gsl_fft_complex_wavetable **table,
290
- gsl_fft_complex_workspace **space)
291
- {
292
- int flag = NONE_OF_TWO, flagtmp, i, itmp = argc, itmp2 = 0, ccc;
293
- int flagw = 0;
294
-
295
- CHECK_VECTOR_COMPLEX(obj);
296
-
297
- ccc = argc;
298
- flagtmp = 0;
299
- flagw = 0;
300
- for (i = argc-1; i >= itmp2; i--) {
301
- if (rb_obj_is_kind_of(argv[i], cgsl_fft_complex_workspace)) {
302
- Data_Get_Struct(argv[i], gsl_fft_complex_workspace, *space);
303
- flagtmp = 1;
304
- flagw = 1;
305
- itmp = i;
306
- ccc--;
307
- break;
308
- }
309
- }
310
- flagtmp = 0;
311
- for (i = itmp-1; i >= itmp2; i--) {
312
- if (rb_obj_is_kind_of(argv[i], cgsl_fft_complex_wavetable)) {
313
- Data_Get_Struct(argv[i], gsl_fft_complex_wavetable, *table);
314
- flagtmp = 1;
315
- ccc--;
316
- break;
317
- }
318
- }
319
- get_complex_stride_n(obj, vin, data, stride, n);
320
- if (flagw == 0) {
321
- *space = gsl_fft_complex_workspace_alloc(*n);
322
- flag += ALLOC_SPACE;
323
- }
324
- if (flagtmp == 0) {
325
- *table = gsl_fft_complex_wavetable_alloc(*n);
326
- flag += ALLOC_TABLE;
327
- }
328
- if (*table == NULL) {
329
- rb_raise(rb_eRuntimeError, "something wrong with wavetable");
330
- }
331
- if (*space == NULL) {
332
- rb_raise(rb_eRuntimeError, "something wrong with workspace");
333
- }
334
- return flag;
335
- }
336
-
337
- // Parse argc, argv. obj must be GSL::Vector of real data
338
- static int gsl_fft_get_argv_real(int argc, VALUE *argv, VALUE obj,
339
- double **ptr, size_t *stride,
340
- size_t *n, gsl_fft_real_wavetable **table,
341
- gsl_fft_real_workspace **space, int *naflag)
342
- {
343
- int flag = NONE_OF_TWO, flagtmp, i, itmp = argc, itmp2 = 0, ccc;
344
- int flagw = 0;
345
- *naflag = 0;
346
-
347
- *ptr = get_ptr_double3(obj, n, stride, naflag);
348
-
349
- ccc = argc;
350
- flagtmp = 0;
351
- flagw = 0;
352
- for (i = argc-1; i >= itmp2; i--) {
353
- if (rb_obj_is_kind_of(argv[i], cgsl_fft_real_workspace)) {
354
- Data_Get_Struct(argv[i], gsl_fft_real_workspace, *space);
355
- flagtmp = 1;
356
- flagw = 1;
357
- itmp = i;
358
- ccc--;
359
- break;
360
- }
361
- }
362
- flagtmp = 0;
363
- for (i = itmp-1; i >= itmp2; i--) {
364
- if (rb_obj_is_kind_of(argv[i], cgsl_fft_real_wavetable)) {
365
- Data_Get_Struct(argv[i], gsl_fft_real_wavetable, *table);
366
- flagtmp = 1;
367
- ccc--;
368
- break;
369
- }
370
- }
371
- if (flagw == 0) {
372
- *space = gsl_fft_real_workspace_alloc(*n);
373
- flag += ALLOC_SPACE;
374
- }
375
- if (flagtmp == 0) {
376
- *table = gsl_fft_real_wavetable_alloc(*n);
377
- flag += ALLOC_TABLE;
378
- }
379
- if (*table == NULL) {
380
- rb_raise(rb_eRuntimeError, "something wrong with wavetable");
381
- }
382
- if (*space == NULL) {
383
- rb_raise(rb_eRuntimeError, "something wrong with workspace");
384
- }
385
- return flag;
386
- }
387
-
388
- // Parse argc, argv. obj must be GSL::Vector of halfcomplex data
389
- static int gsl_fft_get_argv_halfcomplex(int argc, VALUE *argv, VALUE obj,
390
- double **ptr, size_t *stride,
391
- size_t *n, gsl_fft_halfcomplex_wavetable **table,
392
- gsl_fft_real_workspace **space, int *naflag)
393
- {
394
- int flag = NONE_OF_TWO, flagtmp, i, itmp = argc, itmp2 = 0, ccc;
395
- int flagw = 0;
396
-
397
- *ptr = get_ptr_double3(obj, n, stride, naflag);
398
-
399
- ccc = argc;
400
- flagtmp = 0;
401
- flagw = 0;
402
- for (i = argc-1; i >= itmp2; i--) {
403
- if (rb_obj_is_kind_of(argv[i], cgsl_fft_real_workspace)) {
404
- Data_Get_Struct(argv[i], gsl_fft_real_workspace, *space);
405
- flagtmp = 1;
406
- flagw = 1;
407
- itmp = i;
408
- ccc--;
409
- break;
410
- }
411
- }
412
- flagtmp = 0;
413
- for (i = itmp-1; i >= itmp2; i--) {
414
- if (rb_obj_is_kind_of(argv[i], cgsl_fft_halfcomplex_wavetable)) {
415
- Data_Get_Struct(argv[i], gsl_fft_halfcomplex_wavetable, *table);
416
- flagtmp = 1;
417
- ccc--;
418
- break;
419
- }
420
- }
421
- if (flagw == 0) {
422
- *space = gsl_fft_real_workspace_alloc(*n);
423
- flag += ALLOC_SPACE;
424
- }
425
- if (flagtmp == 0) {
426
- *table = gsl_fft_halfcomplex_wavetable_alloc(*n);
427
- flag += ALLOC_TABLE;
428
- }
429
- if (*table == NULL) {
430
- rb_raise(rb_eRuntimeError, "something wrong with wavetable");
431
- }
432
- if (*space == NULL) {
433
- rb_raise(rb_eRuntimeError, "something wrong with workspace");
434
- }
435
- return flag;
436
- }
437
-
438
- static void gsl_fft_free(int flag, GSL_FFT_Wavetable *table,
439
- GSL_FFT_Workspace *space)
440
- {
441
- switch (flag) {
442
- case ALLOC_TABLE:
443
- GSL_FFT_Wavetable_free(table);
444
- break;
445
- case ALLOC_SPACE:
446
- GSL_FFT_Workspace_free(space);
447
- break;
448
- case BOTH_OF_TWO:
449
- GSL_FFT_Wavetable_free(table);
450
- GSL_FFT_Workspace_free(space);
451
- break;
452
- default:
453
- /* never happens */
454
- break;
455
- }
456
- }
457
-
458
- static VALUE rb_fft_complex_trans(int argc, VALUE *argv, VALUE obj,
459
- int (*transform)(gsl_complex_packed_array,
460
- size_t, size_t,
461
- const gsl_fft_complex_wavetable *,
462
- gsl_fft_complex_workspace *),
463
- int sss)
464
- {
465
- int flag = 0;
466
- // local variable "status" was defined and set, but never used
467
- //int status;
468
- size_t stride, n;
469
- gsl_complex_packed_array data;
470
- gsl_vector_complex *vin, *vout;
471
- gsl_fft_complex_wavetable *table = NULL;
472
- gsl_fft_complex_workspace *space = NULL;
473
- flag = gsl_fft_get_argv_complex(argc, argv, obj, &vin, &data, &stride, &n, &table, &space);
474
- if (sss == RB_GSL_FFT_COPY) {
475
- vout = gsl_vector_complex_alloc(n);
476
- gsl_vector_complex_memcpy(vout, vin);
477
- /*status =*/ (*transform)(vout->data, vout->stride /*1*/, vout->size /*n*/, table, space);
478
- gsl_fft_free(flag, (GSL_FFT_Wavetable *) table, (GSL_FFT_Workspace *) space);
479
- return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, vout);
480
- } else { /* in-place */
481
- /*status =*/ (*transform)(data, stride, n, table, space);
482
- gsl_fft_free(flag, (GSL_FFT_Wavetable *) table, (GSL_FFT_Workspace *) space);
483
- return obj;
484
- }
485
- }
486
-
487
- static VALUE rb_gsl_fft_complex_forward(int argc, VALUE *argv, VALUE obj)
488
- {
489
- return rb_fft_complex_trans(argc, argv, obj, gsl_fft_complex_forward,
490
- RB_GSL_FFT_COPY);
491
- }
492
-
493
- static VALUE rb_gsl_fft_complex_forward2(int argc, VALUE *argv, VALUE obj)
494
- {
495
- return rb_fft_complex_trans(argc, argv, obj, gsl_fft_complex_forward,
496
- RB_GSL_FFT_INPLACE);
497
- }
498
-
499
- static VALUE rb_gsl_fft_complex_transform(int argc, VALUE *argv, VALUE obj)
500
- {
501
- int flag = 0;
502
- // local variable "status" was defined and set, but never used
503
- //int status;
504
- size_t stride, n;
505
- gsl_vector_complex *vin, *vout;
506
- gsl_fft_direction sign;
507
- gsl_complex_packed_array data;
508
- gsl_fft_complex_wavetable *table = NULL;
509
- gsl_fft_complex_workspace *space = NULL;
510
- CHECK_FIXNUM(argv[argc-1]);
511
- sign = FIX2INT(argv[argc-1]);
512
- flag = gsl_fft_get_argv_complex(argc-1, argv, obj, &vin, &data, &stride, &n, &table, &space);
513
- vout = gsl_vector_complex_alloc(n);
514
- gsl_vector_complex_memcpy(vout, vin);
515
- /*status =*/ gsl_fft_complex_transform(vout->data, stride, n, table, space, sign);
516
- gsl_fft_free(flag, (GSL_FFT_Wavetable *) table, (GSL_FFT_Workspace *) space);
517
- return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, vout);
518
- }
519
-
520
- /* in-place */
521
- static VALUE rb_gsl_fft_complex_transform2(int argc, VALUE *argv, VALUE obj)
522
- {
523
- int flag = 0;
524
- // local variable "status" was defined and set, but never used
525
- //int status;
526
- size_t stride, n;
527
- gsl_fft_direction sign;
528
- gsl_complex_packed_array data;
529
- gsl_fft_complex_wavetable *table = NULL;
530
- gsl_fft_complex_workspace *space = NULL;
531
- CHECK_FIXNUM(argv[argc-1]);
532
- sign = FIX2INT(argv[argc-1]);
533
- flag = gsl_fft_get_argv_complex(argc-1, argv, obj, NULL, &data, &stride, &n, &table, &space);
534
- /*status =*/ gsl_fft_complex_transform(data, stride, n, table, space, sign);
535
- gsl_fft_free(flag, (GSL_FFT_Wavetable *) table, (GSL_FFT_Workspace *) space);
536
- return obj;
537
- }
538
-
539
- static VALUE rb_gsl_fft_complex_backward(int argc, VALUE *argv, VALUE obj)
540
- {
541
- return rb_fft_complex_trans(argc, argv, obj, gsl_fft_complex_backward,
542
- RB_GSL_FFT_COPY);
543
- }
544
-
545
- static VALUE rb_gsl_fft_complex_backward2(int argc, VALUE *argv, VALUE obj)
546
- {
547
- return rb_fft_complex_trans(argc, argv, obj, gsl_fft_complex_backward,
548
- RB_GSL_FFT_INPLACE);
549
- }
550
-
551
- static VALUE rb_gsl_fft_complex_inverse(int argc, VALUE *argv, VALUE obj)
552
- {
553
- return rb_fft_complex_trans(argc, argv, obj, gsl_fft_complex_inverse,
554
- RB_GSL_FFT_COPY);
555
- }
556
-
557
- static VALUE rb_gsl_fft_complex_inverse2(int argc, VALUE *argv, VALUE obj)
558
- {
559
- return rb_fft_complex_trans(argc, argv, obj, gsl_fft_complex_inverse,
560
- RB_GSL_FFT_INPLACE);
561
- }
562
-
563
- // The FFT methods used to allow passing stride and n values as optional
564
- // parameters to control which elements get transformed. This created problems
565
- // for Views which can have their own stride, so support for stride and n
566
- // parameters to the transform methods is being dropped. This method used to
567
- // be called to determine the stride and n values to use based on the
568
- // parameters and/or the vector itself (depending on how many parameters were
569
- // passed). Now this function is somewhat unneceesary, but to simplify the code
570
- // refactoring, it has been left in place for the time being. Eventually it
571
- // can be refactored away completely.
572
- //
573
- // obj must be GSL::Vector of real or halfcomplex data
574
- static VALUE get_ptr_stride_n(VALUE obj,
575
- double **ptr, size_t *stride, size_t *n, int *flag)
576
- {
577
- *flag = 0;
578
- *ptr = get_ptr_double3(obj, n, stride, flag);
579
- return obj;
580
- }
581
-
582
- static VALUE rb_fft_radix2(VALUE obj,
583
- int (*trans)(double [], size_t, size_t),
584
- int sss)
585
- {
586
- size_t stride, n;
587
- gsl_vector *vnew;
588
- gsl_vector_view vv;
589
- double *ptr1, *ptr2;
590
- int flag;
591
- VALUE ary;
592
- get_ptr_stride_n(obj, &ptr1, &stride, &n, &flag);
593
- if (flag == 0) {
594
- if (sss == RB_GSL_FFT_COPY) {
595
- vnew = gsl_vector_alloc(n);
596
- vv.vector.data = ptr1;
597
- vv.vector.stride = stride;
598
- vv.vector.size = n;
599
- gsl_vector_memcpy(vnew, &vv.vector);
600
- ptr2 = vnew->data;
601
- stride = 1;
602
- ary = Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
603
- } else {
604
- ary = obj;
605
- ptr2 = ptr1;
606
- }
607
- #ifdef HAVE_NARRAY_H
608
- } else if (flag == 1) {
609
- if (sss == RB_GSL_FFT_COPY) {
610
- int shape[1];
611
- shape[0] = n;
612
- ary = na_make_object(NA_DFLOAT, 1, shape, cNArray);
613
- ptr2 = NA_PTR_TYPE(ary, double*);
614
- memcpy(ptr2, ptr1, sizeof(double)*n);
615
- stride = 1;
616
- } else {
617
- ary = obj;
618
- ptr2 = NA_PTR_TYPE(ary, double*);
619
- }
620
- #endif
621
- } else {
622
- rb_raise(rb_eRuntimeError, "something wrong");
623
- }
624
- (*trans)(ptr2, stride, n);
625
- return ary;
626
- }
627
-
628
- static VALUE rb_gsl_fft_real_radix2_transform(VALUE obj)
629
- {
630
- return rb_fft_radix2(obj, gsl_fft_real_radix2_transform,
631
- RB_GSL_FFT_COPY);
632
- }
633
-
634
- static VALUE rb_gsl_fft_real_radix2_transform2(VALUE obj)
635
- {
636
- return rb_fft_radix2(obj, gsl_fft_real_radix2_transform,
637
- RB_GSL_FFT_INPLACE);
638
- }
639
-
640
- static VALUE rb_gsl_fft_halfcomplex_radix2_inverse(VALUE obj)
641
- {
642
- return rb_fft_radix2(obj, gsl_fft_halfcomplex_radix2_inverse,
643
- RB_GSL_FFT_COPY);
644
- }
645
-
646
- static VALUE rb_gsl_fft_halfcomplex_radix2_inverse2(VALUE obj)
647
- {
648
- return rb_fft_radix2(obj, gsl_fft_halfcomplex_radix2_inverse,
649
- RB_GSL_FFT_INPLACE);
650
- }
651
-
652
- static VALUE rb_gsl_fft_halfcomplex_radix2_backward(VALUE obj)
653
- {
654
- return rb_fft_radix2(obj, gsl_fft_halfcomplex_radix2_backward,
655
- RB_GSL_FFT_COPY);
656
- }
657
-
658
- static VALUE rb_gsl_fft_halfcomplex_radix2_backward2(VALUE obj)
659
- {
660
- return rb_fft_radix2(obj, gsl_fft_halfcomplex_radix2_backward,
661
- RB_GSL_FFT_INPLACE);
662
- }
663
-
664
- /*****/
665
-
666
- static VALUE rb_fft_real_trans(int argc, VALUE *argv, VALUE obj,
667
- int (*trans)(double [], size_t, size_t,
668
- const gsl_fft_real_wavetable *,
669
- gsl_fft_real_workspace *),
670
- int sss)
671
- {
672
- int flag = 0, naflag = 0;
673
- // local variable "status" was defined and set, but never used
674
- //int status;
675
- size_t stride, n;
676
- gsl_vector *vnew;
677
- gsl_vector_view vv;
678
- double *ptr1, *ptr2;
679
- gsl_fft_real_wavetable *table = NULL;
680
- gsl_fft_real_workspace *space = NULL;
681
- VALUE ary;
682
- flag = gsl_fft_get_argv_real(argc, argv, obj, &ptr1, &stride, &n, &table, &space, &naflag);
683
- if (naflag == 0) {
684
- if (sss == RB_GSL_FFT_COPY) {
685
- vnew = gsl_vector_alloc(n);
686
- vv.vector.data = ptr1;
687
- vv.vector.stride = stride;
688
- vv.vector.size = n;
689
- gsl_vector_memcpy(vnew, &vv.vector);
690
- ptr2 = vnew->data;
691
- stride = 1;
692
- ary = Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
693
- } else {
694
- ptr2 = ptr1;
695
- ary = obj;
696
- }
697
- #ifdef HAVE_NARRAY_H
698
- } else if (naflag == 1) {
699
- if (sss == RB_GSL_FFT_COPY) {
700
- int shape[1];
701
- shape[0] = n;
702
- ary = na_make_object(NA_DFLOAT, 1, shape, cNArray);
703
- ptr2 = NA_PTR_TYPE(ary, double*);
704
- memcpy(ptr2, ptr1, sizeof(double)*n);
705
- stride = 1;
706
- } else {
707
- ptr2 = ptr1;
708
- ary = obj;
709
- }
710
- #endif
711
- } else {
712
- rb_raise(rb_eRuntimeError, "something wrong");
713
- }
714
- /*status =*/ (*trans)(ptr2, stride, n, table, space);
715
- gsl_fft_free(flag, (GSL_FFT_Wavetable *) table, (GSL_FFT_Workspace *) space);
716
- return ary;
717
- }
718
-
719
- static VALUE rb_gsl_fft_real_transform(int argc, VALUE *argv, VALUE obj)
720
- {
721
- return rb_fft_real_trans(argc, argv, obj, gsl_fft_real_transform,
722
- RB_GSL_FFT_COPY);
723
- }
724
-
725
- static VALUE rb_gsl_fft_real_transform2(int argc, VALUE *argv, VALUE obj)
726
- {
727
- return rb_fft_real_trans(argc, argv, obj, gsl_fft_real_transform,
728
- RB_GSL_FFT_INPLACE);
729
- }
730
-
731
- static VALUE rb_fft_halfcomplex_trans(int argc, VALUE *argv, VALUE obj,
732
- int (*trans)(double [], size_t, size_t,
733
- const gsl_fft_halfcomplex_wavetable *, gsl_fft_real_workspace *),
734
- int sss)
735
- {
736
- int flag = 0, naflag = 0;
737
- // local variable "status" was defined and set, but never used
738
- //int status;
739
- size_t stride, n;
740
- gsl_vector *vnew;
741
- gsl_vector_view vv;
742
- double *ptr1, *ptr2;
743
- gsl_fft_halfcomplex_wavetable *table = NULL;
744
- gsl_fft_real_workspace *space = NULL;
745
- VALUE ary;
746
- flag = gsl_fft_get_argv_halfcomplex(argc, argv, obj, &ptr1, &stride, &n,
747
- &table, &space, &naflag);
748
- if (naflag == 0) {
749
- if (sss == RB_GSL_FFT_COPY) {
750
- vnew = gsl_vector_alloc(n);
751
- vv.vector.data = ptr1;
752
- vv.vector.stride = stride;
753
- vv.vector.size = n;
754
- gsl_vector_memcpy(vnew, &vv.vector);
755
- ptr2 = vnew->data;
756
- stride = 1;
757
- ary = Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
758
- } else {
759
- ptr2 = ptr1;
760
- ary = obj;
761
- }
762
- #ifdef HAVE_NARRAY_H
763
- } else if (naflag == 1) {
764
- if (sss == RB_GSL_FFT_COPY) {
765
- int shape[1];
766
- shape[0] = n;
767
- ary = na_make_object(NA_DFLOAT, 1, shape, cNArray);
768
- ptr2 = NA_PTR_TYPE(ary, double*);
769
- memcpy(ptr2, ptr1, sizeof(double)*n);
770
- stride = 1;
771
- } else {
772
- ptr2 = ptr1;
773
- ary = obj;
774
- }
775
- #endif
776
- } else {
777
- rb_raise(rb_eRuntimeError, "something wrong");
778
- }
779
- /*status =*/ (*trans)(ptr2, stride, n, table, space);
780
- gsl_fft_free(flag, (GSL_FFT_Wavetable *) table, (GSL_FFT_Workspace *) space);
781
- return ary;
782
- }
783
-
784
- static VALUE rb_gsl_fft_halfcomplex_transform(int argc, VALUE *argv, VALUE obj)
785
- {
786
- return rb_fft_halfcomplex_trans(argc, argv, obj,
787
- gsl_fft_halfcomplex_transform,
788
- RB_GSL_FFT_COPY);
789
- }
790
-
791
- static VALUE rb_gsl_fft_halfcomplex_transform2(int argc, VALUE *argv, VALUE obj)
792
- {
793
- return rb_fft_halfcomplex_trans(argc, argv, obj,
794
- gsl_fft_halfcomplex_transform,
795
- RB_GSL_FFT_INPLACE);
796
- }
797
-
798
- static VALUE rb_gsl_fft_halfcomplex_backward(int argc, VALUE *argv, VALUE obj)
799
- {
800
- return rb_fft_halfcomplex_trans(argc, argv, obj,
801
- gsl_fft_halfcomplex_backward,
802
- RB_GSL_FFT_COPY);
803
- }
804
-
805
- static VALUE rb_gsl_fft_halfcomplex_backward2(int argc, VALUE *argv, VALUE obj)
806
- {
807
- return rb_fft_halfcomplex_trans(argc, argv, obj,
808
- gsl_fft_halfcomplex_backward,
809
- RB_GSL_FFT_INPLACE);
810
- }
811
-
812
- static VALUE rb_gsl_fft_halfcomplex_inverse(int argc, VALUE *argv, VALUE obj)
813
- {
814
- return rb_fft_halfcomplex_trans(argc, argv, obj,
815
- gsl_fft_halfcomplex_inverse,
816
- RB_GSL_FFT_COPY);
817
- }
818
-
819
- static VALUE rb_gsl_fft_halfcomplex_inverse2(int argc, VALUE *argv, VALUE obj)
820
- {
821
- return rb_fft_halfcomplex_trans(argc, argv, obj,
822
- gsl_fft_halfcomplex_inverse,
823
- RB_GSL_FFT_INPLACE);
824
- }
825
-
826
- static VALUE rb_gsl_fft_real_unpack(VALUE obj)
827
- {
828
- gsl_vector *v;
829
- gsl_vector_complex *vout;
830
-
831
- CHECK_VECTOR(obj);
832
- Data_Get_Struct(obj, gsl_vector, v);
833
-
834
- vout = gsl_vector_complex_alloc(v->size);
835
- gsl_fft_real_unpack(v->data, (gsl_complex_packed_array) vout->data, v->stride, v->size);
836
- return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, vout);
837
- }
838
-
839
- static VALUE rb_gsl_fft_halfcomplex_unpack(VALUE obj)
840
- {
841
- gsl_vector *v;
842
- gsl_vector_complex *vout;
843
-
844
- CHECK_VECTOR(obj);
845
- Data_Get_Struct(obj, gsl_vector, v);
846
-
847
- vout = gsl_vector_complex_alloc(v->size);
848
- gsl_fft_halfcomplex_unpack(v->data, (gsl_complex_packed_array) vout->data, v->stride, v->size);
849
- return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, vout);
850
- }
851
-
852
- /* Convert a halfcomplex data to Numerical Recipes style */
853
- static VALUE rb_gsl_fft_halfcomplex_to_nrc(VALUE obj)
854
- {
855
- gsl_vector *v, *vnew;
856
- size_t i, k;
857
-
858
- CHECK_VECTOR(obj);
859
- Data_Get_Struct(obj, gsl_vector, v);
860
-
861
- vnew = gsl_vector_alloc(v->size);
862
- gsl_vector_set(vnew, 0, gsl_vector_get(v, 0)); /* DC */
863
- gsl_vector_set(vnew, 1, gsl_vector_get(v, v->size/2)); /* Nyquist freq */
864
- for (i = 2, k = 1; i < vnew->size; i += 2, k++) {
865
- gsl_vector_set(vnew, i, gsl_vector_get(v, k));
866
- gsl_vector_set(vnew, i+1, -gsl_vector_get(v, v->size-k));
867
- }
868
- return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
869
- }
870
-
871
- static VALUE rb_gsl_fft_halfcomplex_amp_phase(VALUE obj)
872
- {
873
- gsl_vector *v;
874
- gsl_vector *amp, *phase;
875
- double re, im;
876
- VALUE vamp, vphase;
877
- size_t i;
878
- CHECK_VECTOR(obj);
879
- Data_Get_Struct(obj, gsl_vector, v);
880
- amp = gsl_vector_alloc(v->size/2);
881
- phase = gsl_vector_alloc(v->size/2);
882
- gsl_vector_set(amp, 0, gsl_vector_get(v, 0));
883
- gsl_vector_set(phase, 0, 0);
884
- gsl_vector_set(amp, amp->size-1, gsl_vector_get(v, v->size-1));
885
- gsl_vector_set(phase, phase->size-1, 0);
886
- for (i = 1; i < v->size-1; i += 2) {
887
- re = gsl_vector_get(v, i);
888
- im = gsl_vector_get(v, i+1);
889
- gsl_vector_set(amp, i/2+1, sqrt(re*re + im*im));
890
- gsl_vector_set(phase, i/2+1, atan2(im, re));
891
- }
892
- vamp = Data_Wrap_Struct(VECTOR_ROW_COL(obj), 0, gsl_vector_free, amp);
893
- vphase = Data_Wrap_Struct(VECTOR_ROW_COL(obj), 0, gsl_vector_free, phase);
894
- return rb_ary_new3(2, vamp, vphase);
895
- }
896
-
897
- void Init_gsl_fft(VALUE module)
898
- {
899
- mgsl_fft = rb_define_module_under(module, "FFT");
900
-
901
- /*****/
902
-
903
- rb_define_const(mgsl_fft, "Forward", INT2FIX(gsl_fft_forward));
904
- rb_define_const(mgsl_fft, "FORWARD", INT2FIX(gsl_fft_forward));
905
- rb_define_const(mgsl_fft, "Backward", INT2FIX(gsl_fft_backward));
906
- rb_define_const(mgsl_fft, "BACKWARD", INT2FIX(gsl_fft_backward));
907
-
908
- /* Transforms for complex vectors */
909
- rb_define_method(cgsl_vector_complex, "radix2_forward",
910
- rb_gsl_fft_complex_radix2_forward, 0);
911
- rb_define_method(cgsl_vector_complex, "radix2_transform",
912
- rb_gsl_fft_complex_radix2_transform, 1);
913
- rb_define_method(cgsl_vector_complex, "radix2_backward",
914
- rb_gsl_fft_complex_radix2_backward, 0);
915
- rb_define_method(cgsl_vector_complex, "radix2_inverse",
916
- rb_gsl_fft_complex_radix2_inverse, 0);
917
- rb_define_method(cgsl_vector_complex, "radix2_dif_forward",
918
- rb_gsl_fft_complex_radix2_dif_forward, 0);
919
- rb_define_method(cgsl_vector_complex, "radix2_dif_transform",
920
- rb_gsl_fft_complex_radix2_dif_transform, 1);
921
- rb_define_method(cgsl_vector_complex, "radix2_dif_backward",
922
- rb_gsl_fft_complex_radix2_dif_backward, 0);
923
- rb_define_method(cgsl_vector_complex, "radix2_dif_inverse",
924
- rb_gsl_fft_complex_radix2_dif_inverse, 0);
925
-
926
- /* In-place radix-2 transforms for complex vectors */
927
- rb_define_method(cgsl_vector_complex, "radix2_forward!",
928
- rb_gsl_fft_complex_radix2_forward2, 0);
929
- rb_define_method(cgsl_vector_complex, "radix2_transform!",
930
- rb_gsl_fft_complex_radix2_transform2, 1);
931
- rb_define_method(cgsl_vector_complex, "radix2_backward!",
932
- rb_gsl_fft_complex_radix2_backward2, 0);
933
- rb_define_method(cgsl_vector_complex, "radix2_inverse!",
934
- rb_gsl_fft_complex_radix2_inverse2, 0);
935
- rb_define_method(cgsl_vector_complex, "radix2_dif_forward!",
936
- rb_gsl_fft_complex_radix2_dif_forward2, 0);
937
- rb_define_method(cgsl_vector_complex, "radix2_dif_transform!",
938
- rb_gsl_fft_complex_radix2_dif_transform2, 1);
939
- rb_define_method(cgsl_vector_complex, "radix2_dif_backward!",
940
- rb_gsl_fft_complex_radix2_dif_backward2, 0);
941
- rb_define_method(cgsl_vector_complex, "radix2_dif_inverse!",
942
- rb_gsl_fft_complex_radix2_dif_inverse2, 0);
943
-
944
- // class GSL::FFT::Wavetable < GSL::Object
945
- //
946
- // Useful since some functionality is shared among
947
- // GSL::FFT::Complex::Wavetable
948
- // GSL::FFT::Real::Wavetable
949
- // GSL::FFT::HalfComplex::Wavetable
950
- cgsl_fft_wavetable = rb_define_class_under(mgsl_fft, "Wavetable", cGSL_Object);
951
- // No alloc
952
- // TODO Make GSL::FFT::Wavetable#initialize private?
953
- rb_define_method(cgsl_fft_wavetable, "n",
954
- rb_GSL_FFT_Wavetable_n, 0);
955
- rb_define_method(cgsl_fft_wavetable, "nf",
956
- rb_GSL_FFT_Wavetable_nf, 0);
957
- rb_define_method(cgsl_fft_wavetable, "factor",
958
- rb_GSL_FFT_Wavetable_factor, 0);
959
-
960
- // class GSL::FFT::ComplexWavetable < GSL::FFT::Wavetable
961
- cgsl_fft_complex_wavetable = rb_define_class_under(mgsl_fft, "ComplexWavetable",
962
- cgsl_fft_wavetable);
963
- rb_define_singleton_method(cgsl_fft_complex_wavetable, "alloc",
964
- rb_gsl_fft_complex_wavetable_new, 1);
965
-
966
- // class GSL::FFT::ComplexWorkspace < GSL::Object
967
- cgsl_fft_complex_workspace = rb_define_class_under(mgsl_fft, "ComplexWorkspace",
968
- cGSL_Object);
969
- rb_define_singleton_method(cgsl_fft_complex_workspace, "alloc",
970
- rb_gsl_fft_complex_workspace_new, 1);
971
-
972
- rb_define_method(cgsl_vector_complex, "forward", rb_gsl_fft_complex_forward, -1);
973
- rb_define_method(cgsl_vector_complex, "transform", rb_gsl_fft_complex_transform, -1);
974
- rb_define_method(cgsl_vector_complex, "backward", rb_gsl_fft_complex_backward, -1);
975
- rb_define_method(cgsl_vector_complex, "inverse", rb_gsl_fft_complex_inverse, -1);
976
-
977
- rb_define_method(cgsl_vector_complex, "forward!", rb_gsl_fft_complex_forward2, -1);
978
- rb_define_method(cgsl_vector_complex, "transform!", rb_gsl_fft_complex_transform2, -1);
979
- rb_define_method(cgsl_vector_complex, "backward!", rb_gsl_fft_complex_backward2, -1);
980
- rb_define_method(cgsl_vector_complex, "inverse!", rb_gsl_fft_complex_inverse2, -1);
981
-
982
- /*****/
983
-
984
- // TODO Do these method names need the "real_" and "halfcomplex_" prefixes?
985
- rb_define_method(cgsl_vector, "real_radix2_transform",
986
- rb_gsl_fft_real_radix2_transform, 0);
987
- rb_define_alias(cgsl_vector, "radix2_transform", "real_radix2_transform");
988
- rb_define_alias(cgsl_vector, "radix2_forward", "real_radix2_transform");
989
- rb_define_method(cgsl_vector, "real_radix2_inverse",
990
- rb_gsl_fft_halfcomplex_radix2_inverse, 0);
991
- rb_define_alias(cgsl_vector, "radix2_inverse", "real_radix2_inverse");
992
- rb_define_alias(cgsl_vector, "halfcomplex_radix2_inverse",
993
- "real_radix2_inverse");
994
- rb_define_method(cgsl_vector, "real_radix2_backward",
995
- rb_gsl_fft_halfcomplex_radix2_backward, 0);
996
- rb_define_alias(cgsl_vector, "radix2_backward", "real_radix2_backward");
997
- rb_define_alias(cgsl_vector, "halfcomplex_radix2_backward",
998
- "real_radix2_backward");
999
-
1000
- // TODO Do these method names need the "real_" and "halfcomplex_" prefixes?
1001
- rb_define_method(cgsl_vector, "real_radix2_transform!",
1002
- rb_gsl_fft_real_radix2_transform2, 0);
1003
- rb_define_alias(cgsl_vector, "radix2_transform!", "real_radix2_transform!");
1004
- rb_define_alias(cgsl_vector, "radix2_forward!", "real_radix2_transform!");
1005
- rb_define_method(cgsl_vector, "real_radix2_inverse!",
1006
- rb_gsl_fft_halfcomplex_radix2_inverse2, 0);
1007
- rb_define_alias(cgsl_vector, "radix2_inverse!", "real_radix2_inverse!");
1008
- rb_define_alias(cgsl_vector, "halfcomplex_radix2_inverse!",
1009
- "real_radix2_inverse!");
1010
- rb_define_method(cgsl_vector, "real_radix2_backward!",
1011
- rb_gsl_fft_halfcomplex_radix2_backward2, 0);
1012
- rb_define_alias(cgsl_vector, "radix2_backward!", "real_radix2_backward!");
1013
- rb_define_alias(cgsl_vector, "halfcomplex_radix2_backward!",
1014
- "real_radix2_backward!");
1015
-
1016
- /*****/
1017
-
1018
- // class GSL::FFT::RealWavetable < GSL::FFT::Wavetable
1019
- cgsl_fft_real_wavetable = rb_define_class_under(mgsl_fft, "RealWavetable",
1020
- cgsl_fft_wavetable);
1021
- rb_define_singleton_method(cgsl_fft_real_wavetable, "alloc",
1022
- rb_gsl_fft_real_wavetable_new, 1);
1023
-
1024
- // class GSL::FFT::HalfComplexWavetable < GSL::FFT::Wavetable
1025
- cgsl_fft_halfcomplex_wavetable = rb_define_class_under(mgsl_fft,
1026
- "HalfComplexWavetable", cgsl_fft_wavetable);
1027
- rb_define_singleton_method(cgsl_fft_halfcomplex_wavetable, "alloc",
1028
- rb_gsl_fft_halfcomplex_wavetable_new, 1);
1029
-
1030
- /*****/
1031
-
1032
- // class GSL::FFT::RealWorkspace < GSL::Object
1033
- cgsl_fft_real_workspace = rb_define_class_under(mgsl_fft, "RealWorkspace",
1034
- cGSL_Object);
1035
- rb_define_singleton_method(cgsl_fft_real_workspace, "alloc",
1036
- rb_gsl_fft_real_workspace_new, 1);
1037
-
1038
- /*****/
1039
-
1040
- // TODO Do these method names need the "real_" and "halfcomplex_" prefixes?
1041
- rb_define_method(cgsl_vector, "real_transform", rb_gsl_fft_real_transform, -1);
1042
- rb_define_alias(cgsl_vector, "transform", "real_transform");
1043
- rb_define_alias(cgsl_vector, "forward", "real_transform");
1044
- rb_define_alias(cgsl_vector, "fft_forward", "real_transform");
1045
- rb_define_alias(cgsl_vector, "fft", "real_transform");
1046
- rb_define_method(cgsl_vector, "halfcomplex_transform",
1047
- rb_gsl_fft_halfcomplex_transform, -1);
1048
- rb_define_method(cgsl_vector, "halfcomplex_backward",
1049
- rb_gsl_fft_halfcomplex_backward, -1);
1050
- rb_define_alias(cgsl_vector, "backward", "halfcomplex_backward");
1051
- rb_define_alias(cgsl_vector, "fft_backward", "halfcomplex_backward");
1052
- rb_define_method(cgsl_vector, "halfcomplex_inverse",
1053
- rb_gsl_fft_halfcomplex_inverse, -1);
1054
- rb_define_alias(cgsl_vector, "fft_inverse", "halfcomplex_inverse");
1055
- rb_define_alias(cgsl_vector, "ifft", "halfcomplex_inverse");
1056
- rb_define_alias(cgsl_vector, "inverse", "halfcomplex_inverse");
1057
-
1058
- rb_define_method(cgsl_vector, "real_transform!", rb_gsl_fft_real_transform2, -1);
1059
- rb_define_alias(cgsl_vector, "transform!", "real_transform!");
1060
- rb_define_alias(cgsl_vector, "forward!", "real_transform!");
1061
- rb_define_alias(cgsl_vector, "fft_forward!", "real_transform!");
1062
- rb_define_alias(cgsl_vector, "fft!", "real_transform!");
1063
- rb_define_method(cgsl_vector, "halfcomplex_transform!",
1064
- rb_gsl_fft_halfcomplex_transform2, -1);
1065
- rb_define_method(cgsl_vector, "halfcomplex_backward!",
1066
- rb_gsl_fft_halfcomplex_backward2, -1);
1067
- rb_define_alias(cgsl_vector, "backward!", "halfcomplex_backward!");
1068
- rb_define_alias(cgsl_vector, "fft_backward!", "halfcomplex_backward!");
1069
- rb_define_method(cgsl_vector, "halfcomplex_inverse!",
1070
- rb_gsl_fft_halfcomplex_inverse2, -1);
1071
- rb_define_alias(cgsl_vector, "fft_inverse!", "halfcomplex_inverse!");
1072
- rb_define_alias(cgsl_vector, "ifft!", "halfcomplex_inverse!");
1073
- rb_define_alias(cgsl_vector, "inverse!", "halfcomplex_inverse!");
1074
-
1075
- /***/
1076
- rb_define_method(cgsl_vector, "fft_real_unpack", rb_gsl_fft_real_unpack, 0);
1077
- rb_define_alias(cgsl_vector, "real_unpack", "fft_real_unpack");
1078
- rb_define_alias(cgsl_vector, "real_to_complex", "fft_real_unpack");
1079
- rb_define_alias(cgsl_vector, "r_to_c", "fft_real_unpack");
1080
-
1081
- rb_define_method(cgsl_vector, "fft_halfcomplex_unpack",
1082
- rb_gsl_fft_halfcomplex_unpack, 0);
1083
- rb_define_alias(cgsl_vector, "halfcomplex_unpack", "fft_halfcomplex_unpack");
1084
- rb_define_alias(cgsl_vector, "halfcomplex_to_complex", "fft_halfcomplex_unpack");
1085
- rb_define_alias(cgsl_vector, "hc_to_c", "fft_halfcomplex_unpack");
1086
-
1087
- /*****/
1088
-
1089
- rb_define_method(cgsl_vector, "to_nrc_order",
1090
- rb_gsl_fft_halfcomplex_to_nrc, 0);
1091
-
1092
- rb_define_method(cgsl_vector, "halfcomplex_amp_phase",
1093
- rb_gsl_fft_halfcomplex_amp_phase, 0);
1094
- rb_define_alias(cgsl_vector, "hc_amp_phase", "halfcomplex_amp_phase");
1095
- }