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,99 +0,0 @@
|
|
|
1
|
-
# ----------------------------------------------------------------------------
|
|
2
|
-
#
|
|
3
|
-
# carray/object/ca_obj_pack.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
|
-
#
|
|
13
|
-
# [ca1, ca2, ca3] => ca4
|
|
14
|
-
#
|
|
15
|
-
#
|
|
16
|
-
#
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class CAPack < CAObject # :nodoc:
|
|
20
|
-
|
|
21
|
-
def initialize (list, options={})
|
|
22
|
-
@list = list
|
|
23
|
-
@ndim = options[:ndim]
|
|
24
|
-
unless @ndim
|
|
25
|
-
@ndim = list.map{|m| m.ndim}.min
|
|
26
|
-
end
|
|
27
|
-
@names = options[:names] || [nil]*@list.size
|
|
28
|
-
@dim = guess_dim(list)
|
|
29
|
-
@struct = guess_struct(list)
|
|
30
|
-
super(@struct, @dim, :read_only=>true)
|
|
31
|
-
freeze
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
private
|
|
35
|
-
|
|
36
|
-
def fetch_index (idx)
|
|
37
|
-
out = @struct.new
|
|
38
|
-
dummy = idx + [false]
|
|
39
|
-
@struct.members.each_with_index do |name, i|
|
|
40
|
-
out[name] = @list[i][*dummy]
|
|
41
|
-
end
|
|
42
|
-
return out
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def copy_data (data)
|
|
46
|
-
data.fields.zip(@list).each do |mem, d|
|
|
47
|
-
mem[] = d
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def guess_dim (list)
|
|
52
|
-
dim = nil
|
|
53
|
-
list.each do |mem|
|
|
54
|
-
case mem
|
|
55
|
-
when CArray
|
|
56
|
-
if mem.ndim < @ndim
|
|
57
|
-
raise "mem.ndim < @ndim"
|
|
58
|
-
else
|
|
59
|
-
newdim = mem.dim[0, @ndim]
|
|
60
|
-
end
|
|
61
|
-
if dim
|
|
62
|
-
unless dim == newdim
|
|
63
|
-
raise "dim != newdim"
|
|
64
|
-
end
|
|
65
|
-
else
|
|
66
|
-
dim = newdim
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
return dim || [1]
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def guess_struct (list)
|
|
74
|
-
st = CA.struct(:pack=>1) { |s|
|
|
75
|
-
list.each_with_index do |mem, i|
|
|
76
|
-
name = @names[i]
|
|
77
|
-
case mem
|
|
78
|
-
when CArray
|
|
79
|
-
if mem.ndim == @ndim
|
|
80
|
-
s.member mem.data_type, name, :bytes=>mem.bytes ### anonymous member
|
|
81
|
-
else
|
|
82
|
-
dummy = Array.new(@ndim){0} + [false]
|
|
83
|
-
s.member mem[*dummy].to_ca, name ### anonymous member
|
|
84
|
-
end
|
|
85
|
-
else
|
|
86
|
-
raise "invalid object for CAPack"
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
}
|
|
90
|
-
return st
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
class CArray
|
|
96
|
-
def self.pack (*argv)
|
|
97
|
-
return CAPack.new(argv)
|
|
98
|
-
end
|
|
99
|
-
end
|
data/lib/carray/obsolete.rb
DELETED
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
# ----------------------------------------------------------------------------
|
|
2
|
-
#
|
|
3
|
-
# carray/obsolete.rb
|
|
4
|
-
#
|
|
5
|
-
# This file is part of Ruby/CArray extension library.
|
|
6
|
-
#
|
|
7
|
-
# Copyright (C) 2005-2020 Hiroki Motoyoshi
|
|
8
|
-
#
|
|
9
|
-
# ----------------------------------------------------------------------------
|
|
10
|
-
|
|
11
|
-
module CA
|
|
12
|
-
TableMethods = CArray::TableMethods
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
class CArray
|
|
16
|
-
|
|
17
|
-
### obsolete methods
|
|
18
|
-
|
|
19
|
-
def extend_as_table (column_names)
|
|
20
|
-
warn "CArray#extend_as_table will be obsolete"
|
|
21
|
-
self.extend CArray::TableMethods
|
|
22
|
-
self.column_names = column_names
|
|
23
|
-
self
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# Returns the array eliminated all the duplicated elements.
|
|
27
|
-
def duplicated_values
|
|
28
|
-
warn "CArray#duplicated_values will be obsolete"
|
|
29
|
-
if uniq.size == size
|
|
30
|
-
return []
|
|
31
|
-
else
|
|
32
|
-
hash = {}
|
|
33
|
-
list = []
|
|
34
|
-
each_with_addr do |v, addr|
|
|
35
|
-
if v == UNDEF
|
|
36
|
-
next
|
|
37
|
-
elsif hash[v]
|
|
38
|
-
list << [v, addr, hash[v]]
|
|
39
|
-
hash[v] += 1
|
|
40
|
-
else
|
|
41
|
-
hash[v] = 0
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
return list
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def self.summation (*dim)
|
|
49
|
-
warn "CArray.summation will be obsolete"
|
|
50
|
-
out = nil
|
|
51
|
-
first = true
|
|
52
|
-
CArray.each_index(*dim) { |*idx|
|
|
53
|
-
if first
|
|
54
|
-
out = yield(*idx)
|
|
55
|
-
first = false
|
|
56
|
-
else
|
|
57
|
-
out += yield(*idx)
|
|
58
|
-
end
|
|
59
|
-
}
|
|
60
|
-
return out
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def by (other)
|
|
64
|
-
warn "CArray#by will be obsolete"
|
|
65
|
-
case other
|
|
66
|
-
when CArray
|
|
67
|
-
return (self[nil][nil,:*]*other[nil][:*,nil]).reshape(*(dim+other.dim))
|
|
68
|
-
else
|
|
69
|
-
return self * other
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def save_binary (filename, opt={}) # :nodoc:
|
|
74
|
-
warn "CArray#save_binary will be obsolete, use CArray.save"
|
|
75
|
-
open(filename, "w") { |io|
|
|
76
|
-
return Serializer.new(io).save(self, opt)
|
|
77
|
-
}
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
def self.load_binary (filename, opt={}) # :nodoc:
|
|
81
|
-
warn "CArray.load_binary will be obsolete, use CArray.load"
|
|
82
|
-
open(filename) { |io|
|
|
83
|
-
return Serializer.new(io).load(opt)
|
|
84
|
-
}
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
def save_binary_io (io, opt={}) # :nodoc:
|
|
88
|
-
warn "CArray#save_binary_io will be obsolete, use CArray.save"
|
|
89
|
-
return Serializer.new(io).save(self, opt)
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def self.load_binary_io (io, opt={}) # :nodoc:
|
|
93
|
-
warn "CArray#load_binary_io will be obsolete, use CArray.load"
|
|
94
|
-
return Serializer.new(io).load(opt)
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
def to_binary (io="", opt={}) # :nodoc:
|
|
98
|
-
warn "CArray#to_binary will be obsolete, use CArray.dump"
|
|
99
|
-
Serializer.new(io).save(self, opt)
|
|
100
|
-
return io
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
def self.from_binary (io, opt={}) # :nodoc:
|
|
104
|
-
warn "CArray.from_binary will be obsolete, use CArray.load"
|
|
105
|
-
return Serializer.new(io).load(opt)
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
def replace_value (from, to)
|
|
109
|
-
warn "CArray#replace_value will be obsolete"
|
|
110
|
-
self[:eq, from] = to
|
|
111
|
-
return self
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
def asign (*idx)
|
|
115
|
-
warn "CArray#asign will be obsolete"
|
|
116
|
-
self[*idx] = yield
|
|
117
|
-
return self
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
def fa # :nodoc:
|
|
121
|
-
warn "CArray#fa will be obsolete, use CArray#t"
|
|
122
|
-
return self.t
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
def block_iterator (*argv) # :nodoc:
|
|
126
|
-
warn "CArray#block_iterator will be obsolete, use CArray#blocks"
|
|
127
|
-
return blocks(*argv)
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
def window_iterator (*argv) # :nodoc:
|
|
131
|
-
warn "CArray#window_iterator will be obsolete, use CArray#windows"
|
|
132
|
-
return windows(*argv)
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
def rotated (*argv) # :nodoc:
|
|
136
|
-
warn "CArray#rotated will be obsolete, use CArray#rolled"
|
|
137
|
-
argv.push({:roll => Array.new(ndim){1} })
|
|
138
|
-
return shifted(*argv)
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
def rotate! (*argv) # :nodoc:
|
|
142
|
-
warn "CArray#rotate! will be obsolete, use CArray#roll!"
|
|
143
|
-
self[] = self.rolled(*argv)
|
|
144
|
-
return self
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
def rotate (*argv) # :nodoc:
|
|
148
|
-
warn "CArray#rotate will be obsolete, use CArray#roll"
|
|
149
|
-
return self.rolled(*argv).to_ca
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
def select (&block) # :nodoc:
|
|
153
|
-
warn "CArray#select will be obsolete"
|
|
154
|
-
case block.arity
|
|
155
|
-
when 1
|
|
156
|
-
return self[*yield(self)]
|
|
157
|
-
when -1, 0
|
|
158
|
-
return self[*instance_exec(&block)]
|
|
159
|
-
else
|
|
160
|
-
raise
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
def transform (type, dim, opt = {}) # :nodoc:
|
|
165
|
-
warn("CArray#transform will be obsolete")
|
|
166
|
-
return refer(type, dim, opt).to_ca
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
def classify (klass, outlier = nil) # :nodoc:
|
|
170
|
-
warn "CArray#classify will be obsolete"
|
|
171
|
-
b = CArray.int32(*dim)
|
|
172
|
-
f = CArray.boolean(*dim) { 1 }
|
|
173
|
-
attach {
|
|
174
|
-
(klass.elements-1).times do |i|
|
|
175
|
-
r = f.and(self < klass[i+1])
|
|
176
|
-
b[r] = i
|
|
177
|
-
f[r] = 0
|
|
178
|
-
end
|
|
179
|
-
if outlier
|
|
180
|
-
b[self < klass[0]] = outlier
|
|
181
|
-
b[f] = outlier
|
|
182
|
-
else
|
|
183
|
-
b[self < klass[0]] = -1
|
|
184
|
-
b[f] = klass.elements-1
|
|
185
|
-
end
|
|
186
|
-
}
|
|
187
|
-
return b
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
=begin
|
|
195
|
-
|
|
196
|
-
class Numeric
|
|
197
|
-
|
|
198
|
-
[
|
|
199
|
-
:boolean,
|
|
200
|
-
:int8,
|
|
201
|
-
:uint8,
|
|
202
|
-
:int16,
|
|
203
|
-
:uint16,
|
|
204
|
-
:int32,
|
|
205
|
-
:uint32,
|
|
206
|
-
:int64,
|
|
207
|
-
:uint64,
|
|
208
|
-
:float32,
|
|
209
|
-
:float64,
|
|
210
|
-
:float128,
|
|
211
|
-
:cmplx64,
|
|
212
|
-
:cmplx128,
|
|
213
|
-
:cmplx256,
|
|
214
|
-
:byte,
|
|
215
|
-
:short,
|
|
216
|
-
:int,
|
|
217
|
-
:float,
|
|
218
|
-
:double,
|
|
219
|
-
:complex,
|
|
220
|
-
:dcomplex,
|
|
221
|
-
:object
|
|
222
|
-
].each do |name|
|
|
223
|
-
class_eval %{
|
|
224
|
-
def #{name} ()
|
|
225
|
-
warn "Numeric##{name} will be obsolete"
|
|
226
|
-
CScalar.new(#{name.inspect}) {self}
|
|
227
|
-
end
|
|
228
|
-
}
|
|
229
|
-
end
|
|
230
|
-
|
|
231
|
-
end
|
|
232
|
-
|
|
233
|
-
class CArray
|
|
234
|
-
def histogram (klass)
|
|
235
|
-
c = CArray.int32(klass.elements-1)
|
|
236
|
-
f = CArray.boolean(*dim) { 1 }
|
|
237
|
-
attach {
|
|
238
|
-
k = 0
|
|
239
|
-
r = f.and(self < klass[0])
|
|
240
|
-
f[r] = 0
|
|
241
|
-
(klass.elements-1).times do |i|
|
|
242
|
-
r = f.and(self < klass[i+1])
|
|
243
|
-
c[k] = r.count_true
|
|
244
|
-
f[r] = 0
|
|
245
|
-
k+=1
|
|
246
|
-
end
|
|
247
|
-
}
|
|
248
|
-
return c
|
|
249
|
-
end
|
|
250
|
-
|
|
251
|
-
def self.load_from_file (filename, data_type, dim, opt={}) # :nodoc:
|
|
252
|
-
raise "Sorry, CArray.load_from_file is depleted"
|
|
253
|
-
end
|
|
254
|
-
|
|
255
|
-
end
|
|
256
|
-
=end
|
data/lib/carray/ordering.rb
DELETED
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
# ----------------------------------------------------------------------------
|
|
2
|
-
#
|
|
3
|
-
# carray/ordering.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
|
-
# reversed
|
|
14
|
-
def reversed
|
|
15
|
-
return self[*([-1..0]*ndim)]
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# roll / shift
|
|
19
|
-
|
|
20
|
-
def shift! (*argv, &block)
|
|
21
|
-
self[] = self.shifted(*argv, &block)
|
|
22
|
-
return self
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def shift (*argv, &block)
|
|
26
|
-
return self.shifted(*argv, &block).to_ca
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def rolled (*argv)
|
|
30
|
-
argv.push({:roll => Array.new(ndim){1} })
|
|
31
|
-
return shifted(*argv)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def roll! (*argv)
|
|
35
|
-
self[] = self.rolled(*argv)
|
|
36
|
-
return self
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def roll (*argv)
|
|
40
|
-
return self.rolled(*argv).to_ca
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# Returns the reference which elements are sorted by the comparison method
|
|
44
|
-
# given as block
|
|
45
|
-
def sorted_by (type=nil, opt={}, &block)
|
|
46
|
-
type, bytes =
|
|
47
|
-
CArray.guess_type_and_bytes(type||data_type, opt[:bytes]||bytes)
|
|
48
|
-
cmpary = convert(type, :bytes=>bytes, &block)
|
|
49
|
-
return self[cmpary.sort_addr]
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# Returns the array which elements are sorted by the comparison method
|
|
53
|
-
# given as block
|
|
54
|
-
def sort_by (type=nil, opt={}, &block)
|
|
55
|
-
type, bytes =
|
|
56
|
-
CArray.guess_type_and_bytes(type||data_type, opt[:bytes]||bytes)
|
|
57
|
-
cmpary = convert(type, :bytes=>bytes, &block)
|
|
58
|
-
return self[cmpary.sort_addr].to_ca
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def sorted_with (*others)
|
|
62
|
-
addr = sort_addr
|
|
63
|
-
([self] + others).map { |x| x[addr] }
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def sort_with (*others)
|
|
67
|
-
addr = sort_addr
|
|
68
|
-
([self] + others).map { |x| x[addr].to_ca }
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def max_by (&block)
|
|
72
|
-
if empty?
|
|
73
|
-
return UNDEF
|
|
74
|
-
else
|
|
75
|
-
addr = convert(:object, &block).max_addr
|
|
76
|
-
return self[addr]
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
def max_with (*others)
|
|
81
|
-
if empty?
|
|
82
|
-
return ([self] + others).map { |x| UNDEF }
|
|
83
|
-
else
|
|
84
|
-
addr = max_addr
|
|
85
|
-
return ([self] + others).map { |x| x[addr] }
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def min_by (&block)
|
|
90
|
-
if empty?
|
|
91
|
-
return UNDEF
|
|
92
|
-
else
|
|
93
|
-
addr = convert(:object, &block).min_addr
|
|
94
|
-
return self[addr]
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
def min_with (*others)
|
|
99
|
-
if empty?
|
|
100
|
-
return ([self] + others).map { |x| UNDEF }
|
|
101
|
-
else
|
|
102
|
-
addr = min_addr
|
|
103
|
-
return ([self] + others).map { |x| x[addr] }
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def range
|
|
108
|
-
return (self.min)..(self.max)
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
def nlargest (n)
|
|
112
|
-
obj = self.to_ca
|
|
113
|
-
list = []
|
|
114
|
-
n.times do |i|
|
|
115
|
-
k = obj.max_addr
|
|
116
|
-
list << obj[k]
|
|
117
|
-
obj[k] = UNDEF
|
|
118
|
-
end
|
|
119
|
-
list.to_ca.to_type(data_type)
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
def nlargest_addr (n)
|
|
123
|
-
obj = self.to_ca
|
|
124
|
-
list = []
|
|
125
|
-
n.times do |i|
|
|
126
|
-
k = obj.max_addr
|
|
127
|
-
list << k
|
|
128
|
-
obj[k] = UNDEF
|
|
129
|
-
end
|
|
130
|
-
CA_INT64(list)
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
def nsmallest (n)
|
|
134
|
-
obj = self.to_ca
|
|
135
|
-
list = []
|
|
136
|
-
n.times do |i|
|
|
137
|
-
k = obj.min_addr
|
|
138
|
-
list << obj[k]
|
|
139
|
-
obj[k] = UNDEF
|
|
140
|
-
end
|
|
141
|
-
list.to_ca.to_type(data_type)
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
def nsmallest_addr (n)
|
|
145
|
-
obj = self.to_ca
|
|
146
|
-
list = []
|
|
147
|
-
n.times do |i|
|
|
148
|
-
k = obj.min_addr
|
|
149
|
-
list << k
|
|
150
|
-
obj[k] = UNDEF
|
|
151
|
-
end
|
|
152
|
-
CA_INT64(list)
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
def order (dir = 1)
|
|
156
|
-
if dir >= 0 ### ascending order
|
|
157
|
-
if has_mask?
|
|
158
|
-
obj = template(:int32) { UNDEF }
|
|
159
|
-
sel = is_not_masked
|
|
160
|
-
obj[sel][self[sel].sort_addr].seq!
|
|
161
|
-
return obj
|
|
162
|
-
else
|
|
163
|
-
obj = template(:int32)
|
|
164
|
-
obj[sort_addr].seq!
|
|
165
|
-
return obj
|
|
166
|
-
end
|
|
167
|
-
else ### descending order
|
|
168
|
-
if has_mask?
|
|
169
|
-
obj = template(:int32) { UNDEF}
|
|
170
|
-
sel = is_not_masked
|
|
171
|
-
obj[sel][self[sel].sort_addr.reversed].seq!
|
|
172
|
-
return obj
|
|
173
|
-
else
|
|
174
|
-
obj = template(:int32)
|
|
175
|
-
obj[sort_addr.reversed].seq!
|
|
176
|
-
return obj
|
|
177
|
-
end
|
|
178
|
-
end
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
end
|
data/lib/carray/testing.rb
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
# ----------------------------------------------------------------------------
|
|
2
|
-
#
|
|
3
|
-
# carray/test.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
|
-
def test (&block)
|
|
14
|
-
return convert(:boolean) {|v| yield(v) ? true : false }
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def contains (*list)
|
|
18
|
-
result = self.false()
|
|
19
|
-
list.each do |item|
|
|
20
|
-
result = result | self.eq(item)
|
|
21
|
-
end
|
|
22
|
-
return result
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def between (a, b)
|
|
26
|
-
return (self >= a) & (self <= b)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def where_range
|
|
30
|
-
w = where
|
|
31
|
-
x = (w - w.shifted(1){-2}).sub!(1).where
|
|
32
|
-
y = (w - w.shifted(-1){-2}).add!(1).where
|
|
33
|
-
list = []
|
|
34
|
-
x.each_addr do |i|
|
|
35
|
-
list.push(w[x[i]]..w[y[i]])
|
|
36
|
-
end
|
|
37
|
-
return list
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# Returns the array eliminated all the duplicated elements.
|
|
41
|
-
def uniq
|
|
42
|
-
ary = flatten.to_a.uniq
|
|
43
|
-
if has_mask?
|
|
44
|
-
ary.delete(UNDEF)
|
|
45
|
-
end
|
|
46
|
-
out = CArray.new(data_type, [ary.length], :bytes=>bytes) { ary }
|
|
47
|
-
out.data_class = data_class if has_data_class?
|
|
48
|
-
return out
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
end
|
data/lib/carray/transform.rb
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
# ----------------------------------------------------------------------------
|
|
2
|
-
#
|
|
3
|
-
# carray/composition.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
|
-
# reshape
|
|
14
|
-
|
|
15
|
-
def reshape (*newdim)
|
|
16
|
-
ifalse = nil
|
|
17
|
-
i = 0
|
|
18
|
-
0.upto(newdim.size-1) do |i|
|
|
19
|
-
if newdim[i].nil?
|
|
20
|
-
newdim[i] = dim[i]
|
|
21
|
-
elsif newdim[i] == false
|
|
22
|
-
ifalse = i
|
|
23
|
-
break
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
k = 0
|
|
27
|
-
(newdim.size-1).downto(i+1) do |j|
|
|
28
|
-
if newdim[j].nil?
|
|
29
|
-
newdim[j] = dim[ndim-1-k]
|
|
30
|
-
end
|
|
31
|
-
k += 1
|
|
32
|
-
end
|
|
33
|
-
if ifalse
|
|
34
|
-
newdim[ifalse] =
|
|
35
|
-
elements/newdim.select{|x| x!=false}.inject(1){|s,x| s*x}
|
|
36
|
-
end
|
|
37
|
-
return refer(data_type, newdim, :bytes=>bytes)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# flatten
|
|
41
|
-
|
|
42
|
-
def flattened
|
|
43
|
-
return reshape(elements)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def flatten
|
|
47
|
-
return reshape(elements).to_ca
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def transpose! (*argv)
|
|
51
|
-
self[] = self.transposed(*argv)
|
|
52
|
-
return self
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def transpose (*argv)
|
|
56
|
-
return self.transposed(*argv).to_ca
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
# Reutrns the reference which ndim is reduced
|
|
60
|
-
# by eliminating the dimensions which size == 1
|
|
61
|
-
def compacted
|
|
62
|
-
if ndim == 1
|
|
63
|
-
return self[]
|
|
64
|
-
else
|
|
65
|
-
newdim = dim.reject{|x| x == 1 }
|
|
66
|
-
return ( ndim != newdim.size ) ? reshape(*newdim) : self[]
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
# Returns the array which ndim is reduced
|
|
71
|
-
# by eliminating the dimensions which size == 1
|
|
72
|
-
def compact
|
|
73
|
-
if ndim == 1
|
|
74
|
-
return self.to_ca
|
|
75
|
-
else
|
|
76
|
-
newdim = dim.reject{|x| x == 1 }
|
|
77
|
-
return ( ndim != newdim.size ) ? reshape(*newdim).to_ca : self.to_ca
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
# Returns (1,n) array from 1-dimensional array
|
|
82
|
-
def to_row
|
|
83
|
-
if ndim != 1
|
|
84
|
-
raise "ndim should be 1"
|
|
85
|
-
end
|
|
86
|
-
return self[1,:%]
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
# Returns (n,1) array from 1-dimensional array
|
|
90
|
-
def to_column
|
|
91
|
-
if ndim != 1
|
|
92
|
-
raise "ndim should be 1"
|
|
93
|
-
end
|
|
94
|
-
return self[:%,1]
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
# pulled
|
|
98
|
-
|
|
99
|
-
def pulled (*args)
|
|
100
|
-
idx = args.map{|s| s.nil? ? :% : s}
|
|
101
|
-
return self[*idx]
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
def pull (*args)
|
|
105
|
-
idx = args.map{|s| s.nil? ? :% : s}
|
|
106
|
-
return self[*idx].to_ca
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
end
|