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 @@
1
+ #define NUMO_GSL_VERSION "0.1.0"
@@ -0,0 +1,17 @@
1
+ COGEN=ruby erbpp_wavelet.rb
2
+ GENSRC=gsl_wavelet.c
3
+ GENDEPS=erbpp_wavelet.rb ../gen/*.rb ../gen/tmpl/*.c tmpl/*.c
4
+
5
+ src : $(GENSRC)
6
+
7
+ $(GENSRC) : $(GENDEPS)
8
+ $(COGEN) > $@
9
+
10
+ doc : $(GENSRC)
11
+ yard doc $(GENSRC)
12
+
13
+ clean: cleansrc cleandoc
14
+ cleansrc:
15
+ -$(Q)$(RM) $(GENSRC)
16
+ cleandoc:
17
+ -$(Q)$(RM_RF) doc .yardoc
@@ -0,0 +1,48 @@
1
+ require_relative "parse_wavelet"
2
+ require_relative "../gen/erbpp_gsl"
3
+ require "erbpp/line_number"
4
+
5
+
6
+ gsl_list = ErbppGsl.read_func
7
+
8
+ class_list = [
9
+ ["WaveletWorkspace","wavelet_workspace",[]],
10
+ ["Wavelet","wavelet",list_1d=[]],
11
+ ["Wavelet2D","wavelet2d",list_2d=[]],
12
+ ]
13
+ ErbppGsl.read_func_pattern(
14
+ *class_list.map{|name,base,list| [/gsl_#{base}_/, list]}
15
+ )
16
+ list_2d << list_1d.find{|h| h[:func_name]=="gsl_wavelet_alloc"}
17
+
18
+ DefLib.new do
19
+ set erb_dir: %w[tmpl ../gen/tmpl]
20
+ set erb_suffix: ".c"
21
+ set ns_var: "mG"
22
+
23
+ #ErbPP.new(self,"cast_1d_contiguous")
24
+ #ErbPP.new(self,"cast_2d_contiguous")
25
+ ErbPP.new(self,"wavelet_macro")
26
+ ErbPP.new(self,"wavelet_array_check")
27
+
28
+ name = "Wavelet"
29
+ set file_name: "gsl_#{name}.c"
30
+ set include_files: %w[gsl/gsl_wavelet.h gsl/gsl_wavelet2d.h]
31
+ set lib_name: name.downcase
32
+
33
+ class_list.each do |name,base,list|
34
+ DefWavelet.new(self) do
35
+ set name: base
36
+ set class_name: name
37
+ set class_var: "c"+name
38
+ set full_class_name: "Numo::GSL::"+name
39
+ set struct: "gsl_"+base.sub(/2d/,"")
40
+
41
+ undef_alloc_func
42
+ list.each do |h|
43
+ check_func(h)
44
+ end
45
+ end
46
+
47
+ end
48
+ end.run
@@ -0,0 +1,9 @@
1
+ require_relative '../extconf_gsl.rb'
2
+
3
+ # source file to compile
4
+ srcs = %w(
5
+ gsl_wavelet
6
+ )
7
+ $objs = srcs.collect{|i| i+".o"}
8
+
9
+ create_makefile('numo/gsl/wavelet')
@@ -0,0 +1,337 @@
1
+ [{:func_name=>"gsl_wavelet_alloc",
2
+ :func_type=>"gsl_wavelet *",
3
+ :args=>[["const gsl_wavelet_type *", "T"], ["size_t", "k"]],
4
+ :desc=>
5
+ "This function allocates and initializes a wavelet object of type\n" +
6
+ "T. The parameter k selects the specific member of the\n" +
7
+ "wavelet family. A null pointer is returned if insufficient memory is\n" +
8
+ "available or if a unsupported member is selected."},
9
+ {:func_name=>"gsl_wavelet_name",
10
+ :func_type=>"const char *",
11
+ :args=>[["const gsl_wavelet *", "w"]],
12
+ :desc=>
13
+ "This function returns a pointer to the name of the wavelet family for\n" +
14
+ "w."},
15
+ {:func_name=>"gsl_wavelet_free",
16
+ :func_type=>"void",
17
+ :args=>[["gsl_wavelet *", "w"]],
18
+ :desc=>"This function frees the wavelet object w."},
19
+ {:func_name=>"gsl_wavelet_workspace_alloc",
20
+ :func_type=>"gsl_wavelet_workspace *",
21
+ :args=>[["size_t", "n"]],
22
+ :desc=>
23
+ "This function allocates a workspace for the discrete wavelet transform.\n" +
24
+ "To perform a one-dimensional transform on n elements, a workspace\n" +
25
+ "of size n must be provided. For two-dimensional transforms of\n" +
26
+ "n-by-n matrices it is sufficient to allocate a workspace of\n" +
27
+ "size n, since the transform operates on individual rows and\n" +
28
+ "columns. A null pointer is returned if insufficient memory is available."},
29
+ {:func_name=>"gsl_wavelet_workspace_free",
30
+ :func_type=>"void",
31
+ :args=>[["gsl_wavelet_workspace *", "work"]],
32
+ :desc=>"This function frees the allocated workspace work."},
33
+ {:func_name=>"gsl_wavelet_transform",
34
+ :func_type=>"int",
35
+ :args=>
36
+ [["const gsl_wavelet *", "w"],
37
+ ["double *", "data"],
38
+ ["size_t", "stride"],
39
+ ["size_t", "n"],
40
+ ["gsl_wavelet_direction", "dir"],
41
+ ["gsl_wavelet_workspace *", "work"]],
42
+ :desc=>
43
+ "\n" +
44
+ "These functions compute in-place forward and inverse discrete wavelet\n" +
45
+ "transforms of length n with stride stride on the array\n" +
46
+ "data. The length of the transform n is restricted to powers\n" +
47
+ "of two. For the transform version of the function the argument\n" +
48
+ "dir can be either forward (+1) or backward\n" +
49
+ "(-1). A workspace work of length n must be provided.\n" +
50
+ "\n" +
51
+ "For the forward transform, the elements of the original array are \n" +
52
+ "replaced by the discrete wavelet\n" +
53
+ "transform $f_i \\rightarrow w_{j,k}$\n" +
54
+ "f_i -> w_@{j,k@} \n" +
55
+ "in a packed triangular storage layout, \n" +
56
+ "where j is the index of the level \n" +
57
+ "$j = 0 \\dots J-1$\n" +
58
+ "j = 0 ... J-1\n" +
59
+ "and\n" +
60
+ "k is the index of the coefficient within each level,\n" +
61
+ "$k = 0 \\dots 2^j - 1$\n" +
62
+ "k = 0 ... (2^j)-1. \n" +
63
+ "The total number of levels is J = \\log_2(n). The output data\n" +
64
+ "has the following form,\n" +
65
+ "\n" +
66
+ "(s_@{-1,0@}, d_@{0,0@}, d_@{1,0@}, d_@{1,1@}, d_@{2,0@}, ..., \n" +
67
+ " d_@{j,k@}, ..., d_@{J-1,2^@{J-1@}-1@}) \n" +
68
+ "\n" +
69
+ "where the first element is the smoothing coefficient $s_{-1,0}$\n" +
70
+ "s_@{-1,0@}, followed by the detail coefficients $d_{j,k}$\n" +
71
+ "d_@{j,k@} for each level\n" +
72
+ "j. The backward transform inverts these coefficients to obtain \n" +
73
+ "the original data.\n" +
74
+ "\n" +
75
+ "These functions return a status of GSL_SUCCESS upon successful\n" +
76
+ "completion. GSL_EINVAL is returned if n is not an integer\n" +
77
+ "power of 2 or if insufficient workspace is provided."},
78
+ {:func_name=>"gsl_wavelet_transform_forward",
79
+ :func_type=>"int",
80
+ :args=>
81
+ [["const gsl_wavelet *", "w"],
82
+ ["double *", "data"],
83
+ ["size_t", "stride"],
84
+ ["size_t", "n"],
85
+ ["gsl_wavelet_workspace *", "work"]],
86
+ :desc=>
87
+ "\n" +
88
+ "These functions compute in-place forward and inverse discrete wavelet\n" +
89
+ "transforms of length n with stride stride on the array\n" +
90
+ "data. The length of the transform n is restricted to powers\n" +
91
+ "of two. For the transform version of the function the argument\n" +
92
+ "dir can be either forward (+1) or backward\n" +
93
+ "(-1). A workspace work of length n must be provided.\n" +
94
+ "\n" +
95
+ "For the forward transform, the elements of the original array are \n" +
96
+ "replaced by the discrete wavelet\n" +
97
+ "transform $f_i \\rightarrow w_{j,k}$\n" +
98
+ "f_i -> w_@{j,k@} \n" +
99
+ "in a packed triangular storage layout, \n" +
100
+ "where j is the index of the level \n" +
101
+ "$j = 0 \\dots J-1$\n" +
102
+ "j = 0 ... J-1\n" +
103
+ "and\n" +
104
+ "k is the index of the coefficient within each level,\n" +
105
+ "$k = 0 \\dots 2^j - 1$\n" +
106
+ "k = 0 ... (2^j)-1. \n" +
107
+ "The total number of levels is J = \\log_2(n). The output data\n" +
108
+ "has the following form,\n" +
109
+ "\n" +
110
+ "(s_@{-1,0@}, d_@{0,0@}, d_@{1,0@}, d_@{1,1@}, d_@{2,0@}, ..., \n" +
111
+ " d_@{j,k@}, ..., d_@{J-1,2^@{J-1@}-1@}) \n" +
112
+ "\n" +
113
+ "where the first element is the smoothing coefficient $s_{-1,0}$\n" +
114
+ "s_@{-1,0@}, followed by the detail coefficients $d_{j,k}$\n" +
115
+ "d_@{j,k@} for each level\n" +
116
+ "j. The backward transform inverts these coefficients to obtain \n" +
117
+ "the original data.\n" +
118
+ "\n" +
119
+ "These functions return a status of GSL_SUCCESS upon successful\n" +
120
+ "completion. GSL_EINVAL is returned if n is not an integer\n" +
121
+ "power of 2 or if insufficient workspace is provided."},
122
+ {:func_name=>"gsl_wavelet_transform_inverse",
123
+ :func_type=>"int",
124
+ :args=>
125
+ [["const gsl_wavelet *", "w"],
126
+ ["double *", "data"],
127
+ ["size_t", "stride"],
128
+ ["size_t", "n"],
129
+ ["gsl_wavelet_workspace *", "work"]],
130
+ :desc=>
131
+ "\n" +
132
+ "These functions compute in-place forward and inverse discrete wavelet\n" +
133
+ "transforms of length n with stride stride on the array\n" +
134
+ "data. The length of the transform n is restricted to powers\n" +
135
+ "of two. For the transform version of the function the argument\n" +
136
+ "dir can be either forward (+1) or backward\n" +
137
+ "(-1). A workspace work of length n must be provided.\n" +
138
+ "\n" +
139
+ "For the forward transform, the elements of the original array are \n" +
140
+ "replaced by the discrete wavelet\n" +
141
+ "transform $f_i \\rightarrow w_{j,k}$\n" +
142
+ "f_i -> w_@{j,k@} \n" +
143
+ "in a packed triangular storage layout, \n" +
144
+ "where j is the index of the level \n" +
145
+ "$j = 0 \\dots J-1$\n" +
146
+ "j = 0 ... J-1\n" +
147
+ "and\n" +
148
+ "k is the index of the coefficient within each level,\n" +
149
+ "$k = 0 \\dots 2^j - 1$\n" +
150
+ "k = 0 ... (2^j)-1. \n" +
151
+ "The total number of levels is J = \\log_2(n). The output data\n" +
152
+ "has the following form,\n" +
153
+ "\n" +
154
+ "(s_@{-1,0@}, d_@{0,0@}, d_@{1,0@}, d_@{1,1@}, d_@{2,0@}, ..., \n" +
155
+ " d_@{j,k@}, ..., d_@{J-1,2^@{J-1@}-1@}) \n" +
156
+ "\n" +
157
+ "where the first element is the smoothing coefficient $s_{-1,0}$\n" +
158
+ "s_@{-1,0@}, followed by the detail coefficients $d_{j,k}$\n" +
159
+ "d_@{j,k@} for each level\n" +
160
+ "j. The backward transform inverts these coefficients to obtain \n" +
161
+ "the original data.\n" +
162
+ "\n" +
163
+ "These functions return a status of GSL_SUCCESS upon successful\n" +
164
+ "completion. GSL_EINVAL is returned if n is not an integer\n" +
165
+ "power of 2 or if insufficient workspace is provided."},
166
+ {:func_name=>"gsl_wavelet2d_transform",
167
+ :func_type=>"int",
168
+ :args=>
169
+ [["const gsl_wavelet *", "w"],
170
+ ["double *", "data"],
171
+ ["size_t", "tda"],
172
+ ["size_t", "size1"],
173
+ ["size_t", "size2"],
174
+ ["gsl_wavelet_direction", "dir"],
175
+ ["gsl_wavelet_workspace *", "work"]],
176
+ :desc=>
177
+ "\n" +
178
+ "These functions compute two-dimensional in-place forward and inverse\n" +
179
+ "discrete wavelet transforms in standard form on the\n" +
180
+ "array data stored in row-major form with dimensions size1\n" +
181
+ "and size2 and physical row length tda. The dimensions must\n" +
182
+ "be equal (square matrix) and are restricted to powers of two. For the\n" +
183
+ "transform version of the function the argument dir can be\n" +
184
+ "either forward (+1) or backward (-1). A\n" +
185
+ "workspace work of the appropriate size must be provided. On exit,\n" +
186
+ "the appropriate elements of the array data are replaced by their\n" +
187
+ "two-dimensional wavelet transform.\n" +
188
+ "\n" +
189
+ "The functions return a status of GSL_SUCCESS upon successful\n" +
190
+ "completion. GSL_EINVAL is returned if size1 and\n" +
191
+ "size2 are not equal and integer powers of 2, or if insufficient\n" +
192
+ "workspace is provided."},
193
+ {:func_name=>"gsl_wavelet2d_transform_forward",
194
+ :func_type=>"int",
195
+ :args=>
196
+ [["const gsl_wavelet *", "w"],
197
+ ["double *", "data"],
198
+ ["size_t", "tda"],
199
+ ["size_t", "size1"],
200
+ ["size_t", "size2"],
201
+ ["gsl_wavelet_workspace *", "work"]],
202
+ :desc=>
203
+ "\n" +
204
+ "These functions compute two-dimensional in-place forward and inverse\n" +
205
+ "discrete wavelet transforms in standard form on the\n" +
206
+ "array data stored in row-major form with dimensions size1\n" +
207
+ "and size2 and physical row length tda. The dimensions must\n" +
208
+ "be equal (square matrix) and are restricted to powers of two. For the\n" +
209
+ "transform version of the function the argument dir can be\n" +
210
+ "either forward (+1) or backward (-1). A\n" +
211
+ "workspace work of the appropriate size must be provided. On exit,\n" +
212
+ "the appropriate elements of the array data are replaced by their\n" +
213
+ "two-dimensional wavelet transform.\n" +
214
+ "\n" +
215
+ "The functions return a status of GSL_SUCCESS upon successful\n" +
216
+ "completion. GSL_EINVAL is returned if size1 and\n" +
217
+ "size2 are not equal and integer powers of 2, or if insufficient\n" +
218
+ "workspace is provided."},
219
+ {:func_name=>"gsl_wavelet2d_transform_inverse",
220
+ :func_type=>"int",
221
+ :args=>
222
+ [["const gsl_wavelet *", "w"],
223
+ ["double *", "data"],
224
+ ["size_t", "tda"],
225
+ ["size_t", "size1"],
226
+ ["size_t", "size2"],
227
+ ["gsl_wavelet_workspace *", "work"]],
228
+ :desc=>
229
+ "\n" +
230
+ "These functions compute two-dimensional in-place forward and inverse\n" +
231
+ "discrete wavelet transforms in standard form on the\n" +
232
+ "array data stored in row-major form with dimensions size1\n" +
233
+ "and size2 and physical row length tda. The dimensions must\n" +
234
+ "be equal (square matrix) and are restricted to powers of two. For the\n" +
235
+ "transform version of the function the argument dir can be\n" +
236
+ "either forward (+1) or backward (-1). A\n" +
237
+ "workspace work of the appropriate size must be provided. On exit,\n" +
238
+ "the appropriate elements of the array data are replaced by their\n" +
239
+ "two-dimensional wavelet transform.\n" +
240
+ "\n" +
241
+ "The functions return a status of GSL_SUCCESS upon successful\n" +
242
+ "completion. GSL_EINVAL is returned if size1 and\n" +
243
+ "size2 are not equal and integer powers of 2, or if insufficient\n" +
244
+ "workspace is provided."},
245
+ {:func_name=>"gsl_wavelet2d_transform_matrix",
246
+ :func_type=>"int",
247
+ :args=>
248
+ [["const gsl_wavelet *", "w"],
249
+ ["gsl_matrix *", "m"],
250
+ ["gsl_wavelet_direction", "dir"],
251
+ ["gsl_wavelet_workspace *", "work"]],
252
+ :desc=>
253
+ "These functions compute the two-dimensional in-place wavelet transform\n" +
254
+ "on a matrix a."},
255
+ {:func_name=>"gsl_wavelet2d_transform_matrix_forward",
256
+ :func_type=>"int",
257
+ :args=>
258
+ [["const gsl_wavelet *", "w"],
259
+ ["gsl_matrix *", "m"],
260
+ ["gsl_wavelet_workspace *", "work"]],
261
+ :desc=>
262
+ "These functions compute the two-dimensional in-place wavelet transform\n" +
263
+ "on a matrix a."},
264
+ {:func_name=>"gsl_wavelet2d_transform_matrix_inverse",
265
+ :func_type=>"int",
266
+ :args=>
267
+ [["const gsl_wavelet *", "w"],
268
+ ["gsl_matrix *", "m"],
269
+ ["gsl_wavelet_workspace *", "work"]],
270
+ :desc=>
271
+ "These functions compute the two-dimensional in-place wavelet transform\n" +
272
+ "on a matrix a."},
273
+ {:func_name=>"gsl_wavelet2d_nstransform",
274
+ :func_type=>"int",
275
+ :args=>
276
+ [["const gsl_wavelet *", "w"],
277
+ ["double *", "data"],
278
+ ["size_t", "tda"],
279
+ ["size_t", "size1"],
280
+ ["size_t", "size2"],
281
+ ["gsl_wavelet_direction", "dir"],
282
+ ["gsl_wavelet_workspace *", "work"]],
283
+ :desc=>
284
+ "These functions compute the two-dimensional wavelet transform in\n" +
285
+ "non-standard form."},
286
+ {:func_name=>"gsl_wavelet2d_nstransform_forward",
287
+ :func_type=>"int",
288
+ :args=>
289
+ [["const gsl_wavelet *", "w"],
290
+ ["double *", "data"],
291
+ ["size_t", "tda"],
292
+ ["size_t", "size1"],
293
+ ["size_t", "size2"],
294
+ ["gsl_wavelet_workspace *", "work"]],
295
+ :desc=>
296
+ "These functions compute the two-dimensional wavelet transform in\n" +
297
+ "non-standard form."},
298
+ {:func_name=>"gsl_wavelet2d_nstransform_inverse",
299
+ :func_type=>"int",
300
+ :args=>
301
+ [["const gsl_wavelet *", "w"],
302
+ ["double *", "data"],
303
+ ["size_t", "tda"],
304
+ ["size_t", "size1"],
305
+ ["size_t", "size2"],
306
+ ["gsl_wavelet_workspace *", "work"]],
307
+ :desc=>
308
+ "These functions compute the two-dimensional wavelet transform in\n" +
309
+ "non-standard form."},
310
+ {:func_name=>"gsl_wavelet2d_nstransform_matrix",
311
+ :func_type=>"int",
312
+ :args=>
313
+ [["const gsl_wavelet *", "w"],
314
+ ["gsl_matrix *", "m"],
315
+ ["gsl_wavelet_direction", "dir"],
316
+ ["gsl_wavelet_workspace *", "work"]],
317
+ :desc=>
318
+ "These functions compute the non-standard form of the two-dimensional\n" +
319
+ "in-place wavelet transform on a matrix a."},
320
+ {:func_name=>"gsl_wavelet2d_nstransform_matrix_forward",
321
+ :func_type=>"int",
322
+ :args=>
323
+ [["const gsl_wavelet *", "w"],
324
+ ["gsl_matrix *", "m"],
325
+ ["gsl_wavelet_workspace *", "work"]],
326
+ :desc=>
327
+ "These functions compute the non-standard form of the two-dimensional\n" +
328
+ "in-place wavelet transform on a matrix a."},
329
+ {:func_name=>"gsl_wavelet2d_nstransform_matrix_inverse",
330
+ :func_type=>"int",
331
+ :args=>
332
+ [["const gsl_wavelet *", "w"],
333
+ ["gsl_matrix *", "m"],
334
+ ["gsl_wavelet_workspace *", "work"]],
335
+ :desc=>
336
+ "These functions compute the non-standard form of the two-dimensional\n" +
337
+ "in-place wavelet transform on a matrix a."}]
@@ -0,0 +1,47 @@
1
+ require_relative "../gen/erbpp_gsl"
2
+
3
+ class DefWavelet < DefGslClass
4
+
5
+ WAVELET_TYPES = ErbppGsl.read_type.select{|s| /gsl_wavelet_/ =~ s}
6
+
7
+ def lookup(h)
8
+ t = get(:struct)
9
+ ws = t + "_workspace *"
10
+ dr = t + "_direction"
11
+ case h
12
+ when FM(name:/_free$/); false
13
+ when FM(name:"gsl_wavelet_workspace_alloc"); "c_new_sizet"
14
+ when FM(/_type /, szt, name:/_alloc$/); "wavelet_new"
15
+ when FM(tp, type:str); "c_str_f_void"
16
+ when FM(tp, type:uint); "c_uint_f_void"
17
+
18
+ when FM(tp,dblp,szt,szt,dr,ws); "wavelet_transform"
19
+ when FM(tp,dblp,szt,szt,ws); "wavelet_transform2"
20
+ when FM(tp,dblp,*[szt]*3,dr,ws); "wavelet2d_transform"
21
+ when FM(tp,dblp,*[szt]*3,ws); "wavelet_transform2"
22
+
23
+ when FM(tp); "c_self_f_void"
24
+ end
25
+ end
26
+
27
+ def check_func(h)
28
+ if t = lookup(h)
29
+ m = h[:func_name].sub(/^gsl_[^_]+_/,"")
30
+ DefMethod.new(self, t, name:m, **h)
31
+ def_type_new(h)
32
+ return true
33
+ end
34
+ $stderr.puts "skip #{h[:func_name]}"
35
+ false
36
+ end
37
+
38
+ def def_type_new(h)
39
+ case h[:func_name]
40
+ when "gsl_wavelet_alloc"
41
+ t = "wavelet_type_new"
42
+ WAVELET_TYPES.each do |st|
43
+ DefSubclassNew.new(self, t, st, **h)
44
+ end
45
+ end
46
+ end
47
+ end