From 02f95072cbbdd8ffbb2cea9ee677c60d3827d6ec Mon Sep 17 00:00:00 2001 From: "Christopher M. Pierce" Date: Fri, 14 Aug 2026 01:09:25 -0700 Subject: [PATCH 1/4] bring back old file formats --- .gitignore | 1 + .../paretobench_file_format_v1.0.0.h5 | Bin 0 -> 159064 bytes .../paretobench_file_format_v1.1.0.h5 | Bin 0 -> 159064 bytes 3 files changed, 1 insertion(+) create mode 100644 tests/test_data/file_versions/paretobench_file_format_v1.0.0.h5 create mode 100644 tests/test_data/file_versions/paretobench_file_format_v1.1.0.h5 diff --git a/.gitignore b/.gitignore index 485205e..9beec8b 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ __pycache__ /large_files/ *.h5 !/docs/data/*.h5 +!/tests/test_data/file_versions/*.h5 venv profile* *-checkpoint.ipynb diff --git a/tests/test_data/file_versions/paretobench_file_format_v1.0.0.h5 b/tests/test_data/file_versions/paretobench_file_format_v1.0.0.h5 new file mode 100644 index 0000000000000000000000000000000000000000..04fd3ff80fc002d88ac0423a17ba586824cce6bd GIT binary patch literal 159064 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 C(1_&# literal 0 HcmV?d00001 diff --git a/tests/test_data/file_versions/paretobench_file_format_v1.1.0.h5 b/tests/test_data/file_versions/paretobench_file_format_v1.1.0.h5 new file mode 100644 index 0000000000000000000000000000000000000000..831337a088144613988c4a68dd8de6a10798133c GIT binary patch literal 159064 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¬@X4?73|L&1bk$7 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 N(wZJ?8WP4g{{d;x-Io9W literal 0 HcmV?d00001 From b5d9e07e55379d0881feb695799e44aed65c4e43 Mon Sep 17 00:00:00 2001 From: "Christopher M. Pierce" Date: Fri, 14 Aug 2026 01:17:57 -0700 Subject: [PATCH 2/4] add script to make test data --- .../generate_file_version_data.py | 122 +++ .../paretobench_file_format_v1.0.0.json | 815 ++++++++++++++++++ .../paretobench_file_format_v1.1.0.json | 815 ++++++++++++++++++ tests/utils.py | 88 ++ 4 files changed, 1840 insertions(+) create mode 100644 tests/test_data/file_versions/generate_file_version_data.py create mode 100644 tests/test_data/file_versions/paretobench_file_format_v1.0.0.json create mode 100644 tests/test_data/file_versions/paretobench_file_format_v1.1.0.json diff --git a/tests/test_data/file_versions/generate_file_version_data.py b/tests/test_data/file_versions/generate_file_version_data.py new file mode 100644 index 0000000..eab670a --- /dev/null +++ b/tests/test_data/file_versions/generate_file_version_data.py @@ -0,0 +1,122 @@ +import argparse +import json +import random +import shutil +import sys +from datetime import datetime, timezone +from pathlib import Path + +import h5py +import numpy as np + +from paretobench import Experiment, History + +# The tests package is not installed, so put the repository root on the path to share the manifest code with the tests +sys.path.insert(0, str(Path(__file__).resolve().parents[3])) + +from tests.utils import experiment_to_manifest # noqa: E402 + +DEFAULT_OUT_DIR = Path(__file__).resolve().parent +FILENAME_FMT = "paretobench_file_format_v{version}.h5" + + +def make_experiment(): + """ + Build the synthetic experiment which gets saved into the fixtures. The contents are deterministic so that + running this script twice with the same version of the library produces the same file. Names and the + objective / constraint settings are included so that every serialized field is covered. + + Returns + ------- + Experiment + The experiment to save + """ + random.seed(0) + np.random.seed(0) + + runs = [] + for problem in ["ZDT1 (n=4)", "CTP1 (n=4)", "TNK"]: + run = History.from_random( + n_populations=4, + n_objectives=3, + n_decision_vars=4, + n_constraints=2, + pop_size=25, + generate_names=True, + generate_obj_constraint_settings=True, + ) + run.problem = problem + runs.append(run) + + return Experiment( + runs=runs, + name="file_format_regression", + author="ParetoBench test suite", + software="ParetoBench", + software_version="0.0.0", + comment="Synthetic data used by the file format regression tests", + creation_time=datetime(2025, 1, 1, tzinfo=timezone.utc), + ) + + +def write_manifest(path): + """ + Record what a saved file contains in a JSON file next to it. The description is taken from the file as it + reads back off of disk so that it captures the output of the reader and not the object which was saved. + + Parameters + ---------- + path : Path + The saved HDF5 file to describe + + Returns + ------- + Path + Path of the manifest which was written + """ + manifest_path = path.with_suffix(".json") + with open(manifest_path, "w") as fd: + json.dump(experiment_to_manifest(Experiment.load(path)), fd, indent=2, sort_keys=True) + return manifest_path + + +def main(): + parser = argparse.ArgumentParser( + description=( + "Save a file of synthetic data in the version of the ParetoBench file format the library currently " + "writes." + ) + ) + parser.add_argument("--out-dir", type=Path, default=DEFAULT_OUT_DIR, help="directory to save the file into") + parser.add_argument("--force", action="store_true", help="overwrite an existing file for this version") + parser.add_argument("--manifest", type=Path, help="rewrite the manifest of an existing file and exit") + args = parser.parse_args() + + # Refresh the manifest of a file which already exists (used to bootstrap files saved by older versions) + if args.manifest is not None: + print(f"Wrote {write_manifest(args.manifest)}") + return + + # Save the data, then name the file after the version which actually ended up in it + args.out_dir.mkdir(parents=True, exist_ok=True) + tmp_path = args.out_dir / "_generate_file_version_data.h5" + make_experiment().save(tmp_path) + with h5py.File(tmp_path) as fd: + version = fd.attrs["file_version"] + path = args.out_dir / FILENAME_FMT.format(version=version) + + # Regenerating the file of an already released version would destroy the record of how that version wrote data + if path.exists() and not args.force: + tmp_path.unlink() + raise SystemExit( + f"{path} already exists, refusing to regenerate the fixture of a released format version. " + "Pass --force to overwrite it anyway." + ) + + shutil.move(tmp_path, path) + print(f"Wrote {path} (file version {version})") + print(f"Wrote {write_manifest(path)}") + + +if __name__ == "__main__": + main() diff --git a/tests/test_data/file_versions/paretobench_file_format_v1.0.0.json b/tests/test_data/file_versions/paretobench_file_format_v1.0.0.json new file mode 100644 index 0000000..e6fccae --- /dev/null +++ b/tests/test_data/file_versions/paretobench_file_format_v1.0.0.json @@ -0,0 +1,815 @@ +{ + "author": "", + "comment": "", + "creation_time": "2025-01-23T06:35:20.241793+00:00", + "file_version": "1.0.0", + "name": "pymoo_nsgaii", + "runs": [ + { + "metadata": {}, + "problem": "ZDT2 (n=5)", + "reports": [ + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "6ef2547b766f5c0e0c1b4a7a669e79b0f80a0573c19bcfa92916a5bd2d0865ec", + "fevals": 50, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "3b2d74eed2b6600433de939b181f2856fd70cff92d1e32909ac7ac88a1f77c28" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "d72378e6876da22c921ab3fc3eefd7819270cbbd3afa55980d0cc463780f1f92", + "fevals": 100, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "119795280e0e1fb558ecef619d4b6083f4aecbcc34cee074fce3fc6954aeae39" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "63ac40cd8836c2cdab7f178f90bc5247bc5daeb2eaaf690410bece0665a1596d", + "fevals": 150, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "b37443ac45a3bde81bca6686a6944783486812472181ac3619e2ee855dec6d59" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "3863e156bd760f5e00a58464aa387ac7c525ed79dbf3bd1abb96b0d2e9c6e98c", + "fevals": 200, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "1630ebf46c0d910fff487a13b95c3072fd90f0ff1fe24b97c36efc63bca838b0" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "90663b84faf4eeee5372ec36847b236903fe3249b28b94c844309b32ba5b218e", + "fevals": 250, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "dd1e5b71e3d6215173745aae9e64219982ff4062d5a8345c977c20e649b5a5cb" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "6a0df6ed710e2f349f429ccd3b29a654a20c0e6fa03cfcc77f8cd492bf7be2ad", + "fevals": 300, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "be66f8a208a6bf59dc4478761cfac501d598fe3871587234d3cdeb1b275732e5" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "1a0d039137bf9e195eb911a69cccfa4348ac7b698e251b146c33ce06f7a27974", + "fevals": 350, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "f991d73ee8b4949445a5f91f3dadde91552dd973a3f67bf833031a3b144241d2" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "f51f27723bda99e1d1fb58ca1258be7d8a6677257354499db60d9986c4c2116d", + "fevals": 400, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "09ab4b8ea994852ca3fa95538e26ee13239892b70c3c985ba1976950ee710cc9" + } + ] + }, + { + "metadata": {}, + "problem": "ZDT4 (n=5)", + "reports": [ + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "f3d8b4ddd27270ef768ad55db5e15681bc2e13d0922a12350aecc2689fbd27bf", + "fevals": 50, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "5129b12bc092720878f65ea8e8e64c9c8e10bc6525b860065f50f205af1aaa30" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "e94ea63c3aa76d2fc94db8501c1c2555997f6f831a83cbdfabbf55e253e928d5", + "fevals": 100, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "c80488e2e77c8c7fb07e192a8f9cd13b42f72f11d0fa163d719bc88f2bf1d4b7" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "1e26e89ab423e07553bc582e2df113ef849fced6d9f09809eded126e46d1e901", + "fevals": 150, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "ee1f2f7ef29d5187d13ee669f998237cafc28ea07ed456c5aa3a0d0bdf515e8c" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "2796ec0c227aaec173372ba44663e84b93f38915267a8a4916d4ea860502c2bb", + "fevals": 200, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "3ece64d9ccb0fb86003eaafa4f6a7856af7be2adb4e245d9ea2c853f3d71e3d8" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "50642459172aa42c87ed005b40e2414faee83b9a49e764cda5f7b6830930e46d", + "fevals": 250, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "c0c5551a141602e30a80a6796623b695849388591c00fc82c8b34af0520fb661" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "1cd0551d5f6aee39f63aaa34029532322ee20d2ef5e650af51d5463e915a70c9", + "fevals": 300, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "42625c5e8f003a3d4a1b93de25a9b8fd26b3e2ab9886fa3a97269bcaf8bd02a2" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "33f13258d5820089d726b39d612b4620e7b7f970f4922f515a8183d64936b77f", + "fevals": 350, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "d86d9f3cb6b714bf93d17bd33f7ee0a74498b52698e921a2f0438cf3a07c2df7" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "e616c4109069501c99c66937c629510586c8609c22b500ccb85f825f4c4f83a6", + "fevals": 400, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "40aaaf70ad4952885313cd34311f415c24465187959559f82fe86f3aab5b825f" + } + ] + }, + { + "metadata": {}, + "problem": "ZDT6 (n=5)", + "reports": [ + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "e0e28ec4d01a69972325c08995d5bdaf2350b759cefd2db966535d261821f665", + "fevals": 50, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "6bbc30fdb0e0c1d7ec230cf6dc41d161fd6865f24c6df5df9aee491f36051a67" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "aca3ac103d4c8ee93783dadcccb6a57e9f07c37b0b4e565bc1d9028b3f64bfd3", + "fevals": 100, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "8651c618c24b08877aa5dcc7ef1ec4cf8d445b25c1dccc640bbe92ad7f4a16c9" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "e09b9166f63c5d4671e954dce67bc03eb832926235a985507030be9d9fb7b5a1", + "fevals": 150, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "1ceb5e1607a108f9ab4b93837b9901ddede725dda4d8502d713dd706dbbb6825" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "83e855037241345ec506d23e8855f72fe72b52a262be903a0ad25a9399038aaa", + "fevals": 200, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "8ab0082734025e52fbfe729d76979a91b9c83e39c31320dbb264176f90e38514" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "76d7c3debac2f2ee57adfce503a336dce3838f361952b8d44a63462d6e74c9e0", + "fevals": 250, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "22837213bf2a410f53800c2a28a20a6e650916366556d5f5bd47f2dfd13e7853" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "a435a96b611bdcc901285f96f66cac5943e3358b8421e9f8fb1bf749cfca538c", + "fevals": 300, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "0acad307f3e412fbffc9c901a205f8931d569841749089bc8956539d7c24a281" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "cf4556c4ca7eccf6eeddf758f8a7ef66ae593d0d8be93b7a21ecf502c89d0654", + "fevals": 350, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "c2be26ae7b20916e87308eaaab9fffc0462d05f28fe74bdc6c61eac8b1532991" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "58248818992f25f4e508e52d95ca1cce4659004a41950b5a3764aa11d98178dc", + "fevals": 400, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "df3e9b06e4777cfbadd0412e78484785b22d667a11dc906b1659f49b79894f4e" + } + ] + }, + { + "metadata": {}, + "problem": "ZDT4 (n=5)", + "reports": [ + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "d691cd18dbb18838bec4123a4d0d8c7e835f90b22aafdeda4095b28c80b8a7e0", + "fevals": 50, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "240594fa871c1c47eaa65f8d603b06fad4a635e8a45ddc31a0029e2a6b2d4d1b" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "7a6d8919e0fb1aaed020d49a99a9a2d17f36ceb8edd8a46693c6770661f246bc", + "fevals": 100, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "5ff66c434ffbd1aa9b95d04dd3bd39ce9403d91d0f1034ed30b9cfef08de24b7" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "6797bd8f28f60e669261e6022bdff0b5c2e1c0de47ff85bcc6b992c00e3846d3", + "fevals": 150, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "20d33df82efff7fbfcb1657e6fa3bfeac1282030eae63e31511481710a1b4926" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "5b596b5c97559e325701fc5868653604c4d2616367e02d5741fb2ff7e63dbec3", + "fevals": 200, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "d86606ca44168d2515236f57472e6b1ae3731eb10ef7c201567682043228db3b" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "f4e175ab6306bdd5671530108de4f44bc656d3fabdf8550a8df955404c364b25", + "fevals": 250, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "6fdfff6603e039d843b46a1cfaf5b217b8c8d51c7978cbcfbbc541b1a5b8aa81" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "272a5b3264b1e33176c5324090104f631d08ca5f7d22d64a81ddaad26aee50df", + "fevals": 300, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "0a6febc59f3123b6f80343dc5b424dc154f8a53d8bb1948e0c2b56f5eff95c24" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "0170cad4cb821f3f58c066960e3b0fcb54794f75aa42be3cace7b7eca12c4f12", + "fevals": 350, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "c22b349b1a39dda308828bd41499db3b9fef874516ce53e0e08a4af716d9ff9c" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "392486399ede2b9157b1df8a6d9d4f90fcd5777950ad01dbf31940e262f06071", + "fevals": 400, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "270bcb920898d79b9fd67c9a5c89133bf40a76366641cf3d0227ed42259cef19" + } + ] + }, + { + "metadata": {}, + "problem": "ZDT2 (n=5)", + "reports": [ + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "d08c61f3f2168b0f6e226b2548fc375cd36cf85cb2d7f89c6c961f0063b9348d", + "fevals": 50, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "936910b0844695c0bdb24f530781a2d6c2436c76d19958de2f391c13648a9da5" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "02e88b3e3d7e7fdc8bfc088532a514da6e43f4a0afc45c7b7141e77429b4d8fb", + "fevals": 100, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "1d5b2eff103a96a2046b11f9e416750346ebb1359bd9e376ea1f24893be184b2" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "06f3d123e38631cf0151cd1da0bc3c3e7aa1f7203120b204af7fc56746aaa78e", + "fevals": 150, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "55d78e8bf10287f6857049b720c1f83f8a81db87521dc44a8a3b14a165150e7f" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "8ddbf319c9a91e37aa3ccf7921c64cdef577e895dee39eb473cf2804cf3ec24c", + "fevals": 200, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "5172e91510bc1f18b8f47edc1e13604ba0be6d7e2e7f2bad3a49efec6d9fbe51" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "7c21bcd2a979adee4a1d01fda724e8d06925d324585514eca9ff45e18c025455", + "fevals": 250, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "de77677aa32987444792688788dec6c1bc7d3c2509397e1fa9766627625877fb" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "6385699107219f7cf1139d33cff4229ac892af89468858d729c1ffe5271746ad", + "fevals": 300, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "733ce3a1c45dcd1f511cd507cdf708d53b2809be50e60cf3a1b0260d47fd3f54" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "551e107bed89f7419eb51492751ec5a432a6185ab620f6fc092f16204185269d", + "fevals": 350, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "a1362da78318ba8f67e36d6cd22d3e50b2345721cc6d308a6dc08e690cc7f8db" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "aca355ba71e0e4af537f8f21116978cded04c2a069c9626f83cbdea23e78aa2c", + "fevals": 400, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "ef9d2bb572962c77dd566adf13ae1ef7d32400b064adbce3f8b023f14c612225" + } + ] + }, + { + "metadata": {}, + "problem": "ZDT6 (n=5)", + "reports": [ + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "a2d379ca5413eae4f46c3f4c177c5deea378c2ee38e05a6c7d28c7dbf11c573e", + "fevals": 50, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "e6b663e84e7955e5ddf753f9b0d55d89b31305e5c5eb17ae0bdb10dec010e709" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "78329ff6bc79bc0ab6cd38d1578707bbcd8bb0030d6107802fe52b8a4cecbef8", + "fevals": 100, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "45edf82f5a101789bfa222ed329243abcc781ce1a21bbd403ead41260543a9a6" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "fb3c4dee89c97b684c7102a00485c4745cbc91e076d10357a5969732793e7fb4", + "fevals": 150, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "fab599d313a85a247de1647da245c6a43b36833cb171776ea21afcbf1bf0d585" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "445013051931f4bd4453b4d10e02ac5e4659fd2d08b9815eaa672a6593708efb", + "fevals": 200, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "8466b5596f0214a13d971f6552ef11bf90295c22e4c40dd631c659660fe95597" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "432183d689123fca2acaf249a879c67bc723e73a9370a9ebd90055fa92b986e4", + "fevals": 250, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "9a395681bfa39ffdf8de35f84efff9f7aea3e78922fc83a4d592b426894eb3f1" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "79b07472505c0e404300f800870e06986c72fbd1c0616fa5ac98fd756be51e6f", + "fevals": 300, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "c19e3f2d09a32777ce4dd264d88d9668d9c3a4d6213f8685b1a75651bf0d8eba" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "75144bd6e9490e2069be779fa5caf7ef3cdb3e26b4b737e2b58e2b85d2354e07", + "fevals": 350, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "1103dbced7246f9385555edbd1058382a322f2e52bf2a5909543ac5233193c3b" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "41d6481e13ed66e64cebfd5825d36bb1386802546c1475bb03ea324626da05e9", + "fevals": 400, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "29b0adcb029240572c1254f6184dc30a4a447ee011c62a9fc065af4d420fb715" + } + ] + } + ], + "software": "", + "software_version": "" +} \ No newline at end of file diff --git a/tests/test_data/file_versions/paretobench_file_format_v1.1.0.json b/tests/test_data/file_versions/paretobench_file_format_v1.1.0.json new file mode 100644 index 0000000..bfbb218 --- /dev/null +++ b/tests/test_data/file_versions/paretobench_file_format_v1.1.0.json @@ -0,0 +1,815 @@ +{ + "author": "", + "comment": "", + "creation_time": "2025-01-23T06:35:20.241793+00:00", + "file_version": "1.1.0", + "name": "pymoo_nsgaii", + "runs": [ + { + "metadata": {}, + "problem": "ZDT2 (n=5)", + "reports": [ + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "6ef2547b766f5c0e0c1b4a7a669e79b0f80a0573c19bcfa92916a5bd2d0865ec", + "fevals": 50, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "3b2d74eed2b6600433de939b181f2856fd70cff92d1e32909ac7ac88a1f77c28" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "d72378e6876da22c921ab3fc3eefd7819270cbbd3afa55980d0cc463780f1f92", + "fevals": 100, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "119795280e0e1fb558ecef619d4b6083f4aecbcc34cee074fce3fc6954aeae39" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "63ac40cd8836c2cdab7f178f90bc5247bc5daeb2eaaf690410bece0665a1596d", + "fevals": 150, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "b37443ac45a3bde81bca6686a6944783486812472181ac3619e2ee855dec6d59" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "3863e156bd760f5e00a58464aa387ac7c525ed79dbf3bd1abb96b0d2e9c6e98c", + "fevals": 200, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "1630ebf46c0d910fff487a13b95c3072fd90f0ff1fe24b97c36efc63bca838b0" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "90663b84faf4eeee5372ec36847b236903fe3249b28b94c844309b32ba5b218e", + "fevals": 250, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "dd1e5b71e3d6215173745aae9e64219982ff4062d5a8345c977c20e649b5a5cb" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "6a0df6ed710e2f349f429ccd3b29a654a20c0e6fa03cfcc77f8cd492bf7be2ad", + "fevals": 300, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "be66f8a208a6bf59dc4478761cfac501d598fe3871587234d3cdeb1b275732e5" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "1a0d039137bf9e195eb911a69cccfa4348ac7b698e251b146c33ce06f7a27974", + "fevals": 350, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "f991d73ee8b4949445a5f91f3dadde91552dd973a3f67bf833031a3b144241d2" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "f51f27723bda99e1d1fb58ca1258be7d8a6677257354499db60d9986c4c2116d", + "fevals": 400, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "09ab4b8ea994852ca3fa95538e26ee13239892b70c3c985ba1976950ee710cc9" + } + ] + }, + { + "metadata": {}, + "problem": "ZDT4 (n=5)", + "reports": [ + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "f3d8b4ddd27270ef768ad55db5e15681bc2e13d0922a12350aecc2689fbd27bf", + "fevals": 50, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "5129b12bc092720878f65ea8e8e64c9c8e10bc6525b860065f50f205af1aaa30" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "e94ea63c3aa76d2fc94db8501c1c2555997f6f831a83cbdfabbf55e253e928d5", + "fevals": 100, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "c80488e2e77c8c7fb07e192a8f9cd13b42f72f11d0fa163d719bc88f2bf1d4b7" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "1e26e89ab423e07553bc582e2df113ef849fced6d9f09809eded126e46d1e901", + "fevals": 150, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "ee1f2f7ef29d5187d13ee669f998237cafc28ea07ed456c5aa3a0d0bdf515e8c" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "2796ec0c227aaec173372ba44663e84b93f38915267a8a4916d4ea860502c2bb", + "fevals": 200, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "3ece64d9ccb0fb86003eaafa4f6a7856af7be2adb4e245d9ea2c853f3d71e3d8" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "50642459172aa42c87ed005b40e2414faee83b9a49e764cda5f7b6830930e46d", + "fevals": 250, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "c0c5551a141602e30a80a6796623b695849388591c00fc82c8b34af0520fb661" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "1cd0551d5f6aee39f63aaa34029532322ee20d2ef5e650af51d5463e915a70c9", + "fevals": 300, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "42625c5e8f003a3d4a1b93de25a9b8fd26b3e2ab9886fa3a97269bcaf8bd02a2" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "33f13258d5820089d726b39d612b4620e7b7f970f4922f515a8183d64936b77f", + "fevals": 350, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "d86d9f3cb6b714bf93d17bd33f7ee0a74498b52698e921a2f0438cf3a07c2df7" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "e616c4109069501c99c66937c629510586c8609c22b500ccb85f825f4c4f83a6", + "fevals": 400, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "40aaaf70ad4952885313cd34311f415c24465187959559f82fe86f3aab5b825f" + } + ] + }, + { + "metadata": {}, + "problem": "ZDT6 (n=5)", + "reports": [ + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "e0e28ec4d01a69972325c08995d5bdaf2350b759cefd2db966535d261821f665", + "fevals": 50, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "6bbc30fdb0e0c1d7ec230cf6dc41d161fd6865f24c6df5df9aee491f36051a67" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "aca3ac103d4c8ee93783dadcccb6a57e9f07c37b0b4e565bc1d9028b3f64bfd3", + "fevals": 100, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "8651c618c24b08877aa5dcc7ef1ec4cf8d445b25c1dccc640bbe92ad7f4a16c9" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "e09b9166f63c5d4671e954dce67bc03eb832926235a985507030be9d9fb7b5a1", + "fevals": 150, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "1ceb5e1607a108f9ab4b93837b9901ddede725dda4d8502d713dd706dbbb6825" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "83e855037241345ec506d23e8855f72fe72b52a262be903a0ad25a9399038aaa", + "fevals": 200, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "8ab0082734025e52fbfe729d76979a91b9c83e39c31320dbb264176f90e38514" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "76d7c3debac2f2ee57adfce503a336dce3838f361952b8d44a63462d6e74c9e0", + "fevals": 250, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "22837213bf2a410f53800c2a28a20a6e650916366556d5f5bd47f2dfd13e7853" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "a435a96b611bdcc901285f96f66cac5943e3358b8421e9f8fb1bf749cfca538c", + "fevals": 300, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "0acad307f3e412fbffc9c901a205f8931d569841749089bc8956539d7c24a281" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "cf4556c4ca7eccf6eeddf758f8a7ef66ae593d0d8be93b7a21ecf502c89d0654", + "fevals": 350, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "c2be26ae7b20916e87308eaaab9fffc0462d05f28fe74bdc6c61eac8b1532991" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "58248818992f25f4e508e52d95ca1cce4659004a41950b5a3764aa11d98178dc", + "fevals": 400, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "df3e9b06e4777cfbadd0412e78484785b22d667a11dc906b1659f49b79894f4e" + } + ] + }, + { + "metadata": {}, + "problem": "ZDT4 (n=5)", + "reports": [ + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "d691cd18dbb18838bec4123a4d0d8c7e835f90b22aafdeda4095b28c80b8a7e0", + "fevals": 50, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "240594fa871c1c47eaa65f8d603b06fad4a635e8a45ddc31a0029e2a6b2d4d1b" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "7a6d8919e0fb1aaed020d49a99a9a2d17f36ceb8edd8a46693c6770661f246bc", + "fevals": 100, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "5ff66c434ffbd1aa9b95d04dd3bd39ce9403d91d0f1034ed30b9cfef08de24b7" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "6797bd8f28f60e669261e6022bdff0b5c2e1c0de47ff85bcc6b992c00e3846d3", + "fevals": 150, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "20d33df82efff7fbfcb1657e6fa3bfeac1282030eae63e31511481710a1b4926" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "5b596b5c97559e325701fc5868653604c4d2616367e02d5741fb2ff7e63dbec3", + "fevals": 200, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "d86606ca44168d2515236f57472e6b1ae3731eb10ef7c201567682043228db3b" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "f4e175ab6306bdd5671530108de4f44bc656d3fabdf8550a8df955404c364b25", + "fevals": 250, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "6fdfff6603e039d843b46a1cfaf5b217b8c8d51c7978cbcfbbc541b1a5b8aa81" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "272a5b3264b1e33176c5324090104f631d08ca5f7d22d64a81ddaad26aee50df", + "fevals": 300, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "0a6febc59f3123b6f80343dc5b424dc154f8a53d8bb1948e0c2b56f5eff95c24" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "0170cad4cb821f3f58c066960e3b0fcb54794f75aa42be3cace7b7eca12c4f12", + "fevals": 350, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "c22b349b1a39dda308828bd41499db3b9fef874516ce53e0e08a4af716d9ff9c" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "392486399ede2b9157b1df8a6d9d4f90fcd5777950ad01dbf31940e262f06071", + "fevals": 400, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "270bcb920898d79b9fd67c9a5c89133bf40a76366641cf3d0227ed42259cef19" + } + ] + }, + { + "metadata": {}, + "problem": "ZDT2 (n=5)", + "reports": [ + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "d08c61f3f2168b0f6e226b2548fc375cd36cf85cb2d7f89c6c961f0063b9348d", + "fevals": 50, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "936910b0844695c0bdb24f530781a2d6c2436c76d19958de2f391c13648a9da5" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "02e88b3e3d7e7fdc8bfc088532a514da6e43f4a0afc45c7b7141e77429b4d8fb", + "fevals": 100, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "1d5b2eff103a96a2046b11f9e416750346ebb1359bd9e376ea1f24893be184b2" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "06f3d123e38631cf0151cd1da0bc3c3e7aa1f7203120b204af7fc56746aaa78e", + "fevals": 150, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "55d78e8bf10287f6857049b720c1f83f8a81db87521dc44a8a3b14a165150e7f" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "8ddbf319c9a91e37aa3ccf7921c64cdef577e895dee39eb473cf2804cf3ec24c", + "fevals": 200, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "5172e91510bc1f18b8f47edc1e13604ba0be6d7e2e7f2bad3a49efec6d9fbe51" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "7c21bcd2a979adee4a1d01fda724e8d06925d324585514eca9ff45e18c025455", + "fevals": 250, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "de77677aa32987444792688788dec6c1bc7d3c2509397e1fa9766627625877fb" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "6385699107219f7cf1139d33cff4229ac892af89468858d729c1ffe5271746ad", + "fevals": 300, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "733ce3a1c45dcd1f511cd507cdf708d53b2809be50e60cf3a1b0260d47fd3f54" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "551e107bed89f7419eb51492751ec5a432a6185ab620f6fc092f16204185269d", + "fevals": 350, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "a1362da78318ba8f67e36d6cd22d3e50b2345721cc6d308a6dc08e690cc7f8db" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "aca355ba71e0e4af537f8f21116978cded04c2a069c9626f83cbdea23e78aa2c", + "fevals": 400, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "ef9d2bb572962c77dd566adf13ae1ef7d32400b064adbce3f8b023f14c612225" + } + ] + }, + { + "metadata": {}, + "problem": "ZDT6 (n=5)", + "reports": [ + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "a2d379ca5413eae4f46c3f4c177c5deea378c2ee38e05a6c7d28c7dbf11c573e", + "fevals": 50, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "e6b663e84e7955e5ddf753f9b0d55d89b31305e5c5eb17ae0bdb10dec010e709" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "78329ff6bc79bc0ab6cd38d1578707bbcd8bb0030d6107802fe52b8a4cecbef8", + "fevals": 100, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "45edf82f5a101789bfa222ed329243abcc781ce1a21bbd403ead41260543a9a6" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "fb3c4dee89c97b684c7102a00485c4745cbc91e076d10357a5969732793e7fb4", + "fevals": 150, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "fab599d313a85a247de1647da245c6a43b36833cb171776ea21afcbf1bf0d585" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "445013051931f4bd4453b4d10e02ac5e4659fd2d08b9815eaa672a6593708efb", + "fevals": 200, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "8466b5596f0214a13d971f6552ef11bf90295c22e4c40dd631c659660fe95597" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "432183d689123fca2acaf249a879c67bc723e73a9370a9ebd90055fa92b986e4", + "fevals": 250, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "9a395681bfa39ffdf8de35f84efff9f7aea3e78922fc83a4d592b426894eb3f1" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "79b07472505c0e404300f800870e06986c72fbd1c0616fa5ac98fd756be51e6f", + "fevals": 300, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "c19e3f2d09a32777ce4dd264d88d9668d9c3a4d6213f8685b1a75651bf0d8eba" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "75144bd6e9490e2069be779fa5caf7ef3cdb3e26b4b737e2b58e2b85d2354e07", + "fevals": 350, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "1103dbced7246f9385555edbd1058382a322f2e52bf2a5909543ac5233193c3b" + }, + { + "constraint_directions": "", + "constraint_targets": [], + "f_sha256": "41d6481e13ed66e64cebfd5825d36bb1386802546c1475bb03ea324626da05e9", + "fevals": 400, + "g_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "m": 2, + "n": 5, + "n_constraints": 0, + "names_f": null, + "names_g": null, + "names_x": null, + "obj_directions": "--", + "pop_size": 50, + "x_sha256": "29b0adcb029240572c1254f6184dc30a4a447ee011c62a9fc065af4d420fb715" + } + ] + } + ], + "software": "", + "software_version": "" +} \ No newline at end of file diff --git a/tests/utils.py b/tests/utils.py index 7334504..779a43a 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -1,8 +1,96 @@ +import hashlib import numpy as np from paretobench import Experiment +def array_digest(arr): + """ + Hash a numeric array in a byte order independent way so digests are comparable across platforms. + + Parameters + ---------- + arr : array-like + The array to hash + + Returns + ------- + str + Hex digest of the array contents + """ + return hashlib.sha256(np.ascontiguousarray(arr, dtype=" Date: Fri, 14 Aug 2026 01:23:21 -0700 Subject: [PATCH 3/4] add pytest test for file versions --- tests/test_containers.py | 28 -------------- tests/test_file_versions.py | 74 +++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 28 deletions(-) create mode 100644 tests/test_file_versions.py diff --git a/tests/test_containers.py b/tests/test_containers.py index b8d7438..8026072 100644 --- a/tests/test_containers.py +++ b/tests/test_containers.py @@ -3,38 +3,10 @@ import os import pytest import tempfile -from pathlib import Path -from paretobench.analyze_metrics import normalize_problem_name from paretobench.containers import Experiment, Population, History -def get_test_files(): - test_dir = Path(__file__).parent / "legacy_file_formats" - return [f for f in test_dir.glob("*.h5")] - - -@pytest.mark.parametrize("test_file", get_test_files()) -def test_load_legacy_files(test_file): - """ - Test loading different versions of saved experiment files for backwards compatibility. - """ - exp = Experiment.load(test_file) - - # Some basic checks - assert len(exp.runs) == 6 - for run in exp.runs: - assert len(run) == 8 - assert len(run.reports[0]) == 50 - assert run.reports[0].m == 2 - assert run.reports[0].n == 5 - assert run.reports[0].g.shape[1] == 0 - - # Check problems are right - probs = set(normalize_problem_name(x.problem) for x in exp.runs) - assert probs == {"ZDT2 (n=5)", "ZDT4 (n=5)", "ZDT6 (n=5)"} - - @pytest.mark.parametrize("generate_names", [False, True]) def test_experiment_save_load(generate_names): """ diff --git a/tests/test_file_versions.py b/tests/test_file_versions.py new file mode 100644 index 0000000..919907b --- /dev/null +++ b/tests/test_file_versions.py @@ -0,0 +1,74 @@ +import h5py +import json +import pytest +import re +from pathlib import Path + +from paretobench import Experiment + +from .utils import experiment_to_manifest + +FILE_VERSION_DIR = Path(__file__).parent / "test_data" / "file_versions" +GENERATOR = "tests/test_data/file_versions/generate_file_version_data.py" + + +def get_file_version_files(): + """ + Returns the saved files of each version of the file format which are used for regression testing. + """ + return sorted(FILE_VERSION_DIR.glob("*.h5")) + + +def version_from_filename(path): + """ + Extract the file format version a saved file is named after. + + Parameters + ---------- + path : Path + Path to the saved file + + Returns + ------- + str + The version in the filename + """ + match = re.search(r"_v(\d+\.\d+\.\d+)\.h5$", path.name) + if match is None: + raise ValueError(f'Could not get a file format version out of the filename "{path.name}"') + return match.group(1) + + +def test_file_version_files_exist(): + """ + Confirms the regression files are where the tests expect them. Without this, a missing or moved directory would + leave the test below parametrized over nothing and silently passing. + """ + assert get_file_version_files(), f"No files found in {FILE_VERSION_DIR}" + + +@pytest.mark.parametrize("path", get_file_version_files(), ids=lambda p: p.stem) +def test_load_file_version(path): + """ + Load a file saved by an earlier version of the library and confirm it still reads back the data which was recorded + in its manifest when it was generated. + """ + exp = Experiment.load(path) + assert exp.file_version == version_from_filename(path) + + with open(path.with_suffix(".json")) as fd: + assert experiment_to_manifest(exp) == json.load(fd) + + +def test_current_file_version_has_file(tmp_path): + # Get the version we are writing by saving a file and reading the version back out of it + probe_path = tmp_path / "probe.h5" + Experiment(name="", runs=[]).save(probe_path) + with h5py.File(probe_path) as fd: + current_version = fd.attrs["file_version"] + + versions = set(map(version_from_filename, get_file_version_files())) + assert current_version in versions, ( + f"No saved file for file format version {current_version}. Files for old versions of the format cannot be " + f"created later, so save one now by running: python {GENERATOR}" + ) From 705e958dc871cf86f140ed0e5c2f6bd57705aeef Mon Sep 17 00:00:00 2001 From: "Christopher M. Pierce" Date: Sat, 15 Aug 2026 12:08:47 -0700 Subject: [PATCH 4/4] move generator script --- .../file_versions => }/generate_file_version_data.py | 9 ++------- tests/test_file_versions.py | 2 +- 2 files changed, 3 insertions(+), 8 deletions(-) rename tests/{test_data/file_versions => }/generate_file_version_data.py (92%) diff --git a/tests/test_data/file_versions/generate_file_version_data.py b/tests/generate_file_version_data.py similarity index 92% rename from tests/test_data/file_versions/generate_file_version_data.py rename to tests/generate_file_version_data.py index eab670a..18b38a9 100644 --- a/tests/test_data/file_versions/generate_file_version_data.py +++ b/tests/generate_file_version_data.py @@ -2,7 +2,6 @@ import json import random import shutil -import sys from datetime import datetime, timezone from pathlib import Path @@ -10,13 +9,9 @@ import numpy as np from paretobench import Experiment, History +from utils import experiment_to_manifest -# The tests package is not installed, so put the repository root on the path to share the manifest code with the tests -sys.path.insert(0, str(Path(__file__).resolve().parents[3])) - -from tests.utils import experiment_to_manifest # noqa: E402 - -DEFAULT_OUT_DIR = Path(__file__).resolve().parent +DEFAULT_OUT_DIR = Path(__file__).resolve().parent / "test_data" / "file_versions" FILENAME_FMT = "paretobench_file_format_v{version}.h5" diff --git a/tests/test_file_versions.py b/tests/test_file_versions.py index 919907b..8685fd0 100644 --- a/tests/test_file_versions.py +++ b/tests/test_file_versions.py @@ -9,7 +9,7 @@ from .utils import experiment_to_manifest FILE_VERSION_DIR = Path(__file__).parent / "test_data" / "file_versions" -GENERATOR = "tests/test_data/file_versions/generate_file_version_data.py" +GENERATOR = "tests/generate_file_version_data.py" def get_file_version_files():