carray 3.0.0 → 3.0.2
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/.yardopts +2 -1
- data/CHANGELOG.md +845 -3
- data/{NEWS.md → CHANGELOG.v1.md} +1 -1
- data/README.md +33 -33
- data/carray.gemspec +12 -8
- data/ext/ca_axis_dispatch.c +33 -4
- data/ext/ca_axis_group.c +256 -114
- data/ext/ca_binop_dispatch.c +5 -6
- data/ext/ca_binop_dispatch.h +0 -7
- data/ext/ca_categorical_iterator.c +121 -67
- data/ext/ca_for_each_element.h +6 -8
- data/ext/ca_group_iter.c +1 -1
- data/ext/ca_kernel_iterator.c +386 -74
- data/ext/ca_kernel_iterator.h +145 -45
- data/ext/ca_obj_array.c +62 -20
- data/ext/ca_obj_bincmp.c +57 -27
- data/ext/ca_obj_binop.c +86 -30
- data/ext/ca_obj_block.c +4 -4
- data/ext/ca_obj_const_string.c +88 -27
- data/ext/ca_obj_face.c +104 -0
- data/ext/ca_obj_face.h +48 -1
- data/ext/ca_obj_fake.c +11 -0
- data/ext/ca_obj_fixlen_string.c +21 -6
- data/ext/ca_obj_grid.c +11 -3
- data/ext/ca_obj_meld.c +125 -22
- data/ext/ca_obj_moncmp.c +33 -14
- data/ext/ca_obj_monop.c +19 -7
- data/ext/ca_obj_object.c +107 -4
- data/ext/ca_obj_record.c +3 -1
- data/ext/ca_obj_refer.c +30 -6
- data/ext/ca_obj_roll.c +13 -5
- data/ext/ca_obj_select.c +49 -34
- data/ext/ca_obj_select_axis.c +16 -6
- data/ext/ca_obj_shift.c +3 -3
- data/ext/ca_obj_stack.c +3 -8
- data/ext/ca_obj_stride.c +178 -24
- data/ext/ca_obj_string.c +11 -5
- data/ext/ca_obj_tile.c +13 -5
- data/ext/ca_obj_time.c +3 -1
- data/ext/ca_obj_timedelta.c +3 -1
- data/ext/ca_obj_transpose.c +1 -1
- data/ext/ca_obj_triop.c +62 -23
- data/ext/ca_obj_window.c +94 -19
- data/ext/ca_op_cmplx64.h +123 -0
- data/ext/ca_op_ipower.c +1 -5
- data/ext/ca_rng_normal.h +42 -0
- data/ext/ca_rng_xoshiro256pp.h +105 -0
- data/ext/ca_sort_kernels.h +5 -5
- data/ext/ca_sweep_engine.c +362 -155
- data/ext/ca_sweep_engine.h +39 -9
- data/ext/ca_transform_common.c +7 -0
- data/ext/carray.h +148 -132
- data/ext/carray_access.c +83 -49
- data/ext/carray_address_basis.c +590 -0
- data/ext/carray_bincount.c +8 -8
- data/ext/carray_broadcast.c +102 -9
- data/ext/carray_build_flags.h +3 -0
- data/ext/carray_call_cfunc.c +2010 -335
- data/ext/carray_call_cfunc.h +153 -0
- data/ext/carray_cast.c +184 -72
- data/ext/carray_conversion.c +22 -22
- data/ext/carray_copy.c +67 -32
- data/ext/carray_core.c +140 -13
- data/ext/carray_count.c +10 -11
- data/ext/carray_element.c +7 -7
- data/ext/carray_factorize.c +72 -51
- data/ext/carray_hold.c +1 -1
- data/ext/carray_index_classifier.c +7 -21
- data/ext/carray_internal.h +36 -3
- data/ext/carray_kernels_bincmp.c +1 -0
- data/ext/carray_kernels_binop.c +320 -298
- data/ext/carray_kernels_init.c +1095 -0
- data/ext/carray_kernels_map.c +1 -0
- data/ext/carray_kernels_moncmp.c +1 -0
- data/ext/carray_kernels_monop.c +412 -411
- data/ext/carray_kernels_reduce_aggregate.c +256 -87
- data/ext/carray_kernels_reduce_boolean.c +1 -0
- data/ext/carray_kernels_reduce_cumulative.c +324 -54
- data/ext/carray_kernels_reduce_extreme.c +605 -58
- data/ext/carray_kernels_reduce_variance.c +1 -0
- data/ext/carray_kernels_scan.c +5 -4
- data/ext/carray_kernels_search.c +187 -106
- data/ext/carray_kernels_sort.c +1 -0
- data/ext/carray_kernels_triop.c +1 -0
- data/ext/carray_lazy.c +175 -5
- data/ext/carray_loop.c +7 -1
- data/ext/carray_mask.c +29 -13
- data/ext/carray_median_percentile.c +56 -1
- data/ext/carray_memory_view.c +46 -21
- data/ext/carray_operator.c +50 -53
- data/ext/carray_order.c +1 -1
- data/ext/carray_partition.c +4 -4
- data/ext/carray_random.c +391 -47
- data/ext/carray_scatter.c +1 -1
- data/ext/carray_slab.c +13 -0
- data/ext/carray_sort.c +22 -24
- data/ext/carray_sort_kernel.c +10 -10
- data/ext/carray_test.c +1 -1
- data/ext/extconf.rb +18 -0
- data/ext/mk_call_cfunc.rb +323 -145
- data/ext/mkkernel.rb +651 -129
- data/ext/ruby_carray.c +28 -17
- data/ext/version.h +4 -4
- data/lib/carray/autoload_carray.rb +24 -3
- data/lib/carray/autoload_method_extension.rb +14 -1
- data/lib/carray/axis_group.rb +84 -7
- data/lib/carray/basics.rb +63 -59
- data/lib/carray/bincount_nd.rb +12 -12
- data/lib/carray/block_iterator.rb +111 -25
- data/lib/carray/categorical.rb +154 -37
- data/lib/carray/categorical_iterator.rb +300 -151
- data/lib/carray/conditional.rb +14 -14
- data/lib/carray/const_string.rb +131 -27
- data/lib/carray/construct.rb +61 -0
- data/lib/carray/core_extensions.rb +62 -5
- data/lib/carray/data_type_extension.rb +21 -1
- data/lib/carray/data_type_limits.rb +91 -0
- data/lib/carray/fixlen_string.rb +1 -1
- data/lib/carray/frame/concat.rb +3 -3
- data/lib/carray/frame/convert.rb +1 -1
- data/lib/carray/frame/csv_parser.rb +11 -4
- data/lib/carray/frame/frame.rb +85 -21
- data/lib/carray/frame/group.rb +36 -3
- data/lib/carray/frame/io.rb +224 -15
- data/lib/carray/frame/records.rb +18 -4
- data/lib/carray/frame/sort.rb +1 -1
- data/lib/carray/frame/verbs.rb +32 -12
- data/lib/carray/fuse_source.rb +123 -0
- data/lib/carray/fusion.rb +218 -0
- data/lib/carray/histogram.rb +16 -16
- data/lib/carray/inspect.rb +43 -16
- data/lib/carray/iterator.rb +147 -3
- data/lib/carray/lazy.rb +88 -73
- data/lib/carray/mask_gap_fill.rb +3 -1
- data/lib/carray/meld_reduce.rb +2 -2
- data/lib/carray/methods/align_addr.rb +1 -1
- data/lib/carray/methods/composition.rb +1 -1
- data/lib/carray/methods/discovery_along.rb +74 -0
- data/lib/carray/methods/factorize.rb +50 -0
- data/lib/carray/methods/is_in.rb +25 -14
- data/lib/carray/methods/locate_addr.rb +81 -3
- data/lib/carray/methods/mask_duplicates.rb +36 -2
- data/lib/carray/methods/meshgrid.rb +4 -5
- data/lib/carray/methods/mode.rb +2 -2
- data/lib/carray/methods/nunique.rb +23 -2
- data/lib/carray/methods/repeat.rb +110 -0
- data/lib/carray/methods/snap.rb +7 -2
- data/lib/carray/methods/unique.rb +44 -4
- data/lib/carray/methods/value_counts.rb +2 -2
- data/lib/carray/rng.rb +86 -0
- data/lib/carray/runtime.rb +0 -19
- data/lib/carray/slab_iterator.rb +77 -19
- data/lib/carray/string_operation_extension.rb +10 -6
- data/lib/carray/time.rb +906 -491
- data/lib/carray/window_iterator.rb +421 -27
- data/lib/carray.rb +7 -5
- data/yard-stubs/ca_obj_array.rb +385 -0
- data/yard-stubs/ca_obj_bitarray.rb +38 -0
- data/yard-stubs/ca_obj_bitfield.rb +43 -0
- data/yard-stubs/ca_obj_block.rb +68 -0
- data/yard-stubs/ca_obj_byte_swap.rb +56 -0
- data/yard-stubs/ca_obj_fake.rb +31 -0
- data/yard-stubs/ca_obj_farray.rb +32 -0
- data/yard-stubs/ca_obj_field.rb +45 -0
- data/yard-stubs/ca_obj_grid.rb +35 -0
- data/yard-stubs/ca_obj_refer.rb +72 -0
- data/yard-stubs/ca_obj_roll.rb +45 -0
- data/yard-stubs/ca_obj_shift.rb +43 -0
- data/yard-stubs/ca_obj_stride.rb +181 -0
- data/yard-stubs/ca_obj_tile.rb +29 -0
- data/yard-stubs/ca_obj_transpose.rb +40 -0
- data/yard-stubs/ca_obj_window.rb +57 -0
- data/yard-stubs/carray_access.rb +131 -0
- data/yard-stubs/carray_attribute.rb +246 -0
- data/yard-stubs/carray_broadcast.rb +37 -0
- data/yard-stubs/carray_cast.rb +489 -0
- data/yard-stubs/carray_class.rb +65 -0
- data/yard-stubs/carray_conversion.rb +76 -0
- data/yard-stubs/carray_copy.rb +79 -0
- data/yard-stubs/carray_core.rb +34 -0
- data/yard-stubs/carray_count.rb +84 -0
- data/yard-stubs/carray_element.rb +108 -0
- data/yard-stubs/carray_generate.rb +66 -0
- data/yard-stubs/carray_lazy.rb +228 -0
- data/yard-stubs/carray_loop.rb +140 -0
- data/yard-stubs/carray_mask.rb +259 -0
- data/yard-stubs/carray_math.rb +1615 -0
- data/yard-stubs/carray_mathfunc.rb +45 -0
- data/yard-stubs/carray_median_percentile.rb +103 -0
- data/yard-stubs/carray_memory_view.rb +163 -0
- data/yard-stubs/carray_order.rb +252 -0
- data/yard-stubs/carray_random.rb +89 -0
- data/yard-stubs/carray_scatter.rb +106 -0
- data/yard-stubs/carray_slab.rb +59 -0
- data/yard-stubs/carray_sort.rb +165 -0
- data/yard-stubs/carray_test.rb +85 -0
- data/yard-stubs/carray_undef.rb +64 -0
- data/yard-stubs/carray_utils.rb +97 -0
- data/yard-stubs/ruby_carray.rb +193 -0
- metadata +67 -10
- data/ext/ca_obj_unbound_repeat.c +0 -496
data/ext/ca_sweep_engine.h
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* OUTPUT (fsync=='1') -> ca_attach + use ca->ptr (sync on release)
|
|
14
14
|
* INPUT (fsync=='0') alias-able -> ca_attach + use ca->ptr
|
|
15
15
|
* INPUT (fsync=='0') non-alias -> xmalloc + ca_xfer_all(GET)
|
|
16
|
-
* (2)
|
|
16
|
+
* (2) operand pairing (scalar collapse; arrays must agree in shape)
|
|
17
17
|
* (3) mask OR across INPUT operands -> m0 (xmalloc, NULL if none)
|
|
18
18
|
* (4) mask propagate to OUTPUT operands (overwrite output->mask)
|
|
19
19
|
* (5) caller runs the per-cell loop using base[] + stride[]
|
|
@@ -84,12 +84,20 @@ typedef struct ca_sweep_state {
|
|
|
84
84
|
ca_size_t chunk_n_max; /* max chunk size from ca_chunk_compute_n */
|
|
85
85
|
ca_size_t inner; /* product of dims except outermost (= row
|
|
86
86
|
size in elements for outer-axis chunking) */
|
|
87
|
-
int chunked_state; /* 0=pre-init, 1=active, 2=done
|
|
87
|
+
int chunked_state; /* 0=pre-init, 1=active, 2=done,
|
|
88
|
+
3=aborted (a read raised; resources
|
|
89
|
+
already given back) */
|
|
90
|
+
boolean8_t *mask_scratch; /* chunk-sized staging for the per-chunk
|
|
91
|
+
mask OR; NULL when no INPUT is masked */
|
|
88
92
|
} ca_sweep_state_t;
|
|
89
93
|
|
|
90
|
-
/* Validate fsync length, acquire per-op
|
|
91
|
-
*
|
|
92
|
-
* length mismatch,
|
|
94
|
+
/* Validate fsync length, pair the operands (shape), acquire per-op
|
|
95
|
+
* buffers, build mask m0, propagate mask to OUTPUTs. May raise: refusals
|
|
96
|
+
* (fsync length, shape mismatch, masked INPUT in a NO_MASK form) before
|
|
97
|
+
* anything is held, and a raising operand read after -- in which case
|
|
98
|
+
* everything acquired so far is detached / freed before the raise
|
|
99
|
+
* propagates, so the caller must not call release. The chunked path
|
|
100
|
+
* does the same for acquire_chunked and each ca_sweep_next_chunk. */
|
|
93
101
|
void ca_sweep_acquire (ca_sweep_state_t *st);
|
|
94
102
|
|
|
95
103
|
/* Reverse-order release: sync OUTPUTs, detach attached / xfree owned_buf,
|
|
@@ -97,6 +105,21 @@ void ca_sweep_acquire (ca_sweep_state_t *st);
|
|
|
97
105
|
* state without re-initializing the caller-owned arrays. */
|
|
98
106
|
void ca_sweep_release (ca_sweep_state_t *st);
|
|
99
107
|
|
|
108
|
+
/* Run walk(arg) -- the caller's loop over the acquired state -- and then
|
|
109
|
+
* release. If walk raises (a callback refusing a value), everything the
|
|
110
|
+
* engine holds is detached / freed without syncing before the raise
|
|
111
|
+
* propagates. Use in place of calling ca_sweep_release /
|
|
112
|
+
* ca_sweep_release_chunked yourself whenever the loop can raise. The
|
|
113
|
+
* chunked walk calls ca_sweep_next_chunk itself. */
|
|
114
|
+
void ca_sweep_run (ca_sweep_state_t *st, VALUE (*walk)(VALUE), VALUE arg);
|
|
115
|
+
void ca_sweep_run_chunked (ca_sweep_state_t *st, VALUE (*walk)(VALUE), VALUE arg);
|
|
116
|
+
|
|
117
|
+
/* Shape pairing shared with rb_ca_template_n: non-zero when a and b have
|
|
118
|
+
* the same ndim and dims; the refusal raises ArgumentError naming both
|
|
119
|
+
* shapes. */
|
|
120
|
+
int ca_sweep_same_shape (CArray *a, CArray *b);
|
|
121
|
+
NORETURN(void ca_sweep_refuse_shapes (CArray *a, CArray *b));
|
|
122
|
+
|
|
100
123
|
/* Strict full-shape equality check used by INOUT macros (AC5: silent-
|
|
101
124
|
* corruption seam prevention). Raises if ndim differs or any dim[k]
|
|
102
125
|
* differs. Returns void; raises on mismatch. */
|
|
@@ -134,10 +157,17 @@ void ca_sweep_check_same_shape (CArray *ca_in, CArray *ca_out,
|
|
|
134
157
|
* for the entire walk; ca_chunked_gather rewrites it per chunk.
|
|
135
158
|
*
|
|
136
159
|
* Mask handling (m0):
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
160
|
+
* Chunk-sized (= chunk_n_max bytes), re-gathered per chunk in
|
|
161
|
+
* ca_sweep_next_chunk. Read it at m0[k] for k < chunk_n -- it is
|
|
162
|
+
* indexed within the chunk, NOT by the flat cell index. (This differs
|
|
163
|
+
* from the whole-buffer path, where m0 spans n_kernel.)
|
|
164
|
+
*
|
|
165
|
+
* An author may WRITE m0[k] during the chunk loop (= the INOUT_MASKED
|
|
166
|
+
* forms' m_out). Those writes are flushed into the OUTPUT operands'
|
|
167
|
+
* masks when the chunk finishes -- at the top of the following
|
|
168
|
+
* ca_sweep_next_chunk, and once more in ca_sweep_release_chunked for
|
|
169
|
+
* the last chunk -- so the OUTPUT masks are created up front in
|
|
170
|
+
* acquire_chunked rather than propagated in one go at release.
|
|
141
171
|
*/
|
|
142
172
|
void ca_sweep_acquire_chunked (ca_sweep_state_t *st);
|
|
143
173
|
int ca_sweep_next_chunk (ca_sweep_state_t *st); /* 1 = chunk ready, 0 = done */
|
data/ext/ca_transform_common.c
CHANGED
|
@@ -112,6 +112,13 @@ ca_xfer_stride_transform_fused (CArray *view,
|
|
|
112
112
|
composed_strides, &composed_base);
|
|
113
113
|
if ( !root->ptr ) return 0;
|
|
114
114
|
if ( parent->bytes != root->bytes ) return 0;
|
|
115
|
+
/* Per-axis composition below is only meaningful for a request that walks
|
|
116
|
+
our own axes; a transposed / flat request over the view's addresses
|
|
117
|
+
(legal -- see ca_xfer_stride_request_is_axis_box in carray.h) declines
|
|
118
|
+
to the caller's per-cell path. */
|
|
119
|
+
if ( ! ca_xfer_stride_request_is_axis_box(view, starts, counts, strides) ) {
|
|
120
|
+
return 0;
|
|
121
|
+
}
|
|
115
122
|
|
|
116
123
|
for ( k = 0; k < ndim; k++ ) {
|
|
117
124
|
if ( view_native[k] == 0 ) return 0;
|