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)
873 #define PARAM_VECTOR_OUT(T, ID, DESC, ALIAS) \
874 PARAM_OUT(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), false)
912 #define TUPLE_TYPE std::tuple<mlpack::data::DatasetInfo, arma::mat>
913 #define PARAM_MATRIX_AND_INFO_IN(ID, DESC, ALIAS) \
914 PARAM_IN(TUPLE_TYPE, ID, DESC, ALIAS, TUPLE_TYPE(), false)
944 #define PARAM_MODEL_IN(TYPE, ID, DESC, ALIAS) \
945 PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, true)
975 #define PARAM_MODEL_IN_REQ(TYPE, ID, DESC, ALIAS) \
976 PARAM_MODEL(TYPE, ID, DESC, ALIAS, true, true)
1000 #define PARAM_MODEL_OUT(TYPE, ID, DESC, ALIAS) \
1001 PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, false)
1024 #define PARAM_INT_IN_REQ(ID, DESC, ALIAS) \
1025 PARAM_IN(int, ID, DESC, ALIAS, 0, true)
1048 #define PARAM_DOUBLE_IN_REQ(ID, DESC, ALIAS) \
1049 PARAM_IN(double, ID, DESC, ALIAS, 0.0, true)
1072 #define PARAM_STRING_IN_REQ(ID, DESC, ALIAS) \
1073 PARAM_IN(std::string, ID, DESC, ALIAS, "", true)
1098 #define PARAM_VECTOR_IN_REQ(T, ID, DESC, ALIAS) \
1099 PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), true);
1108 #define JOIN(x, y) JOIN_AGAIN(x, y)
1109 #define JOIN_AGAIN(x, y) x ## y
1130 #define PARAM_IN(T, ID, DESC, ALIAS, DEF, REQ) \
1131 static mlpack::util::Option<T> \
1132 JOIN(cli_option_dummy_object_in_, __COUNTER__) \
1133 (DEF, ID, DESC, ALIAS, #T, REQ, true, false, testName);
1135 #define PARAM_OUT(T, ID, DESC, ALIAS, DEF, REQ) \
1136 static mlpack::util::Option<T> \
1137 JOIN(cli_option_dummy_object_out_, __COUNTER__) \
1138 (DEF, ID, DESC, ALIAS, #T, REQ, false, false, testName);
1140 #define PARAM_MATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1141 static mlpack::util::Option<arma::mat> \
1142 JOIN(cli_option_dummy_matrix_, __COUNTER__) \
1143 (arma::mat(), ID, DESC, ALIAS, "arma::mat", \
1144 REQ, IN, !TRANS, testName);
1146 #define PARAM_UMATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1147 static mlpack::util::Option<arma::Mat<size_t>> \
1148 JOIN(cli_option_dummy_umatrix_, __COUNTER__) \
1149 (arma::Mat<size_t>(), ID, DESC, ALIAS, "arma::Mat<size_t>", \
1150 REQ, IN, !TRANS, testName);
1152 #define PARAM_COL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1153 static mlpack::util::Option<arma::vec> \
1154 JOIN(cli_option_dummy_col_, __COUNTER__) \
1155 (arma::vec(), ID, DESC, ALIAS, "arma::vec", \
1156 REQ, IN, !TRANS, testName);
1158 #define PARAM_UCOL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1159 static mlpack::util::Option<arma::Col<size_t>> \
1160 JOIN(cli_option_dummy_ucol_, __COUNTER__) \
1161 (arma::Col<size_t>(), ID, DESC, ALIAS, "arma::Col<size_t>", \
1162 REQ, IN, !TRANS, testName);
1164 #define PARAM_ROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1165 static mlpack::util::Option<arma::rowvec> \
1166 JOIN(cli_option_dummy_row_, __COUNTER__) \
1167 (arma::rowvec(), ID, DESC, ALIAS, "arma::rowvec", \
1168 REQ, IN, !TRANS, testName);
1170 #define PARAM_UROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1171 static mlpack::util::Option<arma::Row<size_t>> \
1172 JOIN(cli_option_dummy_urow_, __COUNTER__) \
1173 (arma::Row<size_t>(), ID, DESC, ALIAS, "arma::Row<size_t>", \
1174 REQ, IN, !TRANS, testName);
1178 #define PARAM_MODEL(TYPE, ID, DESC, ALIAS, REQ, IN) \
1179 static mlpack::util::Option<TYPE*> \
1180 JOIN(cli_option_dummy_model_, __COUNTER__) \
1181 (nullptr, ID, DESC, ALIAS, #TYPE, REQ, IN, false, testName);
1187 #define PARAM_IN(T, ID, DESC, ALIAS, DEF, REQ) \
1188 static mlpack::util::Option<T> \
1189 JOIN(JOIN(cli_option_dummy_object_in_, __LINE__), opt) \
1190 (DEF, ID, DESC, ALIAS, #T, REQ, true, false, testName);
1192 #define PARAM_OUT(T, ID, DESC, ALIAS, DEF, REQ) \
1193 static mlpack::util::Option<T> \
1194 JOIN(JOIN(cli_option_dummy_object_out_, __LINE__), opt) \
1195 (DEF, ID, DESC, ALIAS, #T, REQ, false, false, testName);
1197 #define PARAM_MATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1198 static mlpack::util::Option<arma::mat> \
1199 JOIN(JOIN(cli_option_dummy_object_matrix_, __LINE__), opt) \
1200 (arma::mat(), ID, DESC, ALIAS, "arma::mat", REQ, IN, !TRANS, \
1203 #define PARAM_UMATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1204 static mlpack::util::Option<arma::Mat<size_t>> \
1205 JOIN(JOIN(cli_option_dummy_object_umatrix_, __LINE__), opt) \
1206 (arma::Mat<size_t>(), ID, DESC, ALIAS, "arma::Mat<size_t>", REQ, IN, \
1209 #define PARAM_COL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1210 static mlpack::util::Option<arma::vec> \
1211 JOIN(cli_option_dummy_object_col_, __LINE__) \
1212 (arma::vec(), ID, DESC, ALIAS, "arma::vec", REQ, IN, !TRANS, \
1215 #define PARAM_UCOL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1216 static mlpack::util::Option<arma::Col<size_t>> \
1217 JOIN(cli_option_dummy_object_ucol_, __LINE__) \
1218 (arma::Col<size_t>(), ID, DESC, ALIAS, "arma::Col<size_t>", REQ, IN, \
1221 #define PARAM_ROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1222 static mlpack::util::Option<arma::rowvec> \
1223 JOIN(cli_option_dummy_object_row_, __LINE__) \
1224 (arma::rowvec(), ID, DESC, ALIAS, "arma::rowvec", REQ, IN, !TRANS, \
1227 #define PARAM_UROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1228 static mlpack::util::Option<arma::Row<size_t>> \
1229 JOIN(cli_option_dummy_object_urow_, __LINE__) \
1230 (arma::Row<size_t>(), ID, DESC, ALIAS, "arma::Row<size_t>", REQ, IN, \
1233 #define PARAM_MODEL(TYPE, ID, DESC, ALIAS, REQ, IN) \
1234 static mlpack::util::Option<TYPE*> \
1235 JOIN(JOIN(cli_option_dummy_object_model_, __LINE__), opt) \
1236 (nullptr, ID, DESC, ALIAS, #TYPE, REQ, IN, false, \
DatasetMapper< data::IncrementPolicy > DatasetInfo