19 const std::vector<TensorInfo>& infos,
30 *(PolymorphicDowncast<const ActivationDescriptor*>(&
descriptor)),
38 return IsArgMinMaxSupported(infos[0],
40 *(PolymorphicDowncast<const ArgMinMaxDescriptor*>(&
descriptor)),
49 *(PolymorphicDowncast<const BatchNormalizationDescriptor*>
55 *(PolymorphicDowncast<const BatchToSpaceNdDescriptor*>(&
descriptor)),
59 return IsComparisonSupported(infos[0],
62 *(PolymorphicDowncast<const ComparisonDescriptor*>(&
descriptor)),
67 std::vector<const TensorInfo*> inputInfos;
68 for (uint32_t i = 0; i < (infos.size() - 1); i++)
70 inputInfos.push_back(&infos[i]);
73 infos[infos.size() - 1],
74 *(PolymorphicDowncast<const OriginsDescriptor*>(&
descriptor)),
90 if (infos.size() != 4)
93 "TensorInfos. TensorInfos should be of format: "
94 "{input, output, weights, biases}.");
97 auto desc = *(PolymorphicDowncast<const Convolution2dDescriptor*>(&
descriptor));
122 return IsDepthToSpaceSupported(infos[0],
124 *(PolymorphicDowncast<const DepthToSpaceDescriptor*>(&
descriptor)),
128 if (infos.size() != 4)
131 "TensorInfos. TensorInfos should be of format: "
132 "{input, output, weights, biases}.");
135 auto desc = *(PolymorphicDowncast<const DepthwiseConvolution2dDescriptor*>(&
descriptor));
160 return IsDetectionPostProcessSupported(infos[0],
167 *(PolymorphicDowncast<const DetectionPostProcessDescriptor*>
176 return IsElementwiseUnarySupported(infos[0],
178 *(PolymorphicDowncast<const ElementwiseUnaryDescriptor*>
183 *(PolymorphicDowncast<const FakeQuantizationDescriptor*>
187 return IsFillSupported(infos[0],
189 *(PolymorphicDowncast<const FillDescriptor*>(&
descriptor)),
198 *(PolymorphicDowncast<const FullyConnectedDescriptor*>(&
descriptor)),
201 return IsGatherSupported(infos[0],
204 *(PolymorphicDowncast<const GatherDescriptor*>(&
descriptor)),
209 return IsInstanceNormalizationSupported(infos[0],
211 *(PolymorphicDowncast<const InstanceNormalizationDescriptor*>
217 *(PolymorphicDowncast<const L2NormalizationDescriptor*>
221 return IsLogicalBinarySupported(infos[0],
224 *(PolymorphicDowncast<const LogicalBinaryDescriptor*>(&
descriptor)),
227 return IsLogSoftmaxSupported(infos[0],
229 *(PolymorphicDowncast<const LogSoftmaxDescriptor*>(&
descriptor)),
239 *(PolymorphicDowncast<const LstmDescriptor*>(&
descriptor)),
240 lstmParamsInfo.
value(),
243 return IsQLstmSupported(infos[0],
249 *(PolymorphicDowncast<const QLstmDescriptor*>(&
descriptor)),
250 lstmParamsInfo.
value(),
262 *(PolymorphicDowncast<const MeanDescriptor*>(&
descriptor)),
269 return IsMemImportSupported(infos[0],
290 *(PolymorphicDowncast<const NormalizationDescriptor*>(&
descriptor)),
297 *(PolymorphicDowncast<const PadDescriptor*>(&
descriptor)),
302 *(PolymorphicDowncast<const PermuteDescriptor*>(&
descriptor)),
307 *(PolymorphicDowncast<const Pooling2dDescriptor*>(&
descriptor)),
311 *(PolymorphicDowncast<const PreCompiledDescriptor*>(&
descriptor)),
319 return IsQuantizeSupported(infos[0],
328 quantizedLstmParamsInfo.
value(),
333 *(PolymorphicDowncast<const ReshapeDescriptor*>(&
descriptor)),
340 *(PolymorphicDowncast<const ResizeDescriptor*>(&
descriptor)),
345 *(PolymorphicDowncast<const ReduceDescriptor*>(&
descriptor)),
348 return IsSliceSupported(infos[0],
350 *(PolymorphicDowncast<const SliceDescriptor*>(&
descriptor)),
355 *(PolymorphicDowncast<const SoftmaxDescriptor*>(&
descriptor)),
360 *(PolymorphicDowncast<const SpaceToBatchNdDescriptor*>(&
descriptor)),
365 *(PolymorphicDowncast<const SpaceToDepthDescriptor*>(&
descriptor)),
369 std::vector<TensorInfo> outputInfos;
370 for (uint32_t i = 1; i < infos.size(); i++)
372 outputInfos.push_back(infos[i]);
375 {outputInfos.begin(), outputInfos.end()},
376 *(PolymorphicDowncast<const ViewsDescriptor*>(&
descriptor)),
381 std::vector<const TensorInfo*> inputInfos;
382 for (uint32_t i = 0; i < infos.size() - 1; i++)
384 inputInfos.push_back(&infos[i]);
387 infos[infos.size() - 1],
388 *(PolymorphicDowncast<const StackDescriptor*>(&
descriptor)),
393 auto desc = *(PolymorphicDowncast<const StandInDescriptor*>(&
descriptor));
395 if (infos.size() != (desc.m_NumInputs + desc.m_NumOutputs))
398 "the combined number of input and output slots assigned "
399 "to the StandIn descriptor");
402 std::vector<const TensorInfo*> inputInfos;
403 for (uint32_t i = 0; i < desc.m_NumInputs; i++)
405 inputInfos.push_back(&infos[i]);
407 std::vector<const TensorInfo*> outputInfos;
408 for (uint32_t i = desc.m_NumInputs; i < infos.size(); i++)
410 outputInfos.push_back(&infos[i]);
413 return IsStandInSupported(inputInfos,
421 *(PolymorphicDowncast<const StridedSliceDescriptor*>(&
descriptor)),
435 return IsTransposeSupported(infos[0],
437 *(PolymorphicDowncast<const TransposeDescriptor*>(&
descriptor)),
441 if (infos.size() != 4)
444 "TensorInfos. TensorInfos should be of format: "
445 "{input, output, weights, biases}.");
448 auto desc = *(PolymorphicDowncast<const TransposeConvolution2dDescriptor*>(&
descriptor));
476 if (infos.size() != 6)
479 "should be of format: {input, outputStateIn, cellStateIn, "
480 "hiddenStateOutputVal, cellStateOutputVal, output}");
482 auto desc = *(PolymorphicDowncast<const UnidirectionalSequenceLstmDescriptor*>(&
descriptor));
483 return IsUnidirectionalSequenceLstmSupported(infos[0],
490 lstmParamsInfo.
value(),
494 return IsChannelShuffleSupported(infos[0],
496 *(PolymorphicDowncast<const ChannelShuffleDescriptor*>(&
descriptor)),
500 if (infos.size() != 4)
503 "TensorInfos. TensorInfos should be of format: "
504 "{input, output, weights, biases}.");
507 auto desc = *(PolymorphicDowncast<const Convolution3dDescriptor*>(&
descriptor));
510 return IsConvolution3dSupported(infos[0],
519 return IsConvolution3dSupported(infos[0],
528 return IsPooling3dSupported(infos[0],
530 *(PolymorphicDowncast<const Pooling3dDescriptor*>(&
descriptor)),
547 const TensorInfo& input1,
548 const TensorInfo& output,
549 Optional<std::string&> reasonIfUnsupported)
const
555 bool ILayerSupport::IsArgMinMaxSupported(
const TensorInfo& input,
556 const TensorInfo& output,
557 const ArgMinMaxDescriptor& descriptor,
558 Optional<std::string&> reasonIfUnsupported)
const
565 const TensorInfo& output,
566 const TensorInfo& mean,
567 const TensorInfo& var,
568 const TensorInfo& beta,
569 const TensorInfo& gamma,
570 const BatchNormalizationDescriptor& descriptor,
571 Optional<std::string&> reasonIfUnsupported)
const
578 const TensorInfo& output,
579 const BatchToSpaceNdDescriptor& descriptor,
580 Optional<std::string&> reasonIfUnsupported)
const
586 bool ILayerSupport::IsCastSupported(
const TensorInfo& input,
587 const TensorInfo& output,
588 Optional<std::string&> reasonIfUnsupported)
const
594 bool ILayerSupport::IsChannelShuffleSupported(
const TensorInfo& input,
595 const TensorInfo& output,
596 const ChannelShuffleDescriptor& descriptor,
597 Optional<std::string&> reasonIfUnsupported)
const
603 bool ILayerSupport::IsComparisonSupported(
const TensorInfo& input0,
604 const TensorInfo& input1,
605 const TensorInfo& output,
606 const ComparisonDescriptor& descriptor,
607 Optional<std::string&> reasonIfUnsupported)
const
614 const TensorInfo& output,
615 const OriginsDescriptor& descriptor,
616 Optional<std::string&> reasonIfUnsupported)
const
623 Optional<std::string&> reasonIfUnsupported)
const
630 const TensorInfo& output,
631 Optional<std::string&> reasonIfUnsupported)
const
638 const TensorInfo& output,
639 Optional<std::string&> reasonIfUnsupported)
const
646 const TensorInfo& output,
647 const Convolution2dDescriptor& descriptor,
648 const TensorInfo& weights,
649 const Optional<TensorInfo>& biases,
650 Optional<std::string&> reasonIfUnsupported)
const
656 bool ILayerSupport::IsConvolution3dSupported(
const TensorInfo& input,
657 const TensorInfo& output,
658 const Convolution3dDescriptor& descriptor,
659 const TensorInfo& weights,
660 const Optional<TensorInfo>& biases,
661 Optional<std::string&> reasonIfUnsupported)
const
668 const TensorInfo& output,
669 Optional<std::string&> reasonIfUnsupported)
const
675 bool ILayerSupport::IsDepthToSpaceSupported(
const TensorInfo& input,
676 const TensorInfo& output,
678 Optional<std::string&> reasonIfUnsupported)
const
685 const TensorInfo& input,
686 const TensorInfo& output,
687 const DepthwiseConvolution2dDescriptor& descriptor,
688 const TensorInfo& weights,
689 const Optional<TensorInfo>& biases,
690 Optional<std::string&> reasonIfUnsupported)
const
702 const TensorInfo& output,
703 Optional<std::string&> reasonIfUnsupported)
const
709 bool ILayerSupport::IsDetectionPostProcessSupported(
const TensorInfo& boxEncodings,
710 const TensorInfo& scores,
711 const TensorInfo& anchors,
712 const TensorInfo& detectionBoxes,
713 const TensorInfo& detectionClasses,
714 const TensorInfo& detectionScores,
715 const TensorInfo& numDetections,
716 const DetectionPostProcessDescriptor& descriptor,
717 Optional<std::string&> reasonIfUnsupported)
const
731 bool ILayerSupport::IsDilatedDepthwiseConvolutionSupported(
732 const TensorInfo& input,
733 const TensorInfo& output,
734 const DepthwiseConvolution2dDescriptor& descriptor,
735 const TensorInfo& weights,
736 const Optional<TensorInfo>& biases,
737 Optional<std::string&> reasonIfUnsupported)
const
744 const TensorInfo& input1,
745 const TensorInfo& output,
746 Optional<std::string&> reasonIfUnsupported)
const
752 bool ILayerSupport::IsElementwiseUnarySupported(
const TensorInfo& input,
753 const TensorInfo& output,
754 const ElementwiseUnaryDescriptor& descriptor,
755 Optional<std::string&> reasonIfUnsupported)
const
762 const FakeQuantizationDescriptor& descriptor,
763 Optional<std::string&> reasonIfUnsupported)
const
769 bool ILayerSupport::IsFillSupported(
const TensorInfo& input,
770 const TensorInfo& output,
771 const FillDescriptor& descriptor,
772 Optional<std::string&> reasonIfUnsupported)
const
779 const TensorInfo& output,
780 Optional<std::string&> reasonIfUnsupported)
const
787 const TensorInfo& output,
788 const TensorInfo& weights,
789 const TensorInfo& biases,
790 const FullyConnectedDescriptor& descriptor,
791 Optional<std::string&> reasonIfUnsupported)
const
797 bool ILayerSupport::IsGatherSupported(
const TensorInfo& input0,
798 const TensorInfo& input1,
799 const TensorInfo& output,
800 const GatherDescriptor& descriptor,
801 Optional<std::string&> reasonIfUnsupported)
const
808 Optional<std::string&> reasonIfUnsupported)
const
814 bool ILayerSupport::IsInstanceNormalizationSupported(
815 const TensorInfo& input,
816 const TensorInfo& output,
817 const InstanceNormalizationDescriptor& descriptor,
818 Optional<std::string&> reasonIfUnsupported)
const
825 const TensorInfo& output,
826 const L2NormalizationDescriptor& descriptor,
827 Optional<std::string&> reasonIfUnsupported)
const
833 bool ILayerSupport::IsLogicalBinarySupported(
const TensorInfo& input0,
834 const TensorInfo& input1,
835 const TensorInfo& output,
836 const LogicalBinaryDescriptor& descriptor,
837 Optional<std::string&> reasonIfUnsupported)
const
843 bool ILayerSupport::IsLogicalUnarySupported(
const TensorInfo& input,
844 const TensorInfo& output,
845 const ElementwiseUnaryDescriptor& descriptor,
846 Optional<std::string&> reasonIfUnsupported)
const
852 bool ILayerSupport::IsLogSoftmaxSupported(
const TensorInfo& input,
853 const TensorInfo& output,
855 Optional<std::string&> reasonIfUnsupported)
const
862 const TensorInfo& outputStateIn,
863 const TensorInfo& cellStateIn,
864 const TensorInfo& scratchBuffer,
865 const TensorInfo& outputStateOut,
866 const TensorInfo& cellStateOut,
867 const TensorInfo& output,
868 const LstmDescriptor& descriptor,
869 const LstmInputParamsInfo& paramsInfo,
870 Optional<std::string&> reasonIfUnsupported)
const
886 const TensorInfo& input1,
887 const TensorInfo& output,
888 Optional<std::string&> reasonIfUnsupported)
const
895 const TensorInfo& output,
896 const MeanDescriptor& descriptor,
897 Optional<std::string&> reasonIfUnsupported)
const
904 const TensorInfo& output,
905 Optional<std::string&> reasonIfUnsupported)
const
911 bool ILayerSupport::IsMemImportSupported(
const TensorInfo& input,
912 const TensorInfo& output,
913 Optional<std::string&> reasonIfUnsupported)
const
920 const TensorInfo& input1,
921 const TensorInfo& output,
922 Optional<std::string&> reasonIfUnsupported)
const
929 const TensorInfo& input1,
930 const TensorInfo& output,
931 Optional<std::string&> reasonIfUnsupported)
const
938 const TensorInfo& input1,
939 const TensorInfo& output,
940 Optional<std::string&> reasonIfUnsupported)
const
947 const TensorInfo& output,
948 const NormalizationDescriptor& descriptor,
949 Optional<std::string&> reasonIfUnsupported)
const
956 Optional<std::string&> reasonIfUnsupported)
const
963 const TensorInfo& output,
964 const PadDescriptor& descriptor,
965 Optional<std::string&> reasonIfUnsupported)
const
972 const TensorInfo& output,
973 const PermuteDescriptor& descriptor,
974 Optional<std::string&> reasonIfUnsupported)
const
981 const TensorInfo& output,
983 Optional<std::string&> reasonIfUnsupported)
const
989 bool ILayerSupport::IsPooling3dSupported(
const TensorInfo& input,
990 const TensorInfo& output,
992 Optional<std::string&> reasonIfUnsupported)
const
999 const PreCompiledDescriptor& descriptor,
1000 Optional<std::string&> reasonIfUnsupported)
const
1007 const TensorInfo& alpha,
1008 const TensorInfo& output,
1009 Optional<std::string&> reasonIfUnsupported)
const
1015 bool ILayerSupport::IsQuantizeSupported(
const TensorInfo& input,
1016 const TensorInfo& output,
1017 Optional<std::string&> reasonIfUnsupported)
const
1023 bool ILayerSupport::IsQLstmSupported(
const TensorInfo& input,
1024 const TensorInfo& previousOutputIn,
1025 const TensorInfo& previousCellStateIn,
1026 const TensorInfo& outputStateOut,
1027 const TensorInfo& cellStateOut,
1028 const TensorInfo& output,
1029 const QLstmDescriptor& descriptor,
1030 const LstmInputParamsInfo& paramsInfo,
1031 Optional<std::string&> reasonIfUnsupported)
const
1046 const TensorInfo& previousCellStateIn,
1047 const TensorInfo& previousOutputIn,
1048 const TensorInfo& cellStateOut,
1049 const TensorInfo& output,
1050 const QuantizedLstmInputParamsInfo& paramsInfo,
1051 Optional<std::string&> reasonIfUnsupported)
const
1063 bool ILayerSupport::IsRankSupported(
const TensorInfo& input,
1064 const TensorInfo& output,
1065 Optional<std::string&> reasonIfUnsupported)
const
1072 const TensorInfo& output,
1073 const ReduceDescriptor& descriptor,
1074 Optional<std::string&> reasonIfUnsupported)
const
1081 const TensorInfo& output,
1082 const ReshapeDescriptor& descriptor,
1083 Optional<std::string&> reasonIfUnsupported)
const
1090 const TensorInfo& output,
1091 const ResizeDescriptor& descriptor,
1092 Optional<std::string&> reasonIfUnsupported)
const
1098 bool ILayerSupport::IsShapeSupported(
const TensorInfo& input,
1099 const TensorInfo& output,
1100 Optional<std::string&> reasonIfUnsupported)
const
1106 bool ILayerSupport::IsSliceSupported(
const TensorInfo& input,
1107 const TensorInfo& output,
1108 const SliceDescriptor& descriptor,
1109 Optional<std::string&> reasonIfUnsupported)
const
1116 const TensorInfo& output,
1117 const SoftmaxDescriptor& descriptor,
1118 Optional<std::string&> reasonIfUnsupported)
const
1125 const TensorInfo& output,
1126 const SpaceToBatchNdDescriptor& descriptor,
1127 Optional<std::string&> reasonIfUnsupported)
const
1134 const TensorInfo& output,
1135 const SpaceToDepthDescriptor& descriptor,
1136 Optional<std::string&> reasonIfUnsupported)
const
1143 const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
1144 const ViewsDescriptor& descriptor,
1145 Optional<std::string&> reasonIfUnsupported)
const
1152 const TensorInfo& output,
1153 const StackDescriptor& descriptor,
1154 Optional<std::string&> reasonIfUnsupported)
const
1160 bool ILayerSupport::IsStandInSupported(
const std::vector<const TensorInfo*>& inputs,
1161 const std::vector<const TensorInfo*>& outputs,
1162 const StandInDescriptor& descriptor,
1163 Optional<std::string&> reasonIfUnsupported)
const
1170 const TensorInfo& output,
1171 const StridedSliceDescriptor& descriptor,
1172 Optional<std::string&> reasonIfUnsupported)
const
1179 const TensorInfo& input1,
1180 const TensorInfo& output,
1181 Optional<std::string&> reasonIfUnsupported)
const
1188 const TensorInfo& input1,
1189 const TensorInfo& output0,
1190 const TensorInfo& output1,
1191 Optional<std::string&> reasonIfUnsupported)
const
1198 const TensorInfo& input,
1199 const TensorInfo& output,
1200 const TransposeConvolution2dDescriptor& descriptor,
1201 const TensorInfo& weights,
1202 const Optional<TensorInfo>& biases,
1203 Optional<std::string&> reasonIfUnsupported)
const
1209 bool ILayerSupport::IsTransposeSupported(
const TensorInfo& input,
1210 const TensorInfo& output,
1211 const TransposeDescriptor& descriptor,
1212 Optional<std::string&> reasonIfUnsupported)
const
1218 bool ILayerSupport::IsUnidirectionalSequenceLstmSupported(
1219 const TensorInfo& input,
1220 const TensorInfo& outputStateIn,
1221 const TensorInfo& cellStateIn,
1222 const TensorInfo& outputStateOut,
1223 const TensorInfo& cellStateOut,
1224 const TensorInfo& output,
1225 const LstmDescriptor& descriptor,
1226 const LstmInputParamsInfo& paramsInfo,
1227 Optional<std::string&> reasonIfUnsupported)
const