diff --git a/doc/notebooks/01_tutorial_getting_started.ipynb b/doc/notebooks/01_tutorial_getting_started.ipynb index 22eba4c05d204f86e0c6d1f02245d806bd69e89e..87e9d4b675ec578308dac19d5c44769bcaf59874 100644 --- a/doc/notebooks/01_tutorial_getting_started.ipynb +++ b/doc/notebooks/01_tutorial_getting_started.ipynb @@ -18,22 +18,15 @@ "\n", "## Overview\n", "\n", + "*pystencils* is a package that can speed up computations on *numpy* arrays. All computations are carried out fully parallel on CPUs (single node with OpenMP, multiple nodes with MPI) or on GPUs.\n", + "It is suited for applications that run the same operation on *numpy* arrays multiple times. It can be used to accelerate computations on images or voxel fields. Its main application, however, are numerical simulations using finite differences, finite volumes, or lattice Boltzmann methods. \n", + "There already exist a variety of packages to speed up numeric Python code. One could use pure numpy or solutions that compile your code, like *Cython* and *numba*. See [this page](demo_benchmark.ipynb) for a comparison of these tools.\n", "\n", - "*pystencils* is a package that can speed up transformations on *numpy* arrays. All computations are carried out fully parallel on CPUs (single node with OpenMP, multiple nodes with MPI) or on GPUs.\n", - "\n", - "It is suited for applications that run the same operation on *numpy* arrays multiple times like for example:\n", - "- numerical simulations (finite difference, lattice Boltzmann)\n", - "- image processing\n", - "\n", - "As the name suggests, *pystencils* was developed for **stencil codes**, i.e. operations that update an element of a numpy array using only a local neighborhood. \n", - "\n", - "<img width=\"25%\" src='../../img/pystencils_stencil_four_points_with_arrows.svg'>\n", + "\n", "\n", + "As the name suggests, *pystencils* was developed for **stencil codes**, i.e. operations that update array elements using only a local neighborhood. \n", "It generates C code, compiles it behind the scenes, and lets you call the compiled C function as if it was a native Python function. \n", - "\n", - "But lets not dive too deep into the concepts of *pystencils* here, they are covered in detail in the following tutorials. Lets instead look at a simple example, that computes the average neighbor values of a *numpy* array.\n", - "\n", - "We create two rather large arrays for in- and output." + "But lets not dive too deep into the concepts of *pystencils* here, they are covered in detail in the following tutorials. Let's instead look at a simple example, that computes the average neighbor values of a *numpy* array. Therefor we first create two rather large arrays for input and output:" ] }, { @@ -73,7 +66,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "7.13 ms ± 254 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" + "3.84 ms ± 36.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" ] } ], @@ -96,9 +89,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/latex": [ - "$${{dst}_{(0,0)}} \\leftarrow \\frac{{{src}_{(-1,0)}}}{4} + \\frac{{{src}_{(0,-1)}}}{4} + \\frac{{{src}_{(0,1)}}}{4} + \\frac{{{src}_{(1,0)}}}{4}$$" + "$\\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": [ " src_W src_S src_N src_E\n", @@ -126,12 +119,14 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "<Figure size 216x216 with 1 Axes>" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], @@ -161,7 +156,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This whole process might seem overly complicated. We have already spent more lines of code as for the *numpy* implementation and don't have anything running yet! However, this multi stage process of formulating the algorithm symbolically, and just in the end actually running it, is what makes *pystencils* faster and more flexible than other approaches.\n", + "This whole process might seem overly complicated. We have already spent more lines of code than we needed for the *numpy* implementation and don't have anything running yet! However, this multi-stage process of formulating the algorithm symbolically, and just in the end actually running it, is what makes *pystencils* faster and more flexible than other approaches.\n", "\n", "Now finally lets benchmark the *pystencils* kernel." ] @@ -185,7 +180,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.36 ms ± 51.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n" + "639 µs ± 35 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n" ] } ], @@ -266,9 +261,9 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKoAAAAZBAMAAABTBqhqAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsyme8Q6PJIAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACe0lEQVRIDa2Vv2sTYRjHv5deLtdcEo9WBLdrBLfSUgqut4ggqMVBHIRonRyKxUUdlCAuXeSwVDx1iOIgTi26ieg/II2LUhTM6mQq6iBCfH88z937Nj0Ummd4n1/f93N3712eANqWXocU7dnlKC8eS/aM0wAD5ce1HyOiGih/wf05KqqJqm6PiAoYKD9S1GP/z67EBVpCye6SkrjrBcod5bvhuw7mdxQ51SiZVbqqNh4r98/l2+AXcHB3GaFk8wzOSXdDLpk9ySIOqpGO7s3FgEcJbB2hhLD24PmG1N+WS2a2WpaZOisTpydXYZaOUaLeGAz6wrltseRmqVXZomKNpJZOoyYOHT0cUbskTtdpzp9e1DmpnekIJ0NVYuqRK59Fzq+FqTnKOV+55SdEDZaBA7gWrVhUr9rDjK4wdQOnFoDrtI2vnqO80NuuxtT2O8AFXA6f6pzUx+sJXukKU4GgDTzTRT5XA+VgfJ2a4njFDYR4qPJLaXonTVdFHDYifBfeS9P7X9N0VrXrYm5syijXWah9kZLJRVKhCNLzPaAV1v6oAn8DYsB5Ym4oqqGDgdp8q3eIVZ4AmJBTt1DqiYYwOoFGgrqYG2d1Mbs6MlQ1nEEppLZ8W49LfUzpnN/tCwT6sZlaFzeQDL0tA9XqvEE2Urwuyr+Dvivg0pj6CS2q0L26XdyMgQ9KlekM1GRz4iNtAcptOHNT01dtNSYXvwiGNP4GTlx8L7JHqpZRLRS1lCv6xW6RiKkqddtU5WeidMjZ02W/7o8lDv9ROLGxJZsupDNadhiYu7jlLwcRx6YvmISmRMe7Tu1yU/7oh+3lcKmgkn0OBX2jXPgPA/wF1cGLzQch/MoAAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKoAAAAZCAYAAAChKLVZAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFdklEQVR4Ae2bgVHcMBBFOYYCSFJBoAMgHUAHUEKgA5hUwEAHJB2EdABUEKADSAWE64D8p0ge2ZaNvfb57sCaMbJW0mr3a7Urycfk5eVlxZImk8mZ+q3r2dDzqOdEvKbKxzQiYEagyq4mFkP1zC7UFwNdUflS2YbK22YJx47vHoE6u1o1orNf6Heq8pYGwruOaUTAikClXVkNFUFiowwhP6ZZhR37vW8EYhvK7GrNgolC/Gah35Yv3xboY3FEoDECdXbVxaPGAnCwanWYYpug5zBmMr73g4Bw3X8j27DMrkyHqRhOAeJO/1oNRzG97l19uC24VJ+9unZjXRkBYXcn6oWen8JvqjLRDOyvVP6l3CXROeDiPNyB15OXJpP8ObvqZKhihkfcFhiNjRSk1A+wD5YVRHSYVxJ2zxqbhR6nc2F5EhPUjjY3oi/dTUzKrsyhX8x2BcRmMFLKesJeNcYs9+6FuB3KSDUeYfA4J8QcCz3Ig4c814P3xDiZg5yRirYiGgeR66669yAv4jROGi9pV6bDlJhhkLjmUxTxUuBVD/x7XQaoY8ivQ6i+7jFlmBVdTkX/owfDXvhUZ1cmQ5XGN3rcPjPW3q/imJR7lyDu6kHtlnLflFNmCQrMhzB/1LOr9+slELnSrjJDlTIYXjiFf9E7ng/Dwnt+0vMkZd3KVP5BZUvC+1YC1kYGy+Bt+0TycB33EPSHj+rAhr32Z9EJs4MljR3miTlDNr4S3lcIAN5EukrcK/r1Qo4whJ/drqQgDFD4jHdfBogHPce+zPtdqLfm4nGl5zDVX/SZyCC+LA6nR2rcOpr6OUyUs296jtvCU49I/zFrmquPWR7GUALD9TCe3lkwVOA13fzFuejMpXnu1Ncsr/r2NqfBo34TU/YzIbFKAeC7J7D/7CNcw/Ov51nMhpKhOG6y7D3mb1+JRyrqzz57cC8lI8zt71UmtCMHV1bFDzEiObwxmHmk3ubUXU/hnqXwNGiiMquW1ZkDJdRbc/HlaoVrqdIEd5VB/Tnc4fmKiUn6qKdoaLTjYIIRllIsj5f7VG2zQ4loeDHuKTNazKRveWLexXeNhZHiObkByOmpOrZueNRJsV9cnoW84tmfXUmBVLhgEkzhMsUv0MQTQ02GqNAm5GrXiwziYw5dyIK8XpY43DL5VG4FeZvm6mOWR325xC+FcdFYpMhTwlY0J2tT+Yrt1N8sb4KXeU5XJUgu+RUIreT1cg1tBcL+q2FoxjK0lRyPey/Qs4ijMsY7Fa3qANN2jKbtUxGDvgHT1G8tqqJJ0zF7add1Tp2higmX4kFZB0Y8Cao7juq7CE5YArhSGlCG0tivENhX58KpynPZn2pcPpumvjQxZ8XFJJJLyB8vMk+efdbnnK6KGUoSUsJqze1LVe8ULXgUq5Z4oBLQA8vQVvackXpZwcrt49sy69j+TOOzH82SyuxNWfzJvbbo4D2L6Ci21anvOV3TUIQLPsfxayauXFD40APCPSF72HD6p9glMbk5oD2zIWVoKz/3yT88NvQNJ+vBJ1/zwAk/GCteEifCdqruLndH9V/1DJ16ndNOP0qxaC6guZPdA3RL/7Z9NB6HAf5NJnk6N/Bjoe2IXykyNOHVtzx1Y2ostnMcvsLiqmuerBtS3qQAnjgPQyVUtf7FVZ0SdXV+sogKrfdp6suWKPtfMM+LmwsWmsmjdpGnTs9UncbiNuBJspoX6ZDypnQItMENlYGlPFuAIwE4iFcNyrbNJSfen69Tbuvj5eZ3n+aJbyuDtb03sKX8mV9K53kZKiFp4X84rcnm0MQ9JInwWfdN3TValD9+US28M2iK11wMFeEEJAcBLqj7Oqg11fnNtxO2bK+uFz1itZmIf3yMaza5icDpAAAAAElFTkSuQmCC\n", "text/latex": [ - "$$x^{2} \\left(x + y + 5\\right) + x^{2}$$" + "$\\displaystyle x^{2} \\left(x + y + 5\\right) + x^{2}$" ], "text/plain": [ " 2 2\n", @@ -299,9 +294,9 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIYAAAAYBAMAAADNO5iRAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsyme8Q6PJIAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB6ElEQVQ4EY2UMUvDQBTH/2lrEtOkBnVxqUHBTXRycsgigoM4OQktFQQHoR9B/ABSdNCIQ3F0UhylmG+gICKiYhzdrFgEEfTs3eVeyglmuHvv/373z7u7EIA/tWtfRJlpo6WVCaMIr+6dkIIMzTDfkLF+JoRXtV41kB267xqZSBlC24e9VOiQBZowQ5RjDQE4ba1MREXkdohMQjsgiTYkhHYvwIZ2HdYmYlkgROFTinS2rmiWxiNLnrwvRZTjwgcnnCAlWbCMFZoeiaSF4okIFWGHuWcuZjzcg+NTjUefunBCuLXVUONR+v7OfDaij2KSGnNicHxuIkg1yD6UbEwGWPS7hPAYOKzdAISoWlu2PCAGCg9DyaaTYIq/RHiM7qHUpIRvtp2QI7+j8DCVvMDu4JwD0qMN75kQBvrlEQNmFO2/RNE0QGS/FOCNeaxH0XYU7bJoYBNWhxBMCfhL+CjPg8gV3/3iRdEH27vFPgWy8DLWeij5Drkk45FPWB9ASjj+FHL81Luc6IPKZyiy3f0+og+XnUdCiErzAvOc6I7Cg8r3qNQ5ITwwg3KTEENjg7eCoB5UHqo9hVkP83EWlODVdEzPNFVYcCcS2QetaWIj7BXzDUP+zIZ7a//N7Xox+C/7F9c39vBXies/0sx5RKtmUccAAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIYAAAAYCAYAAAA/FYWiAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEqElEQVRoBeWagVUUMRCGOZ4FoFYgdIBagdIBagVoB/isgIcdoBUodqBWINABdIBcB/h9YbMvt+zevd3N3cXHvDdkk1xm/kwmmckuk9vb240hNJlMjhl3De/AT+ADZE0pi6cK+xZAt+Er+OP/gj23cTttoWP0ZcCdwO/juKr+M9ZLLsGqQ29HjDyfwuex/pDKebbYpHMoeVJEOufhdawUXu438B1R32XneHo8NOq0xaMhlmBXfWiMe079V6Ot5GoMIWKM4S9tKxl7bmzpvGtbDHKMFBk7zVj9Fn6Vtpf6jFOnJ50wdyusZ6ViXhauebbYHKMUpzhk/G/4CCUXY2Stcaw5x4NNPht2r20xYUEbff2rOIjJqAndXv/R6xsBbg2xBe5maFwfqAWaK8zeBqWn8Lccm/KeLXSMsQw445Qetj9W1qrGg/U9fLIqfWP1gNWQHZL8KEv8tsX60BIZ92zRO5TgWVvwDRxjM3Jr8n1Gb0LWPmxYWgmhyxvUDoYMJ4V1uG0+2fAgf+wcvVafgTlN8t2Qf8eA7LJF7+QTYFOECSZmsOLS0Na/WymZKgcwhBy5WBVWHeRNqbirxQvOnGJkLUaF7nm26O0YFTCN+AHBxjrjnJ77XKehLJ1Mlj2W3YE1FY79I0CnYPQtbU7qtEXtGCyyxjLWSC9hwbjgHrEu/jXAPlOak3gDKeYW0hP7Y+cwjxJ5Xm0v47wdQ582MdY/o31VG8HT4gLdrsU72A0ptlMwpKFFfH3WsdsWCEZ+2EHHPld1HeQSPqzqPo9OcqL8Zolsj/Sgq9m3qM44DZEVe5RH6YLcpBiomwvR1C9pZ8ygOTLO+blIOmP9GUL9kOtSJ/w8Z7NFdIR4bUvravYqRxEMVH9f6GuURb9H/iCjVdiyYgeLJ0IwNuW9rJ+2n/KiOTX7lQn3dn7GRMdA5Kwz0ie+G39jH5TNFuE9hscPgqdKlqg7eZ1kVHKjjJSQK3B3YZOcvDeathh6BY7OxDA39lQezxrdl3chhAqaNlfAF2J1m+2R6F/GHNWpHWbe2qIrXDPp26PvF/V864jAcEqkJYoE0tu7Uxl9ntE1aDe16ciFHTk6sHYIu1FdkDHeh9023fPaGDN4joxtDeW06xjimQkxEUfVN2gdNxk8Q3idk5dmkpq7prL/ZsbuKXWBkeuTlLrOMqVt1Ym3+gxxXXTvpB1ri+AYCPHli8e5FI76dPL0HSb9d78q5O8SsbsQTYMbWtexYY7Q64vFuEbR+n7V1lEDppy22ESYjuCdPjgE5UxeQb8GUnm6c2haPy0Z+4xTVLq0Uci/Vjn7apP+QOenqBc8OolftQ9sy22LCTJV8BX+A0tfYGOXiY5XJHMQ25ZGTMr4662nNaHrUlwZZynYW2Rrj2AXcM44TRe+tH3oHBsywq2DNjepG7b+qt2Cd9Q6Zvm6moIf8pzDaEP09hkDRq+GL3AKj+/e9D/MMZ1UKY7hqeXJ5E5YO7GIhlZPsOAE1MXn1TVcC4cArGQUM8dFc3i06Aer6C/FIZK5ejPz2I6ko/juYnDiWeAc49xayyJOjFZka2xkd5tkxmu7uYX/t7HqK+oaLbCx8Q9xlEVrw3lWOQAAAABJRU5ErkJggg==\n", "text/latex": [ - "$$x^{3} + x^{2} y + 6 x^{2}$$" + "$\\displaystyle x^{3} + x^{2} y + 6 x^{2}$" ], "text/plain": [ " 3 2 2\n", @@ -324,9 +319,9 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHsAAAAZBAMAAADj1UwdAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsyme8Q6PJIAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACE0lEQVQ4EaVUPYgTQRT+Jj+bzW4uDndgKXsR7MIdYi3bHIrFESyshMTUBlMI2sgFsbHbRjDanGB11Yml6F117QWukKDotVrlRMETIb75ebsZXQUvDzLz3ve+b+btm8wAxnqvpfVOMnlxMTmJzmr8uPZ1Hnmr9G0OORAczSX3Iy2/9B+L3J7h9rRf2p6B/uV63ZsoximjMtJuNUPSVJ4jHmEMkR3WNVxXtHsON4ickAJGwhFeAV1O155svVD+Awb0zOQMZKQdK+wMJ+rT6YT80oCGzJj8J/JGQ9UWsHh27VxkCQXqgGhcuGqrsnLRjLAuNYUXPN5rktQbQXQq9/3EysM+cBp3o4cmtmQvOMSKg4jjPj4DlQSe9I6C2Mr9TeAGbsnnDvnKQqIapYzrmUp8kAgGEKhumxSNdapI4qmOveHw8afhcJWQeoQvhGUIvgMbLdQmhJ6KNF0NSg5NVTPvhbas/dRAitDXbfSNfH/XpGhUxYOpmXyMwiElyLh1F/Xu5QECuYKCNEmo1j0rTLBsYia/RLjqIvv07bp17c0dpPeETqL8I5yUaBVlLH+H9m9IsSOo8wsdLDUW39ocQNWI88vNO0adype6H2MD8YLoHewCVfo59rc/7diyUrmOLztaCtwrI2KdLyaCnyKLWFl6ZWyM0Ag4NLPfDyMXMdHMhbXp3Oei3Hifp87bKz2EXIEL0mP1C2cKaKjr4RNsAAAAAElFTkSuQmCC\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHoAAAAZCAYAAAD+OToQAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAE6klEQVRoBe2ai3EUORBAvS4C8HERHM7AHBlABvZdBEAGpojABRkAEVxBBvgiADsDTASAMzDvaaUtjXZm16OZXW/BdJWsX3er1a1utcY7u7m52auB2Wz2CroDygPKFeUFvK6pJ9hBDcxqDB2N/AZaDbxH/z3VA/oPd3CPk0hoYL9SC8cF3Rn9Iwyud0+wgxqoNbRbyY2aQnY+toPb/X1FulezdUL0YUF3FPufi/GpuyMaGOLR+RZMzHolY4Z5yrOcydQeRwPo9bi8RquSsVwcGIbsGy9/no+vakNjtv4emier8Ka5bg1EvX+LGH9S/4c+LxMF8ybIOl9ImPdoVBcY6ZFm3714QHNBMUvvRTfhh6ewTqL+Hid90H7jWOpbAwEvjVWHbk7MY5gdwih4sn1KuqtdqBXA8XB8hm5+0lqxxhtkPcPY6Xgch3EaQR49Vf2dZ5KYBH/P+jqQCfJ52ntVMgaxBjVknyl4XECDn8T2quoFk1PIXqWhjjl0rXMFB8tRMGqXPn32fqW8rjI0hP9Twj1LvYB4ihb9soGg4fkF3la8uVz/F+jrJNe31Z/2QOdXHpCFoelouJQFP6ItUw2j93rZf4PwNbVh4Q/rCtD785DTYNFHhgbhhjqZPD4nv6T9uxxz6sa78i8V6tgWQG++ZG1t8i/FZEzZTGy79Or4SUiGaGjkVyCnvgb/Qjl1LLYbl33C7VPD5yPlWRsN4xuRAb4errCPtnVXjUEXdEKtgn/kuPKkMNQvoYSmSh7o1I/G8HA1dEhfWx23ySIu5SJ59Es6xvMEnhJP7Ns44P07RriVZyNpiPyttiVDtmR3M3rsp4hh7lHu33uxy4u6GQ+fOcKgyS6Jm3K8Q+Zz5sroor4PwjsahIMcgb6e53HtuuSd7g3w/QHRCXyXFDRUBuhNDvW8EvSE+5TSUOJdIUtrApnLE+U+AzdcXRIypnf5Tl2MOZ5gbHnkG9dU5saXScb1Wp9YT5hr6JY5w/xFCNVMNmom3ERVuCt55X14aujF+y+fK9tjyQCfqlCZ5FHeKIvOEPREX+WpI72robt1fWiq5YHWEL10hTKmoZWnEdKVBQiy7tvKIZ4AhxonI8cZ0A5hZB39hmVYt3w5r8dforQ8JGp8s9/LEnnDfdfz+uuCtqgVolkwNIr1o4IhTgjhL98Ec6fZ/Byr7q+CuPASbFGGpbXXDKjYUoF3dT+bRx202MLfAXjw2pxT+a/3IdKwfm0JBqZu3MvMB8TiRINWBZ7IpR8nbFmGvoI3jBxlVVchj+nLbAh+dL4P8DBxDYA8Oug/lKfzkaW/6vt8xh8R31FShmlGZ8z3wjeV9w4qszyHe0NUkt/Gy2RiYzKwpnei39Vbk6Z1m4iKzPWj7EE/8GwcgnW8nB8qT+QR/pFE+5qiI5ootl4jrKcNnw7+7xVMegELm1CYHfZWUq+FIvIYis3XhZ/Z7d/IvxSZcryu9tjydK3jOGvpQCZvh3dhaL3hIYv7Nt84xM0alTz9vQBar7TFb+EiL18OS8+Y2zIeIs9t10h4rKXnz79oooBez4Mx8Fnc+23n/02JjEafxZMlyj36s3MMnZY8kDV5c7Dv1j0aAVJI2fkfHuARJl2+QwXvZvOL1rswYOzQH2TXmZ4jb7gi78TQ6gNBTCL8eDJKoifPCeYaQLdej34OXeRBPwGnY432F5GebwAAAABJRU5ErkJggg==\n", "text/latex": [ - "$$x^{2} \\left(x + y + 6\\right)$$" + "$\\displaystyle x^{2} \\left(x + y + 6\\right)$" ], "text/plain": [ " 2 \n", @@ -349,9 +344,9 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAANoAAAAZBAMAAAClTy3yAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsyme8Q6PJIAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADG0lEQVRIDbVWPWgUQRh9e9ns/eQuWRIJWKibCBELMYSA7TaijXhYiIiQmPiDRVAkoBbqISLY6KEYXBU8RVBsvARb8RAEG5NTJIJYmEoUxIuoRVDiNzPf7M79JTY3xc733vfme7Mzw+wCqk08czlqWRdZOH5bvmU2qrBhkfDTP1vsZlgksvavVruZFqnFFrsBhkXCk247/stTqyYbqeN+I5Y4thDZCSmxi7Jb5RGq2vwa5TX3dQHDNaSGykKgeFlySV92qzxClVV7kL8v/wbWNh7OFiK5FwdEd1Y8wnY/jKqDSDXGiZSngqkhH3AYQLMqxxYE0rceTwvuokrws5lbpFrPSl13UGDrUw0robYg0Lm8XKHOztEjak3c7FwoSWZVWOWGG5zXrITKonvj9gGP07Eyzax/eA8vkHZbd+QDrLGBLF483ExKQ+XQANF03W0nPxLSx0GzkYU1Gr+QyMshQMcJoBenvcsKs5v9FbP+Kx8zVhEJyhiqOI/UdaexOwuc4XLMGhaO6yymfE4nCsBBHHcfKMxuyTyelC4Bcy8XEKOMoUrllFK70VSIeaRI/caGhYVkkZO0fTQxF7clPhYEV4LgOsUbynSMloCu0aszPmFDla4QdoLg5pcgGKQQyNB9OyeCiK2y6PJEUjZRB/ihAMDvNuLRxtA12lXsvfuXcoZKuhHF70YfEoeE0i1iaSRV4DZX0pFcI6T/aMxu4bu9c3Ge5iNWklXtOaVlt848MnTf7lOkngPZlzTjbkXMZSD2/16sgj6Fo31D4Rswst9DGykMVc0pydBU8nWnJBVZjBSeQ1+yoAPdvtRRsamkaOxmf4bjz5YwlVpAh087Eqkyo0IXrqRdxjkfmJdcyBoWPf3d77k4QAtjDfVtOcVqdkPP20Ow58ez7Uc3HaaUoUqWlFSfyV3jb4i4o0i9klUWnJJddCcJqN1MhYgj1U5OaTcJ7Vwjljmzi+5bwa4xU0YcqcaYtXwjHd7KVawh0KHYltVbqKr74sixTb449XXD72R9ymBCVWhrJIGnVWglEB7PlUThIZ5spGr6pwD8A4ssuzZjg3jWAAAAAElFTkSuQmCC\n", + "image/png": "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\n", "text/latex": [ - "$$x^{2} \\left(x + \\cos{\\left (x \\right )} + 5\\right) + x^{2}$$" + "$\\displaystyle x^{2} \\left(x + \\cos{\\left(x \\right)} + 5\\right) + x^{2}$" ], "text/plain": [ " 2 2\n", @@ -381,9 +376,9 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAANAAAAAZBAMAAACybb07AAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsyme8Q6PJIAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACxklEQVRIDa1VTWsTURQ9k04m6eTDoRHB3TSCu9JSCt3JbEQQ1OJCXAjRutFFsbhRF0pQF7qRoCiOHxDFhbhq0Z2I/gFpRFCKgnHpylRUUIT4Pu6dvEkzSaB5i7n3nnveOe9NXt4Aeiy98ijbcugr5QRjtS07aIH+Utkg/3NERv2lsgv2r1EZDZByN0ZkBPSXyvrKaN/wdpkggUtSCd0lhdsrCe0u+Kb3to65LpBLLcVVV8w0FDAedOEJ5ff2b2Bn7yZJmU33a1QdwTGZX4wAmTyOVbJwfQ3dmQ0Ah4ouHklponqW3kcHIH/v2arErhrtfkYzkmc1iR1bEEtRT4VUZFRst1sCsqvi0RkxAQXzjpQRbhM1xiOpjorIlNHErr27fYJTDbHO8tzhRV2TgDXl46CnIDaaP/tZ1Pyrs5EpRYo6SCPreOZytkZwbhnYgfP+dV2TgOM2Ma0RNlrFoQXgAk3jBZlSOB3K8VBRpJHjORtuQDOydeAEznhPdE0C+ws1vNQIGwG5KvBUg3wYYlLU0kHtCOMrEVgUy/RwX9ViRTfC8JbIvaKPHyI6YXj3WxjOqHZB3I1rMuvwLFNKkfihfiNs87mGNIISVRC/+4qX/6c5tCNx1TviblRGosE8U0rz6amN1t5EoHx1YNGOwDpSTc0ho2INBfHaj2qwY2RI4dQ1Oa4oijRyvWmkPJohD8OjVAuTuuaVPkdOvy/+wxYAeYC6DkNMihR1kEaV+mtEN6nTQPpvrmULPznY6BMqhNCO7AYuBcAHxYp4MSlq6SCNSuWJj6QCpKuwZienzsUFUFr8EmiIT92Bk+8E8CDOi0lRS4XCnj/zZi3ypCtonXhspEq7SijvnMphQvxS3a6njNUs/vxagaESXarEM1oD05wpxOzscs7n3IwJnwmTkpj3/PCly/Ji2zxebIaGR6IDOHhK4qe859T/bS2hHg5dmHoAAAAASUVORK5CYII=\n", + "image/png": "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\n", "text/latex": [ - "$$x^{2} \\left(x + y + 5\\right) + x^{2} = 1$$" + "$\\displaystyle x^{2} \\left(x + y + 5\\right) + x^{2} = 1$" ], "text/plain": [ " 2 2 \n", @@ -407,9 +402,9 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAH8AAAAyBAMAAACHVRmSAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMA74lUMhDN3XarIkRmu5l0i/HRAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABq0lEQVRIDWOQ//+JgVzA9P+/AIOwiyu5+hlYXZwFGETI1g7SyEKmAcyiUGvJNCDy5VfKDGDgGDVgNAyAaWjA0wHfxG9zIGmZcF5g0lCBJnusFEEDWLMZnmHVCRUkaADvA4a7ELXMDdgMImjA/gUwbWQacBGmn4EoAyI6Vzc1wLWAGN+c+jZABIgxgFWBp4I9AaIeQrJ+O8AgTLwBTAFMX5kXoBjwP4DhYQBYBJ8LWNPLgaDMgZWB7QJYcRiIX54CZH9nYDgP9ANTWlq6WFraBJDsfwTALJX5G0BKkEAZ0IADYD4+FyA0+Dsg2GDWRIgLgGxiDGAO6GfggPgYZo4/MAwgbHQD9O6BVKImpP0G9xnWwLRCaE4FVuyxwLSAMwHDgMiOiDcHIBrhpN5LBwgbzQXsC1h+ASVQXQDXhY2BbsAGrt+kGcC6AM1YZlDtRIIL0LQzMLA3UGiAHshIClzA84BsAyB5dhPDFjJdAMmzLMnGV8k0AJJnGf///0CmAfA8S3YYMCDlWfJiASnPkmMASp4lxwCUPEuOASh5lhwDQIEPB8PDAIqb+5R2OACieHsa0A6UPAAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAH8AAAAyCAYAAAB1ewShAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAE60lEQVR4Ae2di1EbMRCGbYYCHNKB6YCQCkI6gKQCoAMYKmBIB4QKMqQDoAOgg9AB4A6c/zskj7g522efdEa+3RlFOj1X+0ur1QOn3+v1XuUGciH9Go/Hp2GEhfOVQL/fvxD3J6UejPqKAPxDuccg8UXgj4JvC2YsAYHP5N4KurCj8NWmi3gS2E9BogXXSAJuIk8msxsMvY016uPad0Wg7cu9evCadtjP/Kb1WPlEEnBAX6l6NPNQrmyfLd2ygb+06Nop6FT2Aa1pIBzJ24/Vsqn9WJLMsB4DP0PQYrFs4MeSZIb1GPgZghaLZQM/liQzrMfAzxC0WCwb+LEkmWE9Bn6GoMVi2cCPJcl26ol2uge7dsLXDmiNWtHJ3qUq4FZuz1V0p7h7hR90AvjbxS3sdRp8CZB77mcntc/y/0iY4dX2wgJNUUA8Haeot5NqX6AP5B4k0BsJlocrvxRGpXKB0hnqJPhC91ruXqDfBkgPFX4JvmsHNZC4ai2/lKldflUZO6f2BRLrJm47FLoGwvfwuwvhLs583iaOBHbnXy4ln/maaayl3ENDX+UQPiqWd2QYWc9uzVWwFWLWP4ov2v8ph8GHFrguLQOKWm9KCr4D/kxCLV4C65tBcCN3CeD6/qfwSA6DKzk5fnw7u54vIuBF7lRxf32GdfdTq/0zCfA8ECIzjFnv96ZsYYpXKkGeNoI7Atnz4NvD+LsqDRCftpb+zJnvBHG3YM8PJVi/Vz5XmJntCVV76+Pkh9a2z/POj8DDpD7aVX18V633bP3QTLtylXypLOcCLBtlYmnbUjrLSJl4GT13gKvsuFwwxrfaLjpcVddM8BGWCn2pKlgnzpUPsyK4YgkII2eFm/JQUTfAhwOynAXNVEnipZJ3Ace7uqHSl16+VHYqSJXMRIhMrfYnLEpAzHqocla9JbXyL1ppKsBKq9IKrTDWdiNJwWdGyKESoUJdaoT7JQEj6yRIf8uV/l9sEE74PF++RTQcW8BVD07PTy1f/biQu5S7cX65X1PrSQa+GAFsTtIK0OW/O0RROrMPYc9SwcoSl9zgw6LHGC1IvCCwH3L82Vo2JL6xQdg5Hcsh3y252jbaZsKecuuEkIdikqNPjJ4jhbmhwrjqieGyxU10clK7BwjO8cLgYyB+U/xEKyVnIk4D2BrI0xNa7UH9wv6Yu3wlA1+NI9Sylbu0QeR7F8sXf5XGW6z6W6yHgeuB9lo0jJvKSjLwp7a4ngkrsRM0gN/dT0i03qhG684lA3+uiOZncFpufsb0ObABOKX0GmBmixszUy0xGwlgw4hZDtBqL60GfjbwTmdUwHMyORDwHJfXJlP7tUXVTkYBOVBLtW9BlX9P+bc98O6bX1aptXPhZ1m46GDrZW6FMhAOAH/hcVCYQcDN5wlxLsyjzQInfWPgsW1my+cdt6ZogalYKp1yrzbzJYUPRHVuQf22DrY50GHAcJg2IQFfy+Az8Cci+xCBhW5BBfKnJlybwddEepHLVsxY1nPUeBIy8JOItXmlMtz8gU2yAyQDvzlO0WoQ4K3eghr40aBrVpHborV6C2oGXzPMYpZu/RbUwI8JX4O6nLHX6i2oqf0GgOVe1MDPHcEG/Bv4DYSXe1G/5vPUKjwStJ9czx3ZgH9hyxHwVhA1JOx/b5/EkOw/WwilkXlY4HPXX/4T8tF/Lpu0ZsotEIsAAAAASUVORK5CYII=\n", "text/latex": [ - "$$\\left [ - x - 6 + \\frac{1}{x^{2}}\\right ]$$" + "$\\displaystyle \\left[ - x - 6 + \\frac{1}{x^{2}}\\right]$" ], "text/plain": [ "⎡ 1 ⎤\n", @@ -441,9 +436,9 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKoAAAAZBAMAAABTBqhqAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsyme8Q6PJIAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACe0lEQVRIDa2Vv2sTYRjHv5deLtdcEo9WBLdrBLfSUgqut4ggqMVBHIRonRyKxUUdlCAuXeSwVDx1iOIgTi26ieg/II2LUhTM6mQq6iBCfH88z937Nj0Ummd4n1/f93N3712eANqWXocU7dnlKC8eS/aM0wAD5ce1HyOiGih/wf05KqqJqm6PiAoYKD9S1GP/z67EBVpCye6SkrjrBcod5bvhuw7mdxQ51SiZVbqqNh4r98/l2+AXcHB3GaFk8wzOSXdDLpk9ySIOqpGO7s3FgEcJbB2hhLD24PmG1N+WS2a2WpaZOisTpydXYZaOUaLeGAz6wrltseRmqVXZomKNpJZOoyYOHT0cUbskTtdpzp9e1DmpnekIJ0NVYuqRK59Fzq+FqTnKOV+55SdEDZaBA7gWrVhUr9rDjK4wdQOnFoDrtI2vnqO80NuuxtT2O8AFXA6f6pzUx+sJXukKU4GgDTzTRT5XA+VgfJ2a4njFDYR4qPJLaXonTVdFHDYifBfeS9P7X9N0VrXrYm5syijXWah9kZLJRVKhCNLzPaAV1v6oAn8DYsB5Ym4oqqGDgdp8q3eIVZ4AmJBTt1DqiYYwOoFGgrqYG2d1Mbs6MlQ1nEEppLZ8W49LfUzpnN/tCwT6sZlaFzeQDL0tA9XqvEE2Urwuyr+Dvivg0pj6CS2q0L26XdyMgQ9KlekM1GRz4iNtAcptOHNT01dtNSYXvwiGNP4GTlx8L7JHqpZRLRS1lCv6xW6RiKkqddtU5WeidMjZ02W/7o8lDv9ROLGxJZsupDNadhiYu7jlLwcRx6YvmISmRMe7Tu1yU/7oh+3lcKmgkn0OBX2jXPgPA/wF1cGLzQch/MoAAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKoAAAAZCAYAAAChKLVZAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFdklEQVR4Ae2bgVHcMBBFOYYCSFJBoAMgHUAHUEKgA5hUwEAHJB2EdABUEKADSAWE64D8p0ge2ZaNvfb57sCaMbJW0mr3a7Urycfk5eVlxZImk8mZ+q3r2dDzqOdEvKbKxzQiYEagyq4mFkP1zC7UFwNdUflS2YbK22YJx47vHoE6u1o1orNf6Heq8pYGwruOaUTAikClXVkNFUFiowwhP6ZZhR37vW8EYhvK7GrNgolC/Gah35Yv3xboY3FEoDECdXbVxaPGAnCwanWYYpug5zBmMr73g4Bw3X8j27DMrkyHqRhOAeJO/1oNRzG97l19uC24VJ+9unZjXRkBYXcn6oWen8JvqjLRDOyvVP6l3CXROeDiPNyB15OXJpP8ObvqZKhihkfcFhiNjRSk1A+wD5YVRHSYVxJ2zxqbhR6nc2F5EhPUjjY3oi/dTUzKrsyhX8x2BcRmMFLKesJeNcYs9+6FuB3KSDUeYfA4J8QcCz3Ig4c814P3xDiZg5yRirYiGgeR66669yAv4jROGi9pV6bDlJhhkLjmUxTxUuBVD/x7XQaoY8ivQ6i+7jFlmBVdTkX/owfDXvhUZ1cmQ5XGN3rcPjPW3q/imJR7lyDu6kHtlnLflFNmCQrMhzB/1LOr9+slELnSrjJDlTIYXjiFf9E7ng/Dwnt+0vMkZd3KVP5BZUvC+1YC1kYGy+Bt+0TycB33EPSHj+rAhr32Z9EJs4MljR3miTlDNr4S3lcIAN5EukrcK/r1Qo4whJ/drqQgDFD4jHdfBogHPce+zPtdqLfm4nGl5zDVX/SZyCC+LA6nR2rcOpr6OUyUs296jtvCU49I/zFrmquPWR7GUALD9TCe3lkwVOA13fzFuejMpXnu1Ncsr/r2NqfBo34TU/YzIbFKAeC7J7D/7CNcw/Ov51nMhpKhOG6y7D3mb1+JRyrqzz57cC8lI8zt71UmtCMHV1bFDzEiObwxmHmk3ubUXU/hnqXwNGiiMquW1ZkDJdRbc/HlaoVrqdIEd5VB/Tnc4fmKiUn6qKdoaLTjYIIRllIsj5f7VG2zQ4loeDHuKTNazKRveWLexXeNhZHiObkByOmpOrZueNRJsV9cnoW84tmfXUmBVLhgEkzhMsUv0MQTQ02GqNAm5GrXiwziYw5dyIK8XpY43DL5VG4FeZvm6mOWR325xC+FcdFYpMhTwlY0J2tT+Yrt1N8sb4KXeU5XJUgu+RUIreT1cg1tBcL+q2FoxjK0lRyPey/Qs4ijMsY7Fa3qANN2jKbtUxGDvgHT1G8tqqJJ0zF7add1Tp2higmX4kFZB0Y8Cao7juq7CE5YArhSGlCG0tivENhX58KpynPZn2pcPpumvjQxZ8XFJJJLyB8vMk+efdbnnK6KGUoSUsJqze1LVe8ULXgUq5Z4oBLQA8vQVvackXpZwcrt49sy69j+TOOzH82SyuxNWfzJvbbo4D2L6Ci21anvOV3TUIQLPsfxayauXFD40APCPSF72HD6p9glMbk5oD2zIWVoKz/3yT88NvQNJ+vBJ1/zwAk/GCteEifCdqruLndH9V/1DJ16ndNOP0qxaC6guZPdA3RL/7Z9NB6HAf5NJnk6N/Bjoe2IXykyNOHVtzx1Y2ostnMcvsLiqmuerBtS3qQAnjgPQyVUtf7FVZ0SdXV+sogKrfdp6suWKPtfMM+LmwsWmsmjdpGnTs9UncbiNuBJspoX6ZDypnQItMENlYGlPFuAIwE4iFcNyrbNJSfen69Tbuvj5eZ3n+aJbyuDtb03sKX8mV9K53kZKiFp4X84rcnm0MQ9JInwWfdN3TValD9+US28M2iK11wMFeEEJAcBLqj7Oqg11fnNtxO2bK+uFz1itZmIf3yMaza5icDpAAAAAElFTkSuQmCC\n", "text/latex": [ - "$$x^{2} \\left(x + y + 5\\right) + x^{2}$$" + "$\\displaystyle x^{2} \\left(x + y + 5\\right) + x^{2}$" ], "text/plain": [ " 2 2\n", @@ -470,134 +465,157 @@ "<?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.38.0 (20140413.2041)\n", + "<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n", " -->\n", "<!-- Title: %3 Pages: 1 -->\n", "<svg width=\"422pt\" height=\"260pt\"\n", " viewBox=\"0.00 0.00 422.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=\"none\" points=\"-4,4 -4,-256 418,-256 418,4 -4,4\"/>\n", + "<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-256 418,-256 418,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\"><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=\"135\" cy=\"-234\" rx=\"27\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"135\" y=\"-230.3\" font-family=\"Times,serif\" font-size=\"14.00\">Add</text>\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=\"#000000\" cx=\"135\" cy=\"-234\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"135\" y=\"-230.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Add</text>\n", "</g>\n", "<!-- Pow(Symbol(x), Integer(2))_(0,) -->\n", - "<g id=\"node2\" class=\"node\"><title>Pow(Symbol(x), Integer(2))_(0,)</title>\n", - "<ellipse fill=\"none\" stroke=\"black\" cx=\"99\" cy=\"-162\" rx=\"27\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"99\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">Pow</text>\n", + "<g id=\"node2\" class=\"node\">\n", + "<title>Pow(Symbol(x), Integer(2))_(0,)</title>\n", + "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"99\" cy=\"-162\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"99\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">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\"><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=\"M126.65,-216.765C122.288,-208.283 116.853,-197.714 111.959,-188.197\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"114.99,-186.439 107.304,-179.147 108.765,-189.641 114.99,-186.439\"/>\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=\"#000000\" d=\"M126.2854,-216.5708C122.0403,-208.0807 116.8464,-197.6929 112.1337,-188.2674\"/>\n", + "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"115.237,-186.6477 107.6343,-179.2687 108.976,-189.7782 115.237,-186.6477\"/>\n", "</g>\n", "<!-- Mul(Pow(Symbol(x), Integer(2)), Add(Integer(5), Symbol(x), Symbol(y)))_(1,) -->\n", - "<g id=\"node5\" class=\"node\"><title>Mul(Pow(Symbol(x), Integer(2)), Add(Integer(5), Symbol(x), Symbol(y)))_(1,)</title>\n", - "<ellipse fill=\"none\" stroke=\"black\" cx=\"171\" cy=\"-162\" rx=\"27\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"171\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">Mul</text>\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=\"#000000\" cx=\"171\" cy=\"-162\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"171\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">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\"><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=\"M143.35,-216.765C147.712,-208.283 153.147,-197.714 158.041,-188.197\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"161.235,-189.641 162.696,-179.147 155.01,-186.439 161.235,-189.641\"/>\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=\"#000000\" d=\"M143.7146,-216.5708C147.9597,-208.0807 153.1536,-197.6929 157.8663,-188.2674\"/>\n", + "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"161.024,-189.7782 162.3657,-179.2687 154.763,-186.6477 161.024,-189.7782\"/>\n", "</g>\n", "<!-- Symbol(x)_(0, 0) -->\n", - "<g id=\"node3\" class=\"node\"><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 id=\"node3\" class=\"node\">\n", + "<title>Symbol(x)_(0, 0)</title>\n", + "<ellipse fill=\"none\" stroke=\"#000000\" 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\" fill=\"#000000\">x</text>\n", "</g>\n", "<!-- Pow(Symbol(x), Integer(2))_(0,)->Symbol(x)_(0, 0) -->\n", - "<g id=\"edge3\" class=\"edge\"><title>Pow(Symbol(x), Integer(2))_(0,)->Symbol(x)_(0, 0)</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M84.4297,-146.834C74.2501,-136.938 60.4761,-123.546 48.9694,-112.359\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"51.4055,-109.846 41.7957,-105.385 46.5259,-114.865 51.4055,-109.846\"/>\n", + "<g id=\"edge3\" class=\"edge\">\n", + "<title>Pow(Symbol(x), Integer(2))_(0,)->Symbol(x)_(0, 0)</title>\n", + "<path fill=\"none\" stroke=\"#000000\" d=\"M83.7307,-146.7307C73.803,-136.803 60.6847,-123.6847 49.5637,-112.5637\"/>\n", + "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"51.7933,-109.8436 42.2473,-105.2473 46.8436,-114.7933 51.7933,-109.8436\"/>\n", "</g>\n", "<!-- Integer(2)_(0, 1) -->\n", - "<g id=\"node4\" class=\"node\"><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 id=\"node4\" class=\"node\">\n", + "<title>Integer(2)_(0, 1)</title>\n", + "<ellipse fill=\"none\" stroke=\"#000000\" 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\" fill=\"#000000\">2</text>\n", "</g>\n", "<!-- Pow(Symbol(x), Integer(2))_(0,)->Integer(2)_(0, 1) -->\n", - "<g id=\"edge4\" class=\"edge\"><title>Pow(Symbol(x), Integer(2))_(0,)->Integer(2)_(0, 1)</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M99,-143.697C99,-135.983 99,-126.712 99,-118.112\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"102.5,-118.104 99,-108.104 95.5001,-118.104 102.5,-118.104\"/>\n", + "<g id=\"edge4\" class=\"edge\">\n", + "<title>Pow(Symbol(x), Integer(2))_(0,)->Integer(2)_(0, 1)</title>\n", + "<path fill=\"none\" stroke=\"#000000\" d=\"M99,-143.8314C99,-136.131 99,-126.9743 99,-118.4166\"/>\n", + "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"102.5001,-118.4132 99,-108.4133 95.5001,-118.4133 102.5001,-118.4132\"/>\n", "</g>\n", "<!-- Pow(Symbol(x), Integer(2))_(1, 0) -->\n", - "<g id=\"node6\" class=\"node\"><title>Pow(Symbol(x), Integer(2))_(1, 0)</title>\n", - "<ellipse fill=\"none\" stroke=\"black\" cx=\"171\" cy=\"-90\" rx=\"27\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"171\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">Pow</text>\n", + "<g id=\"node6\" class=\"node\">\n", + "<title>Pow(Symbol(x), Integer(2))_(1, 0)</title>\n", + "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"171\" cy=\"-90\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"171\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">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\"><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=\"M171,-143.697C171,-135.983 171,-126.712 171,-118.112\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"174.5,-118.104 171,-108.104 167.5,-118.104 174.5,-118.104\"/>\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=\"#000000\" d=\"M171,-143.8314C171,-136.131 171,-126.9743 171,-118.4166\"/>\n", + "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"174.5001,-118.4132 171,-108.4133 167.5001,-118.4133 174.5001,-118.4132\"/>\n", "</g>\n", "<!-- Add(Integer(5), Symbol(x), Symbol(y))_(1, 1) -->\n", - "<g id=\"node9\" class=\"node\"><title>Add(Integer(5), Symbol(x), Symbol(y))_(1, 1)</title>\n", - "<ellipse fill=\"none\" stroke=\"black\" cx=\"279\" cy=\"-90\" rx=\"27\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"279\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">Add</text>\n", + "<g id=\"node9\" class=\"node\">\n", + "<title>Add(Integer(5), Symbol(x), Symbol(y))_(1, 1)</title>\n", + "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"279\" cy=\"-90\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"279\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">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\"><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=\"M189.812,-148.807C207.002,-137.665 232.618,-121.062 251.993,-108.504\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"253.916,-111.429 260.403,-103.053 250.108,-105.555 253.916,-111.429\"/>\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=\"#000000\" d=\"M190.3082,-149.1278C207.3555,-137.763 232.4019,-121.0654 251.5344,-108.3104\"/>\n", + "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"253.4799,-111.2199 259.8589,-102.7607 249.5969,-105.3956 253.4799,-111.2199\"/>\n", "</g>\n", "<!-- Symbol(x)_(1, 0, 0) -->\n", - "<g id=\"node7\" class=\"node\"><title>Symbol(x)_(1, 0, 0)</title>\n", - "<ellipse fill=\"none\" stroke=\"black\" cx=\"99\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"99\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">x</text>\n", + "<g id=\"node7\" class=\"node\">\n", + "<title>Symbol(x)_(1, 0, 0)</title>\n", + "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"99\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"99\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">x</text>\n", "</g>\n", "<!-- Pow(Symbol(x), Integer(2))_(1, 0)->Symbol(x)_(1, 0, 0) -->\n", - "<g id=\"edge7\" class=\"edge\"><title>Pow(Symbol(x), Integer(2))_(1, 0)->Symbol(x)_(1, 0, 0)</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M156.43,-74.8345C146.25,-64.9376 132.476,-51.5462 120.969,-40.3591\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"123.405,-37.8461 113.796,-33.3847 118.526,-42.865 123.405,-37.8461\"/>\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=\"#000000\" d=\"M155.7307,-74.7307C145.803,-64.803 132.6847,-51.6847 121.5637,-40.5637\"/>\n", + "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"123.7933,-37.8436 114.2473,-33.2473 118.8436,-42.7933 123.7933,-37.8436\"/>\n", "</g>\n", "<!-- Integer(2)_(1, 0, 1) -->\n", - "<g id=\"node8\" class=\"node\"><title>Integer(2)_(1, 0, 1)</title>\n", - "<ellipse fill=\"none\" stroke=\"black\" cx=\"171\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"171\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">2</text>\n", + "<g id=\"node8\" class=\"node\">\n", + "<title>Integer(2)_(1, 0, 1)</title>\n", + "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"171\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"171\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">2</text>\n", "</g>\n", "<!-- Pow(Symbol(x), Integer(2))_(1, 0)->Integer(2)_(1, 0, 1) -->\n", - "<g id=\"edge8\" class=\"edge\"><title>Pow(Symbol(x), Integer(2))_(1, 0)->Integer(2)_(1, 0, 1)</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M171,-71.6966C171,-63.9827 171,-54.7125 171,-46.1124\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"174.5,-46.1043 171,-36.1043 167.5,-46.1044 174.5,-46.1043\"/>\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=\"#000000\" d=\"M171,-71.8314C171,-64.131 171,-54.9743 171,-46.4166\"/>\n", + "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"174.5001,-46.4132 171,-36.4133 167.5001,-46.4133 174.5001,-46.4132\"/>\n", "</g>\n", "<!-- Integer(5)_(1, 1, 0) -->\n", - "<g id=\"node10\" class=\"node\"><title>Integer(5)_(1, 1, 0)</title>\n", - "<ellipse fill=\"none\" stroke=\"black\" cx=\"243\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"243\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">5</text>\n", + "<g id=\"node10\" class=\"node\">\n", + "<title>Integer(5)_(1, 1, 0)</title>\n", + "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"243\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"243\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">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\"><title>Add(Integer(5), Symbol(x), Symbol(y))_(1, 1)->Integer(5)_(1, 1, 0)</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M270.65,-72.7646C266.288,-64.2831 260.853,-53.7144 255.959,-44.1974\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"258.99,-42.4395 251.304,-35.1473 252.765,-45.6409 258.99,-42.4395\"/>\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=\"#000000\" d=\"M270.2854,-72.5708C266.0403,-64.0807 260.8464,-53.6929 256.1337,-44.2674\"/>\n", + "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"259.237,-42.6477 251.6343,-35.2687 252.976,-45.7782 259.237,-42.6477\"/>\n", "</g>\n", "<!-- Symbol(x)_(1, 1, 1) -->\n", - "<g id=\"node11\" class=\"node\"><title>Symbol(x)_(1, 1, 1)</title>\n", - "<ellipse fill=\"none\" stroke=\"black\" cx=\"315\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"315\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">x</text>\n", + "<g id=\"node11\" class=\"node\">\n", + "<title>Symbol(x)_(1, 1, 1)</title>\n", + "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"315\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"315\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">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\"><title>Add(Integer(5), Symbol(x), Symbol(y))_(1, 1)->Symbol(x)_(1, 1, 1)</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M287.35,-72.7646C291.712,-64.2831 297.147,-53.7144 302.041,-44.1974\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"305.235,-45.6409 306.696,-35.1473 299.01,-42.4395 305.235,-45.6409\"/>\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=\"#000000\" d=\"M287.7146,-72.5708C291.9597,-64.0807 297.1536,-53.6929 301.8663,-44.2674\"/>\n", + "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"305.024,-45.7782 306.3657,-35.2687 298.763,-42.6477 305.024,-45.7782\"/>\n", "</g>\n", "<!-- Symbol(y)_(1, 1, 2) -->\n", - "<g id=\"node12\" class=\"node\"><title>Symbol(y)_(1, 1, 2)</title>\n", - "<ellipse fill=\"none\" stroke=\"black\" cx=\"387\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"387\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">y</text>\n", + "<g id=\"node12\" class=\"node\">\n", + "<title>Symbol(y)_(1, 1, 2)</title>\n", + "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"387\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"387\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">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\"><title>Add(Integer(5), Symbol(x), Symbol(y))_(1, 1)->Symbol(y)_(1, 1, 2)</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M297.812,-76.8069C315.002,-65.6653 340.618,-49.0622 359.993,-36.5043\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"361.916,-39.4294 368.403,-31.0533 358.108,-33.5553 361.916,-39.4294\"/>\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=\"#000000\" d=\"M298.3082,-77.1278C315.3555,-65.763 340.4019,-49.0654 359.5344,-36.3104\"/>\n", + "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"361.4799,-39.2199 367.8589,-30.7607 357.5969,-33.3956 361.4799,-39.2199\"/>\n", "</g>\n", "</g>\n", "</svg>\n" ], "text/plain": [ - "<graphviz.files.Source at 0x7f72368cf1d0>" + "<graphviz.files.Source at 0x7fc7dc51b2e8>" ] }, "execution_count": 19, @@ -644,9 +662,9 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAL4AAAAcBAMAAAAtjhhLAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMkS7zRCZdiKJ71Rmq90icBAQAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADFklEQVRIDbVVz2sTQRR++bHJbpKuRcRr4kk8aApS8SKuGhARYQ5C9VCMtEUEwb20RUG6KHhQoT1o60XMf9CgiEJB9yAKRaWg0IIeqqgtHqQWi0oP8c2vnX12tVXqg8x73zfffp3OzrwFiMLp6YtqWozuYpT4J3QTXiU/5wRtXvLMmtiNSjUP5SDxATdIfU+cWI30uSDVoWTvYLiiSprcir1ImTWi7VyXNXv7yJTUobhE8RqRE6LwlBHPmZJWrvhP4Rpl/4RKAZ/9AGCbpTl1ziXFqCBtvZNJkhh3kG1uwgwnBgBipk9iGlKW6gJmA5FWHcZbPwCOctkwQKGp9emRdLuuad4GWzhB//59qkGkmUPTAa6bb6kbQplp3aaJu1GtOZFThyc6eTFPWO1mSM1Mccpq4JDrgElMMsZbLV3SXGi1FpCxZwmt3QypGeEP+3Ei34BeTNbgzNYxo4tVXRcunvMVzteJUrlZAz5cYUKi/d88PYmYn4n0EuzEdBxe+O+F5JfBGinNuZ4iMyFRKjen2IAhqdD+neKiPkYy9QWOYLoBt9kDqaGjw5ylYqA4t0mUyu1qzhNrRJH2B8jMAjxEBu/9R0wMDuCYEBZkOyK6UDHK67Xap1qNr40VfPiG2TAIctivypjtZbF+EArEK2OD3n08yRU+zb1E6NVWGe5CnGnzwMF+JfwXpb9WSF18LLdHiO8P31EV2r+XnxIRiil4kMOmsAM57LsvMd3LL0C/1NCxyIYgzxTH329Mqf33QGZKKhSTw3vlAfD3i+fnPI7LmQUbH8awvoqkh2pzr2lq2Eliyuht9kA1lHrlb9dhMgA4jWSpAVUG1nT/wDMpgc96tQJ3D3adCdUMpGeJUq+/e+xsICWauXyrD4l9+MP7K9+aFOAYncaIMcXv+kOvkmh/AcVtz/qQGzEGWDkEUUD72zE52eZZ+uOmGMmL/naCQapBTLoIoiATUCyQG2b8BFr25+c485rMhgRRkPh9SQ/yZrMydnPqLf7Eh2DlfBLzt9/HEt/7Yj3Jal24S8Llzrp4JZnwY/qf4yeXiLcck/e0SwAAAABJRU5ErkJggg==\n", + "image/png": "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\n", "text/latex": [ - "$$\\left ( x^{2}, \\quad x^{2} \\left(x + y + 5\\right)\\right )$$" + "$\\displaystyle \\left( x^{2}, \\ x^{2} \\left(x + y + 5\\right)\\right)$" ], "text/plain": [ "⎛ 2 2 ⎞\n", @@ -684,8 +702,6 @@ "metadata": {}, "outputs": [], "source": [ - "my_field = ps.Field.create_generic('f', spatial_dimensions=2, index_shape=(3,))\n", - "# or equivalently:\n", "my_field = ps.fields(\"f(3) : double[2D]\")" ] }, @@ -703,9 +719,9 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAACkAAAAdBAMAAADFpVh+AAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJl2IquJVETdZu8yu83OyatpAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABHUlEQVQoFaWQPUvEQBCGnxjMFyEGQbirTOEPEIurFzsL8UARxCZcZ3eNhVpcGktBEBtBPPAnWNgGW1GvsfcneF1KJ7vJyRI7B3beeZ9ZhmHAxHujlrwcWbY1Z21h6f/o6paiO+FwMu5Sp+rRpf63bHNhbSTGu4bth30bR8e3mU20W9n8A7JXClW/nViXE8kemKsNBvhFjU/kHWCuFuX+kI2afkKcNxuHBXPWavoEy2VD10ueSRQ4FYTS1Jf4UNzhTiGYw86Cptwgo/FmcLWgSgYGM04T+X/ZUplbEX9x3xfy1lK9QzDksd6u7sjVdlM3k6FRLlYiTPXVXqeMRilLhYa4Y6NGEmNA9pDwlZZznSWZItLWybRIan5p66b8AFnOOMJB1gZeAAAAAElFTkSuQmCC\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAACkAAAAeCAYAAACxHzfjAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACvklEQVRYCe2Y7XETMRCGzxkX4EkJpgMDHTgdJJQQOvAMJaSEQAVM6CCUQOggLgHSgXkecfLodLpzdEDuDzuz0Wm1H69Wq1WS5nA4NFO4aZoNfD/FttZmSaAqWiwWgnvfGq2rjCcqL9zVFALsFrtb7F9Nsa+xOatRnkv3P8i/lfnBi0PNrQhyAz/C1t0N9bdnfHEaO+5PoHmCBXYNe6tnoWIm2yxegugC/uZIFr/OgpCgRZDIbS82+QgsjoojWQ4vQkPH/Zboxfojy2v4lnXr1e87ePcv0XaaOcGsvdfwO/gHHDJIRuMLg2gGAkDv7QaGz9CutDaHrHfcZHPd5qpUhzOksWl6IEERWg0Z+z6GKNnMmNqkNXx32l0J5OCliRFx0mvsOobvo86pEd2dfuKY6XshQ4cJ8rzGEBroLpfHuWvwOpm7a2+7/BjlYyN6XlA3Gu4D3/bkTkzm+gtxSpfmJ4vFS4NcQEfnMYgj5M6fC9KndpvZ62QVZX7DAXjnuEmxC/JQPX5g7TM8mdoYXk5bXEpPTI5HDFjnHvu6AxLhG61QGLrZG9aGNqDpc0iAkiBSEvR5KuDbhGxzkL7VRYDuKHPwp9M8k/rzFFPy1bs4I/gl7GWQTHf8DoLkhyCLT2WiU/OZZy2f68tsr8ykb/AKoGEXHOdH5kOUH9GQ3pg8bjTPmvO8lEIJLFkIINvxasS7BrnjEfXykheChAi0lDl/LUxJnf3yROZSAx2P1WVxAwDSxp53JcDWYZjzHeofHfvkl2S9VQvx9r0+ieKgDEv727GXqQtFEK4psKaPfZbvDWzvvUx9qwN7irJ/GvfiKoe3vYWScpRhoONOsLh2apxih82DfqtABoMJ/1oRIHx8Sk9tqI2jzbXf3u5a8pcC394aOidYvNUn7fBvfft31e9OI9JaxkF1Zmpi4N+yOtb+L70YupAa3+UnAAAAAElFTkSuQmCC\n", "text/latex": [ - "$${{f}_{(1,0)}^{1}}$$" + "$\\displaystyle {{f}_{(1,0)}^{1}}$" ], "text/plain": [ "f_E__1" @@ -763,9 +779,7 @@ "metadata": {}, "outputs": [], "source": [ - "img_field = ps.Field.create_generic('img', \n", - " spatial_dimensions=2, # 2D image \n", - " index_dimensions=1) # multiple values per pixel: e.g. RGB" + "img_field = ps.fields(\"img(4): [2D]\")" ] }, { @@ -775,9 +789,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAywAAAAsCAYAAACHZjwAAAAACXBIWXMAAA7EAAAOxAGVKw4bAAARw0lEQVR4Ae1di7HVOBbkUS8AYCIAMoCZCGbIgE8EO2TAFBFMMRkAEWxBBjARPCAD2Ah2eBmw3bo6Xln+Stfyt1Xla1ufI6lPW9K5kuyLHz9+3JATAkJACAgBISAEhIAQEAJCQAgsicDFxcUr5H8Lxz0c33D8AVvl+kIGC6CQEwJCQAgIASEgBISAEBACQmAxBLyx8hq2CQ2VG7h/h9M93D+UwbKYWpSxEBACQkAICAEhIASEgBAQAkQABspXnB4FBssD3H/Gcf8mfuSEgBAQAkJACAgBISAEhIAQEAJLI8ClYOau/cW9S/PRWQgIASEgBISAEBACQkAICAEhsAQCmFm5H+XLGRa6T5phOQGhXyEgBISAEBACQkAICAEhIATWgwA34LtN970GC9aS/c5jPeVWSYSAEBACQkAICAEhIASEgBBYKwKwHW7h4Ib5bIf0NFY+YtblLwrpXBKGiC8Q/ow78xlRTggIASEgBISAEBACQkAICAEh0IcAbIdr2BGvcXzOsSOQjpMlt5D2ueXT+pYwRPwNEWgZ3WWmFllnISAEhIAQEAJCQAgIASEgBITAEAKwJzj58QtsiSdDcS3c2yB8U9gf9PP3/zQMFgTwYy3/wfErIn9hZDkhIASEgBAQAkJACAgBISAEhEAKArAr+FpiflvlzVA6xOUm+7c4/gzicpblSZvB4tacpVhDgVBdCgEhIASEgBAQAkJACAgBISAEOEPC1xTTaBlctYW43xGPEyc1B5vkomaweMvGfaAFge4rk7UUO7xBnbmph+AQUNbZvY0AZzkhkISAuJQE12EiixeHUXVSRcWLJLgOE1m82L+qj6hj1PnsyZDYYKGx8u0osyueNJymcsaZB/Qe7vWigf23GZPWUFyaFM7dCBMvdqPKSSsiXkwK526EiRe7UWVnRY6qY9Tbvlh/G2PsrL3x1WuNIYwzDBToNrl0or2vgMdRdbhm7oHHIgrSrRDoRUBc6oXnsIHixWFV31tx8aIXnsMGihf7V/0hdQwjhXvieWR/KqUyWCCEhsoXm23A9VEcDTVzZvWFfhamsxAYQiDkjbg0hNZxwsWL4+g6pabiRQpax4krXuxf10fV8Wuo9mWuesPvsDyFkHBXfq7MzaSDcXY/KixnmOg+nU76FQLjEBCXxuF0tFjixdE0Pq6+4sU4nI4WS7zYv8YPruOP0DA/KPkbcOB1krvJ2H4JFDeeJwtIys1HRn7vcHzISVs4DTfga9N9YZCnFr9SPolLUys6UZ54kQjYQaKLFwdRdGI1xYtEwDYYXTpeVmkwUrhfnKtPHuWUxBksSMgPRd6AsDm/u+LeGJBT6BJpQGQOMD8Cg79KyJfM4gishk/iUnFdp2QgXqSgdZy44sVxdJ1SU/EiBa1txpWOl9UbJ0aczZFaDPeWMAywuK6MUzTxEqlUeZuMj/pzE9BD1J8fp5ETAtkIiEvZ0O06oXhxvnqBITer8i2Ou/lTSbwQL9oQEC/aUNmX31F1jHq/gCZfoR2/SNVoOMNyiO+uxAABPFp6981Y4T0O28sSR9e9EOhEQFzqhObQAeLFodXfWXnxohOaQweIF/tX/8F1bJ8RCV88MErpZrAw4eEMFpCGhgmXgl3h+jEPXPNtaYfDAnWWOwMBcekM8HacVLzYsXLPqJp4cQZ4O04qXuxYub5q0nE1vk6eGAjfEva1JFWgJG7q59IrLjv7Gk7rI4yzHNyEQ8PJvgNj76r+BX5XjO8V/Qz3/8VBf370sfVFAYjL9JRp9aIR8hzxw80+f8OP5aqtaUQcbgrapRvQAzF7ifq7D2d6DN/C7+7aMBmoxxJ82jSXBvAUL/LbGfFiBS3pAL/VXiTqaABPtRc7aC+kYzfGLDH2XE2fsJCObULgTmKz46JzwP4Dx+8YlHLjfZED8rlmjRmyc/ge5hOE8c1hPF5YOK6tfFz3xn02rny4ZqNYkxOEcdbkQ3BPQ4iZ08ApUr+tyAUGpocGfsQMxzurC66pK+JW4c4wOFrGFb4Wf84z8rd6iE8TcDrAM4sXTI+De+HIIZ5vzckHywv5ihcT8KEFzyxeUA7cJO0F5LAMVd9gZRxzRjrxQrxo9P3iRfd4KMAm69lnehzqE1Y89jxXx7ntO/Jlx5Dcll8iUZaVg3SjHaw4GgxXPsETnM3C4iuV2ZlZGONdA4RwU6WV7yf4h7Mp9KcxU3OQ5zo1eN62AKT7Bn/ecjB1WBfpgTNNlR48KBz8Vy8eIN5IQ8xdPFxTVxZOXS3ionqIT2dqIcIzhxeuY+JzxqJAHmcs+S+Sm6mj3xwuqod4cSboEZ45vFB7AR3srf8RL9yDtetxyQQ6Vp+w8md/Ah2f277/lNNFMVNaO4/RsDb+gTA/hNM4+Jx4PGB6pg3k1CwrC+MZB8Pif/NpgNC/kuFlclDU+Jcfft9jf9xbHWsyrEx2Rjy+gaYTgy2Esa5d5URYVX9cE6fKwmU6HMS5hgHuG7NS8KNhw2V9o7BC3GzutOVBeeaP61XyCeWq4WjlXeqM8hTjBWR/DevLvHA0uBTXHXHEi5HPUIzdVPfUVZcs6sfCcD1ne8HBTltfQ56xHG1h1cywldnOiB/WQ+3FCM4BM/ECOJE7OHixyLgE+RbrRyC7mI4hW33CiT/WF1ZtkLVLdt6qjoPyJ40HmQ6OP42xpcnsOjOhAdprsHQJSPFHXq3GB2VYWCwP/pxSbAyO4VfrQL0Mq0tteRvicjlZQ0aYF8LdkoHQL+cacliGhiGVI6svTVc+8CfGtcY1lsNwHAS9agxxTYwaS+zg18AFfskEjcswxT3KsUo+tWGWU1/ISeIS4rvXBdo5zBN+xXgB2eycKs7h2pZgVn5hWUpf+7qS341OwsLiMsC/eDuDPBrPUlyOMfeQk8QLyuxKA/9ivLC6II9J2gtf1upPFpM/9uzTb4IXKGuyjsfiEMbrysdj1fv8Is4q+hFfVvECz3moW17DqU8IxpfAY/V9AsqY/Ox3pYH/Ktt3lIvkTDZYLpHoGgfdndOp6C+XE73Hg2R5hplxyUHbhyvZKL4PI2Iqi37858P5454kpMyffbxw6Ri9KDv281GrJSy22b/yT7lAGUiy4sulhvIBDu8R5zWOb7iOl3xZlbhc5ksU3sAIMjjwXPMyutXxCZhx5m92LiFfvtCCyyZd3rjnW+/4rzN1zY6sGC8gO/5+E58Fuk+n0+y/4oWHHBzobZdK8mJ2rQ9nuHpeDOlruIrjYgzlI15UOC4yLmHbjRJU/ciQvqrSBhdIoz7h/3js8tkf4sUan2OUmWN3ujY74BTS88vEtHay/6EAKA3LPvaDfMvHzeTgvvZvI+45YxL7WZraPz2Ix39DPzMPOA6qTSatSXjXy0M/i9MSxg69lm8cJ+UesmhM9c7mpMjrituXD8KIW98SidrmeuYBx3/JazjgvpUT8J+ljl119+U1bpju47LPzifgshiXkHdtlsNjRMVW/yjxGkcxXpi+fFlauWNxSp19HavnHfeH5oXhDBw6n1mPWTFe9OVt5Rtzhhy271m88nXcDC+mwmwI1758PGbiRbMNsb6nyLgEuHf2I336inWNuOoTTmMb09cmxgopOjad96VBWNF+vy9vK194RnxbgVFbCRXG6bq+iYBrCKDL2gBzSjrq181+ID/+08sC82Fyzt8T1PjffHaytEDi2RHKMj++qthmYJyfl8ektgGYlxaf16F7iZt/hx5bv/Y6vRfiENWJOFMHziEecb6Dgw2lc/DjdduMl4+x+GmNfFqES9AVnx3q859IK3y23TNE/zl4gbJw/8FH5BW+OIPZz+XEi0Sk5+BFYpFKRBcvElEVL9w4ZYlxydn9iPqEGtkP/eyv8DnmM0UXj1dOvj2/lz6MA5tqANsTPzsIoPGNUzRWOE3JwdObQBjz5hKm2KigfxjPkvyJi0deFmdbnKNi4Mcp3Fc4X+FMI4zLoiibdWxz3Hi25oF5W5nH+NEI42C1gR/qy2/a3MdB7MxwvIvrt/DjmlfixlmiRlr4r8KhbGvk01Jcsmc35jgbBBqioSvGC3CHzzZndDj9vogTL7JhL8aL7BJNmFC8yAZTvJh/XDJFP6I+wVNez74DYk3PsY1J4vHKcCMFZTIS/3F3S6x4v6fD1611cw/C+FBPunwL8mgkTCqzTR9D+SD8MY7O6fw2mWP9hvIeK2eL8VB3PisNPsFvMS4hb86G1ZZ/EVs4GqO1JTS4L8ILyCXvq+VX/r7zLTRb1H1fmVHf1fEiLK/XR2e7hPAivPA8nKRN9GWs8Tms4xqvc3kxpK+p6jqUj8d81f2IL6N4EYzdgIn6hACPqZ6XFDnQQVafgHTJ7eVQGoSvpn1HWfjHZmO8Mgbbm0hIxxkGs8idxxZ/8A8vH9LK4f4Wbqh8bmBrc6xz18b0tvhb8qP1yvqXcKXklihrtsxEPq2BS/bPhdU5vqf/5LzwOL2C7Ctcc7M/G0duGN3ls7VBXkAVg25yXgQ5TtVecAZ+tbO+4kWg8XGX4kUTp6n7kbgPiO9Zgsmfff8sqE9oH3tOreMmi5o+k+s4yCL1OeZLeq5hoLBMSe7Sx+byqRcgmb1tK0nIGiKj7Hw4WIfbARA0VN7gPl5qFha5ARpk0Mip3tARRo6unwR5RUHDt4XzaVsONFyonhgoLx804kJ8uEeG+F4Bg6X2KyD7Mg51y+HTUlwywyBuOHgfL3ecnBfI428czKv2x8A5zwZkrdJtjBcpGE7Oi6nbizXzaSpepCjM4iLvkv2VeGFAZ5wX5IX6hAx95SRZUMcpxV3Tc8z2qm9M3lmvSx9iiZ/ifrX/YHXW4hTA6TcOqJ+CQBw80Yrj0h3bkI/bhqMS40GebfI3TBqJpvJA2ZhHqXz4T4o1WpMUGeWlvMX2J0xSifFCUvm0GJc4kAPnqZu2f8/iVwuX4MXt8bBuPuZmeJGIdAleqL3o7n9a24tEnbno6kdyUJstzSTtRWpp1SekInZW/EV0nFjiVbTvfmz+AGWv9p6n1MMZLJ7cHDhzw/omDZbMRpsdKo2cKV3DAKJwKIr5UElnzcpQlnet+VggzsyP9ZPLQCCDT0tzyXELVXUGMPjGZVlt3zwSLzL4YEk2yAsrutoLQ6LAuQAvWvWlfqSA8gqKXJgX6hMK6tZEL6xjK0Zre2GBOK+l3+fsCl3WH/U3T2ndL5dzmLDAe7+XINo1a+etvrMqyo4EBxsILiVyy6VwzzdumSOhfsZxFsYj8rH8HuKClr/cDAgszSXkz2V5X8EPviGPHHwEP/fRyKj64kUESMnbpXmh9qKkdvNld/FihL7Uj+TDvvqUU/ICstQnrFDjU+p4RHthCKyl33cfYgUGWX+mXyChqxAqzoaQH9vjDEDfMioDYBdn1JtGBV97PEudkR8/XlQ8L+TDt76RpHIzIbAFLokXM5EhyEa8CMDQZYXAObxAWvUjFZL7upibF8hPY4WZKXRUHaPetDH+lTsGrgwW6suD+OxoA13U+wPqTMuvqEM+XKbzBXllWZdjC+fzuYN8Nrm8b2w91xhvzVwSL5ZjjHixHPZrzjmHF/45Vj+yZsWeWba5eOG5pLHCmfrKSX40HaO+nBx4iXFp9p7XcEkYN5tzCpHLmbgp5kiOy2jcBy0LV5oNQ2ljhTNlXA4kY6WwMjvEr5JL4Ld40aGwmbzFi5mA3lg2ObxQP7IxJWcUtzgv1CdkaGXaJEfT8UvAN+btu50o12ZYGMsP3J9jwHuo5USo9yyzH52amCgA9aAVy1c5X08kUmISEVgjl8SLRCUWiC5eFAB1ByLFix0osUAVSvNCfUIBpSWKPIqOPdfOXr3VMFiIN4RzszaXSe3u+xqJfFJ0ISAEhIAQEAJCQAgIASEgBBIRgD3BN5R9xvEQNsVZK4xqS8KCcvDtQs+R0dGWhgUQ6FIICAEhIASEgBAQAkJACAiBVARgQ3ApOidAuNH+LGOFebfOsLiAk1XEjLgf4uyMKFNOCAgBISAEhIAQEAJCQAgIgX0j4FdrvYMNMcme6k6DhTD6qZxbyOzLvmFV7YSAEBACQkAICAEhIASEgBA4FwE/u/Iz7Iesj0S25f8/C120EDRjZpUAAAAASUVORK5CYII=\n", "text/latex": [ - "$$\\left(- {{img}_{(-1,-1)}^{2}} w_{1} - {{img}_{(-1,0)}^{2}} w_{2} - {{img}_{(-1,1)}^{2}} w_{1} + {{img}_{(1,-1)}^{2}} w_{1} + {{img}_{(1,0)}^{2}} w_{2} - {{img}_{(1,1)}^{2}} w_{1}\\right)^{2}$$" + "$\\displaystyle \\left(- {{img}_{(-1,-1)}^{2}} w_{1} - {{img}_{(-1,0)}^{2}} w_{2} - {{img}_{(-1,1)}^{2}} w_{1} + {{img}_{(1,-1)}^{2}} w_{1} + {{img}_{(1,0)}^{2}} w_{2} - {{img}_{(1,1)}^{2}} w_{1}\\right)^{2}$" ], "text/plain": [ " \n", @@ -814,9 +828,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/latex": [ - "$$\\left(- 0.5 {{img}_{(-1,-1)}^{2}} - {{img}_{(-1,0)}^{2}} w_{2} - 0.5 {{img}_{(-1,1)}^{2}} + 0.5 {{img}_{(1,-1)}^{2}} + {{img}_{(1,0)}^{2}} w_{2} - 0.5 {{img}_{(1,1)}^{2}}\\right)^{2}$$" + "$\\displaystyle \\left(- 0.5 {{img}_{(-1,-1)}^{2}} - {{img}_{(-1,0)}^{2}} w_{2} - 0.5 {{img}_{(-1,1)}^{2}} + 0.5 {{img}_{(1,-1)}^{2}} + {{img}_{(1,0)}^{2}} w_{2} - 0.5 {{img}_{(1,1)}^{2}}\\right)^{2}$" ], "text/plain": [ " \n", @@ -850,9 +864,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/latex": [ - "$${{dst}_{(0,0)}} \\leftarrow \\left(- 0.5 {{img}_{(-1,-1)}^{2}} - {{img}_{(-1,0)}^{2}} w_{2} - 0.5 {{img}_{(-1,1)}^{2}} + 0.5 {{img}_{(1,-1)}^{2}} + {{img}_{(1,0)}^{2}} w_{2} - 0.5 {{img}_{(1,1)}^{2}}\\right)^{2}$$" + "$\\displaystyle {{dst}_{(0,0)}} \\leftarrow \\left(- 0.5 {{img}_{(-1,-1)}^{2}} - {{img}_{(-1,0)}^{2}} w_{2} - 0.5 {{img}_{(-1,1)}^{2}} + 0.5 {{img}_{(1,-1)}^{2}} + {{img}_{(1,0)}^{2}} w_{2} - 0.5 {{img}_{(1,1)}^{2}}\\right)^{2}$" ], "text/plain": [ " \n", @@ -906,12 +920,14 @@ "outputs": [ { "data": { - "image/png": "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AAC6SK6uuWbWr1sHoX8QQviTyt3nzWwkhHDWzEYkXWjXJLuKuaxtKkKViE35brohmKurWvHWfczbormp9eVZvuD41LKN57fwXKueNwC00HKNuC7XeQNon3379i045p577ql7/44dO3KtY/369YXmBEj5uuaapM9JeiWE8E/dl74q6dFK/aikp1o/PQAAAABAt8nziej7JP0dSS+Z2YuV+35b0qclfcnMHpN0UtJH2jNFAAAAAEA3ydM19z9KssSXH27tdLpfb29vrFe7zmX9vXkirj6C6x60aDxWkuZT3Wez+sb1G7GenZlJrLoN8d2cy/vnAAAAAGD5KNQ1FwAAAACAZnEgCgAAAAAoVa6uuWidn3jwr8T694ZPx7rXUunnVskbY83m8U++/O1YvzC2KtbzM9mFjot2xM0V5W24jBvjnlOYp4PuSnT16tVY+wtw9/Vlb21r1qyJ9cDAQDkTWyJ+G3T7c22Hnp76f5vN02XW73NLia65y9f169fr1v77tXr16ljTpbS41DaWqrezf/8cGhpq/8SAFYpPRAEAAAAApeJAFAAAAABQqs7IEnWgS2+9FetTZ87H+ubNm9mgRcSbrCeLvq7q71/c5Fou1C2np2fdGPc3i2Y64ubphnvb8v4L9TsH+1jcpUtjsT516lisey3H7u5W1lMTtRvZsSvWm7duX/ixkMvExETd+saNrGvzjOvafOedd8baRykHXRfqlAsXLlTdHh8fj7WP8O7du3fBxyrbpUuXYv2We3/y+765iP/+/ftLmVcR/nV98eLFWPtIsee/v9PT07FezHPz32u/b/k5rVqVnYJQG9urx49Zu3ZtrE+fzk67aBSD9c/P73+bNm1acN2dwm/X8+ezn5Xr1q2L9bVr12I9706j8M/fxx9rY87btm1rzWSX0BtvvBFrvy9v3Lixbp16P/Od9/32rn1v89tzx44dse62yP7Jkydj7d//xsay3wN27cp+dufZxlL1fup/7zt16lTd8X4deX4WAbiFT0QBAAAAAKXiQBQAAAAAUKoVH8098sPjsf7ai1mc6tRs1o3u4uUsxjWbO1o6X/9rfpn5PLHWHI9TcHzj9WX13Ez2d4owd9ONqf+weeK4ueK7DVaSetzBwSzWdunMkVg/8I5nsvGTWRxqUXqzSM/pN7Ko0+qhX4j1li07hPpOnDgRax972rlzZ6w3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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6IAAAEfCAYAAABbM3sFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3XuQXOd53/nfMxcMMAAG1wEwuAMkeLUjUoJlyVI5tGnZkrwVOlkrKznJcr3ccLdKduxNaiPZla1VqnZr5Yod7aUSVTGRYu6WI0uWraXWKztSKDEXK6IIirQoihdAIAgMrgNwMAAGwFzf/QPN9zzd6LfnnOnuMz09308VCk/3vKfP22dO98yZ/p3nWAhBAAAAAACUpWepJwAAAAAAWFk4EAUAAAAAlIoDUQAAAABAqTgQBQAAAACUigNRAAAAAECpOBAFAAAAAJSKA1EAAAAAQKmaOhA1sw+a2WtmdszMPtmqSQEAAAAAupeFEBa3oFmvpNclfUDSqKTnJH0shPDD1k0PAAAAANBt+ppY9t2SjoUQjkuSmf2hpEckJQ9Et27dGvbv39/EKgEAAAAAner555+/GEIYXmhcMweiuySdcrdHJf1kowX279+vI0eONLFKAAAAAECnMrM384xr5hxRq3PfbTlfM3vczI6Y2ZGxsbEmVgcAAAAA6AbNHIiOStrjbu+WdKZ2UAjhiRDC4RDC4eHhBT+hBQAAAAB0uWYORJ+TdMjMDpjZKkkflfTV1kwLAAAAANCtFn2OaAhh1sx+TdK/kdQr6fMhhJdbNjMAAAAAQFdqplmRQghfk/S1Fs0FAAAAALACNBPNBQAAAACgMA5EAQAAAACl4kAUAAAAAFAqDkQBAAAAAKXiQBQAAAAAUCoORAEAAAAApeJAFAAAAABQKg5EAQAAAACl4kAUAAAAAFAqDkQBAAAAAKXiQBQAAAAAUCoORAEAAAAApeJAFAAAAABQKg5EAQAAAACl4kAUAAAAAFAqDkQBAAAAAKXiQBQAAAAAUCoORAEAAAAApepb6gkAAIClMzs7G+u+Pn4tAACUg09EAQAAAACl4kAUAAAAAFAqMjgAACxjPlo7Ojoa67m5uVivXbs21tu3b69a/rXXXov1/fff344pAgBwmwU/ETWzz5vZBTP7gbtvs5l9w8yOVv7f1N5pAgAAAAC6RZ5o7u9L+mDNfZ+U9HQI4ZCkpyu3AQAAAABY0ILR3BDCvzez/TV3PyLpoUr9pKRnJH2ihfPCAq5dux7rk6ezKNZbN+ZjfeHKTFa/NVG1/GW3/OSNqVhPz2QRr7n5EOu+3uxvFqtXZbvN+jUDsd44lEW/RrZsiPXmgSweNrxpY6zvOLBXAIDmjI+Px3r//v2xnp/Pfh7cuHGj7v0SnXIBAEtjsc2KtocQzkpS5f9trZsSAAAAAKCbtb1rrpk9bmZHzOzI2NhYu1cHAAAAAOhwi83jnDezkRDCWTMbkXQhNTCE8ISkJyTp8OHDITUOmevXswjVX7x0LNbfPpbFry6ELPp69vJkrGdms00cgq+ro1ghDLgbq7JyPrW8qzVfd7zCVTf+St1l164+H+udg1mnxp+5u7rf1Yffc0+s169bJwBAfT526zvlTk5O1hsOAEBHWOwnol+V9GilflTSU62ZDgAAAACg2+W5fMsXJP0nSXeb2aiZPSbp05I+YGZHJX2gchsAAAAAgAXl6Zr7scSXHm7xXFa0F149Eevffy47l/ZklnDV3ExvrGenL7qlXWw2Fa1VdSraf02ug6Ifl4zm+jhuavx8/XVPTGXrmpiwWL92cbpqfn/28qVY/8bPH4r1g/ceFAAgY5a9l6bet73U/QAAlKntzYoAAAAAAPA4EAUAAAAAlIqrWC+hV4+fifVnns26G45fchcen5uN9dRM1g1xzsdpXcyqvzeLaLlSqo1iJWK7fliovuEXrjsmGQUOqcd3z+fGtarpHbuZTf4fPXU01p9ykd+fuP8OAQAyRHMBAMsFn4gCAAAAAErFgSgAAAAAoFREc0vmI1F/9P2sM+z4W+Oxnp/PIqszs1n9wL5NsX7XgS2xHruSRXn/7UtZ3HfyZtaJtrfH53Rr41v+/nnV+0IygpuK7xYdX9vV10WPxy9l2+n3vpF1Dv5nI9k22LJ5owAAAFaq69evx3pmZibW/f39sZ6dzU756u3NfqcaGBiIte/E7cc04h+3r4/DC+TDJ6IAAAAAgFJxIAoAAAAAKBWfnZfs3LkLsT72VhZjmJ+t3x33r967Pda/9ciPxbqvp/7fEA4f3Brrf/zl52M9OzdfNa4qqFswUpuK1xYfr/pjbrud1afOX471//Mfvh/rxx75aQFAu8270waOHs06em/evDnWw8PDpc7Jo2susHK98cYbsfbvSdu2bYv12NhYrH0E14/x73M+slsb0z116lSs9+zZs9hpYwXjE1EAAAAAQKk4EAUAAAAAlIpobsnOjV2M9eXJqVj7oJRvcPufv3tvrFNxXO+n7sqiFfftyjrJPvejC1XjVvdl8Yp0pNYt0ExH3KLx3UbLzGbb7NvHs5jur7oYSU+O7QQAtXwc7cyZrAP59HTWgXxoaCjWd999d6yfe+65WC9lNBfAynX//fcvOMa/zx04cCDWr7/+eqzvuuuuWJ8+fTrWu3btqnqswcHBWN+8eTPWq1evzjljrHT8xg4AAAAAKBUHogAAAACAUhHNLdnUjIvjVsVPs6hEcEHd3iZipr2uG9rtyddicdx2d9CtnWByeRcpuTKbXaD52rXJWA8NrRcAFHXlypVY7969O9ZTU9n7to+f+fvzXvS93eiaC2Ax+vrqHxL497kLF6pP8/Kddq9fv96eiaGr8YkoAAAAAKBUHIgCAAAAAErFgSgAAAAAoFScI7qUqs6RzMrZ2ew8yP/ve6diffcvLtyW+wenxmP9w9GsXtVrVePyXWplvuD4Zs4jrX4eedY3Pzsb6zl37igALEbqXNDJycl6wzvmXEt/OQbOEQWwGHNzc7H27ykbNmyIdX9/f9Uy58+fj/X69fTnQHF8IgoAAAAAKBUHogAAAACAUhHNLZtLkKbipwN92d8HvvbCyVhfuzkd6/ceylpmnx3PYmNPHTkR68mpmVj3VSdzq+NbyhGp9cumxvt8sXLEcZVatmaZRuMAAACQS+p3O3/5lomJibr1wYMHq5a5fPlyrDdv3tyqKWIFWfATUTPbY2bfMrNXzOxlM/uNyv2bzewbZna08v+m9k8XAAAAALDc5Ynmzkr6ByGEeyW9R9LHzew+SZ+U9HQI4ZCkpyu3AQAAAABoaMFobgjhrKSzlfqqmb0iaZekRyQ9VBn2pKRnJH2iLbPsUnliqj0uUvtvXzod66//ZdZN1z9Ov1vAJXxvi2Lki9cm5poaXzSCm+qM22h+OeYKAM1art1nl+u8AbTPm2++GevBwcG6Y3zXcF/PuisUvPDCC1XL3HnnnbG+ePFirEdGRhY/WawohZoVmdl+SQ9KelbS9spB6tsHq9sSyzxuZkfM7MjY2FhzswUAAAAALHu5D0TNbJ2kP5b0myGEK3mXCyE8EUI4HEI4PDw8vJg5AgAAAAC6SK6uuWbWr1sHoX8QQviTyt3nzWwkhHDWzEYkXWjXJLuKuaxtKkKViE35brohmKurWvHWfczbormp9eVZvuD41LKN57fwXKueNwC00HKNuC7XeQNon3379i045p577ql7/44dO3KtY/369YXmBEj5uuaapM9JeiWE8E/dl74q6dFK/aikp1o/PQAAAABAt8nziej7JP0dSS+Z2YuV+35b0qclfcnMHpN0UtJH2jNFAAAAAEA3ydM19z9KssSXH27tdLpfb29vrFe7zmX9vXkirj6C6x60aDxWkuZT3Wez+sb1G7GenZlJrLoN8d2cy/vnAAAAAGD5KNQ1FwAAAACAZnEgCgAAAAAoVa6uuWidn3jwr8T694ZPx7rXUunnVskbY83m8U++/O1YvzC2KtbzM9mFjot2xM0V5W24jBvjnlOYp4PuSnT16tVY+wtw9/Vlb21r1qyJ9cDAQDkTWyJ+G3T7c22Hnp76f5vN02XW73NLia65y9f169fr1v77tXr16ljTpbS41DaWqrezf/8cGhpq/8SAFYpPRAEAAAAApeJAFAAAAABQqs7IEnWgS2+9FetTZ87H+ubNm9mgRcSbrCeLvq7q71/c5Fou1C2np2fdGPc3i2Y64ubphnvb8v4L9TsH+1jcpUtjsT516lisey3H7u5W1lMTtRvZsSvWm7duX/ixkMvExETd+saNrGvzjOvafOedd8baRykHXRfqlAsXLlTdHh8fj7WP8O7du3fBxyrbpUuXYv2We3/y+765iP/+/ftLmVcR/nV98eLFWPtIsee/v9PT07FezHPz32u/b/k5rVqVnYJQG9urx49Zu3ZtrE+fzk67aBSD9c/P73+bNm1acN2dwm/X8+ezn5Xr1q2L9bVr12I9706j8M/fxx9rY87btm1rzWSX0BtvvBFrvy9v3Lixbp16P/Od9/32rn1v89tzx44dse62yP7Jkydj7d//xsay3wN27cp+dufZxlL1fup/7zt16lTd8X4deX4WAbiFT0QBAAAAAKXiQBQAAAAAUKoVH8098sPjsf7ai1mc6tRs1o3u4uUsxjWbO1o6X/9rfpn5PLHWHI9TcHzj9WX13Ez2d4owd9ONqf+weeK4ueK7DVaSetzBwSzWdunMkVg/8I5nsvGTWRxqUXqzSM/pN7Ko0+qhX4j1li07hPpOnDgRax972rlzZ6w3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\n", "text/plain": [ "<Figure size 1152x432 with 1 Axes>" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], @@ -933,12 +949,14 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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/Ll8zvk+z2V12fXTOcrjf74P83F4vNaX7Z15XbXRXJ8nHoeXSiOe3rnau5C+8cYbqfbPVo8/+2elzz+vna8Lj5sPGDCg5H7etdi3Td/f+PZYRKdhjwX7dufbmu8XfK74fcaMGZNqf91Zc87jpz5/yrtkewTVP8t9GT73/+zP/qziWBvVWdf3Z7Nnz061n8LxH//xH6n2fbXHwX3e+HY3dOjQVPt27d9lfJ8vlW6rXvv68Jizf0/0deyfP9ddd12qiemi3RHNBQAAAAA0PQ5EAQAAAACFartorsc9vvjFL6bao0f3339/qj1m4dEej3J4rChrfXW2HvN0ls1S7fJqWVb5473OE8GttTtunvtlRXM9dpYVq6xVVlTHI39eP/jgg6n2i2PPmTOnbmPqKVmxNF/fHnWXSiNlHl3yi417ZC0rEj9hwoRU+3btc8C7xK5fvz7VS5YsKXku3+Z9fOvWrau4bI9f3nvvvan2+dDZRdIr8fitd4aUSuec74c8duaRSV83Re7bO+NRnY997GOp9tfm27XH5fx98E7LPjc6e50ee/bHe9zVY7Ae3fZunFlz0d93f3+GDx+e6vL4n//t792MGccSTL59+ZxzHs31eGfWWD2G6cst/7es/apvm77N+j7P30ePQHp02KOU/jqdr1epNIrp77e/X1//+tcrLqNe3XTLx+r7PY8q+3cKXx8eLff31CO4vj/yeendY33f6d39N2zYUDI+j6l6fNqX5+/77t27U/3lL3851R6bryWm6/NKkqZPn55qj17752NWxH3kyJGp9jnqc9873fqpNP79wLcbqbTrs39ueO1z08ft69hjuh6Rztr/la8boFURzQUAAAAAND0ORAEAAAAAhWq7aK5fIDwrduuxHY/2eWQlK6KapTuR2HpFWWvpXFvrOBrxGjqTFc3N0/E0z/K609U4K6oza9asVHsEaMGCBVUvoxls2rQp1R/96EdTvWjRolT7e1J+QXtfBx738jjVXXfdlWqPHnqX3fLnrcS3R4/1le93fK6sXr264nP5hd69I6nHLz1SW969sivPPfdcqi+99NKSf/N1kxVl9Xiex0+bhUd1Lr744lRnRUh9P1zra/O4nPOYqX82eITP17e/p76v8e6s3vnT9y+//vWvS5bt751HAbM6fw8bNqzi7dVGc7PmTPk4spbtp6v4duAd6b0TqHcs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\n", "text/plain": [ "<Figure size 1152x432 with 1 Axes>" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], @@ -969,194 +987,145 @@ "<?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.38.0 (20140413.2041)\n", + "<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n", " -->\n", "<!-- Title: %3 Pages: 1 -->\n", - "<svg width=\"684pt\" height=\"228pt\"\n", - " viewBox=\"0.00 0.00 684.00 227.95\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n", - "<g id=\"graph0\" class=\"graph\" transform=\"scale(0.478879 0.478879) rotate(0) translate(4 472)\">\n", + "<svg width=\"684pt\" height=\"468pt\"\n", + " viewBox=\"0.00 0.00 684.00 467.74\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n", + "<g id=\"graph0\" class=\"graph\" transform=\"scale(.9826 .9826) rotate(0) translate(4 472)\">\n", "<title>%3</title>\n", - "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-472 1424.34,-472 1424.34,4 -4,4\"/>\n", - "<!-- 140128518376696 -->\n", - "<g id=\"node1\" class=\"node\"><title>140128518376696</title>\n", - "<ellipse fill=\"#a056db\" stroke=\"black\" cx=\"548.645\" cy=\"-450\" rx=\"107.781\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"548.645\" y=\"-446.3\" font-family=\"Times,serif\" font-size=\"14.00\">Func: kernel (dst,img,w_2)</text>\n", - "</g>\n", - "<!-- 140128518374232 -->\n", - "<g id=\"node18\" class=\"node\"><title>140128518374232</title>\n", - "<ellipse fill=\"#dbc256\" stroke=\"black\" cx=\"548.645\" cy=\"-378\" rx=\"31.6951\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"548.645\" y=\"-374.3\" font-family=\"Times,serif\" font-size=\"14.00\">Block</text>\n", - "</g>\n", - "<!-- 140128518376696->140128518374232 -->\n", - "<g id=\"edge17\" class=\"edge\"><title>140128518376696->140128518374232</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M548.645,-431.697C548.645,-423.983 548.645,-414.712 548.645,-406.112\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"552.145,-406.104 548.645,-396.104 545.145,-406.104 552.145,-406.104\"/>\n", - "</g>\n", - "<!-- 140128521227960 -->\n", - "<g id=\"node2\" class=\"node\"><title>140128521227960</title>\n", - "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"52.6453\" cy=\"-306\" rx=\"52.7911\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"52.6453\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\">fshape_dst0</text>\n", - "</g>\n", - "<!-- 140128518531728 -->\n", - "<g id=\"node3\" class=\"node\"><title>140128518531728</title>\n", - "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"175.645\" cy=\"-306\" rx=\"52.7911\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"175.645\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\">fshape_dst1</text>\n", - "</g>\n", - "<!-- 140128518529824 -->\n", - "<g id=\"node4\" class=\"node\"><title>140128518529824</title>\n", - "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"298.645\" cy=\"-306\" rx=\"51.9908\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"298.645\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\">fstride_dst0</text>\n", - "</g>\n", - "<!-- 140128518530272 -->\n", - "<g id=\"node5\" class=\"node\"><title>140128518530272</title>\n", - "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"424.645\" cy=\"-306\" rx=\"55.7903\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"424.645\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\">fstride_img2</text>\n", - "</g>\n", - "<!-- 140128521226336 -->\n", - "<g id=\"node6\" class=\"node\"><title>140128521226336</title>\n", - "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"548.645\" cy=\"-306\" rx=\"50.0912\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"548.645\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\">fd_img_22</text>\n", - "</g>\n", - "<!-- 140128518529936 -->\n", - "<g id=\"node7\" class=\"node\"><title>140128518529936</title>\n", - "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"672.645\" cy=\"-306\" rx=\"55.7903\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"672.645\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\">fstride_img0</text>\n", - "</g>\n", - "<!-- 140128521606088 -->\n", - "<g id=\"node8\" class=\"node\"><title>140128521606088</title>\n", - "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"802.645\" cy=\"-306\" rx=\"55.7903\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"802.645\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\">fstride_img1</text>\n", - "</g>\n", - "<!-- 140128521605920 -->\n", - "<g id=\"node9\" class=\"node\"><title>140128521605920</title>\n", - "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"928.645\" cy=\"-306\" rx=\"51.9908\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"928.645\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\">fstride_dst1</text>\n", - "</g>\n", - "<!-- 140128518375128 -->\n", - "<g id=\"node10\" class=\"node\"><title>140128518375128</title>\n", - "<ellipse fill=\"#3498db\" stroke=\"black\" cx=\"1069.65\" cy=\"-306\" rx=\"70.6878\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"1069.65\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\">Loop over dim 0</text>\n", - "</g>\n", - "<!-- 140128518377256 -->\n", - "<g id=\"node17\" class=\"node\"><title>140128518377256</title>\n", - "<ellipse fill=\"#dbc256\" stroke=\"black\" cx=\"1069.65\" cy=\"-234\" rx=\"31.6951\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"1069.65\" y=\"-230.3\" font-family=\"Times,serif\" font-size=\"14.00\">Block</text>\n", - "</g>\n", - "<!-- 140128518375128->140128518377256 -->\n", - "<g id=\"edge7\" class=\"edge\"><title>140128518375128->140128518377256</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M1069.65,-287.697C1069.65,-279.983 1069.65,-270.712 1069.65,-262.112\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"1073.15,-262.104 1069.65,-252.104 1066.15,-262.104 1073.15,-262.104\"/>\n", - "</g>\n", - "<!-- 140128515805024 -->\n", - "<g id=\"node11\" class=\"node\"><title>140128515805024</title>\n", - "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"867.645\" cy=\"-162\" rx=\"46.2923\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"867.645\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">fd_dst_00</text>\n", + "<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-472 692.083,-472 692.083,4 -4,4\"/>\n", + "<!-- 140495254316984 -->\n", + "<g id=\"node1\" class=\"node\">\n", + "<title>140495254316984</title>\n", + "<ellipse fill=\"#a056db\" stroke=\"#000000\" cx=\"219.8449\" cy=\"-450\" rx=\"107.781\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"219.8449\" y=\"-446.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Func: kernel (dst,img,w_2)</text>\n", "</g>\n", - "<!-- 140128521226672 -->\n", - "<g id=\"node12\" class=\"node\"><title>140128521226672</title>\n", - "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"994.645\" cy=\"-162\" rx=\"63.0888\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"994.645\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">fd_img_22_01</text>\n", + "<!-- 140495254318440 -->\n", + "<g id=\"node11\" class=\"node\">\n", + "<title>140495254318440</title>\n", + "<ellipse fill=\"#dbc256\" stroke=\"#000000\" cx=\"219.8449\" cy=\"-378\" rx=\"31.6951\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"219.8449\" y=\"-374.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Block</text>\n", "</g>\n", - "<!-- 140128521224992 -->\n", - "<g id=\"node13\" class=\"node\"><title>140128521224992</title>\n", - "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"1145.65\" cy=\"-162\" rx=\"70.3881\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"1145.65\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">fd_img_22_0m1</text>\n", + "<!-- 140495254316984->140495254318440 -->\n", + "<g id=\"edge10\" class=\"edge\">\n", + "<title>140495254316984->140495254318440</title>\n", + "<path fill=\"none\" stroke=\"#000000\" d=\"M219.8449,-431.8314C219.8449,-424.131 219.8449,-414.9743 219.8449,-406.4166\"/>\n", + "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"223.345,-406.4132 219.8449,-396.4133 216.345,-406.4133 223.345,-406.4132\"/>\n", "</g>\n", - "<!-- 140128518376304 -->\n", - "<g id=\"node14\" class=\"node\"><title>140128518376304</title>\n", - "<ellipse fill=\"#3498db\" stroke=\"black\" cx=\"1304.65\" cy=\"-162\" rx=\"70.6878\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"1304.65\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">Loop over dim 1</text>\n", + "<!-- 140495254317656 -->\n", + "<g id=\"node2\" class=\"node\">\n", + "<title>140495254317656</title>\n", + "<ellipse fill=\"#56db7f\" stroke=\"#000000\" cx=\"144.8449\" cy=\"-306\" rx=\"61.99\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"144.8449\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">_data_img_22</text>\n", "</g>\n", - "<!-- 140128518374736 -->\n", - "<g id=\"node16\" class=\"node\"><title>140128518374736</title>\n", - "<ellipse fill=\"#dbc256\" stroke=\"black\" cx=\"1304.65\" cy=\"-90\" rx=\"31.6951\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"1304.65\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">Block</text>\n", + "<!-- 140495254316256 -->\n", + "<g id=\"node3\" class=\"node\">\n", + "<title>140495254316256</title>\n", + "<ellipse fill=\"#3498db\" stroke=\"#000000\" cx=\"295.8449\" cy=\"-306\" rx=\"70.6878\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"295.8449\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Loop over dim 0</text>\n", "</g>\n", - "<!-- 140128518376304->140128518374736 -->\n", - "<g id=\"edge2\" class=\"edge\"><title>140128518376304->140128518374736</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M1304.65,-143.697C1304.65,-135.983 1304.65,-126.712 1304.65,-118.112\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"1308.15,-118.104 1304.65,-108.104 1301.15,-118.104 1308.15,-118.104\"/>\n", + "<!-- 140495254316032 -->\n", + "<g id=\"node10\" class=\"node\">\n", + "<title>140495254316032</title>\n", + "<ellipse fill=\"#dbc256\" stroke=\"#000000\" cx=\"295.8449\" cy=\"-234\" rx=\"31.6951\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"295.8449\" y=\"-230.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Block</text>\n", "</g>\n", - "<!-- 140128518373896 -->\n", - "<g id=\"node15\" class=\"node\"><title>140128518373896</title>\n", - "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"1304.65\" cy=\"-18\" rx=\"115.88\" ry=\"18\"/>\n", - "<text text-anchor=\"middle\" x=\"1304.65\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">fd_dst_00[ctr_1*fstride_dst1]</text>\n", + "<!-- 140495254316256->140495254316032 -->\n", + "<g id=\"edge7\" class=\"edge\">\n", + "<title>140495254316256->140495254316032</title>\n", + "<path fill=\"none\" stroke=\"#000000\" d=\"M295.8449,-287.8314C295.8449,-280.131 295.8449,-270.9743 295.8449,-262.4166\"/>\n", + "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"299.345,-262.4132 295.8449,-252.4133 292.345,-262.4133 299.345,-262.4132\"/>\n", "</g>\n", - "<!-- 140128518374736->140128518373896 -->\n", - "<g id=\"edge1\" class=\"edge\"><title>140128518374736->140128518373896</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M1304.65,-71.6966C1304.65,-63.9827 1304.65,-54.7125 1304.65,-46.1124\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"1308.15,-46.1043 1304.65,-36.1043 1301.15,-46.1044 1308.15,-46.1043\"/>\n", + "<!-- 140495254318496 -->\n", + "<g id=\"node4\" class=\"node\">\n", + "<title>140495254318496</title>\n", + "<ellipse fill=\"#56db7f\" stroke=\"#000000\" cx=\"57.8449\" cy=\"-162\" rx=\"57.6901\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"57.8449\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">_data_dst_00</text>\n", "</g>\n", - "<!-- 140128518377256->140128515805024 -->\n", - "<g id=\"edge3\" class=\"edge\"><title>140128518377256->140128515805024</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M1043.24,-223.849C1009.55,-212.174 950.841,-191.83 910.656,-177.905\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"911.713,-174.567 901.118,-174.6 909.421,-181.181 911.713,-174.567\"/>\n", + "<!-- 140495254316592 -->\n", + "<g id=\"node5\" class=\"node\">\n", + "<title>140495254316592</title>\n", + "<ellipse fill=\"#56db7f\" stroke=\"#000000\" cx=\"208.8449\" cy=\"-162\" rx=\"74.9875\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"208.8449\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">_data_img_22_01</text>\n", "</g>\n", - "<!-- 140128518377256->140128521226672 -->\n", - "<g id=\"edge4\" class=\"edge\"><title>140128518377256->140128521226672</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M1053.74,-218.155C1043.89,-208.959 1031.02,-196.949 1019.81,-186.484\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"1022.06,-183.804 1012.37,-179.539 1017.29,-188.921 1022.06,-183.804\"/>\n", + "<!-- 140495254317320 -->\n", + "<g id=\"node6\" class=\"node\">\n", + "<title>140495254317320</title>\n", + "<ellipse fill=\"#56db7f\" stroke=\"#000000\" cx=\"383.8449\" cy=\"-162\" rx=\"81.7856\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"383.8449\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">_data_img_22_0m1</text>\n", "</g>\n", - "<!-- 140128518377256->140128521224992 -->\n", - "<g id=\"edge5\" class=\"edge\"><title>140128518377256->140128521224992</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M1085.76,-218.155C1095.75,-208.959 1108.79,-196.949 1120.15,-186.484\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"1122.7,-188.888 1127.69,-179.539 1117.96,-183.74 1122.7,-188.888\"/>\n", + "<!-- 140495254318664 -->\n", + "<g id=\"node7\" class=\"node\">\n", + "<title>140495254318664</title>\n", + "<ellipse fill=\"#3498db\" stroke=\"#000000\" cx=\"554.8449\" cy=\"-162\" rx=\"70.6878\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"554.8449\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Loop over dim 1</text>\n", "</g>\n", - "<!-- 140128518377256->140128518376304 -->\n", - "<g id=\"edge6\" class=\"edge\"><title>140128518377256->140128518376304</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M1097.06,-224.833C1134.67,-213.631 1203.04,-193.265 1251.01,-178.976\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"1252.04,-182.323 1260.62,-176.114 1250.04,-175.614 1252.04,-182.323\"/>\n", + "<!-- 140495254318776 -->\n", + "<g id=\"node9\" class=\"node\">\n", + "<title>140495254318776</title>\n", + "<ellipse fill=\"#dbc256\" stroke=\"#000000\" cx=\"554.8449\" cy=\"-90\" rx=\"31.6951\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"554.8449\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Block</text>\n", "</g>\n", - "<!-- 140128518374232->140128521227960 -->\n", - "<g id=\"edge8\" class=\"edge\"><title>140128518374232->140128521227960</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M517.269,-374.807C445.344,-369.425 263.248,-353.784 113.645,-324 109.46,-323.167 105.142,-322.196 100.828,-321.147\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"101.386,-317.677 90.8305,-318.59 99.6511,-324.459 101.386,-317.677\"/>\n", + "<!-- 140495254318664->140495254318776 -->\n", + "<g id=\"edge2\" class=\"edge\">\n", + "<title>140495254318664->140495254318776</title>\n", + "<path fill=\"none\" stroke=\"#000000\" d=\"M554.8449,-143.8314C554.8449,-136.131 554.8449,-126.9743 554.8449,-118.4166\"/>\n", + "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"558.345,-118.4132 554.8449,-108.4133 551.345,-118.4133 558.345,-118.4132\"/>\n", "</g>\n", - "<!-- 140128518374232->140128518531728 -->\n", - "<g id=\"edge9\" class=\"edge\"><title>140128518374232->140128518531728</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M517.991,-372.803C461.987,-364.907 339.511,-346.587 237.645,-324 233.299,-323.036 228.801,-321.96 224.305,-320.83\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"225.084,-317.416 214.526,-318.292 223.326,-324.192 225.084,-317.416\"/>\n", + "<!-- 140495254317040 -->\n", + "<g id=\"node8\" class=\"node\">\n", + "<title>140495254317040</title>\n", + "<ellipse fill=\"#56db7f\" stroke=\"#000000\" cx=\"554.8449\" cy=\"-18\" rx=\"133.4768\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"554.8449\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">_data_dst_00[_stride_dst_1*ctr_1]</text>\n", "</g>\n", - "<!-- 140128518374232->140128518529824 -->\n", - "<g id=\"edge10\" class=\"edge\"><title>140128518374232->140128518529824</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M520.453,-369.106C478.552,-357.374 399.258,-335.172 347.708,-320.738\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"348.361,-317.286 337.787,-317.96 346.473,-324.026 348.361,-317.286\"/>\n", + "<!-- 140495254318776->140495254317040 -->\n", + "<g id=\"edge1\" class=\"edge\">\n", + "<title>140495254318776->140495254317040</title>\n", + "<path fill=\"none\" stroke=\"#000000\" d=\"M554.8449,-71.8314C554.8449,-64.131 554.8449,-54.9743 554.8449,-46.4166\"/>\n", + "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"558.345,-46.4132 554.8449,-36.4133 551.345,-46.4133 558.345,-46.4132\"/>\n", "</g>\n", - "<!-- 140128518374232->140128518530272 -->\n", - "<g id=\"edge11\" class=\"edge\"><title>140128518374232->140128518530272</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M526.762,-364.647C508.268,-354.206 481.428,-339.055 459.905,-326.905\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"461.476,-323.772 451.047,-321.904 458.035,-329.868 461.476,-323.772\"/>\n", + "<!-- 140495254316032->140495254318496 -->\n", + "<g id=\"edge3\" class=\"edge\">\n", + "<title>140495254316032->140495254318496</title>\n", + "<path fill=\"none\" stroke=\"#000000\" d=\"M267.6085,-225.4579C228.6723,-213.6789 157.8187,-192.2442 109.3243,-177.5736\"/>\n", + "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"110.2227,-174.1888 99.6376,-174.6432 108.1957,-180.8889 110.2227,-174.1888\"/>\n", "</g>\n", - "<!-- 140128518374232->140128521226336 -->\n", - "<g id=\"edge12\" class=\"edge\"><title>140128518374232->140128521226336</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M548.645,-359.697C548.645,-351.983 548.645,-342.712 548.645,-334.112\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"552.145,-334.104 548.645,-324.104 545.145,-334.104 552.145,-334.104\"/>\n", + "<!-- 140495254316032->140495254316592 -->\n", + "<g id=\"edge4\" class=\"edge\">\n", + "<title>140495254316032->140495254316592</title>\n", + "<path fill=\"none\" stroke=\"#000000\" d=\"M277.8184,-219.0816C266.2777,-209.5306 251.0436,-196.9231 237.8284,-185.9864\"/>\n", + "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"239.8475,-183.1143 229.9121,-179.4349 235.3845,-188.507 239.8475,-183.1143\"/>\n", "</g>\n", - "<!-- 140128518374232->140128518529936 -->\n", - "<g id=\"edge13\" class=\"edge\"><title>140128518374232->140128518529936</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M570.529,-364.647C589.023,-354.206 615.863,-339.055 637.385,-326.905\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"639.256,-329.868 646.244,-321.904 635.815,-323.772 639.256,-329.868\"/>\n", + "<!-- 140495254316032->140495254317320 -->\n", + "<g id=\"edge5\" class=\"edge\">\n", + "<title>140495254316032->140495254317320</title>\n", + "<path fill=\"none\" stroke=\"#000000\" d=\"M314.0785,-219.0816C325.7519,-209.5306 341.1611,-196.9231 354.5282,-185.9864\"/>\n", + "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"357.0123,-188.4762 362.5355,-179.4349 352.5796,-183.0585 357.0123,-188.4762\"/>\n", "</g>\n", - "<!-- 140128518374232->140128521606088 -->\n", - "<g id=\"edge14\" class=\"edge\"><title>140128518374232->140128521606088</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M576.798,-369.241C618.904,-357.637 698.948,-335.578 751.55,-321.081\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"752.651,-324.409 761.361,-318.377 750.791,-317.66 752.651,-324.409\"/>\n", + "<!-- 140495254316032->140495254318664 -->\n", + "<g id=\"edge6\" class=\"edge\">\n", + "<title>140495254316032->140495254318664</title>\n", + "<path fill=\"none\" stroke=\"#000000\" d=\"M324.552,-226.0196C365.9645,-214.5073 443.366,-192.9903 496.9349,-178.0985\"/>\n", + "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"497.9488,-181.4495 506.646,-175.3989 496.0739,-174.7052 497.9488,-181.4495\"/>\n", "</g>\n", - "<!-- 140128518374232->140128521605920 -->\n", - "<g id=\"edge15\" class=\"edge\"><title>140128518374232->140128521605920</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M579.651,-372.974C636.911,-365.291 762.959,-347.214 867.645,-324 871.811,-323.076 876.116,-322.042 880.422,-320.952\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"881.622,-324.255 890.406,-318.332 879.845,-317.484 881.622,-324.255\"/>\n", + "<!-- 140495254318440->140495254317656 -->\n", + "<g id=\"edge8\" class=\"edge\">\n", + "<title>140495254318440->140495254317656</title>\n", + "<path fill=\"none\" stroke=\"#000000\" d=\"M203.571,-362.3771C193.8398,-353.0351 181.2651,-340.9635 170.2498,-330.3888\"/>\n", + "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"172.5648,-327.7594 162.9271,-323.3589 167.7171,-332.8091 172.5648,-327.7594\"/>\n", "</g>\n", - "<!-- 140128518374232->140128518375128 -->\n", - "<g id=\"edge16\" class=\"edge\"><title>140128518374232->140128518375128</title>\n", - "<path fill=\"none\" stroke=\"black\" d=\"M579.792,-374.227C652.08,-367.579 836.74,-349.382 989.645,-324 995.804,-322.978 1002.21,-321.805 1008.59,-320.564\"/>\n", - "<polygon fill=\"black\" stroke=\"black\" points=\"1009.44,-323.962 1018.56,-318.569 1008.07,-317.098 1009.44,-323.962\"/>\n", + "<!-- 140495254318440->140495254316256 -->\n", + "<g id=\"edge9\" class=\"edge\">\n", + "<title>140495254318440->140495254316256</title>\n", + "<path fill=\"none\" stroke=\"#000000\" d=\"M236.3357,-362.3771C246.1257,-353.1023 258.7558,-341.137 269.86,-330.6172\"/>\n", + "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"272.3977,-333.0344 277.2501,-323.6161 267.5835,-327.9527 272.3977,-333.0344\"/>\n", "</g>\n", "</g>\n", "</svg>\n" ], "text/plain": [ - "<graphviz.files.Source at 0x7f7233545a58>" + "<graphviz.files.Source at 0x7fc798393fd0>" ] }, "execution_count": 32, @@ -1263,48 +1232,34 @@ { "data": { "text/html": [ - "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span> <span class=\"kt\">void</span> <span class=\"nf\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">fd_dst</span><span class=\"p\">,</span> <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"k\">const</span> <span class=\"n\">fd_img</span><span class=\"p\">,</span> <span class=\"kt\">int64_t</span> <span class=\"k\">const</span> <span class=\"o\">*</span> <span class=\"n\">fshape_dst</span><span class=\"p\">,</span> <span class=\"kt\">int64_t</span> <span class=\"k\">const</span> <span class=\"o\">*</span> <span class=\"n\">fstride_dst</span><span class=\"p\">,</span> <span class=\"kt\">int64_t</span> <span class=\"k\">const</span> <span class=\"o\">*</span> <span class=\"n\">fstride_img</span><span class=\"p\">,</span> <span class=\"kt\">double</span> <span class=\"n\">w_2</span><span class=\"p\">)</span>\n", + "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span> <span class=\"kt\">void</span> <span class=\"nf\">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=\"k\">const</span> <span class=\"kt\">int64_t</span> <span class=\"n\">fshape_dst0</span> <span class=\"o\">=</span> <span class=\"n\">fshape_dst</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">];</span>\n", - " <span class=\"k\">const</span> <span class=\"kt\">int64_t</span> <span class=\"n\">fshape_dst1</span> <span class=\"o\">=</span> <span class=\"n\">fshape_dst</span><span class=\"p\">[</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\">fstride_dst0</span> <span class=\"o\">=</span> <span class=\"n\">fstride_dst</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">];</span>\n", - " <span class=\"k\">const</span> <span class=\"kt\">int64_t</span> <span class=\"n\">fstride_img2</span> <span class=\"o\">=</span> <span class=\"n\">fstride_img</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">];</span>\n", - " <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"k\">const</span> <span class=\"n\">fd_img_22</span> <span class=\"o\">=</span> <span class=\"n\">fd_img</span> <span class=\"o\">+</span> <span class=\"mi\">2</span><span class=\"o\">*</span><span class=\"n\">fstride_img2</span><span class=\"p\">;</span>\n", - " <span class=\"k\">const</span> <span class=\"kt\">int64_t</span> <span class=\"n\">fstride_img0</span> <span class=\"o\">=</span> <span class=\"n\">fstride_img</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">];</span>\n", - " <span class=\"k\">const</span> <span class=\"kt\">int64_t</span> <span class=\"n\">fstride_img1</span> <span class=\"o\">=</span> <span class=\"n\">fstride_img</span><span class=\"p\">[</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\">fstride_dst1</span> <span class=\"o\">=</span> <span class=\"n\">fstride_dst</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">];</span>\n", - " <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"kt\">int</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\">fshape_dst0</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=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"k\">const</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\">int</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\">fd_dst_00</span> <span class=\"o\">=</span> <span class=\"n\">ctr_0</span><span class=\"o\">*</span><span class=\"n\">fstride_dst0</span> <span class=\"o\">+</span> <span class=\"n\">fd_dst</span><span class=\"p\">;</span>\n", - " <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"k\">const</span> <span class=\"n\">fd_img_22_01</span> <span class=\"o\">=</span> <span class=\"n\">ctr_0</span><span class=\"o\">*</span><span class=\"n\">fstride_img0</span> <span class=\"o\">+</span> <span class=\"n\">fd_img_22</span> <span class=\"o\">+</span> <span class=\"n\">fstride_img0</span><span class=\"p\">;</span>\n", - " <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"k\">const</span> <span class=\"n\">fd_img_22_0m1</span> <span class=\"o\">=</span> <span class=\"n\">ctr_0</span><span class=\"o\">*</span><span class=\"n\">fstride_img0</span> <span class=\"o\">+</span> <span class=\"n\">fd_img_22</span> <span class=\"o\">-</span> <span class=\"n\">fstride_img0</span><span class=\"p\">;</span>\n", - " <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"kt\">int</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\">fshape_dst1</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=\"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=\"k\">const</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=\"k\">const</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\">int</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\">fd_dst_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_dst1</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\">fd_img_22_01</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">fd_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">fd_img_22_01</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span> <span class=\"o\">+</span> <span class=\"n\">fstride_img1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">fd_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span> <span class=\"o\">+</span> <span class=\"n\">fstride_img1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">fd_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span> <span class=\"o\">-</span> <span class=\"n\">fstride_img1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">fd_img_22_01</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span> <span class=\"o\">-</span> <span class=\"n\">fstride_img1</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\">fd_img_22_01</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">fd_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">fd_img_22_01</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span> <span class=\"o\">+</span> <span class=\"n\">fstride_img1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">fd_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span> <span class=\"o\">+</span> <span class=\"n\">fstride_img1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">fd_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span> <span class=\"o\">-</span> <span class=\"n\">fstride_img1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">fd_img_22_01</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span> <span class=\"o\">-</span> <span class=\"n\">fstride_img1</span><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/plain": [ - "FUNC_PREFIX void kernel(double * fd_dst, double * const fd_img, int64_t const * fshape_dst, int64_t const * fstride_dst, int64_t const * fstride_img, double w_2)\n", + "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", - " const int64_t fshape_dst0 = fshape_dst[0];\n", - " const int64_t fshape_dst1 = fshape_dst[1];\n", - " const int64_t fstride_dst0 = fstride_dst[0];\n", - " const int64_t fstride_img2 = fstride_img[2];\n", - " double * const fd_img_22 = fd_img + 2*fstride_img2;\n", - " const int64_t fstride_img0 = fstride_img[0];\n", - " const int64_t fstride_img1 = fstride_img[1];\n", - " const int64_t fstride_dst1 = fstride_dst[1];\n", - " for (int ctr_0 = 1; ctr_0 < fshape_dst0 - 1; ctr_0 += 1)\n", + " double * RESTRICT const _data_img_22 = _data_img + 2*_stride_img_2;\n", + " for (int ctr_0 = 1; ctr_0 < _size_dst_0 - 1; ctr_0 += 1)\n", " {\n", - " double * fd_dst_00 = ctr_0*fstride_dst0 + fd_dst;\n", - " double * const fd_img_22_01 = ctr_0*fstride_img0 + fd_img_22 + fstride_img0;\n", - " double * const fd_img_22_0m1 = ctr_0*fstride_img0 + fd_img_22 - fstride_img0;\n", - " for (int ctr_1 = 1; ctr_1 < fshape_dst1 - 1; ctr_1 += 1)\n", + " double * RESTRICT _data_dst_00 = _data_dst + _stride_dst_0*ctr_0;\n", + " double * RESTRICT const _data_img_22_01 = _stride_img_0*ctr_0 + _stride_img_0 + _data_img_22;\n", + " double * RESTRICT const _data_img_22_0m1 = _stride_img_0*ctr_0 - _stride_img_0 + _data_img_22;\n", + " for (int ctr_1 = 1; ctr_1 < _size_dst_1 - 1; ctr_1 += 1)\n", " {\n", - " fd_dst_00[ctr_1*fstride_dst1] = ((w_2*fd_img_22_01[ctr_1*fstride_img1] - w_2*fd_img_22_0m1[ctr_1*fstride_img1] - 0.5*fd_img_22_01[ctr_1*fstride_img1 + fstride_img1] - 0.5*fd_img_22_0m1[ctr_1*fstride_img1 + fstride_img1] - 0.5*fd_img_22_0m1[ctr_1*fstride_img1 - fstride_img1] + 0.5*fd_img_22_01[ctr_1*fstride_img1 - fstride_img1])*(w_2*fd_img_22_01[ctr_1*fstride_img1] - w_2*fd_img_22_0m1[ctr_1*fstride_img1] - 0.5*fd_img_22_01[ctr_1*fstride_img1 + fstride_img1] - 0.5*fd_img_22_0m1[ctr_1*fstride_img1 + fstride_img1] - 0.5*fd_img_22_0m1[ctr_1*fstride_img1 - fstride_img1] + 0.5*fd_img_22_01[ctr_1*fstride_img1 - fstride_img1]));\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", "}" @@ -1414,27 +1369,20 @@ { "data": { "text/html": [ - "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span> <span class=\"kt\">void</span> <span class=\"nf\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">fd_dst</span><span class=\"p\">,</span> <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"k\">const</span> <span class=\"n\">fd_img</span><span class=\"p\">,</span> <span class=\"kt\">int64_t</span> <span class=\"k\">const</span> <span class=\"o\">*</span> <span class=\"n\">fshape_dst</span><span class=\"p\">,</span> <span class=\"kt\">int64_t</span> <span class=\"k\">const</span> <span class=\"o\">*</span> <span class=\"n\">fstride_dst</span><span class=\"p\">,</span> <span class=\"kt\">int64_t</span> <span class=\"k\">const</span> <span class=\"o\">*</span> <span class=\"n\">fstride_img</span><span class=\"p\">,</span> <span class=\"kt\">double</span> <span class=\"n\">w_2</span><span class=\"p\">)</span>\n", + "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span> <span class=\"kt\">void</span> <span class=\"nf\">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=\"k\">const</span> <span class=\"kt\">int64_t</span> <span class=\"n\">fshape_dst0</span> <span class=\"o\">=</span> <span class=\"n\">fshape_dst</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">];</span>\n", - " <span class=\"k\">const</span> <span class=\"kt\">int64_t</span> <span class=\"n\">fshape_dst1</span> <span class=\"o\">=</span> <span class=\"n\">fshape_dst</span><span class=\"p\">[</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\">fstride_dst0</span> <span class=\"o\">=</span> <span class=\"n\">fstride_dst</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">];</span>\n", - " <span class=\"k\">const</span> <span class=\"kt\">int64_t</span> <span class=\"n\">fstride_img2</span> <span class=\"o\">=</span> <span class=\"n\">fstride_img</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">];</span>\n", - " <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"k\">const</span> <span class=\"n\">fd_img_22</span> <span class=\"o\">=</span> <span class=\"n\">fd_img</span> <span class=\"o\">+</span> <span class=\"mi\">2</span><span class=\"o\">*</span><span class=\"n\">fstride_img2</span><span class=\"p\">;</span>\n", - " <span class=\"k\">const</span> <span class=\"kt\">int64_t</span> <span class=\"n\">fstride_img0</span> <span class=\"o\">=</span> <span class=\"n\">fstride_img</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">];</span>\n", - " <span class=\"k\">const</span> <span class=\"kt\">int64_t</span> <span class=\"n\">fstride_img1</span> <span class=\"o\">=</span> <span class=\"n\">fstride_img</span><span class=\"p\">[</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\">fstride_dst1</span> <span class=\"o\">=</span> <span class=\"n\">fstride_dst</span><span class=\"p\">[</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=\"k\">const</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\">int</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\">fshape_dst0</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=\"k\">for</span> <span class=\"p\">(</span><span class=\"kt\">int</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\">fd_dst_00</span> <span class=\"o\">=</span> <span class=\"n\">ctr_0</span><span class=\"o\">*</span><span class=\"n\">fstride_dst0</span> <span class=\"o\">+</span> <span class=\"n\">fd_dst</span><span class=\"p\">;</span>\n", - " <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"k\">const</span> <span class=\"n\">fd_img_22_01</span> <span class=\"o\">=</span> <span class=\"n\">ctr_0</span><span class=\"o\">*</span><span class=\"n\">fstride_img0</span> <span class=\"o\">+</span> <span class=\"n\">fd_img_22</span> <span class=\"o\">+</span> <span class=\"n\">fstride_img0</span><span class=\"p\">;</span>\n", - " <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"k\">const</span> <span class=\"n\">fd_img_22_0m1</span> <span class=\"o\">=</span> <span class=\"n\">ctr_0</span><span class=\"o\">*</span><span class=\"n\">fstride_img0</span> <span class=\"o\">+</span> <span class=\"n\">fd_img_22</span> <span class=\"o\">-</span> <span class=\"n\">fstride_img0</span><span class=\"p\">;</span>\n", - " <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"kt\">int</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\">fshape_dst1</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=\"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=\"k\">const</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=\"k\">const</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\">int</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\">fd_dst_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_dst1</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\">fd_img_22_01</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">fd_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">fd_img_22_01</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span> <span class=\"o\">+</span> <span class=\"n\">fstride_img1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">fd_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span> <span class=\"o\">+</span> <span class=\"n\">fstride_img1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">fd_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span> <span class=\"o\">-</span> <span class=\"n\">fstride_img1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">fd_img_22_01</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span> <span class=\"o\">-</span> <span class=\"n\">fstride_img1</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\">fd_img_22_01</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">fd_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">fd_img_22_01</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span> <span class=\"o\">+</span> <span class=\"n\">fstride_img1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">fd_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span> <span class=\"o\">+</span> <span class=\"n\">fstride_img1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">fd_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span> <span class=\"o\">-</span> <span class=\"n\">fstride_img1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">fd_img_22_01</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"o\">*</span><span class=\"n\">fstride_img1</span> <span class=\"o\">-</span> <span class=\"n\">fstride_img1</span><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", @@ -1442,27 +1390,20 @@ "</pre></div>\n" ], "text/plain": [ - "FUNC_PREFIX void kernel(double * fd_dst, double * const fd_img, int64_t const * fshape_dst, int64_t const * fstride_dst, int64_t const * fstride_img, double w_2)\n", + "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", - " const int64_t fshape_dst0 = fshape_dst[0];\n", - " const int64_t fshape_dst1 = fshape_dst[1];\n", - " const int64_t fstride_dst0 = fstride_dst[0];\n", - " const int64_t fstride_img2 = fstride_img[2];\n", - " double * const fd_img_22 = fd_img + 2*fstride_img2;\n", - " const int64_t fstride_img0 = fstride_img[0];\n", - " const int64_t fstride_img1 = fstride_img[1];\n", - " const int64_t fstride_dst1 = fstride_dst[1];\n", + " double * RESTRICT const _data_img_22 = _data_img + 2*_stride_img_2;\n", " #pragma omp for schedule(static)\n", - " for (int ctr_0 = 1; ctr_0 < fshape_dst0 - 1; ctr_0 += 1)\n", + " for (int ctr_0 = 1; ctr_0 < _size_dst_0 - 1; ctr_0 += 1)\n", " {\n", - " double * fd_dst_00 = ctr_0*fstride_dst0 + fd_dst;\n", - " double * const fd_img_22_01 = ctr_0*fstride_img0 + fd_img_22 + fstride_img0;\n", - " double * const fd_img_22_0m1 = ctr_0*fstride_img0 + fd_img_22 - fstride_img0;\n", - " for (int ctr_1 = 1; ctr_1 < fshape_dst1 - 1; ctr_1 += 1)\n", + " double * RESTRICT _data_dst_00 = _data_dst + _stride_dst_0*ctr_0;\n", + " double * RESTRICT const _data_img_22_01 = _stride_img_0*ctr_0 + _stride_img_0 + _data_img_22;\n", + " double * RESTRICT const _data_img_22_0m1 = _stride_img_0*ctr_0 - _stride_img_0 + _data_img_22;\n", + " for (int ctr_1 = 1; ctr_1 < _size_dst_1 - 1; ctr_1 += 1)\n", " {\n", - " fd_dst_00[ctr_1*fstride_dst1] = ((w_2*fd_img_22_01[ctr_1*fstride_img1] - w_2*fd_img_22_0m1[ctr_1*fstride_img1] - 0.5*fd_img_22_01[ctr_1*fstride_img1 + fstride_img1] - 0.5*fd_img_22_0m1[ctr_1*fstride_img1 + fstride_img1] - 0.5*fd_img_22_0m1[ctr_1*fstride_img1 - fstride_img1] + 0.5*fd_img_22_01[ctr_1*fstride_img1 - fstride_img1])*(w_2*fd_img_22_01[ctr_1*fstride_img1] - w_2*fd_img_22_0m1[ctr_1*fstride_img1] - 0.5*fd_img_22_01[ctr_1*fstride_img1 + fstride_img1] - 0.5*fd_img_22_0m1[ctr_1*fstride_img1 + fstride_img1] - 0.5*fd_img_22_0m1[ctr_1*fstride_img1 - fstride_img1] + 0.5*fd_img_22_01[ctr_1*fstride_img1 - fstride_img1]));\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", @@ -1601,34 +1542,34 @@ { "data": { "text/html": [ - "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span> <span class=\"kt\">void</span> <span class=\"nf\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"k\">const</span> <span class=\"n\">fd_I</span><span class=\"p\">,</span> <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">fd_dst</span><span class=\"p\">)</span>\n", + "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span> <span class=\"kt\">void</span> <span class=\"nf\">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=\"k\">const</span> <span class=\"n\">fd_I_21</span> <span class=\"o\">=</span> <span class=\"n\">fd_I</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=\"k\">const</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\">int</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\">81</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\">fd_dst_00</span> <span class=\"o\">=</span> <span class=\"mi\">290</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">+</span> <span class=\"n\">fd_dst</span><span class=\"p\">;</span>\n", - " <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"k\">const</span> <span class=\"n\">fd_I_21_01</span> <span class=\"o\">=</span> <span class=\"mi\">1160</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">+</span> <span class=\"n\">fd_I_21</span> <span class=\"o\">+</span> <span class=\"mi\">1160</span><span class=\"p\">;</span>\n", - " <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"k\">const</span> <span class=\"n\">fd_I_21_0m1</span> <span class=\"o\">=</span> <span class=\"mi\">1160</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">+</span> <span class=\"n\">fd_I_21</span> <span class=\"o\">-</span> <span class=\"mi\">1160</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_00</span> <span class=\"o\">=</span> <span class=\"n\">_data_dst</span> <span class=\"o\">+</span> <span class=\"mi\">290</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=\"k\">const</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\">1160</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">+</span> <span class=\"mi\">1160</span><span class=\"p\">;</span>\n", + " <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"k\">const</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\">1160</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">-</span> <span class=\"mi\">1160</span><span class=\"p\">;</span>\n", " <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"kt\">int</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\">289</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\">fd_dst_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"o\">-</span><span class=\"mi\">2</span><span class=\"o\">*</span><span class=\"n\">fd_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=\"mi\">2</span><span class=\"o\">*</span><span class=\"n\">fd_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\">fd_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\">fd_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\">fd_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\">fd_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=\"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=\"o\">-</span><span class=\"mi\">2</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=\"mi\">2</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/plain": [ - "FUNC_PREFIX void kernel(double * const fd_I, double * fd_dst)\n", + "FUNC_PREFIX void kernel(double * RESTRICT const _data_I, double * RESTRICT _data_dst)\n", "{\n", - " double * const fd_I_21 = fd_I + 1;\n", + " double * RESTRICT const _data_I_21 = _data_I + 1;\n", " for (int ctr_0 = 1; ctr_0 < 81; ctr_0 += 1)\n", " {\n", - " double * fd_dst_00 = 290*ctr_0 + fd_dst;\n", - " double * const fd_I_21_01 = 1160*ctr_0 + fd_I_21 + 1160;\n", - " double * const fd_I_21_0m1 = 1160*ctr_0 + fd_I_21 - 1160;\n", + " double * RESTRICT _data_dst_00 = _data_dst + 290*ctr_0;\n", + " double * RESTRICT const _data_I_21_01 = _data_I_21 + 1160*ctr_0 + 1160;\n", + " double * RESTRICT const _data_I_21_0m1 = _data_I_21 + 1160*ctr_0 - 1160;\n", " for (int ctr_1 = 1; ctr_1 < 289; ctr_1 += 1)\n", " {\n", - " fd_dst_00[ctr_1] = -2*fd_I_21_0m1[4*ctr_1] + 2*fd_I_21_01[4*ctr_1] - fd_I_21_01[4*ctr_1 + 4] + fd_I_21_01[4*ctr_1 - 4] - fd_I_21_0m1[4*ctr_1 + 4] - fd_I_21_0m1[4*ctr_1 - 4];\n", + " _data_dst_00[ctr_1] = -2*_data_I_21_0m1[4*ctr_1] + 2*_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", "}" @@ -1640,14 +1581,13 @@ } ], "source": [ - "img_field = ps.Field.create_from_numpy_array('I', img.astype(np.double), index_dimensions=1)\n", - "dst_field = ps.Field.create_from_numpy_array('dst', filtered_image, index_dimensions=0)\n", + "img_field, dst_field = ps.fields(\"I(4), dst : [2D]\", I=img.astype(np.double), dst=filtered_image)\n", "\n", "sobel_x = -2 * img_field[-1,0](1) - img_field[-1,-1](1) - img_field[-1, +1](1) \\\n", " +2 * img_field[+1,0](1) + img_field[+1,-1](1) - img_field[+1, +1](1)\n", "update_rule = ps.Assignment(dst_field[0,0], sobel_x)\n", "\n", - "ast = create_kernel([update_rule])\n", + "ast = create_kernel(update_rule)\n", "ps.show_code(ast)" ] }, @@ -1673,7 +1613,7 @@ "metadata": {}, "outputs": [], "source": [ - "gpu_ast = create_kernel([update_rule], target='gpu', gpu_indexing=ps.gpucuda.indexing.BlockIndexing, \n", + "gpu_ast = create_kernel(update_rule, target='gpu', gpu_indexing=ps.gpucuda.indexing.BlockIndexing, \n", " gpu_indexing_params={'blockSize': (8,8,4)})" ] }, @@ -1765,33 +1705,33 @@ { "data": { "text/html": [ - "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span> <span class=\"kt\">void</span> <span class=\"nf\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"k\">const</span> <span class=\"n\">fd_I</span><span class=\"p\">,</span> <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">fd_dst</span><span class=\"p\">)</span>\n", + "<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=\"mi\">16</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\">81</span> <span class=\"o\">&&</span> <span class=\"mi\">16</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\">289</span><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\">81</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\">289</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=\"mi\">16</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=\"mi\">16</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\">fd_dst_10</span> <span class=\"o\">=</span> <span class=\"n\">ctr_1</span> <span class=\"o\">+</span> <span class=\"n\">fd_dst</span><span class=\"p\">;</span>\n", - " <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"k\">const</span> <span class=\"n\">fd_I_11_21</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=\"n\">fd_I</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=\"k\">const</span> <span class=\"n\">fd_I_1m1_21</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=\"n\">fd_I</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=\"k\">const</span> <span class=\"n\">fd_I_10_21</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=\"n\">fd_I</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">;</span>\n", - " <span class=\"n\">fd_dst_10</span><span class=\"p\">[</span><span class=\"mi\">290</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"o\">-</span><span class=\"mi\">2</span><span class=\"o\">*</span><span class=\"n\">fd_I_10_21</span><span class=\"p\">[</span><span class=\"mi\">1160</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">-</span> <span class=\"mi\">1160</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mi\">2</span><span class=\"o\">*</span><span class=\"n\">fd_I_10_21</span><span class=\"p\">[</span><span class=\"mi\">1160</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">+</span> <span class=\"mi\">1160</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">fd_I_11_21</span><span class=\"p\">[</span><span class=\"mi\">1160</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">+</span> <span class=\"mi\">1160</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">fd_I_11_21</span><span class=\"p\">[</span><span class=\"mi\">1160</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">-</span> <span class=\"mi\">1160</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">fd_I_1m1_21</span><span class=\"p\">[</span><span class=\"mi\">1160</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">+</span> <span class=\"mi\">1160</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">fd_I_1m1_21</span><span class=\"p\">[</span><span class=\"mi\">1160</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">-</span> <span class=\"mi\">1160</span><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=\"k\">const</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=\"k\">const</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=\"k\">const</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\">290</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"o\">-</span><span class=\"mi\">2</span><span class=\"o\">*</span><span class=\"n\">_data_I_10_21</span><span class=\"p\">[</span><span class=\"mi\">1160</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">-</span> <span class=\"mi\">1160</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mi\">2</span><span class=\"o\">*</span><span class=\"n\">_data_I_10_21</span><span class=\"p\">[</span><span class=\"mi\">1160</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">+</span> <span class=\"mi\">1160</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">_data_I_11_21</span><span class=\"p\">[</span><span class=\"mi\">1160</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">+</span> <span class=\"mi\">1160</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">_data_I_11_21</span><span class=\"p\">[</span><span class=\"mi\">1160</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">-</span> <span class=\"mi\">1160</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">_data_I_1m1_21</span><span class=\"p\">[</span><span class=\"mi\">1160</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">+</span> <span class=\"mi\">1160</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">_data_I_1m1_21</span><span class=\"p\">[</span><span class=\"mi\">1160</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">-</span> <span class=\"mi\">1160</span><span class=\"p\">];</span>\n", " <span class=\"p\">}</span> \n", "<span class=\"p\">}</span>\n", "</pre></div>\n" ], "text/plain": [ - "FUNC_PREFIX void kernel(double * const fd_I, double * fd_dst)\n", + "FUNC_PREFIX __launch_bounds__(256) void kernel(double * RESTRICT const _data_I, double * RESTRICT _data_dst)\n", "{\n", - " if (16*blockIdx.x + threadIdx.x + 1 < 81 && 16*blockIdx.y + threadIdx.y + 1 < 289)\n", + " if (blockDim.x*blockIdx.x + threadIdx.x + 1 < 81 && blockDim.y*blockIdx.y + threadIdx.y + 1 < 289)\n", " {\n", - " const int64_t ctr_0 = 16*blockIdx.x + threadIdx.x + 1;\n", - " const int64_t ctr_1 = 16*blockIdx.y + threadIdx.y + 1;\n", - " double * fd_dst_10 = ctr_1 + fd_dst;\n", - " double * const fd_I_11_21 = 4*ctr_1 + fd_I + 5;\n", - " double * const fd_I_1m1_21 = 4*ctr_1 + fd_I - 3;\n", - " double * const fd_I_10_21 = 4*ctr_1 + fd_I + 1;\n", - " fd_dst_10[290*ctr_0] = -2*fd_I_10_21[1160*ctr_0 - 1160] + 2*fd_I_10_21[1160*ctr_0 + 1160] - fd_I_11_21[1160*ctr_0 + 1160] - fd_I_11_21[1160*ctr_0 - 1160] + fd_I_1m1_21[1160*ctr_0 + 1160] - fd_I_1m1_21[1160*ctr_0 - 1160];\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 const _data_I_11_21 = _data_I + 4*ctr_1 + 5;\n", + " double * RESTRICT const _data_I_1m1_21 = _data_I + 4*ctr_1 - 3;\n", + " double * RESTRICT const _data_I_10_21 = _data_I + 4*ctr_1 + 1;\n", + " _data_dst_10[290*ctr_0] = -2*_data_I_10_21[1160*ctr_0 - 1160] + 2*_data_I_10_21[1160*ctr_0 + 1160] - _data_I_11_21[1160*ctr_0 + 1160] - _data_I_11_21[1160*ctr_0 - 1160] + _data_I_1m1_21[1160*ctr_0 + 1160] - _data_I_1m1_21[1160*ctr_0 - 1160];\n", " } \n", "}" ] @@ -1823,7 +1763,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.6" + "version": "3.6.8" } }, "nbformat": 4, diff --git a/doc/notebooks/demo_benchmark.ipynb b/doc/notebooks/demo_benchmark.ipynb index 7e56843378a40a264968e992d95f6339562e34e8..f8bd7ca7a465a961e9bfefc4012712f5e88fe554 100644 --- a/doc/notebooks/demo_benchmark.ipynb +++ b/doc/notebooks/demo_benchmark.ipynb @@ -15,10 +15,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Demo: Benchmark numpy, cython, pystencils\n", + "# Demo: Benchmark numpy, Cython, pystencils\n", "\n", - "In this benchmark we compare different ways of implementing a simple stencil kernel in Python.\n", - "The benchmark kernel computes the average of the four neighbors in 2D and stores in a second array. To prevent out-of-bounds accesses, we skip the cells at the border and compute values only in the range `[1:-1, 1:-1]`" + "In this notebook we compare and benchmark different ways of implementing a simple stencil kernel in Python.\n", + "Our simple example computes the average of the four neighbors in 2D and stores it in a second array. To prevent out-of-bounds accesses, we skip the cells at the border and compute values only in the range `[1:-1, 1:-1]`" ] }, { @@ -36,11 +36,11 @@ "metadata": {}, "outputs": [], "source": [ - "def avg_pure_python(input_arr, output_arr): \n", - " for x in range(1, input_arr.shape[0] - 1):\n", - " for y in range(1, input_arr.shape[1] - 1):\n", - " output_arr[x, y] = (input_arr[x + 1, y] + input_arr[x - 1, y] +\n", - " input_arr[x, y + 1] + input_arr[x, y - 1]) / 4" + "def avg_pure_python(src, dst): \n", + " for x in range(1, src.shape[0] - 1):\n", + " for y in range(1, src.shape[1] - 1):\n", + " dst[x, y] = (src[x + 1, y] + src[x - 1, y] +\n", + " src[x, y + 1] + src[x, y - 1]) / 4" ] }, { @@ -58,9 +58,9 @@ "metadata": {}, "outputs": [], "source": [ - "def avg_numpy_roll(input_arr, output_arr):\n", - " neighbors = [np.roll(input_arr, axis=a, shift=s) for a in (0, 1) for s in (-1, 1)]\n", - " np.divide(sum(neighbors), 4, out=output_arr)" + "def avg_numpy_roll(src, dst):\n", + " neighbors = [np.roll(src, axis=a, shift=s) for a in (0, 1) for s in (-1, 1)]\n", + " np.divide(sum(neighbors), 4, out=dst)" ] }, { @@ -76,10 +76,9 @@ "metadata": {}, "outputs": [], "source": [ - "def avg_numpy_slice(input_arr, output_arr):\n", - " output_arr[1:-1, 1:-1] = input_arr[2:, 1:-1] + input_arr[:-2, 1:-1] + \\\n", - " input_arr[1:-1, 2:] + input_arr[1:-1, :-2]\n", - " " + "def avg_numpy_slice(src, dst):\n", + " dst[1:-1, 1:-1] = src[2:, 1:-1] + src[:-2, 1:-1] + \\\n", + " src[1:-1, 2:] + src[1:-1, :-2]" ] }, { @@ -100,20 +99,20 @@ "\n", "@cython.boundscheck(False)\n", "@cython.wraparound(False)\n", - "def avg_cython(object[double, ndim=2] input_arr, object[double, ndim=2] output_arr):\n", + "def avg_cython(object[double, ndim=2] src, object[double, ndim=2] dst):\n", " cdef int xs, ys, x, y\n", - " xs, ys = input_arr.shape\n", + " xs, ys = src.shape\n", " for x in range(1, xs - 1):\n", " for y in range(1, ys - 1):\n", - " output_arr[x, y] = (input_arr[x + 1, y] + input_arr[x - 1, y] +\n", - " input_arr[x, y + 1] + input_arr[x, y - 1]) / 4" + " dst[x, y] = (src[x + 1, y] + src[x - 1, y] +\n", + " src[x, y + 1] + src[x, y - 1]) / 4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "And finally we also create a *pystencils* version of the same stencil code:" + "If available, we also try the numba just-in-time compiler" ] }, { @@ -121,20 +120,41 @@ "execution_count": 6, "metadata": {}, "outputs": [], + "source": [ + "try:\n", + " from numba import jit\n", + "\n", + " @jit(nopython=True)\n", + " def avg_numba(src, dst):\n", + " dst[1:-1, 1:-1] = src[2:, 1:-1] + src[:-2, 1:-1] + \\\n", + " src[1:-1, 2:] + src[1:-1, :-2]\n", + "except ImportError:\n", + " pass" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And finally we also create a *pystencils* version of the same stencil code:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], "source": [ "src, dst = ps.fields(\"src, dst: [2D]\")\n", "\n", "update = ps.Assignment(dst[0,0], \n", " (src[1, 0] + src[-1, 0] + src[0, 1] + src[0, -1]) / 4)\n", - "kernel = ps.create_kernel(update).compile()\n", - "\n", - "def avg_pystencils(input_arr, output_arr):\n", - " kernel(src=input_arr, dst=output_arr)" + "avg_pystencils = ps.create_kernel(update).compile()" ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -142,13 +162,12 @@ " 'pure Python': avg_pure_python,\n", " 'numpy roll': avg_numpy_roll,\n", " 'numpy slice': avg_numpy_slice,\n", - " 'Cython': None,\n", " 'pystencils': avg_pystencils,\n", "}\n", "if 'avg_cython' in globals():\n", " all_implementations['Cython'] = avg_cython\n", - "else:\n", - " del all_implementations['Cython']" + "if 'avg_numba' in globals():\n", + " all_implementations['numba'] = avg_numba" ] }, { @@ -162,7 +181,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -173,7 +192,8 @@ "\n", "def do_benchmark(func, shape):\n", " in_arr, out_arr = get_arrays(shape)\n", - " timer = timeit.Timer('f(a, b)', globals={'f': func, 'a': in_arr, 'b': out_arr})\n", + " func(src=in_arr, dst=out_arr) # warmup\n", + " timer = timeit.Timer('f(src=src, dst=dst)', globals={'f': func, 'src': in_arr, 'dst': out_arr})\n", " calls, time_taken = timer.autorange()\n", " return time_taken / calls" ] @@ -182,31 +202,38 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Comparison\n" + "## Comparison" ] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 10, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkQAAAHnCAYAAABZgEKHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3XmclWX9//HXG1A2BRRIEcVxARVBEUcwDUJFMTWBoq+BPwUVy1yCEvcVxcK0chcVZUzQyhIDQUNj0wJ12CFcExMxRVlcWBT4/P449+CZmTMbzsJw3s/H4zy4z3Vfy+cej/CZ67ru+ygiMDMzM8tmdWo6ADMzM7Oa5oTIzMzMsp4TIjMzM8t6TojMzMws6zkhMjMzs6znhMjMzMyynhMiMzMzy3pOiMzMzCzrOSEyMzOzrFevpgOw6tOiRYvIycmp6TDMzMyqzZw5cz6OiJZl1XNClEVycnLIz8+v6TDMzMyqjaR3y1PPS2ZmZmaW9ZwQmZmZWdZzQmRmZmZZzwmRmZmZZT1vqs4ii95fS86Vkyq1z2UjT63U/szMzGqCZ4jMzMws6zkhMjMzs6znhMjMzMyynhMiMzMzy3pOiMzMzCzr1fqESNIgSXtVQb+jJbVPjpdJalGBtndI6p4cXyzpLUlRWh+SBkp6M3kNrGCsL0jarSJtzMzM7Gu1PiECBgGVnhBFxOCI+HdF20naHTg6ImYmRf8EegIlfpdK0uYGoCvQBbihggnOY8CFFY3VzMzMUmosIZKUI+k1SY9KWijpL5IaSTpB0vi0eidKekpSXUl5khZLWiTpF5L6AbnAOEnzJTWUdKSkGZLmSPq7pFZJP9Ml3SrpFUlvSOqWlNeVdHvS50JJl6TVzy0Sc2NJkyQtSOI4I8Ol9QOeK3gTEfMiYlkZP45ewPMRsSoiVgPPAycXGbuppNclHZS8f0LS+cnpCUD/MsYwMzOzEtT0DNFBwIMRcRjwKalZjqnAIZJaJnXOAcYAnYDWEdEhIjoCYyLiL0A+cGZEdAI2AXcD/SLiSOAR4Ja08epFRBdgKKkZGYCfAPsBRyRxjCsl3pOBFRFxeER0IC3xSXMsMKdCPwVoDbyX9n55UrZVRKwFLgbyJP0Y2C0iHkrOrQbqS2pewXHNzMyMmk+I3ouIfybHY4HvRESQWgL6f5KaAd8GngX+A+wv6W5JJ5NKoIo6COgAPC9pPnAtsHfa+aeSP+cAOclxT2BURGwCiIhVpcS7COiZzDR1S5KUoloBK0u76AyUoSyKFUQ8n8RwLzC4yOmPyLB0KOknkvIl5W9elylcMzMzq+mEqOg/+gXvxwD/j9Qy0JMRsSmZBTkcmA5cBIzO0J+AJRHRKXl1jIiT0s5vTP7czNdfW6IMcWQONuIN4EhSScmvJV2fodp6oEF5+kuzHNgn7f3ewIqilSTVAQ5Jxti9yOkGSXnRmB+MiNyIyK3bqGkFwzIzM8sONZ0QtZH07eS4P/ASQESsIJUQXAvkASR3aNWJiL8C1wGdk3afAbsmx68DLQv6lLSTpEPLiGEKcIGkekmboonGVsndbOsiYixwe1oM6ZYCB5YxZlF/B06StFuymfqkpKyoXyT99wcekbRTEpeAPYFlFRzXzMzMqPmEaCkwUNJCUjMe96edG0dqSa3gTq/WwPRkKSwPuCopzwNGJeV1SW1qvlXSAmA+cEwZMYwG/gssTNoMKKVuR+CVZKxrgBEZ6kwCehS8kfRzSctJzfoslDQ6Kc8tOE6W6W4GXk1eNxVdupPUjtQy2aUR8SIwk1TCCKlZq9kFy35mZmZWMUpt2amBgaUc4Jlkc3Km8/cA8yLi4eqMqzJIegk4LSLWVNN4dwITIuIfpdWr36pttBp4R6WO7W+7NzOz7ZmkORGRW1a9mp4hykjSHOAwUhuta6NLgTbVON7ispIhMzMzK1m9sqtUjeTZPBlnh5Jb5mutiHi5msd7qDrHMzMz29FslzNEZmZmZtXJCZGZmZllvRpbMrPq17F1U/K9CdrMzKwYzxCZmZlZ1nNCZGZmZlnPCZGZmZllPSdEZmZmlvW8qTqLLHp/LTlXTqqx8f1UazMz2155hsjMzMyynhMiMzMzy3pOiMzMzCzrOSEyMzOzrOeEyMzMzLJerU2IJO0p6Y+S3pb0b0mTJbUrpX4nSaekvb9R0rAqim2opLOT4x9JWiJpi6TcUto8IukjSYu3YbzbJR3/TWI2MzPLZrUyIZIkYDwwPSIOiIj2wNXAHqU06wScUsr5yoqtHnAu8HhStBj4ATCzjKZ5wMnbOOzdwJXb2NbMzCzr1cqECDgO+CoiRhUURMT8iHhR0mOSeheUSxon6XTgJuAMSfMlnZGcbi9puqT/SPp5WptfSlqcvIYmZTmSlkp6KJnxmSKpYYbYjgfmRsSmJK6lEfF6WRcUETOBVaXVkfS3tJmnn0oal7R9F2guac+yxjEzM7PiamtC1AGYU8K50cA5AJKaAscAk4HrgT9FRKeI+FNS92CgF9AFuEHSTpKOTNp3BY4Gzpd0RFK/LXBvRBwKrAF+mGH8Y0uJ7Zv6CXC9pG7ApcAlaefmJmObmZlZBdXWhKhEETEDOFDSt4D+wF8LZmsymBQRGyPiY+AjUktu3wHGR8QXEfE58BTQLan/TkTMT47nADkZ+mwFrKycqyksIj4kldhNAy6NiPQZpY+AvYq2kfQTSfmS8jevW1sVYZmZmdV6tTUhWgIcWcr5x4AzSc30jCml3sa0482kvspEFaxf1HqgQSl9fFMdgU8onvw0SMYuJCIejIjciMit26hpFYZlZmZWe9XWhGgqUF/S+QUFko6S9N3kbR4wFCAiliRlnwG7lqPvmUAfSY0kNQb6Ai9WILalwIEVqF9ukroA3wOOAIZJ2i/tdDtSG7jNzMysgmplQhQRQSpROTG57X4JcCOwIjn/IanEJH12aBqpTdTpm6oz9T2XVEL1CvAyMDoi5lUgvGeB7gVvJPWVtBz4NjBJ0t+T8r0kTU6r9wQwCzhI0nJJ56V3Kqk+8BBwbkSsILWH6BGl7EQqCcuvQJxmZmaWUCq32LFIagQsAjpHRLVvnJE0Hrg8It6spvH6krrW60qrV79V22g18I7qCCkjf9u9mZlVN0lzIqLE5wAWqJUzRKWR1BN4Dbi7JpKhxJWkNldXl3rAb6txPDMzsx1Kpk3BtVpEvAC0qeEYXgfKfPZQJY73ZHWNZWZmtiPa4WaIzMzMzCrKCZGZmZllPSdEZmZmlvV2uD1EVrKOrZuS7zu9zMzMivEMkZmZmWU9J0RmZmaW9ZwQmZmZWdbzHqIssuj9teRcOammwzDzU8vNbLvjGSIzMzPLek6IzMzMLOs5ITIzM7Os54TIzLZ7Tz/9NN27d+db3/oWDRs2ZN9996VPnz4899xzW+vk5eUhiWXLllVrbJdccgnf//73C5VdffXVnHTSSTRv3hxJ5OXlldh+9erVDB06lDZt2lC/fn323ntvBg0atE2xLF68mJ/+9KcceeSR7Lzzzkgqtf7s2bM5+eSTadasGY0bN6Zjx4788Y9/3Hp+3rx5NGrUiP/+97/bFI9ZbeKEyMy2a3fddRd9+/albdu2PPzww0yaNIlrr70WgKlTp26td+qppzJr1ixatWpVbbG9/fbbPPDAA9xwww2Fyu+++27Wr1/PaaedVmr71atX853vfIcXXniBESNG8Pzzz3P77bez6667blM8c+bMYfLkybRp04bc3NxS606aNInu3buz55578vjjj/O3v/2N888/nw0bNmytc8QRR3DiiSdy3XXXbVM8ZrWJIqKmY7BqUr9V22g18I6aDsOsQneZtWnThiOPPJLx48cXO7dlyxbq1Km53+suueQSZs+ezauvvlqovCCut956i7Zt2zJmzJiMsz4XXHABzz77LIsWLaJJkybfOJ70n8e1117LLbfcQqa/4z/77DMOOOAABgwYwB13lP53wuTJk+nduzfvvvsue+211zeO0ay6SZoTEaX/hkCWzxBJypG0ODnOlXRXJfV7h6TuyXGepHckzU9enUpo00bSFElLJf1bUk4FxvujpLaVEbvZ9mbVqlXsueeeGc+lJ0NFl8wGDRqEpIyv6dOnb223YMECTj/9dHbbbTcaNmzIsccey4svvlhmXBs3bmTs2LEMGDCg1LhK8sUXX/CHP/yBwYMHV0oyVN5xAZ588klWrlzJpZdeWmbdk046iSZNmpS67Ge2I8jqhChdRORHxM+/aT+SdgeOjoiZacWXRUSn5DW/hKZ/AG6LiEOALsBHFRj2fuDybYvYbPvWpUsXHn30UW677TbeeOONcre77rrrmDVrVqHXscceS6NGjWjTpg0Ac+fO5ZhjjmHVqlU89NBD/PWvf6V58+b07NmTOXPmlNr/7NmzWbNmDd26ddum65ozZw7r169njz32oF+/fjRs2JBddtmFPn368M4772xTn+X10ksvsfvuu7No0SI6duxIvXr12GeffRg+fDibN28uVLdevXp8+9vfLrRfy2xHVOkJUTLrslTSQ5KWJLMeDZNz0yXlJsctJC1LjgdJelrSxGQ25WJJv5Q0T9LsJMkoaH+HpH9JWiypi6Q6kt6U1DKpU0fSW5JaFInru2mzNPMk7VrkfA9JzyTHu0gaI2mRpIWSfpiUnyRplqS5kp6UtEuGH0E/oEJ/c0hqD9SLiOcBIuLziFhXpE49Sa9K6pG8/7WkW5LTLwI9JflBm7bDGTVqFAceeCCXX345Bx10EC1atKB///5MmTKl1HYHHHAARx999NbXSy+9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E7nzzjt5++23Oe6441i+fHmF4/7kk0945JFHqFevHieeeGKJ9aZMmcK0adMYOHAgEydO5L777mPlypV07dqVOXPmFKo7ePBgbrvtNs4//3wmT57MiBEjmDlzJieccAKff/751no33ngjDz30EG+88UaF4zbbHigiajoGqyb1W7WNVgPvqOkwag1vqq5abdq04cgjj2T8+PHFzm3ZsoU6dWru97VLLrmE2bNn8+qrrxYqL4jrrbfeom3btowZM4ZBgwYVqrNmzRp22WUX6tX7+p6VTZs2ceihh7LHHnsUminaa6+96NGjB48//vjWstdee41DDjmEUaNG8dOf/rRCcUcEkgB44YUXOPHEE5k2bRo9evQoVO/jjz/eOstVYO3ateTk5PD973+fP/zhDwCsX7+eXXfdlcsvv5xf/epXW+s+99xzfO973+O5556jV69eW8u7dOlCbm4u9913X4XiNqtKkuZERG5Z9bJ6hkhSjqTFyXGupLsqqd87JHVPjsdJel3SYkmPSNqplHZNJL0v6Z4KjveCpN2+adxm1WnVqlXsueeeGc+lJ0NFl8wGDRqEpIyv9OWhBQsWcPrpp7PbbrvRsGFDjj32WF588cUy49q4cSNjx45lwIABpcZVkmbNmhVKhgDq1atHp06deP/99wuVf/nllzRp0qRYe0glXxWVnuCUpkWLFsXqNm3alHbt2hWKcdOmTWzevLncMf74xz9m3LhxrF+/vsKxm9W0rE6I0kVEfkT8/Jv2I2l34OiIKPg1cBxwMNARaAgMLqX5zcCMbRj2MeDCbWhnVmO6dOnCo48+ym233VahZZbrrruOWbNmFXode+yxNGrUiDZt2gAwd+5cjjnmGFatWsVDDz3EX//6V5o3b07Pnj2LLQkVNXv2bNasWUO3bt2+0fWl+/LLL5k1axaHHHJIofILL7yQsWPH8re//Y1PP/2U//znP1x44YXsvffenHHGGZU2fnmsWrWKxYsXF4px11135ayzzuKuu+5i2rRpfP755yxZsoTLLruMww8/nBNOOKFQH927d+fTTz9l1qxZ1Rq7WWWo9IQomXVZKukhSUskTZHUMDk3XVJuctxC0rLkeJCkpyVNlPSOpIsl/VLSPEmzkySjoP0dkv6VzLh0kVRH0puSWiZ16kh6S1KLInF9V9L85DVP0q5FzveQ9ExyvIukMZIWSVoo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D1EJmfHuAsqG3F/sMFZJfgdsM7OmzTNEZmZmVvKcEJmZmVnJc0JkZmZmJc8JkZnVu3vvvZc+ffqw/vrr06pVKzbddFMOPvhgHnrooaV1Ro0ahSTmzJnTqLGdccYZ/L//9/8qnTv//PPZd999ad++PZIYNWpUte1HjBjBVlttRYsWLdhyyy0ZNmxYpfLPP/+cP/zhD+y66660b9+edu3aseuuu3LvvfcWjOuzzz5jgw02QBKPPfbYcl3bF198wdlnn03fvn1Ze+21kcT48ePz1v3++++57LLLKCsro2XLlvTo0YO77767Up3333+f8847j169etG2bVvWW2899t57byZMmFAwjjfffJPWrVsjidmzZ1cq69+/P6eddtpyXZ9ZQ3JCZGb16pprruGQQw6hc+fO3Hzzzdx///387ne/A+CJJ55YWu8nP/kJEydOpGPHjo0W2xtvvMGNN97I73//+0rnr732WhYuXMiBBx5YsP2IESM46aSTOPTQQ3nooYc4/PDDOfXUU7nhhhuW1vnvf//L9ddfz5577sno0aO544476NKlC4cccgjXXXddtX2fe+65SFqh6/vkk08YOXIkzZs3Z5999ilY94ILLuCiiy7i9NNP58EHH2TnnXfm8MMP54EHHlhaZ/Lkydxxxx3079+fu+66i1GjRtGyZUv69u3LfffdV23fp556Km3bts1bdtFFFzFixAhee+215btIswaiiCh2DNZIWnTsHB2Pu6rYYayS/JTZMptssgk77LAD99xzT5Wy77//ntVWK97/w8444wwmTZrECy+8UOl8RVyzZ8+mc+fO3HLLLQwcOLBSncWLF7PhhhtywAEHcOutty49f/zxxzN27Fjef/99Vl99db766isk0bp160rt9957b15//XX++9//Vonr2WefZd999+Xaa69l0KBBPProo/Tr16/O1xcRS5Oqxx57jH322Ycnn3ySvn37Vqr30UcfsfHGGzNkyBAuvvjiSjHOmzeP6dOnA5lZqzXXXJPmzZc9kLx48WK22WYbfvCDH+SdKbrtttsYPHgw5513HoMHD+b1119niy22qFSnd+/e9OrVi+uvv77O12hWV5ImR0SvmuqV9AyRpDJJL6XjXpKuqad+r5LUJx2PkfSqpJckjZS0ejVt/iRppqRZkq5RHf6rKOkxSevUR+xmK2r+/PlssMEGecuy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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkoAAAHnCAYAAABHSXI0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvDW2N/gAAIABJREFUeJzs3Xuc13P+///bvaSTDjTtGocMKrQOYZTVllByWmmXpXwpwlpEVk67WSx2s/ycFpuUssqylqyIxXZiFaaUSo4fOUVKKoeKqcfvj/dr8p6Z93sONc1M0/16ubwv+3q/nqfH6+2902Oez+frNYoIzMzMzKy0ejUdgJmZmVlt5UTJzMzMLAsnSmZmZmZZOFEyMzMzy8KJkpmZmVkWTpTMzMzMsnCiZGZmZpaFEyUzMzOzLJwomZmZmWWxVU0HYLVDTk5O5OXl1XQYZmZm1WLmzJlLI6J1efWcKBkAeXl5FBQU1HQYZmZm1ULSBxWp56U3MzMzsyycKJmZmZll4UTJzMzMLAsnSmZmZmZZeDO3ATD3kxXkXfFUTYdhZmaW0cJhx9bIuJ5RMjMzM8vCiZKZmZlZFk6UzMzMzLJwomRmZmaWhRMlMzMzsyxqfaIkaa2k2ZLmSXpEUpMy6uZJ6pf2foCkOzdRXCdI+kPaOEuSOGdLOiut3o1J7PMknZx2fpykt5Lz90lqkGWcZyQtl/TkBsT4kKR2G3J9ZmZmVkOJkqTKPJZgVUR0jIi9ge+Ac8uomwf0K6O8Kl0G3J32/uEkzo4RMRJA0rHAAUBHoDNwqaTmSf1xwJ7APkBj4Cwyuwk4bQNj/FsSp5mZmW2ADUqUkpmbNyXdL+l1Sf8qmumRtFBSTnKcL2lKcnyNpBGSngX+Lqm+pJskvZr08esKDP0C0FbSdZIuSovnBkkXAsOArsmszsVJ8Q7JrMw7kv6S1qavpLnJjM6Naee/TvqbI2mGpB9nuP72wJqIWFpOvB2AqRFRGBHfAHOAowAiYmIkgFeAnTJ1EBH/Bb7KNoCkrZLPsHvy/s+Sbkj7vHpUMjE1MzOzxMbMKO0BjIiIfYGVwHkVaHMg0Dsi+gEDgRURcRBwEHC2pF2zNUz+sT8amAuMAvon5+sBp5CaobkCeCGZ1bk1adoROJnUzM3JknaWtANwI3B4Un6QpBOS+k2BGRGxHzANODtDOF2AWSXO/TItadw5OTcHOFpSkyR5PAzYOb1RsuR2GvBMtmsvS0QUAgOAv0nqSSoRuzYpWwe8C+y3IX2bmZlt6TYmUfooIv6XHI8FflaBNk9ExKrk+EjgdEmzgZeBVkCm/TSNkzoFwIfAqIhYCHwhaf+kn9ci4ossY/43IlZExGrgDWAXUonZlIhYkiQa44BuSf3vgKL9QDNJLeeVlAssSXs/AchLksbngfsBIuJZYCLwEvAPYDpQWKKvu4FpEfFClvjLFRHzgQeSOM6MiO/Sij8HdsjUTtI5kgokFaz9dsWGDm9mZlZnbcySTGR5X8gPCVijEnW+STsWMCgi/lPOOKsiomOG8yNJzaRsD9xXRvs1acdrSV2zyqj/fbIcll6/VExAi6I3JZK0e0nNVhWV3QDcACDpQeCdojJJVwOtgYosO5ZnH2A5UHKpsFESbykRMQIYAdAwt13J/55mZmZbvI2ZUWoj6afJcV/gxeR4IaklNoBfltH+P8Bviu72ktReUtNKjD+e1DLTQUlfkNrL06wCbV8GDpWUI6l+Ev/USoy9AGhb9EZSblrZ8Uk5yT6sVsnxvsC+wLPJ+7OAXkDfZIlsg0n6BakZuW7AHZJaphW3B+ZvTP9mZmZbqo1JlBYA/SW9DmxH6g4rSO2PuV3SC6RmZLIZSWopbJakecA9VGKGK1lemgz8MyKKxnkdKEw2Yl9cRttPgSuT9nOAWRHx74qOTWrv0v6SimamLpQ0X9Ic4EJSM10ADYAXJL1Baubm/yVLfQDDSc3+TE82nxc9aiBf0siigZLP8RHgCEkfS+qVHkiy92kYMDAi3gbuBG5Pyn5Makbu00pcm5mZmSX0wypTJRpJecCTyS37NSLZxD0LOCki3imv/iYY/3ZgQkQ8X91jV1SSLK6MiFHl1W2Y2y5y+99WDVGZmZlV3sJhx1Zpf5JmRkR+efVq/QMnM5HUgdTdXP+tiSQp8Scg68Mva4nlJBvLzczMrPI2aDN3ctdZjc0mRcQbwG41NX4Sw2LgiZqMoTwRMbqmYzAzM9ucbZYzSmZmZmbVwYmSmZmZWRb+0xYGwD47tqCgijfKmZmZbe48o2RmZmaWhRMlMzMzsyycKJmZmZll4UTJzMzMLAtv5jYA5n6ygrwrnqrpMMysAqr6CcVmlp1nlMzMzMyycKJkZmZmloUTJTMzM7MsnCiZmZmZZeFEyczMzCwLJ0qVIKm7pCeT4wGS7sxS7wRJf0iOz5U0V9JsSS9K6pBW70pJ70p6S1KvLH3tKullSe9IeljS1pWI9wJJZ1TuKs3MzKyIE6USJFXFIxMuA+5Ojh+MiH0ioiPwF+CWZJwOwCnAT4CjgLsl1c/Q143ArRHRDvgSGFiJOO4DLtywSzAzM7NqTZQk5UlaIOleSfMlPSupcVI2RVJ+cpwjaWFyPEDS45ImSHo/mSX5raTXJM2QtF1a+9skvSRpnqROkuolMzGtkzr1khmcnBJxXSNphKRngb9LaiRpdDIT9Jqkwypxje2BNRGxFCAiVqYVNwUiOe4NPBQRayLifeBdoFOJvgQcDvwrOXU/cEKGMe9Im8HqJWmapHoR8S2wUFKnkm3MzMysfDUxo9QOuCsifgIsB35ZgTZ7A/1IJRI3AN9GxP7AdOD0tHpNI+IQ4DzgvohYB4wFTk3KewBzipKYEg4EekdEP+B8gIjYB+gL3C+pUQWvrwswK/2EpPMlvUdqRqlohmdH4KO0ah8n59K1ApZHRGEZdQCuAE5OEro7gDOSawcoALpWMHYzMzNLUxOJ0vsRMTs5ngnkVaDN5Ij4KiKWACuACcn5uSXa/wMgIqYBzSW1JLX8VJRMnQmMzjLGExGxKjn+GfBA0tebwAdA+wrECZALLEk/ERF3RcTuwOXA0OS0MrSNEu8rUodk5uhs4Dngzoh4L634c2CHTIFKOkdSgaSCtd+uyFTFzMxsi1YTidKatOO1/PBnVAr5IZ6SszfpbdalvV9H8T/DUjKJiIj4CFgs6XCgM/B0lri+STvOlKBU1CpKx1/kIX5YOvsY2DmtbCdgUYn6S4GWafumMtUpsg/wBaWTokZJTKVExIiIyI+I/PpNWmTp1szMbMtVmzZzLyS1/AVw4gb2cTKApJ8BKyKiaJpkJKkluH9GxNoK9DONZLku2XPUBnirgjEsANoWvZHULq3sWOCd5PgJ4BRJDSXtSmpJ8pX0jiIigMn88Hn0B/5dckBJuwCXAPsDR0vqnFbcHphXwdjNzMwsTW1KlG4GfiPpJSCnvMpZfJm0H07xu8OeALYh+7JbSXcD9SXNBR4GBkTEmnLaFJkG7J9sxAa4INm4Phv4Lalkh4iYD/wTeAN4Bji/KImTNFFS0czQ5cBvJb1Las/SqPTBknFGAUMiYlFy3SPT9lR1AZ6vYOxmZmaWRqlJi82fpCmkkoWCDGX5pG6xr5ZNzZJuByZERI0mKJL2B34bEaeVV7dhbrvI7X9bNURlZhtr4bBjazoEs82epJkRkV9evdo0o7RJSLoCeBS4shqH/RPQpBrHyyYHuKqmgzAzM9tcVcXDFWuFiOie5fwwYFg1x7KY1HJfjYqI52o6BjMzs81ZnZ9RMjMzM9tQTpTMzMzMsnCiZGZmZpZFndmjZBtnnx1bUOA7aczMzIrxjJKZmZlZFk6UzMzMzLJwomRmZmaWhfcoGQBzP1lB3hVP1XQYthH8tGYzs6rnGSUzMzOzLJwomZmZmWXhRMnMzMwsCydKZrbZevzxx+nWrRs/+tGPaNy4MbvssgsnnHACzzzzzPo6Y8aMQRILFy6s1tgGDRrEz3/+8/XvP/jgA3r37s0uu+xC48aNycnJoXv37jz99NPF2hUUFHDOOeew55570qRJE9q0acOpp57K+++/v8GxXHHFFey77760bNmSJk2asOeee3Ldddfx7bffrq+zcuVK/vjHP3LIIYfQqlUrWrZsySGHHMLjjz9eqr/evXtz/vnnb3A8ZpsTJ0pmtlm644476NOnD+3atWPUqFE89dRTDB06FIBJkyatr3fssccyffp0cnNzqy229957j3vuuYerr756/bmvv/6anJwcrr/+eiZOnMioUaPYZpttOOaYY3jsscfW13vooYeYP38+F154IU8//TTDhg1j1qxZ5Ofn89FHH21QPCtXruSMM87gwQcfZMKECZx66qnccMMN9O3bd32dDz/8kLvvvptDDz2UsWPH8vDDD9O+fXv69OnDXXfdVay/a665hnvvvZe33357g+Ix25woImo6BqsFGua2i9z+t9V0GLYRtrS73tq0acOBBx7I+PHjS5WtW7eOevVq7vfAQYMGMWPGDF599dUy6xUWFrLrrrvSsWNHJkyYAMCSJUto3bp1sXoffPABu+66K0OHDuWPf/xjlcR45ZVXMmzYMJYsWUJOTg7ffPMNkmjSpEmxekcccQTvvPMOH374YbHznTp1Ij8/n7vvvrtK4jGrbpJmRkR+efU8o5SFpDxJ85LjfEl3VFG/t0nqVuLcXyV9naV+J0mzk9ccSX0qMdbWkqZJ8mMgrM5ZtmwZ22+/fcay9CSp5NLbgAEDkJTxNWXKlPXt5syZw/HHH8+2225L48aN6dKlCy+88EK5ca1Zs4axY8fSr1+/cututdVWtGjRggYNGqw/VzJJAthll11o3bo1n3zySbl9VlSrVq0A1o/dtGnTUkkSQH5+PosWLSp1/pRTTmHcuHGsWrWqymIyq42cKFVARBRExIUb24+k7YCDI2Ja2rl8oGUZzeYB+RHRETgKuKeiiU9EfAf8Fzh5w6M2q506derE/fffz0033VSpJaCrrrqK6dOnF3t16dJl/X4ggFmzZnHIIYewbNky7r33Xh599FFatWpFjx49mDlzZpn9z5gxg+XLl9O1a9eM5evWraOwsJDPPvuM6667jrfffrvc/T4LFizg888/Z6+99qrwdWZSWFjI119/zfPPP88tt9zCmWeeSYsWLcpsM23aNPbcc89S57t168bKlSuZPn36RsVkVttVa6KUzNIskHSvpPmSnpXUOCmbkiQNSMqRtDA5HiDpcUkTJL0v6QJJv5X0mqQZSfJR1P42SS9JmpfMxNST9I6k1kmdepLelZRTIq5D02ZtXpPUrER5d0lPJsfbSBotaa6k1yX9Mjl/pKTpkmZJekTSNhk+ghOBZ9L6rQ/cBFyW7TOLiG8jojB52wgotVYqaZfkOnOSa3xB0pFJ8ePAqdn6N9tcDR8+nLZt23LZZZexxx57kJOTQ9++fXn22WfLbLf77rtz8MEHr3+9+OKLTJ8+nXHjxrHbbrsBcOmll9KmTRsmTZrEiSeeyDHHHMP48ePZbbfduO6668rsf8aMGUhi3333zVh+2WWX0aBBA3Jzc/nLX/7CQw89xBFHHJG1v8LCQs4991xat27NwIEDy/lUsps3bx4NGjSgWbNm9OzZk549ezJixIgy24wYMYIZM2Zw5ZVXlirbb7/9qFevHjNmzNjgmMw2BzUxo9QOuCsifgIsB35ZgTZ7A/2ATsANwLcRsT8wHTg9rV7TiDgEOA+4LyLWAWP5IVHoAcyJiKUl+h8CnJ/M2nQFyppLvgpYERH7RMS+wKQk8RoK9IiIA4AC4LcZ2nYB0n8dvQB4IiI+LeviJXWWNB+YC5ybljgBEBEfADcCw4FLgDciouhfi3nAQVn6PUdSgaSCtd+uKCsEs1qnffv2vPbaa0ydOpXf//73dOzYkfHjx9OrVy+uv/76CvUxYcIELr/8cm688UZOOOEEAFatWsXUqVM56aSTqFevHoWFhRQWFhIR9OjRg2nTppXZ56JFi2jevDlbb711xvLBgwfz6quvMmHCBI4++mj69evHk08+mbW/Cy64gJdeeomxY8ey7bbbVui6Mmnbti2vvvoqU6ZM4U9/+hPjx4/n9NNPz1p/ypQpXHjhhZx22mmcemrp37UaNGhAixYtMi7LmdUlNbF35f2ImJ0czwTyKtBmckR8BXwlaQUwITk/F0j/te0fABExTVJzSS2B+4B/A7cBZwKjM/T/P+AWSeOAxyLiY0nZYukBnFL0JiK+lHQc0AH4X9Jua1JJXEm5wBIASTsAJwHdy750iIiXgZ9I2gu4X9LTEbG6RJ2Rkk4CzgU6pp1fK+k7Sc2SzzC9zQhgBKQ2c5cXh1ltU79+fbp160a3bqltf4sWLeKoo47i2muv5fzzzy8zsZgzZw79+vVj4MCBDBkyZP35ZcuWsXbtWq677rqss0dlbRZfvXo1DRs2zDruTjvtxE477QTAcccdR/fu3RkyZAjHHXdcqbpXXnklI0aM4P777+fII48sVV4ZjRo1Ij8/tW/10EMPJTc3lzPOOINBgwZx8MEHF6v76quvcvzxx3P44YczatSorH02btzYe5SszquJGaU1acdr+SFZK+SHeBqV0WZd2vt1FE/2Sv5jHxHxEbBY0uFAZ+BpSlcaBpwFNAZmSCq9IP8DZRhHwHMR0TF5dYiITHPkq/jh2vYH2gLvJsuMTSS9W8a4RMQC4BtSM2zFA5CaADslb0su+zUEVmNWx+2www6cddZZFBYW8s4772Stt3jxYo4//ngOPvjgUndttWzZknr16jFo0CBeffXVjK+y7qhr1aoVX375ZYVjzs/P5913S/9f/4YbbmDYsGHcfvvtnHbaaRXurzLjAqXGnjt3Lr169aJjx448+uijxTaal7Rs2TJycnKylpvVBbXpbqiFwIHAK6T28myIk4HJkn5GanmsaD1pJKkluAciYm3JRpJ2j4i5wFxJPwX2BGaXrJd4ltSS2eCk7bbADOAuSW0j4t2ipCUiSu4wXUAqOZoSEU8B62/ZkfR1RLTNENuuwEcRUShpF2APUp9VSTcC44APgHuB45L2rYAlEfF9lusx2yx99NFH7LzzzqXOv/nmmwBZ74hbvXo1vXv3pmnTpjzyyCNstVXxH4NNmzala9euzJkzhwMOOKDSjxnYc889+f777/n444/Xzxxls27dOl588UV23333YufvuOMOhg4dyg033MCgQYMqNX5FTZ06FaDY2O+88w49e/Zkt91248knn6Rx48ZZ23/22WesXr2aPfbYY5PEZ1Zb1KZE6Wbgn5JOAyaVVzmLLyW9BDQntcxW5AlSS26Zlt0ABks6jNQM1xukZp2yPZ3uelJJ0byk/rUR8ZikAcA/JBXNuQ8FSiZKTwG/JpW4ZSXpeFJ3uv0B+BlwhaTvSc2gnVdyj5WkQ0ntQ+qSLLX9UtIZETEaOAyYWNZ4Zpujvffem8MOO4w+ffqw6667snLlSiZOnMjw4cP51a9+tf4OtpIGDx7MrFmzGDNmzPqkqkiHDh1o3rw5t9xyC926daNXr14MHDiQ3Nxcli5dyqxZs1i7di3Dhg3LGlfRMuArr7xSLFG65pprWLZsGV26dGH77bfns88+Y9SoUbzyyis8+OCD6+s99NBDDB48mKOOOorDDz+82Gbp5s2b06FDh/Xvu3fvzsKFC8t86vjrr7/OkCFDOOmkk9htt91Ys2YN06ZN4/bbb+foo4/mpz/9KQCff/45PXv25LvvvuPaa6/ljTfeKNbP/vvvX2xJ8eWXXy52vWZ1VZ154KSkKcCQiCjIUJYP3BoRme/XrUaSXgSOi4jl1TTeY8CVEfFWWfX8wMnN35b2wMnhw4czceJE5syZw+LFi6lfvz7t27enb9++DB48eP1m6jFjxnDGGWfw/vvvk5eXR/fu3dfPppQ0efJkunfvDqRuyb/22muZNGkSK1asoHXr1hxwwAGce+65HHPMMWXG1rlzZzp06MDo0T/8bvbEE09w2223MW/ePFasWMH222/Pfvvtx+WXX06XLl3W1xswYAD3339/xn4PPfTQYs96Ouigg6hfv36Zd54tXryYiy++mOnTp/PZZ5/RpEkTdtttNwYMGMBZZ521PvmZMmUKhx12WNZ+ij6/ImeffTavvfYaBQWlfuSabRZUwQdO1vlESdIVwG+AUyPixZqIrUQ8nYFVEfF6NYy1NXBKRPy9vLpOlDZ/W1qiVJuNGTOGiy66iE8//TTjQxyrwjfffMO2227L2LFj+dWvfrVJxshm9erV5ObmcvPNN2/UIwvMalJFE6U688DJiOieaTYpIoZFxC61IUmC1B1s1ZEkJWN9V5Ekycyq1mmnncaOO+64Sf+8x0svvcTuu+/OiSdu6JbODXfPPffwox/9iP79+1f72GbVrc4kSmZmtUX9+vW57777NtlsEkDPnj1ZsGBBjfxNu4YNGzJmzJhSG+HN6qI6s/RmG8dLb5s/L72ZmVVcRZfe/OuAAbDPji0o8D+0ZmZmxXjpzczMzCwLJ0pmZmZmWThRMjMzM8vCiZKZmZlZFt7MbQDM/WQFeVc8VSNj+24tMzOrrTyjZGZmZpaFEyUzMzOzLJwomZmZmWXhRMnMzMwsCydKZmZmZlnUuURJ0vaSHpL0nqQ3JE2U1L6M+h0lHZP2/hpJQzZRbIMlnZ4cnyRpvqR1kjL+rRlJO0uaLGlBUveiSo53s6TDqyJ2MzOzLVGdSpQkCRgPTImI3SOiA/A74MdlNOsIHFNGeVXFthVwJvBgcmoe8AtgWhnNCoFLImIv4GDgfEkdKjHsX4ErNiBcMzMzo44lSsBhwPcRMbzoRETMjogXJD0gqXfReUnjJB0P/BE4WdJsSScnxR0kTZH0f5IuTGvzW0nzktfg5FxeMuNzbzLr86ykxhliOxyYFRGFSVwLIuKtsi4mIj6NiFnJ8VfAAmDHkvUk/TttpurXksYlbT4AWknavtxPzszMzEqpa4nS3sDMLGUjgTMAJLUADgEmAn8AHo6IjhHxcFJ3T6AX0Am4WlIDSQcm7TuTmt05W9L+Sf12wF0R8RNgOfDLDON3KSO2cknKA/YHXs5QfA7wB0ldgUuAQWlls5KxM/V5jqQCSQVrv12xoaGZmZnVWXUtUcoqIqYCbSX9COgLPFo0u5PBUxGxJiKWAp+TWrr7GTA+Ir6JiK+Bx4CuSf33I2J2cjwTyMvQZy6wZENil7QN8CgwOCJWZri2xaQSvsmkluqWpRV/DuyQqd+IGBER+RGRX79Jiw0JzczMrE6ra4nSfODAMsofAE4lNTM0uox6a9KO15L6Uy+qZP2SVgGNyugjI0kNSCVJ4yLisTKq7gN8QemkqFEytpmZmVVSXUuUJgENJZ1ddELSQZIOTd6OAQYDRMT85NxXQLMK9D0NOEFSE0lNgT7AC5WIbQHQthL1izanjwIWRMQtZdTrBBxNamluiKRd04rbk9o4bmZmZpVUpxKliAhSCUzP5PEA84FrgEVJ+WJSCUv6bNJkUpu30zdzZ+p7FqlE6xVS+4RGRsRrlQjvaaBb0RtJfSR9DPwUeErSf5LzO0iamFTrApwGHJ7ENzv9UQZJ/YbAvcCZEbGI1B6l+5TSgFRyVlCJOM3MzCyhVG6xZZDUBJgLHBAR1b57WdJ44LKIeKeaxutD6lqvKq9uw9x2kdv/tmqIqrSFw46tkXHNzGzLJWlmRGR8jmG6OjWjVBZJPYA3gb/WRJKUuILUpu7qshXw/1XjeGZmZnVKpk3HdVJEPA+0qeEY3gLKfHZSFY/3SHWNZWZmVhdtMTNKZmZmZpXlRMnMzMwsiy1m6c3Kts+OLSjwpmozM7NiPKNkZmZmloUTJTMzM7MsnCiZmZmZZeFEyczMzCwLb+Y2AOZ+soK8K56qsv78tG0zM6sLPKNkZmZmloUTJTMzM7MsnCiZmZmZZeFEyczMzCwLJ0pmZmZmWdTpREnSAEk7bIJ+R0rqkBwvlJRTiba3SeqWHF8g6V1JUVYfkvpLeid59a9krM9L2rYybczMzCylTidKwACgyhOliDgrIt6obDtJ2wEHR8S05NT/gB7AB+W0uRroDHQCrq5k4vMAcF5lYzUzM7NamihJypP0pqT7Jb0u6V+Smkg6QtL4tHo9JT0mqb6kMZLmSZor6WJJJwL5wDhJsyU1lnSgpKmSZkr6j6TcpJ8pkm6U9IqktyV1Tc7Xl3Rz0ufrkgal1c8vEXNTSU9JmpPEcXKGSzsReKboTUS8FhELy/k4egHPRcSyiPgSeA44qsTYLSS9JWmP5P0/JJ2dFD8B9C1nDDMzM8ugViZKiT2AERGxL7CS1KzIJGAvSa2TOmcAo4GOwI4RsXdE7AOMjoh/AQXAqRHRESgE/gqcGBEHAvcBN6SNt1VEdAIGk5rBATgH2BXYP4ljXBnxHgUsioj9ImJv0hKiNF2AmZX6FGBH4KO09x8n59aLiBXABcAYSacA20bEvUnZl0BDSa0qOa6ZmdkWrzYnSh9FxP+S47HAzyIiSC0l/T9JLYGfAk8D/wfsJumvko4ilViVtAewN/CcpNnAUGCntPLHkv+dCeQlxz2A4RFRCBARy8qIdy7QI5mZ6pokLyXlAkvKuugMlOFclDoR8VwSw13AWSWKPyfDEqSkcyQVSCpY+22mcM3MzLZstTlRKpkMFL0fDfw/UstJj0REYTJrsh8wBTgfGJmhPwHzI6Jj8tonIo5MK1+T/O9afvjTLsoQR+ZgI94GDiSVrPxZ0h8yVFsFNKpIf2k+BnZOe78TsKhkJUn1gL2SMbYrUdwoOV8y5hERkR8R+fWbtKhkWGZmZnVfbU6U2kj6aXLcF3gRICIWkUoUhgJjAJI7xupFxKPAVcABSbuvgGbJ8VtA66I+JTWQ9JNyYngWOFfSVkmbkgnIesnddd9GxFjg5rQY0i0A2pYzZkn/AY6UtG2yifvI5FxJFyf99wXuk9QgiUvA9sDCSo5rZma2xavNidICoL+k10nNkPwtrWwcqaW5ojvPdgSmJEtqY4Ark/NjgOHJ+fqkNlPfKGkOMBs4pJwYRgIfAq8nbfqVUXcf4JVkrN8D12eo8xTQveiNpAslfUxqluh1SSOT8/lFx8ly33XAq8meDqkfAAAgAElEQVTrjyWXACW1J7XcdklEvABMI5VIQmqWa0bR8qGZmZlVnFLbfmoXSXnAk8mm6EzldwKvRcSo6oyrKkh6ETguIpZX03i3A09ExH/Lqtcwt13k9r+tysZdOOzYKuvLzMysqkmaGRH55dWrzTNKGUmaCexLaoP35ugSoE01jjevvCTJzMzMMtuq/CrVL3m2UMbZpOTW/s1WRLxczePdW53jmZmZ1SWb3YySmZmZWXVxomRmZmaWRa1cerPqt8+OLSjwBmwzM7NiPKNkZmZmloUTJTMzM7MsnCiZmZmZZeFEyczMzCwLJ0pmZmZmWdTKP2Fi1U/SEuCDjeymBbCiCsKprjE2tK/KtqtI/Y2tU1ZZDrC0nL5rk+r4HlXlOLXpe1SRehta7u/Rph1nY/qpTNuq+h6VV2dz+Jm0S0S0LrdWRPjlV5W8gBGb0xgb2ldl21Wk/sbWKaesoKa/GzX137g6xqlN36OK1NvQcn+Pauf3qLJtq+p7VF6duvQzyUtvVpUmbGZjbGhflW1XkfobW6c6PvvqUl3XUlXj1KbvUUXqbWz55mJL+R5Vtm1VfY/Kq1NXvkdeejOr6yQVRAX+QrZZWfw9sqqyuX2XPKNkVveNqOkArE7w98iqymb1XfKMkpmZmVkWnlEyMzMzy8KJkpmZmVkWTpTMzMzMsnCiZLYFk9Rd0guShkvqXtPx2OZLUlNJMyUdV9Ox2OZJ0l7Jz6J/SfpNTcdTxImS2WZK0n2SPpc0r8T5oyS9JeldSVeU000AXwONgI83VaxWe1XR9wjgcuCfmyZKq+2q4nsUEQsi4lzgV0CteXyA73oz20xJ6kYqyfl7ROydnKsPvA30JJX4vAr0BeoDfy7RxZnA0ohYJ+nHwC0RcWp1xW+1QxV9j/Yl9WcpGpH6Tj1ZPdFbbVEV36OI+FzS8cAVwJ0R8WB1xV+WrWo6ADPbMBExTVJeidOdgHcj4v8AJD0E9I6IPwNlLYl8CTTcFHFa7VYV3yNJhwFNgQ7AKkkTI2LdJg3capWq+nkUEU8AT0h6CnCiZGZVbkfgo7T3HwOds1WW9AugF9ASuHPThmabkUp9jyLi9wCSBpDMUm7S6GxzUdmfR92BX5D6pW3iJo2sEpwomdUtynAu6/p6RDwGPLbpwrHNVKW+R+srRIyp+lBsM1bZn0dTgCmbKpgN5c3cZnXLx8DOae93AhbVUCy2+fL3yKpCnfgeOVEyq1teBdpJ2lXS1sApwBM1HJNtfvw9sqpQJ75HTpTMNlOS/gFMB/aQ9LGkgRFRCFwA/AdYAPwzIubXZJxWu/l7ZFWhLn+P/HgAMzMzsyw8o2RmZmaWhRMlMzMzsyycKJmZmZll4UTJzMzMLAsnSmZmZmZZOFEyMzMzy8KJkpnVCElrJc2WNE/SBEktN6Kv7pIOSXt/rqTTqybSCo3fVdL85HoaV6D+SEkdNnCsPEnzKtnmpbS2/TZk3DL6/l2msczqCj9HyQDIycmJvLy8mg7DzMysWsycOXNpRLQur57/KK4BkJeXR0FBQU2HYWZmVi0kfVCRel56MzMzM8vCiZKZmZlZFk6UzMzMzLLwHiUDYO4nK8i74qmaDsPMzCyjhcOOrZFxPaNkZmZmloUTJTMzM7MsnCiZmZmZZeFEyczMzCwLJ0pmZmZmWThRMjMzM8ui1iRKJf5A5iOSmpRRt9gfdpQ0QNKdmyiuEyT9ITnuJmmWpEJJJ6bV2UXSzCT++ZLOTSubIumtpGy2pB+V6P9ESSEpP8PYjSS9ImlO0u+1lYz9IUntKn/VZmZmBps4UZJUmec0rYqIjhGxN/AdcG4ZdfOAKv0L2GW4DLg7Of4QGAA8WKLOp8AhEdER6AxcIWmHtPJTk2vrGBGfF52U1Ay4EHg5y9hrgMMjYj+gI3CUpIMrEfvfkvjNzMxsA5SZKCUzN29Kul/S65L+VTTTI2mhpJzkOF/SlOT4GkkjJD0L/F1SfUk3SXo16ePXFYjrBaCtpOskXZQWzw2SLgSGAV2TGZqLk+IdJD0j6R1Jf0lr01fS3GSm6sa0818n/c2RNEPSjzNcf3tgTUQsBYiIhRHxOrAuvV5EfBcRa5K3Dcv7XNNcB/wFWJ2pMFK+Tt42SF5RIsatks+2e/L+z5JuSIpfAHpUMmE1MzOzREX+Qd8DGBER+wIrgfMq0OZAoHdE9AMGAisi4iDgIOBsSbtma5j8o340MBcYBfRPztcDTgHGAVcALyQzNLcmTTsCJwP7ACdL2jmZ1bkRODwpP0jSCUn9psCMZLZmGnB2hnC6ALMqcL0k470OfATcGBGL0opHJ0ndVZKU1N8f2Dkiniyn3/qSZgOfA89FRLHZp4goJDXL9TdJPYGjgGuTsnXAu8B+Wfo+R1KBpIK1366oyGWamZltUSqSKH0UEf9LjscCP6tAmyciYlVyfCRwevKP/ctAKyDTvpnGSZ0CUktcoyJiIfBFklQcCbwWEV9kGfO/EbEiIlYDbwC7kErMpkTEkiShGAd0S+p/BxQlKTNJLeeVlAssqcD1EhEfJclkW6B/2gzVqRGxD9A1eZ2WJH23ApdUoN+1yZLeTkAnSXtnqDMfeACYAJwZEd+lFX8O7FCyTdJuRETkR0R+/SYtKnKZZmZmW5SKLMlElveF/JBoNSpR55u0YwGDIuI/5YyzKkkIShpJasZke+C+MtqvSTteS+raVEb97yMiStQvFRNQqQwiIhZJmk8qKfpXRHySnP9K0oNAJ+DfwN7AlGSCaXvgCUnHR0RBln6XJ8ubRwHzMlTZB1gOlFxCbJRch5mZmVVSRWaU2kj6aXLcF3gxOV5IaokN4JdltP8P8BtJDSC170dS00rEOJ5UcnBQ0hfAV0CzCrR9GThUUo6k+kn8Uysx9gJSM0RlkrSTpMbJ8bakluzeSvYPFe3jagAcB8xLZr5yIiIvIvKAGUCpJElSa0ktk+PGQA/gzQzj/4LUTF034I6iNon2wPxKXLOZmZklKpIoLSC1lPQ6sB2pO6kgtQ/mdkkvkJqRyWYkqaWwWZLmAfdQsZksILVRGpgM/DMiisZ5HShMNmJfXEbbT4Erk/ZzgFkR8e+Kjk1q79L+afuKDpL0MXAScE8ycwSwF/CypDmkErGbI2IuqY3d/0k+u9nAJ8C9ZQ0oaQdJE5O3ucDkpP2rpPYoPVmifg6pze0DI+Jt4E7g9qTsx6Rm6j6txDWbmZlZQj+sPmUolPKAJ5Nb9mtEsp9nFnBSRLxTA+PfDkyIiOere+yNlSSRKyNiVHl1G+a2i9z+t1VDVGZmZpW3cNixVdqfpJkRUeoZhiXVmgdOZiKpA6m7tv5bE0lS4k9A1odf1nLLgftrOggzM7PNVZlLYMldZzU2mxQRbwC71dT4SQyLgSdqMoYNFRGjazoGMzOzzVmtnlEyMzMzq0lOlMzMzMyy8J+2MAD22bEFBVW8Uc7MzGxz5xklMzMzsyycKJmZmZll4UTJzMzMLAsnSmZmZmZZeDO3ATD3kxXkXfFUTYdhtVBVPw3XzGxz4hklMzMzsyycKJmZmZll4UTJzMzMLAsnSmZmZmZZOFEyMzMzy8KJUhWQ1F3Sk8nxAEl3Zql3gqQ/JMe3SpqdvN6WtDxD/WZpdWZLWirptkrEdYGkMzb0uszMzLZ0fjxABUnaKiIKN7Kby4DjASLi4rS+BwH7l6wcEV8BHdPqzQQeq8R49wH/A0ZvYLxmZmZbtFoxoyQpT9ICSfdKmi/pWUmNk7IpkvKT4xxJC5PjAZIelzRB0vvJ7MlvJb0maYak7dLa3ybpJUnzJHWSVE/SO5JaJ3XqSXpXUk6JuK6RNELSs8DfJTWSNFrS3GScwypxje2BNRGxNENxX+Af5bRvB/wIeCFD2R1pM1W9JE2TVC8ivgUWSupU0TjNzMzsB7UiUUq0A+6KiJ8Ay4FfVqDN3kA/oBNwA/BtROwPTAdOT6vXNCIOAc4D7ouIdcBY4NSkvAcwJ0sScyDQOyL6AecDRMQ+pJKb+yU1quD1dQFmlTwpaRdgV2BSOe37Ag9HRGQouwI4OUnc7gDOSK4RoADomqlDSedIKpBUsPbbFRW8DDMzsy1HbUqU3o+I2cnxTCCvAm0mR8RXEbEEWAFMSM7PLdH+HwARMQ1oLqklqWWpomTqTLIvTz0REauS458BDyR9vQl8ALSvQJwAucCSDOdPAf4VEWvLaX8KWWadkpmjs4HngDsj4r204s+BHbK0GxER+RGRX79Ji/LiNzMz2+LUpkRpTdrxWn7YP1XID3GWnL1Jb7Mu7f06iu+/KjkLExHxEbBY0uFAZ+DpLHF9k3asrNGXbxWl44cyEqD1g0r7AVtFxMwyqu0DfEHppKhRMraZmZlVUm1KlLJZSGr5C+DEDezjZABJPwNWRETROtNIUktw/6zAjA7ANJLlumTPURvgrQrGsABom35C0h7AtqSWCstS5h6mZPnuElIbwo+W1DmtuD0wr4IxmpmZWZrNIVG6GfiNpJeAnPIqZ/Fl0n44MDDt/BPANlT8rrC7gfqS5gIPAwMiYk05bYpMA/aXlD4r1Rd4qOS+I0mzKe5XZEmUkv5GAUMiYhGp6xuZtneqC/B8BWM0MzOzNMq8N7jukDSFVBJRkKEsH7g1IjJudt4EsdwOTIiIaklcJO0P/DYiTiuvbsPcdpHbv8KPaLItyMJhx9Z0CGZmVU7SzIjIL6/e5jCjtElIugJ4FLiyGof9E9CkGsfLAa6qxvHMzMzqlDr/wMmI6J7l/DBgWDXHspjUcl91jfdcdY1lZmZWF22xM0pmZmZm5XGiZGZmZpZFnV96s4rZZ8cWFHjTrpmZWTGeUTIzMzPLwomSmZmZWRZOlMzMzMyycKJkZmZmloU3cxsAcz9ZQd4VT9V0GHWSn2xtZrb58oySmZmZWRZOlMzMzMyycKJkZrXO448/Trdu3fjRj35E48aN2WWXXTjhhBN45pln1tcZM2YMkli4cGG1xjZo0CB+/vOfFzv3u9/9jiOPPJJWrVohiTFjxpRq9+mnn3LllVeSn59PixYtaN26NUcccQTTpk0rVXft2rXceuut7L333jRt2pTc3Fz69OnD66+/vkExf/XVVwwZMoTu3bvTvHlzJDFlypRS9d5++20uuugi9t13X7bZZhtyc3M5/vjjmTNnTqm63377LVdffTXt27encePG7Lzzzpx++uml/nv07t2b888/f4PiNqsNnCiZWa1yxx130KdPH9q1a8eoUaN46qmnGDp0KACTJk1aX+/YY49l+vTp5ObmVlts7733Hvfccw9XX311sfN//etfWbVqFccdd1zWtjNnzuThhx+md+/e/Otf/2LMmDE0atSI7t278+STTxare9VVVzFkyBBOOOEEJkyYwO233857773HYYcdxscff1zpuL/44gvuu+8+ttpqK3r27Jm13rPPPsvkyZPp378/EyZM4O6772bJkiV07tyZmTNnFqt71llncdNNN3H22WczceJErr/+eqZNm8YRRxzB119/vb7eNddcw7333svbb79d6bjNagNFRE3HYLVAw9x2kdv/tpoOo07yZu7KadOmDQceeCDjx48vVbZu3Trq1au53+8GDRrEjBkzePXVV4udL4rr3XffpV27dowePZoBAwYUq7N8+XK22WYbttrqh3toCgsL+clPfsKPf/zjYjNLO+ywA927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jz32WLnjvfbaa9SrVw9JrFlT8nur165dy2233UbHjh1p2rQpeXl5HHvsscyePXu9ru2f//wnp5xyCrvtthuNGzdmt91249xzz2XJkiVl6n777bdcfvnl5OXl0bhxY/bff38mT55cbv8PPfQQkthxxx3LnFuxYgWDBw+mXbt2NG7cmJ122onTTjutzPt79NFHc/7556/X9ZltTIqImo7BaoGGeW0jr//tNR2GrYdNZTP3HXfcwcUXX8wZZ5zBMcccQ9OmTfnggw+YMGEC7dq143e/+x0An332GR988AF77703DRs2rJbYPvjgA/bcc09ee+01unfvDsBll13GlClTOPnkk9lrr734+OOPufHGG1myZAkzZ85kp512Km5/9dVXM3z4cIYMGUK3bt14+OGHuffee3nqqac44ogjyoy3evVqunbtyueff84nn3zC6tWradDg+8/WXHXVVQwbNowrr7ySQw89lM8//5ybbrqJjz/+mFmzZmVMSMrzy1/+km+++Ybjjz+eXXfdlffee4/BgwfTsGFDZs+ezQ9+8IPiuieffDITJkzg1ltvZdddd+Wuu+7imWeeYcqUKXTp0qVM38uWLWOPPfZAEvXr12fRokUlzp900kk8/vjjXH/99XTv3p3//Oc/DB48mPr16zNr1qzisWfMmMG+++7L3LlzadeuXU7XZ7Y+JE2LiO4V1nOiZOBEaVO2qSRKO++8M926dWPcuHFlzq1bt4569WpugvvCCy9k6tSpvPnmm8Vln332Ga1atSpRb+HChbRp04ZrrrmGG264AYAlS5aw0047MWjQIK6//vriuocddhifffZZxlmgm2++mQcffJCjjz6am2++uUyitMMOO3DwwQfz4IMPFpe9/fbb7LnnnowYMYJf//rXOV1fpmuZPHkyBx10EH/9618544wzAJg1axZdunRh1KhRnH766QCsWbOGvfbai/bt2zN+/PgyfZ999tksXLiQvLw8XnzxxRKJ0sqVK2nWrBlXXHEFN998c3H5s88+y09/+lOeffZZDj/88OLyHj160L17d/785z/ndH1m66OyiZKX3jKQlC9pbnLcXdIdVdTv7ZJ6JccFkj6UNDP5KfNPNUldJE2RNE/SbEkn5Djew5LaVkXsZhtq6dKl/PCHP8x4Lj1JKr30NmDAACRl/Jk4cWJxu1mzZnHUUUex9dZb07hxYw488EBeeeWVCuNatWoVo0eP5qSTTipRXjqxANhll11o1aoVH3/8cXHZc889x3fffccpp5xSou4pp5zCnDlzyizVffDBBwwZMoQ///nPbLHFFhlj+u6772jevHmJsq222gpIJZW5ynQt++yzD0CJaxk/fjxbbLEFJ5zw/R81DRo04MQTT+S5555j1apVJfp49dVXGT16NHfddVfGcdesWcPatWsrfS0nnngiY8aMYeXKlTlcndnG5USpAhFRGBEXbWg/krYB9ouI9MX+yyOiS/IzM0OzFcBpEbEX0Be4XdJWOQx7N3DF+kdtVnV69OjB/fffz6233sq7775b6Xa//e1vmTJlSomfAw88sHjfEMD06dM54IADWLp0Kffeey+PPfYY2267Lb1792batGnl9j916lSWLVtGz549K4xl/vz5LFmyhD333LO4bN68eTRs2JDdd9+9RN299toLgLfeeqtE+bnnnstxxx1Hr169so5z3nnnMXr0aJ544gm++uor/v3vf3Peeeex4447lkhiNsSkSZMAylxLmzZtaNKkSZlr+e6773j//feLy1avXs3ZZ5/N5ZdfXubaizRr1oxTTz2VO+64g5dffplvvvmGefPmcfnll9O5c2cOO+ywEvV79erFV199xZQpU6rkGs2qQrUlSskszXxJ9yYzJM9Lapycmyipe3LcUtKC5HiApMclPZnMvlwg6TeSZkiamiQfRe1vl/SapLmSekiqJ+k9Sa2SOvUkvS+pZam4Dkqb1ZkhqVmp8wdLeio5/oGk+yTNSWZ4fpGU90lmfqZLGivpB5R1HPBshvKsIuLdiHgvOV4MLAFK/NNQUgNJb0o6OHl9i6QhyelXgN6S/GBRq3EjRoxg991354orrqB9+/a0bNmSfv368fzzz5fbbrfddmO//fYr/vnXv/7FlClTGDNmDLvuuisAl19+OTvvvDMvvfQSxx13HEcccQTjxo1j11135cYbbyy3/6lTpyKJH/3oR+XWW7NmDeeccw6tWrXizDPPLC5funQpW221FZJK1N9mm22KzxcZPXo0hYWF3HrrreWOdcMNN3DllVfy85//nBYtWrDbbrsxb948Jk6cWNzvhvj6668ZOHAge+65J8ccc0yJa9l6663L1M90LcOGDWPVqlVceeWV5Y513333ceyxx3LooYfSrFkzOnbsyOrVq3nhhRfYcsstS9Tt3Lkz9erVY+rUqRtyeWZVqrpnlNoCdyUzJMuAX1SiTUfgJKAHMARYERF7A1OA09LqNY2IA4DzgFERsQ4YDZycnO8NzIqIz0v1fxlwfkR0AXoC5c35/hZYHhGdIuJHwEtJ4nUN0DsiugKFwG8ytD0QKP1P2yFJwnWbpHJ3rUrqAWwJfJBeHhFrgAHA3ZJ+Qmrm6frk3DrgfaBzlj7PllQoqXDtiuXlDW+2wdq1a8eMGTOYNGkSV199NV26dGHcuHEcfvjh3HTTTZXq48knn+T//u//GDZsWPFf8CtXrmTSpEn88pe/pF69eqxZs4Y1a9YQEfTu3bvCT2wtXryY5s2bl/lLu7QLLriA1157jdGjR5dIJiKiTJJUVJ5u6dKlXHrppdx8881st9125Y519913c9NNN3HNNdfw8ssvM3bsWJo1a0afPn1YvHhxuW0rsmbNGvr168fHH3/Mww8/XGJvVGWv5f3332fIkCHceeedNGrUqNzxrrnmGkaPHs3w4cOZNGkSDzzwAF988QU//elP+d///lei7hZbbEGLFi02+BrNqlJ1zzR8mLbENA3Ir0SblyPia+BrScuBJ5PyOUD6PwEfAoiIyZKaJ0tUo4AngNuBM4D7MvT/KvAHSWOAf0TEokx/UCR6AycWvYiILyUdCXQAXk3abUkqiSstD/gs7fWVwCdJ/XuA/wNuyDSopDzgAaB/kvyUEBHzJD1A6nezf0R8l3Z6CbADZZM0IuKeZGwa5rX1rn7b6OrXr0+vXr2Kl50WL15M3759uf766zn//PMzzmYUmTVrFieddBJnnnkml112WXH50qVLWbt2LTfeeGPW2aPyNot/++23FX667sorr+See+7h/vvvp0+fPiXObbPNNnz55Zdlkowvv/yy+DykEobtt9+e448/nmXLlhWPDbB8+XIaNWpE06ZNWbp0KZdccgmXX355ic3hhx56KPn5+dx6663cdttt5cabzbp16+jfvz8vvvgiEyZMKDOLts022/Cf//ynTLvS13LRRRdx6KGHst9++xVfy3fffUdEsGzZMho2bEjjxo2ZN28eQ4cOZeTIkSVm4fbdd1/atWvHyJEjufjii0uM1bhxY+9RslqluhOl9J2Aa4HGyfEavp/dKv3Pk/Q269Jer6Nk/KX/oo+I+EjSp5IOBfbl+9ml9EpDJU0AjgCmSuoNfJslfmUYR8ALEdEvS5siK0m7toj4b3K4StJ9pGa2yg4oNQcmANdERHnz0Z1IzdJtX6q8EeXPkpnVmB122IFf/epXXHzxxbz33nv06NEjY71PP/2Uo446iv3226/MJ6K22mor6tWrx/nnn89pp52WsX15n6jbdtttixOBTIYMGcLQoUO54447OPXUU8uc32uvvVi1ahUffPBBib06RXuTOnToUPx6zpw5bLvttmX6aNmyJUcffTSPP/447777LqtWrSrebF1km222YbfddmP+/PlZY63IOeecwyOPPMKjjz5aZn9Q0bWMGzeOFStWlNin9NZbb7HlllsWX99bb73FwoULMya2W2+9NRdffDG33347c+bMAShzLW3btmWrrbbKeC1Lly6lZcuWZcrNakpt2buyAOgGvEFqL8/6OAF4WdKPSS2PFa0ljSS1BPdARKwt3UjSbhExB5gjaX9gDyDTxmqA54ELgIFJ262BqcBdknaPiPclNQF2jIjSu1XnA7sDE5O2eRHxX6X+CXoMMDdDbFsC44C/RcTYbBcu6efAtkAv4ClJPSJiWXK6HTAvW1uz6vLRRx+VePZQkbfffhsgrTe+NAAAFTtJREFU6yfivv32W44++miaNm3K2LFjSywVATRt2pSePXsya9YsunbtmvNjBvbYYw9Wr17NokWLyjyf6I477uCaa65hyJAhXHjhhRnb9+3bly233JIxY8YwePDg4vLRo0fTsWNH2rRpA8Dtt99ePPtSpKCggPvvv58XX3yR7bffvsTv4Y033uCoo44qrrt06VLef/99unbtmtP1Fbn00ksZOXIk999/f4l9SemOOuooBg8ezNixY+nfvz+QWqp75JFH6NOnT/HM28MPP1w8G1Zk6NChTJs2jbFjxxb/HtOvJX326t1332XZsmW0bt26RB+ffPIJ3377Le3bt1+vazTbGGpLojQc+LukU4GX1rOPLyW9BjQntcxWZDypJbdMy24AAyUdQmqG6y3gGVLLZJncRCopmpvUvz4i/iFpAPBQ2j6ja4DSidIE4NekEjeAMclGc5FKzM6B1OMIgHMi4lfA8aSSn22TMQAGpH9CLtkjNRQ4LJlBuxP4I9Bf0vbAyrTZK7Ma07FjRw455BCOPfZY2rRpw1dffcXTTz/NiBEjOP7444s/wVbawIEDmT59OgUFBcVJVZEOHTrQvHlz/vCHP9CrVy8OP/xwzjzzTPLy8vj888+ZPn06a9euZejQoVnjKloGfOONN0okSg8//DADBw6kb9++HHrooSU2GDdv3rx4pmi77bbjkksu4ZZbbqFZs2Z07dqVRx55hJdeeoknnniiuE2mhzUWPd7goIMOKk4A8/PzOfLII7n11lupV68eBx10EF988QW/+93vWLVqFeeee26J9occcgj33XcfAwYMyHqNw4YN4w9/+ANnnHEGbdu2LXEtrVq1YrfddiuO8YQTTmDgwIGsXr2aNm3acPfdd/Phhx8yZsyY4jb77bdfmTEKCgpo2LAhBx98cHFZz5496dy5M5deeilffvll8QMnb7rpJlq0aFGcjBV5/fXXAcr9RKBZdasTD5yUNBG4LCIKM5zrDtwWERV/9ncjk/Qv4Mi02Z6NPd4lwFcR8deK6vqBk5uuTeWBkyNGjODpp59m1qxZfPrpp9SvX5927drRr18/Bg4cWLyZuqCggNNPP50PP/yQ/Px8Dj744OKPspf28ssvF//FPH/+fK6//npeeuklli9fTqtWrejatSvnnHNOxqdjp9t3333p0KED9933/b+nBgwYwP3335+x/kEHHVTiGU5r167llltu4d577+WTTz6hffv2XHvttRx3XPkT5Ndddx3XX399mQdOrlixgt///vc89NBDLFy4kObNm9O1a1cGDx5cYnlywoQJHHnkkTzzzDP07ds36zjl/Q779+9PQUFB8euVK1dy9dVX8+CDD7Js2TI6d+7MsGHDSiRAmQwYMKDMAycBvvjiC26++WbGjx/PokWLaNmyJQcccAA33HBDmZmjs846ixkzZlBYWOaPcrMqp83pydzZEiVJg4BzgZMj4l81EVupePYlNcOzfl/YlPt4p5NaclxTUV0nSpuuTSVRqs0KCgq4+OKL+e9//1vmGUK12VVXXcX48eOZM2dOxk+rbUq+/fZb8vLyGD58eImN32YbS2UTpTrxwMmIODjTbFJEDI2IXWpDkgQQEa9XV5KUjHdfZZIks83dqaeeSuvWrTe5r86YNGkSV1111SafJAH85S9/YbvttiuzHGdW02rLHiUzsxpTv359Ro0axfTp02s6lJy8+uqrNR1ClWnYsCEFBQVlNuub1bQ6sfRmG85Lb5suL72ZmeWusktvTt0NgE6tW1Dov3DNzMxKqBN7lMzMzMw2BidK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\n", "text/plain": [ "<Figure size 576x576 with 3 Axes>" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], "source": [ + "plot_order = ['pystencils', 'Cython', 'numba', 'numpy slice', 'numpy roll', 'pure Python']\n", + "plot_order = [p for p in plot_order if p in all_implementations]\n", + "\n", "def bar_plot(*shape):\n", - " names = tuple(all_implementations.keys())\n", + " names = plot_order\n", " runtimes = tuple(do_benchmark(all_implementations[name], shape) for name in names)\n", " for runtime, name in zip(runtimes, names):\n", - " assert runtime >= runtimes[names.index('pystencils')], runtimes\n", + " # assert that pystencils is the fastest\n", + " # if some change degrades performance of pystencils, we see this automatically in CI system\n", + " assert runtime >= runtimes[names.index('pystencils')], \"pystencils is slower than \" + name\n", " speedups = tuple(runtime / min(runtimes) for runtime in runtimes)\n", " y_pos = np.arange(len(names))\n", " labels = tuple(f\"{name} ({round(speedup, 1)} x)\" for name, speedup in zip(names, speedups))\n", @@ -219,22 +246,22 @@ " plt.xlabel('Runtime of single iteration')\n", " \n", "plt.figure(figsize=(8, 8))\n", - " \n", + "\n", "plt.subplot(3, 1, 1)\n", - "bar_plot(16, 16)\n", + "bar_plot(32, 32)\n", "\n", "plt.subplot(3, 1, 2)\n", "bar_plot(128, 128)\n", "\n", "plt.subplot(3, 1, 3)\n", - "bar_plot(1024, 1024)" + "bar_plot(2048, 2048)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "All runtimes are plotted logarithmically. Next number next to the labels shows how much slower the version is than the fastest one. For small arrays Cython produces faster code than *pystencils*. The larger the arrays, the better pystencils gets." + "All runtimes are plotted logarithmically. Numbers next to the labels show how much slower the version is than the fastest one." ] } ], @@ -254,7 +281,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.5" + "version": "3.6.6" } }, "nbformat": 4,