a
    ضaE                     @   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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$d% Z(ed&gd!d'd(d) Z)ed*gd"d+d,d- Z*d.d/ Z+d0d1 Z,ed2gd!d'd3d4 Z-ed5gd!d'd6d7 Z.ed8gd!d'd9d: Z/ed;gd<d!g d=d>d?d@ Z0dAdB Z1dCdD Z2dEdF Z3dGdH Z4ej dIe5dJdK dLD dMdN Z6ej dOe7dPdQdRdSdT Z8dUdV Z9dWdX Z:dYdZ Z;dS )[    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 s0J t|  jt	j
 j d S )Nr      Tclosed)r   npZzerosverticesshapecodesr   get_extentsextentsr   Bboxnullpath r   j/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/matplotlib/tests/test_path.pytest_empty_closed_path   s    

r   c                     sH   t    fdd} tt |   W d    n1 s:0    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 sL0    Y  t dddd}tjttd|j d t	| W d    n1 s0    Y  t ddd}t d}td|j d	|j }tjt|d t	|| W d    n1 s0    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   sJ   g d} t | dd}ddg}||}|jdks4J tj|ddg d S )N)r   r   r      r.   r.   )r.   r   r,   Tr         ?r1   )      ?r1   boolF)r   contains_pointsdtyper   testingassert_equal)Zverts2r   pointsretr   r   r   test_point_in_path6   s    
r:   c                  C   s4   t  } g d}| j|dd}tj|g d d S )N))        r;   )      ?r;   )?r=   g      )Zradius)TFF)r   r   r4   r   r6   r7   )r   r8   resultr   r   r   $test_contains_points_negative_radiusA   s    r?   r.   r
   ))r;   r;         ?      ?)r;   r;   rA   r1   )r;   rA   rA   rA   )rA   r   rA   r   zpath, extentsc                 C   s   t |  j|ksJ d S )N)r   allr   r   )r   r   r   r   r   test_exact_extentsZ   s    rC   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
   )r;   r;   rA   rA   )r   MOVETOr   rB   r   r   )rD   r   r   r   r   test_extents_with_ignored_codesh   s    rF   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 rhJ d S Nr   r.   r1   )r   arrayr   nanr4   len)Zboxptestcontainsr   r   r   test_point_in_path_nanr   s    (
rN   c                  C   s   t  \} }|jddd |dd}| |jd|jsDJ | |jd|jrbJ | |jd|jrJ d S )	Nlogr-   )Zxscaleylimr.   
   )   r1   r0   )2   r1   )pltsubplotssetZaxvspanget_pathZcontains_point	transData	transform)figaxZpolygonr   r   r   test_nonlinear_containment{   s    r\   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\}}t
t| | D ]f\}\}	}
|j|	|
g\}}td| j||}t
|D ],\}}||\}}|r|j|	|
ddd qqd S )Nr	   )r1   g      ?)r2   r@   z->(   )
arrowstylemutation_scale)r1   r.   )r2   r<   z]-[)r1   r2   )r2   g      ?ZfancyF)r`   fillra   r   r
   g?Zbutton_press_eventrR   r)sc)rT   rU   set_xlimset_ylimr   ZFancyArrowPatch	add_patchr   Zmeshgridr&   	enumeratezipZravelrX   rY   r   ZcanvasrM   Zscatter)rZ   r[   ZarrowZarrow1Zarrow2Zpatches_listXYkxyZxdispZydispeventmpatchZinsideresr   r   r   test_arrow_contains_point   s<    





"rt   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 ]p\}}| d
d|d }g d}||d |d |d   ||d |d |d   |t|dddd q>d S )N)g      @g@)Zfigsize)   rv   rv   ^    rx   )rz   rv   )ru   rw   ry   rz   d   )rv   r|   rw   ry   r{   )r}   rv     ry   r{   )r}   r~   rz   r   r{   )r~   r   r{   r}   )r   r{   r}   r~   r"   r
   r.   )r      i  i  r   r#   noneredT)Z	facecolorZ	edgecolorr   )rT   figureri   Zadd_subplotrf   rg   rh   r   )rZ   iZxyr[   Z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 )NirQ   rA   r
   r.      -o   rm   )ZlwZmarkeredgecolorgHz>T)r   r&   rT   rU   Zsemilogyrg   Zgridrn   ro   rZ   r[   r   r   r   test_log_transform_with_zero   s    r   c                  C   s   t  } | jjdksJ d S )Nr	   )r   make_compound_pathr   r   )rc   r   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sHJ d S )Nr   r#   )r   rE   STOPr   r   sumr   )ZzeropathsZcompound_pathr   r   r   test_make_compound_path_stops   s    
r   zxkcd.pngc                  C   sn   t jd t ddt j d} t | }t ( t \}}|	| | W d    n1 s`0    Y  d S )Nr   r
   r|   )
r   randomseedlinspacepisinrT   xkcdrU   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 R t \}}|j| |ddd |j| |ddd |j| |d	dd W d    n1 s0    Y  d S )
Nr   rR            @+rQ   )mso^)	r   r   r   r   onesrT   r   rU   r   )rn   y1y2Zy3rZ   r[   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"   )rT   Zerrorbarr   r&   r   ZxlimrP   )Nr   r   r   test_marker_paths_pdf   s    r   Znan_pathdefault)ZpdfsvgepsZpng)r^   r]   
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"   rR   r%   r   	   rQ   r!   r   )r   rI   rT   rU   r   )Zy0r   rZ   r[   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J t 	|d0 |d, ks*J 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?)rA   r2   g @r   r.   r   Tr   r   )
r   rH   r   ZvstackTr   r   Zclip_to_bboxto_polygonsrB   )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 )	NrQ   r   r_   )widthheightF)r   r   closed_only)r      )r   r   r   )datarK   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 | |}| }| }||usJJ |j|jusZJ ||usfJ |j|jusvJ |j|jusJ d S Nr   r.   )r   rE   LINETOdeepcopyr   r   Zvertsr   Zpath1Zpath2Z
path1_copyZ
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 | |}| }| }||usJJ |j|ju sZJ ||usfJ |j|ju svJ |j|ju sJ d S r   )r   rE   r   copyr   r   r   r   r   r   test_path_shallowcopyX  s    
r   phic                 C   s   g | ]}t g d | qS ))
r   r   r   -   <   K   Z   i   x      )r   rH   ).0deltar   r   r   
<listcomp>g  s   r   )r   r   r.   c                 C   s  g d}t  t| }tddg}||}||rF||sJJ tddg}||}||rt||sxJ |tddg}|tddg}||r||sJ |tddg}|tddg}||r||sJ ||sJ |tdd	g}|td
dg}||r:||s>J |tddg}|tddg}||sz||r~J |tddg}|tddg}||s||rJ |D ]V}|tddg}|td| dfd| dfg}||s||rJ q|D ]N}|tddg}|tdd| fdg}||sf||rJ q|D ]N}|tddg}|tdd| fdg}||r||srJ qr|tddg}|tg d}||r||sJ |tddg}|tddg}||s>||rBJ |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   rR   )rR   rR   r/   )r#   r#   )r#   r   )r   r%   )r   r   r   r.   rR   )r-   r	   r   )r.   r   )r   r   )r=   r.   )r;         )rA   r   )rA         @)r;   r   )r   ZAffine2Drotater   Zdeg2radr   Ztransform_pathintersects_path)r   Z	eps_arrayrY   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   Zarcr   minr   maxr6   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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
}|| rJ | |rJ 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   rH   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}|| sNJ | |s\J d S rG   )r   r   rH   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 ]4}|jdd}t|dksJ |jd t j	ksJ qd S )NT)Zremove_nansr.   r   )
r   r   rI   rE   	CLOSEPOLYCURVE3cleanedrJ   r   r   )r   rK   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pyplotrT   r   Zmatplotlib.backend_basesr   r   r    r+   r:   r?   rE   ZCURVE4r   r   Z_test_pathsZ_test_path_extentsmarkZparametrizerj   rC   r   r   rF   rN   r\   rt   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
