/*
 * Copyright (c) 2017-2018 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.
 */
#ifndef __ARM_COMPUTE_TEST_SHAPE_DATASETS_H__
#define __ARM_COMPUTE_TEST_SHAPE_DATASETS_H__

#include "arm_compute/core/TensorShape.h"
#include "tests/framework/datasets/Datasets.h"

#include <type_traits>

namespace arm_compute
{
namespace test
{
namespace datasets
{
/** Parent type for all for shape datasets. */
using ShapeDataset = framework::dataset::ContainerDataset<std::vector<TensorShape>>;

/** Data set containing small 1D tensor shapes. */
class Small1DShapes final : public ShapeDataset
{
public:
    Small1DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 256U }
    })
    {
    }
};

/** Data set containing tiny 2D tensor shapes. */
class Tiny2DShapes final : public ShapeDataset
{
public:
    Tiny2DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 7U, 7U },
                     TensorShape{ 11U, 13U },
    })
    {
    }
};
/** Data set containing small 2D tensor shapes. */
class Small2DShapes final : public ShapeDataset
{
public:
    Small2DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 7U, 7U },
                     TensorShape{ 27U, 13U },
                     TensorShape{ 128U, 64U }
    })
    {
    }
};

/** Data set containing tiny 3D tensor shapes. */
class Tiny3DShapes final : public ShapeDataset
{
public:
    Tiny3DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 7U, 7U, 5U },
                     TensorShape{ 23U, 13U, 9U },
    })
    {
    }
};

/** Data set containing small 3D tensor shapes. */
class Small3DShapes final : public ShapeDataset
{
public:
    Small3DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 1U, 7U, 7U },
                     TensorShape{ 7U, 7U, 5U },
                     TensorShape{ 27U, 13U, 37U },
                     TensorShape{ 128U, 64U, 21U }
    })
    {
    }
};

/** Data set containing tiny 4D tensor shapes. */
class Tiny4DShapes final : public ShapeDataset
{
public:
    Tiny4DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 7U, 7U, 5U, 3U },
                     TensorShape{ 17U, 13U, 7U, 2U },
    })
    {
    }
};
/** Data set containing small 4D tensor shapes. */
class Small4DShapes final : public ShapeDataset
{
public:
    Small4DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 1U, 7U, 1U, 3U },
                     TensorShape{ 7U, 7U, 5U, 3U },
                     TensorShape{ 27U, 13U, 37U, 2U },
                     TensorShape{ 128U, 64U, 21U, 3U }
    })
    {
    }
};

/** Data set containing small tensor shapes. */
class TinyShapes final : public ShapeDataset
{
public:
    TinyShapes()
        : ShapeDataset("Shape",
    {
        // Batch size 1
        TensorShape{ 9U, 9U },
                     TensorShape{ 27U, 13U, 2U },
    })
    {
    }
};
/** Data set containing small tensor shapes. */
class SmallShapes final : public ShapeDataset
{
public:
    SmallShapes()
        : ShapeDataset("Shape",
    {
        // Batch size 1
        TensorShape{ 9U, 9U },
                     TensorShape{ 27U, 13U, 2U },
                     TensorShape{ 128U, 64U, 1U, 3U },
                     // Batch size 4
                     TensorShape{ 9U, 9U, 3U, 4U },
                     TensorShape{ 27U, 13U, 2U, 4U },
                     // Arbitrary batch size
                     TensorShape{ 9U, 9U, 3U, 5U }
    })
    {
    }
};

/** Data set containing pairs of small tensor shapes that are broadcast compatible. */
class SmallShapesBroadcast final : public framework::dataset::ZipDataset<ShapeDataset, ShapeDataset>
{
public:
    SmallShapesBroadcast()
        : ZipDataset<ShapeDataset, ShapeDataset>(
              ShapeDataset("Shape0",
    {
        TensorShape{ 9U, 9U },
                     TensorShape{ 27U, 13U, 2U },
                     TensorShape{ 128U, 1U, 5U, 3U },
                     TensorShape{ 9U, 9U, 3U, 4U },
                     TensorShape{ 27U, 13U, 2U, 4U },
                     TensorShape{ 1U, 1U, 1U, 5U }
    }),
    ShapeDataset("Shape1",
    {
        TensorShape{ 9U, 1U, 2U },
        TensorShape{ 1U, 13U, 2U },
        TensorShape{ 128U, 64U, 1U, 3U },
        TensorShape{ 9U, 1U, 3U },
        TensorShape{ 1U },
        TensorShape{ 9U, 9U, 3U, 5U }
    }))
    {
    }
};

/** Data set containing medium tensor shapes. */
class MediumShapes final : public ShapeDataset
{
public:
    MediumShapes()
        : ShapeDataset("Shape",
    {
        // Batch size 1
        TensorShape{ 37U, 37U },
                     TensorShape{ 27U, 33U, 2U },
                     TensorShape{ 128U, 64U, 1U, 3U },
                     // Batch size 4
                     TensorShape{ 37U, 37U, 3U, 4U },
                     TensorShape{ 27U, 33U, 2U, 4U },
                     // Arbitrary batch size
                     TensorShape{ 37U, 37U, 3U, 5U }
    })
    {
    }
};

/** Data set containing medium 2D tensor shapes. */
class Medium2DShapes final : public ShapeDataset
{
public:
    Medium2DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 42U, 37U },
                     TensorShape{ 57U, 60U },
                     TensorShape{ 128U, 64U },
                     TensorShape{ 83U, 72U },
                     TensorShape{ 40U, 40U }
    })
    {
    }
};

/** Data set containing medium 3D tensor shapes. */
class Medium3DShapes final : public ShapeDataset
{
public:
    Medium3DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 42U, 37U, 8U },
                     TensorShape{ 57U, 60U, 13U },
                     TensorShape{ 128U, 64U, 21U },
                     TensorShape{ 83U, 72U, 14U }
    })
    {
    }
};

/** Data set containing medium 4D tensor shapes. */
class Medium4DShapes final : public ShapeDataset
{
public:
    Medium4DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 42U, 37U, 8U, 15U },
                     TensorShape{ 57U, 60U, 13U, 8U },
                     TensorShape{ 128U, 64U, 21U, 13U },
                     TensorShape{ 83U, 72U, 14U, 5U }
    })
    {
    }
};

/** Data set containing large tensor shapes. */
class LargeShapes final : public ShapeDataset
{
public:
    LargeShapes()
        : ShapeDataset("Shape",
    {
        // Batch size 1
        TensorShape{ 1921U, 1083U },
                     TensorShape{ 641U, 485U, 2U, 3U },
                     // Batch size 4
                     TensorShape{ 799U, 595U, 1U, 4U },
    })
    {
    }
};

/** Data set containing pairs of large tensor shapes that are broadcast compatible. */
class LargeShapesBroadcast final : public framework::dataset::ZipDataset<ShapeDataset, ShapeDataset>
{
public:
    LargeShapesBroadcast()
        : ZipDataset<ShapeDataset, ShapeDataset>(
              ShapeDataset("Shape0",
    {
        TensorShape{ 1921U, 541U },
                     TensorShape{ 1U, 485U, 2U, 3U },
                     TensorShape{ 4159U, 1U },
                     TensorShape{ 799U }
    }),
    ShapeDataset("Shape1",
    {
        TensorShape{ 1921U, 1U, 2U },
        TensorShape{ 641U, 1U, 2U, 3U },
        TensorShape{ 1U, 127U, 25U },
        TensorShape{ 799U, 595U, 1U, 4U }
    }))
    {
    }
};

/** Data set containing large 1D tensor shapes. */
class Large1DShapes final : public ShapeDataset
{
public:
    Large1DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 1921U },
                     TensorShape{ 1245U },
                     TensorShape{ 4160U }
    })
    {
    }
};

/** Data set containing large 2D tensor shapes. */
class Large2DShapes final : public ShapeDataset
{
public:
    Large2DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 1920U, 1080U },
                     TensorShape{ 1245U, 652U },
                     TensorShape{ 4160U, 3120U }
    })
    {
    }
};

/** Data set containing large 3D tensor shapes. */
class Large3DShapes final : public ShapeDataset
{
public:
    Large3DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 320U, 240U, 3U },
                     TensorShape{ 383U, 653U, 2U },
                     TensorShape{ 721U, 123U, 13U }
    })
    {
    }
};

/** Data set containing large 4D tensor shapes. */
class Large4DShapes final : public ShapeDataset
{
public:
    Large4DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 320U, 123U, 3U, 3U },
                     TensorShape{ 383U, 413U, 2U, 3U },
                     TensorShape{ 517U, 123U, 13U, 2U }
    })
    {
    }
};

/** Data set containing small 3x3 tensor shapes. */
class Small3x3Shapes final : public ShapeDataset
{
public:
    Small3x3Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 3U, 3U, 7U, 4U },
                     TensorShape{ 3U, 3U, 4U, 13U },
                     TensorShape{ 3U, 3U, 9U, 2U },
                     TensorShape{ 3U, 3U, 3U, 5U },
    })
    {
    }
};

/** Data set containing small 3x1 tensor shapes. */
class Small3x1Shapes final : public ShapeDataset
{
public:
    Small3x1Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 3U, 1U, 7U, 4U },
                     TensorShape{ 3U, 1U, 4U, 13U },
                     TensorShape{ 3U, 1U, 9U, 2U },
                     TensorShape{ 3U, 1U, 3U, 5U },
    })
    {
    }
};

/** Data set containing small 1x3 tensor shapes. */
class Small1x3Shapes final : public ShapeDataset
{
public:
    Small1x3Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 1U, 3U, 7U, 4U },
                     TensorShape{ 1U, 3U, 4U, 13U },
                     TensorShape{ 1U, 3U, 9U, 2U },
                     TensorShape{ 1U, 3U, 3U, 5U },
    })
    {
    }
};

/** Data set containing large 3x3 tensor shapes. */
class Large3x3Shapes final : public ShapeDataset
{
public:
    Large3x3Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 3U, 3U, 32U, 64U },
                     TensorShape{ 3U, 3U, 51U, 13U },
                     TensorShape{ 3U, 3U, 53U, 47U },
                     TensorShape{ 3U, 3U, 128U, 384U },
    })
    {
    }
};

/** Data set containing large 3x1 tensor shapes. */
class Large3x1Shapes final : public ShapeDataset
{
public:
    Large3x1Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 3U, 1U, 32U, 64U },
                     TensorShape{ 3U, 1U, 51U, 13U },
                     TensorShape{ 3U, 1U, 53U, 47U },
                     TensorShape{ 3U, 1U, 128U, 384U },
    })
    {
    }
};

/** Data set containing large 1x3 tensor shapes. */
class Large1x3Shapes final : public ShapeDataset
{
public:
    Large1x3Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 1U, 3U, 32U, 64U },
                     TensorShape{ 1U, 3U, 51U, 13U },
                     TensorShape{ 1U, 3U, 53U, 47U },
                     TensorShape{ 1U, 3U, 128U, 384U },
    })
    {
    }
};

/** Data set containing small 5x5 tensor shapes. */
class Small5x5Shapes final : public ShapeDataset
{
public:
    Small5x5Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 5U, 5U, 7U, 4U },
                     TensorShape{ 5U, 5U, 4U, 13U },
                     TensorShape{ 5U, 5U, 9U, 2U },
                     TensorShape{ 5U, 5U, 3U, 5U },
    })
    {
    }
};

/** Data set containing large 5x5 tensor shapes. */
class Large5x5Shapes final : public ShapeDataset
{
public:
    Large5x5Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 5U, 5U, 32U, 64U },
                     TensorShape{ 5U, 5U, 51U, 13U },
                     TensorShape{ 5U, 5U, 53U, 47U },
                     TensorShape{ 5U, 5U, 128U, 384U },
    })
    {
    }
};

/** Data set containing small tensor shapes for deconvolution. */
class SmallDeconvolutionShapes final : public ShapeDataset
{
public:
    SmallDeconvolutionShapes()
        : ShapeDataset("InputShape",
    {
        TensorShape{ 5U, 4U, 3U, 2U },
                     TensorShape{ 5U, 5U, 3U },
                     TensorShape{ 11U, 13U, 4U, 3U }
    })
    {
    }
};

/** Data set containing tiny tensor shapes for direct convolution. */
class TinyDirectConvolutionShapes final : public ShapeDataset
{
public:
    TinyDirectConvolutionShapes()
        : ShapeDataset("InputShape",
    {
        // Batch size 1
        TensorShape{ 11U, 13U, 3U },
                     TensorShape{ 7U, 27U, 3U }
    })
    {
    }
};
/** Data set containing small tensor shapes for direct convolution. */
class SmallDirectConvolutionShapes final : public ShapeDataset
{
public:
    SmallDirectConvolutionShapes()
        : ShapeDataset("InputShape",
    {
        // Batch size 1
        TensorShape{ 35U, 35U, 3U },
                     TensorShape{ 32U, 37U, 3U },
                     // Batch size 4
                     TensorShape{ 32U, 37U, 3U, 4U },
                     // Batch size 8
                     TensorShape{ 32U, 37U, 3U, 8U },
                     TensorShape{ 33U, 35U, 8U, 8U }
    })
    {
    }
};

/** Data set containing small tensor shapes for direct convolution. */
class SmallDirectConvolutionTensorShiftShapes final : public ShapeDataset
{
public:
    SmallDirectConvolutionTensorShiftShapes()
        : ShapeDataset("InputShape",
    {
        // Batch size 1
        TensorShape{ 35U, 35U, 3U },
                     TensorShape{ 32U, 37U, 3U },
                     // Batch size 4
                     TensorShape{ 32U, 37U, 3U, 4U },
                     // Batch size 8
                     TensorShape{ 32U, 37U, 3U, 8U },
                     TensorShape{ 33U, 35U, 3U, 8U },
                     // Arbitrary batch size
                     TensorShape{ 32U, 37U, 3U, 8U }
    })
    {
    }
};

/** Data set containing 2D tensor shapes for DepthConcatenateLayer. */
class DepthConcatenateLayerShapes final : public ShapeDataset
{
public:
    DepthConcatenateLayerShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 322U, 243U },
                     TensorShape{ 463U, 879U },
                     TensorShape{ 416U, 651U }
    })
    {
    }
};

/** Data set containing tensor shapes for WidthConcatenateLayer. */
class WidthConcatenateLayerShapes final : public ShapeDataset
{
public:
    WidthConcatenateLayerShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 232U, 65U, 3U },
                     TensorShape{ 432U, 65U, 3U },
                     TensorShape{ 124U, 65U, 3U }
    })
    {
    }
};

/** Data set containing global pooling tensor shapes. */
class GlobalPoolingShapes final : public ShapeDataset
{
public:
    GlobalPoolingShapes()
        : ShapeDataset("Shape",
    {
        // Batch size 1
        TensorShape{ 9U, 9U },
                     TensorShape{ 13U, 13U, 2U },
                     TensorShape{ 27U, 27U, 1U, 3U },
                     // Batch size 4
                     TensorShape{ 31U, 31U, 3U, 4U },
                     TensorShape{ 34U, 34U, 2U, 4U }
    })
    {
    }
};
/** Data set containing tiny softmax layer shapes. */
class SoftmaxLayerTinyShapes final : public ShapeDataset
{
public:
    SoftmaxLayerTinyShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 9U, 9U },
                     TensorShape{ 128U, 10U },
    })
    {
    }
};

/** Data set containing small softmax layer shapes. */
class SoftmaxLayerSmallShapes final : public ShapeDataset
{
public:
    SoftmaxLayerSmallShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 9U, 9U },
                     TensorShape{ 256U, 10U },
                     TensorShape{ 353U, 8U },
                     TensorShape{ 781U, 5U },
    })
    {
    }
};

/** Data set containing large softmax layer shapes. */
class SoftmaxLayerLargeShapes final : public ShapeDataset
{
public:
    SoftmaxLayerLargeShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 1000U, 10U },
                     TensorShape{ 3989U, 10U },
                     TensorShape{ 7339U, 11U },
    })
    {
    }
};

/** Data set containing 2D tensor shapes relative to an image size. */
class SmallImageShapes final : public ShapeDataset
{
public:
    SmallImageShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 640U, 480U },
                     TensorShape{ 800U, 600U },
                     TensorShape{ 1200U, 800U }
    })
    {
    }
};

/** Data set containing 2D tensor shapes relative to an image size. */
class LargeImageShapes final : public ShapeDataset
{
public:
    LargeImageShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 1920U, 1080U },
                     TensorShape{ 2560U, 1536U },
                     TensorShape{ 3584U, 2048U }
    })
    {
    }
};
} // namespace datasets
} // namespace test
} // namespace arm_compute
#endif /* __ARM_COMPUTE_TEST_SHAPE_DATASETS_H__ */
