23    template<
typename X1,
typename X2>
 
   24    static std::string str(
const X1& x1, 
const X2& x2)
 
   26      return "extend(" + x1->str() + 
"," + x2->str() + 
")";
 
   29    template<
typename X1, 
typename X2>
 
   30    static std::pair<Index,Index> output_shape(
const X1& s1, [[maybe_unused]] 
const X2& s2)
 
   32      auto shape1 = s1->output_shape();
 
   33      assert(shape1 == s2->output_shape());
 
   38    static inline T fwd(
const T& x1, 
const T& x2)
 
   44    static inline T fwd_natural(
const T& x1, 
const T& x2)
 
   47        (x1.def_domain ? x1.a : fwd(x1.a,x2.a)),
 
   48        x1.def_domain || x2.def_domain
 
   53    static inline T fwd_centered(
const T& x1, 
const T& x2)
 
   56        (x1.def_domain ? x1.m : fwd(x1.m,x2.m)),
 
   57        (x1.def_domain ? x1.a : fwd(x1.a,x2.a)),
 
   58        (x1.def_domain ? x1.da : (x1.da | x2.da)),
 
   59        x1.def_domain || x2.def_domain
 
   64    static inline void bwd(
const T& y, T& x1, T& x2)
 
   79  template<typename T1,typename T2,typename T=ExprType<T1>::Type>
 
   80  inline AnalyticExprWrapper<T>
 
   81  extend(
const T1& x1, 
const T2& x2)
 
   83    return { std::make_shared<AnalyticOperationExpr<ExtendOp,T,T,T>>(
 
   84      (AnalyticExprWrapper<T>)x1,(AnalyticExprWrapper<T>)x2) };
 
Definition codac2_OctaSym.h:21