summaryrefslogtreecommitdiff
path: root/scripts/database
diff options
context:
space:
mode:
authorCedric Nugteren <web@cedricnugteren.nl>2017-09-12 22:25:52 +0200
committerCedric Nugteren <web@cedricnugteren.nl>2017-09-12 22:25:52 +0200
commit14a61d24258498811ac0dfd11cad6087a231fa2a (patch)
treea5d19df33e46c7d6740e66c741729d6e1f8cb8ff /scripts/database
parentebe10d511806cc0989f250509f9ab15ebbda0d5b (diff)
Added database compress and de-compress functions
Diffstat (limited to 'scripts/database')
-rw-r--r--scripts/database/database/io.py43
1 files changed, 41 insertions, 2 deletions
diff --git a/scripts/database/database/io.py b/scripts/database/database/io.py
index 58f9103b..722658d8 100644
--- a/scripts/database/database/io.py
+++ b/scripts/database/database/io.py
@@ -26,14 +26,53 @@ def load_database(filename):
"""Loads a database from disk"""
print("[database] Loading database from '" + filename + "'")
with open(filename) as f:
- return json.load(f)
+ database = json.load(f)
+ return decompress_database(database)
def save_database(database, filename):
"""Saves a database to disk"""
+ compressed_db = compress_database(database)
print("[database] Saving database to '" + filename + "'")
with open(filename, "w") as f:
- json.dump(database, f, sort_keys=True, indent=4)
+ json.dump(compressed_db, f, sort_keys=True, indent=2, separators=(',', ': '))
+
+
+def compress_database(database):
+ """Moves certain common fields up in the hierarchy, transforms dicts into lists"""
+ new_sections = []
+ for section in database["sections"]:
+ new_section = {}
+ for field in section:
+ if field == "results":
+ parameter_names = [result["parameters"].keys() for result in section["results"]]
+ assert len(list(set([" ".join(p) for p in parameter_names]))) == 1
+ new_section["parameter_names"] = parameter_names[0] # they are all be the same
+ new_results = [[",".join([str(v) for v in result["parameters"].values()]),
+ result["time"]]
+ for result in section["results"]]
+ new_section[field] = new_results
+ else:
+ new_section[field] = section[field]
+ new_sections.append(new_section)
+ return {"sections": new_sections}
+
+
+def decompress_database(database):
+ """Undo the above compression"""
+ for section in database["sections"]:
+ new_results = []
+ for result in section["results"]:
+ parameters = {}
+ for name, value in zip(section["parameter_names"], result[0].split(",")):
+ parameters[name] = value
+ new_result = {
+ "parameters": parameters,
+ "time": result[1]
+ }
+ new_results.append(new_result)
+ section["results"] = new_results
+ return database
def load_tuning_results(filename):