From 27e3d1170c957cb5f719921ee19e60d98916558d Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Wed, 30 Mar 2022 18:35:04 +0200 Subject: [PATCH 01/30] add raw version of the notebook --- docs/intro_pymc_codebase.ipynb | 3358 ++++++++++++++++++++++++++++++++ 1 file changed, 3358 insertions(+) create mode 100644 docs/intro_pymc_codebase.ipynb diff --git a/docs/intro_pymc_codebase.ipynb b/docs/intro_pymc_codebase.ipynb new file mode 100644 index 0000000000..8dd084ffd7 --- /dev/null +++ b/docs/intro_pymc_codebase.ipynb @@ -0,0 +1,3358 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "JUC0Xac4JTNS" + }, + "source": [ + "# Intro to PyMC codebase\n", + "\n", + "Tags: Aesara, AePPL, PyMC, RandomVariable, Distribution, Model, logp\n", + "\n", + "**Authors:** [Ricardo Vieira](https://github.com/ricardoV94) and [Juan Orduz](https://juanitorduz.github.io/)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9SBUpHzxJs8s" + }, + "source": [ + "![image.png](data:image/png;base64,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PY2xFRIgARLwQwI+LbBWrlwp/fv3l1atWkl8fLwfDp81bnnevHkyePDgTAssiOVnn31WmjdvLgEBAda4OT/rBbgvXrxYx4ECy88Gn7dLAiTgVgI+LbDwYXDrrbfKqFGjKLDc+likr7GXXnopfSekcnTLli3l/fffl6CgoFSO4i5PEQgMDJRBgwZR4HoKMNslARLwGwI+LbAwSqanAx8MNO8TSEhIcOuHMcYTY8nx9P5Ymlek9zDr2PPKJEAC9iFAVWKfseSdkAAJkAAJkAAJWIQABZZFBoLdIAESIAESIAESsA8BCiz7jCXvhARIgARIgARIwCIEKLAsMhDsBgmQAAmQAAmQgH0IUGDZZyx5JyRAAiRAAiRAAhYhQIFlkYFgN0iABEiABEiABOxDgALLPmPJOyEBEiABEiABErAIAQosiwwEu0ECJEACJEACJGAfAhRY9hlL3gkJkAAJkAAJkIBFCFBgWWQg2A0SIAESIAESIAH7EKDAss9Y8k5IgARIgARIgAQsQoACyyIDwW6QAAmQAAmQAAnYhwAFln3GkndCAiRAAiRAAiRgEQIUWBYZCHaDBEiABEiABEjAPgQosNw0lvv27ZPXXntNbr75Zrnxxhule/fusmTJEklISHBc4Z133pHXX39dNm3alOSq8fHx8vbbb2sbO3bscOy/cuWKzJkzRx544AGpXr26NGjQQF566SXZvXt3kjbsuiE6OlpGjRolzZs3l1q1asn9998vs2fPlkuXLjluGfzAylOGMXvjjTdkxIgRcvny5SSXWbVqle4fM2ZMmvuB/qLfsFOnTum4bt68OUnbmdkwbtw4+eabbzLTBM8lARIgARLIAAEKrAxAcz1lz549csMNN8iGDRvksccekyeffFI/ZOvXry9Tp051HP7qq6/KW2+9Jb/88otrE7J+/XoZMGCA7j99+rTuRxv40L799tulcOHC0rt3b+nSpYts3LhRSpcuLStWrEjSjt02nD9/Xh566CEZP368tGnTRhlUqFBBWrVqJe+++65DoAwZMkTZe8oggN5880159tln5eDBg0kuM336dN3/77//OvqU5CCnDRjbHj16yOeff65bL168KBMnTpQLFy6kdlq6961Zs0a2bNmS7vN4AgmQAAmQQOYIZMvc6TwbBObOnSsBAQHy1VdfSWRkpELBh32+fPnUK3XPPfdISEiIbg8MDBR4snr16iXh4eG6Dfbnn386fjZ/WLhwoZ4PcdGhQwcJCgrSXR07dpSnn35axRY8J2jTrrZy5UqZNWuWenYqVqyotwmvDzxZEF5du3aVggULqhh19mh5kgc8k6VKlXJcAh42COH0GMYM/XX2cKbnfJyHZ45GAiRAAiRgTQL2/WT2Em980B05ckSKFSuWSDAFBwfLww8/rCIoJibG0Zu2bdtKVFSUrFu3zrENXprff/9dXn75Zce22NhY+fbbb6Vhw4aCc0xxhQNy5MihnhyEzE6cOOGlO82ayxw7dkzvPWfOnI4OQJzAqzd06FA5d+6cwHv12WefKcMHH3xQt0GEzZ8/X+68804VIgixQqyZ9txzz6n3aNiwYbq/bNmy8tNPP6XqfQoLC5P//e9/8t577yUSRvAS4Tno1q1bIkjwRA4aNEhy5cql1/joo48c3km088MPP6gXDl4xUyxt27ZNOnfurL8jHLx06VJHm3FxcfpMwJsJBhDua9eudeyHyMQ9NG7cWNDXL7/80nE9HAQhOHjwYG0bL4h0PLs0EiABEiAB9xOgwMokU3xQVatWTT1JED2//vqr7Nq1SyCasP2ZZ56RPHnyOK5yxx13yC233KLHmYZ8KuQUQTCZhvPh1cKHaPbs2ZP0snbt2jJ8+HDJnz9/kn122lCpUiX1TkGETJ48WSBAIFzA9MUXX5QyZcpI69at5dZbb9UcNXgG4S2E2MK2du3ayd9//y3ly5eXOnXqaHgV9s8//6j3CwIOnBHWRW4XvGUpGUQbxmP58uXaD9MwdvA05s2b17EN3qlHH31Uj0WYGGFh5JEhTIz7gcCCgELf27dv7xBs+Bmh5b/++kv7e9NNN8nRo0e1XeR/vfDCC9oOwsPw4tWsWdORt/X999/rPUBk/vzzz9oGBJlpEHPYhnPRLwhRiPeMetEcDfMHEiABEiCBJAQYIkyCJP0bWrZsKRMmTFCBNXLkSG2gUaNG+gEPr0bRokUTNYoQ3yuvvKKiAd4NfNhDXJkhMByMD2EItapVq6a/QzY6o3LlyiqQ+vbtq0IEBuFRt25deeqpp6RGjRoqrMqVK6chN4hX5DN16tRJPvnkE3n88cf1HIiZP/74Q2bMmCFVqlTRbRC7yJtCqBZjhckFGMcWLVpIaGioHuNsECLI/0IuGLxj+Nn0CqGPEHWmIRcLeVmY/ADvJgyeyyZNmkifPn3Uy/T1118L7g9eykOHDukx8DDhvmB4biCm0AY8mvCcQWRBRMHwbEAwwns3cOBA+eCDD1R09+zZU/dDhDt77fAlAEITogxeQeT7QWiBFzxeNBIgARIgAfcRoAfLDSyzZcumeVEItyChGLP+8KH56aefCsQXEqRNgxekXr16GtrBsfjgRBgJH4rJeRLMhHfXbkKAnTlzRs+3u0GsLl68WGdOIi8NXpdFixapUHD2JJn8IEgQOoV3CmE4vKZNmya5c+dW5ubMvbvvvjtRWBfepHnz5qngSMkQqoQwmzRpkrKHNwjiDmLHvD68mggbQjAvWLDA0QdzhiCEc0oG4WiambeHsYaQgwjDPZsGEQiBuX//fvVyQUzddtttjv3wbkJwmgZh9vHHH6uoQ3gUyfoIoVJcpTQa3E4CJEACGSdAgZVxdnom8mIwNR/T+PHBCq8GvFHID8KsMORabd260I5AhQAAIABJREFUNdFVChQooJ4tfJjjPAgH5w9WHIwPT3xYwlOSnMHzAO8XzrWzQchAsMJKliypZTD69evnmImJhHNXMwUSvDT4GS+EXBGyQ4jPzHdynRyA3DaI5OSErnkNiB14nxBWhFBCzhPahHgzDe0fOHBAIiIitKSD2QcIGYTsihQp4tplx+/O4WTngxDOg5miy9yH/uB6pmg0783c73yPCEvieezfv7/8+OOP6tWD6IJ4o5EACZAACbiXAAVWJnniwxjhvilTpiRpqVChQkm2mRvuu+8+h1CA2ILocjZ82MOjApGGEg7Ohg9VzFjEhzrKNdjZIK4QJoNAcjbM0IQ5iyFTXJh5aQgdPvLII44XxIuZcI5zUV7DFCb4HV4xHO88u9P5mubPCDEivw7hOHio7r333kSHoU0I5r1792oOmNkHeL4geJzFWHLtJ7cN/YaZ+Vj4GR40eMWQ9I4+4/5wT6aBmVlTDT9DVMEDB6GFUCk8Xr/99luyddmS6wO3kQAJkAAJpJ0ABVbaWSV7JMKD8FahQCjKKSDsAi8IPviQVAxPVIkSJZKcizwiGGpfweOFdlwNYUecixlwSIpH6AseLxSkRPgRYa/kznNtx5d/h9cJCdvIL4JgAVv8+/777+ttQejAwAFeI+xH2QbkOY0ePVq9h8ePH1chAVFreoJwDsYNJTZwDnKoIJiaNWuWxEukF3AxzPhE7hNCvUg2dzWEgRGihMcKogh9w4xF9AniGWIQognn47jrGZ4DeJvQBryWOAciCYn/YASRhecFzxyePVwTgspM2sdzCE8rcgSxD2Fr87oZEXzX6y/3kwAJkIC/E0j6qe7vRNJ5//igxAcbQkHwVDgbQkcIYeHDzzSEFGGYcYYZhkhaRuV3mOmNMf+FBwzCCh+ayOVyNiRUO+fXJNppo19wj0gWR74UZuCZhrIKEE2muMHMO3gSwQwhL/yMUCLyoODtgshC/hFyjkxDGQ28TKEB0YTaWskZxgRjbI4N8sJgOMcsIYH9ZqFQhDMRAkbyPMohwOBRQ8gToUMY7g3iGeILghnC0dmjpgcZhm0IDUJUoi14LSGYkNQPkY1kdjyHEOt4ppBjBUMyPp5B9AvhUpSzwLOG6u4Qdzt37lRPKBLfaSRAAiRAAu4lEGB8YPy3lot72053a/hQRNKuOVvseg0gfIYQEj4wrGBISIeXCR9oCFMl57nKaD8hAuAdwwctPhCt4rnC4wOPGvJ54CHKjCGvCYIB3irnul9oEyEuCBDUFIOggcByPcacTGB6ZNA3jMfJkyd1LJzzm+BhQjFYhMu2b9+uM/zcOV4mB/QbQgZ9hdhzzfuC8MOYOtf5So2hObsUeV0QWvCGORv2IyyI5wP7XXOy4MEzJwYgF8w1NI22MJMRMxjhGaP5HwHMasaXRudws/9R4B2TQOYJ0IOVeYaOFuAVMHNl3NisNgXBZveaV6kxQ44RamKlZq6hLogLiKbUhBMSz+FZ8pSh32YYM7lrmLlkye1LbhuEGmYtpmTYj4kWKRkEWXIhzZSO53YSIAESIIGMEWAOVsa48SwfJ4Cwm4Wctz5Ok90nARIgARJwJUAPlisR/u4XBFB01CphVr8AzpskARIgAT8jQIHlZwPO271KwFOhXPIlARIgARIgARBgiJDPAQmQAAmQAAmQAAm4mQAFlpuBsjkSIAESIAESIAESoMDiM0ACJEACJEACJEACbiZAgeVmoGyOBEiABEiABEiABCiw+AyQAAmQAAmQAAmQgJsJUGC5GSibIwESIAESIAESIAEKLD4DJEACJEACJEACJOBmAhRYbgbK5kiABEiABEiABEiAAovPAAmQAAmQAAmQAAm4mQAFlpuBsjkSIAESIAESIAESoMDiM0ACJEACJEACJEACbiZAgeVmoGyOBEiABEiABEiABHx+seczZ87I7t275cqVKxzNLCCQkJAgJ0+edNuVT58+LTt27JCgoCC3tcmG0k4gMDBQjh8/LkWLFk37STySBEiABEggCQGfFlj4cJ86daq+aFlLoHXr1m7pwLfffit40bKWwFdffZW1HeDVSYAESMDHCfi0wOrQoYO0b9/ex4fAHt2H5yOzdtttt9ETmVmIbjo/ICDATS2xGRIgARLwTwI+LbDwIcAPAns9uO4QavYiwrshARIgARLwRQKZdzv44l2zzyRAAiRAAiRAAiTgQQIUWB6Ey6ZJgARIgARIgAT8kwAFln+OO++aBEiABEiABEjAgwQosDwIl02TAAmQAAmQAAn4JwEKLP8cd941CZAACZAACZCABwlQYHkQLpsmARIgARIgARLwTwIUWP457rxrEiABEiABEiABDxKgwPIgXDZNAiRAAiRAAiTgnwQosPxz3HnXJEACJEACJEACHiRAgeVBuGyaBEiABEiABEjAPwlQYPnnuPOuSYAESIAESIAEPEiAAsuDcNk0CZAACZAACZCAfxKgwPLPceddkwAJkAAJkAAJeJAABZYH4bJpEiABEiABEvh/e2cCHlV59fEz2VeyLwTIAoGECIQlLG7QoqhV27orXV1qP21rrdbPtmpt1drPYq3VumGtO1hAqtQFRBS1KvseICSZ7Pu+78t3zjuZYWYyAYozmcm9/9MnD8mde9/l9wb595xzzwEBfRKAwNLnuWPXIAACIAACIAACLiQAgeVCuBgaBEAABEAABEBAnwQgsPR57tg1CIAACIAACICACwlAYLkQLoYGARAAARAAARDQJwEILH2eO3YNAiAAAiAAAiDgQgIQWC6Ei6FBAARAAARAAAT0SQACS5/njl2DAAiAAAiAAAi4kAAElgvhYmgQAAEQAAEQAAF9EoDA0ue5Y9cgAAIgAAIgAAIuJACB5UK4GBoEQAAEQAAEQECfBCCw9Hnu2DUIgAAIgAAIgIALCUBguRAuhgYBEAABEAABENAnAQgsfZ47dg0CIAACIAACIOBCAhBYLoSLoUEABEAABEAABPRJAAJLn+eOXYMACIAACIAACLiQAASWC+FiaBAAARAAARAAAX0S8DiB5eXlcUvS528Gdg0CIKBLAvhvsC6PHZt2AQEfF4z5lYZ85513qKKi4iuNgYdBAARAAAROj0BBQQEFBASc3sN4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)\n", + "\n", + "See [Architecture.md](https://github.com/pymc-devs/pymc/blob/1005d20b3c12d9b9a424c069f6a0f9962d73c41d/ARCHITECTURE.md)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "8_jxfrmDwkLn", + "outputId": "b24046f8-0b21-478f-c376-29924fa2e243" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "('2.5.1', '4.0.0b6')" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import arviz as az\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import scipy.stats\n", + "\n", + "import aesara\n", + "import aesara.tensor as at\n", + "\n", + "import pymc as pm\n", + "\n", + "aesara.__version__, pm.__version__" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ru2m_lFK7Atx" + }, + "source": [ + "# Aesara" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WKPLeI26AHyq" + }, + "source": [ + "![image.png](data:image/png;base64,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)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YXwSyWULHJ81" + }, + "source": [ + "**Source code**\n", + "* [Aesara [rev da86d35197]](https://github.com/aesara-devs/aesara/tree/da86d351979c0a29fc80da16db965551e9e8c14f)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tBEjewdS1s5z" + }, + "source": [ + "## A simple example" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "jApxApHT1rmq" + }, + "outputs": [], + "source": [ + "x = at.scalar(name='x')\n", + "y = at.vector(name='y')\n", + "z = x + y\n", + "z.name = 'x + y'\n", + "w = at.log(z)\n", + "w.name = 'log(x + y)'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "_QZRx-CB24l6", + "outputId": "404e3654-2e91-4090-bb2f-4bb13115abed" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{log,no_inplace} [id A] 'log(x + y)' \n", + " |Elemwise{add,no_inplace} [id B] 'x + y' \n", + " |InplaceDimShuffle{x} [id C] '' \n", + " | |x [id D]\n", + " |y [id E]\n" + ] + } + ], + "source": [ + "aesara.dprint(w)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "-XtR1jZS13_6", + "outputId": "e101c9f0-7640-4fd0-aa6b-f8ba2e226886" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0., 1.])" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f = aesara.function(inputs=[x, y], outputs=w, mode=\"NUMBA\")\n", + "f(x=0, y=[1, np.e]) # keyword arguments only valid for named variables" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "kVSkpSQv2FT1", + "outputId": "a4e0a9f2-355d-4b55-cbcb-4486500b00fb" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0., 1.])" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Sometimes we just want to debug, we can use `eval` for that\n", + "w.eval({x: 0, y:[1, np.e]})" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "U_aOb50o2cK8", + "outputId": "572da92f-153e-4ab5-8ca1-a1bed4e141d7" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0., 1.])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# You can set intermediate values as well\n", + "w.eval({z: [1, np.e]})" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "qqa54LWg4v3W" + }, + "source": [ + "## What is in a Aesara graph" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "KF4146uiMQ-W" + }, + "source": [ + "![image.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAucAAAKKCAYAAACebfVMAAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAZ25vbWUtc2NyZWVuc2hvdO8Dvz4AAAAqdEVYdENyZWF0aW9uIFRpbWUAVGh1IDAzIEZlYiAyMDIyIDE2OjE4OjQyIENFVIQZHmoAACAASURBVHic7N13eBTV/sfx9+xuyqZDCC2EFqogVaQX4QIqiEq1U0QREQuC/MCOgnJBLFexIChNBCkKIh2kIwJSpUiH0Et63d35/RFAQksCJhnh83qe+wczZ858Z88+3s9Mzpw1XC6XiYiIiIiI5DlbXhcgIiIiIiLpFM5FRERERCxC4VxERERExCIUzkVERERELELhXERERETEIhTORUREREQsQuFcRERERMQiFM5FRERERCxC4VxERERExCIUzkVERERELELhXERERETEIhTORUREREQsQuFcRERERMQiFM5FRERERCxC4VxERERExCIUzkVERERELELhXERERETEIhTORUREREQsQuFcRERERMQiFM5FRERERCxC4VxERERExCIUzkVERERELELhXERERETEIhy5eTIzKYq1s6Yya+k6dhw6RYLbl5DwctRs3JoODzaghJ9xvT0TN/91Ov53Lf73DuH7Pnfk7oWJiIiIiPwDci3Dek6u4JOBQ5m9Lwns/oQVL00RrySOH/iDed9sYNmWF/j6vdYUvN58LiIiIiLyL5c74dx9kGmD/8vsfSkEVn6Y/gMeo3YhHwDMpMP89stS4qo1VzAXERERkVtaroTzpHVT+OHPRIzAejzzejdqh/6dwg1nMeq0e/Ti1uxfMpFvp/7Kpn2nSfHOR4kqjWnb+XH+E+lH+pEuTqz9ji+++YXf98fiXaQqDUudwcxwVpOYbT8x5tuZrNp+lHhbEMWrNKXTU51pWsI3Ny5bRERERCRbciGcu9i7cTPRHgOfanfRIPRaj8fdHPrxTV4a+QepRe7k3kdaExL3JwtnT2XYph2c/WgYHUs5SNoymgFvTuWgVwT12txLpP0gq+esx31RT0nbRvPKK1M4lL8WD3brQLhnH0umTuf9/mfx/qI/DUL0mF5ERERErCUXwrlJXHQcJgYB+fPhfa2myeuYPHEj8Y5K9BjyDu3DbYBJs8Iv8+TIrXz//Rpa/9/trPxhNgddvtToNZS3WodhYHJ/RAIPfbD+3ClPs2T8j+x1FaPjwLd4qqIXYNKowCkeHbyMn5Z3p/59BVA8FxEREREryYVwbhAY5I9BPPGnz5AMBFylpTtqBztjPdgiqlK1sO3C8WFVqlDUtpmDf+3gUGoQO/9KxrSXo3rV0AsB22a3X9TRPnbuScX0HGZanzZM/3sHLgzOnDyDhwJcdISIiIiISJ7LhXDuoNTtlQiccYzYPxaw9MRdtLqhNz/duD2AYcfhuFo/Xng5AMdtPDa8D42DLm5nwy+0qIK5iIiIiFhOrvwIkV+d9txf2hsS1jPqnS9ZdTTl752uM2ya9jlfL4nCE16B8sE2PEc2s/mE51wDk5ObN3PEYyOgXEUivItQrIgdwx3Fnv1JF9okxif+3ae9NLdV8MNw72f7ISfFIiKIiIggIqIIIUHBBF/3euoiIiIiIjnHcLlcZubNblzaoTkMGfAJK46lgd2fgiVLEOaTyplDBzga58JZoTPDRzyMc84Anv8s/YXQe5pVJjj+Txb/soYoe2W6fzyMjiXtHJ89kB4frSOlcG3a3n8HIWc3MPunNRxJgaB70n+EyNz9HX36fMMOdyGqNW3M7WFwYstSft3qzQMjvqR7Ra/cuGwRERERkSzLtXAO4InbzZJpU5mzYiO7j0aT5PEhX3gZqt/Vlkfb1aeYL2CeX0pxCRv3nybFKx8lqqYvpdg80j99jrl5hvXjP+LzmeuJSvajWNXmPHx/ED8PGsPBpud/IdQkbtccxn47g+VbDxOd5kW+iMrUa/0one+rRLAenouIiIiIxeRqOBcRERERkavLlTnnIiIiIiKSOYVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi3Dkxkmijh3PjdOIiIiIiOSK8MKFcqTfXAnnAIHhR3Pr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ERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMRkWv4/PPPcTgcFC5cmLi4uAz7zpw5g8PhYPjw4XlUnVzN6NGjcTgchIWFER0dnWFffHw8DoeDIUOG5FF1IiJXp3AuIpIFp06dYsSIEXldhmTT2bNndfMkIv8qCuciIlnQqlUrPvzwQ06ePJml9ikpKWzcuJHNmzeTlpZ22f7ExETi4+MvtP3tt984ePDgVfszTZM9e/awatUqzp49e30XcQtq1aoVn3zyCUePHs1S+9TUVDZt2sSmTZtITU29bP+l47Z27VoOHDhw1f5M02Tv3r2sWrWKM2fOXN9FiMgtReFcRCQLXnvtNTweD++9916mbUePHk1YWBh33HEHNWrUoFChQkyaNClDm6eeeooWLVowZswYQkNDqV+/PqVLl+bRRx/F7XZnaLts2TIiIyMpX748jRo1omDBgvTt2/eKoV8yGjBgADabjcGDB2faduzYsYSFhVGzZk1q1qxJwYIFGT9+fIY2vXr1okmTJowfP57Q0FDq1atHZGQknTp1wuVyZWi7cuVKypUrR7ly5S6M24svvnjF0C8icp7CuYhIFhQuXJjevXvzxRdfXPNJ6S+//EKPHj14+umnOXnyJEePHuWBBx7g8ccfZ9WqVRnabtu2jdGjRzNhwgT27dtHv379mDx5MpMnT77QZufOnbRs2ZJatWqxZMkSjh07xrBhw/jiiy/46KOPcux6bxZhYWG89NJLjB49mj179ly13YIFC3jyySfp0qULJ06c4Pjx43Tq1ImuXbuydOnSDG137drFyJEjGTduHPv372fAgAFMmzaNCRMmXGizZ88eWrRoQZUqVVi0aBHHjh3jww8/ZMyYMZpmIyLXpHAuIpJF/fr1w8/Pj7fffvuqbd555x0qVarEsGHDyJcvH2FhYXz55ZcUL16c999/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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "4gPVMmWK27fZ", + "outputId": "a07d7dd6-aad3-4871-81ca-3894d98b9b22" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "aesara.tensor.var.TensorVariable" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(w)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "4jRF1tMhTAap", + "outputId": "3fe6b40e-58e6-4c17-f76d-646213ba38f5" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "TensorType(float64, (None,))" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y.type" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "71imoPq93U_p", + "outputId": "5c5158bb-4f4d-4188-dba0-20e2bc972696" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "TensorType(float64, (None,))" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w.type" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "UV95InOX3W2z", + "outputId": "047197ff-5c73-429d-d93a-427620c4b215" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Elemwise{log,no_inplace}(x + y)" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "node = w.owner\n", + "node" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "CJVkQ8Ft3aUx", + "outputId": "b1475e72-2738-4f63-bfdc-3b76dbb46e53" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " )" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "node.op, node.op.scalar_op" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "X43k9jaj3abW", + "outputId": "d171c40c-7e79-4642-a49c-2a7190aed405" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[log(x + y)]" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "node.outputs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "US2pqANh3hxk", + "outputId": "0b9ab24c-604c-46df-e635-18458b258143" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[x + y]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "node.inputs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "thLifxKW3ka3", + "outputId": "6c98f77b-922a-4869-bfeb-281b3f29e8dc" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Checking variable log(x + y) of type TensorType(float64, (None,))\n", + " > Op is Elemwise{log,no_inplace}\n", + " > Input 0 is x + y\n", + "\n", + "Checking variable x + y of type TensorType(float64, (None,))\n", + " > Op is Elemwise{add,no_inplace}\n", + " > Input 0 is InplaceDimShuffle{x}.0\n", + " > Input 1 is y\n", + "\n", + "Checking variable InplaceDimShuffle{x}.0 of type TensorType(float64, (1,))\n", + " > Op is InplaceDimShuffle{x}\n", + " > Input 0 is x\n", + "\n", + "Checking variable y of type TensorType(float64, (None,))\n", + " > y is a root variable\n", + "\n", + "Checking variable x of type TensorType(float64, ())\n", + " > x is a root variable\n" + ] + } + ], + "source": [ + "from aesara.tensor.elemwise import Elemwise\n", + "\n", + "stack = [w]\n", + "while stack:\n", + " print('')\n", + " var = stack.pop(0)\n", + " print(f'Checking variable {var} of type {var.type}')\n", + " if var.owner is not None:\n", + " print(f' > Op is {var.owner.op}')\n", + " for i, input in enumerate(var.owner.inputs):\n", + " print(f' > Input {i} is {input}')\n", + " stack.append(input)\n", + " else:\n", + " print(f' > {var} is a root variable')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ltcXsJUQ-NZL", + "outputId": "2c9543a8-1be6-47cb-efc7-1f83187e068b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{log,no_inplace} [id A] 'log(x + y)' \n", + " |Elemwise{add,no_inplace} [id B] 'x + y' \n", + " |InplaceDimShuffle{x} [id C] '' \n", + " | |x [id D]\n", + " |y [id E]\n" + ] + } + ], + "source": [ + "aesara.dprint(w)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dIYxBNT_5HgW" + }, + "source": [ + "## Graph manipulation 101" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Ju11phkn409W", + "outputId": "c7f4e6eb-b136-4e44-c416-82ac1d1cc312" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{log,no_inplace} [id A] 'log(x + y)' \n", + " |Elemwise{add,no_inplace} [id B] 'x + y' \n", + " |InplaceDimShuffle{x} [id C] '' \n", + " | |x [id D]\n", + " |y [id E]\n" + ] + } + ], + "source": [ + "aesara.dprint(w)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "gWj0znupVc02", + "outputId": "edbdd626-2887-4336-f3b4-0f3904e49656" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[x, y]" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(aesara.graph.graph_inputs([w]))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "y7WI_O4e5Gu0", + "outputId": "7d288574-b747-43ff-bfbe-b5ed3357caea" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{log,no_inplace} [id A] 'exp(log(x + y))' \n", + " |Elemwise{exp,no_inplace} [id B] 'exp(x + y)' \n", + " |Elemwise{add,no_inplace} [id C] 'x + y' \n", + " |InplaceDimShuffle{x} [id D] '' \n", + " | |x [id E]\n", + " |y [id F]\n" + ] + } + ], + "source": [ + "# Stupid example, let's add an exp berofe the log\n", + "parent_of_w = w.owner.inputs[0]\n", + "new_parent_of_w = at.exp(parent_of_w)\n", + "new_parent_of_w.name = 'exp(x + y)'\n", + "new_w = aesara.clone_replace(output=[w], replace={parent_of_w: new_parent_of_w})[0]\n", + "new_w.name = \"exp(log(x + y))\"\n", + "aesara.dprint(new_w)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "GK2764ZW6Hs6", + "outputId": "8db79441-9b23-4886-f1fe-ae4857deaefe" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1. , 2.71828183])" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_w.eval({x: 0, y:[1, np.e]})" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JhmIBByY6T9h" + }, + "source": [ + "## Aesara is clever" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "WlDAR8616QsM", + "outputId": "2b9a60b7-d3d6-4605-d6ff-736b5c721318" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/aesara/link/jax/dispatch.py:86: UserWarning: JAX omnistaging couldn't be disabled: Disabling of omnistaging is no longer supported in JAX version 0.2.12 and higher: see https://github.com/google/jax/blob/main/design_notes/omnistaging.md.\n", + " warnings.warn(f\"JAX omnistaging couldn't be disabled: {e}\")\n" + ] + } + ], + "source": [ + "f = aesara.function(inputs=[x, y], outputs=new_w, mode=\"JAX\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "nJBsptYT6O5T", + "outputId": "1f116d61-447b-4e25-a6df-9c0ad2c797ce" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{add,no_inplace} [id A] 'x + y' 1\n", + " |InplaceDimShuffle{x} [id B] '' 0\n", + " | |x [id C]\n", + " |y [id D]\n" + ] + } + ], + "source": [ + "# The useless log(exp(...)) was removed from the final graph\n", + "aesara.dprint(f)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "noKfjvwS65q-", + "outputId": "bed5b895-8c4e-4c0e-95c9-8eefdbbd55fa" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:absl:No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)\n" + ] + }, + { + "data": { + "text/plain": [ + "DeviceArray([1. , 2.71828183], dtype=float64)" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f(x=0, y=[1, np.e])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3drOlTjZxDMF" + }, + "source": [ + "# RandomVariables" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "u844j3e6Dgmo" + }, + "source": [ + "**Source code**\n", + "\n", + "* [Random Module](https://github.com/aesara-devs/aesara/tree/main/aesara/tensor/random)\n", + "* [RandomVariable Op](https://github.com/aesara-devs/aesara/blob/main/aesara/tensor/random/op.py)\n", + "* [Random Variables](https://github.com/aesara-devs/aesara/blob/main/aesara/tensor/random/basic.py)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "THRvGbP1WmhH", + "outputId": "c4f044e6-83c3-4c4c-9ecf-8714efae6f36" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1.3796867203662824" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rng = np.random.default_rng()\n", + "rng.normal()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "o0hVLDiBwqhg" + }, + "outputs": [], + "source": [ + "x = at.random.normal(loc=0.0, scale=1.0, size=None, name='x')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3hQKQ9IGxMW4", + "outputId": "96e4fd79-fd3b-47d6-a9f7-b0e55a33999b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", + " |RandomGeneratorSharedVariable() [id B]\n", + " |TensorConstant{[]} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{0.0} [id E]\n", + " |TensorConstant{1.0} [id F]\n" + ] + } + ], + "source": [ + "aesara.dprint(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "I7Xop7BRM4sI" + }, + "source": [ + "Inputs are always in the following order:\n", + "1. rng shared variable\n", + "2. size\n", + "3. dtype (number code)\n", + "4. arg1\n", + "5. arg2\n", + "6. argn" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "k7spOYvvTdZL" + }, + "source": [ + "## Some meta-properties worth knowing about" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "5F7vC0jUTbq5", + "outputId": "7a74bf24-e3f7-448e-cbaa-0e71b01bb8c8" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(0, (0, 0), 'floatX')" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "op = x.owner.op\n", + "(\n", + " op.ndim_supp, # Dimension of draws (0=scalar, 1=vector, 2=matrix, 3=haha)\n", + " op.ndims_params, # Dimension of each parameter\n", + " op.dtype, # Int64/FloatX\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "qIMN2gHGzKof" + }, + "source": [ + "## RandomVariables use SharedVariables for seeding" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "fq84NPrqxOfn", + "outputId": "999c994c-9a5e-4805-d631-190bff5f69ee" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(-0.41567808)" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x.eval()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "CO2cbtMDxSLI", + "outputId": "578cc827-e0b1-4d23-d040-ca414f7375b9" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(-0.41567808)" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# By default draws don't change between calls\n", + "x.eval()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "0X_A-msDzJaf", + "outputId": "f0939974-627c-462c-bc44-7c70133211c4" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(RandomGeneratorSharedVariable(),\n", + " RandomGeneratorType)" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# This is because the RandomOp is a deterministic operation, given it's inputs\n", + "# One of these inputs is a RandomGenerator/State\n", + "x.owner.inputs[0], x.owner.inputs[0].type" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "8IhwIQ9oxcxN", + "outputId": "a36d59cc-c419-468c-9229-d5010e165cbf" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y' \n", + " |RandomGeneratorSharedVariable() [id B]\n", + " |TensorConstant{(1,) of 2} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{0} [id E]\n", + " |TensorConstant{1} [id F]\n" + ] + } + ], + "source": [ + "# This input is created by default, but can be passed explicitly as well\n", + "rng = np.random.default_rng(seed=123)\n", + "shared_rng = aesara.shared(rng, borrow=True)\n", + "y = at.random.normal(0, 1, rng=shared_rng, size=2, name=\"y\")\n", + "aesara.dprint(y)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "193YxZy2xx_N", + "outputId": "f9f4ed62-c08f-4b0f-877a-7a3111787349" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([-0.98912135, -0.36778665]), array([-0.98912135, -0.36778665]))" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Each draw in the same call is unique, but these again don't change across calls\n", + "y.eval(), y.eval()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "y0XMPhCUx4iJ", + "outputId": "be1bd5e0-acbf-4251-8e99-c0ccd62b9eda" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# We will make the generator advance by one, which will make the draws \"cycle\" by one\n", + "rng.bit_generator.advance(1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "dRLcbgByySdF", + "outputId": "b536e228-306f-4bc5-f50c-674805b0c360" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([-0.36778665, 1.28792526]), array([-0.36778665, 1.28792526]))" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y.eval(), y.eval()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "vtl1x93cyVA9", + "outputId": "25d2372b-b013-4e7b-cdd3-c70326f71556" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# And again\n", + "rng.bit_generator.advance(1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "TqeAbfUPybGI", + "outputId": "bf343da1-0736-4e4a-80b9-67ebe83adb66" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([1.28792526, 0.19397442]), array([1.28792526, 0.19397442]))" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Now the draws are completely different than the initial ones\n", + "y.eval(), y.eval()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aMM0sJy6z7Ur" + }, + "source": [ + "## Updating the RandomState manually is cumbersome\n", + "\n", + "So RandomVariables do it for us" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "YwmH0DJ40bTj", + "outputId": "a9ccd2a6-7d76-49e1-d0ce-c594739f91ea" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[normal_rv{0, (0, 0), floatX, False}.0, z]" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rng = np.random.default_rng(seed=123)\n", + "shared_rng = aesara.shared(rng, borrow=True)\n", + "z = at.random.normal(0, 1, rng=shared_rng, name=\"z\")\n", + "\n", + "# Notice that there are 2 outputs\n", + "z.owner.outputs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "SAIGub1C7gPN", + "outputId": "2e1246c4-ef8f-4056-c056-1a5e6c52a402" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normal_rv{0, (0, 0), floatX, False}.0 [id A] '' \n", + " |RandomGeneratorSharedVariable() [id B]\n", + " |TensorConstant{[]} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{0} [id E]\n", + " |TensorConstant{1} [id F]\n", + "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z' \n" + ] + } + ], + "source": [ + "aesara.dprint(z.owner.outputs)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "RmbkBxYbxY1r", + "outputId": "1a5ebe21-42d7-4e37-b38a-fa57545c0dc0" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "RandomGeneratorType" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "next_rng = x.owner.outputs[0]\n", + "next_rng.type" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "XMRJpNvG00eT", + "outputId": "b4188341-865b-437e-ad27-72fbbe6bd6fc" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(array(-0.98912135), array(-0.98912135))" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "z.eval(), z.eval()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ffNFDcu6z5Sk", + "outputId": "0f0d95b8-313a-46bd-fd57-2697f5b762e1" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Generator(PCG64) at 0x7F7B2114F410" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "next_rng_value = next_rng.eval()\n", + "next_rng_value" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "a_emRwwl0uiR" + }, + "outputs": [], + "source": [ + "# We can set the input RNG to the next RNG state returned by the RandomVariable\n", + "shared_rng.set_value(next_rng_value)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "C-Gu-EdQ0_Hj", + "outputId": "39d63314-18d0-40aa-c441-b7792db58cf2" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(array(-0.95422551), array(-0.95422551))" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "z.eval(), z.eval()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WY6bUgqZztC3" + }, + "source": [ + "## Almost there\n", + "\n", + "The final step is to make use of default_updates in shared variables" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ZCSTHK4fzpYB" + }, + "outputs": [], + "source": [ + "rng = np.random.default_rng(seed=123)\n", + "shared_rng = aesara.shared(rng, borrow=True)\n", + "w = at.random.normal(0, 1, rng=shared_rng, name=\"w\")\n", + "next_rng = w.owner.outputs[0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "42jYYcrn77wJ" + }, + "outputs": [], + "source": [ + "# We set a symbolic update. Every time the function is called, the value of rng shared\n", + "# variable is set to the first output (the next rng state) of the random variable\n", + "shared_rng.default_update = next_rng" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "YgSF80agyiqs", + "outputId": "116bdc4e-5594-4fef-d238-353feeefa2c8" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(array(-0.98912135), array(-0.36778665))" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w.eval(), w.eval()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "58gng2f17_P7" + }, + "source": [ + "## Graph manipulation 102\n", + "\n", + "Replacing `sum(bernoulli(p, size))` by `binomial(size, p)`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "qQzMa8rB8ymo" + }, + "outputs": [], + "source": [ + "p = at.scalar('p')\n", + "rng = aesara.shared(np.random.default_rng(0))\n", + "b = at.random.bernoulli(p, size=10, rng=rng)\n", + "bs = at.sum(b)\n", + "nbs = -bs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "mHDj8mYy9UKM", + "outputId": "d36b548d-5cfc-47fa-cc1b-85e1d55bab78" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{neg,no_inplace} [id A] '' \n", + " |Sum{acc_dtype=int64} [id B] '' \n", + " |bernoulli_rv{0, (0,), int64, False}.1 [id C] '' \n", + " |RandomGeneratorSharedVariable() [id D]\n", + " |TensorConstant{(1,) of 10} [id E]\n", + " |TensorConstant{4} [id F]\n", + " |p [id G]\n" + ] + } + ], + "source": [ + "aesara.dprint(nbs)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3nLdG-Q09Q1s", + "outputId": "a843e177-4e99-473b-e179-4a970f7a4ce8" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "-8" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "-bs.eval({p: 0.9})" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EtCPKZwK1WIP" + }, + "outputs": [], + "source": [ + "from aesara.graph import FunctionGraph\n", + "from aesara.graph.opt import in2out, local_optimizer\n", + "from aesara.tensor.math import Sum\n", + "from aesara.tensor.random.basic import BernoulliRV" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "gOPPTnc5LTHl" + }, + "outputs": [], + "source": [ + "@local_optimizer(tracks=None)\n", + "def local_sum_bernoulli_to_binomial(fgraph, node):\n", + " \"\"\"This local rewrite replaces a sum(bern(p=p, size=size)) by binom(n=size, p=p)\"\"\"\n", + "\n", + " # Check we have a Sum node with axis = None\n", + " if isinstance(node.op, Sum) and node.op.axis is None:\n", + " # Check input is a bernoulli variable\n", + " bern = node.inputs[0]\n", + " if bern.owner is not None and isinstance(bern.owner.op, BernoulliRV):\n", + " # Check that size and p are scalar\n", + " rng, size, dtype, p = bern.owner.inputs\n", + " if at.get_vector_length(size) == 1 and p.ndim == 0:\n", + " # Return binomial as replacement\n", + " binom = at.random.binomial(size[0], p, rng=rng, dtype=dtype)\n", + " return [binom]\n", + "\n", + " return None" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1UmbdW8u8i-z" + }, + "outputs": [], + "source": [ + "my_optimizer = in2out(local_sum_bernoulli_to_binomial)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ZuE6H5jY9p-C", + "outputId": "4d2eb9a9-10bd-43ff-bea3-28ecfc39032b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{neg,no_inplace} [id A] '' 2\n", + " |Sum{acc_dtype=int64} [id B] '' 1\n", + " |bernoulli_rv{0, (0,), int64, False}.1 [id C] '' 0\n", + " |RandomGeneratorSharedVariable() [id D]\n", + " |TensorConstant{(1,) of 10} [id E]\n", + " |TensorConstant{4} [id F]\n", + " |p [id G]\n" + ] + } + ], + "source": [ + "fgraph = FunctionGraph(outputs=[nbs], clone=False)\n", + "aesara.dprint(fgraph)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ENHC2fnu8jyr", + "outputId": "d4989c32-6a2c-4a32-9f58-579cca79eff2" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " 1,\n", + " 3,\n", + " 3,\n", + " 5.555152893066406e-05,\n", + " 0.017687320709228516,\n", + " 6.866455078125e-05,\n", + " FromFunctionLocalOptimizer(, None, ()))" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "my_optimizer.optimize(fgraph)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "6dqyvS8x8rBF", + "outputId": "8ee1e8f4-2c4e-4b05-fb0b-7a04f3b231be" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{neg,no_inplace} [id A] '' 2\n", + " |binomial_rv{0, (0, 0), int64, False}.1 [id B] '' 1\n", + " |RandomGeneratorSharedVariable() [id C]\n", + " |TensorConstant{[]} [id D]\n", + " |TensorConstant{4} [id E]\n", + " |Subtensor{int64} [id F] '' 0\n", + " | |TensorConstant{(1,) of 10} [id G]\n", + " | |ScalarConstant{0} [id H]\n", + " |p [id I]\n" + ] + } + ], + "source": [ + "aesara.dprint(fgraph)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "YIXLSKkF_QPL", + "outputId": "166acb34-683b-4478-9b7e-fe6fb2d9d837" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(-9)" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Binomial and bernoulli do not have the same draws, given the same seed, so the results can vary\n", + "# The seed was chosen to illustrate this!\n", + "fgraph.outputs[0].eval({p: 0.9})" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Zkqw774ThP93" + }, + "source": [ + "# PyMC" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cQITtCM_BrdO" + }, + "source": [ + "![image.png](data:image/png;base64,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)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "C8Us4nEyhRdu" + }, + "source": [ + "## Distributions are just RandomVariables" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oTu9tX3FEB1a" + }, + "source": [ + "**Source code**\n", + "* [PyMC [rev 1005d20b3c]](https://github.com/pymc-devs/pymc/tree/1005d20b3c12d9b9a424c069f6a0f9962d73c41d)\n", + "* [Distributions module](https://github.com/pymc-devs/pymc/tree/main/pymc/distributions)\n", + "* [Distribution class](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/distribution.py)\n", + " * See issue [#5308](https://github.com/pymc-devs/pymc/issues/5308)\n", + "* [Discrete distributions](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/discrete.py)\n", + "* [Continuous distributions](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/continuous.py)\n", + "* [Multivariate distributions](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/multivariate.py)\n", + "\n", + "**Guide**\n", + "* [Distribution developer guide](https://github.com/pymc-devs/pymc/blob/1005d20b3c12d9b9a424c069f6a0f9962d73c41d/docs/source/contributing/developer_guide_implementing_distribution.md)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "pe6Xw7ZzHGCu", + "outputId": "6560af03-5c86-44e4-bc27-dd09cfb042ea" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normal_rv{0, (0, 0), floatX, False}.1 [id A] '' \n", + " |RandomGeneratorSharedVariable() [id B]\n", + " |TensorConstant{(1,) of 3} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{0} [id E]\n", + " |TensorConstant{0.7071067811865476} [id F]\n" + ] + } + ], + "source": [ + "x = pm.Normal.dist(mu=0, tau=2, shape=3)\n", + "aesara.dprint(x)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "xRe_Wsx3hYcG", + "outputId": "9cdcf230-abf2-4605-837d-0c0f5835e1ca" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([-0.11210433, -0.52728513, -0.43059087]),\n", + " array([-0.11210433, -0.52728513, -0.43059087]))" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x.eval(), x.eval()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "uPaiNiybhgwT", + "outputId": "0b937cf8-262b-40cf-996e-bc662e88653f" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", + " |RandomStateSharedVariable() [id B]\n", + " |TensorConstant{(1,) of 2} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{(2,) of 0} [id E]\n", + " |TensorConstant{[1. ...70710678]} [id F]\n" + ] + } + ], + "source": [ + "with pm.Model() as model:\n", + " x = pm.Normal(\"x\", mu=np.array([0, 0]), tau=np.array([1, 2]), size=2)\n", + "aesara.dprint(x)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Z-MupoZhhqE_", + "outputId": "8b1dc63a-0fa6-4ca7-bba4-9b6008114bb5" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([-0.4887986 , -0.92142803]), array([-0.62660694, 0.97699245]))" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Variables are already seeded, but we might change this behavior in the future\n", + "x.eval(), x.eval()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "QqvTnWXMhvW5", + "outputId": "aed259f2-7e33-4dc4-f954-46c73e0c14c2" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/IPython/core/interactiveshell.py:2882: FutureWarning: arrays to stack must be passed as a \"sequence\" type such as list or tuple. Support for non-sequence iterables such as generators is deprecated as of NumPy 1.16 and will raise an error in the future.\n", + " exec(code_obj, self.user_global_ns, self.user_ns)\n" + ] + }, + { + "data": { + "text/plain": [ + "array([[ 2.12975761, 0.50227889],\n", + " [-0.49816661, -0.06358336]])" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The CORRECT way to draw values is to use `pm.draw`\n", + "pm.draw(x, draws=2)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wkZR0gDWRAgK" + }, + "source": [ + "## What is going on behind the scenes?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YHWznAnCE8a1" + }, + "source": [ + "**Source code**\n", + "* [Model module](https://github.com/pymc-devs/pymc/blob/main/pymc/model.py)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "23JVxTUjRHDy", + "outputId": "cc39c67b-ed0d-4ad7-c485-5ae6b0b5d0df" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[x]" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.basic_RVs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "jYgwMOzpRcmo", + "outputId": "3178ac69-3666-4464-d6d2-dbaacfc51170" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", + " |RandomStateSharedVariable() [id B]\n", + " |TensorConstant{(1,) of 2} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{(2,) of 0} [id E]\n", + " |TensorConstant{[1. ...70710678]} [id F]\n" + ] + } + ], + "source": [ + "aesara.dprint(model.basic_RVs[0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "8uPz7gDWQ_6k", + "outputId": "a6e5f1be-93c5-4afa-ead6-9827edb7cbe0" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{my_x: my_x}" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Manual variable registration\n", + "with pm.Model() as model:\n", + " # my_x = pm.Normal(\"x\", 0, tau=5)\n", + " my_x = pm.Normal.dist(0, 1)\n", + " model.register_rv(\n", + " rv_var=my_x,\n", + " name=\"my_x\",\n", + " data=None,\n", + " total_size=None,\n", + " dims=None,\n", + " transform=None,\n", + " initval=\"prior\",\n", + " )\n", + "model.rvs_to_values" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wPw9kCvASOeJ" + }, + "source": [ + "## Enough with Random Variables, I want to see some (log)probabilities!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CVj2ZrbHFKmr" + }, + "source": [ + "**Source code**\n", + "* [PyMC logprob](https://github.com/pymc-devs/pymc/blob/1005d20b3c12d9b9a424c069f6a0f9962d73c41d/pymc/distributions/logprob.py)\n", + "* [Aeppl logprob](https://github.com/aesara-devs/aeppl/blob/2019114d231d8d3d96acc284fe0e6ee42d89c912/aeppl/logprob.py)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "mgntEABvQyhu", + "outputId": "319b8e86-388a-4ca5-bd3e-c27a24dd306c" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'my_x': array(-0.69378353)}" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "point = model.compute_initial_point()\n", + "point" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "d3MpBiUlSVGT", + "outputId": "bdf43dff-e5b5-4699-b0b5-b8d0602b2064" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "my_x -1.16\n", + "Name: Point log-probability, dtype: float64" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.point_logps(point)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bAf_AM1FSbf-" + }, + "outputs": [], + "source": [ + "from aeppl.logprob import _logprob" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "5omppW4-StBp", + "outputId": "8a55d79a-6548-4329-80f0-e59b30123067" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "mappingproxy({aeppl.cumsum.MeasurableCumsum: ,\n", + " aeppl.mixture.MixtureRV: ,\n", + " aeppl.scan.MeasurableScan: ,\n", + " aeppl.truncation.CensoredRV: ,\n", + " aesara.tensor.random.basic.BernoulliRV: .logp>,\n", + " aesara.tensor.random.basic.BetaBinomialRV: .logp>,\n", + " aesara.tensor.random.basic.BetaRV: ,\n", + " aesara.tensor.random.basic.BinomialRV: .logp>,\n", + " aesara.tensor.random.basic.CategoricalRV: .logp>,\n", + " aesara.tensor.random.basic.CauchyRV: ,\n", + " aesara.tensor.random.basic.ChiSquareRV: ,\n", + " aesara.tensor.random.basic.DirichletRV: .logp>,\n", + " aesara.tensor.random.basic.ExponentialRV: ,\n", + " aesara.tensor.random.basic.GammaRV: ,\n", + " aesara.tensor.random.basic.GeometricRV: .logp>,\n", + " aesara.tensor.random.basic.GumbelRV: ,\n", + " aesara.tensor.random.basic.HalfCauchyRV: ,\n", + " aesara.tensor.random.basic.HalfNormalRV: ,\n", + " aesara.tensor.random.basic.HyperGeometricRV: .logp>,\n", + " aesara.tensor.random.basic.InvGammaRV: ,\n", + " aesara.tensor.random.basic.LaplaceRV: ,\n", + " aesara.tensor.random.basic.LogNormalRV: ,\n", + " aesara.tensor.random.basic.LogisticRV: ,\n", + " aesara.tensor.random.basic.MultinomialRV: ,\n", + " aesara.tensor.random.basic.MvNormalRV: .logp>,\n", + " aesara.tensor.random.basic.NegBinomialRV: .logp>,\n", + " aesara.tensor.random.basic.NormalRV: ,\n", + " aesara.tensor.random.basic.ParetoRV: ,\n", + " aesara.tensor.random.basic.PoissonRV: .logp>,\n", + " aesara.tensor.random.basic.TransformedBetaRV: .transformed_logprob>,\n", + " aesara.tensor.random.basic.TransformedChiSquareRV: .transformed_logprob>,\n", + " aesara.tensor.random.basic.TransformedDirichletRV: .transformed_logprob>,\n", + " aesara.tensor.random.basic.TransformedExponentialRV: .transformed_logprob>,\n", + " aesara.tensor.random.basic.TransformedGammaRV: .transformed_logprob>,\n", + " aesara.tensor.random.basic.TransformedHalfCauchyRV: .transformed_logprob>,\n", + " aesara.tensor.random.basic.TransformedHalfNormalRV: .transformed_logprob>,\n", + " aesara.tensor.random.basic.TransformedInvGammaRV: .transformed_logprob>,\n", + " aesara.tensor.random.basic.TransformedLogNormalRV: .transformed_logprob>,\n", + " aesara.tensor.random.basic.TransformedParetoRV: .transformed_logprob>,\n", + " aesara.tensor.random.basic.TransformedTriangularRV: .transformed_logprob>,\n", + " aesara.tensor.random.basic.TransformedUniformRV: .transformed_logprob>,\n", + " aesara.tensor.random.basic.TransformedVonMisesRV: .transformed_logprob>,\n", + " aesara.tensor.random.basic.TransformedWaldRV: .transformed_logprob>,\n", + " aesara.tensor.random.basic.TransformedWeibullRV: .transformed_logprob>,\n", + " aesara.tensor.random.basic.TriangularRV: ,\n", + " aesara.tensor.random.basic.UniformRV: ,\n", + " aesara.tensor.random.basic.VonMisesRV: ,\n", + " aesara.tensor.random.basic.WaldRV: ,\n", + " aesara.tensor.random.basic.WeibullRV: ,\n", + " object: ,\n", + " pymc.bart.bart.BARTRV: ,\n", + " pymc.distributions.bound.BoundRV: .logp>,\n", + " pymc.distributions.bound.DiscreteBoundRV: .logp>,\n", + " pymc.distributions.continuous.AsymmetricLaplaceRV: .logp>,\n", + " pymc.distributions.continuous.ExGaussianRV: .logp>,\n", + " pymc.distributions.continuous.FlatRV: .logp>,\n", + " pymc.distributions.continuous.HalfFlatRV: .logp>,\n", + " pymc.distributions.continuous.HalfStudentTRV: .logp>,\n", + " pymc.distributions.continuous.InterpolatedRV: .logp>,\n", + " pymc.distributions.continuous.KumaraswamyRV: .logp>,\n", + " pymc.distributions.continuous.LogitNormalRV: .logp>,\n", + " pymc.distributions.continuous.MoyalRV: .logp>,\n", + " pymc.distributions.continuous.PolyaGammaRV: .logp>,\n", + " pymc.distributions.continuous.RiceRV: .logp>,\n", + " pymc.distributions.continuous.SkewNormalRV: .logp>,\n", + " pymc.distributions.continuous.StudentTRV: .logp>,\n", + " pymc.distributions.continuous.TruncatedNormalRV: .logp>,\n", + " pymc.distributions.continuous.WaldRV: .logp>,\n", + " pymc.distributions.discrete.ConstantRV: .logp>,\n", + " pymc.distributions.discrete.DiscreteUniformRV: .logp>,\n", + " pymc.distributions.discrete.DiscreteWeibullRV: .logp>,\n", + " pymc.distributions.discrete.ZeroInflatedBinomialRV: .logp>,\n", + " pymc.distributions.discrete.ZeroInflatedNegBinomialRV: .logp>,\n", + " pymc.distributions.discrete.ZeroInflatedPoissonRV: .logp>,\n", + " pymc.distributions.multivariate.CARRV: .logp>,\n", + " pymc.distributions.multivariate.DirichletMultinomialRV: .logp>,\n", + " pymc.distributions.multivariate.KroneckerNormalRV: .logp>,\n", + " pymc.distributions.multivariate.LKJCorrRV: .logp>,\n", + " pymc.distributions.multivariate.MatrixNormalRV: .logp>,\n", + " pymc.distributions.multivariate.MultinomialRV: .logp>,\n", + " pymc.distributions.multivariate.MvStudentTRV: .logp>,\n", + " pymc.distributions.multivariate.StickBreakingWeightsRV: .logp>,\n", + " pymc.distributions.multivariate.WishartRV: .logp>,\n", + " pymc.distributions.multivariate._LKJCholeskyCovRV: .logp>})" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "_logprob.registry" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Gyp98lINTAOz", + "outputId": "91c514a6-1168-4f64-97ff-efe5d0f139bc" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x = pm.Normal.dist(size=2)\n", + "x.owner.op" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Am5CBIEoSt1j", + "outputId": "c87b47f8-5b41-4102-ed8b-c10de2647c31" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Check{sigma > 0} [id A] '' \n", + " |Elemwise{sub,no_inplace} [id B] '' \n", + " | |Elemwise{sub,no_inplace} [id C] '' \n", + " | | |Elemwise{mul,no_inplace} [id D] '' \n", + " | | | |InplaceDimShuffle{x} [id E] '' \n", + " | | | | |TensorConstant{-0.5} [id F]\n", + " | | | |Elemwise{pow,no_inplace} [id G] '' \n", + " | | | |Elemwise{true_div,no_inplace} [id H] '' \n", + " | | | | |Elemwise{sub,no_inplace} [id I] '' \n", + " | | | | | |TensorConstant{(2,) of 0} [id J]\n", + " | | | | | |InplaceDimShuffle{x} [id K] '' \n", + " | | | | | |TensorConstant{0} [id L]\n", + " | | | | |InplaceDimShuffle{x} [id M] '' \n", + " | | | | |TensorConstant{1.0} [id N]\n", + " | | | |InplaceDimShuffle{x} [id O] '' \n", + " | | | |TensorConstant{2} [id P]\n", + " | | |InplaceDimShuffle{x} [id Q] '' \n", + " | | |Elemwise{log,no_inplace} [id R] '' \n", + " | | |Elemwise{sqrt,no_inplace} [id S] '' \n", + " | | |TensorConstant{6.283185307179586} [id T]\n", + " | |InplaceDimShuffle{x} [id U] '' \n", + " | |Elemwise{log,no_inplace} [id V] '' \n", + " | |TensorConstant{1.0} [id N]\n", + " |All [id W] '' \n", + " |Elemwise{gt,no_inplace} [id X] '' \n", + " |TensorConstant{1.0} [id N]\n", + " |TensorConstant{0.0} [id Y]\n" + ] + } + ], + "source": [ + "x_logp = _logprob(x.owner.op, ([0, 0],), *x.owner.inputs)\n", + "aesara.dprint(x_logp)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "iAYEgYRwTG7i", + "outputId": "ceb009b4-e2e7-4cb5-d706-fa1d34b2557a" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-0.91893853, -0.91893853])" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x_logp.eval()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "zCmmLzwfTL9N", + "outputId": "7dc9cd0e-5c42-4137-ff88-de5d286f81b8" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-0.91893853, -0.91893853])" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Helper friendly pymc function to access logp\n", + "# Takes RV + value as input\n", + "pm.logp(x, [0, 0]).eval()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "oN1FcbE1V2it", + "outputId": "a0cd9e45-2441-42e1-affe-18600b648d61" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Logprob method not implemented for CumOp{None, add}\n" + ] + } + ], + "source": [ + "# What about other types of Ops?\n", + "try:\n", + " y = at.cumsum(x)\n", + " pm.logp(y, [1, 1])\n", + "except NotImplementedError as err:\n", + " print(err)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yxG5UHslGDEv" + }, + "source": [ + "Note: A similar dispatch strategy is used for `logcdf` and `get_moment`" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WdZcUfvLUkwK" + }, + "source": [ + "## What is the deal with those value variables in the model?\n", + "\n", + "* RVs for random draws\n", + "* Value variables for logprob evaluations" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "7Sznx-MLs691", + "outputId": "1dac8ba2-899a-47f7-d175-04502b73fd76" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " array([ 0.81645943, -1.10072665, -1.02026051, -0.38992712, 0.32378923]),\n", + " -1.7001885332046727)" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# RV and value variables can be observed in these scipy operations\n", + "(\n", + " scipy.stats.norm(0, 1), # Equivalent to rv = pm.Normal(\"rv\", 0, 1)\n", + " rv.rvs(5), # Equivalent to rv_draw = pm.draw(rv, 5)\n", + " rv.logpdf(1.25), # Equivalent to rv_logp = pm.logp(rv, .125)\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "dejQBR2FUnM3" + }, + "outputs": [], + "source": [ + "with pm.Model() as m:\n", + " sigma = pm.HalfNormal(\"sigma\")\n", + " x = pm.Normal(\"x\", 0, sigma=sigma)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "iXnvzBqorsX-", + "outputId": "bb779d64-5c1b-4233-9131-f64f5dd0e77a" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{my_x: my_x}" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Each model RV is related to a \"value variable\"\n", + "model.rvs_to_values" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "xsqHFQ0srsX6", + "outputId": "adfc9a9d-c411-4551-f534-c944bb9e1610" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[my_x]" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.value_vars" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "i3ME6Y41rsX9", + "outputId": "4f075f4f-29d6-4516-ec7a-1bfffa5998ea" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "my_x [id A]\n" + ] + } + ], + "source": [ + "# These just an input variable (constants inputs if observed)\n", + "# used in the logp graph\n", + "aesara.dprint(model.value_vars[0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "JvGOpA3_U0C1" + }, + "outputs": [], + "source": [ + "logp_graph = at.stack(m.logpt(sum=False))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Y2BIoKk5U4fQ", + "outputId": "a9b67ac9-9fc0-4da8-dabf-90ed7d5b80e9" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-10.22579135, 9.08106147])" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sigma_value = m.rvs_to_values[sigma]\n", + "x_value = m.rvs_to_values[x]\n", + "logp_graph.eval({sigma_value: -10, x_value:0})" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "wFAUqf0qU50W", + "outputId": "3480b833-f2c7-43a3-d87f-b2149f67351f" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[array(-10.22579135), array(9.08106147)]" + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# model compile_logp is a helpers that creates a compiled aesara function\n", + "# of the model logp, which takes a dictionary of {value variable name : value} as inputs\n", + "m.compile_logp(sum=False)({\"sigma_log__\": -10, \"x\": 0})" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EHH1hP0uzaWG" + }, + "source": [ + "## Some useful Model methods to know about" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "MsSFt_xDzYn2" + }, + "outputs": [], + "source": [ + "with pm.Model() as m:\n", + " mu = pm.Normal(\"mu\", initval=\"prior\")\n", + " sigma = pm.HalfNormal(\"sigma\", size=3, initval=[1, 2, 3])\n", + " y = pm.Normal(\"y\", mu, sigma, observed=[1, 1, 1])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "1JX8cFt8z2b1", + "outputId": "a87d5d8c-ffed-43cf-fbd2-1ba885911a04" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'mu': array(0.44339106),\n", + " 'sigma_log__': array([0. , 0.69314718, 1.09861229])}" + ] + }, + "execution_count": 89, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# initial points\n", + "m.compute_initial_point(seed=314)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "VdU6Eev9z-2F", + "outputId": "787ee742-6e73-44ee-e3e9-5010607405f1" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[array(-0.91893853), array([-0.72579135, -0.72579135, -0.72579135])]" + ] + }, + "execution_count": 90, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# logp\n", + "logp_graph = m.logpt(vars=[mu, sigma], jacobian=False, sum=False)\n", + "logp_fn = m.compile_fn(logp_graph)\n", + "logp_fn({'mu': np.array(0.), 'sigma_log__': np.array([0., 0., 0.])})" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "0wUIYHMd0e3E", + "outputId": "1afd7331-8ded-4338-f6ea-d5449a0b1ae8" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[array(-0.91893853), array([-0.72579135, -0.72579135, -0.72579135])]" + ] + }, + "execution_count": 91, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# logp\n", + "logp_fn = m.compile_logp(vars=[mu, sigma], jacobian=False, sum=False)\n", + "logp_fn({'mu': np.array(0.), 'sigma_log__': np.array([0., 0., 0.])})" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "fahwjKyu0YfR", + "outputId": "80ec9022-3c86-4110-e35e-70228aa16f88" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([3.])" + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# dlogp\n", + "# m.dlogpt(...)\n", + "dlogp_fn = m.compile_dlogp(vars=[mu])\n", + "dlogp_fn({'mu': np.array(0.), 'sigma_log__': np.array([0., 0., 0.])})" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "gW9DMRK20uyF", + "outputId": "1532a7e7-3319-4e65-f834-f1335ab1147f" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[4.]])" + ] + }, + "execution_count": 93, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# d2logp\n", + "d2logp_fn = m.compile_d2logp(vars=[mu])\n", + "d2logp_fn({'mu': np.array(0.), 'sigma_log__': np.array([0., 0., 0.])})" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "I_Ph4o7ZW_XD" + }, + "source": [ + "## PyMC goes back and forth between the random and log-probability graphs to do cool stuff:\n", + "\n", + "1. Prior predictive\n", + "1. Optimization (MAP, find_constrained_prior)\n", + "1. Sampling (Metropolis, NUTS, SMC)\n", + "1. Posterior predictive" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "V9DNXnRPZHUb" + }, + "source": [ + "# Aeppl" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kE_CLk-cBoma" + }, + "source": [ + "![image.png](data:image/png;base64,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)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aVhI2H09GNJi" + }, + "source": [ + "**Source code**\n", + "* [Aeppl [rev 2019114d23])](https://github.com/aesara-devs/aeppl/tree/2019114d231d8d3d96acc284fe0e6ee42d89c912/aeppl)\n", + "* [Aeppl logprob](https://github.com/aesara-devs/aeppl/blob/2019114d231d8d3d96acc284fe0e6ee42d89c912/aeppl/logprob.py)\n", + "* [Aeppl joint logprob](https://github.com/aesara-devs/aeppl/blob/2019114d231d8d3d96acc284fe0e6ee42d89c912/aeppl/joint_logprob.py)\n", + "* [Aeppl cumsum](https://github.com/aesara-devs/aeppl/blob/2019114d231d8d3d96acc284fe0e6ee42d89c912/aeppl/cumsum.py)\n", + "* [Aeppl mixture](https://github.com/aesara-devs/aeppl/blob/2019114d231d8d3d96acc284fe0e6ee42d89c912/aeppl/mixture.py)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9ZJs2FkBWtxh" + }, + "outputs": [], + "source": [ + "from aeppl import factorized_joint_logprob as aeppl_logp" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "BQTG1HGmZQKd", + "outputId": "aa938c12-dca7-41fd-d753-d9ec32d189ae" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{x: x_logprob, y: y_logprob}" + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x = at.random.normal(name='x')\n", + "y = at.random.normal(x + 5, name='y', size=2)\n", + "\n", + "x_value = at.scalar('x')\n", + "y_value = at.vector('y')\n", + "logp = aeppl_logp({x: x_value, y: y_value})\n", + "logp" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Ac_p7H8VZmOd", + "outputId": "bb170324-7647-4953-ef23-215c195570cb" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-13.41893853, -0.91893853])" + ] + }, + "execution_count": 96, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "logp[y_value].eval({x_value: 5, y_value: [5, 10]})" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jOI-E76fZ2bG" + }, + "source": [ + "## We are not limited to graphs defined in terms of random variables" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "JDCM-tNDZ17z", + "outputId": "64be3438-b00d-4c76-d891-e795fac299d4" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{mu: mu_logprob, rw: rw_logprob}" + ] + }, + "execution_count": 97, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mu = at.random.normal(name='mu')\n", + "innov = at.random.normal(mu, size=10, name='innov')\n", + "rw = at.cumsum(innov); rw.name='rw'\n", + "\n", + "mu_value = at.scalar('mu')\n", + "rw_value = at.vector('rw')\n", + "logp = aeppl_logp({mu: mu_value, rw: rw_value})\n", + "logp" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "tdU2hydcZsj5", + "outputId": "5dbb505c-4dfa-45d7-d336-63a772f69bb2" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-1.41893853, -0.91893853, -0.91893853, -0.91893853, -0.91893853,\n", + " -0.91893853, -0.91893853, -0.91893853, -0.91893853, -0.91893853])" + ] + }, + "execution_count": 98, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "logp[rw_value].eval({mu_value: 1, rw_value: np.arange(10)})" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ljDJ4OC21Xqz" + }, + "outputs": [], + "source": [ + "# Taking advantage of Aeppl to write a mixture model in PyMC\n", + "with pm.Model(coords={'trials': np.arange(10)}, rng_seeder=123) as m:\n", + " \n", + " idx = pm.Categorical('idx', p=[0.1, 0.3, 0.6], dims='trials')\n", + "\n", + " components = at.stack([\n", + " pm.Laplace.dist(mu=-5, b=1),\n", + " pm.Normal.dist(mu=0, sigma=1),\n", + " pm.StudentT.dist(nu=7, mu=5, sigma=1),\n", + " ])\n", + "\n", + " # Aeppl understands indexing of RandomVariables as Mixtures\n", + " mix = components[idx]\n", + "\n", + " # Manual registration\n", + " m.register_rv(mix, name='mix', dims='trials')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "x23NgZH0uFys" + }, + "outputs": [], + "source": [ + "# Taking advantage of Aeppl to write a mixture model in PyMC\n", + "with pm.Model(coords={'trials': np.arange(10)}, rng_seeder=123) as m:\n", + " \n", + " idx = pm.Categorical('idx', p=[0.1, 0.3, 0.6], dims='trials')\n", + "\n", + " components = at.stack([\n", + " pm.Laplace.dist(mu=-5, b=1),\n", + " pm.Normal.dist(mu=0, sigma=1),\n", + " pm.StudentT.dist(nu=7, mu=5, sigma=1),\n", + " ])\n", + "\n", + " # Aeppl understands indexing of RandomVariables as Mixtures\n", + " mix = components[idx]\n", + "\n", + " # Manual registration\n", + " m.register_rv(mix, name='mix', dims='trials')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 323 + }, + "id": "FhqBAl6x2zO1", + "outputId": "178a89f2-1aba-4b0d-9416-856079ef2db0" + }, + "outputs": [ + { + "data": { + "image/svg+xml": "\n\n\n\n\n\n%3\n\n\nclustertrials (10)\n\ntrials (10)\n\n\n\nmix\n\nmix\n~\nDeterministic\n\n\n\nidx\n\nidx\n~\nCategorical\n\n\n\nidx->mix\n\n\n\n\n\n", + "text/plain": [ + "" + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pm.model_to_graphviz(m)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "AqVrkUSa22VJ", + "outputId": "ea61c9f3-a55a-4847-cf88-4c255828a910" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/pymc/initial_point.py:283: UserWarning: Moment not defined for variable mix of type AdvancedSubtensor, defaulting to a draw from the prior. This can lead to difficulties during tuning. You can manually define an initval or implement a get_moment dispatched function for this distribution.\n", + " UserWarning,\n" + ] + }, + { + "data": { + "text/plain": [ + "{'idx': array([2, 2, 2, 2, 2, 2, 2, 2, 2, 2]),\n", + " 'mix': array([6.99933659, 6.99933659, 6.99933659, 6.99933659, 6.99933659,\n", + " 6.99933659, 6.99933659, 6.99933659, 6.99933659, 6.99933659])}" + ] + }, + "execution_count": 102, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "m.compute_initial_point(0)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Si-CF02h2SYz" + }, + "outputs": [], + "source": [ + "with m:\n", + " prior = pm.sample_prior_predictive(return_inferencedata=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "QgEzJatT3o7K", + "outputId": "49ee9556-604c-4b8d-9c55-1c0300f226bc" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(500, 10)" + ] + }, + "execution_count": 104, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "prior['mix'].shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 265 + }, + "id": "vybLX6zQ3I60", + "outputId": "21bd01c3-d0c0-4b3b-b422-eb095108e65e" + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.hist(prior['mix'].reshape(-1), bins=50);" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ccGMrWNa4Jdn" + }, + "outputs": [], + "source": [ + "# Same model but with observed\n", + "# We can't use dims... it breaks something in Aeppl, perhaps the SpecifyShape?\n", + "with pm.Model(coords={'trials': np.arange(10)}) as m:\n", + "\n", + " idx = pm.Categorical('idx', p=[0.1, 0.3, 0.6], size=10)\n", + "\n", + " components = at.stack([\n", + " pm.Laplace.dist(mu=-5, b=1),\n", + " pm.Normal.dist(mu=0, sigma=1),\n", + " pm.StudentT.dist(nu=7, mu=5, sigma=1),\n", + " ])\n", + "\n", + " mix = components[idx]\n", + "\n", + " # Now we pass data when we register the variable!\n", + " m.register_rv(mix, name='mix', data=prior['mix'][0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "CuPKZ1YX5Ymp", + "outputId": "55df0eaf-2ea2-4a10-d8bd-7915a4a4a9b7" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "idx -5.11\n", + "mix -26.82\n", + "Name: Point log-probability, dtype: float64" + ] + }, + "execution_count": 107, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "m.point_logps()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 231 + }, + "id": "U7_uxbDU4RE2", + "outputId": "9fbb36da-add3-48a3-d1e4-040b350073d8" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Sequential sampling (2 chains in 1 job)\n", + "INFO:pymc:Sequential sampling (2 chains in 1 job)\n", + "CategoricalGibbsMetropolis: [idx]\n", + "INFO:pymc:CategoricalGibbsMetropolis: [idx]\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
\n", + " \n", + " 100.00% [2000/2000 00:04<00:00 Sampling chain 0, 0 divergences]\n", + "
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
\n", + " \n", + " 100.00% [2000/2000 00:04<00:00 Sampling chain 1, 0 divergences]\n", + "
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Sampling 2 chains for 1_000 tune and 1_000 draw iterations (2_000 + 2_000 draws total) took 9 seconds.\n", + "INFO:pymc:Sampling 2 chains for 1_000 tune and 1_000 draw iterations (2_000 + 2_000 draws total) took 9 seconds.\n", + "/usr/local/lib/python3.7/dist-packages/arviz/stats/diagnostics.py:561: RuntimeWarning: invalid value encountered in double_scalars\n", + " (between_chain_variance / within_chain_variance + num_samples - 1) / (num_samples)\n", + "The number of effective samples is smaller than 25% for some parameters.\n", + "INFO:pymc:The number of effective samples is smaller than 25% for some parameters.\n" + ] + } + ], + "source": [ + "with m:\n", + " trace = pm.sample(return_inferencedata=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "LMMA-8G65m1i", + "outputId": "63176de3-0760-4175-9b56-749a8d4256ff" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([2, 2, 1, 2, 2, 1, 1, 2, 1, 2])" + ] + }, + "execution_count": 109, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Posterior indexes\n", + "np.median(trace['idx'], axis=0).astype(int)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "rB0qC7LL6MWp", + "outputId": "2b34ed25-f083-4416-ac9d-e817637421a5" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([2, 2, 1, 2, 2, 1, 1, 2, 1, 2])" + ] + }, + "execution_count": 110, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# True indexes\n", + "prior['idx'][0]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Rq2W2fmobmFg" + }, + "source": [ + "## What does aeppl support?\n", + "1. Dimshuffles, Broadcast, boring stuff\n", + "2. Indexing (mixtures)\n", + "3. Clipping (censoring)\n", + "4. Cumsum (random walks)\n", + "5. Scans (generalized time series)\n", + "\n", + "### What is in the roadmap?\n", + "6. Deterministics (exp, log, add, ...)\n", + "7. Switch, IfElse (more mixtures)\n", + "8. Truncation\n", + "9. Ordering (sort, max, min, median...)\n", + "10. Arbitrary nesting of \"derived\" logp terms\n", + "\n", + "### Other stuff\n", + "11. Automatic marginalization of latent variables\n", + "12. Removing normalization constants from logp graph\n", + "\n", + "\n", + "https://github.com/aesara-devs/aeppl/labels/enhancement\n", + "\n", + "**NOTE: Many features are still experimental. Use with caution**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jA0IM2EYIF_v" + }, + "source": [ + "## Integration with PyMC\n", + "\n", + "* PyMC Distributions return **RandomVariables** that Aeppl can always parse to obtain a logp graph.\n", + "* PyMC SymbolicDistributions return **arbitrary Aesara Variables** that we know Aeppl can always parse to obtain a logp graph\n", + " * See [Censored distributions](https://github.com/pymc-devs/pymc/blob/1005d20b3c12d9b9a424c069f6a0f9962d73c41d/pymc/distributions/censored.py) for an example where we return `at.clip(RandomVariable, lower, upper)`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "l9gdpeefJJmZ" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [ + "dIYxBNT_5HgW", + "JhmIBByY6T9h", + "k7spOYvvTdZL", + "qIMN2gHGzKof", + "aMM0sJy6z7Ur", + "WY6bUgqZztC3", + "58gng2f17_P7", + "C8Us4nEyhRdu", + "wkZR0gDWRAgK", + "wPw9kCvASOeJ", + "WdZcUfvLUkwK", + "EHH1hP0uzaWG", + "I_Ph4o7ZW_XD", + "jOI-E76fZ2bG", + "Rq2W2fmobmFg" + ], + "name": "PyMC intro.ipynb", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From 5546ab4dcb8e70b8dc52f9f301f84379a6ea4344 Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Fri, 1 Apr 2022 14:46:25 +0200 Subject: [PATCH 02/30] first section on aesara --- docs/intro_pymc_codebase.ipynb | 1628 +++++++------------------------- 1 file changed, 347 insertions(+), 1281 deletions(-) diff --git a/docs/intro_pymc_codebase.ipynb b/docs/intro_pymc_codebase.ipynb index 8dd084ffd7..011ddc5c2d 100644 --- a/docs/intro_pymc_codebase.ipynb +++ b/docs/intro_pymc_codebase.ipynb @@ -10,7 +10,9 @@ "\n", "Tags: Aesara, AePPL, PyMC, RandomVariable, Distribution, Model, logp\n", "\n", - "**Authors:** [Ricardo Vieira](https://github.com/ricardoV94) and [Juan Orduz](https://juanitorduz.github.io/)" + "**Authors:** [Ricardo Vieira](https://github.com/ricardoV94) and [Juan Orduz](https://juanitorduz.github.io/)\n", + "\n", + "For a summary overview please see [Architecture.md](https://github.com/pymc-devs/pymc/blob/main/ARCHITECTURE.md)" ] }, { @@ -20,8 +22,16 @@ }, "source": [ "![image.png](data:image/png;base64,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PY2xFRIgARLwQwI+LbBWrlwp/fv3l1atWkl8fLwfDp81bnnevHkyePDgTAssiOVnn31WmjdvLgEBAda4OT/rBbgvXrxYx4ECy88Gn7dLAiTgVgI+LbDwYXDrrbfKqFGjKLDc+likr7GXXnopfSekcnTLli3l/fffl6CgoFSO4i5PEQgMDJRBgwZR4HoKMNslARLwGwI+LbAwSqanAx8MNO8TSEhIcOuHMcYTY8nx9P5Ymlek9zDr2PPKJEAC9iFAVWKfseSdkAAJkAAJkAAJWIQABZZFBoLdIAESIAESIAESsA8BCiz7jCXvhARIgARIgARIwCIEKLAsMhDsBgmQAAmQAAmQgH0IUGDZZyx5JyRAAiRAAiRAAhYhQIFlkYFgN0iABEiABEiABOxDgALLPmPJOyEBEiABEiABErAIAQosiwwEu0ECJEACJEACJGAfAhRY9hlL3gkJkAAJkAAJkIBFCFBgWWQg2A0SIAESIAESIAH7EKDAss9Y8k5IgARIgARIgAQsQoACyyIDwW6QAAmQAAmQAAnYhwAFln3GkndCAiRAAiRAAiRgEQIUWBYZCHaDBEiABEiABEjAPgQosNw0lvv27ZPXXntNbr75Zrnxxhule/fusmTJEklISHBc4Z133pHXX39dNm3alOSq8fHx8vbbb2sbO3bscOy/cuWKzJkzRx544AGpXr26NGjQQF566SXZvXt3kjbsuiE6OlpGjRolzZs3l1q1asn9998vs2fPlkuXLjluGfzAylOGMXvjjTdkxIgRcvny5SSXWbVqle4fM2ZMmvuB/qLfsFOnTum4bt68OUnbmdkwbtw4+eabbzLTBM8lARIgARLIAAEKrAxAcz1lz549csMNN8iGDRvksccekyeffFI/ZOvXry9Tp051HP7qq6/KW2+9Jb/88otrE7J+/XoZMGCA7j99+rTuRxv40L799tulcOHC0rt3b+nSpYts3LhRSpcuLStWrEjSjt02nD9/Xh566CEZP368tGnTRhlUqFBBWrVqJe+++65DoAwZMkTZe8oggN5880159tln5eDBg0kuM336dN3/77//OvqU5CCnDRjbHj16yOeff65bL168KBMnTpQLFy6kdlq6961Zs0a2bNmS7vN4AgmQAAmQQOYIZMvc6TwbBObOnSsBAQHy1VdfSWRkpELBh32+fPnUK3XPPfdISEiI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BEiABHx+seczZ87I7t275cqVKxzNLCCQkJAgJ0+edNuVT58+LTt27JCgoCC3tcmG0k4gMDBQjh8/LkWLFk37STySBEiABEggCQGfFlj4cJ86daq+aFlLoHXr1m7pwLfffit40bKWwFdffZW1HeDVSYAESMDHCfi0wOrQoYO0b9/ex4fAHt2H5yOzdtttt9ETmVmIbjo/ICDATS2xGRIgARLwTwI+LbDwIcAPAns9uO4QavYiwrshARIgARLwRQKZdzv44l2zzyRAAiRAAiRAAiTgQQIUWB6Ey6ZJgARIgARIgAT8kwAFln+OO++aBEiABEiABEjAgwQosDwIl02TAAmQAAmQAAn4JwEKLP8cd941CZAACZAACZCABwlQYHkQLpsmARIgARIgARLwTwIUWP457rxrEiABEiABEiABDxKgwPIgXDZNAiRAAiRAAiTgnwQosPxz3HnXJEACJEACJEACHiRAgeVBuGyaBEiABEiABEjAPwlQYPnnuPOuSYAESIAESIAEPEiAAsuDcNk0CZAACZAACZCAfxKgwPLPceddkwAJkAAJkAAJeJAABZYH4bJpEiABEiABEvh/e2cCHlV59fEz2VeyLwTIAoGECIQlLG7QoqhV27orXV1qP21rrdbPtmpt1drPYq3VumGtO1hAqtQFRBS1KvseICSZ7Pu+78t3zjuZYWYyAYozmcm9/9MnD8mde9/l9wb595xzzwEBfRKAwNLnuWPXIAACIAACIAACLiQAgeVCuBgaBEAABEAABEBAnwQgsPR57tg1CIAACIAACICACwlAYLkQLoYGARAAARAAARDQJwEILH2eO3YNAiAAAiAAAiDgQgIQWC6Ei6FBAARAAARAAAT0SQACS5/njl2DAAiAAAiAAAi4kAAElgvhYmgQAAEQAAEQAAF9EoDA0ue5Y9cgAAIgAAIgAAIuJACB5UK4GBoEQAAEQAAEQECfBCCw9Hnu2DUIgAAIgAAIgIALCUBguRAuhgYBEAABEAABENAnAQgsfZ47dg0CIAACIAACIOBCAhBYLoSLoUEABEAABEAABPRJAAJLn+eOXYMACIAACIAACLiQAASWC+FiaBAAARAAARAAAX0S8DiB5eXlcUvS528Gdg0CIKBLAvhvsC6PHZt2AQEfF4z5lYZ85513qKKi4iuNgYdBAARAAAROj0BBQQEFBASc3sN4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)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Prepare Notebook\n", "\n", - "See [Architecture.md](https://github.com/pymc-devs/pymc/blob/1005d20b3c12d9b9a424c069f6a0f9962d73c41d/ARCHITECTURE.md)" + "Let us first import the required libraries." ] }, { @@ -56,7 +66,6 @@ "import aesara.tensor as at\n", "\n", "import pymc as pm\n", - "\n", "aesara.__version__, pm.__version__" ] }, @@ -66,7 +75,11 @@ "id": "ru2m_lFK7Atx" }, "source": [ - "# Aesara" + "# Aesara\n", + "\n", + "We start by looking into [aesara](https://github.com/aesara-devs/aesara/). According to their documentation\n", + "\n", + "> Aesara is a Python library that allows one to define, optimize, and efficiently evaluate mathematical expressions involving multi-dimensional arrays." ] }, { @@ -81,41 +94,70 @@ { "cell_type": "markdown", "metadata": { - "id": "YXwSyWULHJ81" + "id": "tBEjewdS1s5z" }, "source": [ - "**Source code**\n", - "* [Aesara [rev da86d35197]](https://github.com/aesara-devs/aesara/tree/da86d351979c0a29fc80da16db965551e9e8c14f)" + "### A simple example\n", + "\n", + "To begin, we start defining some aesara tensors and perform some basic operations." ] }, { - "cell_type": "markdown", - "metadata": { - "id": "tBEjewdS1s5z" - }, + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "x type: TensorType(float64, ())\n", + "x name = x\n", + "---\n", + "y type: TensorType(float64, (None,))\n", + "y name = y\n", + "\n" + ] + } + ], "source": [ - "## A simple example" + "x = at.scalar(name=\"x\")\n", + "y = at.vector(name=\"y\")\n", + "\n", + "print(f\"\"\"\n", + "x type: {x.type}\n", + "x name = {x.name}\n", + "---\n", + "y type: {y.type}\n", + "y name = {y.name}\n", + "\"\"\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "id": "jApxApHT1rmq" }, "outputs": [], "source": [ - "x = at.scalar(name='x')\n", - "y = at.vector(name='y')\n", "z = x + y\n", - "z.name = 'x + y'\n", + "z.name = \"x + y\"\n", "w = at.log(z)\n", - "w.name = 'log(x + y)'" + "w.name = \"log(x + y)\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use the [`aesara.dprint`](https://aesara.readthedocs.io/en/latest/library/index.html#aesara.dprint) function to print the computational graph of the given tensor." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -134,15 +176,32 @@ " | |x [id D]\n", " |y [id E]\n" ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "aesara.dprint(w)" + "aesara.dprint(obj=w)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The aesara function [`aesara.function`](https://aesara.readthedocs.io/en/latest/library/compile/function.html#aesara.compile.function.function) is used to define a callable object so that we can push values trough the graph." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -150,6 +209,23 @@ "id": "-XtR1jZS13_6", "outputId": "e101c9f0-7640-4fd0-aa6b-f8ba2e226886" }, + "outputs": [], + "source": [ + "# we compile the graph with numba (conda install -c numba numba)\n", + "f = aesara.function(inputs=[x, y], outputs=w, mode=\"NUMBA\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's run some concrete values." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, "outputs": [ { "data": { @@ -163,13 +239,20 @@ } ], "source": [ - "f = aesara.function(inputs=[x, y], outputs=w, mode=\"NUMBA\")\n", - "f(x=0, y=[1, np.e]) # keyword arguments only valid for named variables" + "# keyword arguments only valid for named variables\n", + "f(x=0, y=[1, np.e])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Sometimes we just want to debug, we can use `eval` for that:" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -190,13 +273,19 @@ } ], "source": [ - "# Sometimes we just want to debug, we can use `eval` for that\n", "w.eval({x: 0, y:[1, np.e]})" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can set intermediate values as well" + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -227,7 +316,9 @@ "id": "qqa54LWg4v3W" }, "source": [ - "## What is in a Aesara graph" + "### What is in an Aesara graph?\n", + "\n", + "The following diagram shows the basic structure of an Aesara graph." ] }, { @@ -240,86 +331,15 @@ ] }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "4gPVMmWK27fZ", - "outputId": "a07d7dd6-aad3-4871-81ca-3894d98b9b22" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "aesara.tensor.var.TensorVariable" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "type(w)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "4jRF1tMhTAap", - "outputId": "3fe6b40e-58e6-4c17-f76d-646213ba38f5" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "TensorType(float64, (None,))" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "y.type" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "71imoPq93U_p", - "outputId": "5c5158bb-4f4d-4188-dba0-20e2bc972696" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "TensorType(float64, (None,))" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "cell_type": "markdown", + "metadata": {}, "source": [ - "w.type" + "We can can make these concepts more tangible trough the example above: " ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -329,103 +349,41 @@ }, "outputs": [ { - "data": { - "text/plain": [ - "Elemwise{log,no_inplace}(x + y)" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "node = w.owner\n", - "node" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "CJVkQ8Ft3aUx", - "outputId": "b1475e72-2738-4f63-bfdc-3b76dbb46e53" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(,\n", - " )" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "node.op, node.op.scalar_op" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "X43k9jaj3abW", - "outputId": "d171c40c-7e79-4642-a49c-2a7190aed405" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[log(x + y)]" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "z type: TensorType(float64, (None,))\n", + "z name = x + y\n", + "z owner = Elemwise{add,no_inplace}(InplaceDimShuffle{x}.0, y)\n", + "z owner inputs = [InplaceDimShuffle{x}.0, y]\n", + "z owner op = Elemwise{add,no_inplace}\n", + "z owner output = [x + y]\n", + "\n" + ] } ], "source": [ - "node.outputs" + "print(f\"\"\"\n", + "z type: {z.type}\n", + "z name = {z.name}\n", + "z owner = {z.owner}\n", + "z owner inputs = {z.owner.inputs}\n", + "z owner op = {z.owner.op}\n", + "z owner output = {z.owner.outputs}\n", + "\"\"\")" ] }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "US2pqANh3hxk", - "outputId": "0b9ab24c-604c-46df-e635-18458b258143" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[x + y]" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], + "cell_type": "markdown", + "metadata": {}, "source": [ - "node.inputs" + "The following sniped of code helps us to understand these concepts by going through the computational graph." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -438,23 +396,23 @@ "name": "stdout", "output_type": "stream", "text": [ - "\n", + "---\n", "Checking variable log(x + y) of type TensorType(float64, (None,))\n", " > Op is Elemwise{log,no_inplace}\n", " > Input 0 is x + y\n", - "\n", + "---\n", "Checking variable x + y of type TensorType(float64, (None,))\n", " > Op is Elemwise{add,no_inplace}\n", " > Input 0 is InplaceDimShuffle{x}.0\n", " > Input 1 is y\n", - "\n", + "---\n", "Checking variable InplaceDimShuffle{x}.0 of type TensorType(float64, (1,))\n", " > Op is InplaceDimShuffle{x}\n", " > Input 0 is x\n", - "\n", + "---\n", "Checking variable y of type TensorType(float64, (None,))\n", " > y is a root variable\n", - "\n", + "---\n", "Checking variable x of type TensorType(float64, ())\n", " > x is a root variable\n" ] @@ -464,22 +422,32 @@ "from aesara.tensor.elemwise import Elemwise\n", "\n", "stack = [w]\n", + "\n", "while stack:\n", - " print('')\n", + " print(\"---\")\n", " var = stack.pop(0)\n", - " print(f'Checking variable {var} of type {var.type}')\n", + " print(f\"Checking variable {var} of type {var.type}\")\n", + " # check variable is not a root variable\n", " if var.owner is not None:\n", - " print(f' > Op is {var.owner.op}')\n", + " print(f\" > Op is {var.owner.op}\")\n", + " # loop over the inputs\n", " for i, input in enumerate(var.owner.inputs):\n", - " print(f' > Input {i} is {input}')\n", + " print(f\" > Input {i} is {input}\")\n", " stack.append(input)\n", " else:\n", - " print(f' > {var} is a root variable')" + " print(f\" > {var} is a root variable\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that this is very similar to the output of the [`aesara.dprint`](https://aesara.readthedocs.io/en/latest/library/index.html#aesara.dprint) function introduced above." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -498,6 +466,16 @@ " | |x [id D]\n", " |y [id E]\n" ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -510,19 +488,67 @@ "id": "dIYxBNT_5HgW" }, "source": [ - "## Graph manipulation 101" + "### Graph manipulation 101\n", + "\n", + "Now, we describe how to manipulate the computational graph. We continue with our tensors above to illustrate how to do it." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "Ju11phkn409W", - "outputId": "c7f4e6eb-b136-4e44-c416-82ac1d1cc312" + "id": "gWj0znupVc02", + "outputId": "edbdd626-2887-4336-f3b4-0f3904e49656" }, + "outputs": [ + { + "data": { + "text/plain": [ + "[x, y]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# get input tensors\n", + "list(aesara.graph.graph_inputs(graphs=[w]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As a simple example, let's add an `exp` before the `log` (to get the identity function)." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "parent_of_w = w.owner.inputs[0] # get z tensor\n", + "new_parent_of_w = at.exp(parent_of_w) # modify the parent of w\n", + "new_parent_of_w.name = \"exp(x + y)\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the graph of `w` has actually not change:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -534,41 +560,32 @@ " | |x [id D]\n", " |y [id E]\n" ] - } - ], - "source": [ - "aesara.dprint(w)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" }, - "id": "gWj0znupVc02", - "outputId": "edbdd626-2887-4336-f3b4-0f3904e49656" - }, - "outputs": [ { "data": { "text/plain": [ - "[x, y]" + "" ] }, - "execution_count": 19, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "list(aesara.graph.graph_inputs([w]))" + "aesara.dprint(w)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To modify the graph we need to use the [`aesara.clone_replace`](https://aesara.readthedocs.io/en/latest/library/index.html?highlight=clone_replace#aesara.clone_replace) function, which *returns a copy of the initial subgraph with the corresponding substitutions.*" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -588,21 +605,34 @@ " | |x [id E]\n", " |y [id F]\n" ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "# Stupid example, let's add an exp berofe the log\n", - "parent_of_w = w.owner.inputs[0]\n", - "new_parent_of_w = at.exp(parent_of_w)\n", - "new_parent_of_w.name = 'exp(x + y)'\n", "new_w = aesara.clone_replace(output=[w], replace={parent_of_w: new_parent_of_w})[0]\n", "new_w.name = \"exp(log(x + y))\"\n", "aesara.dprint(new_w)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we can test the modified graph by passing some input to the new graph." + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -617,7 +647,7 @@ "array([1. , 2.71828183])" ] }, - "execution_count": 21, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -632,12 +662,13 @@ "id": "JhmIBByY6T9h" }, "source": [ - "## Aesara is clever" + "### Aesara is clever!\n", + "Note that aesara is clever enough to omit the `exp` and `log` unnecessary composition." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -645,30 +676,6 @@ "id": "WlDAR8616QsM", "outputId": "2b9a60b7-d3d6-4605-d6ff-736b5c721318" }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.7/dist-packages/aesara/link/jax/dispatch.py:86: UserWarning: JAX omnistaging couldn't be disabled: Disabling of omnistaging is no longer supported in JAX version 0.2.12 and higher: see https://github.com/google/jax/blob/main/design_notes/omnistaging.md.\n", - " warnings.warn(f\"JAX omnistaging couldn't be disabled: {e}\")\n" - ] - } - ], - "source": [ - "f = aesara.function(inputs=[x, y], outputs=new_w, mode=\"JAX\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "nJBsptYT6O5T", - "outputId": "1f116d61-447b-4e25-a6df-9c0ad2c797ce" - }, "outputs": [ { "name": "stdout", @@ -679,16 +686,35 @@ " | |x [id C]\n", " |y [id D]\n" ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/juanitorduz/opt/anaconda3/envs/pymc-dev-py39/lib/python3.9/site-packages/aesara/link/jax/dispatch.py:87: UserWarning: JAX omnistaging couldn't be disabled: Disabling of omnistaging is no longer supported in JAX version 0.2.12 and higher: see https://github.com/google/jax/blob/main/design_notes/omnistaging.md.\n", + " warnings.warn(f\"JAX omnistaging couldn't be disabled: {e}\")\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "# The useless log(exp(...)) was removed from the final graph\n", + "f = aesara.function(inputs=[x, y], outputs=new_w, mode=\"JAX\")\n", + "\n", "aesara.dprint(f)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -710,7 +736,7 @@ "DeviceArray([1. , 2.71828183], dtype=float64)" ] }, - "execution_count": 24, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -751,18 +777,7 @@ "id": "THRvGbP1WmhH", "outputId": "c4f044e6-83c3-4c4c-9ecf-8714efae6f36" }, - "outputs": [ - { - "data": { - "text/plain": [ - "1.3796867203662824" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "rng = np.random.default_rng()\n", "rng.normal()" @@ -789,20 +804,7 @@ "id": "3hQKQ9IGxMW4", "outputId": "96e4fd79-fd3b-47d6-a9f7-b0e55a33999b" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", - " |RandomGeneratorSharedVariable() [id B]\n", - " |TensorConstant{[]} [id C]\n", - " |TensorConstant{11} [id D]\n", - " |TensorConstant{0.0} [id E]\n", - " |TensorConstant{1.0} [id F]\n" - ] - } - ], + "outputs": [], "source": [ "aesara.dprint(x)" ] @@ -841,18 +843,7 @@ "id": "5F7vC0jUTbq5", "outputId": "7a74bf24-e3f7-448e-cbaa-0e71b01bb8c8" }, - "outputs": [ - { - "data": { - "text/plain": [ - "(0, (0, 0), 'floatX')" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "op = x.owner.op\n", "(\n", @@ -881,18 +872,7 @@ "id": "fq84NPrqxOfn", "outputId": "999c994c-9a5e-4805-d631-190bff5f69ee" }, - "outputs": [ - { - "data": { - "text/plain": [ - "array(-0.41567808)" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "x.eval()" ] @@ -907,18 +887,7 @@ "id": "CO2cbtMDxSLI", "outputId": "578cc827-e0b1-4d23-d040-ca414f7375b9" }, - "outputs": [ - { - "data": { - "text/plain": [ - "array(-0.41567808)" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# By default draws don't change between calls\n", "x.eval()" @@ -934,19 +903,7 @@ "id": "0X_A-msDzJaf", "outputId": "f0939974-627c-462c-bc44-7c70133211c4" }, - "outputs": [ - { - "data": { - "text/plain": [ - "(RandomGeneratorSharedVariable(),\n", - " RandomGeneratorType)" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# This is because the RandomOp is a deterministic operation, given it's inputs\n", "# One of these inputs is a RandomGenerator/State\n", @@ -963,20 +920,7 @@ "id": "8IhwIQ9oxcxN", "outputId": "a36d59cc-c419-468c-9229-d5010e165cbf" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y' \n", - " |RandomGeneratorSharedVariable() [id B]\n", - " |TensorConstant{(1,) of 2} [id C]\n", - " |TensorConstant{11} [id D]\n", - " |TensorConstant{0} [id E]\n", - " |TensorConstant{1} [id F]\n" - ] - } - ], + "outputs": [], "source": [ "# This input is created by default, but can be passed explicitly as well\n", "rng = np.random.default_rng(seed=123)\n", @@ -995,18 +939,7 @@ "id": "193YxZy2xx_N", "outputId": "f9f4ed62-c08f-4b0f-877a-7a3111787349" }, - "outputs": [ - { - "data": { - "text/plain": [ - "(array([-0.98912135, -0.36778665]), array([-0.98912135, -0.36778665]))" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Each draw in the same call is unique, but these again don't change across calls\n", "y.eval(), y.eval()" @@ -1022,18 +955,7 @@ "id": "y0XMPhCUx4iJ", "outputId": "be1bd5e0-acbf-4251-8e99-c0ccd62b9eda" }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# We will make the generator advance by one, which will make the draws \"cycle\" by one\n", "rng.bit_generator.advance(1)" @@ -1049,18 +971,7 @@ "id": "dRLcbgByySdF", "outputId": "b536e228-306f-4bc5-f50c-674805b0c360" }, - "outputs": [ - { - "data": { - "text/plain": [ - "(array([-0.36778665, 1.28792526]), array([-0.36778665, 1.28792526]))" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "y.eval(), y.eval()" ] @@ -1075,18 +986,7 @@ "id": "vtl1x93cyVA9", "outputId": "25d2372b-b013-4e7b-cdd3-c70326f71556" }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# And again\n", "rng.bit_generator.advance(1)" @@ -1102,18 +1002,7 @@ "id": "TqeAbfUPybGI", "outputId": "bf343da1-0736-4e4a-80b9-67ebe83adb66" }, - "outputs": [ - { - "data": { - "text/plain": [ - "(array([1.28792526, 0.19397442]), array([1.28792526, 0.19397442]))" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Now the draws are completely different than the initial ones\n", "y.eval(), y.eval()" @@ -1140,18 +1029,7 @@ "id": "YwmH0DJ40bTj", "outputId": "a9ccd2a6-7d76-49e1-d0ce-c594739f91ea" }, - "outputs": [ - { - "data": { - "text/plain": [ - "[normal_rv{0, (0, 0), floatX, False}.0, z]" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "rng = np.random.default_rng(seed=123)\n", "shared_rng = aesara.shared(rng, borrow=True)\n", @@ -1171,21 +1049,7 @@ "id": "SAIGub1C7gPN", "outputId": "2e1246c4-ef8f-4056-c056-1a5e6c52a402" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "normal_rv{0, (0, 0), floatX, False}.0 [id A] '' \n", - " |RandomGeneratorSharedVariable() [id B]\n", - " |TensorConstant{[]} [id C]\n", - " |TensorConstant{11} [id D]\n", - " |TensorConstant{0} [id E]\n", - " |TensorConstant{1} [id F]\n", - "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z' \n" - ] - } - ], + "outputs": [], "source": [ "aesara.dprint(z.owner.outputs)" ] @@ -1200,18 +1064,7 @@ "id": "RmbkBxYbxY1r", "outputId": "1a5ebe21-42d7-4e37-b38a-fa57545c0dc0" }, - "outputs": [ - { - "data": { - "text/plain": [ - "RandomGeneratorType" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "next_rng = x.owner.outputs[0]\n", "next_rng.type" @@ -1227,18 +1080,7 @@ "id": "XMRJpNvG00eT", "outputId": "b4188341-865b-437e-ad27-72fbbe6bd6fc" }, - "outputs": [ - { - "data": { - "text/plain": [ - "(array(-0.98912135), array(-0.98912135))" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "z.eval(), z.eval()" ] @@ -1253,18 +1095,7 @@ "id": "ffNFDcu6z5Sk", "outputId": "0f0d95b8-313a-46bd-fd57-2697f5b762e1" }, - "outputs": [ - { - "data": { - "text/plain": [ - "Generator(PCG64) at 0x7F7B2114F410" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "next_rng_value = next_rng.eval()\n", "next_rng_value" @@ -1292,18 +1123,7 @@ "id": "C-Gu-EdQ0_Hj", "outputId": "39d63314-18d0-40aa-c441-b7792db58cf2" }, - "outputs": [ - { - "data": { - "text/plain": [ - "(array(-0.95422551), array(-0.95422551))" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "z.eval(), z.eval()" ] @@ -1356,18 +1176,7 @@ "id": "YgSF80agyiqs", "outputId": "116bdc4e-5594-4fef-d238-353feeefa2c8" }, - "outputs": [ - { - "data": { - "text/plain": [ - "(array(-0.98912135), array(-0.36778665))" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "w.eval(), w.eval()" ] @@ -1408,21 +1217,7 @@ "id": "mHDj8mYy9UKM", "outputId": "d36b548d-5cfc-47fa-cc1b-85e1d55bab78" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Elemwise{neg,no_inplace} [id A] '' \n", - " |Sum{acc_dtype=int64} [id B] '' \n", - " |bernoulli_rv{0, (0,), int64, False}.1 [id C] '' \n", - " |RandomGeneratorSharedVariable() [id D]\n", - " |TensorConstant{(1,) of 10} [id E]\n", - " |TensorConstant{4} [id F]\n", - " |p [id G]\n" - ] - } - ], + "outputs": [], "source": [ "aesara.dprint(nbs)" ] @@ -1437,18 +1232,7 @@ "id": "3nLdG-Q09Q1s", "outputId": "a843e177-4e99-473b-e179-4a970f7a4ce8" }, - "outputs": [ - { - "data": { - "text/plain": [ - "-8" - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "-bs.eval({p: 0.9})" ] @@ -1515,21 +1299,7 @@ "id": "ZuE6H5jY9p-C", "outputId": "4d2eb9a9-10bd-43ff-bea3-28ecfc39032b" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Elemwise{neg,no_inplace} [id A] '' 2\n", - " |Sum{acc_dtype=int64} [id B] '' 1\n", - " |bernoulli_rv{0, (0,), int64, False}.1 [id C] '' 0\n", - " |RandomGeneratorSharedVariable() [id D]\n", - " |TensorConstant{(1,) of 10} [id E]\n", - " |TensorConstant{4} [id F]\n", - " |p [id G]\n" - ] - } - ], + "outputs": [], "source": [ "fgraph = FunctionGraph(outputs=[nbs], clone=False)\n", "aesara.dprint(fgraph)" @@ -1545,25 +1315,7 @@ "id": "ENHC2fnu8jyr", "outputId": "d4989c32-6a2c-4a32-9f58-579cca79eff2" }, - "outputs": [ - { - "data": { - "text/plain": [ - "(,\n", - " 1,\n", - " 3,\n", - " 3,\n", - " 5.555152893066406e-05,\n", - " 0.017687320709228516,\n", - " 6.866455078125e-05,\n", - " FromFunctionLocalOptimizer(, None, ()))" - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "my_optimizer.optimize(fgraph)" ] @@ -1578,23 +1330,7 @@ "id": "6dqyvS8x8rBF", "outputId": "8ee1e8f4-2c4e-4b05-fb0b-7a04f3b231be" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Elemwise{neg,no_inplace} [id A] '' 2\n", - " |binomial_rv{0, (0, 0), int64, False}.1 [id B] '' 1\n", - " |RandomGeneratorSharedVariable() [id C]\n", - " |TensorConstant{[]} [id D]\n", - " |TensorConstant{4} [id E]\n", - " |Subtensor{int64} [id F] '' 0\n", - " | |TensorConstant{(1,) of 10} [id G]\n", - " | |ScalarConstant{0} [id H]\n", - " |p [id I]\n" - ] - } - ], + "outputs": [], "source": [ "aesara.dprint(fgraph)" ] @@ -1609,18 +1345,7 @@ "id": "YIXLSKkF_QPL", "outputId": "166acb34-683b-4478-9b7e-fe6fb2d9d837" }, - "outputs": [ - { - "data": { - "text/plain": [ - "array(-9)" - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Binomial and bernoulli do not have the same draws, given the same seed, so the results can vary\n", "# The seed was chosen to illustrate this!\n", @@ -1683,20 +1408,7 @@ "id": "pe6Xw7ZzHGCu", "outputId": "6560af03-5c86-44e4-bc27-dd09cfb042ea" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] '' \n", - " |RandomGeneratorSharedVariable() [id B]\n", - " |TensorConstant{(1,) of 3} [id C]\n", - " |TensorConstant{11} [id D]\n", - " |TensorConstant{0} [id E]\n", - " |TensorConstant{0.7071067811865476} [id F]\n" - ] - } - ], + "outputs": [], "source": [ "x = pm.Normal.dist(mu=0, tau=2, shape=3)\n", "aesara.dprint(x)" @@ -1712,19 +1424,7 @@ "id": "xRe_Wsx3hYcG", "outputId": "9cdcf230-abf2-4605-837d-0c0f5835e1ca" }, - "outputs": [ - { - "data": { - "text/plain": [ - "(array([-0.11210433, -0.52728513, -0.43059087]),\n", - " array([-0.11210433, -0.52728513, -0.43059087]))" - ] - }, - "execution_count": 59, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "x.eval(), x.eval()" ] @@ -1739,20 +1439,7 @@ "id": "uPaiNiybhgwT", "outputId": "0b937cf8-262b-40cf-996e-bc662e88653f" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", - " |RandomStateSharedVariable() [id B]\n", - " |TensorConstant{(1,) of 2} [id C]\n", - " |TensorConstant{11} [id D]\n", - " |TensorConstant{(2,) of 0} [id E]\n", - " |TensorConstant{[1. ...70710678]} [id F]\n" - ] - } - ], + "outputs": [], "source": [ "with pm.Model() as model:\n", " x = pm.Normal(\"x\", mu=np.array([0, 0]), tau=np.array([1, 2]), size=2)\n", @@ -1769,18 +1456,7 @@ "id": "Z-MupoZhhqE_", "outputId": "8b1dc63a-0fa6-4ca7-bba4-9b6008114bb5" }, - "outputs": [ - { - "data": { - "text/plain": [ - "(array([-0.4887986 , -0.92142803]), array([-0.62660694, 0.97699245]))" - ] - }, - "execution_count": 61, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Variables are already seeded, but we might change this behavior in the future\n", "x.eval(), x.eval()" @@ -1796,27 +1472,7 @@ "id": "QqvTnWXMhvW5", "outputId": "aed259f2-7e33-4dc4-f954-46c73e0c14c2" }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.7/dist-packages/IPython/core/interactiveshell.py:2882: FutureWarning: arrays to stack must be passed as a \"sequence\" type such as list or tuple. Support for non-sequence iterables such as generators is deprecated as of NumPy 1.16 and will raise an error in the future.\n", - " exec(code_obj, self.user_global_ns, self.user_ns)\n" - ] - }, - { - "data": { - "text/plain": [ - "array([[ 2.12975761, 0.50227889],\n", - " [-0.49816661, -0.06358336]])" - ] - }, - "execution_count": 62, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# The CORRECT way to draw values is to use `pm.draw`\n", "pm.draw(x, draws=2)" @@ -1851,18 +1507,7 @@ "id": "23JVxTUjRHDy", "outputId": "cc39c67b-ed0d-4ad7-c485-5ae6b0b5d0df" }, - "outputs": [ - { - "data": { - "text/plain": [ - "[x]" - ] - }, - "execution_count": 63, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "model.basic_RVs" ] @@ -1877,20 +1522,7 @@ "id": "jYgwMOzpRcmo", "outputId": "3178ac69-3666-4464-d6d2-dbaacfc51170" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", - " |RandomStateSharedVariable() [id B]\n", - " |TensorConstant{(1,) of 2} [id C]\n", - " |TensorConstant{11} [id D]\n", - " |TensorConstant{(2,) of 0} [id E]\n", - " |TensorConstant{[1. ...70710678]} [id F]\n" - ] - } - ], + "outputs": [], "source": [ "aesara.dprint(model.basic_RVs[0])" ] @@ -1905,18 +1537,7 @@ "id": "8uPz7gDWQ_6k", "outputId": "a6e5f1be-93c5-4afa-ead6-9827edb7cbe0" }, - "outputs": [ - { - "data": { - "text/plain": [ - "{my_x: my_x}" - ] - }, - "execution_count": 65, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Manual variable registration\n", "with pm.Model() as model:\n", @@ -1964,18 +1585,7 @@ "id": "mgntEABvQyhu", "outputId": "319b8e86-388a-4ca5-bd3e-c27a24dd306c" }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'my_x': array(-0.69378353)}" - ] - }, - "execution_count": 66, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "point = model.compute_initial_point()\n", "point" @@ -1991,19 +1601,7 @@ "id": "d3MpBiUlSVGT", "outputId": "bdf43dff-e5b5-4699-b0b5-b8d0602b2064" }, - "outputs": [ - { - "data": { - "text/plain": [ - "my_x -1.16\n", - "Name: Point log-probability, dtype: float64" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "model.point_logps(point)" ] @@ -2029,101 +1627,7 @@ "id": "5omppW4-StBp", "outputId": "8a55d79a-6548-4329-80f0-e59b30123067" }, - "outputs": [ - { - "data": { - "text/plain": [ - "mappingproxy({aeppl.cumsum.MeasurableCumsum: ,\n", - " aeppl.mixture.MixtureRV: ,\n", - " aeppl.scan.MeasurableScan: ,\n", - " aeppl.truncation.CensoredRV: ,\n", - " aesara.tensor.random.basic.BernoulliRV: .logp>,\n", - " aesara.tensor.random.basic.BetaBinomialRV: .logp>,\n", - " aesara.tensor.random.basic.BetaRV: ,\n", - " aesara.tensor.random.basic.BinomialRV: .logp>,\n", - " aesara.tensor.random.basic.CategoricalRV: .logp>,\n", - " aesara.tensor.random.basic.CauchyRV: ,\n", - " aesara.tensor.random.basic.ChiSquareRV: ,\n", - " aesara.tensor.random.basic.DirichletRV: .logp>,\n", - " aesara.tensor.random.basic.ExponentialRV: ,\n", - " aesara.tensor.random.basic.GammaRV: ,\n", - " aesara.tensor.random.basic.GeometricRV: .logp>,\n", - " aesara.tensor.random.basic.GumbelRV: ,\n", - " aesara.tensor.random.basic.HalfCauchyRV: ,\n", - " aesara.tensor.random.basic.HalfNormalRV: ,\n", - " aesara.tensor.random.basic.HyperGeometricRV: .logp>,\n", - " aesara.tensor.random.basic.InvGammaRV: ,\n", - " aesara.tensor.random.basic.LaplaceRV: ,\n", - " aesara.tensor.random.basic.LogNormalRV: ,\n", - " aesara.tensor.random.basic.LogisticRV: ,\n", - " aesara.tensor.random.basic.MultinomialRV: ,\n", - " aesara.tensor.random.basic.MvNormalRV: .logp>,\n", - " aesara.tensor.random.basic.NegBinomialRV: .logp>,\n", - " aesara.tensor.random.basic.NormalRV: ,\n", - " aesara.tensor.random.basic.ParetoRV: ,\n", - " aesara.tensor.random.basic.PoissonRV: .logp>,\n", - " aesara.tensor.random.basic.TransformedBetaRV: .transformed_logprob>,\n", - " aesara.tensor.random.basic.TransformedChiSquareRV: .transformed_logprob>,\n", - " aesara.tensor.random.basic.TransformedDirichletRV: .transformed_logprob>,\n", - " aesara.tensor.random.basic.TransformedExponentialRV: .transformed_logprob>,\n", - " aesara.tensor.random.basic.TransformedGammaRV: .transformed_logprob>,\n", - " aesara.tensor.random.basic.TransformedHalfCauchyRV: .transformed_logprob>,\n", - " aesara.tensor.random.basic.TransformedHalfNormalRV: .transformed_logprob>,\n", - " aesara.tensor.random.basic.TransformedInvGammaRV: .transformed_logprob>,\n", - " aesara.tensor.random.basic.TransformedLogNormalRV: .transformed_logprob>,\n", - " aesara.tensor.random.basic.TransformedParetoRV: .transformed_logprob>,\n", - " aesara.tensor.random.basic.TransformedTriangularRV: .transformed_logprob>,\n", - " aesara.tensor.random.basic.TransformedUniformRV: .transformed_logprob>,\n", - " aesara.tensor.random.basic.TransformedVonMisesRV: .transformed_logprob>,\n", - " aesara.tensor.random.basic.TransformedWaldRV: .transformed_logprob>,\n", - " aesara.tensor.random.basic.TransformedWeibullRV: .transformed_logprob>,\n", - " aesara.tensor.random.basic.TriangularRV: ,\n", - " aesara.tensor.random.basic.UniformRV: ,\n", - " aesara.tensor.random.basic.VonMisesRV: ,\n", - " aesara.tensor.random.basic.WaldRV: ,\n", - " aesara.tensor.random.basic.WeibullRV: ,\n", - " object: ,\n", - " pymc.bart.bart.BARTRV: ,\n", - " pymc.distributions.bound.BoundRV: .logp>,\n", - " pymc.distributions.bound.DiscreteBoundRV: .logp>,\n", - " pymc.distributions.continuous.AsymmetricLaplaceRV: .logp>,\n", - " pymc.distributions.continuous.ExGaussianRV: .logp>,\n", - " pymc.distributions.continuous.FlatRV: .logp>,\n", - " pymc.distributions.continuous.HalfFlatRV: .logp>,\n", - " pymc.distributions.continuous.HalfStudentTRV: .logp>,\n", - " pymc.distributions.continuous.InterpolatedRV: .logp>,\n", - " pymc.distributions.continuous.KumaraswamyRV: .logp>,\n", - " pymc.distributions.continuous.LogitNormalRV: .logp>,\n", - " pymc.distributions.continuous.MoyalRV: .logp>,\n", - " pymc.distributions.continuous.PolyaGammaRV: .logp>,\n", - " pymc.distributions.continuous.RiceRV: .logp>,\n", - " pymc.distributions.continuous.SkewNormalRV: .logp>,\n", - " pymc.distributions.continuous.StudentTRV: .logp>,\n", - " pymc.distributions.continuous.TruncatedNormalRV: .logp>,\n", - " pymc.distributions.continuous.WaldRV: .logp>,\n", - " pymc.distributions.discrete.ConstantRV: .logp>,\n", - " pymc.distributions.discrete.DiscreteUniformRV: .logp>,\n", - " pymc.distributions.discrete.DiscreteWeibullRV: .logp>,\n", - " pymc.distributions.discrete.ZeroInflatedBinomialRV: .logp>,\n", - " pymc.distributions.discrete.ZeroInflatedNegBinomialRV: .logp>,\n", - " pymc.distributions.discrete.ZeroInflatedPoissonRV: .logp>,\n", - " pymc.distributions.multivariate.CARRV: .logp>,\n", - " pymc.distributions.multivariate.DirichletMultinomialRV: .logp>,\n", - " pymc.distributions.multivariate.KroneckerNormalRV: .logp>,\n", - " pymc.distributions.multivariate.LKJCorrRV: .logp>,\n", - " pymc.distributions.multivariate.MatrixNormalRV: .logp>,\n", - " pymc.distributions.multivariate.MultinomialRV: .logp>,\n", - " pymc.distributions.multivariate.MvStudentTRV: .logp>,\n", - " pymc.distributions.multivariate.StickBreakingWeightsRV: .logp>,\n", - " pymc.distributions.multivariate.WishartRV: .logp>,\n", - " pymc.distributions.multivariate._LKJCholeskyCovRV: .logp>})" - ] - }, - "execution_count": 69, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "_logprob.registry" ] @@ -2138,18 +1642,7 @@ "id": "Gyp98lINTAOz", "outputId": "91c514a6-1168-4f64-97ff-efe5d0f139bc" }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 70, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "x = pm.Normal.dist(size=2)\n", "x.owner.op" @@ -2165,41 +1658,7 @@ "id": "Am5CBIEoSt1j", "outputId": "c87b47f8-5b41-4102-ed8b-c10de2647c31" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Check{sigma > 0} [id A] '' \n", - " |Elemwise{sub,no_inplace} [id B] '' \n", - " | |Elemwise{sub,no_inplace} [id C] '' \n", - " | | |Elemwise{mul,no_inplace} [id D] '' \n", - " | | | |InplaceDimShuffle{x} [id E] '' \n", - " | | | | |TensorConstant{-0.5} [id F]\n", - " | | | |Elemwise{pow,no_inplace} [id G] '' \n", - " | | | |Elemwise{true_div,no_inplace} [id H] '' \n", - " | | | | |Elemwise{sub,no_inplace} [id I] '' \n", - " | | | | | |TensorConstant{(2,) of 0} [id J]\n", - " | | | | | |InplaceDimShuffle{x} [id K] '' \n", - " | | | | | |TensorConstant{0} [id L]\n", - " | | | | |InplaceDimShuffle{x} [id M] '' \n", - " | | | | |TensorConstant{1.0} [id N]\n", - " | | | |InplaceDimShuffle{x} [id O] '' \n", - " | | | |TensorConstant{2} [id P]\n", - " | | |InplaceDimShuffle{x} [id Q] '' \n", - " | | |Elemwise{log,no_inplace} [id R] '' \n", - " | | |Elemwise{sqrt,no_inplace} [id S] '' \n", - " | | |TensorConstant{6.283185307179586} [id T]\n", - " | |InplaceDimShuffle{x} [id U] '' \n", - " | |Elemwise{log,no_inplace} [id V] '' \n", - " | |TensorConstant{1.0} [id N]\n", - " |All [id W] '' \n", - " |Elemwise{gt,no_inplace} [id X] '' \n", - " |TensorConstant{1.0} [id N]\n", - " |TensorConstant{0.0} [id Y]\n" - ] - } - ], + "outputs": [], "source": [ "x_logp = _logprob(x.owner.op, ([0, 0],), *x.owner.inputs)\n", "aesara.dprint(x_logp)" @@ -2215,18 +1674,7 @@ "id": "iAYEgYRwTG7i", "outputId": "ceb009b4-e2e7-4cb5-d706-fa1d34b2557a" }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([-0.91893853, -0.91893853])" - ] - }, - "execution_count": 72, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "x_logp.eval()" ] @@ -2241,18 +1689,7 @@ "id": "zCmmLzwfTL9N", "outputId": "7dc9cd0e-5c42-4137-ff88-de5d286f81b8" }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([-0.91893853, -0.91893853])" - ] - }, - "execution_count": 73, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Helper friendly pymc function to access logp\n", "# Takes RV + value as input\n", @@ -2269,15 +1706,7 @@ "id": "oN1FcbE1V2it", "outputId": "a0cd9e45-2441-42e1-affe-18600b648d61" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Logprob method not implemented for CumOp{None, add}\n" - ] - } - ], + "outputs": [], "source": [ "# What about other types of Ops?\n", "try:\n", @@ -2318,20 +1747,7 @@ "id": "7Sznx-MLs691", "outputId": "1dac8ba2-899a-47f7-d175-04502b73fd76" }, - "outputs": [ - { - "data": { - "text/plain": [ - "(,\n", - " array([ 0.81645943, -1.10072665, -1.02026051, -0.38992712, 0.32378923]),\n", - " -1.7001885332046727)" - ] - }, - "execution_count": 83, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# RV and value variables can be observed in these scipy operations\n", "(\n", @@ -2364,18 +1780,7 @@ "id": "iXnvzBqorsX-", "outputId": "bb779d64-5c1b-4233-9131-f64f5dd0e77a" }, - "outputs": [ - { - "data": { - "text/plain": [ - "{my_x: my_x}" - ] - }, - "execution_count": 76, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Each model RV is related to a \"value variable\"\n", "model.rvs_to_values" @@ -2391,18 +1796,7 @@ "id": "xsqHFQ0srsX6", "outputId": "adfc9a9d-c411-4551-f534-c944bb9e1610" }, - "outputs": [ - { - "data": { - "text/plain": [ - "[my_x]" - ] - }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "model.value_vars" ] @@ -2417,15 +1811,7 @@ "id": "i3ME6Y41rsX9", "outputId": "4f075f4f-29d6-4516-ec7a-1bfffa5998ea" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "my_x [id A]\n" - ] - } - ], + "outputs": [], "source": [ "# These just an input variable (constants inputs if observed)\n", "# used in the logp graph\n", @@ -2453,18 +1839,7 @@ "id": "Y2BIoKk5U4fQ", "outputId": "a9b67ac9-9fc0-4da8-dabf-90ed7d5b80e9" }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([-10.22579135, 9.08106147])" - ] - }, - "execution_count": 86, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "sigma_value = m.rvs_to_values[sigma]\n", "x_value = m.rvs_to_values[x]\n", @@ -2481,18 +1856,7 @@ "id": "wFAUqf0qU50W", "outputId": "3480b833-f2c7-43a3-d87f-b2149f67351f" }, - "outputs": [ - { - "data": { - "text/plain": [ - "[array(-10.22579135), array(9.08106147)]" - ] - }, - "execution_count": 87, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# model compile_logp is a helpers that creates a compiled aesara function\n", "# of the model logp, which takes a dictionary of {value variable name : value} as inputs\n", @@ -2532,19 +1896,7 @@ "id": "1JX8cFt8z2b1", "outputId": "a87d5d8c-ffed-43cf-fbd2-1ba885911a04" }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'mu': array(0.44339106),\n", - " 'sigma_log__': array([0. , 0.69314718, 1.09861229])}" - ] - }, - "execution_count": 89, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# initial points\n", "m.compute_initial_point(seed=314)" @@ -2560,18 +1912,7 @@ "id": "VdU6Eev9z-2F", "outputId": "787ee742-6e73-44ee-e3e9-5010607405f1" }, - "outputs": [ - { - "data": { - "text/plain": [ - "[array(-0.91893853), array([-0.72579135, -0.72579135, -0.72579135])]" - ] - }, - "execution_count": 90, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# logp\n", "logp_graph = m.logpt(vars=[mu, sigma], jacobian=False, sum=False)\n", @@ -2589,18 +1930,7 @@ "id": "0wUIYHMd0e3E", "outputId": "1afd7331-8ded-4338-f6ea-d5449a0b1ae8" }, - "outputs": [ - { - "data": { - "text/plain": [ - "[array(-0.91893853), array([-0.72579135, -0.72579135, -0.72579135])]" - ] - }, - "execution_count": 91, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# logp\n", "logp_fn = m.compile_logp(vars=[mu, sigma], jacobian=False, sum=False)\n", @@ -2617,18 +1947,7 @@ "id": "fahwjKyu0YfR", "outputId": "80ec9022-3c86-4110-e35e-70228aa16f88" }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([3.])" - ] - }, - "execution_count": 92, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# dlogp\n", "# m.dlogpt(...)\n", @@ -2646,18 +1965,7 @@ "id": "gW9DMRK20uyF", "outputId": "1532a7e7-3319-4e65-f834-f1335ab1147f" }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[4.]])" - ] - }, - "execution_count": 93, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# d2logp\n", "d2logp_fn = m.compile_d2logp(vars=[mu])\n", @@ -2731,18 +2039,7 @@ "id": "BQTG1HGmZQKd", "outputId": "aa938c12-dca7-41fd-d753-d9ec32d189ae" }, - "outputs": [ - { - "data": { - "text/plain": [ - "{x: x_logprob, y: y_logprob}" - ] - }, - "execution_count": 95, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "x = at.random.normal(name='x')\n", "y = at.random.normal(x + 5, name='y', size=2)\n", @@ -2763,18 +2060,7 @@ "id": "Ac_p7H8VZmOd", "outputId": "bb170324-7647-4953-ef23-215c195570cb" }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([-13.41893853, -0.91893853])" - ] - }, - "execution_count": 96, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "logp[y_value].eval({x_value: 5, y_value: [5, 10]})" ] @@ -2798,18 +2084,7 @@ "id": "JDCM-tNDZ17z", "outputId": "64be3438-b00d-4c76-d891-e795fac299d4" }, - "outputs": [ - { - "data": { - "text/plain": [ - "{mu: mu_logprob, rw: rw_logprob}" - ] - }, - "execution_count": 97, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "mu = at.random.normal(name='mu')\n", "innov = at.random.normal(mu, size=10, name='innov')\n", @@ -2831,19 +2106,7 @@ "id": "tdU2hydcZsj5", "outputId": "5dbb505c-4dfa-45d7-d336-63a772f69bb2" }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([-1.41893853, -0.91893853, -0.91893853, -0.91893853, -0.91893853,\n", - " -0.91893853, -0.91893853, -0.91893853, -0.91893853, -0.91893853])" - ] - }, - "execution_count": 98, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "logp[rw_value].eval({mu_value: 1, rw_value: np.arange(10)})" ] @@ -2911,19 +2174,7 @@ "id": "FhqBAl6x2zO1", "outputId": "178a89f2-1aba-4b0d-9416-856079ef2db0" }, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n\n\n\n\n%3\n\n\nclustertrials (10)\n\ntrials (10)\n\n\n\nmix\n\nmix\n~\nDeterministic\n\n\n\nidx\n\nidx\n~\nCategorical\n\n\n\nidx->mix\n\n\n\n\n\n", - "text/plain": [ - "" - ] - }, - "execution_count": 101, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "pm.model_to_graphviz(m)" ] @@ -2938,28 +2189,7 @@ "id": "AqVrkUSa22VJ", "outputId": "ea61c9f3-a55a-4847-cf88-4c255828a910" }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.7/dist-packages/pymc/initial_point.py:283: UserWarning: Moment not defined for variable mix of type AdvancedSubtensor, defaulting to a draw from the prior. This can lead to difficulties during tuning. You can manually define an initval or implement a get_moment dispatched function for this distribution.\n", - " UserWarning,\n" - ] - }, - { - "data": { - "text/plain": [ - "{'idx': array([2, 2, 2, 2, 2, 2, 2, 2, 2, 2]),\n", - " 'mix': array([6.99933659, 6.99933659, 6.99933659, 6.99933659, 6.99933659,\n", - " 6.99933659, 6.99933659, 6.99933659, 6.99933659, 6.99933659])}" - ] - }, - "execution_count": 102, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "m.compute_initial_point(0)" ] @@ -2986,18 +2216,7 @@ "id": "QgEzJatT3o7K", "outputId": "49ee9556-604c-4b8d-9c55-1c0300f226bc" }, - "outputs": [ - { - "data": { - "text/plain": [ - "(500, 10)" - ] - }, - "execution_count": 104, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "prior['mix'].shape" ] @@ -3013,20 +2232,7 @@ "id": "vybLX6zQ3I60", "outputId": "21bd01c3-d0c0-4b3b-b422-eb095108e65e" }, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.hist(prior['mix'].reshape(-1), bins=50);" ] @@ -3067,20 +2273,7 @@ "id": "CuPKZ1YX5Ymp", "outputId": "55df0eaf-2ea2-4a10-d8bd-7915a4a4a9b7" }, - "outputs": [ - { - "data": { - "text/plain": [ - "idx -5.11\n", - "mix -26.82\n", - "Name: Point log-probability, dtype: float64" - ] - }, - "execution_count": 107, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "m.point_logps()" ] @@ -3096,112 +2289,7 @@ "id": "U7_uxbDU4RE2", "outputId": "9fbb36da-add3-48a3-d1e4-040b350073d8" }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Sequential sampling (2 chains in 1 job)\n", - "INFO:pymc:Sequential sampling (2 chains in 1 job)\n", - "CategoricalGibbsMetropolis: [idx]\n", - "INFO:pymc:CategoricalGibbsMetropolis: [idx]\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - " \n", - " 100.00% [2000/2000 00:04<00:00 Sampling chain 0, 0 divergences]\n", - "
\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - " \n", - " 100.00% [2000/2000 00:04<00:00 Sampling chain 1, 0 divergences]\n", - "
\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Sampling 2 chains for 1_000 tune and 1_000 draw iterations (2_000 + 2_000 draws total) took 9 seconds.\n", - "INFO:pymc:Sampling 2 chains for 1_000 tune and 1_000 draw iterations (2_000 + 2_000 draws total) took 9 seconds.\n", - "/usr/local/lib/python3.7/dist-packages/arviz/stats/diagnostics.py:561: RuntimeWarning: invalid value encountered in double_scalars\n", - " (between_chain_variance / within_chain_variance + num_samples - 1) / (num_samples)\n", - "The number of effective samples is smaller than 25% for some parameters.\n", - "INFO:pymc:The number of effective samples is smaller than 25% for some parameters.\n" - ] - } - ], + "outputs": [], "source": [ "with m:\n", " trace = pm.sample(return_inferencedata=False)" @@ -3217,18 +2305,7 @@ "id": "LMMA-8G65m1i", "outputId": "63176de3-0760-4175-9b56-749a8d4256ff" }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([2, 2, 1, 2, 2, 1, 1, 2, 1, 2])" - ] - }, - "execution_count": 109, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Posterior indexes\n", "np.median(trace['idx'], axis=0).astype(int)" @@ -3244,18 +2321,7 @@ "id": "rB0qC7LL6MWp", "outputId": "2b34ed25-f083-4416-ac9d-e817637421a5" }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([2, 2, 1, 2, 2, 1, 1, 2, 1, 2])" - ] - }, - "execution_count": 110, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# True indexes\n", "prior['idx'][0]" From 3c38ca7375893cd4875fe7d5195ab714023a93b7 Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Fri, 1 Apr 2022 15:38:06 +0200 Subject: [PATCH 03/30] random variables section --- docs/intro_pymc_codebase.ipynb | 658 ++++++++++++++++++++++++--------- 1 file changed, 480 insertions(+), 178 deletions(-) diff --git a/docs/intro_pymc_codebase.ipynb b/docs/intro_pymc_codebase.ipynb index 011ddc5c2d..9c79a11e77 100644 --- a/docs/intro_pymc_codebase.ipynb +++ b/docs/intro_pymc_codebase.ipynb @@ -75,7 +75,7 @@ "id": "ru2m_lFK7Atx" }, "source": [ - "# Aesara\n", + "## Intro to Aesara\n", "\n", "We start by looking into [aesara](https://github.com/aesara-devs/aesara/). According to their documentation\n", "\n", @@ -180,7 +180,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 4, @@ -470,7 +470,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -564,7 +564,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 14, @@ -609,7 +609,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 15, @@ -698,7 +698,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 17, @@ -751,25 +751,25 @@ "id": "3drOlTjZxDMF" }, "source": [ - "# RandomVariables" + "## Aesara RandomVariables\n", + "\n", + "Now that we have seen aesara's basics we want to move in the direction of random variables. Here are the modules we want to cover:\n", + "\n", + "* [Random Module](https://github.com/aesara-devs/aesara/tree/main/aesara/tensor/random)\n", + "* [RandomVariable Op](https://github.com/aesara-devs/aesara/blob/main/aesara/tensor/random/op.py)\n", + "* [Random Variables](https://github.com/aesara-devs/aesara/blob/main/aesara/tensor/random/basic.py)" ] }, { "cell_type": "markdown", - "metadata": { - "id": "u844j3e6Dgmo" - }, + "metadata": {}, "source": [ - "**Source code**\n", - "\n", - "* [Random Module](https://github.com/aesara-devs/aesara/tree/main/aesara/tensor/random)\n", - "* [RandomVariable Op](https://github.com/aesara-devs/aesara/blob/main/aesara/tensor/random/op.py)\n", - "* [Random Variables](https://github.com/aesara-devs/aesara/blob/main/aesara/tensor/random/basic.py)" + "How To generate random numbers in `numpy`?" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -777,26 +777,70 @@ "id": "THRvGbP1WmhH", "outputId": "c4f044e6-83c3-4c4c-9ecf-8714efae6f36" }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "rng = np.random.default_rng()\n", - "rng.normal()" + "\n", + "a = rng.normal(loc=0, scale=1, size=1000)\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.hist(a, bins=15)\n", + "ax.set(\n", + " title=\"Samples from a normal distribution\", xlabel=\"x\", ylabel=\"frequency\"\n", + ");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's do it in aesara." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": { "id": "o0hVLDiBwqhg" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "x type: TensorType(float64, ())\n", + "x name = x\n", + "\n" + ] + } + ], "source": [ - "x = at.random.normal(loc=0.0, scale=1.0, size=None, name='x')" + "x = at.random.normal(loc=0.0, scale=1.0, size=None, name=\"x\")\n", + "\n", + "print(f\"\"\"\n", + "x type: {x.type}\n", + "x name = {x.name}\n", + "\"\"\"\n", + ")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -804,7 +848,30 @@ "id": "3hQKQ9IGxMW4", "outputId": "96e4fd79-fd3b-47d6-a9f7-b0e55a33999b" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", + " |RandomGeneratorSharedVariable() [id B]\n", + " |TensorConstant{[]} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{0.0} [id E]\n", + " |TensorConstant{1.0} [id F]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "aesara.dprint(x)" ] @@ -830,27 +897,56 @@ "id": "k7spOYvvTdZL" }, "source": [ - "## Some meta-properties worth knowing about" + "### Some meta-properties worth knowing about\n", + "\n", + "The `op` of `x`'s `owner` is:" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "5F7vC0jUTbq5", - "outputId": "7a74bf24-e3f7-448e-cbaa-0e71b01bb8c8" - }, - "outputs": [], + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "op = x.owner.op\n", - "(\n", - " op.ndim_supp, # Dimension of draws (0=scalar, 1=vector, 2=matrix, 3=haha)\n", - " op.ndims_params, # Dimension of each parameter\n", - " op.dtype, # Int64/FloatX\n", - ")" + "\n", + "op" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "op ndim_supp = 0 (Dimension of draws (0=scalar, 1=vector, 2=matrix, etc.))\n", + "op ndims_params = (0, 0) (Dimension of each parameter)\n", + "op.dtype = floatX\n", + "\n" + ] + } + ], + "source": [ + "print(f\"\"\"\n", + "op ndim_supp = {op.ndim_supp} (Dimension of draws (0=scalar, 1=vector, 2=matrix, etc.))\n", + "op ndims_params = {op.ndims_params} (Dimension of each parameter)\n", + "op.dtype = {op.dtype}\n", + "\"\"\")" ] }, { @@ -859,12 +955,14 @@ "id": "qIMN2gHGzKof" }, "source": [ - "## RandomVariables use SharedVariables for seeding" + "### RandomVariables use `SharedVariables` for seeding\n", + "\n", + "By default draws don't change between calls" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -872,30 +970,39 @@ "id": "fq84NPrqxOfn", "outputId": "999c994c-9a5e-4805-d631-190bff5f69ee" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sample 0: -0.03461370806435829\n", + "sample 1: -0.03461370806435829\n", + "sample 2: -0.03461370806435829\n", + "sample 3: -0.03461370806435829\n", + "sample 4: -0.03461370806435829\n", + "sample 5: -0.03461370806435829\n", + "sample 6: -0.03461370806435829\n", + "sample 7: -0.03461370806435829\n", + "sample 8: -0.03461370806435829\n", + "sample 9: -0.03461370806435829\n" + ] + } + ], "source": [ - "x.eval()" + "for i in range(10):\n", + " print(f\"sample {i}: {x.eval()}\")" ] }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "CO2cbtMDxSLI", - "outputId": "578cc827-e0b1-4d23-d040-ca414f7375b9" - }, - "outputs": [], + "cell_type": "markdown", + "metadata": {}, "source": [ - "# By default draws don't change between calls\n", - "x.eval()" + "This is because the `RandomOp` is a deterministic operation, given it's inputs. One of these inputs is a `RandomGenerator/State`." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -903,16 +1010,35 @@ "id": "0X_A-msDzJaf", "outputId": "f0939974-627c-462c-bc44-7c70133211c4" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "x owner = RandomGeneratorSharedVariable()\n", + "x owner's input = RandomGeneratorType\n", + "\n" + ] + } + ], "source": [ - "# This is because the RandomOp is a deterministic operation, given it's inputs\n", - "# One of these inputs is a RandomGenerator/State\n", - "x.owner.inputs[0], x.owner.inputs[0].type" + "print(f\"\"\"\n", + "x owner = {x.owner.inputs[0]}\n", + "x owner's input = {x.owner.inputs[0].type}\n", + "\"\"\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This input is created by default, but can be passed explicitly as well" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -920,18 +1046,47 @@ "id": "8IhwIQ9oxcxN", "outputId": "a36d59cc-c419-468c-9229-d5010e165cbf" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y' \n", + " |RandomGeneratorSharedVariable() [id B]\n", + " |TensorConstant{(1,) of 2} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{0} [id E]\n", + " |TensorConstant{1} [id F]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# This input is created by default, but can be passed explicitly as well\n", "rng = np.random.default_rng(seed=123)\n", - "shared_rng = aesara.shared(rng, borrow=True)\n", - "y = at.random.normal(0, 1, rng=shared_rng, size=2, name=\"y\")\n", + "shared_rng = aesara.shared(value=rng, borrow=True)\n", + "y = at.random.normal(loc=0, scale=1, rng=shared_rng, size=2, name=\"y\")\n", "aesara.dprint(y)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Each draw in the same call is unique, but these again don't change across calls:" + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -939,73 +1094,100 @@ "id": "193YxZy2xx_N", "outputId": "f9f4ed62-c08f-4b0f-877a-7a3111787349" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sample 0: [-0.98912135 -0.36778665]\n", + "sample 1: [-0.98912135 -0.36778665]\n", + "sample 2: [-0.98912135 -0.36778665]\n", + "sample 3: [-0.98912135 -0.36778665]\n", + "sample 4: [-0.98912135 -0.36778665]\n", + "sample 5: [-0.98912135 -0.36778665]\n", + "sample 6: [-0.98912135 -0.36778665]\n", + "sample 7: [-0.98912135 -0.36778665]\n", + "sample 8: [-0.98912135 -0.36778665]\n", + "sample 9: [-0.98912135 -0.36778665]\n" + ] + } + ], "source": [ - "# Each draw in the same call is unique, but these again don't change across calls\n", - "y.eval(), y.eval()" + "for i in range(10):\n", + " print(f\"sample {i}: {y.eval()}\")" ] }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "y0XMPhCUx4iJ", - "outputId": "be1bd5e0-acbf-4251-8e99-c0ccd62b9eda" - }, - "outputs": [], + "cell_type": "markdown", + "metadata": {}, "source": [ - "# We will make the generator advance by one, which will make the draws \"cycle\" by one\n", - "rng.bit_generator.advance(1)" + "How to generate different samples? We can make the generator advance by one, which will make the draws \"cycle\" by one." ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "dRLcbgByySdF", - "outputId": "b536e228-306f-4bc5-f50c-674805b0c360" - }, - "outputs": [], + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sample 0: [-0.36778665 1.28792526]\n", + "sample 1: [1.28792526 0.19397442]\n", + "sample 2: [0.19397442 0.9202309 ]\n", + "sample 3: [0.9202309 0.57710379]\n", + "sample 4: [ 0.57710379 -0.63646365]\n", + "sample 5: [-0.63646365 0.54195222]\n", + "sample 6: [ 0.54195222 -0.31659545]\n", + "sample 7: [-0.31659545 -0.32238912]\n", + "sample 8: [-0.32238912 0.09716732]\n", + "sample 9: [ 0.09716732 -1.52593041]\n" + ] + } + ], "source": [ - "y.eval(), y.eval()" + "for i in range(10):\n", + " rng.bit_generator.advance(1)\n", + " print(f\"sample {i}: {y.eval()}\")" ] }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "vtl1x93cyVA9", - "outputId": "25d2372b-b013-4e7b-cdd3-c70326f71556" - }, - "outputs": [], + "cell_type": "markdown", + "metadata": {}, "source": [ - "# And again\n", - "rng.bit_generator.advance(1)" + "Now the draws are completely different than the initial ones." ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "TqeAbfUPybGI", - "outputId": "bf343da1-0736-4e4a-80b9-67ebe83adb66" - }, - "outputs": [], + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ - "# Now the draws are completely different than the initial ones\n", - "y.eval(), y.eval()" + "samples = []\n", + "for _ in range(1000):\n", + " rng.bit_generator.advance(1)\n", + " samples.append(y.eval()[0])\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.hist(samples, bins=15)\n", + "ax.set(\n", + " title=\"Samples from a normal distribution\", xlabel=\"x\", ylabel=\"frequency\"\n", + ");" ] }, { @@ -1014,14 +1196,14 @@ "id": "aMM0sJy6z7Ur" }, "source": [ - "## Updating the RandomState manually is cumbersome\n", + "### Updating the `RandomState` manually is cumbersome\n", "\n", - "So RandomVariables do it for us" + "So `RandomVariable`s do it for us" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1029,34 +1211,74 @@ "id": "YwmH0DJ40bTj", "outputId": "a9ccd2a6-7d76-49e1-d0ce-c594739f91ea" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z' \n", + " |RandomGeneratorSharedVariable() [id B]\n", + " |TensorConstant{[]} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{0} [id E]\n", + " |TensorConstant{1} [id F]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "rng = np.random.default_rng(seed=123)\n", - "shared_rng = aesara.shared(rng, borrow=True)\n", - "z = at.random.normal(0, 1, rng=shared_rng, name=\"z\")\n", + "shared_rng = aesara.shared(value=rng, borrow=True)\n", + "z = at.random.normal(loc=0, scale=1, rng=shared_rng, name=\"z\")\n", "\n", - "# Notice that there are 2 outputs\n", - "z.owner.outputs" + "aesara.dprint(z)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that there are 2 outputs" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "SAIGub1C7gPN", - "outputId": "2e1246c4-ef8f-4056-c056-1a5e6c52a402" - }, - "outputs": [], + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "output: normal_rv{0, (0, 0), floatX, False}.0\n", + "output: z\n" + ] + } + ], "source": [ - "aesara.dprint(z.owner.outputs)" + "for output in z.owner.outputs:\n", + " print(f\"output: {output}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first one is of `RandomGeneratorType`." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1064,68 +1286,97 @@ "id": "RmbkBxYbxY1r", "outputId": "1a5ebe21-42d7-4e37-b38a-fa57545c0dc0" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "RandomGeneratorType" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "next_rng = x.owner.outputs[0]\n", + "next_rng = z.owner.outputs[0]\n", "next_rng.type" ] }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "XMRJpNvG00eT", - "outputId": "b4188341-865b-437e-ad27-72fbbe6bd6fc" - }, - "outputs": [], + "cell_type": "markdown", + "metadata": {}, "source": [ - "z.eval(), z.eval()" + "From the discussion above it is not surprising that evaluating `z` will yield to the same result:" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "ffNFDcu6z5Sk", - "outputId": "0f0d95b8-313a-46bd-fd57-2697f5b762e1" + "id": "XMRJpNvG00eT", + "outputId": "b4188341-865b-437e-ad27-72fbbe6bd6fc" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sample 0: -0.9891213503478509\n", + "sample 1: -0.9891213503478509\n", + "sample 2: -0.9891213503478509\n", + "sample 3: -0.9891213503478509\n", + "sample 4: -0.9891213503478509\n", + "sample 5: -0.9891213503478509\n", + "sample 6: -0.9891213503478509\n", + "sample 7: -0.9891213503478509\n", + "sample 8: -0.9891213503478509\n", + "sample 9: -0.9891213503478509\n" + ] + } + ], "source": [ - "next_rng_value = next_rng.eval()\n", - "next_rng_value" + "for i in range(10):\n", + " print(f\"sample {i}: {z.eval()}\")" ] }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "a_emRwwl0uiR" - }, - "outputs": [], + "cell_type": "markdown", + "metadata": {}, "source": [ - "# We can set the input RNG to the next RNG state returned by the RandomVariable\n", - "shared_rng.set_value(next_rng_value)" + "We can set the input RNG to the next RNG state returned by the `RandomVariable`" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "C-Gu-EdQ0_Hj", - "outputId": "39d63314-18d0-40aa-c441-b7792db58cf2" - }, - "outputs": [], + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sample 0: -0.3677866514678832\n", + "sample 1: 1.2879252612892487\n", + "sample 2: 0.1939744191326132\n", + "sample 3: 0.9202308996398569\n", + "sample 4: 0.5771037912572513\n", + "sample 5: -0.6364636463709805\n", + "sample 6: 0.5419522204102933\n", + "sample 7: -0.3165954511658161\n", + "sample 8: -0.32238911615896015\n", + "sample 9: 0.09716731867045719\n" + ] + } + ], "source": [ - "z.eval(), z.eval()" + "for i in range(10):\n", + " next_rng_value = next_rng.eval()\n", + " shared_rng.set_value(next_rng_value)\n", + " print(f\"sample {i}: {z.eval()}\")" ] }, { @@ -1134,14 +1385,14 @@ "id": "WY6bUgqZztC3" }, "source": [ - "## Almost there\n", + "### Almost there\n", "\n", "The final step is to make use of default_updates in shared variables" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": { "id": "ZCSTHK4fzpYB" }, @@ -1149,26 +1400,31 @@ "source": [ "rng = np.random.default_rng(seed=123)\n", "shared_rng = aesara.shared(rng, borrow=True)\n", - "w = at.random.normal(0, 1, rng=shared_rng, name=\"w\")\n", + "w = at.random.normal(loc=0, scale=1, rng=shared_rng, name=\"w\")\n", "next_rng = w.owner.outputs[0]" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We set a symbolic update. Every time the function is called, the value of rng shared variable is set to the first output (the next rng state) of the random variable." + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, "metadata": { "id": "42jYYcrn77wJ" }, "outputs": [], "source": [ - "# We set a symbolic update. Every time the function is called, the value of rng shared\n", - "# variable is set to the first output (the next rng state) of the random variable\n", "shared_rng.default_update = next_rng" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1176,9 +1432,55 @@ "id": "YgSF80agyiqs", "outputId": "116bdc4e-5594-4fef-d238-353feeefa2c8" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sample 0: -0.9891213503478509\n", + "sample 1: -0.3677866514678832\n", + "sample 2: 1.2879252612892487\n", + "sample 3: 0.1939744191326132\n", + "sample 4: 0.9202308996398569\n", + "sample 5: 0.5771037912572513\n", + "sample 6: -0.6364636463709805\n", + "sample 7: 0.5419522204102933\n", + "sample 8: -0.3165954511658161\n", + "sample 9: -0.32238911615896015\n" + ] + } + ], "source": [ - "w.eval(), w.eval()" + "for i in range(10):\n", + " print(f\"sample {i}: {w.eval()}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "samples = np.array([w.eval() for _ in range(1000)])\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.hist(samples, bins=15)\n", + "ax.set(\n", + " title=\"Samples from a normal distribution\", xlabel=\"x\", ylabel=\"frequency\"\n", + ");" ] }, { From 839495dc3b06efaad278c0bb9d93c27427f15565 Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Wed, 20 Apr 2022 20:12:32 +0200 Subject: [PATCH 04/30] update --- docs/intro_pymc_codebase.ipynb | 621 +++++++++++++++++++++++++++------ 1 file changed, 515 insertions(+), 106 deletions(-) diff --git a/docs/intro_pymc_codebase.ipynb b/docs/intro_pymc_codebase.ipynb index 9c79a11e77..bd43d32d90 100644 --- a/docs/intro_pymc_codebase.ipynb +++ b/docs/intro_pymc_codebase.ipynb @@ -180,7 +180,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 4, @@ -470,7 +470,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -564,7 +564,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 14, @@ -609,7 +609,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 15, @@ -698,7 +698,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 17, @@ -780,7 +780,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEWCAYAAACJ0YulAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAa9ElEQVR4nO3de5hcdZ3n8feHgNwRNA1ytQHxgsiENeKut8mMKAgMqI+MZFHxGpmBWX3GmRVE5SKMeEFwdNQFiaAIyCyysgIjGVAZdVACRggXNUA0ITFpEjBclDXhs3+cXx+Kpjtd3amq053+vJ6nntS5f091pT51fufU78g2ERERAJs0XUBEREwcCYWIiKglFCIiopZQiIiIWkIhIiJqCYWIiKglFGLcJJ0q6eIOr1OSvibpQUk/6+S6pxJJ75T0ozHMv1jSQeX5RyR9tYO1PCJpr/L8QklndHDdX5H0sU6tLxIKk5KkV0n6iaTfS1ot6ceSXtZ0XR3yKuB1wG62D2y6mKnI9j/Zfu9o80n6gaRR57O9je17N7Su4YLO9nG2P7Gh644nbdp0ATE2krYDvgv8DXA58Azg1cDjTdbVQc8FFtt+dLiJkja1vbbHNXXdxrhfG+M+TQU5Uph8ng9g+1Lb62z/wfZ1tm8DkLS3pBskrZL0gKRvStp+cOHSTPCPkm6T9KikCyTtJOlaSQ9L+ndJO5R5+yVZ0hxJyyQtl/ShkQqT9F/LEcxDkn4haVbLtHdKurds4z5Jxwyz/HuArwL/rTQ5nCZplqSlkj4s6XfA1yRtLuncUtOy8nzzso7B+f+npJWl5jdKOlTSr8qR1UfWsw+HSfq5pDWSlkg6dT3zDm7rQy3belfL9GdK+rqkAUm/kfRRSZu0vB4/lnSOpNXAqaVp5Uvlb/FImf6csn8PSrpb0gEt6z9R0j3lNb1T0ptGqnWY2t9ealol6eQh0+pmQUlbSLq4zPeQpJvL++VMqi8jXyy1frHMb0nHS/o18OuWcc9r2cR0SfNK3T+U9Nwy3+D7bdOWWn4g6b2SXgR8hSffGw+V6U9pjpL0PkmLyt/5Kkm7tEyzpOMk/bq8nv8iSe2+ZlOG7Twm0QPYDlgFXAS8AdhhyPTnUTW/bA70ATcC57ZMXwzcBOwE7AqsBG4FDijL3ACcUubtBwxcCmwNvAQYAA4q008FLi7Pdy11HUr1ZeN1ZbivLLsGeEGZd2fgxSPs3zuBH7UMzwLWAp8q9W0JnF72Ycey/p8Anxgy/8eBzYD3lZovAbYFXgz8EdhrhO3PKvu5CbA/sAJ443rmXVvq2azs+2ODfxPg68B3ynb7gV8B72nZz7XA31EdsW8JXAg8ALwU2KL8Le4D3gFMA84Avt+y/aOAXUqtbwUeBXYe7nUcUve+wCPAa8pr+rlSy3B/1/cD/xfYqtTwUmC7Mu0HwHuHrNvAPOBZwJYt455Xnl8IPNyy7c8P1smT77dNW9ZXb2O4fSrrO6M8/8vy+v2Xsu4vADcOqe27wPbAHlTvi0Oa/j890R45UphkbK+hanc3cD4wUL4R7VSmL7I9z/bjtgeo/sP/+ZDVfMH2Ctv3A/8B/NT2z20/DlxJFRCtTrP9qO3bga8Bs4cp7W3ANbavsf2E7XnAfKoPSoAngP0kbWl7ue07xrDbT1AF1eO2/wAcA5xue2XZx9OAt7fM/yfgTNt/Ai4DpgOft/1w2e4dVB/4T2P7B7ZvL/twG1UgDn39Wv2p1PIn29dQfdi+QNI0qg/qk8p2FwNnD6lzme0v2F5b9gvgStu32P4j1d/ij7a/bnsd8C1a/ja2/9X2slLrt6i+mbdzHuYtwHdt31j+5h+jeo1H2r9nU32oryu1rRll/Z+0vbpln4a6umXbJ1N9+9+9jbpHcwww1/atZd0nlXX3t8xzlu2HbP8W+D4wowPb3agkFCYh23fZfqft3YD9qL4tngsgaUdJl0m6X9Ia4GKqD8VWK1qe/2GY4W2GzL+k5flvyvaGei5wVGlieKgc3r+K6pvro1QfkMcByyVdLemF7e8xA+VDctAupY6RalpVPkQH9wdG30cAJL1c0vdLk8/vS81DX79Wq/zUdvPHyrqnU53vGVrnri3Dra/roLb/NpLeIWlBy+u93yi1Dtqlddvl77NqhHm/AXwPuKw01X1a0majrH+4/Rp2uu1HgNUM/54aq6e8L8q6V/HU1/x3Lc8H/1bRIqEwydm+m+oQer8y6pNURxH7296O6hv8hrabtn6L2wNYNsw8S4Bv2N6+5bG17bNKnd+z/TqqpqO7qY5y2jW0K99lVCE0Wk3jcQlwFbC77WdStWOP5/V7gOpb9tA6728ZHncXxaUd/nzgBODZtrcHFtJerctp+ZtK2orqaOBpyhHQabb3BV4BHE7VnLW++kfbr9Ztb0PV1LSMqvkLqqaqQc8Zw3qf8r6QtDXVft0/4hLxNAmFSUbSC8uJzd3K8O5UzTk3lVm2pWrCeEjSrsA/dmCzH5O0laQXA++iasYY6mLgryQdLGlaOUE5S9Ju5cTkEeU/6eOlvnXDrKNdlwIfldQnaTrV+YNO/V5iW2C17T9KOhD47+NZSTlSuRw4U9K25UP87ztY59ZUH5IDAOUE937rXeJJ/xs4XNWlzc+gOicy7GeBpL+Q9JLSHLaGKugG/3YrgL3GUfuhLdv+BFXz5ZLSFHg/8LbyHno3sHfLciuA3cpyw7kEeJekGaouPPinsu7F46hxykooTD4PAy8HfirpUaowWAgMXhV0GtWJtt8DVwPf7sA2fwgsAq4HPmv7uqEz2F4CHAl8hOqDaglVIG1SHh+i+ia3mqqN/m83oJ4zqM5X3AbcTnWivFM/iPpb4HRJD1OFzeUbsK6/o/r2ey/wI6oPrbkbXCFg+06qcxT/SfVh+RLgx20uewdwfKlnOfAgsHSE2Z9DFSJrgLuo3guDwfZ54C3lSp5/HkP5lwCnUL0XXkp1LmDQ+6jeN6uoLgr4Scu0G6jOB/1O0gPD7Nf1VOdHrij7tTdw9BjqCkB2brITwysn6O4DNnOuN4+YEnKkEBERtYRCRETU0nwUERG1HClERERtUneIN336dPf39zddRkTEpHLLLbc8YLtvuGmTOhT6+/uZP39+02VEREwqkn4z0rQ0H0VERC2hEBERta6FgqS5qvqYX9gy7lulA68Fqvr1X1DG90v6Q8u0r3SrroiIGFk3zylcCHyRqk95AGy/dfC5pLOpumIYdI/tGV2sJyIiRtG1ULB945B+zGvlbkd/TXVTjIiImCCaOqfwamCF7V+3jNtT1W0Qfyjp1SMtqOrWkPMlzR8YGOh+pRERU0hToTCbqvvjQcuBPWwfQNW98CWqblD/NLbPsz3T9sy+vmEvs42IiHHqeSiUm3K/mZY++cttFleV57cA91BuUB8REb3TxJHCQcDdtuv+28vNUqaV53sB+1D1QR8RET3UtRPNki4FZgHTJS2luvH6BVQ3vbh0yOyvobqxyVqquzodZ3t1t2qLmEj6T7y6o+tbfNZhHV1fTC3dvPpo9gjj3znMuCuo7pYUERENmtR9H0WMptPfwiHfxGPjlm4uIiKillCIiIhaQiEiImoJhYiIqCUUIiKillCIiIhaQiEiImoJhYiIqCUUIiKillCIiIhaQiEiImoJhYiIqCUUIiKillCIiIhaQiEiImoJhYiIqCUUIiKillCIiIhaQiEiImoJhYiIqHUtFCTNlbRS0sKWcadKul/SgvI4tGXaSZIWSfqlpIO7VVdERIysm0cKFwKHDDP+HNszyuMaAEn7AkcDLy7LfEnStC7WFhERw9i0Wyu2faOk/jZnPxK4zPbjwH2SFgEHAv/Zrfoixqv/xKubLiGia5o4p3CCpNtK89IOZdyuwJKWeZaWcU8jaY6k+ZLmDwwMdLvWiIgppdeh8GVgb2AGsBw4u4zXMPN6uBXYPs/2TNsz+/r6ulJkRMRU1dNQsL3C9jrbTwDnUzURQXVksHvLrLsBy3pZW0RE9DgUJO3cMvgmYPDKpKuAoyVtLmlPYB/gZ72sLSIiuniiWdKlwCxguqSlwCnALEkzqJqGFgPvB7B9h6TLgTuBtcDxttd1q7aIiBheN68+mj3M6AvWM/+ZwJndqiciIkaXXzRHREQtoRAREbWEQkRE1BIKERFRSyhEREQtoRAREbWEQkRE1BIKERFRSyhEREQtoRAREbWEQkRE1BIKERFRSyhEREQtoRAREbWEQkRE1BIKERFRSyhEREQtoRAREbWEQkRE1BIKERFRSyhERESta6Egaa6klZIWtoz7jKS7Jd0m6UpJ25fx/ZL+IGlBeXylW3VFRMTIunmkcCFwyJBx84D9bO8P/Ao4qWXaPbZnlMdxXawrIiJG0LVQsH0jsHrIuOtsry2DNwG7dWv7ERExdk2eU3g3cG3L8J6Sfi7ph5JePdJCkuZImi9p/sDAQPerjIiYQhoJBUknA2uBb5ZRy4E9bB8A/D1wiaTthlvW9nm2Z9qe2dfX15uCIyKmiJ6HgqRjgcOBY2wbwPbjtleV57cA9wDP73VtERFTXU9DQdIhwIeBI2w/1jK+T9K08nwvYB/g3l7WFhERsGm3VizpUmAWMF3SUuAUqquNNgfmSQK4qVxp9BrgdElrgXXAcbZXD7viiIjomq6Fgu3Zw4y+YIR5rwCu6FYtERHRnvyiOSIiagmFiIioJRQiIqKWUIiIiFrXTjRHRDP6T7y6o+tbfNZhHV1fTGw5UoiIiFpCISIiagmFiIioJRQiIqKWUIiIiFpCISIiagmFiIioJRQiIqKWUIiIiNqooVDuh3y8pB16UVBERDSnnSOFo4FdgJslXSbpYJU75ERExMZl1FCwvcj2yVT3TL4EmAv8VtJpkp7V7QIjIqJ32jqnIGl/4GzgM1R3SHsLsAa4oXulRUREr43aS6qkW4CHqG6leaLtx8ukn0p6ZRdri4iIHmun6+yjbN873ATbb+5wPRER0aB2mo/eK2n7wQFJO0g6o3slRUREU9oJhTfYfmhwwPaDwKGjLSRprqSVkha2jHuWpHmSfl3+3aFl2kmSFkn6paSDx7gfERHRAe2EwjRJmw8OSNoS2Hw98w+6EDhkyLgTgett7wNcX4aRtC/Vpa8vLst8SdK0NrYREREd1E4oXAxcL+k9kt4NzAMuGm0h2zcCq4eMPrJl2YuAN7aMv8z247bvAxYBB7ZRW0REdNCoJ5ptf1rS7cBrAQGfsP29cW5vJ9vLy3qXS9qxjN8VuKllvqVl3NNImgPMAdhjjz3GWUZMVJ2+v3BEjE07Vx9h+1rg2i7WMdwvpD1CLecB5wHMnDlz2HkiImJ82vmdwpuBTwE7Un14C7Dt7caxvRWSdi5HCTsDK8v4pcDuLfPtBiwbx/ojosO6cfS2+KzDOr7O6Ix2zil8GjjC9jNtb2d723EGAsBVwLHl+bHAd1rGHy1pc0l7AvsAPxvnNiIiYpzaaT5aYfuusa5Y0qXALGC6pKXAKcBZwOWS3gP8FjgKwPYdki4H7gTWAsfbXjfWbUZExIZpJxTmS/oW8H+AwS4usP3t9S1ke/YIk147wvxnAme2UU9ERHRJO6GwHfAY8PqWcQbWGwoRETH5tHNJ6rt6UUhERDSvnTuvPV/S9YPdVUjaX9JHu19aRET0WjtXH50PnAT8CcD2bVRdUkRExEamnVDYyvbQy0PXdqOYiIhoVjuh8ICkvSm/MJb0FmB5V6uKiIhGtHP10fFU3Uq8UNL9wH3A27paVURENKKdq4/uBQ6StDWwie2Hu19WREQ0oZ2+jz4+ZBgA26d3qaaIiGhIO81Hj7Y83wI4HBhztxcRETHxtdN8dHbrsKTPUnVgFxERG5l2rj4aaitgr04XEhERzWvnnMLtPHnDm2lAH5DzCRERG6F2zikc3vJ8LVVX2vnxWkTERqidUBh6Cep2g1cgAdhe3dGKIiKiMe2Ewq1Ut8p8kOpWnNtT3SAHqmalnF+IiNhItHOi+d+Av7I93fazqZqTvm17T9sJhIiIjUg7ofAy29cMDti+Fvjz7pUUERFNaaf56IFy/4SLqZqL3gas6mpVERHRiHaOFGZTXYZ6ZXn0lXEREbGRaecXzauBD0jaxvYjPagpIiIa0s7tOF8h6U7gzjL8Z5K+NN4NSnqBpAUtjzWSPijpVEn3t4w/dLzbiIiI8Wmn+egc4GDKeQTbvwBeM94N2v6l7Rm2ZwAvBR6japYCOGdwWuvJ7YiI6I22+j6yvWTIqHUd2v5rgXts/6ZD64uIiA3QTigskfQKwJKeIekf6FzX2UcDl7YMnyDpNklzJe3QoW1ERESb2gmF46huybkrsBSYUYY3iKRnAEcA/1pGfRnYu6x/OXD2CMvNkTRf0vyBgYENLSMiIlqs9+ojSdOAc20f04VtvwG41fYKgMF/y3bPB7473EK2z6O6ZzQzZ870cPNERMT4rPdIwfY6oK98q++02bQ0HUnauWXam4CFXdhmRESsRzu/aF4M/FjSVbTcmtP258a7UUlbAa8D3t8y+tOSZlD9anrxkGkREdEDI4aCpG/YfjvwVqrLUjcBtu3ERm0/Bjx7yLi3d2LdERExfus7UnippOdSdZP9hR7VExERDVpfKHyFqtvsPYH5LeNF7qMQEbFRGvFEs+1/tv0i4Gu292p55D4KEREbqVF/p2D7b3pRSERENK+tbi4iImJqSChEREQtoRAREbWEQkRE1BIKERFRSyhEREQtoRAREbWEQkRE1BIKERFRSyhEREStnfspRIyo/8Srmy4hIjooRwoREVFLKERERC2hEBERtYRCRETUEgoREVHL1UcR0XOdvmpt8VmHdXR9U1kjoSBpMfAwsA5Ya3umpGcB3wL6gcXAX9t+sIn6IiKmqiabj/7C9gzbM8vwicD1tvcBri/DERHRQxPpnMKRwEXl+UXAG5srJSJiamoqFAxcJ+kWSXPKuJ1sLwco/+7YUG0REVNWUyeaX2l7maQdgXmS7m53wRIicwD22GOPbtUXETElNXKkYHtZ+XclcCVwILBC0s4A5d+VIyx7nu2Ztmf29fX1quSIiCmh56EgaWtJ2w4+B14PLASuAo4tsx0LfKfXtUVETHVNNB/tBFwpaXD7l9j+N0k3A5dLeg/wW+CoBmqLiJjSeh4Ktu8F/myY8auA1/a6noiIeNJEuiQ1IiIallCIiIhaQiEiImoJhYiIqCUUIiKillCIiIhaQiEiImoJhYiIqCUUIiKillCIiIhaQiEiImoJhYiIqCUUIiKillCIiIhaQiEiImoJhYiIqCUUIiKillCIiIhaQiEiImoJhYiIqG3adAHRO/0nXt10CRExweVIISIiaj0PBUm7S/q+pLsk3SHpA2X8qZLul7SgPA7tdW0REVNdE81Ha4EP2b5V0rbALZLmlWnn2P5sAzVFRAQNhILt5cDy8vxhSXcBu/a6joiIeLpGzylI6gcOAH5aRp0g6TZJcyXtMMIycyTNlzR/YGCgV6VGREwJjYWCpG2AK4AP2l4DfBnYG5hBdSRx9nDL2T7P9kzbM/v6+npVbkTElNBIKEjajCoQvmn72wC2V9heZ/sJ4HzgwCZqi4iYypq4+kjABcBdtj/XMn7nltneBCzsdW0REVNdE1cfvRJ4O3C7pAVl3EeA2ZJmAAYWA+9voLaIiCmtiauPfgRomEnX9LqWiIh4qnRzERGTXqe7cFl81mEdXd9kkm4uIiKillCIiIhaQiEiImoJhYiIqCUUIiKillCIiIhaQiEiImoJhYiIqCUUIiKillCIiIhaurmYwDr90/2IiNEkFCIihujGF7LJ0p9Smo8iIqKWUIiIiFpCISIiagmFiIioJRQiIqKWUIiIiFpCISIiavmdQgflx2YRMZLJch/pCRcKkg4BPg9MA75q+6xubSsf4hERTzWhmo8kTQP+BXgDsC8wW9K+zVYVETF1TKhQAA4EFtm+1/b/Ay4Djmy4poiIKWOiNR/tCixpGV4KvLx1BklzgDll8BFJv+xRbeszHXig6SLGKbU3Y7LWPlnrho2sdn1qg9b33JEmTLRQ0DDj/JQB+zzgvN6U0x5J823PbLqO8UjtzZistU/WuiG1t2uiNR8tBXZvGd4NWNZQLRERU85EC4WbgX0k7SnpGcDRwFUN1xQRMWVMqOYj22slnQB8j+qS1Lm272i4rHZMqOasMUrtzZistU/WuiG1t0W2R58rIiKmhInWfBQREQ1KKERERC2h0CGSPiHpNkkLJF0naZema2qXpM9IurvUf6Wk7ZuuqV2SjpJ0h6QnJE34yw0lHSLpl5IWSTqx6XraJWmupJWSFjZdy1hJ2l3S9yXdVd4rH2i6pnZJ2kLSzyT9otR+Wte3mXMKnSFpO9tryvP/Aexr+7iGy2qLpNcDN5QT/Z8CsP3hhstqi6QXAU8A/wv4B9vzGy5pRKUbl18Br6O6/PpmYLbtOxstrA2SXgM8Anzd9n5N1zMWknYGdrZ9q6RtgVuAN06S113A1rYfkbQZ8CPgA7Zv6tY2c6TQIYOBUGzNkB/dTWS2r7O9tgzeRPX7kEnB9l22J8Kv2tsxabtxsX0jsLrpOsbD9nLbt5bnDwN3UfWeMOG58kgZ3Kw8uvrZklDoIElnSloCHAN8vOl6xundwLVNF7GRGq4bl0nx4bSxkNQPHAD8tOFS2iZpmqQFwEpgnu2u1p5QGANJ/y5p4TCPIwFsn2x7d+CbwAnNVvtUo9Ve5jkZWEtV/4TRTu2TxKjduET3SNoGuAL44JAj+wnN9jrbM6iO4A+U1NXmuwn147WJzvZBbc56CXA1cEoXyxmT0WqXdCxwOPBaT7ATTWN43Se6dOPSkNIefwXwTdvfbrqe8bD9kKQfAIcAXTvhnyOFDpG0T8vgEcDdTdUyVuXGRh8GjrD9WNP1bMTSjUsDysnaC4C7bH+u6XrGQlLf4NWAkrYEDqLLny25+qhDJF0BvIDqSpjfAMfZvr/ZqtojaRGwObCqjLppEl059SbgC0Af8BCwwPbBjRa1HpIOBc7lyW5czmy2ovZIuhSYRdWF8wrgFNsXNFpUmyS9CvgP4Haq/58AH7F9TXNVtUfS/sBFVO+XTYDLbZ/e1W0mFCIiYlCajyIiopZQiIiIWkIhIiJqCYWIiKglFCIiopZQiIiIWkIhIiJqCYWIDpL0snJfii0kbV36wJ9UXU3H1JYfr0V0mKQzgC2ALYGltj/ZcEkRbUsoRHRY6dfoZuCPwCtsr2u4pIi2pfkoovOeBWwDbEt1xBAxaeRIIaLDJF1FdVe1PaluAzmh7q0RsT65n0JEB0l6B7DW9iXlnsw/kfSXtm9ouraIduRIISIiajmnEBERtYRCRETUEgoREVFLKERERC2hEBERtYRCRETUEgoREVH7/xZXDbKZ0yhFAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -854,7 +854,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0.0} [id E]\n", @@ -864,7 +864,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 21, @@ -910,7 +910,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 22, @@ -975,16 +975,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "sample 0: -0.03461370806435829\n", - "sample 1: -0.03461370806435829\n", - "sample 2: -0.03461370806435829\n", - "sample 3: -0.03461370806435829\n", - "sample 4: -0.03461370806435829\n", - "sample 5: -0.03461370806435829\n", - "sample 6: -0.03461370806435829\n", - "sample 7: -0.03461370806435829\n", - "sample 8: -0.03461370806435829\n", - "sample 9: -0.03461370806435829\n" + "sample 0: 0.669978181137517\n", + "sample 1: 0.669978181137517\n", + "sample 2: 0.669978181137517\n", + "sample 3: 0.669978181137517\n", + "sample 4: 0.669978181137517\n", + "sample 5: 0.669978181137517\n", + "sample 6: 0.669978181137517\n", + "sample 7: 0.669978181137517\n", + "sample 8: 0.669978181137517\n", + "sample 9: 0.669978181137517\n" ] } ], @@ -1016,7 +1016,7 @@ "output_type": "stream", "text": [ "\n", - "x owner = RandomGeneratorSharedVariable()\n", + "x owner = RandomGeneratorSharedVariable()\n", "x owner's input = RandomGeneratorType\n", "\n" ] @@ -1052,7 +1052,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y' \n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{(1,) of 2} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1062,7 +1062,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 26, @@ -1217,7 +1217,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z' \n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1227,7 +1227,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 30, @@ -1489,29 +1489,43 @@ "id": "58gng2f17_P7" }, "source": [ - "## Graph manipulation 102\n", + "### Graph manipulation 102\n", "\n", "Replacing `sum(bernoulli(p, size))` by `binomial(size, p)`" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, "metadata": { "id": "qQzMa8rB8ymo" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array(-7)" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "p = at.scalar('p')\n", + "p = at.scalar(\"p\")\n", "rng = aesara.shared(np.random.default_rng(0))\n", "b = at.random.bernoulli(p, size=10, rng=rng)\n", "bs = at.sum(b)\n", - "nbs = -bs" + "nbs = - bs\n", + "\n", + "# example\n", + "nbs.eval({p: 0.5})" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 40, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1519,29 +1533,38 @@ "id": "mHDj8mYy9UKM", "outputId": "d36b548d-5cfc-47fa-cc1b-85e1d55bab78" }, - "outputs": [], - "source": [ - "aesara.dprint(nbs)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{neg,no_inplace} [id A] '' \n", + " |Sum{acc_dtype=int64} [id B] '' \n", + " |bernoulli_rv{0, (0,), int64, False}.1 [id C] '' \n", + " |RandomGeneratorSharedVariable() [id D]\n", + " |TensorConstant{(1,) of 10} [id E]\n", + " |TensorConstant{4} [id F]\n", + " |p [id G]\n" + ] }, - "id": "3nLdG-Q09Q1s", - "outputId": "a843e177-4e99-473b-e179-4a970f7a4ce8" - }, - "outputs": [], + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "-bs.eval({p: 0.9})" + "aesara.dprint(nbs)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 41, "metadata": { "id": "EtCPKZwK1WIP" }, @@ -1555,7 +1578,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 42, "metadata": { "id": "gOPPTnc5LTHl" }, @@ -1582,7 +1605,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 43, "metadata": { "id": "1UmbdW8u8i-z" }, @@ -1593,7 +1616,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 44, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1601,7 +1624,31 @@ "id": "ZuE6H5jY9p-C", "outputId": "4d2eb9a9-10bd-43ff-bea3-28ecfc39032b" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{neg,no_inplace} [id A] '' 2\n", + " |Sum{acc_dtype=int64} [id B] '' 1\n", + " |bernoulli_rv{0, (0,), int64, False}.1 [id C] '' 0\n", + " |RandomGeneratorSharedVariable() [id D]\n", + " |TensorConstant{(1,) of 10} [id E]\n", + " |TensorConstant{4} [id F]\n", + " |p [id G]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "fgraph = FunctionGraph(outputs=[nbs], clone=False)\n", "aesara.dprint(fgraph)" @@ -1609,7 +1656,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 45, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1617,14 +1664,32 @@ "id": "ENHC2fnu8jyr", "outputId": "d4989c32-6a2c-4a32-9f58-579cca79eff2" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " 1,\n", + " 3,\n", + " 3,\n", + " 2.288818359375e-05,\n", + " 0.0025620460510253906,\n", + " 2.2649765014648438e-05,\n", + " FromFunctionLocalOptimizer(, None, ()))" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "my_optimizer.optimize(fgraph)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 46, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1632,14 +1697,40 @@ "id": "6dqyvS8x8rBF", "outputId": "8ee1e8f4-2c4e-4b05-fb0b-7a04f3b231be" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{neg,no_inplace} [id A] '' 2\n", + " |binomial_rv{0, (0, 0), int64, False}.1 [id B] '' 1\n", + " |RandomGeneratorSharedVariable() [id C]\n", + " |TensorConstant{[]} [id D]\n", + " |TensorConstant{4} [id E]\n", + " |Subtensor{int64} [id F] '' 0\n", + " | |TensorConstant{(1,) of 10} [id G]\n", + " | |ScalarConstant{0} [id H]\n", + " |p [id I]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "aesara.dprint(fgraph)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 47, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1647,11 +1738,22 @@ "id": "YIXLSKkF_QPL", "outputId": "166acb34-683b-4478-9b7e-fe6fb2d9d837" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array(-7)" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Binomial and bernoulli do not have the same draws, given the same seed, so the results can vary\n", "# The seed was chosen to illustrate this!\n", - "fgraph.outputs[0].eval({p: 0.9})" + "fgraph.outputs[0].eval({p: 0.5})" ] }, { @@ -1702,7 +1804,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 48, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1710,7 +1812,30 @@ "id": "pe6Xw7ZzHGCu", "outputId": "6560af03-5c86-44e4-bc27-dd09cfb042ea" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normal_rv{0, (0, 0), floatX, False}.1 [id A] '' \n", + " |RandomGeneratorSharedVariable() [id B]\n", + " |TensorConstant{(1,) of 3} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{0} [id E]\n", + " |TensorConstant{0.7071067811865476} [id F]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "x = pm.Normal.dist(mu=0, tau=2, shape=3)\n", "aesara.dprint(x)" @@ -1718,7 +1843,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 49, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1726,14 +1851,26 @@ "id": "xRe_Wsx3hYcG", "outputId": "9cdcf230-abf2-4605-837d-0c0f5835e1ca" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(array([-0.27951064, -0.01859431, 1.13900724]),\n", + " array([-0.27951064, -0.01859431, 1.13900724]))" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "x.eval(), x.eval()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 50, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1741,7 +1878,30 @@ "id": "uPaiNiybhgwT", "outputId": "0b937cf8-262b-40cf-996e-bc662e88653f" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", + " |RandomStateSharedVariable() [id B]\n", + " |TensorConstant{(1,) of 2} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{(2,) of 0} [id E]\n", + " |TensorConstant{[1. ...70710678]} [id F]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "with pm.Model() as model:\n", " x = pm.Normal(\"x\", mu=np.array([0, 0]), tau=np.array([1, 2]), size=2)\n", @@ -1750,7 +1910,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 51, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1758,7 +1918,18 @@ "id": "Z-MupoZhhqE_", "outputId": "8b1dc63a-0fa6-4ca7-bba4-9b6008114bb5" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(array([-1.27348455, 0.38980554]), array([-1.27348455, 0.38980554]))" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Variables are already seeded, but we might change this behavior in the future\n", "x.eval(), x.eval()" @@ -1766,7 +1937,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 52, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1774,7 +1945,19 @@ "id": "QqvTnWXMhvW5", "outputId": "aed259f2-7e33-4dc4-f954-46c73e0c14c2" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-1.27348455, 0.38980554],\n", + " [ 1.28056807, -0.33584146]])" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# The CORRECT way to draw values is to use `pm.draw`\n", "pm.draw(x, draws=2)" @@ -1801,7 +1984,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 53, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1809,14 +1992,25 @@ "id": "23JVxTUjRHDy", "outputId": "cc39c67b-ed0d-4ad7-c485-5ae6b0b5d0df" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[x]" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "model.basic_RVs" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 54, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1824,14 +2018,37 @@ "id": "jYgwMOzpRcmo", "outputId": "3178ac69-3666-4464-d6d2-dbaacfc51170" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", + " |RandomStateSharedVariable() [id B]\n", + " |TensorConstant{(1,) of 2} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{(2,) of 0} [id E]\n", + " |TensorConstant{[1. ...70710678]} [id F]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "aesara.dprint(model.basic_RVs[0])" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 55, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1839,7 +2056,18 @@ "id": "8uPz7gDWQ_6k", "outputId": "a6e5f1be-93c5-4afa-ead6-9827edb7cbe0" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{my_x: my_x}" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Manual variable registration\n", "with pm.Model() as model:\n", @@ -1879,7 +2107,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 66, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1887,7 +2115,18 @@ "id": "mgntEABvQyhu", "outputId": "319b8e86-388a-4ca5-bd3e-c27a24dd306c" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'my_x': array(-0.09312973)}" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "point = model.compute_initial_point()\n", "point" @@ -1895,7 +2134,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 67, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1903,14 +2142,25 @@ "id": "d3MpBiUlSVGT", "outputId": "bdf43dff-e5b5-4699-b0b5-b8d0602b2064" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'my_x': -0.92}" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "model.point_logps(point)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 58, "metadata": { "id": "bAf_AM1FSbf-" }, @@ -1936,7 +2186,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 69, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1944,7 +2194,18 @@ "id": "Gyp98lINTAOz", "outputId": "91c514a6-1168-4f64-97ff-efe5d0f139bc" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "x = pm.Normal.dist(size=2)\n", "x.owner.op" @@ -1952,7 +2213,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 70, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1960,7 +2221,51 @@ "id": "Am5CBIEoSt1j", "outputId": "c87b47f8-5b41-4102-ed8b-c10de2647c31" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Check{sigma > 0} [id A] '' \n", + " |Elemwise{sub,no_inplace} [id B] '' \n", + " | |Elemwise{sub,no_inplace} [id C] '' \n", + " | | |Elemwise{mul,no_inplace} [id D] '' \n", + " | | | |InplaceDimShuffle{x} [id E] '' \n", + " | | | | |TensorConstant{-0.5} [id F]\n", + " | | | |Elemwise{pow,no_inplace} [id G] '' \n", + " | | | |Elemwise{true_div,no_inplace} [id H] '' \n", + " | | | | |Elemwise{sub,no_inplace} [id I] '' \n", + " | | | | | |TensorConstant{(2,) of 0} [id J]\n", + " | | | | | |InplaceDimShuffle{x} [id K] '' \n", + " | | | | | |TensorConstant{0} [id L]\n", + " | | | | |InplaceDimShuffle{x} [id M] '' \n", + " | | | | |TensorConstant{1.0} [id N]\n", + " | | | |InplaceDimShuffle{x} [id O] '' \n", + " | | | |TensorConstant{2} [id P]\n", + " | | |InplaceDimShuffle{x} [id Q] '' \n", + " | | |Elemwise{log,no_inplace} [id R] '' \n", + " | | |Elemwise{sqrt,no_inplace} [id S] '' \n", + " | | |TensorConstant{6.283185307179586} [id T]\n", + " | |InplaceDimShuffle{x} [id U] '' \n", + " | |Elemwise{log,no_inplace} [id V] '' \n", + " | |TensorConstant{1.0} [id N]\n", + " |All [id W] '' \n", + " |Elemwise{gt,no_inplace} [id X] '' \n", + " |TensorConstant{1.0} [id N]\n", + " |TensorConstant{0.0} [id Y]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "x_logp = _logprob(x.owner.op, ([0, 0],), *x.owner.inputs)\n", "aesara.dprint(x_logp)" @@ -1968,7 +2273,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 72, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1976,14 +2281,25 @@ "id": "iAYEgYRwTG7i", "outputId": "ceb009b4-e2e7-4cb5-d706-fa1d34b2557a" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([-0.91893853, -0.91893853])" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "x_logp.eval()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 73, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1991,7 +2307,18 @@ "id": "zCmmLzwfTL9N", "outputId": "7dc9cd0e-5c42-4137-ff88-de5d286f81b8" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([-0.91893853, -0.91893853])" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Helper friendly pymc function to access logp\n", "# Takes RV + value as input\n", @@ -2000,7 +2327,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 74, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -2008,7 +2335,15 @@ "id": "oN1FcbE1V2it", "outputId": "a0cd9e45-2441-42e1-affe-18600b648d61" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Logprob method not implemented for CumOp{None, add}\n" + ] + } + ], "source": [ "# What about other types of Ops?\n", "try:\n", @@ -2041,7 +2376,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 65, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -2049,7 +2384,19 @@ "id": "7Sznx-MLs691", "outputId": "1dac8ba2-899a-47f7-d175-04502b73fd76" }, - "outputs": [], + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'rv' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m/Users/juanitorduz/Documents/pymc/docs/intro_pymc_codebase.ipynb Cell 116'\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[39m# RV and value variables can be observed in these scipy operations\u001b[39;00m\n\u001b[1;32m 2\u001b[0m (\n\u001b[1;32m 3\u001b[0m scipy\u001b[39m.\u001b[39mstats\u001b[39m.\u001b[39mnorm(\u001b[39m0\u001b[39m, \u001b[39m1\u001b[39m), \u001b[39m# Equivalent to rv = pm.Normal(\"rv\", 0, 1)\u001b[39;00m\n\u001b[0;32m----> 4\u001b[0m rv\u001b[39m.\u001b[39mrvs(\u001b[39m5\u001b[39m), \u001b[39m# Equivalent to rv_draw = pm.draw(rv, 5)\u001b[39;00m\n\u001b[1;32m 5\u001b[0m rv\u001b[39m.\u001b[39mlogpdf(\u001b[39m1.25\u001b[39m), \u001b[39m# Equivalent to rv_logp = pm.logp(rv, .125)\u001b[39;00m\n\u001b[1;32m 6\u001b[0m )\n", + "\u001b[0;31mNameError\u001b[0m: name 'rv' is not defined" + ] + } + ], "source": [ "# RV and value variables can be observed in these scipy operations\n", "(\n", @@ -2061,7 +2408,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 75, "metadata": { "id": "dejQBR2FUnM3" }, @@ -2074,7 +2421,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 77, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -2082,15 +2429,26 @@ "id": "iXnvzBqorsX-", "outputId": "bb779d64-5c1b-4233-9131-f64f5dd0e77a" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{sigma: sigma_log__, x: x}" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Each model RV is related to a \"value variable\"\n", - "model.rvs_to_values" + "m.rvs_to_values" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 78, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -2098,14 +2456,25 @@ "id": "xsqHFQ0srsX6", "outputId": "adfc9a9d-c411-4551-f534-c944bb9e1610" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[sigma_log__, x]" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "model.value_vars" + "m.value_vars" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 80, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -2113,16 +2482,34 @@ "id": "i3ME6Y41rsX9", "outputId": "4f075f4f-29d6-4516-ec7a-1bfffa5998ea" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sigma_log__ [id A]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# These just an input variable (constants inputs if observed)\n", "# used in the logp graph\n", - "aesara.dprint(model.value_vars[0])" + "aesara.dprint(m.value_vars[0])" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 81, "metadata": { "id": "JvGOpA3_U0C1" }, @@ -2133,7 +2520,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 82, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -2141,7 +2528,18 @@ "id": "Y2BIoKk5U4fQ", "outputId": "a9b67ac9-9fc0-4da8-dabf-90ed7d5b80e9" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([-10.22579135, 9.08106147])" + ] + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "sigma_value = m.rvs_to_values[sigma]\n", "x_value = m.rvs_to_values[x]\n", @@ -2150,7 +2548,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 83, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -2158,7 +2556,18 @@ "id": "wFAUqf0qU50W", "outputId": "3480b833-f2c7-43a3-d87f-b2149f67351f" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[array(-10.22579135), array(9.08106147)]" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# model compile_logp is a helpers that creates a compiled aesara function\n", "# of the model logp, which takes a dictionary of {value variable name : value} as inputs\n", From 54b2e69b1ccad8338efb4e757bf90a90445c4470 Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Fri, 22 Apr 2022 21:04:18 +0200 Subject: [PATCH 05/30] prune notebook --- docs/intro_pymc_codebase.ipynb | 2113 ++++++++------------------------ 1 file changed, 482 insertions(+), 1631 deletions(-) diff --git a/docs/intro_pymc_codebase.ipynb b/docs/intro_pymc_codebase.ipynb index bd43d32d90..acf072c660 100644 --- a/docs/intro_pymc_codebase.ipynb +++ b/docs/intro_pymc_codebase.ipynb @@ -180,7 +180,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 4, @@ -470,7 +470,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -564,7 +564,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 14, @@ -609,7 +609,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 15, @@ -698,7 +698,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 17, @@ -780,7 +780,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEWCAYAAACJ0YulAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAcFklEQVR4nO3de5xddX3u8c9DQO4UMANCEggoqIDUS0RrbUsFCgIC7UtOw/ESEU1RvPQcWwmiIkpqvGO1Hk8UBOVmjmDhiCgRRKqWS0DkFpQUIgmJZCAgFzWS+PSP9ZvFZthJ9kxm7zWTed6v17xmr8te67v27NnP/q3fusg2ERERAJs0XUBERIweCYWIiKglFCIiopZQiIiIWkIhIiJqCYWIiKglFGLYJH1E0nkjvExJ+pqkhyXdMJLLHk8kvUXSj4cw/2JJB5fHH5D01RGs5XFJe5bH50g6YwSX/WVJHxqp5UVCYUyS9GpJP5X0G0krJf1E0subrmuEvBo4BJhs+4CmixmPbP+L7betbz5J10ha73y2t7F9z4bW1S7obJ9o+2Mbuux4yqZNFxBDI2k74DvAO4B5wLOAvwBWNVnXCNodWGz7iXYTJW1qe3WPa+q6jXG7NsZtGg/SUhh79gawfaHtNbZ/Z/tK27cCSHqupKslPSTpQUnnS9p+4MllN8E/S7pV0hOSzpK0s6QrJD0m6QeSdijzTpVkSTMlLZO0XNL71laYpFeWFswjkn4u6cCWaW+RdE9Zx72S3tDm+ScAXwX+rOxyOF3SgZKWSjpZ0q+Br0naXNKZpaZl5fHmZRkD879f0opS8zGSDpf0y9Ky+sA6tuEIST+T9KikJZI+so55B9b1vpZ1Hd8y/U8kfV1Sv6RfSfqgpE1aXo+fSPqcpJXAR8qulS+Vv8XjZfpzyvY9LOkuSS9pWf4sSf9VXtM7Jf3t2mptU/ubSk0PSTp10LR6t6CkLSSdV+Z7RNKN5f0ym+rLyBdLrV8s81vSSZLuBu5uGfe8llVMlDS/1P0jSbuX+Qbeb5u21HKNpLdJeiHwZZ56bzxSpj9td5Skt0taVP7Ol0natWWaJZ0o6e7yev6bJHX6mo0btvMzhn6A7YCHgHOB1wI7DJr+PKrdL5sDfcC1wJkt0xcD1wE7A5OAFcDNwEvKc64GTivzTgUMXAhsDbwI6AcOLtM/ApxXHk8qdR1O9WXjkDLcV577KPD8Mu8uwL5r2b63AD9uGT4QWA18otS3JfDRsg07leX/FPjYoPk/DGwGvL3UfAGwLbAv8Htgz7Ws/8CynZsA+wMPAMesY97VpZ7Nyrb/duBvAnwduLSsdyrwS+CElu1cDbybqsW+JXAO8CDwMmCL8re4F3gzMAE4A/hhy/qPBXYttf498ASwS7vXcVDd+wCPA39ZXtPPllra/V3/Afj/wFalhpcB25Vp1wBvG7RsA/OBHYEtW8Y9rzw+B3isZd2fH6iTp95vm7Ysr15Hu20qyzujPH5Nef1eWpb9BeDaQbV9B9ge2I3qfXFY0//To+0nLYUxxvajVPvdDXwF6C/fiHYu0xfZnm97le1+qn/4vxq0mC/YfsD2/cB/ANfb/pntVcC3qQKi1em2n7B9G/A14Lg2pb0R+K7t79r+o+35wAKqD0qAPwL7SdrS9nLbdwxhs/9IFVSrbP8OeAPwUdsryjaeDrypZf4ngdm2nwQuAiYCn7f9WFnvHVQf+M9g+xrbt5VtuJUqEAe/fq2eLLU8afu7VB+2z5c0geqD+pSy3sXAZwbVucz2F2yvLtsF8G3bN9n+PdXf4ve2v257DfBNWv42tv+f7WWl1m9SfTPvpB/m9cB3bF9b/uYfonqN17Z9z6b6UF9Tant0Pcv/uO2VLds02OUt6z6V6tv/lA7qXp83AGfbvrks+5Sy7Kkt88yx/Yjt+4AfAi8egfVuVBIKY5DthbbfYnsysB/Vt8UzASTtJOkiSfdLehQ4j+pDsdUDLY9/12Z4m0HzL2l5/KuyvsF2B44tuxgeKc37V1N9c32C6gPyRGC5pMslvaDzLaa/fEgO2LXUsbaaHiofogPbA+vfRgAkvULSD8sun9+Umge/fq0e8tP3m/+2LHsiVX/P4DontQy3vq4DOv7bSHqzpFtaXu/91lPrgF1b113+Pg+tZd5vAN8HLiq76j4pabP1LL/ddrWdbvtxYCXt31ND9bT3RVn2Qzz9Nf91y+OBv1W0SCiMcbbvompC71dGfZyqFbG/7e2ovsFv6H7T1m9xuwHL2syzBPiG7e1bfra2PafU+X3bh1DtOrqLqpXTqcGX8l1GFULrq2k4LgAuA6bY/hOq/djDef0epPqWPbjO+1uGh32J4rIf/ivAu4Bn294euJ3Oal1Oy99U0lZUrYFnKC2g023vA7wKOJJqd9a66l/fdrWuexuqXU3LqHZ/QbWrasBzhrDcp70vJG1NtV33r/UZ8QwJhTFG0gtKx+bkMjyFanfOdWWWbal2YTwiaRLwzyOw2g9J2krSvsDxVLsxBjsPeJ2kQyVNKB2UB0qaXDomjyr/pKtKfWvaLKNTFwIflNQnaSJV/8FInS+xLbDS9u8lHQD8z+EspLRU5gGzJW1bPsT/9wjWuTXVh2Q/QOng3m+dz3jKt4AjVR3a/CyqPpG2nwWS/lrSi8rusEepgm7gb/cAsOcwaj+8Zd0fo9p9uaTsCrwfeGN5D70VeG7L8x4AJpfntXMBcLykF6s68OBfyrIXD6PGcSuhMPY8BrwCuF7SE1RhcDswcFTQ6VQdbb8BLgcuGYF1/ghYBFwFfNr2lYNnsL0EOBr4ANUH1RKqQNqk/LyP6pvcSqp99O/cgHrOoOqvuBW4jaqjfKROiHon8FFJj1GFzbwNWNa7qb793gP8mOpD6+wNrhCwfSdVH8V/Un1Yvgj4SYfPvQM4qdSzHHgYWLqW2Z9DFSKPAgup3gsDwfZ54PXlSJ5/HUL5FwCnUb0XXkbVFzDg7VTvm4eoDgr4acu0q6n6g34t6cE223UVVf/IxWW7ngtMH0JdAcjOTXaivdJBdy+wmXO8ecS4kJZCRETUEgoREVHL7qOIiKilpRAREbUxfUG8iRMneurUqU2XERExptx0000P2u5rN21Mh8LUqVNZsGBB02VERIwpkn61tmnZfRQREbWEQkRE1BIKERFRSyhEREQtoRAREbWEQkRE1BIKERFRSyhEREQtoRAREbUxfUZzxMZg6qzLR3R5i+ccMaLLi/ElLYWIiKglFCIiopZQiIiIWkIhIiJqCYWIiKh1LRQknS1phaTbB41/t6RfSLpD0idbxp8iaVGZdmi36oqIiLXr5iGp5wBfBL4+MELSXwNHA/vbXiVppzJ+H2A6sC+wK/ADSXvbXtPF+iIiYpCutRRsXwusHDT6HcAc26vKPCvK+KOBi2yvsn0vsAg4oFu1RUREe73uU9gb+AtJ10v6kaSXl/GTgCUt8y0t4yIiood6fUbzpsAOwCuBlwPzJO0JqM28brcASTOBmQC77bZbl8qMiBifeh0KS4FLbBu4QdIfgYll/JSW+SYDy9otwPZcYC7AtGnT2gZHRDeN9GUpIkaTXu8++nfgNQCS9gaeBTwIXAZMl7S5pD2AvYAbelxbRMS417WWgqQLgQOBiZKWAqcBZwNnl8NU/wDMKK2GOyTNA+4EVgMn5cijiIje61oo2D5uLZPeuJb5ZwOzu1VPRESsX85ojoiIWkIhIiJqCYWIiKglFCIiopZQiIiIWkIhIiJqvT6jOaKncvZxxNCkpRAREbWEQkRE1BIKERFRSyhEREQtoRAREbWEQkRE1BIKERFRSyhEREQtoRAREbWuhYKksyWtKHdZGzztnyRZ0sSWcadIWiTpF5IO7VZdERGxdt1sKZwDHDZ4pKQpwCHAfS3j9gGmA/uW53xJ0oQu1hYREW10LRRsXwusbDPpc8D7AbeMOxq4yPYq2/cCi4ADulVbRES019M+BUlHAffb/vmgSZOAJS3DS8u4dsuYKWmBpAX9/f1dqjQiYnzqWShI2go4Ffhwu8ltxrnNOGzPtT3N9rS+vr6RLDEiYtzr5aWznwvsAfxcEsBk4GZJB1C1DKa0zDsZWNbD2iIigh62FGzfZnsn21NtT6UKgpfa/jVwGTBd0uaS9gD2Am7oVW0REVHp5iGpFwL/CTxf0lJJJ6xtXtt3APOAO4HvASfZXtOt2iIior2u7T6yfdx6pk8dNDwbmN2teiIiYv1yRnNERNQSChERUUsoRERELaEQERG1hEJERNQSChERUUsoRERELaEQERG1hEJERNQSChERUUsoRERELaEQERG1hEJERNQSChERUUsoRERELaEQERG1rt1kR9LZwJHACtv7lXGfAl4H/AH4L+B424+UaacAJwBrgPfY/n63aovYmE2ddfmILm/xnCNGdHkxunWzpXAOcNigcfOB/WzvD/wSOAVA0j7AdGDf8pwvSZrQxdoiIqKNroWC7WuBlYPGXWl7dRm8DphcHh8NXGR7le17gUXAAd2qLSIi2muyT+GtwBXl8SRgScu0pWXcM0iaKWmBpAX9/f1dLjEiYnxpJBQknQqsBs4fGNVmNrd7ru25tqfZntbX19etEiMixqWudTSvjaQZVB3QB9ke+OBfCkxpmW0ysKzXtUVEjHc9bSlIOgw4GTjK9m9bJl0GTJe0uaQ9gL2AG3pZW0REdPeQ1AuBA4GJkpYCp1EdbbQ5MF8SwHW2T7R9h6R5wJ1Uu5VOsr2mW7VFRER7XQsF28e1GX3WOuafDczuVj0REbF+OaM5IiJqCYWIiKglFCIiopZQiIiIWs/PU4hYl5G+mFtEDE1aChERUUsoRERELaEQERG1hEJERNQSChERUUsoREREbb2hUG5oc5KkHXpRUERENKeTlsJ0YFfgRkkXSTpU5RKnERGxcVlvKNheZPtUYG/gAuBs4D5Jp0vasdsFRkRE73TUpyBpf+AzwKeAi4HXA48CV3evtIiI6LVO+hRuAj4H3Ajsb/s9tq+3/RngnnU872xJKyTd3jJuR0nzJd1dfu/QMu0USYsk/ULSoRu2WRERMRydtBSOtX2Q7Qtsr2qdYPvv1vG8c4DDBo2bBVxley/gqjKMpH2o+i72Lc/5kqQJnW1CRESMlE5C4W2Sth8YkLSDpDPW9yTb1wIrB40+Gji3PD4XOKZl/EW2V9m+F1gEHNBBbRERMYI6CYXX2n5kYMD2w8Dhw1zfzraXl+UsB3Yq4ycBS1rmW1rGRURED3USChMkbT4wIGlLYPN1zD8c7Q5xddsZpZnl3IkF/f39I1xGRMT41kkonAdcJekESW8F5vPULqChekDSLgDl94oyfikwpWW+ycCydguwPdf2NNvT+vr6hllGRES008l5Cp8EZgMvpOoI/lgZNxyXATPK4xnApS3jp0vaXNIewF7ADcNcR0REDFNHd16zfQVwxVAWLOlC4EBgoqSlwGnAHGCepBOA+4Bjy/LvkDQPuBNYDZxke81Q1hcRERtuvaEg6e+AT1B1Cqv82PZ263qe7ePWMumgtcw/m6pFEhERDemkpfBJ4HW2F3a7mIiIaFYnHc0PJBAiIsaHTloKCyR9E/h3oD6j2fYl3SoqIiKa0UkobAf8FviblnEGEgoRERuZ9YaC7eN7UUhERDSvk6uk7i3pqoGrnUraX9IHu19aRET0WicdzV8BTgGeBLB9K9UVTSMiYiPTSShsZXvw2cWru1FMREQ0q5NQeFDScykXqJP0emB5V6uKiIhGdHL00UnAXOAFku4H7gXe2NWqIiKiEZ0cfXQPcLCkrYFNbD/W/bIiIqIJnVz76MODhgGw/dEu1RQREQ3pZPfREy2PtwCOBHLZi4iIjVAnu48+0zos6dNU9z+IiIiNTCdHHw22FbDnSBcSERHN66RP4Taeul/yBKAPSH9CRMRGqJM+hSNbHq+mupT2Bp28Jul/AW+jCpvbgOOpWiDfBKYCi4H/YfvhDVlPREQMTSehMPgQ1O0GjkACsL1yKCuUNAl4D7CP7d+V23BOB/YBrrI9R9IsYBZw8lCWHb03ddblTZcQESOok1C4GZgCPEx1K87tqe6vDNU3/eH0L2wKbCnpSaoWwjKq6ysdWKafC1xDQiEioqc66Wj+HtXtOCfafjbV7qRLbO9he8iBYPt+4NNUwbIc+I3tK4GdbS8v8yynuif0M0iaKWmBpAX9/f1DXX1ERKxDJ6HwctvfHRiwfQXwV8NdoaQdgKOBPYBdga0ldXzZDNtzbU+zPa2vr2+4ZURERBudXhDvg5KmStpd0qnAQxuwzoOBe233236S6g5urwIekLQLQPm9YgPWERERw9BJn8JxwGnAt6n6EK4t44brPuCVkrYCfgccBCygOnN6BjCn/L50A9YRESOkGwcTLJ5zxIgvM0ZGJ2c0rwTeK2kb249v6AptXy/pW1Qd2KuBn1FdhXUbYJ6kE6iC49gNXVdERAxNJyevvQr4KtWH9m6S/hT4B9vvHO5KbZ9G1fpotYqq1RAREQ3ppE/hc8ChlH4E2z8H/rKbRUVERDM6uvaR7SWDRq3pQi0REdGwTjqal5RdSJb0LKqzkXPp7IiIjVAnLYUTqW7JOQlYCry4DEdExEZmnS0FSROAM22/oUf1REREg9bZUrC9Bugru40iImIj10mfwmLgJ5Iuo+XWnLY/262iIiKiGWttKUj6Rnn498B3yrzbtvxERMRGZl0thZdJ2p3q7OIv9KieiIho0LpC4ctUl83eg+raRAPE8O+jEBERo9hadx/Z/lfbLwS+ZnvPlp9h3UchIiJGv/Wep2D7Hb0oJCIimtfRZS4iImJ8SChEREQtoRAREbWEQkRE1BoJBUnbS/qWpLskLZT0Z5J2lDRf0t3l9w5N1BYRMZ411VL4PPA92y8A/pTqUtyzgKts7wVcVYYjIqKHeh4KkrajunPbWQC2/2D7EeBo4Nwy27nAMb2uLSJivGuipbAn0A98TdLPJH1V0tbAzraXA5TfO7V7sqSZkhZIWtDf39+7qiMixoEmQmFT4KXA/7H9Eqorr3a8q8j2XNvTbE/r6+vrVo0REeNSE6GwFFhq+/oy/C2qkHhA0i4A5feKBmqLiBjXeh4Ktn9Ndd/n55dRBwF3ApcBM8q4GcClva4tImK86+QmO93wbuD8cke3e4DjqQJqnqQTqC7XfWxDtUVEjFuNhILtW4BpbSYd1ONSIiKiRc5ojoiIWkIhIiJqCYWIiKglFCIiopZQiIiIWkIhIiJqCYWIiKglFCIiopZQiIiIWkIhIiJqCYWIiKglFCIiopZQiIiIWkIhIiJqCYWIiKg1FgqSJkj6maTvlOEdJc2XdHf5vUNTtUVEjFdN3XkN4L3AQmC7MjwLuMr2HEmzyvDJTRW3MZo66/KmS4iIUa6RloKkycARwFdbRh8NnFsenwsc0+OyIiLGvaZaCmcC7we2bRm3s+3lALaXS9qp3RMlzQRmAuy2225dLjMiumGkW62L5xwxossbz3reUpB0JLDC9k3Deb7tuban2Z7W19c3wtVFRIxvTbQU/hw4StLhwBbAdpLOAx6QtEtpJewCrGigtoiIca3nLQXbp9iebHsqMB242vYbgcuAGWW2GcClva4tImK8G03nKcwBDpF0N3BIGY6IiB5q8pBUbF8DXFMePwQc1GQ9ERHj3WhqKURERMMSChERUUsoRERELaEQERG1hEJERNQSChERUUsoRERELaEQERG1hEJERNQSChERUUsoRERELaEQERG1hEJERNQSChERUUsoRERELaEQERG1noeCpCmSfihpoaQ7JL23jN9R0nxJd5ffO/S6toiI8a6JlsJq4H22Xwi8EjhJ0j7ALOAq23sBV5XhiIjooZ6Hgu3ltm8ujx8DFgKTgKOBc8ts5wLH9Lq2iIjxrtE+BUlTgZcA1wM7214OVXAAO63lOTMlLZC0oL+/v2e1RkSMB42FgqRtgIuBf7T9aKfPsz3X9jTb0/r6+rpXYETEONRIKEjajCoQzrd9SRn9gKRdyvRdgBVN1BYRMZ41cfSRgLOAhbY/2zLpMmBGeTwDuLTXtUVEjHebNrDOPwfeBNwm6ZYy7gPAHGCepBOA+4BjG6gtImJc63ko2P4xoLVMPqiXtURExNPljOaIiKglFCIiotZEn0J0aOqsy5suISLGmYRCRIx5I/0FavGcI0Z0eWNJdh9FREQtoRAREbWEQkRE1BIKERFRS0dzRMQg3Tjyb6x0XqelEBERtYRCRETUEgoREVFLKERERC2hEBERtXF99FFOjY+IeLpxHQojLRewi4i1GStfQkfd7iNJh0n6haRFkmY1XU9ExHgyqkJB0gTg34DXAvsAx0nap9mqIiLGj1EVCsABwCLb99j+A3ARcHTDNUVEjBujrU9hErCkZXgp8IrWGSTNBGaWwccl/aJHtQ2YCDzY43WOlNTejNTejI26dn1ig5a/+9omjLZQUJtxftqAPReY25tynknSAtvTmlr/hkjtzUjtzUjtwzPadh8tBaa0DE8GljVUS0TEuDPaQuFGYC9Je0h6FjAduKzhmiIixo1RtfvI9mpJ7wK+D0wAzrZ9R8NlDdbYrqsRkNqbkdqbkdqHQbbXP1dERIwLo233UURENCihEBERtYTCEEn6mKRbJd0i6UpJuzZdU6ckfUrSXaX+b0vavumaOiXpWEl3SPqjpDFxmOFYvmSLpLMlrZB0e9O1DIWkKZJ+KGlheb+8t+maOiVpC0k3SPp5qf30RupIn8LQSNrO9qPl8XuAfWyf2HBZHZH0N8DVpUP/EwC2T264rI5IeiHwR+D/Av9ke0HDJa1TuWTLL4FDqA61vhE4zvadjRbWIUl/CTwOfN32fk3X0ylJuwC72L5Z0rbATcAxY+F1lyRga9uPS9oM+DHwXtvX9bKOtBSGaCAQiq0ZdHLdaGb7Stury+B1VOeBjAm2F9ru9dnrG2JMX7LF9rXAyqbrGCrby23fXB4/BiykulLCqOfK42Vws/LT88+XhMIwSJotaQnwBuDDTdczTG8Frmi6iI1Yu0u2jIkPp42FpKnAS4DrGy6lY5ImSLoFWAHMt93z2hMKbUj6gaTb2/wcDWD7VNtTgPOBdzVb7dOtr/Yyz6nAaqr6R41Oah9D1nvJlugeSdsAFwP/OKh1P6rZXmP7xVSt+AMk9XzX3ag6eW20sH1wh7NeAFwOnNbFcoZkfbVLmgEcCRzkUdahNITXfSzIJVsaUvbHXwycb/uSpusZDtuPSLoGOAzoaWd/WgpDJGmvlsGjgLuaqmWoJB0GnAwcZfu3TdezkcslWxpQOmvPAhba/mzT9QyFpL6BIwIlbQkcTAOfLzn6aIgkXQw8n+pImF8BJ9q+v9mqOiNpEbA58FAZdd0YOnLqb4EvAH3AI8Attg9ttKj1kHQ4cCZPXbJldrMVdU7ShcCBVJdwfgA4zfZZjRbVAUmvBv4DuI3qfxTgA7a/21xVnZG0P3Au1ftlE2Ce7Y/2vI6EQkREDMjuo4iIqCUUIiKillCIiIhaQiEiImoJhYiIqCUUIiKillCIiIhaQiFiBEl6eblfxRaSti7XxR8zl56OyMlrESNM0hnAFsCWwFLbH2+4pIiOJRQiRli51tGNwO+BV9le03BJER3L7qOIkbcjsA2wLVWLIWLMSEshYoRJuozqTmt7UN0aclTdcyNiXXI/hYgRJOnNwGrbF5T7NP9U0mtsX910bRGdSEshIiJq6VOIiIhaQiEiImoJhYiIqCUUIiKillCIiIhaQiEiImoJhYiIqP03Va9pc+ETYQUAAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -854,7 +854,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0.0} [id E]\n", @@ -864,7 +864,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 21, @@ -910,7 +910,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 22, @@ -952,12 +952,47 @@ { "cell_type": "markdown", "metadata": { - "id": "qIMN2gHGzKof" + "id": "Zkqw774ThP93" + }, + "source": [ + "# PyMC" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cQITtCM_BrdO" + }, + "source": [ + "![image.png](data:image/png;base64,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)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "C8Us4nEyhRdu" + }, + "source": [ + "## Distributions are just RandomVariables" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oTu9tX3FEB1a" }, "source": [ - "### RandomVariables use `SharedVariables` for seeding\n", + "**Source code**\n", + "* [PyMC [rev 1005d20b3c]](https://github.com/pymc-devs/pymc/tree/1005d20b3c12d9b9a424c069f6a0f9962d73c41d)\n", + "* [Distributions module](https://github.com/pymc-devs/pymc/tree/main/pymc/distributions)\n", + "* [Distribution class](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/distribution.py)\n", + " * See issue [#5308](https://github.com/pymc-devs/pymc/issues/5308)\n", + "* [Discrete distributions](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/discrete.py)\n", + "* [Continuous distributions](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/continuous.py)\n", + "* [Multivariate distributions](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/multivariate.py)\n", "\n", - "By default draws don't change between calls" + "**Guide**\n", + "* [Distribution developer guide](https://github.com/pymc-devs/pymc/blob/1005d20b3c12d9b9a424c069f6a0f9962d73c41d/docs/source/contributing/developer_guide_implementing_distribution.md)" ] }, { @@ -967,37 +1002,36 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "id": "fq84NPrqxOfn", - "outputId": "999c994c-9a5e-4805-d631-190bff5f69ee" + "id": "pe6Xw7ZzHGCu", + "outputId": "6560af03-5c86-44e4-bc27-dd09cfb042ea" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "sample 0: 0.669978181137517\n", - "sample 1: 0.669978181137517\n", - "sample 2: 0.669978181137517\n", - "sample 3: 0.669978181137517\n", - "sample 4: 0.669978181137517\n", - "sample 5: 0.669978181137517\n", - "sample 6: 0.669978181137517\n", - "sample 7: 0.669978181137517\n", - "sample 8: 0.669978181137517\n", - "sample 9: 0.669978181137517\n" + "normal_rv{0, (0, 0), floatX, False}.1 [id A] '' \n", + " |RandomGeneratorSharedVariable() [id B]\n", + " |TensorConstant{(1,) of 3} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{0} [id E]\n", + " |TensorConstant{0.7071067811865476} [id F]\n" ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "for i in range(10):\n", - " print(f\"sample {i}: {x.eval()}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is because the `RandomOp` is a deterministic operation, given it's inputs. One of these inputs is a `RandomGenerator/State`." + "x = pm.Normal.dist(mu=0, tau=2, shape=3)\n", + "aesara.dprint(x)" ] }, { @@ -1007,33 +1041,24 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "id": "0X_A-msDzJaf", - "outputId": "f0939974-627c-462c-bc44-7c70133211c4" + "id": "xRe_Wsx3hYcG", + "outputId": "9cdcf230-abf2-4605-837d-0c0f5835e1ca" }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "x owner = RandomGeneratorSharedVariable()\n", - "x owner's input = RandomGeneratorType\n", - "\n" - ] + "data": { + "text/plain": [ + "(array([-0.49026955, -1.57065844, -0.04282467]),\n", + " array([-0.49026955, -1.57065844, -0.04282467]))" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print(f\"\"\"\n", - "x owner = {x.owner.inputs[0]}\n", - "x owner's input = {x.owner.inputs[0].type}\n", - "\"\"\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This input is created by default, but can be passed explicitly as well" + "x.eval(), x.eval()" ] }, { @@ -1043,26 +1068,26 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "id": "8IhwIQ9oxcxN", - "outputId": "a36d59cc-c419-468c-9229-d5010e165cbf" + "id": "uPaiNiybhgwT", + "outputId": "0b937cf8-262b-40cf-996e-bc662e88653f" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y' \n", - " |RandomGeneratorSharedVariable() [id B]\n", + "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", + " |RandomStateSharedVariable() [id B]\n", " |TensorConstant{(1,) of 2} [id C]\n", " |TensorConstant{11} [id D]\n", - " |TensorConstant{0} [id E]\n", - " |TensorConstant{1} [id F]\n" + " |TensorConstant{(2,) of 0} [id E]\n", + " |TensorConstant{[1. ...70710678]} [id F]\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 26, @@ -1071,17 +1096,9 @@ } ], "source": [ - "rng = np.random.default_rng(seed=123)\n", - "shared_rng = aesara.shared(value=rng, borrow=True)\n", - "y = at.random.normal(loc=0, scale=1, rng=shared_rng, size=2, name=\"y\")\n", - "aesara.dprint(y)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Each draw in the same call is unique, but these again don't change across calls:" + "with pm.Model() as model:\n", + " x = pm.Normal(\"x\", mu=np.array([0, 0]), tau=np.array([1, 2]), size=2)\n", + "aesara.dprint(x)" ] }, { @@ -1091,114 +1108,97 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "id": "193YxZy2xx_N", - "outputId": "f9f4ed62-c08f-4b0f-877a-7a3111787349" + "id": "Z-MupoZhhqE_", + "outputId": "8b1dc63a-0fa6-4ca7-bba4-9b6008114bb5" }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "sample 0: [-0.98912135 -0.36778665]\n", - "sample 1: [-0.98912135 -0.36778665]\n", - "sample 2: [-0.98912135 -0.36778665]\n", - "sample 3: [-0.98912135 -0.36778665]\n", - "sample 4: [-0.98912135 -0.36778665]\n", - "sample 5: [-0.98912135 -0.36778665]\n", - "sample 6: [-0.98912135 -0.36778665]\n", - "sample 7: [-0.98912135 -0.36778665]\n", - "sample 8: [-0.98912135 -0.36778665]\n", - "sample 9: [-0.98912135 -0.36778665]\n" - ] + "data": { + "text/plain": [ + "(array([-0.87629932, 1.07309697]), array([-0.87629932, 1.07309697]))" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "for i in range(10):\n", - " print(f\"sample {i}: {y.eval()}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "How to generate different samples? We can make the generator advance by one, which will make the draws \"cycle\" by one." + "# Variables are already seeded, but we might change this behavior in the future\n", + "x.eval(), x.eval()" ] }, { "cell_type": "code", "execution_count": 28, - "metadata": {}, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "QqvTnWXMhvW5", + "outputId": "aed259f2-7e33-4dc4-f954-46c73e0c14c2" + }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "sample 0: [-0.36778665 1.28792526]\n", - "sample 1: [1.28792526 0.19397442]\n", - "sample 2: [0.19397442 0.9202309 ]\n", - "sample 3: [0.9202309 0.57710379]\n", - "sample 4: [ 0.57710379 -0.63646365]\n", - "sample 5: [-0.63646365 0.54195222]\n", - "sample 6: [ 0.54195222 -0.31659545]\n", - "sample 7: [-0.31659545 -0.32238912]\n", - "sample 8: [-0.32238912 0.09716732]\n", - "sample 9: [ 0.09716732 -1.52593041]\n" - ] + "data": { + "text/plain": [ + "array([[-0.87629932, 1.07309697],\n", + " [-0.16366472, 1.75279923]])" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "for i in range(10):\n", - " rng.bit_generator.advance(1)\n", - " print(f\"sample {i}: {y.eval()}\")" + "# The CORRECT way to draw values is to use `pm.draw`\n", + "pm.draw(x, draws=2)" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "wkZR0gDWRAgK" + }, + "source": [ + "## What is going on behind the scenes?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YHWznAnCE8a1" + }, "source": [ - "Now the draws are completely different than the initial ones." + "**Source code**\n", + "* [Model module](https://github.com/pymc-devs/pymc/blob/main/pymc/model.py)" ] }, { "cell_type": "code", "execution_count": 29, - "metadata": {}, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "23JVxTUjRHDy", + "outputId": "cc39c67b-ed0d-4ad7-c485-5ae6b0b5d0df" + }, "outputs": [ { "data": { - "image/png": "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", "text/plain": [ - "
" + "[x]" ] }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "samples = []\n", - "for _ in range(1000):\n", - " rng.bit_generator.advance(1)\n", - " samples.append(y.eval()[0])\n", - "\n", - "fig, ax = plt.subplots()\n", - "ax.hist(samples, bins=15)\n", - "ax.set(\n", - " title=\"Samples from a normal distribution\", xlabel=\"x\", ylabel=\"frequency\"\n", - ");" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "aMM0sJy6z7Ur" - }, - "source": [ - "### Updating the `RandomState` manually is cumbersome\n", - "\n", - "So `RandomVariable`s do it for us" + "model.basic_RVs" ] }, { @@ -1208,26 +1208,26 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "id": "YwmH0DJ40bTj", - "outputId": "a9ccd2a6-7d76-49e1-d0ce-c594739f91ea" + "id": "jYgwMOzpRcmo", + "outputId": "3178ac69-3666-4464-d6d2-dbaacfc51170" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z' \n", - " |RandomGeneratorSharedVariable() [id B]\n", - " |TensorConstant{[]} [id C]\n", + "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", + " |RandomStateSharedVariable() [id B]\n", + " |TensorConstant{(1,) of 2} [id C]\n", " |TensorConstant{11} [id D]\n", - " |TensorConstant{0} [id E]\n", - " |TensorConstant{1} [id F]\n" + " |TensorConstant{(2,) of 0} [id E]\n", + " |TensorConstant{[1. ...70710678]} [id F]\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 30, @@ -1236,570 +1236,540 @@ } ], "source": [ - "rng = np.random.default_rng(seed=123)\n", - "shared_rng = aesara.shared(value=rng, borrow=True)\n", - "z = at.random.normal(loc=0, scale=1, rng=shared_rng, name=\"z\")\n", - "\n", - "aesara.dprint(z)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Notice that there are 2 outputs" + "aesara.dprint(model.basic_RVs[0])" ] }, { "cell_type": "code", "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "output: normal_rv{0, (0, 0), floatX, False}.0\n", - "output: z\n" - ] - } - ], - "source": [ - "for output in z.owner.outputs:\n", - " print(f\"output: {output}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The first one is of `RandomGeneratorType`." - ] - }, - { - "cell_type": "code", - "execution_count": 32, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "RmbkBxYbxY1r", - "outputId": "1a5ebe21-42d7-4e37-b38a-fa57545c0dc0" + "id": "8uPz7gDWQ_6k", + "outputId": "a6e5f1be-93c5-4afa-ead6-9827edb7cbe0" }, "outputs": [ { "data": { "text/plain": [ - "RandomGeneratorType" + "{my_x: my_x}" ] }, - "execution_count": 32, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "next_rng = z.owner.outputs[0]\n", - "next_rng.type" + "# Manual variable registration\n", + "with pm.Model() as model:\n", + " # my_x = pm.Normal(\"x\", 0, tau=5)\n", + " my_x = pm.Normal.dist(0, 1)\n", + " model.register_rv(\n", + " rv_var=my_x,\n", + " name=\"my_x\",\n", + " data=None,\n", + " total_size=None,\n", + " dims=None,\n", + " transform=None,\n", + " initval=\"prior\",\n", + " )\n", + "model.rvs_to_values" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "wPw9kCvASOeJ" + }, + "source": [ + "## Enough with Random Variables, I want to see some (log)probabilities!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CVj2ZrbHFKmr" + }, "source": [ - "From the discussion above it is not surprising that evaluating `z` will yield to the same result:" + "**Source code**\n", + "* [PyMC logprob](https://github.com/pymc-devs/pymc/blob/1005d20b3c12d9b9a424c069f6a0f9962d73c41d/pymc/distributions/logprob.py)\n", + "* [Aeppl logprob](https://github.com/aesara-devs/aeppl/blob/2019114d231d8d3d96acc284fe0e6ee42d89c912/aeppl/logprob.py)" ] }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 32, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "XMRJpNvG00eT", - "outputId": "b4188341-865b-437e-ad27-72fbbe6bd6fc" + "id": "mgntEABvQyhu", + "outputId": "319b8e86-388a-4ca5-bd3e-c27a24dd306c" }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "sample 0: -0.9891213503478509\n", - "sample 1: -0.9891213503478509\n", - "sample 2: -0.9891213503478509\n", - "sample 3: -0.9891213503478509\n", - "sample 4: -0.9891213503478509\n", - "sample 5: -0.9891213503478509\n", - "sample 6: -0.9891213503478509\n", - "sample 7: -0.9891213503478509\n", - "sample 8: -0.9891213503478509\n", - "sample 9: -0.9891213503478509\n" + "ename": "AttributeError", + "evalue": "'Model' object has no attribute 'compute_initial_point'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m/Users/juanitorduz/Documents/pymc/docs/intro_pymc_codebase.ipynb Cell 67'\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m point \u001b[39m=\u001b[39m model\u001b[39m.\u001b[39;49mcompute_initial_point()\n\u001b[1;32m 2\u001b[0m point\n", + "\u001b[0;31mAttributeError\u001b[0m: 'Model' object has no attribute 'compute_initial_point'" ] } ], "source": [ - "for i in range(10):\n", - " print(f\"sample {i}: {z.eval()}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can set the input RNG to the next RNG state returned by the `RandomVariable`" + "point = model.compute_initial_point()\n", + "point" ] }, { "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "sample 0: -0.3677866514678832\n", - "sample 1: 1.2879252612892487\n", - "sample 2: 0.1939744191326132\n", - "sample 3: 0.9202308996398569\n", - "sample 4: 0.5771037912572513\n", - "sample 5: -0.6364636463709805\n", - "sample 6: 0.5419522204102933\n", - "sample 7: -0.3165954511658161\n", - "sample 8: -0.32238911615896015\n", - "sample 9: 0.09716731867045719\n" - ] - } - ], - "source": [ - "for i in range(10):\n", - " next_rng_value = next_rng.eval()\n", - " shared_rng.set_value(next_rng_value)\n", - " print(f\"sample {i}: {z.eval()}\")" - ] - }, - { - "cell_type": "markdown", + "execution_count": null, "metadata": { - "id": "WY6bUgqZztC3" + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "d3MpBiUlSVGT", + "outputId": "bdf43dff-e5b5-4699-b0b5-b8d0602b2064" }, + "outputs": [], "source": [ - "### Almost there\n", - "\n", - "The final step is to make use of default_updates in shared variables" + "model.point_logps(point)" ] }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 33, "metadata": { - "id": "ZCSTHK4fzpYB" + "id": "bAf_AM1FSbf-" }, "outputs": [], "source": [ - "rng = np.random.default_rng(seed=123)\n", - "shared_rng = aesara.shared(rng, borrow=True)\n", - "w = at.random.normal(loc=0, scale=1, rng=shared_rng, name=\"w\")\n", - "next_rng = w.owner.outputs[0]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We set a symbolic update. Every time the function is called, the value of rng shared variable is set to the first output (the next rng state) of the random variable." + "from aeppl.logprob import _logprob" ] }, { "cell_type": "code", - "execution_count": 36, + "execution_count": null, "metadata": { - "id": "42jYYcrn77wJ" + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "5omppW4-StBp", + "outputId": "8a55d79a-6548-4329-80f0-e59b30123067" }, "outputs": [], "source": [ - "shared_rng.default_update = next_rng" + "_logprob.registry" ] }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 35, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "YgSF80agyiqs", - "outputId": "116bdc4e-5594-4fef-d238-353feeefa2c8" + "id": "Gyp98lINTAOz", + "outputId": "91c514a6-1168-4f64-97ff-efe5d0f139bc" }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "sample 0: -0.9891213503478509\n", - "sample 1: -0.3677866514678832\n", - "sample 2: 1.2879252612892487\n", - "sample 3: 0.1939744191326132\n", - "sample 4: 0.9202308996398569\n", - "sample 5: 0.5771037912572513\n", - "sample 6: -0.6364636463709805\n", - "sample 7: 0.5419522204102933\n", - "sample 8: -0.3165954511658161\n", - "sample 9: -0.32238911615896015\n" - ] + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "for i in range(10):\n", - " print(f\"sample {i}: {w.eval()}\")" + "x = pm.Normal.dist(size=2)\n", + "x.owner.op" ] }, { "cell_type": "code", - "execution_count": 38, - "metadata": {}, + "execution_count": 36, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Am5CBIEoSt1j", + "outputId": "c87b47f8-5b41-4102-ed8b-c10de2647c31" + }, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Check{sigma > 0} [id A] '' \n", + " |Elemwise{sub,no_inplace} [id B] '' \n", + " | |Elemwise{sub,no_inplace} [id C] '' \n", + " | | |Elemwise{mul,no_inplace} [id D] '' \n", + " | | | |InplaceDimShuffle{x} [id E] '' \n", + " | | | | |TensorConstant{-0.5} [id F]\n", + " | | | |Elemwise{pow,no_inplace} [id G] '' \n", + " | | | |Elemwise{true_div,no_inplace} [id H] '' \n", + " | | | | |Elemwise{sub,no_inplace} [id I] '' \n", + " | | | | | |TensorConstant{(2,) of 0} [id J]\n", + " | | | | | |InplaceDimShuffle{x} [id K] '' \n", + " | | | | | |TensorConstant{0} [id L]\n", + " | | | | |InplaceDimShuffle{x} [id M] '' \n", + " | | | | |TensorConstant{1.0} [id N]\n", + " | | | |InplaceDimShuffle{x} [id O] '' \n", + " | | | |TensorConstant{2} [id P]\n", + " | | |InplaceDimShuffle{x} [id Q] '' \n", + " | | |Elemwise{log,no_inplace} [id R] '' \n", + " | | |Elemwise{sqrt,no_inplace} [id S] '' \n", + " | | |TensorConstant{6.283185307179586} [id T]\n", + " | |InplaceDimShuffle{x} [id U] '' \n", + " | |Elemwise{log,no_inplace} [id V] '' \n", + " | |TensorConstant{1.0} [id N]\n", + " |All [id W] '' \n", + " |Elemwise{gt,no_inplace} [id X] '' \n", + " |TensorConstant{1.0} [id N]\n", + " |TensorConstant{0.0} [id Y]\n" + ] + }, { "data": { - "image/png": "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", "text/plain": [ - "
" + "" ] }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "samples = np.array([w.eval() for _ in range(1000)])\n", - "\n", - "fig, ax = plt.subplots()\n", - "ax.hist(samples, bins=15)\n", - "ax.set(\n", - " title=\"Samples from a normal distribution\", xlabel=\"x\", ylabel=\"frequency\"\n", - ");" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "58gng2f17_P7" - }, - "source": [ - "### Graph manipulation 102\n", - "\n", - "Replacing `sum(bernoulli(p, size))` by `binomial(size, p)`" + "x_logp = _logprob(x.owner.op, ([0, 0],), *x.owner.inputs)\n", + "aesara.dprint(x_logp)" ] }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 37, "metadata": { - "id": "qQzMa8rB8ymo" + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "iAYEgYRwTG7i", + "outputId": "ceb009b4-e2e7-4cb5-d706-fa1d34b2557a" }, "outputs": [ { "data": { "text/plain": [ - "array(-7)" + "array([-0.91893853, -0.91893853])" ] }, - "execution_count": 39, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "p = at.scalar(\"p\")\n", - "rng = aesara.shared(np.random.default_rng(0))\n", - "b = at.random.bernoulli(p, size=10, rng=rng)\n", - "bs = at.sum(b)\n", - "nbs = - bs\n", - "\n", - "# example\n", - "nbs.eval({p: 0.5})" + "x_logp.eval()" ] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 38, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "mHDj8mYy9UKM", - "outputId": "d36b548d-5cfc-47fa-cc1b-85e1d55bab78" + "id": "zCmmLzwfTL9N", + "outputId": "7dc9cd0e-5c42-4137-ff88-de5d286f81b8" }, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Elemwise{neg,no_inplace} [id A] '' \n", - " |Sum{acc_dtype=int64} [id B] '' \n", - " |bernoulli_rv{0, (0,), int64, False}.1 [id C] '' \n", - " |RandomGeneratorSharedVariable() [id D]\n", - " |TensorConstant{(1,) of 10} [id E]\n", - " |TensorConstant{4} [id F]\n", - " |p [id G]\n" - ] - }, { "data": { "text/plain": [ - "" + "array([-0.91893853, -0.91893853])" ] }, - "execution_count": 40, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "aesara.dprint(nbs)" + "# Helper friendly pymc function to access logp\n", + "# Takes RV + value as input\n", + "pm.logp(x, [0, 0]).eval()" ] }, { "cell_type": "code", - "execution_count": 41, + "execution_count": null, "metadata": { - "id": "EtCPKZwK1WIP" + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "oN1FcbE1V2it", + "outputId": "a0cd9e45-2441-42e1-affe-18600b648d61" }, "outputs": [], "source": [ - "from aesara.graph import FunctionGraph\n", - "from aesara.graph.opt import in2out, local_optimizer\n", - "from aesara.tensor.math import Sum\n", - "from aesara.tensor.random.basic import BernoulliRV" + "# What about other types of Ops?\n", + "try:\n", + " y = at.cumsum(x)\n", + " pm.logp(y, [1, 1])\n", + "except NotImplementedError as err:\n", + " print(err)" ] }, { - "cell_type": "code", - "execution_count": 42, + "cell_type": "markdown", "metadata": { - "id": "gOPPTnc5LTHl" + "id": "yxG5UHslGDEv" }, - "outputs": [], "source": [ - "@local_optimizer(tracks=None)\n", - "def local_sum_bernoulli_to_binomial(fgraph, node):\n", - " \"\"\"This local rewrite replaces a sum(bern(p=p, size=size)) by binom(n=size, p=p)\"\"\"\n", - "\n", - " # Check we have a Sum node with axis = None\n", - " if isinstance(node.op, Sum) and node.op.axis is None:\n", - " # Check input is a bernoulli variable\n", - " bern = node.inputs[0]\n", - " if bern.owner is not None and isinstance(bern.owner.op, BernoulliRV):\n", - " # Check that size and p are scalar\n", - " rng, size, dtype, p = bern.owner.inputs\n", - " if at.get_vector_length(size) == 1 and p.ndim == 0:\n", - " # Return binomial as replacement\n", - " binom = at.random.binomial(size[0], p, rng=rng, dtype=dtype)\n", - " return [binom]\n", - "\n", - " return None" + "Note: A similar dispatch strategy is used for `logcdf` and `get_moment`" ] }, { - "cell_type": "code", - "execution_count": 43, + "cell_type": "markdown", "metadata": { - "id": "1UmbdW8u8i-z" + "id": "WdZcUfvLUkwK" }, - "outputs": [], "source": [ - "my_optimizer = in2out(local_sum_bernoulli_to_binomial)" + "## What is the deal with those value variables in the model?\n", + "\n", + "* RVs for random draws\n", + "* Value variables for logprob evaluations" ] }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 39, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "ZuE6H5jY9p-C", - "outputId": "4d2eb9a9-10bd-43ff-bea3-28ecfc39032b" + "id": "7Sznx-MLs691", + "outputId": "1dac8ba2-899a-47f7-d175-04502b73fd76" }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Elemwise{neg,no_inplace} [id A] '' 2\n", - " |Sum{acc_dtype=int64} [id B] '' 1\n", - " |bernoulli_rv{0, (0,), int64, False}.1 [id C] '' 0\n", - " |RandomGeneratorSharedVariable() [id D]\n", - " |TensorConstant{(1,) of 10} [id E]\n", - " |TensorConstant{4} [id F]\n", - " |p [id G]\n" + "ename": "NameError", + "evalue": "name 'rv' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m/Users/juanitorduz/Documents/pymc/docs/intro_pymc_codebase.ipynb Cell 78'\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[39m# RV and value variables can be observed in these scipy operations\u001b[39;00m\n\u001b[1;32m 2\u001b[0m (\n\u001b[1;32m 3\u001b[0m scipy\u001b[39m.\u001b[39mstats\u001b[39m.\u001b[39mnorm(\u001b[39m0\u001b[39m, \u001b[39m1\u001b[39m), \u001b[39m# Equivalent to rv = pm.Normal(\"rv\", 0, 1)\u001b[39;00m\n\u001b[0;32m----> 4\u001b[0m rv\u001b[39m.\u001b[39mrvs(\u001b[39m5\u001b[39m), \u001b[39m# Equivalent to rv_draw = pm.draw(rv, 5)\u001b[39;00m\n\u001b[1;32m 5\u001b[0m rv\u001b[39m.\u001b[39mlogpdf(\u001b[39m1.25\u001b[39m), \u001b[39m# Equivalent to rv_logp = pm.logp(rv, .125)\u001b[39;00m\n\u001b[1;32m 6\u001b[0m )\n", + "\u001b[0;31mNameError\u001b[0m: name 'rv' is not defined" ] + } + ], + "source": [ + "# RV and value variables can be observed in these scipy operations\n", + "(\n", + " scipy.stats.norm(0, 1), # Equivalent to rv = pm.Normal(\"rv\", 0, 1)\n", + " rv.rvs(5), # Equivalent to rv_draw = pm.draw(rv, 5)\n", + " rv.logpdf(1.25), # Equivalent to rv_logp = pm.logp(rv, .125)\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "id": "dejQBR2FUnM3" + }, + "outputs": [], + "source": [ + "with pm.Model() as m:\n", + " sigma = pm.HalfNormal(\"sigma\")\n", + " x = pm.Normal(\"x\", 0, sigma=sigma)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "iXnvzBqorsX-", + "outputId": "bb779d64-5c1b-4233-9131-f64f5dd0e77a" + }, + "outputs": [ { "data": { "text/plain": [ - "" + "{sigma: sigma_log__, x: x}" ] }, - "execution_count": 44, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "fgraph = FunctionGraph(outputs=[nbs], clone=False)\n", - "aesara.dprint(fgraph)" + "# Each model RV is related to a \"value variable\"\n", + "m.rvs_to_values" ] }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 42, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "ENHC2fnu8jyr", - "outputId": "d4989c32-6a2c-4a32-9f58-579cca79eff2" + "id": "xsqHFQ0srsX6", + "outputId": "adfc9a9d-c411-4551-f534-c944bb9e1610" }, "outputs": [ { "data": { "text/plain": [ - "(,\n", - " 1,\n", - " 3,\n", - " 3,\n", - " 2.288818359375e-05,\n", - " 0.0025620460510253906,\n", - " 2.2649765014648438e-05,\n", - " FromFunctionLocalOptimizer(, None, ()))" + "[sigma_log__, x]" ] }, - "execution_count": 45, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "my_optimizer.optimize(fgraph)" + "m.value_vars" ] }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 43, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "6dqyvS8x8rBF", - "outputId": "8ee1e8f4-2c4e-4b05-fb0b-7a04f3b231be" + "id": "i3ME6Y41rsX9", + "outputId": "4f075f4f-29d6-4516-ec7a-1bfffa5998ea" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Elemwise{neg,no_inplace} [id A] '' 2\n", - " |binomial_rv{0, (0, 0), int64, False}.1 [id B] '' 1\n", - " |RandomGeneratorSharedVariable() [id C]\n", - " |TensorConstant{[]} [id D]\n", - " |TensorConstant{4} [id E]\n", - " |Subtensor{int64} [id F] '' 0\n", - " | |TensorConstant{(1,) of 10} [id G]\n", - " | |ScalarConstant{0} [id H]\n", - " |p [id I]\n" + "sigma_log__ [id A]\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 46, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "aesara.dprint(fgraph)" + "# These just an input variable (constants inputs if observed)\n", + "# used in the logp graph\n", + "aesara.dprint(m.value_vars[0])" ] }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 44, + "metadata": { + "id": "JvGOpA3_U0C1" + }, + "outputs": [], + "source": [ + "logp_graph = at.stack(m.logpt(sum=False))" + ] + }, + { + "cell_type": "code", + "execution_count": 45, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "YIXLSKkF_QPL", - "outputId": "166acb34-683b-4478-9b7e-fe6fb2d9d837" + "id": "Y2BIoKk5U4fQ", + "outputId": "a9b67ac9-9fc0-4da8-dabf-90ed7d5b80e9" }, "outputs": [ { "data": { "text/plain": [ - "array(-7)" + "array([-10.22579135, 9.08106147])" ] }, - "execution_count": 47, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# Binomial and bernoulli do not have the same draws, given the same seed, so the results can vary\n", - "# The seed was chosen to illustrate this!\n", - "fgraph.outputs[0].eval({p: 0.5})" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "Zkqw774ThP93" - }, - "source": [ - "# PyMC" + "sigma_value = m.rvs_to_values[sigma]\n", + "x_value = m.rvs_to_values[x]\n", + "logp_graph.eval({sigma_value: -10, x_value:0})" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 46, "metadata": { - "id": "cQITtCM_BrdO" + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "wFAUqf0qU50W", + "outputId": "3480b833-f2c7-43a3-d87f-b2149f67351f" }, + "outputs": [ + { + "data": { + "text/plain": [ + "[array(-10.22579135), array(9.08106147)]" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "![image.png](data:image/png;base64,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)" + "# model compile_logp is a helpers that creates a compiled aesara function\n", + "# of the model logp, which takes a dictionary of {value variable name : value} as inputs\n", + "m.compile_logp(sum=False)({\"sigma_log__\": -10, \"x\": 0})" ] }, { "cell_type": "markdown", "metadata": { - "id": "C8Us4nEyhRdu" + "id": "EHH1hP0uzaWG" }, "source": [ - "## Distributions are just RandomVariables" + "## Some useful Model methods to know about" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 47, "metadata": { - "id": "oTu9tX3FEB1a" + "id": "MsSFt_xDzYn2" }, + "outputs": [], "source": [ - "**Source code**\n", - "* [PyMC [rev 1005d20b3c]](https://github.com/pymc-devs/pymc/tree/1005d20b3c12d9b9a424c069f6a0f9962d73c41d)\n", - "* [Distributions module](https://github.com/pymc-devs/pymc/tree/main/pymc/distributions)\n", - "* [Distribution class](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/distribution.py)\n", - " * See issue [#5308](https://github.com/pymc-devs/pymc/issues/5308)\n", - "* [Discrete distributions](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/discrete.py)\n", - "* [Continuous distributions](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/continuous.py)\n", - "* [Multivariate distributions](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/multivariate.py)\n", - "\n", - "**Guide**\n", - "* [Distribution developer guide](https://github.com/pymc-devs/pymc/blob/1005d20b3c12d9b9a424c069f6a0f9962d73c41d/docs/source/contributing/developer_guide_implementing_distribution.md)" + "with pm.Model() as m:\n", + " mu = pm.Normal(\"mu\", initval=\"prior\")\n", + " sigma = pm.HalfNormal(\"sigma\", size=3, initval=[1, 2, 3])\n", + " y = pm.Normal(\"y\", mu, sigma, observed=[1, 1, 1])" ] }, { @@ -1809,36 +1779,25 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "id": "pe6Xw7ZzHGCu", - "outputId": "6560af03-5c86-44e4-bc27-dd09cfb042ea" + "id": "1JX8cFt8z2b1", + "outputId": "a87d5d8c-ffed-43cf-fbd2-1ba885911a04" }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] '' \n", - " |RandomGeneratorSharedVariable() [id B]\n", - " |TensorConstant{(1,) of 3} [id C]\n", - " |TensorConstant{11} [id D]\n", - " |TensorConstant{0} [id E]\n", - " |TensorConstant{0.7071067811865476} [id F]\n" + "ename": "AttributeError", + "evalue": "'Model' object has no attribute 'compute_initial_point'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m/Users/juanitorduz/Documents/pymc/docs/intro_pymc_codebase.ipynb Cell 88'\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[39m# initial points\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m m\u001b[39m.\u001b[39;49mcompute_initial_point(seed\u001b[39m=\u001b[39m\u001b[39m314\u001b[39m)\n", + "\u001b[0;31mAttributeError\u001b[0m: 'Model' object has no attribute 'compute_initial_point'" ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" } ], "source": [ - "x = pm.Normal.dist(mu=0, tau=2, shape=3)\n", - "aesara.dprint(x)" + "# initial points\n", + "m.compute_initial_point(seed=314)" ] }, { @@ -1848,15 +1807,14 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "id": "xRe_Wsx3hYcG", - "outputId": "9cdcf230-abf2-4605-837d-0c0f5835e1ca" + "id": "VdU6Eev9z-2F", + "outputId": "787ee742-6e73-44ee-e3e9-5010607405f1" }, "outputs": [ { "data": { "text/plain": [ - "(array([-0.27951064, -0.01859431, 1.13900724]),\n", - " array([-0.27951064, -0.01859431, 1.13900724]))" + "[array(-0.91893853), array([-0.72579135, -0.72579135, -0.72579135])]" ] }, "execution_count": 49, @@ -1865,7 +1823,10 @@ } ], "source": [ - "x.eval(), x.eval()" + "# logp\n", + "logp_graph = m.logpt(vars=[mu, sigma], jacobian=False, sum=False)\n", + "logp_fn = m.compile_fn(logp_graph)\n", + "logp_fn({'mu': np.array(0.), 'sigma_log__': np.array([0., 0., 0.])})" ] }, { @@ -1875,26 +1836,14 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "id": "uPaiNiybhgwT", - "outputId": "0b937cf8-262b-40cf-996e-bc662e88653f" + "id": "0wUIYHMd0e3E", + "outputId": "1afd7331-8ded-4338-f6ea-d5449a0b1ae8" }, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", - " |RandomStateSharedVariable() [id B]\n", - " |TensorConstant{(1,) of 2} [id C]\n", - " |TensorConstant{11} [id D]\n", - " |TensorConstant{(2,) of 0} [id E]\n", - " |TensorConstant{[1. ...70710678]} [id F]\n" - ] - }, { "data": { "text/plain": [ - "" + "[array(-0.91893853), array([-0.72579135, -0.72579135, -0.72579135])]" ] }, "execution_count": 50, @@ -1903,9 +1852,9 @@ } ], "source": [ - "with pm.Model() as model:\n", - " x = pm.Normal(\"x\", mu=np.array([0, 0]), tau=np.array([1, 2]), size=2)\n", - "aesara.dprint(x)" + "# logp\n", + "logp_fn = m.compile_logp(vars=[mu, sigma], jacobian=False, sum=False)\n", + "logp_fn({'mu': np.array(0.), 'sigma_log__': np.array([0., 0., 0.])})" ] }, { @@ -1915,14 +1864,14 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "id": "Z-MupoZhhqE_", - "outputId": "8b1dc63a-0fa6-4ca7-bba4-9b6008114bb5" + "id": "fahwjKyu0YfR", + "outputId": "80ec9022-3c86-4110-e35e-70228aa16f88" }, "outputs": [ { "data": { "text/plain": [ - "(array([-1.27348455, 0.38980554]), array([-1.27348455, 0.38980554]))" + "array([3.])" ] }, "execution_count": 51, @@ -1931,8 +1880,10 @@ } ], "source": [ - "# Variables are already seeded, but we might change this behavior in the future\n", - "x.eval(), x.eval()" + "# dlogp\n", + "# m.dlogpt(...)\n", + "dlogp_fn = m.compile_dlogp(vars=[mu])\n", + "dlogp_fn({'mu': np.array(0.), 'sigma_log__': np.array([0., 0., 0.])})" ] }, { @@ -1942,15 +1893,14 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "id": "QqvTnWXMhvW5", - "outputId": "aed259f2-7e33-4dc4-f954-46c73e0c14c2" + "id": "gW9DMRK20uyF", + "outputId": "1532a7e7-3319-4e65-f834-f1335ab1147f" }, "outputs": [ { "data": { "text/plain": [ - "array([[-1.27348455, 0.38980554],\n", - " [ 1.28056807, -0.33584146]])" + "array([[4.]])" ] }, "execution_count": 52, @@ -1959,1136 +1909,37 @@ } ], "source": [ - "# The CORRECT way to draw values is to use `pm.draw`\n", - "pm.draw(x, draws=2)" + "# d2logp\n", + "d2logp_fn = m.compile_d2logp(vars=[mu])\n", + "d2logp_fn({'mu': np.array(0.), 'sigma_log__': np.array([0., 0., 0.])})" ] }, { "cell_type": "markdown", "metadata": { - "id": "wkZR0gDWRAgK" + "id": "I_Ph4o7ZW_XD" }, "source": [ - "## What is going on behind the scenes?" + "## PyMC goes back and forth between the random and log-probability graphs to do cool stuff:\n", + "\n", + "1. Prior predictive\n", + "1. Optimization (MAP, find_constrained_prior)\n", + "1. Sampling (Metropolis, NUTS, SMC)\n", + "1. Posterior predictive" ] }, { "cell_type": "markdown", "metadata": { - "id": "YHWznAnCE8a1" - }, - "source": [ - "**Source code**\n", - "* [Model module](https://github.com/pymc-devs/pymc/blob/main/pymc/model.py)" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "23JVxTUjRHDy", - "outputId": "cc39c67b-ed0d-4ad7-c485-5ae6b0b5d0df" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[x]" - ] - }, - "execution_count": 53, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.basic_RVs" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "jYgwMOzpRcmo", - "outputId": "3178ac69-3666-4464-d6d2-dbaacfc51170" + "id": "jA0IM2EYIF_v" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", - " |RandomStateSharedVariable() [id B]\n", - " |TensorConstant{(1,) of 2} [id C]\n", - " |TensorConstant{11} [id D]\n", - " |TensorConstant{(2,) of 0} [id E]\n", - " |TensorConstant{[1. ...70710678]} [id F]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ - "aesara.dprint(model.basic_RVs[0])" + "## Integration with PyMC\n", + "\n", + "* PyMC Distributions return **RandomVariables** that Aeppl can always parse to obtain a logp graph.\n", + "* PyMC SymbolicDistributions return **arbitrary Aesara Variables** that we know Aeppl can always parse to obtain a logp graph\n", + " * See [Censored distributions](https://github.com/pymc-devs/pymc/blob/1005d20b3c12d9b9a424c069f6a0f9962d73c41d/pymc/distributions/censored.py) for an example where we return `at.clip(RandomVariable, lower, upper)`" ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "8uPz7gDWQ_6k", - "outputId": "a6e5f1be-93c5-4afa-ead6-9827edb7cbe0" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{my_x: my_x}" - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Manual variable registration\n", - "with pm.Model() as model:\n", - " # my_x = pm.Normal(\"x\", 0, tau=5)\n", - " my_x = pm.Normal.dist(0, 1)\n", - " model.register_rv(\n", - " rv_var=my_x,\n", - " name=\"my_x\",\n", - " data=None,\n", - " total_size=None,\n", - " dims=None,\n", - " transform=None,\n", - " initval=\"prior\",\n", - " )\n", - "model.rvs_to_values" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "wPw9kCvASOeJ" - }, - "source": [ - "## Enough with Random Variables, I want to see some (log)probabilities!" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "CVj2ZrbHFKmr" - }, - "source": [ - "**Source code**\n", - "* [PyMC logprob](https://github.com/pymc-devs/pymc/blob/1005d20b3c12d9b9a424c069f6a0f9962d73c41d/pymc/distributions/logprob.py)\n", - "* [Aeppl logprob](https://github.com/aesara-devs/aeppl/blob/2019114d231d8d3d96acc284fe0e6ee42d89c912/aeppl/logprob.py)" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "mgntEABvQyhu", - "outputId": "319b8e86-388a-4ca5-bd3e-c27a24dd306c" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'my_x': array(-0.09312973)}" - ] - }, - "execution_count": 66, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "point = model.compute_initial_point()\n", - "point" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "d3MpBiUlSVGT", - "outputId": "bdf43dff-e5b5-4699-b0b5-b8d0602b2064" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'my_x': -0.92}" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.point_logps(point)" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": { - "id": "bAf_AM1FSbf-" - }, - "outputs": [], - "source": [ - "from aeppl.logprob import _logprob" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "5omppW4-StBp", - "outputId": "8a55d79a-6548-4329-80f0-e59b30123067" - }, - "outputs": [], - "source": [ - "_logprob.registry" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "Gyp98lINTAOz", - "outputId": "91c514a6-1168-4f64-97ff-efe5d0f139bc" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 69, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x = pm.Normal.dist(size=2)\n", - "x.owner.op" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "Am5CBIEoSt1j", - "outputId": "c87b47f8-5b41-4102-ed8b-c10de2647c31" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Check{sigma > 0} [id A] '' \n", - " |Elemwise{sub,no_inplace} [id B] '' \n", - " | |Elemwise{sub,no_inplace} [id C] '' \n", - " | | |Elemwise{mul,no_inplace} [id D] '' \n", - " | | | |InplaceDimShuffle{x} [id E] '' \n", - " | | | | |TensorConstant{-0.5} [id F]\n", - " | | | |Elemwise{pow,no_inplace} [id G] '' \n", - " | | | |Elemwise{true_div,no_inplace} [id H] '' \n", - " | | | | |Elemwise{sub,no_inplace} [id I] '' \n", - " | | | | | |TensorConstant{(2,) of 0} [id J]\n", - " | | | | | |InplaceDimShuffle{x} [id K] '' \n", - " | | | | | |TensorConstant{0} [id L]\n", - " | | | | |InplaceDimShuffle{x} [id M] '' \n", - " | | | | |TensorConstant{1.0} [id N]\n", - " | | | |InplaceDimShuffle{x} [id O] '' \n", - " | | | |TensorConstant{2} [id P]\n", - " | | |InplaceDimShuffle{x} [id Q] '' \n", - " | | |Elemwise{log,no_inplace} [id R] '' \n", - " | | |Elemwise{sqrt,no_inplace} [id S] '' \n", - " | | |TensorConstant{6.283185307179586} [id T]\n", - " | |InplaceDimShuffle{x} [id U] '' \n", - " | |Elemwise{log,no_inplace} [id V] '' \n", - " | |TensorConstant{1.0} [id N]\n", - " |All [id W] '' \n", - " |Elemwise{gt,no_inplace} [id X] '' \n", - " |TensorConstant{1.0} [id N]\n", - " |TensorConstant{0.0} [id Y]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 70, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x_logp = _logprob(x.owner.op, ([0, 0],), *x.owner.inputs)\n", - "aesara.dprint(x_logp)" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "iAYEgYRwTG7i", - "outputId": "ceb009b4-e2e7-4cb5-d706-fa1d34b2557a" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([-0.91893853, -0.91893853])" - ] - }, - "execution_count": 72, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x_logp.eval()" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "zCmmLzwfTL9N", - "outputId": "7dc9cd0e-5c42-4137-ff88-de5d286f81b8" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([-0.91893853, -0.91893853])" - ] - }, - "execution_count": 73, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Helper friendly pymc function to access logp\n", - "# Takes RV + value as input\n", - "pm.logp(x, [0, 0]).eval()" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "oN1FcbE1V2it", - "outputId": "a0cd9e45-2441-42e1-affe-18600b648d61" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Logprob method not implemented for CumOp{None, add}\n" - ] - } - ], - "source": [ - "# What about other types of Ops?\n", - "try:\n", - " y = at.cumsum(x)\n", - " pm.logp(y, [1, 1])\n", - "except NotImplementedError as err:\n", - " print(err)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "yxG5UHslGDEv" - }, - "source": [ - "Note: A similar dispatch strategy is used for `logcdf` and `get_moment`" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "WdZcUfvLUkwK" - }, - "source": [ - "## What is the deal with those value variables in the model?\n", - "\n", - "* RVs for random draws\n", - "* Value variables for logprob evaluations" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "7Sznx-MLs691", - "outputId": "1dac8ba2-899a-47f7-d175-04502b73fd76" - }, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'rv' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m/Users/juanitorduz/Documents/pymc/docs/intro_pymc_codebase.ipynb Cell 116'\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[39m# RV and value variables can be observed in these scipy operations\u001b[39;00m\n\u001b[1;32m 2\u001b[0m (\n\u001b[1;32m 3\u001b[0m scipy\u001b[39m.\u001b[39mstats\u001b[39m.\u001b[39mnorm(\u001b[39m0\u001b[39m, \u001b[39m1\u001b[39m), \u001b[39m# Equivalent to rv = pm.Normal(\"rv\", 0, 1)\u001b[39;00m\n\u001b[0;32m----> 4\u001b[0m rv\u001b[39m.\u001b[39mrvs(\u001b[39m5\u001b[39m), \u001b[39m# Equivalent to rv_draw = pm.draw(rv, 5)\u001b[39;00m\n\u001b[1;32m 5\u001b[0m rv\u001b[39m.\u001b[39mlogpdf(\u001b[39m1.25\u001b[39m), \u001b[39m# Equivalent to rv_logp = pm.logp(rv, .125)\u001b[39;00m\n\u001b[1;32m 6\u001b[0m )\n", - "\u001b[0;31mNameError\u001b[0m: name 'rv' is not defined" - ] - } - ], - "source": [ - "# RV and value variables can be observed in these scipy operations\n", - "(\n", - " scipy.stats.norm(0, 1), # Equivalent to rv = pm.Normal(\"rv\", 0, 1)\n", - " rv.rvs(5), # Equivalent to rv_draw = pm.draw(rv, 5)\n", - " rv.logpdf(1.25), # Equivalent to rv_logp = pm.logp(rv, .125)\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "metadata": { - "id": "dejQBR2FUnM3" - }, - "outputs": [], - "source": [ - "with pm.Model() as m:\n", - " sigma = pm.HalfNormal(\"sigma\")\n", - " x = pm.Normal(\"x\", 0, sigma=sigma)" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "iXnvzBqorsX-", - "outputId": "bb779d64-5c1b-4233-9131-f64f5dd0e77a" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{sigma: sigma_log__, x: x}" - ] - }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Each model RV is related to a \"value variable\"\n", - "m.rvs_to_values" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "xsqHFQ0srsX6", - "outputId": "adfc9a9d-c411-4551-f534-c944bb9e1610" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[sigma_log__, x]" - ] - }, - "execution_count": 78, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "m.value_vars" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "i3ME6Y41rsX9", - "outputId": "4f075f4f-29d6-4516-ec7a-1bfffa5998ea" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "sigma_log__ [id A]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 80, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# These just an input variable (constants inputs if observed)\n", - "# used in the logp graph\n", - "aesara.dprint(m.value_vars[0])" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "metadata": { - "id": "JvGOpA3_U0C1" - }, - "outputs": [], - "source": [ - "logp_graph = at.stack(m.logpt(sum=False))" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "Y2BIoKk5U4fQ", - "outputId": "a9b67ac9-9fc0-4da8-dabf-90ed7d5b80e9" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([-10.22579135, 9.08106147])" - ] - }, - "execution_count": 82, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sigma_value = m.rvs_to_values[sigma]\n", - "x_value = m.rvs_to_values[x]\n", - "logp_graph.eval({sigma_value: -10, x_value:0})" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "wFAUqf0qU50W", - "outputId": "3480b833-f2c7-43a3-d87f-b2149f67351f" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[array(-10.22579135), array(9.08106147)]" - ] - }, - "execution_count": 83, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# model compile_logp is a helpers that creates a compiled aesara function\n", - "# of the model logp, which takes a dictionary of {value variable name : value} as inputs\n", - "m.compile_logp(sum=False)({\"sigma_log__\": -10, \"x\": 0})" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "EHH1hP0uzaWG" - }, - "source": [ - "## Some useful Model methods to know about" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "MsSFt_xDzYn2" - }, - "outputs": [], - "source": [ - "with pm.Model() as m:\n", - " mu = pm.Normal(\"mu\", initval=\"prior\")\n", - " sigma = pm.HalfNormal(\"sigma\", size=3, initval=[1, 2, 3])\n", - " y = pm.Normal(\"y\", mu, sigma, observed=[1, 1, 1])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "1JX8cFt8z2b1", - "outputId": "a87d5d8c-ffed-43cf-fbd2-1ba885911a04" - }, - "outputs": [], - "source": [ - "# initial points\n", - "m.compute_initial_point(seed=314)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "VdU6Eev9z-2F", - "outputId": "787ee742-6e73-44ee-e3e9-5010607405f1" - }, - "outputs": [], - "source": [ - "# logp\n", - "logp_graph = m.logpt(vars=[mu, sigma], jacobian=False, sum=False)\n", - "logp_fn = m.compile_fn(logp_graph)\n", - "logp_fn({'mu': np.array(0.), 'sigma_log__': np.array([0., 0., 0.])})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "0wUIYHMd0e3E", - "outputId": "1afd7331-8ded-4338-f6ea-d5449a0b1ae8" - }, - "outputs": [], - "source": [ - "# logp\n", - "logp_fn = m.compile_logp(vars=[mu, sigma], jacobian=False, sum=False)\n", - "logp_fn({'mu': np.array(0.), 'sigma_log__': np.array([0., 0., 0.])})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "fahwjKyu0YfR", - "outputId": "80ec9022-3c86-4110-e35e-70228aa16f88" - }, - "outputs": [], - "source": [ - "# dlogp\n", - "# m.dlogpt(...)\n", - "dlogp_fn = m.compile_dlogp(vars=[mu])\n", - "dlogp_fn({'mu': np.array(0.), 'sigma_log__': np.array([0., 0., 0.])})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "gW9DMRK20uyF", - "outputId": "1532a7e7-3319-4e65-f834-f1335ab1147f" - }, - "outputs": [], - "source": [ - "# d2logp\n", - "d2logp_fn = m.compile_d2logp(vars=[mu])\n", - "d2logp_fn({'mu': np.array(0.), 'sigma_log__': np.array([0., 0., 0.])})" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "I_Ph4o7ZW_XD" - }, - "source": [ - "## PyMC goes back and forth between the random and log-probability graphs to do cool stuff:\n", - "\n", - "1. Prior predictive\n", - "1. Optimization (MAP, find_constrained_prior)\n", - "1. Sampling (Metropolis, NUTS, SMC)\n", - "1. Posterior predictive" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "V9DNXnRPZHUb" - }, - "source": [ - "# Aeppl" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "kE_CLk-cBoma" - }, - "source": [ - "![image.png](data:image/png;base64,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)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "aVhI2H09GNJi" - }, - "source": [ - "**Source code**\n", - "* [Aeppl [rev 2019114d23])](https://github.com/aesara-devs/aeppl/tree/2019114d231d8d3d96acc284fe0e6ee42d89c912/aeppl)\n", - "* [Aeppl logprob](https://github.com/aesara-devs/aeppl/blob/2019114d231d8d3d96acc284fe0e6ee42d89c912/aeppl/logprob.py)\n", - "* [Aeppl joint logprob](https://github.com/aesara-devs/aeppl/blob/2019114d231d8d3d96acc284fe0e6ee42d89c912/aeppl/joint_logprob.py)\n", - "* [Aeppl cumsum](https://github.com/aesara-devs/aeppl/blob/2019114d231d8d3d96acc284fe0e6ee42d89c912/aeppl/cumsum.py)\n", - "* [Aeppl mixture](https://github.com/aesara-devs/aeppl/blob/2019114d231d8d3d96acc284fe0e6ee42d89c912/aeppl/mixture.py)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "9ZJs2FkBWtxh" - }, - "outputs": [], - "source": [ - "from aeppl import factorized_joint_logprob as aeppl_logp" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "BQTG1HGmZQKd", - "outputId": "aa938c12-dca7-41fd-d753-d9ec32d189ae" - }, - "outputs": [], - "source": [ - "x = at.random.normal(name='x')\n", - "y = at.random.normal(x + 5, name='y', size=2)\n", - "\n", - "x_value = at.scalar('x')\n", - "y_value = at.vector('y')\n", - "logp = aeppl_logp({x: x_value, y: y_value})\n", - "logp" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "Ac_p7H8VZmOd", - "outputId": "bb170324-7647-4953-ef23-215c195570cb" - }, - "outputs": [], - "source": [ - "logp[y_value].eval({x_value: 5, y_value: [5, 10]})" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "jOI-E76fZ2bG" - }, - "source": [ - "## We are not limited to graphs defined in terms of random variables" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "JDCM-tNDZ17z", - "outputId": "64be3438-b00d-4c76-d891-e795fac299d4" - }, - "outputs": [], - "source": [ - "mu = at.random.normal(name='mu')\n", - "innov = at.random.normal(mu, size=10, name='innov')\n", - "rw = at.cumsum(innov); rw.name='rw'\n", - "\n", - "mu_value = at.scalar('mu')\n", - "rw_value = at.vector('rw')\n", - "logp = aeppl_logp({mu: mu_value, rw: rw_value})\n", - "logp" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "tdU2hydcZsj5", - "outputId": "5dbb505c-4dfa-45d7-d336-63a772f69bb2" - }, - "outputs": [], - "source": [ - "logp[rw_value].eval({mu_value: 1, rw_value: np.arange(10)})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "ljDJ4OC21Xqz" - }, - "outputs": [], - "source": [ - "# Taking advantage of Aeppl to write a mixture model in PyMC\n", - "with pm.Model(coords={'trials': np.arange(10)}, rng_seeder=123) as m:\n", - " \n", - " idx = pm.Categorical('idx', p=[0.1, 0.3, 0.6], dims='trials')\n", - "\n", - " components = at.stack([\n", - " pm.Laplace.dist(mu=-5, b=1),\n", - " pm.Normal.dist(mu=0, sigma=1),\n", - " pm.StudentT.dist(nu=7, mu=5, sigma=1),\n", - " ])\n", - "\n", - " # Aeppl understands indexing of RandomVariables as Mixtures\n", - " mix = components[idx]\n", - "\n", - " # Manual registration\n", - " m.register_rv(mix, name='mix', dims='trials')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "x23NgZH0uFys" - }, - "outputs": [], - "source": [ - "# Taking advantage of Aeppl to write a mixture model in PyMC\n", - "with pm.Model(coords={'trials': np.arange(10)}, rng_seeder=123) as m:\n", - " \n", - " idx = pm.Categorical('idx', p=[0.1, 0.3, 0.6], dims='trials')\n", - "\n", - " components = at.stack([\n", - " pm.Laplace.dist(mu=-5, b=1),\n", - " pm.Normal.dist(mu=0, sigma=1),\n", - " pm.StudentT.dist(nu=7, mu=5, sigma=1),\n", - " ])\n", - "\n", - " # Aeppl understands indexing of RandomVariables as Mixtures\n", - " mix = components[idx]\n", - "\n", - " # Manual registration\n", - " m.register_rv(mix, name='mix', dims='trials')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 323 - }, - "id": "FhqBAl6x2zO1", - "outputId": "178a89f2-1aba-4b0d-9416-856079ef2db0" - }, - "outputs": [], - "source": [ - "pm.model_to_graphviz(m)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "AqVrkUSa22VJ", - "outputId": "ea61c9f3-a55a-4847-cf88-4c255828a910" - }, - "outputs": [], - "source": [ - "m.compute_initial_point(0)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "Si-CF02h2SYz" - }, - "outputs": [], - "source": [ - "with m:\n", - " prior = pm.sample_prior_predictive(return_inferencedata=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "QgEzJatT3o7K", - "outputId": "49ee9556-604c-4b8d-9c55-1c0300f226bc" - }, - "outputs": [], - "source": [ - "prior['mix'].shape" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 265 - }, - "id": "vybLX6zQ3I60", - "outputId": "21bd01c3-d0c0-4b3b-b422-eb095108e65e" - }, - "outputs": [], - "source": [ - "plt.hist(prior['mix'].reshape(-1), bins=50);" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "ccGMrWNa4Jdn" - }, - "outputs": [], - "source": [ - "# Same model but with observed\n", - "# We can't use dims... it breaks something in Aeppl, perhaps the SpecifyShape?\n", - "with pm.Model(coords={'trials': np.arange(10)}) as m:\n", - "\n", - " idx = pm.Categorical('idx', p=[0.1, 0.3, 0.6], size=10)\n", - "\n", - " components = at.stack([\n", - " pm.Laplace.dist(mu=-5, b=1),\n", - " pm.Normal.dist(mu=0, sigma=1),\n", - " pm.StudentT.dist(nu=7, mu=5, sigma=1),\n", - " ])\n", - "\n", - " mix = components[idx]\n", - "\n", - " # Now we pass data when we register the variable!\n", - " m.register_rv(mix, name='mix', data=prior['mix'][0])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "CuPKZ1YX5Ymp", - "outputId": "55df0eaf-2ea2-4a10-d8bd-7915a4a4a9b7" - }, - "outputs": [], - "source": [ - "m.point_logps()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 231 - }, - "id": "U7_uxbDU4RE2", - "outputId": "9fbb36da-add3-48a3-d1e4-040b350073d8" - }, - "outputs": [], - "source": [ - "with m:\n", - " trace = pm.sample(return_inferencedata=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "LMMA-8G65m1i", - "outputId": "63176de3-0760-4175-9b56-749a8d4256ff" - }, - "outputs": [], - "source": [ - "# Posterior indexes\n", - "np.median(trace['idx'], axis=0).astype(int)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "rB0qC7LL6MWp", - "outputId": "2b34ed25-f083-4416-ac9d-e817637421a5" - }, - "outputs": [], - "source": [ - "# True indexes\n", - "prior['idx'][0]" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "Rq2W2fmobmFg" - }, - "source": [ - "## What does aeppl support?\n", - "1. Dimshuffles, Broadcast, boring stuff\n", - "2. Indexing (mixtures)\n", - "3. Clipping (censoring)\n", - "4. Cumsum (random walks)\n", - "5. Scans (generalized time series)\n", - "\n", - "### What is in the roadmap?\n", - "6. Deterministics (exp, log, add, ...)\n", - "7. Switch, IfElse (more mixtures)\n", - "8. Truncation\n", - "9. Ordering (sort, max, min, median...)\n", - "10. Arbitrary nesting of \"derived\" logp terms\n", - "\n", - "### Other stuff\n", - "11. Automatic marginalization of latent variables\n", - "12. Removing normalization constants from logp graph\n", - "\n", - "\n", - "https://github.com/aesara-devs/aeppl/labels/enhancement\n", - "\n", - "**NOTE: Many features are still experimental. Use with caution**" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "jA0IM2EYIF_v" - }, - "source": [ - "## Integration with PyMC\n", - "\n", - "* PyMC Distributions return **RandomVariables** that Aeppl can always parse to obtain a logp graph.\n", - "* PyMC SymbolicDistributions return **arbitrary Aesara Variables** that we know Aeppl can always parse to obtain a logp graph\n", - " * See [Censored distributions](https://github.com/pymc-devs/pymc/blob/1005d20b3c12d9b9a424c069f6a0f9962d73c41d/pymc/distributions/censored.py) for an example where we return `at.clip(RandomVariable, lower, upper)`" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "l9gdpeefJJmZ" - }, - "outputs": [], - "source": [] } ], "metadata": { From 3102c80fcc7280559cd777a6ce155d3dfdb5001a Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Sat, 23 Apr 2022 16:01:54 +0200 Subject: [PATCH 06/30] add intro section and simple examples --- docs/intro_pymc_codebase.ipynb | 921 +++++++++++---------------------- 1 file changed, 294 insertions(+), 627 deletions(-) diff --git a/docs/intro_pymc_codebase.ipynb b/docs/intro_pymc_codebase.ipynb index acf072c660..0839890f2e 100644 --- a/docs/intro_pymc_codebase.ipynb +++ b/docs/intro_pymc_codebase.ipynb @@ -6,23 +6,13 @@ "id": "JUC0Xac4JTNS" }, "source": [ - "# Intro to PyMC codebase\n", - "\n", - "Tags: Aesara, AePPL, PyMC, RandomVariable, Distribution, Model, logp\n", + "# PyMC and Aesara \n", "\n", "**Authors:** [Ricardo Vieira](https://github.com/ricardoV94) and [Juan Orduz](https://juanitorduz.github.io/)\n", "\n", - "For a summary overview please see [Architecture.md](https://github.com/pymc-devs/pymc/blob/main/ARCHITECTURE.md)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "9SBUpHzxJs8s" - }, - "source": [ - "![image.png](data:image/png;base64,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PY2xFRIgARLwQwI+LbBWrlwp/fv3l1atWkl8fLwfDp81bnnevHkyePDgTAssiOVnn31WmjdvLgEBAda4OT/rBbgvXrxYx4ECy88Gn7dLAiTgVgI+LbDwYXDrrbfKqFGjKLDc+likr7GXXnopfSekcnTLli3l/fffl6CgoFSO4i5PEQgMDJRBgwZR4HoKMNslARLwGwI+LbAwSqanAx8MNO8TSEhIcOuHMcYTY8nx9P5Ymlek9zDr2PPKJEAC9iFAVWKfseSdkAAJkAAJkAAJWIQABZZFBoLdIAESIAESIAESsA8BCiz7jCXvhARIgARIgARIwCIEKLAsMhDsBgmQAAmQAAmQgH0IUGDZZyx5JyRAAiRAAiRAAhYhQIFlkYFgN0iABEiABEiABOxDgALLPmPJOyEBEiABEiABErAIAQosiwwEu0ECJEACJEACJGAfAhRY9hlL3gkJkAAJkAAJkIBFCFBgWWQg2A0SIAESIAESIAH7EKDAss9Y8k5IgARIgARIgAQsQoACyyIDwW6QAAmQAAmQAAnYhwAFln3GkndCAiRAAiRAAiRgEQIUWBYZCHaDBEiABEiABEjAPgQosNw0lvv27ZPXXntNbr75Zrnxxhule/fusmTJEklISHBc4Z133pHXX39dNm3alOSq8fHx8vbbb2sbO3bscOy/cuWKzJkzRx544AGpXr26NGjQQF566SXZvXt3kjbsuiE6OlpGjRolzZs3l1q1asn9998vs2fPlkuXLjluGfzAylOGMXvjjTdkxIgRcvny5SSXWbVqle4fM2ZMmvuB/qLfsFOnTum4bt68OUnbmdkwbtw4+eabbzLTBM8lARIgARLIAAEKrAxAcz1lz549csMNN8iGDRvksccekyeffFI/ZOvXry9Tp051HP7qq6/KW2+9Jb/88otrE7J+/XoZMGCA7j99+rTuRxv40L799tulcOHC0rt3b+nSpYts3LhRSpcuLStWrEjSjt02nD9/Xh566CEZP368tGnTRhlUqFBBWrVqJe+++65DoAwZMkTZe8oggN5880159tln5eDBg0kuM336dN3/77//OvqU5CCnDRjbHj16yOeff65bL168KBMnTpQLFy6kdlq6961Zs0a2bNmS7vN4AgmQAAmQQOYIZMvc6TwbBObOnSsBAQHy1VdfSWRkpELBh32+fPnUK3XPPfdISEiI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BEiABHx+seczZ87I7t275cqVKxzNLCCQkJAgJ0+edNuVT58+LTt27JCgoCC3tcmG0k4gMDBQjh8/LkWLFk37STySBEiABEggCQGfFlj4cJ86daq+aFlLoHXr1m7pwLfffit40bKWwFdffZW1HeDVSYAESMDHCfi0wOrQoYO0b9/ex4fAHt2H5yOzdtttt9ETmVmIbjo/ICDATS2xGRIgARLwTwI+LbDwIcAPAns9uO4QavYiwrshARIgARLwRQKZdzv44l2zzyRAAiRAAiRAAiTgQQIUWB6Ey6ZJgARIgARIgAT8kwAFln+OO++aBEiABEiABEjAgwQosDwIl02TAAmQAAmQAAn4JwEKLP8cd941CZAACZAACZCABwlQYHkQLpsmARIgARIgARLwTwIUWP457rxrEiABEiABEiABDxKgwPIgXDZNAiRAAiRAAiTgnwQosPxz3HnXJEACJEACJEACHiRAgeVBuGyaBEiABEiABEjAPwlQYPnnuPOuSYAESIAESIAEPEiAAsuDcNk0CZAACZAACZCAfxKgwPLPceddkwAJkAAJkAAJeJAABZYH4bJpEiABEiABEvh/e2cCHlV59fEz2VeyLwTIAoGECIQlLG7QoqhV27orXV1qP21rrdbPtmpt1drPYq3VumGtO1hAqtQFRBS1KvseICSZ7Pu+78t3zjuZYWYyAYozmcm9/9MnD8mde9/l9wb595xzzwEBfRKAwNLnuWPXIAACIAACIAACLiQAgeVCuBgaBEAABEAABEBAnwQgsPR57tg1CIAACIAACICACwlAYLkQLoYGARAAARAAARDQJwEILH2eO3YNAiAAAiAAAiDgQgIQWC6Ei6FBAARAAARAAAT0SQACS5/njl2DAAiAAAiAAAi4kAAElgvhYmgQAAEQAAEQAAF9EoDA0ue5Y9cgAAIgAAIgAAIuJACB5UK4GBoEQAAEQAAEQECfBCCw9Hnu2DUIgAAIgAAIgIALCUBguRAuhgYBEAABEAABENAnAQgsfZ47dg0CIAACIAACIOBCAhBYLoSLoUEABEAABEAABPRJAAJLn+eOXYMACIAACIAACLiQAASWC+FiaBAAARAAARAAAX0S8DiB5eXlcUvS528Gdg0CIKBLAvhvsC6PHZt2AQEfF4z5lYZ85513qKKi4iuNgYdBAARAAAROj0BBQQEFBASc3sN4CgRAwELAowTWrFmzyN/fn5qamnBEIDDmCBgMBqqsrFS/v+np6WNu/VgwCAiBqKgouvnmmwEDBEDgKxIwDLJ9xTHwOAiAwBCBv/zlL5Sbm0vPPfccmIAACIAACOiYAASWjg8fW3cugdLSUkpMTFSD7t69m+bNm+fcCTAaCIAACIDAmCGAjPIxc1RYqKcTePnlly1LfPTRRwnOYU8/MawPBEAABFxHAB4s17HFyDoiUFRURFlZWVRfX2/Z9Y4dO2jBggU6ooCtggAIgAAImAnAg4XfBRBwAoG1a9faiCsZ8qWXXqK+vj4njI4hQAAEQAAExhoBeLDG2olhvR5HwDr3yn5x+/fvp8zMTPvL+BkEQAAEQEDjBODB0vgBY3uuJ/Daa685nETKNqxYscLhZ7gIAiAAAiCgbQLwYGn7fLE7FxMoLi6m5ORkNYsIqqSkJBoYGFC1sFpaWtR15GK5+BAwPAiAAAh4IAF4sDzwULCksUPA7L267bbbaM+ePfTwww/THXfcob5/6KGH1Eaefvpp5GKNnSPFSkEABEDAKQQgsJyCEYPokUBhYSFVVVXRoUOH6PHHH6c5c+aQt7e3ElOpqal07733krxdOHXqVCW4YCAAAiAAAvohgBChfs4aO3UygcbGRoqIiLAZdc2aNSRJ73fddZfN9ba2NgoJCXHyCjAcCIAACICApxKAB8tTTwbr8ngC9uLqRAuGuDoRHXwGAiAAAtojAIGlvTPFjkAABEAABEAABNxMAALLzQeA6UEABEAABEAABLRHAAJLe2eKHYEACIAACIAACLiZAASWmw8A04MACIAACIAACGiPAASW9s4UOwIBEAABEAABEHAzAQgsNx8ApgcBEAABEAABENAeAQgs7Z0pdgQCIAACIAACIOBmAhBYbj4ATA8CIAACIAACIKA9AhBY2jtT7AgEQAAEQAAEQMDNBCCw3HwAmB4EQAAEQAAEQEB7BCCwtHem2BEIgAAIgAAIgICbCUBgufkAMD0IgAAIgAAIgID2CEBgae9MsSMQAAEQAAEQAAE3E4DAcvMBYHoQAAEQAAEQAAHtEYDA0t6ZYkcgAAIgAAIgAAJuJgCB5eYDwPQgAAIgAAIgAALaIwCBpb0zxY5AAARAAARAAATcTAACy80HgOlBAARAAARAAAS0RwACS3tnih2BAAiAAAiAAAi4mQAElpsPANODAAiAAAiAAAhojwAElvbOFDsCARAAARAAARBwMwEILDcfAKYHARAAARAAARDQHgEILO2dKXYEAiAAAiAAAiDgZgIQWG4+AEwPAiAAAiAAAiCgPQIQWNo7U+wIBEAABEAABEDAzQQgsNx8AJgeBEAABEAABEBAewQgsLR3ptgRCIAACIAACICAmwlAYLn5ADA9CIAACIAACICA9ghAYGnvTLEjEAABEAABEAABNxOAwHLzAWB6EAABEAABEAAB7RGAwNLemWJHIAACIAACIAACbiYAgeXmA8D0IAACIAACIAAC2iMAgaW9M8WOQAAEQAAEQAAE3EwAAsvNB4DpQQAEQAAEQAAEtEcAAkt7Z4odgQAIgAAIgAAIuJkABJabDwDTgwAIgAAIgAAIaI8ABJb2zhQ7AgEQAAEQAAEQcDMBCCw3HwCmBwEQAAEQAAEQ0B4BCCztnSl2BAIgAAIgAAIg4GYCEFhuPgBMDwIgAAIgAAIgoD0CEFjaO1PsaJQIGI1GamtrO+lsfX19VFRUdNL7cAMIgAAIgIB2CEBgaecssZNRJhAeHk6ZmZm0fv16am5uHjZ7V1cXbd26lRYsWEAismAgAAIgAAL6IQCBpZ+zxk6dTCAqKoruvfdeuuqqq2jZsmW0evVqqqqqopaWFvrggw/o6quvpqVLl9LFF19MqampTp4dw4EACIAACHgyAcMgmycvEGsDAU8m0NTURBEREZYlent7k5eXF/X29lqu5eXlQWB58iFibSAAAiDgAgLwYLkAKobUDwEJE7766quWDff399uIq/vuuw/iSj+/DtgpCIAACFgIwIOFXwYQ+IoEGhsbKS0tjWpra4eNJMntSUlJw67jAgiAAAiAgLYJwIOl7fPF7kaBgIQI//znPw+b6aGHHqLExMRh13EBBEAABEBA+wTgwdL+GWOHo0CgoaGBsrKyqLCwUM0WFhZGu3btoqlTp47C7JgCBEAABEDA0wjAg+VpJ4L1jEkCkZGRdP/991vWfsstt0BcjcmTxKJBAARAwDkE4MFyDkeMAgKqFpYkvYsVFBRQSkoKqIAACIAACOiUgI9O941tg4DTCUhYcM2aNRBXTieLAUEABEBg7BGAB2vsnZnbVnzBBRfQx7sPEaF02ohnMNjTRYMD/eQVEDziPbr/wEA0NzWRPv30UwoMDNQ9DgAAARDQJgF4sLR5ri7ZVXl5OSWedxmFTODQF0SWSxjrYdCuxloq27Kaf4VQ41gP5409goBeCUBg6fXkT2Pf8g9iYHQChSYkn8bTeAQETAS8/fypFeIKvw4gAAIaJ4C3CDV+wNgeCHgcAYgrjzsSLAgEQMD5BCCwnM8UI4IACIAACIAACOicAASWzn8BsH0QAAEQAAEQAAHnE4DAcj5TjAgCIAACIAACIKBzAhBYOv8FwPZBAARAAARAAAScTwACy/lMMSIIgAAIgAAIgIDOCUBg6fwXANsHARAAARAAARBwPgHUwXI+U4w4hgh0N9VTf18vcXFxCoyKIzLIdzAQAAEQAAEQ+GoEILC+Gj88PYYJDPT2UPbrf6Xu0ly1i3m/eYb8w6PG8I6wdBAAARAAAU8hgBChp5wE1jHqBNpryi3iSiZvyM8e9TVgQhAAARAAAW0SgAdLm+eKXZ0Cgcb8w+oug7cvDfb3UtnnGyl+3mKOEh4PE0rj5qbCHGqvLCXy8qLw5DQKGZ9oCSUOcHix0XiY2iqKycvHj0ISkigseRp5eR//q9VcnEudDTXU195GQTHjKXTSFPINCuGm0APUUpJHA/19FBw3iVpK80m8arGzFqlrzUW51FFbySscpODYCTQuMZXn8D2FneEWEAABEAABdxOAwHL3CWB+txDo7+mmso2r1NxTrvsZ5a96nHqriqi9qtQkoPh6f3cnHV23kloObbOssYS/S7r8Zpqw6HySMQ69+hh15B2w2UPUgmU07YqbVEPsws3rqGrrv2w+94mZRLNvuZ+kJ59x0z+pq+goBabMoM6CQxRzzqUUPX0uhy6foLac3TbPhWWeQ9OvvdVGvNncgB9AAARAAAQ8hgBChB5zFFjIaBJoqyhiATSgpoxKn0ORC85Xgsjs1ZLrtYd3K3EVmHIGZd7xZ0q74dfq/uK3/k7dzQ3K+yTiKmhqJmXdt5Jm//Iv6vP6nR+y56mC76k3iSuDF2Xc8iBl3vkY+URPoL7aUmqvLlP3KuN5RVzFnvtNipw2kz1ZRiWuApLSafZdj9MZtz6obms+8Dl11lcPPYQ/QAAEQAAEPJkAPFiefDpYm8sIVO37XI2dcOFy5UmKmHIGNezcQjUHvqSEBV8nL19fFlumnKzwyRnUz6E7CesFJGewx+mIEkFyj1hH/kEq+GAdxczIolm3r6CAyBjy9vVXYb6ZP3+EPWFdHNrzYXFUQ/1NteqZQf7M2lKu/gmN5/CkvMXY295CM2/j53q7qbejXT1nNglJwkAABEAABDyfAASW558RVuhkAiJg6rdvVqP2tDRS+faP+M8G9bO8UdhRX6VynlqMR9S1yo/WqS9r6+KcqoSFSyn6zIuobtsmati1RX2JRZ/1DZryjeUql6vu8B6bZ71CImiwrcdmLPlhHOdlmUtEDLJHq+yLTdS49xPLfQbO7xrs6+FyEigjMQweLoAACICABxKAwPLAQ8GSXEuguTjPMoGIozq76RqOHaQQTjoPnjiZWppqVGgwdEKKusvAie7qT05iH+jvp8Qll6rEeAkH1hzcocJ4dV9upGgOO0pSvAgz/4lTadqVP6LAyFjKf/d1FmIf2c3It1olxVft/Y8SV+FzFlPKsqvI2z+A9j5xDw222K902DC4AAIgAAIg4CEEILA85CCwjFEiwN6h2uxdarKYsy+m2MwzLRO3lORT6buvUPmmVTTpnIsoLCWdWrK3U/X+L5XAkvDc/qd/RwOt9ZxT9YB6c7Dk3y9SRNZSmvatH3L+VCYd4XtaD++gvq5Odb9YYPR45RHrZm+ZI3Flv/Oe1hZ1Seb0D4vkeYpoYEhcDfIbhTAQAAEQAAHPJwCB5flnhBU6kYAkpzfu2apGjJt9Fpc+mGoZXcSMCCyxZhZb8nnl9i3UtO8z2s1fZotkQSUhPcnJkrcKG3d/TDv4y9qkVENPa7O61LT/M9rJpRxEmHmHxVB/cy2XbailcBZwjiwkIZEk60rWUvHlZupvqCSv4HAaaG+ifhZuMBAAARAAAc8nYOB8D/xfYs8/J49YYUZGBhmWLGdhkOYR6zmdRUjCeHtNGac7cU0r3oe3f+DxYfivQv2x/epn3+BxSkT1dXVQ/dF91JB3kAVVKEVOnUnhqWdYQnqddVVUn7Of6nPl8xAKS5pK0RnzlOdJ3g5sKjrGHrAv1Jjxc88ln4Ag6mqs5VCjt0qslxpakgwfljRNPS8mtbfqjuxR+Vt+YRE0np8Tj1hvRyv5BJrmUDeOUevgAq9Vq1aQ0WikoKCgMboLLBsEQAAETkwAAuvEfPCpFQEtCCwcqPsJQGC5/wywAhAAAdcTQB0s1zPGDCAAAiAAAiAAAjojAIGlswPHdkEABEAABEAABFxPAALL9YwxAwiAAAiAAAiAgM4IQGDp7MCxXRAAARAAARAAAdcTgMByPWPMAAIgAAIgAAIgoDMCqIOlswN35Xal5ICUJgjn8gPSJsYTrbejjcsu7OW+gfNViQbpEyilGaQI6MSzLxpx3VJUtKngKPX3dJGB+wpKVXYpLCp9DE/FpNyDNJKWMg5+oeGn8siI93Q11lErFx+NmjaL+yH6jXifow8Gufp8Q94hCoyKpaCYBEe34BoIgAAIgIATCMCD5QSIGMJEoJyLYkqbFxoY8FgkfZ0dVLD2aVVXSqxs22bKX/U4NbLoEHHoyEo+e5cOPnE3lW1ZTx1c96q58BjlvfYY7f/7H6mnzVRM1NFz1td629so7/XHLMVHT3b/iT7v5D6Ixn+9oMTeqZjx/dWmc+Gbpbp84aY11FFbeSqP4h4QAAEQAIHTJAAP1mmCw2OOCIjXyjM9V45WK9dEaEQtvIDSrrjJ4S3itSp77zWaePH3aSK3zzH3DOyoraBDL66ggk1rKf2qmx0+O+wiFxd1mv0XY7WUFnDh0yg1tRd73GZc/0vysS6w6rRFYSAQAAEQAAEzAQgs/C6MKoG2qlKqPcS9+jrayScomNvRnM2hqvGWNUhl9JpDO1UF9bDEVK6oHko97a0Uc0bWsHW2lhVypfQcikqbrTw04p0JTUim2FmLuBmzScz0d3dS9YHt1FlfzWOFcHX2odY40pOQ52krKyAvH18q+3wTTTj7QpsQoVRUL/nsPQqcMpMmnnWBTUNmCa+lXHQdlXzybw4zdqpwY09rE9XwXF1NdaopdPD4RIqdsWDEMF59zj4VdpR1S79Cac0j1dylV6KEMhMWfN20Z15rzcHtShxFT587jENfZ7tiJqJPBK7wjJ25gKu+B1Plrk+omyvX1+f4qArxE3mPDVx1PjQhhUInmhpYt/OZSKNqGceHGcUxvyDunSgm90rleWkpVHdkN++1m4LjJ1LcnHMsrBrzs9V90vw6gCvYx3Hleb+QccPWiQsgAAIgoCcCCBHq6bTdvNeWUiMdfPwu6m5upLDkNGqvKqP9/LPkE4lJhe99j97OOVH7WJT4UtHHb9HhlQ+awncO1t5ZX0Wl77xMB597ULW+kRCfce0zVLT1bXV3f083Za96kko/+hd5c65Se2UpHXn+geMjmZ1tnC8m4sM+RNjLwq6D1xyTkeVQJMXOWkhZP3/YlMvFcx144f+olkWI7C0gMo4K336Jirf+28HKicq3f0THXnpEzRscn0hlWzdQLt8v1lJmVCLUbNLNqpGFWFtlicOxDr/xFJWxEBw3cTJJH8OyT9+ho+tWqntFPLLaU1/Snmegr48qtm3hnLMG9XlLSR4d+OvdfCb1at0d1eW0/7E7LXOJ+Cp66wXKXvkQ322g/t5uKljzFFXv/Vw9LyIx58VHyD88SrUekhY/+/lec6NrdRMMBEAABHRIAB4sHR66O7YsIiHv369QzFkXU+q3fqC8H9Ezsij71cep/IsPKP3q/6Gij96mcTMWUcbynylhMGHR+bT/WStBNMLCU6+8mfv/mTw7oRNSyPjPJ2n8vMXUXl1G7cf20qxfPEoh7E0SK4qKo4oP17BWMHCi+wIWBHvZ0xNEkxZfMmz0/t4eGmhrYG/OCMngVon80tjZj8NwU3lvQdHxQ2MNUsn7qyjlgqtsxhZPV/Fbz1PSZT+iCWcuU58FsEDJ+cfD1HnRtcPWIRdGemlAvE4iZtKvvVX1ThTz9vGjgndfU17AuDlnU8XOrezly1TeK0nqN5v0QCz+5B2KmLuY0piheN0k+T+HxW3+e6/T7B/dY7qV95lx06/V+HKOAywmpb9i/LxzOXE/mwKS09nDd6G6V3oqlv7nfSWiJZEeBgIgAAJ6JQAPll5PfpT33cNv6XWX5lIMe33MYkHymcZnLaFW9hKJ6GjO2avCe8rrwuYXEkYR6bNPutIIbr5stvDJ09W38laghCP9J02ziCu5HjUkxI4PyontIyS3W+452ed8Y2BkDM343u3Ur94WzKYyTviv2PYhDfb1HJ9q6DtZm1gEN442m+xhwQMvUUBEzLD7T3RBwoCZN9ytwpcSbqzY8RGVfrFR7WnQ6mWDwcHhLx6IOGs9sks1oRZxJSah1Uh+O7GLvYviARQLTM4gEa7qcxZbASxS+ziEKRbCIdlO4yESL5qENmXMKRd/B+JK0YGBAAjomQA8WHo+/VHcex/nKck/+pJTZW1efn7U39ai3sYb7O0a/jl7Y/r7TW/8jbRc61IJZqEwwN6n7uYGDtXZChZfFiSnahJW9AqJYKFWQpHsAbK3psIcKtj4hsXjlr3qCeqpq6bQlHSeN5ZCJ6VSQ02p7WMcluxtayWDXxALyeN//SR85xMQZD/F0M+DHJobLtTkQ/FI5ax/nlo4NBmaNleF6sISp1FdQ+0IYx2/LCUbWIVxqYkAm3u9mDmxd8sc5pNSEGaucqM5sirfx3Mull/wOJUjVvTBWuqtKaHgaXPojO/+/AT7OenScAMIgAAIjHkCEFhj/gjHxgbUW2ucB9TNNZyChxKoZeXNRbkUxKEnqStl8A3kBPF6mw21cX5WIHtMTmTi/TLXljKXX/DhZPGA8Ghq4hpX1iYlDk7VZMzQyRkq32j8/K+rBHSzSais5sA26irOUV4n8Vh1c9L97DtXqL2IlX35ATXssZYjfJEdZr5BoTTY02ETrhMxKGE3SfoXU+JnyOT7VhZzwzkYqNF4hJqzd9CMWx+0hAir9n1Odbbbtoxl/Y14qwzevvwSQYvN5x11lWRgsWe9X4cD8MXWymIKjpuoQrySmN/OOVxHX/gDifh0lJA/0ji4DgIgAAJaI4AQodZO1M37kRBRByefS70o6y8J94VmzKdyDmFJbpCYvNlXs/tTlT8lb+FFc7iwYsfHyvMkyd81nOjdnrvvpDuSN+jEOyY5ReXbP1T3yz/6oZz03VdfqfKsxORtv3JO8P5vTHKzequKKHfDyyRvOMo8IiTk7cG6bZso/aZ71XCDPDexYDGLEnmjr0wS3AePCyXzvIHRceQVOI4qd3+m9ilfsu/pMU/OAAAZgklEQVRyrrPly2/fiSeri583cRhg4fUl70PeEBxuEvozePtZPH/yTCXnXIkANIc+RUhJSE9dszJf9jyFzzmXSjlBXs5NTARoFYc2JzrISRs+Oyfrc/5cPnvxRATK3oN4b2LmchaOnsE1EAABENADAXiw9HDKo7RHCWO1H9tDB46w4LGzrPtWUuol36PDq5+gnb+7gfwSplBPhZEi559HsZlnqruTvvZNJWT2/PFW9bPcI+EmSUg/kUm5hZIN/zDdwqG2GT99WP0DH85vxY0/72rKfeVPZAyLof7mWgo9Y6HNUBIGE2E2kklid/qN95Dx3dfVG47WlnzFjy15VBJCLOO3FWVvhoAQGuxqo/ivX0FVW//FCeOrVZkHCbtxZpQSUOk/vIuOvvwo1Xy2QQ1p8Auk9OtNuVSxMxcqkWPmEMA5UEFTM01vOqq7WUy21Kk/pZSFNyfX7/vTbeQdHkf9TdUUt+Qyqi7IJikwmnbFj1T5h8J1z1Dl1rdo0YMvU39HqxJbkk+VvPRyOvLPp2nn7288fiZZS1VyvNgAi7/+HtsQrVwz52AlLFxK2U/fRzvystkTOZnacvZQSHqWqlgPAwEQAAE9EzDwf2gdl6/WMxXs3SGBjIwMMixZrl7Hd2S9HGqyTqy2vkdyryTPSLxX8uq/lEAI5Lft5Mvs7RCxI54Q8aZIOQApjimCS/KmUi/93rApJUSXv/qvtPDBV6ilNF89Gxw/iZ+LtNwr62nn8g9dnJMk9aHkbT1Zg4TpxLMja5asIvvcMPvJ5BnxYHWxh0hyvkJ4HvuWN+I9knwt2WdoQhK/nRhCEuKUHKYgrnPVy8JGktLNSfzCoL1GPFODam3i5TObeMk6OVQnfzuD47gmFX8jf1XFSyTJ51LFXb6XueTeVq7nJd6skPFJal3CWJ6RWlyDzFW8iZLzJeuQkKC3rz97DU25V+pM+I3LXs6FkzBkIK/FfCbqLUXmal3XSuYTr5t5vbJvKbUxyCUg/MZxWJUT30/UwkfKcVStWkFGo5GCgkbKO7M/AfwMAiAAAmOLADxYY+u8PHq1EnI6mYn3RuotObIjbzxN3gGBlHYZe7i8I1QIsfnYAZry7esd3W65JkIhInWGw3skOVvEkHyZzc+qf9+prFmek3VLyFG+RjIRdtbiTu6zvt9ekImoG0msinjy5eKejkwEnnViv9wrb/5Zm7kshVwz8H6tf7YWcvK5OhMur+DIRBDam31ulqN92z+Dn0EABEBAbwQgsPR24h6836Sl36ZDT/6adnHidiB7bSTcFDHvaw7f4JNtjOQt8+AtYmkgAAIgAAI6IQCBpZODHgvblFpL8+9/QYWrVIjwG8tV6GykhGmpI5V552NjYWtYIwiAAAiAgM4IQGDp7MA9fbsqbDZULPRka5W8IPS8OxklfA4CIAACIOAOAijT4A7qmBMEQAAEQAAEQEDTBCCwNH282BwIgAAIgAAIgIA7CCBE6A7qOp2zraKYSj9/X1V0t7YQLgoq5RUkNGguYeAKRHkbXqFxSamWaumumMN6TCk7IcVSi7mFTH9jtfpIalSNX/B1q4bQrl6F7fiypkIuaBrJb12O9Obl6K4Is4EACICANglAYGnzXD1yV1JvqXHPJzTpkh9Y6k7Jm4CN+Yep9L1XKe5rl9OUb1znsrU3l+Ryjad4l41vPbDUrCr9z0Yq37SKUq66hXsERnNxznauAL+BanZsoTm/+BO32IkelbXYrIt5txTn07gJI5ebGPVFYUIQAAEQ0CABCCwNHqqnbylm1kLVJ9Bs8dwixxgaRrXcNmfSud+wFLAU8SUFLaWSu4G9XtYNh1WvPq5xZSrAye1i5H/ys3XVdynOyWOISVHRYTb0uVRylzcVre8xtZrhcXletQ7+nxT1lOrnqr0NPyvfyzVHJsU9RVylfucOrlS/yHJL+OR02rPiF9xD8DCN532bTfaj2t6Id4/3IWOLnXgdvC71jNU6VEFSvsbrsowp442wTsv85j0JRztWsgbVCohNGJ9sLPOY+BMEQAAE9EwAAkvPp+8hexeBIBXEB/tNldxlWa3lhVT44XpqO7pLrTJk+nxKOf9KLtyZon7e8fBPaMLSy6iDmwvX7zT1H5TWNdKUWURAf3eXarZcvmm1uj/xWzfSQNfxli8SKqviJs5F659Tn4tN/d4vKfqMeUpANOQeoDLusxedMY+K3/q7+nz8eVdR1PS5lMfV5btLc0la2Ey/5lZeu6m589Aw6g9pGyQ2wHuyNinymfb9Oy2hUBEvNQe+JOOap6Qvjbo1dvG3uYXNt1XV99ZSI+W+/RIlLDqP17pSfR618AKawK13jO+/oVoT+cRMounX/VSxkeKsB576LU2+/CYyvvkcN5XupICk6TTt8htUlXd7k/kb87OpgNvq9FQUsLjzocm8pzhuX6SqxHPV96KPN1Dt5++qRwNSMmjaZTfaFG61HxM/gwAIgAAIcBFnQACB0SagvDRWJi1o6o7soaDEaeQ/LkJ5XrKfuZ+iF55Pafc8qzwyRVveomNvPk/zbv+j8tgMtDdR6TsvU+I3b6CJd/yZ6o7uo6J/Pc85VtPUP/5FW9+m6k/epmnX/0qNKWKpr67cMmv1vi+UuJI+g5L/1ZB7kPJef4wMP7xbiarBfm6xc2yvajsz87ZHqK2yiApZsFR+vJ6mff8uFeIs5mbOee+8SrOuv2sYQh+uSD9uxiIqYOHUUpJPUemzKTAyllsDjbeput5WWUzGN55kT9cvVE6UNFuWfQZwVfiJ51yk9t5Tnk91h8O4x+IfqKe1mXJffZTqd2ymlKt/QsHnX6EaaOe8uZLm3fYH1TtwoLOFjOuepfQb7iYf/yBucL2ZDv7tHpp/73PDWtg0FRyhnBf+QMlX3sJV5dNVyx3jP5/kSvEBFHNGFnPbzGK3gOb86m/Ky1f2JY/1+F206I+rRqxPNgwGLoAACICADglAYOnw0N29ZXMTY5t1sOjKuo+9SSKe2Ls08cLrKHbWItV6RgRXRGoGNR3br/oUmlu1SDPliWdfqJ6RFjsVW9ZRD/fF62bPTzU3Np76g/+laPY4iUlu157Du9X3A+xdKnzzWSUqpEmz2Pj5X6MWFhfV3N8wKm22uiY2+cJrlEDzD4+k4pAISlh8KXu5stRn4u0ye5WGbrf8Id6ftCtvpnLuyyc5ZnXbNlk+m/TN62nCovOVF8ubv5Iu/7EaUwSMtP0Zxy1ypNiqtU2+8FoK4f6G0ocwcPIMFWI1hxh7O9uocffHKlxqttTlt1HElDPUj5MvupYa+PMW9oZZ1xiTUKcIz9hzL6UETrwXk8KuHbUVVLJ1gxJY3S0NLNICVTsd8aglLrmUIqfOUGfCi7fMh29AAARAAARsCeC/kPiNGHUCU5b/3NIoWf6hlmbM4o0q+3yTEgMiMmJnn0X1Ofuop6VJNRJuPbyDvMNibNYaJE2Qh3KVRAAY/AKpn8WZeHnEbPrvsSfKlz1IYtKcWCwsMVX9abbo6XMob/0Lqoq8mFdIpGo0Labyr1hQSCjTbPaeOMsHQ9+IEEw+73IlSnramk3hTPaUyV77uGFyygVXU1DsBBZNPVTOniG5pzHvkArVSRjQMg/vy5eLqopJ+FO8S1L13vK5nUdQrkuzabOJMPKbkMpiqdGS2yWf9XVyk2cWXWLFLKhMZlDh2d6meg6zdiqRm/OPh2nXAzep0GXohCQl3Kx7IZrnwZ8gAAIgAALHCUBg4bdh1AlIs2frJHdpVCy5Qw3c2FkEloTJ9j/xGwqclEoTzlxG4VMyqGvmAire+E+btZoTwe03IGE1x2by8EgYTcw+mbuPc7S8OfRnFk4+LMrMAs483qkmeLeU5FFt9m5KWXalCsvJfuUrgvcqmrD+6F5K5vBezYHtKiQXt+Tbap9xc86m8u1b2Bt1fAcGDvNZJ/g7Wrv9flVyvJWpvdpxUcnr7P0K5jIZ4h0zmwhTlTjPgjKS2xFl/fZ5FTqsZQ+ghDMNPn4091dPKs8eDARAAARAwDEBFBp1zAVXR5mA5DrJm3fi0ZLEblEhGdfeqsJUkhvUO+SVOpVliTdLTESb2XraWqiPvTJikmguJnW5rK3m4HYax6JOBNFXtYG+Pqr+9G1qqyq1GUqJQgOLnaG38eqOmhpaT7n4Oyo0GRgVT10NtV91epK8NrNJWLW75Bjnf8Wb3koc+sCHPYWBnPcmJnObv0TdiciVkKOIvZ7WJs4hm0PpHPKc+5un+Zx6qIO9jjAQAAEQAIGRCUBgjcwGn4wiAW9ffxrgkFQff0kC+WBXGzVzcrj8Q157aCeVffgmvxHXTd1DIulES5M8ooispVTw3mpOMM9TIciST9+hgQ5T6FBCd+OXXUNFm9dRU8FR6mAxUrX3PyoMKSUV7L1FJ5prpM9CJ06moNRMyln7HNVz7lg7Cy1JaJck8dptH1DMjIXqUUlC76itUmE5EWOl/3mP2nM5NMqiRoTR6VrBxjdUcr3Mm//uKvKJnsBhw2Sb4URIxmctpuovNvJLBnsVB3nZIHf131QIUHLEWkrzqeCDdSonrLO+Ro0pJrlxMBAAARAAgZEJIEQ4Mht84mQCKn8oIk7VrLK3gIgo8uGQkwiNiMkZFHP2xfwmHJclYI9PMHuw0r5/BxnfW0XFLJTEs+Ubn8xJ4b42w/hzqMtrqIZT6sXLKZ8F1uEX/0RenKQdM/dcCss8m0WDyTuVeO4lNMCCLeeNp2iwu4O8QyNUzSpzdXMZx89KRIjnyY89QObxZWKDj49ahyMTgTL9mlu4xMHblC95Xa2c/8SCxicyjpK+dT0nqC9WjyVxqYnDLGiyVz5IXgHBFMvJ9pOv+amq/l6bvZPfcEwk/5gEmc0yjW9wiE3Fewn/eQWZvHLmmyLZ43TktcfV3vx5jIzv3q6S1CXB349rjpnDo3Gc6yYlLYxcemKgo4W8gsfRBA5dxs05R7FPWXYVr+8pOvjUfSps6cXeP3njMYjfhoSBAAiAAAiMTMDAeRi2yRoj34tPdE4gIyODDEuWc8gubVRImJPRzd4SeYNO3nwzhwBPugj+1ZbEbvHEiFfMkUmdJxlXQpSuatMjc0h+l4gaCU/azyOFTiWZ39vPj9dpSmbvbW9Vyf729zrag/U18dYdeOxOmsflLcRDJeLJbxzv7SRv/EmV/V5OvJekfhFi1iaFVrub65n9IK8v5NT5j7BY8UpWrVpBRqORgoJM4dwRbsVlEAABEBizBODBGrNHp/2F24eh/us319gDYz+GPTURNL62esL+lq/8s2kOk3ByNJiIH/u2OSMJQkfPO7omif4SCjWXtHB0j/U1VYZhKHfN/l7xPAZE2L7BaX8PfgYBEAABELAlgBws/EaAgIYIyBuQ3uEchnVQukFD28RWQAAEQMDjCcCD5fFHhAWCwKkTkDcFs375KHk74U3IU58Vd4IACIAACNgTgMCyJ4KfQWAME5Bk/P86lDqG94ulgwAIgICnEkCI0FNPBusCARAAARAAARAYswTgwRqzR4eF/7cE5C05VZOqskQV3JS39KRSeRg3iHa2ST/F8m1bKG72meqtPKnYPi5xCvf6k5ILMBAAARAAAa0TgAdL6yeM/SkCUtl87xP3UOHbL3Fhz0quGN9HjbmH6PAzv+UipO+q8g/ONBFYpe++rEofyFwFa5+irsY6p0zR1VhLe599QO0DBgIgAAIg4JkE4MHyzHPBqpxIQOpc5bz5PHmzJ2nGTb+iYG6wLCb1nar2fEaFbz6r2vGMs2v+7KwleHFz5qz7VrLHLNApQ0o7oa6iI7IDp4yHQUAABEAABJxPAALL+UwxoocRaC7Opc7Cw5TxP7+3iCtZotR3ip+3mGq4FU9LmVEJLPE4FW1ZT/Fc+V2aG/sEBFLikm+qvoYVu7ZSd2M9Fwz1UoIsNvMsS0K5iDjVboebIkvoMW722RYK0mOxfMdHFJ0xz9KuRtrSVO7k8bgQqhQ5HT9/iWVt1fu/5HW0UghXYJf+iP1cfV3mk7VKAdKCzWvV2MUfb6CEhUtJmmfDQAAEQAAEPIsAQoSedR5YjQsIqObRbI6EiIiszBvvpolnXajukXBe7Rfvc+uah1TbHi/ukShVzvf/7V7q5J6B8fPOpXBu5VPE/f0qWDSJSSX23LdfpDJuiyNlEnzYU5X91D3qMzEJP1Z+uJZ6ueG0mIy7/9HblZiLnDaTq7g3qurr5gbK8mfJhhcpd/3fKZjb/0ix0MJ1z1D90b1c2d3H0qZGipN6s3cMBgIgAAIg4HkE4MHyvDPBipxMoLW8iAJSMlRvPbNVsPeon4WTxbgw58RzLrL8GMuCa/KFV7OXy1t5rwK5efO0y2/kVjemiuzSdLqtopgFWb/6s3HPJzTjpw9bwoyBUXGcd/X0sJ2IGJPG01ELltG0K27iJRkoduZCOsJeropdn1DqJd9Vz0hvwRk33M1iKl7N0V5dzgn6B5QXLI69a5UfvclesrMoaCjcOWwiXAABEAABEHArAXiw3Iofk48KARYx0uSYXx20TNfZUK2SxOWr7sgelZDOribL5yJkRFyJBUbG0kxuNt1ZX8X37qXCD9+kqi820cBQYrwIMENgKIVOSLE8b24abb+/fu5J2HzgCwqIjKGmgiPUmJ9NzSX5/KZhENWy6DObf/wkJa7EpIdhWPI0FR5UNrQPtBE108KfIAACIOB5BODB8rwzwYqcTECET8uhL1X4z+Dlp0afctF1llmKt/6byjlHy9qsmyN3sbfq4N8fZreSF0WkzaaAsEiK4hyrHs6TInaKSSNkf/EkHXeQqdwtRyY9AsVaOGwpTaDNJn0AYxYstfxs3+RZPF0wEAABEACBsUMAAmvsnBVWepoEwpKmUjk/KyG2mBnzbUaR/KrKz9494ci12btogJPY5/7iEUuIMG/DK6Zn2CkmjZC7inNooK+Pc6JMXq/OhhqHY4pXzMB5XZJEb70Wybvq7bQKWTp8GhdBAARAAATGCgGECMfKSWGdp01g3KQpFJqxgPLf+BvV8ZuB8saf5EKJCBKhNNB53JPkcBJ2Hhm4t58kmEvCenNxHtVu26g8YuKRCklIVo9V7v5Ufd7f3UllX2x2OJQUHY0580L1pmJPW7PKr5Iw5UFOqm/jAqinYmZvloQMESY8FWK4BwRAAARGnwA8WKPPHDOOMgEvFkdpnFAuyeW5rz5qM3tE1lJKu/5XdOylR9R1s2Axh/LkWhSHBcs2rqadv7tB3eMdEUcJy66his1rqITFVfLSy2jytT+jgjVP8dt//1D3RPK4YtYCSMYUcZS4+BLqYnG3+6Efk09UAvXVV1Dk/PPYq3WOekaKlPZ1tqvvzSaCUISbmHjMvMPj6MjK39PU7/2SYmYusL4V34MACIAACHgAAQP/A4BqhR5wEGNhCRkZGWRYspxrMo3NuktSWLSntUm9FSieJhEqAeHRKrdKxIvkQck9/T1d5M1hPEkuN1sPl1iQMJ7kRknpBBFt8rM84x8epRLPu5sbqKOukseN5XGjuH5Vt2kcHr+Px5dnzblVIqLEcyVeLH/O6QqKirfMJx42Sbi3Lkxqf01CmzKfzOOsAqaj9Tso3KpWrSCj0UhBQUGjNS3mAQEQAIFRJQAP1qjixmTuJCA1r0TMyJe9iVASk3vM31vfI+UZzCUazNeD+U0/i7FnSoSWEltD5uN9XDzYjylCK2R8ovUUlu+9/fyHXbe/JuPZjznsIVwAARAAARBwGwHkYLkNPSYGARAAARAAARDQKgEILK2eLPYFAiAAAiAAAiDgNgIQWG5Dj4lBAARAAARAAAS0SgACS6sni32BAAiAAAiAAAi4jQAEltvQY2IQAAEQAAEQAAGtEoDA0urJYl8gAAIgAAIgAAJuIwCB5Tb0mBgEQAAEQAAEQECrBCCwtHqy2BcIgAAIgAAIgIDbCEBguQ09JgYBEAABEAABENAqAVRy1+rJumBfXlzlvKW8QLWZgYHA6RLoaqxVPRlhIAACIKBlAhBYWj5dJ+/tkksuoe5u7pNHTU4eGcPpikCgL3kvX84tIOFA19W5Y7MgoDMCaPasswPHdkEABEAABEAABFxPAP8X0vWMMQMIgAAIgAAIgIDOCEBg6ezAsV0QAAEQAAEQAAHXE4DAcj1jzAACIAACIAACIKAzAhBYOjtwbBcEQAAEQAAEQMD1BCCwXM8YM4AACIAACIAACOiMAASWzg4c2wUBEAABEAABEHA9AQgs1zPGDCAAAiAAAiAAAjojAIGlswPHdkEABEAABEAABFxPAALL9YwxAwiAAAiAAAiAgM4IQGDp7MCxXRAAARAAARAAAdcTgMByPWPMAAIgAAIgAAIgoDMCEFg6O3BsFwRAAARAAARAwPUEILBczxgzgAAIgAAIgAAI6IwABJbODhzbBQEQAAEQAAEQcD0BCCzXM8YMIAACIAACIAACOiMAgaWzA8d2QQAEQAAEQAAEXE8AAsv1jDEDCIAACIAACICAzghAYOnswLFdEAABEAABEAAB1xOAwHI9Y8wAAiAAAiAAAiCgMwIQWDo7cGwXBEAABEAABEDA9QQgsFzPGDOAAAiAAAiAAAjojAAEls4OHNsFARAAARAAARBwPQEILNczxgwgAAIgAAIgAAI6IwCBpbMDx3ZBAARAAARAAARcTwACy/WMMQMIgAAIgAAIgIDOCEBg6ezAsV0QAAEQAAEQAAHXE4DAcj1jzAACIAACIAACIKAzAv8PeF9dbKdZoWcAAAAASUVORK5CYII=)\n", - "\n" + "In this notebook we want to give an overview of how PyMC models translate to Aesara graphs.\n", + "\n", + "**Remark:** For a summary on PyMC internals and design please see [Architecture.md](https://github.com/pymc-devs/pymc/blob/main/ARCHITECTURE.md)." ] }, { @@ -36,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -46,14 +36,14 @@ }, "outputs": [ { - "data": { - "text/plain": [ - "('2.5.1', '4.0.0b6')" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Aesara version: 2.5.1\n", + "PyMC version: 4.0.0b6\n", + "\n" + ] } ], "source": [ @@ -66,7 +56,11 @@ "import aesara.tensor as at\n", "\n", "import pymc as pm\n", - "aesara.__version__, pm.__version__" + "\n", + "print(f\"\"\"\n", + "Aesara version: {aesara.__version__}\n", + "PyMC version: {pm.__version__}\n", + "\"\"\")" ] }, { @@ -75,7 +69,7 @@ "id": "ru2m_lFK7Atx" }, "source": [ - "## Intro to Aesara\n", + "## Introduction to Aesara\n", "\n", "We start by looking into [aesara](https://github.com/aesara-devs/aesara/). According to their documentation\n", "\n", @@ -104,7 +98,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -134,16 +128,38 @@ "\"\"\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have defined the `x` and `y` tensors, we can create a new one by adding them together." + ] + }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 11, "metadata": { "id": "jApxApHT1rmq" }, "outputs": [], "source": [ "z = x + y\n", - "z.name = \"x + y\"\n", + "z.name = \"x + y\"\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To make the computation a bit more complex let us take the logarithm of the resulting tensor." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ "w = at.log(z)\n", "w.name = \"log(x + y)\"" ] @@ -152,12 +168,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can use the [`aesara.dprint`](https://aesara.readthedocs.io/en/latest/library/index.html#aesara.dprint) function to print the computational graph of the given tensor." + "We can use the [`aesara.dprint`](https://aesara.readthedocs.io/en/latest/library/index.html#aesara.dprint) function to print the computational graph of any given tensor." ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 13, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -180,10 +196,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 4, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -196,12 +212,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The aesara function [`aesara.function`](https://aesara.readthedocs.io/en/latest/library/compile/function.html#aesara.compile.function.function) is used to define a callable object so that we can push values trough the graph." + "Note that this graph does not any computation (yet!). It is simply defining the sequence or steps to be done. The aesara function [`aesara.function`](https://aesara.readthedocs.io/en/latest/library/compile/function.html#aesara.compile.function.function) is used to define a callable object so that we can push values trough the graph." ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 14, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -209,22 +225,45 @@ "id": "-XtR1jZS13_6", "outputId": "e101c9f0-7640-4fd0-aa6b-f8ba2e226886" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{Composite{log((i0 + i1))}} [id A] 'log(x + y)' 1\n", + " |InplaceDimShuffle{x} [id B] '' 0\n", + " | |x [id C]\n", + " |y [id D]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# we compile the graph with numba (conda install -c numba numba)\n", - "f = aesara.function(inputs=[x, y], outputs=w, mode=\"NUMBA\")" + "# we compile the graph with numba.\n", + "f = aesara.function(inputs=[x, y], outputs=w, mode=\"NUMBA\")\n", + "\n", + "aesara.dprint(f)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Let's run some concrete values." + "Now that the graph is compiled, we can push some concrete values:" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -233,13 +272,12 @@ "array([0., 1.])" ] }, - "execution_count": 6, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# keyword arguments only valid for named variables\n", "f(x=0, y=[1, np.e])" ] }, @@ -247,12 +285,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Sometimes we just want to debug, we can use `eval` for that:" + "**Remark:** Sometimes we just want to debug, we can use `eval` for that:" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -267,7 +305,7 @@ "array([0., 1.])" ] }, - "execution_count": 7, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -285,7 +323,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 17, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -300,16 +338,141 @@ "array([0., 1.])" ] }, - "execution_count": 8, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# You can set intermediate values as well\n", "w.eval({z: [1, np.e]})" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Aesara is clever!\n", + "\n", + "Ont of the most important features of `aesara` is that it can automatically optimize the mathematical operations inside a graph. Let's consider a simple example:" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{true_div,no_inplace} [id A] 'a / b' \n", + " |InplaceDimShuffle{x} [id B] '' \n", + " | |a [id C]\n", + " |b [id D]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = at.scalar(name=\"a\")\n", + "b = at.vector(name=\"b\")\n", + "\n", + "c = a / b\n", + "c.name = \"a / b\"\n", + "\n", + "aesara.dprint(c)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let us multiply `b` times `c`. This should result in simply `a`." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{mul,no_inplace} [id A] 'b * c' \n", + " |b [id B]\n", + " |Elemwise{true_div,no_inplace} [id C] 'a / b' \n", + " |InplaceDimShuffle{x} [id D] '' \n", + " | |a [id E]\n", + " |b [id B]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "d = b * c\n", + "d.name = \"b * c\"\n", + "\n", + "aesara.dprint(d)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The graph shows the full computation, but once we compile it the operation becomes the identity on `a` as expected." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Alloc [id A] 'b * c' 1\n", + " |a [id B]\n", + " |Shape_i{0} [id C] '' 0\n", + " |b [id D]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "g = aesara.function(inputs=[a, b], outputs=d, mode=\"NUMBA\")\n", + "\n", + "aesara.dprint(g)" + ] + }, { "cell_type": "markdown", "metadata": { @@ -339,7 +502,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -347,22 +510,7 @@ "id": "UV95InOX3W2z", "outputId": "047197ff-5c73-429d-d93a-427620c4b215" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "z type: TensorType(float64, (None,))\n", - "z name = x + y\n", - "z owner = Elemwise{add,no_inplace}(InplaceDimShuffle{x}.0, y)\n", - "z owner inputs = [InplaceDimShuffle{x}.0, y]\n", - "z owner op = Elemwise{add,no_inplace}\n", - "z owner output = [x + y]\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "print(f\"\"\"\n", "z type: {z.type}\n", @@ -383,7 +531,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -391,33 +539,7 @@ "id": "thLifxKW3ka3", "outputId": "6c98f77b-922a-4869-bfeb-281b3f29e8dc" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---\n", - "Checking variable log(x + y) of type TensorType(float64, (None,))\n", - " > Op is Elemwise{log,no_inplace}\n", - " > Input 0 is x + y\n", - "---\n", - "Checking variable x + y of type TensorType(float64, (None,))\n", - " > Op is Elemwise{add,no_inplace}\n", - " > Input 0 is InplaceDimShuffle{x}.0\n", - " > Input 1 is y\n", - "---\n", - "Checking variable InplaceDimShuffle{x}.0 of type TensorType(float64, (1,))\n", - " > Op is InplaceDimShuffle{x}\n", - " > Input 0 is x\n", - "---\n", - "Checking variable y of type TensorType(float64, (None,))\n", - " > y is a root variable\n", - "---\n", - "Checking variable x of type TensorType(float64, ())\n", - " > x is a root variable\n" - ] - } - ], + "outputs": [], "source": [ "from aesara.tensor.elemwise import Elemwise\n", "\n", @@ -447,7 +569,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -455,29 +577,7 @@ "id": "ltcXsJUQ-NZL", "outputId": "2c9543a8-1be6-47cb-efc7-1f83187e068b" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Elemwise{log,no_inplace} [id A] 'log(x + y)' \n", - " |Elemwise{add,no_inplace} [id B] 'x + y' \n", - " |InplaceDimShuffle{x} [id C] '' \n", - " | |x [id D]\n", - " |y [id E]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "aesara.dprint(w)" ] @@ -495,7 +595,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -510,7 +610,7 @@ "[x, y]" ] }, - "execution_count": 12, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -529,7 +629,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -547,7 +647,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -564,10 +664,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 14, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -585,7 +685,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -609,10 +709,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 15, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -632,7 +732,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -647,7 +747,7 @@ "array([1. , 2.71828183])" ] }, - "execution_count": 16, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -668,7 +768,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -698,10 +798,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 17, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -714,7 +814,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -722,25 +822,7 @@ "id": "noKfjvwS65q-", "outputId": "bed5b895-8c4e-4c0e-95c9-8eefdbbd55fa" }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:absl:No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)\n" - ] - }, - { - "data": { - "text/plain": [ - "DeviceArray([1. , 2.71828183], dtype=float64)" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "f(x=0, y=[1, np.e])" ] @@ -769,7 +851,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -777,20 +859,7 @@ "id": "THRvGbP1WmhH", "outputId": "c4f044e6-83c3-4c4c-9ecf-8714efae6f36" }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEWCAYAAACJ0YulAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAcFklEQVR4nO3de5xddX3u8c9DQO4UMANCEggoqIDUS0RrbUsFCgIC7UtOw/ESEU1RvPQcWwmiIkpqvGO1Hk8UBOVmjmDhiCgRRKqWS0DkFpQUIgmJZCAgFzWS+PSP9ZvFZthJ9kxm7zWTed6v17xmr8te67v27NnP/q3fusg2ERERAJs0XUBERIweCYWIiKglFCIiopZQiIiIWkIhIiJqCYWIiKglFGLYJH1E0nkjvExJ+pqkhyXdMJLLHk8kvUXSj4cw/2JJB5fHH5D01RGs5XFJe5bH50g6YwSX/WVJHxqp5UVCYUyS9GpJP5X0G0krJf1E0subrmuEvBo4BJhs+4CmixmPbP+L7betbz5J10ha73y2t7F9z4bW1S7obJ9o+2Mbuux4yqZNFxBDI2k74DvAO4B5wLOAvwBWNVnXCNodWGz7iXYTJW1qe3WPa+q6jXG7NsZtGg/SUhh79gawfaHtNbZ/Z/tK27cCSHqupKslPSTpQUnnS9p+4MllN8E/S7pV0hOSzpK0s6QrJD0m6QeSdijzTpVkSTMlLZO0XNL71laYpFeWFswjkn4u6cCWaW+RdE9Zx72S3tDm+ScAXwX+rOxyOF3SgZKWSjpZ0q+Br0naXNKZpaZl5fHmZRkD879f0opS8zGSDpf0y9Ky+sA6tuEIST+T9KikJZI+so55B9b1vpZ1Hd8y/U8kfV1Sv6RfSfqgpE1aXo+fSPqcpJXAR8qulS+Vv8XjZfpzyvY9LOkuSS9pWf4sSf9VXtM7Jf3t2mptU/ubSk0PSTp10LR6t6CkLSSdV+Z7RNKN5f0ym+rLyBdLrV8s81vSSZLuBu5uGfe8llVMlDS/1P0jSbuX+Qbeb5u21HKNpLdJeiHwZZ56bzxSpj9td5Skt0taVP7Ol0natWWaJZ0o6e7yev6bJHX6mo0btvMzhn6A7YCHgHOB1wI7DJr+PKrdL5sDfcC1wJkt0xcD1wE7A5OAFcDNwEvKc64GTivzTgUMXAhsDbwI6AcOLtM/ApxXHk8qdR1O9WXjkDLcV577KPD8Mu8uwL5r2b63AD9uGT4QWA18otS3JfDRsg07leX/FPjYoPk/DGwGvL3UfAGwLbAv8Htgz7Ws/8CynZsA+wMPAMesY97VpZ7Nyrb/duBvAnwduLSsdyrwS+CElu1cDbybqsW+JXAO8CDwMmCL8re4F3gzMAE4A/hhy/qPBXYttf498ASwS7vXcVDd+wCPA39ZXtPPllra/V3/Afj/wFalhpcB25Vp1wBvG7RsA/OBHYEtW8Y9rzw+B3isZd2fH6iTp95vm7Ysr15Hu20qyzujPH5Nef1eWpb9BeDaQbV9B9ge2I3qfXFY0//To+0nLYUxxvajVPvdDXwF6C/fiHYu0xfZnm97le1+qn/4vxq0mC/YfsD2/cB/ANfb/pntVcC3qQKi1em2n7B9G/A14Lg2pb0R+K7t79r+o+35wAKqD0qAPwL7SdrS9nLbdwxhs/9IFVSrbP8OeAPwUdsryjaeDrypZf4ngdm2nwQuAiYCn7f9WFnvHVQf+M9g+xrbt5VtuJUqEAe/fq2eLLU8afu7VB+2z5c0geqD+pSy3sXAZwbVucz2F2yvLtsF8G3bN9n+PdXf4ve2v257DfBNWv42tv+f7WWl1m9SfTPvpB/m9cB3bF9b/uYfonqN17Z9z6b6UF9Tant0Pcv/uO2VLds02OUt6z6V6tv/lA7qXp83AGfbvrks+5Sy7Kkt88yx/Yjt+4AfAi8egfVuVBIKY5DthbbfYnsysB/Vt8UzASTtJOkiSfdLehQ4j+pDsdUDLY9/12Z4m0HzL2l5/KuyvsF2B44tuxgeKc37V1N9c32C6gPyRGC5pMslvaDzLaa/fEgO2LXUsbaaHiofogPbA+vfRgAkvULSD8sun9+Umge/fq0e8tP3m/+2LHsiVX/P4DontQy3vq4DOv7bSHqzpFtaXu/91lPrgF1b113+Pg+tZd5vAN8HLiq76j4pabP1LL/ddrWdbvtxYCXt31ND9bT3RVn2Qzz9Nf91y+OBv1W0SCiMcbbvompC71dGfZyqFbG/7e2ovsFv6H7T1m9xuwHL2syzBPiG7e1bfra2PafU+X3bh1DtOrqLqpXTqcGX8l1GFULrq2k4LgAuA6bY/hOq/djDef0epPqWPbjO+1uGh32J4rIf/ivAu4Bn294euJ3Oal1Oy99U0lZUrYFnKC2g023vA7wKOJJqd9a66l/fdrWuexuqXU3LqHZ/QbWrasBzhrDcp70vJG1NtV33r/UZ8QwJhTFG0gtKx+bkMjyFanfOdWWWbal2YTwiaRLwzyOw2g9J2krSvsDxVLsxBjsPeJ2kQyVNKB2UB0qaXDomjyr/pKtKfWvaLKNTFwIflNQnaSJV/8FInS+xLbDS9u8lHQD8z+EspLRU5gGzJW1bPsT/9wjWuTXVh2Q/QOng3m+dz3jKt4AjVR3a/CyqPpG2nwWS/lrSi8rusEepgm7gb/cAsOcwaj+8Zd0fo9p9uaTsCrwfeGN5D70VeG7L8x4AJpfntXMBcLykF6s68OBfyrIXD6PGcSuhMPY8BrwCuF7SE1RhcDswcFTQ6VQdbb8BLgcuGYF1/ghYBFwFfNr2lYNnsL0EOBr4ANUH1RKqQNqk/LyP6pvcSqp99O/cgHrOoOqvuBW4jaqjfKROiHon8FFJj1GFzbwNWNa7qb793gP8mOpD6+wNrhCwfSdVH8V/Un1Yvgj4SYfPvQM4qdSzHHgYWLqW2Z9DFSKPAgup3gsDwfZ54PXlSJ5/HUL5FwCnUb0XXkbVFzDg7VTvm4eoDgr4acu0q6n6g34t6cE223UVVf/IxWW7ngtMH0JdAcjOTXaivdJBdy+wmXO8ecS4kJZCRETUEgoREVHL7qOIiKilpRAREbUxfUG8iRMneurUqU2XERExptx0000P2u5rN21Mh8LUqVNZsGBB02VERIwpkn61tmnZfRQREbWEQkRE1BIKERFRSyhEREQtoRAREbWEQkRE1BIKERFRSyhEREQtoRAREbUxfUZzxMZg6qzLR3R5i+ccMaLLi/ElLYWIiKglFCIiopZQiIiIWkIhIiJqCYWIiKh1LRQknS1phaTbB41/t6RfSLpD0idbxp8iaVGZdmi36oqIiLXr5iGp5wBfBL4+MELSXwNHA/vbXiVppzJ+H2A6sC+wK/ADSXvbXtPF+iIiYpCutRRsXwusHDT6HcAc26vKPCvK+KOBi2yvsn0vsAg4oFu1RUREe73uU9gb+AtJ10v6kaSXl/GTgCUt8y0t4yIiood6fUbzpsAOwCuBlwPzJO0JqM28brcASTOBmQC77bZbl8qMiBifeh0KS4FLbBu4QdIfgYll/JSW+SYDy9otwPZcYC7AtGnT2gZHRDeN9GUpIkaTXu8++nfgNQCS9gaeBTwIXAZMl7S5pD2AvYAbelxbRMS417WWgqQLgQOBiZKWAqcBZwNnl8NU/wDMKK2GOyTNA+4EVgMn5cijiIje61oo2D5uLZPeuJb5ZwOzu1VPRESsX85ojoiIWkIhIiJqCYWIiKglFCIiopZQiIiIWkIhIiJqvT6jOaKncvZxxNCkpRAREbWEQkRE1BIKERFRSyhEREQtoRAREbWEQkRE1BIKERFRSyhEREQtoRAREbWuhYKksyWtKHdZGzztnyRZ0sSWcadIWiTpF5IO7VZdERGxdt1sKZwDHDZ4pKQpwCHAfS3j9gGmA/uW53xJ0oQu1hYREW10LRRsXwusbDPpc8D7AbeMOxq4yPYq2/cCi4ADulVbRES019M+BUlHAffb/vmgSZOAJS3DS8u4dsuYKWmBpAX9/f1dqjQiYnzqWShI2go4Ffhwu8ltxrnNOGzPtT3N9rS+vr6RLDEiYtzr5aWznwvsAfxcEsBk4GZJB1C1DKa0zDsZWNbD2iIigh62FGzfZnsn21NtT6UKgpfa/jVwGTBd0uaS9gD2Am7oVW0REVHp5iGpFwL/CTxf0lJJJ6xtXtt3APOAO4HvASfZXtOt2iIior2u7T6yfdx6pk8dNDwbmN2teiIiYv1yRnNERNQSChERUUsoRERELaEQERG1hEJERNQSChERUUsoRERELaEQERG1hEJERNQSChERUUsoRERELaEQERG1hEJERNQSChERUUsoRERELaEQERG1rt1kR9LZwJHACtv7lXGfAl4H/AH4L+B424+UaacAJwBrgPfY/n63aovYmE2ddfmILm/xnCNGdHkxunWzpXAOcNigcfOB/WzvD/wSOAVA0j7AdGDf8pwvSZrQxdoiIqKNroWC7WuBlYPGXWl7dRm8DphcHh8NXGR7le17gUXAAd2qLSIi2muyT+GtwBXl8SRgScu0pWXcM0iaKWmBpAX9/f1dLjEiYnxpJBQknQqsBs4fGNVmNrd7ru25tqfZntbX19etEiMixqWudTSvjaQZVB3QB9ke+OBfCkxpmW0ysKzXtUVEjHc9bSlIOgw4GTjK9m9bJl0GTJe0uaQ9gL2AG3pZW0REdPeQ1AuBA4GJkpYCp1EdbbQ5MF8SwHW2T7R9h6R5wJ1Uu5VOsr2mW7VFRER7XQsF28e1GX3WOuafDczuVj0REbF+OaM5IiJqCYWIiKglFCIiopZQiIiIWs/PU4hYl5G+mFtEDE1aChERUUsoRERELaEQERG1hEJERNQSChERUUsoREREbb2hUG5oc5KkHXpRUERENKeTlsJ0YFfgRkkXSTpU5RKnERGxcVlvKNheZPtUYG/gAuBs4D5Jp0vasdsFRkRE73TUpyBpf+AzwKeAi4HXA48CV3evtIiI6LVO+hRuAj4H3Ajsb/s9tq+3/RngnnU872xJKyTd3jJuR0nzJd1dfu/QMu0USYsk/ULSoRu2WRERMRydtBSOtX2Q7Qtsr2qdYPvv1vG8c4DDBo2bBVxley/gqjKMpH2o+i72Lc/5kqQJnW1CRESMlE5C4W2Sth8YkLSDpDPW9yTb1wIrB40+Gji3PD4XOKZl/EW2V9m+F1gEHNBBbRERMYI6CYXX2n5kYMD2w8Dhw1zfzraXl+UsB3Yq4ycBS1rmW1rGRURED3USChMkbT4wIGlLYPN1zD8c7Q5xddsZpZnl3IkF/f39I1xGRMT41kkonAdcJekESW8F5vPULqChekDSLgDl94oyfikwpWW+ycCydguwPdf2NNvT+vr6hllGRES008l5Cp8EZgMvpOoI/lgZNxyXATPK4xnApS3jp0vaXNIewF7ADcNcR0REDFNHd16zfQVwxVAWLOlC4EBgoqSlwGnAHGCepBOA+4Bjy/LvkDQPuBNYDZxke81Q1hcRERtuvaEg6e+AT1B1Cqv82PZ263qe7ePWMumgtcw/m6pFEhERDemkpfBJ4HW2F3a7mIiIaFYnHc0PJBAiIsaHTloKCyR9E/h3oD6j2fYl3SoqIiKa0UkobAf8FviblnEGEgoRERuZ9YaC7eN7UUhERDSvk6uk7i3pqoGrnUraX9IHu19aRET0WicdzV8BTgGeBLB9K9UVTSMiYiPTSShsZXvw2cWru1FMREQ0q5NQeFDScykXqJP0emB5V6uKiIhGdHL00UnAXOAFku4H7gXe2NWqIiKiEZ0cfXQPcLCkrYFNbD/W/bIiIqIJnVz76MODhgGw/dEu1RQREQ3pZPfREy2PtwCOBHLZi4iIjVAnu48+0zos6dNU9z+IiIiNTCdHHw22FbDnSBcSERHN66RP4Taeul/yBKAPSH9CRMRGqJM+hSNbHq+mupT2Bp28Jul/AW+jCpvbgOOpWiDfBKYCi4H/YfvhDVlPREQMTSehMPgQ1O0GjkACsL1yKCuUNAl4D7CP7d+V23BOB/YBrrI9R9IsYBZw8lCWHb03ddblTZcQESOok1C4GZgCPEx1K87tqe6vDNU3/eH0L2wKbCnpSaoWwjKq6ysdWKafC1xDQiEioqc66Wj+HtXtOCfafjbV7qRLbO9he8iBYPt+4NNUwbIc+I3tK4GdbS8v8yynuif0M0iaKWmBpAX9/f1DXX1ERKxDJ6HwctvfHRiwfQXwV8NdoaQdgKOBPYBdga0ldXzZDNtzbU+zPa2vr2+4ZURERBudXhDvg5KmStpd0qnAQxuwzoOBe233236S6g5urwIekLQLQPm9YgPWERERw9BJn8JxwGnAt6n6EK4t44brPuCVkrYCfgccBCygOnN6BjCn/L50A9YRESOkGwcTLJ5zxIgvM0ZGJ2c0rwTeK2kb249v6AptXy/pW1Qd2KuBn1FdhXUbYJ6kE6iC49gNXVdERAxNJyevvQr4KtWH9m6S/hT4B9vvHO5KbZ9G1fpotYqq1RAREQ3ppE/hc8ChlH4E2z8H/rKbRUVERDM6uvaR7SWDRq3pQi0REdGwTjqal5RdSJb0LKqzkXPp7IiIjVAnLYUTqW7JOQlYCry4DEdExEZmnS0FSROAM22/oUf1REREg9bZUrC9Bugru40iImIj10mfwmLgJ5Iuo+XWnLY/262iIiKiGWttKUj6Rnn498B3yrzbtvxERMRGZl0thZdJ2p3q7OIv9KieiIho0LpC4ctUl83eg+raRAPE8O+jEBERo9hadx/Z/lfbLwS+ZnvPlp9h3UchIiJGv/Wep2D7Hb0oJCIimtfRZS4iImJ8SChEREQtoRAREbWEQkRE1BoJBUnbS/qWpLskLZT0Z5J2lDRf0t3l9w5N1BYRMZ411VL4PPA92y8A/pTqUtyzgKts7wVcVYYjIqKHeh4KkrajunPbWQC2/2D7EeBo4Nwy27nAMb2uLSJivGuipbAn0A98TdLPJH1V0tbAzraXA5TfO7V7sqSZkhZIWtDf39+7qiMixoEmQmFT4KXA/7H9Eqorr3a8q8j2XNvTbE/r6+vrVo0REeNSE6GwFFhq+/oy/C2qkHhA0i4A5feKBmqLiBjXeh4Ktn9Ndd/n55dRBwF3ApcBM8q4GcClva4tImK86+QmO93wbuD8cke3e4DjqQJqnqQTqC7XfWxDtUVEjFuNhILtW4BpbSYd1ONSIiKiRc5ojoiIWkIhIiJqCYWIiKglFCIiopZQiIiIWkIhIiJqCYWIiKglFCIiopZQiIiIWkIhIiJqCYWIiKglFCIiopZQiIiIWkIhIiJqCYWIiKg1FgqSJkj6maTvlOEdJc2XdHf5vUNTtUVEjFdN3XkN4L3AQmC7MjwLuMr2HEmzyvDJTRW3MZo66/KmS4iIUa6RloKkycARwFdbRh8NnFsenwsc0+OyIiLGvaZaCmcC7we2bRm3s+3lALaXS9qp3RMlzQRmAuy2225dLjMiumGkW62L5xwxossbz3reUpB0JLDC9k3Deb7tuban2Z7W19c3wtVFRIxvTbQU/hw4StLhwBbAdpLOAx6QtEtpJewCrGigtoiIca3nLQXbp9iebHsqMB242vYbgcuAGWW2GcClva4tImK8G03nKcwBDpF0N3BIGY6IiB5q8pBUbF8DXFMePwQc1GQ9ERHj3WhqKURERMMSChERUUsoRERELaEQERG1hEJERNQSChERUUsoRERELaEQERG1hEJERNQSChERUUsoRERELaEQERG1hEJERNQSChERUUsoRERELaEQERG1noeCpCmSfihpoaQ7JL23jN9R0nxJd5ffO/S6toiI8a6JlsJq4H22Xwi8EjhJ0j7ALOAq23sBV5XhiIjooZ6Hgu3ltm8ujx8DFgKTgKOBc8ts5wLH9Lq2iIjxrtE+BUlTgZcA1wM7214OVXAAO63lOTMlLZC0oL+/v2e1RkSMB42FgqRtgIuBf7T9aKfPsz3X9jTb0/r6+rpXYETEONRIKEjajCoQzrd9SRn9gKRdyvRdgBVN1BYRMZ41cfSRgLOAhbY/2zLpMmBGeTwDuLTXtUVEjHebNrDOPwfeBNwm6ZYy7gPAHGCepBOA+4BjG6gtImJc63ko2P4xoLVMPqiXtURExNPljOaIiKglFCIiotZEn0J0aOqsy5suISLGmYRCRIx5I/0FavGcI0Z0eWNJdh9FREQtoRAREbWEQkRE1BIKERFRS0dzRMQg3Tjyb6x0XqelEBERtYRCRETUEgoREVFLKERERC2hEBERtXF99FFOjY+IeLpxHQojLRewi4i1GStfQkfd7iNJh0n6haRFkmY1XU9ExHgyqkJB0gTg34DXAvsAx0nap9mqIiLGj1EVCsABwCLb99j+A3ARcHTDNUVEjBujrU9hErCkZXgp8IrWGSTNBGaWwccl/aJHtQ2YCDzY43WOlNTejNTejI26dn1ig5a/+9omjLZQUJtxftqAPReY25tynknSAtvTmlr/hkjtzUjtzUjtwzPadh8tBaa0DE8GljVUS0TEuDPaQuFGYC9Je0h6FjAduKzhmiIixo1RtfvI9mpJ7wK+D0wAzrZ9R8NlDdbYrqsRkNqbkdqbkdqHQbbXP1dERIwLo233UURENCihEBERtYTCEEn6mKRbJd0i6UpJuzZdU6ckfUrSXaX+b0vavumaOiXpWEl3SPqjpDFxmOFYvmSLpLMlrZB0e9O1DIWkKZJ+KGlheb+8t+maOiVpC0k3SPp5qf30RupIn8LQSNrO9qPl8XuAfWyf2HBZHZH0N8DVpUP/EwC2T264rI5IeiHwR+D/Av9ke0HDJa1TuWTLL4FDqA61vhE4zvadjRbWIUl/CTwOfN32fk3X0ylJuwC72L5Z0rbATcAxY+F1lyRga9uPS9oM+DHwXtvX9bKOtBSGaCAQiq0ZdHLdaGb7Stury+B1VOeBjAm2F9ru9dnrG2JMX7LF9rXAyqbrGCrby23fXB4/BiykulLCqOfK42Vws/LT88+XhMIwSJotaQnwBuDDTdczTG8Frmi6iI1Yu0u2jIkPp42FpKnAS4DrGy6lY5ImSLoFWAHMt93z2hMKbUj6gaTb2/wcDWD7VNtTgPOBdzVb7dOtr/Yyz6nAaqr6R41Oah9D1nvJlugeSdsAFwP/OKh1P6rZXmP7xVSt+AMk9XzX3ag6eW20sH1wh7NeAFwOnNbFcoZkfbVLmgEcCRzkUdahNITXfSzIJVsaUvbHXwycb/uSpusZDtuPSLoGOAzoaWd/WgpDJGmvlsGjgLuaqmWoJB0GnAwcZfu3TdezkcslWxpQOmvPAhba/mzT9QyFpL6BIwIlbQkcTAOfLzn6aIgkXQw8n+pImF8BJ9q+v9mqOiNpEbA58FAZdd0YOnLqb4EvAH3AI8Attg9ttKj1kHQ4cCZPXbJldrMVdU7ShcCBVJdwfgA4zfZZjRbVAUmvBv4DuI3qfxTgA7a/21xVnZG0P3Au1ftlE2Ce7Y/2vI6EQkREDMjuo4iIqCUUIiKillCIiIhaQiEiImoJhYiIqCUUIiKillCIiIhaQiFiBEl6eblfxRaSti7XxR8zl56OyMlrESNM0hnAFsCWwFLbH2+4pIiOJRQiRli51tGNwO+BV9le03BJER3L7qOIkbcjsA2wLVWLIWLMSEshYoRJuozqTmt7UN0aclTdcyNiXXI/hYgRJOnNwGrbF5T7NP9U0mtsX910bRGdSEshIiJq6VOIiIhaQiEiImoJhYiIqCUUIiKillCIiIhaQiEiImoJhYiIqP03Va9pc+ETYQUAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "rng = np.random.default_rng()\n", "\n", @@ -812,22 +881,11 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": { "id": "o0hVLDiBwqhg" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "x type: TensorType(float64, ())\n", - "x name = x\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "x = at.random.normal(loc=0.0, scale=1.0, size=None, name=\"x\")\n", "\n", @@ -840,7 +898,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -848,30 +906,7 @@ "id": "3hQKQ9IGxMW4", "outputId": "96e4fd79-fd3b-47d6-a9f7-b0e55a33999b" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", - " |RandomGeneratorSharedVariable() [id B]\n", - " |TensorConstant{[]} [id C]\n", - " |TensorConstant{11} [id D]\n", - " |TensorConstant{0.0} [id E]\n", - " |TensorConstant{1.0} [id F]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "aesara.dprint(x)" ] @@ -904,20 +939,9 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "op = x.owner.op\n", "\n", @@ -926,21 +950,9 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "op ndim_supp = 0 (Dimension of draws (0=scalar, 1=vector, 2=matrix, etc.))\n", - "op ndims_params = (0, 0) (Dimension of each parameter)\n", - "op.dtype = floatX\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "print(f\"\"\"\n", "op ndim_supp = {op.ndim_supp} (Dimension of draws (0=scalar, 1=vector, 2=matrix, etc.))\n", @@ -997,7 +1009,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1005,30 +1017,7 @@ "id": "pe6Xw7ZzHGCu", "outputId": "6560af03-5c86-44e4-bc27-dd09cfb042ea" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] '' \n", - " |RandomGeneratorSharedVariable() [id B]\n", - " |TensorConstant{(1,) of 3} [id C]\n", - " |TensorConstant{11} [id D]\n", - " |TensorConstant{0} [id E]\n", - " |TensorConstant{0.7071067811865476} [id F]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "x = pm.Normal.dist(mu=0, tau=2, shape=3)\n", "aesara.dprint(x)" @@ -1036,7 +1025,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1044,26 +1033,14 @@ "id": "xRe_Wsx3hYcG", "outputId": "9cdcf230-abf2-4605-837d-0c0f5835e1ca" }, - "outputs": [ - { - "data": { - "text/plain": [ - "(array([-0.49026955, -1.57065844, -0.04282467]),\n", - " array([-0.49026955, -1.57065844, -0.04282467]))" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "x.eval(), x.eval()" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1071,30 +1048,7 @@ "id": "uPaiNiybhgwT", "outputId": "0b937cf8-262b-40cf-996e-bc662e88653f" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", - " |RandomStateSharedVariable() [id B]\n", - " |TensorConstant{(1,) of 2} [id C]\n", - " |TensorConstant{11} [id D]\n", - " |TensorConstant{(2,) of 0} [id E]\n", - " |TensorConstant{[1. ...70710678]} [id F]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "with pm.Model() as model:\n", " x = pm.Normal(\"x\", mu=np.array([0, 0]), tau=np.array([1, 2]), size=2)\n", @@ -1103,7 +1057,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1111,18 +1065,7 @@ "id": "Z-MupoZhhqE_", "outputId": "8b1dc63a-0fa6-4ca7-bba4-9b6008114bb5" }, - "outputs": [ - { - "data": { - "text/plain": [ - "(array([-0.87629932, 1.07309697]), array([-0.87629932, 1.07309697]))" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Variables are already seeded, but we might change this behavior in the future\n", "x.eval(), x.eval()" @@ -1130,7 +1073,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1138,19 +1081,7 @@ "id": "QqvTnWXMhvW5", "outputId": "aed259f2-7e33-4dc4-f954-46c73e0c14c2" }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[-0.87629932, 1.07309697],\n", - " [-0.16366472, 1.75279923]])" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# The CORRECT way to draw values is to use `pm.draw`\n", "pm.draw(x, draws=2)" @@ -1177,7 +1108,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1185,25 +1116,14 @@ "id": "23JVxTUjRHDy", "outputId": "cc39c67b-ed0d-4ad7-c485-5ae6b0b5d0df" }, - "outputs": [ - { - "data": { - "text/plain": [ - "[x]" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "model.basic_RVs" ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1211,37 +1131,14 @@ "id": "jYgwMOzpRcmo", "outputId": "3178ac69-3666-4464-d6d2-dbaacfc51170" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", - " |RandomStateSharedVariable() [id B]\n", - " |TensorConstant{(1,) of 2} [id C]\n", - " |TensorConstant{11} [id D]\n", - " |TensorConstant{(2,) of 0} [id E]\n", - " |TensorConstant{[1. ...70710678]} [id F]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "aesara.dprint(model.basic_RVs[0])" ] }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1249,18 +1146,7 @@ "id": "8uPz7gDWQ_6k", "outputId": "a6e5f1be-93c5-4afa-ead6-9827edb7cbe0" }, - "outputs": [ - { - "data": { - "text/plain": [ - "{my_x: my_x}" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Manual variable registration\n", "with pm.Model() as model:\n", @@ -1300,7 +1186,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1308,19 +1194,7 @@ "id": "mgntEABvQyhu", "outputId": "319b8e86-388a-4ca5-bd3e-c27a24dd306c" }, - "outputs": [ - { - "ename": "AttributeError", - "evalue": "'Model' object has no attribute 'compute_initial_point'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m/Users/juanitorduz/Documents/pymc/docs/intro_pymc_codebase.ipynb Cell 67'\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m point \u001b[39m=\u001b[39m model\u001b[39m.\u001b[39;49mcompute_initial_point()\n\u001b[1;32m 2\u001b[0m point\n", - "\u001b[0;31mAttributeError\u001b[0m: 'Model' object has no attribute 'compute_initial_point'" - ] - } - ], + "outputs": [], "source": [ "point = model.compute_initial_point()\n", "point" @@ -1343,7 +1217,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "metadata": { "id": "bAf_AM1FSbf-" }, @@ -1369,7 +1243,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1377,18 +1251,7 @@ "id": "Gyp98lINTAOz", "outputId": "91c514a6-1168-4f64-97ff-efe5d0f139bc" }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "x = pm.Normal.dist(size=2)\n", "x.owner.op" @@ -1396,7 +1259,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1404,51 +1267,7 @@ "id": "Am5CBIEoSt1j", "outputId": "c87b47f8-5b41-4102-ed8b-c10de2647c31" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Check{sigma > 0} [id A] '' \n", - " |Elemwise{sub,no_inplace} [id B] '' \n", - " | |Elemwise{sub,no_inplace} [id C] '' \n", - " | | |Elemwise{mul,no_inplace} [id D] '' \n", - " | | | |InplaceDimShuffle{x} [id E] '' \n", - " | | | | |TensorConstant{-0.5} [id F]\n", - " | | | |Elemwise{pow,no_inplace} [id G] '' \n", - " | | | |Elemwise{true_div,no_inplace} [id H] '' \n", - " | | | | |Elemwise{sub,no_inplace} [id I] '' \n", - " | | | | | |TensorConstant{(2,) of 0} [id J]\n", - " | | | | | |InplaceDimShuffle{x} [id K] '' \n", - " | | | | | |TensorConstant{0} [id L]\n", - " | | | | |InplaceDimShuffle{x} [id M] '' \n", - " | | | | |TensorConstant{1.0} [id N]\n", - " | | | |InplaceDimShuffle{x} [id O] '' \n", - " | | | |TensorConstant{2} [id P]\n", - " | | |InplaceDimShuffle{x} [id Q] '' \n", - " | | |Elemwise{log,no_inplace} [id R] '' \n", - " | | |Elemwise{sqrt,no_inplace} [id S] '' \n", - " | | |TensorConstant{6.283185307179586} [id T]\n", - " | |InplaceDimShuffle{x} [id U] '' \n", - " | |Elemwise{log,no_inplace} [id V] '' \n", - " | |TensorConstant{1.0} [id N]\n", - " |All [id W] '' \n", - " |Elemwise{gt,no_inplace} [id X] '' \n", - " |TensorConstant{1.0} [id N]\n", - " |TensorConstant{0.0} [id Y]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "x_logp = _logprob(x.owner.op, ([0, 0],), *x.owner.inputs)\n", "aesara.dprint(x_logp)" @@ -1456,7 +1275,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1464,25 +1283,14 @@ "id": "iAYEgYRwTG7i", "outputId": "ceb009b4-e2e7-4cb5-d706-fa1d34b2557a" }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([-0.91893853, -0.91893853])" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "x_logp.eval()" ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1490,18 +1298,7 @@ "id": "zCmmLzwfTL9N", "outputId": "7dc9cd0e-5c42-4137-ff88-de5d286f81b8" }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([-0.91893853, -0.91893853])" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Helper friendly pymc function to access logp\n", "# Takes RV + value as input\n", @@ -1551,7 +1348,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1559,19 +1356,7 @@ "id": "7Sznx-MLs691", "outputId": "1dac8ba2-899a-47f7-d175-04502b73fd76" }, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'rv' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m/Users/juanitorduz/Documents/pymc/docs/intro_pymc_codebase.ipynb Cell 78'\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[39m# RV and value variables can be observed in these scipy operations\u001b[39;00m\n\u001b[1;32m 2\u001b[0m (\n\u001b[1;32m 3\u001b[0m scipy\u001b[39m.\u001b[39mstats\u001b[39m.\u001b[39mnorm(\u001b[39m0\u001b[39m, \u001b[39m1\u001b[39m), \u001b[39m# Equivalent to rv = pm.Normal(\"rv\", 0, 1)\u001b[39;00m\n\u001b[0;32m----> 4\u001b[0m rv\u001b[39m.\u001b[39mrvs(\u001b[39m5\u001b[39m), \u001b[39m# Equivalent to rv_draw = pm.draw(rv, 5)\u001b[39;00m\n\u001b[1;32m 5\u001b[0m rv\u001b[39m.\u001b[39mlogpdf(\u001b[39m1.25\u001b[39m), \u001b[39m# Equivalent to rv_logp = pm.logp(rv, .125)\u001b[39;00m\n\u001b[1;32m 6\u001b[0m )\n", - "\u001b[0;31mNameError\u001b[0m: name 'rv' is not defined" - ] - } - ], + "outputs": [], "source": [ "# RV and value variables can be observed in these scipy operations\n", "(\n", @@ -1583,7 +1368,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": null, "metadata": { "id": "dejQBR2FUnM3" }, @@ -1596,7 +1381,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1604,18 +1389,7 @@ "id": "iXnvzBqorsX-", "outputId": "bb779d64-5c1b-4233-9131-f64f5dd0e77a" }, - "outputs": [ - { - "data": { - "text/plain": [ - "{sigma: sigma_log__, x: x}" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Each model RV is related to a \"value variable\"\n", "m.rvs_to_values" @@ -1623,7 +1397,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1631,25 +1405,14 @@ "id": "xsqHFQ0srsX6", "outputId": "adfc9a9d-c411-4551-f534-c944bb9e1610" }, - "outputs": [ - { - "data": { - "text/plain": [ - "[sigma_log__, x]" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "m.value_vars" ] }, { "cell_type": "code", - "execution_count": 43, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1657,25 +1420,7 @@ "id": "i3ME6Y41rsX9", "outputId": "4f075f4f-29d6-4516-ec7a-1bfffa5998ea" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "sigma_log__ [id A]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# These just an input variable (constants inputs if observed)\n", "# used in the logp graph\n", @@ -1684,7 +1429,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": null, "metadata": { "id": "JvGOpA3_U0C1" }, @@ -1695,7 +1440,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1703,18 +1448,7 @@ "id": "Y2BIoKk5U4fQ", "outputId": "a9b67ac9-9fc0-4da8-dabf-90ed7d5b80e9" }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([-10.22579135, 9.08106147])" - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "sigma_value = m.rvs_to_values[sigma]\n", "x_value = m.rvs_to_values[x]\n", @@ -1723,7 +1457,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1731,18 +1465,7 @@ "id": "wFAUqf0qU50W", "outputId": "3480b833-f2c7-43a3-d87f-b2149f67351f" }, - "outputs": [ - { - "data": { - "text/plain": [ - "[array(-10.22579135), array(9.08106147)]" - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# model compile_logp is a helpers that creates a compiled aesara function\n", "# of the model logp, which takes a dictionary of {value variable name : value} as inputs\n", @@ -1760,7 +1483,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": null, "metadata": { "id": "MsSFt_xDzYn2" }, @@ -1774,7 +1497,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1782,19 +1505,7 @@ "id": "1JX8cFt8z2b1", "outputId": "a87d5d8c-ffed-43cf-fbd2-1ba885911a04" }, - "outputs": [ - { - "ename": "AttributeError", - "evalue": "'Model' object has no attribute 'compute_initial_point'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m/Users/juanitorduz/Documents/pymc/docs/intro_pymc_codebase.ipynb Cell 88'\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[39m# initial points\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m m\u001b[39m.\u001b[39;49mcompute_initial_point(seed\u001b[39m=\u001b[39m\u001b[39m314\u001b[39m)\n", - "\u001b[0;31mAttributeError\u001b[0m: 'Model' object has no attribute 'compute_initial_point'" - ] - } - ], + "outputs": [], "source": [ "# initial points\n", "m.compute_initial_point(seed=314)" @@ -1802,7 +1513,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1810,18 +1521,7 @@ "id": "VdU6Eev9z-2F", "outputId": "787ee742-6e73-44ee-e3e9-5010607405f1" }, - "outputs": [ - { - "data": { - "text/plain": [ - "[array(-0.91893853), array([-0.72579135, -0.72579135, -0.72579135])]" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# logp\n", "logp_graph = m.logpt(vars=[mu, sigma], jacobian=False, sum=False)\n", @@ -1831,7 +1531,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1839,18 +1539,7 @@ "id": "0wUIYHMd0e3E", "outputId": "1afd7331-8ded-4338-f6ea-d5449a0b1ae8" }, - "outputs": [ - { - "data": { - "text/plain": [ - "[array(-0.91893853), array([-0.72579135, -0.72579135, -0.72579135])]" - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# logp\n", "logp_fn = m.compile_logp(vars=[mu, sigma], jacobian=False, sum=False)\n", @@ -1859,7 +1548,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1867,18 +1556,7 @@ "id": "fahwjKyu0YfR", "outputId": "80ec9022-3c86-4110-e35e-70228aa16f88" }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([3.])" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# dlogp\n", "# m.dlogpt(...)\n", @@ -1888,7 +1566,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1896,18 +1574,7 @@ "id": "gW9DMRK20uyF", "outputId": "1532a7e7-3319-4e65-f834-f1335ab1147f" }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[4.]])" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# d2logp\n", "d2logp_fn = m.compile_d2logp(vars=[mu])\n", From 6391253295218f4ba66533a98879c11e8cf465a6 Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Sat, 23 Apr 2022 21:49:55 +0200 Subject: [PATCH 07/30] rename nb and add section on intro aesara graphs --- ..._pymc_codebase.ipynb => pymc_aesara.ipynb} | 232 +++++++++++++----- 1 file changed, 173 insertions(+), 59 deletions(-) rename docs/{intro_pymc_codebase.ipynb => pymc_aesara.ipynb} (96%) diff --git a/docs/intro_pymc_codebase.ipynb b/docs/pymc_aesara.ipynb similarity index 96% rename from docs/intro_pymc_codebase.ipynb rename to docs/pymc_aesara.ipynb index 0839890f2e..19f2865bc8 100644 --- a/docs/intro_pymc_codebase.ipynb +++ b/docs/pymc_aesara.ipynb @@ -26,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 1, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -98,7 +98,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -137,7 +137,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 3, "metadata": { "id": "jApxApHT1rmq" }, @@ -156,7 +156,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -173,7 +173,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -196,10 +196,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 13, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -217,7 +217,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -239,17 +239,16 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 14, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# we compile the graph with numba.\n", - "f = aesara.function(inputs=[x, y], outputs=w, mode=\"NUMBA\")\n", + "f = aesara.function(inputs=[x, y], outputs=w)\n", "\n", "aesara.dprint(f)" ] @@ -263,7 +262,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -272,7 +271,7 @@ "array([0., 1.])" ] }, - "execution_count": 15, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -290,7 +289,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -305,7 +304,7 @@ "array([0., 1.])" ] }, - "execution_count": 16, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -323,7 +322,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -338,7 +337,7 @@ "array([0., 1.])" ] }, - "execution_count": 17, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -358,7 +357,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -374,10 +373,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 22, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -401,7 +400,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -419,10 +418,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 31, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -443,7 +442,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -459,20 +458,47 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 32, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "g = aesara.function(inputs=[a, b], outputs=d, mode=\"NUMBA\")\n", + "g = aesara.function(inputs=[a, b], outputs=d)\n", "\n", "aesara.dprint(g)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can specially an edge case when `b=0`. We can confirm that the graph gets simplified before running the computation." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1.])" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "g(a=1, b=[0])" + ] + }, { "cell_type": "markdown", "metadata": { @@ -481,7 +507,9 @@ "source": [ "### What is in an Aesara graph?\n", "\n", - "The following diagram shows the basic structure of an Aesara graph." + "The purpose of this notebook is not to give a detailed description of all `aesara`'s capabilities but rather focus on the main concepts to understand (at some introductory level) its connection with PyMC. For a more detailed description of the project please refer to the [official documentation](https://aesara.readthedocs.io/en/latest/index.html).\n", + "\n", + "The following diagram shows the basic structure of an `aesara` graph." ] }, { @@ -497,12 +525,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can can make these concepts more tangible trough the example above: " + "We can can make these concepts more tangible by explicitly indicating them in the first example from the section above. Let us compute the graph components for the tensor `z`. " ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -510,7 +538,22 @@ "id": "UV95InOX3W2z", "outputId": "047197ff-5c73-429d-d93a-427620c4b215" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "z type: TensorType(float64, (None,))\n", + "z name = x + y\n", + "z owner = Elemwise{add,no_inplace}(InplaceDimShuffle{x}.0, y)\n", + "z owner inputs = [InplaceDimShuffle{x}.0, y]\n", + "z owner op = Elemwise{add,no_inplace}\n", + "z owner output = [x + y]\n", + "\n" + ] + } + ], "source": [ "print(f\"\"\"\n", "z type: {z.type}\n", @@ -526,12 +569,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The following sniped of code helps us to understand these concepts by going through the computational graph." + "The following code snippet helps us understand these concepts by going through the computational graph of `w`." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -539,10 +582,35 @@ "id": "thLifxKW3ka3", "outputId": "6c98f77b-922a-4869-bfeb-281b3f29e8dc" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---\n", + "Checking variable log(x + y) of type TensorType(float64, (None,))\n", + " > Op is Elemwise{log,no_inplace}\n", + " > Input 0 is x + y\n", + "---\n", + "Checking variable x + y of type TensorType(float64, (None,))\n", + " > Op is Elemwise{add,no_inplace}\n", + " > Input 0 is InplaceDimShuffle{x}.0\n", + " > Input 1 is y\n", + "---\n", + "Checking variable InplaceDimShuffle{x}.0 of type TensorType(float64, (1,))\n", + " > Op is InplaceDimShuffle{x}\n", + " > Input 0 is x\n", + "---\n", + "Checking variable y of type TensorType(float64, (None,))\n", + " > y is a root variable\n", + "---\n", + "Checking variable x of type TensorType(float64, ())\n", + " > x is a root variable\n" + ] + } + ], "source": [ - "from aesara.tensor.elemwise import Elemwise\n", - "\n", + "# start from the top\n", "stack = [w]\n", "\n", "while stack:\n", @@ -569,7 +637,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -577,7 +645,29 @@ "id": "ltcXsJUQ-NZL", "outputId": "2c9543a8-1be6-47cb-efc7-1f83187e068b" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{log,no_inplace} [id A] 'log(x + y)' \n", + " |Elemwise{add,no_inplace} [id B] 'x + y' \n", + " |InplaceDimShuffle{x} [id C] '' \n", + " | |x [id D]\n", + " |y [id E]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "aesara.dprint(w)" ] @@ -590,12 +680,12 @@ "source": [ "### Graph manipulation 101\n", "\n", - "Now, we describe how to manipulate the computational graph. We continue with our tensors above to illustrate how to do it." + "One of the most interesting features of `aesara` is the ability to manipulate the computational graph. Here we continue with the example above in order to illustrate the main idea around this technique." ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 17, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -610,7 +700,7 @@ "[x, y]" ] }, - "execution_count": 13, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -629,7 +719,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -642,12 +732,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note that the graph of `w` has actually not change:" + "Note that the graph of `w` has actually not changed:" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -664,10 +754,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 15, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -685,7 +775,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 20, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -709,10 +799,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 16, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -732,7 +822,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 21, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -747,7 +837,7 @@ "array([1. , 2.71828183])" ] }, - "execution_count": 17, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -756,19 +846,25 @@ "new_w.eval({x: 0, y:[1, np.e]})" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As expected, the new graph is just the identity function." + ] + }, { "cell_type": "markdown", "metadata": { "id": "JhmIBByY6T9h" }, "source": [ - "### Aesara is clever!\n", - "Note that aesara is clever enough to omit the `exp` and `log` unnecessary composition." + "**Remark:** Again, note that `aesara` is clever enough to omit the `exp` and `log` unnecessary composition:" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 22, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -798,10 +894,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 18, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -814,7 +910,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -822,7 +918,25 @@ "id": "noKfjvwS65q-", "outputId": "bed5b895-8c4e-4c0e-95c9-8eefdbbd55fa" }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:absl:No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)\n" + ] + }, + { + "data": { + "text/plain": [ + "DeviceArray([1. , 2.71828183], dtype=float64)" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "f(x=0, y=[1, np.e])" ] From b90c44ef1e44a5a0de71f883fa5abcddc14246eb Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Tue, 26 Apr 2022 12:01:17 +0200 Subject: [PATCH 08/30] add random samples section --- docs/pymc_aesara.ipynb | 806 +++++++++++++++++++++++++++-------------- 1 file changed, 541 insertions(+), 265 deletions(-) diff --git a/docs/pymc_aesara.ipynb b/docs/pymc_aesara.ipynb index 19f2865bc8..7fa10517ad 100644 --- a/docs/pymc_aesara.ipynb +++ b/docs/pymc_aesara.ipynb @@ -196,7 +196,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -239,7 +239,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 6, @@ -373,7 +373,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 10, @@ -418,7 +418,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -458,7 +458,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 12, @@ -660,7 +660,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 16, @@ -754,7 +754,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 19, @@ -799,7 +799,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 20, @@ -883,18 +883,10 @@ " |y [id D]\n" ] }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/juanitorduz/opt/anaconda3/envs/pymc-dev-py39/lib/python3.9/site-packages/aesara/link/jax/dispatch.py:87: UserWarning: JAX omnistaging couldn't be disabled: Disabling of omnistaging is no longer supported in JAX version 0.2.12 and higher: see https://github.com/google/jax/blob/main/design_notes/omnistaging.md.\n", - " warnings.warn(f\"JAX omnistaging couldn't be disabled: {e}\")\n" - ] - }, { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 22, @@ -903,7 +895,7 @@ } ], "source": [ - "f = aesara.function(inputs=[x, y], outputs=new_w, mode=\"JAX\")\n", + "f = aesara.function(inputs=[x, y], outputs=new_w)\n", "\n", "aesara.dprint(f)" ] @@ -919,17 +911,10 @@ "outputId": "bed5b895-8c4e-4c0e-95c9-8eefdbbd55fa" }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:absl:No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)\n" - ] - }, { "data": { "text/plain": [ - "DeviceArray([1. , 2.71828183], dtype=float64)" + "array([1. , 2.71828183])" ] }, "execution_count": 23, @@ -941,6 +926,28 @@ "f(x=0, y=[1, np.e])" ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "Zkqw774ThP93" + }, + "source": [ + "# PyMC\n", + "![image.png](data:image/png;base64,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)\n", + "## Distributions are just RandomVariables\n", + "**Source code**\n", + "* [PyMC [rev 1005d20b3c]](https://github.com/pymc-devs/pymc/tree/1005d20b3c12d9b9a424c069f6a0f9962d73c41d)\n", + "* [Distributions module](https://github.com/pymc-devs/pymc/tree/main/pymc/distributions)\n", + "* [Distribution class](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/distribution.py)\n", + " * See issue [#5308](https://github.com/pymc-devs/pymc/issues/5308)\n", + "* [Discrete distributions](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/discrete.py)\n", + "* [Continuous distributions](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/continuous.py)\n", + "* [Multivariate distributions](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/multivariate.py)\n", + "\n", + "**Guide**\n", + "* [Distribution developer guide](https://github.com/pymc-devs/pymc/blob/1005d20b3c12d9b9a424c069f6a0f9962d73c41d/docs/source/contributing/developer_guide_implementing_distribution.md)" + ] + }, { "cell_type": "markdown", "metadata": { @@ -960,12 +967,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "How To generate random numbers in `numpy`?" + "How To generate random numbers in [`numpy`](https://numpy.org/)? To illustrate it we can sample from a normal distribution:" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -973,11 +980,24 @@ "id": "THRvGbP1WmhH", "outputId": "c4f044e6-83c3-4c4c-9ecf-8714efae6f36" }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "rng = np.random.default_rng()\n", "\n", - "a = rng.normal(loc=0, scale=1, size=1000)\n", + "a = rng.normal(loc=0, scale=1, size=1_000)\n", "\n", "fig, ax = plt.subplots()\n", "ax.hist(a, bins=15)\n", @@ -990,292 +1010,307 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now let's do it in aesara." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "o0hVLDiBwqhg" - }, - "outputs": [], - "source": [ - "x = at.random.normal(loc=0.0, scale=1.0, size=None, name=\"x\")\n", - "\n", - "print(f\"\"\"\n", - "x type: {x.type}\n", - "x name = {x.name}\n", - "\"\"\"\n", - ")" + "Now let's do it in aesara via pymc." ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normal_rv{0, (0, 0), floatX, False}.1 [id A] '' \n", + " |RandomGeneratorSharedVariable() [id B]\n", + " |TensorConstant{[]} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{0} [id E]\n", + " |TensorConstant{1.0} [id F]\n" + ] }, - "id": "3hQKQ9IGxMW4", - "outputId": "96e4fd79-fd3b-47d6-a9f7-b0e55a33999b" - }, - "outputs": [], + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ + "x = pm.Normal.dist(mu=0, sigma=1)\n", "aesara.dprint(x)" ] }, { "cell_type": "markdown", - "metadata": { - "id": "I7Xop7BRM4sI" - }, + "metadata": {}, "source": [ - "Inputs are always in the following order:\n", - "1. rng shared variable\n", - "2. size\n", - "3. dtype (number code)\n", - "4. arg1\n", - "5. arg2\n", - "6. argn" + "We can try to generate random samples:" ] }, { - "cell_type": "markdown", - "metadata": { - "id": "k7spOYvvTdZL" - }, + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 0: -0.21484181689980109\n", + "Sample 1: -0.21484181689980109\n", + "Sample 2: -0.21484181689980109\n", + "Sample 3: -0.21484181689980109\n", + "Sample 4: -0.21484181689980109\n", + "Sample 5: -0.21484181689980109\n", + "Sample 6: -0.21484181689980109\n", + "Sample 7: -0.21484181689980109\n", + "Sample 8: -0.21484181689980109\n", + "Sample 9: -0.21484181689980109\n" + ] + } + ], "source": [ - "### Some meta-properties worth knowing about\n", - "\n", - "The `op` of `x`'s `owner` is:" + "for i in range(10):\n", + " print(f\"Sample {i}: {x.eval()}\")" ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "op = x.owner.op\n", - "\n", - "op" + "We always get the same samples! This has to to with the random seed step in the graph, i.e. `RandomGeneratorSharedVariable` (we will not go deeper into this subject here). The correct way to do it is via `pm.draw`." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ - "print(f\"\"\"\n", - "op ndim_supp = {op.ndim_supp} (Dimension of draws (0=scalar, 1=vector, 2=matrix, etc.))\n", - "op ndims_params = {op.ndims_params} (Dimension of each parameter)\n", - "op.dtype = {op.dtype}\n", - "\"\"\")" + "fig, ax = plt.subplots()\n", + "ax.hist(pm.draw(x, draws=1_000), bins=15)\n", + "ax.set(\n", + " title=\"Samples from a normal distribution\", xlabel=\"x\", ylabel=\"frequency\"\n", + ");" ] }, { "cell_type": "markdown", "metadata": { - "id": "Zkqw774ThP93" + "id": "wkZR0gDWRAgK" }, "source": [ - "# PyMC" + "## What is going on behind the scenes?" ] }, { "cell_type": "markdown", "metadata": { - "id": "cQITtCM_BrdO" + "id": "YHWznAnCE8a1" }, "source": [ - "![image.png](data:image/png;base64,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)" + "**Source code**\n", + "* [Model module](https://github.com/pymc-devs/pymc/blob/main/pymc/model.py)" ] }, { "cell_type": "markdown", - "metadata": { - "id": "C8Us4nEyhRdu" - }, + "metadata": {}, "source": [ - "## Distributions are just RandomVariables" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "oTu9tX3FEB1a" - }, - "source": [ - "**Source code**\n", - "* [PyMC [rev 1005d20b3c]](https://github.com/pymc-devs/pymc/tree/1005d20b3c12d9b9a424c069f6a0f9962d73c41d)\n", - "* [Distributions module](https://github.com/pymc-devs/pymc/tree/main/pymc/distributions)\n", - "* [Distribution class](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/distribution.py)\n", - " * See issue [#5308](https://github.com/pymc-devs/pymc/issues/5308)\n", - "* [Discrete distributions](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/discrete.py)\n", - "* [Continuous distributions](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/continuous.py)\n", - "* [Multivariate distributions](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/multivariate.py)\n", - "\n", - "**Guide**\n", - "* [Distribution developer guide](https://github.com/pymc-devs/pymc/blob/1005d20b3c12d9b9a424c069f6a0f9962d73c41d/docs/source/contributing/developer_guide_implementing_distribution.md)" + "We can now look into how this is done inside a model." ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", + " |RandomStateSharedVariable() [id B]\n", + " |TensorConstant{(1,) of 2} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{(2,) of 0} [id E]\n", + " |TensorConstant{[1. 2.]} [id F]\n" + ] }, - "id": "pe6Xw7ZzHGCu", - "outputId": "6560af03-5c86-44e4-bc27-dd09cfb042ea" - }, - "outputs": [], + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "x = pm.Normal.dist(mu=0, tau=2, shape=3)\n", + "with pm.Model() as model:\n", + " x = pm.Normal(name=\"x\", mu=np.array([0, 0]), sigma=np.array([1, 2]), size=2)\n", + "\n", "aesara.dprint(x)" ] }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "xRe_Wsx3hYcG", - "outputId": "9cdcf230-abf2-4605-837d-0c0f5835e1ca" - }, - "outputs": [], + "cell_type": "markdown", + "metadata": {}, "source": [ - "x.eval(), x.eval()" + "We can extract the list of random variables:" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "uPaiNiybhgwT", - "outputId": "0b937cf8-262b-40cf-996e-bc662e88653f" + "id": "23JVxTUjRHDy", + "outputId": "cc39c67b-ed0d-4ad7-c485-5ae6b0b5d0df" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[x]" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "with pm.Model() as model:\n", - " x = pm.Normal(\"x\", mu=np.array([0, 0]), tau=np.array([1, 2]), size=2)\n", - "aesara.dprint(x)" + "model.basic_RVs" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "Z-MupoZhhqE_", - "outputId": "8b1dc63a-0fa6-4ca7-bba4-9b6008114bb5" + "id": "jYgwMOzpRcmo", + "outputId": "3178ac69-3666-4464-d6d2-dbaacfc51170" }, - "outputs": [], - "source": [ - "# Variables are already seeded, but we might change this behavior in the future\n", - "x.eval(), x.eval()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", + " |RandomStateSharedVariable() [id B]\n", + " |TensorConstant{(1,) of 2} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{(2,) of 0} [id E]\n", + " |TensorConstant{[1. 2.]} [id F]\n" + ] }, - "id": "QqvTnWXMhvW5", - "outputId": "aed259f2-7e33-4dc4-f954-46c73e0c14c2" - }, - "outputs": [], - "source": [ - "# The CORRECT way to draw values is to use `pm.draw`\n", - "pm.draw(x, draws=2)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "wkZR0gDWRAgK" - }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "## What is going on behind the scenes?" + "aesara.dprint(model.basic_RVs[0])" ] }, { "cell_type": "markdown", - "metadata": { - "id": "YHWznAnCE8a1" - }, - "source": [ - "**Source code**\n", - "* [Model module](https://github.com/pymc-devs/pymc/blob/main/pymc/model.py)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "23JVxTUjRHDy", - "outputId": "cc39c67b-ed0d-4ad7-c485-5ae6b0b5d0df" - }, - "outputs": [], + "metadata": {}, "source": [ - "model.basic_RVs" + "We can try to sample via `.eval` as above and it is no surprise that we are getting the same samples at each iteration." ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "jYgwMOzpRcmo", - "outputId": "3178ac69-3666-4464-d6d2-dbaacfc51170" - }, - "outputs": [], + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 0: [ 1.51857911 -2.98354082]\n", + "Sample 1: [ 1.51857911 -2.98354082]\n", + "Sample 2: [ 1.51857911 -2.98354082]\n", + "Sample 3: [ 1.51857911 -2.98354082]\n", + "Sample 4: [ 1.51857911 -2.98354082]\n", + "Sample 5: [ 1.51857911 -2.98354082]\n", + "Sample 6: [ 1.51857911 -2.98354082]\n", + "Sample 7: [ 1.51857911 -2.98354082]\n", + "Sample 8: [ 1.51857911 -2.98354082]\n", + "Sample 9: [ 1.51857911 -2.98354082]\n" + ] + } + ], "source": [ - "aesara.dprint(model.basic_RVs[0])" + "for i in range(10):\n", + " print(f\"Sample {i}: {x.eval()}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Again, the correct way of sampling is via `pm.draw`. " ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "8uPz7gDWQ_6k", - "outputId": "a6e5f1be-93c5-4afa-ead6-9827edb7cbe0" - }, - "outputs": [], + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 0: [ 1.51857911 -2.98354082]\n", + "Sample 1: [1.40663775 0.31813437]\n", + "Sample 2: [-0.5783356 2.10757813]\n", + "Sample 3: [-1.89963939 -0.03352258]\n", + "Sample 4: [-0.4124512 -0.68448993]\n", + "Sample 5: [2.48977036 3.96330962]\n", + "Sample 6: [-0.48203583 -0.75657077]\n", + "Sample 7: [-1.03348605 -1.13721067]\n", + "Sample 8: [-0.38687507 1.23973121]\n", + "Sample 9: [0.23015944 2.83502457]\n" + ] + } + ], "source": [ - "# Manual variable registration\n", - "with pm.Model() as model:\n", - " # my_x = pm.Normal(\"x\", 0, tau=5)\n", - " my_x = pm.Normal.dist(0, 1)\n", - " model.register_rv(\n", - " rv_var=my_x,\n", - " name=\"my_x\",\n", - " data=None,\n", - " total_size=None,\n", - " dims=None,\n", - " transform=None,\n", - " initval=\"prior\",\n", - " )\n", - "model.rvs_to_values" + "for i in range(10):\n", + " print(f\"Sample {i}: {pm.draw(x)}\")" ] }, { @@ -1300,7 +1335,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1308,15 +1343,26 @@ "id": "mgntEABvQyhu", "outputId": "319b8e86-388a-4ca5-bd3e-c27a24dd306c" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'x': array([0., 0.])}" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "point = model.compute_initial_point()\n", + "point = model.initial_point()\n", "point" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1324,14 +1370,25 @@ "id": "d3MpBiUlSVGT", "outputId": "bdf43dff-e5b5-4699-b0b5-b8d0602b2064" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'x': -2.53}" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "model.point_logps(point)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": { "id": "bAf_AM1FSbf-" }, @@ -1357,7 +1414,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1365,7 +1422,18 @@ "id": "Gyp98lINTAOz", "outputId": "91c514a6-1168-4f64-97ff-efe5d0f139bc" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "x = pm.Normal.dist(size=2)\n", "x.owner.op" @@ -1373,7 +1441,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1381,7 +1449,51 @@ "id": "Am5CBIEoSt1j", "outputId": "c87b47f8-5b41-4102-ed8b-c10de2647c31" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Check{sigma > 0} [id A] '' \n", + " |Elemwise{sub,no_inplace} [id B] '' \n", + " | |Elemwise{sub,no_inplace} [id C] '' \n", + " | | |Elemwise{mul,no_inplace} [id D] '' \n", + " | | | |InplaceDimShuffle{x} [id E] '' \n", + " | | | | |TensorConstant{-0.5} [id F]\n", + " | | | |Elemwise{pow,no_inplace} [id G] '' \n", + " | | | |Elemwise{true_div,no_inplace} [id H] '' \n", + " | | | | |Elemwise{sub,no_inplace} [id I] '' \n", + " | | | | | |TensorConstant{(2,) of 0} [id J]\n", + " | | | | | |InplaceDimShuffle{x} [id K] '' \n", + " | | | | | |TensorConstant{0} [id L]\n", + " | | | | |InplaceDimShuffle{x} [id M] '' \n", + " | | | | |TensorConstant{1.0} [id N]\n", + " | | | |InplaceDimShuffle{x} [id O] '' \n", + " | | | |TensorConstant{2} [id P]\n", + " | | |InplaceDimShuffle{x} [id Q] '' \n", + " | | |Elemwise{log,no_inplace} [id R] '' \n", + " | | |Elemwise{sqrt,no_inplace} [id S] '' \n", + " | | |TensorConstant{6.283185307179586} [id T]\n", + " | |InplaceDimShuffle{x} [id U] '' \n", + " | |Elemwise{log,no_inplace} [id V] '' \n", + " | |TensorConstant{1.0} [id N]\n", + " |All [id W] '' \n", + " |Elemwise{gt,no_inplace} [id X] '' \n", + " |TensorConstant{1.0} [id N]\n", + " |TensorConstant{0.0} [id Y]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "x_logp = _logprob(x.owner.op, ([0, 0],), *x.owner.inputs)\n", "aesara.dprint(x_logp)" @@ -1389,7 +1501,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1397,14 +1509,25 @@ "id": "iAYEgYRwTG7i", "outputId": "ceb009b4-e2e7-4cb5-d706-fa1d34b2557a" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([-0.91893853, -0.91893853])" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "x_logp.eval()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 40, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1412,7 +1535,18 @@ "id": "zCmmLzwfTL9N", "outputId": "7dc9cd0e-5c42-4137-ff88-de5d286f81b8" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([-0.91893853, -0.91893853])" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Helper friendly pymc function to access logp\n", "# Takes RV + value as input\n", @@ -1421,7 +1555,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 41, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1429,7 +1563,15 @@ "id": "oN1FcbE1V2it", "outputId": "a0cd9e45-2441-42e1-affe-18600b648d61" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Logprob method not implemented for CumOp{None, add}\n" + ] + } + ], "source": [ "# What about other types of Ops?\n", "try:\n", @@ -1462,7 +1604,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 42, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1470,8 +1612,24 @@ "id": "7Sznx-MLs691", "outputId": "1dac8ba2-899a-47f7-d175-04502b73fd76" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " array([-0.57658533, -0.80388283, 0.24435312, 0.76359185, -1.56807685]),\n", + " -1.7001885332046727)" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ + "import scipy.stats\n", + "rv = scipy.stats.norm(0, 1)\n", + "\n", "# RV and value variables can be observed in these scipy operations\n", "(\n", " scipy.stats.norm(0, 1), # Equivalent to rv = pm.Normal(\"rv\", 0, 1)\n", @@ -1482,7 +1640,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 43, "metadata": { "id": "dejQBR2FUnM3" }, @@ -1495,7 +1653,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 44, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1503,7 +1661,18 @@ "id": "iXnvzBqorsX-", "outputId": "bb779d64-5c1b-4233-9131-f64f5dd0e77a" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{sigma: sigma_log__, x: x}" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Each model RV is related to a \"value variable\"\n", "m.rvs_to_values" @@ -1511,7 +1680,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 45, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1519,14 +1688,25 @@ "id": "xsqHFQ0srsX6", "outputId": "adfc9a9d-c411-4551-f534-c944bb9e1610" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[sigma_log__, x]" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "m.value_vars" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 46, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1534,7 +1714,25 @@ "id": "i3ME6Y41rsX9", "outputId": "4f075f4f-29d6-4516-ec7a-1bfffa5998ea" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sigma_log__ [id A]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# These just an input variable (constants inputs if observed)\n", "# used in the logp graph\n", @@ -1543,7 +1741,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 47, "metadata": { "id": "JvGOpA3_U0C1" }, @@ -1554,7 +1752,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 48, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1562,7 +1760,18 @@ "id": "Y2BIoKk5U4fQ", "outputId": "a9b67ac9-9fc0-4da8-dabf-90ed7d5b80e9" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([-10.22579135, 9.08106147])" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "sigma_value = m.rvs_to_values[sigma]\n", "x_value = m.rvs_to_values[x]\n", @@ -1571,7 +1780,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 49, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1579,7 +1788,18 @@ "id": "wFAUqf0qU50W", "outputId": "3480b833-f2c7-43a3-d87f-b2149f67351f" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[array(-10.22579135), array(9.08106147)]" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# model compile_logp is a helpers that creates a compiled aesara function\n", "# of the model logp, which takes a dictionary of {value variable name : value} as inputs\n", @@ -1597,7 +1817,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 50, "metadata": { "id": "MsSFt_xDzYn2" }, @@ -1611,7 +1831,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 51, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1619,15 +1839,27 @@ "id": "1JX8cFt8z2b1", "outputId": "a87d5d8c-ffed-43cf-fbd2-1ba885911a04" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'mu': array(0.44339106),\n", + " 'sigma_log__': array([0. , 0.69314718, 1.09861229])}" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# initial points\n", - "m.compute_initial_point(seed=314)" + "m.initial_point(seed=314)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 52, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1635,7 +1867,18 @@ "id": "VdU6Eev9z-2F", "outputId": "787ee742-6e73-44ee-e3e9-5010607405f1" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[array(-0.91893853), array([-0.72579135, -0.72579135, -0.72579135])]" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# logp\n", "logp_graph = m.logpt(vars=[mu, sigma], jacobian=False, sum=False)\n", @@ -1645,7 +1888,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 53, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1653,7 +1896,18 @@ "id": "0wUIYHMd0e3E", "outputId": "1afd7331-8ded-4338-f6ea-d5449a0b1ae8" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[array(-0.91893853), array([-0.72579135, -0.72579135, -0.72579135])]" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# logp\n", "logp_fn = m.compile_logp(vars=[mu, sigma], jacobian=False, sum=False)\n", @@ -1662,7 +1916,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 54, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1670,7 +1924,18 @@ "id": "fahwjKyu0YfR", "outputId": "80ec9022-3c86-4110-e35e-70228aa16f88" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([3.])" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# dlogp\n", "# m.dlogpt(...)\n", @@ -1680,7 +1945,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 55, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1688,7 +1953,18 @@ "id": "gW9DMRK20uyF", "outputId": "1532a7e7-3319-4e65-f834-f1335ab1147f" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([[4.]])" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# d2logp\n", "d2logp_fn = m.compile_d2logp(vars=[mu])\n", From ee068d77690837c1f4b2d7bba11eb65709ccbdbd Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Mon, 2 May 2022 14:12:10 +0200 Subject: [PATCH 09/30] improve notation --- docs/pymc_aesara.ipynb | 370 ++++++++++++++++------------------------- 1 file changed, 143 insertions(+), 227 deletions(-) diff --git a/docs/pymc_aesara.ipynb b/docs/pymc_aesara.ipynb index 7fa10517ad..9a15dc4db3 100644 --- a/docs/pymc_aesara.ipynb +++ b/docs/pymc_aesara.ipynb @@ -196,7 +196,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -239,7 +239,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 6, @@ -373,7 +373,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 10, @@ -418,7 +418,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -458,7 +458,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 12, @@ -660,7 +660,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 16, @@ -754,7 +754,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 19, @@ -799,7 +799,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 20, @@ -886,7 +886,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 22, @@ -983,7 +983,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1023,7 +1023,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] '' \n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1033,7 +1033,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 25, @@ -1062,16 +1062,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: -0.21484181689980109\n", - "Sample 1: -0.21484181689980109\n", - "Sample 2: -0.21484181689980109\n", - "Sample 3: -0.21484181689980109\n", - "Sample 4: -0.21484181689980109\n", - "Sample 5: -0.21484181689980109\n", - "Sample 6: -0.21484181689980109\n", - "Sample 7: -0.21484181689980109\n", - "Sample 8: -0.21484181689980109\n", - "Sample 9: -0.21484181689980109\n" + "Sample 0: 0.04685674920974335\n", + "Sample 1: 0.04685674920974335\n", + "Sample 2: 0.04685674920974335\n", + "Sample 3: 0.04685674920974335\n", + "Sample 4: 0.04685674920974335\n", + "Sample 5: 0.04685674920974335\n", + "Sample 6: 0.04685674920974335\n", + "Sample 7: 0.04685674920974335\n", + "Sample 8: 0.04685674920974335\n", + "Sample 9: 0.04685674920974335\n" ] } ], @@ -1094,7 +1094,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1148,18 +1148,18 @@ "name": "stdout", "output_type": "stream", "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", - " |RandomStateSharedVariable() [id B]\n", - " |TensorConstant{(1,) of 2} [id C]\n", + "normal_rv{0, (0, 0), floatX, False}.1 [id A] '' \n", + " |RandomGeneratorSharedVariable() [id B]\n", + " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", - " |TensorConstant{(2,) of 0} [id E]\n", - " |TensorConstant{[1. 2.]} [id F]\n" + " |TensorConstant{0} [id E]\n", + " |TensorConstant{1.0} [id F]\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 28, @@ -1169,7 +1169,7 @@ ], "source": [ "with pm.Model() as model:\n", - " x = pm.Normal(name=\"x\", mu=np.array([0, 0]), sigma=np.array([1, 2]), size=2)\n", + " z = pm.Normal(name=\"z\", mu=np.array([0, 0]), sigma=np.array([1, 2]), size=2)\n", "\n", "aesara.dprint(x)" ] @@ -1195,7 +1195,7 @@ { "data": { "text/plain": [ - "[x]" + "[z]" ] }, "execution_count": 29, @@ -1222,8 +1222,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'x' \n", - " |RandomStateSharedVariable() [id B]\n", + "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z' \n", + " |RandomStateSharedVariable() [id B]\n", " |TensorConstant{(1,) of 2} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{(2,) of 0} [id E]\n", @@ -1233,7 +1233,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 30, @@ -1261,22 +1261,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [ 1.51857911 -2.98354082]\n", - "Sample 1: [ 1.51857911 -2.98354082]\n", - "Sample 2: [ 1.51857911 -2.98354082]\n", - "Sample 3: [ 1.51857911 -2.98354082]\n", - "Sample 4: [ 1.51857911 -2.98354082]\n", - "Sample 5: [ 1.51857911 -2.98354082]\n", - "Sample 6: [ 1.51857911 -2.98354082]\n", - "Sample 7: [ 1.51857911 -2.98354082]\n", - "Sample 8: [ 1.51857911 -2.98354082]\n", - "Sample 9: [ 1.51857911 -2.98354082]\n" + "Sample 0: [0.73990713 0.61942948]\n", + "Sample 1: [0.73990713 0.61942948]\n", + "Sample 2: [0.73990713 0.61942948]\n", + "Sample 3: [0.73990713 0.61942948]\n", + "Sample 4: [0.73990713 0.61942948]\n", + "Sample 5: [0.73990713 0.61942948]\n", + "Sample 6: [0.73990713 0.61942948]\n", + "Sample 7: [0.73990713 0.61942948]\n", + "Sample 8: [0.73990713 0.61942948]\n", + "Sample 9: [0.73990713 0.61942948]\n" ] } ], "source": [ "for i in range(10):\n", - " print(f\"Sample {i}: {x.eval()}\")" + " print(f\"Sample {i}: {z.eval()}\")" ] }, { @@ -1295,22 +1295,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [ 1.51857911 -2.98354082]\n", - "Sample 1: [1.40663775 0.31813437]\n", - "Sample 2: [-0.5783356 2.10757813]\n", - "Sample 3: [-1.89963939 -0.03352258]\n", - "Sample 4: [-0.4124512 -0.68448993]\n", - "Sample 5: [2.48977036 3.96330962]\n", - "Sample 6: [-0.48203583 -0.75657077]\n", - "Sample 7: [-1.03348605 -1.13721067]\n", - "Sample 8: [-0.38687507 1.23973121]\n", - "Sample 9: [0.23015944 2.83502457]\n" + "Sample 0: [0.73990713 0.61942948]\n", + "Sample 1: [1.98363962 0.51379973]\n", + "Sample 2: [-0.3705057 1.82794062]\n", + "Sample 3: [1.92805876 2.54330572]\n", + "Sample 4: [0.00767623 1.95050988]\n", + "Sample 5: [ 1.71929707 -0.56447906]\n", + "Sample 6: [0.21982087 1.55174191]\n", + "Sample 7: [-2.49837521 -4.3917572 ]\n", + "Sample 8: [ 0.55235374 -2.25121742]\n", + "Sample 9: [0.23482814 0.61340573]\n" ] } ], "source": [ "for i in range(10):\n", - " print(f\"Sample {i}: {pm.draw(x)}\")" + " print(f\"Sample {i}: {pm.draw(z)}\")" ] }, { @@ -1334,200 +1334,116 @@ ] }, { - "cell_type": "code", - "execution_count": 33, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "mgntEABvQyhu", - "outputId": "319b8e86-388a-4ca5-bd3e-c27a24dd306c" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'x': array([0., 0.])}" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], + "cell_type": "markdown", + "metadata": {}, "source": [ - "point = model.initial_point()\n", - "point" + "Recall we have defined the following model above:" ] }, { "cell_type": "code", - "execution_count": 34, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "d3MpBiUlSVGT", - "outputId": "bdf43dff-e5b5-4699-b0b5-b8d0602b2064" - }, + "execution_count": 33, + "metadata": {}, "outputs": [ { "data": { + "text/latex": [ + "$$\n", + " \\begin{array}{rcl}\n", + " \\text{z} &\\sim & \\operatorname{N}(\\text{},~\\text{})\n", + " \\end{array}\n", + " $$" + ], "text/plain": [ - "{'x': -2.53}" + "" ] }, - "execution_count": 34, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "model.point_logps(point)" + "model" ] }, { - "cell_type": "code", - "execution_count": 35, - "metadata": { - "id": "bAf_AM1FSbf-" - }, - "outputs": [], - "source": [ - "from aeppl.logprob import _logprob" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "5omppW4-StBp", - "outputId": "8a55d79a-6548-4329-80f0-e59b30123067" - }, - "outputs": [], + "cell_type": "markdown", + "metadata": {}, "source": [ - "_logprob.registry" + "We can get the initial point of the model by simply calling the `initial_point` method:" ] }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 34, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "Gyp98lINTAOz", - "outputId": "91c514a6-1168-4f64-97ff-efe5d0f139bc" + "id": "mgntEABvQyhu", + "outputId": "319b8e86-388a-4ca5-bd3e-c27a24dd306c" }, "outputs": [ { "data": { "text/plain": [ - "" + "{'z': array([0., 0.])}" ] }, - "execution_count": 37, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "x = pm.Normal.dist(size=2)\n", - "x.owner.op" + "point = model.initial_point()\n", + "point" ] }, { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "Am5CBIEoSt1j", - "outputId": "c87b47f8-5b41-4102-ed8b-c10de2647c31" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Check{sigma > 0} [id A] '' \n", - " |Elemwise{sub,no_inplace} [id B] '' \n", - " | |Elemwise{sub,no_inplace} [id C] '' \n", - " | | |Elemwise{mul,no_inplace} [id D] '' \n", - " | | | |InplaceDimShuffle{x} [id E] '' \n", - " | | | | |TensorConstant{-0.5} [id F]\n", - " | | | |Elemwise{pow,no_inplace} [id G] '' \n", - " | | | |Elemwise{true_div,no_inplace} [id H] '' \n", - " | | | | |Elemwise{sub,no_inplace} [id I] '' \n", - " | | | | | |TensorConstant{(2,) of 0} [id J]\n", - " | | | | | |InplaceDimShuffle{x} [id K] '' \n", - " | | | | | |TensorConstant{0} [id L]\n", - " | | | | |InplaceDimShuffle{x} [id M] '' \n", - " | | | | |TensorConstant{1.0} [id N]\n", - " | | | |InplaceDimShuffle{x} [id O] '' \n", - " | | | |TensorConstant{2} [id P]\n", - " | | |InplaceDimShuffle{x} [id Q] '' \n", - " | | |Elemwise{log,no_inplace} [id R] '' \n", - " | | |Elemwise{sqrt,no_inplace} [id S] '' \n", - " | | |TensorConstant{6.283185307179586} [id T]\n", - " | |InplaceDimShuffle{x} [id U] '' \n", - " | |Elemwise{log,no_inplace} [id V] '' \n", - " | |TensorConstant{1.0} [id N]\n", - " |All [id W] '' \n", - " |Elemwise{gt,no_inplace} [id X] '' \n", - " |TensorConstant{1.0} [id N]\n", - " |TensorConstant{0.0} [id Y]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], + "cell_type": "markdown", + "metadata": {}, "source": [ - "x_logp = _logprob(x.owner.op, ([0, 0],), *x.owner.inputs)\n", - "aesara.dprint(x_logp)" + "We can compute the log probability for this point in this model:" ] }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 35, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "iAYEgYRwTG7i", - "outputId": "ceb009b4-e2e7-4cb5-d706-fa1d34b2557a" + "id": "d3MpBiUlSVGT", + "outputId": "bdf43dff-e5b5-4699-b0b5-b8d0602b2064" }, "outputs": [ { "data": { "text/plain": [ - "array([-0.91893853, -0.91893853])" + "{'z': -2.53}" ] }, - "execution_count": 39, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "x_logp.eval()" + "model.point_logps(point=point)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There is a handy PyMC function to compute the log probability of a random variable and a given point." ] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 36, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1539,23 +1455,22 @@ { "data": { "text/plain": [ - "array([-0.91893853, -0.91893853])" + "array(-2.53102425)" ] }, - "execution_count": 40, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# Helper friendly pymc function to access logp\n", - "# Takes RV + value as input\n", - "pm.logp(x, [0, 0]).eval()" + "# We could have extracted `z` via model.basic_RVs[0]\n", + "pm.logp(rv=z, value=point[\"z\"]).sum().eval()" ] }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 37, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1573,9 +1488,10 @@ } ], "source": [ + "# TODO: What is the main takeaway from this example?\n", "# What about other types of Ops?\n", "try:\n", - " y = at.cumsum(x)\n", + " y = at.cumsum(z)\n", " pm.logp(y, [1, 1])\n", "except NotImplementedError as err:\n", " print(err)" @@ -1604,7 +1520,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 38, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1616,12 +1532,12 @@ { "data": { "text/plain": [ - "(,\n", - " array([-0.57658533, -0.80388283, 0.24435312, 0.76359185, -1.56807685]),\n", + "(,\n", + " array([-0.10559974, -0.46853318, 0.34606917, -0.70371377, -1.45923352]),\n", " -1.7001885332046727)" ] }, - "execution_count": 42, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } @@ -1640,20 +1556,20 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 39, "metadata": { "id": "dejQBR2FUnM3" }, "outputs": [], "source": [ - "with pm.Model() as m:\n", - " sigma = pm.HalfNormal(\"sigma\")\n", - " x = pm.Normal(\"x\", 0, sigma=sigma)" + "with pm.Model() as model_2:\n", + " sigma = pm.HalfNormal(name=\"sigma\")\n", + " x = pm.Normal(name=\"x\", mu=0, sigma=sigma)" ] }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 40, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1668,19 +1584,19 @@ "{sigma: sigma_log__, x: x}" ] }, - "execution_count": 44, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Each model RV is related to a \"value variable\"\n", - "m.rvs_to_values" + "model_2.rvs_to_values" ] }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 41, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1695,18 +1611,18 @@ "[sigma_log__, x]" ] }, - "execution_count": 45, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "m.value_vars" + "model_2.value_vars" ] }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 42, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1725,10 +1641,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 46, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -1736,23 +1652,23 @@ "source": [ "# These just an input variable (constants inputs if observed)\n", "# used in the logp graph\n", - "aesara.dprint(m.value_vars[0])" + "aesara.dprint(model_2.value_vars[0])" ] }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 43, "metadata": { "id": "JvGOpA3_U0C1" }, "outputs": [], "source": [ - "logp_graph = at.stack(m.logpt(sum=False))" + "logp_graph = at.stack(model_2.logpt(sum=False))" ] }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 44, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1767,20 +1683,20 @@ "array([-10.22579135, 9.08106147])" ] }, - "execution_count": 48, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "sigma_value = m.rvs_to_values[sigma]\n", - "x_value = m.rvs_to_values[x]\n", + "sigma_value = model_2.rvs_to_values[sigma]\n", + "x_value = model_2.rvs_to_values[x]\n", "logp_graph.eval({sigma_value: -10, x_value:0})" ] }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 45, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1795,7 +1711,7 @@ "[array(-10.22579135), array(9.08106147)]" ] }, - "execution_count": 49, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } @@ -1803,7 +1719,7 @@ "source": [ "# model compile_logp is a helpers that creates a compiled aesara function\n", "# of the model logp, which takes a dictionary of {value variable name : value} as inputs\n", - "m.compile_logp(sum=False)({\"sigma_log__\": -10, \"x\": 0})" + "model_2.compile_logp(sum=False)({\"sigma_log__\": -10, \"x\": 0})" ] }, { @@ -1817,7 +1733,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 46, "metadata": { "id": "MsSFt_xDzYn2" }, @@ -1831,7 +1747,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 47, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1847,7 +1763,7 @@ " 'sigma_log__': array([0. , 0.69314718, 1.09861229])}" ] }, - "execution_count": 51, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -1859,7 +1775,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 48, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1874,7 +1790,7 @@ "[array(-0.91893853), array([-0.72579135, -0.72579135, -0.72579135])]" ] }, - "execution_count": 52, + "execution_count": 48, "metadata": {}, "output_type": "execute_result" } @@ -1888,7 +1804,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 49, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1903,7 +1819,7 @@ "[array(-0.91893853), array([-0.72579135, -0.72579135, -0.72579135])]" ] }, - "execution_count": 53, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } @@ -1916,7 +1832,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 50, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1931,7 +1847,7 @@ "array([3.])" ] }, - "execution_count": 54, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } @@ -1945,7 +1861,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 51, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1960,7 +1876,7 @@ "array([[4.]])" ] }, - "execution_count": 55, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } From 779beca655dc9e8c55828c64e620b603752d32eb Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Fri, 3 Jun 2022 12:56:27 +0200 Subject: [PATCH 10/30] clean notebook and extract main sections [WIP] --- docs/pymc_aesara.ipynb | 580 ++++++++++++++++------------------------- 1 file changed, 220 insertions(+), 360 deletions(-) diff --git a/docs/pymc_aesara.ipynb b/docs/pymc_aesara.ipynb index 9a15dc4db3..cbfeb64652 100644 --- a/docs/pymc_aesara.ipynb +++ b/docs/pymc_aesara.ipynb @@ -10,7 +10,8 @@ "\n", "**Authors:** [Ricardo Vieira](https://github.com/ricardoV94) and [Juan Orduz](https://juanitorduz.github.io/)\n", "\n", - "In this notebook we want to give an overview of how PyMC models translate to Aesara graphs.\n", + "In this notebook we want to give an introduction of how PyMC models translate to Aesara graphs. The purpose is not to give a detailed description of all `aesara`'s capabilities but rather focus on the main concepts to understand its connection with PyMC. For a more detailed description of the project please refer to the [official documentation](https://aesara.readthedocs.io/en/latest/index.html).\n", + "\n", "\n", "**Remark:** For a summary on PyMC internals and design please see [Architecture.md](https://github.com/pymc-devs/pymc/blob/main/ARCHITECTURE.md)." ] @@ -21,7 +22,7 @@ "source": [ "## Prepare Notebook\n", "\n", - "Let us first import the required libraries." + "First import the required libraries." ] }, { @@ -93,7 +94,7 @@ "source": [ "### A simple example\n", "\n", - "To begin, we start defining some aesara tensors and perform some basic operations." + "To begin, we define some aesara tensors and show how to perform some basic operations." ] }, { @@ -196,7 +197,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -212,7 +213,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note that this graph does not any computation (yet!). It is simply defining the sequence or steps to be done. The aesara function [`aesara.function`](https://aesara.readthedocs.io/en/latest/library/compile/function.html#aesara.compile.function.function) is used to define a callable object so that we can push values trough the graph." + "Note that this graph does not do any computation (yet!). It is simply defining the sequence of steps to be done. The aesara function [`aesara.function`](https://aesara.readthedocs.io/en/latest/library/compile/function.html#aesara.compile.function.function) is used to define a callable object so that we can push values trough the graph." ] }, { @@ -239,7 +240,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 6, @@ -365,15 +366,14 @@ "output_type": "stream", "text": [ "Elemwise{true_div,no_inplace} [id A] 'a / b' \n", - " |InplaceDimShuffle{x} [id B] '' \n", - " | |a [id C]\n", - " |b [id D]\n" + " |a [id B]\n", + " |b [id C]\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 10, @@ -383,7 +383,7 @@ ], "source": [ "a = at.scalar(name=\"a\")\n", - "b = at.vector(name=\"b\")\n", + "b = at.scalar(name=\"b\")\n", "\n", "c = a / b\n", "c.name = \"a / b\"\n", @@ -410,15 +410,14 @@ "Elemwise{mul,no_inplace} [id A] 'b * c' \n", " |b [id B]\n", " |Elemwise{true_div,no_inplace} [id C] 'a / b' \n", - " |InplaceDimShuffle{x} [id D] '' \n", - " | |a [id E]\n", + " |a [id D]\n", " |b [id B]\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -449,16 +448,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "Alloc [id A] 'b * c' 1\n", - " |a [id B]\n", - " |Shape_i{0} [id C] '' 0\n", - " |b [id D]\n" + "DeepCopyOp [id A] 'a' 0\n", + " |a [id B]\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 12, @@ -487,7 +484,7 @@ { "data": { "text/plain": [ - "array([1.])" + "array(1.)" ] }, "execution_count": 13, @@ -496,7 +493,7 @@ } ], "source": [ - "g(a=1, b=[0])" + "g(a=1, b=0)" ] }, { @@ -507,8 +504,6 @@ "source": [ "### What is in an Aesara graph?\n", "\n", - "The purpose of this notebook is not to give a detailed description of all `aesara`'s capabilities but rather focus on the main concepts to understand (at some introductory level) its connection with PyMC. For a more detailed description of the project please refer to the [official documentation](https://aesara.readthedocs.io/en/latest/index.html).\n", - "\n", "The following diagram shows the basic structure of an `aesara` graph." ] }, @@ -660,7 +655,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 16, @@ -754,7 +749,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 19, @@ -799,7 +794,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 20, @@ -886,7 +881,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 22, @@ -934,15 +929,6 @@ "source": [ "# PyMC\n", "![image.png](data:image/png;base64,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)\n", - "## Distributions are just RandomVariables\n", - "**Source code**\n", - "* [PyMC [rev 1005d20b3c]](https://github.com/pymc-devs/pymc/tree/1005d20b3c12d9b9a424c069f6a0f9962d73c41d)\n", - "* [Distributions module](https://github.com/pymc-devs/pymc/tree/main/pymc/distributions)\n", - "* [Distribution class](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/distribution.py)\n", - " * See issue [#5308](https://github.com/pymc-devs/pymc/issues/5308)\n", - "* [Discrete distributions](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/discrete.py)\n", - "* [Continuous distributions](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/continuous.py)\n", - "* [Multivariate distributions](https://github.com/pymc-devs/pymc/blob/main/pymc/distributions/multivariate.py)\n", "\n", "**Guide**\n", "* [Distribution developer guide](https://github.com/pymc-devs/pymc/blob/1005d20b3c12d9b9a424c069f6a0f9962d73c41d/docs/source/contributing/developer_guide_implementing_distribution.md)" @@ -967,7 +953,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "How To generate random numbers in [`numpy`](https://numpy.org/)? To illustrate it we can sample from a normal distribution:" + "How to generate random numbers in [`numpy`](https://numpy.org/)? To illustrate it we can sample from a normal distribution:" ] }, { @@ -983,7 +969,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1001,9 +987,7 @@ "\n", "fig, ax = plt.subplots()\n", "ax.hist(a, bins=15)\n", - "ax.set(\n", - " title=\"Samples from a normal distribution\", xlabel=\"x\", ylabel=\"frequency\"\n", - ");" + "ax.set(title=\"Samples from a normal distribution\", xlabel=\"x\", ylabel=\"frequency\");" ] }, { @@ -1023,7 +1007,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] '' \n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1033,7 +1017,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 25, @@ -1062,16 +1046,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: 0.04685674920974335\n", - "Sample 1: 0.04685674920974335\n", - "Sample 2: 0.04685674920974335\n", - "Sample 3: 0.04685674920974335\n", - "Sample 4: 0.04685674920974335\n", - "Sample 5: 0.04685674920974335\n", - "Sample 6: 0.04685674920974335\n", - "Sample 7: 0.04685674920974335\n", - "Sample 8: 0.04685674920974335\n", - "Sample 9: 0.04685674920974335\n" + "Sample 0: 0.808637964810379\n", + "Sample 1: 0.808637964810379\n", + "Sample 2: 0.808637964810379\n", + "Sample 3: 0.808637964810379\n", + "Sample 4: 0.808637964810379\n", + "Sample 5: 0.808637964810379\n", + "Sample 6: 0.808637964810379\n", + "Sample 7: 0.808637964810379\n", + "Sample 8: 0.808637964810379\n", + "Sample 9: 0.808637964810379\n" ] } ], @@ -1084,7 +1068,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We always get the same samples! This has to to with the random seed step in the graph, i.e. `RandomGeneratorSharedVariable` (we will not go deeper into this subject here). The correct way to do it is via `pm.draw`." + "We always get the same samples! This has to do with the random seed step in the graph, i.e. `RandomGeneratorSharedVariable` (we will not go deeper into this subject here). The correct way to do it is via `pm.draw`." ] }, { @@ -1094,7 +1078,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEWCAYAAACJ0YulAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAcGklEQVR4nO3de5gdVZ3u8e9rQOQ6gLQYLtqAiCIy4RhxjrdhBAXREfWREQ4qKhpxYEYfOXMMoAJqRrzgfdQJA4JyH5GRIzjCgMiggjSI4RKQANGExKRJwARQjgnv+aNWFzvN7vRO2LurO/1+nmc/qVq1qupXu3f2b69VVatkm4iICICnNR1ARESMH0kKERFRS1KIiIhakkJERNSSFCIiopakEBERtSSFWG+STpZ0Tpe3KUnflvSgpF92c9uTiaR3S7puHerPl3RAmT5B0r91MZaHJe1aps+S9Okubvtbkj7ere1FksKEJOmVkn4u6Q+Slkv6maSXNh1Xl7wSeC2wk+19mw5mMrL9z7bfN1o9SddIGrWe7S1s3/tU42qX6GwfbftTT3Xb8YSNmg4g1o2krYAfAh8ELgKeDrwKeKzJuLroucB824+0WyhpI9urxjimntsQj2tDPKbJIC2Fief5ALbPt73a9h9tX2F7DoCk3SRdLWmZpAcknStp66GVSzfBP0maI+kRSWdI2l7SjyStlPRfkrYpdfslWdIMSYskLZZ03EiBSfqr0oJ5SNKvJe3Xsuzdku4t+7hP0hFt1j8K+Dfgf5Yuh1Mk7SdpoaSPSvo98G1Jm0j6colpUZnepGxjqP7/kbS0xPxmSQdL+k1pWZ2wlmN4g6RfSVohaYGkk9dSd2hfx7Xs6z0ty/9C0nckDUr6raSPSXpay/vxM0lfkrQcOLl0rXyj/C0eLsufXY7vQUl3StqnZfszJd1T3tM7JL1lpFjbxP7OEtMySScOW1Z3C0p6hqRzSr2HJN1YPi+zqH6MfL3E+vVS35KOkXQ3cHdL2fNadrGdpCtL3D+V9NxSb+jztlFLLNdIep+kFwLf4onPxkNl+RrdUZLeL2le+TtfKmmHlmWWdLSku8v7+S+S1Ol7NmnYzmsCvYCtgGXA2cDrgW2GLX8eVffLJkAfcC3w5Zbl84Hrge2BHYGlwM3APmWdq4GTSt1+wMD5wObAi4FB4ICy/GTgnDK9Y4nrYKofG68t831l3RXAHqXuVOBFIxzfu4HrWub3A1YBny3xbQp8shzDs8r2fw58alj9TwAbA+8vMZ8HbAm8CPgTsOsI+9+vHOfTgL2BJcCb11J3VYln43Lsjw79TYDvAD8o++0HfgMc1XKcq4B/oGqxbwqcBTwAvAR4Rvlb3Ae8C5gCfBr4Scv+DwV2KLG+HXgEmNrufRwW957Aw8Cry3v6xRJLu7/rB4D/C2xWYngJsFVZdg3wvmHbNnAlsC2waUvZ88r0WcDKln1/ZShOnvi8bdSyvXof7Y6pbO/TZfo15f37H2XbXwOuHRbbD4GtgedQfS4Oavr/9Hh7paUwwdheQdXvbuB0YLD8Itq+LJ9n+0rbj9kepPoP/9fDNvM120ts3w/8N3CD7V/Zfgy4hCpBtDrF9iO2bwW+DRzeJrR3AJfbvtz247avBAaovigBHgf2krSp7cW2b1+Hw36cKlE9ZvuPwBHAJ20vLcd4CvDOlvp/BmbZ/jNwAbAd8BXbK8t+b6f6wn8S29fYvrUcwxyqhDj8/Wv15xLLn21fTvVlu4ekKVRf1MeX/c4HThsW5yLbX7O9qhwXwCW2b7L9J6q/xZ9sf8f2auBCWv42tv/d9qIS64VUv8w7OQ/zNuCHtq8tf/OPU73HIx3fM6m+1FeX2FaMsv3P2F7eckzDXday7xOpfv3v3EHcozkCONP2zWXbx5dt97fUOdX2Q7Z/B/wEmNaF/W5QkhQmINtzbb/b9k7AXlS/Fr8MIOlZki6QdL+kFcA5VF+KrZa0TP+xzfwWw+ovaJn+bdnfcM8FDi1dDA+V5v0rqX65PkL1BXk0sFjSZZJe0PkRM1i+JIfsUOIYKaZl5Ut06Hhg9GMEQNLLJP2kdPn8ocQ8/P1rtcxr9ps/Wra9HdX5nuFx7tgy3/q+Dun4byPpXZJuaXm/9xol1iE7tO67/H2WjVD3u8CPgQtKV93nJG08yvbbHVfb5bYfBpbT/jO1rtb4XJRtL2PN9/z3LdNDf6tokaQwwdm+k6oJvVcp+gxVK2Jv21tR/YJ/qv2mrb/ingMsalNnAfBd21u3vDa3fWqJ88e2X0vVdXQnVSunU8OH8l1ElYRGi2l9nAdcCuxs+y+o+rHX5/17gOpX9vA472+ZX+8hiks//OnAscAzbW8N3EZnsS6m5W8qaTOq1sCTlBbQKbb3BF4OvJGqO2tt8Y92XK373oKqq2kRVfcXVF1VQ569Dttd43MhaXOq47p/xDXiSZIUJhhJLygnNncq8ztTdedcX6psSdWF8ZCkHYF/6sJuPy5pM0kvAt5D1Y0x3DnA30o6UNKUcoJyP0k7lROTbyr/SR8r8a1us41OnQ98TFKfpO2ozh90636JLYHltv8kaV/gf63PRkpL5SJglqQty5f4R7oY5+ZUX5KDAOUE915rXeMJ3wPeqOrS5qdTnRNp+10g6W8kvbh0h62gSnRDf7slwK7rEfvBLfv+FFX35YLSFXg/8I7yGXovsFvLekuAncp67ZwHvEfSNFUXHvxz2fb89Yhx0kpSmHhWAi8DbpD0CFUyuA0YuiroFKoTbX8ALgO+34V9/hSYB1wFfMH2FcMr2F4AHAKcQPVFtYAqIT2tvI6j+iW3nKqP/u+fQjyfpjpfMQe4lepEebduiPp74JOSVlIlm4uewrb+gerX773AdVRfWmc+5QgB23dQnaP4BdWX5YuBn3W47u3AMSWexcCDwMIRqj+bKomsAOZSfRaGEttXgLeVK3m+ug7hnwecRPVZeAnVuYAh76f63Cyjuijg5y3LrqY6H/R7SQ+0Oa6rqM6PXFyOazfgsHWIKwDZechOtFdO0N0HbOxcbx4xKaSlEBERtSSFiIiopfsoIiJqaSlERERtQg+It91227m/v7/pMCIiJpSbbrrpAdt97ZZN6KTQ39/PwMBA02FEREwokn470rJ0H0VERK1nSUHSzmUMmbmSbpf0oVK+bRk29+7y7zYt6xxfhr29S9KBvYotIiLa62VLYRVwnO0XAn8FHCNpT2AmcJXt3anukJ0JUJYdRnUX40HAN8qt9RERMUZ6lhTK8Mg3l+mVVLfI70g1FMLZpdrZwJvL9CHABWV45PuohlXI4xgjIsbQmJxTKMMl7APcAGxvezFUiYPqQSlQJYzWIXcXsuaQt0PbmiFpQNLA4OBgT+OOiJhsep4UytC4FwMfHuXhHO2G/H3SnXW2Z9uebnt6X1/bK6oiImI99TQplIdxXAyca3totM4lkqaW5VOpHgcJVcugddz+nejeGPkREdGBXl59JOAMYK7tL7YsuhQ4skwfSfUM26Hyw1Q9lH0XYHfgl72KLyIinqyXN6+9gup5tLdKuqWUnQCcClwk6Sjgd1QPH8f27ZIuAu6gunLpmJZHKkZExBjoWVKwfR0jPxpw/xHWmQXM6lVMMfn0z7ys69ucf+obur7NiPEidzRHREQtSSEiImpJChERUUtSiIiIWpJCRETUkhQiIqKWpBAREbUkhYiIqE3ox3FGNKHbN8TlZrgYT9JSiIiIWpJCRETUkhQiIqKWpBAREbUkhYiIqCUpRERELUkhIiJqSQoREVFLUoiIiFrPkoKkMyUtlXRbS9mFkm4pr/lDz26W1C/pjy3LvtWruCIiYmS9HObiLODrwHeGCmy/fWha0mnAH1rq32N7Wg/jiYiIUfQsKdi+VlJ/u2WSBPwd8Jpe7T8iItZdU+cUXgUssX13S9kukn4l6aeSXjXSipJmSBqQNDA4ONj7SCMiJpGmksLhwPkt84uB59jeB/gIcJ6krdqtaHu27em2p/f19Y1BqBERk8eYJwVJGwFvBS4cKrP9mO1lZfom4B7g+WMdW0TEZNdES+EA4E7bC4cKJPVJmlKmdwV2B+5tILaIiEmtl5ekng/8AthD0kJJR5VFh7Fm1xHAq4E5kn4NfA842vbyXsUWERHt9fLqo8NHKH93m7KLgYt7FUtERHQmdzRHREQtSSEiImpJChERUUtSiIiIWpJCRETUkhQiIqKWpBAREbUkhYiIqCUpRERELUkhIiJqSQoREVFLUoiIiFqSQkRE1JIUIiKilqQQERG1JIWIiKglKURERK2Xj+M8U9JSSbe1lJ0s6X5Jt5TXwS3Ljpc0T9Jdkg7sVVwRETGyXrYUzgIOalP+JdvTyutyAEl7Uj27+UVlnW9ImtLD2CIioo2eJQXb1wLLO6x+CHCB7cds3wfMA/btVWwREdFeE+cUjpU0p3QvbVPKdgQWtNRZWMqeRNIMSQOSBgYHB3sda0TEpDLWSeGbwG7ANGAxcFopV5u6brcB27NtT7c9va+vrydBRkRMVmOaFGwvsb3a9uPA6TzRRbQQ2Lml6k7AorGMLSIixjgpSJraMvsWYOjKpEuBwyRtImkXYHfgl2MZW0REwEa92rCk84H9gO0kLQROAvaTNI2qa2g+8AEA27dLugi4A1gFHGN7da9ii4iI9nqWFGwf3qb4jLXUnwXM6lU8ERExutzRHBERtSSFiIioJSlEREQtSSEiImpJChERUevZ1UcR0Zn+mZd1dXvzT31DV7cXk0taChERUUtSiIiIWpJCRETUkhQiIqKWpBAREbUkhYiIqCUpRERELUkhIiJqSQoREVFLUoiIiFqSQkRE1JIUIiKi1rOkIOlMSUsl3dZS9nlJd0qaI+kSSVuX8n5Jf5R0S3l9q1dxRUTEyHrZUjgLOGhY2ZXAXrb3Bn4DHN+y7B7b08rr6B7GFRERI+hZUrB9LbB8WNkVtleV2euBnXq1/4iIWHdNnlN4L/CjlvldJP1K0k8lvWqklSTNkDQgaWBwcLD3UUZETCKjJoXyBXyMpG26tVNJJwKrgHNL0WLgObb3AT4CnCdpq3br2p5te7rt6X19fd0KKSIi6KylcBiwA3CjpAskHShJ67tDSUcCbwSOsG0A24/ZXlambwLuAZ6/vvuIiIj1M2pSsD3P9olUX9LnAWcCv5N0iqRt12Vnkg4CPgq8yfajLeV9kqaU6V2B3YF712XbERHx1HV0TkHS3sBpwOeBi4G3ASuAq9eyzvnAL4A9JC2UdBTwdWBL4Mphl56+Gpgj6dfA94CjbS9vu+GIiOiZjUarIOkm4CHgDGCm7cfKohskvWKk9Wwf3qb4jBHqXkyVbCIiokGjJgXgUNttu3Jsv7XL8URERIM6SQrvk/Q52w8BlKuQjrP9sZ5GFpNS/8zLmg4hYlLr5JzC64cSAoDtB4GDexZRREQ0ppOkMEXSJkMzkjYFNllL/YiImKA66T46B7hK0rcBU92JfHZPo4qIiEaMmhRsf07SrcD+gIBP2f5xzyOLiIgx10lLAds/Ys1xiiIiYgPUydhHb5V0t6Q/SFohaaWkFWMRXEREjK1OWgqfA/7W9txeBxMREc3q5OqjJUkIERGTQycthQFJFwL/AQwNcYHt7/cqqIiIaEYnSWEr4FHgdS1lBpIUIiI2MJ1ckvqesQgkIiKa18nVR8+XdJWk28r83pIy7lFExAaokxPNpwPHA38GsD2H6mlsERGxgekkKWxm+5fDylb1IpiIiGhWJ0nhAUm7UZ1cRtLbgMU9jSoiIhrRSVI4BvhX4AWS7gc+DHxwtJUknSlp6dC5iFK2raQryx3SV5ZnMwwtO17SPEl3STpw3Q8lIiKeqlGTgu17bR8A9AEvsP1K2/M72PZZwEHDymYCV9neHbiqzCNpT6rzFC8q63xD0pRODyIiIrqjk2c0f2LYPAC2P7m29WxfK6l/WPEhwH5l+mzgGuCjpfyC8vzn+yTNA/YFfjFafBER0T2ddB890vJaDbwe6F/P/W1vezFA+fdZpXxHYEFLvYWl7EkkzZA0IGlgcHBwPcOIiIh2Orl57bTWeUlfAC7tchxqt+sR4pkNzAaYPn162zoREbF+OnqewjCbAbuu5/6WSJpqe7GkqcDSUr4Q2Lml3k7AovXcR8Sk1j/zsq5ub/6pb+jq9mJ86+SO5lslzSmv24G7gK+s5/4uBY4s00cCP2gpP0zSJpJ2AXYHht8bERERPdZJS+GNLdOrqIbSHvXmNUnnU51U3k7SQuAk4FTgIklHAb8DDgWwfbuki4A7yj6Osb16XQ4kIiKeuk6Swsph81sNXYEEYHt5u5VsHz7C9vYfof4sYFYH8URERI90khRupurvf5DqhPDWVL/yoToZvL7nFyIiYpzp5JLU/6R6HOd2tp9J1Z30fdu72E5CiIjYgHSSFF5q+/KhGds/Av66dyFFRERTOuk+eqA8P+Ecqu6idwDLehpVREQ0opOWwuFU4x5dUl59pSwiIjYwndzRvBz4kKQtbD88BjFFRERDOrl57eWS7qC6hwBJfynpGz2PLCIixlwn3UdfAg6knEew/Wvg1b0MKiIimtFJUsD2gmFFuds4ImID1MnVRwskvRywpKcD/wjM7W1YERHRhE5aCkdTPZJzR6rRTKeV+YiI2MCstaVQHon5ZdtHjFE8McF0e5jmiGjWWlsKZaTSvtJtFBERG7hOzinMB34m6VKqR3ICYPuLvQoqIiKaMWJLQdJ3y+TbgR+Wulu2vCIiYgOztpbCSyQ9l2qY7K+NUTwREdGgtSWFb1ENm70LMNBSLvIchYiIDdKIScH2V4GvSvqm7Q92a4eS9gAubCnaFfgE1cN73g8MlvITWofsjoiI3utkQLyuJYSyvbuo7nUYuuT1fqrRV98DfMn2F7q5v4iI6FxHw1z00P7APbZ/23AcERFB80nhMOD8lvljJc2RdKakbZoKKiJismosKZQb4t4E/Hsp+iawG1XX0mLgtBHWmyFpQNLA4OBguyoREbGemmwpvB642fYSANtLbK+2/ThwOrBvu5Vsz7Y93fb0vr6+MQw3ImLD12RSOJyWriNJU1uWvQW4bcwjioiY5DoZ5qLrJG0GvBb4QEvx5yRNo7oHYv6wZRERMQYaSQq2HwWeOazsnU3EEhERT2j66qOIiBhHkhQiIqKWpBAREbUkhYiIqCUpRERELUkhIiJqSQoREVFLUoiIiFqSQkRE1JIUIiKilqQQERG1JIWIiKglKURERC1JISIiao0MnR3N6J95WdMhRMQ4l5ZCRETUkhQiIqKWpBAREbWmntE8H1gJrAZW2Z4uaVvgQqCf6hnNf2f7wSbii4iYrJpsKfyN7Wm2p5f5mcBVtncHrirzERExhsZT99EhwNll+mzgzc2FEhExOTWVFAxcIekmSTNK2fa2FwOUf5/VbkVJMyQNSBoYHBwco3AjIiaHpu5TeIXtRZKeBVwp6c5OV7Q9G5gNMH36dPcqwIiIyaiRloLtReXfpcAlwL7AEklTAcq/S5uILSJiMhvzpCBpc0lbDk0DrwNuAy4FjizVjgR+MNaxRURMdk10H20PXCJpaP/n2f5PSTcCF0k6CvgdcGgDsUVETGpjnhRs3wv8ZZvyZcD+Yx1PRKxdL8bMmn/qG7q+zeiO8XRJakRENCxJISIiakkKERFRS1KIiIhakkJERNSSFCIiopakEBERtSSFiIioJSlEREQtSSEiImpJChERUUtSiIiIWpJCRETUkhQiIqKWpBAREbUkhYiIqCUpRERErYlnNO8s6SeS5kq6XdKHSvnJku6XdEt5HTzWsUVETHZNPKN5FXCc7ZslbQncJOnKsuxLtr/QQEwREUEzz2heDCwu0yslzQV2HOs4IqI53X7uc5753D2NnlOQ1A/sA9xQio6VNEfSmZK2GWGdGZIGJA0MDg6OVagREZNCY0lB0hbAxcCHba8AvgnsBkyjakmc1m4927NtT7c9va+vb6zCjYiYFBpJCpI2pkoI59r+PoDtJbZX234cOB3Yt4nYIiImsyauPhJwBjDX9hdbyqe2VHsLcNtYxxYRMdk1cfXRK4B3ArdKuqWUnQAcLmkaYGA+8IEGYouImNSauProOkBtFl0+1rFERMSammgpRIe6fdleRMRoMsxFRETUkhQiIqKWpBAREbUkhYiIqCUpRERELUkhIiJqSQoREVHLfQoRMeFlKO7uSUshIiJqSQoREVFLUoiIiFqSQkRE1HKiuYsygF1ETHRpKURERC1JISIiauk+iogYphddwRPl3odJnRRyDiAiYk3jrvtI0kGS7pI0T9LMpuOJiJhMxlVSkDQF+Bfg9cCewOGS9mw2qoiIyWO8dR/tC8yzfS+ApAuAQ4A7Go0qIuIpmijjM423pLAjsKBlfiHwstYKkmYAM8rsw5Lu6lEs2wEP9GjbvZS4x1biHluJu9Bnn9Lqzx1pwXhLCmpT5jVm7NnA7J4HIg3Ynt7r/XRb4h5biXtsJe7eG1fnFKhaBju3zO8ELGooloiISWe8JYUbgd0l7SLp6cBhwKUNxxQRMWmMq+4j26skHQv8GJgCnGn79obC6XkXVY8k7rGVuMdW4u4x2R69VkRETArjrfsoIiIalKQQERG1JIW1kPQpSXMk3SLpCkk7NB1TJyR9XtKdJfZLJG3ddEydkHSopNslPS5pXF++N1GHY5F0pqSlkm5rOpZ1IWlnST+RNLd8Rj7UdEydkPQMSb+U9OsS9ylNxzSanFNYC0lb2V5Rpv8R2NP20Q2HNSpJrwOuLifuPwtg+6MNhzUqSS8EHgf+FfjftgcaDqmtMhzLb4DXUl1GfSNwuO1xf+e9pFcDDwPfsb1X0/F0StJUYKrtmyVtCdwEvHm8v+eSBGxu+2FJGwPXAR+yfX3DoY0oLYW1GEoIxeYMu5FuvLJ9he1VZfZ6qvs9xj3bc2336g71bqqHY7H9/4Ch4VjGPdvXAsubjmNd2V5s++YyvRKYSzUCwrjmysNlduPyGtffI0kKo5A0S9IC4AjgE03Hsx7eC/yo6SA2MO2GYxn3X1AbCkn9wD7ADQ2H0hFJUyTdAiwFrrQ9ruOe9ElB0n9Juq3N6xAA2yfa3hk4Fzi22WifMFrcpc6JwCqq2MeFTuKeAEYdjiV6Q9IWwMXAh4e15Mct26ttT6Nqse8raVx3242rm9eaYPuADqueB1wGnNTDcDo2WtySjgTeCOzvcXTiaB3e7/Esw7E0oPTJXwyca/v7Tcezrmw/JOka4CBg3J7on/QthbWRtHvL7JuAO5uKZV1IOgj4KPAm2482Hc8GKMOxjLFywvYMYK7tLzYdT6ck9Q1d/SdpU+AAxvn3SK4+WgtJFwN7UF0R81vgaNv3NxvV6CTNAzYBlpWi6yfIVVNvAb4G9AEPAbfYPrDRoEYg6WDgyzwxHMusZiPqjKTzgf2ohnJeApxk+4xGg+qApFcC/w3cSvX/EeAE25c3F9XoJO0NnE31OXkacJHtTzYb1dolKURERC3dRxERUUtSiIiIWpJCRETUkhQiIqKWpBAREbUkhYiIqCUpRERELUkhooskvbQ8x+IZkjYvY+iP67FuIlrl5rWILpP0aeAZwKbAQtufaTikiI4lKUR0WRkP6UbgT8DLba9uOKSIjqX7KKL7tgW2ALakajFETBhpKUR0maRLqZ7GtgvVIyTHzXM4IkYz6Z+nENFNkt4FrLJ9XnmW888lvcb21U3HFtGJtBQiIqKWcwoREVFLUoiIiFqSQkRE1JIUIiKilqQQERG1JIWIiKglKURERO3/A84ldqmCvIBuAAAAAElFTkSuQmCC", + "image/png": "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uAFmHT/A8nOAOe2KJyIiBpc7miMiopakEBERtSSFiIioJSlERERtXPfRHBHPlzukYyRSU4iIiFqSQkRE1JIUIiKilqQQERG1JIWIiKglKURERC1JISIiakkKERFRS1KIiIha7miOGKLRvmM4YixJTSEiImptSwqSzpO0uvSy1n/ehyRZ0uSGaadJWiLpXkmHtCuuiIgYWDtrChcAh/afKGkacDDwYMO0vYFjgX3KOl+TNKmNsUVERBNtSwq2bwDWNJn1ZeDDgBumHQVcZnud7QeAJcD+7YotIiKa6+g5BUlHAg/Z/mW/WbsCyxrGl5dpERHRQR27+kjSVsDpwJubzW4yzU2mIWkWMAtgt912G7X4IiKiszWFFwO7A7+UtBSYCtwm6YVUNYNpDctOBVY024jtc2zPsD2jp6enzSFHREwsHUsKtu+0vZPt6banUyWCV9v+DTAfOFbS5pJ2B/YEbu5UbBERUWnnJamXAv8JvFTSckknDrSs7UXAPOBu4IfAybafbldsERHRXNvOKdg+bpD50/uNzwHmtCueiIgYXO5ojoiIWpJCRETUkhQiIqKWpBAREbU8Ojs2annMdcTQpKYQERG1JIWIiKglKURERC1JISIiakkKERFRS1KIiIhakkJERNSSFCIiopakEBERtSSFiIioJSlEREQtSSEiImrt7I7zPEmrJd3VMO3zku6RdIek70navmHeaZKWSLpX0iHtiisiIgbWzprCBcCh/aZdC+xrez/gV8BpAJL2Bo4F9inrfE3SpDbGFhERTbQtKdi+AVjTb9o1tteX0RuBqWX4KOAy2+tsPwAsAfZvV2wREdFcN88pvAu4ugzvCixrmLe8THseSbMkLZS0sLe3t80hRkRMLF1JCpJOB9YDF/dNarKYm61r+xzbM2zP6OnpaVeIERETUsd7XpM0EzgCONB234F/OTCtYbGpwIpOxxYRMdF1tKYg6VDgVOBI279vmDUfOFbS5pJ2B/YEbu5kbBER0caagqRLgQOAyZKWA2dQXW20OXCtJIAbbZ9ke5GkecDdVM1KJ9t+ul2xRUREc21LCraPazL53A0sPweY0654IiJicLmjOSIiakkKERFRS1KIiIhakkJERNSSFCIiopakEBERtSSFiIioJSlEREQtSSEiImpJChERUUtSiIiIWpJCRETUkhQiIqKWpBAREbUkhYiI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", "text/plain": [ "
" ] @@ -1108,9 +1092,7 @@ "source": [ "fig, ax = plt.subplots()\n", "ax.hist(pm.draw(x, draws=1_000), bins=15)\n", - "ax.set(\n", - " title=\"Samples from a normal distribution\", xlabel=\"x\", ylabel=\"frequency\"\n", - ");" + "ax.set(title=\"Samples from a normal distribution\", xlabel=\"x\", ylabel=\"frequency\");" ] }, { @@ -1122,16 +1104,6 @@ "## What is going on behind the scenes?" ] }, - { - "cell_type": "markdown", - "metadata": { - "id": "YHWznAnCE8a1" - }, - "source": [ - "**Source code**\n", - "* [Model module](https://github.com/pymc-devs/pymc/blob/main/pymc/model.py)" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -1149,7 +1121,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] '' \n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1159,7 +1131,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 28, @@ -1223,7 +1195,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z' \n", - " |RandomStateSharedVariable() [id B]\n", + " |RandomStateSharedVariable() [id B]\n", " |TensorConstant{(1,) of 2} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{(2,) of 0} [id E]\n", @@ -1233,7 +1205,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 30, @@ -1261,16 +1233,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [0.73990713 0.61942948]\n", - "Sample 1: [0.73990713 0.61942948]\n", - "Sample 2: [0.73990713 0.61942948]\n", - "Sample 3: [0.73990713 0.61942948]\n", - "Sample 4: [0.73990713 0.61942948]\n", - "Sample 5: [0.73990713 0.61942948]\n", - "Sample 6: [0.73990713 0.61942948]\n", - "Sample 7: [0.73990713 0.61942948]\n", - "Sample 8: [0.73990713 0.61942948]\n", - "Sample 9: [0.73990713 0.61942948]\n" + "Sample 0: [ 0.35173203 -0.85175519]\n", + "Sample 1: [ 0.35173203 -0.85175519]\n", + "Sample 2: [ 0.35173203 -0.85175519]\n", + "Sample 3: [ 0.35173203 -0.85175519]\n", + "Sample 4: [ 0.35173203 -0.85175519]\n", + "Sample 5: [ 0.35173203 -0.85175519]\n", + "Sample 6: [ 0.35173203 -0.85175519]\n", + "Sample 7: [ 0.35173203 -0.85175519]\n", + "Sample 8: [ 0.35173203 -0.85175519]\n", + "Sample 9: [ 0.35173203 -0.85175519]\n" ] } ], @@ -1295,16 +1267,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [0.73990713 0.61942948]\n", - "Sample 1: [1.98363962 0.51379973]\n", - "Sample 2: [-0.3705057 1.82794062]\n", - "Sample 3: [1.92805876 2.54330572]\n", - "Sample 4: [0.00767623 1.95050988]\n", - "Sample 5: [ 1.71929707 -0.56447906]\n", - "Sample 6: [0.21982087 1.55174191]\n", - "Sample 7: [-2.49837521 -4.3917572 ]\n", - "Sample 8: [ 0.55235374 -2.25121742]\n", - "Sample 9: [0.23482814 0.61340573]\n" + "Sample 0: [ 0.35173203 -0.85175519]\n", + "Sample 1: [-1.31692252 -2.22210956]\n", + "Sample 2: [-0.82131747 3.57379473]\n", + "Sample 3: [ 0.38016371 -5.53981978]\n", + "Sample 4: [-0.27771814 -2.37820302]\n", + "Sample 5: [ 1.15546367 -0.91836788]\n", + "Sample 6: [ 0.51942266 -1.81911437]\n", + "Sample 7: [-0.59627107 -1.6637828 ]\n", + "Sample 8: [-1.32686501 1.3571256 ]\n", + "Sample 9: [ 0.94574989 -0.87620556]\n" ] } ], @@ -1314,23 +1286,37 @@ ] }, { - "cell_type": "markdown", - "metadata": { - "id": "wPw9kCvASOeJ" - }, + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ - "## Enough with Random Variables, I want to see some (log)probabilities!" + "fig, ax = plt.subplots(figsize=(8, 8))\n", + "z_draws = pm.draw(vars=z, draws=10_000)\n", + "ax.hist2d(x=z_draws[:, 0], y=z_draws[:, 1], bins=25)\n", + "ax.set(title=\"Samples from a multivariate normal distribution\", xlabel=\"x\", ylabel=\"y\");" ] }, { "cell_type": "markdown", "metadata": { - "id": "CVj2ZrbHFKmr" + "id": "wPw9kCvASOeJ" }, "source": [ - "**Source code**\n", - "* [PyMC logprob](https://github.com/pymc-devs/pymc/blob/1005d20b3c12d9b9a424c069f6a0f9962d73c41d/pymc/distributions/logprob.py)\n", - "* [Aeppl logprob](https://github.com/aesara-devs/aeppl/blob/2019114d231d8d3d96acc284fe0e6ee42d89c912/aeppl/logprob.py)" + "## Enough with Random Variables, I want to see some (log)probabilities!" ] }, { @@ -1342,7 +1328,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 34, "metadata": {}, "outputs": [ { @@ -1355,10 +1341,10 @@ " $$" ], "text/plain": [ - "" + "" ] }, - "execution_count": 33, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -1376,7 +1362,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 35, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1391,7 +1377,7 @@ "{'z': array([0., 0.])}" ] }, - "execution_count": 34, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -1410,7 +1396,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 36, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1425,7 +1411,7 @@ "{'z': -2.53}" ] }, - "execution_count": 35, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -1438,12 +1424,41 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "There is a handy PyMC function to compute the log probability of a random variable and a given point." + "This is nothing else and evaluating the log probability of a multivariate normal distribution." ] }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-2.5310242469692907" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "scipy.stats.multivariate_normal.logpdf(\n", + " x=np.array([0, 0]), mean=np.array([0, 0]), cov=np.array([[1, 0], [0, 2**2]])\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Remark:** There is a handy PyMC function to compute the log probability of a random variable and a given point." + ] + }, + { + "cell_type": "code", + "execution_count": 38, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1458,7 +1473,7 @@ "array(-2.53102425)" ] }, - "execution_count": 36, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } @@ -1468,9 +1483,16 @@ "pm.logp(rv=z, value=point[\"z\"]).sum().eval()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What about other types of Ops? Let's look into an example:" + ] + }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 39, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1488,8 +1510,6 @@ } ], "source": [ - "# TODO: What is the main takeaway from this example?\n", - "# What about other types of Ops?\n", "try:\n", " y = at.cumsum(z)\n", " pm.logp(y, [1, 1])\n", @@ -1497,13 +1517,20 @@ " print(err)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are not always implemented." + ] + }, { "cell_type": "markdown", "metadata": { "id": "yxG5UHslGDEv" }, "source": [ - "Note: A similar dispatch strategy is used for `logcdf` and `get_moment`" + "**Remark:** A similar dispatch strategy is used for `logcdf` and `get_moment`" ] }, { @@ -1512,15 +1539,12 @@ "id": "WdZcUfvLUkwK" }, "source": [ - "## What is the deal with those value variables in the model?\n", - "\n", - "* RVs for random draws\n", - "* Value variables for logprob evaluations" + "## What is the deal with those value variables in the model?" ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 55, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1532,12 +1556,12 @@ { "data": { "text/plain": [ - "(,\n", - " array([-0.10559974, -0.46853318, 0.34606917, -0.70371377, -1.45923352]),\n", + "(,\n", + " array([-0.68915224, -1.07111034, -1.02965986, -0.13658924, -0.7458102 ]),\n", " -1.7001885332046727)" ] }, - "execution_count": 38, + "execution_count": 55, "metadata": {}, "output_type": "execute_result" } @@ -1550,26 +1574,34 @@ "(\n", " scipy.stats.norm(0, 1), # Equivalent to rv = pm.Normal(\"rv\", 0, 1)\n", " rv.rvs(5), # Equivalent to rv_draw = pm.draw(rv, 5)\n", - " rv.logpdf(1.25), # Equivalent to rv_logp = pm.logp(rv, .125)\n", + " rv.logpdf(1.25), # Equivalent to rv_logp = pm.logp(rv, 1.25)\n", ")" ] }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 189, "metadata": { "id": "dejQBR2FUnM3" }, "outputs": [], "source": [ "with pm.Model() as model_2:\n", - " sigma = pm.HalfNormal(name=\"sigma\")\n", - " x = pm.Normal(name=\"x\", mu=0, sigma=sigma)" + " mu = pm.Normal(name=\"mu\", mu=0, sigma=2)\n", + " sigma = pm.HalfNormal(name=\"sigma\", sigma=3)\n", + " x = pm.Normal(name=\"x\", mu=mu, sigma=sigma)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Each model RV is related to a \"value variable\":" ] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 190, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1581,94 +1613,61 @@ { "data": { "text/plain": [ - "{sigma: sigma_log__, x: x}" + "{mu: mu, sigma: sigma_log__, x: x}" ] }, - "execution_count": 40, + "execution_count": 190, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# Each model RV is related to a \"value variable\"\n", "model_2.rvs_to_values" ] }, { - "cell_type": "code", - "execution_count": 41, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "xsqHFQ0srsX6", - "outputId": "adfc9a9d-c411-4551-f534-c944bb9e1610" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[sigma_log__, x]" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], + "cell_type": "markdown", + "metadata": {}, "source": [ - "model_2.value_vars" + "Observe that for sigma the associated value is in the *log* scale as in practice we require unbounded values." ] }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 191, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "i3ME6Y41rsX9", - "outputId": "4f075f4f-29d6-4516-ec7a-1bfffa5998ea" + "id": "xsqHFQ0srsX6", + "outputId": "adfc9a9d-c411-4551-f534-c944bb9e1610" }, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "sigma_log__ [id A]\n" - ] - }, { "data": { "text/plain": [ - "" + "[mu, sigma_log__, x]" ] }, - "execution_count": 42, + "execution_count": 191, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# These just an input variable (constants inputs if observed)\n", - "# used in the logp graph\n", - "aesara.dprint(model_2.value_vars[0])" + "model_2.value_vars" ] }, { - "cell_type": "code", - "execution_count": 43, - "metadata": { - "id": "JvGOpA3_U0C1" - }, - "outputs": [], + "cell_type": "markdown", + "metadata": {}, "source": [ - "logp_graph = at.stack(model_2.logpt(sum=False))" + "Now that we know how to extract the model variables, we can compute the element-wise log-probability of the model for specific values." ] }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 192, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1680,239 +1679,96 @@ { "data": { "text/plain": [ - "array([-10.22579135, 9.08106147])" + "array([ -1.61208571, -11.32440364, 9.08106147])" ] }, - "execution_count": 44, + "execution_count": 192, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "sigma_value = model_2.rvs_to_values[sigma]\n", + "# extract values as aesara.tensor.var.TensorVariable\n", + "mu_value = model_2.rvs_to_values[mu]\n", + "sigma_log_value = model_2.rvs_to_values[sigma]\n", "x_value = model_2.rvs_to_values[x]\n", - "logp_graph.eval({sigma_value: -10, x_value:0})" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "wFAUqf0qU50W", - "outputId": "3480b833-f2c7-43a3-d87f-b2149f67351f" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[array(-10.22579135), array(9.08106147)]" - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# model compile_logp is a helpers that creates a compiled aesara function\n", - "# of the model logp, which takes a dictionary of {value variable name : value} as inputs\n", - "model_2.compile_logp(sum=False)({\"sigma_log__\": -10, \"x\": 0})" + "# element-wise log-probability of the model (we do not take te sum)\n", + "logp_graph = at.stack(model_2.logpt(sum=False))\n", + "# evaluate by passing concrete values\n", + "logp_graph.eval({mu_value: 0, sigma_log_value: -10, x_value:0})" ] }, { "cell_type": "markdown", - "metadata": { - "id": "EHH1hP0uzaWG" - }, - "source": [ - "## Some useful Model methods to know about" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": { - "id": "MsSFt_xDzYn2" - }, - "outputs": [], - "source": [ - "with pm.Model() as m:\n", - " mu = pm.Normal(\"mu\", initval=\"prior\")\n", - " sigma = pm.HalfNormal(\"sigma\", size=3, initval=[1, 2, 3])\n", - " y = pm.Normal(\"y\", mu, sigma, observed=[1, 1, 1])" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "1JX8cFt8z2b1", - "outputId": "a87d5d8c-ffed-43cf-fbd2-1ba885911a04" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'mu': array(0.44339106),\n", - " 'sigma_log__': array([0. , 0.69314718, 1.09861229])}" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], + "metadata": {}, "source": [ - "# initial points\n", - "m.initial_point(seed=314)" + "This equivalent to:" ] }, { "cell_type": "code", - "execution_count": 48, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "VdU6Eev9z-2F", - "outputId": "787ee742-6e73-44ee-e3e9-5010607405f1" - }, + "execution_count": 196, + "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "[array(-0.91893853), array([-0.72579135, -0.72579135, -0.72579135])]" - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "mu_value -> -1.612085713764618\n", + "sigma_log_value -> -11.324403641427345 \n", + "x_value -> -10.918938533204672\n", + "\n" + ] } ], "source": [ - "# logp\n", - "logp_graph = m.logpt(vars=[mu, sigma], jacobian=False, sum=False)\n", - "logp_fn = m.compile_fn(logp_graph)\n", - "logp_fn({'mu': np.array(0.), 'sigma_log__': np.array([0., 0., 0.])})" + "print(f\"\"\"\n", + "mu_value -> {scipy.stats.norm.logpdf(x=0, loc=0, scale=2)}\n", + "sigma_log_value -> {- 10 + scipy.stats.halfnorm.logpdf(x=np.exp(-10), loc=0, scale=3)} \n", + "x_value -> {scipy.stats.norm.logpdf(x=0, loc=0, scale=np.exp(10))}\n", + "\"\"\")\n" ] }, { - "cell_type": "code", - "execution_count": 49, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "0wUIYHMd0e3E", - "outputId": "1afd7331-8ded-4338-f6ea-d5449a0b1ae8" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[array(-0.91893853), array([-0.72579135, -0.72579135, -0.72579135])]" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], + "cell_type": "markdown", + "metadata": {}, "source": [ - "# logp\n", - "logp_fn = m.compile_logp(vars=[mu, sigma], jacobian=False, sum=False)\n", - "logp_fn({'mu': np.array(0.), 'sigma_log__': np.array([0., 0., 0.])})" + "The method `compile_logp` is a helper that creates a compiled aesara function of the model `logp`, which takes a dictionary of `{value variable name : value}` as inputs:" ] }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 195, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "fahwjKyu0YfR", - "outputId": "80ec9022-3c86-4110-e35e-70228aa16f88" + "id": "wFAUqf0qU50W", + "outputId": "3480b833-f2c7-43a3-d87f-b2149f67351f" }, "outputs": [ { "data": { "text/plain": [ - "array([3.])" + "[array(-1.61208571), array(-11.32440364), array(9.08106147)]" ] }, - "execution_count": 50, + "execution_count": 195, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# dlogp\n", - "# m.dlogpt(...)\n", - "dlogp_fn = m.compile_dlogp(vars=[mu])\n", - "dlogp_fn({'mu': np.array(0.), 'sigma_log__': np.array([0., 0., 0.])})" + "model_2.compile_logp(sum=False)({\"mu\": 0, \"sigma_log__\": -10, \"x\": 0})" ] }, { "cell_type": "code", - "execution_count": 51, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "gW9DMRK20uyF", - "outputId": "1532a7e7-3319-4e65-f834-f1335ab1147f" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[4.]])" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# d2logp\n", - "d2logp_fn = m.compile_d2logp(vars=[mu])\n", - "d2logp_fn({'mu': np.array(0.), 'sigma_log__': np.array([0., 0., 0.])})" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "I_Ph4o7ZW_XD" - }, - "source": [ - "## PyMC goes back and forth between the random and log-probability graphs to do cool stuff:\n", - "\n", - "1. Prior predictive\n", - "1. Optimization (MAP, find_constrained_prior)\n", - "1. Sampling (Metropolis, NUTS, SMC)\n", - "1. Posterior predictive" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "jA0IM2EYIF_v" - }, - "source": [ - "## Integration with PyMC\n", - "\n", - "* PyMC Distributions return **RandomVariables** that Aeppl can always parse to obtain a logp graph.\n", - "* PyMC SymbolicDistributions return **arbitrary Aesara Variables** that we know Aeppl can always parse to obtain a logp graph\n", - " * See [Censored distributions](https://github.com/pymc-devs/pymc/blob/1005d20b3c12d9b9a424c069f6a0f9962d73c41d/pymc/distributions/censored.py) for an example where we return `at.clip(RandomVariable, lower, upper)`" - ] + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -1937,8 +1793,12 @@ "name": "PyMC intro.ipynb", "provenance": [] }, + "interpreter": { + "hash": "322221ae0b6adf1db1274c5f417c2cb5b37d259e740acb22a87dc0305ae08c77" + }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3.9.12 ('pymc-dev-py39')", + "language": "python", "name": "python3" }, "language_info": { From 28d7bca7304fd5cfc334a91dab12d51ddb6a417e Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Fri, 3 Jun 2022 15:55:06 +0200 Subject: [PATCH 11/30] fix suggestions part 1 --- docs/pymc_aesara.ipynb | 397 ++++++++++++++++++++--------------------- 1 file changed, 198 insertions(+), 199 deletions(-) diff --git a/docs/pymc_aesara.ipynb b/docs/pymc_aesara.ipynb index cbfeb64652..e7fdcc21e8 100644 --- a/docs/pymc_aesara.ipynb +++ b/docs/pymc_aesara.ipynb @@ -36,12 +36,20 @@ "outputId": "b24046f8-0b21-478f-c376-29924fa2e243" }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/juanitorduz/opt/anaconda3/envs/pymc-dev-py39/lib/python3.9/site-packages/pkg_resources/__init__.py:123: PkgResourcesDeprecationWarning: main is an invalid version and will not be supported in a future release\n", + " warnings.warn(\n" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ "\n", - "Aesara version: 2.5.1\n", + "Aesara version: 2.6.6\n", "PyMC version: 4.0.0b6\n", "\n" ] @@ -187,9 +195,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "Elemwise{log,no_inplace} [id A] 'log(x + y)' \n", - " |Elemwise{add,no_inplace} [id B] 'x + y' \n", - " |InplaceDimShuffle{x} [id C] '' \n", + "Elemwise{log,no_inplace} [id A] 'log(x + y)'\n", + " |Elemwise{add,no_inplace} [id B] 'x + y'\n", + " |InplaceDimShuffle{x} [id C]\n", " | |x [id D]\n", " |y [id E]\n" ] @@ -197,7 +205,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -226,32 +234,9 @@ "id": "-XtR1jZS13_6", "outputId": "e101c9f0-7640-4fd0-aa6b-f8ba2e226886" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Elemwise{Composite{log((i0 + i1))}} [id A] 'log(x + y)' 1\n", - " |InplaceDimShuffle{x} [id B] '' 0\n", - " | |x [id C]\n", - " |y [id D]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "f = aesara.function(inputs=[x, y], outputs=w)\n", - "\n", - "aesara.dprint(f)" + "f = aesara.function(inputs=[x, y], outputs=w)" ] }, { @@ -365,7 +350,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Elemwise{true_div,no_inplace} [id A] 'a / b' \n", + "Elemwise{true_div,no_inplace} [id A] 'a / b'\n", " |a [id B]\n", " |b [id C]\n" ] @@ -373,7 +358,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 10, @@ -407,9 +392,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "Elemwise{mul,no_inplace} [id A] 'b * c' \n", + "Elemwise{mul,no_inplace} [id A] 'b * c'\n", " |b [id B]\n", - " |Elemwise{true_div,no_inplace} [id C] 'a / b' \n", + " |Elemwise{true_div,no_inplace} [id C] 'a / b'\n", " |a [id D]\n", " |b [id B]\n" ] @@ -417,7 +402,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -448,14 +433,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "DeepCopyOp [id A] 'a' 0\n", + "DeepCopyOp [id A] 'a' 0\n", " |a [id B]\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 12, @@ -469,33 +454,6 @@ "aesara.dprint(g)" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can specially an edge case when `b=0`. We can confirm that the graph gets simplified before running the computation." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array(1.)" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "g(a=1, b=0)" - ] - }, { "cell_type": "markdown", "metadata": { @@ -525,7 +483,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -564,12 +522,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The following code snippet helps us understand these concepts by going through the computational graph of `w`." + "The following code snippet helps us understand these concepts by going through the computational graph of `w`. The actual code is not as important here, the focus is on the outputs." ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -632,7 +590,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -645,9 +603,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "Elemwise{log,no_inplace} [id A] 'log(x + y)' \n", - " |Elemwise{add,no_inplace} [id B] 'x + y' \n", - " |InplaceDimShuffle{x} [id C] '' \n", + "Elemwise{log,no_inplace} [id A] 'log(x + y)'\n", + " |Elemwise{add,no_inplace} [id B] 'x + y'\n", + " |InplaceDimShuffle{x} [id C]\n", " | |x [id D]\n", " |y [id E]\n" ] @@ -655,10 +613,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 16, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -675,12 +633,12 @@ "source": [ "### Graph manipulation 101\n", "\n", - "One of the most interesting features of `aesara` is the ability to manipulate the computational graph. Here we continue with the example above in order to illustrate the main idea around this technique." + "One of the most interesting features of `aesara` is the ability to manipulate the computational graph, something that is not possible with TensorFlow or PyTorch. Here we continue with the example above in order to illustrate the main idea around this technique." ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -695,7 +653,7 @@ "[x, y]" ] }, - "execution_count": 17, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -714,7 +672,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -732,16 +690,16 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Elemwise{log,no_inplace} [id A] 'log(x + y)' \n", - " |Elemwise{add,no_inplace} [id B] 'x + y' \n", - " |InplaceDimShuffle{x} [id C] '' \n", + "Elemwise{log,no_inplace} [id A] 'log(x + y)'\n", + " |Elemwise{add,no_inplace} [id B] 'x + y'\n", + " |InplaceDimShuffle{x} [id C]\n", " | |x [id D]\n", " |y [id E]\n" ] @@ -749,10 +707,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 19, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -770,7 +728,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 19, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -783,10 +741,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "Elemwise{log,no_inplace} [id A] 'exp(log(x + y))' \n", - " |Elemwise{exp,no_inplace} [id B] 'exp(x + y)' \n", - " |Elemwise{add,no_inplace} [id C] 'x + y' \n", - " |InplaceDimShuffle{x} [id D] '' \n", + "Elemwise{log,no_inplace} [id A] 'exp(log(x + y))'\n", + " |Elemwise{exp,no_inplace} [id B] 'exp(x + y)'\n", + " |Elemwise{add,no_inplace} [id C] 'x + y'\n", + " |InplaceDimShuffle{x} [id D]\n", " | |x [id E]\n", " |y [id F]\n" ] @@ -794,10 +752,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 20, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -817,7 +775,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 20, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -832,7 +790,7 @@ "array([1. , 2.71828183])" ] }, - "execution_count": 21, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -859,7 +817,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 21, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -872,8 +830,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "Elemwise{add,no_inplace} [id A] 'x + y' 1\n", - " |InplaceDimShuffle{x} [id B] '' 0\n", + "Elemwise{add,no_inplace} [id A] 'x + y' 1\n", + " |InplaceDimShuffle{x} [id B] 0\n", " | |x [id C]\n", " |y [id D]\n" ] @@ -881,10 +839,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 22, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -897,7 +855,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 22, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -912,7 +870,7 @@ "array([1. , 2.71828183])" ] }, - "execution_count": 23, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -958,7 +916,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 23, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -969,7 +927,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -999,15 +957,15 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] '' \n", - " |RandomGeneratorSharedVariable() [id B]\n", + "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1017,10 +975,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 25, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -1039,23 +997,23 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: 0.808637964810379\n", - "Sample 1: 0.808637964810379\n", - "Sample 2: 0.808637964810379\n", - "Sample 3: 0.808637964810379\n", - "Sample 4: 0.808637964810379\n", - "Sample 5: 0.808637964810379\n", - "Sample 6: 0.808637964810379\n", - "Sample 7: 0.808637964810379\n", - "Sample 8: 0.808637964810379\n", - "Sample 9: 0.808637964810379\n" + "Sample 0: -0.2592863834055095\n", + "Sample 1: -0.2592863834055095\n", + "Sample 2: -0.2592863834055095\n", + "Sample 3: -0.2592863834055095\n", + "Sample 4: -0.2592863834055095\n", + "Sample 5: -0.2592863834055095\n", + "Sample 6: -0.2592863834055095\n", + "Sample 7: -0.2592863834055095\n", + "Sample 8: -0.2592863834055095\n", + "Sample 9: -0.2592863834055095\n" ] } ], @@ -1073,12 +1031,12 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 26, "metadata": {}, "outputs": [ { "data": { - "image/png": "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uAFmHT/A8nOAOe2KJyIiBpc7miMiopakEBERtSSFiIioJSlERERtXPfRHBHPlzukYyRSU4iIiFqSQkRE1JIUIiKilqQQERG1JIWIiKglKURERC1JISIiakkKERFRS1KIiIha7miOGKLRvmM4YixJTSEiImptSwqSzpO0uvSy1n/ehyRZ0uSGaadJWiLpXkmHtCuuiIgYWDtrChcAh/afKGkacDDwYMO0vYFjgX3KOl+TNKmNsUVERBNtSwq2bwDWNJn1ZeDDgBumHQVcZnud7QeAJcD+7YotIiKa6+g5BUlHAg/Z/mW/WbsCyxrGl5dpERHRQR27+kjSVsDpwJubzW4yzU2mIWkWMAtgt912G7X4IiKiszWFFwO7A7+UtBSYCtwm6YVUNYNpDctOBVY024jtc2zPsD2jp6enzSFHREwsHUsKtu+0vZPt6banUyWCV9v+DTAfOFbS5pJ2B/YEbu5UbBERUWnnJamXAv8JvFTSckknDrSs7UXAPOBu4IfAybafbldsERHRXNvOKdg+bpD50/uNzwHmtCueiIgYXO5ojoiIWpJCRETUkhQiIqKWpBAREbU8Ojs2annMdcTQpKYQERG1JIWIiKglKURERC1JISIiakkKERFRS1KIiIhakkJERNSSFCIiopakEBERtSSFiIioJSlEREQtSSEiImrt7I7zPEmrJd3VMO3zku6RdIek70navmHeaZKWSLpX0iHtiisiIgbWzprCBcCh/aZdC+xrez/gV8BpAJL2Bo4F9inrfE3SpDbGFhERTbQtKdi+AVjTb9o1tteX0RuBqWX4KOAy2+tsPwAsAfZvV2wREdFcN88pvAu4ugzvCixrmLe8THseSbMkLZS0sLe3t80hRkRMLF1JCpJOB9YDF/dNarKYm61r+xzbM2zP6OnpaVeIERETUsd7XpM0EzgCONB234F/OTCtYbGpwIpOxxYRMdF1tKYg6VDgVOBI279vmDUfOFbS5pJ2B/YEbu5kbBER0caagqRLgQOAyZKWA2dQXW20OXCtJIAbbZ9ke5GkecDdVM1KJ9t+ul2xRUREc21LCraPazL53A0sPweY0654IiJicLmjOSIiakkKERFRS1KIiIhakkJERNSSFCIiopakEBERtSSFiIioJSlEREQtSSEiImpJChERUUtSiIiIWpJCRETUkhQiIqKWpBAREbUkhYiI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", + "image/png": "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", "text/plain": [ "
" ] @@ -1113,15 +1071,15 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] '' \n", - " |RandomGeneratorSharedVariable() [id B]\n", + "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1131,10 +1089,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 28, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -1155,7 +1113,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 28, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1170,7 +1128,7 @@ "[z]" ] }, - "execution_count": 29, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -1181,7 +1139,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 29, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1194,8 +1152,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z' \n", - " |RandomStateSharedVariable() [id B]\n", + "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z'\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{(1,) of 2} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{(2,) of 0} [id E]\n", @@ -1205,10 +1163,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 30, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -1226,23 +1184,23 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [ 0.35173203 -0.85175519]\n", - "Sample 1: [ 0.35173203 -0.85175519]\n", - "Sample 2: [ 0.35173203 -0.85175519]\n", - "Sample 3: [ 0.35173203 -0.85175519]\n", - "Sample 4: [ 0.35173203 -0.85175519]\n", - "Sample 5: [ 0.35173203 -0.85175519]\n", - "Sample 6: [ 0.35173203 -0.85175519]\n", - "Sample 7: [ 0.35173203 -0.85175519]\n", - "Sample 8: [ 0.35173203 -0.85175519]\n", - "Sample 9: [ 0.35173203 -0.85175519]\n" + "Sample 0: [-0.24067852 -1.86716357]\n", + "Sample 1: [-0.24067852 -1.86716357]\n", + "Sample 2: [-0.24067852 -1.86716357]\n", + "Sample 3: [-0.24067852 -1.86716357]\n", + "Sample 4: [-0.24067852 -1.86716357]\n", + "Sample 5: [-0.24067852 -1.86716357]\n", + "Sample 6: [-0.24067852 -1.86716357]\n", + "Sample 7: [-0.24067852 -1.86716357]\n", + "Sample 8: [-0.24067852 -1.86716357]\n", + "Sample 9: [-0.24067852 -1.86716357]\n" ] } ], @@ -1260,23 +1218,23 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [ 0.35173203 -0.85175519]\n", - "Sample 1: [-1.31692252 -2.22210956]\n", - "Sample 2: [-0.82131747 3.57379473]\n", - "Sample 3: [ 0.38016371 -5.53981978]\n", - "Sample 4: [-0.27771814 -2.37820302]\n", - "Sample 5: [ 1.15546367 -0.91836788]\n", - "Sample 6: [ 0.51942266 -1.81911437]\n", - "Sample 7: [-0.59627107 -1.6637828 ]\n", - "Sample 8: [-1.32686501 1.3571256 ]\n", - "Sample 9: [ 0.94574989 -0.87620556]\n" + "Sample 0: [0.74610705 3.82662706]\n", + "Sample 1: [0.44144812 0.35898857]\n", + "Sample 2: [ 0.45211831 -1.23909657]\n", + "Sample 3: [1.19009041 0.62220927]\n", + "Sample 4: [ 0.22510789 -0.60343871]\n", + "Sample 5: [-1.05064187 3.94264241]\n", + "Sample 6: [-1.61773969 -2.54937615]\n", + "Sample 7: [-2.45045255 3.25919049]\n", + "Sample 8: [0.61415988 1.74492136]\n", + "Sample 9: [-0.76604446 -2.02313194]\n" ] } ], @@ -1287,12 +1245,12 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 32, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1328,7 +1286,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 33, "metadata": {}, "outputs": [ { @@ -1341,10 +1299,10 @@ " $$" ], "text/plain": [ - "" + "" ] }, - "execution_count": 34, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -1362,7 +1320,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 34, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1377,7 +1335,7 @@ "{'z': array([0., 0.])}" ] }, - "execution_count": 35, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -1396,7 +1354,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 35, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1411,7 +1369,7 @@ "{'z': -2.53}" ] }, - "execution_count": 36, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -1424,12 +1382,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This is nothing else and evaluating the log probability of a multivariate normal distribution." + "This is nothing else than evaluating the log probability of a multivariate normal distribution." ] }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 36, "metadata": {}, "outputs": [ { @@ -1438,7 +1396,7 @@ "-2.5310242469692907" ] }, - "execution_count": 54, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -1458,7 +1416,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 37, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1473,7 +1431,7 @@ "array(-2.53102425)" ] }, - "execution_count": 38, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -1492,7 +1450,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 38, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1500,15 +1458,7 @@ "id": "oN1FcbE1V2it", "outputId": "a0cd9e45-2441-42e1-affe-18600b648d61" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Logprob method not implemented for CumOp{None, add}\n" - ] - } - ], + "outputs": [], "source": [ "try:\n", " y = at.cumsum(z)\n", @@ -1542,9 +1492,16 @@ "## What is the deal with those value variables in the model?" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "RV and value variables can be observed in these `scipy` operations:" + ] + }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 39, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1556,31 +1513,73 @@ { "data": { "text/plain": [ - "(,\n", - " array([-0.68915224, -1.07111034, -1.02965986, -0.13658924, -0.7458102 ]),\n", - " -1.7001885332046727)" + "" ] }, - "execution_count": 55, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "import scipy.stats\n", "rv = scipy.stats.norm(0, 1)\n", "\n", - "# RV and value variables can be observed in these scipy operations\n", - "(\n", - " scipy.stats.norm(0, 1), # Equivalent to rv = pm.Normal(\"rv\", 0, 1)\n", - " rv.rvs(5), # Equivalent to rv_draw = pm.draw(rv, 5)\n", - " rv.logpdf(1.25), # Equivalent to rv_logp = pm.logp(rv, 1.25)\n", - ")" + "# Equivalent to rv = pm.Normal(\"rv\", 0, 1)\n", + "scipy.stats.norm(0, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1.24403501, 0.57241126, 0.69223769])" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + " # Equivalent to rv_draw = pm.draw(rv, 3)\n", + "rv.rvs(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-1.7001885332046727" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Equivalent to rv_logp = pm.logp(rv, 1.25)\n", + "rv.logpdf(1.25)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's look at how these value variables behave in a simple model." ] }, { "cell_type": "code", - "execution_count": 189, + "execution_count": 42, "metadata": { "id": "dejQBR2FUnM3" }, @@ -1601,7 +1600,7 @@ }, { "cell_type": "code", - "execution_count": 190, + "execution_count": 43, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1616,7 +1615,7 @@ "{mu: mu, sigma: sigma_log__, x: x}" ] }, - "execution_count": 190, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -1634,7 +1633,7 @@ }, { "cell_type": "code", - "execution_count": 191, + "execution_count": 44, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1649,7 +1648,7 @@ "[mu, sigma_log__, x]" ] }, - "execution_count": 191, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } @@ -1667,7 +1666,7 @@ }, { "cell_type": "code", - "execution_count": 192, + "execution_count": 45, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1682,7 +1681,7 @@ "array([ -1.61208571, -11.32440364, 9.08106147])" ] }, - "execution_count": 192, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } @@ -1707,7 +1706,7 @@ }, { "cell_type": "code", - "execution_count": 196, + "execution_count": 46, "metadata": {}, "outputs": [ { @@ -1739,7 +1738,7 @@ }, { "cell_type": "code", - "execution_count": 195, + "execution_count": 47, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1754,7 +1753,7 @@ "[array(-1.61208571), array(-11.32440364), array(9.08106147)]" ] }, - "execution_count": 195, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } From 913b822f68cd849e48c7cbb6c8d9bb373721bc40 Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Fri, 3 Jun 2022 16:06:42 +0200 Subject: [PATCH 12/30] fix suggestions part 2 --- docs/pymc_aesara.ipynb | 191 +++++++++++++++++------------------------ 1 file changed, 78 insertions(+), 113 deletions(-) diff --git a/docs/pymc_aesara.ipynb b/docs/pymc_aesara.ipynb index e7fdcc21e8..a309a3f819 100644 --- a/docs/pymc_aesara.ipynb +++ b/docs/pymc_aesara.ipynb @@ -36,14 +36,6 @@ "outputId": "b24046f8-0b21-478f-c376-29924fa2e243" }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/juanitorduz/opt/anaconda3/envs/pymc-dev-py39/lib/python3.9/site-packages/pkg_resources/__init__.py:123: PkgResourcesDeprecationWarning: main is an invalid version and will not be supported in a future release\n", - " warnings.warn(\n" - ] - }, { "name": "stdout", "output_type": "stream", @@ -53,18 +45,24 @@ "PyMC version: 4.0.0b6\n", "\n" ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/juanitorduz/opt/anaconda3/envs/pymc-dev-py39/lib/python3.9/site-packages/pkg_resources/__init__.py:123: PkgResourcesDeprecationWarning: main is an invalid version and will not be supported in a future release\n", + " warnings.warn(\n" + ] } ], "source": [ - "import arviz as az\n", + "import aesara\n", + "import aesara.tensor as at\n", + "import pymc as pm\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import scipy.stats\n", "\n", - "import aesara\n", - "import aesara.tensor as at\n", - "\n", - "import pymc as pm\n", "\n", "print(f\"\"\"\n", "Aesara version: {aesara.__version__}\n", @@ -205,7 +203,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -358,7 +356,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 10, @@ -402,7 +400,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -440,7 +438,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 12, @@ -613,7 +611,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 15, @@ -707,7 +705,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 18, @@ -752,7 +750,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 19, @@ -839,7 +837,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 21, @@ -927,7 +925,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -965,7 +963,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -975,7 +973,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 24, @@ -1004,16 +1002,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: -0.2592863834055095\n", - "Sample 1: -0.2592863834055095\n", - "Sample 2: -0.2592863834055095\n", - "Sample 3: -0.2592863834055095\n", - "Sample 4: -0.2592863834055095\n", - "Sample 5: -0.2592863834055095\n", - "Sample 6: -0.2592863834055095\n", - "Sample 7: -0.2592863834055095\n", - "Sample 8: -0.2592863834055095\n", - "Sample 9: -0.2592863834055095\n" + "Sample 0: 0.008986763129471461\n", + "Sample 1: 0.008986763129471461\n", + "Sample 2: 0.008986763129471461\n", + "Sample 3: 0.008986763129471461\n", + "Sample 4: 0.008986763129471461\n", + "Sample 5: 0.008986763129471461\n", + "Sample 6: 0.008986763129471461\n", + "Sample 7: 0.008986763129471461\n", + "Sample 8: 0.008986763129471461\n", + "Sample 9: 0.008986763129471461\n" ] } ], @@ -1036,7 +1034,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1079,7 +1077,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1089,7 +1087,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 27, @@ -1153,7 +1151,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{(1,) of 2} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{(2,) of 0} [id E]\n", @@ -1163,7 +1161,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 29, @@ -1191,16 +1189,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [-0.24067852 -1.86716357]\n", - "Sample 1: [-0.24067852 -1.86716357]\n", - "Sample 2: [-0.24067852 -1.86716357]\n", - "Sample 3: [-0.24067852 -1.86716357]\n", - "Sample 4: [-0.24067852 -1.86716357]\n", - "Sample 5: [-0.24067852 -1.86716357]\n", - "Sample 6: [-0.24067852 -1.86716357]\n", - "Sample 7: [-0.24067852 -1.86716357]\n", - "Sample 8: [-0.24067852 -1.86716357]\n", - "Sample 9: [-0.24067852 -1.86716357]\n" + "Sample 0: [2.0794566 2.98909647]\n", + "Sample 1: [2.0794566 2.98909647]\n", + "Sample 2: [2.0794566 2.98909647]\n", + "Sample 3: [2.0794566 2.98909647]\n", + "Sample 4: [2.0794566 2.98909647]\n", + "Sample 5: [2.0794566 2.98909647]\n", + "Sample 6: [2.0794566 2.98909647]\n", + "Sample 7: [2.0794566 2.98909647]\n", + "Sample 8: [2.0794566 2.98909647]\n", + "Sample 9: [2.0794566 2.98909647]\n" ] } ], @@ -1225,16 +1223,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [0.74610705 3.82662706]\n", - "Sample 1: [0.44144812 0.35898857]\n", - "Sample 2: [ 0.45211831 -1.23909657]\n", - "Sample 3: [1.19009041 0.62220927]\n", - "Sample 4: [ 0.22510789 -0.60343871]\n", - "Sample 5: [-1.05064187 3.94264241]\n", - "Sample 6: [-1.61773969 -2.54937615]\n", - "Sample 7: [-2.45045255 3.25919049]\n", - "Sample 8: [0.61415988 1.74492136]\n", - "Sample 9: [-0.76604446 -2.02313194]\n" + "Sample 0: [ 0.60775572 -2.76146171]\n", + "Sample 1: [0.27703455 0.72307788]\n", + "Sample 2: [ 0.76206083 -0.95175108]\n", + "Sample 3: [-0.25764557 2.52677943]\n", + "Sample 4: [0.36130515 0.90812824]\n", + "Sample 5: [-0.28749055 0.93701648]\n", + "Sample 6: [-0.63578891 0.53510859]\n", + "Sample 7: [-0.79113555 0.51242587]\n", + "Sample 8: [-1.54983484 -1.24417963]\n", + "Sample 9: [-1.31482848 0.48791946]\n" ] } ], @@ -1250,7 +1248,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfAAAAHwCAYAAABZrD3mAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAklklEQVR4nO3deZRld1nu8eepucd0mgQzdEMCgTDJEg0BrkxCkIAQvHq9DojEqRc4wVpEEBAZBHFaGC961VwJoAQiMigyKIkxYtAEQkgCoRPIwoQknaGH9DzUcN77x9lNqivVVdU5b9Wut+r7WavWqqqzz7vf39777OfsfXbVdkQIAADU0td2AwAA4NgR4AAAFESAAwBQEAEOAEBBBDgAAAUR4AAAFESAY0HZfpvtDyXXtO33277f9pcyay92tm+zfc4Mj3/O9ivnad7zVrsS22H7jDlO+93t3/YjbO+13Z/Ux1/afkvz/XNt35lRt6n3LNu3ZNVDDgJ8mbD9TNv/aXuX7R22v2j7qW33leSZkl4gaUNEnN12M22Z7s1RRLwoIj44H/M7ltqzvdFYjiLiOxGxOiImZprO9vm2r5pDvVdFxO9m9Db1TUlE/EdEnJlRG3kG2m4A88/2WkmflvRqSR+VNCTpWZIOtdlXokdKui0i9k33oO2BiBhf4J6WLNuW5IjotN3LsVqq24Lt/tneCGDp4Qh8eXisJEXERyJiIiIORMTnI+JGSbL9aNtX2N5ue5vtS2yvO/zk5ujpN23faHuf7ffZ/p7mFOoe25fbPr6Z9rTm3fsm21ts3237dUdrzPbTmzMDO23fYPu5kx473/a3m3n8t+2XT/P8X5T015Ke0ZyOfPvh04e232D7Hknvtz1s+8Kmpy3N98NNjcPTv972fU3PP2r7xba/2ZyxeNMMY/gR21+1vdv2HbbfNsO0xzQv2x+w/c6pz5+m7rmS3iTpJ5vlcEPz+ytt/1Iz/p22nzTpOSfaPmD74baPt/1p21vd/Sji07Y3TJr2Stvvsv1FSfslPepw7ebxo25Dtv9W0iMk/VPT2+tnW/fTjO822xc02+Au239ne2TS479s+9Zm+X3K9imTHgvbv2r7W5K+9RDWwdm2/6vp827bf2Z76Gi9Tun7dNv/3mzDl0k6YdJjh18rA83PD9rebT9e0l/qge17ZzPtB2z/he3P2t4n6YembivNdG9q1sdtnvT6mbzuJs37qub7LzS/vqGZ509O3e5sP76psdP2TbbPm/TYB2z/ue3PNGO5xvaj57K8cIwigq8l/iVpraTtkj4o6UWSjp/y+BnqnoIelnSipC9IunDS47dJulrS90g6VdJ9kq6T9JTmOVdIemsz7WmSQtJHJK2S9L2Stko6p3n8bZI+1Hx/atPXi9V9M/mC5ucTm+fulnRmM+3Jkp54lPGdL+mqST8/V9K4pD9o+lsh6R3NGB7e1P9PSb87ZfrfkTQo6Zebnj8saY2kJ0o6KOlRR5n/c5tx9kl6sqR7Jf3oDNPOeV6SPiDpnVOef+eUdfOgZTvp8Ssl/VLz/cWS3jXpsV+V9M/N9w+T9OOSVjZ9/L2kf5hS5ztNfwNN75Nrz2UbOmfSz0dd90dZbrdJ+pKkUyStl7RZ0quax54naZuk72/m/15JX5j03JB0WfO8FQ9hHfyApKc34z6tmfdrp9Q/4yh9/5ek9zR9PVvSHj2w/Z/WPHdAM2zvmrJ9T9oudkn6wWb5jWjStjJpjIfn/RxJ+ybV/+66O8pr6IgxadJ21yyzW9V9wzjULP89k2p/QNIOSWc3Y7tE0qVt7weX4hdH4MtAROxW93PikPT/JG1tjlK+p3n81oi4LCIORcRWdV/0z5lS5r0RcW9E3CXpPyRdExFfjYhDkj6pbphP9vaI2BcRX5P0fkk/PU1rPyvpsxHx2YjoRMRlkq5Vd6cuSR1JT7K9IiLujoibjmHYHXXfVByKiAOSXi7pHRFxXzPGt0t6xaTpx9QNtzFJl6p7pPSnEbGnme9N6obzg0TElRHxtWYMN6r75mXq8pvsIc+rRx/WkevhZ5rfKSK2R8THI2J/ROyR9K5pxvCBiLgpIsab3r9rjtvQZLOt++n8n4jYEhE7JP2TpO9rfv9ySRdHxHXN9vhGdY9YT5v03HdHxI5mW5COYR1ExFci4upm3LdJ+qtZxiape5GapKdKekuzXL7Q9H00x7q9/2NEfLFZfgePMs3hef+7pM9I+t+z9T0HT5e0WtLvR8RoRFyh7kd0k7etT0TEl6L7ccUlemBdIREBvkxExOaIOD8iNkh6krpHMhdKUnMK9VLbd9neLelDmnSqr3HvpO8PTPPz6inT3zHp+9ub+U31SEk/0ZyG29mcHnympJOj+3n2T0p6laS7m9Nxj5v7iLV1yk7tlKaPo/W0PR74DPHwTn62MUqSbD/N9r81p593NT1PXX6TPeR59egKSSuafh+p7k71k5Jke6Xtv7J9e7MNfEHSOh95hfQdD6rYmOM2NNlR1/0Mz7ln0vf79cAyOmLdRsRedY/mT52h9zmvA9uPdfcjhXuasf3eLGM77BRJ98eR12bcPt2ED3F7P+r6aEw37+leh8fqFEl3xJHXQNyuI5f30dYVEhHgy1BE3Kzuaa7Dn4e+W92j8ydHxFp1j47c42w2Tvr+EZK2TDPNHZL+NiLWTfpaFRG/3/T5LxHxAnV36jere/ZgrqbeZm+LuqExW08PxYclfUrSxog4Tt3PLHtdfoftU/e09mEnzTDtjLcWbHa4H1X3SOlnJH26OdqWpNdJOlPS05pt4NnN7yePY6b6s21DU58747o/RkesW9ur1P1I4K459j6bv1B3+3tMM7Y3aW7r925Jxzf9HPaIo008w/Z+tN5nG9N08z68zR/LdjXVFkkbbU/Oj0foyOWNBUCALwO2H2f7dW4uSrK9Ud2d+NXNJGsk7ZW00/apkn4zYbZvaY7qnijp5yX93TTTfEjSS22/0Ha/7ZHmYpkN7l4kd16zAzrU9NfLVbYfkfTb7l64dYK6n39m/T36Gkk7IuKg7bPVDccs10t6se31tk+S9NoZpr1X0mlTdqxTfVjdI72XN98ftkbdo86dttdLeusx9jnbNnSvpEdN+vmo6/4Y5yt1x/Hztr/P3QsTf0/dj3huewi1prNG3c+n9zZHxa+ey5Mi4nZ1PxZ4u+0h28+U9NLppp1le79X0gbP8cK5KQ7P+1mSXqLutQ1Sd7v6seY1eoakX5zyvKnra7Jr1H0D8Hrbg+5efPhSdT+KwAIiwJeHPZKeJuma5orVqyV9Xd2jLqn7efD3q3tRzGckfSJhnv+u7oUu/yrpjyPi81MniIg7JL1M3SOareoelf2muttlX9PfFnUviHmOpF/poZ93qrszvVHS19S9CO+dMz5j7n5F0jts71H3jcFHk+pK0t9KukHdi7g+r+nfCB12eOe83fZ1000QEYd3vqdI+tykhy5U9wKvbepuH/98jH3Otg29W903UDttXzDLuj8mEfGvkt4i6ePqHvU+WtJPHWudGVyg7puyPeoeFc+0Dqb6GXVfezvUfVP0N0eZbqbt/Qp1P5O/x/a2Y5j3PZLub2peou5Ffzc3j/2JpFF1g/qDzeOTvU3SB5v1dcTn5hExKuk8dS+I3Sbp/0r6uUm1sUAc0cuZJeBIzYVD/y1pMJbg39sCwGLBETgAAAUR4AAAFMQpdAAACuIIHACAgghwAAAKKnU3siEPx4hWzT4hAABLwB7dvy0iTpzusVIBPqJVepqf33YbwOIw4/9raUHW3UWzxlXvbqfAg1weH5v23+9KnEIHAKAkAhwAgIIIcAAACiLAAQAoiAAHAKAgAhwAgIIIcAAACiLAAQAoiAAHAKAgAhwAgIIIcAAACiLAAQAoiAAHAKAgAhwAgIIIcAAACip1P3AsQ9wbev4ttvt4Z0nqp29oKKVO59DBlDrAYYvsFQcAAOaCAAcAoCACHACAgghwAAAKIsABACiIAAcAoCACHACAgghwAAAKIsABACiIAAcAoCACHACAgghwAAAKIsABACiIAAcAoCACHACAgghwAAAKIsABAChooO0GsMg46T1ddBZXnSyLaPn0rRhJaETq7N+fUidL1rhidCylTmd0NKWOBwZ7rhETEwmdaPG9rvCQcAQOAEBBBDgAAAW1GuC219n+mO2bbW+2/Yw2+wEAoIq2PwP/U0n/HBH/y/aQpJUt9wMAQAmtBbjttZKeLel8SYqIUUk5V4sAALDEtXkK/VGStkp6v+2v2v5r26ta7AcAgDLaDPABSd8v6S8i4imS9kn6rakT2d5k+1rb147p0EL3CADAotRmgN8p6c6IuKb5+WPqBvoRIuKiiDgrIs4a1PCCNggAwGLVWoBHxD2S7rB9ZvOr50v6Rlv9AABQSdtXof+6pEuaK9C/LennW+4HAIASWg3wiLhe0llt9gAAQEX8JzYAAAoiwAEAKIgABwCgIAIcAICCCHAAAApq+8/IsNhEJ6eOF9l7w6xxJekbHum9yETOmPpW5txDKEbHUupk8dBgTp2J/pQ6MTGRUGRxbcdo1yLbywIAgLkgwAEAKIgABwCgIAIcAICCCHAAAAoiwAEAKIgABwCgIAIcAICCCHAAAAoiwAEAKIgABwCgIAIcAICCCHAAAAoiwAEAKIgABwCgIAIcAICCCHAAAAoaaLuB0pz0/ic6OXUWEff3p9TpGxlOqaOkfrJ4aLDtFh6wYiSnzsFDKWVifDynTlI/WWJioucafcM56yqjF0mK8bGUOnhoOAIHAKAgAhwAgIIIcAAACiLAAQAoiAAHAKAgAhwAgIIIcAAACiLAAQAoiAAHAKAgAhwAgIIIcAAACiLAAQAoiAAHAKAgAhwAgIIIcAAACiLAAQAoaKDtBlrhpPct0cmpkyFpTO7vT6nTNzKcUscrV6TU6ezak1JH/UnLed3a3oskLWONjefU0aGUKvHIk1Pq9N2zI6WOBnN2k30Jy7mzY2fvjUjqW7s6pU5n996UOjE+llJnSe7bZ8AROAAABRHgAAAURIADAFAQAQ4AQEEEOAAABRHgAAAURIADAFAQAQ4AQEEEOAAABRHgAAAU1HqA2+63/VXbn267FwAAqmg9wCW9RtLmtpsAAKCSVgPc9gZJPyLpr9vsAwCAato+Ar9Q0uslHfXWL7Y32b7W9rVjSXc7AgCgutYC3PZLJN0XEV+ZabqIuCgizoqIswaVdPtEAACKa/MI/AclnWf7NkmXSnqe7Q+12A8AAGXk3Kn+IYiIN0p6oyTZfq6kCyLiZxdm5ovsZu1ZN6FPEONjOXU6gyl1tP9AShk/9rScOrv2ptTRSO9nkzorhxIakQ6duC6lTt/Yw1Lq9B8YT6nT15f0uppI2l8k9NN33JqERqTO3n0pdTyU8zqPiYmUOotu3z7PFk9yAACAOWvtCHyyiLhS0pUttwEAQBkcgQMAUBABDgBAQQQ4AAAFEeAAABREgAMAUBABDgBAQQQ4AAAFEeAAABREgAMAUBABDgBAQQQ4AAAFEeAAABREgAMAUBABDgBAQQQ4AAAFLYr7gS970em5hAcGExqR+tYel1Ini1esSKkTKVWk/U88OalS76LfbbdwhHuekbM7OeGGpN3SSRtTygzunUipM7R1f881+u7fndCJ1Nffn1JnYuv2lDp9K0ZS6sToWE6diYR1nrBfnw1H4AAAFESAAwBQEAEOAEBBBDgAAAUR4AAAFESAAwBQEAEOAEBBBDgAAAUR4AAAFESAAwBQEAEOAEBBBDgAAAUR4AAAFESAAwBQEAEOAEBBBDgAAAUNtN0AJA8M9lwj5Qb0kuLgoZQ67st5b9h55MkpdcbXDKfUGT2uP6XOgYf1vnxW3tdJ6ETa/qScddWfs+loz8acZRw5ZXTidaMpdSbWDPVepG9t7zUk9d15X0qd/uOPS6kTo2OLqk4KJx0fx9Ef4ggcAICCCHAAAAoiwAEAKIgABwCgIAIcAICCCHAAAAoiwAEAKIgABwCgIAIcAICCCHAAAAoiwAEAKIgABwCgIAIcAICCCHAAAAoiwAEAKIgABwCgoIG2Gygt64btCfqGhnLqrFqZUkcDOZvWDPeyPyb7Th1OqbP79Jx1Pr6i9xoHf2hf70UkHdqe0Iyk/j39KXX2b+ik1Bm8P6ef77wwZ/lsvPxQzzViTc52PLR+XUqdzh1bUurE6FhKnTSRsw3Ot8WTQAAAYM5aC3DbG23/m+3Ntm+y/Zq2egEAoJo2T6GPS3pdRFxne42kr9i+LCK+0WJPAACU0NoReETcHRHXNd/vkbRZ0qlt9QMAQCWL4iI226dJeoqka6Z5bJOkTZI0oqQLrAAAKK71i9hsr5b0cUmvjYjdUx+PiIsi4qyIOGtQOVdgAgBQXasBbntQ3fC+JCI+0WYvAABU0uZV6Jb0PkmbI+I9bfUBAEBFbR6B/6CkV0h6nu3rm68Xt9gPAABltHYRW0RcJcltzR8AgMpav4gNAAAcOwIcAICCCHAAAAoiwAEAKIgABwCgIAIcAICCCHAAAApaFDczWWgeGEypE+NjKXU8NNJ7jcGkMU1MpNTx0FBKnc5IzrhG1+S8Vx2+P6WMhp6xo+caO28/LqET6RXP+mJKnb//1lNS6jxi3a6UOrsP9f66kqQ9+3Pq3LNvdc81TrhxPKETaWhLJ6VO3/HrUupoLGdf2tm1J6VOyn4wcpbxTDgCBwCgIAIcAICCCHAAAAoiwAEAKIgABwCgIAIcAICCCHAAAAoiwAEAKIgABwCgIAIcAICCCHAAAAoiwAEAKIgABwCgIAIcAICCCHAAAAoiwAEAKGig7QbakHKzdkkeGEypE6M5N7PP0Hfc+pQ6nRPX5dQZ7k+pM74ypYz2/MDBlDqxfXXPNV7//M8kdCLtnRhJqfO0Dben1Mly1X2PbruFI6ze3nuN8RU5x1z7z3hYSp2V37g7pU7sOpBSR/1Jx6TR6blEVj5ohnjgCBwAgIIIcAAACiLAAQAoiAAHAKAgAhwAgIIIcAAACiLAAQAoiAAHAKAgAhwAgIIIcAAACiLAAQAoiAAHAKAgAhwAgIIIcAAACiLAAQAoiAAHAKAgAhwAgIIG2m6gFdFJKeOhkZQ6nQMHe67RN7I6oRNJY+MpZfru2ZFSZ+zkDSl1will5K3DKXXWn7m95xrX7HpUQifS6Su3pdR5z4Z/Salz4fanptT5iSfsSqlz2V1nptQ58LAVPddY852JhE6kgYM5deK4nP2ODx5KqTOxtffXlSTJvR/bxkTOMp4JR+AAABREgAMAUBABDgBAQQQ4AAAFEeAAABREgAMAUNCsAW7712wfvxDNAACAuZnLEfhJkr5s+6O2z7Wd9Be1UlPvFtu32v6trLoAACx1swZ4RPy2pMdIep+k8yV9y/bv2X50LzO23S/pzyW9SNITJP207Sf0UhMAgOViTp+BR0RIuqf5Gpd0vKSP2f7DHuZ9tqRbI+LbETEq6VJJL+uhHgAAy8ZcPgP/DdtfkfSHkr4o6Xsj4tWSfkDSj/cw71Ml3THp5zub3wEAgFnM5X+hnyDpxyLi9sm/jIiO7Zf0MO/pPkuPB01kb5K0SZJGtLKH2QEAsHTMGuAR8TszPLa5h3nfKWnjpJ83SNoyzTwuknSRJK31+gcFPAAAy1Gbfwf+ZUmPsX267SFJPyXpUy32AwBAGa3dTjQixm3/mqR/kdQv6eKIuKmtfgAAqKTV+4FHxGclfbbNHgAAqKjVAK+uc+BgSh339/deYyBpVfblfKoS69em1Dl0XO/LRpIG96eU0cDGfSl19h0Y7rnGztEVCZ1Il+16XEqdHz/uKyl13n5izom4l37z3JQ62+/N2ZaHe1/l2n3aYO9FJK2/aTylju/dnlIn9h9IqdM3NJRSJyYmFkWN2fC/0AEAKIgABwCgIAIcAICCCHAAAAoiwAEAKIgABwCgIAIcAICCCHAAAAoiwAEAKIgABwCgIAIcAICCCHAAAAoiwAEAKIgABwCgIAIcAICCCHAAAAoaaLsBSDE+1nONiR07e29EUv/6dSl1vGtvSp01t4+k1Nl1xoqUOqP35tTR6omeS7zwiTclNCJdtu0JKXVG3Emp845tj0+pc9MtG1PqDB1/MKXOqruGeq4xcCASOpF2n57zujoh6fWp8fGcOmM5dTL2yR4YTOhE0gwvK47AAQAoiAAHAKAgAhwAgIIIcAAACiLAAQAoiAAHAKAgAhwAgIIIcAAACiLAAQAoiAAHAKAgAhwAgIIIcAAACiLAAQAoiAAHAKAgAhwAgIIIcAAACiLAAQAoaKDtBkqLTtsdfFdMTCQVipw6Q0M5dZKM7MhZPqu+k/OSOXR8f881/vhzL03oRHra029OqXP+5lek1Nm+Z1VKHR/MOT5Z/a+rU+oM7+59f7H2lt0JnUh9+0dT6mg853XV2b03pY6HBlPq9A2P9FyjM5q0jGfAETgAAAUR4AAAFESAAwBQEAEOAEBBBDgAAAUR4AAAFESAAwBQEAEOAEBBBDgAAAUR4AAAFESAAwBQEAEOAEBBBDgAAAUR4AAAFESAAwBQUCsBbvuPbN9s+0bbn7S9ro0+AACoaqCl+V4m6Y0RMW77DyS9UdIbFmzuTnrfEp2UMh7o/Sb0MTGR0EleHXdyls3glp0pdfoPrE6pc+CENSl1Bg645xq7npCzjL901eNS6mQZ2db7spGk4RUpZRRZu4uEYfXt2t97EUmxaiSljvtzFo77+1PqZOkcOthzjYz9uiRphpd5K0fgEfH5iBhvfrxa0oY2+gAAoKrF8Bn4L0j6XNtNAABQybydQrd9uaSTpnnozRHxj800b5Y0LumSGepskrRJkka0ch46BQCgnnkL8Ig4Z6bHbb9S0kskPT8iYoY6F0m6SJLWev1RpwMAYDlp5SI22+eqe9HacyIi56oMAACWkbY+A/8zSWskXWb7ett/2VIfAACU1MoReESc0cZ8AQBYKhbDVegAAOAYEeAAABREgAMAUBABDgBAQQQ4AAAFEeAAABREgAMAUBABDgBAQQQ4AAAFEeAAABTUyr9S7YkT3nNEp/caUk4vkmJiIqFIzpji4KGUOt67L6WO+vtz6qzJuRXt0J6cG+Kt++aBnmuc+NWERiTd/7icZTMxnFJGfWM5dUb+O+c1MbItp6HB3QmvrYx9hSTv2ptSR1n7i8GcKOpk9TMw2HONGE/akGfAETgAAAUR4AAAFESAAwBQEAEOAEBBBDgAAAUR4AAAFESAAwBQEAEOAEBBBDgAAAUR4AAAFESAAwBQEAEOAEBBBDgAAAUR4AAAFESAAwBQEAEOAEBBOXdRX0jRabuDByT1knPz+KTlMpFTp7NrT0odr1qRUqdv286UOsfdvzulzsRJx/dcwxOR0InUN5ZTZ903D6bUcSenn4H796fUyVrOioQ6/f2915AUO3el1MnaX0zsy1lXaRZTzsyAI3AAAAoiwAEAKIgABwCgIAIcAICCCHAAAAoiwAEAKIgABwCgIAIcAICCCHAAAAoiwAEAKIgABwCgIAIcAICCCHAAAAoiwAEAKIgABwCgIAIcAICCBtpuoDIPDKbUifGxlDoZYmIip07SmLLeYXrFiqRCTinTd6D35RNDOS/fdd/cn1Knf++hlDpZ48qq47u2ptTRyHDPJWLXnoRGpM6+nHWe9jpfuTKlTmd/zriq4AgcAICCCHAAAAoiwAEAKIgABwCgIAIcAICCCHAAAApqNcBtX2A7bJ/QZh8AAFTTWoDb3ijpBZK+01YPAABU1eYR+J9Ier2kaLEHAABKaiXAbZ8n6a6IuKGN+QMAUN28/StV25dLOmmah94s6U2SfniOdTZJ2iRJI8r5d3sAAFQ3bwEeEedM93vb3yvpdEk3uPt/pTdIus722RFxzzR1LpJ0kSSt9XpOtwMAoBZuZhIRX5P08MM/275N0lkRsW2hewEAoCr+DhwAgIJav51oRJzWdg8AAFTDETgAAAUR4AAAFNT6KfTKYnys7RbSxcRESh0PDKbUUX/Oe8zxLQ/6A4eHpG/FSEod79zdc42+4aGETqS+SPrjjoGc3YlTqkixZ29OnaGcbTnu3dN7kaTXw2LTOXAwp5CTlk90curMs6W5NQAAsMQR4AAAFESAAwBQEAEOAEBBBDgAAAUR4AAAFESAAwBQEAEOAEBBBDgAAAUR4AAAFESAAwBQEAEOAEBBBDgAAAUR4AAAFESAAwBQEAEOAEBBA203gKUpxsdy6kxMpNRRdHLKjOaMy4ODPdeIQ6MJnUhKWsbRyVnGHhlOqaOh3pexJHV2702p4/7+nmtkbX9pvMiOAZNe51UssqUPAADmggAHAKAgAhwAgIIIcAAACiLAAQAoiAAHAKAgAhwAgIIIcAAACiLAAQAoiAAHAKAgAhwAgIIIcAAACiLAAQAoiAAHAKAgAhwAgIIIcAAACiLAAQAoaKDtBrDIRKftDo60yPqJiYmUOp19+1PqZMgaU9/QUEqdzu69KXWyxpUlxsfabgFLDEfgAAAURIADAFAQAQ4AQEEEOAAABRHgAAAURIADAFAQAQ4AQEEEOAAABRHgAAAURIADAFAQAQ4AQEEEOAAABRHgAAAU1FqA2/5127fYvsn2H7bVBwAAFbVyO1HbPyTpZZKeHBGHbD+8jT4AAKiqrSPwV0v6/Yg4JEkRcV9LfQAAUFIrR+CSHivpWbbfJemgpAsi4svTTWh7k6RNkjSilQvXIZYWL67LPWJiIqFIp/caUtqySRlTYp2s5dM3PJJSp3PoYEqdJSnr9Zn1mihi3gLc9uWSTprmoTc38z1e0tMlPVXSR20/KiJi6sQRcZGkiyRprdc/6HEAAJajeQvwiDjnaI/ZfrWkTzSB/SXbHUknSNo6X/0AALCUtHVe8R8kPU+SbD9W0pCkbS31AgBAOW19Bn6xpIttf13SqKRXTnf6HAAATK+VAI+IUUk/28a8AQBYChbXpbkAAGBOCHAAAAoiwAEAKIgABwCgIAIcAICCCHAAAAoiwAEAKIgABwCgIAIcAICCCHAAAAoiwAEAKKitm5kANUWn7Q7yJY0pxhfZsnHO8UlndDSlDmawFF9XC4AjcAAACiLAAQAoiAAHAKAgAhwAgIIIcAAACiLAAQAoiAAHAKAgAhwAgIIIcAAACiLAAQAoiAAHAKAgAhwAgIIIcAAACiLAAQAoiAAHAKAgAhwAgIIIcAAACnJEtN3DnNneKun2tvtIcoKkbW030YLlOO7lOGZpeY57OY5ZWp7jXqgxPzIiTpzugVIBvpTYvjYizmq7j4W2HMe9HMcsLc9xL8cxS8tz3IthzJxCBwCgIAIcAICCCPD2XNR2Ay1ZjuNejmOWlue4l+OYpeU57tbHzGfgAAAUxBE4AAAFEeAtsv27tm+0fb3tz9s+pe2e5pvtP7J9czPuT9pe13ZPC8H2T9i+yXbH9pK+Wtf2ubZvsX2r7d9qu5+FYPti2/fZ/nrbvSwU2xtt/5vtzc22/Zq2e1oItkdsf8n2Dc24395aL5xCb4/ttRGxu/n+NyQ9ISJe1XJb88r2D0u6IiLGbf+BJEXEG1pua97ZfrykjqS/knRBRFzbckvzwna/pG9KeoGkOyV9WdJPR8Q3Wm1sntl+tqS9kv4mIp7Udj8LwfbJkk6OiOtsr5H0FUk/ugzWtSWtioi9tgclXSXpNRFx9UL3whF4iw6Hd2OVpCX/bioiPh8R482PV0va0GY/CyUiNkfELW33sQDOlnRrRHw7IkYlXSrpZS33NO8i4guSdrTdx0KKiLsj4rrm+z2SNks6td2u5l907W1+HGy+Wtl3E+Ats/0u23dIermk32m7nwX2C5I+13YTSHWqpDsm/XynlsFOfbmzfZqkp0i6puVWFoTtftvXS7pP0mUR0cq4CfB5Zvty21+f5utlkhQRb46IjZIukfRr7XabY7YxN9O8WdK4uuNeEuYy7mXA0/xuyZ9ZWs5sr5b0cUmvnXJWccmKiImI+D51zyCebbuVj00G2pjpchIR58xx0g9L+oykt85jOwtitjHbfqWkl0h6fiyhizCOYV0vZXdK2jjp5w2StrTUC+ZZ8xnwxyVdEhGfaLufhRYRO21fKelcSQt+ASNH4C2y/ZhJP54n6ea2elkots+V9AZJ50XE/rb7QbovS3qM7dNtD0n6KUmfarknzIPmYq73SdocEe9pu5+FYvvEw389Y3uFpHPU0r6bq9BbZPvjks5U9+rk2yW9KiLuarer+WX7VknDkrY3v7p6qV95L0m2/6ek90o6UdJOSddHxAtbbWqe2H6xpAsl9Uu6OCLe1W5H88/2RyQ9V907VN0r6a0R8b5Wm5pntp8p6T8kfU3dfZgkvSkiPtteV/PP9pMlfVDd7btP0kcj4h2t9EKAAwBQD6fQAQAoiAAHAKAgAhwAgIIIcAAACiLAAQAoiAAHAKAgAhwAgIIIcABHZfupzb3bR2yvau5/vCxulwksdvwjFwAzsv1OSSOSVki6MyLe3XJLAESAA5hF8z/NvyzpoKT/ERETLbcEQJxCBzC79ZJWS1qj7pE4gEWAI3AAM7L9KUmXSjpd0skRsSTuWw9Ux/3AARyV7Z+TNB4RH7bdL+k/bT8vIq5ouzdgueMIHACAgvgMHACAgghwAAAKIsABACiIAAcAoCACHACAgghwAAAKIsABACiIAAcAoKD/D9kf5EZyGxR4AAAAAElFTkSuQmCC", + "image/png": "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gIQIcAAAEiLAAQBIiAAHACAhAhwAgIQIcAAAEiLAAQBIiAAHACCh7robQCEu816sq7e3SJ3myEiROjE+XqRO9yHri9SJ0dEidboOPrTjGjFQZl159z1F6sRAX5E62rK1SJmuNauL1Imh4SJ13N/589PcvadAJ1IMDxWpU2q/o2iWqbPMMAIHACAhAhwAgIQIcAAAEiLAAQBIiAAHACAhAhwAgIQIcAAAEiLAAQBIqPYAt92w/UPbX6y7FwAAsqg9wCW9WtLGupsAACCTWgPc9gZJvyvpY3X2AQBANnWPwM+S9AZJfBEuAABzUFuA2362pDsj4gczTHeG7atsXzWqMhcVAAAguzpH4E+QdLrtTZIukPQ025+eOFFEnB0RJ0XEST0qdLUjAACSqy3AI+LNEbEhIo6W9AJJl0XES+rqBwCATOo+Bg4AAO6H7robkKSIuFzS5TW3MXeL6WL2JWoU1NXbW6bOmtVF6qivTD8eXFGkTgx03s/YmoECnUh3n7yuSJ2DNpU5R2X4IWuL1BnYOlKkTs/Ntxepo67O9xddhx5SoBHJd24rUieahfY742XqNIeHitQpsm9fgH0yI3AAABIiwAEASIgABwAgIQIcAICECHAAABIiwAEASIgABwAgIQIcAICECHAAABIiwAEASIgABwAgIQIcAICECHAAABIiwAEASIgABwAgIQIcAICECHAAABLqrrsBSHLn76O6ensLNCKpUeY9XddBq4vUUV9fkTKxaqBIneFDVxapc8/6zl96430u0Ik0uqpIGe05vMw2ODZQZrm6xsv042MOLVKnseuejmt4z1CBTqTm0HCROl2DK4rUifEy/ZTYl0qSotl5jWK9TH0XI3AAABIiwAEASIgABwAgIQIcAICECHAAABIiwAEASIgABwAgIQIcAICECHAAABIiwAEASIgABwAgIQIcAICECHAAABIiwAEASIgABwAgIQIcAICEuutuAJIbjc5r9BRalb09ZeoM9BcpE4Nl6mx/9NoidRojRcpo+4nuuIabBRqR1Cy0yvccHUXqhMvUGT6o89eVJK0aHChSp39750907929BTqRunbtKlJH42U2wlL7r1Ij0uZIgRd6FHqBToMROAAACRHgAAAkRIADAJAQAQ4AQEIEOAAACRHgAAAkRIADAJAQAQ4AQEIEOAAACRHgAAAkRIADAJAQAQ4A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", "text/plain": [ "
" ] @@ -1299,7 +1297,7 @@ " $$" ], "text/plain": [ - "" + "" ] }, "execution_count": 33, @@ -1441,39 +1439,6 @@ "pm.logp(rv=z, value=point[\"z\"]).sum().eval()" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "What about other types of Ops? Let's look into an example:" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "oN1FcbE1V2it", - "outputId": "a0cd9e45-2441-42e1-affe-18600b648d61" - }, - "outputs": [], - "source": [ - "try:\n", - " y = at.cumsum(z)\n", - " pm.logp(y, [1, 1])\n", - "except NotImplementedError as err:\n", - " print(err)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "These are not always implemented." - ] - }, { "cell_type": "markdown", "metadata": { @@ -1489,7 +1454,7 @@ "id": "WdZcUfvLUkwK" }, "source": [ - "## What is the deal with those value variables in the model?" + "## What are value variables and why are they important?" ] }, { @@ -1501,7 +1466,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 38, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1513,10 +1478,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 39, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } @@ -1530,16 +1495,16 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([1.24403501, 0.57241126, 0.69223769])" + "array([-0.57530986, 2.05065683, -0.36906955])" ] }, - "execution_count": 40, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -1551,7 +1516,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 40, "metadata": {}, "outputs": [ { @@ -1560,7 +1525,7 @@ "-1.7001885332046727" ] }, - "execution_count": 41, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -1579,7 +1544,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 41, "metadata": { "id": "dejQBR2FUnM3" }, @@ -1600,7 +1565,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 42, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1615,7 +1580,7 @@ "{mu: mu, sigma: sigma_log__, x: x}" ] }, - "execution_count": 43, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -1633,7 +1598,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 43, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1648,7 +1613,7 @@ "[mu, sigma_log__, x]" ] }, - "execution_count": 44, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -1666,7 +1631,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 44, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1681,7 +1646,7 @@ "array([ -1.61208571, -11.32440364, 9.08106147])" ] }, - "execution_count": 45, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } @@ -1706,7 +1671,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 45, "metadata": {}, "outputs": [ { @@ -1738,7 +1703,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 46, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1753,7 +1718,7 @@ "[array(-1.61208571), array(-11.32440364), array(9.08106147)]" ] }, - "execution_count": 47, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } From b85cefc8f067b5f04337cb86049c4b6359095bad Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Fri, 3 Jun 2022 16:23:20 +0200 Subject: [PATCH 13/30] fix suggestions part 3 --- docs/pymc_aesara.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pymc_aesara.ipynb b/docs/pymc_aesara.ipynb index a309a3f819..17630d9dd8 100644 --- a/docs/pymc_aesara.ipynb +++ b/docs/pymc_aesara.ipynb @@ -810,7 +810,7 @@ "id": "JhmIBByY6T9h" }, "source": [ - "**Remark:** Again, note that `aesara` is clever enough to omit the `exp` and `log` unnecessary composition:" + "**Remark:** Again, note that `aesara` is clever enough to omit the `exp` and `log` unnecessary composition after invoking the `eval()` method. Note that the simplification is not done when we call `aesara.dprint(new_w)` above." ] }, { From b0781cf835d30257a8458bac80c76db3556936a6 Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Fri, 3 Jun 2022 22:11:08 +0200 Subject: [PATCH 14/30] fix suggestions part 3 --- docs/pymc_aesara.ipynb | 332 +++++++++++++++++++++++++++-------------- 1 file changed, 221 insertions(+), 111 deletions(-) diff --git a/docs/pymc_aesara.ipynb b/docs/pymc_aesara.ipynb index 17630d9dd8..55297eed28 100644 --- a/docs/pymc_aesara.ipynb +++ b/docs/pymc_aesara.ipynb @@ -10,7 +10,7 @@ "\n", "**Authors:** [Ricardo Vieira](https://github.com/ricardoV94) and [Juan Orduz](https://juanitorduz.github.io/)\n", "\n", - "In this notebook we want to give an introduction of how PyMC models translate to Aesara graphs. The purpose is not to give a detailed description of all `aesara`'s capabilities but rather focus on the main concepts to understand its connection with PyMC. For a more detailed description of the project please refer to the [official documentation](https://aesara.readthedocs.io/en/latest/index.html).\n", + "In this notebook we want to give an introduction of how PyMC models translate to Aesara graphs. The purpose is not to give a detailed description of all [`aesara`](https://github.com/aesara-devs/aesara)'s capabilities but rather focus on the main concepts to understand its connection with PyMC. For a more detailed description of the project please refer to the [official documentation](https://aesara.readthedocs.io/en/latest/index.html).\n", "\n", "\n", "**Remark:** For a summary on PyMC internals and design please see [Architecture.md](https://github.com/pymc-devs/pymc/blob/main/ARCHITECTURE.md)." @@ -151,7 +151,7 @@ "outputs": [], "source": [ "z = x + y\n", - "z.name = \"x + y\"\n" + "z.name = \"x + y\"" ] }, { @@ -203,7 +203,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -356,7 +356,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 10, @@ -400,7 +400,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -438,7 +438,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 12, @@ -611,7 +611,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 15, @@ -705,7 +705,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 18, @@ -750,7 +750,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 19, @@ -810,7 +810,7 @@ "id": "JhmIBByY6T9h" }, "source": [ - "**Remark:** Again, note that `aesara` is clever enough to omit the `exp` and `log` unnecessary composition after invoking the `eval()` method. Note that the simplification is not done when we call `aesara.dprint(new_w)` above." + "**Remark:** Again, note that `aesara` is clever enough to omit the `exp` and `log` once we compile the function." ] }, { @@ -837,7 +837,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 21, @@ -883,11 +883,10 @@ "id": "Zkqw774ThP93" }, "source": [ + "---\n", "# PyMC\n", "![image.png](data:image/png;base64,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)\n", - "\n", - "**Guide**\n", - "* [Distribution developer guide](https://github.com/pymc-devs/pymc/blob/1005d20b3c12d9b9a424c069f6a0f9962d73c41d/docs/source/contributing/developer_guide_implementing_distribution.md)" + "\n" ] }, { @@ -896,7 +895,7 @@ "id": "3drOlTjZxDMF" }, "source": [ - "## Aesara RandomVariables\n", + "### Aesara RandomVariables\n", "\n", "Now that we have seen aesara's basics we want to move in the direction of random variables. Here are the modules we want to cover:\n", "\n", @@ -925,7 +924,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEWCAYAAACJ0YulAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAcU0lEQVR4nO3de5wcZZ3v8c/XgNxZwAwIBAwqXgBZLyO66rqsyILCCrsveS0eL1HRHFx03XNcJYiKqKxR19vqejyoCMrNHC9rjogSg8h6ARwQgXCRHEASEskAIhcVCXzPH/VM2YydTGemu2tm+vt+vfo1XVVPVf2e7p7+9fNU1VOyTUREBMCjmg4gIiKmjySFiIioJSlEREQtSSEiImpJChERUUtSiIiIWpJCTJqk90o6s8vblKQvSvq1pMu6ue1BIum1kn64CeVvkfTi8vydkj7fxVjuk/T48vx0SR/o4rY/K+nd3dpeJCnMSJJeIOnHkn4j6S5JP5L07Kbj6pIXAAcD82wf0HQwg8j2v9p+w0TlJF0kacJytre1fdNU42qX6Gwfa/v9U912/NFmTQcQm0bS9sC3gDcBS4BHA38JPNBkXF30OOAW2/e3WyhpM9vr+xxTz83Ges3GOg2CtBRmnicB2D7H9kO2f2f7AttXAUh6gqQLJd0p6Q5JZ0naYWzl0k3wdklXSbpf0hck7SLpfEn3SvqepB1L2fmSLGmhpDWS1kp624YCk/Tc0oK5W9LPJR3Ysuy1km4q+7hZ0ivbrH8M8HngL0qXw8mSDpS0WtLxkn4FfFHSFpI+UWJaU55vUbYxVv4dktaVmI+U9FJJvygtq3dupA6HSfqZpHskrZL03o2UHdvX21r29bqW5X8m6UuSRiX9UtK7JD2q5fX4kaSPS7oLeG/pWvlMeS/uK8sfW+r3a0nXS3pGy/YXSfp/5TW9VtLfbSjWNrG/usR0p6QTxy2ruwUlbSnpzFLubkk/LZ+XU6h+jHy6xPrpUt6SjpN0I3Bjy7wntuxirqRlJe4fSHpcKTf2edusJZaLJL1B0lOBz/LHz8bdZfkjuqMkvVHSyvI+L5W0W8sySzpW0o3l9fwPSer0NRsYtvOYQQ9ge+BO4AzgJcCO45Y/kar7ZQtgCLgY+ETL8luAS4BdgN2BdcAVwDPKOhcCJ5Wy8wED5wDbAE8DRoEXl+XvBc4sz3cvcb2U6sfGwWV6qKx7D/DkUnZXYN8N1O+1wA9bpg8E1gMfKvFtBbyv1GHnsv0fA+8fV/49wObAG0vMZwPbAfsCvwcev4H9H1jq+Shgf+B24MiNlF1f4tm81P23Y+8J8CXgm2W/84FfAMe01HM98BaqFvtWwOnAHcCzgC3Le3Ez8BpgDvAB4Pst+z8K2K3E+g/A/cCu7V7HcXHvA9wHvLC8ph8rsbR7X/878H+BrUsMzwK2L8suAt4wbtsGlgE7AVu1zHtieX46cG/Lvj85Fid//Lxt1rK9eh/t6lS294Hy/EXl9Xtm2fangIvHxfYtYAdgT6rPxaFN/09Pt0daCjOM7Xuo+t0NfA4YLb+IdinLV9peZvsB26NU//B/NW4zn7J9u+3bgP8CLrX9M9sPAN+gShCtTrZ9v+2rgS8Cr2gT2quAb9v+tu2HbS8DRqi+KAEeBvaTtJXttbZXbEK1H6ZKVA/Y/h3wSuB9tteVOp4MvLql/IPAKbYfBM4F5gKftH1v2e8Kqi/8P2H7IttXlzpcRZUQx79+rR4ssTxo+9tUX7ZPljSH6ov6hLLfW4CPjotzje1P2V5f6gXwDduX2/491Xvxe9tfsv0Q8BVa3hvb/8f2mhLrV6h+mXdyHOblwLdsX1ze83dTvcYbqt9jqL7UHyqx3TPB9j9o+66WOo13Xsu+T6T69b9HB3FP5JXAabavKNs+oWx7fkuZxbbvtn0r8H3g6V3Y76ySpDAD2b7O9mttzwP2o/q1+AkASTtLOlfSbZLuAc6k+lJsdXvL89+1md52XPlVLc9/WfY33uOAo0oXw92lef8Cql+u91N9QR4LrJV0nqSndF5jRsuX5JjdShwbiunO8iU6Vh+YuI4ASHqOpO+XLp/flJjHv36t7vQj+81/W7Y9l+p4z/g4d2+Zbn1dx3T83kh6jaQrW17v/SaIdcxurfsu78+dGyj7ZeC7wLmlq+7DkjafYPvt6tV2ue37gLto/5naVI/4XJRt38kjX/NftTwfe6+iRZLCDGf7eqom9H5l1gepWhH7296e6hf8VPtNW3/F7QmsaVNmFfBl2zu0PLaxvbjE+V3bB1N1HV1P1crp1PihfNdQJaGJYpqMs4GlwB62/4yqH3syr98dVL+yx8d5W8v0pIcoLv3wnwPeDDzG9g7ANXQW61pa3lNJW1O1Bv5EaQGdbHsf4HnA4VTdWRuLf6J6te57W6qupjVU3V9QdVWNeewmbPcRnwtJ21DV67YNrhF/IklhhpH0lHJgc16Z3oOqO+eSUmQ7qi6MuyXtDry9C7t9t6StJe0LvI6qG2O8M4G/lXSIpDnlAOWBkuaVA5MvK/+kD5T4HmqzjU6dA7xL0pCkuVTHD7p1vcR2wF22fy/pAOC/TWYjpaWyBDhF0nblS/x/djHObai+JEcBygHu/Ta6xh99FThc1anNj6Y6JtL2u0DSX0t6WukOu4cq0Y29d7cDj59E7C9t2ff7qbovV5WuwNuAV5XP0OuBJ7Ssdzswr6zXztnA6yQ9XdWJB/9atn3LJGIcWEkKM8+9wHOASyXdT5UMrgHGzgo6mepA22+A84Cvd2GfPwBWAsuBf7N9wfgCtlcBRwDvpPqiWkWVkB5VHm+j+iV3F1Uf/T9OIZ4PUB2vuAq4mupAebcuiPpH4H2S7qVKNkumsK23UP36vQn4IdWX1mlTjhCwfS3VMYqfUH1ZPg34UYfrrgCOK/GsBX4NrN5A8cdSJZF7gOuoPgtjie2TwMvLmTz/vgnhnw2cRPVZeBbVsYAxb6T63NxJdVLAj1uWXUh1POhXku5oU6/lVMdHvlbq9QTg6E2IKwDZuclOtFcO0N0MbO6cbx4xENJSiIiIWpJCRETU0n0UERG1tBQiIqI2owfEmzt3rufPn990GBERM8rll19+h+2hdstmdFKYP38+IyMjTYcRETGjSPrlhpal+ygiImpJChERUUtSiIiIWpJCRETUkhQiIqKWpBAREbUkhYiIqCUpRERELUkhIiJqM/qK5oiJzF90Xte3ecviw7q+zYjpIi2FiIioJSlEREStZ0lB0mmS1km6Ztz8t0i6QdIKSR9umX+CpJVl2SG9iisiIjasl8cUTgc+DXxpbIakv6a6ufv+th+QtHOZvw/VDbb3BXYDvifpSbYf6mF8ERExTs9aCrYvBu4aN/tNwGLbD5Qy68r8I4BzbT9g+2ZgJXBAr2KLiIj2+n1M4UnAX0q6VNIPJD27zN8dWNVSbnWZ9yckLZQ0ImlkdHS0x+FGRAyWfieFzYAdgecCbweWSBKgNmXb3jza9qm2h20PDw21vXFQRERMUr+Twmrg665cBjwMzC3z92gpNw9Y0+fYIiIGXr+Twn8CLwKQ9CTg0cAdwFLgaElbSNoL2Bu4rM+xRUQMvJ6dfSTpHOBAYK6k1cBJwGnAaeU01T8AC2wbWCFpCXAtsB44LmceRUT0n6rv5JlpeHjYIyMjTYcR01gvhrnotgybEf0m6XLbw+2W5YrmiIioJSlEREQtSSEiImpJChERUUtSiIiIWpJCRETUkhQiIqKWpBAREbUkhYiIqCUpRERELUkhIiJqSQoREVHr5T2aI6ID3R60LwPsxVSkpRAREbUkhYiIqCUpRERErWdJQdJpktaVu6yNX/Yvkixpbsu8EyStlHSDpEN6FVdERGxYL1sKpwOHjp8paQ/gYODWlnn7AEcD+5Z1PiNpTg9ji4iINnqWFGxfDNzVZtHHgXcArfcBPQI41/YDtm8GVgIH9Cq2iIhor6/HFCS9DLjN9s/HLdodWNUyvbrMa7eNhZJGJI2Mjo72KNKIiMHUt6QgaWvgROA97Ra3mec287B9qu1h28NDQ0PdDDEiYuD18+K1JwB7AT+XBDAPuELSAVQtgz1ays4D1vQxtoiIoI8tBdtX297Z9nzb86kSwTNt/wpYChwtaQtJewF7A5f1K7aIiKj08pTUc4CfAE+WtFrSMRsqa3sFsAS4FvgOcJzth3oVW0REtNez7iPbr5hg+fxx06cAp/QqnoiImFiuaI6IiFqSQkRE1JIUIiKilqQQERG1JIWIiKglKURERC1JISIiakkKERFRS1KIiIhakkJERNSSFCIiopakEBERtSSFiIioJSlEREQtSSEiImr9vB1nxITmLzqv6RAiBlov77x2mqR1kq5pmfcRSddLukrSNyTt0LLsBEkrJd0g6ZBexRURERvWy+6j04FDx81bBuxne3/gF8AJAJL2AY4G9i3rfEbSnB7GFhERbfQsKdi+GLhr3LwLbK8vk5cA88rzI4BzbT9g+2ZgJXBAr2KLiIj2mjzQ/Hrg/PJ8d2BVy7LVZd6fkLRQ0oikkdHR0R6HGBExWBpJCpJOBNYDZ43NalPM7da1fartYdvDQ0NDvQoxImIg9f3sI0kLgMOBg2yPffGvBvZoKTYPWNPv2CIiBl1fWwqSDgWOB15m+7cti5YCR0vaQtJewN7AZf2MLSIiethSkHQOcCAwV9Jq4CSqs422AJZJArjE9rG2V0haAlxL1a10nO2HehVbRES017OkYPsVbWZ/YSPlTwFO6VU8ERExsQxzERERtSSFiIioJSlEREQtSSEiImpJChERUUtSiIiIWpJCRETUkhQiIqKWpBAREbUkhYiIqCUpRERELUkhIiJqSQoREVFLUoiIiNqESaHcD/k4STv2I6CIiGhOJy2Fo4HdgJ9KOlfSISp3yImIiNllwqRge6XtE4EnAWcDpwG3SjpZ0k4bWk/SaZLWSbqmZd5OkpZJurH83bFl2QmSVkq6QdIhU6tWRERMRkfHFCTtD3wU+AjwNeDlwD3AhRtZ7XTg0HHzFgHLbe8NLC/TSNqHqkWyb1nnM5LmdFyLiIjoiglvxynpcuBuqltpLrL9QFl0qaTnb2g92xdLmj9u9hFU920GOAO4CDi+zD+3bPtmSSuBA4CfdFqRiIiYuk7u0XyU7ZvaLbD995u4v11sry3rrpW0c5m/O3BJS7nVZd6fkLQQWAiw5557buLuIyJiYzrpPnqDpB3GJiTtKOkDXY6j3YFrtyto+1Tbw7aHh4aGuhxGRMRg6yQpvMT23WMTtn8NvHSS+7td0q4A5e+6Mn81sEdLuXnAmknuIyIiJqmTpDBH0hZjE5K2ArbYSPmNWQosKM8XAN9smX+0pC0k7QXsDVw2yX1ERMQkdXJM4UxguaQvUnXpvJ7qIPFGSTqH6qDyXEmrgZOAxcASSccAtwJHAdheIWkJcC2wHjjO9kObXp2IiJgK2W277h9ZSHoJcBBV3/8Ftr/b68A6MTw87JGRkabDiC6av+i8pkOIcW5ZfFjTIUSXSbrc9nC7ZZ20FLB9PnB+V6OKiIhpp5Oxj/6+XIH8G0n3SLpX0j39CC4iIvqrk5bCh4G/tX1dr4OJiIhmdXL20e1JCBERg6GTlsKIpK8A/wmMDXGB7a/3KqiIiGhGJ0lhe+C3wN+0zDOQpBARMctMmBRsv64fgURERPM6OfvoSZKWj90XQdL+kt7V+9AiIqLfOjnQ/DngBOBBANtXUd37ICIiZplOksLWtsePQ7S+F8FERESzOkkKd0h6AmUoa0kvB9b2NKqIiGhEJ2cfHQecCjxF0m3AzcCrehpVREQ0opOzj24CXixpG+BRtu/tfVgREdGETu7R/J5x0wDYfl+PYoqIiIZ00n10f8vzLYHDgQx7ERExC3XSffTR1mlJ/0Z1p7SIiJhlOjn7aLytgcdPZaeS/oekFZKukXSOpC0l7SRpWRmme5mkHaeyj4iI2HSdXNF8taSrymMFcAPwycnuUNLuwD8Bw7b3A+ZQXQy3CFhue29geZmOiIg+6uSYwuEtz9dTDaU91YvXNgO2kvQgVctjDdVV0weW5WcAFwHHT3E/ERGxCTpJCuNPQd1+7AwkANt3bcoObd9WjkvcCvyO6p7PF0jaxfbaUmatpJ3brS9pIbAQYM8999yUXUdExAQ6OaZwBTAK/AK4sTy/vDxGNnWH5VjBEcBewG7ANpI6vhjO9qm2h20PDw0NberuIyJiIzpJCt+huh3nXNuPoepO+rrtvWxP5oDzi4GbbY/afpDqvgzPA26XtCtA+btuEtuOiIgp6CQpPNv2t8cmbJ8P/NUU9nkr8FxJW6vqhzqI6rqHpcCCUmYB8M0p7CMiIiahk2MKd5T7J5xJNSjeq4A7J7tD25dK+ipVt9R64GdUYyttCyyRdAxV4jhqsvuIiO6Zv+i8rm/zlsWHdX2b0R2dJIVXACcB36BKCheXeZNm+6SyzVYPULUaIiKiIZ1c0XwX8FZJ29q+rw8xRUREQzq5eO15kq4Fri3Tfy7pMz2PLCIi+q6TA80fBw6hHEew/XPghb0MKiIimtHR2Ee2V42b9VAPYomIiIZ1cqB5laTnAZb0aKpxizJ0dkTELNRJS+FYqlty7g6sBp5epiMiYpbZaEtB0hzgE7Zf2ad4IiKiQRttKdh+CBgq3UYRETHLdXJM4RbgR5KW0nJrTtsf61VQERHRjA22FCR9uTz9B+Bbpex2LY+IiJhlNtZSeJakx1GNQ/SpPsUTEREN2lhS+CzVsNl78cj7JohqDKQp3ac5ZodeDJYWEc3ZYPeR7X+3/VTgi7Yf3/KY7H0UIiJimpvwOgXbb+pHIBER0byOhrmIiIjBkKQQERG1RpKCpB0kfVXS9ZKuk/QXknaStEzSjeXvjk3EFhExyJpqKXwS+I7tpwB/TjXA3iJgue29geVlOiIi+qjvSUHS9lT3Y/gCgO0/2L4bOAI4oxQ7Aziy37FFRAy6JloKjwdGgS9K+pmkz0vaBtjF9lqA8nfnditLWihpRNLI6Oho/6KOiBgATSSFzYBnAv/L9jOoxlPquKvI9qm2h20PDw0N9SrGiIiB1ERSWA2stn1pmf4qVZK4XdKuAOXvugZii4gYaH1PCrZ/RXU3tyeXWQcB1wJLgQVl3gLgm/2OLSJi0HUydHYvvAU4q9yn4SbgdVQJaomkY6gG4TuqodgiIgZWI0nB9pXAcJtFB/U5lIiIaJErmiMiotZU91E0IMNcR8RE0lKIiIhakkJERNSSFCIiopakEBERtSSFiIioJSlEREQtSSEiImpJChERUUtSiIiIWpJCRETUMsxFRPRdt4dcuWXxYV3d3iBLSyEiImpJChERUUtSiIiIWmNJQdIcST+T9K0yvZOkZZJuLH93bCq2iIhB1WRL4a3AdS3Ti4DltvcGlpfpiIjoo0aSgqR5wGHA51tmHwGcUZ6fARzZ57AiIgZeUy2FTwDvAB5umbeL7bUA5e/ODcQVETHQ+p4UJB0OrLN9+STXXyhpRNLI6Ohol6OLiBhsTbQUng+8TNItwLnAiySdCdwuaVeA8nddu5Vtn2p72Pbw0NBQv2KOiBgIfU8Ktk+wPc/2fOBo4ELbrwKWAgtKsQXAN/sdW0TEoJtO1yksBg6WdCNwcJmOiIg+anTsI9sXAReV53cCBzUZT0TEoJtOLYWIiGhYkkJERNSSFCIiopakEBERtSSFiIioJSlEREQtSSEiImpJChERUUtSiIiIWpJCRETUkhQiIqKWpBAREbUkhYiIqCUpRERELUkhIiJqSQoREVFLUoiIiFrfk4KkPSR9X9J1klZIemuZv5OkZZJuLH937HdsERGDronbca4H3mb7CknbAZdLWga8Flhue7GkRcAi4PgG4ps25i86r+kQImLA9L2lYHut7SvK83uB64DdgSOAM0qxM4Aj+x1bRMSga/SYgqT5wDOAS4FdbK+FKnEAO29gnYWSRiSNjI6O9i3WiIhB0ET3EQCStgW+Bvyz7XskdbSe7VOBUwGGh4fduwgjYqbodlfrLYsP6+r2ZpJGWgqSNqdKCGfZ/nqZfbukXcvyXYF1TcQWETHImjj7SMAXgOtsf6xl0VJgQXm+APhmv2OLiBh0TXQfPR94NXC1pCvLvHcCi4Elko4BbgWOaiC2iIiB1vekYPuHwIYOIBzUz1i6LaeQRsRMlyuaIyKilqQQERG1JIWIiKglKURERC1JISIiakkKERFRS1KIiIhakkJERNSSFCIiopakEBERtSSFiIioNXY/hYiI6aoX45jNlHs0pKUQERG1gW4pZFTTiIhHSkshIiJqSQoREVGbdt1Hkg4FPgnMAT5ve3HDIUVETFm3u6t7deB6WrUUJM0B/gN4CbAP8ApJ+zQbVUTE4JhWSQE4AFhp+ybbfwDOBY5oOKaIiIEx3bqPdgdWtUyvBp7TWkDSQmBhmbxP0g0dbnsucMeUI5w+ZlN9UpfpaTbVBWZXfebqQ1Oqy+M2tGC6JQW1medHTNinAqdu8oalEdvDkw1suplN9UldpqfZVBeYXfXpZV2mW/fRamCPlul5wJqGYomIGDjTLSn8FNhb0l6SHg0cDSxtOKaIiIExrbqPbK+X9Gbgu1SnpJ5me0WXNr/JXU7T3GyqT+oyPc2musDsqk/P6iLbE5eKiIiBMN26jyIiokFJChERURuopCDp/ZKuknSlpAsk7dZ0TJMl6SOSri/1+YakHZqOaSokHSVphaSHJc240wYlHSrpBkkrJS1qOp6pkHSapHWSrmk6lqmStIek70u6rny+3tp0TJMlaUtJl0n6eanLyT3ZzyAdU5C0ve17yvN/AvaxfWzDYU2KpL8BLiwH5z8EYPv4hsOaNElPBR4G/jfwL7ZHGg6pY2V4ll8AB1OdVv1T4BW2r200sEmS9ELgPuBLtvdrOp6pkLQrsKvtKyRtB1wOHDkT3xtJAraxfZ+kzYEfAm+1fUk39zNQLYWxhFBsw7gL42YS2xfYXl8mL6G6pmPGsn2d7U6vTp9uZtXwLLYvBu5qOo5usL3W9hXl+b3AdVQjJ8w4rtxXJjcvj65/hw1UUgCQdIqkVcArgfc0HU+XvB44v+kgBli74Vlm5BfPbCZpPvAM4NKGQ5k0SXMkXQmsA5bZ7npdZl1SkPQ9Sde0eRwBYPtE23sAZwFvbjbajZuoLqXMicB6qvpMa53UZ4aacHiWaJakbYGvAf88rsdgRrH9kO2nU/UMHCCp69170+ritW6w/eIOi54NnAec1MNwpmSiukhaABwOHOQZcHBoE96bmSbDs0xjpf/9a8BZtr/edDzdYPtuSRcBhwJdPSFg1rUUNkbS3i2TLwOubyqWqSo3IzoeeJnt3zYdz4DL8CzTVDk4+wXgOtsfazqeqZA0NHaWoaStgBfTg++wQTv76GvAk6nOcvklcKzt25qNanIkrQS2AO4ssy6ZqWdSAUj6O+BTwBBwN3Cl7UMaDWoTSHop8An+ODzLKc1GNHmSzgEOpBpq+nbgJNtfaDSoSZL0AuC/gKup/u8B3mn7281FNTmS9gfOoPqMPQpYYvt9Xd/PICWFiIjYuIHqPoqIiI1LUoiIiFqSQkRE1JIUIiKilqQQERG1JIWIiKglKURERC1JIaKLJD273ONiS0nblHHvZ/Tw0zFYcvFaRJdJ+gCwJbAVsNr2BxsOKaJjSQoRXVbGP/op8HvgebYfajikiI6l+yii+3YCtgW2o2oxRMwYaSlEdJmkpVR3X9uL6laQ0/q+HRGtZt39FCKaJOk1wHrbZ5d7N/9Y0otsX9h0bBGdSEshIiJqOaYQERG1JIWIiKglKURERC1JISIiakkKERFRS1KIiIhakkJERNT+PyoHV1PBLQqjAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -950,7 +949,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now let's do it in aesara via pymc." + "Now let's do it in `aesara` via `pymc`." ] }, { @@ -963,7 +962,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -973,7 +972,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 24, @@ -990,7 +989,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can try to generate random samples:" + "Inputs are always in the following order:\n", + "1. rng shared variable\n", + "2. size\n", + "3. dtype (number code)\n", + "4. arg1\n", + "5. arg2\n", + "6. argn" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This input is created by default, but can be passed explicitly as well:" ] }, { @@ -1002,16 +1014,119 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: 0.008986763129471461\n", - "Sample 1: 0.008986763129471461\n", - "Sample 2: 0.008986763129471461\n", - "Sample 3: 0.008986763129471461\n", - "Sample 4: 0.008986763129471461\n", - "Sample 5: 0.008986763129471461\n", - "Sample 6: 0.008986763129471461\n", - "Sample 7: 0.008986763129471461\n", - "Sample 8: 0.008986763129471461\n", - "Sample 9: 0.008986763129471461\n" + "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y'\n", + " |RandomGeneratorSharedVariable() [id B]\n", + " |TensorConstant{(1,) of 2} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{0} [id E]\n", + " |TensorConstant{1} [id F]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rng = np.random.default_rng(seed=123)\n", + "shared_rng = aesara.shared(rng, borrow=True)\n", + "y = at.random.normal(0, 1, rng=shared_rng, size=2, name=\"y\")\n", + "aesara.dprint(y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can sample by calling `.eval()` on the shared variable." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-0.98912135, -0.36778665])" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y.eval()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note however that these samples are always the same!" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 0: [-0.98912135 -0.36778665]\n", + "Sample 1: [-0.98912135 -0.36778665]\n", + "Sample 2: [-0.98912135 -0.36778665]\n", + "Sample 3: [-0.98912135 -0.36778665]\n", + "Sample 4: [-0.98912135 -0.36778665]\n", + "Sample 5: [-0.98912135 -0.36778665]\n", + "Sample 6: [-0.98912135 -0.36778665]\n", + "Sample 7: [-0.98912135 -0.36778665]\n", + "Sample 8: [-0.98912135 -0.36778665]\n", + "Sample 9: [-0.98912135 -0.36778665]\n" + ] + } + ], + "source": [ + "for i in range(10):\n", + " print(f\"Sample {i}: {y.eval()}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is also the case for the variable `x` defined above as a `pymc` distribution." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 0: -0.5570661545478054\n", + "Sample 1: -0.5570661545478054\n", + "Sample 2: -0.5570661545478054\n", + "Sample 3: -0.5570661545478054\n", + "Sample 4: -0.5570661545478054\n", + "Sample 5: -0.5570661545478054\n", + "Sample 6: -0.5570661545478054\n", + "Sample 7: -0.5570661545478054\n", + "Sample 8: -0.5570661545478054\n", + "Sample 9: -0.5570661545478054\n" ] } ], @@ -1029,12 +1144,12 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 29, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEWCAYAAACJ0YulAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAbF0lEQVR4nO3de5xcdZ3m8c9DQO4MYBoEEgwoXgBZLxEddWdYAUFhgJmX7MB6QUQzjHiZXWc0gIoojHjHccZ1UW7KTVZwyYooTJBh1AEMiNyCkoVIQmLSEDGAigae/eP8+lC0laTSXVWnu+t5v1796jqXOud7qqrP07/fuZRsExERAbBR0wVERMTEkVCIiIhaQiEiImoJhYiIqCUUIiKillCIiIhaQiHGTNJHJV3Q5WVK0rmSfiXppm4ue5BIepukH2zA/IslHVAenyTpq12s5VFJu5fH50k6rYvL/rKkD3dreZFQmJQkvUbSjyT9WtIqST+U9PKm6+qS1wAHAjNs79t0MYPI9j/afsf65pN0naT1zmd7K9v3jreudkFn+3jbHx/vsuMpGzddQGwYSdsA3wb+FrgUeAbwn4HHm6yri54NLLb9WLuJkja2vabPNfXcVNyuqbhNgyAthcnneQC2L7b9hO3f2r7a9m0Akp4j6VpJD0l6UNKFkrYdeXLpJvgHSbdJekzS2ZJ2lHSVpEck/auk7cq8syRZ0hxJyyQtl/T+tRUm6ZWlBfOwpJ9K2q9l2tsk3VvWcZ+kN7V5/nHAV4E/LV0Op0raT9JSSR+U9EvgXEmbSjqz1LSsPN60LGNk/g9IWllqPkLSGyT9vLSsTlrHNhwi6SeSVktaIumj65h3ZF3vb1nXsS3T/0TS1yQNS/qFpA9J2qjl9fihpM9LWgV8tHStfKm8F4+W6c8q2/crSXdLeknL8udK+n/lNb1L0l+urdY2tb+l1PSQpJNHTau7BSVtJumCMt/Dkn5cPi+nU/0z8s+l1n8u81vSCZLuAe5pGffcllVMl3RNqfvfJD27zDfyedu4pZbrJL1D0guBL/PUZ+PhMv1p3VGS3ilpUXmf50nauWWaJR0v6Z7yev6LJHX6mg0M2/mZRD/ANsBDwPnA64HtRk1/LlX3y6bAEHA9cGbL9MXADcCOwC7ASuAW4CXlOdcCp5R5ZwEGLga2BF4EDAMHlOkfBS4oj3cpdb2B6p+NA8vwUHnuauD5Zd6dgL3Wsn1vA37QMrwfsAb4ZKlvc+BjZRt2KMv/EfDxUfN/BNgEeGep+SJga2Av4HfA7mtZ/35lOzcC9gFWAEesY941pZ5Nyrb/ZuQ9Ab4GXFHWOwv4OXBcy3auAd5D1WLfHDgPeBB4GbBZeS/uA94KTANOA77fsv4jgZ1LrX8NPAbs1O51HFX3nsCjwJ+V1/RzpZZ27+vfAP8X2KLU8DJgmzLtOuAdo5Zt4Bpge2DzlnHPLY/PAx5pWfcXRurkqc/bxi3Lq9fRbpvK8k4rj19bXr+XlmV/Ebh+VG3fBrYFdqX6XBzc9N/0RPtJS2GSsb2aqt/dwFeA4fIf0Y5l+iLb19h+3PYw1R/8n49azBdtr7D9APDvwI22f2L7ceBbVAHR6lTbj9m+HTgXOLpNaW8GvmP7O7aftH0NsIBqRwnwJLC3pM1tL7d95wZs9pNUQfW47d8CbwI+Zntl2cZTgbe0zP8H4HTbfwAuAaYDX7D9SFnvnVQ7/D9i+zrbt5dtuI0qEEe/fq3+UGr5g+3vUO1sny9pGtWO+sSy3sXAZ0fVucz2F22vKdsF8C3bN9v+HdV78TvbX7P9BPANWt4b2//b9rJS6zeo/jPv5DjMG4Fv276+vOcfpnqN17Z9z6TaqT9Ralu9nuV/wvaqlm0a7cqWdZ9M9d//zA7qXp83AefYvqUs+8Sy7Fkt85xh+2Hb9wPfB17chfVOKQmFScj2Qttvsz0D2Jvqv8UzASTtIOkSSQ9IWg1cQLVTbLWi5fFv2wxvNWr+JS2Pf1HWN9qzgSNLF8PDpXn/Gqr/XB+j2kEeDyyXdKWkF3S+xQyXneSInUsda6vpobITHdkeWP82AiDpFZK+X7p8fl1qHv36tXrIT+83/01Z9nSq4z2j69ylZbj1dR3R8Xsj6a2Sbm15vfdeT60jdm5dd3l/HlrLvF8HvgdcUrrqPiVpk/Usv912tZ1u+1FgFe0/UxvqaZ+LsuyHePpr/suWxyPvVbRIKExytu+makLvXUZ9gqoVsY/tbaj+gx9vv2nrf3G7AsvazLME+LrtbVt+trR9Rqnze7YPpOo6upuqldOp0bfyXUYVQuuraSwuAuYBM23/CVU/9lhevwep/sseXecDLcNjvkVx6Yf/CvBu4Jm2twXuoLNal9Pynkragqo18EdKC+hU23sCrwIOperOWlf969uu1nVvRdXVtIyq+wuqrqoRz9qA5T7tcyFpS6rtemCtz4g/klCYZCS9oBzYnFGGZ1J159xQZtmaqgvjYUm7AP/QhdV+WNIWkvYCjqXqxhjtAuAvJB0kaVo5QLmfpBnlwORh5Y/08VLfE22W0amLgQ9JGpI0ner4Qbeul9gaWGX7d5L2Bf7bWBZSWiqXAqdL2rrsxP9HF+vckmonOQxQDnDvvc5nPOWbwKGqTm1+BtUxkbb7Akn/RdKLSnfYaqqgG3nvVgC7j6H2N7Ss++NU3ZdLSlfgA8Cby2fo7cBzWp63AphRntfORcCxkl6s6sSDfyzLXjyGGgdWQmHyeQR4BXCjpMeowuAOYOSsoFOpDrT9GrgSuLwL6/w3YBEwH/iM7atHz2B7CXA4cBLVjmoJVSBtVH7eT/Wf3CqqPvp3jaOe06iOV9wG3E51oLxbF0S9C/iYpEeowubScSzrPVT//d4L/IBqp3XOuCsEbN9FdYziP6h2li8Cftjhc+8ETij1LAd+BSxdy+zPogqR1cBCqs/CSLB9AXhjOZPnnzag/IuAU6g+Cy+jOhYw4p1Un5uHqE4K+FHLtGupjgf9UtKDbbZrPtXxkcvKdj0HOGoD6gpAdr5kJ9orB+juAzZxzjePGAhpKURERC2hEBERtXQfRURELS2FiIioTeob4k2fPt2zZs1quoyIiEnl5ptvftD2ULtpkzoUZs2axYIFC5ouIyJiUpH0i7VNS/dRRETUEgoREVFLKERERC2hEBERtYRCRETUEgoREVFLKERERC2hEBERtYRCRETUJvUVzRFNmDX3yq4ub/EZh3R1eRHjkZZCRETUEgoREVFLKERERC2hEBERtYRCRETUEgoREVFLKERERC3XKcSU1u1rCiKmurQUIiKi1rNQkHSOpJWS7mgz7e8lWdL0lnEnSlok6WeSDupVXRERsXa9bCmcBxw8eqSkmcCBwP0t4/YEjgL2Ks/5kqRpPawtIiLa6Fko2L4eWNVm0ueBDwBuGXc4cIntx23fBywC9u1VbRER0V5fjylIOgx4wPZPR03aBVjSMry0jIuIiD7q29lHkrYATgZe125ym3FuMw5Jc4A5ALvuumvX6ouIiP62FJ4D7Ab8VNJiYAZwi6RnUbUMZrbMOwNY1m4hts+yPdv27KGhoR6XHBExWPoWCrZvt72D7Vm2Z1EFwUtt/xKYBxwlaVNJuwF7ADf1q7aIiKj08pTUi4H/AJ4vaamk49Y2r+07gUuBu4DvAifYfqJXtUVERHs9O6Zg++j1TJ81avh04PRe1RMREeuX21xENCxf7xkTSW5zERERtYRCRETUEgoREVFLKERERC2hEBERtZx9FDHF5GymGI+0FCIiopZQiIiIWkIhIiJqCYWIiKglFCIiopZQiIiIWkIhIiJqCYWIiKglFCIiopZQiIiIWkIhIiJqCYWIiKj1LBQknSNppaQ7WsZ9WtLdkm6T9C1J27ZMO1HSIkk/k3RQr+qKiIi162VL4Tzg4FHjrgH2tr0P8HPgRABJewJHAXuV53xJ0rQe1hYREW30LBRsXw+sGjXuattryuANwIzy+HDgEtuP274PWATs26vaIiKivSaPKbwduKo83gVY0jJtaRn3RyTNkbRA0oLh4eEelxgRMVgaCQVJJwNrgAtHRrWZze2ea/ss27Ntzx4aGupViRERA6nv37wm6RjgUGB/2yM7/qXAzJbZZgDL+l1bRMSg62tLQdLBwAeBw2z/pmXSPOAoSZtK2g3YA7ipn7VFREQPWwqSLgb2A6ZLWgqcQnW20abANZIAbrB9vO07JV0K3EXVrXSC7Sd6VVtERLTXs1CwfXSb0WevY/7TgdN7VU9ERKxfrmiOiIhaQiEiImoJhYiIqCUUIiKillCIiIhaQiEiImoJhYiIqCUUIiKillCIiIhaQiEiImoJhYiIqPX91tkR6zJr7pVNlxAx0NJSiIiIWkIhIiJqCYWIiKglFCIiopZQiIiIWkIhIiJqCYWIiKj1LBQknSNppaQ7WsZtL+kaSfeU39u1TDtR0iJJP5N0UK/qioiItetlS+E84OBR4+YC823vAcwvw0jaEzgK2Ks850uSpvWwtoiIaKNnoWD7emDVqNGHA+eXx+cDR7SMv8T247bvAxYB+/aqtoiIaK/fxxR2tL0coPzeoYzfBVjSMt/SMu6PSJojaYGkBcPDwz0tNiJi0EyUA81qM87tZrR9lu3ZtmcPDQ31uKyIiMHS71BYIWkngPJ7ZRm/FJjZMt8MYFmfa4uIGHj9DoV5wDHl8THAFS3jj5K0qaTdgD2Am/pcW0TEwOvZrbMlXQzsB0yXtBQ4BTgDuFTSccD9wJEAtu+UdClwF7AGOMH2E72qLSIi2utZKNg+ei2T9l/L/KcDp/eqnoiIWL+JcqA5IiImgPWGQjn984TWq48jImJq6qSlcBSwM/BjSZdIOkhSu1NIIyJikltvKNheZPtk4HnARcA5wP2STpW0fa8LjIiI/unomIKkfYDPAp8GLgPeCKwGru1daRER0W/rPftI0s3Aw8DZwFzbj5dJN0p6dQ9ri4iIPuvklNQjbd/bboLtv+pyPRExwcyae2XXl7n4jEO6vszojk66j94haduRAUnbSTqtdyVFRERTOgmF19t+eGTA9q+AN/SsooiIaEwnoTBN0qYjA5I2BzZdx/wRETFJdXJM4QJgvqRzqW5n/Xae+qKciIiYQtYbCrY/Jel2qnsWCfi47e/1vLKIiOi7jm6IZ/sq4Koe1xIREQ3r5N5HfyXpHkm/lrRa0iOSVvejuIiI6K9OWgqfAv7C9sJeFxMREc3q5OyjFQmEiIjB0ElLYYGkbwD/Bxi5xQW2L+9VURER0YxOQmEb4DfA61rGGUgoRERMMZ2cknpst1cq6b8D76AKl9uBY4EtgG8As4DFwH8tV09HRESfdHL20fMkzZd0RxneR9KHxrpCSbsA7wVm294bmEb1RT5zgfm29wDml+GIiOijTg40fwU4EfgDgO3bqHbi47ExsLmkjalaCMuAw3nqSunzgSPGuY6IiNhAnYTCFrZvGjVuzVhXaPsB4DPA/cBy4Ne2rwZ2tL28zLMc2KHd8yXNKd8bvWB4eHisZURERBudhMKDkp5D1f+PpDdS7czHRNJ2VK2C3ai++3lLSW/u9Pm2z7I92/bsoaGhsZYRERFtdHL20QnAWcALJD0A3Ad0vBNv4wDgPtvDAJIuB14FrJC0k+3lknYCVo5jHRERMQadnH10L3CApC2BjWw/Ms513g+8UtIWwG+pbrS3AHgMOAY4o/y+YpzriYiIDdTJdzR/ZNQwALY/NpYV2r5R0jeBW6iOTfyEqiWyFXCppOOoguPIsSw/IiLGrpPuo8daHm8GHAqM67YXtk8BThk1+nGqVkNERDSkk+6jz7YOS/oMMK9nFUVERGM6OftotC2A3btdSERENK+TYwq3U05Hpbr6eAgY0/GEiIiY2Do5pnBoy+M1VLfSHvPFaxERMXF1EgqjT0HdZuQMJADbq7paUURENKaTULgFmAn8ChCwLdUpo1B1K+X4QkTEFNHJgebvUn0d53Tbz6TqTrrc9m62EwgREVNIJ6HwctvfGRmwfRXw570rKSIimtJJ99GD5fsTLqDqLnoz8FBPq4qIiEZ00lI4muo01G+Vn6EyLiIipphOrmheBbxP0la2H+1DTRER0ZBOLl57FfBVqhvW7SrpPwF/Y/tdvS4uJr5Zc69suoSI6KJOuo8+DxxEOY5g+6fAn/WyqIiIaEZH9z6yvWTUqCd6UEtERDSsk7OPlpQuJEt6BvBexnnr7IiImJg6aSkcT/WVnLsAS4EXl+GIiJhi1tlSkDQNONP2m/pUT0RENGidLQXbTwBDpdsoIiKmuE6OKSwGfihpHi1fzWn7c70qKiIimrHWloKkr5eHfw18u8y7dcvPmEnaVtI3Jd0taaGkP5W0vaRrJN1Tfm83nnVERMSGW1dL4WWSnk11m+wvdnm9XwC+a/uNpWtqC+AkYL7tMyTNBeYCH+zyeiMiYh3WFQpfprpt9m7AgpbxYhzfoyBpG6qL394GYPv3wO8lHQ7sV2Y7H7iOhEJERF+ttfvI9j/ZfiFwru3dW37G+z0KuwPDwLmSfiLpq5K2BHa0vbysezmwQ7snS5ojaYGkBcPDw+MoIyIiRlvvdQq2/7bL69wYeCnwP22/hOrg9dxOn2z7LNuzbc8eGhrqcmkREYOto9tcdNlSYKntG8vwN6lCYoWknQDK75UN1BYRMdD6Hgq2f0l164znl1H7A3cB84BjyrhjgCv6XVtExKDr5DqFXngPcGE58+he4FiqgLpU0nFUZzwd2VBtEREDq5FQsH0rMLvNpP37XEpERLRo4phCRERMUAmFiIioJRQiIqKWUIiIiFpTZx9FA2bNvbLpEiJigktLISIiagmFiIioJRQiIqKWUIiIiFpCISIiagmFiIio5ZTUiOi7bp8evfiMQ7q6vEGWlkJERNQSChERUUsoRERELaEQERG1hEJERNQSChERUWssFCRNk/QTSd8uw9tLukbSPeX3dk3VFhExqJpsKbwPWNgyPBeYb3sPYH4ZjoiIPmokFCTNAA4Bvtoy+nDg/PL4fOCIPpcVETHwmmopnAl8AHiyZdyOtpcDlN87NFBXRMRA63soSDoUWGn75jE+f46kBZIWDA8Pd7m6iIjB1kRL4dXAYZIWA5cAr5V0AbBC0k4A5ffKdk+2fZbt2bZnDw0N9avmiIiB0PdQsH2i7Rm2ZwFHAdfafjMwDzimzHYMcEW/a4uIGHQT6TqFM4ADJd0DHFiGIyKijxq9dbbt64DryuOHgP2brCciYtBNpJZCREQ0LKEQERG1hEJERNQSChERUUsoRERELaEQERG1hEJERNQSChERUUsoRERELaEQERG1hEJERNQSChERUUsoRERELaEQERG1hEJERNQSChERUUsoRERELaEQERG1hEJERNT6HgqSZkr6vqSFku6U9L4yfntJ10i6p/zert+1RUQMuiZaCmuA99t+IfBK4ARJewJzgfm29wDml+GIiOijvoeC7eW2bymPHwEWArsAhwPnl9nOB47od20REYNu4yZXLmkW8BLgRmBH28uhCg5JO6zlOXOAOQC77rprnyptxqy5VzZdQkQMmMYONEvaCrgM+Dvbqzt9nu2zbM+2PXtoaKh3BUZEDKBGQkHSJlSBcKHty8voFZJ2KtN3AlY2UVtExCBr4uwjAWcDC21/rmXSPOCY8vgY4Ip+1xYRMeiaOKbwauAtwO2Sbi3jTgLOAC6VdBxwP3BkA7VFRAy0voeC7R8AWsvk/ftZS0REPF2jZx9FRHRDt8/UW3zGIV1d3mSS21xEREQtoRAREbWEQkRE1HJMoYtyBXJETHZpKURERC2hEBERtYRCRETUEgoREVEb6APNOTAcEe30Yt8wWS6IS0shIiJqCYWIiKglFCIiopZQiIiIWkIhIiJqCYWIiKglFCIiopZQiIiI2kBfvBYR0S+T5dvhJlxLQdLBkn4maZGkuU3XExExSCZUKEiaBvwL8HpgT+BoSXs2W1VExOCYUKEA7Asssn2v7d8DlwCHN1xTRMTAmGjHFHYBlrQMLwVe0TqDpDnAnDL4qKSfbcDypwMPjqvCiWUqbU+2ZWKaStsCU2h79Mlxbcuz1zZhooWC2ozz0wbss4CzxrRwaYHt2WN57kQ0lbYn2zIxTaVtgam1Pb3alonWfbQUmNkyPANY1lAtEREDZ6KFwo+BPSTtJukZwFHAvIZriogYGBOq+8j2GknvBr4HTAPOsX1nF1cxpm6nCWwqbU+2ZWKaStsCU2t7erItsr3+uSIiYiBMtO6jiIhoUEIhIiJqAxcKkj4u6TZJt0q6WtLOTdc0VpI+Lenusj3fkrRt0zWNh6QjJd0p6UlJk/K0walymxZJ50haKemOpmsZL0kzJX1f0sLy+Xpf0zWNlaTNJN0k6adlW07t+joG7ZiCpG1sry6P3wvsafv4hssaE0mvA64tB+g/CWD7gw2XNWaSXgg8Cfwv4O9tL2i4pA1SbtPyc+BAqtOrfwwcbfuuRgsbA0l/BjwKfM323k3XMx6SdgJ2sn2LpK2Bm4EjJun7ImBL249K2gT4AfA+2zd0ax0D11IYCYRiS0ZdHDeZ2L7a9poyeAPVdR2Tlu2FtjfkCvWJZsrcpsX29cCqpuvoBtvLbd9SHj8CLKS6e8Kk48qjZXCT8tPVfdjAhQKApNMlLQHeBHyk6Xq65O3AVU0XMeDa3aZlUu58pipJs4CXADc2XMqYSZom6VZgJXCN7a5uy5QMBUn/KumONj+HA9g+2fZM4ELg3c1Wu27r25Yyz8nAGqrtmdA62Z5JbL23aYnmSNoKuAz4u1E9BpOK7Sdsv5iqZ2BfSV3t3ptQF691i+0DOpz1IuBK4JQeljMu69sWSccAhwL7exIcINqA92Yyym1aJqjS/34ZcKHty5uupxtsPyzpOuBgoGsnBEzJlsK6SNqjZfAw4O6mahkvSQcDHwQOs/2bpuuJ3KZlIioHZ88GFtr+XNP1jIekoZGzDCVtDhxAl/dhg3j20WXA86nOcvkFcLztB5qtamwkLQI2BR4qo26YrGdSAUj6S+CLwBDwMHCr7YMaLWoDSXoDcCZP3abl9GYrGhtJFwP7Ud1qegVwiu2zGy1qjCS9Bvh34Haqv3uAk2x/p7mqxkbSPsD5VJ+vjYBLbX+sq+sYtFCIiIi1G7juo4iIWLuEQkRE1BIKERFRSyhEREQtoRAREbWEQkRE1BIKERFRSyhEdJGkl5fvt9hM0pblnveT+tbTMVhy8VpEl0k6DdgM2BxYavsTDZcU0bGEQkSXlfse/Rj4HfAq2080XFJEx9J9FNF92wNbAVtTtRgiJo20FCK6TNI8qm9d243qayAn9Hd2RLSakt+nENEUSW8F1ti+qHxn848kvdb2tU3XFtGJtBQiIqKWYwoREVFLKERERC2hEBERtYRCRETUEgoREVFLKERERC2hEBERtf8P4xLn6K09xRAAAAAASUVORK5CYII=", + "image/png": "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", "text/plain": [ "
" ] @@ -1057,7 +1172,7 @@ "id": "wkZR0gDWRAgK" }, "source": [ - "## What is going on behind the scenes?" + "### What is going on behind the scenes?" ] }, { @@ -1069,7 +1184,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -1077,7 +1192,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1087,10 +1202,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 27, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -1111,7 +1226,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 31, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1126,7 +1241,7 @@ "[z]" ] }, - "execution_count": 28, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -1137,7 +1252,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 32, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1151,7 +1266,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{(1,) of 2} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{(2,) of 0} [id E]\n", @@ -1161,10 +1276,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 29, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -1182,23 +1297,23 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [2.0794566 2.98909647]\n", - "Sample 1: [2.0794566 2.98909647]\n", - "Sample 2: [2.0794566 2.98909647]\n", - "Sample 3: [2.0794566 2.98909647]\n", - "Sample 4: [2.0794566 2.98909647]\n", - "Sample 5: [2.0794566 2.98909647]\n", - "Sample 6: [2.0794566 2.98909647]\n", - "Sample 7: [2.0794566 2.98909647]\n", - "Sample 8: [2.0794566 2.98909647]\n", - "Sample 9: [2.0794566 2.98909647]\n" + "Sample 0: [ 0.41471699 -1.66433184]\n", + "Sample 1: [ 0.41471699 -1.66433184]\n", + "Sample 2: [ 0.41471699 -1.66433184]\n", + "Sample 3: [ 0.41471699 -1.66433184]\n", + "Sample 4: [ 0.41471699 -1.66433184]\n", + "Sample 5: [ 0.41471699 -1.66433184]\n", + "Sample 6: [ 0.41471699 -1.66433184]\n", + "Sample 7: [ 0.41471699 -1.66433184]\n", + "Sample 8: [ 0.41471699 -1.66433184]\n", + "Sample 9: [ 0.41471699 -1.66433184]\n" ] } ], @@ -1216,23 +1331,23 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [ 0.60775572 -2.76146171]\n", - "Sample 1: [0.27703455 0.72307788]\n", - "Sample 2: [ 0.76206083 -0.95175108]\n", - "Sample 3: [-0.25764557 2.52677943]\n", - "Sample 4: [0.36130515 0.90812824]\n", - "Sample 5: [-0.28749055 0.93701648]\n", - "Sample 6: [-0.63578891 0.53510859]\n", - "Sample 7: [-0.79113555 0.51242587]\n", - "Sample 8: [-1.54983484 -1.24417963]\n", - "Sample 9: [-1.31482848 0.48791946]\n" + "Sample 0: [1.35387229 0.75309318]\n", + "Sample 1: [1.00607968 4.54133508]\n", + "Sample 2: [ 2.18823767 -0.12672494]\n", + "Sample 3: [-1.17657973 0.05240525]\n", + "Sample 4: [-0.3120294 2.10070537]\n", + "Sample 5: [-0.45243648 0.6181366 ]\n", + "Sample 6: [-0.45866459 -2.68744226]\n", + "Sample 7: [-0.86366276 -0.26674929]\n", + "Sample 8: [ 0.00312593 -2.03032093]\n", + "Sample 9: [ 0.59540905 -1.25044899]\n" ] } ], @@ -1243,12 +1358,12 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 35, "metadata": {}, "outputs": [ { "data": { - "image/png": "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gIQIcAAAEiLAAQBIiAAHACAhAhwAgIQIcAAAEiLAAQBIiAAHACCh7robQCEu816sq7e3SJ3myEiROjE+XqRO9yHri9SJ0dEidboOPrTjGjFQZl159z1F6sRAX5E62rK1SJmuNauL1Imh4SJ13N/589PcvadAJ1IMDxWpU2q/o2iWqbPMMAIHACAhAhwAgIQIcAAAEiLAAQBIiAAHACAhAhwAgIQIcAAAEiLAAQBIqPYAt92w/UPbX6y7FwAAsqg9wCW9WtLGupsAACCTWgPc9gZJvyvpY3X2AQBANnWPwM+S9AZJfBEuAABzUFuA2362pDsj4gczTHeG7atsXzWqMhcVAAAguzpH4E+QdLrtTZIukPQ025+eOFFEnB0RJ0XEST0qdLUjAACSqy3AI+LNEbEhIo6W9AJJl0XES+rqBwCATOo+Bg4AAO6H7robkKSIuFzS5TW3MXeL6WL2JWoU1NXbW6bOmtVF6qivTD8eXFGkTgx03s/YmoECnUh3n7yuSJ2DNpU5R2X4IWuL1BnYOlKkTs/Ntxepo67O9xddhx5SoBHJd24rUieahfY742XqNIeHitQpsm9fgH0yI3AAABIiwAEASIgABwAgIQIcAICECHAAABIiwAEASIgABwAgIQIcAICECHAAABIiwAEASIgABwAgIQIcAICECHAAABIiwAEASIgABwAgIQIcAICECHAAABLqrrsBSHLn76O6ensLNCKpUeY9XddBq4vUUV9fkTKxaqBIneFDVxapc8/6zl96430u0Ik0uqpIGe05vMw2ODZQZrm6xsv042MOLVKnseuejmt4z1CBTqTm0HCROl2DK4rUifEy/ZTYl0qSotl5jWK9TH0XI3AAABIiwAEASIgABwAgIQIcAICECHAAABIiwAEASIgABwAgIQIcAICECHAAABIiwAEASIgABwAgIQIcAICECHAAABIiwAEASIgABwAgIQIcAICEuutuAJIbjc5r9BRalb09ZeoM9BcpE4Nl6mx/9NoidRojRcpo+4nuuIabBRqR1Cy0yvccHUXqhMvUGT6o89eVJK0aHChSp39750907929BTqRunbtKlJH42U2wlL7r1Ij0uZIgRd6FHqBToMROAAACRHgAAAkRIADAJAQAQ4AQEIEOAAACRHgAAAkRIADAJAQAQ4AQEIEOAAACRHgAAAkRIADAJAQAQ4A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", + "image/png": "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", "text/plain": [ "
" ] @@ -1272,7 +1387,7 @@ "id": "wPw9kCvASOeJ" }, "source": [ - "## Enough with Random Variables, I want to see some (log)probabilities!" + "### Enough with Random Variables, I want to see some (log)probabilities!" ] }, { @@ -1284,7 +1399,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 36, "metadata": {}, "outputs": [ { @@ -1297,10 +1412,10 @@ " $$" ], "text/plain": [ - "" + "" ] }, - "execution_count": 33, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -1318,7 +1433,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 37, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1333,7 +1448,7 @@ "{'z': array([0., 0.])}" ] }, - "execution_count": 34, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -1352,7 +1467,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 38, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1367,7 +1482,7 @@ "{'z': -2.53}" ] }, - "execution_count": 35, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } @@ -1385,7 +1500,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 39, "metadata": {}, "outputs": [ { @@ -1394,7 +1509,7 @@ "-2.5310242469692907" ] }, - "execution_count": 36, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -1414,7 +1529,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 40, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1429,7 +1544,7 @@ "array(-2.53102425)" ] }, - "execution_count": 37, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -1445,7 +1560,7 @@ "id": "yxG5UHslGDEv" }, "source": [ - "**Remark:** A similar dispatch strategy is used for `logcdf` and `get_moment`" + "**Remark:** A similar dispatch strategy is used for `logcdf` and `get_moment`." ] }, { @@ -1454,19 +1569,14 @@ "id": "WdZcUfvLUkwK" }, "source": [ - "## What are value variables and why are they important?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "RV and value variables can be observed in these `scipy` operations:" + "### What are value variables and why are they important?\n", + "\n", + "As he have seen above, a `logp` graph does not have random variables. Instead it's defined in terms of input (value) variables. When we want to sample, each random variable (RV) is replaced by a respective input (value) variable. Let's see how this works through some examples. RV and value variables can be observed in these `scipy` operations:" ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 41, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1478,10 +1588,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 38, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -1495,16 +1605,16 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([-0.57530986, 2.05065683, -0.36906955])" + "array([-0.9094102 , -0.20213846, -1.27799733])" ] }, - "execution_count": 39, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -1516,7 +1626,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 43, "metadata": {}, "outputs": [ { @@ -1525,7 +1635,7 @@ "-1.7001885332046727" ] }, - "execution_count": 40, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -1539,12 +1649,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Let's look at how these value variables behave in a simple model." + "Next, let's look at how these value variables behave in a simple model." ] }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 44, "metadata": { "id": "dejQBR2FUnM3" }, @@ -1565,7 +1675,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 45, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1580,7 +1690,7 @@ "{mu: mu, sigma: sigma_log__, x: x}" ] }, - "execution_count": 42, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } @@ -1598,7 +1708,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 46, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1613,7 +1723,7 @@ "[mu, sigma_log__, x]" ] }, - "execution_count": 43, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } @@ -1631,7 +1741,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 47, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1646,7 +1756,7 @@ "array([ -1.61208571, -11.32440364, 9.08106147])" ] }, - "execution_count": 44, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -1671,7 +1781,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 48, "metadata": {}, "outputs": [ { @@ -1703,7 +1813,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 49, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1718,7 +1828,7 @@ "[array(-1.61208571), array(-11.32440364), array(9.08106147)]" ] }, - "execution_count": 46, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } @@ -1728,11 +1838,11 @@ ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], - "source": [] + "source": [ + "If you want to go deeper into the internals of `aesara` and `pymc` please take a look into the [distribution developer guide](https://github.com/pymc-devs/pymc/blob/1005d20b3c12d9b9a424c069f6a0f9962d73c41d/docs/source/contributing/developer_guide_implementing_distribution.md)." + ] } ], "metadata": { From c1dcc8936b11b07b0f3b5607d50a9dd26d3d2e2c Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Fri, 3 Jun 2022 22:14:52 +0200 Subject: [PATCH 15/30] move notebook to right folder --- docs/source/learn/core_notebooks/index.md | 1 + docs/{ => source/learn/core_notebooks}/pymc_aesara.ipynb | 0 2 files changed, 1 insertion(+) rename docs/{ => source/learn/core_notebooks}/pymc_aesara.ipynb (100%) diff --git a/docs/source/learn/core_notebooks/index.md b/docs/source/learn/core_notebooks/index.md index 480d8d957b..d849b078da 100644 --- a/docs/source/learn/core_notebooks/index.md +++ b/docs/source/learn/core_notebooks/index.md @@ -9,4 +9,5 @@ GLM_linear model_comparison posterior_predictive dimensionality +pymc_aesara ::: diff --git a/docs/pymc_aesara.ipynb b/docs/source/learn/core_notebooks/pymc_aesara.ipynb similarity index 100% rename from docs/pymc_aesara.ipynb rename to docs/source/learn/core_notebooks/pymc_aesara.ipynb From 1318f24bd2a826a2f1f2bd08cb1238ec25520608 Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Fri, 3 Jun 2022 22:36:11 +0200 Subject: [PATCH 16/30] remove links --- .../learn/core_notebooks/pymc_aesara.ipynb | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/docs/source/learn/core_notebooks/pymc_aesara.ipynb b/docs/source/learn/core_notebooks/pymc_aesara.ipynb index 55297eed28..787e236c5a 100644 --- a/docs/source/learn/core_notebooks/pymc_aesara.ipynb +++ b/docs/source/learn/core_notebooks/pymc_aesara.ipynb @@ -10,7 +10,7 @@ "\n", "**Authors:** [Ricardo Vieira](https://github.com/ricardoV94) and [Juan Orduz](https://juanitorduz.github.io/)\n", "\n", - "In this notebook we want to give an introduction of how PyMC models translate to Aesara graphs. The purpose is not to give a detailed description of all [`aesara`](https://github.com/aesara-devs/aesara)'s capabilities but rather focus on the main concepts to understand its connection with PyMC. For a more detailed description of the project please refer to the [official documentation](https://aesara.readthedocs.io/en/latest/index.html).\n", + "In this notebook we want to give an introduction of how PyMC models translate to Aesara graphs. The purpose is not to give a detailed description of all `aesara`'s capabilities but rather focus on the main concepts to understand its connection with PyMC. For a more detailed description of the project please refer to the official documentation.\n", "\n", "\n", "**Remark:** For a summary on PyMC internals and design please see [Architecture.md](https://github.com/pymc-devs/pymc/blob/main/ARCHITECTURE.md)." @@ -175,7 +175,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can use the [`aesara.dprint`](https://aesara.readthedocs.io/en/latest/library/index.html#aesara.dprint) function to print the computational graph of any given tensor." + "We can use the `aesara.dprint` function to print the computational graph of any given tensor." ] }, { @@ -219,7 +219,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note that this graph does not do any computation (yet!). It is simply defining the sequence of steps to be done. The aesara function [`aesara.function`](https://aesara.readthedocs.io/en/latest/library/compile/function.html#aesara.compile.function.function) is used to define a callable object so that we can push values trough the graph." + "Note that this graph does not do any computation (yet!). It is simply defining the sequence of steps to be done. We can use `aesara.function` to define a callable object so that we can push values trough the graph." ] }, { @@ -583,7 +583,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note that this is very similar to the output of the [`aesara.dprint`](https://aesara.readthedocs.io/en/latest/library/index.html#aesara.dprint) function introduced above." + "Note that this is very similar to the output of the `aesara.dprint` function introduced above." ] }, { @@ -721,7 +721,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "To modify the graph we need to use the [`aesara.clone_replace`](https://aesara.readthedocs.io/en/latest/library/index.html?highlight=clone_replace#aesara.clone_replace) function, which *returns a copy of the initial subgraph with the corresponding substitutions.*" + "To modify the graph we need to use the `aesara.clone_replace` function, which *returns a copy of the initial subgraph with the corresponding substitutions.*" ] }, { @@ -897,18 +897,9 @@ "source": [ "### Aesara RandomVariables\n", "\n", - "Now that we have seen aesara's basics we want to move in the direction of random variables. Here are the modules we want to cover:\n", + "Now that we have seen aesara's basics we want to move in the direction of random variables.\n", "\n", - "* [Random Module](https://github.com/aesara-devs/aesara/tree/main/aesara/tensor/random)\n", - "* [RandomVariable Op](https://github.com/aesara-devs/aesara/blob/main/aesara/tensor/random/op.py)\n", - "* [Random Variables](https://github.com/aesara-devs/aesara/blob/main/aesara/tensor/random/basic.py)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "How to generate random numbers in [`numpy`](https://numpy.org/)? To illustrate it we can sample from a normal distribution:" + "How do we generate random numbers in `numpy`? To illustrate it we can sample from a normal distribution:" ] }, { From 54841a3fd0c1b57714d0df6504fcc4d342220933 Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Fri, 3 Jun 2022 22:45:21 +0200 Subject: [PATCH 17/30] remove links and typos --- .../learn/core_notebooks/pymc_aesara.ipynb | 119 +++++++++--------- 1 file changed, 59 insertions(+), 60 deletions(-) diff --git a/docs/source/learn/core_notebooks/pymc_aesara.ipynb b/docs/source/learn/core_notebooks/pymc_aesara.ipynb index 787e236c5a..11b43a4a02 100644 --- a/docs/source/learn/core_notebooks/pymc_aesara.ipynb +++ b/docs/source/learn/core_notebooks/pymc_aesara.ipynb @@ -6,14 +6,13 @@ "id": "JUC0Xac4JTNS" }, "source": [ - "# PyMC and Aesara \n", + "(pymc_aesara)=\n", "\n", - "**Authors:** [Ricardo Vieira](https://github.com/ricardoV94) and [Juan Orduz](https://juanitorduz.github.io/)\n", - "\n", - "In this notebook we want to give an introduction of how PyMC models translate to Aesara graphs. The purpose is not to give a detailed description of all `aesara`'s capabilities but rather focus on the main concepts to understand its connection with PyMC. For a more detailed description of the project please refer to the official documentation.\n", + "# PyMC and Aesara\n", "\n", + "**Authors:** [Ricardo Vieira](https://github.com/ricardoV94) and [Juan Orduz](https://juanitorduz.github.io/)\n", "\n", - "**Remark:** For a summary on PyMC internals and design please see [Architecture.md](https://github.com/pymc-devs/pymc/blob/main/ARCHITECTURE.md)." + "In this notebook we want to give an introduction of how PyMC models translate to Aesara graphs. The purpose is not to give a detailed description of all `aesara`'s capabilities but rather focus on the main concepts to understand its connection with PyMC. For a more detailed description of the project please refer to the official documentation." ] }, { @@ -78,7 +77,7 @@ "source": [ "## Introduction to Aesara\n", "\n", - "We start by looking into [aesara](https://github.com/aesara-devs/aesara/). According to their documentation\n", + "We start by looking into `aesara`. According to their documentation\n", "\n", "> Aesara is a Python library that allows one to define, optimize, and efficiently evaluate mathematical expressions involving multi-dimensional arrays." ] @@ -203,7 +202,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -336,7 +335,7 @@ "source": [ "### Aesara is clever!\n", "\n", - "Ont of the most important features of `aesara` is that it can automatically optimize the mathematical operations inside a graph. Let's consider a simple example:" + "One of the most important features of `aesara` is that it can automatically optimize the mathematical operations inside a graph. Let's consider a simple example:" ] }, { @@ -356,7 +355,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 10, @@ -400,7 +399,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -438,7 +437,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 12, @@ -611,7 +610,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 15, @@ -705,7 +704,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 18, @@ -750,7 +749,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 19, @@ -837,7 +836,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 21, @@ -915,7 +914,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -953,7 +952,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -963,7 +962,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 24, @@ -1006,7 +1005,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{(1,) of 2} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1016,7 +1015,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 25, @@ -1108,16 +1107,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: -0.5570661545478054\n", - "Sample 1: -0.5570661545478054\n", - "Sample 2: -0.5570661545478054\n", - "Sample 3: -0.5570661545478054\n", - "Sample 4: -0.5570661545478054\n", - "Sample 5: -0.5570661545478054\n", - "Sample 6: -0.5570661545478054\n", - "Sample 7: -0.5570661545478054\n", - "Sample 8: -0.5570661545478054\n", - "Sample 9: -0.5570661545478054\n" + "Sample 0: 1.3400735955681309\n", + "Sample 1: 1.3400735955681309\n", + "Sample 2: 1.3400735955681309\n", + "Sample 3: 1.3400735955681309\n", + "Sample 4: 1.3400735955681309\n", + "Sample 5: 1.3400735955681309\n", + "Sample 6: 1.3400735955681309\n", + "Sample 7: 1.3400735955681309\n", + "Sample 8: 1.3400735955681309\n", + "Sample 9: 1.3400735955681309\n" ] } ], @@ -1140,7 +1139,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1183,7 +1182,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1193,7 +1192,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 30, @@ -1257,7 +1256,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{(1,) of 2} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{(2,) of 0} [id E]\n", @@ -1267,7 +1266,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 32, @@ -1295,16 +1294,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [ 0.41471699 -1.66433184]\n", - "Sample 1: [ 0.41471699 -1.66433184]\n", - "Sample 2: [ 0.41471699 -1.66433184]\n", - "Sample 3: [ 0.41471699 -1.66433184]\n", - "Sample 4: [ 0.41471699 -1.66433184]\n", - "Sample 5: [ 0.41471699 -1.66433184]\n", - "Sample 6: [ 0.41471699 -1.66433184]\n", - "Sample 7: [ 0.41471699 -1.66433184]\n", - "Sample 8: [ 0.41471699 -1.66433184]\n", - "Sample 9: [ 0.41471699 -1.66433184]\n" + "Sample 0: [-1.06433442 -1.69408342]\n", + "Sample 1: [-1.06433442 -1.69408342]\n", + "Sample 2: [-1.06433442 -1.69408342]\n", + "Sample 3: [-1.06433442 -1.69408342]\n", + "Sample 4: [-1.06433442 -1.69408342]\n", + "Sample 5: [-1.06433442 -1.69408342]\n", + "Sample 6: [-1.06433442 -1.69408342]\n", + "Sample 7: [-1.06433442 -1.69408342]\n", + "Sample 8: [-1.06433442 -1.69408342]\n", + "Sample 9: [-1.06433442 -1.69408342]\n" ] } ], @@ -1329,16 +1328,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [1.35387229 0.75309318]\n", - "Sample 1: [1.00607968 4.54133508]\n", - "Sample 2: [ 2.18823767 -0.12672494]\n", - "Sample 3: [-1.17657973 0.05240525]\n", - "Sample 4: [-0.3120294 2.10070537]\n", - "Sample 5: [-0.45243648 0.6181366 ]\n", - "Sample 6: [-0.45866459 -2.68744226]\n", - "Sample 7: [-0.86366276 -0.26674929]\n", - "Sample 8: [ 0.00312593 -2.03032093]\n", - "Sample 9: [ 0.59540905 -1.25044899]\n" + "Sample 0: [-1.22830731 -1.7887124 ]\n", + "Sample 1: [-0.33505751 -1.672205 ]\n", + "Sample 2: [0.73347723 0.42387857]\n", + "Sample 3: [ 0.90310994 -1.69352849]\n", + "Sample 4: [0.6676563 0.40131898]\n", + "Sample 5: [-0.74382499 -5.86299866]\n", + "Sample 6: [-0.36282518 0.67259036]\n", + "Sample 7: [ 0.09500081 -0.11147948]\n", + "Sample 8: [-0.59640283 0.56318716]\n", + "Sample 9: [-0.30603682 2.27435531]\n" ] } ], @@ -1354,7 +1353,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1403,7 +1402,7 @@ " $$" ], "text/plain": [ - "" + "" ] }, "execution_count": 36, @@ -1579,7 +1578,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 41, @@ -1602,7 +1601,7 @@ { "data": { "text/plain": [ - "array([-0.9094102 , -0.20213846, -1.27799733])" + "array([0.40288959, 0.23006933, 0.86868214])" ] }, "execution_count": 42, @@ -1832,7 +1831,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "If you want to go deeper into the internals of `aesara` and `pymc` please take a look into the [distribution developer guide](https://github.com/pymc-devs/pymc/blob/1005d20b3c12d9b9a424c069f6a0f9962d73c41d/docs/source/contributing/developer_guide_implementing_distribution.md)." + "If you want to go deeper into the internals of `aesara` and `pymc` please take a look into the distribution developer guide." ] } ], From fe4ca51c814197dd8d3a8142f331808428008e7a Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Sat, 4 Jun 2022 13:39:54 +0200 Subject: [PATCH 18/30] fix suggestions n + 1 XD --- .../learn/core_notebooks/pymc_aesara.ipynb | 323 +++++++++++------- 1 file changed, 200 insertions(+), 123 deletions(-) diff --git a/docs/source/learn/core_notebooks/pymc_aesara.ipynb b/docs/source/learn/core_notebooks/pymc_aesara.ipynb index 11b43a4a02..e8219a1e07 100644 --- a/docs/source/learn/core_notebooks/pymc_aesara.ipynb +++ b/docs/source/learn/core_notebooks/pymc_aesara.ipynb @@ -41,7 +41,7 @@ "text": [ "\n", "Aesara version: 2.6.6\n", - "PyMC version: 4.0.0b6\n", + "PyMC version: 4.0.0\n", "\n" ] }, @@ -202,7 +202,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -355,7 +355,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 10, @@ -399,7 +399,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -437,7 +437,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 12, @@ -610,7 +610,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 15, @@ -704,7 +704,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 18, @@ -738,7 +738,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Elemwise{log,no_inplace} [id A] 'exp(log(x + y))'\n", + "Elemwise{log,no_inplace} [id A] 'log(exp(x + y))'\n", " |Elemwise{exp,no_inplace} [id B] 'exp(x + y)'\n", " |Elemwise{add,no_inplace} [id C] 'x + y'\n", " |InplaceDimShuffle{x} [id D]\n", @@ -749,7 +749,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 19, @@ -759,7 +759,7 @@ ], "source": [ "new_w = aesara.clone_replace(output=[w], replace={parent_of_w: new_parent_of_w})[0]\n", - "new_w.name = \"exp(log(x + y))\"\n", + "new_w.name = \"log(exp(x + y))\"\n", "aesara.dprint(new_w)" ] }, @@ -836,7 +836,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 21, @@ -914,7 +914,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -932,14 +932,14 @@ "\n", "fig, ax = plt.subplots()\n", "ax.hist(a, bins=15)\n", - "ax.set(title=\"Samples from a normal distribution\", xlabel=\"x\", ylabel=\"frequency\");" + "ax.set(title=\"Samples from a normal distribution\", ylabel=\"frequency\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Now let's do it in `aesara` via `pymc`." + "Now let's do it in `aesara` via `pymc`. Let's start by defining a `pymc` normal distribution." ] }, { @@ -952,7 +952,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -962,7 +962,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 24, @@ -980,33 +980,66 @@ "metadata": {}, "source": [ "Inputs are always in the following order:\n", - "1. rng shared variable\n", - "2. size\n", - "3. dtype (number code)\n", - "4. arg1\n", - "5. arg2\n", - "6. argn" + "1. `rng` shared variable\n", + "2. `size`\n", + "3. `dtype` (number code)\n", + "4. `arg1`\n", + "5. `arg2`\n", + "6. `argn`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "This input is created by default, but can be passed explicitly as well:" + "The first input is created by default, but can be passed explicitly as well. Let's do a small d-tour from the initial example to illustrate this." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "aesara.tensor.var.TensorVariable" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Define a numpy generator.\n", + "rng = np.random.default_rng(seed=123)\n", + "# Define an aesara Shared Variable.\n", + "shared_rng = aesara.shared(value=rng, borrow=True)\n", + "# We can now construct an aesara random variable (TensorVariable) out of it.\n", + "y = at.random.normal(0, 1, rng=shared_rng, name=\"y\")\n", + "type(y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we can compare the `dprint` output for `x` and `y`:" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y'\n", - " |RandomGeneratorSharedVariable() [id B]\n", - " |TensorConstant{(1,) of 2} [id C]\n", + " |RandomGeneratorSharedVariable() [id B]\n", + " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", " |TensorConstant{1} [id F]\n" @@ -1015,18 +1048,15 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 25, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "rng = np.random.default_rng(seed=123)\n", - "shared_rng = aesara.shared(rng, borrow=True)\n", - "y = at.random.normal(0, 1, rng=shared_rng, size=2, name=\"y\")\n", "aesara.dprint(y)" ] }, @@ -1034,21 +1064,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can sample by calling `.eval()` on the shared variable." + "We can sample by calling `.eval()` on the random variable." ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([-0.98912135, -0.36778665])" + "array(-0.98912135)" ] }, - "execution_count": 26, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -1066,23 +1096,23 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [-0.98912135 -0.36778665]\n", - "Sample 1: [-0.98912135 -0.36778665]\n", - "Sample 2: [-0.98912135 -0.36778665]\n", - "Sample 3: [-0.98912135 -0.36778665]\n", - "Sample 4: [-0.98912135 -0.36778665]\n", - "Sample 5: [-0.98912135 -0.36778665]\n", - "Sample 6: [-0.98912135 -0.36778665]\n", - "Sample 7: [-0.98912135 -0.36778665]\n", - "Sample 8: [-0.98912135 -0.36778665]\n", - "Sample 9: [-0.98912135 -0.36778665]\n" + "Sample 0: -0.9891213503478509\n", + "Sample 1: -0.9891213503478509\n", + "Sample 2: -0.9891213503478509\n", + "Sample 3: -0.9891213503478509\n", + "Sample 4: -0.9891213503478509\n", + "Sample 5: -0.9891213503478509\n", + "Sample 6: -0.9891213503478509\n", + "Sample 7: -0.9891213503478509\n", + "Sample 8: -0.9891213503478509\n", + "Sample 9: -0.9891213503478509\n" ] } ], @@ -1095,28 +1125,28 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This is also the case for the variable `x` defined above as a `pymc` distribution." + "Combing back to our initial `pymc` distribution example `x`:" ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: 1.3400735955681309\n", - "Sample 1: 1.3400735955681309\n", - "Sample 2: 1.3400735955681309\n", - "Sample 3: 1.3400735955681309\n", - "Sample 4: 1.3400735955681309\n", - "Sample 5: 1.3400735955681309\n", - "Sample 6: 1.3400735955681309\n", - "Sample 7: 1.3400735955681309\n", - "Sample 8: 1.3400735955681309\n", - "Sample 9: 1.3400735955681309\n" + "Sample 0: 0.02071066106028817\n", + "Sample 1: 0.02071066106028817\n", + "Sample 2: 0.02071066106028817\n", + "Sample 3: 0.02071066106028817\n", + "Sample 4: 0.02071066106028817\n", + "Sample 5: 0.02071066106028817\n", + "Sample 6: 0.02071066106028817\n", + "Sample 7: 0.02071066106028817\n", + "Sample 8: 0.02071066106028817\n", + "Sample 9: 0.02071066106028817\n" ] } ], @@ -1134,12 +1164,12 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 30, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1156,6 +1186,53 @@ "ax.set(title=\"Samples from a normal distribution\", xlabel=\"x\", ylabel=\"frequency\");" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Remark:** Observe that `x.owner` and `y.owner` are the same (aside from the generator itself)." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "normal_rv{0, (0, 0), floatX, False}(RandomGeneratorSharedVariable(), TensorConstant{[]}, TensorConstant{11}, TensorConstant{0}, TensorConstant{1})" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y.owner" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "normal_rv{0, (0, 0), floatX, False}(RandomGeneratorSharedVariable(), TensorConstant{[]}, TensorConstant{11}, TensorConstant{0}, TensorConstant{1.0})" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x.owner" + ] + }, { "cell_type": "markdown", "metadata": { @@ -1174,7 +1251,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 33, "metadata": {}, "outputs": [ { @@ -1182,7 +1259,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1192,10 +1269,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 30, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -1216,7 +1293,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 34, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1231,7 +1308,7 @@ "[z]" ] }, - "execution_count": 31, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -1242,7 +1319,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 35, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1256,7 +1333,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{(1,) of 2} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{(2,) of 0} [id E]\n", @@ -1266,10 +1343,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 32, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -1287,23 +1364,23 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [-1.06433442 -1.69408342]\n", - "Sample 1: [-1.06433442 -1.69408342]\n", - "Sample 2: [-1.06433442 -1.69408342]\n", - "Sample 3: [-1.06433442 -1.69408342]\n", - "Sample 4: [-1.06433442 -1.69408342]\n", - "Sample 5: [-1.06433442 -1.69408342]\n", - "Sample 6: [-1.06433442 -1.69408342]\n", - "Sample 7: [-1.06433442 -1.69408342]\n", - "Sample 8: [-1.06433442 -1.69408342]\n", - "Sample 9: [-1.06433442 -1.69408342]\n" + "Sample 0: [ 1.97817753 -0.28751002]\n", + "Sample 1: [ 1.97817753 -0.28751002]\n", + "Sample 2: [ 1.97817753 -0.28751002]\n", + "Sample 3: [ 1.97817753 -0.28751002]\n", + "Sample 4: [ 1.97817753 -0.28751002]\n", + "Sample 5: [ 1.97817753 -0.28751002]\n", + "Sample 6: [ 1.97817753 -0.28751002]\n", + "Sample 7: [ 1.97817753 -0.28751002]\n", + "Sample 8: [ 1.97817753 -0.28751002]\n", + "Sample 9: [ 1.97817753 -0.28751002]\n" ] } ], @@ -1321,23 +1398,23 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [-1.22830731 -1.7887124 ]\n", - "Sample 1: [-0.33505751 -1.672205 ]\n", - "Sample 2: [0.73347723 0.42387857]\n", - "Sample 3: [ 0.90310994 -1.69352849]\n", - "Sample 4: [0.6676563 0.40131898]\n", - "Sample 5: [-0.74382499 -5.86299866]\n", - "Sample 6: [-0.36282518 0.67259036]\n", - "Sample 7: [ 0.09500081 -0.11147948]\n", - "Sample 8: [-0.59640283 0.56318716]\n", - "Sample 9: [-0.30603682 2.27435531]\n" + "Sample 0: [-0.01358113 0.94260086]\n", + "Sample 1: [0.0311764 0.94275249]\n", + "Sample 2: [ 0.84039992 -0.77855351]\n", + "Sample 3: [-0.89308395 0.40403179]\n", + "Sample 4: [-0.75932708 -0.09285537]\n", + "Sample 5: [0.39344721 0.86669537]\n", + "Sample 6: [-0.70707728 1.14834117]\n", + "Sample 7: [-2.21317863 -2.9218513 ]\n", + "Sample 8: [ 2.54296683 -0.05294407]\n", + "Sample 9: [0.96766252 1.77623172]\n" ] } ], @@ -1348,12 +1425,12 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 38, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1389,7 +1466,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 39, "metadata": {}, "outputs": [ { @@ -1402,10 +1479,10 @@ " $$" ], "text/plain": [ - "" + "" ] }, - "execution_count": 36, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -1423,7 +1500,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 40, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1438,7 +1515,7 @@ "{'z': array([0., 0.])}" ] }, - "execution_count": 37, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -1457,7 +1534,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 41, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1472,7 +1549,7 @@ "{'z': -2.53}" ] }, - "execution_count": 38, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -1490,7 +1567,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 42, "metadata": {}, "outputs": [ { @@ -1499,7 +1576,7 @@ "-2.5310242469692907" ] }, - "execution_count": 39, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -1519,7 +1596,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 43, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1534,7 +1611,7 @@ "array(-2.53102425)" ] }, - "execution_count": 40, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -1566,7 +1643,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 44, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1578,10 +1655,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 41, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } @@ -1595,16 +1672,16 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([0.40288959, 0.23006933, 0.86868214])" + "array([ 0.38292667, 0.83839968, -1.29070168])" ] }, - "execution_count": 42, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } @@ -1616,7 +1693,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 46, "metadata": {}, "outputs": [ { @@ -1625,7 +1702,7 @@ "-1.7001885332046727" ] }, - "execution_count": 43, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } @@ -1644,7 +1721,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 47, "metadata": { "id": "dejQBR2FUnM3" }, @@ -1665,7 +1742,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 48, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1680,7 +1757,7 @@ "{mu: mu, sigma: sigma_log__, x: x}" ] }, - "execution_count": 45, + "execution_count": 48, "metadata": {}, "output_type": "execute_result" } @@ -1698,7 +1775,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 49, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1713,7 +1790,7 @@ "[mu, sigma_log__, x]" ] }, - "execution_count": 46, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } @@ -1731,7 +1808,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 50, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1746,7 +1823,7 @@ "array([ -1.61208571, -11.32440364, 9.08106147])" ] }, - "execution_count": 47, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } @@ -1771,7 +1848,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 51, "metadata": {}, "outputs": [ { @@ -1803,7 +1880,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 52, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1818,7 +1895,7 @@ "[array(-1.61208571), array(-11.32440364), array(9.08106147)]" ] }, - "execution_count": 49, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" } @@ -1831,7 +1908,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "If you want to go deeper into the internals of `aesara` and `pymc` please take a look into the distribution developer guide." + "If you want to go deeper into the internals of `aesara` and `pymc` please take a look into the [distribution developer guide](implementing-a-distribution)." ] } ], From af34f1b473de3e7f652116b446bdb9f65f9853f9 Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Sat, 4 Jun 2022 22:59:46 +0200 Subject: [PATCH 19/30] address further comments --- .../learn/core_notebooks/pymc_aesara.ipynb | 435 +++++++++++------- 1 file changed, 257 insertions(+), 178 deletions(-) diff --git a/docs/source/learn/core_notebooks/pymc_aesara.ipynb b/docs/source/learn/core_notebooks/pymc_aesara.ipynb index e8219a1e07..cd61d4cd30 100644 --- a/docs/source/learn/core_notebooks/pymc_aesara.ipynb +++ b/docs/source/learn/core_notebooks/pymc_aesara.ipynb @@ -26,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 55, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -40,18 +40,10 @@ "output_type": "stream", "text": [ "\n", - "Aesara version: 2.6.6\n", - "PyMC version: 4.0.0\n", + "# Aesara version: 2.6.6\n", + "# PyMC version: 4.0.0\n", "\n" ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/juanitorduz/opt/anaconda3/envs/pymc-dev-py39/lib/python3.9/site-packages/pkg_resources/__init__.py:123: PkgResourcesDeprecationWarning: main is an invalid version and will not be supported in a future release\n", - " warnings.warn(\n" - ] } ], "source": [ @@ -64,8 +56,8 @@ "\n", "\n", "print(f\"\"\"\n", - "Aesara version: {aesara.__version__}\n", - "PyMC version: {pm.__version__}\n", + "# Aesara version: {aesara.__version__}\n", + "# PyMC version: {pm.__version__}\n", "\"\"\")" ] }, @@ -202,7 +194,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -355,7 +347,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 10, @@ -399,7 +391,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -437,7 +429,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 12, @@ -610,7 +602,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 15, @@ -630,7 +622,7 @@ "source": [ "### Graph manipulation 101\n", "\n", - "One of the most interesting features of `aesara` is the ability to manipulate the computational graph, something that is not possible with TensorFlow or PyTorch. Here we continue with the example above in order to illustrate the main idea around this technique." + "Another interesting feature of Aesara is the ability to manipulate the computational graph, something that is not possible with TensorFlow or PyTorch. Here we continue with the example above in order to illustrate the main idea around this technique." ] }, { @@ -704,7 +696,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 18, @@ -749,7 +741,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 19, @@ -836,7 +828,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 21, @@ -914,7 +906,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEICAYAAACwDehOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAb+klEQVR4nO3de5RddX338fdHRORa0AwIgTiAeEHEUFO0Yi0VVAQK6hKFBxERjbTQ6pKnNYAKqLR4QbRaZYEgKPcWeOQBrKQIUi8gASEkBOQWSUhMQgDDRfOY8Hn+2L/ZHIYzmZPJnLMnmc9rrbNm79++ffc5Z/b3/H6/fZFtIiIiAF7QdAARETF2JClEREQtSSEiImpJChERUUtSiIiIWpJCRETUkhRixCSdJOn8UV6nJH1P0mOSfjWa6x5PJH1Y0s9WY/65kvYuw8dL+u4oxvKkpB3K8LmSvjiK6z5D0mdHa32RpLBWkvQWSb+Q9HtJj0r6uaS/aDquUfIW4O3AtrZ3bzqY8cj2v9j+6HDzSbpB0rDz2d7E9gNrGle7RGf7KNtfWNN1x7Ne2HQAsXokbQZcBfwdcCnwIuCvgOVNxjWKXg7Mtf1Uu4mSXmh7RY9j6rp1cb/WxX0aD1JTWPu8EsD2RbZX2v6D7WttzwSQtKOkn0haKukRSRdI2nxg4dJM8E+SZkp6StLZkraS9CNJT0j6b0lblHn7JVnSVEkLJC2UdOxQgUl6U6nBPC7pDkl7tkz7sKQHyjYelHRom+WPBL4L/GVpcjhZ0p6S5kv6tKTfAd+TtIGkr5eYFpThDco6Bub/Z0mLS8zvlrSvpN+UmtXxq9iH/ST9WtIySfMknbSKeQe2dWzLto5omf5nkr4vaYmk30r6jKQXtLwfP5d0uqRHgZNK08q3y2fxZJn+srJ/j0m6W9JuLeufJun+8p7eJek9Q8XaJvbDSkxLJZ0waFrdLCjpxZLOL/M9LumW8n05herHyLdKrN8q81vS0ZLuBe5tKXtFyyYmSJpe4v6ppJeX+Qa+by9sieUGSR+V9BrgDJ79bjxepj+nOUrSxyTdVz7nKyVt0zLNko6SdG95P/9dkjp9z8YN23mtRS9gM2ApcB7wLmCLQdNfQdX8sgHQB9wIfL1l+lzgJmArYCKwGLgN2K0s8xPgxDJvP2DgImBj4HXAEmDvMv0k4PwyPLHEtS/Vj423l/G+suwy4FVl3q2B1w6xfx8GftYyviewAvhSiW9D4PNlH7Ys6/8F8IVB838OWB/4WIn5QmBT4LXAH4Edhtj+nmU/XwDsCiwC3r2KeVeUeNYv+/70wGcCfB/4YdluP/Ab4MiW/VwB/ANVjX1D4FzgEeANwIvLZ/Eg8CFgPeCLwPUt2z8I2KbE+gHgKWDrdu/joLh3Bp4E3lre06+VWNp9rh8H/i+wUYnhDcBmZdoNwEcHrdvAdOAlwIYtZa8ow+cCT7Rs+xsDcfLs9+2FLeurt9Fun8r6vliG31bevz8v6/4mcOOg2K4CNgcmUX0v9mn6f3qsvVJTWMvYXkbV7m7gLGBJ+UW0VZl+n+3ptpfbXkL1D//Xg1bzTduLbD8M/A9ws+1f214OXEGVIFqdbPsp23cC3wMOaRPaB4FrbF9j+xnb04EZVAdKgGeAXSRtaHuh7dmrsdvPUCWq5bb/ABwKfN724rKPJwOHtcz/J+AU238CLgYmAN+w/UTZ7myqA/7z2L7B9p1lH2ZSJcTB71+rP5VY/mT7GqqD7askrUd1oD6ubHcucNqgOBfY/qbtFWW/AK6wfavtP1J9Fn+0/X3bK4FLaPlsbP+H7QUl1kuofpl30g/zPuAq2zeWz/yzVO/xUPv3UqqD+soS27Jh1v+vth9t2afBrm7Z9glUv/636yDu4RwKnGP7trLu48q6+1vmOdX247YfAq4HJo/CdtcpSQprIdtzbH/Y9rbALlS/Fr8OIGlLSRdLeljSMuB8qoNiq0Utw39oM77JoPnntQz/tmxvsJcDB5UmhsdL9f4tVL9cn6I6QB4FLJR0taRXd77HLCkHyQHblDiGimlpOYgO7A8Mv48ASHqjpOtLk8/vS8yD379WS/3cdvOny7onUPX3DI5zYst46/s6oOPPRtKHJN3e8n7vMkysA7Zp3Xb5fJYOMe8PgB8DF5emui9LWn+Y9bfbr7bTbT8JPEr779Tqes73oqx7Kc99z3/XMjzwWUWLJIW1nO27qarQu5Sif6WqRexqezOqX/Br2m7a+ituErCgzTzzgB/Y3rzltbHtU0ucP7b9dqqmo7upajmdGnwr3wVUSWi4mEbiQuBKYDvbf0bVjj2S9+8Rql/Zg+N8uGV8xLcoLu3wZwHHAC+1vTkwi85iXUjLZyppI6rawPOUGtDJtncG3gzsT9Wctar4h9uv1m1vQtXUtICq+QuqpqoBL1uN9T7neyFpY6r9enjIJeJ5khTWMpJeXTo2ty3j21E159xUZtmUqgnjcUkTgX8ahc1+VtJGkl4LHEHVjDHY+cDfSnqnpPVKB+WekrYtHZMHlH/S5SW+lW3W0amLgM9I6pM0gar/YLSul9gUeNT2HyXtDvyvkayk1FQuBU6RtGk5iH9qFOPcmOoguQSgdHDvssolnvWfwP6qTm1+EVWfSNtjgaS/kfS60hy2jCrRDXx2i4AdRhD7vi3b/gJV8+W80hT4MPDB8h36CLBjy3KLgG3Lcu1cCBwhabKqEw/+pax77ghiHLeSFNY+TwBvBG6W9BRVMpgFDJwVdDJVR9vvgauBy0dhmz8F7gOuA75q+9rBM9ieBxwIHE91oJpHlZBeUF7HUv2Se5Sqjf7v1yCeL1L1V8wE7qTqKB+tC6L+Hvi8pCeoks2la7Cuf6D69fsA8DOqg9Y5axwhYPsuqj6KX1IdLF8H/LzDZWcDR5d4FgKPAfOHmP1lVElkGTCH6rswkNi+AbyvnMnzb6sR/oXAiVTfhTdQ9QUM+BjV92Yp1UkBv2iZ9hOq/qDfSXqkzX5dR9U/clnZrx2Bg1cjrgBk5yE70V7poHsQWN853zxiXEhNISIiakkKERFRS/NRRETUUlOIiIjaWn1DvAkTJri/v7/pMCIi1iq33nrrI7b72k1bq5NCf38/M2bMaDqMiIi1iqTfDjUtzUcREVFLUoiIiFqSQkRE1JIUIiKilqQQERG1JIWIiKglKURERC1JISIiakkKERFRW6uvaI5YF/RPu3pU1zf31P1GdX0xviQpRKym0T6IR4wlaT6KiIha15KCpO0kXS9pjqTZkj5Ryl8iabqke8vfLVqWOU7SfZLukfTObsUWERHtdbOmsAI41vZrgDcBR0vaGZgGXGd7J6oHwU8DKNMOpnpY9z7AtyWt18X4IiJikK4lBdsLbd9Whp8A5gATgQOB88ps5wHvLsMHAhfbXm77QeA+YPduxRcREc/Xkz4FSf3AbsDNwFa2F0KVOIAty2wTgXkti80vZYPXNVXSDEkzlixZ0tW4IyLGm64nBUmbAJcBn7S9bFWztil73gOkbZ9pe4rtKX19bR8cFBERI9TVpCBpfaqEcIHty0vxIklbl+lbA4tL+Xxgu5bFtwUWdDO+iIh4rm6efSTgbGCO7a+1TLoSOLwMHw78sKX8YEkbSNoe2An4Vbfii4iI5+vmxWt7AIcBd0q6vZQdD5wKXCrpSOAh4CAA27MlXQrcRXXm0tG2V3YxvoiIGKRrScH2z2jfTwCw1xDLnAKc0q2YIiJi1XJFc0RE1JIUIiKilqQQERG1JIWIiKglKURERC1JISIiakkKERFRS1KIiIhakkJERNSSFCIiopakEBERtSSFiIioJSlEREQtSSEiImpJChERUUtSiIiIWjcfx3mOpMWSZrWUXSLp9vKaO/BENkn9kv7QMu2MbsUVERFD6+bjOM8FvgV8f6DA9gcGhiWdBvy+Zf77bU/uYjwRETGMbj6O80ZJ/e2mSRLwfuBt3dp+RESsvqb6FP4KWGT73pay7SX9WtJPJf3VUAtKmipphqQZS5Ys6X6kERHjSFNJ4RDgopbxhcAk27sBnwIulLRZuwVtn2l7iu0pfX19PQg1ImL86HlSkPRC4L3AJQNltpfbXlqGbwXuB17Z69giIsa7JmoKewN3254/UCCpT9J6ZXgHYCfggQZii4gY17p5SupFwC+BV0maL+nIMulgntt0BPBWYKakO4D/BI6y/Wi3YouIiPa6efbRIUOUf7hN2WXAZd2KJSIiOpMrmiMiopakEBERtSSFiIioJSlEREQtSSEiImpJChERUevmXVIjGtc/7eqmQ4hYq6SmEBERtSSFiIioJSlEREQtSSEiImpJChERUUtSiIiIWpJCRETUkhQiIqKWpBAREbVuPnntHEmLJc1qKTtJ0sOSbi+vfVumHSfpPkn3SHpnt+KKiIihdbOmcC6wT5vy021PLq9rACTtTPWYzteWZb498MzmiIjona4lBds3Ap0+Z/lA4GLby20/CNwH7N6t2CIior0m+hSOkTSzNC9tUcomAvNa5plfyp5H0lRJMyTNWLJkSbdjjYgYV3qdFL4D7AhMBhYCp5VytZnX7VZg+0zbU2xP6evr60qQERHjVU+Tgu1FtlfafgY4i2ebiOYD27XMui2woJexRUREj5OCpK1bRt8DDJyZdCVwsKQNJG0P7AT8qpexRUREFx+yI+kiYE9ggqT5wInAnpImUzUNzQU+DmB7tqRLgbuAFcDRtld2K7aIiGiva0nB9iFtis9exfynAKd0K56IiBhermiOiIhakkJERNSSFCIiopakEBERtSSFiIioJSlEREQtSSEiImpJChERUUtSiIiIWpJCRETUkhQiIqKWpBAREbUkhYiIqCUpREREbdikUJ6HfHTL85QjImId1UlN4WBgG+AWSRdLeqekds9UjoiItdywScH2fbZPAF4JXAicAzwk6WRJLxlqOUnnSFosaVZL2Vck3S1ppqQrJG1eyvsl/UHS7eV1xhrvWURErLaOnrwmaVfgCGBf4DLgAuAtwE+AyUMsdi7wLeD7LWXTgeNsr5D0JeA44NNl2v22h1pXRHSof9rVo7q+uafuN6rri7Ft2KQg6VbgcapHaU6zvbxMulnSHkMtZ/tGSf2Dyq5tGb0JeN/qBhwREd3TSU3hINsPtJtg+71rsO2PAJe0jG8v6dfAMuAztv+n3UKSpgJTASZNmrQGm4+IiME66Wj+6EDbP4CkLSR9cU02KukEYAVVMxTAQmCS7d2ATwEXStqs3bK2z7Q9xfaUvr6+NQkjIiIG6SQpvMv24wMjth+j6lsYEUmHA/sDh9p2Wedy20vL8K3A/VQd2xER0UOdJIX1JG0wMCJpQ2CDVcw/JEn7UHUsH2D76ZbyPknrleEdgJ2Atk1WERHRPZ30KZwPXCfpe4Cp+gLOG24hSRcBewITJM0HTqQ622gDYHq51OEm20cBbwU+L2kFsBI4yvajq787ERGxJoZNCra/LOlOYC9AwBds/7iD5Q5pU3z2EPNeRnWqa0RENKij6xRs/wj4UZdjiYiIhnVy76P3SrpX0u8lLZP0hKRlvQguIiJ6q5OawpeBv7U9p9vBREREszo5+2hREkJExPjQSU1hhqRLgP8DDNziAtuXdyuoiIhoRidJYTPgaeAdLWUGkhQiItYxnZySekQvAomIiOZ1cvbRKyVdN/BcBEm7SvpM90OLiIhe66Sj+SyqK5H/BGB7JtXT2CIiYh3TSVLYyPavBpWt6EYwERHRrE6SwiOSdqTqXEbS+6hudR0REeuYTs4+Oho4E3i1pIeBB4EPdjWqiIhoRCdnHz0A7C1pY+AFtp/oflgREdGETp7R/LlB4wDY/nyXYoqIiIZ00nz0VMvwi6mempbbXkRErIM6aT46rXVc0leBK7sWUURENKaj5ykMshGww3AzSTqHqlax2PYupewlwCVAPzAXeH955jOSjgOOpHry2j928iCfWPf0T7u66RAixrVOrmi+U9LM8poN3AN8o4N1nwvsM6hsGnCd7Z2A68o4knamuiDutWWZbw88szkiInqnk5rC/i3DK6hupT3sxWu2b5TUP6j4QKrnNkP1nOcbgE+X8ottLwcelHQfsDvwyw7ii4iIUdJJUhh8CupmA2cgAdh+dDW2t5XthWW5hZK2LOUTgZta5ptfyp5H0lRgKsCkSZNWY9MRETGcTpLCbcB2wGOAgM2Bh8o000H/QgfUpsztZrR9JtXFdEyZMqXtPBERMTKd3Obiv6gexznB9kupmpMut7297dVNCIskbQ1Q/i4u5fOpEs+AbYEFq7nuiIhYQ50khb+wfc3AiO0fAX89wu1dCRxehg8HfthSfrCkDSRtD+wEDL4JX0REdFknzUePlOcnnE/VpPNBYOlwC0m6iKpTeYKk+cCJwKnApZKOpGqCOgjA9mxJlwJ3UXVmH2175ervTkRErIlOksIhVAf0K6iSwo2lbJVsDzXPXkPMfwpwSgfxREREl3RyRfOjwCckbWL7yR7EFBERDenk4rU3S7qLqmkHSa+X9O2uRxYRET3XSUfz6cA7Kf0Itu8A3trNoCIiohmdJAVszxtUlE7giIh1UCcdzfMkvRmwpBcB/0hunR0RsU7qpKZwFNUjOSdSXWQ2uYxHRMQ6ZpU1hXKn0q/bPrRH8URERINWWVMoF5D1lWajiIhYx3XSpzAX+LmkK2l5NKftr3UrqIiIaMaQNQVJPyiDHwCuKvNu2vKKiIh1zKpqCm+Q9HKqexR9s0fxREREg1aVFM6gum329sCMlnIxes9RiIiIMWTI5iPb/2b7NcD3bO/Q8hrJcxQiImItMOx1Crb/rheBRERE8zo5+ygixrH+aVeP+jrnnrrfqK8zRkdH9z6KiIjxoec1BUmvAi5pKdoB+BywOfAxYEkpP771MaAREdF9PU8Ktu+hun/SwG00HqZ6qtsRwOm2v9rrmCIiotJ089FewP22f9twHBERQfNJ4WDgopbxYyTNlHSOpC3aLSBpqqQZkmYsWbKk3SwRETFCjSWFcpO9A4D/KEXfAXakalpaCJzWbjnbZ9qeYntKX19fL0KNiBg3mqwpvAu4zfYiANuLbK+0/QxwFrB7g7FFRIxLTSaFQ2hpOpK0dcu09wCzeh5RRMQ418jFa5I2At4OfLyl+MuSJlPdV2nuoGkREdEDjSQF208DLx1UdlgTsURExLOaPvsoIiLGkCSFiIioJSlEREQtSSEiImpJChERUUtSiIiIWpJCRETUkhQiIqKWpBAREbUkhYiIqCUpRERELUkhIiJqSQoREVFLUoiIiFqSQkRE1JIUIiKi1tST1+YCTwArgRW2p0h6CXAJ0E/15LX3236sifgiIsarJmsKf2N7su0pZXwacJ3tnYDrynhERPTQWGo+OhA4rwyfB7y7uVAiIsanppKCgWsl3SppainbyvZCgPJ3y4Zii4gYtxrpUwD2sL1A0pbAdEl3d7pgSSJTASZNmtSt+CIixqVGagq2F5S/i4ErgN2BRZK2Bih/Fw+x7Jm2p9ie0tfX16uQIyLGhZ4nBUkbS9p0YBh4BzALuBI4vMx2OPDDXscWETHeNdF8tBVwhaSB7V9o+78k3QJcKulI4CHgoAZii4gY13qeFGw/ALy+TflSYK9exxMREc8aS6ekRkREw5IUIiKilqQQERG1pq5TiHVE/7Srmw4hIkZRagoREVFLUoiIiFqSQkRE1JIUIiKilqQQERG1JIWIiKglKURERC1JISIiarl4LSJ6brQvepx76n6jur7xLDWFiIioJSlEREQtSSEiImpJChERUWviGc3bSbpe0hxJsyV9opSfJOlhSbeX1769ji0iYrxr4uyjFcCxtm+TtClwq6TpZdrptr/aQEwREUEzz2heCCwsw09ImgNM7HUcERHxfI1epyCpH9gNuBnYAzhG0oeAGVS1icfaLDMVmAowadKk3gW7DsgDcSJiOI11NEvaBLgM+KTtZcB3gB2ByVQ1idPaLWf7TNtTbE/p6+vrVbgREeNCI0lB0vpUCeEC25cD2F5ke6XtZ4CzgN2biC0iYjxr4uwjAWcDc2x/raV865bZ3gPM6nVsERHjXRN9CnsAhwF3Srq9lB0PHCJpMmBgLvDxBmKLiBjXmjj76GeA2ky6ptexRETEc+WK5oiIqCUpRERELUkhIiJqSQoREVFLUoiIiFqSQkRE1JIUIiKilqQQERG1JIWIiKglKURERC1JISIiao0+ZCdWLQ/FiYheS00hIiJqSQoREVFLUoiIiFr6FCJirTfa/W9zT91vVNe3NhlzNQVJ+0i6R9J9kqY1HU9ExHgypmoKktYD/h14OzAfuEXSlbbvajayiBhPunHm39pS+xhTSQHYHbjP9gMAki4GDgS6khRS5YyIXllbjjdjLSlMBOa1jM8H3tg6g6SpwNQy+qSke9ZwmxOAR9ZwHQDoS6OxltqoxdUFiW1kEtvIJLY2OjjerCq2lw+10FhLCmpT5ueM2GcCZ47aBqUZtqeM1vpGy1iNCxLbSCW2kUlsIzPS2MZaR/N8YLuW8W2BBQ3FEhEx7oy1pHALsJOk7SW9CDgYuLLhmCIixo0x1Xxke4WkY4AfA+sB59ie3eXNjlpT1Cgbq3FBYhupxDYyiW1kRhSbbA8/V0REjAtjrfkoIiIalKQQERG1JIVC0v+WZEkTmo5lgKQvSJop6XZJ10rapumYBkj6iqS7S3xXSNq86ZgGSDpI0mxJz0gaE6cLjtXbt0g6R9JiSbOajmUwSdtJul7SnPJ5fqLpmAAkvVjSryTdUeI6uemYBpO0nqRfS7pqdZdNUqD68lHdWuOhpmMZ5Cu2d7U9GbgK+FzD8bSaDuxie1fgN8BxDcfTahbwXuDGpgOB59y+5V3AzsAhknZuNqraucA+TQcxhBXAsbZfA7wJOHqMvG/LgbfZfj0wGdhH0puaDel5PgHMGcmCSQqV04F/ZtCFck2zvaxldGPGUHy2r7W9oozeRHVNyZhge47tNb3SfTTVt2+x/f+Agdu3NM72jcCjTcfRju2Ftm8rw09QHeQmNhsVuPJkGV2/vMbM/6akbYH9gO+OZPlxnxQkHQA8bPuOpmNpR9IpkuYBhzK2agqtPgL8qOkgxrB2t29p/OC2NpHUD+wG3NxwKEDdPHM7sBiYbntMxFV8nepH7jMjWXhMXafQLZL+G3hZm0knAMcD7+htRM9aVWy2f2j7BOAESccBxwAnjpXYyjwnUFXzL+hVXJ3GNoYMe/uWGJqkTYDLgE8Oqj03xvZKYHLpS7tC0i62G++XkbQ/sNj2rZL2HMk6xkVSsL13u3JJrwO2B+6QBFUTyG2Sdrf9uyZja+NC4Gp6mBSGi03S4cD+wF7u8QUvq/G+jQW5fcsISVqfKiFcYPvypuMZzPbjkm6g6pdpPCkAewAHSNoXeDGwmaTzbX+w0xWM6+Yj23fa3tJ2v+1+qn/eP+9VQhiOpJ1aRg8A7m4qlsEk7QN8GjjA9tNNxzPG5fYtI6Dql9rZwBzbX2s6ngGS+gbOtpO0IbA3Y+R/0/Zxtrctx7ODgZ+sTkKAcZ4U1gKnSpolaSZVE9eYOCWv+BawKTC9nDJ7RtMBDZD0Hknzgb8Erpb04ybjKR3yA7dvmQNc2oPbt3RE0kXAL4FXSZov6cimY2qxB3AY8LbyHbu9/AJu2tbA9eX/8haqPoXVPvVzrMptLiIiopaaQkRE1JIUIiKilqQQERG1JIWIiKglKURERC1JISIiakkKERFR+/9uhnSMtXIDJwAAAABJRU5ErkJggg==", + "image/png": "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", "text/plain": [ "
" ] @@ -931,74 +923,21 @@ "a = rng.normal(loc=0, scale=1, size=1_000)\n", "\n", "fig, ax = plt.subplots()\n", - "ax.hist(a, bins=15)\n", - "ax.set(title=\"Samples from a normal distribution\", ylabel=\"frequency\");" + "ax.hist(a, color=\"C0\", bins=15)\n", + "ax.set(title=\"Samples from a normal distribution using numpy\", ylabel=\"frequency\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Now let's do it in `aesara` via `pymc`. Let's start by defining a `pymc` normal distribution." + "Now let's try to do it in Aesara." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", - " |TensorConstant{[]} [id C]\n", - " |TensorConstant{11} [id D]\n", - " |TensorConstant{0} [id E]\n", - " |TensorConstant{1.0} [id F]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x = pm.Normal.dist(mu=0, sigma=1)\n", - "aesara.dprint(x)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Inputs are always in the following order:\n", - "1. `rng` shared variable\n", - "2. `size`\n", - "3. `dtype` (number code)\n", - "4. `arg1`\n", - "5. `arg2`\n", - "6. `argn`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The first input is created by default, but can be passed explicitly as well. Let's do a small d-tour from the initial example to illustrate this." - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, "outputs": [ { "data": { @@ -1006,7 +945,7 @@ "aesara.tensor.var.TensorVariable" ] }, - "execution_count": 25, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -1025,12 +964,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Next, we can compare the `dprint` output for `x` and `y`:" + "Next, we show the graph using `dprint`." ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 25, "metadata": {}, "outputs": [ { @@ -1038,7 +977,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1048,10 +987,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 26, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -1064,12 +1003,25 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can sample by calling `.eval()` on the random variable." + "The inputs are always in the following order:\n", + "1. `rng` shared variable\n", + "2. `size`\n", + "3. `dtype` (number code)\n", + "4. `arg1`\n", + "5. `arg2`\n", + "6. `argn`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We *could* sample by calling `.eval()` on the random variable." ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 26, "metadata": {}, "outputs": [ { @@ -1078,7 +1030,7 @@ "array(-0.98912135)" ] }, - "execution_count": 27, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -1096,7 +1048,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 54, "metadata": {}, "outputs": [ { @@ -1125,28 +1077,68 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Combing back to our initial `pymc` distribution example `x`:" + "We always get the same samples! This has to do with the random seed step in the graph, i.e. `RandomGeneratorSharedVariable` (we will not go deeper into this subject here). We will show how to generate different samples with `pymc` below. To do so, we start by defining a `pymc` normal distribution." ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: 0.02071066106028817\n", - "Sample 1: 0.02071066106028817\n", - "Sample 2: 0.02071066106028817\n", - "Sample 3: 0.02071066106028817\n", - "Sample 4: 0.02071066106028817\n", - "Sample 5: 0.02071066106028817\n", - "Sample 6: 0.02071066106028817\n", - "Sample 7: 0.02071066106028817\n", - "Sample 8: 0.02071066106028817\n", - "Sample 9: 0.02071066106028817\n" + "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", + " |RandomGeneratorSharedVariable() [id B]\n", + " |TensorConstant{[]} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{0} [id E]\n", + " |TensorConstant{1.0} [id F]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x = pm.Normal.dist(mu=0, sigma=1)\n", + "aesara.dprint(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can try to generate samples by calling `.eval()` as above." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 0: 0.46037755132963143\n", + "Sample 1: 0.46037755132963143\n", + "Sample 2: 0.46037755132963143\n", + "Sample 3: 0.46037755132963143\n", + "Sample 4: 0.46037755132963143\n", + "Sample 5: 0.46037755132963143\n", + "Sample 6: 0.46037755132963143\n", + "Sample 7: 0.46037755132963143\n", + "Sample 8: 0.46037755132963143\n", + "Sample 9: 0.46037755132963143\n" ] } ], @@ -1159,17 +1151,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We always get the same samples! This has to do with the random seed step in the graph, i.e. `RandomGeneratorSharedVariable` (we will not go deeper into this subject here). The correct way to do it is via `pm.draw`." + "As before we get the same value for all iterations. The correct way to generate random samples is using `pm.draw`." ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 29, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1182,8 +1174,49 @@ ], "source": [ "fig, ax = plt.subplots()\n", - "ax.hist(pm.draw(x, draws=1_000), bins=15)\n", - "ax.set(title=\"Samples from a normal distribution\", xlabel=\"x\", ylabel=\"frequency\");" + "ax.hist(pm.draw(x, draws=1_000), color=\"C1\", bins=15)\n", + "ax.set(title=\"Samples from a normal distribution using pymc\", ylabel=\"frequency\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Yay! We learned how to sample from a `pymc` distribution!\n", + "\n", + "Finally, we can compare the `dprint` output for `x` and `y`:" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", + " |RandomGeneratorSharedVariable() [id B]\n", + " |TensorConstant{[]} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{0} [id E]\n", + " |TensorConstant{1.0} [id F]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "aesara.dprint(x)" ] }, { @@ -1198,10 +1231,22 @@ "execution_count": 31, "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y'\n", + " |RandomGeneratorSharedVariable() [id B]\n", + " |TensorConstant{[]} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{0} [id E]\n", + " |TensorConstant{1} [id F]\n" + ] + }, { "data": { "text/plain": [ - "normal_rv{0, (0, 0), floatX, False}(RandomGeneratorSharedVariable(), TensorConstant{[]}, TensorConstant{11}, TensorConstant{0}, TensorConstant{1})" + "" ] }, "execution_count": 31, @@ -1210,7 +1255,14 @@ } ], "source": [ - "y.owner" + "aesara.dprint(y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "They look the same (except from the random seed)! We can do a similar comparison with the owners:" ] }, { @@ -1221,7 +1273,7 @@ { "data": { "text/plain": [ - "normal_rv{0, (0, 0), floatX, False}(RandomGeneratorSharedVariable(), TensorConstant{[]}, TensorConstant{11}, TensorConstant{0}, TensorConstant{1.0})" + "normal_rv{0, (0, 0), floatX, False}(RandomGeneratorSharedVariable(), TensorConstant{[]}, TensorConstant{11}, TensorConstant{0}, TensorConstant{1.0})" ] }, "execution_count": 32, @@ -1233,6 +1285,26 @@ "x.owner" ] }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "normal_rv{0, (0, 0), floatX, False}(RandomGeneratorSharedVariable(), TensorConstant{[]}, TensorConstant{11}, TensorConstant{0}, TensorConstant{1})" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y.owner" + ] + }, { "cell_type": "markdown", "metadata": { @@ -1251,7 +1323,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 34, "metadata": {}, "outputs": [ { @@ -1259,7 +1331,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1269,17 +1341,17 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 33, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "with pm.Model() as model:\n", - " z = pm.Normal(name=\"z\", mu=np.array([0, 0]), sigma=np.array([1, 2]), size=2)\n", + " z = pm.Normal(name=\"z\", mu=np.array([0, 0]), sigma=np.array([1, 2]))\n", "\n", "aesara.dprint(x)" ] @@ -1288,12 +1360,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can extract the list of random variables:" + "We are just creating random variables like we saw before, but now registering them in a PyMC model. To extract the list of random variables we can simply do:" ] }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 35, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1308,7 +1380,7 @@ "[z]" ] }, - "execution_count": 34, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -1319,7 +1391,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 36, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1333,8 +1405,8 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z'\n", - " |RandomGeneratorSharedVariable() [id B]\n", - " |TensorConstant{(1,) of 2} [id C]\n", + " |RandomGeneratorSharedVariable() [id B]\n", + " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{(2,) of 0} [id E]\n", " |TensorConstant{[1. 2.]} [id F]\n" @@ -1343,10 +1415,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 35, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -1364,23 +1436,23 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [ 1.97817753 -0.28751002]\n", - "Sample 1: [ 1.97817753 -0.28751002]\n", - "Sample 2: [ 1.97817753 -0.28751002]\n", - "Sample 3: [ 1.97817753 -0.28751002]\n", - "Sample 4: [ 1.97817753 -0.28751002]\n", - "Sample 5: [ 1.97817753 -0.28751002]\n", - "Sample 6: [ 1.97817753 -0.28751002]\n", - "Sample 7: [ 1.97817753 -0.28751002]\n", - "Sample 8: [ 1.97817753 -0.28751002]\n", - "Sample 9: [ 1.97817753 -0.28751002]\n" + "Sample 0: [0.14103648 0.2376915 ]\n", + "Sample 1: [0.14103648 0.2376915 ]\n", + "Sample 2: [0.14103648 0.2376915 ]\n", + "Sample 3: [0.14103648 0.2376915 ]\n", + "Sample 4: [0.14103648 0.2376915 ]\n", + "Sample 5: [0.14103648 0.2376915 ]\n", + "Sample 6: [0.14103648 0.2376915 ]\n", + "Sample 7: [0.14103648 0.2376915 ]\n", + "Sample 8: [0.14103648 0.2376915 ]\n", + "Sample 9: [0.14103648 0.2376915 ]\n" ] } ], @@ -1398,23 +1470,23 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 38, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [-0.01358113 0.94260086]\n", - "Sample 1: [0.0311764 0.94275249]\n", - "Sample 2: [ 0.84039992 -0.77855351]\n", - "Sample 3: [-0.89308395 0.40403179]\n", - "Sample 4: [-0.75932708 -0.09285537]\n", - "Sample 5: [0.39344721 0.86669537]\n", - "Sample 6: [-0.70707728 1.14834117]\n", - "Sample 7: [-2.21317863 -2.9218513 ]\n", - "Sample 8: [ 2.54296683 -0.05294407]\n", - "Sample 9: [0.96766252 1.77623172]\n" + "Sample 0: [ 0.2966496 -1.31071893]\n", + "Sample 1: [0.30452144 0.16586312]\n", + "Sample 2: [-0.4986596 0.74662501]\n", + "Sample 3: [0.60212475 0.60611069]\n", + "Sample 4: [0.4964778 0.13950609]\n", + "Sample 5: [-1.35490046 1.72980856]\n", + "Sample 6: [-0.07880712 0.37021834]\n", + "Sample 7: [ 0.12161449 -0.81646915]\n", + "Sample 8: [1.0538654 0.86119761]\n", + "Sample 9: [ 0.14870563 -0.83496269]\n" ] } ], @@ -1425,12 +1497,12 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 39, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1466,7 +1538,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 40, "metadata": {}, "outputs": [ { @@ -1479,10 +1551,10 @@ " $$" ], "text/plain": [ - "" + "" ] }, - "execution_count": 39, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -1500,7 +1572,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 41, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1515,7 +1587,7 @@ "{'z': array([0., 0.])}" ] }, - "execution_count": 40, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -1534,7 +1606,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 42, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1549,7 +1621,7 @@ "{'z': -2.53}" ] }, - "execution_count": 41, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -1567,7 +1639,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 43, "metadata": {}, "outputs": [ { @@ -1576,7 +1648,7 @@ "-2.5310242469692907" ] }, - "execution_count": 42, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -1596,7 +1668,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 44, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1611,7 +1683,7 @@ "array(-2.53102425)" ] }, - "execution_count": 43, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } @@ -1627,7 +1699,7 @@ "id": "yxG5UHslGDEv" }, "source": [ - "**Remark:** A similar dispatch strategy is used for `logcdf` and `get_moment`." + "**Remark:** A similar strategy is used for `logcdf`." ] }, { @@ -1643,7 +1715,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 45, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1655,10 +1727,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 44, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } @@ -1672,16 +1744,16 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([ 0.38292667, 0.83839968, -1.29070168])" + "array([-1.29785156, -1.08664855, -0.7177793 ])" ] }, - "execution_count": 45, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } @@ -1693,7 +1765,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 47, "metadata": {}, "outputs": [ { @@ -1702,7 +1774,7 @@ "-1.7001885332046727" ] }, - "execution_count": 46, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -1721,7 +1793,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 48, "metadata": { "id": "dejQBR2FUnM3" }, @@ -1742,7 +1814,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 49, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1757,7 +1829,7 @@ "{mu: mu, sigma: sigma_log__, x: x}" ] }, - "execution_count": 48, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } @@ -1775,7 +1847,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 50, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1790,7 +1862,7 @@ "[mu, sigma_log__, x]" ] }, - "execution_count": 49, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } @@ -1808,7 +1880,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 51, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1823,7 +1895,7 @@ "array([ -1.61208571, -11.32440364, 9.08106147])" ] }, - "execution_count": 50, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } @@ -1848,7 +1920,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 52, "metadata": {}, "outputs": [ { @@ -1858,7 +1930,7 @@ "\n", "mu_value -> -1.612085713764618\n", "sigma_log_value -> -11.324403641427345 \n", - "x_value -> -10.918938533204672\n", + "x_value -> 9.081061466795328\n", "\n" ] } @@ -1867,10 +1939,17 @@ "print(f\"\"\"\n", "mu_value -> {scipy.stats.norm.logpdf(x=0, loc=0, scale=2)}\n", "sigma_log_value -> {- 10 + scipy.stats.halfnorm.logpdf(x=np.exp(-10), loc=0, scale=3)} \n", - "x_value -> {scipy.stats.norm.logpdf(x=0, loc=0, scale=np.exp(10))}\n", + "x_value -> {scipy.stats.norm.logpdf(x=0, loc=0, scale=np.exp(-10))}\n", "\"\"\")\n" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Remark:** For `sigma_log_value` we add the $-10$ term for the `scipy` and `aesara` to match because of the jacobian." + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -1880,7 +1959,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 53, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1895,7 +1974,7 @@ "[array(-1.61208571), array(-11.32440364), array(9.08106147)]" ] }, - "execution_count": 52, + "execution_count": 53, "metadata": {}, "output_type": "execute_result" } From 2ae350df261a6eaac4fdd832d47bcdaff10cf8d2 Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Sun, 5 Jun 2022 20:20:42 +0200 Subject: [PATCH 20/30] fix content feedback --- .../learn/core_notebooks/pymc_aesara.ipynb | 275 ++++++++---------- 1 file changed, 125 insertions(+), 150 deletions(-) diff --git a/docs/source/learn/core_notebooks/pymc_aesara.ipynb b/docs/source/learn/core_notebooks/pymc_aesara.ipynb index cd61d4cd30..4a6f96e04f 100644 --- a/docs/source/learn/core_notebooks/pymc_aesara.ipynb +++ b/docs/source/learn/core_notebooks/pymc_aesara.ipynb @@ -26,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 54, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -194,7 +194,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -347,7 +347,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 10, @@ -391,7 +391,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -429,7 +429,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 12, @@ -602,7 +602,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 15, @@ -696,7 +696,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 18, @@ -741,7 +741,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 19, @@ -828,7 +828,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 21, @@ -875,7 +875,7 @@ }, "source": [ "---\n", - "# PyMC\n", + "## PyMC\n", "![image.png](data:image/png;base64,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)\n", "\n" ] @@ -906,9 +906,9 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ - "
" + "
" ] }, "metadata": { @@ -922,9 +922,9 @@ "\n", "a = rng.normal(loc=0, scale=1, size=1_000)\n", "\n", - "fig, ax = plt.subplots()\n", + "fig, ax = plt.subplots(figsize=(8, 6))\n", "ax.hist(a, color=\"C0\", bins=15)\n", - "ax.set(title=\"Samples from a normal distribution using numpy\", ylabel=\"frequency\");" + "ax.set(title=\"Samples from a normal distribution using numpy\", ylabel=\"count\");" ] }, { @@ -951,12 +951,7 @@ } ], "source": [ - "# Define a numpy generator.\n", - "rng = np.random.default_rng(seed=123)\n", - "# Define an aesara Shared Variable.\n", - "shared_rng = aesara.shared(value=rng, borrow=True)\n", - "# We can now construct an aesara random variable (TensorVariable) out of it.\n", - "y = at.random.normal(0, 1, rng=shared_rng, name=\"y\")\n", + "y = at.random.normal(loc=0, scale=1, name=\"y\")\n", "type(y)" ] }, @@ -977,7 +972,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -987,7 +982,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 25, @@ -1027,7 +1022,7 @@ { "data": { "text/plain": [ - "array(-0.98912135)" + "array(0.52473897)" ] }, "execution_count": 26, @@ -1048,23 +1043,23 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: -0.9891213503478509\n", - "Sample 1: -0.9891213503478509\n", - "Sample 2: -0.9891213503478509\n", - "Sample 3: -0.9891213503478509\n", - "Sample 4: -0.9891213503478509\n", - "Sample 5: -0.9891213503478509\n", - "Sample 6: -0.9891213503478509\n", - "Sample 7: -0.9891213503478509\n", - "Sample 8: -0.9891213503478509\n", - "Sample 9: -0.9891213503478509\n" + "Sample 0: 0.5247389749488223\n", + "Sample 1: 0.5247389749488223\n", + "Sample 2: 0.5247389749488223\n", + "Sample 3: 0.5247389749488223\n", + "Sample 4: 0.5247389749488223\n", + "Sample 5: 0.5247389749488223\n", + "Sample 6: 0.5247389749488223\n", + "Sample 7: 0.5247389749488223\n", + "Sample 8: 0.5247389749488223\n", + "Sample 9: 0.5247389749488223\n" ] } ], @@ -1082,7 +1077,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -1090,7 +1085,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1100,10 +1095,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 27, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -1122,23 +1117,23 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: 0.46037755132963143\n", - "Sample 1: 0.46037755132963143\n", - "Sample 2: 0.46037755132963143\n", - "Sample 3: 0.46037755132963143\n", - "Sample 4: 0.46037755132963143\n", - "Sample 5: 0.46037755132963143\n", - "Sample 6: 0.46037755132963143\n", - "Sample 7: 0.46037755132963143\n", - "Sample 8: 0.46037755132963143\n", - "Sample 9: 0.46037755132963143\n" + "Sample 0: 0.22292334278176149\n", + "Sample 1: 0.22292334278176149\n", + "Sample 2: 0.22292334278176149\n", + "Sample 3: 0.22292334278176149\n", + "Sample 4: 0.22292334278176149\n", + "Sample 5: 0.22292334278176149\n", + "Sample 6: 0.22292334278176149\n", + "Sample 7: 0.22292334278176149\n", + "Sample 8: 0.22292334278176149\n", + "Sample 9: 0.22292334278176149\n" ] } ], @@ -1156,14 +1151,14 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 30, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfQAAAF1CAYAAAAeOhj3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAehklEQVR4nO3deZRlZX3u8e/DICoyhlIZbUBCgmjw2ovcm6iXOETiNU4rGogaHCKSSKIrJtcxsVFJNM5XYwwKAiookRBNJDcQVIgxqA0iMipIKw1td9Mto8q1m9/9Y++SQ1nVXd3UOafqre9nrbPqnHdPv73P8Jz97n12paqQJEkL2zbjLkCSJN1/BrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA13zQpJlST4xx/NMko8l+WGSr83lvBeTJC9O8uUtGH9Fkqf099+Q5KNzWMudSQ7o75+a5G1zOO8PJ/mLuZrf/TXX207t227cBWi8kjwe+BvgUcBG4Grg1VX19bEWNjceDzwV2Keq7hp3MYtRVf3VbMZL8iXgE1W1yQCrqofMRV1JXgz8QVU9fmDex83FvOfKbLedNMlAX8SS7Az8C/CHwFnAA4AnAHePs6459AhgxUxhnmS7qtow4pqGrsX1anGdpLlml/vi9osAVXVmVW2sqh9X1XlVdTlAkgOTfCHJuiS3JPlkkl0nJ+67Vv88yeVJ7kpycpKHJfnXJHck+fcku/XjLklSSY5NcnOSVUleM1NhSf57kq8kuTXJN5McMTDsxUm+2y/jhiQvmGb6lwEfBf5H3017QpIjkqxM8tokPwA+lmSHJO/ra7q5v79DP4/J8f93kjV9zc9O8vQk306yPskbNrEO/yvJN5LcnuTGJMs2Me7ksl4zsKyXDAzfJcnpSdYm+V6SNyXZZmB7/GeS9yZZDyzru6M/1D8Xd/bDH96v3w+TXJPksQPzf12S6/ttelWS58xU6zS1v6ivaV2SN04Z9rNDKUkemOQT/Xi3Jvl6/3o5ke6L5Af7Wj/Yj19JXpnkO8B3BtoeObCIPZKc39d9YZJH9ONNvt62G6jlS0n+IMkvAx/m3tfGrf3w+3ThJ3l5kuv65/lzSfYaGFZJjkvynX57/m2SzLB9ps73iCQrBx6/NslN/Tpcm+TJ02y7yfU5Jsn3070f3zgwjwclOa2v5er+NbuSGfTz+pN076NbkrwzyTbp3g/rkzx6YNyHJvlxkols4XsiybbpDh1MvrYuSbLvTHXpfqoqb4v0BuwMrANOA34L2G3K8EfSdVnvAEwAFwHvGxi+ArgYeBiwN7AGuBR4bD/NF4A39+MuAQo4E9gReDSwFnhKP3wZXZcr/bzWAU+n+9L51P7xRD/t7cDB/bh7Ao+aYf1eDHx54PERwAbgHX19DwLe0q/DQ/v5fwV465Tx/xLYHnh5X/MZwE50hyl+Ahwww/KP6NdzG+AxwGrg2ZsYd0Nfz/b9uv9o8jkBTgc+2y93CfBt4GUD67kB+GO6XrcHAacCtwCPAx7YPxc3AL8PbAu8DfjiwPKfB+zV1/q7wF3AntNtxyl1HwLcCTyx36bv6WuZ7nl9BfDPwIP7Gh4H7NwP+xJdF/jgvAs4H9gdeNBA2yP7+6cCdwws+/2TdXLv6227gfn9bBnTrVM/v7f195/Ub7//1s/7A8BFU2r7F2BXYD+618WRM2yjn8134Lle2d8/GLgR2Gug7gOn2XaT6/OR/vn9FbqetF/uh78duBDYDdgHuHxyGTPUVMAX+227H93raXLbfAh4x8C4rwL+eWveE8CfA9/q1zN93b8w7s++Vm/uoS9iVXU73XHmyQ+Ktf2eyMP64ddV1flVdXdVraX7sP6fU2bzgapaXVU3Af8BfLWqvlFVdwPn0IX7oBOq6q6q+hbwMeDoaUp7IXBuVZ1bVfdU1fnAcrqQA7gHODTJg6pqVVVduQWrfQ/dl4y7q+rHwAuAt1TVmn4dTwBeNDD+T4ETq+qnwKeAPYD3V9Ud/XKvpAvrn1NVX6qqb/XrcDndl5mp22/QT/taflpV59IF5cFJtqUL2df3y10BvHtKnTdX1QeqakO/XgDnVNUlVfUTuufiJ1V1elVtBD7NwHNTVf9QVTf3tX6abo/48M1sS4DfAf6lqi7qn/O/oNvGM63fL9AF8sa+tts3M/+/rqr1A+s01ecHlv1Gur3uudgDfAFwSlVd2s/79f28lwyM8/aqurWqvk8XjodtxXI20n1hOCTJ9lW1oqqu38T4J1TXk/ZN4Jt0AQnwfOCvquqHVbUS+D+zWPY7+m37feB93PtePA34vckeILrX2ccHptuS98QfAG+qqmur882qWjeL2rQVDPRFrqqurqoXV9U+wKF0e2nvg591tX2q7w68HfgE3Zt30OqB+z+e5vHUk5huHLj/vX55Uz0CeF7fLXtr3yX6eLo9xrvowu04YFWSzyf5pdmvMWv7gJu0V1/HTDWt6wNwcn1g8+sIQJJfTfLFdN3kt/U1T91+g9bVfY8T/6if9x505zdMrXPvgceD23XSrJ+bJL+f5LKB7X3oZmqdtNfgsvvnZ6YP7I8D/wZ8Kt3hjb9Jsv1m5j/dek07vKruBNYz/WtqS93nddHPex333eY/GLg/+Vxtkaq6Dng13d74mv79tqn6Z1rmfZ4HNr/dpo7zs9d9VX2Vrofmf/bvrUcCnxsYd0veE/sCm/qCojlkoOtnquoauu7BQ/umv6bbe39MVe1Mt+c87XHCLTC497QfcPM049wIfLyqdh247VhVb+/r/Leqeipdd/s1dL0LszX13wveTPcFYnM1bY0z6D4I962qXeiO227N9ruFbq9oap03DTze6n+b2B93/ghwPF136K7AFcyu1lUMPKdJHky3F/5z+p6HE6rqEODXgGfQHQLYVP2bW6/BZT+Ergv5ZrpAgq57f9LDt2C+93ldJNmRbr1umnGKmd21iTqoqjOqO9v+EX1d79iKZayi62qfNJteik29F0+je7+/CPjMlC/BW+JG4MCtnFZbyEBfxJL8UrqTsPbpH+9L1+12cT/KTnTdvrcm2ZvueNj99RdJHpzkUcBL6Lp+p/oE8NtJntafVPPA/mScfdKdRPXM/gP27r6+jdPMY7bOBN7Un/CzB92xwbn6PfxOwPqq+kmSw4Hf25qZ9HtDZwEnJtmpD+A/ncM6d6QLkrUA6U7GO3STU9zrM8Azkjw+yQPozgGY9nMlyW8keXR/COF2ui8pk8/dauCAraj96QPLfivdIZ8b+8MnNwEv7F9DL+W+wbIa2KefbjpnAC9Jcli6kyT/qp/3iq2o8bK+zt2TPJxujxyAJAcneVK/jJ/Q7d1uzev5LOD1SXbr36vHz2KaP+/H35fuOPnge/HjwHPoQv30rahn0keBtyY5KJ3HJJn2C5/uPwN9cbsD+FXgq0nuogvyK4DJs89PoDsp6Dbg88A/zsEyLwSuAy4A3lVV500doapuBJ4FvIEuZG6k+zKxTX97Dd3exHq6Y9J/dD/qeRvd8fnL6U7eubRvmwt/BLwlyR10XxTOuh/z+mO6Pb3vAl+mC5xT7neFQFVdRXdM/r/ogu7RwH/OctorgVf29awCfgjMdHb1w+m+ANxOd72DC7n3S8n7gd/pz9KezfHfSWcAb6Z7LTyO7tj3pJfTvW7W0Z2s9ZWBYV+gO9b7gyS3TLNeF9CdD3B2v14HAkdtQV2DPk53vHsFcB73Dc4d6E5ou4WuO/2hdK/7LfUWuu1+A/DvdNt5cz8//SxwCd0Xjs8DJ08O6I/DX0r3Re8/tqKeSe+he92fR/e8n0x3Up+GIFVb3VMnzVp/MtENwPbl74mloUryh8BRVTXtSZhJCjioP4Y/0zxOoTvZ8k1DKlNzzAvLSNICl2RPukMW/wUcRNeL9cH7Mb8lwHP5+V+paB6zy12SFr4HAH9PdxjtC3Td6R/amhkleSvdobd3VtUNc1ahhs4ud0mSGuAeuiRJDTDQJUlqwII+KW6PPfaoJUuWjLsMSZJG5pJLLrmlqiamti/oQF+yZAnLly8fdxmSJI1Mku9N126XuyRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktSABf3f1iQtMMt2GeGybhvdsqR5wD10SZIaMLRAT3JKkjVJrhho+3SSy/rbiiSX9e1Lkvx4YNiHh1WXJEktGmaX+6nAB4HTJxuq6ncn7yd5NzDYJ3Z9VR02xHokSWrW0AK9qi5KsmS6YUkCPB940rCWL0nSYjKuY+hPAFZX1XcG2vZP8o0kFyZ5wkwTJjk2yfIky9euXTv8SiVJWgDGFehHA2cOPF4F7FdVjwX+FDgjyc7TTVhVJ1XV0qpaOjExMYJSJUma/0Ye6Em2A54LfHqyrarurqp1/f1LgOuBXxx1bZIkLVTj2EN/CnBNVa2cbEgykWTb/v4BwEHAd8dQmyRJC9Iwf7Z2JvBfwMFJViZ5WT/oKO7b3Q7wRODyJN8EPgMcV1Xrh1WbJEmtGeZZ7kfP0P7iadrOBs4eVi2SJLXOK8VJktQAA12SpAYY6JIkNcBAlySpAQa6JEkN8P+hS4vdKP9HuaShcQ9dkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqwNACPckpSdYkuWKgbVmSm5Jc1t+ePjDs9UmuS3JtkqcNqy5Jklo0zD30U4Ejp2l/b1Ud1t/OBUhyCHAU8Kh+mg8l2XaItUmS1JShBXpVXQSsn+XozwI+VVV3V9UNwHXA4cOqTZKk1ozjGPrxSS7vu+R369v2Bm4cGGdl3/ZzkhybZHmS5WvXrh12rZIkLQijDvS/Aw4EDgNWAe/u2zPNuDXdDKrqpKpaWlVLJyYmhlKkJEkLzUgDvapWV9XGqroH+Aj3dquvBPYdGHUf4OZR1iZJ0kI20kBPsufAw+cAk2fAfw44KskOSfYHDgK+NsraJElayLYb1oyTnAkcAeyRZCXwZuCIJIfRdaevAF4BUFVXJjkLuArYALyyqjYOqzZJkloztECvqqOnaT55E+OfCJw4rHqkBWXZLuOuQNIC45XiJElqgIEuSVIDDHRJkhpgoEuS1AADXZKkBgztLHdJGqtR/lJg2W2jW5Y0A/fQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1IChBXqSU5KsSXLFQNs7k1yT5PIk5yTZtW9fkuTHSS7rbx8eVl2SJLVomHvopwJHTmk7Hzi0qh4DfBt4/cCw66vqsP523BDrkiSpOUML9Kq6CFg/pe28qtrQP7wY2GdYy5ckaTEZ5zH0lwL/OvB4/yTfSHJhkieMqyhJkhai7cax0CRvBDYAn+ybVgH7VdW6JI8D/inJo6rq9mmmPRY4FmC//fYbVcmSJM1rI99DT3IM8AzgBVVVAFV1d1Wt6+9fAlwP/OJ001fVSVW1tKqWTkxMjKpsSZLmtZEGepIjgdcCz6yqHw20TyTZtr9/AHAQ8N1R1iZJ0kI2tC73JGcCRwB7JFkJvJnurPYdgPOTAFzcn9H+ROAtSTYAG4Hjqmr9tDOWJEk/Z2iBXlVHT9N88gzjng2cPaxaJElqnVeKkySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqwNACPckpSdYkuWKgbfck5yf5Tv93t4Fhr09yXZJrkzxtWHVJktSiYe6hnwocOaXtdcAFVXUQcEH/mCSHAEcBj+qn+VCSbYdYmyRJTRlaoFfVRcD6Kc3PAk7r758GPHug/VNVdXdV3QBcBxw+rNokSWrNrAI9yQWzaZuFh1XVKoD+70P79r2BGwfGW9m3TVfLsUmWJ1m+du3arShBkqT2bDLQkzwwye7AHkl264+B755kCbDXHNaRadpquhGr6qSqWlpVSycmJuawBEmSFq7tNjP8FcCr6cL7Eu4N3tuBv92K5a1OsmdVrUqyJ7Cmb18J7Dsw3j7AzVsxf0mSFqVN7qFX1furan/gz6rqgKrav7/9SlV9cCuW9zngmP7+McBnB9qPSrJDkv2Bg4CvbcX8JUlalDa3hw5AVX0gya8BSwanqarTZ5omyZnAEXTd9SuBNwNvB85K8jLg+8Dz+vlcmeQs4CpgA/DKqtq4NSskSdJiNKtAT/Jx4EDgMmAyaAuYMdCr6ugZBj15hvFPBE6cTT2SJOm+ZhXowFLgkKqa9kQ1SZI0XrP9HfoVwMOHWYgkSdp6s91D3wO4KsnXgLsnG6vqmUOpSpIkbZHZBvqyYRYhSQvasl1GuKzbRrcsLSizPcv9wmEXIkmStt5sz3K/g3uv3PYAYHvgrqraeViFSZKk2ZvtHvpOg4+TPBv/eYokSfPGbI+h30dV/VOS1811MdK8NsrjpJK0hWbb5f7cgYfb0P0u3d+kS5I0T8x2D/23B+5vAFbQ/Q9zSZI0D8z2GPpLhl2IJEnaerO6UlySfZKck2RNktVJzk6yz7CLkyRJszPbS79+jO5fnO4F7A38c98mSZLmgdkG+kRVfayqNvS3U4GJIdYlSZK2wGwD/ZYkL0yybX97IbBumIVJkqTZm22gvxR4PvADYBXwO4AnykmSNE/M9mdrbwWOqaofAiTZHXgXXdBLkqQxm+0e+mMmwxygqtYDjx1OSZIkaUvNNtC3SbLb5IN+D32rLhsrSZLm3mxD+d3AV5J8hu6Sr88HThxaVZIkaYvM9kpxpydZDjwJCPDcqrpqqJVJkqRZm3W3eR/ghrgkSfPQbI+hS5KkecxAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqwMj/p3mSg4FPDzQdAPwlsCvwcmBt3/6Gqjp3tNVJkrQwjTzQq+pa4DCAJNsCNwHnAC8B3ltV7xp1TZIkLXTj7nJ/MnB9VX1vzHVIkrSgjTvQjwLOHHh8fJLLk5ySZLdxFSVJ0kIztkBP8gDgmcA/9E1/BxxI1x2/Cnj3DNMdm2R5kuVr166dbhRJkhadce6h/xZwaVWtBqiq1VW1saruAT4CHD7dRFV1UlUtraqlExMTIyxXkqT5a5yBfjQD3e1J9hwY9hzgipFXJEnSAjXys9wBkjwYeCrwioHmv0lyGFDAiinDJEnSJowl0KvqR8AvTGl70ThqkSSpBeM+y12SJM0BA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGrDduAuQJG2BZbuMcFm3jW5Zut/cQ5ckqQEGuiRJDRhLl3uSFcAdwEZgQ1UtTbI78GlgCbACeH5V/XAc9UmStNCMcw/9N6rqsKpa2j9+HXBBVR0EXNA/liRJszCfutyfBZzW3z8NePb4SpEkaWEZV6AXcF6SS5Ic27c9rKpWAfR/Hzqm2iRJWnDG9bO1X6+qm5M8FDg/yTWznbD/AnAswH777Tes+iRJWlDGsodeVTf3f9cA5wCHA6uT7AnQ/10zw7QnVdXSqlo6MTExqpIlSZrXRh7oSXZMstPkfeA3gSuAzwHH9KMdA3x21LVJkrRQjaPL/WHAOUkml39GVf3fJF8HzkryMuD7wPPGUJskSQvSyAO9qr4L/Mo07euAJ4+6HkmSWjCffrYmSZK2koEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWrAduMuQLpflu0y7gokaV5wD12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQFey11zz+urS9LIuYcuSVID3EOXJE1vlL1ty24b3bIa5R66JEkNMNAlSWqAgS5JUgNGHuhJ9k3yxSRXJ7kyyav69mVJbkpyWX97+qhrkyRpoRrHSXEbgNdU1aVJdgIuSXJ+P+y9VfWuMdQkSdKCNvJAr6pVwKr+/h1Jrgb2HnUdkiS1ZKzH0JMsAR4LfLVvOj7J5UlOSbLbDNMcm2R5kuVr164dVamSJM1rYwv0JA8BzgZeXVW3A38HHAgcRrcH/+7ppquqk6pqaVUtnZiYGFW5kiTNa2MJ9CTb04X5J6vqHwGqanVVbayqe4CPAIePozZJkhaicZzlHuBk4Oqqes9A+54Doz0HuGLUtUmStFCN4yz3XwdeBHwryWV92xuAo5McBhSwAnjFGGqTJGlBGsdZ7l8GMs2gc0ddiyRJrfBKcZIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIasN24C9CILNtl3BVIkobIPXRJkhpgoEuS1AADXZKkBngMXZI0fqM8z2fZbaNb1gi5hy5JUgMMdEmSGmCgS5LUAANdkqQGeFKcJGlxafQEPPfQJUlqgIEuSVID5l2Xe5IjgfcD2wIfraq3j7QAr3kuSVqA5tUeepJtgb8Ffgs4BDg6ySHjrUqSpPlvXgU6cDhwXVV9t6r+H/Ap4FljrkmSpHlvvgX63sCNA49X9m2SJGkT5tsx9EzTVvcZITkWOLZ/eGeSa4de1WjsAdwy7iLGwPVeXBbresPiXffFvd4nTBdr99sjpmucb4G+Eth34PE+wM2DI1TVScBJoyxqFJIsr6ql465j1FzvxWWxrjcs3nV3vUdnvnW5fx04KMn+SR4AHAV8bsw1SZI0782rPfSq2pDkeODf6H62dkpVXTnmsiRJmvfmVaADVNW5wLnjrmMMmjuMMEuu9+KyWNcbFu+6u94jkqra/FiSJGlem2/H0CVJ0lYw0OeRJG9NcnmSy5Kcl2Svcdc0CknemeSaft3PSbLruGsahSTPS3JlknuSNH8WcJIjk1yb5Lokrxt3PaOS5JQka5JcMe5aRiXJvkm+mOTq/jX+qnHXNApJHpjka0m+2a/3CSNdvl3u80eSnavq9v7+nwCHVNVxYy5r6JL8JvCF/qTIdwBU1WvHXNbQJfll4B7g74E/q6rlYy5paPrLOn8beCrdz1O/DhxdVVeNtbARSPJE4E7g9Ko6dNz1jEKSPYE9q+rSJDsBlwDPbv35ThJgx6q6M8n2wJeBV1XVxaNYvnvo88hkmPd2ZMpFdVpVVedV1Yb+4cV01x9oXlVdXVWtXBhpcxbtZZ2r6iJg/bjrGKWqWlVVl/b37wCuZhFc9bM6d/YPt+9vI/scN9DnmSQnJrkReAHwl+OuZwxeCvzruIvQnPOyzotUkiXAY4GvjrmUkUiybZLLgDXA+VU1svU20Ecsyb8nuWKa27MAquqNVbUv8Eng+PFWO3c2t979OG8ENtCtexNms96LxGYv66z2JHkIcDbw6ik9kM2qqo1VdRhdT+PhSUZ2mGXe/Q69dVX1lFmOegbweeDNQyxnZDa33kmOAZ4BPLkaOrFjC57v1m32ss5qS38M+Wzgk1X1j+OuZ9Sq6tYkXwKOBEZyQqR76PNIkoMGHj4TuGZctYxSkiOB1wLPrKofjbseDYWXdV5E+pPDTgaurqr3jLueUUkyMfkrnSQPAp7CCD/HPct9HklyNnAw3ZnP3wOOq6qbxlvV8CW5DtgBWNc3XbxIzu5/DvABYAK4Fbisqp421qKGKMnTgfdx72WdTxxvRaOR5EzgCLr/vrUaeHNVnTzWooYsyeOB/wC+Rfd5BvCG/kqgzUryGOA0utf4NsBZVfWWkS3fQJckaeGzy12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUgP8PFkMIiRJ7J/gAAAAASUVORK5CYII=", "text/plain": [ - "
" + "
" ] }, "metadata": { @@ -1173,9 +1168,9 @@ } ], "source": [ - "fig, ax = plt.subplots()\n", + "fig, ax = plt.subplots(figsize=(8, 6))\n", "ax.hist(pm.draw(x, draws=1_000), color=\"C1\", bins=15)\n", - "ax.set(title=\"Samples from a normal distribution using pymc\", ylabel=\"frequency\");" + "ax.set(title=\"Samples from a normal distribution using pymc\", ylabel=\"count\");" ] }, { @@ -1189,7 +1184,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 31, "metadata": {}, "outputs": [ { @@ -1197,7 +1192,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1207,10 +1202,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 30, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -1228,7 +1223,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 32, "metadata": {}, "outputs": [ { @@ -1236,7 +1231,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1246,10 +1241,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 31, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -1262,47 +1257,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "They look the same (except from the random seed)! We can do a similar comparison with the owners:" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "normal_rv{0, (0, 0), floatX, False}(RandomGeneratorSharedVariable(), TensorConstant{[]}, TensorConstant{11}, TensorConstant{0}, TensorConstant{1.0})" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x.owner" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "normal_rv{0, (0, 0), floatX, False}(RandomGeneratorSharedVariable(), TensorConstant{[]}, TensorConstant{11}, TensorConstant{0}, TensorConstant{1})" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "y.owner" + "They look the same (except from the random seed)! " ] }, { @@ -1323,7 +1278,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 33, "metadata": {}, "outputs": [ { @@ -1331,7 +1286,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1341,10 +1296,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 34, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -1365,7 +1320,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 34, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1380,7 +1335,7 @@ "[z]" ] }, - "execution_count": 35, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -1391,7 +1346,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 35, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1405,7 +1360,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{(2,) of 0} [id E]\n", @@ -1415,10 +1370,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 36, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -1436,23 +1391,23 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [0.14103648 0.2376915 ]\n", - "Sample 1: [0.14103648 0.2376915 ]\n", - "Sample 2: [0.14103648 0.2376915 ]\n", - "Sample 3: [0.14103648 0.2376915 ]\n", - "Sample 4: [0.14103648 0.2376915 ]\n", - "Sample 5: [0.14103648 0.2376915 ]\n", - "Sample 6: [0.14103648 0.2376915 ]\n", - "Sample 7: [0.14103648 0.2376915 ]\n", - "Sample 8: [0.14103648 0.2376915 ]\n", - "Sample 9: [0.14103648 0.2376915 ]\n" + "Sample 0: [-0.74635385 2.40239798]\n", + "Sample 1: [-0.74635385 2.40239798]\n", + "Sample 2: [-0.74635385 2.40239798]\n", + "Sample 3: [-0.74635385 2.40239798]\n", + "Sample 4: [-0.74635385 2.40239798]\n", + "Sample 5: [-0.74635385 2.40239798]\n", + "Sample 6: [-0.74635385 2.40239798]\n", + "Sample 7: [-0.74635385 2.40239798]\n", + "Sample 8: [-0.74635385 2.40239798]\n", + "Sample 9: [-0.74635385 2.40239798]\n" ] } ], @@ -1470,23 +1425,23 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [ 0.2966496 -1.31071893]\n", - "Sample 1: [0.30452144 0.16586312]\n", - "Sample 2: [-0.4986596 0.74662501]\n", - "Sample 3: [0.60212475 0.60611069]\n", - "Sample 4: [0.4964778 0.13950609]\n", - "Sample 5: [-1.35490046 1.72980856]\n", - "Sample 6: [-0.07880712 0.37021834]\n", - "Sample 7: [ 0.12161449 -0.81646915]\n", - "Sample 8: [1.0538654 0.86119761]\n", - "Sample 9: [ 0.14870563 -0.83496269]\n" + "Sample 0: [0.38152022 1.24720653]\n", + "Sample 1: [-0.7211276 -2.56305838]\n", + "Sample 2: [-1.12496803 -0.29562402]\n", + "Sample 3: [ 0.71332907 -1.16117699]\n", + "Sample 4: [-0.32828819 3.45350206]\n", + "Sample 5: [-1.08640643 0.55016035]\n", + "Sample 6: [-1.41028394 2.02036061]\n", + "Sample 7: [ 0.61913623 -1.15537113]\n", + "Sample 8: [ 0.11898736 -2.93856116]\n", + "Sample 9: [-0.46984893 -0.60195329]\n" ] } ], @@ -1497,12 +1452,12 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 38, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1517,7 +1472,7 @@ "fig, ax = plt.subplots(figsize=(8, 8))\n", "z_draws = pm.draw(vars=z, draws=10_000)\n", "ax.hist2d(x=z_draws[:, 0], y=z_draws[:, 1], bins=25)\n", - "ax.set(title=\"Samples from a multivariate normal distribution\", xlabel=\"x\", ylabel=\"y\");" + "ax.set(title=\"Samples Histogram\");" ] }, { @@ -1538,7 +1493,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 39, "metadata": {}, "outputs": [ { @@ -1551,10 +1506,10 @@ " $$" ], "text/plain": [ - "" + "" ] }, - "execution_count": 40, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -1572,7 +1527,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 40, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1587,7 +1542,7 @@ "{'z': array([0., 0.])}" ] }, - "execution_count": 41, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -1606,7 +1561,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 41, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1621,7 +1576,7 @@ "{'z': -2.53}" ] }, - "execution_count": 42, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -1634,12 +1589,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This is nothing else than evaluating the log probability of a multivariate normal distribution." + "This is nothing else than evaluating the log probability of a normal distribution." ] }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 42, "metadata": {}, "outputs": [ { @@ -1648,7 +1603,7 @@ "-2.5310242469692907" ] }, - "execution_count": 43, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -1659,6 +1614,26 @@ ")" ] }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-2.5310242469692907" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "scipy.stats.norm.logpdf(x=np.array([0, 0]), loc=np.array([0, 0]), scale=np.array([1, 2])).sum()" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -1727,7 +1702,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 45, @@ -1750,7 +1725,7 @@ { "data": { "text/plain": [ - "array([-1.29785156, -1.08664855, -0.7177793 ])" + "array([1.63965037, 1.36884792, 1.01637141])" ] }, "execution_count": 46, From ab1f5a5028ebe4ee40b2ceb343e31c8cb79f766a Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Sun, 5 Jun 2022 20:43:59 +0200 Subject: [PATCH 21/30] style corrections part 1 --- ...veloper_guide_implementing_distribution.md | 1 + .../learn/core_notebooks/pymc_aesara.ipynb | 172 ++++++++++-------- 2 files changed, 95 insertions(+), 78 deletions(-) diff --git a/docs/source/contributing/developer_guide_implementing_distribution.md b/docs/source/contributing/developer_guide_implementing_distribution.md index 32fa236400..335d676db0 100644 --- a/docs/source/contributing/developer_guide_implementing_distribution.md +++ b/docs/source/contributing/developer_guide_implementing_distribution.md @@ -1,3 +1,4 @@ +(implementing-a-distribution)= # Implementing a Distribution This guide provides an overview on how to implement a distribution for PyMC version `>=4.0.0`. diff --git a/docs/source/learn/core_notebooks/pymc_aesara.ipynb b/docs/source/learn/core_notebooks/pymc_aesara.ipynb index 4a6f96e04f..7d702335f8 100644 --- a/docs/source/learn/core_notebooks/pymc_aesara.ipynb +++ b/docs/source/learn/core_notebooks/pymc_aesara.ipynb @@ -26,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 1, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -44,6 +44,14 @@ "# PyMC version: 4.0.0\n", "\n" ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/juanitorduz/opt/anaconda3/envs/pymc-dev-py39/lib/python3.9/site-packages/pkg_resources/__init__.py:123: PkgResourcesDeprecationWarning: main is an invalid version and will not be supported in a future release\n", + " warnings.warn(\n" + ] } ], "source": [ @@ -76,11 +84,9 @@ }, { "cell_type": "markdown", - "metadata": { - "id": "WKPLeI26AHyq" - }, + "metadata": {}, "source": [ - "![image.png](data:image/png;base64,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)" + "![aesara logo](https://raw.githubusercontent.com/aesara-devs/aesara/main/doc/images/aesara_logo_2400.png)" ] }, { @@ -194,7 +200,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -347,7 +353,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 10, @@ -391,7 +397,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -429,7 +435,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 12, @@ -463,6 +469,11 @@ "![image.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAucAAAKKCAYAAACebfVMAAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAZ25vbWUtc2NyZWVuc2hvdO8Dvz4AAAAqdEVYdENyZWF0aW9uIFRpbWUAVGh1IDAzIEZlYiAyMDIyIDE2OjE4OjQyIENFVIQZHmoAACAASURBVHic7N13eBTV/sfx9+xuyqZDCC2EFqogVaQX4QIqiEq1U0QREQuC/MCOgnJBLFexIChNBCkKIh2kIwJSpUiH0Et63d35/RFAQksCJhnh83qe+wczZ858Z88+3s9Mzpw1XC6XiYiIiIiI5DlbXhcgIiIiIiLpFM5FRERERCxC4VxERERExCIUzkVERERELELhXERERETEIhTORUREREQsQuFcRERERMQiFM5FRERERCxC4VxERERExCIUzkVERERELELhXERERETEIhTORUREREQsQuFcRERERMQiFM5FRERERCxC4VxERERExCIUzkVERERELELhXERERETEIhTORUREREQsQuFcRERERMQiFM5FRERERCxC4VxERERExCIUzkVERERELELhXERERETEIhy5eTIzKYq1s6Yya+k6dhw6RYLbl5DwctRs3JoODzaghJ9xvT0TN/91Ov53Lf73DuH7Pnfk7oWJiIiIiPwDci3Dek6u4JOBQ5m9Lwns/oQVL00RrySOH/iDed9sYNmWF/j6vdYUvN58LiIiIiLyL5c74dx9kGmD/8vsfSkEVn6Y/gMeo3YhHwDMpMP89stS4qo1VzAXERERkVtaroTzpHVT+OHPRIzAejzzejdqh/6dwg1nMeq0e/Ti1uxfMpFvp/7Kpn2nSfHOR4kqjWnb+XH+E+lH+pEuTqz9ji+++YXf98fiXaQqDUudwcxwVpOYbT8x5tuZrNp+lHhbEMWrNKXTU51pWsI3Ny5bRERERCRbciGcu9i7cTPRHgOfanfRIPRaj8fdHPrxTV4a+QepRe7k3kdaExL3JwtnT2XYph2c/WgYHUs5SNoymgFvTuWgVwT12txLpP0gq+esx31RT0nbRvPKK1M4lL8WD3brQLhnH0umTuf9/mfx/qI/DUL0mF5ERERErCUXwrlJXHQcJgYB+fPhfa2myeuYPHEj8Y5K9BjyDu3DbYBJs8Iv8+TIrXz//Rpa/9/trPxhNgddvtToNZS3WodhYHJ/RAIPfbD+3ClPs2T8j+x1FaPjwLd4qqIXYNKowCkeHbyMn5Z3p/59BVA8FxEREREryYVwbhAY5I9BPPGnz5AMBFylpTtqBztjPdgiqlK1sO3C8WFVqlDUtpmDf+3gUGoQO/9KxrSXo3rV0AsB22a3X9TRPnbuScX0HGZanzZM/3sHLgzOnDyDhwJcdISIiIiISJ7LhXDuoNTtlQiccYzYPxaw9MRdtLqhNz/duD2AYcfhuFo/Xng5AMdtPDa8D42DLm5nwy+0qIK5iIiIiFhOrvwIkV+d9txf2hsS1jPqnS9ZdTTl752uM2ya9jlfL4nCE16B8sE2PEc2s/mE51wDk5ObN3PEYyOgXEUivItQrIgdwx3Fnv1JF9okxif+3ae9NLdV8MNw72f7ISfFIiKIiIggIqIIIUHBBF/3euoiIiIiIjnHcLlcZubNblzaoTkMGfAJK46lgd2fgiVLEOaTyplDBzga58JZoTPDRzyMc84Anv8s/YXQe5pVJjj+Txb/soYoe2W6fzyMjiXtHJ89kB4frSOlcG3a3n8HIWc3MPunNRxJgaB70n+EyNz9HX36fMMOdyGqNW3M7WFwYstSft3qzQMjvqR7Ra/cuGwRERERkSzLtXAO4InbzZJpU5mzYiO7j0aT5PEhX3gZqt/Vlkfb1aeYL2CeX0pxCRv3nybFKx8lqqYvpdg80j99jrl5hvXjP+LzmeuJSvajWNXmPHx/ED8PGsPBpud/IdQkbtccxn47g+VbDxOd5kW+iMrUa/0one+rRLAenouIiIiIxeRqOBcRERERkavLlTnnIiIiIiKSOYVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi3Dkxkmijh3PjdOIiIiIiOSK8MKFcqTfXAnnAIHhR3PrVCIiIiIiOSYuqkiO9a1pLSIiIiIiFqFwLiIiIiJiEQrnIiIiIiIWoXAuIiIiImIRCuciIiIiIhahcC4iIiIiYhEK5yIiIiIiFqFwLiIiIiJiEQrnIiIiIiIWoXAuIiIiImIRCuciIiIiIhahcC4iIiIiYhEK5yIiIiIiFqFwLiIiIiJiEZYP56m7v6ZSn4dpuyoaM6+L8exm0HvdeHZbWl5Xkmc80Ym0HxbN1KS8ruRfyJPG0C9O8vJfef5NFhEREYty5HUBmfEq3IwPO99OYDF/jDyuxXPmT1aedhOZx3VcLxNu+DOMOZTKn55/oppbjycmjd+iTUrldSEiIiJiWYbL5crxx3hRx44TGH40ewe5N/Hi2+8yLs4EvGjS4XOm1QvBwM3K6b14+FglWseuY6F/KwaW2cx7S09Sr/1gRlc/wcDBbzG2UHuGFtjIe78fwqt4az7r3JGG/gakHmbyrK8ZtmEnh11+lIq8i1fbPUzrUDtpu0dT4/PFVG3bhxp/fsMnO4+TVLgjS/p0IHLbx5T9ZjnxFz4tG8UbD+L3ByrgldmlxKYw7Oc4vj/kIdnHTpO6QQyr7UUggMfNwqVxjNiayr5kg3LlAxhyt5NK3kCqi0kLYvl8h4tjHoOIcF9evjeQe0MATLauj2XAyhS2J0Lhok4Gtjm/z8PEiad4M96Pj+t5+HJxMtvi4Z52YXxawbh2Pdfw+4JTPLTWjfvCFoP724fxcXkDMPlrazxvr0pmY7RJSBEnr7QKoE1+A9exeO75JpFCDYO4/UA84w97CIsMYOQDflR0QOqZZN6fm8CPh9wkedm4vYI/g5o7qeAFpLmYvjiOT7alEeUyKFncSd+7A2gZAq4DcTScmETllsFU2x3HF3vdJIUF8POT/lS45l2Iyek9M3hh2myWnEjEJ38lnmzXmwHlg7EBKSdX8va0yfyw9wSJ3gWoVqUtwx5oym3emQ20mx/nxzBsm4vjHoPbKgYw7B4n5R2QujOG6lOTSbioebE78/Nrcy/r3yGLiIhIBnFRRQgvXChH+rbutBZbOV5+ZijzO9Ql7JKgZbfZSD4UT63WzSmwfzpj6cCAMgnM37ydeBx42yF1zxLmB9/H0LvKkbx7On2X7MGFiw0LhvP8qmPc1qIvUx5tTtiBn3hm0hz2esAeWpjiRiorfvmUUcnV6Ne+J/9tWpVCBniXeZgZravgYzhp8cAQFvV5n++alMxCsDJZuCSWrw7ZeLxDCK9GeFiwJI5JZ9L3/vVbDL1Xp1H4zhCmdvAjZG8cvX5NJQk4vDGON7eYNL03H1M6BlA9Ppn/rkohFnCfTGTAgmROFw9kUjsnIUcSeX1FCumzTQyK5zPwnE7ktcVpFK0WwJBWgbQraGRaz7XcVjuEdyrasNm9ePHR/Mzslp++JdIHJ/lwPM/MSuRgoQDGPhHMfe4k+v2YyA4PGHYDL0z++CMZnzuDGV7dzuFd8Xyx2wQ8zFkSy7hoB/0fzsfYu31I3ZnAR3+68WCyaUUMr6x3U75+MGPbOAk9ksBLsxLZb4ItxE6EzWTN0ljGpvjw/D1BDKrrTcHM/jzg3sGISd8z36zHF72epTVb+HjaLP7wAGYCs37+gq9Pl+XNHu8ytV1NUjdPZujG02T2B4Njm2N59Q835RqGMLa+g71b4vjvnx5MwKtEABObeuONQdPm6Z/d17Ud2DP/2EVEROQWYt2HdoaTiKKlKZQYfMUi7QXKcmdEMLPsPhQuXo7SiX6Yx+KJMwthGGDP14CXm9alusfJ4pWbmfTXVva7bPyy9Shm6H280LAmNW2Vid00m86b/2B5QitK+wYQbDOJd9Rg5JNPcq/fRSnPWZDKof4Y2MhfoBTVIzJ7Xv63Wo3yMbehjYj8NpJiHbyz08WBWBPyeVi4w0VqkJNnanlTyeZFr9uSeGR7MuubeVPMNDE9HnYfcXGyvDevdw8j+NztlBnky4gnffALdBDuncadgYmMj3YTbYLTMAjytWEz3ZS4M5hP6zoyfIZXrSf/tVOtf5Cdkn4ANooV8qKK8+99W3eksB8HL9V3UrMAVKjrw8Tpyfxywp8X7OnTaYLL+fFsWS9sfj4UW5/IoWgPHgxcbvAku9l8zE2p0v5MfikQHwBPGvN3uSCfPz1r+VDN5k3cjkSe2ZHCqgQ/SvrYCDIgwe7NiI6BNPfN4oAYxenR/QM6+xagbIgDe/GvmLj5GAddUNPLg8vtwZN0lD+iTlK6XFt+fqcrPlmYDxRcNogZxaBAfjvBZ9MovSyVqLMe3Nhw+Nq5LcSGAeTL56BKkbyepCUiIiJWZN1wngnDywc/w4YNL3wcBjbDBqZ54aVRe0gYRQzAFkKhABuexFiiPXGcSvBgCw0+l0MdBPv5YTPjOZNkQpCBgYGz9B008bs8PJnXOQHo+P5EBqxKYVecics0ScOW3pfp4VSiiSc2ic7DkzAA02Pixs3BJKhfLZCBR2L53++xPLUGHE4HHe4O4Z3b7NjS3Py4KI4ph91Eu8DjBlsQf780awA2O00iHZcN8lXruW4m0QkePB6TT8acYGT6JpI9sC/ahND0gvIH2LADpgN8ALcJJjZa3RXIutnxTFsYw0QTAkJ9GdA2iEdDTc4kgZHPRj4jvY8gpw2baRKdAnilX6Yzwof6WQ3mAGYc61eOYsjGvRxOcuMxXZj2c98dI5AHWndnzeRJTPpxBN8AgWF1eavzc3Qteu15LanRyXw4N4mVpz0kmSZuD5S5aL+m6ouIiEhm/rXhPDPu+GhOmVDYE8epRA+2oACCbIGE+dtwJ0RzxoRShovohEQ8tuIUvCiMO32dV/lgsp9gzaQUPliQxF/FApn9tB/+W87SYK4rfadhI8zPwIYvIx7yp+KFSUYGoX5g2Lzo/EAoT6R52BWVwrhFcUxZlMgDFQLxWRvHl/tMHu5UgDdLuHh35FkmXnpywyDokjx5zXqycj3mlT6J9OBtsxk82TGETsF/7/H3NyDm2n36hjkZ3NnJm4kuNu9PYtjcRN5f5cuDbeyEOsGT6OGsCSUMk+hEDx6bgwIXPbX38bFlOu//Yim7pvPKyp1ENB/CrpbF+HVCd7psvaiewk0Y8XwT3o+PYsNfi3l32izeXlSfTo/Xxu9qnZpupixMYF68DyN6BtE6JZH7v47n1l3XR0RERK6HReecmyREH2TjoT1sPhGDCw9xZ/ez8dBedsVlLe64jy/l49WbWLDsZ2bHGhQvU5lSjuLcU7kIttPL+eDX31m68Qc+35FCYJk6NPHPfJqBzS+IEJLZvGMdvx/axcp9Ry56QfRqhZikeMDjMTl5IpnPt7rwwuTQCTdnPXaaVXDgHZPC1F0uzsSn8cP8aHovTeGMYbJ83ilu/yyasYfdpHnZKOADhreBP5DqMjFNSE12s2ZdEstTwIx3szXOvPYtxLXqufCmp4fJU05S9bM4lrsvPtggn78Nm8fFyp2pbI5KZe3J9DnVlcr7UBI3czelEpXoZsPvsfT4KZENmQ2XJ42PRp+g1ncJrDhr4uNnJ8QBTm8Du81O83IOjLNJfPpbCiu2JzBmr0lACR8aOjPp91qndKWSCnjSYvlr+wwm7gfDc5rth8+S7N7D0A+eoOIXP7DkdCq+/iHkc9hw+vhmMj/cJMUNmCbxsWlM+y2ZKBucOZPG4eT0FnanQYgB2/amsOFoGr8ddmd4QVRERETEouHcw5Zf36f5iP60+GE1J0036xe+S7MRA3h27cksTQ/wiqhKqd3f0GPuNrzLtGV4s7J44aBG85f5uG5hdiwcQadJvxIb2Z4xne4iPAtTgL0jW/FqzQhO/vYhd3/4Bl3mb+FUJscYAT48U8ebkCMJdJ+ZTMFGQXQtDGtXxPFTLJStHczHdbw4sCaGjhNjmZXqxRP1fClhGNSrG8gTYW5GTj3DgxNimO724dXW/lSyQfWa/twbavLjz9EMO+PDkOa+FIxL4s1VaVzrOXhm9QBgQmqaSVyKeVlfFaoF8EhRmD/nLPePi2bwzvTVW3yKBfB5ayeFouLoOi6ad/dC4zp+NPXP5AOyefHEf/y5MzmRF8afod3UBI4UC2BEI298MKjaIJihNRzsWhVD11lJxBX357NWTm5kyrazfGv6VQxj3/IP6LrUTbeHO9HQ7wBfTJ/PdqM0T97/IHUTF9Lj0//jnm9+JqpUB764p0r6PPirMRy0q+9LZSOVd36IY2XRQIZUdZC0K57he869FBrhx8uV7JzaGEO7b87Sc0UKp7XkuYiIiFzEukspXi/3Lt4c+hpfBnVhXa97Kab37kRERETkH3RrLqUoIiIiInKLUTgXEREREbGIm29ai4iIiIhIDtK0FhERERGRW4DCuYiIiIiIRSici4iIiIhYhMK5iIiIiIhFKJyLiIiIiFiEwrmIiIiIiEUonIuIiIiIWITCuYiIiIiIRSici4iIiIhYhMK5iIiIiIhFKJyLiIiIiFiEwrmIiIiIiEUonIuIiIiIWITCuYiIiIiIRSici4iIiIhYhMK5iIiIiIhFKJyLiIiIiFiEwrmIiIiIiEUonIuIiIiIWITCuYiIiIiIRSicZ4drP+Nemsk21410ksLy11/j/YUpeVyPm+2fvUe34TvJ9uHuU8x9ZShD50djXlrS9ii6DDzM79nt1Exl5sd/0n9RCp5LdqXsmEf/LlNYF3Pp2URERERuLgrn2WDGn+DQqUujY965sXpslGzfmdceLYE9e2fl9PyZzKARXZuHYFyy1/C14+9rw3npjkzZ8XeC09d+WZ8+FZrStc5Bxo7bQ3J2uxURERH5F3HkdQFXZpKw/kcGfmrn6c/aUMnPJPGPnxjwCXT/9H5u98928suatBMs+WgyP6yLxYWdgg1b8+KzlSlgA0/UCgY/P4fN0SY7O27CgY1y3Z6nf+vgy8LkpdxHNzJq0Gw2JDgJK1eVsucTpmsvY55aSGJNO/vWpnJHu3IcXbCOPWHNefuNGhRwXW89Hg5N+JQRiXfTzfdXRk4/RJyrMB2+7Mn94TZca6fz/NAtJKYkYTTpyqi+5c99EdLY8+1IRhxpypABtxNsuNg3biTDDzZm8KtVCTEAVxRzfzhOzecep+AVLtzwteHvNDKEczM2hhH/O02JrqVoX9TAjIvho09OUaxzaToUO9fQsOHva+B02q7weXpRvkNDCvVYyopHIvlPaA6Nv4iIiEges2g4N/CvcQ9P1fyMMeP3M/hxkymf7aX6S70yDeZm3C4mvr2K3ZdMq7BH1ub55yoSfNXDTeKXz+XbXWV5Y9zdlE75k5HP/MiPDSvSvaodW3gDXh2eTP/X4uky9gEqZfmTS2HDtzPZXuUJPulZEvuB5bzby42zJYANI/UIaVVeoU/o1/Rb6MWI/7Zi0uPr2J5UneprrrceGwWLhXDyy5nMrHs3b02pTCFvE/Nc7HXc2ZaR0x7kxLTPGbjv4uO8iHykPU36TGTC6kieLryGUYsK0vnjKunBHHDv2czapAo8dbvXFa/W8LXj52vivHhbUDBPto7j9Wmnqd0zH0dnneBUnQieK5ZxMJxOB/4+Vx4gI38l6pWdzeq1CTS7JyDTGyIRERGRfyOLhnPA8KVyt7bc/uIMPjoIZ2q35Z0qPpkfFliOx4aXu54TEtD0Mb5uYOLlDXgXp3xEIutPuSCbEz8ycJ9gxy5vqvaJwBegeBXqlJ3HpvP77aGUKOlLQJwffhEFKeDtQ7B/CvEJ3FA9dqcPjqQiNOtemULe6deXpUDrHc6DfWrx1juTGOEfTbGePal1PpljEr87itMlq1PyKt8cIyQ/A3qA9yUTpkKqFObxbfv4fHwCCYn56NvJl4zx3uD2ByOpaLtKlYYfpcuFMGXXMTz3lLmRERERERGxLOuGcwC/ktzTwpvnRxk80bsEmUfzG+M5vZuZXyzmtwMpGA6IO+ymePMb7NRMJjHRm5DzT/wNH/z8Lm5gx9sLDMPA4WUnPUSbmOYN1mMY2MOLUtw3+yU7St1Ji2KL+F9UA4be4XdRqDeJjU7EJ38gvldL+oaBj/eVtjuo2TCIiR+fIfyRYhS7Qrq2OWxc6dBzHRAc6k/8wQTc3NDtkoiIiIhlWTqcm6c3MeFnB3e3MZn75UbqvlGd/Jk8/r3+aS2pbBg1iSV+HXn384qE2OJZ2P991t3oRRg+OH1TSEg4t9KImUBMllYd+QfqsduwZ3v+h0nC+nnMOFWdNuGbGDezJq+3DbvxMOxJYd7sWMKbBHNywXE2VShKNb/MDxMRERG5lVg3nJsxLP/fPOLadOPF+yGs32hGLSjFKy0uXyHkYtc9rcV0ER+XRkiZQgTbIWXvRtbs8WCmpGHigwEY3g68Es5wPMZDpfweEhI8+AV4X6jHjN7JhKGbydelHa3Ln5vXYS9IubKpTF51iKTbS8DODazZ7yEoF+q5HmbcLsZ/doja/9eLTqGbGf7iVGbXfJo2JdKf6geH+JGyLY5kEwKyfCKTqBVHmOMsyKBWgZyy7eN/P8cxuEMggdnoI+Z0AgH5AvTUXERERG5aFl1K0eTUghlMjqvHU/eHYbeHcc8L9Uj4djqLj+fQWteGk5pt62HO+JK+L3zFx/MDaf1IKQ6M+5bp293pTYpU4e46Zxn32Gs89uD7vD52H6kZynaRFJtEcoan9r7U6tKayPXj6NlhKG9N86NmTW9MTyZLIP4T9VyJ6wDf9RhEt7aDeOWbA0QvnMDTbd+m+0tLOOhO5I+vfmJPwwdpW96BUaA63Z5wMueDZRx0ARj4lwkndN8h9mdjHXP3sdN8udxBhweCyWfYKPufItQ+dJSx21yXrZN+VWYie3fFEFG2kFW/tCIiIiI3zHC5XDn+yy5Rx44TGH40p08jucF1mIlPjyehd1+ern7lFVtygnl6LUN6bKH2l920lKKIiIjkqbioIoQXLpQjfeshpGSPI5y7OxRiw/frOZlrP9iZxl9Tl3OscWMaKJiLiIjITUzhXLLJILRFG+43l/HNguisT0u5ASk7FzN6dQSdn4jkOhafEREREfnX0LQWEREREZFs0LQWEREREZFbgMK5iIiIiIhFKJyLiIiIiFiEwrmIiIiIiEUonGeHaz/jXprJtmz8AM/lUlj++mu8vzAlj+txs/2z9+g2fCfZPtx9irmvDGXo/MtXa3Ftj6LLwMP8nt1OzVRmfvwn/RelcOnPM6XsmEf/LlNYF5NrazeKiIiI5AmF82ww409w6FQmv+yZi26sHhsl23fmtUdLYM/eWTk9fyYzaETX5iFcuuq44WvH39eGM9vLkdvxd4LT135Znz4VmtK1zkHGjttDcna7FREREfkXceR1AVdkJrFy0H+ZXaEX73YqkH4HYcYw75WP2NiiL680978swP0j0k6w5KPJ/LAuFhd2CjZszYvPVqaADTxRKxj8/Bw2R5vs7LgJBzbKdXue/q2DM63FfXQjowbNZkOCk7ByVSl7PmG69jLmqYUk1rSzb20qd7Qrx9EF69gT1py336hBAdf11uPh0IRPGZF4N918f2Xk9EPEuQrT4cue3B9uw7V2Os8P3UJiShJGk66M6lv+3BchjT3fjmTEkaYMGXA7wYaLfeNGMvxgYwa/WpUQA3BFMfeH49R87nEKXuHCDV8b/k4jQzg/tXI/r+wI4cNuIQQbACYH5+/l3bOF+F+nAHwADBv+vgZOp+0Kn6cX5Ts0pFCPpax4JFK/ECoiIiI3LWuGc8NJzbsrMvbrDRxq34ISdjCPbWbF/jLcW/fawdyM28XEt1ex+5JpFfbI2jz/XMVz4fCKRxK/fC7f7irLG+PupnTKn4x85kd+bFiR7lXt2MIb8OrwZPq/Fk+XsQ9QKcufXAobvp3J9ipP8EnPktgPLOfdXm6cLQFsGKlHSKvyCn1Cv6bfQi9G/LcVkx5fx/ak6lRfc7312ChYLISTX85kZt27eWtKZQp5m5jnPjnHnW0ZOe1BTkz7nIH7Lj7Oi8hH2tOkz0QmrI7k6cJrGLWoIJ0/rpIezAH3ns2sTarAU7d7XfFqDV87fr4mzou2hVYNody8aFZHh3B3PsCTzIqNbmq3808P5uc4nQ78fa48QEb+StQrO5vVaxNodk9AztyciYiIiOQxa4ZzwLdGLeok/8DSnc144jaDo0s3cuLO5tQIuPZxRmA5Hhte7jrOaBDQ9DG+bmDi5Q14F6d8RCLrT7kgmxM/MnCfYMcub6r2iUj/dcviVahTdh6bzu+3h1KipC8BcX74RRSkgLcPwf4pxCdwQ/XYnT44korQrHtlCnmnX1+WAq13OA/2qcVb70xihH80xXr2pNb5ZI5J/O4oTpesTsmrfHOMkPwM6AHeF02YMgICuavcMX78I4UWTX0wD8Wwxgzm+ZIXV2Rw+4ORVLRdpUrDj9LlQpiy6xiee8rcyIiIiIiIWJZlwzleJbjrLjv/nb+Xh8oHsvLXBGr1LJPhSes/zXN6NzO/WMxvB1IwHBB32E3x5jfYqZlMYqI3If7nQqfhg5/fxQ3seHuBYRg4vOykh2gT07zBegwDe3hRil/H7907St1Ji2KL+F9UA4be4XdRqDeJjU7EJ38gvldL+oaBj/elG+1UqxXENzNjONAkjMQNsfhUL07pSxK2zWHjskP/7pjgUH/iDybg5oZul0REREQsy7rhHBslmtcg+OX1bGgSxKqU23k2C3NJrn9aSyobRk1iiV9H3v28IiG2eBb2f591N3oZhg9O3xQSEs6tNGImEJOlVUf+gXrsNuzZnv9hj4hXUAAAIABJREFUkrB+HjNOVadN+CbGzazJ623DbjgM+5QJoa4riqW7nSRtc9DwGR+9jSwiIiJyCQuHc7AVq06T4h8z8SMvfO7qSmQWqr3uaS2mi/i4NELKFCLYDil7N7JmjwczJQ0THwzA8HbglXCG4zEeKuX3kJDgwS/A+8KTZTN6JxOGbiZfl3a0Ln8uetoLUq5sKpNXHSLp9hKwcwNr9nsIyoV6rocZt4vxnx2i9v/1olPoZoa/OJXZNZ+mTYn0p/rBIX6kbIsj2YSA7JzI7qRJDRuDpx3DExpKh2y/1GkSczqBgHwBemouIiIiNy1rP7w0gqnXsjhnjwTSoFmhnC3WcFKzbT3MGV/S94Wv+Hh+IK0fKcWBcd8yfbs7vUmRKtxd5yzjHnuNxx58n9fH7iP14j5MF0mxSSRneGrvS60urYlcP46eHYby1jQ/atb0xvRksgTiP1HPlbgO8F2PQXRrO4hXvjlA9MIJPN32bbq/tISD7kT++Oon9jR8kLblHRgFqtPtCSdzPljGQReAgX+ZcEL3HWJ/thdHNyheM5iws2mUrhlE9rN5Int3xRBRNoe/ByIiIiJ5yHC5XDn+yy5Rx44TGH70uo5N+2MGfSYU5M3h9SmgJTrynuswE58eT0Lvvjxd/cortlyNmRTDhx/EUrtPBPX9Mm+f4djTaxnSYwu1v+ympRRFREQkT8VFFSG8cKEc6dvaDyFTjjN/0i5Ktqqa/SetkjMc4dzdoRAbvl/Pyezc1pke/vr1NAcq5qNmNoM5pPHX1OUca9yYBvoiiIiIyE3MsuHcvXUuLz/8JUuLtqJzE61rbR0GoS3acL+5jG8WRJOlfJ4Wx5eDdzF8jz/d7w4guwvIpOxczOjVEXR+IjLbx4qIiIj8m1h+WouIiIiIiJXcutNaRERERERuIQrnIiIiIiIWoXAuIiIiImIRCuciIiIiIhahcC4iIiIiYhEK5/8kM5WjW45wxp3XhYiIiIjIv5Flw7nn8AoGPzqYHg+l/++p+/+Pjs/9ytEcW/gxjT3ffkyvIVuIMQFc7Bv3Cb3e3UR0Vs9pxvPn7G0cSM1i+5TdjHp0GON3XJTm4zczov1nzMq5CxURERERi3LkdQFXYyvWgFcnNkj/R+J+Jrw0mTOdalI4k18jMuN2MfHtVex2Zdxuj6zN889VJPiqx3sR+Uh7mvSZyITVkTxdeA2jFhWk88dVCMmpX0DyKUWTJjBi3j4eqlAGL0zifvuDbaVr0DmzCxURERGRm45lw/kFZhxrP/2BP2p04J0GgZn+UqgRWI7Hhpe7vnN5h/Ngn1q89c4kRvhHU6xnT2plIZm7tixj2Ji9pJgmrhQ3xoBv+QkbBVu05pl781/jzxN2IlvUILDfOjY+VYZaznh+X3SAsv9pR35lcxEREZFbjsXDuYdjs39g7NE76f9SafxyIbA6St1Ji2KL+F9UA4be4ZfpzQCA4/ZGDPiwEXjOsOi/68n/QnOqO7N2Plvx6jQO/5Rf1yRS8/atrNhdmuYD/bN0XhERERG5uVg6nKf+tZhPJjvo+EFDintl7Zjrn9YCYJKwfh4zTlWnTfgmxs2syettw7Bf7wVkhZGP+i3CmbZgC7tO/0HUHXdRPUDRXERERORWZNlwbsb9xbj3N1Ky97M0Kpj191ZvZFqLGbeL8Z8dovb/9aJT6GaGvziV2TWfpk2JnIznBsENalF59BxGHvZwR5+y+Obg2URERETEuiwazk3iVixl4cFonMM+YO35zd4VeHpMB+70yYlTJvLHVz+xp+FDDC7vwKA63Z7YzGsfLKPaiLsonpVPypafZv/XPNunNgIr0KTOj7y3uSbP3W7RIRERERGRHGe4XK4cX7Mv6thxAsOP5vRp/sU8HBj3Cf/zdGRol6I5O41GRERERG5IXFQRwgsXypG+LbvO+a3EfWITUxc6adqyiIK5iIiIyC1M4TxPeTj0w5f0eGYRtofb0ryIXgQVERERuZVpWouIiIiISDZoWouIiIiIyC1A4VxERERExCIUzkVERERELELhXERERETEIhTORUREREQsQuFcRERERMQiFM5FRERERCxC4VxERERExCIUzkVERERELELhXERERETEIhTORUREREQsQuFcRERERMQiFM5FRERERCzCkVsniosqklunEhERERH5VzJcLpeZ10WIiIiIiIimtYiIiIiIWIbCuYiIiIiIRSici4iIiIhYhMK5iIiIiIhFKJyLiIiIiFiEwrmIiIiIiEUonIuIiIiIWITCuYiIiIiIRSici4iIiIhYhMK5iIiIiIhFKJyLiIiIiFiEwrmIiIiIiEUonIuIiIiIWITCuYiIiIiIRSici4iIiIhYhMK5iIiIiIhFKJyLiIiIiFiEwrmIiIiIiEUonIuIiIiIWITCuYiIiIiIRSici4iIiIhYhMK5iIiIiIhFKJyLiIiIiFiEwrmIiIiIiEUonIuIiIiIWITCuYiIiIiIRSici4iIiIhYhMK5iIiIiIhFKJyLiIiIiFiEI1fOkraaoe3fYEGCeW6DgWH3xj+4ICVuu4Mmrdty7x1F8Dm3N2X7RP7vjSmcrNSDoW/cS7huIURERETkFpA74fw8mx8latahTJABnhRijuxk26of2bZqHnPu7cc7vRtSyG4Sv28ru6MTSNn2J4fT7iXcJ/OuRURERET+7XI3nBv5qdO5P09VsJ/b4CZm6xSGvP0N62cPZXDhYox4qBShLV9heNAfxETUoZaCuYiIiIjcInI3nF/GTnDlhxjQ8y+efH8ZO6ZNZd39/ah1YCrvvTOZ4xWfYcyH7SlipBC1ejqTZixm3c4oYlx+FLm9GU/0epImEd6ASfzOnxk1ajortx8hJtWNeX4Gjb00T4z8lNpLevD8NDsdX++Ke8bn/PxnMvUGjKV30bVM+X4Wyzfu5mich8DiNWnV7Tkeqx2GHTc7v+7O89Ps3PvUf0hc/BOr9yUQdFsbXni5JYk/jWTcgs0cSXJSpNo99HixK7XDNAdHRERERK6PBZKkQUidxlTzNfDEbOaPva7LWphxG5j06UR+iynMna3a8WCTCBI3TmfooAnsdIEZs4yPX/0fcw6E0vyZV+jf635uC7SBrQDV7m9P/aLnntS7DvLT0PeZuukshm8Qwf6xrPj2M6ZvSaNE/fto36YeBU6tZsI7Q/jxsOfvAtIOMHv8chx1O9GtbWXcm6cwuNcLfLDahwaP9eCROkEcX/s97/1vEWfNy8oXEREREcmSPH5yfo53CPn8DUiKIzbWhHwZdxuBdek7cRZgpG8wY4g48xAfbFjN6gOdiYzdyOZYKNyuG0/edxsOGpNv/3IGzA2m2r3/IdJpshPANEkr0IJ3hvWkdv5zl159Ki0vnMlDi3xRPPX1DlatO03bYvnPbbdT/uGBvNwxHJunJskbnuLrvwya9x1A17o+0CKA3WveY9WWjexyN6e2NT5VEREREfmXsUaMTI3mbIIJRiBBQcYVmyRHreXnH+exatMuDh47S3yyC0gkMdHEXqQExbxMdmxayZaTJSlvbmXNtjgIqEbJAgZwYY4LZVq2pVb+vy/bjN/LspkzWfTbFv46dJKYhGTc2EhKSMTkfDg3MAwj/dbAcOLnZwC+BPifeyLv5cTPAWZKMil6ci4iIiIi18kC4dwkZu0yNiab2IKrUL20Aw5kbJGycwL9+o1jd1ANHuz0DI+XCWHnmH58vQlME4zCrenzwmb6Dp9Cv4cnAwY+YdXo1P8Z6gdcHPYvCtmAGbeekS+8wU8nClG/Q0eef7IEtt8+4c3J+1DGFhEREZHclsfh3EPMn1N5b+RyYkwnldp34A7npW1c7FzwCzuTfGj48ps83dgJZhwnvC9qYp5l24rNRJd5iKF9m5DPKx9FwvPjzGRGferGOcw9lEbofb15tXN1HHiI2mGB+xURERERuSXlbhI1z7Bm7FBOBRlgphJ79C+27TxOoumkdKt+DGxfEgfgznCQjXwF8mHnNHvWLmVzwUKcXP09Y36/6MVR1242bIrBba7ip1kmkfmd+PgFU7B4RWpUjyTkKldpz1+AEMPkzI41rNrmg9+BxYydtBOXFd6TFREREZFbTu6Gc08iB35fzAEMDJsDZ3BBStS5j8at29P6zqL4XvEgG8Xue44nd37IlGUfM2B1QcrXu4/evQL5+Ivt6U0c5alzRz4WLz/M2tmTWe0x06elGDYCqz/Hp++3umLPjts68eLDB/hs9s+898oiilRuzIMvdcXvg3HE5swnICIiIiJyVYbL5fqXT6/2cGhaX3p9dZK73h3Ji7UCMUwXCcdWMrLfYObHNOKNqa/RUD9mJCIiIiIWd1NMsHanJJPmOcPmnycz/WQJguzJnP5rGRtO2SjcojlVvTPvQ0REREQkr90ET86BtGP89sN4pi5Zz67DZ0nGl3zFKlD77od4/P7qFLgpbkFERERE5GZ3c4RzEREREZGbgJYlERERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMRkWv4/PPPcTgcFC5cmLi4uAz7zpw5g8PhYPjw4XlUnVzN6NGjcTgchIWFER0dnWFffHw8DoeDIUOG5FF1IiJXp3AuIpIFp06dYsSIEXldhmTT2bNndfMkIv8qCuciIlnQqlUrPvzwQ06ePJml9ikpKWzcuJHNmzeTlpZ22f7ExETi4+MvtP3tt984ePDgVfszTZM9e/awatUqzp49e30XcQtq1aoVn3zyCUePHs1S+9TUVDZt2sSmTZtITU29bP+l47Z27VoOHDhw1f5M02Tv3r2sWrWKM2fOXN9FiMgtReFcRCQLXnvtNTweD++9916mbUePHk1YWBh33HEHNWrUoFChQkyaNClDm6eeeooWLVowZswYQkNDqV+/PqVLl+bRRx/F7XZnaLts2TIiIyMpX748jRo1omDBgvTt2/eKoV8yGjBgADabjcGDB2faduzYsYSFhVGzZk1q1qxJwYIFGT9+fIY2vXr1okmTJowfP57Q0FDq1atHZGQknTp1wuVyZWi7cuVKypUrR7ly5S6M24svvnjF0C8icp7CuYhIFhQuXJjevXvzxRdfXPNJ6S+//EKPHj14+umnOXnyJEePHuWBBx7g8ccfZ9WqVRnabtu2jdGjRzNhwgT27dtHv379mDx5MpMnT77QZufOnbRs2ZJatWqxZMkSjh07xrBhw/jiiy/46KOPcux6bxZhYWG89NJLjB49mj179ly13YIFC3jyySfp0qULJ06c4Pjx43Tq1ImuXbuydOnSDG137drFyJEjGTduHPv372fAgAFMmzaNCRMmXGizZ88eWrRoQZUqVVi0aBHHjh3jww8/ZMyYMZpmIyLXpHAuIpJF/fr1w8/Pj7fffvuqbd555x0qVarEsGHDyJcvH2FhYXz55ZcUL16c999/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)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, { "cell_type": "markdown", "metadata": {}, @@ -602,7 +613,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 15, @@ -696,7 +707,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 18, @@ -741,7 +752,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 19, @@ -828,7 +839,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 21, @@ -870,14 +881,12 @@ }, { "cell_type": "markdown", - "metadata": { - "id": "Zkqw774ThP93" - }, + "metadata": {}, "source": [ "---\n", "## PyMC\n", - "![image.png](data:image/png;base64,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)\n", - "\n" + "\n", + "![pymc logo](https://raw.githubusercontent.com/pymc-devs/pymc/main/docs/logos/PyMC.png)" ] }, { @@ -906,7 +915,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -972,7 +981,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -982,7 +991,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 25, @@ -1022,7 +1031,7 @@ { "data": { "text/plain": [ - "array(0.52473897)" + "array(0.20297711)" ] }, "execution_count": 26, @@ -1050,16 +1059,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: 0.5247389749488223\n", - "Sample 1: 0.5247389749488223\n", - "Sample 2: 0.5247389749488223\n", - "Sample 3: 0.5247389749488223\n", - "Sample 4: 0.5247389749488223\n", - "Sample 5: 0.5247389749488223\n", - "Sample 6: 0.5247389749488223\n", - "Sample 7: 0.5247389749488223\n", - "Sample 8: 0.5247389749488223\n", - "Sample 9: 0.5247389749488223\n" + "Sample 0: 0.20297710618737433\n", + "Sample 1: 0.20297710618737433\n", + "Sample 2: 0.20297710618737433\n", + "Sample 3: 0.20297710618737433\n", + "Sample 4: 0.20297710618737433\n", + "Sample 5: 0.20297710618737433\n", + "Sample 6: 0.20297710618737433\n", + "Sample 7: 0.20297710618737433\n", + "Sample 8: 0.20297710618737433\n", + "Sample 9: 0.20297710618737433\n" ] } ], @@ -1085,7 +1094,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1095,7 +1104,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 28, @@ -1124,16 +1133,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: 0.22292334278176149\n", - "Sample 1: 0.22292334278176149\n", - "Sample 2: 0.22292334278176149\n", - "Sample 3: 0.22292334278176149\n", - "Sample 4: 0.22292334278176149\n", - "Sample 5: 0.22292334278176149\n", - "Sample 6: 0.22292334278176149\n", - "Sample 7: 0.22292334278176149\n", - "Sample 8: 0.22292334278176149\n", - "Sample 9: 0.22292334278176149\n" + "Sample 0: -0.5540632985052292\n", + "Sample 1: -0.5540632985052292\n", + "Sample 2: -0.5540632985052292\n", + "Sample 3: -0.5540632985052292\n", + "Sample 4: -0.5540632985052292\n", + "Sample 5: -0.5540632985052292\n", + "Sample 6: -0.5540632985052292\n", + "Sample 7: -0.5540632985052292\n", + "Sample 8: -0.5540632985052292\n", + "Sample 9: -0.5540632985052292\n" ] } ], @@ -1156,7 +1165,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1192,7 +1201,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1202,7 +1211,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 31, @@ -1231,7 +1240,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1241,7 +1250,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 32, @@ -1286,7 +1295,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1296,7 +1305,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 33, @@ -1360,7 +1369,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{(2,) of 0} [id E]\n", @@ -1370,7 +1379,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 35, @@ -1398,16 +1407,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [-0.74635385 2.40239798]\n", - "Sample 1: [-0.74635385 2.40239798]\n", - "Sample 2: [-0.74635385 2.40239798]\n", - "Sample 3: [-0.74635385 2.40239798]\n", - "Sample 4: [-0.74635385 2.40239798]\n", - "Sample 5: [-0.74635385 2.40239798]\n", - "Sample 6: [-0.74635385 2.40239798]\n", - "Sample 7: [-0.74635385 2.40239798]\n", - "Sample 8: [-0.74635385 2.40239798]\n", - "Sample 9: [-0.74635385 2.40239798]\n" + "Sample 0: [ 0.47385668 -0.47635737]\n", + "Sample 1: [ 0.47385668 -0.47635737]\n", + "Sample 2: [ 0.47385668 -0.47635737]\n", + "Sample 3: [ 0.47385668 -0.47635737]\n", + "Sample 4: [ 0.47385668 -0.47635737]\n", + "Sample 5: [ 0.47385668 -0.47635737]\n", + "Sample 6: [ 0.47385668 -0.47635737]\n", + "Sample 7: [ 0.47385668 -0.47635737]\n", + "Sample 8: [ 0.47385668 -0.47635737]\n", + "Sample 9: [ 0.47385668 -0.47635737]\n" ] } ], @@ -1432,16 +1441,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [0.38152022 1.24720653]\n", - "Sample 1: [-0.7211276 -2.56305838]\n", - "Sample 2: [-1.12496803 -0.29562402]\n", - "Sample 3: [ 0.71332907 -1.16117699]\n", - "Sample 4: [-0.32828819 3.45350206]\n", - "Sample 5: [-1.08640643 0.55016035]\n", - "Sample 6: [-1.41028394 2.02036061]\n", - "Sample 7: [ 0.61913623 -1.15537113]\n", - "Sample 8: [ 0.11898736 -2.93856116]\n", - "Sample 9: [-0.46984893 -0.60195329]\n" + "Sample 0: [-0.57795086 -0.33999804]\n", + "Sample 1: [-1.81857076 1.9581163 ]\n", + "Sample 2: [-1.21316707 1.11236001]\n", + "Sample 3: [-0.65227326 1.64559109]\n", + "Sample 4: [0.46256757 1.01906687]\n", + "Sample 5: [-0.31869496 2.35081405]\n", + "Sample 6: [-0.47447351 -3.27005501]\n", + "Sample 7: [-0.20685277 0.39483451]\n", + "Sample 8: [-0.99561576 -2.92132874]\n", + "Sample 9: [-0.17359813 1.20051413]\n" ] } ], @@ -1457,7 +1466,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeQAAAHiCAYAAAA597/kAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAfAklEQVR4nO3deZRkB33d8Xu7eptVoxmtaAYkViPLAswgVgcjCSxAlk4SG4OBgO1kTkhwIIfFgBIsTmyHAz4YCDg+Y8AEJCNjFocDAi0BTEhAIIQkECOwAgiNZoT2WXt6qfrljypBM2rNjPR+PfWbft/POXPU1fV06/deV9WtV9tzRAgAAAzXyLAHAAAAFDIAACVQyAAAFEAhAwBQAIUMAEABFDIAAAVQyEAhti+0fdEQLvcttj9wuC8XwM9RyIAk28+y/X9t77B9t+3/Y/spw54rwwOVvO2w/WhJiog/i4h/fQhZX7Z90OUAPHijwx4AGDbbqyV9VtKrJH1c0rikX5M0Pcy52sb2aETMDXsOYFjYQwakx0pSRHwsIroRMRURl0fE9ZJk+1G2v2j7Ltt32r7Y9pr7/mfbP7b9BtvX295j+4O2j7f9edu7bF9p++jBsicP9kw32d5me7vt1z3QYLafNthzv9f2dbZ/fd55r7T9w8Fl/Mj2Sx/qBpi/F2170vZFg/W91/Y3B+vzp+o/UHmf7d223zdY/hmDZXYM/vuMebmn2P7KvO3w/nmXc9+2+APbP5H0xcHv/972bYO8r9j+5Xl5H7b9l4Ntu3vwTMYJtt9t+x7bN9p+0kPdDsAwUciA9ANJXdv/w/bz7yvPeSzpv0p6mKTHS9og6cL9lvmXkp6rfrn/pqTPS3qLpGPUv539h/2Wf46kx0h6nqQ32T57/6FsnyTpc5L+RNJaSa+X9Enbx9peIem9kp4fEaskPUPStQ96zRf2CklHqb+e6yT9W0lTEXGBpP8t6dURsTIiXm177WDG9w6WfZekz9leN8j6W0nfGJx3oaSXL3B5z1Z/u/7G4PTn1d82x0m6RtLF+y3/Ikn/Sf1tOy3pa4PljpH0icEMwBGHQkbrRcROSc+SFJL+WtIdtj9j+/jB+TdFxBURMR0Rd6h/h//s/WL+W0T8NCJuVb+0roqIb0fEtKRPS9p/r+1tEbEnIr4j6W8kvWSB0V4m6dKIuDQiehFxhaSrJb1gcH5P0mm2l0XE9oi44QCr+aLB3u7P/h1g2Vn1C/TRg2cMvjXYRgt5oaR/ioiPRsRcRHxM0o2SftP2wyU9RdJbI2ImIr4q6TMLZFw42BZTkhQRH4qIXYNtd6GkJ9g+at7ynx7MtE/9bbsvIj4SEV1Jf6f7b2vgiEAhA5IiYktEvDIi1ks6Tf294XdLku3jbF9i+1bbOyVdpP7e2Hw/nffz1AKnV+63/C3zfr55cHn7e4Sk396vRJ8l6cSI2CPpd9Tfe91u+3O2f+kAq/jxiFgz/98Blv2opMskXTJ4Wv0dtsceYNmHDeaf72ZJJw3Ouzsi9s477xbd389+Z7tj++22/99gW/94cNb87f1gtzVwRKCQgf1ExI2SPqx+MUv9p6tD0ukRsVr9PVc3vJgN835+uKRtCyxzi6SP7lekKyLi7YM5L4uI50o6Uf290r9uOJMGubMR8baIOFX9p8LPlfSv7jt7v8W3qf/AYb6HS7pV0nZJa20vn3feBt3f/MzflXS+pLPVf9r85MHvm25voDwKGa1n+5dsv872+sHpDeo/hfz1wSKrJO2WdO/gdd03JFzsf7a9fPCGpd9T/6nW/V2k/lO/vzHYc5y0/eu21w/eZHXe4LXk6cF83YS5ZPs5tn/FdkfSTvWfwr4v+6eSHjlv8UslPdb279oetf07kk6V9NmIuFn9p9gvtD1u++nqv75+IKsG63OXpOWS/ixjnYAjAYUMSLskPVXSVbb3qF/E35V037uf3ybpVyXtUP8NTJ9KuMx/lHSTpP8l6c8j4vL9F4iIW9TfW3yLpDvU32N+g/q325HBfNsk3a3+a9r/LmEuSTpB/TdH7ZS0ZTDrfZ9jfo+k3xq8o/m9EXGX+nvQr1O/RN8o6dyIuHOw/EslPX1w3p+o/8DjQB8n+4j6T3nfKul7+vmDImDJc8T+z0ABWCy2T5b0I0ljbfzMre2/k3RjRPzxsGcBqmEPGcCisf0U9z/HPWL7HPX3+P9hyGMBJfFNXQAW0wnqP8W/TtJWSa+KiG8PdySgJp6yBgCgAJ6yBgCgAAoZAIAChvIa8rgnYlIrhnHRAAAcdrt0z50RceyBlhlKIU9qhZ7qs4Zx0cDSZZ7wOiyiN+wJcAS6Mj6x/1fM3g+3YAAACqCQAQAogEIGAKAAChkAgAIoZAAACqCQAQAogEIGAKAAChkAgAIoZAAACqCQAQAogEIGAKAAChkAgAIoZAAACqCQAQAogEIGAKCAoRwPGXjIqh3zt9Cxcd3ppOREt5uSk7VtPDqWkhNzsyk5KbKux4Wuf2iu2L0bAADtRCEDAFAAhQwAQAEUMgAABVDIAAAUQCEDAFAAhQwAQAEUMgAABVDIAAAUQCEDAFAAhQwAQAEUMgAABVDIAAAUQCEDAFAAhQwAQAEphWx7je1P2L7R9hbbT8/IBQCgLUaTct4j6QsR8Vu2xyUtT8oFAKAVGhey7dWS/pmkV0pSRMxImmmai2Y8OpaSE3OzKTlZ3Omk5GSt18jEZOOM3kzOzSVt23S7KTlp18GkeeSkV+iiVyMDS07GNfSRku6Q9De2v237A7ZXJOQCANAaGYU8KulXJf33iHiSpD2S3rT/QrY32b7a9tWzmk64WAAAlo6MQt4qaWtEXDU4/Qn1C/oXRMTmiNgYERvHNJFwsQAALB2NCzkibpN0i+3HDX51lqTvNc0FAKBNst5l/YeSLh68w/qHkn4vKRcAgFZIKeSIuFbSxowsAADaiG/qAgCgAAoZAIACKGQAAAqgkAEAKIBCBgCgAAoZAIACKGQAAAqgkAEAKIBCBgCgAAoZAIACsr7LGsWkHdQ9SdbB6rNkzePJ5kcu6yRkSJLslJjRlTmHM+/t3ZuSsxSvyzE3mzAJlhr2kAEAKIBCBgCgAAoZAIACKGQAAAqgkAEAKIBCBgCgAAoZAIACKGQAAAqgkAEAKIBCBgCgAAoZAIACKGQAAAqgkAEAKIBCBgCgAAoZAIACKGQAAAqgkAEAKGB02ANgP855jDQyPp6S47Gcq4gnJlJytGJZTs5cNydnJOHvNZp0M5wYy8m5Z0dKzMi6tTk5U/tScnp796bkZHCnk5LTm5lJycmStV4xN5uSc6RhDxkAgAIoZAAACqCQAQAogEIGAKAAChkAgAIoZAAACqCQAQAogEIGAKAAChkAgAIoZAAACqCQAQAogEIGAKAAChkAgAIoZAAACqCQAQAogEIGAKCApCOjS7Y7kq6WdGtEnJuV2zYjkxMpOVkHCvdEzjxZYsXylJy5dTk5syvHGmeM78g5yHx3MufmPD6a9Dh9JCfHSbeJkYnxlJzePfem5GTIup1nibnZYY9wRMvcQ36NpC2JeQAAtEZKIdteL+mFkj6QkQcAQNtk7SG/W9IbJfUeaAHbm2xfbfvqWU0nXSwAAEtD40K2fa6k2yPiWwdaLiI2R8TGiNg4plqvSwIAMGwZe8jPlHSe7R9LukTSmbYvSsgFAKA1GhdyRLw5ItZHxMmSXizpixHxssaTAQDQInwOGQCAAtI+hyxJEfFlSV/OzAQAoA3YQwYAoAAKGQCAAihkAAAKoJABACiAQgYAoAAKGQCAAihkAAAKoJABACgg9YtBjliu87jEEzkH3vCao1JyIulg7D52XUpOb1XO9pk6fjIlRxGNI2ZXLUsYRJpb5pSclSOrUnLGb9+TkrP30TnXnWW37krJGZmba5zR27U7YRLJ6qTk9GZmUnLQTJ0mAgCgxShkAAAKoJABACiAQgYAoAAKGQCAAihkAAAKoJABACiAQgYAoAAKGQCAAihkAAAKoJABACiAQgYAoAAKGQCAAihkAAAKoJABACiAQgYAoAAKGQCAAkaHPUAFI+PjKTnR7SaERPMMSXHvjpQcPez4lJjdj1mTkjN1TCclpzfmlJzp1c0zpk7qNQ+RtGx7zjrtPXYiJWfZXTm3q+W3zaXkzK5dnpIzvmN344yRVSsTJpF6225Lycni0bGUnJibTck50rCHDABAARQyAAAFUMgAABRAIQMAUACFDABAARQyAAAFUMgAABRAIQMAUACFDABAARQyAAAFUMgAABRAIQMAUACFDABAARQyAAAFUMgAABRAIQMAUMDosAdoxDmPJ3ozMyk5nRXND4De27M3YRJp5HGnpOTEZM5B5vecmHNVm12REqN9T92TkjM62m2c8eTjcw4yP9PrpORcd9OGlJzZW3KuO7s25Bz0fu2NOdsnRo9vnDHx47sTJpHUi5SYjPsuSeom3X+1VeNGs73B9pdsb7F9g+3XZAwGAECbZOy2zEl6XURcY3uVpG/ZviIivpeQDQBAKzTeQ46I7RFxzeDnXZK2SDqpaS4AAG2S+qYu2ydLepKkqzJzAQBY6tLe1GV7paRPSnptROxc4PxNkjZJ0qRy3kAAAMBSkbKHbHtM/TK+OCI+tdAyEbE5IjZGxMYxTWRcLAAAS0bGu6wt6YOStkTEu5qPBABA+2TsIT9T0sslnWn72sG/FyTkAgDQGo1fQ46Ir0pywiwAALQWX50JAEABFDIAAAVQyAAAFEAhAwBQAIUMAEABFDIAAAVQyAAAFJD2XdZDEb2UGI/mHADdq1c1zuisOSphEkn7ZlNipk5ek5IznROjPY+cS8k5blXOgdSffvyPGme8bN3XEiaRepHzdQB/OX5mSs5XJx+VkjP2/WUpOd3xnO0zs6r53ebEbM7tc2Td0Sk5vbvuSclxp5OSE92UmLSOOFzYQwYAoAAKGQCAAihkAAAKoJABACiAQgYAoAAKGQCAAihkAAAKoJABACiAQgYAoAAKGQCAAihkAAAKoJABACiAQgYAoAAKGQCAAihkAAAKoJABACiAQgYAoIDRYQ/QiHMeT7jTSclRt9s8YyRnnXorl6XkTK1L2jZJYiRSck4/ZltKzuuP+3LjjNu6E80HkXTjzIkpOb+8MmfbfGd1zjx3PzznbmrinrGUnOW3N7+d945enTCJNLL9jpQcjTglxsq5v4i52ZSclI6IXvOMQ8QeMgAABVDIAAAUQCEDAFAAhQwAQAEUMgAABVDIAAAUQCEDAFAAhQwAQAEUMgAABVDIAAAUQCEDAFAAhQwAQAEUMgAABVDIAAAUQCEDAFAAhQwAQAE5R/4eEndyDobdm96XkuM9zTenTzohYRIpJnP+tLMrcg5cHjkxOuZhO1Jy7ppekZIzmXAA9CePjydMIj15/M6UnC9M7UzJedSak1Ny7v7R0Sk5nemUGO05caxxxuSWnOuxnHTDShLdbk5Qwu0qTdYscfBFCq01AADtlVLIts+x/X3bN9l+U0YmAABt0riQbXckvV/S8yWdKukltk9tmgsAQJtk7CGfIemmiPhhRMxIukTS+Qm5AAC0RkYhnyTplnmntw5+BwAADlHGW3EXepvf/d5PZnuTpE2SNKnlCRcLAMDSkbGHvFXShnmn10vatv9CEbE5IjZGxMYxTSRcLAAAS0dGIX9T0mNsn2J7XNKLJX0mIRcAgNZo/JR1RMzZfrWkyyR1JH0oIm5oPBkAAC2S8nVOEXGppEszsgAAaCO+qQsAgAIoZAAACqCQAQAogEIGAKAAChkAgAIoZAAACqCQAQAoIOVzyMMSc7MpOSMTkyk50e02zvCuPQmTSJ4cT8kZnbrf15I/JFPHLPSV58Nz176c71N/711nNM54xMSdCZNIjxy/PSVn0jm3q627j0rJUSfnOrhvXUqMOnubX5fj6FUJk0jeNZWSMxI527i3a3dKTtZ9ewofvv1W9pABACiAQgYAoAAKGQCAAihkAAAKoJABACiAQgYAoAAKGQCAAihkAAAKoJABACiAQgYAoAAKGQCAAihkAAAKoJABACiAQgYAoAAKGQCAAihkAAAKGB3aJWcc9Dl6zTMSudNpHtLtNs+QNLt2WUrOqptnUnKm1k2k5Oy65piUnM6T70jJecTEnY0zJpxzMPZ7u8tTci695wkpOdu3HZ2Sc9T3Em5XkkanUmK05qZ9jTO8Y3fCJJL2TafExEzOdbCXNE9KP0g5HXEYe4Y9ZAAACqCQAQAogEIGAKAAChkAgAIoZAAACqCQAQAogEIGAKAAChkAgAIoZAAACqCQAQAogEIGAKAAChkAgAIoZAAACqCQAQAogEIGAKAAChkAgAJGh3bJCQd99uhYwiBSb2YmJSfl0U3SAb4nbvhJSk73lBNTco67NiVGdz1+IiVn51XHpuT8xfRZjTP23L4iYRJpbE3OdWd2X87dwsjOnJxO0jHvZ1fm5IzffFfzkD1TzTMkdXfsTMnxWFIVJNyvS5JcaF8xa5Y4+CKF1hoAgPaikAEAKIBCBgCggEaFbPudtm+0fb3tT9tekzQXAACt0nQP+QpJp0XE6ZJ+IOnNzUcCAKB9GhVyRFweEXODk1+XtL75SAAAtE/ma8i/L+nzD3Sm7U22r7Z99aySPscAAMAScdAPn9m+UtIJC5x1QUT8z8EyF0iak3TxA+VExGZJmyVptdcewieyAABoj4MWckScfaDzbb9C0rmSzooIihYAgIeg0dez2D5H0h9JenZE7M0ZCQCA9mn6GvL7JK2SdIXta23/VcJMAAC0TqM95Ih4dNYgAAC0Gd/UBQBAARQyAAAFUMgAABRAIQMAUACFDABAAY3eZT1s0e2m5HRWLE/J6e5p/lHszljSn8ROielsvzslx+tWp+Ss/kknJefe8ZztPPaFoxpnjI4lDCIpOjnrND6ZEqMV23O+J2j1D3O+4mBs6z0pOdrbfJ7e7j0Jg0gjkxMpORn3XamiN+wJfu4wzsIeMgAABVDIAAAUQCEDAFAAhQwAQAEUMgAABVDIAAAUQCEDAFAAhQwAQAEUMgAABVDIAAAUQCEDAFAAhQwAQAEUMgAABVDIAAAUQCEDAFAAhQwAQAE5RzQflqQDR1c6OHfWLCOzczk5K1fk5IyPp+QsvzklRmO7lqXk9MabP6YNJwwiKcZygnqdnJzJO6dTcsa23pOSkyX2TjUPGcnZxtHtpuRk3ZeOTEym5PSm96XkHGnYQwYAoAAKGQCAAihkAAAKoJABACiAQgYAoAAKGQCAAihkAAAKoJABACiAQgYAoAAKGQCAAihkAAAKoJABACiAQgYAoAAKGQCAAihkAAAKoJABACiAQgYAoIDRYQ9QQvRyclzn8Y0nJ1Jyenv3puSMdHK2jSdyrrITP7ozJUcZ69XNuf71jl6RkjNyx46UHM3MpMTEzGxKjpcvS8mJbrdxRm/fdMIk0sj4eEpO1n1Xb3pfSk5b1WkQAABajEIGAKAAChkAgAJSCtn2622H7WMy8gAAaJvGhWx7g6TnSvpJ83EAAGinjD3kv5D0RkmRkAUAQCs1KmTb50m6NSKuS5oHAIBWOuiHOm1fKemEBc66QNJbJD3vUC7I9iZJmyRpUssfxIgAACx9By3kiDh7od/b/hVJp0i6zrYkrZd0je0zIuK2BXI2S9osSau9lqe3AQCY5yF/7VFEfEfScfedtv1jSRsjIukrkAAAaA8+hwwAQAFp32UdESdnZQEA0DbsIQMAUACFDABAARQyAAAFUMgAABSQ9qYuSIrmB5r36FjCIFJvz96UHHc6KTmxdyolR7fmHKxeSevV272nccbImtUJk0gjvW5KjqaSDjK/bDInJ+m60729zicys25XvZmZlJw0TtrHS7gvPRKxhwwAQAEUMgAABVDIAAAUQCEDAFAAhQwAQAEUMgAABVDIAAAUQCEDAFAAhQwAQAEUMgAABVDIAAAUQCEDAFAAhQwAQAEUMgAABVDIAAAUQCEDAFDA6LAHwC+Kudlhj/ALPJZzFentm07JGUk65n3MzaXkeFnzgXr37kyYRNKIU2Ky/lbudFJyottNyck66P3IRMLffGYmYRKlrRNqYA8ZAIACKGQAAAqgkAEAKIBCBgCgAAoZAIACKGQAAAqgkAEAKIBCBgCgAAoZAIACKGQAAAqgkAEAKIBCBgCgAAoZAIACKGQAAAqgkAEAKIBCBgCgAAoZAIACRoc9AGrrTU3lBDnnsV93z96UnCzudIY9ws/E9GxKjkfHUnKi203JUfRycpL0ZmaahxRbJ9TAHjIAAAVQyAAAFEAhAwBQAIUMAEABjQvZ9h/a/r7tG2y/I2MoAADaptG7rG0/R9L5kk6PiGnbx+WMBQBAuzTdQ36VpLdHxLQkRcTtzUcCAKB9mhbyYyX9mu2rbP+j7adkDAUAQNsc9Clr21dKOmGBsy4Y/P9HS3qapKdI+rjtR0ZELJCzSdImSZrU8iYzAwCw5By0kCPi7Ac6z/arJH1qUMDfsN2TdIykOxbI2SxpsySt9tr7FTYAAG3W9Cnrf5B0piTZfqykcUl3NswEAKB1mn6X9Yckfcj2dyXNSHrFQk9XAwCAA2tUyBExI+llSbMAANBafFMXAAAFUMgAABRAIQMAUEDTN3UBh1exA7tHd9gTzOOcx9cxN5uSs2QVuw5i6WAPGQCAAihkAAAKoJABACiAQgYAoAAKGQCAAihkAAAKoJABACiAQgYAoAAKGQCAAihkAAAKoJABACiAQgYAoAAKGQCAAihkAAAKoJABACiAQgYAoAAKGQCAAkaHPQBaInrDnuAXeHQsJSfmZlNyliQnPd4vdt0BFgt7yAAAFEAhAwBQAIUMAEABFDIAAAVQyAAAFEAhAwBQAIUMAEABFDIAAAVQyAAAFEAhAwBQAIUMAEABFDIAAAVQyAAAFEAhAwBQAIUMAEABFDIAAAWMDnsAFLdEDzIfc7PDHmHpK/Y3B6pjDxkAgAIoZAAACqCQAQAogEIGAKAAChkAgAIoZAAACmhUyLafaPvrtq+1fbXtM7IGAwCgTZruIb9D0tsi4omS3jo4DQAAHqSmhRySVg9+PkrStoZ5AAC0UtNv6nqtpMts/7n65f6MB1rQ9iZJmyRpUssbXiwAAEvLQQvZ9pWSTljgrAsknSXpP0bEJ22/SNIHJZ29UE5EbJa0WZJWe2085IkBAFiCDlrIEbFgwUqS7Y9Ies3g5N9L+kDSXAAAtErT15C3SXr24OczJf1TwzwAAFqp6WvI/0bSe2yPStqnwWvEAADgwWlUyBHxVUlPTpoFAIDW4pu6AAAooOlT1ljqqh1k3kmPIautFx4Yf3O0BHvIAAAUQCEDAFAAhQwAQAEUMgAABVDIAAAUQCEDAFAAhQwAQAEUMgAABVDIAAAUQCEDAFAAhQwAQAEUMgAABVDIAAAUQCEDAFAAhQwAQAEUMgAABVDIAAAU4Ig4/Bdq3yHp5sN+wQs7RtKdwx7iMGnLurZlPaX2rGtb1lNqz7q2ZT2l/rquiIhjD7TQUAq5EttXR8TGYc9xOLRlXduynlJ71rUt6ym1Z13bsp7Soa8rT1kDAFAAhQwAQAEUsrR52AMcRm1Z17asp9SedW3LekrtWde2rKd0iOva+teQAQCogD1kAAAKoJAl2f4vtq+3fa3ty20/bNgzLQbb77R942BdP217zbBnWiy2f9v2DbZ7tpfcOzltn2P7+7Zvsv2mYc+zWGx/yPbttr877FkWk+0Ntr9ke8vgevuaYc+0WGxP2v6G7esG6/q2Yc+0mGx3bH/b9mcPtiyF3PfOiDg9Ip4o6bOS3jrkeRbLFZJOi4jTJf1A0puHPM9i+q6kfyHpK8MeJJvtjqT3S3q+pFMlvcT2qcOdatF8WNI5wx7iMJiT9LqIeLykp0n690v4bzot6cyIeIKkJ0o6x/bThjvSonqNpC2HsiCFLCkids47uULSknxhPSIuj4i5wcmvS1o/zHkWU0RsiYjvD3uORXKGpJsi4ocRMSPpEknnD3mmRRERX5F097DnWGwRsT0irhn8vEv9O/CThjvV4oi+3YOTY4N/S/I+1/Z6SS+U9IFDWZ5CHrD9p7ZvkfRSLd095Pl+X9Lnhz0EHpKTJN0y7/RWLdE77zayfbKkJ0m6asijLJrB07jXSrpd0hURsVTX9d2S3iipdygLt6aQbV9p+7sL/DtfkiLigojYIOliSa8e7rQP3cHWc7DMBeo/RXbx8CZt7lDWdYnyAr9bknsYbWN7paRPSnrtfs/cLSkR0R28RLhe0hm2TxvySOlsnyvp9oj41qH+P6OLOE8pEXH2IS76t5I+J+mPF3GcRXOw9bT9CknnSjorjvDPvD2Iv+lSs1XShnmn10vaNqRZkMT2mPplfHFEfGrY8xwOEXGv7S+r/z6BpfbGvWdKOs/2CyRNSlpt+6KIeNkD/Q+t2UM+ENuPmXfyPEk3DmuWxWT7HEl/JOm8iNg77HnwkH1T0mNsn2J7XNKLJX1myDOhAduW9EFJWyLiXcOeZzHZPva+T3jYXibpbC3B+9yIeHNErI+Ik9W/jX7xQGUsUcj3efvgqc7rJT1P/XfFLUXvk7RK0hWDj3j91bAHWiy2/7ntrZKeLulzti8b9kxZBm/Me7Wky9R/88/HI+KG4U61OGx/TNLXJD3O9lbbfzDsmRbJMyW9XNKZg9vmtYM9q6XoRElfGtzfflP915AP+pGgNuCbugAAKIA9ZAAACqCQAQAogEIGAKAAChkAgAIoZAAACqCQAQAogEIGAKAAChkAgAL+Py6/4Q8WXJ+zAAAAAElFTkSuQmCC", + "image/png": "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", "text/plain": [ "
" ] @@ -1506,7 +1515,7 @@ " $$" ], "text/plain": [ - "" + "" ] }, "execution_count": 39, @@ -1702,7 +1711,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 45, @@ -1725,7 +1734,7 @@ { "data": { "text/plain": [ - "array([1.63965037, 1.36884792, 1.01637141])" + "array([ 0.7117622 , -0.568556 , 0.94015843])" ] }, "execution_count": 46, @@ -1962,7 +1971,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "If you want to go deeper into the internals of `aesara` and `pymc` please take a look into the [distribution developer guide](implementing-a-distribution)." + "The `Model` class also has methods to extract the gradient (`dlogp`) and the hessian (`d2logp`) of the `logp`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you want to go deeper into the internals of `aesara` RandomVariables and `pymc` distributions please take a look into the [distribution developer guide](implementing-a-distribution)." ] } ], From f3bed95508337f3ea018413adad5a9d8a6f9c77e Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Sun, 5 Jun 2022 22:24:57 +0200 Subject: [PATCH 22/30] attempt to adds cross-references --- .../learn/core_notebooks/pymc_aesara.ipynb | 166 ++++++++---------- 1 file changed, 73 insertions(+), 93 deletions(-) diff --git a/docs/source/learn/core_notebooks/pymc_aesara.ipynb b/docs/source/learn/core_notebooks/pymc_aesara.ipynb index 7d702335f8..cbcb0ad2b5 100644 --- a/docs/source/learn/core_notebooks/pymc_aesara.ipynb +++ b/docs/source/learn/core_notebooks/pymc_aesara.ipynb @@ -12,7 +12,7 @@ "\n", "**Authors:** [Ricardo Vieira](https://github.com/ricardoV94) and [Juan Orduz](https://juanitorduz.github.io/)\n", "\n", - "In this notebook we want to give an introduction of how PyMC models translate to Aesara graphs. The purpose is not to give a detailed description of all `aesara`'s capabilities but rather focus on the main concepts to understand its connection with PyMC. For a more detailed description of the project please refer to the official documentation." + "In this notebook we want to give an introduction of how PyMC models translate to Aesara graphs. The purpose is not to give a detailed description of all [`aesara`](https://github.com/aesara-devs/aesara)'s capabilities but rather focus on the main concepts to understand its connection with PyMC. For a more detailed description of the project please refer to the official documentation." ] }, { @@ -26,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 54, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -44,14 +44,6 @@ "# PyMC version: 4.0.0\n", "\n" ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/juanitorduz/opt/anaconda3/envs/pymc-dev-py39/lib/python3.9/site-packages/pkg_resources/__init__.py:123: PkgResourcesDeprecationWarning: main is an invalid version and will not be supported in a future release\n", - " warnings.warn(\n" - ] } ], "source": [ @@ -200,7 +192,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -353,7 +345,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 10, @@ -397,7 +389,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -435,7 +427,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 12, @@ -457,23 +449,11 @@ "source": [ "### What is in an Aesara graph?\n", "\n", - "The following diagram shows the basic structure of an `aesara` graph." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "KF4146uiMQ-W" - }, - "source": [ - "![image.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAucAAAKKCAYAAACebfVMAAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAZ25vbWUtc2NyZWVuc2hvdO8Dvz4AAAAqdEVYdENyZWF0aW9uIFRpbWUAVGh1IDAzIEZlYiAyMDIyIDE2OjE4OjQyIENFVIQZHmoAACAASURBVHic7N13eBTV/sfx9+xuyqZDCC2EFqogVaQX4QIqiEq1U0QREQuC/MCOgnJBLFexIChNBCkKIh2kIwJSpUiH0Et63d35/RFAQksCJhnh83qe+wczZ858Z88+3s9Mzpw1XC6XiYiIiIiI5DlbXhcgIiIiIiLpFM5FRERERCxC4VxERERExCIUzkVERERELELhXERERETEIhTORUREREQsQuFcRERERMQiFM5FRERERCxC4VxERERExCIUzkVERERELELhXERERETEIhTORUREREQsQuFcRERERMQiFM5FRERERCxC4VxERERExCIUzkVERERELELhXERERETEIhTORUREREQsQuFcRERERMQiFM5FRERERCxC4VxERERExCIUzkVERERELELhXERERETEIhy5eTIzKYq1s6Yya+k6dhw6RYLbl5DwctRs3JoODzaghJ9xvT0TN/91Ov53Lf73DuH7Pnfk7oWJiIiIiPwDci3Dek6u4JOBQ5m9Lwns/oQVL00RrySOH/iDed9sYNmWF/j6vdYUvN58LiIiIiLyL5c74dx9kGmD/8vsfSkEVn6Y/gMeo3YhHwDMpMP89stS4qo1VzAXERERkVtaroTzpHVT+OHPRIzAejzzejdqh/6dwg1nMeq0e/Ti1uxfMpFvp/7Kpn2nSfHOR4kqjWnb+XH+E+lH+pEuTqz9ji+++YXf98fiXaQqDUudwcxwVpOYbT8x5tuZrNp+lHhbEMWrNKXTU51pWsI3Ny5bRERERCRbciGcu9i7cTPRHgOfanfRIPRaj8fdHPrxTV4a+QepRe7k3kdaExL3JwtnT2XYph2c/WgYHUs5SNoymgFvTuWgVwT12txLpP0gq+esx31RT0nbRvPKK1M4lL8WD3brQLhnH0umTuf9/mfx/qI/DUL0mF5ERERErCUXwrlJXHQcJgYB+fPhfa2myeuYPHEj8Y5K9BjyDu3DbYBJs8Iv8+TIrXz//Rpa/9/trPxhNgddvtToNZS3WodhYHJ/RAIPfbD+3ClPs2T8j+x1FaPjwLd4qqIXYNKowCkeHbyMn5Z3p/59BVA8FxEREREryYVwbhAY5I9BPPGnz5AMBFylpTtqBztjPdgiqlK1sO3C8WFVqlDUtpmDf+3gUGoQO/9KxrSXo3rV0AsB22a3X9TRPnbuScX0HGZanzZM/3sHLgzOnDyDhwJcdISIiIiISJ7LhXDuoNTtlQiccYzYPxaw9MRdtLqhNz/duD2AYcfhuFo/Xng5AMdtPDa8D42DLm5nwy+0qIK5iIiIiFhOrvwIkV+d9txf2hsS1jPqnS9ZdTTl752uM2ya9jlfL4nCE16B8sE2PEc2s/mE51wDk5ObN3PEYyOgXEUivItQrIgdwx3Fnv1JF9okxif+3ae9NLdV8MNw72f7ISfFIiKIiIggIqIIIUHBBF/3euoiIiIiIjnHcLlcZubNblzaoTkMGfAJK46lgd2fgiVLEOaTyplDBzga58JZoTPDRzyMc84Anv8s/YXQe5pVJjj+Txb/soYoe2W6fzyMjiXtHJ89kB4frSOlcG3a3n8HIWc3MPunNRxJgaB70n+EyNz9HX36fMMOdyGqNW3M7WFwYstSft3qzQMjvqR7Ra/cuGwRERERkSzLtXAO4InbzZJpU5mzYiO7j0aT5PEhX3gZqt/Vlkfb1aeYL2CeX0pxCRv3nybFKx8lqqYvpdg80j99jrl5hvXjP+LzmeuJSvajWNXmPHx/ED8PGsPBpud/IdQkbtccxn47g+VbDxOd5kW+iMrUa/0one+rRLAenouIiIiIxeRqOBcRERERkavLlTnnIiIiIiKSOYVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi3Dkxkmijh3PjdOIiIiIiOSK8MKFcqTfXAnnAIHhR3Pr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ERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMREREREYtQOBcRERERsQiFcxERERERi1A4FxERERGxCIVzERERERGLUDgXEREREbEIhXMRkWv4/PPPcTgcFC5cmLi4uAz7zpw5g8PhYPjw4XlUnVzN6NGjcTgchIWFER0dnWFffHw8DoeDIUOG5FF1IiJXp3AuIpIFp06dYsSIEXldhmTT2bNndfMkIv8qCuciIlnQqlUrPvzwQ06ePJml9ikpKWzcuJHNmzeTlpZ22f7ExETi4+MvtP3tt984ePDgVfszTZM9e/awatUqzp49e30XcQtq1aoVn3zyCUePHs1S+9TUVDZt2sSmTZtITU29bP+l47Z27VoOHDhw1f5M02Tv3r2sWrWKM2fOXN9FiMgtReFcRCQLXnvtNTweD++9916mbUePHk1YWBh33HEHNWrUoFChQkyaNClDm6eeeooWLVowZswYQkNDqV+/PqVLl+bRRx/F7XZnaLts2TIiIyMpX748jRo1omDBgvTt2/eKoV8yGjBgADabjcGDB2faduzYsYSFhVGzZk1q1qxJwYIFGT9+fIY2vXr1okmTJowfP57Q0FDq1atHZGQknTp1wuVyZWi7cuVKypUrR7ly5S6M24svvnjF0C8icp7CuYhIFhQuXJjevXvzxRdfXPNJ6S+//EKPHj14+umnOXnyJEePHuWBBx7g8ccfZ9WqVRnabtu2jdGjRzNhwgT27dtHv379mDx5MpMnT77QZufOnbRs2ZJatWqxZMkSjh07xrBhw/jiiy/46KOPcux6bxZhYWG89NJLjB49mj179ly13YIFC3jyySfp0qULJ06c4Pjx43Tq1ImuXbuydOnSDG137drFyJEjGTduHPv372fAgAFMmzaNCRMmXGizZ88eWrRoQZUqVVi0aBHHjh3jww8/ZMyYMZpmIyLXpHAuIpJF/fr1w8/Pj7fffvuqbd555x0qVarEsGHDyJcvH2FhYXz55ZcUL16c999/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)" + "The following diagram shows the basic structure of an `aesara` graph.\n", + "\n", + "![aesara graph](https://raw.githubusercontent.com/aesara-devs/aesara/main/doc/tutorial/apply.png)" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, { "cell_type": "markdown", "metadata": {}, @@ -613,7 +593,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 15, @@ -707,7 +687,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 18, @@ -752,7 +732,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 19, @@ -839,7 +819,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 21, @@ -915,7 +895,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfQAAAF1CAYAAAAeOhj3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAgH0lEQVR4nO3de5hddX3v8feHi6goimVAIGi8oBXR1jalntZjqeiRihXaU3qgaqPSUlu1eo5tDdoWb7RRe9Gj9bRUgeAFTL1UFG1BvFBrBYOichGNEiEQSQApF5Ua/J4/1hqzGWaSmUn23jO/vF/PM8/sddnr911rXz77t9baa6eqkCRJi9su4y5AkiRtPwNdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIGusUjy6iTv3sHLTJLTk3w3ycU7ctk7kyTPS/LZOcy/LslT+9uvTPKOHVjL7Uke3t8+I8nrd+Cy/z7Jn+2o5W2vHb3ttPPZbdwFaLSSPAl4I/BY4C7gSuBlVfWFsRa2YzwJeBqwpKruGHcxO6Oq+ovZzJfk08C7q2qrAVZV99sRdSV5HvA7VfWkgWW/cEcse0eZ7baTZmKg70SS7AV8FPh9YDVwL+C/A3eOs64d6KHAupnCPMluVbV5xDUNXYvr1eI6ScPmLvedy6MAquqsqrqrqr5fVedV1VcAkjwiySeT3JTkxiTvSfLAyTv3u1b/OMlXktyR5J1J9kvy8SS3JflEkr37eZcmqSQnJrk+yYYkL5+psCRPTPK5JLck+XKSwwemPS/Jt/o2rk7y7GnufwLwDuC/9btpX5Pk8CTrk7wiyXeA05PskeTNfU3X97f36JcxOf+fJNnY13xMkmck+XqSm5O8civrcFSSLyW5Ncm1SV69lXkn23r5QFvPH5j+gCRnJtmU5NtJ/jTJLgPb49+T/G2Sm4FX97uj394/Frf30x/cr993k3wtyRMGlr8iyTf7bXpFkl+bqdZpan9uX9NNSV41ZdqPD6UkuXeSd/fz3ZLkC/3z5RS6D5Jv62t9Wz9/JXlRkm8A3xgY98iBJvZJcn5f92eSPLSfb/L5tttALZ9O8jtJHgP8PVueG7f00++2Cz/J7yZZ2z/O5yQ5YGBaJXlhkm/02/PvkmSG7TN1uYcnWT8w/Iok1/XrcFWSI6bZdpPrszzJNelej68aWMZ9kqzqa7myf86uZwZbqz9TDn9N3Zb9dnx9utfn7Uk+kuQn0r0/3No/rkuntPWH6V6zNyZ5U5Jd0r32bk7yuIF5903y/SQTM9WuOagq/3aSP2Av4CZgFfArwN5Tpj+Sbpf1HsAEcCHw5oHp64DPA/sBBwIbgS8CT+jv80ng5H7epUABZwF7Ao8DNgFP7ae/mm6XK/2ybgKeQfch82n98ER/31uBR/fz7g88dob1ex7w2YHhw4HNwBv6+u4DvLZfh3375X8OeN2U+f8c2B343b7m9wL3pztM8QPg4TO0f3i/nrsAjwduAI7Zyryb+3p279f9e5OPCXAm8OG+3aXA14ETBtZzM/ASur1s9wHOAG4Efha4d/9YXA38NrAr8HrgUwPtHwsc0Nf6v4A7gP2n245T6j4EuB14cr9N/6avZbrH9feAjwD37Wv4WWCvftqn6XaBDy67gPOBBwH3GRj3yP72GcBtA22/ZbJOtjzfdhtY3o/bmG6d+uW9vr/9lH77/Uy/7LcCF06p7aPAA4GH0D0vjpxhG/14uQOP9fr+9qOBa4EDBup+xDTbbnJ9/rF/fH+Kbk/aY/rpK4HPAHsDS4CvTLYxQ00z1j/Y7nTbst+Oa4FHAA8ArqB7Pj6V7vl3JnD6lLY+1T+OD+nnnXwc3g68YWDelwIfGfd7Yyt/9tB3IlV1K91x5sk3ik19T2S/fvraqjq/qu6sqk10b9a/NGUxb62qG6rqOuDfgIuq6ktVdSfwIbpwH/Saqrqjqr4KnA4cP01pzwE+VlUfq6ofVdX5wBq6kAP4EXBokvtU1YaqunwOq/0jug8Zd1bV94FnA6+tqo39Or4GeO7A/D8ETqmqHwJnA/sAb6mq2/p2L6cL63uoqk9X1Vf7dfgK3YeZqdtv0A/7Wn5YVR+jC8pHJ9mVLmRP6ttdB/z1lDqvr6q3VtXmfr0APlRVl1TVD+geix9U1ZlVdRfwPgYem6r6p6q6vq/1fXQ94sO2sS0BfgP4aFVd2D/mf0a3jWdav5+gC+S7+tpu3cby/7Kqbh5Yp6nOHWj7VXS97oNmUfe2PBs4raq+2C/7pH7ZSwfmWVlVt1TVNXSB9dPzaOcuug8MhyTZvarWVdU3tzL/a6rbk/Zl4Mt0wQ7wm8BfVNV3q2o98H9n0fb21H96VX2zqv4T+Djwzar6RHWHRf6Je77u39A/jtcAb2bL634V8Fvp9zbRPaffNYc6tBUG+k6mqq6squdV1RLgULpe2pvhx7u/zu53B94KvJsu0AbdMHD7+9MMTz2J6dqB29/u25vqocCx/W7ZW/pdok+i6zHeQRduLwQ2JDk3yU/Ofo3Z1AfcpAP6Omaq6aY+ACfXB7a9jgAk+fkkn0q3m/w/+5qnbr9BN9XdjxN/r1/2PnTnN0yt88CB4cHtOmnWj02S305y6cD2PnQbtU46YLDt/vG5aYZ53wX8K3B2usMbb0yy+zaWP916TTu9qm4Hbmb659Rc3e150S/7Ju6+zb8zcHvysZqTqloLvIyuV7yxf71trf6Z2rzb48C2t9vWljUbO+R1X1UX0e0N+qX+dfxI4Jw51KGtMNB3YlX1Nbrdg4f2o/6Srvf++Krai67nPO1xwjkY7D09BLh+mnmuBd5VVQ8c+Nuzqlb2df5rVT2Nbnf71+j2LszW1J8TvJ7uA8S2apqP99K9OR1UVQ+gO247n+13I13vdmqd1w0Mz/tnEvvjzv8IvBj4iap6IHAZs6t1AwOPaZL70vXC76Hf8/CaqjoE+AXgmXSHALZW/7bWa7Dt+9Ht1r2eLiSg270/6cFzWO7dnhdJ9qRbr+tmvMfM7thKHVTVe6s72/6hfV1vmEcbG+h2tU/anr0UW613nrb2ul9F997yXOD9Uz5wazsY6DuRJD+Z7iSsJf3wQXS7wj7fz3J/ut2+tyQ5EPjjHdDsnyW5b5LHAs+n2/U71buBX03y9CS7pjuZ6vAkS9KdRPWs/g32zr6+u6ZZxmydBfxpkokk+9AdL99R34e/P3BzVf0gyWHAb81nIf0egtXAKUnu3wfw/9mBde5JFySbANKdjHfoVu+xxfuBZyZ5UpJ70Z0DMO37SJJfTvK4/hDCrXQfUiYfuxuAh8+j9mcMtP06ukM+1/aHT64DntM/h15Ad8x30g3Akv5+03kv8PwkP53uJMm/6Je9bh41XtrX+aAkD6brkQOQ5NFJntK38QO63u18ns+rgZOS7N2/Vl88j2UM1vvkJA9J8gC6ww3b64/72g6iO04++Lp/F/BrdKF+5g5oSz0DfedyG/DzwEVJ7qAL8suAybPPX0N3UtB/AucCH9wBbX6G7oSaC4C/qqrzps5QVdcCRwOvpAuZa+k+TOzS/72c7hP+zXTHpP9gO+p5Pd3x+a8AX6U7qW9HXazkD4DXJrmN7oPC6u1Y1kvoek7fAj5LFzinbXeFQFVdQXdM/j/ogu5xwL/P8r6XAy/q69kAfBeY6ezqB9N9ALiV7noHn2HLh5K3AL/Rn3E9m+O/k94LnEz3XPhZumPfk36X7nlzE90JjJ8bmPZJuvMfvpPkxmnW6wK68wE+0K/XI4Dj5lDXoHfRHe9eB5zH3cNsD7oT2m6k2wW+L93zfq5eS7fdrwY+Qbed5/X10/6clffRvSYuoTt5bnt9uF/WpXTvJe8caG893euu6M7D0Q6SqnnvuZNm1J9MdDWwe/l9Ymmokvw+cFxVbe0kzFHVUsDB/fkCM81zGt2JnX86usra54VlJGmRSbI/3SGL/wAOptuL9baxFjVL/Yf9X+eeZ8ZrO7nLXZIWn3sB/0B3GO2TdLu43z7WimYhyevoDvO9qaquHnc9rXGXuyRJDbCHLklSAwx0SZIasKhPittnn31q6dKl4y5DkqSRueSSS26sqnv8oM2iDvSlS5eyZs2acZchSdLIJPn2dOPd5S5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1YFH/2pqk7bd0xbkja2vdyqNG1pa0s7GHLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGDC3Qk5yWZGOSy6aMf0mSq5JcnuSNA+NPSrK2n/b0YdUlSVKLhvlra2cAbwPOnByR5JeBo4HHV9WdSfbtxx8CHAc8FjgA+ESSR1XVXUOsT5KkZgyth15VFwI3Txn9+8DKqrqzn2djP/5o4OyqurOqrgbWAocNqzZJkloz6mPojwL+e5KLknwmyc/14w8Erh2Yb30/TpIkzcIwd7nP1N7ewBOBnwNWJ3k4kGnmrekWkORE4ESAhzzkIUMqU5KkxWXUPfT1wAerczHwI2CffvxBA/MtAa6fbgFVdWpVLauqZRMTE0MvWJKkxWDUgf7PwFMAkjwKuBdwI3AOcFySPZI8DDgYuHjEtUmStGgNbZd7krOAw4F9kqwHTgZOA07rv8r2X8Dyqirg8iSrgSuAzcCLPMNdkqTZG1qgV9XxM0x6zgzznwKcMqx6JElqmVeKkySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhowtF9bkzR/S1ecO+4ShmKU67Vu5VEja0taCOyhS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJasDQAj3JaUk2Jrlsmml/lKSS7DMw7qQka5NcleTpw6pLkqQWDbOHfgZw5NSRSQ4CngZcMzDuEOA44LH9fd6eZNch1iZJUlOGFuhVdSFw8zST/hb4E6AGxh0NnF1Vd1bV1cBa4LBh1SZJUmtGegw9ybOA66rqy1MmHQhcOzC8vh833TJOTLImyZpNmzYNqVJJkhaXkQV6kvsCrwL+fLrJ04yracZRVadW1bKqWjYxMbEjS5QkadHabYRtPQJ4GPDlJABLgC8mOYyuR37QwLxLgOtHWJskSYvayHroVfXVqtq3qpZW1VK6EP+ZqvoOcA5wXJI9kjwMOBi4eFS1SZK02A3za2tnAf8BPDrJ+iQnzDRvVV0OrAauAP4FeFFV3TWs2iRJas3QdrlX1fHbmL50yvApwCnDqkeSpJZ5pThJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaMMofZ5GkkVm64tyRtbVu5VEja0uaiT10SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1IChBXqS05JsTHLZwLg3Jflakq8k+VCSBw5MOynJ2iRXJXn6sOqSJKlFw+yhnwEcOWXc+cChVfV44OvASQBJDgGOAx7b3+ftSXYdYm2SJDVlaIFeVRcCN08Zd15Vbe4HPw8s6W8fDZxdVXdW1dXAWuCwYdUmSVJrxnkM/QXAx/vbBwLXDkxb34+7hyQnJlmTZM2mTZuGXKIkSYvDWAI9yauAzcB7JkdNM1tNd9+qOrWqllXVsomJiWGVKEnSorLbqBtMshx4JnBEVU2G9nrgoIHZlgDXj7o2SZIWq5H20JMcCbwCeFZVfW9g0jnAcUn2SPIw4GDg4lHWJknSYja0HnqSs4DDgX2SrAdOpjurfQ/g/CQAn6+qF1bV5UlWA1fQ7Yp/UVXdNazaJElqzdACvaqOn2b0O7cy/ynAKcOqR5KklnmlOEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDVgaIGe5LQkG5NcNjDuQUnOT/KN/v/eA9NOSrI2yVVJnj6suiRJatEwe+hnAEdOGbcCuKCqDgYu6IdJcghwHPDY/j5vT7LrEGuTJKkpQwv0qroQuHnK6KOBVf3tVcAxA+PPrqo7q+pqYC1w2LBqkySpNaM+hr5fVW0A6P/v248/ELh2YL71/bh7SHJikjVJ1mzatGmoxUqStFgslJPiMs24mm7Gqjq1qpZV1bKJiYkhlyVJ0uIw6kC/Icn+AP3/jf349cBBA/MtAa4fcW2SJC1aow70c4Dl/e3lwIcHxh+XZI8kDwMOBi4ecW2SJC1auw1rwUnOAg4H9kmyHjgZWAmsTnICcA1wLEBVXZ5kNXAFsBl4UVXdNazaJElqzdACvaqOn2HSETPMfwpwyrDqkSSpZQvlpDhJkrQdDHRJkhpgoEuS1IBZHUNPckFVHbGtcZK0M1q64tyRtbVu5VEja0uLy1YDPcm9gfvSnam+N1suALMXcMCQa5MkSbO0rR767wEvowvvS9gS6LcCfze8siRJ0lxsNdCr6i3AW5K8pKreOqKaJEnSHM3qGHpVvTXJLwBLB+9TVWcOqS5JkjQHsz0p7l3AI4BLgckruBVgoEuStADM9kpxy4BDqmraX0CTJEnjNdvvoV8GPHiYhUiSpPmbbQ99H+CKJBcDd06OrKpnDaUqSZI0J7MN9FcPswhJkrR9ZnuW+2eGXYgkSZq/2Z7lfhvdWe0A9wJ2B+6oqr2GVZgkSZq92fbQ7z84nOQY4LBhFCRJkuZuXr+2VlX/DDxlx5YiSZLma7a73H99YHAXuu+l+510SZIWiNme5f6rA7c3A+uAo3d4NZIkaV5mewz9+cMuRJIkzd+sjqEnWZLkQ0k2JrkhyQeSLBl2cZIkaXZme1Lc6cA5dL+LfiDwkX6cJElaAGYb6BNVdXpVbe7/zgAmhliXJEmag9meFHdjkucAZ/XDxwM3DackaWFauuLccZcgSTOabQ/9BcBvAt8BNgC/AXiinCRJC8Rse+ivA5ZX1XcBkjwI+Cu6oJckSWM22x764yfDHKCqbgaeMJySJEnSXM020HdJsvfkQN9Dn23v/h6S/O8klye5LMlZSe6d5EFJzk/yjf7/3ttekiRJgtkH+l8Dn0vyuiSvBT4HvHE+DSY5EPhDYFlVHQrsChwHrAAuqKqDgQv6YUmSNAuzCvSqOhP4n8ANwCbg16vqXdvR7m7AfZLsBtwXuJ7uUrKr+umrgGO2Y/mSJO1UZr3bvKquAK7Y3gar6rokfwVcA3wfOK+qzkuyX1Vt6OfZkGTf7W1LkqSdxbx+PnV79MfGjwYeRnfluT3777jP9v4nJlmTZM2mTZuGVaYkSYvKyAMdeCpwdVVtqqofAh8EfgG4Icn+AP3/jdPduapOraplVbVsYsKL1UmSBOMJ9GuAJya5b5IARwBX0l0rfnk/z3Lgw2OoTZKkRWneXz2br6q6KMn7gS/S/bb6l4BTgfsBq5OcQBf6x466NkmSFquRBzpAVZ0MnDxl9J10vXVJkjRH49jlLkmSdjADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBu42j0SQPBN4BHAoU8ALgKuB9wFJgHfCbVfXdcdSnxWPpinPHXYIkLQjj6qG/BfiXqvpJ4KeAK4EVwAVVdTBwQT8sSZJmYeSBnmQv4MnAOwGq6r+q6hbgaGBVP9sq4JhR1yZJ0mI1jh76w4FNwOlJvpTkHUn2BParqg0A/f99x1CbJEmL0jgCfTfgZ4D/V1VPAO5gDrvXk5yYZE2SNZs2bRpWjZIkLSrjCPT1wPqquqgffj9dwN+QZH+A/v/G6e5cVadW1bKqWjYxMTGSgiVJWuhGHuhV9R3g2iSP7kcdAVwBnAMs78ctBz486tokSVqsxvK1NeAlwHuS3Av4FvB8ug8Xq5OcAFwDHDum2iRJWnTGEuhVdSmwbJpJR4y4FEmSmuCV4iRJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWrAuC79Kkmah6Urzh1ZW+tWHjWytrT97KFLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBowt0JPsmuRLST7aDz8oyflJvtH/33tctUmStNiMs4f+UuDKgeEVwAVVdTBwQT8sSZJmYSyBnmQJcBTwjoHRRwOr+turgGNGXJYkSYvWuHrobwb+BPjRwLj9qmoDQP9/3+numOTEJGuSrNm0adPQC5UkaTEYeaAneSawsaoumc/9q+rUqlpWVcsmJiZ2cHWSJC1Ou42hzV8EnpXkGcC9gb2SvBu4Icn+VbUhyf7AxjHUJknSojTyHnpVnVRVS6pqKXAc8Mmqeg5wDrC8n2058OFR1yZJ0mI1jh76TFYCq5OcAFwDHDvmeiRpp7Z0xbkja2vdyqNG1larxhroVfVp4NP97ZuAI8ZZjyRJi5VXipMkqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJasBC+nEWNWKUP+ggSerYQ5ckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNWDkgZ7koCSfSnJlksuTvLQf/6Ak5yf5Rv9/71HXJknSYjWOHvpm4OVV9RjgicCLkhwCrAAuqKqDgQv6YUmSNAsjD/Sq2lBVX+xv3wZcCRwIHA2s6mdbBRwz6tokSVqsxnoMPclS4AnARcB+VbUButAH9p3hPicmWZNkzaZNm0ZWqyRJC9nYAj3J/YAPAC+rqltne7+qOrWqllXVsomJieEVKEnSIjKWQE+yO12Yv6eqPtiPviHJ/v30/YGN46hNkqTFaBxnuQd4J3BlVf3NwKRzgOX97eXAh0ddmyRJi9VuY2jzF4HnAl9Ncmk/7pXASmB1khOAa4Bjx1CbJEmL0sgDvao+C2SGyUeMshZJklrhleIkSWrAOHa5S5J0N0tXnDuyttatPGpkbY2SPXRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIa4JXidhKjvAqTJGn07KFLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAa7mPkddXl6TRG+V777qVR42sLXvokiQ1wECXJKkBBrokSQ1YcMfQkxwJvAXYFXhHVa0cZfse15YkLUYLqoeeZFfg74BfAQ4Bjk9yyHirkiRp4VtQgQ4cBqytqm9V1X8BZwNHj7kmSZIWvIUW6AcC1w4Mr+/HSZKkrVhox9Azzbi62wzJicCJ/eDtSa4aelVztw9w47iLWADcDlu4LTpuhy3cFls0uy3yhjnNPtvt8NDpRi60QF8PHDQwvAS4fnCGqjoVOHWURc1VkjVVtWzcdYyb22ELt0XH7bCF22ILt0Vne7fDQtvl/gXg4CQPS3Iv4DjgnDHXJEnSgregeuhVtTnJi4F/pfva2mlVdfmYy5IkacFbUIEOUFUfAz427jq204I+JDBCboct3BYdt8MWbost3Bad7doOqaptzyVJkha0hXYMXZIkzYOBPgRJXpfkK0kuTXJekgPGXdO4JHlTkq/12+NDSR447prGJcmxSS5P8qMkO90ZvUmOTHJVkrVJVoy7nnFJclqSjUkuG3ct45TkoCSfSnJl/7p46bhrGpck905ycZIv99viNfNajrvcd7wke1XVrf3tPwQOqaoXjrmssUjyP4BP9ic8vgGgql4x5rLGIsljgB8B/wD8UVWtGXNJI9Nf1vnrwNPovp76BeD4qrpirIWNQZInA7cDZ1bVoeOuZ1yS7A/sX1VfTHJ/4BLgmJ30ORFgz6q6PcnuwGeBl1bV5+eyHHvoQzAZ5r09mXJxnJ1JVZ1XVZv7wc/TXVtgp1RVV1bVQrwQ0ih4WedeVV0I3DzuOsatqjZU1Rf727cBV7KTXhm0Orf3g7v3f3PODQN9SJKckuRa4NnAn4+7ngXiBcDHx12ExsLLOmtGSZYCTwAuGnMpY5Nk1ySXAhuB86tqztvCQJ+nJJ9Ictk0f0cDVNWrquog4D3Ai8db7XBta1v087wK2Ey3PZo1m22xk9rmZZ21c0pyP+ADwMum7N3cqVTVXVX103R7MQ9LMufDMQvue+iLRVU9dZazvhc4Fzh5iOWM1ba2RZLlwDOBI6rxkzbm8LzY2Wzzss7a+fTHiz8AvKeqPjjuehaCqrolyaeBI4E5nThpD30Ikhw8MPgs4GvjqmXckhwJvAJ4VlV9b9z1aGy8rLPupj8R7J3AlVX1N+OuZ5ySTEx+AyjJfYCnMo/c8Cz3IUjyAeDRdGc0fxt4YVVdN96qxiPJWmAP4KZ+1Od34jP+fw14KzAB3AJcWlVPH2tRI5TkGcCb2XJZ51PGW9F4JDkLOJzul7VuAE6uqneOtagxSPIk4N+Ar9K9VwK8sr9a6E4lyeOBVXSvjV2A1VX12jkvx0CXJGnxc5e7JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQH/H4daVhteT0wXAAAAAElFTkSuQmCC", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfQAAAF1CAYAAAAeOhj3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAf/klEQVR4nO3debgkdX3v8feHRVQERTki2ziKhAho8DoPyU3UENFIxLjdaCBqcIkjiSbyXG+ugEkUlQTjHo0xGBFwQYmEiAETERdiFHVQRFYBGWVgMgyDOODCdYbv/aPqSHM4Z+bM0t3n/M779Tz9TPevq6u+Vd09n65f/U5VqgpJkjS/bTPuAiRJ0pYz0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6BqLJG9I8pGtPM8k+VCSHyb5+tac90KS5MVJvrwJ0y9P8pT+/vFJ/mkr1nJHkkf2909N8uatOO/3J/nLrTW/LbW1t50Wnu3GXYBGK8kTgL8FDgDWA1cCx1TVN8Za2NbxBOCpwF5V9eNxF7MQVdVfz2a6JF8EPlJVGwywqnrA1qgryYuBP6qqJwzM++itMe+tZbbbTpqJgb6AJNkZ+Dfgj4EzgfsATwTuHGddW9HDgeUzhXmS7apq3YhrGroW16vFdZKGzS73heWXAKrqjKpaX1U/rarPVtWlAEn2SfL5JGuS3JLko0keNPnivmv1z5NcmuTHST6YZLckn0lye5LPJdmln3ZxkkqyNMlNSVYmec1MhSX5tSRfSXJbkm8nOWTguRcn+V6/jOuTvGCa178M+Cfgf/bdtCckOSTJiiSvTfLfwIeS7JDkXX1NN/X3d+jnMTn9/01yc1/zs5M8Pcl3k9ya5PgNrMPhSb6VZG2SG5K8YQPTTi7rNQPLesnA8w9McnqS1Um+n+QvkmwzsD3+K8k7k9wKvKHvjn5f/17c0T//sH79fpjkqiSPG5j/sUmu67fpFUmeM1Ot09T+or6mNUleN+W5XxxKSXLfJB/pp7styTf6z8uJdD8k39vX+t5++kryyiTXANcMtD1qYBG7Jjm/r/tLSR7eTzf5edtuoJYvJvmjJI8G3s/dn43b+ufv0YWf5OVJru3f53OS7DHwXCU5Osk1/fb8+ySZYftMne8hSVYMPH5tkhv7dbg6yaHTbLvJ9TkqyQ/SfR9fNzCP+yU5ra/lyv4zu4IZbKj+TDn8NXVb9tvxzem+n3ck+XSSh6T7/2Ft/74unrKsP0v3nb0lyVuTbJPuu3drkscMTPvQJD9NMjFT7doEVeVtgdyAnYE1wGnA7wC7THn+UXRd1jsAE8CFwLsGnl8OXATsBuwJ3Ax8E3hc/5rPA6/vp10MFHAGsCPwGGA18JT++TfQdbnSz2sN8HS6H5lP7R9P9K9dC+zXT7s7cMAM6/di4MsDjw8B1gFv6eu7H/DGfh0e2s//K8Cbpkz/V8D2wMv7mj8G7ER3mOJnwCNnWP4h/XpuAzwWWAU8ewPTruvr2b5f959MvifA6cCn+uUuBr4LvGxgPdcBf0rXy3Y/4FTgFuDxwH379+J64A+BbYE3A18YWP7zgD36Wn8f+DGw+3TbcUrd+wN3AE/qt+k7+lqme19fAXwauH9fw+OBnfvnvkjXBT447wLOBx4M3G+g7VH9/VOB2weW/e7JOrn787bdwPx+sYzp1qmf35v7+0/ut9//6Of9HuDCKbX9G/AgYBHd5+KwGbbRL+Y78F6v6O/vB9wA7DFQ9z7TbLvJ9flA//7+Cl1P2qP7508CvgTsAuwFXDq5jBlqmrH+weVOty377XgtsA/wQOAKus/jU+g+f6cDH5qyrC/07+OiftrJ9+F9wFsGpn018Olx/9/Yys099AWkqtbSHWee/I9idb8nslv//LVVdX5V3VlVq+n+s/7NKbN5T1Wtqqobgf8EvlZV36qqO4Gz6cJ90AlV9eOq+g7wIeDIaUp7IXBeVZ1XVXdV1fnAMrqQA7gLODDJ/apqZVVdvgmrfRfdj4w7q+qnwAuAN1bVzf06ngC8aGD6nwMnVtXPgY8DuwLvrqrb++VeThfW91JVX6yq7/TrcCndj5mp22/Qz/tafl5V59EF5X5JtqUL2eP65S4H3j6lzpuq6j1Vta5fL4Czq+riqvoZ3Xvxs6o6varWA59g4L2pqn+uqpv6Wj9Bt0d88Ea2JcDvAf9WVRf27/lf0m3jmdbvIXSBvL6vbe1G5v83VXXrwDpNde7Asl9Ht9e99yzq3pgXAKdU1Tf7eR/Xz3vxwDQnVdVtVfUDusA6aDOWs57uB8P+SbavquVVdd0Gpj+hup60bwPfpgt2gOcDf11VP6yqFcDfzWLZW1L/h6rquqr6EfAZ4Lqq+lx1h0X+mXt/79/Sv48/AN7F3d/704A/SN/bRPeZ/vAm1KENMNAXmKq6sqpeXFV7AQfS7aW9C37R/fXxvjtwLfARukAbtGrg/k+neTx1ENMNA/e/3y9vqocDz+u7ZW/ru0SfQLfH+GO6cDsaWJnk3CS/PPs1ZnUfcJP26OuYqaY1fQBOrg9sfB0BSPKrSb6Qrpv8R33NU7ffoDV1z+PEP+nnvSvd+Iapde458Hhwu06a9XuT5A+TXDKwvQ/cSK2T9hhcdv/+rJlh2g8D/wF8PN3hjb9Nsv1G5j/dek37fFXdAdzK9J+pTXWPz0U/7zXcc5v/98D9yfdqk1TVtcAxdHvFN/fftw3VP9My7/E+sPHttqF5zcZW+d5X1dfoeoN+s/8ePwo4ZxPq0AYY6AtYVV1F1z14YN/0N3R774+tqp3p9pynPU64CQb3nhYBN00zzQ3Ah6vqQQO3HavqpL7O/6iqp9J1t19F17swW1MvJ3gT3Q+IjdW0OT5G95/T3lX1QLrjtpuz/W6h27udWueNA483+zKJ/XHnDwCvAh5SVQ8CLmN2ta5k4D1Ncn+6vfB76XseTqiq/YFfB55BdwhgQ/VvbL0Gl/0Aum7dm+hCArru/UkP24T53uNzkWRHuvW6ccZXzOzHG6iDqvpYdaPtH97X9ZbNWMZKuq72SVvSS7HBejfThr73p9H93/Ii4JNTfnBrCxjoC0iSX043CGuv/vHedF1hF/WT7ETX7Xtbkj2BP98Ki/3LJPdPcgDwErqu36k+Avxukqcl2TbdYKpDkuyVbhDVM/v/YO/s61s/zTxm6wzgL5JMJNmV7nj51vp7+J2AW6vqZ0kOBv5gc2bS9xCcCZyYZKc+gP/3VqxzR7ogWQ2QbjDegRt8xd0+CTwjyROS3IduDMC0/48k+a0kj+kPIayl+5Ey+d6tAh65GbU/fWDZb6I75HNDf/jkRuCF/WfopXTHfCetAvbqXzedjwEvSXJQukGSf93Pe/lm1HhJX+eDkzyMbo8cgCT7JXlyv4yf0e3dbs7n+UzguCS79N/VV23GPAbrfVKSRUkeSHe4YUv9eV/b3nTHyQe/9x8GnkMX6qdvhWWpZ6AvLLcDvwp8LcmP6YL8MmBy9PkJdIOCfgScC/zLVljml+gG1FwAvK2qPjt1gqq6AXgWcDxdyNxA92Nim/72Grpf+LfSHZP+ky2o5810x+cvBb5DN6hva52s5E+ANya5ne6HwplbMK8/pdtz+h7wZbrAOWWLKwSq6gq6Y/JfpQu6xwD/NcvXXg68sq9nJfBDYKbR1Q+j+wGwlu58B1/i7h8l7wZ+rx9xPZvjv5M+Brye7rPweLpj35NeTve5WUM3gPErA899nm78w38nuWWa9bqAbjzAWf167QMcsQl1Dfow3fHu5cBnuWeY7UA3oO0Wui7wh9J97jfVG+m2+/XA5+i282b9+Wk/ZuUTdN+Ji+kGz22pT/XzuoTu/5IPDixvBd33rujG4WgrSdVm99xJM+oHE10PbF/+PbE0VEn+GDiiqjY0CHNUtRSwbz9eYKZpTqEb2PkXo6usfZ5YRpLmmSS70x2y+CqwL10v1nvHWtQs9T/2n8u9R8ZrC9nlLknzz32Af6Q7jPZ5ui7u9421ollI8ia6w3xvrarrx11Pa+xylySpAe6hS5LUAANdkqQGzOtBcbvuumstXrx43GVIkjQyF1988S1Vda8L2szrQF+8eDHLli0bdxmSJI1Mku9P1z60Lvcke/fntb4yyeVJXt23Pzjd5Q+v6f/dZeA1x6W7fOHVSZ42rNokSWrNMI+hrwNeU1WPBn4NeGWS/YFjgQuqal+6s4cdC9A/dwTdGZ4OA97XnzJSkiRtxNACvb/M5Tf7+7fTnfpxT7pTfJ7WT3Ya8Oz+/rOAj/eXubye7nShs7mcoyRJC95IRrn3ZwZ6HPA1YLeqWgld6NOdyxi6sB+85N4K7nnpQkmSNIOhB3p/icOzgGOqau2GJp2m7V5nvUmyNMmyJMtWr169tcqUJGleG2qgJ9meLsw/WlWTV+5a1Z+HePJ8xDf37Su45zV092Ka61RX1clVtaSqlkxM3GvUviRJC9IwR7mH7pJ5V1bVOwaeOgc4qr9/FN05iCfbj0iyQ5JH0F1w4OvDqk+SpJYM8+/QfwN4EfCdJJf0bcfTXQv4zCQvA34APA+66ywnORO4gm6E/Curav0Q65MkqRlDC/Sq+jLTHxcHOHSG15wInDismiRJapXncpckqQEGuiRJDTDQJUlqgIEuSVID5vXV1iRtucXHnjuyZS0/6fCRLUtaaNxDlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNGFqgJzklyc1JLhto+0SSS/rb8iSX9O2Lk/x04Ln3D6suSZJatN0Q530q8F7g9MmGqvr9yftJ3g78aGD666rqoCHWI0lSs4YW6FV1YZLF0z2XJMDzgScPa/mSJC0k4zqG/kRgVVVdM9D2iCTfSvKlJE8cU12SJM1Lw+xy35AjgTMGHq8EFlXVmiSPB/41yQFVtXbqC5MsBZYCLFq0aCTFSpI01418Dz3JdsBzgU9MtlXVnVW1pr9/MXAd8EvTvb6qTq6qJVW1ZGJiYhQlS5I0542jy/0pwFVVtWKyIclEkm37+48E9gW+N4baJEmal4b5Z2tnAF8F9kuyIsnL+qeO4J7d7QBPAi5N8m3gk8DRVXXrsGqTJKk1wxzlfuQM7S+epu0s4Kxh1SJJUus8U5wkSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNWBogZ7klCQ3J7lsoO0NSW5Mckl/e/rAc8cluTbJ1UmeNqy6JElq0TD30E8FDpum/Z1VdVB/Ow8gyf7AEcAB/Wvel2TbIdYmSVJThhboVXUhcOssJ38W8PGqurOqrgeuBQ4eVm2SJLVmHMfQX5Xk0r5Lfpe+bU/ghoFpVvRtkiRpFkYd6P8A7AMcBKwE3t63Z5ppa7oZJFmaZFmSZatXrx5KkZIkzTcjDfSqWlVV66vqLuAD3N2tvgLYe2DSvYCbZpjHyVW1pKqWTExMDLdgSZLmiZEGepLdBx4+B5gcAX8OcESSHZI8AtgX+Pooa5MkaT7bblgzTnIGcAiwa5IVwOuBQ5IcRNedvhx4BUBVXZ7kTOAKYB3wyqpaP6zaJElqzdACvaqOnKb5gxuY/kTgxGHVI0lSyzxTnCRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0Y2pniJGmqxceeO7JlLT/p8JEtS5oL3EOXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQHbjbsASfe2+Nhzx12CpHnGPXRJkhpgoEuS1AADXZKkBgwt0JOckuTmJJcNtL01yVVJLk1ydpIH9e2Lk/w0ySX97f3DqkuSpBYNcw/9VOCwKW3nAwdW1WOB7wLHDTx3XVUd1N+OHmJdkiQ1Z2iBXlUXArdOaftsVa3rH14E7DWs5UuStJCM8xj6S4HPDDx+RJJvJflSkieOqyhJkuajsfwdepLXAeuAj/ZNK4FFVbUmyeOBf01yQFWtnea1S4GlAIsWLRpVyZIkzWkj30NPchTwDOAFVVUAVXVnVa3p718MXAf80nSvr6qTq2pJVS2ZmJgYVdmSJM1pIw30JIcBrwWeWVU/GWifSLJtf/+RwL7A90ZZmyRJ89nQutyTnAEcAuyaZAXwerpR7TsA5ycBuKgf0f4k4I1J1gHrgaOr6tZpZyxJku5laIFeVUdO0/zBGaY9CzhrWLVIktQ6zxQnSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGbDebiZJcUFWHbqxNatniY88ddwmSNKMNBnqS+wL3B3ZNsguQ/qmdgT2GXJskSZqlje2hvwI4hi68L+buQF8L/P3wypIkSZtig4FeVe8G3p3kT6vqPSOqSZK22CgPkSw/6fCRLUuayayOoVfVe5L8OrB48DVVdfqQ6pIkSZtgtoPiPgzsA1wCrO+bCzDQJUmaA2YV6MASYP+qqmEWI0mSNs9s/w79MuBhwyxEkiRtvtnuoe8KXJHk68Cdk41V9cyhVCVJkjbJbAP9DcMsQpIkbZnZjnL/0rALkSRJm29Wx9CT3J5kbX/7WZL1SdZu5DWnJLk5yWUDbQ9Ocn6Sa/p/dxl47rgk1ya5OsnTNn+VJElaeGYV6FW1U1Xt3N/uC/wv4L0bedmpwGFT2o4FLqiqfYEL+sck2R84Ajigf837kmw767WQJGmB26yrrVXVvwJP3sg0FwK3Tml+FnBaf/804NkD7R+vqjur6nrgWuDgzalNkqSFaLYnlnnuwMNt6P4ufXP+Jn23qloJUFUrkzy0b98TuGhguhV9myRJmoXZjnL/3YH764DldHvVW0umaZv2B0OSpcBSgEWLFm3FEiRJmr9mO8r9JVtpeauS7N7vne8O3Ny3rwD2HphuL+CmGWo5GTgZYMmSJZ65TpIkZj/Kfa8kZ/ej1lclOSvJXpuxvHOAo/r7RwGfGmg/IskOSR4B7At8fTPmL0nSgjTbQXEfogvdPeiObX+6b5tRkjOArwL7JVmR5GXAScBTk1wDPLV/TFVdDpwJXAH8O/DKqlo//ZwlSdJUsz2GPlFVgwF+apJjNvSCqjpyhqcOnWH6E4ETZ1mPJEkaMNs99FuSvDDJtv3thcCaYRYmSZJmb7Z76C+lO5HMO+lGn38F2FoD5aTNtvjYc8ddgiTNCbMN9DcBR1XVD6E7hSvwNrqglyRJYzbbLvfHToY5QFXdCjxuOCVJkqRNNdtA32bKhVQezOz37iVJ0pDNNpTfDnwlySfpjqE/H0ekS5I0Z8z2THGnJ1lGd0GWAM+tqiuGWpkkSZq1WXeb9wFuiEuSNAdt1uVTJUnS3GKgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWrAdqNeYJL9gE8MND0S+CvgQcDLgdV9+/FVdd5oq5MkaX4aeaBX1dXAQQBJtgVuBM4GXgK8s6reNuqaJEma78bd5X4ocF1VfX/MdUiSNK+NO9CPAM4YePyqJJcmOSXJLuMqSpKk+WZsgZ7kPsAzgX/um/4B2IeuO34l8PYZXrc0ybIky1avXj3dJJIkLTjj3EP/HeCbVbUKoKpWVdX6qroL+ABw8HQvqqqTq2pJVS2ZmJgYYbmSJM1d4wz0Ixnobk+y+8BzzwEuG3lFkiTNUyMf5Q6Q5P7AU4FXDDT/bZKDgAKWT3lOkiRtwFgCvap+AjxkStuLxlGLJEktGPcod0mStBUY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBmw37gIkab5bfOy5I1vW8pMOH9myNL+4hy5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1YCxXW0uyHLgdWA+sq6olSR4MfAJYDCwHnl9VPxxHfZIkzTfj3EP/rao6qKqW9I+PBS6oqn2BC/rHkiRpFubS9dCfBRzS3z8N+CLw2nEVo803ymtDS5I649pDL+CzSS5OsrRv262qVgL0/z50TLVJkjTvjGsP/Teq6qYkDwXOT3LVbF/Y/wBYCrBo0aJh1SdJ0rwylj30qrqp//dm4GzgYGBVkt0B+n9vnuG1J1fVkqpaMjExMaqSJUma00Ye6El2TLLT5H3gt4HLgHOAo/rJjgI+NeraJEmar8bR5b4bcHaSyeV/rKr+Pck3gDOTvAz4AfC8MdQmSdK8NPJAr6rvAb8yTfsa4NBR1yNJUgs8U5wkSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkB2427AEnS7C0+9tyRLWv5SYePbFnacu6hS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqwMgDPcneSb6Q5Moklyd5dd/+hiQ3Jrmkvz191LVJkjRfjePv0NcBr6mqbybZCbg4yfn9c++sqreNoSZJkua1kQd6Va0EVvb3b09yJbDnqOtYaEZ5MgpJ0uiN9Rh6ksXA44Cv9U2vSnJpklOS7DK+yiRJml/GFuhJHgCcBRxTVWuBfwD2AQ6i24N/+wyvW5pkWZJlq1evHlW5kiTNaWMJ9CTb04X5R6vqXwCqalVVra+qu4APAAdP99qqOrmqllTVkomJidEVLUnSHDaOUe4BPghcWVXvGGjffWCy5wCXjbo2SZLmq3GMcv8N4EXAd5Jc0rcdDxyZ5CCggOXAK8ZQmyRJ89I4Rrl/Gcg0T5036lokSWqFZ4qTJKkB4+hylyTNA6M8f8Xykw4f2bJa5R66JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhrgxVnGaJQXPpAktc09dEmSGmCgS5LUAANdkqQGGOiSJDXAQXGSpLEb5SDh5ScdPrJljZJ76JIkNcBAlySpAQa6JEkNMNAlSWqAg+Km8OxtkqT5yD10SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNmHOBnuSwJFcnuTbJseOuR5Kk+WBO/R16km2BvweeCqwAvpHknKq6YryVSZJa0eqFYObaHvrBwLVV9b2q+n/Ax4FnjbkmSZLmvLkW6HsCNww8XtG3SZKkDZhTXe5Apmmre0yQLAWW9g/vSHL1Vq5hV+CWrTzP+cjt0HE7dNwOd3NbdNwOnQ1uh7xlKMt8+HSNcy3QVwB7DzzeC7hpcIKqOhk4eVgFJFlWVUuGNf/5wu3QcTt03A53c1t03A6dubQd5lqX+zeAfZM8Isl9gCOAc8ZckyRJc96c2kOvqnVJXgX8B7AtcEpVXT7msiRJmvPmVKADVNV5wHljLGFo3fnzjNuh43bouB3u5rbouB06c2Y7pKo2PpUkSZrT5toxdEmStBkM9CmSvCnJpUkuSfLZJHuMu6ZxSfLWJFf12+PsJA8ad03jkOR5SS5PcleSOTGadZQ8HTMkOSXJzUkuG3ct45Rk7yRfSHJl/5149bhrGpck903y9STf7rfFCWOvyS73e0qyc1Wt7e//GbB/VR095rLGIslvA5/vByu+BaCqXjvmskYuyaOBu4B/BP5PVS0bc0kj05+O+bsMnI4ZOHKhnY45yZOAO4DTq+rAcdczLkl2B3avqm8m2Qm4GHj2Qvs8ACQJsGNV3ZFke+DLwKur6qJx1eQe+hSTYd7bkSkntllIquqzVbWuf3gR3XkBFpyqurKqtvYJjOYLT8cMVNWFwK3jrmPcqmplVX2zv387cCUL9Gye1bmjf7h9fxtrXhjo00hyYpIbgBcAfzXueuaIlwKfGXcRGjlPx6xpJVkMPA742phLGZsk2ya5BLgZOL+qxrotFmSgJ/lcksumuT0LoKpeV1V7Ax8FXjXeaodrY9uin+Z1wDq67dGk2WyHBWqjp2PWwpPkAcBZwDFTejUXlKpaX1UH0fVeHpxkrIdj5tzfoY9CVT1llpN+DDgXeP0QyxmrjW2LJEcBzwAOrYYHXGzCZ2Kh2ejpmLWw9MeLzwI+WlX/Mu565oKqui3JF4HDgLENnFyQe+gbkmTfgYfPBK4aVy3jluQw4LXAM6vqJ+OuR2Ph6Zj1C/1AsA8CV1bVO8ZdzzglmZj8y58k9wOewpjzwlHuUyQ5C9iPblTz94Gjq+rG8VY1HkmuBXYA1vRNFy3EEf9JngO8B5gAbgMuqaqnjbWoEUrydOBd3H065hPHW9HoJTkDOITuylqrgNdX1QfHWtQYJHkC8J/Ad+j+jwQ4vj/D54KS5LHAaXTfi22AM6vqjWOtyUCXJGn+s8tdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1ID/D5KyeI5EhqTaAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -981,7 +961,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -991,7 +971,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 25, @@ -1031,7 +1011,7 @@ { "data": { "text/plain": [ - "array(0.20297711)" + "array(0.39108257)" ] }, "execution_count": 26, @@ -1059,16 +1039,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: 0.20297710618737433\n", - "Sample 1: 0.20297710618737433\n", - "Sample 2: 0.20297710618737433\n", - "Sample 3: 0.20297710618737433\n", - "Sample 4: 0.20297710618737433\n", - "Sample 5: 0.20297710618737433\n", - "Sample 6: 0.20297710618737433\n", - "Sample 7: 0.20297710618737433\n", - "Sample 8: 0.20297710618737433\n", - "Sample 9: 0.20297710618737433\n" + "Sample 0: 0.39108256705570377\n", + "Sample 1: 0.39108256705570377\n", + "Sample 2: 0.39108256705570377\n", + "Sample 3: 0.39108256705570377\n", + "Sample 4: 0.39108256705570377\n", + "Sample 5: 0.39108256705570377\n", + "Sample 6: 0.39108256705570377\n", + "Sample 7: 0.39108256705570377\n", + "Sample 8: 0.39108256705570377\n", + "Sample 9: 0.39108256705570377\n" ] } ], @@ -1094,7 +1074,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1104,7 +1084,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 28, @@ -1133,16 +1113,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: -0.5540632985052292\n", - "Sample 1: -0.5540632985052292\n", - "Sample 2: -0.5540632985052292\n", - "Sample 3: -0.5540632985052292\n", - "Sample 4: -0.5540632985052292\n", - "Sample 5: -0.5540632985052292\n", - "Sample 6: -0.5540632985052292\n", - "Sample 7: -0.5540632985052292\n", - "Sample 8: -0.5540632985052292\n", - "Sample 9: -0.5540632985052292\n" + "Sample 0: -0.3089666794896728\n", + "Sample 1: -0.3089666794896728\n", + "Sample 2: -0.3089666794896728\n", + "Sample 3: -0.3089666794896728\n", + "Sample 4: -0.3089666794896728\n", + "Sample 5: -0.3089666794896728\n", + "Sample 6: -0.3089666794896728\n", + "Sample 7: -0.3089666794896728\n", + "Sample 8: -0.3089666794896728\n", + "Sample 9: -0.3089666794896728\n" ] } ], @@ -1165,7 +1145,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfQAAAF1CAYAAAAeOhj3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAfy0lEQVR4nO3df7xldV3v8dcbBlFREOKAwKCDiiYiZU1kZUWiVzID6pFdTA2VIktN77VS1ALUKcwyuZq3SJDBHxDXH0lqBaJIZoADovJDZBJkBkbmAPJTJQc/94+1DmyOZ2bOnJm99znf83o+Huex9/qutdf6rLX3Pu/9XWvttVNVSJKkhW27cRcgSZK2noEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wEDXvJDkhCQf2MbzTJL3Jfl2kku25bwXkyQvSfL5LZj++iTP6u+/Icl7t2Etdyd5XH//9CRv3Ybz/rskf7qt5re1tvW2U/uWjLsAjVeSZwB/CTwFuA+4GnhNVX1xrIVtG88Ang0srap7xl3MYlRVfz6b6ZJcAHygqjYZYFX1iG1RV5KXAL9TVc8YmPfLt8W8t5XZbjtpioG+iCXZGfgE8PvA2cBDgJ8H7h1nXdvQY4HrNxbmSZZU1YYR1zR0La5Xi+skbWvucl/cnghQVWdW1X1V9d2qOreqvgKQ5PFJPpPk1iS3JPlgkkdNPbjftfrHSb6S5J4kpybZM8m/JLkryaeT7NpPuyxJJTk2yU1J1iV57cYKS/L0JF9IcnuSLyc5ZGDcS5J8o1/GdUleOMPjjwHeC/xMv5v2xCSHJFmb5HVJvgW8L8mOSd7Z13RTf3/Hfh5T0/9JkvV9zUcmeW6Srye5LckbNrEOv5LkS0nuTLImyQmbmHZqWa8dWNZLB8bvkuSMJJNJvpnkTUm2G9ge/5Hkb5LcBpzQ745+T/9c3N2Pf3S/ft9O8rUkTxuY/+uT/Fe/Ta9K8msbq3WG2l/c13RrkjdOG3f/oZQkD03ygX6625N8sX+9rKD7IPnuvtZ399NXklckuRa4dqDtCQOL2D3JeX3dn0vy2H66qdfbkoFaLkjyO0meDPwdD7w2bu/HP2gXfpLfTbK6f57PSbL3wLhK8vIk1/bb82+TZCPbZ/p8D0mydmD4dUlu7NfhmiSHzrDtptbn6CQ3pHs/vnFgHg9LsrKv5er+NbuWjejn9Yfp3ke3JHl7ku3SvR9uS/LUgWn3SPLdJBPZwvdEku3THTqYem1dmmTfjdWlrVRV/i3SP2Bn4FZgJfDLwK7Txj+Bbpf1jsAEcCHwzoHx1wMXAXsC+wDrgcuAp/WP+QxwfD/tMqCAM4GdgKcCk8Cz+vEn0O1ypZ/XrcBz6T50PrsfnugfeyfwpH7avYCnbGT9XgJ8fmD4EGAD8La+vocBb+7XYY9+/l8A3jJt+j8DdgB+t6/5Q8Aj6Q5TfA943EaWf0i/ntsBBwE3A0duYtoNfT079Ov+nannBDgD+Hi/3GXA14FjBtZzA/Aqur1uDwNOB24BfhJ4aP9cXAf8NrA98FbgswPLfz6wd1/r/wTuAfaaaTtOq/sA4G7gF/pt+o6+lpme198D/hl4eF/DTwI79+MuoNsFPjjvAs4DdgMeNtD2hP7+6cBdA8s+eapOHni9LRmY3/3LmGmd+vm9tb//zH77/UQ/73cBF06r7RPAo4DH0L0uDtvINrp/vgPP9dr+/pOANcDeA3U/foZtN7U+/9A/vz9Gtyftyf34k4DPAbsCS4GvTC1jIzUV8Nl+2z6G7vU0tW3eA7xtYNpXA/88l/cE8MfAV/v1TF/3j4z7f1+rf/bQF7GqupPuOPPUP4rJvieyZz9+dVWdV1X3VtUk3T/rX5w2m3dV1c1VdSPw78DFVfWlqroX+BhduA86saruqaqvAu8DXjBDaS8CPlVVn6qqH1TVecAqupAD+AFwYJKHVdW6qrpyC1b7B3QfMu6tqu8CLwTeXFXr+3U8EXjxwPTfB1ZU1feBs4DdgZOr6q5+uVfShfUPqaoLquqr/Tp8he7DzPTtN+j7fS3fr6pP0QXlk5JsTxeyx/XLvR7462l13lRV76qqDf16AXysqi6tqu/RPRffq6ozquo+4B8ZeG6q6v9V1U19rf9I1yM+eDPbEuA3gE9U1YX9c/6ndNt4Y+v3I3SBfF9f252bmf9fVNVtA+s03ScHlv1Gul73tugBvhA4raou6+d9XD/vZQPTnFRVt1fVDXTh+ONzWM59dB8YDkiyQ1VdX1X/tYnpT6xuT9qXgS/TBSTAbwJ/XlXfrqq1wP+ZxbLf1m/bG4B38sB7cSXwW1N7gOheZ+8feNyWvCd+B3hTVV1TnS9X1a2zqE1zYKAvclV1dVW9pKqWAgfS9dLeCffvajur3x14J/ABujfvoJsH7n93huHpJzGtGbj/zX550z0WeH6/W/b2fpfoM+h6jPfQhdvLgXVJPpnkR2e/xkz2ATdl776OjdV0ax+AU+sDm19HAJL8dJLPpttNfkdf8/TtN+jWevBx4u/0896d7vyG6XXuMzA8uF2nzPq5SfLbSS4f2N4HbqbWKXsPLrt/fjb2D/v9wL8BZ6U7vPGXSXbYzPxnWq8Zx1fV3cBtzPya2lIPel30876VB2/zbw3cn3qutkhVrQZeQ9cbX9+/3zZV/8aW+aDngc1vt+nT3P+6r6qL6fbQ/GL/3noCcM7AtFvyntgX2NQHFG1DBrruV1Vfo9s9eGDf9Bd0vfeDqmpnup7zjMcJt8Bg7+kxwE0zTLMGeH9VPWrgb6eqOqmv89+q6tl0u9u/Rrd3Ybam/7zgTXQfIDZX01x8iO4f4b5VtQvdcdu5bL9b6HpF0+u8cWB4zj+b2B93/gfglXS7Qx8FXMHsal3HwHOa5OF0vfAf0u95OLGqDgB+Fnge3SGATdW/ufUaXPYj6HYh30QXSNDt3p/y6C2Y74NeF0l2oluvGzf6iI27ZxN1UFUfqu5s+8f2db1tDstYR7erfcps9lJs6r24ku79/mLgw9M+BG+JNcDj5/hYbSEDfRFL8qPpTsJa2g/vS7fb7aJ+kkfS7fa9Pck+dMfDttafJnl4kqcAL6Xb9TvdB4BfTfKc/qSah/Yn4yxNdxLV4f0/2Hv7+u6bYR6zdSbwpv6En93pjg1uq+/DPxK4raq+l+Rg4LfmMpO+N3Q2sCLJI/sA/t/bsM6d6IJkEiDdyXgHbvIRD/gw8Lwkz0jyELpzAGb8v5Lkl5I8tT+EcCfdh5Sp5+5m4HFzqP25A8t+C90hnzX94ZMbgRf1r6GX8eBguRlY2j9uJh8CXprkx9OdJPnn/byvn0ONl/d17pbk0XQ9cgCSPCnJM/tlfI+udzuX1/PZwHFJdu3fq6+cxWP+uJ9+X7rj5IPvxfcDv0YX6mfMoZ4p7wXekmT/dA5KMuMHPm09A31xuwv4aeDiJPfQBfkVwNTZ5yfSnRR0B/BJ4KPbYJmfA1YD5wN/VVXnTp+gqtYARwBvoAuZNXQfJrbr/15L15u4je6Y9B9sRT1vpTs+/xW6k3cu69u2hT8A3pzkLroPCmdvxbxeRdfT+wbwebrAOW2rKwSq6iq6Y/L/SRd0TwX+Y5aPvRJ4RV/POuDbwMbOrn403QeAO+mud/A5HvhQcjLwG/1Z2rM5/jvlQ8DxdK+Fn6Q79j3ld+leN7fSnaz1hYFxn6E71vutJLfMsF7n050P8JF+vR4PHLUFdQ16P93x7uuBc3lwcO5Id0LbLXS70/ege91vqTfTbffrgE/TbefNff3048CldB84PgmcOjWiPw5/Gd0HvX+fQz1T3kH3uj+X7nk/le6kPg1Bqua8p06atf5kouuAHcrvE0tDleT3gaOqasaTMJMUsH9/DH9j8ziN7mTLNw2pTG1jXlhGkha4JHvRHbL4T2B/ur1Y796K+S0Dfp0f/paK5jF3uUvSwvcQ4O/pDqN9hm53+nvmMqMkb6E79Pb2qrpum1WooXOXuyRJDbCHLklSAwx0SZIasKBPitt9991r2bJl4y5DkqSRufTSS2+pqonp7Qs60JctW8aqVavGXYYkSSOT5JsztbvLXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWrAgv61NUkLzAm7jHBZd4xuWdI8YA9dkqQGDC3Qk5yWZH2SK6a1vyrJNUmuTPKXA+3HJVndj3vOsOqSJKlFw9zlfjrwbuCMqYYkvwQcARxUVfcm2aNvPwA4CngKsDfw6SRPrKr7hlifJEnNGFoPvaouBG6b1vz7wElVdW8/zfq+/QjgrKq6t6quA1YDBw+rNkmSWjPqY+hPBH4+ycVJPpfkp/r2fYA1A9Ot7dskSdIsjPos9yXArsDTgZ8Czk7yOCAzTFszzSDJscCxAI95zGOGVKYkSQvLqHvoa4GPVucS4AfA7n37vgPTLQVummkGVXVKVS2vquUTExNDL1iSpIVg1IH+T8AzAZI8EXgIcAtwDnBUkh2T7AfsD1wy4tokSVqwhrbLPcmZwCHA7knWAscDpwGn9V9l+2/g6Koq4MokZwNXARuAV3iGuyRJsze0QK+qF2xk1Is2Mv0KYMWw6pEkqWVeKU6SpAYY6JIkNcBAlySpAQa6JEkN8OdTpcVulD9pKmlo7KFLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBS8ZdgKQZnLDLuCuQtMDYQ5ckqQEGuiRJDTDQJUlqgIEuSVIDhhboSU5Lsj7JFTOM+6MklWT3gbbjkqxOck2S5wyrLkmSWjTMHvrpwGHTG5PsCzwbuGGg7QDgKOAp/WPek2T7IdYmSVJThhboVXUhcNsMo/4G+BOgBtqOAM6qqnur6jpgNXDwsGqTJKk1Iz2GnuRw4Maq+vK0UfsAawaG1/ZtM83j2CSrkqyanJwcUqWSJC0sIwv0JA8H3gj82UyjZ2irGdqoqlOqanlVLZ+YmNiWJUqStGCN8kpxjwf2A76cBGApcFmSg+l65PsOTLsUuGmEtUmStKCNrIdeVV+tqj2qallVLaML8Z+oqm8B5wBHJdkxyX7A/sAlo6pNkqSFbphfWzsT+E/gSUnWJjlmY9NW1ZXA2cBVwL8Cr6iq+4ZVmyRJrRnaLveqesFmxi+bNrwCWDGseiRJaplXipMkqQEGuiRJDTDQJUlqgIEuSVIDRvk9dEkanRN2GeGy7hjdsqSNsIcuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqwNACPclpSdYnuWKg7e1JvpbkK0k+luRRA+OOS7I6yTVJnjOsuiRJatEwe+inA4dNazsPOLCqDgK+DhwHkOQA4CjgKf1j3pNk+yHWJklSU4YW6FV1IXDbtLZzq2pDP3gRsLS/fwRwVlXdW1XXAauBg4dVmyRJrRnnMfSXAf/S398HWDMwbm3f9kOSHJtkVZJVk5OTQy5RkqSFYSyBnuSNwAbgg1NNM0xWMz22qk6pquVVtXxiYmJYJUqStKAsGfUCkxwNPA84tKqmQnstsO/AZEuBm0ZdmyRJC9VIe+hJDgNeBxxeVd8ZGHUOcFSSHZPsB+wPXDLK2iRJWsiG1kNPciZwCLB7krXA8XRnte8InJcE4KKqenlVXZnkbOAqul3xr6iq+4ZVmyRJrRlaoFfVC2ZoPnUT068AVgyrHkmSWuaV4iRJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqwJJxFyAtGCfsMu4KJGmj7KFLktQAe+iStLVGuffmhDtGtywtKPbQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJasDQAj3JaUnWJ7lioG23JOcluba/3XVg3HFJVie5JslzhlWXJEktGmYP/XTgsGltrwfOr6r9gfP7YZIcABwFPKV/zHuSbD/E2iRJasrQAr2qLgRum9Z8BLCyv78SOHKg/ayqureqrgNWAwcPqzZJkloz6mPoe1bVOoD+do++fR9gzcB0a/u2H5Lk2CSrkqyanJwcarGSJC0U8+WkuMzQVjNNWFWnVNXyqlo+MTEx5LIkSVoYRh3oNyfZC6C/Xd+3rwX2HZhuKXDTiGuTJGnBGnWgnwMc3d8/Gvj4QPtRSXZMsh+wP3DJiGuTJGnBWjKsGSc5EzgE2D3JWuB44CTg7CTHADcAzweoqiuTnA1cBWwAXlFV9w2rNkmSWjO0QK+qF2xk1KEbmX4FsGJY9UiS1LL5clKcJEnaCga6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDZhVoCc5fzZtkiRpPDZ5LfckDwUeTvcDK7vywO+W7wzsPeTaJEnSLG3ux1l+D3gNXXhfygOBfifwt8MrS5IkbYlNBnpVnQycnORVVfWuEdUkSZK20Kx+PrWq3pXkZ4Flg4+pqjOGVJckSdoCswr0JO8HHg9cDtzXNxdgoEuSNA/MKtCB5cABVVXDLEaSJM3NbL+HfgXw6GEWIkmS5m62PfTdgauSXALcO9VYVYcPpSpJkrRFZhvoJwyzCEmStHVme5b754ZdiCRJmrvZnuV+F91Z7QAPAXYA7qmqnYdVmCRJmr3Z9tAfOTic5Ejg4GEUJEmSttycfm2tqv4JeOa2LUWSJM3VbHe5//rA4HZ030v3O+mSJM0Tsz3L/VcH7m8ArgeO2ObVSJKkOZntMfSXDrsQSZI0d7M6hp5kaZKPJVmf5OYkH0mydNjFSZKk2ZntSXHvA86h+130fYB/7tskSdI8MNtAn6iq91XVhv7vdGBirgtN8r+SXJnkiiRnJnlokt2SnJfk2v5217nOX5KkxWa2gX5Lkhcl2b7/exFw61wWmGQf4A+B5VV1ILA9cBTweuD8qtofOL8fliRJszDbQH8Z8JvAt4B1wG8AW3Oi3BLgYUmWAA8HbqI7a35lP34lcORWzF+SpEVltoH+FuDoqpqoqj3oAv6EuSywqm4E/gq4ge7DwR1VdS6wZ1Wt66dZB+wx0+OTHJtkVZJVk5OTcylBkqTmzDbQD6qqb08NVNVtwNPmssD+2PgRwH50J9nt1O/Cn5WqOqWqllfV8omJOR/GlySpKbMN9O0GT1JLshuzvyjNdM8Crquqyar6PvBR4GeBm5Ps1c9/L2D9HOcvSdKiM9tQ/mvgC0k+THfJ198EVsxxmTcAT0/ycOC7wKHAKuAe4GjgpP7243OcvyRJi85srxR3RpJVdD/IEuDXq+qquSywqi7uPxhcRncZ2S8BpwCPAM5Ocgxd6D9/LvOXJGkxmvVu8z7A5xTiM8zreOD4ac330vXWJUnSFprTz6dKkqT5xUCXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSA8YS6EkeleTDSb6W5OokP5NktyTnJbm2v911HLVJkrQQjauHfjLwr1X1o8CPAVcDrwfOr6r9gfP7YUmSNAsjD/QkOwO/AJwKUFX/XVW3A0cAK/vJVgJHjro2SZIWqnH00B8HTALvS/KlJO9NshOwZ1WtA+hv95jpwUmOTbIqyarJycnRVS1J0jw2jkBfAvwE8H+r6mnAPWzB7vWqOqWqllfV8omJiWHVKEnSgjKOQF8LrK2qi/vhD9MF/M1J9gLob9ePoTZJkhakkQd6VX0LWJPkSX3TocBVwDnA0X3b0cDHR12bJEkL1ZIxLfdVwAeTPAT4BvBSug8XZyc5BrgBeP6YapMkacEZS6BX1eXA8hlGHTriUiRJaoJXipMkqQEGuiRJDTDQJUlqgIEuSVIDxnWWuyRpLk7YZYTLumN0y9JWs4cuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIa4KVftbCN8jKYkjSP2UOXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGjC2QE+yfZIvJflEP7xbkvOSXNvf7jqu2iRJWmjG2UN/NXD1wPDrgfOran/g/H5YkiTNwlgCPclS4FeA9w40HwGs7O+vBI4ccVmSJC1Y4+qhvxP4E+AHA217VtU6gP52jzHUJUnSgjTyQE/yPGB9VV06x8cfm2RVklWTk5PbuDpJkhamcfTQfw44PMn1wFnAM5N8ALg5yV4A/e36mR5cVadU1fKqWj4xMTGqmiVJmtdGHuhVdVxVLa2qZcBRwGeq6kXAOcDR/WRHAx8fdW2SJC1U8+l76CcBz05yLfDsfliSJM3CknEuvKouAC7o798KHDrOeiRJWqjmUw9dkiTNkYEuSVIDxrrLXY06YZdxVyBJi449dEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUgJEHepJ9k3w2ydVJrkzy6r59tyTnJbm2v9111LVJkrRQjaOHvgF4bVU9GXg68IokBwCvB86vqv2B8/thSZI0CyMP9KpaV1WX9ffvAq4G9gGOAFb2k60Ejhx1bZIkLVRjPYaeZBnwNOBiYM+qWgdd6AN7jLE0SZIWlLEFepJHAB8BXlNVd27B445NsirJqsnJyeEVKEnSAjKWQE+yA12Yf7CqPto335xkr378XsD6mR5bVadU1fKqWj4xMTGagiVJmufGcZZ7gFOBq6vqHQOjzgGO7u8fDXx81LVJkrRQLRnDMn8OeDHw1SSX921vAE4Czk5yDHAD8Pwx1CZJ0oI08kCvqs8D2cjoQ0dZiyRJrRhHD12StBCcsMsIl3XH6JbVKC/9KklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcCz3BeLUZ6tKkkaOXvokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAv4cuSRo/f9ltq9lDlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDfDSr5KkxaXRy8zaQ5ckqQEGuiRJDTDQJUlqwLw7hp7kMOBkYHvgvVV10phLGp5RHseRJDVtXvXQk2wP/C3wy8ABwAuSHDDeqiRJmv/mWw/9YGB1VX0DIMlZwBHAVSOrwF6zJGkBmlc9dGAfYM3A8Nq+TZIkbcJ866FnhrZ60ATJscCx/eDdSa4ZelXDsztwy7iLGIPFut6weNd9sa43LN51X6zrDYPrfuJMsbbVHjtT43wL9LXAvgPDS4GbBieoqlOAU0ZZ1LAkWVVVy8ddx6gt1vWGxbvui3W9YfGu+2Jdbxjfus+3Xe5fBPZPsl+ShwBHAeeMuSZJkua9edVDr6oNSV4J/Bvd19ZOq6orx1yWJEnz3rwKdICq+hTwqXHXMSJNHDqYg8W63rB4132xrjcs3nVfrOsNY1r3VNXmp5IkSfPafDuGLkmS5sBAH6Mkb0nylSSXJzk3yd7jrmlUkrw9ydf69f9YkkeNu6ZRSfL8JFcm+UGS5s8CTnJYkmuSrE7y+nHXMypJTkuyPskV465llJLsm+SzSa7uX+evHndNo5DkoUkuSfLlfr1PHHkN7nIfnyQ7V9Wd/f0/BA6oqpePuayRSPI/gM/0J0K+DaCqXjfmskYiyZOBHwB/D/xRVa0ac0lD01/O+evAs+m+lvpF4AVVNbqrP45Jkl8A7gbOqKoDx13PqCTZC9irqi5L8kjgUuDI1p/zJAF2qqq7k+wAfB54dVVdNKoa7KGP0VSY93Zi2kV0WlZV51bVhn7wIrprDiwKVXV1VS3kCyJtifsv51xV/w1MXc65eVV1IXDbuOsYtapaV1WX9ffvAq5mEVzxszp394M79H8j/Z9uoI9ZkhVJ1gAvBP5s3PWMycuAfxl3ERoKL+e8iCVZBjwNuHjMpYxEku2TXA6sB86rqpGut4E+ZEk+neSKGf6OAKiqN1bVvsAHgVeOt9pta3Pr3k/zRmAD3fo3Yzbrvkhs9nLOalOSRwAfAV4zbW9ks6rqvqr6cbo9jgcnGemhlnn3PfTWVNWzZjnph4BPAscPsZyR2ty6JzkaeB5waDV2MscWPO+t2+zlnNWe/hjyR4APVtVHx13PqFXV7UkuAA4DRnZSpD30MUqy/8Dg4cDXxlXLqCU5DHgdcHhVfWfc9WhovJzzItOfHHYqcHVVvWPc9YxKkompb+skeRjwLEb8P92z3McoyUeAJ9Gd8fxN4OVVdeN4qxqNJKuBHYFb+6aLFtEZ/r8GvAuYAG4HLq+q54y1qCFK8lzgnTxwOecV461oNJKcCRxC98tbNwPHV9WpYy1qBJI8A/h34Kt0/9sA3tBfBbRZSQ4CVtK9zrcDzq6qN4+0BgNdkqSFz13ukiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAb8fxMIQxDFuwQIAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -1201,7 +1181,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1211,7 +1191,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 31, @@ -1240,7 +1220,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1250,7 +1230,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 32, @@ -1295,7 +1275,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1305,7 +1285,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 33, @@ -1369,7 +1349,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{(2,) of 0} [id E]\n", @@ -1379,7 +1359,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 35, @@ -1407,16 +1387,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [ 0.47385668 -0.47635737]\n", - "Sample 1: [ 0.47385668 -0.47635737]\n", - "Sample 2: [ 0.47385668 -0.47635737]\n", - "Sample 3: [ 0.47385668 -0.47635737]\n", - "Sample 4: [ 0.47385668 -0.47635737]\n", - "Sample 5: [ 0.47385668 -0.47635737]\n", - "Sample 6: [ 0.47385668 -0.47635737]\n", - "Sample 7: [ 0.47385668 -0.47635737]\n", - "Sample 8: [ 0.47385668 -0.47635737]\n", - "Sample 9: [ 0.47385668 -0.47635737]\n" + "Sample 0: [ 0.78240688 -3.18162507]\n", + "Sample 1: [ 0.78240688 -3.18162507]\n", + "Sample 2: [ 0.78240688 -3.18162507]\n", + "Sample 3: [ 0.78240688 -3.18162507]\n", + "Sample 4: [ 0.78240688 -3.18162507]\n", + "Sample 5: [ 0.78240688 -3.18162507]\n", + "Sample 6: [ 0.78240688 -3.18162507]\n", + "Sample 7: [ 0.78240688 -3.18162507]\n", + "Sample 8: [ 0.78240688 -3.18162507]\n", + "Sample 9: [ 0.78240688 -3.18162507]\n" ] } ], @@ -1441,16 +1421,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [-0.57795086 -0.33999804]\n", - "Sample 1: [-1.81857076 1.9581163 ]\n", - "Sample 2: [-1.21316707 1.11236001]\n", - "Sample 3: [-0.65227326 1.64559109]\n", - "Sample 4: [0.46256757 1.01906687]\n", - "Sample 5: [-0.31869496 2.35081405]\n", - "Sample 6: [-0.47447351 -3.27005501]\n", - "Sample 7: [-0.20685277 0.39483451]\n", - "Sample 8: [-0.99561576 -2.92132874]\n", - "Sample 9: [-0.17359813 1.20051413]\n" + "Sample 0: [-1.28155248 -2.43923323]\n", + "Sample 1: [0.79028984 1.04562784]\n", + "Sample 2: [ 0.72617142 -1.03521156]\n", + "Sample 3: [ 0.48982116 -2.49536056]\n", + "Sample 4: [-0.2703926 -1.31810768]\n", + "Sample 5: [-1.77204798 0.58312629]\n", + "Sample 6: [0.40618242 1.20454728]\n", + "Sample 7: [-0.52902447 1.77459613]\n", + "Sample 8: [-0.25187891 -3.80004651]\n", + "Sample 9: [-0.0965785 -3.50546558]\n" ] } ], @@ -1466,7 +1446,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeIAAAHiCAYAAAA06c+jAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAfGklEQVR4nO3de5SkBX3m8eepvkxPz4UBQUFmFG9EWTRqBjXGxAuoeIlkzyZGo1kvm52je4ya4zWyUdyNWdd4XDVmLxMliYq3Fc16FFYhaoy7AR0QRQWVIMhNGIRhbj19qfrtH/WO2zY9MzDvr+fXXfX9nDOH7q6Xp35vdXU99b5V9b6OCAEAgBqd6gEAABhmFDEAAIUoYgAAClHEAAAUoogBAChEEQMAUIgiBpYR2+fY/mjB9b7F9geP9PUCoIgBSZLtJ9n+v7bvsn2H7f9j+7TquTIcqNxth+2HSlJE/FlE/ME9yPqq7UMuB+CeG60eAKhme72kz0t6paRPSRqX9OuSpivnGja2RyNirnoO4EhjixiQTpakiPh4RHQjYioivhQR35Ek2w+x/WXbP7N9u+3zbG/Y/z/bvs72G2x/x/Ye2x+yfT/bF9reZfti20c3y57UbIlusX2z7Vtsv+5Ag9l+QrOlvsP2t20/Zd5lL7V9bXMdP7b9osO9AeZvNduesP3RZn132P5msz7vUP8Jygds77b9gWb5JzbL3NX894nzch9k+2vzboe/nHc9+2+Lf2P7J5K+3Pz8f9r+aZP3Ndv/Yl7e39j+r81tu7vZc3G87ffavtP21bYfc7i3A1CBIgakH0rq2v5b28/aX5rzWNJ/knR/SY+QtEnSOQuW+VeSnq5+qf+mpAslvUXSser/nb16wfJPlfQwSc+Q9GbbZywcyvaJkr4g6U8lHSPp9ZLOt32c7TWS3i/pWRGxTtITJV1xr9d8cS+RdJT663kfSa+QNBURZ0v6R0mvioi1EfEq28c0M76/WfY9kr5g+z5N1sckfaO57BxJv7/I9T1Z/dv1mc33F6p/29xX0uWSzluw/PMl/Xv1b9tpSf/ULHespE83MwArBkWMoRcROyU9SVJI+itJ221/zvb9msuviYiLImI6Irar/0D/5AUxfxERt0bETeqX1aUR8a2ImJb0WUkLt9LeHhF7IuJKSX8t6YWLjPZiSRdExAUR0YuIiyRtk/Ts5vKepFNtr46IWyLiewdZzec3W7c//3eQZWfVL86HNnsILmtuo8U8R9KPIuIjETEXER+XdLWk37T9AEmnSXprRMxExNclfW6RjHOa22JKkiLi3IjY1dx250j6ZdtHzVv+s81M+9S/bfdFxIcjoivpk7r7bQ0saxQxICkiroqIl0bERkmnqr/1+15Jsn1f25+wfZPtnZI+qv7W13y3zvt6apHv1y5Y/oZ5X1/fXN9CD5T0OwvK80mSToiIPZJ+V/2t1Vtsf8H2ww+yip+KiA3z/x1k2Y9I+qKkTzS7z99le+wAy96/mX++6yWd2Fx2R0TsnXfZDbq7n//M9ojtd9r+5+a2vq65aP7tfW9va2BZo4iBBSLiakl/o34hS/3d0iHpURGxXv0tVbe8mk3zvn6ApJsXWeYGSR9ZUKBrIuKdzZxfjIinSzpB/a3Qv2o5k5rc2Yh4e0Scov4u7+dK+tf7L16w+M3qP2GY7wGSbpJ0i6RjbE/Ou2yT7m5+5u9JOkvSGervHj+p+Xnb2xtYtihiDD3bD7f9Otsbm+83qb+r+JJmkXWSdkva0bxu+4aEq/0T25PNG5Fepv4u1YU+qv4u3mc2W4oTtp9ie2Pz5qnnNa8VTzfzdRPmku2n2n6k7RFJO9XfVb0/+1ZJD563+AWSTrb9e7ZHbf+upFMkfT4irld/V/o5tsdt/6r6r58fzLpmfX4maVLSn2WsE7CcUcSAtEvS4yVdanuP+gX8XUn73838dkmPlXSX+m9M+kzCdf6DpGsk/b2kd0fElxYuEBE3qL91+BZJ29XfQn6D+n+3nWa+myXdof5r1v8uYS5JOl79Nz3tlHRVM+v+zyG/T9JvN+9Qfn9E/Ez9LebXqV+eb5T03Ii4vVn+RZJ+tbnsT9V/wnGwj4V9WP1d2zdJ+r7+/5MhYGA5YuGeJgBLxfZJkn4saWwYPzNr+5OSro6It1XPAiwXbBEDWDK2T3P/c9gd22eqv4X/d8VjAcsKR9YCsJSOV39X/n0k3SjplRHxrdqRgOWFXdMAABRi1zQAAIUoYgAACqW8Rmz7jyT9gfofzL9S0suaw88tatyrYkJrMq4aAIBlb5fuvD0ijlvsstZF3Bzg4NWSTomIKdufkvQC9Y9MtKgJrdHjfXrbq8YwctJOnOjl5ADAPXBxfHrhoWB/LmvX9Kik1bZH1T8azmKH6wMAAAu0LuLmbDPvlvQT9Y8te9diRwkCAAB317qIm3O3niXpQeqfbWWN7RcvstwW29tsb5s96BHuAAAYHhm7ps+Q9OOI2B4Rs+p/eP+JCxeKiK0RsTkiNo9pVcLVAgCw8mUU8U8kPaE5k4wlna7+geIBAMAhZLxGfKn6Z2q5XP2PLnUkbW2bCwDAMEj5HHFzJhXOpgIAwL3EkbUAAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhShiAAAKUcQAABRKOaAHcMRwHmEcLs5ljWWKLWIAAApRxAAAFKKIAQAoRBEDAFCIIgYAoBBFDABAIYoYAIBCFDEAAIUoYgAAClHEAAAUoogBAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhShiAAAKjVYPgOHgkZGUnOh2U3KW1TzOeT7cGcv5c+7NzqXkpIne8soBkrFFDABAIYoYAIBCFDEAAIUoYgAAClHEAAAUoogBAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhShiAAAKUcQAABSiiAEAKEQRAwBQiCIGAKBQypnEbW+Q9EFJp0oKSS+PiH/KyD74FSc9j+CE4UsuepGS45GRZZWTsV6dsZQ/Q0W3m5LjjlNysubJ0hkfT8npzc6l5CwrPAaWynkEkN4n6X9HxG/bHpc0mZQLAMBAa13EttdL+g1JL5WkiJiRNNM2FwCAYZCxb/fBkrZL+mvb37L9QdtrEnIBABh4GUU8Kumxkv5bRDxG0h5Jb164kO0ttrfZ3jar6YSrBQBg5cso4hsl3RgRlzbff1r9Yv4FEbE1IjZHxOYxrUq4WgAAVr7WRRwRP5V0g+1fan50uqTvt80FAGAYZL1r+g8lnde8Y/paSS9LygUAYKClFHFEXCFpc0YWAADDhCNrAQBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFKKIAQAoRBEDAFAo6xCXNaJXPcEv8uA9r+mMj6fkxNxsSo5Hx3JyVk+k5IxEtM6I2ZzbZmTdupQcjefcxrF3KiVH3W5KTG8qZx533DojktYJg2HwmgMAgBWEIgYAoBBFDABAIYoYAIBCFDEAAIUoYgAAClHEAAAUoogBAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhShiAAAKUcQAABSiiAEAKDRaPcBAiV7riM74eMIgkry8nmN5ZCQnZ2JVTk7SPFq3tnWE9+xJGERS1n1n33RKjMfHUnJiJiVGnbXtf1eSpG63dURvaiphkDyRsE6Zsv4+l9t6HcjyerQGAGDIUMQAABSiiAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFKKIAQAoRBEDAFCIIgYAoBBFDABAIYoYAIBCFDEAAIVGqwcYJBkns846kbVHk55jRS8lxkknrfe6pJO7T0+nxMSaVa0zuidsaD+IpJFd+1JyYvzolJzOrXem5Hg052Eqdu1OyVHC33ln9eqEQaTe1FRKznKT9Ti4UqRtEdsesf0t25/PygQAYNBl7pp+jaSrEvMAABh4KUVse6Ok50j6YEYeAADDImuL+L2S3igp5wVFAACGROsitv1cSbdFxGWHWG6L7W22t80q540yAACsdBlbxL8m6Xm2r5P0CUlPs/3RhQtFxNaI2BwRm8fU/p2mAAAMgtZFHBF/HBEbI+IkSS+Q9OWIeHHryQAAGAIc0AMAgEKpB/SIiK9K+mpmJgAAg4wtYgAAClHEAAAUoogBAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhVIP6LFSeWQkJSd6kRHSPkOSV+Ucz7uzbn1KTkzPpOTse/gJKTmdmW5KToy0fy7bncy5/+09eTIlZ3xXzn1wcmIsJaezJ+e+01m/NiVHt9/ZOqK7e3fCIMvssWs5Sno8XWpsEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhShiAAAKUcQAABSiiAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFKKIAQAoNFp2zW7/HMAdJwySeFLshJNQd1ZNJAwidU64X0pOb+3qnJw14zk5ozm/8ztPzlmvmaMSMta3z5Ck8Z05OVMzOSebn96QcxtP3pZz3xnbOZuSM+7298HO3FzCJFJMTaXkZD2WeiTnvtObzbl9UiR0lSTpIDXDFjEAAIUoYgAAClHEAAAUoogBAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhShiAAAKUcQAABSiiAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQqPVA7QRvYOcafle6Izl3AzR7bbO6GxIOkt8t5eTM5JzwvDbfmUyJcdJq7X3+JycOHlP64y5O1clTCJ1J3OeV6/5SU7O3vvl3He64zl/n6t/lrNendn2d8LRu1YnTCLFvumcnO5MTk7SY7Ii6Q89wxGYhS1iAAAKtS5i25tsf8X2Vba/Z/s1GYMBADAMMvb5zEl6XURcbnudpMtsXxQR30/IBgBgoLXeIo6IWyLi8ubrXZKuknRi21wAAIZB6pu1bJ8k6TGSLl3ksi2StkjShHLeuAMAwEqX9mYt22slnS/ptRGxc+HlEbE1IjZHxOYx5bxLFACAlS6liG2PqV/C50XEZzIyAQAYBhnvmrakD0m6KiLe034kAACGR8YW8a9J+n1JT7N9RfPv2Qm5AAAMvNZv1oqIr0vKOYQOAABDhiNrAQBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFEo96cO9Er32Gc55HhHdbkqOR0bah6xb2z5DkiJSYmaOWZ2Sk2XHI+dygiYS7n+Snv2Qq1NyMvx4931Scp7z9CtTcj583RNScvZ85biUnPFdOYc76OydbZ0Rxx2dMInUmUv6e7jb2QEOT8y1v20kKXIeklcMtogBAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhShiAAAKUcQAABSiiAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFBotu2YnPAeInJO7Z52EurNuXfuQu3LO0B0n5JxMfd+xdXeRxYxumE7JeeBxd6TkPHbt9a0znjZ5TcIk0icnHpOSc+Ftp6bkzHRHUnIiJ0buRUrO3NETrTPG7phKmERSJ2dbymM5f+cxN5uS0xkfT8npzcyk5Cw1togBAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhShiAAAKUcQAABSiiAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFKKIAQAoNFo9QBud8fGUnOh2c3JmZlpneM1kwiRSd03ObdOZiZScudUpMep1c547/vOPTkjJuWTdQ1pnvHz9rQmTSE9ec3VKzsaxO1Jy/uS630rJGTk25z44c2fOfWftje3n8cxcwiSS1q5JiYkdO1NysmQ9Jq8UKfdM22fa/oHta2y/OSMTAIBh0LqIbY9I+ktJz5J0iqQX2j6lbS4AAMMgY4v4cZKuiYhrI2JG0icknZWQCwDAwMso4hMl3TDv+xubnwEAgEPIeLOWF/nZ3d7NYHuLpC2SNKGcNyQBALDSZWwR3yhp07zvN0q6eeFCEbE1IjZHxOYxrUq4WgAAVr6MIv6mpIfZfpDtcUkvkPS5hFwAAAZe613TETFn+1WSvihpRNK5EfG91pMBADAEUg7oEREXSLogIwsAgGHCIS4BAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhShiAAAKpXyOeKXzyEhOzthY+5C5nBOGj+ycSsmZe0jOccEnb805ufvsj1en5Ez+8h0pOetG97XOeN1PH5swifTYNdel5Bw/eldKjncm/D1I6h47m5LT+X7OPJ7rtQ+Zan+/kaS4a1dKjldPpORob8JtI6k3M5OSs1KwRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFKKIAQAoRBEDAFCIIgYAoBBFDABAIYoYAIBCFDEAAIUoYgAAClHEAAAUoogBAChEEQMAUIgiBgCg0GjZNUf7E0innTzaOc9HOppqneGJVQmTSN4znZKz/tr26yRJtz9qMiVn8uaUGO04+qiUnL/vndw646yTrkyYRPryjkek5HzlW6ek5HS6TslZf9l4Ss7IdKTkyDnrlSJy1in25Txe9GbnUnKyHpMzeuZIYIsYAIBCFDEAAIUoYgAAClHEAAAUoogBAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhShiAAAKUcQAABSiiAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQqPVA+AXxZ69KTmeWJWSo4iUmJGZnJzOXEqM1l47kpKza+6o1hkf23NawiRS7/ac3/n4zpzn56O7U2I0ub2XkjM6lXRf3j3dPmR30t/5aM5DeMRUSk5nLGee3sxMSs5KwRYxAACFWhWx7T+3fbXt79j+rO0NSXMBADAU2m4RXyTp1Ih4lKQfSvrj9iMBADA8WhVxRHwpIva/aneJpI3tRwIAYHhkvkb8ckkXHuhC21tsb7O9bVYJb3YAAGAAHPItbrYvlnT8IhedHRH/q1nmbElzks47UE5EbJW0VZLW+5icty8CALDCHbKII+KMg11u+yWSnivp9Iikz7oAADAkWn3oy/aZkt4k6ckRkfPBOAAAhkjb14g/IGmdpItsX2H7vyfMBADA0Gi1RRwRD80aBACAYcSRtQAAKEQRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFcs7ivMJlncw6xUjOCeu1N+dE36Pbd6Xk3Gemm5IzfezqlJy5VWMpOWu+4dYZ47tyZtn5wJzn1ZPbeyk5o1M5B9pzNydnzTV3puRo33CdtP7e6M3OHXoh3A1bxAAAFKKIAQAoRBEDAFCIIgYAoBBFDABAIYoYAIBCFDEAAIUoYgAAClHEAAAUoogBAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhShiAAAKUcQAABQarR6gFec8j+jNzKTkZBgZH0/J6e2ZTcnRnr0pMZ7YlJIzcUs3JWd8x1hKzsyGVe0z1o0kTCJt+FHO79yREqPxHdMpOSPX3pySo/XrcnKmplpHxHTObdNLmEWSopf0S49eTs6QYYsYAIBCFDEAAIUoYgAAClHEAAAUoogBAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhShiAAAKUcQAABSiiAEAKEQRAwBQiCIGAKAQRQwAQKHR6gFaWWYnofZI+xO8d/fsTZhEabdNZ3IyJUc33poS47Gcu+zIaE7OxO71rTNWd3NOyt5bsyolp7NjT0qOkn5XSvpdxa3bc3J67f+2Yno6YRLJo2MpOTG9LyUn4zFQkqLbTclZKdgiBgCgUEoR23697bB9bEYeAADDonUR294k6emSftJ+HAAAhkvGFvF/kfRGSTkvdAEAMERaFbHt50m6KSK+nTQPAABD5ZBvR7R9saTjF7nobElvkfSMe3JFtrdI2iJJE0p6Jy4AACvcIYs4Is5Y7Oe2HynpQZK+bVuSNkq63PbjIuKni+RslbRVktb7GHZjAwCgFp8jjogrJd13//e2r5O0OSJuT5gLAIChwOeIAQAolHZkrYg4KSsLAIBhwRYxAACFKGIAAApRxAAAFKKIAQAoRBEDAFCIIgYAoFDax5eQdDJrL6/nRu7kzBN796bkaDLp8KgzsykxnptLycnQ2Z50wLrRnJO7azTn4SWmck5aHzMzOTnL6KT1vemc2ybLcrptVpLl9agPAMCQoYgBAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhShiAAAKUcQAABSiiAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFBqtHmBZcNLzkegtjwxJHhlJyYmZmZycbjclR0nzaG4uJSZmZ9uHJM2SdT/uJd3GnfHxlJyYS7iNlXgfzHq8ABrcowAAKEQRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFKKIAQAoRBEDAFCIIgYAoBBFDABAIYoYAIBCFDEAAIUoYgAAClHEAAAUGq0eYFmIXvUE6bJOgr7cTqYee/em5KSZmame4Oc64+PLKqeXdNu445ScrPtgigF8zMHhW0b3TAAAhg9FDABAodZFbPsPbf/A9vdsvytjKAAAhkWr14htP1XSWZIeFRHTtu+bMxYAAMOh7RbxKyW9MyKmJSkibms/EgAAw6NtEZ8s6ddtX2r7H2yfdqAFbW+xvc32tllNt7xaAAAGwyF3Tdu+WNLxi1x0dvP/Hy3pCZJOk/Qp2w+OiFi4cERslbRVktb7mLtdDgDAMDpkEUfEGQe6zPYrJX2mKd5v2O5JOlbS9rwRAQAYXG13Tf+dpKdJku2TJY1Lur1lJgAAQ6PtkbXOlXSu7e9KmpH0ksV2SwMAgMW1KuKImJH04qRZAAAYOhxZCwCAQhQxAACFKGIAAApRxAAAFKKIAQAoRBEDAFCo7eeIMeic81zNHafkSCMpKdHtpuQsJ72ZmeoRlkQM3q8K+AVsEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhShiAAAKUcQAABSiiAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFKKIAQAoNFo9AJa56OXEcHL3A3PS8+Gk3xWAI4stYgAAClHEAAAUoogBAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhShiAAAKUcQAABSiiAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFRqsHAIZe9Kon+EVOen6+3NYLWKbYIgYAoBBFDABAoVZFbPvRti+xfYXtbbYflzUYAADDoO0W8bskvT0iHi3prc33AADgHmpbxCFpffP1UZJubpkHAMBQafuu6ddK+qLtd6tf6k9sPREAAEPkkEVs+2JJxy9y0dmSTpf0RxFxvu3nS/qQpDMOkLNF0hZJmtDkYQ8MAMAgcUQc/v9s3yVpQ0SEbUu6KyLWH+r/W+9j4vE+/bCvF8AS4nPEQLqL49OXRcTmxS5r+xd3s6QnN18/TdKPWuYBADBU2r5G/G8lvc/2qKR9anY9AwCAe6ZVEUfE1yX9StIsAAAMHY6sBQBAIYoYAIBCFDEAAIUoYgAAClHEAAAUoogBACjU6shah32l9nZJ1x/xKz6wYyXdXj3EETIs6zos6ymxroOKdR0sD4yI4xa7oKSIlxvb2w506LFBMyzrOizrKbGug4p1HR7smgYAoBBFDABAIYq4b2v1AEfQsKzrsKynxLoOKtZ1SPAaMQAAhdgiBgCgEEXcsP0fbX/H9hW2v2T7/tUzLQXbf2776mZdP2t7Q/VMS8X279j+nu2e7YF8R6btM23/wPY1tt9cPc9SsX2u7dtsf7d6lqVme5Ptr9i+qrn/vqZ6pqVge8L2N2x/u1nPt1fPVIVd0w3b6yNiZ/P1qyWdEhGvKB4rne1nSPpyRMzZ/s+SFBFvKh5rSdh+hKSepP8h6fURsa14pFS2RyT9UNLTJd0o6ZuSXhgR3y8dbAnY/g1JuyV9OCJOrZ5nKdk+QdIJEXG57XWSLpP0W4P2e7VtSWsiYrftMUlfl/SaiLikeLQjji3ixv4SbqyRNJDPUCLiSxEx13x7iaSNlfMspYi4KiJ+UD3HEnqcpGsi4tqImJH0CUlnFc+0JCLia5LuqJ7jSIiIWyLi8ubrXZKuknRi7VT5om938+1Y828gH3cPhSKex/Y7bN8g6UWS3lo9zxHwckkXVg+Bw3aipBvmfX+jBvABe5jZPknSYyRdWjzKkrA9YvsKSbdJuigiBnI9D2Woitj2xba/u8i/syQpIs6OiE2SzpP0qtppD9+h1rNZ5mxJc+qv64p1T9Z1gHmRnw3lFsUgsr1W0vmSXrtgj93AiIhuRDxa/T1zj7M90C87HMho9QBHUkSccQ8X/ZikL0h62xKOs2QOtZ62XyLpuZJOjxX+JoF78TsdRDdK2jTv+42Sbi6aBYma10zPl3ReRHymep6lFhE7bH9V0pmSBv4NeQsN1Rbxwdh+2Lxvnyfp6qpZlpLtMyW9SdLzImJv9Txo5ZuSHmb7QbbHJb1A0ueKZ0JLzZuYPiTpqoh4T/U8S8X2cfs/tWF7taQzNKCPu4fCu6Ybts+X9Evqv8v2ekmviIibaqfKZ/saSask/az50SWD+O5wSbL9LyX9haTjJO2QdEVEPLN0qGS2ny3pvZJGJJ0bEe+onWhp2P64pKeof5aeWyW9LSI+VDrUErH9JEn/KOlK9R+PJOktEXFB3VT5bD9K0t+qf9/tSPpURPyH2qlqUMQAABRi1zQAAIUoYgAAClHEAAAUoogBAChEEQMAUIgiBgCgEEUMAEAhihgAgEL/DxzUWzHrdYLvAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -1515,7 +1495,7 @@ " $$" ], "text/plain": [ - "" + "" ] }, "execution_count": 39, @@ -1711,7 +1691,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 45, @@ -1734,7 +1714,7 @@ { "data": { "text/plain": [ - "array([ 0.7117622 , -0.568556 , 0.94015843])" + "array([-0.52429245, -0.58159923, 1.09532328])" ] }, "execution_count": 46, @@ -1971,7 +1951,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The `Model` class also has methods to extract the gradient (`dlogp`) and the hessian (`d2logp`) of the `logp`." + "The {class}`~pymc.Model` class also has methods to extract the gradient (`~pymc.Model.dlogpt`) and the hessian (`~pymc.Model.d2logpt`) of the `logp`." ] }, { From dce8e917a64270606ac7a05b8949d22024adad55 Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Sun, 5 Jun 2022 23:09:14 +0200 Subject: [PATCH 23/30] fix methods references --- .../learn/core_notebooks/pymc_aesara.ipynb | 136 +++++++++--------- 1 file changed, 68 insertions(+), 68 deletions(-) diff --git a/docs/source/learn/core_notebooks/pymc_aesara.ipynb b/docs/source/learn/core_notebooks/pymc_aesara.ipynb index cbcb0ad2b5..834f14ff79 100644 --- a/docs/source/learn/core_notebooks/pymc_aesara.ipynb +++ b/docs/source/learn/core_notebooks/pymc_aesara.ipynb @@ -192,7 +192,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -345,7 +345,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 10, @@ -389,7 +389,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -427,7 +427,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 12, @@ -593,7 +593,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 15, @@ -687,7 +687,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 18, @@ -732,7 +732,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 19, @@ -819,7 +819,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 21, @@ -895,7 +895,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -961,7 +961,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -971,7 +971,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 25, @@ -1011,7 +1011,7 @@ { "data": { "text/plain": [ - "array(0.39108257)" + "array(0.5382538)" ] }, "execution_count": 26, @@ -1039,16 +1039,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: 0.39108256705570377\n", - "Sample 1: 0.39108256705570377\n", - "Sample 2: 0.39108256705570377\n", - "Sample 3: 0.39108256705570377\n", - "Sample 4: 0.39108256705570377\n", - "Sample 5: 0.39108256705570377\n", - "Sample 6: 0.39108256705570377\n", - "Sample 7: 0.39108256705570377\n", - "Sample 8: 0.39108256705570377\n", - "Sample 9: 0.39108256705570377\n" + "Sample 0: 0.5382538040144141\n", + "Sample 1: 0.5382538040144141\n", + "Sample 2: 0.5382538040144141\n", + "Sample 3: 0.5382538040144141\n", + "Sample 4: 0.5382538040144141\n", + "Sample 5: 0.5382538040144141\n", + "Sample 6: 0.5382538040144141\n", + "Sample 7: 0.5382538040144141\n", + "Sample 8: 0.5382538040144141\n", + "Sample 9: 0.5382538040144141\n" ] } ], @@ -1074,7 +1074,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1084,7 +1084,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 28, @@ -1113,16 +1113,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: -0.3089666794896728\n", - "Sample 1: -0.3089666794896728\n", - "Sample 2: -0.3089666794896728\n", - "Sample 3: -0.3089666794896728\n", - "Sample 4: -0.3089666794896728\n", - "Sample 5: -0.3089666794896728\n", - "Sample 6: -0.3089666794896728\n", - "Sample 7: -0.3089666794896728\n", - "Sample 8: -0.3089666794896728\n", - "Sample 9: -0.3089666794896728\n" + "Sample 0: -0.7495880478667979\n", + "Sample 1: -0.7495880478667979\n", + "Sample 2: -0.7495880478667979\n", + "Sample 3: -0.7495880478667979\n", + "Sample 4: -0.7495880478667979\n", + "Sample 5: -0.7495880478667979\n", + "Sample 6: -0.7495880478667979\n", + "Sample 7: -0.7495880478667979\n", + "Sample 8: -0.7495880478667979\n", + "Sample 9: -0.7495880478667979\n" ] } ], @@ -1145,7 +1145,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1181,7 +1181,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1191,7 +1191,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 31, @@ -1220,7 +1220,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1230,7 +1230,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 32, @@ -1275,7 +1275,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1285,7 +1285,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 33, @@ -1349,7 +1349,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{(2,) of 0} [id E]\n", @@ -1359,7 +1359,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 35, @@ -1387,16 +1387,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [ 0.78240688 -3.18162507]\n", - "Sample 1: [ 0.78240688 -3.18162507]\n", - "Sample 2: [ 0.78240688 -3.18162507]\n", - "Sample 3: [ 0.78240688 -3.18162507]\n", - "Sample 4: [ 0.78240688 -3.18162507]\n", - "Sample 5: [ 0.78240688 -3.18162507]\n", - "Sample 6: [ 0.78240688 -3.18162507]\n", - "Sample 7: [ 0.78240688 -3.18162507]\n", - "Sample 8: [ 0.78240688 -3.18162507]\n", - "Sample 9: [ 0.78240688 -3.18162507]\n" + "Sample 0: [ 0.17727283 -1.3943496 ]\n", + "Sample 1: [ 0.17727283 -1.3943496 ]\n", + "Sample 2: [ 0.17727283 -1.3943496 ]\n", + "Sample 3: [ 0.17727283 -1.3943496 ]\n", + "Sample 4: [ 0.17727283 -1.3943496 ]\n", + "Sample 5: [ 0.17727283 -1.3943496 ]\n", + "Sample 6: [ 0.17727283 -1.3943496 ]\n", + "Sample 7: [ 0.17727283 -1.3943496 ]\n", + "Sample 8: [ 0.17727283 -1.3943496 ]\n", + "Sample 9: [ 0.17727283 -1.3943496 ]\n" ] } ], @@ -1421,16 +1421,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [-1.28155248 -2.43923323]\n", - "Sample 1: [0.79028984 1.04562784]\n", - "Sample 2: [ 0.72617142 -1.03521156]\n", - "Sample 3: [ 0.48982116 -2.49536056]\n", - "Sample 4: [-0.2703926 -1.31810768]\n", - "Sample 5: [-1.77204798 0.58312629]\n", - "Sample 6: [0.40618242 1.20454728]\n", - "Sample 7: [-0.52902447 1.77459613]\n", - "Sample 8: [-0.25187891 -3.80004651]\n", - "Sample 9: [-0.0965785 -3.50546558]\n" + "Sample 0: [-0.99735265 1.28871121]\n", + "Sample 1: [-1.35959858 -1.44060224]\n", + "Sample 2: [0.90484154 0.62712404]\n", + "Sample 3: [1.65203664 3.17555768]\n", + "Sample 4: [ 1.54672797 -0.98768775]\n", + "Sample 5: [ 1.20763861 -2.40080271]\n", + "Sample 6: [-0.48398172 1.75631166]\n", + "Sample 7: [-0.40868314 -1.66628623]\n", + "Sample 8: [0.78373334 1.36300401]\n", + "Sample 9: [-0.75710529 0.98851286]\n" ] } ], @@ -1446,7 +1446,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1495,7 +1495,7 @@ " $$" ], "text/plain": [ - "" + "" ] }, "execution_count": 39, @@ -1691,7 +1691,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 45, @@ -1714,7 +1714,7 @@ { "data": { "text/plain": [ - "array([-0.52429245, -0.58159923, 1.09532328])" + "array([-0.3553317 , 0.64382698, -1.02454636])" ] }, "execution_count": 46, @@ -1951,7 +1951,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The {class}`~pymc.Model` class also has methods to extract the gradient (`~pymc.Model.dlogpt`) and the hessian (`~pymc.Model.d2logpt`) of the `logp`." + "The {class}`~pymc.Model` class also has methods to extract the gradient ({meth}`~pymc.Model.dlogpt`) and the hessian ({meth}`~pymc.Model.d2logpt`) of the `logp`." ] }, { From ba6cf148c99bea1940e15812ab7ce461142a0f9b Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Mon, 6 Jun 2022 10:23:33 +0200 Subject: [PATCH 24/30] add some cross-references [WIP] --- .../learn/core_notebooks/pymc_aesara.ipynb | 150 +++++++++--------- 1 file changed, 75 insertions(+), 75 deletions(-) diff --git a/docs/source/learn/core_notebooks/pymc_aesara.ipynb b/docs/source/learn/core_notebooks/pymc_aesara.ipynb index 834f14ff79..eebc39a50c 100644 --- a/docs/source/learn/core_notebooks/pymc_aesara.ipynb +++ b/docs/source/learn/core_notebooks/pymc_aesara.ipynb @@ -164,7 +164,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can use the `aesara.dprint` function to print the computational graph of any given tensor." + "We can use the {func}`~aesara.dprint` function to print the computational graph of any given tensor." ] }, { @@ -192,7 +192,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -208,7 +208,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note that this graph does not do any computation (yet!). It is simply defining the sequence of steps to be done. We can use `aesara.function` to define a callable object so that we can push values trough the graph." + "Note that this graph does not do any computation (yet!). It is simply defining the sequence of steps to be done. We can use {func}`~aesara.function` to define a callable object so that we can push values trough the graph." ] }, { @@ -345,7 +345,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 10, @@ -389,7 +389,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -427,7 +427,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 12, @@ -565,7 +565,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note that this is very similar to the output of the `aesara.dprint` function introduced above." + "Note that this is very similar to the output of {func}`~aesara.dprint` function introduced above." ] }, { @@ -593,7 +593,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 15, @@ -687,7 +687,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 18, @@ -703,7 +703,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "To modify the graph we need to use the `aesara.clone_replace` function, which *returns a copy of the initial subgraph with the corresponding substitutions.*" + "To modify the graph we need to use the {func}`~aesara.clone_replace` function, which *returns a copy of the initial subgraph with the corresponding substitutions.*" ] }, { @@ -732,7 +732,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 19, @@ -819,7 +819,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 21, @@ -895,7 +895,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfQAAAF1CAYAAAAeOhj3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAe0klEQVR4nO3de5RkZX3u8e/DRVQEQWmV2ziKhATR4HEWOSdRQ7xEIkY0KxqIGrxEJJFEVzw5oiYBVBKMGjUmxmBAQAUhEiIGPAFRIcagDorITQUZZWCcGWYkXFSOM/zOH3u3FE33TM+lqrrf/n7W6tVVb+3a+7d3XZ7a735rV6oKSZI0v20z7gIkSdKWM9AlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOgaiyTHJ/nYVp5nknwkyQ+TfGVrznshSfKKJF/chOmXJXl2f/ktSf5pK9ZyV5LH95dPS/KOrTjvDyX58601vy21tbedFp7txl2ARivJ04C/Bp4IrAeuA95QVV8da2Fbx9OA5wB7VdXd4y5mIaqqv5zNdEm+AHysqjYYYFX1sK1RV5JXAL9fVU8bmPfRW2PeW8tst500EwN9AUmyM/BvwB8A5wAPAp4O3DPOuraixwLLZgrzJNtV1boR1zR0La5Xi+skDZtd7gvLzwFU1VlVtb6qflxVF1XVVQBJ9knyuSRrktyW5ONJdpm8c9+1+qdJrkpyd5JTkjw6yWeS3Jnks0l27addnKSSHJXk1iQrkrxxpsKS/M8kX0pye5JvJDl44LZXJPluv4ybkrx0mvu/Gvgn4H/13bQnJDk4yfIkb0ryA+AjSXZI8r6+plv7yzv085ic/v8kWdXX/MIkz0vy7SRrk7xlA+twaJKvJ7kjyc1Jjt/AtJPLeuPAsl45cPvDk5yRZHWS7yX5syTbDGyP/0zy3iRrgeP77ugP9o/FXf3tj+nX74dJrk/ylIH5H5vkxn6bXpvkRTPVOk3tL+9rWpPkrVNu+9mhlCQPTvKxfrrbk3y1f76cSPdB8u/6Wv+un76SvC7Jd4DvDLQ9YWARuyW5uK/70iSP7aebfL5tN1DLF5L8fpJfAD7Efc+N2/vb79eFn+Q1SW7oH+fzk+wxcFslOTrJd/rt+fdJMsP2mTrfg5MsH7j+piS39OvwrSTPmmbbTa7PkUm+n+71+NaBeTwkyel9Ldf1z9nlzGBD9WfK4a+p27Lfju9I9/q8K8mnkzwy3fvDHf3junjKsv443Wv2tiTvSrJNutfe2iRPGpj2UUl+nGRiptq1CarKvwXyB+wMrAFOB34D2HXK7U+g67LeAZgALgPeN3D7MuBy4NHAnsAq4GvAU/r7fA44rp92MVDAWcCOwJOA1cCz+9uPp+typZ/XGuB5dB8yn9Nfn+jvewewXz/t7sATZ1i/VwBfHLh+MLAOeGdf30OAt/Xr8Kh+/l8C3j5l+r8Atgde09d8JrAT3WGKnwCPn2H5B/fruQ3wZGAl8MINTLuur2f7ft1/NPmYAGcAn+qXuxj4NvDqgfVcB/wRXS/bQ4DTgNuApwIP7h+Lm4DfA7YF3gF8fmD5Lwb26Gv9HeBuYPfptuOUuvcH7gKe0W/Tv+lrme5xfS3waeChfQ1PBXbub/sCXRf44LwLuBh4BPCQgbYn9JdPA+4cWPb7J+vkvufbdgPz+9kyplunfn7v6C8/s99+/6Of9weAy6bU9m/ALsAiuufFITNso5/Nd+CxXt5f3g+4GdhjoO59ptl2k+vz4f7x/UW6nrRf6G8/CbgU2BXYC7hqchkz1DRj/YPLnW5b9tvxBmAf4OHAtXTPx2fTPf/OAD4yZVmf7x/HRf20k4/DB4F3Dkz7euDT435vbOXPPfQFpKruoDvOPPlGsbrfE3l0f/sNVXVxVd1TVavp3qx/dcpsPlBVK6vqFuA/gC9X1der6h7gPLpwH3RCVd1dVd8EPgIcMU1pLwMurKoLq+reqroYWEoXcgD3AgckeUhVraiqazZhte+l+5BxT1X9GHgp8LaqWtWv4wnAywem/ylwYlX9FPgEsBvw/qq6s1/uNXRh/QBV9YWq+ma/DlfRfZiZuv0G/bSv5adVdSFdUO6XZFu6kH1zv9xlwHum1HlrVX2gqtb16wVwXlVdUVU/oXssflJVZ1TVeuBsBh6bqvrnqrq1r/Vsuj3igzayLQF+G/i3qrqsf8z/nG4bz7R+j6QL5PV9bXdsZP5/VVVrB9ZpqgsGlv1Wur3uvWdR98a8FDi1qr7Wz/vN/bwXD0xzUlXdXlXfpwusAzdjOevpPjDsn2T7qlpWVTduYPoTqutJ+wbwDbpgB3gJ8JdV9cOqWg787SyWvSX1f6Sqbqyq/wY+A9xYVZ+t7rDIP/PA1/07+8fx+8D7uO91fzrwu+l7m+ie0x/dhDq0AQb6AlNV11XVK6pqL+AAur2098HPur8+0XcH3gF8jC7QBq0cuPzjaa5PHcR088Dl7/XLm+qxwIv7btnb+y7Rp9HtMd5NF25HAyuSXJDk52e/xqzuA27SHn0dM9W0pg/AyfWBja8jAEl+Kcnn03WT/3df89TtN2hN3f848Y/6ee9GN75hap17Dlwf3K6TZv3YJPm9JFcObO8DNlLrpD0Gl90/PmtmmPajwL8Dn0h3eOOvk2y/kflPt17T3l5VdwFrmf45tanu97zo572G+2/zHwxcnnysNklV3QC8gW6veFX/ettQ/TMt836PAxvfbhua12xsldd9VX2ZrjfoV/vX8ROA8zehDm2Agb6AVdX1dN2DB/RNf0W39/7kqtqZbs952uOEm2Bw72kRcOs009wMfLSqdhn427GqTurr/Peqeg5dd/v1dL0LszX15wRvpfsAsbGaNseZdG9Oe1fVw+mO227O9ruNbu92ap23DFzf7J9J7I87fxg4BnhkVe0CXM3sal3BwGOa5KF0e+EP0Pc8nFBV+wO/DDyf7hDAhurf2HoNLvthdN26t9KFBHTd+5Meswnzvd/zIsmOdOt1y4z3mNndG6iDqjqzutH2j+3reudmLGMFXVf7pC3ppdhgvZtpQ6/70+neW14OfHLKB25tAQN9AUny8+kGYe3VX9+brivs8n6Snei6fW9Psifwp1thsX+e5KFJngi8kq7rd6qPAb+Z5LlJtk03mOrgJHulG0T1gv4N9p6+vvXTzGO2zgL+LMlEkt3ojpdvre/D7wSsraqfJDkI+N3NmUnfQ3AOcGKSnfoA/pOtWOeOdEGyGiDdYLwDNniP+3wSeH6SpyV5EN0YgGnfR5L8WpIn9YcQ7qD7kDL52K0EHr8ZtT9vYNlvpzvkc3N/+OQW4GX9c+hVdMd8J60E9urvN50zgVcmOTDdIMm/7Oe9bDNqvLKv8xFJHkO3Rw5Akv2SPLNfxk/o9m435/l8DvDmJLv2r9VjNmMeg/U+I8miJA+nO9ywpf60r21vuuPkg6/7jwIvogv1M7bCstQz0BeWO4FfAr6c5G66IL8amBx9fgLdoKD/Bi4A/mUrLPNSugE1lwDvrqqLpk5QVTcDhwFvoQuZm+k+TGzT/72R7hP+Wrpj0n+4BfW8g+74/FXAN+kG9W2tk5X8IfC2JHfSfVA4Zwvm9Ud0e07fBb5IFzinbnGFQFVdS3dM/r/ogu5JwH/O8r7XAK/r61kB/BCYaXT1Y+g+ANxBd76DS7nvQ8n7gd/uR1zP5vjvpDOB4+ieC0+lO/Y96TV0z5s1dAMYvzRw2+foxj/8IMlt06zXJXTjAc7t12sf4PBNqGvQR+mOdy8DLuL+YbYD3YC22+i6wB9F97zfVG+j2+43AZ+l286b9fXTfszK2XSviSvoBs9tqU/187qS7r3klIHlLad73RXdOBxtJana7J47aUb9YKKbgO3L7xNLQ5XkD4DDq2pDgzBHVUsB+/bjBWaa5lS6gZ1/NrrK2ueJZSRpnkmyO90hi/8C9qXrxfq7sRY1S/2H/d/igSPjtYXscpek+edBwD/SHUb7HF0X9wfHWtEsJHk73WG+d1XVTeOupzV2uUuS1AD30CVJaoCBLklSA+b1oLjddtutFi9ePO4yJEkamSuuuOK2qnrAD9rM60BfvHgxS5cuHXcZkiSNTJLvTddul7skSQ0w0CVJaoCBLklSAwx0SZIaMLRAT3JqklVJrh5oO7v/DeYrkyxLcmXfvjjJjwdu+9Cw6pIkqUXDHOV+Gt25hX/283hV9TuTl5O8h+5XvSbdWFUHDrEeSZKaNbRAr6rL+pPwP0CSAC8Bnjms5UuStJCM6xj604GVVfWdgbbHJfl6kkuTPH1MdUmSNC+N68QyRwBnDVxfASyqqjVJngr8a5InVtUdU++Y5CjgKIBFixaNpFhJkua6ke+hJ9mO7rdwz55sq6p7qmpNf/kK4Ebg56a7f1WdXFVLqmrJxMQDznwnSdKCNI4u92cD11fV8smGJBNJtu0vPx7YF/juGGqTJGleGubX1s4C/gvYL8nyJK/ubzqc+3e3AzwDuCrJN4BPAkdX1dph1SZJUmuGOcr9iBnaXzFN27nAucOqRZKk1s3rX1uTtOUWH3vByJa17KRDR7YsaaHx1K+SJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgO2G3cBkh5o8bEXjLsESfOMe+iSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBnvpVmiVPxyppLnMPXZKkBhjokiQ1YGiBnuTUJKuSXD3QdnySW5Jc2f89b+C2Nye5Icm3kjx3WHVJktSiYe6hnwYcMk37e6vqwP7vQoAk+wOHA0/s7/PBJNsOsTZJkpoytECvqsuAtbOc/DDgE1V1T1XdBNwAHDSs2iRJas04jqEfk+Sqvkt+175tT+DmgWmW922SJGkWRh3o/wDsAxwIrADe07dnmmlruhkkOSrJ0iRLV69ePZQiJUmab0Ya6FW1sqrWV9W9wIe5r1t9ObD3wKR7AbfOMI+Tq2pJVS2ZmJgYbsGSJM0TIw30JLsPXH0RMDkC/nzg8CQ7JHkcsC/wlVHWJknSfDa0M8UlOQs4GNgtyXLgOODgJAfSdacvA14LUFXXJDkHuBZYB7yuqtYPqzZJkloztECvqiOmaT5lA9OfCJw4rHokSWqZZ4qTJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGjC0QE9yapJVSa4eaHtXkuuTXJXkvCS79O2Lk/w4yZX934eGVZckSS0a5h76acAhU9ouBg6oqicD3wbePHDbjVV1YP939BDrkiSpOUML9Kq6DFg7pe2iqlrXX70c2GtYy5ckaSEZ5zH0VwGfGbj+uCRfT3JpkqfPdKckRyVZmmTp6tWrh1+lJEnzwFgCPclbgXXAx/umFcCiqnoK8CfAmUl2nu6+VXVyVS2pqiUTExOjKViSpDlu5IGe5Ejg+cBLq6oAquqeqlrTX74CuBH4uVHXJknSfDXSQE9yCPAm4AVV9aOB9okk2/aXHw/sC3x3lLVJkjSfbTesGSc5CzgY2C3JcuA4ulHtOwAXJwG4vB/R/gzgbUnWAeuBo6tq7bQzliRJDzC0QK+qI6ZpPmWGac8Fzh1WLZIktc4zxUmS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYM7dSv0igsPvaCcZcgSXOCe+iSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAZsN+4CJC0ci4+9YGTLWnbSoSNbljQXuIcuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJasDQAj3JqUlWJbl6oO0RSS5O8p3+/64Dt705yQ1JvpXkucOqS5KkFg1zD/004JApbccCl1TVvsAl/XWS7A8cDjyxv88Hk2w7xNokSWrK0AK9qi4D1k5pPgw4vb98OvDCgfZPVNU9VXUTcANw0LBqkySpNaM+hv7oqloB0P9/VN++J3DzwHTL+7YHSHJUkqVJlq5evXqoxUqSNF/MlUFxmaatppuwqk6uqiVVtWRiYmLIZUmSND+MOtBXJtkdoP+/qm9fDuw9MN1ewK0jrk2SpHlr1IF+PnBkf/lI4FMD7Ycn2SHJ44B9ga+MuDZJkuatof0eepKzgIOB3ZIsB44DTgLOSfJq4PvAiwGq6pok5wDXAuuA11XV+mHVJklSa4YW6FV1xAw3PWuG6U8EThxWPZIktWxWXe5JLplNmyRJGo8N7qEneTDwULpu8125bzT6zsAeQ65NkiTN0sa63F8LvIEuvK/gvkC/A/j74ZUlSZI2xQYDvareD7w/yR9V1QdGVJMkSdpEsxoUV1UfSPLLwOLB+1TVGUOqS5IkbYJZBXqSjwL7AFcCk18nK8BAlyRpDpjt19aWAPtX1bSnY5UkSeM12zPFXQ08ZpiFSJKkzTfbPfTdgGuTfAW4Z7Kxql4wlKokSdImmW2gHz/MIiRJ0paZ7Sj3S4ddiCRJ2nyzHeV+J/f9PvmDgO2Bu6tq52EVJkmSZm+2e+g7DV5P8kLgoGEUJEmSNt1m/R56Vf0r8MytW4okSdpcs+1y/62Bq9vQfS/d76RLkjRHzHaU+28OXF4HLAMO2+rVSJKkzTLbY+ivHHYhkiRp883qGHqSvZKcl2RVkpVJzk2y17CLkyRJszPbQXEfAc6n+130PYFP922SJGkOmO0x9ImqGgzw05K8YQj1SNJWsfjYC0a2rGUnHTqyZUkzme0e+m1JXpZk2/7vZcCaYRYmSZJmb7aB/irgJcAPgBXAbwMOlJMkaY6YbZf724Ejq+qHAEkeAbybLuglSdKYzXYP/cmTYQ5QVWuBpwynJEmStKlmG+jbJNl18kq/hz7bvXtJkjRksw3l9wBfSvJJulO+vgQ4cWhVSZKkTTLbM8WdkWQp3Q+yBPitqrp2qJVJkqRZm3W3eR/ghrgkSXPQZv18qiRJmlsMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqwMjPx55kP+DsgabHA38B7AK8Bljdt7+lqi4cbXWSJM1PIw/0qvoWcCBAkm2BW4Dz6H5f/b1V9e5R1yRJ0nw37i73ZwE3VtX3xlyHJEnz2rgD/XDgrIHrxyS5Ksmpgz/XOijJUUmWJlm6evXq6SaRJGnBGVugJ3kQ8ALgn/umfwD2oeuOX0H3k60PUFUnV9WSqloyMTExilIlSZrzxrmH/hvA16pqJUBVrayq9VV1L/Bh4KAx1iZJ0rwyzkA/goHu9iS7D9z2IuDqkVckSdI8NfJR7gBJHgo8B3jtQPNfJzkQKGDZlNskSdIGjCXQq+pHwCOntL18HLVIktSCcY9ylyRJW4GBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAWP5HrratvjYC8ZdgiQtOO6hS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQHbjWOhSZYBdwLrgXVVtSTJI4CzgcXAMuAlVfXDcdQnSZti8bEXjGxZy046dGTL0vwyzj30X6uqA6tqSX/9WOCSqtoXuKS/LkmSZmEudbkfBpzeXz4deOH4SpEkaX4ZV6AXcFGSK5Ic1bc9uqpWAPT/HzWm2iRJmnfGcgwd+JWqujXJo4CLk1w/2zv2HwCOAli0aNGw6pMkaV4Zyx56Vd3a/18FnAccBKxMsjtA/3/VDPc9uaqWVNWSiYmJUZUsSdKcNvJAT7Jjkp0mLwO/DlwNnA8c2U92JPCpUdcmSdJ8NY4u90cD5yWZXP6ZVfV/k3wVOCfJq4HvAy8eQ22SJM1LIw/0qvou8IvTtK8BnjXqeiRJasFc+tqaJEnaTAa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGbDfuAjQai4+9YNwlSJKGyD10SZIaYKBLktQAA12SpAYY6JIkNWDkgZ5k7ySfT3JdkmuSvL5vPz7JLUmu7P+eN+raJEmar8Yxyn0d8Maq+lqSnYArklzc3/beqnr3GGqSJGleG3mgV9UKYEV/+c4k1wF7jroOSZJaMtZj6EkWA08Bvtw3HZPkqiSnJtl1fJVJkjS/jO3EMkkeBpwLvKGq7kjyD8Dbger/vwd41TT3Owo4CmDRokWjK1iS5oBRniRq2UmHjmxZ2nJj2UNPsj1dmH+8qv4FoKpWVtX6qroX+DBw0HT3raqTq2pJVS2ZmJgYXdGSJM1h4xjlHuAU4Lqq+puB9t0HJnsRcPWoa5Mkab4aR5f7rwAvB76Z5Mq+7S3AEUkOpOtyXwa8dgy1SZI0L41jlPsXgUxz04WjrkWSpFZ4pjhJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDtht3AQvZ4mMvGHcJkjSjUb5HLTvp0JEtq1XuoUuS1AADXZKkBhjokiQ1wECXJKkBDoqbwoFqkqT5yD10SZIaYKBLktQAA12SpAZ4DF2SNHaexGbLuYcuSVIDDHRJkhow57rckxwCvB/YFvinqjppzCVJkhrSavf+nNpDT7It8PfAbwD7A0ck2X+8VUmSNPfNqUAHDgJuqKrvVtX/Az4BHDbmmiRJmvPmWqDvCdw8cH153yZJkjZgrh1DzzRtdb8JkqOAo/qrdyX51mYsZzfgts2433y3UNcbXHfXfeFx3eeAvHMos33sdI1zLdCXA3sPXN8LuHVwgqo6GTh5SxaSZGlVLdmSecxHC3W9wXV33Rce133hrftc63L/KrBvkscleRBwOHD+mGuSJGnOm1N76FW1LskxwL/TfW3t1Kq6ZsxlSZI0582pQAeoqguBC4e8mC3qsp/HFup6g+u+ULnuC9OCXPdU1cankiRJc9pcO4YuSZI2w4IM9CRvT3JVkiuTXJRkj3HXNCpJ3pXk+n79z0uyy7hrGpUkL05yTZJ7kyyIEbBJDknyrSQ3JDl23PWMSpJTk6xKcvW4axm1JHsn+XyS6/rn++vHXdOoJHlwkq8k+Ua/7ieMu6ZRWpBd7kl2rqo7+st/DOxfVUePuayRSPLrwOf6AYjvBKiqN425rJFI8gvAvcA/Av+7qpaOuaSh6k+l/G3gOXRfCf0qcERVXTvWwkYgyTOAu4AzquqAcdczSkl2B3avqq8l2Qm4AnjhAnncA+xYVXcl2R74IvD6qrp8zKWNxILcQ58M896OTDl5Tcuq6qKqWtdfvZzuu/4LQlVdV1WbcyKi+WrBnkq5qi4D1o67jnGoqhVV9bX+8p3AdSyQM25W567+6vb934J5f1+QgQ6Q5MQkNwMvBf5i3PWMyauAz4y7CA2Np1Je4JIsBp4CfHnMpYxMkm2TXAmsAi6uqgWz7s0GepLPJrl6mr/DAKrqrVW1N/Bx4JjxVrt1bWzd+2neCqyjW/9mzGbdF5CNnkpZ7UryMOBc4A1TeiWbVlXrq+pAut7Hg5IsmEMuc+576FtLVT17lpOeCVwAHDfEckZqY+ue5Ejg+cCzqrFBFJvwuC8EGz2VstrUHz8+F/h4Vf3LuOsZh6q6PckXgEOABTE4stk99A1Jsu/A1RcA14+rllFLcgjwJuAFVfWjcdejofJUygtQPzDsFOC6qvqbcdczSkkmJr+5k+QhwLNZSO/vje2gzUqSc4H96EY8fw84uqpuGW9Vo5HkBmAHYE3fdPkCGuH/IuADwARwO3BlVT13rEUNWZLnAe/jvlMpnzjeikYjyVnAwXS/urUSOK6qThlrUSOS5GnAfwDfpHuPA3hLfxbOpiV5MnA63fN9G+CcqnrbeKsanQUZ6JIktWZBdrlLktQaA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGvD/ASXV7gbDLnhwAAAAAElFTkSuQmCC", + "image/png": "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", "text/plain": [ "
" ] @@ -948,7 +948,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Next, we show the graph using `dprint`." + "Next, we show the graph using {func}`~aesara.dprint`." ] }, { @@ -961,7 +961,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -971,7 +971,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 25, @@ -1000,7 +1000,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We *could* sample by calling `.eval()` on the random variable." + "We *could* sample by calling {meth}`~aesara.graph.basic.Variable.eval`. on the random variable." ] }, { @@ -1011,7 +1011,7 @@ { "data": { "text/plain": [ - "array(0.5382538)" + "array(1.81133377)" ] }, "execution_count": 26, @@ -1039,16 +1039,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: 0.5382538040144141\n", - "Sample 1: 0.5382538040144141\n", - "Sample 2: 0.5382538040144141\n", - "Sample 3: 0.5382538040144141\n", - "Sample 4: 0.5382538040144141\n", - "Sample 5: 0.5382538040144141\n", - "Sample 6: 0.5382538040144141\n", - "Sample 7: 0.5382538040144141\n", - "Sample 8: 0.5382538040144141\n", - "Sample 9: 0.5382538040144141\n" + "Sample 0: 1.8113337653988708\n", + "Sample 1: 1.8113337653988708\n", + "Sample 2: 1.8113337653988708\n", + "Sample 3: 1.8113337653988708\n", + "Sample 4: 1.8113337653988708\n", + "Sample 5: 1.8113337653988708\n", + "Sample 6: 1.8113337653988708\n", + "Sample 7: 1.8113337653988708\n", + "Sample 8: 1.8113337653988708\n", + "Sample 9: 1.8113337653988708\n" ] } ], @@ -1074,7 +1074,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1084,7 +1084,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 28, @@ -1101,7 +1101,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can try to generate samples by calling `.eval()` as above." + "We can try to generate samples by calling {meth}`~aesara.graph.basic.Variable.eval` as above." ] }, { @@ -1113,16 +1113,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: -0.7495880478667979\n", - "Sample 1: -0.7495880478667979\n", - "Sample 2: -0.7495880478667979\n", - "Sample 3: -0.7495880478667979\n", - "Sample 4: -0.7495880478667979\n", - "Sample 5: -0.7495880478667979\n", - "Sample 6: -0.7495880478667979\n", - "Sample 7: -0.7495880478667979\n", - "Sample 8: -0.7495880478667979\n", - "Sample 9: -0.7495880478667979\n" + "Sample 0: 0.967639977327951\n", + "Sample 1: 0.967639977327951\n", + "Sample 2: 0.967639977327951\n", + "Sample 3: 0.967639977327951\n", + "Sample 4: 0.967639977327951\n", + "Sample 5: 0.967639977327951\n", + "Sample 6: 0.967639977327951\n", + "Sample 7: 0.967639977327951\n", + "Sample 8: 0.967639977327951\n", + "Sample 9: 0.967639977327951\n" ] } ], @@ -1145,7 +1145,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1168,7 +1168,7 @@ "source": [ "Yay! We learned how to sample from a `pymc` distribution!\n", "\n", - "Finally, we can compare the `dprint` output for `x` and `y`:" + "Finally, we can compare the {func}`~aesara.dprint` output for `x` and `y`:" ] }, { @@ -1181,7 +1181,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1191,7 +1191,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 31, @@ -1220,7 +1220,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1230,7 +1230,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 32, @@ -1275,7 +1275,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1285,7 +1285,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 33, @@ -1349,7 +1349,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{(2,) of 0} [id E]\n", @@ -1359,7 +1359,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 35, @@ -1387,16 +1387,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [ 0.17727283 -1.3943496 ]\n", - "Sample 1: [ 0.17727283 -1.3943496 ]\n", - "Sample 2: [ 0.17727283 -1.3943496 ]\n", - "Sample 3: [ 0.17727283 -1.3943496 ]\n", - "Sample 4: [ 0.17727283 -1.3943496 ]\n", - "Sample 5: [ 0.17727283 -1.3943496 ]\n", - "Sample 6: [ 0.17727283 -1.3943496 ]\n", - "Sample 7: [ 0.17727283 -1.3943496 ]\n", - "Sample 8: [ 0.17727283 -1.3943496 ]\n", - "Sample 9: [ 0.17727283 -1.3943496 ]\n" + "Sample 0: [-1.074797 0.59792094]\n", + "Sample 1: [-1.074797 0.59792094]\n", + "Sample 2: [-1.074797 0.59792094]\n", + "Sample 3: [-1.074797 0.59792094]\n", + "Sample 4: [-1.074797 0.59792094]\n", + "Sample 5: [-1.074797 0.59792094]\n", + "Sample 6: [-1.074797 0.59792094]\n", + "Sample 7: [-1.074797 0.59792094]\n", + "Sample 8: [-1.074797 0.59792094]\n", + "Sample 9: [-1.074797 0.59792094]\n" ] } ], @@ -1421,16 +1421,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [-0.99735265 1.28871121]\n", - "Sample 1: [-1.35959858 -1.44060224]\n", - "Sample 2: [0.90484154 0.62712404]\n", - "Sample 3: [1.65203664 3.17555768]\n", - "Sample 4: [ 1.54672797 -0.98768775]\n", - "Sample 5: [ 1.20763861 -2.40080271]\n", - "Sample 6: [-0.48398172 1.75631166]\n", - "Sample 7: [-0.40868314 -1.66628623]\n", - "Sample 8: [0.78373334 1.36300401]\n", - "Sample 9: [-0.75710529 0.98851286]\n" + "Sample 0: [-0.00715442 -2.01755545]\n", + "Sample 1: [-0.72017144 -0.25377876]\n", + "Sample 2: [0.02248626 1.38408409]\n", + "Sample 3: [-1.50389119 1.07156804]\n", + "Sample 4: [-0.31258981 -1.70201925]\n", + "Sample 5: [-8.23054418e-04 -8.39810875e-01]\n", + "Sample 6: [ 0.32799993 -1.44083753]\n", + "Sample 7: [0.06504259 0.90254007]\n", + "Sample 8: [ 1.40671407 -1.28377409]\n", + "Sample 9: [ 0.61141428 -0.4162315 ]\n" ] } ], @@ -1446,7 +1446,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1495,7 +1495,7 @@ " $$" ], "text/plain": [ - "" + "" ] }, "execution_count": 39, @@ -1691,7 +1691,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 45, @@ -1714,7 +1714,7 @@ { "data": { "text/plain": [ - "array([-0.3553317 , 0.64382698, -1.02454636])" + "array([-2.11561477e+00, -2.08360829e-03, -8.27581908e-01])" ] }, "execution_count": 46, From 490186d76e48d118c32962fb7764a9f68c05f645 Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Mon, 6 Jun 2022 14:17:08 +0200 Subject: [PATCH 25/30] more formating and final comments --- .../learn/core_notebooks/pymc_aesara.ipynb | 407 ++++++++---------- 1 file changed, 184 insertions(+), 223 deletions(-) diff --git a/docs/source/learn/core_notebooks/pymc_aesara.ipynb b/docs/source/learn/core_notebooks/pymc_aesara.ipynb index eebc39a50c..a9b68f7a56 100644 --- a/docs/source/learn/core_notebooks/pymc_aesara.ipynb +++ b/docs/source/learn/core_notebooks/pymc_aesara.ipynb @@ -26,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 52, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -192,7 +192,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -257,7 +257,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**Remark:** Sometimes we just want to debug, we can use `eval` for that:" + ":::{tip}\n", + "Sometimes we just want to debug, we can use {meth}`~aesara.graph.basic.Variable.eval` for that:\n", + ":::" ] }, { @@ -345,7 +347,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 10, @@ -389,7 +391,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -427,7 +429,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 12, @@ -593,7 +595,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 15, @@ -647,7 +649,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "As a simple example, let's add an `exp` before the `log` (to get the identity function)." + "As a simple example, let's add an {func}`~aesara.tensor.exp` before the {func}`~aesara.tensor.log` (to get the identity function)." ] }, { @@ -687,7 +689,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 18, @@ -732,7 +734,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 19, @@ -792,7 +794,9 @@ "id": "JhmIBByY6T9h" }, "source": [ - "**Remark:** Again, note that `aesara` is clever enough to omit the `exp` and `log` once we compile the function." + ":::{note}\n", + "Again, note that `aesara` is clever enough to omit the `exp` and `log` once we compile the function.\n", + ":::" ] }, { @@ -819,7 +823,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 21, @@ -879,7 +883,7 @@ "\n", "Now that we have seen aesara's basics we want to move in the direction of random variables.\n", "\n", - "How do we generate random numbers in `numpy`? To illustrate it we can sample from a normal distribution:" + "How do we generate random numbers in [`numpy`](https://github.com/numpy/numpy)? To illustrate it we can sample from a normal distribution:" ] }, { @@ -895,7 +899,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -961,7 +965,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -971,7 +975,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 25, @@ -1011,7 +1015,7 @@ { "data": { "text/plain": [ - "array(1.81133377)" + "array(1.79154375)" ] }, "execution_count": 26, @@ -1039,16 +1043,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: 1.8113337653988708\n", - "Sample 1: 1.8113337653988708\n", - "Sample 2: 1.8113337653988708\n", - "Sample 3: 1.8113337653988708\n", - "Sample 4: 1.8113337653988708\n", - "Sample 5: 1.8113337653988708\n", - "Sample 6: 1.8113337653988708\n", - "Sample 7: 1.8113337653988708\n", - "Sample 8: 1.8113337653988708\n", - "Sample 9: 1.8113337653988708\n" + "Sample 0: 1.7915437473961466\n", + "Sample 1: 1.7915437473961466\n", + "Sample 2: 1.7915437473961466\n", + "Sample 3: 1.7915437473961466\n", + "Sample 4: 1.7915437473961466\n", + "Sample 5: 1.7915437473961466\n", + "Sample 6: 1.7915437473961466\n", + "Sample 7: 1.7915437473961466\n", + "Sample 8: 1.7915437473961466\n", + "Sample 9: 1.7915437473961466\n" ] } ], @@ -1074,7 +1078,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1084,7 +1088,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 28, @@ -1097,6 +1101,13 @@ "aesara.dprint(x)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Observe that `x` is just a normal `RandomVariable` and which is the same as `y` except for the `rng`." + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -1113,16 +1124,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: 0.967639977327951\n", - "Sample 1: 0.967639977327951\n", - "Sample 2: 0.967639977327951\n", - "Sample 3: 0.967639977327951\n", - "Sample 4: 0.967639977327951\n", - "Sample 5: 0.967639977327951\n", - "Sample 6: 0.967639977327951\n", - "Sample 7: 0.967639977327951\n", - "Sample 8: 0.967639977327951\n", - "Sample 9: 0.967639977327951\n" + "Sample 0: 1.0803155077675022\n", + "Sample 1: 1.0803155077675022\n", + "Sample 2: 1.0803155077675022\n", + "Sample 3: 1.0803155077675022\n", + "Sample 4: 1.0803155077675022\n", + "Sample 5: 1.0803155077675022\n", + "Sample 6: 1.0803155077675022\n", + "Sample 7: 1.0803155077675022\n", + "Sample 8: 1.0803155077675022\n", + "Sample 9: 1.0803155077675022\n" ] } ], @@ -1135,7 +1146,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "As before we get the same value for all iterations. The correct way to generate random samples is using `pm.draw`." + "As before we get the same value for all iterations. The correct way to generate random samples is using {func}`~pymc.draw`." ] }, { @@ -1145,7 +1156,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfQAAAF1CAYAAAAeOhj3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAeo0lEQVR4nO3de5RkZX3u8e/DRVTkGlrlNg4gIUE0eJxFzknUEC+ReIy3FQ1EDV4ikkiiKybHa+Kgkmi8R2MMBgRUUCIhmkhOIKgQY1AHROSqIKMMjDPDjFxVjjP8zh97N9Q03TM9PVNd3W9/P2vVmqq3du3927uq5qn33W9XpaqQJEnz23ajLkCSJG09A12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAga45IcnSJJ/cxutMko8n+VGSr2/LdS8kSV6a5CtbsPzyJE/rr78pyT9sw1ruSnJgf/20JO/Yhuv+aJI/31br21rb+tipfTuMugCNVpInAn8NPAbYAFwDvLaqvjHSwraNJwJPB/arqrtHXcxCVFV/OZ3lknwZ+GRVbTLAquph26KuJC8Ffr+qnjiw7uO3xbq3lekeO2mcgb6AJdkV+FfgD4CzgQcBTwLuGWVd29CjgOVThXmSHapq/SzXNHQt7leL+yRtaw65L2w/D1BVZ1XVhqr6SVWdX1VXACQ5KMkXk6xNcmuSTyXZffzB/dDqnyW5IsndSU5J8ogk/5bkziT/kWSPftnFSSrJcUluSbIyyeumKizJ/0zy1SS3JflWkiMH7ntpku/127gxyYsmefwrgH8A/lc/THtikiOTrEjy+iQ/BD6eZKckH+hruqW/vlO/jvHl/0+S1X3Nz03yzCTfSbIuyZs2sQ//O8k3k9yR5KYkSzex7Pi2XjewrZcN3L9bkjOSrEny/SRvSbLdwPH4ryTvT7IOWNoPR3+kfy7u6u9/ZL9/P0pybZLHD6z/DUlu6I/p1UmeN1Wtk9T+kr6mtUnePOG++06lJHlwkk/2y92W5Bv96+Ukug+SH+5r/XC/fCV5dZLvAt8daHv0wCb2SnJBX/dFSR7VLzf+etthoJYvJ/n9JL8IfJT7Xxu39fdvNISf5JVJru+f588n2WfgvkpyfJLv9sfzb5NkiuMzcb1HJlkxcPv1SW7u9+G6JE+d5NiN78+xSX6Q7v345oF1PCTJ6X0t1/Sv2RVMoV/XH6d7H92a5N1Jtkv3fliX5LEDyz48yU+SjGUL3xNJtk936mD8tXVpkv2nqktbqaq8LNALsCuwFjgd+E1gjwn3P5puyHonYAy4GPjAwP3LgUuARwD7AquBy4DH94/5IvDWftnFQAFnATsDjwXWAE/r719KN+RKv661wDPpPnQ+vb891j/2DuCQftm9gcdMsX8vBb4ycPtIYD3wrr6+hwBv6/fh4f36vwq8fcLyfwHsCLyyr/lMYBe60xQ/BQ6cYvtH9vu5HfA4YBXw3E0su76vZ8d+3388/pwAZwCf67e7GPgO8IqB/VwP/BHdqNtDgNOAW4EnAA/un4sbgd8DtgfeAXxpYPsvAPbpa/0d4G5g78mO44S6DwXuAp7cH9P39bVM9ry+CvgX4KF9DU8Adu3v+zLdEPjgugu4ANgTeMhA26P766cBdw5s+4PjdXL/622HgfXdt43J9qlf3zv660/pj9//6Nf9IeDiCbX9K7A7sIjudXHUFMfovvUOPNcr+uuHADcB+wzUfdAkx258fz7WP7+/RDeS9ov9/e8ELgL2APYDrhjfxhQ1FfCl/tguons9jR+bjwDvGlj2NcC/zOQ9AfwZ8O1+P9PX/XOj/r+v1Ys99AWsqu6gO888/h/Fmr4n8oj+/uur6oKquqeq1tD9Z/1rE1bzoapaVVU3A/8JfK2qvllV9wDn0oX7oBOr6u6q+jbwceCYSUp7MXBeVZ1XVfdW1QXAMrqQA7gXOCzJQ6pqZVVdtQW7fS/dh4x7quonwIuAt1XV6n4fTwReMrD8z4CTqupnwKeBvYAPVtWd/XavogvrB6iqL1fVt/t9uILuw8zE4zfoZ30tP6uq8+iC8pAk29OF7Bv77S4H3juhzluq6kNVtb7fL4Bzq+rSqvop3XPx06o6o6o2AJ9h4Lmpqn+sqlv6Wj9D1yM+YjPHEuC3gX+tqov75/zP6Y7xVPv3c3SBvKGv7Y7NrP+vqmrdwD5N9IWBbb+Zrte9LXqALwJOrarL+nW/sV/34oFl3llVt1XVD+jC8fAZbGcD3QeGQ5PsWFXLq+qGTSx/YnUjad8CvkUXkAAvBP6yqn5UVSuAv5nGtt/VH9sfAB/g/vfi6cDvjo8A0b3OPjHwuC15T/w+8Jaquq4636qqtdOoTTNgoC9wVXVNVb20qvYDDqPrpX0A7htq+3Q/HHgH8Em6N++gVQPXfzLJ7YmTmG4auP79fnsTPQp4QT8se1s/JPpEuh7j3XThdjywMskXkvzC9PeYNX3Ajdunr2Oqmtb2ATi+P7D5fQQgyS8n+VK6YfLb+5onHr9Ba2vj88Q/7te9F938hol17jtwe/C4jpv2c5Pk95JcPnC8D9tMreP2Gdx2//xM9R/2J4B/Bz6d7vTGXyfZcTPrn2y/Jr2/qu4C1jH5a2pLbfS66Ne9lo2P+Q8Hro8/V1ukqq4HXkvXG1/dv982Vf9U29zoeWDzx23iMve97qvqa3QjNL/Wv7ceDXx+YNkteU/sD2zqA4q2IQNd96mqa+mGBw/rm/6Krvf+uKrala7nPOl5wi0w2HtaBNwyyTI3AZ+oqt0HLjtX1Tv7Ov+9qp5ON9x+Ld3ownRN/HnBW+g+QGyuppk4k+4/wv2raje687YzOX630vWKJtZ588DtGf9sYn/e+WPACXTDobsDVzK9Wlcy8JwmeShdL/wB+pGHE6vqUOBXgGfRnQLYVP2b26/BbT+Mbgj5FrpAgm54f9wjt2C9G70ukuxMt183T/mIqd29iTqoqjOrm23/qL6ud81gGyvphtrHTWeUYlPvxdPp3u8vAT474UPwlrgJOGiGj9UWMtAXsCS/kG4S1n797f3pht0u6RfZhW7Y97Yk+9KdD9taf57koUkeA7yMbuh3ok8Cv5XkGf2kmgf3k3H2SzeJ6tn9f7D39PVtmGQd03UW8JZ+ws9edOcGt9Xfw+8CrKuqnyY5Avjdmayk7w2dDZyUZJc+gP9kG9a5M12QrAFINxnvsE0+4n6fBZ6V5IlJHkQ3B2DS/1eS/HqSx/anEO6g+5Ay/tytAg6cQe3PHNj22+lO+dzUnz65GXhx/xp6ORsHyypgv/5xkzkTeFmSw9NNkvzLft3LZ1Dj5X2deyZ5JF2PHIAkhyR5Sr+Nn9L1bmfyej4beGOSPfr36gnTeMyf9cvvT3eefPC9+AngeXShfsYM6hn3D8DbkxyczuOSTPqBT1vPQF/Y7gR+GfhakrvpgvxKYHz2+Yl0k4JuB74A/NM22OZFwPXAhcB7qur8iQtU1U3Ac4A30YXMTXQfJrbrL6+j602sozsn/YdbUc876M7PX0E3eeeyvm1b+EPgbUnupPugcPZWrOuP6Hp63wO+Qhc4p251hUBVXU13Tv6/6YLuscB/TfOxVwGv7utZCfwImGp29SPpPgDcQfd9Bxdx/4eSDwK/3c/Sns7533FnAm+ley08ge7c97hX0r1u1tJN1vrqwH1fpDvX+8Mkt06yXxfSzQc4p9+vg4Cjt6CuQZ+gO9+9HDifjYNzJ7oJbbfSDac/nO51v6XeRnfcbwT+g+44b+7PTz8HXEr3geMLwCnjd/Tn4S+j+6D3nzOoZ9z76F7359M976fQTerTEKRqxiN10rT1k4luBHYs/55YGqokfwAcXVWTTsJMUsDB/Tn8qdZxKt1ky7cMqUxtY36xjCTNc0n2pjtl8d/AwXSjWB/eivUtBp7PA/9KRXOYQ+6SNP89CPh7utNoX6QbTv/ITFaU5O10p97eXVU3brMKNXQOuUuS1AB76JIkNcBAlySpAfN6Utxee+1VixcvHnUZkiTNmksvvfTWqhqb2D6vA33x4sUsW7Zs1GVIkjRrknx/snaH3CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGzOtfW5O0DSzdbRa3dfvsbUtaYOyhS5LUgKEFepJTk6xOcuVA22eSXN5flie5vG9fnOQnA/d9dFh1SZLUomEOuZ8GfBg4Y7yhqn5n/HqS9wKD4283VNXhQ6xHkqRmDS3Qq+riJIsnuy9JgBcCTxnW9iVJWkhGdQ79ScCqqvruQNsBSb6Z5KIkT5rqgUmOS7IsybI1a9YMv1JJkuaBUQX6McBZA7dXAouq6vHAnwBnJtl1sgdW1clVtaSqloyNjc1CqZIkzX2zHuhJdgCeD3xmvK2q7qmqtf31S4EbgJ+f7dokSZqvRtFDfxpwbVWtGG9IMpZk+/76gcDBwPdGUJskSfPSMP9s7Szgv4FDkqxI8or+rqPZeLgd4MnAFUm+BXwWOL6q1g2rNkmSWjPMWe7HTNH+0knazgHOGVYtkiS1zm+KkySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNWCHURcgaRJLdxt1BZLmGXvokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAUML9CSnJlmd5MqBtqVJbk5yeX955sB9b0xyfZLrkjxjWHVJktSiYfbQTwOOmqT9/VV1eH85DyDJocDRwGP6x3wkyfZDrE2SpKYMLdCr6mJg3TQXfw7w6aq6p6puBK4HjhhWbZIktWYU59BPSHJFPyS/R9+2L3DTwDIr+rYHSHJckmVJlq1Zs2bYtUqSNC/MdqD/HXAQcDiwEnhv355Jlq3JVlBVJ1fVkqpaMjY2NpQiJUmab2Y10KtqVVVtqKp7gY9x/7D6CmD/gUX3A26ZzdokSZrPZjXQk+w9cPN5wPgM+M8DRyfZKckBwMHA12ezNkmS5rMdhrXiJGcBRwJ7JVkBvBU4MsnhdMPpy4FXAVTVVUnOBq4G1gOvrqoNw6pNkqTWDC3Qq+qYSZpP2cTyJwEnDaseSZJa5jfFSZLUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDdhh1AVI88bS3UZdgSRNyR66JEkNMNAlSWqAgS5JUgMMdEmSGjC0QE9yapLVSa4caHt3kmuTXJHk3CS79+2Lk/wkyeX95aPDqkuSpBYNs4d+GnDUhLYLgMOq6nHAd4A3Dtx3Q1Ud3l+OH2JdkiQ1Z2iBXlUXA+smtJ1fVev7m5cA+w1r+5IkLSSjPIf+cuDfBm4fkOSbSS5K8qRRFSVJ0nw0ki+WSfJmYD3wqb5pJbCoqtYmeQLwz0keU1V3TPLY44DjABYtWjRbJUuSNKfNeqAnORZ4FvDUqiqAqroHuKe/fmmSG4CfB5ZNfHxVnQycDLBkyZKarbolbQOz+W17S2+fvW1Jc8CsDrknOQp4PfDsqvrxQPtYku376wcCBwPfm83aJEmaz4bWQ09yFnAksFeSFcBb6Wa17wRckATgkn5G+5OBtyVZD2wAjq+qdZOuWJIkPcDQAr2qjpmk+ZQplj0HOGdYtUiS1Dq/KU6SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQFDC/QkpyZZneTKgbY9k1yQ5Lv9v3sM3PfGJNcnuS7JM4ZVlyRJLRpmD/004KgJbW8ALqyqg4EL+9skORQ4GnhM/5iPJNl+iLVJktSUoQV6VV0MrJvQ/Bzg9P766cBzB9o/XVX3VNWNwPXAEcOqTZKk1uwwnYWSXFhVT91c2zQ8oqpWAlTVyiQP79v3BS4ZWG5F3zZZLccBxwEsWrRoCzcvacFYutssbuv22duWNIVN9tCTPDjJnsBeSfboz4HvmWQxsM82rCOTtNVkC1bVyVW1pKqWjI2NbcMSJEmavzbXQ38V8Fq68L6U+4P3DuBvZ7C9VUn27nvnewOr+/YVwP4Dy+0H3DKD9UuStCBtsodeVR+sqgOAP62qA6vqgP7yS1X14Rls7/PAsf31Y4HPDbQfnWSnJAcABwNfn8H6JUlakKZ1Dr2qPpTkV4DFg4+pqjOmekySs4Aj6YbrVwBvBd4JnJ3kFcAPgBf067kqydnA1cB64NVVtWEmOyRJ0kI03UlxnwAOAi4HxoO2gCkDvaqOmeKuSSfSVdVJwEnTqUeSJG1sWoEOLAEOrapJJ6pJkqTRmu7foV8JPHKYhUiSpJmbbg99L+DqJF8H7hlvrKpnD6UqSZK0RaYb6EuHWYQkSdo6053lftGwC5EkSTM33Vnud3L/N7c9CNgRuLuqdh1WYZIkafqm20PfZfB2kufij6dIkjRnzOjX1qrqn4GnbNtSJEnSTE13yP35Aze3o/u7dP8mXZKkOWK6s9x/a+D6emA53W+YS5KkOWC659BfNuxCJEnSzE3rHHqS/ZKcm2R1klVJzkmy37CLkyRJ0zPdSXEfp/uJ032AfYF/6dskSdIcMN1z6GNVNRjgpyV57RDqkbbM0t1GXYEkzQnT7aHfmuTFSbbvLy8G1g6zMEmSNH3TDfSXAy8EfgisBH4bcKKcJElzxHSH3N8OHFtVPwJIsifwHrqglyRJIzbdHvrjxsMcoKrWAY8fTkmSJGlLTTfQt0uyx/iNvoc+3d69JEkasumG8nuBryb5LN1Xvr4QOGloVUmSpC0y3W+KOyPJMrofZAnw/Kq6eqiVSZKkaZv2sHkf4Ia4JElz0Ix+PlWSJM0tBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgNm/TfNkxwCfGag6UDgL4DdgVcCa/r2N1XVebNbnSRJ89OsB3pVXQccDpBke+Bm4FzgZcD7q+o9s12TJEnz3aiH3J8K3FBV3x9xHZIkzWujDvSjgbMGbp+Q5IokpybZY1RFSZI034ws0JM8CHg28I99098BB9ENx68E3jvF445LsizJsjVr1ky2iCRJC84oe+i/CVxWVasAqmpVVW2oqnuBjwFHTPagqjq5qpZU1ZKxsbFZLFeSpLlrlIF+DAPD7Un2HrjvecCVs16RJEnz1KzPcgdI8lDg6cCrBpr/OsnhQAHLJ9wnSZI2YSSBXlU/Bn5uQttLRlGLJEktGPUsd0mStA0Y6JIkNcBAlySpAQa6JEkNGMmkOElqytLdZnFbt8/etjSv2EOXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktSAHUax0STLgTuBDcD6qlqSZE/gM8BiYDnwwqr60SjqkyRpvhllD/3Xq+rwqlrS334DcGFVHQxc2N+WJEnTMJeG3J8DnN5fPx147uhKkSRpfhlVoBdwfpJLkxzXtz2iqlYC9P8+fES1SZI074zkHDrwq1V1S5KHAxckuXa6D+w/ABwHsGjRomHVJ0nSvDKSHnpV3dL/uxo4FzgCWJVkb4D+39VTPPbkqlpSVUvGxsZmq2RJkua0WQ/0JDsn2WX8OvAbwJXA54Fj+8WOBT4327VJkjRfjWLI/RHAuUnGt39mVf3fJN8Azk7yCuAHwAtGUJskSfPSrAd6VX0P+KVJ2tcCT53teiRJasGoJsWpZUt3G3UFkrTgzKW/Q5ckSTNkoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkN8OdTJWk+mc2fJ156++xtS1vNHrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAQa6JEkNMNAlSWqAgS5JUgMMdEmSGmCgS5LUAANdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDZj3Qk+yf5EtJrklyVZLX9O1Lk9yc5PL+8szZrk2SpPlqhxFscz3wuqq6LMkuwKVJLujve39VvWcENUmSNK/NeqBX1UpgZX/9ziTXAPvOdh2SJLVkpOfQkywGHg98rW86IckVSU5NsscUjzkuybIky9asWTNbpUqSNKeNLNCTPAw4B3htVd0B/B1wEHA4XQ/+vZM9rqpOrqolVbVkbGxstsqVJGlOG0mgJ9mRLsw/VVX/BFBVq6pqQ1XdC3wMOGIUtUmSNB+NYpZ7gFOAa6rqfQPtew8s9jzgytmuTZKk+WoUs9x/FXgJ8O0kl/dtbwKOSXI4UMBy4FUjqE2SpHlpFLPcvwJkkrvOm+1aJElqhd8UJ0lSA0Yx5K5RWLrbqCuQJA2RPXRJkhpgoEuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktQAA12SpAYY6JIkNcBAlySpAf7a2kSz+atkS2+fvW1JkppmD12SpAbYQx8lf6NckrSN2EOXJKkB9tAlSZNzTtG8Yg9dkqQGGOiSJDXAQJckqQEGuiRJDXBSnCRp9JyAt9XsoUuS1AADXZKkBhjokiQ1wECXJKkBBrokSQ0w0CVJaoCBLklSAwx0SZIaYKBLktSAORfoSY5Kcl2S65O8YdT1SJI0H8ypQE+yPfC3wG8ChwLHJDl0tFVJkjT3zbXvcj8CuL6qvgeQ5NPAc4CrR1qVJKkdjX5v/JzqoQP7AjcN3F7Rt0mSpE2Yaz30TNJWGy2QHAcc19+8K8l101z3XsCtW1FbazweG/N4PJDHZGMej415PB7ogcfkxMlibas9arLGuRboK4D9B27vB9wyuEBVnQycvKUrTrKsqpZsXXnt8HhszOPxQB6TjXk8NubxeKBRH5O5NuT+DeDgJAckeRBwNPD5EdckSdKcN6d66FW1PskJwL8D2wOnVtVVIy5LkqQ5b04FOkBVnQecN4RVb/EwfeM8HhvzeDyQx2RjHo+NeTweaKTHJFW1+aUkSdKcNtfOoUuSpBlYMIGe5O1JrkhyeZLzk+wz6ppGLcm7k1zbH5dzk+w+6ppGKckLklyV5N4kC3b2rl+/vLEkpyZZneTKUdcyFyTZP8mXklzTv19eM+qaRinJg5N8Pcm3+uNx4shqWShD7kl2rao7+ut/DBxaVcePuKyRSvIbwBf7yYjvAqiq14+4rJFJ8ovAvcDfA39aVctGXNKs679++TvA0+n+jPQbwDFVtWC/rTHJk4G7gDOq6rBR1zNqSfYG9q6qy5LsAlwKPHehvkaSBNi5qu5KsiPwFeA1VXXJbNeyYHro42He25kJX1izEFXV+VW1vr95Cd3f/S9YVXVNVU33i4padd/XL1fV/wPGv355waqqi4F1o65jrqiqlVV1WX/9TuAaFvA3elbnrv7mjv1lJPmyYAIdIMlJSW4CXgT8xajrmWNeDvzbqIvQyPn1y5q2JIuBxwNfG3EpI5Vk+ySXA6uBC6pqJMejqUBP8h9Jrpzk8hyAqnpzVe0PfAo4YbTVzo7NHZN+mTcD6+mOS9OmczwWuM1+/bIEkORhwDnAayeMgC44VbWhqg6nG+U8IslITs3Mub9D3xpV9bRpLnom8AXgrUMsZ07Y3DFJcizwLOCptQAmVGzBa2Sh2uzXL0v9ueJzgE9V1T+Nup65oqpuS/Jl4Chg1idRNtVD35QkBw/cfDZw7ahqmSuSHAW8Hnh2Vf141PVoTvDrl7VJ/SSwU4Brqup9o65n1JKMjf+FUJKHAE9jRPmykGa5nwMcQjeL+fvA8VV182irGq0k1wM7AWv7pksW8sz/JM8DPgSMAbcBl1fVM0Za1AgkeSbwAe7/+uWTRlvRaCU5CziS7pe0VgFvrapTRlrUCCV5IvCfwLfp/j8FeFP/LZ8LTpLHAafTvV+2A86uqreNpJaFEuiSJLVswQy5S5LUMgNdkqQGGOiSJDXAQJckqQEGuiRJDTDQJUlqgIEuSVIDDHRJkhrw/wF3NfetLzVbGAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -1166,87 +1177,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Yay! We learned how to sample from a `pymc` distribution!\n", - "\n", - "Finally, we can compare the {func}`~aesara.dprint` output for `x` and `y`:" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", - " |TensorConstant{[]} [id C]\n", - " |TensorConstant{11} [id D]\n", - " |TensorConstant{0} [id E]\n", - " |TensorConstant{1.0} [id F]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "aesara.dprint(x)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Remark:** Observe that `x.owner` and `y.owner` are the same (aside from the generator itself)." - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y'\n", - " |RandomGeneratorSharedVariable() [id B]\n", - " |TensorConstant{[]} [id C]\n", - " |TensorConstant{11} [id D]\n", - " |TensorConstant{0} [id E]\n", - " |TensorConstant{1} [id F]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "aesara.dprint(y)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "They look the same (except from the random seed)! " + "Yay! We learned how to sample from a `pymc` distribution!" ] }, { @@ -1267,7 +1198,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 31, "metadata": {}, "outputs": [ { @@ -1275,7 +1206,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1285,10 +1216,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 33, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -1309,7 +1240,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 32, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1324,7 +1255,7 @@ "[z]" ] }, - "execution_count": 34, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -1335,7 +1266,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 33, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1349,7 +1280,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{(2,) of 0} [id E]\n", @@ -1359,10 +1290,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 35, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -1375,28 +1306,28 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can try to sample via `.eval` as above and it is no surprise that we are getting the same samples at each iteration." + "We can try to sample via {meth}`~aesara.graph.basic.Variable.eval` as above and it is no surprise that we are getting the same samples at each iteration." ] }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [-1.074797 0.59792094]\n", - "Sample 1: [-1.074797 0.59792094]\n", - "Sample 2: [-1.074797 0.59792094]\n", - "Sample 3: [-1.074797 0.59792094]\n", - "Sample 4: [-1.074797 0.59792094]\n", - "Sample 5: [-1.074797 0.59792094]\n", - "Sample 6: [-1.074797 0.59792094]\n", - "Sample 7: [-1.074797 0.59792094]\n", - "Sample 8: [-1.074797 0.59792094]\n", - "Sample 9: [-1.074797 0.59792094]\n" + "Sample 0: [-0.9712932 1.68009545]\n", + "Sample 1: [-0.9712932 1.68009545]\n", + "Sample 2: [-0.9712932 1.68009545]\n", + "Sample 3: [-0.9712932 1.68009545]\n", + "Sample 4: [-0.9712932 1.68009545]\n", + "Sample 5: [-0.9712932 1.68009545]\n", + "Sample 6: [-0.9712932 1.68009545]\n", + "Sample 7: [-0.9712932 1.68009545]\n", + "Sample 8: [-0.9712932 1.68009545]\n", + "Sample 9: [-0.9712932 1.68009545]\n" ] } ], @@ -1409,28 +1340,28 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Again, the correct way of sampling is via `pm.draw`. " + "Again, the correct way of sampling is via {func}`~pymc.draw`. " ] }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [-0.00715442 -2.01755545]\n", - "Sample 1: [-0.72017144 -0.25377876]\n", - "Sample 2: [0.02248626 1.38408409]\n", - "Sample 3: [-1.50389119 1.07156804]\n", - "Sample 4: [-0.31258981 -1.70201925]\n", - "Sample 5: [-8.23054418e-04 -8.39810875e-01]\n", - "Sample 6: [ 0.32799993 -1.44083753]\n", - "Sample 7: [0.06504259 0.90254007]\n", - "Sample 8: [ 1.40671407 -1.28377409]\n", - "Sample 9: [ 0.61141428 -0.4162315 ]\n" + "Sample 0: [ 1.67761249 -1.75074301]\n", + "Sample 1: [-0.17103485 -0.24963938]\n", + "Sample 2: [ 1.21497342 -1.46996431]\n", + "Sample 3: [ 0.06999866 -0.36270505]\n", + "Sample 4: [-1.70776477 2.6518159 ]\n", + "Sample 5: [0.14292995 2.22215584]\n", + "Sample 6: [0.54832333 0.82061403]\n", + "Sample 7: [-1.48899591 0.44023316]\n", + "Sample 8: [-0.18011286 0.61887644]\n", + "Sample 9: [ 1.09410457 -0.6002905 ]\n" ] } ], @@ -1441,12 +1372,12 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 36, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1482,7 +1413,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 37, "metadata": {}, "outputs": [ { @@ -1495,10 +1426,10 @@ " $$" ], "text/plain": [ - "" + "" ] }, - "execution_count": 39, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -1511,101 +1442,137 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can get the initial point of the model by simply calling the `initial_point` method:" + "Let us print the graph computing the elemwise log-probability of the model (via the method {meth}`~pymc.Model.logpt`)." ] }, { "cell_type": "code", - "execution_count": 40, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "mgntEABvQyhu", - "outputId": "319b8e86-388a-4ca5-bd3e-c27a24dd306c" - }, + "execution_count": 38, + "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sum{acc_dtype=float64} [id A] '__logp'\n", + " |MakeVector{dtype='float64'} [id B]\n", + " |Sum{acc_dtype=float64} [id C]\n", + " |Elemwise{mul,no_inplace} [id D]\n", + " |Check{sigma > 0} [id E] 'z_logprob'\n", + " | |Elemwise{sub,no_inplace} [id F]\n", + " | | |Elemwise{sub,no_inplace} [id G]\n", + " | | | |Elemwise{mul,no_inplace} [id H]\n", + " | | | | |InplaceDimShuffle{x} [id I]\n", + " | | | | | |TensorConstant{-0.5} [id J]\n", + " | | | | |Elemwise{pow,no_inplace} [id K]\n", + " | | | | |Elemwise{true_div,no_inplace} [id L]\n", + " | | | | | |Elemwise{sub,no_inplace} [id M]\n", + " | | | | | | |z [id N]\n", + " | | | | | | |TensorConstant{(2,) of 0} [id O]\n", + " | | | | | |TensorConstant{[1. 2.]} [id P]\n", + " | | | | |InplaceDimShuffle{x} [id Q]\n", + " | | | | |TensorConstant{2} [id R]\n", + " | | | |InplaceDimShuffle{x} [id S]\n", + " | | | |Elemwise{log,no_inplace} [id T]\n", + " | | | |Elemwise{sqrt,no_inplace} [id U]\n", + " | | | |TensorConstant{6.283185307179586} [id V]\n", + " | | |Elemwise{log,no_inplace} [id W]\n", + " | | |TensorConstant{[1. 2.]} [id P]\n", + " | |All [id X]\n", + " | |Elemwise{gt,no_inplace} [id Y]\n", + " | |TensorConstant{[1. 2.]} [id P]\n", + " | |InplaceDimShuffle{x} [id Z]\n", + " | |TensorConstant{0.0} [id BA]\n", + " |InplaceDimShuffle{x} [id BB]\n", + " |TensorConstant{1.0} [id BC]\n" + ] + }, { "data": { "text/plain": [ - "{'z': array([0., 0.])}" + "" ] }, - "execution_count": 40, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "point = model.initial_point()\n", - "point" + "aesara.dprint(model.logpt())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We can compute the log probability for this point in this model:" + "Observe that , as explained at the beginning, there has been no computation yet. The actual computation is performed after compiling and passing the input. To do so, let's take as input example the initial point of the model, which can be obtaining by using the {meth}`~pymc.Model.initial_point` method." ] }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 39, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "d3MpBiUlSVGT", - "outputId": "bdf43dff-e5b5-4699-b0b5-b8d0602b2064" + "id": "mgntEABvQyhu", + "outputId": "319b8e86-388a-4ca5-bd3e-c27a24dd306c" }, "outputs": [ { "data": { "text/plain": [ - "{'z': -2.53}" + "{'z': array([0., 0.])}" ] }, - "execution_count": 41, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "model.point_logps(point=point)" + "point = model.initial_point()\n", + "point" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "This is nothing else than evaluating the log probability of a normal distribution." + "We can compute the log probability for this point in this model using the {meth}`~pymc.Model.compile_logp` method. " ] }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "-2.5310242469692907" + "array(-2.53102425)" ] }, - "execution_count": 42, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "scipy.stats.multivariate_normal.logpdf(\n", - " x=np.array([0, 0]), mean=np.array([0, 0]), cov=np.array([[1, 0], [0, 2**2]])\n", - ")" + "model.compile_logp()(point)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is nothing else than evaluating the log probability of a normal distribution." ] }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 41, "metadata": {}, "outputs": [ { @@ -1614,7 +1581,7 @@ "-2.5310242469692907" ] }, - "execution_count": 43, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -1627,12 +1594,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**Remark:** There is a handy PyMC function to compute the log probability of a random variable and a given point." + ":::{tip}\n", + "There is a handy PyMC function to compute the log probability of a random variable and a given point, {func}`~pm.distributions.logprob.logp` (and similarly {func}`~pm.distributions.logprob.logcdf`)." ] }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 42, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1647,7 +1615,7 @@ "array(-2.53102425)" ] }, - "execution_count": 44, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -1657,15 +1625,6 @@ "pm.logp(rv=z, value=point[\"z\"]).sum().eval()" ] }, - { - "cell_type": "markdown", - "metadata": { - "id": "yxG5UHslGDEv" - }, - "source": [ - "**Remark:** A similar strategy is used for `logcdf`." - ] - }, { "cell_type": "markdown", "metadata": { @@ -1674,12 +1633,12 @@ "source": [ "### What are value variables and why are they important?\n", "\n", - "As he have seen above, a `logp` graph does not have random variables. Instead it's defined in terms of input (value) variables. When we want to sample, each random variable (RV) is replaced by a respective input (value) variable. Let's see how this works through some examples. RV and value variables can be observed in these `scipy` operations:" + "As he have seen above, a `logp` graph does not have random variables. Instead it's defined in terms of input (value) variables. When we want to sample, each random variable (RV) is replaced by a respective input (value) variable. Let's see how this works through some examples. RV and value variables can be observed in these [`scipy`](https://github.com/scipy/scipy) operations:" ] }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 43, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1691,10 +1650,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 45, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -1708,16 +1667,16 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([-2.11561477e+00, -2.08360829e-03, -8.27581908e-01])" + "array([ 0.07295099, 0.069974 , -0.07544367])" ] }, - "execution_count": 46, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } @@ -1729,7 +1688,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 45, "metadata": {}, "outputs": [ { @@ -1738,7 +1697,7 @@ "-1.7001885332046727" ] }, - "execution_count": 47, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } @@ -1757,7 +1716,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 46, "metadata": { "id": "dejQBR2FUnM3" }, @@ -1778,7 +1737,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 47, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1793,7 +1752,7 @@ "{mu: mu, sigma: sigma_log__, x: x}" ] }, - "execution_count": 49, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -1811,7 +1770,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 48, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1826,7 +1785,7 @@ "[mu, sigma_log__, x]" ] }, - "execution_count": 50, + "execution_count": 48, "metadata": {}, "output_type": "execute_result" } @@ -1844,7 +1803,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 49, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1859,7 +1818,7 @@ "array([ -1.61208571, -11.32440364, 9.08106147])" ] }, - "execution_count": 51, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } @@ -1884,7 +1843,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 50, "metadata": {}, "outputs": [ { @@ -1911,19 +1870,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**Remark:** For `sigma_log_value` we add the $-10$ term for the `scipy` and `aesara` to match because of the jacobian." + ":::{Note}\n", + "For `sigma_log_value` we add the $-10$ term for the `scipy` and `aesara` to match because of the jacobian.\n", + ":::" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The method `compile_logp` is a helper that creates a compiled aesara function of the model `logp`, which takes a dictionary of `{value variable name : value}` as inputs:" + "The method {meth}`~pymc.Model.compile_logp` is a helper that creates a compiled aesara function of the model `logp`, which takes a dictionary of `{value variable name : value}` as inputs:" ] }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 51, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1938,7 +1899,7 @@ "[array(-1.61208571), array(-11.32440364), array(9.08106147)]" ] }, - "execution_count": 53, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } From 57634f77ad456104b2726fa333e7ef69f3a7d80d Mon Sep 17 00:00:00 2001 From: Ricardo Date: Mon, 6 Jun 2022 15:10:33 +0200 Subject: [PATCH 26/30] Present pm.logp before model utilities --- .../learn/core_notebooks/pymc_aesara.ipynb | 4253 +++++++++-------- 1 file changed, 2331 insertions(+), 1922 deletions(-) diff --git a/docs/source/learn/core_notebooks/pymc_aesara.ipynb b/docs/source/learn/core_notebooks/pymc_aesara.ipynb index a9b68f7a56..7bd58b27d0 100644 --- a/docs/source/learn/core_notebooks/pymc_aesara.ipynb +++ b/docs/source/learn/core_notebooks/pymc_aesara.ipynb @@ -1,1971 +1,2380 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "id": "JUC0Xac4JTNS" - }, - "source": [ - "(pymc_aesara)=\n", - "\n", - "# PyMC and Aesara\n", - "\n", - "**Authors:** [Ricardo Vieira](https://github.com/ricardoV94) and [Juan Orduz](https://juanitorduz.github.io/)\n", - "\n", - "In this notebook we want to give an introduction of how PyMC models translate to Aesara graphs. The purpose is not to give a detailed description of all [`aesara`](https://github.com/aesara-devs/aesara)'s capabilities but rather focus on the main concepts to understand its connection with PyMC. For a more detailed description of the project please refer to the official documentation." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prepare Notebook\n", - "\n", - "First import the required libraries." - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "8_jxfrmDwkLn", - "outputId": "b24046f8-0b21-478f-c376-29924fa2e243" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "# Aesara version: 2.6.6\n", - "# PyMC version: 4.0.0\n", - "\n" - ] - } - ], - "source": [ - "import aesara\n", - "import aesara.tensor as at\n", - "import pymc as pm\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "import scipy.stats\n", - "\n", - "\n", - "print(f\"\"\"\n", - "# Aesara version: {aesara.__version__}\n", - "# PyMC version: {pm.__version__}\n", - "\"\"\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ru2m_lFK7Atx" - }, - "source": [ - "## Introduction to Aesara\n", - "\n", - "We start by looking into `aesara`. According to their documentation\n", - "\n", - "> Aesara is a Python library that allows one to define, optimize, and efficiently evaluate mathematical expressions involving multi-dimensional arrays." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![aesara logo](https://raw.githubusercontent.com/aesara-devs/aesara/main/doc/images/aesara_logo_2400.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "tBEjewdS1s5z" - }, - "source": [ - "### A simple example\n", - "\n", - "To begin, we define some aesara tensors and show how to perform some basic operations." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "x type: TensorType(float64, ())\n", - "x name = x\n", - "---\n", - "y type: TensorType(float64, (None,))\n", - "y name = y\n", - "\n" - ] - } - ], - "source": [ - "x = at.scalar(name=\"x\")\n", - "y = at.vector(name=\"y\")\n", - "\n", - "print(f\"\"\"\n", - "x type: {x.type}\n", - "x name = {x.name}\n", - "---\n", - "y type: {y.type}\n", - "y name = {y.name}\n", - "\"\"\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now that we have defined the `x` and `y` tensors, we can create a new one by adding them together." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "id": "jApxApHT1rmq" - }, - "outputs": [], - "source": [ - "z = x + y\n", - "z.name = \"x + y\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To make the computation a bit more complex let us take the logarithm of the resulting tensor." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "w = at.log(z)\n", - "w.name = \"log(x + y)\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can use the {func}`~aesara.dprint` function to print the computational graph of any given tensor." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "_QZRx-CB24l6", - "outputId": "404e3654-2e91-4090-bb2f-4bb13115abed" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Elemwise{log,no_inplace} [id A] 'log(x + y)'\n", - " |Elemwise{add,no_inplace} [id B] 'x + y'\n", - " |InplaceDimShuffle{x} [id C]\n", - " | |x [id D]\n", - " |y [id E]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "aesara.dprint(obj=w)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note that this graph does not do any computation (yet!). It is simply defining the sequence of steps to be done. We can use {func}`~aesara.function` to define a callable object so that we can push values trough the graph." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "-XtR1jZS13_6", - "outputId": "e101c9f0-7640-4fd0-aa6b-f8ba2e226886" - }, - "outputs": [], - "source": [ - "f = aesara.function(inputs=[x, y], outputs=w)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now that the graph is compiled, we can push some concrete values:" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0., 1.])" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "f(x=0, y=[1, np.e])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - ":::{tip}\n", - "Sometimes we just want to debug, we can use {meth}`~aesara.graph.basic.Variable.eval` for that:\n", - ":::" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "kVSkpSQv2FT1", - "outputId": "a4e0a9f2-355d-4b55-cbcb-4486500b00fb" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0., 1.])" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "w.eval({x: 0, y:[1, np.e]})" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can set intermediate values as well" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "U_aOb50o2cK8", - "outputId": "572da92f-153e-4ab5-8ca1-a1bed4e141d7" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0., 1.])" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "w.eval({z: [1, np.e]})" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Aesara is clever!\n", - "\n", - "One of the most important features of `aesara` is that it can automatically optimize the mathematical operations inside a graph. Let's consider a simple example:" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Elemwise{true_div,no_inplace} [id A] 'a / b'\n", - " |a [id B]\n", - " |b [id C]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a = at.scalar(name=\"a\")\n", - "b = at.scalar(name=\"b\")\n", - "\n", - "c = a / b\n", - "c.name = \"a / b\"\n", - "\n", - "aesara.dprint(c)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now let us multiply `b` times `c`. This should result in simply `a`." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Elemwise{mul,no_inplace} [id A] 'b * c'\n", - " |b [id B]\n", - " |Elemwise{true_div,no_inplace} [id C] 'a / b'\n", - " |a [id D]\n", - " |b [id B]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "d = b * c\n", - "d.name = \"b * c\"\n", - "\n", - "aesara.dprint(d)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The graph shows the full computation, but once we compile it the operation becomes the identity on `a` as expected." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "DeepCopyOp [id A] 'a' 0\n", - " |a [id B]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "g = aesara.function(inputs=[a, b], outputs=d)\n", - "\n", - "aesara.dprint(g)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "qqa54LWg4v3W" - }, - "source": [ - "### What is in an Aesara graph?\n", - "\n", - "The following diagram shows the basic structure of an `aesara` graph.\n", - "\n", - "![aesara graph](https://raw.githubusercontent.com/aesara-devs/aesara/main/doc/tutorial/apply.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can can make these concepts more tangible by explicitly indicating them in the first example from the section above. Let us compute the graph components for the tensor `z`. " - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "UV95InOX3W2z", - "outputId": "047197ff-5c73-429d-d93a-427620c4b215" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "z type: TensorType(float64, (None,))\n", - "z name = x + y\n", - "z owner = Elemwise{add,no_inplace}(InplaceDimShuffle{x}.0, y)\n", - "z owner inputs = [InplaceDimShuffle{x}.0, y]\n", - "z owner op = Elemwise{add,no_inplace}\n", - "z owner output = [x + y]\n", - "\n" - ] - } - ], - "source": [ - "print(f\"\"\"\n", - "z type: {z.type}\n", - "z name = {z.name}\n", - "z owner = {z.owner}\n", - "z owner inputs = {z.owner.inputs}\n", - "z owner op = {z.owner.op}\n", - "z owner output = {z.owner.outputs}\n", - "\"\"\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following code snippet helps us understand these concepts by going through the computational graph of `w`. The actual code is not as important here, the focus is on the outputs." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "thLifxKW3ka3", - "outputId": "6c98f77b-922a-4869-bfeb-281b3f29e8dc" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---\n", - "Checking variable log(x + y) of type TensorType(float64, (None,))\n", - " > Op is Elemwise{log,no_inplace}\n", - " > Input 0 is x + y\n", - "---\n", - "Checking variable x + y of type TensorType(float64, (None,))\n", - " > Op is Elemwise{add,no_inplace}\n", - " > Input 0 is InplaceDimShuffle{x}.0\n", - " > Input 1 is y\n", - "---\n", - "Checking variable InplaceDimShuffle{x}.0 of type TensorType(float64, (1,))\n", - " > Op is InplaceDimShuffle{x}\n", - " > Input 0 is x\n", - "---\n", - "Checking variable y of type TensorType(float64, (None,))\n", - " > y is a root variable\n", - "---\n", - "Checking variable x of type TensorType(float64, ())\n", - " > x is a root variable\n" - ] - } - ], - "source": [ - "# start from the top\n", - "stack = [w]\n", - "\n", - "while stack:\n", - " print(\"---\")\n", - " var = stack.pop(0)\n", - " print(f\"Checking variable {var} of type {var.type}\")\n", - " # check variable is not a root variable\n", - " if var.owner is not None:\n", - " print(f\" > Op is {var.owner.op}\")\n", - " # loop over the inputs\n", - " for i, input in enumerate(var.owner.inputs):\n", - " print(f\" > Input {i} is {input}\")\n", - " stack.append(input)\n", - " else:\n", - " print(f\" > {var} is a root variable\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note that this is very similar to the output of {func}`~aesara.dprint` function introduced above." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "ltcXsJUQ-NZL", - "outputId": "2c9543a8-1be6-47cb-efc7-1f83187e068b" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Elemwise{log,no_inplace} [id A] 'log(x + y)'\n", - " |Elemwise{add,no_inplace} [id B] 'x + y'\n", - " |InplaceDimShuffle{x} [id C]\n", - " | |x [id D]\n", - " |y [id E]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "aesara.dprint(w)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "dIYxBNT_5HgW" - }, - "source": [ - "### Graph manipulation 101\n", - "\n", - "Another interesting feature of Aesara is the ability to manipulate the computational graph, something that is not possible with TensorFlow or PyTorch. Here we continue with the example above in order to illustrate the main idea around this technique." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "gWj0znupVc02", - "outputId": "edbdd626-2887-4336-f3b4-0f3904e49656" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[x, y]" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# get input tensors\n", - "list(aesara.graph.graph_inputs(graphs=[w]))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As a simple example, let's add an {func}`~aesara.tensor.exp` before the {func}`~aesara.tensor.log` (to get the identity function)." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "parent_of_w = w.owner.inputs[0] # get z tensor\n", - "new_parent_of_w = at.exp(parent_of_w) # modify the parent of w\n", - "new_parent_of_w.name = \"exp(x + y)\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note that the graph of `w` has actually not changed:" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Elemwise{log,no_inplace} [id A] 'log(x + y)'\n", - " |Elemwise{add,no_inplace} [id B] 'x + y'\n", - " |InplaceDimShuffle{x} [id C]\n", - " | |x [id D]\n", - " |y [id E]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "aesara.dprint(w)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To modify the graph we need to use the {func}`~aesara.clone_replace` function, which *returns a copy of the initial subgraph with the corresponding substitutions.*" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "y7WI_O4e5Gu0", - "outputId": "7d288574-b747-43ff-bfbe-b5ed3357caea" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Elemwise{log,no_inplace} [id A] 'log(exp(x + y))'\n", - " |Elemwise{exp,no_inplace} [id B] 'exp(x + y)'\n", - " |Elemwise{add,no_inplace} [id C] 'x + y'\n", - " |InplaceDimShuffle{x} [id D]\n", - " | |x [id E]\n", - " |y [id F]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "new_w = aesara.clone_replace(output=[w], replace={parent_of_w: new_parent_of_w})[0]\n", - "new_w.name = \"log(exp(x + y))\"\n", - "aesara.dprint(new_w)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Finally, we can test the modified graph by passing some input to the new graph." - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "GK2764ZW6Hs6", - "outputId": "8db79441-9b23-4886-f1fe-ae4857deaefe" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([1. , 2.71828183])" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "new_w.eval({x: 0, y:[1, np.e]})" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As expected, the new graph is just the identity function." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "JhmIBByY6T9h" - }, - "source": [ - ":::{note}\n", - "Again, note that `aesara` is clever enough to omit the `exp` and `log` once we compile the function.\n", - ":::" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "WlDAR8616QsM", - "outputId": "2b9a60b7-d3d6-4605-d6ff-736b5c721318" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Elemwise{add,no_inplace} [id A] 'x + y' 1\n", - " |InplaceDimShuffle{x} [id B] 0\n", - " | |x [id C]\n", - " |y [id D]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "f = aesara.function(inputs=[x, y], outputs=new_w)\n", - "\n", - "aesara.dprint(f)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "noKfjvwS65q-", - "outputId": "bed5b895-8c4e-4c0e-95c9-8eefdbbd55fa" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([1. , 2.71828183])" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "f(x=0, y=[1, np.e])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n", - "## PyMC\n", - "\n", - "![pymc logo](https://raw.githubusercontent.com/pymc-devs/pymc/main/docs/logos/PyMC.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "3drOlTjZxDMF" - }, - "source": [ - "### Aesara RandomVariables\n", - "\n", - "Now that we have seen aesara's basics we want to move in the direction of random variables.\n", - "\n", - "How do we generate random numbers in [`numpy`](https://github.com/numpy/numpy)? To illustrate it we can sample from a normal distribution:" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "THRvGbP1WmhH", - "outputId": "c4f044e6-83c3-4c4c-9ecf-8714efae6f36" - }, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "rng = np.random.default_rng()\n", - "\n", - "a = rng.normal(loc=0, scale=1, size=1_000)\n", - "\n", - "fig, ax = plt.subplots(figsize=(8, 6))\n", - "ax.hist(a, color=\"C0\", bins=15)\n", - "ax.set(title=\"Samples from a normal distribution using numpy\", ylabel=\"count\");" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now let's try to do it in Aesara." - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "aesara.tensor.var.TensorVariable" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "y = at.random.normal(loc=0, scale=1, name=\"y\")\n", - "type(y)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next, we show the graph using {func}`~aesara.dprint`." - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y'\n", - " |RandomGeneratorSharedVariable() [id B]\n", - " |TensorConstant{[]} [id C]\n", - " |TensorConstant{11} [id D]\n", - " |TensorConstant{0} [id E]\n", - " |TensorConstant{1} [id F]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "aesara.dprint(y)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The inputs are always in the following order:\n", - "1. `rng` shared variable\n", - "2. `size`\n", - "3. `dtype` (number code)\n", - "4. `arg1`\n", - "5. `arg2`\n", - "6. `argn`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We *could* sample by calling {meth}`~aesara.graph.basic.Variable.eval`. on the random variable." - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array(1.79154375)" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "y.eval()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note however that these samples are always the same!" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Sample 0: 1.7915437473961466\n", - "Sample 1: 1.7915437473961466\n", - "Sample 2: 1.7915437473961466\n", - "Sample 3: 1.7915437473961466\n", - "Sample 4: 1.7915437473961466\n", - "Sample 5: 1.7915437473961466\n", - "Sample 6: 1.7915437473961466\n", - "Sample 7: 1.7915437473961466\n", - "Sample 8: 1.7915437473961466\n", - "Sample 9: 1.7915437473961466\n" - ] - } - ], - "source": [ - "for i in range(10):\n", - " print(f\"Sample {i}: {y.eval()}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We always get the same samples! This has to do with the random seed step in the graph, i.e. `RandomGeneratorSharedVariable` (we will not go deeper into this subject here). We will show how to generate different samples with `pymc` below. To do so, we start by defining a `pymc` normal distribution." - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", - " |TensorConstant{[]} [id C]\n", - " |TensorConstant{11} [id D]\n", - " |TensorConstant{0} [id E]\n", - " |TensorConstant{1.0} [id F]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x = pm.Normal.dist(mu=0, sigma=1)\n", - "aesara.dprint(x)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Observe that `x` is just a normal `RandomVariable` and which is the same as `y` except for the `rng`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can try to generate samples by calling {meth}`~aesara.graph.basic.Variable.eval` as above." - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Sample 0: 1.0803155077675022\n", - "Sample 1: 1.0803155077675022\n", - "Sample 2: 1.0803155077675022\n", - "Sample 3: 1.0803155077675022\n", - "Sample 4: 1.0803155077675022\n", - "Sample 5: 1.0803155077675022\n", - "Sample 6: 1.0803155077675022\n", - "Sample 7: 1.0803155077675022\n", - "Sample 8: 1.0803155077675022\n", - "Sample 9: 1.0803155077675022\n" - ] - } - ], - "source": [ - "for i in range(10):\n", - " print(f\"Sample {i}: {x.eval()}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As before we get the same value for all iterations. The correct way to generate random samples is using {func}`~pymc.draw`." - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(figsize=(8, 6))\n", - "ax.hist(pm.draw(x, draws=1_000), color=\"C1\", bins=15)\n", - "ax.set(title=\"Samples from a normal distribution using pymc\", ylabel=\"count\");" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Yay! We learned how to sample from a `pymc` distribution!" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "wkZR0gDWRAgK" - }, - "source": [ - "### What is going on behind the scenes?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can now look into how this is done inside a model." - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", - " |TensorConstant{[]} [id C]\n", - " |TensorConstant{11} [id D]\n", - " |TensorConstant{0} [id E]\n", - " |TensorConstant{1.0} [id F]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "with pm.Model() as model:\n", - " z = pm.Normal(name=\"z\", mu=np.array([0, 0]), sigma=np.array([1, 2]))\n", - "\n", - "aesara.dprint(x)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We are just creating random variables like we saw before, but now registering them in a PyMC model. To extract the list of random variables we can simply do:" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "23JVxTUjRHDy", - "outputId": "cc39c67b-ed0d-4ad7-c485-5ae6b0b5d0df" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[z]" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.basic_RVs" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "jYgwMOzpRcmo", - "outputId": "3178ac69-3666-4464-d6d2-dbaacfc51170" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z'\n", - " |RandomGeneratorSharedVariable() [id B]\n", - " |TensorConstant{[]} [id C]\n", - " |TensorConstant{11} [id D]\n", - " |TensorConstant{(2,) of 0} [id E]\n", - " |TensorConstant{[1. 2.]} [id F]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "aesara.dprint(model.basic_RVs[0])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can try to sample via {meth}`~aesara.graph.basic.Variable.eval` as above and it is no surprise that we are getting the same samples at each iteration." - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Sample 0: [-0.9712932 1.68009545]\n", - "Sample 1: [-0.9712932 1.68009545]\n", - "Sample 2: [-0.9712932 1.68009545]\n", - "Sample 3: [-0.9712932 1.68009545]\n", - "Sample 4: [-0.9712932 1.68009545]\n", - "Sample 5: [-0.9712932 1.68009545]\n", - "Sample 6: [-0.9712932 1.68009545]\n", - "Sample 7: [-0.9712932 1.68009545]\n", - "Sample 8: [-0.9712932 1.68009545]\n", - "Sample 9: [-0.9712932 1.68009545]\n" - ] - } - ], - "source": [ - "for i in range(10):\n", - " print(f\"Sample {i}: {z.eval()}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Again, the correct way of sampling is via {func}`~pymc.draw`. " - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Sample 0: [ 1.67761249 -1.75074301]\n", - "Sample 1: [-0.17103485 -0.24963938]\n", - "Sample 2: [ 1.21497342 -1.46996431]\n", - "Sample 3: [ 0.06999866 -0.36270505]\n", - "Sample 4: [-1.70776477 2.6518159 ]\n", - "Sample 5: [0.14292995 2.22215584]\n", - "Sample 6: [0.54832333 0.82061403]\n", - "Sample 7: [-1.48899591 0.44023316]\n", - "Sample 8: [-0.18011286 0.61887644]\n", - "Sample 9: [ 1.09410457 -0.6002905 ]\n" - ] - } - ], - "source": [ - "for i in range(10):\n", - " print(f\"Sample {i}: {pm.draw(z)}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeIAAAHiCAYAAAA06c+jAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAetklEQVR4nO3de5ScB33e8efZ2V2tpNVa+H6RjDHYIa7jhBxBuKUEY8CAY7dpLhCgkKRHp7RQcg6BGNwQu01SDvRQoJCkCjgE7OBQLgnHl/qCQ2jaYDC2udiyiWMMvmLLQndpLzO//jFjuqzXkuz3t/rNznw/5/hYq3n1zO995/LM+87svI4IAQCAGiPVAwAAMMwoYgAAClHEAAAUoogBAChEEQMAUIgiBgCgEEUM9BHbF9q+pOB632X7o4f6egFQxIAkyfYLbf9f29ttb7X9f2w/u3quDI9X7rbD9jMkKSL+KCL+zUFkfcn2AZcDcPBGqwcAqtmeknS5pDdJ+rSkcUk/L2m6cq5hY3s0Iuaq5wAONfaIAelUSYqIT0VEOyL2RsQ1EfFNSbL9dNvX237E9hbbl9pe++g/tn237bfb/qbt3bY/ZvsY21fZ3mn7OttP6S17Um9PdKPt+20/YPttjzeY7ef29tS32f6G7V+Yd9kbbd/Vu47v2n7tk90A8/eabU/YvqS3vttsf623Pn+o7guUD9veZfvDveWf31tme+//z5+X+zTbX563HT4y73oe3Ra/Zfv7kq7v/f3/tP1gL+/Ltv/ZvLyP2/7j3rbd1TtycaztD9j+oe3bbT/ryW4HoAJFDEjfkdS2/Re2X/Foac5jSf9F0vGSflLSekkXLljmX0l6qbql/ouSrpL0LklHqvs4+w8Lln+xpFMkvUzS+bbPWjiU7RMkXSHpDyQdLul3JH3W9lG2V0v6kKRXRMQaSc+XdMsTXvPFvUHSYequ5xGS/q2kvRFxgaT/LenNETEZEW+2fXhvxg/1ln2/pCtsH9HL+ktJX+1ddqGk1y9yfS9Sd7u+vPfzVepum6Ml3STp0gXL/6qk/6jutp2W9A+95Y6U9JneDMCyQRFj6EXEDkkvlBSS/kzSw7a/YPuY3uV3RsS1ETEdEQ+r+0T/ogUx/z0ifhAR96lbVjdExM0RMS3p85IW7qVdFBG7I+Jbkv5c0msWGe11kq6MiCsjohMR10q6UdIre5d3JJ1ue2VEPBARt+5nNX+1t3f7o//2s+ysusX5jN4Rgq/3ttFiXiXpHyPikxExFxGfknS7pF+0faKkZ0t6d0TMRMTfS/rCIhkX9rbFXkmKiIsjYmdv210o6adtHzZv+c/3Ztqn7rbdFxGfiIi2pL/SY7c10NcoYkBSRGyOiDdGxDpJp6u79/sBSbJ9tO3LbN9ne4ekS9Td+5rvB/P+vHeRnycXLH/PvD9/r3d9Cz1V0q8sKM8XSjouInZL+jV191YfsH2F7WfuZxU/HRFr5/+3n2U/KelqSZf1Dp+/1/bY4yx7fG/++b4n6YTeZVsjYs+8y+7RY/3o72y3bL/H9j/1tvXdvYvmb+8nuq2BvkYRAwtExO2SPq5uIUvdw9Ih6YyImFJ3T9UNr2b9vD+fKOn+RZa5R9InFxTo6oh4T2/OqyPipZKOU3cv9M8azqRe7mxEXBQRp6l7yPscSf/60YsXLH6/ui8Y5jtR0n2SHpB0uO1V8y5br8ean/nrks6TdJa6h8dP6v190+0N9C2KGEPP9jNtv832ut7P69U9VPyV3iJrJO2StK33vu3bE67292yv6n0Q6TfUPaS60CXqHuJ9eW9PccL2L9he1/vw1Lm994qne/O1E+aS7Rfb/inbLUk71D1U/Wj2DySdPG/xKyWdavvXbY/a/jVJp0m6PCK+p+6h9Attj9t+nrrvn+/Pmt76PCJplaQ/ylgnoJ9RxIC0U9LPSbrB9m51C/jbkh79NPNFkn5W0nZ1P5j0uYTr/DtJd0r6oqT/GhHXLFwgIu5Rd+/wXZIeVncP+e3qPm5HevPdL2mruu9Z/7uEuSTpWHU/9LRD0uberI/+HvIHJf1y7xPKH4qIR9TdY36buuX5DknnRMSW3vKvlfS83mV/oO4Ljv39Wtgn1D20fZ+k2/T/XwwBA8sRC480AVgqtk+S9F1JY8P4O7O2/0rS7RHx+9WzAP2CPWIAS8b2s939PewR22eru4f/18VjAX2Fb9YCsJSOVfdQ/hGS7pX0poi4uXYkoL9waBoAgEIcmgYAoBBFDABAoZL3iMe9Iia0uuKqsczZOd/rkPaWTMI8Wd9UkfYmE29XAel26odbIuKoxS4rKeIJrdbP+SUVV40nyv110GRkfDwlpzO9LyXHo4/3zY9PIKPVSphEinbK93mk5Sg6OTnAALguPrPwq2B/pL+eZQEAGDIUMQAAhShiAAAKUcQAABSiiAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFKKIAQAoRBEDAFCIIgYAoFDJ+YixjPTZOWU7MzMpORnnEZakmJttntFn5//N2jZSf51nud/uyymyzhc+iNtmGWGPGACAQhQxAACFKGIAAAqlFLHttbY/Y/t225ttPy8jFwCAQZf1Ya0PSvpfEfHLtsclrUrKBQBgoDUuYttTkv65pDdKUkTMSMr5aCsAAAMu49D0yZIelvTntm+2/VHbqxNyAQAYeBlFPCrpZyX9SUQ8S9JuSecvXMj2Rts32r5xVtMJVwsAwPKXUcT3Sro3Im7o/fwZdYv5x0TEpojYEBEbxrQi4WoBAFj+GhdxRDwo6R7bP9H7q5dIuq1pLgAAwyDrU9NvkXRp7xPTd0n6jaRcAAAGWkoRR8QtkjZkZAEAMEz4Zi0AAApRxAAAFKKIAQAoRBEDAFCIIgYAoFDWry8hi5NeG0UnJWZk5cqUnM7evSk5WUYmcr5UJmZbzUNG3DxDksfHU3JiJuer4mN2LiVnJGm9OknrlSLp8ZmWg1LsEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhShiAAAKUcQAABSiiAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFKKIAQAoNFo9ABZIOtG3R8dSctSJlJjW5GRKTrTbKTletTIlRzOzjSM8nnNbxZ69KTkeH0/JGVmTc5t3du5KyckykrB9OtP7EiaR5KR9qaTnHTw57BEDAFCIIgYAoBBFDABAIYoYAIBCFDEAAIUoYgAAClHEAAAUoogBAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhShiAAAKUcQAABSiiAEAKEQRAwBQaLR6gEHSmpxsnNHevSdhkjzRbqfkeOVETs7641NyNJezXlrR/CEU7UgYJG8ba3w8J6eV8zp/ZDTpaeqH23JyEnh0LCen1UrJ6UzvS8nBk8MeMQAAhShiAAAKUcQAABSiiAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACF0orYdsv2zbYvz8oEAGDQZe4Rv1XS5sQ8AAAGXkoR214n6VWSPpqRBwDAsMjaI/6ApHdI6iTlAQAwFBoXse1zJD0UEV8/wHIbbd9o+8ZZTTe9WgAABkLGHvELJJ1r+25Jl0k60/YlCxeKiE0RsSEiNoxpRcLVAgCw/DUu4oh4Z0Ssi4iTJL1a0vUR8brGkwEAMASSzri9zDnnrfL2rl2NM1qTkwmT5PHaw6pH+HFz7ZSYWDmektOZaP4Q2nP8qoRJpJG5tSk5K+/fnZIz8sAjKTmaXJ0S4x07U3KinXMfzNBPs0iSR8dScmJuNiVnuUgt4oj4kqQvZWYCADDI+GYtAAAKUcQAABSiiAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFKKIAQAoRBEDAFCIIgYAoBBFDABAIYoYAIBCqecjXq7caiXlND/ZvFetTJik/3SOXpuSs/f4nJPEj+7NOaH6zvXNb/N9a50wiXTsV3an5Ow7LmcbrxjNeZ3fuvvBlBwfc1ROzrYdzUNWNL/fSFL7oS0pOXLObRVzsyk5WfMoOjk5S4w9YgAAClHEAAAUoogBAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhShiAAAKUcQAABSiiAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAAqNVg/QiHNeR0S7nZKTobN9Z0qOTz4xJWf6hKmUnJnDcu5q04c5JWfXupx5ZtZG44zJ7yUMIumel6/OCUqy6v41OTnHr0rJmbxrR0qO253mITt3Nc9Q3nPXyMSKlJzOvumUHEXCNl5G2CMGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFKKIAQAoRBEDAFCIIgYAoBBFDABAIYoYAIBCFDEAAIUoYgAAClHEAAAUoogBAChEEQMAUKjx2dFtr5f0CUnHSupI2hQRH2yae1DX3Wrl5IzlnCReneYniR+ZTDq5+1zOCcMdzddJkuYmnJLTaeXk7DsmZ/usPHZ344wdaycSJlHay+rx74+n5Ow9JiVGK3bk3Oa7Tp5KyVlz+1xCymRChtSank7JidmMdZIUnZycIZPRQHOS3hYRN9leI+nrtq+NiNsSsgEAGGiNX0NHxAMRcVPvzzslbZZ0QtNcAACGQep7xLZPkvQsSTdk5gIAMKiS3hyVbE9K+qyk346IHYtcvlHSRkma0KqsqwUAYFlL2SO2PaZuCV8aEZ9bbJmI2BQRGyJiw5hWZFwtAADLXuMitm1JH5O0OSLe33wkAACGR8Ye8QskvV7SmbZv6f33yoRcAAAGXuP3iCPi7yXl/KIfAABDhm/WAgCgEEUMAEAhihgAgEIUMQAAhShiAAAKUcQAABSiiAEAKEQRAwBQKO2kD0+Ym78GiHbOyd3daqXkjEyubh6yIuek7LEyJ2d67VhKzq7jc77zZc/6nBOPe81sSk670/x+/D9e9BcJk0i/d8e/SMn5wcxTUnImj9qdkrNj9rCUnBO+uDMlJ0ab3+Zp34A0mvMUHvumU3KyeDTneSfmEh7nCV0lSYrHv4g9YgAAClHEAAAUoogBAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhShiAAAKUcQAABSiiAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAAqNVg/QD6Ld7pscr16VMIm06+SplJzx7XMpOTE2npMzNZuSc+JxW1Ny3nLS9Y0zThn7YcIk0gWnXpmSc1HnnJScrVsmU3LGV6fEaPdTc4JGZlc2zlj9j5EwiaRtOTFZz4FZ+mqe6Cz5VbBHDABAIYoYAIBCFDEAAIUoYgAAClHEAAAUoogBAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhShiAAAKUcQAABSiiAEAKEQRAwBQiCIGAKDQaPUATbjVqh7hx0Xzk33PHbUmYRBpxbbZlJxdJ6xIyZlNOrl7lpZzTvb90pUPNc6YGsm5zR/pbEvJueiZX0jJOf9bv5SSo50598G5CafkrNyZcN8Zy3nu8mTOA2tkejolR53mz4GSFO12Ts5cwm3lpP3V/Wwa9ogBAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhVKK2PbZtu+wfaft8zMyAQAYBo2L2HZL0kckvULSaZJeY/u0prkAAAyDjD3i50i6MyLuiogZSZdJOi8hFwCAgZdRxCdIumfez/f2/g4AABxAxldcLva9cY/5Mi/bGyVtlKQJrUq4WgAAlr+MPeJ7Ja2f9/M6SfcvXCgiNkXEhojYMKac744FAGC5yyjir0k6xfbTbI9LerWknG+NBwBgwDU+NB0Rc7bfLOlqSS1JF0fErY0nAwBgCKScBjEirpR0ZUYWAADDhG/WAgCgEEUMAEChlEPTy13r8LU5Qaua/1rW6NbdCYNIandSYiYmDk/JGZkbS8kZXz2bkvOfTv6blJzbZpuv175Y7DcAn7hH2kek5Dw8N5WS84wjtqTk3Lb2sJSc2W0523lq11zjDM80z5AkdXIe5x4fT8lpb9+ekiP30T5i5Gzj/emjtQUAYPhQxAAAFKKIAQAoRBEDAFCIIgYAoBBFDABAIYoYAIBCFDEAAIUoYgAAClHEAAAUoogBAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhUarB2gi5nJOEt/eui0lp9VOOIH0dPMTzUtS57ick8R3xnNOpj66KyVG03etTsl591POS8l5+tQjjTPOXLs5YRKpHTm31Xu/+KqUHI1FSszh30+JUWs2Z57OaMJ2zniukBQ7dqbkdPZNp+TISft2kbN9lgv2iAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFKKIAQAoRBEDAFCIIgYAoBBFDABAIYoYAIBCFDEAAIUoYgAAClHEAAAUGi275owTP2edhDpLK2GeFSuaZ0hSO+ck6JObm5/4XpL2HHVMSs7smoSTskv67r1HpeTMHt9qnPHAnqmESaRb7z4hJae1L+dx1VbOyd1H9yTdl++fSckZf2BH85Ct25pnSOrsm07Jcav5/ViSYm42JWfY9FmTAQAwXChiAAAKUcQAABSiiAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFKKIAQAoRBEDAFCoURHbfp/t221/0/bnba9NmgsAgKHQdI/4WkmnR8QZkr4j6Z3NRwIAYHg0KuKIuCYi5no/fkXSuuYjAQAwPDLfI/5NSVcl5gEAMPBGD7SA7eskHbvIRRdExN/0lrlA0pykS/eTs1HSRkma0KonNexjRCclZmT1mpSczs5djTOyXhmNjB3wpj0oM8dNpeQcefP2lJy5lYel5Iy0V6Tk7LzxuMYZD5wYCZNIraQ7z+TdTskZ25M0UM44Gt05kxM0O3fgZQ4g2u2EQSS3Wik5nel9KTl4cg74bB0RZ+3vcttvkHSOpJdExOM+o0TEJkmbJGnKh+c88wAAsMw12m2yfbak35X0oojYkzMSAADDo+mxow9LWiPpWtu32P7ThJkAABgajfaII+IZWYMAADCM+GYtAAAKUcQAABSiiAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFKKIAQAoRBEDAFAo5+zxVZzzOqK9Y2dKzshE85PNx8xswiRp51LX+Pe3puRMP/3IlJyjb9ydkjNzRPPbSpL2rW1+YvbWbNatlWPyvuYnvpek8e059+XR7TknrfeWbSk5sTvhjK/tdvMMSRrJue+MrJhIyYmk9Yq5nPvOcsEeMQAAhShiAAAKUcQAABSiiAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFKKIAQAoRBEDAFCIIgYAoBBFDABAIYoYAIBCFDEAAIVGqwfoC9HJiZmdax7SieYZkrx9R0qOVk6kxKy448GUnDh8KiWntTrnrj/1T9ONM+YmxxImkTorcl5Xj0wnPR5aTslRJ2ceRc5jS26+Xu3dexIGUdpzl0dz7oPRbqfkDBv2iAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFKKIAQAoRBEDAFCIIgYAoBBFDABAIYoYAIBCFDEAAIUoYgAAClHEAAAUyjk7epWkk2Jn6aeTYnd27krJ8cxsSk7WSdmTTjWvFXtnUnJitNU4Y/SRnNtKraTX1btyTlofa1an5PihR1JyOnty1kudnPtyCufc5jGX9DhPmmfYsNUAAChEEQMAUCiliG3/ju2wfWRGHgAAw6JxEdteL+mlkr7ffBwAAIZLxh7xf5P0Dkl99AkGAACWh0ZFbPtcSfdFxDeS5gEAYKgc8NeXbF8n6dhFLrpA0rskvexgrsj2RkkbJWlCq57AiAAADK4DFnFEnLXY39v+KUlPk/QN25K0TtJNtp8TEQ8ukrNJ0iZJmvLhHMYGAEANvtAjIr4l6ehHf7Z9t6QNEbElYS4AAIYCv0cMAEChtK+4jIiTsrIAABgW7BEDAFCIIgYAoBBFDABAIYoYAIBCFDEAAIXSPjUNSdFpHtFOmENStJOC9k2nxLSm1qTktB98KCVnZHXOt7t57VTzkL37mmf0obh7a05OZwC//yfhuUKS5D7bl8paryHTZ7ciAADDhSIGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFKKIAQAoRBEDAFCIIgYAoBBFDABAIYoYAIBCFDEAAIUoYgAAClHEAAAUoogBAChEEQMAUGi0egAsEJ3qCZZEe/v2lJyRlStTcmLfdE7OQ1saZ7jVSphEitm5lJws0W6n5Hgs52mqk3Sb99VjtJ9mwZPGHjEAAIUoYgAAClHEAAAUoogBAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhShiAAAKUcQAABSiiAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQjln3EYeJ702GtAThnf27q0e4ccl3F4j4+MJg0jRbqfkeCznaSFmcubJWi+gX7FHDABAIYoYAIBCFDEAAIUoYgAAClHEAAAUoogBAChEEQMAUIgiBgCgEEUMAEChxkVs+y2277B9q+33ZgwFAMCwaPRddrZfLOk8SWdExLTto3PGAgBgODTdI36TpPdExLQkRcRDzUcCAGB4NC3iUyX9vO0bbP+d7WdnDAUAwLA44KFp29dJOnaRiy7o/funSHqupGdL+rTtkyMiFsnZKGmjJE1oVZOZAQAYGAcs4og46/Eus/0mSZ/rFe9XbXckHSnp4UVyNknaJElTPvwxRQ0AwDBqemj6ryWdKUm2T5U0LmlLw0wAAIZG0zOAXyzpYtvfljQj6Q2LHZYGAACLa1TEETEj6XVJswCHjEfHUnJibrZxRmd6X8IkeTLWSZLkpO8Lik5OTtY8/aTftjGelAG8ZwIAsHxQxAAAFKKIAQAoRBEDAFCIIgYAoBBFDABAIYoYAIBCFDEAAIUoYgAAClHEAAAUoogBAChEEQMAUIgiBgCgEEUMAEAhihgAgEIUMQAAhUarB+gL/XRybU7QfUjE3Gz1COk8OpaSk7Ztsu7L/fT47DeDuE5DiD1iAAAKUcQAABSiiAEAKEQRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFKKIAQAoRBEDAFCIIgYAoBBFDABAIYoYAIBCFDEAAIVGqwfoC5xcG09Wxknrk+5/0W6n5PQdHp8YcOwRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFKKIAQAoRBEDAFCIIgYAoBBFDABAIYoYAIBCFDEAAIUoYgAAClHEAAAUoogBAChEEQMAUMgRceiv1H5Y0vcO4VUeKWnLIby+SqzrYBqmdZWGa31Z18G0cF2fGhFHLbZgSREfarZvjIgN1XMcCqzrYBqmdZWGa31Z18H0RNaVQ9MAABSiiAEAKDQsRbypeoBDiHUdTMO0rtJwrS/rOpgOel2H4j1iAAD61bDsEQMA0JeGpoht/2fb37R9i+1rbB9fPdNSsf0+27f31vfzttdWz7RUbP+K7Vttd2wP5KcxbZ9t+w7bd9o+v3qepWL7YtsP2f529SxLzfZ6239re3Pv/vvW6pmWiu0J21+1/Y3eul5UPdNSs92yfbPtyw9m+aEpYknvi4gzIuJnJF0u6d3F8yylayWdHhFnSPqOpHcWz7OUvi3plyR9uXqQpWC7Jekjkl4h6TRJr7F9Wu1US+bjks6uHuIQmZP0toj4SUnPlfTvB/h2nZZ0ZkT8tKSfkXS27efWjrTk3ipp88EuPDRFHBE75v24WtLAvjkeEddExFzvx69IWlc5z1KKiM0RcUf1HEvoOZLujIi7ImJG0mWSziueaUlExJclba2e41CIiAci4qben3eq+6R9Qu1USyO6dvV+HOv9N7DPv7bXSXqVpI8e7L8ZmiKWJNt/aPseSa/VYO8Rz/ebkq6qHgJP2gmS7pn3870a0CfsYWX7JEnPknRD8ShLpneo9hZJD0m6NiIGdl0lfUDSOyR1DvYfDFQR277O9rcX+e88SYqICyJivaRLJb25dtpmDrSuvWUuUPcQ2KV1kzZ3MOs6wLzI3w3s3sSwsT0p6bOSfnvBUbuBEhHt3tuC6yQ9x/bpxSMtCdvnSHooIr7+RP7d6BLNUyIizjrIRf9S0hWSfn8Jx1lSB1pX22+QdI6kl8Qy/x21J3C7DqJ7Ja2f9/M6SfcXzYJEtsfULeFLI+Jz1fMcChGxzfaX1P0swCB+KO8Fks61/UpJE5KmbF8SEa/b3z8aqD3i/bF9yrwfz5V0e9UsS8322ZJ+V9K5EbGneh408jVJp9h+mu1xSa+W9IXimdCQbUv6mKTNEfH+6nmWku2jHv3NDdsrJZ2lAX3+jYh3RsS6iDhJ3cfq9QcqYWmIiljSe3qHM78p6WXqfqptUH1Y0hpJ1/Z+XetPqwdaKrb/pe17JT1P0hW2r66eKVPvQ3dvlnS1uh/o+XRE3Fo71dKw/SlJ/yDpJ2zfa/u3qmdaQi+Q9HpJZ/Yeo7f09qIG0XGS/rb33Ps1dd8jPqhf6xkWfLMWAACFhmmPGACAvkMRAwBQiCIGAKAQRQwAQCGKGACAQhQxAACFKGIAAApRxAAAFPp/C7gJbLNH0sQAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(figsize=(8, 8))\n", - "z_draws = pm.draw(vars=z, draws=10_000)\n", - "ax.hist2d(x=z_draws[:, 0], y=z_draws[:, 1], bins=25)\n", - "ax.set(title=\"Samples Histogram\");" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "wPw9kCvASOeJ" - }, - "source": [ - "### Enough with Random Variables, I want to see some (log)probabilities!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Recall we have defined the following model above:" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$$\n", - " \\begin{array}{rcl}\n", - " \\text{z} &\\sim & \\operatorname{N}(\\text{},~\\text{})\n", - " \\end{array}\n", - " $$" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let us print the graph computing the elemwise log-probability of the model (via the method {meth}`~pymc.Model.logpt`)." - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Sum{acc_dtype=float64} [id A] '__logp'\n", - " |MakeVector{dtype='float64'} [id B]\n", - " |Sum{acc_dtype=float64} [id C]\n", - " |Elemwise{mul,no_inplace} [id D]\n", - " |Check{sigma > 0} [id E] 'z_logprob'\n", - " | |Elemwise{sub,no_inplace} [id F]\n", - " | | |Elemwise{sub,no_inplace} [id G]\n", - " | | | |Elemwise{mul,no_inplace} [id H]\n", - " | | | | |InplaceDimShuffle{x} [id I]\n", - " | | | | | |TensorConstant{-0.5} [id J]\n", - " | | | | |Elemwise{pow,no_inplace} [id K]\n", - " | | | | |Elemwise{true_div,no_inplace} [id L]\n", - " | | | | | |Elemwise{sub,no_inplace} [id M]\n", - " | | | | | | |z [id N]\n", - " | | | | | | |TensorConstant{(2,) of 0} [id O]\n", - " | | | | | |TensorConstant{[1. 2.]} [id P]\n", - " | | | | |InplaceDimShuffle{x} [id Q]\n", - " | | | | |TensorConstant{2} [id R]\n", - " | | | |InplaceDimShuffle{x} [id S]\n", - " | | | |Elemwise{log,no_inplace} [id T]\n", - " | | | |Elemwise{sqrt,no_inplace} [id U]\n", - " | | | |TensorConstant{6.283185307179586} [id V]\n", - " | | |Elemwise{log,no_inplace} [id W]\n", - " | | |TensorConstant{[1. 2.]} [id P]\n", - " | |All [id X]\n", - " | |Elemwise{gt,no_inplace} [id Y]\n", - " | |TensorConstant{[1. 2.]} [id P]\n", - " | |InplaceDimShuffle{x} [id Z]\n", - " | |TensorConstant{0.0} [id BA]\n", - " |InplaceDimShuffle{x} [id BB]\n", - " |TensorConstant{1.0} [id BC]\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "aesara.dprint(model.logpt())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Observe that , as explained at the beginning, there has been no computation yet. The actual computation is performed after compiling and passing the input. To do so, let's take as input example the initial point of the model, which can be obtaining by using the {meth}`~pymc.Model.initial_point` method." - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "mgntEABvQyhu", - "outputId": "319b8e86-388a-4ca5-bd3e-c27a24dd306c" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'z': array([0., 0.])}" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "point = model.initial_point()\n", - "point" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can compute the log probability for this point in this model using the {meth}`~pymc.Model.compile_logp` method. " - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array(-2.53102425)" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.compile_logp()(point)" - ] - }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "(pymc_aesara)=\n", + "\n", + "# PyMC and Aesara\n", + "\n", + "**Authors:** [Ricardo Vieira](https://github.com/ricardoV94) and [Juan Orduz](https://juanitorduz.github.io/)\n", + "\n", + "In this notebook we want to give an introduction of how PyMC models translate to Aesara graphs. The purpose is not to give a detailed description of all [`aesara`](https://github.com/aesara-devs/aesara)'s capabilities but rather focus on the main concepts to understand its connection with PyMC. For a more detailed description of the project please refer to the official documentation." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "heading_collapsed": true, + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "## Prepare Notebook\n", + "\n", + "First import the required libraries." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "hidden": true, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "# Aesara version: 2.6.6\n", + "# PyMC version: 4.0.0\n", + "\n" + ] + } + ], + "source": [ + "import aesara\n", + "import aesara.tensor as at\n", + "import pymc as pm\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import scipy.stats\n", + "\n", + "\n", + "print(f\"\"\"\n", + "# Aesara version: {aesara.__version__}\n", + "# PyMC version: {pm.__version__}\n", + "\"\"\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "## Introduction to Aesara\n", + "\n", + "We start by looking into `aesara`. According to their documentation\n", + "\n", + "> Aesara is a Python library that allows one to define, optimize, and efficiently evaluate mathematical expressions involving multi-dimensional arrays." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "![aesara logo](https://raw.githubusercontent.com/aesara-devs/aesara/main/doc/images/aesara_logo_2400.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "### A simple example\n", + "\n", + "To begin, we define some aesara tensors and show how to perform some basic operations." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "x type: TensorType(float64, ())\n", + "x name = x\n", + "---\n", + "y type: TensorType(float64, (None,))\n", + "y name = y\n", + "\n" + ] + } + ], + "source": [ + "x = at.scalar(name=\"x\")\n", + "y = at.vector(name=\"y\")\n", + "\n", + "print(f\"\"\"\n", + "x type: {x.type}\n", + "x name = {x.name}\n", + "---\n", + "y type: {y.type}\n", + "y name = {y.name}\n", + "\"\"\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Now that we have defined the `x` and `y` tensors, we can create a new one by adding them together." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "z = x + y\n", + "z.name = \"x + y\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "To make the computation a bit more complex let us take the logarithm of the resulting tensor." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "w = at.log(z)\n", + "w.name = \"log(x + y)\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "We can use the {func}`~aesara.dprint` function to print the computational graph of any given tensor." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{log,no_inplace} [id A] 'log(x + y)'\n", + " |Elemwise{add,no_inplace} [id B] 'x + y'\n", + " |InplaceDimShuffle{x} [id C]\n", + " | |x [id D]\n", + " |y [id E]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "aesara.dprint(obj=w)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Note that this graph does not do any computation (yet!). It is simply defining the sequence of steps to be done. We can use {func}`~aesara.function` to define a callable object so that we can push values trough the graph." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "f = aesara.function(inputs=[x, y], outputs=w)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Now that the graph is compiled, we can push some concrete values:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is nothing else than evaluating the log probability of a normal distribution." + "data": { + "text/plain": [ + "array([0., 1.])" ] - }, + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f(x=0, y=[1, np.e])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + ":::{tip}\n", + "Sometimes we just want to debug, we can use {meth}`~aesara.graph.basic.Variable.eval` for that:\n", + ":::" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "-2.5310242469692907" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "scipy.stats.norm.logpdf(x=np.array([0, 0]), loc=np.array([0, 0]), scale=np.array([1, 2])).sum()" + "data": { + "text/plain": [ + "array([0., 1.])" ] - }, + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w.eval({x: 0, y:[1, np.e]})" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "You can set intermediate values as well" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - ":::{tip}\n", - "There is a handy PyMC function to compute the log probability of a random variable and a given point, {func}`~pm.distributions.logprob.logp` (and similarly {func}`~pm.distributions.logprob.logcdf`)." + "data": { + "text/plain": [ + "array([0., 1.])" ] - }, + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w.eval({z: [1, np.e]})" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "### Aesara is clever!\n", + "\n", + "One of the most important features of `aesara` is that it can automatically optimize the mathematical operations inside a graph. Let's consider a simple example:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{true_div,no_inplace} [id A] 'a / b'\n", + " |a [id B]\n", + " |b [id C]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = at.scalar(name=\"a\")\n", + "b = at.scalar(name=\"b\")\n", + "\n", + "c = a / b\n", + "c.name = \"a / b\"\n", + "\n", + "aesara.dprint(c)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Now let us multiply `b` times `c`. This should result in simply `a`." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{mul,no_inplace} [id A] 'b * c'\n", + " |b [id B]\n", + " |Elemwise{true_div,no_inplace} [id C] 'a / b'\n", + " |a [id D]\n", + " |b [id B]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "d = b * c\n", + "d.name = \"b * c\"\n", + "\n", + "aesara.dprint(d)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "The graph shows the full computation, but once we compile it the operation becomes the identity on `a` as expected." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 42, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "zCmmLzwfTL9N", - "outputId": "7dc9cd0e-5c42-4137-ff88-de5d286f81b8" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array(-2.53102425)" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# We could have extracted `z` via model.basic_RVs[0]\n", - "pm.logp(rv=z, value=point[\"z\"]).sum().eval()" - ] + "name": "stdout", + "output_type": "stream", + "text": [ + "DeepCopyOp [id A] 'a' 0\n", + " |a [id B]\n" + ] }, { - "cell_type": "markdown", - "metadata": { - "id": "WdZcUfvLUkwK" - }, - "source": [ - "### What are value variables and why are they important?\n", - "\n", - "As he have seen above, a `logp` graph does not have random variables. Instead it's defined in terms of input (value) variables. When we want to sample, each random variable (RV) is replaced by a respective input (value) variable. Let's see how this works through some examples. RV and value variables can be observed in these [`scipy`](https://github.com/scipy/scipy) operations:" + "data": { + "text/plain": [ + "" ] - }, + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "g = aesara.function(inputs=[a, b], outputs=d)\n", + "\n", + "aesara.dprint(g)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "### What is in an Aesara graph?\n", + "\n", + "The following diagram shows the basic structure of an `aesara` graph.\n", + "\n", + "![aesara graph](https://raw.githubusercontent.com/aesara-devs/aesara/main/doc/tutorial/apply.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "We can can make these concepts more tangible by explicitly indicating them in the first example from the section above. Let us compute the graph components for the tensor `z`. " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "z type: TensorType(float64, (None,))\n", + "z name = x + y\n", + "z owner = Elemwise{add,no_inplace}(InplaceDimShuffle{x}.0, y)\n", + "z owner inputs = [InplaceDimShuffle{x}.0, y]\n", + "z owner op = Elemwise{add,no_inplace}\n", + "z owner output = [x + y]\n", + "\n" + ] + } + ], + "source": [ + "print(f\"\"\"\n", + "z type: {z.type}\n", + "z name = {z.name}\n", + "z owner = {z.owner}\n", + "z owner inputs = {z.owner.inputs}\n", + "z owner op = {z.owner.op}\n", + "z owner output = {z.owner.outputs}\n", + "\"\"\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "The following code snippet helps us understand these concepts by going through the computational graph of `w`. The actual code is not as important here, the focus is on the outputs." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---\n", + "Checking variable log(x + y) of type TensorType(float64, (None,))\n", + " > Op is Elemwise{log,no_inplace}\n", + " > Input 0 is x + y\n", + "---\n", + "Checking variable x + y of type TensorType(float64, (None,))\n", + " > Op is Elemwise{add,no_inplace}\n", + " > Input 0 is InplaceDimShuffle{x}.0\n", + " > Input 1 is y\n", + "---\n", + "Checking variable InplaceDimShuffle{x}.0 of type TensorType(float64, (1,))\n", + " > Op is InplaceDimShuffle{x}\n", + " > Input 0 is x\n", + "---\n", + "Checking variable y of type TensorType(float64, (None,))\n", + " > y is a root variable\n", + "---\n", + "Checking variable x of type TensorType(float64, ())\n", + " > x is a root variable\n" + ] + } + ], + "source": [ + "# start from the top\n", + "stack = [w]\n", + "\n", + "while stack:\n", + " print(\"---\")\n", + " var = stack.pop(0)\n", + " print(f\"Checking variable {var} of type {var.type}\")\n", + " # check variable is not a root variable\n", + " if var.owner is not None:\n", + " print(f\" > Op is {var.owner.op}\")\n", + " # loop over the inputs\n", + " for i, input in enumerate(var.owner.inputs):\n", + " print(f\" > Input {i} is {input}\")\n", + " stack.append(input)\n", + " else:\n", + " print(f\" > {var} is a root variable\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Note that this is very similar to the output of {func}`~aesara.dprint` function introduced above." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{log,no_inplace} [id A] 'log(x + y)'\n", + " |Elemwise{add,no_inplace} [id B] 'x + y'\n", + " |InplaceDimShuffle{x} [id C]\n", + " | |x [id D]\n", + " |y [id E]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "aesara.dprint(w)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "### Graph manipulation 101\n", + "\n", + "Another interesting feature of Aesara is the ability to manipulate the computational graph, something that is not possible with TensorFlow or PyTorch. Here we continue with the example above in order to illustrate the main idea around this technique." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 43, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "7Sznx-MLs691", - "outputId": "1dac8ba2-899a-47f7-d175-04502b73fd76" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rv = scipy.stats.norm(0, 1)\n", - "\n", - "# Equivalent to rv = pm.Normal(\"rv\", 0, 1)\n", - "scipy.stats.norm(0, 1)" + "data": { + "text/plain": [ + "[x, y]" ] - }, + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# get input tensors\n", + "list(aesara.graph.graph_inputs(graphs=[w]))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "As a simple example, let's add an {func}`~aesara.tensor.exp` before the {func}`~aesara.tensor.log` (to get the identity function)." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "parent_of_w = w.owner.inputs[0] # get z tensor\n", + "new_parent_of_w = at.exp(parent_of_w) # modify the parent of w\n", + "new_parent_of_w.name = \"exp(x + y)\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Note that the graph of `w` has actually not changed:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{log,no_inplace} [id A] 'log(x + y)'\n", + " |Elemwise{add,no_inplace} [id B] 'x + y'\n", + " |InplaceDimShuffle{x} [id C]\n", + " | |x [id D]\n", + " |y [id E]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "aesara.dprint(w)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "To modify the graph we need to use the {func}`~aesara.clone_replace` function, which *returns a copy of the initial subgraph with the corresponding substitutions.*" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{log,no_inplace} [id A] 'log(exp(x + y))'\n", + " |Elemwise{exp,no_inplace} [id B] 'exp(x + y)'\n", + " |Elemwise{add,no_inplace} [id C] 'x + y'\n", + " |InplaceDimShuffle{x} [id D]\n", + " | |x [id E]\n", + " |y [id F]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_w = aesara.clone_replace(output=[w], replace={parent_of_w: new_parent_of_w})[0]\n", + "new_w.name = \"log(exp(x + y))\"\n", + "aesara.dprint(new_w)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Finally, we can test the modified graph by passing some input to the new graph." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 0.07295099, 0.069974 , -0.07544367])" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - " # Equivalent to rv_draw = pm.draw(rv, 3)\n", - "rv.rvs(3)" + "data": { + "text/plain": [ + "array([1. , 2.71828183])" ] - }, + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_w.eval({x: 0, y:[1, np.e]})" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "As expected, the new graph is just the identity function." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + ":::{note}\n", + "Again, note that `aesara` is clever enough to omit the `exp` and `log` once we compile the function.\n", + ":::" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{add,no_inplace} [id A] 'x + y' 1\n", + " |InplaceDimShuffle{x} [id B] 0\n", + " | |x [id C]\n", + " |y [id D]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f = aesara.function(inputs=[x, y], outputs=new_w)\n", + "\n", + "aesara.dprint(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 45, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "-1.7001885332046727" - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Equivalent to rv_logp = pm.logp(rv, 1.25)\n", - "rv.logpdf(1.25)" + "data": { + "text/plain": [ + "array([1. , 2.71828183])" ] - }, + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f(x=0, y=[1, np.e])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "### Aesara RandomVariables\n", + "\n", + "Now that we have seen aesara's basics we want to move in the direction of random variables.\n", + "\n", + "How do we generate random numbers in [`numpy`](https://github.com/numpy/numpy)? To illustrate it we can sample from a normal distribution:" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "rng = np.random.default_rng()\n", + "\n", + "a = rng.normal(loc=0, scale=1, size=1_000)\n", + "\n", + "fig, ax = plt.subplots(figsize=(8, 6))\n", + "ax.hist(a, color=\"C0\", bins=15)\n", + "ax.set(title=\"Samples from a normal distribution using numpy\", ylabel=\"count\");" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Now let's try to do it in Aesara." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next, let's look at how these value variables behave in a simple model." + "data": { + "text/plain": [ + "aesara.tensor.var.TensorVariable" ] - }, + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y = at.random.normal(loc=0, scale=1, name=\"y\")\n", + "type(y)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Next, we show the graph using {func}`~aesara.dprint`." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y'\n", + " |RandomGeneratorSharedVariable() [id B]\n", + " |TensorConstant{[]} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{0} [id E]\n", + " |TensorConstant{1} [id F]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "aesara.dprint(y)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "The inputs are always in the following order:\n", + "1. `rng` shared variable\n", + "2. `size`\n", + "3. `dtype` (number code)\n", + "4. `arg1`\n", + "5. `arg2`\n", + "6. `argn`" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "We *could* sample by calling {meth}`~aesara.graph.basic.Variable.eval`. on the random variable." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 46, - "metadata": { - "id": "dejQBR2FUnM3" - }, - "outputs": [], - "source": [ - "with pm.Model() as model_2:\n", - " mu = pm.Normal(name=\"mu\", mu=0, sigma=2)\n", - " sigma = pm.HalfNormal(name=\"sigma\", sigma=3)\n", - " x = pm.Normal(name=\"x\", mu=mu, sigma=sigma)" + "data": { + "text/plain": [ + "array(-2.92452482)" ] - }, + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y.eval()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Note however that these samples are always the same!" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 0: -2.924524821173065\n", + "Sample 1: -2.924524821173065\n", + "Sample 2: -2.924524821173065\n", + "Sample 3: -2.924524821173065\n", + "Sample 4: -2.924524821173065\n", + "Sample 5: -2.924524821173065\n", + "Sample 6: -2.924524821173065\n", + "Sample 7: -2.924524821173065\n", + "Sample 8: -2.924524821173065\n", + "Sample 9: -2.924524821173065\n" + ] + } + ], + "source": [ + "for i in range(10):\n", + " print(f\"Sample {i}: {y.eval()}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "We always get the same samples! This has to do with the random seed step in the graph, i.e. `RandomGeneratorSharedVariable` (we will not go deeper into this subject here). We will show how to generate different samples with `pymc` below." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "## PyMC\n", + "\n", + "![pymc logo](https://raw.githubusercontent.com/pymc-devs/pymc/main/docs/logos/PyMC.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To do so, we start by defining a `pymc` normal distribution." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", + " |RandomGeneratorSharedVariable() [id B]\n", + " |TensorConstant{[]} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{0} [id E]\n", + " |TensorConstant{1.0} [id F]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x = pm.Normal.dist(mu=0, sigma=1)\n", + "aesara.dprint(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Observe that `x` is just a normal `RandomVariable` and which is the same as `y` except for the `rng`." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "We can try to generate samples by calling {meth}`~aesara.graph.basic.Variable.eval` as above." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 0: 1.0945684776616378\n", + "Sample 1: 1.0945684776616378\n", + "Sample 2: 1.0945684776616378\n", + "Sample 3: 1.0945684776616378\n", + "Sample 4: 1.0945684776616378\n", + "Sample 5: 1.0945684776616378\n", + "Sample 6: 1.0945684776616378\n", + "Sample 7: 1.0945684776616378\n", + "Sample 8: 1.0945684776616378\n", + "Sample 9: 1.0945684776616378\n" + ] + } + ], + "source": [ + "for i in range(10):\n", + " print(f\"Sample {i}: {x.eval()}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "As before we get the same value for all iterations. The correct way to generate random samples is using {func}`~pymc.draw`." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(figsize=(8, 6))\n", + "ax.hist(pm.draw(x, draws=1_000), color=\"C1\", bins=15)\n", + "ax.set(title=\"Samples from a normal distribution using pymc\", ylabel=\"count\");" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Yay! We learned how to sample from a `pymc` distribution!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "### What is going on behind the scenes?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "We can now look into how this is done inside a model." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", + " |RandomGeneratorSharedVariable() [id B]\n", + " |TensorConstant{[]} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{0} [id E]\n", + " |TensorConstant{1.0} [id F]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with pm.Model() as model:\n", + " z = pm.Normal(name=\"z\", mu=np.array([0, 0]), sigma=np.array([1, 2]))\n", + "\n", + "aesara.dprint(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "We are just creating random variables like we saw before, but now registering them in a PyMC model. To extract the list of random variables we can simply do:" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Each model RV is related to a \"value variable\":" + "data": { + "text/plain": [ + "[z]" ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "iXnvzBqorsX-", - "outputId": "bb779d64-5c1b-4233-9131-f64f5dd0e77a" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{mu: mu, sigma: sigma_log__, x: x}" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.basic_RVs" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z'\n", + " |RandomGeneratorSharedVariable() [id B]\n", + " |TensorConstant{[]} [id C]\n", + " |TensorConstant{11} [id D]\n", + " |TensorConstant{(2,) of 0} [id E]\n", + " |TensorConstant{[1. 2.]} [id F]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "aesara.dprint(model.basic_RVs[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "We can try to sample via {meth}`~aesara.graph.basic.Variable.eval` as above and it is no surprise that we are getting the same samples at each iteration." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 0: [-0.13110774 1.3425154 ]\n", + "Sample 1: [-0.13110774 1.3425154 ]\n", + "Sample 2: [-0.13110774 1.3425154 ]\n", + "Sample 3: [-0.13110774 1.3425154 ]\n", + "Sample 4: [-0.13110774 1.3425154 ]\n", + "Sample 5: [-0.13110774 1.3425154 ]\n", + "Sample 6: [-0.13110774 1.3425154 ]\n", + "Sample 7: [-0.13110774 1.3425154 ]\n", + "Sample 8: [-0.13110774 1.3425154 ]\n", + "Sample 9: [-0.13110774 1.3425154 ]\n" + ] + } + ], + "source": [ + "for i in range(10):\n", + " print(f\"Sample {i}: {z.eval()}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Again, the correct way of sampling is via {func}`~pymc.draw`. " + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 0: [-0.13000873 1.83747847]\n", + "Sample 1: [-2.20247479 1.63060671]\n", + "Sample 2: [0.26204624 0.6059056 ]\n", + "Sample 3: [-0.20608794 -1.08374123]\n", + "Sample 4: [-0.125258 2.02515987]\n", + "Sample 5: [ 0.80726519 -1.9575385 ]\n", + "Sample 6: [-1.02118273 2.66981172]\n", + "Sample 7: [0.20227814 0.04347595]\n", + "Sample 8: [ 0.34115171 -2.20896023]\n", + "Sample 9: [0.83476065 0.37879695]\n" + ] + } + ], + "source": [ + "for i in range(10):\n", + " print(f\"Sample {i}: {pm.draw(z)}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(figsize=(8, 8))\n", + "z_draws = pm.draw(vars=z, draws=10_000)\n", + "ax.hist2d(x=z_draws[:, 0], y=z_draws[:, 1], bins=25)\n", + "ax.set(title=\"Samples Histogram\");" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "### Enough with Random Variables, I want to see some (log)probabilities!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Recall we have defined the following model above:" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/latex": [ + "$$\n", + " \\begin{array}{rcl}\n", + " \\text{z} &\\sim & \\operatorname{N}(\\text{},~\\text{})\n", + " \\end{array}\n", + " $$" ], - "source": [ - "model_2.rvs_to_values" + "text/plain": [ + "" ] - }, + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "PyMC is able to convert `RandomVariable`s to their respective probability functions. One simple way is to use {func}`~pm.distributions.logprob.logp`, which takes as first input a RandomVariable, and as second input the value at which the logp is evaluated (we will discuss this in more detail later)." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "z_value = at.vector(name=\"z\")\n", + "z_logp = pm.logp(rv=z, value=z_value)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "`z_logp` contains the Aesara graph that represents the log-probability of the normal random variable `z`, evaluated at `z_value`." + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Check{sigma > 0} [id A] 'z_logprob'\n", + " |Elemwise{sub,no_inplace} [id B]\n", + " | |Elemwise{sub,no_inplace} [id C]\n", + " | | |Elemwise{mul,no_inplace} [id D]\n", + " | | | |InplaceDimShuffle{x} [id E]\n", + " | | | | |TensorConstant{-0.5} [id F]\n", + " | | | |Elemwise{pow,no_inplace} [id G]\n", + " | | | |Elemwise{true_div,no_inplace} [id H]\n", + " | | | | |Elemwise{sub,no_inplace} [id I]\n", + " | | | | | |z [id J]\n", + " | | | | | |TensorConstant{(2,) of 0} [id K]\n", + " | | | | |TensorConstant{[1. 2.]} [id L]\n", + " | | | |InplaceDimShuffle{x} [id M]\n", + " | | | |TensorConstant{2} [id N]\n", + " | | |InplaceDimShuffle{x} [id O]\n", + " | | |Elemwise{log,no_inplace} [id P]\n", + " | | |Elemwise{sqrt,no_inplace} [id Q]\n", + " | | |TensorConstant{6.283185307179586} [id R]\n", + " | |Elemwise{log,no_inplace} [id S]\n", + " | |TensorConstant{[1. 2.]} [id L]\n", + " |All [id T]\n", + " |Elemwise{gt,no_inplace} [id U]\n", + " |TensorConstant{[1. 2.]} [id L]\n", + " |InplaceDimShuffle{x} [id V]\n", + " |TensorConstant{0.0} [id W]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "aesara.dprint(z_logp)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + ":::{tip}\n", + "There is also a handy PyMC function to compute the log cumulative probability of a random variable {func}`~pm.distributions.logprob.logcdf`." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Observe that, as explained at the beginning, there has been no computation yet. The actual computation is performed after compiling and passing the input. For illustration purposes alone, we will again use the handy `eval` method." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Observe that for sigma the associated value is in the *log* scale as in practice we require unbounded values." + "data": { + "text/plain": [ + "array([-0.91893853, -1.61208571])" ] - }, + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "z_logp.eval({z_value: [0, 0]})" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "This is nothing else than evaluating the log probability of a normal distribution." + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 48, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "xsqHFQ0srsX6", - "outputId": "adfc9a9d-c411-4551-f534-c944bb9e1610" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[mu, sigma_log__, x]" - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model_2.value_vars" + "data": { + "text/plain": [ + "array([-0.91893853, -1.61208571])" ] - }, + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "scipy.stats.norm.logpdf(x=np.array([0, 0]), loc=np.array([0, 0]), scale=np.array([1, 2]))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "PyMC Models provide some helpful routines to facilitating the conversion of `RandomVariable`s to probability functions. {meth}`~pymc.Model.logpt`, for instance can be used to extract the joint probability of all variables in the model:" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elemwise{mul,no_inplace} [id A]\n", + " |Check{sigma > 0} [id B] 'z_logprob'\n", + " | |Elemwise{sub,no_inplace} [id C]\n", + " | | |Elemwise{sub,no_inplace} [id D]\n", + " | | | |Elemwise{mul,no_inplace} [id E]\n", + " | | | | |InplaceDimShuffle{x} [id F]\n", + " | | | | | |TensorConstant{-0.5} [id G]\n", + " | | | | |Elemwise{pow,no_inplace} [id H]\n", + " | | | | |Elemwise{true_div,no_inplace} [id I]\n", + " | | | | | |Elemwise{sub,no_inplace} [id J]\n", + " | | | | | | |z [id K]\n", + " | | | | | | |TensorConstant{(2,) of 0} [id L]\n", + " | | | | | |TensorConstant{[1. 2.]} [id M]\n", + " | | | | |InplaceDimShuffle{x} [id N]\n", + " | | | | |TensorConstant{2} [id O]\n", + " | | | |InplaceDimShuffle{x} [id P]\n", + " | | | |Elemwise{log,no_inplace} [id Q]\n", + " | | | |Elemwise{sqrt,no_inplace} [id R]\n", + " | | | |TensorConstant{6.283185307179586} [id S]\n", + " | | |Elemwise{log,no_inplace} [id T]\n", + " | | |TensorConstant{[1. 2.]} [id M]\n", + " | |All [id U]\n", + " | |Elemwise{gt,no_inplace} [id V]\n", + " | |TensorConstant{[1. 2.]} [id M]\n", + " | |InplaceDimShuffle{x} [id W]\n", + " | |TensorConstant{0.0} [id X]\n", + " |InplaceDimShuffle{x} [id Y]\n", + " |TensorConstant{1.0} [id Z]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "aesara.dprint(model.logpt(sum=False))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Because we only have one variable, this function is equivalent to what we obtained by manually calling `pm.logp` before. We can also use a helper {meth}`~pymc.Model.compile_logp` to return an already compiled Aesara function of the model logp." + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "logp_function = model.compile_logp(sum=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "This function expects a \"point\" dictionary as input. We could create it ourselves, but just to illustrate another useful Model method, let's call {meth}`~pymc.Model.initial_point`, which returns the point that most samplers use when deciding where to start sampling." + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now that we know how to extract the model variables, we can compute the element-wise log-probability of the model for specific values." + "data": { + "text/plain": [ + "{'z': array([0., 0.])}" ] - }, + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "point = model.initial_point()\n", + "point" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 49, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "Y2BIoKk5U4fQ", - "outputId": "a9b67ac9-9fc0-4da8-dabf-90ed7d5b80e9" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ -1.61208571, -11.32440364, 9.08106147])" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# extract values as aesara.tensor.var.TensorVariable\n", - "mu_value = model_2.rvs_to_values[mu]\n", - "sigma_log_value = model_2.rvs_to_values[sigma]\n", - "x_value = model_2.rvs_to_values[x]\n", - "# element-wise log-probability of the model (we do not take te sum)\n", - "logp_graph = at.stack(model_2.logpt(sum=False))\n", - "# evaluate by passing concrete values\n", - "logp_graph.eval({mu_value: 0, sigma_log_value: -10, x_value:0})" + "data": { + "text/plain": [ + "[array([-0.91893853, -1.61208571])]" ] - }, + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "logp_function(point)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "### What are value variables and why are they important?\n", + "\n", + "As he have seen above, a `logp` graph does not have random variables. Instead it's defined in terms of input (value) variables. When we want to sample, each random variable (RV) is replaced by a logp function evaluated at the respective input (value) variable. Let's see how this works through some examples. RV and value variables can be observed in these [`scipy`](https://github.com/scipy/scipy) operations:" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This equivalent to:" + "data": { + "text/plain": [ + "" ] - }, + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rv = scipy.stats.norm(0, 1)\n", + "\n", + "# Equivalent to rv = pm.Normal(\"rv\", 0, 1)\n", + "scipy.stats.norm(0, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 50, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "mu_value -> -1.612085713764618\n", - "sigma_log_value -> -11.324403641427345 \n", - "x_value -> 9.081061466795328\n", - "\n" - ] - } - ], - "source": [ - "print(f\"\"\"\n", - "mu_value -> {scipy.stats.norm.logpdf(x=0, loc=0, scale=2)}\n", - "sigma_log_value -> {- 10 + scipy.stats.halfnorm.logpdf(x=np.exp(-10), loc=0, scale=3)} \n", - "x_value -> {scipy.stats.norm.logpdf(x=0, loc=0, scale=np.exp(-10))}\n", - "\"\"\")\n" + "data": { + "text/plain": [ + "array([-0.17977245, -0.68732524, 1.20093002])" ] - }, + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + " # Equivalent to rv_draw = pm.draw(rv, 3)\n", + "rv.rvs(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - ":::{Note}\n", - "For `sigma_log_value` we add the $-10$ term for the `scipy` and `aesara` to match because of the jacobian.\n", - ":::" + "data": { + "text/plain": [ + "-1.7001885332046727" ] - }, + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Equivalent to rv_logp = pm.logp(rv, 1.25)\n", + "rv.logpdf(1.25)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Next, let's look at how these value variables behave in a slightly more complex model." + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "with pm.Model() as model_2:\n", + " mu = pm.Normal(name=\"mu\", mu=0, sigma=2)\n", + " sigma = pm.HalfNormal(name=\"sigma\", sigma=3)\n", + " x = pm.Normal(name=\"x\", mu=mu, sigma=sigma)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Each model RV is related to a \"value variable\":" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The method {meth}`~pymc.Model.compile_logp` is a helper that creates a compiled aesara function of the model `logp`, which takes a dictionary of `{value variable name : value}` as inputs:" + "data": { + "text/plain": [ + "{mu: mu, sigma: sigma_log__, x: x}" ] - }, + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model_2.rvs_to_values" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Observe that for sigma the associated value is in the *log* scale as in practice we require unbounded values for NUTS sampling." + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 51, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "wFAUqf0qU50W", - "outputId": "3480b833-f2c7-43a3-d87f-b2149f67351f" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[array(-1.61208571), array(-11.32440364), array(9.08106147)]" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model_2.compile_logp(sum=False)({\"mu\": 0, \"sigma_log__\": -10, \"x\": 0})" + "data": { + "text/plain": [ + "[mu, sigma_log__, x]" ] - }, + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model_2.value_vars" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Now that we know how to extract the model variables, we can compute the element-wise log-probability of the model for specific values." + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The {class}`~pymc.Model` class also has methods to extract the gradient ({meth}`~pymc.Model.dlogpt`) and the hessian ({meth}`~pymc.Model.d2logpt`) of the `logp`." + "data": { + "text/plain": [ + "array([ -1.61208571, -11.32440364, 9.08106147])" ] - }, + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# extract values as aesara.tensor.var.TensorVariable\n", + "mu_value = model_2.rvs_to_values[mu]\n", + "sigma_log_value = model_2.rvs_to_values[sigma]\n", + "x_value = model_2.rvs_to_values[x]\n", + "# element-wise log-probability of the model (we do not take te sum)\n", + "logp_graph = at.stack(model_2.logpt(sum=False))\n", + "# evaluate by passing concrete values\n", + "logp_graph.eval({mu_value: 0, sigma_log_value: -10, x_value:0})" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "This equivalent to:" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "mu_value -> -1.612085713764618\n", + "sigma_log_value -> -11.324403641427345 \n", + "x_value -> 9.081061466795328\n", + "\n" + ] + } + ], + "source": [ + "print(f\"\"\"\n", + "mu_value -> {scipy.stats.norm.logpdf(x=0, loc=0, scale=2)}\n", + "sigma_log_value -> {- 10 + scipy.stats.halfnorm.logpdf(x=np.exp(-10), loc=0, scale=3)} \n", + "x_value -> {scipy.stats.norm.logpdf(x=0, loc=0, scale=np.exp(-10))}\n", + "\"\"\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + ":::{Note}\n", + "For `sigma_log_value` we add the $-10$ term for the `scipy` and `aesara` to match because of the jacobian.\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "As we already saw, we can also use the method {meth}`~pymc.Model.compile_logp` to obtained a compiled aesara function of the model `logp`, which takes a dictionary of `{value variable name : value}` as inputs:" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If you want to go deeper into the internals of `aesara` RandomVariables and `pymc` distributions please take a look into the [distribution developer guide](implementing-a-distribution)." + "data": { + "text/plain": [ + "[array(-1.61208571), array(-11.32440364), array(9.08106147)]" ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" } - ], - "metadata": { - "colab": { - "collapsed_sections": [ - "dIYxBNT_5HgW", - "JhmIBByY6T9h", - "k7spOYvvTdZL", - "qIMN2gHGzKof", - "aMM0sJy6z7Ur", - "WY6bUgqZztC3", - "58gng2f17_P7", - "C8Us4nEyhRdu", - "wkZR0gDWRAgK", - "wPw9kCvASOeJ", - "WdZcUfvLUkwK", - "EHH1hP0uzaWG", - "I_Ph4o7ZW_XD", - "jOI-E76fZ2bG", - "Rq2W2fmobmFg" - ], - "name": "PyMC intro.ipynb", - "provenance": [] - }, - "interpreter": { - "hash": "322221ae0b6adf1db1274c5f417c2cb5b37d259e740acb22a87dc0305ae08c77" - }, - "kernelspec": { - "display_name": "Python 3.9.12 ('pymc-dev-py39')", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.12" - } - }, - "nbformat": 4, - "nbformat_minor": 0 + ], + "source": [ + "model_2.compile_logp(sum=False)({\"mu\": 0, \"sigma_log__\": -10, \"x\": 0})" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "The {class}`~pymc.Model` class also has methods to extract the gradient ({meth}`~pymc.Model.dlogpt`) and the hessian ({meth}`~pymc.Model.d2logpt`) of the `logp`." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "If you want to go deeper into the internals of `aesara` RandomVariables and `pymc` distributions please take a look into the [distribution developer guide](implementing-a-distribution)." + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [ + "dIYxBNT_5HgW", + "JhmIBByY6T9h", + "k7spOYvvTdZL", + "qIMN2gHGzKof", + "aMM0sJy6z7Ur", + "WY6bUgqZztC3", + "58gng2f17_P7", + "C8Us4nEyhRdu", + "wkZR0gDWRAgK", + "wPw9kCvASOeJ", + "WdZcUfvLUkwK", + "EHH1hP0uzaWG", + "I_Ph4o7ZW_XD", + "jOI-E76fZ2bG", + "Rq2W2fmobmFg" + ], + "name": "PyMC intro.ipynb", + "provenance": [] + }, + "hide_input": false, + "interpreter": { + "hash": "322221ae0b6adf1db1274c5f417c2cb5b37d259e740acb22a87dc0305ae08c77" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 1 } From 52f5201b71853f0ea13f6ad683a5642b05b9c7e8 Mon Sep 17 00:00:00 2001 From: Ricardo Date: Mon, 6 Jun 2022 16:50:10 +0200 Subject: [PATCH 27/30] Fix some references and minor changes --- .../learn/core_notebooks/pymc_aesara.ipynb | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/docs/source/learn/core_notebooks/pymc_aesara.ipynb b/docs/source/learn/core_notebooks/pymc_aesara.ipynb index 7bd58b27d0..9f293c6ab5 100644 --- a/docs/source/learn/core_notebooks/pymc_aesara.ipynb +++ b/docs/source/learn/core_notebooks/pymc_aesara.ipynb @@ -1003,9 +1003,7 @@ } ], "source": [ - "rng = np.random.default_rng()\n", - "\n", - "a = rng.normal(loc=0, scale=1, size=1_000)\n", + "a = np.random.normal(loc=0, scale=1, size=1_000)\n", "\n", "fig, ax = plt.subplots(figsize=(8, 6))\n", "ax.hist(a, color=\"C0\", bins=15)\n", @@ -1025,7 +1023,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 57, "metadata": { "pycharm": { "name": "#%%\n" @@ -1035,17 +1033,17 @@ { "data": { "text/plain": [ - "aesara.tensor.var.TensorVariable" + "TensorType(float64, ())" ] }, - "execution_count": 24, + "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y = at.random.normal(loc=0, scale=1, name=\"y\")\n", - "type(y)" + "y.type" ] }, { @@ -1436,7 +1434,7 @@ } }, "source": [ - "We are just creating random variables like we saw before, but now registering them in a PyMC model. To extract the list of random variables we can simply do:" + "We are just creating random variables like we saw before, but now registering them in a `pymc` model. To extract the list of random variables we can simply do:" ] }, { @@ -1673,7 +1671,7 @@ } }, "source": [ - "PyMC is able to convert `RandomVariable`s to their respective probability functions. One simple way is to use {func}`~pm.distributions.logprob.logp`, which takes as first input a RandomVariable, and as second input the value at which the logp is evaluated (we will discuss this in more detail later)." + "`pymc` is able to convert `RandomVariable`s to their respective probability functions. One simple way is to use {func}`~pymc.distributions.logprob.logp`, which takes as first input a RandomVariable, and as second input the value at which the logp is evaluated (we will discuss this in more detail later)." ] }, { @@ -1765,7 +1763,7 @@ }, "source": [ ":::{tip}\n", - "There is also a handy PyMC function to compute the log cumulative probability of a random variable {func}`~pm.distributions.logprob.logcdf`." + "There is also a handy `pymc` function to compute the log cumulative probability of a random variable {func}`~pymc.distributions.logprob.logcdf`." ] }, { @@ -1846,7 +1844,7 @@ } }, "source": [ - "PyMC Models provide some helpful routines to facilitating the conversion of `RandomVariable`s to probability functions. {meth}`~pymc.Model.logpt`, for instance can be used to extract the joint probability of all variables in the model:" + "`pymc` models provide some helpful routines to facilitating the conversion of `RandomVariable`s to probability functions. {meth}`~pymc.Model.logpt`, for instance can be used to extract the joint probability of all variables in the model:" ] }, { From 9ece796f919bed538b4cbc034d9cd086f0f2da54 Mon Sep 17 00:00:00 2001 From: Ricardo Date: Mon, 6 Jun 2022 16:54:48 +0200 Subject: [PATCH 28/30] Add Model reference --- .../learn/core_notebooks/pymc_aesara.ipynb | 144 +++++++++--------- 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/docs/source/learn/core_notebooks/pymc_aesara.ipynb b/docs/source/learn/core_notebooks/pymc_aesara.ipynb index 9f293c6ab5..ec3ff37ce2 100644 --- a/docs/source/learn/core_notebooks/pymc_aesara.ipynb +++ b/docs/source/learn/core_notebooks/pymc_aesara.ipynb @@ -226,7 +226,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -403,7 +403,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 10, @@ -455,7 +455,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -501,7 +501,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 12, @@ -675,7 +675,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 15, @@ -785,7 +785,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 18, @@ -832,7 +832,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 19, @@ -927,7 +927,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 21, @@ -991,7 +991,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -1023,7 +1023,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 24, "metadata": { "pycharm": { "name": "#%%\n" @@ -1036,7 +1036,7 @@ "TensorType(float64, ())" ] }, - "execution_count": 57, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -1071,7 +1071,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'y'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1081,7 +1081,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 25, @@ -1133,7 +1133,7 @@ { "data": { "text/plain": [ - "array(-2.92452482)" + "array(0.92905265)" ] }, "execution_count": 26, @@ -1169,16 +1169,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: -2.924524821173065\n", - "Sample 1: -2.924524821173065\n", - "Sample 2: -2.924524821173065\n", - "Sample 3: -2.924524821173065\n", - "Sample 4: -2.924524821173065\n", - "Sample 5: -2.924524821173065\n", - "Sample 6: -2.924524821173065\n", - "Sample 7: -2.924524821173065\n", - "Sample 8: -2.924524821173065\n", - "Sample 9: -2.924524821173065\n" + "Sample 0: 0.929052652756385\n", + "Sample 1: 0.929052652756385\n", + "Sample 2: 0.929052652756385\n", + "Sample 3: 0.929052652756385\n", + "Sample 4: 0.929052652756385\n", + "Sample 5: 0.929052652756385\n", + "Sample 6: 0.929052652756385\n", + "Sample 7: 0.929052652756385\n", + "Sample 8: 0.929052652756385\n", + "Sample 9: 0.929052652756385\n" ] } ], @@ -1239,7 +1239,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1249,7 +1249,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 28, @@ -1297,16 +1297,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: 1.0945684776616378\n", - "Sample 1: 1.0945684776616378\n", - "Sample 2: 1.0945684776616378\n", - "Sample 3: 1.0945684776616378\n", - "Sample 4: 1.0945684776616378\n", - "Sample 5: 1.0945684776616378\n", - "Sample 6: 1.0945684776616378\n", - "Sample 7: 1.0945684776616378\n", - "Sample 8: 1.0945684776616378\n", - "Sample 9: 1.0945684776616378\n" + "Sample 0: -0.8310657629670953\n", + "Sample 1: -0.8310657629670953\n", + "Sample 2: -0.8310657629670953\n", + "Sample 3: -0.8310657629670953\n", + "Sample 4: -0.8310657629670953\n", + "Sample 5: -0.8310657629670953\n", + "Sample 6: -0.8310657629670953\n", + "Sample 7: -0.8310657629670953\n", + "Sample 8: -0.8310657629670953\n", + "Sample 9: -0.8310657629670953\n" ] } ], @@ -1337,7 +1337,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -1384,7 +1384,7 @@ } }, "source": [ - "We can now look into how this is done inside a model." + "We can now look into how this is done inside a {class}`~pymc.Model`." ] }, { @@ -1401,7 +1401,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A]\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{0} [id E]\n", @@ -1411,7 +1411,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 31, @@ -1475,7 +1475,7 @@ "output_type": "stream", "text": [ "normal_rv{0, (0, 0), floatX, False}.1 [id A] 'z'\n", - " |RandomGeneratorSharedVariable() [id B]\n", + " |RandomGeneratorSharedVariable() [id B]\n", " |TensorConstant{[]} [id C]\n", " |TensorConstant{11} [id D]\n", " |TensorConstant{(2,) of 0} [id E]\n", @@ -1485,7 +1485,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 33, @@ -1521,16 +1521,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [-0.13110774 1.3425154 ]\n", - "Sample 1: [-0.13110774 1.3425154 ]\n", - "Sample 2: [-0.13110774 1.3425154 ]\n", - "Sample 3: [-0.13110774 1.3425154 ]\n", - "Sample 4: [-0.13110774 1.3425154 ]\n", - "Sample 5: [-0.13110774 1.3425154 ]\n", - "Sample 6: [-0.13110774 1.3425154 ]\n", - "Sample 7: [-0.13110774 1.3425154 ]\n", - "Sample 8: [-0.13110774 1.3425154 ]\n", - "Sample 9: [-0.13110774 1.3425154 ]\n" + "Sample 0: [-1.97758523 3.67000753]\n", + "Sample 1: [-1.97758523 3.67000753]\n", + "Sample 2: [-1.97758523 3.67000753]\n", + "Sample 3: [-1.97758523 3.67000753]\n", + "Sample 4: [-1.97758523 3.67000753]\n", + "Sample 5: [-1.97758523 3.67000753]\n", + "Sample 6: [-1.97758523 3.67000753]\n", + "Sample 7: [-1.97758523 3.67000753]\n", + "Sample 8: [-1.97758523 3.67000753]\n", + "Sample 9: [-1.97758523 3.67000753]\n" ] } ], @@ -1563,16 +1563,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 0: [-0.13000873 1.83747847]\n", - "Sample 1: [-2.20247479 1.63060671]\n", - "Sample 2: [0.26204624 0.6059056 ]\n", - "Sample 3: [-0.20608794 -1.08374123]\n", - "Sample 4: [-0.125258 2.02515987]\n", - "Sample 5: [ 0.80726519 -1.9575385 ]\n", - "Sample 6: [-1.02118273 2.66981172]\n", - "Sample 7: [0.20227814 0.04347595]\n", - "Sample 8: [ 0.34115171 -2.20896023]\n", - "Sample 9: [0.83476065 0.37879695]\n" + "Sample 0: [-1.13812635 0.73080569]\n", + "Sample 1: [-2.53843834 0.63905086]\n", + "Sample 2: [ 1.23414716 -0.6985418 ]\n", + "Sample 3: [-0.07509846 0.7046108 ]\n", + "Sample 4: [-0.4407329 -3.47301204]\n", + "Sample 5: [0.34642982 1.03938203]\n", + "Sample 6: [ 0.4471714 -1.04602358]\n", + "Sample 7: [0.5208584 0.85399692]\n", + "Sample 8: [-0.79061811 -1.33057063]\n", + "Sample 9: [-1.62328737 3.10770738]\n" ] } ], @@ -1592,7 +1592,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -1651,7 +1651,7 @@ " $$" ], "text/plain": [ - "" + "" ] }, "execution_count": 37, @@ -1742,7 +1742,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 39, @@ -1893,7 +1893,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 42, @@ -1937,7 +1937,7 @@ } }, "source": [ - "This function expects a \"point\" dictionary as input. We could create it ourselves, but just to illustrate another useful Model method, let's call {meth}`~pymc.Model.initial_point`, which returns the point that most samplers use when deciding where to start sampling." + "This function expects a \"point\" dictionary as input. We could create it ourselves, but just to illustrate another useful {class}`~pymc.Model` method, let's call {meth}`~pymc.Model.initial_point`, which returns the point that most samplers use when deciding where to start sampling." ] }, { @@ -1999,7 +1999,7 @@ "source": [ "### What are value variables and why are they important?\n", "\n", - "As he have seen above, a `logp` graph does not have random variables. Instead it's defined in terms of input (value) variables. When we want to sample, each random variable (RV) is replaced by a logp function evaluated at the respective input (value) variable. Let's see how this works through some examples. RV and value variables can be observed in these [`scipy`](https://github.com/scipy/scipy) operations:" + "As he have seen above, a logp graph does not have random variables. Instead it's defined in terms of input (value) variables. When we want to sample, each random variable (RV) is replaced by a logp function evaluated at the respective input (value) variable. Let's see how this works through some examples. RV and value variables can be observed in these [`scipy`](https://github.com/scipy/scipy) operations:" ] }, { @@ -2014,7 +2014,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 46, @@ -2041,7 +2041,7 @@ { "data": { "text/plain": [ - "array([-0.17977245, -0.68732524, 1.20093002])" + "array([0.68972784, 2.21155968, 0.67678162])" ] }, "execution_count": 47, @@ -2279,7 +2279,7 @@ } }, "source": [ - "As we already saw, we can also use the method {meth}`~pymc.Model.compile_logp` to obtained a compiled aesara function of the model `logp`, which takes a dictionary of `{value variable name : value}` as inputs:" + "As we already saw, we can also use the method {meth}`~pymc.Model.compile_logp` to obtained a compiled aesara function of the model logp, which takes a dictionary of `{value variable name : value}` as inputs:" ] }, { @@ -2314,7 +2314,7 @@ } }, "source": [ - "The {class}`~pymc.Model` class also has methods to extract the gradient ({meth}`~pymc.Model.dlogpt`) and the hessian ({meth}`~pymc.Model.d2logpt`) of the `logp`." + "The {class}`~pymc.Model` class also has methods to extract the gradient ({meth}`~pymc.Model.dlogpt`) and the hessian ({meth}`~pymc.Model.d2logpt`) of the logp." ] }, { From 79212ef9e52266bb6ad5d139b30a36955022f16f Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Mon, 6 Jun 2022 21:18:05 +0200 Subject: [PATCH 29/30] correct func path references --- docs/source/learn/core_notebooks/pymc_aesara.ipynb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/source/learn/core_notebooks/pymc_aesara.ipynb b/docs/source/learn/core_notebooks/pymc_aesara.ipynb index ec3ff37ce2..f343e00d02 100644 --- a/docs/source/learn/core_notebooks/pymc_aesara.ipynb +++ b/docs/source/learn/core_notebooks/pymc_aesara.ipynb @@ -991,7 +991,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -1337,7 +1337,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -1592,7 +1592,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -1671,7 +1671,7 @@ } }, "source": [ - "`pymc` is able to convert `RandomVariable`s to their respective probability functions. One simple way is to use {func}`~pymc.distributions.logprob.logp`, which takes as first input a RandomVariable, and as second input the value at which the logp is evaluated (we will discuss this in more detail later)." + "`pymc` is able to convert `RandomVariable`s to their respective probability functions. One simple way is to use {func}`~pymc.logp`, which takes as first input a RandomVariable, and as second input the value at which the logp is evaluated (we will discuss this in more detail later)." ] }, { @@ -1763,7 +1763,7 @@ }, "source": [ ":::{tip}\n", - "There is also a handy `pymc` function to compute the log cumulative probability of a random variable {func}`~pymc.distributions.logprob.logcdf`." + "There is also a handy `pymc` function to compute the log cumulative probability of a random variable {func}`~pymc.logcdf`." ] }, { @@ -1774,7 +1774,7 @@ } }, "source": [ - "Observe that, as explained at the beginning, there has been no computation yet. The actual computation is performed after compiling and passing the input. For illustration purposes alone, we will again use the handy `eval` method." + "Observe that, as explained at the beginning, there has been no computation yet. The actual computation is performed after compiling and passing the input. For illustration purposes alone, we will again use the handy {meth}`~aesara.graph.basic.Variable.eval` method." ] }, { @@ -2370,7 +2370,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.9.12" } }, "nbformat": 4, From 4ce059a6fe34c9ca2aade794a8af36efbb875258 Mon Sep 17 00:00:00 2001 From: juanitorduz Date: Mon, 6 Jun 2022 23:00:39 +0200 Subject: [PATCH 30/30] typo --- docs/source/learn/core_notebooks/pymc_aesara.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/learn/core_notebooks/pymc_aesara.ipynb b/docs/source/learn/core_notebooks/pymc_aesara.ipynb index f343e00d02..329a3aa6d4 100644 --- a/docs/source/learn/core_notebooks/pymc_aesara.ipynb +++ b/docs/source/learn/core_notebooks/pymc_aesara.ipynb @@ -2279,7 +2279,7 @@ } }, "source": [ - "As we already saw, we can also use the method {meth}`~pymc.Model.compile_logp` to obtained a compiled aesara function of the model logp, which takes a dictionary of `{value variable name : value}` as inputs:" + "As we already saw, we can also use the method {meth}`~pymc.Model.compile_logp` to obtain a compiled aesara function of the model logp, which takes a dictionary of `{value variable name : value}` as inputs:" ] }, {