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/ext/carray_cast_func.rb
CHANGED
|
@@ -1,16 +1,3 @@
|
|
|
1
|
-
# ----------------------------------------------------------------------------
|
|
2
|
-
#
|
|
3
|
-
# carray_cast_func.rb
|
|
4
|
-
#
|
|
5
|
-
# This file is part of Ruby/CArray extension library.
|
|
6
|
-
# You can redistribute it and/or modify it under the terms of
|
|
7
|
-
# the Ruby Licence.
|
|
8
|
-
#
|
|
9
|
-
# Copyright (C) 2005 Hiroki Motoyoshi
|
|
10
|
-
#
|
|
11
|
-
# ----------------------------------------------------------------------------
|
|
12
|
-
|
|
13
|
-
|
|
14
1
|
data_type = []
|
|
15
2
|
%w[
|
|
16
3
|
CA_FIXLEN
|
|
@@ -48,10 +35,8 @@ ctype = {
|
|
|
48
35
|
CA_UINT64 => "uint64_t",
|
|
49
36
|
CA_FLOAT32 => "float32_t",
|
|
50
37
|
CA_FLOAT64 => "float64_t",
|
|
51
|
-
CA_FLOAT128 => "float128_t",
|
|
52
38
|
CA_CMPLX64 => "cmplx64_t",
|
|
53
39
|
CA_CMPLX128 => "cmplx128_t",
|
|
54
|
-
CA_CMPLX256 => "cmplx256_t",
|
|
55
40
|
CA_OBJECT => "VALUE"
|
|
56
41
|
}
|
|
57
42
|
|
|
@@ -68,10 +53,8 @@ obj2cval = {
|
|
|
68
53
|
CA_UINT64 => "OBJ2ULL",
|
|
69
54
|
CA_FLOAT32 => "OBJ2DBL",
|
|
70
55
|
CA_FLOAT64 => "OBJ2DBL",
|
|
71
|
-
CA_FLOAT128 => "OBJ2DBL", ### upcast
|
|
72
56
|
CA_CMPLX64 => "NUM2CC",
|
|
73
57
|
CA_CMPLX128 => "NUM2CC",
|
|
74
|
-
CA_CMPLX256 => "NUM2CC", ### upcast
|
|
75
58
|
CA_OBJECT => ""
|
|
76
59
|
}
|
|
77
60
|
|
|
@@ -88,10 +71,8 @@ cval2obj = {
|
|
|
88
71
|
CA_UINT64 => "ULL2NUM",
|
|
89
72
|
CA_FLOAT32 => "rb_float_new",
|
|
90
73
|
CA_FLOAT64 => "rb_float_new",
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
CA_CMPLX128 => "rb_ccomplex_new",
|
|
94
|
-
CA_CMPLX256 => "rb_ccomplex_new", ### downcast
|
|
74
|
+
CA_CMPLX64 => "CC2NUM",
|
|
75
|
+
CA_CMPLX128 => "CC2NUM",
|
|
95
76
|
CA_OBJECT => ""
|
|
96
77
|
}
|
|
97
78
|
|
|
@@ -106,10 +87,8 @@ NUMERIC = [
|
|
|
106
87
|
CA_UINT64 ,
|
|
107
88
|
CA_FLOAT32 ,
|
|
108
89
|
CA_FLOAT64 ,
|
|
109
|
-
CA_FLOAT128 ,
|
|
110
90
|
CA_CMPLX64 ,
|
|
111
91
|
CA_CMPLX128 ,
|
|
112
|
-
CA_CMPLX256 ,
|
|
113
92
|
]
|
|
114
93
|
|
|
115
94
|
INTEGER = [
|
|
@@ -123,6 +102,40 @@ INTEGER = [
|
|
|
123
102
|
CA_UINT64 ,
|
|
124
103
|
]
|
|
125
104
|
|
|
105
|
+
FLOAT = [
|
|
106
|
+
CA_FLOAT32 ,
|
|
107
|
+
CA_FLOAT64 ,
|
|
108
|
+
]
|
|
109
|
+
|
|
110
|
+
# object -> int/float cast: a parse failure masks the output cell (UNDEF)
|
|
111
|
+
# instead of a silent 0.0 (float) or a raise (int). These parsers report
|
|
112
|
+
# failure through an out-param whose C type is `oktype`.
|
|
113
|
+
obj2cval_ok = {
|
|
114
|
+
CA_INT8 => "rb_obj2long_ok",
|
|
115
|
+
CA_UINT8 => "rb_obj2ulong_ok",
|
|
116
|
+
CA_INT16 => "rb_obj2long_ok",
|
|
117
|
+
CA_UINT16 => "rb_obj2ulong_ok",
|
|
118
|
+
CA_INT32 => "rb_obj2long_ok",
|
|
119
|
+
CA_UINT32 => "rb_obj2ulong_ok",
|
|
120
|
+
CA_INT64 => "rb_obj2ll_ok",
|
|
121
|
+
CA_UINT64 => "rb_obj2ull_ok",
|
|
122
|
+
CA_FLOAT32 => "ca_obj2dbl_ok",
|
|
123
|
+
CA_FLOAT64 => "ca_obj2dbl_ok",
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
oktype = {
|
|
127
|
+
CA_INT8 => "long",
|
|
128
|
+
CA_UINT8 => "unsigned long",
|
|
129
|
+
CA_INT16 => "long",
|
|
130
|
+
CA_UINT16 => "unsigned long",
|
|
131
|
+
CA_INT32 => "long",
|
|
132
|
+
CA_UINT32 => "unsigned long",
|
|
133
|
+
CA_INT64 => "long long",
|
|
134
|
+
CA_UINT64 => "unsigned long long",
|
|
135
|
+
CA_FLOAT32 => "double",
|
|
136
|
+
CA_FLOAT64 => "double",
|
|
137
|
+
}
|
|
138
|
+
|
|
126
139
|
BOOLEAN = [
|
|
127
140
|
CA_BOOLEAN
|
|
128
141
|
]
|
|
@@ -154,20 +167,13 @@ end
|
|
|
154
167
|
puts %{
|
|
155
168
|
/* ---------------------------------------------------------------------------
|
|
156
169
|
|
|
157
|
-
carray_cast_func.c
|
|
158
|
-
|
|
159
|
-
This file is part of Ruby/CArray extension library.
|
|
160
|
-
You can redistribute it and/or modify it under the terms of
|
|
161
|
-
the Ruby\'s licence.
|
|
162
|
-
|
|
163
|
-
This file is automatically generated from carray_math.rb.
|
|
164
|
-
Copyright (C) 2005-2020 Hiroki Motoyoshi
|
|
170
|
+
carray_cast_func.c -- GENERATED by ext/carray_cast_func.rb -- DO NOT EDIT
|
|
165
171
|
|
|
166
172
|
---------------------------------------------------------------------------- */
|
|
167
173
|
|
|
168
174
|
#include "carray.h"
|
|
169
175
|
|
|
170
|
-
static void
|
|
176
|
+
static void __attribute__((noreturn))
|
|
171
177
|
ca_cast_not_implemented(ca_size_t n, CArray *a1, void *ptr1, CArray *a2, void *ptr2, boolean8_t *m)
|
|
172
178
|
{
|
|
173
179
|
rb_raise(rb_eCADataTypeError,
|
|
@@ -332,9 +338,6 @@ puts
|
|
|
332
338
|
ca_size_t k;
|
|
333
339
|
if ( m ) {
|
|
334
340
|
boolean8_t *pm = m;
|
|
335
|
-
#ifdef _OPENMP
|
|
336
|
-
#pragma omp parallel for private(pm,p1,p2)
|
|
337
|
-
#endif
|
|
338
341
|
for (k=0; k<n; k++) {
|
|
339
342
|
pm = m + k;
|
|
340
343
|
if ( ! *pm ) {
|
|
@@ -345,9 +348,6 @@ puts
|
|
|
345
348
|
}
|
|
346
349
|
}
|
|
347
350
|
else {
|
|
348
|
-
#ifdef _OPENMP
|
|
349
|
-
#pragma omp parallel for private(p1,p2)
|
|
350
|
-
#endif
|
|
351
351
|
for (k=0; k<n; k++) {
|
|
352
352
|
p1 = q1 + k;
|
|
353
353
|
p2 = q2 + k;
|
|
@@ -455,10 +455,51 @@ OBJECT.each do |type1|
|
|
|
455
455
|
(BOOLEAN+NUMERIC+OBJECT).each do |type2|
|
|
456
456
|
ctype1 = ctype[type1]
|
|
457
457
|
ctype2 = ctype[type2]
|
|
458
|
+
CA_CAST_TABLE[type1][type2] = "ca_cast_#{ctype1}_#{ctype2}"
|
|
459
|
+
if (INTEGER+FLOAT).include?(type2)
|
|
460
|
+
# object -> int/float: parse failure -> masked (UNDEF) output cell.
|
|
461
|
+
# The mask-aware loop runs only when a mask buffer is supplied (m);
|
|
462
|
+
# #to_type always supplies one for these targets so the whole
|
|
463
|
+
# user-facing object->numeric surface gets the masking semantics.
|
|
464
|
+
# With no mask buffer (internal single-cell / view paths) the legacy
|
|
465
|
+
# value parser keeps its old behaviour (lenient 0.0 float / raising
|
|
466
|
+
# int), leaving those paths byte-identical.
|
|
467
|
+
conv_ok = obj2cval_ok[type2]
|
|
468
|
+
conv = obj2cval[type2]
|
|
469
|
+
oktype2 = oktype[type2]
|
|
470
|
+
puts <<-END_DEF .gsub(/^ {6}/, '')
|
|
471
|
+
static void
|
|
472
|
+
ca_cast_#{ctype1}_#{ctype2}(ca_size_t n, CArray *a1, void *ptr1, CArray *a2, void *ptr2, boolean8_t *m)
|
|
473
|
+
{
|
|
474
|
+
VALUE *p1 = ptr1;
|
|
475
|
+
#{ctype2} *p2 = ptr2;
|
|
476
|
+
#{oktype2} tmp;
|
|
477
|
+
if ( m ) {
|
|
478
|
+
while ( n-- ) {
|
|
479
|
+
if ( !*m ) {
|
|
480
|
+
if ( #{conv_ok}(*p1, &tmp) ) {
|
|
481
|
+
*p2 = (#{ctype2}) tmp;
|
|
482
|
+
}
|
|
483
|
+
else {
|
|
484
|
+
*m = 1;
|
|
485
|
+
*p2 = 0;
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
p1++; p2++; m++;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
else {
|
|
492
|
+
while ( n-- ) { *p2 = (#{ctype2}) #{conv}(*p1); p1++; p2++; }
|
|
493
|
+
}
|
|
494
|
+
return;
|
|
495
|
+
}
|
|
496
|
+
END_DEF
|
|
497
|
+
puts
|
|
498
|
+
next
|
|
499
|
+
end
|
|
458
500
|
unless conv = obj2cval[type2]
|
|
459
501
|
next
|
|
460
502
|
end
|
|
461
|
-
CA_CAST_TABLE[type1][type2] = "ca_cast_#{ctype1}_#{ctype2}"
|
|
462
503
|
puts <<-END_DEF .gsub(/^ {6}/, '')
|
|
463
504
|
static void
|
|
464
505
|
ca_cast_#{ctype1}_#{ctype2}(ca_size_t n, CArray *a1, void *ptr1, CArray *a2, void *ptr2, boolean8_t *m)
|
|
@@ -466,7 +507,7 @@ OBJECT.each do |type1|
|
|
|
466
507
|
VALUE *p1 = ptr1;
|
|
467
508
|
#{ctype2} *p2 = ptr2;
|
|
468
509
|
if ( m ) {
|
|
469
|
-
while ( n-- ) {
|
|
510
|
+
while ( n-- ) {
|
|
470
511
|
if ( !*m ) { *p2 = (#{ctype2}) #{conv}(*p1); }
|
|
471
512
|
p1++; p2++; m++;
|
|
472
513
|
}
|
data/ext/carray_class.c
CHANGED
|
@@ -1,65 +1,58 @@
|
|
|
1
1
|
/* ---------------------------------------------------------------------------
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
This file is part of Ruby/CArray extension library.
|
|
6
|
-
|
|
7
|
-
Copyright (C) 2005-2020 Hiroki Motoyoshi
|
|
3
|
+
CArray class-level inquiries: host endianness, sizeof(data_type),
|
|
4
|
+
data_type ↔ name / code conversion.
|
|
8
5
|
|
|
9
6
|
---------------------------------------------------------------------------- */
|
|
10
7
|
|
|
11
8
|
#include "carray.h"
|
|
12
9
|
|
|
13
|
-
/*
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
10
|
+
/* ------------------------------------------------------------------- */
|
|
11
|
+
/* Symbol cache for data_type code → Symbol lookup.
|
|
12
|
+
*
|
|
13
|
+
* Pre-computed at Init time so `ca.data_type` can return
|
|
14
|
+
* `ID2SYM(ca_data_type_sym[ca->data_type])` with no rb_intern call
|
|
15
|
+
* per access.
|
|
16
|
+
*
|
|
17
|
+
* Indexed by data_type code (0 = CA_FIXLEN ... CA_NTYPE-1 = CA_OBJECT).
|
|
18
|
+
* Symbol name = ca_type_name[i] ("fixlen" / "int8" / ... / "object").
|
|
19
|
+
* Unused slots (CA_FLOAT128 = 12, CA_CMPLX256 = 15) are populated but
|
|
20
|
+
* never reached at runtime because ca_valid[] is 0 there.
|
|
21
|
+
* ------------------------------------------------------------------- */
|
|
22
|
+
|
|
23
|
+
ID ca_data_type_sym[CA_NTYPE];
|
|
24
|
+
|
|
25
|
+
VALUE
|
|
26
|
+
rb_ca_data_type_to_sym (int8_t data_type)
|
|
27
|
+
{
|
|
28
|
+
CA_CHECK_DATA_TYPE(data_type);
|
|
29
|
+
return ID2SYM(ca_data_type_sym[data_type]);
|
|
30
|
+
}
|
|
20
31
|
|
|
32
|
+
/* Returns the machine endianness as an integer
|
|
33
|
+
(0 = CA_LITTLE_ENDIAN, 1 = CA_BIG_ENDIAN). */
|
|
21
34
|
static VALUE
|
|
22
35
|
rb_ca_s_endian (VALUE klass)
|
|
23
36
|
{
|
|
24
37
|
return INT2NUM(ca_endian);
|
|
25
38
|
}
|
|
26
39
|
|
|
27
|
-
/*
|
|
28
|
-
|
|
29
|
-
(Inquiry)
|
|
30
|
-
Returns true if the byte order of the architecture is big endian.
|
|
31
|
-
*/
|
|
32
|
-
|
|
40
|
+
/* Returns true if the host byte order is big-endian. */
|
|
33
41
|
static VALUE
|
|
34
42
|
rb_ca_s_big_endian_p (VALUE klass)
|
|
35
43
|
{
|
|
36
44
|
return ( ca_endian == CA_BIG_ENDIAN ) ? Qtrue : Qfalse;
|
|
37
45
|
}
|
|
38
46
|
|
|
39
|
-
/*
|
|
40
|
-
|
|
41
|
-
(Inquiry)
|
|
42
|
-
Returns true if the byte order of the architecture is
|
|
43
|
-
little endian.
|
|
44
|
-
*/
|
|
45
|
-
|
|
47
|
+
/* Returns true if the host byte order is little-endian. */
|
|
46
48
|
static VALUE
|
|
47
49
|
rb_ca_s_little_endian_p (VALUE klass)
|
|
48
50
|
{
|
|
49
51
|
return ( ca_endian == CA_LITTLE_ENDIAN ) ? Qtrue : Qfalse;
|
|
50
52
|
}
|
|
51
53
|
|
|
52
|
-
/*
|
|
53
|
-
|
|
54
|
-
(Inquiry)
|
|
55
|
-
Returns the byte length of an element of the given data type.
|
|
56
|
-
Retruns <code>0</code> if data_type is equal to CA_FIXLEN.
|
|
57
|
-
CArray.sizeof(CA_INT32) #=> 4
|
|
58
|
-
CArray.sizeof(CA_DOUBLE) #=> 8
|
|
59
|
-
CArray.sizeof(CA_FIXLEN) #=> 0
|
|
60
|
-
|
|
61
|
-
*/
|
|
62
|
-
|
|
54
|
+
/* Returns the byte length of one element of the given data_type.
|
|
55
|
+
Returns 0 for CA_FIXLEN (whose width is per-instance, not per-type). */
|
|
63
56
|
static VALUE
|
|
64
57
|
rb_ca_s_sizeof (VALUE klass, VALUE rtype)
|
|
65
58
|
{
|
|
@@ -69,44 +62,41 @@ rb_ca_s_sizeof (VALUE klass, VALUE rtype)
|
|
|
69
62
|
return SIZE2NUM(bytes);
|
|
70
63
|
}
|
|
71
64
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
(Inquiry)
|
|
76
|
-
Returns true if the given data_type indicate the valid data_type.
|
|
77
|
-
*/
|
|
78
|
-
|
|
65
|
+
/* Returns the string representation of a data_type specifier.
|
|
66
|
+
Accepts Symbol, Integer code, Class, or String uniformly via
|
|
67
|
+
rb_ca_guess_type. */
|
|
79
68
|
static VALUE
|
|
80
|
-
|
|
69
|
+
rb_ca_s_data_type_name (VALUE klass, VALUE type)
|
|
81
70
|
{
|
|
82
|
-
int8_t data_type = rb_ca_guess_type(
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
"data type is out of range (%i..%i)", CA_NONE+1, CA_NTYPE-1);
|
|
86
|
-
}
|
|
87
|
-
return ca_valid[data_type] == 1 ? Qtrue : Qfalse;
|
|
71
|
+
int8_t data_type = rb_ca_guess_type(type);
|
|
72
|
+
CA_CHECK_DATA_TYPE(data_type);
|
|
73
|
+
return rb_str_new2(ca_type_name[data_type]);
|
|
88
74
|
}
|
|
89
75
|
|
|
90
|
-
/*
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
76
|
+
/* Returns the internal int8_t data_type code (e.g. 8 for :int64,
|
|
77
|
+
11 for :float64). Inverse of rb_ca_s_data_type_name (which returns
|
|
78
|
+
a String). Accepts the same representations.
|
|
79
|
+
Used by Ruby-side code that needs to compute kernel op_ids from a
|
|
80
|
+
data_type (e.g. CAMonOp::CAST_BASE + code in lib/carray/lazy.rb).
|
|
81
|
+
End users normally do not need this -- use Symbol comparison or
|
|
82
|
+
the CA_* constants. */
|
|
97
83
|
static VALUE
|
|
98
|
-
|
|
84
|
+
rb_ca_s_data_type_code (VALUE klass, VALUE type)
|
|
99
85
|
{
|
|
100
|
-
int8_t data_type =
|
|
86
|
+
int8_t data_type = rb_ca_guess_type(type);
|
|
101
87
|
CA_CHECK_DATA_TYPE(data_type);
|
|
102
|
-
return
|
|
88
|
+
return INT2NUM(data_type);
|
|
103
89
|
}
|
|
104
90
|
|
|
105
91
|
/* ------------------------------------------------------------------- */
|
|
106
92
|
|
|
107
93
|
void
|
|
108
|
-
Init_carray_class ()
|
|
94
|
+
Init_carray_class (void)
|
|
109
95
|
{
|
|
96
|
+
/* NOTE: ca_data_type_sym[] cache is initialized earlier in
|
|
97
|
+
Init_carray_ext (ruby_carray.c) before the CA_* data_type constants
|
|
98
|
+
are defined. Don't re-initialize here. */
|
|
99
|
+
|
|
110
100
|
rb_define_const(rb_cObject, "CA_BIG_ENDIAN", INT2NUM(CA_BIG_ENDIAN));
|
|
111
101
|
rb_define_const(rb_cObject, "CA_LITTLE_ENDIAN", INT2NUM(CA_LITTLE_ENDIAN));
|
|
112
102
|
|
|
@@ -116,9 +106,9 @@ Init_carray_class ()
|
|
|
116
106
|
rb_define_singleton_method(rb_cCArray, "little_endian?",
|
|
117
107
|
rb_ca_s_little_endian_p, 0);
|
|
118
108
|
rb_define_singleton_method(rb_cCArray, "sizeof", rb_ca_s_sizeof, 1);
|
|
119
|
-
rb_define_singleton_method(rb_cCArray, "data_type?",
|
|
120
|
-
rb_ca_s_data_type, 1);
|
|
121
109
|
rb_define_singleton_method(rb_cCArray, "data_type_name",
|
|
122
110
|
rb_ca_s_data_type_name, 1);
|
|
111
|
+
rb_define_singleton_method(rb_cCArray, "data_type_code",
|
|
112
|
+
rb_ca_s_data_type_code, 1);
|
|
123
113
|
}
|
|
124
114
|
|
data/ext/carray_config.h
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#ifndef CARRAY_CONFIG_H
|
|
2
|
+
#define CARRAY_CONFIG_H
|
|
3
|
+
#define HAVE_SYS_TYPES_H 1
|
|
4
|
+
#define HAVE_STDINT_H 1
|
|
5
|
+
#define HAVE_TYPE_INT8_T 1
|
|
6
|
+
#define HAVE_TYPE_UINT8_T 1
|
|
7
|
+
#define HAVE_TYPE_INT16_T 1
|
|
8
|
+
#define HAVE_TYPE_UINT16_T 1
|
|
9
|
+
#define HAVE_TYPE_INT32_T 1
|
|
10
|
+
#define HAVE_TYPE_UINT32_T 1
|
|
11
|
+
#define HAVE_TYPE_INT64_T 1
|
|
12
|
+
#define HAVE_TYPE_UINT64_T 1
|
|
13
|
+
#define HAVE_TYPE_LONG_LONG 1
|
|
14
|
+
#define HAVE_TYPE_FLOAT 1
|
|
15
|
+
#define HAVE_TYPE_DOUBLE 1
|
|
16
|
+
#define HAVE_COMPLEX_H 1
|
|
17
|
+
#define HAVE_TYPE_FLOAT_COMPLEX 1
|
|
18
|
+
#define HAVE_TYPE_DOUBLE_COMPLEX 1
|
|
19
|
+
#define HAVE_TGMATH_H 1
|
|
20
|
+
#define HAVE_ATAN2 1
|
|
21
|
+
#define HAVE_HYPOT 1
|
|
22
|
+
#define HAVE_LGAMMA 1
|
|
23
|
+
#define HAVE_EXPM1 1
|
|
24
|
+
#define HAVE_MERGESORT 1
|
|
25
|
+
#define HAVE_STRPTIME 1
|
|
26
|
+
#define HAVE_RB_ARITHMETIC_SEQUENCE_EXTRACT 1
|
|
27
|
+
#define HAVE_RUBY_MEMORY_VIEW_H 1
|
|
28
|
+
#endif
|