numo-narray 0.9.0.1-x86-mingw32 → 0.9.0.3-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -7
  3. data/Rakefile +21 -6
  4. data/ext/numo/narray/array.c +3 -3
  5. data/ext/numo/narray/data.c +102 -81
  6. data/ext/numo/narray/depend.erb +9 -7
  7. data/ext/numo/narray/extconf.rb +5 -24
  8. data/ext/numo/narray/gen/cogen.rb +19 -4
  9. data/ext/numo/narray/gen/def/bit.rb +31 -0
  10. data/ext/numo/narray/gen/def/robject.rb +1 -1
  11. data/ext/numo/narray/gen/dtype.erb.c +11 -257
  12. data/ext/numo/narray/gen/spec.rb +294 -0
  13. data/ext/numo/narray/gen/tmpl/aset.c +1 -1
  14. data/ext/numo/narray/gen/tmpl/each_with_index.c +1 -1
  15. data/ext/numo/narray/gen/tmpl/eye.c +5 -5
  16. data/ext/numo/narray/gen/tmpl/logseq.c +82 -0
  17. data/ext/numo/narray/gen/tmpl/map_with_index.c +1 -1
  18. data/ext/numo/narray/gen/tmpl/rand.c +126 -5
  19. data/ext/numo/narray/gen/tmpl/seq.c +43 -12
  20. data/ext/numo/narray/gen/tmpl/store_bit.c +55 -0
  21. data/ext/numo/narray/gen/tmpl_bit/allocate.c +28 -0
  22. data/ext/numo/narray/gen/tmpl_bit/aref.c +53 -0
  23. data/ext/numo/narray/gen/tmpl_bit/aset.c +63 -0
  24. data/ext/numo/narray/gen/{tmpl/bit_binary.c → tmpl_bit/binary.c} +1 -1
  25. data/ext/numo/narray/gen/{tmpl → tmpl_bit}/bit_count.c +5 -3
  26. data/ext/numo/narray/gen/tmpl_bit/bit_reduce.c +128 -0
  27. data/ext/numo/narray/gen/tmpl_bit/cast.c +37 -0
  28. data/ext/numo/narray/gen/tmpl_bit/cast_array.c +80 -0
  29. data/ext/numo/narray/gen/tmpl_bit/cast_numeric.c +22 -0
  30. data/ext/numo/narray/gen/tmpl_bit/coerce_cast.c +8 -0
  31. data/ext/numo/narray/gen/tmpl_bit/each.c +44 -0
  32. data/ext/numo/narray/gen/tmpl_bit/each_with_index.c +66 -0
  33. data/ext/numo/narray/gen/tmpl_bit/extract.c +25 -0
  34. data/ext/numo/narray/gen/tmpl_bit/fill.c +65 -0
  35. data/ext/numo/narray/gen/tmpl_bit/format.c +61 -0
  36. data/ext/numo/narray/gen/tmpl_bit/format_to_a.c +48 -0
  37. data/ext/numo/narray/gen/tmpl_bit/inspect.c +18 -0
  38. data/ext/numo/narray/gen/tmpl_bit/map_with_index.c +94 -0
  39. data/ext/numo/narray/gen/tmpl_bit/mask.c +117 -0
  40. data/ext/numo/narray/gen/tmpl_bit/none_p.c +14 -0
  41. data/ext/numo/narray/gen/tmpl_bit/store.c +32 -0
  42. data/ext/numo/narray/gen/tmpl_bit/store_array.c +5 -0
  43. data/ext/numo/narray/gen/tmpl_bit/store_bit.c +66 -0
  44. data/ext/numo/narray/gen/tmpl_bit/store_from.c +56 -0
  45. data/ext/numo/narray/gen/tmpl_bit/store_numeric.c +22 -0
  46. data/ext/numo/narray/gen/tmpl_bit/to_a.c +43 -0
  47. data/ext/numo/narray/gen/{tmpl/bit_unary.c → tmpl_bit/unary.c} +1 -1
  48. data/ext/numo/narray/gen/tmpl_bit/where.c +102 -0
  49. data/ext/numo/narray/gen/tmpl_bit/where2.c +37 -0
  50. data/ext/numo/narray/index.c +9 -7
  51. data/ext/numo/narray/math.c +6 -1
  52. data/ext/numo/narray/narray.c +307 -103
  53. data/ext/numo/narray/ndloop.c +21 -36
  54. data/ext/numo/narray/numo/intern.h +3 -3
  55. data/ext/numo/narray/numo/narray.h +5 -41
  56. data/ext/numo/narray/numo/template.h +2 -2
  57. data/ext/numo/narray/numo/types/bit.h +27 -13
  58. data/ext/numo/narray/numo/types/complex.h +2 -2
  59. data/ext/numo/narray/numo/types/complex_macro.h +19 -7
  60. data/ext/numo/narray/numo/types/dcomplex.h +9 -0
  61. data/ext/numo/narray/numo/types/dfloat.h +6 -0
  62. data/ext/numo/narray/numo/types/float_macro.h +9 -2
  63. data/ext/numo/narray/numo/types/int16.h +0 -1
  64. data/ext/numo/narray/numo/types/int32.h +0 -1
  65. data/ext/numo/narray/numo/types/int64.h +0 -1
  66. data/ext/numo/narray/numo/types/int8.h +0 -1
  67. data/ext/numo/narray/numo/types/int_macro.h +2 -1
  68. data/ext/numo/narray/numo/types/robj_macro.h +9 -2
  69. data/ext/numo/narray/numo/types/robject.h +6 -0
  70. data/ext/numo/narray/numo/types/scomplex.h +9 -0
  71. data/ext/numo/narray/numo/types/sfloat.h +6 -0
  72. data/ext/numo/narray/numo/types/uint16.h +0 -1
  73. data/ext/numo/narray/numo/types/uint32.h +0 -1
  74. data/ext/numo/narray/numo/types/uint64.h +0 -1
  75. data/ext/numo/narray/numo/types/uint8.h +0 -1
  76. data/ext/numo/narray/numo/types/uint_macro.h +2 -1
  77. data/ext/numo/narray/numo/types/xint_macro.h +6 -1
  78. data/ext/numo/narray/rand.c +2 -2
  79. data/ext/numo/narray/step.c +7 -7
  80. data/ext/numo/narray/struct.c +11 -12
  81. data/lib/2.0/numo/narray.so +0 -0
  82. data/lib/2.1/numo/narray.so +0 -0
  83. data/lib/2.2/numo/narray.so +0 -0
  84. data/lib/2.3/numo/narray.so +0 -0
  85. data/lib/2.4/numo/narray.so +0 -0
  86. data/lib/erbpp.rb +6 -2
  87. data/lib/erbpp/line_number.rb +1 -1
  88. data/lib/erbpp/narray_def.rb +23 -19
  89. data/numo-narray.gemspec +2 -2
  90. metadata +45 -10
  91. data/ext/numo/narray/gen/bit.erb.c +0 -811
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: afa2563cf5a6d4f756025e0b51536bf83c2a3fd7
4
- data.tar.gz: eab5d7f761a567782e29e97420aa56c3eb142bf4
3
+ metadata.gz: 3331384de76daf73952eae370c51f1c6ee498ea9
4
+ data.tar.gz: dbd02ec55db5363c9a10f2a6e9c42a78ce7419e7
5
5
  SHA512:
6
- metadata.gz: 080bb8d44b7e906dd17588a2e87f2f4935b43426bb87af47c721904ef8ee0f3177247bd175878d0db85c5cb99a579bbd6244a1de0aad9d5fa71c1a2e8d27701e
7
- data.tar.gz: d9e84f080188fa0da98a38dd61fd5af4e184b7530d77a087ca66ff2a15c16e43b354de0f9c721321c6ea6ae75dec0e5c34dca190e8bcd9b09ab8ad3148577849
6
+ metadata.gz: 52b592fc14e98fe7e7477a33c48f79204a435b8498d12578b9478ee4534f39b06b8bab4feda2a459e89b6a346333bb044cf783fc442886db81ebf89852d49c21
7
+ data.tar.gz: 717c1955ce5e93295c553b0d84ee5e6aa84622b13e968882113db6d259332f7633726bc4116ab98b6cce77b857fe61009003fd8c2594a86db4a3616b9d37b0a6
data/README.md CHANGED
@@ -1,13 +1,15 @@
1
1
  # Numo::NArray - New NArray class library for Ruby/Numo (NUmerical MOdule)
2
2
 
3
+ [![Binder](http://mybinder.org/badge.svg)](http://mybinder.org/repo/ruby-numo/narray)
3
4
  [![Build Status](https://travis-ci.org/ruby-numo/narray.svg?branch=master)](https://travis-ci.org/ruby-numo/narray)
4
5
 
5
6
  under development
6
7
 
7
8
  ## Related Projects
8
- * [Numo::Linalg](https://github.com/ruby-numo/linalg): Linear Algebra library with [LAPACK](http://www.netlib.org/lapack/).
9
- * [Numo::GSL](https://github.com/ruby-numo/gsl): Ruby interface for [GSL (GNU Scientific Library)](http://www.gnu.org/software/gsl/).
10
- * [Numo::FFTE](https://github.com/ruby-numo/ffte): Ruby interface for [FFTE (A Fast Fourier Transform library with radix-2,3,5)](http://www.ffte.jp/).
9
+ * [Numo::Linalg](https://github.com/ruby-numo/linalg) - Linear Algebra library with [LAPACK](http://www.netlib.org/lapack/).
10
+ * [Numo::GSL](https://github.com/ruby-numo/gsl) - Ruby interface for [GSL (GNU Scientific Library)](http://www.gnu.org/software/gsl/).
11
+ * [Numo::FFTE](https://github.com/ruby-numo/ffte) - Ruby interface for [FFTE (A Fast Fourier Transform library with radix-2,3,5)](http://www.ffte.jp/).
12
+ * [Numo::Gnuplot](https://github.com/ruby-numo/gnuplot) - Simple and easy-to-use Gnuplot interface.
11
13
 
12
14
  ## Installation
13
15
  ### Ubuntu, Debian
@@ -16,7 +18,7 @@ apt install -y git ruby gcc ruby-dev rake make
16
18
  git clone git://github.com/ruby-numo/narray
17
19
  cd narray
18
20
  gem build numo-narray.gemspec
19
- gem install numo-narray-0.9.0.1.gem
21
+ gem install numo-narray-0.9.0.2.gem
20
22
  ```
21
23
 
22
24
  ## Quick start
@@ -40,8 +42,10 @@ An example
40
42
  ```
41
43
  For more examples, check out this [narray version of 100 numpy exercises](https://github.com/ruby-numo/narray/wiki/100-narray-exercises).
42
44
 
43
- ## numo-array status compared to numpy
45
+ ## Documentation
44
46
 
45
- https://github.com/ruby-numo/narray/wiki/Numo-vs-numpy
47
+ All documents are primitive.
46
48
 
47
- ## [NArray Tentative API Document](http://ruby-numo.github.io/narray/narray/frames.html)
49
+ * [Numo::NArray API Doc](http://ruby-numo.github.io/narray/narray/frames.html)
50
+ * [Numo::NArray概要](https://github.com/ruby-numo/narray/wiki/Numo::NArray%E6%A6%82%E8%A6%81) (in Japanese)
51
+ * [Numo::NArray vs numpy](https://github.com/ruby-numo/narray/wiki/Numo-vs-numpy)
data/Rakefile CHANGED
@@ -1,23 +1,27 @@
1
1
  require "bundler/gem_tasks"
2
+ begin
2
3
  require "rake/extensiontask"
3
4
  require "rake_compiler_dock"
4
5
  require "shellwords"
5
6
 
6
7
  spec = Bundler::GemHelper.gemspec
7
8
 
9
+ cross_platforms = ["x86-mingw32", "x64-mingw32"]
8
10
  Rake::ExtensionTask.new("numo/narray", spec) do |ext|
9
11
  ext.cross_compile = true
10
- ext.cross_platform = ["x86-mingw32", "x64-mingw32"]
12
+ ext.cross_platform = cross_platforms
13
+ end
14
+
15
+ pkg_dir = "pkg"
16
+ windows_gem_paths = cross_platforms.collect do |platform|
17
+ File.join(pkg_dir, "#{spec.full_name}-#{platform}.gem")
11
18
  end
12
19
 
13
20
  namespace :build do
14
- pkg_dir = "pkg"
15
21
  directory pkg_dir
16
22
 
17
- desc "Build gems for Windows"
23
+ desc "Build gems for Windows into the pkg directory"
18
24
  task :windows => pkg_dir do
19
- ruby_versions = "2.1.6:2.2.2:2.3.0"
20
-
21
25
  build_dir = "tmp/windows"
22
26
  rm_rf build_dir
23
27
  mkdir_p build_dir
@@ -26,7 +30,7 @@ namespace :build do
26
30
  ["git", "clone", "file://#{Dir.pwd}/.git", build_dir],
27
31
  ["cd", build_dir],
28
32
  ["bundle"],
29
- ["rake", "cross", "native", "gem", "RUBY_CC_VERSION=#{ruby_versions}"],
33
+ ["rake", "cross", "native", "gem"],
30
34
  ]
31
35
  raw_commands = commands.collect do |command|
32
36
  Shellwords.join(command)
@@ -39,3 +43,14 @@ namespace :build do
39
43
  "#{pkg_dir}/")
40
44
  end
41
45
  end
46
+
47
+ namespace :release do
48
+ task :windows => "build:windows" do
49
+ windows_gem_paths.each do |path|
50
+ ruby("-S", "gem", "push", path)
51
+ end
52
+ end
53
+ end
54
+
55
+ rescue LoadError
56
+ end
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  array.c
3
3
  Numerical Array Extension for Ruby
4
- (C) Copyright 1999-2011 by Masahiro TANAKA
4
+ (C) Copyright 1999-2016 by Masahiro TANAKA
5
5
 
6
6
  This program is free software.
7
7
  You can distribute/modify this program
@@ -268,7 +268,7 @@ na_mdai_result(na_mdai_t *mdai, na_compose_t *nc)
268
268
  for (i=0; i<ndim; i++) {
269
269
  shape[i] = mdai->item[i].shape;
270
270
  //printf("shape[%d]=%d\n",i,shape[i]);
271
- //rb_ary_push( shape, SIZE2NUM(mdai->item[i].shape) );
271
+ //rb_ary_push( shape, SIZET2NUM(mdai->item[i].shape) );
272
272
  }
273
273
 
274
274
  // DataType
@@ -355,7 +355,7 @@ na_s_array_shape(VALUE mod, VALUE ary)
355
355
  Data_Get_Struct(vnc, na_compose_t, nc);
356
356
  shape = rb_ary_new2(nc->ndim);
357
357
  for (i=0; i<nc->ndim; i++) {
358
- rb_ary_push( shape, SIZE2NUM(nc->shape[i]) );
358
+ rb_ary_push( shape, SIZET2NUM(nc->shape[i]) );
359
359
  }
360
360
  return shape;
361
361
  }
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  data.c
3
3
  Numerical Array Extension for Ruby
4
- (C) Copyright 1999-2011,2013 by Masahiro TANAKA
4
+ (C) Copyright 1999-2016 by Masahiro TANAKA
5
5
 
6
6
  This program is free software.
7
7
  You can distribute/modify this program
@@ -76,7 +76,6 @@ na_copy(VALUE self)
76
76
  return v;
77
77
  }
78
78
 
79
-
80
79
  VALUE
81
80
  na_store(VALUE self, VALUE src)
82
81
  {
@@ -198,65 +197,72 @@ na_transpose_map(VALUE self, int *map)
198
197
  VALUE
199
198
  na_transpose(int argc, VALUE *argv, VALUE self)
200
199
  {
201
- int ndim, *map, tmp;
202
- int row_major;
203
- int i, j, c, r;
204
- size_t len;
205
- ssize_t beg, step;
206
- volatile VALUE v, view;
200
+ int ndim, *map, *permute;
201
+ int i, d;
202
+ bool is_positive, is_negative;
207
203
  narray_t *na1;
208
204
 
209
205
  GetNArray(self,na1);
210
206
  ndim = na1->ndim;
211
- row_major = TEST_COLUMN_MAJOR( self );
212
-
207
+ if (ndim < 2) {
208
+ if (argc > 0) {
209
+ rb_raise(rb_eArgError, "unnecessary argument for 1-d array");
210
+ }
211
+ return na_make_view(self);
212
+ }
213
213
  map = ALLOCA_N(int,ndim);
214
- for (i=0;i<ndim;i++) {
215
- map[i] = i;
216
- }
217
- if (argc==0) {
218
- SWAP(map[ndim-1], map[ndim-2], tmp);
219
- goto new_object;
220
- }
221
- if (argc==2) {
222
- if (TYPE(argv[0])==T_FIXNUM && TYPE(argv[1])==T_FIXNUM) {
223
- i = FIX2INT(argv[0]);
224
- j = FIX2INT(argv[1]);
225
- if (row_major) {
226
- i = ndim-1-i;
227
- j = ndim-1-j;
228
- }
229
- SWAP( map[i], map[j], tmp );
230
- goto new_object;
231
- }
214
+ if (argc == 0) {
215
+ for (i=0; i < ndim; i++) {
216
+ map[i] = ndim-1-i;
217
+ }
218
+ return na_transpose_map(self,map);
232
219
  }
233
- for (i=argc,c=ndim-1; i;) {
234
- v = argv[--i];
235
- if (TYPE(v)==T_FIXNUM) {
236
- beg = FIX2INT(v);
237
- len = 1;
238
- step = 0;
239
- } else if (rb_obj_is_kind_of(v,rb_cRange) || rb_obj_is_kind_of(v,na_cStep)) {
240
- // write me
241
- nary_step_array_index(v, ndim, &len, &beg, &step);
242
- //printf("len=%d beg=%d step=%d\n",len,beg,step);
243
- }
244
- for (j=len; j; ) {
245
- r = beg + step*(--j);
246
- if (row_major) {
247
- r = ndim-1-r;
220
+ // with argument
221
+ if (argc > ndim) {
222
+ rb_raise(rb_eArgError, "more arguments than ndim");
223
+ }
224
+ for (i=0; i < ndim; i++) {
225
+ map[i] = i;
226
+ }
227
+ permute = ALLOCA_N(int,argc);
228
+ for (i=0; i < argc; i++) {
229
+ permute[i] = 0;
230
+ }
231
+ is_positive = is_negative = 0;
232
+ for (i=0; i < argc; i++) {
233
+ if (TYPE(argv[i]) != T_FIXNUM) {
234
+ rb_raise(rb_eArgError, "invalid argument");
235
+ }
236
+ d = FIX2INT(argv[i]);
237
+ if (d >= 0) {
238
+ if (d >= argc) {
239
+ rb_raise(rb_eArgError, "out of dimension range");
248
240
  }
249
- if ( c < 0 ) {
250
- rb_raise(rb_eArgError, "too many dims");
241
+ if (is_negative) {
242
+ rb_raise(rb_eArgError, "dimension must be non-negative only or negative only");
251
243
  }
252
- map[c--] = r;
253
- //printf("r=%d\n",r);
254
- }
244
+ if (permute[d]) {
245
+ rb_raise(rb_eArgError, "not permutation");
246
+ }
247
+ map[i] = d;
248
+ permute[d] = 1;
249
+ is_positive = 1;
250
+ } else {
251
+ if (d < -argc) {
252
+ rb_raise(rb_eArgError, "out of dimension range");
253
+ }
254
+ if (is_positive) {
255
+ rb_raise(rb_eArgError, "dimension must be non-negative only or negative only");
256
+ }
257
+ if (permute[argc+d]) {
258
+ rb_raise(rb_eArgError, "not permutation");
259
+ }
260
+ map[ndim-argc+i] = ndim+d;
261
+ permute[argc+d] = 1;
262
+ is_negative = 1;
263
+ }
255
264
  }
256
-
257
- new_object:
258
- view = na_transpose_map(self,map);
259
- return view;
265
+ return na_transpose_map(self,map);
260
266
  }
261
267
 
262
268
  //----------------------------------------------------------------------
@@ -304,7 +310,7 @@ na_reshape(int argc, VALUE *argv, VALUE self)
304
310
  rb_raise(rb_eArgError, "Total size must be same");
305
311
  }
306
312
 
307
- copy = na_copy(self);
313
+ copy = rb_funcall(self,rb_intern("copy"),0);
308
314
  GetNArray(copy,na);
309
315
  //shape_save = NA_SHAPE(na);
310
316
  na_setup_shape(na,argc,shape);
@@ -592,7 +598,7 @@ na_diagonal(int argc, VALUE *argv, VALUE self)
592
598
  }
593
599
 
594
600
  if (vofs) {
595
- kofs = NUM2SSIZE(vofs);
601
+ kofs = NUM2SSIZET(vofs);
596
602
  } else {
597
603
  kofs = 0;
598
604
  }
@@ -627,15 +633,15 @@ na_diagonal(int argc, VALUE *argv, VALUE self)
627
633
  k0 = 0;
628
634
  k1 = kofs;
629
635
  if (k1 >= na->shape[ax[1]]) {
630
- rb_raise(rb_eArgError,"invalid diagonal offset(%ld) for "
631
- "last dimension size(%ld)",kofs,na->shape[ax[1]]);
636
+ rb_raise(rb_eArgError,"invalid diagonal offset(%"SZF"d) for "
637
+ "last dimension size(%"SZF"d)",kofs,na->shape[ax[1]]);
632
638
  }
633
639
  } else {
634
640
  k0 = -kofs;
635
641
  k1 = 0;
636
642
  if (k0 >= na->shape[ax[0]]) {
637
- rb_raise(rb_eArgError,"invalid diagonal offset(=%ld) for "
638
- "last-1 dimension size(%ld)",kofs,na->shape[ax[0]]);
643
+ rb_raise(rb_eArgError,"invalid diagonal offset(=%"SZF"d) for "
644
+ "last-1 dimension size(%"SZF"d)",kofs,na->shape[ax[0]]);
639
645
  }
640
646
  }
641
647
 
@@ -749,7 +755,7 @@ na_diagonal(int argc, VALUE *argv, VALUE self)
749
755
  static VALUE
750
756
  na_new_dimension_for_dot(VALUE self, int pos, int len, bool transpose)
751
757
  {
752
- int i, k, nd;
758
+ int i, k, l, nd;
753
759
  size_t j;
754
760
  size_t *idx1, *idx2;
755
761
  size_t *shape;
@@ -775,27 +781,25 @@ na_new_dimension_for_dot(VALUE self, int pos, int len, bool transpose)
775
781
  }
776
782
  nd += len;
777
783
  shape = ALLOCA_N(size_t,nd);
778
- i = k = 0;
779
- while (i < nd) {
780
- if (i == pos) {
781
- for (; len; len--) {
782
- shape[i++] = 1;
783
- }
784
- pos = -1; // new axis done
785
- } else {
786
- shape[i++] = na->shape[k++];
787
- }
788
- }
789
-
790
- na_setup_shape((narray_t*)na2, nd, shape);
791
784
  na2->stridx = ALLOC_N(stridx_t,nd);
792
785
 
793
786
  switch(na->type) {
794
787
  case NARRAY_DATA_T:
795
788
  case NARRAY_FILEMAP_T:
789
+ i = k = 0;
790
+ while (i < nd) {
791
+ if (i == pos && len > 0) {
792
+ for (l=0; l<len; l++) {
793
+ shape[i++] = 1;
794
+ }
795
+ } else {
796
+ shape[i++] = na->shape[k++];
797
+ }
798
+ }
799
+ na_setup_shape((narray_t*)na2, nd, shape);
796
800
  stride = na_get_elmsz(self);
797
801
  for (i=nd; i--;) {
798
- SDX_SET_STRIDE(na2->stridx[i],stride);
802
+ SDX_SET_STRIDE(na2->stridx[i], stride);
799
803
  stride *= shape[i];
800
804
  }
801
805
  na2->offset = 0;
@@ -803,18 +807,35 @@ na_new_dimension_for_dot(VALUE self, int pos, int len, bool transpose)
803
807
  break;
804
808
  case NARRAY_VIEW_T:
805
809
  GetNArrayView(self, na1);
806
- for (i=0; i<nd; i++) {
807
- if (SDX_IS_INDEX(na1->stridx[i])) {
808
- idx1 = SDX_GET_INDEX(na1->stridx[i]);
809
- idx2 = ALLOC_N(size_t,na1->base.shape[i]);
810
- for (j=0; j<na1->base.shape[i]; j++) {
811
- idx2[j] = idx1[j];
810
+ i = k = 0;
811
+ while (i < nd) {
812
+ if (i == pos && len > 0) {
813
+ if (SDX_IS_INDEX(na1->stridx[k])) {
814
+ stride = SDX_GET_INDEX(na1->stridx[k])[0];
815
+ } else {
816
+ stride = SDX_GET_STRIDE(na1->stridx[k]);
817
+ }
818
+ for (l=0; l<len; l++) {
819
+ shape[i] = 1;
820
+ SDX_SET_STRIDE(na2->stridx[i], stride);
821
+ i++;
812
822
  }
813
- SDX_SET_INDEX(na2->stridx[i],idx2);
814
823
  } else {
815
- na2->stridx[i] = na1->stridx[i];
824
+ shape[i] = na1->base.shape[k];
825
+ if (SDX_IS_INDEX(na1->stridx[k])) {
826
+ idx1 = SDX_GET_INDEX(na1->stridx[k]);
827
+ idx2 = ALLOC_N(size_t,na1->base.shape[k]);
828
+ for (j=0; j<na1->base.shape[k]; j++) {
829
+ idx2[j] = idx1[j];
830
+ }
831
+ SDX_SET_INDEX(na2->stridx[i], idx2);
832
+ } else {
833
+ na2->stridx[i] = na1->stridx[k];
834
+ }
835
+ i++; k++;
816
836
  }
817
837
  }
838
+ na_setup_shape((narray_t*)na2, nd, shape);
818
839
  na2->offset = na1->offset;
819
840
  na2->data = na1->data;
820
841
  break;
@@ -17,17 +17,19 @@ C_TMPL = <%=Dir.glob("#{__dir__}/gen/tmpl/*.c").join(" ")%>
17
17
 
18
18
  COGEN = <%= __dir__ %>/gen/cogen.rb
19
19
  DTYPE = <%= __dir__ %>/gen/dtype.erb.c
20
- COGEN_DTYPE = $(COGEN) -l $(DTYPE)
21
20
  DEPENDS = $(C_TMPL) $(DTYPE) <%= __dir__ %>/gen/*.rb
22
21
 
23
- <% Dir.glob("#{__dir__}/gen/def/*.rb") do |s| %>
24
- types/<%=File.basename(s,".rb")%>.c: <%=s%> $(DEPENDS)
22
+ <%
23
+ type_c = ["types/bit.c"]
24
+ type_rb = Dir.glob("#{__dir__}/gen/def/*.rb")
25
+ type_rb.each do |s|
26
+ type_c << c = "types/"+File.basename(s,".rb")+".c"
27
+ %>
28
+ <%=c%>: <%=s%> $(DEPENDS)
25
29
  $(MAKEDIRS) $(@D) types
26
- ruby $(COGEN_DTYPE) <%=s%> > $@
30
+ ruby $(COGEN) -l -o $@ $(DTYPE) <%=s%>
27
31
  <% end %>
28
32
 
29
- types/bit.c: <%= __dir__ %>/gen/bit.erb.c $(DEPENDS)
30
- $(MAKEDIRS) $(@D) types
31
- ruby $(COGEN) -l <%= __dir__ %>/gen/bit.erb.c > $@
33
+ src : <%= type_c.join(" ") %>
32
34
 
33
35
  CLEANOBJS = *.o */*.o *.bak types/*.c
@@ -1,9 +1,5 @@
1
1
  require 'rbconfig.rb'
2
-
3
- #RbConfig::MAKEFILE_CONFIG["optflags"] = "-g3 -gdwarf-2"
4
-
5
2
  require 'mkmf'
6
-
7
3
  require "erb"
8
4
 
9
5
  if RUBY_VERSION < "2.0.0"
@@ -11,12 +7,15 @@ if RUBY_VERSION < "2.0.0"
11
7
  exit(1)
12
8
  end
13
9
 
10
+ rm_f 'numo/extconf.h'
11
+
14
12
  #$CFLAGS="-g3 -O0 -Wall"
15
13
  #$CFLAGS=" $(cflags) -O3 -m64 -msse2 -funroll-loops"
16
14
  #$CFLAGS=" $(cflags) -O3"
17
15
  $INCFLAGS = "-Itypes #$INCFLAGS"
18
16
 
19
17
  $INSTALLFILES = Dir.glob(%w[numo/*.h numo/types/*.h]).map{|x| [x,'$(archdir)'] }
18
+ $INSTALLFILES << ['numo/extconf.h','$(archdir)']
20
19
  if /cygwin|mingw/ =~ RUBY_PLATFORM
21
20
  $INSTALLFILES << ['libnarray.a', '$(archdir)']
22
21
  end
@@ -48,20 +47,6 @@ struct
48
47
  rand
49
48
  )
50
49
 
51
- =begin
52
- have_header("atlas/cblas.h")
53
- have_library("atlas")
54
-
55
- if have_library("blas")
56
- if have_library("lapack")
57
- srcs.push "linalg"
58
- $defs.push "-DHAVE_LAPACK"
59
- else
60
- #$defs.delete "-DHAVE_LAPACK"
61
- end
62
- end
63
- =end
64
-
65
50
  if have_header("stdbool.h")
66
51
  stdbool = "stdbool.h"
67
52
  else
@@ -91,18 +76,14 @@ have_type("int64_t", stdint)
91
76
  unless have_type("u_int64_t", stdint)
92
77
  have_type("uint64_t", stdint)
93
78
  end
94
- #have_library("m")
95
- #have_func("sincos")
96
- #have_func("asinh")
97
79
  have_func("exp10")
98
80
 
99
81
  have_var("rb_cComplex")
100
- #have_func("rb_alloc_tmp_buffer", "ruby.h")
101
- #have_func("rb_free_tmp_buffer", "ruby.h")
82
+ have_var("rb_cFixnum")
102
83
 
103
84
  $objs = srcs.collect{|i| i+".o"}
104
85
 
105
- create_header
86
+ create_header('numo/extconf.h')
106
87
 
107
88
  depend_path = File.join(__dir__, "depend")
108
89
  File.open(depend_path, "w") do |depend|