// Copyright 2020 Google LLC
//
// This source code is licensed under the BSD-style license found in the
// LICENSE file in the root directory of this source tree.

#include <math.h>
#include <stddef.h>
#include <stdint.h>

#include <xnnpack/common.h>
#include <xnnpack/log.h>
#include <xnnpack/subgraph.h>


// This function is defined inline when logging is disabled
#if XNN_LOG_LEVEL > 0
const char* xnn_operator_type_to_string(enum xnn_operator_type type) {
  switch (type) {
    case xnn_operator_type_invalid:
      return "Invalid";
    case xnn_operator_type_abs_nc_f32:
      return "Abs (NC, F32)";
    case xnn_operator_type_add_nd_f32:
      return "Add (ND, F32)";
    case xnn_operator_type_argmax_pooling_nhwc_f32:
      return "ArgMax Pooling (NHWC, F32)";
    case xnn_operator_type_average_pooling_nhwc_f32:
      return "Average Pooling (NHWC, F32)";
    case xnn_operator_type_average_pooling_nhwc_q8:
      return "Average Pooling (NHWC, Q8)";
    case xnn_operator_type_bankers_rounding_nc_f32:
      return "Bankers Rounding (NC, F32)";
    case xnn_operator_type_ceiling_nc_f32:
      return "Ceiling (NC, F32)";
    case xnn_operator_type_channel_shuffle_nc_x32:
      return "Channel Shuffle (NC, X32)";
    case xnn_operator_type_channel_shuffle_nc_x8:
      return "Channel Shuffle (NC, X8)";
    case xnn_operator_type_clamp_nc_f32:
      return "Clamp (NC, F32)";
    case xnn_operator_type_clamp_nc_u8:
      return "Clamp (NC, U8)";
    case xnn_operator_type_constant_pad_nd_x32:
      return "Constant Pad (ND, X32)";
    case xnn_operator_type_convolution_nhwc_f32:
      return "Convolution (NHWC, F32)";
    case xnn_operator_type_convolution_nhwc_q8:
      return "Convolution (NHWC, Q8)";
    case xnn_operator_type_convolution_nchw_f32:
      return "Convolution (NCHW, F32)";
    case xnn_operator_type_copy_nc_x32:
      return "Copy (NC, X32)";
    case xnn_operator_type_deconvolution_nhwc_f32:
      return "Deconvolution (NHWC, F32)";
    case xnn_operator_type_deconvolution_nhwc_q8:
      return "Deconvolution (NHWC, Q8)";
    case xnn_operator_type_divide_nd_f32:
      return "Divide (ND, F32)";
    case xnn_operator_type_floor_nc_f32:
      return "Floor (NC, F32)";
    case xnn_operator_type_fully_connected_nc_f32:
      return "Fully Connected (NC, F32)";
    case xnn_operator_type_fully_connected_nc_q8:
      return "Fully Connected (NC, Q8)";
    case xnn_operator_type_global_average_pooling_nwc_f32:
      return "Global Average Pooling (NWC, F32)";
    case xnn_operator_type_global_average_pooling_nwc_q8:
      return "Global Average Pooling (NWC, Q8)";
    case xnn_operator_type_global_average_pooling_ncw_f32:
      return "Global Average Pooling (NCW, F32)";
    case xnn_operator_type_hardswish_nc_f32:
      return "HardSwish (NC, F32)";
    case xnn_operator_type_leaky_relu_nc_q8:
      return "Leaky ReLU (NC, Q8)";
    case xnn_operator_type_max_pooling_nhwc_f32:
      return "Max Pooling (NHWC, F32)";
    case xnn_operator_type_max_pooling_nhwc_u8:
      return "Max Pooling (NHWC, U8)";
    case xnn_operator_type_maximum_nd_f32:
      return "Maximum (ND, F32)";
    case xnn_operator_type_minimum_nd_f32:
      return "Minimum (ND, F32)";
    case xnn_operator_type_multiply_nd_f32:
      return "Multiply (ND, F32)";
    case xnn_operator_type_negate_nc_f32:
      return "Negate (NC, F32)";
    case xnn_operator_type_prelu_nc_f32:
      return "PReLU (NC, F32)";
    case xnn_operator_type_resize_bilinear_nhwc_f32:
      return "Resize Bilinear (NHWC, F32)";
    case xnn_operator_type_sigmoid_nc_f32:
      return "Sigmoid (NC, F32)";
    case xnn_operator_type_sigmoid_nc_q8:
      return "Sigmoid (NC, Q8)";
    case xnn_operator_type_softmax_nc_f32:
      return "Softmax (NC, F32)";
    case xnn_operator_type_softmax_nc_q8:
      return "Softmax (NC, Q8)";
    case xnn_operator_type_square_nc_f32:
      return "Square (NC, F32)";
    case xnn_operator_type_squared_difference_nd_f32:
      return "Squared Difference (NC, F32)";
    case xnn_operator_type_subtract_nd_f32:
      return "Subtract (ND, F32)";
    case xnn_operator_type_truncation_nc_f32:
      return "Truncation (NC, F32)";
    case xnn_operator_type_unpooling_nhwc_x32:
      return "Unpooling (NHWC, X32)";
  }
  XNN_UNREACHABLE;
  return NULL;
}
#endif  // XNN_LOG_LEVEL > 0
