o
    :a`I                     @   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	m
Z
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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$d% Ze	 d&d' Z e	 d(d) Z!e
d*gddd+d, Z"e
d-gddd.d/ Z#d0d1 Z$d2d3 Z%e
d4gddd5d6 Z&e
d7gddd8d9 Z'e
d:gd;d< Z(d=d> Z)dS )?    N)assert_array_almost_equalassert_array_equal)check_figures_equalimage_comparisonremove_ticks_and_titles)patches
transforms)PathZclippingT)remove_textc                  C   sL   t ddd} t dt j |  }t \}}|j| |dd |d d S )N               @{Gz?         ?)	linewidth)gɿgQѿ)nparangesinpipltsubplotsplotset_ylim)tsfigax r   F/usr/lib/python3/dist-packages/matplotlib/tests/test_simplification.pytest_clipping   s
   r   Zoverflowc                  C   sD   t g d} t t| }t \}}|| | |dd d S )N)r   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   sP   t g d} t g d}t \}}|| | |dd |dd d S )N)r   r   r         r   )r   r   r)   r   r   g333333g333333?)r   r"   r   r   r   r$   r   r%   r   r   r   test_diamond(   s   r*   c                  C   s   t g d} | jdd}t|jdg |jt jgksJ t g dt jt jt jg} | jdd}t|jdg |jt jgks?J t g dt jt jt jg} |  }| jdd}t|j|j t|j|j d S )N)r   r      r   r   r-   )
   r/      r0   Zclipr+   )r+   r,   )r      )	r	   cleanedr   verticescodesZSTOPMOVETOLINETOCURVE3)path
simplifiedZsimplified_clippedr   r   r   test_clipping_out_of_bounds3   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sAJ d S )Nr   P  size2   roundr   Zsolid_joinstyler   TZsimplifyic  )r   randomseeduniformr   r   r   canvasdrawget_pathget_transformtransform_pathr3   r4   r>   r&   r   r   p1r9   	transformr:   r   r   r   
test_noiseJ   s   

rN   c                  C   s  dd } g d}g d}| ||}t ddgddgddgd	dgg|jd d
d d f  g d}g d}| ||}t ddgdd	gddgd	dgg|jd d
d d f  g d}g d}| ||}t ddgdd	gddgddgd	dgg|jd d
d d f  g d}g d}| ||}t ddgddgd	dgg|jd d
d d f  g d}g d}| ||}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   TrB   )r   r   r   rH   rI   rJ   r3   inverted)r&   r'   r   r   rL   r9   rM   r:   r   r   r   _get_simplified\   s   
z9test_antiparallel_simplification.<locals>._get_simplified)r   r   r   r   r   r-   )      ?r-   r-   r   rQ   r   rQ   r)   r   r   )rQ   r-   rR   r-   rS   rQ   g       )rQ   r-   rR   r-   r   rQ   )rQ   r-   r   r-   r2   rQ   r    )rQ   r-   r   r-   r-   rQ   )r   r4   )rP   r&   r'   r:   r   r   r    test_antiparallel_simplification[   sf   




rT   angle   r2   r   offsetrQ   c                 C   s@  d}t jd t jd| | }d|d< d|d< t | | }t | | }|dd   }|dd   }|dd   }|dd   }	|dkrhtddg||g||	g|d |d gddggg dd}
ntddg||g|d |d gddggg d	d}
tt 	||gj
}|jd
d}t|
j|j t|
j|j d S )N   i!N,   r   r-   rR   )r-   r   r   r   r   )r5   )r-   r   r   r   TrB   )r   rC   rD   randr   Zcosmaxminr	   ZvstackTr3   r   r4   r   r5   )rU   rW   ZscaleZvert_offsetsr&   r'   Zx_maxZx_minZy_maxZy_minZ
p_expectedpZp2r   r   r   test_angled_antiparallel   sB   r_   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sNJ d S )Nr   r   r<   r=   r   r@   rA   TrB   ib  )r   rC   rD   r   linspacer   rE   r   r   r   rF   rG   rH   rI   rJ   r3   r4   r>   rK   r   r   r   test_sine_plus_noise   s   

ra   Zsimplify_curveg rh?)r
   Ztolc                  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 )
Nr+   )r-   r   )r-   r-   r-   )r   r   )r   r   none)Zfc)r   r   )r   	PathPatchr	   r   nanr6   r8   	CLOSEPOLYr   r   	add_patchr$   r   )Zpp1r   r   r   r   r   test_simplify_curve   s   

rg   c                 C   s  |  dd }| dd }tdtjgddgddgddgddggtjtjtjtjtjg}|d t	j
|dd tdtjgddgddgddgdtjggtjtjtjtjtjg}|d t	j
|dd tddgddgddgdtjgddggtjtjtjtjtjg}|d t	j
|dd tddgddgddgdtjgddggtjtjtjtjtjg}|d t	j
|dd tdtjgddgddgddgddgddgddgddgdtjgddgg
tjtjtjtjtjtjtjtjtjtjg
}|d t	j
|dd tdtjgddgddgddgdtjgddgddgddgdtjgddgg
tjtjtjtjtjtjtjtjtjtjg
}|d t	j
|dd td	d	gdd	gdtjgddgd	dgd	d	ggtjtjtjtjtjtjg}|d t	j
|dd td	d	gdd	gdtjgddgd	dgd	d	ggtjtjtjtjtjtjg}|d t	j
|dd tddgddgddgdtjgddgddggtjtjtjtjtjtjg}|d t	j
|dd tddgddgddgdtjgddgddggtjtjtjtjtjtjg}|d t	j
|dd td	d	gdd	gdtjgddgddgd	dgd	d	ggtjtjtjtjtjtjtjg}|d t	j
|dd td	d	gdd	gdtjgddgddgd	dgd	d	ggtjtjtjtjtjtjtjg}|d t	j
|dd tddgddgddgdtjgddgddgddggtjtjtjtjtjtjtjg}|d t	j
|dd tddgddgddgdtjgddgddgddggtjtjtjtjtjtjtjg}|d t	j
|dd tddgddgddgddgdtjgddgddggtjtjtjtjtjtjtjg}|d t	j
|dd tddgddgddgddgdtjgddgddggtjtjtjtjtjtjtjg}|d t	j
|dd g |j|jD ]
}|jd
d
d qNt|  t| d S )Nr   r2   r   rb   Z	facecolorrS   r-   rR   )g      g      @)Zxlimylim)r   Zflattenr	   r   rd   r6   r7   re   rf   r   rc   r8   ZCURVE4Zflatsetr   )fig_testfig_refZax_testZax_refr9   r   r   r   r   test_closed_path_nan_removal   s   "$""  " ((((......rn   c              
   C   sR  g }t dD ]J}d| d }ddgddgddgddgd|d  dgd|d  |g|d |g|d dgg}tj||dd}t||d dd d f f}|| qtt|d tj}tj	|d< tj
|d	< t|t|}t|}| d
 t||}| tj|dd |d
 | }tj||tj
k< t||}|tj|dd d S )N   g?g      g      ?r-   r   r   )ZaxisrR   )rX   rX   rb   ri   )ranger   rollZconcatenateappendZfullr#   r	   r7   r6   re   ZtileZset_size_inchesZ
add_artistr   rc   copy)rl   rm   r4   rq   rW   patternr5   r9   r   r   r   test_closed_path_clippinge  s.   






ru   Zhatch_simplifyc               	   C   s>   t  \} }|t jdddddd |d |d d S )Nr+   r-   F/)fillZhatch)g?g?)r   r   rf   Z	Rectangler$   r   )r   r   r   r   r   
test_hatch  s   
rx   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sKJ d S )Ni   r   r   r   TrB   $   )r   r   r   r   r   absZfftr   r   Zblackmanr#   rF   rG   rH   rI   rJ   r3   r4   r>   )r   r   r   rL   r9   rM   r:   r   r   r   test_fft_peaks  s   
8

r{   c                  C   sz   d} t jt| dd}|t|d df}t|}|jt	 dd}t
|}t|dks0J |d d tjks;J 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@r|   r1   r-   r   )r   Z
frombufferbase64ZdecodebytesZreshaper#   r	   iter_segmentsr   ZIdentityTransformlistr6   )dataZvertsr9   Zsegsr   r   r   test_start_with_moveto  s   
r   c                  C   s   dt jd< td} tjd}tj|d< t  \}}|| | t	
t |t  W d    d S 1 s9w   Y  d S )NFzpath.simplifyi i  )r   ZrcParamsr   r   rC   rZ   rd   r   r   pytestZraisesOverflowErrorZsavefigioBytesIO)ZxxZyyr   r   r   r   r   (test_throw_rendering_complexity_exceeded  s   


"r   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   r-   r   r   r   r2   r   rV   r   rX   r.   )Zfigsizer   )leftbottomZwspaceZhspace)r   r   r   r   )r   rX   F)rj   Zautoscale_onr-   r   r   rX   	   )r   ZfigureZsubplots_adjustZadd_axesr   ZxaxisZset_major_locatorZMultipleLocatorZyaxisZset_ticks_positionr$   )Zdatr   r   r   r   r   test_clipper  s   
r   Zpara_equal_perpc                  C   sj   t g ddgd  } t g ddgd  }t \}}|| d |d  || d |d d d S )N)r   r-   r   r-   r   rR   r   r-   r-      )r-   r-   r   r-   r   rR   r   r   r   ro)r   r"   r   r   r   r%   r   r   r   test_para_equal_perp  s
   r   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   r`   r   rd   r   r   r   r   r%   r   r   r   test_clipping_with_nans  s   
r   c                  C   s   t ddggd } t| jg dd}|g ksJ t ddgddggd	d
g} t| jg dd}dd |D ddgd	fddgd
fgksEJ t ddggd	g} t| jg dd}dd |D ddgd	fgkshJ d S )Ngꌠ9Y>)FrX   )r   r   r   r   r1   r?   (   K   A   r-   r   c                 S      g | ]
\}}t ||fqS r   r   .0r&   r'   r   r   r   
<listcomp>       z&test_clipping_full.<locals>.<listcomp>c                 S   r   r   r   r   r   r   r   r     r   )r	   r   r~   )r^   r:   r   r   r   test_clipping_full  s   r   )*r}   r   Znumpyr   Znumpy.testingr   r   r   Zmatplotlib.testing.decoratorsr   r   r   Zmatplotlib.pyplotZpyplotr   Z
matplotlibr   r   Zmatplotlib.pathr	   r   r(   r*   r;   rN   rT   ZmarkZparametrizer   r_   ra   rg   rn   ru   rx   r{   r   r   r   r   r   r   r   r   r   r   <module>   sR    
	
	

&O,

k
(

"

	

