nmatrix-atlas 0.2.0 → 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 +4 -4
- data/ext/nmatrix/data/complex.h +183 -159
- data/ext/nmatrix/data/data.h +306 -292
- data/ext/nmatrix/data/ruby_object.h +193 -193
- data/ext/nmatrix/math/math.h +3 -2
- data/ext/nmatrix/math/trsm.h +152 -152
- data/ext/nmatrix/nmatrix.h +30 -0
- data/ext/nmatrix/ruby_constants.h +35 -35
- data/ext/nmatrix/storage/common.h +4 -3
- data/ext/nmatrix/storage/dense/dense.h +8 -7
- data/ext/nmatrix/storage/list/list.h +7 -6
- data/ext/nmatrix/storage/storage.h +12 -11
- data/ext/nmatrix/storage/yale/class.h +2 -2
- data/ext/nmatrix/storage/yale/iterators/base.h +2 -1
- data/ext/nmatrix/storage/yale/iterators/iterator.h +2 -1
- data/ext/nmatrix/storage/yale/iterators/row.h +2 -1
- data/ext/nmatrix/storage/yale/iterators/row_stored.h +2 -1
- data/ext/nmatrix/storage/yale/iterators/row_stored_nd.h +1 -0
- data/ext/nmatrix/storage/yale/iterators/stored_diagonal.h +2 -1
- data/ext/nmatrix/storage/yale/yale.h +7 -6
- data/ext/nmatrix/types.h +3 -2
- data/ext/nmatrix/util/sl_list.h +19 -18
- data/ext/nmatrix_atlas/extconf.rb +11 -9
- data/ext/nmatrix_atlas/math_atlas.cpp +7 -7
- data/spec/00_nmatrix_spec.rb +6 -0
- data/spec/math_spec.rb +77 -0
- data/spec/spec_helper.rb +9 -0
- metadata +4 -4
@@ -32,6 +32,7 @@
|
|
32
32
|
* Standard Includes
|
33
33
|
*/
|
34
34
|
|
35
|
+
#include <ruby.h>
|
35
36
|
#include <cmath> // pow().
|
36
37
|
|
37
38
|
/*
|
@@ -57,9 +58,9 @@ struct STORAGE_PAIR {
|
|
57
58
|
};
|
58
59
|
|
59
60
|
struct SLICE {
|
60
|
-
size_t*
|
61
|
-
size_t*
|
62
|
-
bool
|
61
|
+
size_t* coords; // Coordinate of first element
|
62
|
+
size_t* lengths; // Lengths of slice
|
63
|
+
bool single; // true if all lengths equal to 1 (represents single matrix element)
|
63
64
|
};
|
64
65
|
|
65
66
|
/*
|
@@ -32,7 +32,8 @@
|
|
32
32
|
* Standard Includes
|
33
33
|
*/
|
34
34
|
|
35
|
-
#include <
|
35
|
+
#include <ruby.h>
|
36
|
+
#include <cstdlib>
|
36
37
|
|
37
38
|
/*
|
38
39
|
* Project Includes
|
@@ -69,10 +70,10 @@ extern "C" {
|
|
69
70
|
// Lifecycle //
|
70
71
|
///////////////
|
71
72
|
|
72
|
-
DENSE_STORAGE*
|
73
|
-
void
|
74
|
-
void
|
75
|
-
void
|
73
|
+
DENSE_STORAGE* nm_dense_storage_create(nm::dtype_t dtype, size_t* shape, size_t dim, void* elements, size_t elements_length);
|
74
|
+
void nm_dense_storage_delete(STORAGE* s);
|
75
|
+
void nm_dense_storage_delete_ref(STORAGE* s);
|
76
|
+
void nm_dense_storage_mark(STORAGE*);
|
76
77
|
void nm_dense_storage_register(const STORAGE* s);
|
77
78
|
void nm_dense_storage_unregister(const STORAGE* s);
|
78
79
|
|
@@ -86,8 +87,8 @@ VALUE nm_dense_map_pair(VALUE self, VALUE right);
|
|
86
87
|
VALUE nm_dense_map(VALUE self);
|
87
88
|
VALUE nm_dense_each(VALUE nmatrix);
|
88
89
|
VALUE nm_dense_each_with_indices(VALUE nmatrix);
|
89
|
-
void*
|
90
|
-
void*
|
90
|
+
void* nm_dense_storage_get(const STORAGE* s, SLICE* slice);
|
91
|
+
void* nm_dense_storage_ref(const STORAGE* s, SLICE* slice);
|
91
92
|
void nm_dense_storage_set(VALUE left, SLICE* slice, VALUE right);
|
92
93
|
|
93
94
|
///////////
|
@@ -33,7 +33,8 @@
|
|
33
33
|
* Standard Includes
|
34
34
|
*/
|
35
35
|
|
36
|
-
#include <
|
36
|
+
#include <ruby.h>
|
37
|
+
#include <cstdlib>
|
37
38
|
#include <list>
|
38
39
|
/*
|
39
40
|
* Project Includes
|
@@ -69,17 +70,17 @@ extern "C" {
|
|
69
70
|
// Lifecycle //
|
70
71
|
///////////////
|
71
72
|
|
72
|
-
LIST_STORAGE*
|
73
|
-
void
|
74
|
-
void
|
75
|
-
void
|
73
|
+
LIST_STORAGE* nm_list_storage_create(nm::dtype_t dtype, size_t* shape, size_t dim, void* init_val);
|
74
|
+
void nm_list_storage_delete(STORAGE* s);
|
75
|
+
void nm_list_storage_delete_ref(STORAGE* s);
|
76
|
+
void nm_list_storage_mark(STORAGE*);
|
76
77
|
void nm_list_storage_register(const STORAGE* s);
|
77
78
|
void nm_list_storage_unregister(const STORAGE* s);
|
78
79
|
void nm_list_storage_register_list(const LIST* l, size_t recursions);
|
79
80
|
void nm_list_storage_unregister_list(const LIST* l, size_t recursions);
|
80
81
|
void nm_list_storage_register_node(const NODE* n);
|
81
82
|
void nm_list_storage_unregister_node(const NODE* n);
|
82
|
-
void
|
83
|
+
void nm_list_storage_completely_unregister_node(const NODE* curr);
|
83
84
|
///////////////
|
84
85
|
// Accessors //
|
85
86
|
///////////////
|
@@ -34,6 +34,7 @@
|
|
34
34
|
* Standard Includes
|
35
35
|
*/
|
36
36
|
|
37
|
+
#include <ruby.h>
|
37
38
|
#include <cstdlib>
|
38
39
|
|
39
40
|
/*
|
@@ -53,10 +54,10 @@
|
|
53
54
|
* Macros
|
54
55
|
*/
|
55
56
|
|
56
|
-
#define NMATRIX_DTYPE_IS_COMPLEX(s)
|
57
|
-
#define NMATRIX_DTYPE_IS_FLOAT(s)
|
58
|
-
#define NMATRIX_DTYPE_IS_INTEGER(s)
|
59
|
-
#define NMATRIX_DTYPE_IS_RUBYOBJ(s)
|
57
|
+
#define NMATRIX_DTYPE_IS_COMPLEX(s) ((s->dtype == nm::COMPLEX64) or (s->dtype == nm::COMPLEX128))
|
58
|
+
#define NMATRIX_DTYPE_IS_FLOAT(s) ((s->dtype == nm::FLOAT32) or (s->dtype == nm::FLOAT64))
|
59
|
+
#define NMATRIX_DTYPE_IS_INTEGER(s) (s->dtype <= nm::INT64)
|
60
|
+
#define NMATRIX_DTYPE_IS_RUBYOBJ(s) (s->dtype == nm::RUBYOBJ)
|
60
61
|
|
61
62
|
|
62
63
|
/*
|
@@ -69,7 +70,7 @@
|
|
69
70
|
*/
|
70
71
|
|
71
72
|
namespace nm {
|
72
|
-
|
73
|
+
const int NUM_STYPES = 3;
|
73
74
|
}
|
74
75
|
|
75
76
|
extern "C" {
|
@@ -85,12 +86,12 @@ extern "C" {
|
|
85
86
|
// Copying and Casting //
|
86
87
|
/////////////////////////
|
87
88
|
|
88
|
-
STORAGE*
|
89
|
-
STORAGE*
|
90
|
-
STORAGE*
|
91
|
-
STORAGE*
|
92
|
-
STORAGE*
|
93
|
-
STORAGE*
|
89
|
+
STORAGE* nm_dense_storage_from_list(const STORAGE* right, nm::dtype_t l_dtype, void*);
|
90
|
+
STORAGE* nm_dense_storage_from_yale(const STORAGE* right, nm::dtype_t l_dtype, void*);
|
91
|
+
STORAGE* nm_list_storage_from_dense(const STORAGE* right, nm::dtype_t l_dtype, void*);
|
92
|
+
STORAGE* nm_list_storage_from_yale(const STORAGE* right, nm::dtype_t l_dtype, void*);
|
93
|
+
STORAGE* nm_yale_storage_from_list(const STORAGE* right, nm::dtype_t l_dtype, void*);
|
94
|
+
STORAGE* nm_yale_storage_from_dense(const STORAGE* right, nm::dtype_t l_dtype, void*);
|
94
95
|
|
95
96
|
} // end of extern "C" block
|
96
97
|
|
@@ -754,8 +754,8 @@ public:
|
|
754
754
|
nm_yale_storage_register(lhs);
|
755
755
|
for (size_t m = 0; m < size(); ++m) {
|
756
756
|
if (Yield) {
|
757
|
-
|
758
|
-
|
757
|
+
la[m] = rb_yield(nm::yale_storage::nm_rb_dereference(a(m)));
|
758
|
+
}
|
759
759
|
else la[m] = static_cast<E>(a(m));
|
760
760
|
}
|
761
761
|
nm_yale_storage_unregister(lhs);
|
@@ -29,6 +29,7 @@
|
|
29
29
|
#ifndef YALE_ITERATORS_BASE_H
|
30
30
|
# define YALE_ITERATORS_BASE_H
|
31
31
|
|
32
|
+
#include <ruby.h>
|
32
33
|
#include <type_traits>
|
33
34
|
#include <typeinfo>
|
34
35
|
#include <stdexcept>
|
@@ -139,4 +140,4 @@ public:
|
|
139
140
|
|
140
141
|
} } // end of namespace nm::yale_storage
|
141
142
|
|
142
|
-
#endif // YALE_ITERATORS_BASE_H
|
143
|
+
#endif // YALE_ITERATORS_BASE_H
|
@@ -29,6 +29,7 @@
|
|
29
29
|
#ifndef YALE_ITERATORS_ITERATOR_H
|
30
30
|
# define YALE_ITERATORS_ITERATOR_H
|
31
31
|
|
32
|
+
#include <ruby.h>
|
32
33
|
#include <type_traits>
|
33
34
|
#include <typeinfo>
|
34
35
|
|
@@ -127,4 +128,4 @@ public:
|
|
127
128
|
|
128
129
|
} } // end of namespace nm::yale_storage
|
129
130
|
|
130
|
-
#endif // YALE_ITERATORS_ITERATOR_H
|
131
|
+
#endif // YALE_ITERATORS_ITERATOR_H
|
@@ -31,6 +31,7 @@
|
|
31
31
|
#ifndef YALE_ITERATORS_ROW_H
|
32
32
|
# define YALE_ITERATORS_ROW_H
|
33
33
|
|
34
|
+
#include <ruby.h>
|
34
35
|
#include <stdexcept>
|
35
36
|
|
36
37
|
namespace nm { namespace yale_storage {
|
@@ -446,4 +447,4 @@ public:
|
|
446
447
|
|
447
448
|
} } // end of nm::yale_storage namespace
|
448
449
|
|
449
|
-
#endif // YALE_ITERATORS_ROW_H
|
450
|
+
#endif // YALE_ITERATORS_ROW_H
|
@@ -34,6 +34,7 @@
|
|
34
34
|
#ifndef YALE_ITERATORS_ROW_STORED_H
|
35
35
|
# define YALE_ITERATORS_ROW_STORED_H
|
36
36
|
|
37
|
+
#include <ruby.h>
|
37
38
|
#include <stdexcept>
|
38
39
|
|
39
40
|
namespace nm { namespace yale_storage {
|
@@ -136,4 +137,4 @@ public:
|
|
136
137
|
|
137
138
|
}} // end of namespace nm::yale_storage
|
138
139
|
|
139
|
-
#endif // YALE_ITERATORS_ROW_STORED_H
|
140
|
+
#endif // YALE_ITERATORS_ROW_STORED_H
|
@@ -29,6 +29,7 @@
|
|
29
29
|
#ifndef YALE_ITERATORS_STORED_DIAGONAL_H
|
30
30
|
# define YALE_ITERATORS_STORED_DIAGONAL_H
|
31
31
|
|
32
|
+
#include <ruby.h>
|
32
33
|
#include <type_traits>
|
33
34
|
#include <typeinfo>
|
34
35
|
|
@@ -120,4 +121,4 @@ public:
|
|
120
121
|
|
121
122
|
} } // end of namespace nm::yale_storage
|
122
123
|
|
123
|
-
#endif // YALE_ITERATORS_STORED_DIAGONAL_H
|
124
|
+
#endif // YALE_ITERATORS_STORED_DIAGONAL_H
|
@@ -42,6 +42,7 @@
|
|
42
42
|
* Standard Includes
|
43
43
|
*/
|
44
44
|
|
45
|
+
#include <ruby.h>
|
45
46
|
#include <limits> // for std::numeric_limits<T>::max()
|
46
47
|
#include <stdexcept>
|
47
48
|
|
@@ -84,15 +85,15 @@ extern "C" {
|
|
84
85
|
|
85
86
|
YALE_STORAGE* nm_yale_storage_create(nm::dtype_t dtype, size_t* shape, size_t dim, size_t init_capacity);
|
86
87
|
YALE_STORAGE* nm_yale_storage_create_from_old_yale(nm::dtype_t dtype, size_t* shape, char* ia, char* ja, char* a, nm::dtype_t from_dtype);
|
87
|
-
YALE_STORAGE*
|
88
|
+
YALE_STORAGE* nm_yale_storage_create_merged(const YALE_STORAGE* merge_template, const YALE_STORAGE* other);
|
88
89
|
void nm_yale_storage_delete(STORAGE* s);
|
89
90
|
void nm_yale_storage_delete_ref(STORAGE* s);
|
90
|
-
void
|
91
|
-
void
|
91
|
+
void nm_yale_storage_init(YALE_STORAGE* s, void* default_val);
|
92
|
+
void nm_yale_storage_mark(STORAGE*);
|
92
93
|
void nm_yale_storage_register(const STORAGE* s);
|
93
94
|
void nm_yale_storage_unregister(const STORAGE* s);
|
94
|
-
void
|
95
|
-
void
|
95
|
+
void nm_yale_storage_register_a(void* a, size_t size);
|
96
|
+
void nm_yale_storage_unregister_a(void* a, size_t size);
|
96
97
|
|
97
98
|
///////////////
|
98
99
|
// Accessors //
|
@@ -104,7 +105,7 @@ extern "C" {
|
|
104
105
|
VALUE nm_yale_stored_nondiagonal_each_with_indices(VALUE nmatrix);
|
105
106
|
VALUE nm_yale_each_ordered_stored_with_indices(VALUE nmatrix);
|
106
107
|
void* nm_yale_storage_get(const STORAGE* s, SLICE* slice);
|
107
|
-
void*
|
108
|
+
void* nm_yale_storage_ref(const STORAGE* s, SLICE* slice);
|
108
109
|
void nm_yale_storage_set(VALUE left, SLICE* slice, VALUE right);
|
109
110
|
|
110
111
|
//char nm_yale_storage_vector_insert(YALE_STORAGE* s, size_t pos, size_t* js, void* vals, size_t n, bool struct_only, nm::dtype_t dtype, nm::itype_t itype);
|
data/ext/nmatrix/types.h
CHANGED
@@ -32,6 +32,7 @@
|
|
32
32
|
* Standard Includes
|
33
33
|
*/
|
34
34
|
|
35
|
+
#include <ruby.h>
|
35
36
|
#include <cstdint>
|
36
37
|
|
37
38
|
/*
|
@@ -46,8 +47,8 @@
|
|
46
47
|
* Types
|
47
48
|
*/
|
48
49
|
|
49
|
-
typedef float
|
50
|
-
typedef double
|
50
|
+
typedef float float32_t;
|
51
|
+
typedef double float64_t;
|
51
52
|
|
52
53
|
typedef size_t IType;
|
53
54
|
|
data/ext/nmatrix/util/sl_list.h
CHANGED
@@ -33,6 +33,7 @@
|
|
33
33
|
* Standard Includes
|
34
34
|
*/
|
35
35
|
|
36
|
+
#include <ruby.h>
|
36
37
|
#include <type_traits>
|
37
38
|
#include <cstdlib>
|
38
39
|
|
@@ -69,9 +70,9 @@ namespace nm { namespace list {
|
|
69
70
|
// Lifecycle //
|
70
71
|
///////////////
|
71
72
|
|
72
|
-
LIST*
|
73
|
-
void
|
74
|
-
void
|
73
|
+
LIST* create(void);
|
74
|
+
void del(LIST* list, size_t recursions);
|
75
|
+
void mark(LIST* list, size_t recursions);
|
75
76
|
|
76
77
|
///////////////
|
77
78
|
// Accessors //
|
@@ -90,25 +91,25 @@ bool node_is_within_slice(NODE* n, size_t coord, size_t len);
|
|
90
91
|
|
91
92
|
template <typename Type>
|
92
93
|
inline NODE* insert_helper(LIST* list, NODE* node, size_t key, Type val) {
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
94
|
+
Type* val_mem = NM_ALLOC(Type);
|
95
|
+
*val_mem = val;
|
96
|
+
|
97
|
+
if (node == NULL) {
|
98
|
+
return insert(list, false, key, val_mem);
|
99
|
+
|
100
|
+
} else {
|
101
|
+
return insert_after(node, key, val_mem);
|
102
|
+
}
|
102
103
|
}
|
103
104
|
|
104
105
|
template <typename Type>
|
105
106
|
inline NODE* insert_helper(LIST* list, NODE* node, size_t key, Type* ptr) {
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
107
|
+
if (node == NULL) {
|
108
|
+
return insert(list, false, key, ptr);
|
109
|
+
|
110
|
+
} else {
|
111
|
+
return insert_after(node, key, ptr);
|
112
|
+
}
|
112
113
|
}
|
113
114
|
|
114
115
|
///////////
|
@@ -107,9 +107,6 @@ basenames = %w{nmatrix_atlas math_atlas}
|
|
107
107
|
$objs = basenames.map { |b| "#{b}.o" }
|
108
108
|
$srcs = basenames.map { |b| "#{b}.cpp" }
|
109
109
|
|
110
|
-
#CONFIG['CXX'] = 'clang++'
|
111
|
-
CONFIG['CXX'] = 'g++'
|
112
|
-
|
113
110
|
def find_newer_gplusplus #:nodoc:
|
114
111
|
print "checking for apparent GNU g++ binary with C++0x/C++11 support... "
|
115
112
|
[9,8,7,6,5,4,3].each do |minor|
|
@@ -137,7 +134,7 @@ end
|
|
137
134
|
|
138
135
|
|
139
136
|
if CONFIG['CXX'] == 'clang++'
|
140
|
-
$
|
137
|
+
$CXX_STANDARD = 'c++11'
|
141
138
|
|
142
139
|
else
|
143
140
|
version = gplusplus_version
|
@@ -149,11 +146,11 @@ else
|
|
149
146
|
end
|
150
147
|
|
151
148
|
if version < '4.7.0'
|
152
|
-
$
|
149
|
+
$CXX_STANDARD = 'c++0x'
|
153
150
|
else
|
154
|
-
$
|
151
|
+
$CXX_STANDARD = 'c++11'
|
155
152
|
end
|
156
|
-
puts "using C++ standard... #{$
|
153
|
+
puts "using C++ standard... #{$CXX_STANDARD}"
|
157
154
|
puts "g++ reports version... " + `#{CONFIG['CXX']} --version|head -n 1|cut -f 3 -d " "`
|
158
155
|
end
|
159
156
|
|
@@ -233,13 +230,18 @@ $libs += " -llapack -lcblas -latlas "
|
|
233
230
|
# For release, these next two should both be changed to -O3.
|
234
231
|
$CFLAGS += " -O3" #" -O0 -g "
|
235
232
|
#$CFLAGS += " -static -O0 -g "
|
236
|
-
$
|
237
|
-
#$CPPFLAGS += " -static -O0 -g -std=#{$
|
233
|
+
$CXXFLAGS += " -O3 -std=#{$CXX_STANDARD}" #" -O0 -g -std=#{$CXX_STANDARD} " #-fmax-errors=10 -save-temps
|
234
|
+
#$CPPFLAGS += " -static -O0 -g -std=#{$CXX_STANDARD} "
|
238
235
|
|
239
236
|
CONFIG['warnflags'].gsub!('-Wshorten-64-to-32', '') # doesn't work except in Mac-patched gcc (4.2)
|
240
237
|
CONFIG['warnflags'].gsub!('-Wdeclaration-after-statement', '')
|
241
238
|
CONFIG['warnflags'].gsub!('-Wimplicit-function-declaration', '')
|
242
239
|
|
240
|
+
have_func("rb_array_const_ptr", "ruby.h")
|
241
|
+
have_macro("FIX_CONST_VALUE_PTR", "ruby.h")
|
242
|
+
have_macro("RARRAY_CONST_PTR", "ruby.h")
|
243
|
+
have_macro("RARRAY_AREF", "ruby.h")
|
244
|
+
|
243
245
|
create_conf_h("nmatrix_atlas_config.h")
|
244
246
|
create_makefile("nmatrix_atlas")
|
245
247
|
|
@@ -270,8 +270,8 @@ static VALUE nm_atlas_cblas_rotg(VALUE self, VALUE ab) {
|
|
270
270
|
rb_ary_store(result, 0, *reinterpret_cast<VALUE*>(pC));
|
271
271
|
rb_ary_store(result, 1, *reinterpret_cast<VALUE*>(pS));
|
272
272
|
} else {
|
273
|
-
rb_ary_store(result, 0, rubyobj_from_cval(pC, dtype).rval);
|
274
|
-
rb_ary_store(result, 1, rubyobj_from_cval(pS, dtype).rval);
|
273
|
+
rb_ary_store(result, 0, nm::rubyobj_from_cval(pC, dtype).rval);
|
274
|
+
rb_ary_store(result, 1, nm::rubyobj_from_cval(pS, dtype).rval);
|
275
275
|
}
|
276
276
|
NM_CONSERVATIVE(nm_unregister_value(&ab));
|
277
277
|
NM_CONSERVATIVE(nm_unregister_value(&self));
|
@@ -391,7 +391,7 @@ static VALUE nm_atlas_cblas_nrm2(VALUE self, VALUE n, VALUE x, VALUE incx) {
|
|
391
391
|
|
392
392
|
ttable[dtype](FIX2INT(n), NM_STORAGE_DENSE(x)->elements, FIX2INT(incx), Result);
|
393
393
|
|
394
|
-
return rubyobj_from_cval(Result, rdtype).rval;
|
394
|
+
return nm::rubyobj_from_cval(Result, rdtype).rval;
|
395
395
|
}
|
396
396
|
}
|
397
397
|
|
@@ -440,7 +440,7 @@ static VALUE nm_atlas_cblas_asum(VALUE self, VALUE n, VALUE x, VALUE incx) {
|
|
440
440
|
|
441
441
|
ttable[dtype](FIX2INT(n), NM_STORAGE_DENSE(x)->elements, FIX2INT(incx), Result);
|
442
442
|
|
443
|
-
return rubyobj_from_cval(Result, rdtype).rval;
|
443
|
+
return nm::rubyobj_from_cval(Result, rdtype).rval;
|
444
444
|
}
|
445
445
|
|
446
446
|
/*
|
@@ -1019,7 +1019,7 @@ static VALUE nm_atlas_clapack_getrs(VALUE self, VALUE order, VALUE trans, VALUE
|
|
1019
1019
|
} else {
|
1020
1020
|
ipiv_ = NM_ALLOCA_N(int, RARRAY_LEN(ipiv));
|
1021
1021
|
for (int index = 0; index < RARRAY_LEN(ipiv); ++index) {
|
1022
|
-
ipiv_[index] = FIX2INT(
|
1022
|
+
ipiv_[index] = FIX2INT( RARRAY_AREF(ipiv, index) );
|
1023
1023
|
}
|
1024
1024
|
}
|
1025
1025
|
|
@@ -1104,7 +1104,7 @@ static VALUE nm_atlas_clapack_getri(VALUE self, VALUE order, VALUE n, VALUE a, V
|
|
1104
1104
|
} else {
|
1105
1105
|
ipiv_ = NM_ALLOCA_N(int, RARRAY_LEN(ipiv));
|
1106
1106
|
for (int index = 0; index < RARRAY_LEN(ipiv); ++index) {
|
1107
|
-
ipiv_[index] = FIX2INT(
|
1107
|
+
ipiv_[index] = FIX2INT( RARRAY_AREF(ipiv, index) );
|
1108
1108
|
}
|
1109
1109
|
}
|
1110
1110
|
|
@@ -1191,7 +1191,7 @@ static VALUE nm_atlas_clapack_laswp(VALUE self, VALUE n, VALUE a, VALUE lda, VAL
|
|
1191
1191
|
} else {
|
1192
1192
|
ipiv_ = NM_ALLOCA_N(int, RARRAY_LEN(ipiv));
|
1193
1193
|
for (int index = 0; index < RARRAY_LEN(ipiv); ++index) {
|
1194
|
-
ipiv_[index] = FIX2INT(
|
1194
|
+
ipiv_[index] = FIX2INT( RARRAY_AREF(ipiv, index) );
|
1195
1195
|
}
|
1196
1196
|
}
|
1197
1197
|
|