#include "L1Norm.h" #include namespace elsa { template L1Norm::L1Norm(const DataDescriptor& domainDescriptor) : Functional(domainDescriptor) { } template L1Norm::L1Norm(const Residual& residual) : Functional(residual) { } template data_t L1Norm::evaluateImpl(const DataContainer& Rx) { return Rx.l1Norm(); } template void L1Norm::getGradientInPlaceImpl([[maybe_unused]] DataContainer& Rx) { throw std::logic_error("L1Norm: not differentiable, so no gradient! (busted!)"); } template LinearOperator L1Norm::getHessianImpl([[maybe_unused]] const DataContainer& Rx) { throw std::logic_error("L1Norm: not differentiable, so no Hessian! (busted!)"); } template L1Norm* L1Norm::cloneImpl() const { return new L1Norm(this->getResidual()); } template bool L1Norm::isEqual(const Functional& other) const { if (!Functional::isEqual(other)) return false; auto otherL1Norm = dynamic_cast(&other); return static_cast(otherL1Norm); } // ------------------------------------------ // explicit template instantiation template class L1Norm; template class L1Norm; template class L1Norm>; template class L1Norm>; } // namespace elsa