15 #ifndef MLPACK_CORE_UTIL_PARAM_HPP
16 #define MLPACK_CORE_UTIL_PARAM_HPP
22 class IncrementPolicy;
24 template<
typename PolicyType,
typename InputType>
27 using DatasetInfo = DatasetMapper<IncrementPolicy, std::string>;
45 #define SEE_ALSO(DESCRIPTION, LINK) {DESCRIPTION, LINK}
71 #define PROGRAM_INFO(NAME, SHORT_DESC, DESC, ...) \
72 static mlpack::util::ProgramDoc \
73 cli_programdoc_dummy_object = mlpack::util::ProgramDoc(NAME, SHORT_DESC, \
74 []() { return DESC; }, { __VA_ARGS__ } )
95 #define PARAM_FLAG(ID, DESC, ALIAS) \
96 PARAM_IN(bool, ID, DESC, ALIAS, false, false);
122 #define PARAM_INT_IN(ID, DESC, ALIAS, DEF) \
123 PARAM_IN(int, ID, DESC, ALIAS, DEF, false)
152 #define PARAM_INT_OUT(ID, DESC) \
153 PARAM_OUT(int, ID, DESC, "", 0, false)
178 #define PARAM_DOUBLE_IN(ID, DESC, ALIAS, DEF) \
179 PARAM_IN(double, ID, DESC, ALIAS, DEF, false)
208 #define PARAM_DOUBLE_OUT(ID, DESC) \
209 PARAM_OUT(double, ID, DESC, "", 0.0, false)
235 #define PARAM_STRING_IN(ID, DESC, ALIAS, DEF) \
236 PARAM_IN(std::string, ID, DESC, ALIAS, DEF, false)
266 #define PARAM_STRING_OUT(ID, DESC, ALIAS) \
267 PARAM_OUT(std::string, ID, DESC, ALIAS, "", false)
294 #define PARAM_MATRIX_IN(ID, DESC, ALIAS) \
295 PARAM_MATRIX(ID, DESC, ALIAS, false, true, true)
322 #define PARAM_MATRIX_IN_REQ(ID, DESC, ALIAS) \
323 PARAM_MATRIX(ID, DESC, ALIAS, true, true, true)
355 #define PARAM_MATRIX_OUT(ID, DESC, ALIAS) \
356 PARAM_MATRIX(ID, DESC, ALIAS, false, true, false)
384 #define PARAM_TMATRIX_IN(ID, DESC, ALIAS) \
385 PARAM_MATRIX(ID, DESC, ALIAS, false, false, true)
414 #define PARAM_TMATRIX_IN_REQ(ID, DESC, ALIAS) \
415 PARAM_MATRIX(ID, DESC, ALIAS, true, false, true)
449 #define PARAM_TMATRIX_OUT(ID, DESC, ALIAS) \
450 PARAM_MATRIX(ID, DESC, ALIAS, false, false, false)
477 #define PARAM_UMATRIX_IN(ID, DESC, ALIAS) \
478 PARAM_UMATRIX(ID, DESC, ALIAS, false, true, true)
506 #define PARAM_UMATRIX_IN_REQ(ID, DESC, ALIAS) \
507 PARAM_UMATRIX(ID, DESC, ALIAS, true, true, true)
540 #define PARAM_UMATRIX_OUT(ID, DESC, ALIAS) \
541 PARAM_UMATRIX(ID, DESC, ALIAS, false, true, false)
569 #define PARAM_COL_IN(ID, DESC, ALIAS) \
570 PARAM_COL(ID, DESC, ALIAS, false, true, true)
597 #define PARAM_COL_IN_REQ(ID, DESC, ALIAS) \
598 PARAM_COL(ID, DESC, ALIAS, true, true, true)
625 #define PARAM_ROW_IN(ID, DESC, ALIAS) \
626 PARAM_ROW(ID, DESC, ALIAS, false, true, true)
653 #define PARAM_UCOL_IN(ID, DESC, ALIAS) \
654 PARAM_UCOL(ID, DESC, ALIAS, false, true, true)
682 #define PARAM_UROW_IN(ID, DESC, ALIAS) \
683 PARAM_UROW(ID, DESC, ALIAS, false, true, true)
715 #define PARAM_COL_OUT(ID, DESC, ALIAS) \
716 PARAM_COL(ID, DESC, ALIAS, false, true, false)
748 #define PARAM_ROW_OUT(ID, DESC, ALIAS) \
749 PARAM_ROW(ID, DESC, ALIAS, false, true, false)
781 #define PARAM_UCOL_OUT(ID, DESC, ALIAS) \
782 PARAM_UCOL(ID, DESC, ALIAS, false, true, false)
814 #define PARAM_UROW_OUT(ID, DESC, ALIAS) \
815 PARAM_UROW(ID, DESC, ALIAS, false, true, false)
840 #define PARAM_VECTOR_IN(T, ID, DESC, ALIAS) \
841 PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), false)
871 #define PARAM_VECTOR_OUT(T, ID, DESC, ALIAS) \
872 PARAM_OUT(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), false)
910 #define TUPLE_TYPE std::tuple<mlpack::data::DatasetInfo, arma::mat>
911 #define PARAM_MATRIX_AND_INFO_IN(ID, DESC, ALIAS) \
912 PARAM_IN(TUPLE_TYPE, ID, DESC, ALIAS, TUPLE_TYPE(), false)
945 #define PARAM_MODEL_IN(TYPE, ID, DESC, ALIAS) \
946 PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, true)
979 #define PARAM_MODEL_IN_REQ(TYPE, ID, DESC, ALIAS) \
980 PARAM_MODEL(TYPE, ID, DESC, ALIAS, true, true)
1004 #define PARAM_MODEL_OUT(TYPE, ID, DESC, ALIAS) \
1005 PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, false)
1028 #define PARAM_INT_IN_REQ(ID, DESC, ALIAS) \
1029 PARAM_IN(int, ID, DESC, ALIAS, 0, true)
1052 #define PARAM_DOUBLE_IN_REQ(ID, DESC, ALIAS) \
1053 PARAM_IN(double, ID, DESC, ALIAS, 0.0, true)
1076 #define PARAM_STRING_IN_REQ(ID, DESC, ALIAS) \
1077 PARAM_IN(std::string, ID, DESC, ALIAS, "", true)
1101 #define PARAM_VECTOR_IN_REQ(T, ID, DESC, ALIAS) \
1102 PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), true);
1111 #define JOIN(x, y) JOIN_AGAIN(x, y)
1112 #define JOIN_AGAIN(x, y) x ## y
1133 #define PARAM_IN(T, ID, DESC, ALIAS, DEF, REQ) \
1134 static mlpack::util::Option<T> \
1135 JOIN(cli_option_dummy_object_in_, __COUNTER__) \
1136 (DEF, ID, DESC, ALIAS, #T, REQ, true, false, testName);
1138 #define PARAM_OUT(T, ID, DESC, ALIAS, DEF, REQ) \
1139 static mlpack::util::Option<T> \
1140 JOIN(cli_option_dummy_object_out_, __COUNTER__) \
1141 (DEF, ID, DESC, ALIAS, #T, REQ, false, false, testName);
1143 #define PARAM_MATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1144 static mlpack::util::Option<arma::mat> \
1145 JOIN(cli_option_dummy_matrix_, __COUNTER__) \
1146 (arma::mat(), ID, DESC, ALIAS, "arma::mat", \
1147 REQ, IN, !TRANS, testName);
1149 #define PARAM_UMATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1150 static mlpack::util::Option<arma::Mat<size_t>> \
1151 JOIN(cli_option_dummy_umatrix_, __COUNTER__) \
1152 (arma::Mat<size_t>(), ID, DESC, ALIAS, "arma::Mat<size_t>", \
1153 REQ, IN, !TRANS, testName);
1155 #define PARAM_COL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1156 static mlpack::util::Option<arma::vec> \
1157 JOIN(cli_option_dummy_col_, __COUNTER__) \
1158 (arma::vec(), ID, DESC, ALIAS, "arma::vec", \
1159 REQ, IN, !TRANS, testName);
1161 #define PARAM_UCOL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1162 static mlpack::util::Option<arma::Col<size_t>> \
1163 JOIN(cli_option_dummy_ucol_, __COUNTER__) \
1164 (arma::Col<size_t>(), ID, DESC, ALIAS, "arma::Col<size_t>", \
1165 REQ, IN, !TRANS, testName);
1167 #define PARAM_ROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1168 static mlpack::util::Option<arma::rowvec> \
1169 JOIN(cli_option_dummy_row_, __COUNTER__) \
1170 (arma::rowvec(), ID, DESC, ALIAS, "arma::rowvec", \
1171 REQ, IN, !TRANS, testName);
1173 #define PARAM_UROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1174 static mlpack::util::Option<arma::Row<size_t>> \
1175 JOIN(cli_option_dummy_urow_, __COUNTER__) \
1176 (arma::Row<size_t>(), ID, DESC, ALIAS, "arma::Row<size_t>", \
1177 REQ, IN, !TRANS, testName);
1181 #define PARAM_MODEL(TYPE, ID, DESC, ALIAS, REQ, IN) \
1182 static mlpack::util::Option<TYPE*> \
1183 JOIN(cli_option_dummy_model_, __COUNTER__) \
1184 (nullptr, ID, DESC, ALIAS, #TYPE, REQ, IN, false, testName);
1190 #define PARAM_IN(T, ID, DESC, ALIAS, DEF, REQ) \
1191 static mlpack::util::Option<T> \
1192 JOIN(JOIN(cli_option_dummy_object_in_, __LINE__), opt) \
1193 (DEF, ID, DESC, ALIAS, #T, REQ, true, false, testName);
1195 #define PARAM_OUT(T, ID, DESC, ALIAS, DEF, REQ) \
1196 static mlpack::util::Option<T> \
1197 JOIN(JOIN(cli_option_dummy_object_out_, __LINE__), opt) \
1198 (DEF, ID, DESC, ALIAS, #T, REQ, false, false, testName);
1200 #define PARAM_MATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1201 static mlpack::util::Option<arma::mat> \
1202 JOIN(JOIN(cli_option_dummy_object_matrix_, __LINE__), opt) \
1203 (arma::mat(), ID, DESC, ALIAS, "arma::mat", REQ, IN, !TRANS, \
1206 #define PARAM_UMATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1207 static mlpack::util::Option<arma::Mat<size_t>> \
1208 JOIN(JOIN(cli_option_dummy_object_umatrix_, __LINE__), opt) \
1209 (arma::Mat<size_t>(), ID, DESC, ALIAS, "arma::Mat<size_t>", REQ, IN, \
1212 #define PARAM_COL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1213 static mlpack::util::Option<arma::vec> \
1214 JOIN(cli_option_dummy_object_col_, __LINE__) \
1215 (arma::vec(), ID, DESC, ALIAS, "arma::vec", REQ, IN, !TRANS, \
1218 #define PARAM_UCOL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1219 static mlpack::util::Option<arma::Col<size_t>> \
1220 JOIN(cli_option_dummy_object_ucol_, __LINE__) \
1221 (arma::Col<size_t>(), ID, DESC, ALIAS, "arma::Col<size_t>", REQ, IN, \
1224 #define PARAM_ROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1225 static mlpack::util::Option<arma::rowvec> \
1226 JOIN(cli_option_dummy_object_row_, __LINE__) \
1227 (arma::rowvec(), ID, DESC, ALIAS, "arma::rowvec", REQ, IN, !TRANS, \
1230 #define PARAM_UROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1231 static mlpack::util::Option<arma::Row<size_t>> \
1232 JOIN(cli_option_dummy_object_urow_, __LINE__) \
1233 (arma::Row<size_t>(), ID, DESC, ALIAS, "arma::Row<size_t>", REQ, IN, \
1236 #define PARAM_MODEL(TYPE, ID, DESC, ALIAS, REQ, IN) \
1237 static mlpack::util::Option<TYPE*> \
1238 JOIN(JOIN(cli_option_dummy_object_model_, __LINE__), opt) \
1239 (nullptr, ID, DESC, ALIAS, #TYPE, REQ, IN, false, \
DatasetMapper< data::IncrementPolicy > DatasetInfo