blob: 8f97bbf845fb69903d0834c9369721c49f01a6d1 [file] [log] [blame]
/*
* 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::CLVK:
os << "CLVK";
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::FusedConvolutionBatchNormalizationLayerWithPostOpsLayer:
os << "FusedConvolutionBatchNormalizationLayerWithPostOpsLayer";
break;
case NodeType::FusedConvolutionWithPostOp:
os << "FusedConvolutionWithPostOp";
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 */