import matplotlib.pyplot as plt
import numpy as np
def main():
file_name = "sanity_param_sweep.txt"
configs = {}
with open(file_name) as f:
lines = f.readlines()
for line in lines:
if "RoundtripConfig {" in line:
line = line.split("RoundtripConfig { ")[1].split(" }")[0]
line = line.split(", ")
config = {}
for item in line:
key, value = item.split(": ")
if key == "window_sz2" or key == "lookahead_sz2":
config[key] = int(value)
elif key == "file_name":
config[key] = value[1:-1]
else:
config[key] = float(value)
if config["file_name"] not in configs:
configs[config["file_name"]] = []
configs[config["file_name"]].append(config)
compression_ratios = {}
compression_times = {}
for file_name, config_list in configs.items():
if file_name != "tsz-compressed-data.bin":
continue
for config in config_list:
key = (config["window_sz2"], config["lookahead_sz2"])
if key not in compression_ratios:
compression_ratios[key] = []
compression_ratios[key].append(config["compression_ratio"])
if key not in compression_times:
compression_times[key] = []
compression_times[key].append(config["compression_time_us"])
avg_ratios = {}
for key, ratios in compression_ratios.items():
avg_ratios[key] = sum(ratios) / len(ratios)
avg_times = {}
for key, times in compression_times.items():
avg_times[key] = sum(times) / len(times)
print(avg_ratios)
num_lookaheads = len(set([key[1] for key in avg_ratios.keys()]))
sorted_keys = sorted(avg_ratios.keys())
window_sz2s = sorted(set([key[0] for key in avg_ratios.keys()]))
lookahead_sz2s = sorted(set([key[1] for key in avg_ratios.keys()]))
bar_width = 0.075
fig, axs = plt.subplots(2, 1)
ax = axs[0]
colors = plt.get_cmap("tab20", len(lookahead_sz2s))
for i, window_sz2 in enumerate(window_sz2s):
for j, lookahead_sz2 in enumerate(lookahead_sz2s):
if (window_sz2, lookahead_sz2) in avg_ratios:
ax.bar(
i + j * bar_width,
avg_ratios[(window_sz2, lookahead_sz2)],
bar_width,
color=colors(lookahead_sz2 - lookahead_sz2s[0]),
)
ax.set_xlabel("Window Size (2^x)")
ax.set_ylabel("Average Compression Ratio")
ax.set_title(
"Average Compression Ratio for Different Window Sizes and Lookahead Sizes"
)
ax.set_xticks(np.arange(len(window_sz2s)))
ax.set_xticklabels(window_sz2s)
ax = axs[1]
for i, window_sz2 in enumerate(window_sz2s):
for j, lookahead_sz2 in enumerate(lookahead_sz2s):
if (window_sz2, lookahead_sz2) in avg_times:
ax.bar(
i + j * bar_width,
avg_times[(window_sz2, lookahead_sz2)],
bar_width,
color=colors(lookahead_sz2 - lookahead_sz2s[0]),
)
ax.set_xlabel("Window Size (2^x)")
ax.set_ylabel("Average Compression Time (us)")
ax.set_title(
"Average Compression Time for Different Window Sizes and Lookahead Sizes"
)
ax.set_xticks(np.arange(len(window_sz2s)))
ax.set_xticklabels(window_sz2s)
plt.show()
if __name__ == "__main__":
main()