carray 1.5.9 → 2.0.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 +4 -4
- data/NEWS.md +10 -0
- data/TODO.md +1 -0
- data/carray.gemspec +1 -1
- data/ext/ca_iter_block.c +20 -5
- data/ext/ca_iter_dimension.c +21 -10
- data/ext/ca_iter_window.c +17 -5
- data/ext/ca_obj_array.c +73 -10
- data/ext/ca_obj_bitarray.c +21 -6
- data/ext/ca_obj_bitfield.c +21 -11
- data/ext/ca_obj_block.c +34 -10
- data/ext/ca_obj_fake.c +21 -6
- data/ext/ca_obj_farray.c +34 -5
- data/ext/ca_obj_field.c +23 -7
- data/ext/ca_obj_grid.c +36 -7
- data/ext/ca_obj_mapping.c +36 -7
- data/ext/ca_obj_object.c +35 -9
- data/ext/ca_obj_reduce.c +34 -5
- data/ext/ca_obj_refer.c +31 -10
- data/ext/ca_obj_repeat.c +35 -12
- data/ext/ca_obj_select.c +35 -9
- data/ext/ca_obj_shift.c +41 -12
- data/ext/ca_obj_transpose.c +36 -7
- data/ext/ca_obj_unbound_repeat.c +39 -14
- data/ext/ca_obj_window.c +46 -15
- data/ext/carray.h +97 -31
- data/ext/carray_access.c +25 -42
- data/ext/carray_attribute.c +35 -35
- data/ext/carray_call_cfunc.c +28 -28
- data/ext/carray_cast.c +25 -26
- data/ext/carray_cast_func.rb +1 -2
- data/ext/carray_conversion.c +7 -10
- data/ext/carray_copy.c +5 -5
- data/ext/carray_core.c +44 -7
- data/ext/carray_element.c +9 -9
- data/ext/carray_generate.c +7 -7
- data/ext/carray_iterator.c +33 -23
- data/ext/carray_loop.c +9 -9
- data/ext/carray_mask.c +38 -36
- data/ext/carray_math.rb +6 -6
- data/ext/carray_numeric.c +1 -1
- data/ext/carray_operator.c +31 -21
- data/ext/carray_order.c +216 -12
- data/ext/carray_sort_addr.c +2 -2
- data/ext/carray_stat.c +22 -22
- data/ext/carray_stat_proc.rb +13 -13
- data/ext/carray_test.c +8 -8
- data/ext/ruby_carray.c +7 -0
- data/ext/ruby_ccomplex.c +25 -11
- data/ext/version.h +6 -6
- data/lib/carray/inspect.rb +0 -3
- data/lib/carray/io/imagemagick.rb +8 -9
- data/lib/carray/mkmf.rb +1 -0
- data/lib/carray/time.rb +1 -1
- data/spec/Classes/ex1.rb +46 -0
- metadata +4 -6
data/ext/carray_order.c
CHANGED
@@ -152,7 +152,7 @@ rb_ca_project (int argc, VALUE *argv, VALUE self)
|
|
152
152
|
|
153
153
|
rb_scan_args(argc, argv, "12", (VALUE *)&ridx, (VALUE *) &vlfval, (VALUE *) &vufval);
|
154
154
|
|
155
|
-
|
155
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
156
156
|
|
157
157
|
rb_check_carray_object(ridx);
|
158
158
|
ci = ca_wrap_readonly(ridx, CA_SIZE);
|
@@ -235,7 +235,7 @@ rb_ca_reverse_bang (VALUE self)
|
|
235
235
|
|
236
236
|
rb_ca_modify(self);
|
237
237
|
|
238
|
-
|
238
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
239
239
|
ca_attach(ca);
|
240
240
|
|
241
241
|
switch ( ca->data_type ) {
|
@@ -391,7 +391,7 @@ rb_ca_sort_bang (VALUE self)
|
|
391
391
|
|
392
392
|
rb_ca_modify(self);
|
393
393
|
|
394
|
-
|
394
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
395
395
|
ca_attach(ca);
|
396
396
|
|
397
397
|
if ( ca_is_fixlen_type(ca) ) {
|
@@ -447,7 +447,7 @@ rb_ca_binary_search (VALUE self, volatile VALUE rval)
|
|
447
447
|
volatile VALUE out;
|
448
448
|
CArray *ca;
|
449
449
|
char *val;
|
450
|
-
|
450
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
451
451
|
|
452
452
|
/* FIXME : treat mask */
|
453
453
|
/*
|
@@ -471,7 +471,7 @@ rb_ca_binary_search (VALUE self, volatile VALUE rval)
|
|
471
471
|
CArray *cv, *co;
|
472
472
|
char *ptr, *val;
|
473
473
|
ca_size_t i, idx;
|
474
|
-
|
474
|
+
TypedData_Get_Struct(rval, CArray, &carray_data_type, cv);
|
475
475
|
if ( ca->data_type != cv->data_type ) {
|
476
476
|
cv = ca_wrap_readonly(rval, ca->data_type);
|
477
477
|
}
|
@@ -704,7 +704,7 @@ rb_ca_linear_search (int argc, VALUE *argv, VALUE self)
|
|
704
704
|
|
705
705
|
rb_scan_args(argc, argv, "11", (VALUE *) &value, (VALUE *) &veps);
|
706
706
|
|
707
|
-
|
707
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
708
708
|
|
709
709
|
ca_attach(ca);
|
710
710
|
|
@@ -825,7 +825,7 @@ rb_ca_linear_search_nearest (VALUE self, VALUE value)
|
|
825
825
|
CArray *ca;
|
826
826
|
ca_size_t addr;
|
827
827
|
|
828
|
-
|
828
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
829
829
|
|
830
830
|
ca_attach(ca);
|
831
831
|
|
@@ -959,6 +959,9 @@ linear_index (ca_size_t n, double *y, double yy, double *idx)
|
|
959
959
|
return 0;
|
960
960
|
}
|
961
961
|
|
962
|
+
|
963
|
+
/* ----------------------------------------------------------------- */
|
964
|
+
|
962
965
|
static VALUE
|
963
966
|
rb_ca_binary_search_linear_index (volatile VALUE self, volatile VALUE vx)
|
964
967
|
{
|
@@ -970,7 +973,7 @@ rb_ca_binary_search_linear_index (volatile VALUE self, volatile VALUE vx)
|
|
970
973
|
double *po;
|
971
974
|
ca_size_t i;
|
972
975
|
|
973
|
-
|
976
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
974
977
|
|
975
978
|
if ( rb_ca_is_any_masked(self) ) {
|
976
979
|
rb_raise(rb_eRuntimeError, "self should not have any masked elements");
|
@@ -1037,7 +1040,7 @@ rb_ca_binary_search_linear_index_vectorized (volatile VALUE self, volatile VALUE
|
|
1037
1040
|
ca_size_t odim[CA_DIM_MAX];
|
1038
1041
|
ca_size_t i, k;
|
1039
1042
|
|
1040
|
-
|
1043
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1041
1044
|
|
1042
1045
|
if ( rb_ca_is_any_masked(self) ) {
|
1043
1046
|
rb_raise(rb_eRuntimeError, "self should not have any masked elements");
|
@@ -1121,6 +1124,200 @@ rb_ca_binary_search_linear_index_vectorized (volatile VALUE self, volatile VALUE
|
|
1121
1124
|
|
1122
1125
|
/* ----------------------------------------------------------------- */
|
1123
1126
|
|
1127
|
+
static ca_size_t
|
1128
|
+
linear_index_linear (ca_size_t n, double *y, double yy, double *idx)
|
1129
|
+
{
|
1130
|
+
ca_size_t a, b, c, x1;
|
1131
|
+
double ya, yb, yc;
|
1132
|
+
double y1, y2;
|
1133
|
+
double rest;
|
1134
|
+
int k;
|
1135
|
+
|
1136
|
+
/* linear search method */
|
1137
|
+
|
1138
|
+
for (k=0; k<n-1; k++) {
|
1139
|
+
if ( (yy - y[k])*(yy - y[k+1]) <= 0 ) {
|
1140
|
+
x1 = k;
|
1141
|
+
goto found;
|
1142
|
+
}
|
1143
|
+
}
|
1144
|
+
|
1145
|
+
*idx = -1;
|
1146
|
+
return -1;
|
1147
|
+
|
1148
|
+
found:
|
1149
|
+
|
1150
|
+
y1 = y[x1];
|
1151
|
+
y2 = y[x1+1];
|
1152
|
+
rest = (yy-y1)/(y2-y1);
|
1153
|
+
|
1154
|
+
*idx = rest + (double) x1;
|
1155
|
+
return 0;
|
1156
|
+
}
|
1157
|
+
|
1158
|
+
static VALUE
|
1159
|
+
rb_ca_linear_search_linear_index (volatile VALUE self, volatile VALUE vx)
|
1160
|
+
{
|
1161
|
+
volatile VALUE out, out0;
|
1162
|
+
CArray *ca, *sc, *cx, *co0, *co;
|
1163
|
+
ca_size_t n;
|
1164
|
+
double *x;
|
1165
|
+
double *px;
|
1166
|
+
double *po;
|
1167
|
+
ca_size_t i;
|
1168
|
+
|
1169
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1170
|
+
|
1171
|
+
if ( rb_ca_is_any_masked(self) ) {
|
1172
|
+
rb_raise(rb_eRuntimeError, "self should not have any masked elements");
|
1173
|
+
}
|
1174
|
+
|
1175
|
+
sc = ca_wrap_readonly(self, CA_FLOAT64);
|
1176
|
+
cx = ca_wrap_readonly(vx, CA_FLOAT64);
|
1177
|
+
|
1178
|
+
co0 = carray_new(ca->data_type, cx->ndim, cx->dim, 0, NULL);
|
1179
|
+
out = out0 = ca_wrap_struct(co0);
|
1180
|
+
co = ca_wrap_writable(out, CA_FLOAT64);
|
1181
|
+
|
1182
|
+
ca_attach_n(3, sc, cx, co);
|
1183
|
+
|
1184
|
+
n = sc->elements;
|
1185
|
+
x = (double*) sc->ptr;
|
1186
|
+
px = (double*) cx->ptr;
|
1187
|
+
po = (double*) co->ptr;
|
1188
|
+
|
1189
|
+
ca_update_mask(cx);
|
1190
|
+
if ( cx->mask ) {
|
1191
|
+
boolean8_t *mx, *mo;
|
1192
|
+
ca_create_mask(co);
|
1193
|
+
mx = (boolean8_t *) cx->mask->ptr;
|
1194
|
+
mo = (boolean8_t *) co->mask->ptr;
|
1195
|
+
for (i=0; i<cx->elements; i++) {
|
1196
|
+
if ( ! *mx ) {
|
1197
|
+
if ( linear_index_linear(n, x, *px, po) < 0 )
|
1198
|
+
*mo = 1;
|
1199
|
+
}
|
1200
|
+
else {
|
1201
|
+
*mo = 1;
|
1202
|
+
}
|
1203
|
+
mx++; mo++; px++, po++;
|
1204
|
+
}
|
1205
|
+
}
|
1206
|
+
else {
|
1207
|
+
for (i=0; i<cx->elements; i++) {
|
1208
|
+
linear_index_linear(n, x, *px, po);
|
1209
|
+
px++; po++;
|
1210
|
+
}
|
1211
|
+
}
|
1212
|
+
|
1213
|
+
ca_sync(co);
|
1214
|
+
ca_detach_n(3, sc, cx, co);
|
1215
|
+
|
1216
|
+
if ( rb_ca_is_scalar(vx) ) {
|
1217
|
+
return rb_funcall(out0, rb_intern("[]"), 1, INT2NUM(0));
|
1218
|
+
}
|
1219
|
+
else {
|
1220
|
+
return out0;
|
1221
|
+
}
|
1222
|
+
}
|
1223
|
+
|
1224
|
+
static VALUE
|
1225
|
+
rb_ca_linear_search_linear_index_vectorized (volatile VALUE self, volatile VALUE vx)
|
1226
|
+
{
|
1227
|
+
volatile VALUE out, out0;
|
1228
|
+
CArray *ca, *sc, *cx, *co0, *co;
|
1229
|
+
double *x;
|
1230
|
+
double *px;
|
1231
|
+
double *po;
|
1232
|
+
ca_size_t nseri, nlist;
|
1233
|
+
ca_size_t odim[CA_DIM_MAX];
|
1234
|
+
ca_size_t i, k;
|
1235
|
+
|
1236
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1237
|
+
|
1238
|
+
if ( rb_ca_is_any_masked(self) ) {
|
1239
|
+
rb_raise(rb_eRuntimeError, "self should not have any masked elements");
|
1240
|
+
}
|
1241
|
+
|
1242
|
+
sc = ca_wrap_readonly(self, CA_FLOAT64);
|
1243
|
+
cx = ca_wrap_readonly(vx, CA_FLOAT64);
|
1244
|
+
|
1245
|
+
if ( sc->ndim < 2 ) {
|
1246
|
+
rb_raise(rb_eRuntimeError, "ndim of self should be larger than 2");
|
1247
|
+
}
|
1248
|
+
|
1249
|
+
if ( cx->ndim > CA_DIM_MAX ) {
|
1250
|
+
rb_raise(rb_eRuntimeError, "2nd argument carray has too large dimension");
|
1251
|
+
}
|
1252
|
+
|
1253
|
+
nseri = 1;
|
1254
|
+
for (i=0; i<sc->ndim-1; i++) {
|
1255
|
+
nseri *= sc->dim[i];
|
1256
|
+
}
|
1257
|
+
nlist = sc->dim[sc->ndim-1];
|
1258
|
+
|
1259
|
+
if ( rb_ca_is_scalar(vx) ) {
|
1260
|
+
for (i=0; i<sc->ndim-1; i++) {
|
1261
|
+
odim[i] = sc->dim[i];
|
1262
|
+
}
|
1263
|
+
co0 = carray_new(ca->data_type, sc->ndim-1, odim, 0, NULL);
|
1264
|
+
}
|
1265
|
+
else {
|
1266
|
+
for (i=0; i<sc->ndim-1; i++) {
|
1267
|
+
odim[i] = sc->dim[i];
|
1268
|
+
}
|
1269
|
+
memcpy(&odim[sc->ndim], cx->dim, cx->ndim*sizeof(ca_size_t));
|
1270
|
+
co0 = carray_new(ca->data_type, sc->ndim-1 + cx->ndim, odim, 0, NULL);
|
1271
|
+
}
|
1272
|
+
|
1273
|
+
out = out0 = ca_wrap_struct(co0);
|
1274
|
+
co = ca_wrap_writable(out, CA_FLOAT64);
|
1275
|
+
|
1276
|
+
ca_attach_n(3, sc, cx, co);
|
1277
|
+
|
1278
|
+
x = (double*) sc->ptr;
|
1279
|
+
po = (double*) co->ptr;
|
1280
|
+
|
1281
|
+
ca_update_mask(cx);
|
1282
|
+
if ( cx->mask ) {
|
1283
|
+
boolean8_t *mx, *mo;
|
1284
|
+
ca_create_mask(co);
|
1285
|
+
mx = (boolean8_t *) cx->mask->ptr;
|
1286
|
+
mo = (boolean8_t *) co->mask->ptr;
|
1287
|
+
for (k=0; k<nseri; k++) {
|
1288
|
+
px = (double*) cx->ptr;
|
1289
|
+
for (i=0; i<cx->elements; i++) {
|
1290
|
+
if ( ! *mx ) {
|
1291
|
+
if ( linear_index_linear(nlist, x, *px, po) < 0)
|
1292
|
+
*mo = 1;
|
1293
|
+
}
|
1294
|
+
else {
|
1295
|
+
*mo = 1;
|
1296
|
+
}
|
1297
|
+
mx++; mo++; px++, po++;
|
1298
|
+
}
|
1299
|
+
x += nlist;
|
1300
|
+
}
|
1301
|
+
}
|
1302
|
+
else {
|
1303
|
+
for (k=0; k<nseri; k++) {
|
1304
|
+
px = (double*) cx->ptr;
|
1305
|
+
for (i=0; i<cx->elements; i++) {
|
1306
|
+
linear_index_linear(nlist, x, *px, po);
|
1307
|
+
px++; po++;
|
1308
|
+
}
|
1309
|
+
x += nlist;
|
1310
|
+
}
|
1311
|
+
}
|
1312
|
+
|
1313
|
+
ca_sync(co);
|
1314
|
+
ca_detach_n(3, sc, cx, co);
|
1315
|
+
|
1316
|
+
return out0;
|
1317
|
+
}
|
1318
|
+
|
1319
|
+
/* ----------------------------------------------------------------- */
|
1320
|
+
|
1124
1321
|
static int
|
1125
1322
|
fetch_linear_addr (ca_size_t n, double *y, double idx, double *val)
|
1126
1323
|
{
|
@@ -1128,6 +1325,7 @@ fetch_linear_addr (ca_size_t n, double *y, double idx, double *val)
|
|
1128
1325
|
double w;
|
1129
1326
|
|
1130
1327
|
if ( idx < 0 || idx > n - 1 ) {
|
1328
|
+
*val = 0.0/0.0;
|
1131
1329
|
return -1;
|
1132
1330
|
}
|
1133
1331
|
|
@@ -1154,7 +1352,7 @@ rb_ca_fetch_linear_addr (volatile VALUE self, volatile VALUE vx)
|
|
1154
1352
|
ca_size_t i;
|
1155
1353
|
boolean8_t *mx, *mo;
|
1156
1354
|
|
1157
|
-
|
1355
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1158
1356
|
|
1159
1357
|
if ( rb_ca_is_any_masked(self) ) {
|
1160
1358
|
rb_raise(rb_eRuntimeError, "self should not have any masked elements");
|
@@ -1250,7 +1448,7 @@ rb_ca_find_linear_addr_vectorized (volatile VALUE self, volatile VALUE vx)
|
|
1250
1448
|
ca_size_t i, k;
|
1251
1449
|
boolean8_t *mx, *mo;
|
1252
1450
|
|
1253
|
-
|
1451
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1254
1452
|
|
1255
1453
|
if ( rb_ca_is_any_masked(self) ) {
|
1256
1454
|
rb_raise(rb_eRuntimeError, "self should not have any masked elements");
|
@@ -1352,7 +1550,7 @@ rb_ca_fetch_linear_addr_vectorized (volatile VALUE self, volatile VALUE vx)
|
|
1352
1550
|
ca_size_t i, k;
|
1353
1551
|
boolean8_t *mx, *mo;
|
1354
1552
|
|
1355
|
-
|
1553
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1356
1554
|
|
1357
1555
|
if ( rb_ca_is_any_masked(self) ) {
|
1358
1556
|
rb_raise(rb_eRuntimeError, "self should not have any masked elements");
|
@@ -1471,6 +1669,12 @@ Init_carray_order ()
|
|
1471
1669
|
rb_define_method(rb_cCArray, "vectorized_section",
|
1472
1670
|
rb_ca_binary_search_linear_index_vectorized, 1);
|
1473
1671
|
|
1672
|
+
rb_define_method(rb_cCArray, "section_linear",
|
1673
|
+
rb_ca_linear_search_linear_index, 1);
|
1674
|
+
|
1675
|
+
rb_define_method(rb_cCArray, "vectorized_section_linear",
|
1676
|
+
rb_ca_linear_search_linear_index_vectorized, 1);
|
1677
|
+
|
1474
1678
|
rb_define_method(rb_cCArray, "fetch_linear_addr",
|
1475
1679
|
rb_ca_fetch_linear_addr, 1);
|
1476
1680
|
|
data/ext/carray_sort_addr.c
CHANGED
@@ -191,7 +191,7 @@ rb_ca_s_sort_addr (int argc, VALUE *argv, VALUE self)
|
|
191
191
|
|
192
192
|
for (j=0; j<argc; j++) {
|
193
193
|
CArray *ca;
|
194
|
-
|
194
|
+
TypedData_Get_Struct(argv[j], CArray, &carray_data_type, ca);
|
195
195
|
base->ca[j] = ca;
|
196
196
|
ca_attach(ca);
|
197
197
|
}
|
@@ -211,7 +211,7 @@ rb_ca_s_sort_addr (int argc, VALUE *argv, VALUE self)
|
|
211
211
|
#endif
|
212
212
|
|
213
213
|
out = rb_ca_template_with_type(argv[0], INT2NUM(CA_SIZE), INT2NUM(0));
|
214
|
-
|
214
|
+
TypedData_Get_Struct(out, CArray, &carray_data_type, co);
|
215
215
|
q = (ca_size_t *) co->ptr;
|
216
216
|
|
217
217
|
for (i=0; i<elements; i++) {
|
data/ext/carray_stat.c
CHANGED
@@ -89,7 +89,7 @@ rb_ca_cummin (int argc, VALUE *argv, VALUE self)
|
|
89
89
|
rb_scan_args(argc, argv, "02", (VALUE *) &rmin_count, (VALUE *) &rfval);
|
90
90
|
}
|
91
91
|
|
92
|
-
|
92
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
93
93
|
|
94
94
|
co = ca_template(ca);
|
95
95
|
obj = ca_wrap_struct(co);
|
@@ -196,7 +196,7 @@ rb_ca_cummax (int argc, VALUE *argv, VALUE self)
|
|
196
196
|
rb_scan_args(argc, argv, "02", (VALUE *) &rmin_count, (VALUE *) &rfval);
|
197
197
|
}
|
198
198
|
|
199
|
-
|
199
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
200
200
|
|
201
201
|
co = ca_template(ca);
|
202
202
|
obj = ca_wrap_struct(co);
|
@@ -288,7 +288,7 @@ rb_ca_cumprod (int argc, VALUE *argv, VALUE self)
|
|
288
288
|
rb_scan_args(argc, argv, "02", (VALUE *) &rmin_count, (VALUE *) &rfval);
|
289
289
|
}
|
290
290
|
|
291
|
-
|
291
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
292
292
|
|
293
293
|
if ( ca_is_complex_type(ca) ) {
|
294
294
|
co = carray_new(CA_CMPLX128, ca->ndim, ca->dim, 0, NULL);
|
@@ -381,7 +381,7 @@ rb_ca_wsum (int argc, VALUE *argv, VALUE self)
|
|
381
381
|
rb_scan_args(argc, argv, "12", (VALUE *) &weight, (VALUE *) &rmin_count, (VALUE *) &rfval);
|
382
382
|
}
|
383
383
|
|
384
|
-
|
384
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
385
385
|
cw = ca_wrap_readonly(weight, ca->data_type);
|
386
386
|
|
387
387
|
ca_check_same_elements(ca, cw);
|
@@ -490,7 +490,7 @@ rb_ca_cumwsum (int argc, VALUE *argv, VALUE self)
|
|
490
490
|
rb_scan_args(argc, argv, "12", (VALUE *) &weight, (VALUE *) &rmin_count, (VALUE *) &rfval);
|
491
491
|
}
|
492
492
|
|
493
|
-
|
493
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
494
494
|
cw = ca_wrap_readonly(weight, ca->data_type);
|
495
495
|
|
496
496
|
ca_check_same_elements(ca, cw);
|
@@ -595,7 +595,7 @@ rb_ca_wmean (int argc, VALUE *argv, VALUE self)
|
|
595
595
|
rb_scan_args(argc, argv, "12", (VALUE *) &weight, (VALUE *) &rmin_count, (VALUE *) &rfval);
|
596
596
|
}
|
597
597
|
|
598
|
-
|
598
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
599
599
|
cw = ca_wrap_readonly(weight, ca->data_type);
|
600
600
|
|
601
601
|
ca_check_same_elements(ca, cw);
|
@@ -712,7 +712,7 @@ rb_ca_variancep (int argc, VALUE *argv, VALUE self)
|
|
712
712
|
rb_scan_args(argc, argv, "02", (VALUE *) &rmin_count, (VALUE *) &rfval);
|
713
713
|
}
|
714
714
|
|
715
|
-
|
715
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
716
716
|
|
717
717
|
if ( ca->elements == 0 ) {
|
718
718
|
return ( NIL_P(rfval) ) ? CA_UNDEF : rfval;
|
@@ -815,7 +815,7 @@ rb_ca_variance (int argc, VALUE *argv, VALUE self)
|
|
815
815
|
rb_scan_args(argc, argv, "02", (VALUE *) &rmin_count, (VALUE *) &rfval);
|
816
816
|
}
|
817
817
|
|
818
|
-
|
818
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
819
819
|
|
820
820
|
if ( ca->elements == 0 ) {
|
821
821
|
return ( NIL_P(rfval) ) ? CA_UNDEF : rfval;
|
@@ -863,7 +863,7 @@ rb_ca_count_true (int argc, VALUE *argv, VALUE self)
|
|
863
863
|
rb_scan_args(argc, argv, "02", (VALUE *) &rmin_count, (VALUE *) &rfval);
|
864
864
|
}
|
865
865
|
|
866
|
-
|
866
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
867
867
|
|
868
868
|
if ( ! ca_is_boolean_type(ca) ) {
|
869
869
|
rb_raise(rb_eCADataTypeError,
|
@@ -932,7 +932,7 @@ rb_ca_count_false (int argc, VALUE *argv, VALUE self)
|
|
932
932
|
rb_scan_args(argc, argv, "02", (VALUE *) &rmin_count, (VALUE *) &rfval);
|
933
933
|
}
|
934
934
|
|
935
|
-
|
935
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
936
936
|
|
937
937
|
if ( ! ca_is_boolean_type(ca) ) {
|
938
938
|
rb_raise(rb_eCADataTypeError,
|
@@ -1109,7 +1109,7 @@ rb_ca_count_equal (int argc, VALUE *argv, VALUE self)
|
|
1109
1109
|
|
1110
1110
|
rb_scan_args(argc, argv, "12", (VALUE *) &value, (VALUE *) &rmin_count, (VALUE *) &rfval);
|
1111
1111
|
|
1112
|
-
|
1112
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1113
1113
|
|
1114
1114
|
if ( ca->elements == 0 ) {
|
1115
1115
|
return ( NIL_P(rfval) ) ? CA_UNDEF : rfval;
|
@@ -1204,7 +1204,7 @@ rb_ca_count_equiv (int argc, VALUE *argv, VALUE self)
|
|
1204
1204
|
rb_scan_args(argc, argv, "22", (VALUE *) &value, (VALUE *) &reps, (VALUE *) &rmin_count, (VALUE *) &rfval);
|
1205
1205
|
}
|
1206
1206
|
|
1207
|
-
|
1207
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1208
1208
|
|
1209
1209
|
if ( ca->elements == 0 ) {
|
1210
1210
|
return ( NIL_P(rfval) ) ? CA_UNDEF : rfval;
|
@@ -1295,7 +1295,7 @@ rb_ca_count_close (int argc, VALUE *argv, VALUE self)
|
|
1295
1295
|
rb_scan_args(argc, argv, "22", (VALUE *) &value, (VALUE *) &aeps, (VALUE *) &rmin_count, (VALUE *) &rfval);
|
1296
1296
|
}
|
1297
1297
|
|
1298
|
-
|
1298
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1299
1299
|
|
1300
1300
|
if ( ca->elements == 0 ) {
|
1301
1301
|
return ( NIL_P(rfval) ) ? CA_UNDEF : rfval;
|
@@ -1420,7 +1420,7 @@ rb_ca_all_equal_p (int argc, VALUE *argv, VALUE self)
|
|
1420
1420
|
|
1421
1421
|
rb_scan_args(argc, argv, "1", (VALUE *) &value);
|
1422
1422
|
|
1423
|
-
|
1423
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1424
1424
|
|
1425
1425
|
ca_attach(ca);
|
1426
1426
|
|
@@ -1493,7 +1493,7 @@ rb_ca_all_equiv_p (int argc, VALUE *argv, VALUE self)
|
|
1493
1493
|
|
1494
1494
|
rb_scan_args(argc, argv, "2", (VALUE *) &value, (VALUE *) &reps);
|
1495
1495
|
|
1496
|
-
|
1496
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1497
1497
|
|
1498
1498
|
ca_attach(ca);
|
1499
1499
|
|
@@ -1561,7 +1561,7 @@ rb_ca_all_close_p (int argc, VALUE *argv, VALUE self)
|
|
1561
1561
|
|
1562
1562
|
rb_scan_args(argc, argv, "2", (VALUE *) &value, (VALUE *) &aeps);
|
1563
1563
|
|
1564
|
-
|
1564
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1565
1565
|
|
1566
1566
|
ca_attach(ca);
|
1567
1567
|
|
@@ -1673,7 +1673,7 @@ rb_ca_any_equal_p (int argc, VALUE *argv, VALUE self)
|
|
1673
1673
|
|
1674
1674
|
rb_scan_args(argc, argv, "1", (VALUE *) &value);
|
1675
1675
|
|
1676
|
-
|
1676
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1677
1677
|
|
1678
1678
|
ca_attach(ca);
|
1679
1679
|
|
@@ -1746,7 +1746,7 @@ rb_ca_any_equiv_p (int argc, VALUE *argv, VALUE self)
|
|
1746
1746
|
|
1747
1747
|
rb_scan_args(argc, argv, "2", (VALUE *) &value, (VALUE *) &reps);
|
1748
1748
|
|
1749
|
-
|
1749
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1750
1750
|
|
1751
1751
|
ca_attach(ca);
|
1752
1752
|
|
@@ -1814,7 +1814,7 @@ rb_ca_any_close_p (int argc, VALUE *argv, VALUE self)
|
|
1814
1814
|
|
1815
1815
|
rb_scan_args(argc, argv, "2", (VALUE *) &value, (VALUE *) &aeps);
|
1816
1816
|
|
1817
|
-
|
1817
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1818
1818
|
|
1819
1819
|
ca_attach(ca);
|
1820
1820
|
|
@@ -1902,7 +1902,7 @@ rb_ca_histogram (int argc, VALUE *argv, VALUE self)
|
|
1902
1902
|
|
1903
1903
|
rb_scan_args(argc, argv, "3", &vnum, &vmin, &vmax);
|
1904
1904
|
|
1905
|
-
|
1905
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1906
1906
|
|
1907
1907
|
icls = NUM2SIZE(vnum);
|
1908
1908
|
|
@@ -2019,7 +2019,7 @@ rb_ca_grade (int argc, VALUE *argv, VALUE self)
|
|
2019
2019
|
vmax = rb_funcall(self, rb_intern("max"), 0);
|
2020
2020
|
}
|
2021
2021
|
|
2022
|
-
|
2022
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
2023
2023
|
|
2024
2024
|
icls = NUM2LONG(vnum);
|
2025
2025
|
|
@@ -2028,7 +2028,7 @@ rb_ca_grade (int argc, VALUE *argv, VALUE self)
|
|
2028
2028
|
}
|
2029
2029
|
|
2030
2030
|
out = rb_carray_new_safe(CA_SIZE, ca->ndim, ca->dim, 0, NULL);
|
2031
|
-
|
2031
|
+
TypedData_Get_Struct(out, CArray, &carray_data_type, sa);
|
2032
2032
|
|
2033
2033
|
ca_attach(ca);
|
2034
2034
|
|
data/ext/carray_stat_proc.rb
CHANGED
@@ -1343,7 +1343,7 @@ rb_ca_stat_1d (VALUE self, VALUE rmc, VALUE vfval,
|
|
1343
1343
|
boolean8_t *m;
|
1344
1344
|
ca_size_t mc;
|
1345
1345
|
|
1346
|
-
|
1346
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1347
1347
|
|
1348
1348
|
if ( ! ca_proc[ca->data_type] ) {
|
1349
1349
|
rb_raise(rb_eCADataTypeError,
|
@@ -1411,7 +1411,7 @@ rb_ca_stat_nd_contig (VALUE self, VALUE vaxis, VALUE rmc, VALUE vfval,
|
|
1411
1411
|
CArray *ca, *co;
|
1412
1412
|
ca_size_t mc, ndim;
|
1413
1413
|
|
1414
|
-
|
1414
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1415
1415
|
|
1416
1416
|
if ( ! ca_proc[ca->data_type] ) {
|
1417
1417
|
rb_raise(rb_eCADataTypeError,
|
@@ -1425,7 +1425,7 @@ rb_ca_stat_nd_contig (VALUE self, VALUE vaxis, VALUE rmc, VALUE vfval,
|
|
1425
1425
|
}
|
1426
1426
|
|
1427
1427
|
out = rb_carray_new(data_type, ndim, ca->dim, 0, NULL);
|
1428
|
-
|
1428
|
+
TypedData_Get_Struct(out, CArray, &carray_data_type, co);
|
1429
1429
|
|
1430
1430
|
if ( ca_has_mask(ca) ) {
|
1431
1431
|
ca_create_mask(co);
|
@@ -1515,7 +1515,7 @@ rb_ca_stat_nd_discrete (VALUE self, VALUE vaxis, VALUE rmc, VALUE vfval,
|
|
1515
1515
|
ca_size_t mc;
|
1516
1516
|
ca_size_t i, k;
|
1517
1517
|
|
1518
|
-
|
1518
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1519
1519
|
|
1520
1520
|
for (i=0; i<ca->ndim; i++) {
|
1521
1521
|
dm[i] = 0;
|
@@ -1542,7 +1542,7 @@ rb_ca_stat_nd_discrete (VALUE self, VALUE vaxis, VALUE rmc, VALUE vfval,
|
|
1542
1542
|
}
|
1543
1543
|
|
1544
1544
|
out = rb_carray_new(data_type, out_ndim, out_dim, 0, NULL);
|
1545
|
-
|
1545
|
+
TypedData_Get_Struct(out, CArray, &carray_data_type, co);
|
1546
1546
|
|
1547
1547
|
first = carray_new(CA_SIZE, out_ndim, out_dim, 0, NULL);
|
1548
1548
|
first->ptr = realloc(first->ptr, first->bytes*(first->elements+1));
|
@@ -1619,7 +1619,7 @@ rb_ca_stat_general (int argc, VALUE *argv, VALUE self,
|
|
1619
1619
|
vfval = CA_NIL, vaxis;
|
1620
1620
|
CArray *ca;
|
1621
1621
|
|
1622
|
-
|
1622
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1623
1623
|
|
1624
1624
|
ropt = rb_pop_options(&argc, &argv);
|
1625
1625
|
rb_scan_options(ropt,
|
@@ -1746,7 +1746,7 @@ static VALUE
|
|
1746
1746
|
rb_ca_min (int argc, VALUE *argv, VALUE self)
|
1747
1747
|
{
|
1748
1748
|
CArray *ca;
|
1749
|
-
|
1749
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1750
1750
|
return rb_ca_stat_general(argc, argv, self, ca->data_type, ca_proc_min);
|
1751
1751
|
}
|
1752
1752
|
|
@@ -1760,7 +1760,7 @@ static VALUE
|
|
1760
1760
|
rb_ca_max (int argc, VALUE *argv, VALUE self)
|
1761
1761
|
{
|
1762
1762
|
CArray *ca;
|
1763
|
-
|
1763
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1764
1764
|
return rb_ca_stat_general(argc, argv, self, ca->data_type, ca_proc_max);
|
1765
1765
|
}
|
1766
1766
|
|
@@ -1774,7 +1774,7 @@ static VALUE
|
|
1774
1774
|
rb_ca_accum (int argc, VALUE *argv, VALUE self)
|
1775
1775
|
{
|
1776
1776
|
CArray *ca;
|
1777
|
-
|
1777
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1778
1778
|
return rb_ca_stat_general(argc, argv, self, ca->data_type, ca_proc_accum);
|
1779
1779
|
}
|
1780
1780
|
|
@@ -1788,7 +1788,7 @@ rb_ca_stat_type2 (int argc, VALUE *argv, VALUE self,
|
|
1788
1788
|
|
1789
1789
|
rb_scan_args(argc, argv, "02", (VALUE *) &rmc, (VALUE *) &rfval);
|
1790
1790
|
|
1791
|
-
|
1791
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1792
1792
|
|
1793
1793
|
if ( ! ca_proc[ca->data_type] ) {
|
1794
1794
|
rb_raise(rb_eCADataTypeError,
|
@@ -1797,7 +1797,7 @@ rb_ca_stat_type2 (int argc, VALUE *argv, VALUE self,
|
|
1797
1797
|
}
|
1798
1798
|
|
1799
1799
|
out = rb_carray_new(data_type, 1, &ca->elements, 0, NULL);
|
1800
|
-
|
1800
|
+
TypedData_Get_Struct(out, CArray, &carray_data_type, co);
|
1801
1801
|
|
1802
1802
|
if ( ca->elements == 0 ) {
|
1803
1803
|
;
|
@@ -1893,7 +1893,7 @@ rb_ca_dimstat_type2 (int argc, VALUE *argv, VALUE self,
|
|
1893
1893
|
|
1894
1894
|
rb_scan_args(argc, argv, "12", (VALUE *) &rndim, (VALUE *) &rmc, (VALUE *) &rfval);
|
1895
1895
|
|
1896
|
-
|
1896
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1897
1897
|
|
1898
1898
|
if ( ! ca_proc[ca->data_type] ) {
|
1899
1899
|
rb_raise(rb_eCADataTypeError,
|
@@ -1914,7 +1914,7 @@ rb_ca_dimstat_type2 (int argc, VALUE *argv, VALUE self,
|
|
1914
1914
|
odim[ndim] = ca->elements/n;
|
1915
1915
|
|
1916
1916
|
out = rb_carray_new(data_type, ndim+1, odim, 0, NULL);
|
1917
|
-
|
1917
|
+
TypedData_Get_Struct(out, CArray, &carray_data_type, co);
|
1918
1918
|
|
1919
1919
|
if ( ca_has_mask(ca) ) {
|
1920
1920
|
ca_create_mask(co);
|