diff --git a/doc/notebooks/01_tutorial_getting_started.ipynb b/doc/notebooks/01_tutorial_getting_started.ipynb index 564f7e0174744ecdd7be2574a313aae2534c4d74..5cb9acd727844ce4d4213780ef455c8dd14d0b05 100644 --- a/doc/notebooks/01_tutorial_getting_started.ipynb +++ b/doc/notebooks/01_tutorial_getting_started.ipynb @@ -6,7 +6,11 @@ "metadata": {}, "outputs": [], "source": [ - "from pystencils.session import *" + "import pystencils as ps\n", + "from pystencils import plot as plt\n", + "\n", + "import numpy as np\n", + "import sympy as sp" ] }, { @@ -66,7 +70,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "7.96 ms ± 797 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" + "4.65 ms ± 22.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" ] } ], @@ -89,9 +93,12 @@ "outputs": [ { "data": { - "text/plain": " src_E src_N src_S src_W\ndst_C := ───── + ───── + ───── + ─────\n 4 4 4 4 ", - "image/png": "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\n", - "text/latex": "$\\displaystyle {{dst}_{(0,0)}} \\leftarrow \\frac{{{src}_{(1,0)}}}{4} + \\frac{{{src}_{(0,1)}}}{4} + \\frac{{{src}_{(0,-1)}}}{4} + \\frac{{{src}_{(-1,0)}}}{4}$" + "text/latex": [ + "$\\displaystyle {dst}_{(0,0)} \\leftarrow \\frac{{src}_{(1,0)}}{4} + \\frac{{src}_{(0,1)}}{4} + \\frac{{src}_{(0,-1)}}{4} + \\frac{{src}_{(-1,0)}}{4}$" + ], + "text/plain": [ + "Assignment(dst_C, src_E/4 + src_N/4 + src_S/4 + src_W/4)" + ] }, "execution_count": 5, "metadata": {}, @@ -113,8 +120,10 @@ "outputs": [ { "data": { - "text/plain": "<Figure size 216x216 with 1 Axes>", - "image/png": "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\n" + "image/png": "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\n", + "text/plain": [ + "<Figure size 216x216 with 1 Axes>" + ] }, "metadata": { "needs_background": "light" @@ -172,7 +181,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.76 ms ± 74 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n" + "951 µs ± 15 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" ] } ], @@ -224,7 +233,9 @@ "outputs": [ { "data": { - "text/plain": "sympy.core.symbol.Symbol" + "text/plain": [ + "sympy.core.symbol.Symbol" + ] }, "execution_count": 11, "metadata": {}, @@ -251,9 +262,14 @@ "outputs": [ { "data": { - "text/plain": " 2 2\nx â‹…(x + y + 5) + x ", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKoAAAAYCAYAAABqdGb8AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFRElEQVRoBe2b63HUMBDHDyYFAKmA0AGPDpIOklBBoAMYvuVbBjoIVACkg4QK8ugAOoC5DsL/ZySNzpb8kGXd3eCd0UnW8+/d1e5KTh7c398vhtLp6ekjjflgxu2Z/ET1y6Fzzf1nDlgOtOnVju00MP+oSd/aMSqfq3yr9MzWzfnMgQQORPXqYcJkDHkj5dz3xn5UeU91z726uThzYCgHonqVqqhY05uhKOr9pdg2bKg3zc8jOLDFfI3qVZKiihGflfx4lAV+qe6uL3/V9536zha4L8NMP/GtwTPVPVLyNz3eDf5uFQlzVK9SY1THAE0O4w6VXrjKjoLG0H9X+aeOrnNzkwM/xDcOs9YoUIYc/9V+pfRcCVf6+V/zdv2CX4idXiVZVPvKmoxdTHz6QmXfwtoujVz9YOwH5e8bjXNFHw78USd4jSDh5YVSg//iL0bgreG3ittDwtzQq2SLaiZ7r/wAFphn8l8dLEGxuSUoQsLDoQ9XuBGWJQOeO81x1JN58Bl+uxuanuNctwx43Vx9CloPJW3oVZJFNZPBhHOVcTHsbiwku72LjtW/pNJgdUibQsXwGD7D7zHvXxIvShrUq1SLyp0pL0DuSAxp3blqJ+bosrhuvrmQhQPw+1ippHFIBR7VK6eoZte9MSu8Un6ihIa/NnXX6kM8tFD+2NQNzQgTrmKDhmCIzZGz3sPDh4xbPTthm7Yvyvu64WzQtCZywlDsKiGjM9XZw5UeVwh+w3eHfaV14gfDp9F65bt+vgp8Ign7tdIXpX0949JhCrHOWHqpCX62TFICQ8vyjSYOffDjUqn+/lgpPERpQhbfjKyQDYlNRCweIviNMq+Lssi0UlS9JBrvC2KpZ4Rgd+GTWrsekwgmB+PYghh6ARce4m42LIRFquNu9Q7VqAl+hOtACflUpDKuHasZO6CCey2KKmzZ9Mq6/hvzwtXL64c7OU6XFUOU53JvKLxjsl3M5KMwCCOCClkV1lyoPRQ/t52g/Q8YWM8z5vGItep1rnkCPG7uQAFlxftxu1E/A/CMgWilifCOkqkPuFJUgazHNyHB+OOyl8di0PiQIi5Uj2dAgIM+Lqi/3aQoJIK23oU5sbbUtcXbWfFoLdYlBHmi3F3uU+9RSCHbjIMbqjmnwJtNryrX79CqIMBWMNXBiTbV8YkuxAR/aJ8ybqhznokx9MHp98GbOO9iGuDRUjjrgvDHTVEmxg/xz3qNEB76w/e10liZ7hgF/K63IOjFQrCzEILvQnJ9SWLORrxUGIMgDCLw+rxg8FriU63Lt3AOT3Vi48SsO0pcx18fn/05t0yxqLwk6Y+ZfGX3qY42e6hQcRSx47n6qlNJDPW1u55XhGz4AV7ccGniA8vKoUnP7wyI2DmiOm+UBqr1ssp0RxOyE4m/mHihF+f78KUSDOECFgV2YQB9RtBXjcV616kkhvraXc9YMO5LuRX5rWT/ODxmwbrmS24XBg54eD6rrFhLDMtT1S0jEyPXYPwZ6Z+rOqtMH6T8K8qYNxFDudc7Uo51nZy0TtJhKgZM86Gw+8pjB5rY0Ko+N562xbQWYQtGx26utu7BtpJ4gwBMJa6/NCHokjscSxOzNq3vLiFhvdxnYpU5mHA3eNY6sL0xGU/7tMFWvAH8HkMl8UZxFreoIJHAie8IMVbivyjKNTUIH9afuLC62lJO2IL7DR1o1oQyvKwwYk3BzsFv64kYdR1E4I/QN52JKCT3lhxYcJ8IvnhsqnVTiDi2pOdKwdh7zFosKugkcHb8ofJBF/G93+w/7iiesrEulG+0xxoior/cLWUUiDm0fAAAAABJRU5ErkJggg==\n", - "text/latex": "$\\displaystyle x^{2} \\left(x + y + 5\\right) + x^{2}$" + "text/latex": [ + "$\\displaystyle x^{2} \\left(x + y + 5\\right) + x^{2}$" + ], + "text/plain": [ + " 2 2\n", + "x â‹…(x + y + 5) + x " + ] }, "execution_count": 12, "metadata": {}, @@ -279,9 +295,14 @@ "outputs": [ { "data": { - "text/plain": " 3 2 2\nx + x â‹…y + 6â‹…x ", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIYAAAAXCAYAAADOQzd3AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEbUlEQVRoBeWZ7VHcMBCGD4YCSNIB6QBIBUAHkFQAdBCGf/xjoINABYR0AKmAjxJIBbm5DsjzGMsjzNnBn+eb2xmdZFnafbVa7a58S8/Pz6OqdHJyssacbcqYYvsL5ZT+R+pBExhXAXicghS7tE//5KW5OL9lulipqYYz5j3B+ML51N+pflM++DxwOgPvYcBI+wftB8rn0LdAdaEulmsq4ZR5V9HcT7T1HvNABxiD3i6QRr5G33roWKC6UBe1PAZKzIeMXZSpgueB9Bb38wC0B4yFuliqk2MEwBiIIeQb5Yr2eeifpxrcGvQu9SKGkldbFeuikWHIFWYmc9eUG9pzZRzgNXyIfYP2XCSf4Mx7Zg9l3oOzpGqU10Vjw1B8ytQETgU3BlltSfVGg9MbiYnnHu3BG0WKVyM+on3rqql9Xqdu5O2Y/0YXlXMMmOgh/lC2aAcjCIrdpD/00Xwfwcdk0AQwueW8b1b9UchRESp4Ry7ps/VTfa7lM+HddI0agd4hMYpUmnvRCDP8puqijmFMYDbOAXLRGsdPSh1ygZbOKVWEnkLDCDcRk7CjjoXXXiM4Te7FuhVjpD8x7LivSrtMF5UNIxW8R30M47/psx+45iVOG/LcJOuMWIvGMVQSmwdy0jLAQl1khoFQlXWQCnaj9ym6GW8d0h1jftmgNlxUDhnO7YIqYv/vR7iIn7H7gecsxKXvLqk9HH2RIdoPinoN98MDKbZr+uLQMuK5yj4W6mIZ5oH8CnZuoeOOcknZ5lkXq7B8NkzXYKht7HpD9XBDya/7K3269j5J/Uub7ofYKHoRDSOPpRVdJIYBcz1FrIAJzwoMJ+Vj7j2Pw6C2scPPU+nBkIzh5lMx2ffqlMYv226DJxiFt4+wH0GMOZ3eKxlD3do+hlByD9M4u91A4CN9GsiIuhW3CR+TPhPVPGl4ypkW58VRJr9t7LrsECb1Dqc5sOLP92VDmNvFGuUf70+QZ46gMRhqNNbWdJEYRqQIeCc0TSHhXe0aOdM2fkS/3snrqu67EjEnbGKY1wg7/MJh0AA8idkp5Z3exL5Cj8GYVtcoHgoik1uf9TQyFxwxrjVdxDlGIhDmQSFJopkKXKVfhQyaWsaul8q8ZrpwdeNG5Tega71oiGX6f+NNmupiJd1wP56YtAhAi3fxsTCTsa7v+YitRh1j9xTGOhBcr/lFpA3Dk3uUJ0O+e3Xbti70GJ4CyzhlPqadEX2+C8lY1j+QRpfYXxlFqgfleVPplZCt93bzswsCbT2IYdPPClKruliBoV7COCrjEQIPKf4hppWa3GgwWVhxzICoS+x6SDN+NyN8N3DpyuydwLEjFor7Ipmwx39LtKqLVv5ES2A2+GGxtZPPBmIrTXVTmLBNrfuuTPOwxnhRb5LP+GWP7QmyLIMgjYCit0yItm7ba2HhNfVlZOnvoNZYipSXhpKZE4qfiXsuWbgeLLhsh/kV+AKctUPqANfougppEKGkEN2MXrCJGoYxXE8x9T+JGUHrTew/A0Y1bcMwkZ8AAAAASUVORK5CYII=\n", - "text/latex": "$\\displaystyle x^{3} + x^{2} y + 6 x^{2}$" + "text/latex": [ + "$\\displaystyle x^{3} + x^{2} y + 6 x^{2}$" + ], + "text/plain": [ + " 3 2 2\n", + "x + x â‹…y + 6â‹…x " + ] }, "execution_count": 13, "metadata": {}, @@ -299,9 +320,14 @@ "outputs": [ { "data": { - "text/plain": " 2 \nx â‹…(x + y + 6)", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHoAAAAYCAYAAAA1Zem1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEpklEQVRoBe2Z3VEjMQzHF4YCcpQQOuCjAkIHwFUA6QCGJ3hjuA6ACjjoIFwFfHQAHRyXDrj/b1l7nMVrYidr8rCaceSVLVkrWbK8WXp/fy9i4ezsrCeek4qvX+ED0cexsrr5eSywkrjMhZw6NLzqX6r/pLZmaB1eLAssJ6pzKOcOHN4L9fuirTu0rrtAFkh1NNH8OOt7aGOYtD+rqI7fsYDPrkmOlqArNfc8xvGvoj076wW7mnukCV0GCFopeZDsin0tLKUUY5ZbHQnEWbdqG+q7znenTfQ1b1eELeHjiYHuYWoLyHYcly7ciGYDTX0cPRa+YtJMjpYQUi+F2J760zq5p/l/NH9DuINIC1Q2J7CO1b+HXZjndeGJYljPFMjbwuPUqrsQM05msR1h8wx+5TkA7EQ2RxaQPhSNpLJyZ2dZNLDIHPTBqURv6eRqKYLHZ3fsjL2HSY7WIiaScbQ5Zzmnp0nF++KxVzPxtA0YgbYokKyP7MaRh7233ZcRvQw2l0ZfdGqpf2rHSY6WDFICCoMtSGDQgRpHUd/OszK6TtAC2JdzdxycNTmIvfeto8WM4w6rOVvCB2pE7s+K9qA5d/SFf1S0WMTOc1POBH+MDhOMLT04+nD2PenZpv9q7Fp4r6XlfWI3ReR2Q1Tjl79q6HYrWpNdoe8s68cAX7t+0UR4ULtWG+iZdMwmqFd5IkUDir4EuHLoEFj+09BJZY+RRurvvy8aGSon4AdgE7+gmxpRjqObdMHe/dLRmkQkuy9CaoDR7ODV2rgekwBF33ycGXXwLf+JJn2IGjY8QCaq6x3MTiXXHH+kj3Ey1bXxi1nhtzpkFzPH0MHo3Tep+1GT3LOTq8+zaDi8EJ5XemLDlDKRW4OZdJCOVJiDmkweWZN38NUPvGPTu7kfgIjec+Q4wFp1mh1uQR8j2/WToVErEaxkzHoKZ36vdLSUshdtEQHfi32MtPQ7qw7i9zmyEJ3MxPWKI2lq0HyzyXEokWKjSGNEO7S6UUX6AM2Zuz6SifCmQGGMmqoOZXC5Z3Q5QcLMi5WFF0TRerS6hIRn0siXclrWIVZtIt5mt4oZG1H91gMkVnbsfDZWyH6+aGf+20rlQC7hFEIIYifyEi4TRck0d2SxBgGZn3ZdZh2CCnoG0de1BVOyns+OThxP+KoOHLX4zJdhiOhXIprdSXurDE7UWRCNMVOUWHpihwjY8vDm1MGzfJA04eTKHuhLJZ4VtDZZ9l7YFs7qE7EctQcNypT11gqMapw/KF+Icag2UmP3cMizAWwaZ84McCNe347MqUOs+mQyKlqMa+6tyPBFD/RWQXrsoIsa/gGIWL5nNx0j+HU4058arBILUoh7HX+CNCkWKzI4X+skFWNNQiUPhw+Ek/6Umbc+TXpC11ocOwTtGqk7N2Aob0XakiJjyaVFgwxE5JDVSlCfNMk15vyDkvSbrE/CamQj7F0U/B+du52eno7U+rnXjV1POr6oHRk+9W/VLszzImPp2VcbGR05o78DuLJwVlO9LjIQEauK5CNhvilfqv8tZ3OCkTjDbebMfkYbhWUwzo9d4agPGYa/w80WqDbmnbC9MfwH+JA6Vr0VD58AAAAASUVORK5CYII=\n", - "text/latex": "$\\displaystyle x^{2} \\left(x + y + 6\\right)$" + "text/latex": [ + "$\\displaystyle x^{2} \\left(x + y + 6\\right)$" + ], + "text/plain": [ + " 2 \n", + "x â‹…(x + y + 6)" + ] }, "execution_count": 14, "metadata": {}, @@ -319,9 +345,14 @@ "outputs": [ { "data": { - "text/plain": " 2 2\nx â‹…(x + cos(x) + 5) + x ", "image/png": "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\n", - "text/latex": "$\\displaystyle x^{2} \\left(x + \\cos{\\left(x \\right)} + 5\\right) + x^{2}$" + "text/latex": [ + "$\\displaystyle x^{2} \\left(x + \\cos{\\left(x \\right)} + 5\\right) + x^{2}$" + ], + "text/plain": [ + " 2 2\n", + "x â‹…(x + cos(x) + 5) + x " + ] }, "execution_count": 15, "metadata": {}, @@ -346,9 +377,14 @@ "outputs": [ { "data": { - "text/plain": " 2 2 \nx â‹…(x + y + 5) + x = 1", "image/png": "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\n", - "text/latex": "$\\displaystyle x^{2} \\left(x + y + 5\\right) + x^{2} = 1$" + "text/latex": [ + "$\\displaystyle x^{2} \\left(x + y + 5\\right) + x^{2} = 1$" + ], + "text/plain": [ + " 2 2 \n", + "x â‹…(x + y + 5) + x = 1" + ] }, "execution_count": 16, "metadata": {}, @@ -367,9 +403,16 @@ "outputs": [ { "data": { - "text/plain": "⎡ 1 ⎤\n⎢-x - 6 + ──⎥\n⎢ 2⎥\n⎣ x ⎦", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAH8AAAAzCAYAAAC+J9cEAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEwElEQVR4Ae2d7VEUQRCGD8sAUDPADAAj4MhANAIgAyl+wT8LM0AiQMhAjQAkA8lAvAz0fZaZrblhl9u728+b7qpmZmd3Z7r7ne752ivWTk5O1kcFdHp6OikotqIBWkBYFmL8Qrr8Ev+N+GyAOprI5Ra4ivAF76s1ef5vZQ7VO36Uv2t3VskCwvpA+uy9XCWlVl0XgbYpHfHiLeWXHpYN/J73GIHMeH0hfhBvizfEtZCBX4sZm6vEefgeLSj/SQneXwsx4TNK1AIGfqLAo7aBb+AnbIGEVTfPN/ATtkDCqpvnG/gJWyBh1c3zDfyELTAs1d84cV/XIbZt79ZhxYbr0LYuhznQ+DEZXansXvnvSr+6srmTpMGX4eLvFi5Vdje3FRt+QTJle/t1N5Mk+DLmhgyJNx0pn33HoJRr+K04CUp1wgfIeHn4AQtHp4TSuUn1jMV8IDEoSs7zBdJ7IcSx6E6IlMp3w+s583QceFCUoucfCqGJwJ4MCqkGhG3c82VkPMKHxHfK74sZcz+KoRs9c/2YbeUvX8Pcq028Hxn+iBnnmUGHw4CKVpva8PwzGfULLFPeiPkkiTHySCkdI55xq6hR8uF5GxmcbEQDwGdISIYaBV/GxONDcAm1GNivTdmsCO/rsjmSPB74TeW9DL7Bb8pcBM/48pVNnw37zhA/pb03WhVD7Ok9v1a+VT6cQW+pgjuV0QlGSmeuX/UMbS8jA03FFMrk7/H7BTorw0Jh+Jcs57o3FseU7bjpPhEkJvStoue/+MU6rtX2Wlk9s8AHJABbiNSw7wT+/Q/KfPYXVVLVsZQMYRvUJaYo63zhvSDPfKSQ9G4RuCOVE802lDK0LUR6txSkhSqs8FKjYT9sX8rhMXhxPrlT2TocPtdCHq9+rs2iqNCCWO038aznLyOOA5XNFCZ8GByvwfNC4x7rmolfm0ToRq6YiHDIVxjy44dX4box8GUcPB1mRo2n8aODnFTGPWb/rZLavQZgMZ0y63hKkY8hiWXoYMjJfewE9sPVvsonVZRoEnw8iBk1II8kEL8H5BQKz2Ny9aB8PgTwTFukdnfFgI8sEBO2HV3Hc5TsZo//oEM+D3H6YNtK5xONgS9B6H25YBhQZYDdCeC0H5JkaXu4CZuvK38gPcLNKZbNlLGUndmRW5vw1aVtT+uho1cKtTXLj3PdLlpnY56/qEBDfE9e1skkUe3GG1V0BrauZ3o9djbPH2JvK5BZgHNWwX5D5X0ZA7/AkEMrEvDM9Bnv5/rdvoX9niEtINclUuVTUAc8y+nsewR3PVIa7qcUammeX2iWTgtZvlU6BXVAs1w9V54ZPqGfVczUnkqZNub5ZZbpoFzglZ2C+s0n9iPCU1DW9EQK0pxUz9QSO78RZQz8yCAdX851CiqQXy0jr4X9ZaxX87sCM16iseV8WXMzeXUGfm6KfmXUEcaSiJCe74iqrNZTUAv7PcEcYCVKq6eg5vk9AV9i4OkwB150hKkZu4sEtZ6CmufLyj2h1k9BDfyeIC/PnkiUqSWayho9BbWw3xPwuxDDwO/C6j1p08DvCRBdiOHHfD47ZoaZkxuD8mvLDNcCMbbSJMPaez6HA+E/XAj3j4ertUnuLcD+wRN8/wN7Ln/yKtUUoQAAAABJRU5ErkJggg==\n", - "text/latex": "$\\displaystyle \\left[ - x - 6 + \\frac{1}{x^{2}}\\right]$" + "text/latex": [ + "$\\displaystyle \\left[ - x - 6 + \\frac{1}{x^{2}}\\right]$" + ], + "text/plain": [ + "⎡ 1 ⎤\n", + "⎢-x - 6 + ──⎥\n", + "⎢ 2⎥\n", + "⎣ x ⎦" + ] }, "execution_count": 17, "metadata": {}, @@ -394,9 +437,14 @@ "outputs": [ { "data": { - "text/plain": " 2 2\nx â‹…(x + y + 5) + x ", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKoAAAAYCAYAAABqdGb8AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFRElEQVRoBe2b63HUMBDHDyYFAKmA0AGPDpIOklBBoAMYvuVbBjoIVACkg4QK8ugAOoC5DsL/ZySNzpb8kGXd3eCd0UnW8+/d1e5KTh7c398vhtLp6ekjjflgxu2Z/ET1y6Fzzf1nDlgOtOnVju00MP+oSd/aMSqfq3yr9MzWzfnMgQQORPXqYcJkDHkj5dz3xn5UeU91z726uThzYCgHonqVqqhY05uhKOr9pdg2bKg3zc8jOLDFfI3qVZKiihGflfx4lAV+qe6uL3/V9536zha4L8NMP/GtwTPVPVLyNz3eDf5uFQlzVK9SY1THAE0O4w6VXrjKjoLG0H9X+aeOrnNzkwM/xDcOs9YoUIYc/9V+pfRcCVf6+V/zdv2CX4idXiVZVPvKmoxdTHz6QmXfwtoujVz9YOwH5e8bjXNFHw78USd4jSDh5YVSg//iL0bgreG3ittDwtzQq2SLaiZ7r/wAFphn8l8dLEGxuSUoQsLDoQ9XuBGWJQOeO81x1JN58Bl+uxuanuNctwx43Vx9CloPJW3oVZJFNZPBhHOVcTHsbiwku72LjtW/pNJgdUibQsXwGD7D7zHvXxIvShrUq1SLyp0pL0DuSAxp3blqJ+bosrhuvrmQhQPw+1ippHFIBR7VK6eoZte9MSu8Un6ihIa/NnXX6kM8tFD+2NQNzQgTrmKDhmCIzZGz3sPDh4xbPTthm7Yvyvu64WzQtCZywlDsKiGjM9XZw5UeVwh+w3eHfaV14gfDp9F65bt+vgp8Ign7tdIXpX0949JhCrHOWHqpCX62TFICQ8vyjSYOffDjUqn+/lgpPERpQhbfjKyQDYlNRCweIviNMq+Lssi0UlS9JBrvC2KpZ4Rgd+GTWrsekwgmB+PYghh6ARce4m42LIRFquNu9Q7VqAl+hOtACflUpDKuHasZO6CCey2KKmzZ9Mq6/hvzwtXL64c7OU6XFUOU53JvKLxjsl3M5KMwCCOCClkV1lyoPRQ/t52g/Q8YWM8z5vGItep1rnkCPG7uQAFlxftxu1E/A/CMgWilifCOkqkPuFJUgazHNyHB+OOyl8di0PiQIi5Uj2dAgIM+Lqi/3aQoJIK23oU5sbbUtcXbWfFoLdYlBHmi3F3uU+9RSCHbjIMbqjmnwJtNryrX79CqIMBWMNXBiTbV8YkuxAR/aJ8ybqhznokx9MHp98GbOO9iGuDRUjjrgvDHTVEmxg/xz3qNEB76w/e10liZ7hgF/K63IOjFQrCzEILvQnJ9SWLORrxUGIMgDCLw+rxg8FriU63Lt3AOT3Vi48SsO0pcx18fn/05t0yxqLwk6Y+ZfGX3qY42e6hQcRSx47n6qlNJDPW1u55XhGz4AV7ccGniA8vKoUnP7wyI2DmiOm+UBqr1ssp0RxOyE4m/mHihF+f78KUSDOECFgV2YQB9RtBXjcV616kkhvraXc9YMO5LuRX5rWT/ODxmwbrmS24XBg54eD6rrFhLDMtT1S0jEyPXYPwZ6Z+rOqtMH6T8K8qYNxFDudc7Uo51nZy0TtJhKgZM86Gw+8pjB5rY0Ko+N562xbQWYQtGx26utu7BtpJ4gwBMJa6/NCHokjscSxOzNq3vLiFhvdxnYpU5mHA3eNY6sL0xGU/7tMFWvAH8HkMl8UZxFreoIJHAie8IMVbivyjKNTUIH9afuLC62lJO2IL7DR1o1oQyvKwwYk3BzsFv64kYdR1E4I/QN52JKCT3lhxYcJ8IvnhsqnVTiDi2pOdKwdh7zFosKugkcHb8ofJBF/G93+w/7iiesrEulG+0xxoior/cLWUUiDm0fAAAAABJRU5ErkJggg==\n", - "text/latex": "$\\displaystyle x^{2} \\left(x + y + 5\\right) + x^{2}$" + "text/latex": [ + "$\\displaystyle x^{2} \\left(x + y + 5\\right) + x^{2}$" + ], + "text/plain": [ + " 2 2\n", + "x â‹…(x + y + 5) + x " + ] }, "execution_count": 18, "metadata": {}, @@ -414,8 +462,161 @@ "outputs": [ { "data": { - "text/plain": "<graphviz.files.Source at 0x7fa1081625b0>", - "image/svg+xml": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Generated by graphviz version 2.43.0 (0)\n -->\n<!-- Title: %3 Pages: 1 -->\n<svg width=\"425pt\" height=\"260pt\"\n viewBox=\"0.00 0.00 425.00 260.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 256)\">\n<title>%3</title>\n<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-256 421,-256 421,4 -4,4\"/>\n<!-- Add(Pow(Symbol('x'), Integer(2)), Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y'))))_() -->\n<g id=\"node1\" class=\"node\">\n<title>Add(Pow(Symbol('x'), Integer(2)), Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y'))))_()</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"136\" cy=\"-234\" rx=\"28.7\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"136\" y=\"-230.3\" font-family=\"Times,serif\" font-size=\"14.00\">Add</text>\n</g>\n<!-- Pow(Symbol('x'), Integer(2))_(0,) -->\n<g id=\"node2\" class=\"node\">\n<title>Pow(Symbol('x'), Integer(2))_(0,)</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"98\" cy=\"-162\" rx=\"29.8\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"98\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">Pow</text>\n</g>\n<!-- Add(Pow(Symbol('x'), Integer(2)), Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y'))))_()->Pow(Symbol('x'), Integer(2))_(0,) -->\n<g id=\"edge1\" class=\"edge\">\n<title>Add(Pow(Symbol('x'), Integer(2)), Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y'))))_()->Pow(Symbol('x'), Integer(2))_(0,)</title>\n<path fill=\"none\" stroke=\"black\" d=\"M127.19,-216.76C122.65,-208.4 117.01,-198.02 111.9,-188.61\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"114.88,-186.75 107.03,-179.63 108.72,-190.09 114.88,-186.75\"/>\n</g>\n<!-- Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,) -->\n<g id=\"node5\" class=\"node\">\n<title>Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,)</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"174\" cy=\"-162\" rx=\"28.7\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"174\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">Mul</text>\n</g>\n<!-- Add(Pow(Symbol('x'), Integer(2)), Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y'))))_()->Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,) -->\n<g id=\"edge2\" class=\"edge\">\n<title>Add(Pow(Symbol('x'), Integer(2)), Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y'))))_()->Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,)</title>\n<path fill=\"none\" stroke=\"black\" d=\"M144.81,-216.76C149.42,-208.28 155.16,-197.71 160.32,-188.2\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"163.54,-189.61 165.23,-179.15 157.39,-186.27 163.54,-189.61\"/>\n</g>\n<!-- Symbol('x')_(0, 0) -->\n<g id=\"node3\" class=\"node\">\n<title>Symbol('x')_(0, 0)</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"27\" cy=\"-90\" rx=\"27\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"27\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">x</text>\n</g>\n<!-- Pow(Symbol('x'), Integer(2))_(0,)->Symbol('x')_(0, 0) -->\n<g id=\"edge3\" class=\"edge\">\n<title>Pow(Symbol('x'), Integer(2))_(0,)->Symbol('x')_(0, 0)</title>\n<path fill=\"none\" stroke=\"black\" d=\"M82.94,-146.15C73.02,-136.37 59.87,-123.4 48.81,-112.5\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"51.13,-109.87 41.55,-105.35 46.21,-114.86 51.13,-109.87\"/>\n</g>\n<!-- Integer(2)_(0, 1) -->\n<g id=\"node4\" class=\"node\">\n<title>Integer(2)_(0, 1)</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"99\" cy=\"-90\" rx=\"27\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"99\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">2</text>\n</g>\n<!-- Pow(Symbol('x'), Integer(2))_(0,)->Integer(2)_(0, 1) -->\n<g id=\"edge4\" class=\"edge\">\n<title>Pow(Symbol('x'), Integer(2))_(0,)->Integer(2)_(0, 1)</title>\n<path fill=\"none\" stroke=\"black\" d=\"M98.25,-143.7C98.36,-135.98 98.49,-126.71 98.61,-118.11\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"102.11,-118.15 98.76,-108.1 95.11,-118.05 102.11,-118.15\"/>\n</g>\n<!-- Pow(Symbol('x'), Integer(2))_(1, 0) -->\n<g id=\"node6\" class=\"node\">\n<title>Pow(Symbol('x'), Integer(2))_(1, 0)</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"174\" cy=\"-90\" rx=\"29.8\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"174\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">Pow</text>\n</g>\n<!-- Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,)->Pow(Symbol('x'), Integer(2))_(1, 0) -->\n<g id=\"edge5\" class=\"edge\">\n<title>Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,)->Pow(Symbol('x'), Integer(2))_(1, 0)</title>\n<path fill=\"none\" stroke=\"black\" d=\"M174,-143.7C174,-135.98 174,-126.71 174,-118.11\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"177.5,-118.1 174,-108.1 170.5,-118.1 177.5,-118.1\"/>\n</g>\n<!-- Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1) -->\n<g id=\"node9\" class=\"node\">\n<title>Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"284\" cy=\"-90\" rx=\"28.7\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"284\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">Add</text>\n</g>\n<!-- Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,)->Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1) -->\n<g id=\"edge6\" class=\"edge\">\n<title>Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,)->Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)</title>\n<path fill=\"none\" stroke=\"black\" d=\"M193.41,-148.65C210.74,-137.62 236.33,-121.33 255.9,-108.88\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"257.85,-111.79 264.41,-103.47 254.1,-105.88 257.85,-111.79\"/>\n</g>\n<!-- Symbol('x')_(1, 0, 0) -->\n<g id=\"node7\" class=\"node\">\n<title>Symbol('x')_(1, 0, 0)</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"102\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"102\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">x</text>\n</g>\n<!-- Pow(Symbol('x'), Integer(2))_(1, 0)->Symbol('x')_(1, 0, 0) -->\n<g id=\"edge7\" class=\"edge\">\n<title>Pow(Symbol('x'), Integer(2))_(1, 0)->Symbol('x')_(1, 0, 0)</title>\n<path fill=\"none\" stroke=\"black\" d=\"M158.73,-74.15C148.67,-64.37 135.33,-51.4 124.11,-40.5\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"126.36,-37.81 116.75,-33.35 121.49,-42.83 126.36,-37.81\"/>\n</g>\n<!-- Integer(2)_(1, 0, 1) -->\n<g id=\"node8\" class=\"node\">\n<title>Integer(2)_(1, 0, 1)</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"174\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"174\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">2</text>\n</g>\n<!-- Pow(Symbol('x'), Integer(2))_(1, 0)->Integer(2)_(1, 0, 1) -->\n<g id=\"edge8\" class=\"edge\">\n<title>Pow(Symbol('x'), Integer(2))_(1, 0)->Integer(2)_(1, 0, 1)</title>\n<path fill=\"none\" stroke=\"black\" d=\"M174,-71.7C174,-63.98 174,-54.71 174,-46.11\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"177.5,-46.1 174,-36.1 170.5,-46.1 177.5,-46.1\"/>\n</g>\n<!-- Integer(5)_(1, 1, 0) -->\n<g id=\"node10\" class=\"node\">\n<title>Integer(5)_(1, 1, 0)</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"246\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"246\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">5</text>\n</g>\n<!-- Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)->Integer(5)_(1, 1, 0) -->\n<g id=\"edge9\" class=\"edge\">\n<title>Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)->Integer(5)_(1, 1, 0)</title>\n<path fill=\"none\" stroke=\"black\" d=\"M275.19,-72.76C270.58,-64.28 264.84,-53.71 259.68,-44.2\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"262.61,-42.27 254.77,-35.15 256.46,-45.61 262.61,-42.27\"/>\n</g>\n<!-- Symbol('x')_(1, 1, 1) -->\n<g id=\"node11\" class=\"node\">\n<title>Symbol('x')_(1, 1, 1)</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"318\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"318\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">x</text>\n</g>\n<!-- Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)->Symbol('x')_(1, 1, 1) -->\n<g id=\"edge10\" class=\"edge\">\n<title>Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)->Symbol('x')_(1, 1, 1)</title>\n<path fill=\"none\" stroke=\"black\" d=\"M292.06,-72.41C296.08,-64.13 301.04,-53.92 305.54,-44.66\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"308.78,-45.99 310,-35.47 302.48,-42.94 308.78,-45.99\"/>\n</g>\n<!-- Symbol('y')_(1, 1, 2) -->\n<g id=\"node12\" class=\"node\">\n<title>Symbol('y')_(1, 1, 2)</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"390\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"390\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">y</text>\n</g>\n<!-- Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)->Symbol('y')_(1, 1, 2) -->\n<g id=\"edge11\" class=\"edge\">\n<title>Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)->Symbol('y')_(1, 1, 2)</title>\n<path fill=\"none\" stroke=\"black\" d=\"M302.95,-76.49C319.71,-65.42 344.35,-49.15 363.14,-36.74\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"365.15,-39.6 371.57,-31.17 361.29,-33.76 365.15,-39.6\"/>\n</g>\n</g>\n</svg>\n" + "image/svg+xml": [ + "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n", + "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n", + " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n", + "<!-- Generated by graphviz version 2.50.0 (0)\n", + " -->\n", + "<!-- Pages: 1 -->\n", + "<svg width=\"425pt\" height=\"260pt\"\n", + " viewBox=\"0.00 0.00 425.00 260.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n", + "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 256)\">\n", + "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-256 421,-256 421,4 -4,4\"/>\n", + "<!-- Add(Pow(Symbol('x'), Integer(2)), Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y'))))_() -->\n", + "<g id=\"node1\" class=\"node\">\n", + "<title>Add(Pow(Symbol('x'), Integer(2)), Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y'))))_()</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"136\" cy=\"-234\" rx=\"28.7\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"136\" y=\"-230.3\" font-family=\"Times,serif\" font-size=\"14.00\">Add</text>\n", + "</g>\n", + "<!-- Pow(Symbol('x'), Integer(2))_(0,) -->\n", + "<g id=\"node2\" class=\"node\">\n", + "<title>Pow(Symbol('x'), Integer(2))_(0,)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"98\" cy=\"-162\" rx=\"29.8\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"98\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">Pow</text>\n", + "</g>\n", + "<!-- Add(Pow(Symbol('x'), Integer(2)), Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y'))))_()->Pow(Symbol('x'), Integer(2))_(0,) -->\n", + "<g id=\"edge1\" class=\"edge\">\n", + "<title>Add(Pow(Symbol('x'), Integer(2)), Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y'))))_()->Pow(Symbol('x'), Integer(2))_(0,)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M127.19,-216.76C122.65,-208.4 117.01,-198.02 111.9,-188.61\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"114.88,-186.75 107.03,-179.63 108.72,-190.09 114.88,-186.75\"/>\n", + "</g>\n", + "<!-- Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,) -->\n", + "<g id=\"node5\" class=\"node\">\n", + "<title>Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"174\" cy=\"-162\" rx=\"28.7\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"174\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">Mul</text>\n", + "</g>\n", + "<!-- Add(Pow(Symbol('x'), Integer(2)), Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y'))))_()->Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,) -->\n", + "<g id=\"edge2\" class=\"edge\">\n", + "<title>Add(Pow(Symbol('x'), Integer(2)), Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y'))))_()->Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M144.81,-216.76C149.42,-208.28 155.16,-197.71 160.32,-188.2\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"163.54,-189.61 165.23,-179.15 157.39,-186.27 163.54,-189.61\"/>\n", + "</g>\n", + "<!-- Symbol('x')_(0, 0) -->\n", + "<g id=\"node3\" class=\"node\">\n", + "<title>Symbol('x')_(0, 0)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"27\" cy=\"-90\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"27\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">x</text>\n", + "</g>\n", + "<!-- Pow(Symbol('x'), Integer(2))_(0,)->Symbol('x')_(0, 0) -->\n", + "<g id=\"edge3\" class=\"edge\">\n", + "<title>Pow(Symbol('x'), Integer(2))_(0,)->Symbol('x')_(0, 0)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M82.94,-146.15C73.02,-136.37 59.87,-123.4 48.81,-112.5\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"51.13,-109.87 41.55,-105.35 46.21,-114.86 51.13,-109.87\"/>\n", + "</g>\n", + "<!-- Integer(2)_(0, 1) -->\n", + "<g id=\"node4\" class=\"node\">\n", + "<title>Integer(2)_(0, 1)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"99\" cy=\"-90\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"99\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">2</text>\n", + "</g>\n", + "<!-- Pow(Symbol('x'), Integer(2))_(0,)->Integer(2)_(0, 1) -->\n", + "<g id=\"edge4\" class=\"edge\">\n", + "<title>Pow(Symbol('x'), Integer(2))_(0,)->Integer(2)_(0, 1)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M98.25,-143.7C98.36,-135.98 98.49,-126.71 98.61,-118.11\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"102.11,-118.15 98.76,-108.1 95.11,-118.05 102.11,-118.15\"/>\n", + "</g>\n", + "<!-- Pow(Symbol('x'), Integer(2))_(1, 0) -->\n", + "<g id=\"node6\" class=\"node\">\n", + "<title>Pow(Symbol('x'), Integer(2))_(1, 0)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"174\" cy=\"-90\" rx=\"29.8\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"174\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">Pow</text>\n", + "</g>\n", + "<!-- Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,)->Pow(Symbol('x'), Integer(2))_(1, 0) -->\n", + "<g id=\"edge5\" class=\"edge\">\n", + "<title>Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,)->Pow(Symbol('x'), Integer(2))_(1, 0)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M174,-143.7C174,-135.98 174,-126.71 174,-118.11\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"177.5,-118.1 174,-108.1 170.5,-118.1 177.5,-118.1\"/>\n", + "</g>\n", + "<!-- Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1) -->\n", + "<g id=\"node9\" class=\"node\">\n", + "<title>Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"284\" cy=\"-90\" rx=\"28.7\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"284\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">Add</text>\n", + "</g>\n", + "<!-- Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,)->Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1) -->\n", + "<g id=\"edge6\" class=\"edge\">\n", + "<title>Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,)->Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M193.41,-148.65C210.74,-137.62 236.33,-121.33 255.9,-108.88\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"257.85,-111.79 264.41,-103.47 254.1,-105.88 257.85,-111.79\"/>\n", + "</g>\n", + "<!-- Symbol('x')_(1, 0, 0) -->\n", + "<g id=\"node7\" class=\"node\">\n", + "<title>Symbol('x')_(1, 0, 0)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"102\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"102\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">x</text>\n", + "</g>\n", + "<!-- Pow(Symbol('x'), Integer(2))_(1, 0)->Symbol('x')_(1, 0, 0) -->\n", + "<g id=\"edge7\" class=\"edge\">\n", + "<title>Pow(Symbol('x'), Integer(2))_(1, 0)->Symbol('x')_(1, 0, 0)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M158.73,-74.15C148.67,-64.37 135.33,-51.4 124.11,-40.5\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"126.36,-37.81 116.75,-33.35 121.49,-42.83 126.36,-37.81\"/>\n", + "</g>\n", + "<!-- Integer(2)_(1, 0, 1) -->\n", + "<g id=\"node8\" class=\"node\">\n", + "<title>Integer(2)_(1, 0, 1)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"174\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"174\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">2</text>\n", + "</g>\n", + "<!-- Pow(Symbol('x'), Integer(2))_(1, 0)->Integer(2)_(1, 0, 1) -->\n", + "<g id=\"edge8\" class=\"edge\">\n", + "<title>Pow(Symbol('x'), Integer(2))_(1, 0)->Integer(2)_(1, 0, 1)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M174,-71.7C174,-63.98 174,-54.71 174,-46.11\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"177.5,-46.1 174,-36.1 170.5,-46.1 177.5,-46.1\"/>\n", + "</g>\n", + "<!-- Integer(5)_(1, 1, 0) -->\n", + "<g id=\"node10\" class=\"node\">\n", + "<title>Integer(5)_(1, 1, 0)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"246\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"246\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">5</text>\n", + "</g>\n", + "<!-- Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)->Integer(5)_(1, 1, 0) -->\n", + "<g id=\"edge9\" class=\"edge\">\n", + "<title>Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)->Integer(5)_(1, 1, 0)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M275.19,-72.76C270.58,-64.28 264.84,-53.71 259.68,-44.2\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"262.61,-42.27 254.77,-35.15 256.46,-45.61 262.61,-42.27\"/>\n", + "</g>\n", + "<!-- Symbol('x')_(1, 1, 1) -->\n", + "<g id=\"node11\" class=\"node\">\n", + "<title>Symbol('x')_(1, 1, 1)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"318\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"318\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">x</text>\n", + "</g>\n", + "<!-- Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)->Symbol('x')_(1, 1, 1) -->\n", + "<g id=\"edge10\" class=\"edge\">\n", + "<title>Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)->Symbol('x')_(1, 1, 1)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M292.06,-72.41C296.08,-64.13 301.04,-53.92 305.54,-44.66\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"308.78,-45.99 310,-35.47 302.48,-42.94 308.78,-45.99\"/>\n", + "</g>\n", + "<!-- Symbol('y')_(1, 1, 2) -->\n", + "<g id=\"node12\" class=\"node\">\n", + "<title>Symbol('y')_(1, 1, 2)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"390\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"390\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">y</text>\n", + "</g>\n", + "<!-- Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)->Symbol('y')_(1, 1, 2) -->\n", + "<g id=\"edge11\" class=\"edge\">\n", + "<title>Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)->Symbol('y')_(1, 1, 2)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M302.95,-76.49C319.71,-65.42 344.35,-49.15 363.14,-36.74\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"365.15,-39.6 371.57,-31.17 361.29,-33.76 365.15,-39.6\"/>\n", + "</g>\n", + "</g>\n", + "</svg>\n" + ], + "text/plain": [ + "<graphviz.sources.Source at 0x7fc1288673a0>" + ] }, "execution_count": 19, "metadata": {}, @@ -441,7 +642,9 @@ "outputs": [ { "data": { - "text/plain": "sympy.core.add.Add" + "text/plain": [ + "sympy.core.add.Add" + ] }, "execution_count": 20, "metadata": {}, @@ -459,9 +662,14 @@ "outputs": [ { "data": { - "text/plain": "⎛ 2 2 ⎞\nâŽx , x â‹…(x + y + 5)⎠", "image/png": "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\n", - "text/latex": "$\\displaystyle \\left( x^{2}, \\ x^{2} \\left(x + y + 5\\right)\\right)$" + "text/latex": [ + "$\\displaystyle \\left( x^{2}, \\ x^{2} \\left(x + y + 5\\right)\\right)$" + ], + "text/plain": [ + "⎛ 2 2 ⎞\n", + "âŽx , x â‹…(x + y + 5)⎠" + ] }, "execution_count": 21, "metadata": {}, @@ -511,9 +719,13 @@ "outputs": [ { "data": { - "text/plain": "f_E__1", "image/png": "iVBORw0KGgoAAAANSUhEUgAAACkAAAAdCAYAAAA3i0VNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACxklEQVRYCdWX7VEbMRCGwUMBHtKB00E+OrA7cOggoQOY/LL/MdAB6YCBDgwVJEMHcQd46MB5HvlOnGXd4bPHmOzMWqvV7urVrqSTD+fz+UFbGo/HXXxO4FPkz23929oftXUA1Cd8+oWfYHdOm4B8BNUjYIc7R1dM0HmribaZ578A2VhuSnpNBp6LLFzQL+VtEtPatzaTALok2jF8A/+Ay8OC+LZUCxIYAhOgQP/A9/BeKFtusmjWvF7uixLvDaBZyYJEP4CnuT2IrsfYKexCevTdFk+0V7Q7ocPqF4eJLLEABTCDvRNn6AW1PxJkyqPRaA6fpfp99VcODlmznNJe9+ECwuJ3BSRqv80HgLXU74JyIL+CbNqEjgUMKxlvMt1ojNhnVcfc6TaTtVkkgIfLkx8Xgux11erpho+3gvQEf6B/Hnr8IF/B13A4sLlMfsHud+lQbXESzIA27ldkFyVwx+RXCR/tvbbOYa+uCe0kcbxFFxayBBJlD0MnqsukTn7PI+Hjs82JYmbjYL1gnOpClfvF/MELudR1l0AyWh6aGCB4vPwYqG7sxapBKoCYiHRRz+jC/BX3ADQF6UV+VzGKYhHcQNuSAHM0Q3mcDLjtBh0m96TeFoPux5vEsOy6FQy0KxJgugCT0jOT7o8uQIMBbTaTRQCdtqW6GM6fboGQlBKkJ0uw3xoQGCAspMHm1SGSYByBWpmU0gOrzfQIp1+pZa6Pnac4FzhnHnX4uLCftPEepH8B+4gJoBhTvqNNM+l8f5deQSgaiSBm3P/aMRiygcqnm6fT6yg+3RhX9wB/R45bCdnKSV7mH2HvTDMciX6Yb+UF1PTS4WXUhy+bbOrG8BvWjeX02HfhiWOdCHsNgZV5b3nIWpUde8vZ9n4107WfxUa4TKijJW9ziHzBL5WyaRJs/Wz6WVxsq1yq19FZjnXsNrFJY/8DzKtH71g9xXgAAAAASUVORK5CYII=\n", - "text/latex": "$\\displaystyle {{f}_{(1,0)}^{1}}$" + "text/latex": [ + "$\\displaystyle {f}_{(1,0)}^{1}$" + ], + "text/plain": [ + "f_E__1" + ] }, "execution_count": 23, "metadata": {}, @@ -539,7 +751,9 @@ "outputs": [ { "data": { - "text/plain": "True" + "text/plain": [ + "True" + ] }, "execution_count": 24, "metadata": {}, @@ -575,9 +789,14 @@ "outputs": [ { "data": { - "text/plain": " \n(img_E__2â‹…wâ‚‚ - img_NE__2â‹…wâ‚ - img_NW__2â‹…wâ‚ + img_SE__2â‹…wâ‚ - img_SW__2â‹…wâ‚ - img\n\n 2\n_W__2â‹…wâ‚‚) ", "image/png": "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\n", - "text/latex": "$\\displaystyle \\left({{img}_{(1,0)}^{2}} w_{2} - {{img}_{(1,1)}^{2}} w_{1} - {{img}_{(-1,1)}^{2}} w_{1} + {{img}_{(1,-1)}^{2}} w_{1} - {{img}_{(-1,-1)}^{2}} w_{1} - {{img}_{(-1,0)}^{2}} w_{2}\\right)^{2}$" + "text/latex": [ + "$\\displaystyle \\left({img}_{(1,0)}^{2} w_{2} - {img}_{(1,1)}^{2} w_{1} - {img}_{(-1,1)}^{2} w_{1} + {img}_{(1,-1)}^{2} w_{1} - {img}_{(-1,-1)}^{2} w_{1} - {img}_{(-1,0)}^{2} w_{2}\\right)^{2}$" + ], + "text/plain": [ + " 2\n", + "(img_E__2â‹…wâ‚‚ - img_NE__2â‹…wâ‚ - img_NW__2â‹…wâ‚ + img_SE__2â‹…wâ‚ - img_SW__2â‹…wâ‚ - img_W__2â‹…wâ‚‚) " + ] }, "execution_count": 26, "metadata": {}, @@ -606,9 +825,14 @@ "outputs": [ { "data": { - "text/plain": " \n(img_E__2â‹…wâ‚‚ - 0.5â‹…img_NE__2 - 0.5â‹…img_NW__2 + 0.5â‹…img_SE__2 - 0.5â‹…img_SW__2 -\n\n 2\n img_W__2â‹…wâ‚‚) ", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyUAAAArCAYAAABmdidyAAAACXBIWXMAAA7EAAAOxAGVKw4bAAATX0lEQVR4Ae2d77XctBbFh6wUEEIFkA4SXgWEDuBRwQ0dhJVP8C0LOkhSAYQOAhVA6IDXAeF2cN/++Vq+Ho/skTT22B5vreWRLOvP0T577HMsy/7o5uZm52AEjIARMAJGwAgYASNgBIyAEZgSgR9++OGB2n9R9/FZHV8p//r+lB27bSNgBIyAETACRsAIGAEjYASMQI3Aj3JAvg1oKP1K6ffaHt0LmY6NgBEwAkbACBgBI2AEjIARMAITIvBMjsjTVvs/Kv2Z8h7bKWmh4qQRMAJGwAgYASNgBIyAETACkyHALMmfsdY/8pqSGCzOMwJGwAgYASNgBIyAETACRmBKBDRDwkzJV4ofDa4pUQGe83qn+NcpBXLbRsAIGAEjYASMgBEwAkbACKwHAfkHLFr/XdsXSl/nSq46j1XnK21PqNv7+JYK4pA8VGyHBKQcjIARMAJGwAgYASNgBIyAEagQqB2RK+28VxoHJTmoPG/eYpbkSd3OLvr4lg4+U6FvFVeeS3IPLmgEjIARMAJGwAgYASNgBIzAZhCo/YYvFX+dMmiVwyH5TnH1Fq56/9Ap0QGmUpiK+VTp7KmYFGFcxggYASNgBIyAETACRsAIGIHLQEA+wzuN5JXiwSesdByHhKexvmuNHOfku9jjW2904LUdkhZUThoBI2AEjIARMAJGwAgYASPQhwCzJG/kPxx7jItvkvBKYOKw8Zrg673Ht5TBYpO32j62UyIUHIyAETACRsAIGAEjYASMgBE4ioB8h7AePekxrm6D3bdvseDkpzU4JJIRT+xFPSCmggjVZ+pvk/41AukImE/pWK29pHW9dg1OL785Mj3Ga+7B/Fiz9vJkt67z8FJp/Ii/hRsfQ/xfbu3GKVFl1pJg3L/MbWSm8r2fqZ9JHne7bgTMp3XrL0d66zoHrW2WNUe2qffUUZsfqUitv5x1naFDHBFtv6lKtUYko2pVtL2mhFmH39TYWha3936mPhcElzcCQsB82g4NrOvt6Lp0pOZIKXLbqGd+bEPPjNK6ztc1y0B4i292aDslYT1JdiMzVcALi36mfiZ53K0QkFPLjNteUN4DbeERu71jC9oxnwqUsVJ9W9cFui6pslJ+MFRzpEThBXVWyhHzo0DXK61iXecrjpkS7D78iqxQPb7VOinQ0NGg8s9V6JFilDVLUN+vOx0jC9NGf3XyvZuJgDDkmUDCP9oeaWP6MvXZwN9VlvU+QQ/hLQzRb96o7Oxckqw7ybFZPmnsm9L3lnUN13PD1vgBPuZIHku2xhHzI48fpaWF8+z2gXWdrz1hhi2OzfiltsHXA3dbDzMln3OgbqRbJraPA7CYx7wk995n6mMCOy8NAWHJ69n+UMxHbX5SmvdIv1M6dabjg8rDDXSCQwIhm691Kt0Ni+ISwmmsm+GTxrppfW9J190/Xsr+1vmxtfNBCie6ZbbOEZ9DuowYdX9R9oF1naVbJjkq3yKnVljojjcT7mwfrS/FcPd8EUGyYCxzp3fI8F2ErEsXQljyDCBTbo1nq/R1vc9r3uDJsfCXyie/Ck5lF8MlBiZ5NsMnjXXT+t6CrjXGp6I1b0HpzgQe+x/vVGfT/Nja+eAoISIFts4RjX8z14uI+ifPEr6LsQ+s62x1/60a2etKglPChSvp0a1ssSasUJOEO/qVsVzv7xSnPmo0oXSrbBpnIuac/qH858IVh2UxM2RjI6yxcYHZEp82q+8N6ZrZSraSsFl+ANaGOFLCjVBnsxwxPwIFLj+2rot0XNnhwu6xtphdGW00OCVctFZlyNck4e49RmRYXM1UX/uz9dFBO7MXAZzT2B3VwA2ON7Mova2s8MBG+bRJfW9U1yX/yk3yA6DMkWS6bJIj5kcyP1Zf0LouVmGwG7nZm+2U0CtTLb1BisFxYSqG6bT32m+MV6U5MeEY/EfblbaH2nAQWCjNLAZrEvgoI2W+0UYgzQLq6AyN8lm1T3u0QcAYfqr80C/PwiMTcRN0nH7PHtRvwOcTdc6HY4KcO6UZ67eKK9kUM7ZFPXImmZD/WECvR4Paqh77UEGwgJAvldeQsu5rSVxiTIviEwJNGTau703puoRHG+cHkJkjR4izcY6YH0f4UXp4gfbBqnXdwvPctmlwSpLsxsCX+xIYo5Hw4Tbq/X2hssxK4IDwDuLG6Fb6y/rYO6XfaKsWSiveKZ9y/yq+VsyK/GomQzGGOe18rG0v6BgGOw5I9cYmxcgIMf7UVvWrvIN6OjZnCPgwLjBo48M3YNpGP1gwps+1RZ0y5Z87BOIgW19oj2GozC/ST9VOrTucNDgSxhqwWgSXGIhkWxqf+vAdK3+z+t6grks4s1l+AJY5kkSZzXLE/EjiR2mhRdkHF6DrgOdZbVPhxnpkOJBiNzZcuZ9SQQ0/VjnWFRB4hjR4QDsdw7DEGSFgaON48NamEMKJi/UIwSjlGPkHwqoMwPEauMZIVB5tUjb0o+RygmRr48PMUNfBA6OXQWKV5yOVzBxUONZjw3EhgCHhSvmVYX+7u4hfPO3BIJmr9T2hkPbRHXrnUTteI93GylwKQC0ztr6XqZelSGV+LEUTy5XDHFmubhYnme2DcVXSwXMu2/ToOaA9apyS4DQMGcAYluHxm/+qTmNgK/2njuER4TRgUHcfn8IIJbRnDth/oi20yX4IzDL8SpshQ+nQxlLXM/TiU8sONm2HjKGBW3DueIytwU1pDHhmhgbfPKFytPu7NuLU8LXqxXD/MNBA4Mg/A2WGDjFOZr6C0xr6N5eGUGsdG1nXtGx9t/Bde1L84JzBzY9uqP67Ot6cX1oFht6UZ360gLqEpM8he1q8JPtjb2Dn3JmAU722lMZlWzNfub14SnfY1ZPYph0xc+zTHU5JuPj0VpTw13SimFkMyjUORjimvOqCqP2u8Y13xsWvakPpEDBIm3bIVJkA0s+hUB3TNo5PMOL3DisfuegjenyvcMGO2uXNU+3Zn71WdKwXHxUMsgdDPNRtr+F5pjbeagvY8fgaeYNvLaj75eR6cqAtbbSDfrsh5A3iq/rMZD1U3CcTs2VVG4oXySUGXss2G5+64NcywbE+XGNVBvM0RutbCE2t60El9ByUTIPnm1g11Yk5HWF8vBK49/zV0575UQMj7Ca9vsTwP5YnmUo44nPIHbCrsT/uRJ42tRROMcr6P4fd0diIyoO/hIu1NW+Hl/c7pLeAWQzPGkfO86Pbpnkj2C99b3/36B6PGFWzGBoIhGkHFrB3B8dxCBSMbfZ3qkse9bm7x35o63P2Fbrt4NjstVGV0o/qsmAaYBuDmfbI18ZsQ1JQWWYr2DjZ4xQ0Qfss0q9kbTLjiZgDdiC72sL5ao8Rg4L1MnMHMGY2oxuqu63KjOqgVRj9BV22sm9n4zTu9pgXxyUEloxj8amXg+ojlU9tDKdIb1rfMV2XgKx2enXd195QHfOjuR4E+Ga5ttC5dDHK+SAMJCc2Ryr8F33NiPEjR8eh7JCuQ5kx4qF+dGwp1yWGujj7YE5dq+9T7dM5bdP2DfijNMYpua5LBcMzWgky6wDGdDDOIU07xJwP6mDkdteCYIRXd6LVLse5a9EE5e05GDpA2902drVM7QXU5CEjFxL6ZjsaVIfy/yhmIT93FHlbWLc/ZjL2nJVIw4ylkb0+Hsv7Rm01Br7Sr7Vdt9oDn/a0W+vQpElePBAcw3ZH1VR3R8b28ZBmHLFHzva4oTLoZVFcYgC1XGPwKYWDKXwKuE4Vb1bfMV2XgKx2UnS913RiHfPjDrW98wfZtf4mu7a0+jj5fHA3jPSUObJ/M7PW96KuGbVMe/xI1/BdyURd31UoTCX2M/t5x7reV7DwGMM+jdmhsbwpbNO2bbs/uMjePeV9qPOPGfAMYCeAWKRNuvF+6n3qdx+7qpwN6lC3FSgb8nhVbpii+4UydXuh+Js6UR0LmXWMkxCcpCpLdXF2cCy6zkFdJRrRTpCH/kk/VVyNmRqtvCGcuKvTHFcdLqYPtbXbiTpYKlMF1eHEy+MCoz2qc9vy8V/1jR4+KKb/KijNeNDj1W1OhQV3hm+0dWeiXimvq4/ndT0WtYdQ4aGyS+ISso3CJ43rKAcZu/qDYw1fAjjnitX3lvV9oOsS3FN03W03pY7KmB8CTjhwruA/8nMHx6mvLXR3wJEU3XXkLNpN6UdlzBGhKxzm4sgBP0qUnaLrkna7dVL6UZnZOSW5l2gfzKlr+kYvVWjpqMKJzFZenz1xdttUMgX5go9xO4Ajv/dV8ZpN5WJ3uJvqKoOhxaNbeG07xcGRYJfOY3f2AahdjrIEQGbBNQZrY8RqH1mYZmKqird9faKNAdE2MnbDU+VHn6XuFuzbV31kR86uE0N/OAjt/OoPq7zognu1xUxLMMypz8LwT7W9IV8xeXvfMNF+E2pZwOaJ0pSdI+AMgX/4RgzxF9qH1FVANm3gsvfIGXnaqBt0ikOG/j5VXjMepZfIJcZ2Mp9oJCMM8imjnVOKblXf59Z1iY7Mj/muLejLHEljrc8haTitpdSs552F2geznAuExSj2qdqZwzZ9UBO+sf1S/gD360IYmAx+MGhg7bvdTVnlQ+IDp0b5zFgchLo8dQ5C95j2uRt/UFb5yJs12IPObjMCcN3DGNMY1e2Ao4TTFHVKKCi5Yk5SFDfKh1CPB+LQPu1U+lDcdopC8cli9QemsTHs9alyB/qmQC1vSv0oJqp/di7Vco/Fpz2cjuwc5dOR+icfFt6b07fGPIeuS3RlfmzrfGCODCCg/+1irhkrOocMINp7aAnnHev6Vj2j2afibMwui+LcZkbN9RLbtLJh1dbezet227F0cEqoVE2HxwqdI08DZ1bihbYrpTGUdnUe+c2jQ+TXgQHjOEwVcEi6hECuAPRo/WqctMnsAopnvAQIVH1ostrzTzICNYY5XKLtqfkUk38SPsU6uuS8An3PoesSFYzBD9pg22wo4AdYbYkjm+VGGHgBR9bCjzDEnHiM805Of2cteyG6Pot9Kqzgealt+h/V7XvKqVfnwSlhNoK3VbFWYK4LGEYk6y2qgCxKsJ4EQ715dOj2aPXL8TFk7WuD9ruzFFM5QeBPf8RN0Lhjnm1z3IleBHK5REPg38eF3o5OPDAVn04Ua3XVc/Ud1bX+b9wQ4PHJY4F1cN1zw7E6JcdP5ofkPJhlLhFk5XVy+cFwoxwpwWFiXp3MkZIxXWCdXI5E+TGxrhvYJ+7n0jm1Jl332STwr3sNmkJvp9imXE//akibmAhOCYvIX2nDKeh9NCmxzdJi9E/AOWItCaDjkPRdVFEIZU4Kaj94cniEXQC7+5TpEuGk/qksGZqv15/cmBsAgVwuUWcUPtFQRpiETxn9X0rRXH1Hda3/If/36vHJhQBjfoyjiFx+0GuUIyXiTMwrc6REKYd1cjkS5cfEum6knrifS+fUanQtPc9qn6r/U2xT/InsG+uVU6KOWbiM8T+4XqL5R0yQqPvvc0AOelR5Fkvz58kKqoMj80Jx+9Gol8oDwMoJ0bHKOVPMiacd6K9561j7gNPLQUB6g0fJXEJy1RmTT6lgmE+pSA2Uy9V3qa4HROg9pL5i55ve8p0D5kcHkJLdXH7QRylHTtR3yfDMkRLUOnVyOVLKj063SbvmVBJMyYVWqOvV2afCGBuakGWHUeEeP3V4q3jWdSVBkIwYL5KTchPY18YjGC+0VWnt85avECjPbEz7tbcsyP+EenVZFv/E1rHM5rQF4R1PisBYfDrGwTAI8ykgcf74QNclIuh8cUzXsfPNsTpBFPMjIDFPfMCREn2XiJ7QT2jWHAlInD8+4EeJCAm6PjiHTNRPaNacCkjcxbPpWvxYo30Kh7jR272xf4doX+rm5mbH9v333z/QdqPtachbeoys2n4skVP1vsqpp/Lg8y6njsvecmstOEi/5lN9PliLzkrlPEXXJX2qP59vVsatUziSq+9CTvmaNCOnTuFHob6zziGFfZhTEU4tXdeSb1F6kzz/aivi673grMijuVYajyxloWeoNmssmZkaYnE+dxKSg8oztZQ7rQQu2c/HJQvlgrMjYD7NroKzCVCq6xIBfb4pQW3+OqUcKdR3yYB9TSpBbaQ6pfwo6d6cKkFtvDor0PVizgXCqnoySXHR+vTGKUF9aoR1FjxaEF5LO55WJ2pJsuIo8DacnEXvjBEnLCmoLB+MfKs4fyoqqQcXWgoC0rH5tBRlTCxHoa5LpPL5pgS1BdQp5EiWvkuGKbl8TSoBbuQ6hfwokcKcKkFtxDpL1fUCzwUsnbgqhr47xacpl2fa3nfzl74vmR9MJeOUbU8ls9s97dGxKXU+ZdvWe77el6aPpcljTt0+3rwkHMyR/P/5lPq7BH1cwhim1HFoe2k4LUkeyfJc20n+w0cA3Q3yvHg38SvFr7vHvG8EjIARMAJGwAgYASNgBIyAEQAB+Qsso8B3eKJ08VNFe49v0XAdvlDMN0Ky1mqEyo6NgBEwAkbACBgBI2AEjIARuGwE5CuwfOKdtqtTHBJQijolapT1FrzSi3UUOWs1aNPBCBgBI2AEjIARMAJGwAgYgctHgE+K8EmNosXtbXiiTgkF1DjTL3yvw7MlAOJgBIyAETACRsAIGAEjYASMQIVAPXGBQzLKco//A3J+3F913zEPAAAAAElFTkSuQmCC\n", - "text/latex": "$\\displaystyle \\left({{img}_{(1,0)}^{2}} w_{2} - 0.5 {{img}_{(1,1)}^{2}} - 0.5 {{img}_{(-1,1)}^{2}} + 0.5 {{img}_{(1,-1)}^{2}} - 0.5 {{img}_{(-1,-1)}^{2}} - {{img}_{(-1,0)}^{2}} w_{2}\\right)^{2}$" + "text/latex": [ + "$\\displaystyle \\left({img}_{(1,0)}^{2} w_{2} - 0.5 {img}_{(1,1)}^{2} - 0.5 {img}_{(-1,1)}^{2} + 0.5 {img}_{(1,-1)}^{2} - 0.5 {img}_{(-1,-1)}^{2} - {img}_{(-1,0)}^{2} w_{2}\\right)^{2}$" + ], + "text/plain": [ + " 2\n", + "(img_E__2â‹…wâ‚‚ - 0.5â‹…img_NE__2 - 0.5â‹…img_NW__2 + 0.5â‹…img_SE__2 - 0.5â‹…img_SW__2 - img_W__2â‹…wâ‚‚) " + ] }, "execution_count": 27, "metadata": {}, @@ -634,9 +858,14 @@ "outputs": [ { "data": { - "text/plain": " \ndst_C := (img_E__2â‹…wâ‚‚ - 0.5â‹…img_NE__2 - 0.5â‹…img_NW__2 + 0.5â‹…img_SE__2 - 0.5â‹…im\n\n 2\ng_SW__2 - img_W__2â‹…wâ‚‚) ", "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4gAAAArCAYAAAA60KYTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAXl0lEQVR4Ae2d79XcNBbGh5wUEKACoAP+VEDogF0qSOgATj7Bt5zQQaACYDvIUkEIHex2QPbtIPv8FMnxeOyxrLHH8vjROR7Z0r3S1XOvNfeOZM97b968OTgZASNgBIyAETACRsAIGAEjYASMwD4Q+PHHHx9opE/iaD+O+SOV393fBwQepREwAkbACBgBI2AEjIARMAJGwAhEBJ4pGPw2oaHz5zp/peOTe6nQuREwAkbACBgBI2AEjIARMAJGwAjsAoHHCgoftkb6TOcfq+xTB4gtVHxqBIyAETACRsAIGAEjYASMgBHYAQKsHv7ZN873/AxiHywuMwJGwAgYASNgBIyAETACRsAI7AMBrRyygvi18k/8DOJGdC5lsS/4hfJ/bURki2kEjIARMAJGwAgYASNgBIzAgggoNuBlM3/o+FLndyVdie9T8X2t4zP4vcUUFCpPUhrB4QfKHRxWriuLZwSMgBEwAkbACBgBI2AEroVADAofqb9XOidYnJTEwxtMWT38LLZ18BbTSRBen1iKeqxev1UeIvrrS+AejYARMAJGwAgYASNgBIyAEagZgRgzfKX8H7lyipbg8Hvl4W2m8doBYi6Aa9BJSSz3smT8kc6LlozXkNt9GgEjYASMgBEwAkbACBgBI3BdBBQvvFCPz5WP7joUDcEhuxS/b0lJoPi9t5i2EKnw9BfJ9LODwwo1Y5GMgBEwAkbACBgBI2AEjEBdCLB6+Itih5ytpvznIX9zQZ4O/vrizltMhUiNScrhQdHfdbzvALFGDVkmI2AEjIARMAJGwAgYASNQFwKKG9K7S7K3mnZH4LeYdhGp55qHRX/aQnAoGfmV4kmEjuVq0qMtyP5WVH/WhIDtqSZtLCuLdb0svrfQum3kFrS43BhsH8thW1vL1vUkjRBD/EeY8af3/53EGYkdIJagtjCPlMmzhwRaTxfuaq7mn0nm8HArDeqcXy5Yqv6EaycjMBEB29NEwDZMbl1vWHlXEt02ciWgN9qN7WOjiisQ27rOBE1++H91/Fvk4XnCTLYjMj+DeARHNResxv1byt3Ki2nYr8we5pT45YJfLQh0nYzAVARsT1MR2y69db1d3V1LctvItZDeZj+2j23qrURq63oaajymxj8hFCUHiEWwLc6Unj9cvKOZOuAXij9nasvNzIRAX4Cusgc60jbgmXqavRnbUwGkG9W3dV2g6xKWjdoHQ7WNlCh8Io/tYyJgJl8DAc8F01BnBRGfj5hicjq7xTROGLxJE4fyN12jHKcFEWhN0ih2NIn+OxF9sqZu1PfPHUGxE5a3/+qU+3IiAsKQ1VjS3zrYsssWi9z95H+IludDkx7SG616/1NTtKvbkmQ9SI7d2pPGvit971nX2PrUtDf7AB/bSL6V2D4CVvY/8k0mm1K2tbp/4LkgW12BUHjhh+MvfqVj9C8vuq2fXUFUw3/pwJnEseR/NSYn8RO9hgclJzPvk+Fzhi3McoMAJsNqtqJKbraV8mtFbxCicqdMBIQlz3G+VM4fmP6kc/6n5oXOc1cAX4se20An3MNMEJ+Jf8heqrIlyXqQrLuxJ4111/rek66x7alp7/YBXraRYauxfdg+hq1jlpqq/APPBdk6ZbEpxBXZHJHw7AoiNFJCerYsa0WrRwD4cWhxVp3GESDSTys+o9TSTzUvgpEs6JkVkHNByOiYTBDuO/aN8+NK86uPzu/iNS8Bwk7GEj/wZL/iWLTV2BIDkzy7sSeNddf63oOuNcbwXai8u0I+dh8fxLNr+9jbfDBqEB0C28e+vi866r/KpWysGv9AsuzGN5hBuf9RG0XPIY4GiGoYR5RlyqFVhzH5L+Ufa/8q9XEC/lN5dvBWKBhORGkwXtjl5WzxhmWlKwQu8fqgPHcl9HIhbqsFArs+W3up8u+EK8Fj6T1ZPVIaG18Ae7Kn3ep7R7pmFZ+jJO3WPgBrRzZSYhvw2D729X1Raieb5/NcMFmFwQcXbp/q6PMpBxvMCRAvDVjgb1ZBBiWpv4Ll9d+uICYOxKaCqnjDsqqFQ5/eXApebIl0KkOA+6ZvpSHZxq3cVyfo7NSedqnvner6xOYzCnZpH+BiG8mwjsPB9mH/I8tQtkzkuaBIe8ln5Ef38gAxgs8WQRrkpRisZOHwP9VxkkQPLXQklp8JENgGx2RFgECwg1BErrxuleepeJZqUymO55JV1KnjZUl4MEkecGXJGMxf6boJJKKs6OwLHY90fKADXaAnVvd4hu0nHdB8o4PEOS8/6V25VDnPFNJe0jUB/0OVp35f6RqZyJukevq9elK/CZ8P1TnPvyY5DzpnrN8qD7IpZ2xVbYuVTMg/ltDraFJbYWuaCMGCe/GpyppJIvZVky0xpqrsCYGWTDvX9650XWJHO7cPILONnDEc24ft44x5XFRVoX+w6bmghec1fdMUIGb5jG2DuZ8uJDhBHUEcz4+FBpWnF9OcBA6xjoAwOJvK4cfRxvmGnv/xw/kmkAjbDnW+uSTZcdYZ15dLC6++cOBJr99mg59PRAv2SWdNACSOr2IduuMNtOElJ7Skcuj+p/xOOQFvWOFTjp7Q/fs6jpLqGDs6DC+dUY6M3KR/6gj9quyET3VrpoQP4wKDNj78x2Q7AAMLxvS5jhM7V9kaKd3IyDaU2mM4R8Pbh0M7UXcEzNhIGmvCqgpbYiCSrTZ7GsJ3rvLd6nuHui6xmd3aB2DZRkZNxvYxCpEJChGoyj+4gbkg4Xk131SYsWiH+nN8xiMzuceVmGEkQCDoSNEmVZzzoovgYFJA0jUO9UPlzUqErgk2CBzaicCwTdOuC+dq4+vY3kndHAVqm1fzFiXxfirGP3Q80vkRBkUNjjONKjDK9DI2xXMHjb5Uh5Ofgnp0xHNq7RXb9EVCeQoQaIryk75FgxGDXxMcq4z+oE396LSeJPnQWcIH++sG222MDqIHB2w04KhrsGE1leP3eJxgI/q1E79AnU2SnUDwLhHpnDEyXrYDH3Tdxsq2BCj1Juu7Xt3UIJntowYt1CuD7aNe3VQpmf2DedXSwXMN33R0DuiO+H4sYJUIx7i90kIVzvTg84OiJ0ggsGS1sG+VcIyfrW3pfzp0GpxWZCH9reNDtTv6HJtoBnlUx3bK5zombXeMbRIc4WATKCgrSgTdgxh2WkwBXOPUd+q5BK8UdP9T109bNLxE504HAQ0BYnfMBASkrp4/U1lqMxDED1bf/kWbqVDnqY3cMSXWa+WD+ETZwaYdHCMXuKVAm8CwwU3nBFP88MF23t4kGtrkhwTy3PQP8fVhDv/rM40kG+H+KEmMkx93sI9BrFRnWxpA1/o+AuaW5o6jgZVeyD6YM/ju66Zw76q+mV9aBOfeOOz5oAXULZzOPIfYPm7BKC4cw8w2hTT2Dy7USYd9EE/pDr96dt+00/8U/zSw3o8NEGgcOc3R2HAiT1aKVMdAWZkigApfhFzraII5nSNML7/KD7GeFQ5WLkLSOQHj38rDqpdyHFmemesLPqfwEODh+Dfyve1x+BNaHTwLyJf5lzq/G6aerSZN9IOKTHIoZ3UPuibYS3UqSzo50qnKwfFkRVhl6L9pR+cHtZUM9leuW4m2CUJTQNWqCnzIRR+99UfEBRdqlzd4tldFj1pRXdCT8hN8RJhk/+uISc8ptq4fixd7Sdjx4wNlg2+AUh194ijPkmhPB2312UEqO4uv+LlvP1A+JBc/CIU2lJ9gpbKAo9pYzZYAIMq2mj0hQzdFbIZw7ZKPXtOeDuiSbts8qezm9b20rtug5p5LprPzTV874ukLAA9xfB8rH5y/BtqzfURgIoaLzQd9+I+VSaYSG2F+nWUOUf+2j4rtY8x++urXtilkwq5iXqV/IPkW9TX79DJWdk5v5/BUu4v4pmPyjtXfk9A4IBzdQJCg4aD65Chz2SSVE0C9pwKCDmjCq/cbgh7HUvT0kxKOd9jqlgqUU9b0F/t+qJxAcyiN8rTaafc/1F5TLj6Cpkc6WB2qLT2RQGF1T3J2x/WN6rpBEPJjhA2+FIiXMviDLlptfU69UredpO+3ta1P8RLg82XVOLO0R7mO7vbjFufxqWjTFk9sCv02SddhRbgpGD7pC4ZPZFd7BMLtMeLc8Xzl2gk99dl9WIVQ3ZEee4RFf127gCzwa9ztMVdnSwgqGeeyp0EbVB+59oRIS6Zd67tP1yVgq51BXQ+1d47H9lHHdwu6ky5mmQ+G7OBc+QZsZNfzx5B9nNPpUN05XQ/xlJSf60d1tXwvMbTq/APhczIXzK2DofbU96X+6Vq+aXshZGh4R+X3WleNUx/LwiA4FyDNc4IRnKYjXQ9tL234UxvK2w7vQ3ipI+mcOhzarhx3KsOJP0kTeeiLYGhSUh840mxRPQpUJjWST8xYSSkIeHvV+ZQs4AQmIahTzg3cTn2BIDxg3P0hgIAo/CIb8Qw/DKTGVNboI/ZL2902DrGu/fITypCRG5m+OUaTeKBnFZkfIPilnRXkbn9hRXikMcbayB5p+8q+UfttO/xZ13ettsGnvTWgVbXoKVu3U5De7ohfndFXW8Z2fTpnHH3bYo9sQzTopSpbYgBRrjnsKccGc+wp4bpUvlt99+m6BGS1k6Pro6YzeWwf71A7mj8ojvpb7Lul1cfF88G7YeSfbcRGdjt/DNlHvobfUWbq+h1D4VlmP6vPO/Herso/iDIdzQUlasjUwVHT4pnDP+3zQ/vK5vZNx3zGo7FywQoiTEe/PqmMpVuMIq2koIzkbPMFkQITnYYvCOi7jvUHKgs84sUJZWtNWLVQDhhdYaHpS69VSFt9aQrPSzVA0Do5SV5WEhnj0omxkobG9bY2BtqSi+AcLNsBO9fw/5qIYz60IgxtCpB4A23aavobfLH92ER4IyjnoS4VxpwAumsXBDIEecl2Oiy9l7ST5KF/zh+25WiVncMJW2vqxYPdYkfgE1Is6wafqfqgeu4B9D7LVqCm4YwT9Y0eXitv7E7njAc9PkpNUKbjjY7uCi0/anT18V3ka7Z16zrgIdqabAkxZ7EnjWvUBhm7+sPGGntBgGsm9b1nfZ/ougT7HF13283hEY3tQ8AJB+YK7pFfOzgu/d1Cdyc2kqO7jpxFlzn9iGZVG1H/e54/eu2jRNk5ui5pt8uT08/aNhVlrtE/OJkLuvjmXOfooKcd+uZeD6mlo4ATha2yIX/iqr6p5EmypfjirfAZn/cjDQ7jL2oIB/JDHXwBEEyxlEpZ29HEOcWZSitDugzbCrvPXfC8H04qdAflBAopIXCusDj1Q0Cn9rp5H8+diBJQXfqca7ZzMu7GOHKYptCo7TsO8fSt/DRNiQanF3kStimog4Yx9q14gWGbDloSBs8LU470rGtkSTZAcI1doDPaRsZuApuuDXRpzl6LH9mRsxtQ0h/BWrs8fCGrrPdlOWqLFcgUJMHPS10+0oGdY8+UHf1Hoq6bFGUBG/72Bdo1EoEp9+AXypGfnOdhmWBCQjYd4JJ+zEnl6AnedO9yT6C/j+AJRPrQeY22hHgX21MaY2Z+1p4y27iUbK/6vrauS/Rk+1jvuwV92UbGrXav88dW7GNcg6cUq847lfoHq8wFwmIW/1TtXNs3fRDNqvH7Ts2svyQEiBIYxvaqQqI+KcNgVNk4qImwm4sOp5UAoy8hcFfY7nXig7YdGKRy8ik8OMfFCaUWM09jZKwY4tkkeU50A4PKmVBOAkyVtwP0pu1ID89J6tbpmlWqE1qVI++QLk7aPVOArvsSuiPAaae0ItwbIEIoufoC1l7c2g3H8XATB/uN1wflQ3bYZp/tXP2Bad8YjvoQ3Ym+IYjy5vD3YiL+q9tSlHsuezrCaeRi1J5G+C+uFt6707fGvIauS3Rl+9jXfLA5G9nj/IGSNjSHbM6mIr7V+Acr63o2/1Tj6PPLenFuG00c/1TfNMUTR4sI7XaHztMK4lD9UuU42kdga+BpZYrBdAPQ7nWQayIP7V7VwQ9CTv9AiWHLznTWeTiEK6t1T3Q80jlO6yGWUc4KcjeB7UUBeLfBzjXB4ZG96Bq5kuF3yMsvNU7aZNWNm5DxkriZr/UDQejwVj4ihlNsiaEvbU998C5iT30d3XJZgb7X0HWJCuawD9rg2G0qsA+w2pON7NY2GPiN20eJbueYd0r6vQpPgb5rnAuu4p8KK8Ze4pt+Ib4UX03S6yoBogbKtjYG201PVfBQRwgIRcM5WylDYKf8ga6fKG8762d5RJ8S/TXP6qXCCnNW6R4zVh1rORM49GAfUsT9F10QNPUF6+hlDlmH2qD9bnC/VEAK/vRH3iSNu+8Xn6beJ4MITLUlGgL/IVsY7OjCiqXs6UKxNsc+Vd+9utb9xo8zbPEeSzw33Z0bxnhK6i+2D8l5svuiRJCN80y1D4bbayMlOCxsVxfbSMmYboxnNvtYWNcN7Av3c+s2NVXfvXPBwjpIuh7ySZCp+x20hN5KfVO+S/9Kg5iSrxIgRgGJaHlxTQOsznm1b3iFrGj+1sHWufaKFUEewdNLHWFrYQaPWEJiu+AWnHxeAPNcRwiOg+TX/6B/Eljz7CE3AMHhkIODDqG5KKn99CsHeu4adPcamsZ2Luq4xSwZ3m9d+vRyBKbaEj3OYk8TRV/EnibKcAvkU/Xdq2vdh9zvYYt3JaDYPuZRxFT7oNdeGykRZ2G7so2UKOWYZzb7WFjXjdQL93PrNjVV371zwcI6CLpWH6v6p+q/1DclliiKfdYMEPl1GKHbq4EHgXB0HTQTP1SH0/C+8ubNjlSd44n1IXgRHcZVdZKMvHSEQAznaPD5uiUHEfsfCgZPuhb90IrwCW27QHzo5dZXhNtD3t35VFsCoJntKRdzvoi3sMMgdzyr0E3Vd6muSwanvvrmm9ymbB+5SJ2hm2ofNFVqIxfq+8woBqtsI4PQ5FVc0z7yJDqmsk0d43Hp1VR9i77I1yyRc0DXT9UWAVdYsBBNWMhR3o0tqpgLonwMP9ufhzile+nk2rkER2C2UQJkdooDnjrYFIxm97My4e/qf9XnEAvGH1aE23zoVgfYP9ERznXN21JTQvesUjYBv855mc6H8EVaHtxtryIn3tUC6CSA80URmMuexmwwDcL2lJC4fn6i6xIRNF+M6bpvvhnjSaLYPhIS6+QnNlKi7xLRM/pJzdpGEhLXz0/so0SEDF2fzCEL9ZOatU0lJN7lq+la9rE1/xT7IajuBrDv0Dx39ubNm8Oaxw8//PBMx4NcGUT7OJcWOuh1PJzCszYteOh4syW5kVXHsxLsxPf1FD7Rg8+LKTymXfc+n4q/9Gt7WnlunqqzUvpLdF3Sp/rzfLMx27rERqbqu9Cm/J20ok1dYh+F+p40hxT2YZvqsanadS35qtGbZPmfjmJbvXcueLxGnSLbwS2lff2Lvu+//PpIU9lv4pm64ph4V8kl75065peKnJc0rCJjt9OIsVeEu8D4uggB21MRbJtkKtV1yWDVF1uCpn4fbG0HSgk0VfOU2kihvkuwsI2UoDYTT6l9lHRvmypBbT6eDei6irlAOIXdesqLH1VbPUDEbDQAAqJF0pJtLyJwbFRyEziz/Sn91cKS3c3StmTlmVLeKsizPrmJMWbrX7SP1fDvysuWzHOlMt3qCEjHtqfVtXAdAQp1XSKc55sS1CrgKbSRSfouGabk8ndSCXAz8xTaR4kUtqkS1GbkqVXXlc0FPNr16CLYS5a+zXOd7XpaGmZ77Kut4S2Zs7cMTx3bkm1PlcX0V7sPbE89W21u0f5qu79rk+cWdT51TLXppDZ5puJ5a/S3oI9bGMM17Ko2nGqRR3J8p+Pi2OE9lOhULwL6RYL/PnmufOrW2noHZcmMgBEwAkbACBgBI2AEjIARmA0BxQq8SIm44TOdX7TTrootprMhc5sNfalh8R+EKN3JCBgBI2AEjIARMAJGwAgYASPQIKA4gce7Xuh4dGlwSKMOEEGh4iQl83wer6rlubspz/ZVPCqLZgSMgBEwAkbACBgBI2AEjMBMCPAXefxFXPGLadpyOEBso1HpefwlgP8D9CpipTqyWEbACBgBI2AEjIARMAJG4NoIxAUkgsPZHkf7P42116uckG7vAAAAAElFTkSuQmCC\n", - "text/latex": "$\\displaystyle {{dst}_{(0,0)}} \\leftarrow \\left({{img}_{(1,0)}^{2}} w_{2} - 0.5 {{img}_{(1,1)}^{2}} - 0.5 {{img}_{(-1,1)}^{2}} + 0.5 {{img}_{(1,-1)}^{2}} - 0.5 {{img}_{(-1,-1)}^{2}} - {{img}_{(-1,0)}^{2}} w_{2}\\right)^{2}$" + "text/latex": [ + "$\\displaystyle {dst}_{(0,0)} \\leftarrow \\left({img}_{(1,0)}^{2} w_{2} - 0.5 {img}_{(1,1)}^{2} - 0.5 {img}_{(-1,1)}^{2} + 0.5 {img}_{(1,-1)}^{2} - 0.5 {img}_{(-1,-1)}^{2} - {img}_{(-1,0)}^{2} w_{2}\\right)^{2}$" + ], + "text/plain": [ + " 2\n", + "dst_C := (img_E__2â‹…wâ‚‚ - 0.5â‹…img_NE__2 - 0.5â‹…img_NW__2 + 0.5â‹…img_SE__2 - 0.5â‹…img_SW__2 - img_W__2â‹…wâ‚‚) " + ] }, "execution_count": 28, "metadata": {}, @@ -681,14 +910,11 @@ "metadata": {}, "outputs": [ { - "data": { - "text/plain": "<Figure size 1152x432 with 1 Axes>", - "image/png": "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\n" - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" + "name": "stdout", + "output_type": "stream", + "text": [ + "No requests installed\n" + ] } ], "source": [ @@ -713,8 +939,10 @@ "outputs": [ { "data": { - "text/plain": "<Figure size 1152x432 with 1 Axes>", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA64AAAFQCAYAAAC/ASMyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAACNbUlEQVR4nO39eYxkW34f+H1PrDf2iNyrsra3db9+vZJskZwWJXLUw3FLJkjJGNAk7BmOTLglmAQkQMaYkgFrLECAbGsZCzJot4YckgOJIk2KFDGgx6Q5NDkWhhx2t1qt7n7V3a9eVb3KPTP29d5Yjv/I/J26ERXLjf1m5vcDJCor1huRN27c3/n9zu8orTWIiIiIiIiI/Cqw7g0gIiIiIiIiGoeBKxEREREREfkaA1ciIiIiIiLyNQauRERERERE5GsMXImIiIiIiMjXGLgSERERERGRry0tcFVKfU4p9U2l1HtKqZ9Z1vMQERERERHRzaaWsY6rUioI4FsAfhDAAYA/AfDjWutvLPzJiIiIiIiI6EZbVsb1uwG8p7V+X2vtAPgXAH5kSc9FREREREREN1hoSY+7D+CF6/8HAL5n1I2VUotP+xIREREREZFfXGitt2e987IC14mUUp8H8Hn5//b2NjY3N9e1OURERERERLRg+Xwe5+fnAPB8nsdZVuB6COC+6//3ri4ztNZfAPAF4DLjurm5ibfffntJm0NERERERESr9vjxYwlc57KsOa5/AuAtpdRrSqkIgB8D8FtLei4iIiIiIiK6wZaScdVad5RSPw3g/w0gCODntdZfX8ZzERERERER0c22tDmuWuvfBvDby3p8IiIiIiIiuh2WVSpMREREREREtBAMXImIiIiIiMjXGLgSERERERGRrzFwJSIiIiIiIl9j4EpERERERES+xsCViIiIiIiIfI2BKxEREREREfkaA1ciIiIiIiLyNQauRERERERE5GsMXImIiIiIiMjXGLgSERERERGRrzFwJSIiIiIiIl9j4EpERERERES+xsCViIiIiIiIfI2BKxEREREREfkaA1ciIiIiIiLyNQauRERERERE5GsMXImIiIiIiMjXGLgSERERERGRrzFwJSIiIiIiIl9j4EpERERERES+xsCViIiIiIiIfI2BKxEREREREfkaA1ciIiIiIiLyNQauRERERERE5GsMXImIiIiIiMjX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8jUGrkRERERERORrDFyJiIiIiIjI1xi4EhERERERka8xcCUiIiIiIiJfY+BKREREREREvsbAlYiIiIiIiHyNgSsRERERERH5GgNXIiIiIiIi8jUGrkRERERERORrDFyJiIiIiIjI1xi4EhERERERka8xcCUiIiIiIiJfY+BKREREREREvsbAlYiIiIiIiHyNgSsRERERERH5GgNXIiIiIiIi8jUGrkRERERERORrDFyJiIiIiIjI1xi4EhERERERka8xcCUiIiIiIiJfY+BKREREREREvsbAlYiIiIiIiHyNgSsRERERERH52sTAVSl1Xyn1+0qpbyilvq6U+mtXl28opX5XKfXtq39zV5crpdQ/Vkq9p5T6qlLqO5f9IoiIiIiIiOjm8pJx7QD4G1rrdwB8L4CfUkq9A+BnAPye1votAL939X8A+PMA3rr6+TyAn134VhMREREREdGtMTFw1Vofa62/fPV7FcC7APYB/AiAX7y62S8C+ItXv/8IgF/Sl/4IQFYpdWfRG05ERERERES3w1RzXJVSjwB8B4A/BrCrtT6+uuoEwO7V7/sAXrjudnB1GREREREREdHUQl5vqJRKAvh1AH9da11RSpnrtNZaKaWneWKl1OdxWUpMRERERERENJKnjKtSKozLoPWfaa3/5dXFp1ICfPXv2dXlhwDuu+5+7+qyPlrrL2itP621/vSsG09EREREREQ338SMq7pMrf4cgHe11v/QddVvAfgJAH/v6t9/5br8p5VS/wLA9wAou0qKR8rn83j8+PGUm09ERERERER+dXFxsZDHUVqPr/BVSn0fgP8ewL8D0Lu6+G/hcp7rrwJ4AOA5gB/VWheuAt1/AuBzABoA/rLW+osTnmOqMmMiIiIiIiK6Vr40T7XtxMB1FZRS5wDqABYTjhNd2gL3KVoc7k+0aNynaJG4P9GicZ+iRdoCkNBab8/6AL4IXAFAKfVFznelReI+RYvE/YkWjfsULRL3J1o07lO0SIvYn6ZaDoeIiIiIiIho1Ri4EhERERERka/5KXD9wro3gG4c7lO0SNyfaNG4T9EicX+iReM+RYs09/7kmzmuRERERERERMP4KeNKRERERERE9ApfBK5Kqc8ppb6plHpPKfUz694e8j+l1M8rpc6UUl9zXbahlPpdpdS3r/7NXV2ulFL/+Gr/+qpS6jvXt+XkR0qp+0qp31dKfUMp9XWl1F+7upz7FM1EKWUppf5HpdS/vdqn/o9Xl7+mlPrjq33nV5RSkavLo1f/f+/q+kdrfQHkS0qpoFLq3yil/pur/3N/opkppZ4ppf6dUuorSqkvXl3G7z2amVIqq5T6NaXUY6XUu0qpf2+R+9TaA1elVBDA/w3AnwfwDoAfV0q9s96tomvgFwB8buCynwHwe1rrtwD83tX/gct9662rn88D+NkVbSNdHx0Af0Nr/Q6A7wXwU1fHIe5TNCsbwJ/TWn8SwKcAfE4p9b0A/k8A/pHW+k0ARQA/eXX7nwRQvLr8H13djmjQXwPwruv/3J9oXv++1vpTrmVK+L1H8/i/AvhvtdZvA/gkLo9XC9un1h64AvhuAO9prd/XWjsA/gWAH1nzNpHPaa3/EEBh4OIfAfCLV7//IoC/6Lr8l/SlPwKQVUrdWcmG0rWgtT7WWn/56vcqLg+0++A+RTO62jdqV/8NX/1oAH8OwK9dXT64T8m+9msAPquUUqvZWroOlFL3APxPAfyXV/9X4P5Ei8fvPZqJUioD4M8C+DkA0Fo7WusSFrhP+SFw3QfwwvX/g6vLiKa1q7U+vvr9BMDu1e/cx8izq5K67wDwx+A+RXO4Kuv8CoAzAL8L4AmAkta6c3UT935j9qmr68sANle6weR3/wWA/wxA7+r/m+D+RPPRAH5HKfUlpdTnry7j9x7N6jUA5wD+q6spDf+lUiqBBe5TfghciRZOX7bLZstsmopSKgng1wH8da11xX0d9ymalta6q7X+FIB7uKwuenu9W0TXlVLqhwCcaa2/tO5toRvl+7TW34nLks2fUkr9WfeV/N6jKYUAfCeAn9VafweAOl6WBQOYf5/yQ+B6COC+6//3ri4jmtaplBhc/Xt2dTn3MZpIKRXGZdD6z7TW//LqYu5TNLerUqnfB/Dv4bIUKnR1lXu/MfvU1fUZAPnVbin52J8G8MNKqWe4nFL153A5l4z7E81Ma3149e8ZgN/A5QAbv/doVgcADrTWf3z1/1/DZSC7sH3KD4HrnwB466ozXgTAjwH4rTVvE11PvwXgJ65+/wkA/8p1+X9y1b3sewGUXSULRDJX7OcAvKu1/oeuq7hP0UyUUttKqezV7zEAP4jLudO/D+A/urrZ4D4l+9p/BOC/01xona5orf+m1vqe1voRLs+T/jut9f8C3J9oRkqphFIqJb8D+A8BfA383qMZaa1PALxQSn346qLPAvgGFrhPKT8cx5RSfwGXczeCAH5ea/1317tF5HdKqV8G8AMAtgCcAvjbAH4TwK8CeADgOYAf1VoXroKSf4LLLsQNAH9Za/3FNWw2+ZRS6vsA/PcA/h1ezh/7W7ic58p9iqamlPoELptQBHE5SPyrWuu/o5R6HZcZsw0A/wbA/1JrbSulLAD/NS7nVxcA/JjW+v31bD35mVLqBwD8b7XWP8T9iWZ1te/8xtV/QwD+udb67yqlNsHvPZqRUupTuGwgFwHwPoC/jKvvQCxgn/JF4EpEREREREQ0ih9KhYmIiIiIiIhGYuBKREREREREvsbAlYiIiIiIiHyNgSsRERERERH5GgNXIiIiIiIi8jUGrkRERERERORrDFyJiIiIiIjI1xi4EhERERERka/9/wF/ZcHULakkhgAAAABJRU5ErkJggg==\n" + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] }, "metadata": { "needs_background": "light" @@ -745,8 +973,149 @@ "outputs": [ { "data": { - "text/plain": "<graphviz.files.Source at 0x7fa106bb71f0>", - "image/svg+xml": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Generated by graphviz version 2.43.0 (0)\n -->\n<!-- Title: %3 Pages: 1 -->\n<svg width=\"684pt\" height=\"391pt\"\n viewBox=\"0.00 0.00 684.00 390.75\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n<g id=\"graph0\" class=\"graph\" transform=\"scale(1.22 1.22) rotate(0) translate(4 472)\">\n<title>%3</title>\n<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-472 829.23,-472 829.23,4 -4,4\"/>\n<!-- 140329578519952 -->\n<g id=\"node1\" class=\"node\">\n<title>140329578519952</title>\n<ellipse fill=\"#a056db\" stroke=\"black\" cx=\"263.84\" cy=\"-450\" rx=\"134.58\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"263.84\" y=\"-446.3\" font-family=\"Times,serif\" font-size=\"14.00\">Func: kernel (dst,img,w_2)</text>\n</g>\n<!-- 140329578392784 -->\n<g id=\"node11\" class=\"node\">\n<title>140329578392784</title>\n<ellipse fill=\"#dbc256\" stroke=\"black\" cx=\"263.84\" cy=\"-378\" rx=\"36.29\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"263.84\" y=\"-374.3\" font-family=\"Times,serif\" font-size=\"14.00\">Block</text>\n</g>\n<!-- 140329578519952->140329578392784 -->\n<g id=\"edge10\" class=\"edge\">\n<title>140329578519952->140329578392784</title>\n<path fill=\"none\" stroke=\"black\" d=\"M263.84,-431.7C263.84,-423.98 263.84,-414.71 263.84,-406.11\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"267.34,-406.1 263.84,-396.1 260.34,-406.1 267.34,-406.1\"/>\n</g>\n<!-- 140329578493168 -->\n<g id=\"node2\" class=\"node\">\n<title>140329578493168</title>\n<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"175.84\" cy=\"-306\" rx=\"73.39\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"175.84\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\">_data_img_22</text>\n</g>\n<!-- 140329578389952 -->\n<g id=\"node3\" class=\"node\">\n<title>140329578389952</title>\n<ellipse fill=\"#3498db\" stroke=\"black\" cx=\"352.84\" cy=\"-306\" rx=\"85.59\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"352.84\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\">Loop over dim 0</text>\n</g>\n<!-- 140329578390240 -->\n<g id=\"node10\" class=\"node\">\n<title>140329578390240</title>\n<ellipse fill=\"#dbc256\" stroke=\"black\" cx=\"352.84\" cy=\"-234\" rx=\"36.29\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"352.84\" y=\"-230.3\" font-family=\"Times,serif\" font-size=\"14.00\">Block</text>\n</g>\n<!-- 140329578389952->140329578390240 -->\n<g id=\"edge7\" class=\"edge\">\n<title>140329578389952->140329578390240</title>\n<path fill=\"none\" stroke=\"black\" d=\"M352.84,-287.7C352.84,-279.98 352.84,-270.71 352.84,-262.11\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"356.34,-262.1 352.84,-252.1 349.34,-262.1 356.34,-262.1\"/>\n</g>\n<!-- 140329578494560 -->\n<g id=\"node4\" class=\"node\">\n<title>140329578494560</title>\n<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"70.84\" cy=\"-162\" rx=\"70.69\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"70.84\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">_data_dst_00</text>\n</g>\n<!-- 140329578492688 -->\n<g id=\"node5\" class=\"node\">\n<title>140329578492688</title>\n<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"249.84\" cy=\"-162\" rx=\"89.88\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"249.84\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">_data_img_22_01</text>\n</g>\n<!-- 140329578492544 -->\n<g id=\"node6\" class=\"node\">\n<title>140329578492544</title>\n<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"455.84\" cy=\"-162\" rx=\"98.58\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"455.84\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">_data_img_22_0m1</text>\n</g>\n<!-- 140329578390672 -->\n<g id=\"node7\" class=\"node\">\n<title>140329578390672</title>\n<ellipse fill=\"#3498db\" stroke=\"black\" cx=\"658.84\" cy=\"-162\" rx=\"85.59\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"658.84\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">Loop over dim 1</text>\n</g>\n<!-- 140329578520000 -->\n<g id=\"node9\" class=\"node\">\n<title>140329578520000</title>\n<ellipse fill=\"#dbc256\" stroke=\"black\" cx=\"658.84\" cy=\"-90\" rx=\"36.29\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"658.84\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">Block</text>\n</g>\n<!-- 140329578390672->140329578520000 -->\n<g id=\"edge2\" class=\"edge\">\n<title>140329578390672->140329578520000</title>\n<path fill=\"none\" stroke=\"black\" d=\"M658.84,-143.7C658.84,-135.98 658.84,-126.71 658.84,-118.11\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"662.34,-118.1 658.84,-108.1 655.34,-118.1 662.34,-118.1\"/>\n</g>\n<!-- 140329578519760 -->\n<g id=\"node8\" class=\"node\">\n<title>140329578519760</title>\n<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"658.84\" cy=\"-18\" rx=\"166.27\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"658.84\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">_data_dst_00[_stride_dst_1*ctr_1]</text>\n</g>\n<!-- 140329578520000->140329578519760 -->\n<g id=\"edge1\" class=\"edge\">\n<title>140329578520000->140329578519760</title>\n<path fill=\"none\" stroke=\"black\" d=\"M658.84,-71.7C658.84,-63.98 658.84,-54.71 658.84,-46.11\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"662.34,-46.1 658.84,-36.1 655.34,-46.1 662.34,-46.1\"/>\n</g>\n<!-- 140329578390240->140329578494560 -->\n<g id=\"edge3\" class=\"edge\">\n<title>140329578390240->140329578494560</title>\n<path fill=\"none\" stroke=\"black\" d=\"M321.04,-225.11C274.68,-213.6 187.72,-192.01 129.54,-177.57\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"130.29,-174.15 119.74,-175.14 128.61,-180.94 130.29,-174.15\"/>\n</g>\n<!-- 140329578390240->140329578492688 -->\n<g id=\"edge4\" class=\"edge\">\n<title>140329578390240->140329578492688</title>\n<path fill=\"none\" stroke=\"black\" d=\"M332,-218.83C317.82,-209.19 298.75,-196.24 282.56,-185.23\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"284.15,-182.08 273.91,-179.35 280.21,-187.87 284.15,-182.08\"/>\n</g>\n<!-- 140329578390240->140329578492544 -->\n<g id=\"edge5\" class=\"edge\">\n<title>140329578390240->140329578492544</title>\n<path fill=\"none\" stroke=\"black\" d=\"M373.69,-218.83C387.77,-209.26 406.67,-196.42 422.79,-185.46\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"425.11,-188.12 431.41,-179.61 421.17,-182.33 425.11,-188.12\"/>\n</g>\n<!-- 140329578390240->140329578390672 -->\n<g id=\"edge6\" class=\"edge\">\n<title>140329578390240->140329578390672</title>\n<path fill=\"none\" stroke=\"black\" d=\"M385.3,-225.58C434.58,-214.3 529.28,-192.64 593.27,-178\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"594.3,-181.35 603.27,-175.71 592.74,-174.53 594.3,-181.35\"/>\n</g>\n<!-- 140329578392784->140329578493168 -->\n<g id=\"edge8\" class=\"edge\">\n<title>140329578392784->140329578493168</title>\n<path fill=\"none\" stroke=\"black\" d=\"M245.18,-362.15C233.32,-352.72 217.72,-340.31 204.33,-329.66\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"206.33,-326.78 196.32,-323.29 201.97,-332.25 206.33,-326.78\"/>\n</g>\n<!-- 140329578392784->140329578389952 -->\n<g id=\"edge9\" class=\"edge\">\n<title>140329578392784->140329578389952</title>\n<path fill=\"none\" stroke=\"black\" d=\"M282.72,-362.15C294.63,-352.78 310.27,-340.49 323.75,-329.88\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"326.12,-332.47 331.82,-323.54 321.79,-326.97 326.12,-332.47\"/>\n</g>\n</g>\n</svg>\n" + "image/svg+xml": [ + "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n", + "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n", + " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n", + "<!-- Generated by graphviz version 2.50.0 (0)\n", + " -->\n", + "<!-- Pages: 1 -->\n", + "<svg width=\"684pt\" height=\"391pt\"\n", + " viewBox=\"0.00 0.00 684.00 390.75\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n", + "<g id=\"graph0\" class=\"graph\" transform=\"scale(0.82 0.82) rotate(0) translate(4 472)\">\n", + "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-472 829.23,-472 829.23,4 -4,4\"/>\n", + "<!-- 140467585313440 -->\n", + "<g id=\"node1\" class=\"node\">\n", + "<title>140467585313440</title>\n", + "<ellipse fill=\"#a056db\" stroke=\"black\" cx=\"263.84\" cy=\"-450\" rx=\"134.58\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"263.84\" y=\"-446.3\" font-family=\"Times,serif\" font-size=\"14.00\">Func: kernel (dst,img,w_2)</text>\n", + "</g>\n", + "<!-- 140467585884144 -->\n", + "<g id=\"node11\" class=\"node\">\n", + "<title>140467585884144</title>\n", + "<ellipse fill=\"#dbc256\" stroke=\"black\" cx=\"263.84\" cy=\"-378\" rx=\"36.29\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"263.84\" y=\"-374.3\" font-family=\"Times,serif\" font-size=\"14.00\">Block</text>\n", + "</g>\n", + "<!-- 140467585313440->140467585884144 -->\n", + "<g id=\"edge10\" class=\"edge\">\n", + "<title>140467585313440->140467585884144</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M263.84,-431.7C263.84,-423.98 263.84,-414.71 263.84,-406.11\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"267.34,-406.1 263.84,-396.1 260.34,-406.1 267.34,-406.1\"/>\n", + "</g>\n", + "<!-- 140467585881120 -->\n", + "<g id=\"node2\" class=\"node\">\n", + "<title>140467585881120</title>\n", + "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"175.84\" cy=\"-306\" rx=\"73.39\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"175.84\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\">_data_img_22</text>\n", + "</g>\n", + "<!-- 140467585885152 -->\n", + "<g id=\"node3\" class=\"node\">\n", + "<title>140467585885152</title>\n", + "<ellipse fill=\"#3498db\" stroke=\"black\" cx=\"352.84\" cy=\"-306\" rx=\"85.59\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"352.84\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\">Loop over dim 0</text>\n", + "</g>\n", + "<!-- 140467585885824 -->\n", + "<g id=\"node10\" class=\"node\">\n", + "<title>140467585885824</title>\n", + "<ellipse fill=\"#dbc256\" stroke=\"black\" cx=\"352.84\" cy=\"-234\" rx=\"36.29\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"352.84\" y=\"-230.3\" font-family=\"Times,serif\" font-size=\"14.00\">Block</text>\n", + "</g>\n", + "<!-- 140467585885152->140467585885824 -->\n", + "<g id=\"edge7\" class=\"edge\">\n", + "<title>140467585885152->140467585885824</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M352.84,-287.7C352.84,-279.98 352.84,-270.71 352.84,-262.11\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"356.34,-262.1 352.84,-252.1 349.34,-262.1 356.34,-262.1\"/>\n", + "</g>\n", + "<!-- 140467585883424 -->\n", + "<g id=\"node4\" class=\"node\">\n", + "<title>140467585883424</title>\n", + "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"70.84\" cy=\"-162\" rx=\"70.69\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"70.84\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">_data_dst_00</text>\n", + "</g>\n", + "<!-- 140467585879392 -->\n", + "<g id=\"node5\" class=\"node\">\n", + "<title>140467585879392</title>\n", + "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"249.84\" cy=\"-162\" rx=\"89.88\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"249.84\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">_data_img_22_01</text>\n", + "</g>\n", + "<!-- 140467585317616 -->\n", + "<g id=\"node6\" class=\"node\">\n", + "<title>140467585317616</title>\n", + "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"455.84\" cy=\"-162\" rx=\"98.58\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"455.84\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">_data_img_22_0m1</text>\n", + "</g>\n", + "<!-- 140467585884528 -->\n", + "<g id=\"node7\" class=\"node\">\n", + "<title>140467585884528</title>\n", + "<ellipse fill=\"#3498db\" stroke=\"black\" cx=\"658.84\" cy=\"-162\" rx=\"85.59\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"658.84\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">Loop over dim 1</text>\n", + "</g>\n", + "<!-- 140467585304800 -->\n", + "<g id=\"node9\" class=\"node\">\n", + "<title>140467585304800</title>\n", + "<ellipse fill=\"#dbc256\" stroke=\"black\" cx=\"658.84\" cy=\"-90\" rx=\"36.29\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"658.84\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">Block</text>\n", + "</g>\n", + "<!-- 140467585884528->140467585304800 -->\n", + "<g id=\"edge2\" class=\"edge\">\n", + "<title>140467585884528->140467585304800</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M658.84,-143.7C658.84,-135.98 658.84,-126.71 658.84,-118.11\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"662.34,-118.1 658.84,-108.1 655.34,-118.1 662.34,-118.1\"/>\n", + "</g>\n", + "<!-- 140467585316992 -->\n", + "<g id=\"node8\" class=\"node\">\n", + "<title>140467585316992</title>\n", + "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"658.84\" cy=\"-18\" rx=\"166.27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"658.84\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">_data_dst_00[_stride_dst_1*ctr_1]</text>\n", + "</g>\n", + "<!-- 140467585304800->140467585316992 -->\n", + "<g id=\"edge1\" class=\"edge\">\n", + "<title>140467585304800->140467585316992</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M658.84,-71.7C658.84,-63.98 658.84,-54.71 658.84,-46.11\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"662.34,-46.1 658.84,-36.1 655.34,-46.1 662.34,-46.1\"/>\n", + "</g>\n", + "<!-- 140467585885824->140467585883424 -->\n", + "<g id=\"edge3\" class=\"edge\">\n", + "<title>140467585885824->140467585883424</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M321.04,-225.11C274.68,-213.6 187.72,-192.01 129.54,-177.57\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"130.29,-174.15 119.74,-175.14 128.61,-180.94 130.29,-174.15\"/>\n", + "</g>\n", + "<!-- 140467585885824->140467585879392 -->\n", + "<g id=\"edge4\" class=\"edge\">\n", + "<title>140467585885824->140467585879392</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M332,-218.83C317.82,-209.19 298.75,-196.24 282.56,-185.23\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"284.15,-182.08 273.91,-179.35 280.21,-187.87 284.15,-182.08\"/>\n", + "</g>\n", + "<!-- 140467585885824->140467585317616 -->\n", + "<g id=\"edge5\" class=\"edge\">\n", + "<title>140467585885824->140467585317616</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M373.69,-218.83C387.77,-209.26 406.67,-196.42 422.79,-185.46\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"425.11,-188.12 431.41,-179.61 421.17,-182.33 425.11,-188.12\"/>\n", + "</g>\n", + "<!-- 140467585885824->140467585884528 -->\n", + "<g id=\"edge6\" class=\"edge\">\n", + "<title>140467585885824->140467585884528</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M385.3,-225.58C434.58,-214.3 529.28,-192.64 593.27,-178\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"594.3,-181.35 603.27,-175.71 592.74,-174.53 594.3,-181.35\"/>\n", + "</g>\n", + "<!-- 140467585884144->140467585881120 -->\n", + "<g id=\"edge8\" class=\"edge\">\n", + "<title>140467585884144->140467585881120</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M245.18,-362.15C233.32,-352.72 217.72,-340.31 204.33,-329.66\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"206.33,-326.78 196.32,-323.29 201.97,-332.25 206.33,-326.78\"/>\n", + "</g>\n", + "<!-- 140467585884144->140467585885152 -->\n", + "<g id=\"edge9\" class=\"edge\">\n", + "<title>140467585884144->140467585885152</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M282.72,-362.15C294.63,-352.78 310.27,-340.49 323.75,-329.88\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"326.12,-332.47 331.82,-323.54 321.79,-326.97 326.12,-332.47\"/>\n", + "</g>\n", + "</g>\n", + "</svg>\n" + ], + "text/plain": [ + "<graphviz.sources.Source at 0x7fc1285aff40>" + ] }, "execution_count": 32, "metadata": {}, @@ -771,16 +1140,124 @@ "outputs": [ { "data": { - "text/plain": "<IPython.core.display.HTML object>", - "text/html": "<style>pre { line-height: 125%; }\ntd.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\nspan.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\ntd.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\nspan.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n.highlight .hll { background-color: #ffffcc }\n.highlight { background: #f8f8f8; }\n.highlight .c { color: #408080; font-style: italic } /* Comment */\n.highlight .err { border: 1px solid #FF0000 } /* Error */\n.highlight .k { color: #008000; font-weight: bold } /* Keyword */\n.highlight .o { color: #666666 } /* Operator */\n.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\n.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */\n.highlight .cp { color: #BC7A00 } /* Comment.Preproc */\n.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\n.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */\n.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */\n.highlight .gd { color: #A00000 } /* Generic.Deleted */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #FF0000 } /* Generic.Error */\n.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n.highlight .gi { color: #00A000 } /* Generic.Inserted */\n.highlight .go { color: #888888 } /* Generic.Output */\n.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n.highlight .gt { color: #0044DD } /* Generic.Traceback */\n.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n.highlight .kp { color: #008000 } /* Keyword.Pseudo */\n.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n.highlight .kt { color: #B00040 } /* Keyword.Type */\n.highlight .m { color: #666666 } /* Literal.Number */\n.highlight .s { color: #BA2121 } /* Literal.String */\n.highlight .na { color: #7D9029 } /* Name.Attribute */\n.highlight .nb { color: #008000 } /* Name.Builtin */\n.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n.highlight .no { color: #880000 } /* Name.Constant */\n.highlight .nd { color: #AA22FF } /* Name.Decorator */\n.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */\n.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n.highlight .nf { color: #0000FF } /* Name.Function */\n.highlight .nl { color: #A0A000 } /* Name.Label */\n.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */\n.highlight .nv { color: #19177C } /* Name.Variable */\n.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n.highlight .w { color: #bbbbbb } /* Text.Whitespace */\n.highlight .mb { color: #666666 } /* Literal.Number.Bin */\n.highlight .mf { color: #666666 } /* Literal.Number.Float */\n.highlight .mh { color: #666666 } /* Literal.Number.Hex */\n.highlight .mi { color: #666666 } /* Literal.Number.Integer */\n.highlight .mo { color: #666666 } /* Literal.Number.Oct */\n.highlight .sa { color: #BA2121 } /* Literal.String.Affix */\n.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */\n.highlight .sc { color: #BA2121 } /* Literal.String.Char */\n.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */\n.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n.highlight .s2 { color: #BA2121 } /* Literal.String.Double */\n.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */\n.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n.highlight .sx { color: #008000 } /* Literal.String.Other */\n.highlight .sr { color: #BB6688 } /* Literal.String.Regex */\n.highlight .s1 { color: #BA2121 } /* Literal.String.Single */\n.highlight .ss { color: #19177C } /* Literal.String.Symbol */\n.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */\n.highlight .fm { color: #0000FF } /* Name.Function.Magic */\n.highlight .vc { color: #19177C } /* Name.Variable.Class */\n.highlight .vg { color: #19177C } /* Name.Variable.Global */\n.highlight .vi { color: #19177C } /* Name.Variable.Instance */\n.highlight .vm { color: #19177C } /* Name.Variable.Magic */\n.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */</style>" + "text/html": [ + "<style>pre { line-height: 125%; }\n", + "td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\n", + "span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\n", + "td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n", + "span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n", + ".highlight .hll { background-color: #ffffcc }\n", + ".highlight { background: #f8f8f8; }\n", + ".highlight .c { color: #3D7B7B; font-style: italic } /* Comment */\n", + ".highlight .err { border: 1px solid #FF0000 } /* Error */\n", + ".highlight .k { color: #008000; font-weight: bold } /* Keyword */\n", + ".highlight .o { color: #666666 } /* Operator */\n", + ".highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */\n", + ".highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */\n", + ".highlight .cp { color: #9C6500 } /* Comment.Preproc */\n", + ".highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */\n", + ".highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */\n", + ".highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */\n", + ".highlight .gd { color: #A00000 } /* Generic.Deleted */\n", + ".highlight .ge { font-style: italic } /* Generic.Emph */\n", + ".highlight .gr { color: #E40000 } /* Generic.Error */\n", + ".highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n", + ".highlight .gi { color: #008400 } /* Generic.Inserted */\n", + ".highlight .go { color: #717171 } /* Generic.Output */\n", + ".highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n", + ".highlight .gs { font-weight: bold } /* Generic.Strong */\n", + ".highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n", + ".highlight .gt { color: #0044DD } /* Generic.Traceback */\n", + ".highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n", + ".highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n", + ".highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n", + ".highlight .kp { color: #008000 } /* Keyword.Pseudo */\n", + ".highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n", + ".highlight .kt { color: #B00040 } /* Keyword.Type */\n", + ".highlight .m { color: #666666 } /* Literal.Number */\n", + ".highlight .s { color: #BA2121 } /* Literal.String */\n", + ".highlight .na { color: #687822 } /* Name.Attribute */\n", + ".highlight .nb { color: #008000 } /* Name.Builtin */\n", + ".highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n", + ".highlight .no { color: #880000 } /* Name.Constant */\n", + ".highlight .nd { color: #AA22FF } /* Name.Decorator */\n", + ".highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */\n", + ".highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */\n", + ".highlight .nf { color: #0000FF } /* Name.Function */\n", + ".highlight .nl { color: #767600 } /* Name.Label */\n", + ".highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n", + ".highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */\n", + ".highlight .nv { color: #19177C } /* Name.Variable */\n", + ".highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n", + ".highlight .w { color: #bbbbbb } /* Text.Whitespace */\n", + ".highlight .mb { color: #666666 } /* Literal.Number.Bin */\n", + ".highlight .mf { color: #666666 } /* Literal.Number.Float */\n", + ".highlight .mh { color: #666666 } /* Literal.Number.Hex */\n", + ".highlight .mi { color: #666666 } /* Literal.Number.Integer */\n", + ".highlight .mo { color: #666666 } /* Literal.Number.Oct */\n", + ".highlight .sa { color: #BA2121 } /* Literal.String.Affix */\n", + ".highlight .sb { color: #BA2121 } /* Literal.String.Backtick */\n", + ".highlight .sc { color: #BA2121 } /* Literal.String.Char */\n", + ".highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */\n", + ".highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n", + ".highlight .s2 { color: #BA2121 } /* Literal.String.Double */\n", + ".highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */\n", + ".highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */\n", + ".highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */\n", + ".highlight .sx { color: #008000 } /* Literal.String.Other */\n", + ".highlight .sr { color: #A45A77 } /* Literal.String.Regex */\n", + ".highlight .s1 { color: #BA2121 } /* Literal.String.Single */\n", + ".highlight .ss { color: #19177C } /* Literal.String.Symbol */\n", + ".highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */\n", + ".highlight .fm { color: #0000FF } /* Name.Function.Magic */\n", + ".highlight .vc { color: #19177C } /* Name.Variable.Class */\n", + ".highlight .vg { color: #19177C } /* Name.Variable.Global */\n", + ".highlight .vi { color: #19177C } /* Name.Variable.Instance */\n", + ".highlight .vm { color: #19177C } /* Name.Variable.Magic */\n", + ".highlight .il { color: #666666 } /* Literal.Number.Integer.Long */</style>" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] }, "metadata": {}, "output_type": "display_data" }, { "data": { - "text/plain": "FUNC_PREFIX void kernel(double * RESTRICT _data_dst, double * RESTRICT const _data_img, int64_t const _size_dst_0, int64_t const _size_dst_1, int64_t const _stride_dst_0, int64_t const _stride_dst_1, int64_t const _stride_img_0, int64_t const _stride_img_1, int64_t const _stride_img_2, double w_2)\n{\n double * RESTRICT _data_img_22 = _data_img + 2*_stride_img_2;\n for (int64_t ctr_0 = 1; ctr_0 < _size_dst_0 - 1; ctr_0 += 1)\n {\n double * RESTRICT _data_dst_00 = _data_dst + _stride_dst_0*ctr_0;\n double * RESTRICT _data_img_22_01 = _stride_img_0*ctr_0 + _stride_img_0 + _data_img_22;\n double * RESTRICT _data_img_22_0m1 = _stride_img_0*ctr_0 - _stride_img_0 + _data_img_22;\n for (int64_t ctr_1 = 1; ctr_1 < _size_dst_1 - 1; ctr_1 += 1)\n {\n _data_dst_00[_stride_dst_1*ctr_1] = ((w_2*_data_img_22_01[_stride_img_1*ctr_1] - w_2*_data_img_22_0m1[_stride_img_1*ctr_1] - 0.5*_data_img_22_01[_stride_img_1*ctr_1 + _stride_img_1] - 0.5*_data_img_22_0m1[_stride_img_1*ctr_1 + _stride_img_1] - 0.5*_data_img_22_0m1[_stride_img_1*ctr_1 - _stride_img_1] + 0.5*_data_img_22_01[_stride_img_1*ctr_1 - _stride_img_1])*(w_2*_data_img_22_01[_stride_img_1*ctr_1] - w_2*_data_img_22_0m1[_stride_img_1*ctr_1] - 0.5*_data_img_22_01[_stride_img_1*ctr_1 + _stride_img_1] - 0.5*_data_img_22_0m1[_stride_img_1*ctr_1 + _stride_img_1] - 0.5*_data_img_22_0m1[_stride_img_1*ctr_1 - _stride_img_1] + 0.5*_data_img_22_01[_stride_img_1*ctr_1 - _stride_img_1]));\n }\n }\n}", - "text/html": "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span> <span class=\"kt\">void</span> <span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_dst</span><span class=\"p\">,</span> <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"k\">const</span> <span class=\"n\">_data_img</span><span class=\"p\">,</span> <span class=\"kt\">int64_t</span> <span class=\"k\">const</span> <span class=\"n\">_size_dst_0</span><span class=\"p\">,</span> <span class=\"kt\">int64_t</span> <span class=\"k\">const</span> <span class=\"n\">_size_dst_1</span><span class=\"p\">,</span> <span class=\"kt\">int64_t</span> <span class=\"k\">const</span> <span class=\"n\">_stride_dst_0</span><span class=\"p\">,</span> <span class=\"kt\">int64_t</span> <span class=\"k\">const</span> <span class=\"n\">_stride_dst_1</span><span class=\"p\">,</span> <span class=\"kt\">int64_t</span> <span class=\"k\">const</span> <span class=\"n\">_stride_img_0</span><span class=\"p\">,</span> <span class=\"kt\">int64_t</span> <span class=\"k\">const</span> <span class=\"n\">_stride_img_1</span><span class=\"p\">,</span> <span class=\"kt\">int64_t</span> <span class=\"k\">const</span> <span class=\"n\">_stride_img_2</span><span class=\"p\">,</span> <span class=\"kt\">double</span> <span class=\"n\">w_2</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_img_22</span> <span class=\"o\">=</span> <span class=\"n\">_data_img</span> <span class=\"o\">+</span> <span class=\"mi\">2</span><span class=\"o\">*</span><span class=\"n\">_stride_img_2</span><span class=\"p\">;</span>\n <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"kt\">int64_t</span> <span class=\"n\">ctr_0</span> <span class=\"o\">=</span> <span class=\"mi\">1</span><span class=\"p\">;</span> <span class=\"n\">ctr_0</span> <span class=\"o\"><</span> <span class=\"n\">_size_dst_0</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">;</span> <span class=\"n\">ctr_0</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n <span class=\"p\">{</span>\n <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_dst_00</span> <span class=\"o\">=</span> <span class=\"n\">_data_dst</span> <span class=\"o\">+</span> <span class=\"n\">_stride_dst_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span>\n <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_img_22_01</span> <span class=\"o\">=</span> <span class=\"n\">_stride_img_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">+</span> <span class=\"n\">_stride_img_0</span> <span class=\"o\">+</span> <span class=\"n\">_data_img_22</span><span class=\"p\">;</span>\n <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_img_22_0m1</span> <span class=\"o\">=</span> <span class=\"n\">_stride_img_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">-</span> <span class=\"n\">_stride_img_0</span> <span class=\"o\">+</span> <span class=\"n\">_data_img_22</span><span class=\"p\">;</span>\n <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"kt\">int64_t</span> <span class=\"n\">ctr_1</span> <span class=\"o\">=</span> <span class=\"mi\">1</span><span class=\"p\">;</span> <span class=\"n\">ctr_1</span> <span class=\"o\"><</span> <span class=\"n\">_size_dst_1</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">;</span> <span class=\"n\">ctr_1</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n <span class=\"p\">{</span>\n <span class=\"n\">_data_dst_00</span><span class=\"p\">[</span><span class=\"n\">_stride_dst_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">((</span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">+</span> <span class=\"n\">_stride_img_1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">+</span> <span class=\"n\">_stride_img_1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">-</span> <span class=\"n\">_stride_img_1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">-</span> <span class=\"n\">_stride_img_1</span><span class=\"p\">])</span><span class=\"o\">*</span><span class=\"p\">(</span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">+</span> <span class=\"n\">_stride_img_1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">+</span> <span class=\"n\">_stride_img_1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">-</span> <span class=\"n\">_stride_img_1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">-</span> <span class=\"n\">_stride_img_1</span><span class=\"p\">]));</span>\n <span class=\"p\">}</span>\n <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</pre></div>\n" + "text/html": [ + "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span><span class=\"w\"> </span><span class=\"kt\">void</span><span class=\"w\"> </span><span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_data_img</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_size_dst_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_size_dst_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_img_2</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">w_2</span><span class=\"p\">)</span><span class=\"w\"></span>\n", + "<span class=\"p\">{</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_img_22</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_img</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">2</span><span class=\"o\">*</span><span class=\"n\">_stride_img_2</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"n\">_size_dst_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_img_22_01</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_data_img_22</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_img_22_0m1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_data_img_22</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"n\">_size_dst_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"p\">[</span><span class=\"n\">_stride_dst_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">pow</span><span class=\"p\">(</span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"mf\">-1.0</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">],</span><span class=\"w\"> </span><span class=\"mi\">2</span><span class=\"p\">);</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", + "<span class=\"p\">}</span><span class=\"w\"></span>\n", + "</pre></div>\n" + ], + "text/plain": [ + "FUNC_PREFIX void kernel(double * RESTRICT _data_dst, double * RESTRICT const _data_img, int64_t const _size_dst_0, int64_t const _size_dst_1, int64_t const _stride_dst_0, int64_t const _stride_dst_1, int64_t const _stride_img_0, int64_t const _stride_img_1, int64_t const _stride_img_2, double w_2)\n", + "{\n", + " double * RESTRICT _data_img_22 = _data_img + 2*_stride_img_2;\n", + " for (int64_t ctr_0 = 1; ctr_0 < _size_dst_0 - 1; ctr_0 += 1)\n", + " {\n", + " double * RESTRICT _data_dst_00 = _data_dst + _stride_dst_0*ctr_0;\n", + " double * RESTRICT _data_img_22_01 = _stride_img_0*ctr_0 + _stride_img_0 + _data_img_22;\n", + " double * RESTRICT _data_img_22_0m1 = _stride_img_0*ctr_0 - _stride_img_0 + _data_img_22;\n", + " for (int64_t ctr_1 = 1; ctr_1 < _size_dst_1 - 1; ctr_1 += 1)\n", + " {\n", + " _data_dst_00[_stride_dst_1*ctr_1] = pow(w_2*-1.0*_data_img_22_0m1[_stride_img_1*ctr_1] + w_2*_data_img_22_01[_stride_img_1*ctr_1] - 0.5*_data_img_22_01[_stride_img_1*ctr_1 + _stride_img_1] - 0.5*_data_img_22_0m1[_stride_img_1*ctr_1 + _stride_img_1] - 0.5*_data_img_22_0m1[_stride_img_1*ctr_1 - _stride_img_1] + 0.5*_data_img_22_01[_stride_img_1*ctr_1 - _stride_img_1], 2);\n", + " }\n", + " }\n", + "}" + ] }, "metadata": {}, "output_type": "display_data" @@ -804,16 +1281,132 @@ "outputs": [ { "data": { - "text/plain": "<IPython.core.display.HTML object>", - "text/html": "<style>pre { line-height: 125%; }\ntd.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\nspan.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\ntd.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\nspan.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n.highlight .hll { background-color: #ffffcc }\n.highlight { background: #f8f8f8; }\n.highlight .c { color: #408080; font-style: italic } /* Comment */\n.highlight .err { border: 1px solid #FF0000 } /* Error */\n.highlight .k { color: #008000; font-weight: bold } /* Keyword */\n.highlight .o { color: #666666 } /* Operator */\n.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\n.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */\n.highlight .cp { color: #BC7A00 } /* Comment.Preproc */\n.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\n.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */\n.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */\n.highlight .gd { color: #A00000 } /* Generic.Deleted */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #FF0000 } /* Generic.Error */\n.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n.highlight .gi { color: #00A000 } /* Generic.Inserted */\n.highlight .go { color: #888888 } /* Generic.Output */\n.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n.highlight .gt { color: #0044DD } /* Generic.Traceback */\n.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n.highlight .kp { color: #008000 } /* Keyword.Pseudo */\n.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n.highlight .kt { color: #B00040 } /* Keyword.Type */\n.highlight .m { color: #666666 } /* Literal.Number */\n.highlight .s { color: #BA2121 } /* Literal.String */\n.highlight .na { color: #7D9029 } /* Name.Attribute */\n.highlight .nb { color: #008000 } /* Name.Builtin */\n.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n.highlight .no { color: #880000 } /* Name.Constant */\n.highlight .nd { color: #AA22FF } /* Name.Decorator */\n.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */\n.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n.highlight .nf { color: #0000FF } /* Name.Function */\n.highlight .nl { color: #A0A000 } /* Name.Label */\n.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */\n.highlight .nv { color: #19177C } /* Name.Variable */\n.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n.highlight .w { color: #bbbbbb } /* Text.Whitespace */\n.highlight .mb { color: #666666 } /* Literal.Number.Bin */\n.highlight .mf { color: #666666 } /* Literal.Number.Float */\n.highlight .mh { color: #666666 } /* Literal.Number.Hex */\n.highlight .mi { color: #666666 } /* Literal.Number.Integer */\n.highlight .mo { color: #666666 } /* Literal.Number.Oct */\n.highlight .sa { color: #BA2121 } /* Literal.String.Affix */\n.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */\n.highlight .sc { color: #BA2121 } /* Literal.String.Char */\n.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */\n.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n.highlight .s2 { color: #BA2121 } /* Literal.String.Double */\n.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */\n.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n.highlight .sx { color: #008000 } /* Literal.String.Other */\n.highlight .sr { color: #BB6688 } /* Literal.String.Regex */\n.highlight .s1 { color: #BA2121 } /* Literal.String.Single */\n.highlight .ss { color: #19177C } /* Literal.String.Symbol */\n.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */\n.highlight .fm { color: #0000FF } /* Name.Function.Magic */\n.highlight .vc { color: #19177C } /* Name.Variable.Class */\n.highlight .vg { color: #19177C } /* Name.Variable.Global */\n.highlight .vi { color: #19177C } /* Name.Variable.Instance */\n.highlight .vm { color: #19177C } /* Name.Variable.Magic */\n.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */</style>" + "text/html": [ + "<style>pre { line-height: 125%; }\n", + "td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\n", + "span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\n", + "td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n", + "span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n", + ".highlight .hll { background-color: #ffffcc }\n", + ".highlight { background: #f8f8f8; }\n", + ".highlight .c { color: #3D7B7B; font-style: italic } /* Comment */\n", + ".highlight .err { border: 1px solid #FF0000 } /* Error */\n", + ".highlight .k { color: #008000; font-weight: bold } /* Keyword */\n", + ".highlight .o { color: #666666 } /* Operator */\n", + ".highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */\n", + ".highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */\n", + ".highlight .cp { color: #9C6500 } /* Comment.Preproc */\n", + ".highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */\n", + ".highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */\n", + ".highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */\n", + ".highlight .gd { color: #A00000 } /* Generic.Deleted */\n", + ".highlight .ge { font-style: italic } /* Generic.Emph */\n", + ".highlight .gr { color: #E40000 } /* Generic.Error */\n", + ".highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n", + ".highlight .gi { color: #008400 } /* Generic.Inserted */\n", + ".highlight .go { color: #717171 } /* Generic.Output */\n", + ".highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n", + ".highlight .gs { font-weight: bold } /* Generic.Strong */\n", + ".highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n", + ".highlight .gt { color: #0044DD } /* Generic.Traceback */\n", + ".highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n", + ".highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n", + ".highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n", + ".highlight .kp { color: #008000 } /* Keyword.Pseudo */\n", + ".highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n", + ".highlight .kt { color: #B00040 } /* Keyword.Type */\n", + ".highlight .m { color: #666666 } /* Literal.Number */\n", + ".highlight .s { color: #BA2121 } /* Literal.String */\n", + ".highlight .na { color: #687822 } /* Name.Attribute */\n", + ".highlight .nb { color: #008000 } /* Name.Builtin */\n", + ".highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n", + ".highlight .no { color: #880000 } /* Name.Constant */\n", + ".highlight .nd { color: #AA22FF } /* Name.Decorator */\n", + ".highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */\n", + ".highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */\n", + ".highlight .nf { color: #0000FF } /* Name.Function */\n", + ".highlight .nl { color: #767600 } /* Name.Label */\n", + ".highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n", + ".highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */\n", + ".highlight .nv { color: #19177C } /* Name.Variable */\n", + ".highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n", + ".highlight .w { color: #bbbbbb } /* Text.Whitespace */\n", + ".highlight .mb { color: #666666 } /* Literal.Number.Bin */\n", + ".highlight .mf { color: #666666 } /* Literal.Number.Float */\n", + ".highlight .mh { color: #666666 } /* Literal.Number.Hex */\n", + ".highlight .mi { color: #666666 } /* Literal.Number.Integer */\n", + ".highlight .mo { color: #666666 } /* Literal.Number.Oct */\n", + ".highlight .sa { color: #BA2121 } /* Literal.String.Affix */\n", + ".highlight .sb { color: #BA2121 } /* Literal.String.Backtick */\n", + ".highlight .sc { color: #BA2121 } /* Literal.String.Char */\n", + ".highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */\n", + ".highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n", + ".highlight .s2 { color: #BA2121 } /* Literal.String.Double */\n", + ".highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */\n", + ".highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */\n", + ".highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */\n", + ".highlight .sx { color: #008000 } /* Literal.String.Other */\n", + ".highlight .sr { color: #A45A77 } /* Literal.String.Regex */\n", + ".highlight .s1 { color: #BA2121 } /* Literal.String.Single */\n", + ".highlight .ss { color: #19177C } /* Literal.String.Symbol */\n", + ".highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */\n", + ".highlight .fm { color: #0000FF } /* Name.Function.Magic */\n", + ".highlight .vc { color: #19177C } /* Name.Variable.Class */\n", + ".highlight .vg { color: #19177C } /* Name.Variable.Global */\n", + ".highlight .vi { color: #19177C } /* Name.Variable.Instance */\n", + ".highlight .vm { color: #19177C } /* Name.Variable.Magic */\n", + ".highlight .il { color: #666666 } /* Literal.Number.Integer.Long */</style>" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] }, "metadata": {}, "output_type": "display_data" }, { "data": { - "text/plain": "FUNC_PREFIX void kernel(double * RESTRICT _data_dst, double * RESTRICT const _data_img, int64_t const _size_dst_0, int64_t const _size_dst_1, int64_t const _stride_dst_0, int64_t const _stride_dst_1, int64_t const _stride_img_0, int64_t const _stride_img_1, int64_t const _stride_img_2, double w_2)\n{\n #pragma omp parallel num_threads(2)\n {\n double * RESTRICT _data_img_22 = _data_img + 2*_stride_img_2;\n #pragma omp for schedule(static)\n for (int64_t ctr_0 = 1; ctr_0 < _size_dst_0 - 1; ctr_0 += 1)\n {\n double * RESTRICT _data_dst_00 = _data_dst + _stride_dst_0*ctr_0;\n double * RESTRICT _data_img_22_01 = _stride_img_0*ctr_0 + _stride_img_0 + _data_img_22;\n double * RESTRICT _data_img_22_0m1 = _stride_img_0*ctr_0 - _stride_img_0 + _data_img_22;\n for (int64_t ctr_1 = 1; ctr_1 < _size_dst_1 - 1; ctr_1 += 1)\n {\n _data_dst_00[_stride_dst_1*ctr_1] = ((w_2*_data_img_22_01[_stride_img_1*ctr_1] - w_2*_data_img_22_0m1[_stride_img_1*ctr_1] - 0.5*_data_img_22_01[_stride_img_1*ctr_1 + _stride_img_1] - 0.5*_data_img_22_0m1[_stride_img_1*ctr_1 + _stride_img_1] - 0.5*_data_img_22_0m1[_stride_img_1*ctr_1 - _stride_img_1] + 0.5*_data_img_22_01[_stride_img_1*ctr_1 - _stride_img_1])*(w_2*_data_img_22_01[_stride_img_1*ctr_1] - w_2*_data_img_22_0m1[_stride_img_1*ctr_1] - 0.5*_data_img_22_01[_stride_img_1*ctr_1 + _stride_img_1] - 0.5*_data_img_22_0m1[_stride_img_1*ctr_1 + _stride_img_1] - 0.5*_data_img_22_0m1[_stride_img_1*ctr_1 - _stride_img_1] + 0.5*_data_img_22_01[_stride_img_1*ctr_1 - _stride_img_1]));\n }\n }\n }\n}", - "text/html": "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span> <span class=\"kt\">void</span> <span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_dst</span><span class=\"p\">,</span> <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"k\">const</span> <span class=\"n\">_data_img</span><span class=\"p\">,</span> <span class=\"kt\">int64_t</span> <span class=\"k\">const</span> <span class=\"n\">_size_dst_0</span><span class=\"p\">,</span> <span class=\"kt\">int64_t</span> <span class=\"k\">const</span> <span class=\"n\">_size_dst_1</span><span class=\"p\">,</span> <span class=\"kt\">int64_t</span> <span class=\"k\">const</span> <span class=\"n\">_stride_dst_0</span><span class=\"p\">,</span> <span class=\"kt\">int64_t</span> <span class=\"k\">const</span> <span class=\"n\">_stride_dst_1</span><span class=\"p\">,</span> <span class=\"kt\">int64_t</span> <span class=\"k\">const</span> <span class=\"n\">_stride_img_0</span><span class=\"p\">,</span> <span class=\"kt\">int64_t</span> <span class=\"k\">const</span> <span class=\"n\">_stride_img_1</span><span class=\"p\">,</span> <span class=\"kt\">int64_t</span> <span class=\"k\">const</span> <span class=\"n\">_stride_img_2</span><span class=\"p\">,</span> <span class=\"kt\">double</span> <span class=\"n\">w_2</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n <span class=\"cp\">#pragma omp parallel num_threads(2)</span>\n <span class=\"p\">{</span>\n <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_img_22</span> <span class=\"o\">=</span> <span class=\"n\">_data_img</span> <span class=\"o\">+</span> <span class=\"mi\">2</span><span class=\"o\">*</span><span class=\"n\">_stride_img_2</span><span class=\"p\">;</span>\n <span class=\"cp\">#pragma omp for schedule(static)</span>\n <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"kt\">int64_t</span> <span class=\"n\">ctr_0</span> <span class=\"o\">=</span> <span class=\"mi\">1</span><span class=\"p\">;</span> <span class=\"n\">ctr_0</span> <span class=\"o\"><</span> <span class=\"n\">_size_dst_0</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">;</span> <span class=\"n\">ctr_0</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n <span class=\"p\">{</span>\n <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_dst_00</span> <span class=\"o\">=</span> <span class=\"n\">_data_dst</span> <span class=\"o\">+</span> <span class=\"n\">_stride_dst_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span>\n <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_img_22_01</span> <span class=\"o\">=</span> <span class=\"n\">_stride_img_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">+</span> <span class=\"n\">_stride_img_0</span> <span class=\"o\">+</span> <span class=\"n\">_data_img_22</span><span class=\"p\">;</span>\n <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_img_22_0m1</span> <span class=\"o\">=</span> <span class=\"n\">_stride_img_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">-</span> <span class=\"n\">_stride_img_0</span> <span class=\"o\">+</span> <span class=\"n\">_data_img_22</span><span class=\"p\">;</span>\n <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"kt\">int64_t</span> <span class=\"n\">ctr_1</span> <span class=\"o\">=</span> <span class=\"mi\">1</span><span class=\"p\">;</span> <span class=\"n\">ctr_1</span> <span class=\"o\"><</span> <span class=\"n\">_size_dst_1</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">;</span> <span class=\"n\">ctr_1</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n <span class=\"p\">{</span>\n <span class=\"n\">_data_dst_00</span><span class=\"p\">[</span><span class=\"n\">_stride_dst_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">((</span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">+</span> <span class=\"n\">_stride_img_1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">+</span> <span class=\"n\">_stride_img_1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">-</span> <span class=\"n\">_stride_img_1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">-</span> <span class=\"n\">_stride_img_1</span><span class=\"p\">])</span><span class=\"o\">*</span><span class=\"p\">(</span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">+</span> <span class=\"n\">_stride_img_1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">+</span> <span class=\"n\">_stride_img_1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">-</span> <span class=\"n\">_stride_img_1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">-</span> <span class=\"n\">_stride_img_1</span><span class=\"p\">]));</span>\n <span class=\"p\">}</span>\n <span class=\"p\">}</span>\n <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</pre></div>\n" + "text/html": [ + "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span><span class=\"w\"> </span><span class=\"kt\">void</span><span class=\"w\"> </span><span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_data_img</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_size_dst_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_size_dst_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_img_2</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">w_2</span><span class=\"p\">)</span><span class=\"w\"></span>\n", + "<span class=\"p\">{</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"cp\">#pragma omp parallel num_threads(2)</span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_img_22</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_img</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">2</span><span class=\"o\">*</span><span class=\"n\">_stride_img_2</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"cp\">#pragma omp for schedule(static)</span>\n", + "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"n\">_size_dst_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_img_22_01</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_data_img_22</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_img_22_0m1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_data_img_22</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"n\">_size_dst_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"p\">[</span><span class=\"n\">_stride_dst_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">pow</span><span class=\"p\">(</span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"mf\">-1.0</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">],</span><span class=\"w\"> </span><span class=\"mi\">2</span><span class=\"p\">);</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", + "<span class=\"p\">}</span><span class=\"w\"></span>\n", + "</pre></div>\n" + ], + "text/plain": [ + "FUNC_PREFIX void kernel(double * RESTRICT _data_dst, double * RESTRICT const _data_img, int64_t const _size_dst_0, int64_t const _size_dst_1, int64_t const _stride_dst_0, int64_t const _stride_dst_1, int64_t const _stride_img_0, int64_t const _stride_img_1, int64_t const _stride_img_2, double w_2)\n", + "{\n", + " #pragma omp parallel num_threads(2)\n", + " {\n", + " double * RESTRICT _data_img_22 = _data_img + 2*_stride_img_2;\n", + " #pragma omp for schedule(static)\n", + " for (int64_t ctr_0 = 1; ctr_0 < _size_dst_0 - 1; ctr_0 += 1)\n", + " {\n", + " double * RESTRICT _data_dst_00 = _data_dst + _stride_dst_0*ctr_0;\n", + " double * RESTRICT _data_img_22_01 = _stride_img_0*ctr_0 + _stride_img_0 + _data_img_22;\n", + " double * RESTRICT _data_img_22_0m1 = _stride_img_0*ctr_0 - _stride_img_0 + _data_img_22;\n", + " for (int64_t ctr_1 = 1; ctr_1 < _size_dst_1 - 1; ctr_1 += 1)\n", + " {\n", + " _data_dst_00[_stride_dst_1*ctr_1] = pow(w_2*-1.0*_data_img_22_0m1[_stride_img_1*ctr_1] + w_2*_data_img_22_01[_stride_img_1*ctr_1] - 0.5*_data_img_22_01[_stride_img_1*ctr_1 + _stride_img_1] - 0.5*_data_img_22_0m1[_stride_img_1*ctr_1 + _stride_img_1] - 0.5*_data_img_22_0m1[_stride_img_1*ctr_1 - _stride_img_1] + 0.5*_data_img_22_01[_stride_img_1*ctr_1 - _stride_img_1], 2);\n", + " }\n", + " }\n", + " }\n", + "}" + ] }, "metadata": {}, "output_type": "display_data" @@ -832,7 +1425,9 @@ "outputs": [ { "data": { - "text/plain": "False" + "text/plain": [ + "False" + ] }, "execution_count": 35, "metadata": {}, @@ -842,7 +1437,7 @@ "source": [ "loops = list(ast.atoms(ps.astnodes.LoopOverCoordinate))\n", "l1 = loops[0]\n", - "l1.prefix_lines.append(\"#pragma someting\")\n", + "l1.prefix_lines.append(\"#pragma something\")\n", "l1.is_outermost_loop" ] }, @@ -863,16 +1458,124 @@ "outputs": [ { "data": { - "text/plain": "<IPython.core.display.HTML object>", - "text/html": "<style>pre { line-height: 125%; }\ntd.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\nspan.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\ntd.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\nspan.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n.highlight .hll { background-color: #ffffcc }\n.highlight { background: #f8f8f8; }\n.highlight .c { color: #408080; font-style: italic } /* Comment */\n.highlight .err { border: 1px solid #FF0000 } /* Error */\n.highlight .k { color: #008000; font-weight: bold } /* Keyword */\n.highlight .o { color: #666666 } /* Operator */\n.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\n.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */\n.highlight .cp { color: #BC7A00 } /* Comment.Preproc */\n.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\n.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */\n.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */\n.highlight .gd { color: #A00000 } /* Generic.Deleted */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #FF0000 } /* Generic.Error */\n.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n.highlight .gi { color: #00A000 } /* Generic.Inserted */\n.highlight .go { color: #888888 } /* Generic.Output */\n.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n.highlight .gt { color: #0044DD } /* Generic.Traceback */\n.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n.highlight .kp { color: #008000 } /* Keyword.Pseudo */\n.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n.highlight .kt { color: #B00040 } /* Keyword.Type */\n.highlight .m { color: #666666 } /* Literal.Number */\n.highlight .s { color: #BA2121 } /* Literal.String */\n.highlight .na { color: #7D9029 } /* Name.Attribute */\n.highlight .nb { color: #008000 } /* Name.Builtin */\n.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n.highlight .no { color: #880000 } /* Name.Constant */\n.highlight .nd { color: #AA22FF } /* Name.Decorator */\n.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */\n.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n.highlight .nf { color: #0000FF } /* Name.Function */\n.highlight .nl { color: #A0A000 } /* Name.Label */\n.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */\n.highlight .nv { color: #19177C } /* Name.Variable */\n.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n.highlight .w { color: #bbbbbb } /* Text.Whitespace */\n.highlight .mb { color: #666666 } /* Literal.Number.Bin */\n.highlight .mf { color: #666666 } /* Literal.Number.Float */\n.highlight .mh { color: #666666 } /* Literal.Number.Hex */\n.highlight .mi { color: #666666 } /* Literal.Number.Integer */\n.highlight .mo { color: #666666 } /* Literal.Number.Oct */\n.highlight .sa { color: #BA2121 } /* Literal.String.Affix */\n.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */\n.highlight .sc { color: #BA2121 } /* Literal.String.Char */\n.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */\n.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n.highlight .s2 { color: #BA2121 } /* Literal.String.Double */\n.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */\n.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n.highlight .sx { color: #008000 } /* Literal.String.Other */\n.highlight .sr { color: #BB6688 } /* Literal.String.Regex */\n.highlight .s1 { color: #BA2121 } /* Literal.String.Single */\n.highlight .ss { color: #19177C } /* Literal.String.Symbol */\n.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */\n.highlight .fm { color: #0000FF } /* Name.Function.Magic */\n.highlight .vc { color: #19177C } /* Name.Variable.Class */\n.highlight .vg { color: #19177C } /* Name.Variable.Global */\n.highlight .vi { color: #19177C } /* Name.Variable.Instance */\n.highlight .vm { color: #19177C } /* Name.Variable.Magic */\n.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */</style>" + "text/html": [ + "<style>pre { line-height: 125%; }\n", + "td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\n", + "span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\n", + "td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n", + "span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n", + ".highlight .hll { background-color: #ffffcc }\n", + ".highlight { background: #f8f8f8; }\n", + ".highlight .c { color: #3D7B7B; font-style: italic } /* Comment */\n", + ".highlight .err { border: 1px solid #FF0000 } /* Error */\n", + ".highlight .k { color: #008000; font-weight: bold } /* Keyword */\n", + ".highlight .o { color: #666666 } /* Operator */\n", + ".highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */\n", + ".highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */\n", + ".highlight .cp { color: #9C6500 } /* Comment.Preproc */\n", + ".highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */\n", + ".highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */\n", + ".highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */\n", + ".highlight .gd { color: #A00000 } /* Generic.Deleted */\n", + ".highlight .ge { font-style: italic } /* Generic.Emph */\n", + ".highlight .gr { color: #E40000 } /* Generic.Error */\n", + ".highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n", + ".highlight .gi { color: #008400 } /* Generic.Inserted */\n", + ".highlight .go { color: #717171 } /* Generic.Output */\n", + ".highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n", + ".highlight .gs { font-weight: bold } /* Generic.Strong */\n", + ".highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n", + ".highlight .gt { color: #0044DD } /* Generic.Traceback */\n", + ".highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n", + ".highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n", + ".highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n", + ".highlight .kp { color: #008000 } /* Keyword.Pseudo */\n", + ".highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n", + ".highlight .kt { color: #B00040 } /* Keyword.Type */\n", + ".highlight .m { color: #666666 } /* Literal.Number */\n", + ".highlight .s { color: #BA2121 } /* Literal.String */\n", + ".highlight .na { color: #687822 } /* Name.Attribute */\n", + ".highlight .nb { color: #008000 } /* Name.Builtin */\n", + ".highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n", + ".highlight .no { color: #880000 } /* Name.Constant */\n", + ".highlight .nd { color: #AA22FF } /* Name.Decorator */\n", + ".highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */\n", + ".highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */\n", + ".highlight .nf { color: #0000FF } /* Name.Function */\n", + ".highlight .nl { color: #767600 } /* Name.Label */\n", + ".highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n", + ".highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */\n", + ".highlight .nv { color: #19177C } /* Name.Variable */\n", + ".highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n", + ".highlight .w { color: #bbbbbb } /* Text.Whitespace */\n", + ".highlight .mb { color: #666666 } /* Literal.Number.Bin */\n", + ".highlight .mf { color: #666666 } /* Literal.Number.Float */\n", + ".highlight .mh { color: #666666 } /* Literal.Number.Hex */\n", + ".highlight .mi { color: #666666 } /* Literal.Number.Integer */\n", + ".highlight .mo { color: #666666 } /* Literal.Number.Oct */\n", + ".highlight .sa { color: #BA2121 } /* Literal.String.Affix */\n", + ".highlight .sb { color: #BA2121 } /* Literal.String.Backtick */\n", + ".highlight .sc { color: #BA2121 } /* Literal.String.Char */\n", + ".highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */\n", + ".highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n", + ".highlight .s2 { color: #BA2121 } /* Literal.String.Double */\n", + ".highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */\n", + ".highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */\n", + ".highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */\n", + ".highlight .sx { color: #008000 } /* Literal.String.Other */\n", + ".highlight .sr { color: #A45A77 } /* Literal.String.Regex */\n", + ".highlight .s1 { color: #BA2121 } /* Literal.String.Single */\n", + ".highlight .ss { color: #19177C } /* Literal.String.Symbol */\n", + ".highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */\n", + ".highlight .fm { color: #0000FF } /* Name.Function.Magic */\n", + ".highlight .vc { color: #19177C } /* Name.Variable.Class */\n", + ".highlight .vg { color: #19177C } /* Name.Variable.Global */\n", + ".highlight .vi { color: #19177C } /* Name.Variable.Instance */\n", + ".highlight .vm { color: #19177C } /* Name.Variable.Magic */\n", + ".highlight .il { color: #666666 } /* Literal.Number.Integer.Long */</style>" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] }, "metadata": {}, "output_type": "display_data" }, { "data": { - "text/plain": "FUNC_PREFIX void kernel(double * RESTRICT const _data_I, double * RESTRICT _data_dst)\n{\n double * RESTRICT _data_I_21 = _data_I + 1;\n for (int64_t ctr_0 = 1; ctr_0 < 202; ctr_0 += 1)\n {\n double * RESTRICT _data_dst_00 = _data_dst + 601*ctr_0;\n double * RESTRICT _data_I_21_01 = _data_I_21 + 2404*ctr_0 + 2404;\n double * RESTRICT _data_I_21_0m1 = _data_I_21 + 2404*ctr_0 - 2404;\n for (int64_t ctr_1 = 1; ctr_1 < 600; ctr_1 += 1)\n {\n _data_dst_00[ctr_1] = -2.0*_data_I_21_0m1[4*ctr_1] + 2.0*_data_I_21_01[4*ctr_1] - _data_I_21_01[4*ctr_1 + 4] + _data_I_21_01[4*ctr_1 - 4] - _data_I_21_0m1[4*ctr_1 + 4] - _data_I_21_0m1[4*ctr_1 - 4];\n }\n }\n}", - "text/html": "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span> <span class=\"kt\">void</span> <span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"k\">const</span> <span class=\"n\">_data_I</span><span class=\"p\">,</span> <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_dst</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_I_21</span> <span class=\"o\">=</span> <span class=\"n\">_data_I</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">;</span>\n <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"kt\">int64_t</span> <span class=\"n\">ctr_0</span> <span class=\"o\">=</span> <span class=\"mi\">1</span><span class=\"p\">;</span> <span class=\"n\">ctr_0</span> <span class=\"o\"><</span> <span class=\"mi\">202</span><span class=\"p\">;</span> <span class=\"n\">ctr_0</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n <span class=\"p\">{</span>\n <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_dst_00</span> <span class=\"o\">=</span> <span class=\"n\">_data_dst</span> <span class=\"o\">+</span> <span class=\"mi\">601</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span>\n <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_I_21_01</span> <span class=\"o\">=</span> <span class=\"n\">_data_I_21</span> <span class=\"o\">+</span> <span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">+</span> <span class=\"mi\">2404</span><span class=\"p\">;</span>\n <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_I_21_0m1</span> <span class=\"o\">=</span> <span class=\"n\">_data_I_21</span> <span class=\"o\">+</span> <span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">-</span> <span class=\"mi\">2404</span><span class=\"p\">;</span>\n <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"kt\">int64_t</span> <span class=\"n\">ctr_1</span> <span class=\"o\">=</span> <span class=\"mi\">1</span><span class=\"p\">;</span> <span class=\"n\">ctr_1</span> <span class=\"o\"><</span> <span class=\"mi\">600</span><span class=\"p\">;</span> <span class=\"n\">ctr_1</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n <span class=\"p\">{</span>\n <span class=\"n\">_data_dst_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mf\">-2.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_0m1</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mf\">2.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_01</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">_data_I_21_01</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">+</span> <span class=\"mi\">4</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">_data_I_21_01</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">-</span> <span class=\"mi\">4</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">_data_I_21_0m1</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">+</span> <span class=\"mi\">4</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">_data_I_21_0m1</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">-</span> <span class=\"mi\">4</span><span class=\"p\">];</span>\n <span class=\"p\">}</span>\n <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</pre></div>\n" + "text/html": [ + "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span><span class=\"w\"> </span><span class=\"kt\">void</span><span class=\"w\"> </span><span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_data_I</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"p\">)</span><span class=\"w\"></span>\n", + "<span class=\"p\">{</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_I_21</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_I</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"mi\">81</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">290</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_I_21_01</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_I_21</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1160</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1160</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_I_21_0m1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_I_21</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1160</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1160</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"mi\">289</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mf\">-1.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_01</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">1.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_0m1</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">1.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_0m1</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">2.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_0m1</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">2.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_01</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_data_I_21_01</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"p\">];</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", + "<span class=\"p\">}</span><span class=\"w\"></span>\n", + "</pre></div>\n" + ], + "text/plain": [ + "FUNC_PREFIX void kernel(double * RESTRICT const _data_I, double * RESTRICT _data_dst)\n", + "{\n", + " double * RESTRICT _data_I_21 = _data_I + 1;\n", + " for (int64_t ctr_0 = 1; ctr_0 < 81; ctr_0 += 1)\n", + " {\n", + " double * RESTRICT _data_dst_00 = _data_dst + 290*ctr_0;\n", + " double * RESTRICT _data_I_21_01 = _data_I_21 + 1160*ctr_0 + 1160;\n", + " double * RESTRICT _data_I_21_0m1 = _data_I_21 + 1160*ctr_0 - 1160;\n", + " for (int64_t ctr_1 = 1; ctr_1 < 289; ctr_1 += 1)\n", + " {\n", + " _data_dst_00[ctr_1] = -1.0*_data_I_21_01[4*ctr_1 + 4] - 1.0*_data_I_21_0m1[4*ctr_1 + 4] - 1.0*_data_I_21_0m1[4*ctr_1 - 4] - 2.0*_data_I_21_0m1[4*ctr_1] + 2.0*_data_I_21_01[4*ctr_1] + _data_I_21_01[4*ctr_1 - 4];\n", + " }\n", + " }\n", + "}" + ] }, "metadata": {}, "output_type": "display_data" @@ -909,43 +1612,151 @@ "cell_type": "code", "execution_count": 37, "metadata": {}, - "outputs": [], - "source": [ - "gpu_ast = create_kernel(update_rule, target=ps.Target.GPU, gpu_indexing=ps.gpucuda.indexing.BlockIndexing,\n", - " gpu_indexing_params={'blockSize': (8,8,4)})" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, "outputs": [ { "data": { - "text/plain": "<IPython.core.display.HTML object>", - "text/html": "<style>pre { line-height: 125%; }\ntd.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\nspan.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\ntd.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\nspan.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n.highlight .hll { background-color: #ffffcc }\n.highlight { background: #f8f8f8; }\n.highlight .c { color: #408080; font-style: italic } /* Comment */\n.highlight .err { border: 1px solid #FF0000 } /* Error */\n.highlight .k { color: #008000; font-weight: bold } /* Keyword */\n.highlight .o { color: #666666 } /* Operator */\n.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\n.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */\n.highlight .cp { color: #BC7A00 } /* Comment.Preproc */\n.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\n.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */\n.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */\n.highlight .gd { color: #A00000 } /* Generic.Deleted */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #FF0000 } /* Generic.Error */\n.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n.highlight .gi { color: #00A000 } /* Generic.Inserted */\n.highlight .go { color: #888888 } /* Generic.Output */\n.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n.highlight .gt { color: #0044DD } /* Generic.Traceback */\n.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n.highlight .kp { color: #008000 } /* Keyword.Pseudo */\n.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n.highlight .kt { color: #B00040 } /* Keyword.Type */\n.highlight .m { color: #666666 } /* Literal.Number */\n.highlight .s { color: #BA2121 } /* Literal.String */\n.highlight .na { color: #7D9029 } /* Name.Attribute */\n.highlight .nb { color: #008000 } /* Name.Builtin */\n.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n.highlight .no { color: #880000 } /* Name.Constant */\n.highlight .nd { color: #AA22FF } /* Name.Decorator */\n.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */\n.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n.highlight .nf { color: #0000FF } /* Name.Function */\n.highlight .nl { color: #A0A000 } /* Name.Label */\n.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */\n.highlight .nv { color: #19177C } /* Name.Variable */\n.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n.highlight .w { color: #bbbbbb } /* Text.Whitespace */\n.highlight .mb { color: #666666 } /* Literal.Number.Bin */\n.highlight .mf { color: #666666 } /* Literal.Number.Float */\n.highlight .mh { color: #666666 } /* Literal.Number.Hex */\n.highlight .mi { color: #666666 } /* Literal.Number.Integer */\n.highlight .mo { color: #666666 } /* Literal.Number.Oct */\n.highlight .sa { color: #BA2121 } /* Literal.String.Affix */\n.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */\n.highlight .sc { color: #BA2121 } /* Literal.String.Char */\n.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */\n.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n.highlight .s2 { color: #BA2121 } /* Literal.String.Double */\n.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */\n.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n.highlight .sx { color: #008000 } /* Literal.String.Other */\n.highlight .sr { color: #BB6688 } /* Literal.String.Regex */\n.highlight .s1 { color: #BA2121 } /* Literal.String.Single */\n.highlight .ss { color: #19177C } /* Literal.String.Symbol */\n.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */\n.highlight .fm { color: #0000FF } /* Name.Function.Magic */\n.highlight .vc { color: #19177C } /* Name.Variable.Class */\n.highlight .vg { color: #19177C } /* Name.Variable.Global */\n.highlight .vi { color: #19177C } /* Name.Variable.Instance */\n.highlight .vm { color: #19177C } /* Name.Variable.Magic */\n.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */</style>" + "text/html": [ + "<style>pre { line-height: 125%; }\n", + "td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\n", + "span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\n", + "td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n", + "span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n", + ".highlight .hll { background-color: #ffffcc }\n", + ".highlight { background: #f8f8f8; }\n", + ".highlight .c { color: #3D7B7B; font-style: italic } /* Comment */\n", + ".highlight .err { border: 1px solid #FF0000 } /* Error */\n", + ".highlight .k { color: #008000; font-weight: bold } /* Keyword */\n", + ".highlight .o { color: #666666 } /* Operator */\n", + ".highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */\n", + ".highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */\n", + ".highlight .cp { color: #9C6500 } /* Comment.Preproc */\n", + ".highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */\n", + ".highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */\n", + ".highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */\n", + ".highlight .gd { color: #A00000 } /* Generic.Deleted */\n", + ".highlight .ge { font-style: italic } /* Generic.Emph */\n", + ".highlight .gr { color: #E40000 } /* Generic.Error */\n", + ".highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n", + ".highlight .gi { color: #008400 } /* Generic.Inserted */\n", + ".highlight .go { color: #717171 } /* Generic.Output */\n", + ".highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n", + ".highlight .gs { font-weight: bold } /* Generic.Strong */\n", + ".highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n", + ".highlight .gt { color: #0044DD } /* Generic.Traceback */\n", + ".highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n", + ".highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n", + ".highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n", + ".highlight .kp { color: #008000 } /* Keyword.Pseudo */\n", + ".highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n", + ".highlight .kt { color: #B00040 } /* Keyword.Type */\n", + ".highlight .m { color: #666666 } /* Literal.Number */\n", + ".highlight .s { color: #BA2121 } /* Literal.String */\n", + ".highlight .na { color: #687822 } /* Name.Attribute */\n", + ".highlight .nb { color: #008000 } /* Name.Builtin */\n", + ".highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n", + ".highlight .no { color: #880000 } /* Name.Constant */\n", + ".highlight .nd { color: #AA22FF } /* Name.Decorator */\n", + ".highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */\n", + ".highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */\n", + ".highlight .nf { color: #0000FF } /* Name.Function */\n", + ".highlight .nl { color: #767600 } /* Name.Label */\n", + ".highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n", + ".highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */\n", + ".highlight .nv { color: #19177C } /* Name.Variable */\n", + ".highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n", + ".highlight .w { color: #bbbbbb } /* Text.Whitespace */\n", + ".highlight .mb { color: #666666 } /* Literal.Number.Bin */\n", + ".highlight .mf { color: #666666 } /* Literal.Number.Float */\n", + ".highlight .mh { color: #666666 } /* Literal.Number.Hex */\n", + ".highlight .mi { color: #666666 } /* Literal.Number.Integer */\n", + ".highlight .mo { color: #666666 } /* Literal.Number.Oct */\n", + ".highlight .sa { color: #BA2121 } /* Literal.String.Affix */\n", + ".highlight .sb { color: #BA2121 } /* Literal.String.Backtick */\n", + ".highlight .sc { color: #BA2121 } /* Literal.String.Char */\n", + ".highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */\n", + ".highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n", + ".highlight .s2 { color: #BA2121 } /* Literal.String.Double */\n", + ".highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */\n", + ".highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */\n", + ".highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */\n", + ".highlight .sx { color: #008000 } /* Literal.String.Other */\n", + ".highlight .sr { color: #A45A77 } /* Literal.String.Regex */\n", + ".highlight .s1 { color: #BA2121 } /* Literal.String.Single */\n", + ".highlight .ss { color: #19177C } /* Literal.String.Symbol */\n", + ".highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */\n", + ".highlight .fm { color: #0000FF } /* Name.Function.Magic */\n", + ".highlight .vc { color: #19177C } /* Name.Variable.Class */\n", + ".highlight .vg { color: #19177C } /* Name.Variable.Global */\n", + ".highlight .vi { color: #19177C } /* Name.Variable.Instance */\n", + ".highlight .vm { color: #19177C } /* Name.Variable.Magic */\n", + ".highlight .il { color: #666666 } /* Literal.Number.Integer.Long */</style>" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] }, "metadata": {}, "output_type": "display_data" }, { "data": { - "text/plain": "FUNC_PREFIX __launch_bounds__(256) void kernel(double * RESTRICT const _data_I, double * RESTRICT _data_dst)\n{\n if (blockDim.x*blockIdx.x + threadIdx.x + 1 < 202 && blockDim.y*blockIdx.y + threadIdx.y + 1 < 600)\n {\n const int64_t ctr_0 = blockDim.x*blockIdx.x + threadIdx.x + 1;\n const int64_t ctr_1 = blockDim.y*blockIdx.y + threadIdx.y + 1;\n double * RESTRICT _data_dst_10 = _data_dst + ctr_1;\n double * RESTRICT _data_I_11_21 = _data_I + 4*ctr_1 + 5;\n double * RESTRICT _data_I_1m1_21 = _data_I + 4*ctr_1 - 3;\n double * RESTRICT _data_I_10_21 = _data_I + 4*ctr_1 + 1;\n _data_dst_10[601*ctr_0] = -2.0*_data_I_10_21[2404*ctr_0 - 2404] + 2.0*_data_I_10_21[2404*ctr_0 + 2404] - _data_I_11_21[2404*ctr_0 + 2404] - _data_I_11_21[2404*ctr_0 - 2404] + _data_I_1m1_21[2404*ctr_0 + 2404] - _data_I_1m1_21[2404*ctr_0 - 2404];\n } \n}", - "text/html": "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span> <span class=\"nf\">__launch_bounds__</span><span class=\"p\">(</span><span class=\"mi\">256</span><span class=\"p\">)</span> <span class=\"kt\">void</span> <span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"k\">const</span> <span class=\"n\">_data_I</span><span class=\"p\">,</span> <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_dst</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"n\">blockDim</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"o\">*</span><span class=\"n\">blockIdx</span><span class=\"p\">.</span><span class=\"n\">x</span> <span class=\"o\">+</span> <span class=\"n\">threadIdx</span><span class=\"p\">.</span><span class=\"n\">x</span> <span class=\"o\">+</span> <span class=\"mi\">1</span> <span class=\"o\"><</span> <span class=\"mi\">202</span> <span class=\"o\">&&</span> <span class=\"n\">blockDim</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"o\">*</span><span class=\"n\">blockIdx</span><span class=\"p\">.</span><span class=\"n\">y</span> <span class=\"o\">+</span> <span class=\"n\">threadIdx</span><span class=\"p\">.</span><span class=\"n\">y</span> <span class=\"o\">+</span> <span class=\"mi\">1</span> <span class=\"o\"><</span> <span class=\"mi\">600</span><span class=\"p\">)</span>\n <span class=\"p\">{</span>\n <span class=\"k\">const</span> <span class=\"kt\">int64_t</span> <span class=\"n\">ctr_0</span> <span class=\"o\">=</span> <span class=\"n\">blockDim</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"o\">*</span><span class=\"n\">blockIdx</span><span class=\"p\">.</span><span class=\"n\">x</span> <span class=\"o\">+</span> <span class=\"n\">threadIdx</span><span class=\"p\">.</span><span class=\"n\">x</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">;</span>\n <span class=\"k\">const</span> <span class=\"kt\">int64_t</span> <span class=\"n\">ctr_1</span> <span class=\"o\">=</span> <span class=\"n\">blockDim</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"o\">*</span><span class=\"n\">blockIdx</span><span class=\"p\">.</span><span class=\"n\">y</span> <span class=\"o\">+</span> <span class=\"n\">threadIdx</span><span class=\"p\">.</span><span class=\"n\">y</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">;</span>\n <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_dst_10</span> <span class=\"o\">=</span> <span class=\"n\">_data_dst</span> <span class=\"o\">+</span> <span class=\"n\">ctr_1</span><span class=\"p\">;</span>\n <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_I_11_21</span> <span class=\"o\">=</span> <span class=\"n\">_data_I</span> <span class=\"o\">+</span> <span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">+</span> <span class=\"mi\">5</span><span class=\"p\">;</span>\n <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_I_1m1_21</span> <span class=\"o\">=</span> <span class=\"n\">_data_I</span> <span class=\"o\">+</span> <span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">-</span> <span class=\"mi\">3</span><span class=\"p\">;</span>\n <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_I_10_21</span> <span class=\"o\">=</span> <span class=\"n\">_data_I</span> <span class=\"o\">+</span> <span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">;</span>\n <span class=\"n\">_data_dst_10</span><span class=\"p\">[</span><span class=\"mi\">601</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mf\">-2.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_10_21</span><span class=\"p\">[</span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">-</span> <span class=\"mi\">2404</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mf\">2.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_10_21</span><span class=\"p\">[</span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">+</span> <span class=\"mi\">2404</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">_data_I_11_21</span><span class=\"p\">[</span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">+</span> <span class=\"mi\">2404</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">_data_I_11_21</span><span class=\"p\">[</span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">-</span> <span class=\"mi\">2404</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">_data_I_1m1_21</span><span class=\"p\">[</span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">+</span> <span class=\"mi\">2404</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">_data_I_1m1_21</span><span class=\"p\">[</span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">-</span> <span class=\"mi\">2404</span><span class=\"p\">];</span>\n <span class=\"p\">}</span> \n<span class=\"p\">}</span>\n</pre></div>\n" + "text/html": [ + "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span><span class=\"w\"> </span><span class=\"kt\">void</span><span class=\"w\"> </span><span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_data_I</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"p\">)</span><span class=\"w\"></span>\n", + "<span class=\"p\">{</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_I_21</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_I</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"mi\">81</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">290</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_I_21_01</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_I_21</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1160</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1160</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_I_21_0m1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_I_21</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1160</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1160</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"mi\">289</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mf\">-1.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_01</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">1.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_0m1</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">1.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_0m1</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">2.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_0m1</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">2.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_01</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_data_I_21_01</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"p\">];</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", + "<span class=\"p\">}</span><span class=\"w\"></span>\n", + "</pre></div>\n" + ], + "text/plain": [ + "FUNC_PREFIX void kernel(double * RESTRICT const _data_I, double * RESTRICT _data_dst)\n", + "{\n", + " double * RESTRICT _data_I_21 = _data_I + 1;\n", + " for (int64_t ctr_0 = 1; ctr_0 < 81; ctr_0 += 1)\n", + " {\n", + " double * RESTRICT _data_dst_00 = _data_dst + 290*ctr_0;\n", + " double * RESTRICT _data_I_21_01 = _data_I_21 + 1160*ctr_0 + 1160;\n", + " double * RESTRICT _data_I_21_0m1 = _data_I_21 + 1160*ctr_0 - 1160;\n", + " for (int64_t ctr_1 = 1; ctr_1 < 289; ctr_1 += 1)\n", + " {\n", + " _data_dst_00[ctr_1] = -1.0*_data_I_21_01[4*ctr_1 + 4] - 1.0*_data_I_21_0m1[4*ctr_1 + 4] - 1.0*_data_I_21_0m1[4*ctr_1 - 4] - 2.0*_data_I_21_0m1[4*ctr_1] + 2.0*_data_I_21_01[4*ctr_1] + _data_I_21_01[4*ctr_1 - 4];\n", + " }\n", + " }\n", + "}" + ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ - "ps.show_code(gpu_ast)" + "try:\n", + " import pycuda\n", + " from pystencils.gpucuda import BlockIndexing\n", + "\n", + " gpu_ast = create_kernel(update_rule, target=ps.Target.GPU,\n", + " gpu_indexing=BlockIndexing,\n", + " gpu_indexing_params={'blockSize': (64, 1, 1)})\n", + "\n", + " ps.show_code(ast)\n", + "except ImportError:\n", + " print(\"Please install pycuda for GPU support\")" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -959,9 +1770,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.2" + "version": "3.10.2" } }, "nbformat": 4, "nbformat_minor": 4 -} \ No newline at end of file +} diff --git a/doc/sphinx/kernel_compile_and_call.rst b/doc/sphinx/kernel_compile_and_call.rst index 5293dc5a76957de33abb7fbb8526eaaf00d2472a..2ceab6123583c9543dad0597f63bb53609538d10 100644 --- a/doc/sphinx/kernel_compile_and_call.rst +++ b/doc/sphinx/kernel_compile_and_call.rst @@ -11,11 +11,11 @@ Creating kernels .. autoclass:: pystencils.CreateKernelConfig :members: -.. autofunction:: pystencils.create_domain_kernel +.. autofunction:: pystencils.kernelcreation.create_domain_kernel -.. autofunction:: pystencils.create_indexed_kernel +.. autofunction:: pystencils.kernelcreation.create_indexed_kernel -.. autofunction:: pystencils.create_staggered_kernel +.. autofunction:: pystencils.kernelcreation.create_staggered_kernel Code printing diff --git a/pystencils/backends/cbackend.py b/pystencils/backends/cbackend.py index 03ab76ea9e711d8945618975e85061aa9736ca96..42503a8ef4100549a32bcc41fb36f94bb351b765 100644 --- a/pystencils/backends/cbackend.py +++ b/pystencils/backends/cbackend.py @@ -495,8 +495,8 @@ class CustomSympyPrinter(CCodePrinter): known = self.known_functions[arg.__class__.__name__.lower()] code = self._print(arg) return code.replace(known, f"{known}f") - elif isinstance(arg, sp.Pow) and data_type == BasicType('float32'): - known = ['sqrt', 'cbrt', 'pow'] + elif isinstance(arg, (sp.Pow, sp.exp)) and data_type == BasicType('float32'): + known = ['sqrt', 'cbrt', 'pow', 'exp'] code = self._print(arg) for k in known: if k in code: @@ -673,8 +673,11 @@ class VectorizedCustomSympyPrinter(CustomSympyPrinter): instruction = self.instruction_set['loadA'] if aligned else self.instruction_set['loadU'] return instruction.format(f"& {self._print(arg)}", **self._kwargs) elif expr.func == DivFunc: - return self.instruction_set['/'].format(self._print(expr.divisor), self._print(expr.dividend), - **self._kwargs) + result = self._scalarFallback('_print_Function', expr) + if not result: + result = self.instruction_set['/'].format(self._print(expr.divisor), self._print(expr.dividend), + **self._kwargs) + return result elif expr.func == fast_division: result = self._scalarFallback('_print_Function', expr) if not result: diff --git a/pystencils/backends/dot.py b/pystencils/backends/dot.py index 61a9e30a4c6f45c1f3a14687d4229ca9ac91281e..3a5562b65fc20a5c9b10a6fcc8416cb49d0b0396 100644 --- a/pystencils/backends/dot.py +++ b/pystencils/backends/dot.py @@ -1,5 +1,10 @@ import graphviz -from graphviz import Digraph, lang +try: + from graphviz import Digraph + import graphviz.quoting as quote +except ImportError: + from graphviz import Digraph + import graphviz.lang as quote from sympy.printing.printer import Printer @@ -12,7 +17,7 @@ class DotPrinter(Printer): super(DotPrinter, self).__init__() self._node_to_str_function = node_to_str_function self.dot = Digraph(**kwargs) - self.dot.quote_edge = lang.quote + self.dot.quote_edge = quote.quote def _print_KernelFunction(self, func): self.dot.node(str(id(func)), style='filled', fillcolor='#a056db', label=self._node_to_str_function(func)) diff --git a/pystencils/config.py b/pystencils/config.py index 22b0a5ffc0138cce1d715b5183d6bc56cde1c35c..3fea3f37fd5b9a72f906456afc6ae0bbf63dabd3 100644 --- a/pystencils/config.py +++ b/pystencils/config.py @@ -75,23 +75,25 @@ class CreateKernelConfig: """ gpu_indexing: str = 'block' """ - Either 'block' or 'line' , or custom indexing class, see `AbstractIndexing` + Either 'block' or 'line' , or custom indexing class, see `pystencils.gpucuda.AbstractIndexing` """ gpu_indexing_params: MappingProxyType = field(default=MappingProxyType({})) """ Dict with indexing parameters (constructor parameters of indexing class) e.g. for 'block' one can specify '{'block_size': (20, 20, 10) }'. """ + # TODO rework this docstring default_assignment_simplifications: bool = False """ If `True` default simplifications are first performed on the Assignments. If problems occur during the - simplification a warning will be thrown. - Furthermore, it is essential to know that this is a two-stage process. The first stage of the process acts - on the level of the `AssignmentCollection`. In this part, `create_simplification_strategy` - from pystencils.simplificationfactory will be used to apply optimisations like insertion of constants to - remove pressure from the registers. Thus the first part of the optimisations can only be executed if - an `AssignmentCollection` is passed. The second part of the optimisation acts on the level of each Assignment - individually. In this stage, all optimisations from `sympy.codegen.rewriting.optims_c99` are applied + simplification a warning will be thrown. + Furthermore, it is essential to know that this is a two-stage process. The first stage of the process acts + on the level of the `pystencils.AssignmentCollection`. In this part, + `pystencil.simp.create_simplification_strategy` from pystencils.simplificationfactory will be used to + apply optimisations like insertion of constants to + remove pressure from the registers. Thus the first part of the optimisations can only be executed if + an `AssignmentCollection` is passed. The second part of the optimisation acts on the level of each Assignment + individually. In this stage, all optimisations from `sympy.codegen.rewriting.optims_c99` are applied to each Assignment. Thus this stage can also be applied if a list of Assignments is passed. """ cpu_prepend_optimizations: List[Callable] = field(default_factory=list) diff --git a/pystencils/display_utils.py b/pystencils/display_utils.py index 3250765c83bafb46de7b878669dbe485a64dd91e..f6c32ac88ae68d684e860b33c0e5185ccc030e4e 100644 --- a/pystencils/display_utils.py +++ b/pystencils/display_utils.py @@ -10,7 +10,12 @@ from pystencils.kernel_wrapper import KernelWrapper def to_dot(expr: sp.Expr, graph_style: Optional[Dict[str, Any]] = None, short=True): """Show a sympy or pystencils AST as dot graph""" from pystencils.astnodes import Node - import graphviz + try: + import graphviz + except ImportError: + print("graphviz is not installed. Visualizing the AST is not available") + return + graph_style = {} if graph_style is None else graph_style if isinstance(expr, Node): diff --git a/pystencils/typing/leaf_typing.py b/pystencils/typing/leaf_typing.py index b4648835a662027b124a6c5b0192f67b76da5980..0d133038688f722d7d428c01442db2d8fb2458a9 100644 --- a/pystencils/typing/leaf_typing.py +++ b/pystencils/typing/leaf_typing.py @@ -216,7 +216,8 @@ class TypeAdder: else: new_args.append(a) return expr.func(*new_args) if new_args else expr, collated_type - elif isinstance(expr, (sp.Pow, InverseTrigonometricFunction, TrigonometricFunction, HyperbolicFunction)): + elif isinstance(expr, (sp.Pow, sp.exp, InverseTrigonometricFunction, TrigonometricFunction, + HyperbolicFunction)): args_types = [self.figure_out_type(arg) for arg in expr.args] collated_type = collate_types([t for _, t in args_types]) new_args = [a if t.dtype_eq(collated_type) else CastFunc(a, collated_type) for a, t in args_types] diff --git a/pystencils_tests/test_math_functions.py b/pystencils_tests/test_math_functions.py index 031e2320bc1ca0063168bc4c20ccf5642df875e7..5655fbda60012d612ff7686f2d7288784b3a004f 100644 --- a/pystencils_tests/test_math_functions.py +++ b/pystencils_tests/test_math_functions.py @@ -33,7 +33,8 @@ def test_two_arguments(dtype, func, target): dh.run_kernel(kernel) dh.all_to_cpu() - np.testing.assert_allclose(dh.gather_array("x")[0, 0], float(func(1.0, 2.0).evalf())) + np.testing.assert_allclose(dh.gather_array("x")[0, 0], float(func(1.0, 2.0).evalf()), + 13 if dtype == 'float64' else 5) @pytest.mark.parametrize('dtype', ["float64", "float32"]) diff --git a/pystencils_tests/test_simplifications.py b/pystencils_tests/test_simplifications.py index fbce59aca95db083a35a29d4f2e0335767c4f43f..ef8ae7ce61a07c992d09807933061c73e61484a1 100644 --- a/pystencils_tests/test_simplifications.py +++ b/pystencils_tests/test_simplifications.py @@ -4,6 +4,7 @@ import pytest import pystencils.config import sympy as sp import pystencils as ps +import numpy as np from pystencils.simp import subexpression_substitution_in_main_assignments from pystencils.simp import add_subexpressions_for_divisions @@ -143,29 +144,27 @@ def test_add_subexpressions_for_field_reads(): @pytest.mark.parametrize('target', (ps.Target.CPU, ps.Target.GPU)) -@pytest.mark.parametrize('simplification', (True, False)) +@pytest.mark.parametrize('dtype', ('float32', 'float64')) @pytest.mark.skipif((vs.major, vs.minor, vs.micro) == (3, 8, 2), reason="does not work on python 3.8.2 for some reason") -def test_sympy_optimizations(target, simplification): +def test_sympy_optimizations(target, dtype): if target == ps.Target.GPU: pytest.importorskip("pycuda") - src, dst = ps.fields('src, dst: float32[2d]') + src, dst = ps.fields(f'src, dst: {dtype}[2d]') - # Triggers Sympy's expm1 optimization - # Sympy's expm1 optimization is tedious to use and the behaviour is highly depended on the sympy version. In - # some cases the exp expression has to be encapsulated in brackets or multiplied with 1 or 1.0 - # for sympy to work properly ... assignments = ps.AssignmentCollection({ src[0, 0]: 1.0 * (sp.exp(dst[0, 0]) - 1) }) - config = pystencils.config.CreateKernelConfig(target=target, default_assignment_simplifications=simplification) + config = pystencils.config.CreateKernelConfig(target=target, default_number_float=dtype) ast = ps.create_kernel(assignments, config=config) + ps.show_code(ast) + code = ps.get_code_str(ast) - if simplification: - assert 'expm1(' in code - else: - assert 'expm1(' not in code + if dtype == 'float32': + assert 'expf(' in code + elif dtype == 'float64': + assert 'exp(' in code @pytest.mark.parametrize('target', (ps.Target.CPU, ps.Target.GPU)) @@ -176,7 +175,7 @@ def test_evaluate_constant_terms(target, simplification): pytest.importorskip("pycuda") src, dst = ps.fields('src, dst: float32[2d]') - # Triggers Sympy's cos optimization + # cos of a number will always be simplified assignments = ps.AssignmentCollection({ src[0, 0]: -sp.cos(1) + dst[0, 0] }) @@ -184,8 +183,4 @@ def test_evaluate_constant_terms(target, simplification): config = pystencils.config.CreateKernelConfig(target=target, default_assignment_simplifications=simplification) ast = ps.create_kernel(assignments, config=config) code = ps.get_code_str(ast) - if simplification: - assert 'cos(' not in code - else: - assert 'cos(' in code - print(code) + assert 'cos(' not in code diff --git a/pystencils_tests/test_vectorization.py b/pystencils_tests/test_vectorization.py index c058691b7fa471e32e0334e561b90a2465ad56cb..19f266b12b55ce66f971e0634e11f7178c6f70bc 100644 --- a/pystencils_tests/test_vectorization.py +++ b/pystencils_tests/test_vectorization.py @@ -195,9 +195,9 @@ def test_piecewise3(instruction_set=instruction_set): g[0, 0] @= 1.0 / (s.b + s.k) if f[0, 0] > 0.0 else 1.0 ast = ps.create_kernel(test_kernel) - ps.show_code(ast) + # ps.show_code(ast) vectorize(ast, instruction_set=instruction_set) - ps.show_code(ast) + # ps.show_code(ast) ast.compile() diff --git a/pystencils_tests/test_vectorization_specific.py b/pystencils_tests/test_vectorization_specific.py index e118930b06083b64fef9f0020c2044abea54410d..44274156eff8e1bbf07be0eeffad5919492bfb83 100644 --- a/pystencils_tests/test_vectorization_specific.py +++ b/pystencils_tests/test_vectorization_specific.py @@ -61,24 +61,29 @@ def test_vectorized_abs(instruction_set, dtype): @pytest.mark.parametrize('dtype', ('float', 'double')) @pytest.mark.parametrize('instruction_set', supported_instruction_sets) def test_strided(instruction_set, dtype): - f, g = ps.fields(f"f, g : float{64 if dtype == 'double' else 32}[2D]") + npdtype = np.float64 if dtype == 'double' else np.float32 + + f, g = ps.fields(f"f, g : float{64 if dtype=='double' else 32}[2D]") update_rule = [ps.Assignment(g[0, 0], f[0, 0] + f[-1, 0] + f[1, 0] + f[0, 1] + f[0, -1] + 42.0)] - if 'storeS' not in get_vector_instruction_set(dtype, instruction_set) and not instruction_set in ['avx512', 'rvv'] and not instruction_set.startswith('sve'): + if 'storeS' not in get_vector_instruction_set(dtype, instruction_set) and instruction_set not in ['avx512', 'rvv'] and not instruction_set.startswith('sve'): with pytest.warns(UserWarning) as warn: - config = pystencils.config.CreateKernelConfig(cpu_vectorize_info={'instruction_set': instruction_set}) + config = pystencils.config.CreateKernelConfig(cpu_vectorize_info={'instruction_set': instruction_set}, + default_number_float=npdtype) ast = ps.create_kernel(update_rule, config=config) assert 'Could not vectorize loop' in warn[0].message.args[0] else: with pytest.warns(None) as warn: - config = pystencils.config.CreateKernelConfig(cpu_vectorize_info={'instruction_set': instruction_set}) + config = pystencils.config.CreateKernelConfig(cpu_vectorize_info={'instruction_set': instruction_set}, + default_number_float=npdtype) ast = ps.create_kernel(update_rule, config=config) assert len(warn) == 0 + # ps.show_code(ast) func = ast.compile() ref_func = ps.create_kernel(update_rule).compile() - arr = np.random.random((23 + 2, 17 + 2)).astype(np.float64 if dtype == 'double' else np.float32) - dst = np.zeros_like(arr, dtype=np.float64 if dtype == 'double' else np.float32) - ref = np.zeros_like(arr, dtype=np.float64 if dtype == 'double' else np.float32) + arr = np.random.random((23 + 2, 17 + 2)).astype(npdtype) + dst = np.zeros_like(arr, dtype=npdtype) + ref = np.zeros_like(arr, dtype=npdtype) func(g=dst, f=arr) ref_func(g=ref, f=arr)