o
    Gf)                     @   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         ?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    9lib/python3.10/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   
   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   

r3   c                  C   sR   t  } t }| }td}|d d d  d9  < || |j| dd d S )N順    r.   r/   )r   r   r   r'   r1   onesplotr   )r)   r   r+   pointsr    r    r!   test_long_pathM   s   

r:   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 )Nr5   r   r   r6   Zsame)mode)r1   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   r5   r   r   )maxintr1   Zapply_along_axis)Asigmar>   )rB   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)Nz"Should be overridden by subclasses)NotImplementedError)rI   
padded_srcrJ   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)rK   r1   padrN   )rI   imrJ   rO   rM   	tgt_imager    r    r!   __call__o   s   
z,test_agg_filter.<locals>.BaseFilter.__call__N)__name__
__module____qualname__rK   rN   rR   r    r    r    r!   
BaseFilterg   s    rV   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)rI   rX   r    r    r!   __init__x   s   
z.test_agg_filter.<locals>.OffsetFilter.__init__c                 S   s   t t| jd | S )NH   )rD   rC   rX   rH   r    r    r!   rK   {      z-test_agg_filter.<locals>.OffsetFilter.get_padc                 S   sH   | j \}}tj|t|d | dd}tj|t|d |  dd}|S )NrZ   r   )Zaxisr   )rX   r1   ZrollrD   )rI   rM   rJ   ZoxZoyZa1Za2r    r    r!   rN   ~   s   
z3test_agg_filter.<locals>.OffsetFilter.process_imageN)r   rS   rT   rU   rY   rK   rN   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 rW   )rF   alphacolor)rI   rF   r`   ra   r    r    r!   rY      s   
z0test_agg_filter.<locals>.GaussianFilter.__init__c                 S   s   t | jd d | S Nr   rZ   )rD   rF   rH   r    r    r!   rK      r[   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 rb   )r1   Z
empty_likera   r`   rF   )rI   rM   rJ   rQ   rG   r    r!   rN      s   
z5test_agg_filter.<locals>.GaussianFilter.process_imageN)r^   r_   )rS   rT   rU   __doc__rY   rK   rN   r    rc   r    r!   GaussianFilter   s
    
re   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 rW   )gauss_filteroffset_filter)rI   rF   r`   ra   rX   re   r]   r    r!   rY      s   z2test_agg_filter.<locals>.DropShadowFilter.__init__c                 S   s   t | j|| j|S rW   )rC   rg   rK   rh   rH   r    r    r!   rK      s   
z1test_agg_filter.<locals>.DropShadowFilter.get_padc                 S   s    | j ||}| j||}|S rW   )rg   rN   rh   )rI   rM   rJ   t1t2r    r    r!   rN      s   z7test_agg_filter.<locals>.DropShadowFilter.process_imageN)rf   r_   r   r\   r    ri   r    r!   DropShadowFilter   s    rl   )皙?r^   ?)rm   rn   r^   zbo-br@   r#   r$   zLine 1)ZmecZmfcZlwZmewmsZlabel)r^   g?gffffff?zro-r   g      @g      r9   )r=   rA   Zunitsr^   Tr   r   F)r   )r&   r'   r8   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)rV   rl   r   r+   Zline1Zline2ZgausslineZxxZyyZshadowZ	transformr    )re   r]   rB   rG   r!   test_agg_filterW   s<   


rv   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&   rt   r   r   pytestraises
ValueErrorr   )r   r)   r    r    r!   test_too_large_image   s
   "rz   c                  C   sd   t d} t \}}|| t|  |j  t \}}dtd< || t|  |j  d S )N   i   agg.path.chunksize)	ranger&   r'   r8   r1   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   r5   r   r   r   Zjpgr{   )r0   rJ   rJ   )r{   r{   )r&   r8   r   r   r   r   openinfor   rP   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r0   
pil_kwargs)ZPIL.PngImagePluginr   r   r   add_textr&   rt   r   r   r   r   )r   r   r   rP   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&   rt   r   r   r   Ztag_v2items)r   r   rP   Ztagsr    r    r!   test_pil_kwargs_tiff   s   
r   c                  C   s   t g dg d t } ddi}t j| d|d t|dks"J t }ddi}t j|d|d t|dks:J | j|  jksFJ d S )Nr   r   Zqualityr   webpr   d   )r&   r8   r   r   r   len	getbuffernbytes)Z	buf_smallZpil_kwargs_lowZ	buf_largeZpil_kwargs_highr    r    r!   test_pil_kwargs_webp   s   r   c                  C   sH   t g dg d t } t j| ddd t| }|jdks"J d S )Nr   r   r   T)r0   ZtransparentZRGBA)r&   r8   r   r   r   r   r   r;   r   r    r    r!   test_webp_alpha	  s
   
r   c                  C   sd   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   )r5   r   )
r&   r'   scatterZ	set_pathsr   rw   rx   	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 d    n1 saw   Y  |d  tjtdd |||t d W d    n1 sw   Y  tddi' tjtdd |||t  W d    n1 sw   Y  W d    n1 sw   Y  tddi' tjtdd |||t  W d    n1 sw   Y  W d    n1 sw   Y  tddi( tjtdd |||t  W d    n	1 sw   Y  W d    n	1 s'w   Y  d|_tjtdd |||t  W d    d S 1 sKw   Y  d S )Nr4   i  r#      r   r5   r   rq   /zcannot split hatched path)matchzcannot split filled path)r   r   r   r}   z
Please seti@B zPlease reducei_ Fzshould_simplify is False)r1   Zlinspacer7   r   ZvstackTZsimplify_thresholdr   Znew_gcZset_linewidthZset_foregroundZ	set_hatchrw   rx   OverflowErrorZ	draw_pathr   r
   Zshould_simplify)	NrJ   r@   hr=   rA   pathZraZgcr    r    r!   test_chunksize_fails  sV   



$r   c                  C   s@   t  } | jddjg dg dtjddgd | j  d S )NZ3d)Z
projectionr   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numpyr1   Znumpy.testingr   ZPILr   r   rw   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,   r3   r:   rv   rz   r   ZmarkZbackendr   r   r   r   r   r   r   r   r    r    r    r!   <module>   s:     

q

	
	5