LCOV - code coverage report
Current view: top level - problems - SubsetProblem.cpp (source / functions) Hit Total Coverage
Test: test_coverage.info.cleaned Lines: 0 25 0.0 %
Date: 2022-08-04 03:43:28 Functions: 0 12 0.0 %

          Line data    Source code
       1             : #include "SubsetProblem.h"
       2             : #include "TypeCasts.hpp"
       3             : 
       4             : namespace elsa
       5             : {
       6             : 
       7             :     template <typename data_t>
       8           0 :     SubsetProblem<data_t>::SubsetProblem(
       9             :         const Problem<data_t>& fullProblem,
      10             :         const std::vector<std::unique_ptr<Problem<data_t>>>& subsetProblems)
      11             :         : Problem<data_t>(fullProblem.getDataTerm(), fullProblem.getRegularizationTerms(),
      12             :                           fullProblem.getCurrentSolution()),
      13           0 :           _subsetProblems(0)
      14             :     {
      15             :         // TODO: maybe add a sanity check to make sure the domain of all problems matches
      16           0 :         for (const auto& problem : subsetProblems) {
      17           0 :             _subsetProblems.emplace_back(problem->clone());
      18             :         }
      19           0 :     }
      20             : 
      21             :     template <typename data_t>
      22           0 :     SubsetProblem<data_t>::SubsetProblem(const SubsetProblem<data_t>& subsetProblem)
      23             :         : Problem<data_t>(subsetProblem.getDataTerm(), subsetProblem.getRegularizationTerms(),
      24             :                           subsetProblem.getCurrentSolution()),
      25           0 :           _subsetProblems(0)
      26             :     {
      27           0 :         for (const auto& problem : subsetProblem._subsetProblems) {
      28           0 :             _subsetProblems.emplace_back(problem->clone());
      29             :         }
      30           0 :     }
      31             : 
      32             :     template <typename data_t>
      33           0 :     DataContainer<data_t> SubsetProblem<data_t>::getSubsetGradient(index_t subset)
      34             :     {
      35           0 :         if (subset < 0 || asUnsigned(subset) >= _subsetProblems.size()) {
      36           0 :             throw std::invalid_argument(
      37             :                 "SubsetProblem: subset index out of bounds for number of subsets");
      38             :         }
      39             : 
      40           0 :         _subsetProblems[asUnsigned(subset)]->getCurrentSolution() = this->getCurrentSolution();
      41           0 :         return _subsetProblems[asUnsigned(subset)]->getGradient();
      42             :     }
      43             : 
      44             :     template <typename data_t>
      45           0 :     void SubsetProblem<data_t>::getSubsetGradient(DataContainer<data_t>& result, index_t subset)
      46             :     {
      47           0 :         if (subset < 0 || asUnsigned(subset) >= _subsetProblems.size()) {
      48           0 :             throw std::invalid_argument(
      49             :                 "SubsetProblem: subset index out of bounds for number of subsets");
      50             :         }
      51           0 :         _subsetProblems[asUnsigned(subset)]->getCurrentSolution() = this->getCurrentSolution();
      52           0 :         _subsetProblems[asUnsigned(subset)]->getGradient(result);
      53           0 :     }
      54             : 
      55             :     template <typename data_t>
      56           0 :     index_t SubsetProblem<data_t>::getNumberOfSubsets() const
      57             :     {
      58           0 :         return asSigned(_subsetProblems.size());
      59             :     }
      60             : 
      61             :     template <typename data_t>
      62           0 :     auto SubsetProblem<data_t>::cloneImpl() const -> SubsetProblem<data_t>*
      63             :     {
      64           0 :         return new SubsetProblem(*this);
      65             :     }
      66             : 
      67             :     // ------------------------------------------
      68             :     // explicit template instantiation
      69             :     template class SubsetProblem<float>;
      70             :     template class SubsetProblem<double>;
      71             : } // namespace elsa

Generated by: LCOV version 1.14