From faeb633ea62351d8edd6515dea431a9d7d8b88ad Mon Sep 17 00:00:00 2001 From: Phlya Date: Fri, 16 Aug 2024 16:57:50 +0200 Subject: [PATCH] increase max_move --- adjustText/__init__.py | 6 +- docs/source/Interactive_example.ipynb | 142 ++++---------------------- 2 files changed, 21 insertions(+), 127 deletions(-) diff --git a/adjustText/__init__.py b/adjustText/__init__.py index 1ad9723..10bfaab 100644 --- a/adjustText/__init__.py +++ b/adjustText/__init__.py @@ -444,7 +444,7 @@ def adjust_text( force_explode: tuple[float, float] | float = (0.1, 0.5), pull_threshold: float = 10, expand: tuple[float, float] = (1.05, 1.2), - max_move: tuple[int, int] | int | None = (5, 5), + max_move: tuple[int, int] | int | None = (10, 10), explode_radius: str | float = "auto", ensure_inside_axes: bool = True, expand_axes: bool = False, @@ -516,7 +516,7 @@ def adjust_text( expand : array_like, default (1.05, 1.2) a tuple/list/... with 2 multipliers (x, y) by which to expand the bounding box of texts when repelling them from each other. - max_move : tuple[int, int] | int | None, default (20, 20) + max_move : tuple[int, int] | int | None, default (10, 10) the maximum distance a text can be moved in one iteration in display units (in x and y directions); if a single integer or float is provided, it will be used for both x and y @@ -657,7 +657,7 @@ def adjust_text( (coords[:, 1] - coords[:, 0]).mean(), (coords[:, 3] - coords[:, 2]).mean() ) logger.debug(f"Auto-explode radius: {explode_radius}") - if explode_radius > 0 and np.all(np.asarray(force_explode) > 0): + if explode_radius > 0 and np.any(np.asarray(force_explode) > 0): explode_x, explode_y = explode( coords, static_coords, max_move=max_move, r=explode_radius ) diff --git a/docs/source/Interactive_example.ipynb b/docs/source/Interactive_example.ipynb index 532e674..4f7517a 100644 --- a/docs/source/Interactive_example.ipynb +++ b/docs/source/Interactive_example.ipynb @@ -31,7 +31,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 2, "metadata": { "editable": true, "slideshow": { @@ -40,77 +40,30 @@ "tags": [] }, "outputs": [ - { - "ename": "ValueError", - "evalue": "list.remove(x): x not in list", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/IPython/core/formatters.py:974\u001b[0m, in \u001b[0;36mMimeBundleFormatter.__call__\u001b[0;34m(self, obj, include, exclude)\u001b[0m\n\u001b[1;32m 971\u001b[0m method \u001b[38;5;241m=\u001b[39m get_real_method(obj, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprint_method)\n\u001b[1;32m 973\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m method \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 974\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m method(include\u001b[38;5;241m=\u001b[39minclude, exclude\u001b[38;5;241m=\u001b[39mexclude)\n\u001b[1;32m 975\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 976\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/ipympl/backend_nbagg.py:336\u001b[0m, in \u001b[0;36mCanvas._repr_mimebundle_\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 333\u001b[0m plaintext \u001b[38;5;241m=\u001b[39m plaintext[:\u001b[38;5;241m110\u001b[39m] \u001b[38;5;241m+\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m…\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 335\u001b[0m buf \u001b[38;5;241m=\u001b[39m io\u001b[38;5;241m.\u001b[39mBytesIO()\n\u001b[0;32m--> 336\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfigure\u001b[38;5;241m.\u001b[39msavefig(buf, \u001b[38;5;28mformat\u001b[39m\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpng\u001b[39m\u001b[38;5;124m'\u001b[39m, dpi\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfigure\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 338\u001b[0m base64_image \u001b[38;5;241m=\u001b[39m b64encode(buf\u001b[38;5;241m.\u001b[39mgetvalue())\u001b[38;5;241m.\u001b[39mdecode(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mutf-8\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 339\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_data_url \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdata:image/png;base64,\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mbase64_image\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/figure.py:3390\u001b[0m, in \u001b[0;36mFigure.savefig\u001b[0;34m(self, fname, transparent, **kwargs)\u001b[0m\n\u001b[1;32m 3388\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m ax \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39maxes:\n\u001b[1;32m 3389\u001b[0m _recursively_make_axes_transparent(stack, ax)\n\u001b[0;32m-> 3390\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcanvas\u001b[38;5;241m.\u001b[39mprint_figure(fname, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/backend_bases.py:2187\u001b[0m, in \u001b[0;36mFigureCanvasBase.print_figure\u001b[0;34m(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, pad_inches, bbox_extra_artists, backend, **kwargs)\u001b[0m\n\u001b[1;32m 2183\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 2184\u001b[0m \u001b[38;5;66;03m# _get_renderer may change the figure dpi (as vector formats\u001b[39;00m\n\u001b[1;32m 2185\u001b[0m \u001b[38;5;66;03m# force the figure dpi to 72), so we need to set it again here.\u001b[39;00m\n\u001b[1;32m 2186\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m cbook\u001b[38;5;241m.\u001b[39m_setattr_cm(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfigure, dpi\u001b[38;5;241m=\u001b[39mdpi):\n\u001b[0;32m-> 2187\u001b[0m result \u001b[38;5;241m=\u001b[39m print_method(\n\u001b[1;32m 2188\u001b[0m filename,\n\u001b[1;32m 2189\u001b[0m facecolor\u001b[38;5;241m=\u001b[39mfacecolor,\n\u001b[1;32m 2190\u001b[0m edgecolor\u001b[38;5;241m=\u001b[39medgecolor,\n\u001b[1;32m 2191\u001b[0m orientation\u001b[38;5;241m=\u001b[39morientation,\n\u001b[1;32m 2192\u001b[0m bbox_inches_restore\u001b[38;5;241m=\u001b[39m_bbox_inches_restore,\n\u001b[1;32m 2193\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 2194\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[1;32m 2195\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m bbox_inches \u001b[38;5;129;01mand\u001b[39;00m restore_bbox:\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/backend_bases.py:2043\u001b[0m, in \u001b[0;36mFigureCanvasBase._switch_canvas_and_return_print_method..\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 2039\u001b[0m optional_kws \u001b[38;5;241m=\u001b[39m { \u001b[38;5;66;03m# Passed by print_figure for other renderers.\u001b[39;00m\n\u001b[1;32m 2040\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdpi\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfacecolor\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124medgecolor\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124morientation\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 2041\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbbox_inches_restore\u001b[39m\u001b[38;5;124m\"\u001b[39m}\n\u001b[1;32m 2042\u001b[0m skip \u001b[38;5;241m=\u001b[39m optional_kws \u001b[38;5;241m-\u001b[39m {\u001b[38;5;241m*\u001b[39minspect\u001b[38;5;241m.\u001b[39msignature(meth)\u001b[38;5;241m.\u001b[39mparameters}\n\u001b[0;32m-> 2043\u001b[0m print_method \u001b[38;5;241m=\u001b[39m functools\u001b[38;5;241m.\u001b[39mwraps(meth)(\u001b[38;5;28;01mlambda\u001b[39;00m \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: meth(\n\u001b[1;32m 2044\u001b[0m \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m{k: v \u001b[38;5;28;01mfor\u001b[39;00m k, v \u001b[38;5;129;01min\u001b[39;00m kwargs\u001b[38;5;241m.\u001b[39mitems() \u001b[38;5;28;01mif\u001b[39;00m k \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m skip}))\n\u001b[1;32m 2045\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m: \u001b[38;5;66;03m# Let third-parties do as they see fit.\u001b[39;00m\n\u001b[1;32m 2046\u001b[0m print_method \u001b[38;5;241m=\u001b[39m meth\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/backends/backend_agg.py:497\u001b[0m, in \u001b[0;36mFigureCanvasAgg.print_png\u001b[0;34m(self, filename_or_obj, metadata, pil_kwargs)\u001b[0m\n\u001b[1;32m 450\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mprint_png\u001b[39m(\u001b[38;5;28mself\u001b[39m, filename_or_obj, \u001b[38;5;241m*\u001b[39m, metadata\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, pil_kwargs\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[1;32m 451\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 452\u001b[0m \u001b[38;5;124;03m Write the figure to a PNG file.\u001b[39;00m\n\u001b[1;32m 453\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 495\u001b[0m \u001b[38;5;124;03m *metadata*, including the default 'Software' key.\u001b[39;00m\n\u001b[1;32m 496\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 497\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_print_pil(filename_or_obj, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpng\u001b[39m\u001b[38;5;124m\"\u001b[39m, pil_kwargs, metadata)\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/backends/backend_agg.py:445\u001b[0m, in \u001b[0;36mFigureCanvasAgg._print_pil\u001b[0;34m(self, filename_or_obj, fmt, pil_kwargs, metadata)\u001b[0m\n\u001b[1;32m 440\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_print_pil\u001b[39m(\u001b[38;5;28mself\u001b[39m, filename_or_obj, fmt, pil_kwargs, metadata\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[1;32m 441\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 442\u001b[0m \u001b[38;5;124;03m Draw the canvas, then save it using `.image.imsave` (to which\u001b[39;00m\n\u001b[1;32m 443\u001b[0m \u001b[38;5;124;03m *pil_kwargs* and *metadata* are forwarded).\u001b[39;00m\n\u001b[1;32m 444\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 445\u001b[0m FigureCanvasAgg\u001b[38;5;241m.\u001b[39mdraw(\u001b[38;5;28mself\u001b[39m)\n\u001b[1;32m 446\u001b[0m mpl\u001b[38;5;241m.\u001b[39mimage\u001b[38;5;241m.\u001b[39mimsave(\n\u001b[1;32m 447\u001b[0m filename_or_obj, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbuffer_rgba(), \u001b[38;5;28mformat\u001b[39m\u001b[38;5;241m=\u001b[39mfmt, origin\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mupper\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 448\u001b[0m dpi\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfigure\u001b[38;5;241m.\u001b[39mdpi, metadata\u001b[38;5;241m=\u001b[39mmetadata, pil_kwargs\u001b[38;5;241m=\u001b[39mpil_kwargs)\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/backends/backend_agg.py:388\u001b[0m, in \u001b[0;36mFigureCanvasAgg.draw\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 385\u001b[0m \u001b[38;5;66;03m# Acquire a lock on the shared font cache.\u001b[39;00m\n\u001b[1;32m 386\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtoolbar\u001b[38;5;241m.\u001b[39m_wait_cursor_for_draw_cm() \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtoolbar\n\u001b[1;32m 387\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m nullcontext()):\n\u001b[0;32m--> 388\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfigure\u001b[38;5;241m.\u001b[39mdraw(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrenderer)\n\u001b[1;32m 389\u001b[0m \u001b[38;5;66;03m# A GUI class may be need to update a window using this draw, so\u001b[39;00m\n\u001b[1;32m 390\u001b[0m \u001b[38;5;66;03m# don't forget to call the superclass.\u001b[39;00m\n\u001b[1;32m 391\u001b[0m \u001b[38;5;28msuper\u001b[39m()\u001b[38;5;241m.\u001b[39mdraw()\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/artist.py:95\u001b[0m, in \u001b[0;36m_finalize_rasterization..draw_wrapper\u001b[0;34m(artist, renderer, *args, **kwargs)\u001b[0m\n\u001b[1;32m 93\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(draw)\n\u001b[1;32m 94\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdraw_wrapper\u001b[39m(artist, renderer, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m---> 95\u001b[0m result \u001b[38;5;241m=\u001b[39m draw(artist, renderer, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 96\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m renderer\u001b[38;5;241m.\u001b[39m_rasterizing:\n\u001b[1;32m 97\u001b[0m renderer\u001b[38;5;241m.\u001b[39mstop_rasterizing()\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/artist.py:72\u001b[0m, in \u001b[0;36mallow_rasterization..draw_wrapper\u001b[0;34m(artist, renderer)\u001b[0m\n\u001b[1;32m 69\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 70\u001b[0m renderer\u001b[38;5;241m.\u001b[39mstart_filter()\n\u001b[0;32m---> 72\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m draw(artist, renderer)\n\u001b[1;32m 73\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[1;32m 74\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/figure.py:3164\u001b[0m, in \u001b[0;36mFigure.draw\u001b[0;34m(self, renderer)\u001b[0m\n\u001b[1;32m 3161\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[1;32m 3162\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstale \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[0;32m-> 3164\u001b[0m DrawEvent(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdraw_event\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcanvas, renderer)\u001b[38;5;241m.\u001b[39m_process()\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/backend_bases.py:1271\u001b[0m, in \u001b[0;36mEvent._process\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1269\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_process\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 1270\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Process this event on ``self.canvas``, then unset ``guiEvent``.\"\"\"\u001b[39;00m\n\u001b[0;32m-> 1271\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcanvas\u001b[38;5;241m.\u001b[39mcallbacks\u001b[38;5;241m.\u001b[39mprocess(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mname, \u001b[38;5;28mself\u001b[39m)\n\u001b[1;32m 1272\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_guiEvent_deleted \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/cbook.py:303\u001b[0m, in \u001b[0;36mCallbackRegistry.process\u001b[0;34m(self, s, *args, **kwargs)\u001b[0m\n\u001b[1;32m 301\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 exc:\n\u001b[1;32m 302\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexception_handler \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 303\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexception_handler(exc)\n\u001b[1;32m 304\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 305\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/cbook.py:87\u001b[0m, in \u001b[0;36m_exception_printer\u001b[0;34m(exc)\u001b[0m\n\u001b[1;32m 85\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_exception_printer\u001b[39m(exc):\n\u001b[1;32m 86\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m _get_running_interactive_framework() \u001b[38;5;129;01min\u001b[39;00m [\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mheadless\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m]:\n\u001b[0;32m---> 87\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m exc\n\u001b[1;32m 88\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 89\u001b[0m traceback\u001b[38;5;241m.\u001b[39mprint_exc()\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/cbook.py:298\u001b[0m, in \u001b[0;36mCallbackRegistry.process\u001b[0;34m(self, s, *args, **kwargs)\u001b[0m\n\u001b[1;32m 296\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m func \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 297\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 298\u001b[0m func(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 299\u001b[0m \u001b[38;5;66;03m# this does not capture KeyboardInterrupt, SystemExit,\u001b[39;00m\n\u001b[1;32m 300\u001b[0m \u001b[38;5;66;03m# and GeneratorExit\u001b[39;00m\n\u001b[1;32m 301\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 exc:\n", - "Cell \u001b[0;32mIn[5], line 21\u001b[0m, in \u001b[0;36mplot_text\u001b[0;34m(event)\u001b[0m\n\u001b[1;32m 18\u001b[0m texts \u001b[38;5;241m=\u001b[39m [ax\u001b[38;5;241m.\u001b[39mtext(x[i], y[i], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mText\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39mi, ha\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcenter\u001b[39m\u001b[38;5;124m'\u001b[39m, va\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcenter\u001b[39m\u001b[38;5;124m'\u001b[39m, fontsize\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m20\u001b[39m) \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mlen\u001b[39m(x))]\n\u001b[1;32m 19\u001b[0m \u001b[38;5;66;03m# Use adjust_text to adjust the position of the texts to avoid overlap\u001b[39;00m\n\u001b[1;32m 20\u001b[0m \u001b[38;5;66;03m# Also connect the texts with the points using an arrow\u001b[39;00m\n\u001b[0;32m---> 21\u001b[0m texts, patches \u001b[38;5;241m=\u001b[39m adjust_text(texts, arrowprops\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mdict\u001b[39m(arrowstyle\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m-\u001b[39m\u001b[38;5;124m\"\u001b[39m, color\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m'\u001b[39m), ax\u001b[38;5;241m=\u001b[39max, min_arrow_len\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m, time_lim\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0.1\u001b[39m)\n\u001b[1;32m 22\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m texts, patches\n", - "File \u001b[0;32m~/Projects/adjustText/adjustText/__init__.py:518\u001b[0m, in \u001b[0;36madjust_text\u001b[0;34m(texts, x, y, objects, target_x, target_y, avoid_self, force_text, force_static, force_pull, force_explode, pull_threshold, expand, max_move, explode_radius, ensure_inside_axes, expand_axes, only_move, ax, min_arrow_len, time_lim, iter_lim, *args, **kwargs)\u001b[0m\n\u001b[1;32m 515\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m ax \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 516\u001b[0m ax \u001b[38;5;241m=\u001b[39m plt\u001b[38;5;241m.\u001b[39mgca()\n\u001b[0;32m--> 518\u001b[0m force_draw(ax)\n\u001b[1;32m 520\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 521\u001b[0m transform \u001b[38;5;241m=\u001b[39m texts[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mget_transform()\n", - "File \u001b[0;32m~/Projects/adjustText/adjustText/__init__.py:367\u001b[0m, in \u001b[0;36mforce_draw\u001b[0;34m(ax)\u001b[0m\n\u001b[1;32m 365\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforce_draw\u001b[39m(ax):\n\u001b[1;32m 366\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 367\u001b[0m ax\u001b[38;5;241m.\u001b[39mfigure\u001b[38;5;241m.\u001b[39mdraw_without_rendering()\n\u001b[1;32m 368\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mAttributeError\u001b[39;00m:\n\u001b[1;32m 369\u001b[0m logger\u001b[38;5;241m.\u001b[39mwarn(\n\u001b[1;32m 370\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Looks like you are using an old matplotlib version.\u001b[39;00m\n\u001b[1;32m 371\u001b[0m \u001b[38;5;124;03m In some cases adjust_text might fail, if possible update\u001b[39;00m\n\u001b[1;32m 372\u001b[0m \u001b[38;5;124;03m matplotlib to version >=3.5.0\"\"\"\u001b[39;00m\n\u001b[1;32m 373\u001b[0m )\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/figure.py:3173\u001b[0m, in \u001b[0;36mFigure.draw_without_rendering\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 3171\u001b[0m renderer \u001b[38;5;241m=\u001b[39m _get_renderer(\u001b[38;5;28mself\u001b[39m)\n\u001b[1;32m 3172\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m renderer\u001b[38;5;241m.\u001b[39m_draw_disabled():\n\u001b[0;32m-> 3173\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdraw(renderer)\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/artist.py:95\u001b[0m, in \u001b[0;36m_finalize_rasterization..draw_wrapper\u001b[0;34m(artist, renderer, *args, **kwargs)\u001b[0m\n\u001b[1;32m 93\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(draw)\n\u001b[1;32m 94\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdraw_wrapper\u001b[39m(artist, renderer, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m---> 95\u001b[0m result \u001b[38;5;241m=\u001b[39m draw(artist, renderer, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 96\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m renderer\u001b[38;5;241m.\u001b[39m_rasterizing:\n\u001b[1;32m 97\u001b[0m renderer\u001b[38;5;241m.\u001b[39mstop_rasterizing()\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/artist.py:72\u001b[0m, in \u001b[0;36mallow_rasterization..draw_wrapper\u001b[0;34m(artist, renderer)\u001b[0m\n\u001b[1;32m 69\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 70\u001b[0m renderer\u001b[38;5;241m.\u001b[39mstart_filter()\n\u001b[0;32m---> 72\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m draw(artist, renderer)\n\u001b[1;32m 73\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[1;32m 74\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/figure.py:3164\u001b[0m, in \u001b[0;36mFigure.draw\u001b[0;34m(self, renderer)\u001b[0m\n\u001b[1;32m 3161\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[1;32m 3162\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstale \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[0;32m-> 3164\u001b[0m DrawEvent(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdraw_event\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcanvas, renderer)\u001b[38;5;241m.\u001b[39m_process()\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/backend_bases.py:1271\u001b[0m, in \u001b[0;36mEvent._process\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1269\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_process\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 1270\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Process this event on ``self.canvas``, then unset ``guiEvent``.\"\"\"\u001b[39;00m\n\u001b[0;32m-> 1271\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcanvas\u001b[38;5;241m.\u001b[39mcallbacks\u001b[38;5;241m.\u001b[39mprocess(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mname, \u001b[38;5;28mself\u001b[39m)\n\u001b[1;32m 1272\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_guiEvent_deleted \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/cbook.py:303\u001b[0m, in \u001b[0;36mCallbackRegistry.process\u001b[0;34m(self, s, *args, **kwargs)\u001b[0m\n\u001b[1;32m 301\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 exc:\n\u001b[1;32m 302\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexception_handler \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 303\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexception_handler(exc)\n\u001b[1;32m 304\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 305\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/cbook.py:87\u001b[0m, in \u001b[0;36m_exception_printer\u001b[0;34m(exc)\u001b[0m\n\u001b[1;32m 85\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_exception_printer\u001b[39m(exc):\n\u001b[1;32m 86\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m _get_running_interactive_framework() \u001b[38;5;129;01min\u001b[39;00m [\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mheadless\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m]:\n\u001b[0;32m---> 87\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m exc\n\u001b[1;32m 88\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 89\u001b[0m traceback\u001b[38;5;241m.\u001b[39mprint_exc()\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/cbook.py:298\u001b[0m, in \u001b[0;36mCallbackRegistry.process\u001b[0;34m(self, s, *args, **kwargs)\u001b[0m\n\u001b[1;32m 296\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m func \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 297\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 298\u001b[0m func(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 299\u001b[0m \u001b[38;5;66;03m# this does not capture KeyboardInterrupt, SystemExit,\u001b[39;00m\n\u001b[1;32m 300\u001b[0m \u001b[38;5;66;03m# and GeneratorExit\u001b[39;00m\n\u001b[1;32m 301\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 exc:\n", - "Cell \u001b[0;32mIn[5], line 16\u001b[0m, in \u001b[0;36mplot_text\u001b[0;34m(event)\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m patches \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m patch \u001b[38;5;129;01min\u001b[39;00m patches:\n\u001b[0;32m---> 16\u001b[0m patch\u001b[38;5;241m.\u001b[39mremove()\n\u001b[1;32m 17\u001b[0m \u001b[38;5;66;03m# Create the texts \u001b[39;00m\n\u001b[1;32m 18\u001b[0m texts \u001b[38;5;241m=\u001b[39m [ax\u001b[38;5;241m.\u001b[39mtext(x[i], y[i], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mText\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39mi, ha\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcenter\u001b[39m\u001b[38;5;124m'\u001b[39m, va\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcenter\u001b[39m\u001b[38;5;124m'\u001b[39m, fontsize\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m20\u001b[39m) \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mlen\u001b[39m(x))]\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/artist.py:240\u001b[0m, in \u001b[0;36mArtist.remove\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 235\u001b[0m \u001b[38;5;66;03m# There is no method to set the callback. Instead, the parent should\u001b[39;00m\n\u001b[1;32m 236\u001b[0m \u001b[38;5;66;03m# set the _remove_method attribute directly. This would be a\u001b[39;00m\n\u001b[1;32m 237\u001b[0m \u001b[38;5;66;03m# protected attribute if Python supported that sort of thing. The\u001b[39;00m\n\u001b[1;32m 238\u001b[0m \u001b[38;5;66;03m# callback has one parameter, which is the child to be removed.\u001b[39;00m\n\u001b[1;32m 239\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_remove_method \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 240\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_remove_method(\u001b[38;5;28mself\u001b[39m)\n\u001b[1;32m 241\u001b[0m \u001b[38;5;66;03m# clear stale callback\u001b[39;00m\n\u001b[1;32m 242\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstale_callback \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", - "\u001b[0;31mValueError\u001b[0m: list.remove(x): x not in list" - ] - }, { "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "7c0154d3b164408dae7c41d28ce935b9", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABj40lEQVR4nO3de1xUdf4/8NeM3FGGBEUugrqlFrCZaCqmXTTJrGhT00RS1NKHa4olP2VVUDDZctc0ES+paC5om9l3/XpnWzU0zEB0aVFCAy/cRNOB4urw+f0xX846zgx3GJjzej4e5+HMOZ/zOe9znDpvP+d8Ph+FEEKAiIiIiGRDaeoAiIiIiKhtMQEkIiIikhkmgEREREQywwSQiIiISGaYABIRERHJDBNAIiIiIplhAkhEREQkM0wAiYiIiGSGCSARERGRzDABJCIiIpIZJoBEREREMsMEkIiIiEhmmAASERERyQwTQCIiIiKZYQJIREREJDNMAImIiIhkhgkgERERkcwwASQiIiKSGSaARERERDLDBJCIiIhIZpgAEhEREckME0AiIiIimWECSERERCQzTACJiIiIZIYJIBEREZHMMAEkIiIikhkmgEREREQywwSQiIiISGaYABIRERHJDBNAIiIiIplhAkhEREQkM0wAiYiIiGSGCSARERGRzDABJCIiIpIZJoBEREREMsMEkIiIiEhmmAASERERyQwTQCIiIiKZYQJIREREJDNMAImIiIhkhgkgERERkcwwASQiIiKSGSaARERERDLDBJCIiIhIZpgAEhEREckME0AiIiIimWECSERERCQzTACJiIiIZIYJIBEREZHMMAEkIiIikhkmgEREREQywwSQiIiISGaYABIRERHJDBNAIiIiIplhAkhEREQkM0wAiYiIiGTGwtQBdGQ1NTXIz89Hly5doFAoTB0OERERNYAQAqWlpXBzc4NSKc+2MCaAzZCfn4+ePXuaOgwiIiJqghs3bsDDw8PUYZgEE8Bm6NKlCwDtD8jBwcHE0bRf165dw+9///tm16NWq1sgmtZTWVmJ48ePIy0tDefPn8fNmzdx584d/Prrr+jSpQsee+wxPPfcc5g+fTrc3d1NHS4RkWyVlJSgZ8+e0n1cjhRCCGHqIDqqkpISqFQqqNVqJoB1yM3NRe/evZtdjyl+qg/GHh8fj+nTpxste+XKFTz2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XnhBbz9ra2tYW1u3zkkQERERtRGzaAG0srKCn58fkpKSdNYnJSXB399fr7yDgwMyMjJw4cIFaZkzZw769euHCxcuYMiQIW0VOhEREVGbM4sWQAB4//33ERwcjEGDBmHYsGHYunUrrl+/jjlz5gDQPr7Ny8vD559/DqVSCR8fH539u3fvDhsbG731RERERObGbBLASZMm4c6dO4iKikJBQQF8fHxw+PBheHl5AQAKCgrqHROQiIiISA7MZhxAU+A4QkRERB0P799m8g4gERERETUcE0AiIiIimWECSERERCQzTACJiIiIZIYJIBEREZHMMAEkIiIikhkmgEREREQywwSQiIiISGaYABIRERHJDBNAIiIiIplhAkhEREQkM0wAiYiIiGSGCSARERGRzDABJCIiIpIZJoBEREREMsMEkIiIiEhmmAASERERyQwTQCIiIiKZYQJIREREJDNMAImIiIhkhgkgERERkcwwASQiIiKSGSaARERERDLDBJCIiIhIZpgAEhEREckME0AiIiIimWECSERERCQzTACJiIiIZIYJIBEREZHMMAEkIiIikhkmgEREREQywwSQiIiISGaYABIRERHJDBNAIiIiIplhAkhEREQkM0wAiYiIiGSGCSARERGRzDABJCIiIpIZJoBEREREMsMEkIiIiEhmmAASERERyQwTQCIiIiKZYQJIREREJDNMAImIiIhkhgkgERERkcwwASQiIiKSGSaARERERDLDBJCIiIhIZpgAEhEREckME0AiIiIimWECSERERCQzTACJiIiIZIYJIBEREZHMMAEkIiIikhkmgEREREQywwSQiIiISGaYABIRERHJDBNAIiIiIplhAkhEREQkM0wAiYiIiGSGCSARERGRzDABJCIiIpIZJoBEREREMmNWCWBcXBx69+4NGxsb+Pn5ITk52WjZ/fv348UXX0S3bt3g4OCAYcOG4dixY20YLREREZFpmE0C+MUXXyA0NBRLly5Feno6RowYgbFjx+L69esGy3/77bd48cUXcfjwYaSlpeH555/Hq6++ivT09DaOnIiIiKhtKYQQwtRBtIQhQ4Zg4MCB2LRpk7Tu8ccfx+uvv46YmJgG1eHt7Y1JkyYhIiKiQeVLSkqgUqmgVqvh4ODQpLiJiIiobfH+bSYtgFVVVUhLS8OYMWN01o8ZMwbfffddg+qoqalBaWkpunbt2hohEhEREbUbFqYOoCXcvn0bGo0GLi4uOutdXFxQWFjYoDr++te/4rfffsObb75ptExlZSUqKyul7yUlJU0LmIiIiMiEzKIFsJZCodD5LoTQW2fInj17sGLFCnzxxRfo3r270XIxMTFQqVTS0rNnz2bHTERERNTWzCIBdHZ2RqdOnfRa+27duqXXKviwL774AjNnzsTf//53jB49us6y4eHhUKvV0nLjxo1mx05ERETU1swiAbSysoKfnx+SkpJ01iclJcHf39/ofnv27MH06dORmJiIcePG1Xsca2trODg46CxEREREHY1ZvAMIAO+//z6Cg4MxaNAgDBs2DFu3bsX169cxZ84cANrWu7y8PHz++ecAtMnf22+/jfXr12Po0KFS66GtrS1UKpXJzoOIiIiotZlNAjhp0iTcuXMHUVFRKCgogI+PDw4fPgwvLy8AQEFBgc6YgFu2bMH9+/fxxz/+EX/84x+l9dOmTcPOnTvbOnwiIiKiNmM24wCaAscRIiIi6nh4/zaTdwCJiIiIqOGYABIRERHJDBNAIiIiIplhAkhEREQkM0wAiYiIiGSGCSARERGRzDABlJnc3FwoFIpmLx1ZXFyczrlw3EciIpIbJoDUYTyYvDY1acvPz0d4eHjLBkZERNTBmM1MINQw7u7uyMjIMLo9ICAA+fn5cHNzw7Fjx9owsrYxb948lJSUoHv37rh165apwyEiIjIJJoAyY2lpCR8fnzq3N6RcR/SPf/wDX3/9Nbp164bFixfjgw8+MHVIREREJsEEkGShtLQU8+bNAwD85S9/QU1NjYkjIiIiMh2+A0iNlpWVhfnz58Pb2xsqlQq2trbo06cPQkJCcP78eYP7vPvuu9L7e4mJiUbrPnDggFQuKChIWq9QKNC7d2/pe0hIiF7HlBUrVhitNzw8HDdv3sRzzz2Ht99+u/EnTUREZEaYAFKjREdHw8fHBxs2bEBmZiZKSkpQUVGBnJwc7Ny5E4MGDUJkZKTefuvWrUPfvn0BAHPnzsX169f1yhQVFWHWrFkAAE9PT8TFxbVIzN9//z02bdoEKysrbNq0qUXqJCIi6sj4CJgaLCIiAtHR0QAAf39/zJgxA97e3rC0tERWVhZiY2ORkpKCqKgoODs747333pP2tbOzQ2JiIoYNGwa1Wo3g4GCcOHECSuV//w0yY8YMFBcXQ6lUYvfu3VCpVNK2jIwM5OfnIyAgAACwatUqBAYG6sTXvXt3vZirq6vxzjvvoKamBmFhYejfv3+LXhMiIqIOSVCTqdVqAUCo1WpTh9JivLy8BADh5eWls/7cuXNCqVQKAGLZsmUG99VoNGLq1KkCgOjSpYu4e/euXpnVq1cLAAKAiImJkdbHxsZK68PDww3Wn5OTI5WJj49v0Pl8+OGHAoDo06ePKCsrk9bHx8c3ui4iIjIP5nj/biw+AqYG+eijj1BTUwM/Pz9ERUUZLKNUKrFhwwZYW1ujtLQU+/bt0yuzePFijBw5EoC2RTEtLQ2XL19GWFgYAMDPzw8rV65skZivXLkitVhu3LgRtra2LVIvERFRR8cEkOpVXV2NI0eOAAAmTJhQ50wgjo6O8PX1BQCkpKToba99vOvo6Ijq6moEBQVhypQpKC8vh52dHRISEqShaJprzpw5qKiowMSJE/HSSy+1SJ1ERETmgAkg1SszMxNlZWUAtL1p65smLjU1FQBQWFhosD5PT0+pM0ZWVhbS09MBAGvXrkW/fv1aJOadO3fim2++gYODA9atW9cidRIREZkLJoBUr6bOmFGbNBoyefJkjBo1Svo+evRozJ49u0nHeVhxcTEWLVoEQNtr2c3NrUXqJSIiMhfsBUz10mg00uc1a9Y0+HGqvb290W0XLlxAcnKy9P3ixYsoKiqCi4tL0wP9P9u2bcOdO3fg6OgIJycn7N27V6/M999/r/PZxsYGAPDCCy8Y7E1MRERkTpgAUr2cnJykz9XV1c2eIq6iogJBQUGoqqqCvb09ysvLUVxcjJkzZ+LgwYPNDReVlZUAgHv37mHq1Kn1lt+8eTM2b94MADhx4gQTQCIiMnt8BEz18vb2hpWVFQDg+PHjza4vLCwMmZmZALS9c2t7AB86dKjOgZrr6nxCREREDccEkOplZ2cnva938uRJnDt3rsl1HT16FLGxsQCAiRMnYtq0aYiOjsbAgQMBAIsWLUJWVpbBfWsf0wL/beUzZMWKFRBC1LnEx8dL5ePj46X1zz33XJPPjYiIqKNgAkgNsnTpUqkFbvLkybh69arRshqNBomJibh586bO+tu3byMkJAQA4O7uji1btgAALC0tkZCQAFtbW5SVlSEoKAjV1dV69To5OUktkXUdn4iIiOrGBJAaZPjw4YiIiAAA5OTkYMCAAQgNDcXhw4eRnp6Os2fPYu/evViwYAE8PT0RFBSEe/fu6dQxa9YsFBYWQqFQYNeuXXjkkUekbf3798eaNWsAAGlpaVixYoVeDBYWFhg8eDAAYMeOHdizZw8uXbqEK1eu4MqVK/jll19a5+SJiIjMjammIDEH5jiVjLGp4Gp98sknwtraWppGzdhiZWUlsrOzpf22bt0qbVu4cKHR448dO1YAEEqlUiQnJ+ttP3jwoFAoFAaPGRkZ2eDz5FRwRETyZY7378ZiCyA1SmhoKK5evYrly5dj6NChcHZ2hoWFBezt7dG3b1+MHz8emzdvRl5eHh599FEAQHZ2NhYuXAgA8PX1RUxMjNH64+Pj0a1bN9TU1CA4OBglJSU628eNG4dvvvkGgYGBcHNza7FZQ4iIiOREIYQQpg6ioyopKYFKpYJarYaDg4OpwyEiIqIG4P2b7wASERERyQ4TQCIiIiKZYQJIREREJDOcCo6IOjSNBkhOBgoKAFdXYMQIoFMnU0dFRNS+MQEkog5r/35gwQLgwTHHPTyA9euBN94wXVxERO0dHwFT46nVwL//beooSOb27wcmTNBN/gAgL0+7fv9+08RFRNQRMAGkxsnOBp5+Gpg61dSRkIxpNNqWP0ODWNWuCw3VliMiIn1MAKnhTp0Chg4FFAo2r5BJJSfrt/w9SAjgxg1tOSIi0scEkBpm1y7gxReBAQOAlBTg/2b5IDKFgoKWLUdEJDdMAEmHRgOcPAns2aP9U1NdAyxdCkyfDkybBhw9CjzyiImjJLlzdalpWDnXVg6EiKiDYi9gkhjsUWn7C9aXX8Yba9YAH3ygffxLZGIjnlXCw0Pb4cPQe4AKhbY38IgRbR8bEVFHwBZAAlBHj8ryrpiAfdjfZxGTP2o3OnXSDvUC6P8sa7+vW8fxAImIjGECSHX3qIQSUCjYo7Kdys3NhUKhaPbSEfTq1Usn5vHjFRBCuwD/XZTKXti3j+MAEhHVhQkgsUclmcSDyevOnTtbrF4PDyZ/RET14TuAxB6VHZi7uzsyMjKMbg8ICEB+fj7c3Nxw7NixNoys9QQGBmLVqlVGt1tZWbVhNEREHRMTQGpwT8mm9KjMzc1F7969G7/jQ4Sh59Pt2G+//YadO3di//79uHz5Mm7fvg1HR0e4u7tj+PDhePXVVzFmzJhmH8fS0hI+Pj51bm9IuY7E0dHRbM6FiMhUmAASRowAe1Qa8GDyGh8fj+nTpzdovxMnTiAkJATXrl3TWX/r1i3cunUL6enpSE5ObpEEkIiIqCn4DiC1ao/K2keUxhY3NzcAgJubW53lOop//vOfePnll3Ht2jV06dIFH3zwAQ4fPoy0tDQcPXoUmzdvRmBgIGxtbU0dqiQrKwvz58+Ht7c3VCoVbG1t0adPH4SEhOD8+fMG93n33Xel9/cSExON1n3gwAGpXFBQkLReoVDotAyHhITodUxZsWJFi50jERE9RFCTqdVqAUCo1WpTh9IivvpKCA8PIbTtgNqlZ0/t+tbi5eUlAAgvL6/WO0gT5eTkCAACgIiPj6+3/K1bt4STk5MAIB5//HFx48YNo2UrKytbMFLj6ru+UVFRwsLCQjrPhxeFQiEiIiL09vvtt99E3759BQChUqnEtWvX9MoUFhaKbt26CQDC09NT3Lt3T9pm7HgPLpGRkQbPZdq0ac25JEREZnf/bgo+AibJG28AgYHa3r4FBdp3/kaM4FhqDRUeHo47d+7A2toaX3/9NTw8PIyWbQ8dFSIiIhAdHQ0A8Pf3x4wZM+Dt7Q1LS0tkZWUhNjYWKSkpiIqKgrOzM9577z1pXzs7OyQmJmLYsGFQq9UIDg7GiRMnoFT+96HCjBkzUFxcDKVSid27d0OlUknbMjIykJ+fj4CAAADAqlWrEBgYqBNf9+7dDcb97bff4ve//z2uXr0KIQRcXFzw9NNP46233kJgYGCHGdaGiMikTJ2BdmT8F0TzNaQF8PLly+K9994TTzzxhHBwcBA2Njaid+/eYvr06SItLc3gPu+8847UkpSQkGC07n/84x9SuSlTpkjr0cgWqrt37wpbW1sBQEyfPr3R16G1GLu+586dE0qlUgAQy5YtM7ivRqMRU6dOFQBEly5dxN27d/XKrF69WroeMTEx0vrY2FhpfXh4uMH6G9vCWnsudS3Dhw8XN2/erLcuIpI33r+FYALYDPwBNZ+5PKL8/PPPpfWHDh2S1peUlIiffvpJFBUVNf0iNYOx6zt+/HgBQPj5+Ymamhqj+9+9e1dYW1sLAOKzzz7T267RaMTIkSMFAGFpaSlSU1PFpUuXpGTYz89PVFVVGay7sQngY489Jl577TURGxsrTp48KdLT08WJEyfE6tWrRc+ePaW6Hn/8cZ2/SyKih/H+zQSwWfgDar66EsDly5dLN3V/f3+xbds2kZKSIlJTU0VCQoIYNmyYtP3TTz/V2z81NVVYWloKAGLkyJFCo9HobH/55ZcFAKFUKsWpU6d0tmVkZIhjx45J9a9atUpkZGToLA8mdXPnzpXK/vLLL+LIkSPC399fJ2F0dXUVCxcuFMXFxS1z8RrA0PWtqqoSdnZ2eq12xgwaNEgAEDNmzDC4/dq1a8LR0VEAEP369RNPPfWUACDs7OzE5cuXjdbb2ATQUAtkrZKSEjFmzBipvoULF9ZbHxHJF+/fTACbhT+g5jOXR5TPPfec1Nr48ccf19ly6OHhIf7zn//UWV9LMXR9L1y40KAWzoeXl19+2ehx9uzZo1d+8+bNdcbW2ASwPvfu3ZM64djb27dZRxsi6nh4/xaCw8BQu/TRRx+hpqYGfn5+iIqKMlhGqVRiw4YNsLa2RmlpKfbt26dXZvHixRg5ciQAbaeHtLQ0XL58GWFhYQAAPz8/rFy5stnx/vLLLwCA8vJyLF68GNbW1vjzn/+MmzdvorKyEj/++CPefvttAMDNmzcRGBiIX3/9tdnHbYpbt241ab+ysjKj2yZPnoxRo0ZJ30ePHo3Zs2c36ThNpVKpMHnyZADagbhTU1Pb9PhERB0JewFTu1NdXY0jR44AACZMmFBnr05HR0f4+voiNTUVKSkpmDVrls722h6oTz75JO7du4egoCDY2dmhvLwcdnZ2SEhIkGbLaI7ffvsNAFBVVQUA2L17NyZOnCht9/b2xq5du2BjY4OtW7fiypUr2Lx5MxYtWtTsYzeWRqORPq9ZswYvvfRSg/azt7c3uu3ChQtIfmCy6IsXL6KoqAguLi5ND7QJnnjiCelzXl5emx6biKgjYQJI7U5mZqbU2hQeHo7w8PAG7VdYWGhwvaenJzZt2oS33noLWVlZ0vq1a9eiX79+zQ8YgI2NjfR56NChOsnfg1avXo1du3ahsrISe/bsMUkC6OTkJH2urq5u9rRqFRUVCAoKQlVVFezt7VFeXo7i4mLMnDkTBw8ebG64jSI62JSBRESmwkfA1GQaDXDyJLBnj/bPBxqWmqUjPqLs0qWL9Hns2LFGyzk5OWHQoEEAtK1k1dXVLRZDQ3l7e0vjEB4/frzZ9YWFhSEzMxMAsHHjRunx+qFDh7Bp0yaj+7XGeH21cQCQZpkhIiJ9bAGkJtm/H1iwALh587/rPDy0U8q98Ubz6u6Ijyh79uyJs2fPAkCdA0DXlgW053nnzh306NGjRWJoKDs7O4waNQpHjhzByZMnce7cOTz99NNNquvo0aOIjY0FAEycOBHTpk1DdXU1kpKScP78eSxatAgvvPCCwZbWB1tNKysrm3YyD1Cr1fjiiy8AaM+xNtEmIiJ9bAGkRtu/H5gwQTf5A4C8PO36/fubV7+hR5QNWR6cW/ZBDz+iVCqV0iPKluLt7S191tTTFPrgdgsL0/wbbOnSpVIL3OTJk3H16lWjZTUaDRITE3Hzob/w27dvIyQkBIB2zuctW7YAACwtLZGQkABbW1uUlZUhKCjIYEunk5OT1BJZ1/EBbaJZXl5udHtpaSnefPNN3LlzBwAwc+ZMWFtb11knEZGcMQGkRtFotC1/hl61ql0XGtq8x8Ed8RFlbU9joP5kpna7ra0tunbt2uBjtKThw4cjIiICAJCTk4MBAwYgNDQUhw8fRnp6Os6ePYu9e/diwYIF8PT0RFBQEO7du6dTx6xZs1BYWAiFQoFdu3bhkUcekbb1798fa9asAQCkpaVhxYoVejFYWFhg8ODBAIAdO3Zgz549uHTpEq5cuYIrV65IPasB4M9//jM8PDzwzjvvYNeuXTh9+jQuXLiAkydPIiYmBt7e3tJvpV+/fgaPR0REDzD1ODQdmRzHETpxQghtqlf3cuJEw+ozNg7g2LFjpTHivv/++ybHe+TIEameiRMnCiG0AyEPHDiw3sGKCwsLGzym3f3796VZRfr162d0do2ff/5ZGt9w1KhRTT6vhqpvppVPPvlEmumjrsXKykpkZ2dL+23durVBgy7X/j0qlUqRnJyst/3gwYNCoVDUO9PKs88+26CxCkeOHMmp4IioXnK8fz+MLYDUKAUFLVvOmI72iLJTp05Sj96srCx89NFHemWqq6sxd+5c1NTUAADmzJlTZ51tITQ0FFevXsXy5csxdOhQODs7w8LCAvb29ujbty/Gjx+PzZs3Iy8vD48++igAIDs7GwsXLgQA+Pr6IiYmxmj98fHx6NatG2pqahAcHIySkhKd7ePGjcM333yDwMBAuLm5GR2S5y9/+Qv+/Oc/IzAwEP3795fidHBwQP/+/TFt2jQcPXoUJ0+ehLu7ewtdHSIiM2bqDLQjk+O/INqqBVAIISIjI6WWnc6dO4sFCxaIQ4cOifPnz4uUlBSxZ88eMX/+fOHm5iYAiIyMDJ39AwMDBaCdL/if//ynXv0Pzgbypz/9yWB8w4cPFwCEk5OTSExMFJmZmSI7O1tkZ2eLO3fu6JQtLy+XWhYBiKlTp4qjR4+KtLQ08cUXX4ghQ4bozKpR1xy8RETUeuR4/34YE8BmkOMP6P59ITw8hFAoDCd+CoUQPXtqyzWEuTyirJWfny/8/PzqnVKtpKSkYReIiIhanBzv3w8zq0fAcXFx6N27N2xsbODn56cz7Ichp06dgp+fH2xsbNCnTx9s3ry5jSLtuDp10g71AgAP95Go/b5unbZcS+gojyhrubq64uzZs9i8eTOeffZZdOvWDZaWlujRowdee+017N+/H4cOHdIZN5CIiKitKYQwj6Hzv/jiCwQHByMuLg7Dhw/Hli1bsG3bNmRmZsLT01OvfE5ODnx8fPDOO+9g9uzZOHPmDObOnYs9e/Zg/PjxDTpmSUkJVCoV1Go1HBwcWvqU2jVD4wD27KlN/po7DiAREVFrkvP9u5bZJIBDhgzBwIEDdYb1ePzxx/H6668bbAFavHgxDhw4gEuXLknr5syZg4sXLyIlJaVBx5T7D0ijAZKTtR0+XF2BESNaruWPiIiotcj9/g2YyUwgVVVVSEtLw5IlS3TWjxkzBt99953BfVJSUjBmzBiddQEBAdi+fTuqq6vrfdRH2mTvuedMHQURERE1llkkgLdv34ZGo9Gb1svFxQWFhYUG9yksLDRY/v79+7h9+zZcXV319qmsrNSZsurh98WIiIiIOgKz6gTy8MwNQog6Z3MwVN7Q+loxMTFQqVTSUjunKxEREVFHYhYJoLOzMzp16qTX2nfr1i29Vr5aPXr0MFjewsJCZy7aB4WHh0OtVkvLjRs3WuYEiIiIiNqQWSSAVlZW8PPzQ1JSks76pKQk+Pv7G9xn2LBheuWPHz+OQYMGGX3/z9raGg4ODjoLERERUUdjFgkgALz//vvYtm0bduzYgUuXLmHhwoW4fv26NN1WeHg43n77ban8nDlzcO3aNbz//vu4dOkSduzYge3bt0vTeRERERGZK7PoBAIAkyZNwp07dxAVFYWCggL4+Pjg8OHD8PLyAgAUFBTg+vXrUvnevXvj8OHDWLhwITZu3Ag3Nzd8+umnDR4DkIiIiKijMptxAE2B4wgRERF1PLx/m9EjYCIiIiJqGCaARERERDJjNu8AmkLt03MOCE1ERNRx1N635fwWHBPAZigtLQUADghNRETUAZWWlkKlUpk6DJNgJ5BmqKmpQX5+Prp06VLnjCNtoaSkBD179sSNGzdk+0JrU/C6NQ2vW9PwujUer1nT8LrVTQiB0tJSuLm5QamU59twbAFsBqVSCQ8PD1OHoYMDVDcNr1vT8Lo1Da9b4/GaNQ2vm3FybfmrJc+0l4iIiEjGmAASERERyQwTQDNhbW2NyMhIWFtbmzqUDoXXrWl43ZqG163xeM2ahteN6sNOIEREREQywxZAIiIiIplhAkhEREQkM0wAiYiIiGSGCSARERGRzDAB7EDi4uLQu3dv2NjYwM/PD8nJyQ3a78yZM7CwsMCAAQNaN8B2qjHX7eTJk1AoFHrL5cuX2zDi9qGxv7fKykosXboUXl5esLa2xu9+9zvs2LGjjaJtHxpzzaZPn27wt+bt7d2GEbcPjf2tJSQk4Mknn4SdnR1cXV0REhKCO3futFG07Udjr9vGjRvx+OOPw9bWFv369cPnn3/eRpFSuySoQ9i7d6+wtLQUn332mcjMzBQLFiwQ9vb24tq1a3Xud+/ePdGnTx8xZswY8eSTT7ZNsO1IY6/biRMnBACRlZUlCgoKpOX+/fttHLlpNeX39tprr4khQ4aIpKQkkZOTI77//ntx5syZNozatBp7ze7du6fzG7tx44bo2rWriIyMbNvATayx1y05OVkolUqxfv168fPPP4vk5GTh7e0tXn/99TaO3LQae93i4uJEly5dxN69e8XVq1fFnj17ROfOncWBAwfaOHJqL5gAdhBPP/20mDNnjs66/v37iyVLltS536RJk8SyZctEZGSkLBPAxl632gTw7t27bRBd+9XY63bkyBGhUqnEnTt32iK8dqmp/43W+vrrr4VCoRC5ubmtEV671djrtmbNGtGnTx+ddZ9++qnw8PBotRjbo8Zet2HDholFixbprFuwYIEYPnx4q8VI7RsfAXcAVVVVSEtLw5gxY3TWjxkzBt99953R/eLj43H16lVERka2dojtUlOvGwA89dRTcHV1xahRo3DixInWDLPdacp1O3DgAAYNGoSPP/4Y7u7u6Nu3LxYtWoTy8vK2CNnkmvNbq7V9+3aMHj0aXl5erRFiu9SU6+bv74+bN2/i8OHDEEKgqKgI+/btw7hx49oi5HahKdetsrISNjY2OutsbW1x7tw5VFdXt1qs1H4xAewAbt++DY1GAxcXF531Li4uKCwsNLhPdnY2lixZgoSEBFhYWLRFmO1OU66bq6srtm7diq+++gr79+9Hv379MGrUKHz77bdtEXK70JTr9vPPP+P06dP48ccf8fXXX2PdunXYt28f/vjHP7ZFyCbXlGv2oIKCAhw5cgSzZs1qrRDbpaZcN39/fyQkJGDSpEmwsrJCjx494OjoiA0bNrRFyO1CU65bQEAAtm3bhrS0NAghkJqaih07dqC6uhq3b99ui7CpnZFnZtBBKRQKne9CCL11AKDRaDBlyhSsXLkSffv2bavw2q2GXjcA6NevH/r16yd9HzZsGG7cuIG//OUvGDlyZKvG2d405rrV1NRAoVAgISEBKpUKALB27VpMmDABGzduhK2tbavH2x405po9aOfOnXB0dMTrr7/eSpG1b425bpmZmZg/fz4iIiIQEBCAgoIChIWFYc6cOdi+fXtbhNtuNOa6LV++HIWFhRg6dCiEEHBxccH06dPx8ccfo1OnTm0RLrUzbAHsAJydndGpUye9f9ndunVL71+AAFBaWorU1FTMmzcPFhYWsLCwQFRUFC5evAgLCwv861//aqvQTaqx182YoUOHIjs7u6XDa7eact1cXV3h7u4uJX8A8Pjjj0MIgZs3b7ZqvO1Bc35rQgjs2LEDwcHBsLKyas0w252mXLeYmBgMHz4cYWFh+P3vf4+AgADExcVhx44dKCgoaIuwTa4p183W1hY7duxAWVkZcnNzcf36dfTq1QtdunSBs7NzW4RN7QwTwA7AysoKfn5+SEpK0lmflJQEf39/vfIODg7IyMjAhQsXpGXOnDno168fLly4gCFDhrRV6CbV2OtmTHp6OlxdXVs6vHarKddt+PDhyM/Px6+//iqt++mnn6BUKuHh4dGq8bYHzfmtnTp1CleuXMHMmTNbM8R2qSnXraysDEql7q2rtgVLyGRq++b83iwtLeHh4YFOnTph7969eOWVV/SuJ8mEafqeUGPVdvnfvn27yMzMFKGhocLe3l7qMbhkyRIRHBxsdH+59gJu7HX75JNPxNdffy1++ukn8eOPP4olS5YIAOKrr74y1SmYRGOvW2lpqfDw8BATJkwQ//nPf8SpU6fEY489JmbNmmWqU2hzTf1vdOrUqWLIkCFtHW670djrFh8fLywsLERcXJy4evWqOH36tBg0aJB4+umnTXUKJtHY65aVlSV2794tfvrpJ/H999+LSZMmia5du4qcnBwTnQGZGt8B7CAmTZqEO3fuICoqCgUFBfDx8cHhw4elHoMFBQW4fv26iaNsfxp73aqqqrBo0SLk5eXB1tYW3t7eOHToEF5++WVTnYJJNPa6de7cGUlJSXjvvfcwaNAgODk54c0338SqVatMdQptrin/jarVanz11VdYv369KUJuFxp73aZPn47S0lLExsbigw8+gKOjI1544QV89NFHpjoFk2jsddNoNPjrX/+KrKwsWFpa4vnnn8d3332HXr16megMyNQUQsikzZyIiIiIAPAdQCIiIiLZYQJIREREJDNMAImIiIhkhgkgERERkcwwASQiIiKSGSaARERERDLDBJCIiIhIZpgAEhEREckME0AiIiIimWECSERERCQzTACJiIiIZIYJIBEREZHMMAEkIiIikhkmgEREREQywwSQiIiISGaYABIRERHJDBNAIiIiIplhAkhEREQkM0wAiYiIiGSGCSARERGRzDABJCIiIpIZJoBEREREMsMEkIiIiEhmmAASERERyQwTQCIiIiKZYQJIREREJDNMAImIiIhkhgkgERERkcwwASQiIiKSGSaARERERDLDBJCIiIhIZv4/Kmug3CJGqRUAAAAASUVORK5CYII=", + "text/html": [ + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " + ], "text/plain": [ - "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous view', 'arrow-left', 'back'), ('Forward', 'Forward to next view', 'arrow-right', 'forward'), ('Pan', 'Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect', 'arrows', 'pan'), ('Zoom', 'Zoom to rectangle\\nx/y fixes axis', 'square-o', 'zoom'), ('Download', 'Download plot', 'floppy-o', 'save_figure')]))" + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" - }, - { - "ename": "ValueError", - "evalue": "list.remove(x): x not in list", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/ipympl/backend_nbagg.py:279\u001b[0m, in \u001b[0;36mCanvas._handle_message\u001b[0;34m(self, object, content, buffers)\u001b[0m\n\u001b[1;32m 276\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmanager\u001b[38;5;241m.\u001b[39mhandle_json(content)\n\u001b[1;32m 278\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 279\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmanager\u001b[38;5;241m.\u001b[39mhandle_json(content)\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/backends/backend_webagg_core.py:464\u001b[0m, in \u001b[0;36mFigureManagerWebAgg.handle_json\u001b[0;34m(self, content)\u001b[0m\n\u001b[1;32m 463\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mhandle_json\u001b[39m(\u001b[38;5;28mself\u001b[39m, content):\n\u001b[0;32m--> 464\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcanvas\u001b[38;5;241m.\u001b[39mhandle_event(content)\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/backends/backend_webagg_core.py:264\u001b[0m, in \u001b[0;36mFigureCanvasWebAggCore.handle_event\u001b[0;34m(self, event)\u001b[0m\n\u001b[1;32m 261\u001b[0m e_type \u001b[38;5;241m=\u001b[39m event[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtype\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[1;32m 262\u001b[0m handler \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mhandle_\u001b[39m\u001b[38;5;132;01m{\u001b[39;00me_type\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 263\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhandle_unknown_event)\n\u001b[0;32m--> 264\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m handler(event)\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/backends/backend_webagg_core.py:279\u001b[0m, in \u001b[0;36mFigureCanvasWebAggCore.handle_draw\u001b[0;34m(self, event)\u001b[0m\n\u001b[1;32m 278\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mhandle_draw\u001b[39m(\u001b[38;5;28mself\u001b[39m, event):\n\u001b[0;32m--> 279\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdraw()\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/backends/backend_webagg_core.py:189\u001b[0m, in \u001b[0;36mFigureCanvasWebAggCore.draw\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 187\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_png_is_old \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 188\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 189\u001b[0m \u001b[38;5;28msuper\u001b[39m()\u001b[38;5;241m.\u001b[39mdraw()\n\u001b[1;32m 190\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[1;32m 191\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmanager\u001b[38;5;241m.\u001b[39mrefresh_all()\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/backends/backend_agg.py:388\u001b[0m, in \u001b[0;36mFigureCanvasAgg.draw\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 385\u001b[0m \u001b[38;5;66;03m# Acquire a lock on the shared font cache.\u001b[39;00m\n\u001b[1;32m 386\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtoolbar\u001b[38;5;241m.\u001b[39m_wait_cursor_for_draw_cm() \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtoolbar\n\u001b[1;32m 387\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m nullcontext()):\n\u001b[0;32m--> 388\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfigure\u001b[38;5;241m.\u001b[39mdraw(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrenderer)\n\u001b[1;32m 389\u001b[0m \u001b[38;5;66;03m# A GUI class may be need to update a window using this draw, so\u001b[39;00m\n\u001b[1;32m 390\u001b[0m \u001b[38;5;66;03m# don't forget to call the superclass.\u001b[39;00m\n\u001b[1;32m 391\u001b[0m \u001b[38;5;28msuper\u001b[39m()\u001b[38;5;241m.\u001b[39mdraw()\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/artist.py:95\u001b[0m, in \u001b[0;36m_finalize_rasterization..draw_wrapper\u001b[0;34m(artist, renderer, *args, **kwargs)\u001b[0m\n\u001b[1;32m 93\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(draw)\n\u001b[1;32m 94\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdraw_wrapper\u001b[39m(artist, renderer, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m---> 95\u001b[0m result \u001b[38;5;241m=\u001b[39m draw(artist, renderer, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 96\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m renderer\u001b[38;5;241m.\u001b[39m_rasterizing:\n\u001b[1;32m 97\u001b[0m renderer\u001b[38;5;241m.\u001b[39mstop_rasterizing()\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/artist.py:72\u001b[0m, in \u001b[0;36mallow_rasterization..draw_wrapper\u001b[0;34m(artist, renderer)\u001b[0m\n\u001b[1;32m 69\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 70\u001b[0m renderer\u001b[38;5;241m.\u001b[39mstart_filter()\n\u001b[0;32m---> 72\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m draw(artist, renderer)\n\u001b[1;32m 73\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[1;32m 74\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/figure.py:3164\u001b[0m, in \u001b[0;36mFigure.draw\u001b[0;34m(self, renderer)\u001b[0m\n\u001b[1;32m 3161\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[1;32m 3162\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstale \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[0;32m-> 3164\u001b[0m DrawEvent(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdraw_event\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcanvas, renderer)\u001b[38;5;241m.\u001b[39m_process()\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/backend_bases.py:1271\u001b[0m, in \u001b[0;36mEvent._process\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1269\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_process\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 1270\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Process this event on ``self.canvas``, then unset ``guiEvent``.\"\"\"\u001b[39;00m\n\u001b[0;32m-> 1271\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcanvas\u001b[38;5;241m.\u001b[39mcallbacks\u001b[38;5;241m.\u001b[39mprocess(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mname, \u001b[38;5;28mself\u001b[39m)\n\u001b[1;32m 1272\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_guiEvent_deleted \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/cbook.py:303\u001b[0m, in \u001b[0;36mCallbackRegistry.process\u001b[0;34m(self, s, *args, **kwargs)\u001b[0m\n\u001b[1;32m 301\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 exc:\n\u001b[1;32m 302\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexception_handler \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 303\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexception_handler(exc)\n\u001b[1;32m 304\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 305\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/cbook.py:87\u001b[0m, in \u001b[0;36m_exception_printer\u001b[0;34m(exc)\u001b[0m\n\u001b[1;32m 85\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_exception_printer\u001b[39m(exc):\n\u001b[1;32m 86\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m _get_running_interactive_framework() \u001b[38;5;129;01min\u001b[39;00m [\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mheadless\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m]:\n\u001b[0;32m---> 87\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m exc\n\u001b[1;32m 88\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 89\u001b[0m traceback\u001b[38;5;241m.\u001b[39mprint_exc()\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/cbook.py:298\u001b[0m, in \u001b[0;36mCallbackRegistry.process\u001b[0;34m(self, s, *args, **kwargs)\u001b[0m\n\u001b[1;32m 296\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m func \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 297\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 298\u001b[0m func(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 299\u001b[0m \u001b[38;5;66;03m# this does not capture KeyboardInterrupt, SystemExit,\u001b[39;00m\n\u001b[1;32m 300\u001b[0m \u001b[38;5;66;03m# and GeneratorExit\u001b[39;00m\n\u001b[1;32m 301\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 exc:\n", - "Cell \u001b[0;32mIn[5], line 13\u001b[0m, in \u001b[0;36mplot_text\u001b[0;34m(event)\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m texts \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 12\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m text \u001b[38;5;129;01min\u001b[39;00m texts:\n\u001b[0;32m---> 13\u001b[0m text\u001b[38;5;241m.\u001b[39mremove()\n\u001b[1;32m 14\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m patches \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m patch \u001b[38;5;129;01min\u001b[39;00m patches:\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/artist.py:240\u001b[0m, in \u001b[0;36mArtist.remove\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 235\u001b[0m \u001b[38;5;66;03m# There is no method to set the callback. Instead, the parent should\u001b[39;00m\n\u001b[1;32m 236\u001b[0m \u001b[38;5;66;03m# set the _remove_method attribute directly. This would be a\u001b[39;00m\n\u001b[1;32m 237\u001b[0m \u001b[38;5;66;03m# protected attribute if Python supported that sort of thing. The\u001b[39;00m\n\u001b[1;32m 238\u001b[0m \u001b[38;5;66;03m# callback has one parameter, which is the child to be removed.\u001b[39;00m\n\u001b[1;32m 239\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_remove_method \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 240\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_remove_method(\u001b[38;5;28mself\u001b[39m)\n\u001b[1;32m 241\u001b[0m \u001b[38;5;66;03m# clear stale callback\u001b[39;00m\n\u001b[1;32m 242\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstale_callback \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", - "\u001b[0;31mValueError\u001b[0m: list.remove(x): x not in list" - ] } ], "source": [ @@ -143,65 +96,6 @@ "# This will make the text move to avoid overlsp when the canvas is resized\n", "cid = fig.canvas.mpl_connect('resize_event', plot_text)" ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "ename": "ValueError", - "evalue": "list.remove(x): x not in list", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[9], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m patch \u001b[38;5;129;01min\u001b[39;00m patches[:]:\n\u001b[0;32m----> 2\u001b[0m patch\u001b[38;5;241m.\u001b[39mremove()\n", - "File \u001b[0;32m~/opt/anaconda3/envs/adjusttext/lib/python3.11/site-packages/matplotlib/artist.py:240\u001b[0m, in \u001b[0;36mArtist.remove\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 235\u001b[0m \u001b[38;5;66;03m# There is no method to set the callback. Instead, the parent should\u001b[39;00m\n\u001b[1;32m 236\u001b[0m \u001b[38;5;66;03m# set the _remove_method attribute directly. This would be a\u001b[39;00m\n\u001b[1;32m 237\u001b[0m \u001b[38;5;66;03m# protected attribute if Python supported that sort of thing. The\u001b[39;00m\n\u001b[1;32m 238\u001b[0m \u001b[38;5;66;03m# callback has one parameter, which is the child to be removed.\u001b[39;00m\n\u001b[1;32m 239\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_remove_method \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 240\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_remove_method(\u001b[38;5;28mself\u001b[39m)\n\u001b[1;32m 241\u001b[0m \u001b[38;5;66;03m# clear stale callback\u001b[39;00m\n\u001b[1;32m 242\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstale_callback \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", - "\u001b[0;31mValueError\u001b[0m: list.remove(x): x not in list" - ] - } - ], - "source": [ - "for patch in patches[:]:\n", - " patch.remove()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ]" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "patches" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": {