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
|
@@ -53,7 +53,7 @@ variancep_ki_native_i8 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
53
53
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
54
54
|
CArray *co;
|
|
55
55
|
GetCArray(vout, co);
|
|
56
|
-
|
|
56
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
57
57
|
ca_iter_state st;
|
|
58
58
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
59
59
|
slab_axes, naxes, 0);
|
|
@@ -78,14 +78,14 @@ variancep_ki_native_i8 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
78
78
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
79
79
|
}
|
|
80
80
|
op_mask[out_i] = 1;
|
|
81
|
-
op[out_i++] = (
|
|
81
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
82
82
|
} else {
|
|
83
83
|
double mean = sum / (double) n_valid;
|
|
84
84
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
85
85
|
double M2 = 0.0;
|
|
86
86
|
ca_size_t __unused_mc = 0;
|
|
87
87
|
CA_SLAB_REDUCE_SUM8_EX(int8_t, double, st, p, m, M2, 0.0, __variancep_i8_P2EXPR, __unused_mc);
|
|
88
|
-
op[out_i++] = (
|
|
88
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid));
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
ca_iter_state_finish(&st);
|
|
@@ -110,7 +110,7 @@ variancep_ki_native_u8 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
110
110
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
111
111
|
CArray *co;
|
|
112
112
|
GetCArray(vout, co);
|
|
113
|
-
|
|
113
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
114
114
|
ca_iter_state st;
|
|
115
115
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
116
116
|
slab_axes, naxes, 0);
|
|
@@ -135,14 +135,14 @@ variancep_ki_native_u8 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
135
135
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
136
136
|
}
|
|
137
137
|
op_mask[out_i] = 1;
|
|
138
|
-
op[out_i++] = (
|
|
138
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
139
139
|
} else {
|
|
140
140
|
double mean = sum / (double) n_valid;
|
|
141
141
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
142
142
|
double M2 = 0.0;
|
|
143
143
|
ca_size_t __unused_mc = 0;
|
|
144
144
|
CA_SLAB_REDUCE_SUM8_EX(uint8_t, double, st, p, m, M2, 0.0, __variancep_u8_P2EXPR, __unused_mc);
|
|
145
|
-
op[out_i++] = (
|
|
145
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid));
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
148
|
ca_iter_state_finish(&st);
|
|
@@ -167,7 +167,7 @@ variancep_ki_native_i16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
167
167
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
168
168
|
CArray *co;
|
|
169
169
|
GetCArray(vout, co);
|
|
170
|
-
|
|
170
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
171
171
|
ca_iter_state st;
|
|
172
172
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
173
173
|
slab_axes, naxes, 0);
|
|
@@ -183,7 +183,7 @@ variancep_ki_native_i16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
183
183
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
184
184
|
double sum = 0.0;
|
|
185
185
|
ca_size_t masked_cnt = 0;
|
|
186
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
186
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int16_t, double, st, p, m, sum, 0.0, __variancep_i16_P1EXPR, masked_cnt);
|
|
187
187
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
188
188
|
int __trigger = ca_too_few_present(n_valid, min_count, 1);
|
|
189
189
|
if ( __trigger ) {
|
|
@@ -192,14 +192,14 @@ variancep_ki_native_i16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
192
192
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
193
193
|
}
|
|
194
194
|
op_mask[out_i] = 1;
|
|
195
|
-
op[out_i++] = (
|
|
195
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
196
196
|
} else {
|
|
197
197
|
double mean = sum / (double) n_valid;
|
|
198
198
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
199
199
|
double M2 = 0.0;
|
|
200
200
|
ca_size_t __unused_mc = 0;
|
|
201
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
202
|
-
op[out_i++] = (
|
|
201
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int16_t, double, st, p, m, M2, 0.0, __variancep_i16_P2EXPR, __unused_mc);
|
|
202
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid));
|
|
203
203
|
}
|
|
204
204
|
}
|
|
205
205
|
ca_iter_state_finish(&st);
|
|
@@ -224,7 +224,7 @@ variancep_ki_native_u16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
224
224
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
225
225
|
CArray *co;
|
|
226
226
|
GetCArray(vout, co);
|
|
227
|
-
|
|
227
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
228
228
|
ca_iter_state st;
|
|
229
229
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
230
230
|
slab_axes, naxes, 0);
|
|
@@ -240,7 +240,7 @@ variancep_ki_native_u16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
240
240
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
241
241
|
double sum = 0.0;
|
|
242
242
|
ca_size_t masked_cnt = 0;
|
|
243
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
243
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint16_t, double, st, p, m, sum, 0.0, __variancep_u16_P1EXPR, masked_cnt);
|
|
244
244
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
245
245
|
int __trigger = ca_too_few_present(n_valid, min_count, 1);
|
|
246
246
|
if ( __trigger ) {
|
|
@@ -249,14 +249,14 @@ variancep_ki_native_u16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
249
249
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
250
250
|
}
|
|
251
251
|
op_mask[out_i] = 1;
|
|
252
|
-
op[out_i++] = (
|
|
252
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
253
253
|
} else {
|
|
254
254
|
double mean = sum / (double) n_valid;
|
|
255
255
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
256
256
|
double M2 = 0.0;
|
|
257
257
|
ca_size_t __unused_mc = 0;
|
|
258
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
259
|
-
op[out_i++] = (
|
|
258
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint16_t, double, st, p, m, M2, 0.0, __variancep_u16_P2EXPR, __unused_mc);
|
|
259
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid));
|
|
260
260
|
}
|
|
261
261
|
}
|
|
262
262
|
ca_iter_state_finish(&st);
|
|
@@ -281,7 +281,7 @@ variancep_ki_native_i32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
281
281
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
282
282
|
CArray *co;
|
|
283
283
|
GetCArray(vout, co);
|
|
284
|
-
|
|
284
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
285
285
|
ca_iter_state st;
|
|
286
286
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
287
287
|
slab_axes, naxes, 0);
|
|
@@ -297,7 +297,7 @@ variancep_ki_native_i32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
297
297
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
298
298
|
double sum = 0.0;
|
|
299
299
|
ca_size_t masked_cnt = 0;
|
|
300
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
300
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int32_t, double, st, p, m, sum, 0.0, __variancep_i32_P1EXPR, masked_cnt);
|
|
301
301
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
302
302
|
int __trigger = ca_too_few_present(n_valid, min_count, 1);
|
|
303
303
|
if ( __trigger ) {
|
|
@@ -306,14 +306,14 @@ variancep_ki_native_i32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
306
306
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
307
307
|
}
|
|
308
308
|
op_mask[out_i] = 1;
|
|
309
|
-
op[out_i++] = (
|
|
309
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
310
310
|
} else {
|
|
311
311
|
double mean = sum / (double) n_valid;
|
|
312
312
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
313
313
|
double M2 = 0.0;
|
|
314
314
|
ca_size_t __unused_mc = 0;
|
|
315
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
316
|
-
op[out_i++] = (
|
|
315
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int32_t, double, st, p, m, M2, 0.0, __variancep_i32_P2EXPR, __unused_mc);
|
|
316
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid));
|
|
317
317
|
}
|
|
318
318
|
}
|
|
319
319
|
ca_iter_state_finish(&st);
|
|
@@ -338,7 +338,7 @@ variancep_ki_native_u32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
338
338
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
339
339
|
CArray *co;
|
|
340
340
|
GetCArray(vout, co);
|
|
341
|
-
|
|
341
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
342
342
|
ca_iter_state st;
|
|
343
343
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
344
344
|
slab_axes, naxes, 0);
|
|
@@ -354,7 +354,7 @@ variancep_ki_native_u32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
354
354
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
355
355
|
double sum = 0.0;
|
|
356
356
|
ca_size_t masked_cnt = 0;
|
|
357
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
357
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint32_t, double, st, p, m, sum, 0.0, __variancep_u32_P1EXPR, masked_cnt);
|
|
358
358
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
359
359
|
int __trigger = ca_too_few_present(n_valid, min_count, 1);
|
|
360
360
|
if ( __trigger ) {
|
|
@@ -363,14 +363,14 @@ variancep_ki_native_u32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
363
363
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
364
364
|
}
|
|
365
365
|
op_mask[out_i] = 1;
|
|
366
|
-
op[out_i++] = (
|
|
366
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
367
367
|
} else {
|
|
368
368
|
double mean = sum / (double) n_valid;
|
|
369
369
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
370
370
|
double M2 = 0.0;
|
|
371
371
|
ca_size_t __unused_mc = 0;
|
|
372
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
373
|
-
op[out_i++] = (
|
|
372
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint32_t, double, st, p, m, M2, 0.0, __variancep_u32_P2EXPR, __unused_mc);
|
|
373
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid));
|
|
374
374
|
}
|
|
375
375
|
}
|
|
376
376
|
ca_iter_state_finish(&st);
|
|
@@ -395,7 +395,7 @@ variancep_ki_native_i64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
395
395
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
396
396
|
CArray *co;
|
|
397
397
|
GetCArray(vout, co);
|
|
398
|
-
|
|
398
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
399
399
|
ca_iter_state st;
|
|
400
400
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
401
401
|
slab_axes, naxes, 0);
|
|
@@ -411,7 +411,7 @@ variancep_ki_native_i64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
411
411
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
412
412
|
double sum = 0.0;
|
|
413
413
|
ca_size_t masked_cnt = 0;
|
|
414
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
414
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int64_t, double, st, p, m, sum, 0.0, __variancep_i64_P1EXPR, masked_cnt);
|
|
415
415
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
416
416
|
int __trigger = ca_too_few_present(n_valid, min_count, 1);
|
|
417
417
|
if ( __trigger ) {
|
|
@@ -420,14 +420,14 @@ variancep_ki_native_i64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
420
420
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
421
421
|
}
|
|
422
422
|
op_mask[out_i] = 1;
|
|
423
|
-
op[out_i++] = (
|
|
423
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
424
424
|
} else {
|
|
425
425
|
double mean = sum / (double) n_valid;
|
|
426
426
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
427
427
|
double M2 = 0.0;
|
|
428
428
|
ca_size_t __unused_mc = 0;
|
|
429
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
430
|
-
op[out_i++] = (
|
|
429
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int64_t, double, st, p, m, M2, 0.0, __variancep_i64_P2EXPR, __unused_mc);
|
|
430
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid));
|
|
431
431
|
}
|
|
432
432
|
}
|
|
433
433
|
ca_iter_state_finish(&st);
|
|
@@ -452,7 +452,7 @@ variancep_ki_native_u64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
452
452
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
453
453
|
CArray *co;
|
|
454
454
|
GetCArray(vout, co);
|
|
455
|
-
|
|
455
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
456
456
|
ca_iter_state st;
|
|
457
457
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
458
458
|
slab_axes, naxes, 0);
|
|
@@ -468,7 +468,7 @@ variancep_ki_native_u64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
468
468
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
469
469
|
double sum = 0.0;
|
|
470
470
|
ca_size_t masked_cnt = 0;
|
|
471
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
471
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint64_t, double, st, p, m, sum, 0.0, __variancep_u64_P1EXPR, masked_cnt);
|
|
472
472
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
473
473
|
int __trigger = ca_too_few_present(n_valid, min_count, 1);
|
|
474
474
|
if ( __trigger ) {
|
|
@@ -477,14 +477,14 @@ variancep_ki_native_u64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
477
477
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
478
478
|
}
|
|
479
479
|
op_mask[out_i] = 1;
|
|
480
|
-
op[out_i++] = (
|
|
480
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
481
481
|
} else {
|
|
482
482
|
double mean = sum / (double) n_valid;
|
|
483
483
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
484
484
|
double M2 = 0.0;
|
|
485
485
|
ca_size_t __unused_mc = 0;
|
|
486
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
487
|
-
op[out_i++] = (
|
|
486
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint64_t, double, st, p, m, M2, 0.0, __variancep_u64_P2EXPR, __unused_mc);
|
|
487
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid));
|
|
488
488
|
}
|
|
489
489
|
}
|
|
490
490
|
ca_iter_state_finish(&st);
|
|
@@ -509,7 +509,7 @@ variancep_ki_native_f32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
509
509
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
510
510
|
CArray *co;
|
|
511
511
|
GetCArray(vout, co);
|
|
512
|
-
|
|
512
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
513
513
|
ca_iter_state st;
|
|
514
514
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
515
515
|
slab_axes, naxes, 0);
|
|
@@ -525,7 +525,7 @@ variancep_ki_native_f32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
525
525
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
526
526
|
double sum = 0.0;
|
|
527
527
|
ca_size_t masked_cnt = 0;
|
|
528
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
528
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_float32_t, double, st, p, m, sum, 0.0, __variancep_f32_P1EXPR, masked_cnt);
|
|
529
529
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
530
530
|
int __trigger = ca_too_few_present(n_valid, min_count, 1);
|
|
531
531
|
if ( __trigger ) {
|
|
@@ -534,14 +534,14 @@ variancep_ki_native_f32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
534
534
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
535
535
|
}
|
|
536
536
|
op_mask[out_i] = 1;
|
|
537
|
-
op[out_i++] = (
|
|
537
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
538
538
|
} else {
|
|
539
539
|
double mean = sum / (double) n_valid;
|
|
540
540
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
541
541
|
double M2 = 0.0;
|
|
542
542
|
ca_size_t __unused_mc = 0;
|
|
543
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
544
|
-
op[out_i++] = (
|
|
543
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_float32_t, double, st, p, m, M2, 0.0, __variancep_f32_P2EXPR, __unused_mc);
|
|
544
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid));
|
|
545
545
|
}
|
|
546
546
|
}
|
|
547
547
|
ca_iter_state_finish(&st);
|
|
@@ -566,7 +566,7 @@ variancep_ki_native_f64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
566
566
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
567
567
|
CArray *co;
|
|
568
568
|
GetCArray(vout, co);
|
|
569
|
-
|
|
569
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
570
570
|
ca_iter_state st;
|
|
571
571
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
572
572
|
slab_axes, naxes, 0);
|
|
@@ -582,7 +582,7 @@ variancep_ki_native_f64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
582
582
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
583
583
|
double sum = 0.0;
|
|
584
584
|
ca_size_t masked_cnt = 0;
|
|
585
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
585
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_float64_t, double, st, p, m, sum, 0.0, __variancep_f64_P1EXPR, masked_cnt);
|
|
586
586
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
587
587
|
int __trigger = ca_too_few_present(n_valid, min_count, 1);
|
|
588
588
|
if ( __trigger ) {
|
|
@@ -591,14 +591,14 @@ variancep_ki_native_f64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
591
591
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
592
592
|
}
|
|
593
593
|
op_mask[out_i] = 1;
|
|
594
|
-
op[out_i++] = (
|
|
594
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
595
595
|
} else {
|
|
596
596
|
double mean = sum / (double) n_valid;
|
|
597
597
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
598
598
|
double M2 = 0.0;
|
|
599
599
|
ca_size_t __unused_mc = 0;
|
|
600
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
601
|
-
op[out_i++] = (
|
|
600
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_float64_t, double, st, p, m, M2, 0.0, __variancep_f64_P2EXPR, __unused_mc);
|
|
601
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid));
|
|
602
602
|
}
|
|
603
603
|
}
|
|
604
604
|
ca_iter_state_finish(&st);
|
|
@@ -623,7 +623,7 @@ variancep_ki_native_cmplx64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t n
|
|
|
623
623
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
624
624
|
CArray *co;
|
|
625
625
|
GetCArray(vout, co);
|
|
626
|
-
|
|
626
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
627
627
|
ca_iter_state st;
|
|
628
628
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
629
629
|
slab_axes, naxes, 0);
|
|
@@ -637,9 +637,9 @@ variancep_ki_native_cmplx64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t n
|
|
|
637
637
|
boolean8_t *op_mask = NULL; /* lazily allocated on first UNDEF */
|
|
638
638
|
while ( ca_iter_state_next_slab_axes(&st, &p, &m) ) {
|
|
639
639
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
640
|
-
|
|
640
|
+
ca_u_cmplx64_t sum = 0;
|
|
641
641
|
ca_size_t masked_cnt = 0;
|
|
642
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
642
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_cmplx64_t, ca_u_cmplx64_t, st, p, m, sum, 0, __variancep_cmplx64_P1EXPR, masked_cnt);
|
|
643
643
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
644
644
|
int __trigger = ca_too_few_present(n_valid, min_count, 1);
|
|
645
645
|
if ( __trigger ) {
|
|
@@ -648,14 +648,14 @@ variancep_ki_native_cmplx64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t n
|
|
|
648
648
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
649
649
|
}
|
|
650
650
|
op_mask[out_i] = 1;
|
|
651
|
-
op[out_i++] = (
|
|
651
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
652
652
|
} else {
|
|
653
|
-
|
|
653
|
+
ca_u_cmplx64_t mean = sum / (ca_u_cmplx64_t)(double) n_valid;
|
|
654
654
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
655
655
|
double M2 = 0.0;
|
|
656
656
|
ca_size_t __unused_mc = 0;
|
|
657
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
658
|
-
op[out_i++] = (
|
|
657
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_cmplx64_t, double, st, p, m, M2, 0.0, __variancep_cmplx64_P2EXPR, __unused_mc);
|
|
658
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid));
|
|
659
659
|
}
|
|
660
660
|
}
|
|
661
661
|
ca_iter_state_finish(&st);
|
|
@@ -680,7 +680,7 @@ variancep_ki_native_cmplx128 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t
|
|
|
680
680
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
681
681
|
CArray *co;
|
|
682
682
|
GetCArray(vout, co);
|
|
683
|
-
|
|
683
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
684
684
|
ca_iter_state st;
|
|
685
685
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
686
686
|
slab_axes, naxes, 0);
|
|
@@ -694,9 +694,9 @@ variancep_ki_native_cmplx128 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t
|
|
|
694
694
|
boolean8_t *op_mask = NULL; /* lazily allocated on first UNDEF */
|
|
695
695
|
while ( ca_iter_state_next_slab_axes(&st, &p, &m) ) {
|
|
696
696
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
697
|
-
|
|
697
|
+
ca_u_cmplx128_t sum = 0;
|
|
698
698
|
ca_size_t masked_cnt = 0;
|
|
699
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
699
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_cmplx128_t, ca_u_cmplx128_t, st, p, m, sum, 0, __variancep_cmplx128_P1EXPR, masked_cnt);
|
|
700
700
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
701
701
|
int __trigger = ca_too_few_present(n_valid, min_count, 1);
|
|
702
702
|
if ( __trigger ) {
|
|
@@ -705,14 +705,14 @@ variancep_ki_native_cmplx128 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t
|
|
|
705
705
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
706
706
|
}
|
|
707
707
|
op_mask[out_i] = 1;
|
|
708
|
-
op[out_i++] = (
|
|
708
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
709
709
|
} else {
|
|
710
|
-
|
|
710
|
+
ca_u_cmplx128_t mean = sum / (ca_u_cmplx128_t)(double) n_valid;
|
|
711
711
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
712
712
|
double M2 = 0.0;
|
|
713
713
|
ca_size_t __unused_mc = 0;
|
|
714
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
715
|
-
op[out_i++] = (
|
|
714
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_cmplx128_t, double, st, p, m, M2, 0.0, __variancep_cmplx128_P2EXPR, __unused_mc);
|
|
715
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid));
|
|
716
716
|
}
|
|
717
717
|
}
|
|
718
718
|
ca_iter_state_finish(&st);
|
|
@@ -737,7 +737,7 @@ variancep_ki_native_bool (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxe
|
|
|
737
737
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
738
738
|
CArray *co;
|
|
739
739
|
GetCArray(vout, co);
|
|
740
|
-
|
|
740
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
741
741
|
ca_iter_state st;
|
|
742
742
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
743
743
|
slab_axes, naxes, 0);
|
|
@@ -762,14 +762,14 @@ variancep_ki_native_bool (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxe
|
|
|
762
762
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
763
763
|
}
|
|
764
764
|
op_mask[out_i] = 1;
|
|
765
|
-
op[out_i++] = (
|
|
765
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
766
766
|
} else {
|
|
767
767
|
double mean = sum / (double) n_valid;
|
|
768
768
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
769
769
|
double M2 = 0.0;
|
|
770
770
|
ca_size_t __unused_mc = 0;
|
|
771
771
|
CA_SLAB_REDUCE_SUM8_EX(boolean8_t, double, st, p, m, M2, 0.0, __variancep_bool_P2EXPR, __unused_mc);
|
|
772
|
-
op[out_i++] = (
|
|
772
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid));
|
|
773
773
|
}
|
|
774
774
|
}
|
|
775
775
|
ca_iter_state_finish(&st);
|
|
@@ -1001,7 +1001,7 @@ variance_ki_native_i8 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1001
1001
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
1002
1002
|
CArray *co;
|
|
1003
1003
|
GetCArray(vout, co);
|
|
1004
|
-
|
|
1004
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
1005
1005
|
ca_iter_state st;
|
|
1006
1006
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
1007
1007
|
slab_axes, naxes, 0);
|
|
@@ -1026,14 +1026,14 @@ variance_ki_native_i8 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1026
1026
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
1027
1027
|
}
|
|
1028
1028
|
op_mask[out_i] = 1;
|
|
1029
|
-
op[out_i++] = (
|
|
1029
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
1030
1030
|
} else {
|
|
1031
1031
|
double mean = sum / (double) n_valid;
|
|
1032
1032
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
1033
1033
|
double M2 = 0.0;
|
|
1034
1034
|
ca_size_t __unused_mc = 0;
|
|
1035
1035
|
CA_SLAB_REDUCE_SUM8_EX(int8_t, double, st, p, m, M2, 0.0, __variance_i8_P2EXPR, __unused_mc);
|
|
1036
|
-
op[out_i++] = (
|
|
1036
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid - 1));
|
|
1037
1037
|
}
|
|
1038
1038
|
}
|
|
1039
1039
|
ca_iter_state_finish(&st);
|
|
@@ -1058,7 +1058,7 @@ variance_ki_native_u8 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1058
1058
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
1059
1059
|
CArray *co;
|
|
1060
1060
|
GetCArray(vout, co);
|
|
1061
|
-
|
|
1061
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
1062
1062
|
ca_iter_state st;
|
|
1063
1063
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
1064
1064
|
slab_axes, naxes, 0);
|
|
@@ -1083,14 +1083,14 @@ variance_ki_native_u8 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1083
1083
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
1084
1084
|
}
|
|
1085
1085
|
op_mask[out_i] = 1;
|
|
1086
|
-
op[out_i++] = (
|
|
1086
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
1087
1087
|
} else {
|
|
1088
1088
|
double mean = sum / (double) n_valid;
|
|
1089
1089
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
1090
1090
|
double M2 = 0.0;
|
|
1091
1091
|
ca_size_t __unused_mc = 0;
|
|
1092
1092
|
CA_SLAB_REDUCE_SUM8_EX(uint8_t, double, st, p, m, M2, 0.0, __variance_u8_P2EXPR, __unused_mc);
|
|
1093
|
-
op[out_i++] = (
|
|
1093
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid - 1));
|
|
1094
1094
|
}
|
|
1095
1095
|
}
|
|
1096
1096
|
ca_iter_state_finish(&st);
|
|
@@ -1115,7 +1115,7 @@ variance_ki_native_i16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1115
1115
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
1116
1116
|
CArray *co;
|
|
1117
1117
|
GetCArray(vout, co);
|
|
1118
|
-
|
|
1118
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
1119
1119
|
ca_iter_state st;
|
|
1120
1120
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
1121
1121
|
slab_axes, naxes, 0);
|
|
@@ -1131,7 +1131,7 @@ variance_ki_native_i16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1131
1131
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
1132
1132
|
double sum = 0.0;
|
|
1133
1133
|
ca_size_t masked_cnt = 0;
|
|
1134
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
1134
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int16_t, double, st, p, m, sum, 0.0, __variance_i16_P1EXPR, masked_cnt);
|
|
1135
1135
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
1136
1136
|
int __trigger = ca_too_few_present(n_valid, min_count, 2);
|
|
1137
1137
|
if ( __trigger ) {
|
|
@@ -1140,14 +1140,14 @@ variance_ki_native_i16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1140
1140
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
1141
1141
|
}
|
|
1142
1142
|
op_mask[out_i] = 1;
|
|
1143
|
-
op[out_i++] = (
|
|
1143
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
1144
1144
|
} else {
|
|
1145
1145
|
double mean = sum / (double) n_valid;
|
|
1146
1146
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
1147
1147
|
double M2 = 0.0;
|
|
1148
1148
|
ca_size_t __unused_mc = 0;
|
|
1149
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
1150
|
-
op[out_i++] = (
|
|
1149
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int16_t, double, st, p, m, M2, 0.0, __variance_i16_P2EXPR, __unused_mc);
|
|
1150
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid - 1));
|
|
1151
1151
|
}
|
|
1152
1152
|
}
|
|
1153
1153
|
ca_iter_state_finish(&st);
|
|
@@ -1172,7 +1172,7 @@ variance_ki_native_u16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1172
1172
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
1173
1173
|
CArray *co;
|
|
1174
1174
|
GetCArray(vout, co);
|
|
1175
|
-
|
|
1175
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
1176
1176
|
ca_iter_state st;
|
|
1177
1177
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
1178
1178
|
slab_axes, naxes, 0);
|
|
@@ -1188,7 +1188,7 @@ variance_ki_native_u16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1188
1188
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
1189
1189
|
double sum = 0.0;
|
|
1190
1190
|
ca_size_t masked_cnt = 0;
|
|
1191
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
1191
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint16_t, double, st, p, m, sum, 0.0, __variance_u16_P1EXPR, masked_cnt);
|
|
1192
1192
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
1193
1193
|
int __trigger = ca_too_few_present(n_valid, min_count, 2);
|
|
1194
1194
|
if ( __trigger ) {
|
|
@@ -1197,14 +1197,14 @@ variance_ki_native_u16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1197
1197
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
1198
1198
|
}
|
|
1199
1199
|
op_mask[out_i] = 1;
|
|
1200
|
-
op[out_i++] = (
|
|
1200
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
1201
1201
|
} else {
|
|
1202
1202
|
double mean = sum / (double) n_valid;
|
|
1203
1203
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
1204
1204
|
double M2 = 0.0;
|
|
1205
1205
|
ca_size_t __unused_mc = 0;
|
|
1206
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
1207
|
-
op[out_i++] = (
|
|
1206
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint16_t, double, st, p, m, M2, 0.0, __variance_u16_P2EXPR, __unused_mc);
|
|
1207
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid - 1));
|
|
1208
1208
|
}
|
|
1209
1209
|
}
|
|
1210
1210
|
ca_iter_state_finish(&st);
|
|
@@ -1229,7 +1229,7 @@ variance_ki_native_i32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1229
1229
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
1230
1230
|
CArray *co;
|
|
1231
1231
|
GetCArray(vout, co);
|
|
1232
|
-
|
|
1232
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
1233
1233
|
ca_iter_state st;
|
|
1234
1234
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
1235
1235
|
slab_axes, naxes, 0);
|
|
@@ -1245,7 +1245,7 @@ variance_ki_native_i32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1245
1245
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
1246
1246
|
double sum = 0.0;
|
|
1247
1247
|
ca_size_t masked_cnt = 0;
|
|
1248
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
1248
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int32_t, double, st, p, m, sum, 0.0, __variance_i32_P1EXPR, masked_cnt);
|
|
1249
1249
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
1250
1250
|
int __trigger = ca_too_few_present(n_valid, min_count, 2);
|
|
1251
1251
|
if ( __trigger ) {
|
|
@@ -1254,14 +1254,14 @@ variance_ki_native_i32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1254
1254
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
1255
1255
|
}
|
|
1256
1256
|
op_mask[out_i] = 1;
|
|
1257
|
-
op[out_i++] = (
|
|
1257
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
1258
1258
|
} else {
|
|
1259
1259
|
double mean = sum / (double) n_valid;
|
|
1260
1260
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
1261
1261
|
double M2 = 0.0;
|
|
1262
1262
|
ca_size_t __unused_mc = 0;
|
|
1263
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
1264
|
-
op[out_i++] = (
|
|
1263
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int32_t, double, st, p, m, M2, 0.0, __variance_i32_P2EXPR, __unused_mc);
|
|
1264
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid - 1));
|
|
1265
1265
|
}
|
|
1266
1266
|
}
|
|
1267
1267
|
ca_iter_state_finish(&st);
|
|
@@ -1286,7 +1286,7 @@ variance_ki_native_u32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1286
1286
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
1287
1287
|
CArray *co;
|
|
1288
1288
|
GetCArray(vout, co);
|
|
1289
|
-
|
|
1289
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
1290
1290
|
ca_iter_state st;
|
|
1291
1291
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
1292
1292
|
slab_axes, naxes, 0);
|
|
@@ -1302,7 +1302,7 @@ variance_ki_native_u32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1302
1302
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
1303
1303
|
double sum = 0.0;
|
|
1304
1304
|
ca_size_t masked_cnt = 0;
|
|
1305
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
1305
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint32_t, double, st, p, m, sum, 0.0, __variance_u32_P1EXPR, masked_cnt);
|
|
1306
1306
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
1307
1307
|
int __trigger = ca_too_few_present(n_valid, min_count, 2);
|
|
1308
1308
|
if ( __trigger ) {
|
|
@@ -1311,14 +1311,14 @@ variance_ki_native_u32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1311
1311
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
1312
1312
|
}
|
|
1313
1313
|
op_mask[out_i] = 1;
|
|
1314
|
-
op[out_i++] = (
|
|
1314
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
1315
1315
|
} else {
|
|
1316
1316
|
double mean = sum / (double) n_valid;
|
|
1317
1317
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
1318
1318
|
double M2 = 0.0;
|
|
1319
1319
|
ca_size_t __unused_mc = 0;
|
|
1320
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
1321
|
-
op[out_i++] = (
|
|
1320
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint32_t, double, st, p, m, M2, 0.0, __variance_u32_P2EXPR, __unused_mc);
|
|
1321
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid - 1));
|
|
1322
1322
|
}
|
|
1323
1323
|
}
|
|
1324
1324
|
ca_iter_state_finish(&st);
|
|
@@ -1343,7 +1343,7 @@ variance_ki_native_i64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1343
1343
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
1344
1344
|
CArray *co;
|
|
1345
1345
|
GetCArray(vout, co);
|
|
1346
|
-
|
|
1346
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
1347
1347
|
ca_iter_state st;
|
|
1348
1348
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
1349
1349
|
slab_axes, naxes, 0);
|
|
@@ -1359,7 +1359,7 @@ variance_ki_native_i64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1359
1359
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
1360
1360
|
double sum = 0.0;
|
|
1361
1361
|
ca_size_t masked_cnt = 0;
|
|
1362
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
1362
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int64_t, double, st, p, m, sum, 0.0, __variance_i64_P1EXPR, masked_cnt);
|
|
1363
1363
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
1364
1364
|
int __trigger = ca_too_few_present(n_valid, min_count, 2);
|
|
1365
1365
|
if ( __trigger ) {
|
|
@@ -1368,14 +1368,14 @@ variance_ki_native_i64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1368
1368
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
1369
1369
|
}
|
|
1370
1370
|
op_mask[out_i] = 1;
|
|
1371
|
-
op[out_i++] = (
|
|
1371
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
1372
1372
|
} else {
|
|
1373
1373
|
double mean = sum / (double) n_valid;
|
|
1374
1374
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
1375
1375
|
double M2 = 0.0;
|
|
1376
1376
|
ca_size_t __unused_mc = 0;
|
|
1377
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
1378
|
-
op[out_i++] = (
|
|
1377
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int64_t, double, st, p, m, M2, 0.0, __variance_i64_P2EXPR, __unused_mc);
|
|
1378
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid - 1));
|
|
1379
1379
|
}
|
|
1380
1380
|
}
|
|
1381
1381
|
ca_iter_state_finish(&st);
|
|
@@ -1400,7 +1400,7 @@ variance_ki_native_u64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1400
1400
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
1401
1401
|
CArray *co;
|
|
1402
1402
|
GetCArray(vout, co);
|
|
1403
|
-
|
|
1403
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
1404
1404
|
ca_iter_state st;
|
|
1405
1405
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
1406
1406
|
slab_axes, naxes, 0);
|
|
@@ -1416,7 +1416,7 @@ variance_ki_native_u64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1416
1416
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
1417
1417
|
double sum = 0.0;
|
|
1418
1418
|
ca_size_t masked_cnt = 0;
|
|
1419
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
1419
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint64_t, double, st, p, m, sum, 0.0, __variance_u64_P1EXPR, masked_cnt);
|
|
1420
1420
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
1421
1421
|
int __trigger = ca_too_few_present(n_valid, min_count, 2);
|
|
1422
1422
|
if ( __trigger ) {
|
|
@@ -1425,14 +1425,14 @@ variance_ki_native_u64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1425
1425
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
1426
1426
|
}
|
|
1427
1427
|
op_mask[out_i] = 1;
|
|
1428
|
-
op[out_i++] = (
|
|
1428
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
1429
1429
|
} else {
|
|
1430
1430
|
double mean = sum / (double) n_valid;
|
|
1431
1431
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
1432
1432
|
double M2 = 0.0;
|
|
1433
1433
|
ca_size_t __unused_mc = 0;
|
|
1434
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
1435
|
-
op[out_i++] = (
|
|
1434
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint64_t, double, st, p, m, M2, 0.0, __variance_u64_P2EXPR, __unused_mc);
|
|
1435
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid - 1));
|
|
1436
1436
|
}
|
|
1437
1437
|
}
|
|
1438
1438
|
ca_iter_state_finish(&st);
|
|
@@ -1457,7 +1457,7 @@ variance_ki_native_f32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1457
1457
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
1458
1458
|
CArray *co;
|
|
1459
1459
|
GetCArray(vout, co);
|
|
1460
|
-
|
|
1460
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
1461
1461
|
ca_iter_state st;
|
|
1462
1462
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
1463
1463
|
slab_axes, naxes, 0);
|
|
@@ -1473,7 +1473,7 @@ variance_ki_native_f32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1473
1473
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
1474
1474
|
double sum = 0.0;
|
|
1475
1475
|
ca_size_t masked_cnt = 0;
|
|
1476
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
1476
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_float32_t, double, st, p, m, sum, 0.0, __variance_f32_P1EXPR, masked_cnt);
|
|
1477
1477
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
1478
1478
|
int __trigger = ca_too_few_present(n_valid, min_count, 2);
|
|
1479
1479
|
if ( __trigger ) {
|
|
@@ -1482,14 +1482,14 @@ variance_ki_native_f32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1482
1482
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
1483
1483
|
}
|
|
1484
1484
|
op_mask[out_i] = 1;
|
|
1485
|
-
op[out_i++] = (
|
|
1485
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
1486
1486
|
} else {
|
|
1487
1487
|
double mean = sum / (double) n_valid;
|
|
1488
1488
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
1489
1489
|
double M2 = 0.0;
|
|
1490
1490
|
ca_size_t __unused_mc = 0;
|
|
1491
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
1492
|
-
op[out_i++] = (
|
|
1491
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_float32_t, double, st, p, m, M2, 0.0, __variance_f32_P2EXPR, __unused_mc);
|
|
1492
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid - 1));
|
|
1493
1493
|
}
|
|
1494
1494
|
}
|
|
1495
1495
|
ca_iter_state_finish(&st);
|
|
@@ -1514,7 +1514,7 @@ variance_ki_native_f64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1514
1514
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
1515
1515
|
CArray *co;
|
|
1516
1516
|
GetCArray(vout, co);
|
|
1517
|
-
|
|
1517
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
1518
1518
|
ca_iter_state st;
|
|
1519
1519
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
1520
1520
|
slab_axes, naxes, 0);
|
|
@@ -1530,7 +1530,7 @@ variance_ki_native_f64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1530
1530
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
1531
1531
|
double sum = 0.0;
|
|
1532
1532
|
ca_size_t masked_cnt = 0;
|
|
1533
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
1533
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_float64_t, double, st, p, m, sum, 0.0, __variance_f64_P1EXPR, masked_cnt);
|
|
1534
1534
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
1535
1535
|
int __trigger = ca_too_few_present(n_valid, min_count, 2);
|
|
1536
1536
|
if ( __trigger ) {
|
|
@@ -1539,14 +1539,14 @@ variance_ki_native_f64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
1539
1539
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
1540
1540
|
}
|
|
1541
1541
|
op_mask[out_i] = 1;
|
|
1542
|
-
op[out_i++] = (
|
|
1542
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
1543
1543
|
} else {
|
|
1544
1544
|
double mean = sum / (double) n_valid;
|
|
1545
1545
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
1546
1546
|
double M2 = 0.0;
|
|
1547
1547
|
ca_size_t __unused_mc = 0;
|
|
1548
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
1549
|
-
op[out_i++] = (
|
|
1548
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_float64_t, double, st, p, m, M2, 0.0, __variance_f64_P2EXPR, __unused_mc);
|
|
1549
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid - 1));
|
|
1550
1550
|
}
|
|
1551
1551
|
}
|
|
1552
1552
|
ca_iter_state_finish(&st);
|
|
@@ -1571,7 +1571,7 @@ variance_ki_native_cmplx64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t na
|
|
|
1571
1571
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
1572
1572
|
CArray *co;
|
|
1573
1573
|
GetCArray(vout, co);
|
|
1574
|
-
|
|
1574
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
1575
1575
|
ca_iter_state st;
|
|
1576
1576
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
1577
1577
|
slab_axes, naxes, 0);
|
|
@@ -1585,9 +1585,9 @@ variance_ki_native_cmplx64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t na
|
|
|
1585
1585
|
boolean8_t *op_mask = NULL; /* lazily allocated on first UNDEF */
|
|
1586
1586
|
while ( ca_iter_state_next_slab_axes(&st, &p, &m) ) {
|
|
1587
1587
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
1588
|
-
|
|
1588
|
+
ca_u_cmplx64_t sum = 0;
|
|
1589
1589
|
ca_size_t masked_cnt = 0;
|
|
1590
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
1590
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_cmplx64_t, ca_u_cmplx64_t, st, p, m, sum, 0, __variance_cmplx64_P1EXPR, masked_cnt);
|
|
1591
1591
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
1592
1592
|
int __trigger = ca_too_few_present(n_valid, min_count, 2);
|
|
1593
1593
|
if ( __trigger ) {
|
|
@@ -1596,14 +1596,14 @@ variance_ki_native_cmplx64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t na
|
|
|
1596
1596
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
1597
1597
|
}
|
|
1598
1598
|
op_mask[out_i] = 1;
|
|
1599
|
-
op[out_i++] = (
|
|
1599
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
1600
1600
|
} else {
|
|
1601
|
-
|
|
1601
|
+
ca_u_cmplx64_t mean = sum / (ca_u_cmplx64_t)(double) n_valid;
|
|
1602
1602
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
1603
1603
|
double M2 = 0.0;
|
|
1604
1604
|
ca_size_t __unused_mc = 0;
|
|
1605
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
1606
|
-
op[out_i++] = (
|
|
1605
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_cmplx64_t, double, st, p, m, M2, 0.0, __variance_cmplx64_P2EXPR, __unused_mc);
|
|
1606
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid - 1));
|
|
1607
1607
|
}
|
|
1608
1608
|
}
|
|
1609
1609
|
ca_iter_state_finish(&st);
|
|
@@ -1628,7 +1628,7 @@ variance_ki_native_cmplx128 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t n
|
|
|
1628
1628
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
1629
1629
|
CArray *co;
|
|
1630
1630
|
GetCArray(vout, co);
|
|
1631
|
-
|
|
1631
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
1632
1632
|
ca_iter_state st;
|
|
1633
1633
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
1634
1634
|
slab_axes, naxes, 0);
|
|
@@ -1642,9 +1642,9 @@ variance_ki_native_cmplx128 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t n
|
|
|
1642
1642
|
boolean8_t *op_mask = NULL; /* lazily allocated on first UNDEF */
|
|
1643
1643
|
while ( ca_iter_state_next_slab_axes(&st, &p, &m) ) {
|
|
1644
1644
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
1645
|
-
|
|
1645
|
+
ca_u_cmplx128_t sum = 0;
|
|
1646
1646
|
ca_size_t masked_cnt = 0;
|
|
1647
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
1647
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_cmplx128_t, ca_u_cmplx128_t, st, p, m, sum, 0, __variance_cmplx128_P1EXPR, masked_cnt);
|
|
1648
1648
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
1649
1649
|
int __trigger = ca_too_few_present(n_valid, min_count, 2);
|
|
1650
1650
|
if ( __trigger ) {
|
|
@@ -1653,14 +1653,14 @@ variance_ki_native_cmplx128 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t n
|
|
|
1653
1653
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
1654
1654
|
}
|
|
1655
1655
|
op_mask[out_i] = 1;
|
|
1656
|
-
op[out_i++] = (
|
|
1656
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
1657
1657
|
} else {
|
|
1658
|
-
|
|
1658
|
+
ca_u_cmplx128_t mean = sum / (ca_u_cmplx128_t)(double) n_valid;
|
|
1659
1659
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
1660
1660
|
double M2 = 0.0;
|
|
1661
1661
|
ca_size_t __unused_mc = 0;
|
|
1662
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
1663
|
-
op[out_i++] = (
|
|
1662
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_cmplx128_t, double, st, p, m, M2, 0.0, __variance_cmplx128_P2EXPR, __unused_mc);
|
|
1663
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid - 1));
|
|
1664
1664
|
}
|
|
1665
1665
|
}
|
|
1666
1666
|
ca_iter_state_finish(&st);
|
|
@@ -1685,7 +1685,7 @@ variance_ki_native_bool (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
1685
1685
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
1686
1686
|
CArray *co;
|
|
1687
1687
|
GetCArray(vout, co);
|
|
1688
|
-
|
|
1688
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
1689
1689
|
ca_iter_state st;
|
|
1690
1690
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
1691
1691
|
slab_axes, naxes, 0);
|
|
@@ -1710,14 +1710,14 @@ variance_ki_native_bool (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes
|
|
|
1710
1710
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
1711
1711
|
}
|
|
1712
1712
|
op_mask[out_i] = 1;
|
|
1713
|
-
op[out_i++] = (
|
|
1713
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
1714
1714
|
} else {
|
|
1715
1715
|
double mean = sum / (double) n_valid;
|
|
1716
1716
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
1717
1717
|
double M2 = 0.0;
|
|
1718
1718
|
ca_size_t __unused_mc = 0;
|
|
1719
1719
|
CA_SLAB_REDUCE_SUM8_EX(boolean8_t, double, st, p, m, M2, 0.0, __variance_bool_P2EXPR, __unused_mc);
|
|
1720
|
-
op[out_i++] = (
|
|
1720
|
+
op[out_i++] = (ca_u_float64_t)(M2 / (double)(n_valid - 1));
|
|
1721
1721
|
}
|
|
1722
1722
|
}
|
|
1723
1723
|
ca_iter_state_finish(&st);
|
|
@@ -1949,7 +1949,7 @@ stddevp_ki_native_i8 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
1949
1949
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
1950
1950
|
CArray *co;
|
|
1951
1951
|
GetCArray(vout, co);
|
|
1952
|
-
|
|
1952
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
1953
1953
|
ca_iter_state st;
|
|
1954
1954
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
1955
1955
|
slab_axes, naxes, 0);
|
|
@@ -1974,14 +1974,14 @@ stddevp_ki_native_i8 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
1974
1974
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
1975
1975
|
}
|
|
1976
1976
|
op_mask[out_i] = 1;
|
|
1977
|
-
op[out_i++] = (
|
|
1977
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
1978
1978
|
} else {
|
|
1979
1979
|
double mean = sum / (double) n_valid;
|
|
1980
1980
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
1981
1981
|
double M2 = 0.0;
|
|
1982
1982
|
ca_size_t __unused_mc = 0;
|
|
1983
1983
|
CA_SLAB_REDUCE_SUM8_EX(int8_t, double, st, p, m, M2, 0.0, __stddevp_i8_P2EXPR, __unused_mc);
|
|
1984
|
-
op[out_i++] = (
|
|
1984
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid)));
|
|
1985
1985
|
}
|
|
1986
1986
|
}
|
|
1987
1987
|
ca_iter_state_finish(&st);
|
|
@@ -2006,7 +2006,7 @@ stddevp_ki_native_u8 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
2006
2006
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
2007
2007
|
CArray *co;
|
|
2008
2008
|
GetCArray(vout, co);
|
|
2009
|
-
|
|
2009
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
2010
2010
|
ca_iter_state st;
|
|
2011
2011
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
2012
2012
|
slab_axes, naxes, 0);
|
|
@@ -2031,14 +2031,14 @@ stddevp_ki_native_u8 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
2031
2031
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
2032
2032
|
}
|
|
2033
2033
|
op_mask[out_i] = 1;
|
|
2034
|
-
op[out_i++] = (
|
|
2034
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
2035
2035
|
} else {
|
|
2036
2036
|
double mean = sum / (double) n_valid;
|
|
2037
2037
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
2038
2038
|
double M2 = 0.0;
|
|
2039
2039
|
ca_size_t __unused_mc = 0;
|
|
2040
2040
|
CA_SLAB_REDUCE_SUM8_EX(uint8_t, double, st, p, m, M2, 0.0, __stddevp_u8_P2EXPR, __unused_mc);
|
|
2041
|
-
op[out_i++] = (
|
|
2041
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid)));
|
|
2042
2042
|
}
|
|
2043
2043
|
}
|
|
2044
2044
|
ca_iter_state_finish(&st);
|
|
@@ -2063,7 +2063,7 @@ stddevp_ki_native_i16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2063
2063
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
2064
2064
|
CArray *co;
|
|
2065
2065
|
GetCArray(vout, co);
|
|
2066
|
-
|
|
2066
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
2067
2067
|
ca_iter_state st;
|
|
2068
2068
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
2069
2069
|
slab_axes, naxes, 0);
|
|
@@ -2079,7 +2079,7 @@ stddevp_ki_native_i16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2079
2079
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
2080
2080
|
double sum = 0.0;
|
|
2081
2081
|
ca_size_t masked_cnt = 0;
|
|
2082
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
2082
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int16_t, double, st, p, m, sum, 0.0, __stddevp_i16_P1EXPR, masked_cnt);
|
|
2083
2083
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
2084
2084
|
int __trigger = ca_too_few_present(n_valid, min_count, 1);
|
|
2085
2085
|
if ( __trigger ) {
|
|
@@ -2088,14 +2088,14 @@ stddevp_ki_native_i16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2088
2088
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
2089
2089
|
}
|
|
2090
2090
|
op_mask[out_i] = 1;
|
|
2091
|
-
op[out_i++] = (
|
|
2091
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
2092
2092
|
} else {
|
|
2093
2093
|
double mean = sum / (double) n_valid;
|
|
2094
2094
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
2095
2095
|
double M2 = 0.0;
|
|
2096
2096
|
ca_size_t __unused_mc = 0;
|
|
2097
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
2098
|
-
op[out_i++] = (
|
|
2097
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int16_t, double, st, p, m, M2, 0.0, __stddevp_i16_P2EXPR, __unused_mc);
|
|
2098
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid)));
|
|
2099
2099
|
}
|
|
2100
2100
|
}
|
|
2101
2101
|
ca_iter_state_finish(&st);
|
|
@@ -2120,7 +2120,7 @@ stddevp_ki_native_u16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2120
2120
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
2121
2121
|
CArray *co;
|
|
2122
2122
|
GetCArray(vout, co);
|
|
2123
|
-
|
|
2123
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
2124
2124
|
ca_iter_state st;
|
|
2125
2125
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
2126
2126
|
slab_axes, naxes, 0);
|
|
@@ -2136,7 +2136,7 @@ stddevp_ki_native_u16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2136
2136
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
2137
2137
|
double sum = 0.0;
|
|
2138
2138
|
ca_size_t masked_cnt = 0;
|
|
2139
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
2139
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint16_t, double, st, p, m, sum, 0.0, __stddevp_u16_P1EXPR, masked_cnt);
|
|
2140
2140
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
2141
2141
|
int __trigger = ca_too_few_present(n_valid, min_count, 1);
|
|
2142
2142
|
if ( __trigger ) {
|
|
@@ -2145,14 +2145,14 @@ stddevp_ki_native_u16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2145
2145
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
2146
2146
|
}
|
|
2147
2147
|
op_mask[out_i] = 1;
|
|
2148
|
-
op[out_i++] = (
|
|
2148
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
2149
2149
|
} else {
|
|
2150
2150
|
double mean = sum / (double) n_valid;
|
|
2151
2151
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
2152
2152
|
double M2 = 0.0;
|
|
2153
2153
|
ca_size_t __unused_mc = 0;
|
|
2154
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
2155
|
-
op[out_i++] = (
|
|
2154
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint16_t, double, st, p, m, M2, 0.0, __stddevp_u16_P2EXPR, __unused_mc);
|
|
2155
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid)));
|
|
2156
2156
|
}
|
|
2157
2157
|
}
|
|
2158
2158
|
ca_iter_state_finish(&st);
|
|
@@ -2177,7 +2177,7 @@ stddevp_ki_native_i32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2177
2177
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
2178
2178
|
CArray *co;
|
|
2179
2179
|
GetCArray(vout, co);
|
|
2180
|
-
|
|
2180
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
2181
2181
|
ca_iter_state st;
|
|
2182
2182
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
2183
2183
|
slab_axes, naxes, 0);
|
|
@@ -2193,7 +2193,7 @@ stddevp_ki_native_i32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2193
2193
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
2194
2194
|
double sum = 0.0;
|
|
2195
2195
|
ca_size_t masked_cnt = 0;
|
|
2196
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
2196
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int32_t, double, st, p, m, sum, 0.0, __stddevp_i32_P1EXPR, masked_cnt);
|
|
2197
2197
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
2198
2198
|
int __trigger = ca_too_few_present(n_valid, min_count, 1);
|
|
2199
2199
|
if ( __trigger ) {
|
|
@@ -2202,14 +2202,14 @@ stddevp_ki_native_i32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2202
2202
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
2203
2203
|
}
|
|
2204
2204
|
op_mask[out_i] = 1;
|
|
2205
|
-
op[out_i++] = (
|
|
2205
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
2206
2206
|
} else {
|
|
2207
2207
|
double mean = sum / (double) n_valid;
|
|
2208
2208
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
2209
2209
|
double M2 = 0.0;
|
|
2210
2210
|
ca_size_t __unused_mc = 0;
|
|
2211
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
2212
|
-
op[out_i++] = (
|
|
2211
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int32_t, double, st, p, m, M2, 0.0, __stddevp_i32_P2EXPR, __unused_mc);
|
|
2212
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid)));
|
|
2213
2213
|
}
|
|
2214
2214
|
}
|
|
2215
2215
|
ca_iter_state_finish(&st);
|
|
@@ -2234,7 +2234,7 @@ stddevp_ki_native_u32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2234
2234
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
2235
2235
|
CArray *co;
|
|
2236
2236
|
GetCArray(vout, co);
|
|
2237
|
-
|
|
2237
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
2238
2238
|
ca_iter_state st;
|
|
2239
2239
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
2240
2240
|
slab_axes, naxes, 0);
|
|
@@ -2250,7 +2250,7 @@ stddevp_ki_native_u32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2250
2250
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
2251
2251
|
double sum = 0.0;
|
|
2252
2252
|
ca_size_t masked_cnt = 0;
|
|
2253
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
2253
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint32_t, double, st, p, m, sum, 0.0, __stddevp_u32_P1EXPR, masked_cnt);
|
|
2254
2254
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
2255
2255
|
int __trigger = ca_too_few_present(n_valid, min_count, 1);
|
|
2256
2256
|
if ( __trigger ) {
|
|
@@ -2259,14 +2259,14 @@ stddevp_ki_native_u32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2259
2259
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
2260
2260
|
}
|
|
2261
2261
|
op_mask[out_i] = 1;
|
|
2262
|
-
op[out_i++] = (
|
|
2262
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
2263
2263
|
} else {
|
|
2264
2264
|
double mean = sum / (double) n_valid;
|
|
2265
2265
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
2266
2266
|
double M2 = 0.0;
|
|
2267
2267
|
ca_size_t __unused_mc = 0;
|
|
2268
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
2269
|
-
op[out_i++] = (
|
|
2268
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint32_t, double, st, p, m, M2, 0.0, __stddevp_u32_P2EXPR, __unused_mc);
|
|
2269
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid)));
|
|
2270
2270
|
}
|
|
2271
2271
|
}
|
|
2272
2272
|
ca_iter_state_finish(&st);
|
|
@@ -2291,7 +2291,7 @@ stddevp_ki_native_i64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2291
2291
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
2292
2292
|
CArray *co;
|
|
2293
2293
|
GetCArray(vout, co);
|
|
2294
|
-
|
|
2294
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
2295
2295
|
ca_iter_state st;
|
|
2296
2296
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
2297
2297
|
slab_axes, naxes, 0);
|
|
@@ -2307,7 +2307,7 @@ stddevp_ki_native_i64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2307
2307
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
2308
2308
|
double sum = 0.0;
|
|
2309
2309
|
ca_size_t masked_cnt = 0;
|
|
2310
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
2310
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int64_t, double, st, p, m, sum, 0.0, __stddevp_i64_P1EXPR, masked_cnt);
|
|
2311
2311
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
2312
2312
|
int __trigger = ca_too_few_present(n_valid, min_count, 1);
|
|
2313
2313
|
if ( __trigger ) {
|
|
@@ -2316,14 +2316,14 @@ stddevp_ki_native_i64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2316
2316
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
2317
2317
|
}
|
|
2318
2318
|
op_mask[out_i] = 1;
|
|
2319
|
-
op[out_i++] = (
|
|
2319
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
2320
2320
|
} else {
|
|
2321
2321
|
double mean = sum / (double) n_valid;
|
|
2322
2322
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
2323
2323
|
double M2 = 0.0;
|
|
2324
2324
|
ca_size_t __unused_mc = 0;
|
|
2325
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
2326
|
-
op[out_i++] = (
|
|
2325
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int64_t, double, st, p, m, M2, 0.0, __stddevp_i64_P2EXPR, __unused_mc);
|
|
2326
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid)));
|
|
2327
2327
|
}
|
|
2328
2328
|
}
|
|
2329
2329
|
ca_iter_state_finish(&st);
|
|
@@ -2348,7 +2348,7 @@ stddevp_ki_native_u64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2348
2348
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
2349
2349
|
CArray *co;
|
|
2350
2350
|
GetCArray(vout, co);
|
|
2351
|
-
|
|
2351
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
2352
2352
|
ca_iter_state st;
|
|
2353
2353
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
2354
2354
|
slab_axes, naxes, 0);
|
|
@@ -2364,7 +2364,7 @@ stddevp_ki_native_u64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2364
2364
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
2365
2365
|
double sum = 0.0;
|
|
2366
2366
|
ca_size_t masked_cnt = 0;
|
|
2367
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
2367
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint64_t, double, st, p, m, sum, 0.0, __stddevp_u64_P1EXPR, masked_cnt);
|
|
2368
2368
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
2369
2369
|
int __trigger = ca_too_few_present(n_valid, min_count, 1);
|
|
2370
2370
|
if ( __trigger ) {
|
|
@@ -2373,14 +2373,14 @@ stddevp_ki_native_u64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2373
2373
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
2374
2374
|
}
|
|
2375
2375
|
op_mask[out_i] = 1;
|
|
2376
|
-
op[out_i++] = (
|
|
2376
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
2377
2377
|
} else {
|
|
2378
2378
|
double mean = sum / (double) n_valid;
|
|
2379
2379
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
2380
2380
|
double M2 = 0.0;
|
|
2381
2381
|
ca_size_t __unused_mc = 0;
|
|
2382
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
2383
|
-
op[out_i++] = (
|
|
2382
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint64_t, double, st, p, m, M2, 0.0, __stddevp_u64_P2EXPR, __unused_mc);
|
|
2383
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid)));
|
|
2384
2384
|
}
|
|
2385
2385
|
}
|
|
2386
2386
|
ca_iter_state_finish(&st);
|
|
@@ -2405,7 +2405,7 @@ stddevp_ki_native_f32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2405
2405
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
2406
2406
|
CArray *co;
|
|
2407
2407
|
GetCArray(vout, co);
|
|
2408
|
-
|
|
2408
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
2409
2409
|
ca_iter_state st;
|
|
2410
2410
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
2411
2411
|
slab_axes, naxes, 0);
|
|
@@ -2421,7 +2421,7 @@ stddevp_ki_native_f32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2421
2421
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
2422
2422
|
double sum = 0.0;
|
|
2423
2423
|
ca_size_t masked_cnt = 0;
|
|
2424
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
2424
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_float32_t, double, st, p, m, sum, 0.0, __stddevp_f32_P1EXPR, masked_cnt);
|
|
2425
2425
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
2426
2426
|
int __trigger = ca_too_few_present(n_valid, min_count, 1);
|
|
2427
2427
|
if ( __trigger ) {
|
|
@@ -2430,14 +2430,14 @@ stddevp_ki_native_f32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2430
2430
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
2431
2431
|
}
|
|
2432
2432
|
op_mask[out_i] = 1;
|
|
2433
|
-
op[out_i++] = (
|
|
2433
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
2434
2434
|
} else {
|
|
2435
2435
|
double mean = sum / (double) n_valid;
|
|
2436
2436
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
2437
2437
|
double M2 = 0.0;
|
|
2438
2438
|
ca_size_t __unused_mc = 0;
|
|
2439
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
2440
|
-
op[out_i++] = (
|
|
2439
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_float32_t, double, st, p, m, M2, 0.0, __stddevp_f32_P2EXPR, __unused_mc);
|
|
2440
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid)));
|
|
2441
2441
|
}
|
|
2442
2442
|
}
|
|
2443
2443
|
ca_iter_state_finish(&st);
|
|
@@ -2462,7 +2462,7 @@ stddevp_ki_native_f64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2462
2462
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
2463
2463
|
CArray *co;
|
|
2464
2464
|
GetCArray(vout, co);
|
|
2465
|
-
|
|
2465
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
2466
2466
|
ca_iter_state st;
|
|
2467
2467
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
2468
2468
|
slab_axes, naxes, 0);
|
|
@@ -2478,7 +2478,7 @@ stddevp_ki_native_f64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2478
2478
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
2479
2479
|
double sum = 0.0;
|
|
2480
2480
|
ca_size_t masked_cnt = 0;
|
|
2481
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
2481
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_float64_t, double, st, p, m, sum, 0.0, __stddevp_f64_P1EXPR, masked_cnt);
|
|
2482
2482
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
2483
2483
|
int __trigger = ca_too_few_present(n_valid, min_count, 1);
|
|
2484
2484
|
if ( __trigger ) {
|
|
@@ -2487,14 +2487,14 @@ stddevp_ki_native_f64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2487
2487
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
2488
2488
|
}
|
|
2489
2489
|
op_mask[out_i] = 1;
|
|
2490
|
-
op[out_i++] = (
|
|
2490
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
2491
2491
|
} else {
|
|
2492
2492
|
double mean = sum / (double) n_valid;
|
|
2493
2493
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
2494
2494
|
double M2 = 0.0;
|
|
2495
2495
|
ca_size_t __unused_mc = 0;
|
|
2496
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
2497
|
-
op[out_i++] = (
|
|
2496
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_float64_t, double, st, p, m, M2, 0.0, __stddevp_f64_P2EXPR, __unused_mc);
|
|
2497
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid)));
|
|
2498
2498
|
}
|
|
2499
2499
|
}
|
|
2500
2500
|
ca_iter_state_finish(&st);
|
|
@@ -2519,7 +2519,7 @@ stddevp_ki_native_cmplx64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t nax
|
|
|
2519
2519
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
2520
2520
|
CArray *co;
|
|
2521
2521
|
GetCArray(vout, co);
|
|
2522
|
-
|
|
2522
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
2523
2523
|
ca_iter_state st;
|
|
2524
2524
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
2525
2525
|
slab_axes, naxes, 0);
|
|
@@ -2533,9 +2533,9 @@ stddevp_ki_native_cmplx64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t nax
|
|
|
2533
2533
|
boolean8_t *op_mask = NULL; /* lazily allocated on first UNDEF */
|
|
2534
2534
|
while ( ca_iter_state_next_slab_axes(&st, &p, &m) ) {
|
|
2535
2535
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
2536
|
-
|
|
2536
|
+
ca_u_cmplx64_t sum = 0;
|
|
2537
2537
|
ca_size_t masked_cnt = 0;
|
|
2538
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
2538
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_cmplx64_t, ca_u_cmplx64_t, st, p, m, sum, 0, __stddevp_cmplx64_P1EXPR, masked_cnt);
|
|
2539
2539
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
2540
2540
|
int __trigger = ca_too_few_present(n_valid, min_count, 1);
|
|
2541
2541
|
if ( __trigger ) {
|
|
@@ -2544,14 +2544,14 @@ stddevp_ki_native_cmplx64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t nax
|
|
|
2544
2544
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
2545
2545
|
}
|
|
2546
2546
|
op_mask[out_i] = 1;
|
|
2547
|
-
op[out_i++] = (
|
|
2547
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
2548
2548
|
} else {
|
|
2549
|
-
|
|
2549
|
+
ca_u_cmplx64_t mean = sum / (ca_u_cmplx64_t)(double) n_valid;
|
|
2550
2550
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
2551
2551
|
double M2 = 0.0;
|
|
2552
2552
|
ca_size_t __unused_mc = 0;
|
|
2553
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
2554
|
-
op[out_i++] = (
|
|
2553
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_cmplx64_t, double, st, p, m, M2, 0.0, __stddevp_cmplx64_P2EXPR, __unused_mc);
|
|
2554
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid)));
|
|
2555
2555
|
}
|
|
2556
2556
|
}
|
|
2557
2557
|
ca_iter_state_finish(&st);
|
|
@@ -2576,7 +2576,7 @@ stddevp_ki_native_cmplx128 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t na
|
|
|
2576
2576
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
2577
2577
|
CArray *co;
|
|
2578
2578
|
GetCArray(vout, co);
|
|
2579
|
-
|
|
2579
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
2580
2580
|
ca_iter_state st;
|
|
2581
2581
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
2582
2582
|
slab_axes, naxes, 0);
|
|
@@ -2590,9 +2590,9 @@ stddevp_ki_native_cmplx128 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t na
|
|
|
2590
2590
|
boolean8_t *op_mask = NULL; /* lazily allocated on first UNDEF */
|
|
2591
2591
|
while ( ca_iter_state_next_slab_axes(&st, &p, &m) ) {
|
|
2592
2592
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
2593
|
-
|
|
2593
|
+
ca_u_cmplx128_t sum = 0;
|
|
2594
2594
|
ca_size_t masked_cnt = 0;
|
|
2595
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
2595
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_cmplx128_t, ca_u_cmplx128_t, st, p, m, sum, 0, __stddevp_cmplx128_P1EXPR, masked_cnt);
|
|
2596
2596
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
2597
2597
|
int __trigger = ca_too_few_present(n_valid, min_count, 1);
|
|
2598
2598
|
if ( __trigger ) {
|
|
@@ -2601,14 +2601,14 @@ stddevp_ki_native_cmplx128 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t na
|
|
|
2601
2601
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
2602
2602
|
}
|
|
2603
2603
|
op_mask[out_i] = 1;
|
|
2604
|
-
op[out_i++] = (
|
|
2604
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
2605
2605
|
} else {
|
|
2606
|
-
|
|
2606
|
+
ca_u_cmplx128_t mean = sum / (ca_u_cmplx128_t)(double) n_valid;
|
|
2607
2607
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
2608
2608
|
double M2 = 0.0;
|
|
2609
2609
|
ca_size_t __unused_mc = 0;
|
|
2610
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
2611
|
-
op[out_i++] = (
|
|
2610
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_cmplx128_t, double, st, p, m, M2, 0.0, __stddevp_cmplx128_P2EXPR, __unused_mc);
|
|
2611
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid)));
|
|
2612
2612
|
}
|
|
2613
2613
|
}
|
|
2614
2614
|
ca_iter_state_finish(&st);
|
|
@@ -2633,7 +2633,7 @@ stddevp_ki_native_bool (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2633
2633
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
2634
2634
|
CArray *co;
|
|
2635
2635
|
GetCArray(vout, co);
|
|
2636
|
-
|
|
2636
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
2637
2637
|
ca_iter_state st;
|
|
2638
2638
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
2639
2639
|
slab_axes, naxes, 0);
|
|
@@ -2658,14 +2658,14 @@ stddevp_ki_native_bool (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
2658
2658
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
2659
2659
|
}
|
|
2660
2660
|
op_mask[out_i] = 1;
|
|
2661
|
-
op[out_i++] = (
|
|
2661
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
2662
2662
|
} else {
|
|
2663
2663
|
double mean = sum / (double) n_valid;
|
|
2664
2664
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
2665
2665
|
double M2 = 0.0;
|
|
2666
2666
|
ca_size_t __unused_mc = 0;
|
|
2667
2667
|
CA_SLAB_REDUCE_SUM8_EX(boolean8_t, double, st, p, m, M2, 0.0, __stddevp_bool_P2EXPR, __unused_mc);
|
|
2668
|
-
op[out_i++] = (
|
|
2668
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid)));
|
|
2669
2669
|
}
|
|
2670
2670
|
}
|
|
2671
2671
|
ca_iter_state_finish(&st);
|
|
@@ -2715,7 +2715,7 @@ stddevp_ki_native_object_body (VALUE arg)
|
|
|
2715
2715
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
2716
2716
|
CArray *co;
|
|
2717
2717
|
GetCArray(vout, co);
|
|
2718
|
-
|
|
2718
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
2719
2719
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
2720
2720
|
slab_axes, naxes, 0);
|
|
2721
2721
|
if ( rc != CA_ITER_OK ) {
|
|
@@ -2739,7 +2739,7 @@ stddevp_ki_native_object_body (VALUE arg)
|
|
|
2739
2739
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
2740
2740
|
}
|
|
2741
2741
|
op_mask[out_i] = 1;
|
|
2742
|
-
op[out_i++] = (
|
|
2742
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
2743
2743
|
} else {
|
|
2744
2744
|
VALUE mean = rb_funcall(sum, rb_intern("/"), 1, LONG2NUM(n_valid));
|
|
2745
2745
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
@@ -2747,7 +2747,7 @@ stddevp_ki_native_object_body (VALUE arg)
|
|
|
2747
2747
|
ca_size_t __unused_mc = 0;
|
|
2748
2748
|
CA_SLAB_REDUCE_T_EX(VALUE, st, p, m, M2, INT2FIX(0), VALUE __d = rb_funcall(v, rb_intern("-"), 1, mean);
|
|
2749
2749
|
M2 = rb_funcall(M2, rb_intern("+"), 1, rb_funcall(__d, rb_intern("*"), 1, __d)), __unused_mc);
|
|
2750
|
-
op[out_i++] = (
|
|
2750
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(NUM2DBL(rb_funcall(M2, rb_intern("/"), 1, LONG2NUM(n_valid)))));
|
|
2751
2751
|
}
|
|
2752
2752
|
}
|
|
2753
2753
|
ca_iter_state_finish(&st);
|
|
@@ -2897,7 +2897,7 @@ stddev_ki_native_i8 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, in
|
|
|
2897
2897
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
2898
2898
|
CArray *co;
|
|
2899
2899
|
GetCArray(vout, co);
|
|
2900
|
-
|
|
2900
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
2901
2901
|
ca_iter_state st;
|
|
2902
2902
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
2903
2903
|
slab_axes, naxes, 0);
|
|
@@ -2922,14 +2922,14 @@ stddev_ki_native_i8 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, in
|
|
|
2922
2922
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
2923
2923
|
}
|
|
2924
2924
|
op_mask[out_i] = 1;
|
|
2925
|
-
op[out_i++] = (
|
|
2925
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
2926
2926
|
} else {
|
|
2927
2927
|
double mean = sum / (double) n_valid;
|
|
2928
2928
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
2929
2929
|
double M2 = 0.0;
|
|
2930
2930
|
ca_size_t __unused_mc = 0;
|
|
2931
2931
|
CA_SLAB_REDUCE_SUM8_EX(int8_t, double, st, p, m, M2, 0.0, __stddev_i8_P2EXPR, __unused_mc);
|
|
2932
|
-
op[out_i++] = (
|
|
2932
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid - 1)));
|
|
2933
2933
|
}
|
|
2934
2934
|
}
|
|
2935
2935
|
ca_iter_state_finish(&st);
|
|
@@ -2954,7 +2954,7 @@ stddev_ki_native_u8 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, in
|
|
|
2954
2954
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
2955
2955
|
CArray *co;
|
|
2956
2956
|
GetCArray(vout, co);
|
|
2957
|
-
|
|
2957
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
2958
2958
|
ca_iter_state st;
|
|
2959
2959
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
2960
2960
|
slab_axes, naxes, 0);
|
|
@@ -2979,14 +2979,14 @@ stddev_ki_native_u8 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, in
|
|
|
2979
2979
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
2980
2980
|
}
|
|
2981
2981
|
op_mask[out_i] = 1;
|
|
2982
|
-
op[out_i++] = (
|
|
2982
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
2983
2983
|
} else {
|
|
2984
2984
|
double mean = sum / (double) n_valid;
|
|
2985
2985
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
2986
2986
|
double M2 = 0.0;
|
|
2987
2987
|
ca_size_t __unused_mc = 0;
|
|
2988
2988
|
CA_SLAB_REDUCE_SUM8_EX(uint8_t, double, st, p, m, M2, 0.0, __stddev_u8_P2EXPR, __unused_mc);
|
|
2989
|
-
op[out_i++] = (
|
|
2989
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid - 1)));
|
|
2990
2990
|
}
|
|
2991
2991
|
}
|
|
2992
2992
|
ca_iter_state_finish(&st);
|
|
@@ -3011,7 +3011,7 @@ stddev_ki_native_i16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3011
3011
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
3012
3012
|
CArray *co;
|
|
3013
3013
|
GetCArray(vout, co);
|
|
3014
|
-
|
|
3014
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
3015
3015
|
ca_iter_state st;
|
|
3016
3016
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
3017
3017
|
slab_axes, naxes, 0);
|
|
@@ -3027,7 +3027,7 @@ stddev_ki_native_i16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3027
3027
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
3028
3028
|
double sum = 0.0;
|
|
3029
3029
|
ca_size_t masked_cnt = 0;
|
|
3030
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
3030
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int16_t, double, st, p, m, sum, 0.0, __stddev_i16_P1EXPR, masked_cnt);
|
|
3031
3031
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
3032
3032
|
int __trigger = ca_too_few_present(n_valid, min_count, 2);
|
|
3033
3033
|
if ( __trigger ) {
|
|
@@ -3036,14 +3036,14 @@ stddev_ki_native_i16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3036
3036
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
3037
3037
|
}
|
|
3038
3038
|
op_mask[out_i] = 1;
|
|
3039
|
-
op[out_i++] = (
|
|
3039
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
3040
3040
|
} else {
|
|
3041
3041
|
double mean = sum / (double) n_valid;
|
|
3042
3042
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
3043
3043
|
double M2 = 0.0;
|
|
3044
3044
|
ca_size_t __unused_mc = 0;
|
|
3045
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
3046
|
-
op[out_i++] = (
|
|
3045
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int16_t, double, st, p, m, M2, 0.0, __stddev_i16_P2EXPR, __unused_mc);
|
|
3046
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid - 1)));
|
|
3047
3047
|
}
|
|
3048
3048
|
}
|
|
3049
3049
|
ca_iter_state_finish(&st);
|
|
@@ -3068,7 +3068,7 @@ stddev_ki_native_u16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3068
3068
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
3069
3069
|
CArray *co;
|
|
3070
3070
|
GetCArray(vout, co);
|
|
3071
|
-
|
|
3071
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
3072
3072
|
ca_iter_state st;
|
|
3073
3073
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
3074
3074
|
slab_axes, naxes, 0);
|
|
@@ -3084,7 +3084,7 @@ stddev_ki_native_u16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3084
3084
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
3085
3085
|
double sum = 0.0;
|
|
3086
3086
|
ca_size_t masked_cnt = 0;
|
|
3087
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
3087
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint16_t, double, st, p, m, sum, 0.0, __stddev_u16_P1EXPR, masked_cnt);
|
|
3088
3088
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
3089
3089
|
int __trigger = ca_too_few_present(n_valid, min_count, 2);
|
|
3090
3090
|
if ( __trigger ) {
|
|
@@ -3093,14 +3093,14 @@ stddev_ki_native_u16 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3093
3093
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
3094
3094
|
}
|
|
3095
3095
|
op_mask[out_i] = 1;
|
|
3096
|
-
op[out_i++] = (
|
|
3096
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
3097
3097
|
} else {
|
|
3098
3098
|
double mean = sum / (double) n_valid;
|
|
3099
3099
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
3100
3100
|
double M2 = 0.0;
|
|
3101
3101
|
ca_size_t __unused_mc = 0;
|
|
3102
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
3103
|
-
op[out_i++] = (
|
|
3102
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint16_t, double, st, p, m, M2, 0.0, __stddev_u16_P2EXPR, __unused_mc);
|
|
3103
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid - 1)));
|
|
3104
3104
|
}
|
|
3105
3105
|
}
|
|
3106
3106
|
ca_iter_state_finish(&st);
|
|
@@ -3125,7 +3125,7 @@ stddev_ki_native_i32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3125
3125
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
3126
3126
|
CArray *co;
|
|
3127
3127
|
GetCArray(vout, co);
|
|
3128
|
-
|
|
3128
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
3129
3129
|
ca_iter_state st;
|
|
3130
3130
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
3131
3131
|
slab_axes, naxes, 0);
|
|
@@ -3141,7 +3141,7 @@ stddev_ki_native_i32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3141
3141
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
3142
3142
|
double sum = 0.0;
|
|
3143
3143
|
ca_size_t masked_cnt = 0;
|
|
3144
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
3144
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int32_t, double, st, p, m, sum, 0.0, __stddev_i32_P1EXPR, masked_cnt);
|
|
3145
3145
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
3146
3146
|
int __trigger = ca_too_few_present(n_valid, min_count, 2);
|
|
3147
3147
|
if ( __trigger ) {
|
|
@@ -3150,14 +3150,14 @@ stddev_ki_native_i32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3150
3150
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
3151
3151
|
}
|
|
3152
3152
|
op_mask[out_i] = 1;
|
|
3153
|
-
op[out_i++] = (
|
|
3153
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
3154
3154
|
} else {
|
|
3155
3155
|
double mean = sum / (double) n_valid;
|
|
3156
3156
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
3157
3157
|
double M2 = 0.0;
|
|
3158
3158
|
ca_size_t __unused_mc = 0;
|
|
3159
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
3160
|
-
op[out_i++] = (
|
|
3159
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int32_t, double, st, p, m, M2, 0.0, __stddev_i32_P2EXPR, __unused_mc);
|
|
3160
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid - 1)));
|
|
3161
3161
|
}
|
|
3162
3162
|
}
|
|
3163
3163
|
ca_iter_state_finish(&st);
|
|
@@ -3182,7 +3182,7 @@ stddev_ki_native_u32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3182
3182
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
3183
3183
|
CArray *co;
|
|
3184
3184
|
GetCArray(vout, co);
|
|
3185
|
-
|
|
3185
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
3186
3186
|
ca_iter_state st;
|
|
3187
3187
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
3188
3188
|
slab_axes, naxes, 0);
|
|
@@ -3198,7 +3198,7 @@ stddev_ki_native_u32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3198
3198
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
3199
3199
|
double sum = 0.0;
|
|
3200
3200
|
ca_size_t masked_cnt = 0;
|
|
3201
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
3201
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint32_t, double, st, p, m, sum, 0.0, __stddev_u32_P1EXPR, masked_cnt);
|
|
3202
3202
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
3203
3203
|
int __trigger = ca_too_few_present(n_valid, min_count, 2);
|
|
3204
3204
|
if ( __trigger ) {
|
|
@@ -3207,14 +3207,14 @@ stddev_ki_native_u32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3207
3207
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
3208
3208
|
}
|
|
3209
3209
|
op_mask[out_i] = 1;
|
|
3210
|
-
op[out_i++] = (
|
|
3210
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
3211
3211
|
} else {
|
|
3212
3212
|
double mean = sum / (double) n_valid;
|
|
3213
3213
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
3214
3214
|
double M2 = 0.0;
|
|
3215
3215
|
ca_size_t __unused_mc = 0;
|
|
3216
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
3217
|
-
op[out_i++] = (
|
|
3216
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint32_t, double, st, p, m, M2, 0.0, __stddev_u32_P2EXPR, __unused_mc);
|
|
3217
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid - 1)));
|
|
3218
3218
|
}
|
|
3219
3219
|
}
|
|
3220
3220
|
ca_iter_state_finish(&st);
|
|
@@ -3239,7 +3239,7 @@ stddev_ki_native_i64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3239
3239
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
3240
3240
|
CArray *co;
|
|
3241
3241
|
GetCArray(vout, co);
|
|
3242
|
-
|
|
3242
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
3243
3243
|
ca_iter_state st;
|
|
3244
3244
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
3245
3245
|
slab_axes, naxes, 0);
|
|
@@ -3255,7 +3255,7 @@ stddev_ki_native_i64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3255
3255
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
3256
3256
|
double sum = 0.0;
|
|
3257
3257
|
ca_size_t masked_cnt = 0;
|
|
3258
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
3258
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int64_t, double, st, p, m, sum, 0.0, __stddev_i64_P1EXPR, masked_cnt);
|
|
3259
3259
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
3260
3260
|
int __trigger = ca_too_few_present(n_valid, min_count, 2);
|
|
3261
3261
|
if ( __trigger ) {
|
|
@@ -3264,14 +3264,14 @@ stddev_ki_native_i64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3264
3264
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
3265
3265
|
}
|
|
3266
3266
|
op_mask[out_i] = 1;
|
|
3267
|
-
op[out_i++] = (
|
|
3267
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
3268
3268
|
} else {
|
|
3269
3269
|
double mean = sum / (double) n_valid;
|
|
3270
3270
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
3271
3271
|
double M2 = 0.0;
|
|
3272
3272
|
ca_size_t __unused_mc = 0;
|
|
3273
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
3274
|
-
op[out_i++] = (
|
|
3273
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_int64_t, double, st, p, m, M2, 0.0, __stddev_i64_P2EXPR, __unused_mc);
|
|
3274
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid - 1)));
|
|
3275
3275
|
}
|
|
3276
3276
|
}
|
|
3277
3277
|
ca_iter_state_finish(&st);
|
|
@@ -3296,7 +3296,7 @@ stddev_ki_native_u64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3296
3296
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
3297
3297
|
CArray *co;
|
|
3298
3298
|
GetCArray(vout, co);
|
|
3299
|
-
|
|
3299
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
3300
3300
|
ca_iter_state st;
|
|
3301
3301
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
3302
3302
|
slab_axes, naxes, 0);
|
|
@@ -3312,7 +3312,7 @@ stddev_ki_native_u64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3312
3312
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
3313
3313
|
double sum = 0.0;
|
|
3314
3314
|
ca_size_t masked_cnt = 0;
|
|
3315
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
3315
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint64_t, double, st, p, m, sum, 0.0, __stddev_u64_P1EXPR, masked_cnt);
|
|
3316
3316
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
3317
3317
|
int __trigger = ca_too_few_present(n_valid, min_count, 2);
|
|
3318
3318
|
if ( __trigger ) {
|
|
@@ -3321,14 +3321,14 @@ stddev_ki_native_u64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3321
3321
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
3322
3322
|
}
|
|
3323
3323
|
op_mask[out_i] = 1;
|
|
3324
|
-
op[out_i++] = (
|
|
3324
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
3325
3325
|
} else {
|
|
3326
3326
|
double mean = sum / (double) n_valid;
|
|
3327
3327
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
3328
3328
|
double M2 = 0.0;
|
|
3329
3329
|
ca_size_t __unused_mc = 0;
|
|
3330
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
3331
|
-
op[out_i++] = (
|
|
3330
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_uint64_t, double, st, p, m, M2, 0.0, __stddev_u64_P2EXPR, __unused_mc);
|
|
3331
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid - 1)));
|
|
3332
3332
|
}
|
|
3333
3333
|
}
|
|
3334
3334
|
ca_iter_state_finish(&st);
|
|
@@ -3353,7 +3353,7 @@ stddev_ki_native_f32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3353
3353
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
3354
3354
|
CArray *co;
|
|
3355
3355
|
GetCArray(vout, co);
|
|
3356
|
-
|
|
3356
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
3357
3357
|
ca_iter_state st;
|
|
3358
3358
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
3359
3359
|
slab_axes, naxes, 0);
|
|
@@ -3369,7 +3369,7 @@ stddev_ki_native_f32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3369
3369
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
3370
3370
|
double sum = 0.0;
|
|
3371
3371
|
ca_size_t masked_cnt = 0;
|
|
3372
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
3372
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_float32_t, double, st, p, m, sum, 0.0, __stddev_f32_P1EXPR, masked_cnt);
|
|
3373
3373
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
3374
3374
|
int __trigger = ca_too_few_present(n_valid, min_count, 2);
|
|
3375
3375
|
if ( __trigger ) {
|
|
@@ -3378,14 +3378,14 @@ stddev_ki_native_f32 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3378
3378
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
3379
3379
|
}
|
|
3380
3380
|
op_mask[out_i] = 1;
|
|
3381
|
-
op[out_i++] = (
|
|
3381
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
3382
3382
|
} else {
|
|
3383
3383
|
double mean = sum / (double) n_valid;
|
|
3384
3384
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
3385
3385
|
double M2 = 0.0;
|
|
3386
3386
|
ca_size_t __unused_mc = 0;
|
|
3387
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
3388
|
-
op[out_i++] = (
|
|
3387
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_float32_t, double, st, p, m, M2, 0.0, __stddev_f32_P2EXPR, __unused_mc);
|
|
3388
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid - 1)));
|
|
3389
3389
|
}
|
|
3390
3390
|
}
|
|
3391
3391
|
ca_iter_state_finish(&st);
|
|
@@ -3410,7 +3410,7 @@ stddev_ki_native_f64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3410
3410
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
3411
3411
|
CArray *co;
|
|
3412
3412
|
GetCArray(vout, co);
|
|
3413
|
-
|
|
3413
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
3414
3414
|
ca_iter_state st;
|
|
3415
3415
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
3416
3416
|
slab_axes, naxes, 0);
|
|
@@ -3426,7 +3426,7 @@ stddev_ki_native_f64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3426
3426
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
3427
3427
|
double sum = 0.0;
|
|
3428
3428
|
ca_size_t masked_cnt = 0;
|
|
3429
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
3429
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_float64_t, double, st, p, m, sum, 0.0, __stddev_f64_P1EXPR, masked_cnt);
|
|
3430
3430
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
3431
3431
|
int __trigger = ca_too_few_present(n_valid, min_count, 2);
|
|
3432
3432
|
if ( __trigger ) {
|
|
@@ -3435,14 +3435,14 @@ stddev_ki_native_f64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes, i
|
|
|
3435
3435
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
3436
3436
|
}
|
|
3437
3437
|
op_mask[out_i] = 1;
|
|
3438
|
-
op[out_i++] = (
|
|
3438
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
3439
3439
|
} else {
|
|
3440
3440
|
double mean = sum / (double) n_valid;
|
|
3441
3441
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
3442
3442
|
double M2 = 0.0;
|
|
3443
3443
|
ca_size_t __unused_mc = 0;
|
|
3444
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
3445
|
-
op[out_i++] = (
|
|
3444
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_float64_t, double, st, p, m, M2, 0.0, __stddev_f64_P2EXPR, __unused_mc);
|
|
3445
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid - 1)));
|
|
3446
3446
|
}
|
|
3447
3447
|
}
|
|
3448
3448
|
ca_iter_state_finish(&st);
|
|
@@ -3467,7 +3467,7 @@ stddev_ki_native_cmplx64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxe
|
|
|
3467
3467
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
3468
3468
|
CArray *co;
|
|
3469
3469
|
GetCArray(vout, co);
|
|
3470
|
-
|
|
3470
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
3471
3471
|
ca_iter_state st;
|
|
3472
3472
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
3473
3473
|
slab_axes, naxes, 0);
|
|
@@ -3481,9 +3481,9 @@ stddev_ki_native_cmplx64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxe
|
|
|
3481
3481
|
boolean8_t *op_mask = NULL; /* lazily allocated on first UNDEF */
|
|
3482
3482
|
while ( ca_iter_state_next_slab_axes(&st, &p, &m) ) {
|
|
3483
3483
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
3484
|
-
|
|
3484
|
+
ca_u_cmplx64_t sum = 0;
|
|
3485
3485
|
ca_size_t masked_cnt = 0;
|
|
3486
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
3486
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_cmplx64_t, ca_u_cmplx64_t, st, p, m, sum, 0, __stddev_cmplx64_P1EXPR, masked_cnt);
|
|
3487
3487
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
3488
3488
|
int __trigger = ca_too_few_present(n_valid, min_count, 2);
|
|
3489
3489
|
if ( __trigger ) {
|
|
@@ -3492,14 +3492,14 @@ stddev_ki_native_cmplx64 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxe
|
|
|
3492
3492
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
3493
3493
|
}
|
|
3494
3494
|
op_mask[out_i] = 1;
|
|
3495
|
-
op[out_i++] = (
|
|
3495
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
3496
3496
|
} else {
|
|
3497
|
-
|
|
3497
|
+
ca_u_cmplx64_t mean = sum / (ca_u_cmplx64_t)(double) n_valid;
|
|
3498
3498
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
3499
3499
|
double M2 = 0.0;
|
|
3500
3500
|
ca_size_t __unused_mc = 0;
|
|
3501
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
3502
|
-
op[out_i++] = (
|
|
3501
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_cmplx64_t, double, st, p, m, M2, 0.0, __stddev_cmplx64_P2EXPR, __unused_mc);
|
|
3502
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid - 1)));
|
|
3503
3503
|
}
|
|
3504
3504
|
}
|
|
3505
3505
|
ca_iter_state_finish(&st);
|
|
@@ -3524,7 +3524,7 @@ stddev_ki_native_cmplx128 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t nax
|
|
|
3524
3524
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
3525
3525
|
CArray *co;
|
|
3526
3526
|
GetCArray(vout, co);
|
|
3527
|
-
|
|
3527
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
3528
3528
|
ca_iter_state st;
|
|
3529
3529
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
3530
3530
|
slab_axes, naxes, 0);
|
|
@@ -3538,9 +3538,9 @@ stddev_ki_native_cmplx128 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t nax
|
|
|
3538
3538
|
boolean8_t *op_mask = NULL; /* lazily allocated on first UNDEF */
|
|
3539
3539
|
while ( ca_iter_state_next_slab_axes(&st, &p, &m) ) {
|
|
3540
3540
|
/* Pass 1: sum = Σx (+ masked_cnt) */
|
|
3541
|
-
|
|
3541
|
+
ca_u_cmplx128_t sum = 0;
|
|
3542
3542
|
ca_size_t masked_cnt = 0;
|
|
3543
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
3543
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_cmplx128_t, ca_u_cmplx128_t, st, p, m, sum, 0, __stddev_cmplx128_P1EXPR, masked_cnt);
|
|
3544
3544
|
ca_size_t n_valid = st.slab_elements - masked_cnt;
|
|
3545
3545
|
int __trigger = ca_too_few_present(n_valid, min_count, 2);
|
|
3546
3546
|
if ( __trigger ) {
|
|
@@ -3549,14 +3549,14 @@ stddev_ki_native_cmplx128 (VALUE self, CArray *ca, int8_t *slab_axes, int8_t nax
|
|
|
3549
3549
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
3550
3550
|
}
|
|
3551
3551
|
op_mask[out_i] = 1;
|
|
3552
|
-
op[out_i++] = (
|
|
3552
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
3553
3553
|
} else {
|
|
3554
|
-
|
|
3554
|
+
ca_u_cmplx128_t mean = sum / (ca_u_cmplx128_t)(double) n_valid;
|
|
3555
3555
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
3556
3556
|
double M2 = 0.0;
|
|
3557
3557
|
ca_size_t __unused_mc = 0;
|
|
3558
|
-
CA_SLAB_REDUCE_SUM8_EX(
|
|
3559
|
-
op[out_i++] = (
|
|
3558
|
+
CA_SLAB_REDUCE_SUM8_EX(ca_u_cmplx128_t, double, st, p, m, M2, 0.0, __stddev_cmplx128_P2EXPR, __unused_mc);
|
|
3559
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid - 1)));
|
|
3560
3560
|
}
|
|
3561
3561
|
}
|
|
3562
3562
|
ca_iter_state_finish(&st);
|
|
@@ -3581,7 +3581,7 @@ stddev_ki_native_bool (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
3581
3581
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
3582
3582
|
CArray *co;
|
|
3583
3583
|
GetCArray(vout, co);
|
|
3584
|
-
|
|
3584
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
3585
3585
|
ca_iter_state st;
|
|
3586
3586
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
3587
3587
|
slab_axes, naxes, 0);
|
|
@@ -3606,14 +3606,14 @@ stddev_ki_native_bool (VALUE self, CArray *ca, int8_t *slab_axes, int8_t naxes,
|
|
|
3606
3606
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
3607
3607
|
}
|
|
3608
3608
|
op_mask[out_i] = 1;
|
|
3609
|
-
op[out_i++] = (
|
|
3609
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
3610
3610
|
} else {
|
|
3611
3611
|
double mean = sum / (double) n_valid;
|
|
3612
3612
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
3613
3613
|
double M2 = 0.0;
|
|
3614
3614
|
ca_size_t __unused_mc = 0;
|
|
3615
3615
|
CA_SLAB_REDUCE_SUM8_EX(boolean8_t, double, st, p, m, M2, 0.0, __stddev_bool_P2EXPR, __unused_mc);
|
|
3616
|
-
op[out_i++] = (
|
|
3616
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(M2 / (double)(n_valid - 1)));
|
|
3617
3617
|
}
|
|
3618
3618
|
}
|
|
3619
3619
|
ca_iter_state_finish(&st);
|
|
@@ -3663,7 +3663,7 @@ stddev_ki_native_object_body (VALUE arg)
|
|
|
3663
3663
|
VALUE vout = rb_ca_new_reduced(self, slab_axes, naxes, CA_FLOAT64, keep_axis);
|
|
3664
3664
|
CArray *co;
|
|
3665
3665
|
GetCArray(vout, co);
|
|
3666
|
-
|
|
3666
|
+
ca_u_float64_t *op = (ca_u_float64_t *) co->ptr;
|
|
3667
3667
|
int rc = ca_iter_state_init_l2(&st, ca, CA_SLAB_AXES,
|
|
3668
3668
|
slab_axes, naxes, 0);
|
|
3669
3669
|
if ( rc != CA_ITER_OK ) {
|
|
@@ -3687,7 +3687,7 @@ stddev_ki_native_object_body (VALUE arg)
|
|
|
3687
3687
|
op_mask = (boolean8_t *) co->mask->ptr;
|
|
3688
3688
|
}
|
|
3689
3689
|
op_mask[out_i] = 1;
|
|
3690
|
-
op[out_i++] = (
|
|
3690
|
+
op[out_i++] = (ca_u_float64_t) 0;
|
|
3691
3691
|
} else {
|
|
3692
3692
|
VALUE mean = rb_funcall(sum, rb_intern("/"), 1, LONG2NUM(n_valid));
|
|
3693
3693
|
/* Pass 2: M2 = Σ (x - mean)² */
|
|
@@ -3695,7 +3695,7 @@ stddev_ki_native_object_body (VALUE arg)
|
|
|
3695
3695
|
ca_size_t __unused_mc = 0;
|
|
3696
3696
|
CA_SLAB_REDUCE_T_EX(VALUE, st, p, m, M2, INT2FIX(0), VALUE __d = rb_funcall(v, rb_intern("-"), 1, mean);
|
|
3697
3697
|
M2 = rb_funcall(M2, rb_intern("+"), 1, rb_funcall(__d, rb_intern("*"), 1, __d)), __unused_mc);
|
|
3698
|
-
op[out_i++] = (
|
|
3698
|
+
op[out_i++] = (ca_u_float64_t)(ca_sqrt_clamp(NUM2DBL(rb_funcall(M2, rb_intern("/"), 1, LONG2NUM(n_valid - 1)))));
|
|
3699
3699
|
}
|
|
3700
3700
|
}
|
|
3701
3701
|
ca_iter_state_finish(&st);
|