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.
Files changed (612) hide show
  1. checksums.yaml +4 -4
  2. data/rb-gsl.gemspec +5 -10
  3. metadata +10 -713
  4. data/.gitignore +0 -12
  5. data/.travis.yml +0 -24
  6. data/AUTHORS +0 -12
  7. data/COPYING +0 -341
  8. data/ChangeLog +0 -621
  9. data/Gemfile +0 -4
  10. data/README.md +0 -77
  11. data/Rakefile +0 -20
  12. data/THANKS +0 -17
  13. data/examples/alf/alf.gp +0 -15
  14. data/examples/alf/alf.rb +0 -32
  15. data/examples/blas/blas.rb +0 -13
  16. data/examples/blas/dnrm2.rb +0 -16
  17. data/examples/blas/level1.rb +0 -81
  18. data/examples/blas/level2.rb +0 -11
  19. data/examples/blas/level3.rb +0 -12
  20. data/examples/bspline.rb +0 -57
  21. data/examples/cdf.rb +0 -16
  22. data/examples/cheb.rb +0 -21
  23. data/examples/combination.rb +0 -23
  24. data/examples/complex/RC-lpf.rb +0 -47
  25. data/examples/complex/add.rb +0 -36
  26. data/examples/complex/coerce.rb +0 -14
  27. data/examples/complex/complex.rb +0 -25
  28. data/examples/complex/fpmi.rb +0 -70
  29. data/examples/complex/functions.rb +0 -77
  30. data/examples/complex/michelson.rb +0 -36
  31. data/examples/complex/mul.rb +0 -28
  32. data/examples/complex/oscillator.rb +0 -17
  33. data/examples/complex/set.rb +0 -37
  34. data/examples/const/physconst.rb +0 -151
  35. data/examples/const/travel.rb +0 -45
  36. data/examples/deriv/demo.rb +0 -13
  37. data/examples/deriv/deriv.rb +0 -36
  38. data/examples/deriv/diff.rb +0 -35
  39. data/examples/dht.rb +0 -42
  40. data/examples/dirac.rb +0 -56
  41. data/examples/eigen/eigen.rb +0 -34
  42. data/examples/eigen/herm.rb +0 -22
  43. data/examples/eigen/narray.rb +0 -9
  44. data/examples/eigen/nonsymm.rb +0 -37
  45. data/examples/eigen/nonsymmv.rb +0 -43
  46. data/examples/eigen/qhoscillator.gp +0 -35
  47. data/examples/eigen/qhoscillator.rb +0 -90
  48. data/examples/eigen/vander.rb +0 -41
  49. data/examples/fft/fft.rb +0 -17
  50. data/examples/fft/fft2.rb +0 -17
  51. data/examples/fft/forward.rb +0 -25
  52. data/examples/fft/forward2.rb +0 -26
  53. data/examples/fft/radix2.rb +0 -18
  54. data/examples/fft/real-halfcomplex.rb +0 -33
  55. data/examples/fft/real-halfcomplex2.rb +0 -30
  56. data/examples/fft/realradix2.rb +0 -19
  57. data/examples/fft/sunspot.dat +0 -256
  58. data/examples/fft/sunspot.rb +0 -16
  59. data/examples/fit/expdata.dat +0 -20
  60. data/examples/fit/expfit.rb +0 -31
  61. data/examples/fit/gaussfit.rb +0 -29
  62. data/examples/fit/gaussian_2peaks.rb +0 -34
  63. data/examples/fit/hillfit.rb +0 -40
  64. data/examples/fit/lognormal.rb +0 -26
  65. data/examples/fit/lorentzfit.rb +0 -22
  66. data/examples/fit/multifit.rb +0 -72
  67. data/examples/fit/ndlinear.rb +0 -133
  68. data/examples/fit/nonlinearfit.rb +0 -89
  69. data/examples/fit/plot.gp +0 -36
  70. data/examples/fit/polyfit.rb +0 -9
  71. data/examples/fit/powerfit.rb +0 -21
  72. data/examples/fit/sigmoidfit.rb +0 -40
  73. data/examples/fit/sinfit.rb +0 -22
  74. data/examples/fit/wlinear.rb +0 -46
  75. data/examples/fresnel.rb +0 -11
  76. data/examples/function/function.rb +0 -36
  77. data/examples/function/log.rb +0 -7
  78. data/examples/function/min.rb +0 -33
  79. data/examples/function/sin.rb +0 -10
  80. data/examples/function/synchrotron.rb +0 -18
  81. data/examples/gallery/butterfly.rb +0 -7
  82. data/examples/gallery/cayley.rb +0 -12
  83. data/examples/gallery/cornu.rb +0 -23
  84. data/examples/gallery/eight.rb +0 -11
  85. data/examples/gallery/koch.rb +0 -40
  86. data/examples/gallery/lemniscate.rb +0 -11
  87. data/examples/gallery/polar.rb +0 -11
  88. data/examples/gallery/rgplot/cossin.rb +0 -35
  89. data/examples/gallery/rgplot/rgplot.replaced +0 -0
  90. data/examples/gallery/rgplot/roesller.rb +0 -55
  91. data/examples/gallery/roesller.rb +0 -39
  92. data/examples/gallery/scarabaeus.rb +0 -14
  93. data/examples/histogram/cauchy.rb +0 -27
  94. data/examples/histogram/cauchy.sh +0 -2
  95. data/examples/histogram/exponential.rb +0 -19
  96. data/examples/histogram/gauss.rb +0 -16
  97. data/examples/histogram/gsl-histogram.rb +0 -40
  98. data/examples/histogram/histo2d.rb +0 -31
  99. data/examples/histogram/histo3d.rb +0 -34
  100. data/examples/histogram/histogram-pdf.rb +0 -27
  101. data/examples/histogram/histogram.rb +0 -26
  102. data/examples/histogram/integral.rb +0 -28
  103. data/examples/histogram/poisson.rb +0 -27
  104. data/examples/histogram/power.rb +0 -25
  105. data/examples/histogram/rebin.rb +0 -17
  106. data/examples/histogram/smp.dat +0 -5
  107. data/examples/histogram/xexp.rb +0 -21
  108. data/examples/integration/ahmed.rb +0 -21
  109. data/examples/integration/cosmology.rb +0 -75
  110. data/examples/integration/friedmann.gp +0 -16
  111. data/examples/integration/friedmann.rb +0 -35
  112. data/examples/integration/gamma-zeta.rb +0 -35
  113. data/examples/integration/integration.rb +0 -22
  114. data/examples/integration/qag.rb +0 -8
  115. data/examples/integration/qag2.rb +0 -14
  116. data/examples/integration/qag3.rb +0 -8
  117. data/examples/integration/qagi.rb +0 -28
  118. data/examples/integration/qagi2.rb +0 -49
  119. data/examples/integration/qagiu.rb +0 -29
  120. data/examples/integration/qagp.rb +0 -20
  121. data/examples/integration/qags.rb +0 -14
  122. data/examples/integration/qawc.rb +0 -18
  123. data/examples/integration/qawf.rb +0 -41
  124. data/examples/integration/qawo.rb +0 -29
  125. data/examples/integration/qaws.rb +0 -30
  126. data/examples/integration/qng.rb +0 -17
  127. data/examples/interp/demo.gp +0 -20
  128. data/examples/interp/demo.rb +0 -45
  129. data/examples/interp/interp.rb +0 -37
  130. data/examples/interp/points +0 -10
  131. data/examples/interp/spline.rb +0 -20
  132. data/examples/jacobi/deriv.rb +0 -40
  133. data/examples/jacobi/integrate.rb +0 -34
  134. data/examples/jacobi/interp.rb +0 -43
  135. data/examples/jacobi/jacobi.rb +0 -11
  136. data/examples/linalg/HH.rb +0 -15
  137. data/examples/linalg/HH_narray.rb +0 -13
  138. data/examples/linalg/LQ_solve.rb +0 -73
  139. data/examples/linalg/LU.rb +0 -84
  140. data/examples/linalg/LU2.rb +0 -31
  141. data/examples/linalg/LU_narray.rb +0 -24
  142. data/examples/linalg/PTLQ.rb +0 -47
  143. data/examples/linalg/QR.rb +0 -18
  144. data/examples/linalg/QRPT.rb +0 -47
  145. data/examples/linalg/QR_solve.rb +0 -78
  146. data/examples/linalg/QR_solve_narray.rb +0 -13
  147. data/examples/linalg/SV.rb +0 -16
  148. data/examples/linalg/SV_narray.rb +0 -12
  149. data/examples/linalg/SV_solve.rb +0 -49
  150. data/examples/linalg/chol.rb +0 -29
  151. data/examples/linalg/chol_narray.rb +0 -15
  152. data/examples/linalg/complex.rb +0 -57
  153. data/examples/linalg/invert_narray.rb +0 -10
  154. data/examples/math/const.rb +0 -67
  155. data/examples/math/elementary.rb +0 -35
  156. data/examples/math/functions.rb +0 -41
  157. data/examples/math/inf_nan.rb +0 -34
  158. data/examples/math/minmax.rb +0 -22
  159. data/examples/math/power.rb +0 -18
  160. data/examples/math/test.rb +0 -31
  161. data/examples/matrix/a.dat +0 -0
  162. data/examples/matrix/add.rb +0 -45
  163. data/examples/matrix/b.dat +0 -4
  164. data/examples/matrix/cat.rb +0 -31
  165. data/examples/matrix/colvectors.rb +0 -24
  166. data/examples/matrix/complex.rb +0 -41
  167. data/examples/matrix/det.rb +0 -29
  168. data/examples/matrix/diagonal.rb +0 -23
  169. data/examples/matrix/get_all.rb +0 -159
  170. data/examples/matrix/hilbert.rb +0 -31
  171. data/examples/matrix/iterator.rb +0 -19
  172. data/examples/matrix/matrix.rb +0 -57
  173. data/examples/matrix/minmax.rb +0 -53
  174. data/examples/matrix/mul.rb +0 -39
  175. data/examples/matrix/rand.rb +0 -20
  176. data/examples/matrix/read.rb +0 -29
  177. data/examples/matrix/rowcol.rb +0 -47
  178. data/examples/matrix/set.rb +0 -41
  179. data/examples/matrix/set_all.rb +0 -100
  180. data/examples/matrix/view.rb +0 -32
  181. data/examples/matrix/view_all.rb +0 -148
  182. data/examples/matrix/write.rb +0 -23
  183. data/examples/min.rb +0 -29
  184. data/examples/monte/miser.rb +0 -47
  185. data/examples/monte/monte.rb +0 -47
  186. data/examples/monte/plain.rb +0 -47
  187. data/examples/monte/vegas.rb +0 -46
  188. data/examples/multimin/bundle.rb +0 -66
  189. data/examples/multimin/cqp.rb +0 -109
  190. data/examples/multimin/fdfminimizer.rb +0 -40
  191. data/examples/multimin/fminimizer.rb +0 -41
  192. data/examples/multiroot/demo.rb +0 -36
  193. data/examples/multiroot/fdfsolver.rb +0 -50
  194. data/examples/multiroot/fsolver.rb +0 -33
  195. data/examples/multiroot/fsolver2.rb +0 -32
  196. data/examples/multiroot/fsolver3.rb +0 -26
  197. data/examples/narray/histogram.rb +0 -14
  198. data/examples/narray/mandel.rb +0 -27
  199. data/examples/narray/narray.rb +0 -28
  200. data/examples/narray/narray2.rb +0 -44
  201. data/examples/narray/sf.rb +0 -26
  202. data/examples/ntuple/create.rb +0 -17
  203. data/examples/ntuple/project.rb +0 -31
  204. data/examples/odeiv/binarysystem.gp +0 -23
  205. data/examples/odeiv/binarysystem.rb +0 -104
  206. data/examples/odeiv/demo.gp +0 -24
  207. data/examples/odeiv/demo.rb +0 -69
  208. data/examples/odeiv/demo2.gp +0 -26
  209. data/examples/odeiv/duffing.rb +0 -45
  210. data/examples/odeiv/frei1.rb +0 -109
  211. data/examples/odeiv/frei2.rb +0 -76
  212. data/examples/odeiv/legendre.rb +0 -52
  213. data/examples/odeiv/odeiv.rb +0 -32
  214. data/examples/odeiv/odeiv2.rb +0 -45
  215. data/examples/odeiv/oscillator.rb +0 -42
  216. data/examples/odeiv/sedov.rb +0 -97
  217. data/examples/odeiv/whitedwarf.gp +0 -40
  218. data/examples/odeiv/whitedwarf.rb +0 -158
  219. data/examples/ool/conmin.rb +0 -100
  220. data/examples/ool/gencan.rb +0 -99
  221. data/examples/ool/pgrad.rb +0 -100
  222. data/examples/ool/spg.rb +0 -100
  223. data/examples/pdf/bernoulli.rb +0 -5
  224. data/examples/pdf/beta.rb +0 -7
  225. data/examples/pdf/binomiral.rb +0 -10
  226. data/examples/pdf/cauchy.rb +0 -6
  227. data/examples/pdf/chisq.rb +0 -8
  228. data/examples/pdf/exponential.rb +0 -7
  229. data/examples/pdf/exppow.rb +0 -6
  230. data/examples/pdf/fdist.rb +0 -7
  231. data/examples/pdf/flat.rb +0 -7
  232. data/examples/pdf/gamma.rb +0 -8
  233. data/examples/pdf/gauss-tail.rb +0 -5
  234. data/examples/pdf/gauss.rb +0 -6
  235. data/examples/pdf/geometric.rb +0 -5
  236. data/examples/pdf/gumbel.rb +0 -6
  237. data/examples/pdf/hypergeometric.rb +0 -11
  238. data/examples/pdf/landau.rb +0 -5
  239. data/examples/pdf/laplace.rb +0 -7
  240. data/examples/pdf/logarithmic.rb +0 -5
  241. data/examples/pdf/logistic.rb +0 -6
  242. data/examples/pdf/lognormal.rb +0 -6
  243. data/examples/pdf/neg-binomiral.rb +0 -10
  244. data/examples/pdf/pareto.rb +0 -7
  245. data/examples/pdf/pascal.rb +0 -10
  246. data/examples/pdf/poisson.rb +0 -5
  247. data/examples/pdf/rayleigh-tail.rb +0 -6
  248. data/examples/pdf/rayleigh.rb +0 -6
  249. data/examples/pdf/tdist.rb +0 -6
  250. data/examples/pdf/weibull.rb +0 -8
  251. data/examples/permutation/ex1.rb +0 -22
  252. data/examples/permutation/permutation.rb +0 -16
  253. data/examples/poly/bell.rb +0 -6
  254. data/examples/poly/bessel.rb +0 -6
  255. data/examples/poly/cheb.rb +0 -6
  256. data/examples/poly/cheb_II.rb +0 -6
  257. data/examples/poly/cubic.rb +0 -9
  258. data/examples/poly/demo.rb +0 -20
  259. data/examples/poly/eval.rb +0 -28
  260. data/examples/poly/eval_derivs.rb +0 -14
  261. data/examples/poly/fit.rb +0 -21
  262. data/examples/poly/hermite.rb +0 -6
  263. data/examples/poly/poly.rb +0 -13
  264. data/examples/poly/quadratic.rb +0 -25
  265. data/examples/random/diffusion.rb +0 -34
  266. data/examples/random/gaussian.rb +0 -9
  267. data/examples/random/generator.rb +0 -27
  268. data/examples/random/hdsobol.rb +0 -21
  269. data/examples/random/poisson.rb +0 -9
  270. data/examples/random/qrng.rb +0 -19
  271. data/examples/random/randomwalk.rb +0 -37
  272. data/examples/random/randomwalk2d.rb +0 -19
  273. data/examples/random/rayleigh.rb +0 -36
  274. data/examples/random/rng.rb +0 -33
  275. data/examples/random/rngextra.rb +0 -14
  276. data/examples/roots/bisection.rb +0 -25
  277. data/examples/roots/brent.rb +0 -43
  278. data/examples/roots/demo.rb +0 -30
  279. data/examples/roots/newton.rb +0 -46
  280. data/examples/roots/recombination.gp +0 -11
  281. data/examples/roots/recombination.rb +0 -61
  282. data/examples/roots/steffenson.rb +0 -48
  283. data/examples/sf/ShiChi.rb +0 -6
  284. data/examples/sf/SiCi.rb +0 -6
  285. data/examples/sf/airy_Ai.rb +0 -8
  286. data/examples/sf/airy_Bi.rb +0 -8
  287. data/examples/sf/bessel_IK.rb +0 -12
  288. data/examples/sf/bessel_JY.rb +0 -13
  289. data/examples/sf/beta_inc.rb +0 -9
  290. data/examples/sf/clausen.rb +0 -6
  291. data/examples/sf/dawson.rb +0 -5
  292. data/examples/sf/debye.rb +0 -9
  293. data/examples/sf/dilog.rb +0 -6
  294. data/examples/sf/ellint.rb +0 -6
  295. data/examples/sf/expint.rb +0 -8
  296. data/examples/sf/fermi.rb +0 -10
  297. data/examples/sf/gamma_inc_P.rb +0 -9
  298. data/examples/sf/gegenbauer.rb +0 -8
  299. data/examples/sf/hyperg.rb +0 -7
  300. data/examples/sf/laguerre.rb +0 -19
  301. data/examples/sf/lambertW.rb +0 -5
  302. data/examples/sf/legendre_P.rb +0 -10
  303. data/examples/sf/lngamma.rb +0 -5
  304. data/examples/sf/psi.rb +0 -54
  305. data/examples/sf/sphbessel.gp +0 -27
  306. data/examples/sf/sphbessel.rb +0 -30
  307. data/examples/sf/synchrotron.rb +0 -5
  308. data/examples/sf/transport.rb +0 -10
  309. data/examples/sf/zetam1.rb +0 -5
  310. data/examples/siman.rb +0 -44
  311. data/examples/sort/heapsort.rb +0 -23
  312. data/examples/sort/heapsort_vector_complex.rb +0 -21
  313. data/examples/sort/sort.rb +0 -23
  314. data/examples/sort/sort2.rb +0 -16
  315. data/examples/stats/mean.rb +0 -17
  316. data/examples/stats/statistics.rb +0 -18
  317. data/examples/stats/test.rb +0 -9
  318. data/examples/sum.rb +0 -34
  319. data/examples/tamu_anova.rb +0 -18
  320. data/examples/vector/a.dat +0 -0
  321. data/examples/vector/add.rb +0 -56
  322. data/examples/vector/b.dat +0 -4
  323. data/examples/vector/c.dat +0 -3
  324. data/examples/vector/collect.rb +0 -26
  325. data/examples/vector/compare.rb +0 -28
  326. data/examples/vector/complex.rb +0 -51
  327. data/examples/vector/complex_get_all.rb +0 -85
  328. data/examples/vector/complex_set_all.rb +0 -131
  329. data/examples/vector/complex_view_all.rb +0 -77
  330. data/examples/vector/connect.rb +0 -22
  331. data/examples/vector/decimate.rb +0 -38
  332. data/examples/vector/diff.rb +0 -31
  333. data/examples/vector/filescan.rb +0 -17
  334. data/examples/vector/floor.rb +0 -23
  335. data/examples/vector/get_all.rb +0 -82
  336. data/examples/vector/gnuplot.rb +0 -38
  337. data/examples/vector/graph.rb +0 -28
  338. data/examples/vector/histogram.rb +0 -22
  339. data/examples/vector/linspace.rb +0 -24
  340. data/examples/vector/log.rb +0 -17
  341. data/examples/vector/logic.rb +0 -33
  342. data/examples/vector/logspace.rb +0 -25
  343. data/examples/vector/minmax.rb +0 -47
  344. data/examples/vector/mul.rb +0 -49
  345. data/examples/vector/narray.rb +0 -46
  346. data/examples/vector/read.rb +0 -29
  347. data/examples/vector/set.rb +0 -35
  348. data/examples/vector/set_all.rb +0 -121
  349. data/examples/vector/smpv.dat +0 -15
  350. data/examples/vector/test.rb +0 -43
  351. data/examples/vector/test_gslblock.rb +0 -58
  352. data/examples/vector/vector.rb +0 -110
  353. data/examples/vector/view.rb +0 -35
  354. data/examples/vector/view_all.rb +0 -73
  355. data/examples/vector/where.rb +0 -29
  356. data/examples/vector/write.rb +0 -24
  357. data/examples/vector/zip.rb +0 -34
  358. data/examples/wavelet/ecg.dat +0 -256
  359. data/examples/wavelet/wavelet1.rb +0 -50
  360. data/ext/gsl_native/alf.c +0 -206
  361. data/ext/gsl_native/array.c +0 -553
  362. data/ext/gsl_native/array_complex.c +0 -245
  363. data/ext/gsl_native/blas.c +0 -28
  364. data/ext/gsl_native/blas1.c +0 -733
  365. data/ext/gsl_native/blas2.c +0 -1088
  366. data/ext/gsl_native/blas3.c +0 -880
  367. data/ext/gsl_native/block.c +0 -40
  368. data/ext/gsl_native/block_source.h +0 -885
  369. data/ext/gsl_native/bspline.c +0 -122
  370. data/ext/gsl_native/bundle.c +0 -3
  371. data/ext/gsl_native/cdf.c +0 -740
  372. data/ext/gsl_native/cheb.c +0 -531
  373. data/ext/gsl_native/combination.c +0 -275
  374. data/ext/gsl_native/common.c +0 -293
  375. data/ext/gsl_native/complex.c +0 -1002
  376. data/ext/gsl_native/const.c +0 -331
  377. data/ext/gsl_native/const_additional.c +0 -99
  378. data/ext/gsl_native/cqp.c +0 -283
  379. data/ext/gsl_native/deriv.c +0 -187
  380. data/ext/gsl_native/dht.c +0 -353
  381. data/ext/gsl_native/diff.c +0 -164
  382. data/ext/gsl_native/dirac.c +0 -388
  383. data/ext/gsl_native/eigen.c +0 -2322
  384. data/ext/gsl_native/error.c +0 -193
  385. data/ext/gsl_native/extconf.rb +0 -118
  386. data/ext/gsl_native/fft.c +0 -1095
  387. data/ext/gsl_native/fit.c +0 -204
  388. data/ext/gsl_native/fresnel.c +0 -312
  389. data/ext/gsl_native/function.c +0 -518
  390. data/ext/gsl_native/geometry.c +0 -139
  391. data/ext/gsl_native/graph.c +0 -1590
  392. data/ext/gsl_native/gsl.c +0 -259
  393. data/ext/gsl_native/gsl_narray.c +0 -794
  394. data/ext/gsl_native/histogram.c +0 -1964
  395. data/ext/gsl_native/histogram2d.c +0 -1042
  396. data/ext/gsl_native/histogram3d.c +0 -884
  397. data/ext/gsl_native/histogram3d_source.c +0 -749
  398. data/ext/gsl_native/histogram_find.c +0 -99
  399. data/ext/gsl_native/histogram_oper.c +0 -150
  400. data/ext/gsl_native/ieee.c +0 -88
  401. data/ext/gsl_native/include/rb_gsl.h +0 -136
  402. data/ext/gsl_native/include/rb_gsl_array.h +0 -214
  403. data/ext/gsl_native/include/rb_gsl_cheb.h +0 -19
  404. data/ext/gsl_native/include/rb_gsl_common.h +0 -348
  405. data/ext/gsl_native/include/rb_gsl_complex.h +0 -25
  406. data/ext/gsl_native/include/rb_gsl_const.h +0 -23
  407. data/ext/gsl_native/include/rb_gsl_dirac.h +0 -6
  408. data/ext/gsl_native/include/rb_gsl_eigen.h +0 -17
  409. data/ext/gsl_native/include/rb_gsl_fft.h +0 -49
  410. data/ext/gsl_native/include/rb_gsl_fit.h +0 -23
  411. data/ext/gsl_native/include/rb_gsl_function.h +0 -23
  412. data/ext/gsl_native/include/rb_gsl_graph.h +0 -68
  413. data/ext/gsl_native/include/rb_gsl_histogram.h +0 -63
  414. data/ext/gsl_native/include/rb_gsl_histogram3d.h +0 -97
  415. data/ext/gsl_native/include/rb_gsl_integration.h +0 -17
  416. data/ext/gsl_native/include/rb_gsl_interp.h +0 -41
  417. data/ext/gsl_native/include/rb_gsl_linalg.h +0 -21
  418. data/ext/gsl_native/include/rb_gsl_math.h +0 -20
  419. data/ext/gsl_native/include/rb_gsl_odeiv.h +0 -18
  420. data/ext/gsl_native/include/rb_gsl_poly.h +0 -67
  421. data/ext/gsl_native/include/rb_gsl_rational.h +0 -30
  422. data/ext/gsl_native/include/rb_gsl_rng.h +0 -20
  423. data/ext/gsl_native/include/rb_gsl_root.h +0 -22
  424. data/ext/gsl_native/include/rb_gsl_sf.h +0 -110
  425. data/ext/gsl_native/include/rb_gsl_statistics.h +0 -17
  426. data/ext/gsl_native/include/rb_gsl_tensor.h +0 -43
  427. data/ext/gsl_native/include/rb_gsl_with_narray.h +0 -31
  428. data/ext/gsl_native/include/templates_off.h +0 -87
  429. data/ext/gsl_native/include/templates_on.h +0 -241
  430. data/ext/gsl_native/integration.c +0 -1154
  431. data/ext/gsl_native/interp.c +0 -499
  432. data/ext/gsl_native/jacobi.c +0 -733
  433. data/ext/gsl_native/linalg.c +0 -3915
  434. data/ext/gsl_native/linalg_complex.c +0 -726
  435. data/ext/gsl_native/math.c +0 -706
  436. data/ext/gsl_native/matrix.c +0 -36
  437. data/ext/gsl_native/matrix_complex.c +0 -1733
  438. data/ext/gsl_native/matrix_double.c +0 -557
  439. data/ext/gsl_native/matrix_int.c +0 -255
  440. data/ext/gsl_native/matrix_source.h +0 -2708
  441. data/ext/gsl_native/min.c +0 -219
  442. data/ext/gsl_native/monte.c +0 -978
  443. data/ext/gsl_native/multifit.c +0 -1862
  444. data/ext/gsl_native/multimin.c +0 -778
  445. data/ext/gsl_native/multimin_fsdf.c +0 -156
  446. data/ext/gsl_native/multiroots.c +0 -952
  447. data/ext/gsl_native/multiset.c +0 -210
  448. data/ext/gsl_native/ndlinear.c +0 -320
  449. data/ext/gsl_native/nmf.c +0 -171
  450. data/ext/gsl_native/nmf_wrap.c +0 -75
  451. data/ext/gsl_native/ntuple.c +0 -469
  452. data/ext/gsl_native/odeiv.c +0 -947
  453. data/ext/gsl_native/ool.c +0 -879
  454. data/ext/gsl_native/permutation.c +0 -598
  455. data/ext/gsl_native/poly.c +0 -39
  456. data/ext/gsl_native/poly2.c +0 -265
  457. data/ext/gsl_native/poly_source.h +0 -1871
  458. data/ext/gsl_native/qrng.c +0 -160
  459. data/ext/gsl_native/randist.c +0 -1848
  460. data/ext/gsl_native/rational.c +0 -480
  461. data/ext/gsl_native/rng.c +0 -595
  462. data/ext/gsl_native/root.c +0 -407
  463. data/ext/gsl_native/sf.c +0 -1446
  464. data/ext/gsl_native/sf_airy.c +0 -200
  465. data/ext/gsl_native/sf_bessel.c +0 -871
  466. data/ext/gsl_native/sf_clausen.c +0 -28
  467. data/ext/gsl_native/sf_coulomb.c +0 -206
  468. data/ext/gsl_native/sf_coupling.c +0 -121
  469. data/ext/gsl_native/sf_dawson.c +0 -29
  470. data/ext/gsl_native/sf_debye.c +0 -148
  471. data/ext/gsl_native/sf_dilog.c +0 -43
  472. data/ext/gsl_native/sf_elementary.c +0 -46
  473. data/ext/gsl_native/sf_ellint.c +0 -206
  474. data/ext/gsl_native/sf_elljac.c +0 -30
  475. data/ext/gsl_native/sf_erfc.c +0 -89
  476. data/ext/gsl_native/sf_exp.c +0 -169
  477. data/ext/gsl_native/sf_expint.c +0 -201
  478. data/ext/gsl_native/sf_fermi_dirac.c +0 -148
  479. data/ext/gsl_native/sf_gamma.c +0 -343
  480. data/ext/gsl_native/sf_gegenbauer.c +0 -97
  481. data/ext/gsl_native/sf_hyperg.c +0 -203
  482. data/ext/gsl_native/sf_laguerre.c +0 -113
  483. data/ext/gsl_native/sf_lambert.c +0 -47
  484. data/ext/gsl_native/sf_legendre.c +0 -368
  485. data/ext/gsl_native/sf_log.c +0 -105
  486. data/ext/gsl_native/sf_mathieu.c +0 -235
  487. data/ext/gsl_native/sf_power.c +0 -47
  488. data/ext/gsl_native/sf_psi.c +0 -89
  489. data/ext/gsl_native/sf_synchrotron.c +0 -48
  490. data/ext/gsl_native/sf_transport.c +0 -76
  491. data/ext/gsl_native/sf_trigonometric.c +0 -210
  492. data/ext/gsl_native/sf_zeta.c +0 -115
  493. data/ext/gsl_native/signal.c +0 -303
  494. data/ext/gsl_native/siman.c +0 -713
  495. data/ext/gsl_native/sort.c +0 -207
  496. data/ext/gsl_native/spline.c +0 -377
  497. data/ext/gsl_native/stats.c +0 -787
  498. data/ext/gsl_native/sum.c +0 -168
  499. data/ext/gsl_native/tamu_anova.c +0 -56
  500. data/ext/gsl_native/tensor.c +0 -35
  501. data/ext/gsl_native/tensor_source.h +0 -1122
  502. data/ext/gsl_native/vector.c +0 -35
  503. data/ext/gsl_native/vector_complex.c +0 -2241
  504. data/ext/gsl_native/vector_double.c +0 -1433
  505. data/ext/gsl_native/vector_int.c +0 -202
  506. data/ext/gsl_native/vector_source.h +0 -3321
  507. data/ext/gsl_native/wavelet.c +0 -923
  508. data/lib/gsl.rb +0 -8
  509. data/lib/gsl/gnuplot.rb +0 -41
  510. data/lib/gsl/oper.rb +0 -43
  511. data/lib/gsl/version.rb +0 -3
  512. data/lib/ool.rb +0 -22
  513. data/lib/ool/conmin.rb +0 -30
  514. data/lib/rbgsl.rb +0 -1
  515. data/rdoc/alf.rdoc +0 -77
  516. data/rdoc/blas.rdoc +0 -269
  517. data/rdoc/bspline.rdoc +0 -42
  518. data/rdoc/changes.rdoc +0 -159
  519. data/rdoc/cheb.rdoc +0 -99
  520. data/rdoc/cholesky_complex.rdoc +0 -46
  521. data/rdoc/combi.rdoc +0 -125
  522. data/rdoc/complex.rdoc +0 -210
  523. data/rdoc/const.rdoc +0 -546
  524. data/rdoc/dht.rdoc +0 -122
  525. data/rdoc/diff.rdoc +0 -133
  526. data/rdoc/ehandling.rdoc +0 -50
  527. data/rdoc/eigen.rdoc +0 -401
  528. data/rdoc/fft.rdoc +0 -535
  529. data/rdoc/fit.rdoc +0 -284
  530. data/rdoc/function.rdoc +0 -94
  531. data/rdoc/graph.rdoc +0 -137
  532. data/rdoc/hist.rdoc +0 -409
  533. data/rdoc/hist2d.rdoc +0 -279
  534. data/rdoc/hist3d.rdoc +0 -112
  535. data/rdoc/integration.rdoc +0 -398
  536. data/rdoc/interp.rdoc +0 -231
  537. data/rdoc/intro.rdoc +0 -27
  538. data/rdoc/linalg.rdoc +0 -681
  539. data/rdoc/linalg_complex.rdoc +0 -88
  540. data/rdoc/math.rdoc +0 -276
  541. data/rdoc/matrix.rdoc +0 -1093
  542. data/rdoc/min.rdoc +0 -189
  543. data/rdoc/monte.rdoc +0 -234
  544. data/rdoc/multimin.rdoc +0 -312
  545. data/rdoc/multiroot.rdoc +0 -293
  546. data/rdoc/narray.rdoc +0 -177
  547. data/rdoc/ndlinear.rdoc +0 -250
  548. data/rdoc/nonlinearfit.rdoc +0 -348
  549. data/rdoc/ntuple.rdoc +0 -88
  550. data/rdoc/odeiv.rdoc +0 -378
  551. data/rdoc/perm.rdoc +0 -221
  552. data/rdoc/poly.rdoc +0 -335
  553. data/rdoc/qrng.rdoc +0 -90
  554. data/rdoc/randist.rdoc +0 -233
  555. data/rdoc/ref.rdoc +0 -93
  556. data/rdoc/rng.rdoc +0 -203
  557. data/rdoc/roots.rdoc +0 -305
  558. data/rdoc/sf.rdoc +0 -1622
  559. data/rdoc/siman.rdoc +0 -89
  560. data/rdoc/sort.rdoc +0 -94
  561. data/rdoc/start.rdoc +0 -16
  562. data/rdoc/stats.rdoc +0 -219
  563. data/rdoc/sum.rdoc +0 -65
  564. data/rdoc/tensor.rdoc +0 -251
  565. data/rdoc/tut.rdoc +0 -5
  566. data/rdoc/use.rdoc +0 -177
  567. data/rdoc/vector.rdoc +0 -1243
  568. data/rdoc/vector_complex.rdoc +0 -347
  569. data/rdoc/wavelet.rdoc +0 -218
  570. data/test/gsl/blas_test.rb +0 -79
  571. data/test/gsl/bspline_test.rb +0 -63
  572. data/test/gsl/cdf_test.rb +0 -1512
  573. data/test/gsl/cheb_test.rb +0 -80
  574. data/test/gsl/combination_test.rb +0 -100
  575. data/test/gsl/complex_test.rb +0 -20
  576. data/test/gsl/const_test.rb +0 -29
  577. data/test/gsl/deriv_test.rb +0 -62
  578. data/test/gsl/dht_test.rb +0 -79
  579. data/test/gsl/diff_test.rb +0 -53
  580. data/test/gsl/eigen_test.rb +0 -563
  581. data/test/gsl/err_test.rb +0 -23
  582. data/test/gsl/fit_test.rb +0 -101
  583. data/test/gsl/histo_test.rb +0 -14
  584. data/test/gsl/index_test.rb +0 -61
  585. data/test/gsl/integration_test.rb +0 -274
  586. data/test/gsl/interp_test.rb +0 -27
  587. data/test/gsl/linalg_test.rb +0 -463
  588. data/test/gsl/matrix_nmf_test.rb +0 -37
  589. data/test/gsl/matrix_test.rb +0 -98
  590. data/test/gsl/min_test.rb +0 -89
  591. data/test/gsl/monte_test.rb +0 -77
  592. data/test/gsl/multifit_test.rb +0 -753
  593. data/test/gsl/multimin_test.rb +0 -157
  594. data/test/gsl/multiroot_test.rb +0 -135
  595. data/test/gsl/multiset_test.rb +0 -52
  596. data/test/gsl/odeiv_test.rb +0 -275
  597. data/test/gsl/oper_test.rb +0 -98
  598. data/test/gsl/poly_test.rb +0 -338
  599. data/test/gsl/qrng_test.rb +0 -94
  600. data/test/gsl/quartic_test.rb +0 -28
  601. data/test/gsl/randist_test.rb +0 -122
  602. data/test/gsl/rng_test.rb +0 -303
  603. data/test/gsl/roots_test.rb +0 -78
  604. data/test/gsl/sf_test.rb +0 -2079
  605. data/test/gsl/stats_test.rb +0 -122
  606. data/test/gsl/sum_test.rb +0 -69
  607. data/test/gsl/tensor_test.rb +0 -396
  608. data/test/gsl/vector_test.rb +0 -223
  609. data/test/gsl/wavelet_test.rb +0 -130
  610. data/test/gsl_test.rb +0 -321
  611. data/test/test_helper.rb +0 -42
  612. data/uncrustify.cfg +0 -1693
@@ -1,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, &nother, &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