20 static Interval fwd(
const IntervalVector& x1, Index i);
21 static ScalarType fwd_natural(
const VectorType& x1, Index i);
22 static ScalarType fwd_centered(
const VectorType& x1, Index i);
23 static void bwd(
const Interval& y, IntervalVector& x1, Index i);
25 static Interval fwd(
const IntervalMatrix& x1, Index i, Index j);
26 static ScalarType fwd_natural(
const MatrixType& x1, Index i, Index j);
27 static ScalarType fwd_centered(
const MatrixType& x1, Index i, Index j);
28 static void bwd(
const Interval& y, IntervalMatrix& x1, Index i, Index j);
34 class AnalyticOperationExpr<ComponentOp,ScalarType,VectorType> :
public AnalyticExpr<ScalarType>,
public OperationExprBase<AnalyticExpr<VectorType>>
38 AnalyticOperationExpr(
const std::shared_ptr<AnalyticExpr<VectorType>>& x1, Index i)
39 : OperationExprBase<AnalyticExpr<VectorType>>(x1), _i(i)
42 AnalyticOperationExpr(
const AnalyticOperationExpr& e)
43 : OperationExprBase<AnalyticExpr<VectorType>>(e), _i(e._i)
46 std::shared_ptr<ExprBase> copy()
const
48 return std::make_shared<AnalyticOperationExpr<ComponentOp,ScalarType,VectorType>>(*this);
51 void replace_expr(
const ExprID& old_expr_id,
const std::shared_ptr<ExprBase>& new_expr)
53 return OperationExprBase<AnalyticExpr<VectorType>>::replace_expr(old_expr_id, new_expr);
56 ScalarType fwd_eval(ValuesMap& v, Index total_input_size,
bool natural_eval)
const
59 return AnalyticExpr<ScalarType>::init_value(
60 v, ComponentOp::fwd_natural(std::get<0>(this->_x)->fwd_eval(v, total_input_size, natural_eval), _i));
62 return AnalyticExpr<ScalarType>::init_value(
63 v, ComponentOp::fwd_centered(std::get<0>(this->_x)->fwd_eval(v, total_input_size, natural_eval), _i));
66 void bwd_eval(ValuesMap& v)
const
68 ComponentOp::bwd(AnalyticExpr<ScalarType>::value(v).a, std::get<0>(this->_x)->value(v).a, _i);
69 std::get<0>(this->_x)->bwd_eval(v);
72 virtual bool belongs_to_args_list(
const FunctionArgsList& args)
const
74 return std::get<0>(this->_x)->belongs_to_args_list(args);
83 class AnalyticOperationExpr<ComponentOp,ScalarType,MatrixType> :
public AnalyticExpr<ScalarType>,
public OperationExprBase<AnalyticExpr<MatrixType>>
87 AnalyticOperationExpr(
const std::shared_ptr<AnalyticExpr<MatrixType>>& x1, Index i, Index j)
88 : OperationExprBase<AnalyticExpr<MatrixType>>(x1), _i(i), _j(j)
91 AnalyticOperationExpr(
const AnalyticOperationExpr& e)
92 : OperationExprBase<AnalyticExpr<MatrixType>>(e), _i(e._i), _j(e._j)
95 std::shared_ptr<ExprBase> copy()
const
97 return std::make_shared<AnalyticOperationExpr<ComponentOp,ScalarType,MatrixType>>(*this);
100 void replace_expr(
const ExprID& old_expr_id,
const std::shared_ptr<ExprBase>& new_expr)
102 return OperationExprBase<AnalyticExpr<MatrixType>>::replace_expr(old_expr_id, new_expr);
105 ScalarType fwd_eval(ValuesMap& v, Index total_input_size,
bool natural_eval)
const
108 return AnalyticExpr<ScalarType>::init_value(
109 v, ComponentOp::fwd_natural(std::get<0>(this->_x)->fwd_eval(v, total_input_size, natural_eval), _i, _j));
111 return AnalyticExpr<ScalarType>::init_value(
112 v, ComponentOp::fwd_centered(std::get<0>(this->_x)->fwd_eval(v, total_input_size, natural_eval), _i, _j));
115 void bwd_eval(ValuesMap& v)
const
117 ComponentOp::bwd(AnalyticExpr<ScalarType>::value(v).a, std::get<0>(this->_x)->value(v).a, _i, _j);
118 std::get<0>(this->_x)->bwd_eval(v);
121 virtual bool belongs_to_args_list(
const FunctionArgsList& args)
const
123 return std::get<0>(this->_x)->belongs_to_args_list(args);
135 inline Interval ComponentOp::fwd(
const IntervalVector& x1, Index i)
137 assert(i >= 0 && i < x1.size());
141 inline ScalarType ComponentOp::fwd_natural(
const VectorType& x1, Index i)
143 assert(i >= 0 && i < x1.a.rows());
150 inline ScalarType ComponentOp::fwd_centered(
const VectorType& x1, Index i)
152 if(centered_form_not_available_for_args(x1))
153 return fwd_natural(x1,i);
155 assert(i >= 0 && i < x1.a.rows());
164 inline void ComponentOp::bwd(
const Interval& y, IntervalVector& x1, Index i)
166 assert(i >= 0 && i < x1.size());
172 inline Interval ComponentOp::fwd(
const IntervalMatrix& x1, Index i, Index j)
174 assert(i >= 0 && i < x1.rows());
175 assert(j >= 0 && j < x1.cols());
179 inline ScalarType ComponentOp::fwd_natural(
const MatrixType& x1, Index i, Index j)
181 assert(i >= 0 && i < x1.a.rows());
182 assert(j >= 0 && j < x1.a.cols());
189 inline ScalarType ComponentOp::fwd_centered(
const MatrixType& x1, Index i, Index j)
191 if(centered_form_not_available_for_args(x1))
192 return fwd_natural(x1,i,j);
194 assert(i >= 0 && i < x1.a.rows());
195 assert(j >= 0 && j < x1.a.cols());
204 inline void ComponentOp::bwd(
const Interval& y, IntervalMatrix& x1, Index i, Index j)
206 assert(i >= 0 && i < x1.rows());
207 assert(j >= 0 && j < x1.cols());
Interval class, for representing closed and connected subsets of .
Definition codac2_Interval.h:62