1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "transform.h"
17 
18 #include "common/log.h"
19 
20 namespace OHOS {
21 namespace NeuralNetworkRuntime {
22 const uint32_t BIT8_TO_BYTE = 1;
23 const uint32_t BIT16_TO_BYTE = 2;
24 const uint32_t BIT32_TO_BYTE = 4;
25 const uint32_t BIT64_TO_BYTE = 8;
26 
GetTypeSize(OH_NN_DataType type)27 uint32_t GetTypeSize(OH_NN_DataType type)
28 {
29     switch (type) {
30         case OH_NN_BOOL:
31             return sizeof(bool);
32         case OH_NN_INT8:
33         case OH_NN_UINT8:
34             return BIT8_TO_BYTE;
35         case OH_NN_INT16:
36         case OH_NN_UINT16:
37         case OH_NN_FLOAT16:
38             return BIT16_TO_BYTE;
39         case OH_NN_INT32:
40         case OH_NN_UINT32:
41         case OH_NN_FLOAT32:
42             return BIT32_TO_BYTE;
43         case OH_NN_INT64:
44         case OH_NN_UINT64:
45         case OH_NN_FLOAT64:
46             return BIT64_TO_BYTE;
47         default:
48             return 0;
49     }
50 }
51 
TransformDataType(OH_NN_DataType type)52 mindspore::lite::DataType NNToMS::TransformDataType(OH_NN_DataType type)
53 {
54     switch (type) {
55         case OH_NN_BOOL:
56             return mindspore::lite::DATA_TYPE_BOOL;
57         case OH_NN_INT8:
58             return mindspore::lite::DATA_TYPE_INT8;
59         case OH_NN_INT16:
60             return mindspore::lite::DATA_TYPE_INT16;
61         case OH_NN_INT32:
62             return mindspore::lite::DATA_TYPE_INT32;
63         case OH_NN_INT64:
64             return mindspore::lite::DATA_TYPE_INT64;
65         case OH_NN_UINT8:
66             return mindspore::lite::DATA_TYPE_UINT8;
67         case OH_NN_UINT16:
68             return mindspore::lite::DATA_TYPE_UINT16;
69         case OH_NN_UINT32:
70             return mindspore::lite::DATA_TYPE_UINT32;
71         case OH_NN_UINT64:
72             return mindspore::lite::DATA_TYPE_UINT64;
73         case OH_NN_FLOAT16:
74             return mindspore::lite::DATA_TYPE_FLOAT16;
75         case OH_NN_FLOAT32:
76             return mindspore::lite::DATA_TYPE_FLOAT32;
77         case OH_NN_FLOAT64:
78             return mindspore::lite::DATA_TYPE_FLOAT64;
79         default:
80             return mindspore::lite::DATA_TYPE_UNKNOWN;
81     }
82 }
83 
TransformFormat(OH_NN_Format type)84 mindspore::lite::Format NNToMS::TransformFormat(OH_NN_Format type)
85 {
86     switch (type) {
87         case OH_NN_FORMAT_NCHW:
88             return mindspore::lite::FORMAT_NCHW;
89         case OH_NN_FORMAT_NHWC:
90             return mindspore::lite::FORMAT_NHWC;
91         default:
92             return mindspore::lite::FORMAT_NHWC;
93     }
94 }
95 
TransfromFusionType(OH_NN_FuseType type)96 mindspore::lite::ActivationType NNToMS::TransfromFusionType(OH_NN_FuseType type)
97 {
98     switch (type) {
99         case OH_NN_FUSED_NONE:
100             return mindspore::lite::ACTIVATION_TYPE_NO_ACTIVATION;
101         case OH_NN_FUSED_RELU:
102             return mindspore::lite::ACTIVATION_TYPE_RELU;
103         case OH_NN_FUSED_RELU6:
104             return mindspore::lite::ACTIVATION_TYPE_RELU6;
105         default:
106             return mindspore::lite::ACTIVATION_TYPE_UNKNOWN;
107     }
108 }
109 
TransformQuantType(OHOS::NeuralNetworkRuntime::Ops::OpsQuantType type)110 mindspore::lite::QuantType NNToMS::TransformQuantType(OHOS::NeuralNetworkRuntime::Ops::OpsQuantType type)
111 {
112     switch (type) {
113         case OHOS::NeuralNetworkRuntime::Ops::OpsQuantType::QUANT_NONE:
114             return mindspore::lite::QUANT_TYPE_NONE;
115         case OHOS::NeuralNetworkRuntime::Ops::OpsQuantType::QUANT_ALL:
116             return mindspore::lite::QUANT_TYPE_ALL;
117         default: return mindspore::lite::QUANT_TYPE_NONE;
118     }
119 }
120 
TransformPadModeValue(int8_t padMode)121 mindspore::lite::PadMode NNToMS::TransformPadModeValue(int8_t padMode)
122 {
123     // The value is an optional value of the int8_t type. The value 0 indicates the same,
124     // and the value 1 indicates valid.
125     return (padMode == 0) ? mindspore::lite::PadMode::PAD_MODE_SAME :
126             mindspore::lite::PadMode::PAD_MODE_VALID;
127 }
128 
TransformDataType(mindspore::lite::DataType type)129 OH_NN_DataType MSToNN::TransformDataType(mindspore::lite::DataType type)
130 {
131     switch (type) {
132         case mindspore::lite::DATA_TYPE_BOOL:
133             return OH_NN_BOOL;
134         case mindspore::lite::DATA_TYPE_INT8:
135             return OH_NN_INT8;
136         case mindspore::lite::DATA_TYPE_INT16:
137             return OH_NN_INT16;
138         case mindspore::lite::DATA_TYPE_INT32:
139             return OH_NN_INT32;
140         case mindspore::lite::DATA_TYPE_INT64:
141             return OH_NN_INT64;
142         case mindspore::lite::DATA_TYPE_UINT8:
143             return OH_NN_UINT8;
144         case mindspore::lite::DATA_TYPE_UINT16:
145             return OH_NN_UINT16;
146         case mindspore::lite::DATA_TYPE_UINT32:
147             return OH_NN_UINT32;
148         case mindspore::lite::DATA_TYPE_UINT64:
149             return OH_NN_UINT64;
150         case mindspore::lite::DATA_TYPE_FLOAT16:
151             return OH_NN_FLOAT16;
152         case mindspore::lite::DATA_TYPE_FLOAT32:
153             return OH_NN_FLOAT32;
154         case mindspore::lite::DATA_TYPE_FLOAT64:
155             return OH_NN_FLOAT64;
156         default:
157             return OH_NN_UNKNOWN;
158     }
159 }
160 
TransformQuantParams(std::vector<mindspore::lite::QuantParam> msQuantParams)161 std::vector<QuantParam> MSToNN::TransformQuantParams(std::vector<mindspore::lite::QuantParam> msQuantParams)
162 {
163     std::vector<QuantParam> nnQuantParam;
164     std::transform(msQuantParams.begin(), msQuantParams.end(), std::back_inserter(nnQuantParam),
165         [](mindspore::lite::QuantParam quantParam) {
166             return (QuantParam){quantParam.numBits, quantParam.scale, quantParam.zeroPoint};
167         });
168     return nnQuantParam;
169 }
170 
TransformFormat(mindspore::lite::Format msFormat)171 OH_NN_Format MSToNN::TransformFormat(mindspore::lite::Format msFormat)
172 {
173     if (msFormat == mindspore::lite::FORMAT_NHWC) {
174         return OH_NN_Format::OH_NN_FORMAT_NHWC;
175     } else if (msFormat == mindspore::lite::FORMAT_NCHW) {
176         return OH_NN_Format::OH_NN_FORMAT_NCHW;
177     }
178 
179     return OH_NN_Format::OH_NN_FORMAT_NONE;
180 }
181 } // namespace NeuralNetworkRuntime
182 } // namespace OHOS