2 #ifndef OPENGM_VIEW_CONVERT_FUNCTION_HXX 3 #define OPENGM_VIEW_CONVERT_FUNCTION_HXX 10 namespace detail_convert_function {
11 template<
class OPERATOR,
class ACCUMULATOR,
class PROBABILITY>
12 struct ValueToProbability;
14 template<
class PROBABILITY>
15 struct ValueToProbability<Multiplier, Maximizer, PROBABILITY>
17 typedef PROBABILITY ProbabilityType;
19 static ProbabilityType convert(
const T x)
20 {
return static_cast<ProbabilityType
>(x); }
22 static ProbabilityType convert(
const T x,
const T invT)
23 {
return static_cast<ProbabilityType
>(x); }
26 template<
class PROBABILITY>
27 struct ValueToProbability<Multiplier, Minimizer, PROBABILITY>
29 typedef PROBABILITY ProbabilityType;
31 static ProbabilityType convert(
const T x)
32 {
return static_cast<ProbabilityType
>(1) / static_cast<ProbabilityType>(x); }
34 static ProbabilityType convert(
const T x,
const T invT)
35 {
return static_cast<ProbabilityType
>(1) / static_cast<ProbabilityType>(x); }
38 template<
class PROBABILITY>
39 struct ValueToProbability<Adder, Maximizer, PROBABILITY>
41 typedef PROBABILITY ProbabilityType;
43 static ProbabilityType convert(
const T x)
44 {
return static_cast<ProbabilityType
>(std::exp(x)); }
46 static ProbabilityType convert(
const T x,
const T invT)
47 {
return static_cast<ProbabilityType
>(std::exp(invT * x)); }
50 template<
class PROBABILITY>
51 struct ValueToProbability<Adder, Minimizer, PROBABILITY>
53 typedef PROBABILITY ProbabilityType;
55 static ProbabilityType convert(
const T x)
56 {
return static_cast<ProbabilityType
>(std::exp(-x)); }
58 static ProbabilityType convert(
const T x,
const T invT)
59 {
return static_cast<ProbabilityType
>(std::exp(-invT * x)); }
67 template<
class GM,
class ACC,
class VALUE_TYPE>
69 :
public FunctionBase<ViewConvertFunction<GM,ACC,VALUE_TYPE>,
70 typename GM::ValueType, typename GM::IndexType, typename GM::LabelType>
83 template<
class Iterator> ValueType operator()(Iterator begin)
const;
84 IndexType shape(
const IndexType)
const;
85 IndexType dimension()
const;
86 IndexType size()
const;
89 FactorType
const* factor_;
90 ValueType inverseTemperature_;
93 template<
class GM,
class ACC,
class VALUE_TYPE>
96 : factor_(NULL),inverseTemperature_(1)
99 template<
class GM,
class ACC,
class VALUE_TYPE>
105 : factor_(&factor),inverseTemperature_(1)
108 template<
class GM,
class ACC,
class VALUE_TYPE>
113 const VALUE_TYPE invT
115 : factor_(&factor),inverseTemperature_(invT)
118 template<
class GM,
class ACC,
class VALUE_TYPE>
119 template<
class Iterator>
125 return detail_convert_function::ValueToProbability<OperatorType,ACC,ValueType>::convert(factor_->operator()(begin),inverseTemperature_);
128 template<
class GM,
class ACC,
class VALUE_TYPE>
134 return factor_->numberOfLabels(index);
137 template<
class GM,
class ACC,
class VALUE_TYPE>
140 return factor_->numberOfVariables();
143 template<
class GM,
class ACC,
class VALUE_TYPE>
146 return factor_->size( );
151 #endif // #ifndef OPENGM_VIEW_CONVERT_FUNCTION_HXX
IndexType shape(const IndexType) const
Fallback implementation of member functions of OpenGM functions.
ViewConvertFunction convert semi-ring in a lazy fashion.
IndexType dimension() const
GM::FactorType FactorType
GM::OperatorType OperatorType