§
    ‚Øj+  ã                   óÌ  — d Z ddlmZ ddlZddlmZ ddlZddlZddlm	Z	 ddl
Z
ddlZddlZddlZ	 ddlZddlZddlZn# e$ rZ ed¦  «        e‚dZ[ww xY wddlZddlmZ ddlmZ d	d
lmZ d	dlmZmZ  ej         d„ ¬¦  «        Z! G d„ dej"        ¦  «        Z" G d„ dej#        ¦  «        Z$ G d„ dej%        j&        ¦  «        Z'd„ Z(ej)         G d„ de¦  «        ¦   «         Z*dS )z7Displays Agg images in the browser, with interactivity.é    )ÚcontextmanagerN)ÚBytesIO)ÚPathz$The WebAgg backend requires Tornado.)Ú_Backend)ÚGcfé   )Úbackend_webagg_core)ÚTimerAsyncioÚTimerTornadoc                  ól   — t           j        j                             ¦   «                              ¦   «         S ©N)ÚtornadoÚioloopÚIOLoopÚinstanceÚstart© ó    ú—/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/matplotlib/backends/backend_webagg.pyú<lambda>r   '   s#   € •7”>Ô(×1Ò1Ñ3Ô3×9Ò9Ñ;Ô;€ r   )Útargetc                   ó8   — e Zd Zej        Zeddœd„¦   «         ZdS )ÚFigureManagerWebAggN)Úblockc                óv  — t                                ¦   «          d                     t           j        t           j        t           j        ¬¦  «        }t          j        d         r,dd l}| 	                    |¦  «        st          d|› �¦  «         nt          d|› �¦  «         t                                ¦   «          d S )Nzhttp://{address}:{port}{prefix})ÚaddressÚportÚprefixzwebagg.open_in_browserr   zTo view figure, visit )ÚWebAggApplicationÚ
initializeÚformatr   r   Ú
url_prefixÚmplÚrcParamsÚ
webbrowserÚopenÚprintr   )Úclsr   Úurlr%   s       r   Úpyplot_showzFigureManagerWebAgg.pyplot_show-   s¹   € å×$Ò$Ñ&Ô&Ð&à/×6Ò6Ý%Ô-Ý"Ô'Ý$Ô/ð 7ñ 1ô 1ˆõ
 Œ<Ð0Ô1ð 	2ØÐÐÐØ—?’? 3Ñ'Ô'ð 6ÝÐ4¨sÐ4Ð4Ñ5Ô5Ð5øåÐ0¨3Ð0Ð0Ñ1Ô1Ð1å×ÒÑ!Ô!Ð!Ð!Ð!r   )Ú__name__Ú
__module__Ú__qualname__ÚcoreÚNavigationToolbar2WebAggÚ_toolbar2_classÚclassmethodr*   r   r   r   r   r   *   sB   € € € € € ØÔ3€OàØ"&ð "ð "ð "ð "ñ „[ð"ð "ð "r   r   c                   ó   — e Zd ZeZdS )ÚFigureCanvasWebAggN)r+   r,   r-   r   Úmanager_classr   r   r   r3   r3   @   s   € € € € € Ø'€M€M€Mr   r3   c                   óv  ‡ — e Zd ZdZdZ G d„ dej        j        ¦  «        Z G d„ dej        j        ¦  «        Z	 G d„ dej        j        ¦  «        Z
 G d„ d	ej        j        ¦  «        Z G d
„ dej        j        ¦  «        Z G d„ dej        j        ¦  «        Zdˆ fd„	Zedd„¦   «         Zed„ ¦   «         Zˆ xZS )r   Fc                   ó   — e Zd Zd„ ZdS )úWebAggApplication.FavIconc                 ó¾   — |                       dd¦  «         |                      t          t          j        ¦   «         d¦  «                             ¦   «         ¦  «         d S )NúContent-Typez	image/pngzimages/matplotlib.png)Ú
set_headerÚwriter   r#   Úget_data_pathÚ
read_bytes©Úselfs    r   ÚgetzWebAggApplication.FavIcon.getI   s^   € Ø�OŠO˜N¨KÑ8Ô8Ð8Ø�JŠJ•t�CÔ-Ñ/Ô/Ø3ñ5ô 5ß5?²Z±\´\ñCô Cð Cð Cð Cr   N©r+   r,   r-   r@   r   r   r   ÚFavIconr7   H   s(   € € € € € ð	Cð 	Cð 	Cð 	Cð 	Cr   rB   c                   ó*   ‡ — e Zd Zddœˆ fd„
Zd„ Zˆ xZS )ú"WebAggApplication.SingleFigurePageÚ ©r"   c                óL   •— || _          t          ¦   «         j        ||fi |¤Ž d S r   ©r"   ÚsuperÚ__init__©r?   ÚapplicationÚrequestr"   ÚkwargsÚ	__class__s        €r   rJ   z+WebAggApplication.SingleFigurePage.__init__O   ó1   ø€ Ø(ˆDŒOØ�E‰GŒGÔ˜[¨'Ð<Ð<°VÐ<Ð<Ð<Ð<Ð<r   c                 óâ   — t          |¦  «        }t          j        |¦  «        }d| j        j        › | j        › d�}|                      d| j        ||t          j        j	        |j
        ¬¦  «         d S )Núws://ú/zsingle_figure.html)r   Úws_uriÚfig_idÚ	toolitemsÚcanvas)Úintr   Úget_fig_managerrM   Úhostr"   Úrenderr.   r/   rV   rW   )r?   ÚfignumÚmanagerrT   s       r   r@   z&WebAggApplication.SingleFigurePage.getS   sz   € Ý˜‘[”[ˆFÝÔ)¨&Ñ1Ô1ˆGàB˜Tœ\Ô.ÐB°´ÐBÐBÐBˆFØ�KŠKØ$Ø”ØØÝÔ7ÔAØ”~ð ñ 'ô 'ð 'ð 'ð 'r   ©r+   r,   r-   rJ   r@   Ú__classcell__©rO   s   @r   ÚSingleFigurePagerD   N   sT   ø€ € € € € Ø?Að 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'r   ra   c                   ó*   ‡ — e Zd Zddœˆ fd„
Zd„ Zˆ xZS )ú WebAggApplication.AllFiguresPagerE   rF   c                óL   •— || _          t          ¦   «         j        ||fi |¤Ž d S r   rH   rK   s        €r   rJ   z)WebAggApplication.AllFiguresPage.__init__a   rP   r   c           	      óâ   — d| j         j        › | j        › d�}|                      d| j        |t	          t
          j                             ¦   «         ¦  «        t          j	        j
        ¬¦  «         d S )NrR   rS   zall_figures.html)r   rT   ÚfiguresrV   )rM   rZ   r"   r[   Úsortedr   ÚfigsÚitemsr.   r/   rV   )r?   rT   s     r   r@   z$WebAggApplication.AllFiguresPage.gete   ss   € ØB˜Tœ\Ô.ÐB°´ÐBÐBÐBˆFØ�KŠKØ"Ø”ØÝ�sœxŸ~š~Ñ/Ô/Ñ0Ô0ÝÔ7ÔAð ñ Cô Cð Cð Cð Cr   r^   r`   s   @r   ÚAllFiguresPagerc   `   s[   ø€ € € € € Ø?Að 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð	Cð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cr   rj   c                   ó   — e Zd Zd„ ZdS )úWebAggApplication.MplJsc                 ó˜   — |                       dd¦  «         t          j                             ¦   «         }|                      |¦  «         d S )Nr9   zapplication/javascript)r:   r.   r   Úget_javascriptr;   )r?   Ú
js_contents     r   r@   zWebAggApplication.MplJs.geto   sC   € Ø�OŠO˜NÐ,DÑEÔEÐEåÔ1×@Ò@ÑBÔBˆJà�JŠJ�zÑ"Ô"Ð"Ð"Ð"r   NrA   r   r   r   ÚMplJsrl   n   s#   € € € € € ð	#ð 	#ð 	#ð 	#ð 	#r   rp   c                   ó   — e Zd Zd„ ZdS )úWebAggApplication.Downloadc                 ó`  — t          |¦  «        }t          j        |¦  «        }|                      dt          j                             |d¦  «        ¦  «         t          ¦   «         }|j        j	         
                    ||¬¦  «         |                      |                     ¦   «         ¦  «         d S )Nr9   Úbinary)r!   )rX   r   rY   r:   Ú	mimetypesÚ	types_mapr@   r   rW   ÚfigureÚsavefigr;   Úgetvalue)r?   r\   Úfmtr]   Úbuffs        r   r@   zWebAggApplication.Download.getw   s•   € Ý˜‘[”[ˆFÝÔ)¨&Ñ1Ô1ˆGØ�OŠOØ¥	Ô 3× 7Ò 7¸¸XÑ FÔ FñHô Hð Hå‘9”9ˆDØŒNÔ!×)Ò)¨$°sÐ)Ñ;Ô;Ð;Ø�JŠJ�t—}’}‘”Ñ'Ô'Ð'Ð'Ð'r   NrA   r   r   r   ÚDownloadrr   v   s#   € € € € € ð	(ð 	(ð 	(ð 	(ð 	(r   r|   c                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )úWebAggApplication.WebSocketTc                 óì   — t          |¦  «        | _        t          j        | j        ¦  «        | _        | j                             | ¦  «         t          | d¦  «        r|                      d¦  «         d S d S )NÚset_nodelayT)rX   r\   r   rY   r]   Úadd_web_socketÚhasattrr€   )r?   r\   s     r   r&   z WebAggApplication.WebSocket.openƒ   so   € Ý˜f™+œ+ˆDŒKÝÔ.¨t¬{Ñ;Ô;ˆDŒLØŒL×'Ò'¨Ñ-Ô-Ð-Ý�t˜]Ñ+Ô+ð 'Ø× Ò  Ñ&Ô&Ð&Ð&Ð&ð'ð 'r   c                 ó:   — | j                              | ¦  «         d S r   )r]   Úremove_web_socketr>   s    r   Úon_closez$WebAggApplication.WebSocket.on_closeŠ   s   € ØŒL×*Ò*¨4Ñ0Ô0Ð0Ð0Ð0r   c                 óÈ   — t          j        |¦  «        }|d         dk    r|d         | _        d S t          j        | j        ¦  «        }|�|                     |¦  «         d S d S )NÚtypeÚsupports_binaryÚvalue)ÚjsonÚloadsrˆ   r   rY   r\   Úhandle_json)r?   Úmessager]   s      r   Ú
on_messagez&WebAggApplication.WebSocket.on_message�   sr   € Ý”j Ñ)Ô)ˆGð �vŒÐ"3Ò3Ð3Ø'.¨wÔ'7�Ô$Ð$Ð$åÔ-¨d¬kÑ:Ô:�ð Ð&Ø×'Ò'¨Ñ0Ô0Ð0Ð0Ð0ð 'Ð&r   c                 óT   — |                       t          j        |¦  «        ¦  «         d S r   )Úwrite_messagerŠ   Údumps)r?   Úcontents     r   Ú	send_jsonz%WebAggApplication.WebSocket.send_jsonœ   s&   € Ø×Ò�tœz¨'Ñ2Ô2Ñ3Ô3Ð3Ð3Ð3r   c                 óè   — | j         r|                      |d¬¦  «         d S d                     |                     d¦  «                             dd¦  «        ¦  «        }|                      |¦  «         d S )NT)rt   zdata:image/png;base64,{}Úbase64ú
rE   )rˆ   r�   r!   ÚencodeÚreplace)r?   ÚblobÚdata_uris      r   Úsend_binaryz'WebAggApplication.WebSocket.send_binaryŸ   sz   € ØÔ#ð -Ø×"Ò" 4°Ð"Ñ5Ô5Ð5Ð5Ð5à5×<Ò<Ø—K’K Ñ)Ô)×1Ò1°$¸Ñ;Ô;ñ=ô =�à×"Ò" 8Ñ,Ô,Ð,Ð,Ð,r   N)	r+   r,   r-   rˆ   r&   r…   rŽ   r“   r›   r   r   r   Ú	WebSocketr~   €   sd   € € € € € Øˆð	'ð 	'ð 	'ð	1ð 	1ð 	1ð	1ð 	1ð 	1ð	4ð 	4ð 	4ð	-ð 	-ð 	-ð 	-ð 	-r   rœ   rE   c                 ó4  •— |r"|d         dk    r|d         dk    s
J d¦   «         ‚t          ¦   «                              |dz   t          j        j        dt
          j                             ¦   «         if|dz   t          j        j        dt          t          j
        ¦   «         d¦  «        if|d	z   | j        f|d
z   | j        d|if|dz   | j        d|if|dz   | j        f|dz   | j        f|dz   | j        fgt
          j                             ¦   «         ¬¦  «         d S )Nr   rS   éÿÿÿÿz6url_prefix must start with a "/" and not end with one.z/_static/(.*)Úpathz/_images/(.*)Úimagesz/favicon.icoz	/([0-9]+)r"   z/?z
/js/mpl.jsz/([0-9]+)/wsz/([0-9]+)/download.([a-z0-9.]+))Útemplate_path)rI   rJ   r   ÚwebÚStaticFileHandlerr.   r   Úget_static_file_pathr   r#   r<   rB   ra   rj   rp   rœ   r|   )r?   r"   rO   s     €r   rJ   zWebAggApplication.__init__§   sl  ø€ Øð 	IØ˜a”= CÒ'Ð'¨J°r¬N¸cÒ,AÐ,AÐ,AØHñ -BÔ,AÐAõ 	‰Œ×Òð Ð.Ñ.Ý”Ô.Ø�$Ô2×GÒGÑIÔIÐJðLð
 Ð.Ñ.Ý”Ô.Ø�$�sÔ0Ñ2Ô2°HÑ=Ô=Ð>ð@ð
 ˜oÑ-¨t¬|Ð<ð ˜lÑ*¨DÔ,AØ 
Ð+ð-ð ˜eÑ# TÔ%8Ø 
Ð+ð-ð ˜mÑ+¨T¬ZÐ8ð ˜oÑ-¨t¬~Ð>ð Ð@Ñ@Ø”ð ð;õ@ Ô2×GÒGÑIÔIðC 	ñ !	Kô !	Kð !	Kð !	Kð !	Kr   Nc                 óÊ  — | j         rd S  | |¬¦  «        }|| _        d„ }|€t          j        d         | _        n|| _        t          j        d         | _         || j        t          j        d         ¦  «        D ]S}	 |                     || j        ¦  «         || _         n<# t          $ r }|j        t          j	        k    r‚ Y d }~ŒLd }~ww xY wt          d¦  «        ‚d| _         d S )NrF   c              3   óÂ   K  — t          t          d|¦  «        ¦  «        D ]	}| |z   V — Œ
t          |dz
  ¦  «        D ]"}| t          j        d|z  d|z  ¦  «        z   V — Œ#dS )zâ
            Generate a list of n random ports near the given port.

            The first 5 ports will be sequential, and the remaining n-5 will be
            randomly selected in the range [port-2*n, port+2*n].
            é   éþÿÿÿé   N)ÚrangeÚminÚrandomÚrandint)r   ÚnÚis      r   Úrandom_portsz2WebAggApplication.initialize.<locals>.random_portsÛ   s�   è è € õ �3˜q !™9œ9Ñ%Ô%ð ð �Ø˜Q‘h����Ý˜1˜q™5‘\”\ð ;ð ;�Ø�Vœ^¨B°©F°A¸±EÑ:Ô:Ñ:Ð:Ð:Ð:Ð:ð;ð ;r   zwebagg.addresszwebagg.portzwebagg.port_retrieszSThe webagg server could not be started because an available port could not be foundT)Úinitializedr"   r#   r$   r   r   ÚlistenÚOSErrorÚerrnoÚ
EADDRINUSEÚ
SystemExit)r(   r"   r   r   Úappr°   Úes          r   r    zWebAggApplication.initializeÏ   s(  € àŒ?ð 	ØˆFð ˆc˜ZÐ(Ñ(Ô(ˆà#ˆŒð
	;ð 
	;ð 
	;ð ˆ?Ýœ,Ð'7Ô8ˆCŒKˆKà!ˆCŒKÝ”< Ô.ˆŒØ �L ¤Ý!$¤Ð.CÔ!DñFô Fð 	+ð 	+ˆDðØ—
’
˜4 ¤Ñ-Ô-Ð-ð
  �”Ø�øõ ð ð ð Ø”7�eÔ.Ò.Ð.Øð /Ð.Ð.Ð.Ð.øøøøðøøøõ ð*ñ+ô +ð +ð ˆŒˆˆs   Á<B Â 
C
Â*CÃC
c                 óÐ  ‡ ‡‡— dd l }	 |                     ¦   «          d‰ _        n# t          $ r Y nw xY w‰ j        rd S 	 t          j        j                             ¦   «         Šˆ ˆfd„Št          ˆˆfd„¦   «         }d‰ _        t          d¦  «         t          j                             ¦   «           |¦   «         5  ‰                     ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S )Nr   Tc                  ó˜   •— ‰                      ¦   «          t          d¦  «         t          j                             ¦   «          d‰ _        d S )NzServer is stoppedF)Ústopr'   ÚsysÚstdoutÚflushÚstarted)r(   r   s   €€r   Úshutdownz)WebAggApplication.start.<locals>.shutdown  s>   ø€ Ø�KŠK‰MŒMˆMÝÐ%Ñ&Ô&Ð&ÝŒJ×ÒÑÔÐØˆCŒKˆKˆKr   c               3   óâ   •K  — t          j         t           j        ˆˆfd„¦  «        } 	 d V — t          j         t           j        | ¦  «         d S # t          j         t           j        | ¦  «         w xY w)Nc                 ó.   •— ‰                      ‰¦  «        S r   )Úadd_callback_from_signal)ÚsigÚframer   rÀ   s     €€r   r   z?WebAggApplication.start.<locals>.catch_sigint.<locals>.<lambda>  s   ø€  6×#BÒ#BÀ8Ñ#LÔ#L€ r   )ÚsignalÚSIGINT)Úold_handlerr   rÀ   s    €€r   Úcatch_sigintz-WebAggApplication.start.<locals>.catch_sigint  sp   øè è € å œ-Ý”ØLÐLÐLÐLÐLñNô NˆKð:Ø���å”�fœm¨[Ñ9Ô9Ð9Ð9Ð9ø•”�fœm¨[Ñ9Ô9Ð9Ð9øøøs   ¨A Á!A.z"Press Ctrl+C to stop WebAgg server)ÚasyncioÚget_running_loopr¿   ÚRuntimeErrorr   r   r   r   r   r'   r¼   r½   r¾   r   )r(   rÊ   rÉ   r   rÀ   s   `  @@r   r   zWebAggApplication.startý   sq  øøø€ àˆˆˆð	Ø×$Ò$Ñ&Ô&Ð&ð ˆCŒKˆKøõ ð 	ð 	ð 	ØˆDð	øøøð
 Œ;ð 	ØˆFð	õ ”Ô&×/Ò/Ñ1Ô1ˆð	 ð 	 ð 	 ð 	 ð 	 ð 	 õ 
ð	:ð 	:ð 	:ð 	:ð 	:ñ 
Œð	:ð ˆŒåÐ2Ñ3Ô3Ð3ÝŒ
×ÒÑÔÐØˆ\‰^Œ^ð 	ð 	Ø�LŠL‰NŒNˆNð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ‰% ¥
2±2Â9CÃCÃ"C)rE   )rE   NN)r+   r,   r-   r±   r¿   r   r¢   ÚRequestHandlerrB   ra   rj   rp   r|   Ú	websocketÚWebSocketHandlerrœ   rJ   r1   r    r   r_   r`   s   @r   r   r   D   s¶  ø€ € € € € Ø€KØ€GðCð Cð Cð Cð C�'”+Ô,ñ Cô Cð Cð'ð 'ð 'ð 'ð '˜7œ;Ô5ñ 'ô 'ð 'ð$Cð Cð Cð Cð C˜œÔ3ñ Cô Cð Cð#ð #ð #ð #ð #�”Ô*ñ #ô #ð #ð(ð (ð (ð (ð (�7”;Ô-ñ (ô (ð (ð%-ð %-ð %-ð %-ð %-�GÔ%Ô6ñ %-ô %-ð %-ðN&Kð &Kð &Kð &Kð &Kð &KðP ð+ð +ð +ñ „[ð+ðZ ð+ð +ñ „[ð+ð +ð +ð +ð +r   r   c                 ó\  — dd l }t                               ¦   «          dd l}	 |                     ¦   «          nB# t
          $ r5 t                               ¦   «         st                               ¦   «          Y nw xY w| j	        }t          t          j                             ¦   «         d¦  «                             ¦   «         }|j                             |¦  «        }|                     t          j        |t          j        j        | j        t          j        ¬¦  «                             d¦  «        S )Nr   zipython_inline_figure.html)r   rU   rV   rW   r   zutf-8)Útornado.templater   r    rÊ   rË   rÌ   Úwebagg_server_threadÚis_aliver   Únumberr   r.   r   r¤   Ú	read_textÚtemplateÚTemplateÚgenerater"   r/   rV   rW   r   Údecode)rw   r   rÊ   r\   ÚtplÚts         r   Úipython_inline_displayrÜ   ,  s  € ØÐÐÐå× Ò Ñ"Ô"Ð"Ø€N€N€Nð)Ø× Ò Ñ"Ô"Ð"Ð"øÝð )ð )ð )Ý#×,Ò,Ñ.Ô.ð 	)Ý ×&Ò&Ñ(Ô(Ð(øøð)øøøð Œ]€FÝ
�tÔ'×<Ò<Ñ>Ô>Ø+ñ-ô -ß-6ªY©[¬[ð àÔ×!Ò! #Ñ&Ô&€AØ�:Š:Ý Ô+ØÝÔ/Ô9ØŒ}ÝÔ#ð ñ %ô %÷
 &,¢V¨G¡_¤_ð5s   £8 ¸<A7Á6A7c                   ó   — e Zd ZeZeZdS )Ú_BackendWebAggN)r+   r,   r-   r3   ÚFigureCanvasr   ÚFigureManagerr   r   r   rÞ   rÞ   C  s   € € € € € à%€LØ'€M€M€Mr   rÞ   )+Ú__doc__Ú
contextlibr   r´   Úior   rŠ   ru   Úpathlibr   r¬   r¼   rÆ   Ú	threadingÚtornado.webr   Útornado.ioloopÚtornado.websocketÚImportErrorÚerrrÌ   Ú
matplotlibr#   Úmatplotlib.backend_basesr   Úmatplotlib._pylab_helpersr   rE   r	   r.   r
   r   ÚThreadrÒ   r   ÚFigureCanvasWebAggCorer3   r¢   ÚApplicationr   rÜ   ÚexportrÞ   r   r   r   ú<module>rò      s\  ðØ =Ð =ð &Ð %Ð %Ð %Ð %Ð %Ø €€€Ø Ð Ð Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø €€€Ø 
€
€
€
Ø €€€Ø Ð Ð Ð ðHØÐÐÐØÐÐÐØÐÐÐÐøØð Hð Hð HØ
ˆ,Ð=Ñ
>Ô
>ÀCÐGøøøøðHøøøð Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ø )Ð )Ð )Ð )Ð )Ð )Ø )Ð )Ð )Ð )Ð )Ð )ð ð  ð  ð  ð  ð  ð  ð  ð (�yÔ'Ø;Ð;ð=ñ =ô =Ð ð"ð "ð "ð "ð "˜$Ô2ñ "ô "ð "ð,(ð (ð (ð (ð (˜Ô4ñ (ô (ð (ðeð eð eð eð e˜œÔ/ñ eô eð eðP5ð 5ð 5ð. 
„ð(ð (ð (ð (ð (�Xñ (ô (ñ „ð(ð (ð (s   ²? ¿AÁAÁA