gsl 1.15.3 → 1.16.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.travis.yml +24 -0
- data/AUTHORS +10 -2
- data/COPYING +341 -339
- data/ChangeLog +612 -554
- data/Gemfile +4 -0
- data/README.md +77 -0
- data/Rakefile +14 -93
- data/THANKS +1 -1
- data/examples/blas/blas.rb +1 -1
- data/examples/bspline.rb +3 -3
- data/examples/complex/functions.rb +4 -4
- data/examples/complex/mul.rb +1 -1
- data/examples/const/physconst.rb +4 -4
- data/examples/const/travel.rb +4 -4
- data/examples/eigen/nonsymmv.rb +1 -1
- data/examples/eigen/qhoscillator.rb +3 -3
- data/examples/fft/radix2.rb +1 -1
- data/examples/fft/real-halfcomplex.rb +3 -3
- data/examples/fft/real-halfcomplex2.rb +3 -3
- data/examples/fit/expfit.rb +1 -1
- data/examples/fit/multifit.rb +1 -1
- data/examples/fit/ndlinear.rb +44 -44
- data/examples/fit/nonlinearfit.rb +1 -1
- data/examples/fit/wlinear.rb +3 -3
- data/examples/function/function.rb +1 -1
- data/examples/function/min.rb +1 -1
- data/examples/function/synchrotron.rb +2 -2
- data/examples/gallery/koch.rb +1 -1
- data/examples/histogram/cauchy.rb +2 -2
- data/examples/histogram/exponential.rb +1 -1
- data/examples/histogram/histo3d.rb +1 -1
- data/examples/histogram/histogram-pdf.rb +2 -2
- data/examples/histogram/xexp.rb +1 -1
- data/examples/integration/ahmed.rb +2 -2
- data/examples/integration/cosmology.rb +7 -7
- data/examples/integration/friedmann.rb +4 -4
- data/examples/integration/qng.rb +1 -1
- data/examples/interp/demo.rb +2 -2
- data/examples/linalg/LQ_solve.rb +1 -1
- data/examples/linalg/LU.rb +1 -1
- data/examples/linalg/LU2.rb +1 -1
- data/examples/linalg/LU_narray.rb +1 -1
- data/examples/linalg/PTLQ.rb +1 -1
- data/examples/linalg/QRPT.rb +1 -1
- data/examples/linalg/chol.rb +1 -1
- data/examples/linalg/chol_narray.rb +1 -1
- data/examples/linalg/complex.rb +1 -1
- data/examples/math/elementary.rb +1 -1
- data/examples/math/functions.rb +1 -1
- data/examples/math/inf_nan.rb +1 -1
- data/examples/math/minmax.rb +1 -1
- data/examples/math/power.rb +1 -1
- data/examples/math/test.rb +1 -1
- data/examples/min.rb +1 -1
- data/examples/multimin/bundle.rb +1 -1
- data/examples/multimin/cqp.rb +17 -17
- data/examples/multiroot/fsolver3.rb +1 -1
- data/examples/odeiv/binarysystem.rb +12 -12
- data/examples/odeiv/demo.rb +3 -3
- data/examples/odeiv/frei1.rb +7 -7
- data/examples/odeiv/frei2.rb +4 -4
- data/examples/odeiv/oscillator.rb +1 -1
- data/examples/odeiv/sedov.rb +3 -3
- data/examples/odeiv/whitedwarf.rb +11 -11
- data/examples/permutation/ex1.rb +2 -2
- data/examples/permutation/permutation.rb +1 -1
- data/examples/poly/demo.rb +1 -1
- data/examples/random/diffusion.rb +1 -1
- data/examples/random/generator.rb +2 -2
- data/examples/random/randomwalk.rb +3 -3
- data/examples/random/rng.rb +1 -1
- data/examples/roots/bisection.rb +1 -1
- data/examples/roots/brent.rb +1 -1
- data/examples/roots/demo.rb +1 -1
- data/examples/roots/newton.rb +2 -2
- data/examples/roots/recombination.gp +0 -1
- data/examples/sf/hyperg.rb +1 -1
- data/examples/sf/sphbessel.rb +1 -1
- data/examples/sort/sort.rb +1 -1
- data/examples/tamu_anova.rb +4 -4
- data/examples/vector/add.rb +1 -1
- data/examples/vector/decimate.rb +1 -1
- data/examples/vector/gnuplot.rb +8 -8
- data/examples/vector/vector.rb +2 -2
- data/examples/wavelet/wavelet1.rb +1 -1
- data/ext/{alf.c → gsl_native/alf.c} +10 -10
- data/ext/{array.c → gsl_native/array.c} +70 -159
- data/ext/{array_complex.c → gsl_native/array_complex.c} +63 -66
- data/ext/{blas.c → gsl_native/blas.c} +2 -3
- data/ext/{blas1.c → gsl_native/blas1.c} +35 -36
- data/ext/{blas2.c → gsl_native/blas2.c} +57 -62
- data/ext/{blas3.c → gsl_native/blas3.c} +57 -58
- data/ext/{block.c → gsl_native/block.c} +14 -18
- data/ext/{block_source.c → gsl_native/block_source.h} +110 -112
- data/ext/gsl_native/bspline.c +122 -0
- data/ext/{bundle.c → gsl_native/bundle.c} +0 -0
- data/ext/{cdf.c → gsl_native/cdf.c} +79 -93
- data/ext/{cheb.c → gsl_native/cheb.c} +78 -89
- data/ext/{combination.c → gsl_native/combination.c} +11 -19
- data/ext/{common.c → gsl_native/common.c} +9 -41
- data/ext/{complex.c → gsl_native/complex.c} +116 -118
- data/ext/gsl_native/const.c +331 -0
- data/ext/{const_additional.c → gsl_native/const_additional.c} +13 -34
- data/ext/gsl_native/cqp.c +283 -0
- data/ext/{deriv.c → gsl_native/deriv.c} +25 -33
- data/ext/{dht.c → gsl_native/dht.c} +23 -31
- data/ext/{diff.c → gsl_native/diff.c} +26 -28
- data/ext/{dirac.c → gsl_native/dirac.c} +45 -46
- data/ext/{eigen.c → gsl_native/eigen.c} +1044 -1095
- data/ext/{error.c → gsl_native/error.c} +18 -18
- data/ext/gsl_native/extconf.rb +118 -0
- data/ext/{fft.c → gsl_native/fft.c} +197 -204
- data/ext/{fit.c → gsl_native/fit.c} +17 -18
- data/ext/gsl_native/fresnel.c +312 -0
- data/ext/{function.c → gsl_native/function.c} +37 -43
- data/ext/{geometry.c → gsl_native/geometry.c} +16 -16
- data/ext/{graph.c → gsl_native/graph.c} +39 -89
- data/ext/{gsl.c → gsl_native/gsl.c} +12 -33
- data/ext/{gsl_narray.c → gsl_native/gsl_narray.c} +20 -30
- data/ext/{histogram.c → gsl_native/histogram.c} +133 -160
- data/ext/{histogram2d.c → gsl_native/histogram2d.c} +78 -104
- data/ext/{histogram3d.c → gsl_native/histogram3d.c} +76 -76
- data/ext/{histogram3d_source.c → gsl_native/histogram3d_source.c} +196 -197
- data/ext/{histogram_find.c → gsl_native/histogram_find.c} +32 -34
- data/ext/{histogram_oper.c → gsl_native/histogram_oper.c} +43 -52
- data/ext/{ieee.c → gsl_native/ieee.c} +9 -21
- data/{include → ext/gsl_native/include}/rb_gsl.h +4 -26
- data/{include → ext/gsl_native/include}/rb_gsl_array.h +15 -39
- data/{include → ext/gsl_native/include}/rb_gsl_cheb.h +0 -2
- data/{include → ext/gsl_native/include}/rb_gsl_common.h +61 -61
- data/{include → ext/gsl_native/include}/rb_gsl_complex.h +1 -1
- data/{include → ext/gsl_native/include}/rb_gsl_const.h +0 -6
- data/ext/gsl_native/include/rb_gsl_dirac.h +6 -0
- data/{include → ext/gsl_native/include}/rb_gsl_eigen.h +1 -1
- data/{include → ext/gsl_native/include}/rb_gsl_fft.h +0 -13
- data/{include → ext/gsl_native/include}/rb_gsl_fit.h +0 -2
- data/{include → ext/gsl_native/include}/rb_gsl_function.h +0 -4
- data/{include → ext/gsl_native/include}/rb_gsl_graph.h +2 -4
- data/{include → ext/gsl_native/include}/rb_gsl_histogram.h +8 -8
- data/{include → ext/gsl_native/include}/rb_gsl_histogram3d.h +50 -50
- data/{include → ext/gsl_native/include}/rb_gsl_integration.h +1 -1
- data/{include → ext/gsl_native/include}/rb_gsl_interp.h +0 -5
- data/{include → ext/gsl_native/include}/rb_gsl_linalg.h +2 -6
- data/{include → ext/gsl_native/include}/rb_gsl_math.h +0 -6
- data/{include → ext/gsl_native/include}/rb_gsl_odeiv.h +0 -3
- data/{include → ext/gsl_native/include}/rb_gsl_poly.h +3 -7
- data/{include → ext/gsl_native/include}/rb_gsl_rational.h +1 -8
- data/{include → ext/gsl_native/include}/rb_gsl_rng.h +0 -1
- data/{include → ext/gsl_native/include}/rb_gsl_root.h +1 -1
- data/{include → ext/gsl_native/include}/rb_gsl_sf.h +39 -48
- data/{include → ext/gsl_native/include}/rb_gsl_statistics.h +1 -1
- data/{include → ext/gsl_native/include}/rb_gsl_tensor.h +0 -2
- data/{include → ext/gsl_native/include}/rb_gsl_with_narray.h +3 -1
- data/{include → ext/gsl_native/include}/templates_off.h +0 -0
- data/{include → ext/gsl_native/include}/templates_on.h +1 -1
- data/ext/{integration.c → gsl_native/integration.c} +164 -189
- data/ext/{interp.c → gsl_native/interp.c} +25 -38
- data/ext/gsl_native/jacobi.c +733 -0
- data/ext/{linalg.c → gsl_native/linalg.c} +462 -589
- data/ext/{linalg_complex.c → gsl_native/linalg_complex.c} +93 -106
- data/ext/{math.c → gsl_native/math.c} +48 -67
- data/ext/{matrix.c → gsl_native/matrix.c} +13 -16
- data/ext/{matrix_complex.c → gsl_native/matrix_complex.c} +119 -123
- data/ext/{matrix_double.c → gsl_native/matrix_double.c} +79 -82
- data/ext/{matrix_int.c → gsl_native/matrix_int.c} +53 -54
- data/ext/{matrix_source.c → gsl_native/matrix_source.h} +292 -318
- data/ext/{min.c → gsl_native/min.c} +45 -76
- data/ext/{monte.c → gsl_native/monte.c} +50 -64
- data/ext/{multifit.c → gsl_native/multifit.c} +142 -151
- data/ext/{multimin.c → gsl_native/multimin.c} +64 -92
- data/ext/{multimin_fsdf.c → gsl_native/multimin_fsdf.c} +16 -16
- data/ext/{multiroots.c → gsl_native/multiroots.c} +73 -76
- data/ext/{multiset.c → gsl_native/multiset.c} +4 -8
- data/ext/{ndlinear.c → gsl_native/ndlinear.c} +320 -321
- data/ext/{nmf.c → gsl_native/nmf.c} +11 -11
- data/ext/{nmf_wrap.c → gsl_native/nmf_wrap.c} +1 -1
- data/ext/{ntuple.c → gsl_native/ntuple.c} +23 -23
- data/ext/{odeiv.c → gsl_native/odeiv.c} +101 -116
- data/ext/gsl_native/ool.c +879 -0
- data/ext/{permutation.c → gsl_native/permutation.c} +39 -37
- data/ext/{poly.c → gsl_native/poly.c} +10 -13
- data/ext/{poly2.c → gsl_native/poly2.c} +16 -16
- data/ext/{poly_source.c → gsl_native/poly_source.h} +249 -293
- data/ext/{qrng.c → gsl_native/qrng.c} +9 -20
- data/ext/{randist.c → gsl_native/randist.c} +222 -247
- data/ext/{rational.c → gsl_native/rational.c} +12 -12
- data/ext/{rng.c → gsl_native/rng.c} +30 -47
- data/ext/{root.c → gsl_native/root.c} +47 -48
- data/ext/{sf.c → gsl_native/sf.c} +196 -244
- data/ext/{sf_airy.c → gsl_native/sf_airy.c} +2 -2
- data/ext/{sf_bessel.c → gsl_native/sf_bessel.c} +7 -7
- data/ext/{sf_clausen.c → gsl_native/sf_clausen.c} +1 -1
- data/ext/{sf_coulomb.c → gsl_native/sf_coulomb.c} +40 -40
- data/ext/{sf_coupling.c → gsl_native/sf_coupling.c} +30 -30
- data/ext/{sf_dawson.c → gsl_native/sf_dawson.c} +1 -1
- data/ext/{sf_debye.c → gsl_native/sf_debye.c} +1 -10
- data/ext/{sf_dilog.c → gsl_native/sf_dilog.c} +1 -1
- data/ext/{sf_elementary.c → gsl_native/sf_elementary.c} +3 -3
- data/ext/{sf_ellint.c → gsl_native/sf_ellint.c} +43 -43
- data/ext/{sf_elljac.c → gsl_native/sf_elljac.c} +3 -3
- data/ext/{sf_erfc.c → gsl_native/sf_erfc.c} +1 -5
- data/ext/{sf_exp.c → gsl_native/sf_exp.c} +3 -3
- data/ext/{sf_expint.c → gsl_native/sf_expint.c} +2 -12
- data/ext/{sf_fermi_dirac.c → gsl_native/sf_fermi_dirac.c} +1 -1
- data/ext/{sf_gamma.c → gsl_native/sf_gamma.c} +2 -6
- data/ext/{sf_gegenbauer.c → gsl_native/sf_gegenbauer.c} +1 -1
- data/ext/{sf_hyperg.c → gsl_native/sf_hyperg.c} +1 -1
- data/ext/{sf_laguerre.c → gsl_native/sf_laguerre.c} +4 -4
- data/ext/{sf_lambert.c → gsl_native/sf_lambert.c} +1 -1
- data/ext/{sf_legendre.c → gsl_native/sf_legendre.c} +1 -1
- data/ext/{sf_log.c → gsl_native/sf_log.c} +4 -4
- data/ext/gsl_native/sf_mathieu.c +235 -0
- data/ext/{sf_power.c → gsl_native/sf_power.c} +1 -1
- data/ext/{sf_psi.c → gsl_native/sf_psi.c} +3 -12
- data/ext/{sf_synchrotron.c → gsl_native/sf_synchrotron.c} +1 -1
- data/ext/{sf_transport.c → gsl_native/sf_transport.c} +1 -1
- data/ext/{sf_trigonometric.c → gsl_native/sf_trigonometric.c} +4 -4
- data/ext/{sf_zeta.c → gsl_native/sf_zeta.c} +1 -5
- data/ext/{signal.c → gsl_native/signal.c} +63 -68
- data/ext/{siman.c → gsl_native/siman.c} +45 -49
- data/ext/{sort.c → gsl_native/sort.c} +6 -7
- data/ext/{spline.c → gsl_native/spline.c} +28 -46
- data/ext/{stats.c → gsl_native/stats.c} +105 -118
- data/ext/{sum.c → gsl_native/sum.c} +34 -34
- data/ext/{tamu_anova.c → gsl_native/tamu_anova.c} +1 -1
- data/ext/{tensor.c → gsl_native/tensor.c} +8 -11
- data/ext/{tensor_source.c → gsl_native/tensor_source.h} +147 -148
- data/ext/{vector.c → gsl_native/vector.c} +11 -14
- data/ext/{vector_complex.c → gsl_native/vector_complex.c} +179 -184
- data/ext/{vector_double.c → gsl_native/vector_double.c} +178 -183
- data/ext/{vector_int.c → gsl_native/vector_int.c} +27 -29
- data/ext/{vector_source.c → gsl_native/vector_source.h} +428 -443
- data/ext/{wavelet.c → gsl_native/wavelet.c} +224 -246
- data/gsl.gemspec +29 -0
- data/lib/gsl.rb +8 -3
- data/lib/gsl/gnuplot.rb +3 -3
- data/lib/gsl/oper.rb +35 -60
- data/lib/gsl/version.rb +3 -0
- data/lib/rbgsl.rb +1 -3
- data/rdoc/alf.rdoc +5 -5
- data/rdoc/blas.rdoc +9 -9
- data/rdoc/bspline.rdoc +17 -17
- data/rdoc/changes.rdoc +4 -9
- data/rdoc/cheb.rdoc +25 -25
- data/rdoc/cholesky_complex.rdoc +21 -21
- data/rdoc/combi.rdoc +37 -37
- data/rdoc/complex.rdoc +22 -22
- data/rdoc/const.rdoc +47 -47
- data/rdoc/dht.rdoc +49 -49
- data/rdoc/diff.rdoc +42 -42
- data/rdoc/ehandling.rdoc +6 -6
- data/rdoc/eigen.rdoc +153 -153
- data/rdoc/fft.rdoc +146 -146
- data/rdoc/fit.rdoc +109 -109
- data/rdoc/function.rdoc +11 -11
- data/rdoc/graph.rdoc +17 -17
- data/rdoc/hist.rdoc +103 -103
- data/rdoc/hist2d.rdoc +42 -42
- data/rdoc/hist3d.rdoc +9 -9
- data/rdoc/integration.rdoc +110 -110
- data/rdoc/interp.rdoc +71 -71
- data/rdoc/intro.rdoc +8 -8
- data/rdoc/linalg.rdoc +188 -188
- data/rdoc/linalg_complex.rdoc +1 -1
- data/rdoc/math.rdoc +58 -58
- data/rdoc/matrix.rdoc +275 -275
- data/rdoc/min.rdoc +57 -57
- data/rdoc/monte.rdoc +22 -22
- data/rdoc/multimin.rdoc +95 -95
- data/rdoc/multiroot.rdoc +80 -80
- data/rdoc/narray.rdoc +32 -32
- data/rdoc/ndlinear.rdoc +54 -54
- data/rdoc/nonlinearfit.rdoc +100 -100
- data/rdoc/ntuple.rdoc +31 -31
- data/rdoc/odeiv.rdoc +88 -88
- data/rdoc/perm.rdoc +90 -90
- data/rdoc/poly.rdoc +66 -66
- data/rdoc/qrng.rdoc +21 -21
- data/rdoc/randist.rdoc +82 -82
- data/rdoc/ref.rdoc +57 -57
- data/rdoc/rng.rdoc +85 -85
- data/rdoc/roots.rdoc +57 -57
- data/rdoc/sf.rdoc +428 -428
- data/rdoc/siman.rdoc +19 -19
- data/rdoc/sort.rdoc +30 -30
- data/rdoc/start.rdoc +8 -8
- data/rdoc/stats.rdoc +52 -52
- data/rdoc/sum.rdoc +12 -12
- data/rdoc/tensor.rdoc +31 -31
- data/rdoc/tut.rdoc +1 -1
- data/rdoc/use.rdoc +39 -39
- data/rdoc/vector.rdoc +188 -188
- data/rdoc/vector_complex.rdoc +24 -24
- data/rdoc/wavelet.rdoc +46 -46
- data/test/gsl/blas_test.rb +79 -0
- data/test/gsl/bspline_test.rb +63 -0
- data/test/gsl/cdf_test.rb +1512 -0
- data/test/gsl/cheb_test.rb +80 -0
- data/test/gsl/combination_test.rb +100 -0
- data/test/gsl/complex_test.rb +20 -0
- data/test/gsl/const_test.rb +29 -0
- data/test/gsl/deriv_test.rb +62 -0
- data/test/gsl/dht_test.rb +79 -0
- data/test/gsl/diff_test.rb +53 -0
- data/test/gsl/eigen_test.rb +563 -0
- data/test/gsl/err_test.rb +23 -0
- data/test/gsl/fit_test.rb +101 -0
- data/test/gsl/histo_test.rb +14 -0
- data/test/gsl/index_test.rb +61 -0
- data/test/gsl/integration_test.rb +274 -0
- data/test/gsl/interp_test.rb +27 -0
- data/test/gsl/linalg_test.rb +463 -0
- data/test/gsl/matrix_nmf_test.rb +37 -0
- data/test/gsl/matrix_test.rb +98 -0
- data/test/gsl/min_test.rb +89 -0
- data/test/gsl/monte_test.rb +77 -0
- data/test/gsl/multifit_test.rb +753 -0
- data/test/gsl/multimin_test.rb +157 -0
- data/test/gsl/multiroot_test.rb +135 -0
- data/test/gsl/multiset_test.rb +52 -0
- data/test/gsl/odeiv_test.rb +275 -0
- data/test/gsl/oper_test.rb +98 -0
- data/test/gsl/poly_test.rb +338 -0
- data/test/gsl/qrng_test.rb +94 -0
- data/test/gsl/quartic_test.rb +28 -0
- data/test/gsl/randist_test.rb +122 -0
- data/test/gsl/rng_test.rb +303 -0
- data/test/gsl/roots_test.rb +78 -0
- data/test/gsl/sf_test.rb +2079 -0
- data/test/gsl/stats_test.rb +122 -0
- data/test/gsl/sum_test.rb +69 -0
- data/test/gsl/tensor_test.rb +396 -0
- data/test/gsl/vector_test.rb +223 -0
- data/test/gsl/wavelet_test.rb +130 -0
- data/test/gsl_test.rb +321 -0
- data/test/test_helper.rb +42 -0
- data/uncrustify.cfg +1693 -0
- metadata +337 -378
- data/README +0 -32
- data/VERSION +0 -1
- data/ext/bspline.c +0 -130
- data/ext/const.c +0 -673
- data/ext/cqp.c +0 -283
- data/ext/extconf.rb +0 -295
- data/ext/fcmp.c +0 -66
- data/ext/fresnel.c +0 -312
- data/ext/jacobi.c +0 -739
- data/ext/ool.c +0 -879
- data/ext/oper_complex_source.c +0 -253
- data/ext/sf_mathieu.c +0 -238
- data/include/rb_gsl_config.h +0 -62
- data/include/rb_gsl_dirac.h +0 -13
- data/rdoc/index.rdoc +0 -62
- data/rdoc/rngextra.rdoc +0 -11
- data/rdoc/screenshot.rdoc +0 -40
- data/setup.rb +0 -1585
- data/tests/blas/amax.rb +0 -14
- data/tests/blas/asum.rb +0 -16
- data/tests/blas/axpy.rb +0 -25
- data/tests/blas/copy.rb +0 -23
- data/tests/blas/dot.rb +0 -23
- data/tests/bspline.rb +0 -53
- data/tests/cdf.rb +0 -1388
- data/tests/cheb.rb +0 -112
- data/tests/combination.rb +0 -123
- data/tests/complex.rb +0 -17
- data/tests/const.rb +0 -24
- data/tests/deriv.rb +0 -85
- data/tests/dht/dht1.rb +0 -17
- data/tests/dht/dht2.rb +0 -23
- data/tests/dht/dht3.rb +0 -23
- data/tests/dht/dht4.rb +0 -23
- data/tests/diff.rb +0 -78
- data/tests/eigen/eigen.rb +0 -220
- data/tests/eigen/gen.rb +0 -105
- data/tests/eigen/genherm.rb +0 -66
- data/tests/eigen/gensymm.rb +0 -68
- data/tests/eigen/nonsymm.rb +0 -53
- data/tests/eigen/nonsymmv.rb +0 -53
- data/tests/eigen/symm-herm.rb +0 -74
- data/tests/err.rb +0 -58
- data/tests/fit.rb +0 -124
- data/tests/gsl_test.rb +0 -118
- data/tests/gsl_test2.rb +0 -110
- data/tests/histo.rb +0 -12
- data/tests/integration/integration1.rb +0 -72
- data/tests/integration/integration2.rb +0 -71
- data/tests/integration/integration3.rb +0 -71
- data/tests/integration/integration4.rb +0 -71
- data/tests/interp.rb +0 -45
- data/tests/linalg/HH.rb +0 -64
- data/tests/linalg/LU.rb +0 -47
- data/tests/linalg/QR.rb +0 -77
- data/tests/linalg/SV.rb +0 -24
- data/tests/linalg/TDN.rb +0 -116
- data/tests/linalg/TDS.rb +0 -122
- data/tests/linalg/bidiag.rb +0 -73
- data/tests/linalg/cholesky.rb +0 -20
- data/tests/linalg/linalg.rb +0 -158
- data/tests/matrix/matrix_complex_test.rb +0 -36
- data/tests/matrix/matrix_nmf_test.rb +0 -39
- data/tests/matrix/matrix_test.rb +0 -48
- data/tests/min.rb +0 -99
- data/tests/monte/miser.rb +0 -31
- data/tests/monte/vegas.rb +0 -45
- data/tests/multifit/test_2dgauss.rb +0 -112
- data/tests/multifit/test_brown.rb +0 -90
- data/tests/multifit/test_enso.rb +0 -246
- data/tests/multifit/test_filip.rb +0 -155
- data/tests/multifit/test_gauss.rb +0 -97
- data/tests/multifit/test_longley.rb +0 -110
- data/tests/multifit/test_multifit.rb +0 -52
- data/tests/multimin.rb +0 -139
- data/tests/multiroot.rb +0 -131
- data/tests/multiset.rb +0 -52
- data/tests/narray/blas_dnrm2.rb +0 -20
- data/tests/odeiv.rb +0 -353
- data/tests/poly/poly.rb +0 -290
- data/tests/poly/special.rb +0 -65
- data/tests/qrng.rb +0 -131
- data/tests/quartic.rb +0 -29
- data/tests/randist.rb +0 -134
- data/tests/rng.rb +0 -305
- data/tests/roots.rb +0 -76
- data/tests/run-test.sh +0 -17
- data/tests/sf/gsl_test_sf.rb +0 -249
- data/tests/sf/test_airy.rb +0 -83
- data/tests/sf/test_bessel.rb +0 -306
- data/tests/sf/test_coulomb.rb +0 -17
- data/tests/sf/test_dilog.rb +0 -25
- data/tests/sf/test_gamma.rb +0 -209
- data/tests/sf/test_hyperg.rb +0 -356
- data/tests/sf/test_legendre.rb +0 -227
- data/tests/sf/test_mathieu.rb +0 -59
- data/tests/sf/test_mode.rb +0 -19
- data/tests/sf/test_sf.rb +0 -839
- data/tests/stats.rb +0 -174
- data/tests/stats_mt.rb +0 -16
- data/tests/sum.rb +0 -98
- data/tests/sys.rb +0 -323
- data/tests/tensor.rb +0 -419
- data/tests/vector/vector_complex_test.rb +0 -101
- data/tests/vector/vector_test.rb +0 -141
- data/tests/wavelet.rb +0 -142
@@ -8,11 +8,11 @@
|
|
8
8
|
This library is distributed in the hope that it will be useful, but
|
9
9
|
WITHOUT ANY WARRANTY.
|
10
10
|
*/
|
11
|
-
#include "rb_gsl.h"
|
11
|
+
#include "include/rb_gsl.h"
|
12
12
|
#include <gsl/gsl_errno.h>
|
13
|
-
#include "rb_gsl_array.h"
|
14
|
-
#include "rb_gsl_common.h"
|
15
|
-
#include "rb_gsl_function.h"
|
13
|
+
#include "include/rb_gsl_array.h"
|
14
|
+
#include "include/rb_gsl_common.h"
|
15
|
+
#include "include/rb_gsl_function.h"
|
16
16
|
|
17
17
|
static VALUE eHandler;
|
18
18
|
static VALUE cgsl_error[35];
|
@@ -20,21 +20,21 @@ static VALUE *pgsl_error;
|
|
20
20
|
|
21
21
|
static void Init_rb_gsl_define_GSL_CONST(VALUE module);
|
22
22
|
void rb_gsl_error_handler(const char *reason, const char *file,
|
23
|
-
|
23
|
+
int line, int gsl_errno);
|
24
24
|
static void rb_gsl_my_error_handler(const char *reason, const char *file,
|
25
|
-
|
25
|
+
int line, int gsl_errno);
|
26
26
|
|
27
27
|
void rb_gsl_error_handler(const char *reason, const char *file,
|
28
|
-
|
28
|
+
int line, int gsl_errno)
|
29
29
|
{
|
30
30
|
const char *emessage = gsl_strerror(gsl_errno);
|
31
|
-
rb_raise(pgsl_error[gsl_errno],
|
32
|
-
|
33
|
-
|
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
34
|
}
|
35
35
|
|
36
36
|
static void rb_gsl_my_error_handler(const char *reason, const char *file,
|
37
|
-
|
37
|
+
int line, int gsl_errno)
|
38
38
|
{
|
39
39
|
VALUE vreason, vfile;
|
40
40
|
VALUE vline, verrno;
|
@@ -48,7 +48,7 @@ static void rb_gsl_my_error_handler(const char *reason, const char *file,
|
|
48
48
|
static VALUE rb_gsl_set_error_handler(int argc, VALUE *argv, VALUE module)
|
49
49
|
{
|
50
50
|
if (rb_block_given_p()) {
|
51
|
-
eHandler =
|
51
|
+
eHandler = rb_block_proc();
|
52
52
|
gsl_set_error_handler(&rb_gsl_my_error_handler);
|
53
53
|
return Qtrue;
|
54
54
|
}
|
@@ -166,14 +166,14 @@ static void define_module_functions(VALUE module);
|
|
166
166
|
static VALUE rb_gsl_strerror(VALUE obj, VALUE errn);
|
167
167
|
static void define_module_functions(VALUE module)
|
168
168
|
{
|
169
|
-
rb_define_module_function(module, "set_error_handler_off",
|
170
|
-
|
171
|
-
rb_define_module_function(module, "strerror",
|
172
|
-
|
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
173
|
rb_define_module_function(module, "set_error_handler",
|
174
|
-
|
174
|
+
rb_gsl_set_error_handler, -1);
|
175
175
|
rb_define_module_function(module, "set_default_error_handler",
|
176
|
-
|
176
|
+
rb_gsl_set_default_error_handler, 0);
|
177
177
|
}
|
178
178
|
|
179
179
|
static VALUE rb_gsl_strerror(VALUE obj, VALUE errn)
|
@@ -0,0 +1,118 @@
|
|
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')
|
@@ -9,8 +9,7 @@
|
|
9
9
|
WITHOUT ANY WARRANTY.
|
10
10
|
*/
|
11
11
|
|
12
|
-
#include "
|
13
|
-
#include "rb_gsl_fft.h"
|
12
|
+
#include "include/rb_gsl_fft.h"
|
14
13
|
|
15
14
|
VALUE mgsl_fft;
|
16
15
|
VALUE cgsl_fft_wavetable;
|
@@ -26,24 +25,24 @@ static void GSL_FFT_Workspace_free(GSL_FFT_Workspace *space);
|
|
26
25
|
static VALUE rb_gsl_fft_complex_wavetable_new(VALUE klass, VALUE n)
|
27
26
|
{
|
28
27
|
CHECK_FIXNUM(n);
|
29
|
-
return Data_Wrap_Struct(cgsl_fft_complex_wavetable, 0,
|
30
|
-
|
31
|
-
|
28
|
+
return Data_Wrap_Struct(cgsl_fft_complex_wavetable, 0,
|
29
|
+
gsl_fft_complex_wavetable_free,
|
30
|
+
gsl_fft_complex_wavetable_alloc(FIX2INT(n)));
|
32
31
|
}
|
33
32
|
|
34
33
|
static VALUE rb_gsl_fft_real_wavetable_new(VALUE klass, VALUE n)
|
35
34
|
{
|
36
35
|
CHECK_FIXNUM(n);
|
37
36
|
return Data_Wrap_Struct(klass, 0, gsl_fft_real_wavetable_free,
|
38
|
-
|
37
|
+
gsl_fft_real_wavetable_alloc(FIX2INT(n)));
|
39
38
|
}
|
40
39
|
|
41
40
|
static VALUE rb_gsl_fft_halfcomplex_wavetable_new(VALUE klass, VALUE n)
|
42
41
|
{
|
43
42
|
CHECK_FIXNUM(n);
|
44
43
|
return Data_Wrap_Struct(klass, 0, gsl_fft_halfcomplex_wavetable_free,
|
45
|
-
|
46
|
-
|
44
|
+
gsl_fft_halfcomplex_wavetable_alloc(FIX2INT(n)));
|
45
|
+
|
47
46
|
}
|
48
47
|
|
49
48
|
static void GSL_FFT_Wavetable_free(GSL_FFT_Wavetable *table)
|
@@ -55,21 +54,21 @@ static VALUE rb_gsl_fft_complex_workspace_new(VALUE klass, VALUE n)
|
|
55
54
|
{
|
56
55
|
CHECK_FIXNUM(n);
|
57
56
|
return Data_Wrap_Struct(klass, 0, gsl_fft_complex_workspace_free,
|
58
|
-
|
57
|
+
gsl_fft_complex_workspace_alloc(FIX2INT(n)));
|
59
58
|
}
|
60
59
|
|
61
60
|
static VALUE rb_gsl_fft_real_workspace_new(VALUE klass, VALUE n)
|
62
61
|
{
|
63
62
|
CHECK_FIXNUM(n);
|
64
63
|
return Data_Wrap_Struct(klass, 0, gsl_fft_real_workspace_free,
|
65
|
-
|
64
|
+
gsl_fft_real_workspace_alloc(FIX2INT(n)));
|
66
65
|
}
|
67
66
|
|
68
67
|
static void GSL_FFT_Workspace_free(GSL_FFT_Workspace *space)
|
69
68
|
{
|
70
69
|
gsl_fft_complex_workspace_free((gsl_fft_complex_workspace *) space);
|
71
70
|
}
|
72
|
-
|
71
|
+
|
73
72
|
// The FFT methods used to allow passing stride and n values as optional
|
74
73
|
// parameters to control which elements get transformed. This created problems
|
75
74
|
// for Views which can have their own stride, so support for stride and n
|
@@ -80,8 +79,8 @@ static void GSL_FFT_Workspace_free(GSL_FFT_Workspace *space)
|
|
80
79
|
// refactoring, it has been left in place for the time being. Eventually it
|
81
80
|
// can be refactored away completely.
|
82
81
|
static VALUE get_complex_stride_n(VALUE obj,
|
83
|
-
|
84
|
-
|
82
|
+
gsl_vector_complex **vin,
|
83
|
+
gsl_complex_packed_array *data, size_t *stride, size_t *n)
|
85
84
|
{
|
86
85
|
gsl_vector_complex *v = NULL;
|
87
86
|
|
@@ -97,8 +96,8 @@ static VALUE get_complex_stride_n(VALUE obj,
|
|
97
96
|
}
|
98
97
|
|
99
98
|
static VALUE rb_fft_complex_radix2(VALUE obj,
|
100
|
-
|
101
|
-
|
99
|
+
int (*trans)(gsl_complex_packed_array,
|
100
|
+
size_t, size_t), int flag)
|
102
101
|
{
|
103
102
|
size_t stride, n;
|
104
103
|
gsl_complex_packed_array data;
|
@@ -107,7 +106,7 @@ static VALUE rb_fft_complex_radix2(VALUE obj,
|
|
107
106
|
ary = get_complex_stride_n(obj, &vin, &data, &stride, &n);
|
108
107
|
if (flag == RB_GSL_FFT_COPY) {
|
109
108
|
vout = gsl_vector_complex_alloc(n);
|
110
|
-
gsl_vector_complex_memcpy(vout, vin);
|
109
|
+
gsl_vector_complex_memcpy(vout, vin);
|
111
110
|
(*trans)(vout->data, vout->stride /*1*/, vout->size /*n*/);
|
112
111
|
return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, vout);
|
113
112
|
} else { /* in-place */
|
@@ -119,13 +118,13 @@ static VALUE rb_fft_complex_radix2(VALUE obj,
|
|
119
118
|
static VALUE rb_gsl_fft_complex_radix2_forward(VALUE obj)
|
120
119
|
{
|
121
120
|
return rb_fft_complex_radix2(obj, gsl_fft_complex_radix2_forward,
|
122
|
-
|
121
|
+
RB_GSL_FFT_COPY);
|
123
122
|
}
|
124
123
|
|
125
124
|
static VALUE rb_gsl_fft_complex_radix2_forward2(VALUE obj)
|
126
125
|
{
|
127
126
|
return rb_fft_complex_radix2(obj, gsl_fft_complex_radix2_forward,
|
128
|
-
|
127
|
+
RB_GSL_FFT_INPLACE);
|
129
128
|
}
|
130
129
|
|
131
130
|
static VALUE rb_gsl_fft_complex_radix2_transform(VALUE obj, VALUE val_sign)
|
@@ -137,7 +136,7 @@ static VALUE rb_gsl_fft_complex_radix2_transform(VALUE obj, VALUE val_sign)
|
|
137
136
|
sign = NUM2INT(val_sign);
|
138
137
|
get_complex_stride_n(obj, &vin, &data, &stride, &n);
|
139
138
|
vout = gsl_vector_complex_alloc(n);
|
140
|
-
gsl_vector_complex_memcpy(vout, vin);
|
139
|
+
gsl_vector_complex_memcpy(vout, vin);
|
141
140
|
gsl_fft_complex_radix2_transform(vout->data, vout->stride /*1*/, vout->size /*n*/, sign);
|
142
141
|
return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, vout);
|
143
142
|
}
|
@@ -157,40 +156,40 @@ static VALUE rb_gsl_fft_complex_radix2_transform2(VALUE obj, VALUE val_sign)
|
|
157
156
|
static VALUE rb_gsl_fft_complex_radix2_backward(VALUE obj)
|
158
157
|
{
|
159
158
|
return rb_fft_complex_radix2(obj, gsl_fft_complex_radix2_backward,
|
160
|
-
|
159
|
+
RB_GSL_FFT_COPY);
|
161
160
|
}
|
162
161
|
|
163
162
|
static VALUE rb_gsl_fft_complex_radix2_inverse(VALUE obj)
|
164
163
|
{
|
165
164
|
return rb_fft_complex_radix2(obj, gsl_fft_complex_radix2_inverse,
|
166
|
-
|
165
|
+
RB_GSL_FFT_COPY);
|
167
166
|
}
|
168
167
|
|
169
168
|
static VALUE rb_gsl_fft_complex_radix2_dif_forward(VALUE obj)
|
170
169
|
{
|
171
|
-
return rb_fft_complex_radix2(obj,
|
172
|
-
|
173
|
-
|
170
|
+
return rb_fft_complex_radix2(obj,
|
171
|
+
gsl_fft_complex_radix2_dif_forward,
|
172
|
+
RB_GSL_FFT_COPY);
|
174
173
|
}
|
175
174
|
|
176
175
|
static VALUE rb_gsl_fft_complex_radix2_backward2(VALUE obj)
|
177
176
|
{
|
178
177
|
return rb_fft_complex_radix2(obj, gsl_fft_complex_radix2_backward,
|
179
|
-
|
178
|
+
RB_GSL_FFT_INPLACE);
|
180
179
|
}
|
181
180
|
|
182
181
|
static VALUE rb_gsl_fft_complex_radix2_inverse2(VALUE obj)
|
183
182
|
{
|
184
183
|
return rb_fft_complex_radix2(obj, gsl_fft_complex_radix2_inverse,
|
185
|
-
|
184
|
+
RB_GSL_FFT_INPLACE);
|
186
185
|
}
|
187
186
|
|
188
187
|
|
189
188
|
static VALUE rb_gsl_fft_complex_radix2_dif_forward2(VALUE obj)
|
190
189
|
{
|
191
|
-
return rb_fft_complex_radix2(obj,
|
192
|
-
|
193
|
-
|
190
|
+
return rb_fft_complex_radix2(obj,
|
191
|
+
gsl_fft_complex_radix2_dif_forward,
|
192
|
+
RB_GSL_FFT_INPLACE);
|
194
193
|
}
|
195
194
|
|
196
195
|
static VALUE rb_gsl_fft_complex_radix2_dif_transform(VALUE obj, VALUE val_sign)
|
@@ -202,7 +201,7 @@ static VALUE rb_gsl_fft_complex_radix2_dif_transform(VALUE obj, VALUE val_sign)
|
|
202
201
|
sign = NUM2INT(val_sign);
|
203
202
|
get_complex_stride_n(obj, &vin, &data, &stride, &n);
|
204
203
|
vout = gsl_vector_complex_alloc(n);
|
205
|
-
gsl_vector_complex_memcpy(vout, vin);
|
204
|
+
gsl_vector_complex_memcpy(vout, vin);
|
206
205
|
gsl_fft_complex_radix2_dif_transform(vout->data, vout->stride /*1*/, vout->size /*n*/, sign);
|
207
206
|
return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, vout);
|
208
207
|
}
|
@@ -222,28 +221,28 @@ static VALUE rb_gsl_fft_complex_radix2_dif_transform2(VALUE obj, VALUE val_sign)
|
|
222
221
|
|
223
222
|
static VALUE rb_gsl_fft_complex_radix2_dif_backward(VALUE obj)
|
224
223
|
{
|
225
|
-
return rb_fft_complex_radix2(obj,
|
226
|
-
|
227
|
-
|
224
|
+
return rb_fft_complex_radix2(obj,
|
225
|
+
gsl_fft_complex_radix2_dif_backward,
|
226
|
+
RB_GSL_FFT_COPY);
|
228
227
|
}
|
229
228
|
static VALUE rb_gsl_fft_complex_radix2_dif_inverse(VALUE obj)
|
230
229
|
{
|
231
|
-
return rb_fft_complex_radix2(obj,
|
232
|
-
|
233
|
-
|
230
|
+
return rb_fft_complex_radix2(obj,
|
231
|
+
gsl_fft_complex_radix2_dif_inverse,
|
232
|
+
RB_GSL_FFT_COPY);
|
234
233
|
}
|
235
234
|
|
236
235
|
static VALUE rb_gsl_fft_complex_radix2_dif_backward2(VALUE obj)
|
237
236
|
{
|
238
|
-
return rb_fft_complex_radix2(obj,
|
239
|
-
|
240
|
-
|
237
|
+
return rb_fft_complex_radix2(obj,
|
238
|
+
gsl_fft_complex_radix2_dif_backward,
|
239
|
+
RB_GSL_FFT_INPLACE);
|
241
240
|
}
|
242
241
|
static VALUE rb_gsl_fft_complex_radix2_dif_inverse2(VALUE obj)
|
243
242
|
{
|
244
|
-
return rb_fft_complex_radix2(obj,
|
245
|
-
|
246
|
-
|
243
|
+
return rb_fft_complex_radix2(obj,
|
244
|
+
gsl_fft_complex_radix2_dif_inverse,
|
245
|
+
RB_GSL_FFT_INPLACE);
|
247
246
|
}
|
248
247
|
|
249
248
|
static VALUE rb_GSL_FFT_Wavetable_n(VALUE obj)
|
@@ -279,16 +278,16 @@ enum {
|
|
279
278
|
} FFTComplexStructAllocFlag;
|
280
279
|
|
281
280
|
static void gsl_fft_free(int flag, GSL_FFT_Wavetable *table,
|
282
|
-
|
281
|
+
GSL_FFT_Workspace *space);
|
283
282
|
|
284
283
|
// Parse argc, argv. obj must be GSL::Vector::Complex.
|
285
284
|
// This can be simplified at some point.
|
286
285
|
// See comments preceding get_complex_stride_n()
|
287
286
|
static int gsl_fft_get_argv_complex(int argc, VALUE *argv, VALUE obj,
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
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)
|
292
291
|
{
|
293
292
|
int flag = NONE_OF_TWO, flagtmp, i, itmp = argc, itmp2 = 0, ccc;
|
294
293
|
int flagw = 0;
|
@@ -337,9 +336,9 @@ static int gsl_fft_get_argv_complex(int argc, VALUE *argv, VALUE obj,
|
|
337
336
|
|
338
337
|
// Parse argc, argv. obj must be GSL::Vector of real data
|
339
338
|
static int gsl_fft_get_argv_real(int argc, VALUE *argv, VALUE obj,
|
340
|
-
|
341
|
-
|
342
|
-
|
339
|
+
double **ptr, size_t *stride,
|
340
|
+
size_t *n, gsl_fft_real_wavetable **table,
|
341
|
+
gsl_fft_real_workspace **space, int *naflag)
|
343
342
|
{
|
344
343
|
int flag = NONE_OF_TWO, flagtmp, i, itmp = argc, itmp2 = 0, ccc;
|
345
344
|
int flagw = 0;
|
@@ -388,9 +387,9 @@ static int gsl_fft_get_argv_real(int argc, VALUE *argv, VALUE obj,
|
|
388
387
|
|
389
388
|
// Parse argc, argv. obj must be GSL::Vector of halfcomplex data
|
390
389
|
static int gsl_fft_get_argv_halfcomplex(int argc, VALUE *argv, VALUE obj,
|
391
|
-
|
392
|
-
|
393
|
-
|
390
|
+
double **ptr, size_t *stride,
|
391
|
+
size_t *n, gsl_fft_halfcomplex_wavetable **table,
|
392
|
+
gsl_fft_real_workspace **space, int *naflag)
|
394
393
|
{
|
395
394
|
int flag = NONE_OF_TWO, flagtmp, i, itmp = argc, itmp2 = 0, ccc;
|
396
395
|
int flagw = 0;
|
@@ -437,7 +436,7 @@ static int gsl_fft_get_argv_halfcomplex(int argc, VALUE *argv, VALUE obj,
|
|
437
436
|
}
|
438
437
|
|
439
438
|
static void gsl_fft_free(int flag, GSL_FFT_Wavetable *table,
|
440
|
-
|
439
|
+
GSL_FFT_Workspace *space)
|
441
440
|
{
|
442
441
|
switch (flag) {
|
443
442
|
case ALLOC_TABLE:
|
@@ -457,11 +456,11 @@ static void gsl_fft_free(int flag, GSL_FFT_Wavetable *table,
|
|
457
456
|
}
|
458
457
|
|
459
458
|
static VALUE rb_fft_complex_trans(int argc, VALUE *argv, VALUE obj,
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
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)
|
465
464
|
{
|
466
465
|
int flag = 0;
|
467
466
|
// local variable "status" was defined and set, but never used
|
@@ -488,13 +487,13 @@ static VALUE rb_fft_complex_trans(int argc, VALUE *argv, VALUE obj,
|
|
488
487
|
static VALUE rb_gsl_fft_complex_forward(int argc, VALUE *argv, VALUE obj)
|
489
488
|
{
|
490
489
|
return rb_fft_complex_trans(argc, argv, obj, gsl_fft_complex_forward,
|
491
|
-
|
490
|
+
RB_GSL_FFT_COPY);
|
492
491
|
}
|
493
492
|
|
494
493
|
static VALUE rb_gsl_fft_complex_forward2(int argc, VALUE *argv, VALUE obj)
|
495
494
|
{
|
496
495
|
return rb_fft_complex_trans(argc, argv, obj, gsl_fft_complex_forward,
|
497
|
-
|
496
|
+
RB_GSL_FFT_INPLACE);
|
498
497
|
}
|
499
498
|
|
500
499
|
static VALUE rb_gsl_fft_complex_transform(int argc, VALUE *argv, VALUE obj)
|
@@ -540,25 +539,25 @@ static VALUE rb_gsl_fft_complex_transform2(int argc, VALUE *argv, VALUE obj)
|
|
540
539
|
static VALUE rb_gsl_fft_complex_backward(int argc, VALUE *argv, VALUE obj)
|
541
540
|
{
|
542
541
|
return rb_fft_complex_trans(argc, argv, obj, gsl_fft_complex_backward,
|
543
|
-
|
542
|
+
RB_GSL_FFT_COPY);
|
544
543
|
}
|
545
544
|
|
546
545
|
static VALUE rb_gsl_fft_complex_backward2(int argc, VALUE *argv, VALUE obj)
|
547
546
|
{
|
548
547
|
return rb_fft_complex_trans(argc, argv, obj, gsl_fft_complex_backward,
|
549
|
-
|
548
|
+
RB_GSL_FFT_INPLACE);
|
550
549
|
}
|
551
550
|
|
552
551
|
static VALUE rb_gsl_fft_complex_inverse(int argc, VALUE *argv, VALUE obj)
|
553
552
|
{
|
554
553
|
return rb_fft_complex_trans(argc, argv, obj, gsl_fft_complex_inverse,
|
555
|
-
|
554
|
+
RB_GSL_FFT_COPY);
|
556
555
|
}
|
557
556
|
|
558
557
|
static VALUE rb_gsl_fft_complex_inverse2(int argc, VALUE *argv, VALUE obj)
|
559
558
|
{
|
560
559
|
return rb_fft_complex_trans(argc, argv, obj, gsl_fft_complex_inverse,
|
561
|
-
|
560
|
+
RB_GSL_FFT_INPLACE);
|
562
561
|
}
|
563
562
|
|
564
563
|
// The FFT methods used to allow passing stride and n values as optional
|
@@ -573,7 +572,7 @@ static VALUE rb_gsl_fft_complex_inverse2(int argc, VALUE *argv, VALUE obj)
|
|
573
572
|
//
|
574
573
|
// obj must be GSL::Vector of real or halfcomplex data
|
575
574
|
static VALUE get_ptr_stride_n(VALUE obj,
|
576
|
-
|
575
|
+
double **ptr, size_t *stride, size_t *n, int *flag)
|
577
576
|
{
|
578
577
|
*flag = 0;
|
579
578
|
*ptr = get_ptr_double3(obj, n, stride, flag);
|
@@ -581,17 +580,14 @@ static VALUE get_ptr_stride_n(VALUE obj,
|
|
581
580
|
}
|
582
581
|
|
583
582
|
static VALUE rb_fft_radix2(VALUE obj,
|
584
|
-
|
585
|
-
|
583
|
+
int (*trans)(double [], size_t, size_t),
|
584
|
+
int sss)
|
586
585
|
{
|
587
586
|
size_t stride, n;
|
588
587
|
gsl_vector *vnew;
|
589
588
|
gsl_vector_view vv;
|
590
589
|
double *ptr1, *ptr2;
|
591
590
|
int flag;
|
592
|
-
#ifdef HAVE_NARRAY_H
|
593
|
-
int shape[1];
|
594
|
-
#endif
|
595
591
|
VALUE ary;
|
596
592
|
get_ptr_stride_n(obj, &ptr1, &stride, &n, &flag);
|
597
593
|
if (flag == 0) {
|
@@ -611,6 +607,7 @@ static VALUE rb_fft_radix2(VALUE obj,
|
|
611
607
|
#ifdef HAVE_NARRAY_H
|
612
608
|
} else if (flag == 1) {
|
613
609
|
if (sss == RB_GSL_FFT_COPY) {
|
610
|
+
int shape[1];
|
614
611
|
shape[0] = n;
|
615
612
|
ary = na_make_object(NA_DFLOAT, 1, shape, cNArray);
|
616
613
|
ptr2 = NA_PTR_TYPE(ary, double*);
|
@@ -631,46 +628,46 @@ static VALUE rb_fft_radix2(VALUE obj,
|
|
631
628
|
static VALUE rb_gsl_fft_real_radix2_transform(VALUE obj)
|
632
629
|
{
|
633
630
|
return rb_fft_radix2(obj, gsl_fft_real_radix2_transform,
|
634
|
-
|
631
|
+
RB_GSL_FFT_COPY);
|
635
632
|
}
|
636
633
|
|
637
634
|
static VALUE rb_gsl_fft_real_radix2_transform2(VALUE obj)
|
638
635
|
{
|
639
636
|
return rb_fft_radix2(obj, gsl_fft_real_radix2_transform,
|
640
|
-
|
637
|
+
RB_GSL_FFT_INPLACE);
|
641
638
|
}
|
642
639
|
|
643
640
|
static VALUE rb_gsl_fft_halfcomplex_radix2_inverse(VALUE obj)
|
644
641
|
{
|
645
642
|
return rb_fft_radix2(obj, gsl_fft_halfcomplex_radix2_inverse,
|
646
|
-
|
643
|
+
RB_GSL_FFT_COPY);
|
647
644
|
}
|
648
645
|
|
649
646
|
static VALUE rb_gsl_fft_halfcomplex_radix2_inverse2(VALUE obj)
|
650
647
|
{
|
651
648
|
return rb_fft_radix2(obj, gsl_fft_halfcomplex_radix2_inverse,
|
652
|
-
|
649
|
+
RB_GSL_FFT_INPLACE);
|
653
650
|
}
|
654
651
|
|
655
652
|
static VALUE rb_gsl_fft_halfcomplex_radix2_backward(VALUE obj)
|
656
653
|
{
|
657
654
|
return rb_fft_radix2(obj, gsl_fft_halfcomplex_radix2_backward,
|
658
|
-
|
655
|
+
RB_GSL_FFT_COPY);
|
659
656
|
}
|
660
657
|
|
661
658
|
static VALUE rb_gsl_fft_halfcomplex_radix2_backward2(VALUE obj)
|
662
659
|
{
|
663
660
|
return rb_fft_radix2(obj, gsl_fft_halfcomplex_radix2_backward,
|
664
|
-
|
661
|
+
RB_GSL_FFT_INPLACE);
|
665
662
|
}
|
666
663
|
|
667
664
|
/*****/
|
668
665
|
|
669
666
|
static VALUE rb_fft_real_trans(int argc, VALUE *argv, VALUE obj,
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
|
667
|
+
int (*trans)(double [], size_t, size_t,
|
668
|
+
const gsl_fft_real_wavetable *,
|
669
|
+
gsl_fft_real_workspace *),
|
670
|
+
int sss)
|
674
671
|
{
|
675
672
|
int flag = 0, naflag = 0;
|
676
673
|
// local variable "status" was defined and set, but never used
|
@@ -679,9 +676,6 @@ static VALUE rb_fft_real_trans(int argc, VALUE *argv, VALUE obj,
|
|
679
676
|
gsl_vector *vnew;
|
680
677
|
gsl_vector_view vv;
|
681
678
|
double *ptr1, *ptr2;
|
682
|
-
#ifdef HAVE_NARRAY_H
|
683
|
-
int shape[1];
|
684
|
-
#endif
|
685
679
|
gsl_fft_real_wavetable *table = NULL;
|
686
680
|
gsl_fft_real_workspace *space = NULL;
|
687
681
|
VALUE ary;
|
@@ -703,6 +697,7 @@ static VALUE rb_fft_real_trans(int argc, VALUE *argv, VALUE obj,
|
|
703
697
|
#ifdef HAVE_NARRAY_H
|
704
698
|
} else if (naflag == 1) {
|
705
699
|
if (sss == RB_GSL_FFT_COPY) {
|
700
|
+
int shape[1];
|
706
701
|
shape[0] = n;
|
707
702
|
ary = na_make_object(NA_DFLOAT, 1, shape, cNArray);
|
708
703
|
ptr2 = NA_PTR_TYPE(ary, double*);
|
@@ -724,19 +719,19 @@ static VALUE rb_fft_real_trans(int argc, VALUE *argv, VALUE obj,
|
|
724
719
|
static VALUE rb_gsl_fft_real_transform(int argc, VALUE *argv, VALUE obj)
|
725
720
|
{
|
726
721
|
return rb_fft_real_trans(argc, argv, obj, gsl_fft_real_transform,
|
727
|
-
|
722
|
+
RB_GSL_FFT_COPY);
|
728
723
|
}
|
729
724
|
|
730
725
|
static VALUE rb_gsl_fft_real_transform2(int argc, VALUE *argv, VALUE obj)
|
731
726
|
{
|
732
727
|
return rb_fft_real_trans(argc, argv, obj, gsl_fft_real_transform,
|
733
|
-
|
728
|
+
RB_GSL_FFT_INPLACE);
|
734
729
|
}
|
735
730
|
|
736
731
|
static VALUE rb_fft_halfcomplex_trans(int argc, VALUE *argv, VALUE obj,
|
737
|
-
|
738
|
-
|
739
|
-
|
732
|
+
int (*trans)(double [], size_t, size_t,
|
733
|
+
const gsl_fft_halfcomplex_wavetable *, gsl_fft_real_workspace *),
|
734
|
+
int sss)
|
740
735
|
{
|
741
736
|
int flag = 0, naflag = 0;
|
742
737
|
// local variable "status" was defined and set, but never used
|
@@ -745,14 +740,11 @@ static VALUE rb_fft_halfcomplex_trans(int argc, VALUE *argv, VALUE obj,
|
|
745
740
|
gsl_vector *vnew;
|
746
741
|
gsl_vector_view vv;
|
747
742
|
double *ptr1, *ptr2;
|
748
|
-
#ifdef HAVE_NARRAY_H
|
749
|
-
int shape[1];
|
750
|
-
#endif
|
751
743
|
gsl_fft_halfcomplex_wavetable *table = NULL;
|
752
744
|
gsl_fft_real_workspace *space = NULL;
|
753
745
|
VALUE ary;
|
754
|
-
flag = gsl_fft_get_argv_halfcomplex(argc, argv, obj, &ptr1, &stride, &n,
|
755
|
-
|
746
|
+
flag = gsl_fft_get_argv_halfcomplex(argc, argv, obj, &ptr1, &stride, &n,
|
747
|
+
&table, &space, &naflag);
|
756
748
|
if (naflag == 0) {
|
757
749
|
if (sss == RB_GSL_FFT_COPY) {
|
758
750
|
vnew = gsl_vector_alloc(n);
|
@@ -770,6 +762,7 @@ static VALUE rb_fft_halfcomplex_trans(int argc, VALUE *argv, VALUE obj,
|
|
770
762
|
#ifdef HAVE_NARRAY_H
|
771
763
|
} else if (naflag == 1) {
|
772
764
|
if (sss == RB_GSL_FFT_COPY) {
|
765
|
+
int shape[1];
|
773
766
|
shape[0] = n;
|
774
767
|
ary = na_make_object(NA_DFLOAT, 1, shape, cNArray);
|
775
768
|
ptr2 = NA_PTR_TYPE(ary, double*);
|
@@ -790,44 +783,44 @@ static VALUE rb_fft_halfcomplex_trans(int argc, VALUE *argv, VALUE obj,
|
|
790
783
|
|
791
784
|
static VALUE rb_gsl_fft_halfcomplex_transform(int argc, VALUE *argv, VALUE obj)
|
792
785
|
{
|
793
|
-
return rb_fft_halfcomplex_trans(argc, argv, obj,
|
794
|
-
|
795
|
-
|
786
|
+
return rb_fft_halfcomplex_trans(argc, argv, obj,
|
787
|
+
gsl_fft_halfcomplex_transform,
|
788
|
+
RB_GSL_FFT_COPY);
|
796
789
|
}
|
797
790
|
|
798
791
|
static VALUE rb_gsl_fft_halfcomplex_transform2(int argc, VALUE *argv, VALUE obj)
|
799
792
|
{
|
800
|
-
return rb_fft_halfcomplex_trans(argc, argv, obj,
|
801
|
-
|
802
|
-
|
793
|
+
return rb_fft_halfcomplex_trans(argc, argv, obj,
|
794
|
+
gsl_fft_halfcomplex_transform,
|
795
|
+
RB_GSL_FFT_INPLACE);
|
803
796
|
}
|
804
797
|
|
805
798
|
static VALUE rb_gsl_fft_halfcomplex_backward(int argc, VALUE *argv, VALUE obj)
|
806
799
|
{
|
807
|
-
return rb_fft_halfcomplex_trans(argc, argv, obj,
|
808
|
-
|
809
|
-
|
800
|
+
return rb_fft_halfcomplex_trans(argc, argv, obj,
|
801
|
+
gsl_fft_halfcomplex_backward,
|
802
|
+
RB_GSL_FFT_COPY);
|
810
803
|
}
|
811
804
|
|
812
805
|
static VALUE rb_gsl_fft_halfcomplex_backward2(int argc, VALUE *argv, VALUE obj)
|
813
806
|
{
|
814
|
-
return rb_fft_halfcomplex_trans(argc, argv, obj,
|
815
|
-
|
816
|
-
|
807
|
+
return rb_fft_halfcomplex_trans(argc, argv, obj,
|
808
|
+
gsl_fft_halfcomplex_backward,
|
809
|
+
RB_GSL_FFT_INPLACE);
|
817
810
|
}
|
818
811
|
|
819
812
|
static VALUE rb_gsl_fft_halfcomplex_inverse(int argc, VALUE *argv, VALUE obj)
|
820
813
|
{
|
821
|
-
return rb_fft_halfcomplex_trans(argc, argv, obj,
|
822
|
-
|
823
|
-
|
814
|
+
return rb_fft_halfcomplex_trans(argc, argv, obj,
|
815
|
+
gsl_fft_halfcomplex_inverse,
|
816
|
+
RB_GSL_FFT_COPY);
|
824
817
|
}
|
825
818
|
|
826
819
|
static VALUE rb_gsl_fft_halfcomplex_inverse2(int argc, VALUE *argv, VALUE obj)
|
827
820
|
{
|
828
|
-
return rb_fft_halfcomplex_trans(argc, argv, obj,
|
829
|
-
|
830
|
-
|
821
|
+
return rb_fft_halfcomplex_trans(argc, argv, obj,
|
822
|
+
gsl_fft_halfcomplex_inverse,
|
823
|
+
RB_GSL_FFT_INPLACE);
|
831
824
|
}
|
832
825
|
|
833
826
|
static VALUE rb_gsl_fft_real_unpack(VALUE obj)
|
@@ -868,7 +861,7 @@ static VALUE rb_gsl_fft_halfcomplex_to_nrc(VALUE obj)
|
|
868
861
|
vnew = gsl_vector_alloc(v->size);
|
869
862
|
gsl_vector_set(vnew, 0, gsl_vector_get(v, 0)); /* DC */
|
870
863
|
gsl_vector_set(vnew, 1, gsl_vector_get(v, v->size/2)); /* Nyquist freq */
|
871
|
-
for (i = 2, k = 1; i < vnew->size; i+=2, k++) {
|
864
|
+
for (i = 2, k = 1; i < vnew->size; i += 2, k++) {
|
872
865
|
gsl_vector_set(vnew, i, gsl_vector_get(v, k));
|
873
866
|
gsl_vector_set(vnew, i+1, -gsl_vector_get(v, v->size-k));
|
874
867
|
}
|
@@ -887,12 +880,12 @@ static VALUE rb_gsl_fft_halfcomplex_amp_phase(VALUE obj)
|
|
887
880
|
amp = gsl_vector_alloc(v->size/2);
|
888
881
|
phase = gsl_vector_alloc(v->size/2);
|
889
882
|
gsl_vector_set(amp, 0, gsl_vector_get(v, 0));
|
890
|
-
gsl_vector_set(phase, 0, 0);
|
883
|
+
gsl_vector_set(phase, 0, 0);
|
891
884
|
gsl_vector_set(amp, amp->size-1, gsl_vector_get(v, v->size-1));
|
892
|
-
gsl_vector_set(phase, phase->size-1, 0);
|
893
|
-
for (i = 1; i < v->size-1; i+=2) {
|
885
|
+
gsl_vector_set(phase, phase->size-1, 0);
|
886
|
+
for (i = 1; i < v->size-1; i += 2) {
|
894
887
|
re = gsl_vector_get(v, i);
|
895
|
-
im = gsl_vector_get(v, i+1);
|
888
|
+
im = gsl_vector_get(v, i+1);
|
896
889
|
gsl_vector_set(amp, i/2+1, sqrt(re*re + im*im));
|
897
890
|
gsl_vector_set(phase, i/2+1, atan2(im, re));
|
898
891
|
}
|
@@ -907,46 +900,46 @@ void Init_gsl_fft(VALUE module)
|
|
907
900
|
|
908
901
|
/*****/
|
909
902
|
|
910
|
-
rb_define_const(mgsl_fft, "Forward", INT2FIX(
|
911
|
-
rb_define_const(mgsl_fft, "FORWARD", INT2FIX(
|
912
|
-
rb_define_const(mgsl_fft, "Backward", INT2FIX(
|
913
|
-
rb_define_const(mgsl_fft, "BACKWARD", INT2FIX(
|
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));
|
914
907
|
|
915
908
|
/* Transforms for complex vectors */
|
916
|
-
rb_define_method(cgsl_vector_complex, "radix2_forward",
|
917
|
-
|
918
|
-
rb_define_method(cgsl_vector_complex, "radix2_transform",
|
919
|
-
|
920
|
-
rb_define_method(cgsl_vector_complex, "radix2_backward",
|
921
|
-
|
922
|
-
rb_define_method(cgsl_vector_complex, "radix2_inverse",
|
923
|
-
|
924
|
-
rb_define_method(cgsl_vector_complex, "radix2_dif_forward",
|
925
|
-
|
926
|
-
rb_define_method(cgsl_vector_complex, "radix2_dif_transform",
|
927
|
-
|
928
|
-
rb_define_method(cgsl_vector_complex, "radix2_dif_backward",
|
929
|
-
|
930
|
-
rb_define_method(cgsl_vector_complex, "radix2_dif_inverse",
|
931
|
-
|
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);
|
932
925
|
|
933
926
|
/* In-place radix-2 transforms for complex vectors */
|
934
|
-
rb_define_method(cgsl_vector_complex, "radix2_forward!",
|
935
|
-
|
927
|
+
rb_define_method(cgsl_vector_complex, "radix2_forward!",
|
928
|
+
rb_gsl_fft_complex_radix2_forward2, 0);
|
936
929
|
rb_define_method(cgsl_vector_complex, "radix2_transform!",
|
937
|
-
|
938
|
-
rb_define_method(cgsl_vector_complex, "radix2_backward!",
|
939
|
-
|
940
|
-
rb_define_method(cgsl_vector_complex, "radix2_inverse!",
|
941
|
-
|
942
|
-
rb_define_method(cgsl_vector_complex, "radix2_dif_forward!",
|
943
|
-
|
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);
|
944
937
|
rb_define_method(cgsl_vector_complex, "radix2_dif_transform!",
|
945
|
-
|
946
|
-
rb_define_method(cgsl_vector_complex, "radix2_dif_backward!",
|
947
|
-
|
948
|
-
rb_define_method(cgsl_vector_complex, "radix2_dif_inverse!",
|
949
|
-
|
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);
|
950
943
|
|
951
944
|
// class GSL::FFT::Wavetable < GSL::Object
|
952
945
|
//
|
@@ -958,23 +951,23 @@ void Init_gsl_fft(VALUE module)
|
|
958
951
|
// No alloc
|
959
952
|
// TODO Make GSL::FFT::Wavetable#initialize private?
|
960
953
|
rb_define_method(cgsl_fft_wavetable, "n",
|
961
|
-
|
954
|
+
rb_GSL_FFT_Wavetable_n, 0);
|
962
955
|
rb_define_method(cgsl_fft_wavetable, "nf",
|
963
|
-
|
956
|
+
rb_GSL_FFT_Wavetable_nf, 0);
|
964
957
|
rb_define_method(cgsl_fft_wavetable, "factor",
|
965
|
-
|
958
|
+
rb_GSL_FFT_Wavetable_factor, 0);
|
966
959
|
|
967
960
|
// class GSL::FFT::ComplexWavetable < GSL::FFT::Wavetable
|
968
961
|
cgsl_fft_complex_wavetable = rb_define_class_under(mgsl_fft, "ComplexWavetable",
|
969
|
-
|
962
|
+
cgsl_fft_wavetable);
|
970
963
|
rb_define_singleton_method(cgsl_fft_complex_wavetable, "alloc",
|
971
|
-
|
964
|
+
rb_gsl_fft_complex_wavetable_new, 1);
|
972
965
|
|
973
966
|
// class GSL::FFT::ComplexWorkspace < GSL::Object
|
974
|
-
cgsl_fft_complex_workspace = rb_define_class_under(mgsl_fft, "ComplexWorkspace",
|
975
|
-
|
967
|
+
cgsl_fft_complex_workspace = rb_define_class_under(mgsl_fft, "ComplexWorkspace",
|
968
|
+
cGSL_Object);
|
976
969
|
rb_define_singleton_method(cgsl_fft_complex_workspace, "alloc",
|
977
|
-
|
970
|
+
rb_gsl_fft_complex_workspace_new, 1);
|
978
971
|
|
979
972
|
rb_define_method(cgsl_vector_complex, "forward", rb_gsl_fft_complex_forward, -1);
|
980
973
|
rb_define_method(cgsl_vector_complex, "transform", rb_gsl_fft_complex_transform, -1);
|
@@ -989,58 +982,58 @@ void Init_gsl_fft(VALUE module)
|
|
989
982
|
/*****/
|
990
983
|
|
991
984
|
// TODO Do these method names need the "real_" and "halfcomplex_" prefixes?
|
992
|
-
rb_define_method(cgsl_vector, "real_radix2_transform",
|
993
|
-
|
985
|
+
rb_define_method(cgsl_vector, "real_radix2_transform",
|
986
|
+
rb_gsl_fft_real_radix2_transform, 0);
|
994
987
|
rb_define_alias(cgsl_vector, "radix2_transform", "real_radix2_transform");
|
995
988
|
rb_define_alias(cgsl_vector, "radix2_forward", "real_radix2_transform");
|
996
|
-
rb_define_method(cgsl_vector, "real_radix2_inverse",
|
997
|
-
|
989
|
+
rb_define_method(cgsl_vector, "real_radix2_inverse",
|
990
|
+
rb_gsl_fft_halfcomplex_radix2_inverse, 0);
|
998
991
|
rb_define_alias(cgsl_vector, "radix2_inverse", "real_radix2_inverse");
|
999
|
-
rb_define_alias(cgsl_vector, "halfcomplex_radix2_inverse",
|
1000
|
-
|
1001
|
-
rb_define_method(cgsl_vector, "real_radix2_backward",
|
1002
|
-
|
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);
|
1003
996
|
rb_define_alias(cgsl_vector, "radix2_backward", "real_radix2_backward");
|
1004
|
-
rb_define_alias(cgsl_vector, "halfcomplex_radix2_backward",
|
1005
|
-
|
997
|
+
rb_define_alias(cgsl_vector, "halfcomplex_radix2_backward",
|
998
|
+
"real_radix2_backward");
|
1006
999
|
|
1007
1000
|
// TODO Do these method names need the "real_" and "halfcomplex_" prefixes?
|
1008
|
-
rb_define_method(cgsl_vector, "real_radix2_transform!",
|
1009
|
-
|
1001
|
+
rb_define_method(cgsl_vector, "real_radix2_transform!",
|
1002
|
+
rb_gsl_fft_real_radix2_transform2, 0);
|
1010
1003
|
rb_define_alias(cgsl_vector, "radix2_transform!", "real_radix2_transform!");
|
1011
1004
|
rb_define_alias(cgsl_vector, "radix2_forward!", "real_radix2_transform!");
|
1012
|
-
rb_define_method(cgsl_vector, "real_radix2_inverse!",
|
1013
|
-
|
1005
|
+
rb_define_method(cgsl_vector, "real_radix2_inverse!",
|
1006
|
+
rb_gsl_fft_halfcomplex_radix2_inverse2, 0);
|
1014
1007
|
rb_define_alias(cgsl_vector, "radix2_inverse!", "real_radix2_inverse!");
|
1015
|
-
rb_define_alias(cgsl_vector, "halfcomplex_radix2_inverse!",
|
1016
|
-
|
1017
|
-
rb_define_method(cgsl_vector, "real_radix2_backward!",
|
1018
|
-
|
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);
|
1019
1012
|
rb_define_alias(cgsl_vector, "radix2_backward!", "real_radix2_backward!");
|
1020
|
-
rb_define_alias(cgsl_vector, "halfcomplex_radix2_backward!",
|
1021
|
-
|
1013
|
+
rb_define_alias(cgsl_vector, "halfcomplex_radix2_backward!",
|
1014
|
+
"real_radix2_backward!");
|
1022
1015
|
|
1023
1016
|
/*****/
|
1024
1017
|
|
1025
1018
|
// class GSL::FFT::RealWavetable < GSL::FFT::Wavetable
|
1026
|
-
cgsl_fft_real_wavetable = rb_define_class_under(mgsl_fft, "RealWavetable",
|
1027
|
-
|
1019
|
+
cgsl_fft_real_wavetable = rb_define_class_under(mgsl_fft, "RealWavetable",
|
1020
|
+
cgsl_fft_wavetable);
|
1028
1021
|
rb_define_singleton_method(cgsl_fft_real_wavetable, "alloc",
|
1029
|
-
|
1022
|
+
rb_gsl_fft_real_wavetable_new, 1);
|
1030
1023
|
|
1031
1024
|
// class GSL::FFT::HalfComplexWavetable < GSL::FFT::Wavetable
|
1032
|
-
cgsl_fft_halfcomplex_wavetable = rb_define_class_under(mgsl_fft,
|
1033
|
-
|
1025
|
+
cgsl_fft_halfcomplex_wavetable = rb_define_class_under(mgsl_fft,
|
1026
|
+
"HalfComplexWavetable", cgsl_fft_wavetable);
|
1034
1027
|
rb_define_singleton_method(cgsl_fft_halfcomplex_wavetable, "alloc",
|
1035
|
-
|
1028
|
+
rb_gsl_fft_halfcomplex_wavetable_new, 1);
|
1036
1029
|
|
1037
1030
|
/*****/
|
1038
1031
|
|
1039
1032
|
// class GSL::FFT::RealWorkspace < GSL::Object
|
1040
|
-
cgsl_fft_real_workspace = rb_define_class_under(mgsl_fft, "RealWorkspace",
|
1041
|
-
|
1033
|
+
cgsl_fft_real_workspace = rb_define_class_under(mgsl_fft, "RealWorkspace",
|
1034
|
+
cGSL_Object);
|
1042
1035
|
rb_define_singleton_method(cgsl_fft_real_workspace, "alloc",
|
1043
|
-
|
1036
|
+
rb_gsl_fft_real_workspace_new, 1);
|
1044
1037
|
|
1045
1038
|
/*****/
|
1046
1039
|
|
@@ -1050,14 +1043,14 @@ void Init_gsl_fft(VALUE module)
|
|
1050
1043
|
rb_define_alias(cgsl_vector, "forward", "real_transform");
|
1051
1044
|
rb_define_alias(cgsl_vector, "fft_forward", "real_transform");
|
1052
1045
|
rb_define_alias(cgsl_vector, "fft", "real_transform");
|
1053
|
-
rb_define_method(cgsl_vector, "halfcomplex_transform",
|
1054
|
-
|
1055
|
-
rb_define_method(cgsl_vector, "halfcomplex_backward",
|
1056
|
-
|
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);
|
1057
1050
|
rb_define_alias(cgsl_vector, "backward", "halfcomplex_backward");
|
1058
1051
|
rb_define_alias(cgsl_vector, "fft_backward", "halfcomplex_backward");
|
1059
|
-
rb_define_method(cgsl_vector, "halfcomplex_inverse",
|
1060
|
-
|
1052
|
+
rb_define_method(cgsl_vector, "halfcomplex_inverse",
|
1053
|
+
rb_gsl_fft_halfcomplex_inverse, -1);
|
1061
1054
|
rb_define_alias(cgsl_vector, "fft_inverse", "halfcomplex_inverse");
|
1062
1055
|
rb_define_alias(cgsl_vector, "ifft", "halfcomplex_inverse");
|
1063
1056
|
rb_define_alias(cgsl_vector, "inverse", "halfcomplex_inverse");
|
@@ -1067,14 +1060,14 @@ void Init_gsl_fft(VALUE module)
|
|
1067
1060
|
rb_define_alias(cgsl_vector, "forward!", "real_transform!");
|
1068
1061
|
rb_define_alias(cgsl_vector, "fft_forward!", "real_transform!");
|
1069
1062
|
rb_define_alias(cgsl_vector, "fft!", "real_transform!");
|
1070
|
-
rb_define_method(cgsl_vector, "halfcomplex_transform!",
|
1071
|
-
|
1063
|
+
rb_define_method(cgsl_vector, "halfcomplex_transform!",
|
1064
|
+
rb_gsl_fft_halfcomplex_transform2, -1);
|
1072
1065
|
rb_define_method(cgsl_vector, "halfcomplex_backward!",
|
1073
|
-
|
1066
|
+
rb_gsl_fft_halfcomplex_backward2, -1);
|
1074
1067
|
rb_define_alias(cgsl_vector, "backward!", "halfcomplex_backward!");
|
1075
1068
|
rb_define_alias(cgsl_vector, "fft_backward!", "halfcomplex_backward!");
|
1076
|
-
rb_define_method(cgsl_vector, "halfcomplex_inverse!",
|
1077
|
-
|
1069
|
+
rb_define_method(cgsl_vector, "halfcomplex_inverse!",
|
1070
|
+
rb_gsl_fft_halfcomplex_inverse2, -1);
|
1078
1071
|
rb_define_alias(cgsl_vector, "fft_inverse!", "halfcomplex_inverse!");
|
1079
1072
|
rb_define_alias(cgsl_vector, "ifft!", "halfcomplex_inverse!");
|
1080
1073
|
rb_define_alias(cgsl_vector, "inverse!", "halfcomplex_inverse!");
|
@@ -1085,8 +1078,8 @@ void Init_gsl_fft(VALUE module)
|
|
1085
1078
|
rb_define_alias(cgsl_vector, "real_to_complex", "fft_real_unpack");
|
1086
1079
|
rb_define_alias(cgsl_vector, "r_to_c", "fft_real_unpack");
|
1087
1080
|
|
1088
|
-
rb_define_method(cgsl_vector, "fft_halfcomplex_unpack",
|
1089
|
-
|
1081
|
+
rb_define_method(cgsl_vector, "fft_halfcomplex_unpack",
|
1082
|
+
rb_gsl_fft_halfcomplex_unpack, 0);
|
1090
1083
|
rb_define_alias(cgsl_vector, "halfcomplex_unpack", "fft_halfcomplex_unpack");
|
1091
1084
|
rb_define_alias(cgsl_vector, "halfcomplex_to_complex", "fft_halfcomplex_unpack");
|
1092
1085
|
rb_define_alias(cgsl_vector, "hc_to_c", "fft_halfcomplex_unpack");
|
@@ -1094,9 +1087,9 @@ void Init_gsl_fft(VALUE module)
|
|
1094
1087
|
/*****/
|
1095
1088
|
|
1096
1089
|
rb_define_method(cgsl_vector, "to_nrc_order",
|
1097
|
-
|
1098
|
-
|
1090
|
+
rb_gsl_fft_halfcomplex_to_nrc, 0);
|
1091
|
+
|
1099
1092
|
rb_define_method(cgsl_vector, "halfcomplex_amp_phase",
|
1100
|
-
|
1093
|
+
rb_gsl_fft_halfcomplex_amp_phase, 0);
|
1101
1094
|
rb_define_alias(cgsl_vector, "hc_amp_phase", "halfcomplex_amp_phase");
|
1102
1095
|
}
|