{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Batch jobs\n", "\n", "This example demonstrates how a batch of jobs can be created, submitted and managed within Lightworks." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import lightworks as lw\n", "from lightworks import remote\n", "\n", "try:\n", " remote.token.load(\"main_token\")\n", "except remote.TokenError:\n", " print(\n", " \"Token could not be automatically loaded, this will need to be \"\n", " \"manually configured.\"\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once imported, batches are created using the Lightworks Batch object. Below, a list of 4 random unitary circuits are created which will be sampled from. We then use the same input state and number of samples, but change the value of min_detection between the circuits.\n", "\n", ".. note::\n", "When the same value is to be used for all tasks in a batch then this only needs to be specified once, but still needs to be within a List." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "circuits = [lw.Unitary(lw.random_unitary(4)) for _ in range(4)]\n", "\n", "batch = lw.Batch(\n", " lw.Sampler,\n", " task_args=[circuits, [lw.State([1, 0, 1, 0])], [100]],\n", " task_kwargs={\"min_detection\": [2, 1, 2, 2]},\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This batch of tasks is then run on the QPU backend in the same way as normal. This will return a BatchJob which can be used for management in a similar way to the standard job." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "qpu = remote.QPU(\"Artemis\")\n", "\n", "jobs = qpu.run(batch, job_name=\"Batch job\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, we can view the names of each job. This will be the base name specified to job_name with _X appended to it, where X is an integer." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['Batch job_1', 'Batch job_2', 'Batch job_3', 'Batch job_4']" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "jobs.names" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Other quantities of the jobs can then be accessed with the corresponding attribute, such as job ID, status and queue position." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'Batch job_1': '17763',\n", " 'Batch job_2': '17764',\n", " 'Batch job_3': '17765',\n", " 'Batch job_4': '17766'}" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "jobs.job_id" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'Batch job_1': ,\n", " 'Batch job_2': ,\n", " 'Batch job_3': ,\n", " 'Batch job_4': }" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "jobs.status" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'Batch job_1': None, 'Batch job_2': 2, 'Batch job_3': 3, 'Batch job_4': 4}" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "jobs.queue_position" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There is then also attributes for checking whether all jobs are complete & successful." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Complete: False\n", "Successful: False\n" ] } ], "source": [ "print(\"Complete: \", jobs.all_complete)\n", "print(\"Successful:\", jobs.all_success)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And jobs can be cancelled if this is required." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "if False:\n", " jobs.cancel_all()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The batch job also behaves similar to a dictionary, meaning standard operations such as iteration can be used to access the individual jobs if this is required." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Batch job_1 Running\n", "Batch job_2 Scheduled\n", "Batch job_3 Scheduled\n", "Batch job_4 Scheduled\n" ] } ], "source": [ "for name, job in jobs.items():\n", " print(name, job.status)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Results\n", "Once jobs are complete, the results can then be downloaded. This can be completed in a single command using ``get_all_results()``. If for some reason no results have been generated, this will create a warning message rather than raising an exception." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "jobs.wait_until_complete()\n", "all_results = jobs.get_all_results()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternatively, the job name can be used to retrieve individual results if this is required." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "result = jobs.get_result(jobs.names[0])" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmEAAAI/CAYAAAA/cQ7MAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAALYxJREFUeJzt3QuUVmW9P/AfyE1UQEC5HEC8myJoWIiWkTcU82hxTpl1xI55S02llkZpXqqFR03INPS0zEsn0yzRvC+hwFIplRBLMyFIShE1uRqDwvzXs9di/ozMcBk388z7zuez1l4z797v+/LwW/ud+c6zn/08bWpra2sDAIBm1bZ5/zkAABIhDAAgAyEMACADIQwAIAMhDAAgAyEMACADIQwAIIN2UeXWrFkTr7zySmy33XbRpk2b3M0BAKpYbW1tLFu2LPr27Rtt27Zt3SEsBbD+/fvnbgYA0IosWLAg+vXr17pDWOoBW1uMLl265G4OAFDFli5dWnT+rM0frTqErb0EmQKYEAYANIdNGQJlYD4AQAZCGABABkIYAEAGQhgAQGsOYVdccUUxiO28886r27dy5co466yzokePHrHtttvG6NGj47XXXsvaTgCAqglhTz31VNx4440xePDgevvPP//8uO++++Kuu+6K6dOnF3N+fepTn8rWTgCAqglhy5cvj8997nPxwx/+MLbffvu6/UuWLImbbroprrnmmjj00ENj6NChcfPNN8cTTzwRM2bMyNpmAICKD2HpcuMxxxwThx9+eL39zzzzTLzzzjv19u+1114xYMCAePLJJxt9v5qammKitHU3AICWJutkrXfccUfMnDmzuBz5XgsXLowOHTpEt27d6u3v1atXcawx48ePj8suu2yLtBcAoOJ7wtIyQueee2785Cc/iU6dOpX2vuPGjSsuZa7d0r8DANDSZAth6XLjokWL4oMf/GC0a9eu2NLg+2uvvbb4PvV4rVq1KhYvXlzvdenuyN69ezf6vh07dqxboshSRQBAS5XtcuRhhx0Wzz33XL19X/jCF4pxXxdeeGGx+GX79u1j6tSpxdQUyYsvvhgvv/xyDB8+PFOrAQAqPISl1cUHDRpUb98222xTzAm2dv8pp5wSY8eOje7duxc9Wuecc04RwA488MBMrQYAqIKB+RszYcKEaNu2bdETlu56HDlyZPzgBz/I3SwAgPet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youGDBlS7+7Ita666qpo165JbwkA0Ko0qSdsl112iTfffHO9/StXrow99tijjHYBAFS1JoWw+fPnx+rVq9fbX1NTE3//+9/LaBcAQFXbrGuHv/zlL+u+f+SRR6Jr1651j1Momzp1auy8887lthAAoLWHsDQrftKmTZsYM2ZMvWPt27ePgQMHxne/+91yWwgA0NpD2Nq5wVJv11NPPRU9e/bcUu0CAKhqTbqVMc0HBgBA0zV5Pok0/ittixYtqushW+tHP/rR+2gSAED1a1IIu+yyy+Lyyy8vZs7v06dPMUYMAIAtHMJuuOGGYrHu//qv/2rKywEAWr0mzRO2atUqyxMBADR3CPviF78Yt99++/v5dwEAWrUmXY5MyxP97//+b0yZMiUGDx5czBG2rmuuuaas9gEAVKUmhbDZs2fHfvvtV3z/xz/+sd4xg/QBALZQCPv1r3/dlJcBAPB+xoQBAJChJ+zjH//4Bi87/upXv3o/bQIAqHpN6glL48GGDBlSt+29997FtBUzZ86Mfffdd5PfZ/z48fGhD30otttuu9hxxx2LBcJffPHF9W4COOuss6JHjx6x7bbbxujRo+O1115rSrMBACq7J2zChAkN7r/00ktj+fLlm/w+06dPLwJWCmLvvvtufP3rX48jjzwynn/++dhmm22K55x//vnxwAMPxF133RVdu3aNs88+Oz71qU/F448/3pSmAwBU9tqRDfn85z8fH/7wh+Pqq6/epOc//PDD9R6nWfhTj9gzzzwThxxySCxZsiRuuummYk6yQw89tHjOzTffHB/4wAdixowZceCBB673njU1NcW21tKlS9/3/wsAoEUPzH/yySejU6dOTX59Cl1J9+7di68pjL3zzjtx+OGH1z1nr732igEDBhT/VmOXOFOP2dqtf//+TW4PAECL6glLlwPXVVtbG6+++mo8/fTTcfHFFzepIWvWrInzzjsvDj744Bg0aFCxb+HChdGhQ4fo1q1bvef26tWrONaQcePGxdixY+v1hAliAEBVhLDUw7Sutm3bxp577hmXX355MaarKdLYsDTx629/+9t4Pzp27FhsAABVF8LSuKwypcH2999/fzz22GPRr1+/uv29e/cu7rpcvHhxvd6wdHdkOgYA0CoH5qcxWy+88ELx/T777BP777//Zr0+XcY855xzYvLkyTFt2rTYeeed6x0f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hDAAgAyEMACADIQwAIAMKiKEXX/99TFw4MDo1KlTDBs2LH7/+9/nbhIAQHWHsDvvvDPGjh0bl1xyScycOTOGDBkSI0eOjEWLFuVuGgBAk7WLFu6aa66JU089Nb7whS8Uj2+44YZ44IEH4kc/+lF87WtfW+/5NTU1xbbWkiVLiq9Lly7dou1cU/P2Fn3/SlNGvdW0PjUtn5qWT03Lp6bl25KZYO1719bWbvzJtS1YTU1N7VZbbVU7efLkevtPOumk2n//939v8DWXXHJJ+l/bbDabzWaz1ebaFixYsNGc06J7wt54441YvXp19OrVq97+9PjPf/5zg68ZN25ccflyrTVr1sQ///nP6NGjR7Rp0yaqWUrf/fv3jwULFkSXLl1yN6cqqGn51LR8alo+NS1fa6lpbW1tLFu2LPr27bvR57boENYUHTt2LLZ1devWLVqTdHJX8wmeg5qWT03Lp6blU9PytYaadu3atfIH5vfs2TO22mqreO211+rtT4979+6drV0AAO9Xiw5hHTp0iKFDh8bUqVPrXV5Mj4cPH561bQAA70eLvxyZxneNGTMmDjjggPjwhz8cEydOjBUrVtTdLcn/ly7Dpqk83ns5lqZT0/KpafnUtHxqWj41XV+bNDo/Wrjrrrsurrrqqli4cGHst99+ce211xaTtgIAVKqKCGEAANWmRY8JAwCoVkIYAEAGQhgAQAZCGABABkIYAEAGQhgAQAZCWBVJi53Pnj073n333dxNqRpqWj41LZ+alk9Ny6em6xPCqsh9990X+++/f9x55525m1I11LR8alo+NS2fmpZPTdcnhFWRW2+9NXbYYYe45ZZbcjelaqhp+dS0fGpaPjUtn5o2IM2YT+V7/fXXazt27Fj70EMP1bZv3752wYIFuZtU8dS0fGpaPjUtn5qWT00bpiesSvz0pz+NQYMGxVFHHRUf/ehH48c//nHuJlU8NS2fmpZPTcunpuVT04YJYVUide+edNJJxfef//zn47bbbsvdpIqnpuVT0/KpafnUtHxq2ohGesioIM8991xthw4diu7eZNmyZbWdO3eunTFjRu6mVSw1LZ+alk9Ny6em5VPTxukJq5LBjkceeWT07NmzeLztttvG8ccfb/Dj+6Cm5VPT8qlp+dS0fGq6ARsIaFSAd999t7Z37961P/vZz+rtf/DBB2u333772pqammxtq1RqWj41LZ+alk9Ny6emG6YnrMItWrQozjzzzDjuuOPq7R85cmSMHTs2Fi5cmK1tlUpNy6em5VPT8qlp+dR0w9qkJLaR5wAAUDI9YVWkpqam2CiPmlIJnKdQmYSwCvfoo4/GqFGjYvvtt4/OnTsXW/o+7ZsyZUru5lUkNW1ec+fOjUMPPTR3MyqO87R5OU/LN1dNhbBKv+Mk/cDt2rVrTJgwIe6///5iS99369atOGZCvM2jps1v+fLlMX369NzNqCjO0+bnPC3fcjU1JqyS7bHHHnHuuefGWWed1eDxH/zgB8UP5ZdeeqnZ21ap1LR811577QaP/+Mf/4irr746Vq9e3WxtqnTO0/I5T8unphsnhFWwTp06xbPPPht77rlng8dffPHF2G+//eJf//pXs7etUqlp+dq2bRt9+vSJDh06NHh81apVxR1SrfkH8eZynpbPeVo+Nd04lyMr2D777BM33XRTo8d/9KMfxd57792sbap0alq+nXbaqeiVmTdvXoPbAw88kLuJFcd5Wj7nafnUdOPabcJzaKG++93vxic+8Yl4+OGH4/DDD49evXoV+1977bWYOnVq/PWvf3WSbyY1Ld/QoUPjmWeeiU9/+tMNHm/Tpk2aNLrZ21XJnKflc56WT003zuXICjd//vyYNGlSzJgxo27Su969e8fw4cPjjDPOiIEDB+ZuYsVR03I9//zz8fbbb8cBBxzQ4PF33nknXnnlleKvZjad87RcztPyqenGCWEAABkYEwYAkIEQVuV23nnnOOWUU4ouX8qhpuVLEzZ+61vfKi5dUA7nafmcp+U7tJXXVAircmPGjClu/z344INzN6VqqGn5BgwYUAwo32uvvXI3pWo4T8vnPC3fgFZeU2PCgBZj6dKl0aVLl9zNgA1ynpZvaSutqRAGAJCBy5FVbMGCBfHf//3fuZtRVdS0fGluq8svvzx3Myry9v8vfelLsf/++xezkqctfZ/2pWNsvjfeeCOuvPLK+OQnP1lM9ZG29P1VV10Vr7/+eu7mVSQ13TA9YVUsLWvywQ9+sFUvCVE2NS2fmm6+hx56KI4//viibiNHjqw3Weujjz5aTJB57733FsfYNE899VRRr86dOzc4AW4aOP7II480OucV61PTjRPCKtgvf/nLDR5Ps2Z/5Stf8cttM6hp+WbPnr3B43/+85/js5/9rJpuhiFDhsRxxx3XaA/ipZdeGnffffdGa8//d+CBBxZ1veGGG4qZ3NeVfk2mCXBTPZ988slsbaw0arpxQliFL466sWUf0nG/3DadmjZvTdfuV9PNs/XWW8esWbMs4F1yTf/whz80epde+mMhXe5V002nphtnTFgFS2NA0l+7a9asaXCbOXNm7iZWHDUtX/fu3eOHP/xhgwv4pp7F+++/P3cTK05akmhDa0OmY615KZimSEs+/f73v2/0eDq29nIam0ZNN84C3lWwOGq6LNEQi6NuPjXdMjXd0PpwixcvVtPNlC5DnnjiiTFt2rQGx9qkhb1vv/323M2sKF/96lfjtNNOKz7/hx122Ho1TX9IXH311bmbWVHUdONcjqxgv/nNb2LFihVx1FFHNXg8HXv66afjYx/7WLO3rVKpafkmT55c1O3zn/98g8ffeuutYixemlyUTffEE0/EtddeW4ynee8C3ueee27xlc1z5513xoQJE4rQsPby+FZbbVX8ITF27Nj49Kc/nbuJFUdNN0wIA4B1vPPOO8XUCknPnj2jffv2uZtU8dS0YUIYAEAGBuZXuTSx6I9//OPczagqarplxjilS8GUp7UvjLwl+OyX779beU31hFW5ESNGxPz586Nbt27FLe28f2pavp133rkYrJsG79533325m1MVTj755OI8TXegvvzyy7mbUxV89ss3opXXVAhrJdIyJnvvvXfuZlQVNS1Xmivo17/+dYwaNSp3U6pKa10YeUvy2S/f8620pkIYAEAG5gmrYunW/3Rp56STTsrdlIqyatWquOeee9a79f+ggw4q5g/r0KFD7iZWpDQxY0PTKXz4wx/O3bSqky7t3njjjfHNb34zd1Mqis9+83rL7yg9YdXMwsibb86cOcWCs2ly0WHDhtWbXPB3v/td9OvXr1g8ebfddsvd1IqxaNGiGD16dDz++OMxYMCAejVNY5UOPvjg+MUvfhE77rhj7qZWDZ/9zeez3/yedZ7qCav0sR4bsmzZsmZrS7U488wzY9999y3WO3vvOJpU7/QX21lnnRWPPPJItjZWmi996UvFD9kXXnhhvbUO0xqH6e6oVNO77rorWxsrzcYW5k51ZfP47JfP76iN0xNWBQsjN8bCyJuvc+fOxWWzQYMGNXj8ueeeK/5Kdtv/pttuu+3iscceKxbqbUiaSTvdIeUH8qazKHr5fPbL53fUxukJq/Bfbt/4xjeKHwwNeemll+L0009v9nZVsnSbdLpdurEfxGtvpWbTdezYcYN/EafwlZ7D5i2KfuWVVxZTejTkT3/6Uxx77LHN3q5K5rNfPr+jNk4Iq2DpWnrS2DqG6QeGjs7N88UvfrG47HDxxRc3uODst7/97TjnnHNyN7OifOYznynWhUzrx6Warr3Uk4JZqmlaP+6zn/1s7mZWFIuil89nv3x+R22cEFbBTjzxxGJupcaku3ouueSSZm1TNczcvs0228RVV10VX/nKV+q60tMPilTPCy+8MC644ILczawo11xzTaxZsyZOOOGEePfdd+vuMEt3orVr1y5OOeWUuPrqq3M3s6KcccYZxaLojUk3QNx8883N2qZK57NfPr+jNs6YMGjEvHnz6t2mnmZ1p+lSz1ca/7VuTVOPjolEaWl89mkuQhgAQAYW8K5yt912W8ydOzd3M6qKxabL5zwtn/O0fGpavtta+WdfT1gruEW4ffv2cdppp8X3v//93M2pChabLp/ztHzO0/KpafnatvLPvoH5VS4NiE7jG9JMz5Qj1XPtYtOUw3laPudp+dS0fGta+WdfTxgAQAZ6wqpAuosnrW227t08aXK89JVypWkB0h1+hxxySO6mVBznafNxnpZPTZvOZ79xesIq/IdCmm34jjvuKOa0SbNoJ//85z+LuW3SBJg33nhjsRwH5bDg7OZznjY/52n51HTz+exvnLsjK9i5555brHX2wAMPxMqVK4sBo2lL3z/44IPFsfQcyMl5Cq2Tz/7G6QmrYNtvv31xch900EENHn/88cfjE5/4RLz11lvN3rZKtfYvtcakv4KXL1/ur+HN4Dwtn/O0fGpaPp/9jTMmrMLvKlm7BExD0rH0HDZdTU1NnHnmmbHvvvs2ePxvf/tbXHbZZc3erkrmPC2f87R8alo+n/1NkHrCqEwnnnhi7f777187c+bM9Y6lfUOHDq393Oc+l6Vtleqggw6qnThxYqPHZ82aVdu2bdtmbVOlc56Wz3laPjUtn8/+xhkTVsGuu+666NWrV7H+Xo8ePeIDH/hAsaXvDzjggNhxxx2L57DpjjnmmFi8ePEGL1mcdNJJzdqmSuc8LZ/ztHxqWj6f/Y0zJqwKvPDCC/Hkk08WAx6TdNvv8OHDY6+99srdNKjjPIXWyWe/cUIYAEAGBuZX8Bpmad6VzXXeeefFl7/85S3SpkqnpuVT0/KpafnUtHxqumn0hFWo6dOnN+l1AwcOjJ122qn09lQDNS2fmpZPTcunpuVT000jhAEAZODuSACADIQwAIAMhDAAgAyEMACADIQwAIAMhDCgar3++uvFoswDBgyIjh07FjN1jxw5Mh5//PHieJrH6J577mnSbfQTJ07cAi0GWhOTtQJVa/To0bFq1aq49dZbY5dddimWTZk6dWq8+eabuZsGYJ4woDqlxZi33377mDZtWnzsYx9rsDfrb3/7W93jNEHk/PnzY+7cuTF27NiYMWNGrFixolhwePz48XH44YcXzxsxYsR6E1Gu/TH629/+NsaNGxdPP/109OzZMz75yU8Wr91mm222+P8XqDwuRwJVadttty22dLmxpqZmveNPPfVU8fXmm2+OV199te7x8uXLY9SoUUWP2R/+8Ic46qij4thjj42XX365OH733XdHv3794vLLLy9el7Ykhbf03NT7Nnv27LjzzjuLUHb22Wc36/8bqBx6woCq9Ytf/CJOPfXU+Ne//hUf/OAHix6xE044IQYPHlw3Jmzy5Mlx/PHHb/B9Bg0aFGeccUZdoEq9aGmNu7St9cUvfjG22mqruPHGG+v2pRCW/s3Uo9apU6ct9v8EKpOeMKBqpV6pV155JX75y18WvVTp0mQKY7fcckujr0k9YV/96leLy5DdunUretNeeOGFup6wxjz77LPF+67tgUtbuglgzZo1MW/evC3wvwMqnYH5QFVLPVBHHHFEsV188cVFj9Ull1wSJ598coPPTwHs0Ucfjauvvjp222232HrrreM//uM/igH+G5LC2+mnnx5f/vKX1zuW7s4EeC8hDGhV9t5777ppKdq3bx+rV6+udzxNX5ECWhpUvzZcpQH76+rQocN6r0s9bM8//3wR3AA2hcuRQFVK01Aceuih8X//93/FQPl0SfCuu+6KK6+8Mo477ri6sV1pAP7ChQvjrbfeKvbtvvvuxeD7WbNmFZcYTzzxxOKS4rrS6x577LH4xz/+EW+88Uax78ILL4wnnniiGDeWXvvSSy/Fvffea2A+0CghDKhKaUzWsGHDYsKECXHIIYcUg+vT5cg0UP+6664rnvPd7363uPTYv3//2H///Yt911xzTTG1xUEHHVTcFZnGdaVernWlOyNT79iuu+4aO+ywQ7EvDfZPU1f85S9/iY9+9KPF+33zm9+Mvn37ZvjfA5XA3ZEAABnoCQMAyEAIAwDIQAgDAMhACAMAyEAIAwDIQAgDAMhACAMAyEAIAwDIQAgDAMhACAMAyEAIAwCI5vf/AHCLdVeDim/VAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "result.plot()" ] } ], "metadata": { "kernelspec": { "display_name": "venv", "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.6" } }, "nbformat": 4, "nbformat_minor": 2 }