@@ -26,6 +26,24 @@ array sum(const array &in, const int dim, const double nanval) {
26
26
return array (out);
27
27
}
28
28
29
+ void sumByKey (array &keys_out, array &vals_out, const array &keys,
30
+ const array &vals, const int dim) {
31
+ af_array okeys, ovals;
32
+ AF_THROW (af_sum_by_key (&okeys, &ovals, keys.get (), vals.get (),
33
+ getFNSD (dim, vals.dims ())));
34
+ keys_out = array (okeys);
35
+ vals_out = array (ovals);
36
+ }
37
+
38
+ void sumByKey (array &keys_out, array &vals_out, const array &keys,
39
+ const array &vals, const int dim, const double nanval) {
40
+ af_array okeys, ovals;
41
+ AF_THROW (
42
+ af_sum_nan_by_key (&okeys, &ovals, keys.get (), vals.get (), dim, nanval));
43
+ keys_out = array (okeys);
44
+ vals_out = array (ovals);
45
+ }
46
+
29
47
array product (const array &in, const int dim) {
30
48
af_array out = 0 ;
31
49
AF_THROW (af_product (&out, in.get (), getFNSD (dim, in.dims ())));
@@ -38,6 +56,24 @@ array product(const array &in, const int dim, const double nanval) {
38
56
return array (out);
39
57
}
40
58
59
+ void productByKey (array &keys_out, array &vals_out, const array &keys,
60
+ const array &vals, const int dim) {
61
+ af_array okeys, ovals;
62
+ AF_THROW (af_product_by_key (&okeys, &ovals, keys.get (), vals.get (),
63
+ getFNSD (dim, vals.dims ())));
64
+ keys_out = array (okeys);
65
+ vals_out = array (ovals);
66
+ }
67
+
68
+ void productByKey (array &keys_out, array &vals_out, const array &keys,
69
+ const array &vals, const int dim, const double nanval) {
70
+ af_array okeys, ovals;
71
+ AF_THROW (af_product_nan_by_key (&okeys, &ovals, keys.get (), vals.get (), dim,
72
+ nanval));
73
+ keys_out = array (okeys);
74
+ vals_out = array (ovals);
75
+ }
76
+
41
77
array mul (const array &in, const int dim) { return product (in, dim); }
42
78
43
79
array min (const array &in, const int dim) {
@@ -46,12 +82,30 @@ array min(const array &in, const int dim) {
46
82
return array (out);
47
83
}
48
84
85
+ void minByKey (array &keys_out, array &vals_out, const array &keys,
86
+ const array &vals, const int dim) {
87
+ af_array okeys, ovals;
88
+ AF_THROW (af_min_by_key (&okeys, &ovals, keys.get (), vals.get (),
89
+ getFNSD (dim, vals.dims ())));
90
+ keys_out = array (okeys);
91
+ vals_out = array (ovals);
92
+ }
93
+
49
94
array max (const array &in, const int dim) {
50
95
af_array out = 0 ;
51
96
AF_THROW (af_max (&out, in.get (), getFNSD (dim, in.dims ())));
52
97
return array (out);
53
98
}
54
99
100
+ void maxByKey (array &keys_out, array &vals_out, const array &keys,
101
+ const array &vals, const int dim) {
102
+ af_array okeys, ovals;
103
+ AF_THROW (af_max_by_key (&okeys, &ovals, keys.get (), vals.get (),
104
+ getFNSD (dim, vals.dims ())));
105
+ keys_out = array (okeys);
106
+ vals_out = array (ovals);
107
+ }
108
+
55
109
// 2.1 compatibility
56
110
array alltrue (const array &in, const int dim) { return allTrue (in, dim); }
57
111
array allTrue (const array &in, const int dim) {
@@ -60,6 +114,15 @@ array allTrue(const array &in, const int dim) {
60
114
return array (out);
61
115
}
62
116
117
+ void allTrueByKey (array &keys_out, array &vals_out, const array &keys,
118
+ const array &vals, const int dim) {
119
+ af_array okeys, ovals;
120
+ AF_THROW (af_all_true_by_key (&okeys, &ovals, keys.get (), vals.get (),
121
+ getFNSD (dim, vals.dims ())));
122
+ keys_out = array (okeys);
123
+ vals_out = array (ovals);
124
+ }
125
+
63
126
// 2.1 compatibility
64
127
array anytrue (const array &in, const int dim) { return anyTrue (in, dim); }
65
128
array anyTrue (const array &in, const int dim) {
@@ -68,12 +131,30 @@ array anyTrue(const array &in, const int dim) {
68
131
return array (out);
69
132
}
70
133
134
+ void anyTrueByKey (array &keys_out, array &vals_out, const array &keys,
135
+ const array &vals, const int dim) {
136
+ af_array okeys, ovals;
137
+ AF_THROW (af_any_true_by_key (&okeys, &ovals, keys.get (), vals.get (),
138
+ getFNSD (dim, vals.dims ())));
139
+ keys_out = array (okeys);
140
+ vals_out = array (ovals);
141
+ }
142
+
71
143
array count (const array &in, const int dim) {
72
144
af_array out = 0 ;
73
145
AF_THROW (af_count (&out, in.get (), getFNSD (dim, in.dims ())));
74
146
return array (out);
75
147
}
76
148
149
+ void countByKey (array &keys_out, array &vals_out, const array &keys,
150
+ const array &vals, const int dim) {
151
+ af_array okeys, ovals;
152
+ AF_THROW (af_count_by_key (&okeys, &ovals, keys.get (), vals.get (),
153
+ getFNSD (dim, vals.dims ())));
154
+ keys_out = array (okeys);
155
+ vals_out = array (ovals);
156
+ }
157
+
77
158
void min (array &val, array &idx, const array &in, const int dim) {
78
159
af_array out = 0 ;
79
160
af_array loc = 0 ;
@@ -107,15 +188,15 @@ void max(array &val, array &idx, const array &in, const int dim) {
107
188
INSTANTIATE_CPLX (fnC, fnCPP, af_cdouble, double )
108
189
109
190
#define INSTANTIATE_REAL (fnC, fnCPP, T ) \
110
- template <> \
191
+ template <> \
111
192
AFAPI T fnCPP (const array &in) { \
112
193
double rval, ival; \
113
194
AF_THROW (af_##fnC##_all (&rval, &ival, in.get ())); \
114
195
return (T)(rval); \
115
196
}
116
197
117
198
#define INSTANTIATE_CPLX (fnC, fnCPP, T, Tr ) \
118
- template <> \
199
+ template <> \
119
200
AFAPI T fnCPP (const array &in) { \
120
201
double rval, ival; \
121
202
AF_THROW (af_##fnC##_all (&rval, &ival, in.get ())); \
@@ -138,15 +219,15 @@ INSTANTIATE_REAL(any_true, anyTrue, bool);
138
219
#undef INSTANTIATE_CPLX
139
220
140
221
#define INSTANTIATE_REAL (fnC, fnCPP, T ) \
141
- template <> \
222
+ template <> \
142
223
AFAPI T fnCPP (const array &in, const double nanval) { \
143
224
double rval, ival; \
144
225
AF_THROW (af_##fnC##_all (&rval, &ival, in.get (), nanval)); \
145
226
return (T)(rval); \
146
227
}
147
228
148
229
#define INSTANTIATE_CPLX (fnC, fnCPP, T, Tr ) \
149
- template <> \
230
+ template <> \
150
231
AFAPI T fnCPP (const array &in, const double nanval) { \
151
232
double rval, ival; \
152
233
AF_THROW (af_##fnC##_all (&rval, &ival, in.get (), nanval)); \
@@ -162,7 +243,7 @@ INSTANTIATE(product_nan, product)
162
243
#undef INSTANTIATE
163
244
164
245
#define INSTANTIATE_COMPAT (fnCPP, fnCompat, T ) \
165
- template <> \
246
+ template <> \
166
247
AFAPI T fnCompat (const array &in) { \
167
248
return fnCPP<T>(in); \
168
249
}
@@ -194,15 +275,15 @@ INSTANTIATE_COMPAT(anyTrue, anytrue, bool)
194
275
#undef INSTANTIATE_COMPAT
195
276
196
277
#define INSTANTIATE_REAL (fn, T ) \
197
- template <> \
278
+ template <> \
198
279
AFAPI void fn (T *val, unsigned *idx, const array &in) { \
199
280
double rval, ival; \
200
281
AF_THROW (af_i##fn##_all (&rval, &ival, idx, in.get ())); \
201
282
*val = (T)(rval); \
202
283
}
203
284
204
285
#define INSTANTIATE_CPLX (fn, T, Tr ) \
205
- template <> \
286
+ template <> \
206
287
AFAPI void fn (T *val, unsigned *idx, const array &in) { \
207
288
double rval, ival; \
208
289
AF_THROW (af_i##fn##_all (&rval, &ival, idx, in.get ())); \
0 commit comments