From bb0008715158a5671edaaf3f16141af80cd633d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Miko=C5=82ajczyk?= Date: Tue, 15 Oct 2024 15:21:52 +0200 Subject: [PATCH] Plot M vs N --- analysis.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/analysis.py b/analysis.py index 87ad97d..81c5ee1 100644 --- a/analysis.py +++ b/analysis.py @@ -1,4 +1,8 @@ import json +import re + +import matplotlib.pyplot as plt +import numpy as np # Function to convert time units to seconds @@ -18,6 +22,7 @@ def report(operation, time): scenarios = {} free_logs = [] +hypernova = [[None] * 7 for _ in range(7)] def process_logline(log): @@ -36,6 +41,10 @@ def process_logline(log): folding_scheme = span.get("folding_scheme") if folding_scheme is not None: free_logs.append(report(f"{folding_scheme} total time", time_seconds)) + + hypernova_params = re.fullmatch(r"HyperNova<(\d),(\d)>", folding_scheme) + if hypernova_params: + hypernova[int(hypernova_params.groups()[0])][int(hypernova_params.groups()[1])] = time_seconds else: free_logs.append(report(span["name"], time_seconds)) return @@ -90,5 +99,39 @@ def print_results(): print(report(" Max", max(proving_steps))) +def draw_hn_plot(): + data_np = np.array(hypernova, dtype=np.float64) + data_np = np.where(np.isnan(data_np), 0, data_np) # Replace None with 0 for better visualization + + cmap = plt.cm.viridis + cmap.set_under('white') # Set background color for None + + fig, ax = plt.subplots() + cax = ax.matshow(data_np, cmap=cmap, vmin=0.01) + + fig.colorbar(cax) + + for i in range(len(hypernova)): + for j in range(len(hypernova[i])): + if hypernova[i][j] is not None: + ax.text(j, i, f'{hypernova[i][j]:.2f}', va='center', ha='center', color='black') + + # Set axis labels and title + ax.set_xlabel('ν (number of incoming CCCS instances)') + ax.set_ylabel('μ (number of running LCCCS instances)') + + ax.set_xticks(np.arange(len(hypernova[0]))) + + ax.set_yticks(np.arange(len(hypernova))) + ax.set_xticklabels([f'{i}' for i in range(len(hypernova[0]))]) + ax.set_yticklabels([f'{i}' for i in range(len(hypernova))]) + + plt.title("HyperNova multifold times") + + # Show the plot + plt.show() + + process_logs('out.log') print_results() +draw_hn_plot()