From b49121472851f386d31848cc0f83c877f2effdec Mon Sep 17 00:00:00 2001 From: Isaac Flath Date: Sun, 2 Mar 2025 15:44:11 -0500 Subject: [PATCH 1/5] Enable html classes --- execnb/shell.py | 7 +- nbs/02_shell.ipynb | 549 +++++++++++---------------------------------- 2 files changed, 141 insertions(+), 415 deletions(-) diff --git a/execnb/shell.py b/execnb/shell.py index 021f227..5ba09d6 100644 --- a/execnb/shell.py +++ b/execnb/shell.py @@ -160,12 +160,13 @@ async def run_async(self:CaptureShell, def _pre(s, xtra=''): return f"
{escape(s)}
" def _strip(s): return strip_ansi(escape(s)) -def render_outputs(outputs, ansi_renderer=_strip, include_imgs=True, pygments=False): +def render_outputs(outputs, ansi_renderer=_strip, include_imgs=True, pygments=False, md_tfm=noop, html_tfm=noop): try: from mistletoe import markdown, HTMLRenderer from mistletoe.contrib.pygments_renderer import PygmentsRenderer except ImportError: return print('mistletoe not found -- please install it') renderer = PygmentsRenderer if pygments else HTMLRenderer + def render_output(out): otype = out['output_type'] if otype == 'stream': @@ -176,9 +177,9 @@ def render_output(out): elif otype in ('display_data','execute_result'): data = out['data'] _g = lambda t: ''.join(data[t]) if t in data else None - if d := _g('text/html'): return d + if d := _g('text/html'): return html_tfm(d) if d := _g('application/javascript'): return f'' - if d := _g('text/markdown'): return markdown(d, renderer=renderer) + if d := _g('text/markdown'): return md_tfm(markdown(d, renderer=renderer)) if d := _g('text/latex'): return f'
${d}$
' if include_imgs: if d := _g('image/jpeg'): return f'' diff --git a/nbs/02_shell.ipynb b/nbs/02_shell.ipynb index 8d78eae..e22611d 100644 --- a/nbs/02_shell.ipynb +++ b/nbs/02_shell.ipynb @@ -464,7 +464,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABFkAAAM6CAYAAABaWpxEAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAewgAAHsIBbtB1PgAAtOhJREFUeJzs3Xd4FQX69vH7pPcECAFCQu81CYKFJkpRpCMlYUVd3cXf0qxrx66gFGm6IrjoLqGKqKiAoCBNERMg9A4JCSWEhJCQes77h69ZYWgJ52SSk+/nuryuA/dk5sFdhdzOM2Ox2Ww2AQAAAAAA4Ka4mD0AAAAAAACAM6BkAQAAAAAAsANKFgAAAAAAADugZAEAAAAAALADShYAAAAAAAA7oGQBAAAAAACwA0oWAAAAAAAAO6BkAQAAAAAAsANKFgAAAAAAADugZAEAAAAAALADShYAAAAAAAA7oGQBAAAAAACwA0oWAAAAAAAAO6BkAQAAAAAAsANKFgAAAAAAADugZAEAAAAAALADN7MHwKVycnKUkJAgSapatarc3PifCAAAAAAAeysoKNCZM2ckSS1btpSXl9dNn5Pv4MuYhIQEtWvXzuwxAAAAAACoMLZs2aK2bdve9HlYFwIAAAAAALAD7mQpY6pWrVr0ecuWLapRo4aJ0wAAAAAA4JxSUlKKNkn+/L34zaBkKWP+/AyWGjVqKCwszMRpAAAAAABwfvZ6HirrQgAAAAAAAHZAyQIAAAAAAGAHlCwAAAAAAAB2QMkCAAAAAABgB5QsAAAAAAAAdkDJAgAAAAAAYAeULAAAAAAAAHZAyQIAAAAAAGAHlCwAAAAAAAB2QMkCAAAAAABgB5QsAAAAAAAAdkDJAgAAAAAAYAeULAAAAAAAAHZAyQIAAAAAAGAHlCwAAAAAAAB2QMkCAAAAAABgB5QsAAAAAAAAdkDJAgAAAAAAYAeULAAAAAAAAHZAyQIAAAAAAGAHlCwAAAAAAAB2QMkCAAAAAABgBw4rWc6fP68FCxboqaeeUufOndWgQQMFBgbKw8NDISEhuvPOO/Xuu+/q7Nmzdrvmd999p/79+yssLEyenp4KCwtT//799d13393wOQoKCvSvf/1LHTt2VNWqVeXt7a369etrxIgR2rVrl91mBQAAAAAAzsVis9lsjjjx6tWr1a1bt+seFxwcrP/+97/q0aNHia9ltVr197//XXPmzLnqMY8++qg++ugjubhcvVdKTU1Vz5499euvv14x9/T01IwZM/Too4+WeNbrSUpKUnh4uCQpMTFRYWFhDrsWAAAAAAAVlSO+/3boulB4eLiGDx+uqVOnaunSpdq8ebM2btyohQsXatCgQXJ1dVVqaqr69Omj7du3l/g6L774YlHBEhkZqfnz52vLli2aP3++IiMjJUmzZ8/WSy+9dNVzFBYWqn///kUFy4ABA/Tdd9/pl19+0bRp0xQSEqLc3FyNGDGiWHfGAAAAAACAisFhd7IUFhbK1dX1mscsW7ZM/fv3lyT1799fS5cuLfZ19u/fr+bNm6ugoEC33HKLfvrpJ3l7exfl2dnZ6ty5s7Zu3So3Nzft2bNHDRo0MJznk08+0SOPPCJJ+sc//qGZM2dekh88eFBt2rTR+fPn1aBBA+3Zs0dubm7Fnvd6uJMFAAAAAADHK1d3slyvYJGkfv36qXHjxpKk9evXl+g677//vgoKCiRJ06dPv6RgkSQfHx9Nnz5d0u/PW5kyZcoVzzNx4kRJUuXKlfXee+8Z8gYNGuj555+X9Hvh8sUXX5RoXgAAAAAA4JxMf7uQv7+/JCknJ6fYX2uz2fTll19Kkpo0aaLbbrvtisfddtttRWXOl19+qctv3tm/f7/27NkjSRo8eLB8fHyueJ6HHnqo6DMlCwAAAAAA+DNTS5Z9+/Zp27Ztkn4vSYrryJEjSk5OliR17tz5msf+kZ84cUJHjx69JNuwYYPhuCupXr26GjVqJEnauHFjsecFAAAAAMAZnc/J16jYOG06mGr2KKay/0NFriM7O1snTpzQ119/rXfffbdo1efxxx8v9rl2795d9Pl6Jc2f8z179qhu3bolPs/+/fuVmJiorKws+fr6FmvmpKSka+YpKSnFOh8AAAAAAGbakZSuUbHxOp6WrV+OpOnbMR1V1d/T7LFMUSoly9y5c/Xwww9fNX/uuecUExNT7PP+ubC43gNq/niYjfT7A21u9jw2m01JSUlFa0g36s9zAAAAAABQXtlsNs3ddFRvf7tH+YW/P5bjTGaunli4TZ/9tZ1cXCwmT1j6Sv1Olj+LiIjQrFmz1LZt2xJ9fWZmZtFnPz+/ax775ztOLly44JDzAAAAAABQEWRk5+uZJdu1avcpQ5ZwIkOHU7PUIOTa3187o1IpWfr166dbbrlFknTx4kUdOnRIixYt0hdffKHo6Gi9//776tWrV7HP++eH5Xp4eFzzWE/P/92qdPHiRYec50ZcfhfN5VJSUtSuXbtinxcAAAAAgNIQf/ycRsXG60S68XviyFpBmh4dqbBKV36hjLMrlZIlKChIQUFBRT9u27athg4dqv/85z968MEH1bdvX82ZM+eSt/fcCC8vr6LPeXl51zw2Nze36PPlr3m+/Dx//nFxznMj7PHebQAAAAAASpvNZtPs9Uc0YcVeFVhthnxE53p6untjubua/iJj05j6K3/ggQc0aNAgWa1WjRo1SmlpacX6+j9e/yxdf3UnKyur6PPlK0H2Og8AAAAAAM7oXFaeHv10q976do+hYKnk465/P9RWz9/btEIXLJLJJYsk9e3bV9Lv5cWKFSuK9bV/vivkem/t+fOazuUPny3JeSwWC3elAAAAAACc3tajaeo5bb3W7D1tyNrWqaRvx3ZUlyYhJkxW9pheslStWrXo87Fjx4r1tc2aNSv6vHfv3mse++e8adOmN32e8PDwYr++GQAAAACA8sJqtemDtQc1ZNbPSsnIuSSzWKSRXepr/t9uU43A4j9Kw1mZXrKcOHGi6HNx12/q1q2r0NBQSdK6deuueexPP/0kSapZs6bq1KlzSdahQ4eiz9c6z8mTJ7V//35JUvv27Ys1KwAAAAAA5UXqhVw9NPdXvbtinwovWw+q4uuhTx9up2d6NJFbBV8PupzpfzcWL15c9Llly5bF+lqLxVK0brR37179/PPPVzzu559/LroDpW/fvrJYLn1Xd6NGjYrublm0aJGys7OveJ65c+cWfe7fv3+xZgUAAAAAoDz4+fBZ9Zy6Xj/tP2PIbqtXWd+N7ahOjape4SvhsJJl7ty5l7wa+UqmTJmib7/9VtLvd6V07Njxknzt2rWyWCyyWCxXffPQ448/LldXV0nS6NGjDa9VvnjxokaPHi1JcnNz0+OPP37F8zz99NOSpLS0NP3zn/805IcOHdI777wjSWrQoAElCwAAAADAqRRabZq25oBiPv5ZpzNzL8ksFmns3Q0179HbFBJw9TfyVnQOe4Xzq6++qqeeekoDBw5Uhw4dVL9+ffn5+SkzM1MJCQmaN2+eNm7cKEny8PDQrFmzisqS4mjUqJGeeeYZjR8/Xlu3blX79u317LPPqn79+jp06JAmTJig+Ph4SdIzzzyjhg0bXvE8Dz74oD755BNt3LhRM2fO1MmTJ/W3v/1NlSpV0pYtW/TGG2/o/PnzcnFx0bRp0+TmVipvvwYAAAAAwOFOZ+boiYXbtPHgWUNW1d9TU4dE6I4GwSZMVr5YbDab8eXWdlCnTp0bepBtWFiYPvnkE3Xr1s2QrV27Vl26dJH0ewny53WdP7Narfrb3/6mTz755KrXeeSRRzRr1iy5uFz95p3U1FT17NlTv/766xVzT09PzZgxQ48++ug1fkU3JykpqejtR4mJibzBCAAAAADgUBsPpmrsgm1KvZBryDo2DNbkwRGq6u9pwmSO5Yjvvx12O8bKlSv1zTffaOPGjTp48KBOnTqls2fPytvbWyEhIYqIiFCvXr00ePBg+fj43NS1XFxcNGfOHA0cOFCzZs3Sr7/+qtTUVAUHB6tt27YaMWKE7r333uueJzg4WJs2bdLHH3+s2NhY7dmzR1lZWQoNDdXdd9+tsWPHqnnz5jc1KwAAAAAAZUGh1aapq/dr+o8HdfntFy4W6clujfSPOxvIxcVy5RPAwGF3sqBkuJMFAAAAAOBop87naMz8eP1yJM2QVQvw1LShkbq1XhUTJis95epOFgAAAAAAUPas239GTyzcprSsPEN2Z+OqmjSotar4Od96UGmgZAEAAAAAoAIoKLRq0vf79eHaQ4bM1cWiZ3o01t871mM96CZQsgAAAAAA4OSS0y9qzPx4bT12zpCFBnppekyk2tSubMJkzoWSBQAAAAAAJ/bD3lN6ctF2pWfnG7KuTUM0cVBrBfl4mDCZ86FkAQAAAADACeUVWPXeyr36eP0RQ+buatGz9zTRIx3qymJhPcheKFkAAAAAAHAyiWnZGj0/XtsS0w1ZWCVvzYiJUkR4UKnP5ewoWQAAAAAAcCIrd53UM4u363xOgSG7p3l1Tbi/lQK93U2YzPlRsgAAAAAA4ARyCwr1zrd7NXfTUUPm4eqiF+9rquG312Y9yIEoWQAAAAAAKOeOnc3SqNh4JZzIMGS1q/hoZkyUWtQMNGGyioWSBQAAAACAcuybHSl67vMdysw1rgf1alVD7wxoKX8v1oNKAyULAAAAAADlUE5+od78Zrf++/NxQ+bh5qJXejdTTLtarAeVIkoWAAAAAADKmSOpWRo5L067U84bsnrBvpoRE6VmoQEmTFaxUbIAAAAAAFCOfLnthF5YmqCsvEJD1j+ypt7s10K+nny7bwb+rgMAAAAAUA5czCvUa1/v0oJfEw2Zl7uLXu/TQoNuCWM9yESULAAAAAAAlHEHT2dq5Lx47TuVacgahvhp5rAoNarmb8Jk+DNKFgAAAAAAyrAlvyXp5WU7dTHfuB40qE2YXuvbXD4efHtfFvC/AgAAAAAAZVB2XoFeXrZLn8clGTIfD1e92a+FBkSFmTAZroaSBQAAAACAMmbfyUyNjI3TwdMXDFmT6v6aEROlBiF+JkyGa6FkAQAAAACgjLDZbFq0NVHjvtyl3AKrIY9uV0uv9G4mL3dXE6bD9VCyAAAAAABQBlzILdBLXyRo2bZkQ+br4ap3BrZSn9ahJkyGG0XJAgAAAACAyXYnn9eo2DgdTs0yZM1qBGjmsCjVDfY1YTIUByULAAAAAAAmsdlsmvfLcb2+fLfyrrAeNPz22nqhZ1PWg8oJShYAAAAAAExwPidfzy9N0Dc7UgyZv6ebJtzfSj1b1jBhMpQUJQsAAAAAAKUsISlDo+bH6djZbEPWKixQM6KjVKuKjwmT4WZQsgAAAAAAUEpsNps+3XRUb3+7V3mFxvWgv7avq2fvbSxPN9aDyiNKFgAAAAAASkFGdr7++fl2rdx1ypAFeLlp4qDW6t68ugmTwV4oWQAAAAAAcLD44+c0en68ks5dNGSRtYI0PTpSYZVYDyrvKFkAAAAAAHAQm82mORuOaPx3e1VgtRnyEZ3q6ekejeXu6mLCdLA3ShYAAAAAABzgXFaenl68XWv2njZklXzcNWlwa93VpJoJk8FRKFkAAAAAALCz346laXRsvJIzcgxZ2zqVNC06UjUCvU2YDI5EyQIAAAAAgJ1YrTZ99NNhTVy1T4VXWA/6x5319WS3RnJjPcgpUbIAAAAAAGAHZy/k6slF27Vu/xlDVsXXQ5OHRKhzo6omTIbSQskCAAAAAMBN+uXwWY1ZEK9T53MN2W31Kmvq0EhVC/AyYTKUJkoWAAAAAABKqNBq0wc/HtSU1ft1+XaQxSKNvquhxt7dUK4uFnMGRKmiZAEAAAAAoATOZObqiYXbtOFgqiGr6u+pqUMidEeDYBMmg1koWQAAAAAAKKaNB1M1dsE2pV4wrgd1aBCsKUMiVNXf04TJYCZKFgAAAAAAblCh1aapaw5o+g8HZLtsPcjFIj3ZrZH+784GrAdVUJQsAAAAAADcgFPnczR2Qbx+PpxmyKoFeGra0EjdWq+KCZOhrKBkAQAAAADgOtbtP6MnF27T2aw8Q9a5UVVNHtxaVfxYD6roKFkAAAAAALiKgkKrJn+/Xx+sPWTIXF0serp7Y43oVE8urAdBlCwAAAAAAFxRSsZFjZkfr1+PnjNkoYFemh4TqTa1K5swGcoqShYAAAAAAC7zw95TemrRdp3LzjdkXZuG6L37W6uSr4cJk6Eso2QBAAAAAOD/yy+06r2V+zTrp8OGzM3FoufubaJHOtSVxcJ6EIwoWQAAAAAAkJR0Lluj58cr/ni6IQur5K0ZMVGKCA8q9blQflCyAAAAAAAqvFW7Turpxdt1PqfAkPVoXk3v3t9agd7uJkyG8oSSBQAAAABQYeUVWPXOd3v0741HDZmHq4tevK+pht9em/Ug3BBKFgAAAABAhXT8bLZGzY/TjqQMQ1a7io9mREepZVigCZOhvKJkAQAAAABUON8mpOjZJTuUmWtcD7qvVQ29M6ClArxYD0LxULIAAAAAACqMnPxCvfXNHv3n52OGzMPNReN6NdOwW2uxHoQSoWQBAAAAAFQIR1KzNHJenHannDdk9YJ9NSMmSs1CA0yYDM6CkgUAAAAA4PS+3HZCLyxNUFZeoSHrFxGqN/u3lJ8n3yLj5vD/IAAAAACA08rJL9RrX+/S/C2JhszL3UWv9WmuwbeEsx4Eu6BkAQAAAAA4pYOnL2hUbJz2nsw0ZA1C/DQzJkqNq/ubMBmcFSULAAAAAMDpfP5bkl5atlMX843rQfe3CdPrfZvLx4NviWFf/D8KAAAAAOA0svMKNO7LXVryW5Ih83Z31Zv9WmhgmzATJkNFQMkCAAAAAHAK+09lauS8OB04fcGQNa7mr5nDotQgxM+EyVBRULIAAAAAAMo1m82mRVsT9cpXu5STbzXk0e3C9Urv5vJydzVhOlQklCwAAAAAgHLrQm6BXvoiQcu2JRsyXw9XvT2gpfpG1DRhMlRElCwAAAAAgHJpd/J5jYqN0+HULEPWrEaAZsREql5V1oNQeihZAAAAAADlis1mU+yW43rt693KKzCuBz1wW229eF9T1oNQ6ihZAAAAAADlRmZOvp5bmqBvdqQYMn9PN40f2Er3taphwmQAJQsAAAAAoJzYeSJDI2PjdOxstiFrFRaoGdFRqlXFx4TJgN+5OPLkW7du1euvv67u3bsrLCxMnp6e8vPzU6NGjfTwww9rw4YNN32NtWvXymKxFOuvO++884rnqlOnzg19fZ06dW56bgAAAADAjbHZbPp001EN+GDTFQuWh9vX0eLHbqdggekcdidLp06dtH79esPP5+Xl6cCBAzpw4IDmzp2r4cOH6+OPP5aHh4ejRjFo3LhxqV0LAAAAAFByGRfz9eySHVqx66QhC/By03uDWqtH8+omTAYYOaxkSU7+/fVZoaGhGjRokDp27KhatWqpsLBQmzdv1qRJk3TixAl99tlnys/PV2xsbImu07ZtWyUkJFz3uFGjRmndunWSpAcffPCax/bt21dvvvnmVfPSLIQAAAAAoKLalpiuUbFxSjp30ZBFhAdpRkykwipx9wrKDoeVLE2aNNHbb7+tgQMHytX10ic633bbbXrggQfUvn177d+/X/Pnz9djjz2mTp06Ffs6vr6+atGixTWPSU9P188//yxJatCgge64445rHh8UFHTdcwIAAAAAHMNms2nOhiOasGKv8gtthvzvnerpmR6N5e7q0CdgAMXmsJJl+fLl18yDg4M1adIk9e7dW5K0ZMmSEpUsN2LhwoXKzc2VJD3wwAMOuQYAAAAA4OalZ+fp6cXbtXrPaUMW5OOuyYNb664m1UyYDLg+U98u1KVLl6LPhw4dcth1PvvsM0mSxWLR8OHDHXYdAAAAAEDJ/XYsTaNj45WckWPIbqldSdOiIxUa5G3CZMCNMbVk+ePuEkmGlSJ7OXTokDZt2iRJ6tixI28GAgAAAIAyxmq1adb6w3pv5T4VWo3rQf+4s76e7NZIbqwHoYwztWT540G0ktS0aVOHXOOPu1ik6z/w9g8//fSTIiIidOjQIRUWFqpatWpq166doqOj1bdvX1kslhLPk5SUdM08JSWlxOcGAAAAgPLm7IVcPbV4u9buO2PIqvh6aPKQCHVuVNWEyYDis9hsNmNNWAqsVqtuv/12bdmyRZK0detWtWnTxq7XsNlsatCggQ4fPixvb2+dOnVK/v7+Vz2+Tp06Onbs2DXP2b59ey1cuFA1a9Ys0UzFKWgSExMVFhZWousAAAAAQFn3y+GzGrMgXqfO5xqy2+pV1tShkaoW4GXCZKgIkpKSFB4eLsl+33+bdifLlClTigqWAQMG2L1gkaQNGzbo8OHDkqT+/ftfs2CRfn81c58+fdS9e3e1aNFCgYGBSk9P1+bNm/Xhhx8qMTFRGzduVLdu3bR582YFBgbafWYAAAAAcHZWq00frD2oyd/v1+XbQRaLNPquhhp7d0O5upR8iwAwgyl3sqxbt05du3ZVQUGBQkJClJCQoJCQELtf5+9//7s+/vhjSdKKFSvUo0ePax6fnp6uoKCgK2aZmZm6//77tWrVKknSE088ocmTJxd7phtZF2rXrp0k7mQBAAAA4HzOZObqyUXbtP5AqiEL9vPU1KERat8g2ITJUNE44k6WUi9Zdu3apY4dO+rcuXPy8vLSypUrHfLq5pycHNWoUUPp6ekKDQ3V8ePHb/rhuhkZGapXr57S0tLk6+urtLQ0eXh42Gni3znif2QAAAAAKAs2HUzV2IXbdCbTuB7UvkEVTRkSoRB/1oNQOhzx/XepPpr5yJEj6t69u86dOydXV1ctWLDAIQWLJH311VdKT0+XJA0bNswuby8KDAzU0KFDJUlZWVnaunXrTZ8TAAAAAJxdodWmKd/v17A5vxgKFheL9FS3Rvrsr7dSsKDcK7VnsiQnJ6tr165KTk6WxWLRJ598or59+zrsen9+q9Dw4cPtdt5mzZoVfT5x4oTdzgsAAAAAzuj0+RyNWRCvnw+nGbJqAZ6aOjRSt9WrYsJkgP2VSsmSmpqqbt26FT2Edvr06XYtPi53+vRprVy5UpIUFRWlFi1a2O3cN/P6ZgAAAACoSH7af0ZPLNyms1l5hqxzo6qaPLi1qvh5mjAZ4BgOL1kyMjLUo0cP7d69W5I0fvx4jRw50qHXjI2NVUFBgST73sUiqejXIUmhoaF2PTcAAAAAOIOCQqumrN6vD9Ye0uVPAXV1sejp7o01olM9ufD2IDgZh5Ys2dnZuu+++xQXFydJevHFF/Xss8868pKS/rcq5O7urpiYGLudNyMjQwsWLJAk+fj46JZbbrHbuQEAAADAGaRkXNSY+fH69eg5Q1Yj0EvToyN1S53KJkwGOJ7DHnybl5en/v37a+PGjZKksWPH6s033yz2eebOnSuLxSKLxaJXX331usfv2rVL8fHxkqR77rlHVatWvaHrrFixQhcvXrxqfuHCBQ0ePFhnz56VJD3yyCPy9OS2NgAAAAD4w497T6vn1PVXLFjubhKib8d0pGCBU3PYnSzR0dFatWqVJOmuu+7SI488op07d171eA8PDzVq1Oimr/vpp58WfX7wwQdv+OvGjx+vYcOGacCAAerQoYPq168vPz8/ZWRkaNOmTfrXv/6l48ePS5IaN258Q4UPAAAAAFQE+YVWTVy5Tx/9dNiQublY9Ny9TfRIh7o84xJOz2Ely9KlS4s+//DDD2rVqtU1j69du7aOHj16U9e0Wq2aN2+eJKlSpUrq3bt3sb4+LS1Ns2fP1uzZs696TOfOnTVv3jxVrkz7CgAAAABJ57I1en684o+nG7KaQd6aEROpyFqVSn8wwASl9grn0rBmzRolJydLkoYMGSIPD48b/tqJEydqzZo12rx5s/bt26fU1FSlp6fLx8dHoaGhuvXWWxUdHa3u3bvTvgIAAACApFW7TuqZJTuUcTHfkHVvVk3v3d9agT7uJkwGmMNis13+rGeYKSkpSeHh4ZKkxMREhYWFmTwRAAAAAFwqr8Cq8d/t1ScbjxgyD1cXvdCziR68ow7/gRplmiO+/3aqO1kAAAAAAI6VmJatUbFx2p6UYchqVfbRzJgotQwLNGEywHyULAAAAACAG/JdQor++fkOZeYUGLL7WtbQOwNbKsCL9SBUXJQsAAAAAIBryskv1Nvf7tFnm48ZMg83F43r1UzDbq3FehAqPEoWAAAAAMBVHU3N0sjYOO1KPm/I6gb7akZMpJqHsh4ESJQsAAAAAICr+Gp7sl5YmqALucb1oL4RoXqrf0v5efJtJfAH/mkAAAAAAFwiJ79Qr329W/O3HDdknm4uer1vcw2+JZz1IOAylCwAAAAAgCIHT1/QqNg47T2ZacgahPhpZkyUGlf3N2EyoOyjZAEAAAAASJKWxiXppWU7lZ1XaMgGRoXpjX7N5ePBt5HA1fBPBwAAAABUcNl5BXrly11a/FuSIfN2d9Ub/Vro/jZhJkwGlC+ULAAAAABQge0/lamR8+J04PQFQ9a4mr9mDotUgxDWg4AbQckCAAAAABWQzWbT4t+SNO7LncrJtxryoW3D9Urv5vL2cDVhOqB8omQBAAAAgAomK7dALy3bqS/iTxgyXw9XvT2gpfpG1DRhMqB8o2QBAAAAgApkT8p5jYyN0+EzWYasaY0AzYyJVL2qfiZMBpR/lCwAAAAAUAHYbDbFbjmu177erbwC43rQA7fV1ov3NZWXO+tBQElRsgAAAACAk8vMydfzSxO0fEeKIfP3dNP4ga10X6saJkwGOBdKFgAAAABwYjtPZGhUbJyOns02ZC1rBmpGTKRqV/E1YTLA+VCyAAAAAIATstls+mzzMb31zR7lFRrXgx66o46e79lEnm6sBwH2QskCAAAAAE4m42K+nvt8h77bedKQBXi56b1BrdWjeXUTJgOcGyULAAAAADiR7YnpGjU/TolpFw1ZRHiQpkdHKryyjwmTAc6PkgUAAAAAnIDNZtMnG49q/Hd7lF9oM+R/61hXz/RoIg83FxOmAyoGShYAAAAAKOfSs/P09OIdWr3nlCEL8nHXpEGtdXfTaiZMBlQslCwAAAAAUI79duycxsyP14l043rQLbUraVp0pEKDvE2YDKh4KFkAAAAAoByyWm36eP1hvbdynwqsxvWgf9xZX090ayR3V9aDgNJCyQIAAAAA5UxaVp6eWrRNP+47Y8gq+3poypAIdW5U1YTJgIqNkgUAAAAAypEtR9I0Zn68Tp7PMWS31q2sadGRqhbgZcJkAChZAAAAAKAcsFpt+mDtQU3+fr8u3w6yWKTRXRpozN0N5cZ6EGAaShYAAAAAKOPOZObqyUXbtP5AqiEL9vPU+0Mi1KFhsAmTAfgzShYAAAAAKMM2HUrV2AXbdCYz15C1b1BFU4ZEKMSf9SCgLKBkAQAAAIAyqNBq0/QfDmjamgOG9SAXi/R410Ya2aWBXF0s5gwIwICSBQAAAADKmNPnczR2wTZtPnzWkIX4e2padKRuq1fFhMkAXAslCwAAAACUIesPnNETC7cp9UKeIevUqKomD26tYD9PEyYDcD2ULAAAAABQBhQUWvX+6gOaufagbJetB7m6WPRU90Z6rFN9ubAeBJRZlCwAAAAAYLKUjIsaO3+bthxNM2Q1Ar00LTpSbetUNmEyAMVByQIAAAAAJvpx32k9uXCbzmXnG7K7m4Ro4qDWquTrYcJkAIqLkgUAAAAATJBfaNXEVfv00brDhszNxaJn72miRzvWlcXCehBQXlCyAAAAAEApO5F+UaNj4xR3PN2Q1Qzy1vSYSEXVqlT6gwG4KZQsAAAAAFCKvt99Sk8v3q6Mi8b1oO7Nqum9+1sr0MfdhMkA3CxKFgAAAAAoBXkFVk1YsVdzNhwxZO6uFr3Qs6keuqMO60FAOUbJAgAAAAAOlpiWrVGxcdqelGHIalX20YyYSLUKCyr9wQDYFSULAAAAADjQip0pembJDmXmFBiyni2ra/zAVgrwYj0IcAaULAAAAADgALkFhXr7mz36dPMxQ+bh5qKXezXTX26txXoQ4EQoWQAAAADAzo6mZmnU/DjtPHHekNUN9tWMmEg1Dw00YTIAjkTJAgAAAAB29PX2ZD2/NEEXco3rQX0jQvVW/5by8+RbMcAZ8U82AAAAANhBTn6hXl++W7G/HDdknm4ueq1Pcw1pG856EODEKFkAAAAA4CYdOnNBI+fFae/JTENWv6qvZg6LUpPqASZMBqA0UbIAAAAAwE34Ij5JL36xU9l5hYZsYFSY3ujXXD4efOsFVAT8kw4AAAAAJXAxr1CvfLVTi7YmGTJvd1e90a+F7m8TZsJkAMxCyQIAAAAAxXTgVKb+MS9OB05fMGSNqvlpZkyUGlbzN2EyAGaiZAEAAACAG2Sz2bT4tySN+3KncvKthnxo23C90ru5vD1cTZgOgNkoWQAAAADgBmTlFujlZTu1NP6EIfP1cNXbA1qqb0RNEyYDUFZQsgAAAADAdexJOa9RsXE6dCbLkDWtEaCZMZGqV9XPhMkAlCWULAAAAABwFTabTfO3JOq1r3cpt8C4HvSX22rppfuaycud9SAAlCwAAAAAcEWZOfl64Yud+np7siHz83TT+IEt1atVqAmTASirKFkAAAAA4DI7T2RoVGycjp7NNmQtawZqRkykalfxNWEyAGUZJQsAAAAA/H82m03//fmY3li+R3mFxvWgh+6oo+d7NpGnG+tBAIwoWQAAAABAUsbFfD2/dIe+TThpyAK83PTu/a11T4vqJkwGoLygZAEAAABQ4W1PTNeo+XFKTLtoyFqHB2lGdKTCK/uYMBmA8oSSBQAAAECFZbPZ9MnGoxr/3R7lF9oM+d861tUzPZrIw83FhOkAlDeULAAAAAAqpPTsPD2zZIe+333KkAX5uGvi/a3VtVk1EyYDUF5RsgAAAACocOKOn9Po2HidSDeuB7WpXUnToiNVM8jbhMkAlGeULAAAAAAqDKvVpo/XH9Z7K/epwGpcD/q/O+vryW6N5O7KehCA4qNkAQAAAFAhpGXl6enF2/XD3tOGrLKvhyYPbq07G4eYMBkAZ+HQenbr1q16/fXX1b17d4WFhcnT01N+fn5q1KiRHn74YW3YsMEu13n11VdlsVhu6K+1a9de93ypqakaN26cWrVqpYCAAAUEBKhVq1YaN26czp49a5eZAQAAAJSeX4+mqefU9VcsWNrVraxvx3SkYAFw0xx2J0unTp20fv16w8/n5eXpwIEDOnDggObOnavhw4fr448/loeHh6NGKZZffvlF/fr108mTJy/5+YSEBCUkJGj27NlatmyZ2rVrZ9KEAAAAAG6U1WrTh+sOafL3+1V42XqQxSKN6tJAY+9uKDfWgwDYgcNKluTkZElSaGioBg0apI4dO6pWrVoqLCzU5s2bNWnSJJ04cUKfffaZ8vPzFRsba5frJiQkXDOvW7fuVbPExET17t1bZ86ckZubm5588kn16tVLkrR8+XJNnjxZKSkp6t27t3777TeFhYXZZWYAAAAA9pd6IVdPLNym9QdSDVmwn6feHxKhDg2DTZgMgLNyWMnSpEkTvf322xo4cKBcXV0vyW677TY98MADat++vfbv36/58+frscceU6dOnW76ui1atCjx17744os6c+aMJCk2NlaDBg0qyjp27Kg2bdpoyJAhOn36tF566SXNnTv3ZscFAAAA4ACbD53V2AXxOp2Za8juqF9F7w+NUIi/lwmTAXBmDrsnbvny5Ro8eLChYPlDcHCwJk2aVPTjJUuWOGqUG3Ly5EnNmzdPktSjR49LCpY/DB48WD169JAk/ec//zGsFAEAAAAwV6HVpvdX79ew2T8bChYXi/RE10b6zyO3UrAAcAhTFw+7dOlS9PnQoUMmTiJ99dVXslqtkqSHH374qsc99NBDkiSr1aqvvvqqNEYDAAAAcANOZ+bogTm/6P3VB3T525lD/D0179HbNLZrQ7m6WMwZEIDTM7Vkyc39X7N8tTteSsuf33TUuXPnqx7352zjxo0OnQkAAADAjdlwIFU9p67XpkPGt4F2bBisb8d21O31q5gwGYCKxGHPZLkR69atK/rctGlTu5yze/fu2rZtm9LT0xUUFKRmzZrpnnvu0YgRI1SpUqWrft3u3bslSYGBgapevfpVj6tRo4YCAgJ0/vx57dmzp9jzJSUlXTNPSUkp9jkBAACAiqqg0Kr3Vx/QzLUHZbvs7hVXF4ue6t5Ij3WqLxfuXgFQCkwrWaxWq8aPH1/048GDB9vlvN9//33R5zNnzmjdunVat26dJkyYoLlz56pv375X/Lo/yo8beWNQeHi4du3apcTExGLPFx4eXuyvAQAAAGB0MiNHYxbEa8uRNENWI9BL06Ij1bZOZRMmA1BRmVayTJkyRVu2bJEkDRgwQG3atLmp87Vs2VL9+vVTu3btFBoaqvz8fO3bt0/z5s3TqlWrlJ6eroEDB+rrr7/Wvffea/j6zMxMSZKfn991r+Xr6ytJunDhwk3NDAAAAKBk1u47rScXbVdaVp4hu6tJiCYOaq3Kvh4mTAagIrPYbJffVOd469atU9euXVVQUKCQkBAlJCQoJCSkxOf7YzXoaj766CM99thjkqTQ0FAdOnRIXl6XPk3c1dVVVqtVHTt21E8//XTN63Xq1Enr16+Xq6urCgoKijXrjawLtWvXTpKUmJh4Q3fWAAAAABVFfqFVk1bt17/WGV+c4eZi0T/vaaxHO9RjPQjAdSUlJRVtm9jr++9Sv5Nl165d6t+/vwoKCuTl5aXFixffVMEi6ZoFiySNGDFCv/76q+bMmaPk5GR9/vnnGjZs2CXHeHl5KTs7W3l5xib8cn88sNfb27vYs1KaAAAAACVzIv2ixsyP12/HzhmymkHemh4TqahaV38OIwA4Wqm+XejIkSPq3r27zp07J1dXVy1YsECdOnUqlWuPGDGi6POfH7j7B39/f0k3tgKUlZUl6cZWiwAAAADcvNW7T+m+aeuvWLB0a1ZN347pSMECwHSldidLcnKyunbtquTkZFksFn3yySdXfQitIzRr1qzo84kTJwx5WFiYTp06dd11HklFD7zlIbYAAACAY+UVWPXuir2aveGIIXN3tej5e5vq4fZ1ZLGwHgTAfKVyJ0tqaqq6deumw4cPS5KmT5+u4cOHl8ali1zvX7p/lDAZGRk6efLkVY9LSUnR+fPnJdnvtdMAAAAAjBLTsjXoo81XLFjCK3tryWN36K8d6lKwACgzHF6yZGRkqEePHtq9e7ckafz48Ro5cqSjL2vwx/Wl3x9+e7kOHToUfb7SOtGVsvbt29tpOgAAAAB/tmJninpOW6/tiemGrGfL6vpmTEe1Dg8q9bkA4FocWrJkZ2frvvvuU1xcnCTpxRdf1LPPPuvIS17VRx99VPS5c+fOhrxPnz5ycfn9b8e///3vq55n7ty5kiQXFxf16dPHvkMCAAAAFVxuQaFe+XKnHvtvnDJzLn2Tp4ebi97o10IzY6IU4OVu0oQAcHUOK1ny8vLUv39/bdy4UZI0duxYvfnmm8U+z9y5c2WxWGSxWPTqq68a8oSEBB08ePCa55g1a5Zmz54tSapevbr69+9vOKZ69epFbxxauXKllixZYjhm8eLFWrlypSTpgQceUPXq1Yv7ywEAAABwFUdTszTww036dPMxQ1Y32Fdf/OMOPXBbbdaDAJRZDnvwbXR0tFatWiVJuuuuu/TII49o586dVz3ew8NDjRo1KvZ1fvvtNz366KPq0qWL7r33XrVs2VJVqlRRQUGB9u7dq3nz5hXN4erqqlmzZsnX1/eK53rrrbe0YsUKnTlzRtHR0dq6dat69eolSVq+fLkmTZokSapatWqJCiMAAAAAV7Z8R7Ke+zxBF3ILDFmf1qF6e0BL+XmW2ns7AKBEHPZvqaVLlxZ9/uGHH9SqVatrHl+7dm0dPXq0RNcqLCzU6tWrtXr16qseU6VKFc2ZM0e9e/e+6jHh4eH6+uuv1a9fP508eVITJkzQhAkTLjmmevXqWrZsmcLCwko0KwAAAID/yckv1BvLd2veL8cNmaebi17t01xD24Zz9wqAcqHcV8E9e/bUnDlztHnzZsXHx+vUqVM6e/asbDabKleurNatW+uee+7RQw89pICAgOue79Zbb1VCQoKmTp2qZcuWFRU/devWVd++ffX444+rSpUqDv5VAQAAAM7v0JkLGjkvTntPZhqy+lV9NXNYlJpUv/6f4QGgrLDYbDab2UPgf5KSkhQeHi5JSkxM5I4ZAAAAOKVl8Sf0whcJys4rNGQDomrqjb4t5Mt6EAAHcsT33/xbCwAAAECpuZhXqFe/2qWFWxMNmbe7q17v21yDbgk3YTIAuHmULAAAAABKxYFTmRoZG6f9py4YskbV/DQzJkoNq/mbMBkA2AclCwAAAACHW7w1UeO+3KWL+cb1oCG3hOvVPs3l7eFqwmQAYD+ULAAAAAAcJiu3QC9/uVNL404YMh8PV73dv6X6RdY0YTIAsD9KFgAAAAAOsffkeY2cF6dDZ7IMWdMaAZoZE6l6Vf1MmAwAHIOSBQAAAIBd2Ww2Lfg1Ua9+tUu5BVZDPuzWWnq5VzN5ubMeBMC5ULIAAAAAsJsLuQV6YWmCvtqebMj8PN00fmBL9WoVasJkAOB4lCwAAAAA7GLniQyNio3T0bPZhqxFzQDNiI5SnWBfEyYDgNJByQIAAADgpthsNv3352N645s9yrvCetBDd9TR8z2byNON9SAAzo2SBQAAAECJnc/J13Of79C3CScNmb+Xm967v5XuaVHDhMkAoPRRsgAAAAAokR1J6RoVG6/jacb1oNZhgZoRE6Xwyj4mTAYA5qBkAQAAAFAsNptN/954VO98t0f5hTZD/miHuvrnPU3k4eZiwnQAYB5KFgAAAAA3LCM7X88s2a5Vu08ZskBvd00a1Fpdm1UzYTIAMB8lCwAAAIAbEnf8nEbHxutE+kVD1qZ2JU2LjlTNIG8TJgOAsoGSBQAAAMA1Wa02zd5wWO+u2KcCq3E96LHO9fVU90Zyd2U9CEDFRskCAAAA4KrOZeXpqcXb9cPe04assq+HJg1urS6NQ0yYDADKHkoWAAAAAFf069E0jZkfr5SMHEPWrk5lTYuOVPVALxMmA4CyiZIFAAAAwCWsVps+XHdIk7/fr8LL1oMsFmlUlwYae3dDubEeBACXoGQBAAAAUCT1Qq6eXLRdP+0/Y8iC/Tw0ZUiEOjasasJkAFD2UbIAAAAAkCT9fPisxsyP1+nMXEN2e70qmjo0QiEBrAcBwNVQsgAAAAAVXKHVphk/HNTUNft1+cuDXCzS2LsbadRdDeTqYjFnQAAoJyhZAAAAgArsdGaOnli4TRsPnjVkIf6emjo0UrfXr2LCZABQ/lCyAAAAABXUxoOpGrtgm1IvGNeDOjYM1pQhEQr28zRhMgAonyhZAAAAgAqmoNCqaWsOaPqPB2W7bD3I1cWiJ7s10v91ri8X1oMAoFgoWQAAAIAK5GRGjsYsiNeWI2mGrHqAl6bHRKptncomTAYA5R8lCwAAAFBBrN13Wk8u2q60rDxD1qVxVU0aHKHKvh4mTAYAzoGSBQAAAHBy+YVWTf5+vz5ce8iQublY9M97GuvRDvVYDwKAm0TJAgAAADix5PSLGj0/Xr8dO2fIagZ5a1p0pNrUrmTCZADgfChZAAAAACe1Zs8pPbV4u9Kz8w1Z16bVNHFQKwX5sB4EAPZCyQIAAAA4mbwCq95dsVezNxwxZO6uFj1/b1M93L6OLBbWgwDAnihZAAAAACeSmJat0fPjtS0x3ZCFV/bWjOgotQ4PKvW5AKAioGQBAAAAnMTKXSf1zOLtOp9TYMjubVFd4we2UqC3uwmTAUDFQMkCAAAAlHO5BYV659u9mrvpqCHzcHXRy72a6i+31WY9CAAcjJIFAAAAKMeOnc3SqNh4JZzIMGR1qvhoRkyUWtQMNGEyAKh4KFkAAACAcuqbHSl67vMdysw1rgf1bh2qt/u3kL8X60EAUFooWQAAAIByJie/UG9+s1v//fm4IfN0c9GrfZpraNtw1oMAoJRRsgAAAADlyOEzFzQyNl57Us4bsnpVfTUzJkpNawSYMBkAgJIFAAAAKCe+3HZCLyxNUFZeoSEbEFlTb/RrIV9P/ogPAGbh38AAAABAGXcxr1Cvfb1LC35NNGRe7i56vW8LDWoTxnoQAJiMkgUAAAAoww6eztTIefHadyrTkDUM8dMHw6LUsJq/CZMBAC5HyQIAAACUUUt+S9LLy3bqYr5xPWjwLWF6rU8LeXu4mjAZAOBKKFkAAACAMiY7r0AvL9ulz+OSDJmPh6ve6t9C/SPDTJgMAHAtlCwAAABAGbLvZKb+Me83HTqTZciaVPfXzGFRql/Vz4TJAADXQ8kCAAAAlAE2m00Lf03UK1/tUm6B1ZDH3FpL43o1k5c760EAUFZRsgAAAAAmu5BboBe/SNCX25INmZ+nm94Z0FK9W4eaMBkAoDgoWQAAAAAT7UrO0OjYeB1ONa4HtagZoBnRUaoT7GvCZACA4qJkAQAAAExgs9n031+O643lu5V3hfWgB2+vrRfuaypPN9aDAKC8oGQBAAAAStn5nHw9/3mCvklIMWT+Xm56d2Ar3duyhgmTAQBuBiULAAAAUIp2JKVrVGy8jqdlG7LWYYGaEROl8Mo+JkwGALhZlCwAAABAKbDZbJq76aje/naP8gtthvyRDnX17D1N5OHmYsJ0AAB7oGQBAAAAHCwjO1///Hy7Vu46ZcgCvd01cVBrdWtWzYTJAAD2RMkCAAAAOFD88XMaFRuvE+kXDVlUrSBNj4lSzSBvEyYDANgbJQsAAADgADabTbPXH9GEFXtVYDWuB43oXE9Pd28sd1fWgwDAWVCyAAAAAHZ2LitPTy/erjV7TxuySj7umjw4Ql2ahJgwGQDAkShZAAAAADvaejRNY+bHKzkjx5C1q1NZU6MjVCOQ9SAAcEaULAAAAIAdWK02/eunQ5q0ar8KL1sPslikkXc20ONdG8qN9SAAcFqULAAAAMBNOnshV08u2q51+88YsmA/D00ZEqGODauaMBkAoDRRsgAAAAA34efDZzV2QbxOnc81ZLfXq6KpQyMUEuBlwmQAgNJGyQIAAACUQKHVppk/HtT7q/fr8pcHWSzS2LsbavRdDeXqYjFnQABAqaNkAQAAAIrpdGaOnli4TRsPnjVkVf09NXVohO6oH2zCZAAAM1GyAAAAAMWw8WCqxi7YptQLxvWgjg2DNWVIhIL9PE2YDABgNkoWAAAA4AYUWm2auuaApv9wQLbL1oNcLNJT3Rvr/zrXlwvrQQBQYTn0/XFbt27V66+/ru7duyssLEyenp7y8/NTo0aN9PDDD2vDhg12uU5GRobmzZunhx9+WK1bt1ZgYKDc3d1VtWpVdenSRZMmTVJ6evp1z1OnTh1ZLJbr/lWnTh27zA0AAIDy4dT5HMV8/LOmrTEWLNUDvLTg77drZJcGFCwAUMFZbLbLf5uwj06dOmn9+vXXPW748OH6+OOP5eHhUaLrfPfdd+rfv79yc423a/5Z9erVFRsbqy5dulz1mDp16ujYsWPXvWbt2rV19OjR4o56Q5KSkhQeHi5JSkxMVFhYmEOuAwAAgBuzbv8ZPblwm85m5RmyOxtX1eTBEarsW7I/ywIAzOOI778dti6UnJwsSQoNDdWgQYPUsWNH1apVS4WFhdq8ebMmTZqkEydO6LPPPlN+fr5iY2NLdJ2zZ88qNzdXLi4u6tatm+655x61bt1aQUFBSkpK0rx587Rw4UKdPHlSvXr10saNGxUREXHNc/bt21dvvvnmVfOSFkIAAAAoPwoKrZr0/X59uPaQIXN1seifPRrrbx3rcfcKAKCIw0qWJk2a6O2339bAgQPl6up6SXbbbbfpgQceUPv27bV//37Nnz9fjz32mDp16lTs67i7u2vEiBF64YUXVKtWrUuyyMhI9e7dW+3bt9eYMWOUnZ2tJ598Uj/88MM1zxkUFKQWLVoUexYAAAA4h+T0ixozP15bj50zZDWDvDUtOlJtalcyYTIAQFnmsGeyLF++XIMHDzYULH8IDg7WpEmTin68ZMmSEl1nyJAh+te//mUoWP5s9OjRuuWWWyRJ69atU2pqaomuBQAAAOf3w95T6jlt/RULlq5Nq+mbMR0oWAAAV+TQB99ez5+fj3LokPE2THu68847JUlWq1VHjhxx6LUAAABQ/uQXWvXWN7v117lblZ6df0nm7mrRy72a6ePhbRTkw+o4AODKTH2F858fVnu1O17K47UAAABQviSmZWv0/HhtS0w3ZOGVvTUjOkqtw4NKfS4AQPliasmybt26os9NmzYtlWu5u7urQYMG1zz2p59+UkREhA4dOqTCwkJVq1ZN7dq1U3R0tPr27SuLpeQPN0tKSrpmnpKSUuJzAwAAoPhW7jqpZxZv1/mcAkN2b4vqGj+wlQK93U2YDABQ3phWslitVo0fP77ox4MHD3bYtb755hvt2LFDktSjRw8FBARc8/jL14mOHj2qo0ePatGiRWrfvr0WLlyomjVrlmiWP14PBQAAAHPlFhRq/Hd79e+NRw2Zh6uLXurVVA/cVvum/gMbAKBiMa1kmTJlirZs2SJJGjBggNq0aeOQ66SlpWnkyJGSfl8Tev311696rIeHh/r06aPu3burRYsWCgwMVHp6ujZv3qwPP/xQiYmJ2rhxo7p166bNmzcrMDDQITMDAADAsY6fzdbI2DglnMgwZLWr+GhmTJRa1OTPegCA4rHYbDZbaV903bp16tq1qwoKChQSEqKEhASFhITY/TqFhYXq1auXVqxYIUl65ZVX9Oqrr171+PT0dAUFBV0xy8zM1P33369Vq1ZJkp544glNnjy52DPdyLpQu3btJEmJiYkKCwsr9jUAAABwdd8mpOjZJTuUmWtcD+rVqobeGdBS/l6sBwGAs0tKSiraNrHX99+lXrLs2rVLHTt21Llz5+Tl5aWVK1eqU6dODrnWiBEjNGvWLElSr169tGzZspt66G1GRobq1auntLQ0+fr6Ki0tTR4e9n26vCP+RwYAAICUk1+ot77Zo//8fMyQebi56NXezRXdLpz1IACoIBzx/XepvsL5yJEj6t69u86dOydXV1ctWLDAYQXL888/X1SwdOzYUYsWLbrptwoFBgZq6NChkqSsrCxt3br1pucEAACA4x1JzdKADzZdsWCpV9VXX45sr5hba1GwAABuSqk9kyU5OVldu3ZVcnKyLBaLPvnkE/Xt29ch15owYULRQ3WjoqK0fPlyeXt72+XczZo1K/p84sQJu5wTAAAAjvPlthN6YWmCsvIKDVn/yJp6s18L+Xqa+tJNAICTKJXfTVJTU9WtWzcdPnxYkjR9+nQNHz7cIdf64IMP9Nxzz0n6/bXQK1euvO7bhIqD/7oBAABQPuTkF+q1r3dp/pZEQ+bl7qLX+7bQoDZh/PkOAGA3Di9ZMjIy1KNHD+3evVuSNH78+KK3/djbf/7zH40aNUqSVK9ePa1evVrBwcF2vcYfvw5JCg0Nteu5AQAAYB8HT2dq5Lx47TuVacgahvhp5rAoNarmb8JkAABn5tCSJTs7W/fdd5/i4uIkSS+++KKeffZZh1xr6dKlevjhh2Wz2RQWFqY1a9bYvQTJyMjQggULJEk+Pj665ZZb7Hp+AAAA3LzPf0vSS8t26mK+cT1o8C1heq1PC3l73Nyz+gAAuBKHPfg2Ly9P/fv318aNGyVJY8eO1Ztvvlns88ydO1cWi0UWi+Wqr19etWqVoqOjVVhYqJCQEK1evVp16tQp1nVWrFihixcvXjW/cOGCBg8erLNnz0qSHnnkEXl6ehbrGgAAAHCc7LwCPb14u55avN1QsPh4uGry4NZ69/7WFCwAAIdx2J0s0dHRWrVqlSTprrvu0iOPPKKdO3de9XgPDw81atSo2Nf5+eef1b9/f+Xl5cnd3V1TpkxRfn7+Na8VFhamoKCgS35u/PjxGjZsmAYMGKAOHTqofv368vPzU0ZGhjZt2qR//etfOn78uCSpcePGVy18AAAAUPr2nczUyNg4HTx9wZA1qe6vGTFRahDiZ8JkAICKxGEly9KlS4s+//DDD2rVqtU1j69du7aOHj1a7OusWLFC2dnZkqT8/HwNGzbsul/z73//Ww899JDh59PS0jR79mzNnj37ql/buXNnzZs3T5UrVy72rAAAALAvm82mRVsT9cpXu5STbzXkMbfW0rhezeTlzt0rAADH4111/9/EiRO1Zs0abd68Wfv27VNqaqrS09Pl4+Oj0NBQ3XrrrYqOjlb37t15Aj0AAEAZcCG3QC99kaBl25INmZ+nm94e0FJ9WvOiAgBA6bHYbDab2UPgf5KSkhQeHi5JSkxMVFhYmMkTAQAAlD27k89rVGycDqdmGbLmoQGaEROlusG+JkwGACgvHPH9N3eyAAAAoNyw2Wya98txvb58t/IKjOtBw2+vrRd6NmU9CABgCkoWAAAAlAuZOfl6bmmCvtmRYsj8vdz07sBWurdlDRMmAwDgd5QsAAAAKPMSkjI0an6cjp3NNmStwwI1PTpKtar4mDAZAAD/Q8kCAACAMstms+nTTUf19rd7lVdoXA/6a/u6eu7eJvJwczFhOgAALkXJAgAAgDIpIztf//x8u1buOmXIAr3dNXFQa3VrVs2EyQAAuDJKFgAAAJQ52xLTNSo2TknnLhqyyFpBmh4dqbBKrAcBAMoWShYAAACUGTabTXM2HNH47/aqwGoz5CM619PT3RvL3ZX1IABA2UPJAgAAgDIhPTtPTy/ertV7ThuySj7umjw4Ql2ahJgwGQAAN4aSBQAAAKb77ViaRsfGKzkjx5C1rVNJ06IjVSPQ24TJAAC4cZQsAAAAMI3VatNHPx3WxFX7VHjZepDFIv3jzvp6omsjubEeBAAoByhZAAAAYIqzF3L11OLtWrvvjCGr4uuhKUMi1KlRVRMmAwCgZChZAAAAUOp+OXxWYxbE69T5XEN2e70qmjo0QiEBXiZMBgBAyVGyAAAAoNQUWm364MeDmrJ6vy5/eZDFIo25q6HG3N1Qri4WcwYEAOAmULIAAACgVJzJzNUTC7dpw8FUQ1bV31NTh0TojgbBJkwGAIB9ULIAAADA4TYdTNWYBduUesG4HtSxYbAmD45QVX9PEyYDAMB+KFkAAADgMIVWm6auOaDpPxyQ7bL1IBeL9GS3RvrHnQ3kwnoQAMAJULIAAADAIU6dz9HYBfH6+XCaIasW4KlpQyN1a70qJkwGAIBjULIAAADA7n7af0ZPLNyms1l5huzOxlU1aVBrVfFjPQgA4FwoWQAAAGA3BYVWTf5+vz5Ye8iQubpY9EyPxvp7x3qsBwEAnBIlCwAAAOwiJeOixsyP169Hzxmy0EAvTY+JVJvalU2YDACA0kHJAgAAgJv2497TenLRNp3LzjdkXZtW08RBrRTk42HCZAAAlB5KFgAAAJRYfqFVE1fu00c/HTZk7q4WPXtPEz3Soa4sFtaDAADOj5IFAAAAJZJ0Lluj58cr/ni6IQur5K0ZMVGKCA8q9bkAADALJQsAAACKbdWuk3pmyQ5lXDSuB93TvLom3N9Kgd7uJkwGAIB5KFkAAABww/IKrHrnuz3698ajhszD1UUv3tdUw2+vzXoQAKBComQBAADADTl+Nluj5sdpR1KGIatdxUczY6LUomagCZMBAFA2ULIAAADgur5NSNGzS3YoM7fAkPVqVUPvDGgpfy/WgwAAFRslCwAAAK4qJ79Qb32zR//5+Zgh83Bz0Su9mymmXS3WgwAAECULAAAAruJIapZGxcZpV/J5Q1Yv2FczYqLULDTAhMkAACibKFkAAABg8NX2ZD3/+Q5l5RUasv6RNfVmvxby9eSPkgAA/Bm/MwIAAKBITn6hXvt6t+ZvOW7IvNxd9HqfFhp0SxjrQQAAXAElCwAAACRJB09f0KjYOO09mWnIGob4aeawKDWq5m/CZAAAlA+ULAAAANDSuCS9tGynsq+wHjSoTZhe69tcPh780REAgGvhd0oAAIAKLDuvQK98uUuLf0syZD4ernqzXwsNiAozYTIAAMofShYAAIAKav+pTI2cF6cDpy8YsibV/TUjJkoNQvxMmAwAgPKJkgUAAKCCsdlsWrw1SeO+2qmcfKshj25XS6/0biYvd1cTpgMAoPyiZAEAAKhAsnIL9OIXCVq2LdmQ+Xq46u0BLdU3oqYJkwEAUP5RsgAAAFQQu5PPa1RsnA6nZhmyZjUCNHNYlOoG+5owGQAAzoGSBQAAwMnZbDbFbjmu177erbwC43rQ8Ntr64WeTVkPAgDgJlGyAAAAOLHMnHw9vzRBy3ekGDJ/TzdNuL+VerasYcJkAAA4H0oWAAAAJ7XzRIZGxsbp2NlsQ9YqLFAzoqNUq4qPCZMBAOCcKFkAAACcjM1m02ebj+mtb/Yor9C4HvTX9nX13L1N5OHmYsJ0AAA4L0oWAAAAJ5JxMV/PLtmhFbtOGrIALzdNHNRa3ZtXN2EyAACcHyULAACAk9iWmK5RsXFKOnfRkEXWCtL06EiFVWI9CAAAR6FkAQAAKOdsNpvmbDiiCSv2Kr/QZshHdKqnp3s0lrsr60EAADgSJQsAAEA5lp6dp6cXb9fqPacNWSUfd00a3Fp3NalmwmQAAFQ8lCwAAADl1G/H0jQ6Nl7JGTmGrG2dSpoWHakagd4mTAYAQMVEyQIAAFDOWK02zVp/WO+t3KdCq3E96B931teT3RrJjfUgAABKFSULAABAOXL2Qq6eWrxda/edMWRVfD00eUiEOjeqasJkAACAkgUAAKCc2HIkTaPnx+nU+VxDdlu9ypo6NFLVArxMmAwAAEiULAAAAGWe1WrTB2sPavL3+3X5dpDFIo25q6HG3N1Qri4WcwYEAACSKFkAAADKtDOZuXpy0TatP5BqyKr6e2rqkAjd0SDYhMkAAMDlKFkAAADKqE0HUzV24TadyTSuB3VoEKwpQyJU1d/ThMkAAMCVULIAAACUMYVWm6atOaBpPxyQ7bL1IBeL9GS3Rvq/OxuwHgQAQBlDyQIAAFCGnD6fo7ELtmnz4bOGrFqAp6YNjdSt9aqYMBkAALgeShYAAIAy4qf9Z/TEwm06m5VnyDo3qqrJg1urih/rQQAAlFWULAAAACYrKLRqyur9+mDtIcN6kKuLRU93b6wRnerJhfUgAADKNEoWAAAAE6VkXNTY+du05WiaIQsN9NL0mEi1qV3ZhMkAAEBxUbIAAACY5Me9p/Xkom06l51vyLo2DdF797dWJV8PEyYDAAAlQckCAABQyvILrZq4cp8++umwIXNzsei5e5vokQ51ZbGwHgQAQHlCyQIAAFCKTqRf1OjYOMUdTzdkYZW8NSMmShHhQaU+FwAAuHmULAAAAKXk+92n9PTi7cq4aFwP6tG8mt69v7UCvd1NmAwAANiDiyNPvnXrVr3++uvq3r27wsLC5OnpKT8/PzVq1EgPP/ywNmzYYPdrzp8/X927d1f16tXl5eWl2rVr6y9/+Ys2b958w+fIzs7Wu+++q7Zt26py5cry9fVVkyZN9NRTT+nYsWN2nxkAADi3vAKrXv96t/722VZDweLh6qLX+jTXv/7ShoIFAIByzmKzXf6iQPvo1KmT1q9ff93jhg8fro8//lgeHjf3ULeLFy/q/vvv17fffnvF3MXFRePGjdMrr7xyzfMcPHhQPXv21IEDB66YBwQEaN68eerVq9dNzXs1SUlJCg8PlyQlJiYqLCzMIdcBAAClIzEtW6Ni47Q9KcOQ1a7ioxnRUWoZFmjCZAAAVGyO+P7bYXeyJCcnS5JCQ0M1duxYLVmyRFu2bNHmzZs1efJk1axZU5L02Wef6aGHHrrp6/31r38tKli6dOmiZcuWacuWLZozZ47q168vq9WqV199VbNmzbrqOTIzM3XfffcVFSx/+9vftGbNGm3atElvvfWW/Pz8dP78eQ0ZMkTbtm276ZkBAIBzW7EzRT2nrb9iwXJfqxr6enQHChYAAJyIw+5k6dWrl4YPH66BAwfK1dXVkKempqp9+/bav3+/JGndunXq1KlTia71ww8/6O6775Yk9e7dW1988cUl10xNTVWbNm10/PhxBQUF6fDhw6pUqZLhPOPGjdMbb7whSXr33Xf1zDPPXJJv2rRJnTt3VkFBgTp37qy1a9eWaN5r4U4WAADKv5z8Qr3z7R59utm4Zuzh5qJxvZpp2K21eHsQAAAmKld3sixfvlyDBw++YsEiScHBwZo0aVLRj5csWVLia02cOFGS5Obmpg8++MBwzeDgYE2YMEGSlJ6ertmzZxvOkZ+fr2nTpkmSmjZtqqeeespwzB133KFHHnlE0u+l0K+//lrimQEAgHM6mpqlgR9uumLBUi/YV8v+0V5/ua02BQsAAE7IoQ++vZ4uXboUfT506FCJzpGZmak1a9ZIkrp27XrV5mnAgAEKCAiQJH3xxReG/Mcff1RGxu+38j744INycbny35o/rzZd6TwAAKDi+mp7snpN36BdyecNWb+IUH01uoOahQaYMBkAACgNppYsubm5RZ+vdsfL9fz666/Ky8uTJHXu3Pmqx3l4eOi2224r+pr8/Euf7P/nNx1d6zy33HKLfHx8JEkbN24s0cwAAMC55OQX6vmlCRozP14XcgsuybzcXTRhYEtNGRIhP083kyYEAAClwdTf6detW1f0uWnTpiU6x+7du4s+N2nS5JrHNmnSRKtWrVJBQYEOHDigZs2aFfs8bm5uatCggXbs2KE9e/YUe96kpKRr5ikpKcU+JwAAMM+hMxc0cl6c9p7MNGQNQvw0MyZKjav7mzAZAAAobaaVLFarVePHjy/68eDBg0t0nj+XFtd7SM0fD7SRfn+ozZ9Llj/O4+vrq6CgoOueZ8eOHTpz5oxyc3Pl6el5w/P+eQYAAFC+fRGfpBe/2KnsvEJDdn+bML3et7l8PLh7BQCAisK03/WnTJmiLVu2SPr9eSlt2rQp0XkyM//3X438/Pyueayvr2/R5wsXLlzxPNc7x5XOU5ySBQAAlH8X8wo17sudWvyb8Q5Vb3dXvdmvhQa24Q2BAABUNKaULOvWrdNzzz0nSQoJCdGHH35Y4nPl5OQUffbw8LjmsX8uQy5evHjF81zvHNc7z/UkJiZeM09JSVG7du2KdU4AAFB69p/K1Mh5cTpw+oIha1zNXzOHRalByPX/ow0AAHA+pV6y7Nq1S/3791dBQYG8vLy0ePFihYSElPh8Xl5eRZ//eADu1fz5Qbve3t5XPM/1znG981yPPd67DQAASp/NZtPi35I07sudysm3GvLoduF6pXdzebmX7GH+AACg/CvVkuXIkSPq3r27zp07J1dXVy1YsECdOnW6qXP6+//vQXKXrwBdLisrq+jz5WtBf5zneue43nkAAIDzycot0MvLdmpp/AlD5uvhqrcHtFTfiJomTAYAAMqSUnuFc3Jysrp27ark5GRZLBZ98skn6tu3702f9893hlzvzT1/XtW5/AG0f5wnKytL6enpN3SeqlWr8jwWAACc3J6U8+o9Y8MVC5ZmNQL09egOFCwAAEBSKZUsqamp6tatmw4fPixJmj59uoYPH26Xc//5DUF79+695rF/5G5ubmrYsGGJzlNQUKBDhw5JKvlrpwEAQNlns9kU+8tx9Zu5UYfPZBnyB26rraX/uEP1qnJXKwAA+J3DS5aMjAz16NFDu3fvliSNHz9eI0eOtNv527ZtW/Sw2nXr1l31uLy8PP38889FX+Pu7n5J3qFDh6LP1zrP1q1bi9aF2rdvX+K5AQBA2ZWZk68xC7bphS8SlFtw6fNX/D3dNDMmSm/0a8HzVwAAwCUcWrJkZ2frvvvuU1xcnCTpxRdf1LPPPmvXa/j7++vuu++WJK1evfqqK0NLly7V+fPnJUn9+/c35HfeeacCAwMlSZ9++qlsNtsVzzN37tyiz1c6DwAAKN92nshQ7+kb9PX2ZEPWsmaglo/poPta1TBhMgAAUNY5rGTJy8tT//79tXHjRknS2LFj9eabbxb7PHPnzpXFYpHFYtGrr756xWOefvppSb+v8owcOVKFhYWX5KmpqUXlTlBQkB599FHDOTw8PDRmzBhJ0p49ezRx4kTDMZs3b9acOXMkSZ07d1bbtm2L/esBAABlk81m02ebj2rAB5t09Gy2IX+4fR0t+b/bVbuKrwnTAQCA8sBhbxeKjo7WqlWrJEl33XWXHnnkEe3cufOqx3t4eKhRo0YlutZdd92loUOHasGCBfrqq6/UrVs3Pf744woNDVVCQoLeeustHT9+XJI0YcIEVapU6YrneeaZZ7Rw4ULt379f//znP3Xw4EENHTpU3t7e+vHHH/X222+roKBA3t7eev/990s0KwAAKHsyLubruc936LudJw1ZgJeb3hvUWj2aVzdhMgAAUJ44rGRZunRp0ecffvhBrVq1uubxtWvX1tGjR0t8vU8++UTnz5/Xt99+qx9//FE//vjjJbmLi4tefvll/f3vf7/qOfz9/fXNN9+oZ8+eOnDggGbNmqVZs2ZdckxAQIDmzZuniIiIEs8KAADKju2J6Ro1P06JaRcNWUR4kGbERCqsko8JkwEAgPLGYSVLafP29tY333yj2NhYzZ07V9u3b1d6erqqVaumjh07atSoUbr99tuve54GDRooPj5eM2fO1OLFi3Xw4EHl5eUpPDxcPXv21NixY1W7du1S+BUBAABHstls+mTjUY3/bo/yC43PYvt7p3p6pkdjubuWyssYAQCAE7DYrvaEV5giKSlJ4eHhkqTExESFhYWZPBEAAM4nPTtPTy/eodV7ThmyIB93TR7cWnc1qWbCZAAAoLQ44vtvp7mTBQAA4Eb8duycxsyP14l043rQLbUraVp0pEKDvE2YDAAAlHeULAAAoEKwWm36eP1hvbdynwqsxht5/3FnfT3ZrZHcWA8CAAAlRMkCAACcXlpWnp5atE0/7jtjyKr4emjykAh1blTVhMkAAIAzoWQBAABObcuRNI2ZH6+T53MM2a11K2tadKSqBXiZMBkAAHA2lCwAAMApWa02fbjukCZ/v1+Fl60HWSzS6LsaasxdDVgPAgAAdkPJAgAAnE7qhVw9sXCb1h9INWTBfp6aOjRC7RsEmzAZAABwZpQsAADAqWw6lKqxC7bpTGauIWvfoIqmDIlQiD/rQQAAwP4oWQAAgFMotNo0/YcDmrbmgC5/eZCLRXqiayP9o0sDubpYzBkQAAA4PUoWAABQ7p0+n6PHF27TpkNnDVm1AE9NHRqp2+pVMWEyAABQkVCyAACAcm39gTN6YuE2pV7IM2SdG1XV5MGtVcXP04TJAABARUPJAgAAyqWCQqveX31AM9celO2y9SBXF4ue7t5YIzrVkwvrQQAAoJRQsgAAgHLnZEaOxsyP15ajaYasRqCXpkdH6pY6lU2YDAAAVGSULAAAoFz5cd9pPbVou9KyjOtBdzcJ0cRBrVXJ18OEyQAAQEVHyQIAAMqF/EKrJq7ap4/WHTZkbi4WPXdvEz3Soa4sFtaDAACAOShZAABAmXci/aJGx8Yp7ni6IasZ5K0ZMZGKrFWp9AcDAAD4E0oWAABQpn2/+5SeXrxdGRfzDVn3ZtX03v2tFejjbsJkAAAAl6JkAQAAZVJegVUTVuzVnA1HDJm7q0Uv9Gyqh+6ow3oQAAAoMyhZAABAmZOYlq1R8+O1PTHdkNWq7KMZMZFqFRZU6nMBAABcCyULAAAoU1bsTNEzS3YoM6fAkN3XsobeGdhSAV6sBwEAgLKHkgUAAJQJuQWFevubPfp08zFD5uHmonG9mmnYrbVYDwIAAGUWJQsAADDd0dQsjZofp50nzhuyusG+mhETqeahgSZMBgAAcOMoWQAAgKmW70jWc58n6EKucT2ob0So3urfUn6e/JEFAACUffyJBQAAmCInv1CvL9+t2F+OGzJPNxe93re5Bt8SznoQAAAoNyhZAABAqTt05oJGzovT3pOZhqx+VV99MKyNGlf3N2EyAACAkqNkAQAApeqL+CS9+MVOZecVGrKBUWF6o19z+XjwRxQAAFD+8CcYAABQKi7mFeqVr3Zq0dYkQ+bt7qo3+rXQ/W3CTJgMAADAPihZAACAwx04lamRsXHaf+qCIWtczV8zYiLVsBrrQQAAoHyjZAEAAA61eGuiXv5yp3LyrYZsaNtwvdK7ubw9XE2YDAAAwL4oWQAAgENk5Rbo5S93amncCUPm6+Gqtwe0VN+ImiZMBgAA4BiULAAAwO72njyvkfPidOhMliFrWiNAM2MiVa+qnwmTAQAAOA4lCwAAsBubzaYFvybq1a92KbfAuB70l9tq6aX7msnLnfUgAADgfChZAACAXWTm5OuFL3bq6+3Jhszf003vDGypXq1CTZgMAACgdFCyAACAm7bzRIZGxcbp6NlsQ9ayZqBmxESqdhVfEyYDAAAoPZQsAACgxGw2m/778zG9sXyP8gqN60EP3VFHz/dsIk831oMAAIDzo2QBAAAlcj4nX899vkPfJpw0ZAFebnr3/ta6p0V1EyYDAAAwByULAAAotu2J6Ro1P06JaRcNWevwIM2IjlR4ZR8TJgMAADAPJQsAALhhNptN/954VO98t0f5hTZD/reOdfVMjybycHMxYToAAABzUbIAAIAbkp6dp2eW7ND3u08ZsiAfd028v7W6NqtmwmQAAABlAyULAAC4rrjj5zQ6Nl4n0o3rQbfUrqRp0ZEKDfI2YTIAAICyg5IFAABcldVq0+wNh/Xuin0qsBrXg/7vzvp6slsjubuyHgQAAEDJAgAArigtK09PL96uH/aeNmSVfT00eXBr3dk4xITJAAAAyiZKFgAAYPDr0TSNmR+vlIwcQ9aubmVNGxqp6oFeJkwGAABQdlGyAACAIlarTR+uO6TJ3+9X4WXrQRaLNLpLA425u6HcWA8CAAAwoGQBAACSpNQLuXpi4TatP5BqyIL9PPX+kAh1aBhswmQAAADlAyULAADQ5kNnNXZBvE5n5hqyO+pX0ftDIxTiz3oQAADAtVCyAABQgRVabZrxw0FNXbNfl788yMUiPd61kUZ2aSBXF4s5AwIAAJQjlCwAAFRQpzNz9PiCbdp06KwhC/H31NShkbq9fhUTJgMAACifKFkAAKiANhxI1eML45V6Ic+QdWwYrClDIhTs52nCZAAAAOUXJQsAABVIQaFVU9cc0IwfD8p22XqQq4tFT3VvpMc61ZcL60EAAADFRskCAEAFcTIjR2MWxGvLkTRDViPQS9OiI9W2TmUTJgMAAHAOlCwAAFQAa/ed1pOLtisty7gedFeTEE0a1FqVfD1MmAwAAMB5ULIAAODE8gutmrRqv/617pAhc3Ox6Nl7muiRDnVZDwIAALADShYAAJxUcvpFjZ4fr9+OnTNkNYO8NT0mUlG1KpkwGQAAgHOiZAEAwAmt3n1KTy/ZrvTsfEPWvVk1vXd/awX6uJswGQAAgPOiZAEAwInkFVj17oq9mr3hiCFzd7XohZ5N9dAddWSxsB4EAABgb5QsAAA4icS0bI2aH6/tiemGrFZlH82IiVSrsKBSnwsAAKCioGQBAMAJrNh5Us8s2a7MnAJD1rNldY0f2EoBXqwHAQAAOBIlCwAA5VhuQaHe+Xav5m46asg83Fz0cq9m+suttVgPAgAAKAWULAAAlFPHzmZpVGy8Ek5kGLK6wb6aEROp5qGBJkwGAABQMVGyAABQDi3fkaznPk/QhVzjelCf1qF6e0BL+Xny2zwAAEBp4k9fAACUIzn5hXpj+W7N++W4IfN0c9FrfZprSNtw1oMAAABMQMkCAEA5cfjMBY2MjdeelPOGrH5VX80cFqUm1QNMmAwAAACS5OLIk58+fVrLly/XuHHjdO+99yo4OFgWi0UWi0UPPfSQXa6xdu3aonPe6F933nnnFc9Vp06dG/r6OnXq2GV2AABu1LL4E+o1fcMVC5YBUTX11agOFCwAAAAmc+idLNWqVXPk6UuscePGZo8AAMANuZhXqFe/2qWFWxMNmbe7q17v21yDbgk3YTIAAABcrtTWhWrVqqUmTZpo1apVdj1v27ZtlZCQcN3jRo0apXXr1kmSHnzwwWse27dvX7355ptXzT08PIo3JAAAJXDwdKZGzovXvlOZhqxRNT/NjIlSw2r+JkwGAACAK3FoyTJu3Di1bdtWbdu2VbVq1XT06FHVrVvXrtfw9fVVixYtrnlMenq6fv75Z0lSgwYNdMcdd1zz+KCgoOueEwAAR1ryW5JeXrZTF/MLDdmQW8L1ap/m8vZwNWEyAAAAXI1DS5bXXnvNkae/YQsXLlRubq4k6YEHHjB5GgAAri4rt0Avf7lTS+NOGDIfD1e93b+l+kXWNGEyAAAAXE+FeLvQZ599JkmyWCwaPny4ydMAAHBle0+e18h5cTp0JsuQNa0RoJkxkapX1c+EyQAAAHAjnL5kOXTokDZt2iRJ6tixI28GAgCUOTabTQt/TdQrX+1SboHVkA+7tZZe7tVMXu6sBwEAAJRlTl+y/HEXi3T9B97+4aefflJERIQOHTqkwsJCVatWTe3atVN0dLT69u0ri8VS4nmSkpKumaekpJT43ACA8udCboFeWJqgr7YnGzI/TzeNH9hSvVqFmjAZAAAAisupSxabzab//ve/kiRvb28NGjTohr7uyJEjl/z46NGjOnr0qBYtWqT27dtr4cKFqlmzZPvw4eG8ZhMA8LtdyRkaFRuvI6nG9aAWNQM0MyZKtav4mjAZAAAASsKpS5YNGzbo8OHDkqT+/fvL3//ar7n08PBQnz591L17d7Vo0UKBgYFKT0/X5s2b9eGHHyoxMVEbN25Ut27dtHnzZgUGBpbGLwMA4GRsNpv++8txvbF8t/KusB700B119HzPJvJ0Yz0IAACgPHHqkuU///lP0ecbeeDtli1bFBQUZPj5O++8U6NGjdL999+vVatWac+ePXrttdc0efLkYs+UmJh4zTwlJUXt2rUr9nkBAOXD+Zx8Pf95gr5JMK6H+nu56b37W+meFjVMmAwAAAA3y2lLlpycHC1evFiSFBoaqq5du173a65UsPzB399fixYtUr169ZSWlqZZs2Zp/Pjx8vDwKNZcYWFhxToeAOA8diSla1RsvI6nZRuy1uFBmhEdqfDKPiZMBgAAAHtwMXsAR/nqq6+Unp4uSRo2bJhcXW/+luvAwEANHTpUkpSVlaWtW7fe9DkBAM7PZrPp3xuPaOCHm65YsDzaoa4Wj7idggUAAKCcc9o7Wf78VqEbWRW6Uc2aNSv6fOLECbudFwDgnDKy8/XMku1atfuUIQv0dtekQa3VtVk1EyYDAACAvTllyXL69GmtXLlSkhQVFaUWLVrY7dw38/pmAEDFEn/8nEbFxutE+kVD1qZ2JU2LjlTNIG8TJgMAAIAjOGXJEhsbq4KCAkn2vYtFknbv3l30OTQ01K7nBgA4B6vVpjkbjmjCir0qsNoM+WOd6+up7o3k7uq0W7sAAAAVklOWLH+sCrm7uysmJsZu583IyNCCBQskST4+Prrlllvsdm4AgHM4l5WnpxZv1w97Txuyyr4emjS4tbo0DjFhMgAAADhamf9PaHPnzpXFYpHFYtGrr7563eN37dql+Ph4SdI999yjqlWr3tB1VqxYoYsXjbdz/+HChQsaPHiwzp49K0l65JFH5OnpeUPnBgBUDFuPpqnntPVXLFja1amsb8d0pGABAABwYg69k2XDhg06ePBg0Y9TU1OLPh88eFBz58695PiHHnropq/56aefFn1+8MEHb/jrxo8fr2HDhmnAgAHq0KGD6tevLz8/P2VkZGjTpk3617/+pePHj0uSGjdufEOFDwCgYrBabfrXT4c0adV+FV62HmSxSKO6NNDYuxvKjfUgAAAAp+bQkmX27NmXlB5/tnHjRm3cuPGSn7vZksVqtWrevHmSpEqVKql3797F+vq0tDTNnj1bs2fPvuoxnTt31rx581S5cuWbmhUA4BxSL+TqyUXb9dP+M4Ys2M9D7w+JVIeGwSZMBgAAgNLmVM9kWbNmjZKTkyVJQ4YMkYeHxw1/7cSJE7VmzRpt3rxZ+/btU2pqqtLT0+Xj46PQ0FDdeuutio6OVvfu3XnDEABAkvTz4bMaMz9epzNzDdkd9avo/SERCgnwMmEyAAAAmMFis9mMrz2AaZKSkhQeHi5JSkxMVFhYmMkTAQAuV2i1aeaPB/X+6v26/OVBLhZp7N2NNOquBnJ1oZQHAAAoqxzx/bdT3ckCAICjnc7M0RMLt2njwbOGLMTfU1OHRur2+lVMmAwAAABmo2QBAOAGbTyYqrELtin1gnE9qGPDYE0ZEqFgP948BwAAUFFRsgAAcB0FhVZNW3NA0388qMuXbF1dLHqyWyP9X+f6cmE9CAAAoEKjZAEA4BpOnc/R6Pnx2nIkzZBVD/DS9JhIta3DG+cAAABAyQIAwFWt3XdaTy7arrSsPEPWpXFVTRococq+N/4mOwAAADg3ShYAAC5TUGjVpO/368O1hwyZm4tF/7ynsR7tUI/1IAAAAFyCkgUAgD9JTr+oMfPjtfXYOUNWM8hb06Ij1aZ2JRMmAwAAQFlHyQIAwP+3Zs8pPbV4u9Kz8w1Zt2bV9N79rRTkw3oQAAAAroySBQBQ4eUVWPXeyr36eP0RQ+buatHz9zbVw+3ryGJhPQgAAABXR8kCAKjQEtOyNXp+vLYlphuy8MremhEdpdbhQaU+FwAAAMofShYAQIW1ctdJPbN4u87nFBiye1tU1/iBrRTo7W7CZAAAACiPKFkAABVObkGh3vl2r+ZuOmrIPFxd9HKvpvrLbbVZDwIAAECxULIAACqUY2ezNCo2XgknMgxZnSo+mhETpRY1A02YDAAAAOUdJQsAoML4ZkeKnvt8hzJzjetBvVuH6u3+LeTvxXoQAAAASoaSBQDg9HLyC/XmN7v135+PGzJPNxe92qe5hrYNZz0IAAAAN4WSBQDg1A6fuaCRsfHak3LekNWr6quZMVFqWiPAhMkAAADgbChZAABO68ttJ/TC0gRl5RUasgGRNfVGvxby9eS3QgAAANgHf7IEADidi3mFeu3rXVrwa6Ih83J30et9W2hQmzDWgwAAAGBXlCwAAKdy8HSmRs6L175TmYasUTU/zYyJUsNq/iZMBgAAAGdHyQIAcBpLfkvSy8t26mK+cT1o8C1heq1PC3l7uJowGQAAACoCShYAQLmXnVegl5ft0udxSYbMx8NVb/Vvof6RYSZMBgAAgIqEkgUAUK7tO5mpkbFxOnj6giFrUt1fM4dFqX5VPxMmAwAAQEVDyQIAKJdsNpsWbU3UuC93KbfAashjbq2lcb2aycud9SAAAACUDkoWAEC5cyG3QC99kaBl25INmZ+nm94Z0FK9W4eaMBkAAAAqMkoWAEC5sis5Q6Nj43U4NcuQtagZoBnRUaoT7GvCZAAAAKjoKFkAAOWCzWbTf385rjeW71beFdaDHry9tl64r6k83VgPAgAAgDkoWQAAZd75nHw9vzRB3+xIMWT+Xm56d2Ar3duyhgmTAQAAAP9DyQIAKNMSkjI0MjZOx9OyDVnrsEDNiIlSeGUfEyYDAAAALkXJAgAok2w2mz7ddFRvf7tXeYXG9aBHOtTVs/c0kYebiwnTAQAAAEaULACAMicjO1///Hy7Vu46ZcgCvd01cVBrdWtWzYTJAAAAgKujZAEAlCnxx89p9Px4JZ27aMiiagVpekyUagZ5mzAZAAAAcG2ULACAMsFms2nOhiMa/91eFVhthnxE53p6untjubuyHgQAAICyiZIFAGC6c1l5enrxdq3Ze9qQVfJx1+TBEerSJMSEyQAAAIAbR8kCADDVb8fSNDo2XskZOYasXZ3KmhodoRqBrAcBAACg7KNkAQCYwmq16aOfDmviqn0qvGw9yGKRRt7ZQI93bSg31oMAAABQTlCyAABK3dkLuXpy0Xat23/GkAX7eWjKkAh1bFjVhMkAAACAkqNkAQCUql8On9WYBfE6dT7XkN1er4qmDo1QSICXCZMBAAAAN4eSBQBQKgqtNn3w40FNWb1fl788yGKRxt7dUKPvaihXF4s5AwIAAAA3iZIFAOBwZzJz9fjCeG08eNaQVfX31NShEbqjfrAJkwEAAAD2Q8kCAHCojQdTNXbBNqVeMK4HdWwYrClDIhTs52nCZAAAAIB9UbIAAByi0GrT1DUHNP2HA7Jdth7kYpGe6t5Y/9e5vlxYDwIAAICToGQBANjdqfM5GrsgXj8fTjNk1QO8NC06Uu3qVjZhMgAAAMBxKFkAAHa1bv8ZPblwm85m5RmyOxtX1eTBEars62HCZAAAAIBjUbIAAOyioNCqyd/v1wdrDxkyVxeL/tmjsf7WsR7rQQAAAHBalCwAgJuWknFRY+bH69ej5wxZzSBvTYuOVJvalUyYDAAAACg9lCwAgJvyw95TemrRdp3LzjdkXZtW08RBrRTkw3oQAAAAnB8lCwCgRPILrXpv5T7N+umwIXN3tei5e5vqr+3ryGJhPQgAAAAVAyULAKDYks5la1RsvLYlphuysEremhkTpdbhQaU+FwAAAGAmShYAQLGs3HVSzyzervM5BYbsnubVNeH+Vgr0djdhMgAAAMBclCwAgBuSV2DVO9/t0b83HjVkHq4ueqlXUz1wW23WgwAAAFBhUbIAAK7r+NlsjZofpx1JGYasdhUfzYyJUouagSZMBgAAAJQdlCwAgGv6NiFFzy7Zocxc43pQr1Y19M6AlvL3Yj0IAAAAoGQBAFxRTn6h3vpmj/7z8zFD5uHmold7N1d0u3DWgwAAAID/j5IFAGBwJDVLI+fFaXfKeUNWr6qvZsZEqWmNABMmAwAAAMouShYAwCW+3HZCLyxNUFZeoSHrH1lTb/ZrIV9PfvsAAAAALsefkgEAkn5fD3rt612avyXRkHm5u+j1vi00qE0Y60EAAADAVVCyAAB08PQFjYqN096TmYasYYifZg6LUqNq/iZMBgAAAJQflCwAUMF9/luSXlq2UxfzjetBg9qE6bW+zeXjwW8XAAAAwPXwp2YAqKCy8wo07stdWvJbkiHz8XDVm/1aaEBUmAmTAQAAAOUTJQsAVED7T2Vq5Lw4HTh9wZA1qe6vGTFRahDiZ8JkAAAAQPlFyQIAFYjNZtOirYl65atdysm3GvKYW2tpXK9m8nJ3NWE6AAAAoHyjZAGACuJCboFe+iJBy7YlGzI/Tze9PaCl+rQONWEyAAAAwDm4OPLkp0+f1vLlyzVu3Djde++9Cg4OlsVikcVi0UMPPWS367z66qtF573eX2vXrr3u+VJTUzVu3Di1atVKAQEBCggIUKtWrTRu3DidPXvWbnMDQGnZnXxefaZvuGLB0jw0QF+P7kDBAgAAANwkh97JUq1aNUee3iF++eUX9evXTydPnrzk5xMSEpSQkKDZs2dr2bJlateunUkTAsCNs9lsit1yXK99vVt5Bcb1oOG319YLPZuyHgQAAADYQamtC9WqVUtNmjTRqlWrHHqdhISEa+Z169a9apaYmKjevXvrzJkzcnNz05NPPqlevXpJkpYvX67JkycrJSVFvXv31m+//aawMN66AaDsyszJ13NLE/TNjhRD5u/lpncHttK9LWuYMBkAAADgnBxasowbN05t27ZV27ZtVa1aNR09evSaJYc9tGjRosRf++KLL+rMmTOSpNjYWA0aNKgo69ixo9q0aaMhQ4bo9OnTeumllzR37tybHRcAHGLniQyNjI3TsbPZhqx1WKCmR0epVhUfEyYDAAAAnJdDn8ny2muvqVevXuVibejkyZOaN2+eJKlHjx6XFCx/GDx4sHr06CFJ+s9//mNYKQIAs9lsNs3deEQDPth0xYLlr+3ravFjd1CwAAAAAA7g0JKlPPnqq69ktf7+vIKHH374qsf98cBeq9Wqr776qjRGA4AbknExX//33zi9+vVu5RVe+vyVAC83zXqgjcb1biYPN/7VDwAAADgCf9L+/zZs2FD0uXPnzlc97s/Zxo0bHToTANyobYnpum/aeq3YZbzDLrJWkL4d21Hdm1c3YTIAAACg4ii1B9+Wlu7du2vbtm1KT09XUFCQmjVrpnvuuUcjRoxQpUqVrvp1u3fvliQFBgaqevWrfyNSo0YNBQQE6Pz589qzZ0+x50tKSrpmnpJifEAlAFyNzWbTnA1HNP67vSqw2gz5iM719HT3xnJ3pVMHAAAAHM3pSpbvv/++6POZM2e0bt06rVu3ThMmTNDcuXPVt2/fK37dH+XHjbwxKDw8XLt27VJiYmKx5wsPDy/21wDAlaRn5+npxdu1es9pQ1bJx12TB0eoS5MQEyYDAAAAKianKVlatmypfv36qV27dgoNDVV+fr727dunefPmadWqVUpPT9fAgQP19ddf69577zV8fWZmpiTJz8/vutfy9fWVJF24cMG+vwgAuEG/HUvT6Nh4JWfkGLK2dSppWnSkagR6mzAZAAAAUHE5Rcny+OOP69VXXzX8/K233qrhw4fro48+0mOPPabCwkI9+uijOnTokLy8vC45Nifn929UPDw8rns9T09PSdLFixeLPev17n5JSUlRu3btin1eABWD1WrTrPWH9d7KfSq8bD3IYpH+cWd9PdG1kdxYDwIAAABKnVOULEFBQdfMR4wYoV9//VVz5sxRcnKyPv/8cw0bNuySY7y8vJSdna28vLzrXi83N1eS5O1d/P9KfCPrSABwJWcv5Oqpxdu1dt8ZQ1bF10NThkSoU6OqJkwGAAAAQKpAbxcaMWJE0ed169YZcn9/f0k3tgKUlZUl6cZWiwDAHn45fFY9p62/YsFyW73K+m5sRwoWAAAAwGROcSfLjWjWrFnR5xMnThjysLAwnTp16rpv/5H+t/LDQ2wBOJrVatMHaw9q8vf7dfnLgywWacxdDTXm7oZydbGYMyAAAACAIhXmThaL5drfgPxRwmRkZOjkyZNXPS4lJUXnz5+XJDVt2tR+AwLAZc5k5urBf2/RxFXGgqWqv6fmPXKrnujWiIIFAAAAKCMqTMmye/fuos+hoaGGvEOHDkWfr7ROdKWsffv2dpoOAC616WCqek5br/UHUg1ZhwbB+nZMR93RINiEyQAAAABcTYUpWT766KOiz507dzbkffr0kYvL7387/v3vf1/1PHPnzpUkubi4qE+fPvYdEkCFV2i1afL3+zVszi86k5l7SeZikZ7u3kif/bWdqvp7mjQhAAAAgKsp8yXL3LlzZbFYZLFYrvia5oSEBB08ePCa55g1a5Zmz54tSapevbr69+9vOKZ69epFbxxauXKllixZYjhm8eLFWrlypSTpgQceUPXq1Yv7ywGAqzp1PkfDZv+saWsOyHbZelC1AE/N/9ttGnVXQ7mwHgQAAACUSQ598O2GDRsuKUBSU/932/vBgweL7gr5w0MPPVTsa/z222969NFH1aVLF917771q2bKlqlSpooKCAu3du1fz5s3TqlWrJEmurq6aNWuWfH19r3iut956SytWrNCZM2cUHR2trVu3qlevXpKk5cuXa9KkSZKkqlWr6s033yz2rABwNT/tP6MnFm7T2Szja+TvbFxV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", + "image/png": "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ggUL/H6Abt682fmFpGnTpo6zZ89mSNff9e9WObZs2eIxn8mTJzuPNXDgQLf0bdu2OYoVK2bSa9SoYS4UYkEo6lAv4PTCUPfRQMuiRYuyXM758+c7jh075jVdLzr1+FZZOnfu7IgVwa5D/aKzZs0an2X48ssvHfny5TN5FCxY0LF3716P+40YMcLniU/Lr/+Hprdu3doRK0LRDl0dOXLEWV/169cPuJy0w+BdHLz//vs+61jNmzfPuU+XLl0cqampGdIPHTrkqFKlijMYd/ToUY/50A7DU3/fffeds92VKVPGsWnTpiyX7ZtvvnH7HuTq1KlTjvbt2zvL8tBDDzliUTDqcN26dY6tW7f6zOOdd95x5lGuXDnH6dOnPe531113OfebOXOmW7re6AtXkCja26GrX375JVvnK9qhe9DC9f8dPHhwtvLhPJg19vU/Rq7z2muvme5Tum64ziCtq8W0bdvW/K5j/a0Z82vVqiVDhw7N1jH0ucOGDTNdzrTblh7v8ccfN8NMdJycThyXnJxs9tX9Mo+7s/Tp08dMvLR48WKzVLAODbrvvvukZMmSZoWNZ5991ox9jY+PlwkTJtjadT6W61DrSLsOWhNLPffcc2bG9V9++cXrc3R+iMxLvH344Ydm9RN9tGnTxiwRq+PXdWZwHWKh5bS6J+pz9f+KFcGuw507d5r8WrRoIZ07d5YGDRo460fH3H766afmoUF1NX78eDNszxNtozNmzDDD8oYPH27mIdHZ93WyxwULFsiYMWNMt139/dVXX5VYEYrPUleap7V0oX42Bop26NmiRYvMe9liDZtT+vcPPvggw/59+/bN1nGuvfZa0160/nR+Kx33PmTIENMNff369TJ69GjZvXu32VfPjXp+84R2GPr6067rupSptjvtuv7KK6+YeZF8nQt1vrLMK37pdyFd/aRr166my7t+F9IVL7Sb/pIlS+Ttt992vge0fY4aNUpiQSjqUD/j+vfvbz6bO3ToIPXr1zdDn7Wt6LwOU6ZMke+//97sq6up6Oeht7n9tK3qst06zPb222833291+W6lEyC/9NJLzsk29XtTLAjV52jmc5olK+dC2mFG+h623vt6ntIVBn19tumQH/0+kx2cB11kMSiDCDNnzhxnDxBPj1q1anmN/Ad691W7yt97771ej6GPfv36mf180ehmUlKS1zzy58/vmDhxoiPWBLMOXaPSgT48Ra9d7477euhd+Q0bNjhiTTDr0DXd10O7w+pdPH+0HDVr1vSaj/4f2jMm1oTis9TSvHlzs6/2EsxKN3TaYc5eF+uRkzuweve0Y8eOXvPWoQWB3MGlHYa2/vRvWT0Xap6Z6R3VQJ6r+3nrURiNQlGHgX6f0SEis2fP9lvmZcuWmd4u3vLRNN0nVoTyc1TpNUOFChXMviVLljS9MQJFO8woq59tVatW9ZgP58GsiY3uADFM72yvW7fO3LHUiRR1SS2NUNaoUUN69OhhJncrVKhQjo6hvUsmT54s3bp1M3cGVq5caSLcOlGcTmg0YMAAc1fBH91fI8wTJ040E11t3LjRTGik0c927drJ4MGD5fLLL5dYE4o6zCntvdSwYUNZunSpuVOud3+OHj1qllMrW7asNG3aVLp3727uFOodpFgTzDps0qSJfPzxx+a117ttuuKBtj+N8OsdAm0z2n70Dl/mHkieaJm095n2KJs5c6a5e6B3d3VFr44dO5p2qEt7x5pQtcOtW7fK8uXLzbbeASpXrlzAz6Udhp/eVdP3h57D9M7u2rVrTU9Bff1btWpl3ifa68wf2mFk0p6COom8tsHNmzebz2Ktf/1s0O8yzZs3N3eVtUdcLK5sEkzaLvS7qL722nYOHDhgJg/Xa8zExETTy1NXadMeFoGsFKV1pXfe9TN/9uzZpteoteiDLnerd+e1pwyCQ9uRLjGsevbs6ZxQNRC0w/DiPPinOI20/G8bAAAAAAAA2cQSzgAAAAAAADYgyAIAAAAAAGADgiwAAAAAAAA2IMgCAAAAAABgA4IsAAAAAAAANiDIAgAAAAAAYAOCLAAAAAAAADYgyAIAAAAAAGADgiwAAAAAAAA2IMgCAAAAAABgA4IsAAAAAAAANiDIAgAAAAAAYAOCLAAAAAAAADYgyAIAAAAAAGADgiwAAAAAAAA2IMgCAAAAAABgA4IsAAAAAAAANiDIAgAAAAAAYAOCLAAAAAAAADYgyAIAAAAAAGADgiwAAAAAAAA2IMgCAAAAAABgA4IsAAAAAAAANiDIAgAAAAAAIDn3/28Ws+g8BR/dAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -493,36 +493,27 @@ "text/markdown": [ "```json\n", "{ 'display_objects': [],\n", - " 'exception': ModuleNotFoundError(\"No module named 'pandas'\"),\n", + " 'exception': None,\n", " 'quiet': False,\n", - " 'result': result: None; err: No module named 'pandas'; info: ,\n", " 'stderr': '',\n", - " 'stdout': '\\x1b[0;31m---------------------------------------------------------------------------\\x1b[0m\\n'\n", - " '\\x1b[0;31mModuleNotFoundError\\x1b[0m '\n", - " 'Traceback (most recent call last)\\n'\n", - " 'File \\x1b[0;32m:1\\x1b[0m\\n'\n", - " '\\x1b[0;32m----> 1\\x1b[0m \\x1b[38;5;28;01mimport\\x1b[39;00m '\n", - " '\\x1b[38;5;21;01mpandas\\x1b[39;00m \\x1b[38;5;28;01mas\\x1b[39;00m '\n", - " '\\x1b[38;5;21;01mpd\\x1b[39;00m\\n'\n", - " '\\x1b[1;32m 2\\x1b[0m '\n", - " \"pd\\x1b[38;5;241m.\\x1b[39mDataFrame({\\x1b[38;5;124m'\\x1b[39m\\x1b[38;5;124mA\\x1b[39m\\x1b[38;5;124m'\\x1b[39m: \"\n", - " '[\\x1b[38;5;241m1\\x1b[39m, \\x1b[38;5;241m2\\x1b[39m], '\n", - " \"\\x1b[38;5;124m'\\x1b[39m\\x1b[38;5;124mB\\x1b[39m\\x1b[38;5;124m'\\x1b[39m: \"\n", - " '[\\x1b[38;5;241m3\\x1b[39m, \\x1b[38;5;241m4\\x1b[39m]})\\n'\n", - " '\\n'\n", - " \"\\x1b[0;31mModuleNotFoundError\\x1b[0m: No module named 'pandas'\\n\"}\n", + " 'stdout': ''}\n", "```" ], "text/plain": [ - "{'result': result: None; err: No module named 'pandas'; info: ,\n", - " 'stdout': \"\\x1b[0;31m---------------------------------------------------------------------------\\x1b[0m\\n\\x1b[0;31mModuleNotFoundError\\x1b[0m Traceback (most recent call last)\\nFile \\x1b[0;32m:1\\x1b[0m\\n\\x1b[0;32m----> 1\\x1b[0m \\x1b[38;5;28;01mimport\\x1b[39;00m \\x1b[38;5;21;01mpandas\\x1b[39;00m \\x1b[38;5;28;01mas\\x1b[39;00m \\x1b[38;5;21;01mpd\\x1b[39;00m\\n\\x1b[1;32m 2\\x1b[0m pd\\x1b[38;5;241m.\\x1b[39mDataFrame({\\x1b[38;5;124m'\\x1b[39m\\x1b[38;5;124mA\\x1b[39m\\x1b[38;5;124m'\\x1b[39m: [\\x1b[38;5;241m1\\x1b[39m, \\x1b[38;5;241m2\\x1b[39m], \\x1b[38;5;124m'\\x1b[39m\\x1b[38;5;124mB\\x1b[39m\\x1b[38;5;124m'\\x1b[39m: [\\x1b[38;5;241m3\\x1b[39m, \\x1b[38;5;241m4\\x1b[39m]})\\n\\n\\x1b[0;31mModuleNotFoundError\\x1b[0m: No module named 'pandas'\\n\",\n", + " 'stdout': '',\n", " 'stderr': '',\n", " 'display_objects': [],\n", - " 'exception': ModuleNotFoundError(\"No module named 'pandas'\"),\n", + " 'exception': None,\n", " 'quiet': False}" ] }, @@ -542,7 +533,58 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "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", + "
AB
013
124
\n", + "
" + ], + "text/plain": [ + " A B\n", + "0 1 3\n", + "1 2 4" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "o.result.result" ] @@ -561,19 +603,20 @@ " 'quiet': False,\n", " 'result': result: None; err: division by zero; info: ,\n", " 'stderr': '',\n", - " 'stdout': '\\x1b[0;31m---------------------------------------------------------------------------\\x1b[0m\\n'\n", - " '\\x1b[0;31mZeroDivisionError\\x1b[0m '\n", + " 'stdout': '\\x1b[31m---------------------------------------------------------------------------\\x1b[39m\\n'\n", + " '\\x1b[31mZeroDivisionError\\x1b[39m '\n", " 'Traceback (most recent call last)\\n'\n", - " 'File \\x1b[0;32m:1\\x1b[0m\\n'\n", - " '\\x1b[0;32m----> 1\\x1b[0m '\n", - " '\\x1b[38;5;241;43m1\\x1b[39;49m\\x1b[38;5;241;43m/\\x1b[39;49m\\x1b[38;5;241;43m0\\x1b[39;49m\\n'\n", + " '\\x1b[36mFile '\n", + " '\\x1b[39m\\x1b[32m:1\\x1b[39m\\n'\n", + " '\\x1b[32m----> \\x1b[39m\\x1b[32m1\\x1b[39m '\n", + " '\\x1b[32;43m1\\x1b[39;49m\\x1b[43m/\\x1b[49m\\x1b[32;43m0\\x1b[39;49m\\n'\n", " '\\n'\n", - " '\\x1b[0;31mZeroDivisionError\\x1b[0m: division by zero\\n'}\n", + " '\\x1b[31mZeroDivisionError\\x1b[39m: division by zero\\n'}\n", "```" ], "text/plain": [ "{'result': result: None; err: division by zero; info: ,\n", - " 'stdout': '\\x1b[0;31m---------------------------------------------------------------------------\\x1b[0m\\n\\x1b[0;31mZeroDivisionError\\x1b[0m Traceback (most recent call last)\\nFile \\x1b[0;32m:1\\x1b[0m\\n\\x1b[0;32m----> 1\\x1b[0m \\x1b[38;5;241;43m1\\x1b[39;49m\\x1b[38;5;241;43m/\\x1b[39;49m\\x1b[38;5;241;43m0\\x1b[39;49m\\n\\n\\x1b[0;31mZeroDivisionError\\x1b[0m: division by zero\\n',\n", + " 'stdout': '\\x1b[31m---------------------------------------------------------------------------\\x1b[39m\\n\\x1b[31mZeroDivisionError\\x1b[39m Traceback (most recent call last)\\n\\x1b[36mFile \\x1b[39m\\x1b[32m:1\\x1b[39m\\n\\x1b[32m----> \\x1b[39m\\x1b[32m1\\x1b[39m \\x1b[32;43m1\\x1b[39;49m\\x1b[43m/\\x1b[49m\\x1b[32;43m0\\x1b[39;49m\\n\\n\\x1b[31mZeroDivisionError\\x1b[39m: division by zero\\n',\n", " 'stderr': '',\n", " 'display_objects': [],\n", " 'exception': ZeroDivisionError('division by zero'),\n", @@ -736,8 +779,8 @@ "text/plain": [ "[{'name': 'stdout',\n", " 'output_type': 'stream',\n", - " 'text': ['CPU times: user 0 ns, sys: 0 ns, total: 0 ns\\n',\n", - " 'Wall time: 2.15 us\\n']},\n", + " 'text': ['CPU times: user 1 us, sys: 1 us, total: 2 us\\n',\n", + " 'Wall time: 3.1 us\\n']},\n", " {'data': {'text/plain': ['2']},\n", " 'metadata': {},\n", " 'output_type': 'execute_result',\n", @@ -818,17 +861,17 @@ "text/plain": [ "[{'name': 'stdout',\n", " 'output_type': 'stream',\n", - " 'text': ['\\x1b[0;31m---------------------------------------------------------------------------\\x1b[0m\\n',\n", - " '\\x1b[0;31mZeroDivisionError\\x1b[0m Traceback (most recent call last)\\n',\n", - " 'File \\x1b[0;32m:1\\x1b[0m\\n',\n", - " '\\x1b[0;32m----> 1\\x1b[0m \\x1b[38;5;241;43m1\\x1b[39;49m\\x1b[38;5;241;43m/\\x1b[39;49m\\x1b[38;5;241;43m0\\x1b[39;49m\\n',\n", + " 'text': ['\\x1b[31m---------------------------------------------------------------------------\\x1b[39m\\n',\n", + " '\\x1b[31mZeroDivisionError\\x1b[39m Traceback (most recent call last)\\n',\n", + " '\\x1b[36mFile \\x1b[39m\\x1b[32m:1\\x1b[39m\\n',\n", + " '\\x1b[32m----> \\x1b[39m\\x1b[32m1\\x1b[39m \\x1b[32;43m1\\x1b[39;49m\\x1b[43m/\\x1b[49m\\x1b[32;43m0\\x1b[39;49m\\n',\n", " '\\n',\n", - " '\\x1b[0;31mZeroDivisionError\\x1b[0m: division by zero\\n']},\n", + " '\\x1b[31mZeroDivisionError\\x1b[39m: division by zero\\n']},\n", " {'ename': 'ZeroDivisionError',\n", " 'evalue': 'division by zero',\n", " 'output_type': 'error',\n", " 'traceback': ['Traceback (most recent call last):\\n',\n", - " ' File \"/Users/jhoward/.venv/lib/python3.12/site-packages/IPython/core/interactiveshell.py\", line 3577, in run_code\\n exec(code_obj, self.user_global_ns, self.user_ns)\\n',\n", + " ' File \"/Users/iflath/.venv/lib/python3.12/site-packages/IPython/core/interactiveshell.py\", line 3546, in run_code\\n exec(code_obj, self.user_global_ns, self.user_ns)\\n',\n", " ' File \"\", line 1, in \\n 1/0\\n ~^~\\n',\n", " 'ZeroDivisionError: division by zero\\n']}]" ] @@ -854,7 +897,18 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_90745/2807404277.py:2: DeprecationWarning: color_scheme is deprecated as of IPython 9.0 and replaced by theme_name (which should be lowercase). As you passed a color_scheme value I will try to see if I have corresponding theme.\n", + " formatter = VerboseTB(color_scheme='Linux')\n", + "/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_90745/2807404277.py:2: DeprecationWarning: You passed both `theme_name` and `color_scheme` (deprecated) to VerboseTB constructor. `theme_name` will be ignored for the time being.\n", + " formatter = VerboseTB(color_scheme='Linux')\n" + ] + } + ], "source": [ "from IPython.core.ultratb import VerboseTB\n", "formatter = VerboseTB(color_scheme='Linux')" @@ -869,25 +923,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n", - "\u001b[1;31mRecursionError\u001b[0m Traceback (most recent call last)\n", - "Cell \u001b[1;32mIn[31], line 1\u001b[0m\n", - "\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m: f()\n", - "\u001b[0;32m 2\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n", - "\u001b[0;32m 3\u001b[0m ex \u001b[38;5;241m=\u001b[39m e\n", - "\n", - "Cell \u001b[1;32mIn[19], line 4\u001b[0m, in \u001b[0;36mf\u001b[1;34m()\u001b[0m\n", - "\u001b[1;32m----> 4\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mf\u001b[39m(): \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[91m---------------------------------------------------------------------------\u001b[39m\n", + "\u001b[91mNameError\u001b[39m Traceback (most recent call last)\n", + "\u001b[96mCell\u001b[39m\u001b[96m \u001b[39m\u001b[32mIn[33]\u001b[39m\u001b[32m, line 1\u001b[39m\n", + "\u001b[92m----> \u001b[39m\u001b[92m1\u001b[39m \u001b[38;5;81mtry\u001b[39m\u001b[38;5;15m:\u001b[39m\u001b[38;5;15m \u001b[39m\u001b[38;5;15mf\u001b[39m\u001b[38;5;15m(\u001b[39m\u001b[38;5;15m)\u001b[39m\n", + "\u001b[92m 2\u001b[39m \u001b[38;5;81mexcept\u001b[39m\u001b[38;5;15m \u001b[39m\u001b[38;5;148mException\u001b[39m\u001b[38;5;15m \u001b[39m\u001b[38;5;81mas\u001b[39m\u001b[38;5;15m \u001b[39m\u001b[38;5;15me\u001b[39m\u001b[38;5;15m:\u001b[39m\n", + "\u001b[92m 3\u001b[39m \u001b[38;5;15m \u001b[39m\u001b[38;5;15mex\u001b[39m\u001b[38;5;15m \u001b[39m\u001b[38;5;204m=\u001b[39m\u001b[38;5;15m \u001b[39m\u001b[38;5;15me\u001b[39m\n", "\n", - "Cell \u001b[1;32mIn[19], line 4\u001b[0m, in \u001b[0;36mf\u001b[1;34m()\u001b[0m\n", - "\u001b[1;32m----> 4\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mf\u001b[39m(): \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", - "\n", - " \u001b[1;31m[... skipping similar frames: f at line 4 (2974 times)]\u001b[0m\n", - "\n", - "Cell \u001b[1;32mIn[19], line 4\u001b[0m, in \u001b[0;36mf\u001b[1;34m()\u001b[0m\n", - "\u001b[1;32m----> 4\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mf\u001b[39m(): \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", - "\n", - "\u001b[1;31mRecursionError\u001b[0m: maximum recursion depth exceeded\n" + "\u001b[91mNameError\u001b[39m: name 'f' is not defined\n" ] } ], @@ -926,8 +969,8 @@ { "data": { "text/plain": [ - "['\\x1b[0;31m---------------------------------------------------------------------------\\x1b[0m\\n',\n", - " '\\x1b[0;31mTimeoutError\\x1b[0m Traceback (most recent call last)\\n']" + "['\\x1b[31m---------------------------------------------------------------------------\\x1b[39m\\n',\n", + " '\\x1b[31mTimeoutError\\x1b[39m Traceback (most recent call last)\\n']" ] }, "execution_count": null, @@ -1019,12 +1062,13 @@ "def _pre(s, xtra=''): return f\"
{escape(s)}
\"\n", "def _strip(s): return strip_ansi(escape(s))\n", "\n", - "def render_outputs(outputs, ansi_renderer=_strip, include_imgs=True, pygments=False):\n", + "def render_outputs(outputs, ansi_renderer=_strip, include_imgs=True, pygments=False, md_tfm=noop, html_tfm=noop):\n", " try:\n", " from mistletoe import markdown, HTMLRenderer\n", " from mistletoe.contrib.pygments_renderer import PygmentsRenderer\n", " except ImportError: return print('mistletoe not found -- please install it')\n", " renderer = PygmentsRenderer if pygments else HTMLRenderer\n", + " \n", " def render_output(out):\n", " otype = out['output_type']\n", " if otype == 'stream':\n", @@ -1035,9 +1079,9 @@ " elif otype in ('display_data','execute_result'):\n", " data = out['data']\n", " _g = lambda t: ''.join(data[t]) if t in data else None\n", - " if d := _g('text/html'): return d\n", + " if d := _g('text/html'): return html_tfm(d)\n", " if d := _g('application/javascript'): return f''\n", - " if d := _g('text/markdown'): return markdown(d, renderer=renderer)\n", + " if d := _g('text/markdown'): return md_tfm(markdown(d, renderer=renderer))\n", " if d := _g('text/latex'): return f'
${d}$
'\n", " if include_imgs:\n", " if d := _g('image/jpeg'): return f''\n", @@ -1058,16 +1102,12 @@ { "data": { "text/html": [ - "
---------------------------------------------------------------------------\n",
-       "TimeoutError                              Traceback (most recent call last)\n",
-       "File <ipython-input-1-a5c3817716b6>:1\n",
-       "----> 1 import time; time.sleep(1.1)\n",
-       "\n",
-       "Cell In[6], line 7, in run_cell.<locals>.handler(*args)\n",
-       "----> 7 def handler(*args): raise TimeoutError()\n",
+       "
0\n",
+       "1\n",
+       "
\n", + "

2

\n", "\n", - "TimeoutError: \n", - "
\n" + "

1

\n" ], "text/plain": [ "" @@ -1097,16 +1137,12 @@ { "data": { "text/html": [ - "
---------------------------------------------------------------------------\n",
-       "TimeoutError                              Traceback (most recent call last)\n",
-       "File <ipython-input-1-a5c3817716b6>:1\n",
-       "----> 1 import time; time.sleep(1.1)\n",
+       "
0\n",
+       "1\n",
+       "
\n", + "

2

\n", "\n", - "Cell In[6], line 7, in run_cell.<locals>.handler(*args)\n", - "----> 7 def handler(*args): raise TimeoutError()\n", - "\n", - "TimeoutError: \n", - "
\n" + "

1

\n" ], "text/plain": [ "" @@ -1136,7 +1172,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -1166,32 +1202,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[{'name': 'stdout',\n", - " 'output_type': 'stream',\n", - " 'text': ['\\x1b[0;31m---------------------------------------------------------------------------\\x1b[0m\\n',\n", - " '\\x1b[0;31mException\\x1b[0m Traceback (most recent call last)\\n',\n", - " 'File \\x1b[0;32m:1\\x1b[0m\\n',\n", - " '\\x1b[0;32m----> 1\\x1b[0m \\x1b[38;5;28;01mraise\\x1b[39;00m \\x1b[38;5;167;01mException\\x1b[39;00m(\\x1b[38;5;124m\"\\x1b[39m\\x1b[38;5;124mOops\\x1b[39m\\x1b[38;5;124m\"\\x1b[39m)\\n',\n", - " '\\n',\n", - " '\\x1b[0;31mException\\x1b[0m: Oops\\n']},\n", - " {'ename': 'Exception',\n", - " 'evalue': 'Oops',\n", - " 'output_type': 'error',\n", - " 'traceback': ['Traceback (most recent call last):\\n',\n", - " ' File \"/Users/jhoward/miniconda3/lib/python3.11/site-packages/IPython/core/interactiveshell.py\", line 3577, in run_code\\n exec(code_obj, self.user_global_ns, self.user_ns)\\n',\n", - " ' File \"\", line 1, in \\n raise Exception(\"Oops\")\\n',\n", - " 'Exception: Oops\\n']}]" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "o = s.run('raise Exception(\"Oops\")')\n", "o" @@ -1201,18 +1212,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Exception('Oops')" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "s.exc" ] @@ -1237,35 +1237,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "```json\n", - "{ 'cell_type': 'code',\n", - " 'execution_count': None,\n", - " 'id': 'b123d6d0',\n", - " 'idx_': 1,\n", - " 'metadata': {},\n", - " 'outputs': [],\n", - " 'source': 'print(1)\\n2'}\n", - "```" - ], - "text/plain": [ - "{'cell_type': 'code',\n", - " 'execution_count': None,\n", - " 'id': 'b123d6d0',\n", - " 'metadata': {},\n", - " 'outputs': [],\n", - " 'source': 'print(1)\\n2',\n", - " 'idx_': 1}" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "clean = Path('../tests/clean.ipynb')\n", "nb = read_nb(clean)\n", @@ -1277,22 +1249,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[{'name': 'stdout', 'output_type': 'stream', 'text': ['1\\n']},\n", - " {'data': {'text/plain': ['2']},\n", - " 'metadata': {},\n", - " 'output_type': 'execute_result',\n", - " 'execution_count': None}]" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "s.cell(c)\n", "c.outputs" @@ -1316,23 +1273,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "```json\n", - "{'text/plain': ['2']}\n", - "```" - ], - "text/plain": [ - "{'text/plain': ['2']}" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "find_output(c.outputs)['data']" ] @@ -1341,18 +1282,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['1\\n']" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "find_output(c.outputs, 'stream')['text']" ] @@ -1374,18 +1304,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'2'" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "out_exec(c.outputs)" ] @@ -1407,18 +1326,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'1'" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "out_stream(c.outputs)" ] @@ -1474,18 +1382,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "nb.cells[2].outputs" ] @@ -1494,22 +1391,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[{'data': {'text/plain': [''],\n", - " 'text/markdown': [\"This is *bold*. Here's a [link](https://www.fast.ai).\"]},\n", - " 'metadata': {},\n", - " 'output_type': 'execute_result',\n", - " 'execution_count': None}]" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "s.run_all(nb)\n", "nb.cells[2].outputs" @@ -1526,18 +1408,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'raise Exception(\"Oopsie!\")'" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "nb.cells[-1].source" ] @@ -1546,32 +1417,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[{'name': 'stdout',\n", - " 'output_type': 'stream',\n", - " 'text': ['\\x1b[0;31m---------------------------------------------------------------------------\\x1b[0m\\n',\n", - " '\\x1b[0;31mException\\x1b[0m Traceback (most recent call last)\\n',\n", - " 'File \\x1b[0;32m:1\\x1b[0m\\n',\n", - " '\\x1b[0;32m----> 1\\x1b[0m \\x1b[38;5;28;01mraise\\x1b[39;00m \\x1b[38;5;167;01mException\\x1b[39;00m(\\x1b[38;5;124m\"\\x1b[39m\\x1b[38;5;124mOopsie!\\x1b[39m\\x1b[38;5;124m\"\\x1b[39m)\\n',\n", - " '\\n',\n", - " '\\x1b[0;31mException\\x1b[0m: Oopsie!\\n']},\n", - " {'ename': 'Exception',\n", - " 'evalue': 'Oopsie!',\n", - " 'output_type': 'error',\n", - " 'traceback': ['Traceback (most recent call last):\\n',\n", - " ' File \"/Users/jhoward/miniconda3/lib/python3.11/site-packages/IPython/core/interactiveshell.py\", line 3577, in run_code\\n exec(code_obj, self.user_global_ns, self.user_ns)\\n',\n", - " ' File \"\", line 1, in \\n raise Exception(\"Oopsie!\")\\n',\n", - " 'Exception: Oopsie!\\n']}]" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "nb.cells[-1].outputs" ] @@ -1587,15 +1433,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "got exception: Oopsie!\n" - ] - } - ], + "outputs": [], "source": [ "try: s.run_all(nb, exc_stop=True)\n", "except Exception as e: print(f\"got exception: {e}\")" @@ -1629,18 +1467,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "nb.cells[-1].outputs" ] @@ -1649,22 +1476,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[{'name': 'stdout', 'output_type': 'stream', 'text': ['1\\n']},\n", - " {'data': {'text/plain': ['2']},\n", - " 'metadata': {},\n", - " 'output_type': 'execute_result',\n", - " 'execution_count': None}]" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "nb.cells[1].outputs" ] @@ -1715,15 +1527,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[{'name': 'stdout', 'output_type': 'stream', 'text': ['1\\n']}, {'data': {'text/plain': ['2']}, 'execution_count': None, 'metadata': {}, 'output_type': 'execute_result'}]\n" - ] - } - ], + "outputs": [], "source": [ "s = CaptureShell()\n", "try:\n", @@ -1772,20 +1576,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "AssertionError in ../tests/error.ipynb:\n", - "===========================================================================\n", - "\n", - "While Executing Cell #2:\n", - "['Traceback (most recent call last):\\n', ' File \"/var/folders/ss/34z569j921v58v8n1n_8z7h40000gn/T/ipykernel_37071/1421292703.py\", line 3, in \\n s.execute(\\'../tests/error.ipynb\\', exc_stop=True)\\n', ' File \"/var/folders/ss/34z569j921v58v8n1n_8z7h40000gn/T/ipykernel_37071/3609882568.py\", line 18, in execute\\n self.run_all(nb, exc_stop=exc_stop, preproc=preproc, postproc=postproc,\\n', ' File \"/var/folders/ss/34z569j921v58v8n1n_8z7h40000gn/T/ipykernel_37071/3068237356.py\", line 19, in run_all\\n if self.exc and exc_stop: raise self.exc from None\\n ^^^^^^^^^^^^^^^^^^^^^^^^\\n', ' File \"/Users/jhoward/miniconda3/lib/python3.11/site-packages/IPython/core/interactiveshell.py\", line 3577, in run_code\\n exec(code_obj, self.user_global_ns, self.user_ns)\\n', ' File \"\", line 3, in \\n foo()\\n', ' File \"/Users/jhoward/subs_aai/execnb/tests/err.py\", line 2, in foo\\n assert 13 == 98\\n ^^^^^^^^\\n', 'AssertionError\\n']\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "s = CaptureShell()\n", "try:\n", @@ -1931,16 +1722,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "- a=1\n", - "- print(a)\n" - ] - } - ], + "outputs": [], "source": [ "nb = read_nb('../tests/params.ipynb')\n", "for c in nb.cells: print('- ',c.source)" @@ -1957,31 +1739,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[{'cell_type': 'code',\n", - " 'execution_count': None,\n", - " 'id': 'a63ce885',\n", - " 'metadata': {},\n", - " 'outputs': [],\n", - " 'source': 'a=2',\n", - " 'idx_': 0},\n", - " {'cell_type': 'code',\n", - " 'execution_count': None,\n", - " 'id': 'ea528db5',\n", - " 'metadata': {},\n", - " 'outputs': [{'name': 'stdout', 'output_type': 'stream', 'text': ['2\\n']}],\n", - " 'source': 'print(a)',\n", - " 'idx_': 1}]" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "nb = read_nb('../tests/params.ipynb')\n", "s.run_all(nb, inject_code=\"a=2\")\n", @@ -2096,18 +1854,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['n=', 'pat=', 's=']" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "s = CaptureShell()\n", "cc = SmartCompleter(s)\n", @@ -2133,18 +1880,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['bit_count', 'bit_length']" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "s = CaptureShell()\n", "s.run('a=1')\n", @@ -2155,18 +1891,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['flags=', 'pattern=']" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "s.run('import re')\n", "s.complete('re.compile(')" From 9ff53ca69006282f1a27b62520851aa797ecc618 Mon Sep 17 00:00:00 2001 From: Isaac Flath Date: Sun, 2 Mar 2025 15:46:20 -0500 Subject: [PATCH 2/5] run all --- nbs/02_shell.ipynb | 379 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 336 insertions(+), 43 deletions(-) diff --git a/nbs/02_shell.ipynb b/nbs/02_shell.ipynb index e22611d..94e6804 100644 --- a/nbs/02_shell.ipynb +++ b/nbs/02_shell.ipynb @@ -779,8 +779,8 @@ "text/plain": [ "[{'name': 'stdout',\n", " 'output_type': 'stream',\n", - " 'text': ['CPU times: user 1 us, sys: 1 us, total: 2 us\\n',\n", - " 'Wall time: 3.1 us\\n']},\n", + " 'text': ['CPU times: user 1e+03 ns, sys: 0 ns, total: 1e+03 ns\\n',\n", + " 'Wall time: 1.91 us\\n']},\n", " {'data': {'text/plain': ['2']},\n", " 'metadata': {},\n", " 'output_type': 'execute_result',\n", @@ -897,18 +897,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_90745/2807404277.py:2: DeprecationWarning: color_scheme is deprecated as of IPython 9.0 and replaced by theme_name (which should be lowercase). As you passed a color_scheme value I will try to see if I have corresponding theme.\n", - " formatter = VerboseTB(color_scheme='Linux')\n", - "/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_90745/2807404277.py:2: DeprecationWarning: You passed both `theme_name` and `color_scheme` (deprecated) to VerboseTB constructor. `theme_name` will be ignored for the time being.\n", - " formatter = VerboseTB(color_scheme='Linux')\n" - ] - } - ], + "outputs": [], "source": [ "from IPython.core.ultratb import VerboseTB\n", "formatter = VerboseTB(color_scheme='Linux')" @@ -1202,7 +1191,32 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[{'name': 'stdout',\n", + " 'output_type': 'stream',\n", + " 'text': ['\\x1b[31m---------------------------------------------------------------------------\\x1b[39m\\n',\n", + " '\\x1b[31mException\\x1b[39m Traceback (most recent call last)\\n',\n", + " '\\x1b[36mFile \\x1b[39m\\x1b[32m:1\\x1b[39m\\n',\n", + " '\\x1b[32m----> \\x1b[39m\\x1b[32m1\\x1b[39m \\x1b[38;5;28;01mraise\\x1b[39;00m \\x1b[38;5;167;01mException\\x1b[39;00m(\\x1b[33m\"\\x1b[39m\\x1b[33mOops\\x1b[39m\\x1b[33m\"\\x1b[39m)\\n',\n", + " '\\n',\n", + " '\\x1b[31mException\\x1b[39m: Oops\\n']},\n", + " {'ename': 'Exception',\n", + " 'evalue': 'Oops',\n", + " 'output_type': 'error',\n", + " 'traceback': ['Traceback (most recent call last):\\n',\n", + " ' File \"/Users/iflath/.venv/lib/python3.12/site-packages/IPython/core/interactiveshell.py\", line 3546, in run_code\\n exec(code_obj, self.user_global_ns, self.user_ns)\\n',\n", + " ' File \"\", line 1, in \\n raise Exception(\"Oops\")\\n',\n", + " 'Exception: Oops\\n']}]" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "o = s.run('raise Exception(\"Oops\")')\n", "o" @@ -1212,7 +1226,18 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "Exception('Oops')" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "s.exc" ] @@ -1237,7 +1262,35 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{ 'cell_type': 'code',\n", + " 'execution_count': None,\n", + " 'id': 'b123d6d0',\n", + " 'idx_': 1,\n", + " 'metadata': {},\n", + " 'outputs': [],\n", + " 'source': 'print(1)\\n2'}\n", + "```" + ], + "text/plain": [ + "{'cell_type': 'code',\n", + " 'execution_count': None,\n", + " 'id': 'b123d6d0',\n", + " 'metadata': {},\n", + " 'outputs': [],\n", + " 'source': 'print(1)\\n2',\n", + " 'idx_': 1}" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "clean = Path('../tests/clean.ipynb')\n", "nb = read_nb(clean)\n", @@ -1249,7 +1302,22 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[{'name': 'stdout', 'output_type': 'stream', 'text': ['1\\n']},\n", + " {'data': {'text/plain': ['2']},\n", + " 'metadata': {},\n", + " 'output_type': 'execute_result',\n", + " 'execution_count': None}]" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "s.cell(c)\n", "c.outputs" @@ -1273,7 +1341,23 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{'text/plain': ['2']}\n", + "```" + ], + "text/plain": [ + "{'text/plain': ['2']}" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "find_output(c.outputs)['data']" ] @@ -1282,7 +1366,18 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "['1\\n']" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "find_output(c.outputs, 'stream')['text']" ] @@ -1304,7 +1399,18 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'2'" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "out_exec(c.outputs)" ] @@ -1326,7 +1432,18 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'1'" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "out_stream(c.outputs)" ] @@ -1382,7 +1499,18 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "nb.cells[2].outputs" ] @@ -1391,7 +1519,22 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[{'data': {'text/plain': [''],\n", + " 'text/markdown': [\"This is *bold*. Here's a [link](https://www.fast.ai).\"]},\n", + " 'metadata': {},\n", + " 'output_type': 'execute_result',\n", + " 'execution_count': None}]" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "s.run_all(nb)\n", "nb.cells[2].outputs" @@ -1408,7 +1551,18 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'raise Exception(\"Oopsie!\")'" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "nb.cells[-1].source" ] @@ -1417,7 +1571,32 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[{'name': 'stdout',\n", + " 'output_type': 'stream',\n", + " 'text': ['\\x1b[31m---------------------------------------------------------------------------\\x1b[39m\\n',\n", + " '\\x1b[31mException\\x1b[39m Traceback (most recent call last)\\n',\n", + " '\\x1b[36mFile \\x1b[39m\\x1b[32m:1\\x1b[39m\\n',\n", + " '\\x1b[32m----> \\x1b[39m\\x1b[32m1\\x1b[39m \\x1b[38;5;28;01mraise\\x1b[39;00m \\x1b[38;5;167;01mException\\x1b[39;00m(\\x1b[33m\"\\x1b[39m\\x1b[33mOopsie!\\x1b[39m\\x1b[33m\"\\x1b[39m)\\n',\n", + " '\\n',\n", + " '\\x1b[31mException\\x1b[39m: Oopsie!\\n']},\n", + " {'ename': 'Exception',\n", + " 'evalue': 'Oopsie!',\n", + " 'output_type': 'error',\n", + " 'traceback': ['Traceback (most recent call last):\\n',\n", + " ' File \"/Users/iflath/.venv/lib/python3.12/site-packages/IPython/core/interactiveshell.py\", line 3546, in run_code\\n exec(code_obj, self.user_global_ns, self.user_ns)\\n',\n", + " ' File \"\", line 1, in \\n raise Exception(\"Oopsie!\")\\n',\n", + " 'Exception: Oopsie!\\n']}]" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "nb.cells[-1].outputs" ] @@ -1433,7 +1612,15 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "got exception: Oopsie!\n" + ] + } + ], "source": [ "try: s.run_all(nb, exc_stop=True)\n", "except Exception as e: print(f\"got exception: {e}\")" @@ -1467,7 +1654,18 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "nb.cells[-1].outputs" ] @@ -1476,7 +1674,22 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[{'name': 'stdout', 'output_type': 'stream', 'text': ['1\\n']},\n", + " {'data': {'text/plain': ['2']},\n", + " 'metadata': {},\n", + " 'output_type': 'execute_result',\n", + " 'execution_count': None}]" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "nb.cells[1].outputs" ] @@ -1527,7 +1740,15 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[{'name': 'stdout', 'output_type': 'stream', 'text': ['1\\n']}, {'data': {'text/plain': ['2']}, 'execution_count': None, 'metadata': {}, 'output_type': 'execute_result'}]\n" + ] + } + ], "source": [ "s = CaptureShell()\n", "try:\n", @@ -1576,7 +1797,20 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "AssertionError in ../tests/error.ipynb:\n", + "===========================================================================\n", + "\n", + "While Executing Cell #2:\n", + "['Traceback (most recent call last):\\n', ' File \"/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_92005/1421292703.py\", line 3, in \\n s.execute(\\'../tests/error.ipynb\\', exc_stop=True)\\n', ' File \"/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_92005/3609882568.py\", line 18, in execute\\n self.run_all(nb, exc_stop=exc_stop, preproc=preproc, postproc=postproc,\\n', ' File \"/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_92005/3068237356.py\", line 19, in run_all\\n if self.exc and exc_stop: raise self.exc from None\\n ^^^^^^^^^^^^^^^^^^^^^^^^\\n', ' File \"/Users/iflath/.venv/lib/python3.12/site-packages/IPython/core/interactiveshell.py\", line 3546, in run_code\\n exec(code_obj, self.user_global_ns, self.user_ns)\\n', ' File \"\", line 3, in \\n foo()\\n', ' File \"/Users/iflath/git/fastai/execnb/tests/err.py\", line 2, in foo\\n assert 13 == 98\\n ^^^^^^^^\\n', 'AssertionError\\n']\n", + "\n" + ] + } + ], "source": [ "s = CaptureShell()\n", "try:\n", @@ -1722,7 +1956,16 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "- a=1\n", + "- print(a)\n" + ] + } + ], "source": [ "nb = read_nb('../tests/params.ipynb')\n", "for c in nb.cells: print('- ',c.source)" @@ -1739,7 +1982,31 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[{'cell_type': 'code',\n", + " 'execution_count': None,\n", + " 'id': 'a63ce885',\n", + " 'metadata': {},\n", + " 'outputs': [],\n", + " 'source': 'a=2',\n", + " 'idx_': 0},\n", + " {'cell_type': 'code',\n", + " 'execution_count': None,\n", + " 'id': 'ea528db5',\n", + " 'metadata': {},\n", + " 'outputs': [{'name': 'stdout', 'output_type': 'stream', 'text': ['2\\n']}],\n", + " 'source': 'print(a)',\n", + " 'idx_': 1}]" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "nb = read_nb('../tests/params.ipynb')\n", "s.run_all(nb, inject_code=\"a=2\")\n", @@ -1854,7 +2121,18 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "['n=', 'pat=', 's=']" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "s = CaptureShell()\n", "cc = SmartCompleter(s)\n", @@ -1880,7 +2158,18 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "['bit_count', 'bit_length']" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "s = CaptureShell()\n", "s.run('a=1')\n", @@ -1891,7 +2180,18 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "['flags=', 'pattern=']" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "s.run('import re')\n", "s.complete('re.compile(')" @@ -1913,13 +2213,6 @@ "#|hide\n", "import nbdev; nbdev.nbdev_export()" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { From 9627329e3a4179f8ce5b505e0b901253d47ec6b4 Mon Sep 17 00:00:00 2001 From: Isaac Flath Date: Sun, 2 Mar 2025 15:57:21 -0500 Subject: [PATCH 3/5] Ipython 9 fix --- nbs/02_shell.ipynb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nbs/02_shell.ipynb b/nbs/02_shell.ipynb index 94e6804..3d2b893 100644 --- a/nbs/02_shell.ipynb +++ b/nbs/02_shell.ipynb @@ -780,7 +780,7 @@ "[{'name': 'stdout',\n", " 'output_type': 'stream',\n", " 'text': ['CPU times: user 1e+03 ns, sys: 0 ns, total: 1e+03 ns\\n',\n", - " 'Wall time: 1.91 us\\n']},\n", + " 'Wall time: 2.15 us\\n']},\n", " {'data': {'text/plain': ['2']},\n", " 'metadata': {},\n", " 'output_type': 'execute_result',\n", @@ -900,7 +900,7 @@ "outputs": [], "source": [ "from IPython.core.ultratb import VerboseTB\n", - "formatter = VerboseTB(color_scheme='Linux')" + "formatter = VerboseTB(theme_name='linux')" ] }, { @@ -1806,7 +1806,7 @@ "===========================================================================\n", "\n", "While Executing Cell #2:\n", - "['Traceback (most recent call last):\\n', ' File \"/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_92005/1421292703.py\", line 3, in \\n s.execute(\\'../tests/error.ipynb\\', exc_stop=True)\\n', ' File \"/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_92005/3609882568.py\", line 18, in execute\\n self.run_all(nb, exc_stop=exc_stop, preproc=preproc, postproc=postproc,\\n', ' File \"/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_92005/3068237356.py\", line 19, in run_all\\n if self.exc and exc_stop: raise self.exc from None\\n ^^^^^^^^^^^^^^^^^^^^^^^^\\n', ' File \"/Users/iflath/.venv/lib/python3.12/site-packages/IPython/core/interactiveshell.py\", line 3546, in run_code\\n exec(code_obj, self.user_global_ns, self.user_ns)\\n', ' File \"\", line 3, in \\n foo()\\n', ' File \"/Users/iflath/git/fastai/execnb/tests/err.py\", line 2, in foo\\n assert 13 == 98\\n ^^^^^^^^\\n', 'AssertionError\\n']\n", + "['Traceback (most recent call last):\\n', ' File \"/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_96814/1421292703.py\", line 3, in \\n s.execute(\\'../tests/error.ipynb\\', exc_stop=True)\\n', ' File \"/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_96814/3609882568.py\", line 18, in execute\\n self.run_all(nb, exc_stop=exc_stop, preproc=preproc, postproc=postproc,\\n', ' File \"/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_96814/3068237356.py\", line 19, in run_all\\n if self.exc and exc_stop: raise self.exc from None\\n ^^^^^^^^^^^^^^^^^^^^^^^^\\n', ' File \"/Users/iflath/.venv/lib/python3.12/site-packages/IPython/core/interactiveshell.py\", line 3546, in run_code\\n exec(code_obj, self.user_global_ns, self.user_ns)\\n', ' File \"\", line 3, in \\n foo()\\n', ' File \"/Users/iflath/git/fastai/execnb/tests/err.py\", line 2, in foo\\n assert 13 == 98\\n ^^^^^^^^\\n', 'AssertionError\\n']\n", "\n" ] } From 51983c2363b80a94d3f77499a71b813e0d55dbfc Mon Sep 17 00:00:00 2001 From: Isaac Flath Date: Sun, 2 Mar 2025 15:59:36 -0500 Subject: [PATCH 4/5] Fix variable naming conflicts causing changed test behavior --- nbs/02_shell.ipynb | 46 +++++++++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/nbs/02_shell.ipynb b/nbs/02_shell.ipynb index 3d2b893..ce386cc 100644 --- a/nbs/02_shell.ipynb +++ b/nbs/02_shell.ipynb @@ -779,8 +779,8 @@ "text/plain": [ "[{'name': 'stdout',\n", " 'output_type': 'stream',\n", - " 'text': ['CPU times: user 1e+03 ns, sys: 0 ns, total: 1e+03 ns\\n',\n", - " 'Wall time: 2.15 us\\n']},\n", + " 'text': ['CPU times: user 2 us, sys: 0 ns, total: 2 us\\n',\n", + " 'Wall time: 1.91 us\\n']},\n", " {'data': {'text/plain': ['2']},\n", " 'metadata': {},\n", " 'output_type': 'execute_result',\n", @@ -998,8 +998,8 @@ } ], "source": [ - "o = s.run('from IPython.display import Markdown,display; print(0); print(1); display(Markdown(\"*2*\")); Markdown(\"*1*\")')\n", - "o" + "o1 = s.run('from IPython.display import Markdown,display; print(0); print(1); display(Markdown(\"*2*\")); Markdown(\"*1*\")')\n", + "o1" ] }, { @@ -1091,12 +1091,20 @@ { "data": { "text/html": [ - "
0\n",
-       "1\n",
-       "
\n", - "

2

\n", + "
---------------------------------------------------------------------------\n",
+       "TimeoutError                              Traceback (most recent call last)\n",
+       "File <ipython-input-1-a5c3817716b6>:1\n",
+       "----> 1 import time; time.sleep(1.1)\n",
+       "\n",
+       "Cell In[6], line 7, in run_cell.<locals>.handler(*args)\n",
+       "      5 if not timeout: timeout = self.timeout\n",
+       "      6 if timeout:\n",
+       "----> 7     def handler(*args): raise TimeoutError()\n",
+       "      8     signal.signal(signal.SIGALRM, handler)\n",
+       "      9     signal.alarm(timeout)\n",
        "\n",
-       "

1

\n" + "TimeoutError: \n", + "
\n" ], "text/plain": [ "" @@ -1126,12 +1134,20 @@ { "data": { "text/html": [ - "
0\n",
-       "1\n",
-       "
\n", - "

2

\n", + "
---------------------------------------------------------------------------\n",
+       "TimeoutError                              Traceback (most recent call last)\n",
+       "File <ipython-input-1-a5c3817716b6>:1\n",
+       "----> 1 import time; time.sleep(1.1)\n",
+       "\n",
+       "Cell In[6], line 7, in run_cell.<locals>.handler(*args)\n",
+       "      5 if not timeout: timeout = self.timeout\n",
+       "      6 if timeout:\n",
+       "----> 7     def handler(*args): raise TimeoutError()\n",
+       "      8     signal.signal(signal.SIGALRM, handler)\n",
+       "      9     signal.alarm(timeout)\n",
        "\n",
-       "

1

\n" + "TimeoutError: \n", + "
\n" ], "text/plain": [ "" @@ -1806,7 +1822,7 @@ "===========================================================================\n", "\n", "While Executing Cell #2:\n", - "['Traceback (most recent call last):\\n', ' File \"/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_96814/1421292703.py\", line 3, in \\n s.execute(\\'../tests/error.ipynb\\', exc_stop=True)\\n', ' File \"/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_96814/3609882568.py\", line 18, in execute\\n self.run_all(nb, exc_stop=exc_stop, preproc=preproc, postproc=postproc,\\n', ' File \"/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_96814/3068237356.py\", line 19, in run_all\\n if self.exc and exc_stop: raise self.exc from None\\n ^^^^^^^^^^^^^^^^^^^^^^^^\\n', ' File \"/Users/iflath/.venv/lib/python3.12/site-packages/IPython/core/interactiveshell.py\", line 3546, in run_code\\n exec(code_obj, self.user_global_ns, self.user_ns)\\n', ' File \"\", line 3, in \\n foo()\\n', ' File \"/Users/iflath/git/fastai/execnb/tests/err.py\", line 2, in foo\\n assert 13 == 98\\n ^^^^^^^^\\n', 'AssertionError\\n']\n", + "['Traceback (most recent call last):\\n', ' File \"/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_97767/1421292703.py\", line 3, in \\n s.execute(\\'../tests/error.ipynb\\', exc_stop=True)\\n', ' File \"/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_97767/3609882568.py\", line 18, in execute\\n self.run_all(nb, exc_stop=exc_stop, preproc=preproc, postproc=postproc,\\n', ' File \"/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_97767/3068237356.py\", line 19, in run_all\\n if self.exc and exc_stop: raise self.exc from None\\n ^^^^^^^^^^^^^^^^^^^^^^^^\\n', ' File \"/Users/iflath/.venv/lib/python3.12/site-packages/IPython/core/interactiveshell.py\", line 3546, in run_code\\n exec(code_obj, self.user_global_ns, self.user_ns)\\n', ' File \"\", line 3, in \\n foo()\\n', ' File \"/Users/iflath/git/fastai/execnb/tests/err.py\", line 2, in foo\\n assert 13 == 98\\n ^^^^^^^^\\n', 'AssertionError\\n']\n", "\n" ] } From c2cac3b98d0777651bb9ad143d453e3b16b7678d Mon Sep 17 00:00:00 2001 From: Isaac Flath Date: Sun, 2 Mar 2025 16:54:21 -0500 Subject: [PATCH 5/5] bug fixes and warnings --- execnb/shell.py | 3 ++- nbs/02_shell.ipynb | 30 ++++++++++++++++++++++++------ 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/execnb/shell.py b/execnb/shell.py index 5ba09d6..4e9d6ca 100644 --- a/execnb/shell.py +++ b/execnb/shell.py @@ -32,6 +32,7 @@ from .nbio import * from .nbio import _dict2obj + # %% auto 0 __all__ = ['CaptureShell', 'format_exc', 'render_outputs', 'find_output', 'out_exec', 'out_stream', 'out_error', 'exec_nb', 'SmartCompleter'] @@ -274,7 +275,7 @@ def prettytb(self:CaptureShell, fname = fname if fname else self._fname _fence = '='*75 cell_intro_str = f"While Executing Cell #{self._cell_idx}:" if self._cell_idx else "While Executing:" - cell_str = f"\n{cell_intro_str}\n{format_exc(self.exc)}" + cell_str = f"\n{cell_intro_str}\n{''.join(format_exc(self.exc))}" fname_str = f' in {fname}' if fname else '' return f"{type(self.exc).__name__}{fname_str}:\n{_fence}\n{cell_str}\n" diff --git a/nbs/02_shell.ipynb b/nbs/02_shell.ipynb index ce386cc..5f33005 100644 --- a/nbs/02_shell.ipynb +++ b/nbs/02_shell.ipynb @@ -53,7 +53,7 @@ "\n", "\n", "from execnb.nbio import *\n", - "from execnb.nbio import _dict2obj" + "from execnb.nbio import _dict2obj\n" ] }, { @@ -779,8 +779,8 @@ "text/plain": [ "[{'name': 'stdout',\n", " 'output_type': 'stream',\n", - " 'text': ['CPU times: user 2 us, sys: 0 ns, total: 2 us\\n',\n", - " 'Wall time: 1.91 us\\n']},\n", + " 'text': ['CPU times: user 1 us, sys: 1 us, total: 2 us\\n',\n", + " 'Wall time: 3.1 us\\n']},\n", " {'data': {'text/plain': ['2']},\n", " 'metadata': {},\n", " 'output_type': 'execute_result',\n", @@ -900,7 +900,9 @@ "outputs": [], "source": [ "from IPython.core.ultratb import VerboseTB\n", - "formatter = VerboseTB(theme_name='linux')" + "with warnings.catch_warnings():\n", + " warnings.filterwarnings(\"ignore\", category=DeprecationWarning)\n", + " formatter = VerboseTB(color_scheme='Linux')" ] }, { @@ -1797,7 +1799,7 @@ " fname = fname if fname else self._fname\n", " _fence = '='*75\n", " cell_intro_str = f\"While Executing Cell #{self._cell_idx}:\" if self._cell_idx else \"While Executing:\"\n", - " cell_str = f\"\\n{cell_intro_str}\\n{format_exc(self.exc)}\"\n", + " cell_str = f\"\\n{cell_intro_str}\\n{''.join(format_exc(self.exc))}\"\n", " fname_str = f' in {fname}' if fname else ''\n", " return f\"{type(self.exc).__name__}{fname_str}:\\n{_fence}\\n{cell_str}\\n\"" ] @@ -1822,7 +1824,23 @@ "===========================================================================\n", "\n", "While Executing Cell #2:\n", - "['Traceback (most recent call last):\\n', ' File \"/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_97767/1421292703.py\", line 3, in \\n s.execute(\\'../tests/error.ipynb\\', exc_stop=True)\\n', ' File \"/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_97767/3609882568.py\", line 18, in execute\\n self.run_all(nb, exc_stop=exc_stop, preproc=preproc, postproc=postproc,\\n', ' File \"/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_97767/3068237356.py\", line 19, in run_all\\n if self.exc and exc_stop: raise self.exc from None\\n ^^^^^^^^^^^^^^^^^^^^^^^^\\n', ' File \"/Users/iflath/.venv/lib/python3.12/site-packages/IPython/core/interactiveshell.py\", line 3546, in run_code\\n exec(code_obj, self.user_global_ns, self.user_ns)\\n', ' File \"\", line 3, in \\n foo()\\n', ' File \"/Users/iflath/git/fastai/execnb/tests/err.py\", line 2, in foo\\n assert 13 == 98\\n ^^^^^^^^\\n', 'AssertionError\\n']\n", + "Traceback (most recent call last):\n", + " File \"/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_8573/1421292703.py\", line 3, in \n", + " s.execute('../tests/error.ipynb', exc_stop=True)\n", + " File \"/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_8573/3609882568.py\", line 18, in execute\n", + " self.run_all(nb, exc_stop=exc_stop, preproc=preproc, postproc=postproc,\n", + " File \"/var/folders/_8/cpj54rdn0w1fjskv7g8bn2fr0000gn/T/ipykernel_8573/3068237356.py\", line 19, in run_all\n", + " if self.exc and exc_stop: raise self.exc from None\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"/Users/iflath/.venv/lib/python3.12/site-packages/IPython/core/interactiveshell.py\", line 3546, in run_code\n", + " exec(code_obj, self.user_global_ns, self.user_ns)\n", + " File \"\", line 3, in \n", + " foo()\n", + " File \"/Users/iflath/git/fastai/execnb/tests/err.py\", line 2, in foo\n", + " assert 13 == 98\n", + " ^^^^^^^^\n", + "AssertionError\n", + "\n", "\n" ] }