{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from itertools import chain\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_model_performance(model_scores, model_names=None, title=None):\n",
    "    # Create figure and axis\n",
    "    fig, ax = plt.subplots(figsize=(16, 6))\n",
    "\n",
    "    # Create box plot\n",
    "    bp = ax.boxplot(\n",
    "        model_scores,\n",
    "        patch_artist=True,  # Fill boxes with color\n",
    "        notch=True,  # Add notches to show confidence interval around median\n",
    "        widths=0.7,\n",
    "    )  # Width of boxes\n",
    "\n",
    "    # Customize box colors\n",
    "    colors = [\n",
    "        \"blue\",\n",
    "        \"red\",\n",
    "        \"green\",\n",
    "        \"orange\",\n",
    "        \"purple\",\n",
    "        \"pink\",\n",
    "        \"grey\",\n",
    "        \"blue\",\n",
    "        \"red\",\n",
    "        \"green\",\n",
    "        \"orange\",\n",
    "        \"purple\",\n",
    "        \"pink\",\n",
    "        \"grey\",\n",
    "        \"blue\",\n",
    "        \"red\",\n",
    "        \"green\",\n",
    "        \"orange\",\n",
    "        \"purple\",\n",
    "        \"pink\",\n",
    "        \"grey\",\n",
    "        \"blue\",\n",
    "        \"red\",\n",
    "        \"green\",\n",
    "        \"orange\",\n",
    "        \"purple\",\n",
    "        \"pink\",\n",
    "        \"grey\",\n",
    "    ]\n",
    "    for idx, box in enumerate(bp[\"boxes\"]):\n",
    "        box.set_facecolor(colors[idx])\n",
    "        box.set_alpha(0.7)\n",
    "\n",
    "    # Customize other elements\n",
    "    plt.setp(bp[\"whiskers\"], color=\"gray\")\n",
    "    plt.setp(bp[\"caps\"], color=\"gray\")\n",
    "    plt.setp(bp[\"medians\"], color=\"black\", linewidth=2)\n",
    "    plt.setp(bp[\"fliers\"], marker=\"o\", markerfacecolor=\"gray\", alpha=0.5)\n",
    "\n",
    "    # Set labels and title\n",
    "    if model_names:\n",
    "        ax.set_xticklabels(model_names)\n",
    "    ax.set_ylabel(\"Ditto Score\")\n",
    "    if title is not None:\n",
    "        ax.set_title(title)\n",
    "\n",
    "    # Add grid for easier reading\n",
    "    ax.yaxis.grid(True, linestyle=\"--\", alpha=0.7)\n",
    "\n",
    "    # Remove top and right spines\n",
    "    ax.spines[\"top\"].set_visible(False)\n",
    "    ax.spines[\"right\"].set_visible(False)\n",
    "\n",
    "    # Add individual points with jitter\n",
    "    for i, data in enumerate(model_scores, 1):\n",
    "        # Create jittered x-positions\n",
    "        x = np.random.normal(i, 0.04, size=len(data))\n",
    "        ax.scatter(x, data, alpha=0.4, color=\"black\", s=30)\n",
    "\n",
    "    # Adjust layout\n",
    "    plt.tight_layout()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "COVER_FILES = {\n",
    "    # \"Base Model Hard\": \"/home/sara/glockenspiel/z_eval_data/feat_eval_cover_30b_base_self_sim_2025_01_30-16_09_29.npz\",\n",
    "    # \"Cover DPO\": \"/home/sara/glockenspiel/z_eval_data/model_cover_dpo_self_sim_cover_120.npz\",\n",
    "    # \"Tony 1.27\": \"/home/sara/glockenspiel/tony_latest_dpo_self_sim_cover_120.npz\",\n",
    "    \"Prod v4\": \"/home/sara/glockenspiel/suno_utils/task_eval/scores/feat_eval_cover_chirp-v4-h-t-6_all_genres_self_sim_2025_02_10-16_47_43.npz\",\n",
    "    # \"Prod Hard \": \"/home/sara/glockenspiel/suno_utils/task_eval/scores/feat_eval_cover_30b_t6_prod_self_sim_2025_01_30-16_42_06.npz\",\n",
    "    # \"Prod Tag CFG 2.5\": \"/home/sara/glockenspiel/suno_utils/task_eval/scores/feat_eval_cover_30b_t6_prod_cfg2.5_self_sim_2025_01_30-19_37_30.npz\",\n",
    "    # \"Prod v4 CFG 3\": \"/home/sara/glockenspiel/suno_utils/task_eval/scores/feat_eval_cover_30b_t6_prod_cfg-tag3_self_sim_2025_02_04-03_12_42.npz\",\n",
    "    # \"Prod Hard CFG 3\": \"/home/sara/glockenspiel/suno_utils/task_eval/scores/feat_eval_cover_30b_t6_prod_cfg3_self_sim_2025_01_30-18_43_44.npz\",\n",
    "    # \"Prod Tag CFG 4\": \"/home/sara/glockenspiel/suno_utils/task_eval/scores/feat_eval_cover_30b_t6_prod_cfg4_self_sim_2025_01_30-18_21_08.npz\",\n",
    "    # \"4.5 All Genres\": \"/home/sara/glockenspiel/suno_utils/task_eval/scores/feat_eval_cover_3b_sem_self_sim_2025_02_04-15_35_27.npz\",\n",
    "    # \"4.5 Hard\": \"/home/sara/glockenspiel/suno_utils/task_eval/scores/feat_eval_cover_3b_sem_hard_self_sim_2025_02_04-15_55_30.npz\",\n",
    "    # \"4.5 Filtered Hard\": \"/home/sara/glockenspiel/suno_utils/task_eval/scores/feat_eval_cover_3b_sem_filtered_hard_self_sim_2025_02_04-16_08_11.npz\",\n",
    "    # \"3b Sem\": \"scores/feat_eval_cover_chirp-v5-sem-3b_all_genres_self_sim_2025_02_11-15_08_04.npz\",\n",
    "    \"Auk Base(No Filter)\": \"scores/feat_eval_cover_chirp-v5-sem-6b_all_genres_self_sim_2025_02_11-03_58_14.npz\",\n",
    "    # \"6b Base CFG\": \"scores/feat_eval_cover_chirp-v5-sem-6b-eval_all_genres_test_cover_sft_feb_6_w_cfg_self_sim_2025_03_24-20_18_57.npz\",\n",
    "    # \"6b FT\": \"scores/feat_eval_cover_chirp-v5-sem-6b-eval_all_genres_cover_ft_v0_self_sim_2025_03_18-18_05_28.npz\",\n",
    "    # \"6b FT CFG\": \"scores/feat_eval_cover_chirp-v5-sem-6b-eval_all_genres_cover_ft_v0_double_tag_w_null_flipped_self_sim_2025_03_18-21_49_07.npz\",\n",
    "    # \"6b FT test\": \"scores/feat_eval_cover_chirp-v5-sem-6b-cover_all_genres_test_cover_sft_self_sim_2025_03_22-00_53_00.npz\",\n",
    "    # \"6b FT more rep\": \"scores/feat_eval_cover_chirp-v5-sem-6b-eval_all_genres_cover_ft_v0_6_rep_self_sim_2025_03_18-19_59_37.npz\",\n",
    "    # \"6b FT custom\": \"scores/feat_eval_cover_chirp-v5-sem-6b-eval_all_genres_cover_ft_v0_tag_w_cover_custom_null_self_sim_2025_03_18-20_24_22.npz\",\n",
    "    # \"6b FT cust null\": \"scores/feat_eval_cover_chirp-v5-sem-6b-eval_all_genres_cover_ft_v0_custom_null_self_sim_2025_03_18-20_41_53.npz\",\n",
    "    # \"6b FT dbl tag\": \"scores/feat_eval_cover_chirp-v5-sem-6b-eval_all_genres_cover_ft_v0_double_tag_self_sim_2025_03_18-21_00_41.npz\",\n",
    "    # \"6b FT dbl tag null\": \"scores/feat_eval_cover_chirp-v5-sem-6b-eval_all_genres_cover_ft_v0_double_tag_w_null_self_sim_2025_03_18-21_29_19.npz\",\n",
    "    # \"6b FT raw\": \"scores/feat_eval_cover_chirp-v5-sem-6b-eval_all_genres_3_to_9_raw_self_sim_2025_03_19-02_25_52.npz\",\n",
    "    # \"6b FT prof\": \"scores/feat_eval_cover_chirp-v5-sem-6b-eval_all_genres_3_to_9_prof_self_sim_2025_03_19-02_51_40.npz\",\n",
    "    # \"6b FT 3.5-8.5\": \"scores/feat_eval_cover_chirp-v5-sem-6b-eval_all_genres_35_to_85_base_self_sim_2025_03_20-15_57_17.npz\",\n",
    "    # \"6b FT 3-9 filt\": \"scores/feat_eval_cover_chirp-v5-sem-6b-eval_all_genres_3_to_9_filt_base_long_self_sim_2025_03_20-19_37_40.npz\",\n",
    "    # \"6b FT 3.21\": \"scores/feat_eval_cover_chirp-v5-sem-6b-eval_all_genres_test_cover_sft_mar21_self_sim_2025_03_24-19_24_49.npz\",\n",
    "    # \"6b FT 3.21 CFG\": \"scores/feat_eval_cover_chirp-v5-sem-6b-eval_all_genres_test_cover_sft_mar21_w_cfg_self_sim_2025_03_24-19_39_29.npz\",\n",
    "    # \"6b FT 3.21 CFG\": \"scores/feat_eval_cover_chirp-v5-sem-6b-eval_all_genres_test_cover_sft_dbl_15_20_self_sim_2025_03_25-00_58_22.npz\",\n",
    "    # \"6b Hard Filter\": \"/home/sara/glockenspiel/suno_utils/task_eval/scores/feat_eval_cover_3b_sem_filtered_self_sim_2025_02_04-15_02_42.npz\",\n",
    "    # \"3b Sem Test\": \"scores/feat_eval_cover_chirp-v5-sem-test_all_genres_self_sim_2025_02_11-15_34_45.npz\",\n",
    "    # \"6b DPO 4.8\": \"scores/feat_eval_cover_chirp-v5-sem-6b-eval_all_genres_dpo_48_self_sim_2025_04_10-17_48_58.npz\",\n",
    "    # \"6b DPO 4.9\": \"scores/feat_eval_cover_chirp-v5-sem-6b-eval_all_genres_dpo_49_self_sim_2025_04_10-18_24_15.npz\",\n",
    "    # \"6b 4.20\": \"scores/feat_eval_cover_chirp-auk-eval_all_genres_self_sim_2025_04_21-16_35_42.npz\",\n",
    "    # \"6b 4.20 CFG\": \"scores/feat_eval_cover_chirp-auk-eval_all_genres_cover2_self_sim_2025_04_21-19_51_48.npz\",\n",
    "    # \"6b 4.20 CFG\": \"scores/feat_eval_cover_chirp-auk-eval_all_genres_cover3_self_sim_2025_04_21-20_12_57.npz\",\n",
    "    # \"6b 4.20 CFG 3\": \"scores/feat_eval_cover_chirp-auk-eval_all_genres_cover_12_11_20_def_null_self_sim_2025_04_21-20_30_19.npz\",\n",
    "    # \"6b 4.20 CFG2\": \"scores/feat_eval_cover_chirp-auk-eval_all_genres_cover_12_08_20_audio_null_self_sim_2025_04_21-20_50_06.npz\",\n",
    "    # \"6b 4.20 Hard\": \"scores/feat_eval_cover_chirp-auk-t1_hard_self_sim_2025_04_23-14_22_32.npz\",\n",
    "    \"Auk 4.28 DPO\": \"scores/feat_eval_cover_chirp-auk-eval_all_genres_persona_self_sim_2025_04_29-18_38_39.npz\",\n",
    "    # \"6b auk-c\": \"scores/feat_eval_cover_chirp-auk-task-test_all_genres_self_sim_2025_04_23-20_05_57.npz\",\n",
    "    # \"6b auk-d\": \"scores/feat_eval_artist_chirp-auk-t1_all_genres_persona_self_sim_2025_04_24-18_29_27.npz\",\n",
    "    # \"428 on 6.12\": \"scores/feat_eval_cover_chirp-auk-eval_all_genres_auk_cand_428_self_sim_2025_06_12-17_43_31.npz\",\n",
    "    \"Auk 5.5 DPO\": \"scores/feat_eval_cover_chirp-auk-eval_all_genres_5_05_dpo_self_sim_2025_05_05-16_01_17.npz\",\n",
    "    # \"BlueJay CP SFT\": \"scores/feat_eval_cover_chirp-auk-eval_all_genres_5_8_sft_cp_self_sim_2025_05_16-03_30_48.npz\",\n",
    "    \"Auk Prod 6.12\": \"scores/feat_eval_cover_chirp-auk-t1_all_genres_auk_prod_self_sim_2025_06_12-15_13_44.npz\",\n",
    "    \"BlueJay SFT\": \"scores/feat_eval_cover_chirp-auk-eval_all_genres_blue_sft_self_sim_2025_06_05-15_56_30.npz\",\n",
    "    \"BlueJay t1-t7\": \"scores/feat_eval_cover_chirp-auk-eval_all_genres_t1-t7_self_sim_2025_06_05-15_29_26.npz\",\n",
    "    # \"Blue 36-21\": \"scores/feat_eval_cover_chirp-auk-eval_all_genres_blue_21-36-21_self_sim_2025_06_12-13_04_12.npz\",\n",
    "    # \"Blue 47-39\": \"scores/feat_eval_cover_chirp-auk-eval_all_genres_blue_20-47-39_self_sim_2025_06_12-14_29_26.npz\",\n",
    "    \"BlueJay 06-26-35\": \"scores/feat_eval_cover_chirp-auk-eval_all_genres_actual_ckpt_06-26-35_self_sim_2025_06_19-12_37_32.npz\",\n",
    "    \"Training Data\": \"/home/sara/glockenspiel/z_eval_data/training_data_cover_self_sim.npz\",\n",
    "}\n",
    "\n",
    "ARTIST_FILES = {\n",
    "    # \"Base Model\": \"/home/sara/glockenspiel/z_eval_data/feat_eval_artist_30b_base_artist_vox_sim_2025_01_30-16_09_29.npz\",\n",
    "    # \"Base CFG\": \"/home/sara/glockenspiel/z_eval_data/model_30b_t5_v1_cfg_artist_vox_sim_artist_120_30.npz\",\n",
    "    # \"Tony 1.27\": \"/home/sara/glockenspiel/z_eval_data/tony_latest_dpo_artist_vox_sim_artist_120_30.npz\",\n",
    "    # \"Tony 1.27 CFG\": \"/home/sara/glockenspiel/z_eval_data/tony_latest_dpo_artist_vox_sim_CFG_artist_120_30.npz\",\n",
    "    \"Prod v4\": \"scores/feat_eval_artist_chirp-v4-h-t-6_all_genres_persona_artist_vox_sim_2025_04_24-18_48_57.npz\",\n",
    "    # \"Prod v4 Artist CFG\": \"scores/feat_eval_artist_chirp-v4-h-t-6_all_genresartist_cfg_artist_vox_sim_2025_02_11-16_26_38.npz\",\n",
    "    # \"Current Prod\": \"/home/sara/glockenspiel/suno_utils/task_eval/scores/feat_eval_artist_30b_t6_prod_hard_artist_vox_sim_2025_02_05-20_28_05.npz\",\n",
    "    # \"3b Sem\": \"scores/feat_eval_artist_chirp-v5-sem-3b_all_genres_artist_vox_sim_2025_02_11-15_08_04.npz\",\n",
    "    # \"6b Sem\": \"scores/feat_eval_artist_chirp-v5-sem-6b_all_genres_artist_vox_sim_2025_02_11-03_58_14.npz\",\n",
    "    # \"6b Sem CFG\": \"scores/feat_eval_artist_chirp-v5-sem-6b_all_genresartist_cfg_artist_vox_sim_2025_02_11-16_04_08.npz\",\n",
    "    # \"3b Sem Test\": \"scores/feat_eval_artist_chirp-v5-sem-test_all_genres_artist_vox_sim_2025_02_11-15_34_45.npz\",\n",
    "    # \"6b DPO 4.8\": \"scores/feat_eval_artist_chirp-v5-sem-6b-eval_all_genres_dpo_48_artist_vox_sim_2025_04_10-17_48_58.npz\",\n",
    "    # \"6b DPO 4.9\": \"scores/feat_eval_artist_chirp-v5-sem-6b-eval_all_genres_dpo_49_artist_vox_sim_2025_04_10-18_24_15.npz\",\n",
    "    # \"6b 4.20\": \"scores/feat_eval_artist_chirp-auk-eval_all_genres_artist_vox_sim_2025_04_21-16_35_42.npz\",\n",
    "    # \"6b 4.20 CFG\": \"scores/feat_eval_artist_chirp-auk-eval_all_genres_persona_artist_vox_sim_2025_04_21-18_43_30.npz\",\n",
    "    # \"6b 4.20 CFG\": \"scores/feat_eval_artist_chirp-auk-eval_all_genres_persona_10_20_15_def_null_artist_vox_sim_2025_04_21-21_10_10.npz\",\n",
    "    # \"6b 4.20 CFG Hard\": \"scores/feat_eval_artist_chirp-auk-t1_hard_pers_cfg_10_20_15_artist_vox_sim_2025_04_23-14_52_05.npz\",\n",
    "    # \"6b 4.20 Hard\": \"scores/feat_eval_artist_chirp-auk-t1_hard_artist_vox_sim_2025_04_23-14_22_32.npz\",\n",
    "    \"Auk Base\": \"scores/feat_eval_artist_chirp-auk-orig_all_genres_persona_artist_vox_sim_2025_04_24-19_10_52.npz\",\n",
    "    \"Auk 4.28 DPO\": \"scores/feat_eval_artist_chirp-auk-eval_all_genres_persona_artist_vox_sim_2025_04_29-18_38_39.npz\",\n",
    "    # \"6b auk-c\": \"scores/feat_eval_artist_chirp-auk-task-test_all_genres_artist_vox_sim_2025_04_23-20_05_57.npz\",\n",
    "    \"Auk 5.5 DPO\": \"scores/feat_eval_artist_chirp-auk-eval_all_genres_5_05_dpo_artist_vox_sim_2025_05_05-16_01_17.npz\",\n",
    "    \"Auk Prod 6.12\": \"scores/feat_eval_artist_chirp-auk-t1_all_genres_auk_prod_artist_vox_sim_2025_06_12-15_13_44.npz\",\n",
    "    # \"BlueJay CP SFT\": \"scores/feat_eval_artist_chirp-auk-eval_all_genres_5_8_sft_cp_artist_vox_sim_2025_05_16-03_30_48.npz\",\n",
    "    \"BlueJay SFT\": \"scores/feat_eval_artist_chirp-auk-eval_all_genres_blue_sft_artist_vox_sim_2025_06_05-15_56_30.npz\",\n",
    "    \"BlueJay t1-t7\": \"scores/feat_eval_artist_chirp-auk-eval_all_genres_artist_vox_sim_2025_06_05-14_40_51.npz\",\n",
    "    # \"Blue 36-21\": \"scores/feat_eval_artist_chirp-auk-eval_all_genres_blue_21-36-21_artist_vox_sim_2025_06_12-13_04_12.npz\",\n",
    "    # \"Blue 47-39\": \"scores/feat_eval_artist_chirp-auk-eval_all_genres_blue_20-47-39_artist_vox_sim_2025_06_12-14_29_26.npz\",\n",
    "    \"BlueJay 06-26-35\": \"scores/feat_eval_artist_chirp-auk-eval_all_genres_actual_ckpt_06-26-35_artist_vox_sim_2025_06_19-12_37_32.npz\",\n",
    "    \"Training Data\": \"/home/sara/glockenspiel/z_eval_data/training_data_artist_artist_vox_sim.npz\",\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "ARTIST_SIM_FILES = {\n",
    "    \"Prod v4\": \"scores/feat_eval_artist_chirp-v4-h-t-6_all_genres_artist_sim_2025_02_10-20_55_43.npz\",\n",
    "    \"Prod v4 Artist CFG\": \"scores/feat_eval_artist_chirp-v4-h-t-6_all_genres_artist_sim_2025_02_11-02_32_44.npz\",\n",
    "    \"3b Sem\": \"scores/feat_eval_artist_chirp-v5-sem-3b_all_genres_artist_sim_2025_02_11-02_58_51.npz\",\n",
    "    # \"3b Sem Test\": \"scores/feat_eval_artist_chirp-v5-sem-test_all_genres_artist_sim_2025_02_11-03_18_35.npz\",\n",
    "    \"6b Sem\": \"scores/feat_eval_artist_chirp-v5-sem-6b_all_genres_artist_sim_2025_02_11-03_38_51.npz\",\n",
    "    \"Training Data\": \"/home/sara/glockenspiel/z_eval_data/training_data_artist_artist_sim_120_30.npz\",\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "ARTIST_SELF_SIM_FILES = {\n",
    "    \"Prod v4\": \"/home/sara/glockenspiel/suno_utils/task_eval/scores/feat_eval_artist_chirp-v4-h-s-32_all_genres_self_sim_2025_04_29-14_53_40.npz\",\n",
    "    \"Auk Orig\": \"scores/feat_eval_artist_chirp-auk-orig_all_genres_self_sim_2025_05_06-13_43_04.npz\",\n",
    "    # \"Auk C\": \"/home/sara/glockenspiel/suno_utils/task_eval/scores/feat_eval_artist_chirp-auk-task-test_all_genres_self_sim_2025_04_29-14_08_08.npz\",\n",
    "    \"Auk T1\": \"/home/sara/glockenspiel/suno_utils/task_eval/scores/feat_eval_artist_chirp-auk-t1_all_genres_self_sim_2025_04_29-14_25_55.npz\",\n",
    "    \"Auk 5.5 DPO\": \"scores/feat_eval_artist_chirp-auk-eval_all_genres_5_05_dpo_self_sim_2025_05_06-13_20_21.npz\",\n",
    "    \"BlueJay SFT\": \"scores/feat_eval_artist_chirp-auk-eval_all_genres_blue_sft_artist_self_self_sim_2025_06_05-17_15_18.npz\",\n",
    "    \"BlueJay t1-t7\": \"scores/feat_eval_artist_chirp-auk-eval_all_genres_self_sim_2025_06_05-14_55_52.npz\",\n",
    "    \"BlueJay 06-26-35\": \"scores/feat_eval_artist_chirp-auk-eval_all_genres_actual_ckpt_06-26-35_self_sim_2025_06_19-13_32_14.npz\",\n",
    "    \"Train\": \"/home/sara/glockenspiel/z_scratch/training_data_artist_self_sim_120_30.npz\",\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "ARTIST_HARD_SELF_SIM = {\n",
    "    \"v4\": \"scores/feat_eval_artist_chirp-v4-h-s-32_hard_self_sim_2025_06_09-19_00_30.npz\",\n",
    "    \"Auk Prod\": \"scores/feat_eval_artist_chirp-auk-t1_hard_self_sim_2025_06_09-18_50_20.npz\",\n",
    "    \"BlueJay SFT\": \"scores/feat_eval_artist_chirp-auk-eval_hard_blue_sft_self_sim_2025_06_09-15_41_40.npz\",\n",
    "    \"BlueJay t1-r7\": \"scores/feat_eval_artist_chirp-auk-eval_hard_blue_t1-r7_self_sim_2025_06_09-18_25_21.npz\",\n",
    "    \"BlueJay 06-26-35\": \"scores/feat_eval_artist_chirp-auk-eval_hard_actual_ckpt_06-26-35_self_sim_2025_06_19-13_19_08.npz\",\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def parse_data(files):\n",
    "    all_flat = []\n",
    "    names = []\n",
    "    for (\n",
    "        name,\n",
    "        loc,\n",
    "    ) in files.items():\n",
    "        names.append(name)\n",
    "        scores = np.load(loc)\n",
    "        flat_scores = list(chain(*scores.values()))\n",
    "        all_flat.append(flat_scores)\n",
    "\n",
    "    return names, all_flat\n",
    "\n",
    "\n",
    "def parse_best_cover(files):\n",
    "    best_per_source = []\n",
    "    names = []\n",
    "    for (\n",
    "        name,\n",
    "        loc,\n",
    "    ) in files.items():\n",
    "        names.append(name)\n",
    "        scores = np.load(loc)\n",
    "        source_best = []\n",
    "        for _, source_scores in scores.items():\n",
    "            source_best.append(min(source_scores))\n",
    "        best_per_source.append(source_best)\n",
    "\n",
    "    return names, best_per_source\n",
    "\n",
    "\n",
    "def parse_best_artist(files):\n",
    "    best_per_source = []\n",
    "    names = []\n",
    "    for (\n",
    "        name,\n",
    "        loc,\n",
    "    ) in files.items():\n",
    "        names.append(name)\n",
    "        scores = np.load(loc)\n",
    "        source_best = []\n",
    "        for _, source_scores in scores.items():\n",
    "            source_best.append(max(source_scores))\n",
    "        best_per_source.append(source_best)\n",
    "\n",
    "    return names, best_per_source"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "cover_names, cover_flat = parse_data(COVER_FILES)\n",
    "# cover_flat[-1] = [val for val in cover_flat[-1] if val < 0.8]\n",
    "plot_model_performance(cover_flat, cover_names, \"Cover Self Similarity, All Trials\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "cover_names, best_covers = parse_best_cover(COVER_FILES)\n",
    "plot_model_performance(best_covers, cover_names, \"Cover Self Similarity, Best of 10\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "artist_names, artist_flat = parse_data(ARTIST_FILES)\n",
    "plot_model_performance(artist_flat, artist_names, \"Persona Vocal Similarity, All Trials\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "artist_names, best_artist = parse_best_artist(ARTIST_FILES)\n",
    "plot_model_performance(best_artist, artist_names, \"Persona Vocal Similarity, Best of 10\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "artist_names, artist_flat = parse_data(ARTIST_SIM_FILES)\n",
    "plot_model_performance(artist_flat, artist_names, \"Persona Artist Similarity, All Trials\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "artist_names, best_artist = parse_best_artist(ARTIST_SIM_FILES)\n",
    "plot_model_performance(best_artist, artist_names, \"Persona Artist Similarity, Best of 10\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "artist_names, artist_flat = parse_data(ARTIST_SELF_SIM_FILES)\n",
    "plot_model_performance(artist_flat, artist_names, \"Persona Self Similarity, All Trials\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "artist_names, artist_flat = parse_data(ARTIST_HARD_SELF_SIM)\n",
    "plot_model_performance(artist_flat, artist_names, \"Persona Self Similarity (Hard), All Trials\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "suno_clean",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
