carray 2.0.0 → 3.0.0
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 +5 -25
- data/CHANGELOG.md +16 -0
- data/LICENSE +1 -1
- data/NEWS.md +3 -0
- data/README.md +128 -44
- data/carray.gemspec +22 -24
- data/ext/ca_array_pool.c +91 -0
- data/ext/ca_axis_descriptor.h +186 -0
- data/ext/ca_axis_dispatch.c +924 -0
- data/ext/ca_axis_group.c +1208 -0
- data/ext/ca_bincmp_dispatch.c +76 -0
- data/ext/ca_bincmp_dispatch.h +85 -0
- data/ext/ca_binop_dispatch.c +125 -0
- data/ext/ca_binop_dispatch.h +159 -0
- data/ext/ca_categorical_iterator.c +1375 -0
- data/ext/ca_compare.c +94 -0
- data/ext/ca_compare.h +26 -0
- data/ext/ca_composite_dispatch.c +414 -0
- data/ext/ca_composite_dispatch.h +116 -0
- data/ext/ca_for_buffer.h +96 -0
- data/ext/ca_for_each_element.h +241 -0
- data/ext/ca_group_iter.c +304 -0
- data/ext/ca_iter_substrate.h +325 -0
- data/ext/ca_kernel_iterator.c +4321 -0
- data/ext/ca_kernel_iterator.h +2603 -0
- data/ext/ca_moncmp_dispatch.c +37 -0
- data/ext/ca_moncmp_dispatch.h +62 -0
- data/ext/ca_monop_dispatch.c +200 -0
- data/ext/ca_monop_dispatch.h +235 -0
- data/ext/ca_obj_array.c +355 -359
- data/ext/ca_obj_bincmp.c +809 -0
- data/ext/ca_obj_binop.c +892 -0
- data/ext/ca_obj_bitarray.c +369 -164
- data/ext/ca_obj_bitfield.c +294 -234
- data/ext/ca_obj_block.c +189 -711
- data/ext/ca_obj_byte_swap.c +766 -0
- data/ext/ca_obj_const_string.c +965 -0
- data/ext/ca_obj_face.c +670 -0
- data/ext/ca_obj_face.h +247 -0
- data/ext/ca_obj_fake.c +228 -100
- data/ext/ca_obj_farray.c +54 -441
- data/ext/ca_obj_field.c +82 -529
- data/ext/ca_obj_fixlen_string.c +306 -0
- data/ext/ca_obj_grid.c +858 -440
- data/ext/ca_obj_meld.c +1034 -0
- data/ext/ca_obj_moncmp.c +569 -0
- data/ext/ca_obj_monop.c +1111 -0
- data/ext/ca_obj_object.c +774 -298
- data/ext/ca_obj_record.c +468 -0
- data/ext/ca_obj_reduce.c +97 -82
- data/ext/ca_obj_refer.c +569 -459
- data/ext/ca_obj_remap.c +475 -0
- data/ext/ca_obj_repeat.c +92 -477
- data/ext/ca_obj_roll.c +616 -0
- data/ext/ca_obj_select.c +344 -296
- data/ext/ca_obj_select_axis.c +1296 -0
- data/ext/ca_obj_shift.c +230 -792
- data/ext/ca_obj_source.c +78 -0
- data/ext/ca_obj_stack.c +1173 -0
- data/ext/ca_obj_stride.c +2501 -0
- data/ext/ca_obj_string.c +268 -0
- data/ext/ca_obj_tile.c +614 -0
- data/ext/ca_obj_time.c +546 -0
- data/ext/ca_obj_timedelta.c +435 -0
- data/ext/ca_obj_transpose.c +62 -516
- data/ext/ca_obj_triop.c +746 -0
- data/ext/ca_obj_unbound_repeat.c +208 -241
- data/ext/ca_obj_window.c +1131 -563
- data/ext/ca_op_byte_swap.c +175 -0
- data/ext/ca_op_ipower.c +319 -0
- data/ext/ca_op_powi.h +88 -0
- data/ext/ca_sort_kernels.h +132 -0
- data/ext/ca_sweep_engine.c +430 -0
- data/ext/ca_sweep_engine.h +157 -0
- data/ext/ca_transform_common.c +228 -0
- data/ext/ca_triop_dispatch.c +55 -0
- data/ext/ca_triop_dispatch.h +62 -0
- data/ext/carray.h +795 -402
- data/ext/carray_access.c +831 -711
- data/ext/carray_attribute.c +98 -330
- data/ext/carray_bincount.c +255 -0
- data/ext/carray_broadcast.c +283 -0
- data/ext/carray_call_cfunc.c +1360 -828
- data/ext/carray_call_cfunc.h +160 -0
- data/ext/carray_cast.c +1212 -301
- data/ext/carray_cast_func.rb +81 -40
- data/ext/carray_class.c +53 -63
- data/ext/carray_config.h +28 -0
- data/ext/carray_conversion.c +350 -346
- data/ext/carray_copy.c +156 -268
- data/ext/carray_core.c +1342 -199
- data/ext/carray_count.c +312 -0
- data/ext/carray_data_type.c +43 -19
- data/ext/carray_element.c +585 -213
- data/ext/carray_factorize.c +2542 -0
- data/ext/carray_generate.c +230 -559
- data/ext/carray_histogram.c +490 -0
- data/ext/carray_hold.c +228 -0
- data/ext/carray_index_classifier.c +1035 -0
- data/ext/carray_index_classifier.h +27 -0
- data/ext/carray_internal.h +120 -0
- data/ext/carray_kernels_bincmp.c +4445 -0
- data/ext/carray_kernels_binop.c +10979 -0
- data/ext/carray_kernels_init.c +36 -0
- data/ext/carray_kernels_map.c +3466 -0
- data/ext/carray_kernels_moncmp.c +2096 -0
- data/ext/carray_kernels_monop.c +18312 -0
- data/ext/carray_kernels_reduce_aggregate.c +25836 -0
- data/ext/carray_kernels_reduce_boolean.c +329 -0
- data/ext/carray_kernels_reduce_cumulative.c +14592 -0
- data/ext/carray_kernels_reduce_extreme.c +16947 -0
- data/ext/carray_kernels_reduce_variance.c +3909 -0
- data/ext/carray_kernels_scan.c +3692 -0
- data/ext/carray_kernels_search.c +32137 -0
- data/ext/carray_kernels_sort.c +10625 -0
- data/ext/carray_kernels_triop.c +1391 -0
- data/ext/carray_lazy.c +567 -0
- data/ext/carray_loop.c +88 -200
- data/ext/carray_mask.c +848 -154
- data/ext/carray_math_kernel.h +120 -0
- data/ext/carray_mathfunc.c +10 -241
- data/ext/carray_median_percentile.c +1257 -0
- data/ext/carray_memory_view.c +1625 -0
- data/ext/carray_operator.c +1526 -318
- data/ext/carray_order.c +664 -1394
- data/ext/carray_partition.c +416 -0
- data/ext/carray_random.c +518 -0
- data/ext/carray_scatter.c +357 -0
- data/ext/carray_slab.c +1219 -0
- data/ext/carray_slab.h +84 -0
- data/ext/carray_sort.c +829 -0
- data/ext/carray_sort_kernel.c +620 -0
- data/ext/carray_struct.c +695 -0
- data/ext/carray_test.c +343 -229
- data/ext/carray_undef.c +34 -17
- data/ext/carray_utils.c +175 -74
- data/ext/extconf.rb +216 -55
- data/ext/mk_call_cfunc.rb +480 -0
- data/ext/mkkernel.rb +8842 -0
- data/ext/ruby_carray.c +202 -101
- data/ext/version.h +4 -14
- data/ext/version.rb +5 -13
- data/lib/carray/arrow_tensor.rb +401 -0
- data/lib/carray/attribute.rb +166 -0
- data/lib/carray/autoload_carray.rb +220 -0
- data/lib/carray/autoload_method_extension.rb +44 -0
- data/lib/carray/axis_group.rb +711 -0
- data/lib/carray/basics.rb +481 -0
- data/lib/carray/bincount_nd.rb +358 -0
- data/lib/carray/block_iterator.rb +604 -0
- data/lib/carray/boolean_reduce.rb +109 -0
- data/lib/carray/categorical.rb +561 -0
- data/lib/carray/categorical_iterator.rb +1062 -0
- data/lib/carray/complex.rb +150 -0
- data/lib/carray/conditional.rb +216 -0
- data/lib/carray/const_string.rb +228 -0
- data/lib/carray/construct.rb +139 -328
- data/lib/carray/core_extensions.rb +240 -0
- data/lib/carray/data_type_extension.rb +233 -0
- data/lib/carray/fixlen_string.rb +95 -0
- data/lib/carray/frame/concat.rb +132 -0
- data/lib/carray/frame/convert.rb +95 -0
- data/lib/carray/frame/csv_parser.rb +211 -0
- data/lib/carray/frame/frame.rb +649 -0
- data/lib/carray/frame/group.rb +186 -0
- data/lib/carray/frame/io.rb +164 -0
- data/lib/carray/frame/join.rb +248 -0
- data/lib/carray/frame/records.rb +99 -0
- data/lib/carray/frame/sort.rb +113 -0
- data/lib/carray/frame/verbs.rb +299 -0
- data/lib/carray/frame.rb +16 -0
- data/lib/carray/histogram.rb +512 -0
- data/lib/carray/inspect.rb +37 -20
- data/lib/carray/iterator.rb +57 -349
- data/lib/carray/lazy.rb +889 -0
- data/lib/carray/mask_gap_fill.rb +200 -0
- data/lib/carray/math.rb +78 -342
- data/lib/carray/meld_reduce.rb +289 -0
- data/lib/carray/methods/align_addr.rb +116 -0
- data/lib/carray/methods/bin.rb +128 -0
- data/lib/carray/methods/bincount.rb +87 -0
- data/lib/carray/methods/bit_string.rb +92 -0
- data/lib/carray/methods/broadcast.rb +63 -0
- data/lib/carray/methods/choose.rb +39 -0
- data/lib/carray/methods/composition.rb +280 -0
- data/lib/carray/methods/gather_nd.rb +206 -0
- data/lib/carray/methods/index.rb +39 -0
- data/lib/carray/methods/insert_block.rb +99 -0
- data/lib/carray/methods/is_in.rb +141 -0
- data/lib/carray/methods/join.rb +90 -0
- data/lib/carray/methods/locate_addr.rb +47 -0
- data/lib/carray/methods/mask_duplicates.rb +41 -0
- data/lib/carray/methods/meshgrid.rb +91 -0
- data/lib/carray/methods/mode.rb +126 -0
- data/lib/carray/methods/nunique.rb +46 -0
- data/lib/carray/methods/resize.rb +56 -0
- data/lib/carray/methods/snap.rb +156 -0
- data/lib/carray/methods/string_format.rb +57 -0
- data/lib/carray/methods/unique.rb +47 -0
- data/lib/carray/methods/value_counts.rb +71 -0
- data/lib/carray/mkmf.rb +124 -101
- data/lib/carray/runtime.rb +108 -0
- data/lib/carray/serialize.rb +478 -167
- data/lib/carray/slab_iterator.rb +292 -0
- data/lib/carray/stack.rb +291 -0
- data/lib/carray/string.rb +56 -180
- data/lib/carray/string_operation_extension.rb +289 -0
- data/lib/carray/struct.rb +335 -323
- data/lib/carray/struct_builder.rb +697 -0
- data/lib/carray/table.rb +41 -2
- data/lib/carray/time.rb +2255 -38
- data/lib/carray/window_iterator.rb +655 -0
- data/lib/carray.rb +55 -57
- metadata +163 -130
- data/Rakefile +0 -51
- data/TODO.md +0 -18
- data/ext/ca_iter_block.c +0 -257
- data/ext/ca_iter_dimension.c +0 -299
- data/ext/ca_iter_window.c +0 -214
- data/ext/ca_obj_mapping.c +0 -644
- data/ext/carray_iterator.c +0 -641
- data/ext/carray_math.rb +0 -850
- data/ext/carray_numeric.c +0 -259
- data/ext/carray_sort_addr.c +0 -254
- data/ext/carray_stat.c +0 -2100
- data/ext/carray_stat_proc.rb +0 -1999
- data/ext/mkmath.rb +0 -741
- data/ext/ruby_ccomplex.c +0 -509
- data/ext/ruby_float_func.c +0 -86
- data/lib/carray/array.rb +0 -8
- data/lib/carray/autoload/autoload_base.rb +0 -19
- data/lib/carray/autoload/autoload_gem_cairo.rb +0 -9
- data/lib/carray/autoload/autoload_gem_ffi.rb +0 -9
- data/lib/carray/autoload/autoload_gem_gnuplot.rb +0 -2
- data/lib/carray/autoload/autoload_gem_io_csv.rb +0 -14
- data/lib/carray/autoload/autoload_gem_io_pg.rb +0 -6
- data/lib/carray/autoload/autoload_gem_io_sqlite3.rb +0 -12
- data/lib/carray/autoload/autoload_gem_narray.rb +0 -10
- data/lib/carray/autoload/autoload_gem_numo_narray.rb +0 -15
- data/lib/carray/autoload/autoload_gem_opencv.rb +0 -16
- data/lib/carray/autoload/autoload_gem_random.rb +0 -8
- data/lib/carray/autoload/autoload_gem_rmagick.rb +0 -23
- data/lib/carray/autoload/autoload_gem_zimg.rb +0 -3
- data/lib/carray/autoload/autoload_io_imagemagick.rb +0 -6
- data/lib/carray/autoload/autoload_math_histogram.rb +0 -5
- data/lib/carray/autoload/autoload_math_recurrence.rb +0 -6
- data/lib/carray/autoload/autoload_object_iterator.rb +0 -1
- data/lib/carray/autoload/autoload_object_link.rb +0 -1
- data/lib/carray/autoload/autoload_object_pack.rb +0 -2
- data/lib/carray/autoload.rb +0 -141
- data/lib/carray/basic.rb +0 -191
- data/lib/carray/broadcast.rb +0 -101
- data/lib/carray/compose.rb +0 -315
- data/lib/carray/convert.rb +0 -115
- data/lib/carray/info.rb +0 -110
- data/lib/carray/io/imagemagick.rb +0 -235
- data/lib/carray/mask.rb +0 -102
- data/lib/carray/math/histogram.rb +0 -177
- data/lib/carray/math/recurrence.rb +0 -93
- data/lib/carray/object/ca_obj_iterator.rb +0 -50
- data/lib/carray/object/ca_obj_link.rb +0 -50
- data/lib/carray/object/ca_obj_pack.rb +0 -99
- data/lib/carray/obsolete.rb +0 -256
- data/lib/carray/ordering.rb +0 -181
- data/lib/carray/testing.rb +0 -51
- data/lib/carray/transform.rb +0 -109
- data/misc/Methods.ja.md +0 -182
- data/misc/NOTE +0 -51
- data/spec/Classes/CABitfield_spec.rb +0 -58
- data/spec/Classes/CABlockIterator_spec.rb +0 -114
- data/spec/Classes/CABlock_spec.rb +0 -205
- data/spec/Classes/CAField_spec.rb +0 -39
- data/spec/Classes/CAGrid_spec.rb +0 -75
- data/spec/Classes/CAMap_spec.rb +0 -0
- data/spec/Classes/CAMapping_spec.rb +0 -105
- data/spec/Classes/CAObject_attribute_spec.rb +0 -33
- data/spec/Classes/CAObject_spec.rb +0 -33
- data/spec/Classes/CARefer_spec.rb +0 -93
- data/spec/Classes/CARepeat_spec.rb +0 -65
- data/spec/Classes/CASelect_spec.rb +0 -22
- data/spec/Classes/CAShift_spec.rb +0 -16
- data/spec/Classes/CAStruct_spec.rb +0 -71
- data/spec/Classes/CATranspose_spec.rb +0 -60
- data/spec/Classes/CAUnboudRepeat_spec.rb +0 -102
- data/spec/Classes/CAWindow_spec.rb +0 -54
- data/spec/Classes/CAWrap_spec.rb +0 -8
- data/spec/Classes/CArray_spec.rb +0 -184
- data/spec/Classes/CScalar_spec.rb +0 -55
- data/spec/Classes/ex1.rb +0 -46
- data/spec/Features/feature_130_spec.rb +0 -19
- data/spec/Features/feature_attributes_spec.rb +0 -280
- data/spec/Features/feature_boolean_spec.rb +0 -98
- data/spec/Features/feature_broadcast.rb +0 -116
- data/spec/Features/feature_cast_function.rb +0 -19
- data/spec/Features/feature_cast_spec.rb +0 -33
- data/spec/Features/feature_class_spec.rb +0 -84
- data/spec/Features/feature_complex_spec.rb +0 -42
- data/spec/Features/feature_composite_spec.rb +0 -124
- data/spec/Features/feature_convert_spec.rb +0 -46
- data/spec/Features/feature_copy_spec.rb +0 -123
- data/spec/Features/feature_creation_spec.rb +0 -84
- data/spec/Features/feature_element_spec.rb +0 -144
- data/spec/Features/feature_extream_spec.rb +0 -54
- data/spec/Features/feature_generate_spec.rb +0 -74
- data/spec/Features/feature_index_spec.rb +0 -69
- data/spec/Features/feature_mask_spec.rb +0 -580
- data/spec/Features/feature_math_spec.rb +0 -97
- data/spec/Features/feature_order_spec.rb +0 -146
- data/spec/Features/feature_ref_store_spec.rb +0 -209
- data/spec/Features/feature_serialization_spec.rb +0 -125
- data/spec/Features/feature_stat_spec.rb +0 -397
- data/spec/Features/feature_virtual_spec.rb +0 -48
- data/spec/Features/method_eq_spec.rb +0 -81
- data/spec/Features/method_is_nan_spec.rb +0 -12
- data/spec/Features/method_map_spec.rb +0 -54
- data/spec/Features/method_max_with.rb +0 -20
- data/spec/Features/method_min_with.rb +0 -19
- data/spec/Features/method_ne_spec.rb +0 -18
- data/spec/Features/method_project_spec.rb +0 -188
- data/spec/Features/method_ref_spec.rb +0 -27
- data/spec/Features/method_round_spec.rb +0 -11
- data/spec/Features/method_s_linspace_spec.rb +0 -48
- data/spec/Features/method_s_span_spec.rb +0 -14
- data/spec/Features/method_seq_spec.rb +0 -47
- data/spec/Features/method_sort_with.rb +0 -43
- data/spec/Features/method_sorted_with.rb +0 -29
- data/spec/Features/method_span_spec.rb +0 -42
- data/spec/Features/method_wrap_readonly_spec.rb +0 -43
- data/spec/UnitTest/test_CAVirtual.rb +0 -214
- data/spec/spec_all.rb +0 -10
- data/utils/ca_ase.rb +0 -21
- data/utils/ca_methods.rb +0 -15
- data/utils/cast_checker.rb +0 -30
- data/utils/convert_test.rb +0 -73
- data/utils/extract_yard.rb +0 -22
- data/utils/guess_shape.rb +0 -76
- data/utils/monkey_patch_methods.rb +0 -62
- data/utils/remove_resource_fork.sh +0 -5
data/lib/carray/construct.rb
CHANGED
|
@@ -1,229 +1,28 @@
|
|
|
1
|
-
# ----------------------------------------------------------------------------
|
|
2
|
-
#
|
|
3
|
-
# carray/constructor.rb
|
|
4
|
-
#
|
|
5
|
-
# This file is part of Ruby/CArray extension library.
|
|
6
|
-
#
|
|
7
|
-
# Copyright (C) 2005-2020 Hiroki Motoyoshi
|
|
8
|
-
#
|
|
9
|
-
# ----------------------------------------------------------------------------
|
|
10
|
-
|
|
11
|
-
class CArray
|
|
12
|
-
|
|
13
|
-
#
|
|
14
|
-
# CArray.span(data_type, range[, step])
|
|
15
|
-
# CArray.span(range[, step]) -> data_type guessed by range.first type
|
|
16
|
-
#
|
|
17
|
-
|
|
18
|
-
def self.span (*argv)
|
|
19
|
-
if argv.first.is_a?(Range)
|
|
20
|
-
type = nil
|
|
21
|
-
else
|
|
22
|
-
type, = *CArray.guess_type_and_bytes(argv.shift, nil)
|
|
23
|
-
end
|
|
24
|
-
range, step = argv[0], argv[1]
|
|
25
|
-
start, stop = range.begin, range.end
|
|
26
|
-
if step == 0
|
|
27
|
-
raise "step should not be 0"
|
|
28
|
-
end
|
|
29
|
-
if not type
|
|
30
|
-
case start
|
|
31
|
-
when Integer
|
|
32
|
-
type = CA_INT32
|
|
33
|
-
when Float
|
|
34
|
-
type = CA_FLOAT64
|
|
35
|
-
else
|
|
36
|
-
type = CA_OBJECT
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
if type == CA_OBJECT and not step
|
|
40
|
-
return CA_OBJECT(range.to_a)
|
|
41
|
-
else
|
|
42
|
-
step ||= 1
|
|
43
|
-
if range.exclude_end?
|
|
44
|
-
n = ((stop - start).abs/step).floor
|
|
45
|
-
else
|
|
46
|
-
n = ((stop - start).abs/step).floor + 1
|
|
47
|
-
end
|
|
48
|
-
if start <= stop
|
|
49
|
-
return CArray.new(type, [n]).seq(start, step)
|
|
50
|
-
else
|
|
51
|
-
return CArray.new(type, [n]).seq(start, -step.abs)
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def span! (range)
|
|
57
|
-
first = range.begin.to_r
|
|
58
|
-
last = range.end.to_r
|
|
59
|
-
if integer?
|
|
60
|
-
if range.exclude_end?
|
|
61
|
-
step = ((last-1)-first+1)/elements
|
|
62
|
-
else
|
|
63
|
-
step = (last-first+1)/elements
|
|
64
|
-
end
|
|
65
|
-
else
|
|
66
|
-
if range.exclude_end?
|
|
67
|
-
step = (last-first)/elements
|
|
68
|
-
else
|
|
69
|
-
step = (last-first)/(elements-1)
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
if integer? && step.denominator != 1
|
|
73
|
-
self[] = (first + seq * step).floor
|
|
74
|
-
else
|
|
75
|
-
seq!(first, step)
|
|
76
|
-
end
|
|
77
|
-
return self
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
def span (range)
|
|
81
|
-
return template.span!(range)
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
#
|
|
85
|
-
#
|
|
86
|
-
#
|
|
87
|
-
|
|
88
|
-
def scale! (xa, xb)
|
|
89
|
-
xa = xa.to_f
|
|
90
|
-
xb = xb.to_f
|
|
91
|
-
seq!(xa, (xb-xa)/(elements-1))
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
def scale (xa, xb)
|
|
95
|
-
template.scale!(xa, xb)
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
# @private
|
|
99
|
-
# Create new CArray object from the return value of the block
|
|
100
|
-
# with data type +type+. The dimensional size and the initialization value
|
|
101
|
-
# are guessed from the return value of the block.
|
|
102
|
-
# The block should return one of the following objects.
|
|
103
|
-
#
|
|
104
|
-
# * Numeric
|
|
105
|
-
# * Array
|
|
106
|
-
# * CArray
|
|
107
|
-
# * an object that has either method +to_ca+ or +to_a+ or +map+
|
|
108
|
-
#
|
|
109
|
-
# When the return value of the block is a Numeric or CScalar object,
|
|
110
|
-
# CScalar object is returned.
|
|
111
|
-
#
|
|
112
|
-
def self.__new__ (type, *args) # :nodoc:
|
|
113
|
-
case v = args.first
|
|
114
|
-
when CArray
|
|
115
|
-
return ( v.data_type == type ) ? v.to_ca : v.to_type(type)
|
|
116
|
-
when Array
|
|
117
|
-
return CArray.new(type, CArray.guess_array_shape(v)) { v }
|
|
118
|
-
when Range
|
|
119
|
-
return CArray.span(type, *args)
|
|
120
|
-
when String
|
|
121
|
-
if type == CA_OBJECT
|
|
122
|
-
return CScalar.new(CA_OBJECT) { v }
|
|
123
|
-
elsif type == CA_BOOLEAN
|
|
124
|
-
v = v.dup
|
|
125
|
-
v.tr!('^01',"1")
|
|
126
|
-
v.tr!('01',"\x0\x1")
|
|
127
|
-
return CArray.boolean(v.length).load_binary(v)
|
|
128
|
-
else
|
|
129
|
-
case v
|
|
130
|
-
when /;/
|
|
131
|
-
v = v.strip.split(/\s*;\s*/).
|
|
132
|
-
map{|s| s.split(/\s+|\s*,\s*/).map{|x| x=='_' ? UNDEF : x} }
|
|
133
|
-
else
|
|
134
|
-
v = v.strip.split(/\s+|\s*,\s*/).map{|x| x=='_' ? UNDEF : x}
|
|
135
|
-
end
|
|
136
|
-
return CArray.new(type, CArray.guess_array_shape(v)) { v }
|
|
137
|
-
end
|
|
138
|
-
when NilClass
|
|
139
|
-
return CArray.new(type, [0])
|
|
140
|
-
else
|
|
141
|
-
if v.respond_to?(:to_ca)
|
|
142
|
-
ca = v.to_ca
|
|
143
|
-
return ( ca.data_type == type ) ? ca : ca.to_type(type)
|
|
144
|
-
else
|
|
145
|
-
return CScalar.new(type) { v }
|
|
146
|
-
end
|
|
147
|
-
end
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
# @private
|
|
151
|
-
def self.__new_fixlen__ (bytes, v) # :nodoc:
|
|
152
|
-
case v
|
|
153
|
-
when CArray
|
|
154
|
-
return ( v.data_type == :fixlen ) ? v.to_ca : v.to_type(:fixlen, :bytes=>bytes)
|
|
155
|
-
when Array
|
|
156
|
-
unless bytes
|
|
157
|
-
bytes = v.map{|s| s.length}.max
|
|
158
|
-
end
|
|
159
|
-
return CArray.new(:fixlen, CArray.guess_array_shape(v), :bytes=>bytes) { v }
|
|
160
|
-
when NilClass
|
|
161
|
-
return CArray.new(type, [0])
|
|
162
|
-
else
|
|
163
|
-
if v.respond_to?(:to_ca)
|
|
164
|
-
ca = v.to_ca
|
|
165
|
-
return ( ca.data_type == :fixlen ) ? ca : ca.to_type(:fixlen, :bytes=>bytes)
|
|
166
|
-
else
|
|
167
|
-
return CScalar.new(:fixlen, :bytes=>bytes) { v }
|
|
168
|
-
end
|
|
169
|
-
end
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
end
|
|
173
|
-
|
|
174
1
|
#
|
|
175
2
|
# CA_INT8(data)
|
|
176
3
|
# :
|
|
177
|
-
#
|
|
4
|
+
# CA_OBJECT(data)
|
|
178
5
|
#
|
|
179
|
-
#
|
|
180
|
-
#
|
|
181
|
-
#
|
|
6
|
+
# Cast +data+ to a CArray of the data_type indicated by the method name.
|
|
7
|
+
# This is a polymorphic cast (not a fresh allocator): the source +data+
|
|
8
|
+
# is coerced into a CArray of the target data_type, dispatching on its
|
|
9
|
+
# Ruby class. +data+ should be one of the following objects:
|
|
182
10
|
#
|
|
183
|
-
# * Numeric
|
|
184
|
-
# * Array
|
|
185
|
-
# * CArray
|
|
186
|
-
# *
|
|
11
|
+
# * Numeric -> CScalar (0-d CArray)
|
|
12
|
+
# * Array -> shape-guessed CArray, element-wise cast
|
|
13
|
+
# * CArray -> data_type cast (copy if same data_type, +to_type+ otherwise)
|
|
14
|
+
# * Range -> arange-like sequence (start..stop with step 1)
|
|
15
|
+
# * String -> parsed (per-data_type parser)
|
|
16
|
+
# * nil -> empty CArray
|
|
17
|
+
# * any object responding to +to_ca+ or +to_a+ -> coerced then cast
|
|
187
18
|
#
|
|
188
19
|
# When the block returns a Numeric or CScalar object,
|
|
189
20
|
# the resulted array is a CScalar object.
|
|
190
21
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
"CA_INT16",
|
|
196
|
-
"CA_UINT16",
|
|
197
|
-
"CA_INT32",
|
|
198
|
-
"CA_UINT32",
|
|
199
|
-
"CA_INT64",
|
|
200
|
-
"CA_UINT64",
|
|
201
|
-
"CA_FLOAT32",
|
|
202
|
-
"CA_FLOAT64",
|
|
203
|
-
"CA_FLOAT128",
|
|
204
|
-
"CA_CMPLX64",
|
|
205
|
-
"CA_CMPLX128",
|
|
206
|
-
"CA_CMPLX256",
|
|
207
|
-
"CA_OBJECT",
|
|
208
|
-
"CA_BYTE",
|
|
209
|
-
"CA_SHORT",
|
|
210
|
-
"CA_INT",
|
|
211
|
-
"CA_FLOAT",
|
|
212
|
-
"CA_DOUBLE",
|
|
213
|
-
"CA_COMPLEX",
|
|
214
|
-
"CA_DCOMPLEX",
|
|
215
|
-
"CA_SIZE",
|
|
216
|
-
].each do |name|
|
|
217
|
-
eval %{
|
|
218
|
-
def #{name} (*val)
|
|
219
|
-
CArray.__new__(#{name}, *val)
|
|
220
|
-
end
|
|
221
|
-
}
|
|
222
|
-
end
|
|
223
|
-
|
|
224
|
-
def CA_FIXLEN (val, options = {})
|
|
225
|
-
CArray.__new_fixlen__(options[:bytes], val)
|
|
226
|
-
end
|
|
22
|
+
# CA_BOOLEAN / CA_INT8 / ... / CA_OBJECT (+ type-name aliases CA_BYTE /
|
|
23
|
+
# CA_SHORT / CA_INT / CA_FLOAT / CA_DOUBLE / CA_COMPLEX / CA_DCOMPLEX /
|
|
24
|
+
# CA_SIZE) and CA_FIXLEN are defined as global functions in C
|
|
25
|
+
# (ext/carray_cast.c).
|
|
227
26
|
|
|
228
27
|
class CArray
|
|
229
28
|
|
|
@@ -233,118 +32,198 @@ class CArray
|
|
|
233
32
|
module DataTypeExtension
|
|
234
33
|
end
|
|
235
34
|
|
|
35
|
+
# CArray whose elements are `boolean`. Naming the element type as a
|
|
36
|
+
# class lets a constructor be spelled `CArray::Boolean.new(...)`; see
|
|
37
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
236
38
|
class Boolean
|
|
237
39
|
extend DataTypeNewConstructor
|
|
238
40
|
extend DataTypeExtension
|
|
41
|
+
# @!visibility private
|
|
239
42
|
TypeSymbol = :boolean
|
|
43
|
+
# @!visibility private
|
|
240
44
|
DataType = CA_BOOLEAN
|
|
241
45
|
end
|
|
242
46
|
|
|
47
|
+
# CArray whose elements are `uint8`. Naming the element type as a
|
|
48
|
+
# class lets a constructor be spelled `CArray::UInt8.new(...)`; see
|
|
49
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
243
50
|
class UInt8
|
|
244
51
|
extend DataTypeNewConstructor
|
|
245
52
|
extend DataTypeExtension
|
|
53
|
+
# @!visibility private
|
|
246
54
|
TypeSymbol = :uint8
|
|
55
|
+
# @!visibility private
|
|
247
56
|
DataType = CA_UINT8
|
|
248
57
|
end
|
|
249
58
|
|
|
59
|
+
# CArray whose elements are `uint16`. Naming the element type as a
|
|
60
|
+
# class lets a constructor be spelled `CArray::UInt16.new(...)`; see
|
|
61
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
250
62
|
class UInt16
|
|
251
63
|
extend DataTypeNewConstructor
|
|
252
64
|
extend DataTypeExtension
|
|
65
|
+
# @!visibility private
|
|
253
66
|
TypeSymbol = :uint16
|
|
67
|
+
# @!visibility private
|
|
254
68
|
DataType = CA_UINT16
|
|
255
69
|
end
|
|
256
70
|
|
|
71
|
+
# CArray whose elements are `uint32`. Naming the element type as a
|
|
72
|
+
# class lets a constructor be spelled `CArray::UInt32.new(...)`; see
|
|
73
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
257
74
|
class UInt32
|
|
258
75
|
extend DataTypeNewConstructor
|
|
259
76
|
extend DataTypeExtension
|
|
77
|
+
# @!visibility private
|
|
260
78
|
TypeSymbol = :uint32
|
|
79
|
+
# @!visibility private
|
|
261
80
|
DataType = CA_UINT32
|
|
262
81
|
end
|
|
263
82
|
|
|
83
|
+
# CArray whose elements are `uint64`. Naming the element type as a
|
|
84
|
+
# class lets a constructor be spelled `CArray::UInt64.new(...)`; see
|
|
85
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
264
86
|
class UInt64
|
|
265
87
|
extend DataTypeNewConstructor
|
|
266
88
|
extend DataTypeExtension
|
|
89
|
+
# @!visibility private
|
|
267
90
|
TypeSymbol = :uint64
|
|
91
|
+
# @!visibility private
|
|
268
92
|
DataType = CA_UINT64
|
|
269
93
|
end
|
|
270
94
|
|
|
95
|
+
# CArray whose elements are `int8`. Naming the element type as a
|
|
96
|
+
# class lets a constructor be spelled `CArray::Int8.new(...)`; see
|
|
97
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
271
98
|
class Int8
|
|
272
99
|
extend DataTypeNewConstructor
|
|
273
100
|
extend DataTypeExtension
|
|
101
|
+
# @!visibility private
|
|
274
102
|
TypeSymbol = :int8
|
|
103
|
+
# @!visibility private
|
|
275
104
|
DataType = CA_INT8
|
|
276
105
|
end
|
|
277
106
|
|
|
107
|
+
# CArray whose elements are `int16`. Naming the element type as a
|
|
108
|
+
# class lets a constructor be spelled `CArray::Int16.new(...)`; see
|
|
109
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
278
110
|
class Int16
|
|
279
111
|
extend DataTypeNewConstructor
|
|
280
112
|
extend DataTypeExtension
|
|
113
|
+
# @!visibility private
|
|
281
114
|
TypeSymbol = :int16
|
|
115
|
+
# @!visibility private
|
|
282
116
|
DataType = CA_INT16
|
|
283
117
|
end
|
|
284
118
|
|
|
119
|
+
# CArray whose elements are `int32`. Naming the element type as a
|
|
120
|
+
# class lets a constructor be spelled `CArray::Int32.new(...)`; see
|
|
121
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
285
122
|
class Int32
|
|
286
123
|
extend DataTypeNewConstructor
|
|
287
124
|
extend DataTypeExtension
|
|
125
|
+
# @!visibility private
|
|
288
126
|
TypeSymbol = :int32
|
|
127
|
+
# @!visibility private
|
|
289
128
|
DataType = CA_INT32
|
|
290
129
|
end
|
|
291
130
|
|
|
131
|
+
# CArray whose elements are `int64`. Naming the element type as a
|
|
132
|
+
# class lets a constructor be spelled `CArray::Int64.new(...)`; see
|
|
133
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
292
134
|
class Int64
|
|
293
135
|
extend DataTypeNewConstructor
|
|
294
136
|
extend DataTypeExtension
|
|
137
|
+
# @!visibility private
|
|
295
138
|
TypeSymbol = :int64
|
|
139
|
+
# @!visibility private
|
|
296
140
|
DataType = CA_INT64
|
|
297
141
|
end
|
|
298
142
|
|
|
143
|
+
# CArray whose elements are `float32`. Naming the element type as a
|
|
144
|
+
# class lets a constructor be spelled `CArray::Float32.new(...)`; see
|
|
145
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
299
146
|
class Float32
|
|
300
147
|
extend DataTypeNewConstructor
|
|
301
148
|
extend DataTypeExtension
|
|
149
|
+
# @!visibility private
|
|
302
150
|
TypeSymbol = :float32
|
|
151
|
+
# @!visibility private
|
|
303
152
|
DataType = CA_FLOAT32
|
|
304
153
|
end
|
|
305
154
|
|
|
155
|
+
# Numo-compatible alias of {Float32}.
|
|
306
156
|
SFloat = Float32
|
|
307
157
|
|
|
158
|
+
# CArray whose elements are `float64`. Naming the element type as a
|
|
159
|
+
# class lets a constructor be spelled `CArray::Float64.new(...)`; see
|
|
160
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
308
161
|
class Float64
|
|
309
162
|
extend DataTypeNewConstructor
|
|
310
163
|
extend DataTypeExtension
|
|
164
|
+
# @!visibility private
|
|
311
165
|
TypeSymbol = :float64
|
|
166
|
+
# @!visibility private
|
|
312
167
|
DataType = CA_FLOAT64
|
|
313
168
|
end
|
|
314
169
|
|
|
170
|
+
# Numo-compatible alias of {Float64}.
|
|
315
171
|
DFloat = Float64
|
|
316
172
|
|
|
173
|
+
# CArray whose elements are `complex64`. Naming the element type as a
|
|
174
|
+
# class lets a constructor be spelled `CArray::Complex64.new(...)`; see
|
|
175
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
317
176
|
class Complex64
|
|
318
177
|
extend DataTypeNewConstructor
|
|
319
178
|
extend DataTypeExtension
|
|
179
|
+
# @!visibility private
|
|
320
180
|
TypeSymbol = :complex64
|
|
181
|
+
# @!visibility private
|
|
321
182
|
DataType = CA_CMPLX64
|
|
322
183
|
end
|
|
323
184
|
|
|
185
|
+
# Numo-compatible alias of {Complex64}.
|
|
324
186
|
SComplex = Complex64
|
|
325
187
|
|
|
188
|
+
# CArray whose elements are `complex128`. Naming the element type as a
|
|
189
|
+
# class lets a constructor be spelled `CArray::Complex128.new(...)`; see
|
|
190
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
326
191
|
class Complex128
|
|
327
192
|
extend DataTypeNewConstructor
|
|
328
193
|
extend DataTypeExtension
|
|
194
|
+
# @!visibility private
|
|
329
195
|
TypeSymbol = :complex128
|
|
196
|
+
# @!visibility private
|
|
330
197
|
DataType = CA_CMPLX128
|
|
331
198
|
end
|
|
332
199
|
|
|
200
|
+
# Numo-compatible alias of {Complex128}.
|
|
333
201
|
DComplex = Complex128
|
|
334
202
|
|
|
203
|
+
# CArray whose elements are `object`. Naming the element type as a
|
|
204
|
+
# class lets a constructor be spelled `CArray::Object.new(...)`; see
|
|
205
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
335
206
|
class Object
|
|
336
207
|
extend DataTypeNewConstructor
|
|
337
208
|
extend DataTypeExtension
|
|
209
|
+
# @!visibility private
|
|
338
210
|
TypeSymbol = :object
|
|
211
|
+
# @!visibility private
|
|
339
212
|
DataType = CA_OBJECT
|
|
340
213
|
end
|
|
341
214
|
|
|
215
|
+
# Numo-compatible alias of {Object}.
|
|
342
216
|
RObject = Object
|
|
343
217
|
|
|
218
|
+
# CArray whose elements are `fixlen`. Naming the element type as a
|
|
219
|
+
# class lets a constructor be spelled `CArray::Fixlen.new(...)`; see
|
|
220
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
344
221
|
class Fixlen
|
|
345
222
|
extend DataTypeNewConstructor
|
|
346
223
|
extend DataTypeExtension
|
|
224
|
+
# @!visibility private
|
|
347
225
|
TypeSymbol = :fixlen
|
|
226
|
+
# @!visibility private
|
|
348
227
|
DataType = CA_FIXLEN
|
|
349
228
|
end
|
|
350
229
|
|
|
@@ -352,133 +231,65 @@ end
|
|
|
352
231
|
|
|
353
232
|
class CArray
|
|
354
233
|
extend DataTypeExtension
|
|
234
|
+
# @!visibility private
|
|
355
235
|
TypeSymbol = nil
|
|
236
|
+
# @!visibility private
|
|
356
237
|
DataType = nil
|
|
357
238
|
end
|
|
358
239
|
|
|
359
240
|
class CArray
|
|
360
241
|
|
|
242
|
+
# Constructors added to every typed class ({Float64}, {Int32}, ...) so the
|
|
243
|
+
# class itself names the element type. Each forwards to the `CArray`
|
|
244
|
+
# equivalent with `data_type:` filled in.
|
|
361
245
|
module DataTypeNewConstructor
|
|
362
|
-
|
|
246
|
+
|
|
247
|
+
# @overload new(*shape)
|
|
248
|
+
# Allocates a new CArray of this typed subclass with the given
|
|
249
|
+
# shape.
|
|
250
|
+
# @param shape [Array<Integer>] shape of the new CArray.
|
|
251
|
+
# @return [CArray]
|
|
363
252
|
def new (*shape)
|
|
364
253
|
CArray.new(self::DataType, shape)
|
|
365
254
|
end
|
|
366
|
-
|
|
367
|
-
end
|
|
368
|
-
|
|
369
|
-
module DataTypeExtension
|
|
370
255
|
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
CA_OBJECT
|
|
382
|
-
end
|
|
256
|
+
# @overload from_memory_view(obj)
|
|
257
|
+
# Returns a fresh CArray interpreted as this typed subclass's
|
|
258
|
+
# `data_type`, imported by copy from a MemoryView producer.
|
|
259
|
+
# Forwards to
|
|
260
|
+
# `CArray.from_memory_view(obj, data_type: self::DataType)`; the
|
|
261
|
+
# result is always 1-D (chain `.reshape` for higher rank).
|
|
262
|
+
# @param obj [Object] MemoryView producer.
|
|
263
|
+
# @return [CArray]
|
|
264
|
+
def from_memory_view (obj)
|
|
265
|
+
CArray.from_memory_view(obj, data_type: self::DataType)
|
|
383
266
|
end
|
|
384
|
-
|
|
385
|
-
private :guess_data_type_from_values
|
|
386
267
|
|
|
387
|
-
|
|
388
|
-
|
|
268
|
+
# @overload wrap_memory_view(obj)
|
|
269
|
+
# Returns a zero-copy CAWrap over `obj`'s MemoryView interpreted
|
|
270
|
+
# as this typed subclass's `data_type`. Forwards to
|
|
271
|
+
# `CArray.wrap_memory_view(obj, data_type: self::DataType)`; the
|
|
272
|
+
# result is always 1-D (chain `.reshape` for higher rank).
|
|
273
|
+
#
|
|
274
|
+
# Here the receiver names the element type, not the class of the
|
|
275
|
+
# result: the call forwards with `CArray` as the receiver, so a
|
|
276
|
+
# `CAWrap` comes back. Choosing the class is the other reading of
|
|
277
|
+
# the receiver, and it lives on `CArray.wrap_memory_view` itself.
|
|
278
|
+
# @param obj [Object] MemoryView producer.
|
|
279
|
+
# @return [CAWrap]
|
|
280
|
+
def wrap_memory_view (obj)
|
|
281
|
+
CArray.wrap_memory_view(obj, data_type: self::DataType)
|
|
389
282
|
end
|
|
390
283
|
|
|
391
|
-
def ones (*shape)
|
|
392
|
-
CArray.new(self::DataType || CA_FLOAT64 , shape).one
|
|
393
|
-
end
|
|
394
|
-
|
|
395
|
-
def eye (n, m = nil, k = 0)
|
|
396
|
-
m ||= n
|
|
397
|
-
mat = CArray.new(self::DataType || CA_FLOAT64, [n, m])
|
|
398
|
-
start = ( k == 0 ) ? k : ( k > 0 ? k : m - k - 1 )
|
|
399
|
-
mat[[start..-1,m+1]] = 1
|
|
400
|
-
mat
|
|
401
|
-
end
|
|
402
|
-
|
|
403
|
-
def identity (n)
|
|
404
|
-
mat = CArray.new(self::DataType || CA_FLOAT64, [n, n])
|
|
405
|
-
mat[[nil,n+1]] = 1
|
|
406
|
-
mat
|
|
407
|
-
end
|
|
408
|
-
|
|
409
|
-
def linspace (x1, x2, n = 100)
|
|
410
|
-
data_type = self::DataType
|
|
411
|
-
unless data_type
|
|
412
|
-
guess = guess_data_type_from_values(x1, x2)
|
|
413
|
-
guess = CA_FLOAT64 if guess == CA_INT64
|
|
414
|
-
data_type = guess
|
|
415
|
-
end
|
|
416
|
-
CArray.new(data_type, [n]).span(x1..x2)
|
|
417
|
-
end
|
|
418
|
-
|
|
419
|
-
def arange (*args)
|
|
420
|
-
case args.size
|
|
421
|
-
when 3
|
|
422
|
-
start, stop, step = *args
|
|
423
|
-
when 2
|
|
424
|
-
start, stop = *args
|
|
425
|
-
step = 1
|
|
426
|
-
when 1
|
|
427
|
-
start = 0
|
|
428
|
-
stop, = *args
|
|
429
|
-
step = 1
|
|
430
|
-
end
|
|
431
|
-
data_type = self::DataType
|
|
432
|
-
data_type ||= guess_data_type_from_values(start, stop, step)
|
|
433
|
-
CArray.__new__(data_type, start..stop-step, step)
|
|
434
|
-
end
|
|
435
|
-
|
|
436
|
-
def full (shape, fill_value)
|
|
437
|
-
data_type = self::DataType
|
|
438
|
-
data_type ||= guess_data_type_from_values(fill_value)
|
|
439
|
-
shape = [shape] unless shape.is_a?(Array)
|
|
440
|
-
CArray.new(data_type, shape).fill(fill_value)
|
|
441
|
-
end
|
|
442
|
-
|
|
443
284
|
end
|
|
444
285
|
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
class
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
### no operation
|
|
453
|
-
when "ij"
|
|
454
|
-
axes = axes.map{|axis| axis.seq }
|
|
455
|
-
else
|
|
456
|
-
raise ArgumentError, %{indexing option should be one of "xy" and "ij"}
|
|
457
|
-
end
|
|
458
|
-
shape = axes.map(&:size).reverse
|
|
459
|
-
if sparse ### => CAUnboundRepeat
|
|
460
|
-
list = axes.map.with_index do |axis, k|
|
|
461
|
-
extended_shape = (shape.size-1).downto(0).map { |i| ( i == k ) ? nil : :* }
|
|
462
|
-
if copy
|
|
463
|
-
axis[*extended_shape].to_ca
|
|
464
|
-
else
|
|
465
|
-
axis[*extended_shape]
|
|
466
|
-
end
|
|
467
|
-
end
|
|
468
|
-
else ### => CARepeat
|
|
469
|
-
naxes = shape.size
|
|
470
|
-
list = axes.map.with_index do |axis, k|
|
|
471
|
-
extended_shape = shape.dup
|
|
472
|
-
extended_shape[naxes - k - 1] = :%
|
|
473
|
-
if copy
|
|
474
|
-
axis[*extended_shape].to_ca
|
|
475
|
-
else
|
|
476
|
-
axis[*extended_shape]
|
|
477
|
-
end
|
|
478
|
-
end
|
|
479
|
-
end
|
|
480
|
-
return block.call(*list) if block
|
|
481
|
-
return list
|
|
286
|
+
# DataTypeExtension is the carrier module for Numo / NumPy-style
|
|
287
|
+
# factory methods that are extended onto CArray and every typed
|
|
288
|
+
# CArray::Int32 / Float64 / ... class below. Its body is defined
|
|
289
|
+
# in lib/carray/data_type_extension.rb (required after this file),
|
|
290
|
+
# keeping the soft-compatibility surface separate from carray's
|
|
291
|
+
# native constructor API.
|
|
292
|
+
module DataTypeExtension
|
|
482
293
|
end
|
|
483
|
-
|
|
294
|
+
|
|
484
295
|
end
|