carray-numo-narray 0.9.0
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/NOTE.ja.txt +34 -0
- data/README.md +0 -0
- data/Rakefile +11 -0
- data/carray-numo-narray.gemspec +25 -0
- data/ext/ca_wrap_numo_narray.c +361 -0
- data/ext/carray_numo_narray.c +21 -0
- data/ext/extconf.rb +15 -0
- data/lib/carray-numo-narray.rb +3 -0
- metadata +66 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 02abe0434b7e13bc5f1fe24ea8c4842dbcd14fca6f09df4d8b928fe580df94d0
|
4
|
+
data.tar.gz: 6a33460577eeb87854725041a5406c1eda8e72b38cf7d9d24a7a435f772fca5b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4ceaa09d46044291c2bb6bc4b9163fff86726d6d0057158691f255b6c39cc1749454b2138d736f2209816cfa53fe5b39be92d4b5746dabe3790ee4e23e2114d5
|
7
|
+
data.tar.gz: 192ddac1ba18da317e19073dd1965556f27b230e77c284d3f1e94f0e7d23b702a9fedf784a3d5fefd99cc8cb2a926441a678a02b1968c681c68731c42d88df01
|
data/NOTE.ja.txt
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
Numo::NArrayとのインターフェース
|
2
|
+
|
3
|
+
Numo::NArrayは、数値の型でクラスが分かれている。
|
4
|
+
|
5
|
+
CArrayを参照するNArrayオブジェクトを作成する方法
|
6
|
+
|
7
|
+
Int32を例にとると、CArrayと同じ形のNArrayをnary_newを作成する。
|
8
|
+
生成されたNarrayのクラスはNumo::Int32となっている。
|
9
|
+
nary_newを使うと必要になるまでデータ領域はアロケートされない。
|
10
|
+
そこで、CArrayのポインタをNarrayのポインタと共有してしまえばよいのだが、
|
11
|
+
問題はオブジェクトをGCするときのメモリの解放である。
|
12
|
+
|
13
|
+
CArrayとNArrayの両方が自分のデータ領域を解放しようとするためこれは問題。
|
14
|
+
そのためNArrayのfree関数をデータ領域を解放しないものに変更してやる必要がある。
|
15
|
+
|
16
|
+
そこで、かなりの荒技だが、NArrayの実体であるRTypedStructの中の
|
17
|
+
typeメンバー(free関数を含む)を独自のものに置き換えてしまうというもの。
|
18
|
+
|
19
|
+
typeメンバーは numo-narrayの実装ではstaticとして隠蔽されているため、
|
20
|
+
コンパイル時には取得できないので、動的に取得することにした。
|
21
|
+
|
22
|
+
それぞれの型(UINT8, UINT16, ...)に対して、
|
23
|
+
|
24
|
+
static rb_data_type_t na_wrap_int32 = { 0, {0, 0, 0,}, 0, 0, 0, };
|
25
|
+
|
26
|
+
というデータタイプを用意しておく。
|
27
|
+
CArray#numoが呼ばれると、CArrayの型に応じて、たとえば、Numo::Int32のオブジェクト
|
28
|
+
が生成される。na_wrap_int32が初期値のままの状態の場合には、
|
29
|
+
生成したオブジェクトのtypeメンバをna_wrap_int32にコピーして、
|
30
|
+
function.dfreeだけ独自のfree関数に変更する。
|
31
|
+
na_wrap_int32は適切に設定されたはずなので、以降はそのまま使う。
|
32
|
+
|
33
|
+
これで、CArrayと同じポインタを参照するNArrayができる。
|
34
|
+
|
data/README.md
ADDED
File without changes
|
data/Rakefile
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
Gem::Specification::new do |s|
|
2
|
+
version = "0.9.0"
|
3
|
+
files = Dir.glob("**/*") - [
|
4
|
+
Dir.glob("carray-numo-narray-*.gem"),
|
5
|
+
Dir.glob("test/**/*"),
|
6
|
+
Dir.glob("work/**/*"),
|
7
|
+
].flatten
|
8
|
+
|
9
|
+
s.platform = Gem::Platform::RUBY
|
10
|
+
s.name = "carray-numo-narray"
|
11
|
+
s.summary = "CArray interface to Numo::NArray"
|
12
|
+
s.description = <<-HERE
|
13
|
+
CArray interface to Numo::NArray
|
14
|
+
HERE
|
15
|
+
s.version = version
|
16
|
+
s.licenses = ['MIT']
|
17
|
+
s.author = "Hiroki Motoyoshi"
|
18
|
+
s.email = ""
|
19
|
+
s.homepage = 'https://github.com/himotoyoshi/carray-numo-narray'
|
20
|
+
s.files = files
|
21
|
+
s.extensions = [ "ext/extconf.rb" ]
|
22
|
+
s.required_ruby_version = ">= 1.8.1"
|
23
|
+
s.add_runtime_dependency 'carray', '~> 1.3'
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1,361 @@
|
|
1
|
+
/* ---------------------------------------------------------------------------
|
2
|
+
|
3
|
+
carray/ca_wrap_narray.c
|
4
|
+
|
5
|
+
This file is part of Ruby/CArray extension library.
|
6
|
+
You can redistribute it and/or modify it under the terms of
|
7
|
+
the Ruby Licence.
|
8
|
+
|
9
|
+
Copyright (C) 2005 Hiroki Motoyoshi
|
10
|
+
|
11
|
+
---------------------------------------------------------------------------- */
|
12
|
+
|
13
|
+
#include "ruby.h"
|
14
|
+
#include "carray.h"
|
15
|
+
#include "numo/narray.h"
|
16
|
+
|
17
|
+
#include <math.h>
|
18
|
+
|
19
|
+
static char EMPTY_ARRAY_PTR;
|
20
|
+
|
21
|
+
/* -------------------------------------------------------------------- */
|
22
|
+
|
23
|
+
|
24
|
+
/* -------------------------------------------------------------------- */
|
25
|
+
|
26
|
+
static int8_t
|
27
|
+
na_class_to_ca_data_type (VALUE typecode)
|
28
|
+
{
|
29
|
+
int8_t data_type;
|
30
|
+
|
31
|
+
if ( typecode == numo_cUInt8 ) {
|
32
|
+
data_type = CA_UINT8;
|
33
|
+
}
|
34
|
+
else if ( typecode == numo_cUInt16 ) {
|
35
|
+
data_type = CA_UINT16;
|
36
|
+
}
|
37
|
+
else if ( typecode == numo_cUInt32 ) {
|
38
|
+
data_type = CA_UINT32;
|
39
|
+
}
|
40
|
+
else if ( typecode == numo_cUInt64 ) {
|
41
|
+
data_type = CA_UINT64;
|
42
|
+
}
|
43
|
+
else if ( typecode == numo_cInt8 ) {
|
44
|
+
data_type = CA_INT8;
|
45
|
+
}
|
46
|
+
else if ( typecode == numo_cInt16 ) {
|
47
|
+
data_type = CA_INT16;
|
48
|
+
}
|
49
|
+
else if ( typecode == numo_cInt32 ) {
|
50
|
+
data_type = CA_INT32;
|
51
|
+
}
|
52
|
+
else if ( typecode == numo_cInt64 ) {
|
53
|
+
data_type = CA_INT64;
|
54
|
+
}
|
55
|
+
else if ( typecode == numo_cSFloat ) {
|
56
|
+
data_type = CA_FLOAT32;
|
57
|
+
}
|
58
|
+
else if ( typecode == numo_cDFloat ) {
|
59
|
+
data_type = CA_FLOAT64;
|
60
|
+
}
|
61
|
+
#ifdef HAVE_COMPLEX_H
|
62
|
+
else if ( typecode == numo_cSComplex ) {
|
63
|
+
data_type = CA_CMPLX64;
|
64
|
+
}
|
65
|
+
else if ( typecode == numo_cDComplex ) {
|
66
|
+
data_type = CA_CMPLX128;
|
67
|
+
}
|
68
|
+
#endif
|
69
|
+
else if ( typecode == numo_cRObject ) {
|
70
|
+
data_type = CA_OBJECT;
|
71
|
+
}
|
72
|
+
else {
|
73
|
+
rb_raise(rb_eRuntimeError, "invalid NArray class to convert to CArray");
|
74
|
+
}
|
75
|
+
|
76
|
+
return data_type;
|
77
|
+
}
|
78
|
+
|
79
|
+
static VALUE
|
80
|
+
ca_data_type_to_na_class(int8_t data_type)
|
81
|
+
{
|
82
|
+
volatile VALUE typecode;
|
83
|
+
|
84
|
+
switch ( data_type ) {
|
85
|
+
case CA_BOOLEAN:
|
86
|
+
case CA_UINT8:
|
87
|
+
typecode = numo_cUInt8; break;
|
88
|
+
case CA_UINT16:
|
89
|
+
typecode = numo_cUInt16; break;
|
90
|
+
case CA_UINT32:
|
91
|
+
typecode = numo_cUInt32; break;
|
92
|
+
case CA_UINT64:
|
93
|
+
typecode = numo_cUInt64; break;
|
94
|
+
case CA_INT8:
|
95
|
+
typecode = numo_cInt8; break;
|
96
|
+
case CA_INT16:
|
97
|
+
typecode = numo_cInt16; break;
|
98
|
+
case CA_INT32:
|
99
|
+
typecode = numo_cInt32; break;
|
100
|
+
case CA_INT64:
|
101
|
+
typecode = numo_cInt64; break;
|
102
|
+
case CA_FLOAT32:
|
103
|
+
typecode = numo_cSFloat; break;
|
104
|
+
case CA_FLOAT64:
|
105
|
+
typecode = numo_cDFloat; break;
|
106
|
+
#ifdef HAVE_COMPLEX_H
|
107
|
+
case CA_CMPLX64:
|
108
|
+
typecode = numo_cSComplex; break;
|
109
|
+
case CA_CMPLX128:
|
110
|
+
typecode = numo_cDComplex; break;
|
111
|
+
#endif
|
112
|
+
case CA_OBJECT:
|
113
|
+
typecode = numo_cRObject; break;
|
114
|
+
default:
|
115
|
+
rb_raise(rb_eRuntimeError,
|
116
|
+
"no corresponding NArray typecode for CArray data type <%s>",
|
117
|
+
ca_type_name[data_type]);
|
118
|
+
}
|
119
|
+
|
120
|
+
return typecode;
|
121
|
+
}
|
122
|
+
|
123
|
+
/* -------------------------------------------------------------------- */
|
124
|
+
|
125
|
+
static void
|
126
|
+
na_wrap_free (void* ptr)
|
127
|
+
{
|
128
|
+
narray_data_t *na = (narray_data_t*)ptr;
|
129
|
+
|
130
|
+
if (na->ptr != NULL) {
|
131
|
+
if (na->owned) {
|
132
|
+
/* xfree(na->ptr); */
|
133
|
+
}
|
134
|
+
na->ptr = NULL;
|
135
|
+
}
|
136
|
+
if (na->base.size > 0) {
|
137
|
+
if (na->base.shape != NULL && na->base.shape != &(na->base.size)) {
|
138
|
+
xfree(na->base.shape);
|
139
|
+
na->base.shape = NULL;
|
140
|
+
}
|
141
|
+
}
|
142
|
+
xfree(na);
|
143
|
+
}
|
144
|
+
|
145
|
+
static rb_data_type_t na_wrap_int8 = { 0, {0, 0, 0,}, 0, 0, 0, };
|
146
|
+
static rb_data_type_t na_wrap_int16 = { 0, {0, 0, 0,}, 0, 0, 0, };
|
147
|
+
static rb_data_type_t na_wrap_int32 = { 0, {0, 0, 0,}, 0, 0, 0, };
|
148
|
+
static rb_data_type_t na_wrap_int64 = { 0, {0, 0, 0,}, 0, 0, 0, };
|
149
|
+
static rb_data_type_t na_wrap_uint8 = { 0, {0, 0, 0,}, 0, 0, 0, };
|
150
|
+
static rb_data_type_t na_wrap_uint16 = { 0, {0, 0, 0,}, 0, 0, 0, };
|
151
|
+
static rb_data_type_t na_wrap_uint32 = { 0, {0, 0, 0,}, 0, 0, 0, };
|
152
|
+
static rb_data_type_t na_wrap_uint64 = { 0, {0, 0, 0,}, 0, 0, 0, };
|
153
|
+
static rb_data_type_t na_wrap_sfloat = { 0, {0, 0, 0,}, 0, 0, 0, };
|
154
|
+
static rb_data_type_t na_wrap_dfloat = { 0, {0, 0, 0,}, 0, 0, 0, };
|
155
|
+
#ifdef HAVE_COMPLEX_H
|
156
|
+
static rb_data_type_t na_wrap_scomplex = { 0, {0, 0, 0,}, 0, 0, 0, };
|
157
|
+
static rb_data_type_t na_wrap_dcomplex = { 0, {0, 0, 0,}, 0, 0, 0, };
|
158
|
+
#endif
|
159
|
+
static rb_data_type_t na_wrap_robject = { 0, {0, 0, 0,}, 0, 0, 0, };
|
160
|
+
|
161
|
+
static void
|
162
|
+
na_set_wrap_type (VALUE obj)
|
163
|
+
{
|
164
|
+
volatile VALUE typecode;
|
165
|
+
rb_data_type_t *data_type, *data_type_wrap;
|
166
|
+
|
167
|
+
data_type = RTYPEDDATA_TYPE(obj);
|
168
|
+
typecode = rb_obj_class(obj);
|
169
|
+
|
170
|
+
if ( typecode == numo_cUInt8 ) {
|
171
|
+
data_type_wrap = &na_wrap_uint8;
|
172
|
+
}
|
173
|
+
else if ( typecode == numo_cUInt16 ) {
|
174
|
+
data_type_wrap = &na_wrap_uint16;
|
175
|
+
}
|
176
|
+
else if ( typecode == numo_cUInt32 ) {
|
177
|
+
data_type_wrap = &na_wrap_uint32;
|
178
|
+
}
|
179
|
+
else if ( typecode == numo_cUInt64 ) {
|
180
|
+
data_type_wrap = &na_wrap_uint64;
|
181
|
+
}
|
182
|
+
else if ( typecode == numo_cInt8 ) {
|
183
|
+
data_type_wrap = &na_wrap_int8;
|
184
|
+
}
|
185
|
+
else if ( typecode == numo_cInt16 ) {
|
186
|
+
data_type_wrap = &na_wrap_int16;
|
187
|
+
}
|
188
|
+
else if ( typecode == numo_cInt32 ) {
|
189
|
+
data_type_wrap = &na_wrap_int32;
|
190
|
+
}
|
191
|
+
else if ( typecode == numo_cInt64 ) {
|
192
|
+
data_type_wrap = &na_wrap_int64;
|
193
|
+
}
|
194
|
+
else if ( typecode == numo_cSFloat ) {
|
195
|
+
data_type_wrap = &na_wrap_sfloat;
|
196
|
+
}
|
197
|
+
else if ( typecode == numo_cDFloat ) {
|
198
|
+
data_type_wrap = &na_wrap_dfloat;
|
199
|
+
}
|
200
|
+
#ifdef HAVE_COMPLEX_H
|
201
|
+
else if ( typecode == numo_cSComplex ) {
|
202
|
+
data_type_wrap = &na_wrap_scomplex;
|
203
|
+
}
|
204
|
+
else if ( typecode == numo_cDComplex ) {
|
205
|
+
data_type_wrap = &na_wrap_dcomplex;
|
206
|
+
}
|
207
|
+
#endif
|
208
|
+
else if ( typecode == numo_cRObject ) {
|
209
|
+
data_type_wrap = &na_wrap_robject;
|
210
|
+
}
|
211
|
+
else {
|
212
|
+
rb_raise(rb_eRuntimeError, "invalid NArray class to convert to CArray");
|
213
|
+
}
|
214
|
+
|
215
|
+
if ( ! ( data_type_wrap->wrap_struct_name ) ) {
|
216
|
+
*data_type_wrap = *data_type;
|
217
|
+
data_type_wrap->function.dfree = na_wrap_free;
|
218
|
+
}
|
219
|
+
|
220
|
+
RTYPEDDATA_TYPE(obj) = data_type_wrap;
|
221
|
+
}
|
222
|
+
|
223
|
+
static VALUE
|
224
|
+
rb_cary_na_ref_new (VALUE self)
|
225
|
+
{
|
226
|
+
volatile VALUE obj, klass;
|
227
|
+
CArray *ca;
|
228
|
+
narray_t *na;
|
229
|
+
|
230
|
+
Data_Get_Struct(self, CArray, ca);
|
231
|
+
|
232
|
+
if ( ! ca_is_attached(ca) ) {
|
233
|
+
rb_raise(rb_eRuntimeError,
|
234
|
+
"cannot create NArray reference for not attached CArray");
|
235
|
+
}
|
236
|
+
|
237
|
+
klass = ca_data_type_to_na_class(ca->data_type);
|
238
|
+
obj = nary_new(klass, ca->rank, (size_t *)ca->dim);
|
239
|
+
na_set_wrap_type(obj);
|
240
|
+
|
241
|
+
GetNArray(obj, na);
|
242
|
+
NA_DATA_PTR(na) = ca->ptr;
|
243
|
+
NA_DATA_OWNED(na) = TRUE;
|
244
|
+
|
245
|
+
rb_ivar_set(obj, rb_intern("@ref"), self);
|
246
|
+
|
247
|
+
return obj;
|
248
|
+
}
|
249
|
+
|
250
|
+
/* -------------------------------------------------------------------- */
|
251
|
+
|
252
|
+
static VALUE
|
253
|
+
rb_cary_to_na (VALUE self)
|
254
|
+
{
|
255
|
+
volatile VALUE obj, type;
|
256
|
+
CArray *ca;
|
257
|
+
char *ptr;
|
258
|
+
|
259
|
+
Data_Get_Struct(self, CArray, ca);
|
260
|
+
|
261
|
+
type = ca_data_type_to_na_class(ca->data_type);
|
262
|
+
obj = nary_view_new(type, ca->rank, (size_t *)ca->dim);
|
263
|
+
|
264
|
+
ptr = na_get_pointer_for_write(obj);
|
265
|
+
ca_copy_data(ca, ptr);
|
266
|
+
|
267
|
+
return obj;
|
268
|
+
}
|
269
|
+
|
270
|
+
/* -------------------------------------------------------------------- */
|
271
|
+
|
272
|
+
/* rdoc:
|
273
|
+
class NArray
|
274
|
+
def ca
|
275
|
+
end
|
276
|
+
end
|
277
|
+
*/
|
278
|
+
|
279
|
+
static VALUE
|
280
|
+
rb_na_ca_ref_new (VALUE self)
|
281
|
+
{
|
282
|
+
volatile VALUE obj = 0;
|
283
|
+
narray_t *na;
|
284
|
+
int8_t data_type;
|
285
|
+
char *ptr;
|
286
|
+
|
287
|
+
data_type = na_class_to_ca_data_type(rb_obj_class(self));
|
288
|
+
|
289
|
+
GetNArray(self, na);
|
290
|
+
|
291
|
+
if ( na->size == 0 ) {
|
292
|
+
ca_size_t zero = 0;
|
293
|
+
obj = rb_carray_wrap_ptr(data_type, 1, &zero, 0, NULL,
|
294
|
+
&EMPTY_ARRAY_PTR, self); /* avoid ca->ptr == NULL */
|
295
|
+
}
|
296
|
+
else {
|
297
|
+
CA_CHECK_RANK(na->ndim);
|
298
|
+
ptr = na_get_pointer_for_read_write(self);
|
299
|
+
obj = rb_carray_wrap_ptr(data_type, na->ndim, (ca_size_t *)na->shape, 0, NULL, ptr, self);
|
300
|
+
}
|
301
|
+
|
302
|
+
return obj;
|
303
|
+
}
|
304
|
+
|
305
|
+
/* -------------------------------------------------------------------- */
|
306
|
+
|
307
|
+
/* rdoc:
|
308
|
+
class NArray
|
309
|
+
def to_ca
|
310
|
+
end
|
311
|
+
end
|
312
|
+
*/
|
313
|
+
|
314
|
+
|
315
|
+
static VALUE
|
316
|
+
rb_na_to_ca (VALUE self)
|
317
|
+
{
|
318
|
+
volatile VALUE obj;
|
319
|
+
CArray *ca;
|
320
|
+
narray_t *na;
|
321
|
+
int8_t data_type;
|
322
|
+
char *ptr;
|
323
|
+
|
324
|
+
GetNArray(self, na);
|
325
|
+
|
326
|
+
data_type = na_class_to_ca_data_type(rb_obj_class(self));
|
327
|
+
|
328
|
+
if ( na->size == 0 ) {
|
329
|
+
ca_size_t zero = 0;
|
330
|
+
obj = rb_carray_new(data_type, 1, &zero, 0, NULL);
|
331
|
+
}
|
332
|
+
else {
|
333
|
+
CA_CHECK_RANK(na->ndim);
|
334
|
+
|
335
|
+
obj = rb_carray_new(data_type, na->ndim, (ca_size_t *) na->shape, 0, NULL);
|
336
|
+
Data_Get_Struct(obj, CArray, ca);
|
337
|
+
ptr = na_get_pointer_for_read(self);
|
338
|
+
ca_sync_data(ca, ptr);
|
339
|
+
}
|
340
|
+
|
341
|
+
return obj;
|
342
|
+
}
|
343
|
+
|
344
|
+
/* -------------------------------------------------------------------- */
|
345
|
+
|
346
|
+
void
|
347
|
+
Init_ca_wrap_numo_narray ()
|
348
|
+
{
|
349
|
+
/* rb_require("narray"); */ /* "narray" should be loaded in config.rb */
|
350
|
+
|
351
|
+
rb_define_const(rb_cCArray, "HAVE_NUMO_NARRAY", Qtrue);
|
352
|
+
|
353
|
+
/* CArray -> NArray */
|
354
|
+
rb_define_method(rb_cCArray, "numo", rb_cary_na_ref_new, 0);
|
355
|
+
rb_define_method(rb_cCArray, "to_numo", rb_cary_to_na, 0);
|
356
|
+
|
357
|
+
/* NArray -> CArray */
|
358
|
+
rb_define_method(cNArray, "ca", rb_na_ca_ref_new, 0);
|
359
|
+
rb_define_method(cNArray, "to_ca", rb_na_to_ca, 0);
|
360
|
+
}
|
361
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
/* ---------------------------------------------------------------------------
|
2
|
+
|
3
|
+
carray/carray_narray.c
|
4
|
+
|
5
|
+
This file is part of Ruby/CArray extension library.
|
6
|
+
You can redistribute it and/or modify it under the terms of
|
7
|
+
the Ruby Licence.
|
8
|
+
|
9
|
+
Copyright (C) 2005 Hiroki Motoyoshi
|
10
|
+
|
11
|
+
---------------------------------------------------------------------------- */
|
12
|
+
|
13
|
+
#include "ruby.h"
|
14
|
+
|
15
|
+
void Init_ca_wrap_numo_narray();
|
16
|
+
|
17
|
+
void
|
18
|
+
Init_carray_numo_narray ()
|
19
|
+
{
|
20
|
+
Init_ca_wrap_numo_narray();
|
21
|
+
}
|
data/ext/extconf.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'numo/narray'
|
2
|
+
require 'mkmf'
|
3
|
+
require 'carray/mkmf'
|
4
|
+
|
5
|
+
$LOAD_PATH.each do |path|
|
6
|
+
if File.exist? File.join(path, 'numo/numo/narray.h')
|
7
|
+
dir_config("narray", File.join(path,"numo"), File.join(path,"numo"))
|
8
|
+
break
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
if have_carray() && have_header("numo/narray.h")
|
13
|
+
create_makefile("carray_numo_narray")
|
14
|
+
end
|
15
|
+
|
metadata
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: carray-numo-narray
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Hiroki Motoyoshi
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-06-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: carray
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
description: " CArray interface to Numo::NArray\n"
|
28
|
+
email: ''
|
29
|
+
executables: []
|
30
|
+
extensions:
|
31
|
+
- ext/extconf.rb
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- NOTE.ja.txt
|
35
|
+
- README.md
|
36
|
+
- Rakefile
|
37
|
+
- carray-numo-narray.gemspec
|
38
|
+
- ext/ca_wrap_numo_narray.c
|
39
|
+
- ext/carray_numo_narray.c
|
40
|
+
- ext/extconf.rb
|
41
|
+
- lib/carray-numo-narray.rb
|
42
|
+
homepage: https://github.com/himotoyoshi/carray-numo-narray
|
43
|
+
licenses:
|
44
|
+
- MIT
|
45
|
+
metadata: {}
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options: []
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.8.1
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
requirements: []
|
61
|
+
rubyforge_project:
|
62
|
+
rubygems_version: 2.7.7
|
63
|
+
signing_key:
|
64
|
+
specification_version: 4
|
65
|
+
summary: CArray interface to Numo::NArray
|
66
|
+
test_files: []
|