1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
|
// SPDX-License-Identifier: Apache-2.0
//
// Copyright 2008-2016 Conrad Sanderson (http://conradsanderson.id.au)
// Copyright 2008-2016 National ICT Australia (NICTA)
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ------------------------------------------------------------------------
#if !defined(ARMA_WARN_LEVEL)
#define ARMA_WARN_LEVEL 2
#endif
//// The level of warning messages printed to ARMA_CERR_STREAM.
//// Must be an integer >= 0. The default value is 2.
//// 0 = no warnings; generally not recommended
//// 1 = only critical warnings about arguments and/or data which are likely to lead to incorrect results
//// 2 = as per level 1, and warnings about poorly conditioned systems (low rcond) detected by solve(), spsolve(), etc
//// 3 = as per level 2, and warnings about failed decompositions, failed saving/loading, etc
#cmakedefine ARMA_USE_WRAPPER
//// Comment out the above line if you prefer to directly link with BLAS, LAPACK, etc
//// instead of the Armadillo runtime library.
//// You will need to link your programs directly with -lopenblas -llapack instead of -larmadillo
#if !defined(ARMA_USE_LAPACK)
#cmakedefine ARMA_USE_LAPACK
//// Comment out the above line if you don't have LAPACK or a high-speed replacement for LAPACK,
//// such as OpenBLAS, Intel MKL, or the Accelerate framework.
//// LAPACK is required for matrix decompositions (eg. SVD) and matrix inverse.
#endif
#if !defined(ARMA_USE_BLAS)
#cmakedefine ARMA_USE_BLAS
//// Comment out the above line if you don't have BLAS or a high-speed replacement for BLAS,
//// such as OpenBLAS, Intel MKL, or the Accelerate framework.
//// BLAS is used for matrix multiplication.
//// Without BLAS, matrix multiplication will still work, but might be slower.
#endif
#if !defined(ARMA_USE_NEWARP)
#define ARMA_USE_NEWARP
//// Uncomment the above line to enable the built-in partial emulation of ARPACK.
//// This is used for eigen decompositions of real (non-complex) sparse matrices, eg. eigs_sym(), svds()
#endif
#if !defined(ARMA_USE_ARPACK)
#cmakedefine ARMA_USE_ARPACK
//// Uncomment the above line if you have ARPACK or a high-speed replacement for ARPACK.
//// ARPACK is required for eigen decompositions of complex sparse matrices
#endif
#if !defined(ARMA_USE_SUPERLU)
#cmakedefine ARMA_USE_SUPERLU
//// Uncomment the above line if you have SuperLU.
//// SuperLU is used for solving sparse linear systems via spsolve()
//// Caveat: only SuperLU version 5.2 can be used!
#endif
#if !defined(ARMA_SUPERLU_INCLUDE_DIR)
#define ARMA_SUPERLU_INCLUDE_DIR ${ARMA_SUPERLU_INCLUDE_DIR}/
//// If you're using SuperLU and want to explicitly include the SuperLU headers,
//// uncomment the above define and specify the appropriate include directory.
//// Make sure the directory has a trailing /
#endif
#if !defined(ARMA_USE_ATLAS)
#cmakedefine ARMA_USE_ATLAS
//// NOTE: support for ATLAS is deprecated and will be removed.
#endif
#if !defined(ARMA_USE_HDF5)
// #define ARMA_USE_HDF5
//// Uncomment the above line to allow the ability to save and load matrices stored in HDF5 format;
//// the hdf5.h header file must be available on your system,
//// and you will need to link with the hdf5 library (eg. -lhdf5)
#endif
#if !defined(ARMA_USE_FFTW3)
// #define ARMA_USE_FFTW3
//// Uncomment the above line to allow the use of the FFTW3 library by fft() and ifft() functions;
//// you will need to link with the FFTW3 library (eg. -lfftw3)
#endif
#if defined(ARMA_USE_FFTW)
#error "use ARMA_USE_FFTW3 instead of ARMA_USE_FFTW"
#endif
// #define ARMA_BLAS_CAPITALS
//// Uncomment the above line if your BLAS and LAPACK libraries have capitalised function names
#define ARMA_BLAS_UNDERSCORE
//// Uncomment the above line if your BLAS and LAPACK libraries have function names with a trailing underscore.
//// Conversely, comment it out if the function names don't have a trailing underscore.
// #define ARMA_BLAS_LONG
//// Uncomment the above line if your BLAS and LAPACK libraries use "long" instead of "int"
// #define ARMA_BLAS_LONG_LONG
//// Uncomment the above line if your BLAS and LAPACK libraries use "long long" instead of "int"
// #define ARMA_BLAS_NOEXCEPT
//// Uncomment the above line if you require BLAS functions to have the 'noexcept' specification
// #define ARMA_LAPACK_NOEXCEPT
//// Uncomment the above line if you require LAPACK functions to have the 'noexcept' specification
#define ARMA_USE_FORTRAN_HIDDEN_ARGS
//// Comment out the above line to call BLAS and LAPACK functions without using so-called "hidden" arguments.
//// Fortran functions (compiled without a BIND(C) declaration) that have char arguments
//// (like many BLAS and LAPACK functions) also have associated "hidden" arguments.
//// For each char argument, the corresponding "hidden" argument specifies the number of characters.
//// These "hidden" arguments are typically tacked onto the end of function definitions.
// #define ARMA_USE_TBB_ALLOC
//// Uncomment the above line to use Intel TBB scalable_malloc() and scalable_free() instead of standard malloc() and free()
// #define ARMA_USE_MKL_ALLOC
//// Uncomment the above line to use Intel MKL mkl_malloc() and mkl_free() instead of standard malloc() and free()
// #define ARMA_USE_MKL_TYPES
//// Uncomment the above line to use Intel MKL types for complex numbers.
//// You will need to include appropriate MKL headers before the Armadillo header.
//// You may also need to enable or disable the following options:
//// ARMA_BLAS_LONG, ARMA_BLAS_LONG_LONG, ARMA_USE_FORTRAN_HIDDEN_ARGS
#if !defined(ARMA_USE_OPENMP)
// #define ARMA_USE_OPENMP
//// Uncomment the above line to forcefully enable use of OpenMP for parallelisation.
//// Note that ARMA_USE_OPENMP is automatically enabled when a compiler supporting OpenMP 3.1 is detected.
#endif
#if !defined(ARMA_64BIT_WORD)
// #define ARMA_64BIT_WORD
//// Uncomment the above line if you require matrices/vectors capable of holding more than 4 billion elements.
//// Note that ARMA_64BIT_WORD is automatically enabled when std::size_t has 64 bits and ARMA_32BIT_WORD is not defined.
#endif
#if !defined(ARMA_OPTIMISE_BAND)
#define ARMA_OPTIMISE_BAND
//// Comment out the above line to disable optimised handling
//// of band matrices by solve() and chol()
#endif
#if !defined(ARMA_OPTIMISE_SYM)
#define ARMA_OPTIMISE_SYM
//// Comment out the above line to disable optimised handling
//// of symmetric/hermitian matrices by various functions:
//// solve(), inv(), pinv(), expmat(), logmat(), sqrtmat(), rcond(), rank()
#endif
#if !defined(ARMA_OPTIMISE_INVEXPR)
#define ARMA_OPTIMISE_INVEXPR
//// Comment out the above line to disable optimised handling
//// of inv() and inv_sympd() within compound expressions
#endif
#if !defined(ARMA_CHECK_NONFINITE)
#define ARMA_CHECK_NONFINITE
//// Comment out the above line to disable checking for nonfinite matrices
#endif
#if !defined(ARMA_MAT_PREALLOC)
#define ARMA_MAT_PREALLOC 16
#endif
//// This is the number of preallocated elements used by matrices and vectors;
//// it must be an integer that is at least 1.
//// If you mainly use lots of very small vectors (eg. <= 4 elements),
//// change the number to the size of your vectors.
#if !defined(ARMA_OPENMP_THRESHOLD)
#define ARMA_OPENMP_THRESHOLD 320
#endif
//// The minimum number of elements in a matrix to allow OpenMP based parallelisation;
//// it must be an integer that is at least 1.
#if !defined(ARMA_OPENMP_THREADS)
#define ARMA_OPENMP_THREADS 8
#endif
//// The maximum number of threads to use for OpenMP based parallelisation;
//// it must be an integer that is at least 1.
// #define ARMA_NO_DEBUG
//// Uncomment the above line to disable all run-time checks. NOT RECOMMENDED.
//// It is strongly recommended that run-time checks are enabled during development,
//// as this greatly aids in finding mistakes in your code.
// #define ARMA_EXTRA_DEBUG
//// Uncomment the above line to see the function traces of how Armadillo evaluates expressions.
//// This is mainly useful for debugging of the library.
#if defined(ARMA_EXTRA_DEBUG)
#undef ARMA_NO_DEBUG
#undef ARMA_WARN_LEVEL
#define ARMA_WARN_LEVEL 3
#endif
#if defined(ARMA_DEFAULT_OSTREAM)
#pragma message ("WARNING: support for ARMA_DEFAULT_OSTREAM is deprecated and will be removed;")
#pragma message ("WARNING: use ARMA_COUT_STREAM and ARMA_CERR_STREAM instead")
#endif
#if !defined(ARMA_COUT_STREAM)
#if defined(ARMA_DEFAULT_OSTREAM)
// for compatibility with earlier versions of Armadillo
#define ARMA_COUT_STREAM ARMA_DEFAULT_OSTREAM
#else
#define ARMA_COUT_STREAM std::cout
#endif
#endif
#if !defined(ARMA_CERR_STREAM)
#if defined(ARMA_DEFAULT_OSTREAM)
// for compatibility with earlier versions of Armadillo
#define ARMA_CERR_STREAM ARMA_DEFAULT_OSTREAM
#else
#define ARMA_CERR_STREAM std::cerr
#endif
#endif
#if !defined(ARMA_PRINT_EXCEPTIONS)
// #define ARMA_PRINT_EXCEPTIONS
#if defined(ARMA_PRINT_EXCEPTIONS_INTERNAL)
#undef ARMA_PRINT_EXCEPTIONS
#define ARMA_PRINT_EXCEPTIONS
#endif
#endif
#if defined(ARMA_DONT_USE_LAPACK)
#undef ARMA_USE_LAPACK
#endif
#if defined(ARMA_DONT_USE_BLAS)
#undef ARMA_USE_BLAS
#endif
#if defined(ARMA_DONT_USE_NEWARP) || !defined(ARMA_USE_LAPACK)
#undef ARMA_USE_NEWARP
#endif
#if defined(ARMA_DONT_USE_ARPACK)
#undef ARMA_USE_ARPACK
#endif
#if defined(ARMA_DONT_USE_SUPERLU)
#undef ARMA_USE_SUPERLU
#undef ARMA_SUPERLU_INCLUDE_DIR
#endif
#if defined(ARMA_DONT_USE_ATLAS)
#undef ARMA_USE_ATLAS
#endif
#if defined(ARMA_DONT_USE_HDF5)
#undef ARMA_USE_HDF5
#endif
#if defined(ARMA_DONT_USE_FFTW3)
#undef ARMA_USE_FFTW3
#endif
#if defined(ARMA_DONT_USE_WRAPPER)
#undef ARMA_USE_WRAPPER
#endif
#if defined(ARMA_DONT_USE_FORTRAN_HIDDEN_ARGS)
#undef ARMA_USE_FORTRAN_HIDDEN_ARGS
#endif
#if !defined(ARMA_DONT_USE_STD_MUTEX)
// #define ARMA_DONT_USE_STD_MUTEX
//// Uncomment the above line to disable use of std::mutex
#endif
// for compatibility with earlier versions of Armadillo
#if defined(ARMA_DONT_USE_CXX11_MUTEX)
#pragma message ("WARNING: support for ARMA_DONT_USE_CXX11_MUTEX is deprecated and will be removed;")
#pragma message ("WARNING: use ARMA_DONT_USE_STD_MUTEX instead")
#undef ARMA_DONT_USE_STD_MUTEX
#define ARMA_DONT_USE_STD_MUTEX
#endif
#if defined(ARMA_DONT_USE_OPENMP)
#undef ARMA_USE_OPENMP
#endif
#if defined(ARMA_32BIT_WORD)
#undef ARMA_64BIT_WORD
#endif
#if defined(ARMA_DONT_OPTIMISE_BAND) || defined(ARMA_DONT_OPTIMISE_SOLVE_BAND)
#undef ARMA_OPTIMISE_BAND
#endif
#if defined(ARMA_DONT_OPTIMISE_SYM) || defined(ARMA_DONT_OPTIMISE_SYMPD) || defined(ARMA_DONT_OPTIMISE_SOLVE_SYMPD)
#undef ARMA_OPTIMISE_SYM
#endif
#if defined(ARMA_DONT_OPTIMISE_INVEXPR)
#undef ARMA_OPTIMISE_INVEXPR
#endif
#if defined(ARMA_DONT_CHECK_NONFINITE)
#undef ARMA_CHECK_NONFINITE
#endif
#if defined(ARMA_DONT_PRINT_ERRORS)
#pragma message ("INFO: support for ARMA_DONT_PRINT_ERRORS option has been removed")
#if defined(ARMA_PRINT_EXCEPTIONS)
#pragma message ("INFO: suggest to use ARMA_WARN_LEVEL and ARMA_DONT_PRINT_EXCEPTIONS options instead")
#else
#pragma message ("INFO: suggest to use ARMA_WARN_LEVEL option instead")
#endif
#pragma message ("INFO: see the documentation for details")
#endif
#if defined(ARMA_DONT_PRINT_EXCEPTIONS)
#undef ARMA_PRINT_EXCEPTIONS
#endif
#if !defined(ARMA_DONT_ZERO_INIT)
// #define ARMA_DONT_ZERO_INIT
//// Uncomment the above line to disable initialising elements to zero during construction of dense matrices and cubes
#endif
#if defined(ARMA_NO_CRIPPLED_LAPACK)
#undef ARMA_CRIPPLED_LAPACK
#endif
// if Armadillo was installed on this system via CMake and ARMA_USE_WRAPPER is not defined,
// ARMA_AUX_LIBS lists the libraries required by Armadillo on this system, and
// ARMA_AUX_INCDIRS lists the include directories required by Armadillo on this system.
// Do not use these unless you know what you are doing.
#define ARMA_AUX_LIBS ${ARMA_LIBS}
#define ARMA_AUX_INCDIRS ${CMAKE_REQUIRED_INCLUDES}
|