Fix some python script issues

- removed tikzplotlib uses
- hide warnings
- modify unhashable types
This commit is contained in:
augustin64 2024-06-05 11:54:44 +02:00
parent 2a5a2a0e18
commit e8cb44663c
2 changed files with 38 additions and 11 deletions

View File

@ -7,13 +7,24 @@ import pandas as pd
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import seaborn as sns import seaborn as sns
#import tikzplotlib #import tikzplotlib
from sys import exit
import wquantiles as wq import wquantiles as wq
import numpy as np import numpy as np
from functools import partial from functools import partial
import sys import sys
import os
import json
import warnings
warnings.filterwarnings('ignore')
print("warnings are filtered, enable them back if you are having some trouble")
def dict_to_json(d):
if isinstance(d, dict):
return json.dumps(d)
return d
# For cyber cobay sanity check : # For cyber cobay sanity check :
# from gmpy2 import popcount # from gmpy2 import popcount
@ -41,6 +52,10 @@ def convert8(x):
return np.array(int(x, base=16)).astype(np.int64) return np.array(int(x, base=16)).astype(np.int64)
# return np.int8(int(x, base=16)) # return np.int8(int(x, base=16))
assert os.path.exists(sys.argv[1] + ".slices.csv")
assert os.path.exists(sys.argv[1] + ".cores.csv")
assert os.path.exists(sys.argv[1] + "-results_lite.csv.bz2")
df = pd.read_csv(sys.argv[1] + "-results_lite.csv.bz2", df = pd.read_csv(sys.argv[1] + "-results_lite.csv.bz2",
dtype={ dtype={
"main_core": np.int8, "main_core": np.int8,
@ -61,6 +76,8 @@ df = pd.read_csv(sys.argv[1] + "-results_lite.csv.bz2",
converters={'address': convert64, 'hash': convert8}, converters={'address': convert64, 'hash': convert8},
) )
print(f"Loaded columns : {list(df.keys())}")
sample_columns = [ sample_columns = [
"clflush_remote_hit", "clflush_remote_hit",
"clflush_shared_hit", "clflush_shared_hit",
@ -117,13 +134,11 @@ print(*[bin(a) for a in addresses], sep='\n')
print(df.head()) print(df.head())
print(df["hash"].unique())
min_time = df["time"].min() min_time = df["time"].min()
max_time = df["time"].max() max_time = df["time"].max()
q10s = [wq.quantile(df["time"], df[col], 0.1) for col in sample_flush_columns] q10s = [wq.quantile(df["time"], df[col], 0.1) for col in sample_flush_columns if col in df]
q90s = [wq.quantile(df["time"], df[col], 0.9) for col in sample_flush_columns] q90s = [wq.quantile(df["time"], df[col], 0.9) for col in sample_flush_columns if col in df]
graph_upper = int(((max(q90s) + 19) // 10) * 10) graph_upper = int(((max(q90s) + 19) // 10) * 10)
graph_lower = int(((min(q10s) - 10) // 10) * 10) graph_lower = int(((min(q10s) - 10) // 10) * 10)
@ -168,6 +183,9 @@ custom_hist(df_ax_vx_sx["time"], df_ax_vx_sx["clflush_miss_n"], df_ax_vx_sx["clf
#tikzplotlib.save("fig-hist-bad-A{}V{}S{}.tex".format(attacker,victim,slice))#, axis_width=r'0.175\textwidth', axis_height=r'0.25\textwidth') #tikzplotlib.save("fig-hist-bad-A{}V{}S{}.tex".format(attacker,victim,slice))#, axis_width=r'0.175\textwidth', axis_height=r'0.25\textwidth')
plt.show() plt.show()
# Fix np.darray is unhashable
df_main_core_0.loc[:, ('hash',)] = df_main_core_0['hash'].apply(dict_to_json)
df.loc[:, ('hash',)] = df['hash'].apply(dict_to_json)
g = sns.FacetGrid(df_main_core_0, col="helper_core", row="hash", legend_out=True) g = sns.FacetGrid(df_main_core_0, col="helper_core", row="hash", legend_out=True)
g2 = sns.FacetGrid(df, col="main_core", row="hash", legend_out=True) g2 = sns.FacetGrid(df, col="main_core", row="hash", legend_out=True)
@ -194,7 +212,7 @@ g2.map(custom_hist, "time", "clflush_miss_n", "clflush_remote_hit", "clflush_loc
#g3.map(custom_hist, "time", "clflush_miss_n", "clflush_remote_hit", "clflush_local_hit_n", "clflush_shared_hit") #g3.map(custom_hist, "time", "clflush_miss_n", "clflush_remote_hit", "clflush_local_hit_n", "clflush_shared_hit")
#g4 = sns.FacetGrid(df_mcf6_slg7, row="helper_core_fixed", col="helper_ht") #g4 = sns.FacetGrid(df_mcf6_slg7, row="helper_core_fixed", col="helper_ht")
g#4.map(custom_hist, "time", "clflush_miss_n", "clflush_remote_hit", "clflush_local_hit_n", "clflush_shared_hit") #g4.map(custom_hist, "time", "clflush_miss_n", "clflush_remote_hit", "clflush_local_hit_n", "clflush_shared_hit")
def stat(x, key): def stat(x, key):
return wq.median(x["time"], x[key]) return wq.median(x["time"], x[key])
@ -216,7 +234,7 @@ stats.to_csv(sys.argv[1] + ".stats.csv", index=False)
#print(stats.to_string()) #print(stats.to_string())
plt.show() plt.show()
exit(0) sys.exit(0)
g = sns.FacetGrid(stats, row="Core") g = sns.FacetGrid(stats, row="Core")
g.map(sns.distplot, 'Miss', bins=range(100, 480), color="r") g.map(sns.distplot, 'Miss', bins=range(100, 480), color="r")
@ -232,4 +250,4 @@ plt.show()
# plt.figure() # plt.figure()
# sns.distplot(test["value"], hist_kws={"weights": test["weight"]}, kde=False) # sns.distplot(test["value"], hist_kws={"weights": test["weight"]}, kde=False)
exit(0) sys.exit(0)

View File

@ -10,6 +10,12 @@ from sys import exit
import numpy as np import numpy as np
from scipy import optimize from scipy import optimize
import sys import sys
import os
import warnings
warnings.filterwarnings('ignore')
print("warnings are filtered, enable them back if you are having some trouble")
# TODO # TODO
# sys.argv[1] should be the root # sys.argv[1] should be the root
@ -23,6 +29,9 @@ import sys
# each row is an origin core # each row is an origin core
# each column a helper core if applicable # each column a helper core if applicable
assert os.path.exists(sys.argv[1] + ".stats.csv")
assert os.path.exists(sys.argv[1] + ".slices.csv")
assert os.path.exists(sys.argv[1] + ".cores.csv")
stats = pd.read_csv(sys.argv[1] + ".stats.csv", stats = pd.read_csv(sys.argv[1] + ".stats.csv",
dtype={ dtype={
@ -234,9 +243,9 @@ figure_median_I.map(sns.lineplot, 'slice_group', 'predicted_miss', color="b")
figure_median_I.set_titles(col_template="$A$ = {col_name}") figure_median_I.set_titles(col_template="$A$ = {col_name}")
figure_median_I.tight_layout() figure_median_I.tight_layout()
import tikzplotlib # import tikzplotlib
tikzplotlib.save("fig-median-I.tex", axis_width=r'0.175\textwidth', axis_height=r'0.25\textwidth') # tikzplotlib.save("fig-median-I.tex", axis_width=r'0.175\textwidth', axis_height=r'0.25\textwidth')
plt.show() plt.show()
#stats["predicted_remote_hit_no_gpu"] = exclusive_hit_topology_nogpu_df(stats, *(res_no_gpu[0])) #stats["predicted_remote_hit_no_gpu"] = exclusive_hit_topology_nogpu_df(stats, *(res_no_gpu[0]))
@ -250,7 +259,7 @@ figure_median_E_A0.map(sns.scatterplot, 'helper_core_fixed', 'clflush_remote_hit
figure_median_E_A0.map(sns.lineplot, 'helper_core_fixed', 'predicted_remote_hit_gpu', color="r") figure_median_E_A0.map(sns.lineplot, 'helper_core_fixed', 'predicted_remote_hit_gpu', color="r")
figure_median_E_A0.set_titles(col_template="$S$ = {col_name}") figure_median_E_A0.set_titles(col_template="$S$ = {col_name}")
tikzplotlib.save("fig-median-E-A0.tex", axis_width=r'0.175\textwidth', axis_height=r'0.25\textwidth') # tikzplotlib.save("fig-median-E-A0.tex", axis_width=r'0.175\textwidth', axis_height=r'0.25\textwidth')
plt.show() plt.show()
g = sns.FacetGrid(stats, row="main_core_fixed") g = sns.FacetGrid(stats, row="main_core_fixed")