openvino/model-optimizer/extensions/analysis/json_print.py

61 lines
1.8 KiB
Python

# Copyright (C) 2018-2021 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
import json
import logging as log
import sys
import numpy as np
from extensions.front.user_data_repack import UserDataRepack
from mo.graph.graph import Graph
from mo.middle.passes.convert_data_type import np_data_type_to_precision
from mo.utils.model_analysis import AnalyzeAction, AnalysisCollectorAnchor, AnalysisResults
def prepare_obj_for_dump(obj: object):
if isinstance(obj, dict):
return {k: prepare_obj_for_dump(v) for k, v in obj.items()}
elif isinstance(obj, np.ndarray):
if obj.ndim == 0:
return obj.item()
else:
return [prepare_obj_for_dump(elem) for elem in obj]
elif isinstance(obj, list):
return [prepare_obj_for_dump(elem) for elem in obj]
elif isinstance(obj, type):
try:
return np_data_type_to_precision(obj)
except:
log.error('Unsupported data type: {}'.format(str(obj)))
return str(obj)
elif isinstance(obj, np.generic):
return obj.item()
else:
return str(obj)
class AnalysisJSONPrint(AnalyzeAction):
"""
The action prints the analysis results in JSON format.
"""
enabled = False
id = 'ANALYSIS_JSON_PRINT'
def run_before(self):
return [UserDataRepack]
def run_after(self):
return [AnalysisCollectorAnchor]
def analyze(self, graph: Graph):
analysis_results = AnalysisResults()
if analysis_results.get_result() is not None:
try:
print(json.dumps(prepare_obj_for_dump(analysis_results.get_result())))
except Exception as e:
log.error('Cannot serialize to JSON: %s', str(e))
sys.exit(1)
sys.exit(0)