numo-gsl-alt 0.1.3

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 (320) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/README.md +83 -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_2.4.rb +419 -0
  10. data/ext/numo/gsl/const/const_2.5.rb +419 -0
  11. data/ext/numo/gsl/const/const_2.6.rb +419 -0
  12. data/ext/numo/gsl/const/const_def.rb +419 -0
  13. data/ext/numo/gsl/const/depend +17 -0
  14. data/ext/numo/gsl/const/erbpp_const.rb +28 -0
  15. data/ext/numo/gsl/const/extconf.rb +9 -0
  16. data/ext/numo/gsl/err/depend +1 -0
  17. data/ext/numo/gsl/err/err.c +22 -0
  18. data/ext/numo/gsl/err/extconf.rb +9 -0
  19. data/ext/numo/gsl/extconf_gsl.rb +58 -0
  20. data/ext/numo/gsl/fit/depend +17 -0
  21. data/ext/numo/gsl/fit/erbpp_fit.rb +73 -0
  22. data/ext/numo/gsl/fit/extconf.rb +9 -0
  23. data/ext/numo/gsl/fit/func_2.4.rb +128 -0
  24. data/ext/numo/gsl/fit/func_2.5.rb +128 -0
  25. data/ext/numo/gsl/fit/func_2.6.rb +128 -0
  26. data/ext/numo/gsl/fit/func_def.rb +129 -0
  27. data/ext/numo/gsl/fit/tmpl/check_1d.c +9 -0
  28. data/ext/numo/gsl/fit/tmpl/fit_linear.c +53 -0
  29. data/ext/numo/gsl/fit/tmpl/fit_linear_est.c +56 -0
  30. data/ext/numo/gsl/fit/tmpl/fit_mul.c +50 -0
  31. data/ext/numo/gsl/fit/tmpl/fit_mul_est.c +47 -0
  32. data/ext/numo/gsl/fit/tmpl/fit_wlinear.c +59 -0
  33. data/ext/numo/gsl/fit/tmpl/fit_wmul.c +56 -0
  34. data/ext/numo/gsl/gen/erbln.rb +132 -0
  35. data/ext/numo/gsl/gen/erbpp2.rb +344 -0
  36. data/ext/numo/gsl/gen/erbpp_gsl.rb +170 -0
  37. data/ext/numo/gsl/gen/func_parser.rb +518 -0
  38. data/ext/numo/gsl/gen/tmpl/c_DFloat_f_DFloat.c +40 -0
  39. data/ext/numo/gsl/gen/tmpl/c_DFloat_f_SZ.c +41 -0
  40. data/ext/numo/gsl/gen/tmpl/c_DFloat_f_SZ_x2.c +44 -0
  41. data/ext/numo/gsl/gen/tmpl/c_DFloat_x2_f_DFloat_x2.c +45 -0
  42. data/ext/numo/gsl/gen/tmpl/c_double_f_double.c +16 -0
  43. data/ext/numo/gsl/gen/tmpl/c_double_f_sizet.c +16 -0
  44. data/ext/numo/gsl/gen/tmpl/c_double_f_sizet_x2.c +17 -0
  45. data/ext/numo/gsl/gen/tmpl/c_double_f_void.c +15 -0
  46. data/ext/numo/gsl/gen/tmpl/c_double_x2_f_void.c +17 -0
  47. data/ext/numo/gsl/gen/tmpl/c_new_DFloat.c +29 -0
  48. data/ext/numo/gsl/gen/tmpl/c_new_double.c +22 -0
  49. data/ext/numo/gsl/gen/tmpl/c_new_f_other.c +25 -0
  50. data/ext/numo/gsl/gen/tmpl/c_new_sizet.c +22 -0
  51. data/ext/numo/gsl/gen/tmpl/c_new_sizet_double.c +23 -0
  52. data/ext/numo/gsl/gen/tmpl/c_new_sizet_x2.c +23 -0
  53. data/ext/numo/gsl/gen/tmpl/c_new_void.c +21 -0
  54. data/ext/numo/gsl/gen/tmpl/c_other_f_void.c +19 -0
  55. data/ext/numo/gsl/gen/tmpl/c_self_f_DFloat.c +46 -0
  56. data/ext/numo/gsl/gen/tmpl/c_self_f_DFloat_x2.c +41 -0
  57. data/ext/numo/gsl/gen/tmpl/c_self_f_DFloat_x3.c +44 -0
  58. data/ext/numo/gsl/gen/tmpl/c_self_f_DFloat_x4.c +47 -0
  59. data/ext/numo/gsl/gen/tmpl/c_self_f_SZ_x2_DFloat.c +45 -0
  60. data/ext/numo/gsl/gen/tmpl/c_self_f_double.c +17 -0
  61. data/ext/numo/gsl/gen/tmpl/c_self_f_other.c +17 -0
  62. data/ext/numo/gsl/gen/tmpl/c_self_f_sizet.c +21 -0
  63. data/ext/numo/gsl/gen/tmpl/c_self_f_void.c +14 -0
  64. data/ext/numo/gsl/gen/tmpl/c_sizet_f_void.c +15 -0
  65. data/ext/numo/gsl/gen/tmpl/c_sizet_x2_f_void.c +17 -0
  66. data/ext/numo/gsl/gen/tmpl/c_str_f_void.c +15 -0
  67. data/ext/numo/gsl/gen/tmpl/c_super_new_void.c +18 -0
  68. data/ext/numo/gsl/gen/tmpl/c_uint_f_void.c +15 -0
  69. data/ext/numo/gsl/gen/tmpl/c_ulong_f_void.c +15 -0
  70. data/ext/numo/gsl/gen/tmpl/c_void_f_double.c +17 -0
  71. data/ext/numo/gsl/gen/tmpl/c_void_f_double_x2.c +18 -0
  72. data/ext/numo/gsl/gen/tmpl/c_void_f_double_x4.c +20 -0
  73. data/ext/numo/gsl/gen/tmpl/c_void_f_ulong.c +17 -0
  74. data/ext/numo/gsl/gen/tmpl/c_void_f_void.c +14 -0
  75. data/ext/numo/gsl/gen/tmpl/cast_1d_contiguous.c +15 -0
  76. data/ext/numo/gsl/gen/tmpl/cast_2d_contiguous.c +15 -0
  77. data/ext/numo/gsl/gen/tmpl/class.c +26 -0
  78. data/ext/numo/gsl/gen/tmpl/create_new_narray.c +26 -0
  79. data/ext/numo/gsl/gen/tmpl/init_class.c +10 -0
  80. data/ext/numo/gsl/gen/tmpl/init_module.c +12 -0
  81. data/ext/numo/gsl/gen/tmpl/lib.c +41 -0
  82. data/ext/numo/gsl/gen/tmpl/m_DFloat_Int_f_DFloat.c +38 -0
  83. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat.c +35 -0
  84. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_Int.c +39 -0
  85. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_UInt.c +39 -0
  86. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_double.c +42 -0
  87. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_double_x2.c +47 -0
  88. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_int.c +42 -0
  89. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_x2.c +38 -0
  90. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_x3.c +41 -0
  91. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_Int.c +36 -0
  92. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt.c +36 -0
  93. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt32.c +36 -0
  94. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt32_double.c +43 -0
  95. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt32_double_uint.c +49 -0
  96. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt32_double_x2.c +48 -0
  97. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt32_uint_x3.c +51 -0
  98. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt_double.c +43 -0
  99. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt_double_uint.c +50 -0
  100. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt_double_x2.c +48 -0
  101. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt_uint_x3.c +51 -0
  102. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_int_DFloat.c +41 -0
  103. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_int_DFloat_x2.c +44 -0
  104. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_int_x2_DFloat_x2.c +46 -0
  105. data/ext/numo/gsl/gen/tmpl/m_Int_f_DFloat.c +36 -0
  106. data/ext/numo/gsl/gen/tmpl/m_Int_f_DFloat_x3.c +42 -0
  107. data/ext/numo/gsl/gen/tmpl/m_Int_f_int_DFloat.c +42 -0
  108. data/ext/numo/gsl/gen/tmpl/m_Int_f_int_DFloat_x2.c +45 -0
  109. data/ext/numo/gsl/gen/tmpl/mod_func_noloop.c +54 -0
  110. data/ext/numo/gsl/gen/tmpl/mod_func_scalar.c +27 -0
  111. data/ext/numo/gsl/gen/tmpl/module.c +9 -0
  112. data/ext/numo/gsl/histogram/depend +17 -0
  113. data/ext/numo/gsl/histogram/erbpp_histogram.rb +109 -0
  114. data/ext/numo/gsl/histogram/extconf.rb +9 -0
  115. data/ext/numo/gsl/histogram/func_2.4.rb +742 -0
  116. data/ext/numo/gsl/histogram/func_2.5.rb +742 -0
  117. data/ext/numo/gsl/histogram/func_2.6.rb +742 -0
  118. data/ext/numo/gsl/histogram/func_def.rb +763 -0
  119. data/ext/numo/gsl/histogram/tmpl/c_DFloat_f_2d_get.c +54 -0
  120. data/ext/numo/gsl/histogram/tmpl/c_DFloat_f_field.c +35 -0
  121. data/ext/numo/gsl/histogram/tmpl/c_DFloat_f_get.c +47 -0
  122. data/ext/numo/gsl/histogram/tmpl/c_DFloat_x2_f_get_range.c +56 -0
  123. data/ext/numo/gsl/histogram/tmpl/c_bool_f_other.c +19 -0
  124. data/ext/numo/gsl/histogram/tmpl/c_bool_f_pdf_init.c +24 -0
  125. data/ext/numo/gsl/histogram/tmpl/c_self_f_2d_set_ranges.c +26 -0
  126. data/ext/numo/gsl/histogram/tmpl/c_self_f_set_ranges.c +21 -0
  127. data/ext/numo/gsl/histogram/tmpl/c_sizet_f_field.c +15 -0
  128. data/ext/numo/gsl/interp/depend +17 -0
  129. data/ext/numo/gsl/interp/erbpp_interp.rb +60 -0
  130. data/ext/numo/gsl/interp/extconf.rb +9 -0
  131. data/ext/numo/gsl/interp/func_2.4.rb +804 -0
  132. data/ext/numo/gsl/interp/func_2.5.rb +804 -0
  133. data/ext/numo/gsl/interp/func_2.6.rb +804 -0
  134. data/ext/numo/gsl/interp/func_def.rb +816 -0
  135. data/ext/numo/gsl/interp/parse_interp.rb +67 -0
  136. data/ext/numo/gsl/interp/tmpl/interp2d_new.c +36 -0
  137. data/ext/numo/gsl/interp/tmpl/interp2d_type_new.c +17 -0
  138. data/ext/numo/gsl/interp/tmpl/interp_bsearch.c +57 -0
  139. data/ext/numo/gsl/interp/tmpl/interp_new.c +29 -0
  140. data/ext/numo/gsl/interp/tmpl/interp_type_new.c +16 -0
  141. data/ext/numo/gsl/interp/tmpl/spline2d_eval.c +61 -0
  142. data/ext/numo/gsl/interp/tmpl/spline_eval.c +55 -0
  143. data/ext/numo/gsl/interp/tmpl/spline_integ.c +56 -0
  144. data/ext/numo/gsl/interp/type_def.rb +9 -0
  145. data/ext/numo/gsl/mkmf_gsl.rb +33 -0
  146. data/ext/numo/gsl/multifit/depend +17 -0
  147. data/ext/numo/gsl/multifit/erbpp_multifit.rb +99 -0
  148. data/ext/numo/gsl/multifit/extconf.rb +9 -0
  149. data/ext/numo/gsl/multifit/func_2.1.rb +1035 -0
  150. data/ext/numo/gsl/multifit/func_2.2.1.rb +736 -0
  151. data/ext/numo/gsl/multifit/func_2.2.rb +736 -0
  152. data/ext/numo/gsl/multifit/func_2.3.rb +872 -0
  153. data/ext/numo/gsl/multifit/func_2.4.rb +859 -0
  154. data/ext/numo/gsl/multifit/func_2.5.rb +859 -0
  155. data/ext/numo/gsl/multifit/func_2.6.rb +859 -0
  156. data/ext/numo/gsl/multifit/func_def.rb +1012 -0
  157. data/ext/numo/gsl/multifit/tmpl/multifit_linear.c +66 -0
  158. data/ext/numo/gsl/multifit/tmpl/multifit_linear_est.c +48 -0
  159. data/ext/numo/gsl/multifit/tmpl/multifit_linear_residuals.c +47 -0
  160. data/ext/numo/gsl/multifit/tmpl/multifit_wlinear.c +70 -0
  161. data/ext/numo/gsl/multifit/type_def.rb +1 -0
  162. data/ext/numo/gsl/multilarge/func_2.4.rb +216 -0
  163. data/ext/numo/gsl/multilarge/func_2.5.rb +216 -0
  164. data/ext/numo/gsl/multilarge/func_2.6.rb +216 -0
  165. data/ext/numo/gsl/multilarge/func_def.rb +215 -0
  166. data/ext/numo/gsl/numo_gsl.h +117 -0
  167. data/ext/numo/gsl/pdf/depend +17 -0
  168. data/ext/numo/gsl/pdf/erbpp_pdf.rb +27 -0
  169. data/ext/numo/gsl/pdf/extconf.rb +9 -0
  170. data/ext/numo/gsl/pdf/func_2.2.1.rb +306 -0
  171. data/ext/numo/gsl/pdf/func_2.2.rb +306 -0
  172. data/ext/numo/gsl/pdf/func_2.3.rb +306 -0
  173. data/ext/numo/gsl/pdf/func_2.4.rb +303 -0
  174. data/ext/numo/gsl/pdf/func_2.5.rb +333 -0
  175. data/ext/numo/gsl/pdf/func_2.6.rb +333 -0
  176. data/ext/numo/gsl/pdf/func_def.rb +282 -0
  177. data/ext/numo/gsl/pdf/parse_pdf.rb +42 -0
  178. data/ext/numo/gsl/pdf/tmpl/dirichlet.c +39 -0
  179. data/ext/numo/gsl/pdf/tmpl/multinomial.c +39 -0
  180. data/ext/numo/gsl/poly/depend +17 -0
  181. data/ext/numo/gsl/poly/erbpp_poly.rb +70 -0
  182. data/ext/numo/gsl/poly/extconf.rb +9 -0
  183. data/ext/numo/gsl/poly/func_2.4.rb +220 -0
  184. data/ext/numo/gsl/poly/func_2.5.rb +220 -0
  185. data/ext/numo/gsl/poly/func_2.6.rb +220 -0
  186. data/ext/numo/gsl/poly/func_def.rb +234 -0
  187. data/ext/numo/gsl/poly/tmpl/poly_complex_solve.c +59 -0
  188. data/ext/numo/gsl/poly/tmpl/poly_eval.c +70 -0
  189. data/ext/numo/gsl/poly/tmpl/poly_eval_derivs.c +40 -0
  190. data/ext/numo/gsl/ran/depend +17 -0
  191. data/ext/numo/gsl/ran/erbpp_ran.rb +43 -0
  192. data/ext/numo/gsl/ran/extconf.rb +9 -0
  193. data/ext/numo/gsl/ran/func_2.2.1.rb +1658 -0
  194. data/ext/numo/gsl/ran/func_2.2.rb +1658 -0
  195. data/ext/numo/gsl/ran/func_2.3.rb +1658 -0
  196. data/ext/numo/gsl/ran/func_2.4.rb +1526 -0
  197. data/ext/numo/gsl/ran/func_2.5.rb +1573 -0
  198. data/ext/numo/gsl/ran/func_2.6.rb +1573 -0
  199. data/ext/numo/gsl/ran/func_def.rb +1594 -0
  200. data/ext/numo/gsl/ran/parse_ran.rb +10 -0
  201. data/ext/numo/gsl/rng/depend +17 -0
  202. data/ext/numo/gsl/rng/erbpp_rng.rb +59 -0
  203. data/ext/numo/gsl/rng/extconf.rb +9 -0
  204. data/ext/numo/gsl/rng/func_2.4.rb +187 -0
  205. data/ext/numo/gsl/rng/func_2.5.rb +187 -0
  206. data/ext/numo/gsl/rng/func_2.6.rb +187 -0
  207. data/ext/numo/gsl/rng/func_def.rb +230 -0
  208. data/ext/numo/gsl/rng/parse_rng.rb +126 -0
  209. data/ext/numo/gsl/rng/tmpl/ran.c +44 -0
  210. data/ext/numo/gsl/rng/tmpl/ran_DFloat_f_DFloat.c +28 -0
  211. data/ext/numo/gsl/rng/tmpl/ran_DFloat_x2.c +45 -0
  212. data/ext/numo/gsl/rng/tmpl/ran_DFloat_x3.c +51 -0
  213. data/ext/numo/gsl/rng/tmpl/ran_multinomial.c +32 -0
  214. data/ext/numo/gsl/rng/tmpl/rng_DFloat.c +29 -0
  215. data/ext/numo/gsl/rng/tmpl/rng_UInt.c +44 -0
  216. data/ext/numo/gsl/rng/tmpl/rng_alloc.c +24 -0
  217. data/ext/numo/gsl/rng/tmpl/rng_type_new.c +14 -0
  218. data/ext/numo/gsl/rng/type_def.rb +63 -0
  219. data/ext/numo/gsl/rstat/depend +17 -0
  220. data/ext/numo/gsl/rstat/erbpp_rstat.rb +64 -0
  221. data/ext/numo/gsl/rstat/extconf.rb +9 -0
  222. data/ext/numo/gsl/rstat/func_2.2.1.rb +116 -0
  223. data/ext/numo/gsl/rstat/func_2.2.rb +116 -0
  224. data/ext/numo/gsl/rstat/func_2.3.rb +123 -0
  225. data/ext/numo/gsl/rstat/func_2.4.rb +122 -0
  226. data/ext/numo/gsl/rstat/func_2.5.rb +122 -0
  227. data/ext/numo/gsl/rstat/func_2.6.rb +122 -0
  228. data/ext/numo/gsl/rstat/func_def.rb +102 -0
  229. data/ext/numo/gsl/sf/depend +17 -0
  230. data/ext/numo/gsl/sf/erbpp_sf.rb +51 -0
  231. data/ext/numo/gsl/sf/extconf.rb +9 -0
  232. data/ext/numo/gsl/sf/func_2.4.rb +4482 -0
  233. data/ext/numo/gsl/sf/func_2.5.rb +4508 -0
  234. data/ext/numo/gsl/sf/func_2.6.rb +4538 -0
  235. data/ext/numo/gsl/sf/func_def.rb +4703 -0
  236. data/ext/numo/gsl/sf/parse_sf.rb +277 -0
  237. data/ext/numo/gsl/sf/tmpl/c_DFloat_f_int_x2_DFloat.c +50 -0
  238. data/ext/numo/gsl/sf/tmpl/c_DFloat_f_int_x2_DFloat_x2.c +52 -0
  239. data/ext/numo/gsl/sf/tmpl/c_DFloat_f_int_x3_DFloat_x2.c +55 -0
  240. data/ext/numo/gsl/sf/tmpl/m_DFloat_f_DFloat_mode.c +47 -0
  241. data/ext/numo/gsl/sf/tmpl/m_DFloat_f_lmax_array.c +41 -0
  242. data/ext/numo/gsl/sf/tmpl/m_DFloat_f_nmin_nmax_array.c +49 -0
  243. data/ext/numo/gsl/spmatrix/const_2.2.1.rb +3 -0
  244. data/ext/numo/gsl/spmatrix/const_2.2.rb +3 -0
  245. data/ext/numo/gsl/spmatrix/const_2.3.rb +3 -0
  246. data/ext/numo/gsl/spmatrix/const_def.rb +2 -0
  247. data/ext/numo/gsl/spmatrix/depend +17 -0
  248. data/ext/numo/gsl/spmatrix/erbpp_spmatrix.rb +101 -0
  249. data/ext/numo/gsl/spmatrix/extconf.rb +9 -0
  250. data/ext/numo/gsl/spmatrix/func_2.2.1.rb +297 -0
  251. data/ext/numo/gsl/spmatrix/func_2.2.rb +297 -0
  252. data/ext/numo/gsl/spmatrix/func_2.3.rb +297 -0
  253. data/ext/numo/gsl/spmatrix/func_2.4.rb +300 -0
  254. data/ext/numo/gsl/spmatrix/func_2.5.rb +300 -0
  255. data/ext/numo/gsl/spmatrix/func_2.6.rb +372 -0
  256. data/ext/numo/gsl/spmatrix/func_def.rb +218 -0
  257. data/ext/numo/gsl/spmatrix/parse_spmatrix.rb +70 -0
  258. data/ext/numo/gsl/spmatrix/tmpl/itersolve_iterate.c +47 -0
  259. data/ext/numo/gsl/spmatrix/tmpl/itersolve_new.c +22 -0
  260. data/ext/numo/gsl/spmatrix/tmpl/itersolve_type_new.c +16 -0
  261. data/ext/numo/gsl/spmatrix/tmpl/spblas_dgemm.c +35 -0
  262. data/ext/numo/gsl/spmatrix/tmpl/spblas_dgemv.c +43 -0
  263. data/ext/numo/gsl/spmatrix/tmpl/spmatrix_add.c +22 -0
  264. data/ext/numo/gsl/spmatrix/tmpl/spmatrix_d2sp.c +28 -0
  265. data/ext/numo/gsl/spmatrix/tmpl/spmatrix_new.c +40 -0
  266. data/ext/numo/gsl/spmatrix/tmpl/spmatrix_sp2d.c +25 -0
  267. data/ext/numo/gsl/spmatrix/type_def.rb +1 -0
  268. data/ext/numo/gsl/stats/depend +17 -0
  269. data/ext/numo/gsl/stats/erbpp_stats.rb +30 -0
  270. data/ext/numo/gsl/stats/extconf.rb +9 -0
  271. data/ext/numo/gsl/stats/func_2.2.1.rb +608 -0
  272. data/ext/numo/gsl/stats/func_2.2.rb +608 -0
  273. data/ext/numo/gsl/stats/func_2.3.rb +608 -0
  274. data/ext/numo/gsl/stats/func_2.4.rb +583 -0
  275. data/ext/numo/gsl/stats/func_2.5.rb +718 -0
  276. data/ext/numo/gsl/stats/func_2.6.rb +718 -0
  277. data/ext/numo/gsl/stats/func_def.rb +608 -0
  278. data/ext/numo/gsl/stats/parse_stats.rb +63 -0
  279. data/ext/numo/gsl/stats/tmpl/stats_1a0p.c +37 -0
  280. data/ext/numo/gsl/stats/tmpl/stats_1a0p_index.c +60 -0
  281. data/ext/numo/gsl/stats/tmpl/stats_1a1p.c +41 -0
  282. data/ext/numo/gsl/stats/tmpl/stats_1a2p.c +42 -0
  283. data/ext/numo/gsl/stats/tmpl/stats_2a0p.c +39 -0
  284. data/ext/numo/gsl/stats/tmpl/stats_2a1p.c +43 -0
  285. data/ext/numo/gsl/stats/tmpl/stats_2a2p.c +44 -0
  286. data/ext/numo/gsl/stats/tmpl/stats_minmax.c +37 -0
  287. data/ext/numo/gsl/stats/tmpl/stats_minmax_index.c +67 -0
  288. data/ext/numo/gsl/stats/tmpl/stats_spearman.c +46 -0
  289. data/ext/numo/gsl/sys/const_2.4.rb +20 -0
  290. data/ext/numo/gsl/sys/const_2.5.rb +20 -0
  291. data/ext/numo/gsl/sys/const_2.6.rb +20 -0
  292. data/ext/numo/gsl/sys/const_def.rb +21 -0
  293. data/ext/numo/gsl/sys/depend +17 -0
  294. data/ext/numo/gsl/sys/enum_def.rb +75 -0
  295. data/ext/numo/gsl/sys/erbpp_sys.rb +60 -0
  296. data/ext/numo/gsl/sys/extconf.rb +9 -0
  297. data/ext/numo/gsl/sys/func_2.4.rb +236 -0
  298. data/ext/numo/gsl/sys/func_2.5.rb +236 -0
  299. data/ext/numo/gsl/sys/func_2.6.rb +236 -0
  300. data/ext/numo/gsl/sys/func_def.rb +249 -0
  301. data/ext/numo/gsl/version.h +1 -0
  302. data/ext/numo/gsl/wavelet/depend +17 -0
  303. data/ext/numo/gsl/wavelet/erbpp_wavelet.rb +48 -0
  304. data/ext/numo/gsl/wavelet/extconf.rb +9 -0
  305. data/ext/numo/gsl/wavelet/func_2.4.rb +304 -0
  306. data/ext/numo/gsl/wavelet/func_2.5.rb +304 -0
  307. data/ext/numo/gsl/wavelet/func_2.6.rb +304 -0
  308. data/ext/numo/gsl/wavelet/func_def.rb +337 -0
  309. data/ext/numo/gsl/wavelet/parse_wavelet.rb +47 -0
  310. data/ext/numo/gsl/wavelet/tmpl/wavelet2d_transform.c +56 -0
  311. data/ext/numo/gsl/wavelet/tmpl/wavelet_array_check.c +56 -0
  312. data/ext/numo/gsl/wavelet/tmpl/wavelet_macro.c +1 -0
  313. data/ext/numo/gsl/wavelet/tmpl/wavelet_new.c +20 -0
  314. data/ext/numo/gsl/wavelet/tmpl/wavelet_transform.c +55 -0
  315. data/ext/numo/gsl/wavelet/tmpl/wavelet_transform2.c +22 -0
  316. data/ext/numo/gsl/wavelet/tmpl/wavelet_type_new.c +15 -0
  317. data/ext/numo/gsl/wavelet/type_def.rb +6 -0
  318. data/lib/numo/gsl.rb +17 -0
  319. data/numo-gsl-alt.gemspec +33 -0
  320. metadata +406 -0
@@ -0,0 +1,170 @@
1
+ require_relative "erbpp2"
2
+ require_relative "erbln"
3
+ require_relative "func_parser"
4
+
5
+ module ErbppGsl
6
+
7
+ module_function
8
+
9
+ def FM(*args,**opts)
10
+ FuncMatch.new(*args,**opts)
11
+ end
12
+
13
+ def dbl; "double" end
14
+ def dblp; "double *" end
15
+ def str; "char *" end
16
+ def szt; "size_t" end
17
+ def sztp; "size_t *" end
18
+ def int; "int" end
19
+ def intp; "int *" end
20
+ def long; "long" end
21
+ def uint; "unsigned int" end
22
+ def ulong; /^unsigned long/ end
23
+ def void; "void" end
24
+ def tp; get(:struct)+" *" end
25
+
26
+ def read_eval(prefix)
27
+ fmt = prefix + "_%s.rb"
28
+ # MinGW fails to invoke shell script command (gsl-config)
29
+ cmd = "sh -c '`which gsl-config` --version'"
30
+ fn = fmt % `#{cmd}`.chomp
31
+ if !File.exist?(fn)
32
+ fn = fmt % "def"
33
+ end
34
+ File.exist?(fn) ? eval(open(fn).read) : []
35
+ end
36
+
37
+ def read_func(prefix="func")
38
+ read_eval(prefix).each do |h|
39
+ h[:desc].gsub!(/\/\*/,"//")
40
+ h[:desc].gsub!(/\*\//,"")
41
+ end
42
+ end
43
+
44
+ def read_const
45
+ read_eval("const")
46
+ end
47
+
48
+ def read_enum
49
+ read_eval("enum")
50
+ end
51
+
52
+ def read_type
53
+ read_eval("type")
54
+ end
55
+
56
+ def read_func_pattern(*a)
57
+ read_func.each do |h|
58
+ no_match = true
59
+ a.each do |re,list|
60
+ if re === h[:func_name]
61
+ list << h
62
+ no_match = false
63
+ break
64
+ end
65
+ end
66
+ if no_match
67
+ $stderr.puts "skip "+h[:func_name]
68
+ end
69
+ end
70
+ end
71
+
72
+ end
73
+
74
+ class DefSubclassNew < DefMethod
75
+ def initialize(parent,tmpl,var,subtp=nil,**h)
76
+ super(parent, tmpl, name:"new", **h)
77
+ if !subtp
78
+ subtp = var.sub(/gsl_#{parent.name}_/,"")
79
+ end
80
+ set subtype_var: var
81
+ set subtype_name: subtp
82
+ set subtype_class: subtp.split('_').map{|x| x.capitalize}.join("")
83
+ set c_superclass_new: "#{parent.name}_s_new"
84
+ end
85
+
86
+ def c_func(narg=nil)
87
+ super(narg)
88
+ "#{@parent.name}_#{get(:subtype_name)}_s_new"
89
+ end
90
+
91
+ def init_def
92
+ if n_arg != :nodef
93
+ "{ VALUE c#{subtype_class} = rb_define_class_under(#{_mod_var}, \"#{subtype_class}\", #{_mod_var});
94
+ rb_define_singleton_method(c#{subtype_class}, \"new\", #{c_func}, #{n_arg}); }"
95
+ end
96
+ end
97
+ end
98
+
99
+
100
+ class DefGslClass < DefClass
101
+ include ErbppGsl
102
+
103
+ def lookup(h)
104
+ # implement in Subclass
105
+ raise NotImplementedError
106
+ end
107
+
108
+ def check_func(h)
109
+ fn = h[:func_name]
110
+ if t = lookup(h)
111
+ m = to_method_name(fn)
112
+ define_method(t, name:m, **h)
113
+ elsif /_free$/ =~ fn
114
+ set free_func: fn
115
+ else
116
+ $stderr.puts "skip #{fn}"
117
+ end
118
+ end
119
+
120
+ def to_method_name(s)
121
+ s.sub(/^gsl_#{name}_/,"")
122
+ end
123
+
124
+ def define_method(t,**h)
125
+ DefGslMethod.new(self, t, **h)
126
+ end
127
+ end
128
+
129
+ class DefGslModule < DefModule
130
+ include ErbppGsl
131
+
132
+ def lookup(h)
133
+ # implement in Subclass
134
+ end
135
+
136
+ def check_func(h)
137
+ if t = lookup(h)
138
+ m = to_method_name(h[:func_name])
139
+ define_method(t, name:m, **h)
140
+ else
141
+ $stderr.puts "skip #{h[:func_name]}"
142
+ end
143
+ end
144
+
145
+ def to_method_name(s)
146
+ s.sub(/^gsl_#{name}_/,"")
147
+ end
148
+
149
+ def define_method(t,**h)
150
+ DefGslModuleFunction.new(self, t, **h)
151
+ end
152
+ end
153
+
154
+ class DefGslModuleFunction < DefModuleFunction
155
+ include FuncParser
156
+
157
+ def initialize(parent,tmpl,**h)
158
+ super(parent,tmpl,**h)
159
+ parse_args(h)
160
+ end
161
+ end
162
+
163
+ class DefGslMethod < DefMethod
164
+ include FuncParser
165
+
166
+ def initialize(parent,tmpl,**h)
167
+ super(parent,tmpl,**h)
168
+ parse_args(h)
169
+ end
170
+ end
@@ -0,0 +1,518 @@
1
+ class Argument
2
+
3
+ def description
4
+ @func.param_desc[@name] ||
5
+ if @prop[:param]
6
+ "@param [#{rb_class}] #{@name}"
7
+ elsif @prop[:narray]
8
+ "@param [#{na_class}] #{@name}"
9
+ end
10
+ end
11
+
12
+ NUM2DATA =
13
+ {
14
+ "double"=>"%2 = NUM2DBL(%1)",
15
+ "int"=>"%2 = NUM2INT(%1)",
16
+ "unsigned int"=>"%2 = NUM2UINT(%1)",
17
+ "size_t"=>"%2 = NUM2SIZET(%1)",
18
+ "gsl_mode_t"=>"%2 = NUM2INT(%1)",
19
+ "gsl_sf_legendre_t"=>"%2 = NUM2INT(%1)",
20
+ "gsl_sf_mathieu_workspace *"=>'
21
+ if (rb_obj_is_kind_of(%1,cWorkspace)!=Qtrue) {
22
+ rb_raise(rb_eTypeError,"last argument must be "
23
+ "Numo::GSL::Sf::MathieuWorkspace class");
24
+ }
25
+ TypedData_Get_Struct(%1, gsl_sf_mathieu_workspace, &mathieuws_type, %2)'
26
+ }
27
+
28
+ DATA2NUM =
29
+ {
30
+ "double"=>"DBL2NUM(%1)",
31
+ "int"=>"INT2NUM(%1)",
32
+ "unsigned int"=>"UINT2NUM(%1)",
33
+ "size_t"=>"SIZET2NUM(%1)",
34
+ "gsl_sf_result *"=>["DBL2NUM(%1.val)","DBL2NUM(%1.err)"]
35
+ }
36
+
37
+ TYPEMAP =
38
+ {
39
+ "double"=>"cDF",
40
+ "gsl_complex"=>"cDC",
41
+ "unsigned int"=>"cUI",
42
+ "int"=>"cI",
43
+ "size_t"=>"cSZ",
44
+ }
45
+
46
+ NACLASSMAP =
47
+ {
48
+ "double"=>"Numo::DFloat",
49
+ "gsl_complex"=>"Numo::DComplex",
50
+ "unsigned int"=>"Numo::UInt",
51
+ "int"=>"Numo::Int",
52
+ "size_t"=>"Numo::UInt64",
53
+ "gsl_sf_result *"=>["Numo::DFloat"]*2,
54
+ "gsl_sf_result_e10 *"=>["Numo::DFloat"]*2+["Numo::Int"],
55
+ "gsl_sf_mathieu_workspace *"=>"Numo::GSL::Sf::MathieuWorkspace"
56
+ }
57
+
58
+ RBCLASSMAP =
59
+ {
60
+ "double"=>"Float",
61
+ "gsl_complex"=>"Complex",
62
+ "unsigned int"=>"Integer",
63
+ "int"=>"Integer",
64
+ "size_t"=>"Integer",
65
+ "gsl_mode_t"=>"Integer",
66
+ "gsl_sf_result *"=>["Float"]*2
67
+ }
68
+
69
+ CTYPEMAP =
70
+ {
71
+ "double"=>"double",
72
+ #"unsigned int"=>"uint32_t",
73
+ #"int"=>"int32_t",
74
+ "unsigned int"=>"unsigned int",
75
+ "int"=>"int",
76
+ "size_t"=>"uint64_t",
77
+ "gsl_complex"=>"gsl_complex",
78
+ }
79
+
80
+ RETNAMEMAP =
81
+ {
82
+ "double"=>"Numo::DFloat",
83
+ "gsl_complex"=>"Numo::DComplex",
84
+ #"unsigned int"=>"Numo::UInt32",
85
+ #"int"=>"Numo::Int32",
86
+ "unsigned int"=>"Numo::UInt",
87
+ "int"=>"Numo::Int",
88
+ "size_t"=>"Numo::UInt64",
89
+ "gsl_sf_result *"=>["Numo::DFloat"]*2,
90
+ "gsl_sf_result_e10 *"=>["Numo::DFloat"]*2+["Numo::Int"]
91
+ }
92
+
93
+ def initialize(func,idx,type,name,prop)
94
+ @func = func
95
+ @idx = idx
96
+ @type = type
97
+ @name = name
98
+ @prop = prop
99
+ @pass = @prop[:pass]
100
+
101
+ if /(.+)\*$/ =~ @type
102
+ @type2 = $1.strip
103
+ end
104
+
105
+ if @prop[:output]
106
+ @n_out =
107
+ case @type
108
+ when "gsl_sf_result_e10 *"; 3
109
+ when "gsl_sf_result *"; 2
110
+ else 1
111
+ end
112
+ end
113
+
114
+ @ctype = CTYPEMAP[@type] || CTYPEMAP[@type2]
115
+ end
116
+
117
+ attr_reader :type, :name
118
+ attr_reader :pass, :n_out
119
+
120
+ [:input,:output,:param,:narray].each do |sym|
121
+ define_method(sym){@prop[sym]}
122
+ end
123
+
124
+ def c_var
125
+ "c#{@idx}"
126
+ end
127
+
128
+ def c_arg
129
+ (@pass == :pointer) ? "&"+c_var : c_var
130
+ end
131
+
132
+ def v_var
133
+ if @func.n_arg < 0
134
+ "v[#{@idx}]"
135
+ else
136
+ "v#{@idx}"
137
+ end
138
+ end
139
+
140
+ def ain_def
141
+ "{#{na_type},0}"
142
+ end
143
+
144
+ def aout_def
145
+ case @type
146
+ when "gsl_sf_result_e10 *"
147
+ return "{cDF,0},{cDF,0},{cI,0}"
148
+ when "gsl_sf_result *"
149
+ return "{cDF,0},{cDF,0}"
150
+ end
151
+ case @pass
152
+ when :array
153
+ "{#{na_type},1,shape}"
154
+ when :pointer,:return
155
+ "{#{na_type},0}"
156
+ else
157
+ raise "no aout_def for #{self.inspect}"
158
+ end
159
+ end
160
+
161
+ def na_type
162
+ TYPEMAP[@type] || TYPEMAP[@type2]
163
+ end
164
+
165
+ def na_class
166
+ NACLASSMAP[@type] || NACLASSMAP[@type2]
167
+ end
168
+
169
+ def rb_class
170
+ RBCLASSMAP[@type] || RBCLASSMAP[@type2]
171
+ end
172
+
173
+ def ret_val
174
+ case @type
175
+ when "gsl_sf_result *"
176
+ [@name+".val",@name+".err"]
177
+ when "gsl_sf_result_e10 *"
178
+ [@name+".val",@name+".err",@name+".e10"]
179
+ else
180
+ @name
181
+ end
182
+ end
183
+
184
+ def def_var
185
+ if @prop[:param]
186
+ "#{@type} #{c_var};"
187
+ elsif @prop[:input]
188
+ "#{@type} #{c_var};"
189
+ elsif @pass == :array
190
+ "#{@type} *#{c_var};"
191
+ elsif @pass == :pointer
192
+ "#{@type2} #{c_var};"
193
+ elsif @pass == :return
194
+ "#{@type} #{c_var};"
195
+ else
196
+ raise "no variable definition"
197
+ end
198
+ end
199
+
200
+ def def_value
201
+ "VALUE #{v_var};"
202
+ end
203
+
204
+ def set_value
205
+ NUM2DATA[@type].gsub(/%1/,v_var).sub(/%2/,c_var)+";"
206
+ end
207
+
208
+ def get_value
209
+ case a = DATA2NUM[@type]
210
+ when String
211
+ a.gsub(/%1/,c_var)
212
+ when Array
213
+ a.map{|s| s.gsub(/%1/,c_var)}
214
+ end
215
+ end
216
+
217
+ def store_to_array(va)
218
+ a = get_value
219
+ a = [a] unless Array === a
220
+ a.map{|x|"rb_ary_push(#{va},#{x});"}.join("\n"+" "*8)
221
+ end
222
+
223
+ def set_param(opt)
224
+ n = @func.n_input
225
+ if @type == "gsl_mode_t" && n == @idx+1
226
+ return <<EOL
227
+ if (argc==#{@idx}) {
228
+ #{c_var} = GSL_MODE_DEFAULT;
229
+ } else if (argc==#{@idx+1}) {
230
+ #{set_value}
231
+ } else {
232
+ rb_raise(rb_eArgError,"invalid number of argument: %d for #{n-1} or #{n}",argc);
233
+ }
234
+ #{opt} = &#{c_var}; //#{@name}
235
+ EOL
236
+ else
237
+ return "#{set_value} #{opt} = &#{c_var}; //#{@name}"
238
+ end
239
+ end
240
+
241
+ def get_param(opt)
242
+ "#{c_var} = *(#{@type}*)(#{opt}); //#{@name}"
243
+ end
244
+
245
+ def get_data(lp)
246
+ "#{c_var} = *(#{@ctype}*)GET_PTR(#{lp},#{cnt}); //#{@name}"
247
+ end
248
+
249
+ def get_ptr(lp)
250
+ if @pass == :array
251
+ "#{c_var} = (#{@ctype}*)GET_PTR(#{lp},#{cnt}); //#{@name}"
252
+ end
253
+ end
254
+
255
+ def set_data(lp)
256
+ if @pass != :array
257
+ if "gsl_sf_result_e10 *" == @type
258
+ "*(double*)GET_PTR(#{lp},#{cnt}) = #{c_var}.val; "+
259
+ "*(double*)GET_PTR(#{lp},#{cnt}) = #{c_var}.err; "+
260
+ "*(int*)GET_PTR(#{lp},#{cnt}) = #{c_var}.e10; //#{@name}"
261
+ elsif "gsl_sf_result *" == @type
262
+ "*(double*)GET_PTR(#{lp},#{cnt}) = #{c_var}.val; "+
263
+ "*(double*)GET_PTR(#{lp},#{cnt}) = #{c_var}.err; //#{@name}"
264
+ else
265
+ "*(#{@ctype}*)GET_PTR(#{lp},#{cnt}) = #{c_var}; //#{@name}"
266
+ end
267
+ end
268
+ end
269
+
270
+ def cnt
271
+ @func.counter.inc
272
+ end
273
+ end
274
+
275
+ #----------------------------------------------------------
276
+
277
+ class FuncMatch
278
+
279
+ def initialize(*args,type:nil,name:nil)
280
+ @func_type = type
281
+ @func_name = name
282
+ @args = args
283
+ end
284
+
285
+ def ===(h)
286
+ if /These functions are now deprecated/m =~ h[:desc]
287
+ $stderr.puts "depricated: #{h[:func_name]}"
288
+ return false
289
+ end
290
+ if /This function is now deprecated/m =~ h[:desc]
291
+ $stderr.puts "depricated: #{h[:func_name]}"
292
+ return false
293
+ end
294
+ if @func_type
295
+ return false unless t = h[:func_type]
296
+ t.sub!(/^const\s+/,"")
297
+ #$stderr.puts [t,@func_type].inspect
298
+ return false unless @func_type === t
299
+ end
300
+ if @func_name
301
+ return false unless @func_name === h[:func_name]
302
+ end
303
+ if @args
304
+ return false unless h_args = h[:args]
305
+ #$stderr.puts [@args,h_args].inspect
306
+ return false unless @args.size == 0 || @args.size == h_args.size
307
+ @args.each_with_index do |a,i|
308
+ #$stderr.puts [a,h_args[i]].inspect
309
+ return false unless h_a = h_args[i]
310
+ case a
311
+ when Array
312
+ if a[0] # C type
313
+ return false unless t = h_a[0]
314
+ t.sub!(/^const\s+/,"")
315
+ return false unless a[0] === t
316
+ end
317
+ if a[1] # var name
318
+ return false unless a[1] === h_a[1]
319
+ end
320
+ else # String or Regexp
321
+ #$stderr.puts [a,h_a[0]].inspect
322
+ return false unless t = h_a[0]
323
+ t.sub!(/^const\s+/,"")
324
+ #$stderr.puts [a,t].inspect
325
+ return false unless a === t
326
+ end
327
+ end
328
+ end
329
+ #$stderr.puts self.inspect
330
+ true
331
+ end
332
+
333
+ end
334
+
335
+ class Counter
336
+ def initialize
337
+ @i = 0
338
+ end
339
+ def inc
340
+ i = @i
341
+ @i += 1
342
+ i
343
+ end
344
+ end
345
+
346
+ #----------------------------------------------------------
347
+
348
+ module FuncParser
349
+
350
+ def self.lookup(h)
351
+ false
352
+ end
353
+
354
+ PARAM_DESC = {}
355
+ PARAM_NAMES = {}
356
+
357
+ def param_desc
358
+ self.class::PARAM_DESC
359
+ end
360
+
361
+ def param_names
362
+ self.class::PARAM_NAMES
363
+ end
364
+
365
+ def parse_args(h)
366
+ i = 0
367
+ @parsed_args = []
368
+ h[:args].each do |type,name|
369
+ type = type.sub(/^const\s+/,"").strip
370
+ if /_array$/ =~ name && /(.+)\*$/ =~ type
371
+ type = $1.strip
372
+ name = name+"[]"
373
+ end
374
+ prop = argument_property(type,name)
375
+ @parsed_args << Argument.new(self,i,type,name,prop)
376
+ i += 1
377
+ end
378
+ t = h[:func_type]
379
+ if t != "void"
380
+ prop = argument_property(t,"return")
381
+ @parsed_args << Argument.new(self,i,t,"return",prop)
382
+ end
383
+ #
384
+ @args_param = @parsed_args.select{|a|a.param}
385
+ @args_input = @parsed_args.select{|a|a.input}
386
+ @args_in = @parsed_args.select{|a|a.narray && a.input}
387
+ @args_out = @parsed_args.select{|a|a.narray && a.output}
388
+ @parsed_args.each do |a|
389
+ if a.pass == :array
390
+ @generate_array = true
391
+ break
392
+ end
393
+ end
394
+ @counter = Counter.new
395
+ if @args_param.any?{|a| a.type=="gsl_mode_t"}
396
+ set n_arg: -1
397
+ else
398
+ set n_arg: @args_param.size+@args_in.size
399
+ end
400
+ end
401
+
402
+ #attr_reader :name
403
+ attr_reader :args_out, :args_in, :args_param
404
+ attr_reader :generate_array
405
+ attr_reader :counter
406
+
407
+ def argument_property(type,name)
408
+ if name == "return"
409
+ {output:true, narray:true, pass: :return}
410
+ elsif /\[\]$/ =~ name
411
+ {output:true, narray:true, pass: :array}
412
+ elsif is_param(type,name)
413
+ {input:true, param:true}
414
+ elsif /\*$/ =~ type
415
+ {output:true, narray:true, pass: :pointer}
416
+ else
417
+ {input:true, narray:true}
418
+ end
419
+ end
420
+
421
+ def is_param(tp,nm)
422
+ #$stderr.puts "type='#{tp}' name='#{nm}'"
423
+ a = self.class::PARAM_NAMES[tp]
424
+ case a
425
+ when Array
426
+ a.include?(nm)
427
+ else
428
+ a
429
+ end
430
+ end
431
+
432
+ def n_param
433
+ @args_param.size
434
+ end
435
+
436
+ def n_in
437
+ @args_in.size
438
+ end
439
+
440
+ def n_input
441
+ @args_input.size
442
+ end
443
+
444
+ def n_out
445
+ n = 0
446
+ @args_out.each{|a| n+=a.n_out}
447
+ n
448
+ end
449
+
450
+ def def_ain
451
+ @args_in.map{|a| a.ain_def}.join(",")
452
+ end
453
+
454
+ def def_aout
455
+ @args_out.map{|a| a.aout_def}.join(",")
456
+ end
457
+
458
+ def find_name(name)
459
+ @parsed_args.find{|a| a.name==name}
460
+ end
461
+
462
+ def c_args
463
+ @parsed_args.select{|a| a.pass != :return}.
464
+ map{|a| a.c_arg}.join(",")
465
+ end
466
+
467
+ def recv
468
+ a = args_out.last
469
+ if a && a.pass == :return
470
+ a.c_var + " = "
471
+ else
472
+ ""
473
+ end
474
+ end
475
+
476
+ def method_args
477
+ s = @args_input.map{|a| a.name}.join(",")
478
+ s.sub(/,mode$/,",[mode]")
479
+ end
480
+
481
+ def cdef_args
482
+ if n_arg == -1
483
+ "int argc, VALUE *v, VALUE mod"
484
+ else
485
+ "VALUE mod," +
486
+ @args_input.map{|a|"VALUE #{a.v_var}"}.join(",")
487
+ end
488
+ end
489
+
490
+ def ndl_args
491
+ @args_in.map{|a| a.v_var}.join(",")
492
+ end
493
+
494
+ def desc_param
495
+ #t = (["Numo::DFloat"]*n_out).join(",")
496
+ t = @args_out.map{|a| a.na_class}.flatten.join(", ")
497
+ v = @args_out.map{|a| a.ret_val}.flatten.join(", ")
498
+ if n_out > 1
499
+ r = "@return [[#{t}]] array of [#{v}]"
500
+ else
501
+ r = "@return [#{t}] #{v}"
502
+ end
503
+ @args_input.map{|a| a.description}+[r]
504
+ end
505
+
506
+ def desc_param_scalar
507
+ #t = (["Numo::DFloat"]*n_out).join(",")
508
+ t = @args_out.map{|a| a.rb_class}.flatten.join(", ")
509
+ v = @args_out.map{|a| a.ret_val}.flatten.join(", ")
510
+ if n_out > 1
511
+ r = "@return [[#{t}]] array of [#{v}]"
512
+ else
513
+ r = "@return [#{t}] #{v}"
514
+ end
515
+ @args_input.map{|a| a.description}+[r]
516
+ end
517
+
518
+ end
@@ -0,0 +1,40 @@
1
+ static void
2
+ iter_<%=c_func%>(na_loop_t *const lp)
3
+ {
4
+ size_t i;
5
+ char *p1, *p2;
6
+ ssize_t s1, s2;
7
+ double x, y;
8
+ <%=struct%> *w = (<%=struct%>*)(lp->opt_ptr);
9
+ <% c_args = get(:postpose) ? "x,w" : "w,x" %>
10
+
11
+ INIT_COUNTER(lp, i);
12
+ INIT_PTR(lp, 0, p1, s1);
13
+ INIT_PTR(lp, 1, p2, s2);
14
+
15
+ for (; i--; ) {
16
+ GET_DATA_STRIDE(p1,s1,double,x);
17
+ y = <%=func_name%>(<%=c_args%>);
18
+ SET_DATA_STRIDE(p2,s2,double,y);
19
+ }
20
+ }
21
+
22
+ /*
23
+ @overload <%=name%>(<%=args[1][1]%>)
24
+ @param [DFloat] <%=args[1][1]%>
25
+ @return [DFloat] result
26
+
27
+ <%= description %>
28
+ */
29
+ static VALUE
30
+ <%=c_func(1)%>(VALUE self, VALUE v1)
31
+ {
32
+ <%=struct%> *w;
33
+ ndfunc_arg_in_t ain[1] = {{cDF,0}};
34
+ ndfunc_arg_out_t aout[1] = {{cDF,0}};
35
+ ndfunc_t ndf = {iter_<%=c_func%>, STRIDE_LOOP|NDF_EXTRACT, 1,1, ain,aout};
36
+
37
+ TypedData_Get_Struct(self, <%=struct%>, &<%=data_type_var%>, w);
38
+
39
+ return na_ndloop3(&ndf, w, 1, v1);
40
+ }