/// @addtogroup dynsys
/// @{

/////////////////////////////////////////////////////////////////////////////
/// @file CnDynSys.h
///
/// @author Daniel Wilczak
/////////////////////////////////////////////////////////////////////////////

// Copyright (C) 2000-2012 by the CAPD Group.
//
// This file constitutes a part of the CAPD library,
// distributed under the terms of the GNU General Public License.
// Consult  http://capd.ii.uj.edu.pl/ for details.

#ifndef _CAPD_DYNSYS_CNDYNSYS_H_
#define _CAPD_DYNSYS_CNDYNSYS_H_

#include "capd/dynsys/C2DynSys.h"
#include "capd/diffAlgebra/Jet.h"

namespace capd{
namespace dynsys{

template<typename MatrixT>
class CnDynSys : public virtual capd::dynsys::C2DynSys<MatrixT>{
public:
  typedef MatrixT MatrixType;
  typedef typename MatrixType::RowVectorType VectorType;
  typedef typename MatrixType::ScalarType ScalarType;

  template<class JetT>
  VectorType encloseCnMap(
        const ScalarType& t,
        const VectorType& x,
        const VectorType& xx,
        JetT& phi,
        JetT& rem,
        JetT& enc
      ){
    throw std::logic_error("template method CnDynSys::encloseMap cannot be implemented! Use overridden version from an inherited class.\n");
  }

//from C1DynSys
  using C1DynSys<MatrixType>::JacRemainder;
  using C1DynSys<MatrixType>::jacEnclosure;
  using C1DynSys<MatrixType>::c1Enclosure;
  using C1DynSys<MatrixType>::enclosure;

// from DynSys
  using C1DynSys<MatrixType>::Phi;
  using C1DynSys<MatrixType>::JacPhi;
  using C1DynSys<MatrixType>::Lipschitz;
};

}} // namespace capd::dynsys

#endif // _CAPD_DYNSYS_CNDYNSYS_H_

/// @}
