param.hpp
Go to the documentation of this file.
1 
15 #ifndef MLPACK_CORE_UTIL_PARAM_HPP
16 #define MLPACK_CORE_UTIL_PARAM_HPP
17 
18 // Required forward declarations.
19 namespace mlpack {
20 namespace data {
21 
22 class IncrementPolicy;
23 
24 template<typename PolicyType, typename InputType>
25 class DatasetMapper;
26 
27 using DatasetInfo = DatasetMapper<IncrementPolicy, std::string>;
28 
29 } // namespace data
30 } // namespace mlpack
31 
45 #define SEE_ALSO(DESCRIPTION, LINK) {DESCRIPTION, LINK}
46 
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__ } )
75 
95 #define PARAM_FLAG(ID, DESC, ALIAS) \
96  PARAM_IN(bool, ID, DESC, ALIAS, false, false);
97 
122 #define PARAM_INT_IN(ID, DESC, ALIAS, DEF) \
123  PARAM_IN(int, ID, DESC, ALIAS, DEF, false)
124 
152 #define PARAM_INT_OUT(ID, DESC) \
153  PARAM_OUT(int, ID, DESC, "", 0, false)
154 
178 #define PARAM_DOUBLE_IN(ID, DESC, ALIAS, DEF) \
179  PARAM_IN(double, ID, DESC, ALIAS, DEF, false)
180 
208 #define PARAM_DOUBLE_OUT(ID, DESC) \
209  PARAM_OUT(double, ID, DESC, "", 0.0, false)
210 
235 #define PARAM_STRING_IN(ID, DESC, ALIAS, DEF) \
236  PARAM_IN(std::string, ID, DESC, ALIAS, DEF, false)
237 
266 #define PARAM_STRING_OUT(ID, DESC, ALIAS) \
267  PARAM_OUT(std::string, ID, DESC, ALIAS, "", false)
268 
294 #define PARAM_MATRIX_IN(ID, DESC, ALIAS) \
295  PARAM_MATRIX(ID, DESC, ALIAS, false, true, true)
296 
322 #define PARAM_MATRIX_IN_REQ(ID, DESC, ALIAS) \
323  PARAM_MATRIX(ID, DESC, ALIAS, true, true, true)
324 
355 #define PARAM_MATRIX_OUT(ID, DESC, ALIAS) \
356  PARAM_MATRIX(ID, DESC, ALIAS, false, true, false)
357 
384 #define PARAM_TMATRIX_IN(ID, DESC, ALIAS) \
385  PARAM_MATRIX(ID, DESC, ALIAS, false, false, true)
386 
414 #define PARAM_TMATRIX_IN_REQ(ID, DESC, ALIAS) \
415  PARAM_MATRIX(ID, DESC, ALIAS, true, false, true)
416 
449 #define PARAM_TMATRIX_OUT(ID, DESC, ALIAS) \
450  PARAM_MATRIX(ID, DESC, ALIAS, false, false, false)
451 
477 #define PARAM_UMATRIX_IN(ID, DESC, ALIAS) \
478  PARAM_UMATRIX(ID, DESC, ALIAS, false, true, true)
479 
506 #define PARAM_UMATRIX_IN_REQ(ID, DESC, ALIAS) \
507  PARAM_UMATRIX(ID, DESC, ALIAS, true, true, true)
508 
540 #define PARAM_UMATRIX_OUT(ID, DESC, ALIAS) \
541  PARAM_UMATRIX(ID, DESC, ALIAS, false, true, false)
542 
543 
569 #define PARAM_COL_IN(ID, DESC, ALIAS) \
570  PARAM_COL(ID, DESC, ALIAS, false, true, true)
571 
597 #define PARAM_COL_IN_REQ(ID, DESC, ALIAS) \
598  PARAM_COL(ID, DESC, ALIAS, true, true, true)
599 
625 #define PARAM_ROW_IN(ID, DESC, ALIAS) \
626  PARAM_ROW(ID, DESC, ALIAS, false, true, true)
627 
653 #define PARAM_UCOL_IN(ID, DESC, ALIAS) \
654  PARAM_UCOL(ID, DESC, ALIAS, false, true, true)
655 
682 #define PARAM_UROW_IN(ID, DESC, ALIAS) \
683  PARAM_UROW(ID, DESC, ALIAS, false, true, true)
684 
715 #define PARAM_COL_OUT(ID, DESC, ALIAS) \
716  PARAM_COL(ID, DESC, ALIAS, false, true, false)
717 
748 #define PARAM_ROW_OUT(ID, DESC, ALIAS) \
749  PARAM_ROW(ID, DESC, ALIAS, false, true, false)
750 
781 #define PARAM_UCOL_OUT(ID, DESC, ALIAS) \
782  PARAM_UCOL(ID, DESC, ALIAS, false, true, false)
783 
814 #define PARAM_UROW_OUT(ID, DESC, ALIAS) \
815  PARAM_UROW(ID, DESC, ALIAS, false, true, false)
816 
840 #define PARAM_VECTOR_IN(T, ID, DESC, ALIAS) \
841  PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), false)
842 
873 #define PARAM_VECTOR_OUT(T, ID, DESC, ALIAS) \
874  PARAM_OUT(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), false)
875 
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)
915 
944 #define PARAM_MODEL_IN(TYPE, ID, DESC, ALIAS) \
945  PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, true)
946 
975 #define PARAM_MODEL_IN_REQ(TYPE, ID, DESC, ALIAS) \
976  PARAM_MODEL(TYPE, ID, DESC, ALIAS, true, true)
977 
1000 #define PARAM_MODEL_OUT(TYPE, ID, DESC, ALIAS) \
1001  PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, false)
1002 
1024 #define PARAM_INT_IN_REQ(ID, DESC, ALIAS) \
1025  PARAM_IN(int, ID, DESC, ALIAS, 0, true)
1026 
1048 #define PARAM_DOUBLE_IN_REQ(ID, DESC, ALIAS) \
1049  PARAM_IN(double, ID, DESC, ALIAS, 0.0, true)
1050 
1072 #define PARAM_STRING_IN_REQ(ID, DESC, ALIAS) \
1073  PARAM_IN(std::string, ID, DESC, ALIAS, "", true)
1074 
1098 #define PARAM_VECTOR_IN_REQ(T, ID, DESC, ALIAS) \
1099  PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), true);
1100 
1106 // These are ugly, but necessary utility functions we must use to generate a
1107 // unique identifier inside of the PARAM() module.
1108 #define JOIN(x, y) JOIN_AGAIN(x, y)
1109 #define JOIN_AGAIN(x, y) x ## y
1110 
1129 #ifdef __COUNTER__
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);
1134 
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);
1139 
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);
1145 
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);
1151 
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);
1157 
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);
1163 
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);
1169 
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);
1175 
1176  // There are no uses of required models, so that is not an option to this
1177  // macro (it would be easy to add).
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);
1182 #else
1183  // We have to do some really bizarre stuff since __COUNTER__ isn't defined. I
1184  // don't think we can absolutely guarantee success, but it should be "good
1185  // enough". We use the __LINE__ macro and the type of the parameter to try
1186  // and get a good guess at something unique.
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);
1191 
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);
1196 
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, \
1201  testName);
1202 
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, \
1207  !TRANS, testName);
1208 
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, \
1213  testName);
1214 
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, \
1219  !TRANS, testName);
1220 
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, \
1225  testName);
1226 
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, \
1231  !TRANS, testName);
1232 
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, \
1237  testName);
1238 #endif
1239 
1240 #endif
Linear algebra utility functions, generally performed on matrices or vectors.
Definition: add_to_po.hpp:21
DatasetMapper< data::IncrementPolicy > DatasetInfo