//===----------------------------------------------------------------------===//
// Pointwise convolution ops.
// Naming convention: '_'.join(
//   [conv,
//    {input-spatial-dims},
//    {output-spatial-dims},
//    {filter-dims},
//    {output-size x input-size}])
//===----------------------------------------------------------------------===//

func.func @conv_244_112_3x3_3x32() -> tensor<1x112x112x32xf32> {
    %input = util.unfoldable_constant dense<1.0> : tensor<1x224x224x3xf32>
    %filter = util.unfoldable_constant dense<1.0> : tensor<3x3x3x32xf32>
    %0 = "stablehlo.convolution"(%input, %filter) {
        batch_group_count = 1 : i64,
        dimension_numbers = #stablehlo.conv<raw
            input_batch_dimension = 0,
            input_feature_dimension = 3,
            input_spatial_dimensions = [1, 2],
            kernel_input_feature_dimension = 2,
            kernel_output_feature_dimension = 3,
            kernel_spatial_dimensions = [0, 1],
            output_batch_dimension = 0,
            output_feature_dimension = 3,
            output_spatial_dimensions = [1, 2]
        >,
        feature_group_count = 1 : i64,
        padding = dense<[[0, 1], [0, 1]]> : tensor<2x2xi64>,
        rhs_dilation = dense<1> : tensor<2xi64>,
        window_strides = dense<2> : tensor<2xi64>
    } : (tensor<1x224x224x3xf32>, tensor<3x3x3x32xf32>) -> tensor<1x112x112x32xf32>
    return %0 : tensor<1x112x112x32xf32>
}

func.func @conv_112_112_1x1_32x64() -> tensor<1x112x112x64xf32> {
    %input = util.unfoldable_constant dense<1.0> : tensor<1x112x112x32xf32>
    %filter = util.unfoldable_constant dense<1.0> : tensor<1x1x32x64xf32>
    %0 = "stablehlo.convolution"(%input, %filter) {
        batch_group_count = 1 : i64,
        dimension_numbers = #stablehlo.conv<raw
            input_batch_dimension = 0,
            input_feature_dimension = 3,
            input_spatial_dimensions = [1, 2],
            kernel_input_feature_dimension = 2,
            kernel_output_feature_dimension = 3,
            kernel_spatial_dimensions = [0, 1],
            output_batch_dimension = 0,
            output_feature_dimension = 3,
            output_spatial_dimensions = [1, 2]
        >,
        feature_group_count = 1 : i64,
        padding = dense<0> : tensor<2x2xi64>,
        rhs_dilation = dense<1> : tensor<2xi64>,
        window_strides = dense<1> : tensor<2xi64>
    } : (tensor<1x112x112x32xf32>, tensor<1x1x32x64xf32>) -> tensor<1x112x112x64xf32>
    return %0 : tensor<1x112x112x64xf32>
}

func.func @conv_7_7_1x1_1024x1024() -> tensor<1x7x7x1024xf32> {
    %input = util.unfoldable_constant dense<1.0> : tensor<1x7x7x1024xf32>
    %filter = util.unfoldable_constant dense<1.0> : tensor<1x1x1024x1024xf32>
    %0 = "stablehlo.convolution"(%input, %filter) {
        batch_group_count = 1 : i64,
        dimension_numbers = #stablehlo.conv<raw
            input_batch_dimension = 0,
            input_feature_dimension = 3,
            input_spatial_dimensions = [1, 2],
            kernel_input_feature_dimension = 2,
            kernel_output_feature_dimension = 3,
            kernel_spatial_dimensions = [0, 1],
            output_batch_dimension = 0,
            output_feature_dimension = 3,
            output_spatial_dimensions = [1, 2]
        >,
        feature_group_count = 1 : i64,
        padding = dense<0> : tensor<2x2xi64>,
        rhs_dilation = dense<1> : tensor<2xi64>,
        window_strides = dense<1> : tensor<2xi64>
    } : (tensor<1x7x7x1024xf32>, tensor<1x1x1024x1024xf32>) -> tensor<1x7x7x1024xf32>
    return %0 : tensor<1x7x7x1024xf32>
}

//===----------------------------------------------------------------------===//
// Depthwise convolution ops.
// Naming convention: '_'.join(
//   [depthwise_conv,
//    {input-spatial-dim},
//    {output-spatial-dim},
//    {filter-size},
//    {output-size x input-size},
//    {feature-group}])
//===----------------------------------------------------------------------===//

func.func @depthwise_conv_15x1_1x1_15x1_1x1024_1024() -> tensor<1x1x1x1024xf32> {
  %input = util.unfoldable_constant dense<1.0> : tensor<1x15x1x1024xf32>
  %filter = util.unfoldable_constant dense<1.0> : tensor<15x1x1x1024xf32>
  %res = "stablehlo.convolution"(%input, %filter) {
    batch_group_count = 1 : i64,
    dimension_numbers = #stablehlo.conv<raw
      input_batch_dimension = 0,
      input_feature_dimension = 3,
      input_spatial_dimensions = [1, 2],
      kernel_input_feature_dimension = 2,
      kernel_output_feature_dimension = 3,
      kernel_spatial_dimensions = [0, 1],
      output_batch_dimension = 0,
      output_feature_dimension = 3,
      output_spatial_dimensions = [1, 2]
      >,
    feature_group_count = 1024 : i64,
    padding = dense<0> : tensor<2x2xi64>,
    rhs_dilation = dense<1> : tensor<2xi64>,
    window_strides = dense<1> : tensor<2xi64>
  } : (tensor<1x15x1x1024xf32>, tensor<15x1x1x1024xf32>) -> tensor<1x1x1x1024xf32>
  return %res : tensor<1x1x1x1024xf32>
}

func.func @depthwise_conv_15x1_1x1_15x1_1x512_512() -> tensor<1x1x1x512xf32> {
  %input = util.unfoldable_constant dense<1.0> : tensor<1x15x1x512xf32>
  %filter = util.unfoldable_constant dense<1.0> : tensor<15x1x1x512xf32>
  %res = "stablehlo.convolution"(%input, %filter) {
    batch_group_count = 1 : i64,
    dimension_numbers = #stablehlo.conv<raw
      input_batch_dimension = 0,
      input_feature_dimension = 3,
      input_spatial_dimensions = [1, 2],
      kernel_input_feature_dimension = 2,
      kernel_output_feature_dimension = 3,
      kernel_spatial_dimensions = [0, 1],
      output_batch_dimension = 0,
      output_feature_dimension = 3,
      output_spatial_dimensions = [1, 2]
    >,
    feature_group_count = 512 : i64,
    padding = dense<0> : tensor<2x2xi64>,
    rhs_dilation = dense<1> : tensor<2xi64>,
    window_strides = dense<1> : tensor<2xi64>
  } : (tensor<1x15x1x512xf32>, tensor<15x1x1x512xf32>) -> tensor<1x1x1x512xf32>
  return %res : tensor<1x1x1x512xf32>
}

func.func @depthwise_conv_16x1_2x1_16x1_1x512_512() -> tensor<1x2x1x512xf32> {
  %input = util.unfoldable_constant dense<1.0> : tensor<1x16x1x512xf32>
  %filter = util.unfoldable_constant dense<1.0> : tensor<15x1x1x512xf32>
  %res = "stablehlo.convolution"(%input, %filter) {
    batch_group_count = 1 : i64,
    dimension_numbers = #stablehlo.conv<raw
      input_batch_dimension = 0,
      input_feature_dimension = 3,
      input_spatial_dimensions = [1, 2],
      kernel_input_feature_dimension = 2,
      kernel_output_feature_dimension = 3,
      kernel_spatial_dimensions = [0, 1],
      output_batch_dimension = 0,
      output_feature_dimension = 3,
      output_spatial_dimensions = [1, 2]
    >,
    feature_group_count = 512 : i64,
    padding = dense<0> : tensor<2x2xi64>,
    rhs_dilation = dense<1> : tensor<2xi64>,
    window_strides = dense<1> : tensor<2xi64>
  } : (tensor<1x16x1x512xf32>, tensor<15x1x1x512xf32>) -> tensor<1x2x1x512xf32>
  return %res : tensor<1x2x1x512xf32>
}
