mlpack  master
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>
25 class DatasetMapper;
26 
27 using DatasetInfo = DatasetMapper<IncrementPolicy>;
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, DESC);
51 
69 #define PARAM_FLAG(ID, DESC, ALIAS) \
70  PARAM_IN(bool, ID, DESC, ALIAS, false, false);
71 
93 #define PARAM_INT_IN(ID, DESC, ALIAS, DEF) \
94  PARAM_IN(int, ID, DESC, ALIAS, DEF, false)
95 
121 #define PARAM_INT_OUT(ID, DESC) \
122  PARAM_IN(int, ID, DESC, "", 0, false)
123 
145 #define PARAM_DOUBLE_IN(ID, DESC, ALIAS, DEF) \
146  PARAM_IN(double, ID, DESC, ALIAS, DEF, false)
147 
173 #define PARAM_DOUBLE_OUT(ID, DESC) \
174  PARAM_OUT(double, ID, DESC, "", 0.0, false)
175 
198 #define PARAM_STRING_IN(ID, DESC, ALIAS, DEF) \
199  PARAM_IN(std::string, ID, DESC, ALIAS, DEF, false)
200 
227 #define PARAM_STRING_OUT(ID, DESC, ALIAS) \
228  PARAM_OUT(std::string, ID, DESC, ALIAS, "", false)
229 
253 #define PARAM_MATRIX_IN(ID, DESC, ALIAS) \
254  PARAM_MATRIX(ID, DESC, ALIAS, false, true, true)
255 
279 #define PARAM_MATRIX_IN_REQ(ID, DESC, ALIAS) \
280  PARAM_MATRIX(ID, DESC, ALIAS, true, true, true)
281 
310 #define PARAM_MATRIX_OUT(ID, DESC, ALIAS) \
311  PARAM_MATRIX(ID, DESC, ALIAS, false, true, false)
312 
337 #define PARAM_TMATRIX_IN(ID, DESC, ALIAS) \
338  PARAM_MATRIX(ID, DESC, ALIAS, false, false, true)
339 
365 #define PARAM_TMATRIX_IN_REQ(ID, DESC, ALIAS) \
366  PARAM_MATRIX(ID, DESC, ALIAS, true, false, true)
367 
398 #define PARAM_TMATRIX_OUT(ID, DESC, ALIAS) \
399  PARAM_MATRIX(ID, DESC, ALIAS, false, false, false)
400 
424 #define PARAM_UMATRIX_IN(ID, DESC, ALIAS) \
425  PARAM_UMATRIX(ID, DESC, ALIAS, false, true, true)
426 
451 #define PARAM_UMATRIX_IN_REQ(ID, DESC, ALIAS) \
452  PARAM_UMATRIX(ID, DESC, ALIAS, true, true, true)
453 
483 #define PARAM_UMATRIX_OUT(ID, DESC, ALIAS) \
484  PARAM_UMATRIX(ID, DESC, ALIAS, false, true, false)
485 
486 
510 #define PARAM_COL_IN(ID, DESC, ALIAS) \
511  PARAM_COL(ID, DESC, ALIAS, false, true, true)
512 
536 #define PARAM_ROW_IN(ID, DESC, ALIAS) \
537  PARAM_ROW(ID, DESC, ALIAS, false, true, true)
538 
562 #define PARAM_UCOL_IN(ID, DESC, ALIAS) \
563  PARAM_UCOL(ID, DESC, ALIAS, false, true, true)
564 
589 #define PARAM_UROW_IN(ID, DESC, ALIAS) \
590  PARAM_UROW(ID, DESC, ALIAS, false, true, true)
591 
620 #define PARAM_COL_OUT(ID, DESC, ALIAS) \
621  PARAM_COL(ID, DESC, ALIAS, false, true, false)
622 
651 #define PARAM_ROW_OUT(ID, DESC, ALIAS) \
652  PARAM_ROW(ID, DESC, ALIAS, false, true, false)
653 
682 #define PARAM_UCOL_OUT(ID, DESC, ALIAS) \
683  PARAM_UCOL(ID, DESC, ALIAS, false, true, false)
684 
713 #define PARAM_UROW_OUT(ID, DESC, ALIAS) \
714  PARAM_UROW(ID, DESC, ALIAS, false, true, false)
715 
737 #define PARAM_VECTOR_IN(T, ID, DESC, ALIAS) \
738  PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), false)
739 
766 #define PARAM_VECTOR_OUT(T, ID) \
767  PARAM_OUT(std::vector<T>, ID, DESC, "", std::vector<T>(), false)
768 
803 #define TUPLE_TYPE std::tuple<mlpack::data::DatasetInfo, arma::mat>
804 #define PARAM_MATRIX_AND_INFO_IN(ID, DESC, ALIAS) \
805  PARAM_IN(TUPLE_TYPE, ID, DESC, ALIAS, TUPLE_TYPE(), false)
806 
836 #define PARAM_MODEL_IN(TYPE, ID, DESC, ALIAS) \
837  PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, true)
838 
868 #define PARAM_MODEL_IN_REQ(TYPE, ID, DESC, ALIAS) \
869  PARAM_MODEL(TYPE, ID, DESC, ALIAS, true, true)
870 
891 #define PARAM_MODEL_OUT(TYPE, ID, DESC, ALIAS) \
892  PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, false)
893 
913 #define PARAM_INT_IN_REQ(ID, DESC, ALIAS) \
914  PARAM_IN(int, ID, DESC, ALIAS, 0, true)
915 
935 #define PARAM_DOUBLE_IN_REQ(ID, DESC, ALIAS) \
936  PARAM_IN(double, ID, DESC, ALIAS, 0.0d, true)
937 
957 #define PARAM_STRING_IN_REQ(ID, DESC, ALIAS) \
958  PARAM_IN(std::string, ID, DESC, ALIAS, "", true)
959 
980 #define PARAM_VECTOR_IN_REQ(T, ID, DESC, ALIAS) \
981  PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), true);
982 
988 // These are ugly, but necessary utility functions we must use to generate a
989 // unique identifier inside of the PARAM() module.
990 #define JOIN(x, y) JOIN_AGAIN(x, y)
991 #define JOIN_AGAIN(x, y) x ## y
992 
1008 #ifdef __COUNTER__
1009  #define PARAM_IN(T, ID, DESC, ALIAS, DEF, REQ) \
1010  static mlpack::util::Option<T> \
1011  JOIN(cli_option_dummy_object_in_, __COUNTER__) \
1012  (DEF, ID, DESC, ALIAS, REQ, true, false);
1013 
1014  #define PARAM_OUT(T, ID, DESC, ALIAS, DEF, REQ) \
1015  static mlpack::util::Option<T> \
1016  JOIN(cli_option_dummy_object_out_, __COUNTER__) \
1017  (DEF, ID, DESC, ALIAS, REQ, false, false);
1018 
1019  #define PARAM_MATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1020  static mlpack::util::Option<arma::mat> \
1021  JOIN(cli_option_dummy_matrix_, __COUNTER__) \
1022  (arma::mat(), ID, DESC, ALIAS, REQ, IN, !TRANS);
1023 
1024  #define PARAM_UMATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1025  static mlpack::util::Option<arma::Mat<size_t>> \
1026  JOIN(cli_option_dummy_umatrix_, __COUNTER__) \
1027  (arma::Mat<size_t>(), ID, DESC, ALIAS, REQ, IN, !TRANS);
1028 
1029  #define PARAM_COL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1030  static mlpack::util::Option<arma::vec> \
1031  JOIN(cli_option_dummy_col_, __COUNTER__) \
1032  (arma::vec(), ID, DESC, ALIAS, REQ, IN, !TRANS);
1033 
1034  #define PARAM_UCOL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1035  static mlpack::util::Option<arma::Col<size_t>> \
1036  JOIN(cli_option_dummy_ucol_, __COUNTER__) \
1037  (arma::Col<size_t>(), ID, DESC, ALIAS, REQ, IN, !TRANS);
1038 
1039  #define PARAM_ROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1040  static mlpack::util::Option<arma::rowvec> \
1041  JOIN(cli_option_dummy_row_, __COUNTER__) \
1042  (arma::rowvec(), ID, DESC, ALIAS, REQ, IN, !TRANS);
1043 
1044  #define PARAM_UROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1045  static mlpack::util::Option<arma::Row<size_t>> \
1046  JOIN(cli_option_dummy_urow_, __COUNTER__) \
1047  (arma::Row<size_t>(), ID, DESC, ALIAS, REQ, IN, !TRANS);
1048 
1049 
1050  // There are no uses of required models, so that is not an option to this
1051  // macro (it would be easy to add).
1052  #define PARAM_MODEL(TYPE, ID, DESC, ALIAS, REQ, IN) \
1053  static mlpack::util::Option<TYPE> \
1054  JOIN(cli_option_dummy_model_, __COUNTER__) \
1055  (TYPE(), ID, DESC, ALIAS, REQ, IN);
1056 #else
1057  // We have to do some really bizarre stuff since __COUNTER__ isn't defined. I
1058  // don't think we can absolutely guarantee success, but it should be "good
1059  // enough". We use the __LINE__ macro and the type of the parameter to try
1060  // and get a good guess at something unique.
1061  #define PARAM_IN(T, ID, DESC, ALIAS, DEF, REQ) \
1062  static mlpack::util::Option<T> \
1063  JOIN(JOIN(cli_option_dummy_object_in_, __LINE__), opt) \
1064  (DEF, ID, DESC, ALIAS, REQ, true, false);
1065 
1066  #define PARAM_OUT(T, ID, DESC, ALIAS, DEF, REQ) \
1067  static mlpack::util::Option<T> \
1068  JOIN(JOIN(cli_option_dummy_object_out_, __LINE__), opt) \
1069  (DEF, ID, DESC, ALIAS, REQ, false, false);
1070 
1071  #define PARAM_MATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1072  static mlpack::util::Option<arma::mat> \
1073  JOIN(JOIN(cli_option_dummy_object_matrix_, __LINE__), opt) \
1074  (arma::mat(), ID, DESC, ALIAS, REQ, IN, !TRANS);
1075 
1076  #define PARAM_UMATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
1077  static mlpack::util::Option<arma::Mat<size_t>> \
1078  JOIN(JOIN(cli_option_dummy_object_umatrix_, __LINE__), opt) \
1079  (arma::Mat<size_t>(), ID, DESC, ALIAS, REQ, IN, !TRANS);
1080 
1081  #define PARAM_COL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1082  static mlpack::util::Option<arma::vec> \
1083  JOIN(cli_option_dummy_object_col_, __LINE__) \
1084  (arma::vec(), ID, DESC, ALIAS, REQ, IN, !TRANS);
1085 
1086  #define PARAM_UCOL(ID, DESC, ALIAS, REQ, TRANS, IN) \
1087  static mlpack::util::Option<arma::Col<size_t>> \
1088  JOIN(cli_option_dummy_object_ucol_, __LINE__) \
1089  (arma::Col<size_t>(), ID, DESC, ALIAS, REQ, IN, !TRANS);
1090 
1091  #define PARAM_ROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1092  static mlpack::util::Option<arma::rowvec> \
1093  JOIN(cli_option_dummy_object_row_, __LINE__) \
1094  (arma::rowvec(), ID, DESC, ALIAS, REQ, IN, !TRANS);
1095 
1096  #define PARAM_UROW(ID, DESC, ALIAS, REQ, TRANS, IN) \
1097  static mlpack::util::Option<arma::Row<size_t>> \
1098  JOIN(cli_option_dummy_object_urow_, __LINE__) \
1099  (arma::Row<size_t>(), ID, DESC, ALIAS, REQ, IN, !TRANS);
1100 
1101  #define PARAM_MODEL(TYPE, ID, DESC, ALIAS, REQ, IN) \
1102  static mlpack::util::Option<TYPE> \
1103  JOIN(JOIN(cli_option_dummy_object_model_, __LINE__), opt) \
1104  (TYPE(), ID, DESC, ALIAS, REQ, IN);
1105 #endif
1106 
1107 #endif
Linear algebra utility functions, generally performed on matrices or vectors.
Definition: binarize.hpp:18
DatasetMapper< data::IncrementPolicy > DatasetInfo