/// Copyright (c) 2021-2023 ARM Limited and Contributors. All rights reserved.
///
/// SPDX-License-Identifier: MIT
///

namespace armnn
{
/**
@page serializer Serializer
@tableofcontents

The `armnnSerializer` is a library for serializing an Arm NN network to a stream.

@section serializersupport Supported Layers

This reference guide provides a list of layers which can be serialized by the Arm NN SDK.

@subsection serializersupportflully Fully supported

The Arm NN SDK Serializer currently supports the following layers:

- Activation
- Addition
- ArgMinMax
- BatchMatMul
- BatchToSpaceNd
- BatchNormalization
- Cast
- ChannelShuffle
- Comparison
- Concat
- Constant
- Convolution2d
- Convolution3d
- DepthToSpace
- DepthwiseConvolution2d
- Dequantize
- DetectionPostProcess
- Division
- ElementwiseUnary
- Fill
- Floor
- FullyConnected
- Gather
- GatherNd
- Input
- InstanceNormalization
- L2Normalization
- Logical
- LogSoftmax
- Lstm
- Maximum
- Mean
- Merge
- Minimum
- Multiplication
- Normalization
- Output
- Pad (Constant, Symmetric, Reflect)
- Permute
- Pooling2d
- Pooling3d
- Prelu
- QLstm
- Quantize
- QuantizedLstm
- Rank
- Reduce
- Reshape
- Resize
- ReverseV2
- Shape
- Slice
- Softmax
- SpaceToBatchNd
- SpaceToDepth
- Splitter
- Stack
- StandIn
- StridedSlice
- Subtraction
- Switch
- Transpose
- TransposeConvolution2d
- UnidirectionalSequenceLstm

More machine learning layers will be supported in future releases.

@subsection serializersupportdeprecated Deprecated layers

Some layers have been deprecated and replaced by others layers. In order to maintain backward compatibility, serializations of these deprecated layers will deserialize to the layers that have replaced them, as follows:

- Abs will deserialize as ElementwiseUnary
- Equal will deserialize as Comparison
- Greater will deserialize as Comparison
- Merger will deserialize as Concat
- ResizeBilinear will deserialize as Resize
- Rsqrt will deserialize as ElementwiseUnary
<br/><br/><br/><br/>

@page deserializer Deserializer
@tableofcontents

The `armnnDeserializer` is a library for loading neural networks defined by Arm NN FlatBuffers files
into the Arm NN runtime.

@section deserializersupport Supported Layers

This reference guide provides a list of layers which can be deserialized by the Arm NN SDK.

@subsection deserializersupportfully Fully supported

The Arm NN SDK Deserialize parser currently supports the following layers:

- Abs
- Activation
- Addition
- ArgMinMax
- BatchMatMul
- BatchToSpaceNd
- BatchNormalization
- Cast
- ChannelShuffle
- Concat
- Comparison
- Constant
- Convolution2d
- DepthToSpace
- DepthwiseConvolution2d
- Dequantize
- DetectionPostProcess
- Division
- ElementwiseUnary
- Fill
- Floor
- FullyConnected
- Gather
- GatherNd
- Input
- InstanceNormalization
- L2Normalization
- Logical
- LogSoftmax
- Lstm
- Maximum
- Mean
- Merge
- Minimum
- Multiplication
- Normalization
- Output
- Pad
- Permute
- Pooling2d
- Pooling3d
- Prelu
- Quantize
- QLstm
- QuantizedLstm
- Rank
- Reduce
- Reshape
- Resize
- ResizeBilinear
- ReverseV2
- Slice
- Softmax
- SpaceToBatchNd
- SpaceToDepth
- Splitter
- Stack
- StandIn
- StridedSlice
- Subtraction
- Switch
- Transpose
- TransposeConvolution2d
- UnidirectionalSequenceLstm

More machine learning layers will be supported in future releases.

@subsection deserializersupportdeprecated Deprecated layers

Some layers have been deprecated and replaced by others layers. In order to maintain backward compatibility, serializations of these deprecated layers will deserialize to the layers that have replaced them, as follows:

- Equal will deserialize as Comparison
- Merger will deserialize as Concat
- Greater will deserialize as Comparison
- ResizeBilinear will deserialize as Resize

**/
}
