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 
93 #define PARAM_FLAG(ID, DESC, ALIAS) \
94  PARAM_IN(bool, ID, DESC, ALIAS, false, false);
95 
118 #define PARAM_INT_IN(ID, DESC, ALIAS, DEF) \
119  PARAM_IN(int, ID, DESC, ALIAS, DEF, false)
120 
146 #define PARAM_INT_OUT(ID, DESC) \
147  PARAM_OUT(int, ID, DESC, "", 0, false)
148 
170 #define PARAM_DOUBLE_IN(ID, DESC, ALIAS, DEF) \
171  PARAM_IN(double, ID, DESC, ALIAS, DEF, false)
172 
198 #define PARAM_DOUBLE_OUT(ID, DESC) \
199  PARAM_OUT(double, ID, DESC, "", 0.0, false)
200 
223 #define PARAM_STRING_IN(ID, DESC, ALIAS, DEF) \
224  PARAM_IN(std::string, ID, DESC, ALIAS, DEF, false)
225 
252 #define PARAM_STRING_OUT(ID, DESC, ALIAS) \
253  PARAM_OUT(std::string, ID, DESC, ALIAS, "", false)
254 
278 #define PARAM_MATRIX_IN(ID, DESC, ALIAS) \
279  PARAM_MATRIX(ID, DESC, ALIAS, false, true, true)
280 
304 #define PARAM_MATRIX_IN_REQ(ID, DESC, ALIAS) \
305  PARAM_MATRIX(ID, DESC, ALIAS, true, true, true)
306 
335 #define PARAM_MATRIX_OUT(ID, DESC, ALIAS) \
336  PARAM_MATRIX(ID, DESC, ALIAS, false, true, false)
337 
362 #define PARAM_TMATRIX_IN(ID, DESC, ALIAS) \
363  PARAM_MATRIX(ID, DESC, ALIAS, false, false, true)
364 
390 #define PARAM_TMATRIX_IN_REQ(ID, DESC, ALIAS) \
391  PARAM_MATRIX(ID, DESC, ALIAS, true, false, true)
392 
423 #define PARAM_TMATRIX_OUT(ID, DESC, ALIAS) \
424  PARAM_MATRIX(ID, DESC, ALIAS, false, false, false)
425 
449 #define PARAM_UMATRIX_IN(ID, DESC, ALIAS) \
450  PARAM_UMATRIX(ID, DESC, ALIAS, false, true, true)
451 
476 #define PARAM_UMATRIX_IN_REQ(ID, DESC, ALIAS) \
477  PARAM_UMATRIX(ID, DESC, ALIAS, true, true, true)
478 
508 #define PARAM_UMATRIX_OUT(ID, DESC, ALIAS) \
509  PARAM_UMATRIX(ID, DESC, ALIAS, false, true, false)
510 
511 
535 #define PARAM_COL_IN(ID, DESC, ALIAS) \
536  PARAM_COL(ID, DESC, ALIAS, false, true, true)
537 
561 #define PARAM_COL_IN_REQ(ID, DESC, ALIAS) \
562  PARAM_COL(ID, DESC, ALIAS, true, true, true)
563 
587 #define PARAM_ROW_IN(ID, DESC, ALIAS) \
588  PARAM_ROW(ID, DESC, ALIAS, false, true, true)
589 
613 #define PARAM_UCOL_IN(ID, DESC, ALIAS) \
614  PARAM_UCOL(ID, DESC, ALIAS, false, true, true)
615 
640 #define PARAM_UROW_IN(ID, DESC, ALIAS) \
641  PARAM_UROW(ID, DESC, ALIAS, false, true, true)
642 
671 #define PARAM_COL_OUT(ID, DESC, ALIAS) \
672  PARAM_COL(ID, DESC, ALIAS, false, true, false)
673 
702 #define PARAM_ROW_OUT(ID, DESC, ALIAS) \
703  PARAM_ROW(ID, DESC, ALIAS, false, true, false)
704 
733 #define PARAM_UCOL_OUT(ID, DESC, ALIAS) \
734  PARAM_UCOL(ID, DESC, ALIAS, false, true, false)
735 
764 #define PARAM_UROW_OUT(ID, DESC, ALIAS) \
765  PARAM_UROW(ID, DESC, ALIAS, false, true, false)
766 
788 #define PARAM_VECTOR_IN(T, ID, DESC, ALIAS) \
789  PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), false)
790 
817 #define PARAM_VECTOR_OUT(T, ID, DESC, ALIAS) \
818  PARAM_OUT(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), false)
819 
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)
857 
887 #define PARAM_MODEL_IN(TYPE, ID, DESC, ALIAS) \
888  PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, true)
889 
919 #define PARAM_MODEL_IN_REQ(TYPE, ID, DESC, ALIAS) \
920  PARAM_MODEL(TYPE, ID, DESC, ALIAS, true, true)
921 
942 #define PARAM_MODEL_OUT(TYPE, ID, DESC, ALIAS) \
943  PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, false)
944 
964 #define PARAM_INT_IN_REQ(ID, DESC, ALIAS) \
965  PARAM_IN(int, ID, DESC, ALIAS, 0, true)
966 
986 #define PARAM_DOUBLE_IN_REQ(ID, DESC, ALIAS) \
987  PARAM_IN(double, ID, DESC, ALIAS, 0.0, true)
988 
1008 #define PARAM_STRING_IN_REQ(ID, DESC, ALIAS) \
1009  PARAM_IN(std::string, ID, DESC, ALIAS, "", true)
1010 
1031 #define PARAM_VECTOR_IN_REQ(T, ID, DESC, ALIAS) \
1032  PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), true);
1033 
1039 // These are ugly, but necessary utility functions we must use to generate a
1040 // unique identifier inside of the PARAM() module.
1041 #define JOIN(x, y) JOIN_AGAIN(x, y)
1042 #define JOIN_AGAIN(x, y) x ## y
1043 
1060 #ifdef __COUNTER__
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);
1065 
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);
1070 
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);
1076 
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);
1082 
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);
1088 
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);
1094 
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);
1100 
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);
1106 
1107  // There are no uses of required models, so that is not an option to this
1108  // macro (it would be easy to add).
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);
1113 #else
1114  // We have to do some really bizarre stuff since __COUNTER__ isn't defined. I
1115  // don't think we can absolutely guarantee success, but it should be "good
1116  // enough". We use the __LINE__ macro and the type of the parameter to try
1117  // and get a good guess at something unique.
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);
1122 
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);
1127 
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, \
1132  testName);
1133 
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, \
1138  !TRANS, testName);
1139 
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, \
1144  testName);
1145 
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, \
1150  !TRANS, testName);
1151 
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, \
1156  testName);
1157 
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, \
1162  !TRANS, testName);
1163 
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, \
1168  testName);
1169 #endif
1170 
1171 #endif
.hpp
Definition: add_to_po.hpp:21
DatasetMapper< data::IncrementPolicy > DatasetInfo