1 //
2 // Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5
6 #include "CommonTestUtils.hpp"
7
8 #include <armnn/backends/IBackendInternal.hpp>
9
10 using namespace armnn;
11
CreateInputsFrom(Layer * layer,std::vector<unsigned int> ignoreSlots)12 SubgraphView::InputSlots CreateInputsFrom(Layer* layer,
13 std::vector<unsigned int> ignoreSlots)
14 {
15 SubgraphView::InputSlots result;
16 for (auto&& it = layer->BeginInputSlots(); it != layer->EndInputSlots(); ++it)
17 {
18 if (std::find(ignoreSlots.begin(), ignoreSlots.end(), it->GetSlotIndex()) != ignoreSlots.end())
19 {
20 continue;
21 }
22 else
23 {
24 result.push_back(&(*it));
25 }
26 }
27 return result;
28 }
29
30 // ignoreSlots assumes you want to ignore the same slots all on layers within the vector
CreateInputsFrom(const std::vector<Layer * > & layers,std::vector<unsigned int> ignoreSlots)31 SubgraphView::InputSlots CreateInputsFrom(const std::vector<Layer*>& layers,
32 std::vector<unsigned int> ignoreSlots)
33 {
34 SubgraphView::InputSlots result;
35 for (auto&& layer: layers)
36 {
37 for (auto&& it = layer->BeginInputSlots(); it != layer->EndInputSlots(); ++it)
38 {
39 if (std::find(ignoreSlots.begin(), ignoreSlots.end(), it->GetSlotIndex()) != ignoreSlots.end())
40 {
41 continue;
42 }
43 else
44 {
45 result.push_back(&(*it));
46 }
47 }
48 }
49 return result;
50 }
51
CreateOutputsFrom(const std::vector<Layer * > & layers)52 SubgraphView::OutputSlots CreateOutputsFrom(const std::vector<Layer*>& layers)
53 {
54 SubgraphView::OutputSlots result;
55 for (auto && layer : layers)
56 {
57 for (auto&& it = layer->BeginOutputSlots(); it != layer->EndOutputSlots(); ++it)
58 {
59 result.push_back(&(*it));
60 }
61 }
62 return result;
63 }
64
CreateSubgraphViewFrom(SubgraphView::InputSlots && inputs,SubgraphView::OutputSlots && outputs,SubgraphView::Layers && layers)65 SubgraphView::SubgraphViewPtr CreateSubgraphViewFrom(SubgraphView::InputSlots&& inputs,
66 SubgraphView::OutputSlots&& outputs,
67 SubgraphView::Layers&& layers)
68 {
69 return std::make_unique<SubgraphView>(std::move(inputs), std::move(outputs), std::move(layers));
70 }
71
CreateBackendObject(const armnn::BackendId & backendId)72 armnn::IBackendInternalUniquePtr CreateBackendObject(const armnn::BackendId& backendId)
73 {
74 auto& backendRegistry = BackendRegistryInstance();
75 auto backendFactory = backendRegistry.GetFactory(backendId);
76 auto backendObjPtr = backendFactory();
77
78 return backendObjPtr;
79 }
80
MakeTensorShape(unsigned int batches,unsigned int channels,unsigned int height,unsigned int width,armnn::DataLayout layout)81 armnn::TensorShape MakeTensorShape(unsigned int batches,
82 unsigned int channels,
83 unsigned int height,
84 unsigned int width,
85 armnn::DataLayout layout)
86 {
87 using namespace armnn;
88 switch (layout)
89 {
90 case DataLayout::NCHW:
91 return TensorShape{ batches, channels, height, width };
92 case DataLayout::NHWC:
93 return TensorShape{ batches, height, width, channels };
94 default:
95 throw InvalidArgumentException(std::string("Unsupported data layout: ") + GetDataLayoutName(layout));
96 }
97 }
98