/*
 * Copyright (c) 2018-2021 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_GRAPH_TYPE_PRINTER_H
#define ARM_COMPUTE_GRAPH_TYPE_PRINTER_H

#include "arm_compute/core/Error.h"
#include "arm_compute/core/Types.h"
#include "arm_compute/graph/Types.h"

#include "utils/TypePrinter.h"

namespace arm_compute
{
namespace graph
{
/** Formatted output of the Target. */
inline ::std::ostream &operator<<(::std::ostream &os, const Target &target)
{
    switch(target)
    {
        case Target::UNSPECIFIED:
            os << "UNSPECIFIED";
            break;
        case Target::NEON:
            os << "NEON";
            break;
        case Target::CL:
            os << "CL";
            break;
        case Target::GC:
            os << "GC";
            break;
        default:
            ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
    }

    return os;
}

inline ::std::ostream &operator<<(::std::ostream &os, const NodeType &node_type)
{
    switch(node_type)
    {
        case NodeType::ActivationLayer:
            os << "ActivationLayer";
            break;
        case NodeType::ArgMinMaxLayer:
            os << "ArgMinMaxLayer";
            break;
        case NodeType::BatchNormalizationLayer:
            os << "BatchNormalizationLayer";
            break;
        case NodeType::BoundingBoxTransformLayer:
            os << "BoundingBoxTransformLayer";
            break;
        case NodeType::ChannelShuffleLayer:
            os << "ChannelShuffleLayer";
            break;
        case NodeType::ConcatenateLayer:
            os << "ConcatenateLayer";
            break;
        case NodeType::ConvolutionLayer:
            os << "ConvolutionLayer";
            break;
        case NodeType::DeconvolutionLayer:
            os << "DeconvolutionLayer";
            break;
        case NodeType::DepthToSpaceLayer:
            os << "DepthToSpaceLayer";
            break;
        case NodeType::DequantizationLayer:
            os << "DequantizationLayer";
            break;
        case NodeType::DetectionOutputLayer:
            os << "DetectionOutputLayer";
            break;
        case NodeType::DetectionPostProcessLayer:
            os << "DetectionPostProcessLayer";
            break;
        case NodeType::DepthwiseConvolutionLayer:
            os << "DepthwiseConvolutionLayer";
            break;
        case NodeType::EltwiseLayer:
            os << "EltwiseLayer";
            break;
        case NodeType::UnaryEltwiseLayer:
            os << "UnaryEltwiseLayer";
            break;
        case NodeType::FlattenLayer:
            os << "FlattenLayer";
            break;
        case NodeType::FullyConnectedLayer:
            os << "FullyConnectedLayer";
            break;
        case NodeType::FusedConvolutionBatchNormalizationLayer:
            os << "FusedConvolutionBatchNormalizationLayer";
            break;
        case NodeType::FusedDepthwiseConvolutionBatchNormalizationLayer:
            os << "FusedDepthwiseConvolutionBatchNormalizationLayer";
            break;
        case NodeType::GenerateProposalsLayer:
            os << "GenerateProposalsLayer";
            break;
        case NodeType::L2NormalizeLayer:
            os << "L2NormalizeLayer";
            break;
        case NodeType::NormalizationLayer:
            os << "NormalizationLayer";
            break;
        case NodeType::NormalizePlanarYUVLayer:
            os << "NormalizePlanarYUVLayer";
            break;
        case NodeType::PadLayer:
            os << "PadLayer";
            break;
        case NodeType::PermuteLayer:
            os << "PermuteLayer";
            break;
        case NodeType::PoolingLayer:
            os << "PoolingLayer";
            break;
        case NodeType::PReluLayer:
            os << "PReluLayer";
            break;
        case NodeType::PrintLayer:
            os << "PrintLayer";
            break;
        case NodeType::PriorBoxLayer:
            os << "PriorBoxLayer";
            break;
        case NodeType::QuantizationLayer:
            os << "QuantizationLayer";
            break;
        case NodeType::ReductionOperationLayer:
            os << "ReductionOperationLayer";
            break;
        case NodeType::ReorgLayer:
            os << "ReorgLayer";
            break;
        case NodeType::ReshapeLayer:
            os << "ReshapeLayer";
            break;
        case NodeType::ResizeLayer:
            os << "ResizeLayer";
            break;
        case NodeType::ROIAlignLayer:
            os << "ROIAlignLayer";
            break;
        case NodeType::SoftmaxLayer:
            os << "SoftmaxLayer";
            break;
        case NodeType::SliceLayer:
            os << "SliceLayer";
            break;
        case NodeType::SplitLayer:
            os << "SplitLayer";
            break;
        case NodeType::StackLayer:
            os << "StackLayer";
            break;
        case NodeType::StridedSliceLayer:
            os << "StridedSliceLayer";
            break;
        case NodeType::UpsampleLayer:
            os << "UpsampleLayer";
            break;
        case NodeType::Input:
            os << "Input";
            break;
        case NodeType::Output:
            os << "Output";
            break;
        case NodeType::Const:
            os << "Const";
            break;
        case NodeType::Dummy:
            os << "Dummy";
            break;
        default:
            ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
    }

    return os;
}

/** Formatted output of the EltwiseOperation type. */
inline ::std::ostream &operator<<(::std::ostream &os, const EltwiseOperation &eltwise_op)
{
    switch(eltwise_op)
    {
        case EltwiseOperation::Add:
            os << "Add";
            break;
        case EltwiseOperation::Mul:
            os << "Mul";
            break;
        case EltwiseOperation::Sub:
            os << "Sub";
            break;
        case EltwiseOperation::Div:
            os << "Div";
            break;
        default:
            ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
    }

    return os;
}

/** Formatted output of the ConvolutionMethod type. */
inline ::std::ostream &operator<<(::std::ostream &os, const ConvolutionMethod &method)
{
    switch(method)
    {
        case ConvolutionMethod::Default:
            os << "Default";
            break;
        case ConvolutionMethod::Direct:
            os << "Direct";
            break;
        case ConvolutionMethod::GEMM:
            os << "GEMM";
            break;
        case ConvolutionMethod::Winograd:
            os << "Winograd";
            break;
        default:
            ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
    }

    return os;
}

/** Formatted output of the FastMathHint type. */
inline ::std::ostream &operator<<(::std::ostream &os, const FastMathHint &hint)
{
    switch(hint)
    {
        case FastMathHint::Enabled:
            os << "Enabled";
            break;
        case FastMathHint::Disabled:
            os << "Disabled";
            break;
        default:
            ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
    }

    return os;
}

/** Formatted output of the DepthwiseConvolutionMethod type. */
inline ::std::ostream &operator<<(::std::ostream &os, const DepthwiseConvolutionMethod &method)
{
    switch(method)
    {
        case DepthwiseConvolutionMethod::Default:
            os << "DEFAULT";
            break;
        case DepthwiseConvolutionMethod::Optimized3x3:
            os << "Optimized3x3";
            break;
        default:
            ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
    }

    return os;
}
} // namespace graph
} // namespace arm_compute
#endif /* ARM_COMPUTE_GRAPH_TYPE_PRINTER_H */
