U
    d»{jÕü  ã                   @   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 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(dd„ Z)e&dgƒdd„ ƒZ*e&dgƒ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/„ ƒZ1e&d0gƒd1d2„ ƒZ2e&d3gƒd4d5„ ƒZ3ej4 5d6d7d8d9d:ggd;d8d9d:d<ggd=d d8d9d:ggg¡edgd�d>d?„ ƒƒZ6e&d@gdAdB�dCdD„ ƒZ7dEdF„ Z8e&dGgƒdHdI„ ƒZ9edgd�dJdK„ ƒZ:e&dLgƒdMdN„ ƒZ;edgd�dOdP„ ƒZ<e&dQgƒdRdS„ ƒZ=e&dTgƒdUdV„ ƒZ>e&dWgƒdXdY„ ƒZ?edgd�dZd[„ ƒZ@edgd�d\d]„ ƒZAej4 5d^ddg¡edgd�d_d`„ ƒƒZBej4 5dadbdcg¡edgd�ddde„ ƒƒZCedgd�dfdg„ ƒZDe&dhgdidB�djdk„ ƒZEe&dlgƒdmdn„ ƒZFe&dogƒdpdq„ ƒZGe&drgƒdsdt„ ƒZHe&dugƒdvdw„ ƒZIe&dxgdd�dydz„ ƒZJedgd�d{d|„ ƒZKe&d}gd~dB�dd€„ ƒZLe&d�gd‚dB�dƒd„„ ƒZMe&d…gƒd†d‡„ ƒZNe&dˆgƒd‰dŠ„ ƒZOe&d‹gƒdŒd�„ ƒZPdŽd�„ ZQd�d‘„ ZRe&d’d“d”gƒd•d–„ ƒZSedgd�d—d˜„ ƒZTe&d™gƒdšd›„ ƒZUdœd�„ ZVedgd�dždŸ„ ƒZWd d¡„ ZXe&d¢gƒd£d¤„ ƒZYd¥d¦„ ZZe&d§gƒd¨d©„ ƒZ[e&dªgƒd«d¬„ ƒZ\e&d­gƒd®d¯„ ƒZ]e&d°gdd�d±d²„ ƒZ^e&d³gdd�d´dµ„ ƒZ_e&d¶gdd�d·d¸„ ƒZ`d¹dº„ Zad»d¼„ Zbd½d¾„ Zc�dWdÀdÁ„Zde&dÂgƒdÃdÄ„ ƒZee&dÅgƒdÆdÇ„ ƒZfdÈdÉ„ ZgdÊdË„ Zhe&dÌgƒdÍdÎ„ ƒZidÏdÐ„ ZjdÑdÒ„ Zkej4 5dÓdÔ¡ej4 5dÕdÖ¡d×dØ„ ƒƒZldÙdÚ„ Zme&dÛgdd�dÜdÝ„ ƒZne&dÞgdd�dßdà„ ƒZoe&dágƒdâdã„ ƒZpej4 5däe$jqe$jrg¡ej4 5dådædçdèdédêdëg¡dìdí„ ƒƒZsG dîdï„ dïƒZtdðdñ„ Zuedgd�dòdó„ ƒZvdôdõ„ Zwdöd÷„ Zxedgd�dødù„ ƒZyedgd�dúdû„ ƒZze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‚e	jƒ „d¡edgd��d�d„ ƒƒZ…�d�d„ Z†e�dgddg�d��d�d„ ƒZ‡�d�d„ Zˆ�d�d „ Z‰�d!�d"„ ZŠej4 5�d#e‹�d$i �d%fe‹�d&i �d%fe‹�d'i �d%fe‹eŒƒ �d(�d)i�d%fe‹eŒƒ �d*�d)i�d%fe‹eŒƒ �d+�d)i�d%fe��d,�d(d¿i�d-fe��d,d¿d¿d¿dÔœ�d-fe��d,d¿d¿�d.œ�d-fe��d/i �d0ff
¡�d1�d2„ ƒZŽedgd��d3�d4„ ƒZ��d5�d6„ Z�edgd��d7�d8„ ƒZ‘e�d9gdd�d:��d;�d<„ ƒZ’�d=�d>„ Z“�d?�d@„ Z”ej4 5�dA�d+�dB�dC�dB�dDg�dB�dB�dE�dFg�dB�dB�dB�dGg�dH�dB�dB�dIgg�dJ�dKg�dL�dMgf�dN�dKg�dM�dMgf�dN�dNg�dM�dOgfgd¿d d gf�d*�dC�dB�dB�dDg�dB�dE�dB�dFg�dB�dB�dB�dGg�dB�dB�dH�dIgg�dN�dKg�dO�dOgf�dK�dKg�dM�dOgf�dP�dNg�dQ�dOgfgd8d8d gf�d(�dB�dB�dC�dDg�dE�dB�dB�dFg�dB�dB�dB�dGg�dB�dH�dB�dIgg�dN�dNg�dO�dMgf�dK�dJg�dO�dQgf�dK�dNg�dO�dOgfgd¿d8d¿gfg¡�dR�dS„ ƒZ•e�dTgdd�d:��dU�dV„ ƒZ–dS (X  é    N)ÚAxes3DÚaxes3dÚproj3dÚart3d)ÚMouseButton)Ú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"   ú^/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mpl_toolkits/tests/test_mplot3d.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	¡ | | |	 ¡ q´d S )
N)ÚautoÚequalZequalxyZequalyzZequalxzé   r   r   r   r   é   é   ©é   é   r(   )Úpltr   ÚlenÚnpÚarrayÚ	itertoolsÚcombinationsÚlistÚproductÚsumÚabsÚplot3DÚzipÚ	enumerateÚset_box_aspectZ
set_aspect)
ZaspectsÚfigÚaxsÚrÚscaleZptsÚstartÚendr!   Úir"   r"   r#   Útest_aspects    s     $
rB   c                  C   sZ   t  ¡ } | jdd�}| d¡ | d¡ | d¡ | d¡ | d¡ t|ƒdksVt	‚d S )	Nr   r   ÚlabelÚtitleÚxÚyÚzz]<Axes3DSubplot: label='label', title={'center': 'title'}, xlabel='x', ylabel='y', zlabel='z'>)
r-   ÚfigureÚadd_subplotZ	set_labelÚ	set_titleÚ
set_xlabelÚ
set_ylabelÚ
set_zlabelÚreprÚAssertionError©r;   r!   r"   r"   r#   Útest_axes3d_repr2   s    




ÿrQ   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   rS   r   ©r   r   r   )rS   rR   r   )r   rR   r   )r   é´   r   r)   r+   r   r   r   rE   rF   rG   Úorthor   r'   ©ÚelevÚazimÚroll)
r-   r   r9   ÚflatrK   rL   rM   Úset_proj_typeÚ	view_initÚtight_layout)Úviewsr;   r<   rA   r!   r"   r"   r#   Útest_axes3d_primary_views?   s    û



*r`   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   r=   ÚgÚbrF   é   é   é
   r   ÚcÚedgeçš™™™™™é?)ÚzsÚzdirÚalignÚcolorÚalpha)r-   rH   rI   r8   r/   Úaranger.   Úbar)r;   r!   rf   rG   ÚxsÚysÚcsr"   r"   r#   Ú
test_bar3dT   s    "

rs   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'   ©rl   )r-   rH   rI   r/   rn   r.   Ú
zeros_likeÚbar3d)r;   r!   rf   rp   rq   ri   r"   r"   r#   Útest_bar3d_colors`   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'   )rc   iÄÿÿÿr   )rc   rc   rc   )éâÿÿÿrc   rS   )é,  r|   r   ©Úfigsizer   r   r   r   T©ÚshaderW   )r/   rn   ÚmeshgridÚravelr-   rH   Ú	figaspectr.   r   r   r8   rz   r]   ÚcanvasÚdraw)rE   rF   Úx2dÚy2drG   r_   r;   r<   r!   rX   rY   rZ   r"   r"   r#   Útest_bar3d_shadedl   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€   )
r-   rH   rI   r/   rn   r‚   rƒ   rz   r…   r†   )r;   r!   rE   rF   r‡   rˆ   rG   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   rR   )ZazdegZaltdeg)r+   r,   c                    s   g | ]}t  |ˆ  ¡‘qS r"   )r   Úcoolwarm)Ú.0rA   ©Zarear"   r#   Ú
<listcomp>›   s     z*test_bar3d_lightsource.<locals>.<listcomp>T)	rE   rF   rG   ZdxZdyÚdzrl   r�   Zlightsourceé   )r-   rH   rI   ÚmcolorsZLightSourcer/   r‚   rn   rƒ   Úrangerz   ÚtestingÚassert_array_equalZ_facecolor3d)
r;   r!   ZlsÚlengthÚwidthrE   rF   r�   rl   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   çš™™™™™©?rG   éœÿÿÿ)rj   ÚoffsetÚcmaprE   éØÿÿÿrF   é(   éd   ©r-   rH   rI   r   Úget_test_dataÚcontourr   r‹   Úset_xlimÚset_ylimÚset_zlim©r;   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™   rG   rš   T)rj   r›   rœ   Zextend3dr|   rc   éìÿÿÿ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˜   )r-   rH   rI   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'   )r-   rH   rI   r/   r‚   rn   Ú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éöÿÿÿre   )r/   r‚   rn   ÚmplÚ	colormapsÚcopyZ	set_underZset_overrI   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   )	r-   rH   r/   ÚrandomÚseedZrandrI   Z
tricontourZtricontourf)r;   rE   rF   rG   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   )rc   rd   rÃ   re   r   r)   rÎ   )r-   rH   rI   r/   ÚlinspacerÏ   Úrandintr¢   )r;   r!   ÚnxÚnyrE   rF   rG   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'   )	r-   rH   rI   r/   rÒ   ÚpiÚsinÚcosÚplot)r;   r!   ÚthetarG   r=   rE   rF   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)rI   rÛ   ©r   r    Úax1Úax2r"   r"   r#   Útest_plot_scalar  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)   )r/   rÚ   rØ   Úexp)Útr"   r"   r#   Úf(  s    ztest_mixedsubplots.<locals>.fç        ç      @r³   rË   ç       @r~   r)   r'   Zbozk--ru   )ÚmarkerfacecolorTr   r   éûÿÿÿr(   r²   rž   r   F)ÚrcountÚccountÚ	linewidthÚantialiasedr¶   )r/   rn   r-   rH   r„   rI   rÛ   Úgridr‚   ÚhypotrÙ   Úplot_surfaceÚ
set_zlim3d)	rå   Út1Út2r;   r!   r§   r¨   ÚRr©   r"   r"   r#   Útest_mixedsubplots&  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)rI   Útextr^   rß   r"   r"   r#   Útest_tight_layout_text>  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   re   r=   rÞ   )rf   Úmarkerrd   rb   ú^r   r¶   r§   ©r-   rH   rI   Úscatterr/   rn   ©r;   r!   rE   rF   rG   r"   r"   r#   Útest_scatter3dK  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   re   r=   ÚnonerÞ   )Ú	facecolorÚ	edgecolorrû   rd   rb   rø   )rl   rû   rý   rP   r"   r"   r#   Útest_scatter3d_colorX  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   re   rÞ   )rû   rí   rý   rP   r"   r"   r#   Útest_scatter3d_linewidthh  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   re   rÞ   ©rû   )rû   Ú
linewidths)rI   rþ   r/   rn   Úset_linewidths©r    r   rÉ   rf   rÈ   r"   r"   r#   Ú%test_scatter3d_linewidth_modificationr  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   re   rÞ   r  ÚC1ÚC2ç333333Ó?çffffffæ?r(   FéK   r+   )rû   r  r  rm   Ú
depthshaderø   r  )rI   rþ   r/   rn   Úset_facecolorÚset_edgecolorÚ	set_alphaÚget_depthshaderO   Ú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.Nre   é   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)r/   Úuniquer  r"   r"   r#   Ú	<genexpr>µ  s     z)test_scatter3d_sorting.<locals>.<genexpr>©Zdtype)rø   ÚfcÚecÚlwrm   r  )r/   Úmgridrn   ÚsizeÚreshapeÚshaper  rI   r1   r4   ÚmaZmasked_arrayÚfloatÚrepeatr5   Úmaskrþ   )r    r   r  rF   rE   rG   ÚsizesÚ
facecolorsÚ
edgecolorsr  rÈ   Zsetsrø   r!  r"  r#  ZsubsetrÉ   r"   r"   r#   Útest_scatter3d_sorting•  sR    þÿþýÿÿ
  ÿr/  rY   éÎÿÿÿé‚   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   rb   rF   r   r   é¬  ©rø   rf   rW   N)rI   rþ   r]   ©r   r    rY   rE   rF   rG   rl   r!   r"   r"   r#   Ú$test_marker_draw_order_data_reversedÍ  s    	<r5  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.
    r1  r¶   r'   r   rb   rF   r   r   r2  r3  rW   NrU   )rI   Úset_axis_offrþ   r]   r4  r"   r"   r#   Ú#test_marker_draw_order_view_rotatedâ  s    r7  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(   re   rE   ©ri   rj   rF   )r-   rH   rI   r/   rn   rÛ   )r;   r!   rp   rq   r"   r"   r#   Útest_plot_3d_from_2dú  s    r9  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œ   r#  rî   ç)\�Âõ(ð¿ç)\�Âõ(ð?rÎ   )ÚshrinkÚaspect)r-   ÚrcParamsrH   rI   r/   rn   r‚   rð   rÙ   rñ   r   r‹   r¥   Úcolorbar)r;   r!   r§   r¨   rõ   r©   Zsurfr"   r"   r#   Útest_surface3d  s    

 ÿr@  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Úcstriderl   r#  rî   r:  r;  )
r-   rH   rI   r/   rn   r‚   ÚsqrtrÙ   rñ   r¥   )r;   r!   r§   r¨   rõ   r©   r"   r"   r#   Útest_surface3d_shaded  s    
  ÿrD  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  re   é   r¶   r   g      ð¿é   é   rd   é   é   é   é   é   r  )rÁ   rÀ   Zplasma©r-  rc   r¬   )r-   rH   rI   r/   r‚   r0   r(  Úmasked_lessr‘   Ú	Normalizer¼   rº   rÄ   rÅ   rñ   r]   )r;   r!   rE   rF   ÚmatrixrG   Únormr   r"   r"   r#   Útest_surface3d_masked$  s*    øÿrR  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,   ©rA  rB  é<   éÓÿÿÿr   )	r-   rH   rI   r/   r$  r(  rN  rñ   r]   rÿ   r"   r"   r#   Útest_surface3d_masked_strides?  s    rV  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   ©NrE   rF   rG   )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'   rt   rx   r™   gffffffî?z2D Text)Z	transformr   re   zX axiszY axiszZ axis)r-   rH   rI   r8   rù   Ztext2DZ	transAxesÚ
set_xlim3dÚ
set_ylim3drò   rK   rL   rM   )r;   r!   Úzdirsrp   rq   ri   rj   rE   rF   rG   rC   r"   r"   r#   Útest_text3dK  s"    

r_  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 )NrW  rY  rZ  r[  r   r   r   re   ú(z, z), dir=)rj   )rI   r\  r]  rò   r8   rù   Zset_position_3d)r    r   r^  rp   rq   ri   rÉ   rj   rE   rF   rG   rä   rÈ   r"   r"   r#   Útest_text3d_modificationc  s"    (ra  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í   )r/   rÒ   rØ   r*  ÚnewaxisÚappendrÚ   r  rÙ   r-   rH   rI   Úplot_trisurfr   Zjet©	Zn_anglesZn_radiiZradiiZanglesrE   rF   rG   r;   r!   r"   r"   r#   Útest_trisurf3d|  s    $rm  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 )Nrb  r»   rc  rd  r   r)   Fre  .r'   rf  r   r   rÎ   rh  )rl   rí   )r/   rÒ   rØ   r*  ri  rj  rÚ   r  rÙ   r-   rH   rI   rk  rl  r"   r"   r#   Útest_trisurf3d_shadedŽ  s    $ro  zwireframe3d.pngc                  C   s<   t  ¡ } | jdd�}t d¡\}}}|j|||ddd� d S )Nr   r   r™   é   ©rë   rì   ©r-   rH   rI   r   r¡   Úplot_wireframer¦   r"   r"   r#   Útest_wireframe3d   s    rt  zwireframe3dzerocstride.pngc                  C   s<   t  ¡ } | jdd�}t d¡\}}}|j|||ddd� d S )Nr   r   r™   rp  r   rq  rr  r¦   r"   r"   r#   Útest_wireframe3dzerocstride¨  s    ru  zwireframe3dzerorstride.pngc                  C   s<   t  ¡ } | jdd�}t d¡\}}}|j|||ddd� d S )Nr   r   r™   r   re   rS  rr  r¦   r"   r"   r#   Útest_wireframe3dzerorstride°  s    rv  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   rS  )	r-   rH   rI   r   r¡   ÚpytestÚraisesÚ
ValueErrorrs  r¦   r"   r"   r#   Ú test_wireframe3dzerostrideraises¸  s
    rz  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™   re   é2   )rA  rì   )rB  rë   )
r-   rH   rI   r   r¡   rw  rx  ry  rs  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¶   rh   ù              $@ç333333ã?ù              @ç>,p½ ê?)ÚtipÚmiddleÚtailr   r   r³   T©r•   ÚpivotÚ	normalize)	r/   ÚogridrÙ   rØ   rÚ   r-   rH   rI   Úquiver)rE   rF   rG   Ú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„  )rI   rˆ  )	r   r    rE   rF   rG   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¶   rh   r}  r~  r  r€  çš™™™™™Ù¿r³   F)rÆ   r  r�  Tr„  )r-   rH   rI   r/   r$  rÙ   rØ   rÚ   r(  Zmasked_whererˆ  )r;   r!   rE   rF   rG   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   )rd  ræ   ræ   r'   )r'   r   r   r'   )r-   rH   rI   r   Ú	add_patchr   Zpatch_2d_to_3dr  r‘   Z
same_colorÚget_facecolorrO   r…   r†   )r;   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³   rn  ræ   rÎ   rd  r+   )r  r   r   r  r  F)r  r  r  rm   r  )r   r/   r0   r   ZPatch3DCollectionrI   Úadd_collection3dr  r  r  r  rO   r  )r   r    Zpatch1Zpatch2r-  rf   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-like©Úmatchr   )rw  rx  ry  r   ÚPoly3DCollectionr/   r0   r)  )Úpolyr"   r"   r#   Ú&test_poly3dcollection_verts_validation  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)	r-   rH   rI   r/   r0   r)  r   r™  r•  ©r;   r!   Zpoly1Zpoly2Úc1Úc2r"   r"   r#   Útest_poly3dcollection_closed#  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™  rO   Ú	get_pathsr-   r   r   Ú
add_artistZdo_3d_projectionr/   Úisnanr…   r†   )rš  r;   r!   Zminzr"   r"   r#   Ú#test_poly_collection_2d_to_3d_empty2  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Î   )r-   rH   rI   r/   r0   r)  r   r™  r  r  r  r•  rŸ  r"   r"   r#   Útest_poly3dcollection_alphaA  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+   rf  r   r   r   Útwilight©rœ   rQ  ©ri   rê   r(   r�   )r/   rÒ   rØ   rÙ   rÚ   Úcolumn_stackr&  Úconcatenater-   rH   rI   rO  r   Ú	set_arrayÚmodr•  rO   r£   r¤   r¥   ©rÜ   rG   r=   rE   rF   ZpointsÚsegmentsr;   r!   rQ  ÚlcÚliner"   r"   r#   Útest_add_collection3d_zs_arrayT  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¶   rf  r   r   rª  r«  r¬  rê   r(   r×   r�   )r/   rÒ   rØ   rÙ   rÚ   r­  r&  r®  r-   rH   rI   rO  r   r¯  r•  rO   r£   r¤   r¥   r±  r"   r"   r#   Útest_add_collection3d_zs_scalarp  s"    "
r¶  zaxes3d_labelpad.pngc                  C   s¤   t  ¡ } |  t| dd�¡}|jjtjd ks0t‚|j	ddd� |jjdksNt‚| 
d¡ | d¡ d	|j_d
|j_t|j ¡ ƒD ]\}}| | ¡ |d  ¡ q€d S )NF)Zauto_add_to_figurezaxes.labelpadzX LABELre   )ÚlabelpadzY LABELzZ LABELrd   r�   r(   )r-   rH   Zadd_axesr   Úxaxisr·  rÄ   r>  rO   rK   rL   rM   ÚyaxisÚzaxisr9   Úget_major_ticksZset_padZget_pad)r;   r!   rA   Ú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   )r-   rH   rI   r6  ÚclarP   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   rR   é-   r   )r-   rH   rI   r]   rP   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Î   re   rŸ   )Únum)é   r�   r~   r'   r)   r   r   )r/   rÒ   r‚   rÏ   Úrandnr-   rH   rI   rw  rx  ry  rñ   )rE   rF   r§   r¨   rG   r;   r!   r"   r"   r#   Útest_plotsurface_1d_raises®  s    rÅ  c                  C   sb   t  dddg¡} t  dddg¡}t  dddg¡}d}t | |||¡}t ddd¡}t  ||¡}|S )NrÍ   iüÿÿiÐ  rŸ   r   r'   rš   )r/   r0   r   Úview_transformationZpersp_transformationÚdot)ÚErõ   ÚVrZ   Ú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Ì  r/   r0   r   Úproj_transformZinv_transformr“   Zassert_almost_equal)
rË  rp   rq   ri   Ú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Þ   rE   rF   rG   )r   rÎ  r8   r-   r   r   Zadd_collectionrù   )rË  rø   ÚargsrÇ   rp   rq   ri   rÏ  rÐ  rÑ  rÞ   r!   ZayÚazÚlinesr;   ZlinecrE   rF   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÷   ©rf   r=   çš™™™™™É¿rh  )rÌ  Úsplitr/   r0   r   rÎ  rÖ  rþ   rÛ   r8   rù   r£   r¤   )rË  Útsrp   rq   ri   rÏ  rÐ  rÑ  r;   r!   rE   rF   rä   r"   r"   r#   Útest_proj_axes_cubeæ  s    """rÜ  zproj3d_axes_cube_ortho.pngc                  C   sX  t  dddg¡} t  dddg¡}t  dddg¡}d}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 ]\}}}| |||¡ �q | dd¡ | dd¡ d S )NéÈ   rŸ   r   r'   r¶   r×  é–   r÷   r}   r=   rØ  i8ÿÿÿ)r/   r0   r   rÆ  Zortho_transformationrÇ  rÚ  rÎ  rÖ  rþ   rÛ   r8   rù   r£   r¤   )rÈ  rõ   rÉ  rZ   rÊ  ZorthoMrË  rÛ  rp   rq   ri   rÏ  rÐ  rÑ  r;   r!   rE   rF   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_xr/   rØ   r“   Úassert_allcloserC  )rÉ  Z	rotated_Vr"   r"   r#   Útest_rot  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³   rh  r™   r   rê   g{®Gázt?rÎ   g      $@r¶   r'   )r   Zworld_transformationr/   r“   rà  )ZxminZxmaxZyminZymaxZzminZzmaxrË  r"   r"   r#   Ú
test_world"  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¡¡}||d	 ks�t
‚t|||ƒD ]&\}}	}
t||	f|
d	d
�}| |¡ qœ| dd¡ | d	d¡ d S )N)r,   r�   r&   )r=  )r   r   )r   rc   ©rd   rÞ  )r   r   rd   rc   )rŸ   rÞ  rc   rÝ  r   )Úfillr0  rÞ  r}   )r-   r   r   rÛ   r8   rþ   r   Ú_line2d_seg_distr/   r0   rO   r   r‘  r£   r¤   )r;   r!   rp   rq   Úp0Úp1Zdist0ÚdistrE   rF   Údrf   r"   r"   r#   Útest_lines_dists.  s     rë  c                  C   sD   d} d}d}t  | | |¡ t  | ||¡ t | ¡} t  | | |¡ d S )N)re   rc   r{  )re   rc   rd   rä  )r   ræ  r/   r0   )rç  rè  Zp2r"   r"   r#   Útest_lines_dists_nowarningG  s    
rì  c                  C   sÆ   t jddid�\} }|jdddd� | ddgddgddg¡ | ¡ d	ksNt‚| 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   r   r³   rh  ©rE   rF   rG   r'   )r   r'   r´   çš™™™™™ñ?rÙ  g333333ó?FTr)   )r   r'   r´   rî  rŽ  ç333333@rE   rf  )r   r)   r´   rî  rŽ  rï  )r-   r   ÚmarginsrÛ   Z
get_w_limsrO   Z	autoscaleZset_autoscalez_onrP   r"   r"   r#   Útest_autoscaleS  s    

rñ  rg  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%   )r-   rH   rI   r/   rn   rÒ   rþ   ÚgetattrrO   r…   r†   r“   r”   )
rg  r%   r;   r!   rE   rF   Zget_autoscale_onZset_limZget_limZ	post_autor"   r"   r#   Útest_unautoscalea  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_lengthrV   r'   )r-   rH   rI   rw  rx  ry  r\   rP   r"   r"   r#   Útest_axes3d_focal_length_checksw  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ø  g333333Ã?)r-   r   r\   r/   Úinf)r;   r<   r"   r"   r#   Útest_axes3d_focal_length€  s    rû  zaxes3d_ortho.pngc                  C   s"   t  ¡ } | jdd�}| d¡ d S )Nr   r   rV   )r-   rH   rI   r\   rP   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   )r2   r4   r   rV   )r,   r,   r,   )r   Z	proj_typeZ
box_aspectr   )r¶   r'   r)   r'   rf   rœ  rd  rU  rW   T)r1   r2   r4   r-   r   r   r/   r0   r3   r6   r5   r7   r8   r]   ÚdegreesZarctanrC  rï   )r2   r4   r;   r!   r=   rø   Úer"   r"   r#   Útest_axes3d_isometricŽ  s    ý$ &rÿ  Úvalue)ÚsetterÚside)r\  Úleft)r\  Úright)r]  Úbottom)r]  Ú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   )r-   rH   rI   rw  rx  ry  rõ  )r  r  r   Úlimitr;   Ú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+   )r-   r   r/   ÚindicesÚvoxels)Úselfr;   r!   rE   rF   rG   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  )r-   r   r/   r  r  r¼   Úkeysr  )r  r;   r!   rE   rF   rG   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   ©re   re   re   r'   r  r   z0.25r(   Úcyanre   rM  N)r-   r   r/   r  r  Zobject_r  ©r  r;   r!   rE   rF   rG   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  )re   re   re   r+   r  ©.r   ©.r'   ©.r)   rM  N)r-   r   r/   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)   )re   re   re   r,   r'   r   rÎ   rM  zfaces returned for absent voxel)r-   r   r/   r  r6   r  r  Útyper   rO   Úitemsr£  r   r™  )r  r;   r!   rE   rF   rG   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’   Úndimr/   Z	index_exp)rE   ÚslrA   r"   r"   r#   Ú	midpointsó  s    ÿÿz&TestVoxels.test_xyz.<locals>.midpoints)é   r!  r!  g      0@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=   ra   rb   Ú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&  rE   rF   rG   )r/   r  Zonesr-   r   r   r  rw  rx  Ú	TypeErrorÚAttributeError)r  rE   rF   rG   r&  r;   r!   Úkwr"   r"   r#   Útest_calling_conventions  s    
z#TestVoxels.test_calling_conventionsN)Ú__name__Ú
__module__Ú__qualname__Úmpl3d_image_comparisonr  r  r  r  r  r%  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  re   rE  r   r   rG   r8  )r-   rH   rI   rÛ   r/   r“   r”   Zget_data_3dZset_data_3dZ	set_xdataZ	set_ydataZset_3d_propertiesry   )
rE   rF   rG   Zx2Úy2Úz2r;   r!   rÕ  r´  r"   r"   r#   Útest_line3d_set_get_data_3d)  s    

r1  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'   re   )rI   rÛ   Zinvert_yaxisr   r"   r"   r#   Útest_inverted;  s    &r2  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   )
r-   r   Zxaxis_invertedrO   Zyaxis_invertedZzaxis_invertedr£   r¤   r¥   r¾  rP   r"   r"   r#   Útest_inverted_claG  s    r3  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 )NrE   rt   )rg  r   rF   rG   )r-   rH   r   Ztick_paramsr…   r†   r¸  r»  Z	tick1lineÚ_colorrO   r¹  rº  )r;   r!   r¼  r"   r"   r#   Útest_ax3d_tickcolour[  s    
r5  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   @ÑcArE   rF   rG   r¹   r   Úplain)rg  r   r'   )r±   r)   )rg  Z	scilimitsr)   zaxes.formatter.useoffset)rg  Z	useOffsetr+   zaxes.formatter.use_locale)rg  Z	useLocalezaxes.formatter.use_mathtext)rg  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"   r8  r#   Úget_formatters~  s    z-test_ticklabel_format.<locals>.get_formattersr¸  r¹  rº  F)r   r[   r£   r8   Zticklabel_formatrÄ   r>  Zset_scientificZset_powerlimitsZset_useOffsetZset_useLocaleZset_useMathText)	r   r    r<   r!   Úrowr7  r:  r9  Úfmtr"   r"   r#   Útest_ticklabel_formatl  sX    
 ÿ ÿ 
ÿ 
ÿ
þ
 ÿ
ÿr=  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'   rh  rh   )r'   rd  r   r   )r•   r…  )r/   r‚   rn   Ú	ones_liker8   rI   rˆ  )r   r    r…  rE   rF   rG   r‰  rŠ  r‹  r;   r•   r!   r"   r"   r#   Útest_quiver3D_smoke”  s    ý
r?  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)	r-   rH   rI   Z
set_xticksZset_xticklabelsZ
set_yticksZset_yticklabelsÚ
set_zticksZset_zticklabelsr8  r"   r"   r#   Útest_minor_ticks¤  s    rC  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³   r  r+   r(   r   r   é   rh  )ÚzuplimsÚzlolimsZ
erroreveryN)
r/   rn   rØ   rÙ   rÚ   r-   rH   rI   r%  Úerrorbar)
rä   rE   rF   rG   r;   r!   ZesteprA   rE  rF  r"   r"   r#   Útest_errorbar3d_errorevery¯  s    *ÿrH  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)rE   rF   rG   ZxerrZyerrZzerrZcapsizerE  rF  ZyuplimsZecolorrC   N)r-   rH   rI   rG  Zlegend)r;   r!   rê  rþ  r"   r"   r#   Útest_errorbar3dÁ  s     ürJ  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   ©r   Zconstrained_layoutr   r   rE   rF   rG   )Úorientationzorientation=rd   r'   zC4-.ZC1Dr  )ÚlinefmtZ	markerfmtZbasefmtrL  r  )ré   Zmarkeredgewidth)r-   r   r/   rÒ   rØ   rÚ   rÙ   r8   ÚstemrJ   r>  ÚsetZset_linewidth)r;   r<   rÜ   rE   rF   rG   r!   rj   Z
markerlineZ	stemlinesZbaseliner"   r"   r#   Útest_stem3dÑ  s6    
þ


    ýrP  zequal_box_aspect.pngc                  C   sp  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¡ d S )Nr   )r4   r2   r   r   r)   rŸ   r¶   r'   rl   rb   ÚoffrX  )r1   r4   r2   r-   rH   rI   r/   rÒ   rØ   ÚouterrÚ   rÙ   r>  rñ   r0   r3   r5   r6   r7   r8   r­  Ú
get_xlim3dÚ
get_ylim3dÚ
get_zlim3drº   r¼   r\  r]  rò   rg  r:   )r4   r2   r;   r!   r‰  rŠ  rE   rF   rG   r=   rø   rþ  ZxyzlimZXYZlimr"   r"   r#   Útest_equal_box_aspectï  s,    $$ÿ



rV  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   rK  r(   Ú
horizontal)r!   rL  rh  )r-   r   rk  r/   rÏ   rÄ  r?  r…   r†   r!   Zget_positionZextentsrO   )Z	num_plotsr;   r<   r!   Zp_triZcbarr"   r"   r#   Útest_colorbar_pos  s    
þ

ÿ
rX  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ô  r[  )r-   rH   rI   rÛ   rB  Zget_zlimrO   )r;   rà   rá   r"   r"   r#   Útest_shared_axes_retick"  s    r\  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_lim1  s    ztest_pan.<locals>.convert_limr   r   r   )ZbuttonZxdataZydatar'   N)r-   rH   rI   rþ   r…   r†   rS  rT  rU  Z_button_pressr   r   ZMIDDLEZ_on_moverw  ZapproxrO   )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_  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½   )rf   rø   rœ   )r/   r0   r3   r1   r4   rn   ÚTrI   rþ   r…   r†   Úchanged)
r   r    rE   rF   rG   rf   rÉ   Zsc_testrÈ   Zsc_refr"   r"   r#   Útest_scalarmap_updateT  s    þ
rc  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   rC   )r-   rH   Z
subfiguresrI   )r;   Zsfr!   r"   r"   r#   Útest_subfigure_simplej  s    re  Úcomputed_zorder)Úbaseline_imagesr   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)rT   )r   r(   r   )r(   r(   r   )r(   r   r   ÚwhiteÚblackr'   )r-  r.  Úzorder)r)   r)   )r   r,   rt   r)   )rf   rl  )r+   r+   )r'   r+   re   )r   rç   )r   r[  éß   éà   rÎ   r   r¿   rÍ   rv   r¶   )rl   rm   rí   rl  r(   z--ru   )r#  Z	linestylerl   rl  r+   r,   rd   r«   rW   rQ  )r-   rH   rI   rf  r   r™  r•  rÛ   rþ   r£   r¤   r¥   r/   r‚   r  rÒ   rØ   rÚ   rÙ   rñ   r]   rg  )r;   rà   rá   Zcornersr!   ZtriZax3Zax4Údimr§   r¨   r©   ÚangleZX2ZY2ZZ2ZX3ZY3ZZ3r=   rË  ÚthrE   rF   rG   r"   r"   r#   Útest_computed_zorderr  sŒ    ý



2
ü"ü
ü$ü
ü$ýrr  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   re   r   u   x=1.8066, y=1.0367, z=âˆ’0.0553rc   rF   )rZ   Úvertical_axisu"   x=9.1651, y=âˆ’0.9215, z=âˆ’0.0359)r-   rH   rI   r/   rn   rÛ   rÙ   r…   r†   Zformat_coordrO   r]   ©r;   r!   rE   r"   r"   r#   Útest_format_coordÅ  s    



ru  c                  C   sN   t  ¡ } | jdd�}t d¡}| |t |¡¡ | j ¡  | 	¡ dksJt
‚d S )Nr   r   re   )FTF)r-   rH   rI   r/   rn   rÛ   rÙ   r…   r†   Zget_axis_positionrO   rt  r"   r"   r#   Útest_get_axis_positionÖ  s    

rv  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   rh  )rh  rh  rh  r³   r  )r³   rh  r  r   )rE   )r   rh  r  )rF   )r   r³   r  ©rG   )r   r³   r   )r-   rH   rI   rð  rO   rP   r"   r"   r#   Útest_marginsß  s    
rx  zerr, args, kwargs, match)r¶   z!margin must be greater than -0\.5)r'   r¶   r'   )r'   r'   r¶   rE   r¶   rF   rG   )r'   z'Cannot pass both positional and keyword)rE   rF   )r'   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   )rw  rx  r-   rH   rI   rð  )ÚerrrÓ  rÇ   r˜  r;   r!   r"   r"   r#   Útest_margins_errorsî  s    rz  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'   rw  r¨  )rI   r   r   Ztext_2d_to_3dr¥  Zget_position_3drO   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'   )r-   rH   rI   rÛ   rP   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   rF   ©rG   rj   r8  )rI   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)rg  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(   r3  )r-   rH   rI   r/   rÒ   rØ   rþ   rÙ   rÚ   r…   r†   )r;   r!   rq  Ú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'   re   y              Y@r+   r)   r`  r   r   Zhot)rœ   )	r/   r‡  rÚ   rÙ   r-   rH   rI   rñ   r’  ©rF   rE   r0  r;   r!   r=   r"   r"   r#   Ú#test_Poly3DCollection_get_facecolor3  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†  )	r/   r‡  rÚ   rÙ   r-   rH   rI   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   )rX   rY   rZ   rs  )ÚrtolN)r-   Úsubplotr]   rH   r…   r†   Zget_projr/   r“   rà  r9   Z	get_xaxisZ	get_yaxisZ	get_zaxisr´  Úget_dataZ_get_tickdirr”   )rs  Zproj_expectedZaxis_lines_expectedZtickdirs_expectedrŠ  r!   Zproj_actualrA   rg  Zaxis_line_expectedZaxis_line_actualZtickdir_expectedZtickdir_actualr"   r"   r#   Útest_view_init_vertical_axisI  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ÍÌÌÌÌÌì?rd   re   r1  )r–   Úheightrp  Ztheta1Ztheta2r   rG   r~  )r-   r‹  ÚmpatchZArcr‘  r   r  )r!   r  r"   r"   r#   Útest_arc_pathpatch£  s    
  ÿ
r�  )r'   )—Ú	functoolsr1   rw  Zmpl_toolkits.mplot3dr   r   r   r   Z
matplotlibrÄ   Zmatplotlib.backend_basesr   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pyplotr-   Únumpyr/   Úpartialr.  r$   rB   rQ   r`   rs   r{   r‰   rŠ   r—   rª   r®   r°   r¸   ÚmarkZparametrizerÊ   rÑ   rÖ   rÝ   râ   rö   rú   r   r  r  r
  r  r/  r5  r7  r9  r@  rD  rR  rV  r_  ra  rm  ro  rt  ru  rv  rz  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
  r1  r2  r3  r5  r=  r?  rC  rH  rJ  rP  rV  rX  r\  r_  r   Úcontextrc  re  rr  ru  rv  rx  ry  Útupler'  rz  r|  r}  r‚  r…  rˆ  r‰  r�  r�  r"   r"   r"   r#   Ú<module>   s,    ÿ









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


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

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