18 class ConstValueExpr :
public AnalyticExpr<T>
22 ConstValueExpr(
const typename T::Domain& x)
26 std::shared_ptr<ExprBase> copy()
const
28 return std::make_shared<ConstValueExpr<T>>(*this);
31 T fwd_eval(ValuesMap& v, Index total_input_size,
bool natural_eval)
const
34 return AnalyticExpr<T>::init_value(v, T(
42 return AnalyticExpr<T>::init_value(v, T(
47 IntervalMatrix::zero(_x.size(),total_input_size),
53 void bwd_eval(ValuesMap& v)
const
55 AnalyticExpr<T>::value(v).a &= _x;
58 std::pair<Index,Index> output_shape()
const
60 if constexpr(std::is_same_v<T,ScalarType>)
63 if constexpr(std::is_same_v<T,VectorType>)
66 if constexpr(std::is_same_v<T,MatrixType>)
67 return {_x.rows(),_x.cols()};
69 assert_release(
false &&
"unknow output shape for constant");
72 void replace_arg([[maybe_unused]]
const ExprID& old_arg_id, [[maybe_unused]]
const std::shared_ptr<ExprBase>& new_expr)
75 virtual bool belongs_to_args_list([[maybe_unused]]
const FunctionArgsList& args)
const
80 virtual std::string str(
bool in_parentheses =
false)
const
83 if(_x.is_degenerated()) s << _x.mid();
85 return in_parentheses ?
"(" + s.str() +
")" : s.str();
88 virtual bool is_str_leaf()
const
95 const typename T::Domain _x;
99 inline AnalyticExprWrapper<typename ValueType<T>::Type> const_value(
const T& x)
101 return { std::make_shared<ConstValueExpr<typename ValueType<T>::Type>>(x) };