From 09a3d03f274df75a84e0429f1fa5f21083e73c3b Mon Sep 17 00:00:00 2001 From: srajan-kiyotaka Date: Mon, 24 Jun 2024 11:45:51 +0530 Subject: [PATCH] added quick guid. --- tutorials/quickGuid.ipynb | 1025 +++++++++++++++++++++++++++++++++++++ 1 file changed, 1025 insertions(+) create mode 100644 tutorials/quickGuid.ipynb diff --git a/tutorials/quickGuid.ipynb b/tutorials/quickGuid.ipynb new file mode 100644 index 0000000..905ba0f --- /dev/null +++ b/tutorials/quickGuid.ipynb @@ -0,0 +1,1025 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Quick Guide\n", + "## Simulate a simple Grid World\n", + "We will create a 5x5 Grid world and a simple grid agent which will traverse the world using the dfs algorithm and find the goal cell.\n", + "### Import the required modules form the library" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "OS Type: Linux\n" + ] + } + ], + "source": [ + "from traverseCraft.world import CreateGridWorld\n", + "from traverseCraft.agent import GridAgent" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### First, create the grid world with all the default setting on." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "gridWorld = CreateGridWorld(worldName=\"Simple Grid World\", cols=5, rows=5, cellSize=36)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Compile the world first!" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "gridWorld.constructWorld()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Add some block states in our world\n", + "we will block the following cells: \n", + "- (1,1)\n", + "- (2,2)\n", + "- (3,3)\n", + "- (4,3)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "gridWorld.setBlockPath(blockCells=[[1,1],[2,2],[3,3],[4,3]])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Quick look at our world" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+-------------------------+----------------------------------+\n", + "| Attribute | Value |\n", + "+-------------------------+----------------------------------+\n", + "| World Name | Simple Grid World |\n", + "| Rows | 5 |\n", + "| Columns | 5 |\n", + "| Cell Size | 36 |\n", + "| Cell Padding | 2 |\n", + "| Window Size | 265x220 |\n", + "| Goal Cells | [[4, 4]] |\n", + "| Block Cells | [[1, 1], [2, 2], [3, 3], [4, 3]] |\n", + "| Path Color | gray |\n", + "| Block Color | red |\n", + "| Goal Color | green |\n", + "| Border Width | 1 |\n", + "| Button Background Color | #7FC7D9 |\n", + "| Button Foreground Color | #332941 |\n", + "| Button Text | Start Agent |\n", + "| Text Font | Helvetica |\n", + "| Text Size | 24 |\n", + "| Text Weight | bold |\n", + "+-------------------------+----------------------------------+\n" + ] + } + ], + "source": [ + "print(gridWorld)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Let's create a simple grid agent" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "gridAgent = GridAgent(agentName=\"Simple Grid Agent\", world=gridWorld, agentPos=[0,0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Quick look at our Agent" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+----------------+-------------------+\n", + "| Attribute | Value |\n", + "+----------------+-------------------+\n", + "| Agent Name | Simple Grid Agent |\n", + "| Agent Color | blue |\n", + "| World Name | Simple Grid World |\n", + "| World ID | GRIDWORLD |\n", + "| Start Position | [0, 0] |\n", + "+----------------+-------------------+\n" + ] + } + ], + "source": [ + "print(gridAgent)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### First, connect the world and the agent" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "gridWorld.setAgent(agent=gridAgent)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### DFS algorithm" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def dfs(agent, i, j, visited):\n", + " if(agent.checkGoalState(i, j)):\n", + " return True\n", + " if(visited[i][j]):\n", + " return False\n", + " visited[i][j] = True\n", + " # move up\n", + " if(i > 0 and not visited[i-1][j] and agent.moveAgent(i-1, j)):\n", + " if(dfs(agent, i-1, j, visited)):\n", + " return True\n", + " agent.moveAgent(i, j)\n", + " # move down\n", + " if(i < 4 and not visited[i+1][j] and agent.moveAgent(i+1, j)):\n", + " if(dfs(agent, i+1, j, visited)):\n", + " return True\n", + " agent.moveAgent(i, j)\n", + " # move left\n", + " if(j > 0 and not visited[i][j-1] and agent.moveAgent(i, j-1)):\n", + " if(dfs(agent, i, j-1, visited)):\n", + " return True\n", + " agent.moveAgent(i, j)\n", + " # move right\n", + " if(j < 4 and not visited[i][j+1] and agent.moveAgent(i, j+1)):\n", + " if(dfs(agent, i, j+1, visited)):\n", + " return True\n", + " agent.moveAgent(i, j)\n", + " return False" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Call back function which our agent will use." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "def toDo():\n", + " visited = [[False for _ in range(5)] for _ in range(5)]\n", + " print(\"Agent Started moving around the world!\")\n", + " if(dfs(gridAgent, 0, 0, visited)):\n", + " print(\"Agent reached the goal state!\")\n", + " else:\n", + " print(\"Agent could not reach the goal state!\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Set the call back function" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "gridAgent.setAlgorithmCallBack(toDo)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Start the simulation\n", + "We will show the world and on the world you can find the button to start the simulation." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Agent Started moving around the world!\n", + "Agent reached the goal state!\n" + ] + } + ], + "source": [ + "gridWorld.showWorld()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Summary Generation" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+------+---+---+---+---+---+\n", + "| Cell | 0 | 1 | 2 | 3 | 4 |\n", + "+------+---+---+---+---+---+\n", + "| 0 | 2 | 1 | 1 | 1 | 1 |\n", + "| 1 | 2 | 0 | 1 | 1 | 1 |\n", + "| 2 | 2 | 1 | 0 | 0 | 1 |\n", + "| 3 | 2 | 3 | 2 | 0 | 1 |\n", + "| 4 | 2 | 2 | 1 | 0 | 1 |\n", + "+------+---+---+---+---+---+\n", + "+--------------+---------------------------+\n", + "| Attribute | Value |\n", + "+--------------+---------------------------+\n", + "| Start Time | Mon, 24 Jun 2024 06:13:28 |\n", + "| End Time | Mon, 24 Jun 2024 06:13:42 |\n", + "| Elapsed Time | 14.063 sec |\n", + "+--------------+---------------------------+\n" + ] + } + ], + "source": [ + "print(gridWorld.summary())\n", + "print(gridAgent.summary())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Simulate a simple tree world\n", + "We will create a complete binary tree of height 3 tree world and a simple tree agent which will traverse the world using the dfs algorithm and find the goal node.\n", + "### Import the required modules form the library" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "from traverseCraft.world import CreateTreeWorld\n", + "from traverseCraft.agent import TreeAgent" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### First, create the tree world abstract information." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "treeWorldInfo = {\n", + " 'adj': {\n", + " 'A': ['B', 'C'],\n", + " 'B': ['D', 'E'],\n", + " 'C': ['F', 'G'],\n", + " 'D': [],\n", + " 'E': [],\n", + " 'F': [],\n", + " 'G': []\n", + " },\n", + " 'position': {\n", + " 'A': (300, 100),\n", + " 'B': (150, 200),\n", + " 'C': (450, 200),\n", + " 'D': (100, 300),\n", + " 'E': (200, 300),\n", + " 'F': (300, 300),\n", + " 'G': (400, 400)\n", + " },\n", + " 'root': 'A',\n", + " 'goals': ['G']\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Now, Create the tree world using the abstract world information" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "treeWorld = CreateTreeWorld(worldName=\"Simple Tree World\", worldInfo=treeWorldInfo)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Compile the world!" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "treeWorld.constructWorld()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Quick look at our world" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+-------------------------+-------------------+\n", + "| Attribute | Value |\n", + "+-------------------------+-------------------+\n", + "| World Name | Simple Tree World |\n", + "| Root Node ID | A |\n", + "| Goal Nodes | ['G'] |\n", + "| Width | 3286 |\n", + "| Height | 1080 |\n", + "| Node Radius | 20 |\n", + "| Font Size | 12 |\n", + "| Font Bold | True |\n", + "| Font Italic | True |\n", + "| Node Color | gray |\n", + "| Goal Color | green |\n", + "| Line Thickness | 2 |\n", + "| Arrow Shape | (10, 12, 5) |\n", + "| Button Background Color | #7FC7D9 |\n", + "| Button Foreground Color | #332941 |\n", + "| Text Font | Helvetica |\n", + "| Text Size | 24 |\n", + "| Text Weight | bold |\n", + "| Button Text | Start Agent |\n", + "+-------------------------+-------------------+\n" + ] + } + ], + "source": [ + "print(treeWorld)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Let's create a simple tree agent" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "treeAgent = TreeAgent(agentName=\"Simple Tree Agent\", world=treeWorld)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Quick look at our Agent" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------------+-------------------+\n", + "| Attribute | Value |\n", + "+--------------+-------------------+\n", + "| Agent Name | Simple Tree Agent |\n", + "| Agent Color | blue |\n", + "| World Name | Simple Tree World |\n", + "| World ID | TREEWORLD |\n", + "| Root Node ID | A |\n", + "+--------------+-------------------+\n" + ] + } + ], + "source": [ + "print(treeAgent)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### First, connect the world and the agent" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "treeWorld.setAgent(agent=treeAgent)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### DFS algorithm" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "def dfs(nodeId, agent):\n", + " if agent.checkGoalState(nodeId):\n", + " return True\n", + " for child in treeWorld.nodeMap[nodeId].children:\n", + " agent.moveAgent(child.id)\n", + " if dfs(child.id, agent):\n", + " return True\n", + " agent.moveAgent(nodeId)\n", + " return False" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Call back function which our agent will use." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "def toDo():\n", + " print(\"Agent Started moving around the world!\")\n", + " if(dfs(treeWorld.root.id, treeAgent)):\n", + " print(\"Agent reached the goal state!\")\n", + " else:\n", + " print(\"Agent could not reach the goal state!\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Set the call back function" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "treeAgent.setAlgorithmCallBack(toDo)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Start the simulation\n", + "We will show the world and on the world you can find the button to start the simulation." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Agent Started moving around the world!\n", + "Agent reached the goal state!\n" + ] + } + ], + "source": [ + "treeWorld.showWorld()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Summary Generation" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+---------+------------------+\n", + "| Node ID | Number of Visits |\n", + "+---------+------------------+\n", + "| A | 2 |\n", + "| B | 3 |\n", + "| C | 2 |\n", + "| D | 1 |\n", + "| E | 1 |\n", + "| F | 1 |\n", + "| G | 1 |\n", + "+---------+------------------+\n", + "+--------------+---------------------------+\n", + "| Attribute | Value |\n", + "+--------------+---------------------------+\n", + "| Start Time | Mon, 24 Jun 2024 06:13:50 |\n", + "| End Time | Mon, 24 Jun 2024 06:14:00 |\n", + "| Elapsed Time | 10.027 sec |\n", + "+--------------+---------------------------+\n" + ] + } + ], + "source": [ + "print(treeWorld.summary())\n", + "print(treeAgent.summary())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Simulate a simple graph world\n", + "We will create a graph world using the below image as the reference and a simple graph agent which will traverse the world using the dfs algorithm and find the goal node.\n", + "### Import the required modules form the library" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "from traverseCraft.world import CreateGraphWorld\n", + "from traverseCraft.agent import GraphAgent" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### First, create the graph world abstract information." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "graphWorldInfo = {\n", + " 'adj': {\n", + " 'A': ['B', 'C'],\n", + " 'B': ['C', 'D', 'E'],\n", + " 'C': ['B', 'F'],\n", + " 'D': ['E'],\n", + " 'E': ['F', 'G'],\n", + " 'F': ['E', 'G'],\n", + " 'G': []\n", + " },\n", + " 'position': {\n", + " 'A': (100, 200),\n", + " 'B': (200, 100),\n", + " 'C': (200, 300),\n", + " 'D': (300, 200),\n", + " 'E': (400, 100),\n", + " 'F': (400, 300),\n", + " 'G': (500, 200)\n", + " },\n", + " 'goals': ['G']\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Now, Create the graph world using the abstract world information" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "graphWorld = CreateGraphWorld(worldName=\"Simple Graph World\", worldInfo=graphWorldInfo)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Compile the world!" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "graphWorld.constructWorld()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Quick look at our world" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+-------------------------+--------------------+\n", + "| Attribute | Value |\n", + "+-------------------------+--------------------+\n", + "| World Name | Simple Graph World |\n", + "| Goal Nodes | ['G'] |\n", + "| Width | 3286 |\n", + "| Height | 1080 |\n", + "| Node Radius | 20 |\n", + "| Font Size | 12 |\n", + "| Font Bold | True |\n", + "| Font Italic | True |\n", + "| Node Color | gray |\n", + "| Goal Color | green |\n", + "| Line Thickness | 2 |\n", + "| Arrow Shape | (10, 12, 5) |\n", + "| Button Background Color | #7FC7D9 |\n", + "| Button Foreground Color | #332941 |\n", + "| Text Font | Helvetica |\n", + "| Text Size | 24 |\n", + "| Text Weight | bold |\n", + "| Button Text | Start Agent |\n", + "+-------------------------+--------------------+\n" + ] + } + ], + "source": [ + "print(graphWorld)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Let's create a simple graph agent" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "graphAgent = GraphAgent(agentName=\"Simple Graph Agent\", world=graphWorld, startNodeId='A')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Quick look at our Agent" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+---------------+--------------------+\n", + "| Attribute | Value |\n", + "+---------------+--------------------+\n", + "| Agent Name | Simple Graph Agent |\n", + "| Agent Color | blue |\n", + "| World Name | Simple Graph World |\n", + "| World ID | GRAPHWORLD |\n", + "| Start Node ID | A |\n", + "+---------------+--------------------+\n" + ] + } + ], + "source": [ + "print(graphAgent)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### First, connect the world and the agent" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "graphWorld.setAgent(agent=graphAgent)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### DFS algorithm" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "def dfs(nodeId, agent, visited=[]):\n", + " if agent.checkGoalState(nodeId):\n", + " return True\n", + " visited.append(nodeId)\n", + " for neighbor in graphWorld.nodeMap[nodeId].neighbors:\n", + " if neighbor.id in visited:\n", + " continue\n", + " agent.moveAgent(neighbor.id)\n", + " if dfs(neighbor.id, agent, visited):\n", + " return True\n", + " agent.moveAgent(nodeId)\n", + " return False" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Call back function which our agent will use." + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "def toDo():\n", + " print(\"Agent Started moving around the world!\")\n", + " if(dfs('C', graphAgent)):\n", + " print(\"Agent reached the goal state!\")\n", + " else:\n", + " print(\"Agent could not reach the goal state!\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Set the call back function" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "graphAgent.setAlgorithmCallBack(toDo)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Start the simulation\n", + "We will show the world and on the world you can find the button to start the simulation." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Agent Started moving around the world!\n", + "Agent reached the goal state!\n" + ] + } + ], + "source": [ + "graphWorld.showWorld()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Summary Generation" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+---------+------------------+\n", + "| Node ID | Number of Visits |\n", + "+---------+------------------+\n", + "| G | 1 |\n", + "| E | 1 |\n", + "| F | 1 |\n", + "| C | 0 |\n", + "| D | 1 |\n", + "| B | 1 |\n", + "| A | 1 |\n", + "+---------+------------------+\n", + "+--------------+---------------------------+\n", + "| Attribute | Value |\n", + "+--------------+---------------------------+\n", + "| Start Time | Mon, 24 Jun 2024 06:14:10 |\n", + "| End Time | Mon, 24 Jun 2024 06:14:15 |\n", + "| Elapsed Time | 5.019 sec |\n", + "+--------------+---------------------------+\n" + ] + } + ], + "source": [ + "print(graphWorld.summary())\n", + "print(graphAgent.summary())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For more information and better understanding refer to [Tutorial]() section or you get more information about the methods or the modules please refer to the [API Reference]() section.\n", + "\n", + "Thank You!" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.8.19" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}