narray 0.5.9.4 → 0.5.9.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. data/src/ChangeLog +29 -0
  2. data/src/MANIFEST +7 -36
  3. data/src/README.en +1 -5
  4. data/src/README.ja +1 -2
  5. data/src/SPEC.en +15 -8
  6. data/src/SPEC.ja +5 -2
  7. data/src/bench/all.rb +88 -0
  8. data/src/bench/bench.m +61 -0
  9. data/src/bench/bench.py +89 -0
  10. data/src/bench/bench.rb +59 -0
  11. data/src/bench/dummy.m +0 -0
  12. data/src/bench/dummy.py +13 -0
  13. data/src/bench/dummy.rb +0 -0
  14. data/src/lib/narray_ext.rb +36 -2
  15. data/src/mkmath.rb +4 -4
  16. data/src/mkop.rb +16 -16
  17. data/src/na_array.c +32 -32
  18. data/src/na_func.c +50 -50
  19. data/src/na_index.c +26 -32
  20. data/src/na_linalg.c +23 -26
  21. data/src/na_random.c +15 -18
  22. data/src/narray.c +22 -32
  23. data/src/narray.h +3 -3
  24. data/src/narray_local.h +1 -1
  25. metadata +10 -39
  26. data/src/nimage/README.en +0 -38
  27. data/src/nimage/demo/fits.rb +0 -97
  28. data/src/nimage/demo/fits_convol.rb +0 -28
  29. data/src/nimage/demo/fits_fftdemo.rb +0 -27
  30. data/src/nimage/demo/fitsdemo1.rb +0 -13
  31. data/src/nimage/demo/fitsdemo2.rb +0 -30
  32. data/src/nimage/demo/fitsdemo3.rb +0 -26
  33. data/src/nimage/demo/fitsmorph.rb +0 -39
  34. data/src/nimage/demo/life_na.rb +0 -57
  35. data/src/nimage/demo/mandel.rb +0 -41
  36. data/src/nimage/extconf.rb +0 -12
  37. data/src/nimage/lib/nimage.rb +0 -51
  38. data/src/nimage/nimage.c +0 -328
  39. data/src/speed/add.py +0 -12
  40. data/src/speed/add.rb +0 -8
  41. data/src/speed/add_int.py +0 -12
  42. data/src/speed/add_int.rb +0 -9
  43. data/src/speed/lu.m +0 -14
  44. data/src/speed/lu.rb +0 -22
  45. data/src/speed/mat.m +0 -23
  46. data/src/speed/mat.rb +0 -28
  47. data/src/speed/mul.py +0 -12
  48. data/src/speed/mul.rb +0 -9
  49. data/src/speed/mul2.py +0 -15
  50. data/src/speed/mul2.rb +0 -13
  51. data/src/speed/mul_comp.py +0 -12
  52. data/src/speed/mul_comp.rb +0 -9
  53. data/src/speed/mul_int.py +0 -12
  54. data/src/speed/mul_int.rb +0 -9
  55. data/src/speed/mybench.py +0 -15
  56. data/src/speed/mybench.rb +0 -31
  57. data/src/speed/solve.m +0 -18
  58. data/src/speed/solve.py +0 -16
  59. data/src/speed/solve.rb +0 -21
File without changes
@@ -0,0 +1,13 @@
1
+ import sys
2
+
3
+ MODULE = sys.argv[1]
4
+
5
+ if MODULE=="numeric":
6
+ from Numeric import *
7
+ from LinearAlgebra import *
8
+ elif MODULE=="numarray":
9
+ from numarray import *
10
+ from LinearAlgebra import *
11
+ elif MODULE=="numpy":
12
+ from numpy import *
13
+ from numpy.linalg import solve
File without changes
@@ -1,5 +1,5 @@
1
1
  # Numerical Array Extention for Ruby
2
- # (C) Copyright 2000-2003 by Masahiro TANAKA
2
+ # (C) Copyright 2000-2008 by Masahiro TANAKA
3
3
  #
4
4
  # This program is free software.
5
5
  # You can distribute/modify this program
@@ -71,7 +71,41 @@ class NArray
71
71
  end
72
72
  a = NArray.ref(a)
73
73
  n = rank_total(*ranks)
74
- NMath::sqrt( (( a-a.accum(*ranks).div!(n) )**2).sum(*ranks)/(n-1) )
74
+ if complex?
75
+ NMath::sqrt( (( a-a.accum(*ranks).div!(n) ).abs**2).sum(*ranks)/(n-1) )
76
+ else
77
+ NMath::sqrt( (( a-a.accum(*ranks).div!(n) )**2).sum(*ranks)/(n-1) )
78
+ end
79
+ end
80
+
81
+ def rms(*ranks)
82
+ if integer?
83
+ a = self.to_f
84
+ else
85
+ a = self
86
+ end
87
+ a = NArray.ref(a)
88
+ n = rank_total(*ranks)
89
+ if complex?
90
+ NMath::sqrt( (a.abs**2).sum(*ranks)/n )
91
+ else
92
+ NMath::sqrt( (a**2).sum(*ranks)/n )
93
+ end
94
+ end
95
+
96
+ def rmsdev(*ranks)
97
+ if integer?
98
+ a = self.to_f
99
+ else
100
+ a = self
101
+ end
102
+ a = NArray.ref(a)
103
+ n = rank_total(*ranks)
104
+ if complex?
105
+ NMath::sqrt( (( a-a.accum(*ranks).div!(n) ).abs**2).sum(*ranks)/n )
106
+ else
107
+ NMath::sqrt( (( a-a.accum(*ranks).div!(n) )**2).sum(*ranks)/n )
108
+ end
75
109
  end
76
110
 
77
111
  def median(rank=nil)
@@ -9,7 +9,7 @@ print <<EOM
9
9
  #{fname}
10
10
  Automatically generated code
11
11
  Numerical Array Extention for Ruby
12
- (C) Copyright 1999-2002 by Masahiro TANAKA
12
+ (C) Copyright 1999-2008 by Masahiro TANAKA
13
13
 
14
14
  This program is free software.
15
15
  You can distribute/modify this program
@@ -571,7 +571,7 @@ end
571
571
  $func_body =
572
572
  "static void #name#C(int n, char *p1, int i1, char *p2, int i2)
573
573
  {
574
- for (; n; n--) {
574
+ for (; n; --n) {
575
575
  OPERATION
576
576
  p1+=i1; p2+=i2;
577
577
  }
@@ -650,7 +650,7 @@ end
650
650
  $func_body =
651
651
  "static void #name#CC(int n, char *p1, int i1, char *p2, int i2, char *p3, int i3)
652
652
  {
653
- for (; n; n--) {
653
+ for (; n; --n) {
654
654
  OPERATION
655
655
  p1+=i1; p2+=i2; p3+=i3;
656
656
  }
@@ -658,7 +658,7 @@ $func_body =
658
658
  "
659
659
  mkpowfuncs('Pow',
660
660
  [
661
- [/[O]/,/[O]/, "*p1 = rb_funcall(*p1,na_id_power,1,*p2);"],
661
+ [/[O]/,/[O]/, "*p1 = rb_funcall(*p2,na_id_power,1,*p3);"],
662
662
  [/[BIL]/,/[BIL]/, "*p1 = powInt(*p2,*p3);"],
663
663
  [/[FD]/,/[BIL]/, "*p1 = pow#Ci(*p2,*p3);"],
664
664
  [/[BILFD]/,/[FD]/,"*p1 = pow(*p2,*p3);"],
@@ -10,7 +10,7 @@ print <<EOM
10
10
  #{fname}
11
11
  Automatically generated code
12
12
  Numerical Array Extention for Ruby
13
- (C) Copyright 1999-2003 by Masahiro TANAKA
13
+ (C) Copyright 1999-2008 by Masahiro TANAKA
14
14
 
15
15
  This program is free software.
16
16
  You can distribute/modify this program
@@ -80,7 +80,7 @@ data = [
80
80
  $func_body =
81
81
  "static void #name#CC(int n, char *p1, int i1, char *p2, int i2)
82
82
  {
83
- for (; n; n--) {
83
+ for (; n; --n) {
84
84
  OPERATION
85
85
  p1+=i1; p2+=i2;
86
86
  }
@@ -96,7 +96,7 @@ mksetfuncs('Set','','',data)
96
96
  $func_body =
97
97
  "static void #name#C(int n, char *p1, int i1, char *p2, int i2)
98
98
  {
99
- for (; n; n--) {
99
+ for (; n; --n) {
100
100
  OPERATION
101
101
  p1+=i1; p2+=i2;
102
102
  }
@@ -307,7 +307,7 @@ mksortfuncs('SortIdx', $data_types, $data_types, [nil] +
307
307
  $func_body =
308
308
  "static void #name#C(int n, char *p1, int i1, int p2, int i2)
309
309
  {
310
- for (; n; n--) {
310
+ for (; n; --n) {
311
311
  OPERATION
312
312
  p1+=i1; p2+=i2;
313
313
  }
@@ -332,36 +332,36 @@ $func_body =
332
332
  mkfuncs('ToStr',['']+[$data_types[8]]*8,$data_types,
333
333
  [nil] +
334
334
  ["char buf[22];
335
- for (; n; n--) {
335
+ for (; n; --n) {
336
336
  sprintf(buf,\"%i\",(int)*p2);
337
337
  *p1 = rb_str_new2(buf);
338
338
  p1+=i1; p2+=i2;
339
339
  }"]*3 +
340
340
  ["char buf[24];
341
- for (; n; n--) {
341
+ for (; n; --n) {
342
342
  sprintf(buf,\"%.5g\",(double)*p2);
343
343
  *p1 = rb_str_new2(buf);
344
344
  p1+=i1; p2+=i2;
345
345
  }"] +
346
346
  ["char buf[24];
347
- for (; n; n--) {
347
+ for (; n; --n) {
348
348
  sprintf(buf,\"%.8g\",(double)*p2);
349
349
  *p1 = rb_str_new2(buf);
350
350
  p1+=i1; p2+=i2;
351
351
  }"] +
352
352
  ["char buf[50];
353
- for (; n; n--) {
353
+ for (; n; --n) {
354
354
  sprintf(buf,\"%.5g%+.5gi\",(double)p2->r,(double)p2->i);
355
355
  *p1 = rb_str_new2(buf);
356
356
  p1+=i1; p2+=i2;
357
357
  }"] +
358
358
  ["char buf[50];
359
- for (; n; n--) {
359
+ for (; n; --n) {
360
360
  sprintf(buf,\"%.8g%+.8gi\",(double)p2->r,(double)p2->i);
361
361
  *p1 = rb_str_new2(buf);
362
362
  p1+=i1; p2+=i2;
363
363
  }"] +
364
- ["for (; n; n--) {
364
+ ["for (; n; --n) {
365
365
  *p1 = rb_obj_as_string(*p2);
366
366
  p1+=i1; p2+=i2;
367
367
  }"]
@@ -373,7 +373,7 @@ print <<EOM
373
373
  /* from numeric.c */
374
374
  static void na_str_append_fp(char *buf)
375
375
  {
376
- if (buf[0]=='-' || buf[0]=='+') buf++;
376
+ if (buf[0]=='-' || buf[0]=='+') ++buf;
377
377
  if (ISALPHA(buf[0])) return; /* NaN or Inf */
378
378
  if (strchr(buf, '.') == 0) {
379
379
  int len = strlen(buf);
@@ -441,11 +441,11 @@ $func_body =
441
441
  int i;
442
442
  if (i1==sizeof(type1) && i2==sizeof(type1) && i3==sizeof(type1)) {
443
443
  type1 *a1=p1, *a2=p2, *a3=p3;
444
- for (i=0; n; n--,i++) {
445
- *a1 = *a2 * *a3; a1++;a2++;a3++;
444
+ for (i=0; n; --n,++i) {
445
+ *a1 = *a2 * *a3; +++a1;++a2;++a3;
446
446
  }
447
447
  } else
448
- for (; n; n--) {
448
+ for (; n; --n) {
449
449
  OPERATION
450
450
  p1+=i1; p2+=i2; p3+=i3;
451
451
  }
@@ -460,7 +460,7 @@ mkfuncs('MulB', $data_types, $data_types,
460
460
  $func_body =
461
461
  "static void #name#C(int n, char *p1, int i1, char *p2, int i2, char *p3, int i3)
462
462
  {
463
- for (; n; n--) {
463
+ for (; n; --n) {
464
464
  OPERATION
465
465
  p1+=i1; p2+=i2; p3+=i3;
466
466
  }
@@ -620,7 +620,7 @@ mkfuncs('atan2', $data_types, $data_types,
620
620
  $func_body =
621
621
  "static void #name#C(int n, char *p1, int i1, char *p2, int i2, char *p3, int i3)
622
622
  {
623
- for (; n; n--) {
623
+ for (; n; --n) {
624
624
  OPERATION
625
625
  }
626
626
  }
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  na_array.c
3
3
  Numerical Array Extention for Ruby
4
- (C) Copyright 1999-2003 by Masahiro TANAKA
4
+ (C) Copyright 1999-2008 by Masahiro TANAKA
5
5
 
6
6
  This program is free software.
7
7
  You can distribute/modify this program
@@ -63,13 +63,13 @@ static na_mdai_t *
63
63
  mdai = ALLOC(na_mdai_t);
64
64
  mdai->n = n;
65
65
  mdai->item = ALLOC_N( na_mdai_item_t, n );
66
- for (i=0; i<n; i++) {
66
+ for (i=0; i<n; ++i) {
67
67
  mdai->item[i].shape = 0;
68
68
  mdai->item[i].val = Qnil;
69
69
  }
70
70
  mdai->item[0].val = ary;
71
71
  mdai->type = ALLOC_N( int, NA_NTYPES );
72
- for (i=0; i<NA_NTYPES; i++)
72
+ for (i=0; i<NA_NTYPES; ++i)
73
73
  mdai->type[i]=0;
74
74
 
75
75
  return mdai;
@@ -84,7 +84,7 @@ static void
84
84
  mdai->n += n_extra;
85
85
  n = mdai->n;
86
86
  REALLOC_N( mdai->item, na_mdai_item_t, n );
87
- for (; i<n; i++) {
87
+ for (; i<n; ++i) {
88
88
  mdai->item[i].shape = 0;
89
89
  mdai->item[i].val = Qnil;
90
90
  }
@@ -96,15 +96,15 @@ static int *
96
96
  int i, t, r;
97
97
  int *shape;
98
98
 
99
- for (t=i=NA_BYTE; i<NA_NTYPES; i++) {
99
+ for (t=i=NA_BYTE; i<NA_NTYPES; ++i) {
100
100
  if ( mdai->type[i] > 0 )
101
101
  t = na_upcast[t][i];
102
102
  }
103
103
  *type = t;
104
- for (i=0; i < mdai->n && mdai->item[i].shape > 0; i++) ;
104
+ for (i=0; i < mdai->n && mdai->item[i].shape > 0; ++i) ;
105
105
  *rank = r = i;
106
106
  shape = ALLOC_N(int,r);
107
- for (i=0; r-->0; i++) {
107
+ for (i=0; r-->0; ++i) {
108
108
  shape[i] = mdai->item[r].shape;
109
109
  }
110
110
  xfree(mdai->type);
@@ -129,17 +129,17 @@ static void
129
129
  /* direction */
130
130
  if (len>0) {
131
131
  *step = 1;
132
- if (EXCL(obj)) end--; else len++;
132
+ if (EXCL(obj)) --end; else ++len;
133
133
  }
134
134
  else if (len<0) {
135
135
  len = -len;
136
136
  *step = -1;
137
- if (EXCL(obj)) end++; else len++;
137
+ if (EXCL(obj)) ++end; else ++len;
138
138
  }
139
139
  else /*if(len==0)*/ {
140
140
  *step = 0;
141
141
  if (!EXCL(obj)) {
142
- len++;
142
+ ++len;
143
143
  }
144
144
  }
145
145
  *n = len;
@@ -157,13 +157,13 @@ static int
157
157
  ary = RARRAY(mdai->item[rank-1].val);
158
158
  len = ary->len;
159
159
 
160
- for (i=0; i < ary->len; i++) {
160
+ for (i=0; i < ary->len; ++i) {
161
161
 
162
162
  v = ary->ptr[i];
163
163
 
164
164
  if (TYPE(v) == T_ARRAY) {
165
165
  /* check recursive array */
166
- for (j=0; j<rank; j++) {
166
+ for (j=0; j<rank; ++j) {
167
167
  if (mdai->item[j].val == v)
168
168
  rb_raise(rb_eStandardError,"converting recursive Array to NArray");
169
169
  }
@@ -172,7 +172,7 @@ static int
172
172
  }
173
173
  mdai->item[rank].val = v;
174
174
  if ( na_do_mdai(mdai,rank+1) ) {
175
- len--; /* Array is empty */
175
+ --len; /* Array is empty */
176
176
  }
177
177
  }
178
178
  else
@@ -191,12 +191,12 @@ static int
191
191
  struct NARRAY *na; GetNArray(v,na);
192
192
 
193
193
  if ( na->rank == 0 ) {
194
- len--; /* NArray is empty */
194
+ --len; /* NArray is empty */
195
195
  } else {
196
196
  if ( rank+na->rank > mdai->n ) {
197
197
  na_realloc_mdai(mdai,((na->rank-1)/4+1)*4);
198
198
  }
199
- for ( j=na->rank, r=rank; j-- > 0 ; r++ ) {
199
+ for ( j=na->rank, r=rank; --j > 0 ; ++r ) {
200
200
  if ( mdai->item[r].shape < na->shape[j] )
201
201
  mdai->item[r].shape = na->shape[j];
202
202
  }
@@ -245,19 +245,19 @@ static void
245
245
  n = thisrank - src->rank + 1;
246
246
 
247
247
  s = ALLOCA_N(struct slice, dst->rank+1);
248
- for (i=0; i < n; i++) {
248
+ for (i=0; i < n; ++i) {
249
249
  s[i].n = 1;
250
250
  s[i].beg = 0;
251
251
  s[i].step = 0;
252
252
  s[i].idx = NULL;
253
253
  }
254
- for ( ; i <= thisrank; i++) {
254
+ for ( ; i <= thisrank; ++i) {
255
255
  s[i].n = src->shape[i-n];
256
256
  s[i].beg = 0;
257
257
  s[i].step = 1;
258
258
  s[i].idx = NULL;
259
259
  }
260
- for ( ; i < dst->rank; i++) {
260
+ for ( ; i < dst->rank; ++i) {
261
261
  s[i].n = 1;
262
262
  s[i].beg = idx[i];
263
263
  s[i].step = 0;
@@ -276,7 +276,7 @@ static void
276
276
  VALUE v;
277
277
 
278
278
  if (thisrank==0) {
279
- for (i = idx[0] = 0; i < ary->len; i++) {
279
+ for (i = idx[0] = 0; i < ary->len; ++i) {
280
280
  v = ary->ptr[i];
281
281
  if (rb_obj_is_kind_of(v, rb_cRange)) {
282
282
  na_range_to_sequence(v,&len,&start,&dir);
@@ -299,15 +299,15 @@ static void
299
299
  }
300
300
  else /* thisrank > 0 */
301
301
  {
302
- for (i = idx[thisrank] = 0; i < ary->len; i++) {
302
+ for (i = idx[thisrank] = 0; i < ary->len; ++i) {
303
303
  v = ary->ptr[i];
304
304
  if (TYPE(v) == T_ARRAY) {
305
305
  na_copy_ary_to_nary(RARRAY(v),na,thisrank-1,idx,type);
306
- if (idx[thisrank-1]>0) idx[thisrank]++;
306
+ if (idx[thisrank-1]>0) ++idx[thisrank];
307
307
  }
308
308
  else if (IsNArray(v)) {
309
309
  na_copy_nary_to_nary(v,na,thisrank-1,idx);
310
- idx[thisrank]++;
310
+ ++idx[thisrank];
311
311
  }
312
312
  else {
313
313
  for (j=thisrank; j; ) idx[--j] = 0;
@@ -316,7 +316,7 @@ static void
316
316
  na_range_to_sequence(v,&len,&start,&dir);
317
317
  if (len>0) {
318
318
  pos = na_index_pos(na,idx);
319
- idx[thisrank]++;
319
+ ++idx[thisrank];
320
320
  step = na_index_pos(na,idx)-pos;
321
321
  IndGenFuncs[type]( len, NA_PTR(na,pos), na_sizeof[type]*step,
322
322
  start, dir );
@@ -326,7 +326,7 @@ static void
326
326
  else {
327
327
  pos = na_index_pos(na,idx);
328
328
  SetFuncs[type][NA_ROBJ]( 1, NA_PTR(na,pos), 0, ary->ptr+i, 0 );
329
- idx[thisrank]++;
329
+ ++idx[thisrank];
330
330
  }
331
331
  /* copy here */
332
332
  }
@@ -357,7 +357,7 @@ static VALUE
357
357
  /*
358
358
  printf("rank=%i\n", rank);
359
359
  printf("type=%i\n", type);
360
- for (i=0; i<rank; i++) {
360
+ for (i=0; i<rank; ++i) {
361
361
  printf("shape[%i]=%i\n", i, shape[i]);
362
362
  }
363
363
  */
@@ -378,7 +378,7 @@ static VALUE
378
378
  na_clear_data(na);
379
379
 
380
380
  idx = ALLOCA_N(int,rank);
381
- for (i=0; i<rank; i++) idx[i]=0;
381
+ for (i=0; i<rank; ++i) idx[i]=0;
382
382
 
383
383
  na_copy_ary_to_nary( RARRAY(ary), na, rank-1, idx, type );
384
384
 
@@ -520,14 +520,14 @@ static VALUE
520
520
  if (thisrank == 0) {
521
521
  ptr = NA_PTR( na, na_index_pos(na,idx) );
522
522
  elmsz = na_sizeof[na->type];
523
- for (i = na->shape[0]; i; i--) {
523
+ for (i = na->shape[0]; i; --i) {
524
524
  (*func)( 1, &val, 0, ptr, 0 );
525
525
  ptr += elmsz;
526
526
  rb_ary_push( ary, val );
527
527
  }
528
528
  }
529
529
  else {
530
- for (i = 0; i < na->shape[thisrank]; i++) {
530
+ for (i = 0; i < na->shape[thisrank]; ++i) {
531
531
  idx[thisrank] = i;
532
532
  rb_ary_push( ary, na_to_array0(na,idx,thisrank-1,func) );
533
533
  }
@@ -549,7 +549,7 @@ VALUE
549
549
  return rb_ary_new();
550
550
 
551
551
  idx = ALLOCA_N(int,na->rank);
552
- for (i = 0; i<na->rank; i++) idx[i] = 0;
552
+ for (i = 0; i<na->rank; ++i) idx[i] = 0;
553
553
  return na_to_array0(na,idx,na->rank-1,SetFuncs[NA_ROBJ][na->type]);
554
554
  }
555
555
 
@@ -565,7 +565,7 @@ static VALUE
565
565
  if (n>0)
566
566
  (*tostr)(&str,p2);
567
567
 
568
- for (n--; n>0; n--) {
568
+ for (n--; n>0; --n) {
569
569
  p2 += p2step;
570
570
  (*tostr)(&tmp,p2);
571
571
 
@@ -613,7 +613,7 @@ VALUE
613
613
  for(;;) {
614
614
  /* set pointers */
615
615
  while (i > 0) {
616
- i--;
616
+ --i;
617
617
  rb_str_cat(val, "[ ", 2);
618
618
  s1[i].p = s1[i].pbeg + s1[i+1].p;
619
619
  si[i] = s1[i].n;
@@ -638,7 +638,7 @@ VALUE
638
638
  return val;
639
639
  }
640
640
  /* indent */
641
- for (ii=i; ii<rank; ii++)
641
+ for (ii=i; ii<rank; ++ii)
642
642
  rb_str_cat(val, " ", 2);
643
643
  }
644
644
  }