carray 1.5.1 → 1.5.6
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/{LICENSES → LICENSE} +0 -0
- data/NEWS.md +83 -0
- data/README.md +34 -18
- data/Rakefile +1 -1
- data/TODO.md +17 -0
- data/carray.gemspec +10 -7
- data/ext/ca_iter_block.c +3 -5
- data/ext/ca_iter_dimension.c +4 -5
- data/ext/ca_iter_window.c +2 -4
- data/ext/ca_obj_array.c +394 -124
- data/ext/ca_obj_bitarray.c +6 -11
- data/ext/ca_obj_bitfield.c +5 -9
- data/ext/ca_obj_block.c +5 -12
- data/ext/ca_obj_fake.c +3 -5
- data/ext/ca_obj_farray.c +3 -5
- data/ext/ca_obj_field.c +15 -17
- data/ext/ca_obj_grid.c +5 -6
- data/ext/ca_obj_mapping.c +2 -4
- data/ext/ca_obj_object.c +3 -5
- data/ext/ca_obj_reduce.c +2 -4
- data/ext/ca_obj_refer.c +11 -15
- data/ext/ca_obj_repeat.c +2 -4
- data/ext/ca_obj_select.c +2 -4
- data/ext/ca_obj_shift.c +3 -5
- data/ext/ca_obj_transpose.c +3 -5
- data/ext/ca_obj_unbound_repeat.c +68 -122
- data/ext/ca_obj_window.c +7 -9
- data/ext/carray.h +17 -8
- data/ext/carray_access.c +183 -58
- data/ext/carray_attribute.c +151 -197
- data/ext/carray_call_cfunc.c +1 -3
- data/ext/carray_cast.c +345 -144
- data/ext/carray_cast_func.rb +1 -2
- data/ext/carray_class.c +28 -36
- data/ext/carray_conversion.c +56 -59
- data/ext/carray_copy.c +16 -32
- data/ext/carray_core.c +73 -60
- data/ext/carray_element.c +25 -44
- data/ext/carray_generate.c +74 -53
- data/ext/carray_iterator.c +13 -15
- data/ext/carray_loop.c +53 -82
- data/ext/carray_mask.c +99 -119
- data/ext/carray_math.rb +28 -12
- data/ext/carray_mathfunc.c +1 -3
- data/ext/carray_numeric.c +42 -45
- data/ext/carray_operator.c +45 -32
- data/ext/carray_order.c +231 -65
- data/ext/carray_sort_addr.c +14 -21
- data/ext/carray_stat.c +1 -3
- data/ext/carray_stat_proc.rb +2 -4
- data/ext/carray_test.c +41 -30
- data/ext/carray_undef.c +1 -11
- data/ext/carray_utils.c +138 -51
- data/ext/extconf.rb +14 -2
- data/ext/mkmath.rb +2 -2
- data/ext/ruby_carray.c +15 -7
- data/ext/ruby_ccomplex.c +2 -4
- data/ext/ruby_float_func.c +1 -3
- data/ext/version.h +5 -7
- data/lib/carray.rb +9 -9
- data/lib/carray/autoload.rb +0 -2
- data/lib/carray/autoload/autoload_gem_numo_narray.rb +6 -6
- data/lib/carray/basic.rb +1 -3
- data/lib/carray/broadcast.rb +101 -0
- data/lib/carray/compose.rb +34 -10
- data/lib/carray/construct.rb +57 -18
- data/lib/carray/info.rb +1 -3
- data/lib/carray/inspect.rb +3 -5
- data/lib/carray/io/imagemagick.rb +1 -3
- data/lib/carray/iterator.rb +3 -3
- data/lib/carray/mask.rb +18 -7
- data/lib/carray/math.rb +4 -6
- data/lib/carray/math/histogram.rb +1 -3
- data/lib/carray/math/recurrence.rb +1 -3
- data/lib/carray/mkmf.rb +1 -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 +1 -3
- data/lib/carray/obsolete.rb +1 -17
- data/lib/carray/ordering.rb +29 -5
- data/lib/carray/serialize.rb +34 -25
- data/lib/carray/string.rb +1 -3
- data/lib/carray/struct.rb +3 -5
- data/lib/carray/testing.rb +5 -10
- data/lib/carray/time.rb +1 -3
- data/lib/carray/transform.rb +12 -3
- data/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
- metadata +74 -58
- 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 -49
- 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_order.rb +0 -147
- data/test/test_ref_store.rb +0 -211
- data/test/test_stat.rb +0 -406
- data/test/test_struct.rb +0 -72
- data/test/test_virtual.rb +0 -49
data/ext/ca_obj_repeat.c
CHANGED
@@ -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,7 +12,7 @@
|
|
14
12
|
|
15
13
|
VALUE rb_cCARepeat;
|
16
14
|
|
17
|
-
/*
|
15
|
+
/* yard:
|
18
16
|
class CARepeat < CAVirtual # :nodoc:
|
19
17
|
end
|
20
18
|
*/
|
data/ext/ca_obj_select.c
CHANGED
@@ -3,10 +3,8 @@
|
|
3
3
|
ca_obj_select.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,7 +12,7 @@
|
|
14
12
|
|
15
13
|
VALUE rb_cCASelect;
|
16
14
|
|
17
|
-
/*
|
15
|
+
/* yard:
|
18
16
|
class CASelect < CAVirtual # :nodoc:
|
19
17
|
end
|
20
18
|
*/
|
data/ext/ca_obj_shift.c
CHANGED
@@ -3,16 +3,14 @@
|
|
3
3
|
ca_obj_shift.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 CAShift < CAVirtual # :nodoc:
|
17
15
|
end
|
18
16
|
*/
|
@@ -828,7 +826,7 @@ rb_ca_shift_new (VALUE cary, ca_size_t *shift, char *fill, int8_t *roll)
|
|
828
826
|
return obj;
|
829
827
|
}
|
830
828
|
|
831
|
-
/*
|
829
|
+
/* yard:
|
832
830
|
class CArray
|
833
831
|
def shifted
|
834
832
|
end
|
data/ext/ca_obj_transpose.c
CHANGED
@@ -3,10 +3,8 @@
|
|
3
3
|
ca_obj_transpose.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
|
|
@@ -34,7 +32,7 @@ static int8_t CA_OBJ_TRANSPOSE;
|
|
34
32
|
|
35
33
|
static VALUE rb_cCATrans;
|
36
34
|
|
37
|
-
/*
|
35
|
+
/* yard:
|
38
36
|
class CATranspose < CAVirtual # :nodoc:
|
39
37
|
end
|
40
38
|
*/
|
@@ -511,7 +509,7 @@ rb_ca_trans_new (VALUE cary, ca_size_t *imap)
|
|
511
509
|
return obj;
|
512
510
|
}
|
513
511
|
|
514
|
-
/*
|
512
|
+
/* yard:
|
515
513
|
class CArray
|
516
514
|
def transposed
|
517
515
|
end
|
data/ext/ca_obj_unbound_repeat.c
CHANGED
@@ -3,10 +3,8 @@
|
|
3
3
|
ca_obj_unbound_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,7 +12,7 @@
|
|
14
12
|
|
15
13
|
VALUE rb_cCAUnboundRepeat;
|
16
14
|
|
17
|
-
/*
|
15
|
+
/* yard:
|
18
16
|
class CAUnboundRepeat < CArray
|
19
17
|
end
|
20
18
|
*/
|
@@ -23,8 +21,9 @@ int
|
|
23
21
|
ca_ubrep_setup (CAUnboundRepeat *ca, CArray *parent,
|
24
22
|
int32_t rep_ndim, ca_size_t *rep_dim)
|
25
23
|
{
|
26
|
-
int8_t data_type
|
24
|
+
int8_t data_type;
|
27
25
|
ca_size_t bytes, elements;
|
26
|
+
int8_t i;
|
28
27
|
|
29
28
|
/* check arguments */
|
30
29
|
|
@@ -32,18 +31,17 @@ ca_ubrep_setup (CAUnboundRepeat *ca, CArray *parent,
|
|
32
31
|
|
33
32
|
data_type = parent->data_type;
|
34
33
|
bytes = parent->bytes;
|
35
|
-
ndim = parent->ndim;
|
36
34
|
elements = parent->elements;
|
37
35
|
|
38
36
|
ca->obj_type = CA_OBJ_UNBOUND_REPEAT;
|
39
37
|
ca->data_type = data_type;
|
40
38
|
ca->flags = 0;
|
41
|
-
ca->ndim =
|
39
|
+
ca->ndim = rep_ndim;
|
42
40
|
ca->bytes = bytes;
|
43
41
|
ca->elements = elements;
|
44
42
|
ca->ptr = NULL;
|
45
43
|
ca->mask = NULL;
|
46
|
-
ca->dim = ALLOC_N(ca_size_t,
|
44
|
+
ca->dim = ALLOC_N(ca_size_t, rep_ndim);
|
47
45
|
|
48
46
|
ca->parent = parent;
|
49
47
|
ca->attach = 0;
|
@@ -52,8 +50,10 @@ ca_ubrep_setup (CAUnboundRepeat *ca, CArray *parent,
|
|
52
50
|
ca->rep_ndim = rep_ndim;
|
53
51
|
ca->rep_dim = ALLOC_N(ca_size_t, rep_ndim);
|
54
52
|
|
55
|
-
|
56
|
-
|
53
|
+
for (i=0; i<rep_ndim; i++) {
|
54
|
+
ca->rep_dim[i] = rep_dim[i];
|
55
|
+
ca->dim[i] = ( rep_dim[i] ) ? rep_dim[i] : 1;
|
56
|
+
}
|
57
57
|
|
58
58
|
if ( ca_has_mask(parent) ) {
|
59
59
|
ca_create_mask(ca);
|
@@ -98,13 +98,6 @@ ca_ubrep_func_ptr_at_addr (void *ap, ca_size_t addr)
|
|
98
98
|
return ca_ptr_at_addr(ca->parent, addr);
|
99
99
|
}
|
100
100
|
|
101
|
-
static char *
|
102
|
-
ca_ubrep_func_ptr_at_index (void *ap, ca_size_t *idx)
|
103
|
-
{
|
104
|
-
CAUnboundRepeat *ca = (CAUnboundRepeat *) ap;
|
105
|
-
return ca_ptr_at_index(ca->parent, idx);
|
106
|
-
}
|
107
|
-
|
108
101
|
static void
|
109
102
|
ca_ubrep_func_fetch_addr (void *ap, ca_size_t addr, void *ptr)
|
110
103
|
{
|
@@ -112,13 +105,6 @@ ca_ubrep_func_fetch_addr (void *ap, ca_size_t addr, void *ptr)
|
|
112
105
|
ca_fetch_addr(ca->parent, addr, ptr);
|
113
106
|
}
|
114
107
|
|
115
|
-
static void
|
116
|
-
ca_ubrep_func_fetch_index (void *ap, ca_size_t *idx, void *ptr)
|
117
|
-
{
|
118
|
-
CAUnboundRepeat *ca = (CAUnboundRepeat *) ap;
|
119
|
-
ca_fetch_index(ca->parent, idx, ptr);
|
120
|
-
}
|
121
|
-
|
122
108
|
static void
|
123
109
|
ca_ubrep_func_store_addr (void *ap, ca_size_t addr, void *ptr)
|
124
110
|
{
|
@@ -126,13 +112,6 @@ ca_ubrep_func_store_addr (void *ap, ca_size_t addr, void *ptr)
|
|
126
112
|
ca_store_addr(ca->parent, addr, ptr);
|
127
113
|
}
|
128
114
|
|
129
|
-
static void
|
130
|
-
ca_ubrep_func_store_index (void *ap, ca_size_t *idx, void *ptr)
|
131
|
-
{
|
132
|
-
CAUnboundRepeat *ca = (CAUnboundRepeat *) ap;
|
133
|
-
ca_store_index(ca->parent, idx, ptr);
|
134
|
-
}
|
135
|
-
|
136
115
|
static void
|
137
116
|
ca_ubrep_func_allocate (void *ap)
|
138
117
|
{
|
@@ -221,11 +200,11 @@ ca_operation_function_t ca_ubrep_func = {
|
|
221
200
|
free_ca_ubrep,
|
222
201
|
ca_ubrep_func_clone,
|
223
202
|
ca_ubrep_func_ptr_at_addr,
|
224
|
-
|
203
|
+
NULL,
|
225
204
|
ca_ubrep_func_fetch_addr,
|
226
|
-
|
205
|
+
NULL,
|
227
206
|
ca_ubrep_func_store_addr,
|
228
|
-
|
207
|
+
NULL,
|
229
208
|
ca_ubrep_func_allocate,
|
230
209
|
ca_ubrep_func_attach,
|
231
210
|
ca_ubrep_func_sync,
|
@@ -238,6 +217,36 @@ ca_operation_function_t ca_ubrep_func = {
|
|
238
217
|
|
239
218
|
/* ------------------------------------------------------------------- */
|
240
219
|
|
220
|
+
VALUE
|
221
|
+
rb_ca_ubrep_shave (VALUE self, VALUE other)
|
222
|
+
{
|
223
|
+
CAUnboundRepeat *ca;
|
224
|
+
CArray *co;
|
225
|
+
int8_t ndim, i;
|
226
|
+
ca_size_t dim[CA_RANK_MAX];
|
227
|
+
|
228
|
+
rb_check_carray_object(self);
|
229
|
+
rb_check_carray_object(other);
|
230
|
+
|
231
|
+
Data_Get_Struct(self, CAUnboundRepeat, ca);
|
232
|
+
Data_Get_Struct(other, CArray, co);
|
233
|
+
|
234
|
+
if ( ca->elements != co->elements ) {
|
235
|
+
rb_raise(rb_eRuntimeError, "mismatch in # of elements");
|
236
|
+
}
|
237
|
+
|
238
|
+
ndim = 0;
|
239
|
+
for (i=0; i<ca->ndim; i++) {
|
240
|
+
if ( ca->rep_dim[i] ) {
|
241
|
+
dim[ndim] = ca->rep_dim[i];
|
242
|
+
ndim += 1;
|
243
|
+
}
|
244
|
+
}
|
245
|
+
|
246
|
+
return rb_ca_refer_new(other, co->data_type, ndim, dim, co->bytes, 0);
|
247
|
+
}
|
248
|
+
|
249
|
+
|
241
250
|
VALUE
|
242
251
|
rb_ca_ubrep_new (VALUE cary, int32_t rep_ndim, ca_size_t *rep_dim)
|
243
252
|
{
|
@@ -257,80 +266,23 @@ VALUE
|
|
257
266
|
rb_ca_unbound_repeat (int argc, VALUE *argv, VALUE self)
|
258
267
|
{
|
259
268
|
CArray *ca;
|
260
|
-
|
269
|
+
int8_t ndim;
|
270
|
+
ca_size_t dim[CA_RANK_MAX];
|
261
271
|
int32_t rep_ndim;
|
262
272
|
ca_size_t rep_dim[CA_RANK_MAX];
|
263
|
-
ca_size_t count, i;
|
273
|
+
ca_size_t elements, count, i;
|
264
274
|
|
265
275
|
Data_Get_Struct(self, CArray, ca);
|
266
276
|
|
267
|
-
if ( argc == 1 && argv[0] == ID2SYM(rb_intern("*")) ) {
|
268
|
-
CAUnboundRepeat *cr = (CAUnboundRepeat *) ca;
|
269
|
-
volatile VALUE args;
|
270
|
-
int repeatable = 0;
|
271
|
-
args = rb_ary_new();
|
272
|
-
if ( rb_obj_is_kind_of(self, rb_cCAUnboundRepeat) ) {
|
273
|
-
repeatable = 1;
|
274
|
-
for (i=0; i<cr->rep_ndim; i++) {
|
275
|
-
if ( cr->rep_dim[i] == 1 ) {
|
276
|
-
rb_ary_push(args, ID2SYM(rb_intern("*")));
|
277
|
-
repeatable = 1;
|
278
|
-
}
|
279
|
-
else if ( cr->rep_dim[i] > 1 ) {
|
280
|
-
rb_ary_push(args, Qnil);
|
281
|
-
}
|
282
|
-
else {
|
283
|
-
rb_ary_push(args, ID2SYM(rb_intern("*")));
|
284
|
-
}
|
285
|
-
}
|
286
|
-
}
|
287
|
-
else {
|
288
|
-
for (i=0; i<ca->ndim; i++) {
|
289
|
-
if ( ca->dim[i] == 1 ) {
|
290
|
-
rb_ary_push(args, ID2SYM(rb_intern("*")));
|
291
|
-
repeatable = 1;
|
292
|
-
}
|
293
|
-
else {
|
294
|
-
rb_ary_push(args, Qnil);
|
295
|
-
}
|
296
|
-
}
|
297
|
-
}
|
298
|
-
if ( ! repeatable ) {
|
299
|
-
return self;
|
300
|
-
}
|
301
|
-
else {
|
302
|
-
return rb_ca_unbound_repeat((int)RARRAY_LEN(args), RARRAY_PTR(args), self);
|
303
|
-
}
|
304
|
-
}
|
305
|
-
else if ( argc == 2 &&
|
306
|
-
argv[0] == ID2SYM(rb_intern("*")) &&
|
307
|
-
rb_obj_is_carray(argv[1]) ) {
|
308
|
-
volatile VALUE args, obj;
|
309
|
-
args = ID2SYM(rb_intern("*"));
|
310
|
-
obj = rb_ca_unbound_repeat(1, (VALUE*)&args, self);
|
311
|
-
return ca_ubrep_bind_with(obj, argv[1]);
|
312
|
-
}
|
313
|
-
else if ( argc == 2 &&
|
314
|
-
argv[1] == ID2SYM(rb_intern("*")) &&
|
315
|
-
rb_obj_is_carray(argv[0]) ) {
|
316
|
-
volatile VALUE args, obj;
|
317
|
-
args = ID2SYM(rb_intern("*"));
|
318
|
-
obj = rb_ca_unbound_repeat(1, (VALUE*)&args, self);
|
319
|
-
return ca_ubrep_bind_with(obj, argv[0]);
|
320
|
-
}
|
321
|
-
|
322
277
|
rep_ndim = argc;
|
323
278
|
|
324
279
|
count = 0;
|
325
|
-
ndim
|
326
|
-
|
280
|
+
ndim = 0;
|
281
|
+
elements = 1;
|
327
282
|
for (i=0; i<rep_ndim; i++) {
|
328
|
-
if (
|
283
|
+
if ( TYPE(argv[i]) == T_SYMBOL ) {
|
329
284
|
if ( argv[i] == ID2SYM(rb_intern("*")) ) {
|
330
285
|
rep_dim[i] = 0;
|
331
|
-
if ( ca->dim[count] == 1 ) {
|
332
|
-
count++;
|
333
|
-
}
|
334
286
|
}
|
335
287
|
else {
|
336
288
|
rb_raise(rb_eArgError, "unknown symbol (!= ':*') in arguments");
|
@@ -341,26 +293,21 @@ rb_ca_unbound_repeat (int argc, VALUE *argv, VALUE self)
|
|
341
293
|
rb_raise(rb_eArgError, "invalid argument");
|
342
294
|
}
|
343
295
|
rep_dim[i] = ca->dim[count];
|
344
|
-
dim[ndim]
|
296
|
+
dim[ndim] = ca->dim[count];
|
297
|
+
elements *= ca->dim[count];
|
345
298
|
count++; ndim++;
|
346
299
|
}
|
347
300
|
}
|
348
301
|
|
349
|
-
if (
|
350
|
-
rb_raise(
|
302
|
+
if ( elements != ca->elements ) {
|
303
|
+
rb_raise(rb_eArgError, "mismatch in entity elements (%lli for %lli)", elements, ca->elements);
|
351
304
|
}
|
352
305
|
|
353
306
|
if ( ndim != ca->ndim ) {
|
354
|
-
|
355
|
-
par = rb_ca_refer_new(self, ca->data_type, ndim, dim, ca->bytes, 0);
|
356
|
-
obj = rb_ca_ubrep_new(par, rep_ndim, rep_dim);
|
357
|
-
rb_ivar_set(obj, rb_intern("__real_parent__"), par);
|
358
|
-
rb_ca_set_parent(obj, self);
|
359
|
-
return obj;
|
360
|
-
}
|
361
|
-
else {
|
362
|
-
return rb_ca_ubrep_new(self, rep_ndim, rep_dim);
|
307
|
+
rb_raise(rb_eArgError, "invalid number of nil's (%i for %i)", ndim, ca->ndim);
|
363
308
|
}
|
309
|
+
|
310
|
+
return rb_ca_ubrep_new(self, rep_ndim, rep_dim);
|
364
311
|
}
|
365
312
|
|
366
313
|
static VALUE
|
@@ -412,6 +359,7 @@ ca_ubrep_bind2 (VALUE self, int32_t new_ndim, ca_size_t *new_dim)
|
|
412
359
|
ca_size_t upr_spec[CA_RANK_MAX];
|
413
360
|
ca_size_t srp_spec[CA_RANK_MAX];
|
414
361
|
int uprep = 0, srp_ndim;
|
362
|
+
int ndim_real;
|
415
363
|
int i;
|
416
364
|
|
417
365
|
Data_Get_Struct(self, CAUnboundRepeat, ca);
|
@@ -422,6 +370,7 @@ ca_ubrep_bind2 (VALUE self, int32_t new_ndim, ca_size_t *new_dim)
|
|
422
370
|
}
|
423
371
|
|
424
372
|
srp_ndim = 0;
|
373
|
+
ndim_real = 0;
|
425
374
|
for (i=0; i<new_ndim; i++) {
|
426
375
|
if ( ca->rep_dim[i] == 0 ) {
|
427
376
|
if ( new_dim[i] == 0 ) {
|
@@ -434,14 +383,16 @@ ca_ubrep_bind2 (VALUE self, int32_t new_ndim, ca_size_t *new_dim)
|
|
434
383
|
upr_spec[i] = new_dim[i];
|
435
384
|
}
|
436
385
|
else {
|
386
|
+
ndim_real++;
|
437
387
|
rep_spec[i] = 0;
|
438
388
|
srp_spec[srp_ndim++] = 0;
|
439
389
|
upr_spec[i] = ca->rep_dim[i];
|
440
390
|
}
|
441
391
|
}
|
392
|
+
|
442
393
|
if ( uprep ) {
|
443
394
|
volatile VALUE rep;
|
444
|
-
if ( srp_ndim >=
|
395
|
+
if ( srp_ndim >= ndim_real ) {
|
445
396
|
rep = rb_ca_repeat_new(rb_ca_parent(self), srp_ndim, srp_spec);
|
446
397
|
}
|
447
398
|
else {
|
@@ -450,15 +401,12 @@ ca_ubrep_bind2 (VALUE self, int32_t new_ndim, ca_size_t *new_dim)
|
|
450
401
|
return rb_ca_ubrep_new(rep, new_ndim, upr_spec);
|
451
402
|
}
|
452
403
|
else {
|
453
|
-
return rb_ca_repeat_new(self, new_ndim, rep_spec);
|
404
|
+
return rb_ca_repeat_new(rb_ca_parent(self), new_ndim, rep_spec);
|
454
405
|
}
|
455
406
|
}
|
456
407
|
|
457
|
-
/*
|
458
|
-
|
459
|
-
def bind_with(other)
|
460
|
-
end
|
461
|
-
end
|
408
|
+
/* @overload bind_with (other)
|
409
|
+
|
462
410
|
*/
|
463
411
|
|
464
412
|
VALUE
|
@@ -484,11 +432,8 @@ ca_ubrep_bind_with (VALUE self, VALUE other)
|
|
484
432
|
}
|
485
433
|
}
|
486
434
|
|
487
|
-
/*
|
488
|
-
|
489
|
-
def bind(*index)
|
490
|
-
end
|
491
|
-
end
|
435
|
+
/* @overload bind (*index)
|
436
|
+
|
492
437
|
*/
|
493
438
|
|
494
439
|
static VALUE
|
@@ -503,6 +448,7 @@ rb_ca_ubrep_bind (int argc, VALUE *argv, VALUE self)
|
|
503
448
|
if ( ca->rep_ndim != argc ) {
|
504
449
|
rb_raise(rb_eArgError, "invalid new_ndim");
|
505
450
|
}
|
451
|
+
|
506
452
|
for (i=0; i<argc; i++) {
|
507
453
|
if ( ca->rep_dim[i] == 0 ) {
|
508
454
|
rep_spec[i] = NUM2SIZE(argv[i]);
|
@@ -512,7 +458,7 @@ rb_ca_ubrep_bind (int argc, VALUE *argv, VALUE self)
|
|
512
458
|
}
|
513
459
|
}
|
514
460
|
|
515
|
-
return rb_ca_repeat_new(self, argc, rep_spec);
|
461
|
+
return rb_ca_repeat_new(rb_ca_parent(self), argc, rep_spec);
|
516
462
|
}
|
517
463
|
|
518
464
|
static VALUE
|