carray 3.0.3 → 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 +469 -0
- data/README.md +3 -2
- data/carray.gemspec +1 -1
- data/ext/ca_array_pool.c +25 -1
- data/ext/ca_axis_descriptor.h +27 -24
- data/ext/ca_axis_dispatch.c +14 -26
- data/ext/ca_axis_group.c +27 -27
- data/ext/ca_binop_dispatch.c +1 -29
- data/ext/ca_binop_dispatch.h +0 -1
- data/ext/ca_categorical_iterator.c +231 -153
- data/ext/ca_compare.c +9 -20
- data/ext/ca_composite_dispatch.c +9 -9
- data/ext/ca_group_iter.c +16 -17
- data/ext/ca_kernel_iterator.c +1240 -2000
- data/ext/ca_kernel_iterator.h +502 -519
- data/ext/ca_monop_dispatch.c +82 -59
- data/ext/ca_monop_dispatch.h +1 -0
- data/ext/ca_obj_array.c +152 -45
- data/ext/ca_obj_bincmp.c +25 -21
- data/ext/ca_obj_binop.c +16 -26
- data/ext/ca_obj_bitarray.c +8 -3
- data/ext/ca_obj_bitfield.c +63 -49
- data/ext/ca_obj_block.c +18 -9
- data/ext/ca_obj_byte_swap.c +7 -7
- data/ext/ca_obj_const_string.c +188 -22
- data/ext/ca_obj_face.c +280 -58
- data/ext/ca_obj_face.h +19 -0
- data/ext/ca_obj_fake.c +15 -29
- data/ext/ca_obj_farray.c +6 -3
- data/ext/ca_obj_field.c +30 -8
- data/ext/ca_obj_fixlen_string.c +2 -3
- data/ext/ca_obj_grid.c +455 -134
- data/ext/ca_obj_meld.c +172 -34
- data/ext/ca_obj_moncmp.c +23 -8
- data/ext/ca_obj_monop.c +113 -67
- data/ext/ca_obj_object.c +210 -52
- data/ext/ca_obj_record.c +15 -7
- data/ext/ca_obj_reduce.c +17 -8
- data/ext/ca_obj_refer.c +42 -35
- data/ext/ca_obj_remap.c +30 -9
- data/ext/ca_obj_repeat.c +9 -10
- data/ext/ca_obj_roll.c +31 -10
- data/ext/ca_obj_select.c +48 -14
- data/ext/ca_obj_select_axis.c +15 -47
- data/ext/ca_obj_shift.c +41 -7
- data/ext/ca_obj_stack.c +180 -34
- data/ext/ca_obj_stride.c +190 -134
- data/ext/ca_obj_string.c +80 -4
- data/ext/ca_obj_tile.c +32 -11
- data/ext/ca_obj_time.c +22 -6
- data/ext/ca_obj_timedelta.c +22 -6
- data/ext/ca_obj_transpose.c +13 -7
- data/ext/ca_obj_triop.c +26 -32
- data/ext/ca_obj_window.c +267 -74
- data/ext/ca_op_ipower.c +4 -4
- data/ext/ca_sort_kernels.h +6 -3
- data/ext/ca_sweep_engine.c +2 -2
- data/ext/caframe_csv_reader.c +80 -1
- data/ext/carray.h +214 -75
- data/ext/carray_access.c +200 -99
- data/ext/carray_address_basis.c +343 -87
- data/ext/carray_attribute.c +113 -6
- data/ext/carray_bincount.c +10 -8
- data/ext/carray_broadcast.c +13 -8
- data/ext/carray_build_flags.h +3 -0
- data/ext/carray_call_cfunc.c +108 -0
- data/ext/carray_cast.c +375 -96
- data/ext/carray_cast_func.rb +90 -20
- data/ext/carray_class.c +4 -3
- data/ext/carray_config.h +28 -0
- data/ext/carray_conversion.c +18 -9
- data/ext/carray_copy.c +51 -14
- data/ext/carray_core.c +150 -55
- data/ext/carray_count.c +56 -20
- data/ext/carray_element.c +81 -33
- data/ext/carray_factorize.c +138 -84
- data/ext/carray_generate.c +199 -52
- data/ext/carray_histogram.c +63 -18
- data/ext/carray_hold.c +12 -15
- data/ext/carray_index_classifier.c +388 -176
- data/ext/carray_internal.h +348 -29
- data/ext/carray_kernels_bincmp.c +4453 -0
- data/ext/carray_kernels_binop.c +11368 -0
- data/ext/carray_kernels_init.c +1734 -0
- data/ext/carray_kernels_moncmp.c +2104 -0
- data/ext/carray_kernels_monop.c +18369 -0
- data/ext/carray_kernels_reduce_aggregate.c +23818 -0
- data/ext/carray_kernels_reduce_boolean.c +406 -0
- data/ext/carray_kernels_reduce_cumulative.c +10086 -0
- data/ext/carray_kernels_reduce_extreme.c +17634 -0
- data/ext/carray_kernels_reduce_variance.c +3849 -0
- data/ext/carray_kernels_scan.c +4302 -0
- data/ext/carray_kernels_search.c +33829 -0
- data/ext/carray_kernels_sort.c +10897 -0
- data/ext/carray_kernels_triop.c +1864 -0
- data/ext/carray_key_windows.c +220 -0
- data/ext/carray_lazy.c +170 -111
- data/ext/carray_mask.c +337 -94
- data/ext/carray_median_percentile.c +82 -28
- data/ext/carray_memory_view.c +669 -561
- data/ext/carray_operator.c +129 -52
- data/ext/carray_order.c +604 -77
- data/ext/carray_partition.c +28 -27
- data/ext/carray_random.c +85 -31
- data/ext/carray_round.c +273 -0
- data/ext/carray_scatter.c +87 -45
- data/ext/carray_segment.c +3 -3
- data/ext/carray_slab.c +123 -37
- data/ext/carray_sort.c +259 -51
- data/ext/carray_sort_kernel.c +5 -7
- data/ext/carray_struct.c +54 -61
- data/ext/carray_test.c +26 -5
- data/ext/carray_time_text.c +4 -2
- data/ext/carray_undef.c +4 -0
- data/ext/carray_utils.c +309 -66
- data/ext/mk_call_cfunc.rb +19 -2
- data/ext/mkkernel.rb +403 -350
- data/ext/ruby_carray.c +10 -4
- data/ext/version.h +4 -4
- data/lib/carray/attribute.rb +139 -22
- data/lib/carray/autoload_carray.rb +8 -31
- data/lib/carray/autoload_method_extension.rb +14 -5
- data/lib/carray/axis_group.rb +255 -106
- data/lib/carray/basics.rb +105 -17
- data/lib/carray/bincount_nd.rb +12 -2
- data/lib/carray/block_iterator.rb +126 -23
- data/lib/carray/boolean_reduce.rb +17 -17
- data/lib/carray/categorical.rb +195 -59
- data/lib/carray/categorical_iterator.rb +132 -29
- data/lib/carray/complex.rb +5 -5
- data/lib/carray/conditional.rb +67 -18
- data/lib/carray/const_string.rb +24 -5
- data/lib/carray/construct.rb +15 -11
- data/lib/carray/data_type_extension.rb +9 -1
- data/lib/carray/distance_limit.rb +77 -0
- data/lib/carray/fixlen_string.rb +48 -3
- data/lib/carray/frame/column_verbs.rb +71 -0
- data/lib/carray/frame/concat.rb +17 -3
- data/lib/carray/frame/convert.rb +69 -0
- data/lib/carray/frame/csv_parser.rb +111 -17
- data/lib/carray/frame/describe.rb +3 -2
- data/lib/carray/frame/frame.rb +252 -28
- data/lib/carray/frame/group.rb +603 -101
- data/lib/carray/frame/io.rb +117 -28
- data/lib/carray/frame/join.rb +312 -51
- data/lib/carray/frame/records.rb +83 -7
- data/lib/carray/frame/reshape.rb +42 -35
- data/lib/carray/frame/sort.rb +7 -19
- data/lib/carray/frame/verbs.rb +188 -48
- data/lib/carray/frame/windows.rb +117 -0
- data/lib/carray/frame.rb +2 -0
- data/lib/carray/fuse_source.rb +42 -6
- data/lib/carray/fusion.rb +40 -16
- data/lib/carray/histogram.rb +6 -1
- data/lib/carray/inspect.rb +31 -8
- data/lib/carray/iterator.rb +85 -7
- data/lib/carray/key_windows.rb +620 -0
- data/lib/carray/lazy.rb +217 -183
- data/lib/carray/mask_gap_fill.rb +63 -57
- data/lib/carray/meld_reduce.rb +12 -14
- data/lib/carray/methods/bin.rb +26 -18
- data/lib/carray/methods/bincount.rb +16 -0
- data/lib/carray/methods/bit_string.rb +1 -1
- data/lib/carray/methods/choose.rb +16 -3
- data/lib/carray/methods/composition.rb +3 -1
- data/lib/carray/methods/gather_nd.rb +14 -5
- data/lib/carray/methods/insert_block.rb +2 -2
- data/lib/carray/methods/is_between.rb +59 -0
- data/lib/carray/methods/is_in.rb +61 -37
- data/lib/carray/methods/join.rb +1 -6
- data/lib/carray/methods/lag.rb +49 -0
- data/lib/carray/methods/locate_addr.rb +47 -51
- data/lib/carray/methods/mode.rb +1 -1
- data/lib/carray/methods/nunique.rb +11 -6
- data/lib/carray/methods/resize.rb +3 -3
- data/lib/carray/methods/value_counts.rb +4 -11
- data/lib/carray/record_order.rb +3 -3
- data/lib/carray/rng.rb +3 -0
- data/lib/carray/runtime.rb +53 -8
- data/lib/carray/segment_iterator.rb +323 -88
- data/lib/carray/serialize.rb +45 -14
- data/lib/carray/slab_iterator.rb +50 -0
- data/lib/carray/stack.rb +15 -12
- data/lib/carray/string.rb +113 -5
- data/lib/carray/string_operation_extension.rb +21 -6
- data/lib/carray/struct.rb +9 -21
- data/lib/carray/struct_builder.rb +24 -11
- data/lib/carray/time.rb +819 -158
- data/lib/carray/window_iterator.rb +122 -16
- data/lib/carray.rb +7 -0
- data/yard-stubs/ca_obj_bitfield.rb +1 -1
- data/yard-stubs/ca_obj_field.rb +4 -0
- data/yard-stubs/ca_obj_grid.rb +21 -10
- data/yard-stubs/ca_obj_refer.rb +2 -1
- data/yard-stubs/ca_obj_roll.rb +2 -2
- data/yard-stubs/ca_obj_shift.rb +5 -1
- data/yard-stubs/ca_obj_tile.rb +1 -1
- data/yard-stubs/ca_obj_transpose.rb +5 -4
- data/yard-stubs/ca_obj_window.rb +8 -3
- data/yard-stubs/carray_access.rb +6 -1
- data/yard-stubs/carray_attribute.rb +3 -6
- data/yard-stubs/carray_cast.rb +12 -0
- data/yard-stubs/carray_conversion.rb +7 -2
- data/yard-stubs/carray_copy.rb +4 -2
- data/yard-stubs/carray_count.rb +4 -4
- data/yard-stubs/carray_element.rb +17 -10
- data/yard-stubs/carray_generate.rb +21 -1
- data/yard-stubs/carray_mask.rb +32 -3
- data/yard-stubs/carray_math.rb +41 -5
- data/yard-stubs/carray_median_percentile.rb +5 -2
- data/yard-stubs/carray_memory_view.rb +40 -23
- data/yard-stubs/carray_order.rb +129 -22
- data/yard-stubs/carray_random.rb +13 -4
- data/yard-stubs/carray_scatter.rb +17 -10
- data/yard-stubs/carray_slab.rb +9 -2
- data/yard-stubs/carray_sort.rb +6 -5
- data/yard-stubs/carray_test.rb +5 -3
- metadata +25 -3
- data/lib/carray/arrow_tensor.rb +0 -401
- data/lib/carray/table.rb +0 -108
data/ext/carray_test.c
CHANGED
|
@@ -82,7 +82,8 @@ ca_check_same_data_type (void *ap1, void *ap2)
|
|
|
82
82
|
{
|
|
83
83
|
CArray *ca1 = (CArray *) ap1;
|
|
84
84
|
CArray *ca2 = (CArray *) ap2;
|
|
85
|
-
if ( ca1->data_type != ca2->data_type
|
|
85
|
+
if ( ca1->data_type != ca2->data_type ||
|
|
86
|
+
( ca1->data_type == CA_FIXLEN && ca1->bytes != ca2->bytes ) ) {
|
|
86
87
|
rb_raise(rb_eCADataTypeError, "data_type mismatch");
|
|
87
88
|
}
|
|
88
89
|
}
|
|
@@ -200,8 +201,9 @@ rb_ca_is_type (VALUE arg, int type)
|
|
|
200
201
|
live in ca_obj_record.c; signatures stay in carray.h for cross-file
|
|
201
202
|
extern use. */
|
|
202
203
|
|
|
203
|
-
/* CArray#valid_index?(*idx)
|
|
204
|
-
*
|
|
204
|
+
/* CArray#valid_index?(*idx) -- whether self[*idx] names a cell: a negative
|
|
205
|
+
* index counts from the end of its axis, as it does at every door. The
|
|
206
|
+
* number of indices must equal ndim (raises otherwise). */
|
|
205
207
|
static VALUE
|
|
206
208
|
rb_ca_is_valid_index (int argc, VALUE *argv, VALUE self)
|
|
207
209
|
{
|
|
@@ -217,6 +219,9 @@ rb_ca_is_valid_index (int argc, VALUE *argv, VALUE self)
|
|
|
217
219
|
}
|
|
218
220
|
for (i=0; i<ca->ndim; i++) {
|
|
219
221
|
idx = NUM2SIZE(argv[i]);
|
|
222
|
+
if ( idx < 0 ) {
|
|
223
|
+
idx += ca->dim[i];
|
|
224
|
+
}
|
|
220
225
|
if ( idx < 0 || idx >= ca->dim[i] ) {
|
|
221
226
|
return Qfalse;
|
|
222
227
|
}
|
|
@@ -225,7 +230,8 @@ rb_ca_is_valid_index (int argc, VALUE *argv, VALUE self)
|
|
|
225
230
|
return Qtrue;
|
|
226
231
|
}
|
|
227
232
|
|
|
228
|
-
/* CArray#valid_addr?(addr)
|
|
233
|
+
/* CArray#valid_addr?(addr) -- whether addr names a cell: a negative address
|
|
234
|
+
* counts from the end. */
|
|
229
235
|
static VALUE
|
|
230
236
|
rb_ca_is_valid_addr (VALUE self, VALUE raddr)
|
|
231
237
|
{
|
|
@@ -234,6 +240,9 @@ rb_ca_is_valid_addr (VALUE self, VALUE raddr)
|
|
|
234
240
|
|
|
235
241
|
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
|
236
242
|
addr = NUM2SIZE(raddr);
|
|
243
|
+
if ( addr < 0 ) {
|
|
244
|
+
addr += ca->elements;
|
|
245
|
+
}
|
|
237
246
|
if ( addr < 0 || addr >= ca->elements ) {
|
|
238
247
|
return Qfalse;
|
|
239
248
|
}
|
|
@@ -249,6 +258,7 @@ rb_ca_has_same_shape (VALUE self, VALUE other)
|
|
|
249
258
|
{
|
|
250
259
|
CArray *ca, *cb;
|
|
251
260
|
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
|
261
|
+
/* coerce: only the shape is compared */
|
|
252
262
|
cb = ca_wrap_readonly(other, ca->data_type);
|
|
253
263
|
return ca_has_same_shape(ca, cb) ? Qtrue : Qfalse;
|
|
254
264
|
}
|
|
@@ -684,10 +694,21 @@ rb_ca_modify (VALUE self)
|
|
|
684
694
|
rb_check_frozen(self);
|
|
685
695
|
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
|
686
696
|
if ( ca_is_readonly(ca) ) {
|
|
687
|
-
|
|
697
|
+
ca_refuse_read_only();
|
|
688
698
|
}
|
|
689
699
|
}
|
|
690
700
|
|
|
701
|
+
/* The refusal of a write into a read-only array that is not frozen (a
|
|
702
|
+
frozen one is Ruby's FrozenError, from rb_check_frozen): every guard
|
|
703
|
+
raises it, the entry points through rb_ca_modify and the transfers and
|
|
704
|
+
fills below them, which are the last line when an entry is missed. */
|
|
705
|
+
void
|
|
706
|
+
ca_refuse_read_only (void)
|
|
707
|
+
{
|
|
708
|
+
rb_raise(rb_eRuntimeError, "%s: can not modify read-only array",
|
|
709
|
+
ca_calling_method_name());
|
|
710
|
+
}
|
|
711
|
+
|
|
691
712
|
/* CArray#freeze — freeze self and set CA_FLAG_READ_ONLY so subsequent
|
|
692
713
|
* mutations raise FrozenError. */
|
|
693
714
|
VALUE
|
data/ext/carray_time_text.c
CHANGED
|
@@ -234,7 +234,9 @@ ca_time_text_read (VALUE str, ca_time_text_t *t, int wide)
|
|
|
234
234
|
}
|
|
235
235
|
}
|
|
236
236
|
}
|
|
237
|
-
|
|
237
|
+
/* Second 60 is the leap second; it carries into the next minute below,
|
|
238
|
+
as CArray.time reads it. */
|
|
239
|
+
if ( hour > 24 || min > 59 || sec > 60 ) {
|
|
238
240
|
return CA_TIME_TEXT_UNREADABLE;
|
|
239
241
|
}
|
|
240
242
|
/* Hour 24 is the end of the day, 24:00:00, and nothing past it, as in
|
|
@@ -359,7 +361,7 @@ rb_ca_parse_time_text (int argc, VALUE *argv, VALUE self)
|
|
|
359
361
|
boolean8_t *m_in, *m_out;
|
|
360
362
|
int64_t *days, *nsod, *months, *ticks;
|
|
361
363
|
int64_t per_day = 1, ns_per_tick = 1;
|
|
362
|
-
ID unit;
|
|
364
|
+
ID unit = 0;
|
|
363
365
|
int clock = 0, fraction = 0, coarse = 2, any = 0, wide;
|
|
364
366
|
int calendar = 0; /* 1 ticks of months, 2 of years */
|
|
365
367
|
ca_size_t i;
|
data/ext/carray_undef.c
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
---------------------------------------------------------------------------- */
|
|
19
19
|
|
|
20
20
|
#include "ruby.h"
|
|
21
|
+
#include "ruby/ractor.h"
|
|
21
22
|
|
|
22
23
|
static VALUE rb_cUNDEF;
|
|
23
24
|
|
|
@@ -63,6 +64,9 @@ Init_carray_undef (void)
|
|
|
63
64
|
can be created. The identity invariant relies on this. */
|
|
64
65
|
CA_UNDEF = rb_funcall(rb_cUNDEF, rb_intern("new"), 0);
|
|
65
66
|
rb_undef_method(CLASS_OF(rb_cUNDEF), "new");
|
|
67
|
+
/* Frozen and shareable: masked reads hand the same object to every
|
|
68
|
+
Ractor. */
|
|
69
|
+
rb_ractor_make_shareable(CA_UNDEF);
|
|
66
70
|
rb_const_set(rb_cObject, rb_intern("UNDEF"), CA_UNDEF);
|
|
67
71
|
|
|
68
72
|
/* CAREFUL: CA_UNDEF is dereferenced via raw pointer compare
|