numo-narray 0.9.1.4 → 0.9.1.9

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 (71) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +12 -6
  3. data/Rakefile +4 -63
  4. data/ext/numo/narray/array.c +35 -32
  5. data/ext/numo/narray/data.c +40 -43
  6. data/ext/numo/narray/depend.erb +6 -10
  7. data/ext/numo/narray/extconf.rb +24 -21
  8. data/ext/numo/narray/gen/cogen.rb +2 -2
  9. data/ext/numo/narray/gen/narray_def.rb +5 -1
  10. data/ext/numo/narray/gen/spec.rb +17 -7
  11. data/ext/numo/narray/gen/tmpl/accum.c +2 -2
  12. data/ext/numo/narray/gen/tmpl/accum_arg.c +88 -0
  13. data/ext/numo/narray/gen/tmpl/accum_binary.c +1 -1
  14. data/ext/numo/narray/gen/tmpl/accum_index.c +25 -14
  15. data/ext/numo/narray/gen/tmpl/alloc_func.c +4 -1
  16. data/ext/numo/narray/gen/tmpl/allocate.c +1 -0
  17. data/ext/numo/narray/gen/tmpl/aref.c +5 -35
  18. data/ext/numo/narray/gen/tmpl/aset.c +7 -37
  19. data/ext/numo/narray/gen/tmpl/bincount.c +7 -7
  20. data/ext/numo/narray/gen/tmpl/cast.c +7 -0
  21. data/ext/numo/narray/gen/tmpl/clip.c +11 -15
  22. data/ext/numo/narray/gen/tmpl/cum.c +1 -1
  23. data/ext/numo/narray/gen/tmpl/each.c +4 -2
  24. data/ext/numo/narray/gen/tmpl/each_with_index.c +5 -2
  25. data/ext/numo/narray/gen/tmpl/lib.c +2 -2
  26. data/ext/numo/narray/gen/tmpl/logseq.c +6 -5
  27. data/ext/numo/narray/gen/tmpl/map_with_index.c +5 -6
  28. data/ext/numo/narray/gen/tmpl/median.c +2 -2
  29. data/ext/numo/narray/gen/tmpl/minmax.c +1 -1
  30. data/ext/numo/narray/gen/tmpl/poly.c +4 -4
  31. data/ext/numo/narray/gen/tmpl/qsort.c +1 -1
  32. data/ext/numo/narray/gen/tmpl/rand.c +8 -6
  33. data/ext/numo/narray/gen/tmpl/rand_norm.c +18 -16
  34. data/ext/numo/narray/gen/tmpl/seq.c +5 -4
  35. data/ext/numo/narray/gen/tmpl/sort.c +3 -3
  36. data/ext/numo/narray/gen/tmpl/sort_index.c +2 -2
  37. data/ext/numo/narray/gen/tmpl/store_array.c +14 -2
  38. data/ext/numo/narray/gen/tmpl/unary_s.c +55 -31
  39. data/ext/numo/narray/gen/tmpl_bit/allocate.c +1 -0
  40. data/ext/numo/narray/gen/tmpl_bit/aref.c +22 -30
  41. data/ext/numo/narray/gen/tmpl_bit/aset.c +20 -34
  42. data/ext/numo/narray/gen/tmpl_bit/binary.c +48 -14
  43. data/ext/numo/narray/gen/tmpl_bit/bit_count.c +5 -0
  44. data/ext/numo/narray/gen/tmpl_bit/bit_reduce.c +5 -0
  45. data/ext/numo/narray/gen/tmpl_bit/store_array.c +14 -2
  46. data/ext/numo/narray/gen/tmpl_bit/store_bit.c +27 -9
  47. data/ext/numo/narray/gen/tmpl_bit/unary.c +25 -7
  48. data/ext/numo/narray/index.c +363 -59
  49. data/ext/numo/narray/math.c +2 -2
  50. data/ext/numo/narray/narray.c +151 -36
  51. data/ext/numo/narray/ndloop.c +4 -4
  52. data/ext/numo/narray/numo/intern.h +3 -2
  53. data/ext/numo/narray/numo/narray.h +37 -14
  54. data/ext/numo/narray/numo/ndloop.h +2 -2
  55. data/ext/numo/narray/numo/template.h +11 -15
  56. data/ext/numo/narray/numo/types/complex.h +2 -2
  57. data/ext/numo/narray/numo/types/int16.h +5 -2
  58. data/ext/numo/narray/numo/types/int32.h +0 -1
  59. data/ext/numo/narray/numo/types/int64.h +0 -1
  60. data/ext/numo/narray/numo/types/int8.h +1 -2
  61. data/ext/numo/narray/numo/types/uint16.h +5 -2
  62. data/ext/numo/narray/numo/types/uint32.h +0 -1
  63. data/ext/numo/narray/numo/types/uint64.h +0 -1
  64. data/ext/numo/narray/numo/types/uint8.h +1 -2
  65. data/ext/numo/narray/numo/types/xint_macro.h +2 -0
  66. data/ext/numo/narray/step.c +58 -252
  67. data/ext/numo/narray/struct.c +3 -3
  68. data/lib/numo/narray.rb +1 -7
  69. data/lib/numo/narray/extra.rb +214 -213
  70. data/numo-narray.gemspec +7 -8
  71. metadata +17 -36
@@ -1,17 +1,13 @@
1
1
  TAGSRC = \
2
- ../../ruby/include/ruby/*.h \
3
- ../../ruby/*.c \
4
- *.h \
5
- types/*.h \
6
- *.c \
7
- types/*.c
2
+ numo/types/*.h \
3
+ *.c
8
4
 
9
5
  tags : TAGS
10
6
  TAGS : $(TAGSRC)
11
7
  etags $(TAGSRC)
12
8
 
13
9
  doc :
14
- yard doc *.c types/*.c
10
+ yard doc *.c
15
11
 
16
12
  C_TMPL = <%=Dir.glob("#{__dir__}/gen/tmpl*/*.c").join(" ")%>
17
13
 
@@ -22,13 +18,13 @@ DEPENDS = $(C_TMPL) <%= __dir__ %>/gen/*.rb
22
18
  type_c = []
23
19
  type_rb = Dir.glob("#{__dir__}/gen/def/*.rb")
24
20
  type_rb.each do |s|
25
- type_c << c = "types/"+File.basename(s,".rb")+".c"
21
+ type_c << c = "t_"+File.basename(s,".rb")+".c"
26
22
  %>
27
23
  <%=c%>: <%=s%> $(DEPENDS)
28
- $(MAKEDIRS) $(@D) types
29
24
  ruby $(COGEN) -l -o $@ <%=s%>
30
25
  <% end %>
31
26
 
32
27
  src : <%= type_c.join(" ") %>
33
28
 
34
- CLEANOBJS = *.o */*.o *.bak types/*.c
29
+ CLEANOBJS = *.o t_*.c *.bak
30
+ DISTCLEANFILES = depend TAGS
@@ -7,7 +7,11 @@ if RUBY_VERSION < "2.1.0"
7
7
  exit(1)
8
8
  end
9
9
 
10
- rm_f 'numo/extconf.h'
10
+ def d(file)
11
+ File.join(__dir__,file)
12
+ end
13
+
14
+ rm_f d('numo/extconf.h')
11
15
 
12
16
  #$CFLAGS="-g3 -O0 -Wall"
13
17
  #$CFLAGS=" $(cflags) -O3 -m64 -msse2 -funroll-loops"
@@ -28,20 +32,20 @@ step
28
32
  index
29
33
  ndloop
30
34
  data
31
- types/bit
32
- types/int8
33
- types/int16
34
- types/int32
35
- types/int64
36
- types/uint8
37
- types/uint16
38
- types/uint32
39
- types/uint64
40
- types/sfloat
41
- types/dfloat
42
- types/scomplex
43
- types/dcomplex
44
- types/robject
35
+ t_bit
36
+ t_int8
37
+ t_int16
38
+ t_int32
39
+ t_int64
40
+ t_uint8
41
+ t_uint16
42
+ t_uint32
43
+ t_uint64
44
+ t_sfloat
45
+ t_dfloat
46
+ t_scomplex
47
+ t_dcomplex
48
+ t_robject
45
49
  math
46
50
  SFMT
47
51
  struct
@@ -83,19 +87,18 @@ unless have_type("u_int64_t", stdint)
83
87
  have_type("uint64_t", stdint)
84
88
  end
85
89
  have_func("exp10")
90
+ have_func("rb_arithmetic_sequence_extract")
86
91
 
87
92
  have_var("rb_cComplex")
88
93
 
89
94
  $objs = srcs.collect{|i| i+".o"}
90
95
 
91
- create_header('numo/extconf.h')
96
+ create_header d('numo/extconf.h')
92
97
 
93
- depend_path = File.join(__dir__, "depend")
94
- File.open(depend_path, "w") do |depend|
95
- depend_erb_path = File.join(__dir__, "depend.erb")
96
- File.open(depend_erb_path, "r") do |depend_erb|
98
+ File.open(d('depend'), "w") do |depend|
99
+ File.open(d('depend.erb'), "r") do |depend_erb|
97
100
  erb = ERB.new(depend_erb.read)
98
- erb.filename = depend_erb_path
101
+ erb.filename = d('depend.erb')
99
102
  depend.print(erb.result)
100
103
  end
101
104
  end
@@ -50,7 +50,7 @@ code = DefLib.new do
50
50
  set file_name: $output||""
51
51
  set include_files: ["numo/types/#{type_name}.h"]
52
52
  set lib_name: "numo_"+type_name
53
-
53
+
54
54
  if (::RbConfig::CONFIG['target_cpu'] == 'x86_64') or (::RbConfig::CONFIG['target_cpu'] == 'x64')
55
55
  set is_simd: true
56
56
  else
@@ -66,7 +66,7 @@ code = DefLib.new do
66
66
  end.result
67
67
 
68
68
  if $output
69
- open($output,"w").write(code)
69
+ File.write($output, code)
70
70
  else
71
71
  $stdout.write(code)
72
72
  end
@@ -27,7 +27,7 @@ module NArrayMethod
27
27
 
28
28
  def set2(meth, dtype, result_class)
29
29
  h = {dtype:dtype, result_class:result_class}
30
- def_method(meth, "set2", h)
30
+ def_method(meth, "set2", **h)
31
31
  end
32
32
 
33
33
  def cond_binary(meth,op=nil)
@@ -57,6 +57,10 @@ module NArrayMethod
57
57
  def_method(meth, "accum_index")
58
58
  end
59
59
 
60
+ def accum_arg(meth)
61
+ def_method(meth, "accum_arg")
62
+ end
63
+
60
64
  def cum(meth, cmacro)
61
65
  def_method(meth, "cum", cmacro:cmacro)
62
66
  end
@@ -1,8 +1,6 @@
1
1
  def_id "cast"
2
- def_id "eq"
3
- def_id "ne"
4
- def_id "pow"
5
2
  def_id "mulsum"
3
+ def_id "to_a"
6
4
  if is_complex
7
5
  def_id "real"
8
6
  def_id "imag"
@@ -32,7 +30,6 @@ if is_object
32
30
  def_id "bit_xor"
33
31
  def_id "bit_not"
34
32
  def_id "abs"
35
- def_id "minus"
36
33
  def_id "reciprocal"
37
34
  def_id "square"
38
35
  def_id "floor"
@@ -42,6 +39,7 @@ if is_object
42
39
  def_id "nan?"
43
40
  def_id "infinite?"
44
41
  def_id "finite?"
42
+ def_id "-@","minus"
45
43
  def_id "==","eq"
46
44
  def_id "!=","ne"
47
45
  def_id ">" ,"gt"
@@ -49,6 +47,9 @@ if is_object
49
47
  def_id "<" ,"lt"
50
48
  def_id "<=","le"
51
49
  def_id "<=>","ufo"
50
+ else
51
+ def_id "eq"
52
+ def_id "ne"
52
53
  end
53
54
 
54
55
  if is_int && !is_object
@@ -179,7 +180,12 @@ if !is_complex
179
180
  binary2 "divmod"
180
181
  end
181
182
 
182
- pow
183
+
184
+ if !is_bit
185
+ pow
186
+ def_id "**","pow"
187
+ def_alias "pow","**"
188
+ end
183
189
 
184
190
  unary "minus", "-@"
185
191
  unary "reciprocal"
@@ -273,7 +279,7 @@ if is_float
273
279
  cond_unary "isfinite"
274
280
  end
275
281
 
276
- if is_int
282
+ if is_int && !is_object
277
283
  if is_unsigned
278
284
  accum "sum","u_int64_t","numo_cUInt64"
279
285
  accum "prod","u_int64_t","numo_cUInt64"
@@ -303,6 +309,8 @@ if is_comparable
303
309
  accum "ptp","dtype","cT"
304
310
  accum_index "max_index"
305
311
  accum_index "min_index"
312
+ accum_arg "argmax"
313
+ accum_arg "argmin"
306
314
  def_method "minmax"
307
315
  def_module_function "maximum", "ewcomp", n_arg:2
308
316
  def_module_function "minimum", "ewcomp", n_arg:2
@@ -366,6 +374,7 @@ cn = get(:class_name)
366
374
  nm = get(:name)
367
375
  st = get(:simd_type)
368
376
  dp = get(:is_double_precision)
377
+ algn = get(:need_align)
369
378
  is_c = is_complex
370
379
 
371
380
  def_module do
@@ -377,8 +386,9 @@ def_module do
377
386
  set module_name: "Math"
378
387
  set module_var: "mTM"
379
388
  set simd_type: st
380
- set is_double_precision: dp
389
+ set is_double_precision: dp
381
390
  set is_complex: is_c
391
+ set need_align: algn
382
392
 
383
393
  math "sqrt"
384
394
  math "cbrt"
@@ -22,8 +22,8 @@ static void
22
22
  <% else %>
23
23
  @overload <%=name%>(axis:nil, keepdims:false)
24
24
  <% end %>
25
- @param [Numeric,Array,Range] axis (keyword) Affected dimensions.
26
- @param [TrueClass] keepdims (keyword) If true, the reduced axes are left in the result array as dimensions with size one.
25
+ @param [Numeric,Array,Range] axis Performs <%=name%> along the axis.
26
+ @param [TrueClass] keepdims If true, the reduced axes are left in the result array as dimensions with size one.
27
27
  @return [Numo::<%=class_name%>] returns result of <%=name%>.
28
28
  */
29
29
  static VALUE
@@ -0,0 +1,88 @@
1
+ <% (is_float ? ["","_nan"] : [""]).each do |j|
2
+ [64,32].each do |i| %>
3
+ #define idx_t int<%=i%>_t
4
+ static void
5
+ <%=c_iter%>_arg<%=i%><%=j%>(na_loop_t *const lp)
6
+ {
7
+ size_t n, idx;
8
+ char *d_ptr, *o_ptr;
9
+ ssize_t d_step;
10
+
11
+ INIT_COUNTER(lp, n);
12
+ INIT_PTR(lp, 0, d_ptr, d_step);
13
+
14
+ idx = f_<%=name[3..5]%>_index<%=j%>(n,d_ptr,d_step);
15
+
16
+ o_ptr = NDL_PTR(lp,1);
17
+ *(idx_t*)o_ptr = (idx_t)idx;
18
+ }
19
+ #undef idx_t
20
+ <% end;end %>
21
+
22
+ /*
23
+ Index of the <%=name[3..5]%>imum value.
24
+ <% if is_float %>
25
+ @overload <%=name%>(axis:nil, nan:false)
26
+ @param [TrueClass] nan If true, apply NaN-aware algorithm (return NaN posision if exist).
27
+ <% else %>
28
+ @overload <%=name%>(axis:nil)
29
+ <% end %>
30
+ @param [Numeric,Array,Range] axis Finds <%=name[3..5]%>imum values along the axis and returns **indices along the axis**.
31
+ @return [Integer,Numo::Int] returns the result indices.
32
+ @see #<%=name[3..5]%>_index
33
+ @see #<%=name[3..5]%>
34
+
35
+ @example
36
+ <% case name; when /min/ %>
37
+ a = Numo::NArray[3,4,1,2]
38
+ a.argmin #=> 2
39
+
40
+ b = Numo::NArray[[3,4,1],[2,0,5]]
41
+ b.argmin #=> 4
42
+ b.argmin(axis:1) #=> [2, 1]
43
+ b.argmin(axis:0) #=> [1, 1, 0]
44
+ b.at(b.argmin(axis:0), 0..-1) #=> [2, 0, 1]
45
+ <% when /max/ %>
46
+ a = Numo::NArray[3,4,1,2]
47
+ a.argmax #=> 1
48
+
49
+ b = Numo::NArray[[3,4,1],[2,0,5]]
50
+ b.argmax #=> 5
51
+ b.argmax(axis:1) #=> [1, 2]
52
+ b.argmax(axis:0) #=> [0, 0, 1]
53
+ b.at(b.argmax(axis:0), 0..-1) #=> [3, 4, 5]
54
+ <% end %>
55
+ */
56
+ static VALUE
57
+ <%=c_func(-1)%>(int argc, VALUE *argv, VALUE self)
58
+ {
59
+ narray_t *na;
60
+ VALUE reduce;
61
+ ndfunc_arg_in_t ain[2] = {{Qnil,0},{sym_reduce,0}};
62
+ ndfunc_arg_out_t aout[1] = {{0,0,0}};
63
+ ndfunc_t ndf = {0, STRIDE_LOOP_NIP|NDF_FLAT_REDUCE|NDF_EXTRACT, 2,1, ain,aout};
64
+
65
+ GetNArray(self,na);
66
+ if (na->ndim==0) {
67
+ return INT2FIX(0);
68
+ }
69
+ if (na->size > (~(u_int32_t)0)) {
70
+ aout[0].type = numo_cInt64;
71
+ ndf.func = <%=c_iter%>_arg64;
72
+ <% if is_float %>
73
+ reduce = na_reduce_dimension(argc, argv, 1, &self, &ndf, <%=c_iter%>_arg64_nan);
74
+ <% else %>
75
+ reduce = na_reduce_dimension(argc, argv, 1, &self, &ndf, 0);
76
+ <% end %>
77
+ } else {
78
+ aout[0].type = numo_cInt32;
79
+ ndf.func = <%=c_iter%>_arg32;
80
+ <% if is_float %>
81
+ reduce = na_reduce_dimension(argc, argv, 1, &self, &ndf, <%=c_iter%>_arg32_nan);
82
+ <% else %>
83
+ reduce = na_reduce_dimension(argc, argv, 1, &self, &ndf, 0);
84
+ <% end %>
85
+ }
86
+
87
+ return na_ndloop(&ndf, 2, self, reduce);
88
+ }
@@ -70,7 +70,7 @@ static VALUE
70
70
  @overload <%=op_map%>(other, axis:nil, keepdims:false)
71
71
  <% end %>
72
72
  @param [Numo::NArray,Numeric] other
73
- @param [Numeric,Array,Range] axis (keyword) Affected dimensions.
73
+ @param [Numeric,Array,Range] axis Performs <%=name%> along the axis.
74
74
  @param [TrueClass] keepdims (keyword) If true, the reduced axes are left in the result array as dimensions with size one.
75
75
  <% if is_float %>
76
76
  @param [TrueClass] nan (keyword) If true, apply NaN-aware algorithm (avoid NaN if exists).
@@ -21,27 +21,38 @@ static void
21
21
  <% end;end %>
22
22
 
23
23
  /*
24
- <%=name%>. Return an index of result.
24
+ Index of the <%=name[0..2]%>imum value.
25
25
  <% if is_float %>
26
26
  @overload <%=name%>(axis:nil, nan:false)
27
27
  @param [TrueClass] nan If true, apply NaN-aware algorithm (return NaN posision if exist).
28
28
  <% else %>
29
29
  @overload <%=name%>(axis:nil)
30
30
  <% end %>
31
- @param [Numeric,Array,Range] axis Affected dimensions.
32
- @return [Integer,Numo::Int] returns result index of <%=name%>.
31
+ @param [Numeric,Array,Range] axis Finds <%=name[0..2]%>imum values along the axis and returns **flat 1-d indices**.
32
+ @return [Integer,Numo::Int] returns result indices.
33
+ @see #arg<%=name[0..2]%>
34
+ @see #<%=name[0..2]%>
35
+
33
36
  @example
34
- <% if name == 'min_index' %>
35
- Numo::NArray[3,4,1,2].min_index => 2
36
- Numo::NArray[[3,4,1],[2,0,5]].min_index => 4
37
- Numo::NArray[[3,4,1],[2,0,5]].min_index(axis: 1) => [2, 4]
38
- Numo::NArray[[3,4,1],[2,0,5]].min_index(axis: 0) => [3, 4, 2]
39
- <% else %>
40
- Numo::NArray[3,4,1,2].max_index => 1
41
- Numo::NArray[[3,4,1],[2,0,5]].max_index => 5
42
- Numo::NArray[[3,4,1],[2,0,5]].max_index(axis: 1) => [1, 5]
43
- Numo::NArray[[3,4,1],[2,0,5]].max_index(axis: 0) => [0, 1, 5]
44
- <% end %>
37
+ <% case name; when /min/ %>
38
+ a = Numo::NArray[3,4,1,2]
39
+ a.min_index #=> 2
40
+
41
+ b = Numo::NArray[[3,4,1],[2,0,5]]
42
+ b.min_index #=> 4
43
+ b.min_index(axis:1) #=> [2, 4]
44
+ b.min_index(axis:0) #=> [3, 4, 2]
45
+ b[b.min_index(axis:0)] #=> [2, 0, 1]
46
+ <% when /max/ %>
47
+ a = Numo::NArray[3,4,1,2]
48
+ a.max_index #=> 1
49
+
50
+ b = Numo::NArray[[3,4,1],[2,0,5]]
51
+ b.max_index #=> 5
52
+ b.max_index(axis:1) #=> [1, 5]
53
+ b.max_index(axis:0) #=> [0, 1, 5]
54
+ b[b.max_index(axis:0)] #=> [3, 4, 5]
55
+ <% end %>
45
56
  */
46
57
  static VALUE
47
58
  <%=c_func(-1)%>(int argc, VALUE *argv, VALUE self)
@@ -29,7 +29,9 @@ static void
29
29
  assert(na->base.type == NARRAY_DATA_T);
30
30
 
31
31
  if (na->ptr != NULL) {
32
- xfree(na->ptr);
32
+ if (na->owned) {
33
+ xfree(na->ptr);
34
+ }
33
35
  na->ptr = NULL;
34
36
  }
35
37
  if (na->base.size > 0) {
@@ -103,5 +105,6 @@ static VALUE
103
105
  na->base.shape = NULL;
104
106
  na->base.reduce = INT2FIX(0);
105
107
  na->ptr = NULL;
108
+ na->owned = FALSE;
106
109
  return TypedData_Wrap_Struct(klass, &<%=type_name%>_data_type, (void*)na);
107
110
  }
@@ -20,6 +20,7 @@ static VALUE
20
20
  }
21
21
  <% end %>
22
22
  NA_DATA_PTR(na) = ptr;
23
+ NA_DATA_OWNED(na) = TRUE;
23
24
  }
24
25
  break;
25
26
  case NARRAY_VIEW_T:
@@ -1,40 +1,10 @@
1
1
  /*
2
- Array element referenece or slice view.
2
+ Multi-dimensional element reference.
3
3
  @overload [](dim0,...,dimL)
4
- @param [Numeric,Range,etc] dim0,...,dimL Multi-dimensional Index.
5
- @return [Numeric,NArray::<%=class_name%>] Element object or NArray view.
6
-
7
- --- Returns the element at +dim0+, +dim1+, ... are Numeric indices
8
- for each dimension, or returns a NArray View as a sliced subarray if
9
- +dim0+, +dim1+, ... includes other than Numeric index, e.g., Range
10
- or Array or true.
11
-
12
- @example
13
- a = Numo::DFloat.new(4,5).seq
14
- => Numo::DFloat#shape=[4,5]
15
- [[0, 1, 2, 3, 4],
16
- [5, 6, 7, 8, 9],
17
- [10, 11, 12, 13, 14],
18
- [15, 16, 17, 18, 19]]
19
-
20
- a[1,1]
21
- => 6.0
22
-
23
- a[1..3,1]
24
- => Numo::DFloat#shape=[3]
25
- [6, 11, 16]
26
-
27
- a[1,[1,3,4]]
28
- => Numo::DFloat#shape=[3]
29
- [6, 8, 9]
30
-
31
- a[true,2].fill(99)
32
- a
33
- => Numo::DFloat#shape=[4,5]
34
- [[0, 1, 99, 3, 4],
35
- [5, 6, 99, 8, 9],
36
- [10, 11, 99, 13, 14],
37
- [15, 16, 99, 18, 19]]
4
+ @param [Numeric,Range,Array,Numo::Int32,Numo::Int64,Numo::Bit,TrueClass,FalseClass,Symbol] dim0,...,dimL multi-dimensional indices.
5
+ @return [Numeric,Numo::<%=class_name%>] an element or NArray view.
6
+ @see Numo::NArray#[]
7
+ @see #[]=
38
8
  */
39
9
  static VALUE
40
10
  <%=c_func(-1)%>(int argc, VALUE *argv, VALUE self)