Line data Source code
1 : #include <iostream> 2 : #include "ProximalBoxConstraint.h" 3 : #include "DataContainer.h" 4 : 5 : namespace elsa 6 : { 7 : 8 : template <class data_t> 9 : ProximalBoxConstraint<data_t>::ProximalBoxConstraint(data_t lower) : lower_(lower) 10 12 : { 11 12 : } 12 : 13 : template <class data_t> 14 : ProximalBoxConstraint<data_t>::ProximalBoxConstraint(data_t lower, data_t upper) 15 : : lower_(lower), upper_(upper) 16 10 : { 17 10 : } 18 : 19 : template <class data_t> 20 : DataContainer<data_t> ProximalBoxConstraint<data_t>::apply(const DataContainer<data_t>& v, 21 : SelfType_t<data_t> t) const 22 8 : { 23 8 : DataContainer<data_t> out{v.getDataDescriptor()}; 24 8 : apply(v, t, out); 25 8 : return out; 26 8 : } 27 : 28 : template <class data_t> 29 : void ProximalBoxConstraint<data_t>::apply(const DataContainer<data_t>& v, SelfType_t<data_t>, 30 : DataContainer<data_t>& prox) const 31 26 : { 32 26 : if (lower_.has_value() && upper_.has_value()) { 33 10 : prox = ::elsa::clip(v, *lower_, *upper_); 34 16 : } else if (lower_.has_value() && !upper_.has_value()) { 35 12 : prox = ::elsa::maximum(v, *lower_); 36 12 : } else if (!lower_.has_value() && upper_.has_value()) { 37 0 : prox = ::elsa::minimum(v, *upper_); 38 4 : } else { 39 4 : prox = v; 40 4 : } 41 26 : } 42 : 43 : template <class data_t> 44 : bool operator==(const ProximalBoxConstraint<data_t>& lhs, 45 : const ProximalBoxConstraint<data_t>& rhs) 46 : { 47 : return lhs.lower_.has_value() && rhs.lower_.has_value() && lhs.upper_.has_value() 48 : && rhs.upper_.has_value() && (*lhs.lower) == (rhs.lower_) 49 : && (*lhs.upper_) == (*rhs.upper_); 50 : } 51 : 52 : template <class data_t> 53 : bool operator!=(const ProximalBoxConstraint<data_t>& lhs, 54 : const ProximalBoxConstraint<data_t>& rhs) 55 : { 56 : return !(lhs == rhs); 57 : } 58 : 59 : // ------------------------------------------ 60 : // explicit template instantiation 61 : template class ProximalBoxConstraint<float>; 62 : template class ProximalBoxConstraint<double>; 63 : } // namespace elsa