parameters: (
      I=TensorDef(T1, S.N, S.OH * S.SH + S.KH * S.DH, S.OW * S.SW + S.KW * S.DW,
                  S.C),
      K=TensorDef(T2, S.KH, S.KW, index_dims=[D.kh, D.kw]),
      O=TensorDef(U, S.N, S.OH, S.OW, S.C, output=True),
      strides=IndexAttrDef(S.SH, S.SW),
      dilations=IndexAttrDef(S.DH, S.DW))
docstring: Performs max pooling.
  
    Numeric casting is performed on the input operand, promoting it to the same
    data type as the accumulator/output.
docstring_summary: Performs max pooling.
docstring_tokens: Performs max pooling .
function: def pooling_nhwc_max(
      I=TensorDef(T1, S.N, S.OH * S.SH + S.KH * S.DH, S.OW * S.SW + S.KW * S.DW,
                  S.C),
      K=TensorDef(T2, S.KH, S.KW, index_dims=[D.kh, D.kw]),
      O=TensorDef(U, S.N, S.OH, S.OW, S.C, output=True),
      strides=IndexAttrDef(S.SH, S.SW),
      dilations=IndexAttrDef(S.DH, S.DW)):
    """Performs max pooling.
  
    Numeric casting is performed on the input operand, promoting it to the same
    data type as the accumulator/output.
    """
    implements(ConvolutionOpInterface)
    domain(D.n, D.oh, D.ow, D.c, D.kh, D.kw)
    O[D.n, D.oh, D.ow, D.c] = ReduceFn.max[D.kh, D.kw](
        TypeFn.cast(
            U, I[D.n, D.oh * S.SH + D.kh * S.DH, D.ow * S.SW + D.kw * S.DW, D.c]))
function_tokens: def pooling_nhwc_max ( I = TensorDef ( T1 , S . N , S . OH * S . SH + S . KH * S . DH , S . OW * S . SW + S . KW * S . DW , S . C ) , K = TensorDef ( T2 , S . KH , S . KW , index_dims = [ D . kh , D . kw ] ) , O = TensorDef ( U , S . N , S . OH , S . OW , S . C , output = True ) , strides = IndexAttrDef ( S . SH , S . SW ) , dilations = IndexAttrDef ( S . DH , S . DW ) ) : implements ( ConvolutionOpInterface ) domain ( D . n , D . oh , D . ow , D . c , D . kh , D . kw ) O [ D . n , D . oh , D . ow , D . c ] = ReduceFn . max [ D . kh , D . kw ] ( TypeFn . cast ( U , I [ D . n , D . oh * S . SH + D . kh * S . DH , D . ow * S . SW + D . kw * S . DW , D . c ] ) )