numo-gsl 0.1.0

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 (266) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/README.md +84 -0
  4. data/Rakefile +16 -0
  5. data/ext/numo/gsl/cdf/depend +17 -0
  6. data/ext/numo/gsl/cdf/erbpp_cdf.rb +44 -0
  7. data/ext/numo/gsl/cdf/extconf.rb +9 -0
  8. data/ext/numo/gsl/cdf/func_def.rb +610 -0
  9. data/ext/numo/gsl/const/const_def.rb +419 -0
  10. data/ext/numo/gsl/const/depend +17 -0
  11. data/ext/numo/gsl/const/erbpp_const.rb +30 -0
  12. data/ext/numo/gsl/const/extconf.rb +9 -0
  13. data/ext/numo/gsl/err/depend +1 -0
  14. data/ext/numo/gsl/err/err.c +22 -0
  15. data/ext/numo/gsl/err/extconf.rb +9 -0
  16. data/ext/numo/gsl/extconf_gsl.rb +44 -0
  17. data/ext/numo/gsl/fit/depend +17 -0
  18. data/ext/numo/gsl/fit/erbpp_fit.rb +74 -0
  19. data/ext/numo/gsl/fit/extconf.rb +9 -0
  20. data/ext/numo/gsl/fit/func_def.rb +129 -0
  21. data/ext/numo/gsl/fit/tmpl/check_1d.c +9 -0
  22. data/ext/numo/gsl/fit/tmpl/fit_linear.c +53 -0
  23. data/ext/numo/gsl/fit/tmpl/fit_linear_est.c +56 -0
  24. data/ext/numo/gsl/fit/tmpl/fit_mul.c +50 -0
  25. data/ext/numo/gsl/fit/tmpl/fit_mul_est.c +47 -0
  26. data/ext/numo/gsl/fit/tmpl/fit_wlinear.c +59 -0
  27. data/ext/numo/gsl/fit/tmpl/fit_wmul.c +56 -0
  28. data/ext/numo/gsl/gen/erbpp2.rb +306 -0
  29. data/ext/numo/gsl/gen/erbpp_gsl.rb +166 -0
  30. data/ext/numo/gsl/gen/func_parser.rb +520 -0
  31. data/ext/numo/gsl/gen/tmpl/c_DFloat_f_DFloat.c +40 -0
  32. data/ext/numo/gsl/gen/tmpl/c_DFloat_f_SZ.c +41 -0
  33. data/ext/numo/gsl/gen/tmpl/c_DFloat_f_SZ_x2.c +44 -0
  34. data/ext/numo/gsl/gen/tmpl/c_DFloat_x2_f_DFloat_x2.c +45 -0
  35. data/ext/numo/gsl/gen/tmpl/c_double_f_double.c +16 -0
  36. data/ext/numo/gsl/gen/tmpl/c_double_f_sizet.c +16 -0
  37. data/ext/numo/gsl/gen/tmpl/c_double_f_sizet_x2.c +17 -0
  38. data/ext/numo/gsl/gen/tmpl/c_double_f_void.c +15 -0
  39. data/ext/numo/gsl/gen/tmpl/c_double_x2_f_void.c +17 -0
  40. data/ext/numo/gsl/gen/tmpl/c_new_DFloat.c +29 -0
  41. data/ext/numo/gsl/gen/tmpl/c_new_double.c +22 -0
  42. data/ext/numo/gsl/gen/tmpl/c_new_f_other.c +25 -0
  43. data/ext/numo/gsl/gen/tmpl/c_new_sizet.c +22 -0
  44. data/ext/numo/gsl/gen/tmpl/c_new_sizet_double.c +23 -0
  45. data/ext/numo/gsl/gen/tmpl/c_new_sizet_x2.c +23 -0
  46. data/ext/numo/gsl/gen/tmpl/c_new_void.c +21 -0
  47. data/ext/numo/gsl/gen/tmpl/c_other_f_void.c +19 -0
  48. data/ext/numo/gsl/gen/tmpl/c_self_f_DFloat.c +46 -0
  49. data/ext/numo/gsl/gen/tmpl/c_self_f_DFloat_x2.c +41 -0
  50. data/ext/numo/gsl/gen/tmpl/c_self_f_DFloat_x3.c +44 -0
  51. data/ext/numo/gsl/gen/tmpl/c_self_f_DFloat_x4.c +47 -0
  52. data/ext/numo/gsl/gen/tmpl/c_self_f_SZ_x2_DFloat.c +45 -0
  53. data/ext/numo/gsl/gen/tmpl/c_self_f_double.c +17 -0
  54. data/ext/numo/gsl/gen/tmpl/c_self_f_other.c +17 -0
  55. data/ext/numo/gsl/gen/tmpl/c_self_f_sizet.c +21 -0
  56. data/ext/numo/gsl/gen/tmpl/c_self_f_void.c +14 -0
  57. data/ext/numo/gsl/gen/tmpl/c_sizet_f_void.c +15 -0
  58. data/ext/numo/gsl/gen/tmpl/c_sizet_x2_f_void.c +17 -0
  59. data/ext/numo/gsl/gen/tmpl/c_str_f_void.c +15 -0
  60. data/ext/numo/gsl/gen/tmpl/c_super_new_void.c +18 -0
  61. data/ext/numo/gsl/gen/tmpl/c_uint_f_void.c +15 -0
  62. data/ext/numo/gsl/gen/tmpl/c_ulong_f_void.c +15 -0
  63. data/ext/numo/gsl/gen/tmpl/c_void_f_double.c +17 -0
  64. data/ext/numo/gsl/gen/tmpl/c_void_f_double_x2.c +18 -0
  65. data/ext/numo/gsl/gen/tmpl/c_void_f_double_x4.c +20 -0
  66. data/ext/numo/gsl/gen/tmpl/c_void_f_ulong.c +17 -0
  67. data/ext/numo/gsl/gen/tmpl/c_void_f_void.c +14 -0
  68. data/ext/numo/gsl/gen/tmpl/cast_1d_contiguous.c +15 -0
  69. data/ext/numo/gsl/gen/tmpl/cast_2d_contiguous.c +15 -0
  70. data/ext/numo/gsl/gen/tmpl/class.c +26 -0
  71. data/ext/numo/gsl/gen/tmpl/create_new_narray.c +26 -0
  72. data/ext/numo/gsl/gen/tmpl/init_class.c +10 -0
  73. data/ext/numo/gsl/gen/tmpl/init_module.c +12 -0
  74. data/ext/numo/gsl/gen/tmpl/lib.c +41 -0
  75. data/ext/numo/gsl/gen/tmpl/m_DFloat_Int_f_DFloat.c +38 -0
  76. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat.c +35 -0
  77. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_Int.c +39 -0
  78. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_UInt.c +39 -0
  79. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_double.c +42 -0
  80. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_double_x2.c +47 -0
  81. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_int.c +42 -0
  82. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_x2.c +38 -0
  83. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_x3.c +41 -0
  84. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_Int.c +36 -0
  85. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt.c +36 -0
  86. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt32.c +36 -0
  87. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt32_double.c +43 -0
  88. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt32_double_uint.c +49 -0
  89. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt32_double_x2.c +48 -0
  90. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt32_uint_x3.c +51 -0
  91. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt_double.c +43 -0
  92. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt_double_uint.c +50 -0
  93. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt_double_x2.c +48 -0
  94. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt_uint_x3.c +51 -0
  95. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_int_DFloat.c +41 -0
  96. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_int_DFloat_x2.c +44 -0
  97. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_int_x2_DFloat_x2.c +46 -0
  98. data/ext/numo/gsl/gen/tmpl/m_Int_f_DFloat.c +36 -0
  99. data/ext/numo/gsl/gen/tmpl/m_Int_f_DFloat_x3.c +42 -0
  100. data/ext/numo/gsl/gen/tmpl/m_Int_f_int_DFloat.c +42 -0
  101. data/ext/numo/gsl/gen/tmpl/m_Int_f_int_DFloat_x2.c +45 -0
  102. data/ext/numo/gsl/gen/tmpl/mod_func_noloop.c +54 -0
  103. data/ext/numo/gsl/gen/tmpl/mod_func_scalar.c +27 -0
  104. data/ext/numo/gsl/gen/tmpl/module.c +9 -0
  105. data/ext/numo/gsl/histogram/depend +17 -0
  106. data/ext/numo/gsl/histogram/erbpp_histogram.rb +109 -0
  107. data/ext/numo/gsl/histogram/extconf.rb +9 -0
  108. data/ext/numo/gsl/histogram/func_def.rb +763 -0
  109. data/ext/numo/gsl/histogram/tmpl/c_DFloat_f_2d_get.c +54 -0
  110. data/ext/numo/gsl/histogram/tmpl/c_DFloat_f_field.c +35 -0
  111. data/ext/numo/gsl/histogram/tmpl/c_DFloat_f_get.c +47 -0
  112. data/ext/numo/gsl/histogram/tmpl/c_DFloat_x2_f_get_range.c +56 -0
  113. data/ext/numo/gsl/histogram/tmpl/c_bool_f_other.c +19 -0
  114. data/ext/numo/gsl/histogram/tmpl/c_bool_f_pdf_init.c +24 -0
  115. data/ext/numo/gsl/histogram/tmpl/c_self_f_2d_set_ranges.c +26 -0
  116. data/ext/numo/gsl/histogram/tmpl/c_self_f_set_ranges.c +21 -0
  117. data/ext/numo/gsl/histogram/tmpl/c_sizet_f_field.c +15 -0
  118. data/ext/numo/gsl/interp/depend +17 -0
  119. data/ext/numo/gsl/interp/erbpp_interp.rb +59 -0
  120. data/ext/numo/gsl/interp/extconf.rb +9 -0
  121. data/ext/numo/gsl/interp/func_def.rb +816 -0
  122. data/ext/numo/gsl/interp/parse_interp.rb +67 -0
  123. data/ext/numo/gsl/interp/tmpl/interp2d_new.c +36 -0
  124. data/ext/numo/gsl/interp/tmpl/interp2d_type_new.c +17 -0
  125. data/ext/numo/gsl/interp/tmpl/interp_bsearch.c +57 -0
  126. data/ext/numo/gsl/interp/tmpl/interp_new.c +29 -0
  127. data/ext/numo/gsl/interp/tmpl/interp_type_new.c +16 -0
  128. data/ext/numo/gsl/interp/tmpl/spline2d_eval.c +61 -0
  129. data/ext/numo/gsl/interp/tmpl/spline_eval.c +55 -0
  130. data/ext/numo/gsl/interp/tmpl/spline_integ.c +56 -0
  131. data/ext/numo/gsl/interp/type_def.rb +9 -0
  132. data/ext/numo/gsl/multifit/depend +17 -0
  133. data/ext/numo/gsl/multifit/erbpp_multifit.rb +99 -0
  134. data/ext/numo/gsl/multifit/extconf.rb +9 -0
  135. data/ext/numo/gsl/multifit/func_2.1.rb +1035 -0
  136. data/ext/numo/gsl/multifit/func_2.2.1.rb +736 -0
  137. data/ext/numo/gsl/multifit/func_2.2.rb +736 -0
  138. data/ext/numo/gsl/multifit/func_2.3.rb +872 -0
  139. data/ext/numo/gsl/multifit/func_def.rb +1012 -0
  140. data/ext/numo/gsl/multifit/tmpl/multifit_linear.c +66 -0
  141. data/ext/numo/gsl/multifit/tmpl/multifit_linear_est.c +48 -0
  142. data/ext/numo/gsl/multifit/tmpl/multifit_linear_residuals.c +47 -0
  143. data/ext/numo/gsl/multifit/tmpl/multifit_wlinear.c +70 -0
  144. data/ext/numo/gsl/multifit/type_def.rb +1 -0
  145. data/ext/numo/gsl/numo_gsl.h +117 -0
  146. data/ext/numo/gsl/pdf/depend +17 -0
  147. data/ext/numo/gsl/pdf/erbpp_pdf.rb +26 -0
  148. data/ext/numo/gsl/pdf/extconf.rb +9 -0
  149. data/ext/numo/gsl/pdf/func_2.2.1.rb +306 -0
  150. data/ext/numo/gsl/pdf/func_2.2.rb +306 -0
  151. data/ext/numo/gsl/pdf/func_2.3.rb +306 -0
  152. data/ext/numo/gsl/pdf/func_def.rb +282 -0
  153. data/ext/numo/gsl/pdf/parse_pdf.rb +42 -0
  154. data/ext/numo/gsl/pdf/tmpl/dirichlet.c +39 -0
  155. data/ext/numo/gsl/pdf/tmpl/multinomial.c +39 -0
  156. data/ext/numo/gsl/poly/depend +17 -0
  157. data/ext/numo/gsl/poly/erbpp_poly.rb +70 -0
  158. data/ext/numo/gsl/poly/extconf.rb +9 -0
  159. data/ext/numo/gsl/poly/func_def.rb +234 -0
  160. data/ext/numo/gsl/poly/tmpl/poly_complex_solve.c +59 -0
  161. data/ext/numo/gsl/poly/tmpl/poly_eval.c +70 -0
  162. data/ext/numo/gsl/poly/tmpl/poly_eval_derivs.c +40 -0
  163. data/ext/numo/gsl/ran/depend +17 -0
  164. data/ext/numo/gsl/ran/erbpp_ran.rb +42 -0
  165. data/ext/numo/gsl/ran/extconf.rb +9 -0
  166. data/ext/numo/gsl/ran/func_2.2.1.rb +1658 -0
  167. data/ext/numo/gsl/ran/func_2.2.rb +1658 -0
  168. data/ext/numo/gsl/ran/func_2.3.rb +1658 -0
  169. data/ext/numo/gsl/ran/func_def.rb +1594 -0
  170. data/ext/numo/gsl/ran/parse_ran.rb +10 -0
  171. data/ext/numo/gsl/rng/depend +17 -0
  172. data/ext/numo/gsl/rng/erbpp_rng.rb +58 -0
  173. data/ext/numo/gsl/rng/extconf.rb +9 -0
  174. data/ext/numo/gsl/rng/func_def.rb +230 -0
  175. data/ext/numo/gsl/rng/parse_rng.rb +125 -0
  176. data/ext/numo/gsl/rng/tmpl/ran.c +40 -0
  177. data/ext/numo/gsl/rng/tmpl/ran_DFloat_f_DFloat.c +28 -0
  178. data/ext/numo/gsl/rng/tmpl/ran_DFloat_x2.c +45 -0
  179. data/ext/numo/gsl/rng/tmpl/ran_DFloat_x3.c +51 -0
  180. data/ext/numo/gsl/rng/tmpl/ran_multinomial.c +32 -0
  181. data/ext/numo/gsl/rng/tmpl/rng_DFloat.c +29 -0
  182. data/ext/numo/gsl/rng/tmpl/rng_UInt.c +44 -0
  183. data/ext/numo/gsl/rng/tmpl/rng_alloc.c +24 -0
  184. data/ext/numo/gsl/rng/tmpl/rng_type_new.c +14 -0
  185. data/ext/numo/gsl/rng/type_def.rb +63 -0
  186. data/ext/numo/gsl/rstat/depend +17 -0
  187. data/ext/numo/gsl/rstat/erbpp_rstat.rb +64 -0
  188. data/ext/numo/gsl/rstat/extconf.rb +9 -0
  189. data/ext/numo/gsl/rstat/func_2.2.1.rb +116 -0
  190. data/ext/numo/gsl/rstat/func_2.2.rb +116 -0
  191. data/ext/numo/gsl/rstat/func_2.3.rb +123 -0
  192. data/ext/numo/gsl/rstat/func_def.rb +102 -0
  193. data/ext/numo/gsl/sf/depend +17 -0
  194. data/ext/numo/gsl/sf/erbpp_sf.rb +51 -0
  195. data/ext/numo/gsl/sf/extconf.rb +9 -0
  196. data/ext/numo/gsl/sf/func_def.rb +4703 -0
  197. data/ext/numo/gsl/sf/parse_sf.rb +277 -0
  198. data/ext/numo/gsl/sf/tmpl/c_DFloat_f_int_x2_DFloat.c +50 -0
  199. data/ext/numo/gsl/sf/tmpl/c_DFloat_f_int_x2_DFloat_x2.c +52 -0
  200. data/ext/numo/gsl/sf/tmpl/c_DFloat_f_int_x3_DFloat_x2.c +55 -0
  201. data/ext/numo/gsl/sf/tmpl/m_DFloat_f_DFloat_mode.c +47 -0
  202. data/ext/numo/gsl/sf/tmpl/m_DFloat_f_lmax_array.c +41 -0
  203. data/ext/numo/gsl/sf/tmpl/m_DFloat_f_nmin_nmax_array.c +49 -0
  204. data/ext/numo/gsl/spmatrix/const_2.2.1.rb +3 -0
  205. data/ext/numo/gsl/spmatrix/const_2.2.rb +3 -0
  206. data/ext/numo/gsl/spmatrix/const_2.3.rb +3 -0
  207. data/ext/numo/gsl/spmatrix/const_def.rb +2 -0
  208. data/ext/numo/gsl/spmatrix/depend +17 -0
  209. data/ext/numo/gsl/spmatrix/erbpp_spmatrix.rb +100 -0
  210. data/ext/numo/gsl/spmatrix/extconf.rb +9 -0
  211. data/ext/numo/gsl/spmatrix/func_2.2.1.rb +297 -0
  212. data/ext/numo/gsl/spmatrix/func_2.2.rb +297 -0
  213. data/ext/numo/gsl/spmatrix/func_2.3.rb +297 -0
  214. data/ext/numo/gsl/spmatrix/func_def.rb +218 -0
  215. data/ext/numo/gsl/spmatrix/parse_spmatrix.rb +70 -0
  216. data/ext/numo/gsl/spmatrix/tmpl/itersolve_iterate.c +47 -0
  217. data/ext/numo/gsl/spmatrix/tmpl/itersolve_new.c +22 -0
  218. data/ext/numo/gsl/spmatrix/tmpl/itersolve_type_new.c +16 -0
  219. data/ext/numo/gsl/spmatrix/tmpl/spblas_dgemm.c +35 -0
  220. data/ext/numo/gsl/spmatrix/tmpl/spblas_dgemv.c +43 -0
  221. data/ext/numo/gsl/spmatrix/tmpl/spmatrix_add.c +22 -0
  222. data/ext/numo/gsl/spmatrix/tmpl/spmatrix_d2sp.c +28 -0
  223. data/ext/numo/gsl/spmatrix/tmpl/spmatrix_new.c +40 -0
  224. data/ext/numo/gsl/spmatrix/tmpl/spmatrix_sp2d.c +25 -0
  225. data/ext/numo/gsl/spmatrix/type_def.rb +1 -0
  226. data/ext/numo/gsl/stats/depend +17 -0
  227. data/ext/numo/gsl/stats/erbpp_stats.rb +29 -0
  228. data/ext/numo/gsl/stats/extconf.rb +9 -0
  229. data/ext/numo/gsl/stats/func_2.2.1.rb +608 -0
  230. data/ext/numo/gsl/stats/func_2.2.rb +608 -0
  231. data/ext/numo/gsl/stats/func_2.3.rb +608 -0
  232. data/ext/numo/gsl/stats/func_def.rb +608 -0
  233. data/ext/numo/gsl/stats/parse_stats.rb +63 -0
  234. data/ext/numo/gsl/stats/tmpl/stats_1a0p.c +37 -0
  235. data/ext/numo/gsl/stats/tmpl/stats_1a0p_index.c +60 -0
  236. data/ext/numo/gsl/stats/tmpl/stats_1a1p.c +41 -0
  237. data/ext/numo/gsl/stats/tmpl/stats_1a2p.c +42 -0
  238. data/ext/numo/gsl/stats/tmpl/stats_2a0p.c +39 -0
  239. data/ext/numo/gsl/stats/tmpl/stats_2a1p.c +43 -0
  240. data/ext/numo/gsl/stats/tmpl/stats_2a2p.c +44 -0
  241. data/ext/numo/gsl/stats/tmpl/stats_minmax.c +37 -0
  242. data/ext/numo/gsl/stats/tmpl/stats_minmax_index.c +67 -0
  243. data/ext/numo/gsl/stats/tmpl/stats_spearman.c +46 -0
  244. data/ext/numo/gsl/sys/const_def.rb +21 -0
  245. data/ext/numo/gsl/sys/depend +17 -0
  246. data/ext/numo/gsl/sys/enum_def.rb +75 -0
  247. data/ext/numo/gsl/sys/erbpp_sys.rb +60 -0
  248. data/ext/numo/gsl/sys/extconf.rb +9 -0
  249. data/ext/numo/gsl/sys/func_def.rb +249 -0
  250. data/ext/numo/gsl/version.h +1 -0
  251. data/ext/numo/gsl/wavelet/depend +17 -0
  252. data/ext/numo/gsl/wavelet/erbpp_wavelet.rb +48 -0
  253. data/ext/numo/gsl/wavelet/extconf.rb +9 -0
  254. data/ext/numo/gsl/wavelet/func_def.rb +337 -0
  255. data/ext/numo/gsl/wavelet/parse_wavelet.rb +47 -0
  256. data/ext/numo/gsl/wavelet/tmpl/wavelet2d_transform.c +56 -0
  257. data/ext/numo/gsl/wavelet/tmpl/wavelet_array_check.c +56 -0
  258. data/ext/numo/gsl/wavelet/tmpl/wavelet_macro.c +1 -0
  259. data/ext/numo/gsl/wavelet/tmpl/wavelet_new.c +20 -0
  260. data/ext/numo/gsl/wavelet/tmpl/wavelet_transform.c +55 -0
  261. data/ext/numo/gsl/wavelet/tmpl/wavelet_transform2.c +22 -0
  262. data/ext/numo/gsl/wavelet/tmpl/wavelet_type_new.c +15 -0
  263. data/ext/numo/gsl/wavelet/type_def.rb +6 -0
  264. data/lib/numo/gsl.rb +17 -0
  265. data/numo-gsl.gemspec +33 -0
  266. metadata +367 -0
@@ -0,0 +1,218 @@
1
+ [{:func_name=>"gsl_spmatrix_alloc",
2
+ :func_type=>"gsl_spmatrix *",
3
+ :args=>[["const size_t", "n1"], ["const size_t", "n2"]],
4
+ :desc=>
5
+ "This function allocates a sparse matrix of size n1-by-n2 and\n" +
6
+ "initializes it to all zeros. If the size of the matrix is not known at allocation\n" +
7
+ "time, both n1 and n2 may be set to 1, and they will automatically\n" +
8
+ "grow as elements are added to the matrix. This function sets the\n" +
9
+ "matrix to the triplet representation, which is the easiest for adding\n" +
10
+ "and accessing matrix elements. This function tries to make a reasonable guess\n" +
11
+ "for the number of non-zero elements (nzmax) which will be added to the matrix by\n" +
12
+ "assuming a sparse density of 10\\%. The function\n" +
13
+ "gsl_spmatrix_alloc_nzmax can be used if this number is known more\n" +
14
+ "accurately. The workspace is of size O(nzmax)."},
15
+ {:func_name=>"gsl_spmatrix_alloc_nzmax",
16
+ :func_type=>"gsl_spmatrix *",
17
+ :args=>
18
+ [["const size_t", "n1"],
19
+ ["const size_t", "n2"],
20
+ ["const size_t", "nzmax"],
21
+ ["const size_t", "sptype"]],
22
+ :desc=>
23
+ "This function allocates a sparse matrix of size n1-by-n2 and\n" +
24
+ "initializes it to all zeros. If the size of the matrix is not known at allocation\n" +
25
+ "time, both n1 and n2 may be set to 1, and they will automatically\n" +
26
+ "grow as elements are added to the matrix. The parameter nzmax specifies\n" +
27
+ "the maximum number of non-zero elements which will be added to the matrix.\n" +
28
+ "It does not need to be precisely known in advance, since storage space will \n" +
29
+ "automatically grow using gsl_spmatrix_realloc if nzmax is not\n" +
30
+ "large enough. Accurate knowledge of this parameter reduces the number of\n" +
31
+ "reallocation calls required. The parameter sptype specifies the\n" +
32
+ "storage format of the sparse matrix. Possible values are\n" +
33
+ "The allocated gsl_spmatrix structure is of size O(nzmax)."},
34
+ {:func_name=>"gsl_spmatrix_realloc",
35
+ :func_type=>"int",
36
+ :args=>[["const size_t", "nzmax"], ["gsl_spmatrix *", "m"]],
37
+ :desc=>
38
+ "This function reallocates the storage space for m to accomodate\n" +
39
+ "nzmax non-zero elements. It is typically called internally by\n" +
40
+ "gsl_spmatrix_set if the user wants to add more elements to the\n" +
41
+ "sparse matrix than the previously specified nzmax."},
42
+ {:func_name=>"gsl_spmatrix_free",
43
+ :func_type=>"void",
44
+ :args=>[["gsl_spmatrix *", "m"]],
45
+ :desc=>
46
+ "This function frees the memory associated with the sparse matrix m."},
47
+ {:func_name=>"gsl_spmatrix_get",
48
+ :func_type=>"double",
49
+ :args=>
50
+ [["const gsl_spmatrix *", "m"],
51
+ ["const size_t", "i"],
52
+ ["const size_t", "j"]],
53
+ :desc=>
54
+ "This function returns element (i,j) of the matrix m.\n" +
55
+ "The matrix may be in triplet or compressed format."},
56
+ {:func_name=>"gsl_spmatrix_set",
57
+ :func_type=>"int",
58
+ :args=>
59
+ [["gsl_spmatrix *", "m"],
60
+ ["const size_t", "i"],
61
+ ["const size_t", "j"],
62
+ ["const double", "x"]],
63
+ :desc=>
64
+ "This function sets element (i,j) of the matrix m to\n" +
65
+ "the value x. The matrix must be in triplet representation."},
66
+ {:func_name=>"gsl_spmatrix_set_zero",
67
+ :func_type=>"int",
68
+ :args=>[["gsl_spmatrix *", "m"]],
69
+ :desc=>
70
+ "This function sets (or resets) all the elements of the matrix m to zero."},
71
+ {:func_name=>"gsl_spmatrix_memcpy",
72
+ :func_type=>"int",
73
+ :args=>[["gsl_spmatrix *", "dest"], ["const gsl_spmatrix *", "src"]],
74
+ :desc=>
75
+ "This function copies the elements of the sparse matrix src into\n" +
76
+ "dest. The two matrices must have the same dimensions and be in the\n" +
77
+ "same storage format."},
78
+ {:func_name=>"gsl_spmatrix_transpose_memcpy",
79
+ :func_type=>"int",
80
+ :args=>[["gsl_spmatrix *", "dest"], ["const gsl_spmatrix *", "src"]],
81
+ :desc=>
82
+ "This function copies the transpose of the sparse matrix src into\n" +
83
+ "dest. The dimensions of dest must match the transpose of the\n" +
84
+ "matrix src. Also, both matrices must use the same sparse storage\n" +
85
+ "format."},
86
+ {:func_name=>"gsl_spmatrix_add",
87
+ :func_type=>"int",
88
+ :args=>
89
+ [["gsl_spmatrix *", "c"],
90
+ ["const gsl_spmatrix *", "a"],
91
+ ["const gsl_spmatrix *", "b"]],
92
+ :desc=>
93
+ "This function computes the sum c = a + b. The three matrices must\n" +
94
+ "have the same dimensions and be stored in compressed column format."},
95
+ {:func_name=>"gsl_spmatrix_scale",
96
+ :func_type=>"int",
97
+ :args=>[["gsl_spmatrix *", "m"], ["const double", "x"]],
98
+ :desc=>
99
+ "This function scales all elements of the matrix m by the constant\n" +
100
+ "factor x. The result m(i,j) \\leftarrow x m(i,j) is stored in m."},
101
+ {:func_name=>"gsl_spmatrix_nnz",
102
+ :func_type=>"size_t",
103
+ :args=>[["const gsl_spmatrix *", "m"]],
104
+ :desc=>"This function returns the number of non-zero elements in m."},
105
+ {:func_name=>"gsl_spmatrix_equal",
106
+ :func_type=>"int",
107
+ :args=>[["const gsl_spmatrix *", "a"], ["const gsl_spmatrix *", "b"]],
108
+ :desc=>
109
+ "This function returns 1 if the matrices a and b are equal (by comparison of\n" +
110
+ "element values) and 0 otherwise. The matrices a and b must be either\n" +
111
+ "both triplet format or both compressed format for comparison."},
112
+ {:func_name=>"gsl_spmatrix_minmax",
113
+ :func_type=>"int",
114
+ :args=>
115
+ [["const gsl_spmatrix *", "m"],
116
+ ["double *", "min_out"],
117
+ ["double *", "max_out"]],
118
+ :desc=>
119
+ "This function returns the minimum and maximum elements of the matrix\n" +
120
+ "m, storing them in min_out and max_out, and searching\n" +
121
+ "only the non-zero values."},
122
+ {:func_name=>"gsl_spmatrix_compcol",
123
+ :func_type=>"gsl_spmatrix *",
124
+ :args=>[["const gsl_spmatrix *", "T"]],
125
+ :desc=>
126
+ "This function creates a sparse matrix in compressed column format\n" +
127
+ "from the input sparse matrix T which must be in triplet format.\n" +
128
+ "A pointer to a newly allocated matrix is returned. The calling function\n" +
129
+ "should free the newly allocated matrix when it is no longer needed."},
130
+ {:func_name=>"gsl_spmatrix_d2sp",
131
+ :func_type=>"int",
132
+ :args=>[["gsl_spmatrix *", "S"], ["const gsl_matrix *", "A"]],
133
+ :desc=>
134
+ "This function converts the dense matrix A into sparse triplet format\n" +
135
+ "and stores the result in S."},
136
+ {:func_name=>"gsl_spmatrix_sp2d",
137
+ :func_type=>"int",
138
+ :args=>[["gsl_matrix *", "A"], ["const gsl_spmatrix *", "S"]],
139
+ :desc=>
140
+ "This function converts the sparse matrix S into a dense matrix and\n" +
141
+ "stores the result in A. S must be in triplet format."},
142
+ {:func_name=>"gsl_spblas_dgemv",
143
+ :func_type=>"int",
144
+ :args=>
145
+ [["const CBLAS_TRANSPOSE_t", "TransA"],
146
+ ["const double", "alpha"],
147
+ ["const gsl_spmatrix *", "A"],
148
+ ["const gsl_vector *", "x"],
149
+ ["const double", "beta"],
150
+ ["gsl_vector *", "y"]],
151
+ :desc=>
152
+ "This function computes the matrix-vector product and sum\n" +
153
+ "y \\leftarrow \\alpha op(A) x + \\beta y, where\n" +
154
+ "op(A) = A, A^T for TransA = CblasNoTrans,\n" +
155
+ "CblasTrans. In-place computations are not supported, so\n" +
156
+ "x and y must be distinct vectors.\n" +
157
+ "The matrix A may be in triplet or compressed format."},
158
+ {:func_name=>"gsl_spblas_dgemm",
159
+ :func_type=>"int",
160
+ :args=>
161
+ [["const double", "alpha"],
162
+ ["const gsl_spmatrix *", "A"],
163
+ ["const gsl_spmatrix *", "B"],
164
+ ["gsl_spmatrix *", "C"]],
165
+ :desc=>
166
+ "This function computes the sparse matrix-matrix product\n" +
167
+ "C = \\alpha A B. The matrices must be in compressed format."},
168
+ {:func_name=>"gsl_splinalg_itersolve_alloc",
169
+ :func_type=>"gsl_splinalg_itersolve *",
170
+ :args=>
171
+ [["const gsl_splinalg_itersolve_type *", "T"],
172
+ ["const size_t", "n"],
173
+ ["const size_t", "m"]],
174
+ :desc=>
175
+ "This function allocates a workspace for the iterative solution of\n" +
176
+ "n-by-n sparse matrix systems. The iterative solver type\n" +
177
+ "is specified by T. The argument m specifies the size\n" +
178
+ "of the solution candidate subspace {\\cal K}_m. The dimension\n" +
179
+ "m may be set to 0 in which case a reasonable default value is used."},
180
+ {:func_name=>"gsl_splinalg_itersolve_free",
181
+ :func_type=>"void",
182
+ :args=>[["gsl_splinalg_itersolve *", "w"]],
183
+ :desc=>"This function frees the memory associated with the workspace w."},
184
+ {:func_name=>"gsl_splinalg_itersolve_name",
185
+ :func_type=>"const char *",
186
+ :args=>[["const gsl_splinalg_itersolve *", "w"]],
187
+ :desc=>"This function returns a string pointer to the name of the solver."},
188
+ {:func_name=>"gsl_splinalg_itersolve_iterate",
189
+ :func_type=>"int",
190
+ :args=>
191
+ [["const gsl_spmatrix *", "A"],
192
+ ["const gsl_vector *", "b"],
193
+ ["const double", "tol"],
194
+ ["gsl_vector *", "x"],
195
+ ["gsl_splinalg_itersolve *", "w"]],
196
+ :desc=>
197
+ "This function performs one iteration of the iterative method for\n" +
198
+ "the sparse linear system specfied by the matrix A, right hand\n" +
199
+ "side vector b and solution vector x. On input, x\n" +
200
+ "must be set to an initial guess for the solution. On output,\n" +
201
+ "x is updated to give the current solution estimate. The\n" +
202
+ "parameter tol specifies the relative tolerance between the residual\n" +
203
+ "norm and norm of b in order to check for convergence.\n" +
204
+ "When the following condition is satisfied:\n" +
205
+ "|| A x - b || <= tol * || b ||\n" +
206
+ "the method has converged, the function returns GSL_SUCCESS and\n" +
207
+ "the final solution is provided in x. Otherwise, the function\n" +
208
+ "returns GSL_CONTINUE to signal that more iterations are\n" +
209
+ "required. Here, || \\cdot || represents the Euclidean norm.\n" +
210
+ "The input matrix A may be in triplet or compressed column\n" +
211
+ "format."},
212
+ {:func_name=>"gsl_splinalg_itersolve_normr",
213
+ :func_type=>"double",
214
+ :args=>[["const gsl_splinalg_itersolve *", "w"]],
215
+ :desc=>
216
+ "This function returns the current residual norm\n" +
217
+ "||r|| = ||A x - b||, which is updated after each call to\n" +
218
+ "gsl_splinalg_itersolve_iterate."}]
@@ -0,0 +1,70 @@
1
+ require_relative "../gen/erbpp_gsl"
2
+
3
+ class DefSpMatrix < DefGslClass
4
+ def lookup(h)
5
+ case h
6
+ when FM(name:/_free$/); false
7
+ when FM(name:/_alloc$/); false
8
+ when FM(name:/_alloc_nzmax$/); "spmatrix_new"
9
+
10
+ when FM(name:/_sp2d$/); "spmatrix_sp2d"
11
+ when FM(name:/_d2sp$/); "spmatrix_d2sp"
12
+
13
+ when FM(tp,tp,tp,name:/_add$/); "spmatrix_add"
14
+ when FM(tp,*[szt]*2,type:"double"); "c_DFloat_f_SZ_x2"
15
+ when FM(tp,*[szt]*2,"double"); "c_self_f_SZ_x2_DFloat"
16
+ when FM(szt,tp); h[:postpose]=true; "c_self_f_sizet"
17
+ when FM(tp,"double"); "c_self_f_double"
18
+ when FM(tp,*["double *"]*2); "c_double_x2_f_void"
19
+ when FM(tp,type:tp); "c_other_f_void"
20
+ when FM(tp,tp,type:"int"); "c_self_f_other"
21
+ when FM(tp,type:"size_t"); "c_sizet_f_void"
22
+ when FM(tp,type:"int"); "c_self_f_void"
23
+ end
24
+ end
25
+ end
26
+
27
+
28
+ class DefSpBlas < DefGslModule
29
+ def lookup(h)
30
+ case h
31
+ when FM(name:/_dgemv$/); "spblas_dgemv"
32
+ when FM(name:/_dgemm$/); "spblas_dgemm"
33
+ end
34
+ end
35
+ end
36
+
37
+
38
+ class DefIterSolve < DefGslClass
39
+
40
+ def lookup(h)
41
+ case h
42
+ when FM(name:/_free$/); false
43
+ when FM(name:/_itersolve_alloc$/); "itersolve_new"
44
+ when FM(name:/_itersolve_iterate$/); "itersolve_iterate"
45
+ when FM(tp, type:str); "c_str_f_void"
46
+ when FM(tp, type:dbl); "c_double_f_void"
47
+ end
48
+ end
49
+
50
+ ITERSOLVE_TYPES = ErbppGsl.read_type.select{|s|
51
+ /gsl_splinalg_itersolve_/ =~ s
52
+ }
53
+
54
+ def check_func(h)
55
+ if t = lookup(h)
56
+ m = h[:func_name].sub(/^gsl_splinalg_itersolve_/,"")
57
+ DefMethod.new(self, t, name:m, **h)
58
+ if /_alloc$/ =~ h[:func_name]
59
+ t = "itersolve_type_new"
60
+ ITERSOLVE_TYPES.each do |st|
61
+ DefSubclassNew.new(self, t, st, **h)
62
+ end
63
+ end
64
+ return true
65
+ end
66
+ $stderr.puts "skip #{h[:func_name]}"
67
+ false
68
+ end
69
+
70
+ end
@@ -0,0 +1,47 @@
1
+ <%
2
+ set singleton: true
3
+ %>
4
+ /*
5
+ @overload <%=name%>(a, b, tol, x)
6
+ @param [Numo::GSL::SpMatrix] a (input sparse matrix)
7
+ @param [Numo::DFloat] b (input vector)
8
+ @param [Float] tol
9
+ @param [Numo::DFloat] x (input|output vector)
10
+ @return [Integer] returns GSL::CONTINUE=-2 to signal that more iterations are required.
11
+
12
+ <%= description %>
13
+ */
14
+ static VALUE
15
+ <%=c_func(4)%>(VALUE self, VALUE vA, VALUE vb, VALUE vtol, VALUE vx)
16
+ {
17
+ gsl_spmatrix *A;
18
+ gsl_vector *b, *x;
19
+ double tol;
20
+ gsl_splinalg_itersolve *w;
21
+ narray_t *na;
22
+ int status;
23
+
24
+ TypedData_Get_Struct(self, <%=struct%>, &<%=data_type_var%>, w);
25
+
26
+ TypedData_Get_Struct(vA, <%=sm_struct%>, &<%=sm_data_type_var%>, A);
27
+
28
+ vb = cast_1d_contiguous(vb, cDF);
29
+ ALLOCA_GSL_VECTOR_FROM_NARRAY_R(vb, b);
30
+ tol = NUM2DBL(vtol);
31
+
32
+ if (CLASS_OF(vx) != cDF) {
33
+ rb_raise(rb_eTypeError, "x should be Numo::DFloat");
34
+ }
35
+ GetNArray(vx,na);
36
+ if (NA_NDIM(na) != 1) {
37
+ rb_raise(nary_eShapeError, "x should be 1-dimensional array");
38
+ }
39
+ if (!RTEST(na_check_contiguous(vx))) {
40
+ rb_raise(nary_eOperationError, "x should be contiguous array");
41
+ }
42
+ ALLOCA_GSL_VECTOR_FROM_NARRAY_RW(vx, x);
43
+
44
+ status = <%=func_name%>(A, b, tol, x, w);
45
+ RB_GC_GUARD(vb);
46
+ return INT2FIX(status);
47
+ }
@@ -0,0 +1,22 @@
1
+ <%
2
+ set name: "new"
3
+ set singleton: true
4
+ define_singleton_method(:define){nil}
5
+ %>
6
+ /*
7
+ :nodoc:
8
+ */
9
+ static VALUE
10
+ <%=c_func(:nodef)%>(VALUE self, const gsl_splinalg_itersolve_type *t, VALUE v1, VALUE v2)
11
+ {
12
+ <%=struct%> *w;
13
+ size_t n, m;
14
+
15
+ n = NUM2SIZET(v1);
16
+ m = NUM2SIZET(v2);
17
+ w = <%=func_name%>(t, n, m);
18
+ if (!w) {
19
+ rb_raise(rb_eNoMemError,"fail to allocate struct");
20
+ }
21
+ return TypedData_Wrap_Struct(<%=class_var%>, &<%=data_type_var%>, (void*)w);
22
+ }
@@ -0,0 +1,16 @@
1
+ /*
2
+ @overload <%=name%>(<%=args[1][1]%>, <%=args[2][1]%>)
3
+ @param [DFloat] <%=args[1][1]%>
4
+ @param [DFloat] <%=args[2][1]%>
5
+
6
+ Generate an instance of <%=full_class_name%>::<%=subtype_class%> class,
7
+ a subclass of <%=full_class_name%> class with <%=subtype_var%> type.
8
+
9
+ <%= desc %>
10
+
11
+ */
12
+ static VALUE
13
+ <%=c_func(2)%>(VALUE self, VALUE v1, VALUE v2)
14
+ {
15
+ return <%=c_superclass_new%>(self, <%=subtype_var%>, v1, v2);
16
+ }
@@ -0,0 +1,35 @@
1
+ <%
2
+ set singleton: true
3
+ %>
4
+ /*
5
+ @overload <%=name%>(alpha, a, b)
6
+ @param [Float] alpha
7
+ @param [Numo::GSL::SpMatrix] a (sparse matrix)
8
+ @param [Numo::GSL::SpMatrix] b (sparse matrix)
9
+ @return [Numo::DFloat] result C = A B
10
+
11
+ <%= description %>
12
+ */
13
+ static VALUE
14
+ <%=c_func(3)%>(VALUE mod, VALUE valpha, VALUE va, VALUE vb)
15
+ {
16
+ // C = A B
17
+ double alpha;
18
+ gsl_spmatrix *A;
19
+ gsl_spmatrix *B;
20
+ gsl_spmatrix *C;
21
+ VALUE vc;
22
+
23
+ alpha = NUM2DBL(valpha);
24
+ TypedData_Get_Struct(va, <%=struct%>, &<%=data_type_var%>, A);
25
+ TypedData_Get_Struct(vb, <%=struct%>, &<%=data_type_var%>, B);
26
+
27
+ C = gsl_spmatrix_alloc_nzmax(A->size1,B->size2,A->nzmax+B->nzmax,A->sptype);
28
+ vc = TypedData_Wrap_Struct(<%=class_var%>, &<%=data_type_var%>, C);
29
+
30
+ <%=func_name%>(alpha, A, B, C);
31
+
32
+ RB_GC_GUARD(va);
33
+ RB_GC_GUARD(vb);
34
+ return vc;
35
+ }
@@ -0,0 +1,43 @@
1
+ <%
2
+ set singleton: true
3
+ %>
4
+ /*
5
+ @overload <%=name%>(trans_a, alpha, a, x, beta, y)
6
+ @param [Integer] trans_a = NO_TRANS | TRANS
7
+ @param [Float] alpha
8
+ @param [Numo::GSL::SpMatrix] a (input sparse matrix)
9
+ @param [Numo::DFloat] x (input vector)
10
+ @param [Float] beta
11
+ @param [Numo::DFloat] y (input|output vector)
12
+ @return [Numo::DFloat] result (or y)
13
+
14
+ <%= description %>
15
+ */
16
+ static VALUE
17
+ <%=c_func(6)%>(VALUE mod, VALUE vTransA, VALUE valpha, VALUE va, VALUE vx, VALUE vbeta, VALUE vy)
18
+ {
19
+ // y = alpha A x + beta y
20
+ CBLAS_TRANSPOSE_t TransA;
21
+ double alpha;
22
+ gsl_spmatrix *A;
23
+ gsl_vector *x;
24
+ double beta;
25
+ gsl_vector *y;
26
+
27
+ TransA = NUM2INT(vTransA);
28
+ alpha = NUM2DBL(valpha);
29
+ beta = NUM2DBL(vbeta);
30
+ TypedData_Get_Struct(va, <%=struct%>, &<%=data_type_var%>, A);
31
+
32
+ vx = cast_1d_contiguous(vx, cDF);
33
+ ALLOCA_GSL_VECTOR_FROM_NARRAY_R(vx, x);
34
+ vy = cast_1d_contiguous(vy, cDF);
35
+ if (!TEST_INPLACE(vy)) {
36
+ vy = na_copy(vy);
37
+ }
38
+ ALLOCA_GSL_VECTOR_FROM_NARRAY_RW(vy, y);
39
+
40
+ <%=func_name%>(TransA, alpha, A, x, beta, y);
41
+ RB_GC_GUARD(vx);
42
+ return vy;
43
+ }