bigdl-core-npu 2.6.0b20250114__cp310-cp310-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. bigdl-core-npu/__init__.py +0 -0
  2. bigdl-core-npu/include/common.h +96 -0
  3. bigdl-core-npu/include/npu_llm.h +74 -0
  4. bigdl-core-npu/npu_llm.dll +0 -0
  5. bigdl-core-npu/npu_llm.lib +0 -0
  6. bigdl_core_npu-2.6.0b20250114.dist-info/METADATA +44 -0
  7. bigdl_core_npu-2.6.0b20250114.dist-info/RECORD +234 -0
  8. bigdl_core_npu-2.6.0b20250114.dist-info/WHEEL +5 -0
  9. bigdl_core_npu-2.6.0b20250114.dist-info/top_level.txt +2 -0
  10. intel_npu_acceleration_library/__init__.py +24 -0
  11. intel_npu_acceleration_library/_version.py +6 -0
  12. intel_npu_acceleration_library/backend/__init__.py +37 -0
  13. intel_npu_acceleration_library/backend/base.py +250 -0
  14. intel_npu_acceleration_library/backend/bindings.py +383 -0
  15. intel_npu_acceleration_library/backend/compression.py +24 -0
  16. intel_npu_acceleration_library/backend/convolution.py +58 -0
  17. intel_npu_acceleration_library/backend/factory.py +1161 -0
  18. intel_npu_acceleration_library/backend/linear.py +60 -0
  19. intel_npu_acceleration_library/backend/matmul.py +59 -0
  20. intel_npu_acceleration_library/backend/mlp.py +58 -0
  21. intel_npu_acceleration_library/backend/ops.py +142 -0
  22. intel_npu_acceleration_library/backend/qlinear.py +75 -0
  23. intel_npu_acceleration_library/backend/qmatmul.py +66 -0
  24. intel_npu_acceleration_library/backend/runtime.py +215 -0
  25. intel_npu_acceleration_library/backend/sdpa.py +107 -0
  26. intel_npu_acceleration_library/backend/tensor.py +1120 -0
  27. intel_npu_acceleration_library/backend/utils.py +70 -0
  28. intel_npu_acceleration_library/compiler.py +194 -0
  29. intel_npu_acceleration_library/device.py +230 -0
  30. intel_npu_acceleration_library/dtypes.py +155 -0
  31. intel_npu_acceleration_library/external/openvino/__init__.py +72 -0
  32. intel_npu_acceleration_library/external/openvino/_offline_transformations/__init__.py +21 -0
  33. intel_npu_acceleration_library/external/openvino/_pyopenvino.cp310-win_amd64.pyd +0 -0
  34. intel_npu_acceleration_library/external/openvino/_pyopenvino.cp311-win_amd64.pyd +0 -0
  35. intel_npu_acceleration_library/external/openvino/_pyopenvino.cp312-win_amd64.pyd +0 -0
  36. intel_npu_acceleration_library/external/openvino/_pyopenvino.cp38-win_amd64.pyd +0 -0
  37. intel_npu_acceleration_library/external/openvino/_pyopenvino.cp39-win_amd64.pyd +0 -0
  38. intel_npu_acceleration_library/external/openvino/experimental/__init__.py +14 -0
  39. intel_npu_acceleration_library/external/openvino/frontend/__init__.py +34 -0
  40. intel_npu_acceleration_library/external/openvino/frontend/frontend.py +44 -0
  41. intel_npu_acceleration_library/external/openvino/frontend/jax/__init__.py +15 -0
  42. intel_npu_acceleration_library/external/openvino/frontend/jax/jaxpr_decoder.py +293 -0
  43. intel_npu_acceleration_library/external/openvino/frontend/jax/passes.py +65 -0
  44. intel_npu_acceleration_library/external/openvino/frontend/jax/utils.py +182 -0
  45. intel_npu_acceleration_library/external/openvino/frontend/onnx/__init__.py +15 -0
  46. intel_npu_acceleration_library/external/openvino/frontend/onnx/py_onnx_frontend.cp310-win_amd64.pyd +0 -0
  47. intel_npu_acceleration_library/external/openvino/frontend/onnx/py_onnx_frontend.cp311-win_amd64.pyd +0 -0
  48. intel_npu_acceleration_library/external/openvino/frontend/onnx/py_onnx_frontend.cp312-win_amd64.pyd +0 -0
  49. intel_npu_acceleration_library/external/openvino/frontend/onnx/py_onnx_frontend.cp38-win_amd64.pyd +0 -0
  50. intel_npu_acceleration_library/external/openvino/frontend/onnx/py_onnx_frontend.cp39-win_amd64.pyd +0 -0
  51. intel_npu_acceleration_library/external/openvino/frontend/paddle/__init__.py +15 -0
  52. intel_npu_acceleration_library/external/openvino/frontend/paddle/py_paddle_frontend.cp310-win_amd64.pyd +0 -0
  53. intel_npu_acceleration_library/external/openvino/frontend/paddle/py_paddle_frontend.cp311-win_amd64.pyd +0 -0
  54. intel_npu_acceleration_library/external/openvino/frontend/paddle/py_paddle_frontend.cp312-win_amd64.pyd +0 -0
  55. intel_npu_acceleration_library/external/openvino/frontend/paddle/py_paddle_frontend.cp38-win_amd64.pyd +0 -0
  56. intel_npu_acceleration_library/external/openvino/frontend/paddle/py_paddle_frontend.cp39-win_amd64.pyd +0 -0
  57. intel_npu_acceleration_library/external/openvino/frontend/pytorch/__init__.py +19 -0
  58. intel_npu_acceleration_library/external/openvino/frontend/pytorch/fx_decoder.py +370 -0
  59. intel_npu_acceleration_library/external/openvino/frontend/pytorch/gptq.py +180 -0
  60. intel_npu_acceleration_library/external/openvino/frontend/pytorch/module_extension.py +39 -0
  61. intel_npu_acceleration_library/external/openvino/frontend/pytorch/patch_model.py +118 -0
  62. intel_npu_acceleration_library/external/openvino/frontend/pytorch/py_pytorch_frontend.cp310-win_amd64.pyd +0 -0
  63. intel_npu_acceleration_library/external/openvino/frontend/pytorch/py_pytorch_frontend.cp311-win_amd64.pyd +0 -0
  64. intel_npu_acceleration_library/external/openvino/frontend/pytorch/py_pytorch_frontend.cp312-win_amd64.pyd +0 -0
  65. intel_npu_acceleration_library/external/openvino/frontend/pytorch/py_pytorch_frontend.cp38-win_amd64.pyd +0 -0
  66. intel_npu_acceleration_library/external/openvino/frontend/pytorch/py_pytorch_frontend.cp39-win_amd64.pyd +0 -0
  67. intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/backend.py +131 -0
  68. intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/backend_utils.py +85 -0
  69. intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/compile.py +141 -0
  70. intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/decompositions.py +116 -0
  71. intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/execute.py +189 -0
  72. intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/op_support.py +290 -0
  73. intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/partition.py +126 -0
  74. intel_npu_acceleration_library/external/openvino/frontend/pytorch/ts_decoder.py +568 -0
  75. intel_npu_acceleration_library/external/openvino/frontend/pytorch/utils.py +258 -0
  76. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/__init__.py +16 -0
  77. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/graph_iterator.py +116 -0
  78. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/node_decoder.py +219 -0
  79. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/py_tensorflow_frontend.cp310-win_amd64.pyd +0 -0
  80. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/py_tensorflow_frontend.cp311-win_amd64.pyd +0 -0
  81. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/py_tensorflow_frontend.cp312-win_amd64.pyd +0 -0
  82. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/py_tensorflow_frontend.cp38-win_amd64.pyd +0 -0
  83. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/py_tensorflow_frontend.cp39-win_amd64.pyd +0 -0
  84. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/utils.py +481 -0
  85. intel_npu_acceleration_library/external/openvino/helpers/__init__.py +6 -0
  86. intel_npu_acceleration_library/external/openvino/helpers/packing.py +87 -0
  87. intel_npu_acceleration_library/external/openvino/preprocess/README.md +60 -0
  88. intel_npu_acceleration_library/external/openvino/preprocess/__init__.py +28 -0
  89. intel_npu_acceleration_library/external/openvino/preprocess/torchvision/__init__.py +15 -0
  90. intel_npu_acceleration_library/external/openvino/preprocess/torchvision/preprocess_converter.py +47 -0
  91. intel_npu_acceleration_library/external/openvino/preprocess/torchvision/requirements.txt +5 -0
  92. intel_npu_acceleration_library/external/openvino/preprocess/torchvision/torchvision_preprocessing.py +347 -0
  93. intel_npu_acceleration_library/external/openvino/properties/__init__.py +22 -0
  94. intel_npu_acceleration_library/external/openvino/properties/_properties.py +55 -0
  95. intel_npu_acceleration_library/external/openvino/properties/device/__init__.py +14 -0
  96. intel_npu_acceleration_library/external/openvino/properties/hint/__init__.py +15 -0
  97. intel_npu_acceleration_library/external/openvino/properties/intel_auto/__init__.py +12 -0
  98. intel_npu_acceleration_library/external/openvino/properties/intel_cpu/__init__.py +8 -0
  99. intel_npu_acceleration_library/external/openvino/properties/intel_gpu/__init__.py +12 -0
  100. intel_npu_acceleration_library/external/openvino/properties/intel_gpu/hint/__init__.py +11 -0
  101. intel_npu_acceleration_library/external/openvino/properties/log/__init__.py +11 -0
  102. intel_npu_acceleration_library/external/openvino/properties/streams/__init__.py +11 -0
  103. intel_npu_acceleration_library/external/openvino/runtime/__init__.py +85 -0
  104. intel_npu_acceleration_library/external/openvino/runtime/exceptions.py +17 -0
  105. intel_npu_acceleration_library/external/openvino/runtime/ie_api.py +631 -0
  106. intel_npu_acceleration_library/external/openvino/runtime/op/__init__.py +19 -0
  107. intel_npu_acceleration_library/external/openvino/runtime/op/util/__init__.py +22 -0
  108. intel_npu_acceleration_library/external/openvino/runtime/opset1/__init__.py +112 -0
  109. intel_npu_acceleration_library/external/openvino/runtime/opset1/ops.py +3068 -0
  110. intel_npu_acceleration_library/external/openvino/runtime/opset10/__init__.py +179 -0
  111. intel_npu_acceleration_library/external/openvino/runtime/opset10/ops.py +173 -0
  112. intel_npu_acceleration_library/external/openvino/runtime/opset11/__init__.py +179 -0
  113. intel_npu_acceleration_library/external/openvino/runtime/opset11/ops.py +107 -0
  114. intel_npu_acceleration_library/external/openvino/runtime/opset12/__init__.py +180 -0
  115. intel_npu_acceleration_library/external/openvino/runtime/opset12/ops.py +120 -0
  116. intel_npu_acceleration_library/external/openvino/runtime/opset13/__init__.py +188 -0
  117. intel_npu_acceleration_library/external/openvino/runtime/opset13/ops.py +398 -0
  118. intel_npu_acceleration_library/external/openvino/runtime/opset14/__init__.py +190 -0
  119. intel_npu_acceleration_library/external/openvino/runtime/opset14/ops.py +171 -0
  120. intel_npu_acceleration_library/external/openvino/runtime/opset15/__init__.py +17 -0
  121. intel_npu_acceleration_library/external/openvino/runtime/opset15/ops.py +276 -0
  122. intel_npu_acceleration_library/external/openvino/runtime/opset2/__init__.py +118 -0
  123. intel_npu_acceleration_library/external/openvino/runtime/opset2/ops.py +216 -0
  124. intel_npu_acceleration_library/external/openvino/runtime/opset3/__init__.py +134 -0
  125. intel_npu_acceleration_library/external/openvino/runtime/opset3/ops.py +638 -0
  126. intel_npu_acceleration_library/external/openvino/runtime/opset4/__init__.py +145 -0
  127. intel_npu_acceleration_library/external/openvino/runtime/opset4/ops.py +464 -0
  128. intel_npu_acceleration_library/external/openvino/runtime/opset5/__init__.py +152 -0
  129. intel_npu_acceleration_library/external/openvino/runtime/opset5/ops.py +372 -0
  130. intel_npu_acceleration_library/external/openvino/runtime/opset6/__init__.py +154 -0
  131. intel_npu_acceleration_library/external/openvino/runtime/opset6/ops.py +215 -0
  132. intel_npu_acceleration_library/external/openvino/runtime/opset7/__init__.py +158 -0
  133. intel_npu_acceleration_library/external/openvino/runtime/opset7/ops.py +169 -0
  134. intel_npu_acceleration_library/external/openvino/runtime/opset8/__init__.py +169 -0
  135. intel_npu_acceleration_library/external/openvino/runtime/opset8/ops.py +787 -0
  136. intel_npu_acceleration_library/external/openvino/runtime/opset9/__init__.py +175 -0
  137. intel_npu_acceleration_library/external/openvino/runtime/opset9/ops.py +341 -0
  138. intel_npu_acceleration_library/external/openvino/runtime/opset_utils.py +22 -0
  139. intel_npu_acceleration_library/external/openvino/runtime/passes/__init__.py +19 -0
  140. intel_npu_acceleration_library/external/openvino/runtime/passes/graph_rewrite.py +33 -0
  141. intel_npu_acceleration_library/external/openvino/runtime/passes/manager.py +26 -0
  142. intel_npu_acceleration_library/external/openvino/runtime/properties/__init__.py +40 -0
  143. intel_npu_acceleration_library/external/openvino/runtime/properties/hint/__init__.py +25 -0
  144. intel_npu_acceleration_library/external/openvino/runtime/utils/__init__.py +7 -0
  145. intel_npu_acceleration_library/external/openvino/runtime/utils/broadcasting.py +44 -0
  146. intel_npu_acceleration_library/external/openvino/runtime/utils/data_helpers/__init__.py +8 -0
  147. intel_npu_acceleration_library/external/openvino/runtime/utils/data_helpers/data_dispatcher.py +447 -0
  148. intel_npu_acceleration_library/external/openvino/runtime/utils/data_helpers/wrappers.py +148 -0
  149. intel_npu_acceleration_library/external/openvino/runtime/utils/decorators.py +156 -0
  150. intel_npu_acceleration_library/external/openvino/runtime/utils/input_validation.py +133 -0
  151. intel_npu_acceleration_library/external/openvino/runtime/utils/node_factory.py +127 -0
  152. intel_npu_acceleration_library/external/openvino/runtime/utils/reduction.py +25 -0
  153. intel_npu_acceleration_library/external/openvino/runtime/utils/types.py +175 -0
  154. intel_npu_acceleration_library/external/openvino/tools/__init__.py +4 -0
  155. intel_npu_acceleration_library/external/openvino/tools/benchmark/__init__.py +3 -0
  156. intel_npu_acceleration_library/external/openvino/tools/benchmark/benchmark.py +186 -0
  157. intel_npu_acceleration_library/external/openvino/tools/benchmark/main.py +695 -0
  158. intel_npu_acceleration_library/external/openvino/tools/benchmark/parameters.py +199 -0
  159. intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/__init__.py +3 -0
  160. intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/constants.py +26 -0
  161. intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/inputs_filling.py +482 -0
  162. intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/logging.py +8 -0
  163. intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/statistics_report.py +296 -0
  164. intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/utils.py +836 -0
  165. intel_npu_acceleration_library/external/openvino/tools/ovc/__init__.py +20 -0
  166. intel_npu_acceleration_library/external/openvino/tools/ovc/__main__.py +10 -0
  167. intel_npu_acceleration_library/external/openvino/tools/ovc/cli_parser.py +633 -0
  168. intel_npu_acceleration_library/external/openvino/tools/ovc/convert.py +102 -0
  169. intel_npu_acceleration_library/external/openvino/tools/ovc/convert_data_type.py +82 -0
  170. intel_npu_acceleration_library/external/openvino/tools/ovc/convert_impl.py +550 -0
  171. intel_npu_acceleration_library/external/openvino/tools/ovc/environment_setup_utils.py +50 -0
  172. intel_npu_acceleration_library/external/openvino/tools/ovc/error.py +49 -0
  173. intel_npu_acceleration_library/external/openvino/tools/ovc/get_ov_update_message.py +16 -0
  174. intel_npu_acceleration_library/external/openvino/tools/ovc/help.py +45 -0
  175. intel_npu_acceleration_library/external/openvino/tools/ovc/logger.py +91 -0
  176. intel_npu_acceleration_library/external/openvino/tools/ovc/main.py +40 -0
  177. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/__init__.py +2 -0
  178. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/analysis.py +46 -0
  179. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/check_config.py +57 -0
  180. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/extractor.py +447 -0
  181. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/jax_frontend_utils.py +19 -0
  182. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/layout_utils.py +73 -0
  183. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/moc_emit_ir.py +32 -0
  184. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/offline_transformations.py +107 -0
  185. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/paddle_frontend_utils.py +83 -0
  186. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/pipeline.py +298 -0
  187. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/preprocessing.py +220 -0
  188. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/pytorch_frontend_utils.py +214 -0
  189. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/shape_utils.py +109 -0
  190. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/type_utils.py +82 -0
  191. intel_npu_acceleration_library/external/openvino/tools/ovc/ovc.py +13 -0
  192. intel_npu_acceleration_library/external/openvino/tools/ovc/telemetry_params.py +6 -0
  193. intel_npu_acceleration_library/external/openvino/tools/ovc/telemetry_stub.py +28 -0
  194. intel_npu_acceleration_library/external/openvino/tools/ovc/telemetry_utils.py +118 -0
  195. intel_npu_acceleration_library/external/openvino/tools/ovc/utils.py +196 -0
  196. intel_npu_acceleration_library/external/openvino/tools/ovc/version.py +80 -0
  197. intel_npu_acceleration_library/external/openvino/torch/__init__.py +5 -0
  198. intel_npu_acceleration_library/external/openvino/utils.py +115 -0
  199. intel_npu_acceleration_library/functional/__init__.py +8 -0
  200. intel_npu_acceleration_library/functional/scaled_dot_product_attention.py +47 -0
  201. intel_npu_acceleration_library/lib/Release/cache.json +113732 -0
  202. intel_npu_acceleration_library/lib/Release/intel_npu_acceleration_library.dll +0 -0
  203. intel_npu_acceleration_library/lib/Release/openvino.dll +0 -0
  204. intel_npu_acceleration_library/lib/Release/openvino_auto_batch_plugin.dll +0 -0
  205. intel_npu_acceleration_library/lib/Release/openvino_auto_plugin.dll +0 -0
  206. intel_npu_acceleration_library/lib/Release/openvino_c.dll +0 -0
  207. intel_npu_acceleration_library/lib/Release/openvino_hetero_plugin.dll +0 -0
  208. intel_npu_acceleration_library/lib/Release/openvino_intel_cpu_plugin.dll +0 -0
  209. intel_npu_acceleration_library/lib/Release/openvino_intel_gpu_plugin.dll +0 -0
  210. intel_npu_acceleration_library/lib/Release/openvino_intel_npu_plugin.dll +0 -0
  211. intel_npu_acceleration_library/lib/Release/openvino_ir_frontend.dll +0 -0
  212. intel_npu_acceleration_library/lib/Release/openvino_onnx_frontend.dll +0 -0
  213. intel_npu_acceleration_library/lib/Release/openvino_paddle_frontend.dll +0 -0
  214. intel_npu_acceleration_library/lib/Release/openvino_pytorch_frontend.dll +0 -0
  215. intel_npu_acceleration_library/lib/Release/openvino_tensorflow_frontend.dll +0 -0
  216. intel_npu_acceleration_library/lib/Release/openvino_tensorflow_lite_frontend.dll +0 -0
  217. intel_npu_acceleration_library/lib/Release/tbb12.dll +0 -0
  218. intel_npu_acceleration_library/lib/Release/tbb12_debug.dll +0 -0
  219. intel_npu_acceleration_library/lib/Release/tbbbind_2_5.dll +0 -0
  220. intel_npu_acceleration_library/lib/Release/tbbbind_2_5_debug.dll +0 -0
  221. intel_npu_acceleration_library/lib/Release/tbbmalloc.dll +0 -0
  222. intel_npu_acceleration_library/lib/Release/tbbmalloc_debug.dll +0 -0
  223. intel_npu_acceleration_library/lib/Release/tbbmalloc_proxy.dll +0 -0
  224. intel_npu_acceleration_library/lib/Release/tbbmalloc_proxy_debug.dll +0 -0
  225. intel_npu_acceleration_library/modelling.py +150 -0
  226. intel_npu_acceleration_library/nn/__init__.py +20 -0
  227. intel_npu_acceleration_library/nn/autograd.py +68 -0
  228. intel_npu_acceleration_library/nn/conv.py +257 -0
  229. intel_npu_acceleration_library/nn/functional.py +1207 -0
  230. intel_npu_acceleration_library/nn/linear.py +162 -0
  231. intel_npu_acceleration_library/nn/llm.py +417 -0
  232. intel_npu_acceleration_library/nn/module.py +393 -0
  233. intel_npu_acceleration_library/optimizations.py +157 -0
  234. intel_npu_acceleration_library/quantization.py +174 -0
@@ -0,0 +1,20 @@
1
+ # Copyright (C) 2018-2024 Intel Corporation
2
+ # SPDX-License-Identifier: Apache-2.0
3
+
4
+ from openvino.tools.ovc.convert import convert_model
5
+ from openvino.tools.ovc.telemetry_utils import is_optimum, init_mo_telemetry
6
+
7
+ import importlib.metadata as importlib_metadata
8
+
9
+ try:
10
+ optimum_version = importlib_metadata.version("optimum-intel")
11
+ except importlib_metadata.PackageNotFoundError:
12
+ optimum_version = None
13
+
14
+ if is_optimum() and optimum_version is not None:
15
+ from openvino.runtime import get_version as get_rt_version # pylint: disable=no-name-in-module,import-error
16
+ telemetry = init_mo_telemetry("Optimum Intel", optimum_version)
17
+ telemetry.send_event("ov", "import", "import_from_optimum,ov_version:{}".format(get_rt_version()))
18
+ else:
19
+ telemetry = init_mo_telemetry()
20
+ telemetry.send_event("ov", "import", "general_import")
@@ -0,0 +1,10 @@
1
+ # Copyright (C) 2018-2024 Intel Corporation
2
+ # SPDX-License-Identifier: Apache-2.0
3
+
4
+ import sys
5
+
6
+ from openvino.tools.ovc.main import main
7
+ from openvino.tools.ovc.telemetry_utils import init_mo_telemetry
8
+
9
+ init_mo_telemetry()
10
+ sys.exit(main())
@@ -0,0 +1,633 @@
1
+ # Copyright (C) 2018-2024 Intel Corporation
2
+ # SPDX-License-Identifier: Apache-2.0
3
+
4
+ import argparse
5
+ import inspect
6
+ import os
7
+ import pathlib
8
+ import re
9
+ from collections import OrderedDict, namedtuple
10
+ from typing import List, Union
11
+
12
+ import openvino
13
+ from openvino.runtime import PartialShape, Dimension, Type # pylint: disable=no-name-in-module,import-error
14
+ from openvino.tools.ovc.error import Error
15
+ from openvino.tools.ovc.help import get_convert_model_help_specifics
16
+ from openvino.tools.ovc.moc_frontend.shape_utils import to_partial_shape, is_shape_type
17
+ from openvino.tools.ovc.moc_frontend.type_utils import to_ov_type, is_type
18
+ from openvino.tools.ovc.utils import get_mo_root_dir
19
+
20
+ # Helper class for storing input cut information
21
+ _InputCutInfo = namedtuple("InputCutInfo", ["name", "shape", "type", "value"], defaults=[None, None, None, None])
22
+
23
+
24
+ def single_input_to_input_cut_info(input: [str, tuple, list, PartialShape, Type, type]):
25
+ """
26
+ Parses parameters of single input to InputCutInfo.
27
+ :param input: input cut parameters of single input
28
+ :return: InputCutInfo
29
+ """
30
+ if isinstance(input, str):
31
+ # pylint: disable=no-member
32
+ return _InputCutInfo(input, None)
33
+ if isinstance(input, (tuple, list)) or is_shape_type(input):
34
+ # If input represents list with shape, wrap it to list. Single PartialShape also goes to this condition.
35
+ # Check of all dimensions will be in is_shape_type(val) method below
36
+ if is_shape_type(input):
37
+ input = [input]
38
+
39
+ # Check values of tuple or list and collect to InputCutInfo
40
+ name = None
41
+ inp_type = None
42
+ shape = None
43
+ for val in input:
44
+ if isinstance(val, str):
45
+ if name is not None:
46
+ raise Exception("More than one input name provided: {}".format(input))
47
+ name = val
48
+ elif is_type(val):
49
+ if inp_type is not None:
50
+ raise Exception("More than one input type provided: {}".format(input))
51
+ inp_type = to_ov_type(val)
52
+ elif is_shape_type(val) or val is None:
53
+ if shape is not None:
54
+ raise Exception("More than one input shape provided: {}".format(input))
55
+ shape = to_partial_shape(val) if val is not None else None
56
+ else:
57
+ raise Exception("Incorrect input parameters provided. Expected tuple with input name, "
58
+ "input type or input shape. Got unknown object: {}".format(val))
59
+ # pylint: disable=no-member
60
+ return _InputCutInfo(name,
61
+ PartialShape(shape) if shape is not None else None,
62
+ inp_type,
63
+ None)
64
+ # Case when only type is set
65
+ if is_type(input):
66
+ return _InputCutInfo(None, None, to_ov_type(input), None) # pylint: disable=no-member
67
+
68
+ # We don't expect here single unnamed value. If list of int is set it is considered as shape.
69
+ # Setting of value is expected only using InputCutInfo or string analog.
70
+
71
+ raise Exception(
72
+ "Unexpected object provided for input. Expected tuple, Shape, PartialShape, Type or str. Got {}".format(
73
+ type(input)))
74
+
75
+
76
+ def is_single_input(input: [tuple, list]):
77
+ """
78
+ Checks if input has parameters for single input.
79
+ :param input: list or tuple of input parameters or input shape or input name.
80
+ :return: True if input has parameters for single input, otherwise False.
81
+ """
82
+ name = None
83
+ inp_type = None
84
+ shape = None
85
+ for val in input:
86
+ if isinstance(val, str):
87
+ if name is not None:
88
+ return False
89
+ name = val
90
+ elif is_type(val):
91
+ if inp_type is not None:
92
+ return False
93
+ inp_type = to_ov_type(val)
94
+ elif is_shape_type(val):
95
+ if shape is not None:
96
+ return False
97
+ shape = to_partial_shape(val)
98
+ else:
99
+ return False
100
+ return True
101
+
102
+
103
+ def parse_inputs(inputs: str):
104
+ inputs_list = []
105
+ # Split to list of string
106
+ for input_value in split_inputs(inputs):
107
+ # Parse string with parameters for single input
108
+ node_name, shape = parse_input_value(input_value)
109
+ # pylint: disable=no-member
110
+ inputs_list.append((node_name, shape))
111
+ return inputs_list
112
+
113
+
114
+ def input_to_input_cut_info(input: [dict, tuple, list]):
115
+ """
116
+ Parses 'input' to list of InputCutInfo.
117
+ :param input: input cut parameters passed by user
118
+ :return: list of InputCutInfo with input cut parameters
119
+ """
120
+ if input is None:
121
+ return []
122
+
123
+ if isinstance(input, (tuple, list)):
124
+ if len(input) == 0:
125
+ return []
126
+ # Case when input is single shape set in tuple
127
+ if len(input) > 0 and isinstance(input[0], (int, Dimension)):
128
+ input = [input]
129
+
130
+ if is_single_input(input):
131
+ return [single_input_to_input_cut_info(input)]
132
+
133
+ inputs = []
134
+ for inp in input:
135
+ inputs.append(single_input_to_input_cut_info(inp))
136
+ return inputs
137
+
138
+ if isinstance(input, dict):
139
+ res_list = []
140
+ for name, value in input.items():
141
+ if not isinstance(name, str):
142
+ raise Exception("Incorrect operation name type. Expected string, got {}".format(type(name)))
143
+ info = single_input_to_input_cut_info(value)
144
+ if info.name is not None and info.name != name:
145
+ raise Exception("Incorrect \"input\" dictionary, got different names in key and value. "
146
+ "Got operation name {} for key {}".format(info.name, name))
147
+ res_list.append(_InputCutInfo(name, info.shape, info.type))
148
+ return res_list
149
+ # Case when single type or value is set, or unknown object
150
+ return [single_input_to_input_cut_info(input)]
151
+
152
+
153
+ ParamDescription = namedtuple("ParamData", ["description", "cli_tool_description"])
154
+
155
+
156
+ def get_mo_convert_params():
157
+ mo_convert_docs = openvino.tools.ovc.convert_model.__doc__ # pylint: disable=no-member
158
+ mo_convert_params = {}
159
+ group = "Optional parameters:" # FIXME: WA for unknown bug in this function
160
+ mo_convert_params[group] = {}
161
+
162
+ mo_convert_docs = mo_convert_docs[:mo_convert_docs.find('Returns:')]
163
+
164
+ while len(mo_convert_docs) > 0:
165
+ param_idx1 = mo_convert_docs.find(":param")
166
+ if param_idx1 == -1:
167
+ break
168
+ param_idx2 = mo_convert_docs.find(":", param_idx1 + 1)
169
+ param_name = mo_convert_docs[param_idx1 + len(':param '):param_idx2]
170
+
171
+ param_description_idx = mo_convert_docs.find(":param", param_idx2 + 1)
172
+ param_description = mo_convert_docs[param_idx2 + 1: param_description_idx]
173
+
174
+ group_name_idx = param_description.rfind('\n\n')
175
+ group_name = ''
176
+ if group_name_idx != -1:
177
+ group_name = param_description[group_name_idx:].strip()
178
+
179
+ param_description = param_description[:group_name_idx]
180
+ param_description = param_description.strip()
181
+
182
+ mo_convert_params[group][param_name] = ParamDescription(param_description, "")
183
+
184
+ mo_convert_docs = mo_convert_docs[param_description_idx:]
185
+
186
+ if group_name != '':
187
+ mo_convert_params[group_name] = {}
188
+ group = group_name
189
+
190
+ cli_tool_specific_descriptions = get_convert_model_help_specifics()
191
+
192
+ for group_name, param_group in mo_convert_params.items():
193
+ for param_name, d in param_group.items():
194
+ cli_tool_description = None
195
+ if param_name in cli_tool_specific_descriptions:
196
+ cli_tool_description = cli_tool_specific_descriptions[param_name]
197
+
198
+ desc = ParamDescription(d.description,
199
+ cli_tool_description)
200
+ mo_convert_params[group_name][param_name] = desc
201
+
202
+ return mo_convert_params
203
+
204
+
205
+ def canonicalize_and_check_paths(values: Union[str, List[str], None], param_name,
206
+ try_mo_root=False, check_existence=True) -> List[str]:
207
+ if values is not None:
208
+ list_of_values = list()
209
+ if isinstance(values, str):
210
+ if values != "":
211
+ list_of_values = values.split(',')
212
+ elif isinstance(values, list):
213
+ list_of_values = values
214
+ else:
215
+ return values
216
+
217
+ if not check_existence:
218
+ return [get_absolute_path(path) for path in list_of_values]
219
+
220
+ for idx, val in enumerate(list_of_values):
221
+ if not isinstance(val, (str, pathlib.Path)):
222
+ continue
223
+
224
+ list_of_values[idx] = val
225
+
226
+ error_msg = 'The value for parameter "{}" must be existing file/directory, ' \
227
+ 'but "{}" does not exist.'.format(param_name, val)
228
+ if os.path.exists(val):
229
+ continue
230
+ elif not try_mo_root or val == '':
231
+ raise Error(error_msg)
232
+ elif try_mo_root:
233
+ path_from_mo_root = get_mo_root_dir() + '/ovc/' + val
234
+ list_of_values[idx] = path_from_mo_root
235
+ if not os.path.exists(path_from_mo_root):
236
+ raise Error(error_msg)
237
+
238
+ return [get_absolute_path(path) for path in list_of_values]
239
+
240
+
241
+ class CanonicalizePathCheckExistenceAction(argparse.Action):
242
+ """
243
+ Expand user home directory paths and convert relative-paths to absolute and check specified file or directory
244
+ existence.
245
+ """
246
+ check_value = canonicalize_and_check_paths
247
+
248
+ def __call__(self, parser, namespace, values, option_string=None):
249
+ list_of_paths = canonicalize_and_check_paths(values, param_name=option_string,
250
+ try_mo_root=False, check_existence=True)
251
+ setattr(namespace, self.dest, list_of_paths)
252
+
253
+
254
+ def readable_file_or_dir_or_object(path: str):
255
+ """
256
+ Check that specified path is a readable file or directory.
257
+ :param path: path to check
258
+ :return: path if the file/directory is readable
259
+ """
260
+ if not isinstance(path, (str, pathlib.Path)):
261
+ return path
262
+ if not os.path.isfile(path) and not os.path.isdir(path):
263
+ raise Error('The "{}" is not existing file or directory'.format(path))
264
+ elif not os.access(path, os.R_OK):
265
+ raise Error('The "{}" is not readable'.format(path))
266
+ else:
267
+ return path
268
+
269
+
270
+ def readable_dirs_or_files_or_empty(paths: [str, list, tuple]):
271
+ """
272
+ Checks that comma separated list of paths are readable directories, files or a provided path is empty.
273
+ :param paths: comma separated list of paths.
274
+ :return: comma separated list of paths.
275
+ """
276
+ paths_list = paths
277
+ if isinstance(paths, (list, tuple)):
278
+ paths_list = [readable_file_or_dir_or_object(path) for path in paths]
279
+ if isinstance(paths, (str, pathlib.Path)):
280
+ paths_list = [readable_file_or_dir_or_object(path) for path in str(paths).split(',')]
281
+
282
+ return paths_list[0] if isinstance(paths, (list, tuple)) and len(paths_list) == 1 else paths_list
283
+
284
+
285
+ def add_args_by_description(args_group, params_description):
286
+ signature = inspect.signature(openvino.tools.ovc.convert_model) # pylint: disable=no-member
287
+ filepath_args = get_params_with_paths_list()
288
+ cli_tool_specific_descriptions = get_convert_model_help_specifics()
289
+ for param_name, param_description in params_description.items():
290
+ if param_name in ['share_weights', 'example_input']:
291
+ continue
292
+ if param_name == 'input_model':
293
+ # input_model is not a normal key for a tool, it will collect all untagged keys
294
+ cli_param_name = param_name
295
+ else:
296
+ cli_param_name = '--' + param_name
297
+ if cli_param_name not in args_group._option_string_actions:
298
+ # Get parameter specifics
299
+ param_specifics = cli_tool_specific_descriptions[param_name] if param_name in \
300
+ cli_tool_specific_descriptions else {}
301
+ help_text = param_specifics['description'] if 'description' in param_specifics \
302
+ else param_description.description
303
+ action = param_specifics['action'] if 'action' in param_specifics else None
304
+ param_type = param_specifics['type'] if 'type' in param_specifics else None
305
+ param_alias = param_specifics[
306
+ 'aliases'] if 'aliases' in param_specifics and param_name != 'input_model' else {}
307
+ param_version = param_specifics['version'] if 'version' in param_specifics else None
308
+ param_choices = param_specifics['choices'] if 'choices' in param_specifics else None
309
+
310
+ # Bool params common setting
311
+ if signature.parameters[param_name].annotation == bool and param_name != 'version':
312
+ args_group.add_argument(
313
+ cli_param_name, *param_alias,
314
+ action='store_true',
315
+ help=help_text,
316
+ default=signature.parameters[param_name].default)
317
+ # File paths common setting
318
+ elif param_name in filepath_args:
319
+ action = action if action is not None else CanonicalizePathCheckExistenceAction
320
+ args_group.add_argument(
321
+ cli_param_name, *param_alias,
322
+ type=str if param_type is None else param_type,
323
+ action=action,
324
+ help=help_text,
325
+ default=None if param_name == 'input_model' else signature.parameters[param_name].default,
326
+ metavar=param_name.upper() if param_name == 'input_model' else None)
327
+ # Other params
328
+ else:
329
+ additional_params = {}
330
+ if param_version is not None:
331
+ additional_params['version'] = param_version
332
+ if param_type is not None:
333
+ additional_params['type'] = param_type
334
+ if param_choices is not None:
335
+ additional_params['choices'] = param_choices
336
+ args_group.add_argument(
337
+ cli_param_name, *param_alias,
338
+ help=help_text,
339
+ default=signature.parameters[param_name].default,
340
+ action=action,
341
+ **additional_params
342
+ )
343
+
344
+
345
+ class Formatter(argparse.HelpFormatter):
346
+ def _format_usage(self, usage, actions, groups, prefix):
347
+ usage = argparse.HelpFormatter._format_usage(self, usage, actions, groups, prefix)
348
+ usage = usage[0:usage.find('INPUT_MODEL')].rstrip() + '\n'
349
+ insert_idx = usage.find(self._prog) + len(self._prog)
350
+ usage = usage[0: insert_idx] + ' INPUT_MODEL... ' + usage[insert_idx + 1:]
351
+ return usage
352
+
353
+ def _get_default_metavar_for_optional(self, action):
354
+ if action.option_strings == ['--compress_to_fp16']:
355
+ return "True | False"
356
+ return argparse.HelpFormatter._get_default_metavar_for_optional(self, action)
357
+
358
+
359
+ def get_common_cli_parser(parser: argparse.ArgumentParser = None):
360
+ if not parser:
361
+ parser = argparse.ArgumentParser(formatter_class=Formatter)
362
+ mo_convert_params = get_mo_convert_params()
363
+ mo_convert_params_common = mo_convert_params['Optional parameters:']
364
+
365
+ from openvino.tools.ovc.version import VersionChecker
366
+
367
+ # Command line tool specific params
368
+ parser.add_argument('--output_model',
369
+ help='This parameter is used to name output .xml/.bin files of converted model. '
370
+ 'Model name or output directory can be passed. If output directory is passed, '
371
+ 'the resulting .xml/.bin files are named by original model name.')
372
+ parser.add_argument('--compress_to_fp16', type=check_bool, default=True, nargs='?',
373
+ help='Compress weights in output OpenVINO model to FP16. '
374
+ 'To turn off compression use "--compress_to_fp16=False" command line parameter. '
375
+ 'Default value is True.')
376
+ parser.add_argument('--version', action='version',
377
+ help='Print ovc version and exit.',
378
+ version='OpenVINO Model Converter (ovc) {}'.format(VersionChecker().get_ie_version()))
379
+ add_args_by_description(parser, mo_convert_params_common)
380
+ return parser
381
+
382
+
383
+ def input_model_details(model):
384
+ if isinstance(model, (list, tuple)) and len(model) == 1:
385
+ model = model[0]
386
+ if isinstance(model, (str, pathlib.Path)):
387
+ return model
388
+ return type(model)
389
+
390
+
391
+ def get_common_cli_options(argv, is_python_api_used):
392
+ d = OrderedDict()
393
+ d['input_model'] = ['- Input Model', input_model_details]
394
+ if not is_python_api_used:
395
+ model_name = get_model_name_from_args(argv)
396
+ d['output_model'] = ['- IR output name', lambda _: model_name]
397
+ d['input'] = ['- Input layers', lambda x: x if x else 'Not specified, inherited from the model']
398
+ d['output'] = ['- Output layers', lambda x: x if x else 'Not specified, inherited from the model']
399
+ return d
400
+
401
+
402
+ def get_params_with_paths_list():
403
+ return ['input_model', 'output_model', 'extension']
404
+
405
+
406
+ def get_all_cli_parser():
407
+ """
408
+ Specifies cli arguments for Model Conversion
409
+
410
+ Returns
411
+ -------
412
+ ArgumentParser instance
413
+ """
414
+ parser = argparse.ArgumentParser(formatter_class=Formatter)
415
+
416
+ get_common_cli_parser(parser=parser)
417
+
418
+ return parser
419
+
420
+
421
+ def remove_shape_from_input_value(input_value: str):
422
+ """
423
+ Removes the shape specification from the input string. The shape specification is a string enclosed with square
424
+ brackets.
425
+ :param input_value: string passed as input to the "input" command line parameter
426
+ :return: string without shape specification
427
+ """
428
+ if '->' in input_value:
429
+ raise Error('Incorrect format of input. Got {}'.format(input_value))
430
+ return re.sub(r'[(\[]([0-9\.?, -]*)[)\]]', '', input_value)
431
+
432
+
433
+ def get_shape_from_input_value(input_value: str):
434
+ """
435
+ Returns PartialShape corresponding to the shape specified in the input value string
436
+ :param input_value: string passed as input to the "input" command line parameter
437
+ :return: the corresponding shape and None if the shape is not specified in the input value
438
+ """
439
+
440
+ # parse shape
441
+ shape = re.findall(r'[(\[]([0-9\.\?, -]*)[)\]]', input_value)
442
+ if len(shape) == 0:
443
+ shape = None
444
+ elif len(shape) == 1 and shape[0] in ['', ' ']:
445
+ # this shape corresponds to scalar
446
+ shape = PartialShape([])
447
+ elif len(shape) == 1:
448
+ dims = re.split(r', *| +', shape[0])
449
+ dims = list(filter(None, dims))
450
+ shape = PartialShape([Dimension(dim) for dim in dims])
451
+ else:
452
+ raise Error("Wrong syntax to specify shape. Use \"input\" "
453
+ "\"node_name[shape]\"")
454
+ return shape
455
+
456
+
457
+ def get_node_name_with_port_from_input_value(input_value: str):
458
+ """
459
+ Returns the node name (optionally with input/output port) from the input value
460
+ :param input_value: string passed as input to the "input" command line parameter
461
+ :return: the corresponding node name with input/output port
462
+ """
463
+ return remove_shape_from_input_value(input_value)
464
+
465
+
466
+ def parse_input_value(input_value: str):
467
+ """
468
+ Parses a value of the "input" command line parameter and gets a node name, shape and value.
469
+ The node name includes a port if it is specified.
470
+ Shape and value is equal to None if they are not specified.
471
+ Parameters
472
+ ----------
473
+ input_value
474
+ string with a specified node name and shape.
475
+ E.g. 'node_name:0[4]'
476
+
477
+ Returns
478
+ -------
479
+ Node name, shape, value, data type
480
+ E.g. 'node_name:0', '4', [1.0 2.0 3.0 4.0], np.float32
481
+ """
482
+ node_name = get_node_name_with_port_from_input_value(input_value)
483
+ shape = get_shape_from_input_value(input_value)
484
+
485
+ return node_name if node_name else None, shape
486
+
487
+
488
+ def split_inputs(input_str):
489
+ pattern = r'^(?:[^[\]()<]*(\[[\.)-9,\-\s?]*\])*,)*[^[\]()<]*(\[[\.0-9,\-\s?]*\])*$'
490
+ if not re.match(pattern, input_str):
491
+ raise Error(f"input value '{input_str}' is incorrect. Input should be in the following format: "
492
+ f"{get_convert_model_help_specifics()['input']['description']}")
493
+
494
+ brakets_count = 0
495
+ inputs = []
496
+ while input_str:
497
+ idx = 0
498
+ for c in input_str:
499
+ if c == '[':
500
+ brakets_count += 1
501
+ if c == ']':
502
+ brakets_count -= 1
503
+ if c == ',':
504
+ if brakets_count != 0:
505
+ idx += 1
506
+ continue
507
+ else:
508
+ break
509
+ idx += 1
510
+ if idx >= len(input_str) - 1:
511
+ inputs.append(input_str)
512
+ break
513
+ inputs.append(input_str[:idx])
514
+ input_str = input_str[idx + 1:]
515
+ return inputs
516
+
517
+
518
+ def get_model_name(path_input_model: str) -> str:
519
+ """
520
+ Deduces model name by a given path to the input model
521
+ Args:
522
+ path_input_model: path to the input model
523
+
524
+ Returns:
525
+ name of the output IR
526
+ """
527
+ parsed_name, extension = os.path.splitext(os.path.basename(path_input_model))
528
+ return 'model' if parsed_name.startswith('.') or len(parsed_name) == 0 else parsed_name
529
+
530
+
531
+ def get_model_name_from_args(argv: argparse.Namespace):
532
+ output_dir = os.getcwd()
533
+ if hasattr(argv, 'output_model') and argv.output_model:
534
+ model_name = argv.output_model
535
+
536
+ if not os.path.isdir(argv.output_model) and not argv.output_model.endswith(os.sep):
537
+ # In this branch we assume that model name is set in 'output_model'.
538
+ if not model_name.endswith('.xml'):
539
+ model_name += '.xml'
540
+ # Logic of creating and checking directory is covered in save_model() method.
541
+ return model_name
542
+ else:
543
+ # In this branch 'output_model' has directory without name of model.
544
+ # The directory may not exist.
545
+ if os.path.isdir(argv.output_model) and not os.access(argv.output_model, os.W_OK):
546
+ # If the provided path is existing directory, but not writable, then raise error
547
+ raise Error('The directory "{}" is not writable'.format(argv.output_model))
548
+ output_dir = argv.output_model
549
+
550
+ input_model = argv.input_model
551
+ if isinstance(input_model, (tuple, list)) and len(input_model) > 0:
552
+ input_model = input_model[0]
553
+
554
+ input_model = os.path.abspath(input_model)
555
+
556
+ if not isinstance(input_model, (str, pathlib.Path)):
557
+ return output_dir
558
+
559
+ input_model_name = os.path.basename(input_model)
560
+ if input_model_name == '':
561
+ input_model_name = os.path.basename(os.path.dirname(input_model))
562
+
563
+ # remove extension if exists
564
+ input_model_name = os.path.splitext(input_model_name)[0]
565
+
566
+ # if no valid name exists in input path set name to 'model'
567
+ if input_model_name == '':
568
+ raise Exception("Could not derive model name from input model. Please provide 'output_model' parameter.")
569
+
570
+ # add .xml extension
571
+ return os.path.join(output_dir, input_model_name + ".xml")
572
+
573
+
574
+ def get_absolute_path(path_to_file: str) -> str:
575
+ """
576
+ Deduces absolute path of the file by a given path to the file
577
+ Args:
578
+ path_to_file: path to the file
579
+
580
+ Returns:
581
+ absolute path of the file
582
+ """
583
+ if not isinstance(path_to_file, (str, pathlib.Path)):
584
+ return path_to_file
585
+ file_path = os.path.expanduser(path_to_file)
586
+ if not os.path.isabs(file_path):
587
+ file_path = os.path.join(os.getcwd(), file_path)
588
+ return file_path
589
+
590
+
591
+ def check_bool(value):
592
+ if isinstance(value, bool):
593
+ return value
594
+ elif isinstance(value, str):
595
+ if value.lower() not in ['true', 'false']:
596
+ raise argparse.ArgumentTypeError("expected a True/False value")
597
+ return value.lower() == 'true'
598
+ else:
599
+ raise argparse.ArgumentTypeError("expected a bool or str type")
600
+
601
+
602
+ def depersonalize(value: str, key: str):
603
+ dir_keys = [
604
+ 'extension'
605
+ ]
606
+ if isinstance(value, list):
607
+ updated_value = []
608
+ for elem in value:
609
+ updated_value.append(depersonalize(elem, key))
610
+ return updated_value
611
+
612
+ if not isinstance(value, str):
613
+ return value
614
+ res = []
615
+ for path in value.split(','):
616
+ if os.path.isdir(path) and key in dir_keys:
617
+ res.append('DIR')
618
+ elif os.path.isfile(path):
619
+ res.append(os.path.join('DIR', os.path.split(path)[1]))
620
+ else:
621
+ res.append(path)
622
+ return ','.join(res)
623
+
624
+
625
+ def get_available_front_ends(fem=None):
626
+ # Use this function as workaround to avoid IR frontend usage by MO
627
+ if fem is None:
628
+ return []
629
+ available_moc_front_ends = fem.get_available_front_ends()
630
+ if 'ir' in available_moc_front_ends:
631
+ available_moc_front_ends.remove('ir')
632
+
633
+ return available_moc_front_ends