
    G8cE                        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	 Zd
 Zd Zd Zd Z e	d d gdd gddgd dgge	j2                  e	j4                  e	j4                  e	j4                  g       e	d d gd dgdd gge	j2                  e	j6                  e	j6                  g       e	d dgddgge	j2                  e	j8                  g       e	ddgge	j2                  g      gZg dZej>                  jA                  d e!ee            d        Z"ej>                  jA                  de	jF                  e	jH                  g      d        Z%d Z&d Z' edgdd      d        Z( edgd      d        Z) edgd       d!        Z*d" Z+d# Z, ed$gd      d%        Z- ed&gd      d'        Z. ed(gd      d)        Z/ ed*gd+dg d,-      d.        Z0d/ Z1d0 Z2d1 Z3d2 Z4ej>                  jA                  d3 ejj                  d4D  cg c]  }  ejl                  g d5      | z    c}             d6        Z7ej>                  jA                  d7 e8d8d9d:            d;        Z9d< Z:d= Z;d> Z<yc c} w )?    N)assert_array_equal)patches)Path)Polygon)image_comparison)
transforms)
MouseEventc                  *   t        t        j                  d      d      } | j                  j                  dk(  sJ | j
                  J t        | j                         j                  t        j                  j                         j                         y )Nr      Tclosed)r   npzerosverticesshapecodesr   get_extentsextentsr   Bboxnullpaths    </usr/lib/python3/dist-packages/matplotlib/tests/test_path.pytest_empty_closed_pathr      sn     .D==&(((::t'')11!++-557    c                      t        j                         fd} t        j                  t              5   |         d d d        y # 1 sw Y   y xY w)Nc                  .     j                   dz   _         y )N       @)r   r   s   r   modify_verticesz+test_readonly_path.<locals>.modify_vertices   s    +r   )r   unit_circlepytestraisesAttributeError)r    r   s    @r   test_readonly_pathr%      s?    D, 
~	&   s   AAc                  R   t        j                  d      j                  dd      } t        j                  t
        t        j                  d| j                               5  t        |        d d d        t        j                  d      j                  ddd      }t        j                  t
        t        j                  d|j                               5  t        |       d d d        t        j                  d      j                  dd      }t        j                  d      }t        j                  d|j                   d	|j                         }t        j                  t
        |      5  t        ||       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)
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msgs        r   test_path_exceptionsr6   #   sT   2&&q!,J	zYYJ4D4D3E'FG
I Z 2&&q!Q/J	zYYJ4D4D3E'FG
I Z 2&&q!,J		!I
))/
0@0@/A B11:0AC DC	z	- $Z#$ $ 
 $ $s$   !FF.FFFF&c                      t        j                  g d      } ddg}| j                  |      }|j                  dk(  sJ t        j
                  j                  |ddg       y )N)r   r   r      r:   r:   )r:   r         ?r=   )      ?r=   boolTF)r   _create_closedcontains_pointsdtyper   testingassert_equal)r   pointsrets      r   test_point_in_pathrG   6   sW    ?@D*%F


v
&C99JJC$/r   c                      t        j                         } g d}| j                  |d      }t        j                  j                  |g d       y )N))        rI   )      ?rI   )?rK   g      )radius)TFF)r   r!   rA   r   rC   rD   )r   rE   results      r   $test_contains_points_negative_radiusrN   ?   s?    D2F!!&!6FJJF$89r   r:   r   ))rI   rI         ?      ?)rI   rI   rP   r=   )rI   rP   rP   rP   )rP   r   rP   r   zpath, extentsc                 h    t        j                  | j                         j                  |k(        sJ y )N)r   allr   r   )r   r   s     r   test_exact_extentsrS   X   s*     66$""$,,7888r   ignored_codec                     t        ddgddgddggt         j                  t         j                  | g      }t        j                  |j	                         j
                  dk(        sJ y )Nr   r:   r   )rI   rI   rP   rP   )r   MOVETOr   rR   r   r   )rT   r   s     r   test_extents_with_ignored_codesrW   f   sc     !QQQ;;\BDD 66$""$,,0@@AAAr   c                      t        j                  ddgddgddgddgddgg      } t        |       }t        j                  t         j                  dgg      }|j	                  |      }t        |      dk(  sJ |d   rJ y Nr   r:   r=   )r   arrayr   nanrA   len)boxptestcontainss       r   test_point_in_path_nanra   p   s    
((QFQFQFQFQF;
<CS	A88bffc]O$D  &Hx=A{?{r   c                     t        j                         \  } }|j                  dd       |j                  dd      }|j	                         j                  |j                  j                  d      |j                        sJ |j	                         j                  |j                  j                  d      |j                        rJ |j	                         j                  |j                  j                  d      |j                        rJ y )	Nlogr9   )xscaleylimr:   
   )   r=   r<   )2   r=   )pltsubplotssetaxvspanget_pathcontains_point	transData	transform)figaxpolygons      r   test_nonlinear_containmentrt   y   s    llnGCFF%fF%jjBG,,
w'7 7 7!00
x(",,8 8 8!00
x(",,8 8 8 8r   zarrow_contains_point.pngTmpl20)remove_textstylec                  j   t        j                         \  } }|j                  d       |j                  d       t	        j
                  dddd      }|j                  |       t	        j
                  ddd	d      }|j                  |       t	        j
                  d
dddd      }|j                  |       |||g}t        j                  t        j                  ddd      t        j                  ddd            \  }}t        t        |j                         |j                                     D ]  \  }\  }	}
|j                  j                  |	|
g      \  }}t        d| j                   ||      }t        |      D ]1  \  }}|j#                  |      \  }}|s|j%                  |	|
dd       3  y )Nr   )r=   g      ?)r>   rO   z->(   )
arrowstylemutation_scale)r=   r:   )r>   rJ   z]-[)r=   r>   )r>   g      ?fancyF)rz   fillr{   r   r   g?button_press_eventrg   r)sc)ri   rj   set_xlimset_ylimr   FancyArrowPatch	add_patchr   meshgridr,   	enumeratezipravelro   rp   r	   canvasr`   scatter)rq   rr   arrowarrow1arrow2patches_listXYkxyxdispydispeventmpatchinsideress                     r   test_arrow_contains_pointr      s    llnGCKKKK ##K/3357E LL$$X{05468F LL$$Z07*/468F LL66*L ;;ryyAs+yyAs+-DAqs1779aggi89 -	6Aq||--q!f5u/UEJ!,/ 	-HAu../KFC

1a1
,		--r   zpath_clipping.svg)rv   c            
      h   t        j                  d      } t        g dg dg dg dg dg dg d	g      D ]y  \  }}| j                  d
d|dz         }g d}|j	                  |d   |d   |d   z          |j                  |d   |d   |d   z          |j                  t        |ddd             { y )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   r:   )r      i  i  r   r)   noneredT)	facecolor	edgecolorr   )ri   figurer   add_subplotr   r   r   r   )rq   ixyrr   bboxs        r   test_path_clippingr      s    
**Z
(C<<<<<<<> ? A2 __Q1Q3'!
DGT!WtAw./
DGT!WtAw./
W&E$@ 	AAr   zsemi_log_with_zero.png)rw   c                      t        j                  dd      } dd| dz  dz   z  z
  dz  }t        j                         \  }}|j	                  | |ddd	
       |j                  dd       |j                  d       y )Nirf   rP   r   r:      -o   r   )lwmarkeredgecolorgHz>T)r   r,   ri   rj   semilogyr   gridr   r   rq   rr   s       r   test_log_transform_with_zeror      sk    
		#rA	sAqDF|	b AllnGCKK1dr3K7KKaGGDMr   c                  b    t        j                         } | j                  j                  dk(  sJ y )Nr   )r   make_compound_pathr   r   )r   s    r   test_make_compound_path_emptyr      s*     	!A::v%%%r   c                      ddg} dt        | | gt         j                  t         j                  g      gz  }t        j                  | }t	        j
                  |j                  t         j                  k(        dk(  sJ y )Nr   r)   )r   rV   STOPr   r   sumr   )zeropathscompound_paths      r   test_make_compound_path_stopsr      sh    q6DtT4L4;;		":;<<E++U3M 66-%%23q888r   zxkcd.pngc                  `   t         j                  j                  d       t        j                  ddt         j                  z  d      } t        j
                  |       }t        j                         5  t        j                         \  }}|j                  | |       d d d        y # 1 sw Y   y xY w)Nr   r   r   )
r   randomseedlinspacepisinri   xkcdrj   plotr   s       r   	test_xkcdr      ss    IINN1
Aq255y#&A
q	A	 ,,.R
1  s   1*B$$B-zxkcd_marker.pngc                     t         j                  j                  d       t        j                  ddd      } | }d| z
  }dt        j                  d      z  }t        j                         5  t        j                         \  }}|j                  | |dd       |j                  | |dd       |j                  | |d	d       d d d        y # 1 sw Y   y xY w)
Nr   rg            @+rf   )mso^)	r   r   r   r   onesri   r   rj   r   )r   y1y2y3rq   rr   s         r   test_xkcd_markerr      s    IINN1
Aq!A	
B	
QB	rwwqz	B	 #,,.R
2sr"
2sr"
2sr"	# # #s   *AC

Czmarker_paths.pdfc                     d} t        j                  t        j                  |       t        j                  |       dz   t        j                  |              t        j
                  d|        t        j                  dd       y )N   r(   )ri   errorbarr   r,   r   xlimre   )Ns    r   test_marker_paths_pdfr      sS    	ALL1a HHROHHROr   nan_pathdefault)pdfsvgepspng)rw   rv   
extensionsc                  *   dt         j                  dt         j                  dddg} t         j                  dt         j                  ddt         j                  d	g}t        j                         \  }}|j	                  | d
       |j	                  |d
       y )Nr   r   r(   rg   r+   r   	   rf   r'   r   )r   r[   ri   rj   r   )y0r   rq   rr   s       r   test_nan_isolated_pointsr     sk     RVVQ1a	(B
&&!RVVQBFFB	/BllnGCGGBGGBr   c                  .   t        j                  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        j                  | d d d+f   | d d d,f   f      j                  d-.      }t        j                  ||g||gg      }|j                  |      j                         d,   }t        j                  |d/   |d0   k7        sJ t        j                  |d0   |d,   k(        sJ y )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?)rP   r>   g @r   r:   r   Tr   r   )
r   rZ   r   vstackTr   r   clip_to_bboxto_polygonsrR   )handr0c0r1c1poly	clip_rectpoly_clippeds           r   (test_path_no_doubled_point_in_to_polygonr     s   88
j	!
g	
h	
	
f	
j	!
j	!
j	!
j	!
d	
Z	 
j	!
j	!
j	!
X	
j	!
h	
j	!
j	!
f	
X	
j	!+	#$D0 ,RR		41:tAqDz2355dCD"bB8 45I$$Y/;;=a@L66,r"l2&6677766,r"l1o5666r   c                  B   ddgddgg} t        |       }t        |j                  dd      g        t        |j                  ddd      | g       t        |j                         g        t        |j                  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      |g       t        |j                  ddd      | g       t        |j                         |g       t        |j                  d      | g       y )	Nrf   r   ry   )widthheightF)r  r  closed_only)r     )r   r   r   )datar^   closed_datas      r   test_path_to_polygonsr  2  s   Hr2hDT
Aq}}2b}92>q}}2be}Lvq}}+q}}}7$@Hr2hR)D8b"XBx"b:KT
Aq}}2b}9K=Iq}}2be}Lvq}}6q}}}7$@r   c                  v   ddgddgg} t         j                  t         j                  g}t        |       }t        | |      }|j                         }|j                         }||usJ |j                  |j                  usJ ||usJ |j                  |j                  usJ |j
                  |j
                  usJ y Nr   r:   )r   rV   LINETOdeepcopyr   r   vertsr   path1path2
path1_copy
path2_copys         r   test_path_deepcopyr  G  s    VaVE[[$++&EKEE!J!J
""">>!4!4444
""">>!4!4444;;j.....r   c                  v   ddgddgg} t         j                  t         j                  g}t        |       }t        | |      }|j                         }|j                         }||usJ |j                  |j                  u sJ ||usJ |j                  |j                  u sJ |j
                  |j
                  u sJ y r	  )r   rV   r
  copyr   r   r  s         r   test_path_shallowcopyr  V  s    VaVE[[$++&EKEEJJ
""">>Z00000
""">>Z00000;;******r   phi)r   r   r:   )
r   r   r  -   <   K   Z   i   x      c                 	   g d}t        j                         j                  t        j                  |             }t        ddg      }|j                  |      }|j                  |      r|j                  |      sJ t        ddg      }|j                  |      }|j                  |      r|j                  |      sJ |j                  t        ddg            }|j                  t        ddg            }|j                  |      r|j                  |      sJ |j                  t        ddg            }|j                  t        ddg            }|j                  |      r|j                  |      sJ |j                  |      sJ |j                  t        dd	g            }|j                  t        d
dg            }|j                  |      r|j                  |      sJ |j                  t        ddg            }|j                  t        ddg            }|j                  |      s|j                  |      rJ |j                  t        ddg            }|j                  t        ddg            }|j                  |      s|j                  |      rJ |D ]h  }|j                  t        ddg            }|j                  t        d|z   dfd|z   dfg            }|j                  |      s|j                  |      shJ  |D ]c  }|j                  t        ddg            }|j                  t        dd|z   fdg            }|j                  |      s|j                  |      scJ  |D ]c  }|j                  t        ddg            }|j                  t        dd|z
  fdg            }|j                  |      r|j                  |      rcJ  |j                  t        ddg            }|j                  t        g d            }|j                  |      r|j                  |      sJ |j                  t        ddg            }|j                  t        ddg            }|j                  |      s|j                  |      rJ |j                  t        ddg            }|j                  t        ddg            }|j                  |      s|j                  |      rJ y )N)gh㈵>g:0yE>g|=g-q=)r   r   )r   r   r8   r9   )r   r)   )r:   r)   r   rg   )rg   rg   r;   )r)   r)   )r)   r   )r   r+   )r   r   r   r:   rg   )r9   r   r  )r:   r   )r   r   )rK   r:   )rI         )rP   r   )rP         @)rI   r!  )r   Affine2Drotater   deg2radr   transform_pathintersects_path)r  	eps_arrayrp   abr   s         r   test_path_intersect_pathr*  e  s   
 +I##%,,RZZ_=I 	gvA  #AQA$5$5a$888 	ffA  #AQA$5$5a$888 	  vv&6!78A  vv&6!78AQA$5$5a$888 	  vv&6!78A  vv&6!78AQA$5$5a$888 Q 	  vv&6!78A  vv&6!78AQA$5$5a$888 	  vv&6!78A  vv&6!78A  #A,=,=a,@@@ 	  vv&6!78A  vv&6!78A  #A,=,=a,@@@  E$$T66*:%;<$$TAGQ<!c'1*F%GH$$Q'0A0A!0DDDE  E$$T66*:%;<$$TAq3w<*@%AB$$Q'0A0A!0DDDE  =$$T66*:%;<$$TAq3w<*@%AB  #(9(9!(<<<= 	  vv&6!78A  &>!?@AQA$5$5a$888 	  w&8!9:A  vx&8!9:A  #A,=,=a,@@@ 	  y)&<!=>A  x&:!;<A  #A,=,=a,@@@,@r   offseti0ii  r  c                 B   | }d| z   }t        j                  ||      }t        j                  |j                  d      }t        j
                  |j                  d      }t        j                  j                  |d       t        j                  j                  |d       y )Nih  r   )axisr   r:   )r   arcr   minr   maxrC   assert_allclose)r+  lowhighr   minsmaxss         r   test_full_arcr6    sp    
C<D88CD66$--a(D66$--a(DJJtR(JJtQ'r   c            
         t        t        j                  ddgddgddgddgddgg      t        j                  g d	t         j                  
            } t        t        j                  ddgddgddgddgddgg      t        j                  g dt         j                  
            }|j	                  |       rJ | j	                  |      rJ y )NgƉ@g퟇@gЅ@g@g`m$@g;E@g6[@gч61@)r:   r   r   r   O   )rB   g-Hߊ@gGN@g`؊@g{Kʠ@g
@)r:   r   r   r   r   )r   r   rZ   	code_typer&  	this_pathoutline_paths     r   !test_disjoint_zero_length_segmentr=    s    
=)=)=)=)=)+ 	, 	!8:I 
=)=)=)=)=)+ 	, 	~~	'(L ++I666((6666r   c            	          t        t        j                  ddgddgg            } t        t        j                  ddgddgddgddgg            }|j                  |       sJ | j                  |      sJ y rY   )r   r   rZ   r&  r:  s     r   "test_intersect_zero_length_segmentr?    s    
FF
 	I 
FHHF	
 	L ''	222$$\222r   c            	         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 ]F  }|j                  d      }t        |      dk(  sJ |j                  d   t         j                  k(  rFJ  y )NT)remove_nansr:   r   )
r   r   r[   rV   	CLOSEPOLYCURVE3cleanedr\   r   r   )r   r^   rD  s      r   test_cleanup_closepolyrE    s$    	rvvrvv 01kk4>>*	, 	rvvrvv 012 	rvvrvv 02662662Bvvrvv kk4;;T^^D	FE  -)))-7|q   }}Q499,,,-r   )=r/   numpyr   numpy.testingr   r"   
matplotlibr   matplotlib.pathr   matplotlib.patchesr   matplotlib.testing.decoratorsr   matplotlib.pyplotpyplotri   r   matplotlib.backend_basesr	   r   r%   r6   rG   rN   rV   CURVE4rC  r
  _test_paths_test_path_extentsmarkparametrizer   rS   rB  r   rW   ra   rt   r   r   r   r   r   r   r   r   r   r   r  r  r  concatenaterZ   r*  ranger6  r=  r?  rE  )deltas   0r   <module>rW     s   	  ,     & :  ! /7$&0: 	1a&1a&1a&1a&	)KKdkk4;;?A 	1a&1a&1a&	!DKKdkk#JK1a&1a&	DKK561a&DKK=!
(  #k;M*NO
9 P
9 $..$)))DEB FB	8 -."'3"-3"-J &'T:A ;A& +,G< =&9 :,D1 2 $%48# 9# %&D9 : :,iT9;; 7FA*/+ 0 BHH785@0 ! NANAb 5sB#78( 9(703&-W0s   I<