From c0943e43096a8d613591b9471844ec9d16f8c713 Mon Sep 17 00:00:00 2001 From: Philipp Horstenkamp Date: Sat, 18 Feb 2023 00:12:29 +0100 Subject: [PATCH] Added the points per score at turn label. --- main.ipynb | 146 ++++++++++++++++++++++++++++++++++++------------- poetry.lock | 93 ++++++++++++++++++++++--------- pyproject.toml | 1 + 3 files changed, 178 insertions(+), 62 deletions(-) diff --git a/main.ipynb b/main.ipynb index 89f351a..1c4a510 100644 --- a/main.ipynb +++ b/main.ipynb @@ -1373,13 +1373,13 @@ }, { "cell_type": "code", - "execution_count": 119, + "execution_count": 145, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d4dc3ee2dff24deaaacebbf4e7e9dddf", + "model_id": "b098bb4da154488b8b4c22722833e8c0", "version_major": 2, "version_minor": 0 }, @@ -1414,7 +1414,7 @@ " range(70),\n", " mean_possibilitie_count,\n", " yerr=std_possibilitie_count,\n", - " label='=\"Mean action space size with error bars',\n", + " label=\"Mean action space size with error bars\",\n", " )\n", " ax2.scatter(turn, mean_possibilitie_count[turn], marker=\"x\")\n", " ax2.legend()\n", @@ -1587,18 +1587,18 @@ }, { "cell_type": "code", - "execution_count": 130, + "execution_count": 146, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "679fea405f704503ae407321cab3779a", + "model_id": "75ffc8765b074cd0b4495ac6075bb6b8", "version_major": 2, "version_minor": 0 }, "text/plain": [ - "interactive(children=(IntSlider(value=34, description='turn', max=69), Output()), _dom_classes=('widget-intera…" + "interactive(children=(IntSlider(value=29, description='turn', max=59), Output()), _dom_classes=('widget-intera…" ] }, "metadata": {}, @@ -1610,7 +1610,7 @@ "score_history[1::2] = score_history[1::2] * -1\n", "\n", "\n", - "@interact(turn=(0, 69))\n", + "@interact(turn=(0, 59))\n", "def hist_direct_score(turn):\n", " fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 7))\n", " fig.suptitle(\n", @@ -1618,39 +1618,43 @@ " )\n", "\n", " ax1.set_title(\n", - " f\"Histogram of turn {turn} by {'white' if turn % 2 == 0 else 'black'}\"\n", + " f\"Histogram of scores on turn {turn} by {'white' if turn % 2 == 0 else 'black'}\"\n", " )\n", "\n", " ax1.hist(score_history[turn], density=True)\n", - " ax1.set_xlabel(\"Action space size\")\n", - " ax1.set_ylabel(\"Action space size probability\")\n", - " ax2.set_title(f\"Mean size of the action space per turn\")\n", + " ax1.set_xlabel(\"Points made\")\n", + " ax1.set_ylabel(\"Score probability\")\n", + " ax2.set_title(f\"Points scored at turn\")\n", " ax2.set_xlabel(\"Turn\")\n", - " ax2.set_ylabel(\"Average possible moves\")\n", + " ax2.set_ylabel(\"Average points scored\")\n", "\n", " ax2.errorbar(\n", - " range(70),\n", - " mean_possibilitie_count,\n", - " yerr=std_possibilitie_count,\n", - " label='=\"Mean action space size with error bars',\n", + " range(60),\n", + " np.mean(score_history, axis=1)[:60],\n", + " yerr=np.std(score_history, axis=1)[:60],\n", + " label=\"Mean socre at turn\",\n", " )\n", - " ax2.scatter(turn, mean_possibilitie_count[turn], marker=\"x\")\n", + " ax2.scatter(turn, np.mean(score_history, axis=1)[turn], marker=\"x\", color=\"red\")\n", " ax2.legend()\n", " plt.show()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 147, "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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6Ny5Mx566CH85S9/QWBgIOLj41FRUYFu3bohPT0ddXV119xvS38OUBt3628YI5JruM30u+++s7p+xIgR17xl/eWXXxbDhg0TLi4uwtHRUfj6+opXXnlF1NbWSjV1dXVi5syZokePHkKlUsluzT137px4/vnnhbu7u+jQoYPw8fERS5culW47blBdXS2mT58uunXrJjp37izCw8NFcXGxACC7hbzh1l9rt/qeOHFCPPLII8LFxUU4OzuLxx57TJSVlTV52/vVfUyaNEl06tSpRfNkzcWLF8WiRYuEt7e36NChg/D09BTx8fGy26Gv9OSTTwoAwmg0Ntnnv//9bxESEiI6deokOnXqJHx9fcX06dNFcXGxzeNr0NTXq+HW7qVLlzba5uo5FEKIn3/+WURFRQm9Xi86dOggPDw8xIMPPig2btzY7P43btwoRo8eLdzc3IRarRa9e/cWTz/9tDh16pSs7tdffxUzZswQHh4eQq1Wi169eolJkyaJs2fPSjXl5eViypQpwtXVVajVauHn59foFu/mjutGjqNhjBMnThROTk7C2dlZTJw4URQUFFzzlvXc3Fzx8MMPC3d3d6FWq4W7u7uIjIwUP/30k6z/Tz/9VAwYMEA4ODjI+mzua97ULesff/yxiI+PF25ubsLR0VGEhYVJj0hocP78efHEE08IFxcXAUB26/nPP/8sjEaj0Gg0QqfTifnz54ucnJxr3rIuRMt/DgAQ06dPb3RMV/9cotuPSghedUV0IwoLCzF48GB8+OGHePLJJ1t7OERE1ARe00NkA2u/jDE1NRV2dnbXfBIyERG1Ll7TQ2SDlJQU5Ofn47777oODg4N0K3NMTAw8PT1be3hERNQMfrxFZIOcnBwsWrQIP/74I86fP4/evXtj4sSJeOmll+DgwP9DEBHdzhh6iIiISBF4TQ8REREpAkMPERERKQIvQriCxWJBWVkZunTp8qc/Wp2IiIhuDiEEzp07B3d390a/3PdKDD1XKCsr4x04REREbdTx48fRq1evJtcz9Fyh4XHwx48fh5OTUyuPhoiIiFrCbDbD09Pzmr/WhaHnCg0faTk5OTH0EBERtTHXujSFFzITERGRIjD0EBERkSIw9BAREZEiMPQQERGRIjD0EBERkSIw9BAREZEiMPQQERGRIjD0EBERkSIw9BAREZEiMPQQERGRIjD0EBER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aN306dPh6uqKYcOG4YMPPkBzma6mpgZms1m2EBERUfvkYEvx2bNnUV9fD51OJ2vX6XQ4dOiQ1W1MJpPVepPJZONQL3v//fdx1113ITg4WNa+ePFi3H///ejYsSN27NiB5557DufPn8esWbOs9pOcnIxFixZd9ziIlKwtnjUhImWzKfTcDv744w+sX78eCxcubLTuyrbBgwejuroaS5cubTL0xMfHIzY2VnptNpvh6en55w+aiIiIWp1NH2+5urrC3t4e5eXlsvby8nLo9Xqr2+j1epvqr2Xjxo34/fffERUVdc1ag8GAEydOoKamxup6jUYDJycn2UJERETtk02hR61WIyAgALm5uVKbxWJBbm4ugoKCrG4TFBQkqweAnJycJuuv5f3338e4cePQo0ePa9YWFhaia9eu0Gg017UvIiIiaj9s/ngrNjYWkyZNwpAhQzBs2DCkpqaiuroaU6ZMAQBERUXBw8MDycnJAIDZs2djxIgRWLZsGcLCwpCeno69e/di9erVUp8VFRUoLS1FWVkZAKC4uBjApbNEV54ROnLkCHbu3NnoOT8A8Nlnn6G8vByBgYHQarXIycnBq6++innz5tl6iERERNQO2Rx6IiIicObMGSQkJMBkMsHf3x/Z2dnSxcqlpaWws7t8Aik4OBjr16/HggULMH/+fPj4+GDz5s0YOHCgVLNlyxYpNAHAhAkTAACJiYlISkqS2j/44AP06tULo0ePbjSuDh06YOXKlXj++echhEC/fv3wxhtvYNq0abYeIhEREbVDNj+npz3jc3qIWo53b90afE4P0bXdlOf0EBEREbVVDD1ERESkCAw9REREpAgMPURERKQIDD1ERESkCAw9REREpAgMPURERKQIDD1ERESkCAw9REREpAg2/xoKIiK6ddrik6/5FGm6XfFMDxERESkCQw8REREpAkMPERERKQJDDxERESkCQw8REREpAkMPERERKQJDDxERESkCQw8REREpAkMPERERKQJDDxERESkCQw8REREpAkMPERERKQJDDxERESkCQw8REREpAkMPERERKQJDDxERESkCQw8REREpAkMPERERKQJDDxERESkCQw8REREpAkMPERERKQJDDxERESnCdYWelStXwsvLC1qtFgaDAXv27Gm2PjMzE76+vtBqtfDz80NWVpZs/aZNmzB69Gh0794dKpUKhYWFjfoYOXIkVCqVbHnmmWdkNaWlpQgLC0PHjh3h5uaGF154AXV1dddziERERNTO2Bx6MjIyEBsbi8TEROzbtw+DBg1CaGgoTp8+bbV+165diIyMRHR0NAoKChAeHo7w8HAUFRVJNdXV1QgJCcFrr73W7L6nTZuGU6dOSUtKSoq0rr6+HmFhYaitrcWuXbuwbt06rF27FgkJCbYeIhEREbVDKiGEsGUDg8GAoUOHYsWKFQAAi8UCT09PzJw5E3FxcY3qIyIiUF1dja1bt0ptgYGB8Pf3R1pamqy2pKQE3t7eKCgogL+/v2zdyJEj4e/vj9TUVKvj+vzzz/Hggw+irKwMOp0OAJCWloYXX3wRZ86cgVqtvuaxmc1mODs7o6qqCk5OTtesJ1Iyr7htrT0Euk2VLAlr7SGQwrT0/dumMz21tbXIz8+H0Wi83IGdHYxGI/Ly8qxuk5eXJ6sHgNDQ0Cbrm/PRRx/B1dUVAwcORHx8PH7//XfZfvz8/KTA07Afs9mMAwcOWO2vpqYGZrNZthAREVH75GBL8dmzZ1FfXy8LFgCg0+lw6NAhq9uYTCar9SaTyaaBPvHEE+jTpw/c3d2xf/9+vPjiiyguLsamTZua3U/DOmuSk5OxaNEim8ZBREREbZNNoac1xcTESH/38/NDz549MWrUKPz888/o27fvdfUZHx+P2NhY6bXZbIanp+cNj5WIiIhuPzZ9vOXq6gp7e3uUl5fL2svLy6HX661uo9frbapvKYPBAAA4cuRIs/tpWGeNRqOBk5OTbCEiIqL2yabQo1arERAQgNzcXKnNYrEgNzcXQUFBVrcJCgqS1QNATk5Ok/Ut1XBbe8+ePaX9/PDDD7K7yHJycuDk5IQBAwbc0L6IiIio7bP5463Y2FhMmjQJQ4YMwbBhw5Camorq6mpMmTIFABAVFQUPDw8kJycDAGbPno0RI0Zg2bJlCAsLQ3p6Ovbu3YvVq1dLfVZUVKC0tBRlZWUAgOLiYgCXztDo9Xr8/PPPWL9+PcaOHYvu3btj//79eP755zF8+HDcfffdAIDRo0djwIABmDhxIlJSUmAymbBgwQJMnz4dGo3mxmaJiIiI2jybQ09ERATOnDmDhIQEmEwm+Pv7Izs7W7pouLS0FHZ2l08gBQcHY/369ViwYAHmz58PHx8fbN68GQMHDpRqtmzZIoUmAJgwYQIAIDExEUlJSVCr1fjiiy+kgOXp6Ynx48djwYIF0jb29vbYunUrnn32WQQFBaFTp06YNGkSFi9ebPusEBERUbtj83N62jM+p4eo5ficHmoKn9NDt9pNeU4PERERUVvF0ENERESKwNBDREREisDQQ0RERIrA0ENERESKwNBDREREisDQQ0RERIrA0ENERESKwNBDREREisDQQ0RERIrA0ENERESKwNBDREREisDQQ0RERIrA0ENERESKwNBDREREisDQQ0RERIrA0ENERESKwNBDREREisDQQ0RERIrA0ENERESKwNBDREREisDQQ0RERIrA0ENERESKwNBDREREisDQQ0RERIrA0ENERESKwNBDREREisDQQ0RERIrA0ENERESKwNBDREREisDQQ0RERIrA0ENERESKcF2hZ+XKlfDy8oJWq4XBYMCePXuarc/MzISvry+0Wi38/PyQlZUlW79p0yaMHj0a3bt3h0qlQmFhoWx9RUUFZs6cif79+8PR0RG9e/fGrFmzUFVVJatTqVSNlvT09Os5RCIiImpnbA49GRkZiI2NRWJiIvbt24dBgwYhNDQUp0+ftlq/a9cuREZGIjo6GgUFBQgPD0d4eDiKioqkmurqaoSEhOC1116z2kdZWRnKysrw+uuvo6ioCGvXrkV2djaio6Mb1a5ZswanTp2SlvDwcFsPkYiIiNohlRBC2LKBwWDA0KFDsWLFCgCAxWKBp6cnZs6cibi4uEb1ERERqK6uxtatW6W2wMBA+Pv7Iy0tTVZbUlICb29vFBQUwN/fv9lxZGZm4qmnnkJ1dTUcHBwuHYxKhU8++eS6g47ZbIazszOqqqrg5OR0XX0QKYVX3LbWHgLdpkqWhLX2EEhhWvr+bdOZntraWuTn58NoNF7uwM4ORqMReXl5VrfJy8uT1QNAaGhok/Ut1XBgDYGnwfTp0+Hq6ophw4bhgw8+QHOZrqamBmazWbYQERFR++Rw7ZLLzp49i/r6euh0Olm7TqfDoUOHrG5jMpms1ptMJhuHKh/HP//5T8TExMjaFy9ejPvvvx8dO3bEjh078Nxzz+H8+fOYNWuW1X6Sk5OxaNGi6x4HERERtR02hZ7bgdlsRlhYGAYMGICkpCTZuoULF0p/Hzx4MKqrq7F06dImQ098fDxiY2NlfXt6et6UcRMREVHrsunjLVdXV9jb26O8vFzW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qqqCk5OTLdNCdEO84ra19hCIFK1kSVhrD4FugNlshrOz8zXfv20601NbW4v8/HwYjcbLHdjZwWg0Ii8vz+o2eXl5snoACA0NleqPHj0Kk8kkq3F2dobBYGjU55IlS9C9e3cMHjwYS5cuRV1dnWw/w4cPlwJPw36Ki4vx22+/WR1bcnIynJ2dpcXT07OFM0FERERtjU2h5+zZs6ivr4dOp5O163Q6mEwmq9uYTKZm6xv+vFafs2bNQnp6Or766is8/fTTePXVV/GPf/zjmvu5ch9Xi4+PR1VVlbQcP368yWMnIiKits2htQfQUrGxsdLf7777bqjVajz99NNITk6GRqO5rj41Gs11b0tERERti01nelxdXWFvb4/y8nJZe3l5OfR6vdVt9Hp9s/UNf9rSJ3Dp2qK6ujqUlJQ0u58r90FERETKZVPoUavVCAgIQG5urtRmsViQm5uLoKAgq9sEBQXJ6gEgJydHqvf29oZer5fVmM1m7N69u8k+AaCwsBB2dnZwc3OT9rNz505cvHhRtp/+/fuja9euthwmERERtUM237IeGxuLd999F+vWrcPBgwfx7LPPorq6GlOmTAEAREVFIT4+XqqfPXs2srOzsWzZMhw6dAhJSUnYu3cvZsyYAQBQqVSYM2cOXn75ZWzZsgU//PADoqKi4O7ujvDwcACXLlJOTU3F999/j19++QUfffQRnn/+eTz11FNSoHniiSegVqsRHR2NAwcOICMjA//6179kH4sRERGRctl8TU9ERATOnDmDhIQEmEwm+Pv7Izs7W7pouLS0FHZ2l7NUcHAw1q9fjwULFmD+/Pnw8fHB5s2bMXDgQKnmH//4B6qrqxETE4PKykqEhIQgOzsbWq0WwKVrb9LT05GUlISamhp4e3vj+eeflwUaZ2dn7NixA9OnT0dAQABcXV2RkJCAmJiY654capt4+zcREVlj83N62rOW3udPtzeGHiKyFZ/T07bdlOf0EBEREbVVDD1ERESkCAw9REREpAgMPURERKQIDD1ERESkCAw9REREpAgMPURERKQIDD1ERESkCAw9REREpAgMPURERKQIDD1ERESkCAw9REREpAgMPURERKQIDD1ERESkCAw9REREpAgMPURERKQIDD1ERESkCAw9REREpAgMPURERKQIDD1ERESkCAw9REREpAgMPURERKQIDD1ERESk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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "def calculate_final_evaluation_for_history(board_history: np.ndarray) -> np.ndarray:\n", " final_evaluation = final_boards_evaluation(board_history[-1])\n", @@ -1658,7 +1662,6 @@ "\n", "\n", "assert len(calculate_final_evaluation_for_history(_board_history).shape) == 1\n", - "print(calculate_final_evaluation_for_history(_board_history).shape)\n", "_final_eval = calculate_final_evaluation_for_history(_board_history)\n", "plt.title(\"Histogram over the score distribtuion\")\n", "plt.hist((_final_eval * 64), density=True)\n", @@ -1667,9 +1670,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 148, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGzCAYAAAD9pBdvAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA5fklEQVR4nO3deVyVdf7//+cB5SAqoKGgRJJLLrngoCDmVp2Gykpb0RpFRm2mtJpB+yY54dKCqWN8Pg2T5bg005SaY9nn45LG6KcsykRtUTM11wzcEhQdTHj//ujHqSOLHETeQo/77Xbd6rzP+7qu1/u8z/L0Otd1cBhjjAAAACzxsV0AAAD4ZSOMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijKBGRUZGasSIEbbLgAV79+6Vw+HQzJkzbZdSpgULFsjhcGjv3r2XdD8lj8OCBQvcbZMnT5bD4bik+y0xYMAADRgwwH173bp1cjgcWrJkSY3sf8SIEYqMjKyRfaH2IIygykrevDdu3Fjm/QMGDFDnzp0vej8rVqzQ5MmTL3o7qBnMV804dOiQJk+erC1bttTYPl9//XWlp6fX2P7wy0EYQY3asWOH5syZ49U6K1as0JQpUy5RRahutXW+hg0bpjNnzqhVq1Y1vu8//elPOnPmjFfrHDp0SFOmTPE6jKxevVqrV6/2ap0S1RFG5syZox07dlzUNlD3EEZQo5xOp+rXr2+7DK8UFBTYLuGyc/r0adslVDtfX1/5+/vX2NclP1evXj35+/tf0n2UzJmfn5/8/Pwu6b4qUr9+fTmdTmv7x+WJMIIadf45Iz/88IOmTJmidu3ayd/fX1dccYX69OmjNWvWSPrx++WMjAxJksPhcC8lCgoKNG7cOEVERMjpdKp9+/aaOXOmzv9j1GfOnNGjjz6qkJAQNW7cWHfccYe+/fZbORwOj68USr6737Ztm+6//341adJEffr0kSR9/vnnGjFihFq3bi1/f3+FhYXpt7/9rY4dO+axr5JtfP311/rNb36joKAgNWvWTE899ZSMMTpw4IAGDRqkwMBAhYWF6c9//nOlHrtz587p6aefVps2beR0OhUZGaknn3xShYWF7j633XabWrduXeb6cXFx6tGjh0fba6+9pujoaDVo0EBNmzbVkCFDdODAAY8+JV+3ZWdnq1+/fgoICNCTTz5Z5j4uNF8lXnnlFfc4evbsqU8//bRUn6+++kr33HOPmjZtKn9/f/Xo0UPvvPNOxQ+SpF/96le66667PNq6dOkih8Ohzz//3N22aNEiORwObd++XVLZ54xERkbqtttu0/r16xUTEyN/f3+1bt1af//73y9YhySdOHFCI0aMUFBQkIKDg5WYmKgTJ06U6lfWOSNr1qxRnz59FBwcrEaNGql9+/bux33dunXq2bOnJCkpKcn9OJech1LRnJ1/zkiJoqIiPfnkkwoLC1PDhg11xx13eDwXBgwYoOXLl2vfvn3u/ZWc+1He+TYl56OsW7fO3VbWOSOVfR07HA6NHTtWb7/9tjp37iyn06lrr71Wq1atKuvhRy1Sz3YBqP3y8vJ09OjRUu0//PDDBdedPHmy0tLSNGrUKMXExCg/P18bN27Upk2bdNNNN+l3v/udDh06pDVr1ugf//iHx7rGGN1xxx1au3atRo4cqaioKL377rt6/PHH9e233+qFF15w9x0xYoQWL16sYcOGqVevXvq///s/DRw4sNy67r33XrVr107PPfec+w1xzZo1+uabb5SUlKSwsDBt3bpVr7zyirZu3aqPP/641IdJQkKCOnbsqGnTpmn58uV65pln1LRpU7388su64YYb9Pzzz+uf//ynxo8fr549e6pfv34VPlajRo3Sq6++qnvuuUfjxo3TJ598orS0NG3fvl1vvfWWe5/Dhw/Xp59+6v6wkqR9+/bp448/1owZM9xtzz77rJ566indd999GjVqlI4cOaIXX3xR/fr10+bNmxUcHOzue+zYMd1yyy0aMmSIfvOb3yg0NLTMGiuarxKvv/66Tp48qd/97ndyOByaPn267rrrLn3zzTfuo2Zbt27Vddddp/DwcE2YMEENGzbU4sWLNXjwYP3rX//SnXfeWe7j1LdvX73xxhvu28ePH9fWrVvl4+OjDz74QF27dpUkffDBB2rWrJk6duxY4eO+a9cu3XPPPRo5cqQSExM1b948jRgxQtHR0br22mvLXc8Yo0GDBmn9+vX6/e9/r44dO+qtt95SYmJihfsrGf9tt92mrl27aurUqXI6ndq1a5c+/PBDSVLHjh01depUpaam6sEHH1Tfvn0lSb1793Zvo7JzVuLZZ5+Vw+HQE088ocOHDys9PV0ul0tbtmxRgwYNNHHiROXl5engwYPu11ajRo0uOJYL8eZ1LEnr16/X0qVL9fDDD6tx48b67//+b919993av3+/rrjiiouuB5YYoIrmz59vJFW4XHvttR7rtGrVyiQmJrpvd+vWzQwcOLDC/YwZM8aU9VR9++23jSTzzDPPeLTfc889xuFwmF27dhljjMnOzjaSzB/+8AePfiNGjDCSzKRJk9xtkyZNMpLM0KFDS+3v9OnTpdreeOMNI8m8//77pbbx4IMPutvOnTtnrrzySuNwOMy0adPc7d9//71p0KCBx2NSli1bthhJZtSoUR7t48ePN5LMv//9b2OMMXl5ecbpdJpx48Z59Js+fbpxOBxm3759xhhj9u7da3x9fc2zzz7r0e+LL74w9erV82jv37+/kWRmz55dYY0lypuvPXv2GEnmiiuuMMePH3e3L1u2zEgy//M//+Nuu/HGG02XLl3Mf/7zH3dbcXGx6d27t2nXrl2F+3/zzTeNJLNt2zZjjDHvvPOOcTqd5o477jAJCQnufl27djV33nmn+3bJ83nPnj3utlatWpWa38OHD5f5GJ+v5Pk5ffp0d9u5c+dM3759jSQzf/58d3vJc6bECy+8YCSZI0eOlLv9Tz/9tNR2SlQ0Z/379zf9+/d33167dq2RZMLDw01+fr67ffHixUaS+a//+i9328CBA02rVq1KbbOsx+7n2167dq27LTEx0WMblX0dG2OMJOPn5+fR9tlnnxlJ5sUXXyxVF2oPvqbBRcvIyNCaNWtKLSX/Aq1IcHCwtm7dqp07d3q93xUrVsjX11ePPvqoR/u4ceNkjNHKlSslyX0I9+GHH/bo98gjj5S77d///vel2ho0aOD+///85z86evSoevXqJUnatGlTqf6jRo1y/7+vr6969OghY4xGjhzpbg8ODlb79u31zTfflFuL9ONYJSk5Odmjfdy4cZKk5cuXS5ICAwN1yy23aPHixR6HuBctWqRevXrpqquukiQtXbpUxcXFuu+++3T06FH3EhYWpnbt2mnt2rUe+3E6nUpKSqqwxspKSEhQkyZN3LdL/lVf8hgcP35c//73v3Xffffp5MmT7tqOHTum+Ph47dy5U99++2252y/Z3vvvvy/pxyMgPXv21E033aQPPvhA0o9fn3z55ZfuvhXp1KmTR79mzZpVes7q1aunhx56yN3m6+tb4fOuRMlRqWXLlqm4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C723Xm5zeLHz98ILL5jGjRubU6dOudsup/n7ucq8B/y///f/zLXXXuvRlpCQYOLj4923L/Yxq4w6/zWNt/bs2aOcnBy5XC53W1BQkGJjY5WVlSVJysrKUnBwsHr06OHu43K55OPjo08++aTGaq2OOrKzs7VlyxaNHDmy1H1jxoxRSEiIYmJiNG/ePJka/n28ixnfP//5T4WEhKhz585KSUnR6dOnPbbbpUsX968GS1J8fLzy8/O1devW6h9IBarruZSXl6fAwEDVq+f5o8o1OYdnz55Vdna2x2vHx8dHLpfL/do5X1ZWlkd/6ce5KOlfmddjTarKGM93+vRp/fDDD2ratKlH+7p169S8eXO1b99eDz30kI4dO1attVdGVcd36tQptWrVShERERo0aJDH6+hymsPqmL+5c+dqyJAhatiwoUf75TB/VXGh12B1PGaV4fXPwdd1OTk5kuTxQVVyu+S+nJwcNW/e3OP+evXqqWnTpu4+NaE66pg7d646duyo3r17e7RPnTpVN9xwgwICArR69Wo9/PDDOnXqlB599NFqq/9Cqjq++++/X61atVLLli31+eef64knntCOHTu0dOlS93bLmt+S+2pSdczh0aNH9fTTT+vBBx/0aK/pOTx69KiKiorKfGy/+uqrMtcpby5+/loraSuvT02qyhjP98QTT6hly5Yeb+4333yz7rrrLl199dXavXu3nnzySd1yyy3KysqSr69vtY6hIlUZX/v27TVv3jx17dpVeXl5mjlzpnr37q2tW7fqyiuvvKzm8GLnb8OGDfryyy81d+5cj/bLZf6qorzXYH5+vs6cOaPvv//+op/zlVErw8iECRP0/PPPV9hn+/bt6tChQw1VVL0qO76LdebMGb3++ut66qmnSt3387bu3buroKBAM2bMqJYPsks9vp9/KHfp0kUtWrTQjTfeqN27d6tNmzZV3q43amoO8/PzNXDgQHXq1EmTJ0/2uO9SziGqZtq0aVq4cKHWrVvncZLnkCFD3P/fpUsXde3aVW3atNG6det044032ii10uLi4jz+Cnvv3r3VsWNHvfzyy3r66actVlb95s6dqy5duigmJsajvTbP3+WiVoaRcePGacSIERX2ad26dZW2HRYWJknKzc1VixYt3O25ubmKiopy9zl8+LDHeufOndPx48fd61+Myo7vYutYsmSJTp8+reHDh1+wb2xsrJ5++mkVFhZe9B9TqqnxlYiNjZUk7dq1S23atFFYWFipM8Fzc3MlqVrmT6qZMZ48eVI333yzGjdurLfeekv169evsH91zmFZQkJC5Ovr634sS+Tm5pY7lrCwsAr7V+b1WJOqMsYSM2fO1LRp0/Tee++pa9euFfZt3bq1QkJCtGvXrhr9MLuY8ZWoX7++unfvrl27dkm6vObwYsZXUFCghQsXaurUqRfcj635q4ryXoOBgYFq0KCBfH19L/o5USnVdvbJZc7bE1hnzpzpbsvLyyvzBNaNGze6+7z77rvWTmCtah39+/cvdQVGeZ555hnTpEmTKtdaFdX1OK9fv95IMp999pkx5qcTWH9+JvjLL79sAgMDzX/+85/qG0AlVHWMeXl5plevXqZ///6moKCgUvuqiTmMiYkxY8eOdd8uKioy4eHhFZ7Aetttt3m0xcXFlTqBtaLXY03zdozGGPP888+bwMBAk5WVVal9HDhwwDgcDrNs2bKLrtdbVRnfz507d860b9/e/PGPfzTGXH5zWNXxzZ8/3zidTnP06NEL7sPm/P2cKnkCa+fOnT3ahg4dWuoE1ot5TlSq1mrb0mVq3759ZvPmze7LVzdv3mw2b97scRlr+/btzdKlS923p02bZoKDg82yZcvM559/bgYNGlTmpb3du3c3n3zyiVm/fr1p166dtUt7K6rj4MGDpn379uaTTz7xWG/nzp3G4XCYlStXltrmO++8Y+bMmWO++OILs3PnTvPXv/7VBAQEmNTU1Es+nvN5O75du3aZqVOnmo0bN5o9e/aYZcuWmdatW5t+/fq51ym5tPfXv/612bJli1m1apVp1qyZ1Ut7vRljXl6eiY2NNV26dDG7du3yuJzw3Llzxhh7c7hw4ULjdDrNggULzLZt28yDDz5ogoOD3VcuDRs2zEyYMMHd/8MPPzT16tUzM2fONNu3bzeTJk0q89LeC70ea5K3Y5w2bZrx8/MzS5Ys8ZirkvegkydPmvHjx5usrCyzZ88e895775lf/epXpl27djUejqsyvilTpph3333X7N6922RnZ5shQ4YYf39/s3XrVnefy2kOvR1fiT59+piEhIRS7Zfb/J08edL9OSfJzJo1y2zevNns27fPGGPMhAkTzLBhw9z9Sy7tffzxx8327dtNRkZGmZf2VvSYVYc6H0YSExONpFLL2rVr3X30//8eQ4ni4mLz1FNPmdDQUON0Os2NN95oduzY4bHdY8eOmaFDh5pGjRqZwMBAk5SU5BFwasqF6tizZ0+p8RpjTEpKiomIiDBFRUWltrly5UoTFRVlGjVqZBo2bGi6detmZs+eXWbfS83b8e3fv9/069fPNG3a1DidTtO2bVvz+OOPe/zOiDHG7N2719xyyy2mQYMGJiQkxIwbN87jstia5O0Y165dW+ZzWpLZs2ePMcbuHL744ovmqquuMn5+fiYmJsZ8/PHH7vv69+9vEhMTPfovXrzYXHPNNcbPz89ce+21Zvny5R73V+b1WNO8GWOrVq3KnKtJkyYZY4w5ffq0+fWvf22aNWtm6tevb1q1amVGjx5drW/03vJmfH/4wx/cfUNDQ82tt95qNm3a5LG9y20OvX2OfvXVV0aSWb16daltXW7zV977Q8mYEhMTTf/+/UutExUVZfz8/Ezr1q09Pg9LVPSYVQeHMTV8vSYAAMDP8DsjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArPr/ABe1qcGpyxpNAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "def calculate_who_won(board_history: np.ndarray) -> np.ndarray:\n", " who_won = evaluate_who_won(board_history[-1])\n", @@ -1683,11 +1697,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 149, "metadata": { "scrolled": false }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGzCAYAAAD9pBdvAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA640lEQVR4nO3deXxU9aH///fMJDMJhCRASMISCKKIiCyypBG8VonmKipatWi9glD1q4IVc/urUCuovRprK6UqheuGS6+FilsryCIC1pLKJtYVQdYqCXsSsk0y8/n9EWYgeyaZmRMyr+fjMY9kzpwz8zmfTDLvfLZjM8YYAQAAWMRudQEAAEBkI4wAAABLEUYAAIClCCMAAMBShBEAAGApwggAALAUYQQAAFiKMAIAACxFGAEAAJYijACtYLPZNG3aNKuLEVQFBQW6/vrr1bVrV9lsNs2dO9fqIllm7dq1stlsWrJkSaP7vfTSS7LZbNq9e3d4CtZCt956q9LT060uBlAHYQSox2effabrr79effr0UUxMjHr27KlLL71UTz/9tNVFC7n77rtPK1as0MyZM/Xqq6/qP//zP+vdr7S0VA899JDWrl0b3gICaHeirC4A0NasX79eF198sXr37q3bb79dqamp2rdvn/75z3/qD3/4g+655x6rixhSH3zwgcaPH6+f//znje5XWlqqhx9+WJL0wx/+MAwla7tuueUW3XjjjXK5XFYXBTgtEUaAWh599FElJCRo48aNSkxMrPHYgQMHwl6ekpISdezYMWyvd+DAgTrnHU5VVVXyer1yOp2WlSFQDodDDofD6mIApy26aYBavv32W5177rn1fiAnJyfXe8zbb7+tQYMGyeVy6dxzz9Xy5ctrPL5nzx7dfffdOvvssxUbG6uuXbvqhhtuqDPGwDf2YN26dbr77ruVnJysXr16+R9/7733dOGFF6pjx47q1KmTxo0bpy+++KJZ57Vz507dcMMN6tKlizp06KAf/OAHWrp0aZ3XNsZo3rx5stlsstls9T7X7t271a1bN0nSww8/7N/3oYceklTdUlJfa0ntMQu7d++WzWbT7373O82dO1f9+vWTy+XSl19+qYceekg2m007duzQrbfeqsTERCUkJGjy5MkqLS2t8byrVq3SmDFjlJiYqLi4OJ199tn65S9/2WSdtOS4iooKXXnllUpISND69etr1N2pP8/09HRdeeWVWrlypYYOHaqYmBgNHDhQb775Zo3n8x374Ycf6v/9v/+nrl27Kj4+XhMnTtTRo0frvH5z3wO+92RMTIwGDRqkt956q8n6AKxCywhQS58+fZSXl6fPP/9cgwYNanL/jz76SG+++abuvvtuderUSU899ZSuu+467d27V127dpUkbdy4UevXr9eNN96oXr16affu3Zo/f75++MMf6ssvv1SHDh1qPOfdd9+tbt26adasWSopKZEkvfrqq5o0aZKys7P1m9/8RqWlpZo/f77GjBmjTz75pNGBiQUFBbrgggtUWlqqn/3sZ+ratatefvllXX311VqyZImuvfZa/cd//IdeffVV3XLLLbr00ks1ceLEBp+vW7dumj9/vu666y5de+21+tGPfiRJGjx4cJP1VZ+FCxeqvLxcd9xxh1wul7p06eJ/7Mc//rH69u2r3NxcbdmyRc8//7ySk5P1m9/8RpL0xRdf6Morr9TgwYP1yCOPyOVyaceOHfrHP/7R6Gu25LiysjKNHz9emzZt0vvvv6+RI0c2+hrbt2/XhAkTdOedd2rSpElauHChbrjhBi1fvlyXXnppjX2nTZumxMREPfTQQ9q2bZvmz5+vPXv2+AfRSs1/D6xcuVLXXXedBg4cqNzcXB0+fFiTJ0+uEWyBNsUAqGHlypXG4XAYh8NhMjMzzS9+8QuzYsUK43a76+wryTidTrNjxw7/tk8//dRIMk8//bR/W2lpaZ1j8/LyjCTzyiuv+LctXLjQSDJjxowxVVVV/u3FxcUmMTHR3H777TWeIz8/3yQkJNTZXtv06dONJPP3v/+9xnP27dvXpKenG4/HU+Ocpk6d2ujzGWPMwYMHjSQze/bsOo9ddNFF5qKLLqqzfdKkSaZPnz7++7t27TKSTHx8vDlw4ECNfWfPnm0kmSlTptTYfu2115quXbv67//+9783kszBgwebLPOpmnPcmjVrjCTz+uuvm+LiYnPRRReZpKQk88knn9TYz/dz27Vrl39bnz59jCTzxhtv+LcVFhaa7t27m2HDhtU5dvjw4TXeY0888YSRZN555x1jTGDvgaFDh5ru3bubY8eO+betXLnSSKpR/0BbQTcNUMull16qvLw8XX311fr000/1xBNPKDs7Wz179tRf//rXOvtnZWWpX79+/vuDBw9WfHy8du7c6d8WGxvr/76yslKHDx/WmWeeqcTERG3ZsqXOc95+++01xiCsWrVKx44d00033aRDhw75bw6HQxkZGVqzZk2j57Rs2TKNGjVKY8aM8W+Li4vTHXfcod27d+vLL79sXuWEyHXXXefv9qntzjvvrHH/wgsv1OHDh1VUVCRJ/u60d955R16vt9mvGchxhYWFuuyyy/T1119r7dq1Gjp0aLNeo0ePHrr22mv9933dL5988ony8/Nr7HvHHXcoOjraf/+uu+5SVFSUli1bJqn574H9+/dr69atmjRpkhISEvzPd+mll2rgwIHNKjcQboQRoB4jR47Um2++qaNHj2rDhg2aOXOmiouLdf3119f54O7du3ed4zt37lyjv7+srEyzZs1SWlqaXC6XkpKS1K1bNx07dkyFhYV1ju/bt2+N+9u3b5ckXXLJJerWrVuN28qVK5scWLtnzx6dffbZdbafc845/setVPt8T1W7fjt37ixJ/vqdMGGCRo8erdtuu00pKSm68cYb9Ze//KXJgBHIcdOnT9fGjRv1/vvv69xzz232eZ155pl1xt30799fkuqMFzrrrLNq3I+Li1P37t39+zX3PeD7WdZ+Pkn1vgeAtoAxI0AjnE6nRo4cqZEjR6p///6aPHmyXn/9dc2ePdu/T0OzKIwx/u/vueceLVy4UNOnT1dmZqYSEhJks9l044031vvhd2pLiiT/Pq+++qpSU1Pr7B8V1bZ+lX0DYWvzeDz17l/7fE/VVP3Gxsbqww8/1Jo1a7R06VItX75cixcv1iWXXKKVK1c2eHwgx40fP16LFi3S448/rldeeUV2e/j/jzvd3gNAIHj3As00YsQISdXN4IFasmSJJk2apCeffNK/rby8XMeOHWvW8b5uoOTkZGVlZQX8+n369NG2bdvqbP/666/9jweqoZk2UnXrxandVD6haoGx2+0aO3asxo4dqzlz5uixxx7TAw88oDVr1jRaX8097pprrtFll12mW2+9VZ06ddL8+fObVa4dO3bIGFOjrr755htJqjPgePv27br44ov9948fP679+/friiuukNT894DvZ+lrSTlVfe8BoC2gmwaoZc2aNfX+V+/ru29JU7fD4ajznE8//XSDLQW1ZWdnKz4+Xo899pgqKyvrPH7w4MFGj7/iiiu0YcMG5eXl+beVlJTo2WefVXp6eovGEvhmANUXqPr1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ekpRUVFKSUmJiHo4VWJiovr3768dO3ZEzPtAkrp3766BAwfW2HbOOef4u6wi6e/jnj179P777+u2227zbwvXeyEiw4jT6dTw4cO1evVq/zav16vVq1crMzPTwpJZo2/fvkpNTa1RH0VFRfr444/bVX0YYzRt2jS99dZb+uCDD9S3b98ajw8fPlzR0dE16mHbtm3au3dvu6qH+ni9XlVUVERMHYwdO1afffaZtm7d6r+NGDFCN998s//7SKiHUx0/flzffvutunfvHjHvA0kaPXp0nSn+33zzjfr06SMpcv4+StLChQuVnJyscePG+beF7b0QtKGwp5lFixYZl8tlXnrpJfPll1+aO+64wyQmJpr8/HyrixYSxcXF5pNPPjGffPKJkWTmzJljPvnkE7Nnzx5jjDGPP/64SUxMNO+8847517/+ZcaPH2/69u1rysrKLC558Nx1110mISHBrF271uzfv99/Ky0t9e9z5513mt69e5sPPvjAbNq0yWRmZprMzEwLSx18M2bMMOvWrTO7du0y//rXv8yMGTOMzWYzK1euNMZERh3U59TZNMa0/3r47//+b7N27Vqza9cu849//MNkZWWZpKQkc+DAAWNM+z9/nw0bNpioqCjz6KOPmu3bt5v/+7//Mx06dDB/+tOf/PtEwt9Hj8djevfube6///46j4XjvRCxYcQYY55++mnTu3dv43Q6zahRo8w///lPq4sUMmvWrDGS6twmTZpkjKmevvbggw+alJQU43K5zNixY822bdusLXSQ1Xf+kszChQv9+5SVlZm7777bdO7c2XTo0MFce+21Zv/+/dYVOgSmTJli+vTpY5xOp+nWrZsZO3asP4gYExl1UJ/aYaS918OECRNM9+7djdPpND179jQTJkwwO3bs8D/e3s//VH/729/MoEGDjMvlMgMGDDDPPvtsjccj4e/jihUrjKR6zysc7wWbMcYEr50FAAAgMBE5ZgQAALQdhBEAAGApwggAALAUYQQAAFiKMAIAACxFGAEAAJYijAAAAEsRRgAAgKUIIwAAwFKEEQAAYCnCCAAAsNT/D0AC278nYjwFAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "def history_changed(board_history: np.ndarray) -> np.ndarray:\n", " return ~np.all(\n", @@ -1703,9 +1728,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 150, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(70, 10000)" + ] + }, + "execution_count": 150, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "def get_gamma_table(board_history, gamma_value: float):\n", " unchanged = history_changed(board_history)\n", @@ -1719,9 +1755,33 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 151, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.06513542, 0.02282552, 0.08712565, 0.05031332, 0.1214854 ,\n", + " 0.06314092, 0.14037841, 0.0759323 , 0.16290323, 0.08841437,\n", + " 0.18861413, 0.10899313, 0.19318856, 0.10964757, 0.20731361,\n", + " 0.13148691, 0.22510605, 0.13292382, 0.23539045, 0.12585808,\n", + " 0.23848829, 0.15176572, 0.26641954, 0.17761089, 0.28060736,\n", + " 0.16112694, 0.31286326, 0.17623532, 0.28714693, 0.16549503,\n", + " 0.33439531, 0.19199073, 0.29858216, 0.20875418, 0.33700629,\n", + " 0.1993395 , 0.36539974, 0.24731134, 0.36773293, 0.24404735,\n", + " 0.42837075, 0.28564118, 0.41564522, 0.28406984, 0.41368105,\n", + " 0.2341238 , 0.39596409, 0.26595149, 0.39103311, 0.38067557,\n", + " 0.47846166, 0.30745852, 0.4819794 , 0.38419044, 0.5611122 ,\n", + " 0.524575 , 0.546425 , 0.466925 , 0.601625 , 0.570625 ,\n", + " 0.570625 , 0.35625 , 0.36875 , 0.36875 , 0.38125 ,\n", + " 0.38125 , 0.38125 , 0.38125 , 0.38125 , 0.39715854])" + ] + }, + "execution_count": 151, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "def calculate_q_reword(\n", " board_history: np.ndarray,\n", @@ -1754,9 +1814,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 152, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'rewords' is not defined", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mNameError\u001B[0m Traceback (most recent call last)", + "Cell \u001B[1;32mIn[152], line 1\u001B[0m\n\u001B[1;32m----> 1\u001B[0m \u001B[43mrewords\u001B[49m\n\u001B[0;32m 2\u001B[0m evaluate_boards(boards)\u001B[38;5;241m.\u001B[39mshape\n", + "\u001B[1;31mNameError\u001B[0m: name 'rewords' is not defined" + ] + } + ], "source": [ "rewords\n", "evaluate_boards(boards).shape" diff --git a/poetry.lock b/poetry.lock index 7b48fe4..b59552a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -496,26 +496,6 @@ pyqt5 = ["pyqt5"] pyside6 = ["pyside6"] test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov", "pytest-timeout"] -[[package]] -name = "ipympl" -version = "0.9.3" -description = "Matplotlib Jupyter Extension" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -ipython = "<9" -ipython-genutils = "*" -ipywidgets = ">=7.6.0,<9" -matplotlib = ">=3.4.0,<4" -numpy = "*" -pillow = "*" -traitlets = "<6" - -[package.extras] -docs = ["Sphinx (>=1.5)", "myst-nb", "sphinx-book-theme", "sphinx-copybutton", "sphinx-thebe", "sphinx-togglebutton"] - [[package]] name = "ipython" version = "8.10.0" @@ -1216,6 +1196,22 @@ category = "main" optional = false python-versions = ">=3.7" +[[package]] +name = "pandas" +version = "1.5.3" +description = "Powerful data structures for data analysis, time series, and statistics" +category = "main" +optional = false +python-versions = ">=3.8" + +[package.dependencies] +numpy = {version = ">=1.21.0", markers = "python_version >= \"3.10\""} +python-dateutil = ">=2.8.1" +pytz = ">=2020.1" + +[package.extras] +test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"] + [[package]] name = "pandocfilters" version = "1.5.0" @@ -1586,6 +1582,24 @@ dev = ["click", "doit (>=0.36.0)", "flake8", "mypy", "pycodestyle", "pydevtool", doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +[[package]] +name = "seaborn" +version = "0.12.2" +description = "Statistical data visualization" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +matplotlib = ">=3.1,<3.6.1 || >3.6.1" +numpy = ">=1.17,<1.24.0 || >1.24.0" +pandas = ">=0.25" + +[package.extras] +dev = ["flake8", "flit", "mypy", "pandas-stubs", "pre-commit", "pytest", "pytest-cov", "pytest-xdist"] +docs = ["ipykernel", "nbconvert", "numpydoc", "pydata_sphinx_theme (==0.10.0rc2)", "pyyaml", "sphinx-copybutton", "sphinx-design", "sphinx-issues"] +stats = ["scipy (>=1.3)", "statsmodels (>=0.10)"] + [[package]] name = "send2trash" version = "1.8.0" @@ -1937,7 +1951,7 @@ test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] [metadata] lock-version = "1.1" python-versions = "3.10.*" -content-hash = "70ad716cf2af3d060355d2f419fa295002e6fa9d474842b892e0e886d9d9a3d9" +content-hash = "14a2ea88e851f7293e4c3b8f7b49cedf58dabc3340cba1644bd52db682d8d7d8" [metadata.files] aiofiles = [ @@ -2338,10 +2352,6 @@ ipykernel = [ {file = "ipykernel-6.21.2-py3-none-any.whl", hash = "sha256:430d00549b6aaf49bd0f5393150691edb1815afa62d457ee6b1a66b25cb17874"}, {file = "ipykernel-6.21.2.tar.gz", hash = "sha256:6e9213484e4ce1fb14267ee435e18f23cc3a0634e635b9fb4ed4677b84e0fdf8"}, ] -ipympl = [ - {file = "ipympl-0.9.3-py2.py3-none-any.whl", hash = "sha256:d113cd55891bafe9b27ef99b6dd111a87beb6bb2ae550c404292272103be8013"}, - {file = "ipympl-0.9.3.tar.gz", hash = "sha256:49bab75c05673a6881d1aaec5d8ac81d4624f73d292d154c5fb7096f10236a2b"}, -] ipython = [ {file = "ipython-8.10.0-py3-none-any.whl", hash = "sha256:b38c31e8fc7eff642fc7c597061fff462537cf2314e3225a19c906b7b0d8a345"}, {file = "ipython-8.10.0.tar.gz", hash = "sha256:b13a1d6c1f5818bd388db53b7107d17454129a70de2b87481d555daede5eb49e"}, @@ -2763,6 +2773,35 @@ packaging = [ {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, ] +pandas = [ + {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3749077d86e3a2f0ed51367f30bf5b82e131cc0f14260c4d3e499186fccc4406"}, + {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:972d8a45395f2a2d26733eb8d0f629b2f90bebe8e8eddbb8829b180c09639572"}, + {file = "pandas-1.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50869a35cbb0f2e0cd5ec04b191e7b12ed688874bd05dd777c19b28cbea90996"}, + {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3ac844a0fe00bfaeb2c9b51ab1424e5c8744f89860b138434a363b1f620f354"}, + {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a0a56cef15fd1586726dace5616db75ebcfec9179a3a55e78f72c5639fa2a23"}, + {file = "pandas-1.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:478ff646ca42b20376e4ed3fa2e8d7341e8a63105586efe54fa2508ee087f328"}, + {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6973549c01ca91ec96199e940495219c887ea815b2083722821f1d7abfa2b4dc"}, + {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c39a8da13cede5adcd3be1182883aea1c925476f4e84b2807a46e2775306305d"}, + {file = "pandas-1.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc"}, + {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae"}, + {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f2b952406a1588ad4cad5b3f55f520e82e902388a6d5a4a91baa8d38d23c7f6"}, + {file = "pandas-1.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:bc4c368f42b551bf72fac35c5128963a171b40dce866fb066540eeaf46faa003"}, + {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:14e45300521902689a81f3f41386dc86f19b8ba8dd5ac5a3c7010ef8d2932813"}, + {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9842b6f4b8479e41968eced654487258ed81df7d1c9b7b870ceea24ed9459b31"}, + {file = "pandas-1.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:26d9c71772c7afb9d5046e6e9cf42d83dd147b5cf5bcb9d97252077118543792"}, + {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fbcb19d6fceb9e946b3e23258757c7b225ba450990d9ed63ccceeb8cae609f7"}, + {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:565fa34a5434d38e9d250af3c12ff931abaf88050551d9fbcdfafca50d62babf"}, + {file = "pandas-1.5.3-cp38-cp38-win32.whl", hash = "sha256:87bd9c03da1ac870a6d2c8902a0e1fd4267ca00f13bc494c9e5a9020920e1d51"}, + {file = "pandas-1.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:41179ce559943d83a9b4bbacb736b04c928b095b5f25dd2b7389eda08f46f373"}, + {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c74a62747864ed568f5a82a49a23a8d7fe171d0c69038b38cedf0976831296fa"}, + {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c4c00e0b0597c8e4f59e8d461f797e5d70b4d025880516a8261b2817c47759ee"}, + {file = "pandas-1.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a50d9a4336a9621cab7b8eb3fb11adb82de58f9b91d84c2cd526576b881a0c5a"}, + {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd05f7783b3274aa206a1af06f0ceed3f9b412cf665b7247eacd83be41cf7bf0"}, + {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f69c4029613de47816b1bb30ff5ac778686688751a5e9c99ad8c7031f6508e5"}, + {file = "pandas-1.5.3-cp39-cp39-win32.whl", hash = "sha256:7cec0bee9f294e5de5bbfc14d0573f65526071029d036b753ee6507d2a21480a"}, + {file = "pandas-1.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:dfd681c5dc216037e0b0a2c821f5ed99ba9f03ebcf119c7dac0e9a7b960b9ec9"}, + {file = "pandas-1.5.3.tar.gz", hash = "sha256:74a3fd7e5a7ec052f183273dc7b0acd3a863edf7520f5d3a1765c04ffdb3b0b1"}, +] pandocfilters = [ {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"}, {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"}, @@ -3155,6 +3194,10 @@ scipy = [ {file = "scipy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:954ff69d2d1bf666b794c1d7216e0a746c9d9289096a64ab3355a17c7c59db54"}, {file = "scipy-1.10.0.tar.gz", hash = "sha256:c8b3cbc636a87a89b770c6afc999baa6bcbb01691b5ccbbc1b1791c7c0a07540"}, ] +seaborn = [ + {file = "seaborn-0.12.2-py3-none-any.whl", hash = "sha256:ebf15355a4dba46037dfd65b7350f014ceb1f13c05e814eda2c9f5fd731afc08"}, + {file = "seaborn-0.12.2.tar.gz", hash = "sha256:374645f36509d0dcab895cba5b47daf0586f77bfe3b36c97c607db7da5be0139"}, +] send2trash = [ {file = "Send2Trash-1.8.0-py3-none-any.whl", hash = "sha256:f20eaadfdb517eaca5ce077640cb261c7d2698385a6a0f072a4a5447fd49fa08"}, {file = "Send2Trash-1.8.0.tar.gz", hash = "sha256:d2c24762fd3759860a0aff155e45871447ea58d2be6bdd39b5c8f966a0c99c2d"}, diff --git a/pyproject.toml b/pyproject.toml index c301d16..6c9299e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,6 +23,7 @@ torchaudio = "^0.13.1" gym = "^0.26.2" kdepy = "^1.1.0" plotly = "^5.13.0" +seaborn = "^0.12.2" [tool.poetry.group.build.dependencies] blackcellmagic = "^0.0.3"