blob: 452200291ec2966a08e5f5f509b5566af8577ee1 [file] [log] [blame]
David Becke97c6e02018-10-03 13:09:28 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5#pragma once
6
Jim Flynn906f9462019-05-10 13:55:21 +01007#include <armnn/Deprecated.hpp>
David Becke97c6e02018-10-03 13:09:28 +01008#include <armnn/DescriptorsFwd.hpp>
Jan Eilersd01a83c2019-07-03 18:20:40 +01009#include <armnn/LstmParams.hpp>
James Conroyee18dc82019-07-17 11:27:46 +010010#include <armnn/Optional.hpp>
11#include <armnn/QuantizedLstmParams.hpp>
Matthew Bentham313e1c82019-03-25 17:37:47 +000012
David Beck5eec11d2018-10-04 15:43:17 +010013#include <cctype>
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +010014#include <functional>
David Beck3e9e1152018-10-17 14:17:50 +010015#include <memory>
Matthew Bentham313e1c82019-03-25 17:37:47 +000016#include <vector>
David Becke97c6e02018-10-03 13:09:28 +010017
18namespace armnn
19{
20
21class TensorInfo;
22
23class ILayerSupport
24{
25protected:
26 ILayerSupport() {}
27 virtual ~ILayerSupport() {}
28
29public:
Kevin May868eb142019-09-04 17:29:31 +010030 virtual bool IsAbsSupported(const TensorInfo& input,
31 const TensorInfo& output,
32 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
33
David Becke97c6e02018-10-03 13:09:28 +010034 virtual bool IsActivationSupported(const TensorInfo& input,
35 const TensorInfo& output,
36 const ActivationDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000037 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +010038
39 virtual bool IsAdditionSupported(const TensorInfo& input0,
40 const TensorInfo& input1,
41 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000042 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +010043
Nikhil Rajee391d52019-09-05 17:50:44 +010044 virtual bool IsArgMinMaxSupported(const TensorInfo& input,
45 const TensorInfo& output,
46 const ArgMinMaxDescriptor& descriptor,
47 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
48
David Becke97c6e02018-10-03 13:09:28 +010049 virtual bool IsBatchNormalizationSupported(const TensorInfo& input,
50 const TensorInfo& output,
51 const TensorInfo& mean,
52 const TensorInfo& var,
53 const TensorInfo& beta,
54 const TensorInfo& gamma,
55 const BatchNormalizationDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000056 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +010057
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +000058 virtual bool IsBatchToSpaceNdSupported(const TensorInfo& input,
59 const TensorInfo& output,
60 const BatchToSpaceNdDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000061 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +000062
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +010063 virtual bool IsComparisonSupported(const TensorInfo& input0,
64 const TensorInfo& input1,
65 const TensorInfo& output,
66 const ComparisonDescriptor& descriptor,
67 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
68
Jim Flynn906f9462019-05-10 13:55:21 +010069 virtual bool IsConcatSupported(const std::vector<const TensorInfo*> inputs,
70 const TensorInfo& output,
71 const OriginsDescriptor& descriptor,
72 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
73
David Becke97c6e02018-10-03 13:09:28 +010074 virtual bool IsConstantSupported(const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000075 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +010076
77 virtual bool IsConvertFp16ToFp32Supported(const TensorInfo& input,
78 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000079 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +010080
81 virtual bool IsConvertFp32ToFp16Supported(const TensorInfo& input,
82 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000083 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +010084
85 virtual bool IsConvolution2dSupported(const TensorInfo& input,
86 const TensorInfo& output,
87 const Convolution2dDescriptor& descriptor,
88 const TensorInfo& weights,
David Beck5eec11d2018-10-04 15:43:17 +010089 const Optional<TensorInfo>& biases,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000090 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +010091
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +000092 virtual bool IsDebugSupported(const TensorInfo& input,
93 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000094 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +000095
Aron Virginas-Tardd6247f2019-09-19 14:31:17 +010096 virtual bool IsDepthToSpaceSupported(const TensorInfo& input,
97 const TensorInfo& output,
98 const DepthToSpaceDescriptor& descriptor,
99 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
100
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000101 virtual bool IsDepthwiseConvolutionSupported(
102 const TensorInfo& input,
103 const TensorInfo& output,
104 const DepthwiseConvolution2dDescriptor& descriptor,
105 const TensorInfo& weights,
106 const Optional<TensorInfo>& biases,
107 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100108
Nattapat Chaimanowonge4294fd2019-03-28 09:56:53 +0000109 virtual bool IsDequantizeSupported(const TensorInfo& input,
110 const TensorInfo& output,
111 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
112
Derek Lamberti6a5e5e82019-12-05 14:41:20 +0000113 virtual bool IsDetectionPostProcessSupported(const TensorInfo& boxEncodings,
114 const TensorInfo& scores,
115 const TensorInfo& anchors,
116 const TensorInfo& detectionBoxes,
117 const TensorInfo& detectionClasses,
118 const TensorInfo& detectionScores,
119 const TensorInfo& numDetections,
120 const DetectionPostProcessDescriptor& descriptor,
121 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const =0;
Narumol Prangnawarat94dd5d82019-01-23 18:06:26 +0000122
Pablo Tellof0bd6832019-04-26 17:58:13 +0100123 virtual bool IsDilatedDepthwiseConvolutionSupported(
124 const TensorInfo& input,
125 const TensorInfo& output,
126 const DepthwiseConvolution2dDescriptor& descriptor,
127 const TensorInfo& weights,
128 const Optional<TensorInfo>& biases,
129 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
130
David Becke97c6e02018-10-03 13:09:28 +0100131 virtual bool IsDivisionSupported(const TensorInfo& input0,
132 const TensorInfo& input1,
133 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000134 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100135
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100136 ARMNN_DEPRECATED_MSG("Use IsComparisonSupported instead")
FrancisMurtagh20995952018-12-17 12:11:36 +0000137 virtual bool IsEqualSupported(const TensorInfo& input0,
138 const TensorInfo& input1,
139 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000140 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
FrancisMurtagh20995952018-12-17 12:11:36 +0000141
arovir01537a0b62018-10-08 12:01:04 +0100142 virtual bool IsFakeQuantizationSupported(const TensorInfo& input,
143 const FakeQuantizationDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000144 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100145
arovir01537a0b62018-10-08 12:01:04 +0100146 virtual bool IsFloorSupported(const TensorInfo& input,
147 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000148 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100149
150 virtual bool IsFullyConnectedSupported(const TensorInfo& input,
151 const TensorInfo& output,
152 const TensorInfo& weights,
153 const TensorInfo& biases,
154 const FullyConnectedDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000155 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100156
Derek Lamberti61f54632019-03-25 16:28:44 +0000157 virtual bool IsGatherSupported(const TensorInfo& input0,
158 const TensorInfo& input1,
159 const TensorInfo& output,
160 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
161
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100162 ARMNN_DEPRECATED_MSG("Use IsComparisonSupported instead")
Matteo Martincigh3d6898c2019-01-15 16:11:44 +0000163 virtual bool IsGreaterSupported(const TensorInfo& input0,
164 const TensorInfo& input1,
165 const TensorInfo& ouput,
166 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
167
arovir01537a0b62018-10-08 12:01:04 +0100168 virtual bool IsInputSupported(const TensorInfo& input,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000169 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
arovir01537a0b62018-10-08 12:01:04 +0100170
Kevin Mayce5045a2019-10-02 14:07:47 +0100171 virtual bool IsInstanceNormalizationSupported(
172 const TensorInfo& input,
173 const TensorInfo& output,
174 const InstanceNormalizationDescriptor& descriptor,
175 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
176
David Becke97c6e02018-10-03 13:09:28 +0100177 virtual bool IsL2NormalizationSupported(const TensorInfo& input,
178 const TensorInfo& output,
179 const L2NormalizationDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000180 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100181
Aron Virginas-Tarf982dea2019-10-11 14:07:53 +0100182 virtual bool IsLogSoftmaxSupported(const TensorInfo& input,
183 const TensorInfo& output,
184 const LogSoftmaxDescriptor& descriptor,
185 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
186
David Becke97c6e02018-10-03 13:09:28 +0100187 virtual bool IsLstmSupported(const TensorInfo& input,
188 const TensorInfo& outputStateIn,
189 const TensorInfo& cellStateIn,
190 const TensorInfo& scratchBuffer,
191 const TensorInfo& outputStateOut,
192 const TensorInfo& cellStateOut,
193 const TensorInfo& output,
194 const LstmDescriptor& descriptor,
Jan Eilersd01a83c2019-07-03 18:20:40 +0100195 const LstmInputParamsInfo& paramsInfo,
196 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100197
Nattapat Chaimanowong5a4304a2018-11-28 10:44:37 +0000198 virtual bool IsMaximumSupported(const TensorInfo& input0,
199 const TensorInfo& input1,
200 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000201 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
Nattapat Chaimanowong5a4304a2018-11-28 10:44:37 +0000202
arovir01537a0b62018-10-08 12:01:04 +0100203 virtual bool IsMeanSupported(const TensorInfo& input,
204 const TensorInfo& output,
205 const MeanDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000206 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
207
208 virtual bool IsMemCopySupported(const TensorInfo& input,
209 const TensorInfo& output,
210 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
arovir01537a0b62018-10-08 12:01:04 +0100211
Derek Lambertif674aa02019-08-01 15:56:25 +0100212 virtual bool IsMemImportSupported(const TensorInfo& input,
213 const TensorInfo& output,
214 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
215
Nattapat Chaimanowong1f886302019-04-05 13:37:19 +0100216 virtual bool IsMergeSupported(const TensorInfo& input0,
217 const TensorInfo& input1,
218 const TensorInfo& output,
219 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
220
Jim Flynn906f9462019-05-10 13:55:21 +0100221 ARMNN_DEPRECATED_MSG("Use IsConcatSupported instead")
David Becke97c6e02018-10-03 13:09:28 +0100222 virtual bool IsMergerSupported(const std::vector<const TensorInfo*> inputs,
Nikhil Raj8599a412018-11-19 14:51:07 +0000223 const TensorInfo& output,
David Becke97c6e02018-10-03 13:09:28 +0100224 const OriginsDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000225 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100226
kevmay0190539692018-11-29 08:40:19 +0000227 virtual bool IsMinimumSupported(const TensorInfo& input0,
228 const TensorInfo& input1,
229 const TensorInfo& ouput,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000230 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
kevmay0190539692018-11-29 08:40:19 +0000231
David Becke97c6e02018-10-03 13:09:28 +0100232 virtual bool IsMultiplicationSupported(const TensorInfo& input0,
233 const TensorInfo& input1,
234 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000235 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100236
237 virtual bool IsNormalizationSupported(const TensorInfo& input,
238 const TensorInfo& output,
239 const NormalizationDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000240 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100241
242 virtual bool IsOutputSupported(const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000243 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100244
arovir01537a0b62018-10-08 12:01:04 +0100245 virtual bool IsPadSupported(const TensorInfo& input,
246 const TensorInfo& output,
247 const PadDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000248 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
arovir01537a0b62018-10-08 12:01:04 +0100249
David Becke97c6e02018-10-03 13:09:28 +0100250 virtual bool IsPermuteSupported(const TensorInfo& input,
251 const TensorInfo& output,
252 const PermuteDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000253 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100254
255 virtual bool IsPooling2dSupported(const TensorInfo& input,
256 const TensorInfo& output,
257 const Pooling2dDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000258 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100259
Matteo Martincigh49124022019-01-11 13:25:59 +0000260 virtual bool IsPreCompiledSupported(const TensorInfo& input,
261 const PreCompiledDescriptor& descriptor,
262 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
263
Matteo Martincigh0e406ee2019-06-12 15:42:18 +0100264 virtual bool IsPreluSupported(const TensorInfo& input,
265 const TensorInfo& alpha,
266 const TensorInfo& output,
267 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
268
Derek Lambertia9cca6a2019-03-25 15:41:58 +0000269 virtual bool IsQuantizeSupported(const TensorInfo& input,
270 const TensorInfo& output,
271 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
272
James Conroyee18dc82019-07-17 11:27:46 +0100273 virtual bool IsQuantizedLstmSupported(const TensorInfo& input,
274 const TensorInfo& previousCellStateIn,
275 const TensorInfo& previousOutputIn,
276 const TensorInfo& cellStateOut,
277 const TensorInfo& output,
278 const QuantizedLstmInputParamsInfo& paramsInfo,
279 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
280
arovir01537a0b62018-10-08 12:01:04 +0100281 virtual bool IsReshapeSupported(const TensorInfo& input,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000282 const ReshapeDescriptor& descriptor,
283 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
arovir01537a0b62018-10-08 12:01:04 +0100284
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +0100285 ARMNN_DEPRECATED_MSG("Use IsResizeSupported instead")
David Becke97c6e02018-10-03 13:09:28 +0100286 virtual bool IsResizeBilinearSupported(const TensorInfo& input,
Sadik Armaganc625f002018-12-17 11:32:16 +0000287 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000288 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100289
Teresa Charlina9075df2019-06-27 15:41:57 +0100290 virtual bool IsResizeSupported(const TensorInfo& input,
291 const TensorInfo& output,
292 const ResizeDescriptor& descriptor,
293 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
294
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000295 virtual bool IsRsqrtSupported(const TensorInfo& input,
296 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000297 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000298
Aron Virginas-Tar636ab402019-09-16 14:27:45 +0100299 virtual bool IsSliceSupported(const TensorInfo& input,
300 const TensorInfo& output,
301 const SliceDescriptor& descriptor,
302 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
303
David Becke97c6e02018-10-03 13:09:28 +0100304 virtual bool IsSoftmaxSupported(const TensorInfo& input,
305 const TensorInfo& output,
306 const SoftmaxDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000307 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100308
Derek Lamberti61f54632019-03-25 16:28:44 +0000309 virtual bool IsSpaceToBatchNdSupported(const TensorInfo& input,
310 const TensorInfo& output,
311 const SpaceToBatchNdDescriptor& descriptor,
312 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
313
Aron Virginas-Tar972af152019-06-11 14:14:03 +0100314 virtual bool IsSpaceToDepthSupported(const TensorInfo& input,
315 const TensorInfo& output,
316 const SpaceToDepthDescriptor& descriptor,
317 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
318
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100319 ARMNN_DEPRECATED_MSG("Use IsSplitterSupported with outputs instead")
David Becke97c6e02018-10-03 13:09:28 +0100320 virtual bool IsSplitterSupported(const TensorInfo& input,
321 const ViewsDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000322 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100323
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100324 virtual bool IsSplitterSupported(const TensorInfo& input,
325 const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
326 const ViewsDescriptor& descriptor,
327 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
328
Matthew Jackson81e601c2019-07-11 12:07:09 +0100329 virtual bool IsStackSupported(const std::vector<const TensorInfo*>& inputs,
Matthew Jackson2b8c1da2019-07-04 14:59:16 +0100330 const TensorInfo& output,
331 const StackDescriptor& descriptor,
332 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
333
Derek Lamberti013c3902019-10-21 10:46:16 +0100334 virtual bool IsStandInSupported(const std::vector<const TensorInfo*>& inputs,
335 const std::vector<const TensorInfo*>& outputs,
336 const StandInDescriptor& descriptor,
337 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
338
339
Conor Kennedy430b5d82018-11-14 15:28:28 +0000340 virtual bool IsStridedSliceSupported(const TensorInfo& input,
341 const TensorInfo& output,
342 const StridedSliceDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000343 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
Conor Kennedy430b5d82018-11-14 15:28:28 +0000344
arovir01537a0b62018-10-08 12:01:04 +0100345 virtual bool IsSubtractionSupported(const TensorInfo& input0,
346 const TensorInfo& input1,
347 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000348 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
Sadik Armaganeff363d2019-04-05 15:25:46 +0100349
350 virtual bool IsSwitchSupported(const TensorInfo& input0,
351 const TensorInfo& input1,
352 const TensorInfo& output0,
353 const TensorInfo& output1,
354 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
Aron Virginas-Tar639fb042019-06-20 14:28:19 +0100355
356 virtual bool IsTransposeConvolution2dSupported(
357 const TensorInfo& input,
358 const TensorInfo& output,
359 const TransposeConvolution2dDescriptor& descriptor,
360 const TensorInfo& weights,
361 const Optional<TensorInfo>& biases,
362 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
363
David Becke97c6e02018-10-03 13:09:28 +0100364}; // class ILayerSupport
365
David Beck3e9e1152018-10-17 14:17:50 +0100366using ILayerSupportSharedPtr = std::shared_ptr<ILayerSupport>;
367
David Becke97c6e02018-10-03 13:09:28 +0100368} // namespace armnn