28#ifndef TWO_POLYNOMIAL_H 
   29#define TWO_POLYNOMIAL_H 
   87    explicit TwoPolynomial(
const std::vector<std::vector<int>> &coefficients);
 
   89    TwoPolynomial(
const TwoPolynomial &poly);
 
   91    TwoPolynomial& operator= (
const TwoPolynomial &poly);
 
   95    void differentiateX();
 
   97    void differentiateS();
 
  101    void multiplyConstant (
const int &constant);
 
  105    void multiplydSfactors(
const TwoPolynomial &poly);
 
  112    void convert2Dto1Darray(
double *vec1, 
double *vec2,
 
  113                            const vectorLengths &nn,
 
  114                            const TwoPolynomial &poly) 
const;
 
  124    void convolution(
double *vec1, 
double *vec2,
 
  125                     const std::size_t &nx, 
const std::size_t &ny) 
const;
 
  130    void convert1Dto2Darray(
double *vec1, 
const vectorLengths &nn);
 
  134    void multiplyPolynomial(
const TwoPolynomial &poly);
 
  136    void printPolynomial() 
const;
 
  141    int getCoefficient(
const std::size_t &Xorder,
 
  142                       const std::size_t &Sorder) 
const;
 
  148    void setCoefficient(
const int &coefficient,
 
  149                        const std::size_t &Xorder,
 
  150                        const std::size_t &Sorder);
 
  152    std::size_t getMaxXorder() 
const;
 
  154    std::size_t getMaxSorder() 
const;
 
  158    void setMaxXorder(
const std::size_t &maxXorder);
 
  162    void setMaxSorder(
const std::size_t &maxSorder);
 
  164    std::size_t getNdSfactors() 
const;
 
  166    std::vector<std::size_t> getdSfactors() 
const;
 
  170    void setdSfactors(
const std::vector<std::size_t> &dSfactors);
 
  179    double evaluatePolynomial(
const double &x, 
const double &s) 
const;
 
  183    void truncate(
const std::size_t &truncateOrder);
 
  189    void addPolynomial(
const TwoPolynomial &poly);
 
  196    friend bool operator < (
const TwoPolynomial &left,
 
  197                            const TwoPolynomial &right);
 
  203    friend bool operator == (
const TwoPolynomial &left,
 
  204                             const TwoPolynomial &right);
 
  206    friend class PolynomialSum;
 
  208    std::size_t maxXorder_m;
 
  209    std::size_t maxSorder_m;
 
  210    std::vector<std::vector<int>> coefficients_m;
 
  211    std::vector<std::size_t> dSfactors_m;
 
  215    std::size_t TwoPolynomial::getMaxXorder()
 const {
 
  219    std::size_t TwoPolynomial::getMaxSorder()
 const {
 
  223    std::size_t TwoPolynomial::getNdSfactors()
 const {
 
  224        return dSfactors_m.size();
 
  227    std::vector<std::size_t> TwoPolynomial::getdSfactors()
 const {
 
  231    void TwoPolynomial::setdSfactors(
 
  232                        const std::vector<std::size_t> &dSfactors) {
 
  233        dSfactors_m = dSfactors;
 
  236    bool TwoPolynomial::isZero()
 const {
 
  237        return (maxXorder_m == 0 && maxSorder_m == 0 &&
 
  238                coefficients_m[0][0] == 0);
 
  241    void TwoPolynomial::truncate(
const std::size_t &truncateOrder) {
 
  242        if (truncateOrder < maxXorder_m) {
 
  243            coefficients_m.resize(truncateOrder + 1);
 
  244            maxXorder_m = truncateOrder;
 
bool operator<(const TwoPolynomial &left, const TwoPolynomial &right)
 
bool operator==(const TwoPolynomial &left, const TwoPolynomial &right)