carray 3.0.2 → 3.0.4
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 +568 -0
- data/README.md +6 -6
- data/carray.gemspec +1 -1
- data/ext/ca_axis_descriptor.h +27 -24
- data/ext/ca_axis_dispatch.c +220 -0
- data/ext/ca_axis_group.c +201 -123
- data/ext/ca_binop_dispatch.c +46 -52
- data/ext/ca_binop_dispatch.h +1 -1
- data/ext/ca_categorical_iterator.c +249 -183
- data/ext/ca_compare.c +7 -12
- data/ext/ca_for_buffer.h +21 -68
- data/ext/ca_group_iter.c +38 -23
- data/ext/ca_kernel_iterator.c +1765 -2076
- data/ext/ca_kernel_iterator.h +584 -566
- data/ext/ca_monop_dispatch.c +86 -63
- data/ext/ca_monop_dispatch.h +5 -0
- data/ext/ca_obj_array.c +223 -56
- data/ext/ca_obj_bincmp.c +172 -138
- data/ext/ca_obj_binop.c +116 -230
- data/ext/ca_obj_bitarray.c +40 -26
- data/ext/ca_obj_bitfield.c +100 -68
- data/ext/ca_obj_block.c +19 -9
- data/ext/ca_obj_byte_swap.c +45 -46
- data/ext/ca_obj_const_string.c +269 -44
- data/ext/ca_obj_face.c +612 -89
- data/ext/ca_obj_face.h +111 -47
- data/ext/ca_obj_fake.c +36 -79
- data/ext/ca_obj_farray.c +7 -3
- data/ext/ca_obj_field.c +33 -8
- data/ext/ca_obj_fixlen_string.c +23 -24
- data/ext/ca_obj_grid.c +541 -210
- data/ext/ca_obj_meld.c +331 -111
- data/ext/ca_obj_moncmp.c +80 -65
- data/ext/ca_obj_monop.c +177 -149
- data/ext/ca_obj_object.c +664 -248
- data/ext/ca_obj_record.c +63 -23
- data/ext/ca_obj_reduce.c +18 -16
- data/ext/ca_obj_refer.c +140 -58
- data/ext/ca_obj_remap.c +85 -24
- data/ext/ca_obj_repeat.c +24 -9
- data/ext/ca_obj_roll.c +121 -16
- data/ext/ca_obj_select.c +61 -58
- data/ext/ca_obj_select_axis.c +73 -107
- data/ext/ca_obj_shift.c +32 -102
- data/ext/ca_obj_stack.c +372 -122
- data/ext/ca_obj_stride.c +348 -140
- data/ext/ca_obj_string.c +88 -22
- data/ext/ca_obj_tile.c +38 -21
- data/ext/ca_obj_time.c +45 -31
- data/ext/ca_obj_timedelta.c +43 -29
- data/ext/ca_obj_transpose.c +17 -6
- data/ext/ca_obj_triop.c +125 -141
- data/ext/ca_obj_window.c +330 -44
- data/ext/ca_op_ipower.c +24 -11
- data/ext/ca_op_powi.h +57 -30
- data/ext/ca_pow5_table.h +656 -0
- data/ext/ca_sort_kernels.h +70 -0
- data/ext/ca_sweep_engine.c +104 -81
- data/ext/ca_sweep_engine.h +7 -20
- data/ext/ca_triop_dispatch.c +4 -1
- data/ext/ca_triop_dispatch.h +5 -2
- data/ext/caframe_csv_reader.c +542 -0
- data/ext/carray.h +241 -92
- data/ext/carray_access.c +608 -276
- data/ext/carray_address_basis.c +494 -97
- data/ext/carray_attribute.c +129 -4
- data/ext/carray_bincount.c +39 -7
- data/ext/carray_broadcast.c +56 -19
- data/ext/carray_build_flags.h +1 -1
- data/ext/carray_call_cfunc.c +108 -28
- data/ext/carray_cast.c +1576 -223
- data/ext/carray_cast_func.rb +77 -24
- data/ext/carray_class.c +4 -3
- data/ext/carray_conversion.c +208 -75
- data/ext/carray_copy.c +82 -24
- data/ext/carray_core.c +646 -162
- data/ext/carray_count.c +171 -88
- data/ext/carray_element.c +94 -60
- data/ext/carray_factorize.c +670 -324
- data/ext/carray_generate.c +260 -83
- data/ext/carray_histogram.c +209 -106
- data/ext/carray_hold.c +14 -16
- data/ext/carray_index_classifier.c +422 -243
- data/ext/carray_internal.h +692 -3
- data/ext/carray_kernels_bincmp.c +7 -0
- data/ext/carray_kernels_binop.c +487 -120
- data/ext/carray_kernels_init.c +653 -50
- data/ext/carray_kernels_moncmp.c +15 -8
- data/ext/carray_kernels_monop.c +99 -43
- data/ext/carray_kernels_reduce_aggregate.c +3925 -6112
- data/ext/carray_kernels_reduce_boolean.c +112 -36
- data/ext/carray_kernels_reduce_cumulative.c +2127 -6903
- data/ext/carray_kernels_reduce_extreme.c +3032 -2892
- data/ext/carray_kernels_reduce_variance.c +439 -500
- data/ext/carray_kernels_scan.c +1097 -488
- data/ext/carray_kernels_search.c +3787 -2176
- data/ext/carray_kernels_sort.c +1200 -920
- data/ext/carray_kernels_triop.c +479 -7
- data/ext/carray_key_windows.c +216 -0
- data/ext/carray_lazy.c +967 -153
- data/ext/carray_loop.c +81 -65
- data/ext/carray_mask.c +910 -324
- data/ext/carray_math_kernel.h +1 -0
- data/ext/carray_median_percentile.c +299 -100
- data/ext/carray_memory_view.c +872 -758
- data/ext/carray_operator.c +1171 -364
- data/ext/carray_order.c +505 -133
- data/ext/carray_partition.c +112 -65
- data/ext/carray_random.c +327 -239
- data/ext/carray_round.c +273 -0
- data/ext/carray_scatter.c +346 -78
- data/ext/carray_segment.c +257 -0
- data/ext/carray_slab.c +249 -86
- data/ext/carray_sort.c +224 -227
- data/ext/carray_sort_kernel.c +8 -1
- data/ext/carray_struct.c +118 -39
- data/ext/carray_test.c +193 -69
- data/ext/carray_time_text.c +1182 -0
- data/ext/carray_undef.c +4 -0
- data/ext/carray_utils.c +579 -113
- data/ext/extconf.rb +27 -2
- data/ext/mk_call_cfunc.rb +19 -4
- data/ext/mk_pow5_table.rb +35 -0
- data/ext/mkkernel.rb +1202 -1014
- data/ext/ruby_carray.c +17 -5
- data/ext/version.h +4 -4
- data/ext/version.rb +4 -2
- data/lib/carray/attribute.rb +160 -17
- data/lib/carray/autoload_carray.rb +23 -27
- data/lib/carray/autoload_method_extension.rb +20 -5
- data/lib/carray/axis_group.rb +360 -63
- data/lib/carray/basics.rb +162 -28
- data/lib/carray/bincount_nd.rb +18 -2
- data/lib/carray/block_iterator.rb +231 -58
- data/lib/carray/boolean_reduce.rb +34 -42
- data/lib/carray/categorical.rb +242 -52
- data/lib/carray/categorical_iterator.rb +437 -827
- data/lib/carray/complex.rb +41 -34
- data/lib/carray/conditional.rb +150 -14
- data/lib/carray/const_string.rb +59 -4
- data/lib/carray/construct.rb +15 -11
- data/lib/carray/data_type_extension.rb +1 -0
- data/lib/carray/distance_limit.rb +77 -0
- data/lib/carray/fixlen_string.rb +7 -1
- data/lib/carray/frame/column_verbs.rb +70 -0
- data/lib/carray/frame/concat.rb +157 -6
- data/lib/carray/frame/convert.rb +82 -7
- data/lib/carray/frame/csv_parser.rb +688 -87
- data/lib/carray/frame/describe.rb +80 -0
- data/lib/carray/frame/frame.rb +369 -45
- data/lib/carray/frame/group.rb +631 -90
- data/lib/carray/frame/io.rb +506 -79
- data/lib/carray/frame/join.rb +411 -62
- data/lib/carray/frame/records.rb +116 -19
- data/lib/carray/frame/reshape.rb +455 -0
- data/lib/carray/frame/sort.rb +30 -18
- data/lib/carray/frame/verbs.rb +868 -61
- data/lib/carray/frame/windows.rb +117 -0
- data/lib/carray/frame.rb +4 -0
- data/lib/carray/fuse_source.rb +118 -2
- data/lib/carray/fusion.rb +257 -42
- data/lib/carray/histogram.rb +6 -1
- data/lib/carray/inspect.rb +54 -13
- data/lib/carray/iterator.rb +99 -9
- data/lib/carray/key_windows.rb +620 -0
- data/lib/carray/lazy.rb +216 -193
- data/lib/carray/mask_gap_fill.rb +112 -92
- data/lib/carray/math.rb +32 -19
- data/lib/carray/meld_reduce.rb +52 -21
- data/lib/carray/methods/align_addr.rb +8 -4
- data/lib/carray/methods/bin.rb +26 -18
- data/lib/carray/methods/bincount.rb +18 -2
- data/lib/carray/methods/bit_string.rb +15 -4
- data/lib/carray/methods/choose.rb +16 -3
- data/lib/carray/methods/composition.rb +18 -10
- data/lib/carray/methods/factorize.rb +2 -2
- data/lib/carray/methods/gather_nd.rb +25 -5
- data/lib/carray/methods/insert_block.rb +9 -14
- data/lib/carray/methods/is_between.rb +59 -0
- data/lib/carray/methods/is_in.rb +140 -10
- data/lib/carray/methods/join.rb +2 -7
- data/lib/carray/methods/lag.rb +49 -0
- data/lib/carray/methods/locate_addr.rb +182 -45
- data/lib/carray/methods/mode.rb +18 -1
- data/lib/carray/methods/nunique.rb +11 -6
- data/lib/carray/methods/repeat.rb +1 -20
- data/lib/carray/methods/resize.rb +21 -23
- data/lib/carray/methods/snap.rb +34 -12
- data/lib/carray/methods/unique.rb +11 -2
- data/lib/carray/methods/value_counts.rb +4 -11
- data/lib/carray/record_order.rb +208 -0
- data/lib/carray/rng.rb +3 -0
- data/lib/carray/runtime.rb +65 -17
- data/lib/carray/segment_iterator.rb +1221 -0
- data/lib/carray/serialize.rb +214 -30
- data/lib/carray/slab_iterator.rb +101 -27
- data/lib/carray/stack.rb +10 -4
- data/lib/carray/string.rb +105 -5
- data/lib/carray/string_operation_extension.rb +12 -4
- data/lib/carray/struct.rb +137 -58
- data/lib/carray/struct_builder.rb +124 -17
- data/lib/carray/time.rb +1222 -186
- data/lib/carray/window_iterator.rb +242 -81
- data/lib/carray.rb +9 -2
- data/yard-stubs/ca_obj_array.rb +4 -4
- data/yard-stubs/ca_obj_bitarray.rb +7 -0
- data/yard-stubs/ca_obj_bitfield.rb +23 -12
- data/yard-stubs/ca_obj_fake.rb +1 -1
- data/yard-stubs/ca_obj_field.rb +5 -1
- data/yard-stubs/ca_obj_grid.rb +21 -10
- data/yard-stubs/ca_obj_refer.rb +5 -4
- data/yard-stubs/ca_obj_roll.rb +2 -3
- data/yard-stubs/ca_obj_shift.rb +5 -1
- data/yard-stubs/ca_obj_stride.rb +10 -7
- data/yard-stubs/ca_obj_tile.rb +1 -1
- data/yard-stubs/ca_obj_transpose.rb +1 -1
- data/yard-stubs/ca_obj_window.rb +9 -5
- data/yard-stubs/carray_access.rb +11 -5
- data/yard-stubs/carray_attribute.rb +0 -5
- data/yard-stubs/carray_broadcast.rb +1 -1
- data/yard-stubs/carray_cast.rb +88 -43
- data/yard-stubs/carray_conversion.rb +15 -2
- data/yard-stubs/carray_copy.rb +12 -5
- data/yard-stubs/carray_core.rb +3 -3
- data/yard-stubs/carray_count.rb +9 -0
- data/yard-stubs/carray_element.rb +10 -4
- data/yard-stubs/carray_generate.rb +21 -1
- data/yard-stubs/carray_lazy.rb +5 -1
- data/yard-stubs/carray_loop.rb +4 -1
- data/yard-stubs/carray_mask.rb +60 -12
- data/yard-stubs/carray_math.rb +52 -14
- data/yard-stubs/carray_median_percentile.rb +15 -8
- data/yard-stubs/carray_memory_view.rb +40 -23
- data/yard-stubs/carray_order.rb +61 -29
- data/yard-stubs/carray_random.rb +13 -4
- data/yard-stubs/carray_scatter.rb +21 -9
- data/yard-stubs/carray_segment.rb +72 -0
- data/yard-stubs/carray_slab.rb +10 -2
- data/yard-stubs/carray_sort.rb +49 -8
- data/yard-stubs/carray_test.rb +15 -3
- data/yard-stubs/carray_utils.rb +0 -26
- metadata +19 -5
- data/ext/ca_for_each_element.h +0 -239
- data/ext/carray_kernels_map.c +0 -3467
- data/lib/carray/arrow_tensor.rb +0 -401
- data/lib/carray/table.rb +0 -108
data/ext/ca_monop_dispatch.c
CHANGED
|
@@ -45,67 +45,67 @@
|
|
|
45
45
|
/* op_id -> kernel table lookup */
|
|
46
46
|
/* ------------------------------------------------------------------- */
|
|
47
47
|
|
|
48
|
-
/*
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
ca_monop_func_t
|
|
52
|
-
|
|
48
|
+
/* The kernel table of an op, or NULL for cast ops (op_id >=
|
|
49
|
+
CA_MONOP_CAST_BASE) and unknown op_ids; cast is handled specially in
|
|
50
|
+
xfer_stride via ca_cast_block. */
|
|
51
|
+
static ca_monop_func_t *
|
|
52
|
+
ca_monop_table_of (uint16_t op_id)
|
|
53
53
|
{
|
|
54
54
|
switch (op_id) {
|
|
55
|
-
case CA_MONOP_ZERO: return ca_monop_zero
|
|
56
|
-
case CA_MONOP_ONE: return ca_monop_one
|
|
57
|
-
case CA_MONOP_FRAC: return ca_monop_frac
|
|
58
|
-
case CA_MONOP_NEG: return ca_monop_neg
|
|
59
|
-
case CA_MONOP_BIT_NEG: return ca_monop_bit_neg
|
|
60
|
-
case CA_MONOP_ABS_I: return ca_monop_abs_i
|
|
61
|
-
case CA_MONOP_CONJ: return ca_monop_conj
|
|
62
|
-
case CA_MONOP_NOT: return ca_monop_not
|
|
63
|
-
|
|
64
|
-
case CA_MONOP_CEIL: return ca_monop_ceil
|
|
65
|
-
case CA_MONOP_FLOOR: return ca_monop_floor
|
|
66
|
-
case CA_MONOP_ROUND: return ca_monop_round
|
|
67
|
-
case CA_MONOP_RCP: return ca_monop_rcp
|
|
68
|
-
|
|
69
|
-
case CA_MONOP_RAD: return ca_monop_rad
|
|
70
|
-
case CA_MONOP_DEG: return ca_monop_deg
|
|
71
|
-
case CA_MONOP_SQRT: return ca_monop_sqrt
|
|
72
|
-
case CA_MONOP_EXP: return ca_monop_exp
|
|
73
|
-
case CA_MONOP_EXP2: return ca_monop_exp2
|
|
74
|
-
case CA_MONOP_EXP10: return ca_monop_exp10
|
|
75
|
-
case CA_MONOP_LOG: return ca_monop_log
|
|
76
|
-
case CA_MONOP_LOG10: return ca_monop_log10
|
|
77
|
-
case CA_MONOP_LOG2: return ca_monop_log2
|
|
78
|
-
case CA_MONOP_LOGB: return ca_monop_logb
|
|
79
|
-
case CA_MONOP_SIN: return ca_monop_sin
|
|
80
|
-
case CA_MONOP_COS: return ca_monop_cos
|
|
81
|
-
case CA_MONOP_TAN: return ca_monop_tan
|
|
82
|
-
case CA_MONOP_ASIN: return ca_monop_asin
|
|
83
|
-
case CA_MONOP_ACOS: return ca_monop_acos
|
|
84
|
-
case CA_MONOP_ATAN: return ca_monop_atan
|
|
85
|
-
case CA_MONOP_SINH: return ca_monop_sinh
|
|
86
|
-
case CA_MONOP_COSH: return ca_monop_cosh
|
|
87
|
-
case CA_MONOP_TANH: return ca_monop_tanh
|
|
88
|
-
case CA_MONOP_ASINH: return ca_monop_asinh
|
|
89
|
-
case CA_MONOP_ACOSH: return ca_monop_acosh
|
|
90
|
-
case CA_MONOP_ATANH: return ca_monop_atanh
|
|
91
|
-
|
|
92
|
-
case CA_MONOP_BYTE_SWAP: return ca_monop_byte_swap
|
|
93
|
-
|
|
94
|
-
case CA_MONOP_IMAG_I: return ca_monop_imag_i
|
|
95
|
-
|
|
96
|
-
case CA_MONOP_EXPM1: return ca_monop_expm1
|
|
97
|
-
case CA_MONOP_LOG1P: return ca_monop_log1p
|
|
98
|
-
case CA_MONOP_RSQRT: return ca_monop_rsqrt
|
|
99
|
-
case CA_MONOP_TRUNC: return ca_monop_trunc
|
|
100
|
-
case CA_MONOP_SQUARE: return ca_monop_square
|
|
101
|
-
|
|
102
|
-
case CA_MONOP_DEG_360: return ca_monop_deg_360
|
|
103
|
-
case CA_MONOP_DEG_180: return ca_monop_deg_180
|
|
104
|
-
case CA_MONOP_RAD_2PI: return ca_monop_rad_2pi
|
|
105
|
-
case CA_MONOP_RAD_PI: return ca_monop_rad_pi
|
|
106
|
-
|
|
107
|
-
case CA_MONOP_SIGN: return ca_monop_sign
|
|
108
|
-
case CA_MONOP_ARG_I: return ca_monop_arg_i
|
|
55
|
+
case CA_MONOP_ZERO: return ca_monop_zero;
|
|
56
|
+
case CA_MONOP_ONE: return ca_monop_one;
|
|
57
|
+
case CA_MONOP_FRAC: return ca_monop_frac;
|
|
58
|
+
case CA_MONOP_NEG: return ca_monop_neg;
|
|
59
|
+
case CA_MONOP_BIT_NEG: return ca_monop_bit_neg;
|
|
60
|
+
case CA_MONOP_ABS_I: return ca_monop_abs_i;
|
|
61
|
+
case CA_MONOP_CONJ: return ca_monop_conj;
|
|
62
|
+
case CA_MONOP_NOT: return ca_monop_not;
|
|
63
|
+
|
|
64
|
+
case CA_MONOP_CEIL: return ca_monop_ceil;
|
|
65
|
+
case CA_MONOP_FLOOR: return ca_monop_floor;
|
|
66
|
+
case CA_MONOP_ROUND: return ca_monop_round;
|
|
67
|
+
case CA_MONOP_RCP: return ca_monop_rcp;
|
|
68
|
+
|
|
69
|
+
case CA_MONOP_RAD: return ca_monop_rad;
|
|
70
|
+
case CA_MONOP_DEG: return ca_monop_deg;
|
|
71
|
+
case CA_MONOP_SQRT: return ca_monop_sqrt;
|
|
72
|
+
case CA_MONOP_EXP: return ca_monop_exp;
|
|
73
|
+
case CA_MONOP_EXP2: return ca_monop_exp2;
|
|
74
|
+
case CA_MONOP_EXP10: return ca_monop_exp10;
|
|
75
|
+
case CA_MONOP_LOG: return ca_monop_log;
|
|
76
|
+
case CA_MONOP_LOG10: return ca_monop_log10;
|
|
77
|
+
case CA_MONOP_LOG2: return ca_monop_log2;
|
|
78
|
+
case CA_MONOP_LOGB: return ca_monop_logb;
|
|
79
|
+
case CA_MONOP_SIN: return ca_monop_sin;
|
|
80
|
+
case CA_MONOP_COS: return ca_monop_cos;
|
|
81
|
+
case CA_MONOP_TAN: return ca_monop_tan;
|
|
82
|
+
case CA_MONOP_ASIN: return ca_monop_asin;
|
|
83
|
+
case CA_MONOP_ACOS: return ca_monop_acos;
|
|
84
|
+
case CA_MONOP_ATAN: return ca_monop_atan;
|
|
85
|
+
case CA_MONOP_SINH: return ca_monop_sinh;
|
|
86
|
+
case CA_MONOP_COSH: return ca_monop_cosh;
|
|
87
|
+
case CA_MONOP_TANH: return ca_monop_tanh;
|
|
88
|
+
case CA_MONOP_ASINH: return ca_monop_asinh;
|
|
89
|
+
case CA_MONOP_ACOSH: return ca_monop_acosh;
|
|
90
|
+
case CA_MONOP_ATANH: return ca_monop_atanh;
|
|
91
|
+
|
|
92
|
+
case CA_MONOP_BYTE_SWAP: return ca_monop_byte_swap;
|
|
93
|
+
|
|
94
|
+
case CA_MONOP_IMAG_I: return ca_monop_imag_i;
|
|
95
|
+
|
|
96
|
+
case CA_MONOP_EXPM1: return ca_monop_expm1;
|
|
97
|
+
case CA_MONOP_LOG1P: return ca_monop_log1p;
|
|
98
|
+
case CA_MONOP_RSQRT: return ca_monop_rsqrt;
|
|
99
|
+
case CA_MONOP_TRUNC: return ca_monop_trunc;
|
|
100
|
+
case CA_MONOP_SQUARE: return ca_monop_square;
|
|
101
|
+
|
|
102
|
+
case CA_MONOP_DEG_360: return ca_monop_deg_360;
|
|
103
|
+
case CA_MONOP_DEG_180: return ca_monop_deg_180;
|
|
104
|
+
case CA_MONOP_RAD_2PI: return ca_monop_rad_2pi;
|
|
105
|
+
case CA_MONOP_RAD_PI: return ca_monop_rad_pi;
|
|
106
|
+
|
|
107
|
+
case CA_MONOP_SIGN: return ca_monop_sign;
|
|
108
|
+
case CA_MONOP_ARG_I: return ca_monop_arg_i;
|
|
109
109
|
|
|
110
110
|
default:
|
|
111
111
|
/* Cast ops or unknown — caller handles cast specially. */
|
|
@@ -113,15 +113,38 @@ ca_monop_kernel_lookup (uint16_t op_id, int8_t in_data_type)
|
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
+
/* Returns the kernel for the given input data_type. Returns NULL for
|
|
117
|
+
cast ops and unknown op_ids. */
|
|
118
|
+
ca_monop_func_t
|
|
119
|
+
ca_monop_kernel_lookup (uint16_t op_id, int8_t in_data_type)
|
|
120
|
+
{
|
|
121
|
+
ca_monop_func_t *table = ca_monop_table_of(op_id);
|
|
122
|
+
return table ? table[in_data_type] : NULL;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* The op id whose kernel table is `table`, or -1 for a table no op id
|
|
126
|
+
names. */
|
|
127
|
+
int
|
|
128
|
+
ca_monop_op_id_of_table (ca_monop_func_t table[])
|
|
129
|
+
{
|
|
130
|
+
int op_id;
|
|
131
|
+
for ( op_id = 0; op_id < CA_MONOP_CAST_BASE; op_id++ ) {
|
|
132
|
+
if ( ca_monop_table_of((uint16_t) op_id) == table ) return op_id;
|
|
133
|
+
}
|
|
134
|
+
return -1;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
116
139
|
/* ------------------------------------------------------------------- */
|
|
117
140
|
/* op category predicates */
|
|
118
141
|
/* ------------------------------------------------------------------- */
|
|
119
142
|
|
|
120
|
-
/* True if op widens integer
|
|
143
|
+
/* True if op widens an integer parent to CA_FLOAT64. False for
|
|
121
144
|
preserve ops and cast ops. Widening ops are enumerated explicitly
|
|
122
145
|
because they were added in multiple groups outside the original
|
|
123
146
|
contiguous WIDENING_BEGIN..WIDENING_END range. */
|
|
124
|
-
|
|
147
|
+
int
|
|
125
148
|
ca_monop_is_widening (uint16_t op_id)
|
|
126
149
|
{
|
|
127
150
|
if ( op_id >= CA_MONOP_WIDENING_BEGIN && op_id < CA_MONOP_WIDENING_END ) {
|
|
@@ -170,8 +193,8 @@ ca_lazy_promote_monop (uint16_t op_id, int8_t in_data_type)
|
|
|
170
193
|
return (int8_t)(op_id - CA_MONOP_CAST_BASE);
|
|
171
194
|
}
|
|
172
195
|
if ( ca_monop_is_widening(op_id) ) {
|
|
173
|
-
/* integer → f64, else preserve.
|
|
174
|
-
|
|
196
|
+
/* integer → f64, else preserve. A boolean parent never reaches a
|
|
197
|
+
widening op: the builder refuses it, as the eager monop does. */
|
|
175
198
|
if ( in_data_type < CA_FLOAT32 ) return CA_FLOAT64;
|
|
176
199
|
return in_data_type;
|
|
177
200
|
}
|
data/ext/ca_monop_dispatch.h
CHANGED
|
@@ -190,10 +190,15 @@ extern ca_monop_func_t ca_monop_arg_i [CA_NTYPE];
|
|
|
190
190
|
/* Look up the per-data_type kernel for a normal monop op_id. Returns NULL
|
|
191
191
|
for cast op_ids (caller handles cast via ca_cast_block). */
|
|
192
192
|
ca_monop_func_t ca_monop_kernel_lookup (uint16_t op_id, int8_t in_data_type);
|
|
193
|
+
int ca_monop_op_id_of_table (ca_monop_func_t table[]);
|
|
193
194
|
|
|
194
195
|
/* Returns true iff op_id encodes a cast operation. */
|
|
195
196
|
int ca_monop_is_cast (uint16_t op_id);
|
|
196
197
|
|
|
198
|
+
/* Returns true iff op_id widens an integer parent to CA_FLOAT64 (the
|
|
199
|
+
math functions: sqrt, sin, exp, ...). */
|
|
200
|
+
int ca_monop_is_widening (uint16_t op_id);
|
|
201
|
+
|
|
197
202
|
/* Phase 6 P.6.3: returns true iff op_id is a "writable view" op
|
|
198
203
|
(= cast or byte_swap). These ops:
|
|
199
204
|
- support writable view lifecycle (CA_FLAG_READ_ONLY not set)
|