File size: 34,757 Bytes
2bbea32 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 619
},
"id": "j-akFteg8_ai",
"outputId": "4398c11a-990c-45ed-f0a7-32dc210b75b6"
},
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.10/dist-packages/torch/functional.py:534: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at ../aten/src/ATen/native/TensorShape.cpp:3595.)\n",
" return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined]\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 800x600 with 2 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAApcAAAIjCAYAAABWNzDyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABbVUlEQVR4nO3de1xVZb7H8e8GBFQERAW8YGI5iXcFRcxCgwkvzWRSqdmkRuqUmIpW2qRWTqHl/VJkXrJJ02y6mJUnBi+NipdQysy0aSxN3ZgpkJrc9jp/OO6ZHaCAa8NGP+95rTPwrGf91rPWOS/5nd9az7MshmEYAgAAAEzgVtUDAAAAwLWD5BIAAACmIbkEAACAaUguAQAAYBqSSwAAAJiG5BIAAACmIbkEAACAaUguAQAAYBqSSwAAAJiG5BJAqXr06KEePXpU9TCu2vfffy+LxaLXX3+9zH1nzpzp/IEBwDWI5BK4Brz++uuyWCz6/PPPS9zfo0cPtWnTplLGUlRUJF9fX911113F9s2ZM0cWi0VDhgwptm/KlCmyWCw6dOhQZQxTH3/8sZ555plKORcAXE9ILgGYyt3dXV27dtX27duL7du2bZs8PDy0bdu2EvcFBgbqd7/7XWUMUx9//LGeffbZSjkXAFxPSC4BmK579+46deqUDhw44NC+bds23Xffffruu+9ktVrt7YWFhdq5c6duueWWyh4qAMBkJJfAdaiwsFDTpk3TjTfeKC8vLzVr1kxPPfWU8vLyrnjsyZMnlZCQoKCgIHl7e6t9+/ZasWKFQ5/u3btLkkOF8t///resVqsSExPl7e3tsC8zM1Pnzp2zHydJ33zzje655x4FBATI29tbERERWrduncN5Tp8+rQkTJqht27by8fGRr6+vevfurS+++OKy1zB06FAtWrRIkmSxWOzbby1evNh+jzp37qzdu3df8f4AwPXOo6oHAMA8OTk5OnXqVLH2goICh98ffvhhrVixQvfcc4/Gjx+vnTt3Kjk5WQcOHNB7771Xavxff/1VPXr00L/+9S8lJiYqNDRUa9eu1dChQ5Wdna0xY8ZIkrp27SoPDw9t3bpVDz/8sKSLiWbt2rXVuXNnRUREaNu2bYqPj7fvk/6blO7fv1+33HKLGjdurIkTJ6p27dp6++231a9fP/3973/X3XffLeliwvr+++/r3nvvVWhoqLKysvTqq68qOjpaX3/9tRo1alTidYwcOVLHjx9Xamqq/va3v5XYZ9WqVfrll180cuRIWSwWvfjii+rfv7/+/e9/q0aNGqXeIwC47hkAqr3ly5cbki67tW7d2jAMw8jMzDQkGQ8//LBDjAkTJhiSjI0bN9rboqOjjejoaPvvc+fONSQZb775pr0tPz/fiIqKMnx8fIzc3Fx7e+fOnY0bb7zR/vvIkSONnj17GoZhGE888YTRuXNn+7577rnHqFWrllFQUGAYhmHExMQYbdu2NS5cuGDvY7PZjG7duhktWrSwt124cMEoKipyuI7Dhw8bXl5exnPPPefQJslYvny5vW3UqFFGSf8EXupbr1494/Tp0/b2Dz74wJBkfPjhh8WOAQD8F4/FgWvIokWLlJqaWmxr166dvc/HH38sSUpKSnI4dvz48ZKkjz76qNT4H3/8sYKDgzVo0CB7W40aNfTYY4/p7Nmz2rJli729e/fuDu9Wbtu2Td26dZMk3XLLLdq7d6/Onz9v3xcZGSkPDw+dPn1aGzdu1H333adffvlFp06d0qlTp/Tzzz8rLi5O3377rY4dOyZJ8vLykpvbxX/GioqK9PPPP8vHx0c333yz9uzZU7Gb+B8DBgxQ3bp17b/feuutki5WSwEApeOxOHAN6dKliyIiIoq1161b1/64/IcffpCbm5tuuukmhz7BwcHy9/fXDz/8UGr8H374QS1atLAndJeEhYXZ91/SvXt3zZkzR9u2bVNMTIz279+vF198UZLUrVs3FRYWateuXbrhhht04sQJ++Pzf/3rXzIMQ5MnT9bkyZNLHMfJkyfVuHFj2Ww2zZs3Ty+//LIOHz6soqIie5969eqVeh1l0bRpU4ffLyWaZ86cuaq4AHCtI7kErlMlTWAx06X3J7du3apatWpJkqKioiRJ9evXV4sWLbR161YdPXrUob/NZpMkTZgwQXFxcSXGvpQYv/DCC5o8ebIeeughTZs2TQEBAXJzc9PYsWPtcSrK3d29xHbDMK4qLgBc60gugevMDTfcIJvNpm+//dZecZSkrKwsZWdn64YbbrjssV9++aVsNptD9fKbb76x778kMDDQnkDWrl1brVq1kr+/v31/t27dtG3bNv34449yd3e3J57NmzeXdPFxe2xs7GWv5Z133lHPnj21dOlSh/bs7GzVr1//ssc6O7kGgOsV71wC15k+ffpIkubOnevQPnv2bElS3759L3us1WrVmjVr7G2FhYVasGCBfHx8FB0d7dC/e/fuyszM1Keffmp/3/KSbt26KT09Xf/85z/Vrl071alTR9LFpLRHjx569dVXdeLEiWJj+Omnn+w/u7u7F6skrl271v5O5uXUrl1b0sVEFABgHiqXwHWmffv2GjJkiBYvXqzs7GxFR0dr165dWrFihfr166eePXuWeuyIESP06quvaujQocrIyFCzZs30zjvvaNu2bZo7d649Qbyke/fuWr58uXbv3q1Ro0Y57OvWrZtycnKUk5Oj0aNHO+xbtGiRunfvrrZt22r48OFq3ry5srKylJ6erh9//NG+juWdd96p5557TsOGDVO3bt20b98+rVy50l79vJzw8HBJ0mOPPaa4uDi5u7tr4MCBZbqHAIDSkVwC16ElS5aoefPmev311/Xee+8pODhYkyZN0tSpUy97XM2aNbV582ZNnDhRK1asUG5urm6++WYtX75cQ4cOLdb/fxdF/23lsnXr1vL391d2drZDP0lq1aqVPv/8cz377LN6/fXX9fPPPyswMFAdO3bUlClT7P2eeuopnTt3TqtWrdKaNWvUqVMnffTRR5o4ceIV70H//v01evRorV69Wm+++aYMwyC5BAATWAzeTgcAAIBJeOcSAAAApiG5BAAAgGlILgEAAGAakksAAIBSLFq0SM2aNZO3t7ciIyO1a9euUvvu379f8fHxatasmSwWS7El38oa88KFCxo1apTq1asnHx8fxcfHKysry8zLciqSSwAAgBKsWbNGSUlJmjp1qvbs2aP27dsrLi5OJ0+eLLH/+fPn1bx5c02fPl3BwcEVjjlu3Dh9+OGHWrt2rbZs2aLjx4+rf//+TrlGZ2C2OAAAQAkiIyPVuXNnLVy4UNLFz9OGhIRo9OjRV1zyrFmzZho7dqzGjh1brpg5OTlq0KCBVq1apXvuuUfSxa+ghYWFKT09XV27djX/Qk12za9zabPZdPz4cdWpU4fPvQEAcAWGYeiXX35Ro0aNHD7zWlkuXLig/Px8p8Q2DKNYLuDl5SUvL69iffPz85WRkaFJkybZ29zc3BQbG6v09PQKnb8sMTMyMlRQUODw+duWLVuqadOmJJeu4vjx4woJCanqYQAAUK0cPXpUTZo0qdRzXrhwQc1CfZRlLXJKfB8fH509e9ah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ThaLRWPHjtVf//pXtWjRwr4UUaNGjdSvX7+qHDoAAHASV1lE/VqXlpamW2+99bJ9fH19tWnTpnLFrdLH4p07d9Z7772nt956S23atNG0adM0d+5cDR482N7niSee0OjRozVixAh17txZZ8+e1YYNG8q0xiUAAKh+DMM5GxxNnTpV2dnZxdpzc3N1++23VzhulX/+8c4779Sdd95Z6n6LxaLnnntOzz33XCWOCgAA4Nq2ZcsW5efnF2u/cOGC/vnPf1Y4bpUnlwAAAP+Lx+LO9eWXX0q6+LGar7/+2mF5x6KiIm3YsEGNGzeucHySSwAAgOtIhw4dZLFYZLFYSnz8XbNmTS1YsKDC8UkuAQCAa7FZLm5mx4Ski19ANAxDzZs3165duxxmiXt6eiowMFDu7u4Vjk9yCQAAcB25tOSjzWZzSnySSwAA4FJ459J51q1bp969e6tGjRpat27dZfv+8Y9/rNA5SC4BAACuE/369ZPValVgYOBl1wy3WCwqKiqq0DlILgEAgEuhcuk8//sonMfiAADgukByWXWys7Pl7+9/VTGq9As9AAAAqBozZszQmjVr7L/fe++9CggIUOPGjfXFF19UOC7JJQAAcDEWe/XSrE2icvlbKSkpCgkJkSSlpqbqH//4hzZs2KDevXvr8ccfr3BcHosDAABch6xWqz25XL9+ve677z7dcccdatasmSIjIyscl8olAABwLYbFORsc1K1bV0ePHpUkbdiwQbGxsZIufhayojPFJSqXAAAA16X+/fvr/vvvV4sWLfTzzz+rd+/ekqS9e/fqpptuqnBckksAAOBSDNvFzeyYcDRnzhw1a9ZMR48e1YsvvigfHx9J0okTJ/Too49WOC7JJQAAwHWoRo0amjBhQrH2cePGXVVckksAAOBSWOey8nz77bfatGmTTp48WWxR9SlTplQoJsklAABwKSSXleO1117TI488ovr16ys4OFgWy3/vkcViIbkEAABA2f31r3/V888/ryeffNLUuCSXAADApVC5rBxnzpzRvffea3pc1rkEAAC4Dt1777369NNPTY9L5RIAALgUwzC/0mgYpoa7Jtx0002aPHmyduzYobZt26pGjRoO+x977LEKxSW5BAAAuA4tXrxYPj4+2rJli7Zs2eKwz2KxkFwCAIBrhDM+18g7l8UcPnzYKXHL/c7lhg0btHXrVvvvixYtUocOHXT//ffrzJkzpg4OAAAAzpWfn6+DBw+qsLDQlHjlTi4ff/xx5ebmSpL27dun8ePHq0+fPjp8+LCSkpJMGRQAALh+XZotbvYGR+fPn1dCQoJq1aql1q1b68iRI5Kk0aNHa/r06RWOW+7k8vDhw2rVqpUk6e9//7vuvPNOvfDCC1q0aJE++eSTCg8EAABAIrmsLJMmTdIXX3yhzZs3y9vb294eGxurNWvWVDhuud+59PT01Pnz5yVJ//jHP/Tggw9KkgICAuwVTQAAALi2999/X2vWrFHXrl0dvs7TunVrfffddxWOW+7ksnv37kpKStItt9yiXbt22TPbQ4cOqUmTJhUeCAAAgCQZtoub2THh6KefflJgYGCx9nPnzjkkm+VV7sfiCxculIeHh9555x298soraty4sSTpk08+Ua9evSo8EAAAAFSeiIgIffTRR/bfLyWUS5YsUVRUVIXjlrty2bRpU61fv75Y+5w5cyo8CAAAgEv4/GPleOGFF9S7d299/fXXKiws1Lx58/T1119r+/btxda9LI8yVS7/913K3Nzcy24AAABwfd27d1dmZqYKCwvVtm1bffrppwoMDFR6errCw8MrHLdMlcu6devqxIkTCgwMlL+/f4nP4Q3DkMViUVFRUYUHAwAAQOWy8tx444167bXXTI1ZpuRy48aNCggIsP98NS95AgAAoOq5u7vbi4f/6+eff1ZgYGCFC4ZlSi6jo6PtP/fo0aNCJwIAACgLKpeVwzCMEtvz8vLk6elZ4bjlntDzzDPPaMqUKXJzc3xdMycnR3/+85/11ltvVXgwAAAAcK758+dLujg7fMmSJfLx8bHvKyoq0meffaaWLVtWOH65k8ulS5fq008/1ZtvvqnmzZtLkjZv3qwHH3xQwcHBFR4IAACAROXS2S6t8GMYhlJSUuTu7m7f5+npqWbNmiklJaXC8cudXH755ZcaOXKkOnTooFmzZunQoUOaN2+eHn/8cT377LMVHggAAIBEculshw8fliT17NlT7777rurWrWtq/HInl3Xr1tXbb7+tp556SiNHjpSHh4c++eQTxcTEmDowAAAAOM+mTZucErfcX+iRpAULFmjevHkaNGiQmjdvrscee0xffPGF2WMDAADXoUuVS7O3ili0aJGaNWsmb29vRUZGateuXZftv3btWrVs2VLe3t5q27at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cqSlpemPf/yjmjdvrm+++UZt2rTR999/L8Mw1KlTpwrHLfNSRL169dKTTz6phQsX6t133yWxBAAAqMYmTZqkCRMmaN++ffL29tbf//53HT16VNHR0br33nsrHLfMlcuioiJ9+eWXatKkSYVPBgAAcCVULivHgQMH9NZbb0mSPDw89Ouvv8rHx0fPPfec7rrrLj3yyCMVilvm5DI1NbVCJwAAACgPksvKUbt2bft7lg0bNtR3332n1q1bS5JOnTpV4bjMxgEAALgOde3aVVu3blVYWJj69Omj8ePHa9++fXr33XfVtWvXCscluQQAAC6FymXlmD17ts6ePStJevbZZ3X27FmtWbNGLVq0qPBMcYnkEgAA4LrUvHlz+8+1a9dWSkqKKXFJLgEAgEuhclm58vPzdfLkSdlsNof2pk2bVigeySUAAMB16NChQ0pISND27dsd2g3DkMViUVFRUYXiklwCAACXYhgWGTYql842bNgweXh4aP369WrYsKEsFnPuEcklAADAdSgzM1MZGRlq2bKlqXFJLgEAgEvhncvK0apVq6taz7I0Zf78IwAAQGUwDOdscDRjxgw98cQT2rx5s37++Wfl5uY6bBVF5RIAAOA6FBsbK0mKiYlxaGdCDwAAuKbYDItsJj/GNjvetWDTpk1OiUtyCQAAcB2Kjo52SlySSwAA4FKY0FM5vvzyyxLbLRaLvL291bRpU3l5eZU7LsklAADAdahDhw6XXduyRo0aGjBggF599VV5e3uXOS6zxQEAgGv5T+XSzE1ULot577331KJFCy1evFiZmZnKzMzU4sWLdfPNN2vVqlVaunSpNm7cqKeffrpccalcAgAAXIeef/55zZs3T3Fxcfa2tm3bqkmTJpo8ebJ27dql2rVra/z48Zo5c2aZ45JcAgAAl8I7l5Vj3759uuGGG4q133DDDdq3b5+ki4/OT5w4Ua64PBYHAAAuxexH4s5IVq8FLVu21PTp05Wfn29vKygo0PTp0+2fhDx27JiCgoLKFddlksvp06fLYrFo7Nix9rYLFy5o1KhRqlevnnx8fBQfH6+srKyqGyQAAMA1YtGiRVq/fr2aNGmi2NhYxcbGqkmTJlq/fr1eeeUVSdK///1vPfroo+WK6xKPxXfv3q1XX31V7dq1c2gfN26cPvroI61du1Z+fn5KTExU//79tW3btioaKQAA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t6WkpKhjx44aPny4JOm2225Tx44dtW7dujLH9fPz06effqrDhw8rPDxc48eP15QpU6p0GSJJshhVudYAAAAArinXTeUSAAAAzkdyCQAAANOQXAIAAMA0JJcAAAAwzXWTXC5atEjNmjWTt7e3IiMjHZYDQMUlJyerc+fOqlOnjgIDA9WvXz8dPHjQoc+FCxc0atQo1atXTz4+PoqPjy+26CsqZvr06bJYLBo7dqy9jfttvmPHjumBBx5QvXr1VLNmTbVt21aff/65fb9hGJoyZYoaNmyomjVrKjY2Vt9++20Vjrj6Kioq0uTJkxUaGqqaNWvqxhtv1LRp0xy+c839BlzbdZFcrlmzRklJSZo6dar27Nmj9u3bKy4urtjK9yi/LVu2aNSoUdqxY4dSU1NVUFCgO+64Q+fOnbP3GTdunD788EOtXbtWW7Zs0fHjx9W/f/8qHPW1Yffu3Xr11VfVrl07h3but7nOnDmjW265RTVq1NAnn3yir7/+WrNmzXJYoPjFF1/U/PnzlZKSop07d6p27dqKi4vThQsXqnDk1dOMGTP0yiuvaOHChTpw4IBmzJihF198UQsWLLD34X4DLs64DnTp0sUYNWqU/feioiKjUaNGRnJychWO6tp08uRJQ5KxZcsWwzAMIzs726hRo4axdu1ae58DBw4Ykoz09PSqGma198svvxgtWrQwUlNTjejoaGPMmDGGYXC/neHJJ580unfvXup+m81mBAcHGy+99JK9LTs72/Dy8jLeeuutyhjiNaVv377GQw895NDWv39/Y/DgwYZhcL+B6uCar1zm5+crIyNDsbGx9jY3NzfFxsYqPT29Ckd2bcrJyZEkBQQESJIyMjJUUFDgcP9btmyppk2bcv+vwqhRo9S3b1+H+ypxv51h3bp1ioiI0L333qvAwEB17NhRr732mn3/4cOHZbVaHe65n5+fIiMjuecV0K1bN6WlpenQoUOSpC+++EJbt25V7969JXG/gerA5b8tfrVOnTqloqKiYt8iDwoK0jfffFNFo7o22Ww2jR07VrfccovatGkj6eLnrTw9PeXv7+/QNygoSFartQpGWf2tXr1ae/bs0e7du4vt436b79///rdeeeUVJSUl6amnntLu3bv12GOPydPTU0OGDLHf15L+jeGel9/EiROVm5urli1byt3dXUVFRXr++ec1ePBgSeJ+A9XANZ9covKMGjVKX331lbZu3VrVQ7lmHT16VGPGjFFqaqq8vb2rejjXBZvNpoiICL3wwguSpI4dO+qrr75SSkqKhgwZUsWju/a8/fbbWrlypVatWqXWrVsrMzNTY8eOVaNGjbjfQDVxzT8Wr1+/vtzd3YvNls3KylJwcHAVjerak5iYqPXr12vTpk1q0qSJvT04OFj5+fnKzs526M/9r5iMjAydPHlSnTp1koeHhzw8PLRlyxbNnz9fHh4eCgoK4n6brGHDhmrVqpVDW1hYmI4cOSJJ9vvKvzHmePzxxzVx4kQNHDhQbdu21Z/+9CeNGzdOycnJkrjfQHVwzSeXnp6eCg8PV1pamr3NZrMpLS1NUVFRVTiya4NhGEpMTNR7772njRs3KjQ01GF/eHi4atSo4XD/Dx48qCNHjnD/KyAmJkb79u1TZmamfYuIiNDgwYPtP3O/zXXLLbcUW17r0KFDuuGGGyRJoaGhCg4Odrjnubm52rlzJ/e8As6fPy83N8c/Te7u7rLZbJK430C1UNUziirD6tWrDS8vL+P11183vv76a2PEiBGGv7+/YbVaq3po1d4jjzxi+Pn5GZs3bzZOnDhh386fP2/v8+c//9lo2rSpsXHjRuPzzz83oqKijKioqCoc9bXlf2eLGwb322y7du0yPDw8jOeff9749ttvjZUrVxq1atUy3nzzTXuf6dOnG/7+/sYHH3xgfPnll8Zdd91lhIaGGr/++msVjrx6GjJkiNG4cWNj/fr1xuHDh413333XqF+/vvHEE0/Y+3C/Add2XSSXhmEYCxYsMJo2bWp4enoaXbp0MXbs2FHVQ7omSCpxW758ub3Pr7/+ajz66KNG3bp1jVq1ahl33323ceLEiaob9DXmt8kl99t8H374odGmTRvDy8vLaNmypbF48WKH/TabzZg8ebIRFBRkeHl5GTExMcbBgweraLTVW25urjFmzBijadOmhre3t9G8eXPjL3/5i5GXl2fvw/0GXJvFMP7nswcAAADAVbjm37kEAABA5SG5BAAAgGlILgEAAGAakksAAACYhuQSAAAApiG5BAAAgGlILgEAAGAakksAAACYhuQSQLXw/fffy2KxKDMzs6qHAgC4DJJLAGVSVFSkbt26qX///g7tOTk5CgkJ0V/+8pcrxnjrrbfk7u6uUaNGlfv8ISEhOnHihNq0aVPuYwEAlYfPPwIos0OHDqlDhw567bXXNHjwYEnSgw8+qC+++EK7d++Wp6fnZY+PjY1V586d9eqrr+r48ePy9vaujGEDACoRlUsAZfa73/1O06dP1+jRo3XixAl98MEHWr16td54440rJpaHDx/W9u3bNXHiRP3ud7/Tu+++67D/oYceUrt27ZSXlydJys/PV8eOHfXggw9KKv5Y/MyZMxo8eLAaNGigmjVrqkWLFlq+fLn5Fw0AKBeSSwDlMnr0aLVv315/+tOfNGLECE2ZMkXt27e/4nHLly9X37595efnpwceeEBLly512D9//nydO3dOEydOlCT95S9/UXZ2thYuXFhivMmTJ+vrr7/WJ598ogMHDuiVV15R/fr1r/4CAQBXxaOqBwCgerFYLHrllVcUFhamtm3b2pPBy7HZbHr99de1YMECSdLAgQM1fvx4HT58WKGhoZIkHx8fvfnmm4qOjladOnU0d+5cbdq0Sb6+viXGPHLkiDp27KiIiAhJUrNmzcy5QADAVaFyCaDcli1bplq1aunw4cP68ccfr9g/NTVV586dU58+fSRJ9evX1+9//3stW7bMoV9UVJQmTJigadOmafz48erevXupMR955BGtXr1aHTp00BNPPKHt27df3UUBAExBcgmgXLZv3645c+Zo/fr16tKlixISEnSleYFLly7V6dOnVbNmTXl4eMjDw0Mff/yxVqxYIZvNZu9ns9m0bds2ubu761//+tdlY/bu3Vs//PCDxo0bp+PHjysmJkYTJkww5RoBABVHcgmgzM6fP6+hQ4fqkUceUc+ePbV06VLt2rVLKSkppR7z888/2yf+ZGZm2re9e/fqzJkz+vTTT+19X3rpJX3zzTfasmWLNmzYcMUJOg0aNNCQIUP05ptvau7cuVq8eLFp1woAqBjeuQRQZpMmTZJhGJo+fbqki+85zpw5UxMmTFDv3r1LfO/xb3/7m+rVq6f77rtPFovFYV+fPn20dOlS9erVS3v37tWUKVP0zjvv6JZbbtHs2bM1ZswYRUdHq3nz5sXiTpkyReHh4WrdurXy8vK0fv16hYWFOeW6AQBlR+USQJls2bJFixYt0vLly1WrVi17+8iRI9WtW7dSH48vW7ZMd999d7HEUpLi4+O1bt06/fjjj3rggQc0dOhQ/eEPf5AkjRgxQj179tSf/vQnFRUVFTvW09NTkyZNUrt27XTbbbfJ3d1dq1evNvGKAQAVwSLqAAAAMA2VSwAAAJiG5BIAAACmIbkEAACAaUguAQAAYBqSSwAAAJiG5BIAAACmIbkEAACAaUguAQAAYBqSSwAAAJiG5BIAAACmIbkEAACAaf4fKIx7znU1CWsAAAAASUVORK5CYII=\n"
},
"metadata": {}
}
],
"source": [
"import torch\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib.animation import FuncAnimation\n",
"\n",
"waveform_size = 100\n",
"frequency = 0.5\n",
"amplitude = 5.0\n",
"direction_angle = np.pi / 4\n",
"total_time_hours = 24\n",
"time_steps = 240\n",
"\n",
"time_interval = total_time_hours / time_steps\n",
"\n",
"x = torch.linspace(-waveform_size // 2, waveform_size // 2, waveform_size)\n",
"y = torch.linspace(-waveform_size // 2, waveform_size // 2, waveform_size)\n",
"X, Y = torch.meshgrid(x, y)\n",
"\n",
"def infinite_waveform(t):\n",
" return amplitude * torch.cos(2 * np.pi * frequency * (X * torch.cos(direction) + Y * torch.sin(direction_angle)) + 2 * np.pi * t)\n",
"\n",
"wealth_data = torch.rand(waveform_size, waveform_size) * 100\n",
"total_wealth_energy = wealth_data ** 2\n",
"\n",
"noise_mask = torch.randn(waveform_size, waveform_size) * 0.1\n",
"protected_wealth_energy = total_wealth_energy + noise_mask\n",
"\n",
"wealth_energy_per_time = protected_wealth_energy / time_steps\n",
"\n",
"fig, ax = plt.subplots(figsize=(8, 6))\n",
"signal_plot = ax.imshow(torch.zeros(waveform_size, waveform_size).numpy(), cmap='plasma', origin='lower')\n",
"plt.colorbar(signal_plot, ax=ax, label='Signal Intensity')\n",
"ax.set_title(\"HoloWealth\")\n",
"ax.set_xlabel('X Axis')\n",
"ax.set_ylabel('Y Axis')\n",
"\n",
"def update(t):\n",
" wave = infinite_waveform(t * time_interval)\n",
" combined_signal = wave * wealth_energy_per_time\n",
" signal_plot.set_data(combined_signal.numpy())\n",
" ax.set_title(f\"Signal at Time Step: {t}/{time_steps}\")\n",
"\n",
"ani = FuncAnimation(fig, update, frames=time_steps, interval=100, repeat=False)\n",
"\n",
"plt.show()"
]
}
]
} |