U
    \	¸a(+  ã                   @   sœ  d dl Z d dlZd dlZd dlmZmZ d dlZd dlm	Z	 d dl
mZ d dlmZmZ d dlmZ e	dgddd	d
„ ƒZe	dgdddd„ ƒZe	dgdddd„ ƒZdd„ Zdd„ Zej dd ejd ejd ejd g¡ej dd dg¡dd„ ƒƒZdd„ Ze	dgddd d!„ ƒZe	d"gddd#d$„ ƒZe	d%gddd&d'„ ƒZd(d)„ Zd*d+„ Z e	d,gddd-d.„ ƒZ!e	d/gddd0d1„ ƒZ"e	d2gƒd3d4„ ƒZ#d5d6„ Z$dS )7é    N)Úassert_array_almost_equalÚassert_array_equal)Úimage_comparison)ÚpatchesÚ
transforms)ÚPathZclippingT)Zremove_textc                  C   sL   t  ddd¡} t  dt j |  ¡}t ¡ \}}|j| |dd | d¡ d S )Nç        ç       @ç{®Gáz„?é   ç      ð?)Ú	linewidth)gš™™™™™É¿gìQ¸…ëÑ¿)ÚnpÚarangeÚsinÚpiÚpltÚsubplotsÚplotÚset_ylim)ÚtÚsÚfigÚax© r   úH/tmp/pip-unpacked-wheel-wjyw_3jo/matplotlib/tests/test_simplification.pyÚtest_clipping   s
    r   Zoverflowc                  C   sH   t  ddddg¡} t  t| ƒ¡}t ¡ \}}| | |¡ | dd¡ d S )Nr   r	   ç      @g     jAr   é   )r   Úarrayr   Úlenr   r   r   Úset_xlim©ÚxÚyr   r   r   r   r   Útest_overflow   s
    r%   Zclipping_diamondc                  C   s\   t  dddddg¡} t  dddddg¡}t ¡ \}}| | |¡ | dd¡ | dd¡ d S )Nr   r   ç      ð¿g333333ã¿g333333ã?)r   r   r   r   r   r!   r   r"   r   r   r   Útest_diamond'   s    r'   c                  C   s†   t j d¡ t jjddd } t ¡ \}}|j| ddd}|j ¡  |d  	¡ }|d  
¡ }| |¡}|jdd	}|jjd
ks‚t‚d S )Nr   éPÃ  ©Úsizeé2   Úroundr	   ©Zsolid_joinstyler   T©Zsimplifyi¨c  )r   ÚrandomÚseedÚuniformr   r   r   ÚcanvasÚdrawÚget_pathÚget_transformÚtransform_pathÚcleanedÚverticesr*   ÚAssertionError©r#   r   r   Úp1ÚpathÚ	transformÚ
simplifiedr   r   r   Ú
test_noise2   s    

r?   c                  C   sâ  dd„ } ddddddg}ddddddg}| ||ƒ}t ddgdd	gdd
gddgg|jd d…d d …f ƒ ddddddg}ddddddg}| ||ƒ}t ddgddgddgddgg|jd d…d d …f ƒ ddddddg}ddddddg}| ||ƒ}t ddgddgdd	gddgddgg|jd d…d d …f ƒ ddddddg}ddddddg}| ||ƒ}t ddgddgddgg|jd d…d d …f ƒ ddddddg}ddddddg}| ||ƒ}t ddgdd
gddgddgg|jd d…d d …f ƒ d S )Nc                 S   sX   t  ¡ \}}| | |¡}|d  ¡ }|d  ¡ }| |¡}|jdd}| ¡  |¡}|S )Nr   Tr.   )r   r   r   r4   r5   r6   r7   Úinverted)r#   r$   r   r   r;   r<   r=   r>   r   r   r   Ú_get_simplifiedD   s    
z9test_antiparallel_simplification.<locals>._get_simplifiedr   é   ç      à?éÿÿÿÿr   r   r&   r	   r   éþÿÿÿg       Àé   r   )r   r8   )rA   r#   r$   r>   r   r   r   Ú test_antiparallel_simplificationC   sf    
ýü
ýü
üû
þý
ýürG   Úangleé   rF   r   ÚoffsetrC   c                 C   sJ  d}t j d¡ t j d¡| | }d|d< d|d< t  | ¡| }t  | ¡| }|dd …  ¡ }|dd …  ¡ }|dd …  ¡ }|dd …  ¡ }	|dkrÖtddg||g||	g|d |d gddggdddddgd}
n4tddg||g|d |d gddggddddgd}
tt  	||g¡j
ƒ}|jd	d
}t|
j|jƒ t|
j|jƒ d S )Né   i!N,é   r   rB   rD   r   )ÚcodesTr.   )r   r/   r0   Úrandr   ÚcosÚmaxÚminr   ZvstackÚTr7   r   r8   r   rM   )rH   rJ   ZscaleZvert_offsetsr#   r$   Zx_maxZx_minZy_maxZy_minZ
p_expectedÚpÚp2r   r   r   Útest_angled_antiparallel’   sB    üûý
üÿrU   c                  C   s    t j d¡ t  t  dt jd d¡¡t jjddd  } t ¡ \}}|j	| ddd}|j
 ¡  |d  ¡ }|d  ¡ }| |¡}|jdd	}|jjd
ksœt‚d S )Nr   r	   r(   r)   r
   r,   r-   Tr.   i˜b  )r   r/   r0   r   Úlinspacer   r1   r   r   r   r2   r3   r4   r5   r6   r7   r8   r*   r9   r:   r   r   r   Útest_sine_plus_noiseÀ   s    ÿ

rW   Zsimplify_curvec                  C   sx   t jtdddtjdfddddgtjtjtjtjtjtjtjtjgƒdd} t 	¡ \}}| 
| ¡ | d	¡ | d	¡ d S )
N©r   r   )rB   r   )rB   rB   rB   )r   r   )r   r   Únone)Zfc)r   r   )r   Z	PathPatchr   r   ÚnanÚMOVETOZCURVE3Z	CLOSEPOLYr   r   Ú	add_patchr!   r   )Zpp1r   r   r   r   r   Útest_simplify_curveÒ   s     ÿ  ÿþû

r]   Zhatch_simplifyc               	   C   s>   t  ¡ \} }| t jdddddd¡ | d¡ | d¡ d S )NrX   rB   Fú/)ÚfillZhatch)gÍÌÌÌÌÌÜ?gš™™™™™á?)r   r   r\   Z	Rectangler!   r   )r   r   r   r   r   Ú
test_hatchá   s    
r`   Z	fft_peaksc               
   C   sš   t  ¡ \} }t d¡}| ttj t dtj d | ¡t 	t
|ƒ¡ ¡ƒ¡}| j ¡  |d  ¡ }|d  ¡ }| |¡}|jdd}|jjdks–t‚d S )Ni   r   r
   r   Tr.   é$   )r   r   r   r   r   ÚabsZfftr   r   Zblackmanr    r2   r3   r4   r5   r6   r7   r8   r*   r9   )r   r   r   r;   r<   r=   r>   r   r   r   Útest_fft_peaksé   s    
8

rc   c                  C   sz   d} t jt | ¡dd}| t|ƒd df¡}t|ƒ}|jt 	¡ dd}t
|ƒ}t|ƒdks`t‚|d d tjksvt‚d S )	NsÌ  
ZwAAAAku+v9UAQAA+Tj6/z8CAADpQ/r/KAMAANlO+v8QBAAAyVn6//UEAAC6ZPr/2gUAAKpv+v+8
BgAAm3r6/50HAACLhfr/ewgAAHyQ+v9ZCQAAbZv6/zQKAABepvr/DgsAAE+x+v/lCwAAQLz6/7wM
AAAxx/r/kA0AACPS+v9jDgAAFN36/zQPAAAF6Pr/AxAAAPfy+v/QEAAA6f36/5wRAADbCPv/ZhIA
AMwT+/8uEwAAvh77//UTAACwKfv/uRQAAKM0+/98FQAAlT/7/z0WAACHSvv//RYAAHlV+/+7FwAA
bGD7/3cYAABea/v/MRkAAFF2+//pGQAARIH7/6AaAAA3jPv/VRsAACmX+/8JHAAAHKL7/7ocAAAP
rfv/ah0AAAO4+/8YHgAA9sL7/8QeAADpzfv/bx8AANzY+/8YIAAA0OP7/78gAADD7vv/ZCEAALf5
+/8IIgAAqwT8/6kiAACeD/z/SiMAAJIa/P/oIwAAhiX8/4QkAAB6MPz/HyUAAG47/P+4JQAAYkb8
/1AmAABWUfz/5SYAAEpc/P95JwAAPmf8/wsoAAAzcvz/nCgAACd9/P8qKQAAHIj8/7cpAAAQk/z/
QyoAAAWe/P/MKgAA+aj8/1QrAADus/z/2isAAOO+/P9eLAAA2Mn8/+AsAADM1Pz/YS0AAMHf/P/g
LQAAtur8/10uAACr9fz/2C4AAKEA/f9SLwAAlgv9/8ovAACLFv3/QDAAAIAh/f+1MAAAdSz9/ycx
AABrN/3/mDEAAGBC/f8IMgAAVk39/3UyAABLWP3/4TIAAEFj/f9LMwAANm79/7MzAAAsef3/GjQA
ACKE/f9+NAAAF4/9/+E0AAANmv3/QzUAAAOl/f+iNQAA+a/9/wA2AADvuv3/XDYAAOXF/f+2NgAA
29D9/w83AADR2/3/ZjcAAMfm/f+7NwAAvfH9/w44AACz/P3/XzgAAKkH/v+vOAAAnxL+//04AACW
Hf7/SjkAAIwo/v+UOQAAgjP+/905AAB5Pv7/JDoAAG9J/v9pOgAAZVT+/606AABcX/7/7zoAAFJq
/v8vOwAASXX+/207AAA/gP7/qjsAADaL/v/lOwAALZb+/x48AAAjof7/VTwAABqs/v+LPAAAELf+
/788AAAHwv7/8TwAAP7M/v8hPQAA9df+/1A9AADr4v7/fT0AAOLt/v+oPQAA2fj+/9E9AADQA///
+T0AAMYO//8fPgAAvRn//0M+AAC0JP//ZT4AAKsv//+GPgAAojr//6U+AACZRf//wj4AAJBQ///d
PgAAh1v///c+AAB+Zv//Dz8AAHRx//8lPwAAa3z//zk/AABih///TD8AAFmS//9dPwAAUJ3//2w/
AABHqP//ej8AAD6z//+FPwAANb7//48/AAAsyf//lz8AACPU//+ePwAAGt///6M/AAAR6v//pj8A
AAj1//+nPwAA/////w==z<i4)Zdtyper   )r   r   ç      Y@rd   ©ZcliprB   r   )r   Z
frombufferÚbase64ÚdecodebytesZreshaper    r   Úiter_segmentsr   ZIdentityTransformÚlistr9   r[   )ÚdataZvertsr<   Zsegsr   r   r   Útest_start_with_movetoù   s    
ÿrk   c               	   C   sj   dt jd< t d¡} tj d¡}tj|d< t  ¡ \}}| | |¡ t	 
t¡ | t ¡ ¡ W 5 Q R X d S )NFzpath.simplifyi@ iè  )r   ZrcParamsr   r   r/   rN   rZ   r   r   ÚpytestZraisesÚOverflowErrorZsavefigÚioÚBytesIO)ZxxÚyyr   r   r   r   r   Ú(test_throw_rendering_complexity_exceeded  s    


rq   Zclipper_edgec                  C   sˆ   d} t jdd}|jddddd |jdddd	}| | ¡ |j t  d
¡¡ |j t  d
¡¡ |j 	d¡ |j 	d¡ | 
dd¡ d S )N)
r   rB   r   r   r   rF   r   rI   r   rK   )r   rB   )Zfigsizer   )ÚleftÚbottomZwspaceZhspace)r   r   r   r   )r   rK   F)ZylimZautoscale_onrB   rs   rr   rK   é	   )r   ÚfigureZsubplots_adjustZadd_axesr   ZxaxisZset_major_locatorZMultipleLocatorZyaxisZset_ticks_positionr!   )Zdatr   r   r   r   r   Útest_clipper'  s    
rv   Zpara_equal_perpc               
   C   s‚   t  ddddddddgdgd  ¡} t  ddddddddgdgd  ¡}t ¡ \}}| | d |d ¡ | | d |d d¡ d S )Nr   rB   r   rD   é€   Úro)r   r   r   r   r   r"   r   r   r   Útest_para_equal_perp7  s
    $$ry   Zclipping_with_nansc                  C   sP   t  ddd¡} t  | ¡}t j| d d d…< t ¡ \}}| | |¡ | dd¡ d S )Nr   g…ëQ¸@i¸  éd   g      Ð¿g      Ð?)r   rV   r   rZ   r   r   r   r   r"   r   r   r   Útest_clipping_with_nansA  s    
r{   c                  C   sà   t ddggd ƒ} t| jddddgdƒ}|g ks6t‚t ddgdd	ggd
dgƒ} t| jddddgdƒ}dd„ |D ƒddgd
fdd	gdfgks’t‚t ddggd
gƒ} t| jddddgdƒ}dd„ |D ƒddgd
fgksÜt‚d S )NgêŒ 9Y>)FrK   r   rz   re   r+   é(   éK   éA   rB   r   c                 S   s   g | ]\}}t |ƒ|f‘qS r   ©ri   ©Ú.0r#   r$   r   r   r   Ú
<listcomp>S  s     z&test_clipping_full.<locals>.<listcomp>c                 S   s   g | ]\}}t |ƒ|f‘qS r   r   r€   r   r   r   r‚   X  s     )r   ri   rh   r9   )rS   r>   r   r   r   Útest_clipping_fullL  s    ÿÿrƒ   )%rf   rn   Znumpyr   Znumpy.testingr   r   rl   Zmatplotlib.testing.decoratorsr   Zmatplotlib.pyplotZpyplotr   Z
matplotlibr   r   Zmatplotlib.pathr   r   r%   r'   r?   rG   ÚmarkZparametrizer   rU   rW   r]   r`   rc   rk   rq   rv   ry   r{   rƒ   r   r   r   r   Ú<module>   sF   
	
	

O&,


"

	

