Chris@49
|
1 // Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
|
Chris@49
|
2 // Copyright (C) 2008-2013 Conrad Sanderson
|
Chris@49
|
3 //
|
Chris@49
|
4 // This Source Code Form is subject to the terms of the Mozilla Public
|
Chris@49
|
5 // License, v. 2.0. If a copy of the MPL was not distributed with this
|
Chris@49
|
6 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
Chris@49
|
7
|
Chris@49
|
8
|
Chris@49
|
9 //! \addtogroup fn_elem
|
Chris@49
|
10 //! @{
|
Chris@49
|
11
|
Chris@49
|
12
|
Chris@49
|
13
|
Chris@49
|
14 //
|
Chris@49
|
15 // find
|
Chris@49
|
16
|
Chris@49
|
17 template<typename eT, typename T1>
|
Chris@49
|
18 inline
|
Chris@49
|
19 const mtOp<uword, T1, op_find>
|
Chris@49
|
20 find(const Base<eT,T1>& X, const uword k = 0, const char* direction = "first")
|
Chris@49
|
21 {
|
Chris@49
|
22 arma_extra_debug_sigprint();
|
Chris@49
|
23
|
Chris@49
|
24 const char sig = direction[0];
|
Chris@49
|
25
|
Chris@49
|
26 arma_debug_check
|
Chris@49
|
27 (
|
Chris@49
|
28 (sig != 'f' && sig != 'F' && sig != 'l' && sig != 'L'),
|
Chris@49
|
29 "find(): 3rd input argument must be \"first\" or \"last\""
|
Chris@49
|
30 );
|
Chris@49
|
31
|
Chris@49
|
32 const uword type = (sig == 'f' || sig == 'F') ? 0 : 1;
|
Chris@49
|
33
|
Chris@49
|
34 return mtOp<uword, T1, op_find>(X.get_ref(), k, type);
|
Chris@49
|
35 }
|
Chris@49
|
36
|
Chris@49
|
37
|
Chris@49
|
38
|
Chris@49
|
39 //
|
Chris@49
|
40 // real
|
Chris@49
|
41
|
Chris@49
|
42 template<typename T1>
|
Chris@49
|
43 arma_inline
|
Chris@49
|
44 const T1&
|
Chris@49
|
45 real(const Base<typename T1::pod_type, T1>& X)
|
Chris@49
|
46 {
|
Chris@49
|
47 arma_extra_debug_sigprint();
|
Chris@49
|
48
|
Chris@49
|
49 return X.get_ref();
|
Chris@49
|
50 }
|
Chris@49
|
51
|
Chris@49
|
52
|
Chris@49
|
53
|
Chris@49
|
54 template<typename T1>
|
Chris@49
|
55 arma_inline
|
Chris@49
|
56 const T1&
|
Chris@49
|
57 real(const BaseCube<typename T1::pod_type, T1>& X)
|
Chris@49
|
58 {
|
Chris@49
|
59 arma_extra_debug_sigprint();
|
Chris@49
|
60
|
Chris@49
|
61 return X.get_ref();
|
Chris@49
|
62 }
|
Chris@49
|
63
|
Chris@49
|
64
|
Chris@49
|
65
|
Chris@49
|
66 template<typename T1>
|
Chris@49
|
67 inline
|
Chris@49
|
68 const mtOp<typename T1::pod_type, T1, op_real>
|
Chris@49
|
69 real(const Base<std::complex<typename T1::pod_type>, T1>& X)
|
Chris@49
|
70 {
|
Chris@49
|
71 arma_extra_debug_sigprint();
|
Chris@49
|
72
|
Chris@49
|
73 return mtOp<typename T1::pod_type, T1, op_real>( X.get_ref() );
|
Chris@49
|
74 }
|
Chris@49
|
75
|
Chris@49
|
76
|
Chris@49
|
77
|
Chris@49
|
78 template<typename T1>
|
Chris@49
|
79 inline
|
Chris@49
|
80 const mtOpCube<typename T1::pod_type, T1, op_real>
|
Chris@49
|
81 real(const BaseCube<std::complex<typename T1::pod_type>, T1>& X)
|
Chris@49
|
82 {
|
Chris@49
|
83 arma_extra_debug_sigprint();
|
Chris@49
|
84
|
Chris@49
|
85 return mtOpCube<typename T1::pod_type, T1, op_real>( X.get_ref() );
|
Chris@49
|
86 }
|
Chris@49
|
87
|
Chris@49
|
88
|
Chris@49
|
89
|
Chris@49
|
90 //
|
Chris@49
|
91 // imag
|
Chris@49
|
92
|
Chris@49
|
93 template<typename T1>
|
Chris@49
|
94 inline
|
Chris@49
|
95 const Gen< Mat<typename T1::pod_type>, gen_zeros >
|
Chris@49
|
96 imag(const Base<typename T1::pod_type,T1>& X)
|
Chris@49
|
97 {
|
Chris@49
|
98 arma_extra_debug_sigprint();
|
Chris@49
|
99
|
Chris@49
|
100 const Proxy<T1> A(X.get_ref());
|
Chris@49
|
101
|
Chris@49
|
102 return Gen< Mat<typename T1::pod_type>, gen_zeros>(A.get_n_rows(), A.get_n_cols());
|
Chris@49
|
103 }
|
Chris@49
|
104
|
Chris@49
|
105
|
Chris@49
|
106
|
Chris@49
|
107 template<typename T1>
|
Chris@49
|
108 inline
|
Chris@49
|
109 const GenCube<typename T1::pod_type, gen_zeros>
|
Chris@49
|
110 imag(const BaseCube<typename T1::pod_type,T1>& X)
|
Chris@49
|
111 {
|
Chris@49
|
112 arma_extra_debug_sigprint();
|
Chris@49
|
113
|
Chris@49
|
114 const ProxyCube<T1> A(X.get_ref());
|
Chris@49
|
115
|
Chris@49
|
116 return GenCube<typename T1::pod_type, gen_zeros>(A.get_n_rows(), A.get_n_cols(), A.get_n_slices());
|
Chris@49
|
117 }
|
Chris@49
|
118
|
Chris@49
|
119
|
Chris@49
|
120
|
Chris@49
|
121 template<typename T1>
|
Chris@49
|
122 inline
|
Chris@49
|
123 const mtOp<typename T1::pod_type, T1, op_imag>
|
Chris@49
|
124 imag(const Base<std::complex<typename T1::pod_type>, T1>& X)
|
Chris@49
|
125 {
|
Chris@49
|
126 arma_extra_debug_sigprint();
|
Chris@49
|
127
|
Chris@49
|
128 return mtOp<typename T1::pod_type, T1, op_imag>( X.get_ref() );
|
Chris@49
|
129 }
|
Chris@49
|
130
|
Chris@49
|
131
|
Chris@49
|
132
|
Chris@49
|
133 template<typename T1>
|
Chris@49
|
134 inline
|
Chris@49
|
135 const mtOpCube<typename T1::pod_type, T1, op_imag>
|
Chris@49
|
136 imag(const BaseCube<std::complex<typename T1::pod_type>,T1>& X)
|
Chris@49
|
137 {
|
Chris@49
|
138 arma_extra_debug_sigprint();
|
Chris@49
|
139
|
Chris@49
|
140 return mtOpCube<typename T1::pod_type, T1, op_imag>( X.get_ref() );
|
Chris@49
|
141 }
|
Chris@49
|
142
|
Chris@49
|
143
|
Chris@49
|
144
|
Chris@49
|
145 //
|
Chris@49
|
146 // log
|
Chris@49
|
147
|
Chris@49
|
148 template<typename T1>
|
Chris@49
|
149 arma_inline
|
Chris@49
|
150 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_log> >::result
|
Chris@49
|
151 log(const T1& A)
|
Chris@49
|
152 {
|
Chris@49
|
153 arma_extra_debug_sigprint();
|
Chris@49
|
154
|
Chris@49
|
155 return eOp<T1, eop_log>(A);
|
Chris@49
|
156 }
|
Chris@49
|
157
|
Chris@49
|
158
|
Chris@49
|
159
|
Chris@49
|
160 template<typename T1>
|
Chris@49
|
161 arma_inline
|
Chris@49
|
162 const eOpCube<T1, eop_log>
|
Chris@49
|
163 log(const BaseCube<typename T1::elem_type,T1>& A)
|
Chris@49
|
164 {
|
Chris@49
|
165 arma_extra_debug_sigprint();
|
Chris@49
|
166
|
Chris@49
|
167 return eOpCube<T1, eop_log>(A.get_ref());
|
Chris@49
|
168 }
|
Chris@49
|
169
|
Chris@49
|
170
|
Chris@49
|
171
|
Chris@49
|
172 //
|
Chris@49
|
173 // log2
|
Chris@49
|
174
|
Chris@49
|
175 template<typename T1>
|
Chris@49
|
176 arma_inline
|
Chris@49
|
177 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_log2> >::result
|
Chris@49
|
178 log2(const T1& A)
|
Chris@49
|
179 {
|
Chris@49
|
180 arma_extra_debug_sigprint();
|
Chris@49
|
181
|
Chris@49
|
182 return eOp<T1, eop_log2>(A);
|
Chris@49
|
183 }
|
Chris@49
|
184
|
Chris@49
|
185
|
Chris@49
|
186
|
Chris@49
|
187 template<typename T1>
|
Chris@49
|
188 arma_inline
|
Chris@49
|
189 const eOpCube<T1, eop_log2>
|
Chris@49
|
190 log2(const BaseCube<typename T1::elem_type,T1>& A)
|
Chris@49
|
191 {
|
Chris@49
|
192 arma_extra_debug_sigprint();
|
Chris@49
|
193
|
Chris@49
|
194 return eOpCube<T1, eop_log2>(A.get_ref());
|
Chris@49
|
195 }
|
Chris@49
|
196
|
Chris@49
|
197
|
Chris@49
|
198
|
Chris@49
|
199 //
|
Chris@49
|
200 // log10
|
Chris@49
|
201
|
Chris@49
|
202 template<typename T1>
|
Chris@49
|
203 arma_inline
|
Chris@49
|
204 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_log10> >::result
|
Chris@49
|
205 log10(const T1& A)
|
Chris@49
|
206 {
|
Chris@49
|
207 arma_extra_debug_sigprint();
|
Chris@49
|
208
|
Chris@49
|
209 return eOp<T1, eop_log10>(A);
|
Chris@49
|
210 }
|
Chris@49
|
211
|
Chris@49
|
212
|
Chris@49
|
213
|
Chris@49
|
214 template<typename T1>
|
Chris@49
|
215 arma_inline
|
Chris@49
|
216 const eOpCube<T1, eop_log10>
|
Chris@49
|
217 log10(const BaseCube<typename T1::elem_type,T1>& A)
|
Chris@49
|
218 {
|
Chris@49
|
219 arma_extra_debug_sigprint();
|
Chris@49
|
220
|
Chris@49
|
221 return eOpCube<T1, eop_log10>(A.get_ref());
|
Chris@49
|
222 }
|
Chris@49
|
223
|
Chris@49
|
224
|
Chris@49
|
225
|
Chris@49
|
226 //
|
Chris@49
|
227 // exp
|
Chris@49
|
228
|
Chris@49
|
229 template<typename T1>
|
Chris@49
|
230 arma_inline
|
Chris@49
|
231 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_exp> >::result
|
Chris@49
|
232 exp(const T1& A)
|
Chris@49
|
233 {
|
Chris@49
|
234 arma_extra_debug_sigprint();
|
Chris@49
|
235
|
Chris@49
|
236 return eOp<T1, eop_exp>(A);
|
Chris@49
|
237 }
|
Chris@49
|
238
|
Chris@49
|
239
|
Chris@49
|
240
|
Chris@49
|
241 template<typename T1>
|
Chris@49
|
242 arma_inline
|
Chris@49
|
243 const eOpCube<T1, eop_exp>
|
Chris@49
|
244 exp(const BaseCube<typename T1::elem_type,T1>& A)
|
Chris@49
|
245 {
|
Chris@49
|
246 arma_extra_debug_sigprint();
|
Chris@49
|
247
|
Chris@49
|
248 return eOpCube<T1, eop_exp>(A.get_ref());
|
Chris@49
|
249 }
|
Chris@49
|
250
|
Chris@49
|
251
|
Chris@49
|
252
|
Chris@49
|
253 // exp2
|
Chris@49
|
254
|
Chris@49
|
255 template<typename T1>
|
Chris@49
|
256 arma_inline
|
Chris@49
|
257 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_exp2> >::result
|
Chris@49
|
258 exp2(const T1& A)
|
Chris@49
|
259 {
|
Chris@49
|
260 arma_extra_debug_sigprint();
|
Chris@49
|
261
|
Chris@49
|
262 return eOp<T1, eop_exp2>(A);
|
Chris@49
|
263 }
|
Chris@49
|
264
|
Chris@49
|
265
|
Chris@49
|
266
|
Chris@49
|
267 template<typename T1>
|
Chris@49
|
268 arma_inline
|
Chris@49
|
269 const eOpCube<T1, eop_exp2>
|
Chris@49
|
270 exp2(const BaseCube<typename T1::elem_type,T1>& A)
|
Chris@49
|
271 {
|
Chris@49
|
272 arma_extra_debug_sigprint();
|
Chris@49
|
273
|
Chris@49
|
274 return eOpCube<T1, eop_exp2>(A.get_ref());
|
Chris@49
|
275 }
|
Chris@49
|
276
|
Chris@49
|
277
|
Chris@49
|
278
|
Chris@49
|
279 // exp10
|
Chris@49
|
280
|
Chris@49
|
281 template<typename T1>
|
Chris@49
|
282 arma_inline
|
Chris@49
|
283 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_exp10> >::result
|
Chris@49
|
284 exp10(const T1& A)
|
Chris@49
|
285 {
|
Chris@49
|
286 arma_extra_debug_sigprint();
|
Chris@49
|
287
|
Chris@49
|
288 return eOp<T1, eop_exp10>(A);
|
Chris@49
|
289 }
|
Chris@49
|
290
|
Chris@49
|
291
|
Chris@49
|
292
|
Chris@49
|
293 template<typename T1>
|
Chris@49
|
294 arma_inline
|
Chris@49
|
295 const eOpCube<T1, eop_exp10>
|
Chris@49
|
296 exp10(const BaseCube<typename T1::elem_type,T1>& A)
|
Chris@49
|
297 {
|
Chris@49
|
298 arma_extra_debug_sigprint();
|
Chris@49
|
299
|
Chris@49
|
300 return eOpCube<T1, eop_exp10>(A.get_ref());
|
Chris@49
|
301 }
|
Chris@49
|
302
|
Chris@49
|
303
|
Chris@49
|
304
|
Chris@49
|
305 //
|
Chris@49
|
306 // abs
|
Chris@49
|
307
|
Chris@49
|
308
|
Chris@49
|
309 template<typename T1>
|
Chris@49
|
310 arma_inline
|
Chris@49
|
311 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_abs> >::result
|
Chris@49
|
312 abs(const T1& X, const typename arma_not_cx<typename T1::elem_type>::result* junk = 0)
|
Chris@49
|
313 {
|
Chris@49
|
314 arma_extra_debug_sigprint();
|
Chris@49
|
315
|
Chris@49
|
316 arma_ignore(junk);
|
Chris@49
|
317
|
Chris@49
|
318 return eOp<T1, eop_abs>(X);
|
Chris@49
|
319 }
|
Chris@49
|
320
|
Chris@49
|
321
|
Chris@49
|
322
|
Chris@49
|
323 template<typename T1>
|
Chris@49
|
324 arma_inline
|
Chris@49
|
325 const eOpCube<T1, eop_abs>
|
Chris@49
|
326 abs(const BaseCube<typename T1::elem_type,T1>& X, const typename arma_not_cx<typename T1::elem_type>::result* junk = 0)
|
Chris@49
|
327 {
|
Chris@49
|
328 arma_extra_debug_sigprint();
|
Chris@49
|
329
|
Chris@49
|
330 arma_ignore(junk);
|
Chris@49
|
331
|
Chris@49
|
332 return eOpCube<T1, eop_abs>(X.get_ref());
|
Chris@49
|
333 }
|
Chris@49
|
334
|
Chris@49
|
335
|
Chris@49
|
336
|
Chris@49
|
337 template<typename T1>
|
Chris@49
|
338 inline
|
Chris@49
|
339 const mtOp<typename T1::pod_type, T1, op_abs>
|
Chris@49
|
340 abs(const Base<std::complex<typename T1::pod_type>, T1>& X, const typename arma_cx_only<typename T1::elem_type>::result* junk = 0)
|
Chris@49
|
341 {
|
Chris@49
|
342 arma_extra_debug_sigprint();
|
Chris@49
|
343
|
Chris@49
|
344 arma_ignore(junk);
|
Chris@49
|
345
|
Chris@49
|
346 return mtOp<typename T1::pod_type, T1, op_abs>( X.get_ref() );
|
Chris@49
|
347 }
|
Chris@49
|
348
|
Chris@49
|
349
|
Chris@49
|
350
|
Chris@49
|
351 template<typename T1>
|
Chris@49
|
352 inline
|
Chris@49
|
353 const mtOpCube<typename T1::pod_type, T1, op_abs>
|
Chris@49
|
354 abs(const BaseCube< std::complex<typename T1::pod_type>,T1>& X, const typename arma_cx_only<typename T1::elem_type>::result* junk = 0)
|
Chris@49
|
355 {
|
Chris@49
|
356 arma_extra_debug_sigprint();
|
Chris@49
|
357
|
Chris@49
|
358 arma_ignore(junk);
|
Chris@49
|
359
|
Chris@49
|
360 return mtOpCube<typename T1::pod_type, T1, op_abs>( X.get_ref() );
|
Chris@49
|
361 }
|
Chris@49
|
362
|
Chris@49
|
363
|
Chris@49
|
364
|
Chris@49
|
365 template<typename T1>
|
Chris@49
|
366 arma_inline
|
Chris@49
|
367 const SpOp<T1, spop_abs>
|
Chris@49
|
368 abs(const SpBase<typename T1::elem_type,T1>& X, const typename arma_not_cx<typename T1::elem_type>::result* junk = 0)
|
Chris@49
|
369 {
|
Chris@49
|
370 arma_extra_debug_sigprint();
|
Chris@49
|
371 arma_ignore(junk);
|
Chris@49
|
372
|
Chris@49
|
373 return SpOp<T1, spop_abs>(X.get_ref());
|
Chris@49
|
374 }
|
Chris@49
|
375
|
Chris@49
|
376
|
Chris@49
|
377
|
Chris@49
|
378 template<typename T1>
|
Chris@49
|
379 arma_inline
|
Chris@49
|
380 const mtSpOp<typename T1::pod_type, T1, spop_cx_abs>
|
Chris@49
|
381 abs(const SpBase< std::complex<typename T1::pod_type>, T1>& X, const typename arma_cx_only<typename T1::elem_type>::result* junk = 0)
|
Chris@49
|
382 {
|
Chris@49
|
383 arma_extra_debug_sigprint();
|
Chris@49
|
384 arma_ignore(junk);
|
Chris@49
|
385
|
Chris@49
|
386 return mtSpOp<typename T1::pod_type, T1, spop_cx_abs>(X.get_ref());
|
Chris@49
|
387 }
|
Chris@49
|
388
|
Chris@49
|
389
|
Chris@49
|
390
|
Chris@49
|
391 //
|
Chris@49
|
392 // square
|
Chris@49
|
393
|
Chris@49
|
394 template<typename T1>
|
Chris@49
|
395 arma_inline
|
Chris@49
|
396 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_square> >::result
|
Chris@49
|
397 square(const T1& A)
|
Chris@49
|
398 {
|
Chris@49
|
399 arma_extra_debug_sigprint();
|
Chris@49
|
400
|
Chris@49
|
401 return eOp<T1, eop_square>(A);
|
Chris@49
|
402 }
|
Chris@49
|
403
|
Chris@49
|
404
|
Chris@49
|
405
|
Chris@49
|
406 template<typename T1>
|
Chris@49
|
407 arma_inline
|
Chris@49
|
408 const eOpCube<T1, eop_square>
|
Chris@49
|
409 square(const BaseCube<typename T1::elem_type,T1>& A)
|
Chris@49
|
410 {
|
Chris@49
|
411 arma_extra_debug_sigprint();
|
Chris@49
|
412
|
Chris@49
|
413 return eOpCube<T1, eop_square>(A.get_ref());
|
Chris@49
|
414 }
|
Chris@49
|
415
|
Chris@49
|
416
|
Chris@49
|
417
|
Chris@49
|
418 template<typename T1>
|
Chris@49
|
419 arma_inline
|
Chris@49
|
420 const SpOp<T1, spop_square>
|
Chris@49
|
421 square(const SpBase<typename T1::elem_type,T1>& A)
|
Chris@49
|
422 {
|
Chris@49
|
423 arma_extra_debug_sigprint();
|
Chris@49
|
424
|
Chris@49
|
425 return SpOp<T1, spop_square>(A.get_ref());
|
Chris@49
|
426 }
|
Chris@49
|
427
|
Chris@49
|
428
|
Chris@49
|
429
|
Chris@49
|
430 //
|
Chris@49
|
431 // sqrt
|
Chris@49
|
432
|
Chris@49
|
433 template<typename T1>
|
Chris@49
|
434 arma_inline
|
Chris@49
|
435 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_sqrt> >::result
|
Chris@49
|
436 sqrt(const T1& A)
|
Chris@49
|
437 {
|
Chris@49
|
438 arma_extra_debug_sigprint();
|
Chris@49
|
439
|
Chris@49
|
440 return eOp<T1, eop_sqrt>(A);
|
Chris@49
|
441 }
|
Chris@49
|
442
|
Chris@49
|
443
|
Chris@49
|
444
|
Chris@49
|
445 template<typename T1>
|
Chris@49
|
446 arma_inline
|
Chris@49
|
447 const eOpCube<T1, eop_sqrt>
|
Chris@49
|
448 sqrt(const BaseCube<typename T1::elem_type,T1>& A)
|
Chris@49
|
449 {
|
Chris@49
|
450 arma_extra_debug_sigprint();
|
Chris@49
|
451
|
Chris@49
|
452 return eOpCube<T1, eop_sqrt>(A.get_ref());
|
Chris@49
|
453 }
|
Chris@49
|
454
|
Chris@49
|
455
|
Chris@49
|
456
|
Chris@49
|
457 template<typename T1>
|
Chris@49
|
458 arma_inline
|
Chris@49
|
459 const SpOp<T1, spop_sqrt>
|
Chris@49
|
460 sqrt(const SpBase<typename T1::elem_type,T1>& A)
|
Chris@49
|
461 {
|
Chris@49
|
462 arma_extra_debug_sigprint();
|
Chris@49
|
463
|
Chris@49
|
464 return SpOp<T1, spop_sqrt>(A.get_ref());
|
Chris@49
|
465 }
|
Chris@49
|
466
|
Chris@49
|
467
|
Chris@49
|
468
|
Chris@49
|
469 //
|
Chris@49
|
470 // conj
|
Chris@49
|
471
|
Chris@49
|
472 template<typename T1>
|
Chris@49
|
473 arma_inline
|
Chris@49
|
474 const T1&
|
Chris@49
|
475 conj(const Base<typename T1::pod_type,T1>& A)
|
Chris@49
|
476 {
|
Chris@49
|
477 arma_extra_debug_sigprint();
|
Chris@49
|
478
|
Chris@49
|
479 return A.get_ref();
|
Chris@49
|
480 }
|
Chris@49
|
481
|
Chris@49
|
482
|
Chris@49
|
483
|
Chris@49
|
484 template<typename T1>
|
Chris@49
|
485 arma_inline
|
Chris@49
|
486 const T1&
|
Chris@49
|
487 conj(const BaseCube<typename T1::pod_type,T1>& A)
|
Chris@49
|
488 {
|
Chris@49
|
489 arma_extra_debug_sigprint();
|
Chris@49
|
490
|
Chris@49
|
491 return A.get_ref();
|
Chris@49
|
492 }
|
Chris@49
|
493
|
Chris@49
|
494
|
Chris@49
|
495
|
Chris@49
|
496 template<typename T1>
|
Chris@49
|
497 arma_inline
|
Chris@49
|
498 const eOp<T1, eop_conj>
|
Chris@49
|
499 conj(const Base<std::complex<typename T1::pod_type>,T1>& A)
|
Chris@49
|
500 {
|
Chris@49
|
501 arma_extra_debug_sigprint();
|
Chris@49
|
502
|
Chris@49
|
503 return eOp<T1, eop_conj>(A.get_ref());
|
Chris@49
|
504 }
|
Chris@49
|
505
|
Chris@49
|
506
|
Chris@49
|
507
|
Chris@49
|
508 template<typename T1>
|
Chris@49
|
509 arma_inline
|
Chris@49
|
510 const eOpCube<T1, eop_conj>
|
Chris@49
|
511 conj(const BaseCube<std::complex<typename T1::pod_type>,T1>& A)
|
Chris@49
|
512 {
|
Chris@49
|
513 arma_extra_debug_sigprint();
|
Chris@49
|
514
|
Chris@49
|
515 return eOpCube<T1, eop_conj>(A.get_ref());
|
Chris@49
|
516 }
|
Chris@49
|
517
|
Chris@49
|
518
|
Chris@49
|
519
|
Chris@49
|
520 template<typename T1>
|
Chris@49
|
521 arma_inline
|
Chris@49
|
522 const T1&
|
Chris@49
|
523 conj(const eOp<T1, eop_conj>& A)
|
Chris@49
|
524 {
|
Chris@49
|
525 arma_extra_debug_sigprint();
|
Chris@49
|
526
|
Chris@49
|
527 return A.m;
|
Chris@49
|
528 }
|
Chris@49
|
529
|
Chris@49
|
530
|
Chris@49
|
531
|
Chris@49
|
532 template<typename T1>
|
Chris@49
|
533 arma_inline
|
Chris@49
|
534 const T1&
|
Chris@49
|
535 conj(const eOpCube<T1, eop_conj>& A)
|
Chris@49
|
536 {
|
Chris@49
|
537 arma_extra_debug_sigprint();
|
Chris@49
|
538
|
Chris@49
|
539 return A.m;
|
Chris@49
|
540 }
|
Chris@49
|
541
|
Chris@49
|
542
|
Chris@49
|
543
|
Chris@49
|
544 // TODO: this needs a more elaborate template restriction mechanism to work properly,
|
Chris@49
|
545 // i.e. an overloaded version of thus function should do nothing if the input type is non-complex
|
Chris@49
|
546 //
|
Chris@49
|
547 // //! the conjugate of the transpose of a complex matrix is the same as the hermitian transpose
|
Chris@49
|
548 // template<typename T1>
|
Chris@49
|
549 // arma_inline
|
Chris@49
|
550 // const Op<T1, op_htrans>
|
Chris@49
|
551 // conj(const Op<T1, op_strans>& A)
|
Chris@49
|
552 // {
|
Chris@49
|
553 // arma_extra_debug_sigprint();
|
Chris@49
|
554 //
|
Chris@49
|
555 // return Op<T1, op_htrans>(A.m);
|
Chris@49
|
556 // }
|
Chris@49
|
557
|
Chris@49
|
558
|
Chris@49
|
559
|
Chris@49
|
560 // pow
|
Chris@49
|
561
|
Chris@49
|
562 template<typename T1>
|
Chris@49
|
563 arma_inline
|
Chris@49
|
564 const eOp<T1, eop_pow>
|
Chris@49
|
565 pow(const Base<typename T1::elem_type,T1>& A, const typename T1::elem_type exponent)
|
Chris@49
|
566 {
|
Chris@49
|
567 arma_extra_debug_sigprint();
|
Chris@49
|
568
|
Chris@49
|
569 return eOp<T1, eop_pow>(A.get_ref(), exponent);
|
Chris@49
|
570 }
|
Chris@49
|
571
|
Chris@49
|
572
|
Chris@49
|
573
|
Chris@49
|
574 template<typename T1>
|
Chris@49
|
575 arma_inline
|
Chris@49
|
576 const eOpCube<T1, eop_pow>
|
Chris@49
|
577 pow(const BaseCube<typename T1::elem_type,T1>& A, const typename T1::elem_type exponent)
|
Chris@49
|
578 {
|
Chris@49
|
579 arma_extra_debug_sigprint();
|
Chris@49
|
580
|
Chris@49
|
581 return eOpCube<T1, eop_pow>(A.get_ref(), exponent);
|
Chris@49
|
582 }
|
Chris@49
|
583
|
Chris@49
|
584
|
Chris@49
|
585
|
Chris@49
|
586 // pow, specialised handling (non-complex exponent for complex matrices)
|
Chris@49
|
587
|
Chris@49
|
588 template<typename T1>
|
Chris@49
|
589 arma_inline
|
Chris@49
|
590 const eOp<T1, eop_pow>
|
Chris@49
|
591 pow(const Base<typename T1::elem_type,T1>& A, const typename T1::elem_type::value_type exponent)
|
Chris@49
|
592 {
|
Chris@49
|
593 arma_extra_debug_sigprint();
|
Chris@49
|
594
|
Chris@49
|
595 typedef typename T1::elem_type eT;
|
Chris@49
|
596
|
Chris@49
|
597 return eOp<T1, eop_pow>(A.get_ref(), eT(exponent));
|
Chris@49
|
598 }
|
Chris@49
|
599
|
Chris@49
|
600
|
Chris@49
|
601
|
Chris@49
|
602 template<typename T1>
|
Chris@49
|
603 arma_inline
|
Chris@49
|
604 const eOpCube<T1, eop_pow>
|
Chris@49
|
605 pow(const BaseCube<typename T1::elem_type,T1>& A, const typename T1::elem_type::value_type exponent)
|
Chris@49
|
606 {
|
Chris@49
|
607 arma_extra_debug_sigprint();
|
Chris@49
|
608
|
Chris@49
|
609 typedef typename T1::elem_type eT;
|
Chris@49
|
610
|
Chris@49
|
611 return eOpCube<T1, eop_pow>(A.get_ref(), eT(exponent));
|
Chris@49
|
612 }
|
Chris@49
|
613
|
Chris@49
|
614
|
Chris@49
|
615
|
Chris@49
|
616 //
|
Chris@49
|
617 // floor
|
Chris@49
|
618
|
Chris@49
|
619 template<typename T1>
|
Chris@49
|
620 arma_inline
|
Chris@49
|
621 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_floor> >::result
|
Chris@49
|
622 floor(const T1& A)
|
Chris@49
|
623 {
|
Chris@49
|
624 arma_extra_debug_sigprint();
|
Chris@49
|
625
|
Chris@49
|
626 return eOp<T1, eop_floor>(A);
|
Chris@49
|
627 }
|
Chris@49
|
628
|
Chris@49
|
629
|
Chris@49
|
630
|
Chris@49
|
631 template<typename T1>
|
Chris@49
|
632 arma_inline
|
Chris@49
|
633 const eOpCube<T1, eop_floor>
|
Chris@49
|
634 floor(const BaseCube<typename T1::elem_type,T1>& A)
|
Chris@49
|
635 {
|
Chris@49
|
636 arma_extra_debug_sigprint();
|
Chris@49
|
637
|
Chris@49
|
638 return eOpCube<T1, eop_floor>(A.get_ref());
|
Chris@49
|
639 }
|
Chris@49
|
640
|
Chris@49
|
641
|
Chris@49
|
642
|
Chris@49
|
643 //
|
Chris@49
|
644 // ceil
|
Chris@49
|
645
|
Chris@49
|
646 template<typename T1>
|
Chris@49
|
647 arma_inline
|
Chris@49
|
648 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_ceil> >::result
|
Chris@49
|
649 ceil(const T1& A)
|
Chris@49
|
650 {
|
Chris@49
|
651 arma_extra_debug_sigprint();
|
Chris@49
|
652
|
Chris@49
|
653 return eOp<T1, eop_ceil>(A);
|
Chris@49
|
654 }
|
Chris@49
|
655
|
Chris@49
|
656
|
Chris@49
|
657
|
Chris@49
|
658 template<typename T1>
|
Chris@49
|
659 arma_inline
|
Chris@49
|
660 const eOpCube<T1, eop_ceil>
|
Chris@49
|
661 ceil(const BaseCube<typename T1::elem_type,T1>& A)
|
Chris@49
|
662 {
|
Chris@49
|
663 arma_extra_debug_sigprint();
|
Chris@49
|
664
|
Chris@49
|
665 return eOpCube<T1, eop_ceil>(A.get_ref());
|
Chris@49
|
666 }
|
Chris@49
|
667
|
Chris@49
|
668
|
Chris@49
|
669
|
Chris@49
|
670 //
|
Chris@49
|
671 // round
|
Chris@49
|
672
|
Chris@49
|
673 template<typename T1>
|
Chris@49
|
674 arma_inline
|
Chris@49
|
675 typename enable_if2< is_arma_type<T1>::value, const eOp<T1, eop_round> >::result
|
Chris@49
|
676 round(const T1& A)
|
Chris@49
|
677 {
|
Chris@49
|
678 arma_extra_debug_sigprint();
|
Chris@49
|
679
|
Chris@49
|
680 return eOp<T1, eop_round>(A);
|
Chris@49
|
681 }
|
Chris@49
|
682
|
Chris@49
|
683
|
Chris@49
|
684
|
Chris@49
|
685 template<typename T1>
|
Chris@49
|
686 arma_inline
|
Chris@49
|
687 const eOpCube<T1, eop_round>
|
Chris@49
|
688 round(const BaseCube<typename T1::elem_type,T1>& A)
|
Chris@49
|
689 {
|
Chris@49
|
690 arma_extra_debug_sigprint();
|
Chris@49
|
691
|
Chris@49
|
692 return eOpCube<T1, eop_round>(A.get_ref());
|
Chris@49
|
693 }
|
Chris@49
|
694
|
Chris@49
|
695
|
Chris@49
|
696
|
Chris@49
|
697 //! @}
|