Skip to content

Commit 5c621f4

Browse files
Feature #67: Adding the analysis results (the plot comparing Sindi and its baseline, the light vesion)
1 parent f20c7a7 commit 5c621f4

1 file changed

Lines changed: 151 additions & 0 deletions

File tree

use-cases/dynamically-mined-invariant-denoising/analysis.ipynb

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,157 @@
510510
"## Comparing Sindi's comparator and its light version with respect to the invariant denoising task"
511511
]
512512
},
513+
{
514+
"cell_type": "code",
515+
"execution_count": 24,
516+
"metadata": {},
517+
"outputs": [
518+
{
519+
"data": {
520+
"image/png": "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",
521+
"text/plain": [
522+
"<Figure size 340x240 with 1 Axes>"
523+
]
524+
},
525+
"metadata": {},
526+
"output_type": "display_data"
527+
}
528+
],
529+
"source": [
530+
"import json\n",
531+
"import pandas as pd\n",
532+
"import seaborn as sns\n",
533+
"import matplotlib.pyplot as plt\n",
534+
"from matplotlib.patches import Patch, PathPatch\n",
535+
"\n",
536+
"# ----------------------------\n",
537+
"# 1) Load JSON data\n",
538+
"# ----------------------------\n",
539+
"with open('output/erc20.json', 'r') as f:\n",
540+
" erc20_data = json.load(f)\n",
541+
"with open('output/sok.json', 'r') as f:\n",
542+
" sok_data = json.load(f)\n",
543+
"\n",
544+
"with open('output_light/erc20.json', 'r') as f:\n",
545+
" erc20_baseline_data = json.load(f)\n",
546+
"with open('output_light/sok.json', 'r') as f:\n",
547+
" sok_baseline_data = json.load(f)\n",
548+
"\n",
549+
"# ----------------------------\n",
550+
"# 2) To DataFrames + labels\n",
551+
"# ----------------------------\n",
552+
"# Sindi data\n",
553+
"erc20_df = pd.DataFrame(erc20_data)\n",
554+
"erc20_df['Dataset'] = 'ERC20'\n",
555+
"erc20_df['Experiment'] = 'Sindi'\n",
556+
"\n",
557+
"sok_df = pd.DataFrame(sok_data)\n",
558+
"sok_df['Dataset'] = 'SoK'\n",
559+
"sok_df['Experiment'] = 'Sindi'\n",
560+
"\n",
561+
"# Sindi Light data\n",
562+
"erc20_baseline_df = pd.DataFrame(erc20_baseline_data)\n",
563+
"erc20_baseline_df['Dataset'] = 'ERC20'\n",
564+
"erc20_baseline_df['Experiment'] = 'Sindi Light'\n",
565+
"\n",
566+
"sok_baseline_df = pd.DataFrame(sok_baseline_data)\n",
567+
"sok_baseline_df['Dataset'] = 'SoK'\n",
568+
"sok_baseline_df['Experiment'] = 'Sindi Light'\n",
569+
"\n",
570+
"# ----------------------------\n",
571+
"# 3) Combine\n",
572+
"# ----------------------------\n",
573+
"df = pd.concat([erc20_df, sok_df, erc20_baseline_df, sok_baseline_df], ignore_index=True)\n",
574+
"\n",
575+
"# ----------------------------\n",
576+
"# 4) Compute metric\n",
577+
"# ----------------------------\n",
578+
"df['percentage_removed'] = (1 - df['reduction_ratio']) * 100\n",
579+
"\n",
580+
"# ----------------------------\n",
581+
"# 5) Plot style\n",
582+
"# ----------------------------\n",
583+
"sns.set_context(\"paper\", font_scale=1)\n",
584+
"sns.set_style(\"white\")\n",
585+
"\n",
586+
"# ----------------------------\n",
587+
"# 6) Figure\n",
588+
"# ----------------------------\n",
589+
"plt.figure(figsize=(3.4, 2.4))\n",
590+
"\n",
591+
"# Fixed hue order so we always know which box is which within each category\n",
592+
"hue_order = ['Sindi', 'Sindi Light']\n",
593+
"palette = {'Sindi': '#639CD9', 'Sindi Light': '#D97C63'}\n",
594+
"\n",
595+
"ax = sns.boxplot(\n",
596+
" x='Dataset',\n",
597+
" y='percentage_removed',\n",
598+
" hue='Experiment',\n",
599+
" hue_order=hue_order,\n",
600+
" data=df,\n",
601+
" width=0.6,\n",
602+
" palette=palette,\n",
603+
" linewidth=0.9,\n",
604+
" whiskerprops={'color': 'black', 'linewidth': 0.9},\n",
605+
" capprops={'color': 'black', 'linewidth': 0.9},\n",
606+
" medianprops={'color': 'black', 'linewidth': 0.9},\n",
607+
" flierprops={'markeredgecolor': 'black', 'markersize': 3}\n",
608+
")\n",
609+
"\n",
610+
"# ----------------------------\n",
611+
"# 7) Apply hatching robustly\n",
612+
"# ----------------------------\n",
613+
"# Seaborn stores box artists in ax.artists (most versions). As a fallback, derive from ax.patches.\n",
614+
"boxes = list(ax.artists)\n",
615+
"if not boxes:\n",
616+
" boxes = [p for p in ax.patches if isinstance(p, PathPatch)]\n",
617+
"\n",
618+
"# There are len(hue_order) boxes per category (Dataset). We hatch the \"Sindi Light\" ones.\n",
619+
"num_hue = len(hue_order) # 2\n",
620+
"for i, box in enumerate(boxes):\n",
621+
" # Within each x category, boxes appear in hue_order.\n",
622+
" hue_index = i % num_hue\n",
623+
" if hue_order[hue_index] == 'Sindi Light':\n",
624+
" box.set_hatch('//')\n",
625+
" else:\n",
626+
" box.set_hatch('')\n",
627+
" box.set_edgecolor('black')\n",
628+
" box.set_alpha(1) # ensure solid fill so hatch renders crisply in vector outputs\n",
629+
"\n",
630+
"# ----------------------------\n",
631+
"# 8) Axes cosmetics\n",
632+
"# ----------------------------\n",
633+
"for spine in ax.spines.values():\n",
634+
" spine.set_visible(True)\n",
635+
" spine.set_linewidth(0.5)\n",
636+
" spine.set_edgecolor('black')\n",
637+
"\n",
638+
"plt.ylim(0, 100)\n",
639+
"plt.xlabel(\"\")\n",
640+
"plt.ylabel(\"Invariants Removed (%)\")\n",
641+
"\n",
642+
"# ----------------------------\n",
643+
"# 9) Legend with matching hatch\n",
644+
"# ----------------------------\n",
645+
"handles, labels = ax.get_legend_handles_labels()\n",
646+
"# Rebuild legend to ensure consistent hatching/edges\n",
647+
"new_handles = []\n",
648+
"for lab in labels:\n",
649+
" if lab == 'Sindi Light':\n",
650+
" new_handles.append(Patch(facecolor=palette[lab], edgecolor='black', hatch='//'))\n",
651+
" else:\n",
652+
" new_handles.append(Patch(facecolor=palette[lab], edgecolor='black'))\n",
653+
"ax.legend(new_handles, labels, title='', frameon=False)\n",
654+
"\n",
655+
"plt.tight_layout()\n",
656+
"\n",
657+
"# ----------------------------\n",
658+
"# 10) Save / Show\n",
659+
"# ----------------------------\n",
660+
"plt.savefig(\"paired_boxplot_invariants_removed.pdf\", dpi=300, bbox_inches='tight')\n",
661+
"plt.show()\n"
662+
]
663+
},
513664
{
514665
"cell_type": "code",
515666
"execution_count": null,

0 commit comments

Comments
 (0)