Skip to content

Commit be95cda

Browse files
ai-edge-botcopybara-github
authored andcommitted
Making TfLiteQuantizationClone available to help clone TfLiteQuantization struct
PiperOrigin-RevId: 775055123
1 parent 0cb7c0d commit be95cda

File tree

2 files changed

+39
-31
lines changed

2 files changed

+39
-31
lines changed

tflite/core/c/common.cc

Lines changed: 35 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,41 @@ void TfLiteVarArrayFree(T* a) {
104104

105105
#ifndef TF_LITE_STATIC_MEMORY
106106

107+
TfLiteSparsity TfLiteSparsityClone(const TfLiteSparsity& src) {
108+
TfLiteSparsity dst = src;
109+
dst.traversal_order = TfLiteIntArrayCopy(src.traversal_order);
110+
dst.block_map = TfLiteIntArrayCopy(src.block_map);
111+
if (src.dim_metadata) {
112+
dst.dim_metadata = reinterpret_cast<TfLiteDimensionMetadata*>(
113+
calloc(1, sizeof(TfLiteDimensionMetadata) * src.dim_metadata_size));
114+
for (int i = 0; i < src.dim_metadata_size; ++i) {
115+
dst.dim_metadata[i] = src.dim_metadata[i];
116+
dst.dim_metadata[i].array_segments =
117+
TfLiteIntArrayCopy(src.dim_metadata[i].array_segments);
118+
dst.dim_metadata[i].array_indices =
119+
TfLiteIntArrayCopy(src.dim_metadata[i].array_indices);
120+
}
121+
}
122+
return dst;
123+
}
124+
125+
// Clones the source sparsity to a newly allocated object.
126+
TfLiteSparsity* TfLiteSparsityClone(const TfLiteSparsity* const src) {
127+
if (!src) {
128+
return nullptr;
129+
}
130+
TfLiteSparsity* dst =
131+
reinterpret_cast<TfLiteSparsity*>(calloc(1, sizeof(TfLiteSparsity)));
132+
*dst = TfLiteSparsityClone(*src);
133+
return dst;
134+
}
135+
136+
#endif // TF_LITE_STATIC_MEMORY
137+
138+
} // namespace
139+
140+
#ifndef TF_LITE_STATIC_MEMORY
141+
107142
TfLiteQuantization TfLiteQuantizationClone(const TfLiteQuantization& src) {
108143
TfLiteQuantization dst;
109144
dst.type = src.type;
@@ -136,39 +171,8 @@ TfLiteQuantization TfLiteQuantizationClone(const TfLiteQuantization& src) {
136171
return dst;
137172
}
138173

139-
TfLiteSparsity TfLiteSparsityClone(const TfLiteSparsity& src) {
140-
TfLiteSparsity dst = src;
141-
dst.traversal_order = TfLiteIntArrayCopy(src.traversal_order);
142-
dst.block_map = TfLiteIntArrayCopy(src.block_map);
143-
if (src.dim_metadata) {
144-
dst.dim_metadata = reinterpret_cast<TfLiteDimensionMetadata*>(
145-
calloc(1, sizeof(TfLiteDimensionMetadata) * src.dim_metadata_size));
146-
for (int i = 0; i < src.dim_metadata_size; ++i) {
147-
dst.dim_metadata[i] = src.dim_metadata[i];
148-
dst.dim_metadata[i].array_segments =
149-
TfLiteIntArrayCopy(src.dim_metadata[i].array_segments);
150-
dst.dim_metadata[i].array_indices =
151-
TfLiteIntArrayCopy(src.dim_metadata[i].array_indices);
152-
}
153-
}
154-
return dst;
155-
}
156-
157-
// Clones the source sparsity to a newly allocated object.
158-
TfLiteSparsity* TfLiteSparsityClone(const TfLiteSparsity* const src) {
159-
if (!src) {
160-
return nullptr;
161-
}
162-
TfLiteSparsity* dst =
163-
reinterpret_cast<TfLiteSparsity*>(calloc(1, sizeof(TfLiteSparsity)));
164-
*dst = TfLiteSparsityClone(*src);
165-
return dst;
166-
}
167-
168174
#endif // TF_LITE_STATIC_MEMORY
169175

170-
} // namespace
171-
172176
extern "C" {
173177

174178
size_t TfLiteIntArrayGetSizeInBytes(int size) {

tflite/core/c/common.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -788,6 +788,7 @@ TfLiteStatus TfLiteTensorRealloc(size_t num_bytes, TfLiteTensor* tensor);
788788
/// If all dimensions are known, this is the same as `t->dims`.
789789
/// (`dims_signature` is NULL or empty if all dimensions are known.)
790790
const TfLiteIntArray* TfLiteTensorGetDimsSignature(const TfLiteTensor* t);
791+
791792
#endif // TF_LITE_STATIC_MEMORY
792793

793794
/// WARNING: This is an experimental interface that is subject to change.
@@ -1633,5 +1634,8 @@ TfLiteStatus TfLiteTensorVariantRealloc(TfLiteTensor* t,
16331634
return kTfLiteOk;
16341635
}
16351636

1637+
// Returns a copy of the quantization parameters of the tensor.
1638+
TfLiteQuantization TfLiteQuantizationClone(const TfLiteQuantization& src);
1639+
16361640
#endif // __cplusplus
16371641
#endif // TENSORFLOW_LITE_CORE_C_COMMON_H_

0 commit comments

Comments
 (0)