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__ } )
93 #define PARAM_FLAG(ID, DESC, ALIAS) \
94 PARAM_IN(bool, ID, DESC, ALIAS, false, false);
118 #define PARAM_INT_IN(ID, DESC, ALIAS, DEF) \
119 PARAM_IN(int, ID, DESC, ALIAS, DEF, false)
146 #define PARAM_INT_OUT(ID, DESC) \
147 PARAM_OUT(int, ID, DESC, "", 0, false)
170 #define PARAM_DOUBLE_IN(ID, DESC, ALIAS, DEF) \
171 PARAM_IN(double, ID, DESC, ALIAS, DEF, false)
198 #define PARAM_DOUBLE_OUT(ID, DESC) \
199 PARAM_OUT(double, ID, DESC, "", 0.0, false)
223 #define PARAM_STRING_IN(ID, DESC, ALIAS, DEF) \
224 PARAM_IN(std::string, ID, DESC, ALIAS, DEF, false)
252 #define PARAM_STRING_OUT(ID, DESC, ALIAS) \
253 PARAM_OUT(std::string, ID, DESC, ALIAS, "", false)
278 #define PARAM_MATRIX_IN(ID, DESC, ALIAS) \
279 PARAM_MATRIX(ID, DESC, ALIAS, false, true, true)
304 #define PARAM_MATRIX_IN_REQ(ID, DESC, ALIAS) \
305 PARAM_MATRIX(ID, DESC, ALIAS, true, true, true)
335 #define PARAM_MATRIX_OUT(ID, DESC, ALIAS) \
336 PARAM_MATRIX(ID, DESC, ALIAS, false, true, false)
362 #define PARAM_TMATRIX_IN(ID, DESC, ALIAS) \
363 PARAM_MATRIX(ID, DESC, ALIAS, false, false, true)
390 #define PARAM_TMATRIX_IN_REQ(ID, DESC, ALIAS) \
391 PARAM_MATRIX(ID, DESC, ALIAS, true, false, true)
423 #define PARAM_TMATRIX_OUT(ID, DESC, ALIAS) \
424 PARAM_MATRIX(ID, DESC, ALIAS, false, false, false)
449 #define PARAM_UMATRIX_IN(ID, DESC, ALIAS) \
450 PARAM_UMATRIX(ID, DESC, ALIAS, false, true, true)
476 #define PARAM_UMATRIX_IN_REQ(ID, DESC, ALIAS) \
477 PARAM_UMATRIX(ID, DESC, ALIAS, true, true, true)
508 #define PARAM_UMATRIX_OUT(ID, DESC, ALIAS) \
509 PARAM_UMATRIX(ID, DESC, ALIAS, false, true, false)
535 #define PARAM_COL_IN(ID, DESC, ALIAS) \
536 PARAM_COL(ID, DESC, ALIAS, false, true, true)
561 #define PARAM_COL_IN_REQ(ID, DESC, ALIAS) \
562 PARAM_COL(ID, DESC, ALIAS, true, true, true)
587 #define PARAM_ROW_IN(ID, DESC, ALIAS) \
588 PARAM_ROW(ID, DESC, ALIAS, false, true, true)
613 #define PARAM_UCOL_IN(ID, DESC, ALIAS) \
614 PARAM_UCOL(ID, DESC, ALIAS, false, true, true)
640 #define PARAM_UROW_IN(ID, DESC, ALIAS) \
641 PARAM_UROW(ID, DESC, ALIAS, false, true, true)
671 #define PARAM_COL_OUT(ID, DESC, ALIAS) \
672 PARAM_COL(ID, DESC, ALIAS, false, true, false)
702 #define PARAM_ROW_OUT(ID, DESC, ALIAS) \
703 PARAM_ROW(ID, DESC, ALIAS, false, true, false)
733 #define PARAM_UCOL_OUT(ID, DESC, ALIAS) \
734 PARAM_UCOL(ID, DESC, ALIAS, false, true, false)
764 #define PARAM_UROW_OUT(ID, DESC, ALIAS) \
765 PARAM_UROW(ID, DESC, ALIAS, false, true, false)
788 #define PARAM_VECTOR_IN(T, ID, DESC, ALIAS) \
789 PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), false)
817 #define PARAM_VECTOR_OUT(T, ID, DESC, ALIAS) \
818 PARAM_OUT(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), false)
854 #define TUPLE_TYPE std::tuple<mlpack::data::DatasetInfo, arma::mat>
855 #define PARAM_MATRIX_AND_INFO_IN(ID, DESC, ALIAS) \
856 PARAM_IN(TUPLE_TYPE, ID, DESC, ALIAS, TUPLE_TYPE(), false)
887 #define PARAM_MODEL_IN(TYPE, ID, DESC, ALIAS) \
888 PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, true)
919 #define PARAM_MODEL_IN_REQ(TYPE, ID, DESC, ALIAS) \
920 PARAM_MODEL(TYPE, ID, DESC, ALIAS, true, true)
942 #define PARAM_MODEL_OUT(TYPE, ID, DESC, ALIAS) \
943 PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, false)
964 #define PARAM_INT_IN_REQ(ID, DESC, ALIAS) \
965 PARAM_IN(int, ID, DESC, ALIAS, 0, true)
986 #define PARAM_DOUBLE_IN_REQ(ID, DESC, ALIAS) \
987 PARAM_IN(double, ID, DESC, ALIAS, 0.0, true)
1008 #define PARAM_STRING_IN_REQ(ID, DESC, ALIAS) \
1009 PARAM_IN(std::string, ID, DESC, ALIAS, "", true)
1031 #define PARAM_VECTOR_IN_REQ(T, ID, DESC, ALIAS) \
1032 PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), true);
1041 #define JOIN(x, y) JOIN_AGAIN(x, y)
1042 #define JOIN_AGAIN(x, y) x ## y
1061 #define PARAM_IN(T, ID, DESC, ALIAS, DEF, REQ) \
1062 static mlpack::util::Option<T> \
1063 JOIN(cli_option_dummy_object_in_, __COUNTER__) \
1064 (DEF, ID, DESC, ALIAS, #T, REQ, true, false, testName);
1066 #define PARAM_OUT(T, ID, DESC, ALIAS, DEF, REQ) \
1067 static mlpack::util::Option<T> \
1068 JOIN(cli_option_dummy_object_out_, __COUNTER__) \
1069 (DEF, ID, DESC, ALIAS, #T, REQ, false, false, testName);
1071 #define PARAM_MATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1072 static mlpack::util::Option<arma::mat> \
1073 JOIN(cli_option_dummy_matrix_, __COUNTER__) \
1074 (arma::mat(), ID, DESC, ALIAS, "arma::mat", \
1075 REQ, IN, !TRANS, testName);
1077 #define PARAM_UMATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1078 static mlpack::util::Option<arma::Mat<size_t>> \
1079 JOIN(cli_option_dummy_umatrix_, __COUNTER__) \
1080 (arma::Mat<size_t>(), ID, DESC, ALIAS, "arma::Mat<size_t>", \
1081 REQ, IN, !TRANS, testName);
1083 #define PARAM_COL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1084 static mlpack::util::Option<arma::vec> \
1085 JOIN(cli_option_dummy_col_, __COUNTER__) \
1086 (arma::vec(), ID, DESC, ALIAS, "arma::vec", \
1087 REQ, IN, !TRANS, testName);
1089 #define PARAM_UCOL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1090 static mlpack::util::Option<arma::Col<size_t>> \
1091 JOIN(cli_option_dummy_ucol_, __COUNTER__) \
1092 (arma::Col<size_t>(), ID, DESC, ALIAS, "arma::Col<size_t>", \
1093 REQ, IN, !TRANS, testName);
1095 #define PARAM_ROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1096 static mlpack::util::Option<arma::rowvec> \
1097 JOIN(cli_option_dummy_row_, __COUNTER__) \
1098 (arma::rowvec(), ID, DESC, ALIAS, "arma::rowvec", \
1099 REQ, IN, !TRANS, testName);
1101 #define PARAM_UROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1102 static mlpack::util::Option<arma::Row<size_t>> \
1103 JOIN(cli_option_dummy_urow_, __COUNTER__) \
1104 (arma::Row<size_t>(), ID, DESC, ALIAS, "arma::Row<size_t>", \
1105 REQ, IN, !TRANS, testName);
1109 #define PARAM_MODEL(TYPE, ID, DESC, ALIAS, REQ, IN) \
1110 static mlpack::util::Option<TYPE*> \
1111 JOIN(cli_option_dummy_model_, __COUNTER__) \
1112 (nullptr, ID, DESC, ALIAS, #TYPE, REQ, IN, false, testName);
1118 #define PARAM_IN(T, ID, DESC, ALIAS, DEF, REQ) \
1119 static mlpack::util::Option<T> \
1120 JOIN(JOIN(cli_option_dummy_object_in_, __LINE__), opt) \
1121 (DEF, ID, DESC, ALIAS, #T, REQ, true, false, testName);
1123 #define PARAM_OUT(T, ID, DESC, ALIAS, DEF, REQ) \
1124 static mlpack::util::Option<T> \
1125 JOIN(JOIN(cli_option_dummy_object_out_, __LINE__), opt) \
1126 (DEF, ID, DESC, ALIAS, #T, REQ, false, false, testName);
1128 #define PARAM_MATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1129 static mlpack::util::Option<arma::mat> \
1130 JOIN(JOIN(cli_option_dummy_object_matrix_, __LINE__), opt) \
1131 (arma::mat(), ID, DESC, ALIAS, "arma::mat", REQ, IN, !TRANS, \
1134 #define PARAM_UMATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1135 static mlpack::util::Option<arma::Mat<size_t>> \
1136 JOIN(JOIN(cli_option_dummy_object_umatrix_, __LINE__), opt) \
1137 (arma::Mat<size_t>(), ID, DESC, ALIAS, "arma::Mat<size_t>", REQ, IN, \
1140 #define PARAM_COL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1141 static mlpack::util::Option<arma::vec> \
1142 JOIN(cli_option_dummy_object_col_, __LINE__) \
1143 (arma::vec(), ID, DESC, ALIAS, "arma::vec", REQ, IN, !TRANS, \
1146 #define PARAM_UCOL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1147 static mlpack::util::Option<arma::Col<size_t>> \
1148 JOIN(cli_option_dummy_object_ucol_, __LINE__) \
1149 (arma::Col<size_t>(), ID, DESC, ALIAS, "arma::Col<size_t>", REQ, IN, \
1152 #define PARAM_ROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1153 static mlpack::util::Option<arma::rowvec> \
1154 JOIN(cli_option_dummy_object_row_, __LINE__) \
1155 (arma::rowvec(), ID, DESC, ALIAS, "arma::rowvec", REQ, IN, !TRANS, \
1158 #define PARAM_UROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1159 static mlpack::util::Option<arma::Row<size_t>> \
1160 JOIN(cli_option_dummy_object_urow_, __LINE__) \
1161 (arma::Row<size_t>(), ID, DESC, ALIAS, "arma::Row<size_t>", REQ, IN, \
1164 #define PARAM_MODEL(TYPE, ID, DESC, ALIAS, REQ, IN) \
1165 static mlpack::util::Option<TYPE*> \
1166 JOIN(JOIN(cli_option_dummy_object_model_, __LINE__), opt) \
1167 (nullptr, ID, DESC, ALIAS, #TYPE, REQ, IN, false, \
DatasetMapper< data::IncrementPolicy > DatasetInfo