blob: 792908c619e7ddd54fb1be8fda9d440f728b9dee [file] [log] [blame]
Francis Murtagh9270d9e2022-08-12 13:54:17 +01001//
2// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
8// List of Layer Support Rules common to TOSA backends only, for use with CheckSupportRule()
9
10struct TosaOperatorAttributeOfAny : public Rule
11{
12 template<typename Container>
13 explicit TosaOperatorAttributeOfAny(TosaSerializationOperator* op, const Container& c)
14 {
15 m_Res = std::any_of(c.begin(), c.end(), [&op](Attribute attribute)
16 {
17 return attribute == op->GetAttributeType();
18 });
19 }
20};
21
22struct TosaTypeAnyOf : public Rule
23{
24 template<typename Container>
25 TosaTypeAnyOf(TosaSerializationTensor* tensor, const Container& c)
26 {
27 m_Res = std::any_of(c.begin(), c.end(), [&tensor](DType dt)
28 {
29 return dt == tensor->GetDtype();
30 });
31 }
32};
33
34struct TosaTensorNumDimensionsWithinBounds : public Rule
35{
36 explicit TosaTensorNumDimensionsWithinBounds(TosaSerializationTensor* tensor)
37 {
38 m_Res = (tensor->GetShape().size() <= MaxNumOfTensorDimensions) || (!tensor->GetShape().empty());
39 }
40};
Cathal Corbettbd18eab2022-11-15 12:56:16 +000041
42struct TosaAssertSize : public Rule
43{
44 template<typename Container>
45 explicit TosaAssertSize(const Container& c1, const Container& c2)
46 {
47 m_Res = (c1.size() == c2.size());
48 }
49};
50
51struct TosaContainerContains : public Rule
52{
53 explicit TosaContainerContains(std::tuple<DType, DType>& check, const std::vector<std::tuple<DType, DType>>& c)
54 {
55 for (auto item: c)
56 {
57 if (std::get<0>(check) == std::get<0>(item)
58 && std::get<1>(check) == std::get<1>(item))
59 {
60 m_Res = true;
61 return;
62 }
63 }
64 m_Res = false;
65 }
66};