U
    \	¸a{³  ã                   @   s  d dl Zd dlmZmZmZ d dlm  mZ	 d dl
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„ Zdd„ Zd	d
„ Ze
j dg g fdgdgfddgddgfdddgdddgfdddgdddgfddddddgddddddgfg¡dd„ ƒZdd„ Zedgƒdd„ ƒZ dd„ Z!dd„ Z"dd„ Z#dd„ Z$dd „ Z%d!d"„ Z&d#d$„ Z'd%d&„ Z(ed'gd(d)d*d+d,„ ƒZ)ed-gd(d.d*d/d0„ ƒZ*d1d2„ Z+d3d4„ Z,e
jjd5ej-ej.gd6d7gd8d9d:„ ƒZ/d;d<„ Z0d=d>„ Z1d?d@„ Z2dAdB„ Z3dCdD„ Z4dEdF„ Z5dGdH„ Z6dIdJ„ Z7dKdL„ Z8dS )Mé    N)Úassert_array_equalÚassert_array_almost_equalÚassert_array_less)ÚPath)Úimage_comparisonc            	      C   sP  d} d}t  t  dd| ¡t  dd|¡¡\}}| ¡ }| ¡ }| | }d| d  |d  }d|  | d|   d|  d }t ||¡}t|j|ƒ t|j|ƒ t	|j
ƒ|ks®t‚t  |j
¡dksÂt‚t  |j
¡|d ksÚt‚t	|jƒ|ksìt‚t  |j¡dkst‚t  |j¡|d kst‚|j}d |_t|j|ƒ tt  |j
¡t  |¡ƒ d S )	Né   é   ç        ç      ð?é   é   é   r   )ÚnpÚmeshgridÚlinspaceÚravelÚmtriÚTriangulationr   ÚxÚyÚlenÚ	trianglesÚAssertionErrorÚminÚmaxÚedgesÚ	neighborsÚ
_neighborsr   ÚuniqueÚarange)	ZnxÚnyr   r   ÚnpointsZ
ntrianglesZnedgesÚtriangr   © r#   úG/tmp/pip-unpacked-wheel-wjyw_3jo/matplotlib/tests/test_triangulation.pyÚtest_delaunay   s*    $ r%   c                  C   sx   d} d}d}t j d¡ t j | ¡}t j | ¡}|| ||< || ||< t ||¡}tt  |j¡t  t  	| ¡|¡ƒ d S )Né
   é   r   é   )
r   ÚrandomÚseedr   r   r   r   r   Údeleter   )r!   Z	duplicateZduplicate_ofr   r   r"   r#   r#   r$   Útest_delaunay_duplicate_points9   s    ÿr,   c               	   C   sf   t  ddd¡} t  ddd¡}t t¡ t | |¡ W 5 Q R X t  | d¡} t  |d¡}t | |¡ d S )Nr	   ç      $@é   ç       @g       @)r   r   ÚpytestÚraisesÚRuntimeErrorr   r   Úappend©r   r   r#   r#   r$   Útest_delaunay_points_in_lineM   s    r5   zx, yr   r   r   é   c              	   C   s&   t  t¡ t | |¡ W 5 Q R X d S ©N)r0   r1   Ú
ValueErrorr   r   r4   r#   r#   r$   Ú!test_delaunay_insufficient_points[   s    r9   c               
      sä   t  ddgddgddgddgddgd	d
gddgg¡} t  ddgddgddgddgddgddgddgg¡}dd„ ‰ ‡ fdd„}t | d d …df | d d …df ¡}|D ]}|||ƒdks¤t‚q¤t | dd …df | dd …df ¡}d S )Ng¨LXèz¶ë?g     à¿gCM‹«?è?g~9B.ÜÈä?g     à¿gè/7ÑRá?gÞÇÒ9ûé?g     Ú¿gH¾ÇÜC„æ?g     Ú¿g³´¼tã?g     Ú¿gÂõ(\â?gq=
×£pÝ¿gÍÌÌÌÌÌä?gáz®GáÚ¿çffffffæ?g¸…ëQ¸Þ¿g)\Âõ(Ü¿ç      è?çš™™™™™é?c                 S   s   t  | |f¡j}t|ƒ |¡S r7   )r   ZvstackÚTr   Zcontains_point)ZxtriZytriÚxyÚ
tri_pointsr#   r#   r$   Útri_contains_point‚   s    z0test_delaunay_robust.<locals>.tri_contains_pointc                    s   t ‡‡ ‡fdd„ˆ jD ƒƒS )Nc                 3   s&   | ]}ˆ ˆj | ˆj| ˆƒV  qd S r7   r4   )Ú.0Útri)r@   r"   r>   r#   r$   Ú	<genexpr>Š   s   ÿzCtest_delaunay_robust.<locals>.tris_contain_point.<locals>.<genexpr>)Úsumr   ©r"   r>   ©r@   rE   r$   Útris_contain_point‰   s    ÿz0test_delaunay_robust.<locals>.tris_contain_pointr   r   )r   ÚarrayÚasarrayr   r   r   )r?   Ztest_pointsrG   r"   Z
test_pointr#   rF   r$   Útest_delaunay_robustk   s0    ùù$rJ   ztripcolor1.pngc                  C   s,  t  ddddddddddg
¡} t  ddddddddddg
¡}t  dddgdddgdddgdddgddd	gdd
d	gdddgd
ddgdd
dgdddgg
¡}t | ||¡}| d|  }| |j jdd}||j jdd}d| | }t d¡ tj||dd t 	d¡ t d¡ tj||dd t 	d¡ d S )Nr   ç      à?r   r;   r   r   r   r   r6   r'   é	   é   ©Zaxiséy   Úk)Ú
edgecolorszpoint colorséz   )Ú
facecolorsrQ   rS   )
r   rI   r   r   r   ÚmeanÚpltZsubplotZ	tripcolorÚtitle)r   r   r   r"   ZCpointsZxmidZymidZCfacesr#   r#   r$   Útest_tripcolor˜   s2          ü


rW   c                  C   sp   t jdddgdddggt jd} t  dddd	g¡}|  ¡ }t |d d …df |d d …df | ¡j t|| ƒ d S )
Nr   r   r   r   ©Zdtype)r   r   )r   gš™™™™™ñ?)r   r   )r   r   )r   rH   Úint32Úcopyr   r   r   r   )r   ZpointsZold_trianglesr#   r#   r$   Útest_no_modify´   s
     (r[   c            
      C   s¨  t  t  d¡t  d¡¡\} }|  ¡ } | ¡ }dddgdddgdddgdddgdddgdddgddd	gdd
d	gddd
gddd
gdddgdddgd	d
dgd
ddgd
ddgdddgdddgdddgg}t  t|ƒ¡}d|d	d…< t | |||¡}| ¡ }ddddg}ddddg}t  ||¡\}}| ¡ }| ¡ }|||ƒ}t	|ddddddddddddddddgƒ ||d |d ƒ}t	|ddddddddddddddddgƒ ddddddddddddg}ddddddddddddg}|||ƒ}t	|ddddddddddddgƒ ddg}ddg}|||ƒ}t	|ddgƒ d}	dddddddg} ddddd|	dg}dddgdddgdddgdddgdddgdddgdddgdddgg}t | ||¡}| ¡ }dd d!d"d#d$d%g}dd&g}t  ||¡\}}|||ƒ}t	|dddddddgdddddddggƒ d}	d|	 dddddg} dddddddg}dddgdddgdddgdddgdddgdddgdddgdddgg}t | ||¡}| ¡ }dd&g}dd d!d"d#d$d%g}t  ||¡\}}|||ƒ}t	|ddgddgddgddgddgddgddggƒ ddddg} ddddg}dddgdddgg}t | ||¡}| ¡ }d'd(d)d*g}ddddg}|||ƒ}t	|ddddgƒ | 
ddg¡ || ¡ ksˆt‚|||ƒ}t	|ddddgƒ d S )+Nr   r   r   r   r   r6   r   r'   rM   rL   r&   r.   é   é   é   é   ç      Ð?ç      ô?ç      @ç      
@éÿÿÿÿé   rK   é   ç      ø?ç      @r	   r
   r/   ç      @gš™™™™™¹¿çš™™™™™Ù?çÍÌÌÌÌÌì?gffffffö?gffffffþ?g333333@g333333@çš™™™™™¹?gš™™™™™É¿çš™™™™™É?r<   g333333ó?)r   r   r   r   Úzerosr   r   r   Úget_trifinderr   Úset_maskr   )
r   r   r   Úmaskr"   Ú	trifinderÚxsÚysÚtrisÚdeltar#   r#   r$   Útest_trifinder¾   sÐ    (          ý
       ÿ       ÿ
"
	(  ÿ
ÿ
(  ÿ
(ÿ

rw   c                     sð  t  t  d¡t  d¡¡\} }|  ¡ } | ¡ }d|  d|  }dddgdddgdddgdddgdd	dgd	d
dgdddgdddgdddgdddgdd
dgd
ddgdddgdddgdddgdddgdddgdddgg}t  t|ƒ¡}d|dd…< t | |||¡}t ||¡}t 	||¡}tj	||dd}t  
ddd¡}	ddddg}
t  |	|
¡\}	}
|||fD ]&}||	|
ƒ}t|d|	 d|
  ƒ qVddddg}	|	}
t  |	|
¡\}	}
|||fD ](}||	|
ƒ}t|jdgd gd ƒ q¨t  
ddd¡}	ddddg}
t  |	|
¡\}	}
|||fD ]T}||	|
ƒ}t |d|	 d|
  ¡ |	dk|	dk |
dk |
dk }t|j|ƒ qd\‰ ‰‰‡ ‡‡fdd „}‡ ‡‡fd!d"„}t  d#d$d%d&d'd'd&g¡} t  d(d)d*d&d&d'd'g¡}t  dddgd	ddgdddgdddgdddgdddgdddgddd	gg¡}t | ||¡}|| |ƒ}|| |ƒ}t  
d&d'd¡}	t  
d&d'd¡}
t  |	|
¡\}	}
tj	||d+|d,}||	|
ƒ}t|||	|
ƒƒ | | |¡\}}|| |ƒ\}}t||ƒ t||ƒ d}t  t  
d&d'|d ¡t  
d&d'|d ¡¡\} }|  ¡ } | ¡ }|| |ƒ}tj| |t|d ƒd-}t  t  
d.d/d¡t  
d.d/d¡¡\}	}
|	 ¡ }	|
 ¡ }
t ||¡}t 	||¡}tj	||dd}||	|
ƒ}t  ||	|
ƒ| ¡}||fD ]Z}t  ||	|
ƒ| ¡}t  |¡dt  |¡ ksÆt‚t  ||¡d0t  ||¡ kst‚qd S )1Nr   ç®Gáz®ó?ç)\Âõ(@r   r   r   r   r6   r   r'   rM   rL   r&   r.   r\   r]   r^   r_   Úgeom©Úkindr`   g      @r;   rb   g      Ð¿ra   g      ü?rc   T)rx   g)\Âõ(Àç333333ã?c                    s,   ˆ | d d  ˆ|d d   ˆ|  |  S )NrK   r   r#   r4   ©ÚaÚbÚcr#   r$   ÚquadT  s    ztest_triinterp.<locals>.quadc                    s0   dˆ  | d  ˆ|  dˆ |d  ˆ|   fS )Nr   rK   r#   r4   r~   r#   r$   Úgradient_quadW  s    z%test_triinterp.<locals>.gradient_quadrm   ç&jjÙZÕ?çœÄ °rhå?r	   r
   ç333333Ó?çHPüs×é?çX9´Èv¾Û?Úuser©r|   Údz©r   rl   rk   éd   )r   r   r   r   rn   r   r   r   ÚLinearTriInterpolatorÚCubicTriInterpolatorr   r   r   rq   ÚmatestrH   ÚgradientÚmeshgrid_trianglesÚabsr   r   Údot)r   r   Úzr   rq   r"   Úlinear_interpÚcubic_min_EÚ
cubic_geomrs   rt   ÚinterpÚzsr‚   rƒ   r‹   Z
cubic_userZ	interp_zsZinterp_dzsdxZinterp_dzsdyZdzsdxZdzsdyÚnZdiff_linZ
diff_cubicr#   r~   r$   Útest_triinterp%  s²    (          ý


 
$   ÿ




,
$

ÿrœ   c                  C   sÐ  ddd„} d\}}d\}}d\}}t  |||ddddg¡}t  |||ddddg¡}t  dd	d
gdddgddd
gdd
dgd	dd
gddd	gdd	dgdddgg¡}	t |||	¡}
tdƒD ]}t jdt jd}t jdt jd}t jdt jd}t jddgt jd}|d }d|||d f< |dkr(d||< n.|d	kr@d||d < n|d
krVd||d < tj|
|d||fd}| |||f|d d …df ƒ | |||f|d d …d	f ƒ | |||f|d d …d
f ƒ | ||| d || d fƒ | ||| d || d fƒ | ||| d || d fƒ | ||| | d || | d fƒ | |d| | | d d| | | d fƒ | ||d|  | d |d|  | d fƒ | ||| d|  d || d|  d fƒ q²d S )Nc              	   S   s  d}d}d}|\}}||t  t  ddt j |¡¡  }||t  t  ddt j |¡¡  }	| |g|gƒd }
|  |g|g¡\}}|dk	r¸t|
|d ƒ t|d |d ƒ t|d |d ƒ | ||	ƒ|
 }|  ||	¡\}}|| }|| }t||| ƒ t||| ƒ t||| ƒ dS )	aJ  
        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@r	   r   r   Nr   )r   Úcosr   ÚpiÚsinr‘   r   r   )ÚinterpolatorÚlocÚvaluesZn_starÚepsilonrP   Zloc_xZloc_yZstar_xZstar_yr•   ÚdzxÚdzyZdiff_zZtab_dzxZtab_dzyZdiff_dzxZdiff_dzyr#   r#   r$   Úcheck_continuity“  s&    
""z;test_triinterpcubic_C1_continuity.<locals>.check_continuity)rm   r†   )r„   r‡   )r…   rˆ   r	   r
   r   r   r   r   r   r   r6   rL   r'   rX   r‰   rŠ   rK   ri   ç      @g      @)N)r   rH   r   r   Úrangern   Úfloat64r   )r¨   ÚaxÚayZbxZbyZcxÚcyr   r   r   r"   Zidofr•   r¦   r§   r¤   Zcaser™   r#   r#   r$   Ú!test_triinterpcubic_C1_continuity„  sN    
$   ÿ




ÿ&..r¯   c                  C   sª  dd„ } d\}}t jj| ||ƒŽ }| ¡  | ¡ }t|| ƒD ]T}tj|| tjd}d||< t jj	||t || ¡dd\}}t
t ||¡|ƒ q>d\}	}
| ||ƒ\}}}}|d	||	k  d	||
k  }|d	||	k  d	||
k  }t ||	|	d	 |
|
d	 gg¡}t ||	d	 |	|
d	 |
gg¡}t |ddddgg¡}t j ||||| d
 || d
 f¡}| ¡  | ¡ }t|| d
 ƒD ]^}tj|| d
 tjd}d||< t jj	||t || d
 ¡dd\}}t
t ||¡|ƒ q~tjdtjd}tjdd	d
ddd	d	d
d
d
d
d
d	d	d	d	d	gtjd}tjdd	d
d	d	ddd	d	d	d	d	d
d
d
d
d
gtjd}d}t j ||||¡}| ¡  | ¡ }t
|tjdddgdddgdddggtjdƒ d S )Nc                 S   s  ||  }t  t j|t jdt j|d t jdt jd|t jdt j||  t jdt j| |t jdg¡}t  t j|t jdt jd|t jdt j|d t jdt j| |t jdt j||  t jdg¡}t  dt j|t jd t j|d t jd t j|d t jd t j||  t jd t j||  t jd g¡}d||d| d … |d d|…< d|d| d d| d … |d d|…< |||| | | | ffS )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.
        rX   r   r   r	   r   Nr   )r   Úconcatenater   rY   Úonesr«   )r›   ÚmÚlÚrowsÚcolsÚvalsr#   r#   r$   Úpoisson_sparse_matrixÞ  s2      ý  ý  ý"*z<test_triinterpcubic_cg_solver.<locals>.poisson_sparse_matrix)r\   r   rX   r
   rž   )ÚAr€   Úx0Útol)r\   é1   r   r   rf   r   )r   r   r/   r	   g      @)r   ÚtriinterpolateZ_Sparse_Matrix_cooZcompress_cscZto_denserª   r   rn   r«   Z_cgr   r”   r°   r±   rH   rY   )r·   r›   r²   ÚmatZ	mat_denseZitestr€   r   Ú_Zi_zeroZj_zeror¶   r´   rµ   Zdimr#   r#   r$   Útest_triinterpcubic_cg_solverÚ  sb    ÿ
ÿÿ
(ÿ(ÿ  ÿÿr¿   c                  C   st  d\} }t  | d|  ddg¡}t  || ddg¡}t jdt jd}ddd	gd
d	dgg}t  ddg¡}t  ddt j d¡D ]ö}t  |¡| t  |¡|  }t  |¡ | t  |¡|  }	t 	||	|¡}
tj
|
|dd}tj |¡}| ¡ }t  |d
¡d
 |dd d …f< td	ƒD ]6}t  |d
¡d|d d …|f   ||d
 d d …f< qtt jt  |¡ddt jddgt jdƒ qxd S )N)r	   gË¡E¶óýú?rK   r	   r
   r   rX   r   r   r   r   r^   rz   r{   rN   )r   rH   rn   r«   r   r    rŸ   r¡   r   r   r   r¼   Z_DOF_estimator_geomZcompute_geom_weightsrD   rª   r   r   r“   )r¬   r­   r   r   r•   r   Zsum_wÚthetaÚx_rotÚy_rotr"   r˜   Zdof_estimatorÚweightsÚitrir#   r#   r$   Ú test_triinterpcubic_geom_weights(  s&    4ÿrÅ   c                  C   s„  d} t  dddddddg¡}t  ddddd| dg¡}ddgddgddgddgddgddgg}|D ]}|d | |d |  }|d  | |d |  }|| }}d	| d
|  }	dddgdddgdddgdddgdddgdddgdddgdddgg}
t |||
¡}t  t  |j¡t  |j¡d¡}t  t  |j¡t  |j¡d¡}t  	||¡\}}| 
¡ }| 
¡ }| ¡ ||ƒdk}t jjd	| d
|  |d}t ||	¡}t ||	¡}tj||	dd}|||fD ]}|||ƒ}t||ƒ qÀd}|j|df }|j|df }t  |j| |j| d¡}t  |j| |j| d¡}d	| d
|  }|||fD ]2}|j|||t jdt jd d\}t||ƒ qJq`d S )Nr	   rg   r   r   r   r   rd   éþÿÿÿrx   ry   r   r   r6   é   ©rq   rz   r{   r&   rX   )Z	tri_index)r   rH   r   r   r   r   r   r   r   r   r   ro   ÚmarŽ   r   r   r   Z_interpolate_multikeysr±   rY   )rv   r¹   Úy0ZtransformationsZtransformationrÁ   rÂ   r   r   r•   r   r"   rs   rt   Zmask_outZ	zs_targetr–   r—   r˜   r™   rš   rÄ   Zpt1Zpt2r#   r#   r$   Útest_triinterp_colinearB  sR    (

(  ÿ
  ÿrË   c                  C   sÜ  d} d}d}dd„ }t  |d|¡}t jd|  dt j |  | d	d
}t j|dt jf |dd}|d d …dd d…f  t j|  7  < |t  |¡  ¡ }|t  |¡  ¡ }t 	||¡}|||ƒ}	t  ddd¡}
t  ddd¡}t  
|
|¡\}
}|
 ¡ }
| ¡ }i }tdƒD ]}dt j |  | }t  |¡| t  |¡|  }t  |¡ | t  |¡|  }t  |¡|
 t  |¡|  }t  |¡ |
 t  |¡|  }t 	|||j¡}t ||	¡}t ||	¡}tj||	dd}|||dœ}dD ]B}|| }|dkrü||
|ƒ||< n|||ƒ}t ||| ¡ qÖqd}dD ]°}|dkrN|| }|}||
 }|}n|}|| }|
}|| }t 	|||j¡}t ||	¡}t ||	¡}tj||	dd}|||dœ}dD ]$}|| ||ƒ}t ||| ¡ q®q&d S )NrÇ   r&   ç333333Ã?c                 S   sä   t  d|  d| ¡}t  d|  d| ¡}t  |  d | d ¡}t  |  d | d ¡}dt  |d d ¡d  d t  d| ¡ t  |d d ¡d d t  d| ¡  d	| d |d     }t  |¡| t  |¡t  |¡  S ©
NrK   rm   r   r&   r   g      >@ç      @g      &@r:   ©r   ÚhypotÚarctan2ÚexprŸ   r   r   ©r   r   Zr1Ztheta1Zr2Ztheta2r•   r#   r#   r$   r•   Ž  s    *&ÿþz)test_triinterp_transformations.<locals>.zçffffffî?r   r   F©Zendpoint.r   rN   ç      ð¿r
   r(   rz   r{   )ZlinZmin_Erz   g¬Z¤$.Ar4   r   )r   r   r    ÚrepeatÚnewaxisrŸ   Úflattenr¡   r   r   r   r   rª   r   rŽ   r   r   r   )Ún_anglesÚn_radiiÚ
min_radiusr•   ÚradiiÚanglesr¹   rÊ   Útriang0Úz0Zxs0Zys0Z	interp_z0Zi_anglerÀ   r   r   rs   rt   r"   r–   r—   r˜   Z
dic_interpZ
interp_keyr™   ZinterpzZscale_factorZscaled_axisr#   r#   r$   Útest_triinterp_transformations€  s‚    
 ÿ$
þ

ÿ
þrá   ztri_smooth_contouring.pngTg;ßO—n²?)Zremove_textrº   c                  C   s<  d} d}d}dd„ }t  |d|¡}t jd|  dt j |  | d	d
}t j|dt jf |dd}|d d …dd d…f  t j|  7  < |t  |¡  ¡ }|t  |¡  ¡ }t 	||¡}|||ƒ}	| 
t  ||j jdd||j jdd¡|k ¡ t |¡}
|
j|	dd\}}t  ddd¡}tj|ddd tj|||dd d S )NrÇ   r&   rÌ   c                 S   sä   t  d|  d| ¡}t  d|  d| ¡}t  |  d | d ¡}t  |  d | d ¡}dt  |d d ¡d  d t  d| ¡ t  |d d ¡d d t  d| ¡  d	| d |d     }t  |¡| t  |¡t  |¡  S rÍ   rÏ   rÓ   r#   r#   r$   r•   ä  s    *&ÿþz%test_tri_smooth_contouring.<locals>.zrÔ   r   r   FrÕ   .r   rN   r   ©Úsubdivr	   r
   gš™™™™™™?rK   z0.5)ZlwÚcolorZblack)ÚlevelsÚcolors)r   r   r    r×   rØ   rŸ   rÙ   r¡   r   r   rp   rÐ   r   rT   ÚUniformTriRefinerÚrefine_fieldr   rU   ÚtriplotÚ
tricontour)rÚ   rÛ   rÜ   r•   rÝ   rÞ   r¹   rÊ   rß   rà   ÚrefinerÚtri_refiÚz_test_refirå   r#   r#   r$   Útest_tri_smooth_contouringÝ  s2     ÿ$
ÿþ
rî   ztri_smooth_gradient.pnggZd;ßO·?c                  C   sº  dd„ } d}d}d}t  |d|¡}t jddt j |d	d
}t j|dt jf |dd}|d d …dd d…f  t j| 7  < |t  |¡  ¡ }|t  |¡  ¡ }| ||ƒ}t 	||¡}	|	 
t  ||	j jdd||	j jdd¡|k ¡ t |	¡}
|
j|dd\}}t |	| ¡}| |	j|	j¡\}}t  ||¡}t ¡  t ¡  d¡ tj|	dd t  ddd¡}tjdd d}tj||||ddddgd tj|	j|	j|| || dddddddd  d S )!Nc                 S   sL   | d |d  }t  || ¡}t  |¡| }t  |¡| t  |¡t  |¡  S )zAn electric dipole potential V.r   )r   rÑ   rŸ   r   r   )r   r   Zr_sqrÀ   r•   r#   r#   r$   Údipole_potential  s    z2test_tri_smooth_gradient.<locals>.dipole_potentialé   r&   rm   rÔ   r   r   FrÕ   .r   rN   r   râ   Úequalz0.8)rä   r	   r
   g{®Gáz„?Zhot)ÚnameZlutr/   )rå   ÚcmapZ
linewidthsr>   r-   Zbluegyé&1¬|?ri   r©   )ZunitsZscaleZzorderrä   ÚwidthZ	headwidthZ
headlength)r   r   r    r×   rØ   rŸ   rÙ   r¡   r   r   rp   rÐ   r   rT   rç   rè   r   r‘   r   r   rU   ÚfigureZgcaZ
set_aspectré   r   ÚcmZget_cmaprê   Zquiver)rï   rÚ   rÛ   rÜ   rÝ   rÞ   r   r   ÚVr"   rë   rì   rí   ZtciZExZEyZE_normrå   ró   r#   r#   r$   Útest_tri_smooth_gradient  sN    $
ÿþ

ÿ     þrø   c                  C   st  t  dddddg¡} t  dddt  d¡ ddg¡}t jddd	gddd
gdd	dggt jd}t jdddgtd}tj| |||d}t |¡}t|j	t  ddddt  d¡   g¡ƒ t|j
ddt j dddt  d¡  t jg|¡ƒ t  dddg¡} t  dddg¡}t jddd	ggt jd}t | ||¡}t |¡}t| 
¡ t  dg¡ƒ d}dd„ }t  dd|d ¡} t  || dƒ|| dƒ¡\} }|  ¡ } | ¡ }tj| |t|d ƒd}t |¡}| d¡}t jdtd}	ddd	d
ddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-g}
d|	|
< t||	ƒ t jdtd}d|d.< | |¡ | d¡}d/d0d1d2d3d4d.d5d6d7d8d9d:d;g}d|	|< t||	ƒ d S )<Nr	   r
   rK   r/   ri   rÖ   r   r   r   r   r   rX   FTrÈ   )Zrescaler©   rÎ   rL   c                 S   s   t  | ¡| t  | ¡ S r7   )r   r“   Úsign)r   r   r#   r#   r$   ÚpowerV  s    ztest_tritools.<locals>.powerr`   rŒ   rm   é¢   r^   r_   re   rf   é   é   é"   é#   é~   é   éŽ   é   é   é‘   é’   é“   éž   éŸ   é    é¡   éP   é,   é-   é>   é?   éN   éO   éQ   éR   éS   éb   éc   ét   éu   )r   rH   ÚsqrtrY   Úboolr   r   ÚTriAnalyzerr   Zscale_factorsZcircle_ratiosrÉ   Zmasked_arrayÚnanr   r   r   r’   Zget_flat_tri_maskrn   r   rp   )r   r   r   rq   r"   Úanalyserr›   rú   Z	mask_flatZ
verif_maskZcorners_indexZcenter_indexr#   r#   r$   Útest_tritools9  sd    (
ÿ
"þ


         ÿ


 r  c               	   C   sz  d} d}t  dd| d ¡}t  ||¡\}}| ¡ }| ¡ }t jd| d  td}d|| d d …< tj||t| d ƒ|d}t 	|¡}|j
|d	}|j}|j}	| |d  }
t  dd|
d ¡}t  ||¡\}}| ¡ }| ¡ }t  t  |d
|  d¡t  |d
|	  d¡¡}t|dƒ |j}t j|j|j ddd }t j|j|j ddd }| ¡ }|||ƒ}|j| }t||ƒ t  ddddg¡}t  ddddg¡}t ||dddgdddgg¡t ||dddgdddgg¡g}t  |d |d ¡}g }tdƒD ]r}t 	|| ¡}|j|dd	\}}t  |j|j|f¡d }|t  |d d …df |d d …df f¡ }||g7 }qðt|d |d ƒ d S )Nr   r   rÖ   r
   r   rX   T)r   rq   râ   rh   rM   rN   ri   r	   r   r†   rj   )r   r   r   r   rn   r  r   r   r’   rç   Úrefine_triangulationr   r   Zin1dZaroundr   rq   rD   r   ro   rI   rÐ   rª   rè   ZdstackZlexsortr   )r›   rã   r   r   rq   r"   rë   Zrefi_triangZx_refiZy_refiZn_refiZx_verifZy_verifZind1dZ	refi_maskZrefi_tri_barycenter_xZrefi_tri_barycenter_yZ
tri_finderZrefi_tri_indicesZrefi_tri_maskr•   Zxyz_dataÚiZrefined_triangZ	refined_zZxyzr#   r#   r$   Útest_trirefiner  sn    ÿ
ÿ
ÿÿÿÿÿ

ÿ*r"  r¢   ZlinearZcubic)Úidsc                 C   sx   t jd d…d d…f \}}t  | ¡ d¡}t  | ¡ d¡}t  |¡}t ||¡}t |¡}| ||ƒ}|j||dd d S )Nr   )Ztriinterpolatorrã   )	r   Zmgridr×   rÙ   Z
zeros_liker   r   rç   rè   )r¢   r   r   r•   rB   rë   r™   r#   r#   r$   Útest_trirefine_maskedª  s    


r$  c                 C   s   g }t | d ƒD ]n}t | d ƒD ]\}|||   }|d ||   }||d |   }|d |d |   }||||g|||gg7 }q qtj|tjdS )zU
    Return (2*(N-1)**2, 3) array of triangles to mesh (N, N)-point np.meshgrid.
    r   rX   )rª   r   rH   rY   )r›   rB   r!  Újr   r€   r   Údr#   r#   r$   r’   ¼  s    r’   c                  C   sX   t  ¡  ¡ } tjddddgddddgdddgdddggd}|  |d¡d k	sTtd	ƒ‚d S )
Nr	   r
   r   r   r   r   rŒ   zb-z(triplot should return the artist it adds)rU   rõ   Zadd_subplotr   r   ré   r   )r¬   r"   r#   r#   r$   Útest_triplot_returnË  s    
 
þÿr'  c            
      C   sÄ   t  dddgdddgg¡} t  | ¡r(t‚t j| ddd}t  |¡sFt‚t  dd	d
dg¡}t  ddddg¡}t ||| ¡}t |||¡}t |¡}t |¡}|jdd}|jdd}	t|j	|	j	ƒ d S )Nr   r   r   r   TÚF)rZ   Úordergö(\ÂõØ?gáz®Gáâ?g…ëQ¸…Û?g{®GázÔ?g…ëQ¸þ@@gáz®GA@g¸…ëQA@g×£p=
A@râ   )
r   rH   Z	isfortranr   r   r   rç   r   r   r   )
Z
triangles1Z
triangles2r   r   Ztriang1Ztriang2Zrefiner1Zrefiner2Zfine_triang1Zfine_triang2r#   r#   r$   Ú,test_trirefiner_fortran_contiguous_trianglesÕ  s    

r*  c            
      C   sÂ   t  ddd¡} tt jt  | | ¡ƒ\}}||d k|dk @ |dk@ }|| ||  }}t  d¡}|t  |¡ |t  |¡  }|t  |¡ |t  |¡  }t 	||¡}|j
}d |_|j
}	t||	ƒ d S )NrÆ   r   r   r   g333333ÿ¿g333333ó¿é   )r   r   Úmapr   r   ÚradiansrŸ   r¡   r   r   r   r   r   )
Úxir   r   ÚwrÀ   Úx1Úy1r"   Zqhull_neighborsZown_neighborsr#   r#   r$   Útest_qhull_triangle_orientationì  s    
r2  c                  C   s–   t  dddddg¡} t  dddt  d¡ ddg¡}t jddd	gddd
gdd	dggt jd}t jdddgtd}tj| |||d}t |¡}| ¡  d S )Nr	   r
   rK   r/   ri   rÖ   r   r   r   r   r   rX   FTrÈ   )	r   rH   r  rY   r  r   r   r  Z_get_compressed_triangulation)r   r   r   rq   r"   r  r#   r#   r$   Ú#test_trianalyzer_mismatched_indices  s    (
r3  c               	   C   sT   dddg} dddg}dddg}t  ¡  t t¡ t  | ||ddg¡ W 5 Q R X d S )Nr	   r
   rm   rj   r}   )rU   rõ   r0   r1   r8   Útricontourf)r   r   r•   r#   r#   r$   Ú"test_tricontourf_decreasing_levels  s    


r5  c               
   C   s°  ddl m}  tjtdd tj ¡  W 5 Q R X tjtdd" tj g dgg gd d d d¡ W 5 Q R X dddg}dddg}tjtdd$ tj ||ddggd d d d¡ W 5 Q R X ddd	gg}tjtd
d" tj |||ddgd d d¡ W 5 Q R X tjtdd" tj |||d dggd d¡ W 5 Q R X tjtdd" tj |||d d dggd¡ W 5 Q R X tj |||d d d d¡}tjtdd | g ¡ W 5 Q R X tjtd
d | 	ddg¡ W 5 Q R X tjtdd tj 
¡  W 5 Q R X tjtdd tj 
|dg¡ W 5 Q R X ddd	g}tj 
||¡}tjtdd | dd¡ W 5 Q R X tjtdd tj ¡  W 5 Q R X tj |¡}tjtdd | dgddg¡ W 5 Q R X d S )Nr   )Ú_triz.function takes exactly 7 arguments \(0 given\)©Úmatchz,x and y must be 1D arrays of the same lengthr   Fz.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 arrayrd   z<z array must have same length as triangulation x and y arrayz.function takes exactly 2 arguments \(0 given\)z?z must be a 1D array with the same length as the x and y arraysz(filled contour levels must be increasingz-function takes exactly 1 argument \(0 given\)z*x and y must be array-like with same shape)Ú
matplotlibr6  r0   r1   Ú	TypeErrorÚmplr   r8   Zcalculate_plane_coefficientsrp   ZTriContourGeneratorZcreate_filled_contourZTrapezoidMapTriFinderZ	find_many)r6  r   r   ru   r"   r•   Ztcgrr   r#   r#   r$   Útest_internal_cpp_api  s’    þ ÿ&

þ(þ& ÿ&þ&þþþþ
 ÿ ÿ ÿr<  c                  C   sh   t  dddddg¡} t  dddddg¡}d}t | |¡}t | | || ¡}t|jƒt|jƒksdt‚d S )Nr   r   rK   g    _ B)r   rI   r   r   r   r   r   )r   r   Úoffsetr"   Ztriang_offsetr#   r#   r$   Útest_qhull_large_offsetm  s    r>  c               
   C   s  ddddg} ddddg}t  | |¡}t ¡  tjtdd t |dddtj	g¡ W 5 Q R X tjtdd t |dddtj	 g¡ W 5 Q R X tjtdd t |dddtj
g¡ W 5 Q R X tjtdd. t |tjjddddgddddgd¡ W 5 Q R X d S )	Nr   r   zCz array must not contain non-finite values within the triangulationr7  r   z9z must not contain masked points within the triangulationr   rÈ   )r   r   rU   rõ   r0   r1   r8   r4  r   Úinfr  rÉ   rH   )r   r   r"   r#   r#   r$   Útest_tricontour_non_finite_zx  s     " r@  )9Znumpyr   Znumpy.testingr   r   r   Znumpy.ma.testutilsrÉ   Z	testutilsr   r0   r9  r;  Zmatplotlib.cmrö   Zmatplotlib.pyplotZpyplotrU   Zmatplotlib.trirB   r   Zmatplotlib.pathr   Zmatplotlib.testing.decoratorsr   r%   r,   r5   ÚmarkZparametrizer9   rJ   rW   r[   rw   rœ   r¯   r¿   rÅ   rË   rá   rî   rø   r  r"  rŽ   r   r$  r’   r'  r*  r2  r3  r5  r<  r>  r@  r#   r#   r#   r$   Ú<module>   sl   *
÷
-

g_VN>]
&
498ÿý


S