//
// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//

namespace armnnSerializer;

file_identifier "ARMN";

file_extension "armnn";

enum ActivationFunction : byte {
    Sigmoid = 0,
    TanH = 1,
    Linear = 2,
    ReLu = 3,
    BoundedReLu = 4,
    SoftReLu = 5,
    LeakyReLu = 6,
    Abs = 7,
    Sqrt = 8,
    Square = 9,
    Elu = 10,
    HardSwish = 11
}

enum ArgMinMaxFunction : byte {
    Min = 0,
    Max = 1
}

enum DataType : byte {
    Float16 = 0,
    Float32 = 1,
    QuantisedAsymm8 = 2, // deprecated
    Signed32 = 3,
    Boolean = 4,
    QuantisedSymm16 = 5, // deprecated
    QAsymmU8 = 6,
    QSymmS16 = 7,
    QAsymmS8 = 8,
    QSymmS8 = 9,
    Signed64 = 10
}

enum DataLayout : byte {
    NHWC = 0,
    NCHW = 1
}

enum ReduceOperation: byte {
    Sum  = 0,
    Max  = 1,
    Mean = 2,
    Min  = 3
}

enum ResizeMethod: byte {
    NearestNeighbor = 0,
    Bilinear = 1,
}

table TensorInfo {
    dimensions:[uint];
    dataType:DataType;
    quantizationScale:float = 1.0; // @deprecated Use quantizationScales instead
    quantizationOffset:int = 0;
    quantizationScales:[float];
    quantizationDim:uint;
    dimensionality:uint = 1;
    dimensionSpecificity:[bool];
}

struct Connection {
    sourceLayerIndex:uint;
    outputSlotIndex:uint;
}

table ByteData {
    data:[byte];
}

table ShortData {
    data:[short];
}

table IntData {
    data:[int];
}

table LongData {
    data:[long];
}

union ConstTensorData { ByteData, ShortData, IntData, LongData }

table ConstTensor {
    info:TensorInfo;
    data:ConstTensorData;
}

table InputSlot {
    index:uint;
    connection:Connection;
}

table OutputSlot {
    index:uint;
    tensorInfo:TensorInfo;
}

enum LayerType : uint {
    Addition = 0,
    Input = 1,
    Multiplication = 2,
    Output = 3,
    Pooling2d = 4,
    Reshape = 5,
    Softmax = 6,
    Convolution2d = 7,
    DepthwiseConvolution2d = 8,
    Activation = 9,
    Permute = 10,
    FullyConnected = 11,
    Constant = 12,
    SpaceToBatchNd = 13,
    BatchToSpaceNd = 14,
    Division = 15,
    Minimum = 16,
    Equal = 17,
    Maximum = 18,
    Normalization = 19,
    Pad = 20,
    Rsqrt = 21,
    Floor = 22,
    BatchNormalization = 23,
    Greater = 24,
    ResizeBilinear = 25,
    Subtraction = 26,
    StridedSlice = 27,
    Gather = 28,
    Mean = 29,
    Merger = 30,
    L2Normalization = 31,
    Splitter = 32,
    DetectionPostProcess = 33,
    Lstm = 34,
    Quantize = 35,
    Dequantize = 36,
    Merge = 37,
    Switch = 38,
    Concat = 39,
    SpaceToDepth = 40,
    Prelu = 41,
    TransposeConvolution2d = 42,
    Resize = 43,
    Stack = 44,
    QuantizedLstm = 45,
    Abs = 46,
    ArgMinMax = 47,
    Slice = 48,
    DepthToSpace = 49,
    InstanceNormalization = 50,
    LogSoftmax = 51,
    Comparison = 52,
    StandIn = 53,
    ElementwiseUnary = 54,
    Transpose = 55,
    QLstm = 56,
    Fill = 57,
    Rank = 58,
    LogicalBinary = 59,
    Reduce = 60,
    Cast = 61,
    Shape = 62
}

// Base layer table to be used as part of other layers
table LayerBase {
    index:uint;
    layerName:string;
    layerType:LayerType;
    inputSlots:[InputSlot];
    outputSlots:[OutputSlot];
}

table BindableLayerBase {
    base:LayerBase;
    layerBindingId:int;
}

// Table for each layer defined below

/// @deprecated Use ElementwiseUnaryLayer instead
table AbsLayer {
    base:LayerBase;
}

table ActivationLayer {
    base:LayerBase;
    descriptor:ActivationDescriptor;
}

table ActivationDescriptor {
    activationFunction:ActivationFunction = Sigmoid;
    a:float;
    b:float;
}

table AdditionLayer {
    base:LayerBase;
}

table ArgMinMaxLayer {
    base:LayerBase;
    descriptor:ArgMinMaxDescriptor;
}

table ArgMinMaxDescriptor{
    argMinMaxFunction:ArgMinMaxFunction;
    axis:int;
}

table CastLayer {
    base:LayerBase;
}

enum ComparisonOperation : byte {
    Equal = 0,
    Greater = 1,
    GreaterOrEqual = 2,
    Less = 3,
    LessOrEqual = 4,
    NotEqual = 5
}

table ComparisonDescriptor {
    operation:ComparisonOperation;
}

table ComparisonLayer {
    base:LayerBase;
    descriptor:ComparisonDescriptor;
}

table ConstantLayer {
    base:LayerBase;
    input:ConstTensor;
}

table Convolution2dLayer {
    base:LayerBase;
    descriptor:Convolution2dDescriptor;
    weights:ConstTensor;
    biases:ConstTensor;
}

table Convolution2dDescriptor {
    padLeft:uint;
    padRight:uint;
    padTop:uint;
    padBottom:uint;
    strideX:uint;
    strideY:uint;
    dilationX:uint = 1;
    dilationY:uint = 1;
    biasEnabled:bool = false;
    dataLayout:DataLayout = NCHW;
}

table DepthToSpaceLayer {
    base:LayerBase;
    descriptor:DepthToSpaceDescriptor;
}

table DepthToSpaceDescriptor {
    blockSize:uint;
    dataLayout:DataLayout;
}

table DivisionLayer {
    base:LayerBase;
}

enum UnaryOperation : byte {
    Abs = 0,
    Rsqrt = 1,
    Sqrt = 2,
    Exp = 3,
    Neg = 4,
    LogicalNot = 5,
    Log = 6,
    Sin = 7
}

table ElementwiseUnaryDescriptor {
    operation:UnaryOperation;
}

table ElementwiseUnaryLayer {
    base:LayerBase;
    descriptor:ElementwiseUnaryDescriptor;
}

/// @deprecated Use ComparisonLayer instead
table EqualLayer {
    base:LayerBase;
}

table FillLayer {
    base:LayerBase;
    descriptor:FillDescriptor;
}

table FillDescriptor {
    value:float;
}

table FloorLayer{
    base:LayerBase;
}

table FullyConnectedLayer {
    base:LayerBase;
    descriptor:FullyConnectedDescriptor;
    weights:ConstTensor;
    biases:ConstTensor;
}

table FullyConnectedDescriptor {
    biasEnabled:bool = false;
    transposeWeightsMatrix:bool = false;
    constantWeights:bool = true;
}

table GatherLayer {
    base:LayerBase;
    descriptor:GatherDescriptor;
}

table GatherDescriptor {
    axis:int = 0;
}

/// @deprecated Use ComparisonLayer instead
table GreaterLayer {
    base:LayerBase;
}

table InputLayer {
    base:BindableLayerBase;
}

table InstanceNormalizationLayer {
    base:LayerBase;
    descriptor:InstanceNormalizationDescriptor;
}

table InstanceNormalizationDescriptor {
    gamma:float;
    beta:float;
    eps:float;
    dataLayout:DataLayout;
}

table LogSoftmaxLayer {
    base:LayerBase;
    descriptor:LogSoftmaxDescriptor;
}

table LogSoftmaxDescriptor {
    beta:float = 1;
    axis:int = -1;
}

table L2NormalizationLayer {
    base:LayerBase;
    descriptor:L2NormalizationDescriptor;
}

table L2NormalizationDescriptor {
    dataLayout:DataLayout = NCHW;
    eps:float = 1e-12;
}

enum LogicalBinaryOperation : byte {
    LogicalAnd = 0,
    LogicalOr = 1
}

table LogicalBinaryDescriptor {
    operation:LogicalBinaryOperation;
}

table LogicalBinaryLayer {
    base:LayerBase;
    descriptor:LogicalBinaryDescriptor;
}

table MinimumLayer {
    base:LayerBase;
}

table MaximumLayer {
    base:LayerBase;
}

table MultiplicationLayer {
    base:LayerBase;
}

table Pooling2dLayer {
    base:LayerBase;
    descriptor:Pooling2dDescriptor;
}

enum PoolingAlgorithm : byte {
    Max = 0,
    Average = 1,
    L2 = 2
}

enum OutputShapeRounding : byte {
    Floor = 0,
    Ceiling = 1
}

enum PaddingMethod : byte {
    IgnoreValue = 0,
    Exclude = 1
}

table Pooling2dDescriptor {
    poolType:PoolingAlgorithm;
    padLeft:uint;
    padRight:uint;
    padTop:uint;
    padBottom:uint;
    poolWidth:uint;
    poolHeight:uint;
    strideX:uint;
    strideY:uint;
    outputShapeRounding:OutputShapeRounding;
    paddingMethod:PaddingMethod;
    dataLayout:DataLayout;
}

table QuantizeLayer {
    base:LayerBase;
}

table SoftmaxLayer {
    base:LayerBase;
    descriptor:SoftmaxDescriptor;
}

table SoftmaxDescriptor {
    beta:float;
}

table DepthwiseConvolution2dLayer {
    base:LayerBase;
    descriptor:DepthwiseConvolution2dDescriptor;
    weights:ConstTensor;
    biases:ConstTensor;
}

table DepthwiseConvolution2dDescriptor {
    padLeft:uint;
    padRight:uint;
    padTop:uint;
    padBottom:uint;
    strideX:uint;
    strideY:uint;
    dilationX:uint = 1;
    dilationY:uint = 1;
    biasEnabled:bool = false;
    dataLayout:DataLayout = NCHW;
}

table OutputLayer {
    base:BindableLayerBase;
}

table ReshapeLayer {
    base:LayerBase;
    descriptor:ReshapeDescriptor;
}

table ReshapeDescriptor {
    targetShape:[uint];
}

table PermuteLayer {
    base:LayerBase;
    descriptor:PermuteDescriptor;
}

table PermuteDescriptor {
    dimMappings:[uint];
}

table ShapeLayer {
    base:LayerBase;
}

table SpaceToBatchNdLayer {
    base:LayerBase;
    descriptor:SpaceToBatchNdDescriptor;
}

table SpaceToBatchNdDescriptor {
    blockShape:[uint];
    padList:[uint];
    dataLayout:DataLayout;
}

table SpaceToDepthLayer {
    base:LayerBase;
    descriptor:SpaceToDepthDescriptor;
}

table SpaceToDepthDescriptor {
    blockSize:uint;
    dataLayout:DataLayout;
}

table SubtractionLayer {
    base:LayerBase;
}

table BatchToSpaceNdLayer {
    base:LayerBase;
    descriptor:BatchToSpaceNdDescriptor;
}

table BatchToSpaceNdDescriptor {
    blockShape:[uint];
    crops:[uint];
    dataLayout:DataLayout;
}

enum NormalizationAlgorithmChannel : byte {
    Across = 0,
    Within = 1
}

enum NormalizationAlgorithmMethod : byte {
    LocalBrightness = 0,
    LocalContrast = 1
}

table NormalizationLayer {
    base:LayerBase;
    descriptor:NormalizationDescriptor;
}

table NormalizationDescriptor {
    normChannelType:NormalizationAlgorithmChannel = Across;
    normMethodType:NormalizationAlgorithmMethod = LocalBrightness;
    normSize:uint;
    alpha:float;
    beta:float;
    k:float;
    dataLayout:DataLayout = NCHW;
}

table MeanLayer {
    base:LayerBase;
    descriptor:MeanDescriptor;
}

table MeanDescriptor {
    axis:[uint];
    keepDims:bool = false;
}

table PadLayer {
    base:LayerBase;
    descriptor:PadDescriptor;
}

table PadDescriptor {
    padList:[uint];
    padValue:float = 0;
}

/// @deprecated Use ElementwiseUnaryLayer instead
table RsqrtLayer {
    base:LayerBase;
}

table BatchNormalizationLayer {
    base:LayerBase;
    descriptor:BatchNormalizationDescriptor;
    mean:ConstTensor;
    variance:ConstTensor;
    beta:ConstTensor;
    gamma:ConstTensor;
}

table BatchNormalizationDescriptor {
    eps:float;
    dataLayout:DataLayout;
}

/// @deprecated Use ResizeLayer instead
table ResizeBilinearLayer {
    base:LayerBase;
    descriptor:ResizeBilinearDescriptor;
}

table ResizeBilinearDescriptor {
    targetWidth:uint;
    targetHeight:uint;
    dataLayout:DataLayout;
    alignCorners:bool;
    halfPixelCenters:bool;
}

table SliceLayer {
    base:LayerBase;
    descriptor:SliceDescriptor;
}

table SliceDescriptor {
    begin:[uint];
    size:[uint];
}

table StridedSliceLayer {
    base:LayerBase;
    descriptor:StridedSliceDescriptor;
}

table StridedSliceDescriptor {
    begin:[int];
    end:[int];
    stride:[int];
    beginMask:int;
    endMask:int;
    shrinkAxisMask:int;
    ellipsisMask:int;
    newAxisMask:int;
    dataLayout:DataLayout;
}

table ConcatLayer {
    base:LayerBase;
    descriptor:OriginsDescriptor;
}

/// @deprecated Use ConcatLayer instead
table MergerLayer {
    base:LayerBase;
    descriptor:OriginsDescriptor;
}

table UintVector {
   data:[uint];
}

table OriginsDescriptor {
   concatAxis:uint;
   numViews:uint;
   numDimensions:uint;
   viewOrigins:[UintVector];
}

table ViewsDescriptor {
   origins:OriginsDescriptor;
   viewSizes:[UintVector];
}

table SplitterLayer {
   base:LayerBase;
   descriptor:ViewsDescriptor;
}

table DetectionPostProcessLayer {
    base:LayerBase;
    descriptor:DetectionPostProcessDescriptor;
    anchors:ConstTensor;
}

table DetectionPostProcessDescriptor {
    maxDetections:uint;
    maxClassesPerDetection:uint;
    detectionsPerClass:uint;
    nmsScoreThreshold:float;
    nmsIouThreshold:float;
    numClasses:uint;
    useRegularNms:bool;
    scaleX:float;
    scaleY:float;
    scaleW:float;
    scaleH:float;
}

table LstmInputParams {
    inputToForgetWeights:ConstTensor;
    inputToCellWeights:ConstTensor;
    inputToOutputWeights:ConstTensor;
    recurrentToForgetWeights:ConstTensor;
    recurrentToCellWeights:ConstTensor;
    recurrentToOutputWeights:ConstTensor;
    forgetGateBias:ConstTensor;
    cellBias:ConstTensor;
    outputGateBias:ConstTensor;

    inputToInputWeights:ConstTensor;
    recurrentToInputWeights:ConstTensor;
    cellToInputWeights:ConstTensor;
    inputGateBias:ConstTensor;

    projectionWeights:ConstTensor;
    projectionBias:ConstTensor;

    cellToForgetWeights:ConstTensor;
    cellToOutputWeights:ConstTensor;

    inputLayerNormWeights:ConstTensor;
    forgetLayerNormWeights:ConstTensor;
    cellLayerNormWeights:ConstTensor;
    outputLayerNormWeights:ConstTensor;
}

table LstmDescriptor {
    activationFunc:uint;
    clippingThresCell:float;
    clippingThresProj:float;
    cifgEnabled:bool = true;
    peepholeEnabled:bool = false;
    projectionEnabled:bool = false;
    layerNormEnabled:bool = false;
}

table LstmLayer {
    base:LayerBase;
    descriptor:LstmDescriptor;
    inputParams:LstmInputParams;
}

table QLstmInputParams {
    // Mandatory
    inputToForgetWeights:ConstTensor;
    inputToCellWeights:ConstTensor;
    inputToOutputWeights:ConstTensor;

    recurrentToForgetWeights:ConstTensor;
    recurrentToCellWeights:ConstTensor;
    recurrentToOutputWeights:ConstTensor;

    forgetGateBias:ConstTensor;
    cellBias:ConstTensor;
    outputGateBias:ConstTensor;

    // CIFG
    inputToInputWeights:ConstTensor;
    recurrentToInputWeights:ConstTensor;
    inputGateBias:ConstTensor;

    // Projection
    projectionWeights:ConstTensor;
    projectionBias:ConstTensor;

    // Peephole
    cellToInputWeights:ConstTensor;
    cellToForgetWeights:ConstTensor;
    cellToOutputWeights:ConstTensor;

    // Layer norm
    inputLayerNormWeights:ConstTensor;
    forgetLayerNormWeights:ConstTensor;
    cellLayerNormWeights:ConstTensor;
    outputLayerNormWeights:ConstTensor;
}

table QLstmDescriptor {
    cifgEnabled:bool       = true;
    peepholeEnabled:bool   = false;
    projectionEnabled:bool = false;
    layerNormEnabled:bool  = false;

    cellClip:float;
    projectionClip:float;

    inputIntermediateScale:float;
    forgetIntermediateScale:float;
    cellIntermediateScale:float;
    outputIntermediateScale:float;

    hiddenStateZeroPoint:int;
    hiddenStateScale:float;
}

table QLstmLayer {
    base:LayerBase;
    descriptor:QLstmDescriptor;
    inputParams:QLstmInputParams;
}

table QuantizedLstmInputParams {
    inputToInputWeights:ConstTensor;
    inputToForgetWeights:ConstTensor;
    inputToCellWeights:ConstTensor;
    inputToOutputWeights:ConstTensor;

    recurrentToInputWeights:ConstTensor;
    recurrentToForgetWeights:ConstTensor;
    recurrentToCellWeights:ConstTensor;
    recurrentToOutputWeights:ConstTensor;

    inputGateBias:ConstTensor;
    forgetGateBias:ConstTensor;
    cellBias:ConstTensor;
    outputGateBias:ConstTensor;
}

table QuantizedLstmLayer {
    base:LayerBase;
    inputParams:QuantizedLstmInputParams;
}

table DequantizeLayer {
    base:LayerBase;
}

table MergeLayer {
    base:LayerBase;
}

table SwitchLayer {
    base:LayerBase;
}

table PreluLayer {
    base:LayerBase;
}

table TransposeConvolution2dLayer {
    base:LayerBase;
    descriptor:TransposeConvolution2dDescriptor;
    weights:ConstTensor;
    biases:ConstTensor;
}

table TransposeConvolution2dDescriptor {
    padLeft:uint;
    padRight:uint;
    padTop:uint;
    padBottom:uint;
    strideX:uint;
    strideY:uint;
    biasEnabled:bool = false;
    dataLayout:DataLayout = NCHW;
}

table TransposeLayer {
    base:LayerBase;
    descriptor:TransposeDescriptor;
}

table TransposeDescriptor {
    dimMappings:[uint];
}

table ResizeLayer {
    base:LayerBase;
    descriptor:ResizeDescriptor;
}

table ResizeDescriptor {
    targetHeight:uint;
    targetWidth:uint;
    method:ResizeMethod = NearestNeighbor;
    dataLayout:DataLayout;
    alignCorners:bool;
    halfPixelCenters:bool;
}

table StackLayer {
    base:LayerBase;
    descriptor:StackDescriptor;
}

table StackDescriptor {
    axis:uint;
    numInputs:uint;
    inputShape:[uint];
}

table StandInDescriptor {
    numInputs:uint;
    numOutputs:uint;
}

table StandInLayer {
    base:LayerBase;
    descriptor:StandInDescriptor;
}

table RankLayer {
    base:LayerBase;
}

table ReduceLayer {
    base:LayerBase;
    descriptor:ReduceDescriptor;
}

table ReduceDescriptor {
    keepDims:bool = false;
    axis:[uint];
    reduceOperation:ReduceOperation = Sum;
}

union Layer {
    ActivationLayer,
    AdditionLayer,
    BatchToSpaceNdLayer,
    BatchNormalizationLayer,
    ConstantLayer,
    Convolution2dLayer,
    DepthwiseConvolution2dLayer,
    FullyConnectedLayer,
    InputLayer,
    MultiplicationLayer,
    OutputLayer,
    PermuteLayer,
    Pooling2dLayer,
    ReshapeLayer,
    SoftmaxLayer,
    SpaceToBatchNdLayer,
    DivisionLayer,
    MinimumLayer,
    EqualLayer,
    MaximumLayer,
    NormalizationLayer,
    PadLayer,
    RsqrtLayer,
    FloorLayer,
    GreaterLayer,
    ResizeBilinearLayer,
    SubtractionLayer,
    StridedSliceLayer,
    GatherLayer,
    MeanLayer,
    MergerLayer,
    L2NormalizationLayer,
    SplitterLayer,
    DetectionPostProcessLayer,
    LstmLayer,
    QuantizedLstmLayer,
    QuantizeLayer,
    DequantizeLayer,
    MergeLayer,
    SwitchLayer,
    ConcatLayer,
    SpaceToDepthLayer,
    PreluLayer,
    TransposeConvolution2dLayer,
    ResizeLayer,
    StackLayer,
    AbsLayer,
    ArgMinMaxLayer,
    SliceLayer,
    DepthToSpaceLayer,
    InstanceNormalizationLayer,
    LogSoftmaxLayer,
    ComparisonLayer,
    StandInLayer,
    ElementwiseUnaryLayer,
    TransposeLayer,
    QLstmLayer,
    FillLayer,
    RankLayer,
    LogicalBinaryLayer,
    ReduceLayer,
    CastLayer,
    ShapeLayer
}

table AnyLayer {
    layer:Layer;
}

table FeatureCompatibilityVersions {
  bindingIdsScheme:uint = 0;
  weightsLayoutScheme:uint = 0;
}

// Root type for serialized data is the graph of the network
table SerializedGraph {
    layers:[AnyLayer];
    inputIds:[int];
    outputIds:[int];
    featureVersions:FeatureCompatibilityVersions;
}

root_type SerializedGraph;
