{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from helpers import *"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Investigate jagged occupation plots:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "initial_power = 410 * si.uW \n",
    "\n",
    "trap: PancakeTrap = PancakeTrap(\n",
    "    power=0,  # Set pancake laser power to 0, no 2D trap\n",
    "    grad_z= 0 * si.G / si.cm,\n",
    "    grad_r=0,\n",
    "    power_tweezer=initial_power,\n",
    "    waist_tweezer=1.838 * si.um,\n",
    "    a=184.4*(4 * np.pi * const.epsilon_0 * const.value(\"Bohr radius\")**3)/(2 * const.epsilon_0 * const.c),\n",
    "\n",
    "    wvl = 1064 * si.nm,\n",
    ")\n",
    "\n",
    "zr = float(trap.subs(trap.get_tweezer_rayleigh()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.36384664e+14 6.22152653e+09 1.41239502e+06 8.17889438e+02\n",
      " 1.10420754e+00 5.54145893e-03] s\n",
      "-1.1415563187753798e-28\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 23344 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "trap[trap.power_tweezer] = initial_power#0.952* initial_power\n",
    "plot_solutions(trap,999,-0.5*zr,5.9*zr,n_pot_steps=8000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.22562205e+01 1.06301781e-02] s\n",
      "-1.7626752046072707e-29\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 30348 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "trap[trap.power_tweezer] = 0.952* initial_power\n",
    "plot_solutions(trap,200,-0.5*zr,1.9*zr,n_pot_steps=4000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 150/150 [11:51<00:00,  4.75s/it]\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 32012 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "trap[trap.power_tweezer] = initial_power\n",
    "plot_occupation(trap,50,-0.15*zr,1.2*zr,power_fac_down=0.93,power_fac_up=1,n_spill_steps=150,n_pot_steps=int(1e5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 150/150 [02:10<00:00,  1.15it/s]\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 32124 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "trap[trap.power_tweezer] = initial_power\n",
    "plot_occupation(trap,50,-0.15*zr,1.2*zr,power_fac_down=0.93,power_fac_up=1,n_spill_steps=150,n_pot_steps=int(1e3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 150/150 [02:11<00:00,  1.14it/s]\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 32072 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "trap[trap.power_tweezer] = initial_power\n",
    "plot_occupation(trap,50,-0.15*zr,1.6*zr,power_fac_down=0.93,power_fac_up=1,n_spill_steps=150,n_pot_steps=int(1e3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 150/150 [02:25<00:00,  1.03it/s]\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 31900 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "trap[trap.power_tweezer] = initial_power\n",
    "plot_occupation(trap,200,-0.15*zr,2*zr,power_fac_down=0.93,power_fac_up=1,n_spill_steps=150,n_pot_steps=int(1e3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 150/150 [03:02<00:00,  1.22s/it]\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 32052 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "trap[trap.power_tweezer] = initial_power\n",
    "plot_occupation(trap,50,-0.15*zr,1.6*zr,power_fac_down=0.93,power_fac_up=1,n_spill_steps=150,n_pot_steps=int(1e4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 150/150 [03:08<00:00,  1.25s/it]\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 32104 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "trap[trap.power_tweezer] = initial_power\n",
    "plot_occupation(trap,200,-0.7*zr,2.5*zr,power_fac_down=0.93,power_fac_up=1,n_spill_steps=150,n_pot_steps=int(1e3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 150/150 [07:34<00:00,  3.03s/it]\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 32068 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "trap[trap.power_tweezer] = initial_power\n",
    "plot_occupation(trap,200,-0.7*zr,2.5*zr,power_fac_down=0.93,power_fac_up=1,n_spill_steps=150,n_pot_steps=int(5e3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 150/150 [03:23<00:00,  1.36s/it]\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 32576 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "trap[trap.power_tweezer] = initial_power\n",
    "plot_occupation(trap,200,-0.5*zr,1.6*zr,power_fac_down=0.93,power_fac_up=1,n_spill_steps=150,n_pot_steps=int(1e3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 150/150 [13:10<00:00,  5.27s/it]\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 31968 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "trap[trap.power_tweezer] = initial_power\n",
    "plot_occupation(trap,350,-0.5*zr,3.9*zr,power_fac_down=0.93,power_fac_up=1,n_spill_steps=150,n_pot_steps=int(2e3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 150/150 [07:00<00:00,  2.80s/it]\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 32172 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "trap[trap.power_tweezer] = initial_power\n",
    "plot_occupation(trap,200,-0.5*zr,1.9*zr,power_fac_down=0.93,power_fac_up=1,n_spill_steps=150,n_pot_steps=int(2e3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.11795915] s\n",
      "-1.8042551552225352e-29\n",
      "[0.14786303] s\n",
      "-1.7984801620815207e-29\n",
      "[0.2564755] s\n",
      "-1.7927051689405057e-29\n",
      "[0.45515868] s\n",
      "-1.786930175799516e-29\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 29192 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 25200 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 24752 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 26320 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "powers = np.linspace(0.94,0.945,4)*initial_power\n",
    "\n",
    "for i, p in enumerate(powers):\n",
    "    trap[trap.power_tweezer] = p\n",
    "    plot_solutions(trap,200,-0.5*zr,1.9*zr,n_pot_steps=2000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.06814823] s\n",
      "-6.486341576954851e-29\n",
      "[0.15249878] s\n",
      "-6.481151752611274e-29\n",
      "[0.19242222] s\n",
      "-6.475961928267669e-29\n",
      "[0.28058608] s\n",
      "-6.470772103924091e-29\n",
      "[0.52620611] s\n",
      "-6.465582279580515e-29\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 23540 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 22896 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 23584 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 23328 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 23444 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "powers = np.linspace(0.94,0.945,5)*initial_power\n",
    "\n",
    "for i, p in enumerate(powers):\n",
    "    trap[trap.power_tweezer] = p\n",
    "    plot_solutions(trap,350,-0.5*zr,3.9*zr,n_pot_steps=2000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.07902581] s\n",
      "-1.1673639057283307e-28\n",
      "[0.083507] s\n",
      "-1.166826247666812e-28\n",
      "[0.19558203] s\n",
      "-1.1662885896052898e-28\n",
      "[0.27758129] s\n",
      "-1.1657509315437711e-28\n",
      "[0.51896978] s\n",
      "-1.1652132734822524e-28\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 23012 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 22796 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 22584 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 23000 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 22500 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "ename": "",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31mThe Kernel crashed while executing code in the current cell or a previous cell. \n",
      "\u001b[1;31mPlease review the code in the cell(s) to identify a possible cause of the failure. \n",
      "\u001b[1;31mClick <a href='https://aka.ms/vscodeJupyterKernelCrash'>here</a> for more info. \n",
      "\u001b[1;31mView Jupyter <a href='command:jupyter.viewOutput'>log</a> for further details."
     ]
    }
   ],
   "source": [
    "powers = np.linspace(0.94,0.945,5)*initial_power\n",
    "\n",
    "for i, p in enumerate(powers):\n",
    "    trap[trap.power_tweezer] = p\n",
    "    plot_solutions(trap,999,-0.5*zr,5.9*zr,n_pot_steps=8000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[] s\n",
      "-1.8181151387609643e-29\n",
      "[0.04647212] s\n",
      "-1.8134951442481374e-29\n",
      "[0.05285233] s\n",
      "-1.8088751497353357e-29\n",
      "[0.0714247] s\n",
      "-1.8042551552225352e-29\n",
      "[0.09479817] s\n",
      "-1.799635160709733e-29\n",
      "[0.23445589] s\n",
      "-1.7950151661969066e-29\n",
      "[0.34857459] s\n",
      "-1.790395171684105e-29\n",
      "[0.58268832] s\n",
      "-1.7857751771713032e-29\n",
      "[1.00946104] s\n",
      "-1.781155182658502e-29\n",
      "[1.9336451] s\n",
      "-1.7765351881457004e-29\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 27696 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 33472 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 30560 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 31532 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 33440 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 31272 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 30876 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 27648 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 26848 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 31212 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "powers = np.linspace(0.936,0.948,10)*initial_power\n",
    "\n",
    "for i, p in enumerate(powers):\n",
    "    trap[trap.power_tweezer] = p\n",
    "    plot_solutions(trap,200,-0.5*zr,1.9*zr,n_pot_steps=1000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[] s\n",
      "-1.8181151387609643e-29\n",
      "[0.02886784] s\n",
      "-1.8134951442481374e-29\n",
      "[0.03402519] s\n",
      "-1.8088751497353357e-29\n",
      "[0.11795915] s\n",
      "-1.8042551552225352e-29\n",
      "[0.13515261] s\n",
      "-1.799635160709733e-29\n",
      "[0.20296222] s\n",
      "-1.7950151661969066e-29\n",
      "[0.32685646] s\n",
      "-1.790395171684105e-29\n",
      "[0.46055497] s\n",
      "-1.7857751771713032e-29\n",
      "[1.05095914] s\n",
      "-1.781155182658502e-29\n",
      "[1.86332245] s\n",
      "-1.7765351881457004e-29\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 27672 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 31336 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 31492 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 34928 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 31192 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 30124 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 30528 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 33372 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 29220 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "[encoded data, 29324 characters]",
      "text/plain": [
       "<Figure size 375x375 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "ename": "",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31mThe Kernel crashed while executing code in the current cell or a previous cell. \n",
      "\u001b[1;31mPlease review the code in the cell(s) to identify a possible cause of the failure. \n",
      "\u001b[1;31mClick <a href='https://aka.ms/vscodeJupyterKernelCrash'>here</a> for more info. \n",
      "\u001b[1;31mView Jupyter <a href='command:jupyter.viewOutput'>log</a> for further details."
     ]
    }
   ],
   "source": [
    "powers = np.linspace(0.936,0.948,10)*initial_power\n",
    "\n",
    "for i, p in enumerate(powers):\n",
    "    trap[trap.power_tweezer] = p\n",
    "    plot_solutions(trap,200,-0.5*zr,1.9*zr,n_pot_steps=2000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "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.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
