U
    d»{j.É  ã                   @   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mZ G d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-d.„ Z+d/d0„ Z,d1d2„ Z-ed3gd4d5d6�d7d8„ ƒZ.ed9gd4d:d6�d;d<„ ƒZ/d=d>„ Z0d?d@„ Z1e
jjdAej2ej3gdBdCgdD�dEdF„ ƒZ4dGdH„ Z5dIdJ„ Z6dKdL„ Z7dMdN„ Z8dOdP„ Z9dQdR„ Z:dSdT„ Z;dUdV„ Z<dWdX„ Z=dYdZ„ Z>eƒ d[d\„ ƒZ?d]d^„ Z@dS )_é    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%   úb/var/www/html/bwave/python/venv/lib/python3.8/site-packages/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   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ÚedgesÚ	neighborsÚ
_neighborsr   ÚuniqueÚarange)	ÚnxÚnyr#   r$   ÚnpointsZ
ntrianglesZnedgesÚtriangrE   r%   r%   r&   Útest_delaunayK   s*    $ rM   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   rG   r   ÚdeleterH   )rK   Z	duplicateZduplicate_ofr#   r$   rL   r%   r%   r&   Útest_delaunay_duplicate_pointsu   s    ÿrT   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?   r+   r5   ÚRuntimeErrorr   r   Úappendr7   r%   r%   r&   Útest_delaunay_points_in_line‰   s    rZ   zx, yr
   r9   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\   )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 r\   r7   )Ú.0Útri)rd   rL   rb   r%   r&   Ú	<genexpr>Æ   s   ÿzCtest_delaunay_robust.<locals>.tris_contain_point.<locals>.<genexpr>)Úsumr   ©rL   rb   ©rd   ri   r&   Útris_contain_pointÅ   s    ÿz0test_delaunay_robust.<locals>.tris_contain_pointr   r
   )r=   ÚarrayÚasarrayr   r   r   )rc   Ztest_pointsrk   rL   Z
test_pointr%   rj   r&   Útest_delaunay_robust§   s0    ùù$rn   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   r9   r[   rO   é	   é   ©Zaxiséy   Úk)Ú
edgecolorszpoint colorséz   )Ú
facecolorsru   rw   )
r=   rm   r   r   r   ÚmeanÚpltZsubplotÚ	tripcolorÚtitle)r#   r$   r   rL   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:   ©rw   z-'gouraud' .* at the points.* not at the facesZgouraud)rw   Úshading)r~   z+positional.*'C'.*keyword-only.*'facecolors')ÚC)ry   Úsubplotsr+   r5   Ú	TypeErrorrz   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,rN   )ç      Ð?r_   )Úclim)r=   rQ   rR   Zrandry   ÚfigureÚadd_subplotrz   Ú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
   çš™™™™™Ù?ro   zAdditional positional paramr0   Zunused_positionalz"Positional parameter C .*no effectr}   zinterpreted as C)ry   r€   r+   ZwarnsÚDeprecationWarningrz   Ú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
   )r=   rl   Úint32Úcopyr   r   rD   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
   r9   r   r[   r   rO   rq   rp   rN   rV   é   é   é   é   r…   ç      ô?ç      @ç      
@r	   é   ro   é   ç      ø?ç      @r;   r<   rW   ç      @gš™™™™™¹¿rŒ   çÍÌÌÌÌÌì?gffffffö?gffffffþ?g333333@g333333@çš™™™™™¹?gš™™™™™É¿çš™™™™™É?r`   g333333ó?)r=   r>   rH   r@   ÚzerosrA   r   r   Úget_trifinderr   Úset_maskr   )
r#   r$   r   r   rL   Ú	trifinderÚxsÚysÚtrisÚdeltar%   r%   r&   Útest_trifinder/  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�s�t‚�q�d S )1Nr:   ç®Gáz®ó?ç)\�Âõ(@r   r
   r9   r   r[   r   rO   rq   rp   rN   rV   r”   r•   r–   r—   Úgeom©Úkindr…   g      @r_   r™   g      Ð¿r˜   g      ü?rš   T)r¬   g)\�Âõ(Àç333333ã?c                    s,   ˆ | d d  ˆ|d d   ˆ|  |  S )Nro   r   r%   r7   ©r   r   rŠ   r%   r&   ÚquadÅ  s    ztest_triinterp.<locals>.quadc                    s0   dˆ  | d  ˆ|  dˆ |d  ˆ|   fS )Nr   ro   r%   r7   r²   r%   r&   Úgradient_quadÈ  s    z%test_triinterp.<locals>.gradient_quadr¢   ç&jjÙZÕ?çœÄ °rhå?r;   r<   ç333333Ó?çHPüs×é?çX9´Èv¾Û?Úuser©r°   Údzr   r¡   r    éd   )r=   r>   rH   r@   r£   rA   r   r   ÚLinearTriInterpolatorÚCubicTriInterpolatorr?   r   r   r   Úmatestrl   ÚgradientÚmeshgrid_trianglesÚabsrC   r   Údot)r#   r$   Úzr   r   rL   Ú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
   )r=   Úcosr?   ÚpiÚsinrÁ   r   r   )ÚinterpolatorÚlocÚvaluesZn_starÚepsilonrt   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;   r<   r   r
   r   r   r:   r9   r[   rp   rO   r�   rº   r»   ro   rŸ   ç      @g      @)N)r=   rl   r   r   Úranger£   Úfloat64r¿   )rØ   rƒ   ÚayZbxZbyZcxÚcyr#   r$   r   rL   ZidofrÅ   rÖ   r×   rÔ   Ú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   )r=   ÚconcatenaterH   r‘   ÚonesrÛ   )rË   ÚmÚlÚrowsÚcolsÚvalsr%   r%   r&   Úpoisson_sparse_matrixO  s2      ý  ý  ý"*z<test_triinterpcubic_cg_solver.<locals>.poisson_sparse_matrix)r”   r:   r�   r<   rÎ   )ÚAr   Úx0Útol)r”   é1   r
   r   rœ   r   )r   r   rW   r;   g      @)r   ÚtriinterpolateZ_Sparse_Matrix_cooZcompress_cscZto_denserÚ   r=   r£   rÛ   Z_cgr   rÄ   rà   rá   rl   r‘   )rç   rË   râ   ZmatZ	mat_denseZitestr   r#   Ú_Zi_zeroZj_zeroræ   rä   rå   Údimr%   r%   r&   Útest_triinterpcubic_cg_solverK  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¶óýú?ro   r;   r<   r:   r�   r   r   r   r
   r–   r®   r¯   rr   )r=   rl   r£   rÛ   r?   rÐ   rÏ   rÑ   r   r   r¿   rì   Z_DOF_estimator_geomZcompute_geom_weightsrh   rÚ   r   rB   rÃ   )rƒ   rÜ   r#   r$   rÅ   r   Zsum_wÚthetaÚx_rotÚy_rotrL   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:   r9   r[   é   r   r®   r¯   rN   r�   )Z	tri_index)r=   rl   r   r   r?   rB   r#   rC   r$   r>   r@   r¤   Úmar¾   r¿   r   r   Z_interpolate_multikeysrá   r‘   )rª   ré   Úy0ZtransformationsZtransformationrñ   rò   r#   r$   rÅ   r   rL   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÷   rN   ç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 ©
Nro   r¢   r   rN   r
   g      >@ç      @g      &@r^   ©r=   ÚhypotÚarctan2ÚexprÏ   rC   rB   ©r#   r$   Úr1Ztheta1Úr2Ztheta2rÅ   r%   r%   r&   rÅ   ÿ  s    *&ÿþz)test_triinterp_transformations.<locals>.zçffffffî?r   r   F©Zendpoint.r
   rr   ç      ð¿r<   rP   r®   r¯   )ZlinZmin_Er®   g¬Z¤$.Ar7   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$   r§   r¨   rL   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÷   rN   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Å   U  s    *&ÿþz%test_tri_smooth_contouring.<locals>.zr  r   r   Fr  .r
   rr   r:   ©Úsubdivr;   r<   gš™™™™™™?ro   z0.5)ZlwÚcolorÚblack)ÚlevelsÚcolors)r=   r?   rÐ   r  r	  rÏ   r
  rÑ   r   r   r¥   rÿ   r   rx   ÚUniformTriRefinerÚrefine_fieldrH   ry   ÚtriplotÚ
tricontour)r  r  r  rÅ   r  r  ré   rù   r  r  ÚrefinerÚtri_refiÚz_test_refir  r%   r%   r&   Útest_tri_smooth_contouringN  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   )r=   r   rÏ   rC   rB   )r#   r$   Zr_sqrð   rÅ   r%   r%   r&   Údipole_potentialy  s    z2test_tri_smooth_gradient.<locals>.dipole_potentialé   rN   r¢   r  r   r   Fr  .r
   rr   r   r  Úequalz0.8)r  r;   r<   g{®Gáz„?ZhotrW   )r  ÚcmapZ
linewidthsrb   rU   Úbluegyé&1¬|?rŸ   rÙ   )ZunitsÚscaleZzorderr  ÚwidthZ	headwidthZ
headlength)r=   r?   rÐ   r  r	  rÏ   r
  rÑ   r   r   r¥   rÿ   r   rx   r  r  r¿   rÁ   r#   r$   ry   r‡   ZgcaZ
set_aspectr  rH   ÚmplZ	colormapsr  Zquiver)r!  r  r  r  r  r  r#   r$   ÚVrL   r  r  r  ZtciZExZEyZE_normr  r$  r%   r%   r&   Útest_tri_smooth_gradientu  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<   ro   rW   rŸ   r  r   r
   r   r   r:   r�   FTr   )ZrescalerÙ   rý   rp   c                 S   s   t  | ¡| t  | ¡ S r\   )r=   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   )r=   rl   Úsqrtr‘   Úboolr   r   ÚTriAnalyzerr   Zscale_factorsZcircle_ratiosrø   Zmasked_arrayÚnanr?   r>   r@   rÂ   Zget_flat_tri_maskr£   r   r¥   )r#   r$   r   r   rL   ÚanalyserrË   r,  Z	mask_flatZ
verif_maskZcorners_indexZcenter_indexr%   r%   r&   Útest_tritoolsª  sd    (
ÿ
"þ


         ÿ


 rP  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
   r�   Tr   r  rž   rq   rr   rŸ   r;   r   r·   rŒ   )r=   r?   r>   r@   r£   rL  r   r   rÂ   r  Úrefine_triangulationr#   r$   Zin1dÚaroundr   r   rh   r   r¤   rm   rÿ   rÚ   r  ZdstackZlexsortr   )rË   r  r#   r$   r   rL   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    ÿ
ÿ
ÿÿÿÿÿ

ÿ*rT  rÒ   ZlinearZcubic)Z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Å   rf   r  rÉ   r%   r%   r&   Útest_trirefine_masked  s    


rU  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Ú   r=   rl   r‘   )rË   rf   rS  Ú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)ry   r‡   rˆ   r   r   r  r   )rƒ   rL   r%   r%   r&   Útest_triplot_return<  s    
 
þÿrX  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  )
r=   rl   Z	isfortranr   r   r   r  rQ  r   r   )
Z
triangles1Z
triangles2r#   r$   Ztriang1Ztriang2Zrefiner1Zrefiner2Zfine_triang1Zfine_triang2r%   r%   r&   Ú,test_trirefiner_fortran_contiguous_trianglesF  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   rE   rF   r   )
Úxir#   r$   Úwrð   Úx1Úy1rL   Zqhull_neighborsZown_neighborsr%   r%   r&   Útest_qhull_triangle_orientation]  s    
rc  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<   ro   rW   rŸ   r  r   r
   r   r   r:   r�   FTr   )	r=   rl   rK  r‘   rL  r   r   rM  Z_get_compressed_triangulation)r#   r$   r   r   rL   rO  r%   r%   r&   Ú#test_trianalyzer_mismatched_indicest  s    (
rd  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<   r¢   rŒ   r±   )ry   r‡   r+   r5   r6   Útricontourf)r#   r$   rÅ   r%   r%   r&   Ú"test_tricontourf_decreasing_levels�  s    


rf  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\)r0   z,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 arrayr	   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)Ú
matplotlibrg  r+   r5   r�   r(  r   r6   Zcalculate_plane_coefficientsr¥   ZTriContourGeneratorZcreate_filled_contourZTrapezoidMapTriFinderZ	find_many)rg  r#   r$   r©   rL   rÅ   Ztcgr¦   r%   r%   r&   Útest_internal_cpp_api‹  s’    þ ÿ&

þ(þ& ÿ&þ&þþþþ
 ÿ ÿ ÿri  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
   ro   g    _ B)r=   rm   r   r   rA   r   r   )r#   r$   ÚoffsetrL   Ztriang_offsetr%   r%   r&   Útest_qhull_large_offsetÞ  s    rk  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   ry   r‡   r+   r5   r6   re  r=   ÚinfrN  rø   rl   )r#   r$   rL   r%   r%   r&   Útest_tricontour_non_finite_zé  s     " rm  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;   ro   r<   rW   rŸ   )ry   r€   re  r  Z_contour_generatorr   )r#   r$   rÅ   r‚   rƒ   Ztcs1Ztcs2Ztcs3r%   r%   r&   Útest_tricontourset_reuse  s    


rn  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
    

rp  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)rq  )ry   r€   r  Zget_legend_handles_labelsr   rA   )	r#   r$   ro  r‚   rƒ   ÚlinesÚmarkersZhandlesÚlabelsr%   r%   r&   Útest_triplot_label  s    

ru  )AÚnumpyr=   Znumpy.testingr   r   r   Znumpy.ma.testutilsrø   Z	testutilsrÀ   r+   rh  r(  Zmatplotlib.pyplotZpyplotry   Zmatplotlib.trirf   r   Zmatplotlib.pathr   Zmatplotlib.testing.decoratorsr   r   r   r/   r8   rM   rT   rZ   r,   r-   r]   rn   r|   r„   r‹   r�   r“   r«   rÌ   rß   rï   rõ   rú   r  r   r*  rP  rT  r¾   r¿   rU  rÂ   rX  r[  rc  rd  rf  ri  rk  rm  rn  rp  ru  r%   r%   r%   r&   Ú<module>   s~   *
÷
-


g_VN>]
&
498ÿý


S
