nmatrix-fftw 0.2.1
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.
- checksums.yaml +7 -0
- data/ext/nmatrix/data/complex.h +388 -0
- data/ext/nmatrix/data/data.h +652 -0
- data/ext/nmatrix/data/meta.h +64 -0
- data/ext/nmatrix/data/ruby_object.h +389 -0
- data/ext/nmatrix/math/asum.h +120 -0
- data/ext/nmatrix/math/cblas_enums.h +36 -0
- data/ext/nmatrix/math/cblas_templates_core.h +507 -0
- data/ext/nmatrix/math/gemm.h +241 -0
- data/ext/nmatrix/math/gemv.h +178 -0
- data/ext/nmatrix/math/getrf.h +255 -0
- data/ext/nmatrix/math/getrs.h +121 -0
- data/ext/nmatrix/math/imax.h +79 -0
- data/ext/nmatrix/math/laswp.h +165 -0
- data/ext/nmatrix/math/long_dtype.h +49 -0
- data/ext/nmatrix/math/math.h +745 -0
- data/ext/nmatrix/math/nrm2.h +160 -0
- data/ext/nmatrix/math/rot.h +117 -0
- data/ext/nmatrix/math/rotg.h +106 -0
- data/ext/nmatrix/math/scal.h +71 -0
- data/ext/nmatrix/math/trsm.h +332 -0
- data/ext/nmatrix/math/util.h +148 -0
- data/ext/nmatrix/nm_memory.h +60 -0
- data/ext/nmatrix/nmatrix.h +438 -0
- data/ext/nmatrix/ruby_constants.h +106 -0
- data/ext/nmatrix/storage/common.h +177 -0
- data/ext/nmatrix/storage/dense/dense.h +129 -0
- data/ext/nmatrix/storage/list/list.h +138 -0
- data/ext/nmatrix/storage/storage.h +99 -0
- data/ext/nmatrix/storage/yale/class.h +1139 -0
- data/ext/nmatrix/storage/yale/iterators/base.h +143 -0
- data/ext/nmatrix/storage/yale/iterators/iterator.h +131 -0
- data/ext/nmatrix/storage/yale/iterators/row.h +450 -0
- data/ext/nmatrix/storage/yale/iterators/row_stored.h +140 -0
- data/ext/nmatrix/storage/yale/iterators/row_stored_nd.h +169 -0
- data/ext/nmatrix/storage/yale/iterators/stored_diagonal.h +124 -0
- data/ext/nmatrix/storage/yale/math/transpose.h +110 -0
- data/ext/nmatrix/storage/yale/yale.h +203 -0
- data/ext/nmatrix/types.h +55 -0
- data/ext/nmatrix/util/io.h +115 -0
- data/ext/nmatrix/util/sl_list.h +144 -0
- data/ext/nmatrix/util/util.h +78 -0
- data/ext/nmatrix_fftw/extconf.rb +122 -0
- data/ext/nmatrix_fftw/nmatrix_fftw.cpp +274 -0
- data/lib/nmatrix/fftw.rb +343 -0
- data/spec/00_nmatrix_spec.rb +736 -0
- data/spec/01_enum_spec.rb +190 -0
- data/spec/02_slice_spec.rb +389 -0
- data/spec/03_nmatrix_monkeys_spec.rb +78 -0
- data/spec/2x2_dense_double.mat +0 -0
- data/spec/4x4_sparse.mat +0 -0
- data/spec/4x5_dense.mat +0 -0
- data/spec/blas_spec.rb +193 -0
- data/spec/elementwise_spec.rb +303 -0
- data/spec/homogeneous_spec.rb +99 -0
- data/spec/io/fortran_format_spec.rb +88 -0
- data/spec/io/harwell_boeing_spec.rb +98 -0
- data/spec/io/test.rua +9 -0
- data/spec/io_spec.rb +149 -0
- data/spec/lapack_core_spec.rb +482 -0
- data/spec/leakcheck.rb +16 -0
- data/spec/math_spec.rb +807 -0
- data/spec/nmatrix_yale_resize_test_associations.yaml +2802 -0
- data/spec/nmatrix_yale_spec.rb +286 -0
- data/spec/plugins/fftw/fftw_spec.rb +348 -0
- data/spec/rspec_monkeys.rb +56 -0
- data/spec/rspec_spec.rb +34 -0
- data/spec/shortcuts_spec.rb +310 -0
- data/spec/slice_set_spec.rb +157 -0
- data/spec/spec_helper.rb +149 -0
- data/spec/stat_spec.rb +203 -0
- data/spec/test.pcd +20 -0
- data/spec/utm5940.mtx +83844 -0
- metadata +151 -0
@@ -0,0 +1,99 @@
|
|
1
|
+
# = NMatrix
|
2
|
+
#
|
3
|
+
# A linear algebra library for scientific computation in Ruby.
|
4
|
+
# NMatrix is part of SciRuby.
|
5
|
+
#
|
6
|
+
# NMatrix was originally inspired by and derived from NArray, by
|
7
|
+
# Masahiro Tanaka: http://narray.rubyforge.org
|
8
|
+
#
|
9
|
+
# == Copyright Information
|
10
|
+
#
|
11
|
+
# SciRuby is Copyright (c) 2010 - 2014, Ruby Science Foundation
|
12
|
+
# NMatrix is Copyright (c) 2012 - 2014, John Woods and the Ruby Science Foundation
|
13
|
+
#
|
14
|
+
# Please see LICENSE.txt for additional copyright notices.
|
15
|
+
#
|
16
|
+
# == Contributing
|
17
|
+
#
|
18
|
+
# By contributing source code to SciRuby, you agree to be bound by
|
19
|
+
# our Contributor Agreement:
|
20
|
+
#
|
21
|
+
# * https://github.com/SciRuby/sciruby/wiki/Contributor-Agreement
|
22
|
+
#
|
23
|
+
# == homogeneous_spec.rb
|
24
|
+
#
|
25
|
+
# Specs for the homogeneous transformation matrix methods.
|
26
|
+
#
|
27
|
+
|
28
|
+
require 'spec_helper'
|
29
|
+
require "./lib/nmatrix/homogeneous.rb"
|
30
|
+
|
31
|
+
require 'pry'
|
32
|
+
|
33
|
+
describe 'NMatrix' do
|
34
|
+
context ".x_rotation" do
|
35
|
+
it "should generate a matrix representing a rotation about the x axis" do
|
36
|
+
x = NMatrix.x_rotation(Math::PI/6)
|
37
|
+
expect(x).to be_within(1e-8).of(NMatrix.new([4,4], [1.0, 0.0, 0.0, 0.0,
|
38
|
+
0.0, Math.cos(Math::PI/6), -0.5, 0.0,
|
39
|
+
0.0, 0.5, Math.cos(Math::PI/6), 0.0,
|
40
|
+
0.0, 0.0, 0.0, 1.0] ))
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
context ".y_rotation" do
|
46
|
+
it "should generate a matrix representing a rotation about the y axis" do
|
47
|
+
y = NMatrix.y_rotation(Math::PI/6)
|
48
|
+
expect(y).to be_within(1e-8).of(NMatrix.new([4,4], [Math.cos(Math::PI/6), 0.0, 0.5, 0.0,
|
49
|
+
0.0, 1.0, 0.0, 0.0,
|
50
|
+
-0.5, 0.0, Math.cos(Math::PI/6), 0.0,
|
51
|
+
0.0, 0.0, 0.0, 1.0] ))
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context ".z_rotation" do
|
56
|
+
it "should generate a matrix representing a rotation about the z axis" do
|
57
|
+
z = NMatrix.z_rotation(Math::PI/6)
|
58
|
+
expect(z).to be_within(1e-8).of(NMatrix.new([4,4], [Math.cos(Math::PI/6), -0.5, 0.0, 0.0,
|
59
|
+
0.5, Math.cos(Math::PI/6), 0.0, 0.0,
|
60
|
+
0.0, 0.0, 1.0, 0.0,
|
61
|
+
0.0, 0.0, 0.0, 1.0] ))
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context ".translation" do
|
66
|
+
it "should generate a translation matrix from an Array" do
|
67
|
+
t = NMatrix.translation([4,5,6])
|
68
|
+
expect(t).to be_within(1e-8).of(NMatrix.new([4,4], [1, 0, 0, 4,
|
69
|
+
0, 1, 0, 5,
|
70
|
+
0, 0, 1, 6,
|
71
|
+
0, 0, 0, 1] ))
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should generate a translation matrix from x, y, and z values" do
|
75
|
+
t = NMatrix.translation(4,5,6)
|
76
|
+
expect(t).to be_within(1e-8).of(NMatrix.new([4,4], [1, 0, 0, 4,
|
77
|
+
0, 1, 0, 5,
|
78
|
+
0, 0, 1, 6,
|
79
|
+
0, 0, 0, 1] ))
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should generate a translation matrix from an NMatrix with correctly inferred dtype" do
|
83
|
+
t = NMatrix.translation(NMatrix.new([3,1], [4,5,6], dtype: :float64) )
|
84
|
+
expect(t).to be_within(1e-8).of(NMatrix.new([4,4], [1, 0, 0, 4,
|
85
|
+
0, 1, 0, 5,
|
86
|
+
0, 0, 1, 6,
|
87
|
+
0, 0, 0, 1] ))
|
88
|
+
expect(t.dtype).to be(:float64)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context "#quaternion" do
|
93
|
+
it "should generate a singularity-free quaternion" do
|
94
|
+
transform = NMatrix.new([4,4], [-0.9995825,-0.02527934,-0.0139845,50.61761,-0.02732551,0.9844284,0.1736463,-22.95566,0.009376526,0.1739562,-0.9847089,7.1521,0,0,0,1])
|
95
|
+
q = transform.quaternion
|
96
|
+
expect(Math.sqrt(q[0]**2 + q[1]**2 + q[2]**2 + q[3]**2)).to be_within(1e-6).of(1.0)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# = NMatrix
|
2
|
+
#
|
3
|
+
# A linear algebra library for scientific computation in Ruby.
|
4
|
+
# NMatrix is part of SciRuby.
|
5
|
+
#
|
6
|
+
# NMatrix was originally inspired by and derived from NArray, by
|
7
|
+
# Masahiro Tanaka: http://narray.rubyforge.org
|
8
|
+
#
|
9
|
+
# == Copyright Information
|
10
|
+
#
|
11
|
+
# SciRuby is Copyright (c) 2010 - 2014, Ruby Science Foundation
|
12
|
+
# NMatrix is Copyright (c) 2012 - 2014, John Woods and the Ruby Science Foundation
|
13
|
+
#
|
14
|
+
# Please see LICENSE.txt for additional copyright notices.
|
15
|
+
#
|
16
|
+
# == Contributing
|
17
|
+
#
|
18
|
+
# By contributing source code to SciRuby, you agree to be bound by
|
19
|
+
# our Contributor Agreement:
|
20
|
+
#
|
21
|
+
# * https://github.com/SciRuby/sciruby/wiki/Contributor-Agreement
|
22
|
+
#
|
23
|
+
# == fortran_format_spec.rb
|
24
|
+
#
|
25
|
+
# Basic tests for NMatrix::IO::FortranFormat.
|
26
|
+
#
|
27
|
+
|
28
|
+
require './lib/nmatrix'
|
29
|
+
|
30
|
+
describe NMatrix::IO::FortranFormat do
|
31
|
+
it "parses integer FORTRAN formats" do
|
32
|
+
int_fmt = NMatrix::IO::FortranFormat::Reader.new('(16I5)').parse
|
33
|
+
|
34
|
+
expect(int_fmt[:format_code]).to eq "INT_ID"
|
35
|
+
expect(int_fmt[:repeat]) .to eq 16
|
36
|
+
expect(int_fmt[:field_width]).to eq 5
|
37
|
+
|
38
|
+
int_fmt = NMatrix::IO::FortranFormat::Reader.new('(I4)').parse
|
39
|
+
|
40
|
+
expect(int_fmt[:format_code]).to eq "INT_ID"
|
41
|
+
expect(int_fmt[:field_width]).to eq 4
|
42
|
+
end
|
43
|
+
|
44
|
+
it "parses floating point FORTRAN formats" do
|
45
|
+
fp_fmt = NMatrix::IO::FortranFormat::Reader.new('(10F7.1)').parse
|
46
|
+
|
47
|
+
expect(fp_fmt[:format_code]) .to eq "FP_ID"
|
48
|
+
expect(fp_fmt[:repeat]) .to eq 10
|
49
|
+
expect(fp_fmt[:field_width]) .to eq 7
|
50
|
+
expect(fp_fmt[:post_decimal_width]).to eq 1
|
51
|
+
|
52
|
+
fp_fmt = NMatrix::IO::FortranFormat::Reader.new('(F4.2)').parse
|
53
|
+
|
54
|
+
expect(fp_fmt[:format_code]) .to eq "FP_ID"
|
55
|
+
expect(fp_fmt[:field_width]) .to eq 4
|
56
|
+
expect(fp_fmt[:post_decimal_width]).to eq 2
|
57
|
+
end
|
58
|
+
|
59
|
+
it "parses exponential FORTRAN formats" do
|
60
|
+
exp_fmt = NMatrix::IO::FortranFormat::Reader.new('(2E8.3E3)').parse
|
61
|
+
|
62
|
+
expect(exp_fmt[:format_code]) .to eq "EXP_ID"
|
63
|
+
expect(exp_fmt[:repeat]) .to eq 2
|
64
|
+
expect(exp_fmt[:field_width]) .to eq 8
|
65
|
+
expect(exp_fmt[:post_decimal_width]).to eq 3
|
66
|
+
expect(exp_fmt[:exponent_width]) .to eq 3
|
67
|
+
|
68
|
+
exp_fmt = NMatrix::IO::FortranFormat::Reader.new('(3E3.6)').parse
|
69
|
+
|
70
|
+
expect(exp_fmt[:format_code]) .to eq "EXP_ID"
|
71
|
+
expect(exp_fmt[:repeat]) .to eq 3
|
72
|
+
expect(exp_fmt[:field_width]) .to eq 3
|
73
|
+
expect(exp_fmt[:post_decimal_width]).to eq 6
|
74
|
+
|
75
|
+
exp_fmt = NMatrix::IO::FortranFormat::Reader.new('(E4.5)').parse
|
76
|
+
expect(exp_fmt[:format_code]) .to eq "EXP_ID"
|
77
|
+
expect(exp_fmt[:field_width]) .to eq 4
|
78
|
+
expect(exp_fmt[:post_decimal_width]).to eq 5
|
79
|
+
end
|
80
|
+
|
81
|
+
['I3', '(F4)', '(E3.', '(E4.E5)'].each do |bad_format|
|
82
|
+
it "doesn't let bad input through : #{bad_format}" do
|
83
|
+
expect {
|
84
|
+
NMatrix::IO::FortranFormat::Reader.new(bad_format).parse
|
85
|
+
}.to raise_error(IOError)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# = NMatrix
|
2
|
+
#
|
3
|
+
# A linear algebra library for scientific computation in Ruby.
|
4
|
+
# NMatrix is part of SciRuby.
|
5
|
+
#
|
6
|
+
# NMatrix was originally inspired by and derived from NArray, by
|
7
|
+
# Masahiro Tanaka: http://narray.rubyforge.org
|
8
|
+
#
|
9
|
+
# == Copyright Information
|
10
|
+
#
|
11
|
+
# SciRuby is Copyright (c) 2010 - 2014, Ruby Science Foundation
|
12
|
+
# NMatrix is Copyright (c) 2012 - 2014, John Woods and the Ruby Science Foundation
|
13
|
+
#
|
14
|
+
# Please see LICENSE.txt for additional copyright notices.
|
15
|
+
#
|
16
|
+
# == Contributing
|
17
|
+
#
|
18
|
+
# By contributing source code to SciRuby, you agree to be bound by
|
19
|
+
# our Contributor Agreement:
|
20
|
+
#
|
21
|
+
# * https://github.com/SciRuby/sciruby/wiki/Contributor-Agreement
|
22
|
+
#
|
23
|
+
# == io_spec.rb
|
24
|
+
#
|
25
|
+
# Basic tests for NMatrix::IO::HarwelBoeing.
|
26
|
+
|
27
|
+
# TODO : After the fortran format thing is done
|
28
|
+
require 'spec_helper'
|
29
|
+
require "./lib/nmatrix"
|
30
|
+
|
31
|
+
describe NMatrix::IO::HarwellBoeing do
|
32
|
+
def check_file_header header
|
33
|
+
expect(header[:title]) .to eq("Title")
|
34
|
+
expect(header[:key]) .to eq("Key")
|
35
|
+
|
36
|
+
expect(header[:totcrd]) .to eq(5)
|
37
|
+
expect(header[:ptrcrd]) .to eq(1)
|
38
|
+
expect(header[:indcrd]) .to eq(1)
|
39
|
+
expect(header[:valcrd]) .to eq(3)
|
40
|
+
expect(header[:rhscrd]) .to eq(0)
|
41
|
+
|
42
|
+
expect(header[:mxtype]) .to eq('RUA')
|
43
|
+
expect(header[:nrow]) .to eq(5)
|
44
|
+
expect(header[:ncol]) .to eq(5)
|
45
|
+
expect(header[:nnzero]) .to eq(13)
|
46
|
+
expect(header[:neltvl]) .to eq(0)
|
47
|
+
|
48
|
+
expect(header[:ptrfmt]) .to eq({
|
49
|
+
format_code: "INT_ID",
|
50
|
+
repeat: 6,
|
51
|
+
field_width: 3
|
52
|
+
})
|
53
|
+
expect(header[:indfmt]) .to eq({
|
54
|
+
format_code: "INT_ID",
|
55
|
+
repeat: 13,
|
56
|
+
field_width: 3
|
57
|
+
})
|
58
|
+
expect(header[:valfmt]) .to eq({
|
59
|
+
format_code: "EXP_ID",
|
60
|
+
repeat: 5,
|
61
|
+
field_width: 15,
|
62
|
+
post_decimal_width: 8
|
63
|
+
})
|
64
|
+
expect(header[:rhsfmt]) .to eq({
|
65
|
+
format_code: "EXP_ID",
|
66
|
+
repeat: 5,
|
67
|
+
field_width: 15,
|
68
|
+
post_decimal_width: 8
|
69
|
+
})
|
70
|
+
end
|
71
|
+
|
72
|
+
it "loads a Harwell Boeing file values and header (currently real only)" do
|
73
|
+
n, h = NMatrix::IO::HarwellBoeing.load("spec/io/test.rua")
|
74
|
+
|
75
|
+
expect(n.is_a? NMatrix).to eq(true)
|
76
|
+
expect(n.cols) .to eq(5)
|
77
|
+
expect(n.rows) .to eq(5)
|
78
|
+
|
79
|
+
expect(n[0,0]) .to eq(11)
|
80
|
+
expect(n[4,4]) .to eq(55)
|
81
|
+
|
82
|
+
expect(h.is_a? Hash).to eq(true)
|
83
|
+
check_file_header(h)
|
84
|
+
end
|
85
|
+
|
86
|
+
it "loads only the header of the file when specified" do
|
87
|
+
h = NMatrix::IO::HarwellBoeing.load("spec/io/test.rua", header: true)
|
88
|
+
|
89
|
+
expect(h.is_a? Hash).to eq(true)
|
90
|
+
check_file_header(h)
|
91
|
+
end
|
92
|
+
|
93
|
+
it "raises error for wrong Harwell Boeing file name" do
|
94
|
+
expect{
|
95
|
+
NMatrix::IO::HarwellBoeing.load("spec/io/wrong.afx")
|
96
|
+
}.to raise_error(IOError)
|
97
|
+
end
|
98
|
+
end
|
data/spec/io/test.rua
ADDED
data/spec/io_spec.rb
ADDED
@@ -0,0 +1,149 @@
|
|
1
|
+
# = NMatrix
|
2
|
+
#
|
3
|
+
# A linear algebra library for scientific computation in Ruby.
|
4
|
+
# NMatrix is part of SciRuby.
|
5
|
+
#
|
6
|
+
# NMatrix was originally inspired by and derived from NArray, by
|
7
|
+
# Masahiro Tanaka: http://narray.rubyforge.org
|
8
|
+
#
|
9
|
+
# == Copyright Information
|
10
|
+
#
|
11
|
+
# SciRuby is Copyright (c) 2010 - 2014, Ruby Science Foundation
|
12
|
+
# NMatrix is Copyright (c) 2012 - 2014, John Woods and the Ruby Science Foundation
|
13
|
+
#
|
14
|
+
# Please see LICENSE.txt for additional copyright notices.
|
15
|
+
#
|
16
|
+
# == Contributing
|
17
|
+
#
|
18
|
+
# By contributing source code to SciRuby, you agree to be bound by
|
19
|
+
# our Contributor Agreement:
|
20
|
+
#
|
21
|
+
# * https://github.com/SciRuby/sciruby/wiki/Contributor-Agreement
|
22
|
+
#
|
23
|
+
# == io_spec.rb
|
24
|
+
#
|
25
|
+
# Basic tests for NMatrix::IO.
|
26
|
+
#
|
27
|
+
require "tmpdir" # Used to avoid cluttering the repository.
|
28
|
+
require 'spec_helper'
|
29
|
+
require "./lib/nmatrix"
|
30
|
+
|
31
|
+
describe NMatrix::IO do
|
32
|
+
let(:tmp_dir) { Dir.mktmpdir }
|
33
|
+
let(:test_out) { File.join(tmp_dir, 'test-out') }
|
34
|
+
|
35
|
+
it "repacks a string" do
|
36
|
+
expect(NMatrix::IO::Matlab.repack("hello", :miUINT8, :byte)).to eq("hello")
|
37
|
+
end
|
38
|
+
|
39
|
+
it "creates yale from internal byte-string function" do
|
40
|
+
ia = NMatrix::IO::Matlab.repack("\0\1\3\3\4", :miUINT8, :itype)
|
41
|
+
ja = NMatrix::IO::Matlab.repack("\0\1\3\0\0\0\0\0\0\0\0", :miUINT8, :itype)
|
42
|
+
n = NMatrix.new(:yale, [4,4], :byte, ia, ja, "\2\3\5\4", :byte)
|
43
|
+
expect(n[0,0]).to eq(2)
|
44
|
+
expect(n[1,1]).to eq(3)
|
45
|
+
expect(n[1,3]).to eq(5)
|
46
|
+
expect(n[3,0]).to eq(4)
|
47
|
+
expect(n[2,2]).to eq(0)
|
48
|
+
expect(n[3,3]).to eq(0)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "reads MATLAB .mat file containing a single square sparse matrix" do
|
52
|
+
# Note: same matrix as above
|
53
|
+
n = NMatrix::IO::Matlab.load_mat("spec/4x4_sparse.mat")
|
54
|
+
expect(n[0,0]).to eq(2)
|
55
|
+
expect(n[1,1]).to eq(3)
|
56
|
+
expect(n[1,3]).to eq(5)
|
57
|
+
expect(n[3,0]).to eq(4)
|
58
|
+
expect(n[2,2]).to eq(0)
|
59
|
+
expect(n[3,3]).to eq(0)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "reads MATLAB .mat file containing a single dense integer matrix" do
|
63
|
+
n = NMatrix::IO::Matlab.load_mat("spec/4x5_dense.mat")
|
64
|
+
m = NMatrix.new([4,5], [16,17,18,19,20,15,14,13,12,11,6,7,8,9,10,5,4,3,2,1])
|
65
|
+
expect(n).to eq(m)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "reads MATLAB .mat file containing a single dense double matrix" do
|
69
|
+
n = NMatrix::IO::Matlab.load_mat("spec/2x2_dense_double.mat")
|
70
|
+
m = NMatrix.new(2, [1.1, 2.0, 3.0, 4.0], dtype: :float64)
|
71
|
+
expect(n).to eq(m)
|
72
|
+
end
|
73
|
+
|
74
|
+
it "loads and saves MatrixMarket .mtx file containing a single large sparse double matrix" do
|
75
|
+
pending "spec disabled because it's so slow"
|
76
|
+
n = NMatrix::IO::Market.load("spec/utm5940.mtx")
|
77
|
+
NMatrix::IO::Market.save(n, "spec/utm5940.saved.mtx")
|
78
|
+
expect(`wc -l spec/utm5940.mtx`.split[0]).to eq(`wc -l spec/utm5940.saved.mtx`.split[0])
|
79
|
+
end
|
80
|
+
|
81
|
+
it "loads a Point Cloud Library PCD file" do
|
82
|
+
n = NMatrix::IO::PointCloud.load("spec/test.pcd")
|
83
|
+
expect(n.column(0).sort.uniq.size).to eq(1)
|
84
|
+
expect(n.column(0).sort.uniq.first).to eq(207.008)
|
85
|
+
expect(n[0,3]).to eq(0)
|
86
|
+
end
|
87
|
+
|
88
|
+
it "raises an error when reading a non-existent file" do
|
89
|
+
fn = rand(10000000).to_i.to_s
|
90
|
+
while File.exist?(fn)
|
91
|
+
fn = rand(10000000).to_i.to_s
|
92
|
+
end
|
93
|
+
expect{ NMatrix.read(fn) }.to raise_error(Errno::ENOENT)
|
94
|
+
end
|
95
|
+
|
96
|
+
it "reads and writes NMatrix dense" do
|
97
|
+
n = NMatrix.new(:dense, [4,3], [0,1,2,3,4,5,6,7,8,9,10,11], :int32)
|
98
|
+
n.write(test_out)
|
99
|
+
|
100
|
+
m = NMatrix.read(test_out)
|
101
|
+
expect(n).to eq(m)
|
102
|
+
end
|
103
|
+
|
104
|
+
it "reads and writes NMatrix dense as symmetric" do
|
105
|
+
n = NMatrix.new(:dense, 3, [0,1,2,1,3,4,2,4,5], :int16)
|
106
|
+
n.write(test_out, :symmetric)
|
107
|
+
|
108
|
+
m = NMatrix.read(test_out)
|
109
|
+
expect(n).to eq(m)
|
110
|
+
end
|
111
|
+
|
112
|
+
it "reads and writes NMatrix dense as skew" do
|
113
|
+
n = NMatrix.new(:dense, 3, [0,1,2,-1,3,4,-2,-4,5], :float64)
|
114
|
+
n.write(test_out, :skew)
|
115
|
+
|
116
|
+
m = NMatrix.read(test_out)
|
117
|
+
expect(n).to eq(m)
|
118
|
+
end
|
119
|
+
|
120
|
+
it "reads and writes NMatrix dense as hermitian" do
|
121
|
+
n = NMatrix.new(:dense, 3, [0,1,2,1,3,4,2,4,5], :complex64)
|
122
|
+
n.write(test_out, :hermitian)
|
123
|
+
|
124
|
+
m = NMatrix.read(test_out)
|
125
|
+
expect(n).to eq(m)
|
126
|
+
end
|
127
|
+
|
128
|
+
it "reads and writes NMatrix dense as upper" do
|
129
|
+
n = NMatrix.new(:dense, 3, [-1,1,2,3,4,5,6,7,8], :int32)
|
130
|
+
n.write(test_out, :upper)
|
131
|
+
|
132
|
+
m = NMatrix.new(:dense, 3, [-1,1,2,0,4,5,0,0,8], :int32) # lower version of the same
|
133
|
+
|
134
|
+
o = NMatrix.read(test_out)
|
135
|
+
expect(o).to eq(m)
|
136
|
+
expect(o).not_to eq(n)
|
137
|
+
end
|
138
|
+
|
139
|
+
it "reads and writes NMatrix dense as lower" do
|
140
|
+
n = NMatrix.new(:dense, 3, [-1,1,2,3,4,5,6,7,8], :int32)
|
141
|
+
n.write(test_out, :lower)
|
142
|
+
|
143
|
+
m = NMatrix.new(:dense, 3, [-1,0,0,3,4,0,6,7,8], :int32) # lower version of the same
|
144
|
+
|
145
|
+
o = NMatrix.read(test_out)
|
146
|
+
expect(o).to eq(m)
|
147
|
+
expect(o).not_to eq(n)
|
148
|
+
end
|
149
|
+
end
|