Unverified Commit 02eef9ca authored by guoshzhao's avatar guoshzhao Committed by GitHub
Browse files

Benchmarks: Fix Bug - Fix bug when validate the raw data format. (#35)



* fix raw data validation bug.
* address comments.
Co-authored-by: default avatarGuoshuai Zhao <guzhao@microsoft.com>
parent f0f65a71
...@@ -162,6 +162,16 @@ def __check_result_type(self): ...@@ -162,6 +162,16 @@ def __check_result_type(self):
return True return True
def __is_list_type(self, data, t):
if isinstance(data, list) and all(isinstance(item, t) for item in data):
return True
return False
def __is_list_list_type(self, data, t):
if (self.__is_list_type(data, list) and all(isinstance(value, t) for item in data for value in item)):
return True
return False
def __check_summarized_result(self): def __check_summarized_result(self):
"""Check the validation of summary result. """Check the validation of summary result.
...@@ -169,17 +179,10 @@ def __check_summarized_result(self): ...@@ -169,17 +179,10 @@ def __check_summarized_result(self):
True if the summary result is instance of List[Number]. True if the summary result is instance of List[Number].
""" """
for metric in self._result.result: for metric in self._result.result:
is_valid = isinstance(self._result.result[metric], list) if not self.__is_list_type(self._result.result[metric], numbers.Number):
if is_valid:
for value in self._result.result[metric]:
if not isinstance(value, numbers.Number):
is_valid = False
break
if not is_valid:
logger.error( logger.error(
'Invalid summarized result - benchmark: {}, metric name: {}, expect: List[Number], got: {}.'.format( 'Invalid summarized result - benchmark: {}, metric: {}, result: {}.'.format(
self._name, metric, type(self._result.result[metric]) self._name, metric, self._result.result[metric]
) )
) )
return False return False
...@@ -191,30 +194,24 @@ def __check_raw_data(self): ...@@ -191,30 +194,24 @@ def __check_raw_data(self):
Return: Return:
True if the raw data is: True if the raw data is:
instance of List[List[Number]] for BenchmarkType.MODEL, and BenchmarkType.DOCKER. instance of List[List[Number]] for BenchmarkType.MODEL.
instance of List[str] for BenchmarkType.MICRO. instance of List[str] for BenchmarkType.DOCKER.
instance of List[List[Number]] or List[str] for BenchmarkType.MICRO.
""" """
for metric in self._result.raw_data: for metric in self._result.raw_data:
is_valid = isinstance(self._result.raw_data[metric], list) is_valid = True
if is_valid: if self._benchmark_type == BenchmarkType.MODEL:
for run in self._result.raw_data[metric]: is_valid = self.__is_list_list_type(self._result.raw_data[metric], numbers.Number)
if self._benchmark_type in [BenchmarkType.MODEL, BenchmarkType.DOCKER]: elif self._benchmark_type == BenchmarkType.DOCKER:
if not isinstance(run, list): is_valid = self.__is_list_type(self._result.raw_data[metric], str)
is_valid = False elif self._benchmark_type == BenchmarkType.MICRO:
break is_valid = self.__is_list_type(self._result.raw_data[metric], str) or self.__is_list_list_type(
for value in run: self._result.raw_data[metric], numbers.Number
if not isinstance(value, numbers.Number): )
is_valid = False
break
elif self._benchmark_type in [BenchmarkType.MICRO]:
is_valid = isinstance(run, str)
if not is_valid: if not is_valid:
logger.error( logger.error(
'Invalid raw data - benchmark: {}, metric name: {}, expect: {}, got: {}.'.format( 'Invalid raw data type - benchmark: {}, metric: {}, raw data: {}.'.format(
self._name, metric, self._name, metric, self._result.raw_data[metric]
'List[str]' if self._benchmark_type == BenchmarkType.MICRO else 'List[List[Number]]',
type(self._result.raw_data[metric])
) )
) )
return False return False
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment