• 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 #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