25#ifndef LSST_AFW_MATH_FUNCTION_H
26#define LSST_AFW_MATH_FUNCTION_H
35#include "boost/format.hpp"
82template <
typename ReturnT>
161 (boost::format(
"params has %d entries instead of %d") % params.
size() %
_params.
size())
175 os <<
"parameters: [ ";
201template <
typename ReturnT>
238 virtual ReturnT operator()(
double x) const = 0;
258template <
typename ReturnT>
297 virtual ReturnT operator()(
double x,
double y) const = 0;
307 "getDFuncDParameters is not implemented for this class");
325template <
typename ReturnT>
372 os <<
"order=" <<
order <<
" invalid: must be >= 0";
393 int order =
static_cast<int>(
394 0.5 + ((-3.0 + (
std::sqrt(1.0 + (8.0 *
static_cast<double>(nParameters))))) / 2.0));
397 os <<
"nParameters=" << nParameters <<
" invalid: order is not an integer";
417 for (
unsigned int i = 0; i < numParams; ++i) {
418 dummy->setParameter(i, 0.0);
421 for (
unsigned int i = 0; i < numParams; ++i) {
422 dummy->setParameter(i, 1.0);
423 deriv[i] = (*dummy)(
x,
y);
424 dummy->setParameter(i, 0.0);
440template <
typename ReturnT>
449 ReturnT operator()(
double)
const noexcept(IS_NOTHROW_INIT<ReturnT>)
override {
450 return static_cast<ReturnT
>(0);
457template <
typename ReturnT>
466 ReturnT operator()(
double,
double)
const noexcept(IS_NOTHROW_INIT<ReturnT>)
override {
467 return static_cast<ReturnT
>(0);
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Base class for 2-dimensional polynomials of the form:
int _order
order of polynomial
static int nParametersFromOrder(int order)
Compute number of parameters from polynomial order.
bool isLinearCombination() const noexcept override
Is the function a linear combination of its parameters?
BasePolynomialFunction2(BasePolynomialFunction2 &&)=default
BasePolynomialFunction2(unsigned int order)
Construct a polynomial function of specified order.
int getOrder() const noexcept
Get the polynomial order.
BasePolynomialFunction2(BasePolynomialFunction2 const &)=default
BasePolynomialFunction2(std::vector< double > params)
Construct a polynomial function with specified parameters.
BasePolynomialFunction2 & operator=(BasePolynomialFunction2 const &)=default
BasePolynomialFunction2()
static int orderFromNParameters(int nParameters)
Compute polynomial order from the number of parameters.
std::vector< double > getDFuncDParameters(double x, double y) const override
Return the derivative of the Function with respect to its parameters.
~BasePolynomialFunction2() noexcept override=default
BasePolynomialFunction2 & operator=(BasePolynomialFunction2 &&)=default
A Function taking one argument.
virtual std::shared_ptr< Function1< ReturnT > > clone() const =0
Return a pointer to a deep copy of this function.
~Function1() noexcept override=default
Function1(Function1 const &)=default
Function1(std::vector< double > const ¶ms)
Construct a Function1 given the function parameters.
std::string toString(std::string const &prefix="") const override
Return a string representation of the function.
Function1(unsigned int nParams)
Construct a Function1 given the number of function parameters.
Function1 & operator=(Function1 const &)=default
virtual void computeCache(int const n)
Function1 & operator=(Function1 &&)=default
Function1(Function1 &&)=default
A Function taking two arguments.
virtual std::vector< double > getDFuncDParameters(double, double) const
Return the derivative of the Function with respect to its parameters.
Function2(unsigned int nParams)
Construct a Function2 given the number of function parameters.
~Function2() noexcept override=default
Function2 & operator=(Function2 &&)=default
Function2(Function2 const &)=default
virtual std::shared_ptr< Function2< ReturnT > > clone() const =0
Return a pointer to a deep copy of this function.
Function2 & operator=(Function2 const &)=default
std::string toString(std::string const &prefix="") const override
Return a string representation of the function.
Function2(Function2 &&)=default
Function2(std::vector< double > const ¶ms)
Construct a Function2 given the function parameters.
virtual std::string toString(std::string const &) const
Return a string representation of the function.
void setParameter(unsigned int ind, double newValue)
Set one function parameter without range checking.
Function(Function &&)=default
std::vector< double > _params
std::string getPythonModule() const override
Return the fully-qualified Python module that should be imported to guarantee that its factory is reg...
virtual bool isLinearCombination() const noexcept
Is the function a linear combination of its parameters?
Function(Function const &)=default
void setParameters(std::vector< double > const ¶ms)
Set all function parameters.
Function & operator=(Function const &)=default
std::vector< double > const & getParameters() const noexcept
Return all function parameters.
~Function() noexcept override=default
virtual double getParameter(unsigned int ind) const
Get one function parameter without range checking.
Function(unsigned int nParams)
Construct a Function given the number of function parameters.
unsigned int getNParameters() const noexcept
Return the number of function parameters.
Function & operator=(Function &&)=default
Function(std::vector< double > const ¶ms)
Construct a Function given the function parameters.
a class used in function calls to indicate that no Function1 is being provided
std::shared_ptr< Function1< ReturnT > > clone() const override
Return a pointer to a deep copy of this function.
a class used in function calls to indicate that no Function2 is being provided
std::shared_ptr< Function2< ReturnT > > clone() const override
Return a pointer to a deep copy of this function.
A CRTP facade class for subclasses of Persistable.
A base class for objects that can be persisted via afw::table::io Archive classes.
Reports invalid arguments.
Reports attempts to access elements using an invalid key.
bool constexpr IS_NOTHROW_INIT
Test that a Function's return value is nothrow-castable to T.