carray 1.5.8 → 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 +17 -1
- 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 +320 -11
- data/ext/carray_sort_addr.c +2 -2
- data/ext/carray_stat.c +22 -22
- data/ext/carray_stat_proc.rb +15 -15
- 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");
|
@@ -1238,6 +1436,108 @@ rb_ca_fetch_linear_addr (volatile VALUE self, volatile VALUE vx)
|
|
1238
1436
|
*/
|
1239
1437
|
|
1240
1438
|
|
1439
|
+
static VALUE
|
1440
|
+
rb_ca_find_linear_addr_vectorized (volatile VALUE self, volatile VALUE vx)
|
1441
|
+
{
|
1442
|
+
volatile VALUE out, out0;
|
1443
|
+
CArray *ca, *sc, *cx, *co0, *co;
|
1444
|
+
double *x;
|
1445
|
+
double *px;
|
1446
|
+
double *po;
|
1447
|
+
ca_size_t nseri, nlist, nreq, xnseri;
|
1448
|
+
ca_size_t i, k;
|
1449
|
+
boolean8_t *mx, *mo;
|
1450
|
+
|
1451
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1452
|
+
|
1453
|
+
if ( rb_ca_is_any_masked(self) ) {
|
1454
|
+
rb_raise(rb_eRuntimeError, "self should not have any masked elements");
|
1455
|
+
}
|
1456
|
+
|
1457
|
+
sc = ca_wrap_readonly(self, CA_FLOAT64);
|
1458
|
+
cx = ca_wrap_readonly(vx, CA_FLOAT64);
|
1459
|
+
|
1460
|
+
if ( sc->ndim < 2 ) {
|
1461
|
+
rb_raise(rb_eRuntimeError, "ndim of self should be larger than 2");
|
1462
|
+
}
|
1463
|
+
|
1464
|
+
nseri = 1;
|
1465
|
+
for (i=0; i<sc->ndim-1; i++) {
|
1466
|
+
nseri *= sc->dim[i];
|
1467
|
+
}
|
1468
|
+
nlist = sc->dim[sc->ndim-1];
|
1469
|
+
|
1470
|
+
if ( cx->ndim < sc->ndim - 1 ) {
|
1471
|
+
rb_raise(rb_eRuntimeError, "ndim of first argument should be larger than (ndim - 1) of self");
|
1472
|
+
}
|
1473
|
+
|
1474
|
+
xnseri = 1;
|
1475
|
+
for (i=0; i<sc->ndim-1; i++) {
|
1476
|
+
xnseri *= cx->dim[i];
|
1477
|
+
}
|
1478
|
+
|
1479
|
+
if ( xnseri != nseri ) {
|
1480
|
+
rb_raise(rb_eRuntimeError, "1st dimension should be same between self and 1st argument");
|
1481
|
+
}
|
1482
|
+
|
1483
|
+
if ( cx->ndim == sc->ndim - 1 ) {
|
1484
|
+
nreq = 1;
|
1485
|
+
}
|
1486
|
+
else {
|
1487
|
+
nreq = cx->dim[cx->ndim-1];
|
1488
|
+
}
|
1489
|
+
|
1490
|
+
co0 = carray_new(ca->data_type, cx->ndim, cx->dim, 0, NULL);
|
1491
|
+
out = out0 = ca_wrap_struct(co0);
|
1492
|
+
co = ca_wrap_writable(out, CA_FLOAT64);
|
1493
|
+
|
1494
|
+
ca_attach_n(3, sc, cx, co);
|
1495
|
+
|
1496
|
+
x = (double*) sc->ptr;
|
1497
|
+
px = (double*) cx->ptr;
|
1498
|
+
po = (double*) co->ptr;
|
1499
|
+
|
1500
|
+
ca_create_mask(co);
|
1501
|
+
ca_update_mask(cx);
|
1502
|
+
|
1503
|
+
if ( cx->mask ) {
|
1504
|
+
mx = (boolean8_t *) cx->mask->ptr;
|
1505
|
+
mo = (boolean8_t *) co->mask->ptr;
|
1506
|
+
for (k=0; k<nseri; k++) {
|
1507
|
+
for (i=0; i<nreq; i++) {
|
1508
|
+
if ( ! *mx ) {
|
1509
|
+
if ( linear_index(nlist, x, *px, po) ) {
|
1510
|
+
*mo = 1;
|
1511
|
+
}
|
1512
|
+
}
|
1513
|
+
else {
|
1514
|
+
*mo = 1;
|
1515
|
+
}
|
1516
|
+
mx++; mo++; px++, po++;
|
1517
|
+
}
|
1518
|
+
x += nlist;
|
1519
|
+
}
|
1520
|
+
}
|
1521
|
+
else {
|
1522
|
+
mo = (boolean8_t *) co->mask->ptr;
|
1523
|
+
for (k=0; k<nseri; k++) {
|
1524
|
+
for (i=0; i<nreq; i++) {
|
1525
|
+
if ( linear_index(nlist, x, *px, po) ) {
|
1526
|
+
*mo = 1;
|
1527
|
+
}
|
1528
|
+
mo++; px++; po++;
|
1529
|
+
}
|
1530
|
+
x += nlist;
|
1531
|
+
}
|
1532
|
+
}
|
1533
|
+
|
1534
|
+
ca_sync(co);
|
1535
|
+
ca_detach_n(3, sc, cx, co);
|
1536
|
+
|
1537
|
+
return out0;
|
1538
|
+
}
|
1539
|
+
|
1540
|
+
|
1241
1541
|
static VALUE
|
1242
1542
|
rb_ca_fetch_linear_addr_vectorized (volatile VALUE self, volatile VALUE vx)
|
1243
1543
|
{
|
@@ -1250,7 +1550,7 @@ rb_ca_fetch_linear_addr_vectorized (volatile VALUE self, volatile VALUE vx)
|
|
1250
1550
|
ca_size_t i, k;
|
1251
1551
|
boolean8_t *mx, *mo;
|
1252
1552
|
|
1253
|
-
|
1553
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
1254
1554
|
|
1255
1555
|
if ( rb_ca_is_any_masked(self) ) {
|
1256
1556
|
rb_raise(rb_eRuntimeError, "self should not have any masked elements");
|
@@ -1369,9 +1669,18 @@ Init_carray_order ()
|
|
1369
1669
|
rb_define_method(rb_cCArray, "vectorized_section",
|
1370
1670
|
rb_ca_binary_search_linear_index_vectorized, 1);
|
1371
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
|
+
|
1372
1678
|
rb_define_method(rb_cCArray, "fetch_linear_addr",
|
1373
1679
|
rb_ca_fetch_linear_addr, 1);
|
1374
1680
|
|
1681
|
+
rb_define_method(rb_cCArray, "vectorized_find_linear_addr",
|
1682
|
+
rb_ca_find_linear_addr_vectorized, 1);
|
1683
|
+
|
1375
1684
|
rb_define_method(rb_cCArray, "vectorized_fetch_linear_addr",
|
1376
1685
|
rb_ca_fetch_linear_addr_vectorized, 1);
|
1377
1686
|
|
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
|
|