Ë
    µ2Úi–+  ã                   óH  — 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ddlZ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@                  jC                  d«       G d„ dejD                  «      «       Z# ejD                  d„ ¬«      Z$ G d„ dejJ                  «      Z% G d„ dejL                  «      Z' G d„ dejP                  jR                  «      Z*d„ Z+ejX                   G d„ de«      «       Z-y# e$ rZ ed«      e‚dZ[ww xY w)z7Displays Agg images in the browser, with interactivity.é    )ÚcontextmanagerN)ÚBytesIO)ÚPathz$The WebAgg backend requires Tornado.)Ú_Backend)ÚGcfé   )Úbackend_webagg_core)ÚTimerAsyncioÚTimerTornadoz3.7c                   ó   — e Zd Zd„ Zy)ÚServerThreadc                 óp   — t         j                  j                  j                  «       j	                  «        y ©N©ÚtornadoÚioloopÚIOLoopÚinstanceÚstart©Úselfs    úY/var/www/html/acx/venv/lib/python3.12/site-packages/matplotlib/backends/backend_webagg.pyÚrunzServerThread.run*   s!   € Ü�‰×Ñ×&Ñ&Ó(×.Ñ.Õ0ó    N)Ú__name__Ú
__module__Ú__qualname__r   © r   r   r   r   (   s   „ ó1r   r   c                  ón   — t         j                  j                  j                  «       j	                  «       S r   r   r   r   r   ú<lambda>r    /   s"   € ”7—>‘>×(Ñ(×1Ñ1Ó3×9Ñ9Ó;€ r   )Útargetc                   ó:   — e Zd Zej                  Zeddœd„«       Zy)ÚFigureManagerWebAggN)Úblockc                óZ  — t         j                  «        dj                  t         j                  t         j                  t         j
                  ¬«      }t        j                  d   r$dd l}|j                  |«      st        d|› �«       nt        d|› �«       t         j                  «        y )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_show5   sˆ   € ä×$Ñ$Ô&à/×6Ñ6Ü%×-Ñ-Ü"×'Ñ'Ü$×/Ñ/ð 7ó 1ˆô
 �<‰<Ð0Ò1ÛØ—?‘? 3Ô'ÜÐ.¨s¨eÐ4Õ5äÐ*¨3¨%Ð0Ô1ä×ÑÕ!r   )r   r   r   ÚcoreÚNavigationToolbar2WebAggÚ_toolbar2_classÚclassmethodr4   r   r   r   r#   r#   2   s"   „ Ø×3Ñ3€OàØ"&ó "ó ñ"r   r#   c                   ó   — e Zd ZeZy)ÚFigureCanvasWebAggN)r   r   r   r#   Úmanager_classr   r   r   r:   r:   H   s   „ Ø'�Mr   r:   c                   ó¾  ‡ — 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y)úWebAggApplication.FavIconc                 óž   — | j                  dd«       | j                  t        t        j                  «       d«      j                  «       «       y )NúContent-Typez	image/pngzimages/matplotlib.png)Ú
set_headerÚwriter   r-   Úget_data_pathÚ
read_bytesr   s    r   ÚgetzWebAggApplication.FavIcon.getQ   s9   € Ø�O‰O˜N¨KÔ8Ø�J‰J”tœC×-Ñ-Ó/Ø3ó5ß5?±Z³\õCr   N©r   r   r   rE   r   r   r   ÚFavIconr>   P   s   „ ó	Cr   rG   c                   ó*   ‡ — e Zd Zddœˆ fd„
Zd„ Zˆ xZS )ú"WebAggApplication.SingleFigurePageÚ ©r,   c                ó6   •— || _         t        ‰| �  ||fi |¤Ž y r   ©r,   ÚsuperÚ__init__©r   ÚapplicationÚrequestr,   ÚkwargsÚ	__class__s        €r   rO   z+WebAggApplication.SingleFigurePage.__init__W   ó   ø€ Ø(ˆDŒOÜ‰GÑ˜[¨'Ñ<°VÓ<r   c                 ó  — t        |«      }t        j                  |«      }d| j                  j                  › | j
                  › d�}| j                  d| j
                  ||t        j                  j                  |j                  ¬«       y )Núws://ú/zsingle_figure.html)r(   Úws_uriÚfig_idÚ	toolitemsÚcanvas)Úintr   Úget_fig_managerrR   Úhostr,   Úrenderr5   r6   r[   r\   )r   ÚfignumÚmanagerrY   s       r   rE   z&WebAggApplication.SingleFigurePage.get[   st   € Ü˜“[ˆFÜ×)Ñ)¨&Ó1ˆGà˜TŸ\™\×.Ñ.Ð/°·±Ð/@ÀÐBˆFØ�K‰KØ$Ø—‘ØØÜ×7Ñ7×AÑAØ—~‘~ð õ 'r   ©r   r   r   rO   rE   Ú__classcell__©rT   s   @r   ÚSingleFigurePagerI   V   s   ø„ Ø?Aö 	=ö	'r   rf   c                   ó*   ‡ — e Zd Zddœˆ fd„
Zd„ Zˆ xZS )ú WebAggApplication.AllFiguresPagerJ   rK   c                ó6   •— || _         t        ‰| �  ||fi |¤Ž y r   rM   rP   s        €r   rO   z)WebAggApplication.AllFiguresPage.__init__i   rU   r   c           	      ó
  — d| j                   j                  › | j                  › d�}| j                  d| j                  |t	        t
        j                  j                  «       «      t        j                  j                  ¬«       y )NrW   rX   zall_figures.html)r(   rY   Úfiguresr[   )rR   r_   r,   r`   Úsortedr   ÚfigsÚitemsr5   r6   r[   )r   rY   s     r   rE   z$WebAggApplication.AllFiguresPage.getm   se   € Ø˜TŸ\™\×.Ñ.Ð/°·±Ð/@ÀÐBˆFØ�K‰KØ"Ø—‘ØÜœsŸx™xŸ~™~Ó/Ó0Ü×7Ñ7×AÑAð õ Cr   rc   re   s   @r   ÚAllFiguresPagerh   h   s   ø„ Ø?Aö 	=ö	Cr   ro   c                   ó   — e Zd Zd„ Zy)úWebAggApplication.MplJsc                 ó†   — | j                  dd«       t        j                  j                  «       }| j	                  |«       y )Nr@   zapplication/javascript)rA   r5   r#   Úget_javascriptrB   )r   Ú
js_contents     r   rE   zWebAggApplication.MplJs.getw   s1   € Ø�O‰O˜NÐ,DÔEä×1Ñ1×@Ñ@ÓBˆJà�J‰J�zÕ"r   NrF   r   r   r   ÚMplJsrq   v   s   „ ó	#r   ru   c                   ó   — e Zd Zd„ Zy)úWebAggApplication.Downloadc                 óD  — t        |«      }t        j                  |«      }| j                  dt        j
                  j                  |d«      «       t        «       }|j                  j                  j                  ||¬«       | j                  |j                  «       «       y )Nr@   Úbinary)r+   )r]   r   r^   rA   Ú	mimetypesÚ	types_maprE   r   r\   ÚfigureÚsavefigrB   Úgetvalue)r   ra   Úfmtrb   Úbuffs        r   rE   zWebAggApplication.Download.get   sv   € Ü˜“[ˆFÜ×)Ñ)¨&Ó1ˆGØ�O‰OØ¤	× 3Ñ 3× 7Ñ 7¸¸XÓ FôHä“9ˆDØ�N‰N×!Ñ!×)Ñ)¨$°sÐ)Ô;Ø�J‰J�t—}‘}“Õ'r   NrF   r   r   r   ÚDownloadrw   ~   s   „ ó	(r   r�   c                   ó.   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zy)úWebAggApplication.WebSocketTc                 óÞ   — t        |«      | _        t        j                  | j                  «      | _        | j                  j                  | «       t        | d«      r| j                  d«       y y )NÚset_nodelayT)r]   ra   r   r^   rb   Úadd_web_socketÚhasattrr…   )r   ra   s     r   r0   z WebAggApplication.WebSocket.open‹   sR   € Ü˜f›+ˆDŒKÜ×.Ñ.¨t¯{©{Ó;ˆDŒLØ�L‰L×'Ñ'¨Ô-Ü�t˜]Ô+Ø× Ñ  Õ&ð ,r   c                 ó:   — | j                   j                  | «       y r   )rb   Úremove_web_socketr   s    r   Úon_closez$WebAggApplication.WebSocket.on_close’   s   € Ø�L‰L×*Ñ*¨4Õ0r   c                 óº   — t        j                  |«      }|d   dk(  r|d   | _        y t        j                  | j
                  «      }|�|j                  |«       y y )NÚtypeÚsupports_binaryÚvalue)ÚjsonÚloadsr�   r   r^   ra   Úhandle_json)r   Úmessagerb   s      r   Ú
on_messagez&WebAggApplication.WebSocket.on_message•   s[   € Ü—j‘j Ó)ˆGð �v‰Ð"3Ò3Ø'.¨wÑ'7�Õ$ä×-Ñ-¨d¯k©kÓ:�ð Ð&Ø×'Ñ'¨Õ0ð 'r   c                 óL   — | j                  t        j                  |«      «       y r   )Úwrite_messager�   Údumps)r   Úcontents     r   Ú	send_jsonz%WebAggApplication.WebSocket.send_json¤   s   € Ø×ÑœtŸz™z¨'Ó2Õ3r   c                 óÆ   — | j                   r| j                  |d¬«       y dj                  |j                  d«      j	                  dd«      «      }| j                  |«       y )NT)ry   zdata:image/png;base64,{}Úbase64ú
rJ   )r�   r•   r+   ÚencodeÚreplace)r   ÚblobÚdata_uris      r   Úsend_binaryz'WebAggApplication.WebSocket.send_binary§   sU   € Ø×#Ò#Ø×"Ñ" 4°Ð"Õ5à5×<Ñ<Ø—K‘K Ó)×1Ñ1°$¸Ó;ó=�à×"Ñ" 8Õ,r   N)	r   r   r   r�   r0   rŠ   r“   r˜   r    r   r   r   Ú	WebSocketrƒ   ˆ   s    „ Øˆò	'ò	1ò	1ò	4ó	-r   r¡   c                 óR  •— |r|d   dk(  r|d   dk7  sJ d«       ‚t         ‰| �  |dz   t        j                  j                  dt
        j                  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                  j                  «       ¬«       y )Nr   rX   éÿÿÿÿ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)rN   rO   r   ÚwebÚStaticFileHandlerr5   r#   Úget_static_file_pathr   r-   rC   rG   rf   ro   ru   r¡   r�   )r   r,   rT   s     €r   rO   zWebAggApplication.__init__¯   sX  ø€ ÙØ˜a‘= CÒ'¨J°r©N¸cÒ,Að IØHóIÐAô 	‰Ñð Ð.Ñ.Ü—‘×.Ñ.Øœ$×2Ñ2×GÑGÓIÐJðLð
 Ð.Ñ.Ü—‘×.Ñ.Øœ$œs×0Ñ0Ó2°HÓ=Ð>ð@ð
 ˜oÑ-¨t¯|©|Ð<ð ˜lÑ*¨D×,AÑ,AØ 
Ð+ð-ð ˜eÑ# T×%8Ñ%8Ø 
Ð+ð-ð ˜mÑ+¨T¯Z©ZÐ8ð ˜oÑ-¨t¯~©~Ð>ð Ð@Ñ@Ø—‘ð ð;ô@ ×2Ñ2×GÑGÓIðC 	õ !	Kr   c                 óÞ  — | j                   ry  | |¬«      }|| _        d„ }|€t        j                  d   | _        n|| _        t        j                  d   | _         || j
                  t        j                  d   «      D ].  }	 |j                  || j                  «       || _         d| _         y  t        d«      ‚# t        $ r(}|j                  t        j                  k7  r‚ Y d }~Œhd }~ww xY w)NrK   c              3   ó¶   K  — t        t        d|«      «      D ]	  }| |z   –— Œ t        |dz
  «      D ]#  }| t        j                  d|z  d|z  «      z   –— Œ% y­w)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Ó%ò �Ø˜Q‘h“ðä˜1˜q™5“\ò ;�ØœVŸ^™^¨B°©F°A¸±EÓ:Ñ:Ó:ñ;ùs   ‚AA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)r2   r,   r'   r&   Úapprµ   Úes          r   r*   zWebAggApplication.initialize×   sç   € à�?Š?Øñ ˜ZÔ(ˆà#ˆŒò
	;ð ˆ?ÜŸ,™,Ð'7Ñ8ˆC�Kà!ˆCŒKÜ—<‘< Ñ.ˆŒÙ  §¡Ü!$§¡Ð.CÑ!DóFò 	+ˆDðØ—
‘
˜4 §¡Ô-ð
  �”Øð ˆ�ð	+ô ð*ó+ð +øô ò Ø—7‘7œe×.Ñ.Ò.Øô /ûðús   ÂB;Â;	C,ÃC'Ã'C,c                 ó®  ‡ ‡‡— dd l }	 |j                  «        d‰ _        ‰ j                  ry 	 t        j
                  j                  j                  «       Šˆ ˆfd„Št        ˆˆfd„«       }d‰ _        t        d«       t        j                  j                  «         |«       5  ‰j                  «        d d d «       y # t        $ r Y Œ§w xY w# 1 sw Y   y xY w)Nr   Tc                  ó†   •— ‰j                  «        t        d«       t        j                  j	                  «        d‰ _        y )NzServer is stoppedF)Ústopr1   ÚsysÚstdoutÚflushÚstarted)r2   r   s   €€r   Úshutdownz)WebAggApplication.start.<locals>.shutdown  s,   ø€ Ø�K‰KŒMÜÐ%Ô&Ü�J‰J×ÑÔØˆC�Kr   c               3   ó  •K  — t        j                   t         j                  ˆˆfd„«      } 	 d –— t        j                   t         j                  | «       y # t        j                   t         j                  | «       w xY w­w)Nc                 ó&   •— ‰j                  ‰«      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€ r   )ÚsignalÚSIGINT)Úold_handlerr   rÅ   s    €€r   Úcatch_sigintz-WebAggApplication.start.<locals>.catch_sigint!  sL   øè ø€ ä Ÿ-™-Ü—‘ÜLóNˆKð:Ûä—‘œfŸm™m¨[Õ9ø”—‘œfŸm™m¨[Õ9üs   ƒ)A?­A ±%A?Á&A<Á<A?z"Press Ctrl+C to stop WebAgg server)ÚasyncioÚget_running_looprÄ   ÚRuntimeErrorr   r   r   r   r   r1   rÁ   rÂ   rÃ   r   )r2   rÏ   rÎ   r   rÅ   s   `  @@r   r   zWebAggApplication.start  sÂ   ú€ ãð	Ø×$Ñ$Ô&ð ˆCŒKà�;Š;Øð	ô —‘×&Ñ&×/Ñ/Ó1ˆõ	 ô 
ô	:ó 
ð	:ð ˆŒäÐ2Ô3Ü�
‰
×ÑÔÙ‹^ñ 	Ø�L‰LŒN÷	ð 	øôM ò 	Ùð	ú÷L	ð 	ús   ‰B< Â"CÂ<	CÃCÃC)rJ   )rJ   NN)r   r   r   r¶   rÄ   r   r§   ÚRequestHandlerrG   rf   ro   ru   r�   Ú	websocketÚWebSocketHandlerr¡   rO   r8   r*   r   rd   re   s   @r   r)   r)   L   sÈ   ø„ Ø€KØ€GôC�'—+‘+×,Ñ,ô Cô'˜7Ÿ;™;×5Ñ5ô 'ô$C˜Ÿ™×3Ñ3ô Cô#�—‘×*Ñ*ô #ô(�7—;‘;×-Ñ-ô (ô%-�G×%Ñ%×6Ñ6ô %-õN&KðP ò+ó ð+ðZ ñ+ó ô+r   r)   c                 óJ  — dd l }t        j                  «        dd l}	 |j	                  «        | j                  }t        t        j                  j                  «       d«      j                  «       }|j                  j!                  |«      }|j#                  t        j$                  |t        j&                  j(                  | j*                  t        j,                  ¬«      j/                  d«      S # t
        $ r+ t        j                  «       st        j                  «        Y Œów xY w)Nr   zipython_inline_figure.html)r(   rZ   r[   r\   r'   zutf-8)Útornado.templater)   r*   rÏ   rÐ   rÑ   Úwebagg_server_threadÚis_aliver   Únumberr   r5   r#   r©   Ú	read_textÚtemplateÚTemplateÚgenerater,   r6   r[   r\   r'   Údecode)r|   r   rÏ   ra   ÚtplÚts         r   Úipython_inline_displayrá   4  sä   € Ûä× Ñ Ô"Ûð)Ø× Ñ Ô"ð
 �]‰]€FÜ
Œt×'Ñ'×<Ñ<Ó>Ø+ó-ß-6©Y«[ð à×Ñ×!Ñ! #Ó&€AØ�:‰:Ü ×+Ñ+ØÜ×/Ñ/×9Ñ9Ø�}‰}Ü×#Ñ#ð ó %÷
 &,¡V¨G£_ð5øô ò )Ü#×,Ñ,Ô.Ü ×&Ñ&Ô(ùð)ús   žC. Ã.1D"Ä!D"c                   ó   — e Zd ZeZeZy)Ú_BackendWebAggN)r   r   r   r:   ÚFigureCanvasr#   ÚFigureManagerr   r   r   rã   rã   K  s   „ à%€LØ'�Mr   rã   ).Ú__doc__Ú
contextlibr   r¹   Úior   r�   rz   Úpathlibr   r±   rÁ   rË   Ú	threadingr   ÚImportErrorÚerrrÑ   Útornado.webÚtornado.ioloopÚtornado.websocketÚ
matplotlibr-   Úmatplotlib.backend_basesr   Úmatplotlib._pylab_helpersr   rJ   r	   r5   r
   r   Ú_apiÚ
deprecatedÚThreadr   r×   r#   ÚFigureCanvasWebAggCorer:   r§   ÚApplicationr)   rá   Úexportrã   r   r   r   ú<module>rù      s  ðÙ =õ &Û Ý Û Û Ý Û Û 
Û Û ðHÛó Û Û ã Ý -Ý )Ý )÷ ð ‡�×Ñ�UÓô1�9×#Ñ#ó 1ó ð1ð
 (�y×'Ñ'Ù;ô=Ð ô"˜$×2Ñ2ô "ô,(˜×4Ñ4ô (ôe˜Ÿ™×/Ñ/ô eòP5ð. 
‡�ô(�Xó (ó ñ(øðg	 ò HÙ
Ð=Ó
>ÀCÐGûðHús   ²D ÄD!Ä	DÄD!