• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2018-2021 Arm Limited.
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to
8  * deal in the Software without restriction, including without limitation the
9  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10  * sell copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in all
14  * copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22  * SOFTWARE.
23  */
24 #ifndef ARM_COMPUTE_GRAPH_TYPE_PRINTER_H
25 #define ARM_COMPUTE_GRAPH_TYPE_PRINTER_H
26 
27 #include "arm_compute/core/Error.h"
28 #include "arm_compute/core/Types.h"
29 #include "arm_compute/graph/Types.h"
30 
31 #include "utils/TypePrinter.h"
32 
33 namespace arm_compute
34 {
35 namespace graph
36 {
37 /** Formatted output of the Target. */
38 inline ::std::ostream &operator<<(::std::ostream &os, const Target &target)
39 {
40     switch(target)
41     {
42         case Target::UNSPECIFIED:
43             os << "UNSPECIFIED";
44             break;
45         case Target::NEON:
46             os << "Neon";
47             break;
48         case Target::CL:
49             os << "CL";
50             break;
51         case Target::CLVK:
52             os << "CLVK";
53             break;
54         default:
55             ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
56     }
57 
58     return os;
59 }
60 
61 inline ::std::ostream &operator<<(::std::ostream &os, const NodeType &node_type)
62 {
63     switch(node_type)
64     {
65         case NodeType::ActivationLayer:
66             os << "ActivationLayer";
67             break;
68         case NodeType::ArgMinMaxLayer:
69             os << "ArgMinMaxLayer";
70             break;
71         case NodeType::BatchNormalizationLayer:
72             os << "BatchNormalizationLayer";
73             break;
74         case NodeType::BoundingBoxTransformLayer:
75             os << "BoundingBoxTransformLayer";
76             break;
77         case NodeType::ChannelShuffleLayer:
78             os << "ChannelShuffleLayer";
79             break;
80         case NodeType::ConcatenateLayer:
81             os << "ConcatenateLayer";
82             break;
83         case NodeType::ConvolutionLayer:
84             os << "ConvolutionLayer";
85             break;
86         case NodeType::DeconvolutionLayer:
87             os << "DeconvolutionLayer";
88             break;
89         case NodeType::DepthToSpaceLayer:
90             os << "DepthToSpaceLayer";
91             break;
92         case NodeType::DequantizationLayer:
93             os << "DequantizationLayer";
94             break;
95         case NodeType::DetectionOutputLayer:
96             os << "DetectionOutputLayer";
97             break;
98         case NodeType::DetectionPostProcessLayer:
99             os << "DetectionPostProcessLayer";
100             break;
101         case NodeType::DepthwiseConvolutionLayer:
102             os << "DepthwiseConvolutionLayer";
103             break;
104         case NodeType::EltwiseLayer:
105             os << "EltwiseLayer";
106             break;
107         case NodeType::UnaryEltwiseLayer:
108             os << "UnaryEltwiseLayer";
109             break;
110         case NodeType::FlattenLayer:
111             os << "FlattenLayer";
112             break;
113         case NodeType::FullyConnectedLayer:
114             os << "FullyConnectedLayer";
115             break;
116         case NodeType::FusedConvolutionBatchNormalizationLayer:
117             os << "FusedConvolutionBatchNormalizationLayer";
118             break;
119         case NodeType::FusedConvolutionBatchNormalizationLayerWithPostOpsLayer:
120             os << "FusedConvolutionBatchNormalizationLayerWithPostOpsLayer";
121             break;
122         case NodeType::FusedConvolutionWithPostOp:
123             os << "FusedConvolutionWithPostOp";
124             break;
125         case NodeType::FusedDepthwiseConvolutionBatchNormalizationLayer:
126             os << "FusedDepthwiseConvolutionBatchNormalizationLayer";
127             break;
128         case NodeType::GenerateProposalsLayer:
129             os << "GenerateProposalsLayer";
130             break;
131         case NodeType::L2NormalizeLayer:
132             os << "L2NormalizeLayer";
133             break;
134         case NodeType::NormalizationLayer:
135             os << "NormalizationLayer";
136             break;
137         case NodeType::NormalizePlanarYUVLayer:
138             os << "NormalizePlanarYUVLayer";
139             break;
140         case NodeType::PadLayer:
141             os << "PadLayer";
142             break;
143         case NodeType::PermuteLayer:
144             os << "PermuteLayer";
145             break;
146         case NodeType::PoolingLayer:
147             os << "PoolingLayer";
148             break;
149         case NodeType::PReluLayer:
150             os << "PReluLayer";
151             break;
152         case NodeType::PrintLayer:
153             os << "PrintLayer";
154             break;
155         case NodeType::PriorBoxLayer:
156             os << "PriorBoxLayer";
157             break;
158         case NodeType::QuantizationLayer:
159             os << "QuantizationLayer";
160             break;
161         case NodeType::ReductionOperationLayer:
162             os << "ReductionOperationLayer";
163             break;
164         case NodeType::ReorgLayer:
165             os << "ReorgLayer";
166             break;
167         case NodeType::ReshapeLayer:
168             os << "ReshapeLayer";
169             break;
170         case NodeType::ResizeLayer:
171             os << "ResizeLayer";
172             break;
173         case NodeType::ROIAlignLayer:
174             os << "ROIAlignLayer";
175             break;
176         case NodeType::SoftmaxLayer:
177             os << "SoftmaxLayer";
178             break;
179         case NodeType::SliceLayer:
180             os << "SliceLayer";
181             break;
182         case NodeType::SplitLayer:
183             os << "SplitLayer";
184             break;
185         case NodeType::StackLayer:
186             os << "StackLayer";
187             break;
188         case NodeType::StridedSliceLayer:
189             os << "StridedSliceLayer";
190             break;
191         case NodeType::UpsampleLayer:
192             os << "UpsampleLayer";
193             break;
194         case NodeType::Input:
195             os << "Input";
196             break;
197         case NodeType::Output:
198             os << "Output";
199             break;
200         case NodeType::Const:
201             os << "Const";
202             break;
203         case NodeType::Dummy:
204             os << "Dummy";
205             break;
206         default:
207             ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
208     }
209 
210     return os;
211 }
212 
213 /** Formatted output of the EltwiseOperation type. */
214 inline ::std::ostream &operator<<(::std::ostream &os, const EltwiseOperation &eltwise_op)
215 {
216     switch(eltwise_op)
217     {
218         case EltwiseOperation::Add:
219             os << "Add";
220             break;
221         case EltwiseOperation::Mul:
222             os << "Mul";
223             break;
224         case EltwiseOperation::Sub:
225             os << "Sub";
226             break;
227         case EltwiseOperation::Div:
228             os << "Div";
229             break;
230         default:
231             ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
232     }
233 
234     return os;
235 }
236 
237 /** Formatted output of the ConvolutionMethod type. */
238 inline ::std::ostream &operator<<(::std::ostream &os, const ConvolutionMethod &method)
239 {
240     switch(method)
241     {
242         case ConvolutionMethod::Default:
243             os << "Default";
244             break;
245         case ConvolutionMethod::Direct:
246             os << "Direct";
247             break;
248         case ConvolutionMethod::GEMM:
249             os << "GEMM";
250             break;
251         case ConvolutionMethod::Winograd:
252             os << "Winograd";
253             break;
254         default:
255             ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
256     }
257 
258     return os;
259 }
260 
261 /** Formatted output of the FastMathHint type. */
262 inline ::std::ostream &operator<<(::std::ostream &os, const FastMathHint &hint)
263 {
264     switch(hint)
265     {
266         case FastMathHint::Enabled:
267             os << "Enabled";
268             break;
269         case FastMathHint::Disabled:
270             os << "Disabled";
271             break;
272         default:
273             ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
274     }
275 
276     return os;
277 }
278 
279 /** Formatted output of the DepthwiseConvolutionMethod type. */
280 inline ::std::ostream &operator<<(::std::ostream &os, const DepthwiseConvolutionMethod &method)
281 {
282     switch(method)
283     {
284         case DepthwiseConvolutionMethod::Default:
285             os << "DEFAULT";
286             break;
287         case DepthwiseConvolutionMethod::Optimized3x3:
288             os << "Optimized3x3";
289             break;
290         default:
291             ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
292     }
293 
294     return os;
295 }
296 } // namespace graph
297 } // namespace arm_compute
298 #endif /* ARM_COMPUTE_GRAPH_TYPE_PRINTER_H */
299