narray 0.6.0.5 → 0.6.0.7

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.
@@ -1,3 +1,16 @@
1
+ 2013-02-01 Masahiro TANAKA <masa16.tanaka@gmail.com>
2
+
3
+ * lib/narray_ext.rb: eql? hash methods implemented.
4
+ * ver 0.6.0.7
5
+
6
+ 2013-01-31 Masahiro TANAKA <masa16.tanaka@gmail.com>
7
+
8
+ * na_raondom.c: unuse u_int16_t
9
+ * mknafunc.rb, mkmath.rb, mkop.rb, na_linalg.c:
10
+ bug: duplicated definition of asinh/acosh/atanh,
11
+ typecast warning (mingw/mswin)
12
+ * ver 0.6.0.6
13
+
1
14
  2013-01-30 Masahiro TANAKA <masa16.tanaka@gmail.com>
2
15
 
3
16
  * narray.c (na_check_class_narray):
@@ -1,5 +1,5 @@
1
1
 
2
- Ruby/NArray ver 0.6.0.0 (2011-08-27) by Masahiro TANAKA
2
+ Ruby/NArray ver 0.6.0.7 (2013-02-01) by Masahiro TANAKA
3
3
 
4
4
 
5
5
  Class method:
@@ -136,7 +136,7 @@ Bitwise operator (only for integers)
136
136
  Comparison
137
137
  -- element-wise comparison, results in BYTE-type NArray;
138
138
  Note that not true nor false is returned.
139
- self.eq other ( == operator was obsolete after ver 0.5.4 )
139
+ self.eq other (distinguish from == operator; see below )
140
140
  self.ne other
141
141
  self.gt other
142
142
  self > other
@@ -161,6 +161,14 @@ Comparison
161
161
 
162
162
  e.g.: idx_t,idx_f = (a>12).where2
163
163
 
164
+ Equivalence
165
+ NArray[1] == NArray[1] #=> true
166
+ NArray[1] == NArray[1.0] #=> true
167
+ NArray[1].eql? NArray[1] #=> true
168
+ NArray[1].eql? NArray[1.0] #=> false
169
+ NArray[1].equal? NArray[1] #=> false
170
+ a=b=NArray[1]; a.equal? b #=> true
171
+
164
172
  Statistics
165
173
  self.sum(dim,..) Summation
166
174
  self.cumsum Cumulative Summation (for 1-d array)
@@ -1,5 +1,5 @@
1
1
 
2
- Ruby/NArray ver 0.6.0.0 (2011-08-27) by Masahiro TANAKA
2
+ Ruby/NArray ver 0.6.0.7 (2013-02-01) by Masahiro TANAKA
3
3
 
4
4
 
5
5
  クラスメソッド:
@@ -127,7 +127,7 @@
127
127
  比較
128
128
  -- 要素ごとに値を比較し、結果をBYTE型 NArrayを返す。
129
129
  true/falseでないことに注意。
130
- self.eq other ( ver 0.5.4 以降、== 演算子は廃止しました。)
130
+ self.eq other ( == とは異なることに注意)
131
131
  self.ne other
132
132
  self.gt other
133
133
  self > other
@@ -151,6 +151,14 @@
151
151
 
152
152
  例: idx_t,idx_f = (a>12).where2
153
153
 
154
+ 同値性
155
+ NArray[1] == NArray[1] #=> true
156
+ NArray[1] == NArray[1.0] #=> true
157
+ NArray[1].eql? NArray[1] #=> true
158
+ NArray[1].eql? NArray[1.0] #=> false
159
+ NArray[1].equal? NArray[1] #=> false
160
+ a=b=NArray[1]; a.equal? b #=> true
161
+
154
162
  統計
155
163
  self.sum(dim,..) 指定した次元の和
156
164
  self.cumsum 累積和(1次元配列のみ)
@@ -31,10 +31,29 @@ class NArray
31
31
  end
32
32
 
33
33
  def ==(other)
34
- if other.kind_of?(NArray)
35
- (shape == other.shape) && eq(other).all?
34
+ other.kind_of?(NArray) &&
35
+ shape == other.shape &&
36
+ eq(other).all?
37
+ end
38
+
39
+ def eql?(other)
40
+ self.class == other.class &&
41
+ typecode == other.typecode &&
42
+ shape == other.shape &&
43
+ case typecode
44
+ when NArray::OBJECT
45
+ to_a.eql? other.to_a
46
+ else
47
+ to_s.eql? other.to_s
48
+ end
49
+ end
50
+
51
+ def hash
52
+ case typecode
53
+ when NArray::OBJECT
54
+ [self.class, to_a].hash
36
55
  else
37
- false
56
+ [self.class, typecode, shape, to_s].hash
38
57
  end
39
58
  end
40
59
 
@@ -38,7 +38,6 @@ void sincos(double x, double *s, double *c)
38
38
  {
39
39
  *s=sin(x); *c=cos(x);
40
40
  }
41
- #endif
42
41
 
43
42
  #ifndef HAVE_ACOSH
44
43
  static double rb_log1p (const double x)
@@ -108,6 +107,7 @@ static double atanh(double x)
108
107
  return a;
109
108
  }
110
109
  #endif
110
+ #endif
111
111
 
112
112
  static void squareX(scomplex *x) {
113
113
  float r=x->r;
@@ -398,8 +398,8 @@ data = [
398
398
  ["{ *p1 = log10(*p2); }"]*2 +
399
399
  ["{
400
400
  log#code(p1,p2);
401
- p1->r *= M_LOG10E;
402
- p1->i *= M_LOG10E;
401
+ p1->r *= (typer)M_LOG10E;
402
+ p1->i *= (typer)M_LOG10E;
403
403
  }"]*2 +
404
404
  [nil] ],
405
405
 
@@ -409,8 +409,8 @@ data = [
409
409
  ["{ *p1 = log(*p2)*M_LOG2E; }"]*2 +
410
410
  ["{
411
411
  log#code(p1,p2);
412
- p1->r *= M_LOG2E;
413
- p1->i *= M_LOG2E;
412
+ p1->r *= (typer)M_LOG2E;
413
+ p1->i *= (typer)M_LOG2E;
414
414
  }"]*2 +
415
415
  [nil] ],
416
416
 
@@ -61,6 +61,7 @@ def mksetfuncs(name,op,id,funcs)
61
61
  gsub(/p2->/,"((#{td[j]}*)p2)->").
62
62
  gsub(/\*p1/,"*(#{td[i]}*)p1").
63
63
  gsub(/\*p2/,"*(#{td[j]}*)p2").
64
+ gsub(/ = /," = (#{tr[i]})").
64
65
  gsub(/#id/,id).
65
66
  gsub(/#op/,op).
66
67
  gsub(/typed/,td[i]).
@@ -118,6 +119,7 @@ def mkfuncs(name,t1,t2,func)
118
119
  gsub(/\*p2/,"*(#{t2[i]}*)p2").
119
120
  gsub(/\*p3/,"*(#{t2[i]}*)p3").
120
121
  gsub(/type1/,td[i]).
122
+ gsub(/typec/,t1[i]).
121
123
  gsub(/typef/,tr[i])
122
124
  puts $func_body.
123
125
  gsub(/#name/,name).
@@ -206,28 +206,28 @@ mkfuncs('ImgSet',$data_types,$real_types,
206
206
 
207
207
  mkfuncs('Floor',$int_types,$data_types,[nil] +
208
208
  ['copy']*3 +
209
- ["*p1 = floor(*p2);"]*2 +
209
+ ["*p1 = (typec)floor(*p2);"]*2 +
210
210
  [nil]*3
211
211
  )
212
212
 
213
213
  mkfuncs('Ceil',$int_types,$data_types,[nil] +
214
214
  ['copy']*3 +
215
- ["*p1 = ceil(*p2);"]*2 +
215
+ ["*p1 = (typec)ceil(*p2);"]*2 +
216
216
  [nil]*3
217
217
  )
218
218
 
219
219
  mkfuncs('Round',$int_types,$data_types,[nil] +
220
220
  ['copy']*3 +
221
221
  # ["*p1 = floor(*p2+0.5);"]*2 +
222
- ["if (*p2 >= 0) *p1 = floor(*p2+0.5);
223
- else *p1 = ceil(*p2-0.5);"]*2 +
222
+ ["if (*p2 >= 0) *p1 = (typec)floor(*p2+0.5);
223
+ else *p1 = (typec)ceil(*p2-0.5);"]*2 +
224
224
  [nil]*3
225
225
  )
226
226
 
227
227
  mkfuncs('Abs',$real_types,$data_types,[nil] +
228
228
  ["*p1 = *p2;"] +
229
229
  ["*p1 = (*p2<0) ? -*p2 : *p2;"]*4 +
230
- ["*p1 = hypot(p2->r, p2->i);"]*2 +
230
+ ["*p1 = (typec)hypot(p2->r, p2->i);"]*2 +
231
231
  ["*p1 = rb_funcall(*p2,na_id_abs,0);"]
232
232
  )
233
233
 
@@ -324,8 +324,8 @@ $func_body =
324
324
  "
325
325
  mkfuncs('IndGen',$data_types,[$data_types[3]]*8,
326
326
  [nil] +
327
- ["*p1 = p2;"]*5 +
328
- ["p1->r = p2;
327
+ ["*p1 = (typef)p2;"]*5 +
328
+ ["p1->r = (typef)p2;
329
329
  p1->i = 0;"]*2 +
330
330
  ["*p1 = INT2FIX(p2);"]
331
331
  )
@@ -565,8 +565,8 @@ na_lu_init(VALUE self, VALUE lu, VALUE piv)
565
565
 
566
566
  void Init_na_linalg()
567
567
  {
568
- static double tiny_d=1e-15;
569
- static float tiny_f=1e-7;
568
+ static double tiny_d = 1e-15;
569
+ static float tiny_f = (float)1e-7;
570
570
  int i, sz;
571
571
  int32_t one=1, zero=0;
572
572
  static VALUE zerov = INT2FIX(0);
@@ -271,7 +271,7 @@ static void RndB(int n, char *p1, int i1, double rmax)
271
271
  static void RndI(int n, char *p1, int i1, double rmax)
272
272
  {
273
273
  u_int32_t y;
274
- u_int16_t max;
274
+ u_int32_t max;
275
275
  int shift, sign=1;
276
276
 
277
277
  if ( rmax < 0 ) { rmax = -rmax; sign = -1; }
@@ -23,8 +23,8 @@
23
23
  # include <sys/types.h>
24
24
  #endif
25
25
 
26
- #define NARRAY_VERSION "0.6.0.5"
27
- #define NARRAY_VERSION_CODE 605
26
+ #define NARRAY_VERSION "0.6.0.7"
27
+ #define NARRAY_VERSION_CODE 607
28
28
 
29
29
  /*
30
30
  Data types used in NArray :
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: narray
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0.5
4
+ version: 0.6.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-30 00:00:00.000000000 Z
12
+ date: 2013-02-02 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Numerical N-dimensional Array class
15
15
  email: masa16.tanaka@gmail.com