B
    JdE                 @   s  d dl Z d dlZd dlmZ d dl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lmZ d	d
 Zdd Zdd Zdd Zdd Ze	d d gdd gddgd dgge	je	je	je	jge	d d gd dgdd gge	je	je	jge	d dgddgge	je	jge	ddgge	jggZddddgZej de!eedd Z"ej de	j#e	j$gdd Z%dd  Z&d!d" Z'ed#gd$d%d&d'd( Z(ed)gd$d*d+d, Z)ed-gd%d.d/d0 Z*d1d2 Z+d3d4 Z,ed5gd$d*d6d7 Z-ed8gd$d*d9d: Z.ed;gd$d*d<d= Z/ed>gd?d$d@dAdBdCgdDdEdF Z0dGdH Z1dIdJ Z2dKdL Z3dMdN Z4ej dOe5dPdQ dRD dSdT Z6ej dUe7dVdWdXdYdZ Z8d[d\ Z9d]d^ Z:d_d` Z;dS )a    N)assert_array_equal)patches)Path)Polygon)image_comparison)
transforms)
MouseEventc              C   sL   t tddd} | jjdks"t| jd ks0tt|  j	t
j j	 d S )N)r      T)closed)r   npZzerosverticesshapeAssertionErrorcodesr   get_extentsextentsr   Bboxnull)path r   L/var/www/html/venv/lib/python3.7/site-packages/matplotlib/tests/test_path.pytest_empty_closed_path   s
    
r   c           	      s4   t    fdd} tt |   W d Q R X d S )Nc                  s    j d  _ d S )Ng       @)r   r   )r   r   r   modify_vertices   s    z+test_readonly_path.<locals>.modify_vertices)r   unit_circlepytestraisesAttributeError)r   r   )r   r   test_readonly_path   s    r   c           	   C   s   t ddd} tjttd| j d t	|  W d Q R X t dddd}tjttd|j d t	| W d Q R X t ddd}t d}td|j d	|j }tjt|d t	|| W d Q R X d S )
N         z
has shape )matchr	      zYour vertices have shape z but your codes have shape )
r   arangeZreshaper   r   
ValueErrorreescaper   r   )Z
bad_verts1Z
bad_verts2Z
good_vertsZ	bad_codesmsgr   r   r   test_path_exceptions#   s    
r(   c              C   sP   dddddg} t | dd}ddg}||}|jd	ks:ttj|dd
g d S )N)r   r   )r      )r)   r)   )r)   r   T)r
   )g      ?g      ?)g      ?g      ?boolF)r   contains_pointsdtyper   r   testingassert_equal)Zverts2r   pointsretr   r   r   test_point_in_path6   s    
r1   c              C   s8   t  } dddg}| j|dd}tj|dddg d S )N)g        g        )g      ?g        )g?g?g      )ZradiusTF)r   r   r+   r   r-   r.   )r   r/   resultr   r   r   $test_contains_points_negative_radiusA   s    
r3   r)   r	   )g        g        g      ?g      ?)g        g        g      ?g      ?)g        g      ?g      ?g      ?)g      ?g       @g      ?g       @zpath, extentsc             C   s   t |  j|kstd S )N)r   allr   r   r   )r   r   r   r   r   test_exact_extentsZ   s    r5   ignored_codec             C   sB   t ddgddgddggt jt j| g}t| jdks>td S )Nr   r)   r	   )g        g        g      ?g      ?)r   MOVETOr   r4   r   r   r   )r6   r   r   r   r   test_extents_with_ignored_codesh   s    r8   c              C   sl   t ddgddgddgddgddgg} t| }t t jdgg}||}t|dks\t|d rhtd S )Nr   r)   g      ?)r   arrayr   nanr+   lenr   )boxptestcontainsr   r   r   test_point_in_path_nanr   s    (
r@   c              C   s   t  \} }|jddd |dd}| |jd|jsDt| |jd|jrbt| |jd|jrtd S )	Nlog)r   r)   )Zxscaleylimr)   
   )   g      ?)g      ?g      ?)2   g      ?)	pltsubplotssetZaxvspanget_pathZcontains_point	transData	transformr   )figaxZpolygonr   r   r   test_nonlinear_containment{   s    rN   zarrow_contains_point.pngTZmpl20)remove_textstylec              C   s.  t  \} }|d |d tjddddd}|| tjddd	dd}|| tjd
ddddd}|| |||g}tt	dddt	ddd\}}xt
t| | D ]j\}\}	}
|j|	|
g\}}td| j||}x8t
|D ],\}}||\}}|r|j|	|
ddd qW qW d S )N)r   r	   )g      ?g      ?)g      ?g      ?z->(   )
arrowstylemutation_scale)g      ?r)   )g      ?g      ?z]-[)g      ?g      ?)g      ?g      ?fancyF)rR   fillrS   r   r	   g?Zbutton_press_eventrD   r)sc)rF   rG   set_xlimset_ylimr   ZFancyArrowPatch	add_patchr   Zmeshgridr#   	enumeratezipZravelrJ   rK   r   Zcanvasr?   Zscatter)rL   rM   arrowZarrow1arrow2Zpatches_listXYkxyZxdispZydispeventmpatchZinsideresr   r   r   test_arrow_contains_point   s4    





$ri   zpath_clipping.svg)rO   c              C   s   t jdd} xtddddgddddgddddgdd	ddgdd	d
dgd	d
ddgd
ddd	ggD ]t\}}| dd|d }ddddg}||d |d |d   ||d |d |d   |t|dddd q\W d S )N)g      @g@)Zfigsize)   rj   )rj   i^  )i  i^  )i  rj   )i  d   )rj   rk   )rj   i  )i  i  r   r	   r)   r      i  i  r    noneredT)Z	facecolorZ	edgecolorr
   )rF   Zfigurer\   Zadd_subplotrY   rZ   r[   r   )rL   iZxyrM   Zbboxr   r   r   test_path_clipping   s    





rp   zsemi_log_with_zero.png)rP   c              C   s^   t dd} dd| d d   d }t \}}|j| |ddd	d
 |dd |d d S )NirC   g      ?r	   r)      z-o   rb   )ZlwZmarkeredgecolorgHz>T)r   r#   rF   rG   ZsemilogyrZ   grid)rc   rd   rL   rM   r   r   r   test_log_transform_with_zero   s    rt   c              C   s   t  } | jjdkstd S )N)r   r	   )r   make_compound_pathr   r   r   )rV   r   r   r   test_make_compound_path_empty   s    rv   c              C   sL   ddg} dt | | gt jt jgg }t j| }t|jt jkdksHtd S )Nr   r    )r   r7   STOPru   r   sumr   r   )zeropathsZcompound_pathr   r   r   test_make_compound_path_stops   s    
r{   zxkcd.pngc           	   C   sZ   t jd t ddt j d} t | }t  t \}}|	| | W d Q R X d S )Nr   r	   rk   )
r   randomseedlinspacepisinrF   xkcdrG   plot)rc   rd   rL   rM   r   r   r   	test_xkcd   s    

r   zxkcd_marker.pngc           	   C   s   t jd t ddd} | }d|  }dt d }t H t \}}|j| |ddd |j| |ddd |j| |d	dd W d Q R X d S )
Nr   rD      g      @+rC   )mso^)	r   r|   r}   r~   onesrF   r   rG   r   )rc   y1y2Zy3rL   rM   r   r   r   test_xkcd_marker   s    
r   zmarker_paths.pdfc              C   sD   d} t t| t| d t|  t d|  t dd d S )N   r   )rF   Zerrorbarr   r#   r   ZxlimrB   )Nr   r   r   test_marker_paths_pdf   s    r   Znan_pathdefaultZpdfsvgepsZpng)rP   rO   
extensionsc              C   sV   dt jdt jdddg} t jdt jddt jd	g}t \}}|| d
 ||d
 d S )Nr   r	   r   rD   r"   r   	   rC   r   z-o)r   r:   rF   rG   r   )Zy0r   rL   rM   r   r   r   test_nan_isolated_points  s
    r   c              C   s.  t ddgddgddgddgdd	gd
dgddgddgddgddgddgddgddgddgddgddgdd gd!d"gd#d"gd$d%gd&d'gd(d)gg} d*\}}}}tt | d d d+f | d d d,f fjd-d.}t||g||gg}|| d, }t 	|d/ |d0 kst
t 	|d0 |d, ks*t
d S )1NgmR?gDpTU?g     ?g_9?g     ?g      ?gUUu@gF^9?g      ?g$z|?g["8j@gUU@ga1?g["8@g}LRJ?gDpTU?gmR?g      @g=:r9?g["8@gAL0 @gUU@gy?gI?g9 @g["8
@g_9@g     @gB@gUU@gq1Pc1@g     @?ghs@gUU@gA!@gmR@g     @gbc@g     @?g9qa @gI?)g      ?g      ?g @g      @r)   r   T)r
   r   )r   r9   r   ZvstackTr   r   Zclip_to_bboxto_polygonsr4   r   )handZr0Zc0r1c1ZpolyZ	clip_rectZpoly_clippedr   r   r   (test_path_no_doubled_point_in_to_polygon  s:    0r   c              C   s   ddgddgg} t | }t|jdddg  t|jdddd| g t| g  t|jdd| g ddgddgddgg} ddgddgddgddgg}t | }t|jddd|g t|jdddd| g t| |g t|jdd| g d S )	NrC   rq   rQ   )widthheightF)r   r   closed_only)r      )r   r   r   )datar=   Zclosed_datar   r   r   test_path_to_polygons4  s    r   c              C   s   ddgddgg} t jt jg}t | }t | |}| }| }||k	sJt|j|jk	sZt||k	sft|j|jk	svt|j|jk	std S )Nr   r)   )r   r7   LINETOdeepcopyr   r   r   )vertsr   path1path2
path1_copy
path2_copyr   r   r   test_path_deepcopyI  s    
r   c              C   s   ddgddgg} t jt jg}t | }t | |}| }| }||k	sJt|j|jksZt||k	sft|j|jksvt|j|jkstd S )Nr   r)   )r   r7   r   copyr   r   r   )r   r   r   r   r   r   r   r   r   test_path_shallowcopyX  s    
r   phic             C   s.   g | ]&}t d ddddddddd	g
| qS )
r   rr   r   -   <   K   Z   i   x      )r   r9   ).0deltar   r   r   
<listcomp>h  s   r   )r   r   r)   c             C   s  ddddg}t  t| }tddg}||}||rJ||sNttddg}||}||rx||s|t|tdd	g}|td
d	g}||r||st|tdd	g}|tdd	g}||r||st||st|tddg}|tddg}||r@||sDt|tddg}|tddg}||s||rt|tddg}|tddg}||s||rtx^|D ]V}|tddg}|td| dfd| dfg}||s||rtqW xV|D ]N}|tddg}|tdd| fdg}||sr||r*tq*W xV|D ]N}|tddg}|tdd| fdg}||r||stqW |tddg}|tdddg}||r||st|tddg}|tddg}||sR||rVt|tddg}|tddg}||s||rtd S )Ngh㈵>g:0yE>g|=g-q=)r   r   )r	   r   )r   r   )r   r)   )r   r    )r)   r    )r   rD   )rD   rD   )r)   r)   )r    r    )r    r   )r   r"   )r   r   r   r)   rD   )r   r	   )r)   r   )r   r   )g?r)   )g        g      )g      ?g      )g      ?g      @)g        g      @)	r   ZAffine2Drotater   Zdeg2radr   Ztransform_pathintersects_pathr   )r   Z	eps_arrayrK   abr   r   r   r   test_path_intersect_pathg  sZ    


""
"
"r   offseti0ii  r   c             C   sX   | }d|  }t ||}tj|jdd}tj|jdd}tj|d tj|d d S )Nih  r   )Zaxisr   r)   )r   arcr   minr   maxr-   Zassert_allclose)r   lowhighr   ZminsZmaxsr   r   r   test_full_arc  s    r   c           	   C   s   t tddgddgddgddgddggtjd	d
d
d
dgt jd} t tddgddgddgddgddggtjd	d
d
d
d
gt jd}|| rt| |rtd S )NgƉ@g퟇@gЅ@g@g`m$@g;E@g6[@gч61@r)   r	   O   )r,   g-Hߊ@gGN@g`؊@g{Kʠ@g
@)r   r   r9   Z	code_typer   r   )	this_pathoutline_pathr   r   r   !test_disjoint_zero_length_segment  s&    

r   c              C   s`   t tddgddgg} t tddgddgddgddgg}|| sNt| |s\td S )Nr   r)   g      ?)r   r   r9   r   r   )r   r   r   r   r   "test_intersect_zero_length_segment  s    r   c              C   s   t tjtjgtjtjggt jt jgt tjtjgtjtjggt tjtjgtjtjgtjtjgtjtjggt jt jt jt jgg} x<| D ]4}|jdd}t|dkst|j	d t j
kstqW d S )NT)Zremove_nansr)   r   )r   r   r:   r7   	CLOSEPOLYCURVE3cleanedr;   r   r   rw   )rz   r=   r   r   r   r   test_cleanup_closepoly  s     
r   )<r%   numpyr   Znumpy.testingr   r   Z
matplotlibr   Zmatplotlib.pathr   Zmatplotlib.patchesr   Zmatplotlib.testing.decoratorsr   Zmatplotlib.pyplotZpyplotrF   r   Zmatplotlib.backend_basesr   r   r   r(   r1   r3   r7   ZCURVE4r   r   Z_test_pathsZ_test_path_extentsmarkZparametrizer]   r5   r   rw   r8   r@   rN   ri   rp   rt   rv   r{   r   r   r   r   r   r   r   r   Zconcatenater   ranger   r   r   r   r   r   r   r   <module>   s`   

&
	&	
#R