
    h                        S SK rS SKJrJrJr  S SKJs  Jr	  S SK
r
S SKrS SKJr  S SKJr  S SKJr  S SKJrJr   " S S5      rS rS rS	 rS
 rS rS r\
R>                  RA                  S/ / 4S/S/4SS/SS/4/ SQ/ SQ4/ SQ/ SQ4/ SQ/ SQ4/5      S 5       r!S r"\" S/5      S 5       r#S r$S r%S r&S r'S  r(S! r)S" r*S# r+S$ r,S% r-S& r.\" S'/S(S)S*9S+ 5       r/\" S,/S(S-S*9S. 5       r0S/ r1S0 r2\
R>                  RA                  S1\Rf                  \Rh                  /S2S3/S49S5 5       r5S6 r6S7 r7S8 r8S9 r9S: r:S; r;SDS< jr<S= r=S> r>S? r?\" 5       S@ 5       r@SA rASB rBSC rCg)E    N)assert_array_equalassert_array_almost_equalassert_array_less)Path)image_comparisoncheck_figures_equalc                      \ rS rSr/ SQr/ SQr/ SQ/ SQ/rSS/r\R                  R                  S\\/0 \\S	S	/4\\\/0 \\\S	/4\\/\" \S
9\\\S	/4\\/\" \S9\\S	\/4\\\/\" \S9\\\\/4\\/\" \\S9\\\\/4/5      S 5       rSrg	)TestTriangulationParams   r      r   r   r   r   r   r   r      r   r      FTzargs, kwargs, expectedN	trianglesmaskr   r   c                     SS/nSSS.n[         R                  R                  X-   0 UEUE5      u  pgppUu  ppXlL d   eX}L d   e[        X5        XL d   eX:X  d   eX:X  d   eg )Nr   r   r   4)ab)mtriTriangulation_extract_triangulation_paramsr   )selfargskwargsexpected
other_argsother_kwargsx_y_
triangles_mask_args_kwargs_xyr   r   s                   U/var/www/html/env/lib/python3.13/site-packages/matplotlib/tests/test_triangulation.py!test_extract_triangulation_params9TestTriangulationParams.test_extract_triangulation_params   s     V
S)<<!#=f#=#=? 	2
5 !)iwwww:1}}"""&&&     )__name__
__module____qualname____firstlineno__r,   r-   r   r   pytestmarkparametrizedictr/   __static_attributes__r2   r1   r.   r
   r
      s    AAI&I4=D[[5
QaD$'(
Q		BAy$ 78
Q	*Q9d,CD
Q41at"45
Q		DdOaIt-DE
Q	51i7NO8 ''r1   r
   c                      S/n / SQ/ SQ/ SQ/U /n[         R                  R                  U0 5      u  p#pEpgUb   eX`/:X  d   eg )NTr   r   r   r   r   r   r   )r   r   r   )r   r!   r&   r'   r(   r)   r*   r+   s           r.   *test_extract_triangulation_positional_maskr?   +   sP    6Dy9+t4D88rB .BJu==F??r1   c                     / SQn / SQn[         R                  " [        SS9   [        R                  " U SS/5        S S S 5        [         R                  " [        SS9   [        R                  " X/ SQ5        S S S 5        [         R                  " [        S	S9   [        R                  " XS
5        S S S 5        [         R                  " [        SS9   [        R                  " X/ SQ/5        S S S 5        [         R                  " [        SS9   [        R                  " X/ SQ/5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N~= f! , (       d  f       g = f)Nr   r   zx and y must be equal-lengthmatchr   r   z>triangles must be a \(N, 3\) int array, but found shape \(3,\)r   z3triangles must be a \(N, 3\) int array, not 'other'otherzfound value 99)r   r   c   zfound value -1)r   r   r   r7   raises
ValueErrorr   r   r,   r-   s     r.   test_triangulation_initrI   7   s   AA	z)G	H1q!f% 
I	
 	1+	

 
H
J 	1)
J 
z)9	:1*. 
;	z)9	:1*. 
;	: 
I	H
 


J 
J 
;	:	:	:s;   D1EEE$E51
D?
E
E!$
E25
Fc                     / SQn / SQn/ SQ/ SQ/n[         R                  " XU5      n[        UR                  / SQ/ SQ/5        UR	                  SS/5        [        UR
                  SS/5        UR	                  S 5        UR
                  b   eS	n/ S
QS/S/SS4 H6  n[        R                  " [        US9   UR	                  U5        S S S 5        M8     g ! , (       d  f       MJ  = f)Nr   r   r   )r   r   r   )r   r   r   )r   r   r   FTz3mask array must have same length as triangles array)FTFrA   )	r   r   r   	neighborsset_maskr   r7   rF   rG   )r,   r-   r   triangmsgr   s         r.   test_triangulation_set_maskrO   K   s    AAI&Ii0F v''+{)CD OOUDM"v{{UDM2 OOD;;
@C%wtD]]:S1OOD! 21 E11s   8C
C&	c                  "   Sn Sn[         R                  " [         R                  " SSU 5      [         R                  " SSU5      5      u  p#UR                  5       nUR                  5       nX-  nSU S-
  -  US-
  -  nSU -  U-  SU -  -
  SU-  -
  S-   n[        R
                  " X#5      n[        UR                  U5        [        UR                  U5        [        UR                  5      U:X  d   e[         R                  " UR                  5      S:X  d   e[         R                  " UR                  5      US-
  :X  d   e[        UR                  5      U:X  d   e[         R                  " UR                  5      S:X  d   e[         R                  " UR                  5      US-
  :X  d   eUR                  nS Ul        [!        UR                  U5        [!        [         R"                  " UR                  5      [         R$                  " U5      5        g )	N                    ?r   r   r   r   )npmeshgridlinspaceravelr   r   r   r,   r-   lenr   minmaxedgesrK   
_neighborsr   uniquearange)	nxnyr,   r-   npoints
ntrianglesnedgesrM   rK   s	            r.   test_delaunayre   b   s   	
B	
B;;r{{3R0"++c32KLDA		A		AeGbdr!t$JrT"Wqt^ad"Q&F %F fhh*fhh* v J...66&""#q(((66&""#wqy000 v||&&&66&,,1$$$66&,,719,,,
   IFv''3 ryy!1!12BIIg4FGr1   c                     Sn SnSn[         R                  R                  S5        [         R                  R                  U 5      n[         R                  R                  U 5      nX2   X1'   XB   XA'   [        R                  " X45      n[        [         R                  " UR                  5      [         R                  " [         R                  " U 5      U5      5        g )N
      r      )
rU   randomseedr   r   r   r^   r   deleter_   )rb   	duplicateduplicate_ofr,   r-   rM   s         r.   test_delaunay_duplicate_pointsro      s    GILIINN2
		!A
		!A?AL?AL %F ryy!1!12yy7!3Y?Ar1   c                     [         R                  " SSS5      n [         R                  " SSS5      n[        R                  " [        5         [
        R                  " X5        S S S 5        [         R                  " U S5      n [         R                  " US5      n[
        R                  " X5        g ! , (       d  f       NS= f)NrS         $@          @g       @)rU   rW   r7   rF   RuntimeErrorr   r   appendrH   s     r.   test_delaunay_points_in_linerv      s     	Cr"A
Cr"A	|	$1  
% 			!SA
		!SAq 
%	$s   B//
B=zx, yr   rQ   r      )r   r   r   )rQ   rw   rQ   r   r   r   )rQ   rw   rw   )r   r   r   r   r   r   )rQ   rQ   rQ   rw   rQ   rw   c                     [         R                  " [        5         [        R                  " X5        S S S 5        g ! , (       d  f       g = fNrE   rH   s     r.   !test_delaunay_insufficient_pointsr{      s*     
z	"1  
#	"	"s	   ;
A	c            
        ^ [         R                  " SS/SS/SS/SS/SS/S	S
/SS//5      n [         R                  " SS/SS/SS/SS/SS/SS/SS//5      nS mU4S jn[        R                  " U S S 2S4   U S S 2S4   5      nU H  nU" X45      S:X  a  M   e   [        R                  " U SS 2S4   U SS 2S4   5      ng )NgLXz?g     gCM??g~9B.?g     g/7R?g9?g     ڿgHC?g     ڿgt?g     ڿg(\?gq=
ףpݿg?gzGڿffffff?gQ޿g)\(ܿ      ?皙?c                 x    [         R                  " X45      R                  n[        U5      R	                  U5      $ rz   )rU   vstackTr   contains_point)xtriytrixy
tri_pointss       r.   tri_contains_point0test_delaunay_robust.<locals>.tri_contains_point   s.    YY|,..
J..r22r1   c                 J   >^ ^ [        UU U4S jT R                   5       5      $ )Nc              3   l   >#    U  H)  nT" TR                   U   TR                  U   T5      v   M+     g 7frz   rH   ).0trir   rM   r   s     r.   	<genexpr>Ctest_delaunay_robust.<locals>.tris_contain_point.<locals>.<genexpr>   s4      0.s &fhhsmVXXc]BGG.s   14)sumr   )rM   r   r   s   ``r.   tris_contain_point0test_delaunay_robust.<locals>.tris_contain_point   s#     0$..0 0 	0r1   r   r   )rU   arrayasarrayr   r   )r   test_pointsr   rM   
test_pointr   s        @r.   test_delaunay_robustr      s    	01	01	01	01	01	01	124 5J **	u	u	u	e	e	u	e K30 
1a4 0*QT2BCF!
!&5::: "
 
12q5 1:ab!e3DEFr1   ztripcolor1.pngc                     [         R                  " / SQ5      n [         R                  " / SQ5      n[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ/ SQ/
5      n[        R                  " XU5      nU SU-  -   nXR                     R                  SS9nXR                     R                  SS9nSU-  U-   n[        R                  " S5        [        R                  " X4SS9  [        R                  " S5        [        R                  " S5        [        R                  " X7SS9  [        R                  " S5        g )N)
r         ?r   r   r   r   r   r   r   r~   )
r   r   r   r   r   r   r   r   r   r~   r   r   r   )r   rR   r   r   r   rR   )r   rQ   rR   )r   rR   rw   )rR   rh   rw   )rR   rQ   	   )rh   rR   r   )   rh   r   )rQ   r   r   r   r   axisy   k)
edgecolorszpoint colorsz   )
facecolorsr   r   )
rU   r   r   r   r   meanpltsubplot	tripcolortitle)r,   r-   r   rM   CpointsxmidymidCfacess           r.   test_tripcolorr      s    


>?A


>?A

9999i	4 5I i0F#a%iG###+D###+DX_FKKMM&c2IInKKMM&<IIlr1   c                     / SQn / SQn[         R                  " 5       u  p#[        R                  " [        SS9   UR                  X5        S S S 5        [        R                  " [        SS9   UR                  X/ SQ5        S S S 5        [        R                  " [        SS9   UR                  X/ SQS	9  S S S 5        [        R                  " [        S
S9   UR                  XSS/SS9  S S S 5        [        R                  " [        S
S9   UR                  XSS/SS9  S S S 5        [        R                  " [        SS9   UR                  X/ SQS9  S S S 5        [        R                  " [        SS9   UR                  XSS/S5        S S S 5        UR                  X/ SQ5        UR                  X/ SQSS9  UR                  XSS/5        UR                  XSS/S	9  g ! , (       d  f       GN= f! , (       d  f       GNx= f! , (       d  f       GNV= f! , (       d  f       GN3= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f)Nr   r   z!tripcolor\(\) missing 1 required rA   z!The length of c must match eitherr   r   r   z,length of facecolors must match .* triangles)r   r   r   rR   r   z-'gouraud' .* at the points.* not at the facesr   r   gouraud)r   shading)r   z+positional.*'c'.*keyword-only.*'facecolors')CzUnexpected positional parameterunused_positional)r   subplotsr7   rF   	TypeErrorr   rG   )r,   r-   figaxs       r.   test_tripcolor_colorr     s   AAllnGC	y(L	M
Q 
N	z)L	M
Q9% 
N	zK
M
Ql3
M 
zL
N
Qq!fi@
N 
zL
N
QAq695
N 
yJ
L
Q\*
L 
y(I	J
QAq6#67 
K LL|$LL|YL7LL1vLL1a&L)/ 
N	M	M	M
M 
M
N 
N
N 
N
L 
L 
K	JsS   G ,G2"HHH( H:4I 
G/2
H
H
H%(
H7:
I
Ic                     [         R                  R                  S5        [         R                  R                  S5      [         R                  R                  S5      [         R                  R                  S5      p!n [        R
                  " 5       R                  5       nSnUR                  XX$S9R                  nUR                  UR                  4U:X  d   eg )Ni!N,rg   )      ?r~   )clim)rU   rj   rk   randr   figureadd_subplotr   normvminvmax)r   r   cr   r   r   s         r.   test_tripcolor_climr   %  s    IINN8iinnR ")).."4biinnR6H!A		!	!	#BD<<a<+00DIItyy!T)))r1   c                  X   / SQn / SQnSS/n[         R                  " 5       u  p4[        R                  " [        SS9   UR                  XX"S9  S S S 5        [        R                  " [        SS9   UR                  XSUS9  S S S 5        g ! , (       d  f       NB= f! , (       d  f       g = f)	Nr   r   皙?r   z"Positional parameter c .*no effectrA   r   zinterpreted as c)r   r   r7   warnsUserWarningr   )r,   r-   r   r   r   s        r.   test_tripcolor_warningsr   /  s    AA	c
AllnGC	k)M	N
Q1+ 
O	k)M	N
Q-!< 
O	N 
O	N	N	Ns   B
/B

B
B)c                     [         R                  " / SQ/ SQ/[         R                  S9n [         R                  " / SQ5      nU R                  5       n[        R
                  " US S 2S4   US S 2S4   U 5      R                    [        X 5        g )Nr   r   r   )r   r   r   dtype))r   r   )r   g?)r   r   )r   r   r   r   )rU   r   int32copyr   r   r\   r   )r   pointsold_triangless      r.   test_no_modifyr   ;  sf    )Y/rxx@IXX89FNN$Mvad|VAqD\9=CC}0r1   c                     [         R                  " [         R                  " S5      [         R                  " S5      5      u  pU R                  5       n UR                  5       n/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/n[         R                  " [        U5      5      nSUSS& [        R                  " XX#5      nUR                  5       n/ SQn/ SQn[         R                  " Xg5      u  pgUR                  5       nUR                  5       nU" Xg5      n[        U/ SQ5        U" US-
  US-
  5      n[        U/ SQ5        / SQn/ SQnU" Xg5      n[        U/ SQ5        SS/nSS/nU" Xg5      n[        US S!/5        Sn	/ S"Qn S#S S S S U	S/n/ S$Q/ S%Q/ S&Q/ SQ/ S'Q/ S(Q/ S)Q/ S*Q/n[        R                  " XU5      nUR                  5       n/ S+QnS,S-/n[         R                  " Xg5      u  pgU" Xg5      n[        U/ S.Q/ S/Q/5        Sn	S#U	* S S S S S/n / S0Qn/ S1Q/ S2Q/ S3Q/ S4Q/ S5Q/ S6Q/ S7Q/ S*Q/n[        R                  " XU5      nUR                  5       nS,S-/n/ S+Qn[         R                  " Xg5      u  pgU" Xg5      n[        US#S#/S S8/S S8/S S9/SS9/SS:/S#S#//5        / S;Qn / S<Qn/ S1Q/ S=Q/n[        R                  " XU5      nUR                  5       n/ S>Qn/ S?QnU" Xg5      n[        U/ S@Q5        UR                  SS /5        XTR                  5       :X  d   eU" Xg5      n[        U/ SAQ5        g )BNrR   r   r   rR   r   rQ   rR   r   r   rQ   r   rw   rQ   r   r   rw   r   rh   rw   rR   rQ   r   rQ   r   r   rQ   rw   r   rw   rg   r   rw   rh   rg   rh   rr   rg   r   r      r      r   r   rg   r   rg   r   r   rg   rr   r   rr      r   r   r   rg   )r         ?      @      
@)r   r   rR   r   rw   r   rg   r   r   r      r   r   r   r   r   r   )r   r   r   r   r   r   r   rQ   r   rh   r   rr   r   r   r      )r         ?      @r   r   r   r   r   rS   rT   rs         @)rS   rS   rS   r   r   r   rT   rs   r   r   r   r   )r   r   rR   r   r   r   r   r   rw   rh   rg   rr   rS   r   r   r   r   r   r   r   r   r   r   r   r=   r   r   r   r   rR   r   r   r   rQ   r   rR   rQ   r   rQ   rw   rR   rw   rQ   )皙r   ?gffffff?gffffff?g333333@g333333@r   皙?)r   r   r   r   r   r   r   )r   rw   rw   rw   rh   rh   r   )r   r   r   r   r   r   r   r   )r   r   rQ   r   )r   r   rR   )r   rR   rQ   )r   rw   r   )r   rw   rR   rQ   rw   rh   r   r   r   r   r   r   r   r   r   r   r   )gɿ皙?r   g333333?)r   r   r   r   )r   r   r   r   )r   r   r   r   )rU   rV   r_   rX   zerosrY   r   r   get_trifinderr   rL   )
r,   r-   r   r   rM   	trifinderxsystrisdeltas
             r.   test_trifinderr  E  sB   ;;ryy|RYYq\2DA		A		AIy)YIy)Z[*k;|\;I 88C	N#DD2Ji6F$$&I	!B	!B[[ FB	B	BRDt > ?RVRV$Dt = > 
FB	EBRDtGH sB
sBRDtaW% E'A	a!aE1%AIy)YIy2Ii0F$$&I	-B
B[[ FBRDt557 8 E	eVQQ1%A'AIy)YIy2Ii0F$$&I
B	-B[[ FBRDtr2hAAAAA!2h( )
 	AAI&Ii0F$$&I	B	BRDt^,
OOQF,,....RDt_-r1   c                  D  ^^^ [         R                  " [         R                  " S5      [         R                  " S5      5      u  pU R                  5       n UR                  5       nSU -  SU-  -
  n/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/n[         R                  " [        U5      5      nSUSS& [        R                  " XX45      n[        R                  " XR5      n[        R                  " XR5      n[        R                  " XRSS9n[         R                  " SSS5      n	/ SQn
[         R                  " X5      u  pXgU4 H   nU" X5      n[        USU	-  SU
-  -
  5        M"     / SQn	U	n
[         R                  " X5      u  pXgU4 H)  nU" X5      n[        UR                  S /S-  /S-  5        M+     [         R                  " SS!S5      n	/ S"Qn
[         R                  " X5      u  pXgU4 HX  nU" X5      n[        R                  " USU	-  SU
-  -
  5        U	S:  U	S#:*  -  U
S:  -  U
S#:*  -  n[        UR                  U5        MZ     S$u  mmmUUU4S% jnUUU4S& jn[         R                  " / S'Q5      n [         R                  " / S(Q5      n[         R                  " / S)Q/ S*Q/ S+Q/ S,Q/ S-Q/ S.Q/ S/Q/ S0Q/5      n[        R                  " XU5      nU" X5      nU" X5      n[         R                  " S1S2S35      n	[         R                  " S1S2S35      n
[         R                  " X5      u  p[        R                  " XRS4US59nU" X5      n[        UU" X5      5        UR!                  X5      u  nnU" X5      u  nn[        UU5        [        UU5        S6n[         R                  " [         R                  " S1S2US-   5      [         R                  " S1S2US-   5      5      u  pU R                  5       n UR                  5       nU" X5      n[        R                  " X[#        US-   5      S79n[         R                  " [         R                  " S8S9S35      [         R                  " S8S9S35      5      u  pU	R                  5       n	U
R                  5       n
[        R                  " XR5      n[        R                  " XR5      n[        R                  " XRSS9nU" X5      n[         R$                  " U" X5      U-
  5      nXx4 H  n[         R$                  " U" X5      U-
  5      n[         R&                  " U5      S[         R&                  " U5      -  :  d   e[         R(                  " UU5      S:[         R(                  " UU5      -  :  a  M   e   g );NrR   Gz?)\(@r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rg   geomkindr         @rw   )r   r~   r   r  )g      пr         ?r   Tr  )r   r~   r   r  r   )r	  g)\(333333?c                 D   > TU S-
  S-  -  TUS-
  S-  -  -   TU -  U-  -   $ )Nr   r   r2   r,   r-   r   r   r   s     r.   quadtest_triinterp.<locals>.quad  s3    !C%!|a3
l*QqSU22r1   c                 H   > ST-  U S-
  -  TU-  -   ST-  US-
  -  TU -  -   4$ )Nr   r   r2   r  s     r.   gradient_quad%test_triinterp.<locals>.gradient_quad  s8    !QsUac!1Q3#;1#455r1   )r   &jjZ? rh?rS   rT   rT   rS   )333333?HPs?X9v?rS   rS   rT   rT   r   r   r   rR   rR   r   r   rR   r   rQ   r   rQ   r   rw   rQ   r   rw   r   r   rw   r   r   rS   rT   rQ   userr  dzrr   r   r   r   d   )rU   rV   r_   rX   r   rY   r   r   LinearTriInterpolatorCubicTriInterpolatorrW   r   r   r   matestr   gradientmeshgrid_trianglesabsr[   dot)r,   r-   zr   r   rM   linear_interpcubic_min_E
cubic_geomr  r  interpzsr  r  r&  
cubic_user	interp_zsinterp_dzsdxinterp_dzsdydzsdxdzsdyndiff_lin
diff_cubicr   r   r   s                            @@@r.   test_triinterpr>    s   ;;ryy|RYYq\2DA		A		AQaAIy)YIy)Z[*k;|\;I 88C	N#DD2Ji6F..v9M++F6K**66BJ	T4	#B	!B[[ FB z:B^!"tBwb'8: ;
 
#B	B[[ FB z:2"277dVAXJqL1 ;
 
T4	#B	!B[[ FB z:B^((d2gR.?AaB!G$a0B!G<277D)	 ; #IQ136 	67A
78A)Y	9#Y	9F GIi0FQ
A	q	B	RQ	B	RQ	B[[ FB**66bIJ2"Iib6#-#6#6q#< \<"1(NUElE2lE2 	A;;r{{2r1Q3/RQqS1IJDA		A		AQ
A0B1Q30GHF[[S#q12;;sC3KLFB	B	B..v9M++F6K**66BJ	bBvvmB+b01H+VVF2NR/0
vvh2z(:#::::x*bffZ445 	6 5 ,r1   c                     SS jn Su  pSu  p4Su  pV[         R                  " XUSSSS/5      n[         R                  " X$USSSS/5      n[         R                  " / SQ/ SQ/ S	Q/ S
Q/ SQ/ SQ/ SQ/ SQ/5      n	[        R                  " XxU	5      n
[	        S5       GH  n[         R
                  " S[         R                  S9n[         R
                  " S[         R                  S9n[         R
                  " S[         R                  S9n[         R
                  " SS/[         R                  S9nUS-  nSUUUS-  4'   US:X  a  SX'   OUS:X  a  SXS-  '   OUS:X  a  SXS-  '   [        R                  " XSX4S9nU " UX4US S 2S4   5        U " UX44US S 2S4   5        U " UXV4US S 2S4   5        U " UX-   S-  X$-   S-  45        U " UX-   S-  X&-   S-  45        U " UXS-   S-  Xd-   S-  45        U " UX-   U-   S-  X$-   U-   S-  45        U " USU-  U-   U-   S-  SU-  U-   U-   S-  45        U " UUSU-  -   U-   S-  USU-  -   U-   S-  45        U " UX-   SU-  -   S-  X$-   SU-  -   S-  45        GM     g )Nc           	      r   SnSnSnUu  pgXd[         R                  " [         R                  " SS[         R                  -  U5      5      -  -   nXt[         R                  " [         R                  " SS[         R                  -  U5      5      -  -   n	U " U/U/5      S   n
U R                  U/U/5      u  pUb2  [        XS   5        [        US   US   5        [        US   US   5        U " X5      U
-
  nU R                  X5      u  pX-
  nX-
  n[        XU-  5        [        UXE-  5        [        UXE-  5        g)	a  
Checks the continuity of interpolator (and its derivatives) near
location loc. Can check the value at loc itself if *values* is
provided.

*interpolator* TriInterpolator
*loc* location to test (x0, y0)
*values* (optional) array [z0, dzx0, dzy0] to check the value at *loc*
   绽|=g      Y@rS   r   r   Nr   )rU   cosrW   pisinr+  r   r   )interpolatorlocvaluesn_starepsilonr   loc_xloc_ystar_xstar_yr/  dzxdzydiff_ztab_dzxtab_dzydiff_dzxdiff_dzys                     r.   check_continuity;test_triinterpcubic_C1_continuity.<locals>.check_continuity  s'    B"%%(H!IIIB"%%(H!III%5'*1-!**E7UG<
%a3%c!ffQi8%c!ffQi8f-1)226B==&!),(GI.(GI.r1   )r   r  )r  r  )r  r  rS   rT   r   r  r  r  r   r!  r"  r#  r   rh   r   r   r   r   r   r$  r%  r   r         @g      @rz   )rU   r   r   r   ranger   float64r)  )rV  r   aybxbycxcyr,   r-   r   rM   idofr/  rO  rP  rH  caser3  s                     r.   !test_triinterpcubic_C1_continuityrb    s   /> HR!HRHR
""b"b"-.A
""b"b"-.A)Y	9#Y	9F GIi0FaHHQbjj)hhq

+hhq

+1a&

3Qw!$tTAX~19AGQYCqMQYCqM**66/2j: 	"6!Q$<8"6!Q$<8"6!Q$<825#+s{!;<25#+s{!;<25#+s{!;<258R-"%(B!?@2b58B;"2RU2Xb["4D!EF2be8B;"2R2Xb["4D!EF25B;"2RU2b5["4D!EF9 r1   c            	      x   S n Su  p[         R                  R                  " U " X5      6 nUR                  5         UR	                  5       n[        X-  5       H  n[        R                  " X-  [        R                  S9nSXe'   [         R                  R                  X6[        R                  " X-  5      SS9u  px[        [        R                  " XG5      U5        M     Su  pU " X5      u  ppUSX:  -  -   SX:  -  -   nUSX:  -  -   SX:  -  -   n[        R                  " XU	S-
  XS-
  //5      n[        R                  " XS-
  XS-
  U
//5      n[        R                  " U/ S	Q/5      n[         R                  R                  XUX-  S
-   X-  S
-   45      nUR                  5         UR	                  5       n[        X-  S
-   5       H  n[        R                  " X-  S
-   [        R                  S9nSXe'   [         R                  R                  X6[        R                  " X-  S
-   5      SS9u  px[        [        R                  " XG5      U5        M     [        R                  " S[        R                  S9n[        R                  " / SQ[        R                  S9n[        R                  " / SQ[        R                  S9nSn[         R                  R                  XX5      nUR                  5         UR	                  5       n[        U[        R                  " / SQ/ SQ/ SQ/[        R                  S95        g )Nc                 4   X-  n[         R                  " [         R                  " U[         R                  S9[         R                  " US-
  [         R                  S9[         R                  " SU[         R                  S9[         R                  " X -
  [         R                  S9[         R                  " X[         R                  S9/5      n[         R                  " [         R                  " U[         R                  S9[         R                  " SU[         R                  S9[         R                  " US-
  [         R                  S9[         R                  " X[         R                  S9[         R                  " X -
  [         R                  S9/5      n[         R                  " S[         R                  " U[         R
                  S9-  [         R                  " US-
  [         R
                  S9* [         R                  " US-
  [         R
                  S9* [         R                  " X -
  [         R
                  S9* [         R                  " X -
  [         R
                  S9* /5      nSXRSU-  S-
   US-
  SU2'   SUSU-  S-
  SU-  S-
   US-
  SU2'   XSX@U-  X-  44$ )z
Return the sparse, (n*m, n*m) matrix in coo format resulting from the
discretisation of the 2-dimensional Poisson equation according to a
finite difference numerical scheme on a uniform (n, m) grid.
r   r   rR   rS   r   Nr   )rU   concatenater_   r   onesrZ  )r;  mlrowscolsvalss         r.   poisson_sparse_matrix<test_triinterpcubic_cg_solver.<locals>.poisson_sparse_matrixe  s    C~~IIarxx(IIac*BIIa"((,KIIac*BIIa"((,KM N ~~IIarxx(IIa"((+RYYqs"((-KIIa"((+RYYqs"((-KM N ~~bggarzz**WWQqS

++bggac.L-LWWQS

++bggac.L-LN O
 !#qs1uacf1f$&QqSU1Q3q5!A#&q&!4A#qs++r1   )r   rR   r   rT   rB  )Ar   x0tol)r   1   r   )rT   rT   rT   rT   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   r   r   r   r   r   r   r   r   r   r   )r   r   )rT   rs   rS   )rs   rT         @)rS   rr  rT   )r   _triinterpolate_Sparse_Matrix_coocompress_cscto_denserY  rU   r   rZ  _cgr   r.  re  rf  r   r   )rl  r;  rg  mat	mat_denseitestr   r,   _i_zeroj_zerork  ri  rj  dims                  r.   test_triinterpcubic_cg_solverr  a  s   ,2 FQ



1
13H3N
OCIqsHHQS

+##''#rxx},2 ( 4!"&&"6:   V/5D!T^$$q$.'99D!T^$$q$.'99D>>4&(F1H!EFGD>>4(F1Hf!EFGD>>4!123D



1
1$d3437AC!G2DFCIqsQwHHQS1WBJJ/##''#rwwquqy7I,2 ( 4!"&&"6:   772RZZ(D88G(($D88G(($D
C



1
1$d
HCIilL329;*E Fr1   c            	      T   Su  p[         R                  " U SU -  SS/5      n[         R                  " X* SS/5      n[         R                  " S[         R                  S9n/ SQ/ SQ/n[         R                  " SS	/5      n[         R                  " SS	[         R
                  -  S
5       GH|  n[         R                  " U5      U-  [         R                  " U5      U-  -   n[         R                  " U5      * U-  [         R                  " U5      U-  -   n	[        R                  " XU5      n
[        R                  " XSS9n[        R                  R                  U5      nUR                  5       n[         R                  " US5      S-
  USS S 24'   [        S5       H0  n[         R                  " US5      S	US S 2U4   -  -
  XnS-   S S 24'   M2     [!        [         R"                  " [         R$                  " U5      SS9[         R                  " SS/[         R                  S95        GM     g )N)rS   gˡE?r   rS   rT   rR   r   r   r   r   r   r  r  r   r   r   r   )rU   r   r   rZ  rW   rD  rC  rE  r   r   r)  rs  _DOF_estimator_geomcompute_geom_weightsr   rY  r   rZ   r-  )r   r[  r,   r-   r/  r   sum_wthetax_roty_rotrM   r2  dof_estimatorweightsitris                  r.    test_triinterpcubic_geom_weightsr    s   
 HR
"c"fb"%&A
"c2r"#A
"**%AI&IHHaVER255"-ua"&&-/1q 266%=?2##E)<..vvF
,,@@L446ffWa(1,ad!HD!vvgq1Agag6F4FFEq&!) !"&&Q"?"$((B82::"F	H .r1   c                  6   Sn [         R                  " / SQ5      n[         R                  " SSSSSU S/5      nSS/SS/SS/SS/SS/SS//nU GH  nUS   U-  US   U-  -   nUS   * U-  US   U-  -   nXVpSU-  S	U-  -
  n	/ S
Q/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/n
[        R                  " XxU
5      n[         R                  " [         R
                  " UR                  5      [         R                  " UR                  5      S5      n[         R                  " [         R
                  " UR                  5      [         R                  " UR                  5      S5      n[         R                  " X5      u  pUR                  5       nUR                  5       nUR                  5       " X5      S:H  n[         R                  R                  SU-  S	U-  -
  US9n[        R                  " X5      n[        R                  " X5      n[        R                  " XSS9nUUU4 H  nU" X5      n[        UU5        M     SnUR                   US4   nUR                   US4   n[         R                  " UR                  U   UR                  U   S5      n[         R                  " UR                  U   UR                  U   S5      nSU-  S	U-  -
  nUUU4 HE  nUR#                  XU[         R$                  " S[         R&                  S9-  S9u  n[        UU5        MG     GM     g )NrS   r   r   r   r   r   r	  r
  r=   r   r   r   r   r   r   r      r   r  r  rR   rg   r   )	tri_index)rU   r   r   r   rW   rZ   r,   r[   r-   rV   rX   r  mar(  r)  r   r   _interpolate_multikeysrf  r   )r  ro  y0transformationstransformationr  r  r,   r-   r/  r   rM   r  r  mask_out	zs_targetr0  r1  r2  r3  r4  r  pt1pt2s                           r.   test_triinterp_colinearr    s    E	1	2B	2A1eQ/	0B 1v1v1v1vBx"aIO)q!"$~a'8';;""2%q(9"(<<AFT!VO	9i	96	##A)4[[)266&((+;R@[[)266&((+;R@R$XXZXXZ((*22b8EEKKR$r' 1KA	226=//:..vvF
$k:>FB%i4 ? tQw'tQw'[[#r:[[#r:Gd2g%	$k:>F//$rwwr'B"B 0 DCB%i4 ?A *r1   c                     Sn SnSnS n[         R                  " USU5      n[         R                  " SU -   S[         R                  -  U -   U SS	9n[         R                  " US
[         R                  4   USS9nUS S 2SS S24==   [         R                  U -  -  ss'   U[         R
                  " U5      -  R                  5       nU[         R                  " U5      -  R                  5       n[        R                  " Xg5      nU" Xg5      n	[         R                  " SSS5      n
[         R                  " SSS5      n[         R                  " X5      u  pU
R                  5       n
UR                  5       n0 n[        S5       GH  nS[         R                  -  U -  U-  n[         R
                  " U5      U-  [         R                  " U5      U-  -   n[         R                  " U5      * U-  [         R
                  " U5      U-  -   n[         R
                  " U5      U
-  [         R                  " U5      U-  -   n[         R                  " U5      * U
-  [         R
                  " U5      U-  -   n[        R                  " UUUR                  5      n[        R                  " UU	5      n[        R                  " UU	5      n[        R                  " UU	SS9nUUUS.nS H>  nUU   nUS:X  a  U" X5      UU'   M  U" UU5      n[         R"                  " UUU   5        M@     GM     SnS H  nUS:X  a  UU-  nUnUU
-  nUnOUnUU-  nU
nUU-  n[        R                  " UUUR                  5      n[        R                  " UU	5      n[        R                  " UU	5      n[        R                  " UU	SS9nUUUS.nS H)  nUU   " UU5      n[         R"                  " UUU   5        M+     M     g )Nr  rg   333333?c                    [         R                  " SU -
  SU-
  5      n[         R                  " SU -
  SU-
  5      n[         R                  " U * S-
  U* S-
  5      n[         R                  " U * S-
  U* S-
  5      nS[         R                  " US-  S-  5      S-
  -  S-  [         R                  " SU-  5      -  [         R                  " US-  S-  5      S-
  S-  [         R                  " SU-  5      -  -   S	U S-  US-  -   -  -   * n[         R
                  " U5      U-
  [         R
                  " U5      [         R                  " U5      -
  -  $ 
Nr   r   r   rg   r   g      >@      @g      &@r}   rU   hypotarctan2exprC  r[   rZ   r,   r-   r1theta1r2theta2r/  s          r.   r/  )test_triinterp_transformations.<locals>.z  "   XXcAgsQw'C!GS1W-XXqb3hS)QBHqb3h/B
#A%&s*RVVBvI->>vvr"uqj!!#S(266#f*+==>1a4!Q$;  ! q	!bffQiq	122r1   ffffff?r   r   Fendpoint.r   r         rT   ri   r  r  )linmin_Er  gZ$.ArH   r,   )rU   rW   rD  repeatnewaxisrC  flattenrE  r   r   rV   rX   rY  r   r(  r)  r*  r   )n_anglesn_radii
min_radiusr/  radiianglesro  r  triang0z0xs0ys0	interp_z0i_angler  r,   r-   r  r  rM   r0  r1  r2  
dic_interp
interp_keyr3  interpzscale_factorscaled_axiss                                r.   test_triinterp_transformationsr    s    HGJ3 KK
D'2E[[Xqw'9!E3FYYvc2::o.a@F
1add7OruuX~%O
v
	'	'	)B
v
	'	'	)B  (G	
2B ++c2r
"C
++c2r
"C{{3$HC
))+C
))+CI8"%%("W,FF5M"rvve}R//VVE]N2ub 00VVE]3s!22ffUm^C"&&-"33##Aq'*;*;<2262>//;..vrG
**(*
 3J
+F!|(.s(8	*% R.001::1FH 3 0 L!#r!AA#BBAr!AB#B##Aq'*;*;<2262>//;..vrG
**(*
 3J ,R4G,,Wi
6KL 3) "r1   ztri_smooth_contouring.pngTg;On?)remove_textrp  c            	         Sn SnSnS n[         R                  " USU5      n[         R                  " SU -   S[         R                  -  U -   U SS	9n[         R                  " US
[         R                  4   USS9nUS S 2SS S24==   [         R                  U -  -  ss'   U[         R
                  " U5      -  R                  5       nU[         R                  " U5      -  R                  5       n[        R                  " Xg5      nU" Xg5      n	UR                  [         R                  " XhR                     R                  SS9XxR                     R                  SS95      U:  5        [        R                  " U5      n
U
R                  U	SS9u  p[         R                   " SSS5      n["        R$                  " USSS9  ["        R&                  " XUSS9  g )Nr  rg   r  c                    [         R                  " SU -
  SU-
  5      n[         R                  " SU -
  SU-
  5      n[         R                  " U * S-
  U* S-
  5      n[         R                  " U * S-
  U* S-
  5      nS[         R                  " US-  S-  5      S-
  -  S-  [         R                  " SU-  5      -  [         R                  " US-  S-  5      S-
  S-  [         R                  " SU-  5      -  -   S	U S-  US-  -   -  -   * n[         R
                  " U5      U-
  [         R
                  " U5      [         R                  " U5      -
  -  $ r  r  r  s          r.   r/  %test_tri_smooth_contouring.<locals>.zk  r  r1   r  r   r   Fr  .r   r   rR   subdivrS   rT   g?r   z0.5)lwcolorblack)levelscolors)rU   rW   rD  r  r  rC  r  rE  r   r   rL   r  r   r   UniformTriRefinerrefine_fieldr_   r   triplot
tricontour)r  r  r  r/  r  r  ro  r  r  r  refinertri_refiz_test_refir  s                 r.   test_tri_smooth_contouringr  d  s    HGJ3 KK
D'2E[[Xqw'9!E3FYYvc2::o.a@F
1add7OruuX~%O
v
	'	'	)B
v
	'	'	)B  (G	
2BRXXb!2!2388a8@ !2!2388a8@B!" #
 $$W-G#00A0>HYYr2u%FKKCu-NN8Hr1   ztri_smooth_gradient.pnggZd;O?c                  N   S n SnSnSn[         R                  " USU5      n[         R                  " SS[         R                  -  USS	9n[         R                  " US
[         R                  4   USS9nUS S 2SS S24==   [         R                  U-  -  ss'   U[         R
                  " U5      -  R                  5       nU[         R                  " U5      -  R                  5       nU " Xg5      n[        R                  " Xg5      n	U	R                  [         R                  " XiR                     R                  SS9XyR                     R                  SS95      U:  5        [        R                  " U	5      n
U
R                  USS9u  p[        R                   " X* 5      nUR#                  U	R$                  U	R&                  5      u  p[         R                  " X5      n[(        R*                  " 5         [(        R,                  " 5       R/                  S5        [(        R0                  " U	SS9  [         R2                  " SSS5      n[4        R6                  S   n[(        R8                  " XUU/ SQS9  [(        R:                  " U	R$                  U	R&                  UU-  UU-  SSSSSSSS9  g )Nc                    U S-  US-  -   n[         R                  " X5      n[         R                  " U5      U-  n[         R                  " U5      U-
  [         R                  " U5      [         R                  " U5      -
  -  $ )zAn electric dipole potential V.r   )rU   r  rC  r[   rZ   )r,   r-   r_sqr  r/  s        r.   dipole_potential2test_tri_smooth_gradient.<locals>.dipole_potential  s_    !tad{

1 FF5M$q	!q	"&&) 344r1      rg   r   r  r   r   Fr  .r   r   r   r  equalz0.8)r  rS   rT   g{Gz?hot)rs   rT   rT   rT   )r  cmap
linewidthsr   rq   bluegy&1|?r   rX  )unitsscalezorderr  width	headwidth
headlength)rU   rW   rD  r  r  rC  r  rE  r   r   rL   r  r   r   r  r  r)  r+  r,   r-   r   r   gca
set_aspectr  r_   mpl	colormapsr  quiver)r  r  r  r  r  r  r,   r-   VrM   r  r  r  tciExEyE_normr  r  s                      r.   test_tri_smooth_gradientr    s%   5 HGJKK
D'2E[[AbeeGX>FYYvc2::o.a@F
1add7OruuX~%O	rvvf~	&&(A	rvvf~	&&(AA%F
OOBHHQ//05515=//05515=? ! "
 $$V,G#0010=H 
#
#FB
/C\\&((FHH-FBXXbF JJLGGI!KKe$YYr2t$F==DNN8d24 JJvxx2f9biQfbR9r1   c                  0   [         R                  " / SQ5      n [         R                  " SSS[         R                  " S5      -  SS/5      n[         R                  " / SQ/ SQ/ S	Q/[         R                  S
9n[         R                  " / SQ[        S
9n[
        R                  " XX#S9n[
        R                  " U5      n[        UR                  SS/5        [        UR                  SS9[         R                  R                  SSS[         R                  " S5      -   -  [         R                  /U5      5        [         R                  " / SQ5      n [         R                  " / SQ5      n[         R                  " / SQ/[         R                  S
9n[
        R                  " XU5      n[
        R                  " U5      n[        UR                  5       [         R                  " S/5      5        SnS n[         R                  " SSUS-   5      n [         R                  " U" U S5      U" U S5      5      u  pU R!                  5       n UR!                  5       n[
        R                  " X[#        US-   5      S9n[
        R                  " U5      nUR%                  S5      n[         R&                  " S[        S
9n	/ SQn
SX'   [)        X5        [         R&                  " S[        S
9nSUS'   UR+                  U5        UR%                  S5      n/ SQnSX'   [)        X5        g )NrS   rT   r   rS   rs   rS   r   r   r  rT   r   r   r   r   FFTr   r   gV͞^&?F)rescalers   )rS   rT   rs   )rT   rX  r  r   c                 b    [         R                  " U 5      U-  [         R                  " U 5      -  $ rz   )rU   r-  sign)r,   r   s     r.   powertest_tritools.<locals>.power  s!    vvay!|BGGAJ&&r1   r   r   r      )r   r   r   r   r   r   r   r         "   #   ~                                    TP   ),   -   >   ?   N   O   r  Q   R   S   b   rD   t   u   )rU   r   sqrtr   boolr   r   TriAnalyzerr   scale_factorscircle_ratiosr  masked_arraynanrW   rV   rX   r,  get_flat_tri_maskr   r   rL   )r,   r-   r   r   rM   analyserr;  r  	mask_flat
verif_maskcorners_indexcenter_indexs               r.   test_tritoolsr%    sa    	&'A
"b#bggbk/334A)Y	:"((KI88(5Di;F'Hh44q-6HIu-
CR^!4bff=tDF
 	A
#$A)BHH5Ii0F'Hh446"G 	
A' 	CQqS!A;;uQ|U1d^4DA		A		A0B1Q30GHF'H**3/I#T*JGM $Jy- 88Ct$DDH
OOD**3/IML#Jy-r1   c                     Sn Sn[         R                  " SSU S-   5      n[         R                  " X"5      u  p#UR                  5       nUR                  5       n[         R                  " SU S-  -  [
        S9nSX@S-  S & [        R                  " X#[        U S-   5      US9n[        R                  " U5      nUR                  US	9nUR                  nUR                  n	XS-  -  n
[         R                  " SSU
S-   5      n[         R                  " X5      u  pUR                  5       nUR                  5       n[         R                  " [         R                  " US
U-   -  S5      [         R                  " US
U	-   -  S5      5      n[        US5        UR                   n[         R"                  " UR                  UR$                     SS9S-  n[         R"                  " UR                  UR$                     SS9S-  nUR'                  5       nU" UU5      nUR                   U   n[        UU5        [         R(                  " / SQ5      n[         R(                  " / SQ5      n[        R                  " X#/ SQ/ SQ/5      [        R                  " X#/ SQ/ SQ/5      /n[         R*                  " US-
  US-
  5      n/ n[-        S5       H  n[        R                  " UU   5      nUR/                  USS	9u  nn[         R0                  " UR                  UR                  U45      S   nU[         R2                  " US S 2S4   US S 2S4   45         nUU/-  nM     [5        US   US   5        g )Nr   r   r  rT   r   r   Tr   r  r   r   r   r   rS   rT   rS   rT   rS   rS   rT   rT   r   r   r   r   r   r  r   r   )rU   rW   rV   rX   r   r  r   r   r,  r  refine_triangulationr,   r-   isinaroundr   r   r   r   r  r   r  rY  r  dstacklexsortr   )r;  r  r,   r-   r   rM   r  refi_triangx_refiy_refin_refix_verify_verifind1d	refi_maskrefi_tri_barycenter_xrefi_tri_barycenter_y
tri_finderrefi_tri_indicesrefi_tri_maskr/  xyz_datairefined_triang	refined_zxyzs                             r.   test_trirefinerA    s   	AF
CQqS!A;;qDA		A		A88AadF$'DDAK0B1Q30G%)+F$$V,G..f.=K]]F]]F]Fkk#r6!8,G{{74GmmoGmmoGGGBIIgs7{3Q7IIfc&j1157Eud#   IFF;==1F1F#G()+-/0FF;==1F1F#G()+-/0%%'J!"7"79KK 01My-0 	

'(A


'(A  	9'=>  	9'=>@F
S!c'"AH1X((3$+$8$81$8$E!	ii))>+;+;YGHK"**c!Q$iQT345SE  hqk8A;7r1   rF  linearcubic)idsc                    [         R                  S S2S S24   u  p[         R                  " UR                  5       S5      n[         R                  " UR                  5       S5      n[         R                  " U5      n[
        R                  " X5      n[
        R                  " U5      nU " XC5      nUR                  X6SS9  g )Nr   )triinterpolatorr  )	rU   mgridr  r  
zeros_liker   r   r  r  )rF  r,   r-   r/  r   r  r3  s          r.   test_trirefine_maskedrI  0  s     88BQBFDA
		!))+q!A
		!))+q!A
aA


Q
"C$$S)G#!F1=r1   c                    / n[        U S-
  5       HK  n[        U S-
  5       H6  nX#U -  -   nUS-   X0-  -   nX#S-   U -  -   nUS-   US-   U -  -   nXXW/XGU//-  nM8     MM     [        R                  " U[        R                  S9$ )zM
Return (2*(N-1)**2, 3) array of triangles to mesh (N, N)-point np.meshgrid.
r   r   )rY  rU   r   r   )r;  r   r=  jr   r   r   ds           r.   r,  r,  B  s     C1Q3ZqsAaCA1AqS!GA11aAIay))C   88Crxx((r1   c                      [         R                  " 5       R                  5       n [        R                  " / SQ/ SQ/ SQ/ SQ/S9nU R                  US5      c   S5       eg )Nr'  r(  r   r   r   zb-z(triplot should return the artist it adds)r   r   r   r   r   r  )r   rM   s     r.   test_triplot_returnrN  Q  sW    		!	!	#B2i(*F ::fd#/ 323/r1   c                  l   [         R                  " / SQ/ SQ/5      n [         R                  " U 5      (       a   e[         R                  " U SSS9n[         R                  " U5      (       d   e[         R                  " / SQ5      n[         R                  " / SQ5      n[        R                  " X#U 5      n[        R                  " X#U5      n[        R
                  " U5      n[        R
                  " U5      nUR                  SS	9nUR                  SS	9n	[        UR                  U	R                  5        g )
Nr)  )r   r   r   TF)r   order)g(\?gzG?gQ?g{Gz?)gQ@@gzGA@gQA@gףp=
A@r   r  )	rU   r   	isfortranr   r   r  r*  r   r   )

triangles1
triangles2r,   r-   triang1triang2refiner1refiner2fine_triang1fine_triang2s
             r.   ,test_trirefiner_fortran_contiguous_trianglesr[  [  s     9i01J||J''''*4s;J<<
####
)*A
-.A  z2G  z2G%%g.H%%g.H000:L000:L|--|/E/EFr1   c                  @   [         R                  " SSS5      n [        [         R                  [         R                  " X 5      5      u  pXS-
  :  US:  -  US:  -  nX   X#   p![         R
                  " S5      nU[         R                  " U5      -  U[         R                  " U5      -  -
  nU[         R                  " U5      -  U[         R                  " U5      -  -   n[        R                  " XV5      nUR                  nS Ul        UR                  n	[        X5        g )Nr  r   r'  r   g333333g333333   )rU   rW   maprX   rV   radiansrC  rE  r   r   rK   r]   r   )
xir,   r-   wr  x1y1rM   qhull_neighborsown_neighborss
             r.   test_qhull_triangle_orientationrf  r  s    	RC	 BrxxR,-DA	
Uq5y!QX.A4qJJrNE	
266%=1RVVE]?	*B	
266%=1RVVE]?	*B 'F &&O F$$M6r1   c                     [         R                  " / SQ5      n [         R                  " SSS[         R                  " S5      -  SS/5      n[         R                  " / SQ/ SQ/ S	Q/[         R                  S
9n[         R                  " / SQ[        S
9n[
        R                  " XX#S9n[
        R                  " U5      nUR                  5         g )Nr  rS   r   r   r  rT   r   r   r   r   r  r   )	rU   r   r  r   r  r   r   r  _get_compressed_triangulation)r,   r-   r   r   rM   r   s         r.   #test_trianalyzer_mismatched_indicesri    s    
&'A
"b#bggbk/334A)Y	:"((KI88(5Di;F'H **,r1   c                      / SQn / SQn/ SQn[         R                  " 5         [        R                  " [        5         [         R
                  " XUSS/5        S S S 5        g ! , (       d  f       g = f)N)rS   rT   rT   )rS   rS   rT   )r   r   r  rT   rS   )r   r   r7   rF   rG   tricontourf)r,   r-   r/  s      r.   "test_tricontourf_decreasing_levelsrl    sF    AAAJJL	z	"a#s, 
#	"	"s   A  
A.c                     SSK Jn   [        R                  " [        SS9   [
        R                  R                  5         S S S 5        [        R                  " [        SS9   [
        R                  R                  [        R                  " / 5      [        R                  " S/5      [        R                  " / /5      SSSS5        S S S 5        [        R                  " / S	Q[        R                  S
9n[        R                  " / SQ[        R                  S
9n[        R                  " [        SS9   [
        R                  R                  X[        R                  " SS//5      SSSS5        S S S 5        [        R                  " / SQ/[        R                  S
9n[        R                  " [        SS9   [
        R                  R                  XU[        R                  " SS/5      SSS5        S S S 5        [        R                  " [        SS9   [
        R                  R                  XUS[        R                  " S//5      SS5        S S S 5        [        R                  " [        SS9   [
        R                  R                  XUSS[        R                  " S//5      S5        S S S 5        [
        R                  R                  XUSSSS5      n[        R                  " [        SS9   UR                  / 5        S S S 5        SS/S 4 H6  n[        R                  " [        SS9   UR                  U5        S S S 5        M8     UR                  [        R                  " S/5      5        [        UR                  5       [        R                   " S5      5        UR                  S5        [        UR                  5       SS/SS/SS//5        [        R                  " [        SS9   [
        R                  R#                  5         S S S 5        [        R                  " [        SS9   [
        R                  R#                  U[        R                  " S/5      5        S S S 5        [        R                  " / SQ5      n[
        R                  R#                  XF5      n[        R                  " [        SS9   UR%                  SS5        S S S 5        [        R                  " [        SS9   [
        R                  R'                  5         S S S 5        [
        R                  R'                  U5      n[        R                  " [        SS9   UR)                  [        R                  " S/5      [        R                  " SS/5      5        S S S 5        g ! , (       d  f       GNU= f! , (       d  f       GN= f! , (       d  f       GNM= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNI= f! , (       d  f       GN= f! , (       d  f       GM  = f! , (       d  f       GN!= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNU= f! , (       d  f       g = f)Nr   )_triz1__init__\(\): incompatible constructor arguments.rA   z,x and y must be 1D arrays of the same lengthr   r2   F)r   r   r   r   r>   z.triangles must be a 2D array of shape \(\?,3\)r   zCmask must be a 1D array with the same length as the triangles arrayz,edges must be a 2D array with shape \(\?,2\)zGneighbors must be a 2D array with the same shape as the triangles arrayr   zMz must be a 1D array with the same length as the triangulation x and y arraysT)r   r   r   z?z must be a 1D array with the same length as the x and y arraysz(filled contour levels must be increasingz*x and y must be array-like with same shape)
matplotlibrn  r7   rF   r   r  r   rG   rU   r   rZ  int_calculate_plane_coefficientsrL   r   	get_edgesemptyTriContourGeneratorcreate_filled_contourTrapezoidMapTriFinder	find_many)	rn  r,   r-   r  rM   r   r/  tcgr  s	            r.   test_internal_cpp_apiry    s    
F
H 	 
H
 
M
Orxx|RXXqc]BHHbTNBPRTV$	&
O
 	"**-A
"**-A	C
E 	qRXX1vh%7RUK
E
 88YKrww/D	%
& 	qT288QF+;RUK	
& 
M
OqT2rxx!EJ
O 
%
& 	qT2r288bTF3CUK	
& XX##A$BEBF	2
3 	++B/	
3 Q]])* OOD!	* *  OOBHHdV$%v'')288F+;<
OOBv'')QFQFQF+CD 
F
H 	$$&
H
 
T
V 	$$VRXXqc];
V
 	A
((
&
&v
1C	I
K!!!Q'
K
 
F
H 	&&(
H
 ..v6I	K
MBHHaSM288QF+;<
M 
Mc
H 
H

O 
O
E 
E
& 
&
O 
O
& 
&
3 
3* *
H 
H

V 
V
K 
K

H 
H
M 
Ms   V A$V/<V12;W;W*;W'*W9&X%X%6X03Y'Y>Y&
V
V.1
W 
W
W$'
W69
X
X	
X-0
X?
Y
Y#&
Y4c                  &   [         R                  " / SQ5      n [         R                  " / SQ5      nSn[        R                  " X5      n[        R                  " X-   X-   5      n[	        UR
                  5      [	        UR
                  5      :X  d   eg )N)r   r   r   r   r   )r   r   r   r   r   g    _B)rU   r   r   r   rY   r   )r,   r-   offsetrM   triang_offsets        r.   test_qhull_large_offsetr}    so    


$%A


$%AF%F&&qz1:>Mv C(?(?$@@@@r1   c            	      h   / SQn / SQn[         R                  " X5      n[        R                  " 5         [        R
                  " [        SS9   [        R                  " USSS[        R                  /5        S S S 5        [        R
                  " [        SS9   [        R                  " USSS[        R                  * /5        S S S 5        [        R
                  " [        SS9   [        R                  " USSS[        R                  /5        S S S 5        [        R
                  " [        SS9   [        R                  " U[        R                  R                  / S	Q/ S
QS95        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr   r   zCz array must not contain non-finite values within the triangulationrA   r   r   r   z9z must not contain masked points within the triangulation)r   r   r   r   )r   r   r   r   r   )r   r   r   r   r7   rF   rG   rk  rU   infr  r  r   )r,   r-   rM   s      r.   test_tricontour_non_finite_zr    sC   AA%FJJL	z *K 
LAq"&& 12
L 
z *K 
LAq266' 23
L 
z *K 
LAq"&& 12
L 
z *D 
EL| LM
E 
E
L 
L
L 
L
L 
L
E 
Es0   *E0+F$*F/8F#0
E>
F
F #
F1c                  $   / SQn / SQn/ SQn[         R                  " 5       u  p4UR                  XU5      nUR                  XU5      nUR                  UR                  :w  d   eUR                  XR5      nUR                  UR                  :X  d   eg )N)rS   r   rT   )rS   rT   rS   )rT   rs   r   )r   r   rk  r  _contour_generator)r,   r-   r/  r   r   tcs1tcs2tcs3s           r.   test_tricontourset_reuser    s     	AAAllnGC>>!"D==q!D""d&=&======!D""d&=&====r1   c                     / SQn/ SQn/ SQ/nU R                  5       R                  X#USS9  UR                  5       R                  X#USS9  g )Nr=   r>   r   z--)ls)	linestyle)r   r  )fig_testfig_refr,   r-   datas        r.   test_triplot_with_lsr  ,  sO    AA;Ddt4qTT:r1   c                      / SQn / SQn/ SQ/n[         R                  " 5       u  p4UR                  XUSS9u  pVUR                  5       u  pxUS/:X  d   e[	        U5      S:X  d   eUS   UL d   eg )Nr=   r>   r   label)r  r   r   )r   r   r  get_legend_handles_labelsrY   )	r,   r-   r  r   r   linesmarkershandleslabelss	            r.   test_triplot_labelr  5  sz    AA;DllnGCZZd'Z:NE224OGgYw<11:r1   c                     / SQn / SQn[         R                  " X5      n[        R                  " 5       u  p4UR	                  U/ SQS/S9nUR                  5       n[        U5      S:X  d   eSS/SS/SS//n[        US   R                  U5        [        US   R                  / S	Q5        [        US   R                  S
S9U/5        UR	                  U/ SQS/S9nUR                  5       n[        U5      S:X  d   eSS/SS/SS/SS/SS//n[        US   R                  U5        [        US   R                  / SQ5        [        US   R                  5       U/5        g )Nr   rR   rR   r   r   r   r   rR   rR   r   r   r   r   r   r   r   r  r   r   r   rx   F)closed_onlyr   r   r   r   r   r   r   r   r   r   r  )r   r   r   r   r  	get_pathsrY   r   verticesr   codesto_polygonsr,   r-   rM   r{  r   cspathsexpected_verticess           r.   test_tricontour_pathr  A  s[   AA%FLLNEA 
vu	=BLLNEu:??Q!Q!Q0eAh//1BCuQx~~y1a/2C1DF 
vu	=BLLNEu:??Q!Q!Q!Q!Q@eAh//1BCuQx~~'78eAh2247H6IJr1   c                  L   / SQn / SQn[         R                  " X5      n[        R                  " 5       u  p4UR	                  U/ SQSS/S9nUR                  5       n[        U5      S:X  d   eSS/SS/SS/SS/SS//n[        US	   R                  U5        [        US	   R                  / S
Q5        [        US	   R                  5       U/5        UR	                  U/ SQSS/S9nUR                  5       n[        U5      S:X  d   eSS	/SS/S	S/S	S	/SS	//n[        US	   R                  U5        [        US	   R                  / S
Q5        [        US	   R                  5       U/5        UR	                  U/ SQSS/S9nUR                  5       n[        U5      S:X  d   eS	S	/SS	/SS/S	S/S	S	/SS/SS/SS/SS/SS//
n[        US	   R                  U5        [        US	   R                  / SQ5        [        US	   R                  5       [        R                  " US/5      5        g )Nr  r  r  r   r   r  r   r   r   r  r  r   g      rR   )
r   r   r   r   r  r   r   r   r   r  rQ   )r   r   r   r   rk  r  rY   r   r  r   r  r  rU   splitr  s           r.   test_tricontourf_pathr  [  s.   AA%FLLNEA 
c
	CBLLNEu:??Q!Q!Q!Q!Q@eAh//1BCuQx~~'78eAh2247H6IJ 
c
	CBLLNEu:??Q!Q!Q!Q!Q@eAh//1BCuQx~~'78eAh2247H6IJ 
s	DBLLNEu:??Q!Q!Q!Q!QQ!Q!Q!Q!QAeAh//1BCuQx~~'GHeAh224bhh?PSTRU6VWr1   )returnN)DnumpyrU   numpy.testingr   r   r   numpy.ma.testutilsr  	testutilsr*  r7   ro  r  matplotlib.pyplotpyplotr   matplotlib.trir   r   matplotlib.pathr   matplotlib.testing.decoratorsr   r   r
   r?   rI   rO   re   ro   rv   r8   r9   r{   r   r   r   r   r   r   r  r>  rb  r  r  r  r  r  r  r%  rA  r(  r)  rI  r,  rN  r[  rf  ri  rl  ry  r}  r  r  r  r  r  r  r2   r1   r.   <module>r     s$   F F # #       O' ':/(".'HTA( HS1#JVaV 		+,
" 
!
!
*FZ #$% &6*<*	=1d.N\6~SGlKF\H4;5|ZMz ./TuM#I N#IL ,-4UK/9 L/9h5.p58p 44335&0  2>	2>)3G.7.
--X=vAN0> ; ;	K4 Xr1   