nmatrix 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/Gemfile +5 -0
- data/History.txt +97 -0
- data/Manifest.txt +34 -7
- data/README.rdoc +13 -13
- data/Rakefile +36 -26
- data/ext/nmatrix/data/data.cpp +15 -2
- data/ext/nmatrix/data/data.h +4 -0
- data/ext/nmatrix/data/ruby_object.h +5 -14
- data/ext/nmatrix/extconf.rb +3 -2
- data/ext/nmatrix/{util/math.cpp → math.cpp} +296 -6
- data/ext/nmatrix/math/asum.h +143 -0
- data/ext/nmatrix/math/geev.h +82 -0
- data/ext/nmatrix/math/gemm.h +267 -0
- data/ext/nmatrix/math/gemv.h +208 -0
- data/ext/nmatrix/math/ger.h +96 -0
- data/ext/nmatrix/math/gesdd.h +80 -0
- data/ext/nmatrix/math/gesvd.h +78 -0
- data/ext/nmatrix/math/getf2.h +86 -0
- data/ext/nmatrix/math/getrf.h +240 -0
- data/ext/nmatrix/math/getri.h +107 -0
- data/ext/nmatrix/math/getrs.h +125 -0
- data/ext/nmatrix/math/idamax.h +86 -0
- data/ext/nmatrix/{util → math}/lapack.h +60 -356
- data/ext/nmatrix/math/laswp.h +165 -0
- data/ext/nmatrix/math/long_dtype.h +52 -0
- data/ext/nmatrix/math/math.h +1154 -0
- data/ext/nmatrix/math/nrm2.h +181 -0
- data/ext/nmatrix/math/potrs.h +125 -0
- data/ext/nmatrix/math/rot.h +141 -0
- data/ext/nmatrix/math/rotg.h +115 -0
- data/ext/nmatrix/math/scal.h +73 -0
- data/ext/nmatrix/math/swap.h +73 -0
- data/ext/nmatrix/math/trsm.h +383 -0
- data/ext/nmatrix/nmatrix.cpp +176 -152
- data/ext/nmatrix/nmatrix.h +1 -2
- data/ext/nmatrix/ruby_constants.cpp +9 -4
- data/ext/nmatrix/ruby_constants.h +1 -0
- data/ext/nmatrix/storage/dense.cpp +57 -41
- data/ext/nmatrix/storage/list.cpp +52 -50
- data/ext/nmatrix/storage/storage.cpp +59 -43
- data/ext/nmatrix/storage/yale.cpp +352 -333
- data/ext/nmatrix/storage/yale.h +4 -0
- data/lib/nmatrix.rb +2 -2
- data/lib/nmatrix/blas.rb +4 -4
- data/lib/nmatrix/enumerate.rb +241 -0
- data/lib/nmatrix/lapack.rb +54 -1
- data/lib/nmatrix/math.rb +462 -0
- data/lib/nmatrix/nmatrix.rb +210 -486
- data/lib/nmatrix/nvector.rb +0 -62
- data/lib/nmatrix/rspec.rb +75 -0
- data/lib/nmatrix/shortcuts.rb +136 -108
- data/lib/nmatrix/version.rb +1 -1
- data/spec/blas_spec.rb +20 -12
- data/spec/elementwise_spec.rb +22 -13
- data/spec/io_spec.rb +1 -0
- data/spec/lapack_spec.rb +197 -0
- data/spec/nmatrix_spec.rb +39 -38
- data/spec/nvector_spec.rb +3 -9
- data/spec/rspec_monkeys.rb +29 -0
- data/spec/rspec_spec.rb +34 -0
- data/spec/shortcuts_spec.rb +14 -16
- data/spec/slice_spec.rb +242 -186
- data/spec/spec_helper.rb +19 -0
- metadata +33 -5
- data/ext/nmatrix/util/math.h +0 -2612
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c1dc8a7e82a68a64da1bbf5f52107e064eb1f62
|
4
|
+
data.tar.gz: dd24f0e30a500f7a397ffcddb21c8cbb4fbfd3d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4368ba0104a54a72397beaa607cb58dc2c44763833ced2a532c6fe9626b3405d89c0d75b924950b19f02567530c1979dd9a1e463b1b0d812bc77e5b02812277e
|
7
|
+
data.tar.gz: c8a9094c70c19d7a45fc08f5237a123e6c694e32be358e9c39fa7d9e30c7f0c2e903674951f677d24d4fc725dee67d23b59669e1354b66cd96d8574de8312659
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/History.txt
CHANGED
@@ -281,3 +281,100 @@
|
|
281
281
|
|
282
282
|
* Repaired list matrix element-wise functions
|
283
283
|
|
284
|
+
=== 0.0.7 / 2013-08-22
|
285
|
+
|
286
|
+
* 6 major enhancements:
|
287
|
+
|
288
|
+
* Eliminated NVector in favor of NMatrix objects with
|
289
|
+
#effective_dim smaller than #dim; added NVector-like
|
290
|
+
functionality to NMatrix, sometimes with #respond_to? dependent
|
291
|
+
upon matrix dimensions; allowed for NVector.new to continue
|
292
|
+
to function as before, but now returns an NMatrix instead
|
293
|
+
|
294
|
+
* Began major re-factoring of headers for math.cpp
|
295
|
+
|
296
|
+
* Added two singular value decomposition functions for dense
|
297
|
+
NMatrix objects, #gesvd and #gesdd, for floating point and
|
298
|
+
complex dtypes
|
299
|
+
|
300
|
+
* Added additional slicing shorthand, which uses hashes (e.g.,
|
301
|
+
n[0=>3,2] for n[0..3,2]), which may eventually allow users to use
|
302
|
+
n[0:3,2] notation instead (needs Ruby core patch)
|
303
|
+
|
304
|
+
* #[] and #[]= calls no longer need index on those matrix shape
|
305
|
+
elements which are equal to 1 (e.g., vectors)
|
306
|
+
|
307
|
+
* Yale slicing-by-reference has been added
|
308
|
+
|
309
|
+
* 18 minor enhancements:
|
310
|
+
|
311
|
+
* Added user-friendly NMatrix::LAPACK::laswp method
|
312
|
+
|
313
|
+
* Added NMatrix#permute_columns! and NMatrix#permute_columns
|
314
|
+
|
315
|
+
* Added NMatrix#abs to compute element-wise absolute values, and
|
316
|
+
#abs_dtype to determine the dtype returned by a call to #abs on a
|
317
|
+
given matrix (needed for RSpec)
|
318
|
+
|
319
|
+
* Added NMatrix#size to compute the total number of cells in an
|
320
|
+
NMatrix object (solely accounting for the shape, not sparsity)
|
321
|
+
|
322
|
+
* Added RSpec monkey patches for #be_within to work with NMatrix
|
323
|
+
objects; usable by requiring "nmatrix/rspec"
|
324
|
+
|
325
|
+
* Added experimental NMatrix::LAPACK::lapack_gesvd function (which
|
326
|
+
does NOT depend upon CLAPACK) (by @ryanmt and @mohawkjohn)
|
327
|
+
|
328
|
+
* Added experimental non-LAPACK-dependent function
|
329
|
+
NMatrix::LAPACK::lapack_gesdd
|
330
|
+
|
331
|
+
* Added NMatrix#supershape method for getting the shape of a
|
332
|
+
slice's parent or other ancestor, which may be useful for calling
|
333
|
+
ATLAS and LAPACK functions on slices
|
334
|
+
|
335
|
+
* Aliased NMatrix[] to function like N[] shortcut for matrix
|
336
|
+
creation (by @agarie)
|
337
|
+
|
338
|
+
* Added #layer for matrices with dimension greater than two
|
339
|
+
(corresponds to #row and #column)
|
340
|
+
|
341
|
+
* Added #rank and #each_rank generics for #row/#column/#layer and
|
342
|
+
#each_row/#each_column/#each_layer respectively (#each_rank
|
343
|
+
replaces #each_along_dim)
|
344
|
+
|
345
|
+
* Replaced #reduce_along_dim with #inject_rank
|
346
|
+
|
347
|
+
* NMatrix#to_a now works for up to two dimensional matrices; and
|
348
|
+
returns a flattened array for single-row matrices
|
349
|
+
|
350
|
+
* NMatrix#to_flat_a now returns a flattened array of all entries
|
351
|
+
|
352
|
+
* Re-organized NMatrix Ruby sources into multiple files: math.rb
|
353
|
+
for instance methods which are mathematical in nature or are
|
354
|
+
essentially ATLAS/LAPACK/BLAS calls, enumerate.rb for methods
|
355
|
+
involving enumeration; and existing shortcuts.rb for convenience
|
356
|
+
functions and shortcut constructors, and nmatrix.rb for core
|
357
|
+
functionality (#inspect, #to_h, #to_a, #to_s, #pretty_print,
|
358
|
+
and so on)
|
359
|
+
|
360
|
+
* Improved #pretty_print, which now also prints layers (the third
|
361
|
+
dimension in a 3D matrix)
|
362
|
+
|
363
|
+
* Re-factored some of dense slicing to remove some redundant code
|
364
|
+
|
365
|
+
* Added shortcut functions #list?, #dense?, #yale? for quickly
|
366
|
+
testing matrix storage type
|
367
|
+
|
368
|
+
* 5 bug fixes:
|
369
|
+
|
370
|
+
* Fixed compilation problem involving <typeinfo> and <vector> STL
|
371
|
+
headers
|
372
|
+
|
373
|
+
* Fixed NMatrix#inverse problem with non-square matrices
|
374
|
+
|
375
|
+
* Fixed invalid read problem detected by Valgrind for
|
376
|
+
Yale element-wise subtraction in spec
|
377
|
+
|
378
|
+
* Fixed conversion from Ruby object to Complex and Rational
|
379
|
+
|
380
|
+
* Fixed memory leak in slicing
|
data/Manifest.txt
CHANGED
@@ -7,27 +7,32 @@ Rakefile
|
|
7
7
|
Gemfile
|
8
8
|
Guardfile
|
9
9
|
nmatrix.gemspec
|
10
|
+
spec/blas_spec.rb
|
11
|
+
spec/elementwise_spec.rb
|
10
12
|
spec/io_spec.rb
|
13
|
+
spec/lapack_spec.rb
|
11
14
|
spec/math_spec.rb
|
12
|
-
spec/nmatrix_spec.rb
|
13
15
|
spec/nmatrix_list_spec.rb
|
16
|
+
spec/nmatrix_spec.rb
|
14
17
|
spec/nmatrix_yale_spec.rb
|
15
18
|
spec/nvector_spec.rb
|
16
|
-
spec/
|
19
|
+
spec/rspec_spec.rb
|
17
20
|
spec/shortcuts_spec.rb
|
18
|
-
spec/
|
19
|
-
spec/blas_spec.rb
|
20
|
-
spec/lapack_spec.rb
|
21
|
+
spec/slice_spec.rb
|
21
22
|
spec/spec_helper.rb
|
22
23
|
lib/nmatrix.rb
|
24
|
+
lib/nmatrix/rspec.rb
|
23
25
|
lib/nmatrix/io/market.rb
|
24
26
|
lib/nmatrix/io/mat5_reader.rb
|
25
27
|
lib/nmatrix/io/mat_reader.rb
|
26
28
|
lib/nmatrix/blas.rb
|
29
|
+
lib/nmatrix/enumerate.rb
|
27
30
|
lib/nmatrix/lapack.rb
|
31
|
+
lib/nmatrix/math.rb
|
28
32
|
lib/nmatrix/monkeys.rb
|
29
33
|
lib/nmatrix/nmatrix.rb
|
30
34
|
lib/nmatrix/nvector.rb
|
35
|
+
lib/nmatrix/rspec.rb
|
31
36
|
lib/nmatrix/shortcuts.rb
|
32
37
|
lib/nmatrix/version.rb
|
33
38
|
lib/nmatrix/yale_functions.rb
|
@@ -46,12 +51,34 @@ ext/nmatrix/storage/storage.cpp
|
|
46
51
|
ext/nmatrix/storage/storage.h
|
47
52
|
ext/nmatrix/storage/yale.cpp
|
48
53
|
ext/nmatrix/storage/yale.h
|
49
|
-
ext/nmatrix/util/math.cpp
|
50
|
-
ext/nmatrix/util/math.h
|
51
54
|
ext/nmatrix/util/sl_list.cpp
|
52
55
|
ext/nmatrix/util/sl_list.h
|
53
56
|
ext/nmatrix/util/util.h
|
54
57
|
ext/nmatrix/util/lapack.h
|
58
|
+
ext/nmatrix/math.cpp
|
59
|
+
ext/nmatrix/math/asum.h
|
60
|
+
ext/nmatrix/math/geev.h
|
61
|
+
ext/nmatrix/math/gemm.h
|
62
|
+
ext/nmatrix/math/gemv.h
|
63
|
+
ext/nmatrix/math/ger.h
|
64
|
+
ext/nmatrix/math/gesdd.h
|
65
|
+
ext/nmatrix/math/gesvd.h
|
66
|
+
ext/nmatrix/math/getf2.h
|
67
|
+
ext/nmatrix/math/getrf.h
|
68
|
+
ext/nmatrix/math/getri.h
|
69
|
+
ext/nmatrix/math/getrs.h
|
70
|
+
ext/nmatrix/math/idamax.h
|
71
|
+
ext/nmatrix/math/lapack.h
|
72
|
+
ext/nmatrix/math/laswp.h
|
73
|
+
ext/nmatrix/math/long_dtype.h
|
74
|
+
ext/nmatrix/math/math.h
|
75
|
+
ext/nmatrix/math/nrm2.h
|
76
|
+
ext/nmatrix/math/potrs.h
|
77
|
+
ext/nmatrix/math/rot.h
|
78
|
+
ext/nmatrix/math/rotg.h
|
79
|
+
ext/nmatrix/math/scal.h
|
80
|
+
ext/nmatrix/math/swap.h
|
81
|
+
ext/nmatrix/math/trsm.h
|
55
82
|
ext/nmatrix/nmatrix.cpp
|
56
83
|
ext/nmatrix/nmatrix.h
|
57
84
|
ext/nmatrix/ruby_constants.cpp
|
data/README.rdoc
CHANGED
@@ -79,17 +79,17 @@ Read the instructions in +CONTRIBUTING.md+ if you want to help NMatrix.
|
|
79
79
|
|
80
80
|
== Features
|
81
81
|
|
82
|
-
The following features exist in the current version of NMatrix (0.0.
|
82
|
+
The following features exist in the current version of NMatrix (0.0.7):
|
83
83
|
|
84
84
|
* Matrix and vector storage containers: dense, yale, list (more to come)
|
85
85
|
* Data types: byte (uint8), int8, int16, int32, int64, float32, float64, complex64, complex128, rational64, rational128,
|
86
86
|
Ruby object
|
87
|
-
*
|
87
|
+
* Interconversion between storage and data types
|
88
88
|
* Element-wise and right-hand-scalar operations and comparisons for all matrix types
|
89
89
|
* Matrix-matrix multiplication for dense (with and without ATLAS) and yale
|
90
90
|
* Matrix-vector multiplication for dense (with and without ATLAS)
|
91
|
-
*
|
92
|
-
*
|
91
|
+
* Lots of enumerators (each, each_with_indices, each_row, each_column, each_rank, map, etc.)
|
92
|
+
* Matrix slicing by copy and reference (for dense, yale, and list)
|
93
93
|
* Native reading and writing of dense and yale matrices
|
94
94
|
* Optional compression for dense matrices with symmetry or triangularity: symmetric, skew, hermitian, upper, lower
|
95
95
|
* Matlab .MAT v5 file input
|
@@ -106,6 +106,9 @@ The following features exist in the current version of NMatrix (0.0.6):
|
|
106
106
|
* xGETRF
|
107
107
|
* xLASWP, xSCAL
|
108
108
|
* xLAUUM (no LAPACK needed, but BLAS dtypes only)
|
109
|
+
* LAPACK (non-ATLAS) access:
|
110
|
+
* xGESVD, xGESDD (singular value decomposition)
|
111
|
+
* xGEEV (eigenvalue decomposition of a asymmetric square matrices)
|
109
112
|
* LU decomposition
|
110
113
|
* Matrix inversions (requires LAPACK; BLAS dtypes only)
|
111
114
|
* Determinant calculation for BLAS dtypes
|
@@ -114,20 +117,17 @@ The following features exist in the current version of NMatrix (0.0.6):
|
|
114
117
|
|
115
118
|
=== Planned Features (Short-to-Medium Term)
|
116
119
|
|
117
|
-
|
120
|
+
We are nearly the release of NMatrix 0.1.0, our first beta.
|
118
121
|
|
119
|
-
|
120
|
-
|
121
|
-
*
|
122
|
-
*
|
123
|
-
* matrix
|
124
|
-
* calculation of additional norms
|
122
|
+
These are features planned for NMatrix 0.2.0:
|
123
|
+
|
124
|
+
* slice assignments (`x[1..3,0..4] = some_other_matrix`)
|
125
|
+
* LAPACK-free calculation of determinant, trace, and eigenvalues (characteristic polynomial)
|
126
|
+
* LAPACK-free matrix inversions
|
125
127
|
* tensor products
|
126
128
|
* principal component analysis (PCA)
|
127
129
|
* improved file I/O
|
128
130
|
* compression of yale symmetries in I/O
|
129
|
-
* operation scheduling
|
130
|
-
* parallelization of some types of operations
|
131
131
|
* optimization of non-BLAS data types on BLAS-like operations (e.g., matrix multiplication for rational numbers)
|
132
132
|
|
133
133
|
=== Warning
|
data/Rakefile
CHANGED
@@ -33,7 +33,8 @@ require 'rspec/core/rake_task'
|
|
33
33
|
require 'rspec/core'
|
34
34
|
require 'rspec/core/rake_task'
|
35
35
|
RSpec::Core::RakeTask.new(:spec) do |spec|
|
36
|
-
|
36
|
+
# Load nmatrix_spec first.
|
37
|
+
spec.pattern = FileList['spec/nmatrix_spec.rb', 'spec/**/*_spec.rb'].uniq
|
37
38
|
end
|
38
39
|
|
39
40
|
BASEDIR = Pathname( __FILE__ ).dirname.relative_path_from( Pathname.pwd )
|
@@ -69,23 +70,31 @@ task :pry do |task|
|
|
69
70
|
run *cmd
|
70
71
|
end
|
71
72
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
73
|
+
namespace :pry do
|
74
|
+
task :valgrind => [ :compile ] do |task|
|
75
|
+
cmd = [ 'valgrind' ] + VALGRIND_OPTIONS
|
76
|
+
cmd += ['ruby', '-Ilib:ext', "-r './lib/nmatrix.rb'", "-r 'pry'", "-e 'binding.pry'"]
|
77
|
+
run *cmd
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
namespace :console do
|
82
|
+
CONSOLE_CMD = ['irb', "-r './lib/nmatrix.rb'"]
|
83
|
+
desc "Run console under GDB."
|
84
|
+
task :gdb => [ :compile ] do |task|
|
85
|
+
cmd = [ 'gdb' ] + GDB_OPTIONS
|
86
|
+
cmd += [ '--args' ]
|
87
|
+
cmd += CONSOLE_CMD
|
88
|
+
run( *cmd )
|
89
|
+
end
|
90
|
+
|
91
|
+
desc "Run console under Valgrind."
|
92
|
+
task :valgrind => [ :compile ] do |task|
|
93
|
+
cmd = [ 'valgrind' ] + VALGRIND_OPTIONS
|
94
|
+
cmd += CONSOLE_CMD
|
95
|
+
run( *cmd )
|
96
|
+
end
|
97
|
+
end
|
89
98
|
|
90
99
|
task :default => :spec
|
91
100
|
|
@@ -98,7 +107,7 @@ namespace :spec do
|
|
98
107
|
# spurious (and eminently ignorable) warnings from the ruby
|
99
108
|
# interpreter
|
100
109
|
|
101
|
-
RSPEC_CMD = [ 'ruby', '-S', 'rspec', '-Ilib:ext', SPECDIR ]
|
110
|
+
RSPEC_CMD = [ 'ruby', '-S', 'rspec', '-Ilib:ext', "#{SPECDIR}/nmatrix_spec.rb #{SPECDIR}" ]
|
102
111
|
|
103
112
|
#desc "Run the spec for generator.rb"
|
104
113
|
#task :generator do |task|
|
@@ -107,7 +116,7 @@ namespace :spec do
|
|
107
116
|
|
108
117
|
desc "Run specs under GDB."
|
109
118
|
task :gdb => [ :compile ] do |task|
|
110
|
-
|
119
|
+
cmd = [ 'gdb' ] + GDB_OPTIONS
|
111
120
|
cmd += [ '--args' ]
|
112
121
|
cmd += RSPEC_CMD
|
113
122
|
run( *cmd )
|
@@ -116,22 +125,23 @@ namespace :spec do
|
|
116
125
|
desc "Run specs under cgdb."
|
117
126
|
task :cgdb => [ :compile ] do |task|
|
118
127
|
cmd = [ 'cgdb' ] + GDB_OPTIONS
|
119
|
-
|
120
|
-
|
121
|
-
|
128
|
+
cmd += [ '--args' ]
|
129
|
+
cmd += RSPEC_CMD
|
130
|
+
run( *cmd )
|
122
131
|
end
|
123
132
|
|
124
133
|
desc "Run specs under Valgrind."
|
125
134
|
task :valgrind => [ :compile ] do |task|
|
126
|
-
|
127
|
-
|
128
|
-
|
135
|
+
cmd = [ 'valgrind' ] + VALGRIND_OPTIONS
|
136
|
+
cmd += RSPEC_CMD
|
137
|
+
run( *cmd )
|
129
138
|
end
|
130
139
|
end
|
131
140
|
|
132
141
|
|
133
142
|
LEAKCHECK_CMD = [ 'ruby', '-Ilib:ext', "#{SPECDIR}/leakcheck.rb" ]
|
134
143
|
|
144
|
+
|
135
145
|
desc "Run leakcheck script."
|
136
146
|
task :leakcheck => [ :compile ] do |task|
|
137
147
|
cmd = [ 'valgrind' ] + VALGRIND_OPTIONS
|
data/ext/nmatrix/data/data.cpp
CHANGED
@@ -83,6 +83,8 @@ namespace nm {
|
|
83
83
|
break;
|
84
84
|
case T_FLOAT:
|
85
85
|
case T_RATIONAL:
|
86
|
+
case T_FIXNUM:
|
87
|
+
case T_BIGNUM:
|
86
88
|
r = NUM2DBL(other.rval);
|
87
89
|
i = 0.0;
|
88
90
|
break;
|
@@ -91,14 +93,16 @@ namespace nm {
|
|
91
93
|
}
|
92
94
|
}
|
93
95
|
|
96
|
+
|
94
97
|
template <typename Type>
|
95
98
|
Rational<Type>::Rational(const RubyObject& other) {
|
96
99
|
switch (TYPE(other.rval)) {
|
97
100
|
case T_RATIONAL:
|
98
|
-
n = NUM2LONG(rb_funcall(
|
99
|
-
d = NUM2LONG(rb_funcall(
|
101
|
+
n = NUM2LONG(rb_funcall(other.rval, rb_intern("numerator"), 0));
|
102
|
+
d = NUM2LONG(rb_funcall(other.rval, rb_intern("denominator"), 0));
|
100
103
|
break;
|
101
104
|
case T_FIXNUM:
|
105
|
+
case T_BIGNUM:
|
102
106
|
n = NUM2LONG(other.rval);
|
103
107
|
d = 1;
|
104
108
|
break;
|
@@ -340,5 +344,14 @@ void* rubyobj_to_cval(VALUE val, nm::dtype_t dtype) {
|
|
340
344
|
return ret_val;
|
341
345
|
}
|
342
346
|
|
347
|
+
void nm_init_data() {
|
348
|
+
nm::RubyObject obj(INT2FIX(1));
|
349
|
+
nm::Rational32 x(obj);
|
350
|
+
nm::Rational64 y(obj);
|
351
|
+
nm::Rational128 z(obj);
|
352
|
+
nm::Complex64 a(obj);
|
353
|
+
nm::Complex128 b(obj);
|
354
|
+
}
|
355
|
+
|
343
356
|
|
344
357
|
} // end of extern "C" block
|
data/ext/nmatrix/data/data.h
CHANGED
@@ -46,6 +46,8 @@
|
|
46
46
|
#include "ruby_object.h"
|
47
47
|
|
48
48
|
namespace nm {
|
49
|
+
|
50
|
+
|
49
51
|
/*
|
50
52
|
* Constants
|
51
53
|
*/
|
@@ -776,6 +778,8 @@ void rubyval_to_cval(VALUE val, nm::dtype_t dtype, void* loc);
|
|
776
778
|
nm::RubyObject rubyobj_from_cval(void* val, nm::dtype_t dtype);
|
777
779
|
nm::RubyObject rubyobj_from_cval_by_itype(void* val, nm::itype_t itype);
|
778
780
|
|
781
|
+
void nm_init_data();
|
782
|
+
|
779
783
|
} // end of extern "C" block
|
780
784
|
|
781
785
|
#endif // DATA_H
|
@@ -123,21 +123,12 @@ class RubyObject {
|
|
123
123
|
inline operator double() const { RETURN_OBJ2NUM(NUM2DBL) }
|
124
124
|
inline operator float() const { RETURN_OBJ2NUM(NUM2DBL) }
|
125
125
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
//template <typename IntType>
|
130
|
-
//inline operator Rational<typename std::enable_if<std::is_integral<IntType>::value, IntType>::type>&() const { static Rational<IntType> x = this->to<Rational<IntType> >(); return x; }
|
131
|
-
//inline operator Rational32() const { return this->to<Rational32>(); }
|
132
|
-
//inline operator Rational64() const { return this->to<Rational64>(); }
|
133
|
-
//inline operator Rational128() const { return this->to<Rational128>(); }
|
134
|
-
|
135
|
-
//template <typename FloatType>
|
136
|
-
//inline operator Complex<typename std::enable_if<std::is_floating_point<FloatType>::value, FloatType>::type>() const { return this->to<Complex<FloatType> >(); }
|
137
|
-
|
138
|
-
//template <typename FloatType>
|
139
|
-
//inline operator Complex<typename std::enable_if<std::is_floating_point<FloatType>::value, FloatType>::type>&() const { static Complex<FloatType> x = this->to<Complex<FloatType> >(); return x; }
|
126
|
+
inline operator Rational32() const { return this->to<Rational32>(); }
|
127
|
+
inline operator Rational64() const { return this->to<Rational64>(); }
|
128
|
+
inline operator Rational128() const { return this->to<Rational128>(); }
|
140
129
|
|
130
|
+
inline operator Complex64() const { return this->to<Complex64>(); }
|
131
|
+
inline operator Complex128() const { return this->to<Complex128>(); }
|
141
132
|
/*
|
142
133
|
* Copy constructors.
|
143
134
|
*/
|