o
    :a&                     @   sL  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 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)ej*d%d& Z+d'd( Z,d)d* Z-d+d, Z.d-d. Z/d/d0 Z0d1d2 Z1dS )3    N)assert_array_almost_equal)ImageTiffTags)collectionspathpyplot
transformsrcParams)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         ?Znone)Z	facecolorZ	edgecolorr   r   r   )              ?r   r      )decimal)r   Zset_facecolorZpatchZ	set_alphaioBytesIOsavefigZget_facecolorseekr   tupler   )figbuf r   ;/usr/lib/python3/dist-packages/matplotlib/tests/test_agg.pytest_repeated_save_with_alpha   s$   



r!   c               
   C   sh   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   r   Z
add_artistset_xlimr   )bufffaxZ
collectionr   r   r    !test_large_single_path_collection2   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_nan@   s   

r2   c                  C   sR   t  } t }| }td}|d d d  d9  < || |j| dd d S )N順    r-   r.   )r   r   r   r&   r0   onesplotr   )r(   r   r*   pointsr   r   r    test_long_pathL   s   

r9   zagg_filter.pngT)Zremove_textc                     sr  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g dg ddddddddd	\}|jg dg ddddddddd	\}|d}||fD ];}| }| }	|||	\}
|
| tj| |j	dddd}|

| |
| d  |
| |
d  qc|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 )Nr4   r   r   r5   Zsame)mode)r0   Zr_ZhanningZconvolvesum)x
window_lenswyr   r   r    smooth1dX   s   6
z!test_agg_filter.<locals>.smooth1dr   c                    s:   t t|dd d }t d| |} t d| |} | S )Nr   r4   r   r   )maxintr0   Zapply_along_axis)Asigmar=   )rA   r   r    smooth2d`   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_padh   s   z+test_agg_filter.<locals>.BaseFilter.get_padc                 S   s   t d)Nz"Should be overridden by subclasses)NotImplementedError)rH   
padded_srcrI   r   r   r    process_imagek   s   z1test_agg_filter.<locals>.BaseFilter.process_imagec                 S   s@   |  |}t|||f||fdgd}| ||}|| | fS )Nr   Zconstant)rJ   r0   padrM   )rH   imrI   rN   rL   	tgt_imager   r   r    __call__n   s   
z,test_agg_filter.<locals>.BaseFilter.__call__N)__name__
__module____qualname__rJ   rM   rQ   r   r   r   r    
BaseFilterf   s    rU   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)rH   rW   r   r   r    __init__w   s   
z.test_agg_filter.<locals>.OffsetFilter.__init__c                 S   s   t t| jd | S )NH   )rC   rB   rW   rG   r   r   r    rJ   z      z-test_agg_filter.<locals>.OffsetFilter.get_padc                 S   sH   | j \}}tj|t|d | dd}tj|t|d |  dd}|S )NrY   r   )Zaxisr   )rW   r0   ZrollrC   )rH   rL   rI   ZoxZoyZa1Za2r   r   r    rM   }   s   
z3test_agg_filter.<locals>.OffsetFilter.process_imageN)r   rR   rS   rT   rX   rJ   rM   r   r   r   r    OffsetFilteru   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 rV   )rE   alphacolor)rH   rE   r_   r`   r   r   r    rX      s   
z0test_agg_filter.<locals>.GaussianFilter.__init__c                 S   s   t | jd d | S Nr   rY   )rC   rE   rG   r   r   r    rJ      rZ   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 ra   )r0   Z
empty_liker`   r_   rE   )rH   rL   rI   rP   rF   r   r    rM      s   
z5test_agg_filter.<locals>.GaussianFilter.process_imageN)r]   r^   )rR   rS   rT   __doc__rX   rJ   rM   r   rb   r   r    GaussianFilter   s
    
rd   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 rV   )gauss_filteroffset_filter)rH   rE   r_   r`   rW   rd   r\   r   r    rX      s   z2test_agg_filter.<locals>.DropShadowFilter.__init__c                 S   s   t | j|| j|S rV   )rB   rf   rJ   rg   rG   r   r   r    rJ      s   
z1test_agg_filter.<locals>.DropShadowFilter.get_padc                 S   s    | j ||}| j||}|S rV   )rf   rM   rg   )rH   rL   rI   t1t2r   r   r    rM      s   z7test_agg_filter.<locals>.DropShadowFilter.process_imageN)re   r^   r   r[   r   rh   r   r    DropShadowFilter   s    rk   )皙?r]   ?)rl   rm   r]   zbo-br?   r"   r#   zLine 1)ZmecZmfcZlwZmewmsZlabel)r]   g?gffffff?zro-r   g      @g      r8   )r<   r@   Zunitsr]   Tr   r   F)r   )r%   r&   r7   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)rU   rk   r   r*   Zline1Zline2ZgausslineZxxZyyZshadowZotr   )rd   r\   rA   rF   r    test_agg_filterV   s<   


ru   c                  C   sN   t jdd} t }tt | | W d    d S 1 s w   Y  d S )N)i,  r,   )Zfigsize)r%   rs   r   r   pytestraises
ValueErrorr   )r   r(   r   r   r    test_too_large_image   s
   "ry   c                  C   sd   t d} t \}}|| t|  |j  t \}}dtd< || t|  |j  d S )N   i   agg.path.chunksize)	ranger%   r&   r7   r0   Zsincanvasdrawr	   )r<   r   r*   r   r   r    test_chunksize   s   
r   ZAggc                  C   sL   t g dg d t } t j| ddd t| }|jd dks$J d S )N)r   r   r4   )r   r   r   Zjpgrz   )r/   rI   rI   )rz   rz   )r%   r7   r   r   r   r   openinfo)r   rO   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s-J d S )Nr   )PngInfoZSoftwaretestr-   pnginfor/   
pil_kwargs)ZPIL.PngImagePluginr   r   r   add_textr%   rs   r   r   r   r   )r   r   r   rO   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s)J 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%   rs   r   r   r   Ztag_v2items)r   r   rO   Ztagsr   r   r    test_pil_kwargs_tiff   s   
r   c                  C   sf   t  \} }|dgdgtddg tt | j	
  W d    d S 1 s,w   Y  d S )Nr   )r   r   )r4   r   )r%   r&   ZscatterZ	set_pathsr   r   rv   rw   	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|||}| }|d |d tt 	||fj
}	d|	_|||	|fS )	Nr3   i  r"      r   r4   r   rp   )r0   Zlinspacer6   r   r
   Znew_gcZset_linewidthZset_foregroundr   ZvstackTZsimplify_threshold)
NrI   r?   hr<   r@   idtragcpr   r   r    chunk_limit_setup  s   

r   c                 C   sX   | \}}}}| d tjtdd |||| W d    d S 1 s%w   Y  d S )N/zhatched pathmatch)Z	set_hatchrv   rw   OverflowError	draw_pathr   r   r   r   r   r   r   r    test_chunksize_hatch_fail  s
   
"r   c                 C   sP   | \}}}}t jtdd ||||d W d    d S 1 s!w   Y  d S )Nzfilled pathr   )r   r   r   )rv   rw   r   r   r   r   r   r    test_chunksize_rgbFace_fail(  s   "r   c                 C   sT   | \}}}}d|_ tjtdd |||| W d    d S 1 s#w   Y  d S )NFzshould_simplify is Falser   )Zshould_simplifyrv   rw   r   r   r   r   r   r    test_chunksize_no_simplify_fail/  s
   "r   c                 C   V   | \}}}}dt d< tjtdd |||| W d    d S 1 s$w   Y  d S )Nr   r|   z
Please setr   r	   rv   rw   r   r   r   r   r   r    test_chunksize_zero6  
   "r   c                 C   r   )Ni@B r|   Please reducer   r   r   r   r   r    test_chunksize_too_big_to_chunk>  r   r   c                 C   r   )Ni_ r|   r   r   r   r   r   r   r    test_chunksize_toobig_chunksF  s
   "r   )2r   Znumpyr0   Znumpy.testingr   ZPILr   r   rv   Z
matplotlibr   r   r   r%   r   rr   r	   Zmatplotlib.backends.backend_aggr
   Zmatplotlib.figurer   Zmatplotlib.imager   Zmatplotlib.pathr   Zmatplotlib.testing.decoratorsr   Zmatplotlib.transformsr   r!   r+   r2   r9   ru   ry   r   ZmarkZbackendr   r   r   r   Zfixturer   r   r   r   r   r   r   r   r   r   r    <module>   sB    

r

	
	
	