§
    ‡ÛgQ  ã                   ód  — d 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mZ ddl	m
Z
mZmZ ddlmZ ddlmZ ddlmZmZmZ d	d
lmZmZmZ d	dlmZmZ d„ ZddddddddœZ G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ d¦  «        Z ej!         G d„ de¦  «        ¦   «         Z"dS )z,Interactive figures in the IPython notebook.é    )Ú	b64encodeN)ÚComm)ÚdisplayÚ
JavascriptÚHTML)Úis_interactive©ÚGcf)Ú_BackendÚ
CloseEventÚNavigationToolbar2é   )ÚFigureCanvasWebAggCoreÚFigureManagerWebAggÚNavigationToolbar2WebAgg)ÚTimerTornadoÚTimerAsyncioc                  óà   — d„ t          j        ¦   «         D ¦   «         } t          ¦   «         s/|                      dt	          t           j        ¦  «        › �¦  «         d                     | ¦  «        S )z˜
    Return a string showing the figure and connection status for the backend.

    This is intended as a diagnostic tool, and not for general use.
    c                 ó²   — g | ]T}d                       |j        j                             ¦   «         pd                      |j        ¦  «        |j        ¬¦  «        ‘ŒUS )z{fig} - {socket}z	Figure {})ÚfigÚsocket)ÚformatÚcanvasÚfigureÚ	get_labelÚnumÚweb_sockets)Ú.0Úmanagers     úW/granary/edev/quantum/lib/python3.11/site-packages/matplotlib/backends/backend_nbagg.pyú
<listcomp>z#connection_info.<locals>.<listcomp>   sq   € ð ð ð ð
 ð	 	×!Ò!Ø”Ô&×0Ò0Ñ2Ô2ð 4Ø×&Ò& w¤{Ñ3Ô3ØÔ&ð 	"ñ 	(ô 	(ðð ð ó    zFigures pending show: ú
)r
   Úget_all_fig_managersr   ÚappendÚlenÚfigsÚjoin)Úresults    r    Úconnection_infor*      sq   € ðð õ
 Ô/Ñ1Ô1ðñ ô €Fõ ÑÔð @Ø�ŠÐ>­sµ3´8©}¬}Ð>Ð>Ñ?Ô?Ð?Ø�9Š9�VÑÔÐr"   z
fa fa-homezfa fa-arrow-leftzfa fa-arrow-rightzfa fa-square-ozfa fa-arrowszfa fa-floppy-o)ÚhomeÚbackÚforwardÚzoom_to_rectÚmoveÚdownloadNc                   ó6   — e Zd Zd„ ej        dz   D ¦   «         ZdS )ÚNavigationIPyc                 óL   — g | ]!\  }}}}|t           v ¯||t           |         |f‘Œ"S © )Ú_FONT_AWESOME_CLASSES)r   ÚtextÚtooltip_textÚ
image_fileÚname_of_methods        r    r!   zNavigationIPy.<listcomp>8   sL   € ð 9ð 9ð 9áC�T˜<¨°^ð Õ"7Ð7Ð7ð ˜Ý'¨
Ô3°^ðEð
 8Ð7Ð7r"   ))ÚDownloadzDownload plotr0   r0   N)Ú__name__Ú
__module__Ú__qualname__r   Ú	toolitemsr4   r"   r    r2   r2   5   s:   € € € € € ð9ð 9ð (Ô1ØMñNð9ñ 9ô 9€I€I€Ir"   r2   c                   ó˜   ‡ — e Zd ZexZZˆ fd„Zed„ ¦   «         Zd„ Z	d„ Z
d„ Zed„ ¦   «         Zedˆ fd„	¦   «         Zd	„ Zd
„ Zd„ Zd„ Zˆ xZS )ÚFigureManagerNbAggc                 óZ   •— d| _         t          ¦   «                              ||¦  «         d S )NF)Ú_shownÚsuperÚ__init__)Úselfr   r   Ú	__class__s      €r    rD   zFigureManagerNbAgg.__init__C   s*   ø€ ØˆŒÝ‰Œ×Ò˜ Ñ%Ô%Ð%Ð%Ð%r"   c                 óà   ‡‡‡—  ||¦  «        Š | ‰|¦  «        Št          ¦   «         r(‰                     ¦   «          ‰                     ¦   «          ˆˆˆfd„}‰                     d|¦  «        Š‰S )Nc                 óZ   •— ‰                      ‰¦  «         t          j        ‰¦  «         d S ©N)Úmpl_disconnectr
   Údestroy)Úeventr   Úcidr   s    €€€r    rK   z6FigureManagerNbAgg.create_with_canvas.<locals>.destroyO   s-   ø€ Ø×!Ò! #Ñ&Ô&Ð&ÝŒK˜Ñ Ô Ð Ð Ð r"   Úclose_event)r   ÚshowÚ	draw_idleÚmpl_connect)ÚclsÚcanvas_classr   r   rK   r   rM   r   s        @@@r    Úcreate_with_canvasz%FigureManagerNbAgg.create_with_canvasG   s‘   øøø€ à�˜fÑ%Ô%ˆØ�#�f˜cÑ"Ô"ˆÝÑÔð 	Ø�LŠL‰NŒNˆNØ×ÒÑÔÐð	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð × Ò  °Ñ8Ô8ˆØˆr"   c                 ól   — t          t          t                               ¦   «         ¦  «        ¦  «         d S rI   )r   r   r@   Úget_javascript©rE   s    r    Ú
display_jszFigureManagerNbAgg.display_jsV   s-   € õ 	•
Õ-×<Ò<Ñ>Ô>Ñ?Ô?Ñ@Ô@Ð@Ð@Ð@r"   c                 óp  — | j         s)|                      ¦   «          |                      ¦   «          n| j                             ¦   «          d| _         t          | d¦  «        r| j                             | j        ¦  «         t          ¦   «         s(ddl	m
} |j                             | j        d ¦  «         d S d S )NTÚ_cidgcfr   r	   )rB   rX   Ú_create_commr   rP   ÚhasattrrJ   rZ   r   Úmatplotlib._pylab_helpersr
   r'   Úpopr   )rE   r
   s     r    rO   zFigureManagerNbAgg.show\   sÀ   € ØŒ{ð 	$Ø�OŠOÑÔÐØ×ÒÑÔÐÐàŒK×!Ò!Ñ#Ô#Ð#ØˆŒõ
 �4˜Ñ#Ô#ð 	5ØŒK×&Ò& t¤|Ñ4Ô4Ð4ÝÑÔð 	)Ø5Ð5Ð5Ð5Ð5Ð5ØŒH�LŠL˜œ 4Ñ(Ô(Ð(Ð(Ð(ð	)ð 	)r"   c                 ó<   — d| _         |                      ¦   «          dS )zJ
        A special method to re-show the figure in the notebook.

        FN)rB   rO   rW   s    r    ÚreshowzFigureManagerNbAgg.reshowm   s   € ð
 ˆŒØ�	Š	‰Œˆˆˆr"   c                 ó*   — t          | j        ¦  «        S rI   )Úboolr   rW   s    r    Ú	connectedzFigureManagerNbAgg.connectedu   s   € å�DÔ$Ñ%Ô%Ð%r"   Nc                 ó8  •— |€t          j        ¦   «         }n|}t          ¦   «                              |¬¦  «         |                     t          j        t          ¦  «        j        dz   	                    d¬¦  «        ¦  «         |€| 
                    ¦   «         S d S )N)Ústreamzweb_backend/js/nbagg_mpl.jszutf-8)Úencoding)ÚioÚStringIOrC   rV   ÚwriteÚpathlibÚPathÚ__file__ÚparentÚ	read_textÚgetvalue)rR   re   ÚoutputrF   s      €r    rV   z!FigureManagerNbAgg.get_javascripty   s�   ø€ àˆ>Ý”[‘]”]ˆFˆFàˆFÝ‰Œ×Ò fÐÑ-Ô-Ð-Ø�Š•g”l¥8Ñ,Ô,Ô3Ø5ñ6ç’i¨�iÑ1Ô1ñ	3ô 	3ð 	3ð ˆ>Ø—?’?Ñ$Ô$Ð$ð ˆ>r"   c                 óN   — t          | ¦  «        }|                      |¦  «         |S rI   )Ú
CommSocketÚadd_web_socket©rE   Úcomms     r    r[   zFigureManagerNbAgg._create_comm†   s(   € Ý˜$ÑÔˆØ×Ò˜DÑ!Ô!Ð!Øˆr"   c                 ó®   — |                       d¦  «         t          | j        ¦  «        D ]}|                     ¦   «          Œ|                      ¦   «          d S )NÚclose)Ú_send_eventÚlistr   Úon_closeÚclearup_closedrt   s     r    rK   zFigureManagerNbAgg.destroy‹   sW   € Ø×Ò˜Ñ!Ô!Ð!å˜Ô)Ñ*Ô*ð 	ð 	ˆDØ�MŠM‰OŒOˆOˆOØ×ÒÑÔÐÐÐr"   c                 ó´   — d„ | j         D ¦   «         | _         t          | j         ¦  «        dk    r)t          d| j        ¦  «                             ¦   «          dS dS )zClear up any closed Comms.c                 ó:   — h | ]}|                      ¦   «         ¯|’ŒS r4   )Úis_open)r   r   s     r    ú	<setcomp>z4FigureManagerNbAgg.clearup_closed.<locals>.<setcomp>”   s6   € ð 1ð 1ð 1 vØ%Ÿ~š~Ñ/Ô/ð1˜Fð 1ð 1ð 1r"   r   rN   N)r   r&   r   r   Ú_processrW   s    r    r{   z!FigureManagerNbAgg.clearup_closed’   si   € ð1ð 1°Ô1Að 1ñ 1ô 1ˆÔõ ˆtÔÑ Ô  AÒ%Ð%Ý�} d¤kÑ2Ô2×;Ò;Ñ=Ô=Ð=Ð=Ð=ð &Ð%r"   c                 ó8   ‡— ˆfd„| j         D ¦   «         | _         d S )Nc                 ó4   •— h | ]}|j         j        ‰k    ¯|’ŒS r4   )ru   Úcomm_id)r   r   rƒ   s     €r    r   z1FigureManagerNbAgg.remove_comm.<locals>.<setcomp>›   s2   ø€ ð ?ð ?ð ? vØ%œ{Ô2°gÒ=Ð=ð #Ø=Ð=Ð=r"   )r   )rE   rƒ   s    `r    Úremove_commzFigureManagerNbAgg.remove_commš   s6   ø€ ð?ð ?ð ?ð ?°Ô1Að ?ñ ?ô ?ˆÔÐÐr"   rI   )r;   r<   r=   r2   Ú_toolbar2_classÚ
ToolbarClsrD   ÚclassmethodrT   rX   rO   r`   Úpropertyrc   rV   r[   rK   r{   r„   Ú__classcell__)rF   s   @r    r@   r@   @   s  ø€ € € € € Ø#0Ð0€O�jð&ð &ð &ð &ð &ð ðð ñ „[ððAð Að Að)ð )ð )ð"ð ð ð ð&ð &ñ „Xð&ð ð
%ð 
%ð 
%ð 
%ð 
%ñ „[ð
%ðð ð ð
ð ð ð>ð >ð >ð?ð ?ð ?ð ?ð ?ð ?ð ?r"   r@   c                   ó   — e Zd ZeZdS )ÚFigureCanvasNbAggN)r;   r<   r=   r@   Úmanager_classr4   r"   r    r‹   r‹   Ÿ   s   € € € € € Ø&€M€M€Mr"   r‹   c                   ó6   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	rr   aL  
    Manages the Comm connection between IPython and the browser (client).

    Comms are 2 way, with the CommSocket being able to publish a message
    via the send_json method, and handle a message with on_message. On the
    JS side figure.send_message and figure.ws.onmessage do the sending and
    receiving respectively.

    c                 óÔ  ‡ ‡— d ‰ _         ‰‰ _        t          t          j        ¦   «         ¦  «        ‰ _        t          t          d‰ j        z  ¦  «        ¦  «         	 t          dd‰ j        i¬¦  «        ‰ _        n"# t          $ r}t          d¦  «        |‚d }~ww xY w‰ j                             ‰ j        ¦  «         ‰ j        Šd‰ _        ˆˆ fd„}‰ j                             |¦  «         d S )Nz<div id=%r></div>Ú
matplotlibÚid)ÚdatazTUnable to create an IPython notebook Comm instance. Are you in the IPython notebook?Fc                 ó€   •— d‰_         ‰                     | d         d         ¦  «         ‰                     ¦   «          d S )NTÚcontentrƒ   )Ú
_ext_closer„   r{   )Úclose_messager   rE   s    €€r    Ú	_on_closez&CommSocket.__init__.<locals>._on_close¿   s@   ø€ Ø"ˆDŒOØ×Ò ¨iÔ 8¸Ô CÑDÔDÐDØ×"Ò"Ñ$Ô$Ð$Ð$Ð$r"   )Úsupports_binaryr   ÚstrÚuuidÚuuid4r   r   r   ru   ÚAttributeErrorÚRuntimeErrorÚon_msgÚ
on_messager”   rz   )rE   r   Úerrr–   s   ``  r    rD   zCommSocket.__init__­   s  øø€ Ø#ˆÔØˆŒÝ�œ
™œÑ%Ô%ˆŒ	õ 	•Ð(¨4¬9Ñ4Ñ5Ô5Ñ6Ô6Ð6ð	5Ý˜\°°t´yÐ0AÐBÑBÔBˆDŒIˆIøÝð 	5ð 	5ð 	5Ýð  +ñ ,ô ,à14ð5øøøøð	5øøøð 	Œ	×Ò˜œÑ)Ô)Ð)à”,ˆØˆŒð	%ð 	%ð 	%ð 	%ð 	%ð 	%ð
 	Œ	×Ò˜9Ñ%Ô%Ð%Ð%Ð%s   ÁA9 Á9
BÂBÂBc                 ó*   — | j         p| j        j         S rI   )r”   ru   Ú_closedrW   s    r    r~   zCommSocket.is_openÆ   s   € Ø”OÐ8 t¤yÔ'8Ð9Ð9r"   c                 óˆ   — |                       ¦   «         r-	 | j                             ¦   «          d S # t          $ r Y d S w xY wd S rI   )r~   ru   rw   ÚKeyErrorrW   s    r    rz   zCommSocket.on_closeÉ   s]   € ð �<Š<‰>Œ>ð 	ðØ”	—’Ñ!Ô!Ð!Ð!Ð!øÝð ð ð à��ðøøøð	ð 	s   –1 ±
?¾?c                 ób   — | j                              dt          j        |¦  «        i¦  «         d S )Nr‘   )ru   ÚsendÚjsonÚdumps)rE   r“   s     r    Ú	send_jsonzCommSocket.send_jsonÓ   s+   € ØŒ	�Š˜¥¤
¨7Ñ 3Ô 3Ð4Ñ5Ô5Ð5Ð5Ð5r"   c                 óü   — | j         r!| j                             ddi|g¬¦  «         d S t          |¦  «                             d¦  «        }d                     |¦  «        }| j                             d|i¦  «         d S )NÚblobz	image/png)ÚbuffersÚasciizdata:image/png;base64,{0}r‘   )r—   ru   r¥   r   Údecoder   )rE   rª   r‘   Údata_uris       r    Úsend_binaryzCommSocket.send_binaryÖ   s   € ØÔð 	/ØŒI�NŠN˜F KÐ0¸4¸&ˆNÑAÔAÐAÐAÐAõ ˜T‘?”?×)Ò)¨'Ñ2Ô2ˆDØ2×9Ò9¸$Ñ?Ô?ˆHØŒI�NŠN˜F HÐ-Ñ.Ô.Ð.Ð.Ð.r"   c                 ó&  — t          j        |d         d         ¦  «        }|d         dk    r/|                      ¦   «          | j                             ¦   «          d S |d         dk    r|d         | _        d S | j                             |¦  «         d S )Nr“   r‘   ÚtypeÚclosingr—   Úvalue)r¦   Úloadsrz   r   r{   r—   Úhandle_json)rE   Úmessages     r    rž   zCommSocket.on_messageà   s’   € õ ”*˜W YÔ/°Ô7Ñ8Ô8ˆØ�6Œ?˜iÒ'Ð'Ø�MŠM‰OŒOˆOØŒL×'Ò'Ñ)Ô)Ð)Ð)Ð)Ø�VŒ_Ð 1Ò1Ð1Ø#*¨7Ô#3ˆDÔ Ð Ð àŒL×$Ò$ WÑ-Ô-Ð-Ð-Ð-r"   N)
r;   r<   r=   Ú__doc__rD   r~   rz   r¨   r¯   rž   r4   r"   r    rr   rr   £   sx   € € € € € ðð ð&ð &ð &ð2:ð :ð :ðð ð ð6ð 6ð 6ð/ð /ð /ð.ð .ð .ð .ð .r"   rr   c                   ó   — e Zd ZeZeZdS )Ú_BackendNbAggN)r;   r<   r=   r‹   ÚFigureCanvasr@   ÚFigureManagerr4   r"   r    r¹   r¹   ð   s   € € € € € à$€LØ&€M€M€Mr"   r¹   )#r·   Úbase64r   rg   r¦   rj   r™   Úipykernel.commr   ÚIPython.displayr   r   r   r�   r   r]   r
   Úmatplotlib.backend_basesr   r   r   Úbackend_webagg_corer   r   r   r   r   r*   r5   r2   r@   r‹   rr   Úexportr¹   r4   r"   r    ú<module>rÂ      sI  ðØ 2Ð 2ð
 Ð Ð Ð Ð Ð Ø 	€	€	€	Ø €€€Ø €€€Ø €€€à Ð Ð Ð Ð Ð Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à %Ð %Ð %Ð %Ð %Ð %Ø )Ð )Ð )Ð )Ð )Ð )Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MðKð Kð Kð Kð Kð Kð Kð Kð Kð Kð ð  ð  ð  ð  ð  ð  ð  ðð ð ð& ØØ"Ø$ØØ Ø
ðð Ð ð9ð 9ð 9ð 9ð 9Ð,ñ 9ô 9ð 9ð\?ð \?ð \?ð \?ð \?Ð,ñ \?ô \?ð \?ð~'ð 'ð 'ð 'ð 'Ð.ñ 'ô 'ð 'ðJ.ð J.ð J.ð J.ð J.ñ J.ô J.ð J.ðZ 
„ð'ð 'ð 'ð 'ð '�Hñ 'ô 'ñ „ð'ð 'ð 'r"   