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
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
# ----------------------------------------------------------------------------
|
|
2
|
-
#
|
|
3
|
-
# carray/io/imagemagick.rb
|
|
4
|
-
#
|
|
5
|
-
# This file is part of Ruby/CArray extension library.
|
|
6
|
-
#
|
|
7
|
-
# Copyright (C) 2005-2020 Hiroki Motoyoshi
|
|
8
|
-
#
|
|
9
|
-
# ----------------------------------------------------------------------------
|
|
10
|
-
|
|
11
|
-
#
|
|
12
|
-
# carray/imagemagick.rb
|
|
13
|
-
#
|
|
14
|
-
# This library adds image loading/saving functions to CArray class.
|
|
15
|
-
# These method uses the command line tools in ImageMagick internally.
|
|
16
|
-
# ImageMagick package is required to use this library, but RMagick
|
|
17
|
-
# library is not required.
|
|
18
|
-
#
|
|
19
|
-
# --- CArray.load_by_magick(filename[, map="rgb", data_type=nil])
|
|
20
|
-
#
|
|
21
|
-
# Creates a CArray object from the image file _filename_.
|
|
22
|
-
# The argument _map_ should be the combination of [r|g|b|a|o|i|c|m|y|b|p].
|
|
23
|
-
# The dimension of new array is determined from map's contents.
|
|
24
|
-
# The data_type of array is determined automatically by the depth of image,
|
|
25
|
-
# unless the data_type is not given.
|
|
26
|
-
#
|
|
27
|
-
# --- CArray#save_by_magick(filename[, image_type="rgb", options=""])
|
|
28
|
-
#
|
|
29
|
-
# Saves a CArray object to the image file _filename_.
|
|
30
|
-
# The argument _image_type_ should be the one of
|
|
31
|
-
# * gray, rgb, rgba, cmyk, cmyka
|
|
32
|
-
# The _options_ are passed to "convert"
|
|
33
|
-
#
|
|
34
|
-
# --- CArray#display_by_magick([image_type="rgb", options=""])
|
|
35
|
-
#
|
|
36
|
-
|
|
37
|
-
require 'yaml'
|
|
38
|
-
require 'carray'
|
|
39
|
-
|
|
40
|
-
class CArray
|
|
41
|
-
|
|
42
|
-
private
|
|
43
|
-
@@magick_tempfile_count = 0
|
|
44
|
-
|
|
45
|
-
public
|
|
46
|
-
def self.load_by_magick (filename, imap = "rgb", data_type = nil)
|
|
47
|
-
if not File.exist?(filename)
|
|
48
|
-
raise "can't find image file '#{filename}'"
|
|
49
|
-
end
|
|
50
|
-
identify_command = [
|
|
51
|
-
"identify",
|
|
52
|
-
"-format " + "'" + [
|
|
53
|
-
"---",
|
|
54
|
-
"height: %h",
|
|
55
|
-
"width: %w",
|
|
56
|
-
"depth: %z",
|
|
57
|
-
].join("\n") + "'",
|
|
58
|
-
filename,
|
|
59
|
-
"2>/dev/null"
|
|
60
|
-
].join(" ")
|
|
61
|
-
ident = YAML.load(`#{identify_command}`)
|
|
62
|
-
if ident.empty?
|
|
63
|
-
raise "ImageMagick's identify command failed to read image file '#{filename}'"
|
|
64
|
-
end
|
|
65
|
-
height, width, depth = ident.values_at('height', 'width', 'depth')
|
|
66
|
-
unless data_type
|
|
67
|
-
case depth
|
|
68
|
-
when 8
|
|
69
|
-
data_type = CA_UINT8
|
|
70
|
-
when 16
|
|
71
|
-
data_type = CA_UINT16
|
|
72
|
-
when 32
|
|
73
|
-
data_type = CA_UINT32
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
storage_type = case data_type
|
|
77
|
-
when CA_UINT8, CA_INT8
|
|
78
|
-
"char"
|
|
79
|
-
when CA_UINT16, CA_INT16
|
|
80
|
-
"short"
|
|
81
|
-
when CA_UINT32, CA_INT32
|
|
82
|
-
"integer"
|
|
83
|
-
when CA_FLOAT32
|
|
84
|
-
"float"
|
|
85
|
-
when CA_FLOAT64
|
|
86
|
-
"double"
|
|
87
|
-
else
|
|
88
|
-
raise "invalid data_type"
|
|
89
|
-
end
|
|
90
|
-
# tempfile = "CA_Magick_#{$$}_#{@@magick_tempfile_count}.dat"
|
|
91
|
-
# @@magick_tempfile_count += 1
|
|
92
|
-
stream_command = [
|
|
93
|
-
"stream",
|
|
94
|
-
"-storage-type #{storage_type}",
|
|
95
|
-
"-map #{imap}",
|
|
96
|
-
filename,
|
|
97
|
-
"-",
|
|
98
|
-
"2>/dev/null"
|
|
99
|
-
].join(" ")
|
|
100
|
-
begin
|
|
101
|
-
return IO.popen(stream_command) { |io|
|
|
102
|
-
if imap.size == 1
|
|
103
|
-
CArray.new(data_type, [height, width]).load_binary(io)
|
|
104
|
-
else
|
|
105
|
-
CArray.new(data_type, [height, width, imap.size]).load_binary(io)
|
|
106
|
-
end
|
|
107
|
-
}
|
|
108
|
-
rescue
|
|
109
|
-
raise "ImageMagick's stream command failed to read image file '#{filename}'"
|
|
110
|
-
ensure
|
|
111
|
-
# if File.exist?(tempfile)
|
|
112
|
-
# File.unlink(tempfile)
|
|
113
|
-
# end
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
private
|
|
118
|
-
|
|
119
|
-
def magick_guess_image_type
|
|
120
|
-
image_type = nil
|
|
121
|
-
case ndim
|
|
122
|
-
when 2
|
|
123
|
-
if fixlen?
|
|
124
|
-
case bytes
|
|
125
|
-
when 1
|
|
126
|
-
image_type = "gray"
|
|
127
|
-
when 3
|
|
128
|
-
image_type = "rgb"
|
|
129
|
-
when 4
|
|
130
|
-
image_type = "rgba"
|
|
131
|
-
end
|
|
132
|
-
else
|
|
133
|
-
image_type = "gray"
|
|
134
|
-
end
|
|
135
|
-
when 3
|
|
136
|
-
case dim2
|
|
137
|
-
when 1
|
|
138
|
-
image_type = "gray"
|
|
139
|
-
when 3
|
|
140
|
-
image_type = "rgb"
|
|
141
|
-
when 4
|
|
142
|
-
image_type = "rgba"
|
|
143
|
-
end
|
|
144
|
-
end
|
|
145
|
-
return image_type
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
public
|
|
149
|
-
|
|
150
|
-
def save_by_magick (filename, image_type = nil, options = "")
|
|
151
|
-
unless image_type
|
|
152
|
-
image_type = magick_guess_image_type()
|
|
153
|
-
end
|
|
154
|
-
unless image_type
|
|
155
|
-
raise "please specify image_type"
|
|
156
|
-
end
|
|
157
|
-
quantum_format = self.float? ? "-define quantum:format=floating-point" : ""
|
|
158
|
-
case self.data_type
|
|
159
|
-
when CA_INT8, CA_UINT8
|
|
160
|
-
depth = "-depth 8"
|
|
161
|
-
when CA_INT16, CA_UINT16
|
|
162
|
-
depth = "-depth 16"
|
|
163
|
-
when CA_FLOAT32
|
|
164
|
-
depth = "-depth 32"
|
|
165
|
-
when CA_FLOAT64
|
|
166
|
-
depth = "-depth 64"
|
|
167
|
-
when CA_FIXLEN
|
|
168
|
-
depth = "-depth #{8*bytes}"
|
|
169
|
-
else
|
|
170
|
-
depth = "-depth 8"
|
|
171
|
-
end
|
|
172
|
-
convert_command = [
|
|
173
|
-
"magick convert",
|
|
174
|
-
depth,
|
|
175
|
-
"-size " + [dim1, dim0].join("x"),
|
|
176
|
-
quantum_format,
|
|
177
|
-
options,
|
|
178
|
-
"#{image_type}:-",
|
|
179
|
-
filename
|
|
180
|
-
].join(" ")
|
|
181
|
-
begin
|
|
182
|
-
IO.popen(convert_command, "w") { |io|
|
|
183
|
-
if data_type != CA_FIXLEN and data_type != CA_OBJECT
|
|
184
|
-
if bytes > 1 and CArray.endian == CA_LITTLE_ENDIAN
|
|
185
|
-
self.dump_binary(io)
|
|
186
|
-
# swap_bytes.dump_binary(io)
|
|
187
|
-
else
|
|
188
|
-
self.dump_binary(io)
|
|
189
|
-
end
|
|
190
|
-
else
|
|
191
|
-
self.dump_binary(io)
|
|
192
|
-
end
|
|
193
|
-
}
|
|
194
|
-
rescue
|
|
195
|
-
raise "ImageMagick's convert command failed to write image file '#{filename}'"
|
|
196
|
-
end
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
def display_by_magick (image_type = nil, options = "")
|
|
200
|
-
unless image_type
|
|
201
|
-
image_type = magick_guess_image_type()
|
|
202
|
-
end
|
|
203
|
-
unless image_type
|
|
204
|
-
raise "please specify image_type"
|
|
205
|
-
end
|
|
206
|
-
quantum_format = self.float? ? "-define quantum:format=floating-point" : ""
|
|
207
|
-
depth = fixlen? ? "-depth 8" : "-depth #{8*bytes}"
|
|
208
|
-
display_command = [
|
|
209
|
-
"display",
|
|
210
|
-
depth,
|
|
211
|
-
"-size " + [dim1, dim0].join("x"),
|
|
212
|
-
quantum_format,
|
|
213
|
-
options,
|
|
214
|
-
"#{image_type}:-",
|
|
215
|
-
].join(" ")
|
|
216
|
-
begin
|
|
217
|
-
IO.popen(display_command, "w") { |io|
|
|
218
|
-
if bytes > 1 and CArray.endian == CA_LITTLE_ENDIAN
|
|
219
|
-
swap_bytes.dump_binary(io)
|
|
220
|
-
else
|
|
221
|
-
self.dump_binary(io)
|
|
222
|
-
end
|
|
223
|
-
}
|
|
224
|
-
rescue
|
|
225
|
-
raise "ImageMagick's display command failed to display image"
|
|
226
|
-
end
|
|
227
|
-
end
|
|
228
|
-
|
|
229
|
-
end
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
data/lib/carray/mask.rb
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
# ----------------------------------------------------------------------------
|
|
2
|
-
#
|
|
3
|
-
# carray/mask.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
|
-
# Guard methods for handling variables that can be UNDEF values.
|
|
14
|
-
# Provide different processing depending on whether
|
|
15
|
-
# the given value is UNDEF or not.
|
|
16
|
-
#
|
|
17
|
-
# @param value [Object] target object
|
|
18
|
-
# @param fill_value [Object] alternative value if the given value is UNDEF
|
|
19
|
-
#
|
|
20
|
-
# @return fill_value if the given value is UNDEF, block return value if block
|
|
21
|
-
# is given, or value itself
|
|
22
|
-
#
|
|
23
|
-
def self.guard_undef (*values, fill_value: UNDEF, &block)
|
|
24
|
-
return fill_value if values.any?{|v| v == UNDEF }
|
|
25
|
-
return block.(*values)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# mask
|
|
29
|
-
#
|
|
30
|
-
# Returns the number of masked elements.
|
|
31
|
-
#
|
|
32
|
-
def count_masked (*axis)
|
|
33
|
-
if has_mask?
|
|
34
|
-
return mask.int64.accumulate(*axis)
|
|
35
|
-
else
|
|
36
|
-
if axis.empty?
|
|
37
|
-
return 0
|
|
38
|
-
else
|
|
39
|
-
spec = shape.map{:i}
|
|
40
|
-
axis.each do |k|
|
|
41
|
-
spec[k] = nil
|
|
42
|
-
end
|
|
43
|
-
return self[*spec].ca.template(:int64) { 0 }
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
#
|
|
49
|
-
# Returns the number of not-masked elements.
|
|
50
|
-
#
|
|
51
|
-
def count_not_masked (*axis)
|
|
52
|
-
if has_mask?
|
|
53
|
-
return mask.not.int64.accumulate(*axis)
|
|
54
|
-
else
|
|
55
|
-
if axis.empty?
|
|
56
|
-
return elements
|
|
57
|
-
else
|
|
58
|
-
spec = shape.map {:i}
|
|
59
|
-
axis.each do |k|
|
|
60
|
-
spec[k] = nil
|
|
61
|
-
end
|
|
62
|
-
it = self[*spec].ca
|
|
63
|
-
count = self.elements/it.elements
|
|
64
|
-
return it.template(:int64) { count }
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def maskout! (*argv)
|
|
70
|
-
case argv.size
|
|
71
|
-
when 1
|
|
72
|
-
val = argv.first
|
|
73
|
-
case val
|
|
74
|
-
when CArray, Symbol
|
|
75
|
-
self[val] = UNDEF
|
|
76
|
-
else
|
|
77
|
-
self[:eq, val] = UNDEF
|
|
78
|
-
end
|
|
79
|
-
else
|
|
80
|
-
self[*argv] = UNDEF
|
|
81
|
-
end
|
|
82
|
-
return self
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def maskout (*argv)
|
|
86
|
-
obj = self.to_ca
|
|
87
|
-
case argv.size
|
|
88
|
-
when 1
|
|
89
|
-
val = argv.first
|
|
90
|
-
case val
|
|
91
|
-
when CArray, Symbol
|
|
92
|
-
obj[val] = UNDEF
|
|
93
|
-
else
|
|
94
|
-
obj[:eq, val] = UNDEF
|
|
95
|
-
end
|
|
96
|
-
else
|
|
97
|
-
obj[*argv] = UNDEF
|
|
98
|
-
end
|
|
99
|
-
return obj
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
end
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
# ----------------------------------------------------------------------------
|
|
2
|
-
#
|
|
3
|
-
# carray/math/histogram.rb
|
|
4
|
-
#
|
|
5
|
-
# This file is part of Ruby/CArray extension library.
|
|
6
|
-
#
|
|
7
|
-
# Copyright (C) 2005-2020 Hiroki Motoyoshi
|
|
8
|
-
#
|
|
9
|
-
# ----------------------------------------------------------------------------
|
|
10
|
-
|
|
11
|
-
#
|
|
12
|
-
# N-dimensional histogram class
|
|
13
|
-
#
|
|
14
|
-
|
|
15
|
-
#
|
|
16
|
-
# c0 : b0 <= x < b1
|
|
17
|
-
# c1 : b1 <= x < b2
|
|
18
|
-
# c2 : b2 <= x < b3
|
|
19
|
-
#
|
|
20
|
-
|
|
21
|
-
require 'carray'
|
|
22
|
-
|
|
23
|
-
class CAHistogram < CArray
|
|
24
|
-
|
|
25
|
-
def initialize (*argv, &block)
|
|
26
|
-
|
|
27
|
-
case argv.first
|
|
28
|
-
when Integer, String, Symbol
|
|
29
|
-
data_type = argv.shift
|
|
30
|
-
else
|
|
31
|
-
data_type = CA_INT32
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
scales = argv.shift
|
|
35
|
-
opt = argv.shift || {}
|
|
36
|
-
|
|
37
|
-
option = {
|
|
38
|
-
:include_upper => false,
|
|
39
|
-
:include_lowest => true,
|
|
40
|
-
:offsets => nil,
|
|
41
|
-
}.update( opt )
|
|
42
|
-
|
|
43
|
-
@include_upper = option[:include_upper]
|
|
44
|
-
@include_lowest = option[:include_lowest]
|
|
45
|
-
|
|
46
|
-
unless scales.kind_of?(Array)
|
|
47
|
-
raise "scales should be an array of scales"
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
ndim = scales.size
|
|
51
|
-
@scales = scales.clone
|
|
52
|
-
@scales.map! { |s| CArray.wrap_readonly(s, CA_DOUBLE) }
|
|
53
|
-
|
|
54
|
-
if option[:offsets]
|
|
55
|
-
if option[:offsets].size == scales.size
|
|
56
|
-
@offsets = option[:offsets]
|
|
57
|
-
else
|
|
58
|
-
raise "invalid length of offset in option"
|
|
59
|
-
end
|
|
60
|
-
else
|
|
61
|
-
@offsets = Array.new(ndim) { 0 }
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
dim = Array.new(ndim) { |i|
|
|
65
|
-
case @offsets[i]
|
|
66
|
-
when 0
|
|
67
|
-
@scales[i].size
|
|
68
|
-
when 1
|
|
69
|
-
@scales[i].size + 1
|
|
70
|
-
else
|
|
71
|
-
raise "invalid offset value"
|
|
72
|
-
end
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
super(data_type, dim, &block)
|
|
76
|
-
|
|
77
|
-
@mid_points = Array.new(ndim) { |i|
|
|
78
|
-
x = (@scales[i] + @scales[i].shifted(-1))/2
|
|
79
|
-
x[0..-2].to_ca
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
@inner = self[*Array.new(ndim) { |i| @offsets[i]..-2 }]
|
|
83
|
-
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
attr_reader :scales, :include_lowest, :include_upper, :offsets
|
|
87
|
-
attr_reader :mid_points, :inner
|
|
88
|
-
|
|
89
|
-
alias midpoints mid_points
|
|
90
|
-
|
|
91
|
-
def increment (*values)
|
|
92
|
-
idx = Array.new(ndim) {|i|
|
|
93
|
-
vi = CArray.wrap_readonly(values[i], CA_DOUBLE)
|
|
94
|
-
@scales[i].bin(vi, @include_upper, @include_lowest, @offsets[i]).to_ca
|
|
95
|
-
}
|
|
96
|
-
incr_addr(index2addr(*idx))
|
|
97
|
-
self
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
def add (*values)
|
|
101
|
-
val = CArray.wrap_readonly(values.pop, self.data_type)
|
|
102
|
-
sel = val.ne(0)
|
|
103
|
-
val = val[sel].to_ca
|
|
104
|
-
idx = Array.new(ndim) {|i|
|
|
105
|
-
vi = CArray.wrap_readonly(values[i], CA_DOUBLE)[sel]
|
|
106
|
-
@scales[i].bin(vi, @include_upper, @include_lowest, @offsets[i]).to_ca
|
|
107
|
-
}
|
|
108
|
-
index2addr(*idx).each_with_addr do |addr, i|
|
|
109
|
-
self[addr] += val[i]
|
|
110
|
-
end
|
|
111
|
-
self
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
class CArray
|
|
117
|
-
|
|
118
|
-
def bin (val, include_upper, include_lowest, offset=0)
|
|
119
|
-
|
|
120
|
-
scales = CArray.wrap_readonly(self, CA_DOUBLE)
|
|
121
|
-
|
|
122
|
-
x = scales.section(val)
|
|
123
|
-
# x.inherit_mask(val)
|
|
124
|
-
unless x.is_a?(CArray)
|
|
125
|
-
x = CA_DOUBLE(x)
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
if include_upper
|
|
129
|
-
if include_lowest
|
|
130
|
-
x[:eq, 0] = 0.5
|
|
131
|
-
end
|
|
132
|
-
xi = x.ceil.int32 - 1
|
|
133
|
-
else
|
|
134
|
-
xi = x.floor.int32
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
case offset
|
|
138
|
-
when 0
|
|
139
|
-
xi[:gt, elements-1] = elements - 1
|
|
140
|
-
xi[:lt, 0] = UNDEF
|
|
141
|
-
when 1
|
|
142
|
-
xi.add!(1)
|
|
143
|
-
xi[:gt, elements] = elements
|
|
144
|
-
xi[:lt, 1] = 0
|
|
145
|
-
else
|
|
146
|
-
raise "invalid offset value"
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
return xi
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
if __FILE__ == $0
|
|
155
|
-
|
|
156
|
-
scale = CArray.float(50).span(0..10)
|
|
157
|
-
hist = CAHistogram.new([scale, scale])
|
|
158
|
-
|
|
159
|
-
x = CArray.float(1000000).randomn!.mul!(3).abs!
|
|
160
|
-
y = CArray.float(1000000).randomn!.mul!(3).abs!
|
|
161
|
-
|
|
162
|
-
hist.increment(x, y)
|
|
163
|
-
|
|
164
|
-
# p scale
|
|
165
|
-
# p hist
|
|
166
|
-
# p hist.out_of_table
|
|
167
|
-
# p hist[:i,nil].sum
|
|
168
|
-
|
|
169
|
-
CA.gnuplot { |g|
|
|
170
|
-
# g.image(hist, :title => "2D histogram test")
|
|
171
|
-
g.grid3d(
|
|
172
|
-
[scale, scale, hist],
|
|
173
|
-
:with => "dots",
|
|
174
|
-
:title => "2D histogram test")
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
end
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
# ----------------------------------------------------------------------------
|
|
2
|
-
#
|
|
3
|
-
# carray/math/recurrence.rb
|
|
4
|
-
#
|
|
5
|
-
# This file is part of Ruby/CArray extension library.
|
|
6
|
-
#
|
|
7
|
-
# Copyright (C) 2005-2020 Hiroki Motoyoshi
|
|
8
|
-
#
|
|
9
|
-
# ----------------------------------------------------------------------------
|
|
10
|
-
|
|
11
|
-
require 'carray'
|
|
12
|
-
|
|
13
|
-
class CARecurrence < CAObject # :nodoc:
|
|
14
|
-
|
|
15
|
-
#
|
|
16
|
-
# init should be a hash like,
|
|
17
|
-
# * [0] => 1, [1] => 1 ...
|
|
18
|
-
# * [0,0] => 1, [0,1] => 2 ...
|
|
19
|
-
#
|
|
20
|
-
|
|
21
|
-
def initialize (data, init = {}, &block)
|
|
22
|
-
@value = data
|
|
23
|
-
@flag = CArray.boolean(*data.dim)
|
|
24
|
-
@block = block
|
|
25
|
-
init.each do |idx, val|
|
|
26
|
-
@value[*idx] = val
|
|
27
|
-
@flag[*idx] = 1
|
|
28
|
-
end
|
|
29
|
-
super(data.data_type, data.dim, :bytes => data.bytes, :read_only => true)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def reset (init = {})
|
|
33
|
-
@flag[] = 0
|
|
34
|
-
init.each do |idx, val|
|
|
35
|
-
@value[*idx] = val
|
|
36
|
-
@flag[*idx] = 1
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
private
|
|
41
|
-
|
|
42
|
-
def fetch_addr (addr)
|
|
43
|
-
if @flag[addr] == 1
|
|
44
|
-
return @value[addr]
|
|
45
|
-
else
|
|
46
|
-
idx = addr2index(addr)
|
|
47
|
-
val = @block[@value, *idx]
|
|
48
|
-
@value[addr] = val
|
|
49
|
-
@flag[idx] = 1
|
|
50
|
-
return val
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def copy_data (data)
|
|
55
|
-
each_addr do |addr|
|
|
56
|
-
fetch_addr(addr)
|
|
57
|
-
end
|
|
58
|
-
data[] = @value
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
class CArray
|
|
64
|
-
|
|
65
|
-
def recurrence! (init = {}, &block)
|
|
66
|
-
lazy = CARecurrence.new(self, init, &block)
|
|
67
|
-
CArray.attach(lazy) {}
|
|
68
|
-
return self
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def recurrence (*argv, &block)
|
|
72
|
-
return self.template.recurrence!(*argv, &block)
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
if __FILE__ == $0
|
|
78
|
-
|
|
79
|
-
x = 0.5
|
|
80
|
-
leg = CArray.float(24).recurrence!([0]=>1, [1]=>x) { |a, i|
|
|
81
|
-
w = x * a[i-1]
|
|
82
|
-
wy = w - a[i-2]
|
|
83
|
-
wy+w-wy/i
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
p leg
|
|
87
|
-
|
|
88
|
-
CA.gnuplot { |g|
|
|
89
|
-
g.plot2d([leg.address, leg, nil, "linespoints"])
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
end
|
|
93
|
-
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# ----------------------------------------------------------------------------
|
|
2
|
-
#
|
|
3
|
-
# carray/object/ca_obj_iterator.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 CAIteratorArray < CAObject # :nodoc:
|
|
12
|
-
|
|
13
|
-
def initialize (it)
|
|
14
|
-
@it = it
|
|
15
|
-
super(CA_OBJECT, @it.dim)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
private
|
|
19
|
-
|
|
20
|
-
def fetch_index (idx)
|
|
21
|
-
return @it.kernel_at_index(idx)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def store_index (idx, val)
|
|
25
|
-
@it.kernel_at_index(idx)[] = val
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def copy_data (data)
|
|
29
|
-
data.each_index do |*idx|
|
|
30
|
-
data[*idx] = @it.kernel_at_index(idx)
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def sync_data (data)
|
|
35
|
-
tmpl = @it.reference.template
|
|
36
|
-
data.each_index do |*idx|
|
|
37
|
-
@it.kernel_at_index(idx, tmpl)[] = data[*idx]
|
|
38
|
-
end
|
|
39
|
-
@it.reference[] = tmpl
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def fill_data (data)
|
|
43
|
-
tmpl = @it.reference.template
|
|
44
|
-
CArray.each_index(*@it.dim) do |*idx|
|
|
45
|
-
@it.kernel_at_index(idx, tmpl)[] = data
|
|
46
|
-
end
|
|
47
|
-
@it.reference[] = tmpl
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
end
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# ----------------------------------------------------------------------------
|
|
2
|
-
#
|
|
3
|
-
# carray/object/ca_obj_link.rb
|
|
4
|
-
#
|
|
5
|
-
# This file is part of Ruby/CArray extension library.
|
|
6
|
-
#
|
|
7
|
-
# Copyright (C) 2005-2020 Hiroki Motoyoshi
|
|
8
|
-
#
|
|
9
|
-
# ----------------------------------------------------------------------------
|
|
10
|
-
|
|
11
|
-
require "carray"
|
|
12
|
-
|
|
13
|
-
class CALink < CAObject # :nodoc:
|
|
14
|
-
|
|
15
|
-
def initialize (*argv, &block)
|
|
16
|
-
@evaluator = block
|
|
17
|
-
@argv = argv
|
|
18
|
-
@args = argv.map{|v| CScalar.new(v.data_type) }
|
|
19
|
-
val = @evaluator.call(*argv)
|
|
20
|
-
unless val.is_a?(CArray)
|
|
21
|
-
val = CA_OBJECT(val)
|
|
22
|
-
end
|
|
23
|
-
super(val.data_type, val.dim, :bytes=>val.bytes, :read_only=>true)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
private
|
|
27
|
-
|
|
28
|
-
def fetch_addr (addr)
|
|
29
|
-
@argv.each_with_index do |v, i|
|
|
30
|
-
case v
|
|
31
|
-
when CScalar
|
|
32
|
-
@args[i][] = v[]
|
|
33
|
-
when CArray
|
|
34
|
-
@args[i][] = v[addr]
|
|
35
|
-
else
|
|
36
|
-
@args[i][] = v
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
return @evaluator.call(*@args)[0]
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def copy_data (data)
|
|
43
|
-
data[] = @evaluator.call(*@argv)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def create_mask
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
end
|
|
50
|
-
|