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_obj_timedelta.c
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
--------------------------------------------------------------------------- */
|
|
15
15
|
|
|
16
16
|
#include "carray.h"
|
|
17
|
+
#include "carray_internal.h"
|
|
17
18
|
#include "ca_obj_face.h"
|
|
18
19
|
|
|
19
20
|
/* The unit enum is shared with CATime (= same unit system).
|
|
@@ -26,7 +27,7 @@ extern void ca_time_extract_unit (VALUE unit, int8_t *base, int64_t *count);
|
|
|
26
27
|
typedef struct {
|
|
27
28
|
/* === CAView prefix === */
|
|
28
29
|
int16_t obj_type;
|
|
29
|
-
int8_t data_type; /*
|
|
30
|
+
int8_t data_type; /* surface: CA_FIXLEN (storage is the int64 parent) */
|
|
30
31
|
int8_t ndim;
|
|
31
32
|
int32_t flags; /* CA_FLAG_IS_FACE set */
|
|
32
33
|
ca_size_t bytes; /* fixed to sizeof(int64_t) */
|
|
@@ -132,6 +133,21 @@ rb_ca_timedelta_element_initialize (VALUE self, VALUE value, VALUE unit)
|
|
|
132
133
|
return self;
|
|
133
134
|
}
|
|
134
135
|
|
|
136
|
+
/* dup / clone copy the value and the unit (the allocator leaves both 0). */
|
|
137
|
+
static VALUE
|
|
138
|
+
rb_ca_timedelta_element_initialize_copy (VALUE self, VALUE orig)
|
|
139
|
+
{
|
|
140
|
+
CATimedeltaElement *s, *o;
|
|
141
|
+
if ( self == orig ) {
|
|
142
|
+
return self;
|
|
143
|
+
}
|
|
144
|
+
rb_check_frozen(self);
|
|
145
|
+
TypedData_Get_Struct(self, CATimedeltaElement, &catimedelta_element_data_type, s);
|
|
146
|
+
TypedData_Get_Struct(orig, CATimedeltaElement, &catimedelta_element_data_type, o);
|
|
147
|
+
*s = *o;
|
|
148
|
+
return self;
|
|
149
|
+
}
|
|
150
|
+
|
|
135
151
|
static VALUE
|
|
136
152
|
rb_ca_timedelta_element_value (VALUE self)
|
|
137
153
|
{
|
|
@@ -161,6 +177,12 @@ ca_timedelta_setup (CATimedelta *ca, CArray *parent, int8_t unit, int64_t count)
|
|
|
161
177
|
"CATimedelta requires int64 storage (parent.data_type != CA_INT64)");
|
|
162
178
|
}
|
|
163
179
|
|
|
180
|
+
/* ca == NULL asks for the checks above only, so that a constructor can
|
|
181
|
+
run them before it allocates. */
|
|
182
|
+
if ( ca == NULL ) {
|
|
183
|
+
return 0;
|
|
184
|
+
}
|
|
185
|
+
|
|
164
186
|
ca->obj_type = CA_OBJ_TIMEDELTA;
|
|
165
187
|
/* NonNumeric surface (the FIXLEN gate), like CATime: the storage is a
|
|
166
188
|
count of `count x unit` ticks, and letting the numeric kernels read it
|
|
@@ -190,9 +212,6 @@ ca_timedelta_setup (CATimedelta *ca, CArray *parent, int8_t unit, int64_t count)
|
|
|
190
212
|
ca->unit = unit;
|
|
191
213
|
ca->count = count;
|
|
192
214
|
|
|
193
|
-
if ( ca_has_mask(parent) ) {
|
|
194
|
-
ca_create_mask((CArray *) ca);
|
|
195
|
-
}
|
|
196
215
|
|
|
197
216
|
if ( ca_is_scalar(parent) ) {
|
|
198
217
|
ca_set_flag(ca, CA_FLAG_SCALAR);
|
|
@@ -208,8 +227,11 @@ ca_timedelta_setup (CATimedelta *ca, CArray *parent, int8_t unit, int64_t count)
|
|
|
208
227
|
CATimedelta *
|
|
209
228
|
ca_timedelta_new (CArray *parent, int8_t unit, int64_t count)
|
|
210
229
|
{
|
|
211
|
-
CATimedelta *ca
|
|
230
|
+
CATimedelta *ca;
|
|
231
|
+
ca_timedelta_setup(NULL, parent, unit, count);
|
|
232
|
+
ca = (CATimedelta *) ca_array_alloc(CA_OBJ_TIMEDELTA, parent->ndim);
|
|
212
233
|
ca_timedelta_setup(ca, parent, unit, count);
|
|
234
|
+
ca_fill_or_free((CArray *) ca, ca_view_inherit_mask, (VALUE) ca);
|
|
213
235
|
return ca;
|
|
214
236
|
}
|
|
215
237
|
|
|
@@ -246,18 +268,6 @@ ca_timedelta_func_allocate (void *ap)
|
|
|
246
268
|
ca->ptr = ca->parent->ptr;
|
|
247
269
|
}
|
|
248
270
|
|
|
249
|
-
static void
|
|
250
|
-
ca_timedelta_func_create_mask (void *ap)
|
|
251
|
-
{
|
|
252
|
-
CATimedelta *ca = (CATimedelta *) ap;
|
|
253
|
-
ca_update_mask(ca->parent);
|
|
254
|
-
if ( ! ca->parent->mask ) {
|
|
255
|
-
ca_create_mask(ca->parent);
|
|
256
|
-
}
|
|
257
|
-
ca->mask = (CArray *) ca_refer_new(ca->parent->mask,
|
|
258
|
-
CA_BOOLEAN, ca->ndim, ca->dim, 0, 0);
|
|
259
|
-
}
|
|
260
|
-
|
|
261
271
|
ca_operation_function_t ca_timedelta_func = {
|
|
262
272
|
-1, /* CA_OBJ_TIMEDELTA — filled by ca_install_obj_type */
|
|
263
273
|
CA_VIEW_ARRAY,
|
|
@@ -268,7 +278,7 @@ ca_operation_function_t ca_timedelta_func = {
|
|
|
268
278
|
ca_face_sync,
|
|
269
279
|
ca_face_detach,
|
|
270
280
|
ca_face_fill_data,
|
|
271
|
-
|
|
281
|
+
ca_view_func_create_mask,
|
|
272
282
|
ca_face_xfer_index,
|
|
273
283
|
ca_face_xfer_addrs,
|
|
274
284
|
NULL, /* fold_stride */
|
|
@@ -296,7 +306,7 @@ rb_ca_timedelta_wrap (VALUE parent_val, int8_t unit, int64_t count)
|
|
|
296
306
|
return obj;
|
|
297
307
|
}
|
|
298
308
|
|
|
299
|
-
/*
|
|
309
|
+
/* wrap_storage(raw, unit_spec) — primitive; unit_spec is Symbol / String /
|
|
300
310
|
Resolution / nil (normalized here). */
|
|
301
311
|
static VALUE
|
|
302
312
|
rb_ca_timedelta_wrap_method (VALUE klass, VALUE raw, VALUE unit_spec)
|
|
@@ -330,20 +340,22 @@ rb_ca_timedelta_initialize_copy (VALUE self, VALUE other)
|
|
|
330
340
|
{
|
|
331
341
|
CATimedelta *ca, *cs;
|
|
332
342
|
TypedData_Get_Struct(self, CATimedelta, &catimedelta_data_type, ca);
|
|
343
|
+
ca_check_uninitialized(ca);
|
|
333
344
|
TypedData_Get_Struct(other, CATimedelta, &catimedelta_data_type, cs);
|
|
334
345
|
if ( ca_func[CA_OBJ_TIMEDELTA].pool_init ) {
|
|
335
346
|
ca_array_pool_alloc(ca, CA_OBJ_TIMEDELTA, cs->parent->ndim);
|
|
336
347
|
}
|
|
337
348
|
ca_timedelta_setup(ca, cs->parent, cs->unit, cs->count);
|
|
349
|
+
ca_view_inherit_mask((VALUE) ca);
|
|
338
350
|
return self;
|
|
339
351
|
}
|
|
340
352
|
|
|
341
|
-
/*
|
|
353
|
+
/* storage_to_element implemented in C to avoid per-cell Ruby method dispatch
|
|
342
354
|
on the fetch hot path. Accepts either an Integer (INT64 surface fetch)
|
|
343
355
|
or an 8-byte String (FIXLEN surface fetch); decodes the parent int64
|
|
344
356
|
and constructs CATimedelta::Element(value, unit). */
|
|
345
357
|
static VALUE
|
|
346
|
-
|
|
358
|
+
rb_ca_timedelta_storage_to_element (VALUE self, VALUE raw)
|
|
347
359
|
{
|
|
348
360
|
CATimedelta *ca;
|
|
349
361
|
CATimedeltaElement *s;
|
|
@@ -355,7 +367,7 @@ rb_ca_timedelta_storage_to_scalar (VALUE self, VALUE raw)
|
|
|
355
367
|
if ( TYPE(raw) == T_STRING ) {
|
|
356
368
|
if ( RSTRING_LEN(raw) != (long) sizeof(int64_t) ) {
|
|
357
369
|
rb_raise(rb_eArgError,
|
|
358
|
-
"CATimedelta#
|
|
370
|
+
"CATimedelta#storage_to_element: expected %lu bytes, got %ld",
|
|
359
371
|
(unsigned long) sizeof(int64_t), RSTRING_LEN(raw));
|
|
360
372
|
}
|
|
361
373
|
memcpy(&value, RSTRING_PTR(raw), sizeof(int64_t));
|
|
@@ -405,20 +417,20 @@ Init_ca_obj_timedelta (void)
|
|
|
405
417
|
rb_define_method(rb_cCATimedelta, "initialize_copy",
|
|
406
418
|
rb_ca_timedelta_initialize_copy, 1);
|
|
407
419
|
|
|
408
|
-
|
|
409
|
-
|
|
420
|
+
rb_define_private_method(rb_singleton_class(rb_cCATimedelta), "wrap_storage",
|
|
421
|
+
rb_ca_timedelta_wrap_method, 2);
|
|
410
422
|
rb_define_method(rb_cCATimedelta, "unit", rb_ca_timedelta_unit, 0);
|
|
411
|
-
rb_define_method(rb_cCATimedelta, "
|
|
412
|
-
|
|
413
|
-
/* Registers the state-compatibility predicate so
|
|
423
|
+
rb_define_method(rb_cCATimedelta, "storage_to_element",
|
|
424
|
+
rb_ca_timedelta_storage_to_element, 1);
|
|
425
|
+
/* Registers the state-compatibility predicate so CA_FACE_STORAGE_TO_ELEMENT_IF_FACE
|
|
414
426
|
can skip rb_funcall on the hot path. */
|
|
415
427
|
ca_face_register_state_compatible(CA_OBJ_TIMEDELTA,
|
|
416
428
|
ca_timedelta_state_compatible);
|
|
417
429
|
/* unit is pure metadata, no per-parent buffer; multi-parent Face lift
|
|
418
430
|
is safe (portable = 1). */
|
|
419
431
|
ca_face_register_state_portable(CA_OBJ_TIMEDELTA, 1);
|
|
420
|
-
|
|
421
|
-
|
|
432
|
+
ca_face_register_storage_to_element(CA_OBJ_TIMEDELTA,
|
|
433
|
+
rb_ca_timedelta_storage_to_element);
|
|
422
434
|
|
|
423
435
|
/* CATimedelta::Element as a C-backed TypedData class. The Ruby-side
|
|
424
436
|
definition in lib/carray/time.rb keeps Comparable + to_seconds /
|
|
@@ -430,6 +442,8 @@ Init_ca_obj_timedelta (void)
|
|
|
430
442
|
rb_ca_timedelta_element_s_allocate);
|
|
431
443
|
rb_define_method(rb_cCATimedeltaElement, "initialize",
|
|
432
444
|
rb_ca_timedelta_element_initialize, 2);
|
|
445
|
+
rb_define_method(rb_cCATimedeltaElement, "initialize_copy",
|
|
446
|
+
rb_ca_timedelta_element_initialize_copy, 1);
|
|
433
447
|
rb_define_method(rb_cCATimedeltaElement, "value",
|
|
434
448
|
rb_ca_timedelta_element_value, 0);
|
|
435
449
|
rb_define_method(rb_cCATimedeltaElement, "unit",
|
data/ext/ca_obj_transpose.c
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
---------------------------------------------------------------------------- */
|
|
8
8
|
|
|
9
9
|
#include "carray.h"
|
|
10
|
+
#include "carray_internal.h" /* ca_view_inherit_mask */
|
|
10
11
|
#include "ca_obj_face.h" /* CA_FACE_LIFT_IF_FACE */
|
|
11
12
|
|
|
12
13
|
extern ca_operation_function_t ca_stride_func;
|
|
@@ -37,11 +38,11 @@ ca_trans_setup (CAStride *ca, CArray *parent, ca_size_t *imap)
|
|
|
37
38
|
for (i = 0; i < ndim; i++) {
|
|
38
39
|
idim = imap[i];
|
|
39
40
|
if (idim < 0 || idim >= ndim) {
|
|
40
|
-
rb_raise(
|
|
41
|
+
rb_raise(rb_eArgError,
|
|
41
42
|
"specified %i-th dimension number out of range", i);
|
|
42
43
|
}
|
|
43
44
|
if (map[idim] != -1) {
|
|
44
|
-
rb_raise(
|
|
45
|
+
rb_raise(rb_eArgError,
|
|
45
46
|
"specified %i-th dimension number is duplicated", i);
|
|
46
47
|
}
|
|
47
48
|
map[idim] = i;
|
|
@@ -58,17 +59,26 @@ ca_trans_setup (CAStride *ca, CArray *parent, ca_size_t *imap)
|
|
|
58
59
|
strides[i] = parent_byte_stride[imap[i]];
|
|
59
60
|
}
|
|
60
61
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
/* ca == NULL asks for the checks above only, so that a constructor can
|
|
63
|
+
run them before it allocates. */
|
|
64
|
+
if ( ca == NULL ) {
|
|
65
|
+
return 0;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
ca_stride_setup_view(ca, CA_OBJ_TRANSPOSE, parent,
|
|
69
|
+
parent->data_type, parent->bytes,
|
|
70
|
+
ndim, newdim, strides, 0);
|
|
64
71
|
return 0;
|
|
65
72
|
}
|
|
66
73
|
|
|
67
74
|
CAStride *
|
|
68
75
|
ca_trans_new (CArray *parent, ca_size_t *imap)
|
|
69
76
|
{
|
|
70
|
-
CAStride *ca
|
|
77
|
+
CAStride *ca;
|
|
78
|
+
ca_trans_setup(NULL, parent, imap);
|
|
79
|
+
ca = (CAStride *) ca_array_alloc(CA_OBJ_TRANSPOSE, parent->ndim);
|
|
71
80
|
ca_trans_setup(ca, parent, imap);
|
|
81
|
+
ca_fill_or_free((CArray *) ca, ca_view_inherit_mask, (VALUE) ca);
|
|
72
82
|
return ca;
|
|
73
83
|
}
|
|
74
84
|
|
|
@@ -126,6 +136,7 @@ rb_ca_trans_initialize_copy (VALUE self, VALUE other)
|
|
|
126
136
|
{
|
|
127
137
|
CAStride *ca, *cs;
|
|
128
138
|
TypedData_Get_Struct(self, CAStride, &castride_data_type, ca);
|
|
139
|
+
ca_check_uninitialized(ca);
|
|
129
140
|
TypedData_Get_Struct(other, CAStride, &castride_data_type, cs);
|
|
130
141
|
if ( ca_func[CA_OBJ_TRANSPOSE].pool_init ) {
|
|
131
142
|
ca_array_pool_alloc(ca, CA_OBJ_TRANSPOSE, cs->ndim);
|