numo-narray 0.9.1.2 → 0.9.1.3
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/Rakefile +7 -1
- data/ext/numo/narray/array.c +6 -6
- data/ext/numo/narray/data.c +8 -8
- data/ext/numo/narray/depend.erb +4 -4
- data/ext/numo/narray/extconf.rb +2 -2
- data/ext/numo/narray/gen/cogen.rb +13 -0
- data/ext/numo/narray/gen/def/dfloat.rb +1 -0
- data/ext/numo/narray/gen/def/sfloat.rb +1 -0
- data/ext/numo/narray/gen/narray_def.rb +14 -2
- data/ext/numo/narray/gen/spec.rb +26 -10
- data/ext/numo/narray/gen/tmpl/accum_binary.c +1 -1
- data/ext/numo/narray/gen/tmpl/accum_index.c +11 -1
- data/ext/numo/narray/gen/tmpl/alloc_func.c +3 -3
- data/ext/numo/narray/gen/tmpl/binary.c +149 -10
- data/ext/numo/narray/gen/tmpl/binary2.c +1 -1
- data/ext/numo/narray/gen/tmpl/bincount.c +1 -1
- data/ext/numo/narray/gen/tmpl/cast.c +1 -1
- data/ext/numo/narray/gen/tmpl/cond_binary.c +1 -1
- data/ext/numo/narray/gen/tmpl/each.c +1 -1
- data/ext/numo/narray/gen/tmpl/each_with_index.c +1 -1
- data/ext/numo/narray/gen/tmpl/extract_data.c +3 -3
- data/ext/numo/narray/gen/tmpl/inspect.c +1 -1
- data/ext/numo/narray/gen/tmpl/lib.c +5 -0
- data/ext/numo/narray/gen/tmpl/map_with_index.c +1 -1
- data/ext/numo/narray/gen/tmpl/median.c +3 -2
- data/ext/numo/narray/gen/tmpl/pow.c +1 -1
- data/ext/numo/narray/gen/tmpl/qsort.c +118 -56
- data/ext/numo/narray/gen/tmpl/store.c +4 -4
- data/ext/numo/narray/gen/tmpl/store_bit.c +4 -4
- data/ext/numo/narray/gen/tmpl/to_a.c +1 -1
- data/ext/numo/narray/gen/tmpl/unary_s.c +55 -9
- data/ext/numo/narray/gen/tmpl_bit/each.c +1 -1
- data/ext/numo/narray/gen/tmpl_bit/each_with_index.c +1 -1
- data/ext/numo/narray/gen/tmpl_bit/inspect.c +1 -1
- data/ext/numo/narray/gen/tmpl_bit/mask.c +1 -1
- data/ext/numo/narray/gen/tmpl_bit/to_a.c +1 -1
- data/ext/numo/narray/index.c +64 -37
- data/ext/numo/narray/math.c +4 -4
- data/ext/numo/narray/narray.c +54 -29
- data/ext/numo/narray/ndloop.c +7 -7
- data/ext/numo/narray/numo/narray.h +9 -2
- data/ext/numo/narray/numo/template.h +18 -0
- data/ext/numo/narray/numo/types/bit.h +5 -0
- data/ext/numo/narray/numo/types/complex_macro.h +5 -0
- data/ext/numo/narray/numo/types/float_macro.h +5 -0
- data/ext/numo/narray/numo/types/int_macro.h +24 -0
- data/ext/numo/narray/numo/types/robj_macro.h +5 -0
- data/ext/numo/narray/numo/types/uint_macro.h +24 -0
- data/ext/numo/narray/numo/types/xint_macro.h +5 -25
- data/ext/numo/narray/rand.c +2 -29
- data/ext/numo/narray/step.c +1 -28
- data/ext/numo/narray/struct.c +26 -22
- data/lib/numo/narray/extra.rb +50 -1
- metadata +2 -2
data/ext/numo/narray/index.c
CHANGED
@@ -82,7 +82,7 @@ static ID id_shift_left;
|
|
82
82
|
static ID id_mask;
|
83
83
|
|
84
84
|
|
85
|
-
void
|
85
|
+
static void
|
86
86
|
na_index_set_step(na_index_arg_t *q, int i, size_t n, size_t beg, ssize_t step)
|
87
87
|
{
|
88
88
|
q->n = n;
|
@@ -93,7 +93,7 @@ na_index_set_step(na_index_arg_t *q, int i, size_t n, size_t beg, ssize_t step)
|
|
93
93
|
q->orig_dim = i;
|
94
94
|
}
|
95
95
|
|
96
|
-
void
|
96
|
+
static void
|
97
97
|
na_index_set_scalar(na_index_arg_t *q, int i, ssize_t size, ssize_t x)
|
98
98
|
{
|
99
99
|
if (x < -size || x >= size)
|
@@ -567,7 +567,7 @@ VALUE na_aref_md_protected(VALUE data_value)
|
|
567
567
|
} else {
|
568
568
|
ndim_new = na_ndim_new_narray(ndim, q);
|
569
569
|
}
|
570
|
-
view = na_s_allocate_view(
|
570
|
+
view = na_s_allocate_view(rb_obj_class(self));
|
571
571
|
|
572
572
|
na_copy_flags(self, view);
|
573
573
|
GetNArrayView(view,na2);
|
@@ -610,7 +610,7 @@ na_aref_md_ensure(VALUE data_value)
|
|
610
610
|
return Qnil;
|
611
611
|
}
|
612
612
|
|
613
|
-
VALUE
|
613
|
+
static VALUE
|
614
614
|
na_aref_md(int argc, VALUE *argv, VALUE self, int keep_dim, int result_nd)
|
615
615
|
{
|
616
616
|
VALUE args; // should be GC protected
|
@@ -632,7 +632,7 @@ na_aref_md(int argc, VALUE *argv, VALUE self, int keep_dim, int result_nd)
|
|
632
632
|
if (rb_obj_is_kind_of(idx, numo_cNArray)) {
|
633
633
|
GetNArray(idx,nidx);
|
634
634
|
if (NA_NDIM(nidx)>1) {
|
635
|
-
store = nary_new(
|
635
|
+
store = nary_new(rb_obj_class(self),NA_NDIM(nidx),NA_SHAPE(nidx));
|
636
636
|
idx = na_flatten(idx);
|
637
637
|
RARRAY_ASET(args,0,idx);
|
638
638
|
}
|
@@ -666,7 +666,7 @@ na_aref_main(int nidx, VALUE *idx, VALUE self, int keep_dim, int nd)
|
|
666
666
|
return rb_funcall(self,id_dup,0);
|
667
667
|
}
|
668
668
|
if (nidx==1) {
|
669
|
-
if (
|
669
|
+
if (rb_obj_class(*idx)==numo_cBit) {
|
670
670
|
return rb_funcall(*idx,id_mask,1,self);
|
671
671
|
}
|
672
672
|
}
|
@@ -674,17 +674,6 @@ na_aref_main(int nidx, VALUE *idx, VALUE self, int keep_dim, int nd)
|
|
674
674
|
}
|
675
675
|
|
676
676
|
|
677
|
-
/* method: slice(idx1,idx2,...,idxN) */
|
678
|
-
static VALUE na_slice(int argc, VALUE *argv, VALUE self)
|
679
|
-
{
|
680
|
-
int nd;
|
681
|
-
size_t pos;
|
682
|
-
|
683
|
-
nd = na_get_result_dimension(self, argc, argv, 0, &pos);
|
684
|
-
return na_aref_main(argc, argv, self, 1, nd);
|
685
|
-
}
|
686
|
-
|
687
|
-
|
688
677
|
static int
|
689
678
|
check_index_count(int argc, int na_ndim, int count_new, int count_rest)
|
690
679
|
{
|
@@ -692,16 +681,18 @@ check_index_count(int argc, int na_ndim, int count_new, int count_rest)
|
|
692
681
|
|
693
682
|
switch(count_rest) {
|
694
683
|
case 0:
|
695
|
-
if (
|
684
|
+
if (argc == 1 && count_new == 0) return 1;
|
696
685
|
if (argc == result_nd) return result_nd;
|
697
686
|
rb_raise(rb_eIndexError,"# of index(=%i) should be "
|
698
|
-
"equal to ndim(=%i)",argc,na_ndim);
|
687
|
+
"equal to ndim(=%i) or 1", argc,na_ndim);
|
699
688
|
break;
|
700
689
|
case 1:
|
701
690
|
if (argc-1 <= result_nd) return result_nd;
|
702
691
|
rb_raise(rb_eIndexError,"# of index(=%i) > ndim(=%i) with :rest",
|
703
692
|
argc,na_ndim);
|
704
693
|
break;
|
694
|
+
default:
|
695
|
+
rb_raise(rb_eIndexError,"multiple rest-dimension is not allowd");
|
705
696
|
}
|
706
697
|
return -1;
|
707
698
|
}
|
@@ -712,7 +703,6 @@ na_get_result_dimension(VALUE self, int argc, VALUE *argv, ssize_t stride, size_
|
|
712
703
|
int i, j;
|
713
704
|
int count_new=0;
|
714
705
|
int count_rest=0;
|
715
|
-
int count_else=0;
|
716
706
|
ssize_t x, s, m, pos, *idx;
|
717
707
|
narray_t *na;
|
718
708
|
narray_view_t *nv;
|
@@ -721,8 +711,7 @@ na_get_result_dimension(VALUE self, int argc, VALUE *argv, ssize_t stride, size_
|
|
721
711
|
|
722
712
|
GetNArray(self,na);
|
723
713
|
if (na->size == 0) {
|
724
|
-
rb_raise(
|
725
|
-
return -1;
|
714
|
+
rb_raise(nary_eShapeError, "cannot get element of empty array");
|
726
715
|
}
|
727
716
|
idx = ALLOCA_N(ssize_t, argc);
|
728
717
|
for (i=j=0; i<argc; i++) {
|
@@ -745,16 +734,10 @@ na_get_result_dimension(VALUE self, int argc, VALUE *argv, ssize_t stride, size_
|
|
745
734
|
argv[i] = sym_new;
|
746
735
|
count_new++;
|
747
736
|
}
|
748
|
-
// not break
|
749
|
-
default:
|
750
|
-
count_else++;
|
751
737
|
}
|
752
738
|
}
|
753
739
|
|
754
|
-
if (
|
755
|
-
rb_raise(rb_eIndexError,"multiple rest-dimension is not allowd");
|
756
|
-
}
|
757
|
-
if (count_else != 0) {
|
740
|
+
if (j != argc) {
|
758
741
|
return check_index_count(argc, na->ndim, count_new, count_rest);
|
759
742
|
}
|
760
743
|
|
@@ -773,8 +756,9 @@ na_get_result_dimension(VALUE self, int argc, VALUE *argv, ssize_t stride, size_
|
|
773
756
|
}
|
774
757
|
}
|
775
758
|
*pos_idx = pos;
|
759
|
+
return 0;
|
776
760
|
}
|
777
|
-
|
761
|
+
if (j == 1) {
|
778
762
|
x = na_range_check(idx[0], na->size, 0);
|
779
763
|
for (i=na->ndim-1; i>=0; i--) {
|
780
764
|
s = na->shape[i];
|
@@ -788,19 +772,19 @@ na_get_result_dimension(VALUE self, int argc, VALUE *argv, ssize_t stride, size_
|
|
788
772
|
}
|
789
773
|
}
|
790
774
|
*pos_idx = pos;
|
791
|
-
|
792
|
-
return check_index_count(argc, na->ndim, count_new, count_rest);
|
775
|
+
return 0;
|
793
776
|
}
|
794
777
|
break;
|
795
778
|
default:
|
796
779
|
if (!stride) {
|
797
780
|
stride = nary_element_stride(self);
|
798
781
|
}
|
799
|
-
if (
|
782
|
+
if (j == 1) {
|
800
783
|
x = na_range_check(idx[0], na->size, 0);
|
801
784
|
*pos_idx = stride * x;
|
785
|
+
return 0;
|
802
786
|
}
|
803
|
-
|
787
|
+
if (j == na->ndim) {
|
804
788
|
pos = 0;
|
805
789
|
for (i=j-1; i>=0; i--) {
|
806
790
|
x = na_range_check(idx[i], na->shape[i], i);
|
@@ -808,11 +792,54 @@ na_get_result_dimension(VALUE self, int argc, VALUE *argv, ssize_t stride, size_
|
|
808
792
|
stride *= na->shape[i];
|
809
793
|
}
|
810
794
|
*pos_idx = pos;
|
811
|
-
|
812
|
-
|
795
|
+
return 0;
|
796
|
+
}
|
797
|
+
}
|
798
|
+
rb_raise(rb_eIndexError,"# of index(=%i) should be "
|
799
|
+
"equal to ndim(=%i) or 1", argc,na->ndim);
|
800
|
+
return -1;
|
801
|
+
}
|
802
|
+
|
803
|
+
|
804
|
+
static int
|
805
|
+
na_get_result_dimension_for_slice(VALUE self, int argc, VALUE *argv)
|
806
|
+
{
|
807
|
+
int i;
|
808
|
+
int count_new=0;
|
809
|
+
int count_rest=0;
|
810
|
+
narray_t *na;
|
811
|
+
VALUE a;
|
812
|
+
|
813
|
+
GetNArray(self,na);
|
814
|
+
if (na->size == 0) {
|
815
|
+
rb_raise(nary_eShapeError, "cannot get element of empty array");
|
816
|
+
}
|
817
|
+
for (i=0; i<argc; i++) {
|
818
|
+
a = argv[i];
|
819
|
+
switch(TYPE(a)) {
|
820
|
+
case T_FALSE:
|
821
|
+
case T_SYMBOL:
|
822
|
+
if (a==sym_rest || a==sym_tilde || a==Qfalse) {
|
823
|
+
argv[i] = Qfalse;
|
824
|
+
count_rest++;
|
825
|
+
} else if (a==sym_new || a==sym_minus) {
|
826
|
+
argv[i] = sym_new;
|
827
|
+
count_new++;
|
828
|
+
}
|
813
829
|
}
|
814
830
|
}
|
815
|
-
|
831
|
+
|
832
|
+
return check_index_count(argc, na->ndim, count_new, count_rest);
|
833
|
+
}
|
834
|
+
|
835
|
+
|
836
|
+
/* method: slice(idx1,idx2,...,idxN) */
|
837
|
+
static VALUE na_slice(int argc, VALUE *argv, VALUE self)
|
838
|
+
{
|
839
|
+
int nd;
|
840
|
+
|
841
|
+
nd = na_get_result_dimension_for_slice(self, argc, argv);
|
842
|
+
return na_aref_main(argc, argv, self, 1, nd);
|
816
843
|
}
|
817
844
|
|
818
845
|
|
data/ext/numo/narray/math.c
CHANGED
@@ -14,7 +14,7 @@ static ID id_UPCAST;
|
|
14
14
|
static ID id_DISPATCH;
|
15
15
|
static ID id_extract;
|
16
16
|
|
17
|
-
VALUE
|
17
|
+
static VALUE
|
18
18
|
nary_type_s_upcast(VALUE type1, VALUE type2)
|
19
19
|
{
|
20
20
|
VALUE upcast_hash;
|
@@ -35,7 +35,7 @@ nary_type_s_upcast(VALUE type1, VALUE type2)
|
|
35
35
|
}
|
36
36
|
|
37
37
|
|
38
|
-
VALUE nary_math_cast2(VALUE type1, VALUE type2)
|
38
|
+
static VALUE nary_math_cast2(VALUE type1, VALUE type2)
|
39
39
|
{
|
40
40
|
if ( RTEST(rb_class_inherited_p( type1, cNArray )) ){
|
41
41
|
return nary_type_s_upcast( type1, type2 );
|
@@ -57,7 +57,7 @@ VALUE nary_math_cast2(VALUE type1, VALUE type2)
|
|
57
57
|
|
58
58
|
VALUE na_ary_composition_dtype(VALUE);
|
59
59
|
|
60
|
-
VALUE nary_mathcast(int argc, VALUE *argv)
|
60
|
+
static VALUE nary_mathcast(int argc, VALUE *argv)
|
61
61
|
{
|
62
62
|
VALUE type, type2;
|
63
63
|
int i;
|
@@ -82,7 +82,7 @@ VALUE nary_mathcast(int argc, VALUE *argv)
|
|
82
82
|
@param [NArray,Numeric] x input array.
|
83
83
|
@return [NArray] result.
|
84
84
|
*/
|
85
|
-
VALUE nary_math_method_missing(int argc, VALUE *argv, VALUE mod)
|
85
|
+
static VALUE nary_math_method_missing(int argc, VALUE *argv, VALUE mod)
|
86
86
|
{
|
87
87
|
VALUE type, ans, typemod, hash;
|
88
88
|
if (argc>1) {
|
data/ext/numo/narray/narray.c
CHANGED
@@ -132,7 +132,7 @@ nary_debug_info(VALUE self)
|
|
132
132
|
narray_t *na;
|
133
133
|
GetNArray(self,na);
|
134
134
|
|
135
|
-
printf("%s:\n",rb_class2name(
|
135
|
+
printf("%s:\n",rb_class2name(rb_obj_class(self)));
|
136
136
|
printf(" id = 0x%"PRI_VALUE_PREFIX"x\n", self);
|
137
137
|
printf(" type = %d\n", na->type);
|
138
138
|
printf(" flag = [%d,%d]\n", na->flag[0], na->flag[1]);
|
@@ -728,6 +728,38 @@ na_empty_p(VALUE self)
|
|
728
728
|
}
|
729
729
|
|
730
730
|
|
731
|
+
/*
|
732
|
+
Release memory for array data. Ignored for NArray-view.
|
733
|
+
This method is useful to free memory of referenced (i.e., GC does not work)
|
734
|
+
but unused NArray object.
|
735
|
+
@overload free
|
736
|
+
*/
|
737
|
+
static VALUE
|
738
|
+
na_free(VALUE self)
|
739
|
+
{
|
740
|
+
narray_t *na;
|
741
|
+
char *ptr;
|
742
|
+
|
743
|
+
GetNArray(self,na);
|
744
|
+
|
745
|
+
switch(NA_TYPE(na)) {
|
746
|
+
case NARRAY_DATA_T:
|
747
|
+
ptr = NA_DATA_PTR(na);
|
748
|
+
if (ptr != NULL) {
|
749
|
+
NA_DATA_PTR(na) = NULL;
|
750
|
+
xfree(ptr);
|
751
|
+
}
|
752
|
+
break;
|
753
|
+
case NARRAY_VIEW_T:
|
754
|
+
break;
|
755
|
+
case NARRAY_FILEMAP_T:
|
756
|
+
default:
|
757
|
+
rb_bug("invalid narray type : %d",NA_TYPE(na));
|
758
|
+
}
|
759
|
+
return self;
|
760
|
+
}
|
761
|
+
|
762
|
+
|
731
763
|
/* method: shape() -- returns shape, array of the size of dimensions */
|
732
764
|
static VALUE
|
733
765
|
na_shape(VALUE self)
|
@@ -912,7 +944,7 @@ na_make_view(VALUE self)
|
|
912
944
|
GetNArray(self,na);
|
913
945
|
nd = na->ndim;
|
914
946
|
|
915
|
-
view = na_s_allocate_view(
|
947
|
+
view = na_s_allocate_view(rb_obj_class(self));
|
916
948
|
|
917
949
|
na_copy_flags(self, view);
|
918
950
|
GetNArrayView(view, na2);
|
@@ -965,7 +997,7 @@ na_make_view(VALUE self)
|
|
965
997
|
* @param [Integer] dim dimension at which new axis is inserted.
|
966
998
|
* @return [Numo::NArray] result narray view.
|
967
999
|
*/
|
968
|
-
VALUE
|
1000
|
+
static VALUE
|
969
1001
|
na_expand_dims(VALUE self, VALUE vdim)
|
970
1002
|
{
|
971
1003
|
int i, j, nd, dim;
|
@@ -1024,7 +1056,7 @@ na_expand_dims(VALUE self, VALUE vdim)
|
|
1024
1056
|
*
|
1025
1057
|
* Return reversed view along specified dimeinsion
|
1026
1058
|
*/
|
1027
|
-
VALUE
|
1059
|
+
static VALUE
|
1028
1060
|
nary_reverse(int argc, VALUE *argv, VALUE self)
|
1029
1061
|
{
|
1030
1062
|
int i, nd;
|
@@ -1043,7 +1075,7 @@ nary_reverse(int argc, VALUE *argv, VALUE self)
|
|
1043
1075
|
GetNArray(self,na);
|
1044
1076
|
nd = na->ndim;
|
1045
1077
|
|
1046
|
-
view = na_s_allocate_view(
|
1078
|
+
view = na_s_allocate_view(rb_obj_class(self));
|
1047
1079
|
|
1048
1080
|
na_copy_flags(self, view);
|
1049
1081
|
GetNArrayView(view, na2);
|
@@ -1143,7 +1175,7 @@ nary_coerce(VALUE x, VALUE y)
|
|
1143
1175
|
{
|
1144
1176
|
VALUE type;
|
1145
1177
|
|
1146
|
-
type = numo_na_upcast(
|
1178
|
+
type = numo_na_upcast(rb_obj_class(x), rb_obj_class(y));
|
1147
1179
|
y = rb_funcall(type,id_cast,1,y);
|
1148
1180
|
return rb_assoc_new(y , x);
|
1149
1181
|
}
|
@@ -1160,7 +1192,7 @@ nary_byte_size(VALUE self)
|
|
1160
1192
|
narray_t *na;
|
1161
1193
|
|
1162
1194
|
GetNArray(self,na);
|
1163
|
-
velmsz = rb_const_get(
|
1195
|
+
velmsz = rb_const_get(rb_obj_class(self), id_element_byte_size);
|
1164
1196
|
if (FIXNUM_P(velmsz)) {
|
1165
1197
|
return SIZET2NUM(NUM2SIZET(velmsz) * na->size);
|
1166
1198
|
}
|
@@ -1283,7 +1315,7 @@ nary_store_binary(int argc, VALUE *argv, VALUE self)
|
|
1283
1315
|
|
1284
1316
|
GetNArray(self,na);
|
1285
1317
|
size = NA_SIZE(na);
|
1286
|
-
velmsz = rb_const_get(
|
1318
|
+
velmsz = rb_const_get(rb_obj_class(self), id_element_byte_size);
|
1287
1319
|
if (FIXNUM_P(velmsz)) {
|
1288
1320
|
byte_size = size * NUM2SIZET(velmsz);
|
1289
1321
|
} else {
|
@@ -1341,7 +1373,7 @@ nary_marshal_dump(VALUE self)
|
|
1341
1373
|
rb_ary_push(a, INT2FIX(1)); // version
|
1342
1374
|
rb_ary_push(a, na_shape(self));
|
1343
1375
|
rb_ary_push(a, INT2FIX(NA_FLAG0(self)));
|
1344
|
-
if (
|
1376
|
+
if (rb_obj_class(self) == numo_cRObject) {
|
1345
1377
|
narray_t *na;
|
1346
1378
|
VALUE *ptr;
|
1347
1379
|
size_t offset=0;
|
@@ -1362,7 +1394,7 @@ nary_marshal_dump(VALUE self)
|
|
1362
1394
|
return a;
|
1363
1395
|
}
|
1364
1396
|
|
1365
|
-
VALUE na_inplace( VALUE self );
|
1397
|
+
static VALUE na_inplace( VALUE self );
|
1366
1398
|
/*
|
1367
1399
|
Load marshal data.
|
1368
1400
|
@overload marshal_load(data)
|
@@ -1387,7 +1419,7 @@ nary_marshal_load(VALUE self, VALUE a)
|
|
1387
1419
|
na_initialize(self,RARRAY_AREF(a,1));
|
1388
1420
|
NA_FL0_SET(self,FIX2INT(RARRAY_AREF(a,2)));
|
1389
1421
|
v = RARRAY_AREF(a,3);
|
1390
|
-
if (
|
1422
|
+
if (rb_obj_class(self) == numo_cRObject) {
|
1391
1423
|
narray_t *na;
|
1392
1424
|
char *ptr;
|
1393
1425
|
if (TYPE(v) != T_ARRAY) {
|
@@ -1609,7 +1641,7 @@ nary_reduce_dimension(int argc, VALUE *argv, int naryc, VALUE *naryv,
|
|
1609
1641
|
/*
|
1610
1642
|
Return true if column major.
|
1611
1643
|
*/
|
1612
|
-
VALUE na_column_major_p( VALUE self )
|
1644
|
+
static VALUE na_column_major_p( VALUE self )
|
1613
1645
|
{
|
1614
1646
|
if (TEST_COLUMN_MAJOR(self))
|
1615
1647
|
return Qtrue;
|
@@ -1620,7 +1652,7 @@ VALUE na_column_major_p( VALUE self )
|
|
1620
1652
|
/*
|
1621
1653
|
Return true if row major.
|
1622
1654
|
*/
|
1623
|
-
VALUE na_row_major_p( VALUE self )
|
1655
|
+
static VALUE na_row_major_p( VALUE self )
|
1624
1656
|
{
|
1625
1657
|
if (TEST_ROW_MAJOR(self))
|
1626
1658
|
return Qtrue;
|
@@ -1632,7 +1664,7 @@ VALUE na_row_major_p( VALUE self )
|
|
1632
1664
|
/*
|
1633
1665
|
Return true if byte swapped.
|
1634
1666
|
*/
|
1635
|
-
VALUE na_byte_swapped_p( VALUE self )
|
1667
|
+
static VALUE na_byte_swapped_p( VALUE self )
|
1636
1668
|
{
|
1637
1669
|
if (TEST_BYTE_SWAPPED(self))
|
1638
1670
|
return Qtrue;
|
@@ -1642,7 +1674,7 @@ VALUE na_byte_swapped_p( VALUE self )
|
|
1642
1674
|
/*
|
1643
1675
|
Return true if not byte swapped.
|
1644
1676
|
*/
|
1645
|
-
VALUE na_host_order_p( VALUE self )
|
1677
|
+
static VALUE na_host_order_p( VALUE self )
|
1646
1678
|
{
|
1647
1679
|
if (TEST_BYTE_SWAPPED(self))
|
1648
1680
|
return Qfalse;
|
@@ -1654,7 +1686,7 @@ VALUE na_host_order_p( VALUE self )
|
|
1654
1686
|
Returns view of narray with inplace flagged.
|
1655
1687
|
@return [Numo::NArray] view of narray with inplace flag.
|
1656
1688
|
*/
|
1657
|
-
VALUE na_inplace( VALUE self )
|
1689
|
+
static VALUE na_inplace( VALUE self )
|
1658
1690
|
{
|
1659
1691
|
VALUE view = self;
|
1660
1692
|
view = na_make_view(self);
|
@@ -1666,24 +1698,16 @@ VALUE na_inplace( VALUE self )
|
|
1666
1698
|
Set inplace flag to self.
|
1667
1699
|
@return [Numo::NArray] self
|
1668
1700
|
*/
|
1669
|
-
VALUE na_inplace_bang( VALUE self )
|
1701
|
+
static VALUE na_inplace_bang( VALUE self )
|
1670
1702
|
{
|
1671
1703
|
SET_INPLACE(self);
|
1672
1704
|
return self;
|
1673
1705
|
}
|
1674
1706
|
|
1675
|
-
VALUE na_inplace_store( VALUE self, VALUE val )
|
1676
|
-
{
|
1677
|
-
if (self==val)
|
1678
|
-
return self;
|
1679
|
-
else
|
1680
|
-
return na_store( self, val );
|
1681
|
-
}
|
1682
|
-
|
1683
1707
|
/*
|
1684
1708
|
Return true if inplace flagged.
|
1685
1709
|
*/
|
1686
|
-
VALUE na_inplace_p( VALUE self )
|
1710
|
+
static VALUE na_inplace_p( VALUE self )
|
1687
1711
|
{
|
1688
1712
|
if (TEST_INPLACE(self))
|
1689
1713
|
return Qtrue;
|
@@ -1695,7 +1719,7 @@ VALUE na_inplace_p( VALUE self )
|
|
1695
1719
|
Unset inplace flag to self.
|
1696
1720
|
@return [Numo::NArray] self
|
1697
1721
|
*/
|
1698
|
-
VALUE na_out_of_place_bang( VALUE self )
|
1722
|
+
static VALUE na_out_of_place_bang( VALUE self )
|
1699
1723
|
{
|
1700
1724
|
UNSET_INPLACE(self);
|
1701
1725
|
return self;
|
@@ -1791,7 +1815,7 @@ static VALUE na_inspect_cols_set(VALUE mod, VALUE num)
|
|
1791
1815
|
@param [Object] other
|
1792
1816
|
@return [Boolean] true if self and other is equal.
|
1793
1817
|
*/
|
1794
|
-
VALUE
|
1818
|
+
static VALUE
|
1795
1819
|
na_equal(VALUE self, volatile VALUE other)
|
1796
1820
|
{
|
1797
1821
|
volatile VALUE vbool;
|
@@ -1801,7 +1825,7 @@ na_equal(VALUE self, volatile VALUE other)
|
|
1801
1825
|
GetNArray(self,na1);
|
1802
1826
|
|
1803
1827
|
if (!rb_obj_is_kind_of(other,cNArray)) {
|
1804
|
-
other = rb_funcall(
|
1828
|
+
other = rb_funcall(rb_obj_class(self), id_cast, 1, other);
|
1805
1829
|
}
|
1806
1830
|
|
1807
1831
|
GetNArray(other,na2);
|
@@ -1875,6 +1899,7 @@ Init_narray()
|
|
1875
1899
|
rb_define_method(cNArray, "ndim", na_ndim,0);
|
1876
1900
|
rb_define_alias (cNArray, "rank","ndim");
|
1877
1901
|
rb_define_method(cNArray, "empty?", na_empty_p, 0);
|
1902
|
+
rb_define_method(cNArray, "free", na_free, 0);
|
1878
1903
|
|
1879
1904
|
rb_define_method(cNArray, "debug_info", nary_debug_info, 0);
|
1880
1905
|
|