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.
- checksums.yaml +7 -0
- data/Gemfile +4 -0
- data/README.md +84 -0
- data/Rakefile +16 -0
- data/ext/numo/gsl/cdf/depend +17 -0
- data/ext/numo/gsl/cdf/erbpp_cdf.rb +44 -0
- data/ext/numo/gsl/cdf/extconf.rb +9 -0
- data/ext/numo/gsl/cdf/func_def.rb +610 -0
- data/ext/numo/gsl/const/const_def.rb +419 -0
- data/ext/numo/gsl/const/depend +17 -0
- data/ext/numo/gsl/const/erbpp_const.rb +30 -0
- data/ext/numo/gsl/const/extconf.rb +9 -0
- data/ext/numo/gsl/err/depend +1 -0
- data/ext/numo/gsl/err/err.c +22 -0
- data/ext/numo/gsl/err/extconf.rb +9 -0
- data/ext/numo/gsl/extconf_gsl.rb +44 -0
- data/ext/numo/gsl/fit/depend +17 -0
- data/ext/numo/gsl/fit/erbpp_fit.rb +74 -0
- data/ext/numo/gsl/fit/extconf.rb +9 -0
- data/ext/numo/gsl/fit/func_def.rb +129 -0
- data/ext/numo/gsl/fit/tmpl/check_1d.c +9 -0
- data/ext/numo/gsl/fit/tmpl/fit_linear.c +53 -0
- data/ext/numo/gsl/fit/tmpl/fit_linear_est.c +56 -0
- data/ext/numo/gsl/fit/tmpl/fit_mul.c +50 -0
- data/ext/numo/gsl/fit/tmpl/fit_mul_est.c +47 -0
- data/ext/numo/gsl/fit/tmpl/fit_wlinear.c +59 -0
- data/ext/numo/gsl/fit/tmpl/fit_wmul.c +56 -0
- data/ext/numo/gsl/gen/erbpp2.rb +306 -0
- data/ext/numo/gsl/gen/erbpp_gsl.rb +166 -0
- data/ext/numo/gsl/gen/func_parser.rb +520 -0
- data/ext/numo/gsl/gen/tmpl/c_DFloat_f_DFloat.c +40 -0
- data/ext/numo/gsl/gen/tmpl/c_DFloat_f_SZ.c +41 -0
- data/ext/numo/gsl/gen/tmpl/c_DFloat_f_SZ_x2.c +44 -0
- data/ext/numo/gsl/gen/tmpl/c_DFloat_x2_f_DFloat_x2.c +45 -0
- data/ext/numo/gsl/gen/tmpl/c_double_f_double.c +16 -0
- data/ext/numo/gsl/gen/tmpl/c_double_f_sizet.c +16 -0
- data/ext/numo/gsl/gen/tmpl/c_double_f_sizet_x2.c +17 -0
- data/ext/numo/gsl/gen/tmpl/c_double_f_void.c +15 -0
- data/ext/numo/gsl/gen/tmpl/c_double_x2_f_void.c +17 -0
- data/ext/numo/gsl/gen/tmpl/c_new_DFloat.c +29 -0
- data/ext/numo/gsl/gen/tmpl/c_new_double.c +22 -0
- data/ext/numo/gsl/gen/tmpl/c_new_f_other.c +25 -0
- data/ext/numo/gsl/gen/tmpl/c_new_sizet.c +22 -0
- data/ext/numo/gsl/gen/tmpl/c_new_sizet_double.c +23 -0
- data/ext/numo/gsl/gen/tmpl/c_new_sizet_x2.c +23 -0
- data/ext/numo/gsl/gen/tmpl/c_new_void.c +21 -0
- data/ext/numo/gsl/gen/tmpl/c_other_f_void.c +19 -0
- data/ext/numo/gsl/gen/tmpl/c_self_f_DFloat.c +46 -0
- data/ext/numo/gsl/gen/tmpl/c_self_f_DFloat_x2.c +41 -0
- data/ext/numo/gsl/gen/tmpl/c_self_f_DFloat_x3.c +44 -0
- data/ext/numo/gsl/gen/tmpl/c_self_f_DFloat_x4.c +47 -0
- data/ext/numo/gsl/gen/tmpl/c_self_f_SZ_x2_DFloat.c +45 -0
- data/ext/numo/gsl/gen/tmpl/c_self_f_double.c +17 -0
- data/ext/numo/gsl/gen/tmpl/c_self_f_other.c +17 -0
- data/ext/numo/gsl/gen/tmpl/c_self_f_sizet.c +21 -0
- data/ext/numo/gsl/gen/tmpl/c_self_f_void.c +14 -0
- data/ext/numo/gsl/gen/tmpl/c_sizet_f_void.c +15 -0
- data/ext/numo/gsl/gen/tmpl/c_sizet_x2_f_void.c +17 -0
- data/ext/numo/gsl/gen/tmpl/c_str_f_void.c +15 -0
- data/ext/numo/gsl/gen/tmpl/c_super_new_void.c +18 -0
- data/ext/numo/gsl/gen/tmpl/c_uint_f_void.c +15 -0
- data/ext/numo/gsl/gen/tmpl/c_ulong_f_void.c +15 -0
- data/ext/numo/gsl/gen/tmpl/c_void_f_double.c +17 -0
- data/ext/numo/gsl/gen/tmpl/c_void_f_double_x2.c +18 -0
- data/ext/numo/gsl/gen/tmpl/c_void_f_double_x4.c +20 -0
- data/ext/numo/gsl/gen/tmpl/c_void_f_ulong.c +17 -0
- data/ext/numo/gsl/gen/tmpl/c_void_f_void.c +14 -0
- data/ext/numo/gsl/gen/tmpl/cast_1d_contiguous.c +15 -0
- data/ext/numo/gsl/gen/tmpl/cast_2d_contiguous.c +15 -0
- data/ext/numo/gsl/gen/tmpl/class.c +26 -0
- data/ext/numo/gsl/gen/tmpl/create_new_narray.c +26 -0
- data/ext/numo/gsl/gen/tmpl/init_class.c +10 -0
- data/ext/numo/gsl/gen/tmpl/init_module.c +12 -0
- data/ext/numo/gsl/gen/tmpl/lib.c +41 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_Int_f_DFloat.c +38 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat.c +35 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_Int.c +39 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_UInt.c +39 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_double.c +42 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_double_x2.c +47 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_int.c +42 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_x2.c +38 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_x3.c +41 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_Int.c +36 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt.c +36 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt32.c +36 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt32_double.c +43 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt32_double_uint.c +49 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt32_double_x2.c +48 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt32_uint_x3.c +51 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt_double.c +43 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt_double_uint.c +50 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt_double_x2.c +48 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt_uint_x3.c +51 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_int_DFloat.c +41 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_int_DFloat_x2.c +44 -0
- data/ext/numo/gsl/gen/tmpl/m_DFloat_f_int_x2_DFloat_x2.c +46 -0
- data/ext/numo/gsl/gen/tmpl/m_Int_f_DFloat.c +36 -0
- data/ext/numo/gsl/gen/tmpl/m_Int_f_DFloat_x3.c +42 -0
- data/ext/numo/gsl/gen/tmpl/m_Int_f_int_DFloat.c +42 -0
- data/ext/numo/gsl/gen/tmpl/m_Int_f_int_DFloat_x2.c +45 -0
- data/ext/numo/gsl/gen/tmpl/mod_func_noloop.c +54 -0
- data/ext/numo/gsl/gen/tmpl/mod_func_scalar.c +27 -0
- data/ext/numo/gsl/gen/tmpl/module.c +9 -0
- data/ext/numo/gsl/histogram/depend +17 -0
- data/ext/numo/gsl/histogram/erbpp_histogram.rb +109 -0
- data/ext/numo/gsl/histogram/extconf.rb +9 -0
- data/ext/numo/gsl/histogram/func_def.rb +763 -0
- data/ext/numo/gsl/histogram/tmpl/c_DFloat_f_2d_get.c +54 -0
- data/ext/numo/gsl/histogram/tmpl/c_DFloat_f_field.c +35 -0
- data/ext/numo/gsl/histogram/tmpl/c_DFloat_f_get.c +47 -0
- data/ext/numo/gsl/histogram/tmpl/c_DFloat_x2_f_get_range.c +56 -0
- data/ext/numo/gsl/histogram/tmpl/c_bool_f_other.c +19 -0
- data/ext/numo/gsl/histogram/tmpl/c_bool_f_pdf_init.c +24 -0
- data/ext/numo/gsl/histogram/tmpl/c_self_f_2d_set_ranges.c +26 -0
- data/ext/numo/gsl/histogram/tmpl/c_self_f_set_ranges.c +21 -0
- data/ext/numo/gsl/histogram/tmpl/c_sizet_f_field.c +15 -0
- data/ext/numo/gsl/interp/depend +17 -0
- data/ext/numo/gsl/interp/erbpp_interp.rb +59 -0
- data/ext/numo/gsl/interp/extconf.rb +9 -0
- data/ext/numo/gsl/interp/func_def.rb +816 -0
- data/ext/numo/gsl/interp/parse_interp.rb +67 -0
- data/ext/numo/gsl/interp/tmpl/interp2d_new.c +36 -0
- data/ext/numo/gsl/interp/tmpl/interp2d_type_new.c +17 -0
- data/ext/numo/gsl/interp/tmpl/interp_bsearch.c +57 -0
- data/ext/numo/gsl/interp/tmpl/interp_new.c +29 -0
- data/ext/numo/gsl/interp/tmpl/interp_type_new.c +16 -0
- data/ext/numo/gsl/interp/tmpl/spline2d_eval.c +61 -0
- data/ext/numo/gsl/interp/tmpl/spline_eval.c +55 -0
- data/ext/numo/gsl/interp/tmpl/spline_integ.c +56 -0
- data/ext/numo/gsl/interp/type_def.rb +9 -0
- data/ext/numo/gsl/multifit/depend +17 -0
- data/ext/numo/gsl/multifit/erbpp_multifit.rb +99 -0
- data/ext/numo/gsl/multifit/extconf.rb +9 -0
- data/ext/numo/gsl/multifit/func_2.1.rb +1035 -0
- data/ext/numo/gsl/multifit/func_2.2.1.rb +736 -0
- data/ext/numo/gsl/multifit/func_2.2.rb +736 -0
- data/ext/numo/gsl/multifit/func_2.3.rb +872 -0
- data/ext/numo/gsl/multifit/func_def.rb +1012 -0
- data/ext/numo/gsl/multifit/tmpl/multifit_linear.c +66 -0
- data/ext/numo/gsl/multifit/tmpl/multifit_linear_est.c +48 -0
- data/ext/numo/gsl/multifit/tmpl/multifit_linear_residuals.c +47 -0
- data/ext/numo/gsl/multifit/tmpl/multifit_wlinear.c +70 -0
- data/ext/numo/gsl/multifit/type_def.rb +1 -0
- data/ext/numo/gsl/numo_gsl.h +117 -0
- data/ext/numo/gsl/pdf/depend +17 -0
- data/ext/numo/gsl/pdf/erbpp_pdf.rb +26 -0
- data/ext/numo/gsl/pdf/extconf.rb +9 -0
- data/ext/numo/gsl/pdf/func_2.2.1.rb +306 -0
- data/ext/numo/gsl/pdf/func_2.2.rb +306 -0
- data/ext/numo/gsl/pdf/func_2.3.rb +306 -0
- data/ext/numo/gsl/pdf/func_def.rb +282 -0
- data/ext/numo/gsl/pdf/parse_pdf.rb +42 -0
- data/ext/numo/gsl/pdf/tmpl/dirichlet.c +39 -0
- data/ext/numo/gsl/pdf/tmpl/multinomial.c +39 -0
- data/ext/numo/gsl/poly/depend +17 -0
- data/ext/numo/gsl/poly/erbpp_poly.rb +70 -0
- data/ext/numo/gsl/poly/extconf.rb +9 -0
- data/ext/numo/gsl/poly/func_def.rb +234 -0
- data/ext/numo/gsl/poly/tmpl/poly_complex_solve.c +59 -0
- data/ext/numo/gsl/poly/tmpl/poly_eval.c +70 -0
- data/ext/numo/gsl/poly/tmpl/poly_eval_derivs.c +40 -0
- data/ext/numo/gsl/ran/depend +17 -0
- data/ext/numo/gsl/ran/erbpp_ran.rb +42 -0
- data/ext/numo/gsl/ran/extconf.rb +9 -0
- data/ext/numo/gsl/ran/func_2.2.1.rb +1658 -0
- data/ext/numo/gsl/ran/func_2.2.rb +1658 -0
- data/ext/numo/gsl/ran/func_2.3.rb +1658 -0
- data/ext/numo/gsl/ran/func_def.rb +1594 -0
- data/ext/numo/gsl/ran/parse_ran.rb +10 -0
- data/ext/numo/gsl/rng/depend +17 -0
- data/ext/numo/gsl/rng/erbpp_rng.rb +58 -0
- data/ext/numo/gsl/rng/extconf.rb +9 -0
- data/ext/numo/gsl/rng/func_def.rb +230 -0
- data/ext/numo/gsl/rng/parse_rng.rb +125 -0
- data/ext/numo/gsl/rng/tmpl/ran.c +40 -0
- data/ext/numo/gsl/rng/tmpl/ran_DFloat_f_DFloat.c +28 -0
- data/ext/numo/gsl/rng/tmpl/ran_DFloat_x2.c +45 -0
- data/ext/numo/gsl/rng/tmpl/ran_DFloat_x3.c +51 -0
- data/ext/numo/gsl/rng/tmpl/ran_multinomial.c +32 -0
- data/ext/numo/gsl/rng/tmpl/rng_DFloat.c +29 -0
- data/ext/numo/gsl/rng/tmpl/rng_UInt.c +44 -0
- data/ext/numo/gsl/rng/tmpl/rng_alloc.c +24 -0
- data/ext/numo/gsl/rng/tmpl/rng_type_new.c +14 -0
- data/ext/numo/gsl/rng/type_def.rb +63 -0
- data/ext/numo/gsl/rstat/depend +17 -0
- data/ext/numo/gsl/rstat/erbpp_rstat.rb +64 -0
- data/ext/numo/gsl/rstat/extconf.rb +9 -0
- data/ext/numo/gsl/rstat/func_2.2.1.rb +116 -0
- data/ext/numo/gsl/rstat/func_2.2.rb +116 -0
- data/ext/numo/gsl/rstat/func_2.3.rb +123 -0
- data/ext/numo/gsl/rstat/func_def.rb +102 -0
- data/ext/numo/gsl/sf/depend +17 -0
- data/ext/numo/gsl/sf/erbpp_sf.rb +51 -0
- data/ext/numo/gsl/sf/extconf.rb +9 -0
- data/ext/numo/gsl/sf/func_def.rb +4703 -0
- data/ext/numo/gsl/sf/parse_sf.rb +277 -0
- data/ext/numo/gsl/sf/tmpl/c_DFloat_f_int_x2_DFloat.c +50 -0
- data/ext/numo/gsl/sf/tmpl/c_DFloat_f_int_x2_DFloat_x2.c +52 -0
- data/ext/numo/gsl/sf/tmpl/c_DFloat_f_int_x3_DFloat_x2.c +55 -0
- data/ext/numo/gsl/sf/tmpl/m_DFloat_f_DFloat_mode.c +47 -0
- data/ext/numo/gsl/sf/tmpl/m_DFloat_f_lmax_array.c +41 -0
- data/ext/numo/gsl/sf/tmpl/m_DFloat_f_nmin_nmax_array.c +49 -0
- data/ext/numo/gsl/spmatrix/const_2.2.1.rb +3 -0
- data/ext/numo/gsl/spmatrix/const_2.2.rb +3 -0
- data/ext/numo/gsl/spmatrix/const_2.3.rb +3 -0
- data/ext/numo/gsl/spmatrix/const_def.rb +2 -0
- data/ext/numo/gsl/spmatrix/depend +17 -0
- data/ext/numo/gsl/spmatrix/erbpp_spmatrix.rb +100 -0
- data/ext/numo/gsl/spmatrix/extconf.rb +9 -0
- data/ext/numo/gsl/spmatrix/func_2.2.1.rb +297 -0
- data/ext/numo/gsl/spmatrix/func_2.2.rb +297 -0
- data/ext/numo/gsl/spmatrix/func_2.3.rb +297 -0
- data/ext/numo/gsl/spmatrix/func_def.rb +218 -0
- data/ext/numo/gsl/spmatrix/parse_spmatrix.rb +70 -0
- data/ext/numo/gsl/spmatrix/tmpl/itersolve_iterate.c +47 -0
- data/ext/numo/gsl/spmatrix/tmpl/itersolve_new.c +22 -0
- data/ext/numo/gsl/spmatrix/tmpl/itersolve_type_new.c +16 -0
- data/ext/numo/gsl/spmatrix/tmpl/spblas_dgemm.c +35 -0
- data/ext/numo/gsl/spmatrix/tmpl/spblas_dgemv.c +43 -0
- data/ext/numo/gsl/spmatrix/tmpl/spmatrix_add.c +22 -0
- data/ext/numo/gsl/spmatrix/tmpl/spmatrix_d2sp.c +28 -0
- data/ext/numo/gsl/spmatrix/tmpl/spmatrix_new.c +40 -0
- data/ext/numo/gsl/spmatrix/tmpl/spmatrix_sp2d.c +25 -0
- data/ext/numo/gsl/spmatrix/type_def.rb +1 -0
- data/ext/numo/gsl/stats/depend +17 -0
- data/ext/numo/gsl/stats/erbpp_stats.rb +29 -0
- data/ext/numo/gsl/stats/extconf.rb +9 -0
- data/ext/numo/gsl/stats/func_2.2.1.rb +608 -0
- data/ext/numo/gsl/stats/func_2.2.rb +608 -0
- data/ext/numo/gsl/stats/func_2.3.rb +608 -0
- data/ext/numo/gsl/stats/func_def.rb +608 -0
- data/ext/numo/gsl/stats/parse_stats.rb +63 -0
- data/ext/numo/gsl/stats/tmpl/stats_1a0p.c +37 -0
- data/ext/numo/gsl/stats/tmpl/stats_1a0p_index.c +60 -0
- data/ext/numo/gsl/stats/tmpl/stats_1a1p.c +41 -0
- data/ext/numo/gsl/stats/tmpl/stats_1a2p.c +42 -0
- data/ext/numo/gsl/stats/tmpl/stats_2a0p.c +39 -0
- data/ext/numo/gsl/stats/tmpl/stats_2a1p.c +43 -0
- data/ext/numo/gsl/stats/tmpl/stats_2a2p.c +44 -0
- data/ext/numo/gsl/stats/tmpl/stats_minmax.c +37 -0
- data/ext/numo/gsl/stats/tmpl/stats_minmax_index.c +67 -0
- data/ext/numo/gsl/stats/tmpl/stats_spearman.c +46 -0
- data/ext/numo/gsl/sys/const_def.rb +21 -0
- data/ext/numo/gsl/sys/depend +17 -0
- data/ext/numo/gsl/sys/enum_def.rb +75 -0
- data/ext/numo/gsl/sys/erbpp_sys.rb +60 -0
- data/ext/numo/gsl/sys/extconf.rb +9 -0
- data/ext/numo/gsl/sys/func_def.rb +249 -0
- data/ext/numo/gsl/version.h +1 -0
- data/ext/numo/gsl/wavelet/depend +17 -0
- data/ext/numo/gsl/wavelet/erbpp_wavelet.rb +48 -0
- data/ext/numo/gsl/wavelet/extconf.rb +9 -0
- data/ext/numo/gsl/wavelet/func_def.rb +337 -0
- data/ext/numo/gsl/wavelet/parse_wavelet.rb +47 -0
- data/ext/numo/gsl/wavelet/tmpl/wavelet2d_transform.c +56 -0
- data/ext/numo/gsl/wavelet/tmpl/wavelet_array_check.c +56 -0
- data/ext/numo/gsl/wavelet/tmpl/wavelet_macro.c +1 -0
- data/ext/numo/gsl/wavelet/tmpl/wavelet_new.c +20 -0
- data/ext/numo/gsl/wavelet/tmpl/wavelet_transform.c +55 -0
- data/ext/numo/gsl/wavelet/tmpl/wavelet_transform2.c +22 -0
- data/ext/numo/gsl/wavelet/tmpl/wavelet_type_new.c +15 -0
- data/ext/numo/gsl/wavelet/type_def.rb +6 -0
- data/lib/numo/gsl.rb +17 -0
- data/numo-gsl.gemspec +33 -0
- metadata +367 -0
@@ -0,0 +1,63 @@
|
|
1
|
+
require_relative "../gen/erbpp_gsl"
|
2
|
+
|
3
|
+
class DefStats < DefModule
|
4
|
+
include ErbppGsl
|
5
|
+
|
6
|
+
def lookup(h)
|
7
|
+
dblbk = [dbl,/\[\]$/]
|
8
|
+
case h
|
9
|
+
when FM(name:"gsl_stats_spearman"); "stats_spearman"
|
10
|
+
when FM(name:"gsl_stats_minmax_index"); "stats_minmax_index"
|
11
|
+
when FM(name:"gsl_stats_minmax"); "stats_minmax"
|
12
|
+
when FM(name:/_(min|max)_index$/); "stats_1a0p_index"
|
13
|
+
when FM(dblbk,szt,szt); "stats_1a0p"
|
14
|
+
when FM(dblbk,szt,szt,dbl); "stats_1a1p"
|
15
|
+
when FM(dblbk,szt,szt,dbl,dbl); "stats_1a2p"
|
16
|
+
when FM(dblbk,szt,dblbk,szt,szt); "stats_2a0p"
|
17
|
+
when FM(dblbk,szt,dblbk,szt,szt,dbl); "stats_2a1p"
|
18
|
+
when FM(dblbk,szt,dblbk,szt,szt,dbl,dbl); "stats_2a2p"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def check_func(h)
|
23
|
+
if t = lookup(h)
|
24
|
+
StatsBasic.new(self,t,**h)
|
25
|
+
else
|
26
|
+
$stderr.puts "skip #{h[:func_name]}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
class StatsBasic < DefModuleFunction
|
33
|
+
include FuncParser
|
34
|
+
|
35
|
+
PARAM_DESC = {}
|
36
|
+
PARAM_NAMES =
|
37
|
+
{
|
38
|
+
"double" => %w[csphase],
|
39
|
+
"int" => [], #%w[n m i j l kmax lmax nmin nmax size order_min order_max],
|
40
|
+
"size_t" => [], #%w[lmax],
|
41
|
+
}
|
42
|
+
|
43
|
+
def initialize(parent,tmpl,**h)
|
44
|
+
m = h[:func_name].sub(/^gsl_stats_/,"")
|
45
|
+
super(parent, tmpl, name:m, **h)
|
46
|
+
parse_args(h)
|
47
|
+
@varg = -1
|
48
|
+
set n_arg: -1
|
49
|
+
@preproc_code = ""
|
50
|
+
end
|
51
|
+
|
52
|
+
def argument_property(type,name)
|
53
|
+
case name
|
54
|
+
when "return"; {output:true, narray:true, pass: :return}
|
55
|
+
when /\[\]/; {input:true, narray:true, pass: :array}
|
56
|
+
when /^w?stride/,"n"; {}
|
57
|
+
else
|
58
|
+
if /(.+)\*$/ =~ type; {output:true, narray:true, pass: :return}
|
59
|
+
else; {input:true, param:true}
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
static void
|
2
|
+
iter_<%=c_func%>(na_loop_t *const lp)
|
3
|
+
{
|
4
|
+
size_t n;
|
5
|
+
char *p1, *p2;
|
6
|
+
ssize_t s1;
|
7
|
+
|
8
|
+
INIT_COUNTER(lp, n);
|
9
|
+
INIT_PTR(lp, 0, p1, s1);
|
10
|
+
p2 = lp->args[1].ptr + lp->args[1].iter[0].pos;
|
11
|
+
|
12
|
+
*(double*)p2 = <%=func_name%>((double*)p1,s1/sizeof(double),n);
|
13
|
+
}
|
14
|
+
|
15
|
+
/*
|
16
|
+
<%=desc%>
|
17
|
+
@overload <%=name%>(<%=method_args%>, axis:nil, keepdims:false)
|
18
|
+
<% desc_param.each do |x|%>
|
19
|
+
<%=x%><% end %>
|
20
|
+
@param [Numeric,Array,Range] axis (keyword) Axes along which the operation is performed.
|
21
|
+
@param [TrueClass] keepdims (keyword) If true, the reduced axes are left in the result array as dimensions with size one.
|
22
|
+
*/
|
23
|
+
static VALUE
|
24
|
+
<%=c_func%>(int argc, VALUE *argv, VALUE mod)
|
25
|
+
{
|
26
|
+
VALUE reduce;
|
27
|
+
ndfunc_arg_in_t ain[2] = {{cDF,0},{sym_reduce,0}};
|
28
|
+
ndfunc_arg_out_t aout[1] = {{cDF,0}};
|
29
|
+
ndfunc_t ndf = { iter_<%=c_func%>, STRIDE_LOOP_NIP|NDF_FLAT_REDUCE|NDF_EXTRACT,
|
30
|
+
2, 1, ain, aout };
|
31
|
+
|
32
|
+
if (argc<1) {
|
33
|
+
rb_raise(rb_eArgError,"wrong number of argument (%d for >=1)",argc);
|
34
|
+
}
|
35
|
+
reduce = nary_reduce_dimension(argc-1, argv+1, 1, argv, &ndf, 0);
|
36
|
+
return na_ndloop(&ndf, 2, *argv, reduce);
|
37
|
+
}
|
@@ -0,0 +1,60 @@
|
|
1
|
+
<% [64,32].each do |i| %>
|
2
|
+
#define idx_t int<%=i%>_t
|
3
|
+
static void
|
4
|
+
iter_<%=c_func%>_index<%=i%>(na_loop_t *const lp)
|
5
|
+
{
|
6
|
+
size_t n, idx;
|
7
|
+
char *d_ptr, *i_ptr, *o_ptr;
|
8
|
+
ssize_t d_step, i_step;
|
9
|
+
|
10
|
+
INIT_COUNTER(lp, n);
|
11
|
+
INIT_PTR(lp, 0, d_ptr, d_step);
|
12
|
+
|
13
|
+
idx = <%=func_name%>((double*)d_ptr,d_step/sizeof(double),n);
|
14
|
+
|
15
|
+
INIT_PTR(lp, 1, i_ptr, i_step);
|
16
|
+
o_ptr = NDL_PTR(lp,2);
|
17
|
+
*(idx_t*)o_ptr = *(idx_t*)(i_ptr + i_step * idx);
|
18
|
+
}
|
19
|
+
#undef idx_t
|
20
|
+
<% end %>
|
21
|
+
|
22
|
+
/*
|
23
|
+
<%=desc%>
|
24
|
+
@overload <%=name%>() => Integer
|
25
|
+
@overload <%=name%>(axis:nil, keepdims:false) => Integer or Numo::Int32/64
|
26
|
+
<% desc_param.each do |x|%>
|
27
|
+
<%=x%><% end %>
|
28
|
+
@param [Numeric,Array,Range] axis (keyword) Axes along which the operation is performed.
|
29
|
+
@param [TrueClass] keepdims (keyword) If true, the reduced axes are left in th*/
|
30
|
+
static VALUE
|
31
|
+
<%=c_func%>(int argc, VALUE *argv, VALUE mod)
|
32
|
+
{
|
33
|
+
narray_t *na;
|
34
|
+
VALUE idx, reduce;
|
35
|
+
ndfunc_arg_in_t ain[3] = {{cDF,0},{Qnil,0},{sym_reduce,0}};
|
36
|
+
ndfunc_arg_out_t aout[1] = {{0,0,0}};
|
37
|
+
ndfunc_t ndf = {0, STRIDE_LOOP_NIP|NDF_FLAT_REDUCE|NDF_EXTRACT, 3,1, ain,aout};
|
38
|
+
|
39
|
+
if (argc<1) {
|
40
|
+
rb_raise(rb_eArgError,"wrong number of argument (%d for >=1)",argc);
|
41
|
+
}
|
42
|
+
GetNArray(argv[0],na);
|
43
|
+
if (na->ndim==0) {
|
44
|
+
return INT2FIX(0);
|
45
|
+
}
|
46
|
+
if (na->size > (~(u_int32_t)0)) {
|
47
|
+
aout[0].type = numo_cInt64;
|
48
|
+
idx = rb_narray_new(numo_cInt64, na->ndim, na->shape);
|
49
|
+
ndf.func = iter_<%=c_func%>_index64;
|
50
|
+
} else {
|
51
|
+
aout[0].type = numo_cInt32;
|
52
|
+
idx = rb_narray_new(numo_cInt32, na->ndim, na->shape);
|
53
|
+
ndf.func = iter_<%=c_func%>_index32;
|
54
|
+
}
|
55
|
+
rb_funcall(idx, rb_intern("seq"), 0);
|
56
|
+
|
57
|
+
reduce = nary_reduce_dimension(argc-1, argv+1, 1, argv, &ndf, 0);
|
58
|
+
|
59
|
+
return na_ndloop(&ndf, 3, argv[0], idx, reduce);
|
60
|
+
}
|
@@ -0,0 +1,41 @@
|
|
1
|
+
static void
|
2
|
+
iter_<%=c_func%>(na_loop_t *const lp)
|
3
|
+
{
|
4
|
+
size_t n;
|
5
|
+
char *p1, *p2;
|
6
|
+
ssize_t s1;
|
7
|
+
double *opt = (double*)(lp->opt_ptr);
|
8
|
+
|
9
|
+
INIT_COUNTER(lp, n);
|
10
|
+
INIT_PTR(lp, 0, p1, s1);
|
11
|
+
p2 = lp->args[1].ptr + lp->args[1].iter[0].pos;
|
12
|
+
|
13
|
+
*(double*)p2 = <%=func_name%>((double*)p1,s1/sizeof(double),n,opt[0]);
|
14
|
+
}
|
15
|
+
|
16
|
+
/*
|
17
|
+
<%=desc%>
|
18
|
+
@overload <%=name%>(<%=method_args%>, axis:nil, keepdims:false)
|
19
|
+
<% desc_param.each do |x|%>
|
20
|
+
<%=x%><% end %>
|
21
|
+
@param [Numeric,Array,Range] axis (keyword) Axes along which the operation is performed.
|
22
|
+
@param [TrueClass] keepdims (keyword) If true, the reduced axes are left in th*/
|
23
|
+
static VALUE
|
24
|
+
<%=c_func%>(int argc, VALUE *argv, VALUE mod)
|
25
|
+
{
|
26
|
+
VALUE reduce;
|
27
|
+
double opt[1];
|
28
|
+
ndfunc_arg_in_t ain[2] = {{cDF,0},{sym_reduce,0}};
|
29
|
+
ndfunc_arg_out_t aout[1] = {{cDF,0}};
|
30
|
+
ndfunc_t ndf = { iter_<%=c_func%>, STRIDE_LOOP_NIP|NDF_FLAT_REDUCE|NDF_EXTRACT,
|
31
|
+
2, 1, ain, aout };
|
32
|
+
|
33
|
+
if (argc<2) {
|
34
|
+
rb_raise(rb_eArgError,"wrong number of argument (%d for >=2)",argc);
|
35
|
+
}
|
36
|
+
|
37
|
+
opt[0] = NUM2DBL(argv[1]);
|
38
|
+
|
39
|
+
reduce = nary_reduce_dimension(argc-2, argv+2, 1, argv, &ndf, 0);
|
40
|
+
return na_ndloop3(&ndf, opt, 2, argv[0], reduce);
|
41
|
+
}
|
@@ -0,0 +1,42 @@
|
|
1
|
+
static void
|
2
|
+
iter_<%=c_func%>(na_loop_t *const lp)
|
3
|
+
{
|
4
|
+
size_t n;
|
5
|
+
char *p1, *p2;
|
6
|
+
ssize_t s1;
|
7
|
+
double *opt = (double*)(lp->opt_ptr);
|
8
|
+
|
9
|
+
INIT_COUNTER(lp, n);
|
10
|
+
INIT_PTR(lp, 0, p1, s1);
|
11
|
+
p2 = lp->args[1].ptr + lp->args[1].iter[0].pos;
|
12
|
+
|
13
|
+
*(double*)p2 = <%=func_name%>((double*)p1,s1/sizeof(double),n,opt[0],opt[1]);
|
14
|
+
}
|
15
|
+
|
16
|
+
/*
|
17
|
+
<%=desc%>
|
18
|
+
@overload <%=name%>(<%=method_args%>, axis:nil, keepdims:false)
|
19
|
+
<% desc_param.each do |x|%>
|
20
|
+
<%=x%><% end %>
|
21
|
+
@param [Numeric,Array,Range] axis (keyword) Axes along which the operation is performed.
|
22
|
+
@param [TrueClass] keepdims (keyword) If true, the reduced axes are left in th*/
|
23
|
+
static VALUE
|
24
|
+
<%=c_func%>(int argc, VALUE *argv, VALUE mod)
|
25
|
+
{
|
26
|
+
VALUE reduce;
|
27
|
+
double opt[2];
|
28
|
+
ndfunc_arg_in_t ain[2] = {{cDF,0},{sym_reduce,0}};
|
29
|
+
ndfunc_arg_out_t aout[1] = {{cDF,0}};
|
30
|
+
ndfunc_t ndf = { iter_<%=c_func%>, STRIDE_LOOP_NIP|NDF_FLAT_REDUCE|NDF_EXTRACT,
|
31
|
+
2, 1, ain, aout };
|
32
|
+
|
33
|
+
if (argc<3) {
|
34
|
+
rb_raise(rb_eArgError,"wrong number of argument (%d for >=3)",argc);
|
35
|
+
}
|
36
|
+
|
37
|
+
opt[0] = NUM2DBL(argv[1]);
|
38
|
+
opt[1] = NUM2DBL(argv[2]);
|
39
|
+
|
40
|
+
reduce = nary_reduce_dimension(argc-3, argv+3, 1, argv, &ndf, 0);
|
41
|
+
return na_ndloop3(&ndf, opt, 2, argv[0], reduce);
|
42
|
+
}
|
@@ -0,0 +1,39 @@
|
|
1
|
+
static void
|
2
|
+
iter_<%=c_func%>(na_loop_t *const lp)
|
3
|
+
{
|
4
|
+
size_t n;
|
5
|
+
char *p1, *p2, *p3;
|
6
|
+
ssize_t s1, s2;
|
7
|
+
|
8
|
+
INIT_COUNTER(lp, n);
|
9
|
+
INIT_PTR(lp, 0, p1, s1);
|
10
|
+
INIT_PTR(lp, 1, p2, s2);
|
11
|
+
p3 = lp->args[2].ptr + lp->args[2].iter[0].pos;
|
12
|
+
|
13
|
+
*(double*)p3 = <%=func_name%>((double*)p1,s1/sizeof(double),
|
14
|
+
(double*)p2,s2/sizeof(double),n);
|
15
|
+
}
|
16
|
+
|
17
|
+
/*
|
18
|
+
<%=desc%>
|
19
|
+
@overload <%=name%>(<%=method_args%>, axis:nil, keepdims:false)
|
20
|
+
<% desc_param.each do |x|%>
|
21
|
+
<%=x%><% end %>
|
22
|
+
@param [Numeric,Array,Range] axis (keyword) Axes along which the operation is performed.
|
23
|
+
@param [TrueClass] keepdims (keyword) If true, the reduced axes are left in th*/
|
24
|
+
static VALUE
|
25
|
+
<%=c_func%>(int argc, VALUE *argv, VALUE mod)
|
26
|
+
{
|
27
|
+
VALUE reduce;
|
28
|
+
ndfunc_arg_in_t ain[3] = {{cDF,0},{cDF,0},{sym_reduce,0}};
|
29
|
+
ndfunc_arg_out_t aout[1] = {{cDF,0}};
|
30
|
+
ndfunc_t ndf = { iter_<%=c_func%>, STRIDE_LOOP_NIP|NDF_FLAT_REDUCE|NDF_EXTRACT,
|
31
|
+
3, 1, ain, aout };
|
32
|
+
|
33
|
+
if (argc<2) {
|
34
|
+
rb_raise(rb_eArgError,"wrong number of argument (%d for >=2)",argc);
|
35
|
+
}
|
36
|
+
|
37
|
+
reduce = nary_reduce_dimension(argc-2, argv+2, 2, argv, &ndf, 0);
|
38
|
+
return na_ndloop(&ndf, 3, argv[0], argv[1], reduce);
|
39
|
+
}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
static void
|
2
|
+
iter_<%=c_func%>(na_loop_t *const lp)
|
3
|
+
{
|
4
|
+
size_t n;
|
5
|
+
char *p1, *p2, *p3;
|
6
|
+
ssize_t s1, s2;
|
7
|
+
double *opt = (double*)(lp->opt_ptr);
|
8
|
+
|
9
|
+
INIT_COUNTER(lp, n);
|
10
|
+
INIT_PTR(lp, 0, p1, s1);
|
11
|
+
INIT_PTR(lp, 1, p2, s2);
|
12
|
+
p3 = lp->args[2].ptr + lp->args[2].iter[0].pos;
|
13
|
+
|
14
|
+
*(double*)p3 = <%=func_name%>((double*)p1,s1/sizeof(double),
|
15
|
+
(double*)p2,s2/sizeof(double),n,opt[0]);
|
16
|
+
}
|
17
|
+
|
18
|
+
/*
|
19
|
+
<%=desc%>
|
20
|
+
@overload <%=name%>(<%=method_args%>, axis:nil, keepdims:false)
|
21
|
+
<% desc_param.each do |x|%>
|
22
|
+
<%=x%><% end %>
|
23
|
+
@param [Numeric,Array,Range] axis (keyword) Axes along which the operation is performed.
|
24
|
+
@param [TrueClass] keepdims (keyword) If true, the reduced axes are left in th*/
|
25
|
+
static VALUE
|
26
|
+
<%=c_func%>(int argc, VALUE *argv, VALUE mod)
|
27
|
+
{
|
28
|
+
VALUE reduce;
|
29
|
+
double opt[1];
|
30
|
+
ndfunc_arg_in_t ain[3] = {{cDF,0},{cDF,0},{sym_reduce,0}};
|
31
|
+
ndfunc_arg_out_t aout[1] = {{cDF,0}};
|
32
|
+
ndfunc_t ndf = { iter_<%=c_func%>, STRIDE_LOOP_NIP|NDF_FLAT_REDUCE|NDF_EXTRACT,
|
33
|
+
3, 1, ain, aout };
|
34
|
+
|
35
|
+
if (argc<3) {
|
36
|
+
rb_raise(rb_eArgError,"wrong number of argument (%d for >=3)",argc);
|
37
|
+
}
|
38
|
+
|
39
|
+
opt[0] = NUM2DBL(argv[2]);
|
40
|
+
|
41
|
+
reduce = nary_reduce_dimension(argc-3, argv+3, 2, argv, &ndf, 0);
|
42
|
+
return na_ndloop3(&ndf, opt, 3, argv[0], argv[1], reduce);
|
43
|
+
}
|
@@ -0,0 +1,44 @@
|
|
1
|
+
static void
|
2
|
+
iter_<%=c_func%>(na_loop_t *const lp)
|
3
|
+
{
|
4
|
+
size_t n;
|
5
|
+
char *p1, *p2, *p3;
|
6
|
+
ssize_t s1, s2;
|
7
|
+
double *opt = (double*)(lp->opt_ptr);
|
8
|
+
|
9
|
+
INIT_COUNTER(lp, n);
|
10
|
+
INIT_PTR(lp, 0, p1, s1);
|
11
|
+
INIT_PTR(lp, 1, p2, s2);
|
12
|
+
p3 = lp->args[2].ptr + lp->args[2].iter[0].pos;
|
13
|
+
|
14
|
+
*(double*)p3 = <%=func_name%>((double*)p1,s1/sizeof(double),
|
15
|
+
(double*)p2,s2/sizeof(double),n,opt[0],opt[1]);
|
16
|
+
}
|
17
|
+
|
18
|
+
/*
|
19
|
+
<%=desc%>
|
20
|
+
@overload <%=name%>(<%=method_args%>, axis:nil, keepdims:false)
|
21
|
+
<% desc_param.each do |x|%>
|
22
|
+
<%=x%><% end %>
|
23
|
+
@param [Numeric,Array,Range] axis (keyword) Axes along which the operation is performed.
|
24
|
+
@param [TrueClass] keepdims (keyword) If true, the reduced axes are left in th*/
|
25
|
+
static VALUE
|
26
|
+
<%=c_func%>(int argc, VALUE *argv, VALUE mod)
|
27
|
+
{
|
28
|
+
VALUE reduce;
|
29
|
+
double opt[2];
|
30
|
+
ndfunc_arg_in_t ain[3] = {{cDF,0},{cDF,0},{sym_reduce,0}};
|
31
|
+
ndfunc_arg_out_t aout[1] = {{cDF,0}};
|
32
|
+
ndfunc_t ndf = { iter_<%=c_func%>, STRIDE_LOOP_NIP|NDF_FLAT_REDUCE|NDF_EXTRACT,
|
33
|
+
3, 1, ain, aout };
|
34
|
+
|
35
|
+
if (argc<4) {
|
36
|
+
rb_raise(rb_eArgError,"wrong number of argument (%d for >=4)",argc);
|
37
|
+
}
|
38
|
+
|
39
|
+
opt[0] = NUM2DBL(argv[2]);
|
40
|
+
opt[1] = NUM2DBL(argv[3]);
|
41
|
+
|
42
|
+
reduce = nary_reduce_dimension(argc-4, argv+4, 2, argv, &ndf, 0);
|
43
|
+
return na_ndloop3(&ndf, opt, 3, argv[0], argv[1], reduce);
|
44
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
static void
|
2
|
+
iter_<%=c_func%>(na_loop_t *const lp)
|
3
|
+
{
|
4
|
+
size_t n;
|
5
|
+
char *p1, *p2, *p3;
|
6
|
+
ssize_t s1;
|
7
|
+
|
8
|
+
INIT_COUNTER(lp, n);
|
9
|
+
INIT_PTR(lp, 0, p1, s1);
|
10
|
+
p2 = lp->args[1].ptr + lp->args[1].iter[0].pos;
|
11
|
+
p3 = lp->args[2].ptr + lp->args[2].iter[0].pos;
|
12
|
+
|
13
|
+
<%=func_name%>((double*)p2,(double*)p3,(double*)p1,s1/sizeof(double),n);
|
14
|
+
}
|
15
|
+
|
16
|
+
/*
|
17
|
+
<%=desc%>
|
18
|
+
@overload <%=name%>(<%=method_args%>, axis:nil, keepdims:falsek)
|
19
|
+
<% desc_param.each do |x|%>
|
20
|
+
<%=x%><% end %>
|
21
|
+
@param [Numeric,Array,Range] axis (keyword) Axes along which the operation is performed.
|
22
|
+
@param [TrueClass] keepdims (keyword) If true, the reduced axes are left in th*/
|
23
|
+
static VALUE
|
24
|
+
<%=c_func%>(int argc, VALUE *argv, VALUE mod)
|
25
|
+
{
|
26
|
+
VALUE reduce;
|
27
|
+
ndfunc_arg_in_t ain[2] = {{cDF,0},{sym_reduce,0}};
|
28
|
+
ndfunc_arg_out_t aout[2] = {{cDF,0},{cDF,0}};
|
29
|
+
ndfunc_t ndf = { iter_<%=c_func%>, STRIDE_LOOP_NIP|NDF_FLAT_REDUCE|NDF_EXTRACT,
|
30
|
+
2, 2, ain, aout };
|
31
|
+
|
32
|
+
if (argc<1) {
|
33
|
+
rb_raise(rb_eArgError,"wrong number of argument (%d for >=1)",argc);
|
34
|
+
}
|
35
|
+
reduce = nary_reduce_dimension(argc-1, argv+1, 1, argv, &ndf, 0);
|
36
|
+
return na_ndloop(&ndf, 2, argv[0], reduce);
|
37
|
+
}
|
@@ -0,0 +1,67 @@
|
|
1
|
+
<% [64,32].each do |i| %>
|
2
|
+
#define idx_t int<%=i%>_t
|
3
|
+
static void
|
4
|
+
iter_<%=c_func%>_index<%=i%>(na_loop_t *const lp)
|
5
|
+
{
|
6
|
+
size_t n;
|
7
|
+
size_t min_idx, max_idx;
|
8
|
+
char *d_ptr, *i_ptr;
|
9
|
+
ssize_t d_step, i_step;
|
10
|
+
char *min_ptr, *max_ptr;
|
11
|
+
|
12
|
+
INIT_COUNTER(lp, n);
|
13
|
+
INIT_PTR(lp, 0, d_ptr, d_step);
|
14
|
+
|
15
|
+
<%=func_name%>(&min_idx,&max_idx,(double*)d_ptr,d_step/sizeof(double),n);
|
16
|
+
|
17
|
+
INIT_PTR(lp, 1, i_ptr, i_step);
|
18
|
+
min_ptr = NDL_PTR(lp,2);
|
19
|
+
max_ptr = NDL_PTR(lp,3);
|
20
|
+
*(idx_t*)min_ptr = *(idx_t*)(i_ptr + i_step * min_idx);
|
21
|
+
*(idx_t*)max_ptr = *(idx_t*)(i_ptr + i_step * max_idx);
|
22
|
+
}
|
23
|
+
#undef idx_t
|
24
|
+
<% end %>
|
25
|
+
|
26
|
+
/*
|
27
|
+
<%=desc%>
|
28
|
+
@overload <%=name%>() => [Integer, Integer]
|
29
|
+
@overload <%=name%>(axis:nil, keepdims:false) => 2-element array of Integer or Numo::Int32/64
|
30
|
+
<% desc_param.each do |x|%>
|
31
|
+
<%=x%><% end %>
|
32
|
+
@param [Numeric,Array,Range] axis (keyword) Axes along which the operation is performed.
|
33
|
+
@param [TrueClass] keepdims (keyword) If true, the reduced axes are left in th*/
|
34
|
+
static VALUE
|
35
|
+
<%=c_func%>(int argc, VALUE *argv, VALUE mod)
|
36
|
+
{
|
37
|
+
narray_t *na;
|
38
|
+
VALUE idx, reduce;
|
39
|
+
ndfunc_arg_in_t ain[3] = {{cDF,0},{Qnil,0},{sym_reduce,0}};
|
40
|
+
ndfunc_arg_out_t aout[2] = {{0,0,0},{0,0,0}};
|
41
|
+
ndfunc_t ndf = { 0, STRIDE_LOOP_NIP|NDF_FLAT_REDUCE|NDF_EXTRACT,
|
42
|
+
3,2, ain,aout };
|
43
|
+
|
44
|
+
if (argc<1) {
|
45
|
+
rb_raise(rb_eArgError,"wrong number of argument (%d for >=1)",argc);
|
46
|
+
}
|
47
|
+
GetNArray(argv[0],na);
|
48
|
+
if (na->ndim==0) {
|
49
|
+
return INT2FIX(0);
|
50
|
+
}
|
51
|
+
if (na->size > (~(u_int32_t)0)) {
|
52
|
+
aout[0].type = numo_cInt64;
|
53
|
+
aout[1].type = numo_cInt64;
|
54
|
+
idx = rb_narray_new(numo_cInt64, na->ndim, na->shape);
|
55
|
+
ndf.func = iter_<%=c_func%>_index64;
|
56
|
+
} else {
|
57
|
+
aout[0].type = numo_cInt32;
|
58
|
+
aout[1].type = numo_cInt32;
|
59
|
+
idx = rb_narray_new(numo_cInt32, na->ndim, na->shape);
|
60
|
+
ndf.func = iter_<%=c_func%>_index32;
|
61
|
+
}
|
62
|
+
rb_funcall(idx, rb_intern("seq"), 0);
|
63
|
+
|
64
|
+
reduce = nary_reduce_dimension(argc-1, argv+1, 1, argv, &ndf, 0);
|
65
|
+
|
66
|
+
return na_ndloop(&ndf, 3, argv[0], idx, reduce);
|
67
|
+
}
|