/// 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
- 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
- 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
- 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
- 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

**/
}