mlpack
src
mlpack
core
util
param.hpp
Go to the documentation of this file.
1
15
#ifndef MLPACK_CORE_UTIL_PARAM_HPP
16
#define MLPACK_CORE_UTIL_PARAM_HPP
17
18
// Required forward declarations.
19
namespace
mlpack
{
20
namespace
data
{
21
22
class
IncrementPolicy;
23
24
template
<
typename
PolicyType,
typename
InputType>
25
class
DatasetMapper;
26
27
using
DatasetInfo = DatasetMapper<IncrementPolicy, std::string>;
28
29
}
// namespace data
30
}
// namespace mlpack
31
37
// These are ugly, but necessary utility functions we must use to generate a
38
// unique identifier inside of the PARAM() module.
39
#define JOIN(x, y) JOIN_AGAIN(x, y)
40
#define JOIN_AGAIN(x, y) x ## y
41
57
#define BINDING_NAME(NAME) static \
58
mlpack::util::ProgramName \
59
io_programname_dummy_object = mlpack::util::ProgramName(NAME);
60
76
#define BINDING_SHORT_DESC(SHORT_DESC) static \
77
mlpack::util::ShortDescription \
78
io_programshort_desc_dummy_object = mlpack::util::ShortDescription( \
79
SHORT_DESC);
80
98
#define BINDING_LONG_DESC(LONG_DESC) static \
99
mlpack::util::LongDescription \
100
io_programlong_desc_dummy_object = mlpack::util::LongDescription( \
101
[]() { return std::string(LONG_DESC); });
102
120
#ifdef __COUNTER__
121
#define BINDING_EXAMPLE(EXAMPLE) static \
122
mlpack::util::Example \
123
JOIN(io_programexample_dummy_object_, __COUNTER__) = \
124
mlpack::util::Example( \
125
[]() { return(std::string(EXAMPLE)); });
126
#else
127
#define BINDING_EXAMPLE(EXAMPLE) static \
128
mlpack::util::Example \
129
JOIN(JOIN(io_programexample_dummy_object_, __LINE__), opt) = \
130
mlpack::util::Example( \
131
[]() { return(std::string(EXAMPLE)); });
132
#endif
133
157
#ifdef __COUNTER__
158
#define BINDING_SEE_ALSO(DESCRIPTION, LINK) static \
159
mlpack::util::SeeAlso \
160
JOIN(io_programsee_also_dummy_object_, __COUNTER__) = \
161
mlpack::util::SeeAlso(DESCRIPTION, LINK);
162
#else
163
#define BINDING_SEE_ALSO(DESCRIPTION, LINK) static \
164
mlpack::util::SeeAlso \
165
JOIN(JOIN(io_programsee_also_dummy_object_, __LINE__), opt) = \
166
mlpack::util::SeeAlso(DESCRIPTION, LINK);
167
#endif
168
189
#define PARAM_FLAG(ID, DESC, ALIAS) \
190
PARAM_IN(bool, ID, DESC, ALIAS, false, false);
191
217
#define PARAM_INT_IN(ID, DESC, ALIAS, DEF) \
218
PARAM_IN(int, ID, DESC, ALIAS, DEF, false)
219
248
#define PARAM_INT_OUT(ID, DESC) \
249
PARAM_OUT(int, ID, DESC, "", 0, false)
250
275
#define PARAM_DOUBLE_IN(ID, DESC, ALIAS, DEF) \
276
PARAM_IN(double, ID, DESC, ALIAS, DEF, false)
277
306
#define PARAM_DOUBLE_OUT(ID, DESC) \
307
PARAM_OUT(double, ID, DESC, "", 0.0, false)
308
335
#define PARAM_STRING_IN(ID, DESC, ALIAS, DEF) \
336
PARAM_IN(std::string, ID, DESC, ALIAS, DEF, false)
337
367
#define PARAM_STRING_OUT(ID, DESC, ALIAS) \
368
PARAM_OUT(std::string, ID, DESC, ALIAS, "", false)
369
395
#define PARAM_MATRIX_IN(ID, DESC, ALIAS) \
396
PARAM_MATRIX(ID, DESC, ALIAS, false, true, true)
397
423
#define PARAM_MATRIX_IN_REQ(ID, DESC, ALIAS) \
424
PARAM_MATRIX(ID, DESC, ALIAS, true, true, true)
425
456
#define PARAM_MATRIX_OUT(ID, DESC, ALIAS) \
457
PARAM_MATRIX(ID, DESC, ALIAS, false, true, false)
458
485
#define PARAM_TMATRIX_IN(ID, DESC, ALIAS) \
486
PARAM_MATRIX(ID, DESC, ALIAS, false, false, true)
487
515
#define PARAM_TMATRIX_IN_REQ(ID, DESC, ALIAS) \
516
PARAM_MATRIX(ID, DESC, ALIAS, true, false, true)
517
550
#define PARAM_TMATRIX_OUT(ID, DESC, ALIAS) \
551
PARAM_MATRIX(ID, DESC, ALIAS, false, false, false)
552
578
#define PARAM_UMATRIX_IN(ID, DESC, ALIAS) \
579
PARAM_UMATRIX(ID, DESC, ALIAS, false, true, true)
580
607
#define PARAM_UMATRIX_IN_REQ(ID, DESC, ALIAS) \
608
PARAM_UMATRIX(ID, DESC, ALIAS, true, true, true)
609
641
#define PARAM_UMATRIX_OUT(ID, DESC, ALIAS) \
642
PARAM_UMATRIX(ID, DESC, ALIAS, false, true, false)
643
644
670
#define PARAM_COL_IN(ID, DESC, ALIAS) \
671
PARAM_COL(ID, DESC, ALIAS, false, true, true)
672
698
#define PARAM_COL_IN_REQ(ID, DESC, ALIAS) \
699
PARAM_COL(ID, DESC, ALIAS, true, true, true)
700
726
#define PARAM_ROW_IN(ID, DESC, ALIAS) \
727
PARAM_ROW(ID, DESC, ALIAS, false, true, true)
728
754
#define PARAM_UCOL_IN(ID, DESC, ALIAS) \
755
PARAM_UCOL(ID, DESC, ALIAS, false, true, true)
756
783
#define PARAM_UROW_IN(ID, DESC, ALIAS) \
784
PARAM_UROW(ID, DESC, ALIAS, false, true, true)
785
816
#define PARAM_COL_OUT(ID, DESC, ALIAS) \
817
PARAM_COL(ID, DESC, ALIAS, false, true, false)
818
849
#define PARAM_ROW_OUT(ID, DESC, ALIAS) \
850
PARAM_ROW(ID, DESC, ALIAS, false, true, false)
851
882
#define PARAM_UCOL_OUT(ID, DESC, ALIAS) \
883
PARAM_UCOL(ID, DESC, ALIAS, false, true, false)
884
915
#define PARAM_UROW_OUT(ID, DESC, ALIAS) \
916
PARAM_UROW(ID, DESC, ALIAS, false, true, false)
917
942
#define PARAM_VECTOR_IN(T, ID, DESC, ALIAS) \
943
PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), false)
944
976
#define PARAM_VECTOR_OUT(T, ID, DESC, ALIAS) \
977
PARAM_OUT(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), false)
978
1016
#define TUPLE_TYPE std::tuple<mlpack::data::DatasetInfo, arma::mat>
1017
#define PARAM_MATRIX_AND_INFO_IN(ID, DESC, ALIAS) \
1018
PARAM(TUPLE_TYPE, ID, DESC, ALIAS, \
1019
"std::tuple<mlpack::data::DatasetInfo, arma::mat>", false, true, true, \
1020
TUPLE_TYPE())
1021
1050
#define PARAM_MODEL_IN(TYPE, ID, DESC, ALIAS) \
1051
PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, true)
1052
1081
#define PARAM_MODEL_IN_REQ(TYPE, ID, DESC, ALIAS) \
1082
PARAM_MODEL(TYPE, ID, DESC, ALIAS, true, true)
1083
1106
#define PARAM_MODEL_OUT(TYPE, ID, DESC, ALIAS) \
1107
PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, false)
1108
1131
#define PARAM_INT_IN_REQ(ID, DESC, ALIAS) \
1132
PARAM_IN(int, ID, DESC, ALIAS, 0, true)
1133
1156
#define PARAM_DOUBLE_IN_REQ(ID, DESC, ALIAS) \
1157
PARAM_IN(double, ID, DESC, ALIAS, 0.0, true)
1158
1181
#define PARAM_STRING_IN_REQ(ID, DESC, ALIAS) \
1182
PARAM_IN(std::string, ID, DESC, ALIAS, "", true)
1183
1208
#define PARAM_VECTOR_IN_REQ(T, ID, DESC, ALIAS) \
1209
PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), true);
1210
1214
#define PARAM_IN(T, ID, DESC, ALIAS, DEF, REQ) \
1215
PARAM(T, ID, DESC, ALIAS, #T, REQ, true, false, DEF);
1216
1217
#define PARAM_OUT(T, ID, DESC, ALIAS, DEF, REQ) \
1218
PARAM(T, ID, DESC, ALIAS, #T, REQ, false, false, DEF);
1219
1220
#define PARAM_MATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1221
PARAM(arma::mat, ID, DESC, ALIAS, "arma::mat", REQ, IN, \
1222
TRANS, arma::mat());
1223
1224
#define PARAM_UMATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1225
PARAM(arma::Mat<size_t>, ID, DESC, ALIAS, "arma::Mat<size_t>", \
1226
REQ, IN, TRANS, arma::Mat<size_t>());
1227
1228
#define PARAM_COL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1229
PARAM(arma::vec, ID, DESC, ALIAS, "arma::vec", REQ, IN, TRANS, \
1230
arma::vec());
1231
1232
#define PARAM_UCOL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1233
PARAM(arma::Col<size_t>, ID, DESC, ALIAS, "arma::Col<size_t>", \
1234
REQ, IN, TRANS, arma::Col<size_t>());
1235
1236
#define PARAM_ROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1237
PARAM(arma::rowvec, ID, DESC, ALIAS, "arma::rowvec", REQ, IN, \
1238
TRANS, arma::rowvec());
1239
1240
#define PARAM_UROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1241
PARAM(arma::Row<size_t>, ID, DESC, ALIAS, "arma::Row<size_t>", \
1242
REQ, IN, TRANS, arma::Row<size_t>());
1243
1260
#ifdef __COUNTER__
1261
#define PARAM(T, ID, DESC, ALIAS, NAME, REQ, IN, TRANS, DEF) \
1262
static mlpack::util::Option<T> \
1263
JOIN(io_option_dummy_object_in_, __COUNTER__) \
1264
(DEF, ID, DESC, ALIAS, NAME, REQ, IN, !TRANS, testName);
1265
1266
// There are no uses of required models, so that is not an option to this
1267
// macro (it would be easy to add).
1268
#define PARAM_MODEL(TYPE, ID, DESC, ALIAS, REQ, IN) \
1269
static mlpack::util::Option<TYPE*> \
1270
JOIN(io_option_dummy_model_, __COUNTER__) \
1271
(nullptr, ID, DESC, ALIAS, #TYPE, REQ, IN, false, testName);
1272
#else
1273
// We have to do some really bizarre stuff since __COUNTER__ isn't defined. I
1274
// don't think we can absolutely guarantee success, but it should be "good
1275
// enough". We use the __LINE__ macro and the type of the parameter to try
1276
// and get a good guess at something unique.
1277
#define PARAM(T, ID, DESC, ALIAS, NAME, REQ, IN, TRANS, DEF) \
1278
static mlpack::util::Option<T> \
1279
JOIN(JOIN(io_option_dummy_object_in_, __LINE__), opt) \
1280
(DEF, ID, DESC, ALIAS, NAME, REQ, IN, !TRANS, testName);
1281
1282
#define PARAM_MODEL(TYPE, ID, DESC, ALIAS, REQ, IN) \
1283
static mlpack::util::Option<TYPE*> \
1284
JOIN(JOIN(io_option_dummy_object_model_, __LINE__), opt) \
1285
(nullptr, ID, DESC, ALIAS, #TYPE, REQ, IN, false, \
1286
testName);
1287
#endif
1288
1289
#endif
data
mlpack
Linear algebra utility functions, generally performed on matrices or vectors.
Definition:
cv.hpp:1
Generated by
1.8.13