o
    GfJ                     @   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ejde	g dddddfe	g dddddfe	g dddddfe	g dddddfe	g dddddfe	g dddddfg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 g d!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/d0 Z)ed1gdd2d3d4 Z*ed5gd-d6d7d8 Z+d9d: Z,d;d< Z-ed=gdd2d>d? Z.ed@gdd2dAdB Z/edCgdd2dDdE Z0edFgdGdg dHdIdJdK Z1dLdM Z2dNdO Z3dPdQ Z4dRdS Z5ejdTe6dUdV dWD dXdY Z7ejdZe8d[d\d]d^d_ Z9d`da Z:dbdc Z;ddde Z<dS )f    N)assert_array_equal)patches)Path)Polygon)image_comparison)
transforms)
MouseEventc                  C   sL   t tddd} | jjdksJ | jd u sJ t|  jt	j
 j d S )Nr      Tclosed)r   npZzerosverticesshapecodesr   get_extentsextentsr   BboxZnullpath r   :lib/python3.10/site-packages/matplotlib/tests/test_path.pytest_empty_closed_path   s   

r   c                     sJ   t    fdd} tt |   W d    d S 1 sw   Y  d S )Nc                      s    j d  _ d S )N       @)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    n1 s&w   Y  t dddd}tjttd|j d t	| W d    n1 sRw   Y  t ddd}t d}td|j d	|j }tjt|d t	|| W d    d S 1 sw   Y  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   sD   t g d} ddg}| |}|jdksJ tj|ddg d S )N)r   r   r      r-   r-   r-   r         ?r1   )      ?r1   boolTF)r   Z_create_closedcontains_pointsdtyper   testingassert_equal)r   pointsretr   r   r   test_point_in_path6   s
   
r:   z#other_path, inside, inverted_inside)      ?r<   )r<         ?)r=   r=   )r=   r<   r;   Tr   F)      пr?   r?         ?rA   rA   rA   r?   r>   )r>   r@   r0   rB   rC   r>   )r;   )r<         ?)rD   rD   )rD   r<   r;   r+   r,   r.   r/   r+   )r
   r
   )r
   r"   r"   r"   )r"   r
   rF   c                 C   s8   t g ddd}|| |u sJ | ||u sJ d S )NrE   Tr   )r   Zcontains_path)Z
other_pathinsideZinverted_insider   r   r   r   test_contains_path?   s   rI   c                  C   s4   t  } g d}| j|dd}tj|g d d S )N))        rJ   )rD   rJ   )?rK   g      )Zradius)TFF)r   r   r4   r   r6   r7   )r   r8   resultr   r   r   $test_contains_points_negative_radiusR   s   rM   r-   r
   ))rJ   rJ   r=         ?)rJ   rJ   rN   r1   )rJ   rN   rN   rN   )rN   r   rN   r   zpath, extentsc                 C   s   t |  j|ksJ d S )N)r   allr   r   )r   r   r   r   r   test_exact_extentsk   s   rP   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J d S )Nr   r-   r
   )rJ   rJ   rN   rN   )r   MOVETOr   rO   r   r   )rQ   r   r   r   r   test_extents_with_ignored_codesy   s   rS   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.J |d r4J d S Nr   r-   r1   )r   arrayr   nanr4   len)Zboxptestcontainsr   r   r   test_point_in_path_nan   s   (
r[   c                  C   s   t  \} }|jddd |dd}| |jd|js"J | |jd|jr1J | |jd|jr@J d S )	Nlogr,   )Zxscaleylimr-   
   )   r1   r0   )2   r1   )pltsubplotssetZaxvspanZget_pathZcontains_point	transData	transform)figaxZpolygonr   r   r   test_nonlinear_containment   s   rh   zarrow_contains_point.pngZ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\}}t
t| | D ]3\}\}	}
|j|	|
g\}}td| j||}t
|D ]\}}||\}}|r|j|	|
ddd qyq]d S )Nr	   )r1   r<   )r2   r=   z->(   )
arrowstylemutation_scale)r1   r-   )r2   rD   z]-[)r1   r2   )r2   rA   ZfancyF)rl   fillrm   r   r
   g?Zbutton_press_eventr_   r)sc)ra   rb   set_xlimset_ylimr   ZFancyArrowPatch	add_patchr   Zmeshgridr%   	enumeratezipZravelrd   re   r   ZcanvasrZ   Zscatter)rf   rg   ZarrowZarrow1Zarrow2Zpatches_listXYkxyZxdispZydispZeventmZpatchrH   resr   r   r   test_arrow_contains_point   sB   





"r~   zpath_clipping.svg)ri   c               	   C   s   t jdd} tg dg dg dg dg dg dg d	gD ]8\}}| d
d|d }g d}||d |d |d   ||d |d |d   |t|dddd qd S )N)g      @g@)Zfigsize)   r   r   ^    r   )r   r   )r   r   r   r   d   )r   r   r   r   r   )r   r     r   r   )r   r   r   r   r   )r   r   r   r   )r   r   r   r   r!   r
   r-   )r      i  i  r   r"   ZnoneZredT)Z	facecolorZ	edgecolorr   )ra   Zfigureru   Zadd_subplotrr   rs   rt   r   )rf   iZxyrg   Zbboxr   r   r   test_path_clipping   s$   
r   zsemi_log_with_zero.png)rj   c                  C   s^   t dd} dd| d d   d }t \}}|j| |ddd	d
 |dd |d d S )Nir^   rN   r
   r-      -o   ry   )ZlwZmarkeredgecolorgHz>T)r   r%   ra   rb   Zsemilogyrs   Zgridrz   r{   rf   rg   r   r   r   test_log_transform_with_zero   s   r   c                  C   sz   t  } | jjdksJ t | | }|jjdksJ |jjdks"J t t dg| }|jjdks3J |jjdks;J d S )Nr	   )r   r+   )r-   r
   )r-   )r   make_compound_pathr   r   r   )emptyZr2Zr3r   r   r   test_make_compound_path_empty   s   r   c                  C   sL   ddg} dt | | gt jt jgg }t j| }t|jt jkdks$J d S )Nr   r"   )r   rR   STOPr   r   sumr   )ZzeropathsZcompound_pathr   r   r   test_make_compound_path_stops   s   
r   zxkcd.pngc                  C   sp   t jd t ddt j d} t | }t  t \}}|	| | W d    d S 1 s1w   Y  d S )Nr   r
   r   )
r   randomseedlinspaceZpiZsinra   xkcdrb   plotr   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 * t \}}|j| |ddd |j| |ddd |j| |d	dd W d    d S 1 sKw   Y  d S )
Nr   r_            @+r^   )mso^)	r   r   r   r   onesra   r   rb   r   )rz   y1Zy2Zy3rf   rg   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!   )ra   Zerrorbarr   r%   r   Zxlimr]   )Nr   r   r   test_marker_paths_pdf  s   r   Znan_pathdefault)ZpdfZsvgepsZpng)rj   ri   
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!   r_   r$   r   	   r^   r    r   )r   rV   ra   rb   r   )Zy0r   rf   rg   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sJ t 	|d0 |d, ksJ 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?)rN   r2   g @r   r-   r   Tr   r   )
r   rU   r   ZvstackTr   r   Zclip_to_bboxto_polygonsrO   )ZhandZr0Zc0Zr1Z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 )	Nr^   r   rk   )widthheightF)r   r   closed_only)r      )r   r   r   )datarX   Zclosed_datar   r   r   test_path_to_polygonsK  s"   r   c                  C   s   ddgddgg} t jt jg}t | }t | |}| }| }||us%J |j|jus-J ||us3J |j|jus;J |j|jusCJ d S Nr   r-   )r   rR   LINETOZdeepcopyr   r   Zvertsr   Zpath1Zpath2Z
path1_copyZ
path2_copyr   r   r   test_path_deepcopy`     
r   c                  C   s   ddgddgg} t jt jg}t | }t | |}| }| }||us%J |j|ju s-J ||us3J |j|ju s;J |j|ju sCJ d S r   )r   rR   r   copyr   r   r   r   r   r   test_path_shallowcopyo  r   r   phic                 C   s   g | ]}t g d | qS ))
r   r   r   -   <   K   Z   i   x      )r   rU   ).0Zdeltar   r   r   
<listcomp>~  s    r   )r   r   r-   c                 C   sx  g d}t  t| }tddg}||}||r#||s%J tddg}||}||r:||s<J |tddg}|tddg}||rX||sZJ |tddg}|tddg}||rv||sxJ ||sJ |tdd	g}|td
dg}||r||sJ |tddg}|tddg}||s||rJ |tddg}|tddg}||s||rJ |D ]*}|tddg}|td| dfd| dfg}||s||rJ q|D ]'}|tddg}|tdd| fdg}||s,||r.J q|D ]'}|tddg}|tdd| fdg}||rV||sXJ q2|tddg}|tg d}||rx||szJ |tddg}|tddg}||s||rJ |tddg}|tddg}||s||rJ d S )N)gh㈵>g:0yE>g|=g-q=)r   r   )r
   r   r+   r,   )r   r"   )r-   r"   r   r_   )r_   r_   r.   rG   )r"   r   )r   r$   )r   r   r   r-   r_   )r,   r	   r   )r-   r   )r   r   )rK   r-   )rJ         )rN   r   )rN         @)rJ   r   )r   ZAffine2Drotater   Zdeg2radr   Ztransform_pathintersects_path)r   Z	eps_arrayre   abr   r   r   r   test_path_intersect_path~  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   Zarcr   minr   maxr6   Zassert_allclose)r   ZlowZ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g d	t jd
} t tddgddgddgddgddggtjg dt jd
}|| rEJ | |rLJ d S )NgƉ@g퟇@gЅ@g@g`m$@g;E@g6[@gч61@)r-   r
   r
   r
   O   )r5   g-Hߊ@gGN@g`؊@g{Kʠ@g
@)r-   r
   r
   r
   r
   )r   r   rU   Z	code_typer   Z	this_pathZoutline_pathr   r   r   !test_disjoint_zero_length_segment  s0   	

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}|| s'J | |s.J d S rT   )r   r   rU   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} | D ]}|jdd}t|dksSJ |jd t j	ks]J qCd S )NT)Zremove_nansr-   r   )
r   r   rV   rR   	CLOSEPOLYCURVE3cleanedrW   r   r   )r   rX   r   r   r   r   test_cleanup_closepoly	  s   
 
r   )=r'   Znumpyr   Znumpy.testingr   r   Z
matplotlibr   Zmatplotlib.pathr   Zmatplotlib.patchesr   Zmatplotlib.testing.decoratorsr   Zmatplotlib.pyplotZpyplotra   r   Zmatplotlib.backend_basesr   r   r   r*   r:   ZmarkZparametrizerI   rM   rR   ZCURVE4r   r   Z_test_pathsZ_test_path_extentsrv   rP   r   r   rS   r[   rh   r~   r   r   r   r   r   r   r   r   r   r   r   r   Zconcatenater   ranger   r   r   r   r   r   r   r   <module>   s    
	

&

		
%


	





#
Q
