get_cython_type.hpp
Go to the documentation of this file.
1 
13 #ifndef MLPACK_BINDINGS_PYTHON_GET_CYTHON_TYPE_HPP
14 #define MLPACK_BINDINGS_PYTHON_GET_CYTHON_TYPE_HPP
15 
16 #include <mlpack/prereqs.hpp>
18 
19 namespace mlpack {
20 namespace bindings {
21 namespace python {
22 
23 template<typename T>
24 inline std::string GetCythonType(
25  const util::ParamData& /* d */,
26  const typename boost::disable_if<util::IsStdVector<T>>::type* = 0,
27  const typename boost::disable_if<data::HasSerialize<T>>::type* = 0,
28  const typename boost::disable_if<arma::is_arma_type<T>>::type* = 0)
29 {
30  return "unknown";
31 }
32 
33 template<>
34 inline std::string GetCythonType<int>(
35  const util::ParamData& /* d */,
36  const typename boost::disable_if<util::IsStdVector<int>>::type*,
37  const typename boost::disable_if<data::HasSerialize<int>>::type*,
38  const typename boost::disable_if<arma::is_arma_type<int>>::type*)
39 {
40  return "int";
41 }
42 
43 template<>
44 inline std::string GetCythonType<double>(
45  const util::ParamData& /* d */,
46  const typename boost::disable_if<util::IsStdVector<double>>::type*,
47  const typename boost::disable_if<data::HasSerialize<double>>::type*,
48  const typename boost::disable_if<arma::is_arma_type<double>>::type*)
49 {
50  return "double";
51 }
52 
53 template<>
54 inline std::string GetCythonType<std::string>(
55  const util::ParamData& /* d */,
56  const typename boost::disable_if<util::IsStdVector<std::string>>::type*,
57  const typename boost::disable_if<data::HasSerialize<std::string>>::type*,
58  const typename boost::disable_if<arma::is_arma_type<std::string>>::type*)
59 {
60  return "string";
61 }
62 
63 template<>
64 inline std::string GetCythonType<size_t>(
65  const util::ParamData& /* d */,
66  const typename boost::disable_if<util::IsStdVector<size_t>>::type*,
67  const typename boost::disable_if<data::HasSerialize<size_t>>::type*,
68  const typename boost::disable_if<arma::is_arma_type<size_t>>::type*)
69 {
70  return "size_t";
71 }
72 
73 template<>
74 inline std::string GetCythonType<bool>(
75  const util::ParamData& /* d */,
76  const typename boost::disable_if<util::IsStdVector<bool>>::type*,
77  const typename boost::disable_if<data::HasSerialize<bool>>::type*,
78  const typename boost::disable_if<arma::is_arma_type<bool>>::type*)
79 {
80  return "cbool";
81 }
82 
83 template<typename T>
84 inline std::string GetCythonType(
85  const util::ParamData& d,
86  const typename boost::enable_if<util::IsStdVector<T>>::type* = 0)
87 {
88  return "vector[" + GetCythonType<typename T::value_type>(d) + "]";
89 }
90 
91 template<typename T>
92 inline std::string GetCythonType(
93  const util::ParamData& d,
94  const typename boost::enable_if<arma::is_arma_type<T>>::type* = 0)
95 {
96  std::string type = "Mat";
97  if (T::is_row)
98  type = "Row";
99  else if (T::is_col)
100  type = "Col";
101 
102  return "arma." + type + "[" + GetCythonType<typename T::elem_type>(d) + "]";
103 }
104 
105 template<typename T>
106 inline std::string GetCythonType(
107  const util::ParamData& d,
108  const typename boost::disable_if<arma::is_arma_type<T>>::type* = 0,
109  const typename boost::enable_if<data::HasSerialize<T>>::type* = 0)
110 {
111  return d.cppType + "*";
112 }
113 
114 } // namespace python
115 } // namespace bindings
116 } // namespace mlpack
117 
118 #endif
std::string GetCythonType< bool >(const util::ParamData &, const typename boost::disable_if< util::IsStdVector< bool >>::type *, const typename boost::disable_if< data::HasSerialize< bool >>::type *, const typename boost::disable_if< arma::is_arma_type< bool >>::type *)
std::string GetCythonType< size_t >(const util::ParamData &, const typename boost::disable_if< util::IsStdVector< size_t >>::type *, const typename boost::disable_if< data::HasSerialize< size_t >>::type *, const typename boost::disable_if< arma::is_arma_type< size_t >>::type *)
strip_type.hpp
Definition: add_to_po.hpp:21
The core includes that mlpack expects; standard C++ includes and Armadillo.
std::string GetCythonType< int >(const util::ParamData &, const typename boost::disable_if< util::IsStdVector< int >>::type *, const typename boost::disable_if< data::HasSerialize< int >>::type *, const typename boost::disable_if< arma::is_arma_type< int >>::type *)
python
Definition: CMakeLists.txt:4
This structure holds all of the information about a single parameter, including its value (which is s...
Definition: param_data.hpp:52
Metaprogramming structure for vector detection.
std::string cppType
The true name of the type, as it would be written in C++.
Definition: param_data.hpp:84
std::string GetCythonType(const util::ParamData &, const typename boost::disable_if< util::IsStdVector< T >>::type *=0, const typename boost::disable_if< data::HasSerialize< T >>::type *=0, const typename boost::disable_if< arma::is_arma_type< T >>::type *=0)
std::string GetCythonType< double >(const util::ParamData &, const typename boost::disable_if< util::IsStdVector< double >>::type *, const typename boost::disable_if< data::HasSerialize< double >>::type *, const typename boost::disable_if< arma::is_arma_type< double >>::type *)