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 
507 #define PARAM_VECTOR_IN(T, ID, DESC, ALIAS) \
508  PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), false)
509 
536 #define PARAM_VECTOR_OUT(T, ID) \
537  PARAM_OUT(std::vector<T>, ID, DESC, "", std::vector<T>(), false)
538 
573 #define TUPLE_TYPE std::tuple<mlpack::data::DatasetInfo, arma::mat>
574 #define PARAM_MATRIX_AND_INFO_IN(ID, DESC, ALIAS) \
575  PARAM_IN(TUPLE_TYPE, ID, DESC, ALIAS, TUPLE_TYPE(), false)
576 
606 #define PARAM_MODEL_IN(TYPE, ID, DESC, ALIAS) \
607  PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, true)
608 
638 #define PARAM_MODEL_IN_REQ(TYPE, ID, DESC, ALIAS) \
639  PARAM_MODEL(TYPE, ID, DESC, ALIAS, true, true)
640 
661 #define PARAM_MODEL_OUT(TYPE, ID, DESC, ALIAS) \
662  PARAM_MODEL(TYPE, ID, DESC, ALIAS, false, false)
663 
683 #define PARAM_INT_IN_REQ(ID, DESC, ALIAS) \
684  PARAM_IN(int, ID, DESC, ALIAS, 0, true)
685 
705 #define PARAM_DOUBLE_IN_REQ(ID, DESC, ALIAS) \
706  PARAM_IN(double, ID, DESC, ALIAS, 0.0d, true)
707 
727 #define PARAM_STRING_IN_REQ(ID, DESC, ALIAS) \
728  PARAM_IN(std::string, ID, DESC, ALIAS, "", true)
729 
750 #define PARAM_VECTOR_IN_REQ(T, ID, DESC, ALIAS) \
751  PARAM_IN(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), true);
752 
758 // These are ugly, but necessary utility functions we must use to generate a
759 // unique identifier inside of the PARAM() module.
760 #define JOIN(x, y) JOIN_AGAIN(x, y)
761 #define JOIN_AGAIN(x, y) x ## y
762 
778 #ifdef __COUNTER__
779  #define PARAM_IN(T, ID, DESC, ALIAS, DEF, REQ) \
780  static mlpack::util::Option<T> \
781  JOIN(cli_option_dummy_object_in_, __COUNTER__) \
782  (DEF, ID, DESC, ALIAS, REQ, true, false);
783 
784  #define PARAM_OUT(T, ID, DESC, ALIAS, DEF, REQ) \
785  static mlpack::util::Option<T> \
786  JOIN(cli_option_dummy_object_out_, __COUNTER__) \
787  (DEF, ID, DESC, ALIAS, REQ, false, false);
788 
789  #define PARAM_MATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
790  static mlpack::util::Option<arma::mat> \
791  JOIN(cli_option_dummy_matrix_, __COUNTER__) \
792  (arma::mat(), ID, DESC, ALIAS, REQ, IN, !TRANS);
793 
794  #define PARAM_UMATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
795  static mlpack::util::Option<arma::Mat<size_t>> \
796  JOIN(cli_option_dummy_umatrix_, __COUNTER__) \
797  (arma::Mat<size_t>(), ID, DESC, ALIAS, REQ, IN, !TRANS);
798 
799  // There are no uses of required models, so that is not an option to this
800  // macro (it would be easy to add).
801  #define PARAM_MODEL(TYPE, ID, DESC, ALIAS, REQ, IN) \
802  static mlpack::util::Option<TYPE> \
803  JOIN(cli_option_dummy_model_, __COUNTER__) \
804  (TYPE(), ID, DESC, ALIAS, REQ, IN);
805 #else
806  // We have to do some really bizarre stuff since __COUNTER__ isn't defined. I
807  // don't think we can absolutely guarantee success, but it should be "good
808  // enough". We use the __LINE__ macro and the type of the parameter to try
809  // and get a good guess at something unique.
810  #define PARAM_IN(T, ID, DESC, ALIAS, DEF, REQ) \
811  static mlpack::util::Option<T> \
812  JOIN(JOIN(cli_option_dummy_object_in_, __LINE__), opt) \
813  (DEF, ID, DESC, ALIAS, REQ, true, false);
814 
815  #define PARAM_OUT(T, ID, DESC, ALIAS, DEF, REQ) \
816  static mlpack::util::Option<T> \
817  JOIN(JOIN(cli_option_dummy_object_out_, __LINE__), opt) \
818  (DEF, ID, DESC, ALIAS, REQ, false, false);
819 
820  #define PARAM_MATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
821  static mlpack::util::Option<arma::mat> \
822  JOIN(JOIN(cli_option_dummy_object_matrix_, __LINE__), opt) \
823  (arma::mat(), ID, DESC, ALIAS, REQ, IN, !TRANS);
824 
825  #define PARAM_UMATRIX(ID, DESC, ALIAS, REQ, TRANS, IN) \
826  static mlpack::util::Option<arma::Mat<size_t>> \
827  JOIN(JOIN(cli_option_dummy_object_umatrix_, __LINE__), opt) \
828  (arma::Mat<size_t>(), ID, DESC, ALIAS, REQ, IN, !TRANS);
829 
830  #define PARAM_MODEL(TYPE, ID, DESC, ALIAS, REQ, IN) \
831  static mlpack::util::Option<TYPE> \
832  JOIN(JOIN(cli_option_dummy_object_model_, __LINE__), opt) \
833  (TYPE(), ID, DESC, ALIAS, REQ, IN);
834 #endif
835 
836 #endif
Linear algebra utility functions, generally performed on matrices or vectors.
Definition: binarize.hpp:18
DatasetMapper< data::IncrementPolicy > DatasetInfo