U
    Âmœd–E  ã                   @   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   úS/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/matplotlib/tests/test_path.pyÚtest_empty_closed_path   s    

ÿr   c               	      s4   t  ¡ ‰ ‡ fdd„} t t¡� | ƒ  W 5 Q R X 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 5 Q R X t  d¡ ddd¡}tjtt d|j› �¡d�� t	|ƒ W 5 Q R X t  d¡ dd¡}t  d¡}t d|j› d	|j› �¡}tjt|d�� t	||ƒ W 5 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   sH   t  ddddg¡} ddg}|  |¡}|jdks2t‚tj |dd	g¡ d S )
N©r   r   ©r   é   ©r/   r/   )r/   r   ©ç      à?r2   )ç      ø?r2   ÚboolTF)r   Z_create_closedÚcontains_pointsÚdtyper   r   ÚtestingÚassert_equal)r   ÚpointsÚretr   r   r   Útest_point_in_path6   s
    
r;   c                  C   s8   t  ¡ } dddg}| j|dd�}tj |dddg¡ d S )N)ç        r<   )ç      ô?r<   )çÍÌÌÌÌÌì?r>   g      à¿)ZradiusTF)r   r   r5   r   r7   r8   )r   r9   Úresultr   r   r   Ú$test_contains_points_negative_radius?   s    
r@   r/   r
   )r<   r<   ç      è?ç      ð?)r<   r<   rB   r2   )r<   rB   rB   rB   )rB   r   rB   r   zpath, extentsc                 C   s   t  |  ¡ j|k¡st‚d S )N)r   Úallr   r   r   )r   r   r   r   r   Útest_exact_extentsX   s    rD   Ú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
   )r<   r<   rB   rB   )r   ÚMOVETOr   rC   r   r   r   )rE   r   r   r   r   Útest_extents_with_ignored_codesf   s    þþrG   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/   r2   )r   Úarrayr   Únanr5   Úlenr   )ÚboxÚpÚtestÚcontainsr   r   r   Útest_point_in_path_nanp   s    (
rP   c                  C   s„   t  ¡ \} }|jddd� | dd¡}| ¡  |j d¡|j¡sDt‚| ¡  |j d¡|j¡rbt‚| ¡  |j d¡|j¡r€t‚d S )	NÚlogr.   )ZxscaleÚylimr/   é
   )é   r2   r1   )é2   r2   )	ÚpltÚsubplotsÚsetZaxvspanÚget_pathZcontains_pointÚ	transDataÚ	transformr   )ÚfigÚaxZpolygonr   r   r   Útest_nonlinear_containmenty   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� qòqºd S )Nr	   )r2   g      Ð?)r3   rA   z->é(   )Ú
arrowstyleÚmutation_scale)r2   r/   )r3   r=   z]-[)r2   r3   )r3   g      ü?ÚfancyF)rb   Úfillrc   r   r
   gš™™™™™¹?Zbutton_press_eventrT   Úr)ÚsÚc)rV   rW   Úset_xlimÚset_ylimr   ZFancyArrowPatchÚ	add_patchr   Zmeshgridr'   Ú	enumerateÚzipZravelrZ   r[   r   ZcanvasrO   Zscatter)r\   r]   ÚarrowZarrow1Úarrow2Zpatches_listÚXÚYÚkÚxÚyZxdispZydispÚeventÚmÚpatchZinsideÚresr   r   r   Útest_arrow_contains_point…   s<    

þ
þ
ý

ÿ"ry   zpath_clipping.svg)r_   c                  C   sÔ   t jdd�} t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�¡ qZd S )N)g      @gÍÌÌÌÌÌ@)Zfigsize)éÈ   rz   )rz   é^  )é�  r{   )r|   rz   )r|   éd   )rz   r}   )rz   éŸ  )r|   r~   r#   r
   r/   r   éŒ   i€  i  r$   ÚnoneÚredT)Z	facecolorZ	edgecolorr   )rV   Zfigurerl   Zadd_subplotri   rj   rk   r   )r\   Ú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 )NiöÿÿÿrS   rB   r
   r/   é   ú-oé   rr   )ZlwZmarkeredgecolorgH¯¼šò×z>T)r   r'   rV   rW   Zsemilogyrj   Úgrid©rs   rt   r\   r]   r   r   r   Útest_log_transform_with_zeroÀ   s    r‰   c                  C   s   t  ¡ } | jjdkst‚d S )Nr	   )r   Úmake_compound_pathr   r   r   )rf   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sHt‚d S )Nr   r$   )r   rF   ÚSTOPrŠ   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 5 Q R X d S )Nr   r
   r}   )
r   ÚrandomÚseedÚlinspaceÚpiÚsinrV   ÚxkcdrW   Ú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 ¡ �H t ¡ \}}|j| |ddd� |j| |ddd� |j| |d	dd� W 5 Q R X d S )
Nr   rT   é   ç      @ú+rS   )ÚmsÚoú^)	r   r‘   r’   r“   ÚonesrV   r–   rW   r—   )rs   Úy1Úy2Zy3r\   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#   éÿÿÿÿ)rV   Zerrorbarr   r'   rŸ   ZxlimrR   )ÚNr   r   r   Útest_marker_paths_pdf÷   s    þr¦   Znan_pathÚdefaultZ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#   rT   r&   r£   é	   rS   r"   r…   )r   rJ   rV   rW   r—   )Zy0r    r\   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t
‚t  	|d0 |d, k¡�s*t
‚d S )1Ngm¥”Rú?g·DpTU•ò?g     €ù?g�_9çœõ?g     Àþ?g      ö?g¥ÝÇUUu@gF^9ï½÷ú?g      ÿ?g$z|ï½ù?g["8ªªj@g¥ÝÇUU•@gƒ˜øaŒ1ü?g["8ªªŠ@g²}L”RJý?g·DpTU•ÿ?gm¥”Rþ?g      @g=:¿rÎ9ÿ?g["8ªªÊ@gALü0Æ @g¥ÝÇUU@gyå¼÷Þÿ?gI»�«ªêÿ?g¿³Ï9ç @g["8ªª
@g�_9çœ@g     à@gº¡ÆB@g¥ÝÇUUÕ@gq1PcŒ1@g     @ÿ?ghÖæœs@g¥ÝÇUUõ@güíÂA!@gm¥”R@g     €@gáb Æc@g     @û?g9ìßqaŸ @gI»�«ªªò?)rB   r3   gÍÌÌÌÌÌ @rš   r/   r   Tr   éþÿÿÿr¤   )r   rI   r   ZvstackÚTr   r   Zclip_to_bboxÚto_polygonsrC   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 )	NrS   r„   ra   )ÚwidthÚheightF)r´   rµ   Úclosed_only)r¶   é   )r   r   r¯   )ÚdatarM   Zclosed_datar   r   r   Útest_path_to_polygons2  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	s†t‚d S ©Nr   r/   )r   rF   ÚLINETOÚdeepcopyr   r   r   ©Zvertsr   Zpath1Zpath2Z
path1_copyZ
path2_copyr   r   r   Útest_path_deepcopyG  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s†t‚d S rº   )r   rF   r»   Úcopyr   r   r   r½   r   r   r   Útest_path_shallowcopyV  s    
rÀ   Úphic                 C   s.   g | ]&}t  d ddddddddd	g
¡| ‘qS )
r   r†   r·   é-   é<   éK   éZ   éi   éx   é‡   )r   rI   )Ú.0Údeltar   r   r   Ú
<listcomp>e  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´| |¡s¸t‚| tdd	gƒ¡}| tdd	gƒ¡}| |¡rð| |¡sôt‚| |¡�st‚| tddgƒ¡}| tddgƒ¡}| |¡�r@| |¡�sDt‚| tddgƒ¡}| tddgƒ¡}| |¡�s€| |¡�r„t‚| tddgƒ¡}| tddgƒ¡}| |¡�sÀ| |¡�rÄt‚|D ]V}| tddgƒ¡}| td| dfd| dfgƒ¡}| |¡�s| |¡�rÈt‚�qÈ|D ]N}| tddgƒ¡}| tdd| fdgƒ¡}| |¡�sl| |¡�r$t‚�q$|D ]N}| tddgƒ¡}| tdd| fdgƒ¡}| |¡�rÀ| |¡�sxt‚�qx| tddgƒ¡}| tdddgƒ¡}| |¡�r| |¡�s
t‚| tddgƒ¡}| tddgƒ¡}| |¡�sF| |¡�rJt‚| tddgƒ¡}| tddgƒ¡}| |¡�s†| |¡�rŠt‚d S )Ngñhãˆµøä>g:Œ0âŽyE>g»½×Ùß|Û=gê-�™—q=)r­   r   )r
   r   r-   r.   )r   r$   )r/   r$   )r   rT   )rT   rT   r0   )r$   r$   )r$   r   )r   r&   )r   r£   r   r/   rT   r	   )r/   r¤   )r   r¤   )r>   r/   )r<   ç      À)rB   rÌ   )rB   ç      @)r<   rÍ   )	r   ZAffine2DÚrotater   Zdeg2radr   Ztransform_pathÚintersects_pathr   )rÁ   Z	eps_arrayr[   ÚaÚbr©   r   r   r   Útest_path_intersect_pathe  sZ    

"   rÒ   Úoffseti0ýÿÿii  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   Úmaxr7   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�ƒ}| | ¡r–t‚|  |¡r¤t‚d S )Ng•äÎÆ‰@g¤›íŸ‡ @g¿¼�Ð…íŠ@g®ƒÿ„äŸ@g`m”¡$‹@gêÉ;E @g6ÇÚ[éý‰@gÑ‡6Ê1 @r/   r
   éO   )r6   g-�¹HßŠ@gG�NìÄê @güê`³ŠØŠ@g{×âK›Ê @gù¸ºŒî
¡@)r   r   rI   Z	code_typerÏ   r   ©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¡ƒ}| | ¡sNt‚|  |¡s\t‚d S rH   )r   r   rI   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} | D ]4}|jdd�}t|ƒdks¦t‚|j	d t j
ks†t‚q†d S )NT)Zremove_nansr/   r   )r   r   rJ   rF   Ú	CLOSEPOLYÚCURVE3ÚcleanedrK   r   r   rŒ   )r�   rM   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pyplotrV   r   Zmatplotlib.backend_basesr   r   r!   r,   r;   r@   rF   ZCURVE4rß   r»   Z_test_pathsZ_test_path_extentsÚmarkZparametrizerm   rD   rÞ   rŒ   rG   rP   r^   ry   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
