@@ -5,33 +5,33 @@ use num_traits::Float;
55use crate :: imp_prelude:: * ;
66
77macro_rules! boolean_op {
8- ( $( #[ $meta1: meta] ) * fn $id1: ident $( #[ $meta2: meta] ) * fn $id2: ident -> $func: ident) => {
9- $( #[ $meta1] ) *
8+ ( $( $ ( #[ $meta1: meta] ) * fn $id1: ident $( #[ $meta2: meta] ) * fn $id2: ident -> $func: ident) + ) => {
9+ $( $ ( #[ $meta1] ) *
1010 pub fn $id1( & self ) -> Array <bool , D > {
1111 self . mapv( A :: $func)
1212 }
1313 $( #[ $meta2] ) *
1414 pub fn $id2( & self ) -> bool {
1515 self . mapv( A :: $func) . iter( ) . any( |& b|b)
16- }
16+ } ) +
1717 } ;
1818}
1919
2020macro_rules! unary_op {
21- ( $( #[ $meta: meta] ) * fn $id: ident) => {
22- $( #[ $meta] ) *
21+ ( $( $ ( #[ $meta: meta] ) * fn $id: ident) + ) => {
22+ $( $ ( #[ $meta] ) *
2323 pub fn $id( & self ) -> Array <A , D > {
2424 self . mapv( A :: $id)
25- }
25+ } ) +
2626 } ;
2727}
2828
2929macro_rules! binary_op {
30- ( $( #[ $meta: meta] ) * fn $id: ident( $ty: ty) ) => {
31- $( #[ $meta] ) *
30+ ( $( $ ( #[ $meta: meta] ) * fn $id: ident( $ty: ty) ) + ) => {
31+ $( $ ( #[ $meta] ) *
3232 pub fn $id( & self , rhs: $ty) -> Array <A , D > {
3333 self . mapv( |v| A :: $id( v, rhs) )
34- }
34+ } ) +
3535 } ;
3636}
3737
4949 fn is_nan
5050 /// Return `true` if any element is `NaN` (not a number).
5151 fn is_nan_any -> is_nan
52- }
53- boolean_op ! {
52+
5453 /// If the number is infinity, then `true` is returned for each element.
5554 fn is_infinite
5655 /// Return `true` if any element is infinity.
@@ -59,111 +58,88 @@ where
5958 unary_op ! {
6059 /// The largest integer less than or equal to each element.
6160 fn floor
62- }
63- unary_op ! {
61+
6462 /// The smallest integer less than or equal to each element.
6563 fn ceil
66- }
67- unary_op ! {
64+
6865 /// The nearest integer of each element.
6966 fn round
70- }
71- unary_op ! {
67+
7268 /// The integer part of each element.
7369 fn trunc
74- }
75- unary_op ! {
70+
7671 /// The fractional part of each element.
7772 fn fract
78- }
79- unary_op ! {
73+
8074 /// Absolute of each element.
8175 fn abs
82- }
83- unary_op ! {
76+
8477 /// Sign number of each element.
8578 ///
8679 /// + `1.0` for all positive numbers.
8780 /// + `-1.0` for all negative numbers.
8881 /// + `NaN` for all `NaN` (not a number).
8982 fn signum
90- }
91- unary_op ! {
83+
9284 /// The reciprocal (inverse) of each element, `1/x`.
9385 fn recip
94- }
95- binary_op ! {
96- /// Integer power of each element.
97- ///
98- /// This function is generally faster than using float power.
99- fn powi( i32 )
100- }
101- binary_op ! {
102- /// Float power of each element.
103- fn powf( A )
104- }
105-
106- /// Square of each element.
107- pub fn square ( & self ) -> Array < A , D > {
108- self . mapv ( |v| v * v)
109- }
11086
111- unary_op ! {
11287 /// Square root of each element.
11388 fn sqrt
114- }
115- unary_op ! {
89+
11690 /// `e^x` of each element. (Exponential function)
11791 fn exp
118- }
119- unary_op ! {
92+
12093 /// `2^x` of each element.
12194 fn exp2
122- }
123- unary_op ! {
95+
12496 /// Natural logarithm of each element.
12597 fn ln
126- }
127- binary_op ! {
128- /// Logarithm of each element with respect to an arbitrary base.
129- fn log( A )
130- }
131- unary_op ! {
98+
13299 /// Base 2 logarithm of each element.
133100 fn log2
134- }
135- unary_op ! {
101+
136102 /// Base 10 logarithm of each element.
137103 fn log10
138- }
139- binary_op ! {
140- /// The positive difference between given number and each element.
141- fn abs_sub( A )
142- }
143- unary_op ! {
104+
144105 /// Cubic root of each element.
145106 fn cbrt
146- }
147- unary_op ! {
107+
148108 /// Sine of each element. (in radians)
149109 fn sin
150- }
151- unary_op ! {
110+
152111 /// Cosine of each element. (in radians)
153112 fn cos
154- }
155- unary_op ! {
113+
156114 /// Tangent of each element. (in radians)
157115 fn tan
158- }
159- unary_op ! {
116+
160117 /// Converts radians to degrees for each element.
161118 fn to_degrees
162- }
163- unary_op ! {
119+
164120 /// Converts degrees to radians for each element.
165121 fn to_radians
166122 }
123+ binary_op ! {
124+ /// Integer power of each element.
125+ ///
126+ /// This function is generally faster than using float power.
127+ fn powi( i32 )
128+
129+ /// Float power of each element.
130+ fn powf( A )
131+
132+ /// Logarithm of each element with respect to an arbitrary base.
133+ fn log( A )
134+
135+ /// The positive difference between given number and each element.
136+ fn abs_sub( A )
137+ }
138+
139+ /// Square of each element.
140+ pub fn square ( & self ) -> Array < A , D > {
141+ self . mapv ( |v| v * v)
142+ }
167143
168144 /// Limit the values for each element.
169145 ///
0 commit comments