o
    ÞÁg{³  ã                   @   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g d¢g d¢fg d¢g d¢fg d¢g d¢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/d0d1d2„ ƒZ)ed3gd.d4d0d5d6„ ƒZ*d7d8„ Z+d9d:„ Z,e
jjd;ej-ej.gd<d=gd>d?d@„ ƒZ/dAdB„ Z0dCdD„ Z1dEdF„ Z2dGdH„ Z3dIdJ„ Z4dKdL„ Z5dMdN„ Z6dOdP„ Z7dQdR„ Z8dS )Sé    N)Úassert_array_equalÚassert_array_almost_equalÚassert_array_less)ÚPath)Úimage_comparisonc            	      C   sL  d} d}t  t  dd| ¡t  dd|¡¡\}}| ¡ }| ¡ }| | }d| d  |d  }d|  | d|   d|  d }t ||¡}t|j|ƒ t|j|ƒ t	|j
ƒ|ksWJ ‚t  |j
¡dksaJ ‚t  |j
¡|d ksmJ ‚t	|jƒ|ksvJ ‚t  |j¡dks€J ‚t  |j¡|d ksŒJ ‚|j}d |_t|j|ƒ tt  |j
¡t  |¡ƒ d S )	Né   é   ç        ç      ð?é   é   é   r   )ÚnpÚmeshgridÚlinspaceÚravelÚmtriÚTriangulationr   ÚxÚyÚlenÚ	trianglesÚminÚmaxÚedgesÚ	neighborsÚ
_neighborsr   ÚuniqueÚarange)	ÚnxÚnyr   r   ÚnpointsÚ
ntrianglesÚnedgesÚtriangr   © r%   úa/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/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!   Ú	duplicateÚduplicate_ofr   r   r$   r%   r%   r&   Útest_delaunay_duplicate_points9   s   ÿr0   c                  C   sz   t  ddd¡} t  ddd¡}t t¡ t | |¡ W d   ƒ n1 s$w   Y  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   ÿr9   zx, yr   r   r   é   )r   r   r   )r   r:   r   )r   r   r   )r   r:   r:   )r   r   r   r   r   r   )r   r   r   r:   r   r:   c                 C   s<   t  t¡ t | |¡ W d   ƒ d S 1 sw   Y  d S ©N)r4   r5   Ú
ValueErrorr   r   r8   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]J ‚qRt | 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   ÚvstackÚTr   Úcontains_point)ÚxtriÚ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;   r8   )Ú.0Útri)rH   r$   rF   r%   r&   Ú	<genexpr>Š   s   €  ÿzCtest_delaunay_robust.<locals>.tris_contain_point.<locals>.<genexpr>)Úsumr   ©r$   rF   ©rH   rM   r&   Útris_contain_point‰   s   ÿz0test_delaunay_robust.<locals>.tris_contain_pointr   r   )r   ÚarrayÚasarrayr   r   )rG   Útest_pointsrO   r$   Ú
test_pointr%   rN   r&   Útest_delaunay_robustk   s0   ùù$(rT   ztripcolor1.pngc                  C   sø   t  g d¢¡} t  g d¢¡}t  g d¢g d¢g d¢g d¢g d¢g d¢g d	¢g d
¢g d¢g d¢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 )N)
r   ç      à?r   r   rU   r   r   rU   r   r?   )
r   r   r   rU   rU   rU   r   r   r   r?   ©r   r   r   )r   r   r   ©r   r   r   )r   r   r   )r   r   r:   )r   r)   r:   )r   r   é	   )r)   r   rX   )é   r)   rX   )r   rY   rX   rU   r   ©Úaxiséy   Úk)Ú
edgecolorszpoint colorséz   )Ú
facecolorsr^   r`   )
r   rQ   r   r   r   ÚmeanÚpltÚsubplotÚ	tripcolorÚtitle)r   r   r   r$   ÚCpointsÚxmidÚymidÚCfacesr%   r%   r&   Útest_tripcolor˜   s&   ü


rj   c                  C   sh   t jg d¢g d¢gt jd} t  g d¢¡}|  ¡ }t |d d …df |d d …df | ¡j t|| ƒ d S )N©r   r   r   )r   r   r   ©Údtype))r   r   )r   gš™™™™™ñ?)r   r   )r   r   r   r   )r   rP   Úint32Úcopyr   r   r   r   )r   ÚpointsÚold_trianglesr%   r%   r&   Útest_no_modify´   s
   (rr   c            
      C   s  t  t  d¡t  d¡¡\} }|  ¡ } | ¡ }g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}t  t|ƒ¡}d|dd…< t | |||¡}| ¡ }g d¢}g d¢}t  ||¡\}}| ¡ }| ¡ }|||ƒ}t	|g d¢ƒ ||d |d ƒ}t	|g d¢ƒ g d¢}g d¢}|||ƒ}t	|g d¢ƒ ddg}ddg}|||ƒ}t	|d d!gƒ d}	g d"¢} d#d d d d |	dg}g d$¢g d%¢g d&¢g d¢g d'¢g d(¢g d)¢g d*¢g}t | ||¡}| ¡ }g d+¢}d,d-g}t  ||¡\}}|||ƒ}t	|g d.¢g d/¢gƒ d}	d#|	 d d d d dg} g d0¢}g d1¢g d2¢g d3¢g d4¢g d5¢g d6¢g d7¢g d*¢g}t | ||¡}| ¡ }d,d-g}g d+¢}t  ||¡\}}|||ƒ}t	|d#d#gd d8gd d8gd d9gdd9gdd:gd#d#ggƒ g d;¢} g d<¢}g d1¢g d=¢g}t | ||¡}| ¡ }g d>¢}g d?¢}|||ƒ}t	|g d@¢ƒ | 
dd g¡ || ¡ ksºJ ‚|||ƒ}t	|g dA¢ƒ d S )BNr   ©r   r   r   ©r   r   r   ©r   r   r   ©r   r:   r   ©r   r   r:   ©r   r)   r:   ©r   r   rY   ©r   rX   rY   ©r   r:   rX   ©r:   r(   rX   ©r:   r)   r(   ©r)   r2   r(   ©rY   rX   é   ©rX   é   r€   ©rX   r(   r‚   ©r(   é   r‚   ©r(   r2   r…   ©r2   é   r…   r   rY   r(   )ç      Ð?ç      ô?ç      @ç      
@)r   r   r   éÿÿÿÿr:   r   r(   r   r€   r…   é   r   r   r   r   r   rU   )r   r   r   r   r   r   r   r   r   r)   r   r2   r   r‚   rˆ   é   )rU   ç      ø?ç      @rU   r   r‘   r   r   r	   r
   r3   ç      @)r	   r	   r	   r’   r’   r’   r
   r3   r   r   r   r   )r   r   r   r‚   rˆ   r   r   r…   r:   r)   r(   r2   r	   r’   r   r   ©r   r   r   r   r   r   r   r   ©r   r   r   ©r   r   r   ©r   r   r   ©r   r   r   ©r   r   r   ©r   r   r:   ©r   r:   r   )çš™™™™™¹¿çš™™™™™Ù?çÍÌÌÌÌÌì?gffffffö?gffffffþ?g333333@g333333@r›   çš™™™™™¹?)r   r   r   r   r   r   r   )r   r:   r:   r:   r)   r)   r   )r   r   r   r   r   r   r   ©r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r:   r   )r   r:   r   r   r:   r)   ©r   r   r   r   ©r   r   r   r   ©r   r   r   )gš™™™™™É¿çš™™™™™É?r@   g333333ó?)rU   rU   rU   rU   )r   r   r   r   )r   r   r   r   )r   r   r   r   Úzerosr   r   r   Úget_trifinderr   Úset_mask)
r   r   r   Úmaskr$   Ú	trifinderÚxsÚysÚtrisÚdeltar%   r%   r&   Útest_trifinder¾   s   ý


	ÿ

ÿ
ÿ
(ÿ

r­   c                     s–  t  t  d¡t  d¡¡\} }|  ¡ } | ¡ }d|  d|  }g d¢g d¢g d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}t  t|ƒ¡}d|dd…< t | |||¡}t ||¡}t 	||¡}tj	||dd}t  
ddd¡}	g d¢}
t  |	|
¡\}	}
|||fD ]}||	|
ƒ}t|d|	 d|
  ƒ q—g d¢}	|	}
t  |	|
¡\}	}
|||fD ]}||	|
ƒ}t|jd gd gd ƒ q½t  
dd!d¡}	g d"¢}
t  |	|
¡\}	}
|||fD ])}||	|
ƒ}t |d|	 d|
  ¡ |	dk|	d#k |
dk |
d#k }t|j|ƒ qéd$\‰ ‰‰‡ ‡‡fd%d&„}‡ ‡‡fd'd(„}t  g d)¢¡} t  g d*¢¡}t  g d+¢g d,¢g d-¢g d.¢g d/¢g d0¢g d1¢g d2¢g¡}t | ||¡}|| |ƒ}|| |ƒ}t  
d3d4d5¡}	t  
d3d4d5¡}
t  |	|
¡\}	}
tj	||d6|d7}||	|
ƒ}t|||	|
ƒƒ | | |¡\}}|| |ƒ\}}t||ƒ t||ƒ d8}t  t  
d3d4|d ¡t  
d3d4|d ¡¡\} }|  ¡ } | ¡ }|| |ƒ}tj| |t|d ƒd9}t  t  
d:d;d5¡t  
d:d;d5¡¡\}	}
|	 ¡ }	|
 ¡ }
t ||¡}t 	||¡}tj	||dd}||	|
ƒ}t  ||	|
ƒ| ¡}||fD ]-}t  ||	|
ƒ| ¡}t  |¡dt  |¡ ks6J ‚t  ||¡d<t  ||¡ ksGJ ‚qd S )=Nr   ç®Gáz®ó?ç)\Âõ(@rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   rƒ   r„   r†   r‡   r   rY   r(   Úgeom©Úkindr‰   ç      @r:   )r‰   r?   r‹   r³   )g      Ð¿rŠ   ç      ü?rŒ   Tr´   )r‰   r?   rŠ   r´   r   )r®   g)\Âõ(Àç333333ã?c                    s,   ˆ | d d  ˆ|d d   ˆ|  |  S )NrU   r   r%   r8   ©ÚaÚbÚcr%   r&   ÚquadT  s   ,ztest_triinterp.<locals>.quadc                    s0   dˆ  | d  ˆ|  dˆ |d  ˆ|   fS )Nr   rU   r%   r8   r¶   r%   r&   Úgradient_quadW  s   0z%test_triinterp.<locals>.gradient_quad)r£   ç&jjÙZÕ?çœÄ °rhå?r	   r
   r
   r	   )ç333333Ó?çHPüs×é?çX9´Èv¾Û?r	   r	   r
   r
   rŸ   ©r   r   r   ©r   r   r   ©r   r   r   ©r   r   r   ©r:   r   r   ©r:   r   r   ©r:   r   r   r	   r
   r   Úuser©r²   Údzr2   ©r   rž   r   éd   )r   r   r   r   r¤   r   r   r   ÚLinearTriInterpolatorÚCubicTriInterpolatorr   r   r   r§   ÚmatestrP   ÚgradientÚmeshgrid_trianglesÚabsr   Údot)r   r   Úzr   r§   r$   Úlinear_interpÚcubic_min_EÚ
cubic_geomr©   rª   ÚinterpÚzsrº   r»   rÊ   Ú
cubic_userÚ	interp_zsÚinterp_dzsdxÚinterp_dzsdyÚdzsdxÚdzsdyÚnÚdiff_linÚ
diff_cubicr%   r¶   r&   Ú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  g d¢g d	¢g d
¢g d¢g d¢g d¢g d¢g d¢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r d||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ƒ qQd 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u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ÚvaluesÚn_starÚepsilonr]   Úloc_xÚloc_yÚstar_xÚstar_yrÔ   ÚdzxÚdzyÚdiff_zÚtab_dzxÚtab_dzyÚdiff_dzxÚ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Ä   rÅ   rÆ   rÇ   rX   r)   rl   r   r   r   r   rÈ   rÉ   rU   r’   ç      @g      @r;   )r   rP   r   r   Úranger¤   Úfloat64rÎ   )rù   ÚaxÚayÚbxÚbyÚcxÚcyr   r   r   r$   ÚidofrÔ   rò   ró   rë   ÚcaserØ   r%   r%   r&   Ú!test_triinterpcubic_C1_continuity„  sJ   
ÿ

ÿ&..0är  c                  C   sb  dd„ } d\}}t jj| ||ƒŽ }| ¡  | ¡ }t|| ƒD ]*}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 |g d
¢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g d¢tjd}tjg d¢tjd}d}t j ||||¡}| ¡  | ¡ }t
|tjg d¢g d¢g d¢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.
        rl   r   r   r	   r   Nr   )r   Úconcatenater   rn   Úonesrü   )rà   ÚmÚlÚrowsÚcolsÚvalsr%   r%   r&   Úpoisson_sparse_matrixÞ  s&   ""ý""ý((ý"*z<test_triinterpcubic_cg_solver.<locals>.poisson_sparse_matrix)r€   r   rl   r
   rå   )ÚAr¸   Úx0Útol)r€   é1   r   )r
   r
   r
   r
   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   )r
   r3   r	   )r3   r
   ç      @)r	   r  r
   )r   ÚtriinterpolateÚ_Sparse_Matrix_cooÚcompress_cscÚto_denserû   r   r¤   rü   Ú_cgr   rÓ   r  r  rP   rn   )r  rà   r  ÚmatÚ	mat_denseÚitestr¸   r   Ú_Úi_zeroÚj_zeror  r
  r  Údimr%   r%   r&   Útest_triinterpcubic_cg_solverÚ  s^   
ÿÿ
ÿ
ÿ
ÿÿÿr  c                  C   sn  d\} }t  | d|  ddg¡}t  || ddg¡}t jdt jd}g d¢g d¢g}t  dd	g¡}t  dd	t j d
¡D ]z}t  |¡| t  |¡|  }t  |¡ | t  |¡|  }	t 	||	|¡}
tj
|
|dd}tj |¡}| ¡ }t  |d¡d |dd d …f< tdƒD ]}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ƒ q:d S )N)r	   gË¡E¶óýú?rU   r	   r
   r   rl   )r   r   r   r¢   r   r…   r°   r±   r   r   r   rZ   )r   rP   r¤   rü   r   rç   ræ   rè   r   r   rÎ   r  Ú_DOF_estimator_geomÚcompute_geom_weightsrL   rû   r   r   rÒ   )rý   rþ   r   r   rÔ   r   Úsum_wÚthetaÚx_rotÚy_rotr$   r×   Údof_estimatorÚweightsÚitrir%   r%   r&   Ú test_triinterpcubic_geom_weights(  s(   2ÿõr)  c               
   C   sh  d} t  g d¢¡}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	|  }	g d
¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢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 ]}|j|||t jdt jd d\}t||ƒ qq+d S )Nr	   r“   r   r   r   r   éþÿÿÿr®   r¯   r”   r•   r–   ru   r—   r˜   r™   rš   é   ©r§   r°   r±   r   r(   rl   )Ú	tri_index)r   rP   r   r   r   r   r   r   r   r   r   r¥   ÚmarÍ   rÎ   r   r   Ú_interpolate_multikeysr  rn   )r¬   r  Úy0ÚtransformationsÚtransformationr$  r%  r   r   rÔ   r   r$   r©   rª   Úmask_outÚ	zs_targetrÕ   rÖ   r×   rØ   rÙ   r(  Úpt1Úpt2r%   r%   r&   Útest_triinterp_colinearB  sN   (

ÿ
ÿýàr7  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 ]}|| }|dkrü||
|ƒ||< qê|||ƒ}t ||| ¡ qêqd}dD ]X}|dkr#|| }|}||
 }|}n|}|| }|
}|| }t 	|||j¡}t ||	¡}t ||	¡}tj||	dd}|||dœ}dD ]}|| ||ƒ}t ||| ¡ qSqd S )Nr+  r(   ç333333Ã?c                 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 ©
NrU   r£   r   r(   r   g      >@ç      @g      &@r>   ©r   ÚhypotÚarctan2Úexpræ   r   r   ©r   r   Úr1Útheta1Úr2Útheta2rÔ   r%   r%   r&   rÔ   Ž  ó   *&ÿþ"z)test_triinterp_transformations.<locals>.zçffffffî?r   r   F©Úendpoint.r   rZ   ç      ð¿r
   r*   r°   r±   )ÚlinÚmin_Er°   g¬Z¤$.Ar8   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  r0  Útriang0Úz0Úxs0Úys0Ú	interp_z0Úi_angler#  r   r   r©   rª   r$   rÕ   rÖ   r×   Ú
dic_interpÚ
interp_keyrØ   ÚinterpzÚscale_factorÚscaled_axisr%   r%   r&   Útest_triinterp_transformations€  s†   
ÿ$
þ
ÿú	
þþìr_  ztri_smooth_contouring.pngTg;ßO—n²?)Ú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(   r8  c                 S   r9  r:  r<  r@  r%   r%   r&   rÔ   ä  rE  z%test_tri_smooth_contouring.<locals>.zrF  r   r   FrG  .r   rZ   r   ©Úsubdivr	   r
   gš™™™™™™?rU   z0.5)ÚlwÚcolorÚblack)ÚlevelsÚcolors)r   r   rç   rL  rM  ræ   rN  rè   r   r   r¦   r=  r   ra   ÚUniformTriRefinerÚrefine_fieldr   rb   ÚtriplotÚ
tricontour)rO  rP  rQ  rÔ   rR  rS  r  r0  rT  rU  ÚrefinerÚtri_refiÚz_test_refirf  r%   r%   r&   Útest_tri_smooth_contouringÝ  s0   ÿ$
ÿþ
ro  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||||g d¢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   Úr_sqr#  rÔ   r%   r%   r&   Údipole_potential  s   "z2test_tri_smooth_gradient.<locals>.dipole_potentialé   r(   r£   rF  r   r   FrG  .r   rZ   r   ra  Úequalz0.8)rd  r	   r
   g{®Gáz„?Úhot)ÚnameÚlut)r3   r
   r
   r
   )rf  ÚcmapÚ
linewidthsrF   r1   Úbluegyé&1¬|?r’   rú   )ÚunitsÚscaleÚzorderrd  ÚwidthÚ	headwidthÚ
headlength)r   r   rç   rL  rM  ræ   rN  rè   r   r   r¦   r=  r   ra   rh  ri  rÎ   rÐ   r   r   rb   ÚfigureÚgcaÚ
set_aspectrj  r   ÚcmÚget_cmaprk  Úquiver)rq  rO  rP  rQ  rR  rS  r   r   ÚVr$   rl  rm  rn  ÚtciÚExÚEyÚE_normrf  rw  r%   r%   r&   Útest_tri_smooth_gradient  sD   $
ÿþ
ÿ
þr‹  c                  C   s  t  g d¢¡} t  dddt  d¡ ddg¡}t jg d¢g d¢g d	¢gt jd
}t jg d¢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  g d¢¡} t  g d¢¡}t jg d¢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
}	g d¢}
d|	|
< t||	ƒ t jdtd
}d|d< | |¡ | d¡}g d¢}d|	|< t||	ƒ d S )N©r	   r
   rU   r	   r3   r	   rU   r’   rI  r
   rŸ   rV   rW   rl   ©FFTr,  F)Úrescaler3   )r	   r
   r3   )r
   rú   r;  rX   c                 S   s   t  | ¡| t  | ¡ S r;   )r   rÒ   Úsign)r   r·   r%   r%   r&   ÚpowerV  s   ztest_tritools.<locals>.powerr   r‰   rË   r£   é¢   )r   r   r   r   r…   rˆ   rŽ   r   é   é   é"   é#   é~   é   éŽ   é   é   é‘   é’   é“   éž   éŸ   é    é¡   TéP   )é,   é-   é>   é?   éN   éO   r¢  éQ   éR   éS   éb   éc   ét   éu   )r   rP   Úsqrtrn   Úboolr   r   ÚTriAnalyzerr   Úscale_factorsÚcircle_ratiosr.  Úmasked_arrayÚnanr   r   r   rÑ   Úget_flat_tri_maskr¤   r   r¦   )r   r   r   r§   r$   Úanalyserrà   r  Ú	mask_flatÚ
verif_maskÚcorners_indexÚcenter_indexr%   r%   r&   Útest_tritools9  sN   "
ÿ
"þ





r½  c                  C   sh  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  g d¢¡}t  g d¢¡}t ||g d¢g d¢g¡t ||g d¢g d¢g¡g}t  |d |d ¡}g }tdƒD ]8}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   rI  r
   r   rl   T)r   r§   ra  r‘   rY   rZ   r’   ©r	   r
   r	   r
   ©r	   r	   r
   r
   rV   rk   ©r   r   r   r¾   rœ   r   )r   r   r   r   r¤   r±  r   r   rÑ   rh  Úrefine_triangulationr   r   Úin1dÚaroundr   r§   rL   r   r¥   rQ   r=  rû   ri  ÚdstackÚlexsortr   )rà   rb  r   r   r§   r$   rl  Úrefi_triangÚx_refiÚy_refiÚn_refiÚx_verifÚy_verifÚind1dÚ	refi_maskÚrefi_tri_barycenter_xÚrefi_tri_barycenter_yÚ
tri_finderÚrefi_tri_indicesÚrefi_tri_maskrÔ   Úxyz_dataÚiÚrefined_triangÚ	refined_zÚxyzr%   r%   r&   Útest_trirefiner  sn   ÿ
ÿ
ÿÿÿÿÿ

ÿ*rØ  ré   ÚlinearÚcubic)Úidsc                 C   sx   t jd d…d d…f \}}t  | ¡ d¡}t  | ¡ d¡}t  |¡}t ||¡}t |¡}| ||ƒ}|j||dd d S )Nr   )Útriinterpolatorrb  )	r   ÚmgridrL  rN  Ú
zeros_liker   r   rh  ri  )ré   r   r   rÔ   rJ   rl  rØ   r%   r%   r&   Útest_trirefine_maskedª  s   


rß  c                 C   s   g }t | d ƒD ]7}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   rl   )rû   r   rP   rn   )rà   rJ   rÔ  Újr·   r¸   r¹   Údr%   r%   r&   rÑ   ¼  s   ûrÑ   c                  C   sL   t  ¡  ¡ } tjg d¢g d¢g d¢g d¢gd}|  |d¡d us$J dƒ‚d S )Nr¾  r¿  rV   rk   rË   zb-z(triplot should return the artist it adds)rb   r€  Úadd_subplotr   r   rj  )rý   r$   r%   r%   r&   Útest_triplot_returnË  s   þÿrã  c            
      C   s¸   t  g d¢g d¢g¡} t  | ¡rJ ‚t j| ddd}t  |¡s!J ‚t  g d¢¡}t  g d¢¡}t ||| ¡}t |||¡}t |¡}t |¡}|jdd	}|jdd	}	t|j|	jƒ d S )
NrÀ  )r   r   r   TÚF)ro   Úorder)gö(\ÂõØ?gáz®Gáâ?g…ëQ¸…Û?g{®GázÔ?)g…ëQ¸þ@@gáz®GA@g¸…ëQA@g×£p=
A@r   ra  )	r   rP   Ú	isfortranr   r   rh  rÁ  r   r   )
Ú
triangles1Ú
triangles2r   r   Útriang1Útriang2Úrefiner1Úrefiner2Úfine_triang1Ú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$   Úqhull_neighborsÚown_neighborsr%   r%   r&   Útest_qhull_triangle_orientationì  s   
rù  c                  C   sˆ   t  g d¢¡} t  dddt  d¡ ddg¡}t jg d¢g d¢g d	¢gt jd
}t jg d¢td
}tj| |||d}t |¡}| ¡  d S )NrŒ  r	   rU   r’   rI  r
   rŸ   rV   rW   rl   r  r,  )	r   rP   r°  rn   r±  r   r   r²  Ú_get_compressed_triangulation)r   r   r   r§   r$   r¸  r%   r%   r&   Ú#test_trianalyzer_mismatched_indices  s   "
rû  c                  C   sd   g d¢} g d¢}g d¢}t  ¡  t t¡ t  | ||ddg¡ W d   ƒ d S 1 s+w   Y  d S )N)r	   r
   r
   )r	   r	   r
   )r£   rœ   rµ   r
   r	   )rb   r€  r4   r5   r<   Útricontourf)r   r   rÔ   r%   r%   r&   Ú"test_tricontourf_decreasing_levels  s   "ÿrý  c               
   C   s¼  ddl m}  tjtdd tj ¡  W d   ƒ n1 sw   Y  tjtdd tj g dgg gd d d d¡ W d   ƒ n1 sBw   Y  g d¢}g d	¢}tjtd
d tj ||ddggd d d d¡ W d   ƒ n1 spw   Y  g d¢g}tjtdd tj |||ddgd d d¡ W d   ƒ n1 sšw   Y  tjtdd tj |||d dggd d¡ W d   ƒ n1 s¿w   Y  tjtdd tj |||d d dggd¡ W d   ƒ n1 säw   Y  tj |||d d d d¡}tjtdd | g ¡ W d   ƒ n	1 sw   Y  tjtdd | 	ddg¡ W d   ƒ n	1 s,w   Y  tjtdd tj 
¡  W d   ƒ n	1 sIw   Y  tjtdd tj 
|dg¡ W d   ƒ n	1 siw   Y  g d¢}tj 
||¡}tjtdd | dd¡ W d   ƒ n	1 s’w   Y  tjtdd tj ¡  W d   ƒ n	1 s¯w   Y  tj |¡}tjtdd | dgddg¡ W d   ƒ d S 1 s×w   Y  d S )Nr   )Ú_triz.function takes exactly 7 arguments \(0 given\)©Úmatchz,x and y must be 1D arrays of the same lengthr   F)r   r   r   )r   r   r   z.triangles must be a 2D array of shape \(\?,3\)rŸ   zCmask must be a 1D array with the same length as the triangles arrayz,edges must be a 2D array with shape \(\?,2\)zGneighbors must be a 2D array with the same shape as the triangles arrayr   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)Ú
matplotlibrþ  r4   r5   Ú	TypeErrorÚmplr   r<   Úcalculate_plane_coefficientsr¦   ÚTriContourGeneratorÚcreate_filled_contourÚTrapezoidMapTriFinderÚ	find_many)rþ  r   r   r«   r$   rÔ   Útcgr¨   r%   r%   r&   Útest_internal_cpp_api  s¢   þýÿþþ ý
þüÿþþüþüþüþýþüÿþÿþÿ$þr
  c                  C   s\   t  g d¢¡} t  g d¢¡}d}t | |¡}t | | || ¡}t|jƒt|jƒks,J ‚d S )N)r   r   r   r   rU   )r   r   r   r   rU   g    _ B)r   rQ   r   r   r   r   )r   r   Úoffsetr$   Útriang_offsetr%   r%   r&   Útest_qhull_large_offsetm  s   r  c                  C   sF  g d¢} g d¢}t  | |¡}t ¡  tjtdd t |dddtj	g¡ W d   ƒ n1 s/w   Y  tjtdd t |dddtj	 g¡ W d   ƒ n1 sRw   Y  tjtdd t |dddtj
g¡ W d   ƒ n1 stw   Y  tjtdd t |tjjg d	¢g d
¢d¡ W d   ƒ d S 1 sœw   Y  d S )Nr    r¡   zCz array must not contain non-finite values within the triangulationrÿ  r   r   r   z9z must not contain masked points within the triangulation)r   r   r   r   )r   r   r   r   r,  )r   r   rb   r€  r4   r5   r<   rü  r   Úinfr¶  r.  rP   )r   r   r$   r%   r%   r&   Útest_tricontour_non_finite_zx  s    þþþ""þr  )9Únumpyr   Únumpy.testingr   r   r   Únumpy.ma.testutilsr.  Ú	testutilsrÏ   r4   r  r  Úmatplotlib.cmrƒ  Úmatplotlib.pyplotÚpyplotrb   Úmatplotlib.trirJ   r   Úmatplotlib.pathr   Úmatplotlib.testing.decoratorsr   r'   r0   r9   ÚmarkÚparametrizer=   rT   rj   rr   r­   rã   r  r  r)  r7  r_  ro  r‹  r½  rØ  rÍ   rÎ   rß  rÑ   rã  rï  rù  rû  rý  r
  r  r  r%   r%   r%   r&   Ú<module>   sn    *
÷
-

g_VN>]
&
498ÿý


S