/*
 * Copyright (c) 2021 Arm Limited.
 *
 * SPDX-License-Identifier: MIT
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to
 * deal in the Software without restriction, including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 * sell copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
#ifndef ARM_COMPUTE_OPERATOR_LIST_H
#define ARM_COMPUTE_OPERATOR_LIST_H

/** ActivationLayer
 *
 * Description:
 * Function to simulate an activation layer with the specified activation function.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_ELU
 * ANEURALNETWORKS_HARD_SWISH
 * ANEURALNETWORKS_LOGISTIC
 * ANEURALNETWORKS_RELU
 * ANEURALNETWORKS_RELU1
 * ANEURALNETWORKS_RELU6
 * ANEURALNETWORKS_TANH
 *
 */

/** ArgMinMaxLayer
 *
 * Description:
 * Function to calculate the index of the minimum or maximum values in a tensor based on an axis.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_ARGMAX
 * ANEURALNETWORKS_ARGMIN
 *
 */

/** ArithmeticAddition
 *
 * Description:
 * Function to add 2 tensors.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_ADD
 *
 */

/** ArithmeticSubtraction
 *
 * Description:
 * Function to substract 2 tensors.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_SUB
 *
 */

/** BatchNormalizationLayer
 *
 * Description:
 * Function to perform batch normalization.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** BatchToSpaceLayer
 *
 * Description:
 * Batch to space transformation.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_BATCH_TO_SPACE_ND
 *
 */

/** BitwiseAnd
 *
 * Description:
 * Function to performe bitwise AND between 2 tensors.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_LOGICAL_AND
 *
 */

/** BitwiseNot
 *
 * Description:
 * Function to performe bitwise NOT.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_LOGICAL_NOT
 *
 */

/** BitwiseOr
 *
 * Description:
 * Function to performe bitwise OR between 2 tensors.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_LOGICAL_OR
 *
 */

/** BitwiseXor
 *
 * Description:
 * Function to performe bitwise XOR between 2 tensors.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** BoundingBoxTransform
 *
 * Description:
 * Transform proposal bounding boxes to target bounding box using bounding box deltas.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** Cast
 *
 * Description:
 * Function to cast a tensor.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_CAST
 *
 */

/** ChannelShuffleLayer
 *
 * Description:
 * Function to shuffle the channels of the input tensor.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_CHANNEL_SHUFFLE
 *
 */

/** Comparison
 *
 * Description:
 * Function to compare 2 tensors.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_EQUAL
 * ANEURALNETWORKS_GREATER
 * ANEURALNETWORKS_GREATER_EQUAL
 * ANEURALNETWORKS_LESS
 * ANEURALNETWORKS_LESS_EQUAL
 * ANEURALNETWORKS_NOT_EQUAL
 *
 */

/** ConcatenateLayer
 *
 * Description:
 * Function to concatenate tensors along a given axis.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_CONCATENATION
 *
 */

/** ConvertFullyConnectedWeights
 *
 * Description:
 * Function to tranpose the wieghts for the fully connected layer.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** ConvolutionLayer
 *
 * Description:
 * Function to compute a convolution layer.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_CONV_2D
 *
 */

/** Copy
 *
 * Description:
 * Function to copy a tensor.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** Crop
 *
 * Description:
 * Performs a copy of input tensor to the output tensor.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** CropResize
 *
 * Description:
 * Function to perform cropping and resizing.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** DeconvolutionLayer
 *
 * Description:
 * Function to compute a deconvolution or tranpose convolution.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_TRANSPOSE_CONV_2D
 *
 */

/** DeconvolutionLayerUpsample
 *
 * Description:
 * Function to execute deconvolution upsample on OpenCL.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_TRANSPOSE_CONV_2D
 *
 */

/** DepthConvertLayer
 *
 * Description:
 * Performs a down-scaling depth conversion.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** DepthToSpaceLayer
 *
 * Description:
 * Depth to Space transformation.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_DEPTH_TO_SPACE
 *
 */

/** DepthwiseConvolutionLayer
 *
 * Description:
 * Function to perform depthwise separable convolution.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_DEPTHWISE_CONV_2D
 *
 */

/** DequantizationLayer
 *
 * Description:
 * Function to dequantize the values in a tensor.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_DEQUANTIZE
 *
 */

/** DetectionPostProcessLayer
 *
 * Description:
 * Function to generate the detection output based on center size encoded boxes, class prediction and anchors by doing non maximum suppression (NMS).
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_DETECTION_POSTPROCESSING
 *
 */

/** DirectConvolutionLayer
 *
 * Description:
 * Function to compute direct convolution.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_CONV_2D
 *
 */

/** DirectDeconvolutionLayer
 *
 * Description:
 * Function to run the deconvolution layer.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_TRANSPOSE_CONV_2D
 *
 */

/** ElementWiseOperations
 *
 * Description:
 * Function to perform in Cpu:
 * - Div
 * - Max
 * - Min
 * - Pow
 * - SquaredDiff
 * - Comparisons (Equal, greater, greater_equal, less, less_equal, not_equal)
 * Function to perform in CL:
 * - Add
 * - Sub
 * - Div
 * - Max
 * - Min
 * - Pow
 * - SquaredDiff
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_MAXIMUM
 * ANEURALNETWORKS_MINIMUM
 * ANEURALNETWORKS_POW
 * ANEURALNETWORKS_DIV
 * ANEURALNETWORKS_ADD
 * ANEURALNETWORKS_SUB
 * ANEURALNETWORKS_EQUAL
 * ANEURALNETWORKS_GREATER
 * ANEURALNETWORKS_GREATER_EQUAL
 * ANEURALNETWORKS_LESS
 * ANEURALNETWORKS_LESS_EQUAL
 * ANEURALNETWORKS_NOT_EQUAL
 *
 */

/** ElementwiseUnaryLayer
 *
 * Description:
 * Function to perform:
 * - Rsqrt
 * - Exp
 * - Neg
 * - Log
 * - Abs
 * - Round
 * - Sin
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_ABS
 * ANEURALNETWORKS_EXP
 * ANEURALNETWORKS_LOG
 * ANEURALNETWORKS_NEG
 * ANEURALNETWORKS_RSQRT
 * ANEURALNETWORKS_SIN
 *
 */

/** FFT1D
 *
 * Description:
 * Fast Fourier Transform 1D.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** FFT2D
 *
 * Description:
 * Fast Fourier Transform 2D.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** FFTConvolutionLayer
 *
 * Description:
 * Fast Fourier Transform Convolution.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_CONV_2D
 *
 */

/** Fill
 *
 * Description:
 * Set the values of a tensor with a given value.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_FILL
 *
 */

/** FillBorder
 *
 * Description:
 * Function to .
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** FlattenLayer
 *
 * Description:
 * Reshape a tensor to be 1D
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_RESHAPE
 *
 */

/** Floor
 *
 * Description:
 * Round the value to the lowest number.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_FLOOR
 *
 */

/** FullyConnectedLayer
 *
 * Description:
 * Function to perform a fully connected / dense layer.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_FULLY_CONNECTED
 *
 */

/** FuseBatchNormalization
 *
 * Description:
 * Function to fuse the batch normalization node to a preceding convolution node.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** Gather
 *
 * Description:
 * Performs the Gather operation along the chosen axis.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_GATHER
 *
 */

/** GEMM
 *
 * Description:
 * General Matrix Multiplication.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** GEMMConv2D
 *
 * Description:
 * General Matrix Multiplication.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_CONV_2D
 *
 */

/** GEMMConvolutionLayer
 *
 * Description:
 * General Matrix Multiplication.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_CONV_2D
 *
 */

/** GEMMDeconvolutionLayer
 *
 * Description:
 * General Matrix Multiplication.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_TRANSPOSE_CONV_2D
 *
 */

/** GEMMLowpMatrixMultiplyCore
 *
 * Description:
 * General Matrix Multiplication.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** GEMMLowpOutputStage
 *
 * Description:
 * General Matrix Multiplication.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** GenerateProposalsLayer
 *
 * Description:
 * Function to generate proposals for a RPN (Region Proposal Network).
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_GENERATE_PROPOSALS
 *
 */

/** InstanceNormalizationLayer
 *
 * Description:
 * Function to perform a Instance normalization on a given axis.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_INSTANCE_NORMALIZATION
 *
 */

/** L2NormalizeLayer
 *
 * Description:
 * Function to perform a L2 normalization on a given axis.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_L2_NORMALIZATION
 *
 */

/** Logical
 *
 * Description:
 * Function to perform:
 * - Logical AND
 * - Logical OR
 * - Logical NOT
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** LogicalAnd
 *
 * Description:
 * Function to perform Logical AND.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** LogicalOr
 *
 * Description:
 * Function to perform Logical OR.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** LogicalNot
 *
 * Description:
 * Function to perform Logical NOT.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** LSTMLayer
 *
 * Description:
 * Function to perform a single time step in a Long Short-Term Memory (LSTM) layer.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_LSTM
 *
 */

/** LSTMLayerQuantized
 *
 * Description:
 * Function to perform quantized LSTM (Long Short-Term Memory)
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_QUANTIZED_LSTM
 * ANEURALNETWORKS_QUANTIZED_16BIT_LSTM
 *
 */

/** MaxUnpoolingLayer
 *
 * Description:
 * Function to perform MaxUnpooling.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** MeanStdDevNormalizationLayer
 *
 * Description:
 * Function to execute mean and standard deviation normalization.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** NormalizationLayer
 *
 * Description:
 * Function to compute normalization layer.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_LOCAL_RESPONSE_NORMALIZATION
 *
 */

/** PadLayer
 *
 * Description:
 * Function to pad a tensor.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_PAD
 * ANEURALNETWORKS_PAD_V2
 *
 */

/** Permute
 *
 * Description:
 * Function to transpose an ND tensor.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_TRANSPOSE
 *
 */

/** PixelWiseMultiplication
 *
 * Description:
 * Function to performe a multiplication.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_MUL
 *
 */

/** PoolingLayer
 *
 * Description:
 * Function to performe pooling with the specified pooling operation.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_AVERAGE_POOL_2D
 * ANEURALNETWORKS_L2_POOL_2D
 * ANEURALNETWORKS_MAX_POOL_2D
 *
 */

/** PReluLayer
 *
 * Description:
 * Function to compute the activation layer with the PRELU activation function.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_PRELU
 *
 */

/** PriorBoxLayer
 *
 * Description:
 * Function to compute prior boxes and clip.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** QLSTMLayer
 *
 * Description:
 * Function to perform quantized LSTM (Long Short-Term Memory).
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_QUANTIZED_LSTM
 * ANEURALNETWORKS_QUANTIZED_16BIT_LSTM
 *
 */

/** QuantizationLayer
 *
 * Description:
 * Function to perform quantization layer
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_QUANTIZE
 *
 */

/** Range
 *
 * Description:
 * Function to generates a sequence of numbers starting from START and extends by increments of 'STEP' up to but not including 'END'.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** ReduceMean
 *
 * Description:
 * Function to performe reduce mean operation.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_MEAN
 *
 */

/** ReductionOperation
 *
 * Description:
 * Function to performe reduce with the following operations
 * - ARG_IDX_MAX: Index of the max value
 * - ARG_IDX_MIN: Index of the min value
 * - MEAN_SUM:    Mean of sum
 * - PROD:        Product
 * - SUM_SQUARE:  Sum of squares
 * - SUM:         Sum
 * - MIN:         Min
 * - MAX:         Max
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_REDUCE_ALL
 * ANEURALNETWORKS_REDUCE_ANY
 * ANEURALNETWORKS_REDUCE_MAX
 * ANEURALNETWORKS_REDUCE_MIN
 * ANEURALNETWORKS_REDUCE_PROD
 * ANEURALNETWORKS_REDUCE_SUM
 *
 */

/** ReorgLayer
 *
 * Description:
 * Performs a reorganization layer of input tensor to the output tensor.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** ReshapeLayer
 *
 * Description:
 * Function to reshape a tensor.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_RESHAPE
 * ANEURALNETWORKS_SQUEEZE
 *
 */

/** Reverse
 *
 * Description:
 * Function to reverse tensor according to axis.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** RNNLayer
 *
 * Description:
 * Function to perform recurrent neural network layer.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_RNN
 *
 */

/** ROIAlignLayer
 *
 * Description:
 * Function to perform ROI alignment.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_ROI_ALIGN
 *
 */

/** ROIPoolingLayer
 *
 * Description:
 * Function to perform ROI pooling.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_ROI_POOLING
 *
 */

/** Scale
 *
 * Description:
 * Function to perform resize a tensor using to interpolate:
 * - Bilinear
 * - Nearest neighbor
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_RESIZE_BILINEAR
 * ANEURALNETWORKS_RESIZE_NEAREST_NEIGHBOR
 *
 */

/** Select
 *
 * Description:
 * Function to select values from 2 tensors depending on an input tensor of booleans.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_SELECT
 *
 */

/** Slice
 *
 * Description:
 * Function to perform tensor slicing.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_SLICE
 *
 */

/** SoftmaxLayer
 *
 * Description:
 * Function to compute a SoftmaxLayer and a Log SoftmaxLayer.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_LOG_SOFTMAX
 * ANEURALNETWORKS_SOFTMAX
 *
 */

/** SpaceToBatchLayer
 *
 * Description:
 * Function to divide a tensor spatially.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_SPACE_TO_BATCH_ND
 *
 */

/** SpaceToDepthLayer
 *
 * Description:
 * Function to rearrange blocks of spatial data into depth.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_SPACE_TO_DEPTH
 *
 */

/** Split
 *
 * Description:
 * Function to split a tensor along a given axis.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_SPLIT
 *
 */

/** StackLayer
 *
 * Description:
 * Function to stack tensors along an axis.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** StridedSlice
 *
 * Description:
 * Function to extract a strided slice of a tensor.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_STRIDED_SLICE
 *
 */

/** Tile
 *
 * Description:
 * Function to construct a tensor by tiling a given tensor.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_TILE
 *
 */

/** Transpose
 *
 * Description:
 * Function to transpose a 2D tensor.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_TRANSPOSE
 *
 */

/** Unstack
 *
 * Description:
 * Function to unpack a rank-R tensor into rank-(R-1) tensors.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

/** WinogradConvolutionLayer
 *
 * Description:
 * Function to do Winograd Convolution.
 *
 * Equivalent Android NNAPI Op:
 * ANEURALNETWORKS_CONV_2D
 *
 */

/** WinogradInputTransform
 *
 * Description:
 * Function to.
 *
 * Equivalent Android NNAPI Op:
 * n/a
 *
 */

#endif /* ARM_COMPUTE_OPERATOR_LIST_H */