|
- # Copyright 2019 Huawei Technologies Co., Ltd
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- # ==============================================================================
-
- import json
- import os
- import numpy as np
- #import jsbeautifier
- from mindspore import log as logger
-
- COLUMNS = ["col_1d", "col_2d", "col_3d", "col_binary", "col_float",
- "col_sint16", "col_sint32", "col_sint64"]
-
-
- def save_golden(cur_dir, golden_ref_dir, result_dict):
- """
- Save the dictionary values as the golden result in .npz file
- """
- logger.info("cur_dir is {}".format(cur_dir))
- logger.info("golden_ref_dir is {}".format(golden_ref_dir))
- np.savez(golden_ref_dir, np.array(list(result_dict.values())))
-
-
- def save_golden_dict(cur_dir, golden_ref_dir, result_dict):
- """
- Save the dictionary (both keys and values) as the golden result in .npz file
- """
- logger.info("cur_dir is {}".format(cur_dir))
- logger.info("golden_ref_dir is {}".format(golden_ref_dir))
- np.savez(golden_ref_dir, np.array(list(result_dict.items())))
-
-
- def compare_to_golden(golden_ref_dir, result_dict):
- """
- Compare as numpy arrays the test result to the golden result
- """
- test_array = np.array(list(result_dict.values()))
- golden_array = np.load(golden_ref_dir, allow_pickle=True)['arr_0']
- assert np.array_equal(test_array, golden_array)
-
-
- def compare_to_golden_dict(golden_ref_dir, result_dict):
- """
- Compare as dictionaries the test result to the golden result
- """
- golden_array = np.load(golden_ref_dir, allow_pickle=True)['arr_0']
- assert result_dict == dict(golden_array)
-
-
- def save_json(filename, parameters, result_dict):
- """
- Save the result dictionary in json file
- """
- fout = open(filename[:-3] + "json", "w")
- options = jsbeautifier.default_options()
- options.indent_size = 2
-
- out_dict = {**parameters, **{"columns": result_dict}}
- fout.write(jsbeautifier.beautify(json.dumps(out_dict), options))
-
-
-
- def save_and_check(data, parameters, filename, generate_golden=False):
- """
- Save the dataset dictionary and compare (as numpy array) with golden file.
- Use create_dict_iterator to access the dataset.
- """
- num_iter = 0
- result_dict = {}
- for column_name in COLUMNS:
- result_dict[column_name] = []
-
- for item in data.create_dict_iterator(): # each data is a dictionary
- for data_key in list(item.keys()):
- if data_key not in result_dict:
- result_dict[data_key] = []
- result_dict[data_key].append(item[data_key].tolist())
- num_iter += 1
-
- logger.info("Number of data in data1: {}".format(num_iter))
-
- cur_dir = os.path.dirname(os.path.realpath(__file__))
- golden_ref_dir = os.path.join(cur_dir, "../../data/dataset", 'golden', filename)
- if generate_golden:
- # Save as the golden result
- save_golden(cur_dir, golden_ref_dir, result_dict)
-
- compare_to_golden(golden_ref_dir, result_dict)
-
- # Save to a json file for inspection
- # save_json(filename, parameters, result_dict)
-
-
- def save_and_check_dict(data, parameters, filename, generate_golden=False):
- """
- Save the dataset dictionary and compare (as dictionary) with golden file.
- Use create_dict_iterator to access the dataset.
- """
- num_iter = 0
- result_dict = {}
-
- for item in data.create_dict_iterator(): # each data is a dictionary
- for data_key in list(item.keys()):
- if data_key not in result_dict:
- result_dict[data_key] = []
- result_dict[data_key].append(item[data_key].tolist())
- num_iter += 1
-
- logger.info("Number of data in ds1: {}".format(num_iter))
-
- cur_dir = os.path.dirname(os.path.realpath(__file__))
- golden_ref_dir = os.path.join(cur_dir, "../../data/dataset", 'golden', filename)
- if generate_golden:
- # Save as the golden result
- save_golden_dict(cur_dir, golden_ref_dir, result_dict)
-
- compare_to_golden_dict(golden_ref_dir, result_dict)
-
- # Save to a json file for inspection
- # save_json(filename, parameters, result_dict)
-
-
- def ordered_save_and_check(data, parameters, filename, generate_golden=False):
- """
- Save the dataset dictionary and compare (as numpy array) with golden file.
- Use create_tuple_iterator to access the dataset.
- """
- num_iter = 0
-
- result_dict = {}
-
- for item in data.create_tuple_iterator(): # each data is a dictionary
- for data_key in range(0, len(item)):
- if data_key not in result_dict:
- result_dict[data_key] = []
- result_dict[data_key].append(item[data_key].tolist())
- num_iter += 1
-
- logger.info("Number of data in data1: {}".format(num_iter))
-
- cur_dir = os.path.dirname(os.path.realpath(__file__))
- golden_ref_dir = os.path.join(cur_dir, "../../data/dataset", 'golden', filename)
- if generate_golden:
- # Save as the golden result
- save_golden(cur_dir, golden_ref_dir, result_dict)
-
- compare_to_golden(golden_ref_dir, result_dict)
-
- # Save to a json file for inspection
- # save_json(filename, parameters, result_dict)
-
-
- def diff_mse(in1, in2):
- mse = (np.square(in1.astype(float) / 255 - in2.astype(float) / 255)).mean()
- return mse * 100
-
-
- def diff_me(in1, in2):
- mse = (np.abs(in1.astype(float) - in2.astype(float))).mean()
- return mse / 255 * 100
-
-
- def diff_ssim(in1, in2):
- from skimage.measure import compare_ssim as ssim
- val = ssim(in1, in2, multichannel=True)
- return (1 - val) * 100
|