///
/// Copyright (c) 2021-2022 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.
///

namespace arm_compute
{
/**
@page data_layout_support Data Layout Support

@section data_layout_support_supported_data_layout Supported Data Layouts

With regard to convolution layers, Compute Library supports the following data layouts for input and output tensors:

- NHWC: The native layout of Compute Library that delivers the best performance where channels are in the fastest changing dimension
- NCHW: Legacy layout where width is in the fastest changing dimension
- NDHWC: New data layout for supporting 3D operators

, where N = batch, C = channel, H = height, W = width, D = depth.

Note: The right-most letter represents the fastest changing dimension, which is the "lower dimension".
The corresponding @ref TensorShape for each of the data layout would be initialized as:

- NHWC: TensorShape(C, W, H, N)
- NCHW: TensorShape(W, H, C, N)
- NDHWC: TensorShape(C, W, H, D, N)

For 2d Conv, the weight / filter tensors are arranged in 4 dimensions: Height (H), Width (W), Input channel (I), Output channel (O)
For 3d Conv, the additional Depth dimension means exactly the same as the Depth in the input / output layout.

The layout of weight tensors change with that of the input / output tensors, and the dimensions can be mapped as:

- Weight Height -> Height
- Weight Width -> Width
- Weight Input channel -> Channel
- Weight Output channel -> Batch

Therefore, the corresponding weight layouts for each input / output layout are:

- (input/output tensor) NHWC: (weight tensor) OHWI
- (input/output tensor) NCHW: (weight tensor) OIHW
- (input/output tensor) NDHWC: (weight tensor) ODHWI

*/
} // namespace
