@@ -5,33 +5,33 @@ use num_traits::Float;
5
5
use crate :: imp_prelude:: * ;
6
6
7
7
macro_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] ) *
10
10
pub fn $id1( & self ) -> Array <bool , D > {
11
11
self . mapv( A :: $func)
12
12
}
13
13
$( #[ $meta2] ) *
14
14
pub fn $id2( & self ) -> bool {
15
15
self . mapv( A :: $func) . iter( ) . any( |& b|b)
16
- }
16
+ } ) +
17
17
} ;
18
18
}
19
19
20
20
macro_rules! unary_op {
21
- ( $( #[ $meta: meta] ) * fn $id: ident) => {
22
- $( #[ $meta] ) *
21
+ ( $( $ ( #[ $meta: meta] ) * fn $id: ident) + ) => {
22
+ $( $ ( #[ $meta] ) *
23
23
pub fn $id( & self ) -> Array <A , D > {
24
24
self . mapv( A :: $id)
25
- }
25
+ } ) +
26
26
} ;
27
27
}
28
28
29
29
macro_rules! binary_op {
30
- ( $( #[ $meta: meta] ) * fn $id: ident( $ty: ty) ) => {
31
- $( #[ $meta] ) *
30
+ ( $( $ ( #[ $meta: meta] ) * fn $id: ident( $ty: ty) ) + ) => {
31
+ $( $ ( #[ $meta] ) *
32
32
pub fn $id( & self , rhs: $ty) -> Array <A , D > {
33
33
self . mapv( |v| A :: $id( v, rhs) )
34
- }
34
+ } ) +
35
35
} ;
36
36
}
37
37
49
49
fn is_nan
50
50
/// Return `true` if any element is `NaN` (not a number).
51
51
fn is_nan_any -> is_nan
52
- }
53
- boolean_op ! {
52
+
54
53
/// If the number is infinity, then `true` is returned for each element.
55
54
fn is_infinite
56
55
/// Return `true` if any element is infinity.
@@ -59,111 +58,88 @@ where
59
58
unary_op ! {
60
59
/// The largest integer less than or equal to each element.
61
60
fn floor
62
- }
63
- unary_op ! {
61
+
64
62
/// The smallest integer less than or equal to each element.
65
63
fn ceil
66
- }
67
- unary_op ! {
64
+
68
65
/// The nearest integer of each element.
69
66
fn round
70
- }
71
- unary_op ! {
67
+
72
68
/// The integer part of each element.
73
69
fn trunc
74
- }
75
- unary_op ! {
70
+
76
71
/// The fractional part of each element.
77
72
fn fract
78
- }
79
- unary_op ! {
73
+
80
74
/// Absolute of each element.
81
75
fn abs
82
- }
83
- unary_op ! {
76
+
84
77
/// Sign number of each element.
85
78
///
86
79
/// + `1.0` for all positive numbers.
87
80
/// + `-1.0` for all negative numbers.
88
81
/// + `NaN` for all `NaN` (not a number).
89
82
fn signum
90
- }
91
- unary_op ! {
83
+
92
84
/// The reciprocal (inverse) of each element, `1/x`.
93
85
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
- }
110
86
111
- unary_op ! {
112
87
/// Square root of each element.
113
88
fn sqrt
114
- }
115
- unary_op ! {
89
+
116
90
/// `e^x` of each element. (Exponential function)
117
91
fn exp
118
- }
119
- unary_op ! {
92
+
120
93
/// `2^x` of each element.
121
94
fn exp2
122
- }
123
- unary_op ! {
95
+
124
96
/// Natural logarithm of each element.
125
97
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
+
132
99
/// Base 2 logarithm of each element.
133
100
fn log2
134
- }
135
- unary_op ! {
101
+
136
102
/// Base 10 logarithm of each element.
137
103
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
+
144
105
/// Cubic root of each element.
145
106
fn cbrt
146
- }
147
- unary_op ! {
107
+
148
108
/// Sine of each element. (in radians)
149
109
fn sin
150
- }
151
- unary_op ! {
110
+
152
111
/// Cosine of each element. (in radians)
153
112
fn cos
154
- }
155
- unary_op ! {
113
+
156
114
/// Tangent of each element. (in radians)
157
115
fn tan
158
- }
159
- unary_op ! {
116
+
160
117
/// Converts radians to degrees for each element.
161
118
fn to_degrees
162
- }
163
- unary_op ! {
119
+
164
120
/// Converts degrees to radians for each element.
165
121
fn to_radians
166
122
}
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
+ }
167
143
168
144
/// Limit the values for each element.
169
145
///
0 commit comments