a
    ض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         ?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!   i/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-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    

r4   c                  C   sR   t  } t }| }td}|d d d  d9  < || |j| dd d S )N順    r/   r0   )r   r   r   r(   r2   onesplotr   )r*   r   r,   pointsr!   r!   r"   test_long_pathL   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 ]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 )Nr6   r   r   r7   Zsame)mode)r2   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   r6   r   r   )maxintr2   Zapply_along_axis)Asigmar?   )rC   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d S )Nz"Should be overridden by subclasses)NotImplementedError)rJ   
padded_srcrK   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)rL   r2   padrO   )rJ   imrK   rP   rN   	tgt_imager!   r!   r"   __call__n   s    
z,test_agg_filter.<locals>.BaseFilter.__call__N)__name__
__module____qualname__rL   rO   rS   r!   r!   r!   r"   
BaseFilterf   s   rW   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)rJ   rY   r!   r!   r"   __init__w   s    z.test_agg_filter.<locals>.OffsetFilter.__init__c                 S   s   t t| jd | S )NH   )rE   rD   rY   rI   r!   r!   r"   rL   z   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   )rY   r2   ZrollrE   )rJ   rN   rK   ZoxZoyZa1Za2r!   r!   r"   rO   }   s    
z3test_agg_filter.<locals>.OffsetFilter.process_imageN)r   rT   rU   rV   rZ   rL   rO   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 rX   )rG   alphacolor)rJ   rG   r`   ra   r!   r!   r"   rZ      s    z0test_agg_filter.<locals>.GaussianFilter.__init__c                 S   s   t | jd d | S Nr   r[   )rE   rG   rI   r!   r!   r"   rL      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 rb   )r2   Z
empty_likera   r`   rG   )rJ   rN   rK   rR   rH   r!   r"   rO      s    
z5test_agg_filter.<locals>.GaussianFilter.process_imageN)r^   r_   )rT   rU   rV   __doc__rZ   rL   rO   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 rX   )gauss_filteroffset_filter)rJ   rG   r`   ra   rY   re   r]   r!   r"   rZ      s    z2test_agg_filter.<locals>.DropShadowFilter.__init__c                 S   s   t | j|| j|S rX   )rD   rg   rL   rh   rI   r!   r!   r"   rL      s    
z1test_agg_filter.<locals>.DropShadowFilter.get_padc                 S   s    | j ||}| j||}|S rX   )rg   rO   rh   )rJ   rN   rK   t1t2r!   r!   r"   rO      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-brA   r$   r%   zLine 1)ZmecZmfcZlwZmewmslabel)r^   g?gffffff?zro-r   g      @g      r:   )r>   rB   Zunitsr^   Tr   r   F)r   )r'   r(   r9   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)rW   rl   r   r,   Zline1Zline2gausslinexxyyZshadowZotr!   )re   r]   rC   rH   r"   test_agg_filterV   s<    


rz   c                  C   sL   t jdd} t }tt | | W d    n1 s>0    Y  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(   r9   r2   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sHJ d S )N)r   r   r6   )r   r   r   Zjpgr   )r1   rK   rK   )r   r   )r'   r9   r   r   r   r   openinfo)r    rQ   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sZJ d S )Nr   )PngInfoZSoftwaretestr/   pnginfor1   
pil_kwargs)ZPIL.PngImagePluginr   r   r   Zadd_textr'   ru   r   r   r   r   )r   r    r   rQ   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sRJ 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>       z(test_pil_kwargs_tiff.<locals>.<dictcomp>ZImageDescription)	r   r   r'   ru   r   r   r   Ztag_v2items)r    r   rQ   tagsr!   r!   r"   test_pil_kwargs_tiff   s    
r   c                  C   sd   t  \} }|dgdgtddg tt | j	
  W d    n1 sV0    Y  d S )Nr   )r   r   )r6   r   )r'   r(   ZscatterZ	set_pathsr   r   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|||}| }|d |d tt 	||fj
}	d|	_|||	|fS )	Nr5   i  r$      r   r6   r   rr   )r2   Zlinspacer8   r   r
   Znew_gcZset_linewidthZset_foregroundr   ZvstackTZsimplify_threshold)
NrK   rA   hr>   rB   idtragcpr!   r!   r"   chunk_limit_setup  s    

r   c                 C   sV   | \}}}}| d tjtdd |||| W d    n1 sH0    Y  d S )N/zhatched pathmatch)Z	set_hatchr{   r|   OverflowError	draw_pathr   r   r   r   r   r!   r!   r"   test_chunksize_hatch_fail  s    
r   c                 C   sN   | \}}}}t jtdd  ||||d W d    n1 s@0    Y  d S )Nzfilled pathr   )r   r   r   )r{   r|   r   r   r   r!   r!   r"   test_chunksize_rgbFace_fail(  s    r   c                 C   sR   | \}}}}d|_ tjtdd |||| W d    n1 sD0    Y  d S )NFzshould_simplify is Falser   )Zshould_simplifyr{   r|   r   r   r   r!   r!   r"   test_chunksize_no_simplify_fail/  s    r   c                 C   sT   | \}}}}dt d< tjtdd |||| W d    n1 sF0    Y  d S )Nr   r   z
Please setr   r	   r{   r|   r   r   r   r!   r!   r"   test_chunksize_zero6  s    r   c                 C   sT   | \}}}}dt d< tjtdd |||| W d    n1 sF0    Y  d S )Ni@B r   Please reducer   r   r   r!   r!   r"   test_chunksize_too_big_to_chunk>  s    r   c                 C   sT   | \}}}}dt d< tjtdd |||| W d    n1 sF0    Y  d S )Ni_ r   r   r   r   r   r!   r!   r"   test_chunksize_toobig_chunksF  s    r   )2r   Znumpyr2   Znumpy.testingr   ZPILr   r   r{   Z
matplotlibr   r   r   r'   r   rt   r	   Zmatplotlib.backends.backend_aggr
   Zmatplotlib.figurer   Zmatplotlib.imager   Zmatplotlib.pathr   Zmatplotlib.testing.decoratorsr   Zmatplotlib.transformsr   r#   r-   r4   r;   rz   r~   r   markbackendr   r   r   r   Zfixturer   r   r   r   r   r   r   r!   r!   r!   r"   <module>   s@   

r

	
	
	