diff --git a/A4/CSC_373_EC3.ipynb b/A4/CSC_373_EC3.ipynb new file mode 100644 index 0000000..816afd5 --- /dev/null +++ b/A4/CSC_373_EC3.ipynb @@ -0,0 +1,8941 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "id": "0744d366-ab31-4ed2-8845-e1d26ca90912", + "metadata": { + "cellView": "form", + "id": "0744d366-ab31-4ed2-8845-e1d26ca90912" + }, + "outputs": [], + "source": [ + "# @title Run to load helper functions\n", + "from dataclasses import dataclass\n", + "import networkx as nx\n", + "import plotly.graph_objects as go\n", + "import plotly.io as pio\n", + "import numpy as np\n", + "from scipy.optimize import linprog\n", + "import graphviz\n", + "pio.templates.default = \"plotly_white\"\n", + "\n", + "def plot_graph(g):\n", + " plot = graphviz.Digraph(engine=\"circo\")\n", + " for v in g.nodes:\n", + " plot.node(v)\n", + " for u, v in g.edges():\n", + " label = str(g.edges[(u, v)]['capacity']) if \"capacity\" in g.edges[(u, v)] else \"\"\n", + " plot.edge(u, v, label=label)\n", + " display(plot)\n", + "\n", + "def plot_bipartite(g, left, weights=False, matching=None):\n", + " fig = go.Figure()\n", + " right = [i for i in g.nodes if i not in left]\n", + " fig.add_trace(\n", + " go.Scatter(\n", + " x=[0]*len(left),\n", + " y=list(range(len(left))),\n", + " text = list(map(str, left)),\n", + " textposition=\"middle left\",\n", + " mode='markers+text',\n", + " marker=dict(color=\"red\")\n", + " )\n", + " )\n", + " fig.add_trace(\n", + " go.Scatter(\n", + " x=[1]*len(right),\n", + " y=list(range(len(right))),\n", + " text = list(map(str, right)),\n", + " textposition=\"middle right\",\n", + " mode='markers+text',\n", + " marker=dict(color=\"blue\")\n", + " )\n", + " )\n", + " for u,v,d in g.edges(data=True):\n", + " width = (1/3 + d['weight'])*3/4 if weights else 1\n", + " text = \"Weight: \" + str(d['weight']) if weights else \"\"\n", + " color = \"black\"\n", + " if matching is not None and (u, v) in matching:\n", + " color=\"pink\"\n", + " fig.add_trace(\n", + " go.Scatter(\n", + " name=f\"{u}, {v}\",\n", + " x= np.linspace(0,1,101),\n", + " y=np.linspace(left.index(u), right.index(v), 101),\n", + " mode='lines',\n", + " marker=dict(color=color),\n", + " line=dict(width=width),\n", + " text= text\n", + " )\n", + " )\n", + " fig.update_layout(showlegend=False, width=700 , height=1000)\n", + " fig.update_xaxes(visible=False, range=(-0.1, 1.1))\n", + " fig.update_yaxes(visible=False)\n", + " return fig\n", + "\n", + "WORK_TIMES = [\n", + " \"Monday AM\"\n", + " , \"Tuesday AM\"\n", + " , \"Wednesday AM\"\n", + " , \"Thursday AM\"\n", + " , \"Friday_AM\"\n", + " , \"Saturday_AM\"\n", + " , \"Sunday_AM\"\n", + " , \"Monday_PM\"\n", + " , \"Tuesday_PM\"\n", + " , \"Wednesday_PM\"\n", + " , \"Thursday_PM\"\n", + " , \"Friday_PM\"\n", + " , \"Saturday_PM\"\n", + " , \"Sunday_PM\"\n", + "]\n", + "\n", + "\n", + "@dataclass\n", + "class Response:\n", + " student_id: str\n", + " availability: set\n", + "\n", + "def get_random_responses(n, seed):\n", + " seed_n = int.from_bytes(seed.encode('utf-8'), \"little\")\n", + " rng = np.random.default_rng(seed=seed_n)\n", + " cs_students = []\n", + " business_students = []\n", + " c = 0\n", + " p = [0.1, 0.3, 0.4, 0.2]\n", + " for _ in range(n//2):\n", + " num_days_available = rng.choice([1, 2, 3, 4], p=p)\n", + " times = set(rng.choice(WORK_TIMES, size=num_days_available, replace=False))\n", + " cs_students.append(Response(str(c), times))\n", + " c+=1\n", + " for _ in range(n//2):\n", + " num_days_available = rng.choice([1, 2, 3, 4], p=p)\n", + " times = set(rng.choice(WORK_TIMES, size=num_days_available, replace=False))\n", + " business_students.append(Response(str(c), times))\n", + " c+=1\n", + " return cs_students, business_students" + ] + }, + { + "cell_type": "markdown", + "id": "a07b9440-111c-41b9-8ef0-9fdacb4966b7", + "metadata": { + "id": "a07b9440-111c-41b9-8ef0-9fdacb4966b7" + }, + "source": [ + "# Basics: Graphs, Flow, and LP in Python" + ] + }, + { + "cell_type": "markdown", + "id": "47d48929-7e37-491c-a3ec-66ac07c6852b", + "metadata": { + "id": "47d48929-7e37-491c-a3ec-66ac07c6852b" + }, + "source": [ + "Before we get started with the exercises, let's get acquainted with graphs and LPs in Python, as well as some of the helper functions I've provided for you.\n", + "\n", + "## Directed graphs + Flow\n", + "\n", + "Here's how to define a directed graph using the networkx library (imported as nx), this is an example from the flow lecture.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "674a699c-22b5-42cf-859a-8ac38f68389e", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 293 + }, + "id": "674a699c-22b5-42cf-859a-8ac38f68389e", + "outputId": "ef511bdc-4144-42fd-c8d8-af5c576d8645" + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s\n", + "\n", + "s\n", + "\n", + "\n", + "\n", + "u\n", + "\n", + "u\n", + "\n", + "\n", + "\n", + "s->u\n", + "\n", + "\n", + "20\n", + "\n", + "\n", + "\n", + "v\n", + "\n", + "v\n", + "\n", + "\n", + "\n", + "s->v\n", + "\n", + "\n", + "10\n", + "\n", + "\n", + "\n", + "u->v\n", + "\n", + "\n", + "30\n", + "\n", + "\n", + "\n", + "t\n", + "\n", + "t\n", + "\n", + "\n", + "\n", + "u->t\n", + "\n", + "\n", + "10\n", + "\n", + "\n", + "\n", + "v->t\n", + "\n", + "\n", + "20\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "g = nx.DiGraph()\n", + "g.add_node(\"s\")\n", + "g.add_node(\"u\")\n", + "g.add_node(\"v\")\n", + "g.add_node(\"t\")\n", + "g.add_edge(\"s\", \"u\", capacity=20)\n", + "g.add_edge(\"s\", \"v\", capacity=10)\n", + "g.add_edge(\"u\", \"v\", capacity=30)\n", + "g.add_edge(\"u\", \"t\", capacity=10)\n", + "g.add_edge(\"v\", \"t\", capacity=20)\n", + "plot_graph(g)" + ] + }, + { + "cell_type": "markdown", + "id": "52e31fec-eae4-4c55-9694-cf8082e897f7", + "metadata": { + "id": "52e31fec-eae4-4c55-9694-cf8082e897f7" + }, + "source": [ + "You can solve the network flow problem on the graph by calling `nx.maximum_flow`, you'll receive the flow value as well as some data structure from which you can extract the flow values along each edge!" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "66347cb5-2752-4369-aa47-96f29c483688", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "66347cb5-2752-4369-aa47-96f29c483688", + "outputId": "2b49d0a5-0f0b-47a0-dcfc-b68c2b946c7c" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "30\n", + "{'s': {'u': 20, 'v': 10}, 'u': {'v': 10, 't': 10}, 'v': {'t': 20}, 't': {}}\n" + ] + } + ], + "source": [ + "flow_value, flow_dict = nx.maximum_flow(g, \"s\", \"t\")\n", + "print(flow_value)\n", + "print(flow_dict)" + ] + }, + { + "cell_type": "markdown", + "id": "6eb94084-61f8-4c96-8ea7-fed90dde702e", + "metadata": { + "id": "6eb94084-61f8-4c96-8ea7-fed90dde702e" + }, + "source": [ + "## Plotting bipartite graphs\n", + "\n", + "When your graph is bipartite, the `plot_graph` function doesn't always plot it in a way that \"looks bipartite\"." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "12758b83-6e78-4335-9fb3-e7b0f08485f2", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 902 + }, + "id": "12758b83-6e78-4335-9fb3-e7b0f08485f2", + "outputId": "bfed8ffd-fd79-4436-87b0-a5620a47ba2b" + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Earth\n", + "\n", + "Earth\n", + "\n", + "\n", + "\n", + "Water\n", + "\n", + "Water\n", + "\n", + "\n", + "\n", + "Air\n", + "\n", + "Air\n", + "\n", + "\n", + "\n", + "Fire\n", + "\n", + "Fire\n", + "\n", + "\n", + "\n", + "Aang\n", + "\n", + "Aang\n", + "\n", + "\n", + "\n", + "Aang->Earth\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Aang->Water\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Aang->Air\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Aang->Fire\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Katara\n", + "\n", + "Katara\n", + "\n", + "\n", + "\n", + "Katara->Water\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Toph\n", + "\n", + "Toph\n", + "\n", + "\n", + "\n", + "Toph->Earth\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Zuko\n", + "\n", + "Zuko\n", + "\n", + "\n", + "\n", + "Zuko->Fire\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Azula\n", + "\n", + "Azula\n", + "\n", + "\n", + "\n", + "Azula->Fire\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "g = nx.DiGraph()\n", + "g.add_node(\"Earth\")\n", + "g.add_node(\"Water\")\n", + "g.add_node(\"Air\")\n", + "g.add_node(\"Fire\")\n", + "g.add_node(\"Aang\")\n", + "g.add_node(\"Katara\")\n", + "g.add_node(\"Toph\")\n", + "g.add_node(\"Zuko\")\n", + "g.add_node(\"Azula\")\n", + "g.add_edge(\"Aang\", \"Earth\", weight=1)\n", + "g.add_edge(\"Aang\", \"Air\", weight=2)\n", + "g.add_edge(\"Aang\", \"Water\", weight=1)\n", + "g.add_edge(\"Aang\", \"Fire\", weight=1)\n", + "g.add_edge(\"Katara\", \"Water\", weight=2)\n", + "g.add_edge(\"Toph\", \"Earth\", weight=3)\n", + "g.add_edge(\"Zuko\", \"Fire\", weight=1)\n", + "g.add_edge(\"Azula\", \"Fire\", weight=2)\n", + "plot_graph(g)" + ] + }, + { + "cell_type": "markdown", + "id": "8dff805a-cfe2-4376-8549-ef96a84f1e11", + "metadata": { + "id": "8dff805a-cfe2-4376-8549-ef96a84f1e11" + }, + "source": [ + "Instead, you can use the `plot_bipartite(g, left, weights=False, matching=None)` function. Here, `g` is a graph, and `left` is a list of vertices to be plotted on the left.\n", + "\n", + "Here are several examples showcasing the different parameters." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "18438025-ce74-4abe-9ae7-c0b7cfefad8b", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "18438025-ce74-4abe-9ae7-c0b7cfefad8b", + "outputId": "21ab529a-163e-42ed-b400-25f3accad5a0" + }, + "outputs": [ + { + "data": { + "text/html": [ + " \n", + " " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "marker": { + "color": "red" + }, + "mode": "markers+text", + "text": [ + "Aang", + "Katara", + "Toph", + "Zuko", + "Azula" + ], + "textposition": "middle left", + "type": "scatter", + "x": [ + 0, + 0, + 0, + 0, + 0 + ], + "y": [ + 0, + 1, + 2, + 3, + 4 + ] + }, + { + "marker": { + "color": "blue" + }, + "mode": "markers+text", + "text": [ + "Earth", + "Water", + "Air", + "Fire" + ], + "textposition": "middle right", + "type": "scatter", + "x": [ + 1, + 1, + 1, + 1 + ], + "y": [ + 0, + 1, + 2, + 3 + ] + }, + { + "line": { + "width": 1 + }, + "marker": { + "color": "black" + }, + "mode": "lines", + "name": "Aang, Earth", + "text": "", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "line": { + "width": 1 + }, + "marker": { + "color": "black" + }, + "mode": "lines", + "name": "Aang, Air", + "text": "", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 0, + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7000000000000001, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.8200000000000001, + 0.84, + 0.86, + 0.88, + 0.9, + 0.92, + 0.9400000000000001, + 0.96, + 0.98, + 1, + 1.02, + 1.04, + 1.06, + 1.08, + 1.1, + 1.12, + 1.1400000000000001, + 1.16, + 1.18, + 1.2, + 1.22, + 1.24, + 1.26, + 1.28, + 1.3, + 1.32, + 1.34, + 1.36, + 1.3800000000000001, + 1.4000000000000001, + 1.42, + 1.44, + 1.46, + 1.48, + 1.5, + 1.52, + 1.54, + 1.56, + 1.58, + 1.6, + 1.62, + 1.6400000000000001, + 1.6600000000000001, + 1.68, + 1.7, + 1.72, + 1.74, + 1.76, + 1.78, + 1.8, + 1.82, + 1.84, + 1.86, + 1.8800000000000001, + 1.9000000000000001, + 1.92, + 1.94, + 1.96, + 1.98, + 2 + ] + }, + { + "line": { + "width": 1 + }, + "marker": { + "color": "black" + }, + "mode": "lines", + "name": "Aang, Water", + "text": "", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ] + }, + { + "line": { + "width": 1 + }, + "marker": { + "color": "black" + }, + "mode": "lines", + "name": "Aang, Fire", + "text": "", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 0, + 0.03, + 0.06, + 0.09, + 0.12, + 0.15, + 0.18, + 0.21, + 0.24, + 0.27, + 0.3, + 0.32999999999999996, + 0.36, + 0.39, + 0.42, + 0.44999999999999996, + 0.48, + 0.51, + 0.54, + 0.57, + 0.6, + 0.63, + 0.6599999999999999, + 0.69, + 0.72, + 0.75, + 0.78, + 0.8099999999999999, + 0.84, + 0.87, + 0.8999999999999999, + 0.9299999999999999, + 0.96, + 0.99, + 1.02, + 1.05, + 1.08, + 1.1099999999999999, + 1.14, + 1.17, + 1.2, + 1.23, + 1.26, + 1.29, + 1.3199999999999998, + 1.3499999999999999, + 1.38, + 1.41, + 1.44, + 1.47, + 1.5, + 1.53, + 1.56, + 1.5899999999999999, + 1.6199999999999999, + 1.65, + 1.68, + 1.71, + 1.74, + 1.77, + 1.7999999999999998, + 1.8299999999999998, + 1.8599999999999999, + 1.89, + 1.92, + 1.95, + 1.98, + 2.01, + 2.04, + 2.07, + 2.1, + 2.13, + 2.16, + 2.19, + 2.2199999999999998, + 2.25, + 2.28, + 2.31, + 2.34, + 2.37, + 2.4, + 2.4299999999999997, + 2.46, + 2.4899999999999998, + 2.52, + 2.55, + 2.58, + 2.61, + 2.6399999999999997, + 2.67, + 2.6999999999999997, + 2.73, + 2.76, + 2.79, + 2.82, + 2.85, + 2.88, + 2.9099999999999997, + 2.94, + 2.9699999999999998, + 3 + ] + }, + { + "line": { + "width": 1 + }, + "marker": { + "color": "black" + }, + "mode": "lines", + "name": "Katara, Water", + "text": "", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + { + "line": { + "width": 1 + }, + "marker": { + "color": "black" + }, + "mode": "lines", + "name": "Toph, Earth", + "text": "", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 2, + 1.98, + 1.96, + 1.94, + 1.92, + 1.9, + 1.88, + 1.8599999999999999, + 1.84, + 1.82, + 1.8, + 1.78, + 1.76, + 1.74, + 1.72, + 1.7, + 1.68, + 1.66, + 1.6400000000000001, + 1.62, + 1.6, + 1.58, + 1.56, + 1.54, + 1.52, + 1.5, + 1.48, + 1.46, + 1.44, + 1.42, + 1.4, + 1.38, + 1.3599999999999999, + 1.3399999999999999, + 1.3199999999999998, + 1.2999999999999998, + 1.28, + 1.26, + 1.24, + 1.22, + 1.2, + 1.18, + 1.1600000000000001, + 1.1400000000000001, + 1.12, + 1.1, + 1.08, + 1.06, + 1.04, + 1.02, + 1, + 0.98, + 0.96, + 0.94, + 0.9199999999999999, + 0.8999999999999999, + 0.8799999999999999, + 0.8599999999999999, + 0.8400000000000001, + 0.8200000000000001, + 0.8, + 0.78, + 0.76, + 0.74, + 0.72, + 0.7, + 0.6799999999999999, + 0.6599999999999999, + 0.6399999999999999, + 0.6199999999999999, + 0.5999999999999999, + 0.5800000000000001, + 0.56, + 0.54, + 0.52, + 0.5, + 0.48, + 0.45999999999999996, + 0.43999999999999995, + 0.41999999999999993, + 0.3999999999999999, + 0.3799999999999999, + 0.3599999999999999, + 0.33999999999999986, + 0.32000000000000006, + 0.30000000000000004, + 0.28, + 0.26, + 0.24, + 0.21999999999999997, + 0.19999999999999996, + 0.17999999999999994, + 0.15999999999999992, + 0.1399999999999999, + 0.11999999999999988, + 0.09999999999999987, + 0.08000000000000007, + 0.06000000000000005, + 0.040000000000000036, + 0.020000000000000018, + 0 + ] + }, + { + "line": { + "width": 1 + }, + "marker": { + "color": "black" + }, + "mode": "lines", + "name": "Zuko, Fire", + "text": "", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ] + }, + { + "line": { + "width": 1 + }, + "marker": { + "color": "black" + }, + "mode": "lines", + "name": "Azula, Fire", + "text": "", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 4, + 3.99, + 3.98, + 3.97, + 3.96, + 3.95, + 3.94, + 3.93, + 3.92, + 3.91, + 3.9, + 3.89, + 3.88, + 3.87, + 3.86, + 3.85, + 3.84, + 3.83, + 3.82, + 3.81, + 3.8, + 3.79, + 3.78, + 3.77, + 3.76, + 3.75, + 3.74, + 3.73, + 3.7199999999999998, + 3.71, + 3.7, + 3.69, + 3.68, + 3.67, + 3.66, + 3.65, + 3.64, + 3.63, + 3.62, + 3.61, + 3.6, + 3.59, + 3.58, + 3.57, + 3.56, + 3.55, + 3.54, + 3.53, + 3.52, + 3.51, + 3.5, + 3.49, + 3.48, + 3.4699999999999998, + 3.46, + 3.45, + 3.44, + 3.4299999999999997, + 3.42, + 3.41, + 3.4, + 3.39, + 3.38, + 3.37, + 3.36, + 3.35, + 3.34, + 3.33, + 3.32, + 3.31, + 3.3, + 3.29, + 3.2800000000000002, + 3.27, + 3.26, + 3.25, + 3.24, + 3.23, + 3.2199999999999998, + 3.21, + 3.2, + 3.19, + 3.1799999999999997, + 3.17, + 3.16, + 3.15, + 3.14, + 3.13, + 3.12, + 3.11, + 3.1, + 3.09, + 3.08, + 3.07, + 3.06, + 3.05, + 3.04, + 3.0300000000000002, + 3.02, + 3.01, + 3 + ] + } + ], + "layout": { + "height": 1000, + "showlegend": false, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "white", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "white", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "#C8D4E3", + "linecolor": "#C8D4E3", + "minorgridcolor": "#C8D4E3", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "#C8D4E3", + "linecolor": "#C8D4E3", + "minorgridcolor": "#C8D4E3", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "heatmapgl": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmapgl" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "white", + "showlakes": true, + "showland": true, + "subunitcolor": "#C8D4E3" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "white", + "polar": { + "angularaxis": { + "gridcolor": "#EBF0F8", + "linecolor": "#EBF0F8", + "ticks": "" + }, + "bgcolor": "white", + "radialaxis": { + "gridcolor": "#EBF0F8", + "linecolor": "#EBF0F8", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "white", + "gridcolor": "#DFE8F3", + "gridwidth": 2, + "linecolor": "#EBF0F8", + "showbackground": true, + "ticks": "", + "zerolinecolor": "#EBF0F8" + }, + "yaxis": { + "backgroundcolor": "white", + "gridcolor": "#DFE8F3", + "gridwidth": 2, + "linecolor": "#EBF0F8", + "showbackground": true, + "ticks": "", + "zerolinecolor": "#EBF0F8" + }, + "zaxis": { + "backgroundcolor": "white", + "gridcolor": "#DFE8F3", + "gridwidth": 2, + "linecolor": "#EBF0F8", + "showbackground": true, + "ticks": "", + "zerolinecolor": "#EBF0F8" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "#DFE8F3", + "linecolor": "#A2B1C6", + "ticks": "" + }, + "baxis": { + "gridcolor": "#DFE8F3", + "linecolor": "#A2B1C6", + "ticks": "" + }, + "bgcolor": "white", + "caxis": { + "gridcolor": "#DFE8F3", + "linecolor": "#A2B1C6", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "#EBF0F8", + "linecolor": "#EBF0F8", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "#EBF0F8", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "#EBF0F8", + "linecolor": "#EBF0F8", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "#EBF0F8", + "zerolinewidth": 2 + } + } + }, + "width": 700, + "xaxis": { + "range": [ + -0.1, + 1.1 + ], + "visible": false + }, + "yaxis": { + "visible": false + } + } + }, + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_bipartite(g, [\"Aang\", \"Katara\", \"Toph\", \"Zuko\", \"Azula\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "d3fa3278-067d-44aa-9d9e-6dd80eee318c", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "d3fa3278-067d-44aa-9d9e-6dd80eee318c", + "outputId": "95509d86-e5d9-47f8-a0b7-28bcfa2dd100" + }, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "marker": { + "color": "red" + }, + "mode": "markers+text", + "text": [ + "Aang", + "Katara", + "Toph", + "Zuko", + "Azula" + ], + "textposition": "middle left", + "type": "scatter", + "x": [ + 0, + 0, + 0, + 0, + 0 + ], + "y": [ + 0, + 1, + 2, + 3, + 4 + ] + }, + { + "marker": { + "color": "blue" + }, + "mode": "markers+text", + "text": [ + "Earth", + "Water", + "Air", + "Fire" + ], + "textposition": "middle right", + "type": "scatter", + "x": [ + 1, + 1, + 1, + 1 + ], + "y": [ + 0, + 1, + 2, + 3 + ] + }, + { + "line": { + "width": 1 + }, + "marker": { + "color": "black" + }, + "mode": "lines", + "name": "Aang, Earth", + "text": "Weight: 1", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "line": { + "width": 1.75 + }, + "marker": { + "color": "black" + }, + "mode": "lines", + "name": "Aang, Air", + "text": "Weight: 2", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 0, + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7000000000000001, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.8200000000000001, + 0.84, + 0.86, + 0.88, + 0.9, + 0.92, + 0.9400000000000001, + 0.96, + 0.98, + 1, + 1.02, + 1.04, + 1.06, + 1.08, + 1.1, + 1.12, + 1.1400000000000001, + 1.16, + 1.18, + 1.2, + 1.22, + 1.24, + 1.26, + 1.28, + 1.3, + 1.32, + 1.34, + 1.36, + 1.3800000000000001, + 1.4000000000000001, + 1.42, + 1.44, + 1.46, + 1.48, + 1.5, + 1.52, + 1.54, + 1.56, + 1.58, + 1.6, + 1.62, + 1.6400000000000001, + 1.6600000000000001, + 1.68, + 1.7, + 1.72, + 1.74, + 1.76, + 1.78, + 1.8, + 1.82, + 1.84, + 1.86, + 1.8800000000000001, + 1.9000000000000001, + 1.92, + 1.94, + 1.96, + 1.98, + 2 + ] + }, + { + "line": { + "width": 1 + }, + "marker": { + "color": "black" + }, + "mode": "lines", + "name": "Aang, Water", + "text": "Weight: 1", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ] + }, + { + "line": { + "width": 1 + }, + "marker": { + "color": "black" + }, + "mode": "lines", + "name": "Aang, Fire", + "text": "Weight: 1", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 0, + 0.03, + 0.06, + 0.09, + 0.12, + 0.15, + 0.18, + 0.21, + 0.24, + 0.27, + 0.3, + 0.32999999999999996, + 0.36, + 0.39, + 0.42, + 0.44999999999999996, + 0.48, + 0.51, + 0.54, + 0.57, + 0.6, + 0.63, + 0.6599999999999999, + 0.69, + 0.72, + 0.75, + 0.78, + 0.8099999999999999, + 0.84, + 0.87, + 0.8999999999999999, + 0.9299999999999999, + 0.96, + 0.99, + 1.02, + 1.05, + 1.08, + 1.1099999999999999, + 1.14, + 1.17, + 1.2, + 1.23, + 1.26, + 1.29, + 1.3199999999999998, + 1.3499999999999999, + 1.38, + 1.41, + 1.44, + 1.47, + 1.5, + 1.53, + 1.56, + 1.5899999999999999, + 1.6199999999999999, + 1.65, + 1.68, + 1.71, + 1.74, + 1.77, + 1.7999999999999998, + 1.8299999999999998, + 1.8599999999999999, + 1.89, + 1.92, + 1.95, + 1.98, + 2.01, + 2.04, + 2.07, + 2.1, + 2.13, + 2.16, + 2.19, + 2.2199999999999998, + 2.25, + 2.28, + 2.31, + 2.34, + 2.37, + 2.4, + 2.4299999999999997, + 2.46, + 2.4899999999999998, + 2.52, + 2.55, + 2.58, + 2.61, + 2.6399999999999997, + 2.67, + 2.6999999999999997, + 2.73, + 2.76, + 2.79, + 2.82, + 2.85, + 2.88, + 2.9099999999999997, + 2.94, + 2.9699999999999998, + 3 + ] + }, + { + "line": { + "width": 1.75 + }, + "marker": { + "color": "black" + }, + "mode": "lines", + "name": "Katara, Water", + "text": "Weight: 2", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + { + "line": { + "width": 2.5 + }, + "marker": { + "color": "black" + }, + "mode": "lines", + "name": "Toph, Earth", + "text": "Weight: 3", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 2, + 1.98, + 1.96, + 1.94, + 1.92, + 1.9, + 1.88, + 1.8599999999999999, + 1.84, + 1.82, + 1.8, + 1.78, + 1.76, + 1.74, + 1.72, + 1.7, + 1.68, + 1.66, + 1.6400000000000001, + 1.62, + 1.6, + 1.58, + 1.56, + 1.54, + 1.52, + 1.5, + 1.48, + 1.46, + 1.44, + 1.42, + 1.4, + 1.38, + 1.3599999999999999, + 1.3399999999999999, + 1.3199999999999998, + 1.2999999999999998, + 1.28, + 1.26, + 1.24, + 1.22, + 1.2, + 1.18, + 1.1600000000000001, + 1.1400000000000001, + 1.12, + 1.1, + 1.08, + 1.06, + 1.04, + 1.02, + 1, + 0.98, + 0.96, + 0.94, + 0.9199999999999999, + 0.8999999999999999, + 0.8799999999999999, + 0.8599999999999999, + 0.8400000000000001, + 0.8200000000000001, + 0.8, + 0.78, + 0.76, + 0.74, + 0.72, + 0.7, + 0.6799999999999999, + 0.6599999999999999, + 0.6399999999999999, + 0.6199999999999999, + 0.5999999999999999, + 0.5800000000000001, + 0.56, + 0.54, + 0.52, + 0.5, + 0.48, + 0.45999999999999996, + 0.43999999999999995, + 0.41999999999999993, + 0.3999999999999999, + 0.3799999999999999, + 0.3599999999999999, + 0.33999999999999986, + 0.32000000000000006, + 0.30000000000000004, + 0.28, + 0.26, + 0.24, + 0.21999999999999997, + 0.19999999999999996, + 0.17999999999999994, + 0.15999999999999992, + 0.1399999999999999, + 0.11999999999999988, + 0.09999999999999987, + 0.08000000000000007, + 0.06000000000000005, + 0.040000000000000036, + 0.020000000000000018, + 0 + ] + }, + { + "line": { + "width": 1 + }, + "marker": { + "color": "black" + }, + "mode": "lines", + "name": "Zuko, Fire", + "text": "Weight: 1", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ] + }, + { + "line": { + "width": 1.75 + }, + "marker": { + "color": "black" + }, + "mode": "lines", + "name": "Azula, Fire", + "text": "Weight: 2", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 4, + 3.99, + 3.98, + 3.97, + 3.96, + 3.95, + 3.94, + 3.93, + 3.92, + 3.91, + 3.9, + 3.89, + 3.88, + 3.87, + 3.86, + 3.85, + 3.84, + 3.83, + 3.82, + 3.81, + 3.8, + 3.79, + 3.78, + 3.77, + 3.76, + 3.75, + 3.74, + 3.73, + 3.7199999999999998, + 3.71, + 3.7, + 3.69, + 3.68, + 3.67, + 3.66, + 3.65, + 3.64, + 3.63, + 3.62, + 3.61, + 3.6, + 3.59, + 3.58, + 3.57, + 3.56, + 3.55, + 3.54, + 3.53, + 3.52, + 3.51, + 3.5, + 3.49, + 3.48, + 3.4699999999999998, + 3.46, + 3.45, + 3.44, + 3.4299999999999997, + 3.42, + 3.41, + 3.4, + 3.39, + 3.38, + 3.37, + 3.36, + 3.35, + 3.34, + 3.33, + 3.32, + 3.31, + 3.3, + 3.29, + 3.2800000000000002, + 3.27, + 3.26, + 3.25, + 3.24, + 3.23, + 3.2199999999999998, + 3.21, + 3.2, + 3.19, + 3.1799999999999997, + 3.17, + 3.16, + 3.15, + 3.14, + 3.13, + 3.12, + 3.11, + 3.1, + 3.09, + 3.08, + 3.07, + 3.06, + 3.05, + 3.04, + 3.0300000000000002, + 3.02, + 3.01, + 3 + ] + } + ], + "layout": { + "height": 1000, + "showlegend": false, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "white", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "white", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "#C8D4E3", + "linecolor": "#C8D4E3", + "minorgridcolor": "#C8D4E3", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "#C8D4E3", + "linecolor": "#C8D4E3", + "minorgridcolor": "#C8D4E3", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "heatmapgl": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmapgl" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "white", + "showlakes": true, + "showland": true, + "subunitcolor": "#C8D4E3" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "white", + "polar": { + "angularaxis": { + "gridcolor": "#EBF0F8", + "linecolor": "#EBF0F8", + "ticks": "" + }, + "bgcolor": "white", + "radialaxis": { + "gridcolor": "#EBF0F8", + "linecolor": "#EBF0F8", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "white", + "gridcolor": "#DFE8F3", + "gridwidth": 2, + "linecolor": "#EBF0F8", + "showbackground": true, + "ticks": "", + "zerolinecolor": "#EBF0F8" + }, + "yaxis": { + "backgroundcolor": "white", + "gridcolor": "#DFE8F3", + "gridwidth": 2, + "linecolor": "#EBF0F8", + "showbackground": true, + "ticks": "", + "zerolinecolor": "#EBF0F8" + }, + "zaxis": { + "backgroundcolor": "white", + "gridcolor": "#DFE8F3", + "gridwidth": 2, + "linecolor": "#EBF0F8", + "showbackground": true, + "ticks": "", + "zerolinecolor": "#EBF0F8" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "#DFE8F3", + "linecolor": "#A2B1C6", + "ticks": "" + }, + "baxis": { + "gridcolor": "#DFE8F3", + "linecolor": "#A2B1C6", + "ticks": "" + }, + "bgcolor": "white", + "caxis": { + "gridcolor": "#DFE8F3", + "linecolor": "#A2B1C6", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "#EBF0F8", + "linecolor": "#EBF0F8", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "#EBF0F8", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "#EBF0F8", + "linecolor": "#EBF0F8", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "#EBF0F8", + "zerolinewidth": 2 + } + } + }, + "width": 700, + "xaxis": { + "range": [ + -0.1, + 1.1 + ], + "visible": false + }, + "yaxis": { + "visible": false + } + } + }, + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_bipartite(g, [\"Aang\", \"Katara\", \"Toph\", \"Zuko\", \"Azula\"], weights=True)" + ] + }, + { + "cell_type": "markdown", + "id": "863b410c-928b-49f3-ae71-3c83f408af80", + "metadata": { + "id": "863b410c-928b-49f3-ae71-3c83f408af80" + }, + "source": [ + "A matching is represented as a list of edges" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "574b5079-95d5-4936-8a3a-05cab65c7957", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "574b5079-95d5-4936-8a3a-05cab65c7957", + "outputId": "514fa234-2d64-4bbd-ffd7-eb1bfa48995e", + "scrolled": true + }, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "marker": { + "color": "red" + }, + "mode": "markers+text", + "text": [ + "Aang", + "Katara", + "Toph", + "Zuko", + "Azula" + ], + "textposition": "middle left", + "type": "scatter", + "x": [ + 0, + 0, + 0, + 0, + 0 + ], + "y": [ + 0, + 1, + 2, + 3, + 4 + ] + }, + { + "marker": { + "color": "blue" + }, + "mode": "markers+text", + "text": [ + "Earth", + "Water", + "Air", + "Fire" + ], + "textposition": "middle right", + "type": "scatter", + "x": [ + 1, + 1, + 1, + 1 + ], + "y": [ + 0, + 1, + 2, + 3 + ] + }, + { + "line": { + "width": 1 + }, + "marker": { + "color": "black" + }, + "mode": "lines", + "name": "Aang, Earth", + "text": "Weight: 1", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "line": { + "width": 1.75 + }, + "marker": { + "color": "pink" + }, + "mode": "lines", + "name": "Aang, Air", + "text": "Weight: 2", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 0, + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7000000000000001, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.8200000000000001, + 0.84, + 0.86, + 0.88, + 0.9, + 0.92, + 0.9400000000000001, + 0.96, + 0.98, + 1, + 1.02, + 1.04, + 1.06, + 1.08, + 1.1, + 1.12, + 1.1400000000000001, + 1.16, + 1.18, + 1.2, + 1.22, + 1.24, + 1.26, + 1.28, + 1.3, + 1.32, + 1.34, + 1.36, + 1.3800000000000001, + 1.4000000000000001, + 1.42, + 1.44, + 1.46, + 1.48, + 1.5, + 1.52, + 1.54, + 1.56, + 1.58, + 1.6, + 1.62, + 1.6400000000000001, + 1.6600000000000001, + 1.68, + 1.7, + 1.72, + 1.74, + 1.76, + 1.78, + 1.8, + 1.82, + 1.84, + 1.86, + 1.8800000000000001, + 1.9000000000000001, + 1.92, + 1.94, + 1.96, + 1.98, + 2 + ] + }, + { + "line": { + "width": 1 + }, + "marker": { + "color": "black" + }, + "mode": "lines", + "name": "Aang, Water", + "text": "Weight: 1", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ] + }, + { + "line": { + "width": 1 + }, + "marker": { + "color": "black" + }, + "mode": "lines", + "name": "Aang, Fire", + "text": "Weight: 1", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 0, + 0.03, + 0.06, + 0.09, + 0.12, + 0.15, + 0.18, + 0.21, + 0.24, + 0.27, + 0.3, + 0.32999999999999996, + 0.36, + 0.39, + 0.42, + 0.44999999999999996, + 0.48, + 0.51, + 0.54, + 0.57, + 0.6, + 0.63, + 0.6599999999999999, + 0.69, + 0.72, + 0.75, + 0.78, + 0.8099999999999999, + 0.84, + 0.87, + 0.8999999999999999, + 0.9299999999999999, + 0.96, + 0.99, + 1.02, + 1.05, + 1.08, + 1.1099999999999999, + 1.14, + 1.17, + 1.2, + 1.23, + 1.26, + 1.29, + 1.3199999999999998, + 1.3499999999999999, + 1.38, + 1.41, + 1.44, + 1.47, + 1.5, + 1.53, + 1.56, + 1.5899999999999999, + 1.6199999999999999, + 1.65, + 1.68, + 1.71, + 1.74, + 1.77, + 1.7999999999999998, + 1.8299999999999998, + 1.8599999999999999, + 1.89, + 1.92, + 1.95, + 1.98, + 2.01, + 2.04, + 2.07, + 2.1, + 2.13, + 2.16, + 2.19, + 2.2199999999999998, + 2.25, + 2.28, + 2.31, + 2.34, + 2.37, + 2.4, + 2.4299999999999997, + 2.46, + 2.4899999999999998, + 2.52, + 2.55, + 2.58, + 2.61, + 2.6399999999999997, + 2.67, + 2.6999999999999997, + 2.73, + 2.76, + 2.79, + 2.82, + 2.85, + 2.88, + 2.9099999999999997, + 2.94, + 2.9699999999999998, + 3 + ] + }, + { + "line": { + "width": 1.75 + }, + "marker": { + "color": "pink" + }, + "mode": "lines", + "name": "Katara, Water", + "text": "Weight: 2", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + { + "line": { + "width": 2.5 + }, + "marker": { + "color": "pink" + }, + "mode": "lines", + "name": "Toph, Earth", + "text": "Weight: 3", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 2, + 1.98, + 1.96, + 1.94, + 1.92, + 1.9, + 1.88, + 1.8599999999999999, + 1.84, + 1.82, + 1.8, + 1.78, + 1.76, + 1.74, + 1.72, + 1.7, + 1.68, + 1.66, + 1.6400000000000001, + 1.62, + 1.6, + 1.58, + 1.56, + 1.54, + 1.52, + 1.5, + 1.48, + 1.46, + 1.44, + 1.42, + 1.4, + 1.38, + 1.3599999999999999, + 1.3399999999999999, + 1.3199999999999998, + 1.2999999999999998, + 1.28, + 1.26, + 1.24, + 1.22, + 1.2, + 1.18, + 1.1600000000000001, + 1.1400000000000001, + 1.12, + 1.1, + 1.08, + 1.06, + 1.04, + 1.02, + 1, + 0.98, + 0.96, + 0.94, + 0.9199999999999999, + 0.8999999999999999, + 0.8799999999999999, + 0.8599999999999999, + 0.8400000000000001, + 0.8200000000000001, + 0.8, + 0.78, + 0.76, + 0.74, + 0.72, + 0.7, + 0.6799999999999999, + 0.6599999999999999, + 0.6399999999999999, + 0.6199999999999999, + 0.5999999999999999, + 0.5800000000000001, + 0.56, + 0.54, + 0.52, + 0.5, + 0.48, + 0.45999999999999996, + 0.43999999999999995, + 0.41999999999999993, + 0.3999999999999999, + 0.3799999999999999, + 0.3599999999999999, + 0.33999999999999986, + 0.32000000000000006, + 0.30000000000000004, + 0.28, + 0.26, + 0.24, + 0.21999999999999997, + 0.19999999999999996, + 0.17999999999999994, + 0.15999999999999992, + 0.1399999999999999, + 0.11999999999999988, + 0.09999999999999987, + 0.08000000000000007, + 0.06000000000000005, + 0.040000000000000036, + 0.020000000000000018, + 0 + ] + }, + { + "line": { + "width": 1 + }, + "marker": { + "color": "pink" + }, + "mode": "lines", + "name": "Zuko, Fire", + "text": "Weight: 1", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ] + }, + { + "line": { + "width": 1.75 + }, + "marker": { + "color": "black" + }, + "mode": "lines", + "name": "Azula, Fire", + "text": "Weight: 2", + "type": "scatter", + "x": [ + 0, + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + 0.06, + 0.07, + 0.08, + 0.09, + 0.1, + 0.11, + 0.12, + 0.13, + 0.14, + 0.15, + 0.16, + 0.17, + 0.18, + 0.19, + 0.2, + 0.21, + 0.22, + 0.23, + 0.24, + 0.25, + 0.26, + 0.27, + 0.28, + 0.29, + 0.3, + 0.31, + 0.32, + 0.33, + 0.34, + 0.35000000000000003, + 0.36, + 0.37, + 0.38, + 0.39, + 0.4, + 0.41000000000000003, + 0.42, + 0.43, + 0.44, + 0.45, + 0.46, + 0.47000000000000003, + 0.48, + 0.49, + 0.5, + 0.51, + 0.52, + 0.53, + 0.54, + 0.55, + 0.56, + 0.5700000000000001, + 0.58, + 0.59, + 0.6, + 0.61, + 0.62, + 0.63, + 0.64, + 0.65, + 0.66, + 0.67, + 0.68, + 0.6900000000000001, + 0.7000000000000001, + 0.71, + 0.72, + 0.73, + 0.74, + 0.75, + 0.76, + 0.77, + 0.78, + 0.79, + 0.8, + 0.81, + 0.8200000000000001, + 0.8300000000000001, + 0.84, + 0.85, + 0.86, + 0.87, + 0.88, + 0.89, + 0.9, + 0.91, + 0.92, + 0.93, + 0.9400000000000001, + 0.9500000000000001, + 0.96, + 0.97, + 0.98, + 0.99, + 1 + ], + "y": [ + 4, + 3.99, + 3.98, + 3.97, + 3.96, + 3.95, + 3.94, + 3.93, + 3.92, + 3.91, + 3.9, + 3.89, + 3.88, + 3.87, + 3.86, + 3.85, + 3.84, + 3.83, + 3.82, + 3.81, + 3.8, + 3.79, + 3.78, + 3.77, + 3.76, + 3.75, + 3.74, + 3.73, + 3.7199999999999998, + 3.71, + 3.7, + 3.69, + 3.68, + 3.67, + 3.66, + 3.65, + 3.64, + 3.63, + 3.62, + 3.61, + 3.6, + 3.59, + 3.58, + 3.57, + 3.56, + 3.55, + 3.54, + 3.53, + 3.52, + 3.51, + 3.5, + 3.49, + 3.48, + 3.4699999999999998, + 3.46, + 3.45, + 3.44, + 3.4299999999999997, + 3.42, + 3.41, + 3.4, + 3.39, + 3.38, + 3.37, + 3.36, + 3.35, + 3.34, + 3.33, + 3.32, + 3.31, + 3.3, + 3.29, + 3.2800000000000002, + 3.27, + 3.26, + 3.25, + 3.24, + 3.23, + 3.2199999999999998, + 3.21, + 3.2, + 3.19, + 3.1799999999999997, + 3.17, + 3.16, + 3.15, + 3.14, + 3.13, + 3.12, + 3.11, + 3.1, + 3.09, + 3.08, + 3.07, + 3.06, + 3.05, + 3.04, + 3.0300000000000002, + 3.02, + 3.01, + 3 + ] + } + ], + "layout": { + "height": 1000, + "showlegend": false, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "white", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "white", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "#C8D4E3", + "linecolor": "#C8D4E3", + "minorgridcolor": "#C8D4E3", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "#C8D4E3", + "linecolor": "#C8D4E3", + "minorgridcolor": "#C8D4E3", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "heatmapgl": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmapgl" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "white", + "showlakes": true, + "showland": true, + "subunitcolor": "#C8D4E3" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "white", + "polar": { + "angularaxis": { + "gridcolor": "#EBF0F8", + "linecolor": "#EBF0F8", + "ticks": "" + }, + "bgcolor": "white", + "radialaxis": { + "gridcolor": "#EBF0F8", + "linecolor": "#EBF0F8", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "white", + "gridcolor": "#DFE8F3", + "gridwidth": 2, + "linecolor": "#EBF0F8", + "showbackground": true, + "ticks": "", + "zerolinecolor": "#EBF0F8" + }, + "yaxis": { + "backgroundcolor": "white", + "gridcolor": "#DFE8F3", + "gridwidth": 2, + "linecolor": "#EBF0F8", + "showbackground": true, + "ticks": "", + "zerolinecolor": "#EBF0F8" + }, + "zaxis": { + "backgroundcolor": "white", + "gridcolor": "#DFE8F3", + "gridwidth": 2, + "linecolor": "#EBF0F8", + "showbackground": true, + "ticks": "", + "zerolinecolor": "#EBF0F8" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "#DFE8F3", + "linecolor": "#A2B1C6", + "ticks": "" + }, + "baxis": { + "gridcolor": "#DFE8F3", + "linecolor": "#A2B1C6", + "ticks": "" + }, + "bgcolor": "white", + "caxis": { + "gridcolor": "#DFE8F3", + "linecolor": "#A2B1C6", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "#EBF0F8", + "linecolor": "#EBF0F8", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "#EBF0F8", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "#EBF0F8", + "linecolor": "#EBF0F8", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "#EBF0F8", + "zerolinewidth": 2 + } + } + }, + "width": 700, + "xaxis": { + "range": [ + -0.1, + 1.1 + ], + "visible": false + }, + "yaxis": { + "visible": false + } + } + }, + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "matching = [(\"Aang\", \"Air\"), (\"Katara\", \"Water\"), (\"Zuko\", \"Fire\"), (\"Toph\", \"Earth\") ]\n", + "plot_bipartite(g, [\"Aang\", \"Katara\", \"Toph\", \"Zuko\", \"Azula\"], weights=True, matching=matching)" + ] + }, + { + "cell_type": "markdown", + "id": "c0138b47-0bfe-4016-911b-f5e18c4393c3", + "metadata": { + "id": "c0138b47-0bfe-4016-911b-f5e18c4393c3" + }, + "source": [ + "## Linear Programs\n", + "\n", + "For linear programs, we'll use the popular scientific computing library scipy. The documentation can be found [here](https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.linprog.html)\n", + "\n", + "Here's an example from the lecture...\n", + "\n", + "Note that `linprog` minimizes by default so you need to negate your objective function if you want to maximize." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "efc93e0c-e9ce-442f-9bcd-b952f600cc31", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "efc93e0c-e9ce-442f-9bcd-b952f600cc31", + "outputId": "15ee8f33-7fd8-461c-9c89-e42d0920f03a" + }, + "outputs": [ + { + "data": { + "text/plain": [ + " message: Optimization terminated successfully. (HiGHS Status 7: Optimal)\n", + " success: True\n", + " status: 0\n", + " fun: -28.0\n", + " x: [ 8.000e+00 4.000e+00 0.000e+00]\n", + " nit: 2\n", + " lower: residual: [ 8.000e+00 4.000e+00 0.000e+00]\n", + " marginals: [ 0.000e+00 0.000e+00 1.667e-01]\n", + " upper: residual: [ inf inf inf]\n", + " marginals: [ 0.000e+00 0.000e+00 0.000e+00]\n", + " eqlin: residual: []\n", + " marginals: []\n", + " ineqlin: residual: [ 1.800e+01 0.000e+00 0.000e+00]\n", + " marginals: [-0.000e+00 -1.667e-01 -6.667e-01]\n", + " mip_node_count: 0\n", + " mip_dual_bound: 0.0\n", + " mip_gap: 0.0" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "c = [-3,-1,-2]\n", + "A = [\n", + " [1, 1, 3],\n", + " [2, 2, 5],\n", + " [4, 1, 2]\n", + " ]\n", + "b = [30, 24, 36]\n", + "linprog(c, A_ub=A, b_ub=b, bounds=(0,None))" + ] + }, + { + "cell_type": "markdown", + "id": "f7b32720-b8c8-427f-9e3d-3eb482ea5d63", + "metadata": { + "id": "f7b32720-b8c8-427f-9e3d-3eb482ea5d63" + }, + "source": [ + "# Match Making\n", + "\n", + "Imagine you are in the following scenario. You are a TA for an interdisciplinary course hosted by the CS and Business departments. As a part of the course, students need to pair up - one from the CS department and one from the Business department to develop an app.\n", + "\n", + "Since the CS students and Business students don't take that many other classes together, many of them would like some help finding a project partner. To facilitate this, the professor sent out a form asking for the student's home department and availability to work on a project. To simplify the problem a bit, let's suppose that every student is the class is either in the CS department or the Business department but not both. The prof, who hears that you have taken 373, tasks you with matching the students.\n", + "\n", + "Here is the data from the form responses." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "84ab68a4-8efa-48ba-83e3-26eb8323be7f", + "metadata": { + "id": "84ab68a4-8efa-48ba-83e3-26eb8323be7f" + }, + "outputs": [], + "source": [ + "cs_students, business_students = get_random_responses(30, seed=\"replace with your groups UTorIDs\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "14557dcf-ec81-4618-9701-427c33268e1e", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "14557dcf-ec81-4618-9701-427c33268e1e", + "outputId": "3cf304a8-f8b8-40fb-9e2d-5a13c8aabd8c" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Response(student_id='0', availability={'Monday_PM', 'Saturday_AM', 'Sunday_PM'})" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cs_students[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "_bFZl5lUEvg7", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 + }, + "id": "_bFZl5lUEvg7", + "outputId": "49a2fdf6-181f-4e3a-b13c-9de080fb07ff" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'0'" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cs_students[0].student_id" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "dOa40fmkEyjh", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "dOa40fmkEyjh", + "outputId": "fac07c07-94bb-4a29-bec1-218ddbe92741" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'Monday_PM', 'Saturday_AM', 'Sunday_PM'}" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cs_students[0].availability" + ] + }, + { + "cell_type": "markdown", + "id": "16096390-8421-4aaa-b75e-d581e99398eb", + "metadata": { + "id": "16096390-8421-4aaa-b75e-d581e99398eb" + }, + "source": [ + "As you can see, a response contains a student ID and a set of timeslots in which they are available.\n", + "\n", + "A CS student (one from the `cs_students` list) and a Business student can be paired up iff they overlap in their avaialability.\n", + "\n", + "## Task 1\n", + "Model this problem as a network flow problem. Solve the flow problem and extract a matching of the students. To submit, change the seed to a string containing your UTorIDs, run your code, and upload.\n", + "1. The block of code that generated the responses (above)\n", + "2. A screenshot of the flow dictionary you obtained\n", + "3. A screenshot of the graph you obtained along with the matching. I.e., it should be the output of `plot_bipartite` with the matching parameter equal to the matching you found." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "55b2c4b2-7dae-4b9d-a298-d67fa5173826", + "metadata": { + "id": "55b2c4b2-7dae-4b9d-a298-d67fa5173826" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Response(student_id='0', availability={'Monday_PM', 'Saturday_AM', 'Sunday_PM'})\n", + "Response(student_id='1', availability={'Monday_PM', 'Tuesday_PM'})\n", + "Response(student_id='2', availability={'Friday_AM', 'Sunday_PM', 'Thursday AM'})\n", + "Response(student_id='3', availability={'Friday_AM', 'Sunday_PM', 'Wednesday AM'})\n", + "Response(student_id='4', availability={'Monday_PM', 'Tuesday AM', 'Monday AM'})\n", + "Response(student_id='5', availability={'Friday_AM', 'Sunday_PM', 'Wednesday AM', 'Thursday AM'})\n", + "Response(student_id='6', availability={'Tuesday_PM', 'Sunday_PM', 'Sunday_AM'})\n", + "Response(student_id='7', availability={'Thursday_PM', 'Sunday_PM'})\n", + "Response(student_id='8', availability={'Monday AM'})\n", + "Response(student_id='9', availability={'Friday_PM', 'Sunday_AM', 'Wednesday_PM'})\n", + "Response(student_id='10', availability={'Saturday_AM', 'Monday AM'})\n", + "Response(student_id='11', availability={'Friday_PM', 'Saturday_PM', 'Wednesday_PM'})\n", + "Response(student_id='12', availability={'Friday_AM', 'Tuesday_PM', 'Thursday AM'})\n", + "Response(student_id='13', availability={'Tuesday AM', 'Thursday AM', 'Wednesday_PM'})\n", + "Response(student_id='14', availability={'Friday_AM', 'Saturday_AM', 'Saturday_PM'})\n" + ] + } + ], + "source": [ + "for cs_student in cs_students:\n", + " for " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6ae561d1", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "9efa7d19", + "metadata": {}, + "source": [ + "## Task 2\n", + "Since you want students to put in a good effort on the project, you want to match students with more overlap in their availability. For two students, define their compatibility score as the number of timeslots they overlap. Your new goal is to find a matching of all the students that maximizes the total compatibility score. Model the problem as a Linear Program, solve it, and extract the matching.\n", + "\n", + "NOTE: If you find that you want to introduce some integrality constraints, try running the linear program without these constraints. It turns out that in the solution to this particular linear program, the integrality constraints are not needed and the optimal solution will in fact be integral anyway...\n", + "\n", + "To submit, upload\n", + "1. A screenshot of the output of `linprog` (it's okay if it is truncated)\n", + "2. A screenshot of the graph with this matching, again it should be the output of `plot_bipartite` with the matching parameter equal to the matching that you found, and weights=True.\n", + "3. Calculate the total weight of this matching and compare it to the matching obtained in Task 1.\n", + "\n", + "Another note: Networkx has some functions that find matchings directly (i.e. without reducing to flow). See [here](https://networkx.org/documentation/stable/reference/algorithms/matching.html). You shouldn't use these function for this exercise since one of the main points of this exercise is to have you reduce the matching problem to flow/LP. However, it's good to know that these things exist if you ever need to compute a matching in the future." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "39b97a8f-84a8-4fc1-8eaa-5487423f042e", + "metadata": { + "id": "39b97a8f-84a8-4fc1-8eaa-5487423f042e" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "10c8e19d-2500-4013-803d-298da3de47ef", + "metadata": { + "id": "10c8e19d-2500-4013-803d-298da3de47ef" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4b45b2fe-78d9-4b94-b224-f0061d4cd858", + "metadata": { + "id": "4b45b2fe-78d9-4b94-b224-f0061d4cd858" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9fdccb5c-a1c3-404c-ab1e-13d01b8f21e9", + "metadata": { + "id": "9fdccb5c-a1c3-404c-ab1e-13d01b8f21e9" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a672ee96-114e-40f5-9096-d5f4a31c6856", + "metadata": { + "id": "a672ee96-114e-40f5-9096-d5f4a31c6856" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76f266c6-888d-4670-ac94-71d84de22b2f", + "metadata": { + "id": "76f266c6-888d-4670-ac94-71d84de22b2f" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "59282147-3662-4278-ab19-fe69d691a02c", + "metadata": { + "id": "59282147-3662-4278-ab19-fe69d691a02c" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7af3c8c5-e0c3-4127-a99f-8f467c12cb39", + "metadata": { + "id": "7af3c8c5-e0c3-4127-a99f-8f467c12cb39" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "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.12.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/A4/task1.png b/A4/task1.png new file mode 100644 index 0000000..9d6c65d Binary files /dev/null and b/A4/task1.png differ