nmatrix 0.1.0.rc3 → 0.1.0.rc4

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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +22 -21
  3. data/History.txt +13 -0
  4. data/Manifest.txt +1 -2
  5. data/README.rdoc +8 -8
  6. data/ext/nmatrix/binary_format.txt +1 -1
  7. data/ext/nmatrix/data/complex.h +21 -21
  8. data/ext/nmatrix/data/data.cpp +9 -2
  9. data/ext/nmatrix/data/data.h +4 -2
  10. data/ext/nmatrix/math.cpp +69 -31
  11. data/ext/nmatrix/math/getf2.h +2 -2
  12. data/ext/nmatrix/math/getrf.h +2 -2
  13. data/ext/nmatrix/math/imax.h +101 -0
  14. data/ext/nmatrix/math/scal.h +30 -10
  15. data/ext/nmatrix/math/swap.h +1 -22
  16. data/ext/nmatrix/nm_memory.h +1 -1
  17. data/ext/nmatrix/nmatrix.h +2 -2
  18. data/ext/nmatrix/ruby_constants.cpp +1 -2
  19. data/ext/nmatrix/ruby_constants.h +6 -7
  20. data/ext/nmatrix/ruby_nmatrix.c +23 -18
  21. data/ext/nmatrix/storage/list/list.cpp +48 -47
  22. data/ext/nmatrix/util/io.cpp +2 -2
  23. data/lib/nmatrix.rb +0 -1
  24. data/lib/nmatrix/enumerate.rb +1 -1
  25. data/lib/nmatrix/io/market.rb +1 -1
  26. data/lib/nmatrix/io/mat_reader.rb +41 -41
  27. data/lib/nmatrix/lapack.rb +0 -1
  28. data/lib/nmatrix/math.rb +43 -0
  29. data/lib/nmatrix/nmatrix.rb +5 -1
  30. data/lib/nmatrix/version.rb +1 -1
  31. data/nmatrix.gemspec +3 -4
  32. data/spec/00_nmatrix_spec.rb +13 -6
  33. data/spec/01_enum_spec.rb +17 -25
  34. data/spec/02_slice_spec.rb +74 -82
  35. data/spec/blas_spec.rb +21 -6
  36. data/spec/elementwise_spec.rb +1 -6
  37. data/spec/io_spec.rb +15 -22
  38. data/spec/lapack_spec.rb +1 -6
  39. data/spec/leakcheck.rb +1 -1
  40. data/spec/math_spec.rb +43 -4
  41. data/spec/nmatrix_yale_spec.rb +1 -4
  42. data/spec/rspec_spec.rb +1 -1
  43. data/spec/shortcuts_spec.rb +1 -6
  44. data/spec/slice_set_spec.rb +1 -5
  45. data/spec/stat_spec.rb +46 -51
  46. metadata +32 -22
  47. data/Guardfile +0 -6
  48. data/ext/nmatrix/math/idamax.h +0 -86
  49. data/lib/nmatrix/nvector.rb +0 -184
data/spec/blas_spec.rb CHANGED
@@ -25,13 +25,28 @@
25
25
  # Tests for properly exposed BLAS functions.
26
26
  #
27
27
 
28
- # Can we use require_relative here instead?
29
- require File.join(File.dirname(__FILE__), "spec_helper.rb")
28
+ require 'spec_helper'
30
29
 
31
30
  describe NMatrix::BLAS do
32
- #after :each do
33
- # GC.start
34
- #end
31
+ [:byte, :int8, :int16, :int32, :int64,
32
+ :float32, :float64, :complex64, :complex128,
33
+ :rational32, :rational64, :rational128,
34
+ :object
35
+ ].each do |dtype|
36
+ context dtype do
37
+ it "exposes cblas_scal" do
38
+ x = NMatrix.new([3, 1], [1, 2, 3], dtype: dtype)
39
+ NMatrix::BLAS.cblas_scal(3, 2, x, 1)
40
+ expect(x).to eq(NMatrix.new([3, 1], [2, 4, 6], dtype: dtype))
41
+ end
42
+
43
+ it "exposes cblas_imax" do
44
+ u = NMatrix.new([3,1], [1, 4, 3], dtype: dtype)
45
+ index = NMatrix::BLAS.cblas_imax(3, u, 1)
46
+ expect(index).to eq(1)
47
+ end
48
+ end
49
+ end
35
50
 
36
51
  [:rational32, :rational64, :rational128, :float32, :float64, :complex64, :complex128].each do |dtype|
37
52
  context dtype do
@@ -144,4 +159,4 @@ describe NMatrix::BLAS do
144
159
 
145
160
  end
146
161
  end
147
- end
162
+ end
@@ -25,14 +25,9 @@
25
25
  # Element-wise operation tests.
26
26
  #
27
27
 
28
- # Can we use require_relative here instead?
29
- require File.join(File.dirname(__FILE__), "spec_helper.rb")
28
+ require 'spec_helper'
30
29
 
31
30
  describe NMatrix do
32
- #after :each do
33
- # GC.start
34
- #end
35
-
36
31
  context "yale" do
37
32
  before :each do
38
33
  @n = NMatrix.new(3, stype: :yale, dtype: :int64)
data/spec/io_spec.rb CHANGED
@@ -25,19 +25,12 @@
25
25
  # Basic tests for NMatrix::IO.
26
26
  #
27
27
  require "tmpdir" # Used to avoid cluttering the repository.
28
-
28
+ require 'spec_helper'
29
29
  require "./lib/nmatrix"
30
30
 
31
31
  describe NMatrix::IO do
32
- before :each do
33
- @tmp_dir = Dir.mktmpdir
34
- @test_out = File.join(@tmp_dir, "test-out")
35
- end
36
-
37
- after :each do
38
- File.delete(@test_out) if File.file?(@test_out)
39
- Dir.rmdir(@tmp_dir)
40
- end
32
+ let(:tmp_dir) { Dir.mktmpdir }
33
+ let(:test_out) { File.join(tmp_dir, 'test-out') }
41
34
 
42
35
  it "repacks a string" do
43
36
  expect(NMatrix::IO::Matlab.repack("hello", :miUINT8, :byte)).to eq("hello")
@@ -102,54 +95,54 @@ describe NMatrix::IO do
102
95
 
103
96
  it "reads and writes NMatrix dense" do
104
97
  n = NMatrix.new(:dense, [4,3], [0,1,2,3,4,5,6,7,8,9,10,11], :int32)
105
- n.write(@test_out)
98
+ n.write(test_out)
106
99
 
107
- m = NMatrix.read(@test_out)
100
+ m = NMatrix.read(test_out)
108
101
  expect(n).to eq(m)
109
102
  end
110
103
 
111
104
  it "reads and writes NMatrix dense as symmetric" do
112
105
  n = NMatrix.new(:dense, 3, [0,1,2,1,3,4,2,4,5], :int16)
113
- n.write(@test_out, :symmetric)
106
+ n.write(test_out, :symmetric)
114
107
 
115
- m = NMatrix.read(@test_out)
108
+ m = NMatrix.read(test_out)
116
109
  expect(n).to eq(m)
117
110
  end
118
111
 
119
112
  it "reads and writes NMatrix dense as skew" do
120
113
  n = NMatrix.new(:dense, 3, [0,1,2,-1,3,4,-2,-4,5], :float64)
121
- n.write(@test_out, :skew)
114
+ n.write(test_out, :skew)
122
115
 
123
- m = NMatrix.read(@test_out)
116
+ m = NMatrix.read(test_out)
124
117
  expect(n).to eq(m)
125
118
  end
126
119
 
127
120
  it "reads and writes NMatrix dense as hermitian" do
128
121
  n = NMatrix.new(:dense, 3, [0,1,2,1,3,4,2,4,5], :complex64)
129
- n.write(@test_out, :hermitian)
122
+ n.write(test_out, :hermitian)
130
123
 
131
- m = NMatrix.read(@test_out)
124
+ m = NMatrix.read(test_out)
132
125
  expect(n).to eq(m)
133
126
  end
134
127
 
135
128
  it "reads and writes NMatrix dense as upper" do
136
129
  n = NMatrix.new(:dense, 3, [-1,1,2,3,4,5,6,7,8], :int32)
137
- n.write(@test_out, :upper)
130
+ n.write(test_out, :upper)
138
131
 
139
132
  m = NMatrix.new(:dense, 3, [-1,1,2,0,4,5,0,0,8], :int32) # lower version of the same
140
133
 
141
- o = NMatrix.read(@test_out)
134
+ o = NMatrix.read(test_out)
142
135
  expect(o).to eq(m)
143
136
  expect(o).not_to eq(n)
144
137
  end
145
138
 
146
139
  it "reads and writes NMatrix dense as lower" do
147
140
  n = NMatrix.new(:dense, 3, [-1,1,2,3,4,5,6,7,8], :int32)
148
- n.write(@test_out, :lower)
141
+ n.write(test_out, :lower)
149
142
 
150
143
  m = NMatrix.new(:dense, 3, [-1,0,0,3,4,0,6,7,8], :int32) # lower version of the same
151
144
 
152
- o = NMatrix.read(@test_out)
145
+ o = NMatrix.read(test_out)
153
146
  expect(o).to eq(m)
154
147
  expect(o).not_to eq(n)
155
148
  end
data/spec/lapack_spec.rb CHANGED
@@ -25,14 +25,9 @@
25
25
  # Tests for properly exposed LAPACK functions.
26
26
  #
27
27
 
28
- # Can we use require_relative here instead?
29
- require File.join(File.dirname(__FILE__), "spec_helper.rb")
28
+ require 'spec_helper'
30
29
 
31
30
  describe NMatrix::LAPACK do
32
- #after :each do
33
- # GC.start
34
- #end
35
-
36
31
  # where integer math is allowed
37
32
  [:byte, :int8, :int16, :int32, :int64, :rational32, :rational64, :rational128, :float32, :float64, :complex64, :complex128].each do |dtype|
38
33
  context dtype do
data/spec/leakcheck.rb CHANGED
@@ -13,4 +13,4 @@ require "./lib/nmatrix"
13
13
  n = NMatrix.new(:dense, 1000, :float64)
14
14
  n[0,t] = 1.0
15
15
  puts n[t,0]
16
- end
16
+ end
data/spec/math_spec.rb CHANGED
@@ -29,10 +29,6 @@
29
29
  require 'spec_helper'
30
30
 
31
31
  describe "math" do
32
- #after :each do
33
- # GC.start
34
- #end
35
-
36
32
  context "elementwise math functions" do
37
33
 
38
34
  [:dense,:list,:yale].each do |stype|
@@ -124,7 +120,50 @@ describe "math" do
124
120
  end
125
121
  end
126
122
  end
123
+
124
+ context "Floor and ceil for #{stype}" do
125
+
126
+ [:floor, :ceil].each do |meth|
127
+ [:byte,:int8,:int16,:int32,:int64, :float32,:float64, :object,:rational32,:rational64,:rational128, :complex64, :complex128].each do |dtype|
128
+ context dtype do
129
+ before :each do
130
+ @size = [2,2]
131
+ @m = NMatrix.seq(@size, dtype: dtype, stype: stype)+1
132
+ @a = @m.to_a.flatten
133
+ end
127
134
 
135
+ if dtype.to_s.match(/int/) or [:byte, :object].include?(dtype)
136
+ it "should return #{dtype} for #{dtype}" do
137
+
138
+ expect(@m.send(meth)).to eq N.new(@size, @a.map { |e| e.send(meth) }, dtype: dtype, stype: stype)
139
+
140
+ if dtype == :object
141
+ expect(@m.send(meth).dtype).to eq :object
142
+ else
143
+ expect(@m.send(meth).integer_dtype?).to eq true
144
+ end
145
+ end
146
+ elsif dtype.to_s.match(/float/) or dtype.to_s.match(/rational/)
147
+ it "should return dtype int64 for #{dtype}" do
148
+
149
+ expect(@m.send(meth)).to eq N.new(@size, @a.map { |e| e.send(meth) }, dtype: dtype, stype: stype)
150
+
151
+ expect(@m.send(meth).dtype).to eq :int64
152
+ end
153
+ elsif dtype.to_s.match(/complex/)
154
+ it "should properly calculate #{meth} for #{dtype}" do
155
+
156
+ expect(@m.send(meth)).to eq N.new(@size, @a.map { |e| e = Complex(e.real.send(meth), e.imag.send(meth)) }, dtype: dtype, stype: stype)
157
+
158
+ expect(@m.send(meth).dtype).to eq :complex64 if dtype == :complex64
159
+ expect(@m.send(meth).dtype).to eq :complex128 if dtype == :complex128
160
+ end
161
+ end
162
+ end
163
+ end
164
+ end
165
+ end
166
+
128
167
  end
129
168
  end
130
169
  end
@@ -24,13 +24,10 @@
24
24
  #
25
25
  # Basic tests for NMatrix's Yale storage type.
26
26
  #
27
+ require 'spec_helper'
27
28
  require "./lib/nmatrix"
28
29
 
29
30
  describe NMatrix do
30
- #after :each do
31
- # GC.start
32
- #end
33
-
34
31
  context :yale do
35
32
 
36
33
  it "compares two empty matrices" do
data/spec/rspec_spec.rb CHANGED
@@ -24,7 +24,7 @@
24
24
  #
25
25
  # A spec for testing monkey patches to RSpec for NMatrix.
26
26
  #
27
- require File.join(File.dirname(__FILE__), "spec_helper.rb")
27
+ require 'spec_helper'
28
28
 
29
29
  describe "RSpec" do
30
30
  it "should permit #be_within to be used on a dense NMatrix" do
@@ -25,15 +25,10 @@
25
25
  # Specs for the shortcuts used in NMatrix and in NVector.
26
26
  #
27
27
 
28
- # Can we use require_relative here instead?
29
- require File.join(File.dirname(__FILE__), "spec_helper.rb")
28
+ require 'spec_helper'
30
29
  require 'pry'
31
30
 
32
31
  describe NMatrix do
33
- #after :each do
34
- # GC.start
35
- #end
36
-
37
32
  it "zeros() creates a matrix of zeros" do
38
33
  m = NMatrix.zeros(3)
39
34
  n = NMatrix.new([3, 3], 0)
@@ -24,16 +24,12 @@
24
24
  #
25
25
  # Test of slice set operations.
26
26
 
27
+ require 'spec_helper'
27
28
  require 'pry'
28
- require File.dirname(__FILE__) + "/spec_helper.rb"
29
29
 
30
30
  describe "Set slice operation" do
31
31
  include RSpec::Longrun::DSL
32
32
 
33
- #after :each do
34
- # GC.start
35
- #end
36
-
37
33
  [:dense, :yale, :list].each do |stype|
38
34
  context "for #{stype}" do
39
35
  before :each do
data/spec/stat_spec.rb CHANGED
@@ -25,62 +25,59 @@
25
25
  # Tests for statistical functions in NMatrix.
26
26
  #
27
27
 
28
- # Can we use require_relative here instead?
29
- require File.join(File.dirname(__FILE__), "spec_helper.rb")
28
+ require 'spec_helper'
30
29
  require 'pry'
31
30
 
32
31
  describe "Statistical functions" do
33
32
  context "mapping and reduction related functions" do
34
33
  [:dense, :yale, :list].each do |stype|
35
- context "on #{stype} matrices" do
36
- before :each do
37
- @nm_1d = NMatrix.new([5], [5.0,0.0,1.0,2.0,3.0], stype: stype) unless stype == :yale
38
- @nm_2d = NMatrix.new([2,2], [0.0, 1.0, 2.0, 3.0], stype: stype)
39
- end
34
+ context "on #{stype} matrices" do
35
+ let(:nm_1d) { NMatrix.new([5], [5.0,0.0,1.0,2.0,3.0], stype: stype) unless stype == :yale }
36
+ let(:nm_2d) { NMatrix.new([2,2], [0.0, 1.0, 2.0, 3.0], stype: stype) }
40
37
 
41
38
  it "behaves like Enumerable#reduce with no argument to reduce" do
42
- expect(@nm_1d.reduce_along_dim(0) { |acc, el| acc + el }.to_f).to eq 11 unless stype == :yale
43
- expect(@nm_2d.reduce_along_dim(1) { |acc, el| acc + el }).to eq NMatrix.new([2,1], [1.0, 5.0], stype: stype)
39
+ expect(nm_1d.reduce_along_dim(0) { |acc, el| acc + el }.to_f).to eq 11 unless stype == :yale
40
+ expect(nm_2d.reduce_along_dim(1) { |acc, el| acc + el }).to eq NMatrix.new([2,1], [1.0, 5.0], stype: stype)
44
41
  end
45
42
 
46
43
  it "should calculate the mean along the specified dimension" do
47
44
  unless stype == :yale then
48
- puts @nm_1d.mean
49
- expect(@nm_1d.mean).to eq NMatrix.new([1], [2.2], stype: stype, dtype: :float64)
45
+ puts nm_1d.mean
46
+ expect(nm_1d.mean).to eq NMatrix.new([1], [2.2], stype: stype, dtype: :float64)
50
47
  end
51
- expect(@nm_2d.mean).to eq NMatrix[[1.0,2.0], stype: stype]
52
- expect(@nm_2d.mean(1)).to eq NMatrix[[0.5], [2.5], stype: stype]
48
+ expect(nm_2d.mean).to eq NMatrix[[1.0,2.0], stype: stype]
49
+ expect(nm_2d.mean(1)).to eq NMatrix[[0.5], [2.5], stype: stype]
53
50
  end
54
51
 
55
52
  it "should calculate the minimum along the specified dimension" do
56
- expect(@nm_1d.min).to eq 0.0 unless stype == :yale
57
- expect(@nm_2d.min).to eq NMatrix[[0.0, 1.0], stype: stype]
58
- expect(@nm_2d.min(1)).to eq NMatrix[[0.0], [2.0], stype: stype]
53
+ expect(nm_1d.min).to eq 0.0 unless stype == :yale
54
+ expect(nm_2d.min).to eq NMatrix[[0.0, 1.0], stype: stype]
55
+ expect(nm_2d.min(1)).to eq NMatrix[[0.0], [2.0], stype: stype]
59
56
  end
60
57
 
61
58
  it "should calculate the maximum along the specified dimension" do
62
- expect(@nm_1d.max).to eq 5.0 unless stype == :yale
63
- expect(@nm_2d.max).to eq NMatrix[[2.0, 3.0], stype: stype]
59
+ expect(nm_1d.max).to eq 5.0 unless stype == :yale
60
+ expect(nm_2d.max).to eq NMatrix[[2.0, 3.0], stype: stype]
64
61
  end
65
62
 
66
63
  it "should calculate the variance along the specified dimension" do
67
- expect(@nm_1d.variance).to eq NMatrix[3.7, stype: stype] unless stype == :yale
68
- expect(@nm_2d.variance(1)).to eq NMatrix[[0.5], [0.5], stype: stype]
64
+ expect(nm_1d.variance).to eq NMatrix[3.7, stype: stype] unless stype == :yale
65
+ expect(nm_2d.variance(1)).to eq NMatrix[[0.5], [0.5], stype: stype]
69
66
  end
70
67
 
71
68
  it "should calculate the sum along the specified dimension" do
72
- expect(@nm_1d.sum).to eq NMatrix[11.0, stype: stype] unless stype == :yale
73
- expect(@nm_2d.sum).to eq NMatrix[[2.0, 4.0], stype: stype]
69
+ expect(nm_1d.sum).to eq NMatrix[11.0, stype: stype] unless stype == :yale
70
+ expect(nm_2d.sum).to eq NMatrix[[2.0, 4.0], stype: stype]
74
71
  end
75
72
 
76
73
  it "should calculate the standard deviation along the specified dimension" do
77
- expect(@nm_1d.std).to eq NMatrix[Math.sqrt(3.7), stype: stype] unless stype == :yale
78
- expect(@nm_2d.std(1)).to eq NMatrix[[Math.sqrt(0.5)], [Math.sqrt(0.5)], stype: stype]
74
+ expect(nm_1d.std).to eq NMatrix[Math.sqrt(3.7), stype: stype] unless stype == :yale
75
+ expect(nm_2d.std(1)).to eq NMatrix[[Math.sqrt(0.5)], [Math.sqrt(0.5)], stype: stype]
79
76
  end
80
77
 
81
78
  it "should raise an ArgumentError when any invalid dimension is provided" do
82
- expect { @nm_1d.mean(3) }.to raise_exception(RangeError) unless stype == :yale
83
- expect { @nm_2d.mean(3) }.to raise_exception(RangeError)
79
+ expect { nm_1d.mean(3) }.to raise_exception(RangeError) unless stype == :yale
80
+ expect { nm_2d.mean(3) }.to raise_exception(RangeError)
84
81
  end
85
82
 
86
83
  it "should convert to float if it contains only a single element" do
@@ -90,65 +87,64 @@ describe "Statistical functions" do
90
87
  end
91
88
 
92
89
  it "should raise an index error if it contains more than a single element" do
93
- expect { @nm_1d.to_f }.to raise_error(IndexError) unless stype == :yale
94
- expect { @nm_2d.to_f }.to raise_error(IndexError)
90
+ expect { nm_1d.to_f }.to raise_error(IndexError) unless stype == :yale
91
+ expect { nm_2d.to_f }.to raise_error(IndexError)
95
92
  end
96
93
 
97
94
  it "should map a block to all elements" do
98
- #binding.pry if stype == :list
99
- expect(@nm_1d.map { |e| e ** 2 }).to eq NMatrix[25.0,0.0,1.0,4.0,9.0, stype: stype] unless stype == :yale
100
- expect(@nm_2d.map { |e| e ** 2 }).to eq NMatrix[[0.0,1.0],[4.0,9.0], stype: stype]
95
+ expect(nm_1d.map { |e| e ** 2 }).to eq NMatrix[25.0,0.0,1.0,4.0,9.0, stype: stype] unless stype == :yale
96
+ expect(nm_2d.map { |e| e ** 2 }).to eq NMatrix[[0.0,1.0],[4.0,9.0], stype: stype]
101
97
  end
102
98
 
103
99
  it "should map! a block to all elements in place" do
104
100
  fct = Proc.new { |e| e ** 2 }
105
101
  unless stype == :yale then
106
- expected1 = @nm_1d.map &fct
107
- @nm_1d.map! &fct
108
- expect(@nm_1d).to eq expected1
102
+ expected1 = nm_1d.map(&fct)
103
+ nm_1d.map!(&fct)
104
+ expect(nm_1d).to eq expected1
109
105
  end
110
- expected2 = @nm_2d.map &fct
111
- @nm_2d.map! &fct
112
- expect(@nm_2d).to eq expected2
106
+ expected2 = nm_2d.map(&fct)
107
+ nm_2d.map!(&fct)
108
+ expect(nm_2d).to eq expected2
113
109
  end
114
110
 
115
111
  it "should return an enumerator for map without a block" do
116
- expect(@nm_2d.map).to be_a Enumerator
112
+ expect(nm_2d.map).to be_a Enumerator
117
113
  end
118
114
 
119
115
  it "should return an enumerator for reduce without a block" do
120
- expect(@nm_2d.reduce_along_dim(0)).to be_a Enumerator
116
+ expect(nm_2d.reduce_along_dim(0)).to be_a Enumerator
121
117
  end
122
118
 
123
119
  it "should return an enumerator for each_along_dim without a block" do
124
- expect(@nm_2d.each_along_dim(0)).to be_a Enumerator
120
+ expect(nm_2d.each_along_dim(0)).to be_a Enumerator
125
121
  end
126
122
 
127
123
  it "should iterate correctly for map without a block" do
128
- en = @nm_1d.map unless stype == :yale
129
- expect(en.each { |e| e**2 }).to eq @nm_1d.map { |e| e**2 } unless stype == :yale
130
- en = @nm_2d.map
131
- expect(en.each { |e| e**2 }).to eq @nm_2d.map { |e| e**2 }
124
+ en = nm_1d.map unless stype == :yale
125
+ expect(en.each { |e| e**2 }).to eq nm_1d.map { |e| e**2 } unless stype == :yale
126
+ en = nm_2d.map
127
+ expect(en.each { |e| e**2 }).to eq nm_2d.map { |e| e**2 }
132
128
  end
133
129
 
134
130
  it "should iterate correctly for reduce without a block" do
135
131
  unless stype == :yale then
136
- en = @nm_1d.reduce_along_dim(0, 1.0)
132
+ en = nm_1d.reduce_along_dim(0, 1.0)
137
133
  expect(en.each { |a, e| a+e }.to_f).to eq 12
138
134
  end
139
- en = @nm_2d.reduce_along_dim(1, 1.0)
135
+ en = nm_2d.reduce_along_dim(1, 1.0)
140
136
  expect(en.each { |a, e| a+e }).to eq NMatrix[[2.0],[6.0], stype: stype]
141
137
  end
142
138
 
143
139
  it "should iterate correctly for each_along_dim without a block" do
144
140
  unless stype == :yale then
145
- res = NMatrix.zeros_like(@nm_1d[0...1])
146
- en = @nm_1d.each_along_dim(0)
141
+ res = NMatrix.zeros_like(nm_1d[0...1])
142
+ en = nm_1d.each_along_dim(0)
147
143
  en.each { |e| res += e }
148
144
  expect(res.to_f).to eq 11
149
145
  end
150
- res = NMatrix.zeros_like (@nm_2d[0...2, 0])
151
- en = @nm_2d.each_along_dim(1)
146
+ res = NMatrix.zeros_like (nm_2d[0...2, 0])
147
+ en = nm_2d.each_along_dim(1)
152
148
  en.each { |e| res += e }
153
149
  expect(res).to eq NMatrix[[1.0], [5.0], stype: stype]
154
150
  end
@@ -167,7 +163,6 @@ describe "Statistical functions" do
167
163
  acc
168
164
  end
169
165
 
170
- m = NMatrix.new([2,3], [1,2,3,3,4,5], dtype: :complex128, stype: stype)
171
166
  m.reduce_along_dim(1, 0.0) do |acc, sub_m|
172
167
  expect(sub_m.dtype).to eq :complex128
173
168
  acc