
// Copyright (c) 2020-2022, ARM Limited.
//
//    Licensed under the Apache License, Version 2.0 (the "License");
//    you may not use this file except in compliance with the License.
//    You may obtain a copy of the License at
//
//         http://www.apache.org/licenses/LICENSE-2.0
//
//    Unless required by applicable law or agreed to in writing, software
//    distributed under the License is distributed on an "AS IS" BASIS,
//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//    See the License for the specific language governing permissions and
//    limitations under the License.

#ifndef OPS_OP_FACTORY_H
#define OPS_OP_FACTORY_H

#include "attribute.h"
#include "graph_node.h"
#include "template_types.h"
#include "tosa_serialization_handler.h"

#define DEF_FACTORY_ONE_RANK_ONE_TYPE(OP, RANK, DTYPE)                                                                 \
    case RANK:                                                                                                         \
        return new OP<RANK, DType_##DTYPE>(sgt, attribute, id);

#define DEF_FACTORY_ONE_RANK_TWO_TYPE(OP, RANK, DTYPE1, DTYPE2)                                                        \
    case RANK:                                                                                                         \
        return new OP<RANK, DType_##DTYPE1, DType_##DTYPE2>(sgt, attribute, id);

#define DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, RANK1, RANK2, DTYPE)                                                         \
    case RANK2:                                                                                                        \
        return new OP<RANK1, RANK2, DType_##DTYPE>(sgt, attribute, id);

#define DEF_FACTORY_TWO_RANK_TWO_TYPE(OP, RANK1, RANK2, DTYPE1, DTYPE2)                                                \
    case RANK2:                                                                                                        \
        return new OP<RANK1, RANK2, DType_##DTYPE1, DType_##DTYPE2>(sgt, attribute, id);

#define DEF_FACTORY_ONE_RANK_0_6(OP)                                                                                   \
    switch (inputRank)                                                                                                 \
    {                                                                                                                  \
        case 0:                                                                                                        \
            return new OP<0>(sgt, attribute, id);                                                                      \
        case 1:                                                                                                        \
            return new OP<1>(sgt, attribute, id);                                                                      \
        case 2:                                                                                                        \
            return new OP<2>(sgt, attribute, id);                                                                      \
        case 3:                                                                                                        \
            return new OP<3>(sgt, attribute, id);                                                                      \
        case 4:                                                                                                        \
            return new OP<4>(sgt, attribute, id);                                                                      \
        case 5:                                                                                                        \
            return new OP<5>(sgt, attribute, id);                                                                      \
        case 6:                                                                                                        \
            return new OP<6>(sgt, attribute, id);                                                                      \
    }

#define DEF_FACTORY_ONE_TYPE(OP, DTYPE)                                                                                \
    if (inputDType == DType_##DTYPE)                                                                                   \
    {                                                                                                                  \
        return new OP<DType_##DTYPE>(sgt, attribute, id);                                                              \
    }

#define DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OP, ATTR_NAME, DTYPE, ACCUM_DTYPE)                                              \
    if (inputDType == DType_##DTYPE && ACCUM_FROM_ATTRIBUTE(ATTR_NAME) == DType_##ACCUM_DTYPE)                         \
    {                                                                                                                  \
        return new OP<DType_##DTYPE, DType_##ACCUM_DTYPE>(sgt, attribute, id);                                         \
    }

#define DEF_FACTORY_TWO_TYPE(OP, DTYPE1, DTYPE2)                                                                       \
    if (inputDType == DType_##DTYPE1 && weightDType == DType_##DTYPE2)                                                 \
    {                                                                                                                  \
        return new OP<DType_##DTYPE1, DType_##DTYPE2>(sgt, attribute, id);                                             \
    }

#define DEF_FACTORY_TWO_TYPE_IN_OUT(OP, DTYPE1, DTYPE2)                                                                \
    if (inputDType == DType_##DTYPE1 && outputDType == DType_##DTYPE2)                                                 \
    {                                                                                                                  \
        return new OP<DType_##DTYPE1, DType_##DTYPE2>(sgt, attribute, id);                                             \
    }

#define DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OP, ATTR_NAME, DTYPE1, DTYPE2, ACCUM_DTYPE)                                     \
    if (inputDType == DType_##DTYPE1 && weightDType == DType_##DTYPE2                                                  \
            && ACCUM_FROM_ATTRIBUTE(ATTR_NAME) == DType_##ACCUM_DTYPE)                                                 \
    {                                                                                                                  \
        return new OP<DType_##DTYPE1, DType_##DTYPE2, DType_##ACCUM_DTYPE>(sgt, attribute, id);                        \
    }                                                                                                                  \

#define DEF_FACTORY_THREE_TYPE(OP, DTYPE1, DTYPE2, DTYPE3)                                                             \
    if (inputDType == DType_##DTYPE1 && weightDType == DType_##DTYPE2 && outputDType == DType_##DTYPE3)                \
    {                                                                                                                  \
        return new OP<DType_##DTYPE1, DType_##DTYPE2, DType_##DTYPE3>(sgt, attribute, id);                             \
    }

// Statement-expression to evaluate accumulate attribute in-place
#define ACCUM_FROM_ATTRIBUTE(ATTRIBUTE_NAME)                                                                           \
    ({                                                                                                                 \
        tosa::DType accumDType = tosa::DType_UNKNOWN;                                                                  \
        if (auto p = dynamic_cast<tosa::Tosa##ATTRIBUTE_NAME##Attribute*>(attribute))                                  \
        {                                                                                                              \
            auto attr = new tosa::Tosa##ATTRIBUTE_NAME##Attribute(p);                                                  \
            ASSERT_MEM(attr);                                                                                          \
            accumDType = tosa::EnumValuesDType()[attr->accum_dtype()];                                                 \
        }                                                                                                              \
        else                                                                                                           \
        {                                                                                                              \
            FATAL_ERROR("Can't initialize Tosa" #ATTRIBUTE_NAME "Attribute.\nPre-initialization "                      \
                        "of this attribute is required in order to determine the accumulate type.");                   \
        }                                                                                                              \
        accumDType;                                                                                                    \
    })                                                                                                                 \

#define DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OP, DTYPE1, DTYPE2)                                                          \
    if (inputDType == DType_##DTYPE1 && outputDType == DType_##DTYPE2)                                                 \
    {                                                                                                                  \
        return new OP<DType_##DTYPE1, DType_##DTYPE2, int16_t>(sgt, attribute, id);                                    \
    }

#define DEF_FACTORY_TWO_TYPE_RESIZE_FP16(OP, DTYPE1, DTYPE2)                                                           \
    if (inputDType == DType_##DTYPE1 && outputDType == DType_##DTYPE2)                                                 \
    {                                                                                                                  \
        return new OP<DType_##DTYPE1, DType_##DTYPE2, half_float::half>(sgt, attribute, id);                           \
    }

#define DEF_FACTORY_TWO_TYPE_RESIZE_BF16(OP, DTYPE1, DTYPE2)                                                           \
    if (inputDType == DType_##DTYPE1 && outputDType == DType_##DTYPE2)                                                 \
    {                                                                                                                  \
        return new OP<DType_##DTYPE1, DType_##DTYPE2, Eigen::bfloat16>(sgt, attribute, id);                            \
    }

#define DEF_FACTORY_TWO_TYPE_RESIZE_FP32(OP, DTYPE1, DTYPE2)                                                          \
    if (inputDType == DType_##DTYPE1 && outputDType == DType_##DTYPE2)                                                 \
    {                                                                                                                  \
        return new OP<DType_##DTYPE1, DType_##DTYPE2, float>(sgt, attribute, id);                                      \
    }

#define DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OP, DTYPE)                                                               \
    if (inputDType == DType_##DTYPE)                                                                                   \
    {                                                                                                                  \
        switch (inputRank)                                                                                             \
        {                                                                                                              \
            DEF_FACTORY_ONE_RANK_ONE_TYPE(OP, 0, DTYPE)                                                                \
            DEF_FACTORY_ONE_RANK_ONE_TYPE(OP, 1, DTYPE)                                                                \
            DEF_FACTORY_ONE_RANK_ONE_TYPE(OP, 2, DTYPE)                                                                \
            DEF_FACTORY_ONE_RANK_ONE_TYPE(OP, 3, DTYPE)                                                                \
            DEF_FACTORY_ONE_RANK_ONE_TYPE(OP, 4, DTYPE)                                                                \
            DEF_FACTORY_ONE_RANK_ONE_TYPE(OP, 5, DTYPE)                                                                \
            DEF_FACTORY_ONE_RANK_ONE_TYPE(OP, 6, DTYPE)                                                                \
        }                                                                                                              \
    }

#define DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OP, DTYPE)                                                               \
    if (inputDType == DType_##DTYPE)                                                                                   \
    {                                                                                                                  \
        switch (inputRank)                                                                                             \
        {                                                                                                              \
            DEF_FACTORY_ONE_RANK_ONE_TYPE(OP, 1, DTYPE)                                                                \
            DEF_FACTORY_ONE_RANK_ONE_TYPE(OP, 2, DTYPE)                                                                \
            DEF_FACTORY_ONE_RANK_ONE_TYPE(OP, 3, DTYPE)                                                                \
            DEF_FACTORY_ONE_RANK_ONE_TYPE(OP, 4, DTYPE)                                                                \
            DEF_FACTORY_ONE_RANK_ONE_TYPE(OP, 5, DTYPE)                                                                \
            DEF_FACTORY_ONE_RANK_ONE_TYPE(OP, 6, DTYPE)                                                                \
        }                                                                                                              \
    }

#define DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OP, DTYPE1, DTYPE2)                                                      \
    if (inputDType == DType_##DTYPE1 && outputDType == DType_##DTYPE2)                                                 \
    {                                                                                                                  \
        switch (inputRank)                                                                                             \
        {                                                                                                              \
            DEF_FACTORY_ONE_RANK_TWO_TYPE(OP, 0, DTYPE1, DTYPE2)                                                       \
            DEF_FACTORY_ONE_RANK_TWO_TYPE(OP, 1, DTYPE1, DTYPE2)                                                       \
            DEF_FACTORY_ONE_RANK_TWO_TYPE(OP, 2, DTYPE1, DTYPE2)                                                       \
            DEF_FACTORY_ONE_RANK_TWO_TYPE(OP, 3, DTYPE1, DTYPE2)                                                       \
            DEF_FACTORY_ONE_RANK_TWO_TYPE(OP, 4, DTYPE1, DTYPE2)                                                       \
            DEF_FACTORY_ONE_RANK_TWO_TYPE(OP, 5, DTYPE1, DTYPE2)                                                       \
            DEF_FACTORY_ONE_RANK_TWO_TYPE(OP, 6, DTYPE1, DTYPE2)                                                       \
        }                                                                                                              \
    }

#define DEF_FACTORY_RESHAPE(OP, DTYPE)                                                                                 \
    if (inputDType == DType_##DTYPE && outputDType == DType_##DTYPE)                                                   \
    {                                                                                                                  \
        switch (inputRank)                                                                                             \
        {                                                                                                              \
            case 0:                                                                                                    \
            {                                                                                                          \
                switch (outputRank)                                                                                    \
                {                                                                                                      \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 0, 0, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 0, 1, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 0, 2, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 0, 3, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 0, 4, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 0, 5, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 0, 6, DTYPE)                                                     \
                }                                                                                                      \
            }                                                                                                          \
            case 1:                                                                                                    \
            {                                                                                                          \
                switch (outputRank)                                                                                    \
                {                                                                                                      \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 1, 0, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 1, 1, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 1, 2, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 1, 3, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 1, 4, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 1, 5, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 1, 6, DTYPE)                                                     \
                }                                                                                                      \
            }                                                                                                          \
            case 2:                                                                                                    \
            {                                                                                                          \
                switch (outputRank)                                                                                    \
                {                                                                                                      \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 2, 0, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 2, 1, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 2, 2, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 2, 3, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 2, 4, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 2, 5, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 2, 6, DTYPE)                                                     \
                }                                                                                                      \
            }                                                                                                          \
            case 3:                                                                                                    \
            {                                                                                                          \
                switch (outputRank)                                                                                    \
                {                                                                                                      \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 3, 0, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 3, 1, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 3, 2, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 3, 3, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 3, 4, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 3, 5, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 3, 6, DTYPE)                                                     \
                }                                                                                                      \
            }                                                                                                          \
            case 4:                                                                                                    \
            {                                                                                                          \
                switch (outputRank)                                                                                    \
                {                                                                                                      \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 4, 0, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 4, 1, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 4, 2, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 4, 3, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 4, 4, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 4, 5, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 4, 6, DTYPE)                                                     \
                }                                                                                                      \
            }                                                                                                          \
            case 5:                                                                                                    \
            {                                                                                                          \
                switch (outputRank)                                                                                    \
                {                                                                                                      \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 5, 0, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 5, 1, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 5, 2, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 5, 3, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 5, 4, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 5, 5, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 5, 6, DTYPE)                                                     \
                }                                                                                                      \
            }                                                                                                          \
            case 6:                                                                                                    \
            {                                                                                                          \
                switch (outputRank)                                                                                    \
                {                                                                                                      \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 6, 0, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 6, 1, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 6, 2, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 6, 3, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 6, 4, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 6, 5, DTYPE)                                                     \
                    DEF_FACTORY_TWO_RANK_ONE_TYPE(OP, 6, 6, DTYPE)                                                     \
                }                                                                                                      \
            }                                                                                                          \
        }                                                                                                              \
    }

namespace TosaReference
{

class SubgraphTraverser;
class GraphNode;

class OpFactory
{
public:
    static GraphNode* newOp(SubgraphTraverser* sgt,
                            tosa::TosaSerializationHandler* tsh,
                            tosa::Op opType,
                            tosa::TosaAttributeBase* attribute,
                            uint64_t id,
                            tosa::DType inputDType,
                            int inputRank,
                            tosa::DType outputDType,
                            int outputRank,
                            tosa::DType weightDType,
                            int weightRank);
};
};    // namespace TosaReference

#endif
