mlpack  3.0.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 
49 #define PROGRAM_INFO(NAME, DESC) static mlpack::util::ProgramDoc \
50  cli_programdoc_dummy_object = mlpack::util::ProgramDoc(NAME, \
51  []() { return DESC; })
52 
70 #define PARAM_FLAG(ID, DESC, ALIAS) \
71  PARAM_IN(bool, ID, DESC, ALIAS, false, false);
72 
95 #define PARAM_INT_IN(ID, DESC, ALIAS, DEF) \
96  PARAM_IN(int, ID, DESC, ALIAS, DEF, false)
97 
123 #define PARAM_INT_OUT(ID, DESC) \
124  PARAM_OUT(int, ID, DESC, "", 0, false)
125 
147 #define PARAM_DOUBLE_IN(ID, DESC, ALIAS, DEF) \
148  PARAM_IN(double, ID, DESC, ALIAS, DEF, false)
149 
175 #define PARAM_DOUBLE_OUT(ID, DESC) \
176  PARAM_OUT(double, ID, DESC, "", 0.0, false)
177 
200 #define PARAM_STRING_IN(ID, DESC, ALIAS, DEF) \
201  PARAM_IN(std::string, ID, DESC, ALIAS, DEF, false)
202 
229 #define PARAM_STRING_OUT(ID, DESC, ALIAS) \
230  PARAM_OUT(std::string, ID, DESC, ALIAS, "", false)
231 
255 #define PARAM_MATRIX_IN(ID, DESC, ALIAS) \
256  PARAM_MATRIX(ID, DESC, ALIAS, false, true, true)
257 
281 #define PARAM_MATRIX_IN_REQ(ID, DESC, ALIAS) \
282  PARAM_MATRIX(ID, DESC, ALIAS, true, true, true)
283 
312 #define PARAM_MATRIX_OUT(ID, DESC, ALIAS) \
313  PARAM_MATRIX(ID, DESC, ALIAS, false, true, false)
314 
339 #define PARAM_TMATRIX_IN(ID, DESC, ALIAS) \
340  PARAM_MATRIX(ID, DESC, ALIAS, false, false, true)
341 
367 #define PARAM_TMATRIX_IN_REQ(ID, DESC, ALIAS) \
368  PARAM_MATRIX(ID, DESC, ALIAS, true, false, true)
369 
400 #define PARAM_TMATRIX_OUT(ID, DESC, ALIAS) \
401  PARAM_MATRIX(ID, DESC, ALIAS, false, false, false)
402 
426 #define PARAM_UMATRIX_IN(ID, DESC, ALIAS) \
427  PARAM_UMATRIX(ID, DESC, ALIAS, false, true, true)
428 
453 #define PARAM_UMATRIX_IN_REQ(ID, DESC, ALIAS) \
454  PARAM_UMATRIX(ID, DESC, ALIAS, true, true, true)
455 
485 #define PARAM_UMATRIX_OUT(ID, DESC, ALIAS) \
486  PARAM_UMATRIX(ID, DESC, ALIAS, false, true, false)
487 
488 
512 #define PARAM_COL_IN(ID, DESC, ALIAS) \
513  PARAM_COL(ID, DESC, ALIAS, false, true, true)
514 
538 #define PARAM_ROW_IN(ID, DESC, ALIAS) \
539  PARAM_ROW(ID, DESC, ALIAS, false, true, true)
540 
564 #define PARAM_UCOL_IN(ID, DESC, ALIAS) \
565  PARAM_UCOL(ID, DESC, ALIAS, false, true, true)
566 
591 #define PARAM_UROW_IN(ID, DESC, ALIAS) \
592  PARAM_UROW(ID, DESC, ALIAS, false, true, true)
593 
622 #define PARAM_COL_OUT(ID, DESC, ALIAS) \
623  PARAM_COL(ID, DESC, ALIAS, false, true, false)
624 
653 #define PARAM_ROW_OUT(ID, DESC, ALIAS) \
654  PARAM_ROW(ID, DESC, ALIAS, false, true, false)
655 
684 #define PARAM_UCOL_OUT(ID, DESC, ALIAS) \
685  PARAM_UCOL(ID, DESC, ALIAS, false, true, false)
686 
715 #define PARAM_UROW_OUT(ID, DESC, ALIAS) \
716  PARAM_UROW(ID, DESC, ALIAS, false, true, false)
717 
739 #define PARAM_VECTOR_IN(T, ID, DESC, ALIAS) \
740  PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), false)
741 
768 #define PARAM_VECTOR_OUT(T, ID, DESC, ALIAS) \
769  PARAM_OUT(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), false)
770 
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)
808 
838 #define PARAM_MODEL_IN(TYPE, ID, DESC, ALIAS) \
839  PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, true)
840 
870 #define PARAM_MODEL_IN_REQ(TYPE, ID, DESC, ALIAS) \
871  PARAM_MODEL(TYPE, ID, DESC, ALIAS, true, true)
872 
893 #define PARAM_MODEL_OUT(TYPE, ID, DESC, ALIAS) \
894  PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, false)
895 
915 #define PARAM_INT_IN_REQ(ID, DESC, ALIAS) \
916  PARAM_IN(int, ID, DESC, ALIAS, 0, true)
917 
937 #define PARAM_DOUBLE_IN_REQ(ID, DESC, ALIAS) \
938  PARAM_IN(double, ID, DESC, ALIAS, 0.0, true)
939 
959 #define PARAM_STRING_IN_REQ(ID, DESC, ALIAS) \
960  PARAM_IN(std::string, ID, DESC, ALIAS, "", true)
961 
982 #define PARAM_VECTOR_IN_REQ(T, ID, DESC, ALIAS) \
983  PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), true);
984 
990 // These are ugly, but necessary utility functions we must use to generate a
991 // unique identifier inside of the PARAM() module.
992 #define JOIN(x, y) JOIN_AGAIN(x, y)
993 #define JOIN_AGAIN(x, y) x ## y
994 
1011 #ifdef __COUNTER__
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);
1016 
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);
1021 
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);
1027 
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);
1033 
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);
1039 
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);
1045 
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);
1051 
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);
1057 
1058  // There are no uses of required models, so that is not an option to this
1059  // macro (it would be easy to add).
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);
1064 #else
1065  // We have to do some really bizarre stuff since __COUNTER__ isn't defined. I
1066  // don't think we can absolutely guarantee success, but it should be "good
1067  // enough". We use the __LINE__ macro and the type of the parameter to try
1068  // and get a good guess at something unique.
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);
1073 
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);
1078 
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, \
1083  testName);
1084 
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, \
1089  !TRANS, testName);
1090 
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, \
1095  testName);
1096 
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, \
1101  !TRANS, testName);
1102 
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, \
1107  testName);
1108 
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, \
1113  !TRANS, testName);
1114 
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, \
1119  testName);
1120 #endif
1121 
1122 #endif
DatasetMapper< data::IncrementPolicy > DatasetInfo