o
    h1K                     @   sl  d dl Z 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-e * d.krd nd/d0d1d2 Z+ed3gdd4d5d6 Z,ed7gd-d8d9d: Z-d;d< Z.d=d> Z/ed?gdd4d@dA Z0edBgdd4dCdD Z1edEgdd4dFdG Z2edHgdIdg dJe * d.krnd ndKdLdMdN Z3dOdP Z4dQdR Z5dSdT Z6dUdV Z7ejdWe8dXdY dZD d[d\ Z9ejd]e:d^d_d`dadb Z;dcdd Z<dedf Z=dgdh Z>dS )i    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   npzerosverticesshapecodesr   get_extentsextentsr   Bboxnullpath r   n/var/www/html/construction_image-detection-poc/venv/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   arangereshaper   r   
ValueErrorreescaper   r   )
bad_verts1
bad_verts2
good_verts	bad_codesmsgr   r   r   test_path_exceptions$   s(   


"r1   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      r4   r4   r4   r         ?r8   )      ?r8   boolTF)r   _create_closedcontains_pointsdtyper   testingassert_equal)r   pointsretr   r   r   test_point_in_path7   s
   
rB   z#other_path, inside, inverted_inside)      ?rD   )rD         ?)rE   rE   )rE   rD   rC   Tr   F)      пrG   rG         ?rI   rI   rI   rG   rF   )rF   rH   r7   rJ   rK   rF   )rC   )rD         ?)rL   rL   )rL   rD   rC   r2   r3   r5   r6   r2   )r
   r
   )r
   r$   r$   r$   )r$   r
   rN   c                 C   s8   t g ddd}|| |u sJ | ||u sJ d S )NrM   Tr   )r   contains_path)
other_pathinsideinverted_insider   r   r   r   test_contains_path@   s   rT   c                  C   s4   t  } g d}| j|dd}tj|g d d S )N))        rU   )rL   rU   )?rV   g      )radius)TFF)r   r   r<   r   r>   r?   )r   r@   resultr   r   r   $test_contains_points_negative_radiusS   s   rY   r4   r
   ))rU   rU   rE         ?)rU   rU   rZ   r8   )rU   rZ   rZ   rZ   )rZ   r   rZ   r   zpath, extentsc                 C   s   t |  j|ksJ d S )N)r   allr   r   )r   r   r   r   r   test_exact_extentsl   s   r\   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   r4   r
   )rU   rU   rZ   rZ   )r   MOVETOr   r[   r   r   )r]   r   r   r   r   test_extents_with_ignored_codesz   s   r_   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   r4   r8   )r   arrayr   nanr<   len)boxptestcontainsr   r   r   test_point_in_path_nan   s   (
rh   c                  C   s   t  \} }|jddd |dd}| |jd| s#J | |jd| r3J | |jd| rCJ d S )	Nlogr3   )xscaleylimr4   
   )   r8   r7   )2   r8   )	pltsubplotssetaxvspanget_pathcontains_point	transData	transformget_transform)figaxpolygonr   r   r   test_nonlinear_containment   s   r{   zarrow_contains_point.pngmpl20x86_64gS㥛?)remove_textstyletolc                  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	   )r8   rD   )r9   rE   z->(   )
arrowstylemutation_scale)r8   r4   )r9   rL   z]-[)r8   r9   )r9   rI   fancyF)r   fillr   r   r
   g?button_press_eventrm   r)sc)ro   rp   set_xlimset_ylimr   FancyArrowPatch	add_patchr   meshgridr'   	enumeratezipravelru   rv   r   canvasrg   scatter)rx   ry   arrowarrow1arrow2patches_listXYkxyxdispydispeventmpatchrR   resr   r   r   test_arrow_contains_point   sB   





"r   zpath_clipping.svg)r~   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@)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
   r4   )r      i  i  r   r$   noneredT)	facecolor	edgecolorr   )ro   figurer   add_subplotr   r   r   r   )rx   ixyry   bboxr   r   r   test_path_clipping   s$   
r   zsemi_log_with_zero.png)r   c                  C   s^   t dd} dd| d d   d }t \}}|j| |ddd	d
 |dd |d d S )Nirl   rZ   r
   r4      -o   r   )lwmarkeredgecolorgHz>T)r   r'   ro   rp   semilogyr   gridr   r   rx   ry   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   r2   )r4   r
   )r4   )r   make_compound_pathr   r   r   )emptyr2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   r^   STOPr   r   sumr   )zeropaths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linspacepisinro   xkcdrp   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   rm            @+rl   )mso^)	r   r   r   r   onesro   r   rp   r   )r   y1y2y3rx   ry   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#   )ro   errorbarr   r'   r   xlimrk   )Nr   r   r   test_marker_paths_pdf  s   r   nan_pathdefault)pdfsvgepspngg;On?)r   r~   
extensionsr   c                  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#   rm   r&   r   	   rl   r"   r   )r   rb   ro   rp   r   )y0r   rx   ry   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?)rZ   r9   g @r   r4   r   Tr   r   )
r   ra   r   vstackTr   r   clip_to_bboxto_polygonsr[   )handr0c0r1c1poly	clip_rect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 )	Nrl   r   r   )widthheightF)r  r  closed_only)r     )r   r   r   )datare   closed_datar   r   r   test_path_to_polygonsM  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   r4   )r   r^   LINETOdeepcopyr   r   vertsr   path1path2
path1_copy
path2_copyr   r   r   test_path_deepcopyb     
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   r^   r	  copyr   r   r  r   r   r   test_path_shallowcopyq  r  r  phic                 C   s   g | ]}t g d | qS ))
r   r   r  -   <   K   Z   i   x      )r   ra   ).0deltar   r   r   
<listcomp>  s    r  )r   r   r4   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   r2   r3   )r   r$   )r4   r$   r   rm   )rm   rm   r5   rO   )r$   r   )r   r&   )r   r   r   r4   rm   )r3   r	   r   )r4   r   )r   r   )rV   r4   )rU         )rZ   r!  )rZ         @)rU   r"  )r   Affine2Drotater   deg2radr   transform_pathintersects_path)r  	eps_arrayrv   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   )axisr   r4   )r   arcr   minr   maxr>   assert_allclose)r,  lowhighr   minsmaxsr   r   r   test_full_arc  s   r6  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@)r4   r
   r
   r
   O   )r=   g-Hߊ@gGN@g`؊@g{Kʠ@g
@)r4   r
   r
   r
   r
   )r   r   ra   	code_typer'  	this_path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 r`   )r   r   ra   r'  r9  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)remove_nansr4   r   )
r   r   rb   r^   	CLOSEPOLYCURVE3cleanedrc   r   r   )r   re   rA  r   r   r   test_cleanup_closepoly  s   
 
rB  )?platformr*   numpyr   numpy.testingr   r   
matplotlibr   matplotlib.pathr   matplotlib.patchesr   matplotlib.testing.decoratorsr   matplotlib.pyplotpyplotro   r   matplotlib.backend_basesr   r   r!   r1   rB   markparametrizerT   rY   r^   CURVE4r@  r	  _test_paths_test_path_extentsr   r\   r?  r   r_   rh   r{   machiner   r   r   r   r   r   r   r   r   r   r  r  r  concatenater+  ranger6  r<  r=  rB  r   r   r   r   <module>   s    
	

&

		

%


	




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