Ë
    ¨e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@                  d„ ¬«      Z! G d„ dejD                  «      Z" G d„ dejF                  «      Z$ G d„ dejJ                  jL                  «      Z'd„ Z(ejR                   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ÚTimerTornadoc                  ón   — t         j                  j                  j                  «       j	                  «       S ©N)ÚtornadoÚioloopÚIOLoopÚinstanceÚstart© ó    ú`/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/matplotlib/backends/backend_webagg.pyú<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_show/   sˆ   € ä×$Ñ$Ô&à/×6Ñ6Ü%×-Ñ-Ü"×'Ñ'Ü$×/Ñ/ð 7ó 1ˆô
 �<‰<Ð0Ò1ÛØ—?‘? 3Ô'ÜÐ.¨s¨eÐ4Õ5äÐ*¨3¨%Ð0Ô1ä×ÑÕ!r   )Ú__name__Ú
__module__Ú__qualname__ÚcoreÚNavigationToolbar2WebAggÚ_toolbar2_classÚclassmethodr*   r   r   r   r   r   ,   s"   „ Ø×3Ñ3€OàØ"&ó "ó ñ"r   r   c                   ó   — e Zd ZeZy)ÚFigureCanvasWebAggN)r+   r,   r-   r   Úmanager_classr   r   r   r3   r3   B   s   „ Ø'�Mr   r3   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_bytes©Úselfs    r   ÚgetzWebAggApplication.FavIcon.getK   s9   € Ø�O‰O˜N¨KÔ8Ø�J‰J”tœC×-Ñ-Ó/Ø3ó5ß5?±Z³\õCr   N©r+   r,   r-   r@   r   r   r   ÚFavIconr7   J   s   „ ó	Cr   rB   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   rJ   z+WebAggApplication.SingleFigurePage.__init__Q   ó   ø€ Ø(ˆ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_managerrM   Úhostr"   Úrenderr.   r/   rV   rW   )r?   ÚfignumÚmanagerrT   s       r   r@   z&WebAggApplication.SingleFigurePage.getU   st   € Ü˜“[ˆFÜ×)Ñ)¨&Ó1ˆGà˜TŸ\™\×.Ñ.Ð/°·±Ð/@ÀÐBˆFØ�K‰KØ$Ø—‘ØØÜ×7Ñ7×AÑAØ—~‘~ð õ 'r   ©r+   r,   r-   rJ   r@   Ú__classcell__©rO   s   @r   ÚSingleFigurePagerD   P   s   ø„ Ø?Aö 	=ö	'r   ra   c                   ó*   ‡ — e Zd Zddœˆ fd„
Zd„ Zˆ xZS )ú WebAggApplication.AllFiguresPagerE   rF   c                ó6   •— || _         t        ‰| �  ||fi |¤Ž y r   rH   rK   s        €r   rJ   z)WebAggApplication.AllFiguresPage.__init__c   rP   r   c           	      ó
  — d| j                   j                  › | j                  › d�}| j                  d| j                  |t	        t
        j                  j                  «       «      t        j                  j                  ¬«       y )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.getg   se   € Ø˜TŸ\™\×.Ñ.Ð/°·±Ð/@ÀÐBˆFØ�K‰KØ"Ø—‘ØÜœsŸx™xŸ~™~Ó/Ó0Ü×7Ñ7×AÑAð õ Cr   r^   r`   s   @r   ÚAllFiguresPagerc   b   s   ø„ Ø?Aö 	=ö	Cr   rj   c                   ó   — e Zd Zd„ Zy)úWebAggApplication.MplJsc                 ó†   — | j                  dd«       t        j                  j                  «       }| j	                  |«       y )Nr9   zapplication/javascript)r:   r.   r   Úget_javascriptr;   )r?   Ú
js_contents     r   r@   zWebAggApplication.MplJs.getq   s1   € Ø�O‰O˜NÐ,DÔEä×1Ñ1×@Ñ@ÓBˆJà�J‰J�zÕ"r   NrA   r   r   r   ÚMplJsrl   p   s   „ ó	#r   rp   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 )Nr9   Úbinary)r!   )rX   r   rY   r:   Ú	mimetypesÚ	types_mapr@   r   rW   ÚfigureÚsavefigr;   Úgetvalue)r?   r\   Úfmtr]   Úbuffs        r   r@   zWebAggApplication.Download.gety   sv   € Ü˜“[ˆFÜ×)Ñ)¨&Ó1ˆGØ�O‰OØ¤	× 3Ñ 3× 7Ñ 7¸¸XÓ FôHä“9ˆDØ�N‰N×!Ñ!×)Ñ)¨$°sÐ)Ô;Ø�J‰J�t—}‘}“Õ'r   NrA   r   r   r   ÚDownloadrr   x   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)rX   r\   r   rY   r]   Úadd_web_socketÚhasattrr€   )r?   r\   s     r   r&   z WebAggApplication.WebSocket.open…   sR   € Ü˜f›+ˆDŒKÜ×.Ñ.¨t¯{©{Ó;ˆDŒLØ�L‰L×'Ñ'¨Ô-Ü�t˜]Ô+Ø× Ñ  Õ&ð ,r   c                 ó:   — | j                   j                  | «       y r   )r]   Ú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   rY   r\   Úhandle_json)r?   Úmessager]   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)rt   zdata:image/png;base64,{}Úbase64ú
rE   )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ˆ   r&   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   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__©   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)NrF   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)r(   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)Ústopr'   ÚsysÚstdoutÚflushÚstarted)r(   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   r'   r¼   r½   r¾   r   )r(   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)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   F   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   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ä   € Ûä× Ñ Ô"Ûð)Ø× Ñ Ô"ð
 �]‰]€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-   r3   ÚFigureCanvasr   ÚFigureManagerr   r   r   rÞ   rÞ   E  s   „ à%€LØ'�Mr   rÞ   )+Ú__doc__Ú
contextlibr   r´   Úior   rŠ   ru   Úpathlibr   r¬   r¼   rÆ   Ú	threadingr   ÚImportErrorÚerrrÌ   Útornado.webÚtornado.ioloopÚtornado.websocketÚ
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Ûó Û Û ã Ý -Ý )Ý )÷ ð (�y×'Ñ'Ù;ô=Ð ô"˜$×2Ñ2ô "ô,(˜×4Ñ4ô (ôe˜Ÿ™×/Ñ/ô eòP5ð. 
‡�ô(�Xó (ó ñ(øð[	 ò HÙ
Ð=Ó
>ÀCÐGûðHús   ²C ÃC.Ã 	C)Ã)C.