carray 1.5.8 → 1.5.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/NEWS.md +7 -1
- data/carray.gemspec +1 -1
- data/ext/carray_order.c +105 -0
- data/ext/carray_stat_proc.rb +2 -2
- data/ext/version.h +4 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 172f193a4ae5241f1b91116374bb05bfa9c5ab184d8a72e7f3a1a564541eff1d
|
4
|
+
data.tar.gz: c6a650327904d42d22a56b148f6e381a1940a1d6d91099509e53080b857572c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf6e6cd9c71441d16f6342ff7cdef459a5fb9d229083650241035000ba2dfa0e313e0fab2fd47b0b401b7a4f82e92564d6aad97f975f6100063e17b8f7567dbb
|
7
|
+
data.tar.gz: 8fca46a6402dd6ad29841429551dafa128bf1146218eb527236aff2f5d8c29cb127b180c1b2c766b39dd8b26c69641d916d7570823a5e4fd590052c9f9bee411
|
data/NEWS.md
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
ChangeLog of Ruby/CArray
|
2
2
|
========================
|
3
3
|
|
4
|
+
1.5.8 -> 1.5.9
|
5
|
+
--------------
|
6
|
+
|
7
|
+
* [New] Add new method 'CArray#vectorized_find_linear_addr'
|
8
|
+
* [Fix] Fixed invalid return value type in CArray##stddev
|
9
|
+
|
4
10
|
1.5.7 -> 1.5.8
|
5
11
|
--------------
|
6
12
|
|
@@ -14,7 +20,7 @@ ChangeLog of Ruby/CArray
|
|
14
20
|
--------------
|
15
21
|
|
16
22
|
* [Mod] Modify the methods 'CArray#first' and 'CArray#last' to return nil when the number of elements is zero
|
17
|
-
* [Fix]
|
23
|
+
* [Fix] Add check of having ArithmeticSeuqence in ruby_carray.c
|
18
24
|
|
19
25
|
1.5.5 -> 1.5.6
|
20
26
|
--------------
|
data/carray.gemspec
CHANGED
data/ext/carray_order.c
CHANGED
@@ -1238,6 +1238,108 @@ rb_ca_fetch_linear_addr (volatile VALUE self, volatile VALUE vx)
|
|
1238
1238
|
*/
|
1239
1239
|
|
1240
1240
|
|
1241
|
+
static VALUE
|
1242
|
+
rb_ca_find_linear_addr_vectorized (volatile VALUE self, volatile VALUE vx)
|
1243
|
+
{
|
1244
|
+
volatile VALUE out, out0;
|
1245
|
+
CArray *ca, *sc, *cx, *co0, *co;
|
1246
|
+
double *x;
|
1247
|
+
double *px;
|
1248
|
+
double *po;
|
1249
|
+
ca_size_t nseri, nlist, nreq, xnseri;
|
1250
|
+
ca_size_t i, k;
|
1251
|
+
boolean8_t *mx, *mo;
|
1252
|
+
|
1253
|
+
Data_Get_Struct(self, CArray, ca);
|
1254
|
+
|
1255
|
+
if ( rb_ca_is_any_masked(self) ) {
|
1256
|
+
rb_raise(rb_eRuntimeError, "self should not have any masked elements");
|
1257
|
+
}
|
1258
|
+
|
1259
|
+
sc = ca_wrap_readonly(self, CA_FLOAT64);
|
1260
|
+
cx = ca_wrap_readonly(vx, CA_FLOAT64);
|
1261
|
+
|
1262
|
+
if ( sc->ndim < 2 ) {
|
1263
|
+
rb_raise(rb_eRuntimeError, "ndim of self should be larger than 2");
|
1264
|
+
}
|
1265
|
+
|
1266
|
+
nseri = 1;
|
1267
|
+
for (i=0; i<sc->ndim-1; i++) {
|
1268
|
+
nseri *= sc->dim[i];
|
1269
|
+
}
|
1270
|
+
nlist = sc->dim[sc->ndim-1];
|
1271
|
+
|
1272
|
+
if ( cx->ndim < sc->ndim - 1 ) {
|
1273
|
+
rb_raise(rb_eRuntimeError, "ndim of first argument should be larger than (ndim - 1) of self");
|
1274
|
+
}
|
1275
|
+
|
1276
|
+
xnseri = 1;
|
1277
|
+
for (i=0; i<sc->ndim-1; i++) {
|
1278
|
+
xnseri *= cx->dim[i];
|
1279
|
+
}
|
1280
|
+
|
1281
|
+
if ( xnseri != nseri ) {
|
1282
|
+
rb_raise(rb_eRuntimeError, "1st dimension should be same between self and 1st argument");
|
1283
|
+
}
|
1284
|
+
|
1285
|
+
if ( cx->ndim == sc->ndim - 1 ) {
|
1286
|
+
nreq = 1;
|
1287
|
+
}
|
1288
|
+
else {
|
1289
|
+
nreq = cx->dim[cx->ndim-1];
|
1290
|
+
}
|
1291
|
+
|
1292
|
+
co0 = carray_new(ca->data_type, cx->ndim, cx->dim, 0, NULL);
|
1293
|
+
out = out0 = ca_wrap_struct(co0);
|
1294
|
+
co = ca_wrap_writable(out, CA_FLOAT64);
|
1295
|
+
|
1296
|
+
ca_attach_n(3, sc, cx, co);
|
1297
|
+
|
1298
|
+
x = (double*) sc->ptr;
|
1299
|
+
px = (double*) cx->ptr;
|
1300
|
+
po = (double*) co->ptr;
|
1301
|
+
|
1302
|
+
ca_create_mask(co);
|
1303
|
+
ca_update_mask(cx);
|
1304
|
+
|
1305
|
+
if ( cx->mask ) {
|
1306
|
+
mx = (boolean8_t *) cx->mask->ptr;
|
1307
|
+
mo = (boolean8_t *) co->mask->ptr;
|
1308
|
+
for (k=0; k<nseri; k++) {
|
1309
|
+
for (i=0; i<nreq; i++) {
|
1310
|
+
if ( ! *mx ) {
|
1311
|
+
if ( linear_index(nlist, x, *px, po) ) {
|
1312
|
+
*mo = 1;
|
1313
|
+
}
|
1314
|
+
}
|
1315
|
+
else {
|
1316
|
+
*mo = 1;
|
1317
|
+
}
|
1318
|
+
mx++; mo++; px++, po++;
|
1319
|
+
}
|
1320
|
+
x += nlist;
|
1321
|
+
}
|
1322
|
+
}
|
1323
|
+
else {
|
1324
|
+
mo = (boolean8_t *) co->mask->ptr;
|
1325
|
+
for (k=0; k<nseri; k++) {
|
1326
|
+
for (i=0; i<nreq; i++) {
|
1327
|
+
if ( linear_index(nlist, x, *px, po) ) {
|
1328
|
+
*mo = 1;
|
1329
|
+
}
|
1330
|
+
mo++; px++; po++;
|
1331
|
+
}
|
1332
|
+
x += nlist;
|
1333
|
+
}
|
1334
|
+
}
|
1335
|
+
|
1336
|
+
ca_sync(co);
|
1337
|
+
ca_detach_n(3, sc, cx, co);
|
1338
|
+
|
1339
|
+
return out0;
|
1340
|
+
}
|
1341
|
+
|
1342
|
+
|
1241
1343
|
static VALUE
|
1242
1344
|
rb_ca_fetch_linear_addr_vectorized (volatile VALUE self, volatile VALUE vx)
|
1243
1345
|
{
|
@@ -1372,6 +1474,9 @@ Init_carray_order ()
|
|
1372
1474
|
rb_define_method(rb_cCArray, "fetch_linear_addr",
|
1373
1475
|
rb_ca_fetch_linear_addr, 1);
|
1374
1476
|
|
1477
|
+
rb_define_method(rb_cCArray, "vectorized_find_linear_addr",
|
1478
|
+
rb_ca_find_linear_addr_vectorized, 1);
|
1479
|
+
|
1375
1480
|
rb_define_method(rb_cCArray, "vectorized_fetch_linear_addr",
|
1376
1481
|
rb_ca_fetch_linear_addr_vectorized, 1);
|
1377
1482
|
|
data/ext/carray_stat_proc.rb
CHANGED
@@ -745,7 +745,7 @@ static void
|
|
745
745
|
ca_proc_stddev_<type> (ca_size_t elements, ca_size_t min_count,
|
746
746
|
boolean8_t *m, void *ptr, CAStatIterator *it,
|
747
747
|
int return_object, VALUE *retobj,
|
748
|
-
boolean8_t *retmask,
|
748
|
+
boolean8_t *retmask, float64_t *retval)
|
749
749
|
{
|
750
750
|
volatile <atype> sum = <azero>, sum2 = <azero>, ave, var, diff;
|
751
751
|
<type> *p = (<type> *) ptr;
|
@@ -802,7 +802,7 @@ ca_proc_stddev_<type> (ca_size_t elements, ca_size_t min_count,
|
|
802
802
|
if ( retmask ) {
|
803
803
|
*retmask = ( count > min_count ) ? 1 : 0;
|
804
804
|
}
|
805
|
-
*retval = sqrt_<op_type>(var);
|
805
|
+
*retval = <type2dbl>(sqrt_<op_type>(var));
|
806
806
|
}
|
807
807
|
}
|
808
808
|
|
data/ext/version.h
CHANGED
@@ -8,9 +8,9 @@
|
|
8
8
|
|
9
9
|
---------------------------------------------------------------------------- */
|
10
10
|
|
11
|
-
#define CA_VERSION "1.5.
|
12
|
-
#define CA_VERSION_CODE
|
11
|
+
#define CA_VERSION "1.5.9"
|
12
|
+
#define CA_VERSION_CODE 159
|
13
13
|
#define CA_VERSION_MAJOR 1
|
14
14
|
#define CA_VERSION_MINOR 5
|
15
|
-
#define CA_VERSION_TEENY
|
16
|
-
#define CA_VERSION_DATE "2023/
|
15
|
+
#define CA_VERSION_TEENY 9
|
16
|
+
#define CA_VERSION_DATE "2023/06/19"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: carray
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hiroki Motoyoshi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-06-19 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |2
|
14
14
|
Ruby/CArray is an extension library for the multi-dimensional numerical array
|