{ "cells": [ { "cell_type": "markdown", "id": "92c86eb4", "metadata": {}, "source": [ "# Action\n", "\n", "[![Click and Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/metadriverse/metaurban/blob/main/documentation/source/action.ipynb)\n", "\n", "This section will discuss how to control the vehicle in MetaUrban with the *Policy* interface. Before this, let's have a look at the raw control signal required by vehicles.\n", "\n", "To control vehicles in MetaUrban, the input should be a normalized action: $\\mathbf a = [a_1, a_2] \\in [-1, 1]^2$. This action is converted into the steering $u_s$ (degree), acceleration $u_a$ (hp) and brake signal $u_b$ (hp) in the following ways:\n", "\n", "$u_s = S_{max} a_1$ \n", "$u_a = F_{max} \\max(0, a_2)$ \n", "$u_b = -B_{max} \\min(0, a_2)$ \n", "\n", "wherein $S_{max}$ (degree) is the maximal steering angle, $F_{max}$ (hp) is the maximal engine force, and $B_{max}$ (hp) is the maximal brake force. \n", "To increase diversity, the accurate values of these parameters vary across different vehicles but are limited to certain ranges defined by [ParameterSpace](https://github.com/metadriverse/metaurban/blob/main/metaurban/component/pg_space.py).\n", "\n", "The steering $u_s$ is applied to two front wheels. In addition, the engine force $u_a$ and the brake force $u_b$ are applied to four wheels, as the COCO robot in MetaUrban is four-wheel drive (4WD). The concrete implementation is as follows:" ] }, { "cell_type": "code", "execution_count": 2, "id": "e7d118d4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34mdef\u001b[39;49;00m\u001b[37m \u001b[39;49;00m\u001b[35m_set_action\u001b[39;49;00m\u001b[35m(\u001b[39;49;00m\u001b[35mself\u001b[39;49;00m\u001b[35m,\u001b[39;49;00m \u001b[30maction\u001b[39;49;00m\u001b[35m)\u001b[39;49;00m\u001b[35m:\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[34mif\u001b[39;49;00m \u001b[30maction\u001b[39;49;00m \u001b[35mis\u001b[39;49;00m \u001b[34mNone\u001b[39;49;00m\u001b[35m:\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[34mreturn\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[30msteering\u001b[39;49;00m = \u001b[30maction\u001b[39;49;00m\u001b[35m[\u001b[39;49;00m\u001b[34m0\u001b[39;49;00m\u001b[35m]\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[35mself\u001b[39;49;00m.\u001b[30mthrottle_brake\u001b[39;49;00m = \u001b[30maction\u001b[39;49;00m\u001b[35m[\u001b[39;49;00m\u001b[34m1\u001b[39;49;00m\u001b[35m]\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[35mself\u001b[39;49;00m.\u001b[30msteering\u001b[39;49;00m = \u001b[30msteering\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[35mself\u001b[39;49;00m.\u001b[30msystem\u001b[39;49;00m.\u001b[30msetSteeringValue\u001b[39;49;00m\u001b[35m(\u001b[39;49;00m\u001b[35mself\u001b[39;49;00m.\u001b[30msteering\u001b[39;49;00m * \u001b[35mself\u001b[39;49;00m.\u001b[30mmax_steering\u001b[39;49;00m\u001b[35m,\u001b[39;49;00m \u001b[34m0\u001b[39;49;00m\u001b[35m)\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[35mself\u001b[39;49;00m.\u001b[30msystem\u001b[39;49;00m.\u001b[30msetSteeringValue\u001b[39;49;00m\u001b[35m(\u001b[39;49;00m\u001b[35mself\u001b[39;49;00m.\u001b[30msteering\u001b[39;49;00m * \u001b[35mself\u001b[39;49;00m.\u001b[30mmax_steering\u001b[39;49;00m\u001b[35m,\u001b[39;49;00m \u001b[34m1\u001b[39;49;00m\u001b[35m)\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[35mself\u001b[39;49;00m.\u001b[30m_apply_throttle_brake\u001b[39;49;00m\u001b[35m(\u001b[39;49;00m\u001b[30maction\u001b[39;49;00m\u001b[35m[\u001b[39;49;00m\u001b[34m1\u001b[39;49;00m\u001b[35m]\u001b[39;49;00m\u001b[35m)\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", "\n", "\u001b[34mdef\u001b[39;49;00m\u001b[37m \u001b[39;49;00m\u001b[35m_apply_throttle_brake\u001b[39;49;00m\u001b[35m(\u001b[39;49;00m\u001b[35mself\u001b[39;49;00m\u001b[35m,\u001b[39;49;00m \u001b[30mthrottle_brake\u001b[39;49;00m\u001b[35m)\u001b[39;49;00m\u001b[35m:\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[30mmax_engine_force\u001b[39;49;00m = \u001b[35mself\u001b[39;49;00m.\u001b[30mconfig\u001b[39;49;00m\u001b[35m[\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[33mmax_engine_force\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[35m]\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[30mmax_brake_force\u001b[39;49;00m = \u001b[35mself\u001b[39;49;00m.\u001b[30mconfig\u001b[39;49;00m\u001b[35m[\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[33mmax_brake_force\u001b[39;49;00m\u001b[33m\"\u001b[39;49;00m\u001b[35m]\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[34mfor\u001b[39;49;00m \u001b[30mwheel_index\u001b[39;49;00m \u001b[35min\u001b[39;49;00m \u001b[35mrange\u001b[39;49;00m\u001b[35m(\u001b[39;49;00m\u001b[34m4\u001b[39;49;00m\u001b[35m)\u001b[39;49;00m\u001b[35m:\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[34mif\u001b[39;49;00m \u001b[30mthrottle_brake\u001b[39;49;00m >= \u001b[34m0\u001b[39;49;00m\u001b[35m:\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[35mself\u001b[39;49;00m.\u001b[30msystem\u001b[39;49;00m.\u001b[30msetBrake\u001b[39;49;00m\u001b[35m(\u001b[39;49;00m\u001b[32m2.0\u001b[39;49;00m\u001b[35m,\u001b[39;49;00m \u001b[30mwheel_index\u001b[39;49;00m\u001b[35m)\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[34mif\u001b[39;49;00m \u001b[35mself\u001b[39;49;00m.\u001b[30mspeed_km_h\u001b[39;49;00m > \u001b[35mself\u001b[39;49;00m.\u001b[30mmax_speed_km_h\u001b[39;49;00m\u001b[35m:\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[35mself\u001b[39;49;00m.\u001b[30msystem\u001b[39;49;00m.\u001b[30mapplyEngineForce\u001b[39;49;00m\u001b[35m(\u001b[39;49;00m\u001b[32m0.0\u001b[39;49;00m\u001b[35m,\u001b[39;49;00m \u001b[30mwheel_index\u001b[39;49;00m\u001b[35m)\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[34melse\u001b[39;49;00m\u001b[35m:\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[35mself\u001b[39;49;00m.\u001b[30msystem\u001b[39;49;00m.\u001b[30mapplyEngineForce\u001b[39;49;00m\u001b[35m(\u001b[39;49;00m\u001b[30mmax_engine_force\u001b[39;49;00m * \u001b[30mthrottle_brake\u001b[39;49;00m\u001b[35m,\u001b[39;49;00m \u001b[30mwheel_index\u001b[39;49;00m\u001b[35m)\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[34melse\u001b[39;49;00m\u001b[35m:\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[34mif\u001b[39;49;00m \u001b[35mself\u001b[39;49;00m.\u001b[30menable_reverse\u001b[39;49;00m\u001b[35m:\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[35mself\u001b[39;49;00m.\u001b[30msystem\u001b[39;49;00m.\u001b[30mapplyEngineForce\u001b[39;49;00m\u001b[35m(\u001b[39;49;00m\u001b[30mmax_engine_force\u001b[39;49;00m * \u001b[30mthrottle_brake\u001b[39;49;00m\u001b[35m,\u001b[39;49;00m \u001b[30mwheel_index\u001b[39;49;00m\u001b[35m)\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[35mself\u001b[39;49;00m.\u001b[30msystem\u001b[39;49;00m.\u001b[30msetBrake\u001b[39;49;00m\u001b[35m(\u001b[39;49;00m\u001b[34m0\u001b[39;49;00m\u001b[35m,\u001b[39;49;00m \u001b[30mwheel_index\u001b[39;49;00m\u001b[35m)\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[34melse\u001b[39;49;00m\u001b[35m:\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[32m# self.system.applyEngineForce(0.0, wheel_index)\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[32m# self.system.setBrake(abs(throttle_brake) * max_brake_force, wheel_index)\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[30mDEADZONE\u001b[39;49;00m = \u001b[32m0.01\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", "\u001b[37m\u001b[39;49;00m\n", " \u001b[32m# Speed m/s in car's heading:\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[30mheading\u001b[39;49;00m = \u001b[35mself\u001b[39;49;00m.\u001b[30mheading\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[30mvelocity\u001b[39;49;00m = \u001b[35mself\u001b[39;49;00m.\u001b[30mvelocity\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[30mspeed_in_heading\u001b[39;49;00m = \u001b[30mvelocity\u001b[39;49;00m\u001b[35m[\u001b[39;49;00m\u001b[34m0\u001b[39;49;00m\u001b[35m]\u001b[39;49;00m * \u001b[30mheading\u001b[39;49;00m\u001b[35m[\u001b[39;49;00m\u001b[34m0\u001b[39;49;00m\u001b[35m]\u001b[39;49;00m + \u001b[30mvelocity\u001b[39;49;00m\u001b[35m[\u001b[39;49;00m\u001b[34m1\u001b[39;49;00m\u001b[35m]\u001b[39;49;00m * \u001b[30mheading\u001b[39;49;00m\u001b[35m[\u001b[39;49;00m\u001b[34m1\u001b[39;49;00m\u001b[35m]\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", "\u001b[37m\u001b[39;49;00m\n", " \u001b[34mif\u001b[39;49;00m \u001b[30mspeed_in_heading\u001b[39;49;00m < \u001b[30mDEADZONE\u001b[39;49;00m\u001b[35m:\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[35mself\u001b[39;49;00m.\u001b[30msystem\u001b[39;49;00m.\u001b[30mapplyEngineForce\u001b[39;49;00m\u001b[35m(\u001b[39;49;00m\u001b[32m0.0\u001b[39;49;00m\u001b[35m,\u001b[39;49;00m \u001b[30mwheel_index\u001b[39;49;00m\u001b[35m)\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[35mself\u001b[39;49;00m.\u001b[30msystem\u001b[39;49;00m.\u001b[30msetBrake\u001b[39;49;00m\u001b[35m(\u001b[39;49;00m\u001b[34m2\u001b[39;49;00m\u001b[35m,\u001b[39;49;00m \u001b[30mwheel_index\u001b[39;49;00m\u001b[35m)\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[34melse\u001b[39;49;00m\u001b[35m:\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[35mself\u001b[39;49;00m.\u001b[30msystem\u001b[39;49;00m.\u001b[30mapplyEngineForce\u001b[39;49;00m\u001b[35m(\u001b[39;49;00m\u001b[32m0.0\u001b[39;49;00m\u001b[35m,\u001b[39;49;00m \u001b[30mwheel_index\u001b[39;49;00m\u001b[35m)\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", " \u001b[35mself\u001b[39;49;00m.\u001b[30msystem\u001b[39;49;00m.\u001b[30msetBrake\u001b[39;49;00m\u001b[35m(\u001b[39;49;00m\u001b[35mabs\u001b[39;49;00m\u001b[35m(\u001b[39;49;00m\u001b[30mthrottle_brake\u001b[39;49;00m\u001b[35m)\u001b[39;49;00m * \u001b[30mmax_brake_force\u001b[39;49;00m\u001b[35m,\u001b[39;49;00m \u001b[30mwheel_index\u001b[39;49;00m\u001b[35m)\u001b[39;49;00m\u001b[37m\u001b[39;49;00m\n", "\n" ] } ], "source": [ "from metaurban.component.delivery_robot.base_deliveryrobot import EgoDeliveryRobot\n", "from metaurban.utils import print_source\n", "print_source(EgoDeliveryRobot._set_action)\n", "print_source(EgoDeliveryRobot._apply_throttle_brake)" ] }, { "cell_type": "markdown", "id": "c48486b7", "metadata": {}, "source": [ "Actually, you can make the car 2WD or 4 wheel steering or even increase its number of wheels by implementing a new vehicle type like `EgoDeliveryRobot`.\n", "\n", "The aforementioned `_set_action(self, action)` function is wrapped by the `before_step(self, action)` function, which will do additional manipulations like numerical validation. Thus to control the agent, just set the action through `agent.before_step(target_action)` before simulating the next step. A minimal example to control an agent is as follows. The script first creates a new agent in front of the green ego car and sets its action as `[0, 0.05]` at each step. As a result, it slowly moves forward, while the green ego car stops at the origin as its input action is always `[0, 0]`. " ] }, { "cell_type": "code", "execution_count": 8, "id": "0d6d0b30", "metadata": { "tags": [ "skip-execution" ] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[38;20m[INFO] Environment: SidewalkStaticMetaUrbanEnv\u001b[0m\n", "\u001b[38;20m[INFO] MetaUrban version: 0.0.1\u001b[0m\n", "\u001b[38;20m[INFO] Sensors: [lidar: Lidar(), side_detector: SideDetector(), lane_line_detector: LaneLineDetector()]\u001b[0m\n", "\u001b[38;20m[INFO] Render Mode: none\u001b[0m\n", "\u001b[38;20m[INFO] Horizon (Max steps per agent): None\u001b[0m\n", "\u001b[38;20m[INFO] Assets version: 0.0.1\u001b[0m\n", "\u001b[38;20m[INFO] Known Pipes: glxGraphicsPipe\u001b[0m\n", "\u001b[38;20m[INFO] Start Scenario Index: 0, Num Scenarios : 1\u001b[0m\n", "\u001b[38;20m[INFO] Agents are expected to walk on main sidewalks and crosswalks, not all regions\u001b[0m\n", "\u001b[38;20m[INFO] Agents are expected to walk on main sidewalks and crosswalks, not all regions\u001b[0m\n", "\u001b[38;20m[INFO] Episode ended! Scenario Index: 0 Reason: arrive_dest.\u001b[0m\n", "\u001b[38;20m[INFO] Agents are expected to walk on main sidewalks and crosswalks, not all regions\u001b[0m\n", "\u001b[38;20m[INFO] Agents are expected to walk on main sidewalks and crosswalks, not all regions\u001b[0m\n" ] } ], "source": [ "from metaurban.envs import SidewalkStaticMetaUrbanEnv\n", "from metaurban.component.delivery_robot.deliveryrobot_type import EgoVehicle\n", "from metaurban.utils import generate_gif\n", "\n", "env=SidewalkStaticMetaUrbanEnv(dict(map=\"S\", traffic_density=0, object_density=0.1, walk_on_all_regions=False))\n", "frames = []\n", "try:\n", " env.reset()\n", " cfg=env.config[\"vehicle_config\"]\n", " cfg[\"navigation\"]=None # it doesn't need navigation system\n", " v = env.engine.spawn_object(EgoVehicle, \n", " vehicle_config=cfg, \n", " position=[30,0], \n", " heading=0)\n", " for _ in range(100):\n", " v.before_step([0, 0.5])\n", " env.step([0,0])\n", " env.agents['default_agent'].set_position([25, 0])\n", " frame=env.render(mode=\"topdown\", \n", " window=False,\n", " screen_size=(800, 200),\n", " camera_position=(60, 7))\n", " frames.append(frame)\n", " generate_gif(frames, gif_name=\"demo.gif\")\n", "finally:\n", " env.close()" ] }, { "cell_type": "code", "execution_count": 9, "id": "855f689b", "metadata": { "tags": [ "skip-execution" ] }, "outputs": [ { "data": { "image/gif": "R0lGODlhIAPIAIMAAP////+vI6+vr8qRYcx4vN6PBdVeAJSUlF9fXwKecwFzsjw8PAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQAFQAAACwAAAAAIAPIAAAI/wABCBxIsKDBgwgTKlzIsKHDhxAjSpxIsWLBBQsIaNyIESHGASBDiuwoEKPJkwMxFljJsmUBkhZjypxJs6bNmzhz6tzJs6fPn0CDCh1KtGhFjBs5LvC4QKTTATBPSk25wKVVmEazat3KtavXr2DDih1LtqxNqVMPfnwaMirapVTfojVLt67du3jz6t3Lt29WuXDVNmULEutCwGn9Kl7MuLHjx5AjS6a4lrDhyZgza97MubPnzzwRowRNurTp06hTqw4r+vLq17Bjy55Nu7bt27hz697Nu7fv38CDCx9OvLjx48iT65arvLnz59Cj72Quvbr169irv83Ovbv37+DDi/8fT768+fPo06tfz769+/fw48ufT7++/fv48+vfz7+///8ABijggAQWaOCBCCao4IIMNujggxBGKOGEFFZo4YUYZqjhhhx26OGHIIYo4ogklmjiiSimqOKKLLbo4oswxijjjDTWaCONrbl24448qpZjYD0GKWRpOQ5p5JFIJqnkkkw26eSTUIaHwJRUVmnllVhmqeWWXHbp5ZdghinmmGSWaeaZaKap5ppstunmm3DGKeecXlJI55145qnnnnz26eefgAYq6KBsRmnooYgmquiijDbq6KOQRirppJRWaumlmGaq6aacdurpp6CGKuqopJZq6qmopqrqqqy26uqrsMb/KuustAInwK245qqrAAnt6iuuvf7qa7DC6kpsscAihKyxyi6b7EHOPmtQtLceuyxE1PLabLTWItttsd8KG+6v4w67rbPl7pous9BSu26u70pbULYe0nvutfd6my+4+4rbL7n/mtsutwGrWzC7Ddk7MLoHw9uwvAQpPK27D1dbsbYL45uxvhvz27G/HwMcssC1lmzyySinrPLKLLfs8sswxyzzzDTXbPPNOOes88489+zzz0AHLfTQRBdt9NFIJ610ThLPS/HIBkONsNMES+2w1RAP1HTET09cdcJdU80w1haTjbHXY6Otsdocs+2x2yDDLbLcJIu9tt1t4/22hltr/x0211/rHbfgcxNeN+BpGx413YsrPvVCfQsUOQCTV/63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WwqFSXSmUaQflTItebKnSqAuh8qkyRGrR60jm5rkmfIny6AvYxat2fFmSAx28+rdm0FgXqQBAQAh+QQBAwAZACz/AbcALAAHAIT////89+768N346M324bz02avx0pvvyortw3nru2nptFj/ryOvr6/mrEfkpTfinSbKkWGUlJTMeLzejwVfX1/VXgACnnMBc7I8PDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAIlgABCAwQQICAAQMIECjA0ICBAwcQSEyQQIHFBhgdOHjAMYPHjxkwiBQIgKBBhAoZFnAIUSICihYVYGygkeMDkB9FYiBp8mDChQ0fRpxY8WLGjRxFfpzAdOTAgj5TBm1JNObMmkkxLG268+nJnypZDn1ZVOZRm0o9Mp3gtCRUlEBXCnUJ0yhNpDdxhkyrt69fvyT16swQEAAh+QQBAwAZACwCArcALAAHAIT////89+768N346M324bz02avx0pvvyortw3nru2nptFj/ryOvr6/mrEfkpTfinSbKkWGUlJTMeLzejwVfX1/VXgACnnMBc7I8PDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAIlgABAAgQQICAAQMIKCxQwICBAxARIEhAUYHFBg0caHzAMYPHjxkwiBRI0CBChQQYOoR4QCLFBBYVYNTogOMDkB9FYiBZ8GDChQ0fRpxY8WLGjRxFfpzAdOTAnieBrhz6MuZMpA+UemQ6wWlJnyhVCm1JFKZRmja1ZuDqFerPlEFZuiwq82jNjjhDqs3Lty9fgQDy6swQEAAh+QQBAwAZACwEArcALQAHAIT////89+768N346M324bz02avx0pvvyortw3nru2nptFj/ryOvr6/mrEfkpTfinSbKkWGUlJTMeLzejwVfX1/VXgACnnMBc7I8PDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAImAABAAgQQICAAQgJEChQwIDDAwcQSExAUYGCBhgdaHzAMYPHjxkwiBRI0CDCAQoZOjQAUSICigksYmyg0QHHByA/isRAsuDBhAsbPow4seLFjBs5ivw4oenIgT5PphTKkuhLozNr3lzqsemEpyV/ogy6smXRmEdpJn3ANYNXsFGBqhzqEqZMpDY75gzZdq/fv38FAti7M0NAACH5BAEDABkALAYCtwAtAAcAhP////z37vrw3fjozfbhvPTZq/HSm+/K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", "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image(open(\"demo.gif\", \"rb\").read())" ] } ], "metadata": { "kernelspec": { "display_name": "metaurban", "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.16" }, "mystnb": { "execution_mode": "off" } }, "nbformat": 4, "nbformat_minor": 5 }