{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# DC-DC Flyback converter \n",
    "\n",
    "The goal is to compare the SIMBA simulation results against theory calculation for this topology.\n",
    "\n",
    "Let's compare the average output voltage.\n",
    "\n",
    "# SIMBA circuit\n",
    "![flyback](fig/flyback.png)\n",
    "\n",
    "\n",
    "\n",
    "Simulation settings : \n",
    "* predictive time step (variable) \n",
    "* minimum time step: 1E-08\n",
    "* simulation time: we use the \"stop at steady state\" function\n",
    "\n",
    "\n",
    "# Theory calculation\n",
    "\n",
    "* Output voltage\n",
    "\n",
    "$ V_{out} =  V_{in} \\times m \\times \\frac {D}{1-D} $\n",
    "\n",
    "with:\n",
    "\n",
    "V_in = 6\n",
    "\n",
    "D = duty cycle = 0.25\n",
    "\n",
    "N2= 2\n",
    "\n",
    "N1= 1\n",
    "\n",
    "m= (N2/N1)\n",
    "\n",
    "\n",
    "### Run Simulation "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load modules\n",
    "from aesim.simba import JsonProjectRepository\n",
    "from math import *\n",
    "import matplotlib.pyplot as plt\n",
    "import os\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Theory Output voltage Average =  4.0\n"
     ]
    }
   ],
   "source": [
    "#Theory calculation for output average voltage \n",
    "\n",
    "Vinput = 6\n",
    "Duty= 0.25\n",
    "N2= 2\n",
    "N1= 1\n",
    "m= (N2/N1)\n",
    "Vo_th = Vinput * m * (Duty/(1-Duty))\n",
    "print (\"Theory Output voltage Average = \", Vo_th)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load functions\n",
    "\n",
    "# get steady state signals\n",
    "def steadystate_signal(horizon_time, time, *signals):\n",
    "    \"\"\"steadystate_signal() returns time ndarray and a list of signals on the horizon_time\"\"\"\n",
    "\n",
    "    steadystate_maskarray = np.ma.where(time > time[-1] - horizon_time)\n",
    "    steadystate_time = time[steadystate_maskarray]\n",
    "    steadystate_signal_list = [signal[steadystate_maskarray] \n",
    "for signal in signals]\n",
    "    return steadystate_time, *steadystate_signal_list\n",
    "\n",
    "# calculate average value\n",
    "def average_value(time, waveform):\n",
    "    \"\"\"average_value() returns the average value of a time waveform equal time steps are not required\"\"\"\n",
    "\n",
    "    cum_sum = 0\n",
    "    range_idx = range(0, len(time)-1, 1)\n",
    "\n",
    "    for idx in range_idx:\n",
    "        cum_sum += (time[idx + 1] - time[idx]) * (waveform[idx+1] + waveform[idx]) /2\n",
    "    return (1 / (time[-1] - time[0]) * cum_sum)\n",
    "\n",
    "# calculate rms value\n",
    "def rms_value(time, waveform):\n",
    "    \"\"\"rms_value() returns the rms value of a time waveform equal time steps are not required\"\"\"\n",
    "\n",
    "    cum_sum = 0\n",
    "    range_idx = range(0, len(time)-1, 1)\n",
    "\n",
    "    for idx in range_idx:\n",
    "        cum_sum += (time[idx + 1] - time[idx]) * (waveform[idx+1]**2 + waveform[idx]**2) /2\n",
    "    return (np.sqrt(1 / (time[-1] - time[0]) * cum_sum))\n",
    "\n",
    "# plot histogram\n",
    "def plot_bar(Tab1 = [], \n",
    "        Tab2 = [], \n",
    "        largeur_barre = 0.3,\n",
    "        Etiquette = [],\n",
    "        FigAxe = \"ax1\",\n",
    "        show = False,\n",
    "        plot = plt, Tab1_abscisse = [], \n",
    "        dxticks = 0, mxticks = 2, \n",
    "        xlim = [], ylim = [],\n",
    "        color_tab1 = 'orange',\n",
    "        Legend = ['SIMBA', 'PSIM'],\n",
    "        ylabel='Average or rms values'):\n",
    "        \"\"\"\n",
    "        Tab1: donnée SIMBA\n",
    "        Tab2: Donnée PSIM\n",
    "        largeur_barre = 0.3 # Largeur de chaque barre :\n",
    "        \"\"\"\n",
    "\n",
    "        if Tab1_abscisse == []:\n",
    "                Tab1_abscisse = range(len(Tab1)) # Position des barres de la categorie 1\n",
    "        \n",
    "        if Tab2 != []:\n",
    "                Tab2_abscisse = [i + largeur_barre for i in Tab1_abscisse] # Position des barres de la cat 2\n",
    "\n",
    "        plot.bar(Tab1_abscisse, Tab1, width = largeur_barre, color = color_tab1, # Barres cat 1\n",
    "                edgecolor = 'black', linewidth = 2)\n",
    "        \n",
    "        if Tab2 != []:\n",
    "                plot.bar(Tab2_abscisse, Tab2, width = largeur_barre, color = 'yellow', # Barres cat 2\n",
    "                        edgecolor = ['black' for i in Tab1], linewidth = 2)\n",
    "\n",
    "        plot.xticks([dxticks+r + largeur_barre / mxticks for r in range(len(Tab1))], # Etiquettes\n",
    "                Etiquette)\n",
    "\n",
    "        FigAxe.set_ylabel(ylabel)\n",
    "\n",
    "        if ylim !=[]:\n",
    "                plt.ylim(ylim)\n",
    "        if xlim !=[]:\n",
    "                plt.xlim(xlim)\n",
    "\n",
    "        if Tab2 != []:\n",
    "            plot.legend(Legend)\n",
    "\n",
    "        if show == True :\n",
    "                plot.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "========== 0 Error(s), 0 Warning(s) ==========\n",
      "Job duration: 0,0221196 seconds.\n",
      "\n",
      "SIMBA Output Voltage Average =  3.994378760445819\n",
      " Diff_relative_mean for output voltage at steady state=  0.14053\n",
      "Total simulation Time in SIMBA 0.0221196\n"
     ]
    },
    {
     "data": {
      "image/png": "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va+/PrwOb7wxjL/vPukf/5Bef1266KLwuv7BD8KPBr//vfTgg9ITT4T92toq/fCHYZrrrpNeey3M9+GHww8YU6aE5f/zn+Fohxkzwg8Kra3R/nz33VC2t4c2Fum90B223vHSfhyzK6SvXh09b+Psc8emWbs22o42Tem8AQCNy3ufq8euu+7q0Qtr19rXAu8POijr1vTMZz7j/cSJWbeidnbaKdonpY8ttih/7oEHQvnMMz1b3uLF3p9+uveLFoX5rLdeNO/3vS+Uhx7adZsk77ffPhr+wQ9Cec89Nd0sdTV3rverV4f1uOSS8vW17bHffuXbzB7veU8oJ04sHzd0aCg32yyUo0aVT/P+94dyn33Kxx1ySCi/+tXycV/4QihvvDGUX/qS91/5Spj2jTe8/9nPwjo+8YT3q1aFz4AstLaGZb/2mvcLFnj/+uve33ef90uWeP+973m/YoX3p57q/UMPeX/yyWH44ovDOj38cCivuSaU22zj/eDBYfhb3wrltdeG8gMfiLbNhAmh/NnPut5+X/xiKK++uvN+iA/fdFMo//u/o/24zTZh+Le/DeUjj4Tyv/7L+x139P697/X+178Oz736qveDBoVpDj3U+1/+MizvS18K4w480PuFC70/4QTvH3wwjLviivAeP+UU75ctC9O+8Yb3F13k/d/+5v3dd3t/4YXez57t/ec+F7bv177m/WOPRfWnTQvjFi3y/uMf93769PDauP5676+6KszzmWe8nzTJ+zlzwvv6ttu8P/740JZrrgmv1enTw3pMner9xht7//Wvh/GjR3t/xx1h3AsvhPKii7zfdtvwuXb++eG5J54I5e23h/Loo70/4ogw/Je/hPLpp0N54YXeb7VVaMsFF4TnnnoqlH/7Wyg//3nvP/tZ74cM8f7OO8NzL74YyksvDe+hj33M+8svD8+99FLU/i228P7ss70/44zQxvvvD+Nee837YcPCtjn6aO+POy68pjbayPuZM8P+e+wx7/fYw/sf/jC8ZvfZJ7w2hw71/s03vR871vs//tH7T386vK6uu877cePCPm5p8f7f//Z+l13Cen3nO+H1NXWq9/36heUPGeL973/v/eGHh3lcdVWY9yuvhDY+9JD3m2/u/TnnhNfy9tuHz117jUne/+Y33n/kI2Eel13Wedvcf39YnzPOCK+rLbYIryMp2sdXXeX9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4O23j8pjjw3DduTIIYeEXvEbbwz76KKLwr2Dv/71MM03vxmObLjmGun++0MP9lVXSRdcIJ1zTuhB/+lPw72Fb7stHOp9113SmWeG+scfH+p/4xvStddKV14pHX54+AFh4MBw9IEk/fd/S+99b9g/dmuvD3wglPvtF8ottoiuLL7LLtFz8b8laccdQ2nnZ1W6iq29fuPnIm+7bed68R9wbN9ss00o7TzZ+PInT+48nx12COXGG0evpQ9/uHNbP/7xaH9/9rOhfN/7QvmRj4Ryzz2jbWHvMdtGxx0XflQYODAcVi9J739/KO3HmT32CIfqS9HRHnvsEcqjjopeS/ajznvf23kZ73lP1H6bj63bRz8arf/BB4fSXnc77xytvx1VYutm2+hDH4rqW9usvm2jeH1bN3ut2zaXwkXy4vVsPTbbTNp6687Ls2n23z+qb69Ja7dto/j677tvKHfaKZQHHRTV/+QnQ2mvCau/zTbl9W35ts6S9IlPdF6+HXHynvdErzt7/djy4z/AHXFE53nvumsot9wyev+Urn98/338453H2fbbaqswj3j9pP1vy7e22fLf855o+aXtj9e37V9af+utwzyk8u0fX//S7Wf1t9kmWn419UuXv8020fqX1o+3v6v6227bs/q2/bfdNvpML3392GeEVL794vXt87LS8u31a9vP6m+/ffnyu1vf3r/2frVp4u1Pq/6kSdH3Jqtv7e9p/aSLqOWN9z5Xj1133dWjF/bc0/uPfSzrVtTGvHneh/gRHjfckHWLyg0aFNo2cmTntkren3NOKPv1y7qVtbPDDmGdfvjDUB55ZPl6f/KTodx11/JxI0aEsqWlfJw9xowJ5VZblY8bNy6UX/xiKCdPLp/m858P5WWXRdt/p528HzvW+5UrvX/11ay3Ym38+9/er1rl/fXXez91qvcXX+z9+97n/W23hfV+5JHybWT779JLQ3nEEeXb78tfDuUvfxnK4cOjcfvsE8q//CWUZ50VygkTvD/66DD8xBOhnDXL+y99KbTt738P7VqwwPtbbgntf+yx0P5Fi7xvb89uO3bH2rXhNeR9+Hxau9b7OXO8X7rU+8WLvZ85Mzz34INhmkce8X7hQu9ffNH7554Lw1OmhGluuMH7tjbv//WvMP6VV7y/807vly/3/sorvV+zxvs//9n7t97yfto07x9+OCzzT38K9a+/PtR/8EHvp0/3/o03wvDq1d7/9a9hGlv+a6+F131bm/dPPhna9uSTYdo33gjTLF0alrV2bVgP771/992wvq2tYfzq1d7Pnx/GLVgQpl22LEyzcmUY9t77JUtC2doa1mPFirBea9aE+Xgf9vvatWGaFSvCw+rNnRvK+fPDa2Tp0jBu1SrvZ88O415/vfP2b231/p13wnMvvxymmTkzvLbmzg3TLV8ejXvuudCe114L679oUbT/nn46TPPii2GdZs/2/u23w7z+858w7plnQv1Zs8K2WLQoDK9d6/2zz4ZpXnklbPM5c8K2XLEiPOe99y+8EKZ9663w2olvf2vja6+FNi9YELbFypVhvb33fsaMMO2770brP3t25/335pthmQsXhnmsXBn2t20bq9/aGh7vvhues8/IN94I9Sstf/bssPylS8M2Wrs2Wkdr//z54bW7YkXUtpdfDtO+/XbYt0uWROv/0kthmlmzQv1586L61raXXlp3/Zkzy+t3tfx4+237Jy1/1qxo365dG15ztv72+ouv/4oVYf3nzw/Dr71W//pJ7Y+vv72/kta/VvWt/WnWL13/pPpdbb+e1u/O8pcv7976z5zZvfqln385IGma7yIPOp90iFUftttuu/lpdi4Yum/HHcMvUbfemnVLeq+trfMhjr/5TehV6UsqXcToJz+Rzjgj9E488kj92pSmmTPDfth999Bbdcgh4bDXuJNOCofkHnSQdMcdncdtsYU0Y0b4xfjFF5PPm91993A/3cmTw2G9cZtvLr36auh9++lPQ2/P7bd3nubkk6UrrpB++ctwPusFF+T/fPDusvODn3km/DI8fXroLR03LvTofu1roefx7LOl668PvQfNzeFiVF/9qvStb4Vez4svDtt43rywn/bcM9wc/eijw7m8e+0Vzu1uaYneq33xwl4AAKBPcc497r3fLWkcF3FqNO3txTmEuNK5aH1ZU1M47LKlRXr88ejQliLYbDPp/POlJ58Mf2+3XXmALb0Kalz8HmkvvhimKb0FkR06mXQ4r70G7AIzSRdhOPPMcEXgY46RTjtt3etURBYm7TCu+GGkZ5wRyl/+svPfUnS44m9/G8pzzimft120yg61K8D95gAAQN9RgJPv0C3t7clXJsuj9dYLvUHWi1evK9z2lm3/5uZwjkLSlV7zbpddwoWHLrigfFzpvf7i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",
      "text/plain": [
       "<Figure size 1152x648 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Load SIMBA project\n",
    "file_path = os.path.join(os.getcwd(), \"flyback_converter.jsimba\")\n",
    "project = JsonProjectRepository(file_path)\n",
    "Flyback = project.GetDesignByName('Flyback')\n",
    "\n",
    "# Get the job object and solve the system\n",
    "job = Flyback.TransientAnalysis.NewJob()\n",
    "status = job.Run()\n",
    "print(job.Summary())\n",
    "\n",
    "# Get results\n",
    "t = job.TimePoints\n",
    "Vout = job.GetSignalByName('R2 - Instantaneous Voltage').DataPoints\n",
    "\n",
    "\n",
    "# Plot graph for output voltage during all simulation time\n",
    "fig = plt.figure(figsize = (16, 9))\n",
    "\n",
    "ax1 = fig.add_subplot(111)\n",
    "plot1 = ax1.plot(t, Vout, \"r\")\n",
    "ax1.set_xlabel('time')\n",
    "ax1.set_ylabel('Vout')\n",
    "ax1.set_title(\"Vout SIMBA\")\n",
    "\n",
    "\n",
    "# steady state during 2 periods for the measurements comparison\n",
    "fsw=500000\n",
    "horizon_time = 2 / fsw  \n",
    "t, Vout = steadystate_signal(\n",
    "   horizon_time,\n",
    "   np.array(job.TimePoints),\n",
    "   np.array(job.GetSignalByName('R2 - Instantaneous Voltage').DataPoints))\n",
    "\n",
    "# Perform average calculation during 2 periods\n",
    "Vout_average = average_value(t, Vout)\n",
    "print(\"SIMBA Output Voltage Average = \", str(Vout_average))\n",
    "\n",
    "# calculation of relative difference between SIMBA & theoretical calculation at steady state\n",
    "Diff_relative_mean = np.round(abs(Vo_th - Vout_average)*100/Vo_th, 5)\n",
    "print (\" Diff_relative_mean for output voltage at steady state= \", Diff_relative_mean)\n",
    "\n",
    "\n",
    "#Retrieve total simulation time for SIMBA simulation\n",
    "job.RunTime\n",
    "print (\"Total simulation Time in SIMBA\", str(job.RunTime))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABHgAAAKACAYAAADn488NAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7/klEQVR4nO3da7RlVXkn/P9jgaCAYKCSjgJSCkZBsYwnoAaMjTeSCMQIAopRNNJ5veTWeUU7iRfSDmNiNGm1E8tLQghyiWJL1Fei8RITDVqFaASkRcBQSCIgCHhD4Hk/nF3keKw6tausvc9ZdX6/MfbYa80115rPhg+c8WfOuaq7AwAAAMBw3WOxCwAAAADgRyPgAQAAABg4AQ8AAADAwAl4AAAAAAZOwAMAAAAwcAIeAAAAgIHbYbELWEhVXZ3k1iR3Jrmju2cWtyIAAACApWdJBzwj/7W7b1jsIgAAAACWKku0AAAAAAauunuxa9ikqroqyU1JOslbu3vNvOunJDklSXbZZZdHPeQhD5l+kQAAAABTsm7duhu6e+X89qUe8Ny/u6+tqh9P8uEkL+nuf9xY35mZmV67du10CwQAAACYoqpat7E9ipf0Eq3uvnb0/fUk701yyOJWBAAAALD0LNmAp6p2qardNhwneXKSLy5uVQAAAABLz1J+i9ZPJHlvVSWzdb6ruz+0uCUBAAAALD1LNuDp7iuTPGKx6wAAAAAm5/vf/37Wr1+f7373u4tdypKy8847Z++9986OO+44Vv8lG/AAAAAA27/169dnt912y3777ZfRKp5lr7tz4403Zv369Vm1atVY9yzZPXgAAACA7d93v/vd7LnnnsKdOaoqe+655xbNahLwAAAAAItKuPPDtvSfiSVaAAAAwJIwqaCnuyfy3KXEDB4AAABg2XvNa16Tgw46KAcffHBWr16dCy+8MI9//OOzdu3aJMl+++2Xww8//AfuWb16dR72sIclST7+8Y9n9913z+rVq3PwwQfniU98Yr7+9a//QP9f+qVfyqMf/eiJ1G8GDwAAALCk9Jnb5jn1rPH6ffrTn8773//+XHTRRdlpp51yww035Pbbb/+hfrfeemuuueaa7LPPPrnssst+6Prhhx+e97///UmSl7/85XnLW96SV7/61UmSm2++OevWrcuuu+6aK6+8Mg984AO3/odthBk8AAAAwLJ23XXXZa+99spOO+2UJNlrr71yv/vd74f6PeMZz8g555yTJDnrrLNy4oknbvR53Z1bb701973vfe9uO++883LUUUflhBNOyNlnn73Nf4OABwAAAFjWnvzkJ+eaa67Jgx/84LzwhS/MJz7xiY32e/rTn57zzjsvSfJ3f/d3Oeqoo37g+ic/+cmsXr06++67bz7ykY/kec973t3XNgRCJ554Ys4666xt/hsEPAAAAMCytuuuu2bdunVZs2ZNVq5cmeOPPz5/9Vd/9UP99txzz9z3vvfN2WefnYc+9KG5973v/QPXDz/88Fx88cW55pprcvLJJ+elL31pkuQ//uM/8uUvfzmHHXZYHvzgB2fHHXfMF7/4xW36G+zBAwAAACx7K1asyOMf//g8/vGPz8Mf/vCcfvrpG+13/PHH50UvetFGA6C5jj766Dz96U9Pkpx77rm56aabsmrVqiTJLbfckrPOOiuvec1rtln9Ah4AAABgSRl3c+Rt5fLLL8897nGPHHDAAUmSiy++OA94wAM2OsvmaU97Wq677ro85SlPyde+9rVNPvOf/umf8qAHPSjJ7PKsD33oQ3nMYx6TJLnqqqvyxCc+UcADAAAAsK3cdttteclLXpKbb745O+ywQ/bff/+sWbMmxx577A/13W233XLqqadu9Dkb9uDp7uy+++55+9vfnquvvjpf/epXf+D16KtWrcruu++eCy+8MIceeug2+Q3V3dvkQYttZmamN7ybHgAAABiGyy67LA996EMXu4wlaWP/bKpqXXfPzO9rk2UAAACAgRPwAAAAAAycgAcAAABg4AQ8AAAAAAMn4AEAAAAYOK9JBwAAAJaEqprIc7eXN4gvRMADAAAALFs33nhjnvCEJyRJ/v3f/z0rVqzIypUrc/XVV+d+97tfLr300kWucDwCHgAAAGBJ2VYTbsaZELTnnnvm4osvTpK86lWvyq677prf+Z3fydVXX52nPvWp26aQOe64447ssMO2j2PswQMAAACwEXfeeWde8IIX5KCDDsqTn/zkfOc730mSfOUrX8mRRx6ZRz3qUTn88MPzpS99KUly9dVX54gjjsjBBx+cJzzhCfm3f/u3JMlzn/vc/Nqv/VoOPfTQvPSlL80BBxyQ66+/Pkly1113Zf/997/7fGsJeAAAAAA24stf/nJe9KIX5ZJLLskee+yR97znPUmSU045JW96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",
      "text/plain": [
       "<Figure size 1152x648 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot figure with Histogram at steady state\n",
    "fig1 = plt.figure(figsize = (16, 9))\n",
    "ax2 = fig1.add_subplot(211)\n",
    "plot_bar(Tab1 = [Vout_average],\n",
    "        Tab2 = [Vo_th], \n",
    "        largeur_barre = 0.1,\n",
    "        Etiquette = ['<Vout>'],\n",
    "        Legend = ['SIMBA', 'Theory'],\n",
    "        xlim = [0, 1], ylim = [0, 5],\n",
    "        Tab1_abscisse = [0.5], \n",
    "        dxticks= 0.5,\n",
    "        FigAxe = ax2)\n",
    "\n",
    "\n",
    "\n",
    "        \n",
    "\n",
    "ax3 = fig1.add_subplot(212)\n",
    "plot_bar(Tab1 = [Diff_relative_mean], \n",
    "        largeur_barre = 0.1,\n",
    "        Etiquette = ['<Vout>'],\n",
    "        FigAxe = ax3, \n",
    "        mxticks = 32,\n",
    "        ylabel = 'Relative difference to Theory (%)',\n",
    "        Tab1_abscisse = [0.5],\n",
    "        xlim = [0, 1],\n",
    "        dxticks= 0.5,\n",
    "        color_tab1 = 'blue')\n",
    "\n",
    "\n",
    "fig.tight_layout()\n",
    "fig1.tight_layout()\n",
    "\n",
    "plt.show()\n"
   ]
  }
 ],
 "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.10.5"
  },
  "vscode": {
   "interpreter": {
    "hash": "c16a552a28c1f3e011cf5bf08dd8767fe3bdcc0a585d197bf4032d58ac6f1740"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
