U
    Âmœdö)  ã                   @   s2  d dl Z d dlZd dlmZ d dlmZmZ d dlZd dl	m
Z
mZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ dd„ Zdd„ Zdd„ Z dd„ Z!edgdd�dd„ ƒZ"dd„ Z#dd„ Z$ej% &d¡dd„ ƒZ'dd „ Z(d!d"„ Z)d#d$„ Z*d%d&„ Z+d'd(„ Z,d)d*„ Z-d+d,„ Z.dS )-é    N)Úassert_array_almost_equal)ÚImageÚTiffTags)ÚcollectionsÚpatheffectsÚpyplotÚ
transformsÚrcParamsÚ
rc_context)ÚRendererAgg)ÚFigure)Úimread)ÚPath)Úimage_comparison)ÚIdentityTransformc                  C   s„   t ddgƒ} |  d¡ | j d¡ t ¡ }| j||  ¡ dd� | d¡ | j||  ¡ dd� | d¡ t	t
t|ƒd ƒd	d
d� d S )Né   çš™™™™™Ù?)r   r   r   ç      Ð?Únone)Z	facecolorZ	edgecolorr   ©r   r   )ç        ç      ð?r   r   é   )Údecimal)r   Zset_facecolorÚpatchZ	set_alphaÚioÚBytesIOÚsavefigZget_facecolorÚseekr   Útupler   )ÚfigÚbuf© r"   úR/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/matplotlib/tests/test_agg.pyÚtest_repeated_save_with_alpha   s$    
þ
þ
þr$   c               	   C   sf   t  ¡ } t ¡ \}}t tddgddgddgddgddggƒg¡}| |¡ | dd¡ t 	| ¡ d S )Niöÿÿÿé   é
   éûÿÿÿgü©ñÒMbP?r   )
r   r   ÚpltÚsubplotsr   ZPathCollectionr   Z
add_artistÚset_xlimr   )ÚbuffÚfÚaxZ
collectionr"   r"   r#   Ú!test_large_single_path_collection3   s    &ÿ
r.   c                  C   sV   t  d¡\} }d}t |¡}| |¡ | ||d |d ¡ t ¡ }| j|dd� d S )Nr   éè  gš™™™™™é?g333333ó?Úpng©Úformat)	r(   r)   ÚnpZarangeZsemilogxZfill_betweenr   r   r   )r    r-   ZstepsÚdatar!   r"   r"   r#   Útest_marker_with_nanA   s    

r5   c                  C   sR   t  ¡ } tƒ }| ¡ }t d¡}|d d d…  d9  < | |¡ |j| dd� d S )Né † é   éÿÿÿÿr0   r1   )r   r   r   r)   r3   ÚonesÚplotr   )r+   r    r-   Úpointsr"   r"   r#   Útest_long_pathM   s    

r<   zagg_filter.pngT)Zremove_textc                     sz  dd„ ‰d%‡fdd„	‰G dd„ dƒ} G dd	„ d	| ƒ‰G ‡fd
d„d| ƒ‰ G ‡ ‡fdd„d| ƒ}t  ¡ \}}|jdddgdddgdddddddd�	\}|jdddgdddgdddddddd�	\}|dƒ}||fD ]v}| ¡ }| ¡ }	| ||	¡\}
|
 |¡ tj| ¡ |j	dddd �}|
 
|¡ |
 | ¡ d ¡ |
 |¡ |
 d!¡ qÎ| d"d#¡ | d"d#¡ |j d$¡ |j d$¡ d S )&Nc                 S   sv   t jd| d  | |dd…  | d| d  | d| d…  f }t  |¡}t j|| ¡  |dd�}||d | d … S )Nr7   r   r   r8   Zsame)Úmode)r3   Zr_ZhanningZconvolveÚsum)ÚxÚ
window_lenÚsÚwÚyr"   r"   r#   Úsmooth1dY   s    6ÿ
z!test_agg_filter.<locals>.smooth1dr   c                    s:   t t|ƒdƒd d }t ˆ d| |¡} t ˆ d| |¡} | S )Nr   r7   r   r   )ÚmaxÚintr3   Zapply_along_axis)ÚAÚsigmar@   )rD   r"   r#   Úsmooth2da   s    z!test_agg_filter.<locals>.smooth2dc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )z#test_agg_filter.<locals>.BaseFilterc                 S   s   dS )Nr   r"   ©ÚselfÚdpir"   r"   r#   Úget_padi   s    z+test_agg_filter.<locals>.BaseFilter.get_padc                 S   s   t dƒ‚d S )Nz"Should be overridden by subclasses)ÚNotImplementedError)rK   Ú
padded_srcrL   r"   r"   r#   Úprocess_imagel   s    z1test_agg_filter.<locals>.BaseFilter.process_imagec                 S   s@   |   |¡}t |||f||fdgd¡}|  ||¡}|| | fS )Nr   Zconstant)rM   r3   ÚpadrP   )rK   ÚimrL   rQ   rO   Ú	tgt_imager"   r"   r#   Ú__call__o   s    
ÿz,test_agg_filter.<locals>.BaseFilter.__call__N)Ú__name__Ú
__module__Ú__qualname__rM   rP   rT   r"   r"   r"   r#   Ú
BaseFilterg   s   rX   c                   @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
z%test_agg_filter.<locals>.OffsetFilterr   c                 S   s
   || _ d S ©N)Úoffsets)rK   rZ   r"   r"   r#   Ú__init__x   s    z.test_agg_filter.<locals>.OffsetFilter.__init__c                 S   s   t t| jƒd | ƒS )NéH   )rF   rE   rZ   rJ   r"   r"   r#   rM   {   s    z-test_agg_filter.<locals>.OffsetFilter.get_padc                 S   sH   | j \}}tj|t|d | ƒdd�}tj|t|d | ƒ dd�}|S )Nr\   r   )Zaxisr   )rZ   r3   ZrollrF   )rK   rO   rL   ÚoxZoyZa1Za2r"   r"   r#   rP   ~   s    
z3test_agg_filter.<locals>.OffsetFilter.process_imageN)r   ©rU   rV   rW   r[   rM   rP   r"   r"   r"   r#   ÚOffsetFilterv   s   
r_   c                       s.   e Zd ZdZddd„Zdd„ Z‡ fdd	„Zd
S )z'test_agg_filter.<locals>.GaussianFilterzSimple Gaussian filter.ç      à?©r   r   r   c                 S   s   || _ || _|| _d S rY   )rH   ÚalphaÚcolor)rK   rH   rb   rc   r"   r"   r#   r[   ‡   s    z0test_agg_filter.<locals>.GaussianFilter.__init__c                 S   s   t | jd d | ƒS ©Nr   r\   )rF   rH   rJ   r"   r"   r#   rM   Œ   s    z/test_agg_filter.<locals>.GaussianFilter.get_padc                    sh   t  |¡}| j|d d …d d …d d…f< ˆ |d d …d d …df | j | jd | ƒ|d d …d d …df< |S rd   )r3   Z
empty_likerc   rb   rH   )rK   rO   rL   rS   ©rI   r"   r#   rP   �   s    
ÿz5test_agg_filter.<locals>.GaussianFilter.process_imageN)r`   ra   )rU   rV   rW   Ú__doc__r[   rM   rP   r"   re   r"   r#   ÚGaussianFilter„   s   
rg   c                       s,   e Zd Zd‡ ‡fdd„	Zdd„ Zdd	„ Zd
S )z)test_agg_filter.<locals>.DropShadowFilterç333333Ó?ra   r   c                    s   ˆ |||ƒ| _ ˆ|ƒ| _d S rY   )Úgauss_filterÚoffset_filter)rK   rH   rb   rc   rZ   ©rg   r_   r"   r#   r[   ˜   s    z2test_agg_filter.<locals>.DropShadowFilter.__init__c                 S   s   t | j |¡| j |¡ƒS rY   )rE   ri   rM   rj   rJ   r"   r"   r#   rM   œ   s    
ÿz1test_agg_filter.<locals>.DropShadowFilter.get_padc                 S   s    | j  ||¡}| j ||¡}|S rY   )ri   rP   rj   )rK   rO   rL   Út1Út2r"   r"   r#   rP       s    z7test_agg_filter.<locals>.DropShadowFilter.process_imageN)rh   ra   r   r^   r"   rk   r"   r#   ÚDropShadowFilter–   s   rn   gš™™™™™¹?r`   gÍÌÌÌÌÌì?zbo-ÚbrB   r%   r&   zLine 1)ZmecZmfcZlwZmewÚmsÚlabelgš™™™™™É?gffffffæ?zro-Úré   g      @g      Àr;   )r?   rC   ZunitsTr   r   F)r   )r(   r)   r:   Z	get_xdataZ	get_ydataZupdate_fromÚmtransformsZoffset_copyZget_transformÚfigureZset_transformZ
set_zorderZ
get_zorderZset_agg_filterZset_rasterizedr*   Zset_ylimZxaxisZset_visibleZyaxis)rX   rn   r    r-   Úline1Úline2ÚgaussÚlineZxxÚyyZshadowZ	transformr"   )rg   r_   rD   rI   r#   Útest_agg_filterW   sT         ÿ     ÿ
  ÿ

r{   c               	   C   s8   t jdd�} t ¡ }t t¡� |  |¡ W 5 Q R X d S )N)i,  r/   )Zfigsize)r(   ru   r   r   ÚpytestÚraisesÚ
ValueErrorr   )r    r+   r"   r"   r#   Útest_too_large_imageÉ   s    r   c                  C   sd   t dƒ} t ¡ \}}| | t | ¡¡ |j ¡  t ¡ \}}dtd< | | t | ¡¡ |j ¡  d S )NéÈ   éi   úagg.path.chunksize)	Úranger(   r)   r:   r3   ÚsinÚcanvasÚdrawr	   )r?   r    r-   r"   r"   r#   Útest_chunksizeÐ   s    
r‡   ZAggc                  C   sP   t  dddgdddg¡ t ¡ } t j| ddd� t | ¡}|jd dksLt‚d S )	Nr   r   r7   Zjpgr€   )r2   rL   rL   )r€   r€   )	r(   r:   r   r   r   r   ÚopenÚinfoÚAssertionError©r!   rR   r"   r"   r#   Útest_jpeg_dpiß   s
    
rŒ   c                  C   s^   ddl m}  t ¡ }| ƒ }| dd¡ t ¡ j|dd|id� t 	|¡}|j
d dksZt‚d S )Nr   )ÚPngInfoZSoftwareÚtestr0   Úpnginfo©r2   Ú
pil_kwargs)ZPIL.PngImagePluginr�   r   r   Úadd_textr(   ru   r   r   rˆ   r‰   rŠ   )r�   r!   r�   rR   r"   r"   r#   Útest_pil_kwargs_pngé   s    
r“   c                  C   sV   t  ¡ } ddi}t ¡ j| d|d� t | ¡}dd„ |j ¡ D ƒ}|d dksRt	‚d S )NÚdescriptionz
test imageZtiffr�   c                 S   s   i | ]\}}t j| j|“qS r"   )r   ZTAGS_V2Úname)Ú.0ÚkÚvr"   r"   r#   Ú
<dictcomp>ø   s     
 z(test_pil_kwargs_tiff.<locals>.<dictcomp>ZImageDescription)
r   r   r(   ru   r   r   rˆ   Ztag_v2ÚitemsrŠ   )r!   r‘   rR   Útagsr"   r"   r#   Útest_pil_kwargs_tiffó   s    
rœ   c                  C   s”   t  dddgdddg¡ t ¡ } ddi}t j| d|d� t|ƒdksHt‚t ¡ }ddi}t j|d|d� t|ƒdksxt‚| ¡ j|  ¡ jks�t‚d S )Nr   r   r7   ZqualityÚwebpr�   éd   )	r(   r:   r   r   r   ÚlenrŠ   Ú	getbufferÚnbytes)Z	buf_smallZpil_kwargs_lowZ	buf_largeZpil_kwargs_highr"   r"   r#   Útest_pil_kwargs_webpü   s    r¢   c                  C   sL   t  dddgdddg¡ t ¡ } t j| ddd� t | ¡}|jdksHt‚d S )Nr   r   r7   r�   T)r2   ÚtransparentZRGBA)	r(   r:   r   r   r   r   rˆ   r=   rŠ   r‹   r"   r"   r#   Útest_webp_alpha	  s
    
r¤   c               	   C   sN   t  ¡ \} }| dgdg¡ tddgƒ¡ t t¡� | j 	¡  W 5 Q R X d S )Nr   )r   r   )r7   r   )
r(   r)   ÚscatterZ	set_pathsr   r|   r}   Ú	TypeErrorr…   r†   )r    r-   r"   r"   r#   Ú(test_draw_path_collection_error_handling  s    r§   c            	   
   C   sè  d} d}d| }d| }t  d|| ¡}t  | ¡| }d|d d d…< tt  ||f¡jƒ}d|_t|||ƒ}| ¡ }| 	d¡ | 
d¡ | d	¡ tjtd
d�� | ||tƒ ¡ W 5 Q R X | d ¡ tjtdd�� | ||tƒ d¡ W 5 Q R X tddiƒ�0 tjtdd�� | ||tƒ ¡ W 5 Q R X W 5 Q R X tddiƒ�0 tjtdd�� | ||tƒ ¡ W 5 Q R X W 5 Q R X tddiƒ�0 tjtdd�� | ||tƒ ¡ W 5 Q R X W 5 Q R X d|_tjtdd�� | ||tƒ ¡ W 5 Q R X d S )Nr6   iô  r%   é   r   r7   r   rr   ú/zcan not split hatched path)Úmatchzcan not split filled path)r   r   r   r‚   z
Please seti@B zPlease reducei�_ Fzshould_simplify is False)r3   Zlinspacer9   r   ZvstackÚTZsimplify_thresholdr   Znew_gcZset_linewidthZset_foregroundZ	set_hatchr|   r}   ÚOverflowErrorZ	draw_pathr   r
   Zshould_simplify)	ÚNrL   rB   Úhr?   rC   ÚpathÚraÚgcr"   r"   r#   Útest_chunksize_fails  s>    



$$$r²   c                  C   sD   t  ¡ } | jdd�jdddgdddgtjdd�gd� | j ¡  d S )	NZ3d)Z
projectionr   r   r7   rs   )Z	linewidth)Zpath_effects)r(   ru   Zadd_subplotr¥   r   ZStroker…   r†   )r    r"   r"   r#   Útest_non_tuple_rgbafaceM  s      ÿr³   )/r   Únumpyr3   Znumpy.testingr   ZPILr   r   r|   Z
matplotlibr   r   r   r(   r   rt   r	   r
   Zmatplotlib.backends.backend_aggr   Zmatplotlib.figurer   Zmatplotlib.imager   Zmatplotlib.pathr   Zmatplotlib.testing.decoratorsr   Zmatplotlib.transformsr   r$   r.   r5   r<   r{   r   r‡   ÚmarkÚbackendrŒ   r“   rœ   r¢   r¤   r§   r²   r³   r"   r"   r"   r#   Ú<module>   s8    

q

	
	5