• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2018-2020 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::GC:
52             os << "GC";
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::FusedDepthwiseConvolutionBatchNormalizationLayer:
120             os << "FusedDepthwiseConvolutionBatchNormalizationLayer";
121             break;
122         case NodeType::GenerateProposalsLayer:
123             os << "GenerateProposalsLayer";
124             break;
125         case NodeType::L2NormalizeLayer:
126             os << "L2NormalizeLayer";
127             break;
128         case NodeType::NormalizationLayer:
129             os << "NormalizationLayer";
130             break;
131         case NodeType::NormalizePlanarYUVLayer:
132             os << "NormalizePlanarYUVLayer";
133             break;
134         case NodeType::PadLayer:
135             os << "PadLayer";
136             break;
137         case NodeType::PermuteLayer:
138             os << "PermuteLayer";
139             break;
140         case NodeType::PoolingLayer:
141             os << "PoolingLayer";
142             break;
143         case NodeType::PReluLayer:
144             os << "PReluLayer";
145             break;
146         case NodeType::PrintLayer:
147             os << "PrintLayer";
148             break;
149         case NodeType::PriorBoxLayer:
150             os << "PriorBoxLayer";
151             break;
152         case NodeType::QuantizationLayer:
153             os << "QuantizationLayer";
154             break;
155         case NodeType::ReductionOperationLayer:
156             os << "ReductionOperationLayer";
157             break;
158         case NodeType::ReorgLayer:
159             os << "ReorgLayer";
160             break;
161         case NodeType::ReshapeLayer:
162             os << "ReshapeLayer";
163             break;
164         case NodeType::ResizeLayer:
165             os << "ResizeLayer";
166             break;
167         case NodeType::ROIAlignLayer:
168             os << "ROIAlignLayer";
169             break;
170         case NodeType::SoftmaxLayer:
171             os << "SoftmaxLayer";
172             break;
173         case NodeType::SliceLayer:
174             os << "SliceLayer";
175             break;
176         case NodeType::SplitLayer:
177             os << "SplitLayer";
178             break;
179         case NodeType::StackLayer:
180             os << "StackLayer";
181             break;
182         case NodeType::StridedSliceLayer:
183             os << "StridedSliceLayer";
184             break;
185         case NodeType::UpsampleLayer:
186             os << "UpsampleLayer";
187             break;
188         case NodeType::YOLOLayer:
189             os << "YOLOLayer";
190             break;
191         case NodeType::Input:
192             os << "Input";
193             break;
194         case NodeType::Output:
195             os << "Output";
196             break;
197         case NodeType::Const:
198             os << "Const";
199             break;
200         case NodeType::Dummy:
201             os << "Dummy";
202             break;
203         default:
204             ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
205     }
206 
207     return os;
208 }
209 
210 /** Formatted output of the EltwiseOperation type. */
211 inline ::std::ostream &operator<<(::std::ostream &os, const EltwiseOperation &eltwise_op)
212 {
213     switch(eltwise_op)
214     {
215         case EltwiseOperation::Add:
216             os << "Add";
217             break;
218         case EltwiseOperation::Mul:
219             os << "Mul";
220             break;
221         case EltwiseOperation::Sub:
222             os << "Sub";
223             break;
224         default:
225             ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
226     }
227 
228     return os;
229 }
230 
231 /** Formatted output of the ConvolutionMethod type. */
232 inline ::std::ostream &operator<<(::std::ostream &os, const ConvolutionMethod &method)
233 {
234     switch(method)
235     {
236         case ConvolutionMethod::Default:
237             os << "Default";
238             break;
239         case ConvolutionMethod::Direct:
240             os << "Direct";
241             break;
242         case ConvolutionMethod::GEMM:
243             os << "GEMM";
244             break;
245         case ConvolutionMethod::Winograd:
246             os << "Winograd";
247             break;
248         default:
249             ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
250     }
251 
252     return os;
253 }
254 
255 /** Formatted output of the FastMathHint type. */
256 inline ::std::ostream &operator<<(::std::ostream &os, const FastMathHint &hint)
257 {
258     switch(hint)
259     {
260         case FastMathHint::Enabled:
261             os << "Enabled";
262             break;
263         case FastMathHint::Disabled:
264             os << "Disabled";
265             break;
266         default:
267             ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
268     }
269 
270     return os;
271 }
272 
273 /** Formatted output of the DepthwiseConvolutionMethod type. */
274 inline ::std::ostream &operator<<(::std::ostream &os, const DepthwiseConvolutionMethod &method)
275 {
276     switch(method)
277     {
278         case DepthwiseConvolutionMethod::Default:
279             os << "DEFAULT";
280             break;
281         case DepthwiseConvolutionMethod::Optimized3x3:
282             os << "Optimized3x3";
283             break;
284         default:
285             ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
286     }
287 
288     return os;
289 }
290 } // namespace graph
291 } // namespace arm_compute
292 #endif /* ARM_COMPUTE_GRAPH_TYPE_PRINTER_H */
293