18 class ConstValueExpr :
public AnalyticExpr<T>
22 ConstValueExpr(
const typename T::Domain& x)
26 const typename T::Domain& value()
const
31 std::shared_ptr<ExprBase> copy()
const
33 return std::make_shared<ConstValueExpr<T>>(*this);
36 T fwd_eval(ValuesMap& v, Index total_input_size,
bool natural_eval)
const
39 return AnalyticExpr<T>::init_value(v, T(
47 return AnalyticExpr<T>::init_value(v, T(
52 IntervalMatrix::zero(_x.size(),total_input_size),
58 void bwd_eval(ValuesMap& v)
const
60 AnalyticExpr<T>::value(v).a &= _x;
63 std::pair<Index,Index> output_shape()
const
65 if constexpr(std::is_same_v<T,ScalarType>)
68 if constexpr(std::is_same_v<T,VectorType>)
71 if constexpr(std::is_same_v<T,MatrixType>)
72 return {_x.rows(),_x.cols()};
74 assert_release_constexpr(
false &&
"unknow output shape for constant");
77 void replace_arg([[maybe_unused]]
const ExprID& old_arg_id, [[maybe_unused]]
const std::shared_ptr<ExprBase>& new_expr)
80 virtual bool belongs_to_args_list([[maybe_unused]]
const FunctionArgsList& args)
const
85 virtual std::string str(
bool in_parentheses =
false)
const
88 if(_x.is_degenerated()) s << _x.mid();
90 return in_parentheses ?
"(" + s.str() +
")" : s.str();
93 virtual bool is_str_leaf()
const
100 const typename T::Domain _x;
104 inline AnalyticExprWrapper<typename ExprType<T>::Type> const_value(
const T& x)
106 return { std::make_shared<ConstValueExpr<typename ExprType<T>::Type>>(x) };