U
    Fvf)                     @   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"   =/tmp/pip-unpacked-wheel-7vhvci0g/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   
   gMbP?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 )NH   )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   Z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   ra   rb   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 rc   )r3   Z
empty_likerb   ra   rH   )rK   rO   rL   rS   rI   r"   r#   rP      s    
z5test_agg_filter.<locals>.GaussianFilter.process_imageN)r_   r`   )rU   rV   rW   __doc__r[   rM   rP   r"   rd   r"   r#   GaussianFilter   s   
rf   c                       s,   e Zd Zd fdd	Zdd Zdd	 Zd
S )z)test_agg_filter.<locals>.DropShadowFilter333333?r`   r   c                    s    |||| _ || _d S rY   )gauss_filteroffset_filter)rK   rH   ra   rb   rZ   rf   r^   r"   r#   r[      s    z2test_agg_filter.<locals>.DropShadowFilter.__init__c                 S   s   t | j|| j|S rY   )rE   rh   rM   ri   rJ   r"   r"   r#   rM      s    
z1test_agg_filter.<locals>.DropShadowFilter.get_padc                 S   s    | j ||}| j||}|S rY   )rh   rP   ri   )rK   rO   rL   t1t2r"   r"   r#   rP      s    z7test_agg_filter.<locals>.DropShadowFilter.process_imageN)rg   r`   r   r]   r"   rj   r"   r#   DropShadowFilter   s   rm   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   rm   r    r-   Zline1Zline2gausslineZxxyyZshadowZ	transformr"   )rf   r^   rD   rI   r#   test_agg_filterW   sT              
  

rx   c               	   C   s8   t jdd} t }tt | | W 5 Q R X d S )N)i,  r/   )Zfigsize)r(   rt   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(   rt   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(   rt   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st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   Z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   ry   rz   	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   rq   /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_hatchry   rz   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   rr   )Z	linewidth)Zpath_effects)r(   rt   Zadd_subplotr   r   ZStroker   r   )r    r"   r"   r#   test_non_tuple_rgbafaceM  s      r   )/r   Znumpyr3   Znumpy.testingr   ZPILr   r   ry   Z
matplotlibr   r   r   r(   r   rs   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<   rx   r|   r   markbackendr   r   r   r   r   r   r   r   r"   r"   r"   r#   <module>   s8    

q

	
	5