carray 3.0.4 → 3.0.5
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/CHANGELOG.md +205 -0
- data/carray.gemspec +1 -1
- data/ext/ca_array_pool.c +25 -1
- data/ext/ca_axis_dispatch.c +13 -20
- data/ext/ca_categorical_iterator.c +27 -20
- data/ext/ca_compare.c +4 -4
- data/ext/ca_composite_dispatch.c +9 -9
- data/ext/ca_kernel_iterator.c +6 -6
- data/ext/ca_kernel_iterator.h +112 -83
- data/ext/ca_obj_array.c +69 -19
- data/ext/ca_obj_bincmp.c +1 -0
- data/ext/ca_obj_binop.c +1 -0
- data/ext/ca_obj_bitarray.c +5 -1
- data/ext/ca_obj_bitfield.c +58 -43
- data/ext/ca_obj_byte_swap.c +2 -1
- data/ext/ca_obj_const_string.c +15 -3
- data/ext/ca_obj_face.c +42 -1
- data/ext/ca_obj_field.c +13 -3
- data/ext/ca_obj_grid.c +52 -5
- data/ext/ca_obj_monop.c +46 -10
- data/ext/ca_obj_object.c +64 -12
- data/ext/ca_obj_record.c +3 -0
- data/ext/ca_obj_reduce.c +4 -0
- data/ext/ca_obj_refer.c +18 -9
- data/ext/ca_obj_roll.c +26 -6
- data/ext/ca_obj_select.c +34 -5
- data/ext/ca_obj_shift.c +31 -7
- data/ext/ca_obj_stack.c +1 -0
- data/ext/ca_obj_stride.c +28 -19
- data/ext/ca_obj_string.c +11 -2
- data/ext/ca_obj_tile.c +27 -7
- data/ext/ca_obj_transpose.c +8 -4
- data/ext/ca_obj_triop.c +3 -0
- data/ext/ca_obj_window.c +79 -50
- data/ext/ca_op_ipower.c +4 -4
- data/ext/ca_sort_kernels.h +6 -3
- data/ext/carray.h +33 -0
- data/ext/carray_access.c +16 -3
- data/ext/carray_attribute.c +24 -0
- data/ext/carray_cast.c +243 -82
- data/ext/carray_cast_func.rb +56 -26
- data/ext/carray_conversion.c +2 -2
- data/ext/carray_core.c +3 -0
- data/ext/carray_count.c +6 -0
- data/ext/carray_element.c +9 -4
- data/ext/carray_factorize.c +20 -20
- data/ext/carray_generate.c +8 -2
- data/ext/carray_histogram.c +1 -1
- data/ext/carray_index_classifier.c +4 -4
- data/ext/carray_internal.h +12 -0
- data/ext/carray_kernels_bincmp.c +168 -168
- data/ext/carray_kernels_binop.c +900 -900
- data/ext/carray_kernels_init.c +4 -4
- data/ext/carray_kernels_moncmp.c +96 -96
- data/ext/carray_kernels_monop.c +1984 -1984
- data/ext/carray_kernels_reduce_aggregate.c +1733 -1733
- data/ext/carray_kernels_reduce_cumulative.c +642 -642
- data/ext/carray_kernels_reduce_extreme.c +1150 -1150
- data/ext/carray_kernels_reduce_variance.c +258 -258
- data/ext/carray_kernels_scan.c +128 -128
- data/ext/carray_kernels_search.c +340 -340
- data/ext/carray_kernels_sort.c +295 -304
- data/ext/carray_kernels_triop.c +114 -114
- data/ext/carray_key_windows.c +4 -0
- data/ext/carray_mask.c +45 -22
- data/ext/carray_memory_view.c +2 -2
- data/ext/carray_operator.c +5 -5
- data/ext/carray_order.c +227 -8
- data/ext/carray_random.c +18 -18
- data/ext/carray_scatter.c +24 -7
- data/ext/carray_slab.c +32 -9
- data/ext/carray_sort.c +224 -16
- data/ext/carray_sort_kernel.c +5 -7
- data/ext/carray_struct.c +35 -43
- data/ext/carray_time_text.c +4 -2
- data/ext/carray_utils.c +63 -21
- data/ext/mkkernel.rb +210 -115
- data/ext/version.h +4 -4
- data/lib/carray/attribute.rb +17 -4
- data/lib/carray/basics.rb +27 -7
- data/lib/carray/categorical.rb +30 -16
- data/lib/carray/categorical_iterator.rb +6 -6
- data/lib/carray/const_string.rb +10 -0
- data/lib/carray/data_type_extension.rb +8 -1
- data/lib/carray/fixlen_string.rb +41 -2
- data/lib/carray/frame/column_verbs.rb +4 -3
- data/lib/carray/frame/concat.rb +17 -3
- data/lib/carray/frame/frame.rb +6 -7
- data/lib/carray/frame/group.rb +100 -13
- data/lib/carray/frame/io.rb +3 -1
- data/lib/carray/fuse_source.rb +31 -2
- data/lib/carray/lazy.rb +35 -0
- data/lib/carray/methods/is_in.rb +8 -1
- data/lib/carray/segment_iterator.rb +12 -8
- data/lib/carray/serialize.rb +19 -2
- data/lib/carray/stack.rb +15 -12
- data/lib/carray/string.rb +8 -0
- data/lib/carray/string_operation_extension.rb +13 -5
- data/lib/carray/struct_builder.rb +5 -3
- data/lib/carray/time.rb +107 -68
- data/yard-stubs/ca_obj_transpose.rb +5 -4
- data/yard-stubs/carray_attribute.rb +3 -1
- data/yard-stubs/carray_cast.rb +2 -0
- data/yard-stubs/carray_conversion.rb +5 -1
- data/yard-stubs/carray_element.rb +7 -6
- data/yard-stubs/carray_mask.rb +8 -3
- data/yard-stubs/carray_math.rb +14 -4
- data/yard-stubs/carray_order.rb +100 -4
- data/yard-stubs/carray_scatter.rb +7 -5
- metadata +1 -1
data/ext/carray_kernels_search.c
CHANGED
|
@@ -747,9 +747,9 @@ find_value_index_ki_native_i16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
747
747
|
return voutu;
|
|
748
748
|
}
|
|
749
749
|
ca_check_integer_fits(rval, CA_INT16);
|
|
750
|
-
|
|
750
|
+
ca_u_int16_t query_val_buf;
|
|
751
751
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
752
|
-
|
|
752
|
+
ca_u_int16_t query_val = query_val_buf;
|
|
753
753
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
754
754
|
|
|
755
755
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -781,7 +781,7 @@ find_value_index_ki_native_i16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
781
781
|
{
|
|
782
782
|
result = (ca_size_t) -1;
|
|
783
783
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
784
|
-
|
|
784
|
+
ca_u_int16_t v = *(ca_u_int16_t *)(slab_ptr + i * slab_stride);
|
|
785
785
|
if ( v == query_val ) { result = i; break; }
|
|
786
786
|
}
|
|
787
787
|
}
|
|
@@ -1017,7 +1017,7 @@ find_value_index_ki_native_i16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
1017
1017
|
val_offset += out_idx[k] * val_strides[k];
|
|
1018
1018
|
}
|
|
1019
1019
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
1020
|
-
|
|
1020
|
+
ca_u_int16_t query_val = *(ca_u_int16_t *)(cv->ptr + val_offset);
|
|
1021
1021
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
1022
1022
|
double query_eps = 0.0; (void) query_eps;
|
|
1023
1023
|
(void) mask_in;
|
|
@@ -1031,7 +1031,7 @@ find_value_index_ki_native_i16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
1031
1031
|
{
|
|
1032
1032
|
result = (ca_size_t) -1;
|
|
1033
1033
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
1034
|
-
|
|
1034
|
+
ca_u_int16_t v = *(ca_u_int16_t *)(slab_ptr + i * slab_stride);
|
|
1035
1035
|
if ( v == query_val ) { result = i; break; }
|
|
1036
1036
|
}
|
|
1037
1037
|
}
|
|
@@ -1084,9 +1084,9 @@ find_value_index_ki_native_u16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
1084
1084
|
return voutu;
|
|
1085
1085
|
}
|
|
1086
1086
|
ca_check_integer_fits(rval, CA_UINT16);
|
|
1087
|
-
|
|
1087
|
+
ca_u_uint16_t query_val_buf;
|
|
1088
1088
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
1089
|
-
|
|
1089
|
+
ca_u_uint16_t query_val = query_val_buf;
|
|
1090
1090
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
1091
1091
|
|
|
1092
1092
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -1118,7 +1118,7 @@ find_value_index_ki_native_u16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
1118
1118
|
{
|
|
1119
1119
|
result = (ca_size_t) -1;
|
|
1120
1120
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
1121
|
-
|
|
1121
|
+
ca_u_uint16_t v = *(ca_u_uint16_t *)(slab_ptr + i * slab_stride);
|
|
1122
1122
|
if ( v == query_val ) { result = i; break; }
|
|
1123
1123
|
}
|
|
1124
1124
|
}
|
|
@@ -1354,7 +1354,7 @@ find_value_index_ki_native_u16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
1354
1354
|
val_offset += out_idx[k] * val_strides[k];
|
|
1355
1355
|
}
|
|
1356
1356
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
1357
|
-
|
|
1357
|
+
ca_u_uint16_t query_val = *(ca_u_uint16_t *)(cv->ptr + val_offset);
|
|
1358
1358
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
1359
1359
|
double query_eps = 0.0; (void) query_eps;
|
|
1360
1360
|
(void) mask_in;
|
|
@@ -1368,7 +1368,7 @@ find_value_index_ki_native_u16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
1368
1368
|
{
|
|
1369
1369
|
result = (ca_size_t) -1;
|
|
1370
1370
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
1371
|
-
|
|
1371
|
+
ca_u_uint16_t v = *(ca_u_uint16_t *)(slab_ptr + i * slab_stride);
|
|
1372
1372
|
if ( v == query_val ) { result = i; break; }
|
|
1373
1373
|
}
|
|
1374
1374
|
}
|
|
@@ -1421,9 +1421,9 @@ find_value_index_ki_native_i32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
1421
1421
|
return voutu;
|
|
1422
1422
|
}
|
|
1423
1423
|
ca_check_integer_fits(rval, CA_INT32);
|
|
1424
|
-
|
|
1424
|
+
ca_u_int32_t query_val_buf;
|
|
1425
1425
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
1426
|
-
|
|
1426
|
+
ca_u_int32_t query_val = query_val_buf;
|
|
1427
1427
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
1428
1428
|
|
|
1429
1429
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -1455,7 +1455,7 @@ find_value_index_ki_native_i32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
1455
1455
|
{
|
|
1456
1456
|
result = (ca_size_t) -1;
|
|
1457
1457
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
1458
|
-
|
|
1458
|
+
ca_u_int32_t v = *(ca_u_int32_t *)(slab_ptr + i * slab_stride);
|
|
1459
1459
|
if ( v == query_val ) { result = i; break; }
|
|
1460
1460
|
}
|
|
1461
1461
|
}
|
|
@@ -1691,7 +1691,7 @@ find_value_index_ki_native_i32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
1691
1691
|
val_offset += out_idx[k] * val_strides[k];
|
|
1692
1692
|
}
|
|
1693
1693
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
1694
|
-
|
|
1694
|
+
ca_u_int32_t query_val = *(ca_u_int32_t *)(cv->ptr + val_offset);
|
|
1695
1695
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
1696
1696
|
double query_eps = 0.0; (void) query_eps;
|
|
1697
1697
|
(void) mask_in;
|
|
@@ -1705,7 +1705,7 @@ find_value_index_ki_native_i32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
1705
1705
|
{
|
|
1706
1706
|
result = (ca_size_t) -1;
|
|
1707
1707
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
1708
|
-
|
|
1708
|
+
ca_u_int32_t v = *(ca_u_int32_t *)(slab_ptr + i * slab_stride);
|
|
1709
1709
|
if ( v == query_val ) { result = i; break; }
|
|
1710
1710
|
}
|
|
1711
1711
|
}
|
|
@@ -1758,9 +1758,9 @@ find_value_index_ki_native_u32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
1758
1758
|
return voutu;
|
|
1759
1759
|
}
|
|
1760
1760
|
ca_check_integer_fits(rval, CA_UINT32);
|
|
1761
|
-
|
|
1761
|
+
ca_u_uint32_t query_val_buf;
|
|
1762
1762
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
1763
|
-
|
|
1763
|
+
ca_u_uint32_t query_val = query_val_buf;
|
|
1764
1764
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
1765
1765
|
|
|
1766
1766
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -1792,7 +1792,7 @@ find_value_index_ki_native_u32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
1792
1792
|
{
|
|
1793
1793
|
result = (ca_size_t) -1;
|
|
1794
1794
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
1795
|
-
|
|
1795
|
+
ca_u_uint32_t v = *(ca_u_uint32_t *)(slab_ptr + i * slab_stride);
|
|
1796
1796
|
if ( v == query_val ) { result = i; break; }
|
|
1797
1797
|
}
|
|
1798
1798
|
}
|
|
@@ -2028,7 +2028,7 @@ find_value_index_ki_native_u32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
2028
2028
|
val_offset += out_idx[k] * val_strides[k];
|
|
2029
2029
|
}
|
|
2030
2030
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
2031
|
-
|
|
2031
|
+
ca_u_uint32_t query_val = *(ca_u_uint32_t *)(cv->ptr + val_offset);
|
|
2032
2032
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
2033
2033
|
double query_eps = 0.0; (void) query_eps;
|
|
2034
2034
|
(void) mask_in;
|
|
@@ -2042,7 +2042,7 @@ find_value_index_ki_native_u32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
2042
2042
|
{
|
|
2043
2043
|
result = (ca_size_t) -1;
|
|
2044
2044
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
2045
|
-
|
|
2045
|
+
ca_u_uint32_t v = *(ca_u_uint32_t *)(slab_ptr + i * slab_stride);
|
|
2046
2046
|
if ( v == query_val ) { result = i; break; }
|
|
2047
2047
|
}
|
|
2048
2048
|
}
|
|
@@ -2095,9 +2095,9 @@ find_value_index_ki_native_i64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
2095
2095
|
return voutu;
|
|
2096
2096
|
}
|
|
2097
2097
|
ca_check_integer_fits(rval, CA_INT64);
|
|
2098
|
-
|
|
2098
|
+
ca_u_int64_t query_val_buf;
|
|
2099
2099
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
2100
|
-
|
|
2100
|
+
ca_u_int64_t query_val = query_val_buf;
|
|
2101
2101
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
2102
2102
|
|
|
2103
2103
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -2129,7 +2129,7 @@ find_value_index_ki_native_i64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
2129
2129
|
{
|
|
2130
2130
|
result = (ca_size_t) -1;
|
|
2131
2131
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
2132
|
-
|
|
2132
|
+
ca_u_int64_t v = *(ca_u_int64_t *)(slab_ptr + i * slab_stride);
|
|
2133
2133
|
if ( v == query_val ) { result = i; break; }
|
|
2134
2134
|
}
|
|
2135
2135
|
}
|
|
@@ -2365,7 +2365,7 @@ find_value_index_ki_native_i64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
2365
2365
|
val_offset += out_idx[k] * val_strides[k];
|
|
2366
2366
|
}
|
|
2367
2367
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
2368
|
-
|
|
2368
|
+
ca_u_int64_t query_val = *(ca_u_int64_t *)(cv->ptr + val_offset);
|
|
2369
2369
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
2370
2370
|
double query_eps = 0.0; (void) query_eps;
|
|
2371
2371
|
(void) mask_in;
|
|
@@ -2379,7 +2379,7 @@ find_value_index_ki_native_i64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
2379
2379
|
{
|
|
2380
2380
|
result = (ca_size_t) -1;
|
|
2381
2381
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
2382
|
-
|
|
2382
|
+
ca_u_int64_t v = *(ca_u_int64_t *)(slab_ptr + i * slab_stride);
|
|
2383
2383
|
if ( v == query_val ) { result = i; break; }
|
|
2384
2384
|
}
|
|
2385
2385
|
}
|
|
@@ -2432,9 +2432,9 @@ find_value_index_ki_native_u64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
2432
2432
|
return voutu;
|
|
2433
2433
|
}
|
|
2434
2434
|
ca_check_integer_fits(rval, CA_UINT64);
|
|
2435
|
-
|
|
2435
|
+
ca_u_uint64_t query_val_buf;
|
|
2436
2436
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
2437
|
-
|
|
2437
|
+
ca_u_uint64_t query_val = query_val_buf;
|
|
2438
2438
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
2439
2439
|
|
|
2440
2440
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -2466,7 +2466,7 @@ find_value_index_ki_native_u64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
2466
2466
|
{
|
|
2467
2467
|
result = (ca_size_t) -1;
|
|
2468
2468
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
2469
|
-
|
|
2469
|
+
ca_u_uint64_t v = *(ca_u_uint64_t *)(slab_ptr + i * slab_stride);
|
|
2470
2470
|
if ( v == query_val ) { result = i; break; }
|
|
2471
2471
|
}
|
|
2472
2472
|
}
|
|
@@ -2702,7 +2702,7 @@ find_value_index_ki_native_u64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
2702
2702
|
val_offset += out_idx[k] * val_strides[k];
|
|
2703
2703
|
}
|
|
2704
2704
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
2705
|
-
|
|
2705
|
+
ca_u_uint64_t query_val = *(ca_u_uint64_t *)(cv->ptr + val_offset);
|
|
2706
2706
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
2707
2707
|
double query_eps = 0.0; (void) query_eps;
|
|
2708
2708
|
(void) mask_in;
|
|
@@ -2716,7 +2716,7 @@ find_value_index_ki_native_u64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
2716
2716
|
{
|
|
2717
2717
|
result = (ca_size_t) -1;
|
|
2718
2718
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
2719
|
-
|
|
2719
|
+
ca_u_uint64_t v = *(ca_u_uint64_t *)(slab_ptr + i * slab_stride);
|
|
2720
2720
|
if ( v == query_val ) { result = i; break; }
|
|
2721
2721
|
}
|
|
2722
2722
|
}
|
|
@@ -2768,9 +2768,9 @@ find_value_index_ki_native_f32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
2768
2768
|
if ( ca->ndim == 1 ) { return Qnil; }
|
|
2769
2769
|
return voutu;
|
|
2770
2770
|
}
|
|
2771
|
-
|
|
2771
|
+
ca_u_float32_t query_val_buf;
|
|
2772
2772
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
2773
|
-
|
|
2773
|
+
ca_u_float32_t query_val = query_val_buf;
|
|
2774
2774
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
2775
2775
|
|
|
2776
2776
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -2802,7 +2802,7 @@ find_value_index_ki_native_f32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
2802
2802
|
{
|
|
2803
2803
|
result = (ca_size_t) -1;
|
|
2804
2804
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
2805
|
-
|
|
2805
|
+
ca_u_float32_t v = *(ca_u_float32_t *)(slab_ptr + i * slab_stride);
|
|
2806
2806
|
if ( v == query_val ) { result = i; break; }
|
|
2807
2807
|
}
|
|
2808
2808
|
}
|
|
@@ -3038,7 +3038,7 @@ find_value_index_ki_native_f32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
3038
3038
|
val_offset += out_idx[k] * val_strides[k];
|
|
3039
3039
|
}
|
|
3040
3040
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
3041
|
-
|
|
3041
|
+
ca_u_float32_t query_val = *(ca_u_float32_t *)(cv->ptr + val_offset);
|
|
3042
3042
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
3043
3043
|
double query_eps = 0.0; (void) query_eps;
|
|
3044
3044
|
(void) mask_in;
|
|
@@ -3052,7 +3052,7 @@ find_value_index_ki_native_f32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
3052
3052
|
{
|
|
3053
3053
|
result = (ca_size_t) -1;
|
|
3054
3054
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
3055
|
-
|
|
3055
|
+
ca_u_float32_t v = *(ca_u_float32_t *)(slab_ptr + i * slab_stride);
|
|
3056
3056
|
if ( v == query_val ) { result = i; break; }
|
|
3057
3057
|
}
|
|
3058
3058
|
}
|
|
@@ -3104,9 +3104,9 @@ find_value_index_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
3104
3104
|
if ( ca->ndim == 1 ) { return Qnil; }
|
|
3105
3105
|
return voutu;
|
|
3106
3106
|
}
|
|
3107
|
-
|
|
3107
|
+
ca_u_float64_t query_val_buf;
|
|
3108
3108
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
3109
|
-
|
|
3109
|
+
ca_u_float64_t query_val = query_val_buf;
|
|
3110
3110
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
3111
3111
|
|
|
3112
3112
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -3138,7 +3138,7 @@ find_value_index_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
3138
3138
|
{
|
|
3139
3139
|
result = (ca_size_t) -1;
|
|
3140
3140
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
3141
|
-
|
|
3141
|
+
ca_u_float64_t v = *(ca_u_float64_t *)(slab_ptr + i * slab_stride);
|
|
3142
3142
|
if ( v == query_val ) { result = i; break; }
|
|
3143
3143
|
}
|
|
3144
3144
|
}
|
|
@@ -3374,7 +3374,7 @@ find_value_index_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
3374
3374
|
val_offset += out_idx[k] * val_strides[k];
|
|
3375
3375
|
}
|
|
3376
3376
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
3377
|
-
|
|
3377
|
+
ca_u_float64_t query_val = *(ca_u_float64_t *)(cv->ptr + val_offset);
|
|
3378
3378
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
3379
3379
|
double query_eps = 0.0; (void) query_eps;
|
|
3380
3380
|
(void) mask_in;
|
|
@@ -3388,7 +3388,7 @@ find_value_index_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
3388
3388
|
{
|
|
3389
3389
|
result = (ca_size_t) -1;
|
|
3390
3390
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
3391
|
-
|
|
3391
|
+
ca_u_float64_t v = *(ca_u_float64_t *)(slab_ptr + i * slab_stride);
|
|
3392
3392
|
if ( v == query_val ) { result = i; break; }
|
|
3393
3393
|
}
|
|
3394
3394
|
}
|
|
@@ -5260,9 +5260,9 @@ bsearch_ki_native_i16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
5260
5260
|
return voutu;
|
|
5261
5261
|
}
|
|
5262
5262
|
ca_check_integer_fits(rval, CA_INT16);
|
|
5263
|
-
|
|
5263
|
+
ca_u_int16_t query_val_buf;
|
|
5264
5264
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
5265
|
-
|
|
5265
|
+
ca_u_int16_t query_val = query_val_buf;
|
|
5266
5266
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
5267
5267
|
|
|
5268
5268
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -5298,7 +5298,7 @@ bsearch_ki_native_i16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
5298
5298
|
ca_size_t hi = slab_n;
|
|
5299
5299
|
while ( lo < hi ) {
|
|
5300
5300
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
5301
|
-
|
|
5301
|
+
ca_u_int16_t v = *(ca_u_int16_t *)(slab_ptr + mid * slab_stride);
|
|
5302
5302
|
if ( v < query_val ) lo = mid + 1;
|
|
5303
5303
|
else if ( v > query_val ) hi = mid;
|
|
5304
5304
|
else { result = mid; break; }
|
|
@@ -5537,7 +5537,7 @@ bsearch_ki_native_i16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
5537
5537
|
val_offset += out_idx[k] * val_strides[k];
|
|
5538
5538
|
}
|
|
5539
5539
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
5540
|
-
|
|
5540
|
+
ca_u_int16_t query_val = *(ca_u_int16_t *)(cv->ptr + val_offset);
|
|
5541
5541
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
5542
5542
|
double query_eps = 0.0; (void) query_eps;
|
|
5543
5543
|
(void) mask_in;
|
|
@@ -5555,7 +5555,7 @@ bsearch_ki_native_i16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
5555
5555
|
ca_size_t hi = slab_n;
|
|
5556
5556
|
while ( lo < hi ) {
|
|
5557
5557
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
5558
|
-
|
|
5558
|
+
ca_u_int16_t v = *(ca_u_int16_t *)(slab_ptr + mid * slab_stride);
|
|
5559
5559
|
if ( v < query_val ) lo = mid + 1;
|
|
5560
5560
|
else if ( v > query_val ) hi = mid;
|
|
5561
5561
|
else { result = mid; break; }
|
|
@@ -5611,9 +5611,9 @@ bsearch_ki_native_u16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
5611
5611
|
return voutu;
|
|
5612
5612
|
}
|
|
5613
5613
|
ca_check_integer_fits(rval, CA_UINT16);
|
|
5614
|
-
|
|
5614
|
+
ca_u_uint16_t query_val_buf;
|
|
5615
5615
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
5616
|
-
|
|
5616
|
+
ca_u_uint16_t query_val = query_val_buf;
|
|
5617
5617
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
5618
5618
|
|
|
5619
5619
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -5649,7 +5649,7 @@ bsearch_ki_native_u16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
5649
5649
|
ca_size_t hi = slab_n;
|
|
5650
5650
|
while ( lo < hi ) {
|
|
5651
5651
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
5652
|
-
|
|
5652
|
+
ca_u_uint16_t v = *(ca_u_uint16_t *)(slab_ptr + mid * slab_stride);
|
|
5653
5653
|
if ( v < query_val ) lo = mid + 1;
|
|
5654
5654
|
else if ( v > query_val ) hi = mid;
|
|
5655
5655
|
else { result = mid; break; }
|
|
@@ -5888,7 +5888,7 @@ bsearch_ki_native_u16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
5888
5888
|
val_offset += out_idx[k] * val_strides[k];
|
|
5889
5889
|
}
|
|
5890
5890
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
5891
|
-
|
|
5891
|
+
ca_u_uint16_t query_val = *(ca_u_uint16_t *)(cv->ptr + val_offset);
|
|
5892
5892
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
5893
5893
|
double query_eps = 0.0; (void) query_eps;
|
|
5894
5894
|
(void) mask_in;
|
|
@@ -5906,7 +5906,7 @@ bsearch_ki_native_u16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
5906
5906
|
ca_size_t hi = slab_n;
|
|
5907
5907
|
while ( lo < hi ) {
|
|
5908
5908
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
5909
|
-
|
|
5909
|
+
ca_u_uint16_t v = *(ca_u_uint16_t *)(slab_ptr + mid * slab_stride);
|
|
5910
5910
|
if ( v < query_val ) lo = mid + 1;
|
|
5911
5911
|
else if ( v > query_val ) hi = mid;
|
|
5912
5912
|
else { result = mid; break; }
|
|
@@ -5962,9 +5962,9 @@ bsearch_ki_native_i32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
5962
5962
|
return voutu;
|
|
5963
5963
|
}
|
|
5964
5964
|
ca_check_integer_fits(rval, CA_INT32);
|
|
5965
|
-
|
|
5965
|
+
ca_u_int32_t query_val_buf;
|
|
5966
5966
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
5967
|
-
|
|
5967
|
+
ca_u_int32_t query_val = query_val_buf;
|
|
5968
5968
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
5969
5969
|
|
|
5970
5970
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -6000,7 +6000,7 @@ bsearch_ki_native_i32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
6000
6000
|
ca_size_t hi = slab_n;
|
|
6001
6001
|
while ( lo < hi ) {
|
|
6002
6002
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
6003
|
-
|
|
6003
|
+
ca_u_int32_t v = *(ca_u_int32_t *)(slab_ptr + mid * slab_stride);
|
|
6004
6004
|
if ( v < query_val ) lo = mid + 1;
|
|
6005
6005
|
else if ( v > query_val ) hi = mid;
|
|
6006
6006
|
else { result = mid; break; }
|
|
@@ -6239,7 +6239,7 @@ bsearch_ki_native_i32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
6239
6239
|
val_offset += out_idx[k] * val_strides[k];
|
|
6240
6240
|
}
|
|
6241
6241
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
6242
|
-
|
|
6242
|
+
ca_u_int32_t query_val = *(ca_u_int32_t *)(cv->ptr + val_offset);
|
|
6243
6243
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
6244
6244
|
double query_eps = 0.0; (void) query_eps;
|
|
6245
6245
|
(void) mask_in;
|
|
@@ -6257,7 +6257,7 @@ bsearch_ki_native_i32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
6257
6257
|
ca_size_t hi = slab_n;
|
|
6258
6258
|
while ( lo < hi ) {
|
|
6259
6259
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
6260
|
-
|
|
6260
|
+
ca_u_int32_t v = *(ca_u_int32_t *)(slab_ptr + mid * slab_stride);
|
|
6261
6261
|
if ( v < query_val ) lo = mid + 1;
|
|
6262
6262
|
else if ( v > query_val ) hi = mid;
|
|
6263
6263
|
else { result = mid; break; }
|
|
@@ -6313,9 +6313,9 @@ bsearch_ki_native_u32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
6313
6313
|
return voutu;
|
|
6314
6314
|
}
|
|
6315
6315
|
ca_check_integer_fits(rval, CA_UINT32);
|
|
6316
|
-
|
|
6316
|
+
ca_u_uint32_t query_val_buf;
|
|
6317
6317
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
6318
|
-
|
|
6318
|
+
ca_u_uint32_t query_val = query_val_buf;
|
|
6319
6319
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
6320
6320
|
|
|
6321
6321
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -6351,7 +6351,7 @@ bsearch_ki_native_u32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
6351
6351
|
ca_size_t hi = slab_n;
|
|
6352
6352
|
while ( lo < hi ) {
|
|
6353
6353
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
6354
|
-
|
|
6354
|
+
ca_u_uint32_t v = *(ca_u_uint32_t *)(slab_ptr + mid * slab_stride);
|
|
6355
6355
|
if ( v < query_val ) lo = mid + 1;
|
|
6356
6356
|
else if ( v > query_val ) hi = mid;
|
|
6357
6357
|
else { result = mid; break; }
|
|
@@ -6590,7 +6590,7 @@ bsearch_ki_native_u32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
6590
6590
|
val_offset += out_idx[k] * val_strides[k];
|
|
6591
6591
|
}
|
|
6592
6592
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
6593
|
-
|
|
6593
|
+
ca_u_uint32_t query_val = *(ca_u_uint32_t *)(cv->ptr + val_offset);
|
|
6594
6594
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
6595
6595
|
double query_eps = 0.0; (void) query_eps;
|
|
6596
6596
|
(void) mask_in;
|
|
@@ -6608,7 +6608,7 @@ bsearch_ki_native_u32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
6608
6608
|
ca_size_t hi = slab_n;
|
|
6609
6609
|
while ( lo < hi ) {
|
|
6610
6610
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
6611
|
-
|
|
6611
|
+
ca_u_uint32_t v = *(ca_u_uint32_t *)(slab_ptr + mid * slab_stride);
|
|
6612
6612
|
if ( v < query_val ) lo = mid + 1;
|
|
6613
6613
|
else if ( v > query_val ) hi = mid;
|
|
6614
6614
|
else { result = mid; break; }
|
|
@@ -6664,9 +6664,9 @@ bsearch_ki_native_i64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
6664
6664
|
return voutu;
|
|
6665
6665
|
}
|
|
6666
6666
|
ca_check_integer_fits(rval, CA_INT64);
|
|
6667
|
-
|
|
6667
|
+
ca_u_int64_t query_val_buf;
|
|
6668
6668
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
6669
|
-
|
|
6669
|
+
ca_u_int64_t query_val = query_val_buf;
|
|
6670
6670
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
6671
6671
|
|
|
6672
6672
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -6702,7 +6702,7 @@ bsearch_ki_native_i64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
6702
6702
|
ca_size_t hi = slab_n;
|
|
6703
6703
|
while ( lo < hi ) {
|
|
6704
6704
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
6705
|
-
|
|
6705
|
+
ca_u_int64_t v = *(ca_u_int64_t *)(slab_ptr + mid * slab_stride);
|
|
6706
6706
|
if ( v < query_val ) lo = mid + 1;
|
|
6707
6707
|
else if ( v > query_val ) hi = mid;
|
|
6708
6708
|
else { result = mid; break; }
|
|
@@ -6941,7 +6941,7 @@ bsearch_ki_native_i64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
6941
6941
|
val_offset += out_idx[k] * val_strides[k];
|
|
6942
6942
|
}
|
|
6943
6943
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
6944
|
-
|
|
6944
|
+
ca_u_int64_t query_val = *(ca_u_int64_t *)(cv->ptr + val_offset);
|
|
6945
6945
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
6946
6946
|
double query_eps = 0.0; (void) query_eps;
|
|
6947
6947
|
(void) mask_in;
|
|
@@ -6959,7 +6959,7 @@ bsearch_ki_native_i64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
6959
6959
|
ca_size_t hi = slab_n;
|
|
6960
6960
|
while ( lo < hi ) {
|
|
6961
6961
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
6962
|
-
|
|
6962
|
+
ca_u_int64_t v = *(ca_u_int64_t *)(slab_ptr + mid * slab_stride);
|
|
6963
6963
|
if ( v < query_val ) lo = mid + 1;
|
|
6964
6964
|
else if ( v > query_val ) hi = mid;
|
|
6965
6965
|
else { result = mid; break; }
|
|
@@ -7015,9 +7015,9 @@ bsearch_ki_native_u64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
7015
7015
|
return voutu;
|
|
7016
7016
|
}
|
|
7017
7017
|
ca_check_integer_fits(rval, CA_UINT64);
|
|
7018
|
-
|
|
7018
|
+
ca_u_uint64_t query_val_buf;
|
|
7019
7019
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
7020
|
-
|
|
7020
|
+
ca_u_uint64_t query_val = query_val_buf;
|
|
7021
7021
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
7022
7022
|
|
|
7023
7023
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -7053,7 +7053,7 @@ bsearch_ki_native_u64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
7053
7053
|
ca_size_t hi = slab_n;
|
|
7054
7054
|
while ( lo < hi ) {
|
|
7055
7055
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
7056
|
-
|
|
7056
|
+
ca_u_uint64_t v = *(ca_u_uint64_t *)(slab_ptr + mid * slab_stride);
|
|
7057
7057
|
if ( v < query_val ) lo = mid + 1;
|
|
7058
7058
|
else if ( v > query_val ) hi = mid;
|
|
7059
7059
|
else { result = mid; break; }
|
|
@@ -7292,7 +7292,7 @@ bsearch_ki_native_u64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
7292
7292
|
val_offset += out_idx[k] * val_strides[k];
|
|
7293
7293
|
}
|
|
7294
7294
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
7295
|
-
|
|
7295
|
+
ca_u_uint64_t query_val = *(ca_u_uint64_t *)(cv->ptr + val_offset);
|
|
7296
7296
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
7297
7297
|
double query_eps = 0.0; (void) query_eps;
|
|
7298
7298
|
(void) mask_in;
|
|
@@ -7310,7 +7310,7 @@ bsearch_ki_native_u64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
7310
7310
|
ca_size_t hi = slab_n;
|
|
7311
7311
|
while ( lo < hi ) {
|
|
7312
7312
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
7313
|
-
|
|
7313
|
+
ca_u_uint64_t v = *(ca_u_uint64_t *)(slab_ptr + mid * slab_stride);
|
|
7314
7314
|
if ( v < query_val ) lo = mid + 1;
|
|
7315
7315
|
else if ( v > query_val ) hi = mid;
|
|
7316
7316
|
else { result = mid; break; }
|
|
@@ -7365,9 +7365,9 @@ bsearch_ki_native_f32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
7365
7365
|
if ( ca->ndim == 1 ) { return Qnil; }
|
|
7366
7366
|
return voutu;
|
|
7367
7367
|
}
|
|
7368
|
-
|
|
7368
|
+
ca_u_float32_t query_val_buf;
|
|
7369
7369
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
7370
|
-
|
|
7370
|
+
ca_u_float32_t query_val = query_val_buf;
|
|
7371
7371
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
7372
7372
|
|
|
7373
7373
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -7403,7 +7403,7 @@ bsearch_ki_native_f32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
7403
7403
|
ca_size_t hi = slab_n;
|
|
7404
7404
|
while ( lo < hi ) {
|
|
7405
7405
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
7406
|
-
|
|
7406
|
+
ca_u_float32_t v = *(ca_u_float32_t *)(slab_ptr + mid * slab_stride);
|
|
7407
7407
|
int c = CA_FLOAT_ORDER_CMP(v, query_val);
|
|
7408
7408
|
if ( c < 0 ) lo = mid + 1;
|
|
7409
7409
|
else if ( c > 0 ) hi = mid;
|
|
@@ -7643,7 +7643,7 @@ bsearch_ki_native_f32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
7643
7643
|
val_offset += out_idx[k] * val_strides[k];
|
|
7644
7644
|
}
|
|
7645
7645
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
7646
|
-
|
|
7646
|
+
ca_u_float32_t query_val = *(ca_u_float32_t *)(cv->ptr + val_offset);
|
|
7647
7647
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
7648
7648
|
double query_eps = 0.0; (void) query_eps;
|
|
7649
7649
|
(void) mask_in;
|
|
@@ -7661,7 +7661,7 @@ bsearch_ki_native_f32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
7661
7661
|
ca_size_t hi = slab_n;
|
|
7662
7662
|
while ( lo < hi ) {
|
|
7663
7663
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
7664
|
-
|
|
7664
|
+
ca_u_float32_t v = *(ca_u_float32_t *)(slab_ptr + mid * slab_stride);
|
|
7665
7665
|
int c = CA_FLOAT_ORDER_CMP(v, query_val);
|
|
7666
7666
|
if ( c < 0 ) lo = mid + 1;
|
|
7667
7667
|
else if ( c > 0 ) hi = mid;
|
|
@@ -7717,9 +7717,9 @@ bsearch_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
7717
7717
|
if ( ca->ndim == 1 ) { return Qnil; }
|
|
7718
7718
|
return voutu;
|
|
7719
7719
|
}
|
|
7720
|
-
|
|
7720
|
+
ca_u_float64_t query_val_buf;
|
|
7721
7721
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
7722
|
-
|
|
7722
|
+
ca_u_float64_t query_val = query_val_buf;
|
|
7723
7723
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
7724
7724
|
|
|
7725
7725
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -7755,7 +7755,7 @@ bsearch_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
7755
7755
|
ca_size_t hi = slab_n;
|
|
7756
7756
|
while ( lo < hi ) {
|
|
7757
7757
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
7758
|
-
|
|
7758
|
+
ca_u_float64_t v = *(ca_u_float64_t *)(slab_ptr + mid * slab_stride);
|
|
7759
7759
|
int c = CA_FLOAT_ORDER_CMP(v, query_val);
|
|
7760
7760
|
if ( c < 0 ) lo = mid + 1;
|
|
7761
7761
|
else if ( c > 0 ) hi = mid;
|
|
@@ -7995,7 +7995,7 @@ bsearch_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
7995
7995
|
val_offset += out_idx[k] * val_strides[k];
|
|
7996
7996
|
}
|
|
7997
7997
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
7998
|
-
|
|
7998
|
+
ca_u_float64_t query_val = *(ca_u_float64_t *)(cv->ptr + val_offset);
|
|
7999
7999
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
8000
8000
|
double query_eps = 0.0; (void) query_eps;
|
|
8001
8001
|
(void) mask_in;
|
|
@@ -8013,7 +8013,7 @@ bsearch_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
8013
8013
|
ca_size_t hi = slab_n;
|
|
8014
8014
|
while ( lo < hi ) {
|
|
8015
8015
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
8016
|
-
|
|
8016
|
+
ca_u_float64_t v = *(ca_u_float64_t *)(slab_ptr + mid * slab_stride);
|
|
8017
8017
|
int c = CA_FLOAT_ORDER_CMP(v, query_val);
|
|
8018
8018
|
if ( c < 0 ) lo = mid + 1;
|
|
8019
8019
|
else if ( c > 0 ) hi = mid;
|
|
@@ -9919,9 +9919,9 @@ search_ki_native_i16 (VALUE self, CArray *ca, VALUE rval, int axis, VALUE reps)
|
|
|
9919
9919
|
return voutu;
|
|
9920
9920
|
}
|
|
9921
9921
|
ca_check_integer_fits(rval, CA_INT16);
|
|
9922
|
-
|
|
9922
|
+
ca_u_int16_t query_val_buf;
|
|
9923
9923
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
9924
|
-
|
|
9924
|
+
ca_u_int16_t query_val = query_val_buf;
|
|
9925
9925
|
int eps_is_default = NIL_P(reps);
|
|
9926
9926
|
double user_eps = eps_is_default ? 0.0 : NUM2DBL(reps);
|
|
9927
9927
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
@@ -9956,7 +9956,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0)
|
|
|
9956
9956
|
(void) query_eps; /* int data_type: exact match, eps ignored */
|
|
9957
9957
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
9958
9958
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
9959
|
-
|
|
9959
|
+
ca_u_int16_t v = *(ca_u_int16_t *)(slab_ptr + i * slab_stride);
|
|
9960
9960
|
if ( v == query_val ) { result = i; break; }
|
|
9961
9961
|
}
|
|
9962
9962
|
}
|
|
@@ -10193,7 +10193,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0)
|
|
|
10193
10193
|
val_offset += out_idx[k] * val_strides[k];
|
|
10194
10194
|
}
|
|
10195
10195
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
10196
|
-
|
|
10196
|
+
ca_u_int16_t query_val = *(ca_u_int16_t *)(cv->ptr + val_offset);
|
|
10197
10197
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
10198
10198
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
10199
10199
|
|
|
@@ -10208,7 +10208,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0)
|
|
|
10208
10208
|
(void) query_eps; /* int data_type: exact match, eps ignored */
|
|
10209
10209
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
10210
10210
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
10211
|
-
|
|
10211
|
+
ca_u_int16_t v = *(ca_u_int16_t *)(slab_ptr + i * slab_stride);
|
|
10212
10212
|
if ( v == query_val ) { result = i; break; }
|
|
10213
10213
|
}
|
|
10214
10214
|
}
|
|
@@ -10261,9 +10261,9 @@ search_ki_native_u16 (VALUE self, CArray *ca, VALUE rval, int axis, VALUE reps)
|
|
|
10261
10261
|
return voutu;
|
|
10262
10262
|
}
|
|
10263
10263
|
ca_check_integer_fits(rval, CA_UINT16);
|
|
10264
|
-
|
|
10264
|
+
ca_u_uint16_t query_val_buf;
|
|
10265
10265
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
10266
|
-
|
|
10266
|
+
ca_u_uint16_t query_val = query_val_buf;
|
|
10267
10267
|
int eps_is_default = NIL_P(reps);
|
|
10268
10268
|
double user_eps = eps_is_default ? 0.0 : NUM2DBL(reps);
|
|
10269
10269
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
@@ -10298,7 +10298,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0)
|
|
|
10298
10298
|
(void) query_eps; /* int data_type: exact match, eps ignored */
|
|
10299
10299
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
10300
10300
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
10301
|
-
|
|
10301
|
+
ca_u_uint16_t v = *(ca_u_uint16_t *)(slab_ptr + i * slab_stride);
|
|
10302
10302
|
if ( v == query_val ) { result = i; break; }
|
|
10303
10303
|
}
|
|
10304
10304
|
}
|
|
@@ -10535,7 +10535,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0)
|
|
|
10535
10535
|
val_offset += out_idx[k] * val_strides[k];
|
|
10536
10536
|
}
|
|
10537
10537
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
10538
|
-
|
|
10538
|
+
ca_u_uint16_t query_val = *(ca_u_uint16_t *)(cv->ptr + val_offset);
|
|
10539
10539
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
10540
10540
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
10541
10541
|
|
|
@@ -10550,7 +10550,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0)
|
|
|
10550
10550
|
(void) query_eps; /* int data_type: exact match, eps ignored */
|
|
10551
10551
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
10552
10552
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
10553
|
-
|
|
10553
|
+
ca_u_uint16_t v = *(ca_u_uint16_t *)(slab_ptr + i * slab_stride);
|
|
10554
10554
|
if ( v == query_val ) { result = i; break; }
|
|
10555
10555
|
}
|
|
10556
10556
|
}
|
|
@@ -10603,9 +10603,9 @@ search_ki_native_i32 (VALUE self, CArray *ca, VALUE rval, int axis, VALUE reps)
|
|
|
10603
10603
|
return voutu;
|
|
10604
10604
|
}
|
|
10605
10605
|
ca_check_integer_fits(rval, CA_INT32);
|
|
10606
|
-
|
|
10606
|
+
ca_u_int32_t query_val_buf;
|
|
10607
10607
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
10608
|
-
|
|
10608
|
+
ca_u_int32_t query_val = query_val_buf;
|
|
10609
10609
|
int eps_is_default = NIL_P(reps);
|
|
10610
10610
|
double user_eps = eps_is_default ? 0.0 : NUM2DBL(reps);
|
|
10611
10611
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
@@ -10640,7 +10640,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0)
|
|
|
10640
10640
|
(void) query_eps; /* int data_type: exact match, eps ignored */
|
|
10641
10641
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
10642
10642
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
10643
|
-
|
|
10643
|
+
ca_u_int32_t v = *(ca_u_int32_t *)(slab_ptr + i * slab_stride);
|
|
10644
10644
|
if ( v == query_val ) { result = i; break; }
|
|
10645
10645
|
}
|
|
10646
10646
|
}
|
|
@@ -10877,7 +10877,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0)
|
|
|
10877
10877
|
val_offset += out_idx[k] * val_strides[k];
|
|
10878
10878
|
}
|
|
10879
10879
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
10880
|
-
|
|
10880
|
+
ca_u_int32_t query_val = *(ca_u_int32_t *)(cv->ptr + val_offset);
|
|
10881
10881
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
10882
10882
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
10883
10883
|
|
|
@@ -10892,7 +10892,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0)
|
|
|
10892
10892
|
(void) query_eps; /* int data_type: exact match, eps ignored */
|
|
10893
10893
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
10894
10894
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
10895
|
-
|
|
10895
|
+
ca_u_int32_t v = *(ca_u_int32_t *)(slab_ptr + i * slab_stride);
|
|
10896
10896
|
if ( v == query_val ) { result = i; break; }
|
|
10897
10897
|
}
|
|
10898
10898
|
}
|
|
@@ -10945,9 +10945,9 @@ search_ki_native_u32 (VALUE self, CArray *ca, VALUE rval, int axis, VALUE reps)
|
|
|
10945
10945
|
return voutu;
|
|
10946
10946
|
}
|
|
10947
10947
|
ca_check_integer_fits(rval, CA_UINT32);
|
|
10948
|
-
|
|
10948
|
+
ca_u_uint32_t query_val_buf;
|
|
10949
10949
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
10950
|
-
|
|
10950
|
+
ca_u_uint32_t query_val = query_val_buf;
|
|
10951
10951
|
int eps_is_default = NIL_P(reps);
|
|
10952
10952
|
double user_eps = eps_is_default ? 0.0 : NUM2DBL(reps);
|
|
10953
10953
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
@@ -10982,7 +10982,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0)
|
|
|
10982
10982
|
(void) query_eps; /* int data_type: exact match, eps ignored */
|
|
10983
10983
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
10984
10984
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
10985
|
-
|
|
10985
|
+
ca_u_uint32_t v = *(ca_u_uint32_t *)(slab_ptr + i * slab_stride);
|
|
10986
10986
|
if ( v == query_val ) { result = i; break; }
|
|
10987
10987
|
}
|
|
10988
10988
|
}
|
|
@@ -11219,7 +11219,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0)
|
|
|
11219
11219
|
val_offset += out_idx[k] * val_strides[k];
|
|
11220
11220
|
}
|
|
11221
11221
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
11222
|
-
|
|
11222
|
+
ca_u_uint32_t query_val = *(ca_u_uint32_t *)(cv->ptr + val_offset);
|
|
11223
11223
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
11224
11224
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
11225
11225
|
|
|
@@ -11234,7 +11234,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0)
|
|
|
11234
11234
|
(void) query_eps; /* int data_type: exact match, eps ignored */
|
|
11235
11235
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
11236
11236
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
11237
|
-
|
|
11237
|
+
ca_u_uint32_t v = *(ca_u_uint32_t *)(slab_ptr + i * slab_stride);
|
|
11238
11238
|
if ( v == query_val ) { result = i; break; }
|
|
11239
11239
|
}
|
|
11240
11240
|
}
|
|
@@ -11287,9 +11287,9 @@ search_ki_native_i64 (VALUE self, CArray *ca, VALUE rval, int axis, VALUE reps)
|
|
|
11287
11287
|
return voutu;
|
|
11288
11288
|
}
|
|
11289
11289
|
ca_check_integer_fits(rval, CA_INT64);
|
|
11290
|
-
|
|
11290
|
+
ca_u_int64_t query_val_buf;
|
|
11291
11291
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
11292
|
-
|
|
11292
|
+
ca_u_int64_t query_val = query_val_buf;
|
|
11293
11293
|
int eps_is_default = NIL_P(reps);
|
|
11294
11294
|
double user_eps = eps_is_default ? 0.0 : NUM2DBL(reps);
|
|
11295
11295
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
@@ -11324,7 +11324,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0)
|
|
|
11324
11324
|
(void) query_eps; /* int data_type: exact match, eps ignored */
|
|
11325
11325
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
11326
11326
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
11327
|
-
|
|
11327
|
+
ca_u_int64_t v = *(ca_u_int64_t *)(slab_ptr + i * slab_stride);
|
|
11328
11328
|
if ( v == query_val ) { result = i; break; }
|
|
11329
11329
|
}
|
|
11330
11330
|
}
|
|
@@ -11561,7 +11561,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0)
|
|
|
11561
11561
|
val_offset += out_idx[k] * val_strides[k];
|
|
11562
11562
|
}
|
|
11563
11563
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
11564
|
-
|
|
11564
|
+
ca_u_int64_t query_val = *(ca_u_int64_t *)(cv->ptr + val_offset);
|
|
11565
11565
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
11566
11566
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
11567
11567
|
|
|
@@ -11576,7 +11576,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0)
|
|
|
11576
11576
|
(void) query_eps; /* int data_type: exact match, eps ignored */
|
|
11577
11577
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
11578
11578
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
11579
|
-
|
|
11579
|
+
ca_u_int64_t v = *(ca_u_int64_t *)(slab_ptr + i * slab_stride);
|
|
11580
11580
|
if ( v == query_val ) { result = i; break; }
|
|
11581
11581
|
}
|
|
11582
11582
|
}
|
|
@@ -11629,9 +11629,9 @@ search_ki_native_u64 (VALUE self, CArray *ca, VALUE rval, int axis, VALUE reps)
|
|
|
11629
11629
|
return voutu;
|
|
11630
11630
|
}
|
|
11631
11631
|
ca_check_integer_fits(rval, CA_UINT64);
|
|
11632
|
-
|
|
11632
|
+
ca_u_uint64_t query_val_buf;
|
|
11633
11633
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
11634
|
-
|
|
11634
|
+
ca_u_uint64_t query_val = query_val_buf;
|
|
11635
11635
|
int eps_is_default = NIL_P(reps);
|
|
11636
11636
|
double user_eps = eps_is_default ? 0.0 : NUM2DBL(reps);
|
|
11637
11637
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
@@ -11666,7 +11666,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0)
|
|
|
11666
11666
|
(void) query_eps; /* int data_type: exact match, eps ignored */
|
|
11667
11667
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
11668
11668
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
11669
|
-
|
|
11669
|
+
ca_u_uint64_t v = *(ca_u_uint64_t *)(slab_ptr + i * slab_stride);
|
|
11670
11670
|
if ( v == query_val ) { result = i; break; }
|
|
11671
11671
|
}
|
|
11672
11672
|
}
|
|
@@ -11903,7 +11903,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0)
|
|
|
11903
11903
|
val_offset += out_idx[k] * val_strides[k];
|
|
11904
11904
|
}
|
|
11905
11905
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
11906
|
-
|
|
11906
|
+
ca_u_uint64_t query_val = *(ca_u_uint64_t *)(cv->ptr + val_offset);
|
|
11907
11907
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
11908
11908
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
11909
11909
|
|
|
@@ -11918,7 +11918,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0)
|
|
|
11918
11918
|
(void) query_eps; /* int data_type: exact match, eps ignored */
|
|
11919
11919
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
11920
11920
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
11921
|
-
|
|
11921
|
+
ca_u_uint64_t v = *(ca_u_uint64_t *)(slab_ptr + i * slab_stride);
|
|
11922
11922
|
if ( v == query_val ) { result = i; break; }
|
|
11923
11923
|
}
|
|
11924
11924
|
}
|
|
@@ -11970,9 +11970,9 @@ search_ki_native_f32 (VALUE self, CArray *ca, VALUE rval, int axis, VALUE reps)
|
|
|
11970
11970
|
if ( ca->ndim == 1 ) { return Qnil; }
|
|
11971
11971
|
return voutu;
|
|
11972
11972
|
}
|
|
11973
|
-
|
|
11973
|
+
ca_u_float32_t query_val_buf;
|
|
11974
11974
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
11975
|
-
|
|
11975
|
+
ca_u_float32_t query_val = query_val_buf;
|
|
11976
11976
|
int eps_is_default = NIL_P(reps);
|
|
11977
11977
|
double user_eps = eps_is_default ? 0.0 : NUM2DBL(reps);
|
|
11978
11978
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(FLT_EPSILON) * fabs((double)query_val) : 0.0) : user_eps;
|
|
@@ -12006,7 +12006,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(FL
|
|
|
12006
12006
|
result = (ca_size_t) -1;
|
|
12007
12007
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
12008
12008
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
12009
|
-
|
|
12009
|
+
ca_u_float32_t v = *(ca_u_float32_t *)(slab_ptr + i * slab_stride);
|
|
12010
12010
|
if ( v == query_val || fabs((double)(v - query_val)) <= query_eps ) { result = i; break; }
|
|
12011
12011
|
}
|
|
12012
12012
|
}
|
|
@@ -12243,7 +12243,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(FL
|
|
|
12243
12243
|
val_offset += out_idx[k] * val_strides[k];
|
|
12244
12244
|
}
|
|
12245
12245
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
12246
|
-
|
|
12246
|
+
ca_u_float32_t query_val = *(ca_u_float32_t *)(cv->ptr + val_offset);
|
|
12247
12247
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
12248
12248
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(FLT_EPSILON) * fabs((double)query_val) : 0.0) : user_eps;
|
|
12249
12249
|
|
|
@@ -12257,7 +12257,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(FL
|
|
|
12257
12257
|
result = (ca_size_t) -1;
|
|
12258
12258
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
12259
12259
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
12260
|
-
|
|
12260
|
+
ca_u_float32_t v = *(ca_u_float32_t *)(slab_ptr + i * slab_stride);
|
|
12261
12261
|
if ( v == query_val || fabs((double)(v - query_val)) <= query_eps ) { result = i; break; }
|
|
12262
12262
|
}
|
|
12263
12263
|
}
|
|
@@ -12309,9 +12309,9 @@ search_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axis, VALUE reps)
|
|
|
12309
12309
|
if ( ca->ndim == 1 ) { return Qnil; }
|
|
12310
12310
|
return voutu;
|
|
12311
12311
|
}
|
|
12312
|
-
|
|
12312
|
+
ca_u_float64_t query_val_buf;
|
|
12313
12313
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
12314
|
-
|
|
12314
|
+
ca_u_float64_t query_val = query_val_buf;
|
|
12315
12315
|
int eps_is_default = NIL_P(reps);
|
|
12316
12316
|
double user_eps = eps_is_default ? 0.0 : NUM2DBL(reps);
|
|
12317
12317
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(DBL_EPSILON) * fabs((double)query_val) : 0.0) : user_eps;
|
|
@@ -12345,7 +12345,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(DB
|
|
|
12345
12345
|
result = (ca_size_t) -1;
|
|
12346
12346
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
12347
12347
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
12348
|
-
|
|
12348
|
+
ca_u_float64_t v = *(ca_u_float64_t *)(slab_ptr + i * slab_stride);
|
|
12349
12349
|
if ( v == query_val || fabs((double)(v - query_val)) <= query_eps ) { result = i; break; }
|
|
12350
12350
|
}
|
|
12351
12351
|
}
|
|
@@ -12582,7 +12582,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(DB
|
|
|
12582
12582
|
val_offset += out_idx[k] * val_strides[k];
|
|
12583
12583
|
}
|
|
12584
12584
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
12585
|
-
|
|
12585
|
+
ca_u_float64_t query_val = *(ca_u_float64_t *)(cv->ptr + val_offset);
|
|
12586
12586
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
12587
12587
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(DBL_EPSILON) * fabs((double)query_val) : 0.0) : user_eps;
|
|
12588
12588
|
|
|
@@ -12596,7 +12596,7 @@ double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(DB
|
|
|
12596
12596
|
result = (ca_size_t) -1;
|
|
12597
12597
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
12598
12598
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
12599
|
-
|
|
12599
|
+
ca_u_float64_t v = *(ca_u_float64_t *)(slab_ptr + i * slab_stride);
|
|
12600
12600
|
if ( v == query_val || fabs((double)(v - query_val)) <= query_eps ) { result = i; break; }
|
|
12601
12601
|
}
|
|
12602
12602
|
}
|
|
@@ -14485,9 +14485,9 @@ search_nearest_ki_native_i16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
14485
14485
|
return voutu;
|
|
14486
14486
|
}
|
|
14487
14487
|
ca_check_integer_fits(rval, CA_INT16);
|
|
14488
|
-
|
|
14488
|
+
ca_u_int16_t query_val_buf;
|
|
14489
14489
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
14490
|
-
|
|
14490
|
+
ca_u_int16_t query_val = query_val_buf;
|
|
14491
14491
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
14492
14492
|
|
|
14493
14493
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -14522,7 +14522,7 @@ search_nearest_ki_native_i16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
14522
14522
|
uint64_t best_dist = 0;
|
|
14523
14523
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
14524
14524
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
14525
|
-
|
|
14525
|
+
ca_u_int16_t v = *(ca_u_int16_t *)(slab_ptr + i * slab_stride);
|
|
14526
14526
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
14527
14527
|
: (uint64_t) query_val - (uint64_t) v;
|
|
14528
14528
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -14761,7 +14761,7 @@ search_nearest_ki_native_i16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
14761
14761
|
val_offset += out_idx[k] * val_strides[k];
|
|
14762
14762
|
}
|
|
14763
14763
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
14764
|
-
|
|
14764
|
+
ca_u_int16_t query_val = *(ca_u_int16_t *)(cv->ptr + val_offset);
|
|
14765
14765
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
14766
14766
|
double query_eps = 0.0; (void) query_eps;
|
|
14767
14767
|
|
|
@@ -14778,7 +14778,7 @@ search_nearest_ki_native_i16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
14778
14778
|
uint64_t best_dist = 0;
|
|
14779
14779
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
14780
14780
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
14781
|
-
|
|
14781
|
+
ca_u_int16_t v = *(ca_u_int16_t *)(slab_ptr + i * slab_stride);
|
|
14782
14782
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
14783
14783
|
: (uint64_t) query_val - (uint64_t) v;
|
|
14784
14784
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -14834,9 +14834,9 @@ search_nearest_ki_native_u16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
14834
14834
|
return voutu;
|
|
14835
14835
|
}
|
|
14836
14836
|
ca_check_integer_fits(rval, CA_UINT16);
|
|
14837
|
-
|
|
14837
|
+
ca_u_uint16_t query_val_buf;
|
|
14838
14838
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
14839
|
-
|
|
14839
|
+
ca_u_uint16_t query_val = query_val_buf;
|
|
14840
14840
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
14841
14841
|
|
|
14842
14842
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -14871,7 +14871,7 @@ search_nearest_ki_native_u16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
14871
14871
|
uint64_t best_dist = 0;
|
|
14872
14872
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
14873
14873
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
14874
|
-
|
|
14874
|
+
ca_u_uint16_t v = *(ca_u_uint16_t *)(slab_ptr + i * slab_stride);
|
|
14875
14875
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
14876
14876
|
: (uint64_t) query_val - (uint64_t) v;
|
|
14877
14877
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -15110,7 +15110,7 @@ search_nearest_ki_native_u16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
15110
15110
|
val_offset += out_idx[k] * val_strides[k];
|
|
15111
15111
|
}
|
|
15112
15112
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
15113
|
-
|
|
15113
|
+
ca_u_uint16_t query_val = *(ca_u_uint16_t *)(cv->ptr + val_offset);
|
|
15114
15114
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
15115
15115
|
double query_eps = 0.0; (void) query_eps;
|
|
15116
15116
|
|
|
@@ -15127,7 +15127,7 @@ search_nearest_ki_native_u16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
15127
15127
|
uint64_t best_dist = 0;
|
|
15128
15128
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
15129
15129
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
15130
|
-
|
|
15130
|
+
ca_u_uint16_t v = *(ca_u_uint16_t *)(slab_ptr + i * slab_stride);
|
|
15131
15131
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
15132
15132
|
: (uint64_t) query_val - (uint64_t) v;
|
|
15133
15133
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -15183,9 +15183,9 @@ search_nearest_ki_native_i32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
15183
15183
|
return voutu;
|
|
15184
15184
|
}
|
|
15185
15185
|
ca_check_integer_fits(rval, CA_INT32);
|
|
15186
|
-
|
|
15186
|
+
ca_u_int32_t query_val_buf;
|
|
15187
15187
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
15188
|
-
|
|
15188
|
+
ca_u_int32_t query_val = query_val_buf;
|
|
15189
15189
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
15190
15190
|
|
|
15191
15191
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -15220,7 +15220,7 @@ search_nearest_ki_native_i32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
15220
15220
|
uint64_t best_dist = 0;
|
|
15221
15221
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
15222
15222
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
15223
|
-
|
|
15223
|
+
ca_u_int32_t v = *(ca_u_int32_t *)(slab_ptr + i * slab_stride);
|
|
15224
15224
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
15225
15225
|
: (uint64_t) query_val - (uint64_t) v;
|
|
15226
15226
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -15459,7 +15459,7 @@ search_nearest_ki_native_i32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
15459
15459
|
val_offset += out_idx[k] * val_strides[k];
|
|
15460
15460
|
}
|
|
15461
15461
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
15462
|
-
|
|
15462
|
+
ca_u_int32_t query_val = *(ca_u_int32_t *)(cv->ptr + val_offset);
|
|
15463
15463
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
15464
15464
|
double query_eps = 0.0; (void) query_eps;
|
|
15465
15465
|
|
|
@@ -15476,7 +15476,7 @@ search_nearest_ki_native_i32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
15476
15476
|
uint64_t best_dist = 0;
|
|
15477
15477
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
15478
15478
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
15479
|
-
|
|
15479
|
+
ca_u_int32_t v = *(ca_u_int32_t *)(slab_ptr + i * slab_stride);
|
|
15480
15480
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
15481
15481
|
: (uint64_t) query_val - (uint64_t) v;
|
|
15482
15482
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -15532,9 +15532,9 @@ search_nearest_ki_native_u32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
15532
15532
|
return voutu;
|
|
15533
15533
|
}
|
|
15534
15534
|
ca_check_integer_fits(rval, CA_UINT32);
|
|
15535
|
-
|
|
15535
|
+
ca_u_uint32_t query_val_buf;
|
|
15536
15536
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
15537
|
-
|
|
15537
|
+
ca_u_uint32_t query_val = query_val_buf;
|
|
15538
15538
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
15539
15539
|
|
|
15540
15540
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -15569,7 +15569,7 @@ search_nearest_ki_native_u32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
15569
15569
|
uint64_t best_dist = 0;
|
|
15570
15570
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
15571
15571
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
15572
|
-
|
|
15572
|
+
ca_u_uint32_t v = *(ca_u_uint32_t *)(slab_ptr + i * slab_stride);
|
|
15573
15573
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
15574
15574
|
: (uint64_t) query_val - (uint64_t) v;
|
|
15575
15575
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -15808,7 +15808,7 @@ search_nearest_ki_native_u32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
15808
15808
|
val_offset += out_idx[k] * val_strides[k];
|
|
15809
15809
|
}
|
|
15810
15810
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
15811
|
-
|
|
15811
|
+
ca_u_uint32_t query_val = *(ca_u_uint32_t *)(cv->ptr + val_offset);
|
|
15812
15812
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
15813
15813
|
double query_eps = 0.0; (void) query_eps;
|
|
15814
15814
|
|
|
@@ -15825,7 +15825,7 @@ search_nearest_ki_native_u32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
15825
15825
|
uint64_t best_dist = 0;
|
|
15826
15826
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
15827
15827
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
15828
|
-
|
|
15828
|
+
ca_u_uint32_t v = *(ca_u_uint32_t *)(slab_ptr + i * slab_stride);
|
|
15829
15829
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
15830
15830
|
: (uint64_t) query_val - (uint64_t) v;
|
|
15831
15831
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -15881,9 +15881,9 @@ search_nearest_ki_native_i64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
15881
15881
|
return voutu;
|
|
15882
15882
|
}
|
|
15883
15883
|
ca_check_integer_fits(rval, CA_INT64);
|
|
15884
|
-
|
|
15884
|
+
ca_u_int64_t query_val_buf;
|
|
15885
15885
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
15886
|
-
|
|
15886
|
+
ca_u_int64_t query_val = query_val_buf;
|
|
15887
15887
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
15888
15888
|
|
|
15889
15889
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -15918,7 +15918,7 @@ search_nearest_ki_native_i64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
15918
15918
|
uint64_t best_dist = 0;
|
|
15919
15919
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
15920
15920
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
15921
|
-
|
|
15921
|
+
ca_u_int64_t v = *(ca_u_int64_t *)(slab_ptr + i * slab_stride);
|
|
15922
15922
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
15923
15923
|
: (uint64_t) query_val - (uint64_t) v;
|
|
15924
15924
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -16157,7 +16157,7 @@ search_nearest_ki_native_i64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
16157
16157
|
val_offset += out_idx[k] * val_strides[k];
|
|
16158
16158
|
}
|
|
16159
16159
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
16160
|
-
|
|
16160
|
+
ca_u_int64_t query_val = *(ca_u_int64_t *)(cv->ptr + val_offset);
|
|
16161
16161
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
16162
16162
|
double query_eps = 0.0; (void) query_eps;
|
|
16163
16163
|
|
|
@@ -16174,7 +16174,7 @@ search_nearest_ki_native_i64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
16174
16174
|
uint64_t best_dist = 0;
|
|
16175
16175
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
16176
16176
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
16177
|
-
|
|
16177
|
+
ca_u_int64_t v = *(ca_u_int64_t *)(slab_ptr + i * slab_stride);
|
|
16178
16178
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
16179
16179
|
: (uint64_t) query_val - (uint64_t) v;
|
|
16180
16180
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -16230,9 +16230,9 @@ search_nearest_ki_native_u64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
16230
16230
|
return voutu;
|
|
16231
16231
|
}
|
|
16232
16232
|
ca_check_integer_fits(rval, CA_UINT64);
|
|
16233
|
-
|
|
16233
|
+
ca_u_uint64_t query_val_buf;
|
|
16234
16234
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
16235
|
-
|
|
16235
|
+
ca_u_uint64_t query_val = query_val_buf;
|
|
16236
16236
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
16237
16237
|
|
|
16238
16238
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -16267,7 +16267,7 @@ search_nearest_ki_native_u64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
16267
16267
|
uint64_t best_dist = 0;
|
|
16268
16268
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
16269
16269
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
16270
|
-
|
|
16270
|
+
ca_u_uint64_t v = *(ca_u_uint64_t *)(slab_ptr + i * slab_stride);
|
|
16271
16271
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
16272
16272
|
: (uint64_t) query_val - (uint64_t) v;
|
|
16273
16273
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -16506,7 +16506,7 @@ search_nearest_ki_native_u64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
16506
16506
|
val_offset += out_idx[k] * val_strides[k];
|
|
16507
16507
|
}
|
|
16508
16508
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
16509
|
-
|
|
16509
|
+
ca_u_uint64_t query_val = *(ca_u_uint64_t *)(cv->ptr + val_offset);
|
|
16510
16510
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
16511
16511
|
double query_eps = 0.0; (void) query_eps;
|
|
16512
16512
|
|
|
@@ -16523,7 +16523,7 @@ search_nearest_ki_native_u64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
16523
16523
|
uint64_t best_dist = 0;
|
|
16524
16524
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
16525
16525
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
16526
|
-
|
|
16526
|
+
ca_u_uint64_t v = *(ca_u_uint64_t *)(slab_ptr + i * slab_stride);
|
|
16527
16527
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
16528
16528
|
: (uint64_t) query_val - (uint64_t) v;
|
|
16529
16529
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -16578,9 +16578,9 @@ search_nearest_ki_native_f32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
16578
16578
|
if ( ca->ndim == 1 ) { return Qnil; }
|
|
16579
16579
|
return voutu;
|
|
16580
16580
|
}
|
|
16581
|
-
|
|
16581
|
+
ca_u_float32_t query_val_buf;
|
|
16582
16582
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
16583
|
-
|
|
16583
|
+
ca_u_float32_t query_val = query_val_buf;
|
|
16584
16584
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
16585
16585
|
|
|
16586
16586
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -16613,7 +16613,7 @@ search_nearest_ki_native_f32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
16613
16613
|
double best_dist = INFINITY;
|
|
16614
16614
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
16615
16615
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
16616
|
-
|
|
16616
|
+
ca_u_float32_t v = *(ca_u_float32_t *)(slab_ptr + i * slab_stride);
|
|
16617
16617
|
/* An equal value is at distance 0 even when both are infinite
|
|
16618
16618
|
(Inf - Inf is NaN); a NaN distance never wins. */
|
|
16619
16619
|
double dist = ( v == query_val ) ? 0.0 : fabs((double)v - (double)query_val);
|
|
@@ -16854,7 +16854,7 @@ search_nearest_ki_native_f32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
16854
16854
|
val_offset += out_idx[k] * val_strides[k];
|
|
16855
16855
|
}
|
|
16856
16856
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
16857
|
-
|
|
16857
|
+
ca_u_float32_t query_val = *(ca_u_float32_t *)(cv->ptr + val_offset);
|
|
16858
16858
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
16859
16859
|
double query_eps = 0.0; (void) query_eps;
|
|
16860
16860
|
|
|
@@ -16869,7 +16869,7 @@ search_nearest_ki_native_f32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
16869
16869
|
double best_dist = INFINITY;
|
|
16870
16870
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
16871
16871
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
16872
|
-
|
|
16872
|
+
ca_u_float32_t v = *(ca_u_float32_t *)(slab_ptr + i * slab_stride);
|
|
16873
16873
|
/* An equal value is at distance 0 even when both are infinite
|
|
16874
16874
|
(Inf - Inf is NaN); a NaN distance never wins. */
|
|
16875
16875
|
double dist = ( v == query_val ) ? 0.0 : fabs((double)v - (double)query_val);
|
|
@@ -16926,9 +16926,9 @@ search_nearest_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
16926
16926
|
if ( ca->ndim == 1 ) { return Qnil; }
|
|
16927
16927
|
return voutu;
|
|
16928
16928
|
}
|
|
16929
|
-
|
|
16929
|
+
ca_u_float64_t query_val_buf;
|
|
16930
16930
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
16931
|
-
|
|
16931
|
+
ca_u_float64_t query_val = query_val_buf;
|
|
16932
16932
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
16933
16933
|
|
|
16934
16934
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -16961,7 +16961,7 @@ search_nearest_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
16961
16961
|
double best_dist = INFINITY;
|
|
16962
16962
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
16963
16963
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
16964
|
-
|
|
16964
|
+
ca_u_float64_t v = *(ca_u_float64_t *)(slab_ptr + i * slab_stride);
|
|
16965
16965
|
/* An equal value is at distance 0 even when both are infinite
|
|
16966
16966
|
(Inf - Inf is NaN); a NaN distance never wins. */
|
|
16967
16967
|
double dist = ( v == query_val ) ? 0.0 : fabs((double)v - (double)query_val);
|
|
@@ -17202,7 +17202,7 @@ search_nearest_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
17202
17202
|
val_offset += out_idx[k] * val_strides[k];
|
|
17203
17203
|
}
|
|
17204
17204
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
17205
|
-
|
|
17205
|
+
ca_u_float64_t query_val = *(ca_u_float64_t *)(cv->ptr + val_offset);
|
|
17206
17206
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
17207
17207
|
double query_eps = 0.0; (void) query_eps;
|
|
17208
17208
|
|
|
@@ -17217,7 +17217,7 @@ search_nearest_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
17217
17217
|
double best_dist = INFINITY;
|
|
17218
17218
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
17219
17219
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
17220
|
-
|
|
17220
|
+
ca_u_float64_t v = *(ca_u_float64_t *)(slab_ptr + i * slab_stride);
|
|
17221
17221
|
/* An equal value is at distance 0 even when both are infinite
|
|
17222
17222
|
(Inf - Inf is NaN); a NaN distance never wins. */
|
|
17223
17223
|
double dist = ( v == query_val ) ? 0.0 : fabs((double)v - (double)query_val);
|
|
@@ -18864,9 +18864,9 @@ bsearch_addr_ki_native_i16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
18864
18864
|
return voutu;
|
|
18865
18865
|
}
|
|
18866
18866
|
ca_check_integer_fits(rval, CA_INT16);
|
|
18867
|
-
|
|
18867
|
+
ca_u_int16_t query_val_buf;
|
|
18868
18868
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
18869
|
-
|
|
18869
|
+
ca_u_int16_t query_val = query_val_buf;
|
|
18870
18870
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
18871
18871
|
|
|
18872
18872
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -18917,7 +18917,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
18917
18917
|
ca_size_t hi = slab_n;
|
|
18918
18918
|
while ( lo < hi ) {
|
|
18919
18919
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
18920
|
-
|
|
18920
|
+
ca_u_int16_t v = *(ca_u_int16_t *)(slab_ptr + mid * slab_stride);
|
|
18921
18921
|
if ( v < query_val ) lo = mid + 1;
|
|
18922
18922
|
else if ( v > query_val ) hi = mid;
|
|
18923
18923
|
else { result = mid; break; }
|
|
@@ -19163,7 +19163,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
19163
19163
|
val_offset += out_idx[k] * val_strides[k];
|
|
19164
19164
|
}
|
|
19165
19165
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
19166
|
-
|
|
19166
|
+
ca_u_int16_t query_val = *(ca_u_int16_t *)(cv->ptr + val_offset);
|
|
19167
19167
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
19168
19168
|
double query_eps = 0.0; (void) query_eps;
|
|
19169
19169
|
(void) mask_in;
|
|
@@ -19181,7 +19181,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
19181
19181
|
ca_size_t hi = slab_n;
|
|
19182
19182
|
while ( lo < hi ) {
|
|
19183
19183
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
19184
|
-
|
|
19184
|
+
ca_u_int16_t v = *(ca_u_int16_t *)(slab_ptr + mid * slab_stride);
|
|
19185
19185
|
if ( v < query_val ) lo = mid + 1;
|
|
19186
19186
|
else if ( v > query_val ) hi = mid;
|
|
19187
19187
|
else { result = mid; break; }
|
|
@@ -19237,9 +19237,9 @@ bsearch_addr_ki_native_u16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
19237
19237
|
return voutu;
|
|
19238
19238
|
}
|
|
19239
19239
|
ca_check_integer_fits(rval, CA_UINT16);
|
|
19240
|
-
|
|
19240
|
+
ca_u_uint16_t query_val_buf;
|
|
19241
19241
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
19242
|
-
|
|
19242
|
+
ca_u_uint16_t query_val = query_val_buf;
|
|
19243
19243
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
19244
19244
|
|
|
19245
19245
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -19290,7 +19290,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
19290
19290
|
ca_size_t hi = slab_n;
|
|
19291
19291
|
while ( lo < hi ) {
|
|
19292
19292
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
19293
|
-
|
|
19293
|
+
ca_u_uint16_t v = *(ca_u_uint16_t *)(slab_ptr + mid * slab_stride);
|
|
19294
19294
|
if ( v < query_val ) lo = mid + 1;
|
|
19295
19295
|
else if ( v > query_val ) hi = mid;
|
|
19296
19296
|
else { result = mid; break; }
|
|
@@ -19536,7 +19536,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
19536
19536
|
val_offset += out_idx[k] * val_strides[k];
|
|
19537
19537
|
}
|
|
19538
19538
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
19539
|
-
|
|
19539
|
+
ca_u_uint16_t query_val = *(ca_u_uint16_t *)(cv->ptr + val_offset);
|
|
19540
19540
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
19541
19541
|
double query_eps = 0.0; (void) query_eps;
|
|
19542
19542
|
(void) mask_in;
|
|
@@ -19554,7 +19554,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
19554
19554
|
ca_size_t hi = slab_n;
|
|
19555
19555
|
while ( lo < hi ) {
|
|
19556
19556
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
19557
|
-
|
|
19557
|
+
ca_u_uint16_t v = *(ca_u_uint16_t *)(slab_ptr + mid * slab_stride);
|
|
19558
19558
|
if ( v < query_val ) lo = mid + 1;
|
|
19559
19559
|
else if ( v > query_val ) hi = mid;
|
|
19560
19560
|
else { result = mid; break; }
|
|
@@ -19610,9 +19610,9 @@ bsearch_addr_ki_native_i32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
19610
19610
|
return voutu;
|
|
19611
19611
|
}
|
|
19612
19612
|
ca_check_integer_fits(rval, CA_INT32);
|
|
19613
|
-
|
|
19613
|
+
ca_u_int32_t query_val_buf;
|
|
19614
19614
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
19615
|
-
|
|
19615
|
+
ca_u_int32_t query_val = query_val_buf;
|
|
19616
19616
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
19617
19617
|
|
|
19618
19618
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -19663,7 +19663,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
19663
19663
|
ca_size_t hi = slab_n;
|
|
19664
19664
|
while ( lo < hi ) {
|
|
19665
19665
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
19666
|
-
|
|
19666
|
+
ca_u_int32_t v = *(ca_u_int32_t *)(slab_ptr + mid * slab_stride);
|
|
19667
19667
|
if ( v < query_val ) lo = mid + 1;
|
|
19668
19668
|
else if ( v > query_val ) hi = mid;
|
|
19669
19669
|
else { result = mid; break; }
|
|
@@ -19909,7 +19909,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
19909
19909
|
val_offset += out_idx[k] * val_strides[k];
|
|
19910
19910
|
}
|
|
19911
19911
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
19912
|
-
|
|
19912
|
+
ca_u_int32_t query_val = *(ca_u_int32_t *)(cv->ptr + val_offset);
|
|
19913
19913
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
19914
19914
|
double query_eps = 0.0; (void) query_eps;
|
|
19915
19915
|
(void) mask_in;
|
|
@@ -19927,7 +19927,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
19927
19927
|
ca_size_t hi = slab_n;
|
|
19928
19928
|
while ( lo < hi ) {
|
|
19929
19929
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
19930
|
-
|
|
19930
|
+
ca_u_int32_t v = *(ca_u_int32_t *)(slab_ptr + mid * slab_stride);
|
|
19931
19931
|
if ( v < query_val ) lo = mid + 1;
|
|
19932
19932
|
else if ( v > query_val ) hi = mid;
|
|
19933
19933
|
else { result = mid; break; }
|
|
@@ -19983,9 +19983,9 @@ bsearch_addr_ki_native_u32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
19983
19983
|
return voutu;
|
|
19984
19984
|
}
|
|
19985
19985
|
ca_check_integer_fits(rval, CA_UINT32);
|
|
19986
|
-
|
|
19986
|
+
ca_u_uint32_t query_val_buf;
|
|
19987
19987
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
19988
|
-
|
|
19988
|
+
ca_u_uint32_t query_val = query_val_buf;
|
|
19989
19989
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
19990
19990
|
|
|
19991
19991
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -20036,7 +20036,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
20036
20036
|
ca_size_t hi = slab_n;
|
|
20037
20037
|
while ( lo < hi ) {
|
|
20038
20038
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
20039
|
-
|
|
20039
|
+
ca_u_uint32_t v = *(ca_u_uint32_t *)(slab_ptr + mid * slab_stride);
|
|
20040
20040
|
if ( v < query_val ) lo = mid + 1;
|
|
20041
20041
|
else if ( v > query_val ) hi = mid;
|
|
20042
20042
|
else { result = mid; break; }
|
|
@@ -20282,7 +20282,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
20282
20282
|
val_offset += out_idx[k] * val_strides[k];
|
|
20283
20283
|
}
|
|
20284
20284
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
20285
|
-
|
|
20285
|
+
ca_u_uint32_t query_val = *(ca_u_uint32_t *)(cv->ptr + val_offset);
|
|
20286
20286
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
20287
20287
|
double query_eps = 0.0; (void) query_eps;
|
|
20288
20288
|
(void) mask_in;
|
|
@@ -20300,7 +20300,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
20300
20300
|
ca_size_t hi = slab_n;
|
|
20301
20301
|
while ( lo < hi ) {
|
|
20302
20302
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
20303
|
-
|
|
20303
|
+
ca_u_uint32_t v = *(ca_u_uint32_t *)(slab_ptr + mid * slab_stride);
|
|
20304
20304
|
if ( v < query_val ) lo = mid + 1;
|
|
20305
20305
|
else if ( v > query_val ) hi = mid;
|
|
20306
20306
|
else { result = mid; break; }
|
|
@@ -20356,9 +20356,9 @@ bsearch_addr_ki_native_i64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
20356
20356
|
return voutu;
|
|
20357
20357
|
}
|
|
20358
20358
|
ca_check_integer_fits(rval, CA_INT64);
|
|
20359
|
-
|
|
20359
|
+
ca_u_int64_t query_val_buf;
|
|
20360
20360
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
20361
|
-
|
|
20361
|
+
ca_u_int64_t query_val = query_val_buf;
|
|
20362
20362
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
20363
20363
|
|
|
20364
20364
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -20409,7 +20409,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
20409
20409
|
ca_size_t hi = slab_n;
|
|
20410
20410
|
while ( lo < hi ) {
|
|
20411
20411
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
20412
|
-
|
|
20412
|
+
ca_u_int64_t v = *(ca_u_int64_t *)(slab_ptr + mid * slab_stride);
|
|
20413
20413
|
if ( v < query_val ) lo = mid + 1;
|
|
20414
20414
|
else if ( v > query_val ) hi = mid;
|
|
20415
20415
|
else { result = mid; break; }
|
|
@@ -20655,7 +20655,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
20655
20655
|
val_offset += out_idx[k] * val_strides[k];
|
|
20656
20656
|
}
|
|
20657
20657
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
20658
|
-
|
|
20658
|
+
ca_u_int64_t query_val = *(ca_u_int64_t *)(cv->ptr + val_offset);
|
|
20659
20659
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
20660
20660
|
double query_eps = 0.0; (void) query_eps;
|
|
20661
20661
|
(void) mask_in;
|
|
@@ -20673,7 +20673,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
20673
20673
|
ca_size_t hi = slab_n;
|
|
20674
20674
|
while ( lo < hi ) {
|
|
20675
20675
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
20676
|
-
|
|
20676
|
+
ca_u_int64_t v = *(ca_u_int64_t *)(slab_ptr + mid * slab_stride);
|
|
20677
20677
|
if ( v < query_val ) lo = mid + 1;
|
|
20678
20678
|
else if ( v > query_val ) hi = mid;
|
|
20679
20679
|
else { result = mid; break; }
|
|
@@ -20729,9 +20729,9 @@ bsearch_addr_ki_native_u64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
20729
20729
|
return voutu;
|
|
20730
20730
|
}
|
|
20731
20731
|
ca_check_integer_fits(rval, CA_UINT64);
|
|
20732
|
-
|
|
20732
|
+
ca_u_uint64_t query_val_buf;
|
|
20733
20733
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
20734
|
-
|
|
20734
|
+
ca_u_uint64_t query_val = query_val_buf;
|
|
20735
20735
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
20736
20736
|
|
|
20737
20737
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -20782,7 +20782,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
20782
20782
|
ca_size_t hi = slab_n;
|
|
20783
20783
|
while ( lo < hi ) {
|
|
20784
20784
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
20785
|
-
|
|
20785
|
+
ca_u_uint64_t v = *(ca_u_uint64_t *)(slab_ptr + mid * slab_stride);
|
|
20786
20786
|
if ( v < query_val ) lo = mid + 1;
|
|
20787
20787
|
else if ( v > query_val ) hi = mid;
|
|
20788
20788
|
else { result = mid; break; }
|
|
@@ -21028,7 +21028,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
21028
21028
|
val_offset += out_idx[k] * val_strides[k];
|
|
21029
21029
|
}
|
|
21030
21030
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
21031
|
-
|
|
21031
|
+
ca_u_uint64_t query_val = *(ca_u_uint64_t *)(cv->ptr + val_offset);
|
|
21032
21032
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
21033
21033
|
double query_eps = 0.0; (void) query_eps;
|
|
21034
21034
|
(void) mask_in;
|
|
@@ -21046,7 +21046,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
21046
21046
|
ca_size_t hi = slab_n;
|
|
21047
21047
|
while ( lo < hi ) {
|
|
21048
21048
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
21049
|
-
|
|
21049
|
+
ca_u_uint64_t v = *(ca_u_uint64_t *)(slab_ptr + mid * slab_stride);
|
|
21050
21050
|
if ( v < query_val ) lo = mid + 1;
|
|
21051
21051
|
else if ( v > query_val ) hi = mid;
|
|
21052
21052
|
else { result = mid; break; }
|
|
@@ -21101,9 +21101,9 @@ bsearch_addr_ki_native_f32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
21101
21101
|
if ( ca->ndim == 1 ) { return Qnil; }
|
|
21102
21102
|
return voutu;
|
|
21103
21103
|
}
|
|
21104
|
-
|
|
21104
|
+
ca_u_float32_t query_val_buf;
|
|
21105
21105
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
21106
|
-
|
|
21106
|
+
ca_u_float32_t query_val = query_val_buf;
|
|
21107
21107
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
21108
21108
|
|
|
21109
21109
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -21154,7 +21154,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
21154
21154
|
ca_size_t hi = slab_n;
|
|
21155
21155
|
while ( lo < hi ) {
|
|
21156
21156
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
21157
|
-
|
|
21157
|
+
ca_u_float32_t v = *(ca_u_float32_t *)(slab_ptr + mid * slab_stride);
|
|
21158
21158
|
int c = CA_FLOAT_ORDER_CMP(v, query_val);
|
|
21159
21159
|
if ( c < 0 ) lo = mid + 1;
|
|
21160
21160
|
else if ( c > 0 ) hi = mid;
|
|
@@ -21401,7 +21401,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
21401
21401
|
val_offset += out_idx[k] * val_strides[k];
|
|
21402
21402
|
}
|
|
21403
21403
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
21404
|
-
|
|
21404
|
+
ca_u_float32_t query_val = *(ca_u_float32_t *)(cv->ptr + val_offset);
|
|
21405
21405
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
21406
21406
|
double query_eps = 0.0; (void) query_eps;
|
|
21407
21407
|
(void) mask_in;
|
|
@@ -21419,7 +21419,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
21419
21419
|
ca_size_t hi = slab_n;
|
|
21420
21420
|
while ( lo < hi ) {
|
|
21421
21421
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
21422
|
-
|
|
21422
|
+
ca_u_float32_t v = *(ca_u_float32_t *)(slab_ptr + mid * slab_stride);
|
|
21423
21423
|
int c = CA_FLOAT_ORDER_CMP(v, query_val);
|
|
21424
21424
|
if ( c < 0 ) lo = mid + 1;
|
|
21425
21425
|
else if ( c > 0 ) hi = mid;
|
|
@@ -21475,9 +21475,9 @@ bsearch_addr_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
21475
21475
|
if ( ca->ndim == 1 ) { return Qnil; }
|
|
21476
21476
|
return voutu;
|
|
21477
21477
|
}
|
|
21478
|
-
|
|
21478
|
+
ca_u_float64_t query_val_buf;
|
|
21479
21479
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
21480
|
-
|
|
21480
|
+
ca_u_float64_t query_val = query_val_buf;
|
|
21481
21481
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
21482
21482
|
|
|
21483
21483
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -21528,7 +21528,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
21528
21528
|
ca_size_t hi = slab_n;
|
|
21529
21529
|
while ( lo < hi ) {
|
|
21530
21530
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
21531
|
-
|
|
21531
|
+
ca_u_float64_t v = *(ca_u_float64_t *)(slab_ptr + mid * slab_stride);
|
|
21532
21532
|
int c = CA_FLOAT_ORDER_CMP(v, query_val);
|
|
21533
21533
|
if ( c < 0 ) lo = mid + 1;
|
|
21534
21534
|
else if ( c > 0 ) hi = mid;
|
|
@@ -21775,7 +21775,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
21775
21775
|
val_offset += out_idx[k] * val_strides[k];
|
|
21776
21776
|
}
|
|
21777
21777
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
21778
|
-
|
|
21778
|
+
ca_u_float64_t query_val = *(ca_u_float64_t *)(cv->ptr + val_offset);
|
|
21779
21779
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
21780
21780
|
double query_eps = 0.0; (void) query_eps;
|
|
21781
21781
|
(void) mask_in;
|
|
@@ -21793,7 +21793,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
21793
21793
|
ca_size_t hi = slab_n;
|
|
21794
21794
|
while ( lo < hi ) {
|
|
21795
21795
|
ca_size_t mid = lo + (hi - lo) / 2;
|
|
21796
|
-
|
|
21796
|
+
ca_u_float64_t v = *(ca_u_float64_t *)(slab_ptr + mid * slab_stride);
|
|
21797
21797
|
int c = CA_FLOAT_ORDER_CMP(v, query_val);
|
|
21798
21798
|
if ( c < 0 ) lo = mid + 1;
|
|
21799
21799
|
else if ( c > 0 ) hi = mid;
|
|
@@ -23799,9 +23799,9 @@ search_addr_ki_native_i16 (VALUE self, CArray *ca, VALUE rval, int axis, VALUE r
|
|
|
23799
23799
|
return voutu;
|
|
23800
23800
|
}
|
|
23801
23801
|
ca_check_integer_fits(rval, CA_INT16);
|
|
23802
|
-
|
|
23802
|
+
ca_u_int16_t query_val_buf;
|
|
23803
23803
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
23804
|
-
|
|
23804
|
+
ca_u_int16_t query_val = query_val_buf;
|
|
23805
23805
|
int eps_is_default = NIL_P(reps);
|
|
23806
23806
|
double user_eps = eps_is_default ? 0.0 : NUM2DBL(reps);
|
|
23807
23807
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
@@ -23851,7 +23851,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
23851
23851
|
(void) query_eps;
|
|
23852
23852
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
23853
23853
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
23854
|
-
|
|
23854
|
+
ca_u_int16_t v = *(ca_u_int16_t *)(slab_ptr + i * slab_stride);
|
|
23855
23855
|
if ( v == query_val ) { result = i; break; }
|
|
23856
23856
|
}
|
|
23857
23857
|
}
|
|
@@ -24095,7 +24095,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
24095
24095
|
val_offset += out_idx[k] * val_strides[k];
|
|
24096
24096
|
}
|
|
24097
24097
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
24098
|
-
|
|
24098
|
+
ca_u_int16_t query_val = *(ca_u_int16_t *)(cv->ptr + val_offset);
|
|
24099
24099
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
24100
24100
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
24101
24101
|
|
|
@@ -24110,7 +24110,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
24110
24110
|
(void) query_eps;
|
|
24111
24111
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
24112
24112
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
24113
|
-
|
|
24113
|
+
ca_u_int16_t v = *(ca_u_int16_t *)(slab_ptr + i * slab_stride);
|
|
24114
24114
|
if ( v == query_val ) { result = i; break; }
|
|
24115
24115
|
}
|
|
24116
24116
|
}
|
|
@@ -24163,9 +24163,9 @@ search_addr_ki_native_u16 (VALUE self, CArray *ca, VALUE rval, int axis, VALUE r
|
|
|
24163
24163
|
return voutu;
|
|
24164
24164
|
}
|
|
24165
24165
|
ca_check_integer_fits(rval, CA_UINT16);
|
|
24166
|
-
|
|
24166
|
+
ca_u_uint16_t query_val_buf;
|
|
24167
24167
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
24168
|
-
|
|
24168
|
+
ca_u_uint16_t query_val = query_val_buf;
|
|
24169
24169
|
int eps_is_default = NIL_P(reps);
|
|
24170
24170
|
double user_eps = eps_is_default ? 0.0 : NUM2DBL(reps);
|
|
24171
24171
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
@@ -24215,7 +24215,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
24215
24215
|
(void) query_eps;
|
|
24216
24216
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
24217
24217
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
24218
|
-
|
|
24218
|
+
ca_u_uint16_t v = *(ca_u_uint16_t *)(slab_ptr + i * slab_stride);
|
|
24219
24219
|
if ( v == query_val ) { result = i; break; }
|
|
24220
24220
|
}
|
|
24221
24221
|
}
|
|
@@ -24459,7 +24459,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
24459
24459
|
val_offset += out_idx[k] * val_strides[k];
|
|
24460
24460
|
}
|
|
24461
24461
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
24462
|
-
|
|
24462
|
+
ca_u_uint16_t query_val = *(ca_u_uint16_t *)(cv->ptr + val_offset);
|
|
24463
24463
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
24464
24464
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
24465
24465
|
|
|
@@ -24474,7 +24474,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
24474
24474
|
(void) query_eps;
|
|
24475
24475
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
24476
24476
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
24477
|
-
|
|
24477
|
+
ca_u_uint16_t v = *(ca_u_uint16_t *)(slab_ptr + i * slab_stride);
|
|
24478
24478
|
if ( v == query_val ) { result = i; break; }
|
|
24479
24479
|
}
|
|
24480
24480
|
}
|
|
@@ -24527,9 +24527,9 @@ search_addr_ki_native_i32 (VALUE self, CArray *ca, VALUE rval, int axis, VALUE r
|
|
|
24527
24527
|
return voutu;
|
|
24528
24528
|
}
|
|
24529
24529
|
ca_check_integer_fits(rval, CA_INT32);
|
|
24530
|
-
|
|
24530
|
+
ca_u_int32_t query_val_buf;
|
|
24531
24531
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
24532
|
-
|
|
24532
|
+
ca_u_int32_t query_val = query_val_buf;
|
|
24533
24533
|
int eps_is_default = NIL_P(reps);
|
|
24534
24534
|
double user_eps = eps_is_default ? 0.0 : NUM2DBL(reps);
|
|
24535
24535
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
@@ -24579,7 +24579,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
24579
24579
|
(void) query_eps;
|
|
24580
24580
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
24581
24581
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
24582
|
-
|
|
24582
|
+
ca_u_int32_t v = *(ca_u_int32_t *)(slab_ptr + i * slab_stride);
|
|
24583
24583
|
if ( v == query_val ) { result = i; break; }
|
|
24584
24584
|
}
|
|
24585
24585
|
}
|
|
@@ -24823,7 +24823,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
24823
24823
|
val_offset += out_idx[k] * val_strides[k];
|
|
24824
24824
|
}
|
|
24825
24825
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
24826
|
-
|
|
24826
|
+
ca_u_int32_t query_val = *(ca_u_int32_t *)(cv->ptr + val_offset);
|
|
24827
24827
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
24828
24828
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
24829
24829
|
|
|
@@ -24838,7 +24838,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
24838
24838
|
(void) query_eps;
|
|
24839
24839
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
24840
24840
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
24841
|
-
|
|
24841
|
+
ca_u_int32_t v = *(ca_u_int32_t *)(slab_ptr + i * slab_stride);
|
|
24842
24842
|
if ( v == query_val ) { result = i; break; }
|
|
24843
24843
|
}
|
|
24844
24844
|
}
|
|
@@ -24891,9 +24891,9 @@ search_addr_ki_native_u32 (VALUE self, CArray *ca, VALUE rval, int axis, VALUE r
|
|
|
24891
24891
|
return voutu;
|
|
24892
24892
|
}
|
|
24893
24893
|
ca_check_integer_fits(rval, CA_UINT32);
|
|
24894
|
-
|
|
24894
|
+
ca_u_uint32_t query_val_buf;
|
|
24895
24895
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
24896
|
-
|
|
24896
|
+
ca_u_uint32_t query_val = query_val_buf;
|
|
24897
24897
|
int eps_is_default = NIL_P(reps);
|
|
24898
24898
|
double user_eps = eps_is_default ? 0.0 : NUM2DBL(reps);
|
|
24899
24899
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
@@ -24943,7 +24943,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
24943
24943
|
(void) query_eps;
|
|
24944
24944
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
24945
24945
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
24946
|
-
|
|
24946
|
+
ca_u_uint32_t v = *(ca_u_uint32_t *)(slab_ptr + i * slab_stride);
|
|
24947
24947
|
if ( v == query_val ) { result = i; break; }
|
|
24948
24948
|
}
|
|
24949
24949
|
}
|
|
@@ -25187,7 +25187,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
25187
25187
|
val_offset += out_idx[k] * val_strides[k];
|
|
25188
25188
|
}
|
|
25189
25189
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
25190
|
-
|
|
25190
|
+
ca_u_uint32_t query_val = *(ca_u_uint32_t *)(cv->ptr + val_offset);
|
|
25191
25191
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
25192
25192
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
25193
25193
|
|
|
@@ -25202,7 +25202,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
25202
25202
|
(void) query_eps;
|
|
25203
25203
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
25204
25204
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
25205
|
-
|
|
25205
|
+
ca_u_uint32_t v = *(ca_u_uint32_t *)(slab_ptr + i * slab_stride);
|
|
25206
25206
|
if ( v == query_val ) { result = i; break; }
|
|
25207
25207
|
}
|
|
25208
25208
|
}
|
|
@@ -25255,9 +25255,9 @@ search_addr_ki_native_i64 (VALUE self, CArray *ca, VALUE rval, int axis, VALUE r
|
|
|
25255
25255
|
return voutu;
|
|
25256
25256
|
}
|
|
25257
25257
|
ca_check_integer_fits(rval, CA_INT64);
|
|
25258
|
-
|
|
25258
|
+
ca_u_int64_t query_val_buf;
|
|
25259
25259
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
25260
|
-
|
|
25260
|
+
ca_u_int64_t query_val = query_val_buf;
|
|
25261
25261
|
int eps_is_default = NIL_P(reps);
|
|
25262
25262
|
double user_eps = eps_is_default ? 0.0 : NUM2DBL(reps);
|
|
25263
25263
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
@@ -25307,7 +25307,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
25307
25307
|
(void) query_eps;
|
|
25308
25308
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
25309
25309
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
25310
|
-
|
|
25310
|
+
ca_u_int64_t v = *(ca_u_int64_t *)(slab_ptr + i * slab_stride);
|
|
25311
25311
|
if ( v == query_val ) { result = i; break; }
|
|
25312
25312
|
}
|
|
25313
25313
|
}
|
|
@@ -25551,7 +25551,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
25551
25551
|
val_offset += out_idx[k] * val_strides[k];
|
|
25552
25552
|
}
|
|
25553
25553
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
25554
|
-
|
|
25554
|
+
ca_u_int64_t query_val = *(ca_u_int64_t *)(cv->ptr + val_offset);
|
|
25555
25555
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
25556
25556
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
25557
25557
|
|
|
@@ -25566,7 +25566,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
25566
25566
|
(void) query_eps;
|
|
25567
25567
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
25568
25568
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
25569
|
-
|
|
25569
|
+
ca_u_int64_t v = *(ca_u_int64_t *)(slab_ptr + i * slab_stride);
|
|
25570
25570
|
if ( v == query_val ) { result = i; break; }
|
|
25571
25571
|
}
|
|
25572
25572
|
}
|
|
@@ -25619,9 +25619,9 @@ search_addr_ki_native_u64 (VALUE self, CArray *ca, VALUE rval, int axis, VALUE r
|
|
|
25619
25619
|
return voutu;
|
|
25620
25620
|
}
|
|
25621
25621
|
ca_check_integer_fits(rval, CA_UINT64);
|
|
25622
|
-
|
|
25622
|
+
ca_u_uint64_t query_val_buf;
|
|
25623
25623
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
25624
|
-
|
|
25624
|
+
ca_u_uint64_t query_val = query_val_buf;
|
|
25625
25625
|
int eps_is_default = NIL_P(reps);
|
|
25626
25626
|
double user_eps = eps_is_default ? 0.0 : NUM2DBL(reps);
|
|
25627
25627
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
@@ -25671,7 +25671,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
25671
25671
|
(void) query_eps;
|
|
25672
25672
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
25673
25673
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
25674
|
-
|
|
25674
|
+
ca_u_uint64_t v = *(ca_u_uint64_t *)(slab_ptr + i * slab_stride);
|
|
25675
25675
|
if ( v == query_val ) { result = i; break; }
|
|
25676
25676
|
}
|
|
25677
25677
|
}
|
|
@@ -25915,7 +25915,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
25915
25915
|
val_offset += out_idx[k] * val_strides[k];
|
|
25916
25916
|
}
|
|
25917
25917
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
25918
|
-
|
|
25918
|
+
ca_u_uint64_t query_val = *(ca_u_uint64_t *)(cv->ptr + val_offset);
|
|
25919
25919
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
25920
25920
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(0) * fabs((double)query_val) : 0.0) : user_eps;
|
|
25921
25921
|
|
|
@@ -25930,7 +25930,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
25930
25930
|
(void) query_eps;
|
|
25931
25931
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
25932
25932
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
25933
|
-
|
|
25933
|
+
ca_u_uint64_t v = *(ca_u_uint64_t *)(slab_ptr + i * slab_stride);
|
|
25934
25934
|
if ( v == query_val ) { result = i; break; }
|
|
25935
25935
|
}
|
|
25936
25936
|
}
|
|
@@ -25982,9 +25982,9 @@ search_addr_ki_native_f32 (VALUE self, CArray *ca, VALUE rval, int axis, VALUE r
|
|
|
25982
25982
|
if ( ca->ndim == 1 ) { return Qnil; }
|
|
25983
25983
|
return voutu;
|
|
25984
25984
|
}
|
|
25985
|
-
|
|
25985
|
+
ca_u_float32_t query_val_buf;
|
|
25986
25986
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
25987
|
-
|
|
25987
|
+
ca_u_float32_t query_val = query_val_buf;
|
|
25988
25988
|
int eps_is_default = NIL_P(reps);
|
|
25989
25989
|
double user_eps = eps_is_default ? 0.0 : NUM2DBL(reps);
|
|
25990
25990
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(FLT_EPSILON) * fabs((double)query_val) : 0.0) : user_eps;
|
|
@@ -26033,7 +26033,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
26033
26033
|
result = (ca_size_t) -1;
|
|
26034
26034
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
26035
26035
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
26036
|
-
|
|
26036
|
+
ca_u_float32_t v = *(ca_u_float32_t *)(slab_ptr + i * slab_stride);
|
|
26037
26037
|
if ( v == query_val || fabs((double)v - (double)query_val) <= query_eps ) { result = i; break; }
|
|
26038
26038
|
}
|
|
26039
26039
|
}
|
|
@@ -26277,7 +26277,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
26277
26277
|
val_offset += out_idx[k] * val_strides[k];
|
|
26278
26278
|
}
|
|
26279
26279
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
26280
|
-
|
|
26280
|
+
ca_u_float32_t query_val = *(ca_u_float32_t *)(cv->ptr + val_offset);
|
|
26281
26281
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
26282
26282
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(FLT_EPSILON) * fabs((double)query_val) : 0.0) : user_eps;
|
|
26283
26283
|
|
|
@@ -26291,7 +26291,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
26291
26291
|
result = (ca_size_t) -1;
|
|
26292
26292
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
26293
26293
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
26294
|
-
|
|
26294
|
+
ca_u_float32_t v = *(ca_u_float32_t *)(slab_ptr + i * slab_stride);
|
|
26295
26295
|
if ( v == query_val || fabs((double)v - (double)query_val) <= query_eps ) { result = i; break; }
|
|
26296
26296
|
}
|
|
26297
26297
|
}
|
|
@@ -26343,9 +26343,9 @@ search_addr_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axis, VALUE r
|
|
|
26343
26343
|
if ( ca->ndim == 1 ) { return Qnil; }
|
|
26344
26344
|
return voutu;
|
|
26345
26345
|
}
|
|
26346
|
-
|
|
26346
|
+
ca_u_float64_t query_val_buf;
|
|
26347
26347
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
26348
|
-
|
|
26348
|
+
ca_u_float64_t query_val = query_val_buf;
|
|
26349
26349
|
int eps_is_default = NIL_P(reps);
|
|
26350
26350
|
double user_eps = eps_is_default ? 0.0 : NUM2DBL(reps);
|
|
26351
26351
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(DBL_EPSILON) * fabs((double)query_val) : 0.0) : user_eps;
|
|
@@ -26394,7 +26394,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
26394
26394
|
result = (ca_size_t) -1;
|
|
26395
26395
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
26396
26396
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
26397
|
-
|
|
26397
|
+
ca_u_float64_t v = *(ca_u_float64_t *)(slab_ptr + i * slab_stride);
|
|
26398
26398
|
if ( v == query_val || fabs((double)v - (double)query_val) <= query_eps ) { result = i; break; }
|
|
26399
26399
|
}
|
|
26400
26400
|
}
|
|
@@ -26638,7 +26638,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
26638
26638
|
val_offset += out_idx[k] * val_strides[k];
|
|
26639
26639
|
}
|
|
26640
26640
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
26641
|
-
|
|
26641
|
+
ca_u_float64_t query_val = *(ca_u_float64_t *)(cv->ptr + val_offset);
|
|
26642
26642
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
26643
26643
|
double query_eps = eps_is_default ? (isfinite((double)query_val) ? (double)(DBL_EPSILON) * fabs((double)query_val) : 0.0) : user_eps;
|
|
26644
26644
|
|
|
@@ -26652,7 +26652,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
26652
26652
|
result = (ca_size_t) -1;
|
|
26653
26653
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
26654
26654
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
26655
|
-
|
|
26655
|
+
ca_u_float64_t v = *(ca_u_float64_t *)(slab_ptr + i * slab_stride);
|
|
26656
26656
|
if ( v == query_val || fabs((double)v - (double)query_val) <= query_eps ) { result = i; break; }
|
|
26657
26657
|
}
|
|
26658
26658
|
}
|
|
@@ -28645,9 +28645,9 @@ search_nearest_addr_ki_native_i16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
28645
28645
|
return voutu;
|
|
28646
28646
|
}
|
|
28647
28647
|
ca_check_integer_fits(rval, CA_INT16);
|
|
28648
|
-
|
|
28648
|
+
ca_u_int16_t query_val_buf;
|
|
28649
28649
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
28650
|
-
|
|
28650
|
+
ca_u_int16_t query_val = query_val_buf;
|
|
28651
28651
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
28652
28652
|
|
|
28653
28653
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -28697,7 +28697,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
28697
28697
|
uint64_t best_dist = 0;
|
|
28698
28698
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
28699
28699
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
28700
|
-
|
|
28700
|
+
ca_u_int16_t v = *(ca_u_int16_t *)(slab_ptr + i * slab_stride);
|
|
28701
28701
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
28702
28702
|
: (uint64_t) query_val - (uint64_t) v;
|
|
28703
28703
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -28943,7 +28943,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
28943
28943
|
val_offset += out_idx[k] * val_strides[k];
|
|
28944
28944
|
}
|
|
28945
28945
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
28946
|
-
|
|
28946
|
+
ca_u_int16_t query_val = *(ca_u_int16_t *)(cv->ptr + val_offset);
|
|
28947
28947
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
28948
28948
|
double query_eps = 0.0; (void) query_eps;
|
|
28949
28949
|
|
|
@@ -28960,7 +28960,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
28960
28960
|
uint64_t best_dist = 0;
|
|
28961
28961
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
28962
28962
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
28963
|
-
|
|
28963
|
+
ca_u_int16_t v = *(ca_u_int16_t *)(slab_ptr + i * slab_stride);
|
|
28964
28964
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
28965
28965
|
: (uint64_t) query_val - (uint64_t) v;
|
|
28966
28966
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -29016,9 +29016,9 @@ search_nearest_addr_ki_native_u16 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
29016
29016
|
return voutu;
|
|
29017
29017
|
}
|
|
29018
29018
|
ca_check_integer_fits(rval, CA_UINT16);
|
|
29019
|
-
|
|
29019
|
+
ca_u_uint16_t query_val_buf;
|
|
29020
29020
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
29021
|
-
|
|
29021
|
+
ca_u_uint16_t query_val = query_val_buf;
|
|
29022
29022
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
29023
29023
|
|
|
29024
29024
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -29068,7 +29068,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
29068
29068
|
uint64_t best_dist = 0;
|
|
29069
29069
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
29070
29070
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
29071
|
-
|
|
29071
|
+
ca_u_uint16_t v = *(ca_u_uint16_t *)(slab_ptr + i * slab_stride);
|
|
29072
29072
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
29073
29073
|
: (uint64_t) query_val - (uint64_t) v;
|
|
29074
29074
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -29314,7 +29314,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
29314
29314
|
val_offset += out_idx[k] * val_strides[k];
|
|
29315
29315
|
}
|
|
29316
29316
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
29317
|
-
|
|
29317
|
+
ca_u_uint16_t query_val = *(ca_u_uint16_t *)(cv->ptr + val_offset);
|
|
29318
29318
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
29319
29319
|
double query_eps = 0.0; (void) query_eps;
|
|
29320
29320
|
|
|
@@ -29331,7 +29331,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
29331
29331
|
uint64_t best_dist = 0;
|
|
29332
29332
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
29333
29333
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
29334
|
-
|
|
29334
|
+
ca_u_uint16_t v = *(ca_u_uint16_t *)(slab_ptr + i * slab_stride);
|
|
29335
29335
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
29336
29336
|
: (uint64_t) query_val - (uint64_t) v;
|
|
29337
29337
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -29387,9 +29387,9 @@ search_nearest_addr_ki_native_i32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
29387
29387
|
return voutu;
|
|
29388
29388
|
}
|
|
29389
29389
|
ca_check_integer_fits(rval, CA_INT32);
|
|
29390
|
-
|
|
29390
|
+
ca_u_int32_t query_val_buf;
|
|
29391
29391
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
29392
|
-
|
|
29392
|
+
ca_u_int32_t query_val = query_val_buf;
|
|
29393
29393
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
29394
29394
|
|
|
29395
29395
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -29439,7 +29439,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
29439
29439
|
uint64_t best_dist = 0;
|
|
29440
29440
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
29441
29441
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
29442
|
-
|
|
29442
|
+
ca_u_int32_t v = *(ca_u_int32_t *)(slab_ptr + i * slab_stride);
|
|
29443
29443
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
29444
29444
|
: (uint64_t) query_val - (uint64_t) v;
|
|
29445
29445
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -29685,7 +29685,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
29685
29685
|
val_offset += out_idx[k] * val_strides[k];
|
|
29686
29686
|
}
|
|
29687
29687
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
29688
|
-
|
|
29688
|
+
ca_u_int32_t query_val = *(ca_u_int32_t *)(cv->ptr + val_offset);
|
|
29689
29689
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
29690
29690
|
double query_eps = 0.0; (void) query_eps;
|
|
29691
29691
|
|
|
@@ -29702,7 +29702,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
29702
29702
|
uint64_t best_dist = 0;
|
|
29703
29703
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
29704
29704
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
29705
|
-
|
|
29705
|
+
ca_u_int32_t v = *(ca_u_int32_t *)(slab_ptr + i * slab_stride);
|
|
29706
29706
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
29707
29707
|
: (uint64_t) query_val - (uint64_t) v;
|
|
29708
29708
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -29758,9 +29758,9 @@ search_nearest_addr_ki_native_u32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
29758
29758
|
return voutu;
|
|
29759
29759
|
}
|
|
29760
29760
|
ca_check_integer_fits(rval, CA_UINT32);
|
|
29761
|
-
|
|
29761
|
+
ca_u_uint32_t query_val_buf;
|
|
29762
29762
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
29763
|
-
|
|
29763
|
+
ca_u_uint32_t query_val = query_val_buf;
|
|
29764
29764
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
29765
29765
|
|
|
29766
29766
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -29810,7 +29810,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
29810
29810
|
uint64_t best_dist = 0;
|
|
29811
29811
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
29812
29812
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
29813
|
-
|
|
29813
|
+
ca_u_uint32_t v = *(ca_u_uint32_t *)(slab_ptr + i * slab_stride);
|
|
29814
29814
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
29815
29815
|
: (uint64_t) query_val - (uint64_t) v;
|
|
29816
29816
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -30056,7 +30056,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
30056
30056
|
val_offset += out_idx[k] * val_strides[k];
|
|
30057
30057
|
}
|
|
30058
30058
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
30059
|
-
|
|
30059
|
+
ca_u_uint32_t query_val = *(ca_u_uint32_t *)(cv->ptr + val_offset);
|
|
30060
30060
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
30061
30061
|
double query_eps = 0.0; (void) query_eps;
|
|
30062
30062
|
|
|
@@ -30073,7 +30073,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
30073
30073
|
uint64_t best_dist = 0;
|
|
30074
30074
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
30075
30075
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
30076
|
-
|
|
30076
|
+
ca_u_uint32_t v = *(ca_u_uint32_t *)(slab_ptr + i * slab_stride);
|
|
30077
30077
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
30078
30078
|
: (uint64_t) query_val - (uint64_t) v;
|
|
30079
30079
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -30129,9 +30129,9 @@ search_nearest_addr_ki_native_i64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
30129
30129
|
return voutu;
|
|
30130
30130
|
}
|
|
30131
30131
|
ca_check_integer_fits(rval, CA_INT64);
|
|
30132
|
-
|
|
30132
|
+
ca_u_int64_t query_val_buf;
|
|
30133
30133
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
30134
|
-
|
|
30134
|
+
ca_u_int64_t query_val = query_val_buf;
|
|
30135
30135
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
30136
30136
|
|
|
30137
30137
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -30181,7 +30181,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
30181
30181
|
uint64_t best_dist = 0;
|
|
30182
30182
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
30183
30183
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
30184
|
-
|
|
30184
|
+
ca_u_int64_t v = *(ca_u_int64_t *)(slab_ptr + i * slab_stride);
|
|
30185
30185
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
30186
30186
|
: (uint64_t) query_val - (uint64_t) v;
|
|
30187
30187
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -30427,7 +30427,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
30427
30427
|
val_offset += out_idx[k] * val_strides[k];
|
|
30428
30428
|
}
|
|
30429
30429
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
30430
|
-
|
|
30430
|
+
ca_u_int64_t query_val = *(ca_u_int64_t *)(cv->ptr + val_offset);
|
|
30431
30431
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
30432
30432
|
double query_eps = 0.0; (void) query_eps;
|
|
30433
30433
|
|
|
@@ -30444,7 +30444,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
30444
30444
|
uint64_t best_dist = 0;
|
|
30445
30445
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
30446
30446
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
30447
|
-
|
|
30447
|
+
ca_u_int64_t v = *(ca_u_int64_t *)(slab_ptr + i * slab_stride);
|
|
30448
30448
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
30449
30449
|
: (uint64_t) query_val - (uint64_t) v;
|
|
30450
30450
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -30500,9 +30500,9 @@ search_nearest_addr_ki_native_u64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
30500
30500
|
return voutu;
|
|
30501
30501
|
}
|
|
30502
30502
|
ca_check_integer_fits(rval, CA_UINT64);
|
|
30503
|
-
|
|
30503
|
+
ca_u_uint64_t query_val_buf;
|
|
30504
30504
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
30505
|
-
|
|
30505
|
+
ca_u_uint64_t query_val = query_val_buf;
|
|
30506
30506
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
30507
30507
|
|
|
30508
30508
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -30552,7 +30552,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
30552
30552
|
uint64_t best_dist = 0;
|
|
30553
30553
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
30554
30554
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
30555
|
-
|
|
30555
|
+
ca_u_uint64_t v = *(ca_u_uint64_t *)(slab_ptr + i * slab_stride);
|
|
30556
30556
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
30557
30557
|
: (uint64_t) query_val - (uint64_t) v;
|
|
30558
30558
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -30798,7 +30798,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
30798
30798
|
val_offset += out_idx[k] * val_strides[k];
|
|
30799
30799
|
}
|
|
30800
30800
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
30801
|
-
|
|
30801
|
+
ca_u_uint64_t query_val = *(ca_u_uint64_t *)(cv->ptr + val_offset);
|
|
30802
30802
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
30803
30803
|
double query_eps = 0.0; (void) query_eps;
|
|
30804
30804
|
|
|
@@ -30815,7 +30815,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
30815
30815
|
uint64_t best_dist = 0;
|
|
30816
30816
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
30817
30817
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
30818
|
-
|
|
30818
|
+
ca_u_uint64_t v = *(ca_u_uint64_t *)(slab_ptr + i * slab_stride);
|
|
30819
30819
|
uint64_t dist = ( v >= query_val ) ? (uint64_t) v - (uint64_t) query_val
|
|
30820
30820
|
: (uint64_t) query_val - (uint64_t) v;
|
|
30821
30821
|
if ( result == (ca_size_t) -1 || dist < best_dist ) { best_dist = dist; result = i; }
|
|
@@ -30870,9 +30870,9 @@ search_nearest_addr_ki_native_f32 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
30870
30870
|
if ( ca->ndim == 1 ) { return Qnil; }
|
|
30871
30871
|
return voutu;
|
|
30872
30872
|
}
|
|
30873
|
-
|
|
30873
|
+
ca_u_float32_t query_val_buf;
|
|
30874
30874
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
30875
|
-
|
|
30875
|
+
ca_u_float32_t query_val = query_val_buf;
|
|
30876
30876
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
30877
30877
|
|
|
30878
30878
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -30920,7 +30920,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
30920
30920
|
double best_dist = INFINITY;
|
|
30921
30921
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
30922
30922
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
30923
|
-
|
|
30923
|
+
ca_u_float32_t v = *(ca_u_float32_t *)(slab_ptr + i * slab_stride);
|
|
30924
30924
|
/* An equal value is at distance 0 even when both are infinite
|
|
30925
30925
|
(Inf - Inf is NaN); a NaN distance never wins. */
|
|
30926
30926
|
double dist = ( v == query_val ) ? 0.0 : fabs((double)v - (double)query_val);
|
|
@@ -31168,7 +31168,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
31168
31168
|
val_offset += out_idx[k] * val_strides[k];
|
|
31169
31169
|
}
|
|
31170
31170
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
31171
|
-
|
|
31171
|
+
ca_u_float32_t query_val = *(ca_u_float32_t *)(cv->ptr + val_offset);
|
|
31172
31172
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
31173
31173
|
double query_eps = 0.0; (void) query_eps;
|
|
31174
31174
|
|
|
@@ -31183,7 +31183,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
31183
31183
|
double best_dist = INFINITY;
|
|
31184
31184
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
31185
31185
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
31186
|
-
|
|
31186
|
+
ca_u_float32_t v = *(ca_u_float32_t *)(slab_ptr + i * slab_stride);
|
|
31187
31187
|
/* An equal value is at distance 0 even when both are infinite
|
|
31188
31188
|
(Inf - Inf is NaN); a NaN distance never wins. */
|
|
31189
31189
|
double dist = ( v == query_val ) ? 0.0 : fabs((double)v - (double)query_val);
|
|
@@ -31240,9 +31240,9 @@ search_nearest_addr_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
31240
31240
|
if ( ca->ndim == 1 ) { return Qnil; }
|
|
31241
31241
|
return voutu;
|
|
31242
31242
|
}
|
|
31243
|
-
|
|
31243
|
+
ca_u_float64_t query_val_buf;
|
|
31244
31244
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
31245
|
-
|
|
31245
|
+
ca_u_float64_t query_val = query_val_buf;
|
|
31246
31246
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
31247
31247
|
|
|
31248
31248
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
@@ -31290,7 +31290,7 @@ for ( int8_t mm = 0; mm < st.outer_ndim; mm++ ) {
|
|
|
31290
31290
|
double best_dist = INFINITY;
|
|
31291
31291
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
31292
31292
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
31293
|
-
|
|
31293
|
+
ca_u_float64_t v = *(ca_u_float64_t *)(slab_ptr + i * slab_stride);
|
|
31294
31294
|
/* An equal value is at distance 0 even when both are infinite
|
|
31295
31295
|
(Inf - Inf is NaN); a NaN distance never wins. */
|
|
31296
31296
|
double dist = ( v == query_val ) ? 0.0 : fabs((double)v - (double)query_val);
|
|
@@ -31538,7 +31538,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
31538
31538
|
val_offset += out_idx[k] * val_strides[k];
|
|
31539
31539
|
}
|
|
31540
31540
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
31541
|
-
|
|
31541
|
+
ca_u_float64_t query_val = *(ca_u_float64_t *)(cv->ptr + val_offset);
|
|
31542
31542
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
31543
31543
|
double query_eps = 0.0; (void) query_eps;
|
|
31544
31544
|
|
|
@@ -31553,7 +31553,7 @@ rb_raise(rb_eNotImpError, "%s: view_flat semantics with CArray val (broadcast) n
|
|
|
31553
31553
|
double best_dist = INFINITY;
|
|
31554
31554
|
for ( ca_size_t i = 0; i < slab_n; i++ ) {
|
|
31555
31555
|
if ( mask_in && mask_in[i * slab_mask_stride] ) continue;
|
|
31556
|
-
|
|
31556
|
+
ca_u_float64_t v = *(ca_u_float64_t *)(slab_ptr + i * slab_stride);
|
|
31557
31557
|
/* An equal value is at distance 0 even when both are infinite
|
|
31558
31558
|
(Inf - Inf is NaN); a NaN distance never wins. */
|
|
31559
31559
|
double dist = ( v == query_val ) ? 0.0 : fabs((double)v - (double)query_val);
|
|
@@ -32491,23 +32491,23 @@ linear_section_binary_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axi
|
|
|
32491
32491
|
VALUE voutu = rb_ca_new_reduced(self, undef_axes, 1, CA_FLOAT64, 0);
|
|
32492
32492
|
CArray *cou;
|
|
32493
32493
|
GetCArray(voutu, cou);
|
|
32494
|
-
MEMZERO((
|
|
32494
|
+
MEMZERO((ca_u_float64_t *) cou->ptr, ca_u_float64_t, cou->elements);
|
|
32495
32495
|
ca_create_mask(cou);
|
|
32496
32496
|
memset(cou->mask->ptr, 1, (size_t) cou->elements);
|
|
32497
32497
|
if ( ca->ndim == 1 ) { return Qnil; }
|
|
32498
32498
|
return voutu;
|
|
32499
32499
|
}
|
|
32500
|
-
|
|
32500
|
+
ca_u_float64_t query_val_buf;
|
|
32501
32501
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
32502
|
-
|
|
32502
|
+
ca_u_float64_t query_val = query_val_buf;
|
|
32503
32503
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
32504
32504
|
|
|
32505
32505
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
32506
32506
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, 1, CA_FLOAT64, 0);
|
|
32507
32507
|
CArray *co;
|
|
32508
32508
|
GetCArray(vout, co);
|
|
32509
|
-
|
|
32510
|
-
|
|
32509
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
32510
|
+
|
|
32511
32511
|
|
|
32512
32512
|
ca_iter_state st;
|
|
32513
32513
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
@@ -32527,19 +32527,19 @@ linear_section_binary_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axi
|
|
|
32527
32527
|
ca_size_t slab_mask_stride = st.slab_mask_strides[0];
|
|
32528
32528
|
(void) mask_in;
|
|
32529
32529
|
(void) slab_mask_stride; /* mask_self: :raise rejects upstream */
|
|
32530
|
-
|
|
32530
|
+
ca_u_float64_t result;
|
|
32531
32531
|
{
|
|
32532
32532
|
result = NAN;
|
|
32533
32533
|
if ( slab_n <= 1 ) {
|
|
32534
32534
|
/* A one-point axis has no segment: only the point itself is in
|
|
32535
32535
|
* range, at 0. An empty one has nothing in range. */
|
|
32536
|
-
if ( slab_n == 1 && query_val == *(
|
|
32536
|
+
if ( slab_n == 1 && query_val == *(ca_u_float64_t *)slab_ptr ) {
|
|
32537
32537
|
result = 0.0;
|
|
32538
32538
|
}
|
|
32539
32539
|
}
|
|
32540
32540
|
else {
|
|
32541
|
-
double y0 = *(
|
|
32542
|
-
double yn = *(
|
|
32541
|
+
double y0 = *(ca_u_float64_t *)(slab_ptr + 0 * slab_stride);
|
|
32542
|
+
double yn = *(ca_u_float64_t *)(slab_ptr + (slab_n - 1) * slab_stride);
|
|
32543
32543
|
int ascending = ( yn >= y0 ); /* grid direction (monotonic assumed) */
|
|
32544
32544
|
ca_size_t x1 = 0;
|
|
32545
32545
|
int found = 0;
|
|
@@ -32562,8 +32562,8 @@ linear_section_binary_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axi
|
|
|
32562
32562
|
double gd = (query_val - y0) / (yn - y0) * (double)(slab_n - 1);
|
|
32563
32563
|
if ( gd >= 0.0 && gd < (double)(slab_n - 1) ) {
|
|
32564
32564
|
ca_size_t ag = (ca_size_t) gd;
|
|
32565
|
-
double yga = *(
|
|
32566
|
-
double ygb = *(
|
|
32565
|
+
double yga = *(ca_u_float64_t *)(slab_ptr + ag * slab_stride);
|
|
32566
|
+
double ygb = *(ca_u_float64_t *)(slab_ptr + (ag + 1) * slab_stride);
|
|
32567
32567
|
if ( (yga - query_val) * (ygb - query_val) <= 0 ) {
|
|
32568
32568
|
x1 = ag; found = 1;
|
|
32569
32569
|
}
|
|
@@ -32578,7 +32578,7 @@ linear_section_binary_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axi
|
|
|
32578
32578
|
double ya = y0;
|
|
32579
32579
|
while ( (b - a) > 1 ) {
|
|
32580
32580
|
ca_size_t c = (a + b) / 2;
|
|
32581
|
-
double yc = *(
|
|
32581
|
+
double yc = *(ca_u_float64_t *)(slab_ptr + c * slab_stride);
|
|
32582
32582
|
if ( (ya - query_val) * (yc - query_val) <= 0 ) { b = c; }
|
|
32583
32583
|
else { a = c; ya = yc; }
|
|
32584
32584
|
}
|
|
@@ -32587,8 +32587,8 @@ linear_section_binary_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axi
|
|
|
32587
32587
|
}
|
|
32588
32588
|
|
|
32589
32589
|
if ( found ) {
|
|
32590
|
-
double y1 = *(
|
|
32591
|
-
double y2 = *(
|
|
32590
|
+
double y1 = *(ca_u_float64_t *)(slab_ptr + x1 * slab_stride);
|
|
32591
|
+
double y2 = *(ca_u_float64_t *)(slab_ptr + (x1 + 1) * slab_stride);
|
|
32592
32592
|
double rest = (query_val - y1) / (y2 - y1);
|
|
32593
32593
|
if ( y2 != 0.0 && fabs(y2 - query_val) / fabs(y2) < DBL_EPSILON * 100 ) {
|
|
32594
32594
|
result = (double)(x1 + 1);
|
|
@@ -32748,7 +32748,7 @@ linear_section_binary_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axi
|
|
|
32748
32748
|
VALUE vout = rb_carray_new(CA_FLOAT64, out_ndim, out_dim, 0, NULL);
|
|
32749
32749
|
CArray *co;
|
|
32750
32750
|
GetCArray(vout, co);
|
|
32751
|
-
|
|
32751
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
32752
32752
|
boolean8_t *op_mask = NULL; /* lazily allocated on the first masked output cell */
|
|
32753
32753
|
|
|
32754
32754
|
|
|
@@ -32837,29 +32837,29 @@ linear_section_binary_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axi
|
|
|
32837
32837
|
val_offset += out_idx[k] * val_strides[k];
|
|
32838
32838
|
}
|
|
32839
32839
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
32840
|
-
|
|
32840
|
+
ca_u_float64_t query_val = *(ca_u_float64_t *)(cv->ptr + val_offset);
|
|
32841
32841
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
32842
32842
|
double query_eps = 0.0; (void) query_eps;
|
|
32843
32843
|
(void) mask_in;
|
|
32844
32844
|
(void) slab_mask_stride; /* mask_self: :raise rejects upstream */
|
|
32845
|
-
|
|
32845
|
+
ca_u_float64_t result;
|
|
32846
32846
|
if ( cv_mask_base && cv_mask_base[val_offset / cv->bytes] ) {
|
|
32847
32847
|
if ( ! op_mask ) { ca_create_mask(co); op_mask = (boolean8_t *) co->mask->ptr; }
|
|
32848
32848
|
op_mask[flat] = 1;
|
|
32849
|
-
op[flat] = (
|
|
32849
|
+
op[flat] = (ca_u_float64_t) 0; /* undetermined query; the mask bit is what counts */
|
|
32850
32850
|
} else {
|
|
32851
32851
|
{
|
|
32852
32852
|
result = NAN;
|
|
32853
32853
|
if ( slab_n <= 1 ) {
|
|
32854
32854
|
/* A one-point axis has no segment: only the point itself is in
|
|
32855
32855
|
* range, at 0. An empty one has nothing in range. */
|
|
32856
|
-
if ( slab_n == 1 && query_val == *(
|
|
32856
|
+
if ( slab_n == 1 && query_val == *(ca_u_float64_t *)slab_ptr ) {
|
|
32857
32857
|
result = 0.0;
|
|
32858
32858
|
}
|
|
32859
32859
|
}
|
|
32860
32860
|
else {
|
|
32861
|
-
double y0 = *(
|
|
32862
|
-
double yn = *(
|
|
32861
|
+
double y0 = *(ca_u_float64_t *)(slab_ptr + 0 * slab_stride);
|
|
32862
|
+
double yn = *(ca_u_float64_t *)(slab_ptr + (slab_n - 1) * slab_stride);
|
|
32863
32863
|
int ascending = ( yn >= y0 ); /* grid direction (monotonic assumed) */
|
|
32864
32864
|
ca_size_t x1 = 0;
|
|
32865
32865
|
int found = 0;
|
|
@@ -32882,8 +32882,8 @@ linear_section_binary_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axi
|
|
|
32882
32882
|
double gd = (query_val - y0) / (yn - y0) * (double)(slab_n - 1);
|
|
32883
32883
|
if ( gd >= 0.0 && gd < (double)(slab_n - 1) ) {
|
|
32884
32884
|
ca_size_t ag = (ca_size_t) gd;
|
|
32885
|
-
double yga = *(
|
|
32886
|
-
double ygb = *(
|
|
32885
|
+
double yga = *(ca_u_float64_t *)(slab_ptr + ag * slab_stride);
|
|
32886
|
+
double ygb = *(ca_u_float64_t *)(slab_ptr + (ag + 1) * slab_stride);
|
|
32887
32887
|
if ( (yga - query_val) * (ygb - query_val) <= 0 ) {
|
|
32888
32888
|
x1 = ag; found = 1;
|
|
32889
32889
|
}
|
|
@@ -32898,7 +32898,7 @@ linear_section_binary_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axi
|
|
|
32898
32898
|
double ya = y0;
|
|
32899
32899
|
while ( (b - a) > 1 ) {
|
|
32900
32900
|
ca_size_t c = (a + b) / 2;
|
|
32901
|
-
double yc = *(
|
|
32901
|
+
double yc = *(ca_u_float64_t *)(slab_ptr + c * slab_stride);
|
|
32902
32902
|
if ( (ya - query_val) * (yc - query_val) <= 0 ) { b = c; }
|
|
32903
32903
|
else { a = c; ya = yc; }
|
|
32904
32904
|
}
|
|
@@ -32907,8 +32907,8 @@ linear_section_binary_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axi
|
|
|
32907
32907
|
}
|
|
32908
32908
|
|
|
32909
32909
|
if ( found ) {
|
|
32910
|
-
double y1 = *(
|
|
32911
|
-
double y2 = *(
|
|
32910
|
+
double y1 = *(ca_u_float64_t *)(slab_ptr + x1 * slab_stride);
|
|
32911
|
+
double y2 = *(ca_u_float64_t *)(slab_ptr + (x1 + 1) * slab_stride);
|
|
32912
32912
|
double rest = (query_val - y1) / (y2 - y1);
|
|
32913
32913
|
if ( y2 != 0.0 && fabs(y2 - query_val) / fabs(y2) < DBL_EPSILON * 100 ) {
|
|
32914
32914
|
result = (double)(x1 + 1);
|
|
@@ -33020,23 +33020,23 @@ linear_section_linear_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axi
|
|
|
33020
33020
|
VALUE voutu = rb_ca_new_reduced(self, undef_axes, 1, CA_FLOAT64, 0);
|
|
33021
33021
|
CArray *cou;
|
|
33022
33022
|
GetCArray(voutu, cou);
|
|
33023
|
-
MEMZERO((
|
|
33023
|
+
MEMZERO((ca_u_float64_t *) cou->ptr, ca_u_float64_t, cou->elements);
|
|
33024
33024
|
ca_create_mask(cou);
|
|
33025
33025
|
memset(cou->mask->ptr, 1, (size_t) cou->elements);
|
|
33026
33026
|
if ( ca->ndim == 1 ) { return Qnil; }
|
|
33027
33027
|
return voutu;
|
|
33028
33028
|
}
|
|
33029
|
-
|
|
33029
|
+
ca_u_float64_t query_val_buf;
|
|
33030
33030
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
33031
|
-
|
|
33031
|
+
ca_u_float64_t query_val = query_val_buf;
|
|
33032
33032
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
33033
33033
|
|
|
33034
33034
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
33035
33035
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, 1, CA_FLOAT64, 0);
|
|
33036
33036
|
CArray *co;
|
|
33037
33037
|
GetCArray(vout, co);
|
|
33038
|
-
|
|
33039
|
-
|
|
33038
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
33039
|
+
|
|
33040
33040
|
|
|
33041
33041
|
ca_iter_state st;
|
|
33042
33042
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
@@ -33056,13 +33056,13 @@ linear_section_linear_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axi
|
|
|
33056
33056
|
ca_size_t slab_mask_stride = st.slab_mask_strides[0];
|
|
33057
33057
|
(void) mask_in;
|
|
33058
33058
|
(void) slab_mask_stride; /* mask_self: :raise rejects upstream */
|
|
33059
|
-
|
|
33059
|
+
ca_u_float64_t result;
|
|
33060
33060
|
{
|
|
33061
33061
|
result = NAN;
|
|
33062
33062
|
if ( slab_n <= 1 ) {
|
|
33063
33063
|
/* A one-point axis has no segment: only the point itself is in
|
|
33064
33064
|
* range, at 0. An empty one has nothing in range. */
|
|
33065
|
-
if ( slab_n == 1 && query_val == *(
|
|
33065
|
+
if ( slab_n == 1 && query_val == *(ca_u_float64_t *)slab_ptr ) {
|
|
33066
33066
|
result = 0.0;
|
|
33067
33067
|
}
|
|
33068
33068
|
}
|
|
@@ -33070,15 +33070,15 @@ linear_section_linear_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axi
|
|
|
33070
33070
|
ca_size_t x1 = 0;
|
|
33071
33071
|
int found = 0;
|
|
33072
33072
|
for ( ca_size_t k = 0; k < slab_n - 1; k++ ) {
|
|
33073
|
-
double yk = *(
|
|
33074
|
-
double yk1 = *(
|
|
33073
|
+
double yk = *(ca_u_float64_t *)(slab_ptr + k * slab_stride);
|
|
33074
|
+
double yk1 = *(ca_u_float64_t *)(slab_ptr + (k + 1) * slab_stride);
|
|
33075
33075
|
if ( (query_val - yk) * (query_val - yk1) <= 0 ) {
|
|
33076
33076
|
x1 = k; found = 1; break;
|
|
33077
33077
|
}
|
|
33078
33078
|
}
|
|
33079
33079
|
if ( found ) {
|
|
33080
|
-
double y1 = *(
|
|
33081
|
-
double y2 = *(
|
|
33080
|
+
double y1 = *(ca_u_float64_t *)(slab_ptr + x1 * slab_stride);
|
|
33081
|
+
double y2 = *(ca_u_float64_t *)(slab_ptr + (x1 + 1) * slab_stride);
|
|
33082
33082
|
result = (query_val - y1) / (y2 - y1) + (double) x1;
|
|
33083
33083
|
}
|
|
33084
33084
|
|
|
@@ -33228,7 +33228,7 @@ linear_section_linear_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axi
|
|
|
33228
33228
|
VALUE vout = rb_carray_new(CA_FLOAT64, out_ndim, out_dim, 0, NULL);
|
|
33229
33229
|
CArray *co;
|
|
33230
33230
|
GetCArray(vout, co);
|
|
33231
|
-
|
|
33231
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
33232
33232
|
boolean8_t *op_mask = NULL; /* lazily allocated on the first masked output cell */
|
|
33233
33233
|
|
|
33234
33234
|
|
|
@@ -33317,23 +33317,23 @@ linear_section_linear_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axi
|
|
|
33317
33317
|
val_offset += out_idx[k] * val_strides[k];
|
|
33318
33318
|
}
|
|
33319
33319
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
33320
|
-
|
|
33320
|
+
ca_u_float64_t query_val = *(ca_u_float64_t *)(cv->ptr + val_offset);
|
|
33321
33321
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
33322
33322
|
double query_eps = 0.0; (void) query_eps;
|
|
33323
33323
|
(void) mask_in;
|
|
33324
33324
|
(void) slab_mask_stride; /* mask_self: :raise rejects upstream */
|
|
33325
|
-
|
|
33325
|
+
ca_u_float64_t result;
|
|
33326
33326
|
if ( cv_mask_base && cv_mask_base[val_offset / cv->bytes] ) {
|
|
33327
33327
|
if ( ! op_mask ) { ca_create_mask(co); op_mask = (boolean8_t *) co->mask->ptr; }
|
|
33328
33328
|
op_mask[flat] = 1;
|
|
33329
|
-
op[flat] = (
|
|
33329
|
+
op[flat] = (ca_u_float64_t) 0; /* undetermined query; the mask bit is what counts */
|
|
33330
33330
|
} else {
|
|
33331
33331
|
{
|
|
33332
33332
|
result = NAN;
|
|
33333
33333
|
if ( slab_n <= 1 ) {
|
|
33334
33334
|
/* A one-point axis has no segment: only the point itself is in
|
|
33335
33335
|
* range, at 0. An empty one has nothing in range. */
|
|
33336
|
-
if ( slab_n == 1 && query_val == *(
|
|
33336
|
+
if ( slab_n == 1 && query_val == *(ca_u_float64_t *)slab_ptr ) {
|
|
33337
33337
|
result = 0.0;
|
|
33338
33338
|
}
|
|
33339
33339
|
}
|
|
@@ -33341,15 +33341,15 @@ linear_section_linear_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axi
|
|
|
33341
33341
|
ca_size_t x1 = 0;
|
|
33342
33342
|
int found = 0;
|
|
33343
33343
|
for ( ca_size_t k = 0; k < slab_n - 1; k++ ) {
|
|
33344
|
-
double yk = *(
|
|
33345
|
-
double yk1 = *(
|
|
33344
|
+
double yk = *(ca_u_float64_t *)(slab_ptr + k * slab_stride);
|
|
33345
|
+
double yk1 = *(ca_u_float64_t *)(slab_ptr + (k + 1) * slab_stride);
|
|
33346
33346
|
if ( (query_val - yk) * (query_val - yk1) <= 0 ) {
|
|
33347
33347
|
x1 = k; found = 1; break;
|
|
33348
33348
|
}
|
|
33349
33349
|
}
|
|
33350
33350
|
if ( found ) {
|
|
33351
|
-
double y1 = *(
|
|
33352
|
-
double y2 = *(
|
|
33351
|
+
double y1 = *(ca_u_float64_t *)(slab_ptr + x1 * slab_stride);
|
|
33352
|
+
double y2 = *(ca_u_float64_t *)(slab_ptr + (x1 + 1) * slab_stride);
|
|
33353
33353
|
result = (query_val - y1) / (y2 - y1) + (double) x1;
|
|
33354
33354
|
}
|
|
33355
33355
|
|
|
@@ -33451,23 +33451,23 @@ linear_fetch_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
33451
33451
|
VALUE voutu = rb_ca_new_reduced(self, undef_axes, 1, CA_FLOAT64, 0);
|
|
33452
33452
|
CArray *cou;
|
|
33453
33453
|
GetCArray(voutu, cou);
|
|
33454
|
-
MEMZERO((
|
|
33454
|
+
MEMZERO((ca_u_float64_t *) cou->ptr, ca_u_float64_t, cou->elements);
|
|
33455
33455
|
ca_create_mask(cou);
|
|
33456
33456
|
memset(cou->mask->ptr, 1, (size_t) cou->elements);
|
|
33457
33457
|
if ( ca->ndim == 1 ) { return Qnil; }
|
|
33458
33458
|
return voutu;
|
|
33459
33459
|
}
|
|
33460
|
-
|
|
33460
|
+
ca_u_float64_t query_val_buf;
|
|
33461
33461
|
rb_ca_obj2ptr(self, rval, &query_val_buf);
|
|
33462
|
-
|
|
33462
|
+
ca_u_float64_t query_val = query_val_buf;
|
|
33463
33463
|
double query_eps = 0.0; (void) query_eps; /* unused in this kernel */
|
|
33464
33464
|
|
|
33465
33465
|
int8_t slab_axes[1] = { (int8_t) axis };
|
|
33466
33466
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, 1, CA_FLOAT64, 0);
|
|
33467
33467
|
CArray *co;
|
|
33468
33468
|
GetCArray(vout, co);
|
|
33469
|
-
|
|
33470
|
-
|
|
33469
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
33470
|
+
|
|
33471
33471
|
|
|
33472
33472
|
ca_iter_state st;
|
|
33473
33473
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
@@ -33487,15 +33487,15 @@ linear_fetch_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
33487
33487
|
ca_size_t slab_mask_stride = st.slab_mask_strides[0];
|
|
33488
33488
|
(void) mask_in;
|
|
33489
33489
|
(void) slab_mask_stride; /* mask_self: :raise rejects upstream */
|
|
33490
|
-
|
|
33490
|
+
ca_u_float64_t result;
|
|
33491
33491
|
{
|
|
33492
33492
|
result = NAN;
|
|
33493
33493
|
if ( slab_n >= 1 && query_val >= 0.0 && query_val <= (double)(slab_n - 1) ) {
|
|
33494
33494
|
ca_size_t il = (ca_size_t) floor(query_val);
|
|
33495
33495
|
ca_size_t iu = (ca_size_t) ceil(query_val);
|
|
33496
33496
|
double w = query_val - floor(query_val);
|
|
33497
|
-
double yl = *(
|
|
33498
|
-
double yu = *(
|
|
33497
|
+
double yl = *(ca_u_float64_t *)(slab_ptr + il * slab_stride);
|
|
33498
|
+
double yu = *(ca_u_float64_t *)(slab_ptr + iu * slab_stride);
|
|
33499
33499
|
result = yu * w + yl * (1.0 - w);
|
|
33500
33500
|
}
|
|
33501
33501
|
}
|
|
@@ -33636,7 +33636,7 @@ linear_fetch_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
33636
33636
|
VALUE vout = rb_carray_new(CA_FLOAT64, out_ndim, out_dim, 0, NULL);
|
|
33637
33637
|
CArray *co;
|
|
33638
33638
|
GetCArray(vout, co);
|
|
33639
|
-
|
|
33639
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
33640
33640
|
boolean8_t *op_mask = NULL; /* lazily allocated on the first masked output cell */
|
|
33641
33641
|
|
|
33642
33642
|
|
|
@@ -33725,16 +33725,16 @@ linear_fetch_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
33725
33725
|
val_offset += out_idx[k] * val_strides[k];
|
|
33726
33726
|
}
|
|
33727
33727
|
char *slab_ptr = ca->ptr + self_slab_offset;
|
|
33728
|
-
|
|
33728
|
+
ca_u_float64_t query_val = *(ca_u_float64_t *)(cv->ptr + val_offset);
|
|
33729
33729
|
boolean8_t *mask_in = ca_mask_base ? (ca_mask_base + self_slab_offset / ca->bytes) : NULL;
|
|
33730
33730
|
double query_eps = 0.0; (void) query_eps;
|
|
33731
33731
|
(void) mask_in;
|
|
33732
33732
|
(void) slab_mask_stride; /* mask_self: :raise rejects upstream */
|
|
33733
|
-
|
|
33733
|
+
ca_u_float64_t result;
|
|
33734
33734
|
if ( cv_mask_base && cv_mask_base[val_offset / cv->bytes] ) {
|
|
33735
33735
|
if ( ! op_mask ) { ca_create_mask(co); op_mask = (boolean8_t *) co->mask->ptr; }
|
|
33736
33736
|
op_mask[flat] = 1;
|
|
33737
|
-
op[flat] = (
|
|
33737
|
+
op[flat] = (ca_u_float64_t) 0; /* undetermined query; the mask bit is what counts */
|
|
33738
33738
|
} else {
|
|
33739
33739
|
{
|
|
33740
33740
|
result = NAN;
|
|
@@ -33742,8 +33742,8 @@ linear_fetch_ki_native_f64 (VALUE self, CArray *ca, VALUE rval, int axis)
|
|
|
33742
33742
|
ca_size_t il = (ca_size_t) floor(query_val);
|
|
33743
33743
|
ca_size_t iu = (ca_size_t) ceil(query_val);
|
|
33744
33744
|
double w = query_val - floor(query_val);
|
|
33745
|
-
double yl = *(
|
|
33746
|
-
double yu = *(
|
|
33745
|
+
double yl = *(ca_u_float64_t *)(slab_ptr + il * slab_stride);
|
|
33746
|
+
double yu = *(ca_u_float64_t *)(slab_ptr + iu * slab_stride);
|
|
33747
33747
|
result = yu * w + yl * (1.0 - w);
|
|
33748
33748
|
}
|
|
33749
33749
|
}
|