carray 1.4.0 → 1.5.5
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 +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
@@ -3,10 +3,8 @@
|
|
3
3
|
ca_obj_reduce.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
|
|
@@ -16,7 +14,7 @@ static int8_t CA_OBJ_REDUCE;
|
|
16
14
|
|
17
15
|
static VALUE rb_cCAReduce;
|
18
16
|
|
19
|
-
/*
|
17
|
+
/* yard:
|
20
18
|
class CAReduce < CAVirtual # :nodoc:
|
21
19
|
end
|
22
20
|
*/
|
@@ -40,7 +38,7 @@ ca_reduce_setup (CAReduce *ca, CArray *parent, ca_size_t count, ca_size_t offset
|
|
40
38
|
ca->obj_type = CA_OBJ_REDUCE;
|
41
39
|
ca->data_type = CA_BOOLEAN; /* data type is fixed to boolean */
|
42
40
|
ca->flags = 0;
|
43
|
-
ca->
|
41
|
+
ca->ndim = 1;
|
44
42
|
ca->bytes = ca_sizeof[CA_BOOLEAN];
|
45
43
|
ca->elements = elements;
|
46
44
|
ca->ptr = NULL;
|
@@ -3,10 +3,8 @@
|
|
3
3
|
ca_obj_refer.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
|
|
@@ -14,14 +12,14 @@
|
|
14
12
|
|
15
13
|
VALUE rb_cCARefer;
|
16
14
|
|
17
|
-
/*
|
15
|
+
/* yard:
|
18
16
|
class CARefer < CAVirtual # :nodoc:
|
19
17
|
end
|
20
18
|
*/
|
21
19
|
|
22
20
|
static int
|
23
21
|
ca_refer_setup (CARefer *ca, CArray *parent,
|
24
|
-
int8_t data_type, int8_t
|
22
|
+
int8_t data_type, int8_t ndim, ca_size_t *dim, ca_size_t bytes,
|
25
23
|
ca_size_t offset)
|
26
24
|
{
|
27
25
|
ca_size_t elements, ratio;
|
@@ -29,23 +27,23 @@ ca_refer_setup (CARefer *ca, CArray *parent,
|
|
29
27
|
int is_deformed;
|
30
28
|
|
31
29
|
CA_CHECK_DATA_TYPE(data_type);
|
32
|
-
CA_CHECK_RANK(
|
33
|
-
CA_CHECK_DIM(
|
30
|
+
CA_CHECK_RANK(ndim);
|
31
|
+
CA_CHECK_DIM(ndim, dim);
|
34
32
|
CA_CHECK_BYTES(data_type, bytes);
|
35
33
|
|
36
34
|
if ( ca_is_object_type(parent) && data_type != CA_OBJECT ) {
|
37
|
-
rb_raise(rb_eRuntimeError, "object
|
35
|
+
rb_raise(rb_eRuntimeError, "object array can't be referred by other data type");
|
38
36
|
}
|
39
37
|
|
40
38
|
if ( parent->elements && bytes > parent->bytes * parent->elements ) {
|
41
|
-
rb_raise(rb_eRuntimeError, "
|
39
|
+
rb_raise(rb_eRuntimeError, "bytes exceeds the data size of referent");
|
42
40
|
}
|
43
41
|
|
44
42
|
/* calc datanum and check deformation */
|
45
|
-
is_deformed = (
|
43
|
+
is_deformed = ( ndim == parent->ndim ) ? 0 : 1;
|
46
44
|
ratio = 1;
|
47
45
|
elements = 1;
|
48
|
-
for (i=0; i<
|
46
|
+
for (i=0; i<ndim; i++) {
|
49
47
|
elements *= dim[i];
|
50
48
|
if ( dim[i] != parent->dim[i] ) {
|
51
49
|
is_deformed |= 1;
|
@@ -53,36 +51,34 @@ ca_refer_setup (CARefer *ca, CArray *parent,
|
|
53
51
|
}
|
54
52
|
if ( bytes < parent->bytes ) {
|
55
53
|
if ( parent->bytes % bytes != 0 ) {
|
56
|
-
rb_raise(
|
54
|
+
rb_raise(rb_eRuntimeError, "bytes of reference array must be a multiple of that of referent");
|
57
55
|
}
|
58
56
|
is_deformed = -2;
|
59
57
|
ratio = parent->bytes / bytes;
|
60
58
|
}
|
61
59
|
else if ( bytes > parent->bytes ) {
|
62
60
|
if ( bytes % parent->bytes != 0 ) {
|
63
|
-
rb_raise(
|
61
|
+
rb_raise(rb_eRuntimeError, "bytes of reference array must be a multiple of that of referent");
|
64
62
|
}
|
65
63
|
is_deformed = 2;
|
66
64
|
ratio = bytes / parent->bytes;
|
67
65
|
}
|
68
|
-
|
69
66
|
if ( offset < 0 ) {
|
70
|
-
rb_raise(rb_eRuntimeError,
|
71
|
-
"negative offset for CARefer");
|
67
|
+
rb_raise(rb_eRuntimeError, "negative offset is not permitted for CARefer");
|
72
68
|
}
|
73
69
|
|
74
70
|
if ( ( bytes * elements + parent->bytes * offset ) >
|
75
71
|
( parent->bytes * parent->elements ) ) {
|
76
|
-
rb_raise(rb_eRuntimeError, "data size
|
72
|
+
rb_raise(rb_eRuntimeError, "data size of reference array must not exceed that of referent");
|
77
73
|
}
|
78
74
|
|
79
75
|
ca->obj_type = CA_OBJ_REFER;
|
80
76
|
ca->data_type = data_type;
|
81
77
|
ca->flags = 0;
|
82
|
-
ca->
|
78
|
+
ca->ndim = ndim;
|
83
79
|
ca->bytes = bytes;
|
84
80
|
ca->elements = elements;
|
85
|
-
ca->dim = ALLOC_N(ca_size_t,
|
81
|
+
ca->dim = ALLOC_N(ca_size_t, ndim);
|
86
82
|
ca->ptr = NULL;
|
87
83
|
ca->mask = NULL;
|
88
84
|
ca->mask0 = NULL;
|
@@ -99,7 +95,7 @@ ca_refer_setup (CARefer *ca, CArray *parent,
|
|
99
95
|
ca->is_deformed = 1;
|
100
96
|
}
|
101
97
|
|
102
|
-
memcpy(ca->dim, dim,
|
98
|
+
memcpy(ca->dim, dim, ndim * sizeof(ca_size_t));
|
103
99
|
|
104
100
|
if ( ca_is_scalar(parent) ) {
|
105
101
|
ca_set_flag(ca, CA_FLAG_SCALAR);
|
@@ -110,11 +106,11 @@ ca_refer_setup (CARefer *ca, CArray *parent,
|
|
110
106
|
|
111
107
|
CARefer *
|
112
108
|
ca_refer_new (CArray *parent,
|
113
|
-
int8_t data_type, int8_t
|
109
|
+
int8_t data_type, int8_t ndim, ca_size_t *dim, ca_size_t bytes,
|
114
110
|
ca_size_t offset)
|
115
111
|
{
|
116
112
|
CARefer *ca = ALLOC(CARefer);
|
117
|
-
ca_refer_setup(ca, parent, data_type,
|
113
|
+
ca_refer_setup(ca, parent, data_type, ndim, dim, bytes, offset);
|
118
114
|
return ca;
|
119
115
|
}
|
120
116
|
|
@@ -137,7 +133,7 @@ ca_refer_func_clone (void *ap)
|
|
137
133
|
{
|
138
134
|
CARefer *ca = (CARefer *) ap;
|
139
135
|
return ca_refer_new(ca->parent,
|
140
|
-
ca->data_type, ca->
|
136
|
+
ca->data_type, ca->ndim, ca->dim, ca->bytes, ca->offset);
|
141
137
|
}
|
142
138
|
|
143
139
|
static char *
|
@@ -167,9 +163,9 @@ ca_refer_func_ptr_at_index (void *ap, ca_size_t *idx)
|
|
167
163
|
ca_size_t *dim = ca->dim;
|
168
164
|
int8_t i;
|
169
165
|
ca_size_t n;
|
170
|
-
n = idx[0]; /* n = idx[0]*dim[1]*dim[2]*...*dim[
|
171
|
-
for (i=1; i<ca->
|
172
|
-
n = dim[i]*n+idx[i]; /* ... + idx[
|
166
|
+
n = idx[0]; /* n = idx[0]*dim[1]*dim[2]*...*dim[ndim-1] */
|
167
|
+
for (i=1; i<ca->ndim; i++) { /* + idx[1]*dim[1]*dim[2]*...*dim[ndim-1] */
|
168
|
+
n = dim[i]*n+idx[i]; /* ... + idx[ndim-2]*dim[1] + idx[ndim-1] */
|
173
169
|
}
|
174
170
|
return ca->ptr + ca->bytes * n;
|
175
171
|
}
|
@@ -206,7 +202,7 @@ ca_refer_func_fetch_addr (void *ap, ca_size_t addr, void *ptr)
|
|
206
202
|
for (i=0; i<ca->ratio; i++) {
|
207
203
|
ca_fetch_addr(ca->parent,
|
208
204
|
addr * ca->ratio + i + ca->offset,
|
209
|
-
ptr + i * ca->parent->bytes);
|
205
|
+
(char *) ptr + i * ca->parent->bytes);
|
210
206
|
}
|
211
207
|
break;
|
212
208
|
}
|
@@ -222,7 +218,7 @@ ca_refer_func_fetch_index (void *ap, ca_size_t *idx, void *ptr)
|
|
222
218
|
int8_t i;
|
223
219
|
ca_size_t n;
|
224
220
|
n = idx[0];
|
225
|
-
for (i=1; i<ca->
|
221
|
+
for (i=1; i<ca->ndim; i++) {
|
226
222
|
n = dim[i]*n+idx[i];
|
227
223
|
}
|
228
224
|
ca_refer_func_fetch_addr(ca, n, ptr);
|
@@ -267,7 +263,7 @@ ca_refer_func_store_addr (void *ap, ca_size_t addr, void *ptr)
|
|
267
263
|
for (i=0; i<ca->ratio; i++) {
|
268
264
|
ca_store_addr(ca->parent,
|
269
265
|
addr * ca->ratio + i + ca->offset,
|
270
|
-
ptr + i * ca->parent->bytes);
|
266
|
+
(char *) ptr + i * ca->parent->bytes);
|
271
267
|
}
|
272
268
|
break;
|
273
269
|
}
|
@@ -283,7 +279,7 @@ ca_refer_func_store_index (void *ap, ca_size_t *idx, void *ptr)
|
|
283
279
|
int8_t i;
|
284
280
|
ca_size_t n;
|
285
281
|
n = idx[0];
|
286
|
-
for (i=1; i<ca->
|
282
|
+
for (i=1; i<ca->ndim; i++) {
|
287
283
|
n = dim[i]*n+idx[i];
|
288
284
|
}
|
289
285
|
ca_refer_func_store_addr(ca, n, ptr);
|
@@ -421,29 +417,29 @@ ca_refer_func_create_mask (void *ap)
|
|
421
417
|
if ( ca->bytes == ca->parent->bytes ) {
|
422
418
|
ca->mask =
|
423
419
|
(CArray *) ca_refer_new(ca->parent->mask,
|
424
|
-
CA_BOOLEAN, ca->
|
420
|
+
CA_BOOLEAN, ca->ndim, ca->dim, 0, ca->offset);
|
425
421
|
}
|
426
422
|
else if ( ca->is_deformed == -2 ) {
|
427
423
|
ca_size_t count[CA_RANK_MAX];
|
428
424
|
int i;
|
429
|
-
for (i=0; i<ca->parent->
|
425
|
+
for (i=0; i<ca->parent->ndim; i++) {
|
430
426
|
count[i] = 0;
|
431
427
|
}
|
432
|
-
count[ca->parent->
|
428
|
+
count[ca->parent->ndim] = ca->ratio;
|
433
429
|
ca->mask0 =
|
434
|
-
(CArray *) ca_repeat_new(ca->parent->mask, ca->parent->
|
430
|
+
(CArray *) ca_repeat_new(ca->parent->mask, ca->parent->ndim+1, count);
|
435
431
|
ca_unset_flag(ca->mask0, CA_FLAG_READ_ONLY);
|
436
432
|
|
437
433
|
ca->mask =
|
438
434
|
(CArray *) ca_refer_new(ca->mask0,
|
439
|
-
CA_BOOLEAN, ca->
|
435
|
+
CA_BOOLEAN, ca->ndim, ca->dim, 0, ca->offset);
|
440
436
|
}
|
441
437
|
else if ( ca->is_deformed == 2 ) {
|
442
438
|
/* TODO */
|
443
439
|
ca->mask0 =
|
444
440
|
(CArray *) ca_reduce_new(ca->parent->mask, ca->ratio, ca->offset);
|
445
441
|
ca->mask =
|
446
|
-
(CArray *) ca_refer_new(ca->mask0, CA_BOOLEAN, ca->
|
442
|
+
(CArray *) ca_refer_new(ca->mask0, CA_BOOLEAN, ca->ndim, ca->dim, 0, 0);
|
447
443
|
}
|
448
444
|
}
|
449
445
|
|
@@ -485,13 +481,13 @@ rb_ca_refer_initialize_copy (VALUE self, VALUE other)
|
|
485
481
|
Data_Get_Struct(self, CARefer, ca);
|
486
482
|
Data_Get_Struct(other, CARefer, cs);
|
487
483
|
|
488
|
-
ca_refer_setup(ca, cs->parent, cs->data_type, cs->
|
484
|
+
ca_refer_setup(ca, cs->parent, cs->data_type, cs->ndim, cs->dim,
|
489
485
|
cs->bytes, cs->offset);
|
490
486
|
|
491
487
|
return self;
|
492
488
|
}
|
493
489
|
|
494
|
-
/*
|
490
|
+
/* yard:
|
495
491
|
class CArray
|
496
492
|
# call-seq:
|
497
493
|
# CArray.refer()
|
@@ -514,7 +510,7 @@ rb_ca_refer (int argc, VALUE *argv, VALUE self)
|
|
514
510
|
CArray *ca;
|
515
511
|
CARefer *cr;
|
516
512
|
int8_t data_type;
|
517
|
-
int8_t
|
513
|
+
int8_t ndim;
|
518
514
|
ca_size_t dim[CA_RANK_MAX];
|
519
515
|
ca_size_t bytes, offset = 0;
|
520
516
|
int8_t i;
|
@@ -524,11 +520,11 @@ rb_ca_refer (int argc, VALUE *argv, VALUE self)
|
|
524
520
|
if ( argc == 0 ) { /* CArray#refer() */
|
525
521
|
data_type = ca->data_type;
|
526
522
|
bytes = ca->bytes;
|
527
|
-
|
528
|
-
for (i=0; i<
|
523
|
+
ndim = ca->ndim;
|
524
|
+
for (i=0; i<ndim; i++) {
|
529
525
|
dim[i] = ca->dim[i];
|
530
526
|
}
|
531
|
-
cr = ca_refer_new((CArray*)ca, data_type,
|
527
|
+
cr = ca_refer_new((CArray*)ca, data_type, ndim, dim, bytes, offset);
|
532
528
|
obj = ca_wrap_struct(cr);
|
533
529
|
rb_ca_set_parent(obj, self);
|
534
530
|
rb_ca_data_type_inherit(obj, self);
|
@@ -558,10 +554,10 @@ rb_ca_refer (int argc, VALUE *argv, VALUE self)
|
|
558
554
|
}
|
559
555
|
|
560
556
|
Check_Type(rdim, T_ARRAY);
|
561
|
-
|
557
|
+
ndim = RARRAY_LEN(rdim);
|
562
558
|
|
563
559
|
elements = 1;
|
564
|
-
for (i=0; i<
|
560
|
+
for (i=0; i<ndim; i++) {
|
565
561
|
dim[i] = NUM2SIZE(rb_ary_entry(rdim, i));
|
566
562
|
elements *= dim[i];
|
567
563
|
}
|
@@ -570,7 +566,7 @@ rb_ca_refer (int argc, VALUE *argv, VALUE self)
|
|
570
566
|
offset = NUM2SIZE(roffset);
|
571
567
|
}
|
572
568
|
|
573
|
-
cr = ca_refer_new((CArray*)ca, data_type,
|
569
|
+
cr = ca_refer_new((CArray*)ca, data_type, ndim, dim, bytes, offset);
|
574
570
|
obj = ca_wrap_struct(cr);
|
575
571
|
rb_ca_set_parent(obj, self);
|
576
572
|
rb_ca_data_type_import(obj, rtype);
|
@@ -584,7 +580,7 @@ rb_ca_refer (int argc, VALUE *argv, VALUE self)
|
|
584
580
|
|
585
581
|
VALUE
|
586
582
|
rb_ca_refer_new (VALUE self,
|
587
|
-
int8_t data_type, int8_t
|
583
|
+
int8_t data_type, int8_t ndim, ca_size_t *dim, ca_size_t bytes,
|
588
584
|
ca_size_t offset)
|
589
585
|
{
|
590
586
|
volatile VALUE list, rdim, ropt;
|
@@ -593,8 +589,8 @@ rb_ca_refer_new (VALUE self,
|
|
593
589
|
|
594
590
|
Data_Get_Struct(self, CArray, ca);
|
595
591
|
|
596
|
-
rdim = rb_ary_new2(
|
597
|
-
for (i=0; i<
|
592
|
+
rdim = rb_ary_new2(ndim);
|
593
|
+
for (i=0; i<ndim; i++) {
|
598
594
|
rb_ary_store(rdim, i, SIZE2NUM(dim[i]));
|
599
595
|
}
|
600
596
|
|
@@ -3,10 +3,8 @@
|
|
3
3
|
ca_obj_repeat.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
|
|
@@ -14,22 +12,22 @@
|
|
14
12
|
|
15
13
|
VALUE rb_cCARepeat;
|
16
14
|
|
17
|
-
/*
|
15
|
+
/* yard:
|
18
16
|
class CARepeat < CAVirtual # :nodoc:
|
19
17
|
end
|
20
18
|
*/
|
21
19
|
|
22
20
|
int
|
23
|
-
ca_repeat_setup (CARepeat *ca, CArray *parent, int8_t
|
21
|
+
ca_repeat_setup (CARepeat *ca, CArray *parent, int8_t ndim, ca_size_t *count)
|
24
22
|
{
|
25
23
|
int8_t data_type;
|
26
24
|
ca_size_t elements, bytes, nrpt, repeat_level, repeat_num,
|
27
|
-
contig_level, contig_num,
|
25
|
+
contig_level, contig_num, data_ndim;
|
28
26
|
int i, j;
|
29
27
|
|
30
28
|
nrpt = 1;
|
31
|
-
|
32
|
-
for (i=0; i<
|
29
|
+
data_ndim = 0;
|
30
|
+
for (i=0; i<ndim; i++) {
|
33
31
|
if ( count[i] < 0 ) {
|
34
32
|
rb_raise(rb_eRuntimeError,
|
35
33
|
"negative size for %i-th dimension specified", i);
|
@@ -39,27 +37,27 @@ ca_repeat_setup (CARepeat *ca, CArray *parent, int8_t rank, ca_size_t *count)
|
|
39
37
|
nrpt *= count[i];
|
40
38
|
}
|
41
39
|
else {
|
42
|
-
|
40
|
+
data_ndim += 1;
|
43
41
|
}
|
44
42
|
}
|
45
43
|
|
46
44
|
repeat_level = 0;
|
47
45
|
repeat_num = 1;
|
48
|
-
for (i=0; i<
|
46
|
+
for (i=0; i<ndim && count[i]; i++) {
|
49
47
|
repeat_level = i+1;
|
50
48
|
repeat_num *= count[i];
|
51
49
|
}
|
52
50
|
|
53
|
-
contig_level =
|
51
|
+
contig_level = ndim-1;
|
54
52
|
contig_num = 1;
|
55
|
-
for (i=
|
53
|
+
for (i=ndim-1; i >= 0 && count[i]; i--) {
|
56
54
|
contig_level = i;
|
57
55
|
contig_num *= count[i];
|
58
56
|
}
|
59
57
|
|
60
|
-
if (
|
58
|
+
if ( data_ndim != parent->ndim ) {
|
61
59
|
rb_raise(rb_eRuntimeError,
|
62
|
-
"mismatch in
|
60
|
+
"mismatch in ndim between original array and determined by # of dummies");
|
63
61
|
}
|
64
62
|
|
65
63
|
if ( ((double) parent->elements) * nrpt > CA_LENGTH_MAX ) {
|
@@ -73,24 +71,24 @@ ca_repeat_setup (CARepeat *ca, CArray *parent, int8_t rank, ca_size_t *count)
|
|
73
71
|
ca->obj_type = CA_OBJ_REPEAT;
|
74
72
|
ca->data_type = data_type;
|
75
73
|
ca->flags = 0;
|
76
|
-
ca->
|
74
|
+
ca->ndim = ndim;
|
77
75
|
ca->bytes = bytes;
|
78
76
|
ca->elements = elements;
|
79
77
|
ca->ptr = NULL;
|
80
78
|
ca->mask = NULL;
|
81
|
-
ca->dim = ALLOC_N(ca_size_t,
|
79
|
+
ca->dim = ALLOC_N(ca_size_t, ndim);
|
82
80
|
|
83
81
|
ca->parent = parent;
|
84
82
|
ca->attach = 0;
|
85
83
|
ca->nosync = 0;
|
86
|
-
ca->count = ALLOC_N(ca_size_t,
|
84
|
+
ca->count = ALLOC_N(ca_size_t, ndim);
|
87
85
|
ca->repeat_level = repeat_level;
|
88
86
|
ca->repeat_num = repeat_num;
|
89
87
|
ca->contig_level = contig_level;
|
90
88
|
ca->contig_num = contig_num;
|
91
89
|
|
92
90
|
j = 0;
|
93
|
-
for (i=0; i<
|
91
|
+
for (i=0; i<ndim; i++) {
|
94
92
|
if ( count[i] ) {
|
95
93
|
ca->dim[i] = count[i];
|
96
94
|
}
|
@@ -99,7 +97,7 @@ ca_repeat_setup (CARepeat *ca, CArray *parent, int8_t rank, ca_size_t *count)
|
|
99
97
|
}
|
100
98
|
}
|
101
99
|
|
102
|
-
memcpy(ca->count, count,
|
100
|
+
memcpy(ca->count, count, ndim * sizeof(ca_size_t));
|
103
101
|
|
104
102
|
ca_set_flag(ca, CA_FLAG_READ_ONLY);
|
105
103
|
|
@@ -112,10 +110,10 @@ ca_repeat_setup (CARepeat *ca, CArray *parent, int8_t rank, ca_size_t *count)
|
|
112
110
|
|
113
111
|
|
114
112
|
CARepeat *
|
115
|
-
ca_repeat_new (CArray *parent, int8_t
|
113
|
+
ca_repeat_new (CArray *parent, int8_t ndim, ca_size_t *count)
|
116
114
|
{
|
117
115
|
CARepeat *ca = ALLOC(CARepeat);
|
118
|
-
ca_repeat_setup(ca, parent,
|
116
|
+
ca_repeat_setup(ca, parent, ndim, count);
|
119
117
|
return ca;
|
120
118
|
}
|
121
119
|
|
@@ -141,7 +139,7 @@ static void *
|
|
141
139
|
ca_repeat_func_clone (void *ap)
|
142
140
|
{
|
143
141
|
CARepeat *ca = (CARepeat *) ap;
|
144
|
-
return ca_repeat_new(ca->parent, ca->
|
142
|
+
return ca_repeat_new(ca->parent, ca->ndim, ca->count);
|
145
143
|
}
|
146
144
|
|
147
145
|
static char *
|
@@ -173,7 +171,7 @@ ca_repeat_func_ptr_at_index (void *ap, ca_size_t *idx)
|
|
173
171
|
|
174
172
|
j = 0;
|
175
173
|
n = 0;
|
176
|
-
for (i=0; i<ca->
|
174
|
+
for (i=0; i<ca->ndim; i++) {
|
177
175
|
if ( ! count[i] ) {
|
178
176
|
n = dim0[j]*n + idx[i];
|
179
177
|
j++;
|
@@ -199,7 +197,7 @@ ca_repeat_func_fetch_index (void *ap, ca_size_t *idx, void *ptr)
|
|
199
197
|
ca_size_t n, j;
|
200
198
|
j = 0;
|
201
199
|
n = 0;
|
202
|
-
for (i=0; i<ca->
|
200
|
+
for (i=0; i<ca->ndim; i++) {
|
203
201
|
if ( ! count[i] ) {
|
204
202
|
idx0[j++] = idx[i];
|
205
203
|
}
|
@@ -217,7 +215,7 @@ ca_repeat_func_store_index (void *ap, ca_size_t *idx, void *ptr)
|
|
217
215
|
ca_size_t n, j;
|
218
216
|
j = 0;
|
219
217
|
n = 0;
|
220
|
-
for (i=0; i<ca->
|
218
|
+
for (i=0; i<ca->ndim; i++) {
|
221
219
|
if ( ! count[i] ) {
|
222
220
|
idx0[j++] = idx[i];
|
223
221
|
}
|
@@ -305,7 +303,7 @@ ca_repeat_func_create_mask (void *ap)
|
|
305
303
|
ca_create_mask(ca->parent);
|
306
304
|
}
|
307
305
|
ca->mask =
|
308
|
-
(CArray *) ca_repeat_new(ca->parent->mask, ca->
|
306
|
+
(CArray *) ca_repeat_new(ca->parent->mask, ca->ndim, ca->count);
|
309
307
|
}
|
310
308
|
|
311
309
|
ca_operation_function_t ca_repeat_func = {
|
@@ -410,7 +408,7 @@ ca_repeat_attach (CARepeat *ca)
|
|
410
408
|
ca_size_t i;
|
411
409
|
char *dp, *sp;
|
412
410
|
|
413
|
-
for (i=0; i<ca->
|
411
|
+
for (i=0; i<ca->ndim; i++) {
|
414
412
|
idx[i] = 0;
|
415
413
|
idx0[i] = 0;
|
416
414
|
}
|
@@ -459,7 +457,7 @@ ca_repeat_sync (CARepeat *ca)
|
|
459
457
|
ca_size_t idx[CA_RANK_MAX];
|
460
458
|
ca_size_t idx0[CA_RANK_MAX];
|
461
459
|
int8_t i;
|
462
|
-
for (i=0; i<ca->
|
460
|
+
for (i=0; i<ca->ndim; i++) {
|
463
461
|
idx[i] = 0;
|
464
462
|
idx0[i] = 0;
|
465
463
|
}
|
@@ -475,14 +473,14 @@ ca_repeat_fill (CARepeat *ca, char *ptr)
|
|
475
473
|
/* ------------------------------------------------------------------- */
|
476
474
|
|
477
475
|
VALUE
|
478
|
-
rb_ca_repeat_new (VALUE cary, int8_t
|
476
|
+
rb_ca_repeat_new (VALUE cary, int8_t ndim, ca_size_t *count)
|
479
477
|
{
|
480
478
|
volatile VALUE obj;
|
481
479
|
CArray *parent;
|
482
480
|
CARepeat *ca;
|
483
481
|
rb_check_carray_object(cary);
|
484
482
|
Data_Get_Struct(cary, CArray, parent);
|
485
|
-
ca = ca_repeat_new(parent,
|
483
|
+
ca = ca_repeat_new(parent, ndim, count);
|
486
484
|
obj = ca_wrap_struct(ca);
|
487
485
|
rb_ca_set_parent(obj, cary);
|
488
486
|
rb_ca_data_type_inherit(obj, cary);
|
@@ -507,7 +505,7 @@ rb_ca_repeat (int argc, VALUE *argv, VALUE self)
|
|
507
505
|
) ) {
|
508
506
|
volatile VALUE args;
|
509
507
|
CArray *ct;
|
510
|
-
ca_size_t
|
508
|
+
ca_size_t ndim, dim[CA_RANK_MAX];
|
511
509
|
int k;
|
512
510
|
if ( argv[0] == ID2SYM(rb_intern("%") ) ) {
|
513
511
|
Data_Get_Struct(argv[1], CArray, ct);
|
@@ -515,34 +513,34 @@ rb_ca_repeat (int argc, VALUE *argv, VALUE self)
|
|
515
513
|
else {
|
516
514
|
Data_Get_Struct(argv[0], CArray, ct);
|
517
515
|
}
|
518
|
-
if ( ct->
|
519
|
-
rb_raise(rb_eRuntimeError, "invalid
|
516
|
+
if ( ct->ndim < ca->ndim ) {
|
517
|
+
rb_raise(rb_eRuntimeError, "invalid ndim to template");
|
520
518
|
}
|
521
519
|
args = rb_ary_new();
|
522
|
-
|
520
|
+
ndim = 0;
|
523
521
|
if ( argv[0] == ID2SYM(rb_intern("%") ) ) {
|
524
522
|
k = 0;
|
525
|
-
for (i=0; i<ct->
|
523
|
+
for (i=0; i<ct->ndim; i++) {
|
526
524
|
if ( ca->dim[k] == 1 ) {
|
527
525
|
rb_ary_push(args, SIZE2NUM(ct->dim[i]));
|
528
526
|
k++;
|
529
527
|
}
|
530
528
|
else if ( ct->dim[i] == ca->dim[k] ) {
|
531
529
|
rb_ary_push(args, ID2SYM(rb_intern("%")));
|
532
|
-
dim[
|
533
|
-
k++;
|
530
|
+
dim[ndim] = ca->dim[k];
|
531
|
+
k++; ndim++;
|
534
532
|
}
|
535
533
|
else {
|
536
534
|
rb_ary_push(args, SIZE2NUM(ct->dim[i]));
|
537
535
|
}
|
538
536
|
}
|
539
|
-
if (
|
540
|
-
self = rb_ca_refer_new(self, ca->data_type,
|
537
|
+
if ( ndim != ca->ndim ) {
|
538
|
+
self = rb_ca_refer_new(self, ca->data_type, ndim, dim, ca->bytes, 0);
|
541
539
|
}
|
542
540
|
}
|
543
541
|
else {
|
544
|
-
k = ca->
|
545
|
-
for (i=ct->
|
542
|
+
k = ca->ndim - 1;
|
543
|
+
for (i=ct->ndim-1; i>=0; i--) {
|
546
544
|
if ( ca->dim[k] == 1 ) {
|
547
545
|
rb_ary_unshift(args, SIZE2NUM(ct->dim[i]));
|
548
546
|
k--;
|
@@ -556,14 +554,14 @@ rb_ca_repeat (int argc, VALUE *argv, VALUE self)
|
|
556
554
|
}
|
557
555
|
}
|
558
556
|
if ( k != 0 ) {
|
559
|
-
|
560
|
-
for (i=0; i<ca->
|
557
|
+
ndim = 0;
|
558
|
+
for (i=0; i<ca->ndim; i++) {
|
561
559
|
if ( ca->dim[i] != 1 ) {
|
562
|
-
dim[
|
563
|
-
|
560
|
+
dim[ndim] = ca->dim[i];
|
561
|
+
ndim++;
|
564
562
|
}
|
565
563
|
}
|
566
|
-
self = rb_ca_refer_new(self, ca->data_type,
|
564
|
+
self = rb_ca_refer_new(self, ca->data_type, ndim, dim, ca->bytes, 0);
|
567
565
|
}
|
568
566
|
}
|
569
567
|
return rb_ca_repeat((int)RARRAY_LEN(args), RARRAY_PTR(args), self);
|
@@ -625,7 +623,7 @@ rb_ca_repeat_initialize_copy (VALUE self, VALUE other)
|
|
625
623
|
Data_Get_Struct(self, CARepeat, ca);
|
626
624
|
Data_Get_Struct(other, CARepeat, cs);
|
627
625
|
|
628
|
-
ca_repeat_setup(ca, cs->parent, cs->
|
626
|
+
ca_repeat_setup(ca, cs->parent, cs->ndim, cs->count);
|
629
627
|
|
630
628
|
return self;
|
631
629
|
}
|