carray 1.4.0 → 1.5.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.yardopts +32 -0
- data/LICENSE +22 -0
- data/NEWS.md +83 -0
- data/README.md +38 -18
- data/Rakefile +2 -2
- data/TODO.md +17 -0
- data/carray.gemspec +13 -18
- data/{ca_iter_block.c → ext/ca_iter_block.c} +16 -18
- data/{ca_iter_dimension.c → ext/ca_iter_dimension.c} +20 -21
- data/{ca_iter_window.c → ext/ca_iter_window.c} +12 -14
- data/{ca_obj_array.c → ext/ca_obj_array.c} +451 -176
- data/{ca_obj_bitarray.c → ext/ca_obj_bitarray.c} +18 -23
- data/{ca_obj_bitfield.c → ext/ca_obj_bitfield.c} +12 -16
- data/{ca_obj_block.c → ext/ca_obj_block.c} +47 -54
- data/{ca_obj_fake.c → ext/ca_obj_fake.c} +10 -12
- data/{ca_obj_farray.c → ext/ca_obj_farray.c} +21 -23
- data/{ca_obj_field.c → ext/ca_obj_field.c} +30 -32
- data/{ca_obj_grid.c → ext/ca_obj_grid.c} +32 -33
- data/{ca_obj_mapping.c → ext/ca_obj_mapping.c} +11 -13
- data/{ca_obj_object.c → ext/ca_obj_object.c} +40 -42
- data/{ca_obj_reduce.c → ext/ca_obj_reduce.c} +3 -5
- data/{ca_obj_refer.c → ext/ca_obj_refer.c} +44 -48
- data/{ca_obj_repeat.c → ext/ca_obj_repeat.c} +45 -47
- data/{ca_obj_select.c → ext/ca_obj_select.c} +4 -6
- data/{ca_obj_shift.c → ext/ca_obj_shift.c} +26 -28
- data/{ca_obj_transpose.c → ext/ca_obj_transpose.c} +26 -28
- data/{ca_obj_unbound_repeat.c → ext/ca_obj_unbound_repeat.c} +106 -160
- data/{ca_obj_window.c → ext/ca_obj_window.c} +33 -35
- data/{carray.h → ext/carray.h} +86 -59
- data/{carray_access.c → ext/carray_access.c} +194 -101
- data/{carray_attribute.c → ext/carray_attribute.c} +161 -207
- data/{carray_call_cfunc.c → ext/carray_call_cfunc.c} +1 -3
- data/{carray_cast.c → ext/carray_cast.c} +351 -150
- data/{carray_cast_func.rb → ext/carray_cast_func.rb} +1 -2
- data/{carray_class.c → ext/carray_class.c} +28 -36
- data/{carray_conversion.c → ext/carray_conversion.c} +63 -68
- data/{carray_copy.c → ext/carray_copy.c} +34 -50
- data/{carray_core.c → ext/carray_core.c} +75 -62
- data/ext/carray_data_type.c +66 -0
- data/{carray_element.c → ext/carray_element.c} +34 -53
- data/{carray_generate.c → ext/carray_generate.c} +71 -50
- data/{carray_iterator.c → ext/carray_iterator.c} +53 -53
- data/{carray_loop.c → ext/carray_loop.c} +77 -106
- data/{carray_mask.c → ext/carray_mask.c} +105 -114
- data/{carray_math.rb → ext/carray_math.rb} +29 -13
- data/ext/{mathfunc/carray_mathfunc.c → carray_mathfunc.c} +1 -3
- data/{carray_numeric.c → ext/carray_numeric.c} +43 -46
- data/{carray_operator.c → ext/carray_operator.c} +49 -36
- data/{carray_order.c → ext/carray_order.c} +232 -217
- data/{carray_sort_addr.c → ext/carray_sort_addr.c} +14 -21
- data/{carray_stat.c → ext/carray_stat.c} +6 -8
- data/{carray_stat_proc.rb → ext/carray_stat_proc.rb} +25 -27
- data/{carray_test.c → ext/carray_test.c} +63 -51
- data/{carray_undef.c → ext/carray_undef.c} +1 -11
- data/{carray_utils.c → ext/carray_utils.c} +12 -4
- data/{extconf.rb → ext/extconf.rb} +10 -7
- data/{mkmath.rb → ext/mkmath.rb} +2 -2
- data/{ruby_carray.c → ext/ruby_carray.c} +20 -8
- data/{ruby_ccomplex.c → ext/ruby_ccomplex.c} +2 -4
- data/{ruby_float_func.c → ext/ruby_float_func.c} +1 -3
- data/ext/version.h +16 -0
- data/{version.rb → ext/version.rb} +0 -0
- data/lib/carray.rb +51 -40
- data/lib/carray/{base/autoload.rb → autoload.rb} +1 -3
- data/lib/carray/autoload/autoload_base.rb +1 -1
- data/lib/carray/autoload/autoload_gem_numo_narray.rb +7 -6
- data/lib/carray/autoload/autoload_gem_random.rb +8 -0
- data/lib/carray/basic.rb +191 -0
- data/lib/carray/broadcast.rb +101 -0
- data/lib/carray/compose.rb +315 -0
- data/lib/carray/construct.rb +484 -0
- data/lib/carray/convert.rb +115 -0
- data/lib/carray/info.rb +1 -3
- data/lib/carray/{base/inspect.rb → inspect.rb} +9 -11
- data/lib/carray/io/imagemagick.rb +2 -4
- data/lib/carray/{base/iterator.rb → iterator.rb} +6 -6
- data/lib/carray/mask.rb +102 -0
- data/lib/carray/{base/math.rb → math.rb} +20 -52
- data/lib/carray/math/histogram.rb +8 -10
- data/lib/carray/math/recurrence.rb +1 -3
- data/lib/carray/mkmf.rb +9 -3
- data/lib/carray/object/ca_obj_iterator.rb +1 -3
- data/lib/carray/object/ca_obj_link.rb +1 -3
- data/lib/carray/object/ca_obj_pack.rb +9 -11
- data/lib/carray/obsolete.rb +256 -0
- data/lib/carray/ordering.rb +181 -0
- data/lib/carray/{base/serialize.rb → serialize.rb} +60 -76
- data/lib/carray/{base/string.rb → string.rb} +10 -64
- data/lib/carray/{base/struct.rb → struct.rb} +19 -21
- data/lib/carray/{io/table.rb → table.rb} +1 -10
- data/lib/carray/testing.rb +51 -0
- data/lib/carray/time.rb +76 -0
- data/lib/carray/transform.rb +109 -0
- data/misc/Methods.ja.md +182 -0
- data/{NOTE → misc/NOTE} +16 -38
- data/spec/Classes/CABitfield_spec.rb +58 -0
- data/spec/Classes/CABlockIterator_spec.rb +114 -0
- data/spec/Classes/CABlock_spec.rb +205 -0
- data/spec/Classes/CAField_spec.rb +39 -0
- data/spec/Classes/CAGrid_spec.rb +75 -0
- data/spec/Classes/CAMap_spec.rb +0 -0
- data/{test/test_CAMapping.rb → spec/Classes/CAMapping_spec.rb} +35 -36
- data/spec/Classes/CAObject_attribute_spec.rb +33 -0
- data/spec/Classes/CAObject_spec.rb +33 -0
- data/spec/Classes/CARefer_spec.rb +93 -0
- data/spec/Classes/CARepeat_spec.rb +65 -0
- data/spec/Classes/CASelect_spec.rb +22 -0
- data/spec/Classes/CAShift_spec.rb +16 -0
- data/spec/Classes/CAStruct_spec.rb +71 -0
- data/{test/test_CATranspose.rb → spec/Classes/CATranspose_spec.rb} +20 -21
- data/spec/Classes/CAUnboudRepeat_spec.rb +102 -0
- data/spec/Classes/CAWindow_spec.rb +54 -0
- data/spec/Classes/CAWrap_spec.rb +8 -0
- data/{test/test_CArray.rb → spec/Classes/CArray_spec.rb} +48 -92
- data/spec/Classes/CScalar_spec.rb +55 -0
- data/spec/Features/feature_130_spec.rb +19 -0
- data/spec/Features/feature_attributes_spec.rb +280 -0
- data/spec/Features/feature_boolean_spec.rb +98 -0
- data/spec/Features/feature_broadcast.rb +116 -0
- data/spec/Features/feature_cast_function.rb +19 -0
- data/spec/Features/feature_cast_spec.rb +33 -0
- data/spec/Features/feature_class_spec.rb +84 -0
- data/spec/Features/feature_complex_spec.rb +42 -0
- data/{test/test_composite.rb → spec/Features/feature_composite_spec.rb} +17 -18
- data/spec/Features/feature_convert_spec.rb +46 -0
- data/spec/Features/feature_copy_spec.rb +123 -0
- data/spec/Features/feature_creation_spec.rb +84 -0
- data/spec/Features/feature_element_spec.rb +144 -0
- data/spec/Features/feature_extream_spec.rb +54 -0
- data/spec/Features/feature_generate_spec.rb +74 -0
- data/spec/Features/feature_index_spec.rb +69 -0
- data/spec/Features/feature_mask_spec.rb +580 -0
- data/spec/Features/feature_math_spec.rb +97 -0
- data/spec/Features/feature_order_spec.rb +146 -0
- data/spec/Features/feature_ref_store_spec.rb +209 -0
- data/spec/Features/feature_serialization_spec.rb +125 -0
- data/spec/Features/feature_stat_spec.rb +397 -0
- data/spec/Features/feature_virtual_spec.rb +48 -0
- data/spec/Features/method_eq_spec.rb +81 -0
- data/spec/Features/method_is_nan_spec.rb +12 -0
- data/spec/Features/method_map_spec.rb +54 -0
- data/spec/Features/method_max_with.rb +20 -0
- data/spec/Features/method_min_with.rb +19 -0
- data/spec/Features/method_ne_spec.rb +18 -0
- data/spec/Features/method_project_spec.rb +188 -0
- data/spec/Features/method_ref_spec.rb +27 -0
- data/spec/Features/method_round_spec.rb +11 -0
- data/spec/Features/method_s_linspace_spec.rb +48 -0
- data/spec/Features/method_s_span_spec.rb +14 -0
- data/spec/Features/method_seq_spec.rb +47 -0
- data/spec/Features/method_sort_with.rb +43 -0
- data/spec/Features/method_sorted_with.rb +29 -0
- data/spec/Features/method_span_spec.rb +42 -0
- data/spec/Features/method_wrap_readonly_spec.rb +43 -0
- data/{test → spec/UnitTest}/test_CAVirtual.rb +0 -0
- data/spec/spec_all.rb +0 -1
- data/utils/convert_test.rb +73 -0
- data/utils/{extract_rdoc.rb → extract_yard.rb} +7 -12
- data/{devel → utils}/guess_shape.rb +0 -0
- data/utils/{diff_method.rb → monkey_patch_methods.rb} +17 -7
- metadata +159 -206
- data/COPYING +0 -56
- data/GPL +0 -340
- data/LEGAL +0 -50
- data/TODO +0 -5
- data/carray_random.c +0 -531
- data/devel/im2col.rb +0 -17
- data/ext/calculus/carray_calculus.c +0 -931
- data/ext/calculus/carray_interp.c +0 -358
- data/ext/calculus/extconf.rb +0 -12
- data/ext/calculus/lib/math/calculus.rb +0 -119
- data/ext/calculus/lib/math/interp/adapter_interp1d.rb +0 -31
- data/ext/mathfunc/extconf.rb +0 -18
- data/ext/mathfunc/test/test_hypot.rb +0 -5
- data/ext/mathfunc/test/test_j0.rb +0 -22
- data/ext/mathfunc/test/test_jn.rb +0 -8
- data/ext/mathfunc/test/test_sph.rb +0 -9
- data/lib/carray/autoload/autoload_io_table.rb +0 -1
- data/lib/carray/autoload/autoload_math_interp.rb +0 -4
- data/lib/carray/base/basic.rb +0 -1146
- data/lib/carray/base/obsolete.rb +0 -131
- data/lib/carray/math/interp.rb +0 -57
- data/lib/carray/math/interp/adapter_gsl_spline.rb +0 -47
- data/mt19937ar.c +0 -182
- data/mt19937ar.h +0 -86
- data/rdoc_main.rb +0 -27
- data/rdoc_math.rb +0 -5
- data/rdoc_stat.rb +0 -31
- data/spec/CABlockIterator/CABlockIterator_spec.rb +0 -113
- data/spec/CArray/bug/store_spec.rb +0 -27
- data/spec/CArray/index/repeat_spec.rb +0 -10
- data/spec/CArray/method/eq_spec.rb +0 -80
- data/spec/CArray/method/is_nan_spec.rb +0 -12
- data/spec/CArray/method/ne_spec.rb +0 -18
- data/spec/CArray/method/round_spec.rb +0 -11
- data/spec/CArray/object/_attribute_spec.rb +0 -32
- data/spec/CArray/object/s_new_spec.rb +0 -31
- data/spec/CArray/serialize/Serialization_spec.rb +0 -89
- data/test/test_130.rb +0 -23
- data/test/test_ALL.rb +0 -51
- data/test/test_CABitfield.rb +0 -59
- data/test/test_CABlock.rb +0 -208
- data/test/test_CAField.rb +0 -40
- data/test/test_CAGrid.rb +0 -76
- data/test/test_CAMmap.rb +0 -11
- data/test/test_CARefer.rb +0 -94
- data/test/test_CARepeat.rb +0 -66
- data/test/test_CASelect.rb +0 -23
- data/test/test_CAShift.rb +0 -17
- data/test/test_CAWindow.rb +0 -55
- data/test/test_CAWrap.rb +0 -9
- data/test/test_CComplex.rb +0 -83
- data/test/test_CScalar.rb +0 -91
- data/test/test_attribute.rb +0 -281
- data/test/test_block_iterator.rb +0 -17
- data/test/test_boolean.rb +0 -99
- data/test/test_cast.rb +0 -33
- data/test/test_class.rb +0 -85
- data/test/test_complex.rb +0 -43
- data/test/test_convert.rb +0 -79
- data/test/test_copy.rb +0 -141
- data/test/test_creation.rb +0 -85
- data/test/test_element.rb +0 -146
- data/test/test_extream.rb +0 -55
- data/test/test_generate.rb +0 -75
- data/test/test_index.rb +0 -71
- data/test/test_mask.rb +0 -578
- data/test/test_math.rb +0 -98
- data/test/test_narray.rb +0 -64
- data/test/test_order.rb +0 -147
- data/test/test_random.rb +0 -15
- data/test/test_ref_store.rb +0 -211
- data/test/test_stat.rb +0 -414
- data/test/test_struct.rb +0 -72
- data/test/test_virtual.rb +0 -49
- data/utils/create_rdoc.sh +0 -9
- data/utils/make_tgz.sh +0 -3
- data/version.h +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4c7a72221863bbee2085dc603cd57a4970c34dc5236640e47819f3fa503d2b00
|
4
|
+
data.tar.gz: e09709eedecd9679ddf8cfa13d047cfa60014728a07d864fa6c29a372f49ea08
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7c096ade9e0141172eec06ed71660c6930929231b94b57c3a659e30ffe90c323117a5fb4f5c533517c4460355549586b193e134e4a456876fbab9deea78a4360
|
7
|
+
data.tar.gz: 04e3c2e157f3a5a088d008cccdb1307549cbb0105538f1495e728e61f9c824b5034315d07faae0498795671d055c892ee8f596a5ad8b4700ecc79c0a6fd993a1
|
data/.yardopts
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
--markup markdown
|
2
|
+
--markup-provider redcarpet
|
3
|
+
--no-private
|
4
|
+
--exclude lib/carray/obsolete.rb
|
5
|
+
--exclude lib/carray/autoload.rb
|
6
|
+
--exclude 'lib/carray/autoload/'
|
7
|
+
--readme README.md
|
8
|
+
--files NEWS.md,TODO.md
|
9
|
+
lib/carray.rb
|
10
|
+
ext/ruby_carray.c
|
11
|
+
ext/ca_obj_array.c
|
12
|
+
ext/ca_obj_bitarray.c
|
13
|
+
ext/ca_obj_bitfield.c
|
14
|
+
ext/ca_obj_block.c
|
15
|
+
ext/carray_attribute.c
|
16
|
+
ext/carray_call_cfunc.c
|
17
|
+
ext/carray_cast.c
|
18
|
+
ext/carray_class.c
|
19
|
+
ext/carray_conversion.c
|
20
|
+
ext/carray_copy.c
|
21
|
+
ext/carray_core.c
|
22
|
+
ext/carray_data_type.c
|
23
|
+
ext/carray_element.c
|
24
|
+
ext/carray_generate.c
|
25
|
+
ext/carray_loop.c
|
26
|
+
ext/carray_mask.c
|
27
|
+
ext/carray_operator.c
|
28
|
+
ext/carray_order.c
|
29
|
+
ext/carray_sort_addr.c
|
30
|
+
ext/carray_test.c
|
31
|
+
ext/carray_utils.c
|
32
|
+
|
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2020 Hiroki Motoyoshi.
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person
|
4
|
+
obtaining a copy of this software and associated documentation
|
5
|
+
files (the "Software"), to deal in the Software without
|
6
|
+
restriction, including without limitation the rights to use,
|
7
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
copies of the Software, and to permit persons to whom the
|
9
|
+
Software is furnished to do so, subject to the following
|
10
|
+
conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
17
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
19
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
20
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
21
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
data/NEWS.md
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
ChangeLog of Ruby/CArray
|
2
|
+
========================
|
3
|
+
|
4
|
+
1.5.4 -> 1.5.5
|
5
|
+
|
6
|
+
* [Fix] Fix recognition of "atan2", ... in "math.h"
|
7
|
+
* [Fix] Fix serialize.rb of keyword parameters for Ruby2.7
|
8
|
+
|
9
|
+
1.5.3 -> 1.5.4
|
10
|
+
--------------
|
11
|
+
|
12
|
+
* [New] Import method 'CArray#section' from gem 'carray-calculus'
|
13
|
+
* [New] Add new method 'CArray#pull', 'CArray#pulled'
|
14
|
+
* [New] Add new option 'expand_scalar' to 'CArray.broadcast'
|
15
|
+
* [Mod] Modify the method 'CArray.broadcast' to accept block.
|
16
|
+
* [Mod] Modify the method 'CArray.meshgrid' to accept block.
|
17
|
+
* [Mod] Modify 'CScalar#broadcast_to' to return CArray
|
18
|
+
* [Mod] Modify 'CScalar#is_masked' and 'CScalar#is_masked' to return CScalar
|
19
|
+
* [Fix] Fix order of repetitive dimensions in 'CArray#meshgrid'
|
20
|
+
* [Fix] Fix errors in installing on MinGW+msys2
|
21
|
+
|
22
|
+
1.5.2 -> 1.5.3
|
23
|
+
--------------
|
24
|
+
|
25
|
+
* [New] Add new method 'CArray#exp2'
|
26
|
+
* [New] Add new method 'CArray#log2'
|
27
|
+
* [New] Add new method 'CArray#logb'
|
28
|
+
* [New] Add new method 'CArray#remainder'
|
29
|
+
* [New] Add new method 'CArray.guard_undef'
|
30
|
+
* [New] Add new method 'CArray#data_class='
|
31
|
+
* [New] Add new method 'CArray.data_class?'
|
32
|
+
* [Mod] Modify 'CArray#pmax' to use 'fmax' for float type
|
33
|
+
* [Mod] Modify 'CArray#pmin' to use 'fmin' for float type
|
34
|
+
* [Mod] Remove method 'Object#undef?'
|
35
|
+
* [Mod] Remove method '::nan', '::inf'
|
36
|
+
* [Mod] Remove method 'TrueClass#*', 'FalseClass#*' (unknown origin)
|
37
|
+
* [Fix] Fix invalid access for CAUnboundRepeat using index
|
38
|
+
* [Fix] Fix treatment of extra :* in operation between CAUnboundRepeat objects
|
39
|
+
* [Fix] Fix to accept Symbol for the name of data_class member
|
40
|
+
* [Fix] Fix 'CArray#uniq' to accept the array with the dimension more than 2.
|
41
|
+
* [Fix] Fix for CArray serialization to include data_class
|
42
|
+
* [Fix] Fix data_class inheritance in some methods in which new CArray is created.
|
43
|
+
* [Fix] Fix 'CArray#broadcast_to' to accept the case of dimension extension.
|
44
|
+
|
45
|
+
1.5.1 -> 1.5.2
|
46
|
+
--------------
|
47
|
+
|
48
|
+
* [New] Add new method 'CArray#sorted_with'
|
49
|
+
* [New] Add new method 'CArray#sort_with'
|
50
|
+
* [New] Add new method 'CArray#max_with'
|
51
|
+
* [New] Add new method 'CArray#min_with'
|
52
|
+
* [New] Add new method 'CArray.broadcast'
|
53
|
+
* [New] Add new method 'CArray#broadcast_to', 'CScalar#broadcast_to'
|
54
|
+
* [New] Add new API function `rb_ca_wrap_new`
|
55
|
+
* [Mod] Modify 'CArray#linspace' to return float64 array for integer arguments
|
56
|
+
* [Mod] Modify CAUnboundRepeat to have `ndim` same as the bounded array (before `ndim` same as parent array)
|
57
|
+
* [Mod] Remove the obsolete mothod 'CArray#dump'.
|
58
|
+
* [Mod] Remove the obsolete mothod 'CArray#load'.
|
59
|
+
* [Mod] Modify CArray.wrap_readonly to wrap string as array.
|
60
|
+
* [Fix] Add support for Integer (same as for Fixnum, Bignum)
|
61
|
+
|
62
|
+
1.5.0 -> 1.5.1
|
63
|
+
--------------
|
64
|
+
|
65
|
+
* [New] Add data type classes like 'Float64' ... to provide the methods like 'CArray::Float64.linspace'
|
66
|
+
* [Mod] Modify 'CArray.float64' ... without aruguments to return the corresponding data type class
|
67
|
+
* [Mod] Set obsolete flag to 'CAIterator#sort_with'
|
68
|
+
* [Fix] Move C extension files into 'ext/'
|
69
|
+
* [Fix] Rename member 'rank' to 'ndim' in struct CArray in C extension
|
70
|
+
* [Fix] Remove 'CArray#shuffle' (gone to 'carray-random' gem)
|
71
|
+
* [Fix] Remove dependencies on 'rb_secure()' and 'rb_safe_level()'
|
72
|
+
* [Fix] Modify 'CArray#span' to handle fractional step for integer array
|
73
|
+
|
74
|
+
1.4.0 -> 1.5.0
|
75
|
+
--------------
|
76
|
+
|
77
|
+
* [Mod] Remove 'Carray#random!' (gone to 'carray-random' gem)
|
78
|
+
* [Mod] Relocate file 'lib/carray/io/table.rb' to 'lib/carray/table.rb'
|
79
|
+
* [Mod] Rename class 'CA::TableMethods' to 'CArray::TableMethods'
|
80
|
+
* [Mod] Rename method 'CArray#cast_other' to 'CArray#cast_with'
|
81
|
+
* [Mod] Change license from "Ruby's" to "MIT"
|
82
|
+
* [Mod] Remove files 'COPYING', 'LEGAL'(for MT), 'GPL'
|
83
|
+
* [Fix] Fix bug lib/carray/struct.rb
|
data/README.md
CHANGED
@@ -3,34 +3,54 @@ Ruby/CArray
|
|
3
3
|
|
4
4
|
Ruby/CArray is an extension library for the multi-dimensional array class.
|
5
5
|
|
6
|
+
Features
|
7
|
+
--------
|
8
|
+
|
9
|
+
* Collection class for multidimensional array storing the value with uniform data type
|
10
|
+
* Element-wise mathematical operations and functions
|
11
|
+
* Statistical operation for the elements
|
12
|
+
* Various methods for referencing data elements
|
13
|
+
* Internally included element-wise mask to handle missing values
|
14
|
+
* Indirect data manipulation to referent by virtual array
|
15
|
+
* Special iterators (dimension, block, window, categorical)
|
16
|
+
* User-defined array class with same multi-dimensional interfaces as CArray
|
17
|
+
* Accessing the partial data in fixed length data via data_class interface
|
18
|
+
* Wrapping the memory block owned by the other object (such as NArray).
|
19
|
+
|
6
20
|
Requirements
|
7
21
|
------------
|
8
22
|
|
9
|
-
* Ruby 2.
|
23
|
+
* Ruby 2.4.0 or later
|
10
24
|
* C compiler
|
11
25
|
+ IEEE754 floating point number
|
12
26
|
+ C99 complex number
|
13
|
-
* Optional command
|
14
|
-
+ ImageMagick (stream, convert, display, identify)
|
15
27
|
|
16
|
-
|
17
|
-
|
28
|
+
What is Ruby/CArray
|
29
|
+
------------------
|
30
|
+
|
31
|
+
Ruby/CArray is an extension library for the multi-dimensional numerical array class. The name "CArray" comes from a wrapper's meaning to a numerical array handled by the C language. CArray stores integers or floating-point numbers in memory block and treats them collectively to ensure efficient performance. Therefore, Ruby/CArray is suitable for numerical computation and data analysis.
|
32
|
+
|
33
|
+
#### Multi-dimensional uniform array ####
|
34
|
+
|
35
|
+
CArray is a collection class that can store the array of values with a uniform data type of one of fixed-width integer (8,16,32,64bits), floating-point number (32,64bits), complex number (64,128bits), fixed-length string, ruby object. These values are stored in memory block as binary data. CArray has multi-dimensional interfaces for the array to access their values. The multi-dimensional array has the attributes of the dimension size (1,2,3,...) and the shape of dimension ([dim0], [dim0,dim1], [dim0,dim1,dim2],...) which define the size of array.
|
36
|
+
|
37
|
+
#### Collective mathematical operations ####
|
38
|
+
|
39
|
+
CArray supports the collective calculation for the element-wise arithmetic operations and elementary mathematical functions. Additionally, some basic statistical summarization along specific dimensions are also provided.
|
40
|
+
|
41
|
+
#### Referencing data and virtual arrays ####
|
42
|
+
|
43
|
+
CArray provides various methods for referencing data, such as addressing, slicing, selection by condition, address mapping, grid reference, transposing, shifting, rolling, data type conversion, reshaping, and so on. These data referencing are realized by the creation of virtual arrays, so-called 'view'. The virtual array doesn't have its data and retrieves the data from the referent only on-demand, including dereferencing, copying, or calculation. Since virtual array classes are sub-class of CArray, it has the same interfaces to access data as CArray. The changes in a virtual array by storing data are also reflected in the referent (if not a read_only array). Multiple heterogeneous chains of reference are also allowed, although the trade-offs with performance must be carefully considered.
|
44
|
+
|
45
|
+
#### Built-in element-wise mask handling ####
|
18
46
|
|
19
|
-
|
20
|
-
lib - Ruby/CArray standard library in Ruby
|
21
|
-
ext - optional extension libraries for Ruby/CArray
|
22
|
-
examples - some examples
|
23
|
-
test - some unit tests (incomplete)
|
24
|
-
spec - some rspec (incomplete)
|
25
|
-
utils - support tools for development.
|
47
|
+
CArray possesses masked states about each element (so-called "element-wise mask"). By referring the element-wise mask, CArray can perform mathematical and statistical calculations on the data with missing values by appropriate handling of masked elements. , which include the propagation of mask state to result in element-wise arithmetics and ignoring the masked elements in a statistical calculation, and so on.
|
26
48
|
|
27
|
-
|
28
|
-
------
|
49
|
+
#### User-defined array ####
|
29
50
|
|
30
|
-
|
51
|
+
Users can define a new virtual array class in Ruby level or C-extension level with TemplateMethod pattern. They are defined as a subclass of CAObject in Ruby level and as a subclass of CAVirtual in C-extension level. In particular, at the Ruby level, you can easily define a CArray-like class by implementing just a few template methods.
|
31
52
|
|
32
|
-
|
53
|
+
License
|
33
54
|
-------
|
34
55
|
|
35
|
-
|
36
|
-
the Ruby Licence. See the file 'COPYING' in this directory.
|
56
|
+
MIT (after version 1.5.0)
|
data/Rakefile
CHANGED
@@ -6,7 +6,7 @@ GEMSPEC = "carray.gemspec"
|
|
6
6
|
|
7
7
|
task :install do
|
8
8
|
spec = eval File.read(GEMSPEC)
|
9
|
-
version_h = `ruby version.rb`.chomp
|
9
|
+
version_h = `ruby ext/version.rb`.chomp
|
10
10
|
if spec.version.to_s != version_h
|
11
11
|
STDERR.puts "Mismatch in version between carray.gemspec and version.h"
|
12
12
|
STDERR.puts " carray.gemspec - #{spec.version.to_s }"
|
@@ -15,7 +15,7 @@ task :install do
|
|
15
15
|
exit(1)
|
16
16
|
end
|
17
17
|
system %{
|
18
|
-
gem build #{GEMSPEC}; gem install #{spec.full_name}.gem
|
18
|
+
gem build #{GEMSPEC}; gem install #{spec.full_name}.gem --no-document
|
19
19
|
}
|
20
20
|
end
|
21
21
|
|
data/TODO.md
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
ToDo List
|
2
|
+
=========
|
3
|
+
|
4
|
+
ToDo
|
5
|
+
-------
|
6
|
+
* Implement CArray.broadcast in C
|
7
|
+
* Implement Integer#{|,&,^,<<,>>} with Refinement (remove monkey patch)
|
8
|
+
* Remove RSTRUCT hack in carray_access.c for handling of Range object.
|
9
|
+
* Solve abs probrems
|
10
|
+
* Create spec
|
11
|
+
- str_format (cyclic format)
|
12
|
+
- CA_SIZE
|
13
|
+
- serialization of carray which has data_class
|
14
|
+
|
15
|
+
Done
|
16
|
+
-------
|
17
|
+
|
data/carray.gemspec
CHANGED
@@ -1,39 +1,34 @@
|
|
1
1
|
Gem::Specification::new do |s|
|
2
2
|
|
3
|
-
version = "1.
|
3
|
+
version = "1.5.5"
|
4
4
|
|
5
|
-
files = Dir.glob("**/*")
|
5
|
+
files = Dir.glob("**/*") + [".yardopts"] -
|
6
|
+
[
|
6
7
|
Dir.glob("carray-*.gem"),
|
7
8
|
Dir.glob("ext/**/{Makefile,mkmf.log}"),
|
8
9
|
Dir.glob("**/*.{o,so,bundle}"),
|
9
10
|
Dir.glob("**/*~"),
|
10
11
|
Dir.glob("doc/**/*"),
|
12
|
+
Dir.glob("test/**/*"),
|
11
13
|
].flatten
|
12
14
|
|
13
15
|
s.platform = Gem::Platform::RUBY
|
14
16
|
s.name = "carray"
|
15
|
-
s.summary = "Multi-dimesional array class"
|
17
|
+
s.summary = "Multi-dimesional array class for Ruby"
|
16
18
|
s.description = <<-HERE
|
17
|
-
CArray is
|
18
|
-
|
19
|
-
|
20
|
-
|
19
|
+
Ruby/CArray is an extension library for the multi-dimensional numerical array
|
20
|
+
class. The name "CArray" comes from the meaning of a wrapper to a numerical array
|
21
|
+
handled by the C language. CArray stores integers or floating-point numbers in
|
22
|
+
memory block and treats them collectively to ensure efficient performance.
|
23
|
+
Therefore, Ruby/CArray is suitable for numerical computation and data analysis.
|
21
24
|
HERE
|
22
25
|
s.version = version
|
23
26
|
s.author = "Hiroki Motoyoshi"
|
24
27
|
s.email = ""
|
28
|
+
s.license = 'MIT'
|
25
29
|
s.homepage = 'https://github.com/himotoyoshi/carray'
|
26
30
|
s.files = files
|
27
|
-
s.extensions = [ "extconf.rb" ]
|
28
|
-
|
29
|
-
s.rdoc_options = [
|
30
|
-
"-m rdoc_main.rb",
|
31
|
-
"rdoc_main.rb",
|
32
|
-
"rdoc_ext.rb",
|
33
|
-
"rdoc_math.rb",
|
34
|
-
"rdoc_stat.rb",
|
35
|
-
Dir.glob("lib/carray/**/*.rb"),
|
36
|
-
].flatten
|
37
|
-
s.required_ruby_version = ">= 1.8.1"
|
31
|
+
s.extensions = [ "ext/extconf.rb" ]
|
32
|
+
s.required_ruby_version = ">= 2.4.0"
|
38
33
|
end
|
39
34
|
|
@@ -3,16 +3,14 @@
|
|
3
3
|
ca_iter_block.c
|
4
4
|
|
5
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
6
|
|
9
|
-
Copyright (C) 2005 Hiroki Motoyoshi
|
7
|
+
Copyright (C) 2005-2020 Hiroki Motoyoshi
|
10
8
|
|
11
9
|
---------------------------------------------------------------------------- */
|
12
10
|
|
13
11
|
#include "carray.h"
|
14
12
|
|
15
|
-
/*
|
13
|
+
/* yard:
|
16
14
|
class CABlockIterator < CAIterator # :nodoc:
|
17
15
|
end
|
18
16
|
*/
|
@@ -23,7 +21,7 @@ VALUE rb_cCABlockIterator;
|
|
23
21
|
typedef struct {
|
24
22
|
int16_t obj_type;
|
25
23
|
int8_t data_type;
|
26
|
-
int8_t
|
24
|
+
int8_t ndim;
|
27
25
|
int32_t flags;
|
28
26
|
ca_size_t bytes;
|
29
27
|
ca_size_t elements;
|
@@ -42,11 +40,11 @@ typedef struct {
|
|
42
40
|
ca_size_t *step;
|
43
41
|
ca_size_t *count;
|
44
42
|
ca_size_t *size0;
|
45
|
-
} CABlock; // 68 + 20*(
|
43
|
+
} CABlock; // 68 + 20*(ndim) (bytes)
|
46
44
|
*/
|
47
45
|
|
48
46
|
typedef struct {
|
49
|
-
int8_t
|
47
|
+
int8_t ndim;
|
50
48
|
ca_size_t dim[CA_RANK_MAX];
|
51
49
|
CArray *reference;
|
52
50
|
CArray * (*kernel_at_addr)(void *, ca_size_t, CArray *);
|
@@ -73,14 +71,14 @@ ca_bi_kernel_at_index (void *it, ca_size_t *idx, CArray *ref)
|
|
73
71
|
else {
|
74
72
|
CABlock *ck = (CABlock *)bit->kernel;
|
75
73
|
kernel = ca_block_new(ref,
|
76
|
-
ck->
|
74
|
+
ck->ndim, ck->size0,
|
77
75
|
ck->start, ck->step, ck->count,
|
78
76
|
ck->offset);
|
79
77
|
}
|
80
78
|
|
81
79
|
ca_update_mask(kernel);
|
82
80
|
|
83
|
-
for (i=0; i<kernel->
|
81
|
+
for (i=0; i<kernel->ndim; i++) {
|
84
82
|
j = idx[i];
|
85
83
|
CA_CHECK_INDEX(j, bit->dim[i]);
|
86
84
|
kernel->start[i] += j * kernel->dim[i];
|
@@ -99,7 +97,7 @@ ca_bi_kernel_at_addr (void *it, ca_size_t addr, CArray *ref)
|
|
99
97
|
ca_size_t *dim = bit->dim;
|
100
98
|
ca_size_t idx[CA_RANK_MAX];
|
101
99
|
int8_t i;
|
102
|
-
for (i=bit->
|
100
|
+
for (i=bit->ndim-1; i>=0; i--) {
|
103
101
|
idx[i] = addr % dim[i];
|
104
102
|
addr /= dim[i];
|
105
103
|
}
|
@@ -117,7 +115,7 @@ ca_bi_kernel_move_to_index (void *it, ca_size_t *idx, CArray *kern)
|
|
117
115
|
|
118
116
|
ca_update_mask(kernel);
|
119
117
|
|
120
|
-
for (i=0; i<kernel->
|
118
|
+
for (i=0; i<kernel->ndim; i++) {
|
121
119
|
j = idx[i];
|
122
120
|
CA_CHECK_INDEX(j, bit->dim[i]);
|
123
121
|
kernel->start[i] = j * kernel->dim[i];
|
@@ -136,7 +134,7 @@ ca_bi_kernel_move_to_addr (void *it, ca_size_t addr, CArray *ref)
|
|
136
134
|
ca_size_t *dim = bit->dim;
|
137
135
|
ca_size_t idx[CA_RANK_MAX];
|
138
136
|
int8_t i;
|
139
|
-
for (i=bit->
|
137
|
+
for (i=bit->ndim-1; i>=0; i--) {
|
140
138
|
idx[i] = addr % dim[i];
|
141
139
|
addr /= dim[i];
|
142
140
|
}
|
@@ -158,11 +156,11 @@ ca_bi_setup (VALUE self, VALUE rref, VALUE rker)
|
|
158
156
|
Data_Get_Struct(rref, CArray, ref);
|
159
157
|
Data_Get_Struct(rker, CABlock, ker);
|
160
158
|
|
161
|
-
if ( ref->
|
162
|
-
rb_raise(rb_eRuntimeError, "
|
159
|
+
if ( ref->ndim != ker->ndim ) {
|
160
|
+
rb_raise(rb_eRuntimeError, "ndim mismatch between reference and kernel");
|
163
161
|
}
|
164
162
|
|
165
|
-
for (i=0; i<ref->
|
163
|
+
for (i=0; i<ref->ndim; i++) {
|
166
164
|
if ( ker->step[i] != 1 ) {
|
167
165
|
rb_raise(rb_eRuntimeError, "block should be contiguous");
|
168
166
|
}
|
@@ -174,8 +172,8 @@ ca_bi_setup (VALUE self, VALUE rref, VALUE rker)
|
|
174
172
|
*/
|
175
173
|
}
|
176
174
|
|
177
|
-
it->
|
178
|
-
memcpy(it->dim, dim, it->
|
175
|
+
it->ndim = ref->ndim;
|
176
|
+
memcpy(it->dim, dim, it->ndim * sizeof(ca_size_t));
|
179
177
|
it->reference = ref;
|
180
178
|
it->kernel = ker;
|
181
179
|
it->kernel_at_addr = ca_bi_kernel_at_addr;
|
@@ -202,7 +200,7 @@ rb_bi_initialize_copy (VALUE self, VALUE other)
|
|
202
200
|
return self;
|
203
201
|
}
|
204
202
|
|
205
|
-
/*
|
203
|
+
/* yard:
|
206
204
|
class CArray
|
207
205
|
# Create block iterator.
|
208
206
|
def blocks (*args)
|
@@ -3,10 +3,8 @@
|
|
3
3
|
ca_iter_dimension.c
|
4
4
|
|
5
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
6
|
|
9
|
-
Copyright (C) 2005 Hiroki Motoyoshi
|
7
|
+
Copyright (C) 2005-2020 Hiroki Motoyoshi
|
10
8
|
|
11
9
|
---------------------------------------------------------------------------- */
|
12
10
|
|
@@ -15,13 +13,13 @@
|
|
15
13
|
|
16
14
|
VALUE rb_cCADimIterator;
|
17
15
|
|
18
|
-
/*
|
16
|
+
/* yard:
|
19
17
|
class CADimensionIterator < CAIterator # :nodoc:
|
20
18
|
end
|
21
19
|
*/
|
22
20
|
|
23
21
|
typedef struct {
|
24
|
-
int8_t
|
22
|
+
int8_t ndim;
|
25
23
|
ca_size_t dim[CA_RANK_MAX];
|
26
24
|
CArray *reference;
|
27
25
|
CArray * (*kernel_at_addr)(void *, ca_size_t, CArray *);
|
@@ -50,14 +48,14 @@ ca_di_kernel_at_index (void *it, ca_size_t *idx, CArray *ref)
|
|
50
48
|
else {
|
51
49
|
CABlock *ck = (CABlock *)dit->kernel;
|
52
50
|
kernel = ca_block_new(ref,
|
53
|
-
ck->
|
51
|
+
ck->ndim, ck->size0,
|
54
52
|
ck->start, ck->step, ck->count,
|
55
53
|
ck->offset);
|
56
54
|
}
|
57
55
|
|
58
56
|
ca_update_mask(kernel);
|
59
57
|
|
60
|
-
for (i=0; i<dit->
|
58
|
+
for (i=0; i<dit->ndim; i++) {
|
61
59
|
val = idx[i];
|
62
60
|
CA_CHECK_INDEX(val, dit->dim[i]);
|
63
61
|
kernel->start[dit->symindex[i]] = val * kernel->step[dit->symindex[i]];
|
@@ -77,7 +75,7 @@ ca_di_kernel_at_addr (void *it, ca_size_t addr, CArray *ref)
|
|
77
75
|
ca_size_t *dim = dit->dim;
|
78
76
|
ca_size_t idx[CA_RANK_MAX];
|
79
77
|
int8_t i;
|
80
|
-
for (i=dit->
|
78
|
+
for (i=dit->ndim-1; i>=0; i--) {
|
81
79
|
idx[i] = addr % dim[i];
|
82
80
|
addr /= dim[i];
|
83
81
|
}
|
@@ -94,7 +92,7 @@ ca_di_kernel_move_to_index (void *it, ca_size_t *idx, CArray *kern)
|
|
94
92
|
|
95
93
|
ca_update_mask(kernel);
|
96
94
|
|
97
|
-
for (i=0; i<dit->
|
95
|
+
for (i=0; i<dit->ndim; i++) {
|
98
96
|
val = idx[i];
|
99
97
|
CA_CHECK_INDEX(val, dit->dim[i]);
|
100
98
|
kernel->start[dit->symindex[i]] = val * kernel->step[dit->symindex[i]];
|
@@ -114,7 +112,7 @@ ca_di_kernel_move_to_addr (void *it, ca_size_t addr, CArray *ref)
|
|
114
112
|
ca_size_t *dim = dit->dim;
|
115
113
|
ca_size_t idx[CA_RANK_MAX];
|
116
114
|
int8_t i;
|
117
|
-
for (i=dit->
|
115
|
+
for (i=dit->ndim-1; i>=0; i--) {
|
118
116
|
idx[i] = addr % dim[i];
|
119
117
|
addr /= dim[i];
|
120
118
|
}
|
@@ -129,7 +127,7 @@ ca_di_setup (VALUE self, VALUE rref, CAIndexInfo *info)
|
|
129
127
|
volatile VALUE rindex, rker, rsymtbl;
|
130
128
|
CADimIterator *it;
|
131
129
|
CAIndexInfo blk_spec;
|
132
|
-
int8_t
|
130
|
+
int8_t ndim;
|
133
131
|
int i, j, k;
|
134
132
|
|
135
133
|
Data_Get_Struct(self, CADimIterator, it);
|
@@ -142,7 +140,7 @@ ca_di_setup (VALUE self, VALUE rref, CAIndexInfo *info)
|
|
142
140
|
|
143
141
|
blk_spec = *info;
|
144
142
|
blk_spec.type = CA_REG_BLOCK;
|
145
|
-
for (i=0; i<info->
|
143
|
+
for (i=0; i<info->ndim; i++) {
|
146
144
|
if ( info->index_type[i] == CA_IDX_SYMBOL ) {
|
147
145
|
blk_spec.index_type[i] = CA_IDX_ALL;
|
148
146
|
rb_hash_aset(rsymtbl, ID2SYM(blk_spec.index[i].symbol.id), INT2NUM(i));
|
@@ -151,13 +149,13 @@ ca_di_setup (VALUE self, VALUE rref, CAIndexInfo *info)
|
|
151
149
|
|
152
150
|
rref = rb_ca_ref_block(rref, &blk_spec);
|
153
151
|
|
154
|
-
rindex = rb_ary_new2(info->
|
155
|
-
|
152
|
+
rindex = rb_ary_new2(info->ndim);
|
153
|
+
ndim = 0;
|
156
154
|
|
157
155
|
j = 0;
|
158
156
|
k = 0;
|
159
157
|
|
160
|
-
for (i=0; i<info->
|
158
|
+
for (i=0; i<info->ndim; i++) {
|
161
159
|
if ( info->index_type[i] == CA_IDX_SCALAR ) {
|
162
160
|
rb_ary_store(rindex, i, SIZE2NUM(info->index[i].scalar));
|
163
161
|
continue; /* escape from j++ */
|
@@ -165,8 +163,8 @@ ca_di_setup (VALUE self, VALUE rref, CAIndexInfo *info)
|
|
165
163
|
else if ( info->index_type[i] == CA_IDX_SYMBOL ) {
|
166
164
|
rb_ary_store(rindex, i, rb_ary_new3(1, SIZE2NUM(0)));
|
167
165
|
it->symflag[j] = 1;
|
168
|
-
it->symindex[
|
169
|
-
|
166
|
+
it->symindex[ndim] = j;
|
167
|
+
ndim++;
|
170
168
|
}
|
171
169
|
else if ( info->index_type[i] == CA_IDX_ALL ) {
|
172
170
|
rb_ary_store(rindex, i, Qnil);
|
@@ -184,7 +182,7 @@ ca_di_setup (VALUE self, VALUE rref, CAIndexInfo *info)
|
|
184
182
|
|
185
183
|
rker = rb_apply(rref, rb_intern("[]"), rindex);
|
186
184
|
|
187
|
-
it->
|
185
|
+
it->ndim = ndim;
|
188
186
|
Data_Get_Struct(rref, CArray, it->reference);
|
189
187
|
Data_Get_Struct(rker, CArray, it->kernel);
|
190
188
|
it->kernel_at_addr = ca_di_kernel_at_addr;
|
@@ -192,7 +190,7 @@ ca_di_setup (VALUE self, VALUE rref, CAIndexInfo *info)
|
|
192
190
|
it->kernel_move_to_addr = ca_di_kernel_move_to_addr;
|
193
191
|
it->kernel_move_to_index = ca_di_kernel_move_to_index;
|
194
192
|
|
195
|
-
for (i=0; i<it->
|
193
|
+
for (i=0; i<it->ndim; i++) {
|
196
194
|
it->dim[i] = it->reference->dim[it->symindex[i]];
|
197
195
|
}
|
198
196
|
|
@@ -239,7 +237,8 @@ rb_ca_dim_iterator (int argc, VALUE *argv, VALUE self)
|
|
239
237
|
|
240
238
|
Data_Get_Struct(self, CArray, ca);
|
241
239
|
|
242
|
-
|
240
|
+
info.range_check = 1;
|
241
|
+
rb_ca_scan_index(ca->ndim, ca->dim, ca->elements, argc, argv, &info);
|
243
242
|
|
244
243
|
obj = rb_di_s_allocate(rb_cCADimIterator);
|
245
244
|
ca_di_setup(obj, self, &info);
|
@@ -258,7 +257,7 @@ rb_dim_iter_new (VALUE rref, CAIndexInfo *info)
|
|
258
257
|
return obj;
|
259
258
|
}
|
260
259
|
|
261
|
-
/*
|
260
|
+
/* yard:
|
262
261
|
class CADimensionIterator
|
263
262
|
def sym2dim (sym)
|
264
263
|
end
|