17 #ifndef OPTIMIZATION__UTILS_HPP_
18 #define OPTIMIZATION__UTILS_HPP_
32 namespace optimization
63 bool8_t jacobian()
const noexcept;
66 bool8_t hessian()
const noexcept;
89 template<
typename T,
int H,
int W>
90 typename std::enable_if_t<std::is_floating_point<T>::value,
bool8_t>
91 operator()(
const Eigen::Matrix<T, H, W> & lhs,
const Eigen::Matrix<T, H, W> & rhs)
const
93 return lhs.isApprox(rhs, std::numeric_limits<T>::epsilon());
96 template<
typename T,
int H,
int W>
97 typename std::enable_if_t<std::is_integral<T>::value,
bool8_t>
98 operator()(
const Eigen::Matrix<T, H, W> & lhs,
const Eigen::Matrix<T, H, W> & rhs)
const
107 template<typename DomainValue, typename ComparatorT = decltype(std::equal_to<DomainValue>())>
114 : m_comparator(comparator) {}
121 const DomainValue & value,
const ComputeMode & mode,
122 const ComparatorT & comparator = ComparatorT())
123 : m_comparator(comparator), m_last_mode(mode), m_last_value(value)
133 m_last_value = value;
145 if (m_comparator(
x, m_last_value)) {
148 ret = m_last_mode.score();
151 ret = m_last_mode.jacobian();
154 ret = m_last_mode.hessian();
164 const ComparatorT m_comparator;
165 DomainValue m_last_value;
173 #endif // OPTIMIZATION__UTILS_HPP_