U
    FvfèÌ  ã                   @   sh  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mZ G dd„ dƒZdd„ Zd	d
„ Zdd„ 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+d/d0„ Z,d1d2„ Z-d3d4„ Z.ed5gd6d7d8d9d:„ ƒZ/ed;gd6d<d8d=d>„ ƒZ0d?d@„ Z1dAdB„ Z2e
jj dCej3ej4gdDdEgdFdGdH„ ƒZ5dIdJ„ Z6dKdL„ Z7dMdN„ Z8dOdP„ Z9dQdR„ Z:dSdT„ Z;dUdV„ Z<dWdX„ Z=dYdZ„ Z>d[d\„ Z?eƒ d]d^„ ƒZ@d_d`„ ZAdS )aé    N)Úassert_array_equalÚassert_array_almost_equalÚassert_array_less)ÚPath)Úimage_comparisonÚcheck_figures_equalc                   @   sì   e Zd ZddddgZddddgZdddgdddggZddgZej 	deegi eed	d	gfeeegi eeed	gfeege
ed
eeed	gfeege
edeed	egfeeege
edeeeegfeege
eedeeeegfg¡dd„ ƒZd	S )ÚTestTriangulationParamséÿÿÿÿr   é   é   é   FTzargs, kwargs, expectedN©Ú	triangles©Úmask©r   r   c                 C   sŠ   ddg}dddœ}t j || ||–¡\}}}}	}
}|\}}}}||ksLt‚||ksXt‚t||ƒ |	|ksnt‚|
|kszt‚||ks†t‚d S )Nr
   r   r   Ú4)ÚaÚb)ÚmtriÚTriangulationÚ_extract_triangulation_paramsÚAssertionErrorr   )ÚselfÚargsÚkwargsÚexpectedZ
other_argsZother_kwargsÚx_Úy_Ú
triangles_Úmask_Úargs_Úkwargs_ÚxÚyr   r   © r%   úG/tmp/pip-unpacked-wheel-7vhvci0g/matplotlib/tests/test_triangulation.pyÚ!test_extract_triangulation_params   s    	
 ÿÿ
z9TestTriangulationParams.test_extract_triangulation_params)Ú__name__Ú
__module__Ú__qualname__r#   r$   r   r   ÚpytestÚmarkÚparametrizeÚdictr'   r%   r%   r%   r&   r      s   úr   c                  C   s^   dg} dddgdddgdddgg| g}t j |i ¡\}}}}}}|d ksLt‚|| gksZt‚d S )NTr   r   r
   )r   r   r   r   )r   r   r   r   r   r    r!   r"   r%   r%   r&   Ú*test_extract_triangulation_positional_mask+   s     ÿr/   c               	   C   sü   ddddg} ddddg}t jtdd t | ddg¡ W 5 Q R X t jtdd t | |dddg¡ W 5 Q R X t jtdd t | |d	¡ W 5 Q R X t jtd
d t | |dddgg¡ W 5 Q R X t jtdd t | |dddgg¡ W 5 Q R X d S )Nr	   r   r
   zx and y must be equal-length©Úmatchr   z>triangles must be a \(N, 3\) int array, but found shape \(3,\)z3triangles must be a \(N, 3\) int array, not 'other'Úotherzfound value 99éc   zfound value -1©r+   ÚraisesÚ
ValueErrorr   r   ©r#   r$   r%   r%   r&   Útest_triangulation_init7   s$    þþ r8   c               
   C   sÖ   ddddg} ddddg}dddgdddgg}t  | ||¡}t|jdddgdddggƒ | ddg¡ t|jddgƒ | d ¡ |jd ksŒt‚d}dddgdgdgddfD ](}tjt	|d	 | |¡ W 5 Q R X q¨d S )
Nr	   r   r
   r   r   FTz3mask array must have same length as triangles arrayr0   )
r   r   r   Ú	neighborsÚset_maskr   r   r+   r5   r6   )r#   r$   r   ÚtriangÚmsgr   r%   r%   r&   Útest_triangulation_set_maskK   s    
r=   c            	      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   r
   r   r   )ÚnpÚmeshgridÚlinspaceÚravelr   r   r   r#   r$   Úlenr   r   ÚminÚmaxÚedgesr9   Ú
_neighborsr   ÚuniqueÚarange)	ZnxÚnyr#   r$   ÚnpointsZ
ntrianglesZnedgesr;   r9   r%   r%   r&   Útest_delaunayb   s*    $ rO   c                  C   sx   d} d}d}t j d¡ t j | ¡}t j | ¡}|| ||< || ||< t ||¡}tt  |j¡t  t  	| ¡|¡ƒ d S )Né
   é   r   é   )
rB   ÚrandomÚseedr   r   r   rK   r   ÚdeleterL   )rN   Z	duplicateZduplicate_ofr#   r$   r;   r%   r%   r&   Útest_delaunay_duplicate_pointsŒ   s    ÿrV   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       @)rB   rD   r+   r5   ÚRuntimeErrorr   r   Úappendr7   r%   r%   r&   Útest_delaunay_points_in_line    s    r\   zx, yr
   r>   r   é   c              	   C   s&   t  t¡ t | |¡ W 5 Q R X d S ©Nr4   r7   r%   r%   r&   Ú!test_delaunay_insufficient_points®   s    r_   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 r^   )rB   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 r^   r7   )Ú.0Útri)rf   r;   rd   r%   r&   Ú	<genexpr>Ý   s   ÿzCtest_delaunay_robust.<locals>.tris_contain_point.<locals>.<genexpr>)Úsumr   ©r;   rd   ©rf   rk   r&   Útris_contain_pointÜ   s    ÿz0test_delaunay_robust.<locals>.tris_contain_pointr   r
   )rB   ÚarrayÚasarrayr   r   r   )re   Ztest_pointsrm   r;   Z
test_pointr%   rl   r&   Útest_delaunay_robust¾   s0    ùù$rp   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
   ra   r   r?   r   r>   r]   rQ   é	   é   ©Zaxiséy   Úk)Ú
edgecolorszpoint colorséz   )Ú
facecolorsrw   ry   )
rB   ro   r   r   r   ÚmeanÚpltZsubplotÚ	tripcolorÚtitle)r#   r$   r   r;   ZCpointsZxmidZymidZCfacesr%   r%   r&   Útest_tripcolorë   s2          ü


r~   c               	   C   s–  ddddg} ddddg}t  ¡ \}}tjtdd | | |¡ W 5 Q R X tjtdd | | |dddg¡ W 5 Q R X tjtd	d |j| |dddd
gd W 5 Q R X tjtdd |j| |ddgdd W 5 Q R X tjtdd |j| |ddgdd W 5 Q R X tjtdd |j| |dddd
gd W 5 Q R X | | |dddd
g¡ |j| |dddd
gdd | | |ddg¡ |j| |ddgd d S )Nr	   r   r
   z!tripcolor\(\) missing 1 required r0   z!The length of c must match eitherr   r   z,length of facecolors must match .* trianglesr?   ©ry   z-'gouraud' .* at the points.* not at the facesZgouraud)ry   Úshading)r€   z+positional.*'c'.*keyword-only.*'facecolors')ÚC)r{   Úsubplotsr+   r5   Ú	TypeErrorr|   r6   )r#   r$   ÚfigÚaxr%   r%   r&   Útest_tripcolor_color  s6    ÿ"ÿ ÿ ÿ"r†   c                  C   sp   t j d¡ t j d¡t j d¡t j d¡  } }}t ¡  ¡ }d}|j| |||dj}|j	|j
f|kslt‚d S )Ni!N,rP   )ç      Ð?ra   )Úclim)rB   rS   rT   Zrandr{   ÚfigureÚadd_subplotr|   ÚnormZvminZvmaxr   )r   r   Úcr…   rˆ   r‹   r%   r%   r&   Útest_tripcolor_clim#  s    (r   c               	   C   s²   ddddg} ddddg}ddg}t  ¡ \}}tjtdd | | ||d¡ W 5 Q R X tjtd	d |j| |||d
 W 5 Q R X tjtd	d |j| |d|d
 W 5 Q R X d S )Nr	   r   r
   çš™™™™™Ù?rq   zAdditional positional paramr0   Zunused_positionalz"Positional parameter c .*no effectr   zinterpreted as c)r{   r‚   r+   ZwarnsÚDeprecationWarningr|   ÚUserWarning)r#   r$   rŒ   r„   r…   r%   r%   r&   Útest_tripcolor_warnings-  s    r‘   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
   )rB   rn   Úint32Úcopyr   r   rI   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   r]   r   rQ   rs   rr   rP   rX   é   é   é   é   r‡   ç      ô?ç      @ç      
@r	   é   rq   é   ç      ø?ç      @r@   rA   rY   ç      @gš™™™™™¹¿rŽ   çÍÌÌÌÌÌì?gffffffö?gffffffþ?g333333@g333333@çš™™™™™¹?gš™™™™™É¿çš™™™™™É?rb   g333333ó?)rB   rC   rL   rE   ÚzerosrF   r   r   Úget_trifinderr   r:   r   )
r#   r$   r   r   r;   Ú	trifinderÚxsÚysÚtrisÚdeltar%   r%   r&   Útest_trifinderF  sÐ    (          ý
       ÿ       ÿ
"
	(  ÿ
ÿ
(  ÿ
(ÿ

r¬   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   r]   r   rQ   rs   rr   rP   rX   r–   r—   r˜   r™   Úgeom©Úkindr‡   g      @ra   r›   g      Ð¿rš   g      ü?rœ   T)r­   g)\Âõ(Àç333333ã?c                    s,   ˆ | d d  ˆ|d d   ˆ|  |  S )Nrq   r   r%   r7   ©r   r   rŒ   r%   r&   ÚquadÜ  s    ztest_triinterp.<locals>.quadc                    s0   dˆ  | d  ˆ|  dˆ |d  ˆ|   fS )Nr   rq   r%   r7   r³   r%   r&   Úgradient_quadß  s    z%test_triinterp.<locals>.gradient_quadr¤   ç&jjÙZÕ?çœÄ °rhå?r@   rA   ç333333Ó?çHPüs×é?çX9´Èv¾Û?Úuser©r±   Údzr   r£   r¢   éd   )rB   rC   rL   rE   r¥   rF   r   r   ÚLinearTriInterpolatorÚCubicTriInterpolatorrD   r   r   r   Úmatestrn   ÚgradientÚmeshgrid_trianglesÚabsrH   r   Údot)r#   r$   Úzr   r   r;   Úlinear_interpÚcubic_min_EÚ
cubic_geomr¨   r©   Ú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
   )rB   ÚcosrD   ÚpiÚsinrÂ   r   r   )ÚinterpolatorÚlocÚvaluesZn_starÚepsilonrv   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)r¤   r¸   )r¶   r¹   )r·   rº   r@   rA   r   r
   r   r   r?   r>   r]   rr   rQ   r’   r»   r¼   rq   r¡   ç      @g      @)N)rB   rn   r   r   Úranger¥   Úfloat64rÀ   )rÙ   r…   Ú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.
        r’   r
   r?   r@   r   Nr   )rB   ÚconcatenaterL   r“   ÚonesrÜ   )rÌ   ÚmÚlÚrowsÚcolsÚvalsr%   r%   r&   Úpoisson_sparse_matrixf  s2      ý  ý  ý"*z<test_triinterpcubic_cg_solver.<locals>.poisson_sparse_matrix)r–   r?   r’   rA   rÏ   )ÚAr   Úx0Útol)r–   é1   r
   r   rž   r   )r   r   rY   r@   g      @)r   Ú_triinterpolateZ_Sparse_Matrix_cooZcompress_cscZto_denserÛ   rB   r¥   rÜ   Z_cgr   rÅ   rà   rá   rn   r“   )rç   rÌ   râ   ÚmatZ	mat_denseZitestr   r#   Ú_Zi_zeroZj_zeroræ   rä   rå   Zdimr%   r%   r&   Útest_triinterpcubic_cg_solverb  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¶óýú?rq   r@   rA   r?   r’   r   r   r   r
   r˜   r¯   r°   rt   )rB   rn   r¥   rÜ   rD   rÑ   rÐ   rÒ   r   r   rÀ   rì   Z_DOF_estimator_geomZcompute_geom_weightsrj   rÛ   r   rG   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@   rŸ   r   r
   r   r   r	   éþÿÿÿr­   r®   r?   r>   r]   é   r   r¯   r°   rP   r’   )Z	tri_index)rB   rn   r   r   rD   rG   r#   rH   r$   rC   rE   r¦   Úmar¿   rÀ   r   r   Z_interpolate_multikeysrá   r“   )r«   ré   Úy0ZtransformationsZtransformationrñ   rò   r#   r$   rÆ   r   r;   r¨   r©   Zmask_outZ	zs_targetrÇ   rÈ   rÉ   rÊ   rË   rô   Zpt1Zpt2r%   r%   r&   Útest_triinterp_colinearÊ  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÷   rP   ç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 ©
Nrq   r¤   r   rP   r
   g      >@ç      @g      &@r`   ©rB   ÚhypotÚarctan2ÚexprÐ   rH   rG   ©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
   rt   ç      ð¿rA   rR   r¯   r°   )ZlinZmin_Er¯   g¬Z¤$.Ar7   r#   )rB   rD   rÑ   ÚrepeatÚnewaxisrÐ   ÚflattenrÒ   r   r   rC   rE   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$   r¨   r©   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÷   rP   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Æ   l  s    *&ÿþz%test_tri_smooth_contouring.<locals>.zr  r   r   Fr  .r
   rt   r?   ©Úsubdivr@   rA   gš™™™™™™?rq   z0.5)ZlwÚcolorZblack)ÚlevelsÚcolors)rB   rD   rÑ   r  r  rÐ   r  rÒ   r   r   r:   rÿ   r   rz   ÚUniformTriRefinerÚrefine_fieldrL   r{   ÚtriplotÚ
tricontour)r	  r
  r  rÆ   r  r  ré   rù   r  r  ÚrefinerÚtri_refiÚz_test_refir  r%   r%   r&   Útest_tri_smooth_contouringe  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 }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   )rB   r   rÐ   rH   rG   )r#   r$   Zr_sqrð   rÆ   r%   r%   r&   Údipole_potential  s    z2test_tri_smooth_gradient.<locals>.dipole_potentialé   rP   r¤   r  r   r   Fr  .r
   rt   r   r  Úequalz0.8)r  r@   rA   g{®Gáz„?ZhotrY   )r  ÚcmapZ
linewidthsrd   rW   Zbluegyé&1¬|?r¡   rÚ   )ZunitsZscaleZzorderr  ÚwidthZ	headwidthZ
headlength)rB   rD   rÑ   r  r  rÐ   r  rÒ   r   r   r:   rÿ   r   rz   r  r  rÀ   rÂ   r#   r$   r{   r‰   ZgcaZ
set_aspectr  rL   ÚmplZ	colormapsr  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   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 |¡}t|j	d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¡}d0d1d2d3d4d5d/d6d7d8d9d:d;d<g}d|	|< t||	ƒ d S )=Nr@   rA   rq   rY   r¡   r  r   r
   r   r   r?   r’   FTr   gVÍž^&á?)ZrescalerÚ   rý   rr   c                 S   s   t  | ¡| t  | ¡ S r^   )rB   rÄ   Úsign)r#   r   r%   r%   r&   ÚpowerÝ  s    ztest_tritools.<locals>.powerr‡   r   r¤   é¢   r˜   r™   r   rž   é   é   é"   é#   é~   é   éŽ   é   é   é‘   é’   é“   éž   éŸ   é    é¡   éP   é,   é-   é>   é?   éN   éO   éQ   éR   éS   éb   r3   ét   éu   )rB   rn   Úsqrtr“   Úboolr   r   ÚTriAnalyzerr   Zscale_factorsZcircle_ratiosrø   Zmasked_arrayÚnanrD   rC   rE   rÃ   Zget_flat_tri_maskr¥   r   r:   )r#   r$   r   r   r;   ÚanalyserrÌ   r'  Z	mask_flatZ
verif_maskZcorners_indexZcenter_indexr%   r%   r&   Útest_tritoolsÁ  s`    (

"þ


         ÿ


 rK  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  rA   r
   r’   Tr   r  r    rs   rt   r¡   r@   r   r¸   rŽ   )rB   rD   rC   rE   r¥   rG  r   r   rÃ   r  Úrefine_triangulationr#   r$   Zin1dZaroundr   r   rj   r   r¦   ro   rÿ   rÛ   r  ZdstackZlexsortr   )rÌ   r  r#   r$   r   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_trirefineù  sn    ÿ
ÿ
ÿÿÿÿÿ

ÿ*rN  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  )	rB   Zmgridr  r  Z
zeros_liker   r   r  r  )rÓ   r#   r$   rÆ   rh   r  rÊ   r%   r%   r&   Útest_trirefine_masked1  s    


rP  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
   r’   )rÛ   rB   rn   r“   )rÌ   rh   rM  Újr   r   rŒ   Údr%   r%   r&   rÃ   C  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@   rA   r   r
   r   r   r   zb-z(triplot should return the artist it adds)r{   r‰   rŠ   r   r   r  r   )r…   r;   r%   r%   r&   Útest_triplot_returnR  s    
 
þÿrS  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)r”   Úordergö(\ÂõØ?gáz®Gáâ?g…ëQ¸…Û?g{®GázÔ?g…ëQ¸þ@@gáz®GA@g¸…ëQA@g×£p=
A@r  )
rB   rn   Z	isfortranr   r   r   r  rL  r   r   )
Z
triangles1Z
triangles2r#   r$   Ztriang1Ztriang2Zrefiner1Zrefiner2Zfine_triang1Zfine_triang2r%   r%   r&   Ú,test_trirefiner_fortran_contiguous_triangles\  s    

rV  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ó¿é   )rB   rD   ÚmaprE   rC   ÚradiansrÐ   rÒ   r   r   r9   rJ   r   )
Úxir#   r$   Úwrð   Úx1Úy1r;   Zqhull_neighborsZown_neighborsr%   r%   r&   Útest_qhull_triangle_orientations  s    
r^  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@   rA   rq   rY   r¡   r  r   r
   r   r   r?   r’   FTr   )	rB   rn   rF  r“   rG  r   r   rH  Z_get_compressed_triangulation)r#   r$   r   r   r;   rJ  r%   r%   r&   Ú#test_trianalyzer_mismatched_indicesŠ  s    (
r_  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@   rA   r¤   rŽ   r²   )r{   r‰   r+   r5   r6   Útricontourf)r#   r$   rÆ   r%   r%   r&   Ú"test_tricontourf_decreasing_levels—  s    


ra  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 ddgd fD ]*}tjtdd | 	|¡ W 5 Q R X q¨| 	dg¡ t
| ¡ t d¡ƒ | 	d¡ t
| ¡ ddgd
dgd
dggƒ 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   )Ú_triz1__init__\(\): incompatible constructor arguments.r0   z,x and y must be 1D arrays of the same lengthr
   r%   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 arrayr	   zMz must be a 1D array with the same length as the triangulation x and y arraysT)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)Ú
matplotlibrb  r+   r5   rƒ   r#  r   r6   Zcalculate_plane_coefficientsr:   r   Z	get_edgesrB   ÚemptyZTriContourGeneratorZcreate_filled_contourZTrapezoidMapTriFinderZ	find_many)	rb  r#   r$   rª   r;   r   rÆ   Ztcgr§   r%   r%   r&   Útest_internal_cpp_api¡  sœ    þ ÿ&

þ(þ& ÿ&þ&þþ
 þþ
 ÿþ ÿre  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
   rq   g    _ B)rB   ro   r   r   rF   r   r   )r#   r$   Úoffsetr;   Ztriang_offsetr%   r%   r&   Útest_qhull_large_offsetü  s    rg  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 triangulationr0   r   z9z must not contain masked points within the triangulationr   r   )r   r   r{   r‰   r+   r5   r6   r`  rB   ÚinfrI  rø   rn   )r#   r$   r;   r%   r%   r&   Útest_tricontour_non_finite_z  s     " ri  c                  C   sv   dddg} dddg}dddg}t  ¡ \}}| | ||¡}| | ||¡}|j|jksVt‚| ||¡}|j|jksrt‚d S )Nr@   rq   rA   rY   r¡   )r{   r‚   r`  r  Z_contour_generatorr   )r#   r$   rÆ   r„   r…   Ztcs1Ztcs2Ztcs3r%   r%   r&   Útest_tricontourset_reuse  s    


rj  c                 C   sP   dddg}dddg}dddgg}|   ¡ j|||dd |  ¡ j|||dd d S )Nr   r   r
   z--)Zls)Z	linestyle)r‚   r  )Zfig_testZfig_refr#   r$   Údatar%   r%   r&   Útest_triplot_with_ls-  s
    

rl  c            	      C   s€   dddg} dddg}dddgg}t  ¡ \}}|j| ||dd\}}| ¡ \}}|dgks\t‚t|ƒdkslt‚|d |ks|t‚d S )Nr   r   r
   Úlabel)rm  )r{   r‚   r  Zget_legend_handles_labelsr   rF   )	r#   r$   rk  r„   r…   ÚlinesÚmarkersZhandlesÚlabelsr%   r%   r&   Útest_triplot_label6  s    

rq  )BZnumpyrB   Znumpy.testingr   r   r   Znumpy.ma.testutilsrø   Z	testutilsrÁ   r+   rc  r#  Zmatplotlib.pyplotZpyplotr{   Zmatplotlib.trirh   r   Zmatplotlib.pathr   Zmatplotlib.testing.decoratorsr   r   r   r/   r8   r=   rO   rV   r\   r,   r-   r_   rp   r~   r†   r   r‘   r•   r¬   rÍ   rß   rï   rõ   rú   r  r  r%  rK  rN  r¿   rÀ   rP  rÃ   rS  rV  r^  r_  ra  re  rg  ri  rj  rl  rq  r%   r%   r%   r&   Ú<module>   s€   *
÷
-


g_VN>]
&
488ÿý


[
