15#ifndef MLPACK_CORE_UTIL_PARAM_HPP
16#define MLPACK_CORE_UTIL_PARAM_HPP
24template<
typename PolicyType,
typename InputType>
27using DatasetInfo = DatasetMapper<IncrementPolicy, std::string>;
39#define JOIN(x, y) JOIN_AGAIN(x, y)
40#define JOIN_AGAIN(x, y) x ## y
57#define BINDING_NAME(NAME) static \
58 mlpack::util::ProgramName \
59 io_programname_dummy_object = mlpack::util::ProgramName(NAME);
76#define BINDING_SHORT_DESC(SHORT_DESC) static \
77 mlpack::util::ShortDescription \
78 io_programshort_desc_dummy_object = mlpack::util::ShortDescription( \
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); });
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)); });
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)); });
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);
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);
189#define PARAM_FLAG(ID, DESC, ALIAS) \
190 PARAM_IN(bool, ID, DESC, ALIAS, false, false);
217#define PARAM_INT_IN(ID, DESC, ALIAS, DEF) \
218 PARAM_IN(int, ID, DESC, ALIAS, DEF, false)
248#define PARAM_INT_OUT(ID, DESC) \
249 PARAM_OUT(int, ID, DESC, "", 0, false)
275#define PARAM_DOUBLE_IN(ID, DESC, ALIAS, DEF) \
276 PARAM_IN(double, ID, DESC, ALIAS, DEF, false)
306#define PARAM_DOUBLE_OUT(ID, DESC) \
307 PARAM_OUT(double, ID, DESC, "", 0.0, false)
335#define PARAM_STRING_IN(ID, DESC, ALIAS, DEF) \
336 PARAM_IN(std::string, ID, DESC, ALIAS, DEF, false)
367#define PARAM_STRING_OUT(ID, DESC, ALIAS) \
368 PARAM_OUT(std::string, ID, DESC, ALIAS, "", false)
395#define PARAM_MATRIX_IN(ID, DESC, ALIAS) \
396 PARAM_MATRIX(ID, DESC, ALIAS, false, true, true)
423#define PARAM_MATRIX_IN_REQ(ID, DESC, ALIAS) \
424 PARAM_MATRIX(ID, DESC, ALIAS, true, true, true)
456#define PARAM_MATRIX_OUT(ID, DESC, ALIAS) \
457 PARAM_MATRIX(ID, DESC, ALIAS, false, true, false)
485#define PARAM_TMATRIX_IN(ID, DESC, ALIAS) \
486 PARAM_MATRIX(ID, DESC, ALIAS, false, false, true)
515#define PARAM_TMATRIX_IN_REQ(ID, DESC, ALIAS) \
516 PARAM_MATRIX(ID, DESC, ALIAS, true, false, true)
550#define PARAM_TMATRIX_OUT(ID, DESC, ALIAS) \
551 PARAM_MATRIX(ID, DESC, ALIAS, false, false, false)
578#define PARAM_UMATRIX_IN(ID, DESC, ALIAS) \
579 PARAM_UMATRIX(ID, DESC, ALIAS, false, true, true)
607#define PARAM_UMATRIX_IN_REQ(ID, DESC, ALIAS) \
608 PARAM_UMATRIX(ID, DESC, ALIAS, true, true, true)
641#define PARAM_UMATRIX_OUT(ID, DESC, ALIAS) \
642 PARAM_UMATRIX(ID, DESC, ALIAS, false, true, false)
670#define PARAM_COL_IN(ID, DESC, ALIAS) \
671 PARAM_COL(ID, DESC, ALIAS, false, true, true)
698#define PARAM_COL_IN_REQ(ID, DESC, ALIAS) \
699 PARAM_COL(ID, DESC, ALIAS, true, true, true)
726#define PARAM_ROW_IN(ID, DESC, ALIAS) \
727 PARAM_ROW(ID, DESC, ALIAS, false, true, true)
754#define PARAM_UCOL_IN(ID, DESC, ALIAS) \
755 PARAM_UCOL(ID, DESC, ALIAS, false, true, true)
783#define PARAM_UROW_IN(ID, DESC, ALIAS) \
784 PARAM_UROW(ID, DESC, ALIAS, false, true, true)
816#define PARAM_COL_OUT(ID, DESC, ALIAS) \
817 PARAM_COL(ID, DESC, ALIAS, false, true, false)
849#define PARAM_ROW_OUT(ID, DESC, ALIAS) \
850 PARAM_ROW(ID, DESC, ALIAS, false, true, false)
882#define PARAM_UCOL_OUT(ID, DESC, ALIAS) \
883 PARAM_UCOL(ID, DESC, ALIAS, false, true, false)
915#define PARAM_UROW_OUT(ID, DESC, ALIAS) \
916 PARAM_UROW(ID, DESC, ALIAS, false, true, false)
942#define PARAM_VECTOR_IN(T, ID, DESC, ALIAS) \
943 PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), false)
976#define PARAM_VECTOR_OUT(T, ID, DESC, ALIAS) \
977 PARAM_OUT(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), false)
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)
1048#define PARAM_MODEL_IN(TYPE, ID, DESC, ALIAS) \
1049 PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, true)
1079#define PARAM_MODEL_IN_REQ(TYPE, ID, DESC, ALIAS) \
1080 PARAM_MODEL(TYPE, ID, DESC, ALIAS, true, true)
1104#define PARAM_MODEL_OUT(TYPE, ID, DESC, ALIAS) \
1105 PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, false)
1129#define PARAM_INT_IN_REQ(ID, DESC, ALIAS) \
1130 PARAM_IN(int, ID, DESC, ALIAS, 0, true)
1154#define PARAM_DOUBLE_IN_REQ(ID, DESC, ALIAS) \
1155 PARAM_IN(double, ID, DESC, ALIAS, 0.0, true)
1179#define PARAM_STRING_IN_REQ(ID, DESC, ALIAS) \
1180 PARAM_IN(std::string, ID, DESC, ALIAS, "", true)
1206#define PARAM_VECTOR_IN_REQ(T, ID, DESC, ALIAS) \
1207 PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), true);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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, \
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, \
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, \
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, \
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, \
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, \
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, \
DatasetMapper< data::IncrementPolicy > DatasetInfo
Linear algebra utility functions, generally performed on matrices or vectors.