{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:58:21.040680Z",
     "start_time": "2024-05-16T13:58:19.777010Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:09:15.400142Z",
     "iopub.status.busy": "2024-09-04T00:09:15.400003Z",
     "iopub.status.idle": "2024-09-04T00:09:16.826779Z",
     "shell.execute_reply": "2024-09-04T00:09:16.826272Z",
     "shell.execute_reply.started": "2024-09-04T00:09:15.400124Z"
    }
   },
   "outputs": [],
   "source": [
    "import ast\n",
    "import os\n",
    "import shutil\n",
    "import sys\n",
    "from collections import defaultdict\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from preference_data_preparation_4min_30b import *\n",
    "from preference_helper import *\n",
    "from sklearn.model_selection import train_test_split\n",
    "from suno_utils.utils.s3 import download_s3_files\n",
    "from suno_utils.utils.text import read_json, read_jsonl, write_json, write_jsonl\n",
    "from tqdm import tqdm\n",
    "\n",
    "pd.set_option(\"display.max_rows\", 500)\n",
    "pd.set_option(\"display.max_columns\", 500)\n",
    "pd.set_option(\"display.width\", 1000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:58:21.082172Z",
     "start_time": "2024-05-16T13:58:21.041926Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:09:16.827577Z",
     "iopub.status.busy": "2024-09-04T00:09:16.827388Z",
     "iopub.status.idle": "2024-09-04T00:09:16.851235Z",
     "shell.execute_reply": "2024-09-04T00:09:16.850789Z",
     "shell.execute_reply.started": "2024-09-04T00:09:16.827561Z"
    }
   },
   "outputs": [],
   "source": [
    "OUT_DATA_DIR = \"/app/suno/data/dpo/30b_t1_v22\"\n",
    "os.makedirs(OUT_DATA_DIR, exist_ok=True)\n",
    "shutil.copyfile(\n",
    "    \"/app/suno/data/dpo/7v_v20_full/tokenizer_60k.json\",\n",
    "    os.path.join(OUT_DATA_DIR, \"tokenizer_60k.json\"),\n",
    ")\n",
    "NPZ_DIR = \"/app/suno/data/dpo/30b_npz\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:58:53.962528Z",
     "start_time": "2024-05-16T13:58:21.105919Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:09:16.852145Z",
     "iopub.status.busy": "2024-09-04T00:09:16.851815Z",
     "iopub.status.idle": "2024-09-04T00:09:17.935061Z",
     "shell.execute_reply": "2024-09-04T00:09:17.934483Z",
     "shell.execute_reply.started": "2024-09-04T00:09:16.852129Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Preference data shape (83082, 96)\n"
     ]
    }
   ],
   "source": [
    "# df = pd.read_csv(\n",
    "#     \"/home/tony/Data/Preference/30b_v0/interesting_clips_v4_t_1_20240808.csv\"\n",
    "# )  # , engine='python')\n",
    "df = pd.read_pickle(\n",
    "    \"/home/tony/Data/Preference/30b_v0/interesting_clips_v4_t_1_20240808_v22_slice_with_cer.pkl\"\n",
    ")\n",
    "print(\"Preference data shape\", df.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-09-04T00:09:17.935904Z",
     "iopub.status.busy": "2024-09-04T00:09:17.935737Z",
     "iopub.status.idle": "2024-09-04T00:09:18.076419Z",
     "shell.execute_reply": "2024-09-04T00:09:18.075858Z",
     "shell.execute_reply.started": "2024-09-04T00:09:17.935887Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(83082, 96)\n",
      "(83082, 94)\n"
     ]
    }
   ],
   "source": [
    "print(df.shape)\n",
    "df = df.dropna(axis=1, how=\"all\")\n",
    "print(df.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:58:56.199480Z",
     "start_time": "2024-05-16T13:58:53.963687Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:09:18.077252Z",
     "iopub.status.busy": "2024-09-04T00:09:18.077102Z",
     "iopub.status.idle": "2024-09-04T00:09:35.314786Z",
     "shell.execute_reply": "2024-09-04T00:09:35.314068Z",
     "shell.execute_reply.started": "2024-09-04T00:09:18.077236Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "897311\n",
      "897311\n",
      "pre-downloaded df (83082, 94)\n",
      "downloaded df (83082, 94)\n"
     ]
    }
   ],
   "source": [
    "converted_paths = os.listdir(NPZ_DIR)\n",
    "print(len(converted_paths))\n",
    "\n",
    "converted_paths = set([f.replace(\".npz\", \"\") for f in converted_paths])\n",
    "print(len(converted_paths))\n",
    "\n",
    "print(\"pre-downloaded df\", df.shape)\n",
    "df[df[\"s3_id\"].isin(converted_paths)].shape\n",
    "df = df[df[\"s3_id\"].isin(converted_paths)].copy()\n",
    "print(\"downloaded df\", df.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:58:56.467253Z",
     "start_time": "2024-05-16T13:58:56.207647Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:09:35.316999Z",
     "iopub.status.busy": "2024-09-04T00:09:35.316667Z",
     "iopub.status.idle": "2024-09-04T00:09:35.368920Z",
     "shell.execute_reply": "2024-09-04T00:09:35.368351Z",
     "shell.execute_reply.started": "2024-09-04T00:09:35.316978Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "is_30b\n",
       "True    83082\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[\"is_30b\"] = df[\"model_name\"].str.contains(\"-t\")\n",
    "df[\"is_30b\"].value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# LET's do the data prep"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:58:56.592883Z",
     "start_time": "2024-05-16T13:58:56.470781Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:09:35.369862Z",
     "iopub.status.busy": "2024-09-04T00:09:35.369702Z",
     "iopub.status.idle": "2024-09-04T00:09:35.458772Z",
     "shell.execute_reply": "2024-09-04T00:09:35.458172Z",
     "shell.execute_reply.started": "2024-09-04T00:09:35.369845Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "preference  model_name           \n",
      "False       chirp-v3p5-engine-t-1    41541\n",
      "True        chirp-v3p5-engine-t-1    41541\n",
      "Name: count, dtype: int64\n",
      "(83082, 94)\n",
      "(83082, 94)\n"
     ]
    }
   ],
   "source": [
    "## for 13b this is easy for now\n",
    "print(df.groupby([\"preference\"])[\"model_name\"].value_counts())\n",
    "print(df.shape)\n",
    "df = df[df[\"model_name\"].isin([\"chirp-v3p5-engine-t-1\"])]\n",
    "print(df.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:58:56.909539Z",
     "start_time": "2024-05-16T13:58:56.595736Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:09:35.459699Z",
     "iopub.status.busy": "2024-09-04T00:09:35.459538Z",
     "iopub.status.idle": "2024-09-04T00:09:35.555081Z",
     "shell.execute_reply": "2024-09-04T00:09:35.554443Z",
     "shell.execute_reply.started": "2024-09-04T00:09:35.459683Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(83082, 94)\n",
      "(83082, 94)\n",
      "preference  model_name           \n",
      "False       chirp-v3p5-engine-t-1    41541\n",
      "True        chirp-v3p5-engine-t-1    41541\n",
      "Name: count, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "print(df.shape)\n",
    "df = df[\n",
    "    df[\"request_id\"].isin(\n",
    "        df[\"request_id\"].value_counts().index[df[\"request_id\"].value_counts() == 2]\n",
    "    )\n",
    "]\n",
    "print(df.shape)\n",
    "print(df.groupby([\"preference\"])[\"model_name\"].value_counts())\n",
    "assert df.shape[0] == df[\"request_id\"].nunique() * 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-09-04T00:09:35.555966Z",
     "iopub.status.busy": "2024-09-04T00:09:35.555805Z",
     "iopub.status.idle": "2024-09-04T00:09:53.669688Z",
     "shell.execute_reply": "2024-09-04T00:09:53.668944Z",
     "shell.execute_reply.started": "2024-09-04T00:09:35.555949Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "unique_requests 41541\n"
     ]
    }
   ],
   "source": [
    "# Let's use the old selection for now -- for quality assurance\n",
    "# expand the metadata columns -- this takes forever...~ 6 mins\n",
    "test_slice = df[\"metadata\"].apply(lambda x: ast.literal_eval(str(x)))\n",
    "test_slice_series = test_slice.apply(pd.Series)\n",
    "df = pd.concat([df, test_slice_series], axis=1, join=\"inner\")\n",
    "print(\"unique_requests\", df[\"request_id\"].nunique())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-09-04T00:09:53.670745Z",
     "iopub.status.busy": "2024-09-04T00:09:53.670575Z",
     "iopub.status.idle": "2024-09-04T00:09:53.885752Z",
     "shell.execute_reply": "2024-09-04T00:09:53.885046Z",
     "shell.execute_reply.started": "2024-09-04T00:09:53.670727Z"
    }
   },
   "outputs": [],
   "source": [
    "df = df.loc[:, ~df.columns.duplicated()].copy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-09-04T00:09:53.886767Z",
     "iopub.status.busy": "2024-09-04T00:09:53.886596Z",
     "iopub.status.idle": "2024-09-04T00:09:53.998731Z",
     "shell.execute_reply": "2024-09-04T00:09:53.998122Z",
     "shell.execute_reply.started": "2024-09-04T00:09:53.886749Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pos_diff_preference\n",
       "1.0    28891\n",
       "2.0    12650\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = df.sort_values(by=[\"request_id\", \"preference\", \"diff_preference\"])\n",
    "df[\"pos_diff_preference\"] = df[\"diff_preference\"].diff()\n",
    "df[\"cer_diff_preference\"] = df[\"cer\"].diff()\n",
    "df[df[\"preference\"]][\"pos_diff_preference\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-09-04T00:09:53.999723Z",
     "iopub.status.busy": "2024-09-04T00:09:53.999559Z",
     "iopub.status.idle": "2024-09-04T00:09:54.370567Z",
     "shell.execute_reply": "2024-09-04T00:09:54.369970Z",
     "shell.execute_reply.started": "2024-09-04T00:09:53.999707Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.20189999999999997\n"
     ]
    },
    {
     "data": {
      "image/png": "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a69X+TICDAD8n8sNQt6cVvdnWPJHoPLlTUdbizfBrLXupL0cIR1yNm3apPnz52vWrFlKS0vT7373O+Xm5uqNN95QXFxcm83L4XB4/UIkwACAb/xxWt0fYclfgSo2toPfAlVrBTNfbmhxOh1qaGibI1khHXIKCwt1991364477pAkzZo1S2+//bbWr1+vcePGeT2O0yn584il439/dtqFO9U+MqzZmsj//cHo063j19YkJURRQ02b1wTjnKihxh813vyOvtya2KsjFeZ0aNnbH+vwiTPN1qR8M0Z3ZXYPmprrO0dp1ID/1+KRLkkXHadbTHs99L0kOZ0Ov58WdHh5AMlhtcYJyQA4f/680tPTtWTJEg0ZMsTe/uSTT6qmpkYvvvhiG84OAAC0teA7EeilY8eOqaGh4YLTUnFxcXK73W00KwAAECxCNuQAAABcTMiGnNjYWIWFham6utpje3V1teLj49toVgAAIFiEbMiJjIxUnz59tG3bNntbY2Ojtm3bpoyMjDacGQAACAYhfXfV/fffryeffFJ9+/ZVamqqfve73+nMmTO6/fbb23pqAACgjYV0yLnlllt09OhRLVmyRFVVVerdu7dWrFjB6SoAABC6t5ADAABcTMhekwMAAHAxhBwAAGAkQg4AADASIQcAABiJkHMJXnzxRd1zzz1KS0tTZmamV4+xLEuLFy+Wy+VSamqqxo4dqwMHDnjUHD9+XJMmTVK/fv2UmZmpadOm6dSpUwHooGW+zuXQoUNKTk5u9s/mzZvtuub2b9y4sTVa8nApz/WPf/zjC+Y+Y8YMj5rDhw9r3LhxSktL08CBA/XMM8+ovr4+kK18LV97PH78uObMmaPhw4crNTVV3/ve9zR37lydPHnSo66t1nD16tW66aablJKSorvuuktlZWUXrd+8ebN+8IMfKCUlRSNGjNA777zjsd+b12Rr86XHtWvXatSoUbrxxht14403auzYsRfUT5069YK1ys3NDXQbX8uX/jZs2HDB3FNSUjxqgm0Nfemvud8nycnJHh8uHUzr98EHH+ihhx6Sy+VScnKytmzZ0uJj3n//feXk5Khv374aOnSoNmzYcEGNr69rn1nw2eLFi63CwkJr/vz5Vv/+/b16zPLly63+/ftbb775plVRUWE99NBD1k033WSdPXvWrsnNzbVuu+02q7S01Prggw+soUOHWj//+c8D1cZF+TqX+vp668iRIx5/nnvuOSs9Pd2qra2163r27GmtX7/eo+7Lz0FruZTn+r777rPy8vI85n7y5El7f319vXXrrbdaY8eOtXbv3m29/fbb1oABA6xf//rXgW6nWb72uHfvXmvChAnWW2+9ZR08eNAqLi62hg0bZj366KMedW2xhhs3brT69OljrVu3ztq/f7+Vl5dnZWZmWm63u9n6nTt3Wr1797YKCgqsyspK63/+53+sPn36WHv37rVrvHlNtiZfe/z5z39uvfzyy9bu3butyspKa+rUqVb//v2tf//733bNk08+aeXm5nqs1fHjx1urJQ++9rd+/XqrX79+HnOvqqryqAmmNfS1v2PHjnn0tm/fPqt3797W+vXr7ZpgWr+3337bevbZZ62//OUvVs+ePa0333zzovWfffaZlZaWZs2fP9+qrKy0Vq1aZfXu3dt699137Rpfn7NLQci5DOvXr/cq5DQ2Nlrf/e53rRUrVtjbampqrL59+1p//vOfLcuyrMrKSqtnz55WWVmZXfPOO+9YycnJHr+0WoO/5vLf//3f1i9+8QuPbd68OALtUvu77777rLlz537t/rffftvq1auXxy/i3//+91a/fv2sc+fO+WfyXvLXGm7atMnq06ePVVdXZ29rizW88847rVmzZtlfNzQ0WC6Xy1q+fHmz9Y899pg1btw4j2133XWXNX36dMuyvHtNtjZfe/yq+vp6KyMjw3r11VftbU8++aQ1fvx4f0/1kvjaX0u/X4NtDS93/QoLC62MjAzr1KlT9rZgWr8v8+Z3wMKFC63s7GyPbY8//rj1k5/8xP76cp8zb3C6qhUcOnRIVVVVysrKsrdFR0crLS1NJSUlkqSSkhJ17NjR43BsVlaWnE6n/w/ftcAfcykvL1dFRYXuvPPOC/bNmjVLAwYM0J133ql169bJauW3arqc/l5//XUNGDBAt956q37961/rzJkz9r7S0lL17NnT480oXS6XamtrVVlZ6f9GLsJfP0+1tbWKiopSeLjn+4a25hqeP39eH330kcfrx+l0Kisry379fFVpaakGDhzosc3lcqm0tFSSd6/J1nQpPX7VmTNnVF9fr5iYGI/tf//73zVw4EANHz5cTz/9tI4dO+bXuXvjUvs7ffq0vv/972vw4MEaP3689u/fb+8LpjX0x/qtX79e2dnZuvrqqz22B8P6XYqWXoP+eM68EdLveBwqqqqqJElxcXEe2+Pi4uR2uyVJbrdbnTp18tgfHh6umJgY+/GtxR9zWbdunZKSktSvXz+P7RMnTtR3vvMdtW/fXu+9955mzZql06dPa/To0X6bf0sutb9bb71V3bp1U+fOnbV3717l5+fr008/1dKlS+1xv/pu201fh+IaHj16VC+88IJGjhzpsb211/DYsWNqaGho9vXzySefNPuY5tbiy683b16TrelSevyq/Px8de7c2eMfjUGDBmno0KFKTEzU559/rmeffVYPPPCAXnnlFYWFhfm1h4u5lP6uu+46zZs3T8nJyTp58qReeukl3XPPPdq4caO6du0aVGt4uetXVlamffv26Ze//KXH9mBZv0vxdb8Pa2trdfbsWZ04ceKyf+a9Qcj5X/n5+SooKLhozaZNm5SUlNRKM/I/b3u8XGfPntWf//xnPfzwwxfse+SRR+y/33DDDTpz5oxWrlzpl38gA93fl/+xT05OVkJCgsaOHavPPvtM3/rWty55XF+01hrW1tbqwQcfVFJSkiZMmOCxL5BriEvzm9/8Rps2bVJRUZHatWtnb8/Ozrb/3nTh6pAhQ+yjA8EsIyPD48OWMzIydMstt2jNmjV6/PHH225iAbBu3Tr17NlTqampHttDef2CBSHnf/3kJz9RTk7ORWu6d+9+SWMnJCRIkqqrq9W5c2d7e3V1tXr16iXpi4R79OhRj8fV19frxIkT9uMvl7c9Xu5c3njjDZ09e1Y//OEPW6xNS0vTCy+8oPPnzysyMrLF+otprf6apKWlSZIOHjyob33rW4qPj7/gVFDT/yhDaQ1ra2v105/+VB06dNDzzz+viIiIi9b7cw2bExsbq7CwMFVXV3tsr66u/trPqYuPj7/gf/NfrvfmNdmaLqXHJitXrtRvfvMbFRYWtjj37t27KzY2VgcPHmzVfyQvp78mERER6t27tz777DNJwbWGl9Pf6dOntXHjRk2cOLHF79NW63cpmnsNut1uRUVF6aqrrpLT6bzsnwlvcE3O/+rUqZOSkpIu+udSf4EnJiYqISFB27Zts7fV1tZq165d9v9UMjIyVFNTo/Lycrtm+/btamxsvCDdXypve7zcuaxfv1433XTTBadLmlNRUaGYmBi//OPYWv19ee7S//2yTU9P1759+zxetMXFxYqKilKPHj0uu7/W6LG2tla5ubmKiIjQiy++6HFU4Ov4cw2bExkZqT59+ni8fhobG7Vt2zaP/+l/WXp6urZv3+6xrbi4WOnp6ZK8e022pkvpUZIKCgr0wgsvaMWKFRfcXt2cf//73zp+/LjfQre3LrW/L2toaNC+ffvsuQfTGl5Of2+88YbOnz+v2267rcXv01brdylaeg3642fCK367hPkK8s9//tPavXu3fYv07t27rd27d3vcKj18+HDrL3/5i/318uXLrczMTGvLli3Wnj17rPHjxzd7C/kPf/hDa9euXdaOHTusYcOGtekt5Beby7///W9r+PDh1q5duzwed+DAASs5Odl65513LhjzrbfestauXWvt3bvXOnDggLV69WorLS3NWrx4ccD7+Spf+zt48KC1dOlS68MPP7Q+//xza8uWLdbNN99s3XvvvfZjmm4h/8lPfmJVVFRY7777rvWd73ynTW8h96XHkydPWnfddZd16623WgcPHvS4bbW+vt6yrLZbw40bN1p9+/a1NmzYYFVWVlrTp0+3MjMz7TvZJk+ebOXn59v1O3futG644QZr5cqVVmVlpbVkyZJmbyFv6TXZmnztcfny5VafPn2sN954w2Otmn4P1dbWWgsWLLBKSkqszz//3CouLrZycnKsYcOGtfrdfpfS33PPPWdt3brV+uyzz6zy8nLrZz/7mZWSkmLt37/frgmmNfS1vyY/+tGPrMcff/yC7cG2frW1tfa/dT179rQKCwut3bt3W//85z8ty7Ks/Px8a/LkyXZ90y3kzzzzjFVZWWm9/PLLzd5CfrHnzB84XXUJlixZoldffdX+uum0TFFRkQYMGCBJ+vTTTz3eRO2BBx7QmTNnNGPGDNXU1Kh///5asWKFx/+U8/PzNWfOHI0ZM0ZOp1PDhg1TXl5e6zT1FS3Npa6uTp9++qnH3UXSF0dxunbtKpfLdcGY4eHhWr16tebNmydJ+ta3vqWpU6fq7rvvDmwzzfC1v4iICG3btk1FRUU6ffq0vvGNb2jYsGEe1x2FhYVp2bJlmjlzpkaOHKn27dsrJyfHq8PQgeBrjx999JF27dolSRo6dKjHWG+99ZYSExPbbA1vueUWHT16VEuWLFFVVZV69+6tFStW2Ie1//Wvf8np/L8D0/369VN+fr4WLVqkZ599Vtdee62ef/559ezZ067x5jXZmnztcc2aNaqrq7vg52vChAl69NFHFRYWpn379um1117TyZMn1blzZ333u9/VY489FrCjbhfja381NTWaPn26qqqqFBMToz59+mjNmjUeR0WDaQ197U+SPvnkE+3cuVMvvfTSBeMF2/qVl5d7XHc3f/58SVJOTo4WLFigqqoq/etf/7L3d+/eXcuXL9f8+fNVVFSkrl27au7cuRo0aJBd09Jz5g8Oy2rl+3cBAABaAdfkAAAAIxFyAACAkQg5AADASIQcAABgJEIOAAAwEiEHAAAYiZADAACMRMgBAABGIuQAAAAjEXIAAICRCDkAAMBI/x+KPOY0uEjbEwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Axes(0.125,0.11;0.775x0.77)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGdCAYAAAAMm0nCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAuPklEQVR4nO3df3RU9Z3/8ddMfgCaACEJUIRdNZGfARLEkyYdNltXSlfEcwJrYaELuBxBLIatPwJLUQjQBGh0kZUWjGwsiE1ZQdRF7NbWWjxJEFhiDCISWWtsrGRGIASF/LrfP/hm1lFMZpLJnXyS5+McziF3PvOZz33fJPPK537uXIdlWZYAAAAM4gz1AAAAAAJFgAEAAMYhwAAAAOMQYAAAgHEIMAAAwDgEGAAAYBwCDAAAMA4BBgAAGIcAAwAAjEOAAQAAxgkP9QA6m8dzQcG8WYLDIcXGRge9X3wdtbYHdbYHdbYHdbZHZ9a5pe+2dPsAY1nqlG/izuoXX0et7UGd7UGd7UGd7RHKOnMKCQAAGIcAAwAAjEOAAQAAxiHAAAAA4xBgAACAcQgwAADAOAQYAABgHAIMAAAwDgEGAAAYhwADAACMQ4ABAADGIcAAAADjBBxgPv30Uz300ENKTU3VuHHjNG3aNL3zzjvexy3L0hNPPCGXy6Vx48Zp/vz5+vDDD336OHfunB588EFNmDBBEydO1IoVK3Tx4kWfNu+9955mz56tsWPHKiMjQwUFBe3bQwAA0O0EFGDOnz+vf/zHf1RERIQKCgq0f/9+LVu2TP369fO2KSgo0M6dO7V69Wrt3r1bffr00YIFC3T58mVvm4ceekiVlZUqLCzU1q1bdeTIET366KPex+vq6rRgwQINGTJEe/fuVXZ2tp588kn9+te/DsIuB0dYmFPh4d/8z+l0hHqIAAB0W+GBNC4oKNDgwYOVl5fn3TZs2DDv/y3L0o4dO7R48WLddtttkqSNGzcqPT1dr732mqZOnaoPPvhABw8e1PPPP6+xY8dKklauXKmFCxcqOztbgwYN0ksvvaSGhgbl5uYqMjJSN910k06cOKHCwkLNnDkzGPvdbk6nQ03NlmJirm21XWNTs86f+1zNzdzPHQCAYAsowPz+97+Xy+VSVlaWDh8+rEGDBmn27Nn6wQ9+IEn6+OOPVVNTo/T0dO9zoqOjNX78eB07dkxTp07VsWPH1LdvX294kaT09HQ5nU6Vl5dr8uTJKisr08SJExUZGelt43K5VFBQoPPnz/vM+LTFEeSJEKfToTCnQ0uLjqnyTN1V2yQOjNITs1LkdDpkWQSY9mo5dsE+hvBFne1Bne1Bne3RmXX2t8+AAkxVVZV+9atf6e6779a9996rd955R+vWrVNERIQyMzNVU1MjSYqNjfV5XmxsrNxutyTJ7XZrwIABvoMID1e/fv28z3e73Ro6dKhPm7i4OO9jgQSY2NjoQHbRb5Vn6nS8urbVNm3N0sA/nXUM4Ys624M624M62yOUdQ4owFiWpaSkJD3wwAOSpNGjR+vUqVMqKipSZmZmpwywozyeCwrmJEh4uFP9+/sXTM6evaimpubgvXgP43Bc+eEI9jGEL+psD+psD+psj86sc0vfbQkowMTHxyshIcFn24033qjf/OY33sclyePxaODAgd42Ho9HI0eOlHRlJuWzzz7z6aOxsVHnz5/3Pj8uLs47Y9Oi5euWmRh/WZaCWtxA++IHqOOCfQxxddTZHtTZHtTZHqGsc0BXIU2YMEH/+7//67Ptww8/1HXXXSdJGjp0qOLj41VSUuJ9vK6uTm+//bZSUlIkSSkpKaqtrVVFRYW3TWlpqZqbmzVu3DhJUnJyso4cOaKGhgZvm+LiYt1www0BnT4CAADdU0ABZt68eXr77be1detW/elPf9LLL7+s3bt3a/bs2ZIkh8OhuXPn6he/+IV+97vf6eTJk8rOztbAgQO9VyUlJCRo0qRJeuSRR1ReXq6jR49q7dq1mjp1qgYNGiRJmjZtmiIiIvSTn/xEp06d0iuvvKIdO3bo7rvvDvLuAwAAEwV0CmncuHF68skn9fjjj2vLli0aOnSoVqxYoTvvvNPb5p577tEXX3yhRx99VLW1tbr55pv19NNPq1evXt42+fn5Wrt2rebNmyen06nvfe97Wrlypffx6Ohobd++XWvWrNH06dMVExOj++67L+SXUAMAgK7BYXXz63zd7uAv4o2JuVZTNx/8xquQxgzpq/1Zk3T27EU1NrKIt70cDikuLjroxxC+qLM9qLM9qLM9OrPOLX23hXshAQAA4xBgAACAcQgwAADAOAQYAABgHAIMAAAwDgEGAAAYhwADAACMQ4ABAADGIcAAAADjEGAAAIBxCDAAAMA4BBgAAGAcAgwAADAOAQYAABiHAAMAAIxDgAEAAMYhwAAAAOMQYAAAgHEIMAAAwDgEGAAAYBwCDAAAMA4BBgAAGIcAAwAAjEOAAQAAxiHAAAAA4xBgAACAcQgwAADAOAQYAABgHAIMAAAwDgEGAAAYhwADAACMQ4ABAADGIcAAAADjEGAAAIBxCDAAAMA4BBgAAGAcAgwAADAOAQYAABiHAAMAAIxDgAEAAMYhwAAAAOMQYAAAgHEIMAAAwDgEGAAAYBwCDAAAMA4BBgAAGIcAAwAAjBNQgPn3f/93jRgxwuff97//fe/jly9fVk5OjlJTU5WSkqL7779fbrfbp4/q6motXLhQ48ePV1pamjZs2KDGxkafNocOHVJmZqaSkpI0efJk7d27twO7CAAAupvwQJ9w0003qbCw0Pt1WFiY9/+5ubl64403tGnTJkVHR2vt2rVasmSJioqKJElNTU1atGiR4uLiVFRUpDNnzmjZsmWKiIjQAw88IEmqqqrSokWLNGvWLOXn56ukpEQrV65UfHy8Jk2a1NH9BQAA3UDAASYsLEzx8fFf237hwgXt2bNH+fn5SktLk3Ql0Nx+++0qKytTcnKy3nzzTVVWVqqwsFBxcXEaNWqUli5dqvz8fC1ZskSRkZEqKirS0KFDtXz5cklSQkKCjh49qmeeeYYAAwAAJLUjwPzpT3+Sy+VSr169lJycrAcffFBDhgxRRUWFGhoalJ6e7m2bkJCgIUOGeANMWVmZhg8frri4OG8bl8ul1atXq7KyUqNHj1ZZWZk3AH25TW5ubrt20OFo19OC1l+wX78naakdNexc1Nke1Nke1NkenVlnf/sMKMCMGzdOeXl5uuGGG1RTU6MtW7Zozpw5evnll+V2uxUREaG+ffv6PCc2NlY1NTWSJLfb7RNeJHm/bqtNXV2dLl26pN69ewcyZMXGRgfUPphiYq4N2Wt3J6E8hj0JdbYHdbYHdbZHKOscUIDJyMjw/n/kyJEaP368vvvd7+rAgQMBBwu7eDwXZFnB6y883Kn+/f0LJmfPXlRTU3PwXryHcTiu/HAE+xjCF3W2B3W2B3W2R2fWuaXvtgR8CunL+vbtq+uvv14fffSR0tPT1dDQoNraWp9ZGI/H410zExcXp/Lycp8+Wq5S+nKbr1655Ha7FRUV1a6QZFkKanED7YsfoI4L9jHE1VFne1Bne1Bne4Syzh36HJiLFy+qqqpK8fHxSkpKUkREhEpKSryPnz59WtXV1UpOTpYkJScn6/3335fH4/G2KS4uVlRUlBITE71tSktLfV6nuLjY2wcAAEBAAWbDhg1666239PHHH+t//ud/tGTJEjmdTt1xxx2Kjo7WjBkztH79epWWlqqiokIrVqxQSkqKN3y4XC4lJiYqOztb7733ng4ePKhNmzZpzpw5ioyMlCTNmjVLVVVV2rhxoz744APt2rVLBw4c0Pz584O97wAAwFABnUL6y1/+ogceeEDnzp3TgAEDdPPNN2v37t0aMGCAJGnFihVyOp3KyspSfX29XC6XVq1a5X1+WFiYtm7dqtWrV2vmzJnq06ePMjMzlZWV5W0zbNgwbdu2TXl5edqxY4cGDx6sdevWcQk1AADwclhW9z5L6HYHfxFvTMy1mrr5oI5X1161zZghfbU/a5LOnr2oxkYW8baXwyHFxUUH/RjCF3W2B3W2B3W2R2fWuaXvtnAvJAAAYBwCDAAAMA4BBgAAGIcAAwAAjEOAAQAAxiHAAAAA4xBgAACAcQgwAADAOAQYAABgHAIMAAAwDgEGAAAYhwADAACMQ4ABAADGIcAAAADjEGAAAIBxCDAAAMA4BBgAAGAcAgwAADAOAQYAABiHAAMAAIxDgAEAAMYhwAAAAOMQYAAAgHEIMAAAwDgEGAAAYBwCDAAAMA4BBgAAGIcAAwAAjEOAAQAAxiHAAAAA4xBgAACAcQgwAADAOAQYAABgHAIMAAAwDgEGAAAYhwADAACMQ4ABAADGIcAAAADjEGAAAIBxCDAAAMA4BBgAAGAcAgwAADAOAQYAABiHAAMAAIxDgAEAAMYhwAAAAOMQYAAAgHE6FGCeeuopjRgxQj/96U+92y5fvqycnBylpqYqJSVF999/v9xut8/zqqurtXDhQo0fP15paWnasGGDGhsbfdocOnRImZmZSkpK0uTJk7V3796ODBUAAHQj7Q4w5eXlKioq0ogRI3y25+bm6vXXX9emTZu0c+dOnTlzRkuWLPE+3tTUpEWLFqmhoUFFRUVav369XnjhBW3evNnbpqqqSosWLVJqaqpefPFFzZs3TytXrtTBgwfbO1wAANCNtCvAXLx4UQ8//LDWrVunfv36ebdfuHBBe/bs0fLly5WWlqakpCTl5ubq2LFjKisrkyS9+eabqqys1M9+9jONGjVKGRkZWrp0qXbt2qX6+npJUlFRkYYOHarly5crISFBP/zhDzVlyhQ988wzHd5hAABgvnYFmDVr1igjI0Pp6ek+2ysqKtTQ0OCzPSEhQUOGDPEGmLKyMg0fPlxxcXHeNi6XS3V1daqsrPS2SUtL8+nb5XJ5+wAAAD1beKBP2L9/v9599109//zzX3vM7XYrIiJCffv29dkeGxurmpoab5svhxdJ3q/balNXV6dLly6pd+/efo/X4fC7aaf0F+zX70laakcNOxd1tgd1tgd1tkdn1tnfPgMKMJ988ol++tOf6j/+4z/Uq1ev9ozLdrGx0SF77ZiYa0P22t1JKI9hT0Kd7UGd7UGd7RHKOgcUYI4fPy6Px6Pp06d7tzU1Nenw4cPatWuXtm/froaGBtXW1vrMwng8HsXHx0u6MpNSXl7u02/LVUpfbvPVK5fcbreioqICmn258toXZFkBPaVV4eFO9e/vXzA5e/aimpqag/fiPYzDceWHI9jHEL6osz2osz2osz06s84tfbcloADz7W9/Wy+//LLPtn/913/VjTfeqHvuuUff+ta3FBERoZKSEk2ZMkWSdPr0aVVXVys5OVmSlJycrK1bt8rj8Sg2NlaSVFxcrKioKCUmJnrb/PGPf/R5neLiYm8fgbAsBbW4gfbFD1DHBfsY4uqosz2osz2osz1CWeeAAkxUVJSGDx/us+2aa65R//79vdtnzJih9evXq1+/foqKitK6deuUkpLiDR8ul0uJiYnKzs7Www8/rJqaGm3atElz5sxRZGSkJGnWrFnatWuXNm7cqBkzZqi0tFQHDhzQtm3bgrDLAADAdAEv4m3LihUr5HQ6lZWVpfr6erlcLq1atcr7eFhYmLZu3arVq1dr5syZ6tOnjzIzM5WVleVtM2zYMG3btk15eXnasWOHBg8erHXr1mnSpEnBHi4AADCQw7K69ySb2x38NTAxMddq6uaDOl5de9U2Y4b01f6sSTp79qIaG1kD014OhxQXFx30Ywhf1Nke1Nke1NkenVnnlr7bwr2QAACAcQgwAADAOAQYAABgHAIMAAAwDgEGAAAYhwADAACMQ4ABAADGIcAAAADjEGAAAIBxCDAAAMA4BBgAAGAcAgwAADAOAQYAABiHAAMAAIxDgAEAAMYhwAAAAOMQYAAAgHEIMAAAwDgEGAAAYBwCDAAAMA4BBgAAGIcAAwAAjEOAAQAAxgkP9QAAAEDX4nQ65HQ6Qj2MVhFgAACAl9PpUL/+1yg8rPWTNE3NlpxOh5qaLJtG5osAAwAAvJxOh8LDnFpadEyVZ+qu2iZxYJSemJUih8MhiQADAAC6iMozdTpeXRvqYXwjFvECAADjEGAAAIBxCDAAAMA4BBgAAGAcAgwAADAOAQYAABiHAAMAAIxDgAEAAMYhwAAAAOMQYAAAgHEIMAAAwDgEGAAAYBwCDAAAMA4BBgAAGIcAAwAAjEOAAQAAxiHAAAAA4xBgAACAcQgwAADAOAQYAABgHAIMAAAwTkAB5rnnntO0adM0YcIETZgwQTNnztQbb7zhffzy5cvKyclRamqqUlJSdP/998vtdvv0UV1drYULF2r8+PFKS0vThg0b1NjY6NPm0KFDyszMVFJSkiZPnqy9e/d2YBcBAEB3E1CAGTx4sB566CHt3btXe/bs0be//W396Ec/0qlTpyRJubm5ev3117Vp0ybt3LlTZ86c0ZIlS7zPb2pq0qJFi9TQ0KCioiKtX79eL7zwgjZv3uxtU1VVpUWLFik1NVUvvvii5s2bp5UrV+rgwYNB2mUAAGC6gALMrbfeqoyMDF1//fW64YYb9OMf/1jXXHONysrKdOHCBe3Zs0fLly9XWlqakpKSlJubq2PHjqmsrEyS9Oabb6qyslI/+9nPNGrUKGVkZGjp0qXatWuX6uvrJUlFRUUaOnSoli9froSEBP3whz/UlClT9MwzzwR73wEAgKHC2/vEpqYmvfrqq/r888+VkpKiiooKNTQ0KD093dsmISFBQ4YMUVlZmZKTk1VWVqbhw4crLi7O28blcmn16tWqrKzU6NGjVVZWprS0NJ/Xcrlcys3Nbdc4HY727V+w+gv26/ckLbWjhp2LOtuDOtuDOtvL4Qjd+2zAAebkyZOaNWuWLl++rGuuuUZbtmxRYmKiTpw4oYiICPXt29enfWxsrGpqaiRJbrfbJ7xI8n7dVpu6ujpdunRJvXv3Dmi8sbHRAbUPppiYa0P22t1JKI9hT0Kd7UGd7UGd7dG/f+je5wIOMDfccIP27dunCxcu6De/+Y2WLVumZ599tjPGFhQezwVZVvD6Cw93+n3Azp69qKam5uC9eA/jcFz5JRTsYwhf1Nke1Nke1LnjwsKcfv8Bfu7cRTU2Bvd9ruUYtiXgABMZGam//uu/liQlJSXpnXfe0Y4dO/T3f//3amhoUG1trc8sjMfjUXx8vKQrMynl5eU+/bVcpfTlNl+9csntdisqKirg2RdJsiwF9Zs40L74Aeq4YB9DXB11tgd1tgd1tkco69zhz4Fpbm5WfX29kpKSFBERoZKSEu9jp0+fVnV1tZKTkyVJycnJev/99+XxeLxtiouLFRUVpcTERG+b0tJSn9coLi729gEAABBQgHnsscd0+PBhffzxxzp58qQee+wxvfXWW5o2bZqio6M1Y8YMrV+/XqWlpaqoqNCKFSuUkpLiDR8ul0uJiYnKzs7We++9p4MHD2rTpk2aM2eOIiMjJUmzZs1SVVWVNm7cqA8++EC7du3SgQMHNH/+/GDvOwAAMFRAp5A8Ho+WLVumM2fOKDo6WiNGjND27dv1ne98R5K0YsUKOZ1OZWVlqb6+Xi6XS6tWrfI+PywsTFu3btXq1as1c+ZM9enTR5mZmcrKyvK2GTZsmLZt26a8vDzt2LFDgwcP1rp16zRp0qQg7TIAADBdQAGmrUuZe/XqpVWrVvmElq+67rrrVFBQ0Go/qamp2rdvXyBDAwAAPQj3QgIAAMYhwAAAAOMQYAAAgHEIMAAAwDgEGAAAYBwCDAAAMA4BBgAAGIcAAwAAjEOAAQAAxiHAAAAA4xBgAACAcQgwAADAOAQYAABgHAIMAAAwDgEGAAAYhwADAACMQ4ABAADGIcAAAADjEGAAAIBxCDAAAMA4BBgAAGAcAgwAADAOAQYAABiHAAMAAIxDgAEAAMYhwAAAAOMQYAAAgHEIMAAAwDgEGAAAYBwCDAAAMA4BBgAAGIcAAwAAjEOAAQAAxiHAAAAA4xBgAACAcQgwAADAOAQYAABgHAIMAAAwDgEGAAAYhwADAACMQ4ABAADGIcAAAADjEGAAAIBxCDAAAMA4BBgAAGAcAgwAADAOAQYAABgnoACzbds2zZgxQykpKUpLS9N9992n06dP+7S5fPmycnJylJqaqpSUFN1///1yu90+baqrq7Vw4UKNHz9eaWlp2rBhgxobG33aHDp0SJmZmUpKStLkyZO1d+/edu4iAADobgIKMG+99ZbmzJmj3bt3q7CwUI2NjVqwYIE+//xzb5vc3Fy9/vrr2rRpk3bu3KkzZ85oyZIl3sebmpq0aNEiNTQ0qKioSOvXr9cLL7ygzZs3e9tUVVVp0aJFSk1N1Ysvvqh58+Zp5cqVOnjwYBB2GQAAmC48kMbbt2/3+Xr9+vVKS0vT8ePHdcstt+jChQvas2eP8vPzlZaWJulKoLn99ttVVlam5ORkvfnmm6qsrFRhYaHi4uI0atQoLV26VPn5+VqyZIkiIyNVVFSkoUOHavny5ZKkhIQEHT16VM8884wmTZoUpF0HAACmCijAfNWFCxckSf369ZMkVVRUqKGhQenp6d42CQkJGjJkiDfAlJWVafjw4YqLi/O2cblcWr16tSorKzV69GiVlZV5A9CX2+Tm5gY8RoejPXsWvP6C/fo9SUvtqGHnos72oM72oM72cjhC9z7b7gDT3Nys3NxcTZgwQcOHD5ckud1uRUREqG/fvj5tY2NjVVNT423z5fAiyft1W23q6up06dIl9e7d2+9xxsZGB7ZjQRQTc23IXrs7CeUx7Emosz2osz2osz369w/d+1y7A0xOTo5OnTql5557LpjjCTqP54IsK3j9hYc7/T5gZ89eVFNTc/BevIdxOK78Egr2MYQv6mwP6mwP6txxYWFOv/8AP3fuohobg/s+13IM29KuALNmzRr94Q9/0LPPPqvBgwd7t8fFxamhoUG1tbU+szAej0fx8fHeNuXl5T79tVyl9OU2X71yye12KyoqKqDZF0myLAX1mzjQvvgB6rhgH0NcHXW2B3W2B3W2RyjrHNBVSJZlac2aNfrtb3+rX/7ylxo2bJjP40lJSYqIiFBJSYl32+nTp1VdXa3k5GRJUnJyst5//315PB5vm+LiYkVFRSkxMdHbprS01Kfv4uJibx8AAKBnCyjA5OTk6KWXXtJjjz2ma6+9VjU1NaqpqdGlS5ckSdHR0ZoxY4bWr1+v0tJSVVRUaMWKFUpJSfGGD5fLpcTERGVnZ+u9997TwYMHtWnTJs2ZM0eRkZGSpFmzZqmqqkobN27UBx98oF27dunAgQOaP39+UHceAACYKaBTSL/61a8kSf/0T//ksz0vL0/Tp0+XJK1YsUJOp1NZWVmqr6+Xy+XSqlWrvG3DwsK0detWrV69WjNnzlSfPn2UmZmprKwsb5thw4Zp27ZtysvL044dOzR48GCtW7eOS6gBAICkAAPMyZMn22zTq1cvrVq1yie0fNV1112ngoKCVvtJTU3Vvn37AhkeAADoIbgXEgAAMA4BBgAAGIcAAwAAjEOAAQAAxiHAAAAA4xBgAACAcQgwAADAOAQYAABgHAIMAAAwDgEGAAAYhwADAACMQ4ABAADGIcAAAADjEGAAAIBxCDAAAMA4BBgAAGCc8FAPAB3ndDrkdDpabdPcbKm52bJpRAAAdC4CjOGcTof69b9G4WGtT6Y1NjXr/LnPCTEAgG6BAGM4p9Oh8DCnlhYdU+WZuqu2SRwYpSdmpcjpdBBgAADdAgGmm6g8U6fj1bWhHgYAALYgwHRxba1vCWvj1BEAAN0RAaYL83d9CwAAPQ0BpgvzZ33L346I18NTRto8MgAAQosAY4DW1rckxF9r82gAAAg9AkwP4s96GT4vBgBgAgJMDxAf1UtNzZb69u3TZtvGpmbVXbgky/rmEEPIAQCEGgGmB+jbJ1xhTkera2kk6ZbrY/TIHWPUv/81rfbHh+IBAEKNANODtPVZMQnx17YZdPhQPABAV0CAwdfwoXgAgK6OAINOwQ0mAQCdiQCDoAvkBpNtLRgGAOBqCDAIOn8+gM/fBcNNzZacToeamgg5AID/Q4AJIZPvc9Ta2Foea+sD+PxdMOxwOCQRYAAA/4cAEyKm3ucokM+U8QcLhgEA7UGACRFT73Pkz2fKBHvcbc1EsRgYAHoeAkyImXqfIzvG7e9sDx+sBwA9DwEGXZY/sz0t62QiIsLU1NT8jX0xSwMA3QsBBl1ea7M9zNIAQM9EgIHRApml4fYHANB9EGDQLXA1EwD0LGZdwwsAACACDAAAMBCnkNBj8HkyANB9EGDQ7XGlEgB0PwQYdHtcqQQA3Q8BBj2GP1cqcZoJAMxAgAHEaSYAMA0BBhCnmQDANAFfRn348GHde++9crlcGjFihF577TWfxy3L0hNPPCGXy6Vx48Zp/vz5+vDDD33anDt3Tg8++KAmTJigiRMnasWKFbp48aJPm/fee0+zZ8/W2LFjlZGRoYKCgsD3DghQy2mmq/37pmADALBfwAHm888/14gRI7Rq1aqrPl5QUKCdO3dq9erV2r17t/r06aMFCxbo8uXL3jYPPfSQKisrVVhYqK1bt+rIkSN69NFHvY/X1dVpwYIFGjJkiPbu3avs7Gw9+eST+vWvf92OXQSCKyzMqfDwb/7ndDpCPUQA6PYCPoWUkZGhjIyMqz5mWZZ27NihxYsX67bbbpMkbdy4Uenp6Xrttdc0depUffDBBzp48KCef/55jR07VpK0cuVKLVy4UNnZ2Ro0aJBeeuklNTQ0KDc3V5GRkbrpppt04sQJFRYWaubMmR3YXaD9WCcDAF1HUNfAfPzxx6qpqVF6erp3W3R0tMaPH69jx45p6tSpOnbsmPr27esNL5KUnp4up9Op8vJyTZ48WWVlZZo4caIiIyO9bVwulwoKCnT+/Hn169fP7zE5gvzHcKD9Bfv1ETqBrJOJiAhTU1PzN/ZlWV3naqaW71G+VzsXdbYHdbaXwxG699mgBpiamhpJUmxsrM/22NhYud1uSZLb7daAAQN8BxEern79+nmf73a7NXToUJ82cXFx3scCCTCxsdGB7UQQxcRcG7LXRudp7XJsf2dpmpothXWxU02h/FnpSaizPaizPfr3D937XLe/CsnjuSAriH/ohoc7/T5gZ89e/Ma/wsPCnAScbiiQWZrWvj/s5HBc+WUf7J8V+KLO9qDOHRfI+9O5cxfV2Bjc32Mtx7AtQQ0w8fHxkiSPx6OBAwd6t3s8Ho0cOVLSlZmUzz77zOd5jY2NOn/+vPf5cXFx3hmbFi1ft8zE+MuyFNRv4kD74geoZ/LnQ/OkrvX9EeyfFVwddbYHdbZHKOsc1LtRDx06VPHx8SopKfFuq6ur09tvv62UlBRJUkpKimpra1VRUeFtU1paqubmZo0bN06SlJycrCNHjqihocHbpri4WDfccENAp48AAED3FHCAuXjxok6cOKETJ05IurJw98SJE6qurpbD4dDcuXP1i1/8Qr/73e908uRJZWdna+DAgd6rkhISEjRp0iQ98sgjKi8v19GjR7V27VpNnTpVgwYNkiRNmzZNERER+slPfqJTp07plVde0Y4dO3T33XcHcdeB0OJybABov4BPIVVUVGju3Lner/Py8iRJmZmZWr9+ve655x598cUXevTRR1VbW6ubb75ZTz/9tHr16uV9Tn5+vtauXat58+bJ6XTqe9/7nlauXOl9PDo6Wtu3b9eaNWs0ffp0xcTE6L777uMSanQLXI4NAB0XcIBJTU3VyZMnv/Fxh8OhpUuXaunSpd/Ypn///nrsscdafZ2RI0fqueeeC3R4XUprNwZs66aB6L6CeTk2N5cE0FN1+6uQQsHfv7DRswXjcmxmaQD0VASYTuDPX9h/OyJeD08ZafPIYApuLgkArSPAdKLW/sJOiOczYNA2fy/HBoCehgADGK6t9VSskwHQHRFgAEOxTgZAT0aAAQzFOhkAPRkBBjCcP+tkuGwfQHdDgAG6sUDuju10OtTUxCwNADMQYIBuLJDTTOHhYXI4+NA8AGYgwAA9AB+aB6C7IcAAPRyLgQGYiAADQFJwFgNzmgmAXQgwANrEaSYAXQ0BBkCbuIM2gK6GAAPAbywGBtBVEGAABAWzNADsRIABEFTM0gCwAwEGgG24ZBtAsBBgANiOS7YBdBQBBkCXwmkmAP4gwADoUjjNBMAfBBgAXRKnmQC0hgADwDicZgJAgAFgHE4zASDAADCWP6eZ2uJ0OuR0Olptw6kooOshwADo1lpbJ+NwOBQV3Vvhbayl4VQU0PUQYAB0S/6uk5HE7Q8AAxFgAHRL/qyT+dsR8Xp4ysig3f6g7sIlWRYhBrADAQZAt9ZaOEmIv7bN5/sThG65PkaP3DFG/ftf02pfTc2WnE6HmpoIOUBHEWAAwA9tBSF/r4oKDw+Tw8GpKKCjCDAAECTciRuwDwEGAGwQyGfXsGAYaBsBBgBsxCwNEBwEGADoIpilAfxHgAGALsauy7oJOTAZAQYADBLMy7r9ORXFrRbQVRFgAMBAwbqsu7VTUdxqAV0ZAQYAuqlgnIqS7LvVArM9CAQBBgB6oK52qwVme+zTVlBs7QaoXQkBBgB6sK50qwXJv9kep9PRIwOMPzNUbfE3KJqAAAMA6LCOrsnxZ7YnEG3NIgTrVFSwTnu11Y+/waOp2VKYHyHHn2PR1RFgAAC26OhsT4vWwonD4VBTs6WYmNb7C8bdw4N12svpdKhf/2v8mhXxJ3h0NCgGcixCiQADADBCsBYeB3L38I7OZvizyDkszKnwMGfQgkd3CCf+IMAAAIwQrIXHgZzSsmuRs9RzgkewEGAAAEYJ1hu9HbMZgYQuBIYAAwBAJ2N2JfjMv44KAAD0OF06wOzatUu33nqrxo4dq7vuukvl5eWhHhIAAOgCumyAeeWVV5SXl6cf/ehHeuGFFzRy5EgtWLBAHo8n1EMDAAAh1mUDTGFhoX7wgx9oxowZSkxMVE5Ojnr37q09e/aEemgAACDEuuQi3vr6eh0/flyLFi3ybnM6nUpPT9exY8cC6svplDrwOUVf4/j/HwkwZkhf9YkMu2qbhPgo49p0xTHRhja0oQ1tumabG+OuLDx2OK68zwaTw8+7JTisjnwMYSf59NNP9Td/8zcqKipSSkqKd/vGjRt1+PBh/ed//mcIRwcAAEKty55CAgAA+CZdMsDExMQoLCzsawt2PR6P4uLiQjQqAADQVXTJABMZGakxY8aopKTEu625uVklJSU+p5QAAEDP1CUX8UrS3XffrWXLlikpKUnjxo3TL3/5S33xxReaPn16qIcGAABCrMsGmNtvv12fffaZNm/erJqaGo0aNUpPP/00p5AAAEDXvAoJAACgNV1yDQwAAEBrCDAAAMA4BBgAAGAcAgwAADAOAeYqdu3apVtvvVVjx47VXXfdpfLy8lbbHzhwQN///vc1duxYTZs2TW+88YZNIzVfILXevXu3Zs+erVtuuUW33HKL5s+f3+axwRWBfk+32L9/v0aMGKH77ruvk0fYPQRa59raWuXk5MjlcikpKUlTpkzh94cfAq3zM888oylTpmjcuHHKyMhQbm6uLl++bNNozXT48GHde++9crlcGjFihF577bU2n3Po0CFlZmYqKSlJkydP1t69ezt3kBZ87N+/3xozZoz1/PPPW6dOnbJWrlxpTZw40XK73Vdtf/ToUWvUqFFWQUGBVVlZaf3bv/2bNWbMGOvkyZM2j9w8gdb6gQcesJ599lnr3XfftSorK63ly5dbN998s/WXv/zF5pGbJdA6t6iqqrImTZpkzZ4921q8eLFNozVXoHW+fPmyNX36dOuee+6xjhw5YlVVVVmHDh2yTpw4YfPIzRJonV966SUrKSnJeumll6yqqirr4MGD1ne+8x0rNzfX5pGb5Q9/+IP1+OOPW//93/9tDR8+3Prtb3/bavuPPvrIGj9+vJWXl2dVVlZaO3futEaNGmX98Y9/7LQxEmC+4h/+4R+snJwc79dNTU2Wy+Wytm3bdtX2S5cutRYuXOiz7a677rIeeeSRTh1ndxBorb+qsbHRSklJsV544YVOGmH30J46NzY2WjNnzrR2795tLVu2jADjh0Dr/Nxzz1l/93d/Z9XX19s1xG4h0Drn5ORYc+fO9dmWl5dnzZo1q1PH2Z34E2A2btxoTZ061Wfbv/zLv1j//M//3Gnj4hTSl9TX1+v48eNKT0/3bnM6nUpPT9exY8eu+pyysjKlpaX5bHO5XCorK+vMoRqvPbX+qi+++EKNjY3q169fZw3TeO2t85YtWxQbG6u77rrLjmEarz11/v3vf6/k5GStWbNG6enpuuOOO7R161Y1NTXZNWzjtKfOKSkpOn78uPc0U1VVld544w1lZGTYMuaeIhTvhV32k3hD4ezZs2pqalJsbKzP9tjYWJ0+ffqqz3G73V/7dODY2Fi53e5OG2d30J5af1V+fr4GDhzo88sMvtpT5yNHjuj555/Xvn37bBhh99CeOldVVam0tFTTpk3TU089pY8++kg5OTlqbGzUkiVL7Bi2cdpT52nTpuns2bOaPXu2LMtSY2OjZs2apXvvvdeOIfcYV3svjIuLU11dnS5duqTevXsH/TWZgYGRnnrqKb3yyit68skn1atXr1APp9uoq6tTdna21q5dqwEDBoR6ON2aZVmKjY3V2rVrlZSUpNtvv1333nuvioqKQj20buXQoUPatm2bVq1apb179+rJJ5/UG2+8oS1btoR6aOggZmC+JCYmRmFhYfJ4PD7bPR7PN96DKS4u7muzLa21xxXtqXWL7du366mnnlJhYaFGjhzZmcM0XqB1rqqq0p///GctXrzYu625uVmSNHr0aL366qv6q7/6q84dtIHa8/0cHx+v8PBwhYWFebfdeOONqqmpUX19vSIjIzt1zCZqT52feOIJ3Xnnnd7ToSNGjNDnn3+uRx99VIsXL5bTyd/xwXC190K3262oqKhOmX2RmIHxERkZqTFjxqikpMS7rbm5WSUlJUpJSbnqc5KTk1VaWuqzrbi4WMnJyZ05VOO1p9aSVFBQoJ///Od6+umnNXbsWDuGarRA63zjjTfq5Zdf1r59+7z/br31VqWmpmrfvn0aPHiwncM3Rnu+nydMmKCPPvrIGxAl6cMPP1R8fDzh5Ru0p86XLl36WkhpCY0WtwIMmpC8F3ba8mBD7d+/30pKSrL27t1rVVZWWo888og1ceJEq6amxrIsy3r44Yet/Px8b/ujR49ao0ePtrZv325VVlZamzdv5jJqPwVa623btlljxoyxXn31VevMmTPef3V1daHaBSMEWuev4iok/wRa5+rqaislJcVas2aNdfr0aev111+30tLSrJ///Oeh2gUjBFrnzZs3WykpKdZ//dd/WR999JH15ptvWrfddpu1dOnSEO2BGerq6qx3333Xevfdd63hw4dbhYWF1rvvvmv9+c9/tizLsvLz862HH37Y277lMuoNGzZYlZWV1rPPPtvpl1FzCukrbr/9dn322WfavHmzampqNGrUKD399NPe6clPPvnEJ81PmDBB+fn52rRpkx5//HFdf/312rJli4YPHx6qXTBGoLUuKipSQ0ODsrKyfPpZsmSJ7r//flvHbpJA64z2CbTO3/rWt7R9+3bl5eXpzjvv1KBBgzR37lzdc889odoFIwRa58WLF8vhcGjTpk369NNPNWDAAH33u9/Vj3/841DtghEqKio0d+5c79d5eXmSpMzMTK1fv141NTX65JNPvI8PGzZM27ZtU15ennbs2KHBgwdr3bp1mjRpUqeN0WFZzKEBAACz8GcXAAAwDgEGAAAYhwADAACMQ4ABAADGIcAAAADjEGAAAIBxCDAAAMA4BBgAAGAcAgwAADAOAQYAABiHAAMAAIxDgAEAAMb5fxpya0QCr2PnAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df[df[\"preference\"]][\"cer_diff_preference\"].hist(bins=50)\n",
    "print(df[df[\"preference\"]][\"cer_diff_preference\"].quantile(0.9))\n",
    "plt.show()\n",
    "print(df[df[\"preference\"]][\"cer\"].hist(bins=50))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:40.799375Z",
     "start_time": "2024-05-16T13:59:36.394236Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:09:54.371610Z",
     "iopub.status.busy": "2024-09-04T00:09:54.371441Z",
     "iopub.status.idle": "2024-09-04T00:09:54.866826Z",
     "shell.execute_reply": "2024-09-04T00:09:54.866097Z",
     "shell.execute_reply.started": "2024-09-04T00:09:54.371593Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5117\n",
      "good_continue_at\n",
      "True    83082\n",
      "Name: count, dtype: int64\n",
      "\n",
      " Check some basics... \n",
      " preference\n",
      "False    41541\n",
      "True     41541\n",
      "Name: count, dtype: int64 is_30b\n",
      "True    83082\n",
      "Name: count, dtype: int64 model_name\n",
      "chirp-v3p5-engine-t-1    83082\n",
      "Name: count, dtype: int64 preference  model_name           \n",
      "False       chirp-v3p5-engine-t-1    41541\n",
      "True        chirp-v3p5-engine-t-1    41541\n",
      "Name: count, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "df[\"id\"] = df[\"str_id\"]\n",
    "# get the original duration of the clips, if they are concacted\n",
    "df[\"original_duration_s\"] = df[\"total_start_s\"] + df[\"duration\"]\n",
    "# classify the continue at behavoirs by the duration choice\n",
    "audio_prompt_id_to_continue_at = {}\n",
    "for _, row in df[~df[\"audio_prompt_id\"].isna()].iterrows():\n",
    "    audio_prompt_id = row[\"audio_prompt_id\"]\n",
    "    if audio_prompt_id not in audio_prompt_id_to_continue_at:\n",
    "        audio_prompt_id_to_continue_at[audio_prompt_id] = row[\"continue_at\"]\n",
    "    else:\n",
    "        # pick the max\n",
    "        audio_prompt_id = max(\n",
    "            audio_prompt_id_to_continue_at[audio_prompt_id], row[\"continue_at\"]\n",
    "        )\n",
    "print(len(audio_prompt_id_to_continue_at))\n",
    "df[\"has_continue_and_start_continue_at\"] = df[\"id\"].apply(\n",
    "    lambda x: audio_prompt_id_to_continue_at.get(x)\n",
    ")\n",
    "# we want continue at to be at most of the clip...\n",
    "df[\"good_continue_at\"] = (\n",
    "    (df[\"has_continue_and_start_continue_at\"] / df[\"duration\"]) > 0.9\n",
    ") | df[\"has_continue_and_start_continue_at\"].isna()\n",
    "print(df[\"good_continue_at\"].value_counts())\n",
    "\n",
    "\n",
    "print(\n",
    "    \"\\n Check some basics... \\n\",\n",
    "    df[\"preference\"].value_counts(),\n",
    "    df[\"is_30b\"].value_counts(),\n",
    "    df[\"model_name\"].value_counts(),\n",
    "    df.groupby([\"preference\"])[\"model_name\"].value_counts(),\n",
    ")\n",
    "\n",
    "df = df.sort_values(by=[\"request_id\", \"preference\"])\n",
    "df[\"duration_rel_diff\"] = df[\"duration\"].diff()\n",
    "df[\"play_rel_diff\"] = df[\"reaction_play_count\"].diff()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.035167Z",
     "start_time": "2024-05-16T13:59:40.801098Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:10:57.387998Z",
     "iopub.status.busy": "2024-09-04T00:10:57.387393Z",
     "iopub.status.idle": "2024-09-04T00:10:57.508220Z",
     "shell.execute_reply": "2024-09-04T00:10:57.507527Z",
     "shell.execute_reply.started": "2024-09-04T00:10:57.387975Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "negative 41541 positive 30342\n",
      "total pair requests 41541  --> selected pair requests 30342 frac 0.730\n"
     ]
    }
   ],
   "source": [
    "normal_pos_play_count = 3\n",
    "# this is lower, cause a concat is probably already ensuring that it is good\n",
    "concat_pos_play_count = 1\n",
    "# this is a filter on the concated clip\n",
    "concat_total_play_count = 3\n",
    "\n",
    "neg_filter_selection_mask = (\n",
    "    (~df[\"preference\"])  # get basics aligned\n",
    "    & (df[\"reaction_play_count\"] >= 1)  # has to be played once\n",
    "    # & (df[\"play_count\"] <= 3)  # if it is actually bad, shouldn't be listened often\n",
    "    & (df[\"duration\"] >= 10)  # can't be too short, otherwise it is obvious\n",
    "    & (df[\"duration\"] <= 240)  # can't be badly long\n",
    "    & (df[\"has_continue_and_start_continue_at\"].isna())  # won't have any continues\n",
    "    & (df[\"upvote_count\"] == 0)  # won't have any likes\n",
    "    & ((df[\"norm_play_frac\"] <= 3.1))\n",
    "    # & (df[\"dislike_count\"] >= 1) # this is kinda strict\n",
    "    #     & (\n",
    "    #         (df_slice[\"is_in_playlist\"] == False)\n",
    "    #         & (df_slice[\"concat_in_playlist\"] == False)\n",
    "    #     )  # can't be part of a playlist -- otherwise there are some like signal in it?\n",
    ")\n",
    "pos_filter_selectin_mask = (\n",
    "    (df[\"preference\"])  # get basics aligned\n",
    "    & (\n",
    "        df[\"good_continue_at\"]\n",
    "    )  # if continue, needs to continue off a certain percentage\n",
    "    & (df[\"reaction_play_count\"] >= 1)\n",
    "    & (df[\"play_rel_diff\"] >= 0)  # this is more like quality assurance\n",
    "    & (df[\"duration\"] >= 10)  # can't be too short, otherwise it is obvious\n",
    "    & (df[\"duration\"] <= 240)  # can't be badly long\n",
    "    & (df[\"dislike_count\"] == 0)  # can't have dislikes\n",
    "    & (df[\"flag_count\"] == 0)  # can't have issues\n",
    "    & (\n",
    "        (\n",
    "            (df[\"part_of_concat\"])\n",
    "            & (df[\"reaction_play_count\"] >= concat_pos_play_count)\n",
    "            & (df[\"concat_play_counts\"] >= concat_total_play_count)\n",
    "        )\n",
    "        | (\n",
    "            (~df[\"part_of_concat\"])\n",
    "            & (df[\"reaction_play_count\"] >= normal_pos_play_count)\n",
    "            & (df[\"norm_play_frac\"] >= 1.5)\n",
    "        )\n",
    "    )\n",
    "    # & (df[\"norm_play_frac\"] >= 1.9)\n",
    "    & (df[\"user_n_clips\"] >= 40)  # user needs to have genereated at least 20\n",
    "    # & (df[\"duration_rel_diff\"] < 10) # positive isn't just longer\n",
    "    & ((df[\"upvote_count\"] >= 1) | (df[\"reaction_play_count\"] >= 5)| (df[\"concat_play_counts\"] >= 5))\n",
    "    # & ((df[\"upvote_count\"] >= 1) | (df[\"norm_play_frac\"] >= 1.9))\n",
    "    # & (df[\"pos_diff_preference\"] == 2)\n",
    "    & ((df[\"cer_diff_preference\"] < 0.2) & (df[\"cer\"] < 0.5)) # cut on hoot cer difference and abs cer\n",
    ")\n",
    "print(\n",
    "    \"negative\",\n",
    "    sum(neg_filter_selection_mask),\n",
    "    \"positive\",\n",
    "    sum(pos_filter_selectin_mask),\n",
    ")\n",
    "\n",
    "neg_filter_requests = df[neg_filter_selection_mask][\"request_id\"].unique()\n",
    "pos_filter_requests = df[pos_filter_selectin_mask][\"request_id\"].unique()\n",
    "# looking for very strong signal here:\n",
    "# listen to the positive/negative more than once\n",
    "# disliked one of the clips\n",
    "unique_requests = set(pos_filter_requests).intersection(neg_filter_requests)\n",
    "print(\n",
    "    \"total pair requests\",\n",
    "    df[\"request_id\"].nunique(),\n",
    "    \" --> selected pair requests\",\n",
    "    len(unique_requests),\n",
    "    f\"frac {len(unique_requests) / df['request_id'].nunique():.3f}\",\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.250737Z",
     "start_time": "2024-05-16T13:59:41.036434Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:11:01.847564Z",
     "iopub.status.busy": "2024-09-04T00:11:01.846944Z",
     "iopub.status.idle": "2024-09-04T00:11:02.004556Z",
     "shell.execute_reply": "2024-09-04T00:11:02.003853Z",
     "shell.execute_reply.started": "2024-09-04T00:11:01.847541Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "requests 30342 clips 60684 total khrs 3.145; N gpus for 1500 iters 3.793; 4 gpus for x iters 948.188; n unique users 23962 n pro users 12210\n"
     ]
    }
   ],
   "source": [
    "df_slice = df[df[\"request_id\"].isin(set(unique_requests))].copy()\n",
    "print(\n",
    "    \"requests\",\n",
    "    df_slice[\"request_id\"].nunique(),\n",
    "    \"clips\",\n",
    "    df_slice.shape[0],\n",
    "    f\"total khrs {sum(df_slice['duration'] / 3600 / 1000):.3f};\",\n",
    "    f\"N gpus for 1500 iters {df_slice.shape[0] / 8 / 2 / 1000:.3f};\",\n",
    "    f\"4 gpus for x iters {df_slice.shape[0] / 8 / 2 / 4:.3f};\",\n",
    "    f\"n unique users {df_slice['user_id'].nunique()}\",\n",
    "    f\"n pro users {df_slice[df_slice['is_pro_user']]['user_id'].nunique()}\",\n",
    ")\n",
    "# 76171 152342 total khrs 2.880 n gpus for 1250 iters 3.809\n",
    "# before cer: requests 41541 clips 83082 total khrs 4.318; N gpus for 1500 iters 5.193; 4 gpus for x iters 1298.156; n unique users 31037 n pro users 15384\n",
    "# after cer: requests 30342 clips 60684 total khrs 3.145; N gpus for 1500 iters 3.793; 4 gpus for x iters 948.188; n unique users 23962 n pro users 12210"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-09-04T00:09:55.125570Z",
     "iopub.status.busy": "2024-09-04T00:09:55.125397Z",
     "iopub.status.idle": "2024-09-04T00:09:55.128042Z",
     "shell.execute_reply": "2024-09-04T00:09:55.127522Z",
     "shell.execute_reply.started": "2024-09-04T00:09:55.125551Z"
    }
   },
   "outputs": [],
   "source": [
    "# requests 17681 clips 35362 total khrs 1.815; N gpus for 1500 iters 1.473; 4 gpus for x iters 552.531; n unique users 15179 n pro users 5983"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.277006Z",
     "start_time": "2024-05-16T13:59:41.252105Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:09:55.128828Z",
     "iopub.status.busy": "2024-09-04T00:09:55.128685Z",
     "iopub.status.idle": "2024-09-04T00:09:55.185593Z",
     "shell.execute_reply": "2024-09-04T00:09:55.185008Z",
     "shell.execute_reply.started": "2024-09-04T00:09:55.128813Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "positive in playlist (7253, 97)\n"
     ]
    }
   ],
   "source": [
    "test_mask = (df_slice[\"preference\"]) & (\n",
    "    (df_slice[\"is_in_playlist\"]) | (df_slice[\"concat_in_playlist\"])\n",
    ")\n",
    "print(\"positive in playlist\", df_slice[test_mask].shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-09-04T00:09:55.186438Z",
     "iopub.status.busy": "2024-09-04T00:09:55.186289Z",
     "iopub.status.idle": "2024-09-04T00:09:55.527707Z",
     "shell.execute_reply": "2024-09-04T00:09:55.527104Z",
     "shell.execute_reply.started": "2024-09-04T00:09:55.186423Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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nz5MmTLFtzw6OpolS5YwY8YM7rzzTuLi4hgzZozvo/MAXbt2JT09nXnz5jF37lxatmzJwoULadeu3TkVQkRERMzH8Hp1ljMvL/gXSzud0UHvV2qnuoeG6h4aqntoqO41s1ot2Ep+ZNcnyykqPA5AZFQsbW+6h/Lwprjd53+x9Ol1r5wOBj1rTERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMK+AgtGXLFu6//35SUlJISkrio48+8i1zuVz86U9/YsCAASQnJ5OSksKkSZM4dOiQXx833XQTSUlJfl8vvfSSX5sdO3bw+9//no4dO9KzZ08WL15cbSxr166lb9++dOzYkQEDBrBu3bpAN0dERERMLOAgVFxcTFJSElOnTq22rKSkhK+//poHHniAlStXsmDBAr777jseeOCBam3HjRvHhg0bfF/Dhg3zLSssLGTkyJE0a9aMlStXMmnSJBYsWMCbb77pa/PFF18wceJEBg0axLvvvsvNN9/Mgw8+yM6dOwPdJBERETEpW6Ar9OzZk549e9a4LDo6mqVLl/rNe/LJJ/nd737HwYMHadasmW9+ZGQkCQkJNfazatUqXC4Xs2bNwuFw0LZtW3Jycli6dCmDBw8GICMjg9TUVO69914AJkyYQGZmJq+99hozZswIdLNERETEhAIOQoEqLCzEMAxiYmL85i9evJgXXniBpk2b0r9/f9LS0rDZKoaTlZVFt27dcDgcvvYpKSksXryY48ePExsbS1ZWFmlpaX59pqSk+J2qqyvDCHy76tJfsPuV2qnuoaG6h4bqHhqq+7k533pVrXsw61+vQai0tJT09HT69etHVFSUb/4999zDNddcQ2xsLNu2bWPu3Lnk5ubyxz/+EYC8vDwSExP9+nI6nb5lsbGx5OXl+eZVio+PJy8vL+BxxsdHB7xOKPuV2qnuoaG6h4bqHhqqe3VFhyzY7Fbs9opoYbNbsVotxDSMDNpr1Efd6y0IuVwuxo8fj9frZfr06X7LRowY4fu+ffv22O12pk6dysSJE/2OAl0o+fkn8HqD159hVPywgt2v1E51Dw3VPTRU99BQ3WtmsViwuT2Uu9y4XOUAlLvcuN0ejhwpwuPxnFf/VeteOR0M9RKEXC4XEyZM4ODBg7z66qt+R4Nq0rlzZ8rLyzlw4ABXXXUVTqez2pGdyunKo0A1tcnPz692lKguvF7q5Re6vvqV2qnuoaG6h4bqHhqqe2CCVav6qHvQ7yNUGYL27t3LsmXLiIuLO+s6OTk5WCwW4uPjAUhOTmbr1q24XC5fm8zMTFq1akVsbKyvzaZNm/z6yczMJDk5OXgbIyIiIpe1gINQUVEROTk55OTkAHDgwAFycnI4ePAgLpeLcePGkZ2dTXp6Om63m9zcXHJzcykrKwNg27ZtLFu2jB07drB//35WrVrF7Nmzuf32230hZ8CAAdjtdp544gl27drFmjVryMjI8DulNnz4cNavX88rr7zCnj17mD9/PtnZ2X4fwxcRERGpTcCnxrKzsxk+fLhvevbs2QAMHDiQsWPH8sknnwBwxx13+K2XkZHBDTfcgMPhYM2aNSxYsICysjISExNJS0vzCznR0dEsWbKEGTNmcOeddxIXF8eYMWN8H50H6Nq1K+np6cybN4+5c+fSsmVLFi5cSLt27QLdJBERETEpw+vVWc68vOBfLO10Rge9X6md6h4aqntoqO6hobrXzGq1YCv5kV2fLKeo8DgAkVGxtL3pHsrDm+J2n//F0qfXvXI6GPSsMRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExrYCD0JYtW7j//vtJSUkhKSmJjz76yG+51+vlueeeIyUlhU6dOpGWlsb333/v1+bYsWNMnDiRrl270q1bNx5//HGKior82uzYsYPf//73dOzYkZ49e7J48eJqY1m7di19+/alY8eODBgwgHXr1gW6OSIiImJiAQeh4uJikpKSmDp1ao3LFy9ezPLly5k2bRpvvfUWERERjBw5ktLSUl+bRx55hN27d7N06VJefPFFtm7dylNPPeVbXlhYyMiRI2nWrBkrV65k0qRJLFiwgDfffNPX5osvvmDixIkMGjSId999l5tvvpkHH3yQnTt3BrpJIiIiYlIBB6GePXvyhz/8gd69e1db5vV6ycjI4IEHHuCWW26hffv2PPvssxw+fNh35GjPnj2sX7+ep59+ms6dO9OtWzemTJnCe++9x6FDhwBYtWoVLpeLWbNm0bZtW/r168c999zD0qVLfa+VkZFBamoq9957L61bt2bChAlcc801vPbaa+daCxERETEZWzA7O3DgALm5ufTo0cM3Lzo6ms6dO7Nt2zb69evHtm3biImJoWPHjr42PXr0wGKxsH37dnr37k1WVhbdunXD4XD42qSkpLB48WKOHz9ObGwsWVlZpKWl+b1+SkpKtVN1dWEYgW9rXfoLdr9SO9U9NFT30FDdQ0N1PzfnW6+qdQ9m/YMahHJzcwGIj4/3mx8fH09eXh4AeXl5NGzY0H8QNhuxsbG+9fPy8khMTPRr43Q6fctiY2PJy8vzzavpdQIRHx8d8Dqh7Fdqp7qHhuoeGqp7aKju1RUdsmCzW7HbK6KFzW7FarUQ0zAyaK9RH3UPahC6VOXnn8DrDV5/hlHxwwp2v1I71T00VPfQUN1DQ3WvmcViweb2UO5y43KVA1DucuN2ezhypAiPx3Ne/Vete+V0MAQ1CCUkJACQn59Po0aNfPPz8/Np3749UHFk58iRI37rlZeXc/z4cd/6Tqez2pGdyunKo0A1tcnPz692lKguvF7q5Re6vvqV2qnuoaG6h4bqHhqqe2CCVav6qHtQ7yOUmJhIQkICGzdu9M0rLCzkyy+/pEuXLgB06dKFgoICsrOzfW02bdqEx+OhU6dOACQnJ7N161ZcLpevTWZmJq1atSI2NtbXZtOmTX6vn5mZSXJycjA3SURERC5jAQehoqIicnJyyMnJASoukM7JyeHgwYMYhsHw4cN54YUX+Pjjj/nmm2+YNGkSjRo14pZbbgGgdevWpKam8uSTT7J9+3Y+//xzZs6cSb9+/WjcuDEAAwYMwG6388QTT7Br1y7WrFlDRkYGI0aM8I1j+PDhrF+/nldeeYU9e/Ywf/58srOzGTZsWDDqIiIiIiZgeL2BHWT67LPPGD58eLX5AwcO5JlnnsHr9fL888/z1ltvUVBQwHXXXcfUqVNp1aqVr+2xY8eYOXMmn3zyCRaLhT59+jBlyhQiI09dULVjxw5mzJjBv//9b+Li4hg2bBijRo3ye821a9cyb948fvjhB1q2bMmjjz5Kz549A60BeXnBv0bI6YwOer9SO9U9NFT30FDdQ0N1r5nVasFW8iO7PllOUeFxACKjYml70z2UhzfF7T7/a4ROr3vldDAEHIQuRwpClwfVPTRU99BQ3UNDda/ZpRyE9KwxERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETGtoAehm266iaSkpGpf06dPB+Cee+6ptuypp57y6+PgwYOMGjWKzp070717d+bMmUN5eblfm88++4yBAwfSoUMHevfuzcqVK4O9KSIiInKZswW7w7fffhu32+2b3rVrFyNGjKBv376+eXfffTfjxo3zTUdERPi+d7vdjB49GqfTyYoVKzh8+DCTJ0/Gbrfz8MMPA7B//35Gjx7NkCFDSE9PZ+PGjUyZMoWEhARSU1ODvUkiIiJymQp6EGrYsKHf9EsvvUSLFi34xS9+4ZsXHh5OQkJCjetv2LCB3bt3s3TpUpxOJ1dffTXjx48nPT2dsWPH4nA4WLFiBYmJiTz22GMAtG7dms8//5xly5YpCImIiEidBT0I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mURFRdGmTRtfm02bNvm9TmZmpq8PERERkboIehCaM2cOmzdv5sCBA3zxxReMHTsWi8VC//79iY6O5q677uKZZ55h06ZNZGdn8/jjj9OlSxdfiElJSaFNmzZMmjSJHTt2sH79eubNm8fQoUNxOBwADBkyhP379/Pss8+yZ88eXn/9ddauXUtaWlqwN0dEREQuY0E/NfbTTz/x8MMPc+zYMRo2bMh1113HW2+9RcOGDQF4/PHHsVgsjBs3jrKyMlJSUpg6dapvfavVyosvvsi0adMYPHgwERERDBw4kHHjxvnaNG/enEWLFjF79mwyMjJo0qQJTz/9tD46LyIiIgExvF6d5czLC/7F0k5ndND7ldqp7qGhuoeG6h4aqnvNrFYLtpIf2fXJcooKjwMQGRVL25vuoTy8KW73+V8sfXrdK6eDQc8aExEREdNSEBIRERHTUhASERER01IQEhEREdNSEBIRERHTUhASERER01IQEhEREdNSEBIRERHTUhASERER01IQEhEREdNSEBIRERHTUhASERER01IQEhEREdNSEBIRERHTUhASERER01IQEhEREdNSEBIRERHTUhASERER01IQEhEREdNSEBIRERHTUhASERER01IQEhEREdNSEBIRERHTUhASERER01IQEhEREdNSEBIRERHTUhASERER01IQEhEREdNSEBIRERHTUhASERER01IQEhEREdNSEBIRERHTUhASERER01IQEhEREdNSEBIRERHTUhASERER01IQEhEREdNSEBIRERHTCnoQWrRoEXfddRddunShe/fujBkzhm+//davzT333ENSUpLf11NPPeXX5uDBg4waNYrOnTvTvXt35syZQ3l5uV+bzz77jIEDB9KhQwd69+7NypUrg705IiIichmzBbvDzZs3M3ToUDp27Ijb7Wbu3LmMHDmS9957jwYNGvja3X333YwbN843HRER4fve7XYzevRonE4nK1as4PDhw0yePBm73c7DDz8MwP79+xk9ejRDhgwhPT2djRs3MmXKFBISEkhNTQ32ZonIJcIwwDAMv3lerxevN0QDEpGLWtCD0JIlS/ymn3nmGbp3785XX33F9ddf75sfHh5OQkJCjX1s2LCB3bt3s3TpUpxOJ1dffTXjx48nPT2dsWPH4nA4WLFiBYmJiTz22GMAtG7dms8//5xly5YpCImY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r8351l1BKMjWrFnD7NmzefDBB/nrX/9K+/btGTlyZLU7YMu5a9u2LRs2bPB9vfHGG75ls2bN4p///Cfz5s1j+fLlHD58mLFjx4ZwtJem4uJikpKSmDp1ao3LFy9ezPLly5k2bRpvvfUWERERjBw5ktLSUl+bRx55hN27d7N06VJefPFFtm7dWu0PmPg7W90BUlNT/X7/586d67dcdQ/c5s2bGTp0KG+99RZLly6lvLyckSNHUlxc7Gtztr8tbreb0aNH43K5WLFiBc888wx//etfef7550OxSZeEutQd4O677/b7nZ80aZJvWVDq7pWgGjRokHf69Om+abfb7U1JSfEuWrQohKO6fDz//PPe22+/vcZlBQUF3muvvda7du1a37zdu3d727Vr5922bdsFGuHlp127dt4PP/zQN+3xeLw33nij9+WXX/bNKygo8Hbo0MH797//3ev1nqr79u3bfW3WrVvnTUpK8v70008XbvCXsKp193q93smTJ3sfeOCBM66jugdHfn6+t127dt7Nmzd7vd66/W359NNPve3bt/fm5ub62rzxxhverl27ektLSy/o+C9VVevu9Xq9w4YN8z799NNnXCcYddcRoSAqKyvjq6++okePHr55FouFHj16sG3bthCO7PKyd+9eUlJSuPnmm5k4cSIHDx4EIDs7G5fL5Vf/1q1b06xZM7KyskI02svPgQMHyM3N9atzdHQ0nTt39v2eb9u2jZiYGDp27Ohr06NHDywWi04Vn6fNmzfTvXt3br31VqZOncrRo0d9y1T34Dhx4gQAsbGxQN3+tmRlZdGuXTu/G/qmpKRQWFjI7t27L9zgL2FV615p9erV3HDDDfTv358///nPnDx50rcsGHW/pO8sfbE5evQobreb+Ph4v/nx8fHVznvKuenUqROzZ8+mVatW5ObmsnDhQoYOHcrq1avJy8vDbrcTExPjt058fDy5ubkhGvHlp7KWNf2eV14zkZeXR8OGDf2W22w2YmNj9bM4D6mpqfTu3ZvExET279/P3Llzue+++3jzzTexWq2qexB4PB5mzZpF165dadeuHUCd/rbk5eVVe6pB5bRqf3Y11R2gf//+NGvWjEaNGvHNN9+Qnp7Od999x4IFC4Dg1F1BSC4pPXv29H3fvn17OnfuTK9evVi7di3h4eEhHJlI/evXr5/v+8oLR2+55RbfUSI5f9OnT2fXrl1+1x5K/TtT3QcPHuz7PikpiYSEBNLS0ti3bx8tWrQIymvr1FgQxcXFYbVaq10YnZ+fr+ef1ZOYmBhatmzJvn37cDqduFwuCgoK/Nrk5+eTkJAQohFefiprWdvvudPp5MiRI37Ly8vLOX78uH4WQdS8eXPi4uLYu3cvoLqfrxkzZvDpp5/y6quv0qRJE9/8uvxtcTqd1T5FVjmt2tfuTHWvSefOnQH8fufPt+4KQkHkcDi49tpr2bhxo2+ex+Nh48aNdOnSJYQju3wVFRWxf/9+EhIS6NChA3a73a/+3377LQcPHiQ5OTl0g7zMJCYmkpCQ4FfnwsJCvvzyS9/veZcuXSgoKCA7O9vXZtOmTXg8Hjp16nTBx3y5+umnnzh27JjvD77qfm68Xi8zZszgww8/5NVXX6V58+Z+y+vytyU5OZmdO3f6vUHIzMwkKiqKNm3aXJDtuNScre41ycnJAU6FnGDUXafGgmzEiBFMnjyZDh060KlTJ1599VVOnjzJnXfeGeqhXRbmzJlDr169aNasGYcPH2b+/PlYLBb69+9PdHQ0d911F8888wyxsbFERUXx9NNP06VLFwWhABUVFbFv3z7f9IEDB8jJySE2NpZmzZoxfPhwXnjhBa688koSExN57rnnaNSoEbfccgtQcSFpamoqTz75JNOnT8flcjFz5kz69etH48aNQ7VZF73a6h4bG8uCBQu49dZbcTqd7N+/nz/96U9ceeWVpKamAqr7uZo+fTp///vf+ctf/kJkZKTv2pLo6GjCw8Pr9LclJSWFNm3aMGnSJB599FFyc3OZN28eQ4cOxeFwhHDrLl5nq/u+fftYvXo1PXv25IorruCbb75h9uzZXH/99bRv3x4ITt319Pl68Nprr7FkyRJyc3O5+uqrmTJliu9wnpyfP/zhD2zZsoVjx47RsGFDrrvuOv7whz/4zhWXlpbyzDPP8N5771FWVkZKSgpTp07VoekAffbZZwwfPrza/IEDB/LMM8/g9Xp5/vnneeuttygoKOC6665j6tSptGrVytf22LFjzJw5k08++QSLxUKfPn2YMmUKkZGRF3JTLim11X3atGk8+OCDfP3115w4cYJGjRpx4403Mn78eL9T76p74JKSkmqcP3v2bN+b2Lr8bfnhhx+YNm0amzdvJiIigoEDBzJx4kRsNh1zqMnZ6v7jjz/y6KOPsmvXLoqLi2natCm33HILY8aMISoqytf+fOuuICQiIiKmpWuERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtBSERERExLQUhERERMS0FIRERETEtP5/UVto9jIe8PwAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_slice[df_slice[\"preference\"]][\"duration\"].hist(bins=np.linspace(0, 240, 100), label=\"postiive\", alpha=0.5)\n",
    "df_slice[~df_slice[\"preference\"]][\"duration\"].hist(bins=np.linspace(0, 240, 100), label=\"negative\", alpha=0.5)\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.323409Z",
     "start_time": "2024-05-16T13:59:41.278278Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:09:55.528687Z",
     "iopub.status.busy": "2024-09-04T00:09:55.528524Z",
     "iopub.status.idle": "2024-09-04T00:09:55.531077Z",
     "shell.execute_reply": "2024-09-04T00:09:55.530577Z",
     "shell.execute_reply.started": "2024-09-04T00:09:55.528671Z"
    }
   },
   "outputs": [],
   "source": [
    "# interesting_clips_must_be_positive_mask = (\n",
    "#     (df_slice[\"upvoted\"] == True)\n",
    "#     | (df_slice[\"has_action\"] == True)\n",
    "#     | (df_slice[\"part_of_concat\"] == True)\n",
    "# )\n",
    "# interesting_clips_must_be_not_negative_mask = (df_slice[\"downvoted\"] == False) # & (df_slice[\"dislike_count\"] < 1)\n",
    "# interesting_clips_mask = interesting_clips_must_be_positive_mask & interesting_clips_must_be_not_negative_mask\n",
    "# assert interesting_clips_mask.eq(df_slice[\"preference\"]).all()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.392244Z",
     "start_time": "2024-05-16T13:59:41.324472Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:09:55.531996Z",
     "iopub.status.busy": "2024-09-04T00:09:55.531856Z",
     "iopub.status.idle": "2024-09-04T00:09:55.570433Z",
     "shell.execute_reply": "2024-09-04T00:09:55.569971Z",
     "shell.execute_reply.started": "2024-09-04T00:09:55.531982Z"
    }
   },
   "outputs": [],
   "source": [
    "# save positive ids\n",
    "# positive_preference_ids = df_slice[df_slice[\"preference\"] == False][\"s3_id\"].to_json(orient='values')\n",
    "# with open('/home/tony/Data/Preference/7b_v2/7v_v20_full_recut_id_negative.json', 'w') as file:\n",
    "#     file.write(positive_preference_ids)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T14:00:20.866354Z",
     "start_time": "2024-05-16T14:00:12.443344Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:13:26.764140Z",
     "iopub.status.busy": "2024-09-04T00:13:26.763536Z",
     "iopub.status.idle": "2024-09-04T00:13:26.766758Z",
     "shell.execute_reply": "2024-09-04T00:13:26.766208Z",
     "shell.execute_reply.started": "2024-09-04T00:13:26.764118Z"
    }
   },
   "outputs": [],
   "source": [
    "# df_slice.to_pickle(\"/home/tony/Data/Preference/30b_v0/interesting_clips_v4_t_1_20240808_v22_slice.pkl\")\n",
    "# BREAK"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Need to kick out the ones has gpt prompt -- these are pairs with different text inputs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.932296Z",
     "start_time": "2024-05-16T13:59:41.932287Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:13:26.768183Z",
     "iopub.status.busy": "2024-09-04T00:13:26.767856Z",
     "iopub.status.idle": "2024-09-04T00:13:26.864987Z",
     "shell.execute_reply": "2024-09-04T00:13:26.864417Z",
     "shell.execute_reply.started": "2024-09-04T00:13:26.768166Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "26740"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# don't have continue at\n",
    "df_slice[df_slice[\"continue_at\"].isna()][\"request_id\"].nunique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.932966Z",
     "start_time": "2024-05-16T13:59:41.932957Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:13:26.865903Z",
     "iopub.status.busy": "2024-09-04T00:13:26.865750Z",
     "iopub.status.idle": "2024-09-04T00:13:26.873238Z",
     "shell.execute_reply": "2024-09-04T00:13:26.872669Z",
     "shell.execute_reply.started": "2024-09-04T00:13:26.865887Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "30342\n"
     ]
    }
   ],
   "source": [
    "final_filtered_requests = df_slice[\"request_id\"].unique()\n",
    "print(len(final_filtered_requests))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.933558Z",
     "start_time": "2024-05-16T13:59:41.933550Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:13:26.874075Z",
     "iopub.status.busy": "2024-09-04T00:13:26.873928Z",
     "iopub.status.idle": "2024-09-04T00:13:26.905018Z",
     "shell.execute_reply": "2024-09-04T00:13:26.904535Z",
     "shell.execute_reply.started": "2024-09-04T00:13:26.874061Z"
    }
   },
   "outputs": [],
   "source": [
    "# df_slice.to_csv(\"/home/tony/Data/Preference/7b_v2/7b_before_recode_20240412\", index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.934277Z",
     "start_time": "2024-05-16T13:59:41.934268Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:13:26.906582Z",
     "iopub.status.busy": "2024-09-04T00:13:26.906261Z",
     "iopub.status.idle": "2024-09-04T00:13:27.106720Z",
     "shell.execute_reply": "2024-09-04T00:13:27.106051Z",
     "shell.execute_reply.started": "2024-09-04T00:13:26.906567Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "30038 304\n",
      "(60076, 98) (608, 98)\n"
     ]
    }
   ],
   "source": [
    "train_requests, val_requests = train_test_split(\n",
    "    sorted(list(final_filtered_requests)), test_size=0.01, random_state=42\n",
    ")\n",
    "print(len(train_requests), len(val_requests))\n",
    "\n",
    "train_df = df_slice[df_slice[\"request_id\"].isin(set(train_requests))].copy()\n",
    "val_df = df_slice[df_slice[\"request_id\"].isin(set(val_requests))].copy()\n",
    "train_df = train_df.sort_values(by=[\"request_id\", \"preference\"])\n",
    "train_df = train_df.reset_index()\n",
    "val_df = val_df.sort_values(by=[\"request_id\", \"preference\"])\n",
    "val_df = val_df.reset_index()\n",
    "\n",
    "print(train_df.shape, val_df.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Actually make"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.934954Z",
     "start_time": "2024-05-16T13:59:41.934946Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:13:27.107690Z",
     "iopub.status.busy": "2024-09-04T00:13:27.107525Z",
     "iopub.status.idle": "2024-09-04T00:13:27.110082Z",
     "shell.execute_reply": "2024-09-04T00:13:27.109589Z",
     "shell.execute_reply.started": "2024-09-04T00:13:27.107672Z"
    }
   },
   "outputs": [],
   "source": [
    "# val_df[[\"request_id\", \"metadata\", \"updated_at\", \"user_id\", \"preference\"]].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.935620Z",
     "start_time": "2024-05-16T13:59:41.935613Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:13:27.110863Z",
     "iopub.status.busy": "2024-09-04T00:13:27.110723Z",
     "iopub.status.idle": "2024-09-04T00:13:29.024654Z",
     "shell.execute_reply": "2024-09-04T00:13:29.023924Z",
     "shell.execute_reply.started": "2024-09-04T00:13:27.110849Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████| 60076/60076 [00:01<00:00, 32181.86it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3,114 hours of 60076 clips, 3.75475 nodes, 1877.375 iters\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "total_duration = 0\n",
    "for i, row in tqdm(train_df.iterrows(), total=len(train_df)):\n",
    "    # we need to alternate between preference: neg, pos\n",
    "    # print(i, row)\n",
    "    try:\n",
    "        assert row[\"preference\"] == (i % 2 == 1)\n",
    "    except:\n",
    "        print(i, row)\n",
    "    total_duration += row[\"duration\"]\n",
    "print(\n",
    "    f\"{round(total_duration / 60 / 60):,} hours of {train_df.shape[0]} clips, {train_df.shape[0] / 8 / 2 / 1000} nodes, {train_df.shape[0] / 8 / 2 / 2} iters\"\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.936268Z",
     "start_time": "2024-05-16T13:59:41.936260Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:13:29.025704Z",
     "iopub.status.busy": "2024-09-04T00:13:29.025526Z",
     "iopub.status.idle": "2024-09-04T00:13:38.609994Z",
     "shell.execute_reply": "2024-09-04T00:13:38.609264Z",
     "shell.execute_reply.started": "2024-09-04T00:13:29.025685Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████| 608/608 [00:09<00:00, 63.52it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total 608 clips, 4 different prompts\n",
      "16 hours of False\n",
      "15 hours of True\n",
      "Done\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "make_dataset(val_df, OUT_DATA_DIR, is_val=True, npz_dir=NPZ_DIR)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.936964Z",
     "start_time": "2024-05-16T13:59:41.936957Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:13:38.611036Z",
     "iopub.status.busy": "2024-09-04T00:13:38.610862Z",
     "iopub.status.idle": "2024-09-04T00:29:15.422621Z",
     "shell.execute_reply": "2024-09-04T00:29:15.422027Z",
     "shell.execute_reply.started": "2024-09-04T00:13:38.611018Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 34%|███████████████████████████████████▌                                                                      | 20144/60076 [05:15<10:14, 64.94it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "weird, /app/suno/data/dpo/30b_npz/e53228ec-473a-4b61-acd1-784da4c15dfe.npz, with only v3.5\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████| 60076/60076 [15:36<00:00, 64.13it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total 60076 clips, 479 different prompts\n",
      "1,577 hours of False\n",
      "1,536 hours of True\n",
      "Done\n"
     ]
    }
   ],
   "source": [
    "make_dataset(train_df, OUT_DATA_DIR, is_val=False, npz_dir=NPZ_DIR)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-01-29T19:46:47.549860Z",
     "start_time": "2024-01-29T19:46:47.548015Z"
    }
   },
   "source": [
    "# Validation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.937879Z",
     "start_time": "2024-05-16T13:59:41.937870Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:29:15.423561Z",
     "iopub.status.busy": "2024-09-04T00:29:15.423391Z",
     "iopub.status.idle": "2024-09-04T00:29:15.444268Z",
     "shell.execute_reply": "2024-09-04T00:29:15.443786Z",
     "shell.execute_reply.started": "2024-09-04T00:29:15.423543Z"
    }
   },
   "outputs": [],
   "source": [
    "# verify\n",
    "mm = np.memmap(os.path.join(OUT_DATA_DIR, f\"data_val.bin\"), dtype=np.uint16, mode=\"r\")\n",
    "test_metas = read_jsonl(os.path.join(OUT_DATA_DIR, f\"meta_val.jsonl\"))\n",
    "test_info = read_json(os.path.join(OUT_DATA_DIR, f\"info_val.json\"))\n",
    "mm = mm.reshape(-1, 6016, 13)\n",
    "assert len(mm) == len(test_metas)\n",
    "assert mm[:100, :, 0].min() >= 0\n",
    "assert mm[:100, :, 0].max() <= 4000\n",
    "assert mm[:100, :, 1:].min() >= 0\n",
    "assert mm[:100, :, 1:].max() <= 2048"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.938629Z",
     "start_time": "2024-05-16T13:59:41.938621Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:29:15.445026Z",
     "iopub.status.busy": "2024-09-04T00:29:15.444879Z",
     "iopub.status.idle": "2024-09-04T00:29:15.468486Z",
     "shell.execute_reply": "2024-09-04T00:29:15.468075Z",
     "shell.execute_reply.started": "2024-09-04T00:29:15.445010Z"
    }
   },
   "outputs": [],
   "source": [
    "# # randomly listen to some stuff\n",
    "# from suno_utils.tasks.dac_2c_12cb import preload_models as preload_codec_models\n",
    "# from suno_utils.tasks.dac_2c_12cb import (\n",
    "#     encode as codec_encode,\n",
    "#     decode_stream_to_full_audio as codec_decode,\n",
    "#     EMBEDDING_RATE as CODEC_EMBEDDING_RATE,\n",
    "#     decode as decode\n",
    "# )\n",
    "# os.environ[\"CUDA_VISIBLE_DEVICES\"] = \"0\"\n",
    "# _ = preload_codec_models(\"/app/suno/data/dpo/models/dac_2c_25x12.pt\", device=\"cuda\")\n",
    "# assert len(test_metas) == len(mm)\n",
    "# idx_list = list(range(len(test_metas)))\n",
    "# # random.shuffle(idx_list)\n",
    "# # idx_list = [idx for idx in idx_list if \"text\" in test_metas[idx]]\n",
    "# print(len(mm))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.939205Z",
     "start_time": "2024-05-16T13:59:41.939198Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:29:15.469187Z",
     "iopub.status.busy": "2024-09-04T00:29:15.469051Z",
     "iopub.status.idle": "2024-09-04T00:29:15.501891Z",
     "shell.execute_reply": "2024-09-04T00:29:15.501488Z",
     "shell.execute_reply.started": "2024-09-04T00:29:15.469173Z"
    }
   },
   "outputs": [],
   "source": [
    "# import random\n",
    "# idx = random.choice(test_info[\"perference_0\"][\"idx_list\"])\n",
    "# assert \"original_duration_s\" in test_metas[idx]\n",
    "# # positive index should be shifted by 1\n",
    "# pos_idx = idx + 1\n",
    "# print(\n",
    "#     \"tags:\",\n",
    "#     test_metas[idx].get(\"tags\") == test_metas[pos_idx].get(\"tags\"),\n",
    "#     test_metas[idx].get(\"tags\"),\n",
    "# )\n",
    "# arr = mm[idx, 1:].copy().astype(np.int16)[:, 1:]\n",
    "# pos_arr = mm[pos_idx, 1:].copy().astype(np.int16)[:, 1:]\n",
    "# pad_idx_arr = np.where(arr == COARSE_PAD_TOKEN)[0]\n",
    "# if len(pad_idx_arr) > 0:\n",
    "#     arr = arr[: pad_idx_arr[0], :]\n",
    "# pos_pad_idx_arr = np.where(pos_arr == COARSE_PAD_TOKEN)[0]\n",
    "# if len(pos_pad_idx_arr) > 0:\n",
    "#     pos_arr = pos_arr[: pos_pad_idx_arr[0], :]\n",
    "# a = decode(arr)\n",
    "# print(\"\\n negative example \\n\", test_metas[idx])\n",
    "# a.play(compress=False)\n",
    "# pos_a = decode(pos_arr)\n",
    "# print(\"\\n positive example \\n\", test_metas[pos_idx])\n",
    "# pos_a.play(compress=False)\n",
    "# print(\n",
    "#     \"text:\",\n",
    "#     test_metas[idx].get(\"text\") == test_metas[pos_idx].get(\"text\"),\n",
    "#     test_metas[idx].get(\"text\"),\n",
    "# )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.939977Z",
     "start_time": "2024-05-16T13:59:41.939969Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:29:15.502721Z",
     "iopub.status.busy": "2024-09-04T00:29:15.502588Z",
     "iopub.status.idle": "2024-09-04T00:29:15.537867Z",
     "shell.execute_reply": "2024-09-04T00:29:15.537481Z",
     "shell.execute_reply.started": "2024-09-04T00:29:15.502708Z"
    }
   },
   "outputs": [],
   "source": [
    "# val_df[val_df[\"tags\"] == 'a vibrant blend of experimental jazz fusion, drum-and-bass and swagger fuzzed-out guitars']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.940610Z",
     "start_time": "2024-05-16T13:59:41.940603Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:29:15.539626Z",
     "iopub.status.busy": "2024-09-04T00:29:15.539472Z",
     "iopub.status.idle": "2024-09-04T00:29:15.572553Z",
     "shell.execute_reply": "2024-09-04T00:29:15.572159Z",
     "shell.execute_reply.started": "2024-09-04T00:29:15.539612Z"
    }
   },
   "outputs": [],
   "source": [
    "# from collections import Counter\n",
    "# c = Counter()\n",
    "# for _, row in df_slice.iterrows():\n",
    "#     # print(row[\"metadata\"])\n",
    "#     for k in ast.literal_eval(row[\"metadata\"]).keys():\n",
    "#         c[k] += 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.941167Z",
     "start_time": "2024-05-16T13:59:41.941159Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:29:15.573241Z",
     "iopub.status.busy": "2024-09-04T00:29:15.573101Z",
     "iopub.status.idle": "2024-09-04T00:29:15.608261Z",
     "shell.execute_reply": "2024-09-04T00:29:15.607871Z",
     "shell.execute_reply.started": "2024-09-04T00:29:15.573228Z"
    }
   },
   "outputs": [],
   "source": [
    "# original_npz_path = f\"/app/suno/data/dpo/7b_npz/{test_metas[idx]['id']}.npz\"\n",
    "# original_npz_path = \"/app/suno/data/dpo/7b_npz/729c3011-f672-4ccd-8d82-1cbf2b52ff69.npz\"\n",
    "# original_arr = np.load(original_npz_path)[\"v2_raw\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.941801Z",
     "start_time": "2024-05-16T13:59:41.941793Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:29:15.608882Z",
     "iopub.status.busy": "2024-09-04T00:29:15.608756Z",
     "iopub.status.idle": "2024-09-04T00:29:15.642822Z",
     "shell.execute_reply": "2024-09-04T00:29:15.642381Z",
     "shell.execute_reply.started": "2024-09-04T00:29:15.608869Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "304 0\n"
     ]
    }
   ],
   "source": [
    "def validation_on_metas(input_metas):\n",
    "    total_bad = 0\n",
    "    total_good = 0\n",
    "    for idx in range(len(input_metas)):\n",
    "        if idx % 2 == 0:\n",
    "            pos_idx = idx + 1\n",
    "            if input_metas[idx].get(\"tags\") != input_metas[pos_idx].get(\"tags\"):\n",
    "                # print(test_metas[idx].get(\"text\") == test_metas[pos_idx].get(\"text\"), test_metas[idx].get(\"tags\"), test_metas[pos_idx].get(\"tags\"))\n",
    "                total_bad += 1\n",
    "            else:\n",
    "                total_good += 1\n",
    "    print(total_good, total_bad)\n",
    "    return\n",
    "\n",
    "\n",
    "validation_on_metas(test_metas)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.942520Z",
     "start_time": "2024-05-16T13:59:41.942511Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:29:15.643740Z",
     "iopub.status.busy": "2024-09-04T00:29:15.643603Z",
     "iopub.status.idle": "2024-09-04T00:29:15.684058Z",
     "shell.execute_reply": "2024-09-04T00:29:15.683615Z",
     "shell.execute_reply.started": "2024-09-04T00:29:15.643726Z"
    }
   },
   "outputs": [],
   "source": [
    "train_info = read_json(os.path.join(OUT_DATA_DIR, f\"info_tr.json\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.943072Z",
     "start_time": "2024-05-16T13:59:41.943065Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:29:15.684764Z",
     "iopub.status.busy": "2024-09-04T00:29:15.684629Z",
     "iopub.status.idle": "2024-09-04T00:29:15.717419Z",
     "shell.execute_reply": "2024-09-04T00:29:15.717011Z",
     "shell.execute_reply.started": "2024-09-04T00:29:15.684751Z"
    }
   },
   "outputs": [],
   "source": [
    "n_neg_tr = train_info[\"perference_0\"][\"idx_list\"]\n",
    "n_pos_tr = train_info[\"perference_1\"][\"idx_list\"]\n",
    "assert len(n_pos_tr) == len(n_neg_tr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.944246Z",
     "start_time": "2024-05-16T13:59:41.944237Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:29:15.718109Z",
     "iopub.status.busy": "2024-09-04T00:29:15.717975Z",
     "iopub.status.idle": "2024-09-04T00:29:15.752964Z",
     "shell.execute_reply": "2024-09-04T00:29:15.752538Z",
     "shell.execute_reply.started": "2024-09-04T00:29:15.718095Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "total samples 60076 (60076, 98)\n"
     ]
    }
   ],
   "source": [
    "total_iters = len(n_neg_tr) + len(n_pos_tr)\n",
    "print(\"total samples\", total_iters, train_df.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.945249Z",
     "start_time": "2024-05-16T13:59:41.945241Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:29:15.753638Z",
     "iopub.status.busy": "2024-09-04T00:29:15.753506Z",
     "iopub.status.idle": "2024-09-04T00:29:15.787629Z",
     "shell.execute_reply": "2024-09-04T00:29:15.787202Z",
     "shell.execute_reply.started": "2024-09-04T00:29:15.753625Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 epoch per batch 2, total 938.6875\n"
     ]
    }
   ],
   "source": [
    "print(\"1 epoch per batch 2, total\", total_iters / 8 / 2 / 4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.945972Z",
     "start_time": "2024-05-16T13:59:41.945964Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:29:15.788314Z",
     "iopub.status.busy": "2024-09-04T00:29:15.788178Z",
     "iopub.status.idle": "2024-09-04T00:29:16.045890Z",
     "shell.execute_reply": "2024-09-04T00:29:16.045312Z",
     "shell.execute_reply.started": "2024-09-04T00:29:15.788301Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Submitted batch job 2249\n"
     ]
    }
   ],
   "source": [
    "!cd /home/tony/Work/tony/slurm/30b_dpo && sbatch sbatch_ipo_30b_t1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-09-04T00:31:53.990882Z",
     "iopub.status.busy": "2024-09-04T00:31:53.990237Z",
     "iopub.status.idle": "2024-09-04T00:31:54.004324Z",
     "shell.execute_reply": "2024-09-04T00:31:54.003856Z",
     "shell.execute_reply.started": "2024-09-04T00:31:53.990859Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cache kept!\n"
     ]
    }
   ],
   "source": [
    "import shutil\n",
    "\n",
    "# Basic file copy\n",
    "shutil.copy('/home/tony/Work/tony/Preference/make_dataset_13b_v4_t1.ipynb', os.path.join(OUT_DATA_DIR, \"make_dataset.ipynb\"))\n",
    "print(\"Cache kept!\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# some gymathtics loading prev data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-16T13:59:41.946562Z",
     "start_time": "2024-05-16T13:59:41.946555Z"
    },
    "execution": {
     "iopub.execute_input": "2024-09-04T00:29:16.046890Z",
     "iopub.status.busy": "2024-09-04T00:29:16.046728Z",
     "iopub.status.idle": "2024-09-04T00:29:16.049428Z",
     "shell.execute_reply": "2024-09-04T00:29:16.049036Z",
     "shell.execute_reply.started": "2024-09-04T00:29:16.046875Z"
    }
   },
   "outputs": [],
   "source": [
    "# prev_v3_data = \"/app/suno/data/dpo/7v_v20_full/\"\n",
    "\n",
    "# test_val_metas = read_jsonl(os.path.join(prev_v3_data, f\"meta_val.jsonl\"))\n",
    "# test_tr_metas = read_jsonl(os.path.join(prev_v3_data, f\"meta_tr.jsonl\"))\n",
    "\n",
    "# all_ids = set()\n",
    "# for meta in test_val_metas:\n",
    "#     all_ids.add(meta[\"id\"])\n",
    "# for meta in test_tr_metas:\n",
    "#     all_ids.add(meta[\"id\"])\n",
    "# print(len(all_ids), len(test_val_metas) + len(test_tr_metas))\n",
    "\n",
    "# all_ids = list(all_ids)\n",
    "# with open(\"/home/tony/Data/Preference/7b_v2/7v_v20_full_recut_id.json\", \"w\") as fp:\n",
    "#     json.dump(all_ids, fp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-09-04T00:29:16.050129Z",
     "iopub.status.busy": "2024-09-04T00:29:16.049987Z",
     "iopub.status.idle": "2024-09-04T00:29:16.125865Z",
     "shell.execute_reply": "2024-09-04T00:29:16.125450Z",
     "shell.execute_reply.started": "2024-09-04T00:29:16.050115Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>level_0</th>\n",
       "      <th>index</th>\n",
       "      <th>id_x</th>\n",
       "      <th>created_at</th>\n",
       "      <th>updated_at</th>\n",
       "      <th>time_used</th>\n",
       "      <th>metadata</th>\n",
       "      <th>user_id</th>\n",
       "      <th>status</th>\n",
       "      <th>request_id</th>\n",
       "      <th>is_generated</th>\n",
       "      <th>s3_id</th>\n",
       "      <th>upvote_count</th>\n",
       "      <th>batch_index</th>\n",
       "      <th>model_name</th>\n",
       "      <th>prompt_text</th>\n",
       "      <th>is_deleted</th>\n",
       "      <th>image_s3_id</th>\n",
       "      <th>is_public</th>\n",
       "      <th>dislike_count</th>\n",
       "      <th>flag_count</th>\n",
       "      <th>play_count</th>\n",
       "      <th>skip_count</th>\n",
       "      <th>title</th>\n",
       "      <th>is_pro_user</th>\n",
       "      <th>is_in_playlist</th>\n",
       "      <th>continued_parent</th>\n",
       "      <th>duration</th>\n",
       "      <th>source</th>\n",
       "      <th>user_n_clips</th>\n",
       "      <th>upvoted</th>\n",
       "      <th>downvoted</th>\n",
       "      <th>has_continued</th>\n",
       "      <th>part_of_concat</th>\n",
       "      <th>has_action</th>\n",
       "      <th>flagged</th>\n",
       "      <th>deleted</th>\n",
       "      <th>pos_preference</th>\n",
       "      <th>neg_preference</th>\n",
       "      <th>diff_preference</th>\n",
       "      <th>preference</th>\n",
       "      <th>reaction_play_count</th>\n",
       "      <th>reaction_pro_play_count</th>\n",
       "      <th>total_start_s</th>\n",
       "      <th>total_clip_s</th>\n",
       "      <th>concat_play_counts</th>\n",
       "      <th>concat_in_playlist</th>\n",
       "      <th>concat_likes</th>\n",
       "      <th>concat_dislikes</th>\n",
       "      <th>str_id</th>\n",
       "      <th>id_y</th>\n",
       "      <th>total_play_count</th>\n",
       "      <th>auto_play_count</th>\n",
       "      <th>total_play_time</th>\n",
       "      <th>total_play_count_hour</th>\n",
       "      <th>auto_play_count_hour</th>\n",
       "      <th>total_play_time_hour</th>\n",
       "      <th>p_date</th>\n",
       "      <th>p_hour</th>\n",
       "      <th>norm_play_frac</th>\n",
       "      <th>is_30b</th>\n",
       "      <th>tags</th>\n",
       "      <th>type</th>\n",
       "      <th>is_bot</th>\n",
       "      <th>prompt</th>\n",
       "      <th>stream</th>\n",
       "      <th>priority</th>\n",
       "      <th>experiment</th>\n",
       "      <th>refund_credits</th>\n",
       "      <th>param_experiment</th>\n",
       "      <th>make_instrumental</th>\n",
       "      <th>gpt_description_prompt</th>\n",
       "      <th>error_type</th>\n",
       "      <th>error_message</th>\n",
       "      <th>infill</th>\n",
       "      <th>history</th>\n",
       "      <th>has_vocal</th>\n",
       "      <th>continue_at</th>\n",
       "      <th>concat_history</th>\n",
       "      <th>audio_prompt_id</th>\n",
       "      <th>continued_from_prompt</th>\n",
       "      <th>is_audio_upload_tos_accepted</th>\n",
       "      <th>include_history_s</th>\n",
       "      <th>stem_type</th>\n",
       "      <th>stem_from_id</th>\n",
       "      <th>edited_id</th>\n",
       "      <th>pos_diff_preference</th>\n",
       "      <th>id</th>\n",
       "      <th>original_duration_s</th>\n",
       "      <th>has_continue_and_start_continue_at</th>\n",
       "      <th>good_continue_at</th>\n",
       "      <th>duration_rel_diff</th>\n",
       "      <th>play_rel_diff</th>\n",
       "      <th>cleaned_prompt_text</th>\n",
       "      <th>cer</th>\n",
       "      <th>options</th>\n",
       "      <th>gpt_prompt</th>\n",
       "      <th>cer_diff_preference</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1814</td>\n",
       "      <td>57244224</td>\n",
       "      <td>362ee68e-8653-4355-87ce-d9a495be9eb5</td>\n",
       "      <td>2024-07-29 11:36:26.601422+00:00</td>\n",
       "      <td>2024-07-29 11:36:26.601433+00:00</td>\n",
       "      <td>134.445082</td>\n",
       "      <td>{'tags': 'heavy trap bass', 'type': 'gen', 'is...</td>\n",
       "      <td>15056808</td>\n",
       "      <td>complete</td>\n",
       "      <td>01f4a505-a171-4af0-aa28-c72d7f6c3093</td>\n",
       "      <td>True</td>\n",
       "      <td>362ee68e-8653-4355-87ce-d9a495be9eb5</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>chirp-v3p5-engine-t-1</td>\n",
       "      <td>[Verse]\\nАнатолий за рулём, фургон везёт на Со...</td>\n",
       "      <td>True</td>\n",
       "      <td>image_362ee68e-8653-4355-87ce-d9a495be9eb5</td>\n",
       "      <td>False</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>Анатолий Трап</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>158.64</td>\n",
       "      <td>web</td>\n",
       "      <td>136</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>-1</td>\n",
       "      <td>False</td>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>362ee68e-8653-4355-87ce-d9a495be9eb5</td>\n",
       "      <td>7.677805e+10</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>44.430621</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2024-08-08</td>\n",
       "      <td>6</td>\n",
       "      <td>0.280072</td>\n",
       "      <td>True</td>\n",
       "      <td>heavy trap bass</td>\n",
       "      <td>gen</td>\n",
       "      <td>False</td>\n",
       "      <td>[Verse]\\nАнатолий за рулём, фургон везёт на Со...</td>\n",
       "      <td>True</td>\n",
       "      <td>0</td>\n",
       "      <td>[chirp-v3p5-engine-t-1, chirp-v3p5-engine-t-1]</td>\n",
       "      <td>False</td>\n",
       "      <td>text_cfg_10_vs_text_cfg_13</td>\n",
       "      <td>False</td>\n",
       "      <td>trap как Анатолий везёт молочку в Сосновку, по...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-2.0</td>\n",
       "      <td>362ee68e-8653-4355-87ce-d9a495be9eb5</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>True</td>\n",
       "      <td>-23.20</td>\n",
       "      <td>-2.0</td>\n",
       "      <td>анатолий за рулём фургон везёт на сосновку тач...</td>\n",
       "      <td>0.3233</td>\n",
       "      <td>NaN</td>\n",
       "      <td>None</td>\n",
       "      <td>0.0729</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1815</td>\n",
       "      <td>57244223</td>\n",
       "      <td>aa1a45cf-d3ab-4f1b-997d-21ddc482f302</td>\n",
       "      <td>2024-07-29 11:36:26.601247+00:00</td>\n",
       "      <td>2024-07-29 11:36:26.601273+00:00</td>\n",
       "      <td>179.109955</td>\n",
       "      <td>{'tags': 'heavy trap bass', 'type': 'gen', 'is...</td>\n",
       "      <td>15056808</td>\n",
       "      <td>complete</td>\n",
       "      <td>01f4a505-a171-4af0-aa28-c72d7f6c3093</td>\n",
       "      <td>True</td>\n",
       "      <td>aa1a45cf-d3ab-4f1b-997d-21ddc482f302</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>chirp-v3p5-engine-t-1</td>\n",
       "      <td>[Verse]\\nАнатолий за рулём, фургон везёт на Со...</td>\n",
       "      <td>False</td>\n",
       "      <td>image_aa1a45cf-d3ab-4f1b-997d-21ddc482f302</td>\n",
       "      <td>False</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>0</td>\n",
       "      <td>Анатолий Трап</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>216.00</td>\n",
       "      <td>web</td>\n",
       "      <td>136</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>0</td>\n",
       "      <td>True</td>\n",
       "      <td>11.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>aa1a45cf-d3ab-4f1b-997d-21ddc482f302</td>\n",
       "      <td>7.671991e+10</td>\n",
       "      <td>11.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>377.244802</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2024-08-08</td>\n",
       "      <td>6</td>\n",
       "      <td>1.746504</td>\n",
       "      <td>True</td>\n",
       "      <td>heavy trap bass</td>\n",
       "      <td>gen</td>\n",
       "      <td>False</td>\n",
       "      <td>[Verse]\\nАнатолий за рулём, фургон везёт на Со...</td>\n",
       "      <td>True</td>\n",
       "      <td>0</td>\n",
       "      <td>[chirp-v3p5-engine-t-1, chirp-v3p5-engine-t-1]</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>False</td>\n",
       "      <td>trap как Анатолий везёт молочку в Сосновку, по...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.0</td>\n",
       "      <td>aa1a45cf-d3ab-4f1b-997d-21ddc482f302</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>True</td>\n",
       "      <td>57.36</td>\n",
       "      <td>10.0</td>\n",
       "      <td>анатолий за рулём фургон везёт на сосновку тач...</td>\n",
       "      <td>0.0988</td>\n",
       "      <td>NaN</td>\n",
       "      <td>None</td>\n",
       "      <td>-0.2245</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1860</td>\n",
       "      <td>90705518</td>\n",
       "      <td>40a96040-8e3d-4080-88fd-f93cf85ad910</td>\n",
       "      <td>2024-08-06 04:59:21.091579+00:00</td>\n",
       "      <td>2024-08-06 04:59:21.091589+00:00</td>\n",
       "      <td>32.095065</td>\n",
       "      <td>{'tags': 'male voice, rap, bass, alt rap, clea...</td>\n",
       "      <td>28677469</td>\n",
       "      <td>complete</td>\n",
       "      <td>02045c00-20c8-417e-b1f9-b45febb68f59</td>\n",
       "      <td>True</td>\n",
       "      <td>40a96040-8e3d-4080-88fd-f93cf85ad910</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>chirp-v3p5-engine-t-1</td>\n",
       "      <td>(Jesse James Cold Killa!) \\n\\n(Verse)\\nI don't...</td>\n",
       "      <td>False</td>\n",
       "      <td>image_40a96040-8e3d-4080-88fd-f93cf85ad910</td>\n",
       "      <td>False</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>Jesse James 4</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>159de641-5b5f-48d4-8953-e510e5b288e7</td>\n",
       "      <td>40.96</td>\n",
       "      <td>web</td>\n",
       "      <td>56</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>0</td>\n",
       "      <td>False</td>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>40a96040-8e3d-4080-88fd-f93cf85ad910</td>\n",
       "      <td>7.679768e+10</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.992000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2024-08-08</td>\n",
       "      <td>6</td>\n",
       "      <td>1.000781</td>\n",
       "      <td>True</td>\n",
       "      <td>male voice, rap, bass, alt rap, clear vocals, ...</td>\n",
       "      <td>gen</td>\n",
       "      <td>False</td>\n",
       "      <td>(Jesse James Cold Killa!) \\n\\n(Verse)\\nI don't...</td>\n",
       "      <td>True</td>\n",
       "      <td>0</td>\n",
       "      <td>[chirp-v3p5-engine-t-1, chirp-v3p5-engine-t-1]</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>False</td>\n",
       "      <td>None</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>False</td>\n",
       "      <td>[{'id': '159de641-5b5f-48d4-8953-e510e5b288e7'...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>76.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>159de641-5b5f-48d4-8953-e510e5b288e7</td>\n",
       "      <td>(Jesse James Cold Killa!) \\n\\n(Verse)\\nI don't...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>40a96040-8e3d-4080-88fd-f93cf85ad910</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>True</td>\n",
       "      <td>-199.04</td>\n",
       "      <td>-4.0</td>\n",
       "      <td>i don't make cents i make dimes here's to ten ...</td>\n",
       "      <td>1.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>None</td>\n",
       "      <td>1.0000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1861</td>\n",
       "      <td>90705519</td>\n",
       "      <td>a8a664c9-1f9b-47a3-a364-ec9572e83bb5</td>\n",
       "      <td>2024-08-06 04:59:21.091659+00:00</td>\n",
       "      <td>2024-08-06 04:59:21.091665+00:00</td>\n",
       "      <td>92.074868</td>\n",
       "      <td>{'tags': 'male voice, rap, bass, alt rap, clea...</td>\n",
       "      <td>28677469</td>\n",
       "      <td>complete</td>\n",
       "      <td>02045c00-20c8-417e-b1f9-b45febb68f59</td>\n",
       "      <td>True</td>\n",
       "      <td>a8a664c9-1f9b-47a3-a364-ec9572e83bb5</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>chirp-v3p5-engine-t-1</td>\n",
       "      <td>(Jesse James Cold Killa!) \\n\\n(Verse)\\nI don't...</td>\n",
       "      <td>False</td>\n",
       "      <td>image_a8a664c9-1f9b-47a3-a364-ec9572e83bb5</td>\n",
       "      <td>False</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>Jesse James 4</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>159de641-5b5f-48d4-8953-e510e5b288e7</td>\n",
       "      <td>109.64</td>\n",
       "      <td>web</td>\n",
       "      <td>56</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>2.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>76.0</td>\n",
       "      <td>185.639979</td>\n",
       "      <td>6.0</td>\n",
       "      <td>True</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>a8a664c9-1f9b-47a3-a364-ec9572e83bb5</td>\n",
       "      <td>7.671302e+10</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>113.830850</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2024-08-08</td>\n",
       "      <td>6</td>\n",
       "      <td>1.038224</td>\n",
       "      <td>True</td>\n",
       "      <td>male voice, rap, bass, alt rap, clear vocals, ...</td>\n",
       "      <td>gen</td>\n",
       "      <td>False</td>\n",
       "      <td>(Jesse James Cold Killa!) \\n\\n(Verse)\\nI don't...</td>\n",
       "      <td>True</td>\n",
       "      <td>0</td>\n",
       "      <td>[chirp-v3p5-engine-t-1, chirp-v3p5-engine-t-1]</td>\n",
       "      <td>False</td>\n",
       "      <td>tag_neg_cfg_20_vs_all_cfg_13</td>\n",
       "      <td>False</td>\n",
       "      <td>None</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>False</td>\n",
       "      <td>[{'id': '159de641-5b5f-48d4-8953-e510e5b288e7'...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>76.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>159de641-5b5f-48d4-8953-e510e5b288e7</td>\n",
       "      <td>(Jesse James Cold Killa!) \\n\\n(Verse)\\nI don't...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.0</td>\n",
       "      <td>a8a664c9-1f9b-47a3-a364-ec9572e83bb5</td>\n",
       "      <td>185.64</td>\n",
       "      <td>NaN</td>\n",
       "      <td>True</td>\n",
       "      <td>68.68</td>\n",
       "      <td>1.0</td>\n",
       "      <td>i don't make cents i make dimes here's to ten ...</td>\n",
       "      <td>0.1140</td>\n",
       "      <td>NaN</td>\n",
       "      <td>None</td>\n",
       "      <td>-0.8860</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3434</td>\n",
       "      <td>91633029</td>\n",
       "      <td>8c395109-92b2-414b-927c-a8d1efa29fa5</td>\n",
       "      <td>2024-08-06 10:36:32.651456+00:00</td>\n",
       "      <td>2024-08-06 10:36:32.651464+00:00</td>\n",
       "      <td>163.362399</td>\n",
       "      <td>{'tags': 'German rap, summer hit, melodic ', '...</td>\n",
       "      <td>13308966</td>\n",
       "      <td>complete</td>\n",
       "      <td>03af909f-86d2-4216-8a9f-90e775ab08f9</td>\n",
       "      <td>True</td>\n",
       "      <td>8c395109-92b2-414b-927c-a8d1efa29fa5</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>chirp-v3p5-engine-t-1</td>\n",
       "      <td>[Intro] \\nWir sind die Bela, \\nkeiner macht un...</td>\n",
       "      <td>True</td>\n",
       "      <td>image_8c395109-92b2-414b-927c-a8d1efa29fa5</td>\n",
       "      <td>False</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>Bela</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>194.40</td>\n",
       "      <td>web</td>\n",
       "      <td>42</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>-1</td>\n",
       "      <td>False</td>\n",
       "      <td>2.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8c395109-92b2-414b-927c-a8d1efa29fa5</td>\n",
       "      <td>7.668859e+10</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>27.189567</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2024-08-08</td>\n",
       "      <td>6</td>\n",
       "      <td>0.139864</td>\n",
       "      <td>True</td>\n",
       "      <td>German rap, summer hit, melodic</td>\n",
       "      <td>gen</td>\n",
       "      <td>False</td>\n",
       "      <td>[Intro] \\nWir sind die Bela, \\nkeiner macht un...</td>\n",
       "      <td>True</td>\n",
       "      <td>0</td>\n",
       "      <td>[chirp-v3p5-engine-t-1, chirp-v3p5-engine-t-1]</td>\n",
       "      <td>False</td>\n",
       "      <td>temp_semantic_85_vs_all_cfg_13</td>\n",
       "      <td>False</td>\n",
       "      <td>None</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-2.0</td>\n",
       "      <td>8c395109-92b2-414b-927c-a8d1efa29fa5</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>True</td>\n",
       "      <td>-45.60</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>wir sind die bela keiner macht uns was vor ja ...</td>\n",
       "      <td>0.1075</td>\n",
       "      <td>NaN</td>\n",
       "      <td>None</td>\n",
       "      <td>-0.1035</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>3435</td>\n",
       "      <td>91633028</td>\n",
       "      <td>1caf3475-aeed-4b2d-818f-cfc5b186d828</td>\n",
       "      <td>2024-08-06 10:36:32.651332+00:00</td>\n",
       "      <td>2024-08-06 10:36:32.651353+00:00</td>\n",
       "      <td>175.819449</td>\n",
       "      <td>{'tags': 'German rap, summer hit, melodic ', '...</td>\n",
       "      <td>13308966</td>\n",
       "      <td>complete</td>\n",
       "      <td>03af909f-86d2-4216-8a9f-90e775ab08f9</td>\n",
       "      <td>True</td>\n",
       "      <td>1caf3475-aeed-4b2d-818f-cfc5b186d828</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>chirp-v3p5-engine-t-1</td>\n",
       "      <td>[Intro] \\nWir sind die Bela, \\nkeiner macht un...</td>\n",
       "      <td>False</td>\n",
       "      <td>image_1caf3475-aeed-4b2d-818f-cfc5b186d828</td>\n",
       "      <td>False</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>Bela</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>NaN</td>\n",
       "      <td>206.96</td>\n",
       "      <td>web</td>\n",
       "      <td>42</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>8.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1caf3475-aeed-4b2d-818f-cfc5b186d828</td>\n",
       "      <td>7.681670e+10</td>\n",
       "      <td>8.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>1295.056332</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2024-08-08</td>\n",
       "      <td>6</td>\n",
       "      <td>6.257520</td>\n",
       "      <td>True</td>\n",
       "      <td>German rap, summer hit, melodic</td>\n",
       "      <td>gen</td>\n",
       "      <td>False</td>\n",
       "      <td>[Intro] \\nWir sind die Bela, \\nkeiner macht un...</td>\n",
       "      <td>True</td>\n",
       "      <td>0</td>\n",
       "      <td>[chirp-v3p5-engine-t-1, chirp-v3p5-engine-t-1]</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>False</td>\n",
       "      <td>None</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1caf3475-aeed-4b2d-818f-cfc5b186d828</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>True</td>\n",
       "      <td>12.56</td>\n",
       "      <td>6.0</td>\n",
       "      <td>wir sind die bela keiner macht uns was vor ja ...</td>\n",
       "      <td>0.2038</td>\n",
       "      <td>NaN</td>\n",
       "      <td>None</td>\n",
       "      <td>0.0963</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>3922</td>\n",
       "      <td>85148279</td>\n",
       "      <td>9f558382-44d7-4517-91fc-1cbcbc51474a</td>\n",
       "      <td>2024-08-04 20:46:53.497534+00:00</td>\n",
       "      <td>2024-08-04 20:46:53.497552+00:00</td>\n",
       "      <td>73.449077</td>\n",
       "      <td>{'tags': 'Progressive houser, electropop, elec...</td>\n",
       "      <td>13056609</td>\n",
       "      <td>complete</td>\n",
       "      <td>0425a081-252a-4660-8ddb-0119b7c28226</td>\n",
       "      <td>True</td>\n",
       "      <td>9f558382-44d7-4517-91fc-1cbcbc51474a</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>chirp-v3p5-engine-t-1</td>\n",
       "      <td>Feel the beat, open your mind\\nLet the rhythm ...</td>\n",
       "      <td>False</td>\n",
       "      <td>image_9f558382-44d7-4517-91fc-1cbcbc51474a</td>\n",
       "      <td>False</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>Feel the beat</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>85.08</td>\n",
       "      <td>web</td>\n",
       "      <td>104</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>0</td>\n",
       "      <td>False</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9f558382-44d7-4517-91fc-1cbcbc51474a</td>\n",
       "      <td>7.682861e+10</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>25.502054</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2024-08-08</td>\n",
       "      <td>6</td>\n",
       "      <td>0.299742</td>\n",
       "      <td>True</td>\n",
       "      <td>Progressive houser, electropop, electro, synth...</td>\n",
       "      <td>gen</td>\n",
       "      <td>False</td>\n",
       "      <td>Feel the beat, open your mind\\nLet the rhythm ...</td>\n",
       "      <td>True</td>\n",
       "      <td>10</td>\n",
       "      <td>[chirp-v3p5-engine-t-1, chirp-v3p5-engine-t-1]</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>False</td>\n",
       "      <td>None</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>9f558382-44d7-4517-91fc-1cbcbc51474a</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>True</td>\n",
       "      <td>1.32</td>\n",
       "      <td>-6.0</td>\n",
       "      <td>feel the beat open your mind let the rhythm ta...</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>None</td>\n",
       "      <td>0.0000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>3923</td>\n",
       "      <td>85148280</td>\n",
       "      <td>4a7a82ea-c357-4f98-bb78-ab5d6661cb9a</td>\n",
       "      <td>2024-08-04 20:46:53.497675+00:00</td>\n",
       "      <td>2024-08-04 20:46:53.497686+00:00</td>\n",
       "      <td>48.300547</td>\n",
       "      <td>{'tags': 'Progressive houser, electropop, elec...</td>\n",
       "      <td>13056609</td>\n",
       "      <td>complete</td>\n",
       "      <td>0425a081-252a-4660-8ddb-0119b7c28226</td>\n",
       "      <td>True</td>\n",
       "      <td>4a7a82ea-c357-4f98-bb78-ab5d6661cb9a</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>chirp-v3p5-engine-t-1</td>\n",
       "      <td>Feel the beat, open your mind\\nLet the rhythm ...</td>\n",
       "      <td>False</td>\n",
       "      <td>image_4a7a82ea-c357-4f98-bb78-ab5d6661cb9a</td>\n",
       "      <td>False</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>Feel the beat</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>55.68</td>\n",
       "      <td>web</td>\n",
       "      <td>104</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>3.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4a7a82ea-c357-4f98-bb78-ab5d6661cb9a</td>\n",
       "      <td>7.670080e+10</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>164.896852</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2024-08-08</td>\n",
       "      <td>6</td>\n",
       "      <td>2.961510</td>\n",
       "      <td>True</td>\n",
       "      <td>Progressive houser, electropop, electro, synth...</td>\n",
       "      <td>gen</td>\n",
       "      <td>False</td>\n",
       "      <td>Feel the beat, open your mind\\nLet the rhythm ...</td>\n",
       "      <td>True</td>\n",
       "      <td>10</td>\n",
       "      <td>[chirp-v3p5-engine-t-1, chirp-v3p5-engine-t-1]</td>\n",
       "      <td>False</td>\n",
       "      <td>temp_semantic_95_vs_all_cfg_13</td>\n",
       "      <td>False</td>\n",
       "      <td>None</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4a7a82ea-c357-4f98-bb78-ab5d6661cb9a</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>True</td>\n",
       "      <td>-29.40</td>\n",
       "      <td>1.0</td>\n",
       "      <td>feel the beat open your mind let the rhythm ta...</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>None</td>\n",
       "      <td>0.0000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>5018</td>\n",
       "      <td>80781893</td>\n",
       "      <td>d57a9fd2-9adc-469b-8a60-884f34c78c6f</td>\n",
       "      <td>2024-08-03 19:59:08.546702+00:00</td>\n",
       "      <td>2024-08-03 19:59:08.546708+00:00</td>\n",
       "      <td>79.269295</td>\n",
       "      <td>{'tags': 'volkmuziek, Carnaval, kroegenmuziek'...</td>\n",
       "      <td>35634955</td>\n",
       "      <td>complete</td>\n",
       "      <td>053f69d2-2ed4-4f5b-b63d-2046f3660910</td>\n",
       "      <td>True</td>\n",
       "      <td>d57a9fd2-9adc-469b-8a60-884f34c78c6f</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>chirp-v3p5-engine-t-1</td>\n",
       "      <td>[Verse]\\nDjelano drinkt veel whisky\\nElke dag ...</td>\n",
       "      <td>True</td>\n",
       "      <td>image_d57a9fd2-9adc-469b-8a60-884f34c78c6f</td>\n",
       "      <td>False</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>Djelano Drinkt Veel Whisky</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>93.96</td>\n",
       "      <td>web</td>\n",
       "      <td>60</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>-1</td>\n",
       "      <td>False</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>d57a9fd2-9adc-469b-8a60-884f34c78c6f</td>\n",
       "      <td>7.676709e+10</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>28.539697</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2024-08-08</td>\n",
       "      <td>6</td>\n",
       "      <td>0.303743</td>\n",
       "      <td>True</td>\n",
       "      <td>volkmuziek, Carnaval, kroegenmuziek</td>\n",
       "      <td>gen</td>\n",
       "      <td>False</td>\n",
       "      <td>[Verse]\\nDjelano drinkt veel whisky\\nElke dag ...</td>\n",
       "      <td>True</td>\n",
       "      <td>10</td>\n",
       "      <td>[chirp-v3p5-engine-t-1, chirp-v3p5-engine-t-1]</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>False</td>\n",
       "      <td>None</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-2.0</td>\n",
       "      <td>d57a9fd2-9adc-469b-8a60-884f34c78c6f</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>True</td>\n",
       "      <td>-146.04</td>\n",
       "      <td>-6.0</td>\n",
       "      <td>djelano drinkt veel whisky elke dag een beetje...</td>\n",
       "      <td>0.1654</td>\n",
       "      <td>NaN</td>\n",
       "      <td>None</td>\n",
       "      <td>-0.2176</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>5019</td>\n",
       "      <td>80781892</td>\n",
       "      <td>de32a0ea-5042-4d38-85b5-a01fe1eece3f</td>\n",
       "      <td>2024-08-03 19:59:08.546603+00:00</td>\n",
       "      <td>2024-08-03 19:59:08.546619+00:00</td>\n",
       "      <td>90.659715</td>\n",
       "      <td>{'tags': 'volkmuziek, Carnaval, kroegenmuziek'...</td>\n",
       "      <td>35634955</td>\n",
       "      <td>complete</td>\n",
       "      <td>053f69d2-2ed4-4f5b-b63d-2046f3660910</td>\n",
       "      <td>True</td>\n",
       "      <td>de32a0ea-5042-4d38-85b5-a01fe1eece3f</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>chirp-v3p5-engine-t-1</td>\n",
       "      <td>[Verse]\\nDjelano drinkt veel whisky\\nElke dag ...</td>\n",
       "      <td>False</td>\n",
       "      <td>image_de32a0ea-5042-4d38-85b5-a01fe1eece3f</td>\n",
       "      <td>False</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>Djelano Drinkt Veel Whisky</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>100.00</td>\n",
       "      <td>web</td>\n",
       "      <td>60</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>3.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>de32a0ea-5042-4d38-85b5-a01fe1eece3f</td>\n",
       "      <td>7.670337e+10</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>230.238821</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2024-08-08</td>\n",
       "      <td>6</td>\n",
       "      <td>2.302388</td>\n",
       "      <td>True</td>\n",
       "      <td>volkmuziek, Carnaval, kroegenmuziek</td>\n",
       "      <td>gen</td>\n",
       "      <td>False</td>\n",
       "      <td>[Verse]\\nDjelano drinkt veel whisky\\nElke dag ...</td>\n",
       "      <td>True</td>\n",
       "      <td>10</td>\n",
       "      <td>[chirp-v3p5-engine-t-1, chirp-v3p5-engine-t-1]</td>\n",
       "      <td>False</td>\n",
       "      <td>temp_semantic_95_vs_all_cfg_13</td>\n",
       "      <td>False</td>\n",
       "      <td>None</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.0</td>\n",
       "      <td>de32a0ea-5042-4d38-85b5-a01fe1eece3f</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>True</td>\n",
       "      <td>6.04</td>\n",
       "      <td>2.0</td>\n",
       "      <td>djelano drinkt veel whisky elke dag een beetje...</td>\n",
       "      <td>0.1606</td>\n",
       "      <td>NaN</td>\n",
       "      <td>None</td>\n",
       "      <td>-0.0048</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   level_0     index                                  id_x                        created_at                        updated_at   time_used                                           metadata   user_id    status                            request_id  is_generated                                 s3_id  upvote_count  batch_index             model_name                                        prompt_text  is_deleted                                 image_s3_id  is_public  dislike_count  flag_count  play_count  skip_count                       title  is_pro_user  is_in_playlist                      continued_parent  duration source  user_n_clips  upvoted  downvoted  has_continued  part_of_concat  has_action  flagged  deleted  pos_preference  neg_preference  diff_preference  preference  reaction_play_count  reaction_pro_play_count  total_start_s  total_clip_s  concat_play_counts concat_in_playlist  concat_likes  concat_dislikes                                str_id          id_y  \\\n",
       "0     1814  57244224  362ee68e-8653-4355-87ce-d9a495be9eb5  2024-07-29 11:36:26.601422+00:00  2024-07-29 11:36:26.601433+00:00  134.445082  {'tags': 'heavy trap bass', 'type': 'gen', 'is...  15056808  complete  01f4a505-a171-4af0-aa28-c72d7f6c3093          True  362ee68e-8653-4355-87ce-d9a495be9eb5             0            1  chirp-v3p5-engine-t-1  [Verse]\\nАнатолий за рулём, фургон везёт на Со...        True  image_362ee68e-8653-4355-87ce-d9a495be9eb5      False              0           0           1           0               Анатолий Трап        False           False                                   NaN    158.64    web           136    False      False          False           False       False    False     True           False            True               -1       False                  1.0                      NaN            NaN           NaN                 NaN                NaN           NaN              NaN  362ee68e-8653-4355-87ce-d9a495be9eb5  7.677805e+10   \n",
       "1     1815  57244223  aa1a45cf-d3ab-4f1b-997d-21ddc482f302  2024-07-29 11:36:26.601247+00:00  2024-07-29 11:36:26.601273+00:00  179.109955  {'tags': 'heavy trap bass', 'type': 'gen', 'is...  15056808  complete  01f4a505-a171-4af0-aa28-c72d7f6c3093          True  aa1a45cf-d3ab-4f1b-997d-21ddc482f302             0            0  chirp-v3p5-engine-t-1  [Verse]\\nАнатолий за рулём, фургон везёт на Со...       False  image_aa1a45cf-d3ab-4f1b-997d-21ddc482f302      False              0           0          10           0               Анатолий Трап        False           False                                   NaN    216.00    web           136    False      False          False           False       False    False    False           False           False                0        True                 11.0                      NaN            NaN           NaN                 NaN                NaN           NaN              NaN  aa1a45cf-d3ab-4f1b-997d-21ddc482f302  7.671991e+10   \n",
       "2     1860  90705518  40a96040-8e3d-4080-88fd-f93cf85ad910  2024-08-06 04:59:21.091579+00:00  2024-08-06 04:59:21.091589+00:00   32.095065  {'tags': 'male voice, rap, bass, alt rap, clea...  28677469  complete  02045c00-20c8-417e-b1f9-b45febb68f59          True  40a96040-8e3d-4080-88fd-f93cf85ad910             0            0  chirp-v3p5-engine-t-1  (Jesse James Cold Killa!) \\n\\n(Verse)\\nI don't...       False  image_40a96040-8e3d-4080-88fd-f93cf85ad910      False              0           0           1           0               Jesse James 4        False           False  159de641-5b5f-48d4-8953-e510e5b288e7     40.96    web            56    False      False          False           False       False    False    False           False           False                0       False                  1.0                      NaN            NaN           NaN                 NaN                NaN           NaN              NaN  40a96040-8e3d-4080-88fd-f93cf85ad910  7.679768e+10   \n",
       "3     1861  90705519  a8a664c9-1f9b-47a3-a364-ec9572e83bb5  2024-08-06 04:59:21.091659+00:00  2024-08-06 04:59:21.091665+00:00   92.074868  {'tags': 'male voice, rap, bass, alt rap, clea...  28677469  complete  02045c00-20c8-417e-b1f9-b45febb68f59          True  a8a664c9-1f9b-47a3-a364-ec9572e83bb5             1            1  chirp-v3p5-engine-t-1  (Jesse James Cold Killa!) \\n\\n(Verse)\\nI don't...       False  image_a8a664c9-1f9b-47a3-a364-ec9572e83bb5      False              0           0           2           0               Jesse James 4        False            True  159de641-5b5f-48d4-8953-e510e5b288e7    109.64    web            56     True      False          False            True       False    False    False            True           False                1        True                  2.0                      NaN           76.0    185.639979                 6.0               True           1.0              0.0  a8a664c9-1f9b-47a3-a364-ec9572e83bb5  7.671302e+10   \n",
       "4     3434  91633029  8c395109-92b2-414b-927c-a8d1efa29fa5  2024-08-06 10:36:32.651456+00:00  2024-08-06 10:36:32.651464+00:00  163.362399  {'tags': 'German rap, summer hit, melodic ', '...  13308966  complete  03af909f-86d2-4216-8a9f-90e775ab08f9          True  8c395109-92b2-414b-927c-a8d1efa29fa5             0            1  chirp-v3p5-engine-t-1  [Intro] \\nWir sind die Bela, \\nkeiner macht un...        True  image_8c395109-92b2-414b-927c-a8d1efa29fa5      False              0           0           2           0                       Bela         False           False                                   NaN    194.40    web            42    False      False          False           False       False    False     True           False            True               -1       False                  2.0                      NaN            NaN           NaN                 NaN                NaN           NaN              NaN  8c395109-92b2-414b-927c-a8d1efa29fa5  7.668859e+10   \n",
       "5     3435  91633028  1caf3475-aeed-4b2d-818f-cfc5b186d828  2024-08-06 10:36:32.651332+00:00  2024-08-06 10:36:32.651353+00:00  175.819449  {'tags': 'German rap, summer hit, melodic ', '...  13308966  complete  03af909f-86d2-4216-8a9f-90e775ab08f9          True  1caf3475-aeed-4b2d-818f-cfc5b186d828             0            0  chirp-v3p5-engine-t-1  [Intro] \\nWir sind die Bela, \\nkeiner macht un...       False  image_1caf3475-aeed-4b2d-818f-cfc5b186d828      False              0           0           8           0                       Bela         False            True                                   NaN    206.96    web            42    False      False          False           False       False    False    False            True           False                1        True                  8.0                      NaN            NaN           NaN                 NaN                NaN           NaN              NaN  1caf3475-aeed-4b2d-818f-cfc5b186d828  7.681670e+10   \n",
       "6     3922  85148279  9f558382-44d7-4517-91fc-1cbcbc51474a  2024-08-04 20:46:53.497534+00:00  2024-08-04 20:46:53.497552+00:00   73.449077  {'tags': 'Progressive houser, electropop, elec...  13056609  complete  0425a081-252a-4660-8ddb-0119b7c28226          True  9f558382-44d7-4517-91fc-1cbcbc51474a             0            0  chirp-v3p5-engine-t-1  Feel the beat, open your mind\\nLet the rhythm ...       False  image_9f558382-44d7-4517-91fc-1cbcbc51474a      False              0           0           2           0               Feel the beat         True           False                                   NaN     85.08    web           104    False      False          False           False       False    False    False           False           False                0       False                  2.0                      2.0            NaN           NaN                 NaN                NaN           NaN              NaN  9f558382-44d7-4517-91fc-1cbcbc51474a  7.682861e+10   \n",
       "7     3923  85148280  4a7a82ea-c357-4f98-bb78-ab5d6661cb9a  2024-08-04 20:46:53.497675+00:00  2024-08-04 20:46:53.497686+00:00   48.300547  {'tags': 'Progressive houser, electropop, elec...  13056609  complete  0425a081-252a-4660-8ddb-0119b7c28226          True  4a7a82ea-c357-4f98-bb78-ab5d6661cb9a             1            1  chirp-v3p5-engine-t-1  Feel the beat, open your mind\\nLet the rhythm ...       False  image_4a7a82ea-c357-4f98-bb78-ab5d6661cb9a      False              0           0           3           0               Feel the beat         True           False                                   NaN     55.68    web           104     True      False           True           False       False    False    False            True           False                1        True                  3.0                      3.0            NaN           NaN                 NaN                NaN           NaN              NaN  4a7a82ea-c357-4f98-bb78-ab5d6661cb9a  7.670080e+10   \n",
       "8     5018  80781893  d57a9fd2-9adc-469b-8a60-884f34c78c6f  2024-08-03 19:59:08.546702+00:00  2024-08-03 19:59:08.546708+00:00   79.269295  {'tags': 'volkmuziek, Carnaval, kroegenmuziek'...  35634955  complete  053f69d2-2ed4-4f5b-b63d-2046f3660910          True  d57a9fd2-9adc-469b-8a60-884f34c78c6f             0            1  chirp-v3p5-engine-t-1  [Verse]\\nDjelano drinkt veel whisky\\nElke dag ...        True  image_d57a9fd2-9adc-469b-8a60-884f34c78c6f      False              0           0           1           0  Djelano Drinkt Veel Whisky         True           False                                   NaN     93.96    web            60    False      False          False           False       False    False     True           False            True               -1       False                  1.0                      1.0            NaN           NaN                 NaN                NaN           NaN              NaN  d57a9fd2-9adc-469b-8a60-884f34c78c6f  7.676709e+10   \n",
       "9     5019  80781892  de32a0ea-5042-4d38-85b5-a01fe1eece3f  2024-08-03 19:59:08.546603+00:00  2024-08-03 19:59:08.546619+00:00   90.659715  {'tags': 'volkmuziek, Carnaval, kroegenmuziek'...  35634955  complete  053f69d2-2ed4-4f5b-b63d-2046f3660910          True  de32a0ea-5042-4d38-85b5-a01fe1eece3f             1            0  chirp-v3p5-engine-t-1  [Verse]\\nDjelano drinkt veel whisky\\nElke dag ...       False  image_de32a0ea-5042-4d38-85b5-a01fe1eece3f      False              0           0           3           0  Djelano Drinkt Veel Whisky         True           False                                   NaN    100.00    web            60     True      False          False           False       False    False    False            True           False                1        True                  3.0                      3.0            NaN           NaN                 NaN                NaN           NaN              NaN  de32a0ea-5042-4d38-85b5-a01fe1eece3f  7.670337e+10   \n",
       "\n",
       "   total_play_count  auto_play_count  total_play_time  total_play_count_hour  auto_play_count_hour  total_play_time_hour      p_date  p_hour  norm_play_frac  is_30b                                               tags type is_bot                                             prompt  stream  priority                                      experiment  refund_credits                param_experiment  make_instrumental                             gpt_description_prompt error_type error_message infill                                            history has_vocal  continue_at concat_history                       audio_prompt_id                              continued_from_prompt is_audio_upload_tos_accepted  include_history_s stem_type stem_from_id edited_id  pos_diff_preference                                    id  original_duration_s  has_continue_and_start_continue_at  good_continue_at  duration_rel_diff  play_rel_diff                                cleaned_prompt_text     cer  options  \\\n",
       "0               1.0              0.0        44.430621                    0.0                   0.0                   0.0  2024-08-08       6        0.280072    True                                    heavy trap bass  gen  False  [Verse]\\nАнатолий за рулём, фургон везёт на Со...    True         0  [chirp-v3p5-engine-t-1, chirp-v3p5-engine-t-1]           False      text_cfg_10_vs_text_cfg_13              False  trap как Анатолий везёт молочку в Сосновку, по...        NaN           NaN    NaN                                                NaN       NaN          NaN            NaN                                   NaN                                                NaN                          NaN                NaN       NaN          NaN       NaN                 -2.0  362ee68e-8653-4355-87ce-d9a495be9eb5                  NaN                                 NaN              True             -23.20           -2.0  анатолий за рулём фургон везёт на сосновку тач...  0.3233      NaN   \n",
       "1              11.0              0.0       377.244802                    0.0                   0.0                   0.0  2024-08-08       6        1.746504    True                                    heavy trap bass  gen  False  [Verse]\\nАнатолий за рулём, фургон везёт на Со...    True         0  [chirp-v3p5-engine-t-1, chirp-v3p5-engine-t-1]           False                             NaN              False  trap как Анатолий везёт молочку в Сосновку, по...        NaN           NaN    NaN                                                NaN       NaN          NaN            NaN                                   NaN                                                NaN                          NaN                NaN       NaN          NaN       NaN                  1.0  aa1a45cf-d3ab-4f1b-997d-21ddc482f302                  NaN                                 NaN              True              57.36           10.0  анатолий за рулём фургон везёт на сосновку тач...  0.0988      NaN   \n",
       "2               1.0              0.0        40.992000                    0.0                   0.0                   0.0  2024-08-08       6        1.000781    True  male voice, rap, bass, alt rap, clear vocals, ...  gen  False  (Jesse James Cold Killa!) \\n\\n(Verse)\\nI don't...    True         0  [chirp-v3p5-engine-t-1, chirp-v3p5-engine-t-1]           False                             NaN              False                                               None        NaN           NaN  False  [{'id': '159de641-5b5f-48d4-8953-e510e5b288e7'...       NaN         76.0            NaN  159de641-5b5f-48d4-8953-e510e5b288e7  (Jesse James Cold Killa!) \\n\\n(Verse)\\nI don't...                          NaN                NaN       NaN          NaN       NaN                 -1.0  40a96040-8e3d-4080-88fd-f93cf85ad910                  NaN                                 NaN              True            -199.04           -4.0  i don't make cents i make dimes here's to ten ...  1.0000      NaN   \n",
       "3               2.0              1.0       113.830850                    0.0                   0.0                   0.0  2024-08-08       6        1.038224    True  male voice, rap, bass, alt rap, clear vocals, ...  gen  False  (Jesse James Cold Killa!) \\n\\n(Verse)\\nI don't...    True         0  [chirp-v3p5-engine-t-1, chirp-v3p5-engine-t-1]           False    tag_neg_cfg_20_vs_all_cfg_13              False                                               None        NaN           NaN  False  [{'id': '159de641-5b5f-48d4-8953-e510e5b288e7'...       NaN         76.0            NaN  159de641-5b5f-48d4-8953-e510e5b288e7  (Jesse James Cold Killa!) \\n\\n(Verse)\\nI don't...                          NaN                NaN       NaN          NaN       NaN                  1.0  a8a664c9-1f9b-47a3-a364-ec9572e83bb5               185.64                                 NaN              True              68.68            1.0  i don't make cents i make dimes here's to ten ...  0.1140      NaN   \n",
       "4               2.0              0.0        27.189567                    0.0                   0.0                   0.0  2024-08-08       6        0.139864    True                   German rap, summer hit, melodic   gen  False  [Intro] \\nWir sind die Bela, \\nkeiner macht un...    True         0  [chirp-v3p5-engine-t-1, chirp-v3p5-engine-t-1]           False  temp_semantic_85_vs_all_cfg_13              False                                               None        NaN           NaN    NaN                                                NaN       NaN          NaN            NaN                                   NaN                                                NaN                          NaN                NaN       NaN          NaN       NaN                 -2.0  8c395109-92b2-414b-927c-a8d1efa29fa5                  NaN                                 NaN              True             -45.60           -1.0  wir sind die bela keiner macht uns was vor ja ...  0.1075      NaN   \n",
       "5               8.0              5.0      1295.056332                    0.0                   0.0                   0.0  2024-08-08       6        6.257520    True                   German rap, summer hit, melodic   gen  False  [Intro] \\nWir sind die Bela, \\nkeiner macht un...    True         0  [chirp-v3p5-engine-t-1, chirp-v3p5-engine-t-1]           False                             NaN              False                                               None        NaN           NaN    NaN                                                NaN       NaN          NaN            NaN                                   NaN                                                NaN                          NaN                NaN       NaN          NaN       NaN                  2.0  1caf3475-aeed-4b2d-818f-cfc5b186d828                  NaN                                 NaN              True              12.56            6.0  wir sind die bela keiner macht uns was vor ja ...  0.2038      NaN   \n",
       "6               2.0              1.0        25.502054                    0.0                   0.0                   0.0  2024-08-08       6        0.299742    True  Progressive houser, electropop, electro, synth...  gen  False  Feel the beat, open your mind\\nLet the rhythm ...    True        10  [chirp-v3p5-engine-t-1, chirp-v3p5-engine-t-1]           False                             NaN              False                                               None        NaN           NaN    NaN                                                NaN       NaN          NaN            NaN                                   NaN                                                NaN                          NaN                NaN       NaN          NaN       NaN                 -1.0  9f558382-44d7-4517-91fc-1cbcbc51474a                  NaN                                 NaN              True               1.32           -6.0  feel the beat open your mind let the rhythm ta...  0.0000      NaN   \n",
       "7               3.0              0.0       164.896852                    0.0                   0.0                   0.0  2024-08-08       6        2.961510    True  Progressive houser, electropop, electro, synth...  gen  False  Feel the beat, open your mind\\nLet the rhythm ...    True        10  [chirp-v3p5-engine-t-1, chirp-v3p5-engine-t-1]           False  temp_semantic_95_vs_all_cfg_13              False                                               None        NaN           NaN    NaN                                                NaN       NaN          NaN            NaN                                   NaN                                                NaN                          NaN                NaN       NaN          NaN       NaN                  1.0  4a7a82ea-c357-4f98-bb78-ab5d6661cb9a                  NaN                                 NaN              True             -29.40            1.0  feel the beat open your mind let the rhythm ta...  0.0000      NaN   \n",
       "8               1.0              0.0        28.539697                    0.0                   0.0                   0.0  2024-08-08       6        0.303743    True                volkmuziek, Carnaval, kroegenmuziek  gen  False  [Verse]\\nDjelano drinkt veel whisky\\nElke dag ...    True        10  [chirp-v3p5-engine-t-1, chirp-v3p5-engine-t-1]           False                             NaN              False                                               None        NaN           NaN    NaN                                                NaN       NaN          NaN            NaN                                   NaN                                                NaN                          NaN                NaN       NaN          NaN       NaN                 -2.0  d57a9fd2-9adc-469b-8a60-884f34c78c6f                  NaN                                 NaN              True            -146.04           -6.0  djelano drinkt veel whisky elke dag een beetje...  0.1654      NaN   \n",
       "9               3.0              0.0       230.238821                    0.0                   0.0                   0.0  2024-08-08       6        2.302388    True                volkmuziek, Carnaval, kroegenmuziek  gen  False  [Verse]\\nDjelano drinkt veel whisky\\nElke dag ...    True        10  [chirp-v3p5-engine-t-1, chirp-v3p5-engine-t-1]           False  temp_semantic_95_vs_all_cfg_13              False                                               None        NaN           NaN    NaN                                                NaN       NaN          NaN            NaN                                   NaN                                                NaN                          NaN                NaN       NaN          NaN       NaN                  2.0  de32a0ea-5042-4d38-85b5-a01fe1eece3f                  NaN                                 NaN              True               6.04            2.0  djelano drinkt veel whisky elke dag een beetje...  0.1606      NaN   \n",
       "\n",
       "  gpt_prompt  cer_diff_preference  \n",
       "0       None               0.0729  \n",
       "1       None              -0.2245  \n",
       "2       None               1.0000  \n",
       "3       None              -0.8860  \n",
       "4       None              -0.1035  \n",
       "5       None               0.0963  \n",
       "6       None               0.0000  \n",
       "7       None               0.0000  \n",
       "8       None              -0.2176  \n",
       "9       None              -0.0048  "
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val_df.head(n=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.14"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
