carray 3.0.6 → 3.0.7
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/CHANGELOG.md +110 -0
- data/README.md +24 -3
- data/carray.gemspec +1 -1
- data/ext/ca_axis_group.c +6 -6
- data/ext/ca_binop_dispatch.c +8 -0
- data/ext/ca_binop_dispatch.h +1 -0
- data/ext/ca_categorical_iterator.c +7 -7
- data/ext/ca_kernel_iterator.h +6 -4
- data/ext/ca_obj_array.c +4 -4
- data/ext/ca_obj_bincmp.c +19 -3
- data/ext/ca_obj_binop.c +36 -11
- data/ext/ca_obj_bitarray.c +2 -4
- data/ext/ca_obj_bitfield.c +86 -4
- data/ext/ca_obj_byte_swap.c +2 -4
- data/ext/ca_obj_const_string.c +422 -257
- data/ext/ca_obj_face.c +71 -33
- data/ext/ca_obj_fake.c +112 -13
- data/ext/ca_obj_farray.c +7 -1
- data/ext/ca_obj_fixlen_string.c +51 -17
- data/ext/ca_obj_grid.c +12 -7
- data/ext/ca_obj_meld.c +5 -5
- data/ext/ca_obj_monop.c +65 -39
- data/ext/ca_obj_object.c +9 -9
- data/ext/ca_obj_reduce.c +2 -4
- data/ext/ca_obj_refer.c +104 -10
- data/ext/ca_obj_repeat.c +1 -1
- data/ext/ca_obj_roll.c +2 -4
- data/ext/ca_obj_select.c +8 -6
- data/ext/ca_obj_select_axis.c +8 -6
- data/ext/ca_obj_stack.c +5 -5
- data/ext/ca_obj_stride.c +46 -8
- data/ext/ca_obj_string.c +2 -2
- data/ext/ca_obj_tile.c +2 -4
- data/ext/ca_obj_triop.c +15 -12
- data/ext/ca_obj_window.c +22 -15
- data/ext/ca_op_ipower.c +63 -15
- data/ext/ca_op_powi.h +6 -29
- data/ext/ca_sort_kernels.h +3 -0
- data/ext/ca_sweep_engine.c +90 -23
- data/ext/ca_sweep_engine.h +5 -6
- data/ext/caframe_csv_reader.c +1 -1
- data/ext/carray.h +3 -1
- data/ext/carray_access.c +98 -39
- data/ext/carray_address_basis.c +98 -24
- data/ext/carray_broadcast.c +2 -2
- data/ext/carray_call_cfunc.c +5 -8
- data/ext/carray_cast.c +311 -37
- data/ext/carray_cast_func.rb +37 -5
- data/ext/carray_conversion.c +56 -2
- data/ext/carray_copy.c +24 -0
- data/ext/carray_core.c +69 -6
- data/ext/carray_count.c +28 -9
- data/ext/carray_element.c +9 -3
- data/ext/carray_factorize.c +11 -11
- data/ext/carray_histogram.c +2 -2
- data/ext/carray_index_classifier.c +7 -5
- data/ext/carray_internal.h +94 -0
- data/ext/carray_kernels_binop.c +55 -55
- data/ext/carray_kernels_init.c +14 -14
- data/ext/carray_kernels_monop.c +90 -140
- data/ext/carray_lazy.c +16 -1
- data/ext/carray_loop.c +9 -2
- data/ext/carray_mask.c +118 -11
- data/ext/carray_median_percentile.c +13 -8
- data/ext/carray_memory_view.c +41 -22
- data/ext/carray_operator.c +72 -11
- data/ext/carray_order.c +52 -9
- data/ext/carray_partition.c +1 -1
- data/ext/carray_random.c +1 -1
- data/ext/carray_round.c +24 -1
- data/ext/carray_scatter.c +4 -0
- data/ext/carray_segment.c +1 -1
- data/ext/carray_slab.c +13 -4
- data/ext/carray_sort.c +6 -3
- data/ext/carray_sort_kernel.c +24 -0
- data/ext/carray_struct.c +21 -6
- data/ext/carray_test.c +85 -39
- data/ext/carray_time_text.c +6 -0
- data/ext/carray_utils.c +124 -54
- data/ext/mk_call_cfunc.rb +6 -11
- data/ext/mkkernel.rb +37 -27
- data/ext/version.h +4 -4
- data/lib/carray/axis_group.rb +9 -6
- data/lib/carray/basics.rb +26 -8
- data/lib/carray/bincount_nd.rb +8 -2
- data/lib/carray/block_iterator.rb +48 -21
- data/lib/carray/categorical.rb +21 -8
- data/lib/carray/categorical_iterator.rb +2 -1
- data/lib/carray/conditional.rb +52 -4
- data/lib/carray/const_string.rb +74 -0
- data/lib/carray/construct.rb +2 -2
- data/lib/carray/core_extensions.rb +19 -68
- data/lib/carray/data_type_extension.rb +1 -0
- data/lib/carray/fixlen_string.rb +83 -1
- data/lib/carray/frame/column_verbs.rb +61 -6
- data/lib/carray/frame/concat.rb +50 -6
- data/lib/carray/frame/csv_parser.rb +13 -4
- data/lib/carray/frame/frame.rb +38 -6
- data/lib/carray/frame/group.rb +67 -40
- data/lib/carray/frame/io.rb +10 -5
- data/lib/carray/frame/join.rb +20 -6
- data/lib/carray/frame/records.rb +6 -4
- data/lib/carray/frame/reshape.rb +25 -5
- data/lib/carray/frame/verbs.rb +78 -25
- data/lib/carray/frame/windows.rb +30 -6
- data/lib/carray/fuse_source.rb +4 -2
- data/lib/carray/iterator.rb +8 -0
- data/lib/carray/key_windows.rb +10 -4
- data/lib/carray/lazy.rb +12 -17
- data/lib/carray/methods/bin.rb +3 -0
- data/lib/carray/methods/composition.rb +1 -1
- data/lib/carray/methods/factorize.rb +2 -0
- data/lib/carray/methods/gather_nd.rb +4 -1
- data/lib/carray/methods/is_in.rb +23 -3
- data/lib/carray/methods/locate_addr.rb +63 -12
- data/lib/carray/methods/repeat.rb +11 -1
- data/lib/carray/record_order.rb +35 -6
- data/lib/carray/runtime.rb +10 -0
- data/lib/carray/segment_iterator.rb +19 -16
- data/lib/carray/serialize.rb +22 -0
- data/lib/carray/slab_iterator.rb +1 -1
- data/lib/carray/stack.rb +3 -3
- data/lib/carray/string.rb +6 -6
- data/lib/carray/string_operation_extension.rb +25 -4
- data/lib/carray/struct_builder.rb +4 -1
- data/lib/carray/time.rb +190 -46
- data/lib/carray/window_iterator.rb +48 -12
- data/yard-stubs/ca_obj_bitfield.rb +4 -1
- data/yard-stubs/ca_obj_refer.rb +3 -0
- data/yard-stubs/ca_obj_window.rb +2 -1
- data/yard-stubs/carray_access.rb +4 -2
- data/yard-stubs/carray_cast.rb +6 -0
- data/yard-stubs/carray_count.rb +6 -3
- data/yard-stubs/carray_math.rb +5 -0
- data/yard-stubs/carray_order.rb +6 -0
- data/yard-stubs/carray_scatter.rb +2 -1
- data/yard-stubs/carray_test.rb +18 -5
- metadata +2 -2
data/ext/carray_kernels_monop.c
CHANGED
|
@@ -23726,11 +23726,9 @@ ca_monop_deg_360_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
23726
23726
|
p1 = q1 + k*i1;
|
|
23727
23727
|
p2 = q2 + k*i2;
|
|
23728
23728
|
{ {
|
|
23729
|
-
double
|
|
23730
|
-
|
|
23731
|
-
(*p2)
|
|
23732
|
-
? (_fa - floor(_fa)) * 360.0
|
|
23733
|
-
: (_fa - ceil(_fa) + 1.0) * 360.0;
|
|
23729
|
+
double _fa = (double)(*p1) / 360.0;
|
|
23730
|
+
(*p2) = (_fa - floor(_fa)) * 360.0;
|
|
23731
|
+
if ( (*p2) >= 360.0 ) (*p2) = 0.0; /* a tiny negative rounds to the top */
|
|
23734
23732
|
}
|
|
23735
23733
|
}
|
|
23736
23734
|
}
|
|
@@ -23754,11 +23752,9 @@ ca_monop_deg_360_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
23754
23752
|
for (k=0; k<n; k++) {
|
|
23755
23753
|
p1 = r1 + k; p2 = r2 + k;
|
|
23756
23754
|
{ {
|
|
23757
|
-
double
|
|
23758
|
-
|
|
23759
|
-
(*p2)
|
|
23760
|
-
? (_fa - floor(_fa)) * 360.0
|
|
23761
|
-
: (_fa - ceil(_fa) + 1.0) * 360.0;
|
|
23755
|
+
double _fa = (double)(*p1) / 360.0;
|
|
23756
|
+
(*p2) = (_fa - floor(_fa)) * 360.0;
|
|
23757
|
+
if ( (*p2) >= 360.0 ) (*p2) = 0.0; /* a tiny negative rounds to the top */
|
|
23762
23758
|
}
|
|
23763
23759
|
}
|
|
23764
23760
|
}
|
|
@@ -23769,11 +23765,9 @@ ca_monop_deg_360_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
23769
23765
|
for (k=0; k<n; k++) {
|
|
23770
23766
|
p1 = q1 + k; p2 = q2 + k;
|
|
23771
23767
|
{ {
|
|
23772
|
-
double
|
|
23773
|
-
|
|
23774
|
-
(*p2)
|
|
23775
|
-
? (_fa - floor(_fa)) * 360.0
|
|
23776
|
-
: (_fa - ceil(_fa) + 1.0) * 360.0;
|
|
23768
|
+
double _fa = (double)(*p1) / 360.0;
|
|
23769
|
+
(*p2) = (_fa - floor(_fa)) * 360.0;
|
|
23770
|
+
if ( (*p2) >= 360.0 ) (*p2) = 0.0; /* a tiny negative rounds to the top */
|
|
23777
23771
|
}
|
|
23778
23772
|
}
|
|
23779
23773
|
}
|
|
@@ -23782,11 +23776,9 @@ ca_monop_deg_360_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
23782
23776
|
for (k=0; k<n; k++) {
|
|
23783
23777
|
p1 = q1 + k; p2 = q2 + k;
|
|
23784
23778
|
{ {
|
|
23785
|
-
double
|
|
23786
|
-
|
|
23787
|
-
(*p2)
|
|
23788
|
-
? (_fa - floor(_fa)) * 360.0
|
|
23789
|
-
: (_fa - ceil(_fa) + 1.0) * 360.0;
|
|
23779
|
+
double _fa = (double)(*p1) / 360.0;
|
|
23780
|
+
(*p2) = (_fa - floor(_fa)) * 360.0;
|
|
23781
|
+
if ( (*p2) >= 360.0 ) (*p2) = 0.0; /* a tiny negative rounds to the top */
|
|
23790
23782
|
}
|
|
23791
23783
|
}
|
|
23792
23784
|
}
|
|
@@ -23797,11 +23789,9 @@ ca_monop_deg_360_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
23797
23789
|
ca_u_float32_t *p2 = q2;
|
|
23798
23790
|
for (k=0; k<n; k++) {
|
|
23799
23791
|
{ {
|
|
23800
|
-
double
|
|
23801
|
-
|
|
23802
|
-
(*p2)
|
|
23803
|
-
? (_fa - floor(_fa)) * 360.0
|
|
23804
|
-
: (_fa - ceil(_fa) + 1.0) * 360.0;
|
|
23792
|
+
double _fa = (double)(*p1) / 360.0;
|
|
23793
|
+
(*p2) = (_fa - floor(_fa)) * 360.0;
|
|
23794
|
+
if ( (*p2) >= 360.0 ) (*p2) = 0.0; /* a tiny negative rounds to the top */
|
|
23805
23795
|
}
|
|
23806
23796
|
}
|
|
23807
23797
|
p1 += i1; p2 += i2;
|
|
@@ -23827,11 +23817,9 @@ ca_monop_deg_360_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
23827
23817
|
p1 = q1 + k*i1;
|
|
23828
23818
|
p2 = q2 + k*i2;
|
|
23829
23819
|
{ {
|
|
23830
|
-
double
|
|
23831
|
-
|
|
23832
|
-
(*p2)
|
|
23833
|
-
? (_fa - floor(_fa)) * 360.0
|
|
23834
|
-
: (_fa - ceil(_fa) + 1.0) * 360.0;
|
|
23820
|
+
double _fa = (double)(*p1) / 360.0;
|
|
23821
|
+
(*p2) = (_fa - floor(_fa)) * 360.0;
|
|
23822
|
+
if ( (*p2) >= 360.0 ) (*p2) = 0.0; /* a tiny negative rounds to the top */
|
|
23835
23823
|
}
|
|
23836
23824
|
}
|
|
23837
23825
|
}
|
|
@@ -23855,11 +23843,9 @@ ca_monop_deg_360_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
23855
23843
|
for (k=0; k<n; k++) {
|
|
23856
23844
|
p1 = r1 + k; p2 = r2 + k;
|
|
23857
23845
|
{ {
|
|
23858
|
-
double
|
|
23859
|
-
|
|
23860
|
-
(*p2)
|
|
23861
|
-
? (_fa - floor(_fa)) * 360.0
|
|
23862
|
-
: (_fa - ceil(_fa) + 1.0) * 360.0;
|
|
23846
|
+
double _fa = (double)(*p1) / 360.0;
|
|
23847
|
+
(*p2) = (_fa - floor(_fa)) * 360.0;
|
|
23848
|
+
if ( (*p2) >= 360.0 ) (*p2) = 0.0; /* a tiny negative rounds to the top */
|
|
23863
23849
|
}
|
|
23864
23850
|
}
|
|
23865
23851
|
}
|
|
@@ -23870,11 +23856,9 @@ ca_monop_deg_360_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
23870
23856
|
for (k=0; k<n; k++) {
|
|
23871
23857
|
p1 = q1 + k; p2 = q2 + k;
|
|
23872
23858
|
{ {
|
|
23873
|
-
double
|
|
23874
|
-
|
|
23875
|
-
(*p2)
|
|
23876
|
-
? (_fa - floor(_fa)) * 360.0
|
|
23877
|
-
: (_fa - ceil(_fa) + 1.0) * 360.0;
|
|
23859
|
+
double _fa = (double)(*p1) / 360.0;
|
|
23860
|
+
(*p2) = (_fa - floor(_fa)) * 360.0;
|
|
23861
|
+
if ( (*p2) >= 360.0 ) (*p2) = 0.0; /* a tiny negative rounds to the top */
|
|
23878
23862
|
}
|
|
23879
23863
|
}
|
|
23880
23864
|
}
|
|
@@ -23883,11 +23867,9 @@ ca_monop_deg_360_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
23883
23867
|
for (k=0; k<n; k++) {
|
|
23884
23868
|
p1 = q1 + k; p2 = q2 + k;
|
|
23885
23869
|
{ {
|
|
23886
|
-
double
|
|
23887
|
-
|
|
23888
|
-
(*p2)
|
|
23889
|
-
? (_fa - floor(_fa)) * 360.0
|
|
23890
|
-
: (_fa - ceil(_fa) + 1.0) * 360.0;
|
|
23870
|
+
double _fa = (double)(*p1) / 360.0;
|
|
23871
|
+
(*p2) = (_fa - floor(_fa)) * 360.0;
|
|
23872
|
+
if ( (*p2) >= 360.0 ) (*p2) = 0.0; /* a tiny negative rounds to the top */
|
|
23891
23873
|
}
|
|
23892
23874
|
}
|
|
23893
23875
|
}
|
|
@@ -23898,11 +23880,9 @@ ca_monop_deg_360_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
23898
23880
|
ca_u_float64_t *p2 = q2;
|
|
23899
23881
|
for (k=0; k<n; k++) {
|
|
23900
23882
|
{ {
|
|
23901
|
-
double
|
|
23902
|
-
|
|
23903
|
-
(*p2)
|
|
23904
|
-
? (_fa - floor(_fa)) * 360.0
|
|
23905
|
-
: (_fa - ceil(_fa) + 1.0) * 360.0;
|
|
23883
|
+
double _fa = (double)(*p1) / 360.0;
|
|
23884
|
+
(*p2) = (_fa - floor(_fa)) * 360.0;
|
|
23885
|
+
if ( (*p2) >= 360.0 ) (*p2) = 0.0; /* a tiny negative rounds to the top */
|
|
23906
23886
|
}
|
|
23907
23887
|
}
|
|
23908
23888
|
p1 += i1; p2 += i2;
|
|
@@ -23930,10 +23910,9 @@ ca_monop_deg_360_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
23930
23910
|
{ {
|
|
23931
23911
|
VALUE _obj_arg = (*p1);
|
|
23932
23912
|
if (RB_FLOAT_TYPE_P(_obj_arg) || RB_INTEGER_TYPE_P(_obj_arg) || RB_TYPE_P(_obj_arg, T_RATIONAL)) {
|
|
23933
|
-
double
|
|
23934
|
-
double
|
|
23935
|
-
(*p2) = DBL2NUM(
|
|
23936
|
-
: (_fa - ceil(_fa) + 1.0) * 360.0);
|
|
23913
|
+
double _fa = NUM2DBL(_obj_arg) / 360.0;
|
|
23914
|
+
double _r = (_fa - floor(_fa)) * 360.0;
|
|
23915
|
+
(*p2) = DBL2NUM(_r >= 360.0 ? 0.0 : _r);
|
|
23937
23916
|
} else {
|
|
23938
23917
|
(*p2) = rb_funcall(_obj_arg, rb_intern("deg_360"), 0);
|
|
23939
23918
|
}
|
|
@@ -23962,10 +23941,9 @@ ca_monop_deg_360_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
23962
23941
|
{ {
|
|
23963
23942
|
VALUE _obj_arg = (*p1);
|
|
23964
23943
|
if (RB_FLOAT_TYPE_P(_obj_arg) || RB_INTEGER_TYPE_P(_obj_arg) || RB_TYPE_P(_obj_arg, T_RATIONAL)) {
|
|
23965
|
-
double
|
|
23966
|
-
double
|
|
23967
|
-
(*p2) = DBL2NUM(
|
|
23968
|
-
: (_fa - ceil(_fa) + 1.0) * 360.0);
|
|
23944
|
+
double _fa = NUM2DBL(_obj_arg) / 360.0;
|
|
23945
|
+
double _r = (_fa - floor(_fa)) * 360.0;
|
|
23946
|
+
(*p2) = DBL2NUM(_r >= 360.0 ? 0.0 : _r);
|
|
23969
23947
|
} else {
|
|
23970
23948
|
(*p2) = rb_funcall(_obj_arg, rb_intern("deg_360"), 0);
|
|
23971
23949
|
}
|
|
@@ -23981,10 +23959,9 @@ ca_monop_deg_360_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
23981
23959
|
{ {
|
|
23982
23960
|
VALUE _obj_arg = (*p1);
|
|
23983
23961
|
if (RB_FLOAT_TYPE_P(_obj_arg) || RB_INTEGER_TYPE_P(_obj_arg) || RB_TYPE_P(_obj_arg, T_RATIONAL)) {
|
|
23984
|
-
double
|
|
23985
|
-
double
|
|
23986
|
-
(*p2) = DBL2NUM(
|
|
23987
|
-
: (_fa - ceil(_fa) + 1.0) * 360.0);
|
|
23962
|
+
double _fa = NUM2DBL(_obj_arg) / 360.0;
|
|
23963
|
+
double _r = (_fa - floor(_fa)) * 360.0;
|
|
23964
|
+
(*p2) = DBL2NUM(_r >= 360.0 ? 0.0 : _r);
|
|
23988
23965
|
} else {
|
|
23989
23966
|
(*p2) = rb_funcall(_obj_arg, rb_intern("deg_360"), 0);
|
|
23990
23967
|
}
|
|
@@ -23998,10 +23975,9 @@ ca_monop_deg_360_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
23998
23975
|
{ {
|
|
23999
23976
|
VALUE _obj_arg = (*p1);
|
|
24000
23977
|
if (RB_FLOAT_TYPE_P(_obj_arg) || RB_INTEGER_TYPE_P(_obj_arg) || RB_TYPE_P(_obj_arg, T_RATIONAL)) {
|
|
24001
|
-
double
|
|
24002
|
-
double
|
|
24003
|
-
(*p2) = DBL2NUM(
|
|
24004
|
-
: (_fa - ceil(_fa) + 1.0) * 360.0);
|
|
23978
|
+
double _fa = NUM2DBL(_obj_arg) / 360.0;
|
|
23979
|
+
double _r = (_fa - floor(_fa)) * 360.0;
|
|
23980
|
+
(*p2) = DBL2NUM(_r >= 360.0 ? 0.0 : _r);
|
|
24005
23981
|
} else {
|
|
24006
23982
|
(*p2) = rb_funcall(_obj_arg, rb_intern("deg_360"), 0);
|
|
24007
23983
|
}
|
|
@@ -24017,10 +23993,9 @@ ca_monop_deg_360_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
24017
23993
|
{ {
|
|
24018
23994
|
VALUE _obj_arg = (*p1);
|
|
24019
23995
|
if (RB_FLOAT_TYPE_P(_obj_arg) || RB_INTEGER_TYPE_P(_obj_arg) || RB_TYPE_P(_obj_arg, T_RATIONAL)) {
|
|
24020
|
-
double
|
|
24021
|
-
double
|
|
24022
|
-
(*p2) = DBL2NUM(
|
|
24023
|
-
: (_fa - ceil(_fa) + 1.0) * 360.0);
|
|
23996
|
+
double _fa = NUM2DBL(_obj_arg) / 360.0;
|
|
23997
|
+
double _r = (_fa - floor(_fa)) * 360.0;
|
|
23998
|
+
(*p2) = DBL2NUM(_r >= 360.0 ? 0.0 : _r);
|
|
24024
23999
|
} else {
|
|
24025
24000
|
(*p2) = rb_funcall(_obj_arg, rb_intern("deg_360"), 0);
|
|
24026
24001
|
}
|
|
@@ -24477,11 +24452,9 @@ ca_monop_rad_2pi_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
24477
24452
|
p2 = q2 + k*i2;
|
|
24478
24453
|
{ {
|
|
24479
24454
|
double _two_pi = 2.0 * M_PI;
|
|
24480
|
-
double
|
|
24481
|
-
|
|
24482
|
-
(*p2)
|
|
24483
|
-
? (_fa - floor(_fa)) * _two_pi
|
|
24484
|
-
: (_fa - ceil(_fa) + 1.0) * _two_pi;
|
|
24455
|
+
double _fa = (double)(*p1) / _two_pi;
|
|
24456
|
+
(*p2) = (_fa - floor(_fa)) * _two_pi;
|
|
24457
|
+
if ( (*p2) >= _two_pi ) (*p2) = 0.0; /* a tiny negative rounds to the top */
|
|
24485
24458
|
}
|
|
24486
24459
|
}
|
|
24487
24460
|
}
|
|
@@ -24506,11 +24479,9 @@ ca_monop_rad_2pi_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
24506
24479
|
p1 = r1 + k; p2 = r2 + k;
|
|
24507
24480
|
{ {
|
|
24508
24481
|
double _two_pi = 2.0 * M_PI;
|
|
24509
|
-
double
|
|
24510
|
-
|
|
24511
|
-
(*p2)
|
|
24512
|
-
? (_fa - floor(_fa)) * _two_pi
|
|
24513
|
-
: (_fa - ceil(_fa) + 1.0) * _two_pi;
|
|
24482
|
+
double _fa = (double)(*p1) / _two_pi;
|
|
24483
|
+
(*p2) = (_fa - floor(_fa)) * _two_pi;
|
|
24484
|
+
if ( (*p2) >= _two_pi ) (*p2) = 0.0; /* a tiny negative rounds to the top */
|
|
24514
24485
|
}
|
|
24515
24486
|
}
|
|
24516
24487
|
}
|
|
@@ -24522,11 +24493,9 @@ ca_monop_rad_2pi_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
24522
24493
|
p1 = q1 + k; p2 = q2 + k;
|
|
24523
24494
|
{ {
|
|
24524
24495
|
double _two_pi = 2.0 * M_PI;
|
|
24525
|
-
double
|
|
24526
|
-
|
|
24527
|
-
(*p2)
|
|
24528
|
-
? (_fa - floor(_fa)) * _two_pi
|
|
24529
|
-
: (_fa - ceil(_fa) + 1.0) * _two_pi;
|
|
24496
|
+
double _fa = (double)(*p1) / _two_pi;
|
|
24497
|
+
(*p2) = (_fa - floor(_fa)) * _two_pi;
|
|
24498
|
+
if ( (*p2) >= _two_pi ) (*p2) = 0.0; /* a tiny negative rounds to the top */
|
|
24530
24499
|
}
|
|
24531
24500
|
}
|
|
24532
24501
|
}
|
|
@@ -24536,11 +24505,9 @@ ca_monop_rad_2pi_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
24536
24505
|
p1 = q1 + k; p2 = q2 + k;
|
|
24537
24506
|
{ {
|
|
24538
24507
|
double _two_pi = 2.0 * M_PI;
|
|
24539
|
-
double
|
|
24540
|
-
|
|
24541
|
-
(*p2)
|
|
24542
|
-
? (_fa - floor(_fa)) * _two_pi
|
|
24543
|
-
: (_fa - ceil(_fa) + 1.0) * _two_pi;
|
|
24508
|
+
double _fa = (double)(*p1) / _two_pi;
|
|
24509
|
+
(*p2) = (_fa - floor(_fa)) * _two_pi;
|
|
24510
|
+
if ( (*p2) >= _two_pi ) (*p2) = 0.0; /* a tiny negative rounds to the top */
|
|
24544
24511
|
}
|
|
24545
24512
|
}
|
|
24546
24513
|
}
|
|
@@ -24552,11 +24519,9 @@ ca_monop_rad_2pi_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
24552
24519
|
for (k=0; k<n; k++) {
|
|
24553
24520
|
{ {
|
|
24554
24521
|
double _two_pi = 2.0 * M_PI;
|
|
24555
|
-
double
|
|
24556
|
-
|
|
24557
|
-
(*p2)
|
|
24558
|
-
? (_fa - floor(_fa)) * _two_pi
|
|
24559
|
-
: (_fa - ceil(_fa) + 1.0) * _two_pi;
|
|
24522
|
+
double _fa = (double)(*p1) / _two_pi;
|
|
24523
|
+
(*p2) = (_fa - floor(_fa)) * _two_pi;
|
|
24524
|
+
if ( (*p2) >= _two_pi ) (*p2) = 0.0; /* a tiny negative rounds to the top */
|
|
24560
24525
|
}
|
|
24561
24526
|
}
|
|
24562
24527
|
p1 += i1; p2 += i2;
|
|
@@ -24583,11 +24548,9 @@ ca_monop_rad_2pi_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
24583
24548
|
p2 = q2 + k*i2;
|
|
24584
24549
|
{ {
|
|
24585
24550
|
double _two_pi = 2.0 * M_PI;
|
|
24586
|
-
double
|
|
24587
|
-
|
|
24588
|
-
(*p2)
|
|
24589
|
-
? (_fa - floor(_fa)) * _two_pi
|
|
24590
|
-
: (_fa - ceil(_fa) + 1.0) * _two_pi;
|
|
24551
|
+
double _fa = (double)(*p1) / _two_pi;
|
|
24552
|
+
(*p2) = (_fa - floor(_fa)) * _two_pi;
|
|
24553
|
+
if ( (*p2) >= _two_pi ) (*p2) = 0.0; /* a tiny negative rounds to the top */
|
|
24591
24554
|
}
|
|
24592
24555
|
}
|
|
24593
24556
|
}
|
|
@@ -24612,11 +24575,9 @@ ca_monop_rad_2pi_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
24612
24575
|
p1 = r1 + k; p2 = r2 + k;
|
|
24613
24576
|
{ {
|
|
24614
24577
|
double _two_pi = 2.0 * M_PI;
|
|
24615
|
-
double
|
|
24616
|
-
|
|
24617
|
-
(*p2)
|
|
24618
|
-
? (_fa - floor(_fa)) * _two_pi
|
|
24619
|
-
: (_fa - ceil(_fa) + 1.0) * _two_pi;
|
|
24578
|
+
double _fa = (double)(*p1) / _two_pi;
|
|
24579
|
+
(*p2) = (_fa - floor(_fa)) * _two_pi;
|
|
24580
|
+
if ( (*p2) >= _two_pi ) (*p2) = 0.0; /* a tiny negative rounds to the top */
|
|
24620
24581
|
}
|
|
24621
24582
|
}
|
|
24622
24583
|
}
|
|
@@ -24628,11 +24589,9 @@ ca_monop_rad_2pi_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
24628
24589
|
p1 = q1 + k; p2 = q2 + k;
|
|
24629
24590
|
{ {
|
|
24630
24591
|
double _two_pi = 2.0 * M_PI;
|
|
24631
|
-
double
|
|
24632
|
-
|
|
24633
|
-
(*p2)
|
|
24634
|
-
? (_fa - floor(_fa)) * _two_pi
|
|
24635
|
-
: (_fa - ceil(_fa) + 1.0) * _two_pi;
|
|
24592
|
+
double _fa = (double)(*p1) / _two_pi;
|
|
24593
|
+
(*p2) = (_fa - floor(_fa)) * _two_pi;
|
|
24594
|
+
if ( (*p2) >= _two_pi ) (*p2) = 0.0; /* a tiny negative rounds to the top */
|
|
24636
24595
|
}
|
|
24637
24596
|
}
|
|
24638
24597
|
}
|
|
@@ -24642,11 +24601,9 @@ ca_monop_rad_2pi_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
24642
24601
|
p1 = q1 + k; p2 = q2 + k;
|
|
24643
24602
|
{ {
|
|
24644
24603
|
double _two_pi = 2.0 * M_PI;
|
|
24645
|
-
double
|
|
24646
|
-
|
|
24647
|
-
(*p2)
|
|
24648
|
-
? (_fa - floor(_fa)) * _two_pi
|
|
24649
|
-
: (_fa - ceil(_fa) + 1.0) * _two_pi;
|
|
24604
|
+
double _fa = (double)(*p1) / _two_pi;
|
|
24605
|
+
(*p2) = (_fa - floor(_fa)) * _two_pi;
|
|
24606
|
+
if ( (*p2) >= _two_pi ) (*p2) = 0.0; /* a tiny negative rounds to the top */
|
|
24650
24607
|
}
|
|
24651
24608
|
}
|
|
24652
24609
|
}
|
|
@@ -24658,11 +24615,9 @@ ca_monop_rad_2pi_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
24658
24615
|
for (k=0; k<n; k++) {
|
|
24659
24616
|
{ {
|
|
24660
24617
|
double _two_pi = 2.0 * M_PI;
|
|
24661
|
-
double
|
|
24662
|
-
|
|
24663
|
-
(*p2)
|
|
24664
|
-
? (_fa - floor(_fa)) * _two_pi
|
|
24665
|
-
: (_fa - ceil(_fa) + 1.0) * _two_pi;
|
|
24618
|
+
double _fa = (double)(*p1) / _two_pi;
|
|
24619
|
+
(*p2) = (_fa - floor(_fa)) * _two_pi;
|
|
24620
|
+
if ( (*p2) >= _two_pi ) (*p2) = 0.0; /* a tiny negative rounds to the top */
|
|
24666
24621
|
}
|
|
24667
24622
|
}
|
|
24668
24623
|
p1 += i1; p2 += i2;
|
|
@@ -24691,10 +24646,9 @@ ca_monop_rad_2pi_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
24691
24646
|
VALUE _obj_arg = (*p1);
|
|
24692
24647
|
if (RB_FLOAT_TYPE_P(_obj_arg) || RB_INTEGER_TYPE_P(_obj_arg) || RB_TYPE_P(_obj_arg, T_RATIONAL)) {
|
|
24693
24648
|
double _two_pi = 2.0 * M_PI;
|
|
24694
|
-
double
|
|
24695
|
-
double
|
|
24696
|
-
(*p2) = DBL2NUM(
|
|
24697
|
-
: (_fa - ceil(_fa) + 1.0) * _two_pi);
|
|
24649
|
+
double _fa = NUM2DBL(_obj_arg) / _two_pi;
|
|
24650
|
+
double _r = (_fa - floor(_fa)) * _two_pi;
|
|
24651
|
+
(*p2) = DBL2NUM(_r >= _two_pi ? 0.0 : _r);
|
|
24698
24652
|
} else {
|
|
24699
24653
|
(*p2) = rb_funcall(_obj_arg, rb_intern("rad_2pi"), 0);
|
|
24700
24654
|
}
|
|
@@ -24724,10 +24678,9 @@ ca_monop_rad_2pi_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
24724
24678
|
VALUE _obj_arg = (*p1);
|
|
24725
24679
|
if (RB_FLOAT_TYPE_P(_obj_arg) || RB_INTEGER_TYPE_P(_obj_arg) || RB_TYPE_P(_obj_arg, T_RATIONAL)) {
|
|
24726
24680
|
double _two_pi = 2.0 * M_PI;
|
|
24727
|
-
double
|
|
24728
|
-
double
|
|
24729
|
-
(*p2) = DBL2NUM(
|
|
24730
|
-
: (_fa - ceil(_fa) + 1.0) * _two_pi);
|
|
24681
|
+
double _fa = NUM2DBL(_obj_arg) / _two_pi;
|
|
24682
|
+
double _r = (_fa - floor(_fa)) * _two_pi;
|
|
24683
|
+
(*p2) = DBL2NUM(_r >= _two_pi ? 0.0 : _r);
|
|
24731
24684
|
} else {
|
|
24732
24685
|
(*p2) = rb_funcall(_obj_arg, rb_intern("rad_2pi"), 0);
|
|
24733
24686
|
}
|
|
@@ -24744,10 +24697,9 @@ ca_monop_rad_2pi_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
24744
24697
|
VALUE _obj_arg = (*p1);
|
|
24745
24698
|
if (RB_FLOAT_TYPE_P(_obj_arg) || RB_INTEGER_TYPE_P(_obj_arg) || RB_TYPE_P(_obj_arg, T_RATIONAL)) {
|
|
24746
24699
|
double _two_pi = 2.0 * M_PI;
|
|
24747
|
-
double
|
|
24748
|
-
double
|
|
24749
|
-
(*p2) = DBL2NUM(
|
|
24750
|
-
: (_fa - ceil(_fa) + 1.0) * _two_pi);
|
|
24700
|
+
double _fa = NUM2DBL(_obj_arg) / _two_pi;
|
|
24701
|
+
double _r = (_fa - floor(_fa)) * _two_pi;
|
|
24702
|
+
(*p2) = DBL2NUM(_r >= _two_pi ? 0.0 : _r);
|
|
24751
24703
|
} else {
|
|
24752
24704
|
(*p2) = rb_funcall(_obj_arg, rb_intern("rad_2pi"), 0);
|
|
24753
24705
|
}
|
|
@@ -24762,10 +24714,9 @@ ca_monop_rad_2pi_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
24762
24714
|
VALUE _obj_arg = (*p1);
|
|
24763
24715
|
if (RB_FLOAT_TYPE_P(_obj_arg) || RB_INTEGER_TYPE_P(_obj_arg) || RB_TYPE_P(_obj_arg, T_RATIONAL)) {
|
|
24764
24716
|
double _two_pi = 2.0 * M_PI;
|
|
24765
|
-
double
|
|
24766
|
-
double
|
|
24767
|
-
(*p2) = DBL2NUM(
|
|
24768
|
-
: (_fa - ceil(_fa) + 1.0) * _two_pi);
|
|
24717
|
+
double _fa = NUM2DBL(_obj_arg) / _two_pi;
|
|
24718
|
+
double _r = (_fa - floor(_fa)) * _two_pi;
|
|
24719
|
+
(*p2) = DBL2NUM(_r >= _two_pi ? 0.0 : _r);
|
|
24769
24720
|
} else {
|
|
24770
24721
|
(*p2) = rb_funcall(_obj_arg, rb_intern("rad_2pi"), 0);
|
|
24771
24722
|
}
|
|
@@ -24782,10 +24733,9 @@ ca_monop_rad_2pi_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
24782
24733
|
VALUE _obj_arg = (*p1);
|
|
24783
24734
|
if (RB_FLOAT_TYPE_P(_obj_arg) || RB_INTEGER_TYPE_P(_obj_arg) || RB_TYPE_P(_obj_arg, T_RATIONAL)) {
|
|
24784
24735
|
double _two_pi = 2.0 * M_PI;
|
|
24785
|
-
double
|
|
24786
|
-
double
|
|
24787
|
-
(*p2) = DBL2NUM(
|
|
24788
|
-
: (_fa - ceil(_fa) + 1.0) * _two_pi);
|
|
24736
|
+
double _fa = NUM2DBL(_obj_arg) / _two_pi;
|
|
24737
|
+
double _r = (_fa - floor(_fa)) * _two_pi;
|
|
24738
|
+
(*p2) = DBL2NUM(_r >= _two_pi ? 0.0 : _r);
|
|
24789
24739
|
} else {
|
|
24790
24740
|
(*p2) = rb_funcall(_obj_arg, rb_intern("rad_2pi"), 0);
|
|
24791
24741
|
}
|
data/ext/carray_lazy.c
CHANGED
|
@@ -788,6 +788,21 @@ ca_lazy_arena_acquire_object (ca_size_t n_elements)
|
|
|
788
788
|
return ptr;
|
|
789
789
|
}
|
|
790
790
|
|
|
791
|
+
/* The caller is about to overwrite a scratch's VALUEs with cells of another
|
|
792
|
+
data type: from here on they are not to be marked. */
|
|
793
|
+
void
|
|
794
|
+
ca_lazy_arena_untag_objects (void *ptr)
|
|
795
|
+
{
|
|
796
|
+
ca_lazy_arena_t *arena = ca_lazy_arena_get();
|
|
797
|
+
int i;
|
|
798
|
+
for ( i = 0; i < CA_LAZY_ARENA_SLOTS; i++ ) {
|
|
799
|
+
if ( arena->slots[i].ptr == ptr ) {
|
|
800
|
+
arena->slots[i].object_elements = 0;
|
|
801
|
+
return;
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
|
|
791
806
|
static void
|
|
792
807
|
ca_lazy_arena_mark_object_slots (ca_lazy_arena_t *arena)
|
|
793
808
|
{
|
|
@@ -1286,7 +1301,7 @@ ca_mask_of_operands_func_clone (void *ap)
|
|
|
1286
1301
|
static int
|
|
1287
1302
|
ca_mask_of_operands_operand_is_scalar (CAMaskOfOperands *lm, CArray *op)
|
|
1288
1303
|
{
|
|
1289
|
-
return
|
|
1304
|
+
return op->elements == 1;
|
|
1290
1305
|
}
|
|
1291
1306
|
|
|
1292
1307
|
static void
|
data/ext/carray_loop.c
CHANGED
|
@@ -20,6 +20,7 @@ rb_ca_s_each_index_internal (int ndim, VALUE *dim, uint8_t indim, VALUE ridx)
|
|
|
20
20
|
int32_t is_leaf = (indim == ndim - 1);
|
|
21
21
|
ca_size_t i;
|
|
22
22
|
|
|
23
|
+
if ( ! NIL_P(dim[indim]) ) ca_integer_arg(dim[indim], "a dimension", "each_index");
|
|
23
24
|
if ( NIL_P(dim[indim]) ) {
|
|
24
25
|
rb_ary_store(ridx, indim, Qnil);
|
|
25
26
|
if ( is_leaf ) {
|
|
@@ -140,15 +141,21 @@ rb_ca_index_walk (VALUE self, CArray *ca, int8_t level,
|
|
|
140
141
|
that want the whole subscript should write |*idx|. */
|
|
141
142
|
if ( mode & CA_LOOP_WITH_VALUE ) {
|
|
142
143
|
int argc = (int)ca->ndim + 1;
|
|
143
|
-
argv[0] =
|
|
144
|
+
argv[0] = ( mode & CA_LOOP_STORE )
|
|
145
|
+
? rb_ca_fetch_addr(self, ca_index2addr(ca, idx))
|
|
146
|
+
: rb_ca_fetch_index(self, idx);
|
|
144
147
|
MEMCPY(argv + 1, RARRAY_CONST_PTR(ridx), VALUE, ca->ndim);
|
|
145
148
|
obj = rb_yield_values2(argc, argv);
|
|
146
149
|
}
|
|
147
150
|
else {
|
|
148
151
|
obj = rb_yield_values2((int)ca->ndim, RARRAY_CONST_PTR(ridx));
|
|
149
152
|
}
|
|
153
|
+
/* map_index! writes in self's attach window. The buffer is what the
|
|
154
|
+
sync sends to the parent; a store by subscript goes past it to the
|
|
155
|
+
root and the sync then puts the old values back (rule R5). The
|
|
156
|
+
flat address reads and writes the buffer, as map! does. */
|
|
150
157
|
if ( mode & CA_LOOP_STORE ) {
|
|
151
|
-
|
|
158
|
+
rb_ca_store_addr(self, ca_index2addr(ca, idx), obj);
|
|
152
159
|
}
|
|
153
160
|
ret = obj;
|
|
154
161
|
}
|