mlpack 3.4.2
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.
19namespace mlpack {
20namespace data {
21
22class IncrementPolicy;
23
24template<typename PolicyType, typename InputType>
25class DatasetMapper;
26
27using 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_IN(TUPLE_TYPE, ID, DESC, ALIAS, TUPLE_TYPE(), false)
1019
1048#define PARAM_MODEL_IN(TYPE, ID, DESC, ALIAS) \
1049 PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, true)
1050
1079#define PARAM_MODEL_IN_REQ(TYPE, ID, DESC, ALIAS) \
1080 PARAM_MODEL(TYPE, ID, DESC, ALIAS, true, true)
1081
1104#define PARAM_MODEL_OUT(TYPE, ID, DESC, ALIAS) \
1105 PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, false)
1106
1129#define PARAM_INT_IN_REQ(ID, DESC, ALIAS) \
1130 PARAM_IN(int, ID, DESC, ALIAS, 0, true)
1131
1154#define PARAM_DOUBLE_IN_REQ(ID, DESC, ALIAS) \
1155 PARAM_IN(double, ID, DESC, ALIAS, 0.0, true)
1156
1179#define PARAM_STRING_IN_REQ(ID, DESC, ALIAS) \
1180 PARAM_IN(std::string, ID, DESC, ALIAS, "", true)
1181
1206#define PARAM_VECTOR_IN_REQ(T, ID, DESC, ALIAS) \
1207 PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), true);
1208
1225#ifdef __COUNTER__
1226 #define PARAM_IN(T, ID, DESC, ALIAS, DEF, REQ) \
1227 static mlpack::util::Option<T> \
1228 JOIN(io_option_dummy_object_in_, __COUNTER__) \
1229 (DEF, ID, DESC, ALIAS, #T, REQ, true, false, testName);
1230
1231 #define PARAM_OUT(T, ID, DESC, ALIAS, DEF, REQ) \
1232 static mlpack::util::Option<T> \
1233 JOIN(io_option_dummy_object_out_, __COUNTER__) \
1234 (DEF, ID, DESC, ALIAS, #T, REQ, false, false, testName);
1235
1236 #define PARAM_MATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1237 static mlpack::util::Option<arma::mat> \
1238 JOIN(io_option_dummy_matrix_, __COUNTER__) \
1239 (arma::mat(), ID, DESC, ALIAS, "arma::mat", \
1240 REQ, IN, !TRANS, testName);
1241
1242 #define PARAM_UMATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1243 static mlpack::util::Option<arma::Mat<size_t>> \
1244 JOIN(io_option_dummy_umatrix_, __COUNTER__) \
1245 (arma::Mat<size_t>(), ID, DESC, ALIAS, "arma::Mat<size_t>", \
1246 REQ, IN, !TRANS, testName);
1247
1248 #define PARAM_COL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1249 static mlpack::util::Option<arma::vec> \
1250 JOIN(io_option_dummy_col_, __COUNTER__) \
1251 (arma::vec(), ID, DESC, ALIAS, "arma::vec", \
1252 REQ, IN, !TRANS, testName);
1253
1254 #define PARAM_UCOL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1255 static mlpack::util::Option<arma::Col<size_t>> \
1256 JOIN(io_option_dummy_ucol_, __COUNTER__) \
1257 (arma::Col<size_t>(), ID, DESC, ALIAS, "arma::Col<size_t>", \
1258 REQ, IN, !TRANS, testName);
1259
1260 #define PARAM_ROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1261 static mlpack::util::Option<arma::rowvec> \
1262 JOIN(io_option_dummy_row_, __COUNTER__) \
1263 (arma::rowvec(), ID, DESC, ALIAS, "arma::rowvec", \
1264 REQ, IN, !TRANS, testName);
1265
1266 #define PARAM_UROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1267 static mlpack::util::Option<arma::Row<size_t>> \
1268 JOIN(io_option_dummy_urow_, __COUNTER__) \
1269 (arma::Row<size_t>(), ID, DESC, ALIAS, "arma::Row<size_t>", \
1270 REQ, IN, !TRANS, testName);
1271
1272 // There are no uses of required models, so that is not an option to this
1273 // macro (it would be easy to add).
1274 #define PARAM_MODEL(TYPE, ID, DESC, ALIAS, REQ, IN) \
1275 static mlpack::util::Option<TYPE*> \
1276 JOIN(io_option_dummy_model_, __COUNTER__) \
1277 (nullptr, ID, DESC, ALIAS, #TYPE, REQ, IN, false, testName);
1278#else
1279 // We have to do some really bizarre stuff since __COUNTER__ isn't defined. I
1280 // don't think we can absolutely guarantee success, but it should be "good
1281 // enough". We use the __LINE__ macro and the type of the parameter to try
1282 // and get a good guess at something unique.
1283 #define PARAM_IN(T, ID, DESC, ALIAS, DEF, REQ) \
1284 static mlpack::util::Option<T> \
1285 JOIN(JOIN(io_option_dummy_object_in_, __LINE__), opt) \
1286 (DEF, ID, DESC, ALIAS, #T, REQ, true, false, testName);
1287
1288 #define PARAM_OUT(T, ID, DESC, ALIAS, DEF, REQ) \
1289 static mlpack::util::Option<T> \
1290 JOIN(JOIN(io_option_dummy_object_out_, __LINE__), opt) \
1291 (DEF, ID, DESC, ALIAS, #T, REQ, false, false, testName);
1292
1293 #define PARAM_MATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1294 static mlpack::util::Option<arma::mat> \
1295 JOIN(JOIN(io_option_dummy_object_matrix_, __LINE__), opt) \
1296 (arma::mat(), ID, DESC, ALIAS, "arma::mat", REQ, IN, !TRANS, \
1297 testName);
1298
1299 #define PARAM_UMATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1300 static mlpack::util::Option<arma::Mat<size_t>> \
1301 JOIN(JOIN(io_option_dummy_object_umatrix_, __LINE__), opt) \
1302 (arma::Mat<size_t>(), ID, DESC, ALIAS, "arma::Mat<size_t>", REQ, IN, \
1303 !TRANS, testName);
1304
1305 #define PARAM_COL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1306 static mlpack::util::Option<arma::vec> \
1307 JOIN(io_option_dummy_object_col_, __LINE__) \
1308 (arma::vec(), ID, DESC, ALIAS, "arma::vec", REQ, IN, !TRANS, \
1309 testName);
1310
1311 #define PARAM_UCOL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1312 static mlpack::util::Option<arma::Col<size_t>> \
1313 JOIN(io_option_dummy_object_ucol_, __LINE__) \
1314 (arma::Col<size_t>(), ID, DESC, ALIAS, "arma::Col<size_t>", REQ, IN, \
1315 !TRANS, testName);
1316
1317 #define PARAM_ROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1318 static mlpack::util::Option<arma::rowvec> \
1319 JOIN(io_option_dummy_object_row_, __LINE__) \
1320 (arma::rowvec(), ID, DESC, ALIAS, "arma::rowvec", REQ, IN, !TRANS, \
1321 testName);
1322
1323 #define PARAM_UROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1324 static mlpack::util::Option<arma::Row<size_t>> \
1325 JOIN(io_option_dummy_object_urow_, __LINE__) \
1326 (arma::Row<size_t>(), ID, DESC, ALIAS, "arma::Row<size_t>", REQ, IN, \
1327 !TRANS, testName);
1328
1329 #define PARAM_MODEL(TYPE, ID, DESC, ALIAS, REQ, IN) \
1330 static mlpack::util::Option<TYPE*> \
1331 JOIN(JOIN(io_option_dummy_object_model_, __LINE__), opt) \
1332 (nullptr, ID, DESC, ALIAS, #TYPE, REQ, IN, false, \
1333 testName);
1334#endif
1335
1336#endif
DatasetMapper< data::IncrementPolicy > DatasetInfo
Linear algebra utility functions, generally performed on matrices or vectors.
Definition: cv.hpp:1