def import_core_modules(silent: bool, path_to_module: str): """ This function checks that InferenceEngine Python API is available and necessary python modules exists. So the next list of imports must contain all IE/NG Python API imports that are used inside MO. :param silent: enables or disables logs printing to stdout :param path_to_module: path where python API modules were found :return: True if all imports were successful and False otherwise """ try: from openvino.inference_engine import get_version, read_network # pylint: disable=import-error,no-name-in-module from openvino.offline_transformations import ApplyMOCTransformations, ApplyLowLatencyTransformation, \ ApplyMakeStatefulTransformation, GenerateMappingFile # pylint: disable=import-error,no-name-in-module # TODO: it is temporary import to check that nGraph python API is available. But in future # we need to replace it with Frontend imports from ngraph.impl.op import Parameter # pylint: disable=import-error,no-name-in-module from _pyngraph import PartialShape, Dimension # pylint: disable=import-error,no-name-in-module import openvino # pylint: disable=import-error,no-name-in-module import ngraph # pylint: disable=import-error,no-name-in-module import ngraph.frontend # pylint: disable=import-error,no-name-in-module if silent: return True ie_version = str(get_version()) mo_version = str(v.get_version()) # pylint: disable=no-member,no-name-in-module print("\t- {}: \t{}".format("Inference Engine found in", os.path.dirname(openvino.__file__))) # TODO: when nGraph version will be available we need to start compare it to IE and MO versions. Ticket: 58091 print("\t- {}: \t{}".format("nGraph found in", os.path.dirname(ngraph.__file__))) print("{}: \t{}".format("Inference Engine version", ie_version)) print("{}: \t{}".format("Model Optimizer version", mo_version)) versions_mismatch = False if mo_version != ie_version: versions_mismatch = True extracted_mo_release_version = v.extract_release_version( mo_version) mo_is_custom = extracted_mo_release_version == (None, None) print( "[ WARNING ] Model Optimizer and Inference Engine versions do no match." ) print( "[ WARNING ] Consider building the Inference Engine Python API from sources or reinstall OpenVINO " "(TM) toolkit using", end=" ") if mo_is_custom: print( "\"pip install openvino\" (may be incompatible with the current Model Optimizer version)" ) else: print("\"pip install openvino=={}.{}\"".format( *extracted_mo_release_version)) simplified_mo_version = v.get_simplified_mo_version() message = str( dict({ "platform": platform.system(), "mo_version": simplified_mo_version, "ie_version": v.get_simplified_ie_version(version=ie_version), "versions_mismatch": versions_mismatch, })) send_telemetry(simplified_mo_version, message, 'ie_version_check') return True except Exception as e: # Do not print a warning if module wasn't found or silent mode is on if "No module named 'openvino'" not in str(e): print( "[ WARNING ] Failed to import Inference Engine Python API in: {}" .format(path_to_module)) print("[ WARNING ] {}".format(e)) # Send telemetry message about warning simplified_mo_version = v.get_simplified_mo_version() message = str( dict({ "platform": platform.system(), "mo_version": simplified_mo_version, "ie_version": v.get_simplified_ie_version(env=os.environ), "python_version": sys.version, "error_type": classify_error_type(e), })) send_telemetry(simplified_mo_version, message, 'ie_import_failed') return False
def test_custom_release_version_extractor(self, mock_open, mock_isfile): mock_isfile.return_value = True mock_open.return_value.__enter__ = mock_open self.assertEqual(extract_release_version(get_version()), ('2021', '1'))
def test_release_version_extractor_neg(self, mock_open, mock_isfile): mock_isfile.return_value = True mock_open.return_value.__enter__ = mock_open self.assertEqual(extract_release_version(get_version()), (None, None))
def import_core_modules(silent: bool, path_to_module: str): try: from openvino.inference_engine import IECore, get_version # pylint: disable=import-error from openvino.offline_transformations import ApplyMOCTransformations, CheckAPI # pylint: disable=import-error import openvino # pylint: disable=import-error if silent: return True ie_version = str(get_version()) mo_version = str(v.get_version()) # pylint: disable=no-member print("\t- {}: \t{}".format("Inference Engine found in", os.path.dirname(openvino.__file__))) print("{}: \t{}".format("Inference Engine version", ie_version)) print("{}: \t {}".format("Model Optimizer version", mo_version)) versions_mismatch = False # MO and IE version have a small difference in the beginning of version because # IE version also includes API version. For example: # Inference Engine version: 2.1.custom_HEAD_4c8eae0ee2d403f8f5ae15b2c9ad19cfa5a9e1f9 # Model Optimizer version: custom_HEAD_4c8eae0ee2d403f8f5ae15b2c9ad19cfa5a9e1f9 # So to match this versions we skip IE API version. if not re.match(r"^([0-9]+).([0-9]+).{}$".format(mo_version), ie_version): versions_mismatch = True extracted_mo_release_version = v.extract_release_version( mo_version) mo_is_custom = extracted_mo_release_version == (None, None) print( "[ WARNING ] Model Optimizer and Inference Engine versions do no match." ) print( "[ WARNING ] Consider building the Inference Engine Python API from sources or reinstall OpenVINO (TM) toolkit using", end=" ") if mo_is_custom: print( "\"pip install openvino\" (may be incompatible with the current Model Optimizer version)" ) else: print("\"pip install openvino=={}.{}\"".format( *extracted_mo_release_version)) simplified_mo_version = v.get_simplified_mo_version() message = str( dict({ "platform": platform.system(), "mo_version": simplified_mo_version, "ie_version": v.get_simplified_ie_version(version=ie_version), "versions_mismatch": versions_mismatch, })) send_telemetry(simplified_mo_version, message, 'ie_version_check') return True except Exception as e: # Do not print a warning if module wasn't found or silent mode is on if "No module named 'openvino'" not in str(e) and not silent: print( "[ WARNING ] Failed to import Inference Engine Python API in: {}" .format(path_to_module)) print("[ WARNING ] {}".format(e)) # Send telemetry message about warning simplified_mo_version = v.get_simplified_mo_version() message = str( dict({ "platform": platform.system(), "mo_version": simplified_mo_version, "ie_version": v.get_simplified_ie_version(env=os.environ), "python_version": sys.version, "error_type": classify_error_type(e), })) send_telemetry(simplified_mo_version, message, 'ie_import_failed') return False