| """Tests for json2numpy.py.""" |
| # Copyright (c) 2021-2022, ARM Limited. |
| # SPDX-License-Identifier: Apache-2.0 |
| import json |
| import os |
| |
| import numpy as np |
| import pytest |
| from json2numpy.json2numpy import main |
| |
| |
| @pytest.mark.parametrize( |
| "npy_filename,json_filename,data_type", |
| [ |
| ("single_num.npy", "single_num.json", np.int8), |
| ("multiple_num.npy", "multiple_num.json", np.int8), |
| ("single_num.npy", "single_num.json", np.int16), |
| ("multiple_num.npy", "multiple_num.json", np.int16), |
| ("single_num.npy", "single_num.json", np.int32), |
| ("multiple_num.npy", "multiple_num.json", np.int32), |
| ("single_num.npy", "single_num.json", np.int64), |
| ("multiple_num.npy", "multiple_num.json", np.int64), |
| ("single_num.npy", "single_num.json", np.uint8), |
| ("multiple_num.npy", "multiple_num.json", np.uint8), |
| ("single_num.npy", "single_num.json", np.uint16), |
| ("multiple_num.npy", "multiple_num.json", np.uint16), |
| ("single_num.npy", "single_num.json", np.uint32), |
| ("multiple_num.npy", "multiple_num.json", np.uint32), |
| ("single_num.npy", "single_num.json", np.uint64), |
| ("multiple_num.npy", "multiple_num.json", np.uint64), |
| ("single_num.npy", "single_num.json", np.float16), |
| ("multiple_num.npy", "multiple_num.json", np.float16), |
| ("single_num.npy", "single_num.json", np.float32), |
| ("multiple_num.npy", "multiple_num.json", np.float32), |
| ("single_num.npy", "single_num.json", np.float64), |
| ("multiple_num.npy", "multiple_num.json", np.float64), |
| ("single_num.npy", "single_num.json", bool), |
| ("multiple_num.npy", "multiple_num.json", bool), |
| ], |
| ) |
| def test_json2numpy_npy_file(npy_filename, json_filename, data_type): |
| """Test conversion to JSON.""" |
| # Generate numpy data. |
| if "single" in npy_filename: |
| npy_data = np.ndarray(shape=(1, 1), dtype=data_type) |
| elif "multiple" in npy_filename: |
| npy_data = np.ndarray(shape=(2, 3), dtype=data_type) |
| |
| # Get filepaths |
| npy_file = os.path.join(os.path.dirname(__file__), npy_filename) |
| json_file = os.path.join(os.path.dirname(__file__), json_filename) |
| |
| # Save npy data to file and reload it. |
| with open(npy_file, "wb") as f: |
| np.save(f, npy_data) |
| npy_data = np.load(npy_file) |
| |
| args = [npy_file] |
| """Converts npy file to json""" |
| assert main(args) == 0 |
| |
| json_data = json.load(open(json_file)) |
| assert np.dtype(json_data["type"]) == npy_data.dtype |
| assert np.array(json_data["data"]).shape == npy_data.shape |
| assert (np.array(json_data["data"]) == npy_data).all() |
| |
| # Remove files created |
| if os.path.exists(npy_file): |
| os.remove(npy_file) |
| if os.path.exists(json_file): |
| os.remove(json_file) |
| |
| |
| @pytest.mark.parametrize( |
| "npy_filename,json_filename,data_type", |
| [ |
| ("single_num.npy", "single_num.json", np.int8), |
| ("multiple_num.npy", "multiple_num.json", np.int8), |
| ("single_num.npy", "single_num.json", np.int16), |
| ("multiple_num.npy", "multiple_num.json", np.int16), |
| ("single_num.npy", "single_num.json", np.int32), |
| ("multiple_num.npy", "multiple_num.json", np.int32), |
| ("single_num.npy", "single_num.json", np.int64), |
| ("multiple_num.npy", "multiple_num.json", np.int64), |
| ("single_num.npy", "single_num.json", np.uint8), |
| ("multiple_num.npy", "multiple_num.json", np.uint8), |
| ("single_num.npy", "single_num.json", np.uint16), |
| ("multiple_num.npy", "multiple_num.json", np.uint16), |
| ("single_num.npy", "single_num.json", np.uint32), |
| ("multiple_num.npy", "multiple_num.json", np.uint32), |
| ("single_num.npy", "single_num.json", np.uint64), |
| ("multiple_num.npy", "multiple_num.json", np.uint64), |
| ("single_num.npy", "single_num.json", np.float16), |
| ("multiple_num.npy", "multiple_num.json", np.float16), |
| ("single_num.npy", "single_num.json", np.float32), |
| ("multiple_num.npy", "multiple_num.json", np.float32), |
| ("single_num.npy", "single_num.json", np.float64), |
| ("multiple_num.npy", "multiple_num.json", np.float64), |
| ("single_num.npy", "single_num.json", bool), |
| ("multiple_num.npy", "multiple_num.json", bool), |
| ], |
| ) |
| def test_json2numpy_json_file(npy_filename, json_filename, data_type): |
| """Test conversion to binary.""" |
| # Generate json data. |
| if "single" in npy_filename: |
| npy_data = np.ndarray(shape=(1, 1), dtype=data_type) |
| elif "multiple" in npy_filename: |
| npy_data = np.ndarray(shape=(2, 3), dtype=data_type) |
| |
| # Generate json dictionary |
| list_data = npy_data.tolist() |
| json_data_type = str(npy_data.dtype) |
| |
| json_data = {} |
| json_data["type"] = json_data_type |
| json_data["data"] = list_data |
| |
| # Get filepaths |
| npy_file = os.path.join(os.path.dirname(__file__), npy_filename) |
| json_file = os.path.join(os.path.dirname(__file__), json_filename) |
| |
| # Save json data to file and reload it. |
| with open(json_file, "w") as f: |
| json.dump(json_data, f) |
| json_data = json.load(open(json_file)) |
| |
| args = [json_file] |
| """Converts json file to npy""" |
| assert main(args) == 0 |
| |
| npy_data = np.load(npy_file) |
| assert np.dtype(json_data["type"]) == npy_data.dtype |
| assert np.array(json_data["data"]).shape == npy_data.shape |
| assert (np.array(json_data["data"]) == npy_data).all() |
| |
| # Remove files created |
| if os.path.exists(npy_file): |
| os.remove(npy_file) |
| if os.path.exists(json_file): |
| os.remove(json_file) |