{ "cells": [ { "cell_type": "markdown", "id": "612a3d67-bcd1-4a84-a5b0-b17e6e3f77cf", "metadata": {}, "source": [ "## Basic Usage\n", "\n", "\n", "### Plotting Class Inheritance " ] }, { "cell_type": "code", "execution_count": 1, "id": "2f64e256-519f-4554-b32e-490ee110de5d", "metadata": {}, "outputs": [], "source": [ "from inheritance_explorer import ClassGraphTree\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 2, "id": "4848c79c-7e10-4cb7-aaa4-5dfb7500705f", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAACbCAYAAABGZR4YAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdd1wU1/o/8M+yy1KlF2kqRUWwIbEFjBJQ7KI3aiwYjQpqlNhLchO98caYaDS2RLFFSVSi36CAib1EsCNSLDSxUKU3YWF3n98f/tgrAkrZ3VnkvF+vfSmzZ+c8szzMPnvmzAyPiAgMwzAMwzBMk6hxHQDDMAzDMExLxoophmEYhmGYZmDFFMMwDMMwTDMIuA5AUcrLy1FYWIjCwkK8ePECxcXFkEgkAACRSIQXL17I2rZp0wYCwcu3QkNDA9ra2tDT04OBgQEMDAygrq7OyTYwysPyhWkMli8Ml8RiMUpKSlBSUoKKigqUlJQAAAoKCmq0k0gkKC4urvV6Q0PDGj/z+Xzo6enJntPU1ISWllatdkz9WlwxVVFRgcTERDx+/BjPnj1DZmYm0tLSkJ6ejoyMDOTn56OgoAAikUhufero6MDAwADGxsawsbGBpaUlrKysYG1tDUtLSzg4OMDW1la2w2RUB8sXpjFYvjDKVFlZiYyMDKSlpSE3Nxd5eXmyf1995Ofno7S0FCUlJSgtLUVVVZXSYny1sNLR0YGxsTGMjY1hYmIi+7+xsTGMjIxgbm4Oa2trmJubg8/nKy1GVcBT1bP5KioqEBMTg+joaNy/fx8JCQlITEzE06dPIZVKAQAmJiawsLBAu3btYGFhASsrKxgbG8u+8RkYGEBfXx+6urrQ0dGBUCgEAKirq0NXV1fWV2FhIarfhhcvXkAkEqGoqEj2zbP6kZubW2PH+uzZM5SWlgIAhEIh7Ozs4OjoiE6dOsHZ2Rmurq5wdHRsdUnFBZYvTGOwfGGUITc3F8nJyUhJSUFqaqqscEpLS0NGRgays7NrtNfT06tVqBgZGcHY2Bi6urpo06YNdHV1oaWlJfu/pqambFRJT0+vVj68PrpUPar1qurRVCJCYWEhysvLUVFRgYKCAlRUVKC8vBwFBQUoLS1Ffn4+8vLykJOTIyv08vLyaozGCgQCmJuby/52rK2tYW1tDTs7O9jb28Pe3h5t2rSR51vNOZUopogI9+/fx6VLl3D79m3cuXMH9+/fh1gshr6+Prp06QJHR0d07twZnTp1QufOnWFvbw9NTU2uQ0dRURGSk5ORkJAgeyQmJuL+/fsQiUTQ1tZGz5490atXL/Tp0wceHh6wtrbmOuwWjeUL0xgsXxhFqqiowP379xEXF4eEhARZ8ZSSkoKioiIAL4vh9u3by0Ycraysaow+2tjYwNTUtEUf8i0vL0dWVhbS09NlxeKzZ8+QkZGB9PR0PHv2DGlpabIvK+bm5rLCysHBAV26dEH37t3h4ODQIr8gcFZMJSUl4ezZs7h06RIuX76M58+fQ09PD71790avXr3g6uqKXr16wcHBATwej4sQm6Wqqgr37t3DnTt3cOfOHURFRSE6OhoikQgODg4YNGgQBg4ciCFDhsDMzIzrcFUeyxeWL43B8oXliyKkp6cjKioKcXFxiI2NRVxcHJKSkiAWi6GhoSErxB0cHGoUCjY2Ni2yQJA3kUiE1NRUpKSkIDk5WVZ4JiUlITU1FRKJBFpaWnByckL37t3RtWtXdO/eHe+99x4MDAy4Dv+NlFZMSaVSREdHIywsDOHh4YiKioKOjg769+8PLy8vuLm5oW/fvi26Mn8bsViMmJgYnDt3DufOnUNERAQqKyvh4uKCkSNHYtSoUXB1deU6TJXA8oXlS2OwfGH5Im9lZWWIjo5GVFQUoqKiEBkZiUePHgEALCws4OzsDCcnJ7i6usLZ2Rldu3aFhoYGx1G3XFVVVbJR13v37iEqKgr379+v8Z67u7vDzc0Nrq6u6N27t0q93wovpmJiYrB//34cOXIE2dnZcHBwwJgxYzB69Gi4ubm16mr9xYsXOHv2LE6cOIHw8HDk5OSgS5cumDp1KqZNm9Yqh+tZvtSP5UttLF/qx/KlccrLyxEREYFz587h/PnziImJgVgshoWFBfr27Yu+ffuiX79+cHV1fefm+6iy7Oxs3Lx5Ezdu3MD169dx69YtFBcXQ1tbG/369YOnpye8vLzg6urK7d87KUBBQQFt2bKFXFxcCAA5ODjQN998Q/Hx8Yro7p0gFovpypUrFBAQQCYmJqSmpkZDhgyhQ4cOkUgk4jo8hWL50ngsX1i+NEZrzpc3iYqKom+//ZY+/PBD0tTUJADk6OhI8+fPp+DgYHry5AnXITKvkUgkFB8fT3v27CFfX1+ysLAgAGRgYEA+Pj60fft2evTokdLjkmsxlZqaSitWrCADAwPS0tKi8ePH09mzZ0kqlcqzm3eeWCyms2fP0vjx40ldXZ3Mzc1p9erVlJeXx3VocsXyRT5YvrB8aYzWki91kUgkdOXKFVqxYgV17NiRAJCZmRmNHz+edu3aRY8fP+Y6RKYJUlJSaNeuXTR+/HgyNDQkAOTk5ESrV6+m27dvKyUGuRRTCQkJNGnSJBIIBGRjY0MbN26koqIieay61Xv69CktWbKE9PT0qE2bNrR06dIWv9Nj+aI4LF+YxngX86UuV69eJT8/PzIzMyMA1KVLF/riiy/o9u3brBh/x1RWVtKZM2dozpw5slGrjh070hdffEFJSUkK67dZxVROTg4tWLCA1NXVydnZmX777TeqrKyUV2zMKwoLC2nDhg1kZmZGhoaGtGHDBqqoqOA6rEZh+aI8LF+YxngX8uV1z58/px9//JGcnJwIAHXv3p3WrVtHDx484Do0RkkkEglFRkbS0qVLycrKing8Hg0aNIiCgoLoxYsXcu2rScWUVCql7du3k76+PllYWFBgYCCJxWK5BsbUrbi4mL788kvS1tYmW1tbOnXqFNchvRXLF+6wfGEaoyXmy+uio6Pp448/JqFQSHp6euTv70+3bt3iOiyGY2KxmMLDw2ns2LGkrq5OBgYGtGTJEkpPT5fL+htdTD1+/Jg8PT1JIBDQl19+SaWlpXIJhGmcZ8+e0YQJE4jH45G/vz+VlJRwHVKdWL6oBpYvTGO0lHx5VUREBI0YMYJ4PB716NGD9u/fT2VlZVyHxaigrKwsWr9+PVlaWpKGhgb5+/tTSkpKs9bZqGLq2LFjpKenR05OTqzSVxHBwcFkYmJCdnZ2FBMTw3U4NbB8UT0sX5jGUOV8qRYbG0sffvghAaD333+fwsPD2TwopkEqKipo586dZGdnRwKBgGbMmEHZ2dlNWleDi6kffviB1NTUaN68eVReXt6kzhjFyMzMJA8PD2rTpg399ddfXIdDRCxfVBnLF6YxVDFfiIiKiopo0aJFJBAIqG/fvnTp0iWuQ2JaqKqqKgoKCiIbGxsyMDCg7du3N3pqwVuLKalUSp999hnx+Xz66aefmhwso1gikYhmzJhBAoGA9u3bx1kcLF9aBpYvTGOoSr5U++uvv8jS0pKMjY0pMDCQJBIJ1yEx74DS0lJauXIlCYVC6tWrV6NOVnhrMfX111+TQCCgP//8s1lB1ufIkSPUo0cP2QXTXn1YWVkppM/mOHnyJHXs2JH4fP5b21ZWVtKmTZuoV69epKurS6ampjR06FAKDQ1V2DD0v//9b+Lz+RQaGqqQ9b8Ny5eXBUJERATNmzePOnbsSEKhkExNTcnNzY2CgoJq/e7z8/Ppl19+IQ8PDzI0NCRNTU1ycHCgyZMn0927dxUaK8sX1dGc/cWoUaMIAK1du1ahMXKdL1KplL755htSU1OjKVOmUG5ursL62rBhg8rmytscPnxYFruGhoZS+mzs+6XK7++DBw+oX79+pKen1+B90xuLqd27dxOPx6O9e/fKJcDXRUREEI/Ho2XLllFJSQklJyeTtbU1xcXFUY8ePVTqDU5OTqZRo0ZR9+7dSU9P763FVGlpKbm7u1P37t3p8uXL9OLFC3ry5Al99NFHBIDi4uIUFqu/vz9pa2vTjRs3FNZHXVi+vPTgwQMCQF5eXhQTE0Pl5eWUkpJCkyZNIgC0ZMmSGu1nzpxJAoGAfvrpJ8rMzKSysjL6559/yMnJifh8PoWEhCg0XpYv3GvO/uLAgQOyDyVFF1NE3OVLaWkpjR49moRCIW3fvl1p/aparjSGp6en0oqpao19v1T1/RWJRDR37lzi8Xj073//+61faOotph49ekTa2tr05Zdfyj3Iap9//jkBoLS0tFrPKfsN1tHRITc3t3qfnzRpEn333XdUVVVFVlZWby2m5s6dS3p6epSVlVVjeWlpKWloaCi0mBKLxeTt7U2dO3dW2rViWL78z4MHD0ggEFB+fn6N5SKRiIyNjUlDQ6PG72XmzJnk5+dXaz13796VXXBOkVi+KN7b9i9N3V+kp6eToaEh+fr6Kq2Y4iJfXrx4QR4eHmRmZkaRkZFK6bOaqn7YNwQrpppv7969pK6uTgsXLnxju3qLqZEjR5Kzs7NCL5I3btw4AlDnhFNV29m9eoGvtxVTWVlZxOfzae7cuXKNsTGePn1Kurq69J///Ecp/bF8aZiePXsSACosLGxQey0tLVJTU1P42UksXxTrTfnSnP3F8OHDyc/Pj4KCgpRWTBEpP18mT55MxsbGFBsbq5T+XqXqH/Zvwoop+QgODiY1NTXaunVrvW3U6rr58aVLlxAeHo6dO3dCXV29ufdSrpdEIlHYuuVNS0urwW1DQ0MhkUjg7u6uwIjezMbGBmvWrMF3332H/Px8hfbF8qVhCgsLkZSUBBcXF+jr67+1fVlZGcrLy9G1a1fweDyFxsbyhTtN3V/s27cP9+7dw8aNGxUUWf2UmS8HDx5EcHAwDh8+jG7duim0L4apy4QJE/DNN99gyZIluHfvXp1t6iym9u/fj759+yqsGDh+/Dh4PB5OnDgB4GWhwuPx0K9fv7e+Ni8vD4sXL4a9vT2EQiEMDQ0xbNgwXLx4sUY7sViM4OBgDB48GG3btoWWlha6deuGLVu2QCqVytpt3LgRPB4PZWVliIyMBI/HA4/Hg0AgaPL23blzBwBgaGiIJUuWwMbGBkKhEO3bt0dAQIDCdz7V5syZA4FAgODgYIX2w/LlzflSXFyMyMhIjB49Gm3btsXBgwcbtN1Hjx4FAHz55ZcNat9cLF+4yZem7C/S0tKwZMkS7Nu3D23atGnS+9RcysiXFy9eYNmyZZg7dy4GDx6ssH6aoiG5Up2L1Y/Hjx9j4sSJMDAwgLGxMUaOHImUlJRa63748CF8fHygr68PbW1t9OnTB+Hh4fDy8pKta9asWXW219HRwYABAxAREdGs2P/73//K+nr1b/XUqVOy5SYmJvX28fDhQ4wYMUK2DR4eHoiMjGzw+5uTk4OAgAB06NABQqEQpqamGDduHO7evdvgdcjTqlWr0LNnTyxatKjuBq8PVb148YJ0dXVpx44dCh02IyIaM2ZMo4bhMzMzydbWlszNzSksLIyKioooISGBxo0bRzwej3bv3i1rGxYWRgBo3bp1lJ+fTzk5ObR161ZSU1OjpUuX1uqvMYdt3naYr3q72rZtS1OmTKGUlBQqKCigAwcOkI6ODnXq1KnBh3maa9q0adS/f3+FrZ/ly5utXbtWNjl40KBBDT5MkZWVRebm5jRr1qwGtZcXli/Kz5em7C+8vb1p3rx5sp+VfZivmqLzZe/evaSpqUnPnz9XWB9v09xcIfrf73jMmDF09epVKi0tpbNnz5KWlhb17t27RtukpCQyMDAgKysrOnPmDJWUlFB8fDx5eXmRqalprcN2dbWPjY2lIUOGUIcOHWq1b2zs9eWuq6srGRsb1/l+6evrk4eHB0VERFBJSQndunWLunfvTkKhsNb1wOp6fzMyMqh9+/Zkbm5OJ0+elL0HAwcOJE1NTbp69WqtfpXh9OnTBIDi4+NrPVermIqLiyMAdP/+fYUH1tid3fTp0wkAHT58uMbyiooKsrS0JC0tLdkEzrCwMBo0aFCt9U6dOpXU1dVr3XVensWUt7c3ASBbW1uqqqqq8dx///tfAkBfffVVg/pqrsOHD5NAIFDYRFGWL28nEonowYMHNGfOHOLz+fTNN9+8sX1ubi717NmTJk6cqPR70rF8UX6+NHZ/ERgYSHZ2djVutcNVMaXofBk7diyNGTNGIetuqObmCtH/cjEsLKxG++qzNXNycmTLxo8fTwDo2LFjNdo+f/6ctLW1axVH9bVPT08nDQ2NWu0bG3tTiikAdO3atRrLY2NjCQD16NGjVvvX399PPvmEANDvv/9eY3lmZiZpaGiQq6trrX6VQSqVUtu2bWn9+vW1nqt1mO/JkycAgHbt2jV5OExRQkJCAAAjRoyosVxDQwOenp4oLy/H6dOnAQAjR46sNTQPAD169EBVVVW9xz3lQUdHBwDg5eVV6/DPqFGjAEAWp6I5ODhALBYjPT1dIetn+fJ2QqEQjo6O+OWXXzB69Gh8/fXXOHfuXJ1ty8rK4O3tDScnJ/z+++/g8/lN7rcpWL4oP18as794+vQpli1bhn379slexyVF50t8fDx69+6tkHU3R2Ny5VWvb4uNjQ0AICMjQ7bs1KlTAABvb+8abU1NTeHo6FhrnfW1t7S0RKdOneQWe2Noamqib9++NZZ169YNlpaWiImJQWZm5htff/z4caipqWHkyJE1lrdt2xbOzs6IiopCWlpas2JsCh6Ph/feew/x8fG1nqtVTBUUFEBDQwPa2tpKCa6hRCIRioqKoKmpWeccAXNzcwBAVlYWAKCoqAhff/01unXrBkNDQ9kx3mXLlgF4eSxeUTp06AAAMDY2rvWcmZkZgJfHg5WheuJ8eXm5QtbP8qVxqj8cw8PDaz0nFosxfvx4WFlZ4cCBA0ovpACWL1zkS2P2F2FhYSgqKsKgQYNqzMXx9fUFAHz11VeyZcnJyQ2OoakUnS+lpaXQ1dVVyLqbqrG58qrXTzwRCoUAIJtnJxKJUFJSAk1NzTq329DQsFYsb2pfnT/yiL0xjI2N6zxppjqe58+f1/va6hilUin09fVr5DmPx5PNMUxKSmpWjE2lp6eHkpKSWstrFVPW1tYQiUTIzc1VSmANpaGhAX19fVRUVNS5IdnZ2QBeVq7Ayw+ttWvXYvbs2UhMTIRUKgURYfPmzQAAIqrxenmeLVU9Wa+u6rs6iaqTVtGqJ6++/kcoLyxfGh8XgDonFfv7+0MkEuGPP/6oMULh4OCA69evN6m/xmL5ovx8acz+4rPPPgO9nJ5R4xEUFAQAWLt2rWyZg4NDo96DplB0vpiZmb11FEPZGpsrjV13mzZtUFFRgdLS0lrPv16EvK396/uZpsSupqaGysrKWm0LCwvr3Y6ioqI6l1fH/3qR93qMBgYGEAgEqKqqqjPfiQgeHh71rkOR0tPT6/zd1iqm2rdvDwB1nmHAtbFjxwIATp48WWO5SCTC+fPnoaWlBW9vb0gkEkRGRqJt27YICAiAqampbGdW3zcobW3tGgnTuXNnBAYGNinO4cOHw8rKCqdOnUJFRUWN58LCwgAAPj4+TVp3Y8XExEBfXx8WFhYKWT/Ll5dezZelS5di6tSpdb7u77//BlB7uH/NmjW4d+8eTpw4ISu4uMDyRfn5okr7i8ZSdL70798f58+fV8i6m6OhudIUw4YNA/C/w3fVsrKykJiY2OD2ubm5SEhIaHbsFhYWtQ7jZmVl4enTp/VuQ2lpKWJiYmosi4uLQ0ZGBnr06PHWfBk3bhzEYnGdZ/99//33aNeuHcRi8RvXoQglJSW4ceMG+vfvX/vJuiZY2dvb07Jly+Q/e+s1zT3bpri4uMZZCIGBgbK2H374IQGgH374gXJycujFixd04cIFateuHQGgs2fP1lj30KFDSV9fn54+fUpXr14lgUBQ7yTZhlwB/e+//yaBQEBjxoyhxMREKigooIMHD5KOjg717du3xkVAFWnAgAH08ccfK2z9LF9q58uSJUuIx+PRf/7zH0pNTaWKigpKTU2l5cuXEwBydXWt8fvfv39/rfvGvf54fTKnorB84Wb/0tz9BVcT0BWdL5cvXyYASr91zauamytE9efiihUrCABFR0fLliUnJ5ORkVGNs/Pi4uJo6NCh1L59+1oTyutqf+/ePfL29iYzM7O3ns33ttjnz59PAGjbtm2y2zJNmDCBrKys6p2ArqOjQ+7u7nT9+nUqLS1t9Nl82dnZZG9vT3Z2dvTXX39RYWEh5eXl0c6dO0lbW5uCg4Pr+lUp3ObNm0lHR6fW3S2I6rkC+urVq8nCwqLWmSXyEhISUu8Hxqs3P6x+vHrLidzcXFq4cCHZ2tqSuro66evrk7e3N50/f75GHzk5OeTv7082Njakrq5O5ubmNH36dFq5cqVsva+eEfDw4UMaMGAA6ejokI2NTa1Tt6tPha7r8fqppNWuXr1K3t7epK+vT0KhkBwdHWnNmjVKK6SSk5OJx+PRX3/9pdB+WL7UzJeioiLas2cPeXt7U4cOHUgoFJKuri65urrSd999V+v3P2LECJUopli+cLd/IWra/sLf37/ObfX29pbDO/lmysoXd3d36tevn9LPbJVHrly7dq3edby+fMSIEbLXJSQkkI+PD+np6ZG2tja9//77dPnyZRo0aBBpa2vXivXV9tWXWwgPDydPT0/Z+mfOnNmo2KsVFhbSrFmzyMLCgrS0tMjd3Z1u3bpFrq6usnWvWLGi1o2Lb968SR4eHqSrq0taWlo0cOBAioiIaPD7m5eXR4sXLyY7OztSV1cnU1NTGjJkSK0vKsqSnZ1NRkZG9X4RrLOYevz4MWloaNCmTZsUGhyjWBMmTCA7OzuFfWhVY/nybmD5wjSGsvIlLi6OtLS0aPny5QrtpyXo3LkztWvXjuswWp2qqir68MMPydbWlkpKSupsU++9+VavXk3a2tqUmpqqqPgYBfr7778JAIWHhyulP5YvLRvLF6YxlJ0vBw4cIB6P1yoK8MzMTDI0NKx138rU1FQSCAQ0ffp0jiJrncRiMX388ceko6NT43Ds6+otpioqKsjR0ZHc3NyUdliKkY/Hjx+ThYWFQucyvI7lS8vF8oVpDC7yhYho06ZNxOPxaNGiRQofDeNSZmYmAaAZM2bQ06dPqaysjG7cuEF9+vQhIyMjSklJ4TrEViMvL4+8vb1JS0uLLly48Ma29RZTRC8vU29qakqjRo1S+vFqpmkKCwupW7du1LVrVyooKFBq3yxfWh6WL0xjcJkvRC+vuK6jo0MDBgygzMxMpfevLOfOnaOxY8fK5lyam5vTlClTKDk5mevQWo2YmBiys7Mja2trun79+lvbv7GYIiK6cuUKaWpqkq+vL4lEIrkEyShGVlYW9e7dm2xsbCg9PZ2TGFi+tBwsX5jGUIV8ISK6e/cu2dnZkaWlZa1bojBMc4lEIlq3bh1pa2vToEGDGnxfyLcWU0Qvb+6nr69PAwcOpLy8vGYFyihGXFwcdejQgRwcHCgxMZHTWFi+qD6WL0xjqFK+EL08/DJz5kxSU1OjDz/8UCn3emTefadPn6ZOnTqRtrY2rVu3rlGHkxtUTBG9/GNq3749OTg4cHbHZqZuQUFBpKenRx988AHl5uZyHQ4RsXxRZSxfmMZQxXypdu3aNerVqxepq6uTv78/m0/ENElkZKTsEjXjxo2jJ0+eNHodDS6miF5OjBs6dCjx+XxasWKFwu4UzjRMdnY2jR07lng8HgUEBKjc74Pli2ph+cI0hqrnSzWxWEy7d+8mOzs7EggENHXqVIqPj+c6LKYFOHPmDA0aNIgA0Pvvv09nzpxp8roaVUwRvbyC8a5du6hNmzbUpUsXpZ0ay/xPZWUl7dixg0xMTKh9+/ZvPcuASyxfuMfyhWmMlpQvr6qqqqKgoCBydnYmNTU1Gjp0KB09epTNxWNqKCgooB07dpCLiwsBoMGDB9PFixebvd5GF1PVHj16ROPGjSMA5OHhQbdv3252MMzbhYSEUOfOnUkoFNLixYupqKiI65AahOULN1i+MI3RUvPlVRKJhI4fP07Dhg0jPp9PpqamtHjxYrp37x7XoTEckUqldPHiRZo6dSppaWmRjo4OffLJJ3Tz5k259dHkYqra9evXacCAAcTj8cjLy4tCQ0PlERfzColEQqGhodS3b18CQCNHjmyxp8iyfFE8li9MY7xL+fK69PR0Wr9+Pdnb2xMAcnJyohUrVtCVK1dIKpVyHR6jQBKJhK5cuUIBAQFkbW0tu8XTTz/9pJATXZpdTBG9rPpOnDhB7u7uBIB69+5Nhw8fVtlj7C1Ffn4+bd68mTp06EB8Pp8mTJjwTnxDZ/miGCxfmMZ4V/OlLhKJhC5cuECfffYZWVlZEQDZDbcvX77MDgW+I4qLi+nEiRM0c+ZMMjExIQDUtWtX+vrrrykuLk6hfculmHrVtWvX6KOPPiI+n0+GhoY0b948uQ6lveuqqqooPDycxo8fTxoaGqSjo0Pz589/Z89SYfnSPCxfWL40RmvLl7pIpVK6fv06LV++nBwcHAgA6ejo0NChQ2njxo0UHR3NRq1aCJFIRJcuXaKvvvqK3n//fRIIBMTj8ahPnz60fv16pV7Gg0dEBAXIyMhAUFAQfv31Vzx8+BBOTk4YO3YsfHx84OrqCh6Pp4huW6TKykpcunQJx48fx/Hjx5GZmQkTExPMmTMHy5cvR5s2bbgOUeFYvjTc6/mSlZUFd3d3TJ8+HePHj2f5wvKlBpYvb5aSkoLz58/j/PnzuHDhAnJzc2Fqago3Nzf069cP/fr1g6urK3R1dbkOtdXLycnBjRs3cOPGDVy7dg3Xrl3DixcvYGtrCy8vL3h6esLDwwNmZmZKj01hxdSrrl+/jkOHDiE0NBRPnjyBlZUVRo8ejWHDhmHAgAEwMDBQdAgqJz09HRcvXkR4eDhOnTqFoqIi9OzZEz4+PtDW1saBAwdw7949eHl5YdGiRRg2bFir+YBg+VLbm/Jl6tSpsLe35zpEzrB8qY3lS9NIpVLExMTgwoULiIyMxI0bN5CRkQE+nw8nJye4urrCzc0NPTttshgAACAASURBVHr0gJOTE3R0dLgO+Z2Vl5eH2NhYxMbG4ubNm7hx4wZSUlLA4/HQqVMn9O3bF+7u7vD09ISdnR3X4SqnmHpVdHQ0QkNDERoairt374LH46FHjx4YOHAgPDw80KdPH5ibmyszJKVITU1FZGQkLl++jEuXLiE5ORlCoRADBgzAmDFjMHr0aLRv377GayIiIvD999/j5MmTsLe3x/z58zF79mxoa2tztBXKx/Kl4fnCsHxh+SJ/YWFh2LJlC/755x+Ym5ujoKAAZWVlUFNTg62tLbp3746uXbuiW7du6NKlC+zt7aGlpcV12C1GQUEBUlJSEB8fj/j4eMTGxiI+Ph6ZmZkAABMTE/Tu3Rt9+/aVPQwNDTmOujalF1OvysvLwz///INLly7h4sWLiI+PBxHBxsYGrq6usoezszNsbGxaxMhMVVUVUlNTERsbi6ioKNkjPz8fQqEQffr0waBBgzBo0CD079+/QYVRYmIiduzYgd27d0NXVxeffvopFixYACsrKyVskepg+dKwfGFeYvnC8qWpiouLceTIEezcuRPR0dFwdHTE9OnTMXPmTBgZGcl+B/Hx8YiLi0NsbCySk5MhkUjA4/FgZWUFBwcH2cPe3h52dnawtLRE27Ztud48pRKLxcjOzsbTp0/x6NEjJCUlITk5WfbIy8sDAGhqasLJyQndunVD165d0b17d3Tr1g0WFhYcb0HDcFpMvS4/Px+3b99GVFQU7ty5g6ioKKSmpgIAtLS00KlTJ9nDwcEBVlZWsLKygrW1NfT09JQW5/Pnz5GZmYlnz54hPT0dycnJSEhIQEJCAlJTU1FVVQU+n48uXbrU2Gm7uLg06xvL8+fPsX//fmzduhW5ubmYOHEili1bhm7duslx61oOli9MY7B8Yd4mKioKgYGBOHToEMRiMUaNGgU/Pz94enq+tdiuqKiQFQopKSmyYiElJQVPnz6FVCoFAAiFQlhYWMDa2hpWVlawtLSEtbU1zMzMYGRkBGNjYxgbG8PExEQlR2AAQCKRIC8vD3l5ecjPz5f9PzMzE5mZmXj69CkyMzORnp6OrKysGttua2tbo9CsLjZtbW0hEAg43rKmU6liqi75+fl4+PAhHj58iKSkJCQmJiIhIQGPHj1CeXm5rJ2Ojg7atWsHQ0NDGBgY1Hjo6elBIBDIJlryeDzZPAqJRILi4mLZegoKCkBEKCwsREFBAQoLC2WPnJwcZGRkQCQSydobGBjA3t4enTp1QufOndG5c2d06tQJjo6OCvtWKBKJEBwcjB9++AH37t2Dm5sbVqxYgZEjR7aIb9eKpOr5oqOjA0dHR6XmC1O/uvLl3r17SE1NRWVlpaxda9q/tDZFRUUIDg7GL7/8grt376JLly745JNPMGvWLBgbG8ulj8rKSjx58gQZGRl49uwZMjIykJ6ejrS0NFnxkZeXh4qKihqv4/P5suJKW1sbhoaG0NTUhJaWFgwMDKClpSX7P4/HA5/Pr1X46+rqQl1dXfZzeXl5jX6q8xF4OfJZWlqKkpISVFRUoKSkBKWlpSgvL0dJSQmKi4uRm5uLgoKCWtuoq6sLc3NzWFpawsbGBhYWFrCxsYGlpaXsS4mVlRX4fL5c3lNVo/LF1Jvk5+fLkrP6m9zrO6jCwkKUlJRAJBLhxYsXAGrv4F6t/vX09MDn8+vcaZqYmMiSwsLCAu3ateN0h0ZEOH/+PLZs2YKTJ0+iY8eOmDdvHvz8/Ng31DpwnS+hoaH46quvEBERgd69eyt9+5m3k0qlGD58OBISEnD16lXk5eW12v3Lu656FOr333+HRCKRjUJ5eXlxFlNZWZlslCc3N1f2/7y8PLx48QIFBQWoqKhAeXk5CgoKZIVRdXHzah5WKyoqko0MAS9Hh16fOF+dl9VfCnR1daGlpVXr/3p6erJRs+oir/qhoaGh+DdIhbXoYor5n5iYGPz88884ePAg9PT0MGPGDAQEBMDS0pLr0Jj/TyqVYtiwYXj48CGio6NhZGTEdUjMa9auXYu1a9fi8uXL6N+/P9fhMHJWPQr1888/IyYmBk5OTpg2bRpmz57N/h6ZZmHF1DsmOzsbv/zyC3bs2IGSkhJMmDABK1asgLOzM9ehMXg5H8bFxQXvv/8+jh49ynU4zCsuXboELy8vbN68GQsWLOA6HEaOqkehfvvtN0ilUpUYhWLeLayYekdVz6v6/vvv8eDBA3h6eiIgIIDNq1IBly9fhqenJ7Zu3Yp58+ZxHQ6Dl19CXFxc4O7ujj/++IPrcBg5KCwsxB9//IHt27cjLi4Orq6u8PPzw6RJk1r9hUoZ+WPF1DtOKpXiwoUL2LJlC8LDw9G9e3d89tlnmDZtGjQ1NbkOr9VavXo1vv/+e1y7dg0uLi5ch9OqSaVSeHt74/Hjx7h9+zb09fW5DolphupRqKCgIAgEAkyaNAn+/v7o1asX16Ex7zBWTLUid+/exS+//IKDBw9CX18fc+bMwfz582FiYsJ1aK2OVCrFkCFD8OTJE0RFRSn11Humpq+++gobN25EZGQk+8BtoQoKCnD06FFs27YN8fHxslGoyZMns9vAMErBiqlWKCsrCzt37sS2bdtQVlaGCRMmYOXKlXBycuI6tFYlOzsbPXv2xMCBA3HkyBGuw2mVzp8/D29vb/z888/w8/PjOhymEYgIkZGRCAoKQlBQENTV1fHxxx9jzpw5bLSXUTpWTLVipaWlOHToEDZv3ozExER8+OGHbF6Vkp06dQojRozA7t278emnn3IdTquSlpaGXr16wdPTE4cPH+Y6HKaBsrOz8euvv2L37t1ISUmRjUJNmTKF3SuP4QwrphhIpVKcPHkSW7duxblz59CzZ0/MnTuXzatSkpUrV2LLli24fv06evTowXU4rYJYLIaHhweeP3+O27dvswnJKq567mdgYCCOHz8ObW1tTJw4EfPmzWN/M4xKYMUUU0N0dDQ2b96MI0eOwNjYGP7+/liwYIHcrgTM1CYWizFo0CAUFBTg1q1b7EKNSrBs2TLs2LED165dYx/GKiwrKwsHDhxAYGAgHj16xEahGJXFiimmTpmZmdi1axe2bduGyspKTJ48GYsWLYKjoyPXob2Tnj17BhcXF/j4+GDPnj1ch/NOO3nyJEaNGoX9+/fjk08+4Toc5jWvj0Lp6OhgwoQJ+Oyzz9C9e3euw2OYOrFiinmj6nlVmzZtQlJSEoYPH47PP/+cXexOAao/5A8cOABfX1+uw3knPX36FL169WJFqwrKzMzEwYMHsWvXLqSmpspGoaZOncpGaxmVx4oppkFen1fl4uKChQsXYtKkSTVuosk0z6JFi7Bnzx7cunWLjQLKWVVVFQYOHIiSkhLcuHGDfUCrgFdHoUJCQqCrq4sJEyZgwYIF6Nq1K9fhMUyDsWKKabSoqChs2bIFhw8fhqmpKfz8/BAQEMDubSUHVVVV+OCDD1BWVoYbN26wG1bLUUBAAPbv34+bN2+iS5cuXIfTqmVkZCAoKAg7d+7E48ePZaNQvr6+LOeZFokVU0yTPX78GDt37kRgYCCqqqowefJkLF68GJ07d+Y6tBbt0aNH6NWrF6ZMmYIdO3ZwHc474ejRo5gwYQKCgoIwdepUrsNplV4fhWrTpg3Gjx+PgIAAdu9QpsVjxRTTbCUlJdi3bx82b96MZ8+esXlVcnDs2DGMHz8ehw4dwqRJk7gOp0VLTk7Ge++9h6lTp2L79u1ch9PqpKen47fffsPPP/+MtLQ0fPjhh/Dz88OYMWMgFAq5Do9h5IIVU4zcVM+rWr9+Pa5evQpXV1cEBARg8uTJEAgEXIfX4sydOxeHDx/GnTt3YGdnx3U4LVJFRQXc3NwgkUhw7do1dghJSSQSCS5evIjAwED8+eefMDU1xSeffILZs2fD3t6e6/AYRu5YMcUoxKvzqqytrTFnzhz4+fnB0NCQ69BaDJFIhP79+4PP5yMyMpJ9i28CPz8/HD16FFFRUawgVYK0tDT8/vvv2LFjB9LT02WjUD4+PuxEFeadxoopRqFSU1Oxa9cu7Nq1CxKJBDNmzMDixYvRvn17rkNrEZKTk+Hq6oqZM2di06ZNXIfTohw5cgSTJ0/GsWPHMG7cOK7DeWdVVlbi9OnTCAoKwp9//gkzMzNMmzYN/v7+sLW15To8hlEKVkwxSlFcXIz9+/dj06ZNSEtLw/Dhw7Fq1Sq8//77XIem8oKDgzFp0iT8+eef8PHx4TqcFiExMRHvvfceZs+ejR9//JHrcN5JycnJ2LNnD/bv34/c3Fw2CsW0aqyYYpRKIpHgr7/+wrp163D9+nU2r6qBPv30Uxw/fhx37txBhw4duA5HpZWXl6N///7Q0NDAlStX2OFROaqsrMSJEycQGBiI8+fPw8LCAr6+vpgzZw7LS6ZVY8UUw5mIiAhs3boVf/75J9q1awd/f3/4+/vDwMCA69BUTnl5Ofr16wctLS1cuXKFffN/g+nTpyM0NJQVnnKUmJiIffv2Yd++fcjLy5ONQo0dO5Z9CWIYsGKKUQEpKSnYunUr9u7dCz6fj+nTp2PJkiVo164d16GplHv37qFPnz74/PPPsW7dOq7DUUl79uyBn58fQkJCMGbMGK7DadFEIhFCQ0Nlo1CWlpaYOnUq5s6dy+Y8MsxrWDHFqIyioiL8+uuv+PHHH5Geno7hw4fjyy+/RL9+/bgOTWVUFwuhoaEYOXIk1+GolPj4ePTt2xcLFy7Et99+y3U4LVZCQgL279+PvXv3oqCgAB4eHmwUimHeghVTjMqpnpfx448/4saNG3Bzc8Pnn3+OcePGgc/ncx0e53x9fXH69GncvXsXlpaWXIejEkpLS9GnTx+Ympri/Pnz7EO/kV4fhbKyssKUKVMwb948NkLMMA3AiilGpb06r6p9+/YICAjArFmzoKOjw3VonCktLUXv3r1hbm6O8+fPswITLwvMM2fO4M6dO7CysuI6nBbj4cOH+PXXX2uNQrEvLgzTOKyYYlqE5ORkbNu2DXv27IFAIMD06dOxdOlS2NjYcB0aJ+Li4tC3b18sX74ca9as4TocTu3YsQMBAQH4+++/MWTIEK7DUXkVFRUICwtDYGAgzp07BwcHB0yZMgUzZ85stX9PDNNcrJhiWpTqeVUbNmzA8+fP4ePjgyVLlqBv375ch6Z01UXE6dOnW+19EGNiYtC/f3+sWLECq1ev5joclfbgwQMcOHAAu3fvRmlpKcaMGQM/Pz94enqCx+NxHR7DtGismGJapMrKShw5cgQbN25EXFxcq51XNXnyZFy4cAF3795F27ZtuQ5HqQoLC+Hq6or27dvj7Nmzrer33lCvj0J17NgRM2fOxIwZM2BmZsZ1eAzzzmDFFNPiRURE4Pvvv8fJkydhb2+P+fPnY/bs2dDW1uY6NIUrLCxEr169YGtrizNnzrSagoKI8NFHH+Hq1auIjo5udYXk29y7dw9BQUHYvXs3ysrKMHr0aDYKxTAKpMZ1AAzTXO7u7ggLC0NCQgKGDx+OL774ApaWlvj888+RlpbGdXgKZWBggODgYEREROCHH37gOhyl2bx5M0JDQ/HHH3+wQur/KykpQWBgINzd3dG1a1eEhIRg+fLlePbsGf744w94eXmxQophFISNTDHvnJycHOzbtw9bt25Fbm4uJk6ciKVLl6J79+5ch6YwP/74I1auXImLFy/C3d2d63AU6ubNmxgwYAD+85//YOXKlVyHw7moqCgEBgbi0KFDqKqqYqNQDMMBVkwx7yyRSITg4GBs2LAB8fHxcHNzw4oVKzBy5Mh37kOGiDB27FhERUUhOjoaJiYmXIekEAUFBejVqxecnJwQFhYGNbXWObheXFyMI0eOYNeuXbhz5w46d+6MGTNmYObMme/s755hVBkrpphW4dV5VQ4ODvjss8/euXlVBQUFcHFxgbOzM8LDw9/ZgvHOnTu4c+dOqywaXh2FEovFGDVqFBuFYhgV0Dq/1jGtTvW8qocPH2LYsGFYtWoVOnTogJUrVyI9PZ3r8OTC0NAQwcHBOHv2LH766adaz0skEkRERHAQWePcunWrzuXfffcd/vrrLxw+fLhVFVJFRUUIDAyEi4sL3nvvPVy5cgX//ve/kZaWxuZCMYyqIIZphbKzs2n16tVkYmJCQqGQfH19KS4ujuuw5OLbb78ldXV1unr1qmxZRkYGffDBB2RhYUFSqZTD6N6svLycdHR0yNfXl8rKymTLL126RAKBgDZv3sxhdMp1+/Zt8vPzIx0dHdLU1KTx48fT2bNnuQ6LYZg6sMN8TKtWPa/q+++/x/3799+JeVVSqRTDhg3Dw4cPER0djaioKHz88ccoLi6GWCzGrVu38N5773EdZp1CQ0Ph4+MDPp8POzs7nDhxAkZGRnBxcYGrqytOnDjRYn8vDVFUVITg4GD8/PPPiImJgZOTE6ZNm4bZs2fDyMiI6/AYhqkHK6YYBi/n45w/fx5btmzByZMn0bFjR8ybNw9+fn7Q0tLiOrxGe/78OXr27AlnZ2ecP38ePB4PUqkUQqEQy5cvx9q1a7kOsU7Tpk3DkSNHUFVVBXV1dQgEAtjZ2aGiogK3b9+GgYEB1yEqRPVcqN9++w1SqVQ2F6q1XtmeYVoaVkwxzGtiYmLw888/4+DBg9DT08PcuXMxf/78FjVPJy0tDWPGjEFMTAwkEkmN5zp16oSEhASOIqtfVVUVjI2NUVJSUuu5YcOG4dixY+/UCQOFhYX4448/sH37dsTFxcHV1RW+vr6YNm0aDA0NuQ6PYZhGYMUUw9QjOzsbv/zyC7Zv347S0lJMmDABK1asgLOzM9ehvdG5c+cwceJElJSUoKqqqs42iYmJ6Nixo5Ije7MzZ87A29u7zucEAgEcHR0REhICBwcHJUcmX6+OQvH5fEyaNAn+/v7o1asX16ExDNNE7Gw+hqmHubk51qxZg7S0NAQGBuL27dvo1q0bBg8ejLCwMKja95CqqiosXboUQ4YMQWFhYb2FlEAgQGhoqJKje7uQkBAIhcI6nxOLxXj48CF69uyJ//u//1NyZM1XUFCAwMBAdOvWDe+99x6ioqKwefNmZGRkYNeuXayQYpgWjhVTDPMWmpqamDZtGuLj43HmzBloampi9OjRcHFxQWBgICoqKrgOEQCQlZWFyMhIAC8noddHIpHg2LFjygqrQaRSKY4ePYrKysp624jFYpSVlWHz5s11HgpURVFRUfD394eVlRWWLVuG999/H3fu3MHt27fh5+cHXV1drkNkGEYO2GE+hmmC6OhobN68GUeOHIGRkRHmzJmDBQsWwNjYuMHrePHihdznABERdu/ejYCAAEil0npHp3g8HjIyMlTmvnZXrlzBBx98UO/z6urq4PF4+Oabb7B06VKVvqFzdnY2fv31V+zevRspKSlwdXWFn58fpkyZAh0dHa7DYxhGAdjIFMM0gYuLCw4ePIinT59izpw52LZtG6ysrDBt2jQ8ePDgra9PSEhA79695X4jZh6PBz8/P0RHR8PZ2bneokNNTQ0nT56Ua9/N8eeff9Z7iE9NTQ0uLi6IjY3FihUrVLKQkkqlOHfuHCZMmAAbGxt899138PT0RHR0tGwUihVSDPMO4+TqVgzzjikpKaFdu3ZR586dSU1Njby8vCg0NLTe9v7+/gSALC0tKSkpSSExVVVV0fr160ldXZ0EAgEBkD34fD4NHz5cIf02llQqJQsLixrxASB1dXUSCoW0fv16kkgkSoll7969lJiY2OD2mZmZtH79erKzsyMA5OrqSrt27aLS0lIFRskwjKphxRTDyJFEIqHQ0FDy8vIiANSzZ086cOAAVVZWytrk5eWRpqamrGAwNjammJgYhcUUFxdH3bp1Iz6fX6NYEQqFVFxcrLB+G+rmzZu1Cik1NTXq27cvJSQkKCUGqVRK//73vwkALVu27I1tJRIJnT17lsaPH0/q6upkYGBAfn5+Cv0dMgyj2lgxxTAKEhUVRb6+viQQCKht27a0evVqysvLo2+++abGSJFAIKA2bdrQtWvXFBZLZWUlrV+/nvh8vqxvHo9H//d//6ewPhtq5cqVpK6uLisuNTQ0lDoaVVFRQZMnTyY1NTUCQIaGhiQSiWq1y8jIoPXr15OtrW2NUahXb3vDMEzrxCagM4yCPXnyBFu3bsWePXsglUohEAhQWFhYow2fz4e6ujrCwsIUetXrmzdvYsqUKXj8+DEkEgmmTp2KgwcP1tm2tLQURUVFKCoqQnl5OYqLi2UXABWLxTXOqBMKhTXmBOnq6kIoFMLAwAAGBgbQ19evd66TnZ0dUlNTwePx4ObmhgMHDsDOzk6OW12/goICjBkzBlevXpVtG4/HQ3BwMMaPHw+pVIoLFy4gMDAQISEh0NXVxYQJEzB//nx069ZNKTEyDKP6WDHFMEpSXFyMBQsWyG4Z8jo1NTXw+Xz88ccf8PHxUUgMVVVVSEhIwJo1a2STvmfOnInMzExkZWXh+fPnKCgoQFFRUa0rpzeXrq4u9PX1YWhoCGtra5ibm0MoFGL37t0QCoVYuHAhVqxYobR70KWmpsLb2xuPHz+ucdYjn89H3759MXjwYOzduxfp6enw8PDA7NmzMXbsWGhoaCglPoZhWg5WTDGMEjk7O+Phw4f1XgeKx+NBTU0Nhw4dwoQJE5rcT1FREWJjYxEbG4uEhAQkJSUhOTkZjx8/hlgsBvDy+lkSiQSOjo5wdnZG27ZtYWZmBiMjI+jr60NPTw/6+vrQ19eHtrY2dHR0ZGfc8Xi8GvfJq6ioQHl5ueznwsJCiMViFBcXy4qz6kdBQQHS0tKQnZ2NqKgoFBQUoKqqSnYRVBMTEzg4OKBjx47o2LEjnJ2d0bNnT9ja2srtJsc3b97E8OHDUVxcXO/lI/T19TFx4kQEBASo/FXvGYbhFiumGEZJ3nS7lNepqalh165dmDVr1lvblpSU4OrVq7h+/TpiYmIQExOD1NRUEBGMjIzg6OgoK0wcHBzg4OAAe3t7GBgYoKysDPfu3UOfPn2au3lN8s8//2DAgAEQi8V49uyZrOhLSkqSPR49egSJRAI9PT10794dPXv2hKurK9zc3Jp0S5zjx4/j448/hkQikRWWr1NXV8eiRYvw/fffN3cTGYZpBVgxxTBKMmTIEFy4cKFRh882bdqERYsW1ViWl5eHS5cu4cqVK7hy5YrsZsZ2dnbo1asXevTogR49eqBnz56wsbGR92YoXVlZGeLj43H37l3ZIyYmBuXl5Wjbti3c3d0xYMAADBw4EN27d3/j6NWWLVuwaNEi8Hi8N14lHgCMjIyQlZUFdXV1eW8SwzDvGFZMMYwS3L9/H127dq1xPz91dXWoqalBKpVCLBbXe6+/NWvW4KOPPkJ4eDjOnTuHy5cvQyqVonPnznB3d4ebmxsGDRqEdu3aKWtzOCcWixETE4OIiAhERkbi4sWLyM3NhZmZGby9vTFq1CgMGTIE+vr6AF7eQmfx4sXYunVrg/vg8Xg4duwYxo0bp6jNYBjmHcGKKYZRAiJCTk4OcnNzkZubi+fPn+P58+eyZTk5OUhLS8Pz58+Rm5uLoqKiWiMnFhYWGDZsGIYPHw4vLy9ZocC8vAL53bt38ddff+HkyZO4desW+Hw+PD098a9//QvHjh3DqVOnGrVOHo8HT09PnD17VkFRMwzzrmDFFMOokNTUVBw8eBCHDh1CYmIiOnToAA8PDzg5OeGjjz5Chw4duA6xRcjNzcXp06cRFBSEM2fO1Dvqp6WlBaFQCF1dXWhra0NDQwPGxsbQ0tJCmzZtoK+vj23btkFTU1PJW8AwTEvCiimGUQERERHYunUrQkJCoK+vj3/961/w9fWFm5ub3M5ga43u37+PlJQUREdH49SpU7hx4wbMzMzw6aefYvHixY26MTXDMEx9WDHFMBwRi8U4ePAgNm7ciAcPHuCDDz7AggUL4OPjA4FAwHV476SkpCTs2LEDv/76K6qqquDr64tVq1ahffv2XIfGMEwLxoophlEyqVSKo0eP4uuvv0Zqaip8fX0REBCAHj16cB1aq1FSUoKgoCD8+OOPSE9Ph5+fH7744gu0bduW69AYhmmBWDHFMEp07do1zJs3D7GxsZg8eTLWrFkDe3t7rsNqtaqqqrB3717897//RWFhIZYtW4ZVq1bJLk7KMAzTEGpcB8AwrUFJSQkWLFgAd3d3mJmZITY2FkFBQayQ4pi6ujrmzJmDpKQkrF69Ghs2bICLiwuuXr3KdWgMw7QgrJhiGAW7evUqnJ2dceTIEfz66684ffo0uz2JitHS0sKyZcsQHx+Pdu3aYcCAAVi6dGm9V0hnGIZ5FSumGEaB9uzZAw8PD7i4uOD+/fvw9fXlOiTmDTp06IC///4b+/btwy+//IKhQ4ciLy+P67AYhlFxrJhiGAUgIixcuBB+fn5YsWIFQkJCYGpqynVYTAN98skniIyMRHJyMnr37o2kpCSuQ2IYRoWxYophFGD58uX4+eefERwcjG+++QZqavL/UwsODkbPnj2hpaUFHo9X42FtbS33/lqbnj174vbt2zA1NcXgwYPx7NkzrkNiGEZFsWKKYeTs22+/xaZNm3DgwAGMHz9eIX1ERkZi0qRJGDJkCHJycpCcnAxra2vExcWp1CUWSktL0bFjR4wcOZLrUJrExMQEf//9N/T19TF48GDk5uZyHRLDMCqIFVMMI0cRERH4+uuvsW3bNkyaNElh/Rw9ehREhM8//xy6urqwt7fHs2fP0LVrV4X1WR9dXV24u7vX+RwRQSqV1rrPYEtiZGSEM2fOQCQSYe7cuVyHwzCMCmKXWWYYORGJRPDz88OwYcMwb948hfZVfchJ1W+H0qZNG6SkpHAdRrOZm5tj37598PT0xNGjRxU24sgwTMvERqYYRk62bduGjIwM7Nq1S+F9SSQShffB1OTh4YHZs2dj8eLF7JIJDMPUOR6MtgAAC0lJREFUwIophpGTffv2Yfr06bCyslJYH8ePHwePx8OJEycAQDb5vF+/fm99bV5eHhYvXgx7e3sIhUIYGhpi2LBhuHjxYo12YrEYwcHBGDx4MNq2bQstLS1069YNW7ZsqXG4buPGjeDxeCgrK0NkZKRs8nv1fQWrY61+VFRU1Ln88ePHmDhxIgwMDGBsbIyRI0fWOZr18OFD+Pj4QF9fH9ra2ujTpw/Cw8Ph5eUlW9esWbOa/N42xKpVq5CRkYFTp04ptB+GYVoYYhim2a5cuUIAKDY2Vin9jRkzhgBQeXl5red69OhBVlZWNZZlZmaSra0tmZubU1hYGBUVFVFCQgKNGzeOeDwe7d69W9Y2LCyMANC6desoPz+fcnJyaOvWraSmpkZLly6t1Z+Ojg65ubk1Otbq5WPGjKGrV69SaWkpnT17lrS0tKh379412iYlJZGBgQFZWVnRmTNnqKSkhOLj48nLy4tMTU1JQ0OjQe+bPAwZMoR8fHyU1h/DMKqPjUwxjBxcvnwZHTp0QLdu3bgOpU6rVq1CamoqfvrpJ4wcORJ6enro1KkTDh06BAsLCwQEBCA7O1vWftCgQVi1ahUMDQ1hYmKCBQsWYPLkydiyZQuKi4vlGtusWbPQv39/6OjowMvLCyNGjMCtW7dqnDn3xRdfoLCwEFu2bMHgwYOhq6sLZ2dnHDp0CGVlZXKN521GjRqFf/75B8Rua8owzP/HiimGkYPU1FR07tyZ6zDqFRISAgAYMWJEjeUaGhrw9PREeXk5Tp8+DQAYOXJkrUN/ANCjRw9UVVXh3r17co2td+/eNX62sbEBAGRkZMiWVR9W8/b2rtHW1NQUjo6Oco3nbTp37oz8/HwUFhYqtV+GYVQXO5uPYeSgvLwcWlpaXIdRJ5FIhKKiImhqaqJNmza1njc3NwcAZGVlAQCKiorw448/IiQkBGlpabWKhhcvXsg1Pn19/Ro/C4VCAJDNzxKJRCgpKYGmpiZ0dXVrvd7Q0FCu8bxN9e+5vLxc6X0zDKOa2MgUw8iBgYEB8vPzuQ6jThoaGtDX10dFRQVKSkpqPV99eK9t27YAXh7GWrt2LWbPno3ExERIpVIQETZv3gwAtQ5v8Xg8hcffpk0bVFRUoLS0tNbzz58/V2j/r8vLywOPx2OFFMMwMqyYYhg56Nq1K2JiYlT2lPmxY8cCAE6ePFljuUgkwvnz56GlpQVvb29IJBJERkaibdu2CAgIgKmpqaxYKi8vr3Pd2traqKyslP3cuXNnBAYGyjX+YcOGAUCts+iysrKQmJgo177e5s6dO7Czs1PZkUiGYZSPFVMMIwejRo1CaWlprWJFVXz33XewtbXFwoULER4ejpKSEiQmJmLy5MnIzMzEli1bYG5uDj6fj0GDBiErKwsbNmxAbm4uysvLcfHiRezcubPOdffq1QuJiYl49uwZrl27hkePHmHAgAFyjX/dunUwMjLCwoULcfbsWZSWliI+Ph4zZsyQjagpAxHh8OHDGDNmjNL6ZBimBeD2ZEKGeXcMHTqURowYodA+QkJCCECtx7Vr12jDhg21ln/55Zey1+bm5tLChQvJ1taW1NXVSV9fn7y9ven8+fM1+sjJySF/f3+ysbEhdXV1Mjc3p+nTp9PKlStl63V1dZW1f/jwIQ0YMIB0dHTIxsaGduzYUW+sU6ZMoWvXrtUb5+vLX30/ExISyMfHh/T+X3v3F9LU38cB/J1bTSfbUspJ7qJG06JRkwhJXS3Jyi1WQjTRuqmL/tzsIrooiCAZRLcjFt1ERHaRV9lWhFrzz4pFNbAg2Wxz4awUnWarPOX5XTxP44nn+fE8PTqP0/cLDoyx8XlzLrb3zs73HLVaVCqVYmVlpej3+0WLxSIqlcpM7va0jo4OEYD4+vXreZlHRNlhmShyfS/RXHjw4AFsNhsePnyIPXv2SB1nydiwYQO+fv2KwcHBjM4RBAEVFRUoLCxEe3t7RmcRUXbh33xEc6Surg6HDx/GsWPHuGx+jn348AGFhYUQBOG352OxGAYGBlBTU5PxDJcvX0Z/fz88Hk/GZxFRdmGZIppDbrcbgiDg6NGj//bFT7MzPj6OEydO4P3790ilUggGg3A4HFCr1bhw4UJGZ3u9XjQ3N8PlcsFgMGR0FhFlH5Ypojm0evVqtLW1we/3o6GhgTckniPFxcVob29HMpnEjh07UFBQALvdDoPBgGAwCL1en7HZgUAADocDTU1NcDqdGZtDRNmL50wRZUBnZydsNhvsdjtu3LgBpVIpdST6P9y7dw9HjhyB1WrF7du3IZPJpI5ERAsQj0wRZUBNTQ18Ph86OjpQVVWFWCwmdST6A6Io4tKlS6ivr0dDQwNu3brFIkVEf4tliihDdu3ahefPn0MURWzbtg137tyROhL9D+LxOGw2G1wuF65evYrr169j+fLlUsciogWMZYoog9atW4fe3l4cOnQITU1NsNlsiMfjUsei/2BmZgZutxtGoxHRaBRPnjzByZMnpY5FRFmAZYoow/Lz8+HxeOD3+/Hu3Tts2rQJFy9exOTkpNTR6J8ePXqEiooKnDlzBk6nE69evcL27duljkVEWYJlimiemM1mhEIhnD9/Hm63G3q9HleuXEEqlZI62pLV09MDi8WCvXv3QqvV4uXLl2hubkZubq7U0Ygoi7BMEc0jhUKBc+fOYXBwEGfPnoXL5cKaNWvgdDozfgVv+oeZmRm0tbWhtrYWZrMZP378wOPHj3H//n0YjUap4xFRFuKlEYgkNDIyAo/Hg2vXrmFkZAQHDx7EqVOnYLFYkJPD3zpzaWhoCDdv3oTH48Hw8DDsdjucTid27twpdTQiynIsU0QLgCAIaG1thdvtxtOnT1FSUgKHw4HGxkZs3bpV6nhZa3x8HK2trWhpaUFXVxdWrlyJ48eP4/Tp01i7dq3U8YhokWCZIlpg3r59i5aWFrS0tGBgYAClpaWw2+2wWq2orq7mMv3/IhaLwefzwev1or29HTKZDPv370djYyPq6uqgUCikjkhEiwzLFNEC9uzZM9y9exderxf9/f3QaDSora3Fvn37UF1djbKyMqkjSm5ychKBQACdnZ3w+Xx48+YNVCoVdu/ejQMHDqC+vh5qtVrqmES0iLFMEWWJgYEB+Hw++Hw+dHV1IZVKoaioCFVVVTCbzaisrMTmzZuRl5cnddSMikajCAaD6O3tRXd3N/r6+vDz509s3LgRdXV1sFqtMJvNWLFihdRRiWiJYJkiykKCIODFixfo6elBd3c3AoEARkdHIZfLUVpaCpPJBJPJhPLycpSVlUGn02HZsmVSx/4jnz9/RjgcRl9fH0KhUHpLJpOQy+UoLy9PF8mqqipotVqpIxPREsUyRbQIiKKISCTyW+kIhUJIJBIAgNzcXKxfvz696fV66HQ6FBcXo6SkBEVFRZDL5fOaeWJiAolEAsPDwxgaGkI8HkckEkEkEkE4HMbHjx8BAHl5eTAajemCaDKZsGXLFuTn589rXiKiv8MyRbSIjY6Oor+/H+FwOF1UIpEIotEoxsbG0q/LycmBVqtFUVERCgoKoNFooFarodFooNFooFKpIJPJfjv3SK1Wp2/+OzU1BUEQAADfv39HKpXC9PQ0JicnMTExgWQyiWQyiYmJCYyNjSGRSPx2sVKFQgGdTpcuewaDAQaDIV385rvoERH9CZYpoiXq27dvSCQS6aNDiUQCnz59Speef92mpqYwPT2NL1++pN+fTCbx6+NDqVSmV8nJ5XKoVCrI5fJ0GftV0H491ul00Gq16aNjq1atkmQfEBHNBZYpIiIiolngJZaJiIiIZoFlioiIiGgWWKaIiIiIZkEO4K7UIYiIiIiy1V8c0L4QePwL8wAAAABJRU5ErkJggg==", "text/plain": [ "" ] }, "execution_count": 2, "metadata": { "image/png": { "unconfined": true } }, "output_type": "execute_result" } ], "source": [ "base_class = np.floating\n", "cgt = ClassGraphTree(base_class)\n", "cgt.show_graph()" ] }, { "cell_type": "code", "execution_count": 3, "id": "f85ab6c6-cb25-4326-8464-f14fcaf9cc7d", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 3, "metadata": { "image/png": { "unconfined": true } }, "output_type": "execute_result" } ], "source": [ "base_class = np.ndarray\n", "cgt = ClassGraphTree(base_class)\n", "cgt.show_graph()" ] }, { "cell_type": "code", "execution_count": null, "id": "d553a1de-4bfa-46e0-961c-547bfbb959b7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "8aa5df66-8b73-4ea0-b042-828409e33bcf", "metadata": {}, "source": [ "### Additional function tracking \n", "\n", "If you supply a function name via the `funcname` argument, then that function will be tracked as the classes are traversed. Any child class that overrides the function will be flagged and the actual source code of the function will be stored. After traversal, a code-similarity matrix between all classes that over-ride the function. \n", "\n", "This is best illustrated with an example: " ] }, { "cell_type": "code", "execution_count": 4, "id": "cf642e9e-8f69-4bd0-8f34-5856d03fe37a", "metadata": {}, "outputs": [ { "data": { "image/png": "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AMDKCjh+vPyFVULdunVDVFQUpkyZgpdffhkDBw7ETeNsoVQqDHdERERERGaWl5sLa1vb0t1JCCAmBihuqQCDATh1CsjJMU+BlYyDgwM+/fRTHDx4EJcvX0arVq3YilcGDHdERERERGaWl5sLK7W6dHdKSACysu5/uzHgVWPdu3fHyZMnMWbMGEyZMgWhoaG4c+eO0mVVGQx3RERERERmVqaWu8uXZffL+zEYgCNHqvyyCA/j5OSEBQsWYN++fTh79izatGmDnTt3Kl1WlcBwR0RERERkZgadrvTh7n5dMgtKT5dLJdQAvXr1QlRUFPr164eQkBD8+9//Rm5urtJlVWoMd0REREREZpaXmwvr0nTL1OuBGzfkZCoPar2zs6sx4Q6QM2quWbMGy5cvx/Lly9GrVy9cu3ZN6bIqLRulCyAiIiIiqk6EEMgrbctdRgbQoQPg4JC/3bwJREUBkycDjo6Avb3liq7kJkyYgK5du+KZZ55B+/btsW7dOvTv31/psiodttwREREREZmRQacDgNKFO3d3YMAAoFcvoFMnoFUroE4dOb6uVq0aHeyMWrRogePHj2Po0KEICQnBO++8A8PDurHWMAx3RERERERmlPdPuCv1bJn3srYG8vLMUFH1YW9vj++++w5LlizBl19+idDQUKSmpipdVqXBcEdEREREZEYGvR4AYGVTzhFQ1tZygpVqPjtmWbz00kvYs2cPIiMj0a1bN1y+fFnpkioFhjsiIiIiInP6J4ypVKryHcfaWl6y62GxgoODceLECTg6OqJLly4IDw9XuiTFMdwREREREZmRMLa0mSvcsWvmffn5+eHAgQPo0aMHHn/8caxatUrpkhTFcEdEREREZEbin5Y21YOWNCgJhrsScXJywubNmzFt2jSMGzcOH374odIlKYZLIRARERERmZO5u2Uy3D2UlZUV5s6di4CAALz88stISEjAN998A6vyBuwqhuGOiIiIiMiMzN5yxzF3JTZp0iT4+Phg1KhRuH37NtavXw/7GrSMRM2KskREREREFma2MXfmOk4NM2TIEGzfvh179+7F4MGDkZGRoXRJFYbhjoiIiIjIjEwtdwx3iunduzf279+PM2fOYMCAAUhPT1e6pArBcEdEREREZE7mCmXG7pgMd2XSrl07HDx4EFeuXMGAAQOQlpamdEkWx3BHRERERGRGprF2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", "text/plain": [ "" ] }, "execution_count": 4, "metadata": { "image/png": { "unconfined": true } }, "output_type": "execute_result" } ], "source": [ "from matplotlib.axes import Axes\n", "\n", "cgt = ClassGraphTree(Axes, funcname='clear')\n", "cgt.show_graph()" ] }, { "cell_type": "markdown", "id": "3b08a266-1985-430d-91e8-0496468c6b25", "metadata": {}, "source": [ "here, we're mapping out the `matplotlib` `Axes` class and tracking the `clear()` function. Any methods after the main parent that override `clear` are highlighted in red. Any classes that override **and** look similar (see below) are connected with additional arrows (red and brown). \n", "\n", "In the interactive graph, the same information is displayed, with overriding classes as purple nodes nad similar nodes connected by blue lines:" ] }, { "cell_type": "code", "execution_count": null, "id": "4962ce48-bef6-4366-adac-c12e1362d167", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "0dcff737-698a-4324-9d20-7d524b89fb52", "metadata": {}, "source": [ "We display the actual similarity coefficient matrix used to identify similar nodes:" ] }, { "cell_type": "code", "execution_count": 5, "id": "0848f631-7753-48cf-bf20-312498f31a12", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "({0: 'Axes', 1: 'GeoAxes', 2: 'LambertAxes', 3: 'PolarAxes', 4: 'Axes3D'},\n", " )" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cgt.plot_similarity()" ] }, { "cell_type": "markdown", "id": "b6a6ccd4-0ed0-49d0-8217-bcc797f63a11", "metadata": {}, "source": [ "The above plot is the code inter-comparison between every class that overrides `clear()`. A value of 1 is identical (the diagonal of this plot will always be 1) and a value of 0 is no similarity. " ] }, { "cell_type": "markdown", "id": "373cb635-9b61-4299-9555-3b6fa9d601e5", "metadata": {}, "source": [ "**Furthermore**, the actual source code is recorded during traversal, which you can inspect inividually:" ] }, { "cell_type": "code", "execution_count": 6, "id": "1c42a9ad-8278-49ac-a6eb-e087e6428e7e", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
def clear(self):\n",
       "    # docstring inherited\n",
       "    super().clear()\n",
       "\n",
       "    self.title.set_y(1.05)\n",
       "\n",
       "    start = self.spines.get('start', None)\n",
       "    if start:\n",
       "        start.set_visible(False)\n",
       "    end = self.spines.get('end', None)\n",
       "    if end:\n",
       "        end.set_visible(False)\n",
       "    self.set_xlim(0.0, 2 * np.pi)\n",
       "\n",
       "    self.grid(mpl.rcParams['polaraxes.grid'])\n",
       "    inner = self.spines.get('inner', None)\n",
       "    if inner:\n",
       "        inner.set_visible(False)\n",
       "\n",
       "    self.set_rorigin(None)\n",
       "    self.set_theta_offset(self._default_theta_offset)\n",
       "    self.set_theta_direction(self._default_theta_direction)\n",
       "
\n" ], "text/latex": [ "\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "\\PY{k}{def} \\PY{n+nf}{clear}\\PY{p}{(}\\PY{n+nb+bp}{self}\\PY{p}{)}\\PY{p}{:}\n", " \\PY{c+c1}{\\PYZsh{} docstring inherited}\n", " \\PY{n+nb}{super}\\PY{p}{(}\\PY{p}{)}\\PY{o}{.}\\PY{n}{clear}\\PY{p}{(}\\PY{p}{)}\n", "\n", " \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{title}\\PY{o}{.}\\PY{n}{set\\PYZus{}y}\\PY{p}{(}\\PY{l+m+mf}{1.05}\\PY{p}{)}\n", "\n", " \\PY{n}{start} \\PY{o}{=} \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{spines}\\PY{o}{.}\\PY{n}{get}\\PY{p}{(}\\PY{l+s+s1}{\\PYZsq{}}\\PY{l+s+s1}{start}\\PY{l+s+s1}{\\PYZsq{}}\\PY{p}{,} \\PY{k+kc}{None}\\PY{p}{)}\n", " \\PY{k}{if} \\PY{n}{start}\\PY{p}{:}\n", " \\PY{n}{start}\\PY{o}{.}\\PY{n}{set\\PYZus{}visible}\\PY{p}{(}\\PY{k+kc}{False}\\PY{p}{)}\n", " \\PY{n}{end} \\PY{o}{=} \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{spines}\\PY{o}{.}\\PY{n}{get}\\PY{p}{(}\\PY{l+s+s1}{\\PYZsq{}}\\PY{l+s+s1}{end}\\PY{l+s+s1}{\\PYZsq{}}\\PY{p}{,} \\PY{k+kc}{None}\\PY{p}{)}\n", " \\PY{k}{if} \\PY{n}{end}\\PY{p}{:}\n", " \\PY{n}{end}\\PY{o}{.}\\PY{n}{set\\PYZus{}visible}\\PY{p}{(}\\PY{k+kc}{False}\\PY{p}{)}\n", " \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{set\\PYZus{}xlim}\\PY{p}{(}\\PY{l+m+mf}{0.0}\\PY{p}{,} \\PY{l+m+mi}{2} \\PY{o}{*} \\PY{n}{np}\\PY{o}{.}\\PY{n}{pi}\\PY{p}{)}\n", "\n", " \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{grid}\\PY{p}{(}\\PY{n}{mpl}\\PY{o}{.}\\PY{n}{rcParams}\\PY{p}{[}\\PY{l+s+s1}{\\PYZsq{}}\\PY{l+s+s1}{polaraxes.grid}\\PY{l+s+s1}{\\PYZsq{}}\\PY{p}{]}\\PY{p}{)}\n", " \\PY{n}{inner} \\PY{o}{=} \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{spines}\\PY{o}{.}\\PY{n}{get}\\PY{p}{(}\\PY{l+s+s1}{\\PYZsq{}}\\PY{l+s+s1}{inner}\\PY{l+s+s1}{\\PYZsq{}}\\PY{p}{,} \\PY{k+kc}{None}\\PY{p}{)}\n", " \\PY{k}{if} \\PY{n}{inner}\\PY{p}{:}\n", " \\PY{n}{inner}\\PY{o}{.}\\PY{n}{set\\PYZus{}visible}\\PY{p}{(}\\PY{k+kc}{False}\\PY{p}{)}\n", "\n", " \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{set\\PYZus{}rorigin}\\PY{p}{(}\\PY{k+kc}{None}\\PY{p}{)}\n", " \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{set\\PYZus{}theta\\PYZus{}offset}\\PY{p}{(}\\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{\\PYZus{}default\\PYZus{}theta\\PYZus{}offset}\\PY{p}{)}\n", " \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{set\\PYZus{}theta\\PYZus{}direction}\\PY{p}{(}\\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{\\PYZus{}default\\PYZus{}theta\\PYZus{}direction}\\PY{p}{)}\n", "\\end{Verbatim}\n" ], "text/plain": [ "def clear(self):\n", " # docstring inherited\n", " super().clear()\n", "\n", " self.title.set_y(1.05)\n", "\n", " start = self.spines.get('start', None)\n", " if start:\n", " start.set_visible(False)\n", " end = self.spines.get('end', None)\n", " if end:\n", " end.set_visible(False)\n", " self.set_xlim(0.0, 2 * np.pi)\n", "\n", " self.grid(mpl.rcParams['polaraxes.grid'])\n", " inner = self.spines.get('inner', None)\n", " if inner:\n", " inner.set_visible(False)\n", "\n", " self.set_rorigin(None)\n", " self.set_theta_offset(self._default_theta_offset)\n", " self.set_theta_direction(self._default_theta_direction)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Code\n", "Code(cgt.get_source_code('PolarAxes'), language=\"python\")" ] }, { "cell_type": "markdown", "id": "4c55b069-3c48-46e5-b1ff-953df7dd2d5f", "metadata": {}, "source": [ "or as a group:" ] }, { "cell_type": "code", "execution_count": 7, "id": "1fb967c4-40f1-4fb5-a098-c589fe7eef28", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
def clear(self):\n",
       "    """Clear the Axes."""\n",
       "    # Act as an alias, or as the superclass implementation depending on the\n",
       "    # subclass implementation.\n",
       "    if self._subclass_uses_cla:\n",
       "        self.cla()\n",
       "    else:\n",
       "        self.__clear()\n",
       "
\n" ], "text/latex": [ "\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "\\PY{k}{def} \\PY{n+nf}{clear}\\PY{p}{(}\\PY{n+nb+bp}{self}\\PY{p}{)}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{l+s+sd}{\\PYZdq{}\\PYZdq{}\\PYZdq{}Clear the Axes.\\PYZdq{}\\PYZdq{}\\PYZdq{}}\n", " \\PY{c+c1}{\\PYZsh{} Act as an alias, or as the superclass implementation depending on the}\n", " \\PY{c+c1}{\\PYZsh{} subclass implementation.}\n", " \\PY{k}{if} \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{\\PYZus{}subclass\\PYZus{}uses\\PYZus{}cla}\\PY{p}{:}\n", " \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{cla}\\PY{p}{(}\\PY{p}{)}\n", " \\PY{k}{else}\\PY{p}{:}\n", " \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{\\PYZus{}\\PYZus{}clear}\\PY{p}{(}\\PY{p}{)}\n", "\\end{Verbatim}\n" ], "text/plain": [ "def clear(self):\n", " \"\"\"Clear the Axes.\"\"\"\n", " # Act as an alias, or as the superclass implementation depending on the\n", " # subclass implementation.\n", " if self._subclass_uses_cla:\n", " self.cla()\n", " else:\n", " self.__clear()" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "src_dict = cgt.get_multiple_source_code('LambertAxes', 'GeoAxes', 'Axes')\n", "\n", "Code(src_dict['Axes'], language=\"python\")" ] }, { "cell_type": "code", "execution_count": 8, "id": "840cd027-fccf-4693-be9a-10cbf8b153cf", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
def clear(self):\n",
       "    # docstring inherited\n",
       "    super().clear()\n",
       "\n",
       "    self.set_longitude_grid(30)\n",
       "    self.set_latitude_grid(15)\n",
       "    self.set_longitude_grid_ends(75)\n",
       "    self.xaxis.set_minor_locator(NullLocator())\n",
       "    self.yaxis.set_minor_locator(NullLocator())\n",
       "    self.xaxis.set_ticks_position('none')\n",
       "    self.yaxis.set_ticks_position('none')\n",
       "    self.yaxis.set_tick_params(label1On=True)\n",
       "    # Why do we need to turn on yaxis tick labels, but\n",
       "    # xaxis tick labels are already on?\n",
       "\n",
       "    self.grid(mpl.rcParams['axes.grid'])\n",
       "\n",
       "    Axes.set_xlim(self, -np.pi, np.pi)\n",
       "    Axes.set_ylim(self, -np.pi / 2.0, np.pi / 2.0)\n",
       "
\n" ], "text/latex": [ "\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "\\PY{k}{def} \\PY{n+nf}{clear}\\PY{p}{(}\\PY{n+nb+bp}{self}\\PY{p}{)}\\PY{p}{:}\n", " \\PY{c+c1}{\\PYZsh{} docstring inherited}\n", " \\PY{n+nb}{super}\\PY{p}{(}\\PY{p}{)}\\PY{o}{.}\\PY{n}{clear}\\PY{p}{(}\\PY{p}{)}\n", "\n", " \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{set\\PYZus{}longitude\\PYZus{}grid}\\PY{p}{(}\\PY{l+m+mi}{30}\\PY{p}{)}\n", " \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{set\\PYZus{}latitude\\PYZus{}grid}\\PY{p}{(}\\PY{l+m+mi}{15}\\PY{p}{)}\n", " \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{set\\PYZus{}longitude\\PYZus{}grid\\PYZus{}ends}\\PY{p}{(}\\PY{l+m+mi}{75}\\PY{p}{)}\n", " \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{xaxis}\\PY{o}{.}\\PY{n}{set\\PYZus{}minor\\PYZus{}locator}\\PY{p}{(}\\PY{n}{NullLocator}\\PY{p}{(}\\PY{p}{)}\\PY{p}{)}\n", " \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{yaxis}\\PY{o}{.}\\PY{n}{set\\PYZus{}minor\\PYZus{}locator}\\PY{p}{(}\\PY{n}{NullLocator}\\PY{p}{(}\\PY{p}{)}\\PY{p}{)}\n", " \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{xaxis}\\PY{o}{.}\\PY{n}{set\\PYZus{}ticks\\PYZus{}position}\\PY{p}{(}\\PY{l+s+s1}{\\PYZsq{}}\\PY{l+s+s1}{none}\\PY{l+s+s1}{\\PYZsq{}}\\PY{p}{)}\n", " \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{yaxis}\\PY{o}{.}\\PY{n}{set\\PYZus{}ticks\\PYZus{}position}\\PY{p}{(}\\PY{l+s+s1}{\\PYZsq{}}\\PY{l+s+s1}{none}\\PY{l+s+s1}{\\PYZsq{}}\\PY{p}{)}\n", " \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{yaxis}\\PY{o}{.}\\PY{n}{set\\PYZus{}tick\\PYZus{}params}\\PY{p}{(}\\PY{n}{label1On}\\PY{o}{=}\\PY{k+kc}{True}\\PY{p}{)}\n", " \\PY{c+c1}{\\PYZsh{} Why do we need to turn on yaxis tick labels, but}\n", " \\PY{c+c1}{\\PYZsh{} xaxis tick labels are already on?}\n", "\n", " \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{grid}\\PY{p}{(}\\PY{n}{mpl}\\PY{o}{.}\\PY{n}{rcParams}\\PY{p}{[}\\PY{l+s+s1}{\\PYZsq{}}\\PY{l+s+s1}{axes.grid}\\PY{l+s+s1}{\\PYZsq{}}\\PY{p}{]}\\PY{p}{)}\n", "\n", " \\PY{n}{Axes}\\PY{o}{.}\\PY{n}{set\\PYZus{}xlim}\\PY{p}{(}\\PY{n+nb+bp}{self}\\PY{p}{,} \\PY{o}{\\PYZhy{}}\\PY{n}{np}\\PY{o}{.}\\PY{n}{pi}\\PY{p}{,} \\PY{n}{np}\\PY{o}{.}\\PY{n}{pi}\\PY{p}{)}\n", " \\PY{n}{Axes}\\PY{o}{.}\\PY{n}{set\\PYZus{}ylim}\\PY{p}{(}\\PY{n+nb+bp}{self}\\PY{p}{,} \\PY{o}{\\PYZhy{}}\\PY{n}{np}\\PY{o}{.}\\PY{n}{pi} \\PY{o}{/} \\PY{l+m+mf}{2.0}\\PY{p}{,} \\PY{n}{np}\\PY{o}{.}\\PY{n}{pi} \\PY{o}{/} \\PY{l+m+mf}{2.0}\\PY{p}{)}\n", "\\end{Verbatim}\n" ], "text/plain": [ "def clear(self):\n", " # docstring inherited\n", " super().clear()\n", "\n", " self.set_longitude_grid(30)\n", " self.set_latitude_grid(15)\n", " self.set_longitude_grid_ends(75)\n", " self.xaxis.set_minor_locator(NullLocator())\n", " self.yaxis.set_minor_locator(NullLocator())\n", " self.xaxis.set_ticks_position('none')\n", " self.yaxis.set_ticks_position('none')\n", " self.yaxis.set_tick_params(label1On=True)\n", " # Why do we need to turn on yaxis tick labels, but\n", " # xaxis tick labels are already on?\n", "\n", " self.grid(mpl.rcParams['axes.grid'])\n", "\n", " Axes.set_xlim(self, -np.pi, np.pi)\n", " Axes.set_ylim(self, -np.pi / 2.0, np.pi / 2.0)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Code(src_dict['GeoAxes'], language=\"python\")" ] }, { "cell_type": "code", "execution_count": 9, "id": "be352520-f25f-49ef-99e2-6c3c86892006", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
def clear(self):\n",
       "    # docstring inherited\n",
       "    super().clear()\n",
       "    self.yaxis.set_major_formatter(NullFormatter())\n",
       "
\n" ], "text/latex": [ "\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "\\PY{k}{def} \\PY{n+nf}{clear}\\PY{p}{(}\\PY{n+nb+bp}{self}\\PY{p}{)}\\PY{p}{:}\n", " \\PY{c+c1}{\\PYZsh{} docstring inherited}\n", " \\PY{n+nb}{super}\\PY{p}{(}\\PY{p}{)}\\PY{o}{.}\\PY{n}{clear}\\PY{p}{(}\\PY{p}{)}\n", " \\PY{n+nb+bp}{self}\\PY{o}{.}\\PY{n}{yaxis}\\PY{o}{.}\\PY{n}{set\\PYZus{}major\\PYZus{}formatter}\\PY{p}{(}\\PY{n}{NullFormatter}\\PY{p}{(}\\PY{p}{)}\\PY{p}{)}\n", "\\end{Verbatim}\n" ], "text/plain": [ "def clear(self):\n", " # docstring inherited\n", " super().clear()\n", " self.yaxis.set_major_formatter(NullFormatter())" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Code(src_dict['LambertAxes'], language=\"python\")" ] }, { "cell_type": "markdown", "id": "ae4ad5b6-c3c5-4065-9cf3-1d235e15c7b2", "metadata": {}, "source": [ "Additionally, from a Jupyter notebook, you can use `cgt.display_code_comparison()` to spawn the Code Comparison Widget (see the Examples page for a demonstration)." ] }, { "cell_type": "markdown", "id": "b7cc55e8-552e-44c9-b354-061c513a69ba", "metadata": {}, "source": [ "### Interactive Graph\n", "\n", "In a jupyter notebook, you can construct a pyvis interactive graph from a `ClassGraphTree` instance, `cgt` with:\n", "\n", "```python\n", "graph = cgt.build_interactive_graph(width=\"400px\",\n", " height=\"400px\",\n", " bgcolor='#222222',\n", " font_color='white') # constructs a pyvis interactive graph\n", "graph.show('_tmp.html') # render the pyvis interactive graph here!\n", "```\n" ] }, { "cell_type": "markdown", "id": "52f6c762-6c42-46b2-af01-07ad36ba1c35", "metadata": {}, "source": [ "### Limitations\n", "\n", "Note that while the class inheritance structures **should** be well behaved for most code bases, the source code comparison is limited by the type limitations of the underlying `inspect` library. \n", "\n", "The `sum` method for numpy arrays, for example, is a `method_descriptor`:" ] }, { "cell_type": "code", "execution_count": 10, "id": "0fae710a-ea9f-4c3a-9d65-610acf0ccd8c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "method_descriptor" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(np.ndarray.sum)" ] }, { "cell_type": "markdown", "id": "c4b13035-a32b-413f-b26c-609ff1e2f3e3", "metadata": {}, "source": [ "which `inspect.get_source` cannot handle. So if we try to track `sum` across the class structure with:\n", "\n", "```python\n", "base_class = np.ndarray\n", "cgt = ClassGraphTree(base_class, funcname = 'sum')\n", "```\n", "\n", "we will get a `TypeError` similar to the following:\n", "\n", "```\n", "--> 677 raise TypeError('module, class, method, function, traceback, frame, or '\n", " 678 'code object was expected, got {}'.format(\n", " 679 type(object).__name__))\n", "\n", "TypeError: module, class, method, function, traceback, frame, or code object was expected, got method_descriptor\n", "```" ] }, { "cell_type": "code", "execution_count": null, "id": "2c97fcaf-5cdf-4e38-a1af-4fe9660884ac", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.11" } }, "nbformat": 4, "nbformat_minor": 5 }