1/**
2 * Copyright 2021 Huawei Technologies Co., Ltd
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17/**
18 * @addtogroup MindSpore
19 * @{
20 *
21 * @brief 提供MindSpore Lite的模型推理相关接口。
22 *
23 * @Syscap SystemCapability.Ai.MindSpore
24 * @since 9
25 */
26
27/**
28 * @file tensor.h
29 *
30 * @brief 提供了张量相关的接口,可用于创建和修改张量信息。
31 *
32 * @library libmindspore_lite_ndk.so
33 * @since 9
34 */
35#ifndef MINDSPORE_INCLUDE_C_API_TENSOE_C_H
36#define MINDSPORE_INCLUDE_C_API_TENSOE_C_H
37
38#include <stddef.h>
39#include "mindspore/status.h"
40#include "mindspore/types.h"
41#include "mindspore/data_type.h"
42#include "mindspore/format.h"
43
44#ifdef __cplusplus
45extern "C" {
46#endif
47
48typedef void *OH_AI_TensorHandle;
49
50/**
51 * @brief Create a tensor object.
52 * @param name The name of the tensor.
53 * @param type The data type of the tensor.
54 * @param shape The shape of the tensor.
55 * @param shape_num The num of the shape.
56 * @param data The data pointer that points to allocated memory.
57 * @param data_len The length of the memory, in bytes.
58 * @return Tensor object handle.
59 * @since 9
60 */
61OH_AI_API OH_AI_TensorHandle OH_AI_TensorCreate(const char *name, OH_AI_DataType type, const int64_t *shape,
62                                                size_t shape_num, const void *data, size_t data_len);
63
64/**
65 * @brief Destroy the tensor object.
66 * @param tensor Tensor object handle address.
67 * @since 9
68 */
69OH_AI_API void OH_AI_TensorDestroy(OH_AI_TensorHandle *tensor);
70
71/**
72 * @brief Obtain a deep copy of the tensor.
73 * @param tensor Tensor object handle.
74 * @return Tensor object handle.
75 * @since 9
76 */
77OH_AI_API OH_AI_TensorHandle OH_AI_TensorClone(OH_AI_TensorHandle tensor);
78
79/**
80 * @brief Set the name for the tensor.
81 * @param tensor Tensor object handle.
82 * @param name The name of the tensor.
83 * @since 9
84 */
85OH_AI_API void OH_AI_TensorSetName(OH_AI_TensorHandle tensor, const char *name);
86
87/**
88 * @brief Obtain the name of the tensor.
89 * @param tensor Tensor object handle.
90 * @return The name of the tensor.
91 * @since 9
92 */
93OH_AI_API const char *OH_AI_TensorGetName(const OH_AI_TensorHandle tensor);
94
95/**
96 * @brief Set the data type for the tensor.
97 * @param tensor Tensor object handle.
98 * @param type The data type of the tensor.
99 * @since 9
100 */
101OH_AI_API void OH_AI_TensorSetDataType(OH_AI_TensorHandle tensor, OH_AI_DataType type);
102
103/**
104 * @brief Obtain the data type of the tensor.
105 * @param tensor Tensor object handle.
106 * @return The date type of the tensor.
107 * @since 9
108 */
109OH_AI_API OH_AI_DataType OH_AI_TensorGetDataType(const OH_AI_TensorHandle tensor);
110
111/**
112 * @brief Set the shape for the tensor.
113 * @param tensor Tensor object handle.
114 * @param shape The shape array.
115 * @param shape_num Dimension of shape.
116 * @since 9
117 */
118OH_AI_API void OH_AI_TensorSetShape(OH_AI_TensorHandle tensor, const int64_t *shape, size_t shape_num);
119
120/**
121 * @brief Obtain the shape of the tensor.
122 * @param tensor Tensor object handle.
123 * @param shape_num Dimension of shape.
124 * @return The shape array of the tensor.
125 * @since 9
126 */
127OH_AI_API const int64_t *OH_AI_TensorGetShape(const OH_AI_TensorHandle tensor, size_t *shape_num);
128
129/**
130 * @brief Set the format for the tensor.
131 * @param tensor Tensor object handle.
132 * @param format The format of the tensor.
133 * @since 9
134 */
135OH_AI_API void OH_AI_TensorSetFormat(OH_AI_TensorHandle tensor, OH_AI_Format format);
136
137/**
138 * @brief Obtain the format of the tensor.
139 * @param tensor Tensor object handle.
140 * @return The format of the tensor.
141 * @since 9
142 */
143OH_AI_API OH_AI_Format OH_AI_TensorGetFormat(const OH_AI_TensorHandle tensor);
144
145/**
146 * @brief Obtain the data for the tensor.
147 * @param tensor Tensor object handle.
148 * @param data A pointer to the data of the tensor.
149 * @since 9
150 */
151OH_AI_API void OH_AI_TensorSetData(OH_AI_TensorHandle tensor, void *data);
152
153/**
154 * @brief Obtain the data pointer of the tensor.
155 * @param tensor Tensor object handle.
156 * @return The data pointer of the tensor.
157 * @since 9
158 */
159OH_AI_API const void *OH_AI_TensorGetData(const OH_AI_TensorHandle tensor);
160
161/**
162 * @brief Obtain the mutable data pointer of the tensor. If the internal data is empty, it will allocate memory.
163 * @param tensor Tensor object handle.
164 * @return The data pointer of the tensor.
165 * @since 9
166 */
167OH_AI_API void *OH_AI_TensorGetMutableData(const OH_AI_TensorHandle tensor);
168
169/**
170 * @brief Obtain the element number of the tensor.
171 * @param tensor Tensor object handle.
172 * @return The element number of the tensor.
173 * @since 9
174 */
175OH_AI_API int64_t OH_AI_TensorGetElementNum(const OH_AI_TensorHandle tensor);
176
177/**
178 * @brief Obtain the data size fo the tensor.
179 * @param tensor Tensor object handle.
180 * @return The data size of the tensor.
181 * @since 9
182 */
183OH_AI_API size_t OH_AI_TensorGetDataSize(const OH_AI_TensorHandle tensor);
184
185/**
186 * @brief Set the data for the tensor with user-allocated data buffer.
187 *
188 * The main purpose of this interface is providing a way of using memory already allocated by user as the Model's
189 * input, but not which allocated inside the Model object. It can reduce one copy. \n
190 * Note: The tensor won't free the data provided by invoker. Invoker has the responsibility to free it. And this
191 * free action should not be preformed before destruction of the tensor. \n
192 *
193 * @param tensor Tensor object handle.
194 * @param data A pointer to the user data buffer.
195 * @param data the byte size of the user data buffer.
196 * @return OH_AI_STATUS_SUCCESS if success, or detail error code if failed.
197 * @since 10
198 */
199OH_AI_API OH_AI_Status OH_AI_TensorSetUserData(OH_AI_TensorHandle tensor, void *data, size_t data_size);
200
201#ifdef __cplusplus
202}
203#endif
204#endif  // MINDSPORE_INCLUDE_C_API_TENSOE_C_H
205