13 #include <boost/numeric/conversion/cast.hpp> 30 : m_NumDimensions(numDimensions)
32 if (numDimensions < 1)
42 std::fill(m_Dimensions.begin(), m_Dimensions.begin() + m_NumDimensions, 0);
46 : m_NumDimensions(numDimensions)
48 if (numDimensions < 1)
58 if (dimensionSizes ==
nullptr)
63 std::copy(dimensionSizes, dimensionSizes + numDimensions, m_Dimensions.begin());
72 : m_NumDimensions(other.m_NumDimensions)
74 std::copy(other.m_Dimensions.cbegin(), other.m_Dimensions.cbegin() + other.m_NumDimensions, m_Dimensions.begin());
79 m_NumDimensions = other.m_NumDimensions;
80 std::copy(other.m_Dimensions.cbegin(), other.m_Dimensions.cbegin() + other.m_NumDimensions, m_Dimensions.begin());
86 CheckDimensionIndex(i);
87 return m_Dimensions.at(i);
92 CheckDimensionIndex(i);
93 return m_Dimensions.at(i);
98 return ((m_NumDimensions == other.m_NumDimensions) &&
99 std::equal(m_Dimensions.cbegin(), m_Dimensions.cbegin() + m_NumDimensions, other.m_Dimensions.cbegin()));
104 return !(*
this == other);
109 if (m_NumDimensions == 0)
114 unsigned int count = 1;
115 for (
unsigned int i = 0; i < m_NumDimensions; i++)
117 count *= m_Dimensions[i];
123 void TensorShape::CheckDimensionIndex(
unsigned int i)
const 125 if (i >= m_NumDimensions)
127 std::stringstream errorMessage;
128 errorMessage <<
"Invalid dimension index: " << i <<
" (number of dimensions is " << m_NumDimensions <<
")";
144 float quantizationScale,
145 int32_t quantizationOffset)
147 , m_DataType(dataType)
154 const unsigned int* dimensionSizes,
156 float quantizationScale,
157 int32_t quantizationOffset)
158 : m_Shape(numDimensions, dimensionSizes)
159 , m_DataType(dataType)
167 const std::vector<float>& quantizationScales,
168 unsigned int quantizationDim)
170 , m_DataType(dataType)
177 const unsigned int* dimensionSizes,
179 const std::vector<float>& quantizationScales,
180 unsigned int quantizationDim)
181 : m_Shape(numDimensions, dimensionSizes)
182 , m_DataType(dataType)
189 : m_Shape(other.m_Shape)
190 , m_DataType(other.m_DataType)
191 , m_Quantization(other.m_Quantization)
196 m_Shape = other.m_Shape;
197 m_DataType = other.m_DataType;
198 m_Quantization = other.m_Quantization;
204 return ((m_Shape == other.m_Shape) &&
205 (m_DataType == other.m_DataType) &&
206 (m_Quantization == other.m_Quantization));
211 return !(*
this == other);
223 match &= m_DataType == other.m_DataType;
240 return m_Quantization.m_Scales;
245 m_Quantization.m_Scales = scales;
250 if (m_Quantization.m_Scales.empty())
257 return m_Quantization.m_Scales[0];
262 m_Quantization.m_Scales = { scale };
267 if (!m_Quantization.m_Offset.has_value())
273 return m_Quantization.m_Offset.value();
278 m_Quantization.m_Offset = MakeOptional<int32_t>(offset);
283 return m_Quantization.m_QuantizationDim;
288 m_Quantization.m_QuantizationDim = quantizationDim;
300 template<
typename MemoryType>
302 : m_MemoryArea(nullptr)
306 template<
typename MemoryType>
308 : m_MemoryArea(memoryArea)
313 template<
typename MemoryType>
320 template<
typename MemoryType>
323 m_Info = other.m_Info;
unsigned int GetNumElements() const
bool operator!=(const TensorShape &other) const
unsigned int operator[](unsigned int i) const
bool IsTypeSpaceMatch(const TensorInfo &other) const
Check that the types are the same and, if quantize, that the quantization parameters are the same...
TensorShape & operator=(const TensorShape &other)
constexpr bool IsQuantizedType()
bool HasPerAxisQuantization() const
Optional< unsigned int > GetQuantizationDim() const
unsigned int GetNumBytes() const
Copyright (c) 2020 ARM Limited.
std::vector< float > GetQuantizationScales() const
bool HasMultipleQuantizationScales() const
bool operator==(const TensorShape &other) const
TensorShape()
Empty (invalid) constructor.
TensorInfo()
Empty (invalid) constructor.
int32_t GetQuantizationOffset() const
float GetQuantizationScale() const
void SetQuantizationScale(float scale)
#define ARMNN_ASSERT(COND)
std::enable_if_t< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > numeric_cast(Source source)
const TensorInfo & GetInfo() const
TensorInfo & operator=(const TensorInfo &other)
void SetQuantizationDim(const Optional< unsigned int > &quantizationDim)
bool operator==(const TensorInfo &other) const
bool operator!=(const TensorInfo &other) const
BaseTensor()
Empty (invalid) constructor.
void SetQuantizationOffset(int32_t offset)
void SetQuantizationScales(const std::vector< float > &scales)
constexpr unsigned int MaxNumOfTensorDimensions
unsigned int GetNumElements() const
constexpr unsigned int GetDataTypeSize(DataType dataType)