LCOV - code coverage report
Current view: top level - elsa/proximal_operators - ProximalBoxConstraint.cpp (source / functions) Hit Total Coverage
Test: coverage-all.lcov Lines: 19 20 95.0 %
Date: 2024-05-16 04:22:26 Functions: 8 8 100.0 %

          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

Generated by: LCOV version 1.14