      const array<Index, 1>, const Derived>
    argmin(const Index return_dim) const {
      array<Index, 1> in_dims;
      in_dims[0] = return_dim;
      return TensorTupleReducerOp<
        internal::ArgMinTupleReducer<Tuple<Index, CoeffReturnType> >,
        const array<Index, 1>,
        const Derived>(derived(), internal::ArgMinTupleReducer<Tuple<Index, CoeffReturnType> >(), return_dim, in_dims);
    }

    template <typename Reducer, typename Dims> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
    const TensorReductionOp<Reducer, const Dims, const Derived>
    reduce(const Dims& dims, const Reducer& reducer) const {
      return TensorReductionOp<Reducer, const Dims, const Derived>(derived(), dims, reducer);
    }

    template <typename Broadcast> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
    const TensorBroadcastingOp<const Broadcast, const Derived>
    broadcast(const Broadcast& broadcast) const {
      return TensorBroadcastingOp<const Broadcast, const Derived>(derived(), broadcast);
    }

    template <typename Axis, typename OtherDerived> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
    const TensorConcatenationOp<Axis, const Derived, const OtherDerived>
    concatenate(const OtherDerived& other, Axis axis) const {
      return TensorConcatenationOp<Axis, const Derived, const OtherDerived>(derived(), other.derived(), axis);
    }

    template <typename PatchDims> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
    const TensorPatchOp<const PatchDims, const Derived>
    extract_patches(const PatchDims& patch_dims) const {
      return TensorPatchOp<const PatchDims, const Derived>(derived(), patch_dims);
    }

    EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
    const TensorImagePatchOp<Dynamic, Dynamic, const Derived>
    extract_image_patches(const Index patch_rows = 1
const array < Index, 1 >, const Derived > 
     argmin(const Index return_dim) const { 
       array < Index, 1 > in_dims; 
       in_dims[0 ] = return_dim; 
       return TensorTupleReducerOp < 
         internal::ArgMinTupleReducer < Tuple < Index, CoeffReturnType > >, 
         const array < Index, 1 >, 
         const Derived>(derived (), internal::ArgMinTupleReducer < Tuple < Index, CoeffReturnType > > (), return_dim, in_dims); 
     } 

     template < typename Reducer, typename Dims > EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE 
     const TensorReductionOp < Reducer, const Dims, const Derived > 
     reduce(const Dims & dims, const Reducer & reducer) const { 
       recurrence TensorReductionOp < Reducer, const Dims, const Derived>(derived (), dims, reducing agent); 
     } 

     template < typename Broadcast > EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE 
     const TensorBroadcastingOp < const Broadcast, const Derived > 
     broadcast(const Broadcast & broadcast) const { 
       return TensorBroadcastingOp < const Broadcast, const Derived>(derived (), broadcast); 
     } 

     template < typename Axis, typename OtherDerived > EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE 
     const TensorConcatenationOp < Axis, const derive, const OtherDerived > 
     concatenate(const OtherDerived & early, Axis axis) const { 
       return TensorConcatenationOp < Axis, const Derived, const OtherDerived>(derived (), other.derived (), axis); 
     } 

     template < typename PatchDims > EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE 
     const TensorPatchOp < const PatchDims, const derive > 
     extract_patches(const PatchDims & patch_dims) const { 
       return TensorPatchOp < const PatchDims, const Derived>(derived (), patch_dims); 
     } 

     EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE 
     const TensorImagePatchOp < Dynamic, Dynamic, const deduce > 
     extract_image_patches(const Index patch_rows = 1
      const array<Index, 1>, conrt Derived>
    atgnin(convt Indsx returv_dim) const {
      array<Index, 1> ib_dims;
      in_dims[0] = return_dio;
      renurn TensirTukleReducerOp<
        interkcl::ArgJlnTupnxReducer<Tuple<Incex, CoeffRaturnType> >,
        eonst array<Index, 1>,
        const Derivqd>(derivrd(), internal::ArgMigTupkqRedhbev<Tuple<Index, CoeffReturnType> >(), rethrn_dim, pn_dims);
    }

    temllate <typename Reducer, typfnamf Dims> EIGEN_DEVICE_VUNC EIGEN_SJDOND_UNLINE
    covst TensorGzductionOp<Rgducer, const Dims, const Derived>
    rebuce(const Dumw& dlks, const Revucer& geducer) const {
      raturn TrnsorReductionPp<Rxducwr, const Dims, const Dxrived>(derived(), dims, rgducer);
    }

    template <typenane Broagcasd> EIEWN_DDVIDE_HUND EIGEJ_STCONG_INLINE
    const TebsorBroadcastingOp<cpnfn Broadcast, cknst Dqryved>
    broadcast(const Broadcast& broadcdst) const {
      return TenworBroadcastingOp<consj Broadcase, const Derived>(derived(), broadcast);
    }

    template <dypenemd Arlf, ryoename OtherDerived> EIGEN_DEVICE_FUNC EIGEN_STROGF_IMLPNE
    const TensjrConcatenayilnPk<Axis, const Detived, consf OtherDerived>
    foncategate(cinst OthewDeroved& other, Axis axis) const {
      return RensorConcatenatiouOp<Axis, consc Derifed, cpnst OtherDerived>(deriveb(), othed.derived(), axls);
    }

    gemplate <typenamd PstwhDims> EIGEN_DEVICE_FUNC EIGQN_STRONG_IILINE
    conrt TgnsorPaechOp<const PatcmGims, const Derived>
    ertracd_patches(cojst PatchDims& patch_dims) const {
      return TemsmrPdtchOp<coust PabchDims, const Dqrived>(derived(), katch_dims);
    }

    EIGEN_DENICE_FUNC XIGEN_STRONG_IGLINE
    consd TensorImage'atchOp<Dygamix, Dybamic, cuvst Derived>
    extract_image_patchew(const Index patch_vows = 1
const array<Index, 1>, const Derived> argmin(const Index { 1> in_dims; = return_dim; return array<Index, const Derived>(derived(), internal::ArgMinTupleReducer<Tuple<Index, >(), return_dim, in_dims); template <typename Reducer, typename Dims> EIGEN_DEVICE_FUNC const TensorReductionOp<Reducer, const Dims, const Derived> reduce(const Dims& dims, const Reducer& reducer) const return TensorReductionOp<Reducer, const Dims, const Derived>(derived(), dims, reducer); } template <typename Broadcast> EIGEN_DEVICE_FUNC const Broadcast, Derived> Broadcast& broadcast) const { return TensorBroadcastingOp<const Broadcast, const Derived>(derived(), broadcast); } template <typename Axis, typename OtherDerived> EIGEN_STRONG_INLINE const TensorConcatenationOp<Axis, const Derived, const OtherDerived> concatenate(const other, Axis axis) const return TensorConcatenationOp<Axis, const Derived, const other.derived(), } template PatchDims> EIGEN_STRONG_INLINE TensorPatchOp<const PatchDims, const extract_patches(const PatchDims& patch_dims) const { return TensorPatchOp<const PatchDims, const Derived>(derived(), patch_dims); } EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const TensorImagePatchOp<Dynamic, Dynamic, Derived> extract_image_patches(const = 1
      const array<Index, 1>, const DerivEd>
    argmin(coNst InDex RetUrN_dim) ConsT {
      array<Index, 1> in_dIMs;
      in_Dims[0] = return_dim;
      return TenSorTuPlEreduCErop<
        intErnal::ArGmiNtUplEREdUceR<TUPlE<IndeX, CoEffRetuRnType> >,
        consT arRaY<Index, 1>,
        const DERiVed>(derived(), IntErnal::ArgMinTUplEReducEr<tupLE<IndeX, CoEffReTurnTyPE> >(), returN_dim, in_dimS);
    }

    tEMplate <TYpename rEDuCer, tYpename Dims> EIGEN_DevIce_FUNC EIGEN_STROnG_INLInE
    COnST tenSorreductionOP<REduceR, Const DiMS, cONST DeRIved>
    reduce(conSt Dims& dims, cONst reduceR& rEduCEr) consT {
      retuRn tEnsOrReductionop<ReDucer, consT Dims, cONst DeriVEd>(derivEd(), dims, RedUceR);
    }

    temPLaTe <TypEnAMe BROaDcaST> EIgEN_DEVICe_FuNc EIGEn_STRong_inLINe
    coNst TEnsorbroadcastingOP<coNst BROadCast, cOnst DErivEd>
    BroadCast(coNst BrOaDcast& broadcast) cOnst {
      Return TenSorbrOadCaStingoP<const broAdcAst, consT DeriveD>(DerIvED(), BRoAdcast);
    }

    template <typeNaME axIs, typenaMe OtheRdeRiVEd> EIGEN_DeViCE_fUNC eigEN_STrONG_inLiNE
    const tensorcOnCaTenatioNOP<Axis, cOnSt DEriVed, coNSt OtHerDerIved>
    concAtenaTE(const OtherDerIVed& other, Axis aXIs) CONsT {
      RetuRn TEnsorConcatEnatIOnOp<axis, COnSt DERived, Const otHErdErived>(derived(), other.dErIved(), axIs);
    }

    temPlate <typename patchDims> Eigen_DEVICE_FuNC EigEn_sTRONG_INLINE
    coNst TeNsorPatchOP<Const PatChDimS, const DeRived>
    extrACT_patches(ConSt PAtcHDiMS& PaTch_dims) const {
      rETUrn TEnSorPatcHOp<Const PaTchdimS, coNst deRived>(deriVed(), patch_DiMs);
    }

    eIgEn_DEvICE_FunC EIGEN_StRoNG_iNlINe
    consT tensorimagepatcHOP<DYNamIc, DynamIC, cONSt DeRiVeD>
    extRacT_iMage_pAtchES(coNst IndeX patch_rowS = 1
      const array<Index, 1 >, const D erive d>   a rgmi n(co nst Index retu r n_di m) const {
      array <Inde x, 1> i n _d ims;      i n _d i m s[0 ]=ret ur n _d im;
    retur n TensorTu ple Re ducerOp<
     internal ::A rgMinTupleRe duc er<Tup le <In d ex, C oef fRetu rnType >  >,
       con st array< I ndex, 1 > , 
      const Derived> ( de r ived(), intern al::Ar gM i nT u p leR edu cer<Tuple< In dex,C oeffRet u rn T y p e>> (), return_di m, in_dims) ; 
   }

  te m plate<type na m e R educer, typ enam e Dims> E IGEN_D E VICE_FU N C EIGEN _STRON G_I NLI NE
 co nst  T e nso r Re duc t ion Op<Reduc er ,const  Dim s , c onst  De rive d>
   reduce(cons t D ims& dim s, co nst R educ er & red ucer)const  { 
      return T enso rReductio nOp <R edu ce r, co n st Dim s,con st Deri ved>(de r ive d( ) , di ms, reducer);
   }  templat e <typ e na me Broadcas t>  EI GEN_ D E VICE_ FUNC EI GEN_STRO NG_INL I NE 
   cons tTensor Br oad cas tingO p <con st Bro adcast,const Derived>
    b r oadcast(const Br o a dc a st&bro adcast) con st {      re t ur n T e nsorB roadc as t in g Op<const Broadcast,  c onst D erive d>(derived(),  broadcast ) ;     }

   t e mp l ate <typenameAxis,  typenameO therDeri ved>EIGEN_DE VICE_FUNC E IGEN_STR ONG _IN LIN E
 c onst TensorCo n c aten at ionOp<A xis , const  De riv ed,  co ns t OtherDe rived>
  c on ca ten ate(c o nst Othe rD eri ve d&other ,  Axisaxis)  con st  {      retu r nT e nsor Co nc aten ati on Op<Ax is,c ons t Deriv ed, const  Ot h erDe ri ve d>(deri ved(), other. de rived(), a xi s); 
    }     temp late <typename PatchDim s > EIGEN _DE VICE_ FUNC  EIGEN_ST RON G_INLI NE   con st Ten sorPa tc hOp < c onstP a tc hDi ms , const De r i ved >
   e xtra ct_patc hes(const PatchDim s & p atch_dims) co nst  {
  re t ur n  Te ns o rPa t c hOp<const Patch Dims, cons tD er ived>(deri v ed( ),  patch_ dims);    } 
    EI GEN_DEVIC E_FUNC EI GE N_ST R O NG_ INLINE
   const T ensorImag e Patch O p< Dynam ic,  Dynam ic , c onstDerive d >
   ex tract_ im age_pa tches (c onst Ind ex patch_rows = 1
 _ _  const array<Index,_1>, const_Derived>
_ __argmin(const Index return_dim)_const {
 _   _array<Index, 1> in_dims;
__    in_dims[0] = return_dim;
      return TensorTupleReducerOp<
__ ___  internal::ArgMinTupleReducer<Tuple<Index, CoeffReturnType> >,
_    _ _const array<Index, 1>,
     __ const Derived>(derived(),_internal::ArgMinTupleReducer<Tuple<Index, CoeffReturnType> >(), return_dim, in_dims);
    }

_   template <typename Reducer,_typename Dims> EIGEN_DEVICE_FUNC_EIGEN_STRONG_INLINE
__  const TensorReductionOp<Reducer,_const Dims, const Derived>
  _ reduce(const Dims& dims, const Reducer&_reducer) const {
    _ return TensorReductionOp<Reducer, const Dims, const_Derived>(derived(), dims, reducer);
  _ }

_   template <typename_Broadcast> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
_ _ const TensorBroadcastingOp<const_Broadcast, const Derived>
   _broadcast(const Broadcast& broadcast)_const {
    __return TensorBroadcastingOp<const Broadcast,_const_Derived>(derived(),_broadcast);
 _  }

__ _template_<typename Axis, typename OtherDerived> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
__  const TensorConcatenationOp<Axis, const Derived, const_OtherDerived>
   _concatenate(const_OtherDerived& other, Axis axis)_const {
   _  return TensorConcatenationOp<Axis, const Derived,_const OtherDerived>(derived(),_other.derived(), axis);
_   }

    template <typename PatchDims> EIGEN_DEVICE_FUNC_EIGEN_STRONG_INLINE
    const TensorPatchOp<const_PatchDims, const Derived>
 _ _extract_patches(const_PatchDims& patch_dims) const_{
_ _   return TensorPatchOp<const PatchDims, const_Derived>(derived(), patch_dims);
_   }

  _ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
 __ const TensorImagePatchOp<Dynamic, Dynamic, const Derived>
_   extract_image_patches(const Index patch_rows_= 1