/// Copyright (c) 2021 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
- BatchToSpaceNd
- BatchNormalization
- Cast
- ChannelShuffle
- Comparison
- Concat
- Constant
- Convolution2d
- Convolution3d
- DepthToSpace
- DepthwiseConvolution2d
- Dequantize
- DetectionPostProcess
- Division
- ElementwiseUnary
- Fill
- Floor
- FullyConnected
- Gather
- 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
- 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
- BatchToSpaceNd
- BatchNormalization
- Cast
- ChannelShuffle
- Concat
- Comparison
- Constant
- Convolution2d
- DepthToSpace
- DepthwiseConvolution2d
- Dequantize
- DetectionPostProcess
- Division
- ElementwiseUnary
- Fill
- Floor
- FullyConnected
- Gather
- Input
- InstanceNormalization
- L2Normalization
- Logical
- LogSoftmax
- Lstm
- Maximum
- Mean
- Merge
- Minimum
- Multiplication
- Normalization
- Output
- Pad
- Permute
- Pooling2d
- Prelu
- Quantize
- QLstm
- QuantizedLstm
- Rank
- Reduce
- Reshape
- Resize
- ResizeBilinear
- 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

**/
}