o
    û›hÚ-  ã                   @   sT  d Z ddlmZ ddlmZ ddlZe d¡Ze d¡ ddl	m
Z
 ddlmZ dd	lmZ ddlZdd
lmZ ddlmZ ddlmZmZ ddlmZ ddlmZ dd„ Zdd„ Ze  d¡dd„ ƒZ!dd„ Z"ddddddœZ#dd„ Z$d d!„ Z%d"d#„ Z&d$d%„ Z'd&d'„ Z(G d(d)„ d)e)ƒZ*d*d+„ Z+d,d-„ Z,ej- .d.g d/¢¡d0d1„ ƒZ/d2d3„ Z0d4d5„ Z1dS )6zTests for pylab tools module.
é    )Ú
a2b_base64)ÚBytesIONÚ
matplotlibZAgg)ÚFigure)Úpyplot)Úbackend_inline)Úget_ipython)ÚInteractiveShell)Ú_PNGÚ_JPEGé   )Ú
pylabtools)Ú
decoratorsc                  C   sz   t  ¡ } t | d¡d u sJ ‚t  d¡ t  ¡ } |  ddd¡}| g d¢¡ t  ¡  t | d¡d d…  ¡ }d|v s;J ‚d S )NÚsvgÚallé   ©r   r   é   éd   zdoctype svg)	ÚpltÚfigureÚptÚprint_figureÚcloseÚadd_subplotÚplotÚdrawÚlower)ÚfigÚaxr   © r    úXc:\Users\shubh\Videos\agent\nova\Lib\site-packages\IPython/core/tests/test_pylabtools.pyÚtest_figure_to_svg   s   
r"   c               
   C   sf   ddl m}  tƒ }|  dd¡}z	| |d¡ W dS  ty2 } z|jj}t 	d||f ¡|‚d}~ww )z0Skip if PIL can't write JPEGs to BytesIO objectsr   )ÚImageÚRGB)é   r%   Újpegz'PIL can't write JPEG to BytesIO: %s: %sN)
ZPILr#   r   ÚnewÚsaveÚ	ExceptionÚ	__class__Ú__name__ÚpytestÚskip)r#   ÚbufZimgÚeZenamer    r    r!   Ú_check_pil_jpeg_bytes-   s   €þr0   z	PIL.Imagec                  C   sd   t ƒ  t ¡ } |  ddd¡}| g d¢¡ t ¡  tj| dddid�d d…  ¡ }| 	t
¡s0J ‚d S )Nr   r   r&   Úoptimizeé2   )Z
pil_kwargsr   )r0   r   r   r   r   r   r   r   r   Ú
startswithr   )r   r   r&   r    r    r!   Útest_figure_to_jpeg:   s    r4   c                  C   sˆ   t  ¡ } t | ¡d ksJ ‚t  d¡ t  ¡ } |  ddd¡}| g d¢¡ t  ¡  t | ¡\}}| t	¡s6J ‚d|v s<J ‚d|v sBJ ‚d S )Nr   r   r   ÚwidthÚheight)
r   r   r   Zretina_figurer   r   r   r   r3   r
   )r   r   ÚpngÚmdr    r    r!   Útest_retina_figureE   s   
r9   ú	image/pngz
image/jpegzapplication/pdfzimage/svg+xml)r7   r&   ÚpdfÚretinar   c                  C   s`   t ƒ } t ¡ D ]&\}}t | |¡ | jj ¡ D ]\}}||kr&t|v s%J ‚qt|vs,J ‚qqd S ©N)r   Ú_fmt_mime_mapÚitemsr   Úselect_figure_formatsÚdisplay_formatterÚ
formattersr   )ÚipÚfmtZactive_mimeÚmimeÚfr    r    r!   Útest_select_figure_formats_str]   s   üþrG   c            
      C   sÂ   t ƒ } tdd�}tj| dfi |¤Ž | jjd }| t¡}|j}|}d|d< d|d< ||ks0J ‚t	 
¡ }| ddd¡}| g d	¢¡ t	 ¡  d|_||ƒ}t|tƒsTJ ‚t|ƒ}	|	 t¡s_J ‚d S )
NZtight)Zbbox_inchesr7   r:   TÚbase64rD   r   r   )r   Údictr   r@   rA   rB   Zlookup_by_typer   Úkeywordsr   r   r   r   r   ÚenabledÚ
isinstanceÚstrr   r3   r
   )
rC   ÚkwargsÚ	formatterrF   ÚcellÚexpectedr   r   r7   Z	png_bytesr    r    r!   Ú!test_select_figure_formats_kwargsg   s&   

rR   c                  C   sv   t ƒ } ddhdgddhfD ]+}dd„ |D ƒ}t | |¡ | jj ¡ D ]\}}||v r1t|v s0J ‚q"t|vs7J ‚q"qd S )Nr7   r   )r&   r;   r<   c                 S   ó   h | ]}t | ’qS r    ©r>   ©Ú.0rD   r    r    r!   Ú	<setcomp>†   ó    z1test_select_figure_formats_set.<locals>.<setcomp>)r   r   r@   rA   rB   r?   r   )rC   ÚfmtsÚactive_mimesrE   rF   r    r    r!   Útest_select_figure_formats_set~   s   üüør[   c                  C   s¶   t ƒ } t t¡� t | d¡ W d   ƒ n1 sw   Y  t t¡� t | ddh¡ W d   ƒ n1 s6w   Y  t t¡� t | g d¢¡ W d   ƒ d S 1 sTw   Y  d S )NZfoor7   )r<   r;   ÚbarÚbad)r   r,   ÚraisesÚ
ValueErrorr   r@   )rC   r    r    r!   Útest_select_figure_formats_badŽ   s   ÿÿ"ÿr`   c                  C   s2   i } t j| dd� d| v sJ ‚| d tksJ ‚d S )NF)Z
import_allr   Únp)r   Úimport_pylabra   )Únsr    r    r!   Útest_import_pylab—   s   rd   c                   @   sd   e Zd ZG dd„ deƒZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
e e ¡  ¡dd„ ƒZdS )ÚTestPylabSwitchc                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )zTestPylabSwitch.Shellc                    s   d| j j_tƒ  ¡  dS )z:Sets up the command history, and starts regular autosaves.z:memory:N)ÚconfigZHistoryManagerZ	hist_fileÚsuperÚinit_history)Úself©r*   r    r!   rh       s   
z"TestPylabSwitch.Shell.init_historyc                 C   ó   d S r=   r    )ri   Úguir    r    r!   Ú
enable_gui¥   s   z TestPylabSwitch.Shell.enable_gui)r+   Ú
__module__Ú__qualname__rh   rm   Ú__classcell__r    r    rj   r!   ÚShellŸ   s    rq   c                    sr   dd l ‰ ‡ fdd„}ˆ j| _ˆ j| _tdd�ˆ _tdd�ˆ _tj| _|t_tj	| _
dd„ t_	tj| _dd„ t_d S )	Nr   c                    s   | ˆ j d< d S )NÚbackend)ÚrcParams©rr   ©r   r    r!   Úact_mplª   s   z-TestPylabSwitch.setup_method.<locals>.act_mplZQtAggrt   c                  _   rk   r=   r    ©ÚaÚkwr    r    r!   Ú<lambda>·   ó    z.TestPylabSwitch.setup_method.<locals>.<lambda>c                  _   rk   r=   r    rw   r    r    r!   rz   ¹   r{   )r   rs   Ú_saved_rcParamsÚrcParamsOrigÚ_saved_rcParamsOrigrI   r   Úactivate_matplotlibÚ_save_amrb   Ú_save_ipr   Úconfigure_inline_supportÚ	_save_cis)ri   rv   r    ru   r!   Úsetup_method¨   s   
zTestPylabSwitch.setup_methodc                 C   s4   | j t_| jt_| jt_dd l}| j	|_
| j|_d S )Nr   )r€   r   r   r�   rb   rƒ   r   r‚   r   r|   rs   r~   r}   )ri   r   r    r    r!   Úteardown_method»   s   zTestPylabSwitch.teardown_methodc                 C   sÒ   |   ¡ }| d ¡\}}|dksJ ‚|jdksJ ‚| d¡\}}|d u s%J ‚|jdks,J ‚| d¡\}}|dks9J ‚|jdks@J ‚| d¡\}}|d u sMJ ‚|jdksTJ ‚| ¡ \}}|dks`J ‚|jdksgJ ‚d S )NÚqtÚinline©rq   Úenable_matplotlibZpylab_gui_select©ri   Úsrl   rr   r    r    r!   Útest_qtÃ   s    zTestPylabSwitch.test_qtc                 C   s„   |   ¡ }| d¡\}}|d u sJ ‚|jd ksJ ‚| d¡\}}|d u s%J ‚|jd ks,J ‚| d¡\}}|dks9J ‚|jdks@J ‚d S )Nr‡   r†   rˆ   rŠ   r    r    r!   Útest_inlineÙ   s   zTestPylabSwitch.test_inlinec                 C   s˜   |   ¡ }| d¡\}}|du sJ ‚dh}dd„ |D ƒ}t ||¡ | d¡\}}|du s.J ‚|jj ¡ D ]\}}||v rCt|v sBJ ‚q4t|vsIJ ‚q4dS )z<Using '%matplotlib inline' twice should not reset formattersr‡   Nr7   c                 S   rS   r    rT   rU   r    r    r!   rW   ï   rX   z4TestPylabSwitch.test_inline_twice.<locals>.<setcomp>)rq   r‰   r   r@   rA   rB   r?   r   )ri   rC   rl   rr   rY   rZ   rE   rF   r    r    r!   Útest_inline_twiceç   s   üz!TestPylabSwitch.test_inline_twicec                 C   s\   |   ¡ }| d¡\}}|dksJ ‚|jdksJ ‚| d¡\}}|dks%J ‚|jdks,J ‚d S )Nr†   Úgtk3rˆ   rŠ   r    r    r!   Útest_qt_gtkû   s   zTestPylabSwitch.test_qt_gtkc                 C   sÄ   d}d}t jdk}|  ¡ }| |¡ |r/t t¡� | |¡ W d   ƒ n1 s)w   Y  n| |¡ | d|¡ |rZt t¡� | d|¡ W d   ƒ d S 1 sSw   Y  d S | d|¡ d S )Nú)module://matplotlib_inline.backend_inlinez)module://matplotlib_inline.Backend_inline)r   é	   r   r   )r   Ú__version_info__rq   r‰   r,   r^   ÚRuntimeErrorZrun_line_magic)ri   Zall_lowercaseZsome_uppercaseZmpl3_9_1r‹   r    r    r!   Ú'test_backend_module_name_case_sensitive  s"   

ÿ€
"ÿz7TestPylabSwitch.test_backend_module_name_case_sensitiveN)r+   rn   ro   r	   rq   r„   r…   rŒ   r�   rŽ   r�   ÚdecZskipifr   Ú_matplotlib_manages_backendsr•   r    r    r    r!   re   ž   s    	
re   c                  C   s   dD ]	} | t jvsJ ‚qd S )N)Úaggr   r;   Úps)r   Zbackend2gui)Úkr    r    r!   Útest_no_gui_backends  s   ÿr›   c                  C   s   t ƒ } d | _t | ¡ d S r=   )r   Zcanvasr   r   )r   r    r    r!   Útest_figure_no_canvas"  s   rœ   z$name, expected_gui, expected_backend))r�   r�   Úgtk3agg)Úgtk4rž   Úgtk4agg)ÚheadlessNr˜   )Úosxr¡   Úmacosx)r†   r†   Úqtagg)Úqt5r¤   Úqt5agg)Úqt6r¦   r£   )Útkr§   Útkagg)Úwxr©   Úwxagg)r˜   Nr˜   )ÚcairoNr«   )r;   Nr;   )r™   Nr™   )r   Nr   )ÚtemplateNr¬   )r�   r�   r�   )Ú	gtk3cairor�   r­   )rŸ   rž   rŸ   )Ú	gtk4cairorž   r®   )r¢   r¡   r¢   )Únbaggr¯   r¯   )Únotebookr¯   r°   )r£   r†   r£   )Úqtcairor†   r±   )r¥   r¤   r¥   )Úqt5cairor¤   r²   )r¨   r§   r¨   )Útkcairor§   r³   )Úwebaggr´   r´   )rª   r©   rª   )Úwxcairor©   rµ   c                 C   s    t  ¡ }|s)|  d¡s|  d¡s| dv rt ¡  n| dkr d}n	| dkr)||}}t  | ¡\}}|sB|r8| ¡ nd }|r@| ¡ nd }||ksHJ ‚||ksNJ ‚d S )Nr˜   r«   )r    r¢   r;   r™   r   r¬   r¦   r£   r°   )r   r—   Úendswithr,   r-   Úfind_gui_and_backendr   )ÚnameZexpected_guiÚexpected_backendZmpl_manages_backendsrl   rr   r    r    r!   Útest_backend_builtin(  s$   +ÿþ

rº   c                  C   s:   t  d¡\} }| d u sJ ‚t  ¡ rdnd}||ksJ ‚d S )Nr‡   r‘   )r   r·   r—   )rl   rr   r¹   r    r    r!   Útest_backend_entry_pointj  s   ÿýr»   c                   C   sF   t  t ¡ rtnt¡� t d¡ W d   ƒ d S 1 sw   Y  d S )Nzname-does-not-exist)r,   r^   r   r—   r”   ÚKeyErrorr·   r    r    r    r!   Útest_backend_unknownu  s   "ÿr½   )2Ú__doc__Úbinasciir   Úior   r,   Zimportorskipr   ZuseZmatplotlib.figurer   r   r   Zmatplotlib_inliner   Únumpyra   ZIPython.core.getipythonr   ZIPython.core.interactiveshellr	   ZIPython.core.displayr
   r   Ú r   r   ZIPython.testingr   r–   r"   r0   Zskip_withoutr4   r9   r>   rG   rR   r[   r`   rd   Úobjectre   r›   rœ   ÚmarkZparametrizerº   r»   r½   r    r    r    r!   Ú<module>   sR    



û
	þ
&