• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #pragma once
7 
8 #include <armnn/ILayerSupport.hpp>
9 
10 namespace armnn
11 {
12 
13 class LayerSupportBase : public ILayerSupport
14 {
15 public:
16     ARMNN_DEPRECATED_MSG("Use IsElementwiseUnarySupported instead")
17     bool IsAbsSupported(const TensorInfo& input,
18                         const TensorInfo& output,
19                         Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
20 
21     bool IsActivationSupported(const TensorInfo& input,
22                                const TensorInfo& output,
23                                const ActivationDescriptor& descriptor,
24                                Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
25 
26     bool IsAdditionSupported(const TensorInfo& input0,
27                              const TensorInfo& input1,
28                              const TensorInfo& output,
29                              Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
30 
31     bool IsArgMinMaxSupported(const TensorInfo& input,
32                               const TensorInfo& output,
33                               const ArgMinMaxDescriptor& descriptor,
34                               Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
35 
36     bool IsBatchNormalizationSupported(const TensorInfo& input,
37                                        const TensorInfo& output,
38                                        const TensorInfo& mean,
39                                        const TensorInfo& var,
40                                        const TensorInfo& beta,
41                                        const TensorInfo& gamma,
42                                        const BatchNormalizationDescriptor& descriptor,
43                                        Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
44 
45     bool IsBatchToSpaceNdSupported(const TensorInfo& input,
46                                    const TensorInfo& output,
47                                    const BatchToSpaceNdDescriptor& descriptor,
48                                    Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
49 
50     bool IsComparisonSupported(const TensorInfo& input0,
51                                const TensorInfo& input1,
52                                const TensorInfo& output,
53                                const ComparisonDescriptor& descriptor,
54                                Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
55 
56     bool IsConcatSupported(const std::vector<const TensorInfo*> inputs,
57                            const TensorInfo& output,
58                            const OriginsDescriptor& descriptor,
59                            Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
60 
61     bool IsConstantSupported(const TensorInfo& output,
62                              Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
63 
64     bool IsConvertBf16ToFp32Supported(const TensorInfo& input,
65                                       const TensorInfo& output,
66                                       Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
67 
68     bool IsConvertFp16ToFp32Supported(const TensorInfo& input,
69                                       const TensorInfo& output,
70                                       Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
71 
72     bool IsConvertFp32ToBf16Supported(const TensorInfo& input,
73                                       const TensorInfo& output,
74                                       Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
75 
76     bool IsConvertFp32ToFp16Supported(
77             const TensorInfo& input,
78             const TensorInfo& output,
79             Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
80 
81     bool IsConvolution2dSupported(const TensorInfo& input,
82                                   const TensorInfo& output,
83                                   const Convolution2dDescriptor& descriptor,
84                                   const TensorInfo& weights,
85                                   const Optional<TensorInfo>& biases,
86                                   Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
87 
88     bool IsDebugSupported(const TensorInfo& input,
89                           const TensorInfo& output,
90                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
91 
92     bool IsDepthToSpaceSupported(const TensorInfo& input,
93                                  const TensorInfo& output,
94                                  const DepthToSpaceDescriptor& descriptor,
95                                  Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
96 
97     bool IsDepthwiseConvolutionSupported(const TensorInfo& input,
98                                          const TensorInfo& output,
99                                          const DepthwiseConvolution2dDescriptor& descriptor,
100                                          const TensorInfo& weights,
101                                          const Optional<TensorInfo>& biases,
102                                          Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
103 
104     bool IsDequantizeSupported(const TensorInfo& input,
105                                const TensorInfo& output,
106                                Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
107 
108     bool IsDetectionPostProcessSupported(const TensorInfo& boxEncodings,
109                                          const TensorInfo& scores,
110                                          const TensorInfo& anchors,
111                                          const TensorInfo& detectionBoxes,
112                                          const TensorInfo& detectionClasses,
113                                          const TensorInfo& detectionScores,
114                                          const TensorInfo& numDetections,
115                                          const DetectionPostProcessDescriptor& descriptor,
116                                          Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
117 
118     bool IsDilatedDepthwiseConvolutionSupported(const TensorInfo& input,
119                                                 const TensorInfo& output,
120                                                 const DepthwiseConvolution2dDescriptor& descriptor,
121                                                 const TensorInfo& weights,
122                                                 const Optional<TensorInfo>& biases,
123                                                 Optional<std::string&> reasonIfUnsupported =
124                                                     EmptyOptional()) const override;
125 
126     bool IsDivisionSupported(const TensorInfo& input0,
127                              const TensorInfo& input1,
128                              const TensorInfo& output,
129                              Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
130 
131     bool IsElementwiseUnarySupported(const TensorInfo& input,
132                                      const TensorInfo& output,
133                                      const ElementwiseUnaryDescriptor& descriptor,
134                                      Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
135 
136     ARMNN_DEPRECATED_MSG("Use IsComparisonSupported instead")
137     bool IsEqualSupported(const TensorInfo& input0,
138                           const TensorInfo& input1,
139                           const TensorInfo& output,
140                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
141 
142     bool IsFakeQuantizationSupported(const TensorInfo& input,
143                                      const FakeQuantizationDescriptor& descriptor,
144                                      Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
145 
146     virtual bool IsFillSupported(const TensorInfo& input,
147                                  const TensorInfo& output,
148                                  const FillDescriptor& descriptor,
149                                  Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
150 
151     bool IsFloorSupported(const TensorInfo& input,
152                           const TensorInfo& output,
153                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
154 
155     bool IsFullyConnectedSupported(const TensorInfo& input,
156                                    const TensorInfo& output,
157                                    const TensorInfo& weights,
158                                    const TensorInfo& biases,
159                                    const FullyConnectedDescriptor& descriptor,
160                                    Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
161 
162     ARMNN_DEPRECATED_MSG("Use IsGatherSupported with descriptor instead")
163     bool IsGatherSupported(const TensorInfo& input0,
164                            const TensorInfo& input1,
165                            const TensorInfo& output,
166                            Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
167 
168     bool IsGatherSupported(const TensorInfo& input0,
169                            const TensorInfo& input1,
170                            const TensorInfo& output,
171                            const GatherDescriptor& descriptor,
172                            Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
173 
174     ARMNN_DEPRECATED_MSG("Use IsComparisonSupported instead")
175     bool IsGreaterSupported(const TensorInfo& input0,
176                             const TensorInfo& input1,
177                             const TensorInfo& output,
178                             Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
179 
180     bool IsInputSupported(const TensorInfo& input,
181                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
182 
183     bool IsInstanceNormalizationSupported(
184         const TensorInfo& input,
185         const TensorInfo& output,
186         const InstanceNormalizationDescriptor& descriptor,
187         Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
188 
189     bool IsL2NormalizationSupported(const TensorInfo& input,
190                                     const TensorInfo& output,
191                                     const L2NormalizationDescriptor& descriptor,
192                                     Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
193 
194     bool IsLogicalBinarySupported(const TensorInfo& input0,
195                                   const TensorInfo& input1,
196                                   const TensorInfo& output,
197                                   const LogicalBinaryDescriptor& descriptor,
198                                   Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
199 
200     bool IsLogicalUnarySupported(const TensorInfo& input,
201                                  const TensorInfo& output,
202                                  const ElementwiseUnaryDescriptor& descriptor,
203                                  Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
204 
205     bool IsLogSoftmaxSupported(const TensorInfo& input,
206                                const TensorInfo& output,
207                                const LogSoftmaxDescriptor& descriptor,
208                                Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
209 
210     bool IsLstmSupported(const TensorInfo& input,
211                          const TensorInfo& outputStateIn,
212                          const TensorInfo& cellStateIn,
213                          const TensorInfo& scratchBuffer,
214                          const TensorInfo& outputStateOut,
215                          const TensorInfo& cellStateOut,
216                          const TensorInfo& output,
217                          const LstmDescriptor& descriptor,
218                          const LstmInputParamsInfo& paramsInfo,
219                          Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
220 
221     bool IsMaximumSupported(const TensorInfo& input0,
222                             const TensorInfo& input1,
223                             const TensorInfo& output,
224                             Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
225 
226     bool IsMeanSupported(const TensorInfo& input,
227                          const TensorInfo& output,
228                          const MeanDescriptor& descriptor,
229                          Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
230 
231     bool IsMemCopySupported(const TensorInfo& input,
232                             const TensorInfo& output,
233                             Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
234 
235     bool IsMemImportSupported(const TensorInfo& input,
236                               const TensorInfo& output,
237                               Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
238 
239     bool IsMergeSupported(const TensorInfo& input0,
240                           const TensorInfo& input1,
241                           const TensorInfo& output,
242                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
243 
244     ARMNN_DEPRECATED_MSG("Use IsConcatSupported instead")
245     bool IsMergerSupported(const std::vector<const TensorInfo*> inputs,
246                            const TensorInfo& output,
247                            const OriginsDescriptor& descriptor,
248                            Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
249 
250     bool IsMinimumSupported(const TensorInfo& input0,
251                             const TensorInfo& input1,
252                             const TensorInfo& output,
253                             Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
254 
255     bool IsMultiplicationSupported(const TensorInfo& input0,
256                                    const TensorInfo& input1,
257                                    const TensorInfo& output,
258                                    Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
259 
260     bool IsNormalizationSupported(const TensorInfo& input,
261                                   const TensorInfo& output,
262                                   const NormalizationDescriptor& descriptor,
263                                   Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
264 
265     bool IsOutputSupported(const TensorInfo& output,
266                            Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
267 
268     bool IsPadSupported(const TensorInfo& input,
269                         const TensorInfo& output,
270                         const PadDescriptor& descriptor,
271                         Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
272 
273     bool IsPermuteSupported(const TensorInfo& input,
274                             const TensorInfo& output,
275                             const PermuteDescriptor& descriptor,
276                             Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
277 
278     bool IsPooling2dSupported(const TensorInfo& input,
279                               const TensorInfo& output,
280                               const Pooling2dDescriptor& descriptor,
281                               Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
282 
283     bool IsPreCompiledSupported(const TensorInfo& input,
284                                 const PreCompiledDescriptor& descriptor,
285                                 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
286 
287     bool IsPreluSupported(const TensorInfo& input,
288                           const TensorInfo& alpha,
289                           const TensorInfo& output,
290                           Optional<std::string &> reasonIfUnsupported) const override;
291 
292     bool IsQuantizeSupported(const TensorInfo& input,
293                              const TensorInfo& output,
294                              Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
295 
296     bool IsQLstmSupported(const TensorInfo& input,
297                           const TensorInfo& previousOutputIn,
298                           const TensorInfo& previousCellStateIn,
299                           const TensorInfo& outputStateOut,
300                           const TensorInfo& cellStateOut,
301                           const TensorInfo& output,
302                           const QLstmDescriptor& descriptor,
303                           const LstmInputParamsInfo& paramsInfo,
304                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
305 
306     bool IsQuantizedLstmSupported(const TensorInfo& input,
307                                   const TensorInfo& previousCellStateIn,
308                                   const TensorInfo& previousOutputIn,
309                                   const TensorInfo& cellStateOut,
310                                   const TensorInfo& output,
311                                   const QuantizedLstmInputParamsInfo& paramsInfo,
312                                   Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
313 
314     bool IsRankSupported(const TensorInfo& input,
315                          const TensorInfo& output,
316                          Optional<std::string&> reasonIfUnsupported) const override;
317 
318     bool IsReshapeSupported(const TensorInfo& input,
319                             const TensorInfo& output,
320                             const ReshapeDescriptor& descriptor,
321                             Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
322 
323     bool IsResizeSupported(const TensorInfo& input,
324                            const TensorInfo& output,
325                            const ResizeDescriptor& descriptor,
326                            Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
327 
328     ARMNN_DEPRECATED_MSG("Use IsResizeSupported instead")
329     bool IsResizeBilinearSupported(const TensorInfo& input,
330                                    const TensorInfo& output,
331                                    Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
332 
333     ARMNN_DEPRECATED_MSG("Use IsElementwiseUnarySupported instead")
334     bool IsRsqrtSupported(const TensorInfo& input,
335                           const TensorInfo& output,
336                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
337 
338     bool IsSliceSupported(const TensorInfo& input,
339                           const TensorInfo& output,
340                           const SliceDescriptor& descriptor,
341                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
342 
343     bool IsSoftmaxSupported(const TensorInfo& input,
344                             const TensorInfo& output,
345                             const SoftmaxDescriptor& descriptor,
346                             Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
347 
348     bool IsSpaceToBatchNdSupported(const TensorInfo& input,
349                                    const TensorInfo& output,
350                                    const SpaceToBatchNdDescriptor& descriptor,
351                                    Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
352 
353     bool IsSpaceToDepthSupported(const TensorInfo& input,
354                                  const TensorInfo& output,
355                                  const SpaceToDepthDescriptor& descriptor,
356                                  Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
357 
358     ARMNN_DEPRECATED_MSG("Use IsSplitterSupported with outputs instead")
359     bool IsSplitterSupported(const TensorInfo& input,
360                              const ViewsDescriptor& descriptor,
361                              Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
362 
363     bool IsSplitterSupported(const TensorInfo& input,
364                              const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
365                              const ViewsDescriptor& descriptor,
366                              Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
367 
368     bool IsStackSupported(const std::vector<const TensorInfo*>& inputs,
369                           const TensorInfo& output,
370                           const StackDescriptor& descriptor,
371                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
372 
373     bool IsStandInSupported(const std::vector<const TensorInfo*>& inputs,
374                             const std::vector<const TensorInfo*>& outputs,
375                             const StandInDescriptor& descriptor,
376                             Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
377 
378     bool IsStridedSliceSupported(const TensorInfo& input,
379                                  const TensorInfo& output,
380                                  const StridedSliceDescriptor& descriptor,
381                                  Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
382 
383     bool IsSubtractionSupported(const TensorInfo& input0,
384                                 const TensorInfo& input1,
385                                 const TensorInfo& output,
386                                 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
387 
388     bool IsSwitchSupported(const TensorInfo& input0,
389                            const TensorInfo& input1,
390                            const TensorInfo& output0,
391                            const TensorInfo& output1,
392                            Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
393 
394     bool IsTransposeConvolution2dSupported(
395         const TensorInfo& input,
396         const TensorInfo& output,
397         const TransposeConvolution2dDescriptor& descriptor,
398         const TensorInfo& weights,
399         const Optional<TensorInfo>& biases,
400         Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
401 
402     bool IsTransposeSupported(const TensorInfo& input,
403                               const TensorInfo& output,
404                               const TransposeDescriptor& descriptor,
405                               Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
406 
407 };
408 
409 } // namespace armnn
410