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>;
49 #define PROGRAM_INFO(NAME, DESC) static mlpack::util::ProgramDoc \
50 cli_programdoc_dummy_object = mlpack::util::ProgramDoc(NAME, \
51 []() { return DESC; })
70 #define PARAM_FLAG(ID, DESC, ALIAS) \
71 PARAM_IN(bool, ID, DESC, ALIAS, false, false);
95 #define PARAM_INT_IN(ID, DESC, ALIAS, DEF) \
96 PARAM_IN(int, ID, DESC, ALIAS, DEF, false)
123 #define PARAM_INT_OUT(ID, DESC) \
124 PARAM_OUT(int, ID, DESC, "", 0, false)
147 #define PARAM_DOUBLE_IN(ID, DESC, ALIAS, DEF) \
148 PARAM_IN(double, ID, DESC, ALIAS, DEF, false)
175 #define PARAM_DOUBLE_OUT(ID, DESC) \
176 PARAM_OUT(double, ID, DESC, "", 0.0, false)
200 #define PARAM_STRING_IN(ID, DESC, ALIAS, DEF) \
201 PARAM_IN(std::string, ID, DESC, ALIAS, DEF, false)
229 #define PARAM_STRING_OUT(ID, DESC, ALIAS) \
230 PARAM_OUT(std::string, ID, DESC, ALIAS, "", false)
255 #define PARAM_MATRIX_IN(ID, DESC, ALIAS) \
256 PARAM_MATRIX(ID, DESC, ALIAS, false, true, true)
281 #define PARAM_MATRIX_IN_REQ(ID, DESC, ALIAS) \
282 PARAM_MATRIX(ID, DESC, ALIAS, true, true, true)
312 #define PARAM_MATRIX_OUT(ID, DESC, ALIAS) \
313 PARAM_MATRIX(ID, DESC, ALIAS, false, true, false)
339 #define PARAM_TMATRIX_IN(ID, DESC, ALIAS) \
340 PARAM_MATRIX(ID, DESC, ALIAS, false, false, true)
367 #define PARAM_TMATRIX_IN_REQ(ID, DESC, ALIAS) \
368 PARAM_MATRIX(ID, DESC, ALIAS, true, false, true)
400 #define PARAM_TMATRIX_OUT(ID, DESC, ALIAS) \
401 PARAM_MATRIX(ID, DESC, ALIAS, false, false, false)
426 #define PARAM_UMATRIX_IN(ID, DESC, ALIAS) \
427 PARAM_UMATRIX(ID, DESC, ALIAS, false, true, true)
453 #define PARAM_UMATRIX_IN_REQ(ID, DESC, ALIAS) \
454 PARAM_UMATRIX(ID, DESC, ALIAS, true, true, true)
485 #define PARAM_UMATRIX_OUT(ID, DESC, ALIAS) \
486 PARAM_UMATRIX(ID, DESC, ALIAS, false, true, false)
512 #define PARAM_COL_IN(ID, DESC, ALIAS) \
513 PARAM_COL(ID, DESC, ALIAS, false, true, true)
538 #define PARAM_ROW_IN(ID, DESC, ALIAS) \
539 PARAM_ROW(ID, DESC, ALIAS, false, true, true)
564 #define PARAM_UCOL_IN(ID, DESC, ALIAS) \
565 PARAM_UCOL(ID, DESC, ALIAS, false, true, true)
591 #define PARAM_UROW_IN(ID, DESC, ALIAS) \
592 PARAM_UROW(ID, DESC, ALIAS, false, true, true)
622 #define PARAM_COL_OUT(ID, DESC, ALIAS) \
623 PARAM_COL(ID, DESC, ALIAS, false, true, false)
653 #define PARAM_ROW_OUT(ID, DESC, ALIAS) \
654 PARAM_ROW(ID, DESC, ALIAS, false, true, false)
684 #define PARAM_UCOL_OUT(ID, DESC, ALIAS) \
685 PARAM_UCOL(ID, DESC, ALIAS, false, true, false)
715 #define PARAM_UROW_OUT(ID, DESC, ALIAS) \
716 PARAM_UROW(ID, DESC, ALIAS, false, true, false)
739 #define PARAM_VECTOR_IN(T, ID, DESC, ALIAS) \
740 PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), false)
768 #define PARAM_VECTOR_OUT(T, ID, DESC, ALIAS) \
769 PARAM_OUT(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), false)
805 #define TUPLE_TYPE std::tuple<mlpack::data::DatasetInfo, arma::mat>
806 #define PARAM_MATRIX_AND_INFO_IN(ID, DESC, ALIAS) \
807 PARAM_IN(TUPLE_TYPE, ID, DESC, ALIAS, TUPLE_TYPE(), false)
838 #define PARAM_MODEL_IN(TYPE, ID, DESC, ALIAS) \
839 PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, true)
870 #define PARAM_MODEL_IN_REQ(TYPE, ID, DESC, ALIAS) \
871 PARAM_MODEL(TYPE, ID, DESC, ALIAS, true, true)
893 #define PARAM_MODEL_OUT(TYPE, ID, DESC, ALIAS) \
894 PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, false)
915 #define PARAM_INT_IN_REQ(ID, DESC, ALIAS) \
916 PARAM_IN(int, ID, DESC, ALIAS, 0, true)
937 #define PARAM_DOUBLE_IN_REQ(ID, DESC, ALIAS) \
938 PARAM_IN(double, ID, DESC, ALIAS, 0.0, true)
959 #define PARAM_STRING_IN_REQ(ID, DESC, ALIAS) \
960 PARAM_IN(std::string, ID, DESC, ALIAS, "", true)
982 #define PARAM_VECTOR_IN_REQ(T, ID, DESC, ALIAS) \
983 PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), true);
992 #define JOIN(x, y) JOIN_AGAIN(x, y)
993 #define JOIN_AGAIN(x, y) x ## y
1012 #define PARAM_IN(T, ID, DESC, ALIAS, DEF, REQ) \
1013 static mlpack::util::Option<T> \
1014 JOIN(cli_option_dummy_object_in_, __COUNTER__) \
1015 (DEF, ID, DESC, ALIAS, #T, REQ, true, false, testName);
1017 #define PARAM_OUT(T, ID, DESC, ALIAS, DEF, REQ) \
1018 static mlpack::util::Option<T> \
1019 JOIN(cli_option_dummy_object_out_, __COUNTER__) \
1020 (DEF, ID, DESC, ALIAS, #T, REQ, false, false, testName);
1022 #define PARAM_MATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1023 static mlpack::util::Option<arma::mat> \
1024 JOIN(cli_option_dummy_matrix_, __COUNTER__) \
1025 (arma::mat(), ID, DESC, ALIAS, "arma::mat", \
1026 REQ, IN, !TRANS, testName);
1028 #define PARAM_UMATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1029 static mlpack::util::Option<arma::Mat<size_t>> \
1030 JOIN(cli_option_dummy_umatrix_, __COUNTER__) \
1031 (arma::Mat<size_t>(), ID, DESC, ALIAS, "arma::Mat<size_t>", \
1032 REQ, IN, !TRANS, testName);
1034 #define PARAM_COL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1035 static mlpack::util::Option<arma::vec> \
1036 JOIN(cli_option_dummy_col_, __COUNTER__) \
1037 (arma::vec(), ID, DESC, ALIAS, "arma::vec", \
1038 REQ, IN, !TRANS, testName);
1040 #define PARAM_UCOL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1041 static mlpack::util::Option<arma::Col<size_t>> \
1042 JOIN(cli_option_dummy_ucol_, __COUNTER__) \
1043 (arma::Col<size_t>(), ID, DESC, ALIAS, "arma::Col<size_t>", \
1044 REQ, IN, !TRANS, testName);
1046 #define PARAM_ROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1047 static mlpack::util::Option<arma::rowvec> \
1048 JOIN(cli_option_dummy_row_, __COUNTER__) \
1049 (arma::rowvec(), ID, DESC, ALIAS, "arma::rowvec", \
1050 REQ, IN, !TRANS, testName);
1052 #define PARAM_UROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1053 static mlpack::util::Option<arma::Row<size_t>> \
1054 JOIN(cli_option_dummy_urow_, __COUNTER__) \
1055 (arma::Row<size_t>(), ID, DESC, ALIAS, "arma::Row<size_t>", \
1056 REQ, IN, !TRANS, testName);
1060 #define PARAM_MODEL(TYPE, ID, DESC, ALIAS, REQ, IN) \
1061 static mlpack::util::Option<TYPE*> \
1062 JOIN(cli_option_dummy_model_, __COUNTER__) \
1063 (nullptr, ID, DESC, ALIAS, #TYPE, REQ, IN, false, testName);
1069 #define PARAM_IN(T, ID, DESC, ALIAS, DEF, REQ) \
1070 static mlpack::util::Option<T> \
1071 JOIN(JOIN(cli_option_dummy_object_in_, __LINE__), opt) \
1072 (DEF, ID, DESC, ALIAS, #T, REQ, true, false, testName);
1074 #define PARAM_OUT(T, ID, DESC, ALIAS, DEF, REQ) \
1075 static mlpack::util::Option<T> \
1076 JOIN(JOIN(cli_option_dummy_object_out_, __LINE__), opt) \
1077 (DEF, ID, DESC, ALIAS, #T, REQ, false, false, testName);
1079 #define PARAM_MATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1080 static mlpack::util::Option<arma::mat> \
1081 JOIN(JOIN(cli_option_dummy_object_matrix_, __LINE__), opt) \
1082 (arma::mat(), ID, DESC, ALIAS, "arma::mat", REQ, IN, !TRANS, \
1085 #define PARAM_UMATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1086 static mlpack::util::Option<arma::Mat<size_t>> \
1087 JOIN(JOIN(cli_option_dummy_object_umatrix_, __LINE__), opt) \
1088 (arma::Mat<size_t>(), ID, DESC, ALIAS, "arma::Mat<size_t>", REQ, IN, \
1091 #define PARAM_COL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1092 static mlpack::util::Option<arma::vec> \
1093 JOIN(cli_option_dummy_object_col_, __LINE__) \
1094 (arma::vec(), ID, DESC, ALIAS, "arma::vec", REQ, IN, !TRANS, \
1097 #define PARAM_UCOL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1098 static mlpack::util::Option<arma::Col<size_t>> \
1099 JOIN(cli_option_dummy_object_ucol_, __LINE__) \
1100 (arma::Col<size_t>(), ID, DESC, ALIAS, "arma::Col<size_t>", REQ, IN, \
1103 #define PARAM_ROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1104 static mlpack::util::Option<arma::rowvec> \
1105 JOIN(cli_option_dummy_object_row_, __LINE__) \
1106 (arma::rowvec(), ID, DESC, ALIAS, "arma::rowvec", REQ, IN, !TRANS, \
1109 #define PARAM_UROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1110 static mlpack::util::Option<arma::Row<size_t>> \
1111 JOIN(cli_option_dummy_object_urow_, __LINE__) \
1112 (arma::Row<size_t>(), ID, DESC, ALIAS, "arma::Row<size_t>", REQ, IN, \
1115 #define PARAM_MODEL(TYPE, ID, DESC, ALIAS, REQ, IN) \
1116 static mlpack::util::Option<TYPE*> \
1117 JOIN(JOIN(cli_option_dummy_object_model_, __LINE__), opt) \
1118 (nullptr, ID, DESC, ALIAS, #TYPE, REQ, IN, false, \
DatasetMapper< data::IncrementPolicy > DatasetInfo