"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"ax = df[[\"Presim. Time / s\", \"Sim. Time / s\"]].plot(style=[\"--b\", \"-r\"], figsize=(10,3));\n",
"ax.set_ylabel(\"Time / s\");"
]
},
{
"cell_type": "markdown",
"metadata": {
"exercise": "task",
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Task 6\n",
"\n",
"TASK\n",
"\n",
"* To your `df` Nest data frame, add a column with the unaccounted time (`Unaccounted Time / s`), which is the difference of program runtime, average neuron build time, minimal edge build time, minimal initialization time, presimulation time, and simulation time. \n",
"(*I know this is technically not super correct, but it will do for our example.*)\n",
"* Plot a stacked bar plot of all these columns (except for program runtime) over the threads\n",
"* Tell me when you're done with status icon in BigBlueButton: \ud83d\udc4d"
]
},
{
"cell_type": "code",
"execution_count": 220,
"metadata": {
"exercise": "solution",
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"cols = [\n",
" 'Avg. Neuron Build Time / s', \n",
" 'Min. Edge Build Time / s', \n",
" 'Min. Init. Time / s', \n",
" 'Presim. Time / s', \n",
" 'Sim. Time / s'\n",
"]\n",
"df[\"Unaccounted Time / s\"] = df['Runtime Program / s']\n",
"for entry in cols:\n",
" df[\"Unaccounted Time / s\"] = df[\"Unaccounted Time / s\"] - df[entry]"
]
},
{
"cell_type": "code",
"execution_count": 221,
"metadata": {
"exercise": "solution",
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Runtime Program / s
\n",
"
Unaccounted Time / s
\n",
"
Avg. Neuron Build Time / s
\n",
"
Min. Edge Build Time / s
\n",
"
Min. Init. Time / s
\n",
"
Presim. Time / s
\n",
"
Sim. Time / s
\n",
"
\n",
"
\n",
"
Threads
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
" \n",
" \n",
"
\n",
"
8
\n",
"
420.42
\n",
"
2.09
\n",
"
0.29
\n",
"
88.12
\n",
"
1.14
\n",
"
17.26
\n",
"
311.52
\n",
"
\n",
"
\n",
"
16
\n",
"
202.15
\n",
"
2.43
\n",
"
0.28
\n",
"
47.98
\n",
"
0.70
\n",
"
7.95
\n",
"
142.81
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Runtime Program / s Unaccounted Time / s \\\n",
"Threads \n",
"8 420.42 2.09 \n",
"16 202.15 2.43 \n",
"\n",
" Avg. Neuron Build Time / s Min. Edge Build Time / s \\\n",
"Threads \n",
"8 0.29 88.12 \n",
"16 0.28 47.98 \n",
"\n",
" Min. Init. Time / s Presim. Time / s Sim. Time / s \n",
"Threads \n",
"8 1.14 17.26 311.52 \n",
"16 0.70 7.95 142.81 "
]
},
"execution_count": 221,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[[\"Runtime Program / s\", \"Unaccounted Time / s\", *cols]].head(2)"
]
},
{
"cell_type": "code",
"execution_count": 222,
"metadata": {
"exercise": "solution",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"image/png": "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BTgRERERERGRBFiAExEREREREUmABTgRERERERGRBFiAExEREREREUmABTgRERERERGRBFiAExEREREREUmABTgRERERERGRBFiAExEREREREUmABTgRERERERGRBFiAExEREREREUmABTgRERERERGRBMzKuwNSc6pUxSBtiYiIiIiIiIqjdQF+584dRERE4OLFi7hx4wbq1KmD/fv3F2gXFRWF0NBQxMTEwN3dHcOHD8fgwYMLtIuIiMD27dsRFxeH+vXr47333kPLli11G00JVCoVug0Yq/U+RERERERERGWldQF+48YNREVFoXHjxlCpVBBFsUCbCxcuYMKECXjzzTcxZ84cREdHY9GiRVAoFOjXr5+6XUREBEJDQzF9+nR4e3sjMjISo0ePRmRkJDw9Pcs2skIIgoBfDlxHwtP0UrV3crZGQA8vvfeDiIiIiIiIXj5aF+ABAQHo0qULAGDOnDm4fPlygTarV6+Gt7c3Fi9eDADw9/fHw4cPsXz5cvTp0weCICA7OxthYWEYOnQoRo0aBQBo0aIFgoKCEB4ejtDQ0LKMq0g3rz/Go/vJpWrrXs2eBTgRERERERHphdaLsAlC8btkZ2fj1KlT6Nmzp8b2oKAgxMXF4erVqwCA6OhopKSkIDAwUN1GLpejR48eiIqKKvTMOhEREREREVFFpfdV0O/evYucnBzUqVNHY3vdunUBADExMRr/fbGdh4cH0tLSEBsbq++uEREREREREZUbva+CnpSUBACwt7fX2J7/OP/55ORkKBQKWFpaarRzcHAAACQmJsLd3V2nPpiZFfxeQS7X/bsGbfY19hxTGktZ9y3sOPo6XnllMIc5UmUwhzlSZTCHOVJlMIc5UmUw5+XOMdhtyGQyWYnbC2uTP/W8qP1LIggyODnZ6LRvUeztrfR6vPLMMaWxGCKH7wFzTCnHlMbCHOPOMaWxMMe4c0xpLMwx7hxTGgtzjCtH7wV4/hns/DPd+ZKT8xY+yz8Tbm9vj6ysLGRlZcHCwqJAu/zjaEulEpGcXHCVc7lc0PkFTE7OgFJZutuRGXuOKY1F25zS9EFfxyuvDOYwR6oM5jBHqgzmMEeqDOYwR6oM5phejr29VanPluu9AK9ZsybMzc1x69YttG/fXr395s2bAPKu8X7+vzExMfD29la3i4mJgY2NDSpXrqxzH3Jz9ftmKJUq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JyIimqN2794NT09PZGRkQKVSYdeuXdi6dSuOHz8OExMTXbubN28iJSUFcXFx+Pjjj2FsbIw7d+4gKioKPT09SExMhLOzM9ra2rB3715cvnwZhYWFMDIyAgB0dnYiNDQUS5cuhampKVpbW5GXl4eOjg7s3LlTl5OTk4OcnBxEREQgKCgIPT09+Pzzz6HRaGBvb69rt2/fPuTk5GDr1q3w8vLCyMgIOjo68Pfffwt38oiIiB4DFuBERERzlKOjI3bt2qV7bWxsjI8++giNjY16Q9f7+/uxZ88eSCQS3bb8/HxcunQJpaWlEIvFAACJRIJFixYhOTkZ1dXV8Pf3BwCkpqbq3qfRaODl5QVLS0ukpaVh+/btEIlEGBgYgEKhQGBgIDIyMvT28d1339UrwOvr67FixQrIZDLdNj8/v+k7MURERLMUh6ATERHNUWvXrtV7PTaTend3t952kUikV3wDwOnTp+Hk5AQXFxeMjIzovnx9fWFkZIRz587p2jY3NyMxMRHe3t5wcXGBq6srPv30U4yOjuLPP/8EAJw/fx7Dw8MICwvTy/H09IStra3eNrFYjNbWVuzYsQNnz56FSqWa0nkgIiKaK3gHnIiIaI6ytLTUez1//nwAwNDQkN52Gxubce/t6+vD1atX4erqOmHft27dAnCvmJdKpbC3t0daWhpsbW1hZmaGhoYGfPHFF7qs/v5+AMCzzz47rq8HtyUkJMDc3Bzl5eUoKSmBiYkJvLy88Mknn+juxhMRERkiFuBEREQGbuxZ7vtZWVnBzMwMX3311YTvsbKyAgBUVlZicHAQcrlc7052a2urXvuxiwG9vb3j+urt7dV777x587B582Zs3rwZAwMDqK2tRVZWFuLi4vDLL79whnYiIjJYHIJORET0BAoICMC1a9dgaWkJsVg87mvp0qUA/q94H7u7Dtyb7by0tFSvPw8PD5iZmaGiokJve319Pbq6uv51P55++mkEBwcjMjIS/f39D21LREQ01/EOOBER0RPovffew88//4yoqCjExMTA2dkZGo0GN27cQE1NDbZs2YLVq1fDx8cHpqam2LZtG+Li4nD37l0cPnwYAwMDev2JRCJs2bIF3377LT777DMEBwejp6cHcrl83BD4xMREODk5wc3NDdbW1ujq6kJRURFsbW1hZ2cn5GkgIiISFAtwIiKiJ5C5uTkOHjyI/Px8HDlyBNevX8eCBQuwePFi+Pj46IaMOzg4QC6XY8+ePZDJZLC0tERoaChiYmIQHx+v1+eHH34Ic3NzHDp0CGVlZVi+fDnS09NRUFCg187b2xsnT57E0aNHoVKpYGNjAx8fH3zwwQcwNTUV7BwQEREJzUir1Wof904QERERERERGTo+A05EREREREQkABbgRERERERERAJgAU5EREREREQkABbgRERERERERAJgAU5EREREREQkABbgRERERERERAJgAU5EREREREQkABbgRERERERERAJgAU5EREREREQkABbgRERERERERAJgAU5EREREREQkABbgRERERERERAL4H1mndGtZJdyYAAAAAElFTkSuQmCC",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df[[\"Unaccounted Time / s\", *cols]].plot(kind=\"bar\", stacked=True, figsize=(12, 4));"
]
},
{
"cell_type": "markdown",
"metadata": {
"exercise": "task",
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"## Task 7\n",
"\n",
"TASK\n",
"\n",
"* Create a pivot table based on the Nest `df` data frame\n",
"* Let the `x` axis show the number of nodes; display the values of the simulation time `\"Sim. Time / s\"` for the tasks per node and threads per task configurations\n",
"* Please plot a bar plot\n",
"* Tell me when you're done with status icon in BigBlueButton: \ud83d\udc4d"
]
},
{
"cell_type": "code",
"execution_count": 231,
"metadata": {
"exercise": "solution",
"slideshow": {
"slide_type": "fragment"
},
"tags": []
},
"outputs": [
{
"data": {
"image/png": "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Tk8++bS8vLz03ntr9Pjjj+rFF+eVawjfv3+fXn55jgYPvk9hYeF6//21+vvf/09RUfV0ww0tXPrOnDldbdveomnTpis/P09eXl5asWKZlixZqG7deuq++4br7NmzWrXqdY0ZM1KLF7+ma66pL+nc/fPR0VerY8cuCgoKUkZGut599x2NGDFUb731jgICgiVJBw8e0LhxoxQZWUdTp/5Nfn5+WrPmHX300QcutaSm/qInnhinZs1u0F/+8pQCAgJ14sQJbdnylc6ePesSwDdu/FTt23cq9c/E7PlakQjgAAAAwGXm0UcnOP9st9t1/fU3KCgoWDNnTtcjj4xXUFCQfv75J2VlZWnKlKd02223O/t37Nj5vMfMzs7SlCmPKzX1F82fv0TXXhvr3Pb99ztUv36Mhg9/yNnWunXbEsf4/PNPFBPTQPXqRZfYZrFYNGrUoxo3brTee++f6tu3/3nrSEhYrKKis5o7d5EiIiIlSW3b3qrTp3O0fPkS9e7dVwEBAXr77TeVmXlKy5atdNbatu0tGj9+jI4dS3MeLz8/Xy+99KJuvvlWzZw5y9netu0tGjZssF55ZX65BvDMzEwtWJCgyMhztTdr1lzbtm3VRx99UCKA33hjK02a9KTz9bFjaUpIeEV9+96jceOecLa3atVaAwfepeXLl2j69JmSpPbtO7mEYJvNpptvvk29et2hDRs+cP58X311iRwOh+bOXaiwsPD/vfdbNXSo689/z54fVVhYoNGjH3P57O+4o6tLv3379urIkcO6/faOpf6ZmD1fK5JbAfzLL7/UK6+8ov379+v06dOKiIhQp06d9MgjjygwMNDZb+PGjYqPj1dKSooiIyN1//33a9CgQSWOl5CQoJUrV+rEiROKjY3VpEmT1Lp167K/KwAAAAAXtHfvbiUkvKLvv/+vsrNd1yc6fPiQGjduoqioegoMDNLChfOUkZGuZs1aOM+e/l5q6i966KEH5OPjq1deWV7ict+4uMZKSNikWbP+rttua6cmTZrK3z+gxHGKF+a6kJYtb9JNN7XR8uVLS1xOXiw5+VvdeGMrZ/guduedPbV581faufO/atPmZiUnf6trrqlfInh17txVW7ducb7+/vsdys7O0p139lBRUZFL39at2+rNN1coLy9PNWrUuGDd7rj22lhn+JYkX19f1asXrbS0tBJ9f3+lwDff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sLBQ3t4XPvt9/PgxPf74o4qJaaBp057xaIx58+LVvn1HRUbWUU7OudXh7Xa7zp4tUk5Ojvz9/WUYv14E7ePjq4KCAo/GgmcI4AAAAABQwYKCgpSamnrebVlZmZow4RH5+/tr5swX5evr69EYhw79pG++SdWGDUku7e+//67ef/9drVz5jq666mpne05OtoKDgz0aC54hgAMAAABABYuOvlrJydtKtOfm5mrixLHKzc3VokXLFBQU5PEYTz/9nAoLC37X9qQaN26qfv0GKCIi0mVbauovatnyJo/Hg/sI4AAAAACqpKiIwCozXtOmzbR8+RIdP35MtWtHONunTZukvXv3aPLkaTp+/LiOHz/u3BYb29C5aNuMGU8rKWmdNm369oJjNGnStESbj4+PatWqpRYtWrq0nzlzWocO/axhwx7y+D3BfQRwAAAAAFWK3e6QzWbXxEE3mj62zWaX3e5we7/mzW9USEiINm/+Sr163eVs/+abzZKk554red93YuK/dOWVdSRJeXl5CgsL97DqkjZv/lp+fn5q2/bmcjsmLo4ADgAAAKBKsdsdyszMlWFYKmVsTwK4t7e3unTpro8/3uASwP/ojPZv7dq1U/373+v2uO+88/552z/55EO1b99JNWv6u31MeI4ADgAAAKDK8TQIV6Z77x2i/v37aO/e3YqNva7U+6WlpSk/P1933dWvXOo4evSINm/+Sq+//na5HA+lRwAHAAAAABOEh1+hqVOfVmZmplv7RUZGav36T8qtjvT0E5o8+UnVrRtVbsdE6RDAAQAAAMAkHTp0quwS1KxZczVr1ryyy7gsGRfvAgAAAAAAyooADgAAAACACQjgAAAAAACYgAAOAAAAAIAJCOAAAAAAAJiAAA4AAAAAgAl4DBkAAACAKscwLDIMi+nj2u0O2e0O08dF9UAABwAAAFClGIZFoSE1ZFitpo9tt9l0KjPP4xA+YsRQdenSTf36DZAkrV37T33xxWdKSdmnvLx8RUdfpYEDh6hjx84eHT819RctWvSyvvsuWbm5Z1SvXrQGDBisO+6409lnw4b1WrFimVaseFvWSvgZXs4I4AAAAACqFMOwyLBadXztHBVmHDFtXJ/wKNXuM06GYfEogG/c+KnS0lLVq1cfZ9uKFcvUqlVr9e7dVzVr1tR//vOF/va3vygz85T69r3HreMXFBRo/PhH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8uJ/efDMDz/8cMFtubm5+u6777Rz507Z7XZJUuPGjc0qDZeR9PR05xc9cXFxCg8Pr+SKUB2dPn1ab7/9tvbv3y+LxaJGjRqpX79+8vPzq+zSqg2Lw+FwVHYRuLRs2LBB48aN49t8eMzhcGjWrFlauXKlCgoKFBwcrAceeEAjRoyQ1Wp19tuxYwdnjlAmp0+f1mOPPaavvvpKktShQwe9+OKLeuihh7RlyxZZrVbZbDY1atRIb7zxhvz9/Su5YlRF1113nfNLRIfDUeILxeK24t/5Ow1lMXv2bA0aNEgRERGSJLvdrueee05vvfWWbDabHA6HvLy8NGTIEE2ePLmSq0VVNnr0aNWqVUvPPPOMJGn37t0aNmyYTp8+rfr168vhcOjAgQO64oortHz5cl199dWVW3A1wekAAOXurbfe0muvvabBgwerUaNG+vbbbzVv3jx98cUXWrBggYKDgyu7RFQTL7/8sn744QdNnz5dwcHBWrBggcaOHatDhw7pn//8pxo1aqTk5GSNGzdOy5cv1yOPPFLZJaMKql27tux2u8aOHVviH6BnzpzRqFGjNGXKFDVq1KhyCkS1smTJEnXq1MkZwJcuXao333xT999/v+688045HA6tX79er732mqKiojRo0KBKrhhV1Xfffafp06c7X8+YMUN16tTRwoULVatWLUnSsWPHNGrUKP3973/XokWLKqvUaoUAfhnp2bNnqfqdOXOmgitBdbdq1So99NBDevTRRyVJvXv31j333KOxY8dq0KBBWrp0qSIjIyu5SlQHH3/8sR599FH169dPklS3bl317dtX//d//+e8DLhly5YaPny41qxZQwCHRz744APNnz9fM2fO1L333qvRo0c7r6bIycmRdO6SYG6nQXn4/cWpq1ev1r333qtJkyY5266//nrl5uZq9erVBHB47PTp0woJCXG+3r59u+bPn+8M35IUERGh0aNH64knnqiECqsnFmG7jBw4cECGYahJkyZ/+CsqKqqyS0UVd/jwYbVu3dqlrWnTplq9erW8vLx0zz33aN++fZVUHaqTY8eOKTY21vn62muvdfm92HXXXaejR4+aWhuqj5o1a+qJJ57QO++8o927d6tLly569913K7ssXCZ++eUXdejQoUR7x44d9dNPP5lfEKqNa665Rv/973+dr4OCgnT27NkS/c6ePStvb28z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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df.pivot_table(\n",
" index=\"Nodes\",\n",
" columns=[\"Tasks/Node\", \"Threads/Task\"],\n",
" values=\"Sim. Time / s\",\n",
").plot(kind=\"bar\", figsize=(12, 4));"
]
},
{
"cell_type": "markdown",
"metadata": {
"exercise": "task",
"slideshow": {
"slide_type": "subslide"
},
"tags": []
},
"source": [
"## Task 7B (like Bonus)\n",
"\n",
"TASK\n",
"\n",
"- Same pivot table as before (that is, `x` with nodes, and columns for Tasks/Node and Threads/Task)\n",
"- But now, use `Sim. Time / s` and `Presim. Time / s` as values to show\n",
"- Show them as a **stack** of those two values inside the pivot table\n",
"- Use Panda's functionality as much as possible!"
]
},
{
"cell_type": "markdown",
"metadata": {
"exercise": "task",
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"## Task 8 (Super Bonus)\n",
"\n",
"TASK\n",
"\n",
"* Create bar chart of top 10 actors (on `x`) and average ratings of their top movies (`y`) based on IMDb data (only if they play in at least two movies)"
]
},
{
"cell_type": "markdown",
"metadata": {
"exercise": "task",
"slideshow": {
"slide_type": "fragment"
},
"tags": []
},
"source": [
"* IMDb provides data sets at [datasets.imdbws.com](https://datasets.imdbws.com)\n",
"* Can directly be loaded like\n",
"```python\n",
"pd.read_table('https://datasets.imdbws.com/dataset.tsv.gz', sep=\"\\t\", low_memory=False, na_values=[\"\\\\N\",\"nan\"])\n",
"```\n",
"* Needed:\n",
" * `name.basics.tsv.gz` (for names of actors and movies they are known for)\n",
" * `title.ratings.tsv.gz` (for ratings of titles)\n",
"* Strategy _suggestions_:\n",
" * Use `df.apply()` with custom function\n",
" * Custom function: Compute average rating and determine if this entry is eligible for plotting (this _can_ be done at once, but does not need to be)\n",
" * Average rating: Look up title IDs as listed in `knownForTitles` in titles dataframe"
]
},
{
"cell_type": "markdown",
"metadata": {
"exercise": "solution",
"slideshow": {
"slide_type": "subslide"
},
"tags": []
},
"source": [
"```python\n",
"df_names = pd.read_table('imdb-data/name.basics.tsv.gz', sep=\"\\t\", low_memory=False, na_values=[\"\\\\N\",\"nan\"])\n",
"df_ratings = pd.read_table('https://datasets.imdbws.com/title.ratings.tsv.gz', sep=\"\\t\", low_memory=False, na_values=[\"\\\\N\",\"nan\"])\n",
" \n",
"df_names_i = df_names.set_index('nconst')\n",
"df_ratings_i = df_ratings.set_index('tconst')\n",
" \n",
"df_names_i = pd.concat(\n",
" [\n",
" df_names_i, \n",
" df_names_i.apply(lambda line: valid_and_avg_rating(line), axis=1, result_type='expand')\n",
" ]\n",
" , axis=1\n",
")\n",
"df_names_i[df_names_i['toPlot'] == True].sort_values('avgRating', ascending=False).iloc[0:10].reset_index().set_index('primaryName')['avgRating'].plot(kind='bar')\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"exercise": "solution",
"slideshow": {
"slide_type": "subslide"
},
"tags": []
},
"source": [
"```python\n",
"def valid_and_avg_rating(row):\n",
" rating = 0\n",
" ntitles = 0\n",
" _titles = row['knownForTitles']\n",
" _professions = row['primaryProfession']\n",
" if not isinstance(_titles, str):\n",
" _titles = str(_titles)\n",
" if not isinstance(_professions, str):\n",
" _professions = str(_professions)\n",
" titles = _titles.split(',')\n",
" professions = _professions.split(',')\n",
" for title in titles:\n",
" if title in df_ratings_i.index:\n",
" rating += df_ratings_i.loc[title]['averageRating']\n",
" ntitles += 1\n",
" if ntitles > 0:\n",
" plot = False\n",
" if ntitles > 2:\n",
" if 'actor' in professions:\n",
" plot = True\n",
" return {'toPlot': plot, 'avgRating': rating / ntitles}\n",
" else:\n",
" return {'toPlot': False, 'avgRating': pd.NA}\n",
"\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"exercise": "task",
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"## Task 8B (Bonuseption)\n",
"\n",
"TASK\n",
"\n",
"All of the following are ideas for unique sub-tasks, which can be done individually\n",
"* In addition to Task 8, restrict the top titles to those with more than 10000 votes\n",
"* For 30 top-rated actors, plot rating vs. age\n",
"* For 30 top-rated actors, plot rating vs. average runtime of the known-for-titles (using `title.basics.tsv.gz`)"
]
},
{
"cell_type": "markdown",
"metadata": {
"exercise": "task"
},
"source": [
"Feedback to a.herten@fz-juelich.de\n",
"\n",
"_Next slide: Further reading_"
]
}
],
"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.12.3"
},
"toc-autonumbering": false,
"toc-showcode": false,
"toc-showmarkdowntxt": false,
"toc-showtags": true
},
"nbformat": 4,
"nbformat_minor": 4
}