{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Computational Essays in Artificial Intelligence" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## What is it like to be a robot?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Philosopher Thomas Nagel famously asked \"What is it like to be a bat?\" in his 1974 paper of the same name. Nagel argued that one might try to imagine what being a bat would be like, but without inhabiting its body and experiencing the world as it does through echolocation, we can't *really* know what it is like to be a bat. \n", "\n", "German biologist Jakob Von Uexküll developed the term *umwelt* to capture the idea of how the world is experienced by a particular organism. When translated from German this equates to \"self-centered world\". For a dog the world is dominated by smell, whereas for most humans the world is experienced primarily through vision. \n", "\n", "Here we will explore a robot's umwelt, and try to imagine what is it like to be a robot. We will use a robot with both range sensors and a camera." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Setup" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%pip install aitk --quiet" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Simulated World" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from aitk.robots import World, Scribbler, RangeSensor, Camera" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's create a world with several uniquely colored rooms along a long corridor for our robot to explore." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Random seed set to: 5131871\n" ] } ], "source": [ "world = World(width=300, height=200)\n", "world.add_wall(\"orange\",50,75,150,85)\n", "world.add_wall(\"yellow\",150,75,250,85)\n", "world.add_wall(\"orange\",145,0,150,75)\n", "world.add_wall(\"yellow\",150,0,155,75)\n", "world.add_wall(\"red\",0,125,165,135)\n", "world.add_wall(\"red\",220,125,225,200)\n", "world.add_wall(\"blue\",225,125,230,200)\n", "world.add_wall(\"pink\",155,0,185,30)\n", "robot = Scribbler(x=30, y=30, a=-100, max_trace_length=600)\n", "robot.add_device(RangeSensor(position=(6,-6),width=57.3,max=20,a=0,name=\"left-ir\"))\n", "robot.add_device(RangeSensor(position=(6,6),width=57.3,max=20,a=0,name=\"right-ir\"))\n", "robot.add_device(Camera(width=128,height=64))\n", "world.add_robot(robot)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Distal vs proximal perspectives\n", "\n", "Let's watch the world from a bird's-eye view as the robot moves around. This gives us a *distal* perspective on the world. We are not experiencing the world as the robot does, but instead have a top-down global view of what is happening. \n", "\n", "Notice that there is a pink box located in the yellow room. Later we will be trying to find this box." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "tags": [] }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "019f58fe04ed4c909b5e495388c61808", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Image(value=b'\\xff\\xd8\\xff\\xe0\\x00\\x10JFIF\\x00\\x01\\x01\\x00\\x00\\x01\\x00\\x01\\x00\\x00\\xff\\xdb\\x00C\\x00\\x08\\x06\\x0…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "world.watch()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "At the same time let's watch how the robot is experiencing the world through it's camera. This gives us a *proximal* perspective on the world, from the agent's point of view. " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5139db5527ea48d88f841aaa7e9202fb", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HTML(value='')" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "9754f0e247d141f3846856200e5559d7", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HTML(value='')" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "eae0480601b54618a44ddbf6dd387f9d", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HTML(value='')" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "0515e0d60fb04c1dafb7d78783a73458", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Image(value=b'\\x89PNG\\r\\n\\x1a\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x00\\x80\\x00\\x00\\x00@\\x08\\x06\\x00\\x00\\x00\\xd2\\xd6\\x7f…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "robot[\"camera\"].watch(width=\"500px\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. Navigating through the world\n", "\n", "Below is a simple controller that tries to keep moving forward while avoiding any obstacles that it encounters. It is only using the robot's range sensors to make navigation decisions. " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "robot.state[\"timer\"] = 0\n", "\n", "def avoid(robot):\n", " left = robot[0].get_distance()\n", " right = robot[1].get_distance()\n", " if left == robot[0].get_max() and right == robot[1].get_max() and \\\n", " robot.state[\"timer\"] == 0:\n", " robot.move(0.5, 0)\n", " elif robot.state[\"timer\"] > 0 and robot.state[\"timer\"] < 5:\n", " robot.state[\"timer\"] += 1\n", " elif left < robot[0].get_max():\n", " robot.move(0.1, -0.3)\n", " robot.state[\"timer\"] = 1\n", " elif right < robot[1].get_max():\n", " robot.move(0.1, 0.3)\n", " robot.state[\"timer\"] = 1\n", " else:\n", " robot.state[\"timer\"] = 0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.1 Observe both distal and proximal perspectives\n", "\n", "Now let's watch the world from both the global, top-down view and the local, robot-based view at the same time. " ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Using random seed: 5131871\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "fbc3916944c84f8b9b33d0d6be577155", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/100 [00:00img.pixelated {image-rendering: pixelated;}')" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "4ba600ecdc7c452285279ffe4e278fec", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HTML(value='')" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "d86b3096d671485094e53be84279d218", "version_major": 2, "version_minor": 0 }, "text/plain": [ "VBox(children=(Label(value='Time: 00:00:10.00'), HBox(children=(GridspecLayout(children=(Button(description='⬉…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from ipywidgets import HBox, VBox, Layout, FloatSlider, Label, Checkbox\n", "seconds = FloatSlider(description=\"Seconds:\", min=0.1, max=5, value=0.5)\n", "realtime = Checkbox(description=\"Real time\", value=True)\n", "layout = Layout(width=\"760px\")\n", "time = Label(value=\"Time: \" + world.get_time())\n", "VBox(children=[\n", " time, \n", " HBox(children=[\n", " joypad.get_widget(), \n", " robot[\"camera\"].get_widget(),\n", " ]),\n", " VBox(children=[\n", " seconds, realtime,\n", " robot.get_widget(show_robot=False, attributes=[\"stalled\"]),\n", " robot[\"left-ir\"].get_widget(title=\"Left IR\", attributes=[\"reading\"]),\n", " robot[\"right-ir\"].get_widget(title=\"Right IR\", attributes=[\"reading\"]),\n", " ])\n", " ], layout=layout)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Execute the cell below when you are ready to start controlling the robot via the dashboard. Click the different arrow buttons to move the robot in different directions. The \"Stalled\" sensor is True when the robot is stuck and unable to move in the current direction. If this happens try reversing the direction of movement. The \"IR\" sensors detect obstacles on the robot's left and right. The smaller the value the closer the obstacle.\n", "\n", "If you get stuck at some point, go ahead and look at the top-down view of the world again. Then try to get unstuck and continue using the buttons to reach the goal." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Go back to the top-down world view to see how you did. Did you crash into any walls? Did traversing the hallway take longer than you expected?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.3 Try again\n", "\n", "At the top of the dashboard you can see the time it took for you to reach the pink box. Start again from the top of this notebook and see if you can reach the pink box faster this time. By practicing, you should get better at seeing the world from the robot's perspective. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5. Conclusions\n", "\n", "Some Cognitive Scientists believe that a key to understanding cognition is embracing the fact that organisms are embedded in environments. Brains evolved to control bodies, and it is the interplay between the brain, the body, and the environment from which cognition emerges. Hopefully this experience of taking the robot's proximal perspective gave you a taste of what it is like to be a robot. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6. References\n", "\n", "1. https://en.wikipedia.org/wiki/What_Is_It_Like_to_Be_a_Bat\n", "2. https://en.wikipedia.org/wiki/Umwelt\n", "3. https://en.wikipedia.org/wiki/Embodied_embedded_cognition" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.10.13" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "006047928a8e4fb28ea1b0e2022ee237": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, "012bf340f81848c79b39881a75865c48": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "01762b2ba7134b7b9a4873bd22673a66": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ButtonModel", "state": { "description": "-", "layout": "IPY_MODEL_846318091a8f44a2b1e196fcab5712dc", "style": "IPY_MODEL_f4cb44e88154463787bf9740c33ca411" } }, "017dbefc64f04c3ab068fa115c163613": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "01a381ad2607412da61dc623119cd495": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "01b26d70f865476ea6375cd8fd08d004": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", "layout": "IPY_MODEL_dca15d849142431bb58abbc0759a8e6d", "max": 1, "style": "IPY_MODEL_69feb7fa75734d4a8ae7054ee63657f0", "value": 1 } }, "02c3a302712c44e5ba291033359cefa8": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "02d7d007619f4b8daaac145e957ea504": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_2a8d34de3eab44fb8ae8fcb5ea1f54b7", "style": "IPY_MODEL_d9a7acd5788c4653a07b73ca6648d3fb", "value": " 50/50 [00:00<00:00, 29.70it/s]" } }, "02e7c17fc3f74e77b52f9ae15aba88bf": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "032a112d06c84e9fa2fc81ba04df0819": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_16b14b830ebc48f892988dd57ca3f319", "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "29acfe45b1664a7d8c6ded1ff0e0fc13", "version_major": 2, "version_minor": 0 }, "text/plain": " 0%| | 0/1 [00:00img.pixelated {image-rendering: pixelated;}" } }, "271b01f0893b4750ba68b3fb818d4123": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", "layout": "IPY_MODEL_a393d8cb4c574d0c94f7953e20683132", "max": 1, "style": "IPY_MODEL_10ba5bf4838f48a6b5946ca380d5dc2b", "value": 1 } }, "277820211df548eebfefe1dcaf2d1c6a": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "display": "none" } }, "27a371232efb482cb1f7dd2d7f220b80": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ButtonStyleModel", "state": {} }, "27b1c03096db41dc9f33864ff2261f6b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_559cab7d8cfa4675af460152c674ebc9", "style": "IPY_MODEL_fb8a291faedf461880ff891764de999d", "value": " 1/1 [00:00<00:00, 11.07it/s]" } }, "27e0326939dc436dafecb13aadff4c70": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "27e5d133921c4280a1779e8697d9f2ab": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_26d9bf15938d43f4a9837aeed8cd0794", "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "1c5e630e62114378bf3043d34fc825af", "version_major": 2, "version_minor": 0 }, "text/plain": " 0%| | 0/50 [00:00img.pixelated {image-rendering: pixelated;}" } }, "4bbb4ffd9a874d61bc1a40a54a67cd28": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "display": "none" } }, "4ca37215e392430f8ffda739b3290c69": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "4cdb3095d06543d0a8c4dbc20496babd": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "TextModel", "state": { "description": "Name:", "layout": "IPY_MODEL_739b49288105477580457e786ce79246", "style": "IPY_MODEL_035062335f194c64b80a6b75b2f20dda" } }, "4d659e6235304ec89543e8cfc2eb188d": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "4e01efa55733432f80c22a5ba2f00015": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "4e39a12c25e247e987d8ae1cc0513188": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, "4ecd82d2316a45089b5b3394463eeadf": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_31b55420199241d39989f05791a85150", "style": "IPY_MODEL_9aac90b09cca4846b3c85a59447015cc", "value": "100%" } }, "4eff0d26e20c4bd2a3ac4c36c4a61845": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", "layout": "IPY_MODEL_394e7bb0fd214c7fb3ef1d893d24877e", "max": 1, "style": "IPY_MODEL_a0056d741de24a2eb565717692490585", "value": 1 } }, "4f2bd0a1daf145d593020e39b33bddc4": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_bb16ce0a17e742a19be7f2e26e62ac0f", "style": "IPY_MODEL_c2693a16efc646be8e5e1f83a921a6ad", "value": "100%" } }, "4f944db183c64eeea75365d60ca8ec53": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "517697c3b4a545c2927b61b8860ff4bc": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "518a0f8c6450461083c63e631497e82f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "VBoxModel", "state": { "children": [ "IPY_MODEL_1c97ec18b7ae49e7b476d2ad2f6ebc20", "IPY_MODEL_7f4fa28b69804efa8860b131918361bb", "IPY_MODEL_aeae578a50a0447e987744527410312b", "IPY_MODEL_07d05e7d2ed74bcfb8ddb43fcc9e8934", "IPY_MODEL_10e35b2e29b045cc84df3beee4133268", "IPY_MODEL_7f0b1ba725b8437188a7bc2863321867", "IPY_MODEL_d1aec5c533004259959c964c79061800", "IPY_MODEL_063a14a9827e465c93c6e9091d7db05e", "IPY_MODEL_4673aec6355d43d79c31c6fcaea88bc5" ], "layout": "IPY_MODEL_8b61ad45ee4041eaa73348a79ed4d113" } }, "518c2aa1572249388642c4be622c8541": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "children": [ "IPY_MODEL_0c00e2f8255a48b499d6d8bff4865d57", "IPY_MODEL_39c15f71a67144c693fca69d25ed9c4f", "IPY_MODEL_eb9b921bdabd4785996cad3bcf33570d" ], "layout": "IPY_MODEL_8da6fba3b70845089fdcd3efaf389240" } }, "51f046b6ef1048708922a4e6d7f11a49": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_4d659e6235304ec89543e8cfc2eb188d", "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "e3a1ab76279048808663761fe5e48ca6", "version_major": 2, "version_minor": 0 }, "text/plain": " 0%| | 0/1 [00:00img.pixelated {image-rendering: pixelated;}" } }, "595a99eb78c548b18f6c53ec6caf8aaf": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "5a2c8e0c2fa649499920ab7a00158378": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "5adad3a6880e44a2bcc3a0922b370e02": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "5aef272e7e2d4ec6a96663acea933402": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "5bab9756bd074d2aacc28f7ac9504da0": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_5d1f55d6527f4fd59865c4f84d51c4a4", "style": "IPY_MODEL_4a207d835f3c45969d46de1a0de28075", "value": "100%" } }, "5c2f484d7b084671a3a75badb35ec1e6": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_bcd19e5b175841349c4a2da77a014c91", "style": "IPY_MODEL_9013967f353947d2bd89df57210c172a", "value": " 1/1 [00:00<00:00, 9.12it/s]" } }, "5c4e0fb036db422e907489afa05cbbf3": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "5c5fcf3812bd456cbe97720bb9f08d76": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "5c72b2682361428fbe5863a65ad6c9e7": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "5c900e1b892344e48e7ce6146fe439ea": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "display": "flex" } }, "5cc357b1c077440ebb2d4ebed7f4dc85": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "grid_area": "widget010", "height": "50px", "margin": "0px", "max_height": "50px", "max_width": "50px", "width": "50px" } }, "5d04dde864a24a7395401132f1c38168": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_74c22b53a1074eb3b61074d42f7abe7c", "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "72af9c027c554abb9dbe88fa1e429329", "version_major": 2, "version_minor": 0 }, "text/plain": " 0%| | 0/1 [00:00img.pixelated {image-rendering: pixelated;}" } }, "751f3d84f8e9421781976bbcef8c3af8": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_fc350eeae14d4f7993ff64436d51a3c4", "style": "IPY_MODEL_788cbf58243842928953209ee3688352", "value": " 50/50 [00:00<00:00, 207.81it/s]" } }, "754d18c699f44f82915d6847e70dbe20": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_fe75335b1eed433bb96a77ad2aa94fe7", "style": "IPY_MODEL_c0c17eca69d44ebb82c43d36684f0ffe", "value": "100%" } }, "7674890e2e9e4ac281315e5b74b03f2a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "7781687d55824382a591023a7e8e5152": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "788cbf58243842928953209ee3688352": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "79003bc227a94bf18d63f3b3f509f535": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "children": [ "IPY_MODEL_9d39752374c845c4b49a6dddfd5bdea1", "IPY_MODEL_8de43db746ff459d8812bb8e66a2c0b4", "IPY_MODEL_9450cc35339c4e52bcf52af9dba98211" ], "layout": "IPY_MODEL_c4cf52aab2464dd6adcd2bfbe0d3f287" } }, "79357791853a438d97379fbded551aec": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "799d533cb93e4768b666b813b5dba669": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "7a3318f29ccb45a8b93e93f3ba599d7b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "7aacbb131f784ca2b414ee50f4217d2d": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "7b803cccaa154a07b5f1b7ee8bd2d0b8": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "7bd653f6aa7844719ac5d9193dc493b3": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "7be5d43ea4064a46a2529ccbcf96e2d6": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "7c4bc683d05c49b98b699cad29ee535e": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "grid_area": "widget016", "height": "50px", "margin": "0px", "max_height": "50px", "max_width": "50px", "width": "50px" } }, "7c72eed8f90944d9ae8fc68ed541dcff": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "7c98cc34710445df9d619782e741f77b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ButtonStyleModel", "state": {} }, "7ce4861b95f94f359ece2232905442ef": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "TextModel", "state": { "description": "Reading:", "layout": "IPY_MODEL_0a0cdc6dfeb34edb85f281c95b363b50", "style": "IPY_MODEL_7781687d55824382a591023a7e8e5152", "value": "0.09279758411378052" } }, "7d40c15d71d145a2bba8ca21ea1446eb": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ButtonModel", "state": { "description": " ", "layout": "IPY_MODEL_9dfaa5f9f2374cee806156064b236f1e", "style": "IPY_MODEL_8cbbdf1f2dc94ac3932cb61265cab6c9" } }, "7d530848f1d448259166afbfbdbae95f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "SliderStyleModel", "state": { "description_width": "" } }, "7d5cb921437f4d5f80323c9437638a0a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, "7df12ce4bc504fab9dc777aa7d4d8f71": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, "7e237b3850494c56ab1c8da07080df21": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", "layout": "IPY_MODEL_07056b8ab2314d5e8444f4805c16cde9", "max": 1, "style": "IPY_MODEL_fb3d26bb00394471bd841001107402e0", "value": 1 } }, "7f0b1ba725b8437188a7bc2863321867": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "TextModel", "state": { "description": "Stalled:", "layout": "IPY_MODEL_5c900e1b892344e48e7ce6146fe439ea", "style": "IPY_MODEL_9b7dfb3bd8f14b1abe94bbc8207250a4", "value": "True" } }, "7f4fa28b69804efa8860b131918361bb": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "TextModel", "state": { "description": "Name:", "layout": "IPY_MODEL_d729b8eab26e4a72a142df3791056b4d", "style": "IPY_MODEL_a6bd9ac4349c420e918516f70a061696" } }, "7f8c8528fee94d96b3f47d66a62f732b": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "80f7f72d70e74cf496c87860bcb13646": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "81031e8feafd4eb5af2ec7f808e4460f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", "layout": "IPY_MODEL_81e005976e064c06b6334215ba2ca9b0", "max": 5, "style": "IPY_MODEL_d36a9385705345da82f6cdb4ada3e467", "value": 5 } }, "815dc78152f64f60a83d85d3f306eb03": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", "layout": "IPY_MODEL_bac337f914074426bb8291e87624a3af", "max": 50, "style": "IPY_MODEL_aeb60b7a97874d688110461638d501fe", "value": 50 } }, "81e005976e064c06b6334215ba2ca9b0": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "8282de2bacb8411e9479c77cee3c17a7": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "82a5595f68a44184a64bb6aaa71eca59": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "832f77104cb44c9398833be5a78d6481": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "833d207d9cdd46aeac9468d82a062598": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "8344dc02959c4e26bcb5940f0c7b078a": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_08a2f409f6b14ed6adeaf53d3531b45f", "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "560abdf6f3cb4d2dab600d85ed3e6c78", "version_major": 2, "version_minor": 0 }, "text/plain": " 0%| | 0/50 [00:00img.pixelated {image-rendering: pixelated;}" } }, "a6a67446bc1d4030b889a6e8feaed4aa": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "children": [ "IPY_MODEL_e3bfea5f0c2e44b3b17c24019a4cc5da", "IPY_MODEL_3fd7f3e535f742698e8c07bd29e6de42", "IPY_MODEL_6309a6bab02d493e8f77e8493c354162" ], "layout": "IPY_MODEL_3c97b818ec264cb593a611e426bf1406" } }, "a6bd9ac4349c420e918516f70a061696": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "a6f3ad1cf2bb4fb38683e033941d4242": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "children": [ "IPY_MODEL_9e752149fded4d2fa7f1670a8da50fee", "IPY_MODEL_c572a7907763452cb525d8be90c8b351", "IPY_MODEL_843d2b1600aa454787aaed2419996a0b" ], "layout": "IPY_MODEL_85709bf351f74c6f9d5772e629fcb63b" } }, "a70a4339f2b541b1a01cd0cd0129e836": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_156a2cc3fca4439e8f3239746160ca13", "style": "IPY_MODEL_48b36becf05346e7baa43f3b39bbbfad", "value": "100%" } }, "a74e7756839e48b7b3e96758175d5c24": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "a84352c14d264e6094820e3e55d4f0ad": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "a84cf8dac1b247aab8535fda163492a3": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "a945131230674b37bd55a4034d911852": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "a980039e0c9d443ab92ac6b66544ad66": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "children": [ "IPY_MODEL_14712b4d4a0c422cbebf6ff4fc3e9d51", "IPY_MODEL_81031e8feafd4eb5af2ec7f808e4460f", "IPY_MODEL_cf5005a4913c46a3b8be1cfbd515abce" ], "layout": "IPY_MODEL_5a2c8e0c2fa649499920ab7a00158378" } }, "aacb7296600c41b8977dae2af6605942": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "ab3e9fb6191848c29e6a62a5de74a7dd": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_d6d36dd9a7c64a1c8b24615b79f52090", "style": "IPY_MODEL_c84d8ea4737f41e18c7f9d0aedbd12a9", "value": " 1/1 [00:00<00:00, 10.75it/s]" } }, "ac03098dd57c4a32bce7413f4a879384": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "ac04fdbdcfd14ac497fc4dd9e225a64f": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "ac1721e72b054ae1b1e110091a8f792c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "ac836ca6cf29426abeffe422ffa1428d": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_886d5006115e4590bc52cd45373783a7", "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "f6957e369bc845c19b51ed790ae2556e", "version_major": 2, "version_minor": 0 }, "text/plain": " 0%| | 0/1 [00:00