| 182 | } |
| 183 | |
| 184 | void Dalgona::runAnalysisWithRandomInput(const std::string &analysis_path, |
| 185 | const std::string &analysis_args) |
| 186 | { |
| 187 | py::object scope = py::module::import("__main__").attr("__dict__"); |
| 188 | _hooks->importAnalysis(analysis_path, scope, analysis_args); |
| 189 | |
| 190 | const auto input_nodes = loco::input_nodes(_module->graph()); |
| 191 | const auto num_inputs = input_nodes.size(); |
| 192 | |
| 193 | for (uint32_t input_idx = 0; input_idx < num_inputs; input_idx++) |
| 194 | { |
| 195 | const auto *input_node = loco::must_cast<const luci::CircleInput *>(input_nodes[input_idx]); |
| 196 | assert(input_node->index() == input_idx); |
| 197 | checkInputDimension(input_node); |
| 198 | |
| 199 | uint32_t num_elems = numElements(input_node); |
| 200 | switch (input_node->dtype()) |
| 201 | { |
| 202 | case DataType::FLOAT32: |
| 203 | { |
| 204 | // Synced with record-minmax (-5,5) |
| 205 | auto input_data = genRandomFloatData(num_elems, -5, 5); |
| 206 | _interpreter->writeInputTensor(input_node, input_data.data(), |
| 207 | input_data.size() * sizeof(float)); |
| 208 | break; |
| 209 | } |
| 210 | case DataType::U8: |
| 211 | { |
| 212 | auto input_data = genRandomIntData<uint8_t>(num_elems, std::numeric_limits<uint8_t>::min(), |
| 213 | std::numeric_limits<uint8_t>::max()); |
| 214 | _interpreter->writeInputTensor(input_node, input_data.data(), |
| 215 | input_data.size() * sizeof(uint8_t)); |
| 216 | break; |
| 217 | } |
| 218 | case DataType::S16: |
| 219 | { |
| 220 | auto input_data = genRandomIntData<int16_t>(num_elems, std::numeric_limits<int16_t>::min(), |
| 221 | std::numeric_limits<int16_t>::max()); |
| 222 | _interpreter->writeInputTensor(input_node, input_data.data(), |
| 223 | input_data.size() * sizeof(int16_t)); |
| 224 | break; |
| 225 | } |
| 226 | case DataType::S32: |
| 227 | { |
| 228 | // Synced with record-minmax (0, 100) |
| 229 | auto input_data = genRandomIntData<int32_t>(num_elems, 0, 100); |
| 230 | _interpreter->writeInputTensor(input_node, input_data.data(), |
| 231 | input_data.size() * sizeof(int32_t)); |
| 232 | break; |
| 233 | } |
| 234 | case DataType::S64: |
| 235 | { |
| 236 | // Synced with record-minmax (0, 100) |
| 237 | auto input_data = genRandomIntData<int64_t>(num_elems, 0, 100); |
| 238 | _interpreter->writeInputTensor(input_node, input_data.data(), |
| 239 | input_data.size() * sizeof(int64_t)); |
| 240 | break; |
| 241 | } |
no test coverage detected