{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "from suno_utils.audio import Audio"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "all_similarities = {}\n",
    "for i in range(1, 5):\n",
    "    with open(\n",
    "        f\"/home/tony/Data/Preference/30b_v6/similarity_20250115_chunk{i}of4.json\", \"r\"\n",
    "    ) as f:\n",
    "        data = json.load(f)\n",
    "        for key, value in data.items():\n",
    "            all_similarities[key] = value\n",
    "    print(len(all_similarities))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "# with open(\"/home/tony/Data/Preference/30b_v6/similarities_30b_t6.json\", \"w\") as f:\n",
    "#     json.dump(all_similarities, f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "\n",
    "input_df = pd.read_pickle(\n",
    "    \"/home/tony/Data/Preference/30b_v6/interesting_clips_v4_h_t_6_20250115_full.pkl\"\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "input_df[\"similarity\"] = input_df[\"s3_id\"].map(all_similarities)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "input_df = input_df.sort_values(by=[\"request_id\", \"preference\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "input_df[\"similarity_difference\"] = input_df[\"similarity\"].diff()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "input_artist_df = input_df[input_df[\"task\"] == \"artist_consistency\"].copy()\n",
    "input_cover_df = input_df[input_df[\"task\"] == \"cover\"].copy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "positive_similarity = input_artist_df[input_artist_df[\"preference\"] == 1][\"similarity\"]\n",
    "negative_similarity = input_artist_df[input_artist_df[\"preference\"] == 0][\"similarity\"]\n",
    "positive_mean = positive_similarity.mean()\n",
    "positive_std = positive_similarity.std()\n",
    "negative_mean = negative_similarity.mean()\n",
    "negative_std = negative_similarity.std()\n",
    "\n",
    "plt.hist(\n",
    "    positive_similarity,\n",
    "    bins=100,\n",
    "    alpha=0.5,\n",
    "    label=f\"positive (mean={positive_mean:.2f}, std={positive_std:.2f})\",\n",
    ")\n",
    "plt.hist(\n",
    "    negative_similarity,\n",
    "    bins=100,\n",
    "    alpha=0.5,\n",
    "    label=f\"negative (mean={negative_mean:.2f}, std={negative_std:.2f})\",\n",
    ")\n",
    "plt.title(\"Artist Consistency Similarity\")\n",
    "plt.xlabel(\"Similarity\")\n",
    "plt.ylabel(\"Count\")\n",
    "plt.legend()\n",
    "plt.show()\n",
    "\n",
    "\n",
    "plt.hist(\n",
    "    input_artist_df[input_artist_df[\"preference\"] == 1][\"similarity_difference\"],\n",
    "    bins=100,\n",
    ")\n",
    "mean_diff = input_artist_df[input_artist_df[\"preference\"] == 1][\n",
    "    \"similarity_difference\"\n",
    "].mean()\n",
    "std_diff = input_artist_df[input_artist_df[\"preference\"] == 1][\n",
    "    \"similarity_difference\"\n",
    "].std()\n",
    "plt.title(\n",
    "    f\"Artist Consistency Similarity Difference (mean={mean_diff:.2f}, std={std_diff:.2f})\"\n",
    ")\n",
    "plt.xlabel(\"Similarity Difference\")\n",
    "plt.ylabel(\"Count\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "positive_similarity = input_cover_df[input_cover_df[\"preference\"] == 1][\"similarity\"]\n",
    "negative_similarity = input_cover_df[input_cover_df[\"preference\"] == 0][\"similarity\"]\n",
    "positive_mean = positive_similarity.mean()\n",
    "positive_std = positive_similarity.std()\n",
    "negative_mean = negative_similarity.mean()\n",
    "negative_std = negative_similarity.std()\n",
    "\n",
    "plt.hist(\n",
    "    positive_similarity,\n",
    "    bins=500,\n",
    "    alpha=0.5,\n",
    "    label=f\"positive (mean={positive_mean:.2f}, std={positive_std:.2f})\",\n",
    ")\n",
    "plt.hist(\n",
    "    negative_similarity,\n",
    "    bins=500,\n",
    "    alpha=0.5,\n",
    "    label=f\"negative (mean={negative_mean:.2f}, std={negative_std:.2f})\",\n",
    ")\n",
    "plt.title(\"Cover Similarity\")\n",
    "plt.xlabel(\"Similarity\")\n",
    "plt.ylabel(\"Count\")\n",
    "plt.legend()\n",
    "plt.show()\n",
    "\n",
    "\n",
    "plt.hist(\n",
    "    input_cover_df[input_cover_df[\"preference\"] == 1][\"similarity_difference\"], bins=100\n",
    ")\n",
    "mean_diff = input_cover_df[input_cover_df[\"preference\"] == 1][\n",
    "    \"similarity_difference\"\n",
    "].mean()\n",
    "std_diff = input_cover_df[input_cover_df[\"preference\"] == 1][\n",
    "    \"similarity_difference\"\n",
    "].std()\n",
    "plt.title(f\"Cover Similarity Difference (mean={mean_diff:.2f}, std={std_diff:.2f})\")\n",
    "plt.xlabel(\"Similarity Difference\")\n",
    "plt.ylabel(\"Count\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "input_test_df = input_artist_df.copy()\n",
    "for i, row in input_test_df[\n",
    "    input_test_df[\"request_id\"].isin(\n",
    "        input_test_df[\n",
    "            (input_test_df[\"preference\"] == 1)\n",
    "            & (input_test_df[\"similarity_difference\"] < -0.2)\n",
    "        ][\"request_id\"].unique()[:3]\n",
    "    )\n",
    "].iterrows():\n",
    "    if row[\"preference\"] == 0:\n",
    "        print(row[\"task\"], row[\"metadata\"][\"tags\"])\n",
    "        print(\"parent--->\", row[\"edited_clip_id\"])\n",
    "        audio = Audio.from_s3(\n",
    "            f\"s3://suno-data-uploads/studio/uploads/{row['edited_clip_id']}.mp3\"\n",
    "        )\n",
    "        audio.play()\n",
    "    print(row[\"preference\"], row[\"similarity\"])\n",
    "    audio = Audio.from_s3(f\"s3://suno-data-uploads/studio/uploads/{row['s3_id']}.mp3\")\n",
    "    audio.play()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "suno_env_dev",
   "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
}
