diff --git a/chapter06/01_subgraph_func.ipynb b/chapter06/01_subgraph_func.ipynb new file mode 100644 index 0000000..ebb2444 --- /dev/null +++ b/chapter06/01_subgraph_func.ipynb @@ -0,0 +1,232 @@ +{ + "cells": [ + { + "cell_type": "code", + "id": "initial_id", + "metadata": { + "collapsed": true, + "ExecuteTime": { + "end_time": "2026-08-16T07:57:49.151253Z", + "start_time": "2026-08-16T07:57:49.125918Z" + } + }, + "source": [ + "from typing import TypedDict\n", + "\n", + "\n", + "class SubGraphState(TypedDict):\n", + " raw_text: str # 未清洗的文本\n", + " stripped_text: str # 去除首尾空格\n", + " punctuated: str # 句尾添加句号\n", + "\n", + "\n", + "# 去除空格\n", + "def sub_graph_strip_node(state: SubGraphState) -> SubGraphState:\n", + " raw_text = state[\"raw_text\"]\n", + " stripped_text = raw_text.strip()\n", + " return SubGraphState(stripped_text=stripped_text)\n", + "\n", + "\n", + "# 添加句号\n", + "def sub_graph_punctuate_node(state: SubGraphState) -> SubGraphState:\n", + " striped_text = state[\"stripped_text\"]\n", + " punctuated_text = striped_text + \"。\"\n", + " return SubGraphState(punctuated=punctuated_text)\n", + "\n", + "\n", + "from langgraph.graph import StateGraph, START, END\n", + "\n", + "builder = StateGraph(state_schema=SubGraphState)\n", + "builder.add_node(\"sub_graph_strip_node\", sub_graph_strip_node)\n", + "builder.add_node(\"sub_graph_punctuate_node\", sub_graph_punctuate_node)\n", + "builder.add_edge(START, \"sub_graph_strip_node\")\n", + "builder.add_edge(\"sub_graph_strip_node\", \"sub_graph_punctuate_node\")\n", + "builder.add_edge(\"sub_graph_punctuate_node\", END)\n", + "sub_graph = builder.compile()" + ], + "outputs": [], + "execution_count": 25 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-08-16T07:57:49.172031Z", + "start_time": "2026-08-16T07:57:49.154524Z" + } + }, + "cell_type": "code", + "source": [ + "res = sub_graph.invoke({\"raw_text\": \" langgraph hhh \"})\n", + "print(res)" + ], + "id": "242837b7db1322d2", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'raw_text': ' langgraph hhh ', 'stripped_text': 'langgraph hhh', 'punctuated': 'langgraph hhh。'}\n" + ] + } + ], + "execution_count": 26 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-08-16T07:57:49.180063Z", + "start_time": "2026-08-16T07:57:49.174869Z" + } + }, + "cell_type": "code", + "source": [ + "class ParentState(TypedDict):\n", + " input_text: str\n", + " cleaned_text: str\n", + "\n", + "\n", + "def call_subgraph(state: ParentState) -> ParentState:\n", + " input_text = state[\"input_text\"]\n", + " res = sub_graph.invoke({\"raw_text\": input_text})\n", + " return ParentState(cleaned_text=res[\"punctuated\"])\n", + "\n", + "\n", + "parent_builder = StateGraph(state_schema=ParentState)\n", + "parent_builder.add_node(\"call_subgraph\", call_subgraph)\n", + "parent_builder.add_edge(START, \"call_subgraph\")\n", + "parent_builder.add_edge(\"call_subgraph\", END)\n", + "graph = parent_builder.compile()" + ], + "id": "c785d2fc0ad5236a", + "outputs": [], + "execution_count": 27 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-08-16T07:57:49.205931Z", + "start_time": "2026-08-16T07:57:49.188421Z" + } + }, + "cell_type": "code", + "source": [ + "res = graph.invoke({\"input_text\": \" langgraph hhh \"})\n", + "print(res)" + ], + "id": "761dc637cfa297fa", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'input_text': ' langgraph hhh ', 'cleaned_text': 'langgraph hhh。'}\n" + ] + } + ], + "execution_count": 28 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-08-16T07:57:55.534140Z", + "start_time": "2026-08-16T07:57:49.206542Z" + } + }, + "cell_type": "code", + "source": [ + "from IPython.display import display,Image\n", + "display(graph)" + ], + "id": "c43542506a94c8e", + "outputs": [ + { + "data": { + "text/plain": [ + "" + ], + "image/png": "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" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 29 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-08-16T07:57:58.387664Z", + "start_time": "2026-08-16T07:57:55.545075Z" + } + }, + "cell_type": "code", + "source": [ + "display(\n", + " Image(graph.get_graph(xray=True).draw_mermaid_png())\n", + ")" + ], + "id": "39f71b596bc45c94", + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 30 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-08-16T08:03:04.656791Z", + "start_time": "2026-08-16T08:03:00.524802Z" + } + }, + "cell_type": "code", + "source": [ + "for item in list(graph.get_subgraphs()):\n", + " display(item[1])" + ], + "id": "a33aee305539b21f", + "outputs": [ + { + "data": { + "text/plain": [ + "" + ], + "image/png": "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" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 35 + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/chapter06/02_subgraph_node.ipynb b/chapter06/02_subgraph_node.ipynb new file mode 100644 index 0000000..c60dbe3 --- /dev/null +++ b/chapter06/02_subgraph_node.ipynb @@ -0,0 +1,222 @@ +{ + "cells": [ + { + "cell_type": "code", + "id": "initial_id", + "metadata": { + "collapsed": true, + "ExecuteTime": { + "end_time": "2026-08-16T08:06:49.591291Z", + "start_time": "2026-08-16T08:06:49.559898Z" + } + }, + "source": [ + "from typing import TypedDict\n", + "\n", + "\n", + "class OverallState(TypedDict):\n", + " raw_text: str # 未清洗的文本\n", + " stripped_text: str # 去除首尾空格\n", + " punctuated: str # 句尾添加句号\n", + "\n", + "\n", + "# 去除空格\n", + "def sub_graph_strip_node(state: OverallState) -> OverallState:\n", + " raw_text = state[\"raw_text\"]\n", + " stripped_text = raw_text.strip()\n", + " return OverallState(stripped_text=stripped_text)\n", + "\n", + "\n", + "# 添加句号\n", + "def sub_graph_punctuate_node(state: OverallState) -> OverallState:\n", + " striped_text = state[\"stripped_text\"]\n", + " punctuated_text = striped_text + \"。\"\n", + " return OverallState(punctuated=punctuated_text)\n", + "\n", + "\n", + "from langgraph.graph import StateGraph, START, END\n", + "\n", + "builder = StateGraph(state_schema=OverallState)\n", + "builder.add_node(\"sub_graph_strip_node\", sub_graph_strip_node)\n", + "builder.add_node(\"sub_graph_punctuate_node\", sub_graph_punctuate_node)\n", + "builder.add_edge(START, \"sub_graph_strip_node\")\n", + "builder.add_edge(\"sub_graph_strip_node\", \"sub_graph_punctuate_node\")\n", + "builder.add_edge(\"sub_graph_punctuate_node\", END)\n", + "sub_graph = builder.compile()" + ], + "outputs": [], + "execution_count": 5 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-08-16T08:06:49.610607Z", + "start_time": "2026-08-16T08:06:49.592754Z" + } + }, + "cell_type": "code", + "source": [ + "res = sub_graph.invoke({\"raw_text\": \" langgraph hhh \"})\n", + "print(res)" + ], + "id": "d08491988d8ae516", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'raw_text': ' langgraph hhh ', 'stripped_text': 'langgraph hhh', 'punctuated': 'langgraph hhh。'}\n" + ] + } + ], + "execution_count": 6 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-08-16T08:06:49.627325Z", + "start_time": "2026-08-16T08:06:49.618778Z" + } + }, + "cell_type": "code", + "source": [ + "parent_builder = StateGraph(state_schema=OverallState)\n", + "parent_builder.add_node(\"subgraph_node\",sub_graph)\n", + "parent_builder.add_edge(START, \"subgraph_node\")\n", + "parent_builder.add_edge(\"subgraph_node\", END)\n", + "graph = parent_builder.compile()" + ], + "id": "d8fe093006e4faf7", + "outputs": [], + "execution_count": 7 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-08-16T08:06:49.650628Z", + "start_time": "2026-08-16T08:06:49.628799Z" + } + }, + "cell_type": "code", + "source": [ + "res = graph.invoke({\"raw_text\": \" langgraph hhh \"})\n", + "print(res)" + ], + "id": "cc81bb056283aff9", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'raw_text': ' langgraph hhh ', 'stripped_text': 'langgraph hhh', 'punctuated': 'langgraph hhh。'}\n" + ] + } + ], + "execution_count": 8 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-08-16T08:06:50.569935Z", + "start_time": "2026-08-16T08:06:49.651798Z" + } + }, + "cell_type": "code", + "source": [ + "from IPython.display import display, Image\n", + "\n", + "display(graph)" + ], + "id": "3fc162d77b93e294", + "outputs": [ + { + "data": { + "text/plain": [ + "" + ], + "image/png": "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" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 9 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-08-16T08:06:52.321685Z", + "start_time": "2026-08-16T08:06:50.578926Z" + } + }, + "cell_type": "code", + "source": [ + "display(\n", + " Image(graph.get_graph(xray=True).draw_mermaid_png())\n", + ")" + ], + "id": "ffdb183df69a54d7", + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 10 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-08-16T08:06:55.450851Z", + "start_time": "2026-08-16T08:06:52.330902Z" + } + }, + "cell_type": "code", + "source": [ + "for item in list(graph.get_subgraphs()):\n", + " display(item[1])" + ], + "id": "9de53e36fca2016a", + "outputs": [ + { + "data": { + "text/plain": [ + "" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPUAAAFNCAIAAABXPb6eAAAQAElEQVR4nOydB1wUxxfH5zq9KkpHBOxdbH+7IopdLNgLsRt7EntPLIjRWGOJJpaoMbYYu0aNHQt2jUhv0vv1u/+D1fOEAyx3K+y+b/xcdndmd2dnf/PmzVt2lq9WqwmCMBQuQRDmgvpGmAzqG2EyqG+EyaC+ESaD+kaYDJ8gWigUirvnMxOjxOIclUpB5DIVh8OhQqiwQIgaDIJa+S4/lwupBDJAIhVohUwcLkelUmt25FKrkFOlLkinjpafnwNHUxHNKgWfz1UoVNqnUKkKjsPjqJTq97IWwBPwOByVkTHXxkFQu4VlRQdjgryFg/FvimNb4hIjJQqZmscnIhOuQAS64sLqW0HmKzNf4aRAkW835gtUnb+srToOj6NWqt/Lo3rzSwmcOhrR0ve7s4COBRyV/N1NedcGuO+dWgOPz1UTpVyqFOeqVcr8DLaVBW36VnBwNyWsB/VN9gdHpcbJjc25VWqbtutXiZRz7lxIe3YzKzNFAa203wx7KxtWm3NW6/vO+dTbp9PNbfg9x9pb2IoIs/jzp5iECGnlKqK+k50JW2Gvvg+ti05JkHUcaOdRz4Iwl61zwmAkMPr7qoSVsFTfV48nvbidFbjMg7CAI5tiMl7LRy52J+yDjfo++GN0Vqriq2Usut9HN8ckRcvGLGedFWdd/Pv0rwlsEzfQa7yznYto1+JwwjLYpe+MFMmrh7lsEzdFr/FOChk5+Us8YRPs0veB4NiqddkbFR7wjVPk0zzCJlik79tnUuDxR+fh9oStmFsJza35e5ZHEdbAIn2HXspwq25C2E2XMZUyk+WENbBF35nJEpmEdBnlQNhNhYrGfBHn5E62eOFs0feVo6lGphxCLwcPHly4cCH5eGbNmnXs2DFiGByqGMW/khB2wBZ9J8dKbRzofgL/9OlT8kl88o4fQp2WljKJirADtuhbKlY5uhsRwxAZGQkW18fHp2PHjtOnTw8NDYWNY8aMOXHixN9//924cePnz5/DlgMHDkyaNKlt27a+vr6zZ8+OjY2ldt+/fz9suXTpUpMmTVavXg354+Pjly5dCjmJAXCraQa/r2PEhAWwRd9qFXHyMsjgUiaTgZR5PN769es3b97M5/OnTZsmkUi2bt1au3btrl273rlzp3r16iD6oKCgevXqgYIXL16clpY2b9486ghCoTA3N/fQoUNLlizp37//tWvXYOP8+fNB8cQwcHkkNowVgUK2vN+gVpPKjgbxT6KiokCsAwcOBBHD6ooVK+7du6dQKAplq1OnDrjjLi4u0ABgVS6XQzPIzMy0tLTkcDjQHoYPH+7t7Q1JUqmUGBguh5uTxgoXhTXv76jhWnnEAIBkra2tFy1a5Ofn16hRI7DQ4GAUzQYGHhyS4ODgx48fg7WmNkLDAH1Ty7Vq1SJ0oeaoCTv+7ohF8e/UWIN4nCKRaNu2bS1btty3b19gYGCvXr1OnjxZNNvly5fBNa9ZsyZkDgkJ2bBhQ6EM4KUQulAp1cbmrLj1bNE3T0DiIgw1onJzc5s6dSqMJtesWePh4bFgwQJqQKnNkSNH6tevP3HiRC8vL3BIsrOzyZdDKScOBhttlylYo28+N/qFQfQNwZPjx4/DgpGRUevWrVeuXAke9rNnzwplA1fbzs5Os3rx4kXyhUiIyIFfJ08zwgLYom9rO0FyjEHGbSBciHusXbs2JiYGxpo7d+6EwSV44ZDk7OwM3jZ4I+Bng9m+efMmxFIgde/evdS+CQkJRQ8IDg+0BE1mom/uX8qE3owlsEXfTbrYSnINEjEAKc+ZM+fUqVO9e/f29/e/f//+li1b3N3z/wS3T58+4IqAT/Ly5csJEya0aNECXPDmzZsnJiZCiBB88cmTJ58+fbroMUeNGgWtYsaMGWKx/vuc2JdiOxf6fP0vC4ve39k4I6xGE/P2A8r9G/KfyYZpYeOC3Pl8HF8yC6+GZs/vfMlRXVngQHC0sRmXJeImrJq/ymdw5bAHYddPJLXoZqczAzxjB69XZxL4wdRzmaJA5NtAD9KB4o6sVCqh4y2uSOfOnRMIdLvYybGywXMcCWtg1/vFj29lXDmUMiFI92vz4OwWN54rQd/GxsbFJX0+JYQRSyiSubm5zu27lkSYmPP6T3MhrIF1788fCI6SStTD5roRlnH5z6Rnt7PGrWTFlBgaWPf+/IAZrkq5GtxQwiae3E19fJ114iasnd/nj3XR0jzVkNluhAXcOZ8acjZ9/CrWiZuweX42cEZVCtWoJQyf8mb/mui0eNmE1WwUN2H5/JrHtsbGPpc4VzPuMZaBIYWbJ5PunM8yteCOXMTG+V4o2D4/cnqS5PD6eHGOqqKTsFlXG9fq5f6vMmRi5Zk9CbEvJRwuqdfaormfHWExOP93Pi/vZ107npKbpeJwiJEpz8yaZ2LGFYj4SqXu/Nqz2fO4RFnag38qf6GcXA5R6aPueXyOQqqU5CoyU5XiHKVaRfgiAk9q2/Rh+5NagvouxL1/UqOe5WWnKeUyFQhFLi2mcrQEzuURlVYzePeFhvey59czj8dRKFSwH5fLef8YutB5IF3whfkHEhhxjUy5Th7GLXuy2mAXAvVNK3/99dfdu3fhkSdBaAG/L0UrJTx0RAwB1jWtoL5pBuuaVlDfNIN1TStyuby4v+xDDAHqm1bQftMM1jWtoL5pBr8/Tyuob5pBfdMK+t80g7aEVtB+0wzWNa2gvmkG65pWUN80g3VNK6hvmsG6phUcX9IM6ptW0H7TDNY1raC+aQbrmlZQ3zSDdU0r6H/TDOqbVtB+0wzWNa2gvmkG65pWUN80g3VNK6hvmsG6phXUN81gXdMK6ptmsK5ppWLFijyeQT6jjOgE9U0riYmJBKERfH8HYTKob4TJoL4RJoP6RpgM6hthMqhvhMmgvhEmg/pGmAzqG2EyqG+EyaC+ESaD+kaYDOobYTKob4TJoL4RJoPfd6UDX19foVAIC0lJSdbW1gKBAKrdwsJi3759BDEk+H4DHfB4vISEBGo5JSUFfkUi0ejRowliYNA/oYPmzZsX6iednZ179uxJEAOD+qaDYcOG2dnZaVbBVwkICCCI4UF904Grq2uzZs20V3v16kUQw4P6pokRI0bY29uTAs+7f//+BKEF1DdNgM1u0aIFeOHgeffu3ZsgtGDY+IlMqkpPlOVlKdQcDmE97ZoGPL+X3tmnc/jjXILAOETEsbUXGZsZcEIYA8a/rx5LCQvNMTLjmVnwVSqCIIUQGnNjXuQ6eRh3HFRJIDKIK2EofZ/d89rUSli3lTVBkBJ5HS2+dTLZf5Kjkan+DblB9H3xQJKJhaBWCxQ38kHkZMjP7IobsdCN6Bv9dwqpCdLsDAWKG/lwzKwEng0tHl7NIPpG//pOS5Tx+BiWQT4OU0v+60gp0Tf6F2JOpsK6opAgyMdgWUEI0Taib/QfH1QpiVyGf5OIfBwgG0mOkugbdCQQJoP6RpgM6hthMqhvhMmgvhEmg/pGmAzqG2EyqG+EyaC+ESaD+kaYDOobYTLlVd89e3f4bfd2UpaIjY1u16FxyJ2bxPAsXPTtjJnjyRclIyMdrvefS+dIGQbtd9mlt79PfEKczqTWrTv4+PgRpDRwfrYySmJiAhjI4lI7tPclyAdQJvQdHR25c9eW0Ad31Wp1rVp1A/oPq1OnPmzv0rXl8GFjAgYMo7KtClry6tV/P2/Zo9nxyNGDp08fj4uPadigyfRpc6ysSnlp6OnTR2vXrYiNi65Tp8GwIV9t2brOvYrHtKmzw8PDAkcHLP9+7eo1y+Ag27f+HhHx6vhfh+7dD0lMjHdzdffz69WzR184wn8vn48dN2TxolW//rYV9rK1rdCubaeJE6ZrnyV4zfcn/j4CSa1btZ/89bclFwku+c/Dv585cyImNsrVpUrjxs1GjRz/8NH96TPGQergIT3/9782y5YEgz8GBb5y9eLDh/ePHb0YHLwsJyc7ePVmyNOtR5tBA0e+ePH0yr8XTU1N4dLmzF5qbmZewknh6kZ9NWDTxl/37dt59dqlihXt4CrGjP6ax+NRtwNq6b+Xz3g8vpub+4jhYxvUb0zteOHimZ07N2dlZ7Vo0XpAv6Haxzx95q/jf/0ZERFWpYpH+3ad/PsM5JSBSRO+vH8ik8mmTh8DNbtyxfrgoM18Hn/uvGkSiaTUHU+dOpaenjpu3NS5s5eFht7ZsHF1yfnhmHPmTbO2tvll+8HAURM2bl6TnPyaugcCgQB+f9uzfUD/oTOmz4PljZuCQ0JuTJn83YrlP4G41/208uata7Adige/e/bsWLZ0zZlT1ydOmHHs+B9/nzyqOQs01Lp1G64J3tK/3xBofhf/OVtyqQ4f3r9n7y99/Qft33eie3d/ONT+A7+BnqCxQerePcdA3FQJT5w84uFRLWjVRhNjE+0jgAr/OLS3W7c+F8+HrFqxAdS5fkNQySelrjd4zbIOHTqfPX0DKvDgH3soTzo9PW3S1yPt7Cpv/XnfxvU7ra1sli6bk5eXB0nQnr//YV6nTt327D7q26mb9lnOXzi9ctViL8/q+/Yc/ypw4qE/923YFEzKAF9e3zAsgzqF5g61U7Wq58IFKxYvDlIoFKXuaGxiMnLEOJBC8+at4O6C9YKmUkL+m7euZmZmjB0zpXJlezjX6K8mvX6dSCVRKvdu3Kxf38E1qteC5fnzlwcFbWrYwBuOD5a7mleN2yHXNYdq1aq9fWUHoVDYrq2Pt3fzCxdOa5Igv0/HLvAL+q5UqfKjR/dJiTx4eK9atZq+vt2g3+jWtffGDbuaNvlf0WxQQgsLy68nzmzcqCmfX7jX9ajqBYWHPDVr1oHSXrp0Ti6Xk9Jo07pj2zYdQev16jV0sHf8779nsBGailAkmjljHmxxcnL5ZuYCsTgP2jAkwW8lu8rDhn5lYW4BF9i167tZik6ePFq3boOpU2aB+YBKGzl83NGjB+G2ki/Nl9e3o6Mz3NoVqxaBGXv8+AGXy4W6MzMzK3XHxo2aaXpAuK9wR1NSk0vID10nHNbd3YNahbOYm1toZ/DyrPFuRa0GyzpshD+ECODf8xdPM7TulqdHtXfld3COjArXrNapXV+zbGlhJZWW8k5h7dr17t69Ba4X9O+ZWZmODk4eHl46c1bzqlncQTzeLw9URXx8LCkNL69312tmZg4ODyyER4R5elbXNCFweJydXCnpx8XFuFWpqtmleoEhAFQq1eMnD7wbN9ckNWjgDRsflta2aeDL+98ikWjdj9ugX4ZObccvmxwcnEYMG/MhwQETE1PNsnFBlw3mGaxOcfmzc7K1dwEK+etgt6gFuDez5kyRy2Vg4+tDMzAz/3pKoHZOIyNjrWWj3NwczSqP/3FVCp4JlOra9cvQv4Oq2rb1GTt6coUKFYvmpGbI14lIZPSuPMb5ZdMuUnGAKSm6MS01BSyO9hY4YJ443z/JysoEi67Zbvy2EqDbhBYF9w7+ae9YFux3mRhfuri4yqPNpwAAEABJREFUjR83FZyNe/dunzp9/IcVC1zd3MGFKJRNqXrv/TyJRKxZpm6npaVVCWcxEhkVcmBSi7H3MIh8/vzJ6qBNjRo2obaAbatY4d0Ex5Spe1sMibbcPxYQGbgl8C8yMhwuf9dvW+Faflj240cdRFvNEnF+tXxykUxMTSXS9wY/4rw8J8d8WYODpJ2Ul/dmljlo4SYmJp18ukLUUntHB3sn8qX58v5JTEwUaJoUVBOMyhctXAlmjOoQhUKRuMByaHJq7xgW9kKzDNEDMG/aEiwKmCWIuKWlpVKr90PvUMOmokA/AL+ao4Hy4J92Bgj1aBcDgjDkU4HICUQzYAEiFX36BMA4RPu6PpAHWuV5GfYCKrCQDf5wwAt69uyxxn2HUElUdESVArekUiV7SFK9nWvvxs1/NXtVreoF3SO4fNS/2rXq2dpUsLOrRL40X17f2dlZ4H1u3rI2Ni4GFLx3304YXEIFkQKv+vKVCzk5+cZp954dKSlJ2jtGRL6CUb9SqQRze+bsCQjGUWGB4mjWtCVEaWDUn5ubC+favXs7xMV05oSAIEjkwMHdcHepcASM3hJfJ2gyhNy5cet2/nATgmvQTjp27EI+lQsXTy9Y9M3161fA+b558+q/Vy9S1+7s4ga/MFJ8+uxxqQdJTkmCcSFUBZT2xN+H27XrJHrra30sEMOB3gBCnDD4hla9fMUC6Pf8uuTPVg6+ExgIqA2IacJVwwhSs9fowEnXrl06eeoYqP/Ro9AlS2dPnzmu5OE+PXx5fYOIIXR9/sKpocN6w3gOAg4QXANjBkmTJs60sbbt3rOtj28zqVTSoX1nzV4KhRxiHU+ePOzYqen0GWNhVAeZSz4RBKQh1A3xCv9+nVauWjRo0Ejw2vl8HU0C4h5z5yx7+uxRz17tIaQIAa8ePfqC6Ro+si+VYVDAiB07NsK4E56Tg9Ht6vfpk9VDOBKa09z503v17hAUvPR/LdpMnzaX5A8TnTr7dodo47Zt60s9CLg3VFVACSGI/vWkb8in4uToDCEsGIsHDOoGcVvYsm7tdhhlkoL40rixU27fvt6+ozdU4KzvFpOC+D38wvOKrVv2QmwenrnO/HYCtBCIn35yG9Mj+p9/8O6F9Ox0VSMfW1L2iIuPhZiJRUHYBC4cnoyMGjHe33/ghx+BehIEA2IIh5GyATz6Aa8GwnakPJMULQm9mOI/Rc8uO4uez4NXPWHicAgVBwZOhDAtGGAuhwt9LkGYC6P0ve/3Xb//vktnEgRkNvz0y4of1m3bvmHBwpkyqbRGjdrwMAWcFvKlS0WYctIyCKP8ExjCa0futIHn6sWNJg3NFylV2ayKEkD/pHTgQUzJf1f0RfgipSqbVUE/+PffCJNBfSNMBvWNMBnUN8JkUN8Ik0F9I0wG9Y0wGdQ3wmRQ3wiT0b++RcZcgejLTwyAlDfUlgb4rKT+9W1VUZAQISYI8jEkxUqMTPWvRv0f0cHdWK1UK5X4CUzkI8hMkrnVNCH6xgAthsdp6mdzfnccQZAP49bJZAtbvpOn/vWt/7+PpUiMkpzYltCgg41VRaGJuYAgSBGUClVKnCQhPM/WXtjE14YYAEPpG8jLVty9kJ4YKRXnKNT6//JyuUQqkwkEAm4ZmJivLGBdWQQ+t1dDU7eapU/n9GkYUN9IUXr16rV+/Xpn50+cvAH5WDD+jTAZ1DfCZFDfCJNBfSNMBvWNMBnUN8JkUN8Ik0F9I0wG9Y0wGdQ3wmRQ3wiTQX0jTAb1jTAZ1DfCZFDfCJNBfSNMBvWNMBnUN8JkUN8Ik0F9I0wG9Y0wGdQ3wmRQ3wiTYdH3ucsCHh4eHJzch0ZQ37QSFhaGEyrRCfonCJNBfSNMBvWNMBnUN8JkUN8Ik0F9I0wG9Y0wGdQ3wmRQ3wiTQX0jTAb1jTAZ1DfCZFDfCJNBfSNMBvWNMBn8visd9OvXTygU8ni8ly9fOjo6ikQiWIYt27dvJ4ghwfcb6EAsFkdERFDLkZGR1MKYMWMIYmDQP6GDWrVqFeonXVxcBg0aRBADg/qmgyFDhjg4OGhWORyOn5+fmZkZQQwM6psO6hSgWXVycgoICCCI4UF90wR4I3Z2dtQyGm/aQH3TRO3atWvUqAFeuKurKxpv2vig+IlCrhLnqAjyefTvM/zFk+hunf2Jwjg7XUGQz4DLI6YWpau3lPj3s9tZD//NTEuUmZjxCIKUGcwrCDKSZNW9zVt0q1BCtpL0fftsWkq8vH4bG3MbAUGQMkZetiLuZW7Y/ay+U5y4PN2zghWr71un07JSFc262REEKcPEvsx9dCWt/3Rnnam6x5fpSbKUOCmKGyn7OHmaOnqZPrmRqTNVt75B3Go1TgOJlA9MzPnx4RKdSbr1nZOprOhsRBCkPGBrL1IqdLvZuiMscqlKrrs9IEiZQ6kkGclynUn4fAdhMqhvhMmgvhEmg/pGmAzqG2EyqG+EyaC+ESaD+kaYDOobYTKob4TJoL4RJvMl9d2zd4ffdpetCZxiY6PbdWgccucmQQxJRkY61PM/l84RA4P2uzwREfEqYFA38nn09veJT4gj7ADnZytPvPjvKfk8EhMTwHYS1qA3+x0dHbl4ySywDb36dJw7f/qjR6HU9i5dW+4/8Jsm26qgJWPHDdHe8cjRg7ClW482CxZ+8yFV//TpozFjB/t1a/Xd7MlPnjz8ekrgj2uXw/Y/D+/37+d79dqlDj5N1m9cTQqs3bqfVg4f2de3Sws4xbHjh6gj/PfyOXSOV/69GDg6ABb69u+8cdOaQmcJXvM9lfTT+lWlFungH3vgqq9evdSnb6f2Hb2HDOt99uzfVBJcO9SAJufr14lw2GvXLsMyVNeSpbOvX7/So1d7H99mU6aNfvbssSbnjRv/gqmGa4GSnzp9HLbs3LVl5arF1BH+OLT32fMnsAC/ml2GDO21afOP1PLhIwe+/W5S9x5toU7gLHHxsbDxfuidgYO7w8LgIT3nLZgBCwqF4uetP40M7N+1e2uoz5s3r5Z6sVCr1HnnL5gJC/0D/DZvWatUKqlUkMH0GePgboLzCVcEZ9TseOHiGSghXOyKVYvS09O0jwn3EUrbo2e7ocP7wCXk5uYSPaEffctksqnTx/B4vJUr1gcHbebz+HPnTZNISv8T8lOnjqWnp44bN3Xu7GWhoXc2FOiyBOCYc+ZNs7a2+WX7wcBREzZuXpOc/JrDyX/VSCgU5uXlHj9+aPasJb179octGzcFh4TcmDL5uxXLf/Lz6wVav3nrGmyH4sHvnj07li1dc+bU9YkTZhw7/sffJ49qzgJKqlu34ZrgLf37DYHmd/GfsyWXisfj5+bmXLh4eu/uY0ePXOjQ3hduYUxMVMl78fn8J08fnjt/csvm3af+vioSipavXEglgbjnL5wZOGoilLxly3ZgFM5fOD1yxLiAAcMqVar8z4U7/foOLuHIYFzWbwiqVavekiWrZ323GMT0/Q/zYHuD+o2Xf78WFvbuObZsSTAsQOs99Oe+3r0G7Nv7V5vWHRYu/vbylQslF1sgyH/ZPHjNsg4dOp89fQNuHDRvypOGE036eqSdXeWtP+/buH6ntZXN0mVz8vLyICk8PAzK0KlTtz27j/p26gbF0xwwNi5m5rcTJFLJhvU7ly5eHR7+ctr0MdDwiD7Qj77hXsK1+fcZ6OVZvWpVz4ULVixeHPQhRTQ2MYHbBvXevHmrbt36gE2FplJC/pu3rmZmZowdM6VyZXs41+ivJoE9o5JA5aD+gIDhHTt0dnJygS3z5y8PCtrUsIE3HL9nj77VvGrcDrmuOVSrVu3tKztAq2jX1sfbu/mFC6c1SZDfp2MX+AV9g54ePbpPSgMutk/vAGNjYwtzixHDx5qamIK5KnUvcV7eNzMXONg7gtY7tO8M1UipARpY61btoQzejZsNHRI4oP9QaLrkg6lZs87OHQcHDxoJlwBHgKuAniEzq/AbilKp9MzZE4MGjujR3d/SwtKvS08ow2+7t33IKdq07ti2TUfQer16DaH8//33DDZCryIUiWbOmAdb4BbApYnFeWA7IAl+K9lVHjb0K6gfKFXXrr01hzp//pSALwBlu7i4ubm5z5wx/2XYC+iHiT7Qj/8NF2NlZQ1Gy6ejX/16jWrXrgfX8CE7Nm7UjLK+pOCuyPfLU1KToXaKyx8REWZmZubu7kGtwlnMzS20M1SvVuvdilp9+PD+W7evaUypvdaRPT2qaZYdHZzPXzilWa1Tu75m2dLCCnRAPgAvrxrUAlyRg4NTdHREqbs4u7iZmJhQy2Zm5vCbnZ1lZGT0Kvxlx45dNNnGjZ1CPgboSOPjY6H7evb8saavz0hPAxFrZwNRgjXxbtxcswXuHfhC0BIK5SyK5mKpkufkZMNCeESYp2d1aKvUdlNTU2cnV0r6cXExblWqanapXv3dbXry5AGsWlpaUatguaD2Hj66D+2HfDb60bdIJFr34zbo4qGz2/HLJijfiGFjfHz8St3RxMRUs2xsnH+nwTyXoO/snGztXQBoV9qrYI+pBZVKNWvOFLlcBja+PjQDM3Pw1LVzGhkZay0bgYOhWeXxP6VaoBLeLb9/wOLgcnX0n9ALQeFFok9//xX8e3CvwX5DRwfd6Z27t8C7LZqNEmWhagHS01JL1bfOkqelpjg6vjdPg5GxcZ44v0fKysqkOlUKY63Kh2I8f/EUXPlCZSD6QG/xE+hcxo+bCs7GvXu3wQb8sGKBq5s7uBCFsilVSu1ViUSsWaYEoWnHOjESGRVyYFJTk3XmhEHk8+dPVgdtatSwCbUF6rFihXczXlB3920xJNpy/zTAUoLFopalEgl4n0XzFLp8nUA7AfV8SPMohEL5xiE8cfJInTr1vwqcSK1qX6k2thUqwu+M6XMLiRIcaPJJmJiaghutvQUcMCfHfFlbWFhqJ2m7Wza2FaC0oBztHaHbJPpAP/43jJqpMT4YwhYtWi9auBI6KapjEgpF4oIWTFFo1BUW9kKz/OLFU7C+2hIsCtwJiLGkvW3cMDynHNaiQD8Av5qjRUaGwz/tDKEP7moXw72KB/k87oeGUAvgz0THRFYp6I4FAiGsaoYi0VGlOy3gXVSrVvPR41DNlm3bNxSN8MB4lOR/GeLN5efk5KSkvGnqYCy1q/Hffy/qPBEoj+pzwM2j/rm5uru6VNG4TB9LNa+a4OjL5W9e9c3KzoqKjqDqoVIle0iCfolKunHzX81eVd09k5IS69VtqCkGmAYwl0Qf6EffUKEwxoc4EYyFQcF79+2EO1q7Vj1S4FXDkBxqH5Z379mRkpKkvWNE5CsYfUN0CcwtjHVgUEUNz4ujWdOWcPth9A3GEs61e/f2ihV1twe4VdDGDhzcDbUMzQ92gZFW4usETYaQOzdu3c4fbsJQBtqJtr/7CYDFBV8fTgTX8svOzaBpGKtRl69Wq0+f+YsUBAf37d/1IUfr2b0vRH6g8FAwCGv+vv9XSiXQxaempsY1nQoAAAwbSURBVEAgEirZ2dkVnK6Tp47B8aG2V6xaqBmKeFT1gkewsC9shzEftZG6ducC3Vy6dO7ps8egYxgKw4AS4i3QK8JtgjjG2nUryKfSvbs/dDsQWoUrBWuyfMUC6G/9uvSCpLZtfcAwwV2A0kLBjh49qNmrb9/BoPsNm4KhF4XrgnjlqK8GgCtP9IF+9A0DyunT5sAQbeiw3sNG+EPAAYJrMBaGpEkTZ9pY23bv2RZCvFKphLrrFAqFHOJcEPvs2Knp9BljYVQHmUs+ka1thWlTZz94eM+/X6eVqxYNGjQSvHY+X0eTgLjH3DnLnj571LNXewgpQmfdo0dfMCEQDqcyDAoYsWPHRnD7Fi76tk+fgK5+vchnAGNKCFNMnzkOruWvE3/O+nYR6A+216heC9y2rVt/ghMtWTY7cOQEkj/uLeWbXr6+3caOmbx7z3aIJcPvmNFfQ3CDFDRvqCUIHUJwBgwBBIjAB4OIO0S127bxgdEzdeRRoyY0bdJi3vzpnTo3B6lBiLB6tZqzZk+GIKOjg1Nn3+4Qn9m2bT3khIAjRDmg1cENgvipg73TjBnzyKfi5OgMoTOIAUDkHuLFsGXd2u2UzwbGBUbJt29fh9LCjYMiaeoBIio7th8Aj3zs+CEgHuhXv5k5v6hn+2nonn/w9pk0mYTUa2tDyh7wqAIMlUWBrYLCw6OEUSPG+/sP/PAjQCwWnuzAgLhu3QZEH8CjpU2b11w4d5sgX4KUeOmtv5MCZuqYgrCcPZ8Hr3rCxOHQ/wYGToSnPGCAuRwu9H0EQXRR5vS97/ddv/++S2cSBGQ2/PTLih/WwXhrwcKZMqm0Ro3aGzfsAqeFGJjZc6c+fhSqMwmejH5ywKFsUuotIOWHMuefQIS7uHgWPFcvbjRpaGBUJ5PrfrBqYmxSckyz3FE2b0EJlCf/BGIC5gVP8soUNHQRZYeyeQs+Dfz7b4TJoL4RJoP6RpgM6hthMqhvhMmgvhEmg/pGmAzqG2EyqG+Eyeh+fik04qgIfv8SKR9wOcTaTvdrA7rtt7m1IDlKTBCkPJCaIOULdJtj3fq2cxZx0Hwj5YTcLLmjh+7XZ4u1344eRlf+TCQIUrZ5eT8rNU5S3dtCZyqnhHelntzIfBmaU6+NrXUlIY+PI1GkbJGeJI1/lZcULe4+2p5TjL/BKfldwIgnuaGXMxIjJDwB+it6QKlU8XhoKfSAVUWhQqaq5m3eqL11Cdk4pb7rSiEVqwjy2QwePHjlypVOTk4E+TzA4PL5pdvcD32/QWSMVkcPKFRiiL1iZdIGVjTCZFDfCJNBfSNMBvWNMBnUN8JkUN8Ik0F9I0wG9Y0wGdQ3wmRQ3wiTQX0jTAb1jTAZ1DfCZFDfCJNBfSNMBvWNMBnUN8JkUN8Ik0F9I0wG9Y0wGdQ3wmRQ3wiTKWff5y7veHp6cnBmRxpBfdNKeHi4QqEgCF2gvmmFz+ejvukE9U0rqG+aQX3TCuqbZlDftIL6phnUN62gvmkG9U0rqG+aQX3TCuqbZlDftIL6phnUN62gvmkG9U0rqG+aQX3TCuqbZlDftIL6phnUN62gvmkG9U0rqG+aQX3TikAgkMvlBKEL1DetoP2mmQ/9fjHyOfj5+cGvTCYTi8UqlYrD4cCyubn5P//8QxBDgu9f0kHVqlUTEhIyMjKkUin4JyBuMCstW7YkiIFBfdPB2LFjK1SooL3Fzs6uf//+BDEwqG86qF27dqNGjbS31KxZs06dOgQxMKhvmggMDASbTS1bWloGBAQQxPCgvmnC09OzefPmmmVvb2+CGB7UN32MHDnSwcEBjPfgwYMJQgsYHyxM9POce/9kpCVKJXlEpVST/P8Kw4F6K7KZy+GoilQm2A/V+1sgS9EZfnTuW+SkhU9JHYfLJXwhx8KG79XAvGEHG4Jogfp+x7m9ieGPchVyNU/AFRjzzG1MjCyEPL6QW+QhmFrN43CUhbeqOIRbpDLVXMJRkVJRcQn3vWwFrUBd8qHghCq5UpotzUmXSrKkCokSGkEFZ2HANBeCFID6zif0ctqNv9OgNiwqmznWqEDKLSnRGcnhGUqZ2rWGSfcxDoT1oL7J76ui0pPkNq6WlT0Y0rlLcmThIXECAXf09+6E3bBd31vnvOLwuJ4tGNihR4Um5iSLJ67xICyG1fr+dWmETEo8/8dYbzUrJSvmfiqbJc5efW+dHcYz5lX1ZvhQLDs9Lyrk9aQfWSpxlsa/D66NJhwu48UNmFubWNibbP42jLASNur75f2M5BiZVytXwg5c6lTicrl//hRL2Acb9X3xQKqFvSlhE56tnBMiJCrVB0TimQXr9B1yNhWe4DjXsiNsAuy30JS/PyiGsAzW6fvBlUwTayNSVvnzr1VB6wcSA+BQ0zYtkXWvfrJO35JclUt9dhlvCjNrEy6P/PPHa8Im2PV+8cWDr7k8Do/HI6xEYMqPfpFH2AS79J0QLuYJDdhlhdw7cSPkSMLrMPtKHvXrdGzVPID6GuDuA3PgUUPDep0PHF4ilea5Otfp6jvJ1bk2JMHq3kMLwsLvwC7NvfsQQ2JiZZQek0PYBLv8k+x0pcBIQAzDvQdnDhxZ6uRQbc70I118xl+5vv/YyR+pJC6XHxXz6G7oqSnjdv2w4DJfINx/eAmVdPDo9ympMWNHbBg+cGViUvjz/64Rg2FVyYyw7Gkeu/StVhGRqaG6rNt3j7m7NujT/VtzMxtP98a+HcZcu/VHdk4alQp2ekDvebY2jjwev2Fd3+SUKNiSmZX84PH5di2Hgi23MLft5jtJwDfg2NfU2hh+ZRIWTcDCMn2r1RyeQT4fDKHliOiHXp5NNVtA4mq1KiIylFq1q+gmEplQy0ZG5vCbJ85KS4+DhUp2VTR7OTvWIIZErSbibBZFwVk2fxWHm/8mgQFQKGRKpfz0+S3wT3t7du4b+83h6Dhvbl4m/IqEJpotQqExMSQwHOAZsciosUvffL5aLpURAyAUGoFMG9X3q1urvfZ2cEhK2MvUxBJ+ZXKJZotEmksMhjhPAh22mTmLbjq79G1sypOIDeV9Oth7iSXZHu5v5jlRKOSp6XFWlpVK2MXaKv8Vm8joh5RbAru8fHXb1NSaGIbs12KuQbyzsgu7/G9re6FSqiSGwc9n/ONnl2/dPZ7vi0eF7jk49+edE8FvKWEXK0s7N5d6Zy5uTUqOksule/+Yr+PdY/2RlyoRmbLrjrPrahu2t1AqDDW6quJaf9r432BAuWhl5593fS2W5IwcHCQQiErea6D/QhenWms3D5u7rJ2JsUWThj2Iwf4iX5wrs3MSEjbBuvcbtsx6ZVHJzKF6OX6J+JN5fC5ixCIXMwsWSZx1f3/i4mWclWjAMVyZJfxOvIk5l1XiJiyc395vlMOmmWEZiVlWlS10Zrj38Mzhv1bpTAL/AYLWOpOaNurZvfNkoifAfd+xZ4bOJJVKCaFGji43vX2rYe1bDyfFIM6QtutrS1gGG9+/PLM7IfxxXo22bjpT4bFibl5GMUlikUh3fFooNDEztSL6Iy09nnwkxkbmxsbmOpPCQ+KJUj5qMeumi2Dp+8Xb5r7imwirNGTFDDg5meKo24nsfIuepe8Xj/6+al6aNPM1Kxzx6DuJLXuxzjOhYO/8seNWVYl5kCTOlRJGAzGTms3M67U21DOjMg7b56/aMC2sgptlZS8GTruqlClfXI3uNNTeoy67XqbWBucfJFu+e8UTMm2Ktsj7CTnJEu/OVk192Rjp14D6zuf3oKi0RLmRpbCqtyMp58Q8Ts5OyhUIOTi5JkF9a4gJyzm3OykvW8UTcExtTGwcTc1sy023LhVLUyKzclPEMomSL+DUbWnZojurzbYG1Pd7ZKbKzu17nZYgV0hVauoDCRyOWudfZBV8TkHNyf//u5e+OPk7UavaSfA45u2HIAoyFOye/7LFmywFC7Coyp/VPn+Vmtue+mLDm2O+mfCeo1mEX17BzvkQHp9jYctv2N6qhrclQd6C+i6W2LCcpFiZOEutlBf6sgLhvFsGaXK1BK4m762+3ZovcI2633xoJF/fHI7Wxnx5czlqrS+RvPskybuTct62jIJTGZlyrO2EnvUtCKIL1DfCZPD7aQiTQX0jTAb1jTAZ1DfCZFDfCJNBfSNM5v8AAAD//xL5mIYAAAAGSURBVAMAd0TPFGGhyasAAAAASUVORK5CYII=" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 11 + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}