U
    ÂmœdG ã                   @   s<  d dl Z d dlZd dlZd dlmZmZmZmZ d dlZ	d dl
mZmZmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZ d dlmZmZ d d	lmZmZ d d
lmZ d dl m!Z! d dl"m#Z$ d dl%Z&e j'eddd�Z(edgd�dd„ ƒZ)e(dgdd�dd„ ƒZ*e(dgdd�dd„ ƒZ+dd„ Z,e(dgƒdd„ ƒZ-e(d gƒd!d"„ ƒZ.d#d$„ Z/e(d%gƒd&d'„ ƒZ0e(d(gƒd)d*„ ƒZ1d+d,„ Z2e(d-gƒd.d/„ ƒZ3e(d0gƒd1d2„ ƒZ4e(d3gƒd4d5„ ƒZ5e(d6gƒd7d8„ ƒZ6ej7 8d9d:d;d<d=ggd>d;d<d=d?ggd@d d;d<d=ggg¡edgd�dAdB„ ƒƒZ9e(dCgdDdE�dFdG„ ƒZ:dHdI„ Z;e(dJgƒdKdL„ ƒZ<edgd�dMdN„ ƒZ=dOdP„ Z>e(dQgƒdRdS„ ƒZ?edgd�dTdU„ ƒZ@e(dVgƒdWdX„ ƒZAe(dYgƒdZd[„ ƒZBe(d\gƒd]d^„ ƒZCedgd�d_d`„ ƒZDedgd�dadb„ ƒZEej7 8dcddg¡edgd�ddde„ ƒƒZFej7 8dfdgdhg¡edgd�didj„ ƒƒZGedgd�dkdl„ ƒZHe(dmgdndE�dodp„ ƒZIe(dqgƒdrds„ ƒZJe(dtgƒdudv„ ƒZKe(dwgƒdxdy„ ƒZLedgd�dzd{„ ƒZMe(d|gƒd}d~„ ƒZNe(dgdd�d€d�„ ƒZOedgd�d‚dƒ„ ƒZPe(d„gd…dE�d†d‡„ ƒZQe(dˆgd‰dE�dŠd‹„ ƒZRe(dŒgƒd�dŽ„ ƒZSe(d�gƒd�d‘„ ƒZTe(d’gƒd“d”„ ƒZUd•d–„ ZVd—d˜„ ZWe(d™dšd›gƒdœd�„ ƒZXedgd�dždŸ„ ƒZYe(d gƒd¡d¢„ ƒZZd£d¤„ Z[edgd�d¥d¦„ ƒZ\d§d¨„ Z]e(d©gƒdªd«„ ƒZ^d¬d­„ Z_e(d®gƒd¯d°„ ƒZ`e(d±gƒd²d³„ ƒZae(d´gƒdµd¶„ ƒZbe(d·gdd�d¸d¹„ ƒZce(dºgdd�d»d¼„ ƒZde(d½gdd�d¾d¿„ ƒZedÀdÁ„ ZfdÂdÃ„ ZgdÄdÅ„ Zh�dtdÇdÈ„Zie(dÉgƒdÊdË„ ƒZje(dÌgƒdÍdÎ„ ƒZkdÏdÐ„ ZldÑdÒ„ Zme(dÓgƒdÔdÕ„ ƒZndÖd×„ ZodØdÙ„ Zpej7 8dÚdÛ¡ej7 8dÜdÝ¡dÞdß„ ƒƒZqdàdá„ Zre(dâgdd�dãdä„ ƒZse(dågdd�dædç„ ƒZte(dègƒdédê„ ƒZuej7 8dëe&jve&jwg¡ej7 8dìdídîdïdðdñdòg¡dódô„ ƒƒZxG dõdö„ döƒZyd÷dø„ Zzedgd�dùdú„ ƒZ{dûdü„ Z|dýdþ„ Z}edgd�dÿ�d „ ƒZ~edgd��d�d„ ƒZe�dg�d�d��d�d„ ƒZ€e(�dgƒ�d	�d
„ ƒZ�e(�dgƒ�d�d„ ƒZ‚e�dg�d�d�d��d�d„ ƒZƒe�dg�d�d��d�d„ ƒZ„�d�d„ Z…�d�d„ Z†�d�d„ Z‡�d�d„ Zˆ�d�d„ Z‰ej7 8�d �d!ejŠd�d"f�d!ejŠ�d#�d$f�d!ejŠ�d%�d&f�d!ej‹d�d'f�d(ejŠd�d)f�d(ejŠ�d#�d*f�d(ejŠ�d%�d+fg¡�d,�d-„ ƒZŒe	j� Žd¡edgd��d.�d/„ ƒƒZ��d0�d1„ Z�e�d2gddg�d3�d4��d5�d6„ ƒZ‘�d7�d8„ Z’�d9�d:„ Z“�d;�d<„ Z”ej7 8�d=e•�d>i �d?fe•�d@i �d?fe•�dAi �d?fe•e–ƒ �d#�dBi�d?fe•e–ƒ �d%�dBi�d?fe•e–ƒ �dC�dBi�d?fe—�dD�d#dÆi�dEfe—�dDdÆdÆdÆdÛœ�dEfe—�dDdÆdÆ�dFœ�dEfe—�dGi �dHff
¡�dI�dJ„ ƒZ˜edgd��dK�dL„ ƒZ™�dM�dN„ Zšedgd��dO�dP„ ƒZ›e�dQgdd�dR��dS�dT„ ƒZœ�dU�dV„ Z��dW�dX„ Zžej7 8�dY�dC�dZ�d[�dZ�d\g�dZ�dZ�d]�d^g�dZ�dZ�dZ�d_g�d`�dZ�dZ�dagg�db�dcg�dd�degf�df�dcg�de�degf�df�dfg�de�dggfgdÆd d gf�d%�d[�dZ�dZ�d\g�dZ�d]�dZ�d^g�dZ�dZ�dZ�d_g�dZ�dZ�d`�dagg�df�dcg�dg�dggf�dc�dcg�de�dggf�dh�dfg�di�dggfgd;d;d gf�d#�dZ�dZ�d[�d\g�d]�dZ�dZ�d^g�dZ�dZ�dZ�d_g�dZ�d`�dZ�dagg�df�dfg�dg�degf�dc�dbg�dg�digf�dc�dfg�dg�dggfgdÆd;dÆgfg¡�dj�dk„ ƒZŸe�dlgdd�dR��dm�dn„ ƒZ e�dogd�d�dR��dp�dq„ ƒZ¡edgd��dr�ds„ ƒZ¢dS (u  é    N)ÚAxes3DÚaxes3dÚproj3dÚart3d)ÚMouseButtonÚ
MouseEventÚNavigationToolbar2)Úcm)ÚcolorsÚpatches)Úimage_comparisonÚcheck_figures_equal)Ú
mock_event)ÚLineCollectionÚPolyCollection)ÚCircleÚ	PathPatch)ÚPath)ÚTextTÚdefault)Úremove_textÚstyleZpng)Ú
extensionsc                 C   s    | j tdd�d�}| d¡ d S )NÚ3d©Ú
projection©Ú
subplot_kwF)ÚsubplotsÚdictZset_visible©Úfig_testÚfig_refÚax© r$   ú_/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/mpl_toolkits/mplot3d/tests/test_axes3d.pyÚtest_invisible_axes   s    r&   zaspects.pngF)r   c            
   
   C   sÞ   d} t jdt| ƒddid�\}}ddg}t dddg¡}t t tt |||¡ƒ¡d¡}|D ]N\}}t 	t 
|| ¡¡|d |d  kr\|D ]}|jt|| || ƒŽ  qŒq\t|ƒD ]$\}	}| d	¡ |j| |	 d
d� q´d S )N©ÚautoÚequalZequalxyZequalyzZequalxzé   r   r   r   r   é   é   ©é   é   r+   Zdatalim©Z
adjustable)Úpltr   ÚlenÚnpÚarrayÚ	itertoolsÚcombinationsÚlistÚproductÚsumÚabsÚplot3DÚzipÚ	enumerateÚset_box_aspectÚ
set_aspect©
ZaspectsÚfigÚaxsÚrÚscaleZptsÚstartÚendr#   Úir$   r$   r%   Útest_aspects!   s     $
rH   zaspects_adjust_box.pngc            
   
   C   sÖ   d} t jdt| ƒddidd�\}}ddg}t dd	d
g¡}t t tt |||¡ƒ¡d¡}|D ]N\}}t 	t 
|| ¡¡|d |d  kr^|D ]}|jt|| || ƒŽ  qŽq^t|ƒD ]\}	}|j| |	 dd� q¶d S )Nr'   r*   r   r   )é   r.   )r   Úfigsizer   r/   r.   r+   r,   Úboxr0   )r1   r   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r?   r@   r$   r$   r%   Útest_aspects_adjust_box3   s    ÿ
 $rL   c                  C   sZ   t  ¡ } | jdd�}| d¡ | d¡ | d¡ | d¡ | d¡ t|ƒdksVt	‚d S )	Nr   r   ÚlabelÚtitleÚxÚyÚzzV<Axes3D: label='label', title={'center': 'title'}, xlabel='x', ylabel='y', zlabel='z'>)
r1   ÚfigureÚadd_subplotZ	set_labelÚ	set_titleÚ
set_xlabelÚ
set_ylabelÚ
set_zlabelÚreprÚAssertionError©rA   r#   r$   r$   r%   Útest_axes3d_reprE   s    




ÿr[   zaxes3d_primary_views.pngc                  C   s˜   ddddddg} t jddd	d
id�\}}t|jƒD ]X\}}| d¡ | d¡ | d¡ | d¡ |j| | d | | d | | d d� q2t  	¡  d S )N)éZ   é¦ÿÿÿr   )r   r]   r   ©r   r   r   )r]   r\   r   )r   r\   r   )r   é´   r   r,   r.   r   r   r   rO   rP   rQ   Úorthor   r*   ©ÚelevÚazimÚroll)
r1   r   r=   ÚflatrU   rV   rW   Úset_proj_typeÚ	view_initÚtight_layout)ÚviewsrA   rB   rG   r#   r$   r$   r%   Útest_axes3d_primary_viewsR   s    û



*rj   z	bar3d.pngc               
   C   s~   t  ¡ } | jdd�}tddddgddd	d
gƒD ]J\}}t d¡}t d¡}|gt|ƒ }d|d
< |j|||dd|dd� q.d S )Nr   r   rC   ÚgÚbrP   é   é   é
   r   ÚcÚedgeçš™™™™™é?)ÚzsÚzdirÚalignÚcolorÚalpha)r1   rR   rS   r<   r3   Úaranger2   Úbar)rA   r#   rp   rQ   ÚxsÚysÚcsr$   r$   r%   Ú
test_bar3dg   s    "

r}   c               
   C   s\   t  ¡ } | jdd�}dD ]>}t t|ƒ¡}t |¡}t |¡}|j|||ddd|d� qd S )Nr   r   )ÚredÚgreenÚblueÚyellowr*   ©rv   )r1   rR   rS   r3   rx   r2   Ú
zeros_likeÚbar3d)rA   r#   rp   rz   r{   rs   r$   r$   r%   Útest_bar3d_colorss   s    

r…   zbar3d_shaded.pngc               
   C   sÖ   t  d¡} t  d¡}t  | |¡\}}| ¡ | ¡  }}|| d }ddddg}tjt dt|ƒ ¡d�}|jdt|ƒt	d	d
�d�}t
||ƒD ]:\}\}	}
}|j|||d dd|dd� |j|	|
|d� qŒ|j ¡  d S )Nr/   r+   r*   )rm   iÄÿÿÿr   )rm   rm   rm   )éâÿÿÿrm   r]   )é,  r†   r   ©rJ   r   r   r   r   T©Úshadera   )r3   rx   ÚmeshgridÚravelr1   rR   Ú	figaspectr2   r   r   r<   r„   rg   ÚcanvasÚdraw)rO   rP   Úx2dÚy2drQ   ri   rA   rB   r#   rb   rc   rd   r$   r$   r%   Útest_bar3d_shaded   s     

 þr’   zbar3d_notshaded.pngc               	   C   s|   t  ¡ } | jdd�}t d¡}t d¡}t ||¡\}}| ¡ | ¡  }}|| }|j|||d dd|dd� | j 	¡  d S )	Nr   r   r/   r+   r   r*   Fr‰   )
r1   rR   rS   r3   rx   r‹   rŒ   r„   rŽ   r�   )rA   r#   rO   rP   r�   r‘   rQ   r$   r$   r%   Útest_bar3d_notshaded“   s    

r“   c            
         s¼   t  ¡ } | jddddd�}tjddd�}d\}}|| ‰ t t |¡t |¡¡\}}| ¡ }| ¡ }|| }‡ fdd	„t	ˆ ƒD ƒ}|j
||ddd||d
|d�	}	tj ||	jdd d… ¡ d S )Nr*   r   r   r   r\   )ZazdegZaltdeg)r.   r/   c                    s   g | ]}t  |ˆ  ¡‘qS r$   )r	   Úcoolwarm)Ú.0rG   ©Zarear$   r%   Ú
<listcomp>®   s     z*test_bar3d_lightsource.<locals>.<listcomp>T)	rO   rP   rQ   ZdxZdyÚdzrv   rŠ   Zlightsourceé   )r1   rR   rS   ÚmcolorsZLightSourcer3   r‹   rx   rŒ   Úranger„   ÚtestingÚassert_array_equalZ_facecolor3d)
rA   r#   ZlsÚlengthÚwidthrO   rP   r˜   rv   Z
collectionr$   r–   r%   Útest_bar3d_lightsource    s&    
    þr    zcontour3d.pngc                  C   s”   t  ¡ } | jdd�}t d¡\}}}|j|||ddtjd� |j|||ddtjd� |j|||d	d
tjd� | dd
¡ | 	dd
¡ | 
dd¡ d S ©Nr   r   çš™™™™™©?rQ   éœÿÿÿ)rt   ÚoffsetÚcmaprO   éØÿÿÿrP   é(   éd   ©r1   rR   rS   r   Úget_test_dataÚcontourr	   r”   Úset_xlimÚset_ylimÚset_zlim©rA   r#   ÚXÚYÚZr$   r$   r%   Útest_contour3d»   s    r³   zcontour3d_extend3d.pngc               	   C   sf   t  ¡ } | jdd�}t d¡\}}}|j|||ddtjdd� | dd	¡ | 	d
d¡ | 
dd¡ d S )Nr   r   r¢   rQ   r£   T)rt   r¤   r¥   Zextend3dr†   rm   éìÿÿÿr§   é°ÿÿÿéP   r©   r¯   r$   r$   r%   Útest_contour3d_extend3dÈ   s    r·   zcontourf3d.pngc                  C   s”   t  ¡ } | jdd�}t d¡\}}}|j|||ddtjd� |j|||ddtjd� |j|||d	d
tjd� | dd
¡ | 	dd
¡ | 
dd¡ d S r¡   )r1   rR   rS   r   rª   Úcontourfr	   r”   r¬   r­   r®   r¯   r$   r$   r%   Útest_contourf3dÓ   s    r¹   zcontourf3d_fill.pngc                  C   s    t  ¡ } | jdd�}t t ddd¡t ddd¡¡\}}| dd¡}d|d d d…d d d…f< |j|||dd	dgtj	d
� | 
dd¡ | dd¡ | dd¡ d S )Nr   r   éþÿÿÿr,   ç      Ð?r   çš™™™™™¹?r+   çš™™™™™¹¿)r¤   Úlevelsr¥   éÿÿÿÿr*   )r1   rR   rS   r3   r‹   rx   Úclipr¸   r	   r”   r¬   r­   r®   r¯   r$   r$   r%   Útest_contourf3d_fillà   s    $rÁ   zextend, levelsÚbothr,   r/   r™   Úminé   Úmaxc                 C   sø   t  t  ddd¡t  ddd¡¡\}}|d |d  }tjd  ¡ }| |dƒ¡ | |dƒ¡ dd|d	œ}|jd
d�}	|	j	|||fddddddgi|—Ž | jd
d�}
|
j	||||fd|i|—Ž |	|
fD ](}| 
dd¡ | dd¡ | dd¡ qÊd S )Nrº   r,   r»   Úviridisr   éÿ   r*   é   )ÚvminÚvmaxr¥   r   r   r¾   r/   r™   rÄ   Úextendéöÿÿÿro   )r3   r‹   rx   ÚmplÚ	colormapsÚcopyZ	set_underZset_overrS   r¸   r¬   r­   r®   )r!   r"   rË   r¾   r°   r±   r²   r¥   ÚkwargsÚax_refÚax_testr#   r$   r$   r%   Útest_contourf3d_extendï   s    $$rÓ   ztricontour.pngç{®Gáz”?)Útolc                  C   sŠ   t  ¡ } tj d¡ tj d¡d }tj d¡d }|d |d   }| jddddd�}| |||¡ | jddddd�}| |||¡ d S )Ni!N,éè  ç      à?r,   r*   r   r   )	r1   rR   r3   ÚrandomÚseedZrandrS   Z
tricontourZtricontourf)rA   rO   rP   rQ   r#   r$   r$   r%   Útest_tricontour  s    rÚ   c                  C   sb   t  ¡ } | jdd�}d\}}t dd|¡}t dd|¡}tj dd||g¡}| |||dg¡ d S )	Nr   r   )rm   rn   rÌ   ro   r   r,   r×   )r1   rR   rS   r3   ÚlinspacerØ   Úrandintr«   )rA   r#   ÚnxÚnyrO   rP   rQ   r$   r$   r%   Útest_contour3d_1d_input  s    rß   zlines3d.pngc                  C   sv   t  ¡ } | jdd�}t dtj dtj d¡}t ddd¡}|d d }|t |¡ }|t |¡ }| |||¡ d S )	Nr   r   éüÿÿÿr/   r¨   rº   r,   r*   )	r1   rR   rS   r3   rÛ   ÚpiÚsinÚcosÚplot)rA   r#   ÚthetarQ   rC   rO   rP   r$   r$   r%   Útest_lines3d%  s    ræ   c                 C   s<   | j dd�}| dgdgd¡ |j dd�}| ddd¡ d S )Nr   r   r*   Úo©rS   rä   ©r!   r"   Úax1Úax2r$   r$   r%   Útest_plot_scalar1  s    rì   c               	   C   s  t jtdd�� t dg g ¡ W 5 Q R X t jtdd�� t g dg ¡ W 5 Q R X t jtdd�� t g g d¡ W 5 Q R X t g g g ¡} t jtdd�� |  dg g ¡ W 5 Q R X t jtdd�� |  g dg ¡ W 5 Q R X t jtdd�� |  g g d¡ W 5 Q R X d S )Nz	x must be©Úmatchr   z	y must bez	z must be)ÚpytestÚraisesÚRuntimeErrorr   ZLine3DÚset_data_3d)Úliner$   r$   r%   Útest_invalid_line_data9  s    rô   zmixedsubplot.pngc            	   	   C   sâ   dd„ } t  ddd¡}t  ddd¡}tjt d¡d�}| d	d
d
¡}|j|| |ƒd|| |ƒddd� | d¡ |jd	d
d	dd�}t  t  ddd¡t  ddd¡¡\}}t  	||¡}t  
|¡}|j|||ddddd� | dd
¡ d S )Nc                 S   s    t  dt j |  ¡t  |  ¡ S )Nr,   )r3   rã   rá   Úexp)Útr$   r$   r%   ÚfL  s    ztest_mixedsubplots.<locals>.fç        ç      @r¼   rÔ   ç       @rˆ   r,   r*   Zbozk--r   )ÚmarkerfacecolorTr   r   éûÿÿÿr+   r»   r§   r   F)ÚrcountÚccountÚ	linewidthÚantialiasedr¿   )r3   rx   r1   rR   r�   rS   rä   Úgridr‹   Úhypotrâ   Úplot_surfaceÚ
set_zlim3d)	r÷   Út1Út2rA   r#   r°   r±   ÚRr²   r$   r$   r%   Útest_mixedsubplotsJ  s      
$
 ÿr  c                 C   sP   | j dd�}|jddddd� |  ¡  |j dd�}| ¡  |jddddd� d S )Nr   r   r×   zsome string©Ús)rS   Útextrh   ré   r$   r$   r%   Útest_tight_layout_textb  s    r  zscatter3d.pngc                  C   s‚   t  ¡ } | jdd�}|jt d¡t d¡t d¡ddd� t dd¡ } }}|j|||dd	d� d
|d< |jg g g ddd� d S )Nr   r   ro   rC   rç   )rp   Úmarkerrn   rl   ú^r   r¿   r°   ©r1   rR   rS   Úscatterr3   rx   ©rA   r#   rO   rP   rQ   r$   r$   r%   Útest_scatter3do  s     ÿr  zscatter3d_color.pngc                  C   s”   t  ¡ } | jdd�}|jt d¡t d¡t d¡dddd� |jt d¡t d¡t d¡dddd� |jt dd¡t dd¡t dd¡d	d
d� d S )Nr   r   ro   rC   Únonerç   )Ú	facecolorÚ	edgecolorr  rn   rl   r
  )rv   r  r  rZ   r$   r$   r%   Útest_scatter3d_color|  s       ÿ  ÿ" ÿr  zscatter3d_linewidth.pngc                  C   sD   t  ¡ } | jdd�}|jt d¡t d¡t d¡dt d¡d� d S )Nr   r   ro   rç   )r  rÿ   r  rZ   r$   r$   r%   Útest_scatter3d_linewidthŒ  s     ÿr  c                 C   s|   |j dd�}|jt d¡t d¡t d¡dd�}| t d¡¡ | j dd�}|jt d¡t d¡t d¡dt d¡d� d S )Nr   r   ro   rç   ©r  )r  Ú
linewidths)rS   r  r3   rx   Úset_linewidths©r"   r!   rÒ   rp   rÑ   r$   r$   r%   Ú%test_scatter3d_linewidth_modification–  s    ÿÿr  c                 C   sÜ   |j dd�}|jt d¡t d¡t d¡dd�}| d¡ | d¡ | dd	gd
 ¡ | ¡ sbt‚| 	d¡ | ¡ rxt‚| 
t dd¡¡ | d¡ | j dd�}|jt d¡t d¡t d¡ddddd	gd
 dddd�
 d S )Nr   r   ro   rç   r  ÚC1ÚC2ç333333Ó?çffffffæ?r+   FéK   r.   )r  r  r  rw   Ú
depthshader
  r  )rS   r  r3   rx   Úset_facecolorÚset_edgecolorÚ	set_alphaÚget_depthshaderY   Úset_depthshadeZ	set_sizesÚfullr  r  r$   r$   r%   Útest_scatter3d_modification¤  s*    ÿ



  
  þr)  r"  c                 C   s2  t jdd…dd…f \}}t  |j¡ |j¡}t  |jd¡}d|ddd…ddd…f< d|ddd…ddd…f< t  |jd¡}d	|dd
…dd
…f< d|dd…dd…f< d|dd…dd…f< t  |jd¡}d|dd
…dd
…f< d|d
d…dd
…f< d|d
d…d
d…f< t  |jd¡}	d
|	ddd…ddd…f< d
|	ddd…ddd…f< dd„ |||||||	fD ƒ\}}}}}}}	| jdd�}
dd„ ||||	fD ƒ}tj	|Ž D ]p\}}}}||k||kB ||kB |	|kB }t j
j||td�}t  |t|j ƒ¡}|
j|||||||d|d�	 �q”|jdd�}|j|||||||	d|d�	 dS )z1Test that marker properties are correctly sorted.Nro   é   r¨   r   r,   r*   ÚC0r  r+   r  r™   r/   ZC3ZC4ZC5ZC6é	   ZC7c                 S   s   g | ]}|  ¡ ‘qS r$   )Úflatten©r•   Úar$   r$   r%   r—   Ó  s   ÿz*test_scatter3d_sorting.<locals>.<listcomp>r   r   c                 s   s   | ]}t  |¡V  qd S )N)r3   Úuniquer.  r$   r$   r%   Ú	<genexpr>Ù  s     z)test_scatter3d_sorting.<locals>.<genexpr>©Zdtype)r
  ÚfcÚecÚlwrw   r"  )r3   Úmgridrx   ÚsizeÚreshapeÚshaper(  rS   r5   r8   ÚmaZmasked_arrayÚfloatÚrepeatr9   Úmaskr  )r"   r!   r"  rP   rO   rQ   ÚsizesÚ
facecolorsÚ
edgecolorsr  rÑ   Zsetsr
  r3  r4  r5  ZsubsetrÒ   r$   r$   r%   Útest_scatter3d_sorting¹  sR    þÿþýÿÿ
  ÿrA  rc   éÎÿÿÿé‚   c              	   C   s¬   ddg}ddg}ddg}ddg}| j dd�}|j|||d|d	� |jd|dd
� |j dd�}|j|ddd… |ddd… |ddd… d|ddd… d	� |jd|dd
� dS )zÕ
    Test that the draw order does not depend on the data point order.

    For the given viewing angle at azim=-50, the yellow marker should be in
    front. For azim=130, the blue marker should be in front.
    r¿   r*   r   rl   rP   r   r   é¬  ©r
  rp   ra   N)rS   r  rg   ©r!   r"   rc   rO   rP   rQ   rv   r#   r$   r$   r%   Ú$test_marker_draw_order_data_reversedñ  s    	<rG  c              	   C   s¦   d}ddg}ddg}ddg}ddg}| j dd�}| ¡  |j|||d	|d
� |jd|dd� |j dd�}| ¡  |j|||d	|ddd… d
� |jd|d dd� dS )z­
    Test that the draw order changes with the direction.

    If we rotate *azim* by 180 degrees and exchange the colors, the plot
    plot should look the same again.
    rC  r¿   r*   r   rl   rP   r   r   rD  rE  ra   Nr_   )rS   Úset_axis_offr  rg   rF  r$   r$   r%   Ú#test_marker_draw_order_view_rotated  s    rI  zplot_3d_from_2d.pngg¸…ëQ¸Ž?c                  C   sT   t  ¡ } | jdd�}t dd¡}t dd¡}|j||ddd� |j||ddd� d S )	Nr   r   r   r+   ro   rO   ©rs   rt   rP   )r1   rR   rS   r3   rx   rä   )rA   r#   rz   r{   r$   r$   r%   Útest_plot_3d_from_2d  s    rK  zsurface3d.pngc               
   C   sœ   dt jd< t  ¡ } | jdd�}t ddd¡}t ddd¡}t ||¡\}}t ||¡}t |¡}|j	|||ddt
jd	dd
�}| dd¡ | j|ddd� d S )NFzpcolormesh.snapr   r   rü   r+   r»   r§   r   )rý   rþ   r¥   r5  r   ç)\�Âõ(ð¿ç)\�Âõ(ð?r×   )ÚshrinkÚaspect)r1   ÚrcParamsrR   rS   r3   rx   r‹   r  râ   r  r	   r”   r®   Úcolorbar)rA   r#   r°   r±   r  r²   Zsurfr$   r$   r%   Útest_surface3d(  s    

 ÿrR  zsurface3d_shaded.pngc               
   C   s�   t  ¡ } | jdd�}t ddd¡}t ddd¡}t ||¡\}}t |d |d  ¡}t |¡}|j|||dddddgddd	� | 	d
d¡ d S )Nr   r   rü   r+   r»   r,   r*   F)ÚrstrideÚcstriderv   r5  r   rL  rM  )
r1   rR   rS   r3   rx   r‹   Úsqrtrâ   r  r®   )rA   r#   r°   r±   r  r²   r$   r$   r%   Útest_surface3d_shaded:  s    
  ÿrV  zsurface3d_masked.pngc                  C   sv  t  ¡ } | jdd�}ddddddd	d
dddg}ddddddd	d
g}t ||¡\}}t dddddddddddgdddddddddddgdddddd
dddddgddd	d
dddd
d	ddgddd
ddddddd	dgdddddddddddgdddddddddddgdddddddddddgg¡}tj |d¡}tj	| 
¡ | ¡ d�}tjd ||ƒƒ}|j||||d� | ddd¡ d S )Nr   r   r*   r,   r.   r/   r+   r™   rÈ   rÄ   r,  ro   rI   r¿   r   g      ð¿é   é   rn   é   é   é   é   é   r*  )rÊ   rÉ   Zplasma©r?  rm   rµ   )r1   rR   rS   r3   r‹   r4   r:  Úmasked_lessrš   Ú	NormalizerÅ   rÃ   rÍ   rÎ   r  rg   )rA   r#   rO   rP   ÚmatrixrQ   Únormr
   r$   r$   r%   Útest_surface3d_maskedH  s*    øÿrc  c                 C   s`   t  t  d¡t  d¡¡\}}|| }| jdd�}|j|||d d� |jdd�}| |||¡ d S )Nr+   r   r   r^  )r3   r‹   rx   rS   r  )r!   r"   rO   rP   rQ   rÒ   rÑ   r$   r$   r%   Útest_plot_surface_None_argc  s    rd  zsurface3d_masked_strides.pngc                  C   sj   t  ¡ } | jdd�}tjddd…ddd…f \}}tj || d¡}|j|||ddd� | d	d
d¡ d S )Nr   r   iúÿÿÿgffffff@r*   r,   r/   ©rS  rT  é<   éÓÿÿÿr   )	r1   rR   rS   r3   r6  r:  r_  r  rg   r  r$   r$   r%   Útest_surface3d_masked_stridesm  s    rh  z
text3d.pngc                  C   sÐ   t  ¡ } | jdd�}d}d}d}d}t||||ƒD ].\}}}}	d|||	|f }
| |||	|
|¡ q2|jdddd	d	d
� |jddd|jd� | dd¡ | dd¡ | 	dd¡ | 
d¡ | d¡ | d¡ d S )Nr   r   ©NrO   rP   rQ   )r*   r*   r   ©r*   r*   r*   ©r,   r™   r/   r,  rÈ   r,   ©r™   r/   rÄ   rÈ   r,   r,   ©r/   r,   r+   r™   r*   rÈ   z(%d, %d, %d), dir=%sr*   r~   r‚   r¢   gffffffî?z2D Text)Ú	transformr   ro   zX axiszY axiszZ axis)r1   rR   rS   r<   r  Ztext2DZ	transAxesÚ
set_xlim3dÚ
set_ylim3dr  rU   rV   rW   )rA   r#   Úzdirsrz   r{   rs   rt   rO   rP   rQ   rM   r$   r$   r%   Útest_text3dy  s"    

rr  c                 C   s  d}d}d}d}|j dd�}| dd¡ | dd¡ | dd¡ t||||ƒD ]H\}}}	}
| dddd	|› d
|	› d
|
› d|› �¡}|j||	|
f|d� qN| j dd�}| dd¡ | dd¡ | dd¡ t||||ƒD ]8\}}}	}
|j||	|
d	|› d
|	› d
|
› d|› �|d� qÖd S )Nri  rk  rl  rm  r   r   r   ro   ú(z, z), dir=)rt   )rS   ro  rp  r  r<   r  Zset_position_3d)r"   r!   rq  rz   r{   rs   rÒ   rt   rO   rP   rQ   rö   rÑ   r$   r$   r%   Útest_text3d_modification‘  s"    (rt  ztrisurf3d.pngg¬Zd;¯?c            	      C   sÞ   d} d}t  d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  d|t  |¡  ¡ ¡}t  d|t  |¡  ¡ ¡}t  | | ¡}t	 
¡ }|jdd�}|j|||tjdd� d S )Né$   rÄ   ç      À?ç      ð?r   r,   F©Zendpoint.r*   ©Úaxisr   r   çš™™™™™É?)r¥   rÿ   )r3   rÛ   rá   r<  ÚnewaxisÚappendrã   r-  râ   r1   rR   rS   Úplot_trisurfr	   Zjet©	Zn_anglesZn_radiiZradiiZanglesrO   rP   rQ   rA   r#   r$   r$   r%   Útest_trisurf3dª  s    $r€  ztrisurf3d_shaded.pngç¸…ëQ¸ž?c            	      C   sâ   d} d}t  d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  d|t  |¡  ¡ ¡}t  d|t  |¡  ¡ ¡}t  | | ¡}t	 
¡ }|jdd�}|j|||d
ddgdd� d S )Nru  rÄ   rv  rw  r   r,   Frx  .r*   ry  r   r   r×   r{  )rv   rÿ   )r3   rÛ   rá   r<  r|  r}  rã   r-  râ   r1   rR   rS   r~  r  r$   r$   r%   Útest_trisurf3d_shaded¼  s    $r‚  zwireframe3d.pngc                  C   s<   t  ¡ } | jdd�}t d¡\}}}|j|||ddd� d S )Nr   r   r¢   é   ©rý   rþ   ©r1   rR   rS   r   rª   Úplot_wireframer¯   r$   r$   r%   Útest_wireframe3dÎ  s    r‡  zwireframe3dzerocstride.pngc                  C   s<   t  ¡ } | jdd�}t d¡\}}}|j|||ddd� d S )Nr   r   r¢   rƒ  r   r„  r…  r¯   r$   r$   r%   Útest_wireframe3dzerocstrideÖ  s    rˆ  zwireframe3dzerorstride.pngc                  C   s<   t  ¡ } | jdd�}t d¡\}}}|j|||ddd� d S )Nr   r   r¢   r   ro   re  r…  r¯   r$   r$   r%   Útest_wireframe3dzerorstrideÞ  s    r‰  c               	   C   sR   t  ¡ } | jdd�}t d¡\}}}t t¡� |j|||ddd� W 5 Q R X d S )Nr   r   r¢   r   re  )	r1   rR   rS   r   rª   rï   rð   Ú
ValueErrorr†  r¯   r$   r$   r%   Ú test_wireframe3dzerostrideraisesæ  s
    r‹  c               	   C   s|   t  ¡ } | jdd�}t d¡\}}}t t¡� |j|||ddd� W 5 Q R X t t¡� |j	|||ddd� W 5 Q R X d S )Nr   r   r¢   ro   é2   )rS  rþ   )rT  rý   )
r1   rR   rS   r   rª   rï   rð   rŠ  r†  r  r¯   r$   r$   r%   Útest_mixedsamplesraisesî  s    r�  zquiver3d.pngzquiver3d_pivot_middle.pngzquiver3d_pivot_tail.pngc                  C   sø   t jddd…ddd…ddd…f \} }}t  t j|  ¡t  t j| ¡ t  t j| ¡ }t  t j|  ¡ t  t j| ¡ t  t j| ¡ }dt  t j|  ¡ t  t j| ¡ t  t j| ¡ }dD ]0}t ¡ jdd	�}|j| |||||d
|dd�	 qÂd S )Nr¿   rr   ù              $@ç333333ã?ù              @ç>,p½ ê?)ÚtipÚmiddleÚtailr   r   r¼   T©rž   ÚpivotÚ	normalize)	r3   Úogridrâ   rá   rã   r1   rR   rS   Úquiver)rO   rP   rQ   ÚuÚvÚwr–  r#   r$   r$   r%   Útest_quiver3dø  s    (024r�  c           	      C   sP   |j dd� g  } } } } }}| j dd�}|j||||||dddd�	 d S )Nr   r   r¼   r’  Tr•  )rS   r™  )	r!   r"   rO   rP   rQ   rš  r›  rœ  r#   r$   r$   r%   Útest_quiver3d_empty  s    rž  zquiver3d_masked.pngc                  C   s.  t  ¡ } | jdd�}tjddd…ddd…ddd…f \}}}t tj| ¡t tj| ¡ t tj| ¡ }t tj| ¡ t tj| ¡ t tj| ¡ }dt tj| ¡ t tj| ¡ t tj| ¡ }tjj	d	|k |d
k @ |dd�}tjj	d
|k |dk @ |dd�}|j
||||||d
ddd�	 d S )Nr   r   r¿   rr   rŽ  r�  r�  r‘  çš™™™™™Ù¿r¼   F)rÏ   r   r’  Tr•  )r1   rR   rS   r3   r6  râ   rá   rã   r:  Zmasked_wherer™  )rA   r#   rO   rP   rQ   rš  r›  rœ  r$   r$   r%   Útest_quiver3d_masked  s    (024r   c                  C   sp   t  ¡ } | jdd�}tdƒ}| |¡ t |¡ | d¡ t 	| 
¡ d¡sNt‚| j ¡  t 	| 
¡ d¡slt‚d S )Nr   r   ©r   r   )rw  rø   rø   r*   )r*   r   r   r*   )r1   rR   rS   r   Ú	add_patchr   Zpatch_2d_to_3dr#  rš   Z
same_colorÚget_facecolorrY   rŽ   r�   )rA   r#   Úcircler$   r$   r%   Útest_patch_modification  s    



r¥  c                 C   s   t ddƒ}t ddƒ}t ddddgddddgg¡}tj||gdd	�}| jd
d�}| |¡ | d¡ | |¡ | 	d¡ | 
¡ s„t‚| d¡ | 
¡ ršt‚t ddƒ}t ddƒ}t ddddgddddgg¡}tj||gdd|ddd�}|jd
d�}| |¡ d S )Nr¡  r¢   )r¼   r¼   r�  rø   r×   rw  r.   )r  r   r   r  r   F)r  r  r  rw   r"  )r   r3   r4   r   ZPatch3DCollectionrS   Úadd_collection3dr$  r#  r%  r&  rY   r'  )r!   r"   Zpatch1Zpatch2r?  rp   rÒ   rÑ   r$   r$   r%   Ú"test_patch_collection_modification+  s.    








  þr§  c               	   C   s~   dddgdddgdddgdddgg} t jtdd�� t | ¡ W 5 Q R X tj| td�} t jtdd�� t | ¡ W 5 Q R X d S )Nr   r*   zlist of \(N, 3\) array-likerí   r2  )rï   rð   rŠ  r   ÚPoly3DCollectionr3   r4   r;  )Úpolyr$   r$   r%   Ú&test_poly3dcollection_verts_validationG  s    $rª  zpoly3dcollection_closed.pngc                  C   s    t  ¡ } | jdd�}t dddgdddgdddggt¡}t dddgdddgdddggt¡}tj|gddddd	�}tj|gddd
dd	�}| |¡ | |¡ d S )Nr   r   r   r*   r.   Úk)r×   r×   r*   r×   T©r  r  r  Úclosed)r*   r×   r×   r×   F)	r1   rR   rS   r3   r4   r;  r   r¨  r¦  ©rA   r#   Zpoly1Zpoly2Úc1Úc2r$   r$   r%   Útest_poly3dcollection_closedQ  s    $$ ÿ ÿ
r±  c                  C   sv   t g ƒ} t | ¡ t| tjƒs"t‚|  ¡ g ks2t‚tjt	dd�d�\}}| 
| ¡ |  ¡ }t |¡sht‚|j ¡  d S )Nr   r   r   )r   r   Zpoly_collection_2d_to_3dÚ
isinstancer¨  rY   Ú	get_pathsr1   r   r   Ú
add_artistZdo_3d_projectionr3   ÚisnanrŽ   r�   )r©  rA   r#   Zminzr$   r$   r%   Ú#test_poly_collection_2d_to_3d_empty`  s    

r¶  zpoly3dcollection_alpha.pngc                  C   sÄ   t  ¡ } | jdd�}t dddgdddgdddggt¡}t dddgdddgdddggt¡}tj|gddddd	�}| d
¡ tj|gddd�}| 	d¡ | 
d¡ | d
¡ | |¡ | |¡ d S )Nr   r   r   r*   r.   r«  ©r×   r×   r*   Tr¬  r×   F)r  r­  )r*   r×   r×   )r1   rR   rS   r3   r4   r;  r   r¨  r%  r#  r$  r¦  r®  r$   r$   r%   Útest_poly3dcollection_alphao  s    $$ ÿ




r¸  zadd_collection3d_zs_array.pngc                  C   sD  t  dt j dt j d¡} t  ddd¡}|d d }|t  | ¡ }|t  | ¡ }t  |||g¡ ddd¡}t j|d d… |dd … gdd	�}t 	¡ }|j
d
d�}t ddt j ¡}	t|d d …d d …d d…f d|	d�}
|
 t  | dt j ¡¡ |j|
|d d …d d …df d�}|d k	�st‚| dd¡ | dd¡ | dd¡ d S )Nrà   r/   r¨   rº   r,   r*   r¿   r.   ry  r   r   r   Útwilight©r¥   rb  ©rs   rü   r+   r™   )r3   rÛ   rá   râ   rã   Úcolumn_stackr8  Úconcatenater1   rR   rS   r`  r   Ú	set_arrayÚmodr¦  rY   r¬   r­   r®   ©rå   rQ   rC   rO   rP   ZpointsÚsegmentsrA   r#   rb  Úlcró   r$   r$   r%   Útest_add_collection3d_zs_array‚  s"    "$ rÃ  zadd_collection3d_zs_scalar.pngc                  C   sú   t  ddt j d¡} d}|d d }|t  | ¡ }|t  | ¡ }t  ||g¡ ddd¡}t j|d d… |dd … gdd�}t 	¡ }|j
dd�}t ddt j ¡}	t|d	|	d
�}
|
 | ¡ |j|
|d�}|d k	sÒt‚| dd¡ | dd¡ | dd¡ d S )Nr   r,   r¨   r*   r¿   ry  r   r   r¹  rº  r»  rü   r+   rà   r™   )r3   rÛ   rá   râ   rã   r¼  r8  r½  r1   rR   rS   r`  r   r¾  r¦  rY   r¬   r­   r®   rÀ  r$   r$   r%   Útest_add_collection3d_zs_scalarž  s"    "
rÄ  zaxes3d_labelpad.pngc                  C   sÄ   t  ¡ } |  t| ƒ¡}|jjtjd ks,t‚|j	ddd� |jjdksJt‚| 
d¡ |jddd� |jjdksrt‚| ¡ dks‚t‚d|j_d|j_t|j ¡ ƒD ]\}}| | ¡ |d	  ¡ q d S )
Nzaxes.labelpadzX LABELro   )ÚlabelpadzY LABELzZ LABELrn   r¦   r+   )r1   rR   Zadd_axesr   ÚxaxisrÅ  rÍ   rP  rY   rU   rV   rW   ÚzaxisZ
get_zlabelÚyaxisr=   Úget_major_ticksZset_padZget_pad)rA   r#   rG   Útickr$   r$   r%   Útest_axes3d_labelpad¸  s    
rË  zaxes3d_cla.pngc                  C   s.   t  ¡ } | jddddd�}| ¡  | ¡  d S )Nr*   r   r   )r1   rR   rS   rH  ÚclarZ   r$   r$   r%   Útest_axes3d_claÎ  s    rÍ  zaxes3d_rotated.pngc                  C   s,   t  ¡ } | jddddd�}| ddd¡ d S )Nr*   r   r   r\   é-   r   )r1   rR   rS   rg   rZ   r$   r$   r%   Útest_axes3d_rotated×  s    rÏ  c               	   C   s‚   t jdddd�} t jdddd�}t  | |¡\}}t j d¡}tjdd�}|jdddd	d
�}t 	t
¡� | |||¡ W 5 Q R X d S )Nr×   ro   r¨   )Únum)é   r™   rˆ   r*   r,   r   r   )r3   rÛ   r‹   rØ   Úrandnr1   rR   rS   rï   rð   rŠ  r  )rO   rP   r°   r±   rQ   rA   r#   r$   r$   r%   Útest_plotsurface_1d_raisesÞ  s    rÓ  c            
      C   sx   t  dddg¡} t  dddg¡}t  dddg¡}d}t | |||¡\}}}t |||| ¡}t ddd¡}t  ||¡}	|	S )NrÖ   iüÿÿiÐ  r¨   r   r*   r£   )r3   r4   r   Ú
_view_axesÚ_view_transformation_uvwZpersp_transformationÚdot)
ÚEr  ÚVrd   rš  r›  rœ  ÚviewMZperspMÚMr$   r$   r%   Ú_test_proj_make_Mê  s    rÛ  c            
      C   sÆ   t ƒ } t ddddddddddg
¡d }t ddddddddddg
¡d }t ddddddddddg
¡d }t |||| ¡\}}}t |||| ¡\}}}	tj ||¡ tj ||¡ tj |	|¡ d S )Nr   r*   ç     Àr@)rÛ  r3   r4   r   Úproj_transformZinv_transformrœ   Zassert_almost_equal)
rÚ  rz   r{   rs   ÚtxsÚtysÚtzsZixsZiysZizsr$   r$   r%   Útest_proj_transform÷  s    """rá  r*   c                 O   sº   d|ddg}dd|dg}ddd|g}t  |||| ¡\}}}	t||ƒ\}
}}}|
|f|
|f|
|fg}tj||Ž\}}t|ƒ}| |¡ t||ddddgƒD ]\}}}| |||¡ q˜||fS )Nr   rç   rO   rP   rQ   )r   rÝ  r<   r1   r   r   Zadd_collectionr  )rÚ  r
  ÚargsrÐ   rz   r{   rs   rÞ  rß  rà  rç   r#   ZayÚazÚlinesrA   ZlinecrO   rP   rö   r$   r$   r%   Ú_test_proj_draw_axes  s    
rå  zproj3d_axes_cube.pngc                  C   sü   t ƒ } d ¡ }t ddddddddddg
¡d }t ddddddddddg
¡d }t ddddddddddg
¡d }t |||| ¡\}}}t| dd�\}}	|	j|||d� |	j||dd� t	|||ƒD ]\}
}}|	 
|
||¡ qÆ|	 d	d
¡ |	 d	d
¡ d S )Nú0 1 2 3 0 4 5 6 7 4r   r*   rÜ  i�  r	  ©rp   rC   çš™™™™™É¿r{  )rÛ  Úsplitr3   r4   r   rÝ  rå  r  rä   r<   r  r¬   r­   )rÚ  Útsrz   r{   rs   rÞ  rß  rà  rA   r#   rO   rP   rö   r$   r$   r%   Útest_proj_axes_cube  s    """rë  zproj3d_axes_cube_ortho.pngc                  C   sn  t  dddg¡} t  dddg¡}t  dddg¡}d}t | |||¡\}}}t |||| ¡}t dd¡}t  ||¡}	d ¡ }
t  ddddddddddg
¡d }t  ddddddddddg
¡d }t  ddddddddddg
¡d }t ||||	¡\}}}t	|	dd�\}}|j
||d	| d� |j||d
d� t|||
ƒD ]\}}}| |||¡ �q6| dd¡ | dd¡ d S )NéÈ   r¨   r   r*   r¿   ræ  é–   r	  r‡   rC   rç  i8ÿÿÿ)r3   r4   r   rÔ  rÕ  Zortho_transformationrÖ  ré  rÝ  rå  r  rä   r<   r  r¬   r­   )r×  r  rØ  rd   rš  r›  rœ  rÙ  ZorthoMrÚ  rê  rz   r{   rs   rÞ  rß  rà  rA   r#   rO   rP   rö   r$   r$   r%   Útest_proj_axes_cube_ortho-  s(    """rî  c                  C   sv   ddddg} t  | tjd ¡}tj |ddddg¡ ddddg} t  | tjd ¡}tj |dt d¡d ddg¡ d S )Nr*   r   r™   r.   r,   r×   )r   Zrot_xr3   rá   rœ   Úassert_allcloserU  )rØ  Z	rotated_Vr$   r$   r%   Útest_rotJ  s    rð  c               
   C   sf   d\} }d\}}d\}}t  | |||||¡}tj |ddddgddddgddd	d
gddddgg¡ d S )N)r¨   éx   )r£   r¨   )r¼   r{  r¢   r   rü   g{®Gázt?r×   g      $@r¿   r*   )r   Zworld_transformationr3   rœ   rï  )ZxminZxmaxZyminZymaxÚzminÚzmaxrÚ  r$   r$   r%   Ú
test_worldT  s    



ýÿrô  zproj3d_lines_dists.pngc                  C   sâ   t jdtdd�d�\} }d}d}| ||¡ t||ƒ\}}d}d}| ||¡ t |d	 |d	 f||¡}t t 	||f¡j
||¡}||d	 ks’t‚t|||ƒD ]&\}}	}
t||	f|
d	d
�}| |¡ qž| dd¡ | d	d¡ d S )N)r/   r™   r)   )rO  )rJ   r   )r   rm   )rn   rí  )r   r   rn   rm   )r¨   rí  rm   rì  r   )ÚfillrB  rí  r‡   )r1   r   r   rä   r<   r  r   Ú_line2d_seg_distr3   r4   ÚTrY   r   r¢  r¬   r­   )rA   r#   rz   r{   Úp0Úp1Zdist0ÚdistrO   rP   Údrp   r$   r$   r%   Útest_lines_dists`  s     rü  c                  C   s.   d} d}t  || | ¡ t  t |¡| | ¡ d S )N)ro   rm   rŒ  )rn   rí  r_   )r   rö  r3   r4   )Ús0Úpr$   r$   r%   Útest_lines_dists_nowarningy  s    rÿ  c                  C   sÖ   t jddid�\} }| ¡ dks$t‚|jdddd� | dd	gdd	gdd	g¡ | ¡ d
ks^t‚| d¡ | d¡ | ddgddgddg¡ | ¡ dksœt‚|jdd� | ddgddgddg¡ | ¡ dksÒt‚d S )Nr   r   r   Zlinearr   r¼   r{  ©rO   rP   rQ   r*   )r   r*   r½   çš™™™™™ñ?rè  g333333ó?FTr,   )r   r*   r½   r  rŸ  ç333333@rO   ry  )r   r,   r½   r  rŸ  r  )	r1   r   Z
get_zscalerY   Úmarginsrä   Z
get_w_limsZ	autoscaleZset_autoscalez_onrZ   r$   r$   r%   Útest_autoscale�  s    

r  rz  r   r(   )TFNc           
      C   s¸   t  ¡ }|jdd�}t d¡}t ddd¡}| ||¡ t|d| › d�ƒ}t|d| › d	�ƒ}t|d
| › d	�ƒ}|d kr||ƒ n|}	|d|d� |	|ƒ ksšt‚|j	 
¡  tj |ƒ d¡ d S )Nr   r   r¨   r½   r¼   Zget_autoscaleZ_onÚset_ZlimÚget_)ç      à¿r×   )r(   )r1   rR   rS   r3   rx   rÛ   r  ÚgetattrrY   rŽ   r�   rœ   r�   )
rz  r(   rA   r#   rO   rP   Zget_autoscale_onZset_limZget_limZ	post_autor$   r$   r%   Útest_unautoscale�  s    

r	  c               	   C   s`   t  ¡ } | jdd�}t t¡� |jddd� W 5 Q R X t t¡� |jddd� W 5 Q R X d S )Nr   r   Úperspr   ©Zfocal_lengthr`   r*   )r1   rR   rS   rï   rð   rŠ  rf   rZ   r$   r$   r%   Útest_axes3d_focal_length_checks¦  s    r  zaxes3d_focal_length.pngc                  C   sB   t jddddid�\} }|d jdtjd� |d jdd	d� d S )
Nr*   r,   r   r   r   r   r
  r  ç333333Ã?)r1   r   rf   r3   Úinf)rA   rB   r$   r$   r%   Útest_axes3d_focal_length¯  s    r  zaxes3d_ortho.pngc                  C   s"   t  ¡ } | jdd�}| d¡ d S )Nr   r   r`   )r1   rR   rS   rf   rZ   r$   r$   r%   Útest_axes3d_ortho¶  s    r  zaxes3d_isometric.pngc               	   C   s¾   ddl m} m} tjtdddd�d�\}}d}| t t||||ƒƒ¡d	ƒD ]>\}}t	|| ƒ 
¡ |d
 |d  krJ|jt||ƒddiŽ qJ|jt t dt d	¡ ¡¡ddd� | d¡ d S )Nr   )r6   r8   r   r`   )r/   r/   r/   )r   Z	proj_typeZ
box_aspectr   )r¿   r*   r,   r*   rp   r«  rw  rg  ra   T)r5   r6   r8   r1   r   r   r3   r4   r7   r:   r9   r;   r<   rg   ÚdegreesZarctanrU  r  )r6   r8   rA   r#   rC   r
  Úer$   r$   r%   Útest_axes3d_isometric½  s    ý$ &r  Úvalue)ÚsetterÚside)ro  Úleft)ro  Úright)rp  Úbottom)rp  Útop)r  r  )r  r  c              	   C   sF   ||i}t  ¡ }|jdd�}t t¡� t|| ƒf |Ž W 5 Q R X d S )Nr   r   )r1   rR   rS   rï   rð   rŠ  r  )r  r  r  ÚlimitrA   Úobjr$   r$   r%   Útest_invalid_axes_limitsÍ  s
    
r  c                   @   s†   e Zd Zedgƒdd„ ƒZedgƒdd„ ƒZedgƒdd	„ ƒZed
gƒdd„ ƒZedgƒdd„ ƒZedgddd�dd„ ƒZ	dd„ Z
dS )Ú
TestVoxelszvoxels-simple.pngc                 C   sB   t jddid�\}}t d¡\}}}||k||kB }| |¡ d S )Nr   r   r   )r+   r/   r.   )r1   r   r3   ÚindicesÚvoxels)ÚselfrA   r#   rO   rP   rQ   r   r$   r$   r%   Útest_simpleß  s    zTestVoxels.test_simplezvoxels-edge-style.pngc                 C   sv   t jddid�\}}t d¡\}}}|d d |d d  |d d  dk }|j|dd	d
�}|t| ¡ ƒ  d¡ d S )Nr   r   r   )r+   r+   r/   r,   g      ø?g]�Âõ(\@r.   r  )r  r  r  )r1   r   r3   r  r   rÅ   Úkeysr$  )r!  rA   r#   rO   rP   rQ   r   r›  r$   r$   r%   Útest_edge_styleç  s
    (zTestVoxels.test_edge_stylezvoxels-named-colors.pngc                 C   s’   t jddid�\}}t d¡\}}}||k||kB }||| | dk  @ }tjddtjd�}d||d	k |d	k @ < d
||| dk < |j||d� dS )z5Test with colors set to a 3D object array of strings.r   r   r   ©ro   ro   ro   r*   r+  r2  z0.25r+   Úcyanro   r^  N)r1   r   r3   r  r(  Zobject_r   ©r!  rA   r#   rO   rP   rQ   r   r
   r$   r$   r%   Útest_named_colorsò  s    zTestVoxels.test_named_colorszvoxels-rgb-data.pngc                 C   st   t jddid�\}}t d¡\}}}||k||kB }t d¡}|d |d< |d |d< |d |d	< |j||d
� dS )z5Test with colors set to a 4d float array of rgb data.r   r   r   r%  )ro   ro   ro   r.   r,  ©.r   ©.r*   ©.r,   r^  N)r1   r   r3   r  Úzerosr   r'  r$   r$   r%   Útest_rgb_dataÿ  s    
zTestVoxels.test_rgb_datazvoxels-alpha.pngc                 C   sÄ   t jddid�\}}t d¡\}}}||k}t || ¡dk }||B }t d¡}	dddd	g|	|< dddd	g|	|< |j||	d
�}
t|
ƒtksŽt	‚|
 
¡ D ](\}}|| s®t	dƒ‚t|tjƒs–t	‚q–d S )Nr   r   r   r%  r,   )ro   ro   ro   r/   r*   r   r×   r^  zfaces returned for absent voxel)r1   r   r3   r  r:   r,  r   Útyper   rY   Úitemsr²  r   r¨  )r!  rA   r#   rO   rP   rQ   Zv1Zv2r   r
   r›  Zcoordr©  r$   r$   r%   Ú
test_alpha  s    
zTestVoxels.test_alphazvoxels-xyz.pngç{®Gáz„?F)rÕ   r   c                 C   sÆ   t jddid�\}}dd„ }t d¡d \}}}||ƒ}||ƒ}||ƒ}	|d d	 |d d	  |	d d	  d
k }
t |
jd ¡}||d< ||d< |	|d< |j||||
|t d	| d dd¡dd� d S )Nr   r   r   c                 S   sZ   d}t | jƒD ]F}| |tjd d…   | |tjdd …    d } |tjd d … 7 }q| S )Nr$   r¿   r*   rú   )r›   Úndimr3   Z	index_exp)rO   ÚslrG   r$   r$   r%   Ú	midpoints"  s    ÿÿz&TestVoxels.test_xyz.<locals>.midpoints)é   r5  r5  g      0@r×   r,   r»   )r.   r)  r*  r+  r   r*   )r?  r@  rÿ   )r1   r   r3   r  r,  r9  r   rÀ   )r!  rA   r#   r4  rC   rk   rl   ÚrcÚgcÚbcZspherer
   r$   r$   r%   Útest_xyz  s     	(ýzTestVoxels.test_xyzc              	   C   s  t  d¡\}}}t  d¡}tjddid�\}}tƒ tdd�fD ]T}|j|f|Ž |jf d|i|—Ž |j||||f|Ž |j|||fd|i|—Ž q>tjt	d	d
�� |j|||||d� W 5 Q R X tjt	d	d
�� | ||¡ W 5 Q R X t t
¡� |j||||d� W 5 Q R X d S )Nr-   )r,   r.   r/   r   r   r   r«  )r  Úfilledr   rí   )r:  )r:  rO   rP   rQ   )r3   r  Zonesr1   r   r   r   rï   rð   Ú	TypeErrorÚAttributeError)r!  rO   rP   rQ   r:  rA   r#   Úkwr$   r$   r%   Útest_calling_conventions?  s    
z#TestVoxels.test_calling_conventionsN)Ú__name__Ú
__module__Ú__qualname__Úmpl3d_image_comparisonr"  r$  r(  r-  r0  r9  r>  r$   r$   r$   r%   r  Þ  s   






 r  c            
      C   s
  ddgddgddg  } }}ddgd	d
gddg  }}}t  ¡ }|jdd�}| | ||¡}|d }	tj | ||f|	 ¡ ¡ |	 |||¡ tj |||f|	 ¡ ¡ |	 	| ¡ |	 
|¡ |	j|dd� tj | ||f|	 ¡ ¡ |	jddd� tj | |t |¡f|	 ¡ ¡ d S )Nr   r*   r,   r.   r/   r+   r™   rÈ   rÄ   r,  ro   rI   r   r   rQ   rJ  )r1   rR   rS   rä   r3   rœ   r�   Zget_data_3drò   Z	set_xdataZ	set_ydataZset_3d_propertiesrƒ   )
rO   rP   rQ   Zx2Úy2Úz2rA   r#   rä  ró   r$   r$   r%   Útest_line3d_set_get_data_3dX  s    

rE  c                 C   sx   | j dd�}| ddddgddddgddddg¡ | ¡  |j dd�}| ¡  | ddddgddddgddddg¡ d S )Nr   r   r*   ro   )rS   rä   Zinvert_yaxisr    r$   r$   r%   Útest_invertedj  s    &rF  c                  C   s°   t jddid�\} }| ¡ r t‚| ¡ r,t‚| ¡ r8t‚| dd¡ | dd¡ | dd¡ | ¡ sht‚| ¡ stt‚| ¡ s€t‚| 	¡  | ¡ r”t‚| ¡ r t‚| ¡ r¬t‚d S )Nr   r   r   r*   r   )
r1   r   Zxaxis_invertedrY   Zyaxis_invertedÚzaxis_invertedr¬   r­   r®   rÌ  rZ   r$   r$   r%   Útest_inverted_clav  s    rH  c                  C   s¨   t  ¡ } t| ƒ}|jddd� |jddd� |jddd� | j ¡  |j ¡ D ]}|jj	dksNt
‚qN|j ¡ D ]}|jj	dksnt
‚qn|j ¡ D ]}|jj	dksŽt
‚qŽd S )NrO   r~   )rz  r
   rP   rQ   )r1   rR   r   Ztick_paramsrŽ   r�   rÆ  rÉ  Z	tick1lineÚ_colorrY   rÈ  rÇ  )rA   r#   rÊ  r$   r$   r%   Útest_ax3d_tickcolourŠ  s    
rJ  c           	      C   sÔ  | j ddddid�}|jD ]}| dd¡ qt|dd	d
dgƒD ]z\}}|d j|dd� |d j|dd� |d j|tjd  d� |d j|tjd  d� |d j|tjd  d� q>dd„ }|j ddddid�}|jD ]}| dd¡ qÜt|dgdgdgdddggƒD ]Â\}}||d |ƒD ]}| d¡ �q"||d |ƒD ]}| d¡ �qB||d |ƒD ]}| 	tjd  ¡ �qb||d |ƒD ]}| 
tjd  ¡ �qŠ||d |ƒD ]}| tjd  ¡ �q²�qd S ) Nr/   r+   r   r   r   g    ÐcAg   @ÑcArO   rP   rQ   rÂ   r   Úplain)rz  r   r*   )rº   r,   )rz  Z	scilimitsr,   zaxes.formatter.useoffset)rz  Z	useOffsetr.   zaxes.formatter.use_locale)rz  Z	useLocalezaxes.formatter.use_mathtext)rz  ZuseMathTextc                    s   ‡ fdd„|D ƒS )Nc                    s   g | ]}t ˆ |ƒ ¡ ‘qS r$   )r  Zget_major_formatter)r•   Úname©r#   r$   r%   r—   ®  s     zAtest_ticklabel_format.<locals>.get_formatters.<locals>.<listcomp>r$   )r#   Únamesr$   rM  r%   Úget_formatters­  s    z-test_ticklabel_format.<locals>.get_formattersrÆ  rÈ  rÇ  F)r   re   r¬   r<   Zticklabel_formatrÍ   rP  Zset_scientificZset_powerlimitsZset_useOffsetZset_useLocaleZset_useMathText)	r!   r"   rB   r#   ÚrowrL  rO  rN  Úfmtr$   r$   r%   Útest_ticklabel_format›  sX    
 ÿ ÿ 
ÿ 
ÿ
þ
 ÿ
ÿrR  c                 C   sŠ   d}t  t  ddd¡t  ddd¡t  ddd¡¡\}}}t  |¡ } }}t|| fdƒD ].\}	}
|	jdd�}|j|||||||
|d	� qVd S )
Nr“  gš™™™™™é¿r*   r{  rr   )r*   rw  r   r   )rž   r–  )r3   r‹   rx   Ú	ones_liker<   rS   r™  )r!   r"   r–  rO   rP   rQ   rš  r›  rœ  rA   rž   r#   r$   r$   r%   Útest_quiver3D_smokeÃ  s    ý
rT  zminor_ticks.pngZmpl20)r   c                  C   st   t  ¡ jdd�} | jdgdd� | jdgdd� | jdgdd� | jdgdd� | jd	gdd� | jd
gdd� d S )Nr   r   r»   T)ÚminorZquarterg…ëQ¸Õ?Úthirdr×   Zhalf)	r1   rR   rS   Z
set_xticksZset_xticklabelsZ
set_yticksZset_yticklabelsÚ
set_zticksZset_zticklabelsrM  r$   r$   r%   Útest_minor_ticksÓ  s    rX  zerrorbar3d_errorevery.pngc            
   	   C   sº   t  ddt j d d¡} t  | ¡t  d|  ¡t  d|  ¡  }}}t ¡ }|jdd�}d	}t  | j¡}|| dk|| d dk@ }|| dk|| d dk@ }	|j	|||d
||	|d� dS )z0Tests errorevery functionality for 3D errorbars.r   r,   r¼   r1  r.   r+   r   r   é   r{  )ÚzuplimsÚzlolimsZ
erroreveryN)
r3   rx   rá   râ   rã   r1   rR   rS   r7  Úerrorbar)
rö   rO   rP   rQ   rA   r#   ZesteprG   rZ  r[  r$   r$   r%   Útest_errorbar3d_erroreveryÞ  s    *ÿr]  zerrorbar3d.pngc                  C   sr   t  ¡ } | jdd�}dddddg}dddddg}|j||||||dd	d
d	d
d
gd
d	d	d
d	gd
ddd� | ¡  dS )z9Tests limits, color styling, and legend for 3D errorbars.r   r   r*   r,   r.   r/   r+   r×   FTÚpurplezError lines)rO   rP   rQ   ZxerrZyerrZzerrZcapsizerZ  r[  ZyuplimsZecolorrM   N)r1   rR   rS   r\  Zlegend)rA   r#   rû  r  r$   r$   r%   Útest_errorbar3dð  s     ür_  z
stem3d.pnggú~j¼t“h?)r   rÕ   c               
   C   s2  t jddddddid�\} }t ddtj ¡}t |tjd  ¡}t |tjd  ¡}|}t|d d	d
dgƒD ]*\}}|j||||d� | 	d|› �¡ qnt tj d tjd d¡}t 
|¡}t |¡}t|d d	d
dgƒD ]N\}}|j|||ddd|d�\}}	}
| 	d|› �¡ |jddd� |
 d¡ qÞd S )Nr,   r.   )rÄ   r™   Tr   r   ©rJ   Zconstrained_layoutr   r   rO   rP   rQ   )Úorientationzorientation=rn   r*   zC4-.ZC1Dr  )ÚlinefmtZ	markerfmtZbasefmtra  r  )rû   Zmarkeredgewidth)r1   r   r3   rÛ   rá   rã   râ   r<   ÚstemrT   rS  ÚsetZset_linewidth)rA   rB   rå   rO   rP   rQ   r#   rt   Z
markerlineZ	stemlinesZbaseliner$   r$   r%   Útest_stem3d   s6    
þ


    ýre  zequal_box_aspect.pngc               	   C   s˜  ddl m} m} t ¡ }|jdd�}t ddtj d¡}t dtjd¡}t 	t 
|¡t |¡¡}t 	t |¡t |¡¡}t 	t |¡t 
|¡¡}| |||¡ ddg}	|t t| |	|	|	ƒƒ¡dƒD ]B\}
}t t |
| ¡¡|	d |	d  krÂ|jt|
|ƒd	d
iŽ qÂt | ¡ | ¡ | ¡ g¡}t|d ƒt|d ƒg}| |¡ | |¡ | |¡ | d¡ | d¡ tj t!dd�� |jddd� W 5 Q R X d S )Nr   )r8   r6   r   r   r,   r¨   r¿   r*   rv   rl   Úoffrj  zArgument zoom =rí   )Úzoom)"r5   r8   r6   r1   rR   rS   r3   rÛ   rá   Úouterrã   râ   rS  r  r4   r7   r9   r:   r;   r<   r¼  Ú
get_xlim3dÚ
get_ylim3dÚ
get_zlim3drÃ   rÅ   ro  rp  r  rz  r>   rï   rð   rŠ  )r8   r6   rA   r#   rš  r›  rO   rP   rQ   rC   r
  r  ZxyzlimZXYZlimr$   r$   r%   Útest_equal_box_aspect  s0    $$ÿ




rl  c                  C   s†   d} t jd| ddddid�\}}|D ]*}| tj d¡tj d¡tj d¡¡}q$t j||d	d
�}|j ¡  |j	 
¡ jd dk s‚t‚d S )Nr,   r*   )r/   r+   Tr   r   r`  r+   Ú
horizontal)r#   ra  r{  )r1   r   r~  r3   rØ   rÒ  rQ  rŽ   r�   r#   Zget_positionZextentsrY   )Z	num_plotsrA   rB   r#   Zp_triZcbarr$   r$   r%   Útest_colorbar_posD  s    
þ

ÿ
rn  c                  C   s"  t  ¡ } | jdd�}| ¡ r t‚| ¡ dks0t‚| ¡ dks@t‚| d¡ | ¡ rVt‚| ¡ dksft‚| ¡ dksvt‚| ¡  | ¡ sŠt‚| ¡ dksšt‚| ¡ dksªt‚|jdd� | ¡ sÂt‚| ¡ dksÒt‚| ¡ dksât‚|jd	d
� | ¡ sút‚| ¡ dk�st‚| ¡ dk�st‚d S )Nr   r   ©r   r*   ©r   r,   )r,   r   r*   )Úupper)r*   r   r,   )Úlower)r,   r*   ©r*   r,   )	r1   rR   rS   rG  rY   Úget_zlimZ
get_zboundZ
set_zboundZinvert_zaxisrZ   r$   r$   r%   Útest_inverted_zaxisT  s*    
ru  c               	   C   s°   t  ¡ } | jdd�}| ¡ dks$t‚|jdd� | ¡ dks@t‚|jdd� | ¡ d	ks\t‚tjtd
d�� |jddd� W 5 Q R X tjtdd�� |jddd� W 5 Q R X d S )Nr   r   ro  r,   )ró  rp  r*   )rò  rs  z$Cannot pass both 'bottom' and 'zmin'rí   r   )r  rò  z!Cannot pass both 'top' and 'zmax')r  ró  )	r1   rR   rS   rt  rY   r®   rï   rð   r;  rZ   r$   r$   r%   Útest_set_zlimt  s"     ÿ ÿrv  c                  C   s�   t  ¡ } | jddd�}| jdd|d�}| ddgddgddg¡ | ddgddgddg¡ | d	ddd
g¡ | ¡ dks|t‚| ¡ dksŒt‚d S )NéÓ   r   r   éÔ   )r   Zsharezr   r*   r,   r  ç      @)r  ry  )r1   rR   rS   rä   rW  rt  rY   )rA   rê   rë   r$   r$   r%   Útest_shared_axes_retick…  s    rz  c                  C   s8  dd„ } t  ¡ jdd�}| ddd¡ |jj ¡  | | ¡ Ž \}}| | ¡ Ž \}}| | ¡ Ž \}}| 	t
|tjddd�¡ | t
|tjddd�¡ | | ¡ Ž \}}	| | ¡ Ž \}
}| | ¡ Ž \}}|	t |¡ksÔt‚|t |¡ksæt‚|t |¡ksøt‚|t |¡k�st‚|
t |¡k�s t‚|t |¡k�s4t‚dS )	z1Test mouse panning using the middle mouse button.c                 S   s   | | d }||  }||fS )z+Convert min/max limits to center and range.r,   r$   )ZdminZdmaxÚcenterZrange_r$   r$   r%   Úconvert_lim”  s    ztest_pan.<locals>.convert_limr   r   r   )ÚbuttonZxdataZydatar*   N)r1   rR   rS   r  rŽ   r�   ri  rj  rk  Z_button_pressr   r   ZMIDDLEZ_on_moverï   ÚapproxrY   )r|  r#   Z	x_center0Zx_range0Z	y_center0Zy_range0Z	z_center0Zz_range0Zx_centerZx_rangeZy_centerZy_rangeZz_centerZz_ranger$   r$   r%   Útest_pan‘  s,    ÿÿr  ztool,button,key,expectedrg  ))rø   ç¸…ëQ¸®?)r1  gìQ¸…ë±?)rÔ   ç{®Gáz´?rO   ))g{®Gáz„¿r¼   ©g¸…ëQ¸ž¿r�  ©ç¸…ëQ¸®¿r€  rP   ))çìQ¸…ë±¿g{®Gáz¤?r‚  )rø   g)\�Âõ(¼?))g
×£p=
·¿r  )r…  gÃõ(\�ÂÅ?)r„  g
×£p=
Ç?Úpan))gffffffæ¿ç�Âõ(\�â¿)g{®Gázð¿g…ëQ¸í¿©gR¸…ëQô¿gffffffò¿))g¸…ëQ¸î¿gáz®Gáê¿)r‡  gq=
×£pÝ¿rƒ  ))r{  g{®GázÔ?)gR¸…ëQà¿gö(\�ÂõØ¿rˆ  c                 C   sj  t  ¡ }|jdd�}| ddd¡ |j ¡  | ¡ | ¡ | ¡   }}}d}	d}
|j	 
|	¡ t¡}|j	 
|
¡ t¡}td|jf||fžd|iŽ}td|jf||fžd|iŽ}t|jƒ}| d	kræ| ¡  | |¡ | |¡ | |¡ n&| ¡  | |¡ | |¡ | |¡ |\}}}| ¡ tj|d
d�k�s2t‚| ¡ tj|d
d�k�sNt‚| ¡ tj|d
d�k�sjt‚| ¡  | ¡ t |¡k�sŠt‚| ¡ t |¡k�s¢t‚| ¡ t |¡k�sºt‚| ¡  | ¡ tj|d
d�k�sÞt‚| ¡ tj|d
d�k�sút‚| ¡ tj|d
d�k�st‚| ¡  | ¡ t |¡k�s6t‚| ¡ t |¡k�sNt‚| ¡ t |¡k�sft‚d S )Nr   r   r   r¡  ©r*   r*   Zbutton_press_eventÚkeyZbutton_release_eventrg  r1  )r:   )r1   rR   rS   r  rŽ   r�   ri  rj  rk  Z	transDatarn  ZastypeÚintr   r   rg  Z
press_zoomZ	drag_zoomZrelease_zoomr†  Z	press_panZdrag_panZrelease_panrï   r~  rY   ÚbackÚforwardÚhome)Ztoolr}  rŠ  ÚexpectedrA   r#   Zxlim0Zylim0Zzlim0Zd0Zd1rý  Ús1Zstart_eventZ
stop_eventÚtbZxlimZylimZzlimr$   r$   r%   Útest_toolbar_zoom_pan·  sj    
 ÿ ÿÿ ÿ ÿÿ






r’  c           
      C   s¦   t  ttjt  ddd¡t  ddd¡t  ddd¡gŽ ƒ¡j\}}}|| }| jddd�}|j||||ddd	�}| j	 
¡  | ¡  |jddd�}|j||||ddd	�}	d S )
Nr   r+   r*   éo   r   r   r§   rÆ   )rp   r
  r¥   )r3   r4   r7   r5   r8   rx   r÷  rS   r  rŽ   r�   Úchanged)
r!   r"   rO   rP   rQ   rp   rÒ   Zsc_testrÑ   Zsc_refr$   r$   r%   Útest_scalarmap_update  s    þ
r•  c                  C   sF   t  ¡ } |  dd¡}|d jddddd�}|d jdddddd�}d S )Nr*   r,   r   r   r   Úother)r   rM   )r1   rR   Z
subfiguresrS   )rA   Zsfr#   r$   r$   r%   Útest_subfigure_simple  s    r—  Úcomputed_zorder)ZclassicZ_classic_test_patch)Úbaseline_imagesr   r   r   c               
   C   sŒ  t  ¡ } | jddd�}| jddd�}d|_d}||fD ]h}tj|gddd	d
�}| |¡ |jdddddd� |jdddddd� | 	d¡ | 
d¡ | d¡ q6| jddd�}| jddd�}d|_d}t | |f| |f¡\}	}
t d¡}d}t | |fd|f¡\}}|| }t | |f| df¡\}}|| }d}d}t ddtj |¡}|t |¡ |t |¡ || t |¡   }}}||fD ]ú}|j|||ddddd� |j||dk  ||dk  ||dk  ddd dd!� |j|	|
|dddd	d� |j|t |¡ |t |¡ t |¡ddddd!� |j|||dddd"d� |j||dk ||dk ||dk ddd d#d!� |jd$d%dd&� | d'¡ �qŒd S )(NéÝ   r   r   éÞ   F)r^   )r   r+   r   )r+   r+   r   )r+   r   r   ÚwhiteÚblackr*   )r?  r@  Úzorder)r,   r,   )r   r/   r~   r,   )rp   rž  )r.   r.   )r*   r.   ro   )r   rù   )r   ry  éß   éà   r×   r   rÈ   rÖ   r€   r¿   )rv   rw   rÿ   rž  r+   z--r   )r5  Z	linestylerv   rž  r.   r/   rn   r´   ra   rf  )r1   rR   rS   r˜  r   r¨  r¦  rä   r  r¬   r­   r®   r3   r‹   r,  rÛ   rá   rã   râ   r  rg   rz  )rA   rê   rë   Zcornersr#   ZtriZax3Zax4Údimr°   r±   r²   ÚangleZX2ZY2ZZ2ZX3ZY3ZZ3rC   rÚ  ÚthrO   rP   rQ   r$   r$   r%   Útest_computed_zorder"  sŒ    ý



2
ü"ü
ü$ü
ü$ýr¤  c                  C   s¤   t  ¡ } | jdd�}t d¡}| |t |¡¡ | j ¡  | 	dd¡dksNt
‚|jddd� | j ¡  | 	dd¡d	kszt
‚| ¡  | j ¡  | 	dd¡dks t
‚d S )
Nr   r   ro   r   u   x=1.8066, y=1.0367, z=âˆ’0.0553rm   rP   )rd   Úvertical_axisu"   x=9.1651, y=âˆ’0.9215, z=âˆ’0.0359)r1   rR   rS   r3   rx   rä   râ   rŽ   r�   Zformat_coordrY   rg   ©rA   r#   rO   r$   r$   r%   Útest_format_coordu  s    



r§  c                  C   sN   t  ¡ } | jdd�}t d¡}| |t |¡¡ | j ¡  | 	¡ dksJt
‚d S )Nr   r   ro   )FTF)r1   rR   rS   r3   rx   rä   râ   rŽ   r�   Zget_axis_positionrY   r¦  r$   r$   r%   Útest_get_axis_position†  s    

r¨  c                  C   s¤   t  ¡ } | jdd�}| d¡ | ¡ dks.t‚| ddd¡ | ¡ dksLt‚|jdd	� | ¡ d
ksht‚|jdd� | ¡ dks„t‚|jdd� | ¡ dks t‚d S )Nr   r   r{  )r{  r{  r{  r¼   r  )r¼   r{  r  r   )rO   )r   r{  r  )rP   )r   r¼   r  ©rQ   )r   r¼   r   )r1   rR   rS   r  rY   rZ   r$   r$   r%   Útest_margins�  s    
rª  zerr, args, kwargs, match)r¿   z!margin must be greater than -0\.5)r*   r¿   r*   )r*   r*   r¿   r¿   rQ   )r*   z'Cannot pass both positional and keyword)rO   rP   r‰  z*Must pass a single positional argument forc              	   C   s>   t j| |d��& t ¡ }|jdd�}|j||Ž W 5 Q R X d S )Nrí   r   r   )rï   rð   r1   rR   rS   r  )Úerrrâ  rÐ   rî   rA   r#   r$   r$   r%   Útest_margins_errorsž  s    r¬  c                 C   sz   |j dd�}tdddƒ}tj|dd� | |¡ | ¡ dks@t‚| j dd�}t dddd¡}| |¡ | ¡ dksvt‚d S )Nr   r   r×   zFoo bar $\int$r*   r©  r·  )rS   r   r   Ztext_2d_to_3dr´  Zget_position_3drY   ZText3D)r!   r"   r#   ÚtxtZt3dr$   r$   r%   Útest_text_3d´  s    

r®  c                  C   s>   t  ¡ } | jdd�}| dgdggdgdggdgdgg¡ d S )Nr   r   r   r*   )r1   rR   rS   rä   rZ   r$   r$   r%   Útest_draw_single_lines_from_Nx1Â  s    r¯  c                 C   s`   |j dd�}t ¡ }t|ƒ}tj|ddd� | |¡ | j dd�}tj|ddd�}| |¡ d S )Nr   r   )r   r×   r   r*   r   rP   ©rQ   rt   rJ  )rS   r   Zunit_rectangler   r   Úpathpatch_2d_to_3dr´  ZPathPatch3D)r!   r"   r#   ÚpathÚpatchZpp3dr$   r$   r%   Útest_pathpatch_3dÉ  s    
r´  zscatter_spiral.png)r™  r   r   c                  C   sf   t  ¡ } | jdd�}t ddtj d d¡}|jt |¡t |¡|d|d  |d d	�}| j	 
¡  d S )
Nr   r   r   r,   r™   é   r*   r+   rE  )r1   rR   rS   r3   rÛ   rá   r  râ   rã   rŽ   r�   )rA   r#   r£  Úscr$   r$   r%   Útest_scatter_spiralÖ  s
    ,r·  c                  C   sn   t jddd…ddd…f \} }t  |¡d t  | ¡d  }t ¡ }|jddd�}|j|| |d	d
�}| ¡  d S ©Nr*   ro   y              Y@r.   r,   r“  r   r   Zhot)r¥   )	r3   r˜  rã   râ   r1   rR   rS   r  r£  ©rP   rO   rD  rA   r#   rC   r$   r$   r%   Ú#test_Poly3DCollection_get_facecolorã  s    rº  c                  C   sn   t jddd…ddd…f \} }t  |¡d t  | ¡d  }t ¡ }|jddd�}|j|| |d	d
�}| ¡  d S r¸  )	r3   r˜  rã   râ   r1   rR   rS   r  Zget_edgecolorr¹  r$   r$   r%   Ú#test_Poly3DCollection_get_edgecolorî  s    r»  zDvertical_axis, proj_expected, axis_lines_expected, tickdirs_expectedrø   g#ðk$Iò?g.�_x%Iâ¿gºÙ(·më?g£å@µmÛ¿g      $Àg#ðk$Iò¿gÓø…W’$%@gŽË—›˜Ã¬?gÞ2m Ù3°?gæº¾I²’¥¿g‰®°…ÅM¨¿gÞ2m Ù3°¿g‰®°…ÅM¨?gŽË—›˜Ã¬¿gæº¾I²’¥?c                 C   s¸   d}t jddddd�}|jddd| d� |jj ¡  | ¡ }tjj	|||d� t
| ¡ | ¡ | ¡ gƒD ]J\}}|| }	|j ¡ }
tjj	|	|
|d� || }| ¡ }tj ||¡ qhdS )	a  
    Test the actual projection, axis lines and ticks matches expected values.

    Parameters
    ----------
    vertical_axis : str
        Axis to align vertically.
    proj_expected : ndarray
        Expected values from ax.get_proj().
    axis_lines_expected : tuple of arrays
        Edgepoints of the axis line. Expected values retrieved according
        to ``ax.get_[xyz]axis().line.get_data()``.
    tickdirs_expected : list of int
        indexes indicating which axis to create a tick line along.
    g�íµ ÷ÆÀ>r*   r   r   r   )rb   rc   rd   r¥  )ÚrtolN)r1   Úsubplotrg   rR   rŽ   r�   Zget_projr3   rœ   rï  r=   Z	get_xaxisZ	get_yaxisZ	get_zaxisró   Úget_dataZ_get_tickdirr�   )r¥  Zproj_expectedZaxis_lines_expectedZtickdirs_expectedr¼  r#   Zproj_actualrG   rz  Zaxis_line_expectedZaxis_line_actualZtickdir_expectedZtickdir_actualr$   r$   r%   Útest_view_init_vertical_axisù  s    D"

ÿr¿  zarc_pathpatch.pngc                  C   sF   t jddddd�} tjdddddd	d
�}|  |¡ tj|ddd� d S )Nr*   r   r   )r×   r×   r×   gÍÌÌÌÌÌì?rn   ro   rC  )rŸ   Úheightr¢  Ztheta1Ztheta2r   rQ   r°  )r1   r½  ÚmpatchZArcr¢  r   r±  )r#   r/  r$   r$   r%   Útest_arc_pathpatchS  s    
  ÿ
rÂ  zpanecolor_rcparams.pngc               	   C   s:   t  ddddœ¡� t jdd�} | jdd� W 5 Q R X d S )	NrC   rk   rl   )zaxes3d.xaxis.panecolorzaxes3d.yaxis.panecolorzaxes3d.zaxis.panecolorr‰  rˆ   r   r   )r1   Z
rc_contextrR   rS   )rA   r$   r$   r%   Útest_panecolor_rcparams^  s    þ
rÃ  c                 C   s    | j ddd�}dddg}dddg}dddg}| |||d¡ dddg|d	d	…< dddg|d	d	…< |j ddd�}dddg}dddg}dddg}| |||d¡ d	S )
z~
    Test to see if the `z` axis does not get mutated
    after a call to `Axes3D.plot`

    test cases came from GH#8990
    r“  r   r   r*   r,   r.   rø   zo-Nrè   )r!   r"   rê   rO   rP   rQ   rë   r$   r$   r%   Ú"test_mutating_input_arrays_y_and_zi  s    





rÄ  )r*   )£Ú	functoolsr5   rï   Zmpl_toolkits.mplot3dr   r   r   r   Z
matplotlibrÍ   Zmatplotlib.backend_basesr   r   r   r	   r
   rš   r   rÁ  Zmatplotlib.testing.decoratorsr   r   Zmatplotlib.testing.widgetsr   Zmatplotlib.collectionsr   r   Zmatplotlib.patchesr   r   Zmatplotlib.pathr   Zmatplotlib.textr   Zmatplotlib.pyplotZpyplotr1   Únumpyr3   ÚpartialrB  r&   rH   rL   r[   rj   r}   r…   r’   r“   r    r³   r·   r¹   rÁ   ÚmarkZparametrizerÓ   rÚ   rß   ræ   rì   rô   r  r  r  r  r  r  r)  rA  rG  rI  rK  rR  rV  rc  rd  rh  rr  rt  r€  r‚  r‡  rˆ  r‰  r‹  r�  r�  rž  r   r¥  r§  rª  r±  r¶  r¸  rÃ  rÄ  rË  rÍ  rÏ  rÓ  rÛ  rá  rå  rë  rî  rð  rô  rü  rÿ  r  r	  r  r  r  r  r  Únanr  r  rE  rF  rH  rJ  rR  rT  rX  r]  r_  re  rl  rn  ru  rv  rz  r  ÚLEFTÚRIGHTr’  r   Úcontextr•  r—  r¤  r§  r¨  rª  rŠ  Útupler;  r¬  r®  r¯  r´  r·  rº  r»  r¿  rÂ  rÃ  rÄ  r$   r$   r$   r%   Ú<module>   s|    ÿ












þ










	




6



	




	









ÿ


















	


úz


'



ÿ% &

ÿÿÿ
ÿ
ÿÿÿôÿ=

	
 ÿQ	
ÿÿÿó

þ
üýóüýóüýóáþ2(þþ
