{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "0",
   "metadata": {},
   "source": [
    "# Using widgets in IPython Parallel\n",
    "\n",
    "IPython Parallel 7.1 introduces basic support for using Jupyter widgets from a notebook to engines.\n",
    "\n",
    "This allows things like progress bars for incremental stages,\n",
    "when IPP's own task-level progress doesn't show you enough information.\n",
    "\n",
    "As always, we start by creating and connecting to a cluster:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Starting 4 engines with <class 'ipyparallel.cluster.launcher.LocalEngineSetLauncher'>\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8ac284e0bbb1461baef9fffe347c18a0",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/4 [00:00<?, ?engine/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<DirectView all>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import ipyparallel as ipp\n",
    "\n",
    "rc = ipp.Cluster(n=4).start_and_connect_sync()\n",
    "rc.activate()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2",
   "metadata": {},
   "source": [
    "IPython widgets support updateable readouts of things like progress.\n",
    "\n",
    "There are [lots of widgets to choose from][widget list], but for our purposes,\n",
    "we are going to use `IntProgress`\n",
    "\n",
    "[widget list]: https://ipywidgets.readthedocs.io/en/stable/examples/Widget%20List.html"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "dc361372c39e4a88a9eddd35967bc4b8",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "IntProgress(value=0, description='Step 0', max=10)"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import time\n",
    "\n",
    "import ipywidgets as W\n",
    "from IPython.display import display\n",
    "\n",
    "progress = W.IntProgress(min=0, max=10, description=\"Step 0\", readout=True)\n",
    "display(progress)\n",
    "\n",
    "for i in range(10):\n",
    "    progress.value += 1\n",
    "    progress.description = f\"Step {progress.value}/{progress.max}\"\n",
    "    time.sleep(0.1)\n",
    "\n",
    "progress.bar_style = \"success\"  # change color when it's done"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4",
   "metadata": {},
   "source": [
    "IPython Parallel supports progress and interactive waits on AsyncResult objects,\n",
    "which is great when your tasks are small and you have a lot of them:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "b969bda88b784a9fb4c1b3e47af978d1",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "<lambda>:   0%|          | 0/1000 [00:00<?, ?tasks/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "view = rc.load_balanced_view()\n",
    "view.map_async(lambda x: x * 2, range(1000)).wait_interactive()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6",
   "metadata": {},
   "source": [
    "but the unit of progress is each function call.\n",
    "\n",
    "If you have only a few large *IPython* tasks,\n",
    "you only get feedback when the whole task is done on a given engine:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "99c7845dd95e421ebd670f1b7d796301",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "%px:   0%|          | 0/4 [00:00<?, ?tasks/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%%px --block\n",
    "import time\n",
    "\n",
    "\n",
    "def do_some_work(t):\n",
    "    time.sleep(t)\n",
    "\n",
    "\n",
    "do_some_work(5)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8",
   "metadata": {},
   "source": [
    "Combining widgets with tasks allows us to show our progress in stages, including showing progress for every engine.\n",
    "\n",
    "This way we get to see progress *within* the task, even though IPython Parallel can't tell what's going on within your black-box task"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AsyncResult(scatter): pending>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rc[:].scatter(\"rank\", rc.ids, flatten=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "10",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[output:1]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "fab62a72396946c4a23713818e810cf6",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "IntProgress(value=0, description='rank 1: 0', max=10)"
      ]
     },
     "metadata": {
      "engine": 1
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "[output:3]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "09fed44290574465abc2af7da1473db8",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "IntProgress(value=0, description='rank 3: 0', max=10)"
      ]
     },
     "metadata": {
      "engine": 3
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "[output:0]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6ba7ddeac80b4b25af7e2f76df76fb9f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "IntProgress(value=0, description='rank 0: 0', max=10)"
      ]
     },
     "metadata": {
      "engine": 0
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "[output:2]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "9248af9c8c604c30a83386b742afab1d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "IntProgress(value=0, description='rank 2: 0', max=10)"
      ]
     },
     "metadata": {
      "engine": 2
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "cb2270f240a547e0a6e14a500026deb3",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "%px:   0%|          | 0/4 [00:00<?, ?tasks/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%%px --block\n",
    "import random\n",
    "\n",
    "import ipywidgets as W\n",
    "from IPython.display import display\n",
    "\n",
    "rank = globals()[\"rank\"]  # no-op for linter\n",
    "n_steps = 10\n",
    "\n",
    "rank  # noqa\n",
    "progress = W.IntProgress(max=n_steps, description=f\"rank {rank}: 0\")\n",
    "\n",
    "\n",
    "def _set_color(change):\n",
    "    if change.new == progress.max:\n",
    "        progress.bar_style = \"success\"\n",
    "    else:\n",
    "        progress.bar_style = \"\"\n",
    "\n",
    "\n",
    "progress.observe(_set_color, \"value\")\n",
    "display(progress)\n",
    "\n",
    "for i in range(n_steps):\n",
    "    time.sleep(random.random())\n",
    "    progress.value += 1\n",
    "    progress.description = f\"rank {rank}: {progress.value}/{progress.max}\""
   ]
  },
  {
   "cell_type": "markdown",
   "id": "11",
   "metadata": {},
   "source": [
    "Producing progress bars for every engine can get *very* unwieldy if you have more than a few engines.\n",
    "\n",
    "Here's an example where only rank 0 reports its progress,\n",
    "giving a more succinct presentation, assuming rank 0 knows sufficient information about what's going on\n",
    "(e.g. an MPI-based simulation).\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "12",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[output:0]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8de22f6be92143b8bb8c88c3b0f46e9c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "IntProgress(value=0, description='Step 0', max=10)"
      ]
     },
     "metadata": {
      "engine": 0
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "accabe33802e4865a0fec03c04511282",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "%px:   0%|          | 0/4 [00:00<?, ?tasks/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "[stdout:0] rank 0: done!\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "[stdout:1] rank 1: done!\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "[stdout:3] rank 3: done!\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "[stdout:2] rank 2: done!\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%%px --block\n",
    "import random\n",
    "import time\n",
    "\n",
    "import ipywidgets as W\n",
    "from IPython.display import display\n",
    "\n",
    "n_steps = 10\n",
    "\n",
    "if rank == 0:\n",
    "    progress = W.IntProgress(max=n_steps, description=\"Step 0\")\n",
    "\n",
    "    def _set_color(change):\n",
    "        if change.new == progress.max:\n",
    "            progress.bar_style = \"success\"\n",
    "        else:\n",
    "            progress.bar_style = \"\"\n",
    "\n",
    "    progress.observe(_set_color, \"value\")\n",
    "    display(progress)\n",
    "\n",
    "for i in range(n_steps):\n",
    "    time.sleep(random.random())\n",
    "    if rank == 0:\n",
    "        progress.value += 1\n",
    "        progress.description = f\"Step {progress.value}/{progress.max}\"\n",
    "\n",
    "print(f\"rank {rank}: done!\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "13",
   "metadata": {},
   "source": [
    "Widgets also support two-way communication,\n",
    "using buttons and text areas for input.\n",
    "These also work in IPython Parallel,\n",
    "allowing feedback between engines and a notebook."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "14",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[output:2]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "240ce0163a9e4692b91ab8291c003ef7",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(Label(value='Rank 2'), Button(description='step', style=ButtonStyle()), IntProgress(value=0, de…"
      ]
     },
     "metadata": {
      "engine": 2
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "[output:3]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "2535d1a7bcb241daae902a85961f2f12",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(Label(value='Rank 3'), Button(description='step', style=ButtonStyle()), IntProgress(value=0, de…"
      ]
     },
     "metadata": {
      "engine": 3
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "[output:0]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "dd8fcf2620ea4455a0eca912d7f07304",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(Label(value='Rank 0'), Button(description='step', style=ButtonStyle()), IntProgress(value=0, de…"
      ]
     },
     "metadata": {
      "engine": 0
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "[output:1]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4386515aba0c4307956336cc1d058d2c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(Label(value='Rank 1'), Button(description='step', style=ButtonStyle()), IntProgress(value=0, de…"
      ]
     },
     "metadata": {
      "engine": 1
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "%%px\n",
    "button = W.Button(description=\"step\")\n",
    "progress = W.IntProgress(max=5, description=\"0 / 5\")\n",
    "count = 0\n",
    "\n",
    "\n",
    "def click_increment(_):\n",
    "    progress.value += 1\n",
    "    progress.description = f\"{progress.value} / {progress.max}\"\n",
    "    if progress.value == progress.max:\n",
    "        button.disabled = True\n",
    "        progress.bar_style = \"success\"\n",
    "\n",
    "\n",
    "button.on_click(click_increment)\n",
    "\n",
    "display(W.HBox([W.Label(f\"Rank {rank}\"), button, progress]))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "15",
   "metadata": {},
   "source": [
    "This lets you build interactive displays with parallel execution on remote engines.\n",
    "Useful? Maybe!"
   ]
  }
 ],
 "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.11.9"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {
     "022c67a9735445a3a4b404cc382f2c0b": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "0396bd0669ad4f1eb94ad97767570580": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "09fed44290574465abc2af7da1473db8": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "IntProgressModel",
      "state": {
       "bar_style": "success",
       "description": "rank 3: 10/10",
       "layout": "IPY_MODEL_3cd128014aea4596b133e1fb27cd6506",
       "max": 10,
       "style": "IPY_MODEL_70a40a7bf5194db3955252244cc5386b",
       "value": 10
      }
     },
     "0d530c7470114d6cbd56e5839641a4d0": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_67807149499243e59f2c0a39f7239f0f",
       "style": "IPY_MODEL_b78077dbe0a8420fa757f6f3011eb1bc",
       "value": " 4/4 [00:03&lt;00:00,  2.50tasks/s]"
      }
     },
     "0dc7ece673614bbeb02eb0ad0d187a43": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "FloatProgressModel",
      "state": {
       "bar_style": "success",
       "layout": "IPY_MODEL_d1d66100a6f44f85be6903c5f2f0f44b",
       "max": 4,
       "style": "IPY_MODEL_cd079a6f0776464f8082410876c9da99",
       "value": 4
      }
     },
     "0f5f37856a2c40b793a4bbafd300477a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "FloatProgressModel",
      "state": {
       "bar_style": "success",
       "layout": "IPY_MODEL_ae56162cefc44f6fb4291908c35f82b4",
       "max": 4,
       "style": "IPY_MODEL_b480a6b8239c4057aedf553f4f1ad700",
       "value": 4
      }
     },
     "162857ac45494476883899fb28ca595b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "1918470b284841369b2dcebb3275fae8": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "1e63c602e2254fc0a8c7b216c1f07f11": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_e1b9e32204bc4528a5f47de591b82668",
       "style": "IPY_MODEL_5cc61feef6ba4cf2a7fa733ed56b9e53",
       "value": " 4/4 [00:03&lt;00:00,  1.60tasks/s]"
      }
     },
     "2302ec5c054d48b09386ec17c2383a77": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "23b7d21c052747c0828d96aad87a50ed": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "23be2c11121b4ae7bc64ffed95fd039b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "IntProgressModel",
      "state": {
       "bar_style": "success",
       "description": "5 / 5",
       "layout": "IPY_MODEL_7103d7d342be4147872a45c376d57788",
       "max": 5,
       "style": "IPY_MODEL_97f6e96e07a64294b722d53aeda18848",
       "value": 5
      }
     },
     "240ce0163a9e4692b91ab8291c003ef7": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_2e3fabd7d36647f28217c2dad3274c69",
        "IPY_MODEL_4da756ba89df4956be648d25d4eb36b4",
        "IPY_MODEL_4adf01661b1a4f7bbd2c312855ac25e8"
       ],
       "layout": "IPY_MODEL_b611c16816984683943384e12b518a10"
      }
     },
     "2535d1a7bcb241daae902a85961f2f12": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_62f81dcd60d44708ba9f51f7eb9be149",
        "IPY_MODEL_ed27055171a74616af739ab0668de416",
        "IPY_MODEL_23be2c11121b4ae7bc64ffed95fd039b"
       ],
       "layout": "IPY_MODEL_cb13d5d423ee4b8bb2f0783b35dddd7d"
      }
     },
     "25f223a4a0174cc2899e0d1c3c7f9e2b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "IntProgressModel",
      "state": {
       "bar_style": "success",
       "description": "5 / 5",
       "layout": "IPY_MODEL_bf46dbf1a50c4b32a116dcfb942e515b",
       "max": 5,
       "style": "IPY_MODEL_54e35c697c3441dc908f54e3fdb09794",
       "value": 5
      }
     },
     "2a72d97fc59b4f91b7fe8084785894f4": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "2c6d88aea33044f3a1b34951376832c5": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "2db634a473384786b1e0a369fb6f1d97": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "2dc7759c554f409496606f6ea90d1385": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "2e3fabd7d36647f28217c2dad3274c69": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "LabelModel",
      "state": {
       "layout": "IPY_MODEL_eb943255bb5048b8a2f95e98ff3d2b81",
       "style": "IPY_MODEL_d534cab0b284493ab9abe809d24d00c6",
       "value": "Rank 2"
      }
     },
     "3070ed901a304be8bdbb4196ef48e80b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ButtonModel",
      "state": {
       "description": "step",
       "disabled": true,
       "layout": "IPY_MODEL_022c67a9735445a3a4b404cc382f2c0b",
       "style": "IPY_MODEL_39596ba22f80426b92e885a6a9e5872a",
       "tooltip": null
      }
     },
     "3094769ba0f2407a95eee597e49df769": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_2db634a473384786b1e0a369fb6f1d97",
       "style": "IPY_MODEL_be204d35d6f749ee9ae0d1c9f4bd557b",
       "value": "%px: 100%"
      }
     },
     "3171e167679a4f108c71a65960763b9c": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "35fe77a3ce544f30afe244768c4df032": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_9d00e42a38d94417b67598b264bb584c",
       "style": "IPY_MODEL_d25b3986fa4946a5af61861c578f5d14",
       "value": "100%"
      }
     },
     "39596ba22f80426b92e885a6a9e5872a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ButtonStyleModel",
      "state": {
       "font_family": null,
       "font_size": null,
       "font_style": null,
       "font_variant": null,
       "font_weight": null,
       "text_color": null,
       "text_decoration": null
      }
     },
     "3cd128014aea4596b133e1fb27cd6506": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "3de6c39780454cc68a906800e7184e37": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "LabelModel",
      "state": {
       "layout": "IPY_MODEL_4c20c114847c44c8b155229eb4b87aa4",
       "style": "IPY_MODEL_d42ee6c118b34c5b80dc752b3041d022",
       "value": "Rank 0"
      }
     },
     "41b859a87acd4ccd8a5c3849fa19b620": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "4386515aba0c4307956336cc1d058d2c": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_7ba31ad7aaf147f59638e05ea162657e",
        "IPY_MODEL_3070ed901a304be8bdbb4196ef48e80b",
        "IPY_MODEL_b03a7913ca144f2c9660e51583b4bbbc"
       ],
       "layout": "IPY_MODEL_2dc7759c554f409496606f6ea90d1385"
      }
     },
     "4aae2a5883d64066bf41e62cc85d49bf": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "4adf01661b1a4f7bbd2c312855ac25e8": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "IntProgressModel",
      "state": {
       "bar_style": "success",
       "description": "5 / 5",
       "layout": "IPY_MODEL_99142de920c2424d847acc03e4691bcf",
       "max": 5,
       "style": "IPY_MODEL_eb35b76e23994650944295bddf2ae569",
       "value": 5
      }
     },
     "4c20c114847c44c8b155229eb4b87aa4": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "4da756ba89df4956be648d25d4eb36b4": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ButtonModel",
      "state": {
       "description": "step",
       "disabled": true,
       "layout": "IPY_MODEL_99ebdf0f94b14006be7716523fddcf60",
       "style": "IPY_MODEL_ca639914d53f4fb7a4a9401c2c4922da",
       "tooltip": null
      }
     },
     "4f60d745cfce49f89bae04701006ef43": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "LabelStyleModel",
      "state": {
       "description_width": "",
       "font_family": null,
       "font_size": null,
       "font_style": null,
       "font_variant": null,
       "font_weight": null,
       "text_color": null,
       "text_decoration": null
      }
     },
     "54e35c697c3441dc908f54e3fdb09794": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "553df0ce453140458f0fd22803ccaaa1": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "5ace4bdeb787499ea8d636013b43df6a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "5cc61feef6ba4cf2a7fa733ed56b9e53": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "5dbd34c5aa7047c490c2739824ca7f1a": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "62f81dcd60d44708ba9f51f7eb9be149": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "LabelModel",
      "state": {
       "layout": "IPY_MODEL_8278b17c1ee543fea1fd690586cd1401",
       "style": "IPY_MODEL_4f60d745cfce49f89bae04701006ef43",
       "value": "Rank 3"
      }
     },
     "6610b8945b8b4e05a836658c3a1b535a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "FloatProgressModel",
      "state": {
       "bar_style": "success",
       "layout": "IPY_MODEL_1918470b284841369b2dcebb3275fae8",
       "max": 4,
       "style": "IPY_MODEL_da83de2aa14c407d8f24ef196575cd3a",
       "value": 4
      }
     },
     "6731f21d89f24d8d8b4f5feabf45030f": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "675959bbb64747218953e77e4c4b238a": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "67807149499243e59f2c0a39f7239f0f": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "6ba7ddeac80b4b25af7e2f76df76fb9f": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "IntProgressModel",
      "state": {
       "bar_style": "success",
       "description": "rank 0: 10/10",
       "layout": "IPY_MODEL_d947ca1b25844bf7a688e8e81824a902",
       "max": 10,
       "style": "IPY_MODEL_2c6d88aea33044f3a1b34951376832c5",
       "value": 10
      }
     },
     "6c615290543143e09a86d38ad7b947e2": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ButtonModel",
      "state": {
       "description": "step",
       "disabled": true,
       "layout": "IPY_MODEL_23b7d21c052747c0828d96aad87a50ed",
       "style": "IPY_MODEL_fa2a190342324e8ba9a4b6e1a6f4f630",
       "tooltip": null
      }
     },
     "6fee699e594b4929ac50cac6740d430a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_87c4845abf1645829fa9d678b251cb97",
       "style": "IPY_MODEL_e295f260ff824f1da9204d96b0cd91cb",
       "value": "%px: 100%"
      }
     },
     "70a40a7bf5194db3955252244cc5386b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "7103d7d342be4147872a45c376d57788": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "73d5aa928305492396f10329278b3dfc": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "75c5a049a5d14135a261efe0c15e8ac6": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "7ba31ad7aaf147f59638e05ea162657e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "LabelModel",
      "state": {
       "layout": "IPY_MODEL_faef247a976a496bb993d02c1dd981b6",
       "style": "IPY_MODEL_90768790cc264f0781fad7a0502a4a97",
       "value": "Rank 1"
      }
     },
     "7c4d199ea5334ce894d3e90ec2261bcc": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_8743f281c60147a9b57e367e7ee8d85d",
       "style": "IPY_MODEL_c098ddf8fb104285aa13916e0f0d3225",
       "value": " 1000/1000 [00:01&lt;00:00, 830.25tasks/s]"
      }
     },
     "7d3c5bc88c784f529091cf6abce25da3": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "7e0d679b16d3491e92e854c9ac6b5277": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "8278b17c1ee543fea1fd690586cd1401": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "8392950c26104a338546c3dfe610b664": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ButtonStyleModel",
      "state": {
       "font_family": null,
       "font_size": null,
       "font_style": null,
       "font_variant": null,
       "font_weight": null,
       "text_color": null,
       "text_decoration": null
      }
     },
     "8743f281c60147a9b57e367e7ee8d85d": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "87c4845abf1645829fa9d678b251cb97": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "8ac284e0bbb1461baef9fffe347c18a0": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_35fe77a3ce544f30afe244768c4df032",
        "IPY_MODEL_6610b8945b8b4e05a836658c3a1b535a",
        "IPY_MODEL_a10db479944946c4b53af8c3c2b399d1"
       ],
       "layout": "IPY_MODEL_7e0d679b16d3491e92e854c9ac6b5277"
      }
     },
     "8de22f6be92143b8bb8c88c3b0f46e9c": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "IntProgressModel",
      "state": {
       "bar_style": "success",
       "description": "Step 10/10",
       "layout": "IPY_MODEL_fe2b55553a8943498463e7c6fef3d54c",
       "max": 10,
       "style": "IPY_MODEL_6731f21d89f24d8d8b4f5feabf45030f",
       "value": 10
      }
     },
     "8fee001a7c7d4dc8a48b80720f478e15": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_d0f7bcffc7254622b97a2af4f31b24b6",
       "style": "IPY_MODEL_162857ac45494476883899fb28ca595b",
       "value": "%px: 100%"
      }
     },
     "90768790cc264f0781fad7a0502a4a97": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "LabelStyleModel",
      "state": {
       "description_width": "",
       "font_family": null,
       "font_size": null,
       "font_style": null,
       "font_variant": null,
       "font_weight": null,
       "text_color": null,
       "text_decoration": null
      }
     },
     "90bc433874d641da8199cf9c8e249027": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "921427c314b04bf7a89b23638a5db5b3": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "FloatProgressModel",
      "state": {
       "bar_style": "success",
       "layout": "IPY_MODEL_41b859a87acd4ccd8a5c3849fa19b620",
       "max": 1000,
       "style": "IPY_MODEL_3171e167679a4f108c71a65960763b9c",
       "value": 1000
      }
     },
     "9248af9c8c604c30a83386b742afab1d": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "IntProgressModel",
      "state": {
       "bar_style": "success",
       "description": "rank 2: 10/10",
       "layout": "IPY_MODEL_a0e732b20b1840cb865abb7493227a92",
       "max": 10,
       "style": "IPY_MODEL_4aae2a5883d64066bf41e62cc85d49bf",
       "value": 10
      }
     },
     "97f6e96e07a64294b722d53aeda18848": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "99142de920c2424d847acc03e4691bcf": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "99c7845dd95e421ebd670f1b7d796301": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_6fee699e594b4929ac50cac6740d430a",
        "IPY_MODEL_0dc7ece673614bbeb02eb0ad0d187a43",
        "IPY_MODEL_a011b3e7f0e249b58aab0572a90b8f7a"
       ],
       "layout": "IPY_MODEL_e0d3364c33f742739500611508b6e9f6"
      }
     },
     "99ebdf0f94b14006be7716523fddcf60": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "99f78fffd42448b0b0015a2016d7a311": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "9ab2d57894284d86887ae5a2642ad71c": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "9d00e42a38d94417b67598b264bb584c": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "a011b3e7f0e249b58aab0572a90b8f7a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_2302ec5c054d48b09386ec17c2383a77",
       "style": "IPY_MODEL_7d3c5bc88c784f529091cf6abce25da3",
       "value": " 4/4 [00:03&lt;00:00,  1.32tasks/s]"
      }
     },
     "a0e732b20b1840cb865abb7493227a92": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "a10db479944946c4b53af8c3c2b399d1": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_5dbd34c5aa7047c490c2739824ca7f1a",
       "style": "IPY_MODEL_bb8ebf3a06484f81b66b32d43c853578",
       "value": " 4/4 [00:01&lt;00:00,  4.32engine/s]"
      }
     },
     "a52d476b2ed343e39e2de62681db9458": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "accabe33802e4865a0fec03c04511282": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_8fee001a7c7d4dc8a48b80720f478e15",
        "IPY_MODEL_e8058b4c2079477d943495c3708d0cf2",
        "IPY_MODEL_0d530c7470114d6cbd56e5839641a4d0"
       ],
       "layout": "IPY_MODEL_c2fb9eb985b24c418241b14f6dc9f389"
      }
     },
     "ae56162cefc44f6fb4291908c35f82b4": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "af7b0bb943904379901bda4976ebc7de": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "b03a7913ca144f2c9660e51583b4bbbc": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "IntProgressModel",
      "state": {
       "bar_style": "success",
       "description": "5 / 5",
       "layout": "IPY_MODEL_99f78fffd42448b0b0015a2016d7a311",
       "max": 5,
       "style": "IPY_MODEL_a52d476b2ed343e39e2de62681db9458",
       "value": 5
      }
     },
     "b480a6b8239c4057aedf553f4f1ad700": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "b611c16816984683943384e12b518a10": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "b78077dbe0a8420fa757f6f3011eb1bc": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "b969bda88b784a9fb4c1b3e47af978d1": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_f4f4c1d2c1a94f698ae3c52994af9e8a",
        "IPY_MODEL_921427c314b04bf7a89b23638a5db5b3",
        "IPY_MODEL_7c4d199ea5334ce894d3e90ec2261bcc"
       ],
       "layout": "IPY_MODEL_af7b0bb943904379901bda4976ebc7de"
      }
     },
     "bb8ebf3a06484f81b66b32d43c853578": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "be204d35d6f749ee9ae0d1c9f4bd557b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "bf46dbf1a50c4b32a116dcfb942e515b": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "c098ddf8fb104285aa13916e0f0d3225": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "c2fb9eb985b24c418241b14f6dc9f389": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "ca639914d53f4fb7a4a9401c2c4922da": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ButtonStyleModel",
      "state": {
       "font_family": null,
       "font_size": null,
       "font_style": null,
       "font_variant": null,
       "font_weight": null,
       "text_color": null,
       "text_decoration": null
      }
     },
     "cb13d5d423ee4b8bb2f0783b35dddd7d": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "cb2270f240a547e0a6e14a500026deb3": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_3094769ba0f2407a95eee597e49df769",
        "IPY_MODEL_0f5f37856a2c40b793a4bbafd300477a",
        "IPY_MODEL_1e63c602e2254fc0a8c7b216c1f07f11"
       ],
       "layout": "IPY_MODEL_675959bbb64747218953e77e4c4b238a"
      }
     },
     "cd079a6f0776464f8082410876c9da99": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "cf64e96669f949eb845f5638585dfd25": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "d0f7bcffc7254622b97a2af4f31b24b6": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "d1d66100a6f44f85be6903c5f2f0f44b": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "d25b3986fa4946a5af61861c578f5d14": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "d42ee6c118b34c5b80dc752b3041d022": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "LabelStyleModel",
      "state": {
       "description_width": "",
       "font_family": null,
       "font_size": null,
       "font_style": null,
       "font_variant": null,
       "font_weight": null,
       "text_color": null,
       "text_decoration": null
      }
     },
     "d534cab0b284493ab9abe809d24d00c6": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "LabelStyleModel",
      "state": {
       "description_width": "",
       "font_family": null,
       "font_size": null,
       "font_style": null,
       "font_variant": null,
       "font_weight": null,
       "text_color": null,
       "text_decoration": null
      }
     },
     "d947ca1b25844bf7a688e8e81824a902": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "da83de2aa14c407d8f24ef196575cd3a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "dc361372c39e4a88a9eddd35967bc4b8": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "IntProgressModel",
      "state": {
       "bar_style": "success",
       "description": "Step 10/10",
       "layout": "IPY_MODEL_553df0ce453140458f0fd22803ccaaa1",
       "max": 10,
       "style": "IPY_MODEL_cf64e96669f949eb845f5638585dfd25",
       "value": 10
      }
     },
     "dd8fcf2620ea4455a0eca912d7f07304": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_3de6c39780454cc68a906800e7184e37",
        "IPY_MODEL_6c615290543143e09a86d38ad7b947e2",
        "IPY_MODEL_25f223a4a0174cc2899e0d1c3c7f9e2b"
       ],
       "layout": "IPY_MODEL_9ab2d57894284d86887ae5a2642ad71c"
      }
     },
     "e0d3364c33f742739500611508b6e9f6": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "e1b9e32204bc4528a5f47de591b82668": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "e295f260ff824f1da9204d96b0cd91cb": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "e8058b4c2079477d943495c3708d0cf2": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "FloatProgressModel",
      "state": {
       "bar_style": "success",
       "layout": "IPY_MODEL_73d5aa928305492396f10329278b3dfc",
       "max": 4,
       "style": "IPY_MODEL_90bc433874d641da8199cf9c8e249027",
       "value": 4
      }
     },
     "eb35b76e23994650944295bddf2ae569": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "eb46a3d87fd3400287d2510ada154fa5": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "eb943255bb5048b8a2f95e98ff3d2b81": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "ed27055171a74616af739ab0668de416": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ButtonModel",
      "state": {
       "description": "step",
       "disabled": true,
       "layout": "IPY_MODEL_2a72d97fc59b4f91b7fe8084785894f4",
       "style": "IPY_MODEL_8392950c26104a338546c3dfe610b664",
       "tooltip": null
      }
     },
     "f4f4c1d2c1a94f698ae3c52994af9e8a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_75c5a049a5d14135a261efe0c15e8ac6",
       "style": "IPY_MODEL_5ace4bdeb787499ea8d636013b43df6a",
       "value": "&lt;lambda&gt;: 100%"
      }
     },
     "fa2a190342324e8ba9a4b6e1a6f4f630": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ButtonStyleModel",
      "state": {
       "font_family": null,
       "font_size": null,
       "font_style": null,
       "font_variant": null,
       "font_weight": null,
       "text_color": null,
       "text_decoration": null
      }
     },
     "fab62a72396946c4a23713818e810cf6": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "IntProgressModel",
      "state": {
       "bar_style": "success",
       "description": "rank 1: 10/10",
       "layout": "IPY_MODEL_eb46a3d87fd3400287d2510ada154fa5",
       "max": 10,
       "style": "IPY_MODEL_0396bd0669ad4f1eb94ad97767570580",
       "value": 10
      }
     },
     "faef247a976a496bb993d02c1dd981b6": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "fe2b55553a8943498463e7c6fef3d54c": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {}
     }
    },
    "version_major": 2,
    "version_minor": 0
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
