{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "55ebfcf2",
   "metadata": {},
   "source": [
    "Generate the video of the sphere"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 513,
   "id": "cd10f6fb",
   "metadata": {},
   "outputs": [],
   "source": [
    "import cv2\n",
    "from pathlib import Path\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "import pandas as pd\n",
    "from matplotlib.animation import FFMpegWriter"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1fdf7f97",
   "metadata": {},
   "source": [
    "Import video"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 534,
   "id": "e0f4c843",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Opened: True, FPS: 60.0, Total Frames: 224.0\n"
     ]
    }
   ],
   "source": [
    "video_number = \"2\"\n",
    "# Define the relative path to the video file\n",
    "notebook_dir = Path().resolve()\n",
    "project_root = notebook_dir.parent.parent\n",
    "video_path = (\n",
    "    project_root\n",
    "    / \"data\"\n",
    "    / f\"recording_{video_number}\"\n",
    "    / f\"Recording_{video_number}.mp4\"\n",
    ")\n",
    "video_path = str(video_path)\n",
    "\n",
    "# Load the video\n",
    "cap = cv2.VideoCapture(video_path)\n",
    "\n",
    "# Check\n",
    "print(\n",
    "    f\"Opened: {cap.isOpened()}, FPS: {cap.get(cv2.CAP_PROP_FPS)}, Total Frames: {cap.get(cv2.CAP_PROP_FRAME_COUNT)}\"\n",
    ")\n",
    "FPS = round(cap.get(cv2.CAP_PROP_FPS))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "937c602f",
   "metadata": {},
   "source": [
    "Import data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 535,
   "id": "34a407ab",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define the path to the CSV file\n",
    "input_data_path = (\n",
    "    project_root\n",
    "    / \"notebook\"\n",
    "    / \"spin\"\n",
    "    / \"intermediate_data\"\n",
    "    / f\"Rotation_data_processed_{video_number}.csv\"\n",
    ")\n",
    "\n",
    "# Load the CSV file into a DataFrame\n",
    "df = pd.read_csv(input_data_path)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4b81d45e",
   "metadata": {},
   "source": [
    "Functions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 524,
   "id": "36ebb8c1",
   "metadata": {},
   "outputs": [],
   "source": [
    "def rotation_matrix(axis, theta):\n",
    "    axis = axis / np.linalg.norm(axis)\n",
    "    a = np.cos(theta / 2)\n",
    "    b, c, d = -axis * np.sin(theta / 2)\n",
    "    return np.array(\n",
    "        [\n",
    "            [a * a + b * b - c * c - d * d, 2 * (b * c - a * d), 2 * (b * d + a * c)],\n",
    "            [2 * (b * c + a * d), a * a + c * c - b * b - d * d, 2 * (c * d - a * b)],\n",
    "            [2 * (b * d - a * c), 2 * (c * d + a * b), a * a + d * d - b * b - c * c],\n",
    "        ]\n",
    "    )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 517,
   "id": "e0a01c6d",
   "metadata": {},
   "outputs": [],
   "source": [
    "def align_north_pole_to_vector(target_vector):\n",
    "    target_vector = target_vector / np.linalg.norm(target_vector)\n",
    "    north_pole = np.array([0, 0, 1])\n",
    "\n",
    "    if np.allclose(target_vector, north_pole):\n",
    "        return np.eye(3)\n",
    "\n",
    "    if np.allclose(target_vector, -north_pole):\n",
    "        # 180 degree rotation around any perpendicular axis\n",
    "        return rotation_matrix(np.array([1, 0, 0]), np.pi)\n",
    "\n",
    "    axis = np.cross(north_pole, target_vector)\n",
    "    angle = np.arccos(np.dot(north_pole, target_vector))\n",
    "    return rotation_matrix(axis, angle)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0d9c7a8a",
   "metadata": {},
   "source": [
    "Generate video"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 536,
   "id": "9826c75f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 600x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Set your output path\n",
    "video_output_path = (\n",
    "    project_root / \"data\" / f\"recording_{video_number}\" / \"Rotating_sphere.mp4\"\n",
    ")\n",
    "\n",
    "# Parameters\n",
    "n_frames = len(df)\n",
    "angles = np.linspace(0, 2 * np.pi, n_frames)\n",
    "\n",
    "# video dimensions\n",
    "# final video size is 1920x1080 -> make it 300x300 instead of 900x900\n",
    "dpi = 150  # for real video 75 - for visualization 150\n",
    "figure_size = 6  # for real video 4 - for visualization 6\n",
    "\n",
    "# scaling factor for better visualization\n",
    "scaling_factor = 1.5\n",
    "# Sphere geometry\n",
    "u, v = np.mgrid[0 : 2 * np.pi : 100j, 0 : np.pi : 50j]\n",
    "x0 = np.cos(u) * np.sin(v) * scaling_factor\n",
    "y0 = np.sin(u) * np.sin(v) * scaling_factor\n",
    "z0 = np.cos(v) * scaling_factor\n",
    "\n",
    "# Create checkerboard pattern\n",
    "colors = np.empty(u.shape, dtype=object)\n",
    "\n",
    "# Number of bands of the ball (latitude and longitude)\n",
    "num_lat_bands = 1\n",
    "num_lon_bands = 4\n",
    "\n",
    "# # Colors\n",
    "# band_colors = [(69/255, 24/255, 91/255, 1.0),  # violet\n",
    "#                (57/255, 148/255, 160/255, 1.0)]  # light-blue\n",
    "band_colors = [(0 / 255, 0 / 255, 0 / 255, 1.0), (255 / 255, 255 / 255, 255 / 255, 1.0)]\n",
    "equator_color = (1.0, 0.0, 0.0, 1.0)  # red\n",
    "highlight_color = (1.0, 0.0, 0.0, 1.0)  # red\n",
    "\n",
    "\n",
    "# Thickness values\n",
    "lat_step = np.pi / 50\n",
    "equator_thickness = 2 * lat_step  # about two latitude steps\n",
    "pole_thickness = lat_step  # about two latitude steps\n",
    "\n",
    "# Equator bounds\n",
    "equator_lower = (np.pi / 2) - equator_thickness / 2\n",
    "equator_upper = (np.pi / 2) + equator_thickness / 2\n",
    "\n",
    "# North and South pole bounds\n",
    "north_pole_upper = pole_thickness\n",
    "south_pole_lower = np.pi - pole_thickness\n",
    "\n",
    "# Assign colors\n",
    "for i in range(u.shape[0]):\n",
    "    for j in range(u.shape[1]):\n",
    "        v_val = v[i, j]\n",
    "        if (\n",
    "            equator_lower <= v_val <= equator_upper\n",
    "            or v_val <= north_pole_upper\n",
    "            or v_val >= south_pole_lower\n",
    "        ):\n",
    "            colors[i, j] = highlight_color\n",
    "        else:\n",
    "            lat_index = int(v_val // (np.pi / num_lat_bands))\n",
    "            lon_index = int(u[i, j] // (2 * np.pi / num_lon_bands))\n",
    "            colors[i, j] = band_colors[(lat_index + lon_index) % 2]\n",
    "\n",
    "# Initialize plot\n",
    "fig = plt.figure(figsize=(figure_size, figure_size))\n",
    "fig.patch.set_facecolor(\n",
    "    (255 / 255, 219 / 255, 133 / 255)\n",
    ")  # Set background color to light brown\n",
    "ax = fig.add_subplot(111, projection=\"3d\")\n",
    "ax.set_facecolor(\n",
    "    (255 / 255, 219 / 255, 133 / 255)\n",
    ")  # Set background color to light brown\n",
    "metadata = dict(title=\"Rotating Sphere with Axis DF\")\n",
    "writer = FFMpegWriter(fps=FPS, metadata=metadata)  # Set the desired FPS\n",
    "\n",
    "first_valid_index = df[\"x_axis\"].first_valid_index()\n",
    "# print(f\"First valid index where 'x_axis' is not NaN: {first_valid_index}\")\n",
    "\n",
    "last_valid_index = df[\"x_axis\"].last_valid_index()\n",
    "# print(f\"Last valid index where 'x_axis' is not NaN: {last_valid_index}\")\n",
    "\n",
    "# compute the average angle to assign it whene angle is NaN\n",
    "mean_angle = df[\"angle\"].mean()\n",
    "\n",
    "# Initialize variables\n",
    "R_total = np.eye(3)\n",
    "dtheta = 0\n",
    "angular_velocity = np.nan\n",
    "\n",
    "# Create and save video\n",
    "with writer.saving(fig, video_output_path, dpi=dpi):\n",
    "    for i, row in df.iterrows():\n",
    "        ax.cla()\n",
    "\n",
    "        # CASE: before the first valid data for the axis\n",
    "        if np.isnan(row[\"x_axis\"]) and i <= first_valid_index:\n",
    "            # Align sphere to the axis\n",
    "            point = np.array(\n",
    "                [\n",
    "                    df.loc[first_valid_index][\"x_axis\"],\n",
    "                    df.loc[first_valid_index][\"y_axis\"],\n",
    "                    df.loc[first_valid_index][\"z_axis\"],\n",
    "                ]\n",
    "            )\n",
    "            angular_velocity = df.loc[first_valid_index][\"angle\"] * FPS\n",
    "\n",
    "            R_align = align_north_pole_to_vector(point)\n",
    "            # Apply to sphere coordinates once\n",
    "            x = R_align[0, 0] * x0 + R_align[0, 1] * y0 + R_align[0, 2] * z0\n",
    "            y = R_align[1, 0] * x0 + R_align[1, 1] * y0 + R_align[1, 2] * z0\n",
    "            z = R_align[2, 0] * x0 + R_align[2, 1] * y0 + R_align[2, 2] * z0\n",
    "\n",
    "            # Draw an arrow to indicate the angular velocity\n",
    "            origin = -point * 1.6\n",
    "            vector = (\n",
    "                -point * abs(angular_velocity) * 0.05\n",
    "            )  # Adjust the scaling factor as needed\n",
    "            # ax.quiver(*origin, *vector, color='black', linewidth=2)\n",
    "\n",
    "            # Draw a thick line representing the vector\n",
    "            ax.plot(\n",
    "                [origin[0], vector[0] + origin[0]],\n",
    "                [origin[1], vector[1] + origin[1]],\n",
    "                [origin[2], vector[2] + origin[2]],\n",
    "                color=\"red\",\n",
    "                linewidth=4,\n",
    "                zorder=10,\n",
    "            )  # zorder might help\n",
    "            # Add a scatter point (like an arrowhead)\n",
    "            ax.scatter(\n",
    "                [vector[0] + origin[0]],\n",
    "                [vector[1] + origin[1]],\n",
    "                [vector[2] + origin[2]],\n",
    "                color=\"red\",\n",
    "                s=60,\n",
    "                marker=\"o\",\n",
    "                zorder=10,\n",
    "            )\n",
    "\n",
    "            # Draw the sphere\n",
    "            ax.plot_surface(\n",
    "                x, y, z, facecolors=colors, edgecolor=\"gray\", alpha=1, linewidth=0.2\n",
    "            )\n",
    "\n",
    "            ax.set_xlim([-2, 2])\n",
    "            ax.set_ylim([-2, 2])\n",
    "            ax.set_zlim([-2, 2])\n",
    "            ax.view_init(elev=-90, azim=-90)\n",
    "            ax.axis(\"off\")\n",
    "\n",
    "            # Draw the text\n",
    "            ax.text2D(\n",
    "                0.0,\n",
    "                0.09,\n",
    "                \"N/D rad/s\",\n",
    "                ha=\"center\",\n",
    "                va=\"center\",\n",
    "                fontsize=30,\n",
    "                color=\"black\",\n",
    "                bbox=dict(\n",
    "                    facecolor=\"none\",\n",
    "                    edgecolor=\"black\",\n",
    "                    boxstyle=\"round,pad=0.3\",\n",
    "                    linewidth=2,\n",
    "                ),\n",
    "            )\n",
    "\n",
    "            writer.grab_frame()\n",
    "            # break\n",
    "            continue\n",
    "\n",
    "        # CASE: after the last valid data for the axis\n",
    "        if np.isnan(row[\"x_axis\"]) and i >= last_valid_index:\n",
    "            # Align sphere to the axis\n",
    "            point = np.array(\n",
    "                [\n",
    "                    df.loc[last_valid_index][\"x_axis\"],\n",
    "                    df.loc[last_valid_index][\"y_axis\"],\n",
    "                    df.loc[last_valid_index][\"z_axis\"],\n",
    "                ]\n",
    "            )\n",
    "            angular_velocity = df.loc[last_valid_index][\"angle\"] * FPS\n",
    "            R_align = align_north_pole_to_vector(point)\n",
    "            # Apply to sphere coordinates once\n",
    "            x = R_align[0, 0] * x0 + R_align[0, 1] * y0 + R_align[0, 2] * z0\n",
    "            y = R_align[1, 0] * x0 + R_align[1, 1] * y0 + R_align[1, 2] * z0\n",
    "            z = R_align[2, 0] * x0 + R_align[2, 1] * y0 + R_align[2, 2] * z0\n",
    "\n",
    "            # Draw the sphere\n",
    "            ax.plot_surface(\n",
    "                x, y, z, facecolors=colors, edgecolor=\"gray\", alpha=1, linewidth=0.2\n",
    "            )\n",
    "\n",
    "            ax.set_xlim([-2, 2])\n",
    "            ax.set_ylim([-2, 2])\n",
    "            ax.set_zlim([-2, 2])\n",
    "            ax.view_init(elev=-90, azim=-90)\n",
    "            ax.axis(\"off\")\n",
    "\n",
    "            # Draw the text\n",
    "            ax.text2D(\n",
    "                0.0,\n",
    "                0.09,\n",
    "                \"N/D rad/s\",\n",
    "                ha=\"center\",\n",
    "                va=\"center\",\n",
    "                fontsize=30,\n",
    "                color=\"black\",\n",
    "                bbox=dict(\n",
    "                    facecolor=\"none\",\n",
    "                    edgecolor=\"black\",\n",
    "                    boxstyle=\"round,pad=0.3\",\n",
    "                    linewidth=2,\n",
    "                ),\n",
    "            )\n",
    "\n",
    "            # Draw an arrow to indicate the angular velocity\n",
    "            origin = -point * 1.6\n",
    "            vector = (\n",
    "                -point * abs(angular_velocity) * 0.05\n",
    "            )  # Adjust the scaling factor as needed\n",
    "            # ax.quiver(*origin, *vector, color='black', linewidth=2)\n",
    "\n",
    "            # Draw a thick line representing the vector\n",
    "            ax.plot(\n",
    "                [origin[0], vector[0] + origin[0]],\n",
    "                [origin[1], vector[1] + origin[1]],\n",
    "                [origin[2], vector[2] + origin[2]],\n",
    "                color=\"red\",\n",
    "                linewidth=4,\n",
    "                zorder=10,\n",
    "            )  # zorder might help\n",
    "            # Add a scatter point (like an arrowhead)\n",
    "            ax.scatter(\n",
    "                [vector[0] + origin[0]],\n",
    "                [vector[1] + origin[1]],\n",
    "                [vector[2] + origin[2]],\n",
    "                color=\"red\",\n",
    "                s=60,\n",
    "                marker=\"o\",\n",
    "                zorder=10,\n",
    "            )\n",
    "\n",
    "            writer.grab_frame()\n",
    "            continue\n",
    "\n",
    "        # Get axis\n",
    "        axis = row[[\"x_axis\", \"y_axis\", \"z_axis\"]].values\n",
    "\n",
    "        if np.linalg.norm(axis) < 1e-6:\n",
    "            continue\n",
    "\n",
    "        # set new pole direction\n",
    "        point = np.array([row[\"x_axis\"], row[\"y_axis\"], row[\"z_axis\"]])\n",
    "        R_align = align_north_pole_to_vector(point)\n",
    "\n",
    "        # compute the new position o the sphere (rotation matrix)\n",
    "        if np.isnan(row[\"angle\"]):\n",
    "            # If angle is NaN, use the previous angle\n",
    "            dtheta -= mean_angle\n",
    "        else:\n",
    "            dtheta -= row[\"angle\"]\n",
    "        R_spin = rotation_matrix(np.array([0, 0, 1]), dtheta)\n",
    "        R_total = R_align @ R_spin\n",
    "\n",
    "        # Apply to sphere coordinates once\n",
    "        x = R_total[0, 0] * x0 + R_total[0, 1] * y0 + R_total[0, 2] * z0\n",
    "        y = R_total[1, 0] * x0 + R_total[1, 1] * y0 + R_total[1, 2] * z0\n",
    "        z = R_total[2, 0] * x0 + R_total[2, 1] * y0 + R_total[2, 2] * z0\n",
    "\n",
    "        # Draw the sphere\n",
    "        ax.plot_surface(\n",
    "            x, y, z, facecolors=colors, edgecolor=\"gray\", alpha=1, linewidth=0.01\n",
    "        )\n",
    "\n",
    "        ax.set_xlim([-2, 2])\n",
    "        ax.set_ylim([-2, 2])\n",
    "        ax.set_zlim([-2, 2])\n",
    "\n",
    "        ax.view_init(elev=-90, azim=-90)\n",
    "        ax.axis(\"off\")\n",
    "\n",
    "        # Calculate angular velocity and display it\n",
    "        angular_velocity = row[\"angle\"] * FPS\n",
    "\n",
    "        # Display text\n",
    "        if not np.isnan(angular_velocity):\n",
    "            if angular_velocity > 0:\n",
    "                ax.text2D(\n",
    "                    0.0,\n",
    "                    0.09,\n",
    "                    f\"{angular_velocity:.2f}rad/s ↑\",\n",
    "                    ha=\"center\",\n",
    "                    va=\"center\",\n",
    "                    fontsize=30,\n",
    "                    color=\"black\",\n",
    "                    bbox=dict(\n",
    "                        facecolor=\"none\",\n",
    "                        edgecolor=\"black\",\n",
    "                        boxstyle=\"round,pad=0.3\",\n",
    "                        linewidth=2,\n",
    "                    ),\n",
    "                )\n",
    "            else:\n",
    "                ax.text2D(\n",
    "                    0.0,\n",
    "                    0.09,\n",
    "                    f\"{angular_velocity:.2f}rad/s ↓\",\n",
    "                    ha=\"center\",\n",
    "                    va=\"center\",\n",
    "                    fontsize=30,\n",
    "                    color=\"black\",\n",
    "                    bbox=dict(\n",
    "                        facecolor=\"none\",\n",
    "                        edgecolor=\"black\",\n",
    "                        boxstyle=\"round,pad=0.3\",\n",
    "                        linewidth=2,\n",
    "                    ),\n",
    "                )\n",
    "\n",
    "        # Draw an arrow to indicate the angular velocity\n",
    "        origin = -point * 1.6\n",
    "        vector = (\n",
    "            -point * abs(angular_velocity) * 0.05\n",
    "        )  # Adjust the scaling factor as needed\n",
    "        # ax.quiver(*origin, *vector, color='black', linewidth=2)\n",
    "\n",
    "        # Draw a thick line representing the vector\n",
    "        ax.plot(\n",
    "            [origin[0], vector[0] + origin[0]],\n",
    "            [origin[1], vector[1] + origin[1]],\n",
    "            [origin[2], vector[2] + origin[2]],\n",
    "            color=\"red\",\n",
    "            linewidth=4,\n",
    "            zorder=10,\n",
    "        )\n",
    "        # Add a scatter point (like an arrowhead)\n",
    "        ax.scatter(\n",
    "            [vector[0] + origin[0]],\n",
    "            [vector[1] + origin[1]],\n",
    "            [vector[2] + origin[2]],\n",
    "            color=\"red\",\n",
    "            s=60,\n",
    "            marker=\"o\",\n",
    "            zorder=10,\n",
    "        )\n",
    "\n",
    "        writer.grab_frame()\n",
    "    cap.release()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "55149c7c",
   "metadata": {},
   "source": [
    "Import video to cut"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 540,
   "id": "866e4d34",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Opened: True, FPS: 60.0, Total Frames: 224.0\n"
     ]
    }
   ],
   "source": [
    "video_path = project_root / \"data\" / f\"recording_{video_number}\" / \"Rotating_sphere.mp4\"\n",
    "video_path = str(video_path)\n",
    "\n",
    "# Load the video\n",
    "cap = cv2.VideoCapture(video_path)\n",
    "\n",
    "# Check\n",
    "print(\n",
    "    f\"Opened: {cap.isOpened()}, FPS: {cap.get(cv2.CAP_PROP_FPS)}, Total Frames: {cap.get(cv2.CAP_PROP_FRAME_COUNT)}\"\n",
    ")\n",
    "FPS = round(cap.get(cv2.CAP_PROP_FPS))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2b0d8c90",
   "metadata": {},
   "source": [
    "Cut each frames"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 541,
   "id": "d97d0734",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fine del video.\n",
      "Video salvato in: C:\\Users\\miche\\OneDrive\\Documenti\\GitHub\\bowling-analysis\\data\\recording_2\\Rotating_sphere_crop.mp4\n"
     ]
    }
   ],
   "source": [
    "# Leggi dimensioni originali\n",
    "ret, frame = cap.read()\n",
    "if not ret:\n",
    "    raise RuntimeError(\"Non è stato possibile leggere il primo frame.\")\n",
    "\n",
    "h, w, _ = frame.shape\n",
    "\n",
    "# Definisci margini da tagliare\n",
    "crop_top = 0\n",
    "crop_bottom = 200\n",
    "crop_left = 100\n",
    "crop_right = 100\n",
    "\n",
    "# Nuove dimensioni\n",
    "new_h = h - crop_top - crop_bottom\n",
    "new_w = w - crop_left - crop_right\n",
    "\n",
    "# Prepara writer per salvare il nuovo video\n",
    "output_path = (\n",
    "    project_root / \"data\" / f\"recording_{video_number}\" / \"Rotating_sphere_crop.mp4\"\n",
    ")\n",
    "output_path = str(output_path)\n",
    "fourcc = cv2.VideoWriter_fourcc(*\"mp4v\")\n",
    "out = cv2.VideoWriter(output_path, fourcc, FPS, (new_w, new_h))\n",
    "\n",
    "# Riposiziona il video all'inizio\n",
    "cap.set(cv2.CAP_PROP_POS_FRAMES, 0)\n",
    "\n",
    "# Leggi e taglia tutti i frame\n",
    "while True:\n",
    "    ret, frame = cap.read()\n",
    "    if not ret:\n",
    "        print(\"Fine del video.\")\n",
    "        break\n",
    "\n",
    "    # Taglio\n",
    "    cropped = frame[crop_top : h - crop_bottom, crop_left : w - crop_right]\n",
    "\n",
    "    # Scrivi il frame tagliato\n",
    "    out.write(cropped)\n",
    "\n",
    "# Rilascio risorse\n",
    "cap.release()\n",
    "out.release()\n",
    "print(f\"Video salvato in: {output_path}\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "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.11.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
