carray 3.0.1 → 3.0.3
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 +824 -0
- data/README.md +5 -6
- data/carray.gemspec +1 -1
- data/ext/ca_axis_dispatch.c +258 -4
- data/ext/ca_axis_group.c +368 -184
- data/ext/ca_binop_dispatch.c +54 -32
- data/ext/ca_binop_dispatch.h +1 -0
- data/ext/ca_categorical_iterator.c +90 -41
- data/ext/ca_compare.c +8 -2
- data/ext/ca_for_buffer.h +21 -68
- data/ext/ca_group_iter.c +27 -11
- data/ext/ca_kernel_iterator.c +960 -245
- data/ext/ca_kernel_iterator.h +352 -181
- data/ext/ca_monop_dispatch.c +4 -4
- data/ext/ca_monop_dispatch.h +4 -0
- data/ext/ca_obj_array.c +194 -42
- data/ext/ca_obj_bincmp.c +152 -121
- data/ext/ca_obj_binop.c +107 -210
- data/ext/ca_obj_bitarray.c +37 -24
- data/ext/ca_obj_bitfield.c +95 -62
- data/ext/ca_obj_block.c +5 -4
- data/ext/ca_obj_byte_swap.c +40 -40
- data/ext/ca_obj_const_string.c +180 -50
- data/ext/ca_obj_face.c +428 -62
- data/ext/ca_obj_face.h +107 -47
- data/ext/ca_obj_fake.c +21 -50
- data/ext/ca_obj_farray.c +1 -0
- data/ext/ca_obj_field.c +16 -3
- data/ext/ca_obj_fixlen_string.c +39 -26
- data/ext/ca_obj_grid.c +181 -124
- data/ext/ca_obj_meld.c +235 -55
- data/ext/ca_obj_moncmp.c +61 -61
- data/ext/ca_obj_monop.c +125 -107
- data/ext/ca_obj_object.c +551 -233
- data/ext/ca_obj_record.c +51 -16
- data/ext/ca_obj_reduce.c +5 -8
- data/ext/ca_obj_refer.c +117 -33
- data/ext/ca_obj_remap.c +57 -17
- data/ext/ca_obj_repeat.c +21 -5
- data/ext/ca_obj_roll.c +115 -11
- data/ext/ca_obj_select.c +88 -75
- data/ext/ca_obj_select_axis.c +58 -60
- data/ext/ca_obj_shift.c +22 -102
- data/ext/ca_obj_stack.c +223 -123
- data/ext/ca_obj_stride.c +267 -35
- data/ext/ca_obj_string.c +25 -22
- data/ext/ca_obj_tile.c +32 -16
- data/ext/ca_obj_time.c +23 -25
- data/ext/ca_obj_timedelta.c +21 -23
- data/ext/ca_obj_transpose.c +12 -3
- data/ext/ca_obj_triop.c +110 -117
- data/ext/ca_obj_window.c +157 -29
- data/ext/ca_op_ipower.c +25 -13
- data/ext/ca_op_powi.h +57 -30
- data/ext/ca_pow5_table.h +656 -0
- data/ext/ca_rng_normal.h +42 -0
- data/ext/ca_rng_xoshiro256pp.h +105 -0
- data/ext/ca_sort_kernels.h +70 -0
- data/ext/ca_sweep_engine.c +385 -198
- data/ext/ca_sweep_engine.h +31 -23
- data/ext/ca_triop_dispatch.c +4 -1
- data/ext/ca_triop_dispatch.h +5 -2
- data/ext/caframe_csv_reader.c +463 -0
- data/ext/carray.h +90 -28
- data/ext/carray_access.c +487 -231
- data/ext/carray_address_basis.c +731 -0
- data/ext/carray_attribute.c +45 -3
- data/ext/carray_bincount.c +32 -2
- data/ext/carray_broadcast.c +49 -17
- data/ext/carray_call_cfunc.c +667 -511
- data/ext/carray_cast.c +1556 -247
- data/ext/carray_cast_func.rb +34 -21
- data/ext/carray_conversion.c +197 -73
- data/ext/carray_copy.c +84 -38
- data/ext/carray_core.c +591 -119
- data/ext/carray_count.c +148 -96
- data/ext/carray_element.c +18 -27
- data/ext/carray_factorize.c +604 -291
- data/ext/carray_generate.c +76 -40
- data/ext/carray_histogram.c +152 -94
- data/ext/carray_hold.c +2 -1
- data/ext/carray_index_classifier.c +63 -96
- data/ext/carray_internal.h +400 -1
- data/ext/carray_lazy.c +834 -79
- data/ext/carray_loop.c +88 -66
- data/ext/carray_mask.c +705 -324
- data/ext/carray_math_kernel.h +1 -0
- data/ext/carray_median_percentile.c +263 -63
- data/ext/carray_memory_view.c +254 -248
- data/ext/carray_operator.c +1093 -363
- data/ext/carray_order.c +133 -69
- data/ext/carray_partition.c +102 -56
- data/ext/carray_random.c +582 -204
- data/ext/carray_scatter.c +308 -65
- data/ext/carray_segment.c +257 -0
- data/ext/carray_slab.c +183 -70
- data/ext/carray_sort.c +235 -240
- data/ext/carray_sort_kernel.c +8 -1
- data/ext/carray_struct.c +99 -21
- data/ext/carray_test.c +167 -64
- data/ext/carray_time_text.c +1182 -0
- data/ext/carray_utils.c +363 -98
- data/ext/extconf.rb +27 -2
- data/ext/mk_call_cfunc.rb +103 -118
- data/ext/mk_pow5_table.rb +35 -0
- data/ext/mkkernel.rb +1349 -851
- data/ext/ruby_carray.c +17 -2
- data/ext/version.h +4 -4
- data/ext/version.rb +4 -2
- data/lib/carray/attribute.rb +39 -0
- data/lib/carray/autoload_carray.rb +24 -3
- data/lib/carray/autoload_method_extension.rb +18 -0
- data/lib/carray/axis_group.rb +245 -20
- data/lib/carray/basics.rb +95 -25
- data/lib/carray/bincount_nd.rb +6 -0
- data/lib/carray/block_iterator.rb +200 -54
- data/lib/carray/boolean_reduce.rb +21 -29
- data/lib/carray/categorical.rb +244 -59
- data/lib/carray/categorical_iterator.rb +391 -757
- data/lib/carray/complex.rb +36 -29
- data/lib/carray/conditional.rb +94 -7
- data/lib/carray/const_string.rb +177 -27
- data/lib/carray/construct.rb +40 -0
- data/lib/carray/data_type_extension.rb +3 -0
- data/lib/carray/data_type_limits.rb +91 -0
- data/lib/carray/fixlen_string.rb +1 -1
- data/lib/carray/frame/concat.rb +157 -6
- data/lib/carray/frame/convert.rb +13 -7
- data/lib/carray/frame/csv_parser.rb +590 -76
- data/lib/carray/frame/describe.rb +79 -0
- data/lib/carray/frame/frame.rb +205 -35
- data/lib/carray/frame/group.rb +199 -40
- data/lib/carray/frame/io.rb +452 -60
- data/lib/carray/frame/join.rb +134 -46
- data/lib/carray/frame/records.rb +54 -19
- data/lib/carray/frame/reshape.rb +448 -0
- data/lib/carray/frame/sort.rb +26 -2
- data/lib/carray/frame/verbs.rb +726 -56
- data/lib/carray/frame.rb +2 -0
- data/lib/carray/fuse_source.rb +111 -2
- data/lib/carray/fusion.rb +229 -38
- data/lib/carray/inspect.rb +71 -20
- data/lib/carray/iterator.rb +157 -2
- data/lib/carray/lazy.rb +54 -67
- data/lib/carray/mask_gap_fill.rb +66 -50
- data/lib/carray/math.rb +32 -19
- data/lib/carray/meld_reduce.rb +40 -7
- data/lib/carray/methods/align_addr.rb +8 -4
- data/lib/carray/methods/bincount.rb +2 -2
- data/lib/carray/methods/bit_string.rb +14 -3
- data/lib/carray/methods/composition.rb +16 -10
- data/lib/carray/methods/discovery_along.rb +74 -0
- data/lib/carray/methods/factorize.rb +50 -0
- data/lib/carray/methods/gather_nd.rb +13 -2
- data/lib/carray/methods/insert_block.rb +9 -14
- data/lib/carray/methods/is_in.rb +130 -6
- data/lib/carray/methods/join.rb +1 -1
- data/lib/carray/methods/locate_addr.rb +235 -21
- data/lib/carray/methods/mask_duplicates.rb +35 -1
- data/lib/carray/methods/mode.rb +18 -1
- data/lib/carray/methods/nunique.rb +22 -1
- data/lib/carray/methods/repeat.rb +91 -0
- data/lib/carray/methods/resize.rb +21 -23
- data/lib/carray/methods/snap.rb +34 -12
- data/lib/carray/methods/unique.rb +52 -3
- data/lib/carray/record_order.rb +208 -0
- data/lib/carray/rng.rb +86 -0
- data/lib/carray/runtime.rb +14 -11
- data/lib/carray/segment_iterator.rb +990 -0
- data/lib/carray/serialize.rb +197 -27
- data/lib/carray/slab_iterator.rb +109 -40
- data/lib/carray/stack.rb +10 -4
- data/lib/carray/string_operation_extension.rb +9 -4
- data/lib/carray/struct.rb +142 -51
- data/lib/carray/struct_builder.rb +110 -14
- data/lib/carray/table.rb +2 -2
- data/lib/carray/time.rb +535 -105
- data/lib/carray/window_iterator.rb +259 -82
- data/lib/carray.rb +4 -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_block.rb +2 -7
- data/yard-stubs/ca_obj_fake.rb +1 -1
- data/yard-stubs/ca_obj_field.rb +1 -1
- data/yard-stubs/ca_obj_refer.rb +3 -3
- data/yard-stubs/ca_obj_roll.rb +0 -1
- data/yard-stubs/ca_obj_stride.rb +10 -7
- data/yard-stubs/ca_obj_transpose.rb +1 -1
- data/yard-stubs/ca_obj_window.rb +11 -4
- data/yard-stubs/carray_access.rb +6 -5
- data/yard-stubs/carray_broadcast.rb +2 -2
- data/yard-stubs/carray_cast.rb +78 -43
- data/yard-stubs/carray_conversion.rb +13 -1
- data/yard-stubs/carray_copy.rb +8 -3
- data/yard-stubs/carray_core.rb +3 -83
- data/yard-stubs/carray_count.rb +16 -2
- data/yard-stubs/carray_lazy.rb +210 -1
- data/yard-stubs/carray_loop.rb +4 -1
- data/yard-stubs/carray_mask.rb +34 -10
- data/yard-stubs/carray_math.rb +1499 -4
- data/yard-stubs/carray_median_percentile.rb +26 -8
- data/yard-stubs/carray_order.rb +43 -82
- data/yard-stubs/carray_scatter.rb +10 -3
- data/yard-stubs/carray_segment.rb +72 -0
- data/yard-stubs/carray_slab.rb +11 -8
- data/yard-stubs/carray_sort.rb +50 -8
- data/yard-stubs/carray_test.rb +10 -0
- data/yard-stubs/carray_utils.rb +0 -26
- metadata +19 -19
- data/ext/ca_for_each_element.h +0 -239
- data/ext/carray_build_flags.h +0 -3
- data/ext/carray_config.h +0 -28
- data/ext/carray_kernels_bincmp.c +0 -4446
- data/ext/carray_kernels_binop.c +0 -11001
- data/ext/carray_kernels_init.c +0 -1131
- data/ext/carray_kernels_map.c +0 -3467
- data/ext/carray_kernels_moncmp.c +0 -2097
- data/ext/carray_kernels_monop.c +0 -18313
- data/ext/carray_kernels_reduce_aggregate.c +0 -25837
- data/ext/carray_kernels_reduce_boolean.c +0 -330
- data/ext/carray_kernels_reduce_cumulative.c +0 -14593
- data/ext/carray_kernels_reduce_extreme.c +0 -16948
- data/ext/carray_kernels_reduce_variance.c +0 -3910
- data/ext/carray_kernels_scan.c +0 -3693
- data/ext/carray_kernels_search.c +0 -32138
- data/ext/carray_kernels_sort.c +0 -10626
- data/ext/carray_kernels_triop.c +0 -1392
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: carray
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.0.
|
|
4
|
+
version: 3.0.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- himotoyoshi
|
|
@@ -45,7 +45,6 @@ files:
|
|
|
45
45
|
- ext/ca_composite_dispatch.c
|
|
46
46
|
- ext/ca_composite_dispatch.h
|
|
47
47
|
- ext/ca_for_buffer.h
|
|
48
|
-
- ext/ca_for_each_element.h
|
|
49
48
|
- ext/ca_group_iter.c
|
|
50
49
|
- ext/ca_iter_substrate.h
|
|
51
50
|
- ext/ca_kernel_iterator.c
|
|
@@ -96,24 +95,27 @@ files:
|
|
|
96
95
|
- ext/ca_op_cmplx64.h
|
|
97
96
|
- ext/ca_op_ipower.c
|
|
98
97
|
- ext/ca_op_powi.h
|
|
98
|
+
- ext/ca_pow5_table.h
|
|
99
|
+
- ext/ca_rng_normal.h
|
|
100
|
+
- ext/ca_rng_xoshiro256pp.h
|
|
99
101
|
- ext/ca_sort_kernels.h
|
|
100
102
|
- ext/ca_sweep_engine.c
|
|
101
103
|
- ext/ca_sweep_engine.h
|
|
102
104
|
- ext/ca_transform_common.c
|
|
103
105
|
- ext/ca_triop_dispatch.c
|
|
104
106
|
- ext/ca_triop_dispatch.h
|
|
107
|
+
- ext/caframe_csv_reader.c
|
|
105
108
|
- ext/carray.h
|
|
106
109
|
- ext/carray_access.c
|
|
110
|
+
- ext/carray_address_basis.c
|
|
107
111
|
- ext/carray_attribute.c
|
|
108
112
|
- ext/carray_bincount.c
|
|
109
113
|
- ext/carray_broadcast.c
|
|
110
|
-
- ext/carray_build_flags.h
|
|
111
114
|
- ext/carray_call_cfunc.c
|
|
112
115
|
- ext/carray_call_cfunc.h
|
|
113
116
|
- ext/carray_cast.c
|
|
114
117
|
- ext/carray_cast_func.rb
|
|
115
118
|
- ext/carray_class.c
|
|
116
|
-
- ext/carray_config.h
|
|
117
119
|
- ext/carray_conversion.c
|
|
118
120
|
- ext/carray_copy.c
|
|
119
121
|
- ext/carray_core.c
|
|
@@ -127,21 +129,6 @@ files:
|
|
|
127
129
|
- ext/carray_index_classifier.c
|
|
128
130
|
- ext/carray_index_classifier.h
|
|
129
131
|
- ext/carray_internal.h
|
|
130
|
-
- ext/carray_kernels_bincmp.c
|
|
131
|
-
- ext/carray_kernels_binop.c
|
|
132
|
-
- ext/carray_kernels_init.c
|
|
133
|
-
- ext/carray_kernels_map.c
|
|
134
|
-
- ext/carray_kernels_moncmp.c
|
|
135
|
-
- ext/carray_kernels_monop.c
|
|
136
|
-
- ext/carray_kernels_reduce_aggregate.c
|
|
137
|
-
- ext/carray_kernels_reduce_boolean.c
|
|
138
|
-
- ext/carray_kernels_reduce_cumulative.c
|
|
139
|
-
- ext/carray_kernels_reduce_extreme.c
|
|
140
|
-
- ext/carray_kernels_reduce_variance.c
|
|
141
|
-
- ext/carray_kernels_scan.c
|
|
142
|
-
- ext/carray_kernels_search.c
|
|
143
|
-
- ext/carray_kernels_sort.c
|
|
144
|
-
- ext/carray_kernels_triop.c
|
|
145
132
|
- ext/carray_lazy.c
|
|
146
133
|
- ext/carray_loop.c
|
|
147
134
|
- ext/carray_mask.c
|
|
@@ -154,16 +141,19 @@ files:
|
|
|
154
141
|
- ext/carray_partition.c
|
|
155
142
|
- ext/carray_random.c
|
|
156
143
|
- ext/carray_scatter.c
|
|
144
|
+
- ext/carray_segment.c
|
|
157
145
|
- ext/carray_slab.c
|
|
158
146
|
- ext/carray_slab.h
|
|
159
147
|
- ext/carray_sort.c
|
|
160
148
|
- ext/carray_sort_kernel.c
|
|
161
149
|
- ext/carray_struct.c
|
|
162
150
|
- ext/carray_test.c
|
|
151
|
+
- ext/carray_time_text.c
|
|
163
152
|
- ext/carray_undef.c
|
|
164
153
|
- ext/carray_utils.c
|
|
165
154
|
- ext/extconf.rb
|
|
166
155
|
- ext/mk_call_cfunc.rb
|
|
156
|
+
- ext/mk_pow5_table.rb
|
|
167
157
|
- ext/mkkernel.rb
|
|
168
158
|
- ext/ruby_carray.c
|
|
169
159
|
- ext/version.h
|
|
@@ -186,16 +176,19 @@ files:
|
|
|
186
176
|
- lib/carray/construct.rb
|
|
187
177
|
- lib/carray/core_extensions.rb
|
|
188
178
|
- lib/carray/data_type_extension.rb
|
|
179
|
+
- lib/carray/data_type_limits.rb
|
|
189
180
|
- lib/carray/fixlen_string.rb
|
|
190
181
|
- lib/carray/frame.rb
|
|
191
182
|
- lib/carray/frame/concat.rb
|
|
192
183
|
- lib/carray/frame/convert.rb
|
|
193
184
|
- lib/carray/frame/csv_parser.rb
|
|
185
|
+
- lib/carray/frame/describe.rb
|
|
194
186
|
- lib/carray/frame/frame.rb
|
|
195
187
|
- lib/carray/frame/group.rb
|
|
196
188
|
- lib/carray/frame/io.rb
|
|
197
189
|
- lib/carray/frame/join.rb
|
|
198
190
|
- lib/carray/frame/records.rb
|
|
191
|
+
- lib/carray/frame/reshape.rb
|
|
199
192
|
- lib/carray/frame/sort.rb
|
|
200
193
|
- lib/carray/frame/verbs.rb
|
|
201
194
|
- lib/carray/fuse_source.rb
|
|
@@ -214,6 +207,8 @@ files:
|
|
|
214
207
|
- lib/carray/methods/broadcast.rb
|
|
215
208
|
- lib/carray/methods/choose.rb
|
|
216
209
|
- lib/carray/methods/composition.rb
|
|
210
|
+
- lib/carray/methods/discovery_along.rb
|
|
211
|
+
- lib/carray/methods/factorize.rb
|
|
217
212
|
- lib/carray/methods/gather_nd.rb
|
|
218
213
|
- lib/carray/methods/index.rb
|
|
219
214
|
- lib/carray/methods/insert_block.rb
|
|
@@ -224,13 +219,17 @@ files:
|
|
|
224
219
|
- lib/carray/methods/meshgrid.rb
|
|
225
220
|
- lib/carray/methods/mode.rb
|
|
226
221
|
- lib/carray/methods/nunique.rb
|
|
222
|
+
- lib/carray/methods/repeat.rb
|
|
227
223
|
- lib/carray/methods/resize.rb
|
|
228
224
|
- lib/carray/methods/snap.rb
|
|
229
225
|
- lib/carray/methods/string_format.rb
|
|
230
226
|
- lib/carray/methods/unique.rb
|
|
231
227
|
- lib/carray/methods/value_counts.rb
|
|
232
228
|
- lib/carray/mkmf.rb
|
|
229
|
+
- lib/carray/record_order.rb
|
|
230
|
+
- lib/carray/rng.rb
|
|
233
231
|
- lib/carray/runtime.rb
|
|
232
|
+
- lib/carray/segment_iterator.rb
|
|
234
233
|
- lib/carray/serialize.rb
|
|
235
234
|
- lib/carray/slab_iterator.rb
|
|
236
235
|
- lib/carray/stack.rb
|
|
@@ -278,6 +277,7 @@ files:
|
|
|
278
277
|
- yard-stubs/carray_order.rb
|
|
279
278
|
- yard-stubs/carray_random.rb
|
|
280
279
|
- yard-stubs/carray_scatter.rb
|
|
280
|
+
- yard-stubs/carray_segment.rb
|
|
281
281
|
- yard-stubs/carray_slab.rb
|
|
282
282
|
- yard-stubs/carray_sort.rb
|
|
283
283
|
- yard-stubs/carray_test.rb
|
data/ext/ca_for_each_element.h
DELETED
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
/* ---------------------------------------------------------------------------
|
|
2
|
-
*
|
|
3
|
-
* ca_for_each_element.h -- sweep ELEMENT macro family (single-array, lexical
|
|
4
|
-
* scope body) for ext authors.
|
|
5
|
-
*
|
|
6
|
-
* PROPOSAL_L0_AUTHOR_SURFACE L0.2a (2026-06-11). Builds on the sweep engine
|
|
7
|
-
* helper (ca_sweep_engine.{c,h}, L0.1) for the xfer_all-aware acquire/release
|
|
8
|
-
* lifecycle. Provides 5 macro forms for single-array element-wise loops
|
|
9
|
-
* with author-inline body and lexical-scope state capture.
|
|
10
|
-
*
|
|
11
|
-
* Forms (Q2 = gamma: READ by-value, INOUT / OUT by-lvalue):
|
|
12
|
-
*
|
|
13
|
-
* CA_FOR_EACH_ELEMENT(st1, ca, T, x)
|
|
14
|
-
* Read-only loop; per-iter x = cell value (T rvalue convention but
|
|
15
|
-
* declared lvalue for assignment). Mask policy: NO_MASK (raises if
|
|
16
|
-
* INPUT has mask; use _MASKED form to handle).
|
|
17
|
-
*
|
|
18
|
-
* CA_FOR_EACH_ELEMENT_MASKED(st1, ca, T, x, m)
|
|
19
|
-
* Read-only with mask byte m (1 = masked). Author inspects m and
|
|
20
|
-
* decides; m == 0 if source has no mask.
|
|
21
|
-
*
|
|
22
|
-
* CA_FOR_EACH_ELEMENT_INOUT(st2, ca_in, ca_out, T_IN, T_OUT, in, out)
|
|
23
|
-
* Map kernel; per-iter in = read input, body assigns to out (lvalue),
|
|
24
|
-
* out is written back to ca_out. Strict same-shape check on init
|
|
25
|
-
* (raises on mismatch). NO_MASK on input.
|
|
26
|
-
*
|
|
27
|
-
* CA_FOR_EACH_ELEMENT_INOUT_MASKED(st2, ca_in, ca_out, T_IN, T_OUT,
|
|
28
|
-
* in, out, m_in, m_out)
|
|
29
|
-
* Map kernel with mask; per-iter m_in = input mask byte (or 0 if no
|
|
30
|
-
* input mask), author writes m_out (1 = mark output cell masked) and
|
|
31
|
-
* out. m_out written back to ca_out's mask.
|
|
32
|
-
*
|
|
33
|
-
* CA_FOR_EACH_ELEMENT_OUT(st1, ca_out, T, out)
|
|
34
|
-
* Write-only; body assigns to out (lvalue). Use for init / iota /
|
|
35
|
-
* fill patterns. NO_MASK (output mask cleared).
|
|
36
|
-
*
|
|
37
|
-
* Usage pattern:
|
|
38
|
-
*
|
|
39
|
-
* ca_each_state_t st;
|
|
40
|
-
* double x;
|
|
41
|
-
* CA_FOR_EACH_ELEMENT(st, ca, double, x) {
|
|
42
|
-
* accumulator += x;
|
|
43
|
-
* }
|
|
44
|
-
*
|
|
45
|
-
* Constraints (same as CA_FOR_EACH_FIBER family):
|
|
46
|
-
* - State (st1 / st2) is author-declared on the stack.
|
|
47
|
-
* - `break;` from body exits cleanly (release runs in outer for's
|
|
48
|
-
* teardown clause).
|
|
49
|
-
* - `return;` from body LEAKS scratch buffers / attached views — do
|
|
50
|
-
* not return early from the macro body; restructure to break.
|
|
51
|
-
* - Macros are NOT statement-equivalent (expand to nested for); no
|
|
52
|
-
* trailing `else`.
|
|
53
|
-
* - `T` must be the data_type of `ca` (matched via ca->data_type and
|
|
54
|
-
* ca->bytes — engine does not auto-cast; use rb_ca_wrap_readonly /
|
|
55
|
-
* rb_ca_template_with_type at the call site if cast needed).
|
|
56
|
-
*
|
|
57
|
-
* --------------------------------------------------------------------------- */
|
|
58
|
-
|
|
59
|
-
#ifndef CA_FOR_EACH_ELEMENT_H
|
|
60
|
-
#define CA_FOR_EACH_ELEMENT_H
|
|
61
|
-
|
|
62
|
-
#include "carray.h"
|
|
63
|
-
#include "ca_sweep_engine.h"
|
|
64
|
-
|
|
65
|
-
/* Stack-allocated state holders for 1- and 2-operand sweep ELEMENT macros.
|
|
66
|
-
* Embeds the per-op bookkeeping arrays + the core ca_sweep_state_t in one
|
|
67
|
-
* struct so authors declare just one variable. */
|
|
68
|
-
|
|
69
|
-
typedef struct {
|
|
70
|
-
CArray *cx[1];
|
|
71
|
-
char *base[1];
|
|
72
|
-
ca_size_t stride[1];
|
|
73
|
-
char *owned_buf[1];
|
|
74
|
-
int attached[1];
|
|
75
|
-
char *base_orig[1];
|
|
76
|
-
ca_sweep_state_t core;
|
|
77
|
-
} ca_each_state_t;
|
|
78
|
-
|
|
79
|
-
typedef struct {
|
|
80
|
-
CArray *cx[2];
|
|
81
|
-
char *base[2];
|
|
82
|
-
ca_size_t stride[2];
|
|
83
|
-
char *owned_buf[2];
|
|
84
|
-
int attached[2];
|
|
85
|
-
char *base_orig[2];
|
|
86
|
-
ca_sweep_state_t core;
|
|
87
|
-
} ca_each_map_state_t;
|
|
88
|
-
|
|
89
|
-
/* Internal init helpers: wire the embedded arrays into core, set fsync /
|
|
90
|
-
* no_mask / src_label. Called via comma-expression inside the macro
|
|
91
|
-
* for-loop init clause. */
|
|
92
|
-
|
|
93
|
-
#define CA_SWEEP_WIRE_1_(_st1, _ca0, _fsync, _no_mask, _label) ( \
|
|
94
|
-
(_st1).cx[0] = (CArray *)(_ca0), \
|
|
95
|
-
(_st1).core.n_ops = 1, \
|
|
96
|
-
(_st1).core.fsync = (_fsync), \
|
|
97
|
-
(_st1).core.cx = (_st1).cx, \
|
|
98
|
-
(_st1).core.base = (_st1).base, \
|
|
99
|
-
(_st1).core.stride = (_st1).stride, \
|
|
100
|
-
(_st1).core.owned_buf = (_st1).owned_buf, \
|
|
101
|
-
(_st1).core.attached = (_st1).attached, \
|
|
102
|
-
(_st1).core.base_orig = (_st1).base_orig, \
|
|
103
|
-
(_st1).core.no_mask = (_no_mask), \
|
|
104
|
-
(_st1).core.src_label = (_label))
|
|
105
|
-
|
|
106
|
-
#define CA_SWEEP_WIRE_2_(_st2, _ca0, _ca1, _fsync, _no_mask, _label) ( \
|
|
107
|
-
(_st2).cx[0] = (CArray *)(_ca0), \
|
|
108
|
-
(_st2).cx[1] = (CArray *)(_ca1), \
|
|
109
|
-
(_st2).core.n_ops = 2, \
|
|
110
|
-
(_st2).core.fsync = (_fsync), \
|
|
111
|
-
(_st2).core.cx = (_st2).cx, \
|
|
112
|
-
(_st2).core.base = (_st2).base, \
|
|
113
|
-
(_st2).core.stride = (_st2).stride, \
|
|
114
|
-
(_st2).core.owned_buf = (_st2).owned_buf, \
|
|
115
|
-
(_st2).core.attached = (_st2).attached, \
|
|
116
|
-
(_st2).core.base_orig = (_st2).base_orig, \
|
|
117
|
-
(_st2).core.no_mask = (_no_mask), \
|
|
118
|
-
(_st2).core.src_label = (_label))
|
|
119
|
-
|
|
120
|
-
/* ---------- 5 author-facing macro forms ----------
|
|
121
|
-
*
|
|
122
|
-
* All 5 forms expand to a 3-level nested for:
|
|
123
|
-
* outer : acquire_chunked / release_chunked (= lifecycle scope)
|
|
124
|
-
* middle : ca_sweep_next_chunk loop (= chunk iteration)
|
|
125
|
-
* inner : per-cell loop within chunk_n
|
|
126
|
-
*
|
|
127
|
-
* Memory peak per AC2: INPUT non-alias views materialise into a single
|
|
128
|
-
* chunk scratch (~32KB at f64). m0 (= masked form) is chunk-sized too and
|
|
129
|
-
* re-gathered per chunk, so the macro reads at m0[k] -- indexed within the
|
|
130
|
-
* chunk, not by the flat cell index.
|
|
131
|
-
*
|
|
132
|
-
* For MASKED forms (m / m_in / m_out): when source has no mask, m0 is
|
|
133
|
-
* NULL and m / m_in == 0 always. m_out writes during INOUT_MASKED are
|
|
134
|
-
* silently dropped if no INPUT mask exists (= AC4 mask-creation on
|
|
135
|
-
* INOUT MASKED with no source mask is a future enhancement; current
|
|
136
|
-
* convention follows the FIBER family's MASKED form).
|
|
137
|
-
*/
|
|
138
|
-
|
|
139
|
-
/* (1) READ-only, NO_MASK */
|
|
140
|
-
#define CA_FOR_EACH_ELEMENT(_st1, _ca, T, x) \
|
|
141
|
-
for ( int __cfe_init = (CA_SWEEP_WIRE_1_((_st1), (_ca), "0", 1, \
|
|
142
|
-
"CA_FOR_EACH_ELEMENT"), \
|
|
143
|
-
ca_sweep_acquire_chunked(&(_st1).core), 1); \
|
|
144
|
-
__cfe_init; \
|
|
145
|
-
__cfe_init = 0, ca_sweep_release_chunked(&(_st1).core) ) \
|
|
146
|
-
for ( ; ca_sweep_next_chunk(&(_st1).core); ) \
|
|
147
|
-
for ( ca_size_t __cfe_k = 0; \
|
|
148
|
-
__cfe_k < (_st1).core.chunk_n \
|
|
149
|
-
&& (((x) = *(T *)((_st1).core.base[0] \
|
|
150
|
-
+ __cfe_k * (_st1).core.stride[0])), 1); \
|
|
151
|
-
__cfe_k++ )
|
|
152
|
-
|
|
153
|
-
/* (2) READ-only, MASKED (m is 1 if masked, 0 otherwise; 0 if no source mask) */
|
|
154
|
-
#define CA_FOR_EACH_ELEMENT_MASKED(_st1, _ca, T, x, m) \
|
|
155
|
-
for ( int __cfem_init = (CA_SWEEP_WIRE_1_((_st1), (_ca), "0", 0, \
|
|
156
|
-
"CA_FOR_EACH_ELEMENT_MASKED"), \
|
|
157
|
-
ca_sweep_acquire_chunked(&(_st1).core), 1); \
|
|
158
|
-
__cfem_init; \
|
|
159
|
-
__cfem_init = 0, ca_sweep_release_chunked(&(_st1).core) ) \
|
|
160
|
-
for ( ; ca_sweep_next_chunk(&(_st1).core); ) \
|
|
161
|
-
for ( ca_size_t __cfem_k = 0; \
|
|
162
|
-
__cfem_k < (_st1).core.chunk_n \
|
|
163
|
-
&& (((x) = *(T *)((_st1).core.base[0] \
|
|
164
|
-
+ __cfem_k * (_st1).core.stride[0])), \
|
|
165
|
-
((m) = (_st1).core.m0 \
|
|
166
|
-
? (_st1).core.m0[__cfem_k] \
|
|
167
|
-
: (boolean8_t)0), \
|
|
168
|
-
1); \
|
|
169
|
-
__cfem_k++ )
|
|
170
|
-
|
|
171
|
-
/* (3) INOUT map (NO_MASK). Strict same-shape check pre-acquire. */
|
|
172
|
-
#define CA_FOR_EACH_ELEMENT_INOUT(_st2, _ca_in, _ca_out, \
|
|
173
|
-
T_IN, T_OUT, in, out) \
|
|
174
|
-
for ( int __cfei_init = ( \
|
|
175
|
-
ca_sweep_check_same_shape((CArray *)(_ca_in), \
|
|
176
|
-
(CArray *)(_ca_out), \
|
|
177
|
-
"CA_FOR_EACH_ELEMENT_INOUT"), \
|
|
178
|
-
CA_SWEEP_WIRE_2_((_st2), (_ca_in), (_ca_out), "01", 1, \
|
|
179
|
-
"CA_FOR_EACH_ELEMENT_INOUT"), \
|
|
180
|
-
ca_sweep_acquire_chunked(&(_st2).core), \
|
|
181
|
-
1); \
|
|
182
|
-
__cfei_init; \
|
|
183
|
-
__cfei_init = 0, ca_sweep_release_chunked(&(_st2).core) ) \
|
|
184
|
-
for ( ; ca_sweep_next_chunk(&(_st2).core); ) \
|
|
185
|
-
for ( ca_size_t __cfei_k = 0; \
|
|
186
|
-
__cfei_k < (_st2).core.chunk_n \
|
|
187
|
-
&& (((in) = *(T_IN *)((_st2).core.base[0] \
|
|
188
|
-
+ __cfei_k * (_st2).core.stride[0])), \
|
|
189
|
-
1); \
|
|
190
|
-
(*(T_OUT *)((_st2).core.base[1] \
|
|
191
|
-
+ __cfei_k * (_st2).core.stride[1]) = (out)), \
|
|
192
|
-
__cfei_k++ )
|
|
193
|
-
|
|
194
|
-
/* (4) INOUT map (MASKED). Author writes m_out per cell. */
|
|
195
|
-
#define CA_FOR_EACH_ELEMENT_INOUT_MASKED(_st2, _ca_in, _ca_out, \
|
|
196
|
-
T_IN, T_OUT, \
|
|
197
|
-
in, out, m_in, m_out) \
|
|
198
|
-
for ( int __cfeim_init = ( \
|
|
199
|
-
ca_sweep_check_same_shape((CArray *)(_ca_in), \
|
|
200
|
-
(CArray *)(_ca_out), \
|
|
201
|
-
"CA_FOR_EACH_ELEMENT_INOUT_MASKED"), \
|
|
202
|
-
CA_SWEEP_WIRE_2_((_st2), (_ca_in), (_ca_out), "01", 0, \
|
|
203
|
-
"CA_FOR_EACH_ELEMENT_INOUT_MASKED"), \
|
|
204
|
-
ca_sweep_acquire_chunked(&(_st2).core), \
|
|
205
|
-
1); \
|
|
206
|
-
__cfeim_init; \
|
|
207
|
-
__cfeim_init = 0, ca_sweep_release_chunked(&(_st2).core) ) \
|
|
208
|
-
for ( ; ca_sweep_next_chunk(&(_st2).core); ) \
|
|
209
|
-
for ( ca_size_t __cfeim_k = 0; \
|
|
210
|
-
__cfeim_k < (_st2).core.chunk_n \
|
|
211
|
-
&& (((in) = *(T_IN *)((_st2).core.base[0] \
|
|
212
|
-
+ __cfeim_k * (_st2).core.stride[0])), \
|
|
213
|
-
((m_in) = (_st2).core.m0 \
|
|
214
|
-
? (_st2).core.m0[__cfeim_k] \
|
|
215
|
-
: (boolean8_t)0), \
|
|
216
|
-
((m_out) = (m_in)), \
|
|
217
|
-
1); \
|
|
218
|
-
(*(T_OUT *)((_st2).core.base[1] \
|
|
219
|
-
+ __cfeim_k * (_st2).core.stride[1]) = (out)), \
|
|
220
|
-
(((_st2).core.m0) \
|
|
221
|
-
? ((_st2).core.m0[__cfeim_k] = (m_out)) \
|
|
222
|
-
: (boolean8_t)0), \
|
|
223
|
-
__cfeim_k++ )
|
|
224
|
-
|
|
225
|
-
/* (5) WRITE-only (init / iota / fill). */
|
|
226
|
-
#define CA_FOR_EACH_ELEMENT_OUT(_st1, _ca_out, T, out) \
|
|
227
|
-
for ( int __cfeo_init = (CA_SWEEP_WIRE_1_((_st1), (_ca_out), "1", 0, \
|
|
228
|
-
"CA_FOR_EACH_ELEMENT_OUT"), \
|
|
229
|
-
ca_sweep_acquire_chunked(&(_st1).core), 1); \
|
|
230
|
-
__cfeo_init; \
|
|
231
|
-
__cfeo_init = 0, ca_sweep_release_chunked(&(_st1).core) ) \
|
|
232
|
-
for ( ; ca_sweep_next_chunk(&(_st1).core); ) \
|
|
233
|
-
for ( ca_size_t __cfeo_k = 0; \
|
|
234
|
-
__cfeo_k < (_st1).core.chunk_n; \
|
|
235
|
-
(*(T *)((_st1).core.base[0] \
|
|
236
|
-
+ __cfeo_k * (_st1).core.stride[0]) = (out)), \
|
|
237
|
-
__cfeo_k++ )
|
|
238
|
-
|
|
239
|
-
#endif /* CA_FOR_EACH_ELEMENT_H */
|
data/ext/carray_build_flags.h
DELETED
data/ext/carray_config.h
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
#ifndef CARRAY_CONFIG_H
|
|
2
|
-
#define CARRAY_CONFIG_H
|
|
3
|
-
#define HAVE_SYS_TYPES_H 1
|
|
4
|
-
#define HAVE_STDINT_H 1
|
|
5
|
-
#define HAVE_TYPE_INT8_T 1
|
|
6
|
-
#define HAVE_TYPE_UINT8_T 1
|
|
7
|
-
#define HAVE_TYPE_INT16_T 1
|
|
8
|
-
#define HAVE_TYPE_UINT16_T 1
|
|
9
|
-
#define HAVE_TYPE_INT32_T 1
|
|
10
|
-
#define HAVE_TYPE_UINT32_T 1
|
|
11
|
-
#define HAVE_TYPE_INT64_T 1
|
|
12
|
-
#define HAVE_TYPE_UINT64_T 1
|
|
13
|
-
#define HAVE_TYPE_LONG_LONG 1
|
|
14
|
-
#define HAVE_TYPE_FLOAT 1
|
|
15
|
-
#define HAVE_TYPE_DOUBLE 1
|
|
16
|
-
#define HAVE_COMPLEX_H 1
|
|
17
|
-
#define HAVE_TYPE_FLOAT_COMPLEX 1
|
|
18
|
-
#define HAVE_TYPE_DOUBLE_COMPLEX 1
|
|
19
|
-
#define HAVE_TGMATH_H 1
|
|
20
|
-
#define HAVE_ATAN2 1
|
|
21
|
-
#define HAVE_HYPOT 1
|
|
22
|
-
#define HAVE_LGAMMA 1
|
|
23
|
-
#define HAVE_EXPM1 1
|
|
24
|
-
#define HAVE_MERGESORT 1
|
|
25
|
-
#define HAVE_STRPTIME 1
|
|
26
|
-
#define HAVE_RB_ARITHMETIC_SEQUENCE_EXTRACT 1
|
|
27
|
-
#define HAVE_RUBY_MEMORY_VIEW_H 1
|
|
28
|
-
#endif
|