a
    ضa]                     @   s  d Z ddlZddlmZmZ ddlZddlZddl	m
Z
mZmZmZmZ ddlmZmZ ddlmZ ddlmZ ddlmZmZmZmZmZ m!Z! ddl"Z"e"j#dkZ$d	d
 Z%dd Z&edgddd Z'dd Z(edgdd Z)edgdddd Z*edgdddd Z+ej,-ddd  Z.ed!gddd"d# Z/d$d% Z0edgdd&d' Z1d(d) Z2ed*gde$rld+ndd,d-d. Z3d/d0 Z4ed1gddd2d3d4 Z5ed5gd6d7 Z6ed8gd9dd:d;d< Z7edgdd=d> Z8d?d@ Z9dAdB Z:dCdD Z;dEdF Z<edgddGdH Z=dIdJ Z>dKdL Z?edMgd9dNdOdP Z@edQgd9dNdRdS ZAedTgdgdUdVdW ZBedTgdgdUdXdY ZCdZd[ ZDejEFd\d]d^d_ ZGd`da ZHdbdc ZIddde ZJdfdg ZKdhdi ZLdS )jz'
Tests specific to the patches module.
    N)assert_almost_equalassert_array_equal)AnnulusPatchPolygon	RectangleFancyArrowPatch)image_comparisoncheck_figures_equal)Bbox)collectionscolorspatchespath
transformsrcParamswin32c                  C   s   ddgddgddgg} | ddgg }t | dd}t| | ||  t| | t |dd}t| |  || t| |  t | dd}t| |  ||  t| |  t |dd}t| | || t| | d S )Nr      TclosedF)r   r   Zget_xyZset_xy)xyZxyclosedp r   m/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/matplotlib/tests/test_patches.pytest_Polygon_close   s$    



r   c            	      C   s   t ddg} d}d}d}t| |||d}t| ||}t j| d }t t |t | gt |t |gg}t || |  j	|  }t
| | d S )N      ?g       @      g      >@angle     f@)npasarrayr   piarraycossininner	get_vertsTr   )	locwidthheightr   Zrect1Zrect2Z	angle_radZrotation_matrixZ	new_vertsr   r   r   test_rotate_rect9   s    r-   Zpng)
extensionsc           
      C   s   |   }|  }d}d\}}d}t||||d}|| | |ksJJ t|||}	|	 dksfJ ||	 |	| |	 |ksJ d S )Nr   r   r   r      r   r   )add_subplotr   	add_patchZ	get_angleZ	set_angle)
fig_testfig_refax_testax_refr*   r+   r,   r   Zrect_refZ	rect_testr   r   r   test_rotate_rect_drawQ   s    


r8   c                  C   sH   t ddd d d } t ddd d d }tt|dd|  d S )	N)r   r   r/   r9   r:   r   )r   r(   r   r!   Zroll)Zpos_verticesZneg_verticesr   r   r   test_negative_rectf   s    r<   clip_to_bboxc            	      C   s   t  \} }|ddg |ddg tjd }| jddg9  _| jddg8  _tj	  }| jddg9  _| jdd	g7  _tj
||}tj|d
ddd}|| tddgddgg}||}tj|d
dddd}|| d S )Ni   ijd      
         i      ?Zcoralnone)alpha	facecolor	edgecolorig     `S2   igreen   black)rF   rG   lwrH   )pltsubplotsset_xlimset_ylimmpathPathunit_regular_stardeepcopyverticesunit_circleZmake_compound_pathmpatches	PathPatchr3   mtransformsr   r=   )	figaxr   Zpath2Zcombinedpatchbboxresult_pathZresult_patchr   r   r   test_clip_to_bboxn   s(    


r`   Zpatch_alpha_coloringT)remove_textc            	      C   s   t jd} t j }t|j| jddd g}t|j| jg}t ||}t |d |}t	 }t
j|gddddd	}|| tj|ddddd
}|| |ddg |ddg dS )z
    Test checks that the patch and collection are rendered with the specified
    alpha values in their facecolor and edgecolor.
       Nr;   r   rB   dashdotr   r   r   rD   r   r   r   g      ?	linewidth
linestylesrG   rH   rg   	linestylerG   rH   r   rR   rS   rT   rW   r!   concatenaterV   codesrN   axesmcollectionsZPathCollectionZadd_collectionrX   rY   r3   rP   rQ   	starcirclevertsrm   Z	cut_star1Z	cut_star2r\   colr]   r   r   r   test_patch_alpha_coloring   s*    


ru   Zpatch_alpha_overridec            	      C   s   t jd} t j }t|j| jd d d g}t|j| jg}t ||}t |d |}t	 }t
j|gdddddd	}|| tj|dddddd
}|| |ddg |ddg d S )Nrb   r;   r   rB   rc         ?rd   re   )rg   rh   rF   rG   rH   )rg   rj   rF   rG   rH   r   rk   rp   r   r   r   test_patch_alpha_override   s.    


rw   defaultc                  C   s*   t jddddd} |  d dks&J d S )Nr/   r   rE   )rG   rF   r   )rN   Circleget_facecolor)cr   r   r   test_patch_color_none   s    r|   Zpatch_custom_linestylec            	      C   s   t jd} t j }t|j| jd d d g}t|j| jg}t ||}t |d |}t	 }t
j|gddgddd}|| tj|ddddd	}|| |dd
g |dd
g d S )Nrb   r;   r   rB   )r   )rB      rA   r}   r   r   r   r   r   r   rf   ri   r   rk   rp   r   r   r   test_patch_custom_linestyle   s*    


r   c            
      C   s   t jd} t j }t|j| jd d d g}t|j| jg}g d}t	 \}}t
|D ]6\}}t || |} tj| d|ddd}	||	 q`|d|d g |d|d g |j  d S )	Nrb   r;   )---z-.:solidZdashedrc   Zdottedr   r~   r   ri   r   )rR   rS   rT   rW   r!   rl   rV   rm   rN   rO   	enumeraterX   rY   r3   rP   rQ   ZcanvasZdraw)
rq   rr   rs   rm   rh   r[   r\   ilsr]   r   r   r   test_patch_linestyle_accents   s"    
r   c           	      C   s   t j }|  }| }tg dD ]X\}}t |j| |j}tj|d|ddd}|	| tj|ddddd}|	| q&|
d|d	 g |d|d	 g |
d|d	 g |d|d	 g d S )
N)rE   None  r   r~   r   ri   r   rE   r;   r   )rR   rS   rW   r2   r   rV   rm   rX   rY   r3   rP   rQ   )	r4   r5   rr   r6   r7   r   r   r   r]   r   r   r   test_patch_linestyle_none  s*    

r   c                  C   s   dddddd} dd |   D }tjf i |}|   D ]@\}\}}}t|||ksZJ t||| t|||ks:J q:d S )	N)r/   r0   Z
set_center)rB   r@   Z
set_radius)r   r   Z	set_width)r   r1   Z
set_theta1)-   rI   Z
set_theta2)centerrr+   theta1theta2c                 S   s   i | ]\}}||d  qS )r   r   ).0kvr   r   r   
<dictcomp>)      z'test_wedge_movement.<locals>.<dictcomp>)itemsrX   Wedgegetattr)Z
param_dictZ	init_argswattrold_vnew_vfuncr   r   r   test_wedge_movement"  s    r   Zwedge_rangegffffff?)ra   Ztolc            	   
   C   s   t  } d}ddgddg||d gddgd	d
gddgddgddgddgg	}t|D ]J\}\}}|d }|d }tj|d |d fd||dddd}| | qR| ddg | ddg d S )Ngo͂@g,(J@g 7
m@g,(J@gm7
m@r    r   h  Z   i  iL   i|  r   .   r   r   rE   r   )rG   rH   rM   r:   r@   	   )rN   rn   r   rX   r   
add_artistrP   rQ   )	r\   t1argsr   r   r   xyZwedger   r   r   test_wedge_range3  s*    

r   c                  C   sD  t jddd} t| dksJ t jddddd} t| dks@J t jddddd} t| d	ksbJ t jddddd
d} t| dksJ t jddddd
dd} d}t| |ksJ t jddddd} d}t| |ksJ t jdddd} t| dksJ t j	dddd} t| dksJ t j
dddd} t| dks:J tjg ddd}t |} t| dkshJ t td } t| d!ksJ ddgddgddgg}t |} t| d"ksJ t j|d#} t| d$d% d&ksJ t dd} t| d'ks J t ddd(} t| d)ks J t | dd}t|d*ks@J d$S )+z
    Check that patches have nice and working `str` representation.

    Note that the logic is that `__str__` is defined such that:
    str(eval(str(p))) == str(p)
    r   r   r   )r   radiuszCircle(xy=(1, 2), radius=3)rK   rB   )r   r+   r,   r   z.Ellipse(xy=(1, 2), width=3, height=4, angle=5)z0Rectangle(xy=(1, 2), width=3, height=4, angle=5)rb   )r   r   r   r   r+   z6Wedge(center=(1, 2), r=3, theta1=4, theta2=5, width=6)r}   )r   r+   r,   r   r   r   z>Arc(xy=(1, 2), width=3, height=4, angle=5, theta1=6, theta2=7))r   rK   r   r   )r   r   r+   r   z.Annulus(xy=(1, 2), r=(3, 4), width=1, angle=2)r>   )r   z3RegularPolygon((1, 2), 20, radius=5, orientation=0))r   r   
resolutionz.CirclePolygon((1, 2), radius=5, resolution=20))r+   r,   z)FancyBboxPatch((1, 2), width=3, height=4))r   r   r   r   Tr   zPathPatch3((1, 2) ...)r   r   z
Polygon0()zPolygon3((1, 2) ...))r   N   zFancyArrowPatch(Path(array(zFancyArrowPatch((1, 2)->(3, 4))datazConnectionPatch((1, 2), (3, 4))z'Shadow(ConnectionPatch((1, 2), (3, 4))))rX   ry   strEllipser   r   Arcr   ZRegularPolygonZCirclePolygonZFancyBboxPatchrR   rS   rY   r   r!   emptyr   ConnectionPatchShadow)r   expectedr   r   sr   r   r   test_patch_strP  sH    

r   Zmulti_color_hatch)ra   stylec               	   C   s   t  \} }|tdtdd}t|D ],\}}|d |d| |d q*|	  |
d tdD ]^}tjdd|i* t|d	 dfd
dddd}W d    n1 s0    Y  || qrd S )NrB   r   rb   rE   zC{}/Fzhatch.colorg?g?z//)hatchfc)rN   rO   barranger   Zset_facecolorZset_edgecolorformatZ	set_hatchZautoscale_viewZ	autoscalemplr   contextr   r3   )r[   r\   Zrectsr   rectr   r   r   r   test_multi_color_hatch  s    

8r   zunits_rectangle.pngc                  C   s   dd l m  m}  |   td| j d| j fd| j d| j }t \}}|	| |
d| j d| j g |d| j d| j g d S )	Nr   rB   rb   r   r   rK   r}   r   )Zmatplotlib.testing.jpl_unitsZtestingZ	jpl_unitsregisterrX   r   kmrN   rO   r3   rP   rQ   )Ur   r[   r\   r   r   r   test_units_rectangle  s    *
r   zconnection_patch.pngZmpl20)r   ra   c               	   C   sl   t dd\} \}}tjdddd||dd}|| d}d	}d
}| }tj||||dd}|| d S )Nr   r   )皙?r   )?r   r   ->)xyAxyBcoordsAcoordsBaxesAZaxesB
arrowstyle)g333333?r   )        皙?zaxes fractionr   )r   r   r   r   r   )rN   rO   rX   r   r   Zget_yaxis_transform)r[   ax1ax2conr   r   r   r   r   r   r   test_connection_patch  s    

r   c              	   C   s   |  dd\}}tjdd|ddddd	}| | | dd\}}|j}tjd
 tjd< tjdd||jd |jd fdddd	}|| d S )Nr   r   )333333?r   r   )iizfigure pixelsr   rB   )r   r   r   r   r   r   ZshrinkBz
figure.dpisavefig.dpir1   r>   )	rO   rX   r   r   r^   rN   r   r+   r,   )r4   r5   r   r   r   Zbbr   r   r   test_connection_patch_fig  s     
r   c                  C   sX   ddl m } m} | dddddd}|dd}t|df|d}t \}}|| d S )Nr   )datetime	timedelta  r      )seconds)r   r   rX   r   rN   rO   r3   )r   r   startdeltar]   r[   r\   r   r   r   test_datetime_rectangle  s    
r   c                  C   s   ddl m }  | dddddd}| ddd}tt" t|df|d W d    n1 s\0    Y  tt" td|fd| W d    n1 s0    Y  d S )Nr   r   r   r   i  rB   )r   pytestZraises	TypeErrorrX   r   )r   r   Zdt_deltar   r   r   test_datetime_datetime_fails  s    0r   c                     s|   t dddd g d}      d tfdd| D }t fdd| D }t||ksxJ d S )	NrD   rD   rD   r   r   )r   rD   )r   rD   )rv   rD   r   c                    s   g | ]}  |qS r   Zcontains_pointr   point)r   r   	transformr   r   
<listcomp>  s
   z'test_contains_point.<locals>.<listcomp>c                    s   g | ]}  |qS r   r   r   )ellr   r   r     r   )rX   r   get_pathget_transform_process_radiusr!   r$   all)pointsr   resultr   )r   r   r   r   r   test_contains_point  s    
r   c                  C   s`   t dddd} g d}|  }|  }| d }||||}| |}t||ks\J d S )Nr   rD   r   r   r   )rX   r   r   r   r   Zcontains_pointsr!   r   )r   r   r   r   r   r   r   r   r   r   test_contains_points   s    

r   c                 C   s   t ddg}t ddg}dtjd< |  }tj|ddd}tj||d |d	 d
}|| || | }tj|ddd}tj||j	d |  ddt 
t| d t 
t| d dd}|| || d S )Nr   r   r   figurer   rD   )r   r+   r,   r   r   )ZoxZoyH   )r   r+   r,   r   ecrF   )r!   r$   rN   r   rO   rX   r   r   r3   Zdpir"   mcolorsZto_rgbrz   )r4   r5   r   ZdxyZa1r   ZshadowZa2r   r   r   test_shadow  s$    



r   c                  C   s:   ddl m }  | ddd}t \}}td|fd|f}d S )Nr   r   i  r   {Gz?)r   rN   rO   r   )r   Zdtimer[   r\   arrowr   r   r   test_fancyarrow_units%  s    r   c                  C   s   t  \} }|jdddddddd}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g}t|t|jdsxJ 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g}|jdddddddd t|t|jdsJ d S )Nr   rA   rB   r   rD   )head_length
head_widthr+   gGz+@g33333$@gL#@g\(\$@gp=
ף#@g
ףp=
?g
ףp=
ǿr   g(\µ0@gGz.@g\(\?g(\?   )r   r   ZdxZdyr+   r  r   )	rN   rO   r   r!   r$   Zallcloseroundrs   set_data)r[   r\   r   Z	expected1Z	expected2r   r   r   test_fancyarrow_setdata-  s:    

r  zlarge_arc.svg)r   c                  C   s   t dd\} \}}d}d}d}||fD ]8}tj||f||ddd}|| |  |d q(|d	d
 |dd |dd |dd d S )Nr   r      ii  r   )rM   colorequalr}   r@   rB   rb   iXiPF  ii  )	rN   rO   rX   r   r3   set_axis_off
set_aspectrP   rQ   )r[   r   r   r   r   Zdiameterr\   ar   r   r   test_large_arcL  s    
r  zall_quadrants_arcs.svgc                  C   sX  t jddddd\} }d}d}d}d}t| |D ]\}\}}d	}	td
d
td f||fD ]\}
}t||	dD ]v\}\}}tj|| |
 || |
 f|| || dd| d| t	t
||d d| d| d	}|| qv|d }	qb|| d |d  || d |d  |jd	dd |jd	dd |  |d q4d S )Nr   F)rA   rA   )ZsqueezeZfigsizei ))r;   r;   )r;   r   r0   )r   r;   ))r   r   )r   r   )r   r;   )r;   r   )r   )r   r   )r   r   )r   gMbP?r   gH.?)r   rK   Cr   r   zbig )rM   r  Zzorderr   labelgidi  r   )r  r  )rN   rO   zipZravelr!   sqrtr   rX   r   Zrad2degZarctan2r3   rP   rQ   ZaxhlineZaxvliner	  r
  )r[   Zax_arrZscaleZdiag_centersZon_axis_centersZskewsr\   ZsxZsyr   ZprescaleZcentersjZx_signZy_signr  r   r   r   test_rotated_arcs`  s@    


r  Zannulus)Zbaseline_imagesr.   c               
   C   sV   t  \} }tddddd}tddddd	d
ddd}|| || |d d S )Nr   r   皙?gr   rD   r   r   r   mbrD   xxxr   r   rF   r   r  )rN   rO   r   r3   r
  r[   r\   Zcirr   r   r   r   test_annulus  s    


r  c               
   C   s   t  \} }tddddd}tddddd	d
ddd}|| || |d d|_d|_d|_d|_d|_d|_d|_d S )N)r   r   r   r   r  r  r   r   r   r  r  rD   r  r  r  r   r  r  r   )	rN   rO   r   r3   r
  r   Zradiir+   r   r  r   r   r   test_annulus_setters  s    



r  c                  C   s8   ddg} t | | gj}tt| g j|ks4J d S )Nr   )r   Zextentsr!   r   r   Zget_extents)r   Zcorrect_extentsr   r   r   test_degenerate_polygon  s    r  kwarg)rH   rG   c                 C   sH   t jtdd& tf ddi| di W d    n1 s:0    Y  d S )NzQSetting the 'color' property will override the edgecolor or facecolor properties.)matchr  rL   )r   ZwarnsUserWarningr   )r   r   r   r   test_color_override_warning  s    r#  c                  C   s"   t td} |  g ksJ d S )Nr   )r   r!   Zzerosr(   )Zpolyr   r   r   test_empty_verts  s    r$  c                  C   sN   t  } | td   |  td  ks,J | d  |  td ksJJ d S )Nzpatch.antialiased)r   Zset_antialiasedr   Zget_antialiasedr]   r   r   r   test_default_antialiased  s
    
r&  c                  C   s.   t  } | d | d  |  dks*J d S )Nr   r   )r   Zset_linestyleZget_linestyler%  r   r   r   test_default_linestyle  s    

r'  c                  C   s   t  } |  dksJ d S )NZbutt)r   Zget_capstyler%  r   r   r   test_default_capstyle  s    r(  c                  C   s   t  } |  dksJ d S )NZmiter)r   Zget_joinstyler%  r   r   r   test_default_joinstyle  s    r)  )M__doc__Znumpyr!   Znumpy.testingr   r   r   Z
matplotlibr   Zmatplotlib.patchesr   r   r   r   r   Zmatplotlib.testing.decoratorsr	   r
   Zmatplotlib.transformsr   Zmatplotlib.pyplotZpyplotrN   r   ro   r   r   r   rX   r   rR   r   rZ   r   sysplatformZon_winr   r-   r8   r<   r`   ru   rw   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  markZparametrizer#  r$  r&  r'  r(  r)  r   r   r   r   <module>   s    
#










@








$



