// // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #pragma once #include #include #include #include namespace armnnUtils { template inline armnn::InputTensors MakeInputTensors( const std::vector& inputBindings, const std::vector& inputDataContainers) { armnn::InputTensors inputTensors; const size_t numInputs = inputBindings.size(); if (numInputs != inputDataContainers.size()) { throw armnn::Exception(boost::str(boost::format("Number of inputs does not match number of " "tensor data containers: %1% != %2%") % numInputs % inputDataContainers.size())); } for (size_t i = 0; i < numInputs; i++) { const armnn::BindingPointInfo& inputBinding = inputBindings[i]; const TContainer& inputData = inputDataContainers[i]; boost::apply_visitor([&](auto&& value) { if (value.size() != inputBinding.second.GetNumElements()) { std::ostringstream msg; msg << "Input tensor has incorrect size (expected " << inputBinding.second.GetNumElements() << " got " << value.size(); throw armnn::Exception(msg.str()); } armnn::ConstTensor inputTensor(inputBinding.second, value.data()); inputTensors.push_back(std::make_pair(inputBinding.first, inputTensor)); }, inputData); } return inputTensors; } template inline armnn::OutputTensors MakeOutputTensors( const std::vector& outputBindings, std::vector& outputDataContainers) { armnn::OutputTensors outputTensors; const size_t numOutputs = outputBindings.size(); if (numOutputs != outputDataContainers.size()) { throw armnn::Exception(boost::str(boost::format("Number of outputs does not match number of " "tensor data containers: %1% != %2%") % numOutputs % outputDataContainers.size())); } for (size_t i = 0; i < numOutputs; i++) { const armnn::BindingPointInfo& outputBinding = outputBindings[i]; TContainer& outputData = outputDataContainers[i]; boost::apply_visitor([&](auto&& value) { if (value.size() != outputBinding.second.GetNumElements()) { throw armnn::Exception("Output tensor has incorrect size"); } armnn::Tensor outputTensor(outputBinding.second, value.data()); outputTensors.push_back(std::make_pair(outputBinding.first, outputTensor)); }, outputData); } return outputTensors; } } // namespace armnnUtils