12#ifndef MLPACK_CORE_CV_META_INFO_EXTRACTOR_HPP
13#define MLPACK_CORE_CV_META_INFO_EXTRACTOR_HPP
34template<
typename MatType,
35 typename PredictionsType,
45template<
typename PT,
typename WT,
typename T1,
typename T2>
54 template<
typename Class,
typename RT,
typename... Ts>
55 using Type = RT(Class::*)(T1, T2, Ts...);
58template<
typename PT,
typename WT,
typename T1,
typename T2,
typename T3>
67 template<
typename Class,
typename RT,
typename... Ts>
68 using Type = RT(Class::*)(T1, T2, T3, Ts...);
71template<
typename PT,
typename WT,
typename T1,
typename T2,
typename T3,
81 template<
typename Class,
typename RT,
typename... Ts>
82 using Type = RT(Class::*)(T1, T2, T3, T4, Ts...);
85template<
typename PT,
typename WT,
typename T1,
typename T2,
typename T3,
86 typename T4,
typename T5>
95 template<
typename Class,
typename RT,
typename... Ts>
96 using Type = RT(Class::*)(T1, T2, T3, T4, T5, Ts...);
99template<
typename MT,
typename PT>
101 const MT&, const PT&> {};
103template<
typename MT,
typename PT>
105 const MT&, const data::DatasetInfo&, const PT&> {};
107template<
typename MT,
typename PT,
typename WT>
109 const MT&, const PT&, const WT&> {};
111template<
typename MT,
typename PT,
typename WT>
113 const MT&, const data::DatasetInfo&, const PT&, const WT&> {};
115template<
typename MT,
typename PT>
117 const MT&, const PT&, const size_t> {};
119template<
typename MT,
typename PT>
121 const MT&, const data::DatasetInfo&, const PT&, const size_t> {};
123template<
typename MT,
typename PT,
typename WT>
125 const MT&, const PT&, const size_t, const WT&> {};
127template<
typename MT,
typename PT,
typename WT>
129 const MT&, const data::DatasetInfo&, const PT&,
130 const size_t, const WT&> {};
132template<
typename PT,
typename WT,
typename... SignatureParams>
135 using PredictionsType = PT;
136 using WeightsType = WT;
139 static const size_t MinNumberOfAdditionalArgs = 1;
141 template<
typename Class,
typename RT,
typename... Ts>
142 using Type = RT(Class::*)(SignatureParams..., Ts...);
145template<
typename MT,
typename PT>
146struct TrainForm<MT, PT, void, false, false> :
public TrainFormBase<PT, void,
147 const MT&, const PT&> {};
149template<
typename MT,
typename PT>
150struct TrainForm<MT, PT, void, true, false> :
public TrainFormBase<PT, void,
151 const MT&, const data::DatasetInfo&, const PT&> {};
153template<
typename MT,
typename PT,
typename WT>
154struct TrainForm<MT, PT, WT, false, false> :
public TrainFormBase<PT, WT,
155 const MT&, const PT&, const WT&> {};
157template<
typename MT,
typename PT,
typename WT>
158struct TrainForm<MT, PT, WT, true, false> :
public TrainFormBase<PT, WT,
159 const MT&, const data::DatasetInfo&, const PT&, const WT&> {};
161template<
typename MT,
typename PT>
162struct TrainForm<MT, PT, void, false, true> :
public TrainFormBase<PT, void,
163 const MT&, const PT&, const size_t> {};
165template<
typename MT,
typename PT>
166struct TrainForm<MT, PT, void, true, true> :
public TrainFormBase<PT, void,
167 const MT&, const data::DatasetInfo&, const PT&, const size_t> {};
169template<
typename MT,
typename PT,
typename WT>
170struct TrainForm<MT, PT, WT, false, true> :
public TrainFormBase<PT, WT,
171 const MT&, const PT&, const size_t, const WT&> {};
173template<
typename MT,
typename PT,
typename WT>
174struct TrainForm<MT, PT, WT, true, true> :
public TrainFormBase<PT, WT,
175 const MT&, const data::DatasetInfo&, const PT&,
176 const size_t, const WT&> {};
196template<
typename MLAlgorithm,
197 template<
class,
template<
class...>
class,
size_t>
class... HMFs>
200template<
typename MLAlgorithm,
201 template<
class,
template<
class...>
class,
size_t>
class HasMethodForm,
202 template<class, template<class...> class, size_t> class... HMFs>
205 template<
typename... Forms>
210 template<
typename... RemainingForms>
211 struct Implementation
214 using Type =
typename NextSMF::template From<Forms...>
::Type;
218 template<
typename Form,
typename... RemainingForms>
219 struct Implementation<Form, RemainingForms...>
221 using Type =
typename std::conditional<
222 HasMethodForm<MLAlgorithm, Form::template
Type,
223 Form::MinNumberOfAdditionalArgs>::value,
225 typename Implementation<RemainingForms...>
::Type>::type;
233template<
typename MLAlgorithm>
236 template<
typename... Forms>
268template<
typename MLAlgorithm,
269 typename MT = arma::mat,
270 typename PT = arma::Row<size_t>,
271 typename WT = arma::rowvec>
277 HAS_METHOD_FORM(Train, HasTrain);
278 HAS_METHOD_FORM(
template Train<>, HasTTrain);
279 HAS_METHOD_FORM(
template Train<const MT&>, HasMTrain);
280 HAS_METHOD_FORM(
SINGLE_ARG(
template Train<const MT&, const PT&>), HasMPTrain);
281 HAS_METHOD_FORM(
SINGLE_ARG(
template Train<const MT&, const PT&, const WT&>),
303 template<
typename... MethodForms>
305 HasMTrain, HasMPTrain, HasMPWTrain>::template From<MethodForms...>;
308 template<
typename... MFs >
309 using Selects =
typename std::conditional<
311 std::false_type, std::true_type>::type;
319 typename Select<TF1, TF2, TF3, TF4, TF5>::Type::PredictionsType;
326 typename Select<WTF1, WTF2, WTF3, WTF4, WTF5>::Type::WeightsType;
332 static const bool IsSupported = !std::is_same<PredictionsType, void*>::value;
Include all of the base components required to write mlpack methods, and the main mlpack Doxygen docu...
DatasetMapper< data::IncrementPolicy > DatasetInfo
Linear algebra utility functions, generally performed on matrices or vectors.