U
    \	¸a	¸  ã                
   @   s6  d dl Z 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 d dl	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 d dlmZ d dlZ e j!e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„ ƒZ'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*„ ƒZ,e"d+gƒd,d-„ ƒZ-ed.gd/d0d1„ ƒZ.e"d2gƒd3d4„ ƒZ/ed.gd/d5d6„ ƒZ0e"d7gƒd8d9„ ƒZ1e"d:gƒd;d<„ ƒZ2ed.gd/d=d>„ ƒZ3ej4 5d?dd@g¡ed.gd/dAdB„ ƒƒZ6ej4 5dCdDdEg¡ed.gd/dFdG„ ƒƒZ7ed.gd/dHdI„ ƒZ8e"dJgdKd(dLdM„ ƒZ9e"dNgƒdOdP„ ƒZ:e"dQgƒdRdS„ ƒZ;e"dTgd@dUdVdW„ ƒZ<ed.gd/dXdY„ ƒZ=e"dZgd[d(d\d]„ ƒZ>e"d^gd[d(d_d`„ ƒZ?e"dagƒdbdc„ ƒZ@e"ddgƒdedf„ ƒZAe"dggƒdhdi„ ƒZBdjdk„ ZCdldm„ ZDe"dndodpgƒdqdr„ ƒZEed.gd/dsdt„ ƒZFe"dugƒdvdw„ ƒZGdxdy„ ZHed.gd/dzd{„ ƒZIe"d|gƒd}d~„ ƒZJdd€„ ZKe"dgƒd‚dƒ„ ƒZLe"d„gƒd…d†„ ƒZMe"d‡gƒdˆd‰„ ƒZNe"dŠgd@dUd‹dŒ„ ƒZOe"dgd@dUdŽd„ ƒZPe"dgd@dUd‘d’„ ƒZQd“d”„ ZRd•d–„ ZSd—d˜„ ZTdòdšd›„ZUe"dœgƒddž„ ƒZVe"dŸgƒd d¡„ ƒZWd¢d£„ ZXd¤d¥„ ZYe"d¦gƒd§d¨„ ƒZZd©dª„ Z[ej4 5d«d¬¡ej4 5d­d®¡d¯d°„ ƒƒZ\e"d±gd@dUd²d³„ ƒZ]e"d´gƒdµd¶„ ƒZ^ej4 5d·e j_e j`g¡ej4 5d¸d¹dºd»d¼d½d¾g¡d¿dÀ„ ƒƒZaG dÁdÂ„ dÂƒZbdÃdÄ„ Zced.gd/dÅdÆ„ ƒZddÇdÈ„ ZedÉdÊ„ Zfed.gd/dËdÌ„ ƒZged.gd/dÍdÎ„ ƒZhedÏgdÐdÑdÒdÓ„ ƒZie"dÔgƒdÕdÖ„ ƒZje"d×gƒdØdÙ„ ƒZkedÚgdÐe l¡ dÛkr´dÜndÝdÞdßdà„ ƒZmedágdÐdÑdâdã„ ƒZndädå„ Zodædç„ Zpdèdé„ Zqej4 rd¡ed.gd/dêdë„ ƒƒZsdìdí„ Ztedîgdddïdðdñ„ ƒZudS )óé    N)ÚAxes3DÚaxes3dÚproj3dÚart3d)ÚMouseButton)ÚMatplotlibDeprecationWarning)Úcm)Úcolors)Úimage_comparisonÚcheck_figures_equal)Ú
mock_event)ÚLineCollectionÚPolyCollection)ÚCircleTÚdefault)Úremove_textÚstylec               	   C   s8   t  ¡ } | jdd}t t¡ | d¡ W 5 Q R X d S )NÚ3d©Ú
projectionÚequal)ÚpltÚfigureÚadd_subplotÚpytestÚraisesÚNotImplementedErrorZ
set_aspect©ÚfigÚax© r    úC/tmp/pip-unpacked-wheel-wjyw_3jo/mpl_toolkits/tests/test_mplot3d.pyÚtest_aspect_equal_error   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ÚbÚyé   é   é
   r   ÚcZedgeçš™™™™™é?)ÚzsÚzdirZalignÚcolorÚalpha)r   r   r   ÚzipÚnpÚarangeÚlenÚbar)r   r   r*   ÚzÚxsÚysÚcsr    r    r!   Ú
test_bar3d!   s    "

r9   c               
   C   s\   t  ¡ } | jdd}dD ]>}t t|ƒ¡}t |¡}t |¡}|j|||ddd|d qd S )Nr   r   )ÚredÚgreenZblueZyellowé   ©r.   )r   r   r   r1   r2   r3   Z
zeros_likeÚbar3d)r   r   r*   r6   r7   r,   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 ]6\}\}	}
|j|||d dd|dd |j|	|
d qŒ|j ¡  d S )Né   é   r<   )iÄÿÿÿr'   )r'   r'   )r'   éâÿÿÿ)éx   rB   ©Úfigsizer   r   ©Ú
subplot_kwr   T©Úshade)ÚazimÚelev)r1   r2   ÚmeshgridÚravelr   r   Ú	figaspectr3   ÚsubplotsÚdictr0   r>   Ú	view_initÚcanvasÚdraw)Úxr&   Úx2dÚy2dr5   Zviewsr   Úaxsr   rJ   rK   r    r    r!   Útest_bar3d_shaded9   s     

 þrX   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@   rA   r   r<   FrH   )
r   r   r   r1   r2   rL   rM   r>   rR   rS   )r   r   rT   r&   rU   rV   r5   r    r    r!   Útest_bar3d_notshadedM   s    

rY   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   éZ   )ZazdegZaltdeg)é   r@   c                    s   g | ]}t  |ˆ  ¡‘qS r    )r   Úcoolwarm)Ú.0Úi©Úarear    r!   Ú
<listcomp>h   s     z*test_bar3d_lightsource.<locals>.<listcomp>T)	rT   r&   r5   ZdxZdyÚdzr.   rI   Zlightsourceé   )r   r   r   ÚmcolorsZLightSourcer1   rL   r2   rM   Úranger>   ÚtestingÚassert_array_equalZ_facecolor3d)
r   r   ZlsÚlengthÚwidthrT   r&   rb   r.   Z
collectionr    r_   r!   Útest_bar3d_lightsourceZ   s&    
    þrj   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   çš™™™™™©?r5   éœÿÿÿ)r-   ÚoffsetÚcmaprT   éØÿÿÿr&   é(   éd   )r   r   r   r   Úget_test_dataZcontourr   r\   Úset_xlimÚset_ylimÚset_zlim©r   r   ÚXÚYÚZr    r    r!   Útest_contour3du   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 rk   )r   r   r   r   rs   Úcontourfr   r\   rt   ru   rv   rw   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   çš™™™™™¹?rA   çš™™™™™¹¿)rn   Úlevelsro   éÿÿÿÿr<   )r   r   r   r1   rL   r2   Úclipr|   r   r\   rt   ru   rv   rw   r    r    r!   Útest_contourf3d_fill   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   r   r1   ÚrandomÚseedZrandr   Z
tricontourZtricontourf)r   rT   r&   r5   r   r    r    r!   Útest_tricontourž   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@   rr   r~   r   r<   )	r   r   r   r1   ÚlinspaceÚpiÚsinÚcosÚplot)r   r   Úthetar5   r#   rT   r&   r    r    r!   Útest_lines3d­   s    r•   Zpng)Ú
extensionsc                 C   s<   | j dd}| dgdgd¡ |j dd}| ddd¡ d S )Nr   r   r<   Úo)r   r“   ©Úfig_testÚfig_refÚ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   )r1   r’   r   Úexp)Útr    r    r!   ÚfÃ   s    ztest_mixedsubplots.<locals>.fç        g      @r   r‡   ç       @rD   r   r<   Zbozk--r;   )ÚmarkerfacecolorTr   r   éûÿÿÿrA   r€   rq   r   F)ÚrcountÚccountÚ	linewidthÚantialiasedr„   )r1   r2   r   r   rN   r   r“   ÚgridrL   Úhypotr‘   Úplot_surfaceÚ
set_zlim3d)	r    Út1Út2r   r   rx   ry   ÚRrz   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)r   ÚtextZtight_layoutr˜   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   r)   r#   r—   )r*   Úmarkerr(   r%   ú^r   r„   rx   ©r   r   r   Úscatterr1   r2   )r   r   rT   r&   r5   r    r    r!   Útest_scatter3dæ   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   r)   r#   Únoner—   )Ú	facecolorÚ	edgecolorrµ   r(   r%   r²   )r.   rµ   r·   r   r    r    r!   Útest_scatter3d_coloró   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   r)   r—   )rµ   ÚC1ÚC2g333333Ó?çffffffæ?rA   FéK   r[   )rµ   r»   r¼   r/   Ú
depthshader²   Ú
linewidths)r   r¸   r1   r2   Úset_facecolorÚset_edgecolorÚ	set_alphaÚget_depthshadeÚAssertionErrorÚset_depthshadeZ	set_sizesÚfullZset_linewidths)rš   r™   Úax_testr*   Úax_refr    r    r!   Útest_scatter3d_modification  s*    ÿ



  
  þrÍ   rÂ   Fc                 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.Nr)   é   rr   r   r   r<   ÚC0r¾   rA   r¿   rc   r@   ZC3ZC4ZC5ZC6é	   ZC7c                 S   s   g | ]}|  ¡ ‘qS r    )Úflatten©r]   Úar    r    r!   ra   2  s   ÿz*test_scatter3d_sorting.<locals>.<listcomp>r   r   c                 s   s   | ]}t  |¡V  qd S )N)r1   ÚuniquerÒ   r    r    r!   Ú	<genexpr>8  s     z)test_scatter3d_sorting.<locals>.<genexpr>©Zdtype)r²   ÚfcÚecÚlwr/   rÂ   )r1   Úmgridr2   ÚsizeÚreshapeÚshaperÊ   r   Ú	itertoolsÚproductÚmaZmasked_arrayÚfloatÚrepeatÚsumÚmaskr¸   )rš   r™   rÂ   r&   rT   r5   ZsizesÚ
facecolorsÚ
edgecolorsrÃ   rÌ   Zsetsr²   r×   rØ   rÙ   ZsubsetrË   r    r    r!   Útest_scatter3d_sorting  sR    þÿþýÿÿ
  ÿrç   rJ   éÎÿÿÿé‚   c              	   C   s¨   ddg}ddg}ddg}ddg}| j dd}|j|||d|d	 |jd|d
 |j dd}|j|ddd… |ddd… |ddd… d|ddd… d	 |j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   r%   r&   r   r   é¬  ©r²   r*   ©rK   rJ   N)r   r¸   rQ   ©r™   rš   rJ   rT   r&   r5   r.   r   r    r    r!   Ú$test_marker_draw_order_data_reversedP  s    	<rî   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 |j dd}| ¡  |j|||d	|ddd… d
 |j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.
    ré   r„   r<   r   r%   r&   r   r   rê   rë   rì   Né´   )r   Úset_axis_offr¸   rQ   rí   r    r    r!   Ú#test_marker_draw_order_view_rotatede  s    rñ   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   rA   r)   rT   )r,   r-   r&   )r   r   r   r1   r2   r“   )r   r   r6   r7   r    r    r!   Útest_plot_3d_from_2d}  s    rò   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¤   rA   r€   rq   r   )r¥   r¦   ro   rÙ   r¨   ç)\Âõ(ð¿ç)\Âõ(ð?rŠ   )ÚshrinkÚaspect)r   ÚrcParamsr   r   r1   r2   rL   rª   r‘   r«   r   r\   rv   Úcolorbar)r   r   rx   ry   r¯   rz   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¤   rA   r€   r   r<   F)ÚrstrideÚcstrider.   rÙ   r¨   ró   rô   )
r   r   r   r1   r2   rL   Úsqrtr‘   r«   rv   )r   r   rx   ry   r¯   rz   r    r    r!   Útest_surface3d_shaded™  s    
  ÿrý   z
text3d.png)r   c                  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   ©NrT   r&   r5   )r<   r<   r   ©r<   r<   r<   ©r   rc   r@   rÐ   é   r   ©rc   r@   é   r  r   r   ©r@   r   rA   rc   r<   r  z(%d, %d, %d), dir=%sr<   r:   r=   rl   gffffffî?z2D Text)Z	transformr   r)   zX axiszY axiszZ axis)r   r   r   r0   r³   Ztext2DZ	transAxesÚ
set_xlim3dÚ
set_ylim3dr¬   Ú
set_xlabelÚ
set_ylabelÚ
set_zlabel)r   r   Úzdirsr6   r7   r,   r-   rT   r&   r5   Úlabelr    r    r!   Útest_text3d§  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 )Nrþ   r   r  r  r   r   r   r)   ú(z, z), dir=)r-   )r   r  r  r¬   r0   r³   Zset_position_3d)rš   r™   r
  r6   r7   r,   rË   r-   rT   r&   r5   rŸ   rÌ   r    r    r!   Útest_text3d_modification¿  s"    (r  ztrisurf3d.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|||tjdd d S )Né$   r  ç      À?ç      ð?r   r   F©Zendpoint.r<   ©Úaxisr   r   çš™™™™™É?)ro   r§   )r1   r   r   râ   ÚnewaxisÚappendr’   rÑ   r‘   r   r   r   Úplot_trisurfr   Zjet©	Zn_anglesZn_radiiZradiiZanglesrT   r&   r5   r   r   r    r    r!   Útest_trisurf3dØ  s    $r  ztrisurf3d_shaded.pngc            	      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 )Nr  r  r  r  r   r   Fr  .r<   r  r   r   rŠ   r  )r.   r§   )r1   r   r   râ   r  r  r’   rÑ   r‘   r   r   r   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   rl   é   ©r¥   r¦   ©r   r   r   r   rs   Úplot_wireframerw   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   rl   r  r   r  r  rw   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   rl   r   r)   ©rú   rû   r  rw   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   rl   r   r#  )	r   r   r   r   rs   r   r   Ú
ValueErrorr   rw   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   rl   r)   é2   )rú   r¦   )rû   r¥   )
r   r   r   r   rs   r   r   r%  r   r«   rw   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„   r+   ù              $@ç333333ã?ù              @ç>,p½ ê?)ÚtipÚmiddleÚtailr   r   r   T©rh   ÚpivotÚ	normalize)	r1   Zogridr‘   r   r’   r   r   r   Úquiver)rT   r&   r5   ÚuÚvÚwr1  r   r    r    r!   Útest_quiver3d&  s    (024r7  c           	      C   sP   |j dd g  } } } } }}| j dd}|j||||||dddd	 d S )Nr   r   r   r-  Tr0  )r   r3  )	r™   rš   rT   r&   r5   r4  r5  r6  r   r    r    r!   Útest_quiver3d_empty2  s    r8  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„   r+   r)  r*  r+  r,  çš™™™™™Ù¿r   F)ÚcopyrÀ   r-  Tr0  )r   r   r   r1   rÚ   r‘   r   r’   rà   Zmasked_wherer3  )r   r   rT   r&   r5   r4  r5  r6  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   )r  r¡   r¡   r<   )r<   r   r   r<   )r   r   r   r   Ú	add_patchr   Zpatch_2d_to_3drÄ   rd   Z
same_colorZget_facecolorrÈ   rR   rS   )r   r   Zcircler    r    r!   Útest_patch_modificationL  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<  rl   )r   r   r  r¡   rŠ   r  r[   )rÃ   r   r   r¿   rÀ   F)rÃ   r¼   r»   r/   rÂ   )r   r1   Úarrayr   ZPatch3DCollectionr   Úadd_collection3drÅ   rÄ   rÆ   rÇ   rÈ   rÉ   )r™   rš   Zpatch1Zpatch2rå   r*   rË   rÌ   r    r    r!   Ú"test_patch_collection_modificationY  s.    








  þrA  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   r   r   r1   r?  rá   r   ÚPoly3DCollectionr@  ©r   r   Zpoly1Zpoly2Zc1Úc2r    r    r!   Útest_poly3dcollection_closedu  s    $$ ÿ ÿ
rH  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   rF   )r   r   Zpoly_collection_2d_to_3dÚ
isinstancerE  rÈ   Ú	get_pathsr   rO   rP   Z
add_artistZdo_3d_projectionr1   ÚisnanrR   rS   )Úpolyr   r   Zminzr    r    r!   Ú#test_poly_collection_2d_to_3d_empty„  s    

rM  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[   rB  )rŠ   rŠ   r<   TrC  rŠ   F)rÃ   rD  )r<   rŠ   rŠ   )r   r   r   r1   r?  rá   r   rE  rÆ   rÄ   rÅ   r@  rF  r    r    r!   Útest_poly3dcollection_alpha“  s    $$ ÿ




rN  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@   rr   r~   r   r<   r„   r[   r  r   r   r   Útwilight©ro   Únorm©r,   r¤   rA   rc   )r1   r   r   r‘   r’   Úcolumn_stackrÜ   Úconcatenater   r   r   Ú	Normalizer   Ú	set_arrayÚmodr@  rÈ   rt   ru   rv   ©r”   r5   r#   rT   r&   ZpointsÚsegmentsr   r   rQ  ÚlcÚliner    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   rr   r<   r„   r  r   r   rO  rP  rR  r¤   rA   rŽ   rc   )r1   r   r   r‘   r’   rS  rÜ   rT  r   r   r   rU  r   rV  r@  rÈ   rt   ru   rv   rX  r    r    r!   Útest_add_collection3d_zs_scalarÂ  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 LABELr)   )ÚlabelpadzY LABELzZ LABELr(   rp   rA   )r   r   Zadd_axesr   Úxaxisr^  Úmplr÷   rÈ   r  r  r	  ÚyaxisÚzaxisÚ	enumerateÚget_major_ticksZset_padZget_pad)r   r   r^   Útickr    r    r!   Útest_axes3d_labelpadÜ  s    

rf  zaxes3d_cla.pngc                  C   s.   t  ¡ } | jddddd}| ¡  | ¡  d S )Nr<   r   r   )r   r   r   rð   Úclar   r    r    r!   Útest_axes3d_clað  s    rh  zaxes3d_rotated.pngc                  C   s*   t  ¡ } | jddddd}| dd¡ d S )Nr<   r   r   rZ   é-   )r   r   r   rQ   r   r    r    r!   Útest_axes3d_rotatedù  s    rj  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Š   r)   rr   )Únum)é   rc   rD   r<   r   r   r   )r1   r   rL   r‹   Úrandnr   r   r   r   r   r%  r«   )rT   r&   rx   ry   r5   r   r   r    r    r!   Útest_plotsurface_1d_raises   s    rn  c                  C   sZ   t  dddg¡} t  dddg¡}t  dddg¡}t | ||¡}t dd¡}t  ||¡}|S )Nr‰   iüÿÿiÐ  rr   r   r<   rm   )r1   r?  r   Úview_transformationZpersp_transformationÚdot)ÚEr¯   ÚVÚviewMZperspMÚMr    r    r!   Ú_test_proj_make_M  s    ru  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@)ru  r1   r?  r   Úproj_transformZinv_transformrf   Zassert_almost_equal)
rt  r6   r7   r,   Ú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—   rT   r&   r5   )r   rw  r0   r   rO   r   Zadd_collectionr³   )rt  r²   ÚargsÚkwargsr6   r7   r,   rx  ry  rz  r—   r   ZayÚazÚlinesr   ZlinecrT   r&   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<   rv  i  r±   ©r*   r#   çš™™™™™É¿r  )ru  Úsplitr1   r?  r   rw  r€  r¸   r“   r0   r³   rt   ru   )rt  Útsr6   r7   r,   rx  ry  rz  r   r   rT   r&   rŸ   r    r    r!   Útest_proj_axes_cube7  s    """r†  zproj3d_axes_cube_ortho.pngc                  C   sR  t  dddg¡} t  dddg¡}t  dddg¡}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éÈ   rr   r   r<   r„   r  é–   r±   é,  r#   r‚  i8ÿÿÿ)r1   r?  r   ro  Zortho_transformationrp  r„  rw  r€  r¸   r“   r0   r³   rt   ru   )rq  r¯   rr  rs  ZorthoMrt  r…  r6   r7   r,   rx  ry  rz  r   r   rT   r&   rŸ   r    r    r!   Útest_proj_axes_cube_orthoM  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   rc   r[   r   rŠ   )r   Zrot_xr1   r   rf   Úassert_allcloserü   )rr  Z	rotated_Vr    r    r!   Útest_roth  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)rr   rC   )rm   rr   )r   r  rl   r   r¤   g{®Gázt?rŠ   g      $@r„   r<   )r   Zworld_transformationr1   rf   r‹  )ZxminZxmaxZyminZymaxZzminZzmaxrt  r    r    r!   Ú
test_worldr  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¡¡}t|||ƒD ]&\}}}	t
||f|	d	d
}
| |
¡ qŒ| dd¡ | d	d¡ d S )N)r@   rc   r   )rö   )rE   rG   )r   r'   )r(   rˆ  )r   r   r(   r'   )rr   rˆ  r'   r‡  r   )Úfillrè   rˆ  r‰  )r   rO   rP   r“   r0   r¸   r   Z_line2d_seg_distr1   r?  r   r=  rt   ru   )r   r   r6   r7   Zp0Úp1ÚdistrT   r&   Údr*   r    r    r!   Útest_lines_dists~  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‚d S )Nr   r   rF   r   r   r  ©rT   r&   r5   r<   )r   r<   r‚   çš™™™™™ñ?rƒ  g333333ó?FTr   )r   r<   r‚   r”  r9  g333333@)r   rO   Zmarginsr“   Z
get_w_limsrÈ   Z	autoscaleZset_autoscalez_onr   r    r    r!   Útest_autoscale•  s    

r•  r  r“  Úauto)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   rr   r‚   r   Zget_autoscaleZ_onÚset_ZlimÚget_)ç      à¿rŠ   )r–  )r   r   r   r1   r2   r   r¸   ÚgetattrrÈ   rR   rS   rf   rg   )
r  r–  r   r   rT   r&   Zget_autoscale_onZset_limZget_limZ	post_autor    r    r!   Útest_unautoscale   s    

r›  zaxes3d_ortho.pngc                  C   s"   t  ¡ } | jdd}| d¡ d S )Nr   r   Úortho)r   r   r   Zset_proj_typer   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 S )Nr   )Úcombinationsrß   r   rœ  )r@   r@   r@   )r   Z	proj_typeZ
box_aspectrF   )r„   r<   r   r<   r*   rB  r  iÓÿÿÿrì   T)rÞ   rž  rß   r   rO   rP   r1   r?  ÚlistÚabsrã   Úplot3Dr0   rQ   ÚdegreesZarctanrü   r©   )rž  rß   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   r   r   r   r   r%  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   rF   )rA   r@   r[   )r   rO   r1   ÚindicesÚvoxels)Úselfr   r   rT   r&   r5   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   rF   )rA   rA   r@   r   g      ø?g]Âõ(\@r[   r¾   )rÃ   r¼   r¿   )r   rO   r1   r°  r±  ÚmaxÚkeysrÅ   )r²  r   r   rT   r&   r5   r±  r5  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   rF   ©r)   r)   r)   r<   rÏ   rÖ   z0.25rA   Zcyanr)   ©rå   N)r   rO   r1   r°  rÊ   Zobject_r±  ©r²  r   r   rT   r&   r5   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   rF   r·  )r)   r)   r)   r[   rÐ   ©.r   ©.r<   ©.r   r¸  N)r   rO   r1   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   rF   r·  r   )r)   r)   r)   r@   r<   r   rŠ   r¸  zfaces returned for absent voxel)r   rO   r1   r°  r   r¾  r±  ÚtyperP   rÈ   ÚitemsrI  r   rE  )r²  r   r   rT   r&   r5   Zv1Zv2r±  r	   r5  ZcoordrL  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   rF   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¢   )re   Úndimr1   Z	index_exp)rT   Úslr^   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   rO   r1   r°  r¾  rÝ   r±  r…   )r²  r   r   rÆ  r#   r$   r%   ÚrcÚgcZ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 )N)r[   r@   rA   )r   r[   r@   r   r   rF   rB  )r¼   Úfilledr±  )Úmatch)rË  )rË  rT   r&   r5   )r1   r°  Zonesr   rO   rP   r±  r   r   Ú	TypeErrorÚAttributeError)r²  rT   r&   r5   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|	 ¡ ¡ d S )Nr   r<   r   r[   r@   rA   rc   r  r  rÐ   r)   é   r   r   )	r   r   r   r“   r1   rf   rg   Zget_data_3dZset_data_3d)
rT   r&   r5   Zx2Úy2Zz2r   r   r  r[  r    r    r!   Útest_line3d_set_get_data_3dX  s    r×  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<   r)   )r   r“   Zinvert_yaxis)r™   rš   r   r    r    r!   Útest_invertedd  s    &rØ  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   rF   r<   r   )
r   rO   Zxaxis_invertedrÈ   Zyaxis_invertedZzaxis_invertedrt   ru   rv   rg  r   r    r    r!   Útest_inverted_clap  s    rÙ  c               	   C   s¾   t  ¡ } t t¡ t| ƒ}W 5 Q R X |jddd |jddd |jddd | j ¡  |j	 
¡ D ]}|jjdksdt‚qd|j 
¡ D ]}|jjdks„t‚q„|j 
¡ D ]}|jjdks¤t‚q¤d S )NrT   r:   )r  r	   r&   r5   )r   r   r   Zwarnsr   r   Ztick_paramsrR   rS   r_  rd  Z	tick1lineZ_colorrÈ   ra  rb  )r   r   re  r    r    r!   Útest_ax3d_tickcolour„  s    
rÚ  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@   rA   r   r   rF   g    ÐcAg   @ÑcArT   r&   r5   Zbothr   Úplain)r  r   r<   )r~   r   )r  Z	scilimitsr   zaxes.formatter.useoffset)r  Z	useOffsetr[   zaxes.formatter.use_locale)r  Z	useLocalezaxes.formatter.use_mathtext)r  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!   ra   ©  s     zAtest_ticklabel_format.<locals>.get_formatters.<locals>.<listcomp>r    )r   Únamesr    rÝ  r!   Úget_formatters¨  s    z-test_ticklabel_format.<locals>.get_formattersr_  ra  rb  F)rO   Zflatrt   r0   Zticklabel_formatr`  r÷   Zset_scientificZset_powerlimitsZset_useOffsetZset_useLocaleZset_useMathText)	r™   rš   rW   r   ÚrowrÜ  rß  rÞ  Úfmtr    r    r!   Útest_ticklabel_format–  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<   r  r+   )r<   r  r   r   )rh   r1  )r1   rL   r2   Ú	ones_liker0   r   r3  )r™   rš   r1  rT   r&   r5   r4  r5  r6  r   rh   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   r   r   Z
set_xticksZset_xticklabelsZ
set_yticksZset_yticklabelsÚ
set_zticksZset_zticklabelsrÝ  r    r    r!   Útest_minor_ticksÎ  s    rè  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[   rA   r   r   é   r  )ÚzuplimsÚzlolimsZ
erroreveryN)
r1   r2   r   r‘   r’   r   r   r   rÛ   Úerrorbar)
rŸ   rT   r&   r5   r   r   Zestepr^   rê  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@   rA   rŠ   FTZpurplezError lines)rT   r&   r5   ZxerrZyerrZzerrZcapsizerê  rë  ZyuplimsZecolorr  N)r   r   r   rì  Zlegend)r   r   r‘  r£  r    r    r!   Útest_errorbar3dë  s     ürî  z
stem3d.pngÚx86_64r¡   gú~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  rc   Tr   r   ©rE   Zconstrained_layoutrG   r   rT   r&   r5   )Úorientationzorientation=r(   r<   zC4-.ZC1Dr¿   )ÚlinefmtZ	markerfmtZbasefmtrñ  rº   )r£   Zmarkeredgewidth)r   rO   r1   r   r   r’   r‘   r0   ÚstemÚ	set_titlerã  ÚsetZset_linewidth)r   rW   r”   rT   r&   r5   r   r-   Z
markerlineZ	stemlinesZbaseliner    r    r!   Útest_stem3dû  s6    
þ


    ýrö  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   )rß   rž  r   r   r   rr   r„   r<   r.   r%   Úoffrÿ   )rÞ   rß   rž  r   r   r   r1   r   r   Úouterr’   r‘   rã  r«   r?  rŸ  rã   r   r¡  r0   rS  Ú
get_xlim3dÚ
get_ylim3dÚ
get_zlim3dÚminr´  r  r  r¬   r  Zset_box_aspect)rß   rž  r   r   r4  r5  rT   r&   r5   r#   r²   r£  ZxyzlimZXYZlimr    r    r!   Útest_equal_box_aspect  s,    $$ÿ



rý  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@   rA   Tr   r   rð  rA   Z
horizontal)r   rñ  r  )r   rO   r  r1   r‹   rm  rø   rR   rS   r   Úget_positionZextentsrÈ   )Z	num_plotsr   rW   r   Zp_triZcbarr    r    r!   Útest_colorbar_pos<  s    
þ

ÿ
rÿ  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   r   r   r“   rç  Zget_zlimrÈ   )r   r›   rœ   r    r    r!   Útest_shared_axes_retickL  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_lim[  s    ztest_pan.<locals>.convert_limr   r   r   )ÚbuttonZxdataZydatar<   N)r   r   r   r¸   rR   rS   rù  rú  rû  Z_button_pressr   r   ZMIDDLEZ_on_mover   ZapproxrÈ   )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_panX  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   rA   r<   éo   r   r   rq   Zviridis)r*   r²   ro   )r1   r?  rŸ  rÞ   rß   r2   ÚTr   r¸   rR   rS   Úchanged)
r™   rš   rT   r&   r5   r*   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   r  )r   r   Z
subfiguresr   )r   Zsfr   r    r    r!   Útest_subfigure_simple”  s    r  zscatter_spiral.png)Zbaseline_imagesr   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   rc   é   r<   rA   rë   )r   r   r   r1   r   r   r¸   r‘   r’   rR   rS   )r   r   ÚthZscr    r    r!   Útest_scatter_spiralœ  s
    ,r  )r<   )vÚ	functoolsrÞ   Úplatformr   Zmpl_toolkits.mplot3dr   r   r   r   Z
matplotlibr`  Zmatplotlib.backend_basesr   Zmatplotlib.cbookr   r   r	   rd   Zmatplotlib.testing.decoratorsr
   r   Zmatplotlib.testing.widgetsr   Zmatplotlib.collectionsr   r   Zmatplotlib.patchesr   Zmatplotlib.pyplotZpyplotr   Znumpyr1   ÚpartialrÔ  r"   r9   r?   rX   rY   rj   r{   r}   r†   r   r•   r   r°   r´   r¹   r½   rÍ   ÚmarkZparametrizerç   rî   rñ   rò   rù   rý   r  r  r  r  r!  r"  r$  r&  r(  r7  r8  r;  r>  rA  rH  rM  rN  r\  r]  rf  rh  rj  rn  ru  r{  r€  r†  rŠ  rŒ  r  r’  r•  r›  r  r¤  ÚinfÚnanr®  r¯  r×  rØ  rÙ  rÚ  râ  rä  rè  rí  rî  Úmachinerö  rý  rÿ  r  r  r   r  r  r  r    r    r    r!   Ú<module>   sV    ÿ

















6



	










ÿ


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



ÿ

"&

þ