nmatrix 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.cpp +113 -112
- data/ext/nmatrix/data/data.h +306 -292
- data/ext/nmatrix/data/ruby_object.h +193 -193
- data/ext/nmatrix/extconf.rb +11 -9
- data/ext/nmatrix/math.cpp +9 -11
- 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.cpp +67 -67
- data/ext/nmatrix/ruby_constants.h +35 -35
- data/ext/nmatrix/ruby_nmatrix.c +168 -183
- data/ext/nmatrix/storage/common.h +4 -3
- data/ext/nmatrix/storage/dense/dense.cpp +50 -50
- data/ext/nmatrix/storage/dense/dense.h +8 -7
- data/ext/nmatrix/storage/list/list.cpp +16 -16
- data/ext/nmatrix/storage/list/list.h +7 -6
- data/ext/nmatrix/storage/storage.cpp +32 -32
- 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.cpp +27 -27
- data/ext/nmatrix/storage/yale/yale.h +7 -6
- data/ext/nmatrix/ttable_helper.rb +10 -10
- data/ext/nmatrix/types.h +3 -2
- data/ext/nmatrix/util/io.cpp +7 -7
- data/ext/nmatrix/util/sl_list.cpp +26 -26
- data/ext/nmatrix/util/sl_list.h +19 -18
- data/lib/nmatrix/blas.rb +7 -7
- data/lib/nmatrix/io/mat5_reader.rb +30 -30
- data/lib/nmatrix/math.rb +73 -17
- data/lib/nmatrix/nmatrix.rb +10 -8
- data/lib/nmatrix/shortcuts.rb +3 -3
- data/lib/nmatrix/version.rb +3 -3
- data/spec/00_nmatrix_spec.rb +6 -0
- data/spec/math_spec.rb +77 -0
- data/spec/spec_helper.rb +9 -0
- metadata +2 -2
@@ -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
|
@@ -85,7 +85,7 @@
|
|
85
85
|
*/
|
86
86
|
|
87
87
|
extern "C" {
|
88
|
-
static YALE_STORAGE*
|
88
|
+
static YALE_STORAGE* alloc(nm::dtype_t dtype, size_t* shape, size_t dim);
|
89
89
|
|
90
90
|
static size_t yale_count_slice_copy_ndnz(const YALE_STORAGE* s, size_t*, size_t*);
|
91
91
|
|
@@ -117,10 +117,10 @@ template <typename LD, typename RD>
|
|
117
117
|
static VALUE map_merged_stored(VALUE left, VALUE right, VALUE init);
|
118
118
|
|
119
119
|
template <typename DType>
|
120
|
-
static bool
|
120
|
+
static bool ndrow_is_empty(const YALE_STORAGE* s, IType ija, const IType ija_next);
|
121
121
|
|
122
122
|
template <typename LDType, typename RDType>
|
123
|
-
static bool
|
123
|
+
static bool ndrow_eqeq_ndrow(const YALE_STORAGE* l, const YALE_STORAGE* r, IType l_ija, const IType l_ija_next, IType r_ija, const IType r_ija_next);
|
124
124
|
|
125
125
|
template <typename LDType, typename RDType>
|
126
126
|
static bool eqeq(const YALE_STORAGE* left, const YALE_STORAGE* right);
|
@@ -128,9 +128,9 @@ static bool eqeq(const YALE_STORAGE* left, const YALE_STORAGE* right);
|
|
128
128
|
template <typename LDType, typename RDType>
|
129
129
|
static bool eqeq_different_defaults(const YALE_STORAGE* s, const LDType& s_init, const YALE_STORAGE* t, const RDType& t_init);
|
130
130
|
|
131
|
-
static void
|
131
|
+
static void increment_ia_after(YALE_STORAGE* s, IType ija_size, IType i, long n);
|
132
132
|
|
133
|
-
static IType
|
133
|
+
static IType insert_search(YALE_STORAGE* s, IType left, IType right, IType key, bool& found);
|
134
134
|
|
135
135
|
template <typename DType>
|
136
136
|
static char vector_insert(YALE_STORAGE* s, size_t pos, size_t* j, void* val_, size_t n, bool struct_only);
|
@@ -436,13 +436,13 @@ int binary_search(YALE_STORAGE* s, IType left, IType right, IType key) {
|
|
436
436
|
IType mid_j = ija[mid];
|
437
437
|
|
438
438
|
if (mid_j == key)
|
439
|
-
|
439
|
+
return mid;
|
440
440
|
|
441
441
|
else if (mid_j > key)
|
442
|
-
|
442
|
+
return binary_search(s, left, mid - 1, key);
|
443
443
|
|
444
444
|
else
|
445
|
-
|
445
|
+
return binary_search(s, mid + 1, right, key);
|
446
446
|
}
|
447
447
|
|
448
448
|
|
@@ -503,7 +503,7 @@ static char vector_insert_resize(YALE_STORAGE* s, size_t current_size, size_t po
|
|
503
503
|
}
|
504
504
|
|
505
505
|
if (new_capacity < current_size + n)
|
506
|
-
|
506
|
+
new_capacity = current_size + n;
|
507
507
|
|
508
508
|
nm_yale_storage_register(s);
|
509
509
|
|
@@ -564,8 +564,8 @@ static char vector_insert_resize(YALE_STORAGE* s, size_t current_size, size_t po
|
|
564
564
|
* diag). Does not free anything; you are responsible!
|
565
565
|
*
|
566
566
|
* TODO: Improve this so it can handle non-contiguous element insertions
|
567
|
-
*
|
568
|
-
*
|
567
|
+
* efficiently. For now, we can just sort the elements in the row in
|
568
|
+
* question.)
|
569
569
|
*/
|
570
570
|
template <typename DType>
|
571
571
|
static char vector_insert(YALE_STORAGE* s, size_t pos, size_t* j, void* val_, size_t n, bool struct_only) {
|
@@ -585,7 +585,7 @@ static char vector_insert(YALE_STORAGE* s, size_t pos, size_t* j, void* val_, si
|
|
585
585
|
vector_insert_resize<DType>(s, size, pos, j, n, struct_only);
|
586
586
|
|
587
587
|
// Need to get the new locations for ija and a.
|
588
|
-
|
588
|
+
ija = s->ija;
|
589
589
|
a = reinterpret_cast<DType*>(s->a);
|
590
590
|
} else {
|
591
591
|
/*
|
@@ -594,7 +594,7 @@ static char vector_insert(YALE_STORAGE* s, size_t pos, size_t* j, void* val_, si
|
|
594
594
|
* the end, one element at a time.
|
595
595
|
*
|
596
596
|
* TODO: This can be made slightly more efficient, but only after the tests
|
597
|
-
*
|
597
|
+
* are written.
|
598
598
|
*/
|
599
599
|
|
600
600
|
if (struct_only) {
|
@@ -655,10 +655,10 @@ static IType insert_search(YALE_STORAGE* s, IType left, IType right, IType key,
|
|
655
655
|
return mid;
|
656
656
|
|
657
657
|
} else if (mid_j > key) {
|
658
|
-
|
658
|
+
return insert_search(s, left, mid-1, key, found);
|
659
659
|
|
660
660
|
} else {
|
661
|
-
|
661
|
+
return insert_search(s, mid+1, right, key, found);
|
662
662
|
}
|
663
663
|
}
|
664
664
|
|
@@ -1119,10 +1119,10 @@ static bool is_pos_default_value(YALE_STORAGE* s, size_t apos) {
|
|
1119
1119
|
extern "C" {
|
1120
1120
|
|
1121
1121
|
void nm_init_yale_functions() {
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1125
|
-
|
1122
|
+
/*
|
1123
|
+
* This module stores methods that are useful for debugging Yale matrices,
|
1124
|
+
* i.e. the ones with +:yale+ stype.
|
1125
|
+
*/
|
1126
1126
|
cNMatrix_YaleFunctions = rb_define_module_under(cNMatrix, "YaleFunctions");
|
1127
1127
|
|
1128
1128
|
// Expert recommendation. Eventually this should go in a separate gem, or at least a separate module.
|
@@ -1336,7 +1336,7 @@ static void* default_value_ptr(const YALE_STORAGE* s) {
|
|
1336
1336
|
*/
|
1337
1337
|
static VALUE obj_at(YALE_STORAGE* s, size_t k) {
|
1338
1338
|
if (s->dtype == nm::RUBYOBJ) return reinterpret_cast<VALUE*>(((YALE_STORAGE*)(s->src))->a)[k];
|
1339
|
-
else return rubyobj_from_cval(reinterpret_cast<void*>(reinterpret_cast<char*>(((YALE_STORAGE*)(s->src))->a) + k * DTYPE_SIZES[s->dtype]), s->dtype).rval;
|
1339
|
+
else return nm::rubyobj_from_cval(reinterpret_cast<void*>(reinterpret_cast<char*>(((YALE_STORAGE*)(s->src))->a) + k * DTYPE_SIZES[s->dtype]), s->dtype).rval;
|
1340
1340
|
}
|
1341
1341
|
|
1342
1342
|
|
@@ -1345,7 +1345,7 @@ static VALUE obj_at(YALE_STORAGE* s, size_t k) {
|
|
1345
1345
|
*/
|
1346
1346
|
static VALUE default_value(const YALE_STORAGE* s) {
|
1347
1347
|
if (s->dtype == nm::RUBYOBJ) return *reinterpret_cast<VALUE*>(default_value_ptr(s));
|
1348
|
-
else return rubyobj_from_cval(default_value_ptr(s), s->dtype).rval;
|
1348
|
+
else return nm::rubyobj_from_cval(default_value_ptr(s), s->dtype).rval;
|
1349
1349
|
}
|
1350
1350
|
|
1351
1351
|
|
@@ -1664,7 +1664,7 @@ static VALUE nm_a(int argc, VALUE* argv, VALUE self) {
|
|
1664
1664
|
}
|
1665
1665
|
} else {
|
1666
1666
|
for (size_t i = 0; i < size; ++i) {
|
1667
|
-
vals[i] = rubyobj_from_cval((char*)(s->a) + DTYPE_SIZES[s->dtype]*i, s->dtype).rval;
|
1667
|
+
vals[i] = nm::rubyobj_from_cval((char*)(s->a) + DTYPE_SIZES[s->dtype]*i, s->dtype).rval;
|
1668
1668
|
}
|
1669
1669
|
}
|
1670
1670
|
VALUE ary = rb_ary_new4(size, vals);
|
@@ -1681,7 +1681,7 @@ static VALUE nm_a(int argc, VALUE* argv, VALUE self) {
|
|
1681
1681
|
NM_CONSERVATIVE(nm_unregister_value(&idx));
|
1682
1682
|
NM_CONSERVATIVE(nm_unregister_value(&self));
|
1683
1683
|
if (index >= size) rb_raise(rb_eRangeError, "out of range");
|
1684
|
-
return rubyobj_from_cval((char*)(s->a) + DTYPE_SIZES[s->dtype] * index, s->dtype).rval;
|
1684
|
+
return nm::rubyobj_from_cval((char*)(s->a) + DTYPE_SIZES[s->dtype] * index, s->dtype).rval;
|
1685
1685
|
}
|
1686
1686
|
}
|
1687
1687
|
|
@@ -1712,7 +1712,7 @@ static VALUE nm_d(int argc, VALUE* argv, VALUE self) {
|
|
1712
1712
|
}
|
1713
1713
|
} else {
|
1714
1714
|
for (size_t i = 0; i < s->shape[0]; ++i) {
|
1715
|
-
vals[i] = rubyobj_from_cval((char*)(s->a) + DTYPE_SIZES[s->dtype]*i, s->dtype).rval;
|
1715
|
+
vals[i] = nm::rubyobj_from_cval((char*)(s->a) + DTYPE_SIZES[s->dtype]*i, s->dtype).rval;
|
1716
1716
|
}
|
1717
1717
|
}
|
1718
1718
|
nm_unregister_values(vals, s->shape[0]);
|
@@ -1725,7 +1725,7 @@ static VALUE nm_d(int argc, VALUE* argv, VALUE self) {
|
|
1725
1725
|
NM_CONSERVATIVE(nm_unregister_value(&idx));
|
1726
1726
|
NM_CONSERVATIVE(nm_unregister_value(&self));
|
1727
1727
|
if (index >= s->shape[0]) rb_raise(rb_eRangeError, "out of range");
|
1728
|
-
return rubyobj_from_cval((char*)(s->a) + DTYPE_SIZES[s->dtype] * index, s->dtype).rval;
|
1728
|
+
return nm::rubyobj_from_cval((char*)(s->a) + DTYPE_SIZES[s->dtype] * index, s->dtype).rval;
|
1729
1729
|
}
|
1730
1730
|
}
|
1731
1731
|
|
@@ -1752,7 +1752,7 @@ static VALUE nm_lu(VALUE self) {
|
|
1752
1752
|
}
|
1753
1753
|
} else {
|
1754
1754
|
for (size_t i = 0; i < size - s->shape[0] - 1; ++i) {
|
1755
|
-
vals[i] = rubyobj_from_cval((char*)(s->a) + DTYPE_SIZES[s->dtype]*(s->shape[0] + 1 + i), s->dtype).rval;
|
1755
|
+
vals[i] = nm::rubyobj_from_cval((char*)(s->a) + DTYPE_SIZES[s->dtype]*(s->shape[0] + 1 + i), s->dtype).rval;
|
1756
1756
|
}
|
1757
1757
|
}
|
1758
1758
|
|
@@ -1927,7 +1927,7 @@ static VALUE nm_nd_row(int argc, VALUE* argv, VALUE self) {
|
|
1927
1927
|
ret = rb_hash_new();
|
1928
1928
|
|
1929
1929
|
for (size_t idx = pos; idx < nextpos; ++idx) {
|
1930
|
-
rb_hash_aset(ret, INT2FIX(s->ija[idx]), rubyobj_from_cval((char*)(s->a) + DTYPE_SIZES[s->dtype]*idx, s->dtype).rval);
|
1930
|
+
rb_hash_aset(ret, INT2FIX(s->ija[idx]), nm::rubyobj_from_cval((char*)(s->a) + DTYPE_SIZES[s->dtype]*idx, s->dtype).rval);
|
1931
1931
|
}
|
1932
1932
|
}
|
1933
1933
|
NM_CONSERVATIVE(nm_unregister_value(&as));
|
@@ -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);
|
@@ -42,16 +42,16 @@ EWOPS = [
|
|
42
42
|
]
|
43
43
|
|
44
44
|
LR_ALLOWED = {
|
45
|
-
:uint8_t
|
46
|
-
:int8_t
|
47
|
-
:int16_t
|
48
|
-
:int32_t
|
49
|
-
:int64_t
|
50
|
-
:float32_t
|
51
|
-
:float64_t
|
52
|
-
:'nm::Complex64'
|
53
|
-
:'nm::Complex128'
|
54
|
-
:'nm::RubyObject'
|
45
|
+
:uint8_t => DTYPES,
|
46
|
+
:int8_t => DTYPES,
|
47
|
+
:int16_t => DTYPES,
|
48
|
+
:int32_t => DTYPES,
|
49
|
+
:int64_t => DTYPES,
|
50
|
+
:float32_t => DTYPES,
|
51
|
+
:float64_t => DTYPES,
|
52
|
+
:'nm::Complex64' => DTYPES,
|
53
|
+
:'nm::Complex128' => DTYPES,
|
54
|
+
:'nm::RubyObject' => DTYPES
|
55
55
|
}
|
56
56
|
|
57
57
|
lines =
|
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/io.cpp
CHANGED
@@ -104,9 +104,9 @@ extern "C" {
|
|
104
104
|
nm::dtype_t nm_dtype_from_rbstring(VALUE str) {
|
105
105
|
|
106
106
|
for (size_t index = 0; index < NM_NUM_DTYPES; ++index) {
|
107
|
-
|
108
|
-
|
109
|
-
|
107
|
+
if (!std::strncmp(RSTRING_PTR(str), DTYPE_NAMES[index], RSTRING_LEN(str))) {
|
108
|
+
return static_cast<nm::dtype_t>(index);
|
109
|
+
}
|
110
110
|
}
|
111
111
|
|
112
112
|
rb_raise(rb_eArgError, "invalid data type string (%s) specified", RSTRING_PTR(str));
|
@@ -121,7 +121,7 @@ nm::dtype_t nm_dtype_from_rbsymbol(VALUE sym) {
|
|
121
121
|
|
122
122
|
for (size_t index = 0; index < NM_NUM_DTYPES; ++index) {
|
123
123
|
if (sym_id == rb_intern(DTYPE_NAMES[index])) {
|
124
|
-
|
124
|
+
return static_cast<nm::dtype_t>(index);
|
125
125
|
}
|
126
126
|
}
|
127
127
|
|
@@ -138,7 +138,7 @@ nm::stype_t nm_stype_from_rbstring(VALUE str) {
|
|
138
138
|
|
139
139
|
for (size_t index = 0; index < NM_NUM_STYPES; ++index) {
|
140
140
|
if (!std::strncmp(RSTRING_PTR(str), STYPE_NAMES[index], 3)) {
|
141
|
-
|
141
|
+
return static_cast<nm::stype_t>(index);
|
142
142
|
}
|
143
143
|
}
|
144
144
|
|
@@ -153,7 +153,7 @@ nm::stype_t nm_stype_from_rbsymbol(VALUE sym) {
|
|
153
153
|
|
154
154
|
for (size_t index = 0; index < NM_NUM_STYPES; ++index) {
|
155
155
|
if (SYM2ID(sym) == rb_intern(STYPE_NAMES[index])) {
|
156
|
-
|
156
|
+
return static_cast<nm::stype_t>(index);
|
157
157
|
}
|
158
158
|
}
|
159
159
|
|
@@ -169,7 +169,7 @@ nm::stype_t nm_stype_from_rbsymbol(VALUE sym) {
|
|
169
169
|
static nm::io::matlab_dtype_t matlab_dtype_from_rbsymbol(VALUE sym) {
|
170
170
|
for (size_t index = 0; index < nm::io::NUM_MATLAB_DTYPES; ++index) {
|
171
171
|
if (SYM2ID(sym) == rb_intern(nm::io::MATLAB_DTYPE_NAMES[index])) {
|
172
|
-
|
172
|
+
return static_cast<nm::io::matlab_dtype_t>(index);
|
173
173
|
}
|
174
174
|
}
|
175
175
|
|