{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Different ways to load an input graph\n", "\n", "We recommend using the GML graph format to load a graph. You can also use the DOT format, which requires additional dependencies (either pydot or pygraphviz). \n", "\n", "DoWhy supports both loading a graph as a string, or as a file (with the extensions 'gml' or 'dot').\n", "\n", "Below is an example showing the different ways of loading the same graph. " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os, sys\n", "import random\n", "sys.path.append(os.path.abspath(\"../../\"))" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "\n", "import dowhy\n", "from dowhy.do_why import CausalModel\n", "from IPython.display import Image, display" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## I. Generating dummy data\n", "We generate some dummy data for three variables: X, Y and Z. " ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
XYZ
0001
11103
22206
33300
44404
55508
66609
77707
88802
99905
\n", "
" ], "text/plain": [ " X Y Z\n", "0 0 0 1\n", "1 1 10 3\n", "2 2 20 6\n", "3 3 30 0\n", "4 4 40 4\n", "5 5 50 8\n", "6 6 60 9\n", "7 7 70 7\n", "8 8 80 2\n", "9 9 90 5" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "z=[i for i in range(10)]\n", "random.shuffle(z)\n", "df = pd.DataFrame(data = {'Z': z, 'X': range(0,10), 'Y': range(0,100,10)})\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## II. Loading GML or DOT graphs\n", "### GML format" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model to find the causal effect of treatment X on outcome Y\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAAD7CAYAAABgzo9kAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdd1xT1/8/8FcShuwhS0BkVEUQBxQHgmgr6geKC7RqW611VK1aF1at1lFXW624R23rwj3qwFUVUVSoezAcLJG990ry/v3hN/mJgoAmuQHO8/HIQwzhnFfWO/ee3HsOj4gIDMMwTGNzgM91AoZhGEY+WIFnGIZppFiBZxiGaaRUuA7wOpFIhPT0dKSnpyMvLw8ikQiFhYUQCoXQ1NSEuro6NDQ0oK+vjxYtWsDQ0JDryAxTo5KSEpSXl0MkEqGgoAAAUFRUhMrKSgAAESEvL6/GvxcKhSgsLHxnHzo6OlBRqfltrK+vDx6PBwBQVVWFtrY2AEBPTw98Ph/q6urQ1NSs1/1iGg5OCnxpaSlu3bqFhw8f4vHjx4iMjERsbCwyMjIgEonq3E6zZs1gaWmJtm3bon379nB0dISzszMcHBykL2qGeZeSkhLk5eUhNzcXubm5KCoqQmFhIQoKClBaWori4mLk5+ejpKQEpaWlyM3NRWlpKUpKSpCfn4/i4mJUVFSgtLQUZWVltRZtZSb5MGjWrBk0NDSgpqYGLS0t6OvrQ0NDAxoaGjAwMICmpiY0NDSgp6cHLS0taGpqQkdHBzo6OtDW1oaBgYH0oqGhwfXdatJ4ijiKRiwWIyIiAmfOnMGVK1dw69YtlJeXw9DQUFqY27ZtixYtWsDc3BympqYwNDQEn8+XbqFItobKysqQk5ODlJQUpKamIikpCVFRUYiMjER0dDQqKipgbGwMDw8P9O7dGwMGDICVlZW87yLDsYqKCmRmZiIrKwupqanIyspCZmYmcnJyqhTw3NzcKv8vLy+vtj1dXV1oaGhAS0sLenp60NDQgKam5lvFTkNDA82aNauyJfxmoQQAAwMDAJDuiUrUZwv8TWKxGPn5+TX+bWVlJYqKiqT/Ly8vR0lJCQAgNzcXAKr9YJJ8aJWVlVX5UCstLUVeXp70w07yAVdaWirdQ3mTurp6lYKvr69f5WdDQ0MYGxvD2NgYZmZmMDY2hpGREdTU1Gq8X0ydHZBrgb9+/TqCgoJw4sQJpKSkwM7ODr169YKnpyc8PT1lXniFQiHu37+Pq1evIjQ0FKGhoSgoKICLiwv8/PwwatQomJuby7RPRn6ICOnp6UhOTkZycjJevHiBzMxMZGRkID09HZmZmcjMzJQO6b1OXV0dRkZGMDQ0rLHAVHedZCuUqT/J3k9NH6bV/T8nJwdZWVlvfdAaGBjAxMTkreJvYmKCli1bwsLCAhYWFjAzM+Po3jYIsi/wRUVF2L17N7Zu3YpHjx6hQ4cO8PPzw+DBg+Hk5CTLrmpVUVGBy5cv4/jx4zh27Bjy8vLg6+uLSZMmwcvLS6FZmLdlZGQgPj4eSUlJSE5Olv778uVLvHz5EikpKaioqJDe3sjICKamplXe8JI3veR6IyMjmJmZQU9Pj8N7xtRXfn4+0tLSpHteaWlp0g/w1/+flpaG7Oxs6d+pqanB3NwclpaWaNmyJczNzdGyZUtYWlrC0tIStra2MDY25vCecUp2Bb6oqAh//vknVq1aJS2kEyZMQJ8+fWTR/AerqKjAiRMnsH37dly6dAlOTk5YsGAB/P392Xi9nFRUVODly5eIi4t76/L8+fMqwwsGBgbSITpbW9u3fraysoKOjg6H94ZRFuXl5cjOzkZqairi4uKkw7Wv/5yYmCj9Pq9Zs2bS19KbF3t7e2hpaXF8j+Tmwwu8WCzGtm3bsHDhQlRWVmLatGmYMWOGUh/hcvfuXSxZsgSnTp2Cq6srNm7cCFdXV65jNVhZWVnS70CioqIQHR2NJ0+e4OXLl5C8vJo3b17tG8zW1hYWFhZQVVXl+F4wjUllZSWSk5Or3biIi4uT7gXw+XxYWFigbdu2cHBwgIODA+zt7eHo6AgjIyOO78UH+7ACf/fuXUycOBH379/H999/j3nz5il1YX/TvXv3MHPmTFy9ehUTJkzAypUroa+vz3UspZWbm4u7d+8iMjJSWsijoqKQlZUF4NWhd5I3R9u2bWFnZyct4mzIhFEm+fn50mIfGxuLJ0+eIDIyEjExMdI9SyMjIzg6OsLe3h4ODg7So/QkX5g3AO9X4IkIv/32GxYsWIDu3btj8+bNcHR0lEdAuSMiBAUFISAgAOrq6ti3bx/c3Ny4jsW53NxcREZG4s6dO9JLdHQ0iAgGBgawtbWVvugl/9rY2LDhLqbBk7z2JUfnSf5NTU0FALRo0QIuLi7Si6urq7J+2Vv/Ap+bm4vhw4cjJCQEy5cvx+zZsxvFmzorKwtff/01zp8/jxUrViAgIIDrSAojOS/h6tWriIiIwL1795CcnAwAaNWqFZydnatclPTFzDBylZaWhrt371a5JCYmAgAsLCzg7OyMrl27wsPDA126dEGzZs04TlzPAp+UlIT//e9/KCgowNGjRxvduDURYe3atZgzZw4mTJiADRs2QCAQcB1L5vLz8xEWFoawsDBcu3YNt27dQkVFBSwtLdGjR48qxbwhDbkxjKJlZ2dXKfg3btzAy5cvoa6uDldXV3h4eMDd3R09evTgYpiy7gX++fPn6N27NwwMDHD27FlYWFjIOxxn/vnnH4wcORI+Pj7Yv3//O09EaQiEQiGuX7+OM2fO4MKFC3j48CHEYjHatWsHd3d3eHh4wMPDA9bW1lxHZZgGLz4+HteuXZNuQMXExEAgEKBDhw7o27cvvL294ebmpoi6UrcCn5qaCnd3dxgZGeH8+fNN4ovIa9euoX///hg+fDh27NjR4IahMjMzce7cOQQHB+PChQvIzc1F69at4e3tDU9PT7i7uzfl44MZRmEyMjJw/fp1XLlyBWfPnsWzZ89gYGCAfv36wcfHB/3795fXETu1F/iSkhK4ubmhvLwc165dawyHDtXZmTNnMGjQIMyfPx+LFy/mOk6tcnJycODAAQQFBSE8PByqqqro2bMnvL294ePjg9atW3MdkWGavGfPniE4OBjBwcG4evUqRCIRunXrhi+++ALDhw+X5VE6B0C1mDhxIhkYGFBCQkJtN22Utm7dSnw+n0JCQriOUq2Kigo6efIk+fn5kbq6OmlpadGoUaPo2LFjVFhYyHU8hmHeoaCggI4ePUpfffUVaWlpkbq6Ovn7+9PJkyepsrLyQ5vf/84Cf/LkSeLxeHTkyJEP7ahB8/f3J0tLS8rNzeU6itSLFy8oICCATExMiM/nU+/evWnnzp2sqDNMA1VQUEB///039erVi/h8PpmamlJAQAC9ePHifZusucCXl5eTnZ0dffHFF+/beKORk5NDxsbGFBAQwHUUio6OppEjR5KqqipZWFjQ0qVLm+zeFcM0VgkJCbR06VKysLAgVVVV+vLLL+nJkyf1babmAr927VrS0ND4kE+PRmX9+vXUrFkzzoppamoqffPNNyQQCMjR0ZF2795NFRUVnGRRJnl5eVxHkCll2ktsKBrzY1ZeXk67du0iR0dHUlFRobFjx1JaWlpd/7z6Ai8SicjKyopmzpwpu6R1EB8fTwBIV1eXunTpQt7e3uTj40M+Pj7k7e1NAoGAANBff/2l0FxErx5oKysrhW/Fi8Vi2rp1K+nr65O1tTXt3r2bRCKRQjPU5Pz58zRixAgCQADoq6++osjISOnvQ0NDacCAAQSAPDw86Pjx4zLpt7KyklauXEk9evQggUAgkza5VFpaSsuWLaNu3boRn8+v9fZisZgOHjxIPj4+1KlTJ/Ly8iJfX1+aPHkyrVy5Um7vW7FYTOvWraM5c+ZQr169yN3dnWJiYuTSV23q+5g1dEKhkHbt2kVWVlZkYGBA27dvr8ufVV/gz58/TwAoOjpatilrceXKFerVq1e1n8jr168nADRw4EASi8UKzSWxaNEiMjU1VdiWc0FBAfn7+5OKigrNmTOHiouLFdJvfZSWlhIA0tPTq/aDJyUlhQBQcnKyTPstKSkhAwMDAmo9TqBBqOv9ycjIoF69epGdnR2Fh4dL3wsikYj27NlDhoaG9M0338glY2BgIGlpaVFlZSXl5ubS4MGDKSIiQi591UVjew3URVFREc2aNYsEAgENGzaMCgoK3nXz6gv8mDFjqHv37vJJ+A67du2is2fPvnX9/fv3SV1dnczNzSkzM1PhuSQSEhKIx+PR+fPn5d5Xbm4udenShYyNjenff/+Ve38fAgC1bdu22t8JhUICQEKhUOb9tm3btlG9uWu7PyKRiLp3704GBgaUlZVV7W1CQkLo888/l1u+Nm3ayKXt99XYXgN1deXKFTIzM6POnTtTdnZ2TTfbz6/u4Mlr165xsiDG4MGD0bdv3yrXlZSUYMSIEaioqMDu3bs5PQ6/VatW+OijjxAWFibXfoRCIT777DOkpaUhPDxcaebUfx+SqR4a45QPinbs2DHcvHkTc+fORfPmzau9Ta9evTB06FC59J+UlNTgTvhrrDw9PREWFoasrCwMGjSoxrWs3yrwWVlZiI2NRffu3eUe8k06Ojrg86tGmjFjBqKjozFnzhx8+umnCs/0Jjc3N9y8eVOuffz222+4d+8ezp49C1tbW7n2pUhEhBMnTmDChAmwtLREbm4uRo8ejebNm6N9+/a4ffu29Lb5+fkICAjA3LlzMXPmTPTt2xczZ86UriX6umfPnsHX1xcGBgZwdXVFSEiI9He3bt1C165dMX78eAQEBEAgEKCwsBDAq0nWfvnlF4wdOxYff/wx+vTpg0ePHkEkEuHKlSuYPn06rK2tkZycLF1icvv27TA0NASPx8OCBQuk/WzevBl8Ph/bt29/Z9sSJSUlmDlzJiZMmIAFCxZg3rx5KC4ufufjd+zYMQCo9X3g5+dXp8exrs/H6dOnMXHiRJSUlCAtLQ0TJ07ExIkTUVRUVOvztG3bNvB4POkHQ0FBAdasWSO9rj6vibo8Zu/znObm5r7zdaKs7OzscObMGdy+fRurV6+u/kZvbtPfvn2bAFBcXJwcdzDq5siRIwSAXFxcqLy8nOs4RES0fPly+uijj+TWfllZGZmYmNBPP/0ktz5kDe8YopH8nujVl3RJSUmkpaVFAGjZsmWUkJBAe/bsIQDUpUsXInr13UPr1q1p0aJF0jbS09OpdevWZGNjI/2ORrJ7/v3339OFCxdo69atpKmpSXw+nx48eEBERK1btyYDAwPp9wP+/v6Unp5ORETjxo2r8j2Tl5cXmZiYUEZGBl2/fp00NDQIAK1YsYL+/fdfGjt2LBUWFkq/Dzpz5oz0bxMTE2nEiBHS/9fUdn5+PlVWVlKXLl1o3Lhx0jH058+fSw8iqMnHH39MAOp85FBtj2NOTk6dng+JN5/nuj5Ptra2b90vyXV1fU3U9TF73+f0Xa8TZbdgwQIyMzOrrka+PQZ/7tw5AkD5+fmKSVeDxMRE0tfXJy0trfc5/lNutm7dSgYGBnJr/86dOwRAqe5zbepa4CXatGlT5TqxWEwmJiakpqZGRETz588nAJSSklLl73bt2kUApEcySQr866/VwMBAAkCjRo0iIiIjIyMCQFu2bCGxWEwPHjygvLw8Cg8Plx798+bl1KlTVXK+OcZZXl5OLVu2JF9fX+l1CxYsoLt37xIR1dr2hg0bCECVI46IXn0YvavAd+3atdrHpSZ1fRxrez4k3nye6/s8ve7N62rLUJfH7EOe05peJw1BTEwMAZC+/l7z9hh8aWkpAEBDQ+MdOwfyJRQK8cUXXyAvLw8bNmxAmzZtOMvyJm1t7Vp3pT+EZHUkExMTufUhayoqKhCLxdX+TigUvrUc35vjuDweDwYGBtIFtq9fvw4Ab63B2rNnTwDAjRs3qlyvq6sr/XnQoEEAgKioKADAli1boK2tjUmTJqFHjx4oLy+Hnp4ebt26BQcHBxDRW5fPPvusSs43p0xWU1PD999/j9OnTyM2NhYVFRV48uQJOnfuDAC1tn3hwgUAgI2NTZV23xyefJODgwMAIDo6+p23k6jr41jb8/Gh7ddFbRnq8ph9yHNa0+ukITA1NQXw/2vH6956RUkmuqlurFNRli9fjrCwMAwdOhRff/31W79PS0tTfKj/k52dLdc50u3s7ACgynitsrO2tq6ygPbrcnJyavxCsCaSN21CQkKV6yUv5He98SS3sbKyAgD4+/vj/v376Nu3L27evAk3Nzfs3r0b2dnZiI+Pr/bDuqYvrF43btw4aGlpYePGjfjnn3/g7+8v/V1tbUsWU5GsC1pXnp6eAIDw8PA63f5DHkdlaP91dXnMPuQ5rel10hA8ePAAwP+vHa97q8BL3oyZmZlyjlW9a9euYenSpWjZsqX0C5rXicViTJ8+nZNswKvHpb4Fqz7s7Ozg6uqKNWvWyK0PWXNxcUFGRgbi4+Pf+l1oaCg8PDzq1Z5kCzA4OLjK9UlJSQDwzqOKJLeRbLH99NNPsLOzw/nz57Fv3z4IhULMnz8f9vb20i/kXhcVFYWNGzfWmlFPTw/jxo3DX3/9hYMHD2Lw4MHS39XWtr29fbX3rzZffvklnJ2dsW7dOqSkpFR7m7KyMuzcuRPAhz2OdVHX9iXv4fLycgCv3sOSDQKq43pDdXnMPuQ5rel10hCsWbMGXbt2rf6AjDcHbcrKyqhZs2a0Z88e+QwYvUNOTg61bNmS+Hw+hYaGvvV7sVhMGzZsoIEDByo8m4S3tzcNHz5crn1cvHiR+Hw+bdmyRa79yMqTJ09IXV2dXFxcpFNblJeX06lTp8jU1PStscFWrVpJv2CTMDc3JwBUUVFBxcXF5OjoSBYWFlXGd6dNm0Zubm7SE83s7e2rjKeKxWKaNGkSDRgwQNq2hoYG5eTkENGrmTd1dXXJ1dWVSktLycbGhgDQN998Q3v37qUff/yRvLy8pGP6kpw1TeAWFxdHfD6ffv755yrX19b2vXv3SCAQkKGhIZ09e5ZKSkro0qVLpKOjU+sBDlFRUWRlZUU2NjZ09OhR6YyDxcXFdOnSJfrkk0/o5s2b0uvq8jjW9nwQEWVnZxMAsrGxkd6mru0PGjSIANCCBQvo6dOn9Pvvv0tPUDp79iwJhcJaM9TlMfuQ57Sm14my27RpE/H5fLp8+XJ1v67+RKfu3bvTpEmT5JusGiNHjiQAZGBgIJ2iQHLp06cPWVtbEwCFT6EgIRaLydDQkNatWyf3vpYsWUJ8Pp/++OMPufclCzExMeTn50c2NjZkbW1NrVq1oqFDh9LDhw+r3G7jxo3SL75+/vlnysvLo7Vr10qv++GHH6ikpIQKCgooICCAvLy8aObMmRQQEEBLly6lsrIyaVsXLlygzz77jDw9PWncuHE0depU2rhxY5WTqgBQ586daeXKlTRy5Ejy8fGRFtD4+Hjy9fUlAwMDMjU1pfHjx1NGRgYVFRXRkiVLpJnGjx9f3RdYRET0/fffV3vSUU1tS4SGhpKbmxtpa2uTra0trVy5kjw8POjbb7+lixcvvvPEsIKCAlq1ahV5e3uTtbU1OTo6UseOHWn+/PlvZantcazL8xEREUHffvstASAej0eLFy+m+/fv16l9olcbAF26dCFNTU3y8vKiJ0+ekLu7O3355Ze0f/9+WrNmTZ1eE3V5zN73OX3X60RZbd++nfh8Pi1btqymm1Rf4BcsWECWlpZyOfuwIbty5QoBoEePHimkv0WLFhGPx6PJkydTaWmpQvpkGEa5lZSU0MSJE6Uftu9QfYGPjY0lHo9X7bQBTdlXX32l8N22I0eOkK6uLrVu3VrppyxgGEa+zp8/T3Z2dqSnp0fHjh2r7ebVT1Vga2uLnj17Yu3ate898N/YvHz5EkeOHMG4ceMU2q+fnx9iYmLQrVs3eHl5wcvLC3fu3FFoBoZhuPX48WMMGzYM/fr1Q7t27fDo0aMqX+zXpMYDb5cuXYoLFy5Ijz9t6hYuXAhTU1OMHj1a4X23aNECu3fvxsWLF1FQUABXV1f4+PhUOSWfYZjG5/Lly/D29kaHDh2QlJSES5cu4dSpU2jZsmXdGnjX9r2vry85Ojo2+fHfmzdvkkAgoKCgIK6jkFgsptOnT1OvXr0IALVv355+/fVXmU/HyzAMN5KTk+nXX38lR0dHAkC9e/em4ODg92lqP4+o5gNRk5KS0LFjR3z55ZdYv369bD6SGpiioiI4OzvD1tYWZ8+eVarZ9O7cuYM///wTBw4cQEFBAby8vDBq1CgMGjSI0zORGYapn9LSUhw/fly6p66np4fPP/8cY8eOhYuLy/s2e+CdBR4ADhw4gJEjR2L//v34/PPP37ejBkksFmPo0KG4ceMG7t+/Lz1DT9mUl5fj1KlT2L17N86dOwcNDQ30798fPj4++N///gdjY2OuIzIM84aMjAycPXsWwcHBOHfuHMrKytC/f3+MHj0an332GdTV1T+0i9oLPPBqyt4tW7YgODhYKabsVZTJkyfj77//xoULF+p9NiZXMjIycOjQIZw6dQqhoaGorKyUjtn7+Pigc+fOSrUXwjBNBRHh3r17CA4OxunTp3H79m2oqanB09MTvr6+GDZsmKw3xupW4MViMUaNGoWTJ0/ixIkT6N27tyxDKB0iQkBAAAIDA3HkyBHpBFYNTXFxMf7991+cOXMGwcHBSElJgZmZGXr27Al3d3f07NkTTk5OtU5yxTBM/YlEIjx69AjXrl2TXtLS0mBhYQFvb2/4+PigT58+0NLSkleEuhV4AKisrMSoUaNw/Phx7Ny5E8OHD5dXKE5VVFRgzJgxOHLkCP7++2+MHDmS60gyQUS4f/8+Lly4gGvXruH69evIy8uDnp4eevToAXd3d3h4eMDV1VUWu4YM0+SUlZXh9u3buHbtGsLCwnD9+nXk5+dDX18f7u7ucHd3R9++fdGpUydF7UXXvcADr7bkAwICsHbtWsyZMwc///zzW1PBNmSJiYkYOXIkHj9+jKNHjzbopfLqIi4uDhcvXkRYWBiuXr2KxMREqKiooE2bNnBxcZFeOnfuLM+tDIZpcCorK/H06VPcuXOnyqWsrAxmZmb4+OOP4e7ujj59+qBz585c7SXXr8BL/PXXX5g2bRqcnJywd+/eaqepbGiOHDmCCRMmwNzcHAcPHoSjoyPXkRQuNjYWERERuHv3rvSSn58PFRUV2Nvbw9nZGc7OznByckK7du3QokULriMzjNylpqYiKioKjx8/xt27d3Hnzh3ExMRAJBJBX18fnTt3houLC5ydnWue1ZEb71fggVeLDowYMQJPnz7FvHnzMGfOnAa5ax8fH49p06bh9OnTmDBhAgIDA9khhv+HiBAXF1el4N+9e1e6sIC+vj7atWsHBwcH2Nvbw9HREfb29rC2tmZf5DINilgsRmJiImJiYhAZGYmYmBhERUUhOjoaeXl5AAAjIyPpRo7kouQbt+9f4IFXuymBgYFYunQpzMzMsGjRIowYMQICgUCWIeUiMzMTa9aswfr162FjY4NNmzahV69eXMdqENLT0xEVFfXWmyE1NRUAoKmpibZt28LOzg62trZVLlZWVo1qWI9pOCorK/HixQvExcUhLi4OsbGx0p+fPHmCkpISAIC5uTnatWv31sZLQ1pl7f98WIGXePnyJRYsWICgoCDY2dlh7ty5GD58OJo1ayaLkDKVlJSEDRs2YMuWLdDU1MS8efPw3XffsaIjA3l5eYiOjkZUVBSePHkiffPExcVJF3hQUVFBy5YtqxT9li1bwsrKCubm5rCwsFDK1w2j/MrKyvDy5UukpKTgxYsXePnyZZXXYFJSEoRCIYBXe5+2trawsbGBnZ0d2rRpI90D1dfX5/ieyIxsCrzE8+fPsXz5cuzbtw/a2toYNWoUxo0bx/l4dmVlJc6fP4/t27cjODgYJiYmmD17NiZNmgRNTU1OszUV2dnZVd5skkt8fDySk5OrrP9pbGwMc3NztGzZEhYWFtKfzc3NYW5uDmNjYxgbGzeIPUXmwwmFQmRmZiIzMxOpqalISUlBUlISkpOTkZycjKSkJKSkpFRZk1RNTQ0WFhZv7UFKLvJcdlOJyLbAS6Snp+Ovv/7CH3/8gfj4eNjb28PPzw+DBg1C586dFfLGLCwsREhICI4dO4ZTp04hNzcXbm5uCA8Px8yZM/Hrr7/KPQNTN0SE9PR06Rv2xYsXSElJwcuXL6VbZElJSdJdaAlJoTc2NoaZmRlMTExgbGwMExMTmJqawtjYGIaGhtDX14eBgQHbM1ASZWVlyM3NlV4yMzORlpaGjIwMZGZmIiMjA+np6dKi/ubyoZqamtI9PktLS1haWlbZILCwsICpqSn7HkheBV5CLBbj+vXrOHbsGI4fP47ExETo6elJjwl1dnZG+/btYW5u/kH9CIVCPHv2DI8fP0Z4eDiuXbuGe/fuQSwWo3v37hgyZAiGDBkCa2trHDp0CCNHjsSCBQuwePFi2dxRRiFyc3ORlpZWbRGQFIisrCykp6dXu2h8s2bNYGBgAAMDA2nRl/wr+VlbWxsGBgbQ0NCAhoYG9PX1oampCQ0NDejp6UFbW7vJDudVVFSguLgY+fn5KC0tRUlJCfLy8qr8XFRUhNzcXOTl5VX59/Wfy8rK3mrbwMBA+qEs+cCW/GxqagpTU1MYGRmhRYsWjWkIRd7kW+Df9PjxY4SGhuLq1asICwuTLhxsaGiINm3awMzMDC1btoSJiQn09PSgrq4OTU1NqKuro7CwEEKhEIWFhSgoKEBSUhLS09Px4sULPH36FBUVFVBRUUG7du3g6emJnj17omfPntXOH7Nz506MHTsWP//8c4NZWJepn4qKCmRmZtZYZGoqQEVFRcjLy3vnYtAqKirQ0dGBjo4ONDQ0oK2tDZFIBCMjIwCAhoYGmjVrBj6fDz09PQCAlpYW1NTUIBAIoKurW6W9d31oSN4D1SkuLq4ytPW6yspKFBUVVbmuoKAAIpFIWqgBSO9rWVkZSktLAUD64VhUVITS0lIUFhZK33814fF4VT4g3/wAffOD9PV/jY2Noar1MdoAACAASURBVKamVmPbzHtTbIF/U3Z2Nh49eoTIyEg8f/4caWlpSE5ORnp6OgoKClBeXi59EUveBDo6OtDV1YWFhQUeP34MV1dX+Pn5wdHREQ4ODnU+VPPPP//E+PHjsXLlSvzwww9yvqdMQ1NaWorS0lLk5eWhuLgYpaWlKCgoQGFhIUpLS1FUVCTdkg0NDUVERAT8/PzQrFkzFBUVobKyUrpBAkBaIKsrvJmZmRAKhdUOIb2riKupqb3zBDQDA4Mq/5e8hyQfUACgo6MDFRWVKm3p6emBz+dDU1MTmpqa0NXVhba2NjQ1NaGtrQ1dXV3p7yR7OGz4SykdeOd88MquX79+5Ofn995/v27dOuLxeLRx40YZpmKaCrFYLF03d9WqVe/dzpAhQ6h79+4yTMYwRES0X4Xrj5gP4evri7lz56K8vPy9TrKaNm0ahEIhpk6dCoFAgIkTJ8ohJdMYvT5n0d69e997zqKEhAScOHEC+/btk3FChnnHkn0Nga+vL4qLixEaGvrebcycOROLFi3C5MmTsWPHDhmmYxqroqIiDBw4UDq76odMSLd+/XqYmZnVaX1NhqmvBr0Fb2VlBScnJ5w+fRp9+/Z973YWLVqEiooKTJw4EZqamo1mBklG9tLT0+Ht7Y2UlBSEhobC2dn5vdsqLCzEX3/9hR9//LHJHpnDyFeDLvDAq634vXv3fvCSgsuXL4dIJMKoUaMgEAia3OpVTO3i4uLQv39/iEQiXL16Fa1bt/6g9v78809UVlZi7NixMkrIMFU16CEa4FWBT0xMxOPHjz+4rZUrV2LixIn46quvcOrUKRmkYxqLW7duoXv37tDX18fNmzc/uLiLxWJs3LgRY8aMaSpnVTIcaPAF3tXVFWZmZjIpyDweDxs2bMDYsWPh7++P4OBgGSRkGrqLFy/i008/RYcOHXDp0iWZTDp18uRJxMXFYcqUKTJIyDDVa/AFns/nw9vbW2Zb3DweD5s3b8aoUaMwdOhQhISEyKRdpmHas2cPvL29MXjwYJw5c0Z6/PiHCgwMhI+PD+zt7WXSHsNUp8EXeODVME1ERAQyMjJk0h6Px8PWrVsxePBgfPbZZx90lA7TcK1btw6jR4/GpEmTsHPnTpl9Efro0SOEhobi+++/l0l7DFOTRlHgvby8oK6uLtNxc4FAgN27d8PX1xcDBgxARESEzNpmlBv936LrM2bMwG+//YZ169bJdOKq1atXw9HREZ9++qnM2mSY6jSKAq+lpQUvLy/8888/Mm1XIBBgz5498PT0RL9+/XD79m2Zts8on/LycowYMQIbNmzA/v37MWvWLJm2n5GRgUOHDmHGjBlstkNG7hpFgQeAwYMH499//5XO/SErqqqqOHLkCNzd3eHl5YW7d+/KtH1GeRQWFsLX1xfnz5/H+fPn5XKo7KZNm6Cjo8POtWAUotEUeF9fX4hEIpw7d07mbaupqeHw4cPo3Lkz+vfvj8jISJn3wXArNTUVPXv2xOPHjxESEgJPT0+Z91FeXo5t27Zh4sSJbN1fRiEaTYFv3rw5PDw8cPz4cbm0r6GhgdOnT8PBwQGffvopYmJi5NIPo3jR0dHo3r07ysvLER4ejk6dOsmln7179yInJwfffvutXNpnmDc1mgIPvBqmOX36NMrLy+XSvqamJk6ePAlra2t4eXkhLi5OLv0wihMREYGePXvCzMwMV69ehZWVldz62rBhA0aMGAELCwu59cEwr2tUBX7IkCEoKiqS67Hrurq6OH/+PMzMzNC7d28kJCTIrS9Gvk6dOoVPPvkEbm5uuHz5snTBDnm4dOkSHjx4wE5sYhSqURV4CwsLODs7y22YRkJPTw///vsvjIyM4OXlJV2Zimk4du7ciSFDhmDYsGE4evSo3BdfDwwMRM+ePeHq6irXfhjmdY2qwAOvhmlOnDgBkUgk13709fVx7tw5qKuro3fv3khNTZVrf4zs/PLLLxgzZgxmzZqFv//+Gyoq8p1z79mzZzhz5gymT58u134Y5k2NssCnp6cjPDxc7n0ZGxvj0qVLEAgE6NevH7KysuTeJ/P+RCIRJk2ahB9//BFbtmzBqlWrFNLvunXrYGVlhQEDBiikP4aRaHQF3sHBAW3atJH7MI2EqakpLly4gOLiYvTp0wc5OTkK6Zepn/LycgwfPhx///03Dhw4oLDVu/Ly8rBr1y5MmzYNAoFAIX0yjESjK/DAqy9bjx07BlLQeuKWlpYICQlBfn4++vTpI12VnlEOubm58PLywqVLl3Dx4kX4+/srrO/t27eDz+fjm2++UVifDCPRKAv80KFDER8fjzt37iisTysrK/z7779IT0+Hj4+PzM+oZd5PSkoKevXqhdjYWFy5cgXu7u4K67uyshIbNmzAhAkToKenp7B+GUaiURZ4Z2dnfPTRRzh8+LBC+/3oo48QEhKChIQE/O9//0NxcbFC+2eqioyMRLdu3SASiRAeHo4OHTootP+goCCkp6dj6tSpCu2XYSQaZYEHAH9/fxw6dEhhwzQSbdq0wfnz5/HkyRMMGjQIZWVlCu2feeXmzZvw9PSEra0twsLC0LJlS4VnCAwMxPDhw+V68hTDvEujLfBDhw5FQkKCQodpJJycnHDx4kXcvXsXgwYNktuZtUz1/vnnH3z66afw8PDA2bNnoa+vr/AM586dw4MHDzBjxgyF980wEo22wHM1TCPRsWNHXLx4Ef/99x+GDx+OyspKTnI0NZs2bYKfnx/Gjh2Lo0ePcjap1+rVq9G3b1907tyZk/4ZBmjEBR4A/Pz8cPjwYYUP00h07twZwcHBuHTpEkaMGAGhUMhJjqaAiLB48WJMnToVCxcuxIYNG8Dnc/PyfvjwIS5fvizzueQZpt6oEbt9+zYBoNu3b3OaIywsjLS1tWnYsGEkFAo5zdIYCYVCGj9+PAkEAtq+fTvXcWjkyJHk5OREYrGY6yhM07a/UW/Bu7i4wM7OjrNhGokePXrg+PHjOHnyJMaNGwexWMxpnsakuLgYAwcOxL59+3DixAmMHz+e0zwvX77E4cOHERAQwFZsYjjXqAs88GqYhoujad7Up08f/PPPP9i/fz++/fZbzvM0Bjk5Oejbty9u3ryJCxcuwMfHh+tIWLt2LUxMTOSyGhTD1FejL/CSk57u3bvHdRT069cPBw4cwK5du9jRFR8oISEBbm5uSE1NxY0bN+Dm5sZ1JBQUFODPP//E9OnToaamxnUchmn8Bd7FxQU2NjacD9NIDBo0CPv378emTZvYl3Dv6dGjR3B3d4eamhquXbuGtm3bch0JALBt2zYQEefDRAwj0egLPI/Hw+eff44DBw4ozbCIn58fgoKCsG7dOixZsoTrOA1KSEgIPDw80LZtW4SFhSnN6kjl5eUIDAxk0xIwSqXRF3gAGDFiBBISEnDjxg2uo0gNGzYMO3bswNKlS7FixQqu4zQIR48ehbe3N/r06YPg4GDo6upyHUlqz549yMzMxLRp07iOwjBS8l3pQEl06NAB7du3x/79+9GjRw+u40h9/fXXEIlEGD9+PAQCAX744QeuIymtdevWYebMmZgyZQrWrl3L2THu1RGLxfj9998xevRoTqZEYJgacXuYpuKsWLGCjI2NqaKigusobwkMDCQej0cbN27kOorSEYvFtGjRIuLxeLRq1Squ41TryJEjxOfzKSoqiusoDPO6/U2mwCcmJhKPx6Pg4GCuo1RrzZo1xOPxaMuWLVxHURrl5eU0cuRIUlNTo6CgIK7j1Khbt27k5+fHdQyGedP+JjFEA7yar93NzQ379++Ht7c313HeMnPmTBQUFGDy5MlQUVHBuHHjqvz+9OnTCAoKQlBQkFINT8hLUVERhg4dirCwMJw4cQL9+/fnOlK1Ll++jPDwcNy8eZPrKAzzNq4/YhRp06ZNpKWlRYWFhVxHqdH8+fNJIBBU2WI9fPgwCQQCAkBHjx7lMJ3sFBcX03fffUcvXrx463dpaWnk7OxMZmZmdOfOHQ7S1V3fvn3pk08+4ToGw1Sn6QzREBFlZmaSqqoq7du3j+so7/TDDz+QQCCgAwcO0IEDB4jP5xOPxyM+n0+dOnXiOp5MLFu2jABQmzZtKCcnR3p9bGwstW7dmmxtbenp06ccJqzd/fv3icfj0fnz57mOwjDV2c8jUpKDwxXEx8cHAoEAJ0+e5DpKjYgIU6dOxbZt2yAWi0FEVY7hv3LlCjw9PTlM+GEyMjJgY2ODkpISqKqqwsXFBZcvX8bjx4/x2WefoVWrVjh9+jRMTEy4jvpOw4cPR0xMDO7du8fmnWGU0YHGP5j7hpEjR+LcuXPIysriOkqNeDweOnToAJFIJC3wEioqKg3+uPnFixdL58evrKzE7du30atXL3zyySdwcXFBSEiI0hf3uLg4HD16FPPmzWPFnVFaTW4Lvri4GGZmZvjtt98wceJEruNUa+vWrZg8efI7z7y9d+8eOnXqpMBUsvH06VM4ODhAJBJVuV4gEMDe3h737t2DqqoqR+nqbtKkSbhw4QKePHkCFZUmc6wC07A0vS14LS0t+Pr6Yv/+/VxHqdbq1atrLe6qqqr47bffFJhKdmbPnl3tUUAikQjR0dFYtWoVB6nqJyMjA7t27UJAQAAr7oxSa3Jb8AAQHBwMX19fxMXFwdramus4UkKhEAYGBigpKal1zniBQIDY2Fi0atVKQek+XHh4ONzc3GqdE2jjxo347rvvFJSq/ubNm4e///4b8fHxnC0JyDB10PS24IFX0/aamppi9+7dXEepQkVFBbGxsQgICICamto7tw75fD7WrFmjwHQfhogwbdo0CASCWm87bdo0hIWFKSBV/eXn52PLli2YMWMGK+6M0muSW/DAq6GCY8eOITY2Vim/JMvIyMDvv/+OtWvXQiwWV7ueq7q6Ol6+fAkjI6N6t19aWoqUlBRkZ2ejoKAAYrEY+fn5AAA9PT3w+Xzo6uqiefPmMDc3/+BiduTIEQwbNuydW+8qKioQCoXo2LEj9u7di/bt239Qn/KwePFibNiwAQkJCdDR0eE6DsO8y4EmW+AjIyPRvn17hIaGomfPnlzHqdG7Cr2qqioWLFiAn376qca/T09PR3h4OCIjI/Ho0SNER0fjxYsXyM3NrVcOAwMDWFlZwcHBAU5OTnB0dETXrl1hampa699WVlaiTZs2ePHiRbVDTyoqKuDxeBg4cCCmT5+uVBPCva6oqAg2NjaYMmUKFi1axHUchqlN0y3wAPDxxx+jQ4cO+Ouvv7iOUquaCr2enh6Sk5OhpaUF4NVRQmfPnsXFixcRGhqKmJgY8Hg8WFtbw9HREe3bt0erVq1gYWEBc3NzGBsbQ0dHBzweD/r6+gCAvLw8EBEKCgqQmZmJ1NRUJCcnIzExEY8fP0ZkZCQSEhJARGjXrh169uwJLy8v9O/fX5rjdZKZIF8v7pKtdUtLS0yZMgVjx459rz0RRfrll1+wYsUKJCQkwMDAgOs4DFObA03qTNY3rV+/XumnLnhTcnIyff/996SmpkZ8Pp8A0O+//0579uyhAQMGkIaGBgkEAnJzc6O5c+fS2bNnqaCgQOY58vPz6cyZMzR37lzq3r07CQQC0tDQoEGDBlFQUBCVlZUREVFeXh7p6+sTAAJAKioqxOPxqF+/fhQcHEwikUjm2eShtLSUWrRoQfPmzeM6CsPUVdOaquBN2dnZpK6uTjt37uQ6Sr2lpKTQ6NGjSSAQkEAgIFVVVfL29qYdO3ZQRkaGwvNkZGTQjh07yNvbm1RVVcnIyIhmz55NEydOlBZ3XV1dCggIoNjYWIXn+1CBgYGkqalJ6enpXEdhmLpq2gWeiMjPz4969+7NdYx6iY2NpQkTJpCKigqZmZnRV199Ve2kXVxJTU2lVatWkbW1NQEgfX19WrlyJZWWlnId7b1UVFSQlZUVTZ8+nesoDFMfrMCfPHmSeDxeg9iqzMzMpLFjx5JAIKB27dpRUFCQUg9xCIVC2r17N7Vt25YEAgGNHz+esrKyuI5Vb1u3biV1dXV6+fIl11EYpj5Yga+srCQzMzNavHgx11FqJBaL6Y8//qDmzZuThYUF7d27V6kL+5skhd7c3JyaN29OO3bsILFYzHWsOhEKhfTRRx/RxIkTuY7CMPXFCjwR0axZs8ja2lopi2ZmZiZ99tlnpKKiQjNmzJDLF6aKkp+fT9OnTycVFRXy9fVtEFvzO3fuJFVVVYqLi+M6CsPUV9ObLrg6kmPiQ0JC0KtXL67jSN24cQPDhg2DiooKgoKClPb48PoKCwvDF198AbFYjMOHD6Nbt25cR6qWWCxGhw4d4Orqir///pvrOAxTX01zqoI3OTo6wsXFBbt27eI6itQ///yDPn36wNnZGffu3Ws0xR0A3N3dce/ePXTs2BGffvqp0s7Nf+TIEcTExGDu3LlcR2GY98IK/P8ZM2YMDh8+LD1dn0s7d+6Ev78/vv76axw/frxRnlRjaGiIEydO4Msvv8SQIUOUbl4gsViMZcuWwd/fH23btuU6DsO8H64HiZRFXl4eaWlp0aZNmzjNcfz4cRIIBPTjjz9ymkOR5s6dSyoqKnTy5Emuo0gdOnSI+Hw+PXz4kOsoDPO+2Bj868aOHYvbt2/jwYMHnPQfERGBXr16YcyYMdi8eTMnGbjy7bffYs+ePQgNDYWrqyunWYgInTp1goODg9KuG8AwddC056J503///YeuXbvixo0b6N69u0L7LigoQOfOndG2bVucPn262kUxGjORSARvb2/ExcXh7t27nM7UeOjQIYwYMQL379+Hk5MTZzkY5gOxAv8mFxcXODk5YefOnQrtd/To0bhw4QIePHig9OuRyktaWho6duwIb29vzo5aEYvF6Ny5MxwdHbFv3z5OMjCMjLCjaN40YcIEHDp0CDk5OQrrMzw8HHv27MHWrVubbHEHADMzM2zduhW7du3Cf//9x0mGw4cP4/Hjx5g/fz4n/TOMLLEt+DcUFRXBwsICS5YswfTp0xXSp7u7O1RVVRESEqKQ/pRdz549wePxEBoaqtB+xWIxOnXqhPbt27Otd6YxYFvwb9LW1saIESOwbdu2WtcOlYWbN2/i+vXrWLlypdz7kggNDcWwYcPA4/HA4/Hg4uKCPXv2SH9/+fJl9O/fHzweDwMGDMChQ4cUlg0AVqxYgatXr+LWrVsK7ffQoUOIjIxkW+9Mo8G24Kvx4MEDdOrUSSGrPY0fPx4RERF4+PChXPt5ExFh1KhR2Lt3L7p164YbN25UWbpwyJAhaN26NVatWsXJkoYdO3aEm5sbtmzZopD+JFvvTk5OCAoKUkifDCNnbAu+Oh07dkSXLl2wbds2ufYjEolw5MgRjBkzRq79VIfH42H79u1wdnZGeHh4lcMBDxw4AF1dXc6KOwCMGjUKBw8erHaJP3k4dOgQoqKisGDBAoX0xzAKwcnh9w3An3/+SWpqanJd4OHevXsEgB49eiS3PmoTFxdH2traZGhoSMnJyfTff/+Rh4cHlZSUcJaJ6P8/Noo40UgkElH79u3piy++kHtfDKNA+9kWfA1GjBgBLS0tuc5Pc/PmTejp6cHBwUFufdTGxsYGgYGByMnJwfDhwzFhwgQEBQVBQ0ODs0wA4OTkBB0dHdy4cUPufR08eBDR0dFs651pdFiBr4GGhga+/PJLbNu2TW7DBImJifjoo484P6npm2++gbe3N65du4Y+ffqgZcuWnOYBAIFAADs7OyQmJsq1H5FIhJ9//hnDhw+Hvb29XPtiGEVjBf4dvv32W8TFxeHChQtyaT87OxvNmzeXS9v1ZWhoiGbNmmHdunW4f/8+13EAAEZGRsjOzpZrH/v27cPTp0+xcOFCufbDMFxgBf4dHB0d0adPHwQGBsql/ZKSEs6HQgAgMDAQzZo1w549e1BZWYkvvvgCpaWlXMeClpYWioqK5NZ+ZWUllixZgtGjR7MZI5lGiRX4WkyfPh3nz5+Xy2GMBgYGyM3NlXm79XHhwgUcP34cGzduhL+/P0aOHImoqCjMmTOH01wAkJOTI9c9nO3btyMpKYmNvTONFivwtfjf//6Hdu3aYdOmTTJv28jICJmZmTJvt66ePn2KKVOm4ODBg1BXVwcAbNiwAQYGBti4cSPOnj3LWTYAyMzMlFuBLy0txcqVKzFp0iTY2NjIpQ+G4Ror8LXg8XiYMmUK9uzZg6ysLJm27ejoiGfPnsl1GKImycnJ6Nu3LwICAtCiRQvp9YaGhvjhhx8AAF9//TViY2MVng0ACgsL8ezZM7Rv314u7a9btw55eXmYN2+eXNpnGGXACnwdfP3119DU1MT27dtl2q6bmxuEQqHCT8n/448/0KtXLyQmJuLhw4dV5r+/deuW9MiVjIwM9OrVS27fQbxLREQERCIR3NzcZN52fn4+fvvtN8yYMQOmpqYyb59hlAWbqqCO5s6diz179iA+Ph5qamoya9fe3h79+vXDunXrZNZmYzBlyhRcvnwZUVFRMm97wYIF2LRpE+Li4hrlcogM83/YVAV1NXXqVGRmZuLw4cMybXf06NEICgpCeXm5TNttyMrKyrBv3z65TOGQmZmJ9evXY968eay4M40eK/B1ZGFhgSFDhmDt2rUybXf06NEoKCioMptjU7dz504UFxfjq6++knnby5Ytg7a2NqZMmSLzthlG2bACXw+zZs3CnTt3EBYWJrM2zc3NMWHCBCxatAjFxcUya7ehKioqwpIlSzB58mSYmZnJtO0XL15g27ZtWLhwITQ1NWXaNsMoIzYGX0/du3eHpaWlTIdqMjIy0Lp1a0yePFmh88Irox9++AHbtm3D8+fPYWRkJNO2v/nmG4SEhODJkycy/R6FYZTUATabZD3t37+fBAIBxcbGyrTdbdu2EZ/Pp0uXLsm03YbkypUrJBAIaMeOHTJv+8mTJ6SiokJ79uyRedsMo6T2sy34eqqsrISdnR2GDh2KNWvWyLRtf39/hIeHIzw8HJaWljJtW9m9ePEC3bp1g4eHBw4ePCjz9ocOHYqYmBg8ePCA88ndGEZBDrAC/x5Wr16NpUuXIiEhAYaGhjJrNy8vDx4eHhCLxbh27ZpM21ZmWVlZ8PDwgJqaGq5evQo9PT2Zth8eHg43Nzf8888/GDBggEzbZhglxgr8+yguLoa1tTW+++47LF68WKZtJycno0ePHjAxMUFwcDCMjY1l2r6yycjIgLe3N3JycnD9+vUqZ9XKioeHBwQCAa5cuSLzthlGibHj4N+HlpYWpk6disDAQOTn58u0bQsLC1y8eBHZ2dno0aMH4uLiZNq+Mnn+/Dnc3NyQl5eHf//9Vy7F/ejRo7h+/TpWr14t87YZRtmxAv+evv/+e/B4PLksCv3RRx/hxo0b0NXVRdeuXREcHCzzPrh26tQpdOvWDYaGhrhx4wbs7Oxk3kdlZSXmzZuHkSNH4uOPP5Z5+wyj7FiBf096enqYNGkS1qxZI5fJwkxNTXHlyhX4+PjA19cXM2fOVIo52j9UaWkpZsyYgYEDB8LX1xchISEwMTGRS1+bN29GUlISli9fLpf2GUbpcXkMT0OXlZVF2traFBgYKNd+du/eTTo6OmRnZ0fBwcFy7UueTp06Rba2tqSrq0t79+6Va1+5ublkZGREc+bMkWs/DKPE2KLbH6J58+YYP348fvnlF5SVlcmtn6+++grR0dH4+OOPpVv0d+/elVt/snb79m1p7q5duyI6OhpffPGFXPtcuXIlRCKRdOpjhmmKWIH/QHPmzEFubi527dol134sLCxw4MABXLx4Eenp6fj4448xcOBAXL9+Xa79fohr167B19cXrq6uyM7OxuXLl7Fv3z6Ym5vLtd+XL19iw4YNWLx4cZM51JRhqsX1PkRjMHHiRLKysqKKigqF9RkcHEzdunUjANS+fXvasGEDZWVlKaz/mmRlZdH69evJ0dGRAFC3bt3ozJkzCs0wcuRIsrW1pfLycoX2yzBKZj8r8DKQmJhIampqtGvXLoX3fevWLRo3bhxpaWmRiooK9enTh7Zs2UIvXrxQWIbExETavHkz9enTh1RUVEhbW5vGjx9Pt2/fVlgGibt37xKfz6cjR44ovG+GUTJsqgJZGTNmDMLDwxEZGcnJqfCFhYUIDg7GsWPHcPbsWRQVFcHGxgY9e/ZEjx490KFDBzg4OEBHR+eD+4mMjMTDhw9x/fp1XL16FQkJCdDW1oa3tzf8/Pzg7e0NbW1tGd2z+unTpw+Ki4tx48YN8Hg8TjIwjJJgZ7LKyvPnz2Fvb499+/Zh2LBhnGYpKyvDzZs3cfXqVYSGhuK///5DcXExeDwerK2tYWVlBUtLS5iZmcHY2Bj6+vrg8XjQ19cH8GrKBCJCXl4eMjMzkZaWhpcvXyIxMRGJiYkgImhra6NLly7o2bMnPD090a1bNzRr1ozT+33y5EkMHDgQYWFh6NGjB6dZGEYJsAIvSyNGjMDDhw/x8OFDCAQCruNIERHi4+Px+PFjREZGIikpCcnJyUhNTUV2djby8/MhFouRl5cHANDX1wefz4eenh6MjIxgZmYGS0tLWFpawtHREe3bt4eNjY1SbSFXVFTAyckJHTt2xKFDh7iOwzDKgBV4WYqLi0O7du2wefNmjB07lus49SbZ82iIBXLVqlVYunQpoqKiYG1tzXUchlEGbC4aWbK1tcW4cePw008/oaSkhOs4TUZycjKWL1+OefPmseLOMK9hBV7GFi9ejMLCQqxfv57rKE3G7NmzYWJigoCAAK6jMIxSYQVexoyNjTFz5kysWrUK2dnZXMdp9MLCwnDw4EEEBgZy/iUvwygbVuDlYPbs2dDQ0MCKFSu4jtKoiUQifPfdd/Dy8oKvry/XcRhG6bACLwfa2tpYsGABNm7c2Kjnc+faxo0bERMTw4bDGKYGrMDLyYQJE9CqVSuZr/jEvJKRkYHFixdj9uzZaNu2LddxGEYpsQIvmBYZgAAAEvRJREFUJ6qqqli2bBmCgoJw7949ruM0OnPnzoW2tjbmzZvHdRSGUVqswMvR0KFD0aVLF8yfP5/rKI1KeHg4du3ahdWrV3M2JQLDNASswMsRj8fDihUrcO7cOZw9e5brOI2CUCjE5MmT4enpic8//5zrOAyj1FS4DtDY9e7dG/7+/pg2bRoePXrEDuX7QIGBgYiKimLDXgxTB2wLXgHWrl2LtLQ0rFmzhusoDdqLFy+wZMkSzJ8/H+3ateM6DsMoPVbgFcDS0hLz58/H8uXLkZCQwHWcBmvKlCkwNzfHnDlzuI7CMA0CK/AKMmvWLFhZWWHWrFlcR2mQDh48iNOnT2PLli1smIth6ogVeAVRU1PDhg0bpAtyMHVXUFCAWbNmYdy4cfjkk0+4jsMwDQYr8Ark5eWFwYMHY9q0aSgvL+c6ToMxZ84cCIVC/PLLL1xHYZgGhRV4BVu3bh1SU1Oxdu1arqM0CBEREfjjjz8QGBgIAwMDruMwTIPCCryCtWzZEnPnzsXPP/+MxMREruMoNaFQiG+//RZeXl4YPnw413EYpsFhBZ4DAQEBsLCwwOzZs7mOotR+/fVXPHv2DFu2bOE6CsM0SKzAc0BdXR3r16/HkSNHEBwczHUcpRQTE4Off/4Zixcvho2NDddxGKZBYgWeI/3798eIESMwYcIE5Ofncx1HqYjFYowfPx7t2rXD9OnTuY7DMA0WK/AcWr9+PYRCIX788UeuoyiVwMBA/Pfff9i9ezdUVVW5jsMwDRYr8BwyMjLCmjVrsGXLFoSFhXEdRynEx8fjp59+wsKFC9G+fXuu4zBMg8YjIuI6RFM3YMAAPH36FPfv3+f0LM1hw4YBAA4dOsRJ/2KxGL1790Z+fj5u3brFtt4Z5sMcYFvwSmDjxo1ISUlp8mu4bt68GTdu3MCff/7JijvDyAAr8ErAysoKy5cvx8qVK5vsNLgJCQmYP38+5s2bBxcXF67jMEyjwIZolIRYLIanpyfKy8tx8+ZNCAQChWfgaoiGiNC/f38kJSXh7t27bDIxhpENNkSjLPh8Pnbs2IFHjx5h/fr1XMdRqD/++AMXL17Ejh07WHFnGBliBV6JtG3bFvPmzcPChQsRFxfHdRyFSEpKQkBAAGbNmgU3Nzeu4zBMo8KGaJRMRUUFunTpAl1dXVy5cgV8vuI+gxU9RENE6Nevn3RoRkNDQyH9MkwTwYZolI2amhqCgoJw69atRj/j5ObNmxESEoKdO3ey4s4wcsAKvBJydHTEwoUL8eOPP+LRo0dcx5GLuLg4zJ07F3PnzkXXrl25jsMwjRIbolFSkqNqiouLERERoZDjwhU1RPP6CU3//fcf1NTU5NofwzRRB1S4TsBUj8/nY+fOnejUqROWL1+OxYsXy7T9x48fY9SoUaisrJRel5qaCgBwcnKSXqeqqordu3fLdNqA1atXIyIighV3hpEzVuCVmJ2dHZYvX45Zs2bBx8cHrq6uMmtbTU2txpOqsrOz37qtrERHR2PRokVYvHgxOnToILN2GYZ5GxuDV3JTp07Fp59+itGjR6O0tFR6fUREBOzs7N57MYw2bdqgQ4cO4PF4Nd6Gx+OhQ4cOaNOmTb3b379/PxYuXFhl7VmhUIjRo0ejU6dOCAgIeK/cDMPUHSvwSo7H42HHjh1ITU3FwoULIRKJsGLFCvTo0QPx8fHYuXPne7c9atSod54xq6KigtGjR79X20uXLsWyZcvg7OyMyMhIAMCyZcsQGRmJXbt2cXKmLsM0NexL1gbir7/+wvjx49GhQwc8fPgQYrEYwKux+vT0dBgZGdW7zZSUFLRs2VLa1pt4PB6SkpJgYWFR73YtLS1B9P/au9eYps/+j+Pv0lZRYdCCyASZRjcUcE6nwjjp5nQGh0Qxy6bgYXNTA2q2bNHMxScaN7cQM+cBl01lxOPcPAGSSVBgHGc0QWuN4gHUKALCEAQDtP8H5E9ub91uQeRq6/f1kDbX9SkPPvn16vW7flZ0Oh0ajYbFixeTnJxMUlISS5cu7XRWIUSnyT54e2EwGHB2dsZkMj1SyJmZmV0ac+DAgYSGhj72ZionJyfCwsI6Xe4AGRkZHWO2trbS0tLC5s2b8fPzY8aMGV3KKoToPCl4G9fU1MSyZcuYOXMmzc3ND+16gfYiPnr0aJfHj4+Pf+zfNRoNc+fO7dKYj3vOrMVioaKighEjRrB3794ujSuE6BxZorFhV69eZcqUKVy7do3W1tZ/fJ+rqyt3795Fp+v8pqja2lq8vLweGV+r1VJZWYmHh0enxmtpacFgMNDY2PjY152cnLBYLHz44Yds2rRJ7mAV4tmRJRpbdvv2bW7cuPE/33fv3j3y8/O7NIfBYGDKlCkP/eip1WqZOnVqp8sdoLCw8B/LHdqv5DUaDTt27KC0tLRLmYUQT0YK3oa98cYbnD9/njFjxvzrrpNevXo9dlnkScXFxT20rm+1WomLi+vSWBkZGf+6b16v12M0GsnIyJAjCoR4xmSJxg60traSlJTEqlWrAGhra3vkPcOGDePSpUtdGv/+/ft4eHjQ3NwMgLOzM1VVVbi4uHR6rICAAMxm82Nf02g0REdHs3379i59OxBCdIos0dgDnU7HihUrKCgowM/P77Fr7WVlZZSVlXVp/L59+zJjxgz0ej16vZ4ZM2Z0qdxv3brFhQsXHvm7Xq+nV69ebNiwgcOHD0u5C9FDpODtyPjx4zGZTCxZsgSNRvPQ9kadTsexY8e6PPbs2bNpaWmhpaWF2bNnd2mM/9we+f+0Wi0BAQGcPXuW5cuXdzmfEKLzpODtTJ8+fdi4cSMZGRkYjcaOUyYtFguHDx9+4nGampq4fPkyJSUlZGVl4eTkRN++fenTpw9OTk5kZWVRUlLC5cuXHzoi4d+kp6d3HH2g1WrRaDQkJCRQUlLSpeMOhBBPR9bg7VhlZSULFiwgMzMTq9WKXq/n7t27Dy2vVFZWUlRUhMlk4uzZs5jNZioqKqitre3UXAaDAT8/PwICAhg5ciSBgYEEBwczYMAAoP13And3dxobG9Hr9Xh4eLBnzx4mTpzYnR9ZCPHk9krBO4Aff/yR5cuX09zczJ49e9DpdGRlZZGTk8OFCxfQaDQMHjyYwMBAgoKCeOmll/Dx8WHgwIH0798fV1dXNBoN7u7uANTV1WG1Wqmvr6eqqopbt25x8+ZNysvLOXfuHCaTiWvXrmG1WhkxYgSRkZH4+PiwevVqAGJiYti+fTtGo1Hlv0WI550UvCNobm5m06ZNrF+/nvr6etra2ggODiYyMpIJEyYQFhaGq6trt85ZX19Pfn4+ubm55OTkUFxcjMViYfTo0Xz++efExsbSu3fvbp1TCNEpUvD2rKysjOTkZHbu3El9fT2TJ09m5syZTJ8+nf79+/dolps3b3LgwAH++OMPjh8/jpubG/Pnz2fx4sUMHTq0R7MIIQApePt05coV1q9fz/bt2xkwYABxcXEkJCQwaNAg1dGA9jtwU1JSSE5OpqKigtjYWNasWYO/v7/qaEI8T2QfvD2prq5m4cKFvPLKK+Tl5ZGSkkJFRQXffPONzZQ7gLe3NytWrKCsrIyUlBRKS0sJDAzkk08+eeRpUUKIZ0cK3g5YrVZ++uknhg8fTmZmJikpKZw7d47Zs2c/9qhfW6HVaomLi8NkMrFjxw7S09Px9/fn559/Rr44CvHs2W47CKD9qn369OksWbKEuXPnYjabmTNnjk0X+3/TarXEx8djNpuJj49n8eLFxMTEyNW8EM+YrMHbsIKCAt577z10Oh27du0iLCxMdaRu8eeffzJnzhwsFgu//vorISEhqiMJ4YhkDd5WHTp0iLfffpsxY8Zw5swZhyl3gPDwcM6cOcOoUaOYNGkSR44cUR1JCIckBW+Ddu7cyaxZs5g/fz4HDx7EYDCojtTtjEYjhw8fJi4ujpkzZ/LLL7+ojiSEw+n8I4DEM3Xo0CEWLlzIypUrWbt2reo4z5RWq2Xbtm0YjUY++ugjDAYD0dHRqmMJ4TBkDd6GFBcXM3HiRBYsWMCWLVtUx+lRixYtIjU1lZycHMaNG6c6jhCOQG50shX19fWMHj0af39/0tLS7GqXTHdoa2sjKiqKK1eucPr06W4/WkGI55D8yGorli5dyv3799m5c+dzV+7QvlyTkpJCfX09y5YtUx1HCIfw/DWJDSoqKiI1NZXk5GS8vLxUx1HG29ub5ORkUlJSKCkpUR1HCLsnSzQ2IDw8HL1ez4kTJ1RHsQmRkZFoNBpycnJURxHCnskSjWqFhYXk5+fz9ddf99icFy9eZNasWWg0GjQaDREREaSlpT30nuTkZHx8fHBxcWHp0qUdD+TuCevWrSM3N5e//vqrx+YUwhHJFbxiH3/8McXFxZSWlvbovBaLhenTp5Oens5bb71FVlZWx+P2oP2MeX9/fzZv3sy7777bo9kARo0aRWhoKFu3bu3xuYVwEHIFr1JbWxsHDhxgwYIFPT63k5MTqampDBkyhOzsbPbv3//Q6+vWrWPhwoVKyh1g7ty57Nu3D4vFomR+IRyBFLxCZ8+epa6ujsmTJyuZ32AwsH//fnQ6HYmJiVRVVQFgNps5fvw4K1euVJILYNKkSdTW1mIymZRlEMLeScErVFhYiJubGwEBAcoyjB07lq+++orq6moSExOxWCwkJCSwdetW9Hq9slwjR47E1dWVgoICZRmEsHdyVIFC5eXlDBs2TPm+9y+//JIjR46wf/9+LBYL4eHhvPbaa0ozabVahg4dSnl5udIcQtgzuYJXqKamBg8PD9Ux0Ov1pKamApCXl8eqVasUJ2rn6ekpZ8YL8RSk4BW6f/8+ffr0UR0DoGOZyN3dnd69eytO065fv340NDSojiGE3ZKCV8hgMFBbW6s6hs26e/euTXzDEcJeScEr5Onp2bFzRTVbvB2iqqpKCl6IpyAFr1BgYCCXLl2yiWWIxsZGoH3ZyBbcu3ePS5cuERQUpDqKEHZLCl6h0NBQWltbld+S/9tvv5GQkADA9evX+eKLL8jMzFSaqbi4mLa2NkJDQ5XmEMKeyVEFig0fPpx33nmH77//XnUUm5KYmEh2djbnz59XHUUIeyVHFag2b948du3axYMHD1RHsRnNzc3s3r1byREOQjgSKXjF5s2bR319fcc+dNH+0PHGxkbi4+NVRxHCrskSjQ1ITEzk4MGDXLx4kX79+qmOo1RDQwMvv/wy77//Phs2bFAdRwh7Jks0tmD16tU0NDSwdu1a1VGUW7NmDU1NTTZzN60Q9kwK3gZ4eXnx3Xff8e2335Kdna06jjI5OTkkJSWRlJSEp6en6jhC2D1ZorEhs2bNoqioiKKiInx9fVXH6VEVFRWEhIQQERHBvn37VMcRwhHslYK3IXV1dURERGCxWMjLy8NoNKqO1COqq6uJiIigV69e5Obm4ubmpjqSEI5A1uBtibu7O5mZmTQ2NjJ16lSbOcbgWbpz5w5Tp07lwYMHZGZmSrkL0Y2k4G2Mj48PWVlZ1NTUEBYWxpUrV1RHembKysoIDQ2lrq6O48eP8+KLL6qOJIRDkYK3QcOGDaOgoIAXXniB4OBg0tPTVUfqdkePHiUkJASj0UhBQQFDhw5VHUkIhyMFb6MGDBjAyZMnmTZtGtHR0Xz22Wc0NTWpjvXUmpqa+PTTT4mJiSE6OpoTJ07g5eWlOpYQDkl+ZLUDqampJCQk4OXlxcaNG4mKilIdqUvS0tJYvnw51dXVbNmyhTlz5qiOJIQjkx9Z7UF8fDxms5mxY8d2XNGfPn1adawndurUqY7cwcHBmM1mKXcheoAUvJ3w8fFh7969ZGVlUVlZydixY4mJiSE/P191tH+Ul5dHdHQ048aNo6amhuzsbHbv3s3AgQNVRxPiuSAFb2cmTZpESUkJaWlp3Llzh/DwcEaOHMmmTZts4gHVNTU1/PDDDwQFBREZGUl1dTUZGRkUFRXx5ptvqo4nxHNF1uDt3KlTp9i2bRt79uzhwYMHTJw4kdjYWKZNm8agQYN6JENFRQXp6en8/vvvnDx5EmdnZz744AMWLVrE66+/3iMZhBCPkDtZHcW9e/c6SvbYsWM0NDQwZMgQIiMjCQsL49VXXyUgIABXV9ennsdkMlFaWkp+fj65ublcu3YNFxcXoqKiiI2NJSoqChcXl276ZEKILpKCd0TNzc0UFhaSm5tLTk4OJSUlNDY2otFoGDx4MH5+fvj6+uLt7U3//v1xd3dHo9Hg7u4OtB+ZYLVaqauro6qqitu3b3Pjxg3Ky8spLy/HarXi4uLC+PHjiYyMZMKECYSEhODs7Kz4kwsh/oMU/PPAarVy9epVzp07h8lk4vr169y8eZNbt25RU1PD33//jcVioa6uDmg/MsHJyQk3Nzc8PT3x9vbG19cXX19fAgMDCQoKYsiQIWg0GsWfTAjxL6TghRDCQck+eCGEcFRS8EII4aCk4IUQwkHpgF9VhxBCCNHtiv8P9U+FzugsoXsAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# With GML string\n", "model=CausalModel(\n", " data = df,\n", " treatment='X',\n", " outcome='Y',\n", " graph=\"\"\"graph[directed 1 node[id \"Z\" label \"Z\"] \n", " node[id \"X\" label \"X\"]\n", " node[id \"Y\" label \"Y\"] \n", " edge[source \"Z\" target \"X\"] \n", " edge[source \"Z\" target \"Y\"] \n", " edge[source \"X\" target \"Y\"]]\"\"\"\n", " \n", " )\n", "model.view_model()\n", "\n", "\n", "display(Image(filename=\"causal_model.png\"))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model to find the causal effect of treatment X on outcome Y\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# With GML file\n", "model=CausalModel(\n", " data = df,\n", " treatment='X',\n", " outcome='Y',\n", " graph=\"example_graphs/simple_graph_example.gml\"\n", " )\n", "model.view_model()\n", "\n", "\n", "display(Image(filename=\"causal_model.png\"))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### DOT format" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model to find the causal effect of treatment X on outcome Y\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# With DOT string\n", "model=CausalModel(\n", " data = df,\n", " treatment='X',\n", " outcome='Y',\n", " graph=\"digraph {Z -> X;Z -> Y;X -> Y;}\"\n", " )\n", "model.view_model()\n", "\n", "from IPython.display import Image, display\n", "display(Image(filename=\"causal_model.png\"))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model to find the causal effect of treatment X on outcome Y\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# With DOT file\n", "model=CausalModel(\n", " data = df,\n", " treatment='X',\n", " outcome='Y',\n", " graph=\"example_graphs/simple_graph_example.dot\"\n", " )\n", "model.view_model()\n", "\n", "\n", "display(Image(filename=\"causal_model.png\"))" ] } ], "metadata": { "kernelspec": { "display_name": "dowhy", "language": "python", "name": "dowhy" }, "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.5.2" } }, "nbformat": 4, "nbformat_minor": 2 }