rb-gsl 1.16.0.5 → 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 +4 -4
- data/rb-gsl.gemspec +5 -10
- metadata +10 -713
- data/.gitignore +0 -12
- data/.travis.yml +0 -24
- data/AUTHORS +0 -12
- data/COPYING +0 -341
- data/ChangeLog +0 -621
- data/Gemfile +0 -4
- data/README.md +0 -77
- data/Rakefile +0 -20
- data/THANKS +0 -17
- data/examples/alf/alf.gp +0 -15
- data/examples/alf/alf.rb +0 -32
- data/examples/blas/blas.rb +0 -13
- data/examples/blas/dnrm2.rb +0 -16
- data/examples/blas/level1.rb +0 -81
- data/examples/blas/level2.rb +0 -11
- data/examples/blas/level3.rb +0 -12
- data/examples/bspline.rb +0 -57
- data/examples/cdf.rb +0 -16
- data/examples/cheb.rb +0 -21
- data/examples/combination.rb +0 -23
- data/examples/complex/RC-lpf.rb +0 -47
- data/examples/complex/add.rb +0 -36
- data/examples/complex/coerce.rb +0 -14
- data/examples/complex/complex.rb +0 -25
- data/examples/complex/fpmi.rb +0 -70
- data/examples/complex/functions.rb +0 -77
- data/examples/complex/michelson.rb +0 -36
- data/examples/complex/mul.rb +0 -28
- data/examples/complex/oscillator.rb +0 -17
- data/examples/complex/set.rb +0 -37
- data/examples/const/physconst.rb +0 -151
- data/examples/const/travel.rb +0 -45
- data/examples/deriv/demo.rb +0 -13
- data/examples/deriv/deriv.rb +0 -36
- data/examples/deriv/diff.rb +0 -35
- data/examples/dht.rb +0 -42
- data/examples/dirac.rb +0 -56
- data/examples/eigen/eigen.rb +0 -34
- data/examples/eigen/herm.rb +0 -22
- data/examples/eigen/narray.rb +0 -9
- data/examples/eigen/nonsymm.rb +0 -37
- data/examples/eigen/nonsymmv.rb +0 -43
- data/examples/eigen/qhoscillator.gp +0 -35
- data/examples/eigen/qhoscillator.rb +0 -90
- data/examples/eigen/vander.rb +0 -41
- data/examples/fft/fft.rb +0 -17
- data/examples/fft/fft2.rb +0 -17
- data/examples/fft/forward.rb +0 -25
- data/examples/fft/forward2.rb +0 -26
- data/examples/fft/radix2.rb +0 -18
- data/examples/fft/real-halfcomplex.rb +0 -33
- data/examples/fft/real-halfcomplex2.rb +0 -30
- data/examples/fft/realradix2.rb +0 -19
- data/examples/fft/sunspot.dat +0 -256
- data/examples/fft/sunspot.rb +0 -16
- data/examples/fit/expdata.dat +0 -20
- data/examples/fit/expfit.rb +0 -31
- data/examples/fit/gaussfit.rb +0 -29
- data/examples/fit/gaussian_2peaks.rb +0 -34
- data/examples/fit/hillfit.rb +0 -40
- data/examples/fit/lognormal.rb +0 -26
- data/examples/fit/lorentzfit.rb +0 -22
- data/examples/fit/multifit.rb +0 -72
- data/examples/fit/ndlinear.rb +0 -133
- data/examples/fit/nonlinearfit.rb +0 -89
- data/examples/fit/plot.gp +0 -36
- data/examples/fit/polyfit.rb +0 -9
- data/examples/fit/powerfit.rb +0 -21
- data/examples/fit/sigmoidfit.rb +0 -40
- data/examples/fit/sinfit.rb +0 -22
- data/examples/fit/wlinear.rb +0 -46
- data/examples/fresnel.rb +0 -11
- data/examples/function/function.rb +0 -36
- data/examples/function/log.rb +0 -7
- data/examples/function/min.rb +0 -33
- data/examples/function/sin.rb +0 -10
- data/examples/function/synchrotron.rb +0 -18
- data/examples/gallery/butterfly.rb +0 -7
- data/examples/gallery/cayley.rb +0 -12
- data/examples/gallery/cornu.rb +0 -23
- data/examples/gallery/eight.rb +0 -11
- data/examples/gallery/koch.rb +0 -40
- data/examples/gallery/lemniscate.rb +0 -11
- data/examples/gallery/polar.rb +0 -11
- data/examples/gallery/rgplot/cossin.rb +0 -35
- data/examples/gallery/rgplot/rgplot.replaced +0 -0
- data/examples/gallery/rgplot/roesller.rb +0 -55
- data/examples/gallery/roesller.rb +0 -39
- data/examples/gallery/scarabaeus.rb +0 -14
- data/examples/histogram/cauchy.rb +0 -27
- data/examples/histogram/cauchy.sh +0 -2
- data/examples/histogram/exponential.rb +0 -19
- data/examples/histogram/gauss.rb +0 -16
- data/examples/histogram/gsl-histogram.rb +0 -40
- data/examples/histogram/histo2d.rb +0 -31
- data/examples/histogram/histo3d.rb +0 -34
- data/examples/histogram/histogram-pdf.rb +0 -27
- data/examples/histogram/histogram.rb +0 -26
- data/examples/histogram/integral.rb +0 -28
- data/examples/histogram/poisson.rb +0 -27
- data/examples/histogram/power.rb +0 -25
- data/examples/histogram/rebin.rb +0 -17
- data/examples/histogram/smp.dat +0 -5
- data/examples/histogram/xexp.rb +0 -21
- data/examples/integration/ahmed.rb +0 -21
- data/examples/integration/cosmology.rb +0 -75
- data/examples/integration/friedmann.gp +0 -16
- data/examples/integration/friedmann.rb +0 -35
- data/examples/integration/gamma-zeta.rb +0 -35
- data/examples/integration/integration.rb +0 -22
- data/examples/integration/qag.rb +0 -8
- data/examples/integration/qag2.rb +0 -14
- data/examples/integration/qag3.rb +0 -8
- data/examples/integration/qagi.rb +0 -28
- data/examples/integration/qagi2.rb +0 -49
- data/examples/integration/qagiu.rb +0 -29
- data/examples/integration/qagp.rb +0 -20
- data/examples/integration/qags.rb +0 -14
- data/examples/integration/qawc.rb +0 -18
- data/examples/integration/qawf.rb +0 -41
- data/examples/integration/qawo.rb +0 -29
- data/examples/integration/qaws.rb +0 -30
- data/examples/integration/qng.rb +0 -17
- data/examples/interp/demo.gp +0 -20
- data/examples/interp/demo.rb +0 -45
- data/examples/interp/interp.rb +0 -37
- data/examples/interp/points +0 -10
- data/examples/interp/spline.rb +0 -20
- data/examples/jacobi/deriv.rb +0 -40
- data/examples/jacobi/integrate.rb +0 -34
- data/examples/jacobi/interp.rb +0 -43
- data/examples/jacobi/jacobi.rb +0 -11
- data/examples/linalg/HH.rb +0 -15
- data/examples/linalg/HH_narray.rb +0 -13
- data/examples/linalg/LQ_solve.rb +0 -73
- data/examples/linalg/LU.rb +0 -84
- data/examples/linalg/LU2.rb +0 -31
- data/examples/linalg/LU_narray.rb +0 -24
- data/examples/linalg/PTLQ.rb +0 -47
- data/examples/linalg/QR.rb +0 -18
- data/examples/linalg/QRPT.rb +0 -47
- data/examples/linalg/QR_solve.rb +0 -78
- data/examples/linalg/QR_solve_narray.rb +0 -13
- data/examples/linalg/SV.rb +0 -16
- data/examples/linalg/SV_narray.rb +0 -12
- data/examples/linalg/SV_solve.rb +0 -49
- data/examples/linalg/chol.rb +0 -29
- data/examples/linalg/chol_narray.rb +0 -15
- data/examples/linalg/complex.rb +0 -57
- data/examples/linalg/invert_narray.rb +0 -10
- data/examples/math/const.rb +0 -67
- data/examples/math/elementary.rb +0 -35
- data/examples/math/functions.rb +0 -41
- data/examples/math/inf_nan.rb +0 -34
- data/examples/math/minmax.rb +0 -22
- data/examples/math/power.rb +0 -18
- data/examples/math/test.rb +0 -31
- data/examples/matrix/a.dat +0 -0
- data/examples/matrix/add.rb +0 -45
- data/examples/matrix/b.dat +0 -4
- data/examples/matrix/cat.rb +0 -31
- data/examples/matrix/colvectors.rb +0 -24
- data/examples/matrix/complex.rb +0 -41
- data/examples/matrix/det.rb +0 -29
- data/examples/matrix/diagonal.rb +0 -23
- data/examples/matrix/get_all.rb +0 -159
- data/examples/matrix/hilbert.rb +0 -31
- data/examples/matrix/iterator.rb +0 -19
- data/examples/matrix/matrix.rb +0 -57
- data/examples/matrix/minmax.rb +0 -53
- data/examples/matrix/mul.rb +0 -39
- data/examples/matrix/rand.rb +0 -20
- data/examples/matrix/read.rb +0 -29
- data/examples/matrix/rowcol.rb +0 -47
- data/examples/matrix/set.rb +0 -41
- data/examples/matrix/set_all.rb +0 -100
- data/examples/matrix/view.rb +0 -32
- data/examples/matrix/view_all.rb +0 -148
- data/examples/matrix/write.rb +0 -23
- data/examples/min.rb +0 -29
- data/examples/monte/miser.rb +0 -47
- data/examples/monte/monte.rb +0 -47
- data/examples/monte/plain.rb +0 -47
- data/examples/monte/vegas.rb +0 -46
- data/examples/multimin/bundle.rb +0 -66
- data/examples/multimin/cqp.rb +0 -109
- data/examples/multimin/fdfminimizer.rb +0 -40
- data/examples/multimin/fminimizer.rb +0 -41
- data/examples/multiroot/demo.rb +0 -36
- data/examples/multiroot/fdfsolver.rb +0 -50
- data/examples/multiroot/fsolver.rb +0 -33
- data/examples/multiroot/fsolver2.rb +0 -32
- data/examples/multiroot/fsolver3.rb +0 -26
- data/examples/narray/histogram.rb +0 -14
- data/examples/narray/mandel.rb +0 -27
- data/examples/narray/narray.rb +0 -28
- data/examples/narray/narray2.rb +0 -44
- data/examples/narray/sf.rb +0 -26
- data/examples/ntuple/create.rb +0 -17
- data/examples/ntuple/project.rb +0 -31
- data/examples/odeiv/binarysystem.gp +0 -23
- data/examples/odeiv/binarysystem.rb +0 -104
- data/examples/odeiv/demo.gp +0 -24
- data/examples/odeiv/demo.rb +0 -69
- data/examples/odeiv/demo2.gp +0 -26
- data/examples/odeiv/duffing.rb +0 -45
- data/examples/odeiv/frei1.rb +0 -109
- data/examples/odeiv/frei2.rb +0 -76
- data/examples/odeiv/legendre.rb +0 -52
- data/examples/odeiv/odeiv.rb +0 -32
- data/examples/odeiv/odeiv2.rb +0 -45
- data/examples/odeiv/oscillator.rb +0 -42
- data/examples/odeiv/sedov.rb +0 -97
- data/examples/odeiv/whitedwarf.gp +0 -40
- data/examples/odeiv/whitedwarf.rb +0 -158
- data/examples/ool/conmin.rb +0 -100
- data/examples/ool/gencan.rb +0 -99
- data/examples/ool/pgrad.rb +0 -100
- data/examples/ool/spg.rb +0 -100
- data/examples/pdf/bernoulli.rb +0 -5
- data/examples/pdf/beta.rb +0 -7
- data/examples/pdf/binomiral.rb +0 -10
- data/examples/pdf/cauchy.rb +0 -6
- data/examples/pdf/chisq.rb +0 -8
- data/examples/pdf/exponential.rb +0 -7
- data/examples/pdf/exppow.rb +0 -6
- data/examples/pdf/fdist.rb +0 -7
- data/examples/pdf/flat.rb +0 -7
- data/examples/pdf/gamma.rb +0 -8
- data/examples/pdf/gauss-tail.rb +0 -5
- data/examples/pdf/gauss.rb +0 -6
- data/examples/pdf/geometric.rb +0 -5
- data/examples/pdf/gumbel.rb +0 -6
- data/examples/pdf/hypergeometric.rb +0 -11
- data/examples/pdf/landau.rb +0 -5
- data/examples/pdf/laplace.rb +0 -7
- data/examples/pdf/logarithmic.rb +0 -5
- data/examples/pdf/logistic.rb +0 -6
- data/examples/pdf/lognormal.rb +0 -6
- data/examples/pdf/neg-binomiral.rb +0 -10
- data/examples/pdf/pareto.rb +0 -7
- data/examples/pdf/pascal.rb +0 -10
- data/examples/pdf/poisson.rb +0 -5
- data/examples/pdf/rayleigh-tail.rb +0 -6
- data/examples/pdf/rayleigh.rb +0 -6
- data/examples/pdf/tdist.rb +0 -6
- data/examples/pdf/weibull.rb +0 -8
- data/examples/permutation/ex1.rb +0 -22
- data/examples/permutation/permutation.rb +0 -16
- data/examples/poly/bell.rb +0 -6
- data/examples/poly/bessel.rb +0 -6
- data/examples/poly/cheb.rb +0 -6
- data/examples/poly/cheb_II.rb +0 -6
- data/examples/poly/cubic.rb +0 -9
- data/examples/poly/demo.rb +0 -20
- data/examples/poly/eval.rb +0 -28
- data/examples/poly/eval_derivs.rb +0 -14
- data/examples/poly/fit.rb +0 -21
- data/examples/poly/hermite.rb +0 -6
- data/examples/poly/poly.rb +0 -13
- data/examples/poly/quadratic.rb +0 -25
- data/examples/random/diffusion.rb +0 -34
- data/examples/random/gaussian.rb +0 -9
- data/examples/random/generator.rb +0 -27
- data/examples/random/hdsobol.rb +0 -21
- data/examples/random/poisson.rb +0 -9
- data/examples/random/qrng.rb +0 -19
- data/examples/random/randomwalk.rb +0 -37
- data/examples/random/randomwalk2d.rb +0 -19
- data/examples/random/rayleigh.rb +0 -36
- data/examples/random/rng.rb +0 -33
- data/examples/random/rngextra.rb +0 -14
- data/examples/roots/bisection.rb +0 -25
- data/examples/roots/brent.rb +0 -43
- data/examples/roots/demo.rb +0 -30
- data/examples/roots/newton.rb +0 -46
- data/examples/roots/recombination.gp +0 -11
- data/examples/roots/recombination.rb +0 -61
- data/examples/roots/steffenson.rb +0 -48
- data/examples/sf/ShiChi.rb +0 -6
- data/examples/sf/SiCi.rb +0 -6
- data/examples/sf/airy_Ai.rb +0 -8
- data/examples/sf/airy_Bi.rb +0 -8
- data/examples/sf/bessel_IK.rb +0 -12
- data/examples/sf/bessel_JY.rb +0 -13
- data/examples/sf/beta_inc.rb +0 -9
- data/examples/sf/clausen.rb +0 -6
- data/examples/sf/dawson.rb +0 -5
- data/examples/sf/debye.rb +0 -9
- data/examples/sf/dilog.rb +0 -6
- data/examples/sf/ellint.rb +0 -6
- data/examples/sf/expint.rb +0 -8
- data/examples/sf/fermi.rb +0 -10
- data/examples/sf/gamma_inc_P.rb +0 -9
- data/examples/sf/gegenbauer.rb +0 -8
- data/examples/sf/hyperg.rb +0 -7
- data/examples/sf/laguerre.rb +0 -19
- data/examples/sf/lambertW.rb +0 -5
- data/examples/sf/legendre_P.rb +0 -10
- data/examples/sf/lngamma.rb +0 -5
- data/examples/sf/psi.rb +0 -54
- data/examples/sf/sphbessel.gp +0 -27
- data/examples/sf/sphbessel.rb +0 -30
- data/examples/sf/synchrotron.rb +0 -5
- data/examples/sf/transport.rb +0 -10
- data/examples/sf/zetam1.rb +0 -5
- data/examples/siman.rb +0 -44
- data/examples/sort/heapsort.rb +0 -23
- data/examples/sort/heapsort_vector_complex.rb +0 -21
- data/examples/sort/sort.rb +0 -23
- data/examples/sort/sort2.rb +0 -16
- data/examples/stats/mean.rb +0 -17
- data/examples/stats/statistics.rb +0 -18
- data/examples/stats/test.rb +0 -9
- data/examples/sum.rb +0 -34
- data/examples/tamu_anova.rb +0 -18
- data/examples/vector/a.dat +0 -0
- data/examples/vector/add.rb +0 -56
- data/examples/vector/b.dat +0 -4
- data/examples/vector/c.dat +0 -3
- data/examples/vector/collect.rb +0 -26
- data/examples/vector/compare.rb +0 -28
- data/examples/vector/complex.rb +0 -51
- data/examples/vector/complex_get_all.rb +0 -85
- data/examples/vector/complex_set_all.rb +0 -131
- data/examples/vector/complex_view_all.rb +0 -77
- data/examples/vector/connect.rb +0 -22
- data/examples/vector/decimate.rb +0 -38
- data/examples/vector/diff.rb +0 -31
- data/examples/vector/filescan.rb +0 -17
- data/examples/vector/floor.rb +0 -23
- data/examples/vector/get_all.rb +0 -82
- data/examples/vector/gnuplot.rb +0 -38
- data/examples/vector/graph.rb +0 -28
- data/examples/vector/histogram.rb +0 -22
- data/examples/vector/linspace.rb +0 -24
- data/examples/vector/log.rb +0 -17
- data/examples/vector/logic.rb +0 -33
- data/examples/vector/logspace.rb +0 -25
- data/examples/vector/minmax.rb +0 -47
- data/examples/vector/mul.rb +0 -49
- data/examples/vector/narray.rb +0 -46
- data/examples/vector/read.rb +0 -29
- data/examples/vector/set.rb +0 -35
- data/examples/vector/set_all.rb +0 -121
- data/examples/vector/smpv.dat +0 -15
- data/examples/vector/test.rb +0 -43
- data/examples/vector/test_gslblock.rb +0 -58
- data/examples/vector/vector.rb +0 -110
- data/examples/vector/view.rb +0 -35
- data/examples/vector/view_all.rb +0 -73
- data/examples/vector/where.rb +0 -29
- data/examples/vector/write.rb +0 -24
- data/examples/vector/zip.rb +0 -34
- data/examples/wavelet/ecg.dat +0 -256
- data/examples/wavelet/wavelet1.rb +0 -50
- data/ext/gsl_native/alf.c +0 -206
- data/ext/gsl_native/array.c +0 -553
- data/ext/gsl_native/array_complex.c +0 -245
- data/ext/gsl_native/blas.c +0 -28
- data/ext/gsl_native/blas1.c +0 -733
- data/ext/gsl_native/blas2.c +0 -1088
- data/ext/gsl_native/blas3.c +0 -880
- data/ext/gsl_native/block.c +0 -40
- data/ext/gsl_native/block_source.h +0 -885
- data/ext/gsl_native/bspline.c +0 -122
- data/ext/gsl_native/bundle.c +0 -3
- data/ext/gsl_native/cdf.c +0 -740
- data/ext/gsl_native/cheb.c +0 -531
- data/ext/gsl_native/combination.c +0 -275
- data/ext/gsl_native/common.c +0 -293
- data/ext/gsl_native/complex.c +0 -1002
- data/ext/gsl_native/const.c +0 -331
- data/ext/gsl_native/const_additional.c +0 -99
- data/ext/gsl_native/cqp.c +0 -283
- data/ext/gsl_native/deriv.c +0 -187
- data/ext/gsl_native/dht.c +0 -353
- data/ext/gsl_native/diff.c +0 -164
- data/ext/gsl_native/dirac.c +0 -388
- data/ext/gsl_native/eigen.c +0 -2322
- data/ext/gsl_native/error.c +0 -193
- data/ext/gsl_native/extconf.rb +0 -118
- data/ext/gsl_native/fft.c +0 -1095
- data/ext/gsl_native/fit.c +0 -204
- data/ext/gsl_native/fresnel.c +0 -312
- data/ext/gsl_native/function.c +0 -518
- data/ext/gsl_native/geometry.c +0 -139
- data/ext/gsl_native/graph.c +0 -1590
- data/ext/gsl_native/gsl.c +0 -259
- data/ext/gsl_native/gsl_narray.c +0 -794
- data/ext/gsl_native/histogram.c +0 -1964
- data/ext/gsl_native/histogram2d.c +0 -1042
- data/ext/gsl_native/histogram3d.c +0 -884
- data/ext/gsl_native/histogram3d_source.c +0 -749
- data/ext/gsl_native/histogram_find.c +0 -99
- data/ext/gsl_native/histogram_oper.c +0 -150
- data/ext/gsl_native/ieee.c +0 -88
- data/ext/gsl_native/include/rb_gsl.h +0 -136
- data/ext/gsl_native/include/rb_gsl_array.h +0 -214
- data/ext/gsl_native/include/rb_gsl_cheb.h +0 -19
- data/ext/gsl_native/include/rb_gsl_common.h +0 -348
- data/ext/gsl_native/include/rb_gsl_complex.h +0 -25
- data/ext/gsl_native/include/rb_gsl_const.h +0 -23
- data/ext/gsl_native/include/rb_gsl_dirac.h +0 -6
- data/ext/gsl_native/include/rb_gsl_eigen.h +0 -17
- data/ext/gsl_native/include/rb_gsl_fft.h +0 -49
- data/ext/gsl_native/include/rb_gsl_fit.h +0 -23
- data/ext/gsl_native/include/rb_gsl_function.h +0 -23
- data/ext/gsl_native/include/rb_gsl_graph.h +0 -68
- data/ext/gsl_native/include/rb_gsl_histogram.h +0 -63
- data/ext/gsl_native/include/rb_gsl_histogram3d.h +0 -97
- data/ext/gsl_native/include/rb_gsl_integration.h +0 -17
- data/ext/gsl_native/include/rb_gsl_interp.h +0 -41
- data/ext/gsl_native/include/rb_gsl_linalg.h +0 -21
- data/ext/gsl_native/include/rb_gsl_math.h +0 -20
- data/ext/gsl_native/include/rb_gsl_odeiv.h +0 -18
- data/ext/gsl_native/include/rb_gsl_poly.h +0 -67
- data/ext/gsl_native/include/rb_gsl_rational.h +0 -30
- data/ext/gsl_native/include/rb_gsl_rng.h +0 -20
- data/ext/gsl_native/include/rb_gsl_root.h +0 -22
- data/ext/gsl_native/include/rb_gsl_sf.h +0 -110
- data/ext/gsl_native/include/rb_gsl_statistics.h +0 -17
- data/ext/gsl_native/include/rb_gsl_tensor.h +0 -43
- data/ext/gsl_native/include/rb_gsl_with_narray.h +0 -31
- data/ext/gsl_native/include/templates_off.h +0 -87
- data/ext/gsl_native/include/templates_on.h +0 -241
- data/ext/gsl_native/integration.c +0 -1154
- data/ext/gsl_native/interp.c +0 -499
- data/ext/gsl_native/jacobi.c +0 -733
- data/ext/gsl_native/linalg.c +0 -3915
- data/ext/gsl_native/linalg_complex.c +0 -726
- data/ext/gsl_native/math.c +0 -706
- data/ext/gsl_native/matrix.c +0 -36
- data/ext/gsl_native/matrix_complex.c +0 -1733
- data/ext/gsl_native/matrix_double.c +0 -557
- data/ext/gsl_native/matrix_int.c +0 -255
- data/ext/gsl_native/matrix_source.h +0 -2708
- data/ext/gsl_native/min.c +0 -219
- data/ext/gsl_native/monte.c +0 -978
- data/ext/gsl_native/multifit.c +0 -1862
- data/ext/gsl_native/multimin.c +0 -778
- data/ext/gsl_native/multimin_fsdf.c +0 -156
- data/ext/gsl_native/multiroots.c +0 -952
- data/ext/gsl_native/multiset.c +0 -210
- data/ext/gsl_native/ndlinear.c +0 -320
- data/ext/gsl_native/nmf.c +0 -171
- data/ext/gsl_native/nmf_wrap.c +0 -75
- data/ext/gsl_native/ntuple.c +0 -469
- data/ext/gsl_native/odeiv.c +0 -947
- data/ext/gsl_native/ool.c +0 -879
- data/ext/gsl_native/permutation.c +0 -598
- data/ext/gsl_native/poly.c +0 -39
- data/ext/gsl_native/poly2.c +0 -265
- data/ext/gsl_native/poly_source.h +0 -1871
- data/ext/gsl_native/qrng.c +0 -160
- data/ext/gsl_native/randist.c +0 -1848
- data/ext/gsl_native/rational.c +0 -480
- data/ext/gsl_native/rng.c +0 -595
- data/ext/gsl_native/root.c +0 -407
- data/ext/gsl_native/sf.c +0 -1446
- data/ext/gsl_native/sf_airy.c +0 -200
- data/ext/gsl_native/sf_bessel.c +0 -871
- data/ext/gsl_native/sf_clausen.c +0 -28
- data/ext/gsl_native/sf_coulomb.c +0 -206
- data/ext/gsl_native/sf_coupling.c +0 -121
- data/ext/gsl_native/sf_dawson.c +0 -29
- data/ext/gsl_native/sf_debye.c +0 -148
- data/ext/gsl_native/sf_dilog.c +0 -43
- data/ext/gsl_native/sf_elementary.c +0 -46
- data/ext/gsl_native/sf_ellint.c +0 -206
- data/ext/gsl_native/sf_elljac.c +0 -30
- data/ext/gsl_native/sf_erfc.c +0 -89
- data/ext/gsl_native/sf_exp.c +0 -169
- data/ext/gsl_native/sf_expint.c +0 -201
- data/ext/gsl_native/sf_fermi_dirac.c +0 -148
- data/ext/gsl_native/sf_gamma.c +0 -343
- data/ext/gsl_native/sf_gegenbauer.c +0 -97
- data/ext/gsl_native/sf_hyperg.c +0 -203
- data/ext/gsl_native/sf_laguerre.c +0 -113
- data/ext/gsl_native/sf_lambert.c +0 -47
- data/ext/gsl_native/sf_legendre.c +0 -368
- data/ext/gsl_native/sf_log.c +0 -105
- data/ext/gsl_native/sf_mathieu.c +0 -235
- data/ext/gsl_native/sf_power.c +0 -47
- data/ext/gsl_native/sf_psi.c +0 -89
- data/ext/gsl_native/sf_synchrotron.c +0 -48
- data/ext/gsl_native/sf_transport.c +0 -76
- data/ext/gsl_native/sf_trigonometric.c +0 -210
- data/ext/gsl_native/sf_zeta.c +0 -115
- data/ext/gsl_native/signal.c +0 -303
- data/ext/gsl_native/siman.c +0 -713
- data/ext/gsl_native/sort.c +0 -207
- data/ext/gsl_native/spline.c +0 -377
- data/ext/gsl_native/stats.c +0 -787
- data/ext/gsl_native/sum.c +0 -168
- data/ext/gsl_native/tamu_anova.c +0 -56
- data/ext/gsl_native/tensor.c +0 -35
- data/ext/gsl_native/tensor_source.h +0 -1122
- data/ext/gsl_native/vector.c +0 -35
- data/ext/gsl_native/vector_complex.c +0 -2241
- data/ext/gsl_native/vector_double.c +0 -1433
- data/ext/gsl_native/vector_int.c +0 -202
- data/ext/gsl_native/vector_source.h +0 -3321
- data/ext/gsl_native/wavelet.c +0 -923
- data/lib/gsl.rb +0 -8
- data/lib/gsl/gnuplot.rb +0 -41
- data/lib/gsl/oper.rb +0 -43
- data/lib/gsl/version.rb +0 -3
- data/lib/ool.rb +0 -22
- data/lib/ool/conmin.rb +0 -30
- data/lib/rbgsl.rb +0 -1
- data/rdoc/alf.rdoc +0 -77
- data/rdoc/blas.rdoc +0 -269
- data/rdoc/bspline.rdoc +0 -42
- data/rdoc/changes.rdoc +0 -159
- data/rdoc/cheb.rdoc +0 -99
- data/rdoc/cholesky_complex.rdoc +0 -46
- data/rdoc/combi.rdoc +0 -125
- data/rdoc/complex.rdoc +0 -210
- data/rdoc/const.rdoc +0 -546
- data/rdoc/dht.rdoc +0 -122
- data/rdoc/diff.rdoc +0 -133
- data/rdoc/ehandling.rdoc +0 -50
- data/rdoc/eigen.rdoc +0 -401
- data/rdoc/fft.rdoc +0 -535
- data/rdoc/fit.rdoc +0 -284
- data/rdoc/function.rdoc +0 -94
- data/rdoc/graph.rdoc +0 -137
- data/rdoc/hist.rdoc +0 -409
- data/rdoc/hist2d.rdoc +0 -279
- data/rdoc/hist3d.rdoc +0 -112
- data/rdoc/integration.rdoc +0 -398
- data/rdoc/interp.rdoc +0 -231
- data/rdoc/intro.rdoc +0 -27
- data/rdoc/linalg.rdoc +0 -681
- data/rdoc/linalg_complex.rdoc +0 -88
- data/rdoc/math.rdoc +0 -276
- data/rdoc/matrix.rdoc +0 -1093
- data/rdoc/min.rdoc +0 -189
- data/rdoc/monte.rdoc +0 -234
- data/rdoc/multimin.rdoc +0 -312
- data/rdoc/multiroot.rdoc +0 -293
- data/rdoc/narray.rdoc +0 -177
- data/rdoc/ndlinear.rdoc +0 -250
- data/rdoc/nonlinearfit.rdoc +0 -348
- data/rdoc/ntuple.rdoc +0 -88
- data/rdoc/odeiv.rdoc +0 -378
- data/rdoc/perm.rdoc +0 -221
- data/rdoc/poly.rdoc +0 -335
- data/rdoc/qrng.rdoc +0 -90
- data/rdoc/randist.rdoc +0 -233
- data/rdoc/ref.rdoc +0 -93
- data/rdoc/rng.rdoc +0 -203
- data/rdoc/roots.rdoc +0 -305
- data/rdoc/sf.rdoc +0 -1622
- data/rdoc/siman.rdoc +0 -89
- data/rdoc/sort.rdoc +0 -94
- data/rdoc/start.rdoc +0 -16
- data/rdoc/stats.rdoc +0 -219
- data/rdoc/sum.rdoc +0 -65
- data/rdoc/tensor.rdoc +0 -251
- data/rdoc/tut.rdoc +0 -5
- data/rdoc/use.rdoc +0 -177
- data/rdoc/vector.rdoc +0 -1243
- data/rdoc/vector_complex.rdoc +0 -347
- data/rdoc/wavelet.rdoc +0 -218
- data/test/gsl/blas_test.rb +0 -79
- data/test/gsl/bspline_test.rb +0 -63
- data/test/gsl/cdf_test.rb +0 -1512
- data/test/gsl/cheb_test.rb +0 -80
- data/test/gsl/combination_test.rb +0 -100
- data/test/gsl/complex_test.rb +0 -20
- data/test/gsl/const_test.rb +0 -29
- data/test/gsl/deriv_test.rb +0 -62
- data/test/gsl/dht_test.rb +0 -79
- data/test/gsl/diff_test.rb +0 -53
- data/test/gsl/eigen_test.rb +0 -563
- data/test/gsl/err_test.rb +0 -23
- data/test/gsl/fit_test.rb +0 -101
- data/test/gsl/histo_test.rb +0 -14
- data/test/gsl/index_test.rb +0 -61
- data/test/gsl/integration_test.rb +0 -274
- data/test/gsl/interp_test.rb +0 -27
- data/test/gsl/linalg_test.rb +0 -463
- data/test/gsl/matrix_nmf_test.rb +0 -37
- data/test/gsl/matrix_test.rb +0 -98
- data/test/gsl/min_test.rb +0 -89
- data/test/gsl/monte_test.rb +0 -77
- data/test/gsl/multifit_test.rb +0 -753
- data/test/gsl/multimin_test.rb +0 -157
- data/test/gsl/multiroot_test.rb +0 -135
- data/test/gsl/multiset_test.rb +0 -52
- data/test/gsl/odeiv_test.rb +0 -275
- data/test/gsl/oper_test.rb +0 -98
- data/test/gsl/poly_test.rb +0 -338
- data/test/gsl/qrng_test.rb +0 -94
- data/test/gsl/quartic_test.rb +0 -28
- data/test/gsl/randist_test.rb +0 -122
- data/test/gsl/rng_test.rb +0 -303
- data/test/gsl/roots_test.rb +0 -78
- data/test/gsl/sf_test.rb +0 -2079
- data/test/gsl/stats_test.rb +0 -122
- data/test/gsl/sum_test.rb +0 -69
- data/test/gsl/tensor_test.rb +0 -396
- data/test/gsl/vector_test.rb +0 -223
- data/test/gsl/wavelet_test.rb +0 -130
- data/test/gsl_test.rb +0 -321
- data/test/test_helper.rb +0 -42
- data/uncrustify.cfg +0 -1693
data/ext/gsl_native/vector_int.c
DELETED
@@ -1,202 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
vector_int.c
|
3
|
-
Ruby/GSL: Ruby extension library for GSL (GNU Scientific Library)
|
4
|
-
(C) Copyright 2004 by Yoshiki Tsunesada
|
5
|
-
Modified by Seiya Nishizawa 14/Apr/2004
|
6
|
-
|
7
|
-
Ruby/GSL is free software: you can redistribute it and/or modify it
|
8
|
-
under the terms of the GNU General Public License.
|
9
|
-
This library is distributed in the hope that it will be useful, but
|
10
|
-
WITHOUT ANY WARRANTY.
|
11
|
-
*/
|
12
|
-
|
13
|
-
#include "include/rb_gsl_array.h"
|
14
|
-
#include "include/rb_gsl_complex.h"
|
15
|
-
#include "include/rb_gsl_with_narray.h"
|
16
|
-
|
17
|
-
VALUE rb_gsl_vector_int_inner_product(int argc, VALUE *argv, VALUE obj);
|
18
|
-
VALUE rb_gsl_vector_int_do_something(VALUE obj, void (*func)(gsl_vector_int*));
|
19
|
-
|
20
|
-
static VALUE rb_gsl_vector_int_to_i(VALUE obj)
|
21
|
-
{
|
22
|
-
return obj;
|
23
|
-
}
|
24
|
-
|
25
|
-
VALUE rb_gsl_vector_int_to_f(VALUE obj)
|
26
|
-
{
|
27
|
-
gsl_vector_int *v;
|
28
|
-
gsl_vector *vnew;
|
29
|
-
size_t i;
|
30
|
-
Data_Get_Struct(obj, gsl_vector_int, v);
|
31
|
-
vnew = gsl_vector_alloc(v->size);
|
32
|
-
for (i = 0; i < v->size; i++)
|
33
|
-
gsl_vector_set(vnew, i, (double) gsl_vector_int_get(v, i));
|
34
|
-
if (VECTOR_INT_COL_P(obj))
|
35
|
-
return Data_Wrap_Struct(cgsl_vector_col, 0, gsl_vector_free, vnew);
|
36
|
-
else
|
37
|
-
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
|
38
|
-
}
|
39
|
-
|
40
|
-
static VALUE rb_gsl_vector_int_to_complex(VALUE obj)
|
41
|
-
{
|
42
|
-
gsl_vector_int *v;
|
43
|
-
gsl_vector_complex *vnew;
|
44
|
-
gsl_complex z;
|
45
|
-
size_t i;
|
46
|
-
Data_Get_Struct(obj, gsl_vector_int, v);
|
47
|
-
vnew = gsl_vector_complex_alloc(v->size);
|
48
|
-
for (i = 0; i < v->size; i++) {
|
49
|
-
GSL_SET_REAL(&z, (double) gsl_vector_int_get(v, i));
|
50
|
-
GSL_SET_IMAG(&z, 0.0);
|
51
|
-
gsl_vector_complex_set(vnew, i, z);
|
52
|
-
}
|
53
|
-
if (VECTOR_INT_COL_P(obj))
|
54
|
-
return Data_Wrap_Struct(cgsl_vector_complex_col, 0, gsl_vector_complex_free, vnew);
|
55
|
-
else
|
56
|
-
return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, vnew);
|
57
|
-
}
|
58
|
-
|
59
|
-
static VALUE rb_gsl_vector_int_coerce(VALUE obj, VALUE other)
|
60
|
-
{
|
61
|
-
gsl_vector_int *v = NULL, *vnew = NULL;
|
62
|
-
VALUE vv;
|
63
|
-
Data_Get_Struct(obj, gsl_vector_int, v);
|
64
|
-
switch (TYPE(other)) {
|
65
|
-
case T_FIXNUM:
|
66
|
-
vnew = gsl_vector_int_alloc(v->size);
|
67
|
-
if (vnew == NULL) rb_raise(rb_eNoMemError, "gsl_vector_int_alloc failed");
|
68
|
-
gsl_vector_int_set_all(vnew, FIX2INT(other));
|
69
|
-
vv = Data_Wrap_Struct(VECTOR_INT_ROW_COL(obj), 0, gsl_vector_int_free, vnew);
|
70
|
-
return rb_ary_new3(2, vv, obj);
|
71
|
-
break;
|
72
|
-
default:
|
73
|
-
return rb_ary_new3(2, other, rb_gsl_vector_int_to_f(obj));
|
74
|
-
}
|
75
|
-
// return rb_ary_new3(2, other, rb_gsl_vector_int_to_f(obj));
|
76
|
-
}
|
77
|
-
|
78
|
-
VALUE rb_gsl_vector_add(VALUE obj, VALUE b);
|
79
|
-
VALUE rb_gsl_vector_sub(VALUE obj, VALUE b);
|
80
|
-
VALUE rb_gsl_vector_mul(VALUE obj, VALUE b);
|
81
|
-
VALUE rb_gsl_vector_div(VALUE obj, VALUE b);
|
82
|
-
static VALUE rb_gsl_vector_int_add(VALUE obj, VALUE b)
|
83
|
-
{
|
84
|
-
gsl_vector_int *v, *vnew, *vb;
|
85
|
-
switch (TYPE(b)) {
|
86
|
-
case T_FIXNUM:
|
87
|
-
return rb_gsl_vector_int_add_constant(obj, b);
|
88
|
-
break;
|
89
|
-
case T_FLOAT:
|
90
|
-
return rb_gsl_vector_add_constant(rb_gsl_vector_int_to_f(obj), b);
|
91
|
-
break;
|
92
|
-
default:
|
93
|
-
if (rb_obj_is_kind_of(b, cgsl_vector_int)) {
|
94
|
-
Data_Get_Struct(obj, gsl_vector_int, v);
|
95
|
-
Data_Get_Struct(b, gsl_vector_int, vb);
|
96
|
-
vnew = gsl_vector_int_alloc(v->size);
|
97
|
-
gsl_vector_int_memcpy(vnew, v);
|
98
|
-
gsl_vector_int_add(vnew, vb);
|
99
|
-
return Data_Wrap_Struct(VECTOR_INT_ROW_COL(obj), 0, gsl_vector_int_free, vnew);
|
100
|
-
} else {
|
101
|
-
return rb_gsl_vector_add(rb_gsl_vector_int_to_f(obj), b);
|
102
|
-
}
|
103
|
-
break;
|
104
|
-
}
|
105
|
-
}
|
106
|
-
|
107
|
-
|
108
|
-
static VALUE rb_gsl_vector_int_sub(VALUE obj, VALUE b)
|
109
|
-
{
|
110
|
-
gsl_vector_int *v, *vnew, *vb;
|
111
|
-
switch (TYPE(b)) {
|
112
|
-
case T_FIXNUM:
|
113
|
-
return rb_gsl_vector_int_add_constant(obj, INT2FIX(-FIX2INT(b)));
|
114
|
-
break;
|
115
|
-
case T_FLOAT:
|
116
|
-
return rb_gsl_vector_add_constant(rb_gsl_vector_int_to_f(obj), rb_float_new(-NUM2DBL(b)));
|
117
|
-
break;
|
118
|
-
default:
|
119
|
-
if (rb_obj_is_kind_of(b, cgsl_vector_int)) {
|
120
|
-
Data_Get_Struct(obj, gsl_vector_int, v);
|
121
|
-
Data_Get_Struct(b, gsl_vector_int, vb);
|
122
|
-
vnew = gsl_vector_int_alloc(v->size);
|
123
|
-
gsl_vector_int_memcpy(vnew, v);
|
124
|
-
gsl_vector_int_sub(vnew, vb);
|
125
|
-
return Data_Wrap_Struct(VECTOR_INT_ROW_COL(obj), 0, gsl_vector_int_free, vnew);
|
126
|
-
} else {
|
127
|
-
return rb_gsl_vector_sub(rb_gsl_vector_int_to_f(obj), b);
|
128
|
-
}
|
129
|
-
break;
|
130
|
-
}
|
131
|
-
}
|
132
|
-
|
133
|
-
gsl_vector_int* mygsl_vector_int_mul_matrix(gsl_vector_int *v, gsl_matrix_int *m);
|
134
|
-
|
135
|
-
static VALUE rb_gsl_vector_int_mul(VALUE obj, VALUE b)
|
136
|
-
{
|
137
|
-
VALUE argv[2];
|
138
|
-
gsl_vector_int *v, *vnew, *v2;
|
139
|
-
gsl_matrix_int *m;
|
140
|
-
int val;
|
141
|
-
size_t i, j;
|
142
|
-
switch (TYPE(b)) {
|
143
|
-
case T_FIXNUM:
|
144
|
-
case T_FLOAT:
|
145
|
-
return rb_gsl_vector_int_scale(obj, b);
|
146
|
-
break;
|
147
|
-
default:
|
148
|
-
if (VECTOR_INT_ROW_P(obj) && VECTOR_INT_COL_P(b)) {
|
149
|
-
argv[0] = obj;
|
150
|
-
argv[1] = b;
|
151
|
-
return rb_gsl_vector_int_inner_product(2, argv, CLASS_OF(obj));
|
152
|
-
} else if (VECTOR_INT_ROW_P(obj) && MATRIX_INT_P(b)) {
|
153
|
-
Data_Get_Struct(obj, gsl_vector_int, v);
|
154
|
-
Data_Get_Struct(b, gsl_matrix_int, m);
|
155
|
-
vnew = mygsl_vector_int_mul_matrix(v, m);
|
156
|
-
return Data_Wrap_Struct(cgsl_vector_int, 0, gsl_vector_int_free, vnew);
|
157
|
-
} else if (VECTOR_INT_COL_P(obj) && VECTOR_INT_ROW_P(b)) {
|
158
|
-
Data_Get_Struct(obj, gsl_vector_int, v);
|
159
|
-
Data_Get_Struct(b, gsl_vector_int, v2);
|
160
|
-
if (v->size != v2->size) rb_raise(rb_eIndexError, "Vector sizes does not match.");
|
161
|
-
m = gsl_matrix_int_alloc(v->size, v2->size);
|
162
|
-
for (i = 0; i < v->size; i++) {
|
163
|
-
for (j = 0; j < v2->size; j++) {
|
164
|
-
val = gsl_vector_int_get(v, i)*gsl_vector_int_get(v2, j);
|
165
|
-
gsl_matrix_int_set(m, i, j, val);
|
166
|
-
}
|
167
|
-
}
|
168
|
-
return Data_Wrap_Struct(cgsl_matrix_int, 0, gsl_matrix_int_free, m);
|
169
|
-
} else {
|
170
|
-
return rb_gsl_vector_mul(rb_gsl_vector_int_to_f(obj), b);
|
171
|
-
}
|
172
|
-
break;
|
173
|
-
}
|
174
|
-
}
|
175
|
-
|
176
|
-
static VALUE rb_gsl_vector_int_div(VALUE obj, VALUE b)
|
177
|
-
{
|
178
|
-
return rb_gsl_vector_div(rb_gsl_vector_int_to_f(obj), b);
|
179
|
-
}
|
180
|
-
|
181
|
-
void Init_gsl_vector_int(VALUE module)
|
182
|
-
{
|
183
|
-
rb_define_method(cgsl_vector_int, "to_f", rb_gsl_vector_int_to_f, 0);
|
184
|
-
rb_define_method(cgsl_vector_int, "to_i", rb_gsl_vector_int_to_i, 0);
|
185
|
-
rb_define_method(cgsl_vector_int, "to_complex", rb_gsl_vector_int_to_complex, 0);
|
186
|
-
|
187
|
-
/*****/
|
188
|
-
rb_define_method(cgsl_vector_int, "coerce", rb_gsl_vector_int_coerce, 1);
|
189
|
-
|
190
|
-
rb_define_method(cgsl_vector_int, "add", rb_gsl_vector_int_add, 1);
|
191
|
-
rb_define_method(cgsl_vector_int, "sub", rb_gsl_vector_int_sub, 1);
|
192
|
-
rb_define_method(cgsl_vector_int, "mul", rb_gsl_vector_int_mul, 1);
|
193
|
-
rb_define_method(cgsl_vector_int, "div", rb_gsl_vector_int_div, 1);
|
194
|
-
|
195
|
-
rb_define_alias(cgsl_vector_int, "+", "add");
|
196
|
-
rb_define_alias(cgsl_vector_int, "-", "sub");
|
197
|
-
rb_define_alias(cgsl_vector_int, "*", "mul");
|
198
|
-
rb_define_alias(cgsl_vector_int, "/", "div");
|
199
|
-
|
200
|
-
Init_gsl_vector_int_init(module);
|
201
|
-
}
|
202
|
-
|
@@ -1,3321 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
vector_source.c
|
3
|
-
Ruby/GSL: Ruby extension library for GSL (GNU Scientific Library)
|
4
|
-
(C) Copyright 2001-2005 by Yoshiki Tsunesada
|
5
|
-
Cameron McBride
|
6
|
-
|
7
|
-
Ruby/GSL is free software: you can redistribute it and/or modify it
|
8
|
-
under the terms of the GNU General Public License.
|
9
|
-
This library is distributed in the hope that it will be useful, but
|
10
|
-
WITHOUT ANY WARRANTY.
|
11
|
-
*/
|
12
|
-
|
13
|
-
#ifdef BASE_DOUBLE
|
14
|
-
#define NUMCONV(x) NUM2DBL(x)
|
15
|
-
#define NUMCONV2(x) NUM2DBL(x)
|
16
|
-
#define PRINTF_FORMAT "%5.3e "
|
17
|
-
#define VEC_ROW_COL VECTOR_ROW_COL
|
18
|
-
#define VEC_P VECTOR_P
|
19
|
-
#define VEC_ROW_P VECTOR_ROW_P
|
20
|
-
#define VEC_COL_P VECTOR_COL_P
|
21
|
-
#define C_TO_VALUE rb_float_new
|
22
|
-
#define C_TO_VALUE2 rb_float_new
|
23
|
-
#define CHECK_VEC CHECK_VECTOR
|
24
|
-
#define VEC_VIEW_P VECTOR_VIEW_P
|
25
|
-
#elif defined(BASE_INT)
|
26
|
-
#define NUMCONV(x) FIX2INT(x)
|
27
|
-
#define NUMCONV2(x) NUM2INT(x)
|
28
|
-
#define PRINTF_FORMAT "%d "
|
29
|
-
#define VEC_ROW_COL VECTOR_INT_ROW_COL
|
30
|
-
#define VEC_P VECTOR_INT_P
|
31
|
-
#define C_TO_VALUE INT2FIX
|
32
|
-
#define C_TO_VALUE2 INT2NUM
|
33
|
-
#define VEC_ROW_P VECTOR_INT_ROW_P
|
34
|
-
#define VEC_COL_P VECTOR_INT_COL_P
|
35
|
-
#define CHECK_VEC CHECK_VECTOR_INT
|
36
|
-
#define VEC_VIEW_P VECTOR_INT_VIEW_P
|
37
|
-
#endif
|
38
|
-
|
39
|
-
void FUNCTION(get_range,beg_en_n)(VALUE range, BASE *beg, BASE *en, size_t *n, int *step);
|
40
|
-
|
41
|
-
void get_range_beg_en_n_for_size(VALUE range,
|
42
|
-
int *beg, int *en, size_t *n, int *step, size_t size);
|
43
|
-
|
44
|
-
void parse_subvector_args(int argc, VALUE *argv, size_t size,
|
45
|
-
size_t *offset, size_t *stride, size_t *n);
|
46
|
-
|
47
|
-
void FUNCTION(get_range,beg_en_n)(VALUE range, BASE *beg, BASE *en, size_t *n, int *step)
|
48
|
-
{
|
49
|
-
*beg = NUMCONV2(rb_funcall3(range, rb_gsl_id_beg, 0, NULL));
|
50
|
-
*en = NUMCONV2(rb_funcall3(range, rb_gsl_id_end, 0, NULL));
|
51
|
-
*n = (size_t) fabs(*en - *beg);
|
52
|
-
if (!RTEST(rb_funcall3(range, rb_gsl_id_excl, 0, NULL))) *n += 1;
|
53
|
-
if (*en < *beg) *step = -1; else *step = 1;
|
54
|
-
}
|
55
|
-
|
56
|
-
#ifdef BASE_INT
|
57
|
-
void get_range_beg_en_n_for_size(VALUE range, int *beg, int *en, size_t *n, int *step, size_t size)
|
58
|
-
{
|
59
|
-
*beg = NUM2INT(rb_funcall3(range, rb_gsl_id_beg, 0, NULL));
|
60
|
-
if(*beg < 0) *beg += size;
|
61
|
-
*en = NUM2INT(rb_funcall3(range, rb_gsl_id_end, 0, NULL));
|
62
|
-
if(*en < 0) *en += size;
|
63
|
-
*n = (size_t) fabs(*en - *beg);
|
64
|
-
if (!RTEST(rb_funcall3(range, rb_gsl_id_excl, 0, NULL))) *n += 1;
|
65
|
-
if (*en < *beg) *step = -1; else *step = 1;
|
66
|
-
}
|
67
|
-
|
68
|
-
void parse_subvector_args(int argc, VALUE *argv, size_t size,
|
69
|
-
size_t *offset, size_t *stride, size_t *n)
|
70
|
-
{
|
71
|
-
int begin = 0, end, step, length;
|
72
|
-
*stride = 1;
|
73
|
-
switch (argc) {
|
74
|
-
case 0:
|
75
|
-
*n = size;
|
76
|
-
break;
|
77
|
-
case 1:
|
78
|
-
if(rb_obj_is_kind_of(argv[0], rb_cRange)) {
|
79
|
-
get_range_beg_en_n_for_size(argv[0], &begin, &end, n, &step, size);
|
80
|
-
// TODO Should we do bounds checking or risk letting GSL do it?
|
81
|
-
// On one hand, it seems like we should do as little as possible to stay as
|
82
|
-
// thin and fast as possible. On the other hand, it seems like we don't
|
83
|
-
// want to let Ruby crash if GSL does not have bounds checking enabled.
|
84
|
-
if(begin < 0 || (size_t)begin >= size) {
|
85
|
-
rb_raise(rb_eRangeError,
|
86
|
-
"begin value %d is out of range for Vector of length %d",
|
87
|
-
begin, (int) size);
|
88
|
-
}
|
89
|
-
if(end < 0 || (size_t)end >= size) {
|
90
|
-
rb_raise(rb_eRangeError,
|
91
|
-
"end value %d is out of range for Vector of length %d",
|
92
|
-
end, (int) size);
|
93
|
-
}
|
94
|
-
*stride = (size_t)step;
|
95
|
-
} else {
|
96
|
-
CHECK_FIXNUM(argv[0]);
|
97
|
-
length = FIX2INT(argv[0]);
|
98
|
-
if((length < 0 && -length > (int) size) || (length > 0 && length > (int) size)) {
|
99
|
-
rb_raise(rb_eRangeError,
|
100
|
-
"length %d is out of range for Vector of length %d",
|
101
|
-
length, (int) size);
|
102
|
-
} else if(length < 0) {
|
103
|
-
begin = length;
|
104
|
-
*n = (size_t)(-length);
|
105
|
-
} else {
|
106
|
-
// begin was initialized to 0
|
107
|
-
*n = (size_t)length;
|
108
|
-
}
|
109
|
-
}
|
110
|
-
break;
|
111
|
-
case 2:
|
112
|
-
if(rb_obj_is_kind_of(argv[0], rb_cRange)) {
|
113
|
-
get_range_beg_en_n_for_size(argv[0], &begin, &end, n, &step, size);
|
114
|
-
if(begin < 0 || (size_t)begin >= size) {
|
115
|
-
rb_raise(rb_eRangeError,
|
116
|
-
"begin value %d is out of range for Vector of length %d",
|
117
|
-
(int) begin, (int) size);
|
118
|
-
}
|
119
|
-
if(end < 0 || (size_t)end >= size) {
|
120
|
-
rb_raise(rb_eRangeError,
|
121
|
-
"end value %d is out of range for Vector of length %d",
|
122
|
-
(int) end, (int) size);
|
123
|
-
}
|
124
|
-
CHECK_FIXNUM(argv[1]);
|
125
|
-
step = FIX2INT(argv[1]);
|
126
|
-
if(step == 0 && begin != end) {
|
127
|
-
rb_raise(rb_eArgError, "stride must be non-zero");
|
128
|
-
} else if((step < 0 && begin <= end) || (step > 0 && end < begin)) {
|
129
|
-
step = -step;
|
130
|
-
}
|
131
|
-
if(step < 0) {
|
132
|
-
*n = (*n-1)/(-step) + 1;
|
133
|
-
} else if(step > 0) {
|
134
|
-
*n = (*n-1)/step + 1;
|
135
|
-
}
|
136
|
-
*stride = (size_t)step;
|
137
|
-
} else {
|
138
|
-
CHECK_FIXNUM(argv[0]); CHECK_FIXNUM(argv[1]);
|
139
|
-
begin = FIX2INT(argv[0]);
|
140
|
-
length = FIX2INT(argv[1]);
|
141
|
-
if(length < 0) {
|
142
|
-
length = -length;
|
143
|
-
*stride = -1;
|
144
|
-
}
|
145
|
-
*n = (size_t)length;
|
146
|
-
}
|
147
|
-
break;
|
148
|
-
case 3:
|
149
|
-
CHECK_FIXNUM(argv[0]); CHECK_FIXNUM(argv[1]); CHECK_FIXNUM(argv[2]);
|
150
|
-
begin = FIX2INT(argv[0]);
|
151
|
-
step = FIX2INT(argv[1]);
|
152
|
-
length = FIX2INT(argv[2]);
|
153
|
-
if(length < 0) {
|
154
|
-
step = -step;
|
155
|
-
length = -length;
|
156
|
-
}
|
157
|
-
*stride = (size_t)step;
|
158
|
-
*n = (size_t)length;
|
159
|
-
break;
|
160
|
-
default:
|
161
|
-
rb_raise(rb_eArgError, "wrong number of arguments (%d for 0-3)", argc);
|
162
|
-
break;
|
163
|
-
}
|
164
|
-
if(begin < 0) {
|
165
|
-
begin += size;
|
166
|
-
}
|
167
|
-
*offset = (size_t)begin;
|
168
|
-
}
|
169
|
-
|
170
|
-
#endif
|
171
|
-
|
172
|
-
void FUNCTION(set_ptr_data,by_range)(BASE *ptr, size_t n, VALUE range)
|
173
|
-
{
|
174
|
-
size_t n2, i;
|
175
|
-
BASE beg, en, val;
|
176
|
-
int step;
|
177
|
-
FUNCTION(get_range,beg_en_n)(range, &beg, &en, &n2, &step);
|
178
|
-
val = beg;
|
179
|
-
for (i = 0; i < n; i++) {
|
180
|
-
if (i < n2) ptr[i] = val;
|
181
|
-
else ptr[i] = (BASE) 0;
|
182
|
-
val += step;
|
183
|
-
}
|
184
|
-
}
|
185
|
-
|
186
|
-
void FUNCTION(cvector,set_from_rarray)(GSL_TYPE(gsl_vector) *v, VALUE ary)
|
187
|
-
{
|
188
|
-
size_t i;
|
189
|
-
if (CLASS_OF(ary) == rb_cRange) ary = rb_gsl_range2ary(ary);
|
190
|
-
Check_Type(ary, T_ARRAY);
|
191
|
-
if (RARRAY_LEN(ary) == 0) return;
|
192
|
-
for (i = 0; i < v->size; i++) FUNCTION(gsl_vector,set)(v, i, NUMCONV(rb_ary_entry(ary, i)));
|
193
|
-
}
|
194
|
-
|
195
|
-
GSL_TYPE(gsl_vector)* FUNCTION(make_cvector,from_rarray)(VALUE ary)
|
196
|
-
{
|
197
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
198
|
-
if (CLASS_OF(ary) == rb_cRange) ary = rb_gsl_range2ary(ary);
|
199
|
-
Check_Type(ary, T_ARRAY);
|
200
|
-
v = FUNCTION(gsl_vector,alloc)(RARRAY_LEN(ary));
|
201
|
-
if (v == NULL) rb_raise(rb_eNoMemError, "gsl_vector_alloc failed");
|
202
|
-
FUNCTION(cvector,set_from_rarray)(v, ary);
|
203
|
-
return v;
|
204
|
-
}
|
205
|
-
|
206
|
-
VALUE FUNCTION(rb_gsl_vector,new)(int argc, VALUE *argv, VALUE klass)
|
207
|
-
{
|
208
|
-
GSL_TYPE(gsl_vector) *v = NULL, *vtmp = NULL;
|
209
|
-
BASE xnative;
|
210
|
-
size_t n, i;
|
211
|
-
BASE beg, en;
|
212
|
-
int step;
|
213
|
-
switch (argc) {
|
214
|
-
case 1:
|
215
|
-
#ifdef HAVE_NARRAY_H
|
216
|
-
if (NA_IsNArray(argv[0])) {
|
217
|
-
VALUE ary2;
|
218
|
-
n = NA_TOTAL(argv[0]);
|
219
|
-
v = FUNCTION(gsl_vector,alloc)(n);
|
220
|
-
if (v == NULL) rb_raise(rb_eNoMemError, "gsl_vector_alloc failed");
|
221
|
-
#ifdef BASE_DOUBLE
|
222
|
-
ary2 = na_change_type(argv[0], NA_DFLOAT);
|
223
|
-
#else
|
224
|
-
ary2 = na_change_type(argv[0], NA_LINT);
|
225
|
-
#endif
|
226
|
-
memcpy(v->data, NA_PTR_TYPE(ary2,BASE*), n*sizeof(BASE));
|
227
|
-
return Data_Wrap_Struct(klass, 0, FUNCTION(gsl_vector,free), v);
|
228
|
-
}
|
229
|
-
#endif
|
230
|
-
switch (TYPE(argv[0])) {
|
231
|
-
case T_FIXNUM:
|
232
|
-
/*! if an integer n is given, create an empty vector of length n */
|
233
|
-
CHECK_FIXNUM(argv[0]);
|
234
|
-
n = FIX2INT(argv[0]);
|
235
|
-
v = FUNCTION(gsl_vector,calloc)(n);
|
236
|
-
if (v == NULL) rb_raise(rb_eNoMemError, "gsl_vector_alloc failed");
|
237
|
-
break;
|
238
|
-
case T_BIGNUM:
|
239
|
-
rb_raise(rb_eRangeError, "vector length is limited within the range of Fixnum.");
|
240
|
-
break;
|
241
|
-
case T_FLOAT:
|
242
|
-
v = FUNCTION(gsl_vector,alloc)(1);
|
243
|
-
switch(TYPE(argv[0])) {
|
244
|
-
case T_FIXNUM: case T_BIGNUM: case T_FLOAT:
|
245
|
-
xnative = NUMCONV2(argv[0]);
|
246
|
-
break;
|
247
|
-
default:
|
248
|
-
xnative = (BASE)0;
|
249
|
-
}
|
250
|
-
FUNCTION(gsl_vector,set)(v, 0, xnative);
|
251
|
-
break;
|
252
|
-
#ifdef BASE_DOUBLE
|
253
|
-
case T_ARRAY:
|
254
|
-
v = make_cvector_from_rarrays(argv[0]);
|
255
|
-
break;
|
256
|
-
#endif
|
257
|
-
default:
|
258
|
-
if (CLASS_OF(argv[0]) == rb_cRange) {
|
259
|
-
FUNCTION(get_range,beg_en_n)(argv[0], &beg, &en, &n, &step);
|
260
|
-
v = FUNCTION(gsl_vector,alloc)(n);
|
261
|
-
FUNCTION(set_ptr_data,by_range)(v->data, v->size, argv[0]);
|
262
|
-
return Data_Wrap_Struct(klass, 0, FUNCTION(gsl_vector,free), v);
|
263
|
-
} else if (VEC_P(argv[0])) {
|
264
|
-
/*! Create a new vector with the same elements of the vector given */
|
265
|
-
Data_Get_Struct(argv[0], GSL_TYPE(gsl_vector), vtmp);
|
266
|
-
v = FUNCTION(gsl_vector,alloc)(vtmp->size);
|
267
|
-
for (i = 0; i < vtmp->size; i++)
|
268
|
-
FUNCTION(gsl_vector,set)(v, i, FUNCTION(gsl_vector,get)(vtmp, i));
|
269
|
-
return Data_Wrap_Struct(VEC_ROW_COL(argv[0]), 0, FUNCTION(gsl_vector,free), v);
|
270
|
-
} else {
|
271
|
-
rb_raise(rb_eTypeError,
|
272
|
-
"wrong argument type %s", rb_class2name(CLASS_OF(argv[0])));
|
273
|
-
}
|
274
|
-
break;
|
275
|
-
}
|
276
|
-
break;
|
277
|
-
default:
|
278
|
-
v = FUNCTION(gsl_vector,alloc)(argc);
|
279
|
-
if (v == NULL) rb_raise(rb_eNoMemError, "gsl_vector_alloc failed");
|
280
|
-
for (i = 0; (int) i < argc; i++) {
|
281
|
-
switch(TYPE(argv[i])) {
|
282
|
-
case T_FIXNUM: case T_BIGNUM: case T_FLOAT:
|
283
|
-
xnative = NUMCONV2(argv[i]);
|
284
|
-
break;
|
285
|
-
default:
|
286
|
-
xnative = (BASE)0;
|
287
|
-
}
|
288
|
-
FUNCTION(gsl_vector,set)(v, i, xnative);
|
289
|
-
}
|
290
|
-
break;
|
291
|
-
}
|
292
|
-
return Data_Wrap_Struct(klass, 0, FUNCTION(gsl_vector,free), v);
|
293
|
-
}
|
294
|
-
|
295
|
-
static VALUE FUNCTION(rb_gsl_vector,calloc)(VALUE klass, VALUE nn)
|
296
|
-
{
|
297
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
298
|
-
CHECK_FIXNUM(nn);
|
299
|
-
v = FUNCTION(gsl_vector,calloc)(FIX2INT(nn));
|
300
|
-
if (v == NULL) rb_raise(rb_eNoMemError, "gsl_vector_calloc failed");
|
301
|
-
return Data_Wrap_Struct(klass, 0, FUNCTION(gsl_vector,free), v);
|
302
|
-
}
|
303
|
-
|
304
|
-
static VALUE FUNCTION(rb_gsl_vector,subvector)(int argc, VALUE *argv, VALUE obj);
|
305
|
-
static VALUE FUNCTION(rb_gsl_vector,get)(int argc, VALUE *argv, VALUE obj)
|
306
|
-
{
|
307
|
-
VALUE retval = Qnil;
|
308
|
-
GSL_TYPE(gsl_vector) *v = NULL, *vnew = NULL;
|
309
|
-
// QUALIFIED_VIEW(gsl_vector,view) *vv;
|
310
|
-
gsl_index *p;
|
311
|
-
int i; /*! not size_t, since a negative index is allowed */
|
312
|
-
size_t j, k;
|
313
|
-
// If argc is not 1 or argv[0] is a Range
|
314
|
-
if( argc != 1 || rb_obj_is_kind_of(argv[0], rb_cRange)) {
|
315
|
-
// Treat as call to subvector
|
316
|
-
retval = FUNCTION(rb_gsl_vector,subvector)(argc, argv, obj);
|
317
|
-
} else {
|
318
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
319
|
-
|
320
|
-
switch (TYPE(argv[0])) {
|
321
|
-
case T_FIXNUM:
|
322
|
-
i = FIX2INT(argv[0]);
|
323
|
-
if (i < 0)
|
324
|
-
retval = C_TO_VALUE2(FUNCTION(gsl_vector,get)(v, (size_t) (v->size + i)));
|
325
|
-
else
|
326
|
-
retval = C_TO_VALUE2(FUNCTION(gsl_vector,get)(v, (size_t) (i)));
|
327
|
-
break;
|
328
|
-
case T_ARRAY:
|
329
|
-
vnew = FUNCTION(gsl_vector,alloc)(RARRAY_LEN(argv[0]));
|
330
|
-
for (j = 0; j < vnew->size; j++) {
|
331
|
-
i = NUMCONV(rb_ary_entry(argv[0], j));
|
332
|
-
if (i < 0) k = v->size + i;
|
333
|
-
// else k = j;
|
334
|
-
else k = i;
|
335
|
-
FUNCTION(gsl_vector,set)(vnew, j, FUNCTION(gsl_vector,get)(v, k));
|
336
|
-
}
|
337
|
-
retval = Data_Wrap_Struct(GSL_TYPE(cgsl_vector), 0, FUNCTION(gsl_vector,free), vnew);
|
338
|
-
break;
|
339
|
-
default:
|
340
|
-
if (PERMUTATION_P(argv[0])) {
|
341
|
-
Data_Get_Struct(argv[0], gsl_index, p);
|
342
|
-
vnew = FUNCTION(gsl_vector,alloc)(p->size);
|
343
|
-
for (j = 0; j < p->size; j++) {
|
344
|
-
k = p->data[j];
|
345
|
-
//if (k < 0) k = p->size + j;
|
346
|
-
FUNCTION(gsl_vector,set)(vnew, j, FUNCTION(gsl_vector,get)(v, k));
|
347
|
-
}
|
348
|
-
retval = Data_Wrap_Struct(GSL_TYPE(cgsl_vector), 0, FUNCTION(gsl_vector,free), vnew);
|
349
|
-
} else {
|
350
|
-
// TODO Support Vector::Int (and even Vector?)
|
351
|
-
rb_raise(rb_eTypeError, "wrong argument type %s (Array, Range, GSL::Permutation, or Fixnum expected)", rb_class2name(CLASS_OF(argv[0])));
|
352
|
-
}
|
353
|
-
break;
|
354
|
-
}
|
355
|
-
}
|
356
|
-
return retval;
|
357
|
-
}
|
358
|
-
|
359
|
-
static VALUE FUNCTION(rb_gsl_vector,size)(VALUE obj)
|
360
|
-
{
|
361
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
362
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
363
|
-
return INT2FIX(v->size);
|
364
|
-
}
|
365
|
-
|
366
|
-
static VALUE FUNCTION(rb_gsl_vector,stride)(VALUE obj)
|
367
|
-
{
|
368
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
369
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
370
|
-
return INT2FIX(v->stride);
|
371
|
-
}
|
372
|
-
|
373
|
-
static VALUE FUNCTION(rb_gsl_vector,set_stride)(VALUE obj, VALUE ss)
|
374
|
-
{
|
375
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
376
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
377
|
-
v->stride = (size_t) FIX2INT(ss);
|
378
|
-
return obj;
|
379
|
-
}
|
380
|
-
|
381
|
-
static VALUE FUNCTION(rb_gsl_vector,owner)(VALUE obj)
|
382
|
-
{
|
383
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
384
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
385
|
-
return INT2FIX(v->owner);
|
386
|
-
}
|
387
|
-
|
388
|
-
void FUNCTION(rb_gsl_vector,set_subvector)(int argc, VALUE *argv, GSL_TYPE(gsl_vector) *v, VALUE other)
|
389
|
-
{
|
390
|
-
GSL_TYPE(gsl_vector) *vother;
|
391
|
-
QUALIFIED_VIEW(gsl_vector,view) vv;
|
392
|
-
int step;
|
393
|
-
size_t i, offset, stride, n, nother;
|
394
|
-
BASE beg, end;
|
395
|
-
|
396
|
-
// assignment to v.subvector(...)
|
397
|
-
parse_subvector_args(argc, argv, v->size, &offset, &stride, &n);
|
398
|
-
vv = FUNCTION(gsl_vector,subvector_with_stride)(v, offset, stride, n);
|
399
|
-
if(rb_obj_is_kind_of(other, GSL_TYPE(cgsl_vector))) {
|
400
|
-
Data_Get_Struct(other, GSL_TYPE(gsl_vector), vother);
|
401
|
-
if(n != vother->size) {
|
402
|
-
rb_raise(rb_eRangeError, "lengths do not match (%d != %d)",(int) n, (int) vother->size);
|
403
|
-
}
|
404
|
-
// TODO Change to gsl_vector_memmove if/when GSL has such a function
|
405
|
-
// because gsl_vector_memcpy does not handle overlapping regions (e.g.
|
406
|
-
// Views) well.
|
407
|
-
FUNCTION(gsl_vector,memcpy)(&vv.vector, vother);
|
408
|
-
} else if(rb_obj_is_kind_of(other, rb_cArray)) {
|
409
|
-
if((int) n != RARRAY_LEN(other)) {
|
410
|
-
rb_raise(rb_eRangeError, "lengths do not match (%d != %d)", (int) n, (int) RARRAY_LEN(other));
|
411
|
-
}
|
412
|
-
for(i = 0; i < n; i++) {
|
413
|
-
FUNCTION(gsl_vector,set)(&vv.vector, i, NUMCONV2(rb_ary_entry(other, i)));
|
414
|
-
}
|
415
|
-
} else if(rb_obj_is_kind_of(other, rb_cRange)) {
|
416
|
-
FUNCTION(get_range,beg_en_n)(other, &beg, &end, ¬her, &step);
|
417
|
-
if(n != nother) {
|
418
|
-
rb_raise(rb_eRangeError, "lengths do not match (%d != %d)", (int) n, (int) nother);
|
419
|
-
}
|
420
|
-
for(i = 0; i < n; i++) {
|
421
|
-
FUNCTION(gsl_vector,set)(&vv.vector, i, beg);
|
422
|
-
beg += step;
|
423
|
-
}
|
424
|
-
} else {
|
425
|
-
FUNCTION(gsl_vector,set_all)(&vv.vector, NUMCONV2(other));
|
426
|
-
}
|
427
|
-
}
|
428
|
-
|
429
|
-
static VALUE FUNCTION(rb_gsl_vector,set)(int argc, VALUE *argv, VALUE obj)
|
430
|
-
{
|
431
|
-
GSL_TYPE(gsl_vector) *v;
|
432
|
-
VALUE other;
|
433
|
-
int ii;
|
434
|
-
|
435
|
-
if(argc < 1 || argc > 4) {
|
436
|
-
rb_raise(rb_eArgError, "wrong number of arguments (%d for 1-4)", argc);
|
437
|
-
}
|
438
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
439
|
-
other = argv[argc-1];
|
440
|
-
|
441
|
-
if(argc == 1) {
|
442
|
-
// // If assigning from another vector
|
443
|
-
if(VECTOR_P(other) || VECTOR_INT_P(other)) {
|
444
|
-
// treat as assignment to v.subvector(...)
|
445
|
-
FUNCTION(rb_gsl_vector,set_subvector)(argc-1, argv, v, other);
|
446
|
-
} else {
|
447
|
-
FUNCTION(gsl_vector,set_all)(v, NUMCONV2(other));
|
448
|
-
}
|
449
|
-
} else if(argc == 2 && TYPE(argv[0]) == T_FIXNUM) {
|
450
|
-
// v[i] = x
|
451
|
-
ii = FIX2INT(argv[0]);
|
452
|
-
if(ii < 0) ii += v->size;
|
453
|
-
FUNCTION(gsl_vector,set)(v, (size_t)ii, NUMCONV2(other));
|
454
|
-
} else {
|
455
|
-
// assignment to v.subvector(...)
|
456
|
-
FUNCTION(rb_gsl_vector,set_subvector)(argc-1, argv, v, other);
|
457
|
-
}
|
458
|
-
return obj;
|
459
|
-
}
|
460
|
-
|
461
|
-
static VALUE FUNCTION(rb_gsl_vector,set_all)(VALUE obj, VALUE xx)
|
462
|
-
{
|
463
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
464
|
-
BASE xnative = NUMCONV2(xx);
|
465
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
466
|
-
FUNCTION(gsl_vector,set_all)(v, xnative);
|
467
|
-
return obj;
|
468
|
-
}
|
469
|
-
|
470
|
-
VALUE FUNCTION(rb_gsl_vector,do_something)(VALUE obj, void (*func)(GSL_TYPE (gsl_vector)*))
|
471
|
-
{
|
472
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
473
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
474
|
-
(*func)(v);
|
475
|
-
return obj;
|
476
|
-
}
|
477
|
-
|
478
|
-
static VALUE FUNCTION(rb_gsl_vector,set_zero)(VALUE obj)
|
479
|
-
{
|
480
|
-
return FUNCTION(rb_gsl_vector,do_something)(obj, FUNCTION(gsl_vector,set_zero));
|
481
|
-
}
|
482
|
-
|
483
|
-
static VALUE FUNCTION(rb_gsl_vector,set_basis)(VALUE obj, VALUE ii)
|
484
|
-
{
|
485
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
486
|
-
CHECK_FIXNUM(ii);
|
487
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
488
|
-
FUNCTION(gsl_vector,set_basis)(v, (size_t) FIX2INT(ii));
|
489
|
-
return obj;
|
490
|
-
}
|
491
|
-
|
492
|
-
static VALUE FUNCTION(rb_gsl_vector,each)(VALUE obj)
|
493
|
-
{
|
494
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
495
|
-
size_t i;
|
496
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
497
|
-
for (i = 0; i < v->size; i++) rb_yield(C_TO_VALUE2(FUNCTION(gsl_vector,get)(v, i)));
|
498
|
-
return Qnil;
|
499
|
-
}
|
500
|
-
|
501
|
-
static VALUE FUNCTION(rb_gsl_vector,reverse_each)(VALUE obj)
|
502
|
-
{
|
503
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
504
|
-
size_t i;
|
505
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
506
|
-
for (i = v->size-1;; i--) {
|
507
|
-
rb_yield(C_TO_VALUE2(FUNCTION(gsl_vector,get)(v, i)));
|
508
|
-
if (i == 0) break;
|
509
|
-
}
|
510
|
-
return Qnil;
|
511
|
-
}
|
512
|
-
|
513
|
-
static VALUE FUNCTION(rb_gsl_vector,each_index)(VALUE obj)
|
514
|
-
{
|
515
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
516
|
-
size_t i;
|
517
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
518
|
-
for (i = 0; i < v->size; i++) rb_yield(INT2FIX(i));
|
519
|
-
return Qnil;
|
520
|
-
}
|
521
|
-
|
522
|
-
static VALUE FUNCTION(rb_gsl_vector,reverse_each_index)(VALUE obj)
|
523
|
-
{
|
524
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
525
|
-
size_t i;
|
526
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
527
|
-
for (i = v->size-1;; i--) {
|
528
|
-
rb_yield(INT2FIX(i));
|
529
|
-
if (i == 0) break;
|
530
|
-
}
|
531
|
-
return Qnil;
|
532
|
-
}
|
533
|
-
|
534
|
-
static VALUE FUNCTION(rb_gsl_vector,to_a)(VALUE obj)
|
535
|
-
{
|
536
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
537
|
-
size_t i;
|
538
|
-
VALUE ary;
|
539
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
540
|
-
ary = rb_ary_new2(v->size);
|
541
|
-
for (i = 0; i < v->size; i++)
|
542
|
-
rb_ary_store(ary, i, C_TO_VALUE2(FUNCTION(gsl_vector,get)(v, i)));
|
543
|
-
return ary;
|
544
|
-
}
|
545
|
-
|
546
|
-
static VALUE FUNCTION(rb_gsl_vector,reverse_bang)(VALUE obj)
|
547
|
-
{
|
548
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
549
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
550
|
-
FUNCTION(gsl_vector,reverse)(v);
|
551
|
-
return obj;
|
552
|
-
}
|
553
|
-
|
554
|
-
static VALUE FUNCTION(rb_gsl_vector,reverse)(VALUE obj)
|
555
|
-
{
|
556
|
-
GSL_TYPE(gsl_vector) *v = NULL, *vnew = NULL;
|
557
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
558
|
-
vnew = FUNCTION(gsl_vector,alloc)(v->size);
|
559
|
-
if (vnew == NULL) rb_raise(rb_eNoMemError, "gsl_vector_int_alloc failed");
|
560
|
-
FUNCTION(gsl_vector,memcpy)(vnew, v);
|
561
|
-
FUNCTION(gsl_vector,reverse)(vnew);
|
562
|
-
return Data_Wrap_Struct(GSL_TYPE(cgsl_vector), 0, FUNCTION(gsl_vector,free), vnew);
|
563
|
-
}
|
564
|
-
|
565
|
-
static VALUE FUNCTION(rb_gsl_vector,max)(VALUE obj)
|
566
|
-
{
|
567
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
568
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
569
|
-
return C_TO_VALUE2(FUNCTION(gsl_vector,max)(v));
|
570
|
-
}
|
571
|
-
|
572
|
-
static VALUE FUNCTION(rb_gsl_vector,min)(VALUE obj)
|
573
|
-
{
|
574
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
575
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
576
|
-
return C_TO_VALUE2(FUNCTION(gsl_vector,min)(v));
|
577
|
-
}
|
578
|
-
|
579
|
-
static VALUE FUNCTION(rb_gsl_vector,minmax)(VALUE obj)
|
580
|
-
{
|
581
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
582
|
-
BASE min, max;
|
583
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
584
|
-
FUNCTION(gsl_vector,minmax)(v, &min, &max);
|
585
|
-
return rb_ary_new3(2, C_TO_VALUE2(min), C_TO_VALUE2(max));
|
586
|
-
}
|
587
|
-
|
588
|
-
static VALUE FUNCTION(rb_gsl_vector,maxmin)(VALUE obj)
|
589
|
-
{
|
590
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
591
|
-
BASE min, max;
|
592
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
593
|
-
FUNCTION(gsl_vector,minmax)(v, &min, &max);
|
594
|
-
return rb_ary_new3(2, C_TO_VALUE2(max), C_TO_VALUE2(min));
|
595
|
-
}
|
596
|
-
|
597
|
-
static VALUE FUNCTION(rb_gsl_vector,max_index)(VALUE obj)
|
598
|
-
{
|
599
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
600
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
601
|
-
return INT2FIX(FUNCTION(gsl_vector,max_index)(v));
|
602
|
-
}
|
603
|
-
|
604
|
-
static VALUE FUNCTION(rb_gsl_vector,min_index)(VALUE obj)
|
605
|
-
{
|
606
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
607
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
608
|
-
return INT2FIX(FUNCTION(gsl_vector,min_index)(v));
|
609
|
-
}
|
610
|
-
|
611
|
-
static VALUE FUNCTION(rb_gsl_vector,minmax_index)(VALUE obj)
|
612
|
-
{
|
613
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
614
|
-
size_t imin, imax;
|
615
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
616
|
-
FUNCTION(gsl_vector,minmax_index)(v, &imin, &imax);
|
617
|
-
return rb_ary_new3(2, INT2FIX(imin), INT2FIX(imax));
|
618
|
-
}
|
619
|
-
|
620
|
-
static VALUE FUNCTION(rb_gsl_vector,maxmin_index)(VALUE obj)
|
621
|
-
{
|
622
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
623
|
-
size_t imin, imax;
|
624
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
625
|
-
FUNCTION(gsl_vector,minmax_index)(v, &imin, &imax);
|
626
|
-
return rb_ary_new3(2, INT2FIX(imax), INT2FIX(imin));
|
627
|
-
}
|
628
|
-
|
629
|
-
static VALUE FUNCTION(rb_gsl_vector,isnull)(VALUE obj)
|
630
|
-
{
|
631
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
632
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
633
|
-
return INT2FIX(FUNCTION(gsl_vector,isnull)(v));
|
634
|
-
}
|
635
|
-
|
636
|
-
static VALUE FUNCTION(rb_gsl_vector,isnull2)(VALUE obj)
|
637
|
-
{
|
638
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
639
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
640
|
-
if (FUNCTION(gsl_vector,isnull)(v)) return Qtrue;
|
641
|
-
else return Qfalse;
|
642
|
-
}
|
643
|
-
|
644
|
-
static VALUE FUNCTION(rb_gsl_vector,trans)(VALUE obj)
|
645
|
-
{
|
646
|
-
GSL_TYPE(gsl_vector) *v = NULL, *vnew = NULL;
|
647
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
648
|
-
vnew = FUNCTION(make_vector,clone)(v);
|
649
|
-
#ifdef BASE_DOUBLE
|
650
|
-
if (VECTOR_COL_P(obj))
|
651
|
-
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
|
652
|
-
else return Data_Wrap_Struct(cgsl_vector_col, 0, gsl_vector_free, vnew);
|
653
|
-
#elif defined(BASE_INT)
|
654
|
-
if (VECTOR_INT_ROW_P(obj))
|
655
|
-
return Data_Wrap_Struct(cgsl_vector_int_col, 0, gsl_vector_int_free, vnew);
|
656
|
-
else if (VECTOR_INT_COL_P(obj))
|
657
|
-
return Data_Wrap_Struct(cgsl_vector_int, 0, gsl_vector_int_free, vnew);
|
658
|
-
else rb_raise(rb_eTypeError,
|
659
|
-
"wrong type %s (Vector::Int or Vector::Int::Col expected)",
|
660
|
-
rb_class2name(CLASS_OF(obj)));
|
661
|
-
#endif
|
662
|
-
return Qnil;
|
663
|
-
}
|
664
|
-
|
665
|
-
static VALUE FUNCTION(rb_gsl_vector,trans_bang)(VALUE obj)
|
666
|
-
{
|
667
|
-
#ifdef BASE_DOUBLE
|
668
|
-
if (CLASS_OF(obj) == cgsl_vector) RBGSL_SET_CLASS(obj, cgsl_vector_col);
|
669
|
-
else if (CLASS_OF(obj) == cgsl_vector_col) RBGSL_SET_CLASS(obj, cgsl_vector);
|
670
|
-
else {
|
671
|
-
rb_raise(rb_eRuntimeError, "method trans! for %s is not permitted.",
|
672
|
-
rb_class2name(CLASS_OF(obj)));
|
673
|
-
}
|
674
|
-
#elif defined(BASE_INT)
|
675
|
-
if (CLASS_OF(obj) == cgsl_vector_int) RBGSL_SET_CLASS(obj, cgsl_vector_int_col);
|
676
|
-
else if (CLASS_OF(obj) == cgsl_vector_int_col) RBGSL_SET_CLASS(obj, cgsl_vector_int);
|
677
|
-
else {
|
678
|
-
rb_raise(rb_eRuntimeError, "method trans! for %s is not permitted.",
|
679
|
-
rb_class2name(CLASS_OF(obj)));
|
680
|
-
}
|
681
|
-
#endif
|
682
|
-
return obj;
|
683
|
-
}
|
684
|
-
|
685
|
-
static VALUE FUNCTION(rb_gsl_vector,uplus)(VALUE obj)
|
686
|
-
{
|
687
|
-
return obj;
|
688
|
-
}
|
689
|
-
|
690
|
-
EXTERN VALUE cgsl_poly;
|
691
|
-
|
692
|
-
VALUE FUNCTION(rb_gsl_vector,uminus)(VALUE obj)
|
693
|
-
{
|
694
|
-
GSL_TYPE(gsl_vector) *v = NULL, *vnew = NULL;
|
695
|
-
size_t i;
|
696
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
697
|
-
vnew = FUNCTION(gsl_vector,alloc)(v->size);
|
698
|
-
for (i = 0; i < v->size; i++) {
|
699
|
-
FUNCTION(gsl_vector,set)(vnew, i, -FUNCTION(gsl_vector,get)(v, i));
|
700
|
-
}
|
701
|
-
if (CLASS_OF(obj) == GSL_TYPE(cgsl_poly))
|
702
|
-
return Data_Wrap_Struct(GSL_TYPE(cgsl_poly), 0, FUNCTION(gsl_vector,free), vnew);
|
703
|
-
else
|
704
|
-
return Data_Wrap_Struct(VEC_ROW_COL(obj), 0, FUNCTION(gsl_vector,free), vnew);
|
705
|
-
}
|
706
|
-
|
707
|
-
static VALUE FUNCTION(rb_gsl_vector,sum)(VALUE obj)
|
708
|
-
{
|
709
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
710
|
-
BASE sum = 0;
|
711
|
-
size_t i;
|
712
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
713
|
-
for (i = 0; i < v->size; i++) sum += FUNCTION(gsl_vector,get)(v, i);
|
714
|
-
return C_TO_VALUE2(sum);
|
715
|
-
}
|
716
|
-
|
717
|
-
/* Vector#sumsq is defined in blas1.c */
|
718
|
-
#ifdef BASE_INT
|
719
|
-
static VALUE FUNCTION(rb_gsl_vector,sumsq)(VALUE obj)
|
720
|
-
{
|
721
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
722
|
-
BASE sum = 0, x;
|
723
|
-
size_t i;
|
724
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
725
|
-
for (i = 0; i < v->size; i++) {
|
726
|
-
x = FUNCTION(gsl_vector,get)(v, i);
|
727
|
-
sum += x*x;
|
728
|
-
}
|
729
|
-
return C_TO_VALUE2(sum);
|
730
|
-
}
|
731
|
-
#endif
|
732
|
-
|
733
|
-
static VALUE FUNCTION(rb_gsl_vector,prod)(VALUE obj)
|
734
|
-
{
|
735
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
736
|
-
BASE x = 1;
|
737
|
-
size_t i;
|
738
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
739
|
-
for (i = 0; i < v->size; i++) x *= FUNCTION(gsl_vector,get)(v, i);
|
740
|
-
return C_TO_VALUE(x);
|
741
|
-
}
|
742
|
-
|
743
|
-
static VALUE FUNCTION(rb_gsl_vector,connect)(int argc, VALUE *argv, VALUE obj)
|
744
|
-
{
|
745
|
-
GSL_TYPE(gsl_vector) *v = NULL, *vnew = NULL;
|
746
|
-
BASE *ptr = NULL;
|
747
|
-
size_t i, total = 0;
|
748
|
-
if (VEC_P(obj)) {
|
749
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
750
|
-
total += v->size;
|
751
|
-
}
|
752
|
-
for (i = 0; (int) i < argc; i++) {
|
753
|
-
CHECK_VEC(argv[i]);
|
754
|
-
Data_Get_Struct(argv[i], GSL_TYPE(gsl_vector), v);
|
755
|
-
total += v->size;
|
756
|
-
}
|
757
|
-
vnew = FUNCTION(gsl_vector,alloc)(total);
|
758
|
-
ptr = vnew->data;
|
759
|
-
if (VEC_P(obj)) {
|
760
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
761
|
-
memcpy(ptr, v->data, sizeof(BASE)*v->size);
|
762
|
-
ptr += v->size;
|
763
|
-
}
|
764
|
-
for (i = 0; (int) i < argc; i++) {
|
765
|
-
Data_Get_Struct(argv[i], GSL_TYPE(gsl_vector), v);
|
766
|
-
memcpy(ptr, v->data, sizeof(BASE)*v->size);
|
767
|
-
ptr += v->size;
|
768
|
-
}
|
769
|
-
return Data_Wrap_Struct(GSL_TYPE(cgsl_vector), 0, FUNCTION(gsl_vector,free), vnew);
|
770
|
-
}
|
771
|
-
|
772
|
-
GSL_TYPE(gsl_vector)* FUNCTION(mygsl_vector,up)(GSL_TYPE(gsl_vector) *p)
|
773
|
-
{
|
774
|
-
GSL_TYPE(gsl_vector) *pnew;
|
775
|
-
pnew = FUNCTION(gsl_vector,alloc)(p->size + 1);
|
776
|
-
FUNCTION(gsl_vector,set)(pnew, 0, 0);
|
777
|
-
memcpy(pnew->data+1, p->data, sizeof(BASE)*p->size);
|
778
|
-
return pnew;
|
779
|
-
}
|
780
|
-
|
781
|
-
void FUNCTION(mygsl_vector,up2)(GSL_TYPE(gsl_vector) *pnew, GSL_TYPE(gsl_vector) *p)
|
782
|
-
{
|
783
|
-
FUNCTION(gsl_vector,set_all)(pnew, 0);
|
784
|
-
memcpy(pnew->data+1, p->data, sizeof(BASE)*p->size);
|
785
|
-
}
|
786
|
-
|
787
|
-
GSL_TYPE(gsl_vector)* FUNCTION(mygsl_vector,down)(GSL_TYPE(gsl_vector) *p)
|
788
|
-
{
|
789
|
-
GSL_TYPE(gsl_vector) *pnew;
|
790
|
-
if (p->size <= 1) {
|
791
|
-
rb_raise(rb_eRangeError, "Length <= 1, cannot be shortened.");
|
792
|
-
}
|
793
|
-
pnew = FUNCTION(gsl_vector,alloc)(p->size - 1);
|
794
|
-
memcpy(pnew->data, p->data + 1, sizeof(BASE)*(p->size-1));
|
795
|
-
return pnew;
|
796
|
-
}
|
797
|
-
|
798
|
-
static VALUE FUNCTION(rb_gsl_vector,sgn)(VALUE obj)
|
799
|
-
{
|
800
|
-
GSL_TYPE(gsl_vector) *v = NULL, *vnew = NULL;
|
801
|
-
BASE x;
|
802
|
-
size_t i;
|
803
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
804
|
-
vnew = FUNCTION(gsl_vector,alloc)(v->size);
|
805
|
-
for (i = 0; i < v->size; i++) {
|
806
|
-
x = FUNCTION(gsl_vector,get)(v, i);
|
807
|
-
FUNCTION(gsl_vector,set)(vnew, i, (BASE)(x>0 ? 1 : (x<0 ? -1 : 0)));
|
808
|
-
}
|
809
|
-
return Data_Wrap_Struct(VEC_ROW_COL(obj), 0, FUNCTION(gsl_vector,free), vnew);
|
810
|
-
}
|
811
|
-
|
812
|
-
static VALUE FUNCTION(rb_gsl_vector,abs)(VALUE obj)
|
813
|
-
{
|
814
|
-
GSL_TYPE(gsl_vector) *v = NULL, *vnew = NULL;
|
815
|
-
size_t i;
|
816
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
817
|
-
vnew = FUNCTION(gsl_vector,alloc)(v->size);
|
818
|
-
for (i = 0; i < v->size; i++) {
|
819
|
-
FUNCTION(gsl_vector,set)(vnew, i, (BASE) fabs(FUNCTION(gsl_vector,get)(v, i)));
|
820
|
-
}
|
821
|
-
return Data_Wrap_Struct(VEC_ROW_COL(obj), 0, FUNCTION(gsl_vector,free), vnew);
|
822
|
-
}
|
823
|
-
|
824
|
-
static VALUE FUNCTION(rb_gsl_vector,square)(VALUE obj)
|
825
|
-
{
|
826
|
-
GSL_TYPE(gsl_vector) *v = NULL, *vnew = NULL;
|
827
|
-
size_t i;
|
828
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
829
|
-
vnew = FUNCTION(gsl_vector,alloc)(v->size);
|
830
|
-
for (i = 0; i < v->size; i++) {
|
831
|
-
FUNCTION(gsl_vector,set)(vnew, i, gsl_pow_2(FUNCTION(gsl_vector,get)(v, i)));
|
832
|
-
}
|
833
|
-
return Data_Wrap_Struct(VEC_ROW_COL(obj), 0, FUNCTION(gsl_vector,free), vnew);
|
834
|
-
}
|
835
|
-
|
836
|
-
static VALUE FUNCTION(rb_gsl_vector,sqrt)(VALUE obj)
|
837
|
-
{
|
838
|
-
GSL_TYPE(gsl_vector) *v = NULL, *vnew = NULL;
|
839
|
-
size_t i;
|
840
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
841
|
-
vnew = FUNCTION(gsl_vector,alloc)(v->size);
|
842
|
-
for (i = 0; i < v->size; i++) {
|
843
|
-
FUNCTION(gsl_vector,set)(vnew, i, sqrt(FUNCTION(gsl_vector,get)(v, i)));
|
844
|
-
}
|
845
|
-
return Data_Wrap_Struct(VEC_ROW_COL(obj), 0, FUNCTION(gsl_vector,free), vnew);
|
846
|
-
}
|
847
|
-
|
848
|
-
static VALUE FUNCTION(rb_gsl_vector,memcpy)(VALUE obj, VALUE dest, VALUE src)
|
849
|
-
{
|
850
|
-
GSL_TYPE(gsl_vector) *vdest = NULL, *vsrc = NULL;
|
851
|
-
Data_Get_Struct(dest, GSL_TYPE(gsl_vector), vdest);
|
852
|
-
Data_Get_Struct(src, GSL_TYPE(gsl_vector), vsrc);
|
853
|
-
FUNCTION(gsl_vector,memcpy)(vdest, vsrc);
|
854
|
-
return dest;
|
855
|
-
}
|
856
|
-
|
857
|
-
static VALUE FUNCTION(rb_gsl_vector,clone)(VALUE obj)
|
858
|
-
{
|
859
|
-
GSL_TYPE(gsl_vector) *v = NULL, *vnew = NULL;
|
860
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
861
|
-
vnew = FUNCTION(gsl_vector,alloc)(v->size);
|
862
|
-
if (vnew == NULL) rb_raise(rb_eNoMemError, "gsl_vector_alloc failed");
|
863
|
-
FUNCTION(gsl_vector,memcpy)(vnew, v);
|
864
|
-
if (!VEC_VIEW_P(obj))
|
865
|
-
return Data_Wrap_Struct(CLASS_OF(obj), 0, FUNCTION(gsl_vector,free), vnew);
|
866
|
-
else
|
867
|
-
return Data_Wrap_Struct(VEC_ROW_COL(obj), 0, FUNCTION(gsl_vector,free), vnew);
|
868
|
-
}
|
869
|
-
|
870
|
-
/* singleton */
|
871
|
-
static VALUE FUNCTION(rb_gsl_vector,swap)(VALUE obj, VALUE vv, VALUE ww)
|
872
|
-
{
|
873
|
-
GSL_TYPE(gsl_vector) *v = NULL, *w = NULL;
|
874
|
-
Data_Get_Struct(vv, GSL_TYPE(gsl_vector), v);
|
875
|
-
Data_Get_Struct(ww, GSL_TYPE(gsl_vector), w);
|
876
|
-
FUNCTION(gsl_vector,swap)(v, w);
|
877
|
-
return obj;
|
878
|
-
}
|
879
|
-
|
880
|
-
static VALUE FUNCTION(rb_gsl_vector,swap_elements)(VALUE obj, VALUE i, VALUE j)
|
881
|
-
{
|
882
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
883
|
-
CHECK_FIXNUM(i); CHECK_FIXNUM(j);
|
884
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
885
|
-
FUNCTION(gsl_vector,swap_elements)(v, FIX2INT(i), FIX2INT(j));
|
886
|
-
return obj;
|
887
|
-
}
|
888
|
-
|
889
|
-
static VALUE FUNCTION(rb_gsl_vector,fwrite)(VALUE obj, VALUE io)
|
890
|
-
{
|
891
|
-
GSL_TYPE(gsl_vector) *h = NULL;
|
892
|
-
FILE *f = NULL;
|
893
|
-
int status, flag = 0;
|
894
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), h);
|
895
|
-
f = rb_gsl_open_writefile(io, &flag);
|
896
|
-
status = FUNCTION(gsl_vector,fwrite)(f, h);
|
897
|
-
if (flag == 1) fclose(f);
|
898
|
-
return INT2FIX(status);
|
899
|
-
}
|
900
|
-
|
901
|
-
static VALUE FUNCTION(rb_gsl_vector,fread)(VALUE obj, VALUE io)
|
902
|
-
{
|
903
|
-
GSL_TYPE(gsl_vector) *h = NULL;
|
904
|
-
FILE *f = NULL;
|
905
|
-
int status, flag = 0;
|
906
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), h);
|
907
|
-
f = rb_gsl_open_readfile(io, &flag);
|
908
|
-
status = FUNCTION(gsl_vector,fread)(f, h);
|
909
|
-
if (flag == 1) fclose(f);
|
910
|
-
return INT2FIX(status);
|
911
|
-
}
|
912
|
-
|
913
|
-
static VALUE FUNCTION(rb_gsl_vector,fprintf)(int argc, VALUE *argv, VALUE obj)
|
914
|
-
{
|
915
|
-
GSL_TYPE(gsl_vector) *h = NULL;
|
916
|
-
FILE *fp = NULL;
|
917
|
-
int status, flag = 0;
|
918
|
-
if (argc != 1 && argc != 2)
|
919
|
-
rb_raise(rb_eArgError, "wrong number of arguments (%d for 1 or 2)", argc);
|
920
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), h);
|
921
|
-
fp = rb_gsl_open_writefile(argv[0], &flag);
|
922
|
-
if (argc == 2) {
|
923
|
-
if (TYPE(argv[1]) == T_STRING)
|
924
|
-
status = FUNCTION(gsl_vector,fprintf)(fp, h, STR2CSTR(argv[1]));
|
925
|
-
else
|
926
|
-
rb_raise(rb_eTypeError, "argv 2 String expected");
|
927
|
-
} else {
|
928
|
-
status = FUNCTION(gsl_vector,fprintf)(fp, h, "%g");
|
929
|
-
}
|
930
|
-
if (flag == 1) fclose(fp);
|
931
|
-
return INT2FIX(status);
|
932
|
-
}
|
933
|
-
|
934
|
-
static VALUE FUNCTION(rb_gsl_vector,printf)(int argc, VALUE *argv, VALUE obj)
|
935
|
-
{
|
936
|
-
GSL_TYPE(gsl_vector) *h = NULL;
|
937
|
-
int status;
|
938
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), h);
|
939
|
-
if (argc == 1) {
|
940
|
-
if (TYPE(argv[0]) != T_STRING)
|
941
|
-
rb_raise(rb_eTypeError, "String expected");
|
942
|
-
else
|
943
|
-
status = FUNCTION(gsl_vector,fprintf)(stdout, h, STR2CSTR(argv[0]));
|
944
|
-
} else {
|
945
|
-
status = FUNCTION(gsl_vector,fprintf)(stdout, h, "%g");
|
946
|
-
}
|
947
|
-
return INT2FIX(status);
|
948
|
-
}
|
949
|
-
|
950
|
-
static VALUE FUNCTION(rb_gsl_vector,fscanf)(VALUE obj, VALUE io)
|
951
|
-
{
|
952
|
-
GSL_TYPE(gsl_vector) *h = NULL;
|
953
|
-
FILE *fp = NULL;
|
954
|
-
int status, flag = 0;
|
955
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), h);
|
956
|
-
fp = rb_gsl_open_readfile(io, &flag);
|
957
|
-
status = FUNCTION(gsl_vector,fscanf)(fp, h);
|
958
|
-
if (flag == 1) fclose(fp);
|
959
|
-
return INT2FIX(status);
|
960
|
-
}
|
961
|
-
|
962
|
-
/* 2.Aug.2004 */
|
963
|
-
VALUE FUNCTION(rb_gsl_vector,inner_product)(int argc, VALUE *argv, VALUE obj)
|
964
|
-
{
|
965
|
-
GSL_TYPE(gsl_vector) *v = NULL, *v2 = NULL;
|
966
|
-
BASE prod = 0;
|
967
|
-
#ifndef BASE_DOUBLE
|
968
|
-
size_t i;
|
969
|
-
#endif
|
970
|
-
switch (TYPE(obj)) {
|
971
|
-
case T_MODULE: case T_CLASS: case T_OBJECT:
|
972
|
-
if (argc != 2) rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)",
|
973
|
-
argc);
|
974
|
-
CHECK_VEC(argv[0]);
|
975
|
-
CHECK_VEC(argv[1]);
|
976
|
-
Data_Get_Struct(argv[0], GSL_TYPE(gsl_vector), v);
|
977
|
-
Data_Get_Struct(argv[1], GSL_TYPE(gsl_vector), v2);
|
978
|
-
break;
|
979
|
-
default:
|
980
|
-
if (argc != 1) rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)",
|
981
|
-
argc);
|
982
|
-
CHECK_VEC(argv[0]);
|
983
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
984
|
-
Data_Get_Struct(argv[0], GSL_TYPE(gsl_vector), v2);
|
985
|
-
break;
|
986
|
-
}
|
987
|
-
if (v->size != v2->size) rb_raise(rb_eRangeError, "vector lengths are different.");
|
988
|
-
#ifdef BASE_DOUBLE
|
989
|
-
gsl_blas_ddot(v, v2, &prod);
|
990
|
-
#else
|
991
|
-
for (i = 0; i < v->size; i++) {
|
992
|
-
prod += FUNCTION(gsl_vector,get)(v, i)*FUNCTION(gsl_vector,get)(v2, i);
|
993
|
-
}
|
994
|
-
#endif
|
995
|
-
return C_TO_VALUE2(prod);
|
996
|
-
}
|
997
|
-
|
998
|
-
int FUNCTION(rbgsl_vector,equal)(const GSL_TYPE(gsl_vector) *v1, const GSL_TYPE(gsl_vector) *v2, double eps)
|
999
|
-
{
|
1000
|
-
size_t i;
|
1001
|
-
BASE x, y;
|
1002
|
-
if (v1->size != v2->size) return 0;
|
1003
|
-
for (i = 0; i < v2->size; i++) {
|
1004
|
-
x = FUNCTION(gsl_vector,get)(v1, i);
|
1005
|
-
y = FUNCTION(gsl_vector,get)(v2, i);
|
1006
|
-
if (fabs(x - y) > eps) return 0;
|
1007
|
-
}
|
1008
|
-
return 1;
|
1009
|
-
}
|
1010
|
-
|
1011
|
-
#ifdef HAVE_TENSOR_TENSOR_H
|
1012
|
-
EXTERN VALUE cgsl_tensor, cgsl_tensor_int;
|
1013
|
-
VALUE rb_gsl_tensor_equal(int argc, VALUE *argv, VALUE obj);
|
1014
|
-
VALUE rb_gsl_tensor_int_equal(int argc, VALUE *argv, VALUE obj);
|
1015
|
-
#ifdef BASE_DOUBLE
|
1016
|
-
#define TEN_P(x) TENSOR_P(x)
|
1017
|
-
#else
|
1018
|
-
#define TEN_P(x) TENSOR_INT_P(x)
|
1019
|
-
#endif
|
1020
|
-
#endif
|
1021
|
-
|
1022
|
-
static VALUE FUNCTION(rb_gsl_vector,equal)(int argc, VALUE *argv, VALUE obj)
|
1023
|
-
{
|
1024
|
-
GSL_TYPE(gsl_vector) *v1, *v2;
|
1025
|
-
VALUE other;
|
1026
|
-
size_t i;
|
1027
|
-
double eps = 1e-10;
|
1028
|
-
double x;
|
1029
|
-
switch (argc) {
|
1030
|
-
case 2:
|
1031
|
-
other = argv[0];
|
1032
|
-
eps = NUM2DBL(argv[1]);
|
1033
|
-
break;
|
1034
|
-
case 1:
|
1035
|
-
other = argv[0];
|
1036
|
-
break;
|
1037
|
-
default:
|
1038
|
-
rb_raise(rb_eArgError, "wrong number of arguments (%d for 1 or 2)", argc);
|
1039
|
-
break;
|
1040
|
-
}
|
1041
|
-
#ifdef HAVE_TENSOR_TENSOR_H
|
1042
|
-
if (TEN_P(other)) {
|
1043
|
-
return FUNCTION(rb_gsl_tensor,equal)(argc, argv, obj);
|
1044
|
-
}
|
1045
|
-
#endif
|
1046
|
-
switch (TYPE(other)) {
|
1047
|
-
case T_FIXNUM:
|
1048
|
-
case T_FLOAT:
|
1049
|
-
x = NUM2DBL(other);
|
1050
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v1);
|
1051
|
-
for (i = 0; i < v1->size; i++)
|
1052
|
-
if (fabs(x-FUNCTION(gsl_vector,get)(v1, i)) > eps) return Qfalse;
|
1053
|
-
return Qtrue;
|
1054
|
-
break;
|
1055
|
-
default:
|
1056
|
-
CHECK_VEC(other);
|
1057
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v1);
|
1058
|
-
Data_Get_Struct(other, GSL_TYPE(gsl_vector), v2);
|
1059
|
-
if (FUNCTION(rbgsl_vector,equal)(v1, v2, eps)) return Qtrue;
|
1060
|
-
else return Qfalse;
|
1061
|
-
break;
|
1062
|
-
}
|
1063
|
-
return Qnil;
|
1064
|
-
}
|
1065
|
-
|
1066
|
-
#ifdef HAVE_TENSOR_TENSOR_H
|
1067
|
-
#ifdef TEN_P
|
1068
|
-
#undef TEN_P
|
1069
|
-
#endif
|
1070
|
-
#endif
|
1071
|
-
|
1072
|
-
static VALUE FUNCTION(rb_gsl_vector,to_poly)(VALUE obj)
|
1073
|
-
{
|
1074
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1075
|
-
GSL_TYPE(gsl_poly) *p = NULL;
|
1076
|
-
if (CLASS_OF(obj) == GSL_TYPE(cgsl_poly)) return obj;
|
1077
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1078
|
-
p = FUNCTION(make_vector,clone)(v);
|
1079
|
-
return Data_Wrap_Struct(GSL_TYPE(cgsl_poly), 0, FUNCTION(gsl_vector,free), p);
|
1080
|
-
}
|
1081
|
-
|
1082
|
-
static VALUE FUNCTION(rb_gsl_vector,graph)(int argc, VALUE *argv, VALUE obj)
|
1083
|
-
{
|
1084
|
-
#ifdef HAVE_GNU_GRAPH
|
1085
|
-
GSL_TYPE(gsl_vector) *x = NULL, *y = NULL;
|
1086
|
-
FILE *fp = NULL;
|
1087
|
-
size_t i;
|
1088
|
-
char command[1024];
|
1089
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), y);
|
1090
|
-
switch (argc) {
|
1091
|
-
case 0:
|
1092
|
-
strcpy(command, "graph -T X -g 3");
|
1093
|
-
break;
|
1094
|
-
case 1:
|
1095
|
-
if (TYPE(argv[0]) == T_STRING) {
|
1096
|
-
make_graphcommand(command, argv[0]);
|
1097
|
-
} else if (VEC_P(argv[0])) {
|
1098
|
-
strcpy(command, "graph -T X -g 3");
|
1099
|
-
Data_Get_Struct(argv[0], GSL_TYPE(gsl_vector), x);
|
1100
|
-
} else {
|
1101
|
-
}
|
1102
|
-
break;
|
1103
|
-
case 2:
|
1104
|
-
if (TYPE(argv[1]) == T_STRING) {
|
1105
|
-
make_graphcommand(command, argv[1]);
|
1106
|
-
if (VEC_P(argv[0])) {
|
1107
|
-
Data_Get_Struct(argv[0], GSL_TYPE(gsl_vector), x);
|
1108
|
-
} else {
|
1109
|
-
rb_raise(rb_eTypeError, "argv[0] wrong type %s (String or Vector expected)",
|
1110
|
-
rb_class2name(CLASS_OF(argv[0])));
|
1111
|
-
}
|
1112
|
-
} else {
|
1113
|
-
rb_raise(rb_eTypeError, "argv[1] wrong type %s (String or Vector expected)",
|
1114
|
-
rb_class2name(CLASS_OF(argv[1])));
|
1115
|
-
}
|
1116
|
-
break;
|
1117
|
-
default:
|
1118
|
-
rb_raise(rb_eArgError, "wrong number of arguments (%d for 0 or 1)", argc);
|
1119
|
-
break;
|
1120
|
-
}
|
1121
|
-
if (y == NULL) rb_raise(rb_eRuntimeError, "ydata not given");
|
1122
|
-
fp = popen(command, "w");
|
1123
|
-
for (i = 0; i < y->size; i++) {
|
1124
|
-
if (x == NULL)
|
1125
|
-
fprintf(fp, "%d %e\n", (int) i, (double) FUNCTION(gsl_vector,get)(y, i));
|
1126
|
-
else
|
1127
|
-
fprintf(fp, "%e %e\n", (double) FUNCTION(gsl_vector,get)(x, i), (double) FUNCTION(gsl_vector,get)(y, i));
|
1128
|
-
}
|
1129
|
-
fflush(fp);
|
1130
|
-
pclose(fp);
|
1131
|
-
fp = NULL;
|
1132
|
-
return Qtrue;
|
1133
|
-
#else
|
1134
|
-
rb_raise(rb_eNoMethodError, "not implemented");
|
1135
|
-
return Qfalse;
|
1136
|
-
#endif
|
1137
|
-
}
|
1138
|
-
|
1139
|
-
static VALUE FUNCTION(rb_gsl_vector,graph_step)(int argc, VALUE *argv, VALUE obj)
|
1140
|
-
{
|
1141
|
-
#ifdef HAVE_GNU_GRAPH
|
1142
|
-
GSL_TYPE(gsl_vector) *x = NULL, *y = NULL;
|
1143
|
-
FILE *fp = NULL;
|
1144
|
-
size_t i;
|
1145
|
-
char command[1024];
|
1146
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), y);
|
1147
|
-
switch (argc) {
|
1148
|
-
case 0:
|
1149
|
-
strcpy(command, "graph -T X -g 3");
|
1150
|
-
break;
|
1151
|
-
case 1:
|
1152
|
-
if (TYPE(argv[0]) == T_STRING) {
|
1153
|
-
make_graphcommand(command, argv[0]);
|
1154
|
-
} else if (VECTOR_P(argv[0])) {
|
1155
|
-
strcpy(command, "graph -T X -g 3");
|
1156
|
-
Data_Get_Struct(argv[0], GSL_TYPE(gsl_vector), x);
|
1157
|
-
} else {
|
1158
|
-
}
|
1159
|
-
break;
|
1160
|
-
case 2:
|
1161
|
-
if (TYPE(argv[1]) == T_STRING) {
|
1162
|
-
make_graphcommand(command, argv[1]);
|
1163
|
-
if (VEC_P(argv[0])) {
|
1164
|
-
Data_Get_Struct(argv[0], GSL_TYPE(gsl_vector), x);
|
1165
|
-
} else {
|
1166
|
-
rb_raise(rb_eTypeError, "argv[0] wrong type %s (String or Vector expected)",
|
1167
|
-
rb_class2name(CLASS_OF(argv[0])));
|
1168
|
-
}
|
1169
|
-
} else {
|
1170
|
-
rb_raise(rb_eTypeError, "argv[1] wrong type %s (String or Vector expected)",
|
1171
|
-
rb_class2name(CLASS_OF(argv[1])));
|
1172
|
-
}
|
1173
|
-
break;
|
1174
|
-
default:
|
1175
|
-
rb_raise(rb_eArgError, "wrong number of arguments (%d for 0 or 1)", argc);
|
1176
|
-
break;
|
1177
|
-
}
|
1178
|
-
if (y == NULL) rb_raise(rb_eRuntimeError, "ydata not given");
|
1179
|
-
fp = popen(command, "w");
|
1180
|
-
for (i = 0; i < y->size; i++) {
|
1181
|
-
if (x == NULL) {
|
1182
|
-
fprintf(fp, "%d %e\n%d %e\n", (int) i, (double) FUNCTION(gsl_vector,get)(y, i),
|
1183
|
-
(int) (i+1), (double) FUNCTION(gsl_vector,get)(y, i));
|
1184
|
-
} else {
|
1185
|
-
if (i != y->size-1)
|
1186
|
-
fprintf(fp, "%e %e\n%e %e\n", (double) FUNCTION(gsl_vector,get)(x, i),
|
1187
|
-
(double) FUNCTION(gsl_vector,get)(y, i),
|
1188
|
-
(double) FUNCTION(gsl_vector,get)(x, i+1),
|
1189
|
-
(double) FUNCTION(gsl_vector,get)(y, i));
|
1190
|
-
else
|
1191
|
-
fprintf(fp, "%e %e\n%e %e",
|
1192
|
-
(double) FUNCTION(gsl_vector,get)(x, i),
|
1193
|
-
(double) FUNCTION(gsl_vector,get)(y, i),
|
1194
|
-
2.0*FUNCTION(gsl_vector,get)(x, i)-FUNCTION(gsl_vector,get)(x, i-1),
|
1195
|
-
(double) FUNCTION(gsl_vector,get)(y, i));
|
1196
|
-
}
|
1197
|
-
}
|
1198
|
-
fflush(fp);
|
1199
|
-
pclose(fp);
|
1200
|
-
fp = NULL;
|
1201
|
-
return Qtrue;
|
1202
|
-
#else
|
1203
|
-
rb_raise(rb_eNoMethodError, "not implemented");
|
1204
|
-
return Qfalse;
|
1205
|
-
#endif
|
1206
|
-
}
|
1207
|
-
|
1208
|
-
static VALUE FUNCTION(rb_gsl_vector,plot)(int argc, VALUE *argv, VALUE obj)
|
1209
|
-
{
|
1210
|
-
GSL_TYPE(gsl_vector) *x = NULL, *y = NULL;
|
1211
|
-
FILE *fp = NULL;
|
1212
|
-
size_t i;
|
1213
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), y);
|
1214
|
-
fp = popen("gnuplot -persist", "w");
|
1215
|
-
switch (argc) {
|
1216
|
-
case 0:
|
1217
|
-
fprintf(fp, "plot '-'\n");
|
1218
|
-
break;
|
1219
|
-
case 1:
|
1220
|
-
if (TYPE(argv[0]) == T_STRING) {
|
1221
|
-
fprintf(fp, "plot '-' %s\n", STR2CSTR(argv[0]));
|
1222
|
-
} else if (VEC_P(argv[0])) {
|
1223
|
-
fprintf(fp, "plot '-'\n");
|
1224
|
-
Data_Get_Struct(argv[0], GSL_TYPE(gsl_vector), x);
|
1225
|
-
} else {
|
1226
|
-
rb_raise(rb_eTypeError, "wrong argument type %s (String or Vector expected)",
|
1227
|
-
rb_class2name(CLASS_OF(argv[0])));
|
1228
|
-
}
|
1229
|
-
break;
|
1230
|
-
case 2:
|
1231
|
-
if (TYPE(argv[1]) == T_STRING)
|
1232
|
-
fprintf(fp, "plot '-' %s\n", STR2CSTR(argv[1]));
|
1233
|
-
if (VEC_P(argv[0]))
|
1234
|
-
Data_Get_Struct(argv[0], GSL_TYPE(gsl_vector), x);
|
1235
|
-
break;
|
1236
|
-
default:
|
1237
|
-
rb_raise(rb_eArgError, "wrong number of arguments (%d for 0 or 1)", argc);
|
1238
|
-
break;
|
1239
|
-
}
|
1240
|
-
if (y == NULL) rb_raise(rb_eRuntimeError, "ydata not given");
|
1241
|
-
for (i = 0; i < y->size; i++) {
|
1242
|
-
if (x == NULL)
|
1243
|
-
fprintf(fp, "%d %e\n", (int) i, (double) FUNCTION(gsl_vector,get)(y, i));
|
1244
|
-
else
|
1245
|
-
fprintf(fp, "%e %e\n", (double) FUNCTION(gsl_vector,get)(x, i),
|
1246
|
-
(double) FUNCTION(gsl_vector,get)(y, i));
|
1247
|
-
}
|
1248
|
-
fprintf(fp, "e\n");
|
1249
|
-
fflush(fp);
|
1250
|
-
pclose(fp);
|
1251
|
-
fp = NULL;
|
1252
|
-
return Qtrue;
|
1253
|
-
}
|
1254
|
-
|
1255
|
-
void FUNCTION(gsl_vector,print)(const GSL_TYPE(gsl_vector) *v, VALUE klass)
|
1256
|
-
{
|
1257
|
-
size_t i;
|
1258
|
-
printf("[ ");
|
1259
|
-
if (klass == cgsl_vector_col || klass == cgsl_vector_col_view
|
1260
|
-
|| klass == cgsl_vector_col_view_ro
|
1261
|
-
|| klass == cgsl_vector_int_col || klass == cgsl_vector_int_col_view
|
1262
|
-
|| klass == cgsl_vector_int_col_view_ro) {
|
1263
|
-
printf(PRINTF_FORMAT, FUNCTION(gsl_vector,get)(v, 0));
|
1264
|
-
for (i = 1; i < v->size; i++) {
|
1265
|
-
printf(PRINTF_FORMAT, FUNCTION(gsl_vector,get)(v, i));
|
1266
|
-
if (i != v->size-1) printf("\n");
|
1267
|
-
}
|
1268
|
-
} else {
|
1269
|
-
for (i = 0; i < v->size; i++) printf(PRINTF_FORMAT, FUNCTION(gsl_vector,get)(v, i));
|
1270
|
-
}
|
1271
|
-
printf("]\n");
|
1272
|
-
}
|
1273
|
-
|
1274
|
-
VALUE FUNCTION(rb_gsl_vector,print)(VALUE obj)
|
1275
|
-
{
|
1276
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1277
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1278
|
-
FUNCTION(gsl_vector,print)(v, CLASS_OF(obj));
|
1279
|
-
return Qnil;
|
1280
|
-
}
|
1281
|
-
|
1282
|
-
#ifdef BASE_DOUBLE
|
1283
|
-
#define SHOW_ELM 6
|
1284
|
-
#else
|
1285
|
-
#define SHOW_ELM 15
|
1286
|
-
#endif
|
1287
|
-
|
1288
|
-
VALUE FUNCTION(rb_gsl_vector,to_s)(VALUE obj)
|
1289
|
-
{
|
1290
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1291
|
-
char buf[32], format[32], format2[32];
|
1292
|
-
size_t i;
|
1293
|
-
VALUE str;
|
1294
|
-
BASE x;
|
1295
|
-
int dig = 8;
|
1296
|
-
#ifdef BASE_INT
|
1297
|
-
BASE min;
|
1298
|
-
BASE max;
|
1299
|
-
dig = 1;
|
1300
|
-
#endif
|
1301
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1302
|
-
if (v->size == 0) return rb_str_new2("[ ]");
|
1303
|
-
str = rb_str_new2("[ ");
|
1304
|
-
if (VEC_COL_P(obj)) {
|
1305
|
-
#ifdef BASE_INT
|
1306
|
-
min = FUNCTION(gsl_vector,min)(v);
|
1307
|
-
max = gsl_vector_int_max(v);
|
1308
|
-
dig = (int) GSL_MAX(fabs(max),fabs(min));
|
1309
|
-
if (dig > 0) dig = ceil(log10(dig+1e-10));
|
1310
|
-
else dig = 1;
|
1311
|
-
if (min < 0) dig += 1;
|
1312
|
-
sprintf(format, "%%%dd ", (int) dig);
|
1313
|
-
strcpy(format2, format);
|
1314
|
-
#else
|
1315
|
-
strcpy(format, PRINTF_FORMAT);
|
1316
|
-
strcpy(format2, " " PRINTF_FORMAT);
|
1317
|
-
#endif
|
1318
|
-
for (i = 0; i < v->size; i++) {
|
1319
|
-
if (i != 0) {
|
1320
|
-
strcpy(buf, " ");
|
1321
|
-
rb_str_cat(str, buf, strlen(buf));
|
1322
|
-
}
|
1323
|
-
x = FUNCTION(gsl_vector,get)(v, i);
|
1324
|
-
if (x < 0) sprintf(buf, format, x);
|
1325
|
-
else sprintf(buf, format2, x);
|
1326
|
-
if (i != v->size-1) strcat(buf, "\n");
|
1327
|
-
rb_str_cat(str, buf, strlen(buf));
|
1328
|
-
if (i >= 20 && i != v->size-1) {
|
1329
|
-
strcpy(buf, " ...");
|
1330
|
-
rb_str_cat(str, buf, strlen(buf));
|
1331
|
-
break;
|
1332
|
-
}
|
1333
|
-
}
|
1334
|
-
} else {
|
1335
|
-
sprintf(buf, PRINTF_FORMAT, FUNCTION(gsl_vector,get)(v, 0));
|
1336
|
-
rb_str_cat(str, buf, strlen(buf));
|
1337
|
-
for (i = 1; i < v->size; i++) {
|
1338
|
-
sprintf(buf, PRINTF_FORMAT, FUNCTION(gsl_vector,get)(v, i));
|
1339
|
-
rb_str_cat(str, buf, strlen(buf));
|
1340
|
-
if ((int) i >= (55/dig) && i != v->size-1) {
|
1341
|
-
strcpy(buf, "... ");
|
1342
|
-
rb_str_cat(str, buf, strlen(buf));
|
1343
|
-
break;
|
1344
|
-
}
|
1345
|
-
}
|
1346
|
-
}
|
1347
|
-
sprintf(buf, "]");
|
1348
|
-
rb_str_cat(str, buf, strlen(buf));
|
1349
|
-
return str;
|
1350
|
-
}
|
1351
|
-
#undef SHOW_ELM
|
1352
|
-
|
1353
|
-
static VALUE FUNCTION(rb_gsl_vector,inspect)(VALUE obj)
|
1354
|
-
{
|
1355
|
-
VALUE str;
|
1356
|
-
char buf[64];
|
1357
|
-
sprintf(buf, "%s\n", rb_class2name(CLASS_OF(obj)));
|
1358
|
-
str = rb_str_new2(buf);
|
1359
|
-
return rb_str_concat(str, FUNCTION(rb_gsl_vector,to_s)(obj));
|
1360
|
-
}
|
1361
|
-
|
1362
|
-
static VALUE FUNCTION(rb_gsl_vector,subvector)(int argc, VALUE *argv, VALUE obj)
|
1363
|
-
{
|
1364
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1365
|
-
QUALIFIED_VIEW(gsl_vector,view) *vv = NULL;
|
1366
|
-
size_t offset, stride, n;
|
1367
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1368
|
-
parse_subvector_args(argc, argv, v->size, &offset, &stride, &n);
|
1369
|
-
vv = ALLOC(QUALIFIED_VIEW(gsl_vector,view));
|
1370
|
-
*vv = FUNCTION(gsl_vector,subvector_with_stride)(v, offset, stride, n);
|
1371
|
-
if (VEC_COL_P(obj))
|
1372
|
-
return Data_Wrap_Struct(QUALIFIED_VIEW(cgsl_vector,col_view), 0, free, vv);
|
1373
|
-
else
|
1374
|
-
return Data_Wrap_Struct(QUALIFIED_VIEW(cgsl_vector,view), 0, free, vv);
|
1375
|
-
}
|
1376
|
-
|
1377
|
-
static VALUE FUNCTION(rb_gsl_vector,subvector_with_stride)(int argc, VALUE *argv, VALUE obj)
|
1378
|
-
{
|
1379
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1380
|
-
QUALIFIED_VIEW(gsl_vector,view) *vv = NULL;
|
1381
|
-
int offset = 0, step, length;
|
1382
|
-
size_t stride = 1, n;
|
1383
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1384
|
-
switch (argc) {
|
1385
|
-
case 1:
|
1386
|
-
CHECK_FIXNUM(argv[0]);
|
1387
|
-
step = FIX2INT(argv[0]);
|
1388
|
-
if(step == 0) {
|
1389
|
-
rb_raise(rb_eArgError, "stride must be non-zero");
|
1390
|
-
}
|
1391
|
-
stride = (size_t)step;
|
1392
|
-
//n = v->size/stride;
|
1393
|
-
n = (v->size-1)/stride + 1;
|
1394
|
-
break;
|
1395
|
-
case 2:
|
1396
|
-
CHECK_FIXNUM(argv[0]); CHECK_FIXNUM(argv[1]);
|
1397
|
-
offset = FIX2INT(argv[0]);
|
1398
|
-
step = FIX2INT(argv[1]);
|
1399
|
-
if(offset < 0) {
|
1400
|
-
offset += v->size;
|
1401
|
-
if(offset < 0) {
|
1402
|
-
rb_raise(rb_eRangeError, "offset %d out of range", offset - (int)v->size);
|
1403
|
-
}
|
1404
|
-
} else if(offset >= (int) v->size) {
|
1405
|
-
rb_raise(rb_eRangeError, "offset %d out of range", offset);
|
1406
|
-
}
|
1407
|
-
if(step == 0) {
|
1408
|
-
rb_raise(rb_eArgError, "stride must be non-zero");
|
1409
|
-
}
|
1410
|
-
stride = (size_t)step;
|
1411
|
-
//n = (v->size-(size_t)offset)/stride;
|
1412
|
-
n = (v->size-(size_t)offset-1)/stride + 1;
|
1413
|
-
break;
|
1414
|
-
case 3:
|
1415
|
-
CHECK_FIXNUM(argv[0]); CHECK_FIXNUM(argv[1]); CHECK_FIXNUM(argv[2]);
|
1416
|
-
offset = FIX2INT(argv[0]);
|
1417
|
-
step = FIX2INT(argv[1]);
|
1418
|
-
length = FIX2INT(argv[2]);
|
1419
|
-
if(offset < 0) {
|
1420
|
-
offset += v->size;
|
1421
|
-
if(offset < 0) {
|
1422
|
-
rb_raise(rb_eRangeError, "offset %d out of range", offset - (int)v->size);
|
1423
|
-
}
|
1424
|
-
}
|
1425
|
-
if(step == 0) {
|
1426
|
-
rb_raise(rb_eArgError, "stride must be non-zero");
|
1427
|
-
}
|
1428
|
-
if(length < 0) {
|
1429
|
-
rb_raise(rb_eArgError, "length must be non-negative");
|
1430
|
-
}
|
1431
|
-
stride = (size_t)step;
|
1432
|
-
n = (size_t)length;
|
1433
|
-
break;
|
1434
|
-
default:
|
1435
|
-
rb_raise(rb_eArgError, "wrong number of arguments (%d for 1 - 3)", argc);
|
1436
|
-
break;
|
1437
|
-
}
|
1438
|
-
vv = ALLOC(QUALIFIED_VIEW(gsl_vector,view));
|
1439
|
-
*vv = FUNCTION(gsl_vector,subvector_with_stride)(v, (size_t)offset, stride, n);
|
1440
|
-
if (VEC_COL_P(obj))
|
1441
|
-
return Data_Wrap_Struct(QUALIFIED_VIEW(cgsl_vector,col_view), 0, free, vv);
|
1442
|
-
else
|
1443
|
-
return Data_Wrap_Struct(QUALIFIED_VIEW(cgsl_vector,view), 0, free, vv);
|
1444
|
-
}
|
1445
|
-
|
1446
|
-
static VALUE FUNCTION(rb_gsl_vector,matrix_view)(int argc, VALUE *argv, VALUE obj)
|
1447
|
-
{
|
1448
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1449
|
-
QUALIFIED_VIEW(gsl_matrix,view) *mv = NULL;
|
1450
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1451
|
-
switch (argc) {
|
1452
|
-
case 2:
|
1453
|
-
mv = ALLOC(QUALIFIED_VIEW(gsl_matrix,view));
|
1454
|
-
*mv = FUNCTION(gsl_matrix,view_vector)(v, FIX2INT(argv[0]), FIX2INT(argv[1]));
|
1455
|
-
break;
|
1456
|
-
case 3:
|
1457
|
-
mv = ALLOC(QUALIFIED_VIEW(gsl_matrix,view));
|
1458
|
-
*mv = FUNCTION(gsl_matrix,view_vector_with_tda)(v, FIX2INT(argv[0]), FIX2INT(argv[1]),
|
1459
|
-
FIX2INT(argv[2]));
|
1460
|
-
break;
|
1461
|
-
default:
|
1462
|
-
rb_raise(rb_eArgError, "wrong number of arguments (%d for 2 or 3)", argc);
|
1463
|
-
break;
|
1464
|
-
}
|
1465
|
-
return Data_Wrap_Struct(QUALIFIED_VIEW(cgsl_matrix,view), 0, free, mv);
|
1466
|
-
}
|
1467
|
-
|
1468
|
-
static VALUE FUNCTION(rb_gsl_vector,matrix_view_with_tda)(VALUE obj, VALUE nn1, VALUE nn2,
|
1469
|
-
VALUE tda)
|
1470
|
-
{
|
1471
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1472
|
-
QUALIFIED_VIEW(gsl_matrix,view) *mv = NULL;
|
1473
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1474
|
-
mv = ALLOC(QUALIFIED_VIEW(gsl_matrix,view));
|
1475
|
-
*mv = FUNCTION(gsl_matrix,view_vector_with_tda)(v, FIX2INT(nn1), FIX2INT(nn2), FIX2INT(tda));
|
1476
|
-
return Data_Wrap_Struct(QUALIFIED_VIEW(cgsl_matrix,view), 0, free, mv);
|
1477
|
-
}
|
1478
|
-
|
1479
|
-
void FUNCTION(mygsl_vector,shift)(GSL_TYPE(gsl_vector) *p, size_t n)
|
1480
|
-
{
|
1481
|
-
size_t i;
|
1482
|
-
for (i = n;; i--) {
|
1483
|
-
FUNCTION(gsl_vector,set)(p, i+1, FUNCTION(gsl_vector,get)(p, i));
|
1484
|
-
if (i == 0) break;
|
1485
|
-
}
|
1486
|
-
FUNCTION(gsl_vector,set)(p, 0, 0);
|
1487
|
-
}
|
1488
|
-
|
1489
|
-
void FUNCTION(mygsl_vector,shift_scale2)(GSL_TYPE(gsl_vector) *p, size_t n)
|
1490
|
-
{
|
1491
|
-
size_t i;
|
1492
|
-
for (i = n;; i--) {
|
1493
|
-
FUNCTION(gsl_vector,set)(p, i+1, 2*FUNCTION(gsl_vector,get)(p, i));
|
1494
|
-
if (i == 0) break;
|
1495
|
-
}
|
1496
|
-
FUNCTION(gsl_vector,set)(p, 0, 0);
|
1497
|
-
}
|
1498
|
-
|
1499
|
-
GSL_TYPE(gsl_vector)* FUNCTION(make_vector,clone)(const GSL_TYPE(gsl_vector) *v)
|
1500
|
-
{
|
1501
|
-
GSL_TYPE(gsl_vector) *vnew = NULL;
|
1502
|
-
vnew = FUNCTION(gsl_vector,alloc)(v->size);
|
1503
|
-
if (v->stride == 1) memcpy(vnew->data, v->data, sizeof(BASE)*v->size);
|
1504
|
-
else FUNCTION(gsl_vector,memcpy)(vnew, v);
|
1505
|
-
return vnew;
|
1506
|
-
}
|
1507
|
-
|
1508
|
-
VALUE FUNCTION(rb_gsl_vector,scale)(VALUE obj, VALUE x)
|
1509
|
-
{
|
1510
|
-
GSL_TYPE(gsl_vector) *v, *vnew;
|
1511
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1512
|
-
vnew = FUNCTION(make_vector,clone)(v);
|
1513
|
-
FUNCTION(gsl_vector,scale)(vnew, NUMCONV2(x));
|
1514
|
-
// return Data_Wrap_Struct(GSL_TYPE(cgsl_vector), 0, FUNCTION(gsl_vector,free), vnew);
|
1515
|
-
return Data_Wrap_Struct(VEC_ROW_COL(obj), 0, FUNCTION(gsl_vector,free), vnew);
|
1516
|
-
}
|
1517
|
-
|
1518
|
-
VALUE FUNCTION(rb_gsl_vector,scale_bang)(VALUE obj, VALUE x)
|
1519
|
-
{
|
1520
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1521
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1522
|
-
FUNCTION(gsl_vector,scale)(v, NUMCONV2(x));
|
1523
|
-
return obj;
|
1524
|
-
}
|
1525
|
-
|
1526
|
-
VALUE FUNCTION(rb_gsl_vector,add_constant)(VALUE obj, VALUE x)
|
1527
|
-
{
|
1528
|
-
GSL_TYPE(gsl_vector) *v, *vnew;
|
1529
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1530
|
-
vnew = FUNCTION(make_vector,clone)(v);
|
1531
|
-
FUNCTION(gsl_vector,add_constant)(vnew, NUMCONV2(x));
|
1532
|
-
// return Data_Wrap_Struct(GSL_TYPE(cgsl_vector), 0, FUNCTION(gsl_vector,free), vnew);
|
1533
|
-
return Data_Wrap_Struct(VEC_ROW_COL(obj), 0, FUNCTION(gsl_vector,free), vnew);
|
1534
|
-
}
|
1535
|
-
|
1536
|
-
VALUE FUNCTION(rb_gsl_vector,add_constant_bang)(VALUE obj, VALUE x)
|
1537
|
-
{
|
1538
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1539
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1540
|
-
FUNCTION(gsl_vector,add_constant)(v, NUMCONV2(x));
|
1541
|
-
return obj;
|
1542
|
-
}
|
1543
|
-
|
1544
|
-
QUALIFIED_VIEW(gsl_vector,view)* FUNCTION(rb_gsl_make_vector,view)(BASE *data, size_t size, size_t stride)
|
1545
|
-
{
|
1546
|
-
QUALIFIED_VIEW(gsl_vector,view) *v = NULL;
|
1547
|
-
v = ALLOC(QUALIFIED_VIEW(gsl_vector,view));
|
1548
|
-
v->vector.size = size;
|
1549
|
-
v->vector.stride = stride;
|
1550
|
-
v->vector.owner = 0;
|
1551
|
-
v->vector.data = data;
|
1552
|
-
return v;
|
1553
|
-
}
|
1554
|
-
|
1555
|
-
#ifdef HAVE_TENSOR_TENSOR_H
|
1556
|
-
#include "include/rb_gsl_tensor.h"
|
1557
|
-
static VALUE FUNCTION(rb_gsl_vector,to_tensor)(int argc, VALUE *argv, VALUE obj)
|
1558
|
-
{
|
1559
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1560
|
-
GSL_TYPE(rbgsl_tensor) *t;
|
1561
|
-
unsigned int rank;
|
1562
|
-
size_t dim;
|
1563
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1564
|
-
switch (argc) {
|
1565
|
-
case 0:
|
1566
|
-
rank = 1;
|
1567
|
-
dim = v->size;
|
1568
|
-
break;
|
1569
|
-
case 2:
|
1570
|
-
rank = FIX2UINT(argv[0]);
|
1571
|
-
dim = FIX2UINT(argv[1]);
|
1572
|
-
break;
|
1573
|
-
default:
|
1574
|
-
rb_raise(rb_eArgError, "wrong number of arguments (%d for 0 or 2)", argc);
|
1575
|
-
break;
|
1576
|
-
}
|
1577
|
-
t = FUNCTION(rbgsl_tensor,alloc)(rank, dim);
|
1578
|
-
memcpy(t->tensor->data, v->data, sizeof(BASE)*v->size);
|
1579
|
-
return Data_Wrap_Struct(GSL_TYPE(cgsl_tensor), 0, FUNCTION(rbgsl_tensor,free), t);
|
1580
|
-
}
|
1581
|
-
#endif
|
1582
|
-
|
1583
|
-
#ifdef BASE_DOUBLE
|
1584
|
-
#define PRINTF_FORMAT2 "%g "
|
1585
|
-
#else
|
1586
|
-
#define PRINTF_FORMAT2 "%d "
|
1587
|
-
#endif
|
1588
|
-
static VALUE FUNCTION(rb_gsl_vector,to_gplot)(int argc, VALUE *argv, VALUE obj)
|
1589
|
-
{
|
1590
|
-
char buf[1024] = "";
|
1591
|
-
size_t i, j, len = 0, nv, istart;
|
1592
|
-
VALUE str, tmp;
|
1593
|
-
GSL_TYPE(gsl_vector) *v, **vp;
|
1594
|
-
switch (TYPE(obj)) {
|
1595
|
-
case T_MODULE: case T_CLASS: case T_OBJECT:
|
1596
|
-
if (argc < 1) rb_raise(rb_eArgError, "no vectors given");
|
1597
|
-
if (TYPE(argv[0]) == T_ARRAY) nv = RARRAY_LEN(argv[0]);
|
1598
|
-
else nv = argc;
|
1599
|
-
vp = (GSL_TYPE(gsl_vector)**)ALLOC_N(GSL_TYPE(gsl_vector)*, nv);
|
1600
|
-
istart = 0;
|
1601
|
-
break;
|
1602
|
-
default:
|
1603
|
-
CHECK_VEC(obj);
|
1604
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1605
|
-
if (argc >= 1 && TYPE(argv[0]) == T_ARRAY) nv = 1 + RARRAY_LEN(argv[0]);
|
1606
|
-
else nv = argc + 1;
|
1607
|
-
vp = (GSL_TYPE(gsl_vector)**)ALLOC_N(GSL_TYPE(gsl_vector)*, nv);
|
1608
|
-
vp[0] = v; len = v->size;
|
1609
|
-
istart = 1;
|
1610
|
-
break;
|
1611
|
-
}
|
1612
|
-
for (i = 0; (int) i < argc; i++) {
|
1613
|
-
if (TYPE(argv[0]) == T_ARRAY) tmp = rb_ary_entry(argv[0], i);
|
1614
|
-
else tmp = argv[i];
|
1615
|
-
CHECK_VEC(tmp);
|
1616
|
-
Data_Get_Struct(tmp, GSL_TYPE(gsl_vector), v);
|
1617
|
-
if (len == 0) len = v->size;
|
1618
|
-
if (len != v->size)
|
1619
|
-
rb_raise(rb_eRuntimeError, "vectors must have equal lengths");
|
1620
|
-
vp[i+istart] = v;
|
1621
|
-
}
|
1622
|
-
str = rb_str_new2(buf);
|
1623
|
-
for (j = 0; j < len; j++) {
|
1624
|
-
for (i = 0; i < nv; i++) {
|
1625
|
-
sprintf(buf, PRINTF_FORMAT2, FUNCTION(gsl_vector,get)(vp[i], j));
|
1626
|
-
rb_str_buf_cat(str, buf, strlen(buf));
|
1627
|
-
}
|
1628
|
-
rb_str_buf_cat2(str, "\n");
|
1629
|
-
}
|
1630
|
-
rb_str_buf_cat2(str, "\n");
|
1631
|
-
free((GSL_TYPE(gsl_vector)**)vp);
|
1632
|
-
return str;
|
1633
|
-
}
|
1634
|
-
#undef PRINTF_FORMAT2
|
1635
|
-
|
1636
|
-
static VALUE FUNCTION(rb_gsl_vector,to_m_diagonal)(VALUE obj)
|
1637
|
-
{
|
1638
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1639
|
-
GSL_TYPE(gsl_matrix) *m = NULL;
|
1640
|
-
size_t i;
|
1641
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1642
|
-
m = FUNCTION(gsl_matrix,calloc)(v->size, v->size);
|
1643
|
-
for (i = 0; i < v->size; i++)
|
1644
|
-
FUNCTION(gsl_matrix,set)(m, i, i, FUNCTION(gsl_vector,get)(v, i));
|
1645
|
-
return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), m);
|
1646
|
-
}
|
1647
|
-
|
1648
|
-
static VALUE FUNCTION(rb_gsl_vector,collect)(VALUE obj)
|
1649
|
-
{
|
1650
|
-
GSL_TYPE(gsl_vector) *v = NULL, *vnew;
|
1651
|
-
size_t i;
|
1652
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1653
|
-
vnew = FUNCTION(gsl_vector,alloc)(v->size);
|
1654
|
-
for (i = 0; i < v->size; i++) {
|
1655
|
-
FUNCTION(gsl_vector,set)(vnew, i, NUMCONV(rb_yield(C_TO_VALUE(FUNCTION(gsl_vector,get)(v, i)))));
|
1656
|
-
}
|
1657
|
-
return Data_Wrap_Struct(GSL_TYPE(cgsl_vector), 0, FUNCTION(gsl_vector,free), vnew);
|
1658
|
-
}
|
1659
|
-
|
1660
|
-
/* 2004/May/03 */
|
1661
|
-
static VALUE FUNCTION(rb_gsl_vector,collect_bang)(VALUE obj)
|
1662
|
-
{
|
1663
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1664
|
-
size_t i;
|
1665
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1666
|
-
for (i = 0; i < v->size; i++) {
|
1667
|
-
FUNCTION(gsl_vector,set)(v, i, NUMCONV(rb_yield(C_TO_VALUE(FUNCTION(gsl_vector,get)(v, i)))));
|
1668
|
-
}
|
1669
|
-
return obj;
|
1670
|
-
}
|
1671
|
-
|
1672
|
-
/* Modified 2006/Sep/26 */
|
1673
|
-
GSL_TYPE(gsl_vector)* FUNCTION(mygsl_vector,mul_matrix)(GSL_TYPE(gsl_vector) *v,
|
1674
|
-
GSL_TYPE(gsl_matrix) *m)
|
1675
|
-
{
|
1676
|
-
GSL_TYPE(gsl_vector) *vnew;
|
1677
|
-
size_t i, j;
|
1678
|
-
BASE sum;
|
1679
|
-
if (v->size != m->size1) rb_raise(rb_eRuntimeError, "vector/matrix sizes are different.");
|
1680
|
-
vnew = FUNCTION(gsl_vector,alloc)(m->size2);
|
1681
|
-
for (i = 0; i < m->size2; i++) {
|
1682
|
-
sum = 0;
|
1683
|
-
for (j = 0; j < m->size1; j++) {
|
1684
|
-
sum += FUNCTION(gsl_vector,get)(v, j)*FUNCTION(gsl_matrix,get)(m, j, i);
|
1685
|
-
}
|
1686
|
-
FUNCTION(gsl_vector,set)(vnew, i, sum);
|
1687
|
-
}
|
1688
|
-
return vnew;
|
1689
|
-
}
|
1690
|
-
|
1691
|
-
void FUNCTION(mygsl_vector,to_m_circulant)(GSL_TYPE(gsl_matrix) *m, GSL_TYPE(gsl_vector) *v)
|
1692
|
-
{
|
1693
|
-
size_t i, j;
|
1694
|
-
for (i = v->size-1;; i--) {
|
1695
|
-
for (j = 0; j < v->size; j++) {
|
1696
|
-
if (j <= i) FUNCTION(gsl_matrix,set)(m, i, j, FUNCTION(gsl_vector,get)(v, v->size-1-i+j));
|
1697
|
-
else FUNCTION(gsl_matrix,set)(m, i, j, FUNCTION(gsl_vector,get)(v, j-i-1));
|
1698
|
-
}
|
1699
|
-
if (i == 0) break;
|
1700
|
-
}
|
1701
|
-
}
|
1702
|
-
|
1703
|
-
static VALUE FUNCTION(rb_gsl_vector,to_m_circulant)(VALUE obj)
|
1704
|
-
{
|
1705
|
-
GSL_TYPE(gsl_matrix) *m;
|
1706
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1707
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1708
|
-
m = FUNCTION(gsl_matrix,alloc)(v->size, v->size);
|
1709
|
-
FUNCTION(mygsl_vector,to_m_circulant)(m, v);
|
1710
|
-
return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), m);
|
1711
|
-
}
|
1712
|
-
|
1713
|
-
static void FUNCTION(mygsl_vector,indgen)(GSL_TYPE(gsl_vector) *v,
|
1714
|
-
BASE start, BASE step)
|
1715
|
-
{
|
1716
|
-
size_t k = 0;
|
1717
|
-
BASE i;
|
1718
|
-
i = start;
|
1719
|
-
for (k = 0; k < v->size; k++) {
|
1720
|
-
FUNCTION(gsl_vector,set)(v, k, i);
|
1721
|
-
i += step;
|
1722
|
-
}
|
1723
|
-
}
|
1724
|
-
|
1725
|
-
static VALUE FUNCTION(rb_gsl_vector,indgen_singleton)(int argc, VALUE *argv, VALUE obj)
|
1726
|
-
{
|
1727
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1728
|
-
size_t n;
|
1729
|
-
BASE start = 0, step = 1;
|
1730
|
-
switch (argc) {
|
1731
|
-
case 3:
|
1732
|
-
step = NUMCONV2(argv[2]);
|
1733
|
-
/* no break */
|
1734
|
-
case 2:
|
1735
|
-
start = NUMCONV2(argv[1]);
|
1736
|
-
/* no break */
|
1737
|
-
case 1:
|
1738
|
-
n = NUM2INT(argv[0]);
|
1739
|
-
break;
|
1740
|
-
default:
|
1741
|
-
rb_raise(rb_eArgError, "wrong number of arguments (%d for 1-3)", argc);
|
1742
|
-
break;
|
1743
|
-
}
|
1744
|
-
v = FUNCTION(gsl_vector,alloc)(n);
|
1745
|
-
FUNCTION(mygsl_vector,indgen)(v, start, step);
|
1746
|
-
return Data_Wrap_Struct(GSL_TYPE(cgsl_vector), 0, FUNCTION(gsl_vector,free), v);
|
1747
|
-
}
|
1748
|
-
|
1749
|
-
static VALUE FUNCTION(rb_gsl_vector,indgen)(int argc, VALUE *argv, VALUE obj)
|
1750
|
-
{
|
1751
|
-
GSL_TYPE(gsl_vector) *v, *vnew;
|
1752
|
-
BASE start = 0, step = 1;
|
1753
|
-
switch (argc) {
|
1754
|
-
case 2:
|
1755
|
-
step = NUMCONV2(argv[1]);
|
1756
|
-
/* no break */
|
1757
|
-
case 1:
|
1758
|
-
start = NUMCONV2(argv[0]);
|
1759
|
-
break;
|
1760
|
-
case 0:
|
1761
|
-
break;
|
1762
|
-
default:
|
1763
|
-
rb_raise(rb_eArgError, "wrong number of arguments (%d for 0-2)", argc);
|
1764
|
-
break;
|
1765
|
-
}
|
1766
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1767
|
-
vnew = FUNCTION(gsl_vector,alloc)(v->size);
|
1768
|
-
FUNCTION(mygsl_vector,indgen)(vnew, start, step);
|
1769
|
-
return Data_Wrap_Struct(GSL_TYPE(cgsl_vector), 0, FUNCTION(gsl_vector,free), vnew);
|
1770
|
-
}
|
1771
|
-
|
1772
|
-
static VALUE FUNCTION(rb_gsl_vector,indgen_bang)(int argc, VALUE *argv, VALUE obj)
|
1773
|
-
{
|
1774
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1775
|
-
BASE start = 0, step = 1;
|
1776
|
-
switch (argc) {
|
1777
|
-
case 2:
|
1778
|
-
step = NUMCONV2(argv[1]);
|
1779
|
-
/* no break */
|
1780
|
-
case 1:
|
1781
|
-
start = NUMCONV2(argv[0]);
|
1782
|
-
break;
|
1783
|
-
case 0:
|
1784
|
-
break;
|
1785
|
-
default:
|
1786
|
-
rb_raise(rb_eArgError, "wrong number of arguments (%d for 0-2)", argc);
|
1787
|
-
break;
|
1788
|
-
}
|
1789
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1790
|
-
FUNCTION(mygsl_vector,indgen)(v, start, step);
|
1791
|
-
return obj;
|
1792
|
-
}
|
1793
|
-
|
1794
|
-
static VALUE FUNCTION(rb_gsl_vector,to_m)(VALUE obj, VALUE ii, VALUE jj)
|
1795
|
-
{
|
1796
|
-
GSL_TYPE(gsl_matrix) *m;
|
1797
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1798
|
-
size_t i, j, n;
|
1799
|
-
CHECK_FIXNUM(ii); CHECK_FIXNUM(jj);
|
1800
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1801
|
-
i = (size_t) FIX2INT(ii); j = (size_t) FIX2INT(jj);
|
1802
|
-
n = i*j;
|
1803
|
-
m = FUNCTION(gsl_matrix,alloc)(i, j);
|
1804
|
-
memcpy(m->data, v->data, sizeof(BASE)*v->size);
|
1805
|
-
for (i = n; i < v->size; i++) m->data[i] = (BASE) 0;
|
1806
|
-
return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), m);
|
1807
|
-
}
|
1808
|
-
|
1809
|
-
static VALUE FUNCTION(rb_gsl_vector,block)(VALUE obj)
|
1810
|
-
{
|
1811
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1812
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1813
|
-
return Data_Wrap_Struct(GSL_TYPE(cgsl_block), 0, NULL, v->block);
|
1814
|
-
}
|
1815
|
-
|
1816
|
-
/*****/
|
1817
|
-
static VALUE GSL_TYPE(rb_gsl_sort_vector)(VALUE obj)
|
1818
|
-
{
|
1819
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1820
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1821
|
-
GSL_TYPE(gsl_sort_vector)(v);
|
1822
|
-
return obj;
|
1823
|
-
}
|
1824
|
-
|
1825
|
-
static VALUE GSL_TYPE(rb_gsl_sort_vector2)(VALUE obj)
|
1826
|
-
{
|
1827
|
-
GSL_TYPE(gsl_vector) *v = NULL, *vnew = NULL;
|
1828
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1829
|
-
vnew = FUNCTION(gsl_vector,alloc)(v->size);
|
1830
|
-
FUNCTION(gsl_vector,memcpy)(vnew, v);
|
1831
|
-
GSL_TYPE(gsl_sort_vector)(vnew);
|
1832
|
-
return Data_Wrap_Struct(GSL_TYPE(cgsl_vector), 0, FUNCTION(gsl_vector,free), vnew);
|
1833
|
-
}
|
1834
|
-
|
1835
|
-
static VALUE FUNCTION(rb_gsl_sort_vector,index)(VALUE obj)
|
1836
|
-
{
|
1837
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1838
|
-
gsl_index *p = NULL;
|
1839
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1840
|
-
p = gsl_permutation_alloc(v->size);
|
1841
|
-
FUNCTION(gsl_sort_vector,index)(p, v);
|
1842
|
-
return Data_Wrap_Struct(cgsl_index, 0, gsl_permutation_free, p);
|
1843
|
-
}
|
1844
|
-
|
1845
|
-
static VALUE FUNCTION(rb_gsl_sort_vector,smallest)(VALUE obj, VALUE kk)
|
1846
|
-
{
|
1847
|
-
GSL_TYPE(gsl_vector) *v = NULL, *v2 = NULL;
|
1848
|
-
size_t k;
|
1849
|
-
CHECK_FIXNUM(kk);
|
1850
|
-
k = FIX2INT(kk);
|
1851
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1852
|
-
v2 = FUNCTION(gsl_vector,alloc)(k);
|
1853
|
-
FUNCTION(gsl_sort_vector,smallest)(v2->data, k, v);
|
1854
|
-
return Data_Wrap_Struct(GSL_TYPE(cgsl_vector), 0, FUNCTION(gsl_vector,free), v2);
|
1855
|
-
}
|
1856
|
-
|
1857
|
-
static VALUE FUNCTION(rb_gsl_sort_vector,largest)(VALUE obj, VALUE kk)
|
1858
|
-
{
|
1859
|
-
GSL_TYPE(gsl_vector) *v = NULL, *v2 = NULL;
|
1860
|
-
size_t k;
|
1861
|
-
CHECK_FIXNUM(kk);
|
1862
|
-
k = FIX2INT(kk);
|
1863
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1864
|
-
v2 = FUNCTION(gsl_vector,alloc)(k);
|
1865
|
-
FUNCTION(gsl_sort_vector,largest)(v2->data, k, v);
|
1866
|
-
return Data_Wrap_Struct(GSL_TYPE(cgsl_vector), 0, FUNCTION(gsl_vector,free), v2);
|
1867
|
-
}
|
1868
|
-
|
1869
|
-
static VALUE FUNCTION(rb_gsl_sort_vector,smallest_index)(VALUE obj, VALUE kk)
|
1870
|
-
{
|
1871
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1872
|
-
gsl_index *p = NULL;
|
1873
|
-
size_t k;
|
1874
|
-
CHECK_FIXNUM(kk);
|
1875
|
-
k = FIX2INT(kk);
|
1876
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1877
|
-
p = gsl_permutation_alloc(k);
|
1878
|
-
FUNCTION(gsl_sort_vector,smallest_index)(p->data, k, v);
|
1879
|
-
return Data_Wrap_Struct(cgsl_index, 0, gsl_permutation_free, p);
|
1880
|
-
}
|
1881
|
-
|
1882
|
-
static VALUE FUNCTION(rb_gsl_sort_vector,largest_index)(VALUE obj, VALUE kk)
|
1883
|
-
{
|
1884
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1885
|
-
gsl_index *p = NULL;
|
1886
|
-
size_t k;
|
1887
|
-
CHECK_FIXNUM(kk);
|
1888
|
-
k = FIX2INT(kk);
|
1889
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1890
|
-
p = gsl_permutation_alloc(k);
|
1891
|
-
FUNCTION(gsl_sort_vector,largest_index)(p->data, k, v);
|
1892
|
-
return Data_Wrap_Struct(cgsl_index, 0, gsl_permutation_free, p);
|
1893
|
-
}
|
1894
|
-
|
1895
|
-
static VALUE FUNCTION(rb_gsl_vector,histogram)(int argc, VALUE *argv, VALUE obj)
|
1896
|
-
{
|
1897
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1898
|
-
gsl_histogram *h;
|
1899
|
-
gsl_vector *ranges;
|
1900
|
-
double min, max;
|
1901
|
-
size_t i, n;
|
1902
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1903
|
-
switch (argc) {
|
1904
|
-
case 1:
|
1905
|
-
if (rb_obj_is_kind_of(argv[0], rb_cRange))
|
1906
|
-
argv[0] = rb_gsl_range2ary(argv[0]);
|
1907
|
-
switch (TYPE(argv[0])) {
|
1908
|
-
case T_FIXNUM:
|
1909
|
-
n = NUM2INT(argv[0]);
|
1910
|
-
min = FUNCTION(gsl_vector,min)(v) - 4*GSL_DBL_EPSILON;
|
1911
|
-
max = FUNCTION(gsl_vector,max)(v) + 4*GSL_DBL_EPSILON;
|
1912
|
-
h = gsl_histogram_alloc(n);
|
1913
|
-
gsl_histogram_set_ranges_uniform(h, min, max);
|
1914
|
-
break;
|
1915
|
-
case T_ARRAY:
|
1916
|
-
n = RARRAY_LEN(argv[0]) - 1;
|
1917
|
-
h = gsl_histogram_alloc(n);
|
1918
|
-
for (i = 0; i <= n; i++) h->range[i] = NUM2DBL(rb_ary_entry(argv[0], i));
|
1919
|
-
break;
|
1920
|
-
default:
|
1921
|
-
CHECK_VECTOR(argv[0]);
|
1922
|
-
Data_Get_Struct(argv[0], gsl_vector, ranges);
|
1923
|
-
n = ranges->size - 1;
|
1924
|
-
h = gsl_histogram_alloc(n);
|
1925
|
-
gsl_histogram_set_ranges(h, ranges->data, ranges->size);
|
1926
|
-
break;
|
1927
|
-
}
|
1928
|
-
break;
|
1929
|
-
case 2:
|
1930
|
-
n = NUM2INT(argv[0]);
|
1931
|
-
switch (TYPE(argv[1])) {
|
1932
|
-
case T_ARRAY:
|
1933
|
-
min = NUM2DBL(rb_ary_entry(argv[1], 0));
|
1934
|
-
max = NUM2DBL(rb_ary_entry(argv[1], 1));
|
1935
|
-
break;
|
1936
|
-
default:
|
1937
|
-
rb_raise(rb_eTypeError, "wrong argument type %s (Array expected)",
|
1938
|
-
rb_class2name(CLASS_OF(argv[1])));
|
1939
|
-
break;
|
1940
|
-
}
|
1941
|
-
h = gsl_histogram_alloc(n);
|
1942
|
-
gsl_histogram_set_ranges_uniform(h, min, max);
|
1943
|
-
break;
|
1944
|
-
case 3:
|
1945
|
-
n = NUM2INT(argv[0]);
|
1946
|
-
min = NUM2DBL(argv[1]); max = NUM2DBL(argv[2]);
|
1947
|
-
h = gsl_histogram_alloc(n);
|
1948
|
-
gsl_histogram_set_ranges_uniform(h, min, max);
|
1949
|
-
break;
|
1950
|
-
default:
|
1951
|
-
rb_raise(rb_eArgError, "wrong number of arguments %d", argc);
|
1952
|
-
break;
|
1953
|
-
}
|
1954
|
-
for (i = 0; i < v->size; i++)
|
1955
|
-
gsl_histogram_increment(h, FUNCTION(gsl_vector,get)(v, i));
|
1956
|
-
return Data_Wrap_Struct(cgsl_histogram, 0, gsl_histogram_free, h);
|
1957
|
-
}
|
1958
|
-
|
1959
|
-
static VALUE FUNCTION(rb_gsl_vector,last)(VALUE obj)
|
1960
|
-
{
|
1961
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1962
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1963
|
-
return C_TO_VALUE(FUNCTION(gsl_vector,get)(v, v->size-1));
|
1964
|
-
}
|
1965
|
-
|
1966
|
-
static VALUE FUNCTION(rb_gsl_vector,first)(VALUE obj)
|
1967
|
-
{
|
1968
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
1969
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1970
|
-
return C_TO_VALUE(FUNCTION(gsl_vector,get)(v, 0));
|
1971
|
-
}
|
1972
|
-
|
1973
|
-
static VALUE FUNCTION(rb_gsl_vector,concat)(VALUE obj, VALUE other)
|
1974
|
-
{
|
1975
|
-
GSL_TYPE(gsl_vector) *v = NULL, *v2 = NULL, *vnew = NULL;
|
1976
|
-
QUALIFIED_VIEW(gsl_vector,view) vv;
|
1977
|
-
VALUE x;
|
1978
|
-
BASE beg, end;
|
1979
|
-
int step;
|
1980
|
-
size_t i, size2;
|
1981
|
-
|
1982
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
1983
|
-
|
1984
|
-
switch(TYPE(other)) {
|
1985
|
-
case T_FIXNUM:
|
1986
|
-
case T_BIGNUM:
|
1987
|
-
case T_FLOAT:
|
1988
|
-
vnew = FUNCTION(gsl_vector,alloc)(v->size + 1);
|
1989
|
-
vv = FUNCTION(gsl_vector,subvector)(vnew, 0, v->size);
|
1990
|
-
FUNCTION(gsl_vector,memcpy)(&vv.vector, v);
|
1991
|
-
FUNCTION(gsl_vector,set)(vnew, v->size, NUMCONV2(other));
|
1992
|
-
break;
|
1993
|
-
|
1994
|
-
case T_ARRAY:
|
1995
|
-
size2 = RARRAY_LEN(other);
|
1996
|
-
vnew = FUNCTION(gsl_vector,alloc)(v->size + size2);
|
1997
|
-
vv = FUNCTION(gsl_vector,subvector)(vnew, 0, v->size);
|
1998
|
-
FUNCTION(gsl_vector,memcpy)(&vv.vector, v);
|
1999
|
-
for (i = 0; i < size2; i++) {
|
2000
|
-
x = rb_ary_entry(other, i);
|
2001
|
-
FUNCTION(gsl_vector,set)(vnew, v->size + i, NUMCONV2(x));
|
2002
|
-
}
|
2003
|
-
break;
|
2004
|
-
|
2005
|
-
default:
|
2006
|
-
if(rb_obj_is_kind_of(other, rb_cRange)) {
|
2007
|
-
FUNCTION(get_range,beg_en_n)(other, &beg, &end, &size2, &step);
|
2008
|
-
vnew = FUNCTION(gsl_vector,alloc)(v->size + size2);
|
2009
|
-
vv = FUNCTION(gsl_vector,subvector)(vnew, 0, v->size);
|
2010
|
-
FUNCTION(gsl_vector,memcpy)(&vv.vector, v);
|
2011
|
-
for (i = 0; i < size2; i++) {
|
2012
|
-
FUNCTION(gsl_vector,set)(vnew, v->size + i, beg);
|
2013
|
-
beg += step;
|
2014
|
-
}
|
2015
|
-
} else if (rb_obj_is_kind_of(other, GSL_TYPE(cgsl_vector))) {
|
2016
|
-
Data_Get_Struct(other, GSL_TYPE(gsl_vector), v2);
|
2017
|
-
size2 = v2->size;
|
2018
|
-
vnew = FUNCTION(gsl_vector,alloc)(v->size + size2);
|
2019
|
-
vv = FUNCTION(gsl_vector,subvector)(vnew, 0, v->size);
|
2020
|
-
FUNCTION(gsl_vector,memcpy)(&vv.vector, v);
|
2021
|
-
vv = FUNCTION(gsl_vector,subvector)(vnew, v->size, size2);
|
2022
|
-
FUNCTION(gsl_vector,memcpy)(&vv.vector, v2);
|
2023
|
-
} else {
|
2024
|
-
rb_raise(rb_eTypeError, "wrong argument type %s (Array, Numeric, Range, or %s expected)",
|
2025
|
-
rb_class2name(CLASS_OF(other)), rb_class2name(GSL_TYPE(cgsl_vector)));
|
2026
|
-
}
|
2027
|
-
break;
|
2028
|
-
}
|
2029
|
-
|
2030
|
-
return Data_Wrap_Struct(VEC_ROW_COL(obj), 0, FUNCTION(gsl_vector,free), vnew);
|
2031
|
-
}
|
2032
|
-
|
2033
|
-
void FUNCTION(mygsl_vector,diff)(GSL_TYPE(gsl_vector) *vdst,
|
2034
|
-
GSL_TYPE(gsl_vector) *vsrc, size_t n)
|
2035
|
-
{
|
2036
|
-
BASE a, b;
|
2037
|
-
int coef, fac, nn, ff;
|
2038
|
-
size_t i, k;
|
2039
|
-
nn = gsl_sf_fact((unsigned int) n);
|
2040
|
-
if (GSL_IS_EVEN(n)) ff = 1;
|
2041
|
-
else ff = -1;
|
2042
|
-
for (i = 0; i < vsrc->size-n; i++) {
|
2043
|
-
fac = ff;
|
2044
|
-
a = 0;
|
2045
|
-
for (k = 0; k <= n; k++) {
|
2046
|
-
b = FUNCTION(gsl_vector,get)(vsrc, i+k);
|
2047
|
-
coef = nn/gsl_sf_fact(k)/gsl_sf_fact(n-k);
|
2048
|
-
a += fac*coef*b;
|
2049
|
-
fac *= -1;
|
2050
|
-
}
|
2051
|
-
FUNCTION(gsl_vector,set)(vdst, i, a);
|
2052
|
-
}
|
2053
|
-
}
|
2054
|
-
|
2055
|
-
static VALUE FUNCTION(rb_gsl_vector,diff)(int argc, VALUE *argv, VALUE obj)
|
2056
|
-
{
|
2057
|
-
GSL_TYPE(gsl_vector) *v = NULL, *vnew = NULL;
|
2058
|
-
size_t n;
|
2059
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
2060
|
-
switch (argc) {
|
2061
|
-
case 0:
|
2062
|
-
n = 1;
|
2063
|
-
break;
|
2064
|
-
case 1:
|
2065
|
-
n = FIX2INT(argv[0]);
|
2066
|
-
break;
|
2067
|
-
default:
|
2068
|
-
rb_raise(rb_eArgError, "wrong number of arguments (%d for 0 or 1)", argc);
|
2069
|
-
break;
|
2070
|
-
}
|
2071
|
-
if (n <= 0) return obj;
|
2072
|
-
if (v->size <= n) return obj;
|
2073
|
-
vnew = FUNCTION(gsl_vector,alloc)(v->size - n);
|
2074
|
-
FUNCTION(mygsl_vector,diff)(vnew, v, n);
|
2075
|
-
return Data_Wrap_Struct(GSL_TYPE(cgsl_vector), 0, FUNCTION(gsl_vector,free), vnew);
|
2076
|
-
}
|
2077
|
-
|
2078
|
-
static VALUE FUNCTION(rb_gsl_vector,test)(VALUE obj, int (*f)(const double))
|
2079
|
-
{
|
2080
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
2081
|
-
gsl_vector_int *vi = NULL;
|
2082
|
-
size_t i;
|
2083
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
2084
|
-
vi = gsl_vector_int_alloc(v->size);
|
2085
|
-
for (i = 0; i < v->size; i++)
|
2086
|
-
gsl_vector_int_set(vi, i, (*f)(FUNCTION(gsl_vector,get)(v, i)));
|
2087
|
-
return Data_Wrap_Struct(cgsl_vector_int, 0, gsl_vector_int_free, vi);
|
2088
|
-
}
|
2089
|
-
|
2090
|
-
static VALUE FUNCTION(rb_gsl_vector,test2)(VALUE obj, int (*f)(const double))
|
2091
|
-
{
|
2092
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
2093
|
-
VALUE ary;
|
2094
|
-
size_t i;
|
2095
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
2096
|
-
ary = rb_ary_new2(v->size);
|
2097
|
-
for (i = 0; i < v->size; i++) {
|
2098
|
-
if ((*f)(FUNCTION(gsl_vector,get)(v, i)))
|
2099
|
-
rb_ary_store(ary, i, Qtrue);
|
2100
|
-
else
|
2101
|
-
rb_ary_store(ary, i, Qfalse);
|
2102
|
-
}
|
2103
|
-
return ary;
|
2104
|
-
}
|
2105
|
-
|
2106
|
-
static VALUE FUNCTION(rb_gsl_vector,isnan)(VALUE obj)
|
2107
|
-
{
|
2108
|
-
return FUNCTION(rb_gsl_vector,test)(obj, gsl_isnan);
|
2109
|
-
}
|
2110
|
-
|
2111
|
-
static VALUE FUNCTION(rb_gsl_vector,isinf)(VALUE obj)
|
2112
|
-
{
|
2113
|
-
return FUNCTION(rb_gsl_vector,test)(obj, gsl_isinf);
|
2114
|
-
}
|
2115
|
-
|
2116
|
-
static VALUE FUNCTION(rb_gsl_vector,finite)(VALUE obj)
|
2117
|
-
{
|
2118
|
-
return FUNCTION(rb_gsl_vector,test)(obj, gsl_finite);
|
2119
|
-
}
|
2120
|
-
|
2121
|
-
static VALUE FUNCTION(rb_gsl_vector,isnan2)(VALUE obj)
|
2122
|
-
{
|
2123
|
-
return FUNCTION(rb_gsl_vector,test2)(obj, gsl_isnan);
|
2124
|
-
}
|
2125
|
-
|
2126
|
-
static VALUE FUNCTION(rb_gsl_vector,isinf2)(VALUE obj)
|
2127
|
-
{
|
2128
|
-
return FUNCTION(rb_gsl_vector,test2)(obj, gsl_isinf);
|
2129
|
-
}
|
2130
|
-
|
2131
|
-
static VALUE FUNCTION(rb_gsl_vector,finite2)(VALUE obj)
|
2132
|
-
{
|
2133
|
-
return FUNCTION(rb_gsl_vector,test2)(obj, gsl_finite);
|
2134
|
-
}
|
2135
|
-
|
2136
|
-
static VALUE FUNCTION(rb_gsl_vector,delete_at)(VALUE obj, VALUE ii)
|
2137
|
-
{
|
2138
|
-
int i2;
|
2139
|
-
size_t i;
|
2140
|
-
GSL_TYPE(gsl_vector) *v;
|
2141
|
-
BASE x;
|
2142
|
-
if (rb_obj_is_kind_of(obj,QUALIFIED_VIEW(cgsl_vector,view)))
|
2143
|
-
rb_raise(rb_eRuntimeError, "prohibited for %s", rb_class2name(CLASS_OF(obj)));
|
2144
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
2145
|
-
if (v->stride != 1) rb_raise(rb_eRuntimeError, "vector must have stride 1");
|
2146
|
-
if (v->size == 0) return Qnil;
|
2147
|
-
CHECK_FIXNUM(ii);
|
2148
|
-
i2 = FIX2INT(ii);
|
2149
|
-
if (i2 < 0) {
|
2150
|
-
i2 += v->size;
|
2151
|
-
}
|
2152
|
-
if (i2 < 0 || i2 > (int) (v->size-1)) return Qnil;
|
2153
|
-
i = (size_t) i2;
|
2154
|
-
x = FUNCTION(gsl_vector,get)(v, i);
|
2155
|
-
memmove(v->data+i, v->data+i+1, sizeof(BASE)*(v->size-1-i));
|
2156
|
-
v->size -= 1;
|
2157
|
-
return C_TO_VALUE(x);
|
2158
|
-
}
|
2159
|
-
|
2160
|
-
static VALUE FUNCTION(rb_gsl_vector,delete_if)(VALUE obj)
|
2161
|
-
{
|
2162
|
-
GSL_TYPE(gsl_vector) *v;
|
2163
|
-
BASE x;
|
2164
|
-
VALUE val;
|
2165
|
-
size_t i, count = 0;
|
2166
|
-
if (!rb_block_given_p()) rb_raise(rb_eRuntimeError, "block is not given");
|
2167
|
-
if (rb_obj_is_kind_of(obj,QUALIFIED_VIEW(cgsl_vector,view)))
|
2168
|
-
rb_raise(rb_eRuntimeError, "prohibited for %s", rb_class2name(CLASS_OF(obj)));
|
2169
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
2170
|
-
if (v->stride != 1) rb_raise(rb_eRuntimeError, "vector must have stride 1");
|
2171
|
-
for (i = 0; i < v->size; i++) {
|
2172
|
-
x = FUNCTION(gsl_vector,get)(v, i);
|
2173
|
-
val = rb_yield(C_TO_VALUE(x));
|
2174
|
-
if(RTEST(val)) {
|
2175
|
-
count++;
|
2176
|
-
} else if(count > 0) {
|
2177
|
-
FUNCTION(gsl_vector,set)(v, i-count, x);
|
2178
|
-
}
|
2179
|
-
}
|
2180
|
-
v->size -= count;
|
2181
|
-
return obj;
|
2182
|
-
}
|
2183
|
-
|
2184
|
-
static VALUE FUNCTION(rb_gsl_vector,delete)(VALUE obj, VALUE yy)
|
2185
|
-
{
|
2186
|
-
GSL_TYPE(gsl_vector) *v;
|
2187
|
-
BASE x, y;
|
2188
|
-
size_t i, count = 0;
|
2189
|
-
y = NUMCONV(yy);
|
2190
|
-
if (rb_obj_is_kind_of(obj,QUALIFIED_VIEW(cgsl_vector,view)))
|
2191
|
-
rb_raise(rb_eRuntimeError, "prohibited for %s", rb_class2name(CLASS_OF(obj)));
|
2192
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
2193
|
-
if (v->stride != 1) rb_raise(rb_eRuntimeError, "vector must have stride 1");
|
2194
|
-
if (v->size == 0) return obj;
|
2195
|
-
for (i = 0; i < v->size; i++) {
|
2196
|
-
x = FUNCTION(gsl_vector,get)(v, i);
|
2197
|
-
if (x == y) {
|
2198
|
-
count++;
|
2199
|
-
} else if(count > 0) {
|
2200
|
-
FUNCTION(gsl_vector,set)(v, i-count, x);
|
2201
|
-
}
|
2202
|
-
}
|
2203
|
-
v->size -= count;
|
2204
|
-
return count ? (VALUE) y : Qnil;
|
2205
|
-
}
|
2206
|
-
|
2207
|
-
/* singleton method */
|
2208
|
-
#ifdef BASE_INT
|
2209
|
-
#define FORMAT_TMP "%d"
|
2210
|
-
#else
|
2211
|
-
#define FORMAT_TMP "%lf"
|
2212
|
-
#endif
|
2213
|
-
static VALUE FUNCTION(rb_gsl_vector,filescan)(VALUE klass, VALUE file)
|
2214
|
-
{
|
2215
|
-
FILE *fp = NULL;
|
2216
|
-
int nn, k;
|
2217
|
-
char buf[1024], filename[1024];
|
2218
|
-
size_t n, lines, i, j, ii = 0, jj;
|
2219
|
-
long pos;
|
2220
|
-
GSL_TYPE(gsl_vector) **x;
|
2221
|
-
BASE val;
|
2222
|
-
VALUE ary;
|
2223
|
-
Check_Type(file, T_STRING);
|
2224
|
-
strcpy(filename, STR2CSTR(file));
|
2225
|
-
sprintf(buf, "sed '/^#/d' %s | wc", filename);
|
2226
|
-
if ((fp = popen(buf, "r")) == NULL)
|
2227
|
-
rb_raise(rb_eIOError, "popen failed.");
|
2228
|
-
if (fgets(buf, 1024, fp) == NULL)
|
2229
|
-
rb_sys_fail(0);
|
2230
|
-
pclose(fp);
|
2231
|
-
sscanf(buf, "%d", &nn);
|
2232
|
-
lines = (size_t) nn; /* vector length */
|
2233
|
-
if ((fp = fopen(filename, "r")) == NULL)
|
2234
|
-
rb_raise(rb_eIOError, "cannot open file %s.", filename);
|
2235
|
-
while (1) {
|
2236
|
-
if (fgets(buf, 1024, fp) == NULL) /* read the first line to count number of columns */
|
2237
|
-
rb_sys_fail(0);
|
2238
|
-
if (buf[0] == '#') continue;
|
2239
|
-
else break;
|
2240
|
-
}
|
2241
|
-
n = count_columns(buf); /* number of vectors to be created */
|
2242
|
-
x = (GSL_TYPE(gsl_vector)**)xmalloc(sizeof(GSL_TYPE(gsl_vector)*)*n);
|
2243
|
-
ary = rb_ary_new2(n);
|
2244
|
-
for (j = 0; j < n; j++) {
|
2245
|
-
x[j] = FUNCTION(gsl_vector,alloc)(lines);
|
2246
|
-
rb_ary_store(ary, j, Data_Wrap_Struct(GSL_TYPE(cgsl_vector), 0, FUNCTION(gsl_vector,free), x[j]));
|
2247
|
-
}
|
2248
|
-
rewind(fp);
|
2249
|
-
for (i = 0, ii = 0; ii < lines; i++) {
|
2250
|
-
pos = ftell(fp);
|
2251
|
-
if (fgets(buf, 1024, fp) == NULL)
|
2252
|
-
rb_sys_fail(0);
|
2253
|
-
if (buf[0] == '#') continue;
|
2254
|
-
fseek(fp, pos, SEEK_SET);
|
2255
|
-
for (j = 0, jj = 0; jj < n; j++) {
|
2256
|
-
k = fscanf(fp, FORMAT_TMP, &val);
|
2257
|
-
if (k != 1) continue;
|
2258
|
-
FUNCTION(gsl_vector,set)(x[jj++], ii, val);
|
2259
|
-
}
|
2260
|
-
ii += 1;
|
2261
|
-
}
|
2262
|
-
fclose(fp);
|
2263
|
-
free(x);
|
2264
|
-
return ary;
|
2265
|
-
}
|
2266
|
-
#undef FORMAT_TMP
|
2267
|
-
|
2268
|
-
static int FUNCTION(gsl_vector,eq)(const GSL_TYPE(gsl_vector) *a,
|
2269
|
-
const GSL_TYPE(gsl_vector) *b,
|
2270
|
-
gsl_block_uchar *c)
|
2271
|
-
{
|
2272
|
-
size_t i;
|
2273
|
-
BASE x, y;
|
2274
|
-
if (a->size != b->size) return -1;
|
2275
|
-
if (a->size != c->size) return -2;
|
2276
|
-
for (i = 0; i < a->size; i++) {
|
2277
|
-
x = a->data[i*a->stride];
|
2278
|
-
y = b->data[i*b->stride];
|
2279
|
-
c->data[i] = (x > y || x < y) ? 0 : 1;
|
2280
|
-
}
|
2281
|
-
return 0;
|
2282
|
-
}
|
2283
|
-
|
2284
|
-
static int FUNCTION(gsl_vector,ne)(const GSL_TYPE(gsl_vector) *a,
|
2285
|
-
const GSL_TYPE(gsl_vector) *b,
|
2286
|
-
gsl_block_uchar *c)
|
2287
|
-
{
|
2288
|
-
size_t i;
|
2289
|
-
BASE x, y;
|
2290
|
-
if (a->size != b->size) return -1;
|
2291
|
-
if (a->size != c->size) return -2;
|
2292
|
-
for (i = 0; i < a->size; i++) {
|
2293
|
-
x = a->data[i*a->stride];
|
2294
|
-
y = b->data[i*b->stride];
|
2295
|
-
c->data[i] = (x > y || x < y) ? 1 : 0;
|
2296
|
-
}
|
2297
|
-
return 0;
|
2298
|
-
}
|
2299
|
-
|
2300
|
-
static int FUNCTION(gsl_vector,gt)(const GSL_TYPE(gsl_vector) *a,
|
2301
|
-
const GSL_TYPE(gsl_vector) *b,
|
2302
|
-
gsl_block_uchar *c)
|
2303
|
-
{
|
2304
|
-
size_t i;
|
2305
|
-
BASE x, y;
|
2306
|
-
if (a->size != b->size) return -1;
|
2307
|
-
if (a->size != c->size) return -2;
|
2308
|
-
for (i = 0; i < a->size; i++) {
|
2309
|
-
x = a->data[i*a->stride];
|
2310
|
-
y = b->data[i*b->stride];
|
2311
|
-
c->data[i] = (x > y) ? 1 : 0;
|
2312
|
-
}
|
2313
|
-
return 0;
|
2314
|
-
}
|
2315
|
-
|
2316
|
-
static int FUNCTION(gsl_vector,ge)(const GSL_TYPE(gsl_vector) *a,
|
2317
|
-
const GSL_TYPE(gsl_vector) *b,
|
2318
|
-
gsl_block_uchar *c)
|
2319
|
-
{
|
2320
|
-
size_t i;
|
2321
|
-
BASE x, y;
|
2322
|
-
if (a->size != b->size) return -1;
|
2323
|
-
if (a->size != c->size) return -2;
|
2324
|
-
for (i = 0; i < a->size; i++) {
|
2325
|
-
x = a->data[i*a->stride];
|
2326
|
-
y = b->data[i*b->stride];
|
2327
|
-
c->data[i] = (x >= y) ? 1 : 0;
|
2328
|
-
}
|
2329
|
-
return 0;
|
2330
|
-
}
|
2331
|
-
|
2332
|
-
static int FUNCTION(gsl_vector,lt)(const GSL_TYPE(gsl_vector) *a,
|
2333
|
-
const GSL_TYPE(gsl_vector) *b,
|
2334
|
-
gsl_block_uchar *c)
|
2335
|
-
{
|
2336
|
-
size_t i;
|
2337
|
-
BASE x, y;
|
2338
|
-
if (a->size != b->size) return -1;
|
2339
|
-
if (a->size != c->size) return -2;
|
2340
|
-
for (i = 0; i < a->size; i++) {
|
2341
|
-
x = a->data[i*a->stride];
|
2342
|
-
y = b->data[i*b->stride];
|
2343
|
-
c->data[i] = (x < y) ? 1 : 0;
|
2344
|
-
}
|
2345
|
-
return 0;
|
2346
|
-
}
|
2347
|
-
|
2348
|
-
static int FUNCTION(gsl_vector,le)(const GSL_TYPE(gsl_vector) *a,
|
2349
|
-
const GSL_TYPE(gsl_vector) *b,
|
2350
|
-
gsl_block_uchar *c)
|
2351
|
-
{
|
2352
|
-
size_t i;
|
2353
|
-
BASE x, y;
|
2354
|
-
if (a->size != b->size) return -1;
|
2355
|
-
if (a->size != c->size) return -2;
|
2356
|
-
for (i = 0; i < a->size; i++) {
|
2357
|
-
x = a->data[i*a->stride];
|
2358
|
-
y = b->data[i*b->stride];
|
2359
|
-
c->data[i] = (x <= y) ? 1 : 0;
|
2360
|
-
}
|
2361
|
-
return 0;
|
2362
|
-
}
|
2363
|
-
|
2364
|
-
static int FUNCTION(gsl_vector,and)(const GSL_TYPE(gsl_vector) *a,
|
2365
|
-
const GSL_TYPE(gsl_vector) *b,
|
2366
|
-
gsl_block_uchar *c)
|
2367
|
-
{
|
2368
|
-
size_t i;
|
2369
|
-
BASE x, y;
|
2370
|
-
if (a->size != b->size) return -1;
|
2371
|
-
if (a->size != c->size) return -2;
|
2372
|
-
for (i = 0; i < a->size; i++) {
|
2373
|
-
x = a->data[i*a->stride];
|
2374
|
-
y = b->data[i*b->stride];
|
2375
|
-
c->data[i] = (x != 0 && y != 0) ? 1 : 0;
|
2376
|
-
}
|
2377
|
-
return 0;
|
2378
|
-
}
|
2379
|
-
|
2380
|
-
static int FUNCTION(gsl_vector,or)(const GSL_TYPE(gsl_vector) *a,
|
2381
|
-
const GSL_TYPE(gsl_vector) *b,
|
2382
|
-
gsl_block_uchar *c)
|
2383
|
-
{
|
2384
|
-
size_t i;
|
2385
|
-
BASE x, y;
|
2386
|
-
if (a->size != b->size) return -1;
|
2387
|
-
if (a->size != c->size) return -2;
|
2388
|
-
for (i = 0; i < a->size; i++) {
|
2389
|
-
x = a->data[i*a->stride];
|
2390
|
-
y = b->data[i*b->stride];
|
2391
|
-
c->data[i] = (x != 0 || y != 0) ? 1 : 0;
|
2392
|
-
}
|
2393
|
-
return 0;
|
2394
|
-
}
|
2395
|
-
|
2396
|
-
static int FUNCTION(gsl_vector,xor)(const GSL_TYPE(gsl_vector) *a,
|
2397
|
-
const GSL_TYPE(gsl_vector) *b,
|
2398
|
-
gsl_block_uchar *c)
|
2399
|
-
{
|
2400
|
-
size_t i;
|
2401
|
-
BASE x, y;
|
2402
|
-
if (a->size != b->size) return -1;
|
2403
|
-
if (a->size != c->size) return -2;
|
2404
|
-
for (i = 0; i < a->size; i++) {
|
2405
|
-
x = a->data[i*a->stride];
|
2406
|
-
y = b->data[i*b->stride];
|
2407
|
-
c->data[i] = ((x != 0) == (y != 0)) ? 0 : 1;
|
2408
|
-
}
|
2409
|
-
return 0;
|
2410
|
-
}
|
2411
|
-
|
2412
|
-
static int FUNCTION(gsl_vector,eq2)(const GSL_TYPE(gsl_vector) *a,
|
2413
|
-
BASE b, gsl_block_uchar *c)
|
2414
|
-
{
|
2415
|
-
size_t i;
|
2416
|
-
BASE x, y;
|
2417
|
-
if (a->size != c->size) return -2;
|
2418
|
-
for (i = 0; i < a->size; i++) {
|
2419
|
-
x = a->data[i*a->stride];
|
2420
|
-
y = b;
|
2421
|
-
c->data[i] = (x > y || x < y) ? 0 : 1;
|
2422
|
-
}
|
2423
|
-
return 0;
|
2424
|
-
}
|
2425
|
-
|
2426
|
-
static int FUNCTION(gsl_vector,ne2)(const GSL_TYPE(gsl_vector) *a,
|
2427
|
-
BASE b,
|
2428
|
-
gsl_block_uchar *c)
|
2429
|
-
{
|
2430
|
-
size_t i;
|
2431
|
-
BASE x, y;
|
2432
|
-
if (a->size != c->size) return -2;
|
2433
|
-
for (i = 0; i < a->size; i++) {
|
2434
|
-
x = a->data[i*a->stride];
|
2435
|
-
y = b;
|
2436
|
-
c->data[i] = (x > y || x < y) ? 1 : 0;
|
2437
|
-
}
|
2438
|
-
return 0;
|
2439
|
-
}
|
2440
|
-
|
2441
|
-
static int FUNCTION(gsl_vector,gt2)(const GSL_TYPE(gsl_vector) *a,
|
2442
|
-
BASE b,
|
2443
|
-
gsl_block_uchar *c)
|
2444
|
-
{
|
2445
|
-
size_t i;
|
2446
|
-
BASE x, y;
|
2447
|
-
if (a->size != c->size) return -2;
|
2448
|
-
for (i = 0; i < a->size; i++) {
|
2449
|
-
x = a->data[i*a->stride];
|
2450
|
-
y = b;
|
2451
|
-
c->data[i] = (x > y) ? 1 : 0;
|
2452
|
-
}
|
2453
|
-
return 0;
|
2454
|
-
}
|
2455
|
-
|
2456
|
-
static int FUNCTION(gsl_vector,ge2)(const GSL_TYPE(gsl_vector) *a,
|
2457
|
-
BASE b,
|
2458
|
-
gsl_block_uchar *c)
|
2459
|
-
{
|
2460
|
-
size_t i;
|
2461
|
-
BASE x, y;
|
2462
|
-
if (a->size != c->size) return -2;
|
2463
|
-
for (i = 0; i < a->size; i++) {
|
2464
|
-
x = a->data[i*a->stride];
|
2465
|
-
y = b;
|
2466
|
-
c->data[i] = (x >= y) ? 1 : 0;
|
2467
|
-
}
|
2468
|
-
return 0;
|
2469
|
-
}
|
2470
|
-
|
2471
|
-
static int FUNCTION(gsl_vector,lt2)(const GSL_TYPE(gsl_vector) *a,
|
2472
|
-
BASE b,
|
2473
|
-
gsl_block_uchar *c)
|
2474
|
-
{
|
2475
|
-
size_t i;
|
2476
|
-
BASE x, y;
|
2477
|
-
if (a->size != c->size) return -2;
|
2478
|
-
for (i = 0; i < a->size; i++) {
|
2479
|
-
x = a->data[i*a->stride];
|
2480
|
-
y = b;
|
2481
|
-
c->data[i] = (x < y) ? 1 : 0;
|
2482
|
-
}
|
2483
|
-
return 0;
|
2484
|
-
}
|
2485
|
-
|
2486
|
-
static int FUNCTION(gsl_vector,le2)(const GSL_TYPE(gsl_vector) *a,
|
2487
|
-
BASE b,
|
2488
|
-
gsl_block_uchar *c)
|
2489
|
-
{
|
2490
|
-
size_t i;
|
2491
|
-
BASE x, y;
|
2492
|
-
if (a->size != c->size) return -2;
|
2493
|
-
for (i = 0; i < a->size; i++) {
|
2494
|
-
x = a->data[i*a->stride];
|
2495
|
-
y = b;
|
2496
|
-
c->data[i] = (x <= y) ? 1 : 0;
|
2497
|
-
}
|
2498
|
-
return 0;
|
2499
|
-
}
|
2500
|
-
|
2501
|
-
static int FUNCTION(gsl_vector,and2)(const GSL_TYPE(gsl_vector) *a,
|
2502
|
-
BASE b,
|
2503
|
-
gsl_block_uchar *c)
|
2504
|
-
{
|
2505
|
-
size_t i;
|
2506
|
-
BASE x, y;
|
2507
|
-
if (a->size != c->size) return -2;
|
2508
|
-
for (i = 0; i < a->size; i++) {
|
2509
|
-
x = a->data[i*a->stride];
|
2510
|
-
y = b;
|
2511
|
-
c->data[i] = (x != 0 && y != 0) ? 1 : 0;
|
2512
|
-
}
|
2513
|
-
return 0;
|
2514
|
-
}
|
2515
|
-
|
2516
|
-
static int FUNCTION(gsl_vector,or2)(const GSL_TYPE(gsl_vector) *a,
|
2517
|
-
BASE b,
|
2518
|
-
gsl_block_uchar *c)
|
2519
|
-
{
|
2520
|
-
size_t i;
|
2521
|
-
BASE x, y;
|
2522
|
-
if (a->size != c->size) return -2;
|
2523
|
-
for (i = 0; i < a->size; i++) {
|
2524
|
-
x = a->data[i*a->stride];
|
2525
|
-
y = b;
|
2526
|
-
c->data[i] = (x != 0 || y != 0) ? 1 : 0;
|
2527
|
-
}
|
2528
|
-
return 0;
|
2529
|
-
}
|
2530
|
-
|
2531
|
-
static int FUNCTION(gsl_vector,xor2)(const GSL_TYPE(gsl_vector) *a,
|
2532
|
-
BASE b,
|
2533
|
-
gsl_block_uchar *c)
|
2534
|
-
{
|
2535
|
-
size_t i;
|
2536
|
-
BASE x, y;
|
2537
|
-
if (a->size != c->size) return -2;
|
2538
|
-
for (i = 0; i < a->size; i++) {
|
2539
|
-
x = a->data[i*a->stride];
|
2540
|
-
y = b;
|
2541
|
-
c->data[i] = ((x != 0) == (y != 0)) ? 0 : 1;
|
2542
|
-
}
|
2543
|
-
return 0;
|
2544
|
-
}
|
2545
|
-
|
2546
|
-
|
2547
|
-
static VALUE FUNCTION(rb_gsl_vector,compare)(VALUE aa, VALUE bb,
|
2548
|
-
int (*cmp)(const GSL_TYPE (gsl_vector)*,
|
2549
|
-
const GSL_TYPE (gsl_vector)*,
|
2550
|
-
gsl_block_uchar*),
|
2551
|
-
int (*cmp2)(const GSL_TYPE (gsl_vector)*,
|
2552
|
-
BASE,
|
2553
|
-
gsl_block_uchar*))
|
2554
|
-
{
|
2555
|
-
GSL_TYPE(gsl_vector) *a, *b;
|
2556
|
-
/* gsl_vector_int *c;*/
|
2557
|
-
gsl_block_uchar *c;
|
2558
|
-
//int status;
|
2559
|
-
Data_Get_Struct(aa, GSL_TYPE(gsl_vector), a);
|
2560
|
-
c = gsl_block_uchar_alloc(a->size);
|
2561
|
-
if (VEC_P(bb)) {
|
2562
|
-
Data_Get_Struct(bb, GSL_TYPE(gsl_vector), b);
|
2563
|
-
if (a->size != b->size)
|
2564
|
-
rb_raise(rb_eRuntimeError, "Vector size mismatch, %d and %d", (int) a->size,
|
2565
|
-
(int) b->size);
|
2566
|
-
/*status =*/ (*cmp)(a, b, c);
|
2567
|
-
} else {
|
2568
|
-
/*status =*/ (*cmp2)(a, NUMCONV(bb), c);
|
2569
|
-
}
|
2570
|
-
return Data_Wrap_Struct(cgsl_block_uchar, 0, gsl_block_uchar_free, c);
|
2571
|
-
}
|
2572
|
-
|
2573
|
-
static VALUE FUNCTION(rb_gsl_vector,eq)(VALUE aa, VALUE bb)
|
2574
|
-
{
|
2575
|
-
return FUNCTION(rb_gsl_vector,compare)(aa, bb, FUNCTION(gsl_vector,eq),
|
2576
|
-
FUNCTION(gsl_vector,eq2));
|
2577
|
-
}
|
2578
|
-
|
2579
|
-
static VALUE FUNCTION(rb_gsl_vector,ne)(VALUE aa, VALUE bb)
|
2580
|
-
{
|
2581
|
-
return FUNCTION(rb_gsl_vector,compare)(aa, bb, FUNCTION(gsl_vector,ne),
|
2582
|
-
FUNCTION(gsl_vector,ne2));
|
2583
|
-
}
|
2584
|
-
|
2585
|
-
static VALUE FUNCTION(rb_gsl_vector,gt)(VALUE aa, VALUE bb)
|
2586
|
-
{
|
2587
|
-
return FUNCTION(rb_gsl_vector,compare)(aa, bb, FUNCTION(gsl_vector,gt),
|
2588
|
-
FUNCTION(gsl_vector,gt2));
|
2589
|
-
}
|
2590
|
-
|
2591
|
-
static VALUE FUNCTION(rb_gsl_vector,ge)(VALUE aa, VALUE bb)
|
2592
|
-
{
|
2593
|
-
return FUNCTION(rb_gsl_vector,compare)(aa, bb, FUNCTION(gsl_vector,ge),
|
2594
|
-
FUNCTION(gsl_vector,ge2));
|
2595
|
-
}
|
2596
|
-
|
2597
|
-
static VALUE FUNCTION(rb_gsl_vector,lt)(VALUE aa, VALUE bb)
|
2598
|
-
{
|
2599
|
-
return FUNCTION(rb_gsl_vector,compare)(aa, bb, FUNCTION(gsl_vector,lt),
|
2600
|
-
FUNCTION(gsl_vector,lt2));
|
2601
|
-
}
|
2602
|
-
|
2603
|
-
static VALUE FUNCTION(rb_gsl_vector,le)(VALUE aa, VALUE bb)
|
2604
|
-
{
|
2605
|
-
return FUNCTION(rb_gsl_vector,compare)(aa, bb, FUNCTION(gsl_vector,le),
|
2606
|
-
FUNCTION(gsl_vector,le2));
|
2607
|
-
}
|
2608
|
-
|
2609
|
-
static VALUE FUNCTION(rb_gsl_vector,and)(VALUE aa, VALUE bb)
|
2610
|
-
{
|
2611
|
-
return FUNCTION(rb_gsl_vector,compare)(aa, bb, FUNCTION(gsl_vector,and),
|
2612
|
-
FUNCTION(gsl_vector,and2));
|
2613
|
-
}
|
2614
|
-
|
2615
|
-
static VALUE FUNCTION(rb_gsl_vector,or)(VALUE aa, VALUE bb)
|
2616
|
-
{
|
2617
|
-
return FUNCTION(rb_gsl_vector,compare)(aa, bb, FUNCTION(gsl_vector,or),
|
2618
|
-
FUNCTION(gsl_vector,or2));
|
2619
|
-
}
|
2620
|
-
|
2621
|
-
static VALUE FUNCTION(rb_gsl_vector,xor)(VALUE aa, VALUE bb)
|
2622
|
-
{
|
2623
|
-
return FUNCTION(rb_gsl_vector,compare)(aa, bb, FUNCTION(gsl_vector,xor),
|
2624
|
-
FUNCTION(gsl_vector,xor2));
|
2625
|
-
}
|
2626
|
-
|
2627
|
-
static VALUE FUNCTION(rb_gsl_vector,not)(VALUE obj)
|
2628
|
-
{
|
2629
|
-
GSL_TYPE(gsl_vector) *v;
|
2630
|
-
gsl_block_uchar *vv;
|
2631
|
-
size_t i;
|
2632
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
2633
|
-
vv = gsl_block_uchar_alloc(v->size);
|
2634
|
-
for (i = 0; i < v->size; i++) vv->data[i] = (v->data[i*v->stride] != 0) ? 0 : 1;
|
2635
|
-
return Data_Wrap_Struct(cgsl_block_uchar, 0, gsl_block_uchar_free, vv);
|
2636
|
-
}
|
2637
|
-
|
2638
|
-
static VALUE FUNCTION(rb_gsl_vector,any)(VALUE obj)
|
2639
|
-
{
|
2640
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
2641
|
-
size_t i;
|
2642
|
-
|
2643
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
2644
|
-
if (rb_block_given_p()) {
|
2645
|
-
for (i = 0; i < v->size; i++) {
|
2646
|
-
if (rb_yield(C_TO_VALUE(FUNCTION(gsl_vector,get)(v, i)))) return INT2FIX(1);
|
2647
|
-
}
|
2648
|
-
return INT2FIX(0);
|
2649
|
-
} else {
|
2650
|
-
if (FUNCTION(gsl_vector,isnull)(v)) return INT2FIX(0);
|
2651
|
-
return INT2FIX(1);
|
2652
|
-
}
|
2653
|
-
}
|
2654
|
-
|
2655
|
-
static VALUE FUNCTION(rb_gsl_vector,any2)(VALUE obj)
|
2656
|
-
{
|
2657
|
-
GSL_TYPE(gsl_vector) *v = NULL;
|
2658
|
-
size_t i;
|
2659
|
-
|
2660
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
2661
|
-
if (rb_block_given_p()) {
|
2662
|
-
for (i = 0; i < v->size; i++)
|
2663
|
-
if (rb_yield(C_TO_VALUE(FUNCTION(gsl_vector,get)(v, i)))) return Qtrue;
|
2664
|
-
return Qfalse;
|
2665
|
-
} else {
|
2666
|
-
for (i = 0; i < v->size; i++)
|
2667
|
-
if (v->data[i*v->stride]) return Qtrue;
|
2668
|
-
return Qfalse;
|
2669
|
-
}
|
2670
|
-
}
|
2671
|
-
|
2672
|
-
static VALUE FUNCTION(rb_gsl_vector,none)(VALUE obj)
|
2673
|
-
{
|
2674
|
-
GSL_TYPE(gsl_vector) *v;
|
2675
|
-
size_t i;
|
2676
|
-
|
2677
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
2678
|
-
if (rb_block_given_p()) {
|
2679
|
-
for (i = 0; i < v->size; i++)
|
2680
|
-
if (rb_yield(C_TO_VALUE(FUNCTION(gsl_vector,get)(v, i)))) return Qfalse;
|
2681
|
-
return Qtrue;
|
2682
|
-
} else {
|
2683
|
-
for (i = 0; i < v->size; i++)
|
2684
|
-
if (v->data[i*v->stride]) return Qfalse;
|
2685
|
-
return Qtrue;
|
2686
|
-
}
|
2687
|
-
}
|
2688
|
-
|
2689
|
-
static VALUE FUNCTION(rb_gsl_vector,all)(VALUE obj)
|
2690
|
-
{
|
2691
|
-
GSL_TYPE(gsl_vector) *v;
|
2692
|
-
size_t i;
|
2693
|
-
|
2694
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
2695
|
-
if (rb_block_given_p()) {
|
2696
|
-
for (i = 0; i < v->size; i++)
|
2697
|
-
if (!rb_yield(C_TO_VALUE(FUNCTION(gsl_vector,get)(v, i)))) return Qfalse;
|
2698
|
-
return Qtrue;
|
2699
|
-
} else {
|
2700
|
-
for (i = 0; i < v->size; i++)
|
2701
|
-
if (!v->data[i*v->stride]) return Qfalse;
|
2702
|
-
return Qtrue;
|
2703
|
-
}
|
2704
|
-
}
|
2705
|
-
|
2706
|
-
static VALUE FUNCTION(rb_gsl_vector,where)(VALUE obj)
|
2707
|
-
{
|
2708
|
-
GSL_TYPE(gsl_vector) *v;
|
2709
|
-
gsl_index *vv;
|
2710
|
-
gsl_block_uchar *btmp = NULL;
|
2711
|
-
size_t i, j, n = 0;
|
2712
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
2713
|
-
/* count true elements */
|
2714
|
-
if (rb_block_given_p()) {
|
2715
|
-
btmp = gsl_block_uchar_alloc(v->size);
|
2716
|
-
for (i = 0; i < v->size; i++) {
|
2717
|
-
if (rb_yield(C_TO_VALUE(FUNCTION(gsl_vector,get)(v, i)))) {
|
2718
|
-
btmp->data[i] = 1;
|
2719
|
-
n++;
|
2720
|
-
} else {
|
2721
|
-
btmp->data[i] = 0;
|
2722
|
-
}
|
2723
|
-
} /* for */
|
2724
|
-
} else { /* block is not given */
|
2725
|
-
for (i = 0; i < v->size; i++) { if (FUNCTION(gsl_vector,get)(v, i)) n++; }
|
2726
|
-
}
|
2727
|
-
if (n == 0) {
|
2728
|
-
if (btmp) gsl_block_uchar_free(btmp);
|
2729
|
-
return Qnil;
|
2730
|
-
}
|
2731
|
-
vv = gsl_permutation_alloc(n);
|
2732
|
-
for (i = 0, j = 0; i < v->size; i++) {
|
2733
|
-
if ((!btmp && FUNCTION(gsl_vector,get)(v, i)) || (btmp && btmp->data[i])) {
|
2734
|
-
vv->data[j++] = i;
|
2735
|
-
}
|
2736
|
-
}
|
2737
|
-
if (btmp) gsl_block_uchar_free(btmp);
|
2738
|
-
return Data_Wrap_Struct(cgsl_index, 0, gsl_permutation_free, vv);
|
2739
|
-
}
|
2740
|
-
|
2741
|
-
static VALUE FUNCTION(rb_gsl_vector,where2)(VALUE obj)
|
2742
|
-
{
|
2743
|
-
GSL_TYPE(gsl_vector) *v;
|
2744
|
-
gsl_index *v1, *v2;
|
2745
|
-
gsl_block_uchar *btmp = NULL;
|
2746
|
-
VALUE vv1, vv2;
|
2747
|
-
size_t i, j, k, n = 0;
|
2748
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
2749
|
-
if (rb_block_given_p()) {
|
2750
|
-
btmp = gsl_block_uchar_alloc(v->size);
|
2751
|
-
for (i = 0; i < v->size; i++) {
|
2752
|
-
if (rb_yield(C_TO_VALUE(FUNCTION(gsl_vector,get)(v, i)))) {
|
2753
|
-
btmp->data[i] = 1;
|
2754
|
-
n++;
|
2755
|
-
} else {
|
2756
|
-
btmp->data[i] = 0;
|
2757
|
-
}
|
2758
|
-
} /* for */
|
2759
|
-
} else { /* block is not given */
|
2760
|
-
for (i = 0; i < v->size; i++) { if (FUNCTION(gsl_vector,get)(v, i)) n++; }
|
2761
|
-
}
|
2762
|
-
/* true and false logic. need to handle both */
|
2763
|
-
if (n == 0) {
|
2764
|
-
v2 = gsl_permutation_calloc(v->size); /* calloc() initializes v2 */
|
2765
|
-
vv1 = Qnil;
|
2766
|
-
vv2 = Data_Wrap_Struct(cgsl_index, 0, gsl_permutation_free, v2);
|
2767
|
-
} else if (v->size-n == 0) {
|
2768
|
-
v1 = gsl_permutation_calloc(n); /* calloc() initializes v1 */
|
2769
|
-
vv1 = Data_Wrap_Struct(cgsl_index, 0, gsl_permutation_free, v1);
|
2770
|
-
vv2 = Qnil;
|
2771
|
-
} else {
|
2772
|
-
/* same case as 'where' */
|
2773
|
-
v1 = gsl_permutation_alloc(n);
|
2774
|
-
v2 = gsl_permutation_alloc(v->size-n);
|
2775
|
-
for (i = 0, j = 0, k = 0; i < v->size; i++) {
|
2776
|
-
if ((!btmp && FUNCTION(gsl_vector,get)(v, i)) || (btmp && btmp->data[i])) v1->data[j++] = i;
|
2777
|
-
else v2->data[k++] = i;
|
2778
|
-
}
|
2779
|
-
vv1 = Data_Wrap_Struct(cgsl_index, 0, gsl_permutation_free, v1);
|
2780
|
-
vv2 = Data_Wrap_Struct(cgsl_index, 0, gsl_permutation_free, v2);
|
2781
|
-
}
|
2782
|
-
if (btmp) gsl_block_uchar_free(btmp);
|
2783
|
-
return rb_ary_new3(2, vv1, vv2);
|
2784
|
-
}
|
2785
|
-
|
2786
|
-
static VALUE FUNCTION(rb_gsl_vector,op_inplace)(VALUE vv1, VALUE vv2,
|
2787
|
-
int (*f)(GSL_TYPE (gsl_vector)*, const GSL_TYPE (gsl_vector)*))
|
2788
|
-
{
|
2789
|
-
GSL_TYPE(gsl_vector) *v1, *v2;
|
2790
|
-
Data_Get_Struct(vv1, GSL_TYPE(gsl_vector), v1);
|
2791
|
-
Data_Get_Struct(vv2, GSL_TYPE(gsl_vector), v2);
|
2792
|
-
(*f)(v1, v2);
|
2793
|
-
return vv1;
|
2794
|
-
}
|
2795
|
-
|
2796
|
-
static VALUE FUNCTION(rb_gsl_vector,add_inplace)(VALUE vv1, VALUE vv2)
|
2797
|
-
{
|
2798
|
-
GSL_TYPE(gsl_vector) *v1;
|
2799
|
-
double x;
|
2800
|
-
if(VEC_P(vv2)) {
|
2801
|
-
return FUNCTION(rb_gsl_vector,op_inplace)(vv1, vv2, FUNCTION(gsl_vector,add));
|
2802
|
-
} else {
|
2803
|
-
x = NUM2DBL(vv2);
|
2804
|
-
Data_Get_Struct(vv1, GSL_TYPE(gsl_vector), v1);
|
2805
|
-
FUNCTION(gsl_vector,add_constant)(v1, x);
|
2806
|
-
return vv1;
|
2807
|
-
}
|
2808
|
-
}
|
2809
|
-
|
2810
|
-
static VALUE FUNCTION(rb_gsl_vector,sub_inplace)(VALUE vv1, VALUE vv2)
|
2811
|
-
{
|
2812
|
-
GSL_TYPE(gsl_vector) *v1;
|
2813
|
-
double x;
|
2814
|
-
if(VEC_P(vv2)) {
|
2815
|
-
return FUNCTION(rb_gsl_vector,op_inplace)(vv1, vv2, FUNCTION(gsl_vector,sub));
|
2816
|
-
} else {
|
2817
|
-
x = NUM2DBL(vv2);
|
2818
|
-
Data_Get_Struct(vv1, GSL_TYPE(gsl_vector), v1);
|
2819
|
-
FUNCTION(gsl_vector,add_constant)(v1, -x);
|
2820
|
-
return vv1;
|
2821
|
-
}
|
2822
|
-
}
|
2823
|
-
|
2824
|
-
static VALUE FUNCTION(rb_gsl_vector,mul_inplace)(VALUE vv1, VALUE vv2)
|
2825
|
-
{
|
2826
|
-
GSL_TYPE(gsl_vector) *v1;
|
2827
|
-
double x;
|
2828
|
-
if(VEC_P(vv2)) {
|
2829
|
-
return FUNCTION(rb_gsl_vector,op_inplace)(vv1, vv2, FUNCTION(gsl_vector,mul));
|
2830
|
-
} else {
|
2831
|
-
x = NUM2DBL(vv2);
|
2832
|
-
Data_Get_Struct(vv1, GSL_TYPE(gsl_vector), v1);
|
2833
|
-
FUNCTION(gsl_vector,scale)(v1, x);
|
2834
|
-
return vv1;
|
2835
|
-
}
|
2836
|
-
}
|
2837
|
-
|
2838
|
-
static VALUE FUNCTION(rb_gsl_vector,div_inplace)(VALUE vv1, VALUE vv2)
|
2839
|
-
{
|
2840
|
-
GSL_TYPE(gsl_vector) *v1;
|
2841
|
-
double x;
|
2842
|
-
if(VEC_P(vv2)) {
|
2843
|
-
return FUNCTION(rb_gsl_vector,op_inplace)(vv1, vv2, FUNCTION(gsl_vector,div));
|
2844
|
-
} else {
|
2845
|
-
x = NUM2DBL(vv2);
|
2846
|
-
Data_Get_Struct(vv1, GSL_TYPE(gsl_vector), v1);
|
2847
|
-
FUNCTION(gsl_vector,scale)(v1, 1.0/x);
|
2848
|
-
return vv1;
|
2849
|
-
}
|
2850
|
-
}
|
2851
|
-
|
2852
|
-
static VALUE FUNCTION(rb_gsl_vector,zip)(int argc, VALUE *argv, VALUE obj)
|
2853
|
-
{
|
2854
|
-
GSL_TYPE(gsl_vector) *v0, **vp, *vnew;
|
2855
|
-
VALUE ary;
|
2856
|
-
size_t i, j;
|
2857
|
-
int argc2;
|
2858
|
-
VALUE *argv2;
|
2859
|
-
if (VEC_P(obj)) {
|
2860
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v0);
|
2861
|
-
argc2 = argc;
|
2862
|
-
argv2 = argv;
|
2863
|
-
} else {
|
2864
|
-
if (argc < 1) rb_raise(rb_eArgError, "Too few arguments.");
|
2865
|
-
Data_Get_Struct(argv[0], GSL_TYPE(gsl_vector), v0);
|
2866
|
-
argc2 = argc - 1;
|
2867
|
-
argv2 = argv + 1;
|
2868
|
-
}
|
2869
|
-
for (i = 0; (int) i < argc2; i++) {
|
2870
|
-
CHECK_VEC(argv2[i]);
|
2871
|
-
}
|
2872
|
-
vp = (GSL_TYPE(gsl_vector)**)malloc(sizeof(GSL_TYPE(gsl_vector)**));
|
2873
|
-
for (i = 0; (int) i < argc2; i++) {
|
2874
|
-
Data_Get_Struct(argv2[i], GSL_TYPE(gsl_vector), vp[i]);
|
2875
|
-
}
|
2876
|
-
ary = rb_ary_new2(v0->size);
|
2877
|
-
for (i = 0; i < v0->size; i++) {
|
2878
|
-
vnew = FUNCTION(gsl_vector,alloc)(argc2 + 1);
|
2879
|
-
FUNCTION(gsl_vector,set)(vnew, 0, FUNCTION(gsl_vector,get)(v0, i));
|
2880
|
-
for (j = 0; (int) j < argc2; j++) {
|
2881
|
-
if (i < vp[j]->size) {
|
2882
|
-
FUNCTION(gsl_vector,set)(vnew, j+1, FUNCTION(gsl_vector,get)(vp[j], i));
|
2883
|
-
} else {
|
2884
|
-
FUNCTION(gsl_vector,set)(vnew, j+1, 0.0);
|
2885
|
-
}
|
2886
|
-
}
|
2887
|
-
rb_ary_store(ary, i, Data_Wrap_Struct(GSL_TYPE(cgsl_vector), 0, FUNCTION(gsl_vector,free), vnew));
|
2888
|
-
}
|
2889
|
-
free((GSL_TYPE(gsl_vector)**)vp);
|
2890
|
-
return ary;
|
2891
|
-
}
|
2892
|
-
|
2893
|
-
static VALUE FUNCTION(rb_gsl_vector,join)(int argc, VALUE *argv, VALUE obj)
|
2894
|
-
{
|
2895
|
-
GSL_TYPE(gsl_vector) *v;
|
2896
|
-
VALUE str, sep;
|
2897
|
-
char *p, buf[16];
|
2898
|
-
size_t i;
|
2899
|
-
switch (argc) {
|
2900
|
-
case 0:
|
2901
|
-
sep = rb_str_new2(" ");
|
2902
|
-
break;
|
2903
|
-
case 1:
|
2904
|
-
sep = argv[0];
|
2905
|
-
break;
|
2906
|
-
default:
|
2907
|
-
rb_raise(rb_eArgError, "Wrong number of arguments (%d for 0 or 1)", argc);
|
2908
|
-
}
|
2909
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
2910
|
-
// p = (char *) malloc((10+RSTRING(sep))*v->size + 1);
|
2911
|
-
p = (char *) malloc((10+RSTRING_LEN(sep))*v->size + 1);
|
2912
|
-
str = rb_str_new2(p);
|
2913
|
-
for (i = 0; i < v->size; i++) {
|
2914
|
-
#ifdef BASE_DOUBLE
|
2915
|
-
sprintf(buf, "%4.3e", FUNCTION(gsl_vector,get)(v, i));
|
2916
|
-
#else
|
2917
|
-
sprintf(buf, "%d", FUNCTION(gsl_vector,get)(v, i));
|
2918
|
-
#endif
|
2919
|
-
rb_str_concat(str, rb_str_new2(buf));
|
2920
|
-
if (i != v->size-1) rb_str_concat(str, sep);
|
2921
|
-
}
|
2922
|
-
return str;
|
2923
|
-
}
|
2924
|
-
|
2925
|
-
static VALUE FUNCTION(rb_gsl_vector,cumsum)(VALUE obj)
|
2926
|
-
{
|
2927
|
-
GSL_TYPE(gsl_vector) *v, *vnew;
|
2928
|
-
BASE sum = 0;
|
2929
|
-
size_t i;
|
2930
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
2931
|
-
vnew = FUNCTION(gsl_vector,alloc)(v->size);
|
2932
|
-
for (i = 0; i < v->size; i++) {
|
2933
|
-
sum += FUNCTION(gsl_vector,get)(v, i);
|
2934
|
-
FUNCTION(gsl_vector,set)(vnew, i, sum);
|
2935
|
-
}
|
2936
|
-
return Data_Wrap_Struct(VEC_ROW_COL(obj), 0, FUNCTION(gsl_vector,free), vnew);
|
2937
|
-
}
|
2938
|
-
|
2939
|
-
static VALUE FUNCTION(rb_gsl_vector,cumprod)(VALUE obj)
|
2940
|
-
{
|
2941
|
-
GSL_TYPE(gsl_vector) *v, *vnew;
|
2942
|
-
BASE prod = 1;
|
2943
|
-
size_t i;
|
2944
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
2945
|
-
vnew = FUNCTION(gsl_vector,alloc)(v->size);
|
2946
|
-
for (i = 0; i < v->size; i++) {
|
2947
|
-
prod *= FUNCTION(gsl_vector,get)(v, i);
|
2948
|
-
FUNCTION(gsl_vector,set)(vnew, i, prod);
|
2949
|
-
}
|
2950
|
-
return Data_Wrap_Struct(VEC_ROW_COL(obj), 0, FUNCTION(gsl_vector,free), vnew);
|
2951
|
-
}
|
2952
|
-
|
2953
|
-
static VALUE FUNCTION(rb_gsl_vector,property)(VALUE obj,
|
2954
|
-
int (*f)(const GSL_TYPE (gsl_vector) *)) {
|
2955
|
-
GSL_TYPE(gsl_vector) *v;
|
2956
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
2957
|
-
return INT2FIX((*f)(v));
|
2958
|
-
}
|
2959
|
-
|
2960
|
-
static VALUE FUNCTION(rb_gsl_vector,property2)(VALUE obj,
|
2961
|
-
int (*f)(const GSL_TYPE (gsl_vector) *)) {
|
2962
|
-
GSL_TYPE(gsl_vector) *v;
|
2963
|
-
Data_Get_Struct(obj, GSL_TYPE(gsl_vector), v);
|
2964
|
-
if ((*f)(v)) return Qtrue;
|
2965
|
-
else return Qfalse;
|
2966
|
-
}
|
2967
|
-
|
2968
|
-
static VALUE FUNCTION(rb_gsl_vector,ispos)(VALUE obj)
|
2969
|
-
{
|
2970
|
-
return FUNCTION(rb_gsl_vector,property)(obj, FUNCTION(gsl_vector, ispos));
|
2971
|
-
}
|
2972
|
-
static VALUE FUNCTION(rb_gsl_vector,ispos2)(VALUE obj)
|
2973
|
-
{
|
2974
|
-
return FUNCTION(rb_gsl_vector,property2)(obj, FUNCTION(gsl_vector, ispos));
|
2975
|
-
}
|
2976
|
-
static VALUE FUNCTION(rb_gsl_vector,isneg)(VALUE obj)
|
2977
|
-
{
|
2978
|
-
return FUNCTION(rb_gsl_vector,property)(obj, FUNCTION(gsl_vector, isneg));
|
2979
|
-
}
|
2980
|
-
static VALUE FUNCTION(rb_gsl_vector,isneg2)(VALUE obj)
|
2981
|
-
{
|
2982
|
-
return FUNCTION(rb_gsl_vector,property2)(obj, FUNCTION(gsl_vector, isneg));
|
2983
|
-
}
|
2984
|
-
|
2985
|
-
static VALUE FUNCTION(rb_gsl_vector,isnonneg)(VALUE obj)
|
2986
|
-
{
|
2987
|
-
return FUNCTION(rb_gsl_vector,property)(obj, FUNCTION(gsl_vector, isnonneg));
|
2988
|
-
}
|
2989
|
-
static VALUE FUNCTION(rb_gsl_vector,isnonneg2)(VALUE obj)
|
2990
|
-
{
|
2991
|
-
return FUNCTION(rb_gsl_vector,property2)(obj, FUNCTION(gsl_vector, isnonneg));
|
2992
|
-
}
|
2993
|
-
|
2994
|
-
void FUNCTION(Init_gsl_vector,init)(VALUE module)
|
2995
|
-
{
|
2996
|
-
/* rb_define_singleton_method(GSL_TYPE(cgsl_vector), "new",
|
2997
|
-
FUNCTION(rb_gsl_vector,new), -1);*/
|
2998
|
-
rb_define_singleton_method(GSL_TYPE(cgsl_vector), "[]",
|
2999
|
-
FUNCTION(rb_gsl_vector,new), -1);
|
3000
|
-
rb_define_singleton_method(GSL_TYPE(cgsl_vector), "alloc",
|
3001
|
-
FUNCTION(rb_gsl_vector,new), -1);
|
3002
|
-
rb_define_singleton_method(GSL_TYPE(cgsl_vector), "calloc",
|
3003
|
-
FUNCTION(rb_gsl_vector,calloc), 1);
|
3004
|
-
|
3005
|
-
/*****/
|
3006
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "get", FUNCTION(rb_gsl_vector,get), -1);
|
3007
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "[]", "get");
|
3008
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "size", FUNCTION(rb_gsl_vector,size), 0);
|
3009
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "len", "size");
|
3010
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "length", "size");
|
3011
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "stride", FUNCTION(rb_gsl_vector,stride), 0);
|
3012
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "set_stride", FUNCTION(rb_gsl_vector,set_stride), 1);
|
3013
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "stride=", "set_stride");
|
3014
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "owner", FUNCTION(rb_gsl_vector,owner), 0);
|
3015
|
-
|
3016
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "set", FUNCTION(rb_gsl_vector,set), -1);
|
3017
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "[]=", "set");
|
3018
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "set_all", FUNCTION(rb_gsl_vector,set_all), 1);
|
3019
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "set_zero", FUNCTION(rb_gsl_vector,set_zero), 0);
|
3020
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "set_basis", FUNCTION(rb_gsl_vector,set_basis), 1);
|
3021
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "each", FUNCTION(rb_gsl_vector,each), 0);
|
3022
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "reverse_each", FUNCTION(rb_gsl_vector,reverse_each), 0);
|
3023
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "each_index", FUNCTION(rb_gsl_vector,each_index), 0);
|
3024
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "reverse_each_index", FUNCTION(rb_gsl_vector,reverse_each_index), 0);
|
3025
|
-
|
3026
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "to_a", FUNCTION(rb_gsl_vector,to_a), 0);
|
3027
|
-
|
3028
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "reverse", FUNCTION(rb_gsl_vector,reverse), 0);
|
3029
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "reverse!", FUNCTION(rb_gsl_vector,reverse_bang), 0);
|
3030
|
-
|
3031
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "max", FUNCTION(rb_gsl_vector,max), 0);
|
3032
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "min", FUNCTION(rb_gsl_vector,min), 0);
|
3033
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "minmax", FUNCTION(rb_gsl_vector,minmax), 0);
|
3034
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "maxmin", FUNCTION(rb_gsl_vector,maxmin), 0);
|
3035
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "max_index", FUNCTION(rb_gsl_vector,max_index), 0);
|
3036
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "min_index", FUNCTION(rb_gsl_vector,min_index), 0);
|
3037
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "minmax_index", FUNCTION(rb_gsl_vector,minmax_index), 0);
|
3038
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "maxmin_index", FUNCTION(rb_gsl_vector,maxmin_index), 0);
|
3039
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "isnull", FUNCTION(rb_gsl_vector,isnull), 0);
|
3040
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "isnull?", FUNCTION(rb_gsl_vector,isnull2), 0);
|
3041
|
-
/* rb_define_alias(GSL_TYPE(cgsl_vector), "none?", "isnull?");*/
|
3042
|
-
/* none? method is define below, which can have a block. */
|
3043
|
-
|
3044
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "trans", FUNCTION(rb_gsl_vector,trans), 0);
|
3045
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "transpose", "trans");
|
3046
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "col", "trans");
|
3047
|
-
|
3048
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "trans!", FUNCTION(rb_gsl_vector,trans_bang), 0);
|
3049
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "transpose!", "trans!");
|
3050
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "col!", "trans!");
|
3051
|
-
#ifdef BASE_DOUBLE
|
3052
|
-
rb_define_alias(cgsl_vector_col, "row", "trans");
|
3053
|
-
rb_define_alias(cgsl_vector_col, "row!", "trans!");
|
3054
|
-
#elif defined(BASE_INT)
|
3055
|
-
rb_define_alias(cgsl_vector_int_col, "row", "trans");
|
3056
|
-
rb_define_alias(cgsl_vector_int_col, "row!", "trans!");
|
3057
|
-
#endif
|
3058
|
-
|
3059
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "-@", FUNCTION(rb_gsl_vector,uminus), 0);
|
3060
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "+@", FUNCTION(rb_gsl_vector,uplus), 0);
|
3061
|
-
|
3062
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "sum", FUNCTION(rb_gsl_vector,sum), 0);
|
3063
|
-
#ifdef BASE_INT
|
3064
|
-
/* Vector#sumsq is defined in blas1.c */
|
3065
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "sumsq", FUNCTION(rb_gsl_vector,sumsq), 0);
|
3066
|
-
#endif
|
3067
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "prod", FUNCTION(rb_gsl_vector,prod), 0);
|
3068
|
-
|
3069
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "cumsum", FUNCTION(rb_gsl_vector,cumsum), 0);
|
3070
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "cumprod", FUNCTION(rb_gsl_vector,cumprod), 0);
|
3071
|
-
|
3072
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "connect",
|
3073
|
-
FUNCTION(rb_gsl_vector,connect), -1);
|
3074
|
-
rb_define_singleton_method(GSL_TYPE(cgsl_vector), "connect",
|
3075
|
-
FUNCTION(rb_gsl_vector,connect), -1);
|
3076
|
-
|
3077
|
-
|
3078
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "sgn", FUNCTION(rb_gsl_vector,sgn), 0);
|
3079
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "signum", "sgn");
|
3080
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "abs", FUNCTION(rb_gsl_vector,abs), 0);
|
3081
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "fabs", "abs");
|
3082
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "square",
|
3083
|
-
FUNCTION(rb_gsl_vector,square), 0);
|
3084
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "abs2", "square");
|
3085
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "sqrt", FUNCTION(rb_gsl_vector,sqrt), 0);
|
3086
|
-
|
3087
|
-
rb_define_singleton_method(GSL_TYPE(cgsl_vector), "memcpy",
|
3088
|
-
FUNCTION(rb_gsl_vector,memcpy), 2);
|
3089
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "clone",
|
3090
|
-
FUNCTION(rb_gsl_vector,clone), 0);
|
3091
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "duplicate", "clone");
|
3092
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "dup", "clone");
|
3093
|
-
rb_define_singleton_method(GSL_TYPE(cgsl_vector), "swap",
|
3094
|
-
FUNCTION(rb_gsl_vector,swap), 2);
|
3095
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "swap_elements",
|
3096
|
-
FUNCTION(rb_gsl_vector,swap_elements), 2);
|
3097
|
-
|
3098
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "fwrite",
|
3099
|
-
FUNCTION(rb_gsl_vector,fwrite), 1);
|
3100
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "fread",
|
3101
|
-
FUNCTION(rb_gsl_vector,fread), 1);
|
3102
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "fprintf",
|
3103
|
-
FUNCTION(rb_gsl_vector,fprintf), -1);
|
3104
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "printf",
|
3105
|
-
FUNCTION(rb_gsl_vector,printf), -1);
|
3106
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "fscanf",
|
3107
|
-
FUNCTION(rb_gsl_vector,fscanf), 1);
|
3108
|
-
|
3109
|
-
/* 2.Aug.2004 */
|
3110
|
-
rb_define_singleton_method(GSL_TYPE(cgsl_vector), "inner_product",
|
3111
|
-
FUNCTION(rb_gsl_vector,inner_product), -1);
|
3112
|
-
rb_define_singleton_method(GSL_TYPE(cgsl_vector), "dot",
|
3113
|
-
FUNCTION(rb_gsl_vector,inner_product), -1);
|
3114
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "inner_product",
|
3115
|
-
FUNCTION(rb_gsl_vector,inner_product), -1);
|
3116
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "dot", "inner_product");
|
3117
|
-
|
3118
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "equal?",
|
3119
|
-
FUNCTION(rb_gsl_vector,equal), -1);
|
3120
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "==", "equal?");
|
3121
|
-
|
3122
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "to_poly",
|
3123
|
-
FUNCTION(rb_gsl_vector,to_poly), 0);
|
3124
|
-
|
3125
|
-
/*****/
|
3126
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "graph",
|
3127
|
-
FUNCTION(rb_gsl_vector,graph), -1);
|
3128
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "graph_step",
|
3129
|
-
FUNCTION(rb_gsl_vector,graph_step), -1);
|
3130
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "plot",
|
3131
|
-
FUNCTION(rb_gsl_vector,plot), -1);
|
3132
|
-
|
3133
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "print",
|
3134
|
-
FUNCTION(rb_gsl_vector,print), 0);
|
3135
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "inspect",
|
3136
|
-
FUNCTION(rb_gsl_vector,inspect), 0);
|
3137
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "to_s",
|
3138
|
-
FUNCTION(rb_gsl_vector,to_s), 0);
|
3139
|
-
|
3140
|
-
/*****/
|
3141
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "subvector",
|
3142
|
-
FUNCTION(rb_gsl_vector,subvector), -1);
|
3143
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "view", "subvector");
|
3144
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "subvector_with_stride",
|
3145
|
-
FUNCTION(rb_gsl_vector,subvector_with_stride), -1);
|
3146
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "view_with_stride", "subvector_with_stride");
|
3147
|
-
|
3148
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "matrix_view",
|
3149
|
-
FUNCTION(rb_gsl_vector,matrix_view), -1);
|
3150
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "matrix_view_with_tda",
|
3151
|
-
FUNCTION(rb_gsl_vector,matrix_view_with_tda), 3);
|
3152
|
-
|
3153
|
-
#ifdef BASE_DOUBLE
|
3154
|
-
rb_undef_method(cgsl_vector_view_ro, "set");
|
3155
|
-
rb_undef_method(cgsl_vector_view_ro, "[]=");
|
3156
|
-
rb_undef_method(cgsl_vector_col_view_ro, "set");
|
3157
|
-
rb_undef_method(cgsl_vector_col_view_ro, "[]=");
|
3158
|
-
#elif defined(BASE_INT)
|
3159
|
-
rb_undef_method(cgsl_vector_int_view_ro, "set");
|
3160
|
-
rb_undef_method(cgsl_vector_int_view_ro, "[]=");
|
3161
|
-
rb_undef_method(cgsl_vector_int_col_view_ro, "set");
|
3162
|
-
rb_undef_method(cgsl_vector_int_col_view_ro, "[]=");
|
3163
|
-
#endif
|
3164
|
-
|
3165
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "scale",
|
3166
|
-
FUNCTION(rb_gsl_vector,scale), 1);
|
3167
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "scale!",
|
3168
|
-
FUNCTION(rb_gsl_vector,scale_bang), 1);
|
3169
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "add_constant",
|
3170
|
-
FUNCTION(rb_gsl_vector,add_constant), 1);
|
3171
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "add_const", "add_constant");
|
3172
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "add_constant!",
|
3173
|
-
FUNCTION(rb_gsl_vector,add_constant_bang), 1);
|
3174
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "add_const!", "add_constant!");
|
3175
|
-
|
3176
|
-
#ifdef HAVE_TENSOR_TENSOR_H
|
3177
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "to_tensor",
|
3178
|
-
FUNCTION(rb_gsl_vector,to_tensor), -1);
|
3179
|
-
#endif
|
3180
|
-
|
3181
|
-
rb_define_singleton_method(GSL_TYPE(cgsl_vector), "to_gplot",
|
3182
|
-
FUNCTION(rb_gsl_vector,to_gplot), -1);
|
3183
|
-
rb_define_singleton_method(GSL_TYPE(cgsl_vector), "to_gsplot",
|
3184
|
-
FUNCTION(rb_gsl_vector,to_gplot), -1);
|
3185
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "to_gplot",
|
3186
|
-
FUNCTION(rb_gsl_vector,to_gplot), -1);
|
3187
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "to_gsplot", "to_gplot");
|
3188
|
-
|
3189
|
-
/*****/
|
3190
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "collect",
|
3191
|
-
FUNCTION(rb_gsl_vector,collect), 0);
|
3192
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "collect!",
|
3193
|
-
FUNCTION(rb_gsl_vector,collect_bang), 0);
|
3194
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "map", "collect");
|
3195
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "map!", "collect!");
|
3196
|
-
|
3197
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "to_m", FUNCTION(rb_gsl_vector,to_m), 2);
|
3198
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "to_matrix", "to_m");
|
3199
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "reshape", "to_m");
|
3200
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "to_m_diagonal",
|
3201
|
-
FUNCTION(rb_gsl_vector,to_m_diagonal), 0);
|
3202
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "block",
|
3203
|
-
FUNCTION(rb_gsl_vector,block), 0);
|
3204
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "to_m_circulant",
|
3205
|
-
FUNCTION(rb_gsl_vector,to_m_circulant), 0);
|
3206
|
-
rb_define_singleton_method(GSL_TYPE(cgsl_vector), "indgen",
|
3207
|
-
FUNCTION(rb_gsl_vector,indgen_singleton), -1);
|
3208
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "indgen",
|
3209
|
-
FUNCTION(rb_gsl_vector,indgen), -1);
|
3210
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "indgen!",
|
3211
|
-
FUNCTION(rb_gsl_vector,indgen_bang), -1);
|
3212
|
-
/*****/
|
3213
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "sort!",
|
3214
|
-
GSL_TYPE(rb_gsl_sort_vector), 0);
|
3215
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "sort",
|
3216
|
-
GSL_TYPE(rb_gsl_sort_vector2), 0);
|
3217
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "sort_index",
|
3218
|
-
FUNCTION(rb_gsl_sort_vector,index), 0);
|
3219
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "sort_smallest",
|
3220
|
-
FUNCTION(rb_gsl_sort_vector,smallest), 1);
|
3221
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "smallest", "sort_smallest");
|
3222
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "sort_largest",
|
3223
|
-
FUNCTION(rb_gsl_sort_vector,largest), 1);
|
3224
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "largest", "sort_largest");
|
3225
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "sort_smallest_index",
|
3226
|
-
FUNCTION(rb_gsl_sort_vector,smallest_index), 1);
|
3227
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "smallest_index", "sort_smallest_index");
|
3228
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "sort_largest_index",
|
3229
|
-
FUNCTION(rb_gsl_sort_vector,largest_index), 1);
|
3230
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "largest_index", "sort_largest_index");
|
3231
|
-
|
3232
|
-
/*****/
|
3233
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "histogram",
|
3234
|
-
FUNCTION(rb_gsl_vector,histogram), -1);
|
3235
|
-
|
3236
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "last",
|
3237
|
-
FUNCTION(rb_gsl_vector,last), 0);
|
3238
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "first",
|
3239
|
-
FUNCTION(rb_gsl_vector,first), 0);
|
3240
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "concat",
|
3241
|
-
FUNCTION(rb_gsl_vector,concat), 1);
|
3242
|
-
|
3243
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "diff",
|
3244
|
-
FUNCTION(rb_gsl_vector,diff), -1);
|
3245
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "isnan",
|
3246
|
-
FUNCTION(rb_gsl_vector,isnan), 0);
|
3247
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "isinf",
|
3248
|
-
FUNCTION(rb_gsl_vector,isinf), 0);
|
3249
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "finite",
|
3250
|
-
FUNCTION(rb_gsl_vector,finite), 0);
|
3251
|
-
|
3252
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "isnan?",
|
3253
|
-
FUNCTION(rb_gsl_vector,isnan2), 0);
|
3254
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "isinf?",
|
3255
|
-
FUNCTION(rb_gsl_vector,isinf2), 0);
|
3256
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "finite?",
|
3257
|
-
FUNCTION(rb_gsl_vector,finite2), 0);
|
3258
|
-
|
3259
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "delete_at",
|
3260
|
-
FUNCTION(rb_gsl_vector,delete_at), 1);
|
3261
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "delete_if",
|
3262
|
-
FUNCTION(rb_gsl_vector,delete_if), 0);
|
3263
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "delete",
|
3264
|
-
FUNCTION(rb_gsl_vector,delete), 1);
|
3265
|
-
/***/
|
3266
|
-
rb_define_singleton_method(GSL_TYPE(cgsl_vector), "filescan", FUNCTION(rb_gsl_vector,filescan), 1);
|
3267
|
-
|
3268
|
-
/*****/
|
3269
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "eq", FUNCTION(rb_gsl_vector,eq), 1);
|
3270
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "ne", FUNCTION(rb_gsl_vector,ne), 1);
|
3271
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "gt", FUNCTION(rb_gsl_vector,gt), 1);
|
3272
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), ">", "gt");
|
3273
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "ge", FUNCTION(rb_gsl_vector,ge), 1);
|
3274
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), ">=", "ge");
|
3275
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "lt", FUNCTION(rb_gsl_vector,lt), 1);
|
3276
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "<", "lt");
|
3277
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "le", FUNCTION(rb_gsl_vector,le), 1);
|
3278
|
-
rb_define_alias(GSL_TYPE(cgsl_vector), "<=", "le");
|
3279
|
-
|
3280
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "and", FUNCTION(rb_gsl_vector,and), 1);
|
3281
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "or", FUNCTION(rb_gsl_vector,or), 1);
|
3282
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "xor", FUNCTION(rb_gsl_vector,xor), 1);
|
3283
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "not", FUNCTION(rb_gsl_vector,not), 0);
|
3284
|
-
|
3285
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "all?", FUNCTION(rb_gsl_vector,all), 0);
|
3286
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "none?", FUNCTION(rb_gsl_vector,none), 0);
|
3287
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "any",
|
3288
|
-
FUNCTION(rb_gsl_vector,any), 0);
|
3289
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "any?",
|
3290
|
-
FUNCTION(rb_gsl_vector,any2), 0);
|
3291
|
-
|
3292
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "where", FUNCTION(rb_gsl_vector,where), 0);
|
3293
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "where2", FUNCTION(rb_gsl_vector,where2), 0);
|
3294
|
-
|
3295
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "add!", FUNCTION(rb_gsl_vector,add_inplace), 1);
|
3296
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "sub!", FUNCTION(rb_gsl_vector,sub_inplace), 1);
|
3297
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "mul!", FUNCTION(rb_gsl_vector,mul_inplace), 1);
|
3298
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "div!", FUNCTION(rb_gsl_vector,div_inplace), 1);
|
3299
|
-
|
3300
|
-
rb_define_singleton_method(GSL_TYPE(cgsl_vector), "zip", FUNCTION(rb_gsl_vector,zip), -1);
|
3301
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "zip", FUNCTION(rb_gsl_vector,zip), -1);
|
3302
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "join", FUNCTION(rb_gsl_vector,join), -1);
|
3303
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "ispos", FUNCTION(rb_gsl_vector,ispos), 0);
|
3304
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "ispos?", FUNCTION(rb_gsl_vector,ispos2), 0);
|
3305
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "isneg", FUNCTION(rb_gsl_vector,isneg), 0);
|
3306
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "isneg?", FUNCTION(rb_gsl_vector,isneg2), 0);
|
3307
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "isnonneg", FUNCTION(rb_gsl_vector,isnonneg), 0);
|
3308
|
-
rb_define_method(GSL_TYPE(cgsl_vector), "isnonneg?", FUNCTION(rb_gsl_vector,isnonneg2), 0);
|
3309
|
-
}
|
3310
|
-
|
3311
|
-
#undef NUMCONV
|
3312
|
-
#undef NUMCONV2
|
3313
|
-
#undef PRINTF_FORMAT
|
3314
|
-
#undef VEC_ROW_COL
|
3315
|
-
#undef VEC_P
|
3316
|
-
#undef C_TO_VALUE
|
3317
|
-
#undef C_TO_VALUE2
|
3318
|
-
#undef VEC_COL_P
|
3319
|
-
#undef VEC_ROW_P
|
3320
|
-
#undef CHECK_VEC
|
3321
|
-
#undef VEC_VIEW_P
|