carray 2.0.1 → 3.0.1
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 +6 -25
- data/CHANGELOG.md +338 -0
- data/{NEWS.md → CHANGELOG.v1.md} +3 -0
- data/LICENSE +1 -1
- data/README.md +120 -36
- data/carray.gemspec +32 -30
- 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 +1244 -0
- data/ext/ca_bincmp_dispatch.c +76 -0
- data/ext/ca_bincmp_dispatch.h +85 -0
- data/ext/ca_binop_dispatch.c +124 -0
- data/ext/ca_binop_dispatch.h +152 -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 +239 -0
- data/ext/ca_group_iter.c +304 -0
- data/ext/ca_iter_substrate.h +325 -0
- data/ext/ca_kernel_iterator.c +4367 -0
- data/ext/ca_kernel_iterator.h +2596 -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 +839 -0
- data/ext/ca_obj_binop.c +948 -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 +967 -0
- data/ext/ca_obj_face.c +750 -0
- data/ext/ca_obj_face.h +279 -0
- data/ext/ca_obj_fake.c +239 -100
- data/ext/ca_obj_farray.c +54 -441
- data/ext/ca_obj_field.c +82 -529
- data/ext/ca_obj_fixlen_string.c +308 -0
- data/ext/ca_obj_grid.c +866 -440
- data/ext/ca_obj_meld.c +1039 -0
- data/ext/ca_obj_moncmp.c +588 -0
- data/ext/ca_obj_monop.c +1123 -0
- data/ext/ca_obj_object.c +866 -296
- data/ext/ca_obj_record.c +470 -0
- data/ext/ca_obj_reduce.c +97 -82
- data/ext/ca_obj_refer.c +593 -459
- data/ext/ca_obj_remap.c +475 -0
- data/ext/ca_obj_repeat.c +92 -477
- data/ext/ca_obj_roll.c +624 -0
- data/ext/ca_obj_select.c +344 -296
- data/ext/ca_obj_select_axis.c +1306 -0
- data/ext/ca_obj_shift.c +231 -793
- data/ext/ca_obj_source.c +78 -0
- data/ext/ca_obj_stack.c +1173 -0
- data/ext/ca_obj_stride.c +2584 -0
- data/ext/ca_obj_string.c +270 -0
- data/ext/ca_obj_tile.c +622 -0
- data/ext/ca_obj_time.c +548 -0
- data/ext/ca_obj_timedelta.c +437 -0
- data/ext/ca_obj_transpose.c +62 -516
- data/ext/ca_obj_triop.c +785 -0
- data/ext/ca_obj_window.c +1202 -565
- data/ext/ca_op_byte_swap.c +175 -0
- data/ext/ca_op_cmplx64.h +123 -0
- data/ext/ca_op_ipower.c +316 -0
- data/ext/ca_op_powi.h +88 -0
- data/ext/ca_sort_kernels.h +132 -0
- data/ext/ca_sweep_engine.c +473 -0
- data/ext/ca_sweep_engine.h +166 -0
- data/ext/ca_transform_common.c +235 -0
- data/ext/ca_triop_dispatch.c +55 -0
- data/ext/ca_triop_dispatch.h +62 -0
- data/ext/carray.h +810 -420
- data/ext/carray_access.c +873 -731
- data/ext/carray_attribute.c +98 -329
- data/ext/carray_bincount.c +255 -0
- data/ext/carray_broadcast.c +376 -0
- data/ext/carray_build_flags.h +3 -0
- data/ext/carray_call_cfunc.c +2897 -874
- data/ext/carray_call_cfunc.h +313 -0
- data/ext/carray_cast.c +1264 -315
- 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 +168 -270
- data/ext/carray_core.c +1396 -206
- 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 +1021 -0
- data/ext/carray_index_classifier.h +27 -0
- data/ext/carray_internal.h +136 -0
- data/ext/carray_kernels_bincmp.c +4446 -0
- data/ext/carray_kernels_binop.c +11001 -0
- data/ext/carray_kernels_init.c +1131 -0
- data/ext/carray_kernels_map.c +3467 -0
- data/ext/carray_kernels_moncmp.c +2097 -0
- data/ext/carray_kernels_monop.c +18313 -0
- data/ext/carray_kernels_reduce_aggregate.c +25837 -0
- data/ext/carray_kernels_reduce_boolean.c +330 -0
- data/ext/carray_kernels_reduce_cumulative.c +14593 -0
- data/ext/carray_kernels_reduce_extreme.c +16948 -0
- data/ext/carray_kernels_reduce_variance.c +3910 -0
- data/ext/carray_kernels_scan.c +3693 -0
- data/ext/carray_kernels_search.c +32138 -0
- data/ext/carray_kernels_sort.c +10626 -0
- data/ext/carray_kernels_triop.c +1392 -0
- data/ext/carray_lazy.c +737 -0
- data/ext/carray_loop.c +88 -200
- data/ext/carray_mask.c +853 -158
- 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 +1650 -0
- data/ext/carray_operator.c +1525 -320
- 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 +234 -55
- data/ext/mk_call_cfunc.rb +671 -0
- data/ext/mkkernel.rb +9096 -0
- data/ext/ruby_carray.c +211 -108
- 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 +239 -0
- data/lib/carray/autoload_method_extension.rb +45 -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 +614 -0
- data/lib/carray/boolean_reduce.rb +109 -0
- data/lib/carray/categorical.rb +561 -0
- data/lib/carray/categorical_iterator.rb +1084 -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 +160 -328
- data/lib/carray/core_extensions.rb +297 -0
- data/lib/carray/data_type_extension.rb +250 -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 +642 -0
- data/lib/carray/frame/group.rb +186 -0
- data/lib/carray/frame/io.rb +321 -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 +316 -0
- data/lib/carray/frame.rb +16 -0
- data/lib/carray/fuse_source.rb +123 -0
- data/lib/carray/fusion.rb +218 -0
- data/lib/carray/histogram.rb +512 -0
- data/lib/carray/inspect.rb +37 -26
- data/lib/carray/iterator.rb +58 -349
- data/lib/carray/lazy.rb +941 -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 +52 -0
- data/lib/carray/methods/mask_duplicates.rb +41 -0
- data/lib/carray/methods/meshgrid.rb +90 -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 +161 -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 +89 -0
- data/lib/carray/serialize.rb +478 -167
- data/lib/carray/slab_iterator.rb +305 -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 +2654 -38
- data/lib/carray/window_iterator.rb +927 -0
- data/lib/carray.rb +55 -57
- 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 +73 -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 +49 -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 +114 -0
- data/yard-stubs/carray_count.rb +79 -0
- data/yard-stubs/carray_element.rb +108 -0
- data/yard-stubs/carray_generate.rb +66 -0
- data/yard-stubs/carray_lazy.rb +23 -0
- data/yard-stubs/carray_loop.rb +140 -0
- data/yard-stubs/carray_mask.rb +259 -0
- data/yard-stubs/carray_math.rb +132 -0
- data/yard-stubs/carray_mathfunc.rb +45 -0
- data/yard-stubs/carray_median_percentile.rb +89 -0
- data/yard-stubs/carray_memory_view.rb +163 -0
- data/yard-stubs/carray_order.rb +312 -0
- data/yard-stubs/carray_random.rb +89 -0
- data/yard-stubs/carray_scatter.rb +106 -0
- data/yard-stubs/carray_slab.rb +57 -0
- data/yard-stubs/carray_sort.rb +163 -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 +220 -138
- 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/ca_obj_unbound_repeat.c +0 -529
- 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/mailmap +0 -1
- 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/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-2025 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,218 @@ 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.
|
|
38
|
+
# @private
|
|
236
39
|
class Boolean
|
|
237
40
|
extend DataTypeNewConstructor
|
|
238
41
|
extend DataTypeExtension
|
|
42
|
+
# @!visibility private
|
|
239
43
|
TypeSymbol = :boolean
|
|
44
|
+
# @!visibility private
|
|
240
45
|
DataType = CA_BOOLEAN
|
|
241
46
|
end
|
|
242
47
|
|
|
48
|
+
# CArray whose elements are `uint8`. Naming the element type as a
|
|
49
|
+
# class lets a constructor be spelled `CArray::UInt8.new(...)`; see
|
|
50
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
51
|
+
# @private
|
|
243
52
|
class UInt8
|
|
244
53
|
extend DataTypeNewConstructor
|
|
245
54
|
extend DataTypeExtension
|
|
55
|
+
# @!visibility private
|
|
246
56
|
TypeSymbol = :uint8
|
|
57
|
+
# @!visibility private
|
|
247
58
|
DataType = CA_UINT8
|
|
248
59
|
end
|
|
249
60
|
|
|
61
|
+
# CArray whose elements are `uint16`. Naming the element type as a
|
|
62
|
+
# class lets a constructor be spelled `CArray::UInt16.new(...)`; see
|
|
63
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
64
|
+
# @private
|
|
250
65
|
class UInt16
|
|
251
66
|
extend DataTypeNewConstructor
|
|
252
67
|
extend DataTypeExtension
|
|
68
|
+
# @!visibility private
|
|
253
69
|
TypeSymbol = :uint16
|
|
70
|
+
# @!visibility private
|
|
254
71
|
DataType = CA_UINT16
|
|
255
72
|
end
|
|
256
73
|
|
|
74
|
+
# CArray whose elements are `uint32`. Naming the element type as a
|
|
75
|
+
# class lets a constructor be spelled `CArray::UInt32.new(...)`; see
|
|
76
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
77
|
+
# @private
|
|
257
78
|
class UInt32
|
|
258
79
|
extend DataTypeNewConstructor
|
|
259
80
|
extend DataTypeExtension
|
|
81
|
+
# @!visibility private
|
|
260
82
|
TypeSymbol = :uint32
|
|
83
|
+
# @!visibility private
|
|
261
84
|
DataType = CA_UINT32
|
|
262
85
|
end
|
|
263
86
|
|
|
87
|
+
# CArray whose elements are `uint64`. Naming the element type as a
|
|
88
|
+
# class lets a constructor be spelled `CArray::UInt64.new(...)`; see
|
|
89
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
90
|
+
# @private
|
|
264
91
|
class UInt64
|
|
265
92
|
extend DataTypeNewConstructor
|
|
266
93
|
extend DataTypeExtension
|
|
94
|
+
# @!visibility private
|
|
267
95
|
TypeSymbol = :uint64
|
|
96
|
+
# @!visibility private
|
|
268
97
|
DataType = CA_UINT64
|
|
269
98
|
end
|
|
270
99
|
|
|
100
|
+
# CArray whose elements are `int8`. Naming the element type as a
|
|
101
|
+
# class lets a constructor be spelled `CArray::Int8.new(...)`; see
|
|
102
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
103
|
+
# @private
|
|
271
104
|
class Int8
|
|
272
105
|
extend DataTypeNewConstructor
|
|
273
106
|
extend DataTypeExtension
|
|
107
|
+
# @!visibility private
|
|
274
108
|
TypeSymbol = :int8
|
|
109
|
+
# @!visibility private
|
|
275
110
|
DataType = CA_INT8
|
|
276
111
|
end
|
|
277
112
|
|
|
113
|
+
# CArray whose elements are `int16`. Naming the element type as a
|
|
114
|
+
# class lets a constructor be spelled `CArray::Int16.new(...)`; see
|
|
115
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
116
|
+
# @private
|
|
278
117
|
class Int16
|
|
279
118
|
extend DataTypeNewConstructor
|
|
280
119
|
extend DataTypeExtension
|
|
120
|
+
# @!visibility private
|
|
281
121
|
TypeSymbol = :int16
|
|
122
|
+
# @!visibility private
|
|
282
123
|
DataType = CA_INT16
|
|
283
124
|
end
|
|
284
125
|
|
|
126
|
+
# CArray whose elements are `int32`. Naming the element type as a
|
|
127
|
+
# class lets a constructor be spelled `CArray::Int32.new(...)`; see
|
|
128
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
129
|
+
# @private
|
|
285
130
|
class Int32
|
|
286
131
|
extend DataTypeNewConstructor
|
|
287
132
|
extend DataTypeExtension
|
|
133
|
+
# @!visibility private
|
|
288
134
|
TypeSymbol = :int32
|
|
135
|
+
# @!visibility private
|
|
289
136
|
DataType = CA_INT32
|
|
290
137
|
end
|
|
291
138
|
|
|
139
|
+
# CArray whose elements are `int64`. Naming the element type as a
|
|
140
|
+
# class lets a constructor be spelled `CArray::Int64.new(...)`; see
|
|
141
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
142
|
+
# @private
|
|
292
143
|
class Int64
|
|
293
144
|
extend DataTypeNewConstructor
|
|
294
145
|
extend DataTypeExtension
|
|
146
|
+
# @!visibility private
|
|
295
147
|
TypeSymbol = :int64
|
|
148
|
+
# @!visibility private
|
|
296
149
|
DataType = CA_INT64
|
|
297
150
|
end
|
|
298
151
|
|
|
152
|
+
# CArray whose elements are `float32`. Naming the element type as a
|
|
153
|
+
# class lets a constructor be spelled `CArray::Float32.new(...)`; see
|
|
154
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
155
|
+
# @private
|
|
299
156
|
class Float32
|
|
300
157
|
extend DataTypeNewConstructor
|
|
301
158
|
extend DataTypeExtension
|
|
159
|
+
# @!visibility private
|
|
302
160
|
TypeSymbol = :float32
|
|
161
|
+
# @!visibility private
|
|
303
162
|
DataType = CA_FLOAT32
|
|
304
163
|
end
|
|
305
164
|
|
|
165
|
+
# Numo-compatible alias of {Float32}.
|
|
166
|
+
# @private
|
|
306
167
|
SFloat = Float32
|
|
307
168
|
|
|
169
|
+
# CArray whose elements are `float64`. Naming the element type as a
|
|
170
|
+
# class lets a constructor be spelled `CArray::Float64.new(...)`; see
|
|
171
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
172
|
+
# @private
|
|
308
173
|
class Float64
|
|
309
174
|
extend DataTypeNewConstructor
|
|
310
175
|
extend DataTypeExtension
|
|
176
|
+
# @!visibility private
|
|
311
177
|
TypeSymbol = :float64
|
|
178
|
+
# @!visibility private
|
|
312
179
|
DataType = CA_FLOAT64
|
|
313
180
|
end
|
|
314
181
|
|
|
182
|
+
# Numo-compatible alias of {Float64}.
|
|
183
|
+
# @private
|
|
315
184
|
DFloat = Float64
|
|
316
185
|
|
|
186
|
+
# CArray whose elements are `complex64`. Naming the element type as a
|
|
187
|
+
# class lets a constructor be spelled `CArray::Complex64.new(...)`; see
|
|
188
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
189
|
+
# @private
|
|
317
190
|
class Complex64
|
|
318
191
|
extend DataTypeNewConstructor
|
|
319
192
|
extend DataTypeExtension
|
|
193
|
+
# @!visibility private
|
|
320
194
|
TypeSymbol = :complex64
|
|
195
|
+
# @!visibility private
|
|
321
196
|
DataType = CA_CMPLX64
|
|
322
197
|
end
|
|
323
198
|
|
|
199
|
+
# Numo-compatible alias of {Complex64}.
|
|
200
|
+
# @private
|
|
324
201
|
SComplex = Complex64
|
|
325
202
|
|
|
203
|
+
# CArray whose elements are `complex128`. Naming the element type as a
|
|
204
|
+
# class lets a constructor be spelled `CArray::Complex128.new(...)`; see
|
|
205
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
206
|
+
# @private
|
|
326
207
|
class Complex128
|
|
327
208
|
extend DataTypeNewConstructor
|
|
328
209
|
extend DataTypeExtension
|
|
210
|
+
# @!visibility private
|
|
329
211
|
TypeSymbol = :complex128
|
|
212
|
+
# @!visibility private
|
|
330
213
|
DataType = CA_CMPLX128
|
|
331
214
|
end
|
|
332
215
|
|
|
216
|
+
# Numo-compatible alias of {Complex128}.
|
|
217
|
+
# @private
|
|
333
218
|
DComplex = Complex128
|
|
334
219
|
|
|
220
|
+
# CArray whose elements are `object`. Naming the element type as a
|
|
221
|
+
# class lets a constructor be spelled `CArray::Object.new(...)`; see
|
|
222
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
223
|
+
# @private
|
|
335
224
|
class Object
|
|
336
225
|
extend DataTypeNewConstructor
|
|
337
226
|
extend DataTypeExtension
|
|
227
|
+
# @!visibility private
|
|
338
228
|
TypeSymbol = :object
|
|
229
|
+
# @!visibility private
|
|
339
230
|
DataType = CA_OBJECT
|
|
340
231
|
end
|
|
341
232
|
|
|
233
|
+
# Numo-compatible alias of {Object}.
|
|
234
|
+
# @private
|
|
342
235
|
RObject = Object
|
|
343
236
|
|
|
237
|
+
# CArray whose elements are `fixlen`. Naming the element type as a
|
|
238
|
+
# class lets a constructor be spelled `CArray::Fixlen.new(...)`; see
|
|
239
|
+
# {DataTypeNewConstructor} for what that form adds.
|
|
240
|
+
# @private
|
|
344
241
|
class Fixlen
|
|
345
242
|
extend DataTypeNewConstructor
|
|
346
243
|
extend DataTypeExtension
|
|
244
|
+
# @!visibility private
|
|
347
245
|
TypeSymbol = :fixlen
|
|
246
|
+
# @!visibility private
|
|
348
247
|
DataType = CA_FIXLEN
|
|
349
248
|
end
|
|
350
249
|
|
|
@@ -352,133 +251,66 @@ end
|
|
|
352
251
|
|
|
353
252
|
class CArray
|
|
354
253
|
extend DataTypeExtension
|
|
254
|
+
# @!visibility private
|
|
255
|
+
# @private
|
|
355
256
|
TypeSymbol = nil
|
|
257
|
+
# @!visibility private
|
|
356
258
|
DataType = nil
|
|
357
259
|
end
|
|
358
260
|
|
|
359
261
|
class CArray
|
|
360
262
|
|
|
263
|
+
# Constructors added to every typed class ({Float64}, {Int32}, ...) so the
|
|
264
|
+
# class itself names the element type. Each forwards to the `CArray`
|
|
265
|
+
# equivalent with `data_type:` filled in.
|
|
361
266
|
module DataTypeNewConstructor
|
|
362
|
-
|
|
267
|
+
|
|
268
|
+
# @overload new(*shape)
|
|
269
|
+
# Allocates a new CArray of this typed subclass with the given
|
|
270
|
+
# shape.
|
|
271
|
+
# @param shape [Array<Integer>] shape of the new CArray.
|
|
272
|
+
# @return [CArray]
|
|
363
273
|
def new (*shape)
|
|
364
274
|
CArray.new(self::DataType, shape)
|
|
365
275
|
end
|
|
366
|
-
|
|
367
|
-
end
|
|
368
|
-
|
|
369
|
-
module DataTypeExtension
|
|
370
276
|
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
CA_OBJECT
|
|
382
|
-
end
|
|
277
|
+
# @overload from_memory_view(obj)
|
|
278
|
+
# Returns a fresh CArray interpreted as this typed subclass's
|
|
279
|
+
# `data_type`, imported by copy from a MemoryView producer.
|
|
280
|
+
# Forwards to
|
|
281
|
+
# `CArray.from_memory_view(obj, data_type: self::DataType)`; the
|
|
282
|
+
# result is always 1-D (chain `.reshape` for higher rank).
|
|
283
|
+
# @param obj [Object] MemoryView producer.
|
|
284
|
+
# @return [CArray]
|
|
285
|
+
def from_memory_view (obj)
|
|
286
|
+
CArray.from_memory_view(obj, data_type: self::DataType)
|
|
383
287
|
end
|
|
384
|
-
|
|
385
|
-
private :guess_data_type_from_values
|
|
386
288
|
|
|
387
|
-
|
|
388
|
-
|
|
289
|
+
# @overload wrap_memory_view(obj)
|
|
290
|
+
# Returns a zero-copy CAWrap over `obj`'s MemoryView interpreted
|
|
291
|
+
# as this typed subclass's `data_type`. Forwards to
|
|
292
|
+
# `CArray.wrap_memory_view(obj, data_type: self::DataType)`; the
|
|
293
|
+
# result is always 1-D (chain `.reshape` for higher rank).
|
|
294
|
+
#
|
|
295
|
+
# Here the receiver names the element type, not the class of the
|
|
296
|
+
# result: the call forwards with `CArray` as the receiver, so a
|
|
297
|
+
# `CAWrap` comes back. Choosing the class is the other reading of
|
|
298
|
+
# the receiver, and it lives on `CArray.wrap_memory_view` itself.
|
|
299
|
+
# @param obj [Object] MemoryView producer.
|
|
300
|
+
# @return [CAWrap]
|
|
301
|
+
def wrap_memory_view (obj)
|
|
302
|
+
CArray.wrap_memory_view(obj, data_type: self::DataType)
|
|
389
303
|
end
|
|
390
304
|
|
|
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
305
|
end
|
|
444
306
|
|
|
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
|
|
307
|
+
# DataTypeExtension is the carrier module for Numo / NumPy-style
|
|
308
|
+
# factory methods that are extended onto CArray and every typed
|
|
309
|
+
# CArray::Int32 / Float64 / ... class below. Its body is defined
|
|
310
|
+
# in lib/carray/data_type_extension.rb (required after this file),
|
|
311
|
+
# keeping the soft-compatibility surface separate from carray's
|
|
312
|
+
# native constructor API.
|
|
313
|
+
module DataTypeExtension
|
|
482
314
|
end
|
|
483
|
-
|
|
315
|
+
|
|
484
316
|
end
|