a
    ìÝEb=â  ã                   @   s\  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j, -d&d'g d(¢gd)g d*¢gd+g d,¢gg¡ed-gd.�d/d0„ ƒƒZ.e"d1gd2d3�d4d5„ ƒZ/d6d7„ Z0e"d8gƒd9d:„ ƒZ1ed-gd.�d;d<„ ƒZ2e"d=gƒd>d?„ ƒZ3ed-gd.�d@dA„ ƒZ4e"dBgƒdCdD„ ƒZ5e"dEgƒdFdG„ ƒZ6ed-gd.�dHdI„ ƒZ7ej, -dJddKg¡ed-gd.�dLdM„ ƒƒZ8ej, -dNdOdPg¡ed-gd.�dQdR„ ƒƒZ9ed-gd.�dSdT„ ƒZ:e"dUgdVd3�dWdX„ ƒZ;e"dYgƒdZd[„ ƒZ<e"d\gƒd]d^„ ƒZ=e"d_gƒd`da„ ƒZ>e"dbgƒdcdd„ ƒZ?e"degdKdf�dgdh„ ƒZ@ed-gd.�didj„ ƒZAe"dkgdld3�dmdn„ ƒZBe"dogdld3�dpdq„ ƒZCe"drgƒdsdt„ ƒZDe"dugƒdvdw„ ƒZEe"dxgƒdydz„ ƒZFd{d|„ ZGd}d~„ ZHe"g d¢ƒd€d�„ ƒZIed-gd.�d‚dƒ„ ƒZJe"d„gƒd…d†„ ƒZKd‡dˆ„ ZLed-gd.�d‰dŠ„ ƒZMd‹dŒ„ ZNe"d�gƒdŽd�„ ƒZOd�d‘„ ZPe"d’gƒd“d”„ ƒZQe"d•gƒd–d—„ ƒZRe"d˜gƒd™dš„ ƒZSe"d›gdKdf�dœd�„ ƒZTe"džgdKdf�dŸd „ ƒZUe"d¡gdKdf�d¢d£„ ƒZVd¤d¥„ ZWd¦d§„ ZXd¨d©„ ZY�d!d«d¬„ZZe"d­gƒd®d¯„ ƒZ[e"d°gƒd±d²„ ƒZ\d³d´„ Z]dµd¶„ Z^e"d·gƒd¸d¹„ ƒZ_dºd»„ Z`ej, -d¼d½¡ej, -d¾d¿¡dÀdÁ„ ƒƒZae"dÂgdKdf�dÃdÄ„ ƒZbe"dÅgƒdÆdÇ„ ƒZcej, -dÈe jde jeg¡ej, -dÉg dÊ¢¡dËdÌ„ ƒƒZfG dÍdÎ„ dÎƒZgdÏdÐ„ Zhed-gd.�dÑdÒ„ ƒZidÓdÔ„ ZjdÕdÖ„ Zked-gd.�d×dØ„ ƒZled-gd.�dÙdÚ„ ƒZmedÛgdÜdÝ�dÞdß„ ƒZne"dàgƒdádâ„ ƒZoe"dãgƒdädå„ ƒZpedægdÜe q¡ dçk�r dèndédê�dëdì„ ƒZredígdÜdÝ�dîdï„ ƒZsdðdñ„ Ztdòdó„ Zudôdõ„ Zve
jw xd¡ed-gd.�död÷„ ƒƒZydødù„ Zzedúgdd-gdû�düdý„ ƒZ{edþgdddÿ��d �d„ ƒZ|ej, -�d�dg �d¢g �d¢g �d¢g �d¢g�d�d	g�d
�dgf�d�d	g�d�dgf�d�dg�d�dgfgg �d¢f�dg �d¢g �d¢g �d¢g �d¢g�d	�dg�d�dgf�d�dg�d�dgf�d�d	g�d
�dgfgg �d¢f�dg �d¢g �d¢g �d¢g �d¢g�d�dg�d�dgf�d	�dg�d�d
gf�d	�dg�d�dgfgg �d¢fg¡�d�d„ ƒZ}�d�d„ Z~�d�d„ Z�d�d „ Z€d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   sL   t  ¡ } | jdd�}t t¡� | d¡ W d   ƒ n1 s>0    Y  d S )NÚ3d©Ú
projectionÚequal)ÚpltÚfigureÚadd_subplotÚpytestÚraisesÚNotImplementedErrorZ
set_aspect©ÚfigÚax© r    ú_/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/mpl_toolkits/tests/test_mplot3d.pyÚtest_aspect_equal_error   s    r"   z	bar3d.pngc               
   C   sv   t  ¡ } | jdd�}tg d¢g d¢ƒ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   r(   Úcr   r&   Úedgeçš™™™™™é?)ÚzsÚzdirÚalignÚcolorÚalpha)r   r   r   ÚzipÚnpÚarangeÚlenÚbar)r   r   r*   ÚzÚxsÚysÚcsr    r    r!   Ú
test_bar3d!   s    

r;   c               
   C   s\   t  ¡ } | jdd�}dD ]>}t t|ƒ¡}t |¡}t |¡}|j|||ddd|d� qd S )Nr   r   )ÚredÚgreenÚblueÚyellowé   ©r0   )r   r   r   r3   r4   r5   Ú
zeros_likeÚbar3d)r   r   r*   r8   r9   r-   r    r    r!   Útest_bar3d_colors-   s    

rD   zbar3d_shaded.pngc               
   C   sÎ   t  d¡} t  d¡}t  | |¡\}}| ¡ | ¡  }}|| d }g d¢}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   rG   ©Úfigsizer   r   ©Ú
subplot_kwr   T©Úshade©ÚazimÚelev)r3   r4   ÚmeshgridÚravelr   r   Ú	figaspectr5   ÚsubplotsÚdictr2   rC   Ú	view_initÚcanvasÚdraw)Úxr&   Úx2dÚy2dr7   Zviewsr   Úaxsr   rP   rQ   r    r    r!   Útest_bar3d_shaded9   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   rE   rF   r   r@   FrM   )
r   r   r   r3   r4   rR   rS   rC   rX   rY   )r   r   rZ   r&   r[   r\   r7   r    r    r!   Útest_bar3d_notshadedM   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   éZ   )ZazdegZaltdeg)é   rE   c                    s   g | ]}t  |ˆ  ¡‘qS r    )r   Úcoolwarm)Ú.0Úi©Úarear    r!   Ú
<listcomp>h   ó    z*test_bar3d_lightsource.<locals>.<listcomp>T)	rZ   r&   r7   ZdxZdyÚdzr0   rN   Zlightsourceé   )r   r   r   ÚmcolorsZLightSourcer3   rR   r4   rS   ÚrangerC   ÚtestingÚassert_array_equalZ_facecolor3d)
r   r   ZlsÚlengthÚwidthrZ   r&   ri   r0   Z
collectionr    re   r!   Útest_bar3d_lightsourceZ   s    
þrq   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   çš™™™™™©?r7   éœÿÿÿ)r.   ÚoffsetÚcmaprZ   éØÿÿÿr&   é(   éd   )r   r   r   r   Úget_test_dataÚcontourr   rb   Ú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 rr   )r   r   r   r   rz   Úcontourfr   rb   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   çš™™™™™¹?rF   çš™™™™™¹¿)ru   Úlevelsrv   éÿÿÿÿr@   )r   r   r   r3   rR   r4   Úclipr„   r   rb   r|   r}   r~   r   r    r    r!   Útest_contourf3d_fill�   s    $rŽ   zextend, levelsÚboth)r‡   rE   rj   Úmin)r‡   rE   rj   é   Úmax)r   r‡   rE   rj   Zpng)Ú
extensionsc                 C   sò   t  t  ddd¡t  ddd¡¡\}}|d |d  }t d¡ ¡ }| |dƒ¡ | |dƒ¡ dd|d	œ}|jd
d�}	|	j	|||fdg d¢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Úvmaxrv   r   r   r‹   )r   r‡   rE   rj   r‘   Úextendéöÿÿÿr)   )r3   rR   r4   r   Úget_cmapÚcopyZ	set_underZset_overr   r„   r|   r}   r~   )Úfig_testÚfig_refr™   r‹   r€   r�   r‚   rv   Ú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   r   r3   ÚrandomÚseedZrandr   Z
tricontourZtricontourf)r   rZ   r&   r7   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   )r'   r(   rš   r)   r   r‡   r¦   )r   r   r   r3   Úlinspacer§   Úrandintr{   )r   r   ÚnxÚnyrZ   r&   r7   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   éüÿÿÿrE   ry   r†   r‡   r@   )	r   r   r   r3   rª   ÚpiÚsinÚcosÚplot)r   r   Úthetar7   r#   rZ   r&   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)r   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‡   )r3   r²   r°   Úexp)Útr    r    r!   Úfê   s    ztest_mixedsubplots.<locals>.fç        ç      @r‰   r£   ç       @rI   r‡   r@   Zbozk--r=   )ÚmarkerfacecolorTr   r   éûÿÿÿrF   rˆ   rx   r   F)ÚrcountÚccountÚ	linewidthÚantialiasedrŒ   )r3   r4   r   r   rT   r   r³   ÚgridrR   Ú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)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Œ   r€   ©r   r   r   Úscatterr3   r4   ©r   r   rZ   r&   r7   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Ð   )r0   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
 ¡ | ¡ sbJ ‚| d¡ | ¡ rxJ ‚| 	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æ?rF   FéK   ra   )rÓ   rÚ   rÛ   r1   Ú
depthshaderÐ   Ú
linewidths)r   rÖ   r3   r4   Úset_facecolorÚset_edgecolorÚ	set_alphaÚget_depthshadeÚset_depthshadeZ	set_sizesÚfullZset_linewidths)rž   r�   r¡   r*   r    r    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)   é   ry   r   r‡   r@   ÚC0rÝ   rF   rÞ   rj   rE   ZC3ZC4ZC5ZC6é	   ZC7c                 S   s   g | ]}|  ¡ ‘qS r    )Úflatten©rc   Úar    r    r!   rg   Y  s   ÿz*test_scatter3d_sorting.<locals>.<listcomp>r   r   c                 s   s   | ]}t  |¡V  qd S ©N)r3   Úuniquerî   r    r    r!   Ú	<genexpr>_  rh   z)test_scatter3d_sorting.<locals>.<genexpr>©Zdtype)rÐ   ÚfcÚecÚlwr1   rá   )r3   Úmgridr4   ÚsizeÚreshapeÚshaperè   r   Ú	itertoolsÚproductÚmaZmasked_arrayÚfloatÚrepeatÚsumÚmaskrÖ   )rž   r�   rá   r&   rZ   r7   ÚsizesÚ
facecolorsÚ
edgecolorsrâ   r    ZsetsrÐ   rô   rõ   rö   Zsubsetr¡   r    r    r!   Útest_scatter3d_sorting?  sN    þÿþýÿÿ
ÿr  rP   éÎÿÿÿé‚   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*   ©rQ   rP   N)r   rÖ   rW   ©r�   rž   rP   rZ   r&   r7   r0   r   r    r    r!   Ú$test_marker_draw_order_data_reversedw  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Ö   rW   r  r    r    r!   Ú#test_marker_draw_order_view_rotatedŒ  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   rF   r)   rZ   ©r-   r.   r&   )r   r   r   r3   r4   r³   )r   r   r8   r9   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Â   rF   rˆ   rx   r   )rÃ   rÄ   rv   rö   rÆ   ç)\�Âõ(ð¿ç)\�Âõ(ð?r¦   )ÚshrinkÚaspect)r   ÚrcParamsr   r   r3   r4   rR   rÈ   r±   rÉ   r   rb   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g d¢dd	d
� | 	dd¡ d S )Nr   r   rÂ   rF   rˆ   r‡   )rˆ   r@   rˆ   r@   F)ÚrstrideÚcstrider0   rö   rÆ   r  r  )
r   r   r   r3   r4   rR   Úsqrtr±   rÉ   r~   )r   r   r€   r�   rÍ   r‚   r    r    r!   Útest_surface3d_shadedÀ  s    

ÿr  zsurface3d_masked.pngc                  C   sÆ   t  ¡ } | jdd�}g d¢}g d¢}t ||¡\}}t g d¢g d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g¡}tj |d¡}tj	| 
¡ | ¡ d�}t  d¡||ƒƒ}|j||||d� | dd¡ d S )Nr   r   )r@   r‡   ra   rE   rF   rj   r–   r‘   rì   r)   é   )r@   r‡   ra   rE   rF   rj   r–   r‘   )rŒ   r   r   r   r   r   r   r   r   r   r   )rŒ   r@   r‡   ra   rE   rE   rE   ra   r‡   r@   r@   )rŒ   ç      ð¿rE   rF   rj   r‘   rj   rF   rE   ra   r  )rŒ   r  r–   r‘   r  é   r  r‘   r–   r  r  )rŒ   r  r‘   rì   r)   é   r)   rì   r)   r–   r  )rŒ   r  r  r  r   r(   r   r  r  r  r  )rŒ   r  r  r  é   é   r!  r(   é   r  r  )rŒ   r  r  r  r  é   é   rê   r  r  r  r   )r˜   r—   Zplasma©r  r'   i°ÿÿÿ)r   r   r   r3   rR   Úarrayrý   Úmasked_lessrk   Ú	Normalizer’   r�   r›   rÉ   rW   )r   r   rZ   r&   Zmatrixr7   Únormr	   r    r    r!   Útest_surface3d_maskedÎ  s*    øÿr+  zsurface3d_masked_strides.pngc                  C   sh   t  ¡ } | jdd�}tjddd…ddd…f \}}tj || d¡}|j|||ddd� | d	d
¡ d S )Nr   r   iúÿÿÿgffffff@r@   r‡   rE   ©r  r  é<   éÓÿÿÿ)	r   r   r   r3   r÷   rý   r(  rÉ   rW   r×   r    r    r!   Útest_surface3d_masked_stridesé  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   ©NrZ   r&   r7   ©r@   r@   r   ©r@   r@   r@   ©r‡   rj   rE   rì   r–   r‡   ©rj   rE   r‘   r–   r‡   r‡   ©rE   r‡   rF   rj   r@   r–   z(%d, %d, %d), dir=%sr@   r<   rA   rs   gffffffî?z2D Text)Z	transformr   r)   zX axiszY axiszZ axis)r   r   r   r2   rÑ   Ztext2DZ	transAxesÚ
set_xlim3dÚ
set_ylim3drÊ   Ú
set_xlabelÚ
set_ylabelÚ
set_zlabel)r   r   Úzdirsr8   r9   r-   r.   rZ   r&   r7   Ú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 )Nr0  r3  r4  r5  r   r   r   r)   ú(z, z), dir=)r.   )r   r6  r7  rÊ   r2   rÑ   Zset_position_3d)rž   r�   r;  r8   r9   r-   r¡   r.   rZ   r&   r7   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   çš™™™™™É?)rv   rÅ   )r3   rª   r°   rÿ   ÚnewaxisÚappendr²   rí   r±   r   r   r   Úplot_trisurfr   Zjet©	Zn_anglesZn_radiiZradiiZanglesrZ   r&   r7   r   r   r    r    r!   Útest_trisurf3d&  s    $rL  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|||g d¢dd� d S )NrA  r‘   rB  rC  r   r‡   FrD  .r@   rE  r   r   )r@   r¦   r   rG  )r0   rÅ   )r3   rª   r°   rÿ   rH  rI  r²   rí   r±   r   r   r   rJ  rK  r    r    r!   Útest_trisurf3d_shaded8  s    $rM  zwireframe3d.pngc                  C   s<   t  ¡ } | jdd�}t d¡\}}}|j|||ddd� d S )Nr   r   rs   é   ©rÃ   rÄ   ©r   r   r   r   rz   Úplot_wireframer   r    r    r!   Útest_wireframe3dJ  s    rR  zwireframe3dzerocstride.pngc                  C   s<   t  ¡ } | jdd�}t d¡\}}}|j|||ddd� d S )Nr   r   rs   rN  r   rO  rP  r   r    r    r!   Útest_wireframe3dzerocstrideR  s    rS  zwireframe3dzerorstride.pngc                  C   s<   t  ¡ } | jdd�}t d¡\}}}|j|||ddd� d S )Nr   r   rs   r   r)   r,  rP  r   r    r    r!   Útest_wireframe3dzerorstrideZ  s    rT  c                  C   sf   t  ¡ } | jdd�}t d¡\}}}t t¡�$ |j|||ddd� W d   ƒ n1 sX0    Y  d S )Nr   r   rs   r   r,  )	r   r   r   r   rz   r   r   Ú
ValueErrorrQ  r   r    r    r!   Ú test_wireframe3dzerostrideraisesb  s
    rV  c                  C   s¤   t  ¡ } | jdd�}t d¡\}}}t t¡�$ |j|||ddd� W d   ƒ n1 sX0    Y  t t¡�$ |j	|||ddd� W d   ƒ n1 s–0    Y  d S )Nr   r   rs   r)   é2   )r  rÄ   )r  rÃ   )
r   r   r   r   rz   r   r   rU  rQ  rÉ   r   r    r    r!   Útest_mixedsamplesraisesj  s    2rX  )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©ro   ÚpivotÚ	normalize)	r3   Zogridr±   r°   r²   r   r   r   Úquiver)rZ   r&   r7   ÚuÚvÚwra  r   r    r    r!   Útest_quiver3dt  s    (024rg  c           	      C   sP   |j dd� g  } } } } }}| j dd�}|j||||||dddd�	 d S )Nr   r   r‰   r]  Tr`  )r   rc  )	r�   rž   rZ   r&   r7   rd  re  rf  r   r    r    r!   Útest_quiver3d_empty€  s    rh  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,   rY  rZ  r[  r\  çš™™™™™Ù¿r‰   F)rœ   rß   r]  Tr`  )r   r   r   r3   r÷   r±   r°   r²   rý   Zmasked_whererc  )r   r   rZ   r&   r7   rd  re  rf  r    r    r!   Útest_quiver3d_maskedˆ  s    (024rj  c                  C   sp   t  ¡ } | jdd�}tdƒ}| |¡ t |¡ | d¡ t 	| 
¡ d¡sNJ ‚| j ¡  t 	| 
¡ d¡slJ ‚d S )Nr   r   ©r   r   )rC  r¾   r¾   r@   ©r@   r   r   r@   )r   r   r   r   Ú	add_patchr   Zpatch_2d_to_3drã   rk   Z
same_colorZget_facecolorrX   rY   )r   r   Úcircler    r    r!   Útest_patch_modificationš  s    



ro  c                 C   sð   t ddƒ}t ddƒ}t g d¢g d¢g¡}tj||gdd�}| jd	d
�}| |¡ | d¡ | |¡ | 	d¡ | 
¡ s|J ‚| d¡ | 
¡ r’J ‚t ddƒ}t ddƒ}t g d¢g d¢g¡}tj||gdd|ddd�}|jd	d
�}| |¡ d S )Nrk  rs   )r‰   r‰   r@  )r¾   r¦   r¾   rC  )r¦   r¾   r¾   r¦   ra   )râ   r   r   rÞ   rß   F)râ   rÛ   rÚ   r1   rá   )r   r3   r'  r   ZPatch3DCollectionr   Úadd_collection3drä   rã   rå   ræ   rç   )r�   rž   Zpatch1Zpatch2r  r*   r¡   r    r    r    r!   Ú"test_patch_collection_modification§  s*    








þrq  c                  C   sž   g d¢g d¢g d¢g d¢g} t jtdd�� t | ¡ W d   ƒ n1 sJ0    Y  tj| td�} t jtdd�� t | ¡ W d   ƒ n1 s�0    Y  d S )N©r   r   r@   ©r   r@   r@   )r   r@   r   ©r   r   r   zlist of \(N, 3\) array-like©Úmatchró   )r   r   rU  r   ÚPoly3DCollectionr3   r'  rþ   )Úpolyr    r    r!   Ú&test_poly3dcollection_verts_validationÃ  s    (ry  zpoly3dcollection_closed.pngc                  C   s”   t  ¡ } | jdd�}t g d¢g d¢g d¢gt¡}t g d¢g d¢g d¢gt¡}tj|gdd	d
dd�}tj|gdd	ddd�}| |¡ | |¡ d S )Nr   r   rr  rs  rt  r2  r1  ra   Úk)r¦   r¦   r@   r¦   T©râ   rÛ   rÚ   Úclosed)r@   r¦   r¦   r¦   F)	r   r   r   r3   r'  rþ   r   rw  rp  ©r   r   Zpoly1Zpoly2Úc1Úc2r    r    r!   Útest_poly3dcollection_closedÍ  s    ÿÿ
r€  c                  C   sv   t g ƒ} t | ¡ t| tjƒs"J ‚|  ¡ g ks2J ‚tjtdd�d�\}}| 	| ¡ |  
¡ }t |¡shJ ‚|j ¡  d S )Nr   r   rK   )r   r   Zpoly_collection_2d_to_3dÚ
isinstancerw  Ú	get_pathsr   rU   rV   Ú
add_artistÚdo_3d_projectionr3   ÚisnanrX   rY   )rx  r   r   Zminzr    r    r!   Ú#test_poly_collection_2d_to_3d_emptyÜ  s    

r†  zpoly3dcollection_alpha.pngc                  C   s¸   t  ¡ } | jdd�}t g d¢g d¢g d¢gt¡}t g d¢g d¢g d¢gt¡}tj|gdd	d
dd�}| d¡ tj|gddd�}| 	d¡ | 
d	¡ | d¡ | |¡ | |¡ d S )Nr   r   rr  rs  rt  r2  r1  ra   rz  )r¦   r¦   r@   Tr{  r¦   F)râ   r|  )r@   r¦   r¦   )r   r   r   r3   r'  rþ   r   rw  rå   rã   rä   rp  r}  r    r    r!   Útest_poly3dcollection_alphaë  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 u�sJ ‚| dd¡ | dd¡ | dd¡ d S )Nr¯   rE   ry   r†   r‡   r@   rŒ   ra   rE  r   r   r   Útwilight©rv   r*  ©r-   rÂ   rF   rj   )r3   rª   r°   r±   r²   Úcolumn_stackrù   Úconcatenater   r   r   r)  r   Ú	set_arrayÚmodrp  r|   r}   r~   ©r´   r7   r#   rZ   r&   ZpointsÚsegmentsr   r   r*  Ú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 usÒJ ‚| dd¡ | dd¡ | dd¡ d S )Nr   r‡   ry   r@   rŒ   rE  r   r   rˆ  r‰  rŠ  rÂ   rF   r¯   rj   )r3   rª   r°   r±   r²   r‹  rù   rŒ  r   r   r   r)  r   r�  rp  r|   r}   r~   r�  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s0J ‚|jddd� |jjdksNJ ‚| 	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(   rw   rF   )r   r   Zadd_axesr   Úxaxisr•  Úmplr  r8  r9  r:  ÚyaxisÚzaxisÚ	enumerateÚget_major_ticksZset_padZget_pad)r   r   rd   Útickr    r    r!   Útest_axes3d_labelpad4  s    

r�  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_claH  s    rŸ  zaxes3d_rotated.pngc                  C   s*   t  ¡ } | jddddd�}| dd¡ d S )Nr@   r   r   r`   é-   )r   r   r   rW   r   r    r    r!   Útest_axes3d_rotatedQ  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 d   ƒ n1 sˆ0    Y  d S )Nr¦   r)   ry   )Únum)é   rj   rI   r@   r‡   r   r   )r3   rª   rR   r§   Úrandnr   r   r   r   r   rU  rÉ   )rZ   r&   r€   r�   r7   r   r   r    r    r!   Útest_plotsurface_1d_raisesX  s    r¥  c                  C   sT   t  g d¢¡} t  g d¢¡}t  g d¢¡}t | ||¡}t dd¡}t  ||¡}|S )N)r¥   iüÿÿiÐ  )ry   ry   ry   rr  ry   rt   )r3   r'  r   Úview_transformationZpersp_transformationÚdot)ÚErÍ   ÚVÚviewMZperspMÚMr    r    r!   Ú_test_proj_make_Md  s    r¬  c            
      C   s–   t ƒ } t g d¢¡d }t g d¢¡d }t g d¢¡d }t |||| ¡\}}}t |||| ¡\}}}	tj ||¡ tj ||¡ tj |	|¡ d S )N©
r   r@   r@   r   r   r   r@   r@   r   r   ç     Àr@©
r   r   r@   r@   r   r   r   r@   r@   r   ©
r   r   r   r   r   r@   r@   r@   r@   r@   )r¬  r3   r'  r   Úproj_transformZinv_transformrm   Zassert_almost_equal)
r«  r8   r9   r-   ÚtxsÚtysÚtzsZixsZiysZizsr    r    r!   Útest_proj_transformo  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|i |¤Ž\}}t|ƒ}| |¡ t||g d¢ƒD ]\}}}| |||¡ q˜||fS )Nr   )r¶   rZ   r&   r7   )r   r±  r2   r   rU   r   Zadd_collectionrÑ   )r«  rÐ   ÚargsrŸ   r8   r9   r-   r²  r³  r´  r¶   r   ZayÚazÚlinesr   ZlinecrZ   r&   r¼   r    r    r!   Ú_test_proj_draw_axes~  s    
r¹  zproj3d_axes_cube.pngc                  C   sÌ   t ƒ } d ¡ }t g d¢¡d }t g d¢¡d }t g d¢¡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¯  r°  i�  rÏ   ©r*   r#   çš™™™™™É¿rG  )r¬  Úsplitr3   r'  r   r±  r¹  rÖ   r³   r2   rÑ   r|   r}   )r«  Útsr8   r9   r-   r²  r³  r´  r   r   rZ   r&   r¼   r    r    r!   Útest_proj_axes_cube�  s    r¿  zproj3d_axes_cube_ortho.pngc                  C   s  t  g d¢¡} t  g d¢¡}t  g d¢¡}t | ||¡}t dd¡}t  ||¡}d ¡ }t  g d¢¡d }t  g d	¢¡d }t  g d
¢¡d }	t |||	|¡\}
}}t|dd�\}}|j	|
|d| d� |j
|
|dd� t|
||ƒD ]\}}}| |||¡ qä| dd¡ | dd¡ d S )N)éÈ   ry   ry   rt  rr  rŒ   r@   rº  r­  ry   r¯  r°  é–   rÏ   é,  r#   r»  i8ÿÿÿrÀ  )r3   r'  r   r¦  Zortho_transformationr§  r½  r±  r¹  rÖ   r³   r2   rÑ   r|   r}   )r¨  rÍ   r©  rª  ZorthoMr«  r¾  r8   r9   r-   r²  r³  r´  r   r   rZ   r&   r¼   r    r    r!   Útest_proj_axes_cube_ortho¥  s$    rÃ  c                  C   sj   g d¢} t  | tjd ¡}tj |g d¢¡ g d¢} t  | tjd ¡}tj |dt d¡d ddg¡ d S )	Nrl  rj   )r   r@   r   r@   r   ra   r‡   r¦   r@   )r   Zrot_xr3   r°   rm   Úassert_allcloser  )r©  Z	rotated_Vr    r    r!   Útest_rotÀ  s    rÅ  c                  C   sV   d\} }d\}}d\}}t  | |||||¡}tj |g d¢g d¢g d¢g d¢g¡ d S )N)ry   rH   )rt   ry   )r‰   rG  )rs   r   r   rÂ   )r   g{®Gázt?r   r¦   )r   r   g      $@rŒ   )r   r   r   r@   )r   Zworld_transformationr3   rm   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¡¡}t|||ƒD ]&\}}}	t
||f|	d	d
�}
| |
¡ qŒ| dd¡ | d	d¡ d S )N)rE   rj   r   )r  )rJ   rL   )r   r'   )r(   rÁ  )r   r   r(   r'   )ry   rÁ  r'   rÀ  r   )Úfillr  rÁ  rÂ  )r   rU   rV   r³   r2   rÖ   r   Z_line2d_seg_distr3   r'  r   rm  r|   r}   )r   r   r8   r9   Úp0Úp1ÚdistrZ   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sNJ ‚| d
¡ | d¡ | ddgddgddg¡ | ¡ dksŒJ ‚d S )Nr   r   rK   r   r‰   rG  ©rZ   r&   r7   r@   )r   r@   rŠ   çš™™™™™ñ?r¼  g333333ó?FTr‡   )r   r@   rŠ   rÎ  ri  g333333@)r   rU   Zmarginsr³   Z
get_w_limsZ	autoscaleZset_autoscalez_onr   r    r    r!   Útest_autoscaleí  s    

rÏ  rF  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 u r||ƒ n|}	|d|d� |	|ƒ ksšJ ‚|j 	¡  tj
 |ƒ d¡ d S )Nr   r   ry   rŠ   r‰   Zget_autoscaleZ_onÚset_ZlimÚget_)ç      à¿r¦   )rÐ  )r   r   r   r3   r4   rª   rÖ   ÚgetattrrX   rY   rm   rn   )
rF  rÐ  r   r   rZ   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Ö  )rE   rE   rE   )r   Z	proj_typeZ
box_aspectrK   )rŒ   r@   r‡   r@   r*   rz  rC  r.  r
  T)rû   rØ  rü   r   rU   rV   r3   r'  ÚlistÚabsr   Úplot3Dr2   rW   ÚdegreesZarctanr  rÇ   )rØ  rü   r   r   r#   rÐ   Úer    r    r!   Útest_axes3d_isometric  s    ý$ $rÞ  Úvalue)ÚsetterÚside))r6  Úleft)r6  Úright)r7  Úbottom)r7  Útop)rÊ   rä  )rÊ   rå  c                 C   s^   ||i}t  ¡ }|jdd�}t t¡�$ t|| ƒf i |¤Ž W d   ƒ n1 sP0    Y  d S )Nr   r   )r   r   r   r   r   rU  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   rK   )rF   rE   ra   )r   rU   r3   ÚindicesÚvoxels)Úselfr   r   rZ   r&   r7   rë  r    r    r!   Útest_simple7  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   rK   )rF   rF   rE   r‡   g      ø?g]�Âõ(\@ra   rÝ   )râ   rÛ   rÞ   )r   rU   r3   rê  rë  r’   Úkeysrä   )rì  r   r   rZ   r&   r7   rë  re  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   rK   ©r)   r)   r)   r@   rë   ró   z0.25rF   Úcyanr)   r&  N)r   rU   r3   rê  rè   Zobject_rë  ©rì  r   r   rZ   r&   r7   rë  r	   r    r    r!   Útest_named_colorsJ  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   rK   rð  )r)   r)   r)   ra   rì   ©.r   ©.r@   ©.r‡   r&  N)r   rU   r3   rê  Úzerosrë  rò  r    r    r!   Útest_rgb_dataW  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¡}	g d¢|	|< g d¢|	|< |j||	d	�}
t|
ƒtu s†J ‚|
 	¡ D ](\}}|| s¦J d
ƒ‚t
|tjƒsŽJ ‚qŽd S )Nr   r   rK   rð  r‡   )r)   r)   r)   rE   )r@   r   r   r¦   )r   r@   r   r¦   r&  zfaces returned for absent voxel)r   rU   r3   rê  rÚ  r÷  rë  ÚtyperV   Úitemsr�  r   rw  )rì  r   r   rZ   r&   r7   Úv1Úv2rë  r	   re  Zcoordrx  r    r    r!   Ú
test_alphad  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   rK   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À   )rl   Úndimr3   Z	index_exp)rZ   Úslrd   r    r    r!   Ú	midpointsz  s    ÿÿz&TestVoxels.test_xyz.<locals>.midpoints)é   r  r  g      0@r¦   r‡   rˆ   )ra   rô  rõ  rö  r   r@   )r  r  rÅ   )r   rU   r3   rê  r÷  rú   rë  r�   )rì  r   r   r  r#   r$   r%   ÚrcÚgcÚbcZspherer	   r    r    r!   Útest_xyzv  s     	(ýzTestVoxels.test_xyzc                 C   s\  t  d¡\}}}t  d¡}tjddid�\}}tƒ tdd�fD ]\}|j|fi |¤Ž |jf d|i|¤Ž |j||||fi |¤Ž |j|||fd|i|¤Ž q>tjt	d	d
��$ |j|||||d� W d   ƒ n1 sÔ0    Y  tjt	d	d
�� | ||¡ W d   ƒ n1 �s0    Y  t t
¡�" |j||||d� W d   ƒ n1 �sN0    Y  d S )N)ra   rE   rF   )r‡   ra   rE   r   r   rK   rz  )rÛ   Úfilledrë  ru  )r  )r  rZ   r&   r7   )r3   rê  Zonesr   rU   rV   rë  r   r   Ú	TypeErrorÚAttributeError)rì  rZ   r&   r7   r  r   r   Úkwr    r    r!   Útest_calling_conventions—  s    
2,z#TestVoxels.test_calling_conventionsN)Ú__name__Ú
__module__Ú__qualname__Úmpl3d_image_comparisonrí  rï  ró  rø  rý  r  r  r    r    r    r!   ré  6  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‡   ra   rE   rF   rj   r–   r‘   rì   r)   r  r   r   r7   r  )r   r   r   r³   r3   rm   rn   Zget_data_3dZset_data_3dZ	set_xdataZ	set_ydataZset_3d_propertiesrB   )
rZ   r&   r7   Zx2Úy2Zz2r   r   r¸  r’  r    r    r!   Útest_line3d_set_get_data_3d°  s    

r  c                 C   s`   | j dd�}| g d¢g d¢g d¢¡ | ¡  |j dd�}| ¡  | g d¢g d¢g d¢¡ d S )Nr   r   )r@   r@   r)   r)   )r@   r)   r)   r)   )r@   r@   r@   r)   )r   r³   Zinvert_yaxis)r�   rž   r   r    r    r!   Útest_invertedÂ  s    r  c                  C   s°   t jddid�\} }| ¡ r J ‚| ¡ r,J ‚| ¡ r8J ‚| dd¡ | dd¡ | dd¡ | ¡ shJ ‚| ¡ stJ ‚| ¡ s€J ‚| ¡  | ¡ r”J ‚| ¡ r J ‚| ¡ r¬J ‚d S )Nr   r   rK   r@   r   )	r   rU   Zxaxis_invertedZyaxis_invertedZzaxis_invertedr|   r}   r~   rž  r   r    r    r!   Útest_inverted_claÎ  s    r  c                  C   sÒ   t  ¡ } t t¡� t| ƒ}W d   ƒ n1 s00    Y  |jddd� |jddd� |jddd� | j ¡  |j	 
¡ D ]}|jjdksxJ ‚qx|j 
¡ D ]}|jjdks˜J ‚q˜|j 
¡ D ]}|jjdks¸J ‚q¸d S )NrZ   r<   )rF  r	   r&   r7   )r   r   r   Úwarnsr   r   Ztick_paramsrX   rY   r–  r›  Z	tick1lineÚ_colorr˜  r™  )r   r   rœ  r    r    r!   Útest_ax3d_tickcolourâ  s    &
r  c           	      C   sÎ  | j ddddid�}|jD ]}| dd¡ qt|g d¢ƒ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g d¢gƒD ]Â\}}||d	 |ƒD ]}| d¡ �q||d |ƒD ]}| d¡ �q<||d |ƒD ]}| 	tjd  ¡ �q\||d |ƒD ]}| 
tjd  ¡ �q„||d |ƒD ]}| tjd  ¡ �q¬�qd S )NrE   rF   r   r   rK   g    ÐcAg   @ÑcA)rZ   r&   r7   r�   r   Úplain)rF  r   r@   )r†   r‡   )rF  Z	scilimitsr‡   zaxes.formatter.useoffset)rF  Z	useOffsetra   zaxes.formatter.use_locale)rF  Z	useLocalezaxes.formatter.use_mathtext)rF  ZuseMathTextc                    s   ‡ fdd„|D ƒS )Nc                    s   g | ]}t ˆ |ƒ ¡ ‘qS r    )rÔ  Zget_major_formatter)rc   Úname©r   r    r!   rg     rh   zAtest_ticklabel_format.<locals>.get_formatters.<locals>.<listcomp>r    )r   Únamesr    r  r!   Úget_formatters  s    z-test_ticklabel_format.<locals>.get_formattersr–  r˜  r™  )r–  r˜  r™  F)rU   Zflatr|   r2   Zticklabel_formatr—  r  Zset_scientificZset_powerlimitsZset_useOffsetZset_useLocaleZset_useMathText)	r�   rž   r]   r   Úrowr  r  r  Úfmtr    r    r!   Útest_ticklabel_formatô  sN    
ÿÿÿÿ
þ
ÿ
ÿ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@   rG  r,   )r@   rC  r   r   )ro   ra  )r3   rR   r4   Ú	ones_liker2   r   rc  )r�   rž   ra  rZ   r&   r7   rd  re  rf  r   ro   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þ  ra   rF   r   r   é   rG  )ÚzuplimsÚzlolimsZ
erroreveryN)
r3   r4   r°   r±   r²   r   r   r   rø   Úerrorbar)
r¼   rZ   r&   r7   r   r   Zesteprd   r&  r'  r    r    r!   Útest_errorbar3d_errorevery7  s    *ÿr)  zerrorbar3d.pngc                  C   sZ   t  ¡ } | jdd�}g d¢}g d¢}|j||||||dg d¢g d¢dd	d
d� | ¡  dS )z9Tests limits, color styling, and legend for 3D errorbars.r   r   )r@   r‡   ra   rE   rF   )r¦   r¦   r¦   r¦   r¦   ra   )FTFTT)TFFTFTÚpurplezError lines)rZ   r&   r7   ZxerrZyerrZzerrZcapsizer&  r'  ZyuplimsZecolorr<  N)r   r   r   r(  Zlegend)r   r   rË  rÝ  r    r    r!   Útest_errorbar3dI  s    ür+  z
stem3d.pngÚx86_64r¾   gú~j¼t“h?)r   r¤   c               
   C   s.  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 g d	¢ƒD ]*\}}|j||||d
� | 	d|› �¡ qlt tj d tjd d¡}t 
|¡}t |¡}t|d g d	¢ƒD ]N\}}|j|||ddd|d�\}}	}
| 	d|› �¡ |jddd� |
 d¡ qÚd S )Nr‡   ra   )r‘   rj   Tr   r   ©rJ   Zconstrained_layoutrL   r   rÍ  )Úorientationzorientation=r(   r@   zC4-.ZC1DrÞ   )ÚlinefmtZ	markerfmtZbasefmtr.  rÙ   )rÁ   Zmarkeredgewidth)r   rU   r3   rª   r°   r²   r±   r2   ÚstemÚ	set_titler  ÚsetZset_linewidth)r   r]   r´   rZ   r&   r7   r   r.   Z
markerlineZ	stemlinesZbaseliner    r    r!   Útest_stem3dY  s.    
þ


ýr3  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‡   ry   rŒ   r@   r0   r%   Úoffr2  )rû   rü   rØ  r   r   r   r3   rª   r°   Úouterr²   r±   r  rÉ   r'  rÙ  r   rÚ  rÛ  r2   r‹  Ú
get_xlim3dÚ
get_ylim3dÚ
get_zlim3dr�   r’   r6  r7  rÊ   rF  Zset_box_aspect)rü   rØ  r   r   rd  re  rZ   r&   r7   r#   rÐ   rÝ  ZxyzlimZXYZlimr    r    r!   Útest_equal_box_aspectw  s,    $$ÿ



r9  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‚J ‚d S )Nr‡   r@   )rE   rF   Tr   r   r-  rF   Ú
horizontal)r   r.  rG  )r   rU   rJ  r3   r§   r¤  r  rX   rY   r   Úget_positionZextents)Z	num_plotsr   r]   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¡ | g d	¢¡ | ¡ d
ksxJ ‚| ¡ d
ksˆJ ‚d S )NéÓ   r   r   éÔ   )r   Zsharezr   r@   r‡   )rÓ  r   r‡   ç      @)rÓ  r?  )r   r   r   r³   r#  Zget_zlim)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ÔJ ‚|t |¡ksæJ ‚|t |¡ksøJ ‚|t |¡k�sJ ‚|
t |¡k�s J ‚|t |¡k�s4J ‚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Ö   rX   rY   r6  r7  r8  Z_button_pressr   r   ZMIDDLEZ_on_mover   Zapprox)rB  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,    ÿÿrD  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   rF   r@   éo   r   r   rx   r”   )r*   rÐ   rv   )r3   r'  rÙ  rû   rü   r4   ÚTr   rÖ   rX   rY   Úchanged)
r�   rž   rZ   r&   r7   r*   r¡   Zsc_testr    Zsc_refr    r    r!   Útest_scalarmap_updateÜ  s    þ
rH  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    rJ  Ú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'¡ �qŒd S )(NéÝ   r   r   éÞ   F)rt  )r   rF   r   )rF   rF   r   )rF   r   r   ÚwhiteÚblackr@   )r  r  Úzorder)r‡   r‡   )r   rE   r<   r‡   )r*   rQ  )ra   ra   )r@   ra   r)   )r   r¿   )r   r?  éß   éà   r¦   r   r–   r¥   r>   rŒ   )r0   r1   rÅ   rQ  rF   z--r=   )rö   Z	linestyler0   rQ  ra   rE   iìÿÿÿr(   rO   r4  )r   r   r   rK  r   rw  rp  r³   rÖ   r|   r}   r~   r3   rR   r÷  rª   r°   r²   r±   rÉ   rW   rF  )r   r¸   r¹   Zcornersr   ZtriZax3Zax4Údimr€   r�   r‚   ZangleZX2ZY2ZZ2ZX3ZY3ZZ3r#   r«  ÚthrZ   r&   r7   r    r    r!   Útest_computed_zorderú  sŒ    ý



2
ü"ü
ü$ü
ü$ýrV  zscatter_spiral.png)rL  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‡   rj   é   r@   rF   r	  )r   r   r   r3   rª   r°   rÖ   r±   r²   rX   rY   )r   r   rU  Úscr    r    r!   Útest_scatter_spiralM  s
    ,rY  zDvertical_axis, proj_expected, axis_lines_expected, tickdirs_expectedr7   )r¾   ç#ðk$Iò?r¾   ç.�_x%Iâ¿)r¾   r¾   çºÙ(·më?ç£å@µmÛ¿)r¾   r¾   r¾   g      $À)ç#ðk$Iò¿r¾   r¾   çÓø…W’$%@gŽË—›˜Ã¬?gÞ2m Ù3°?gæº¾I²’¥¿g‰®°…ÅM¨¿gÞ2m Ù3°¿g‰®°…ÅM¨?)r@   r   r   r&   )rZ  r¾   r¾   r[  )r¾   r\  r¾   r]  )r¾   r¾   r^  r_  )r‡   r‡   r   rZ   )r¾   r¾   rZ  r[  )r\  r¾   r¾   r]  )r¾   r^  r¾   r_  )r@   r‡   r@   c                 C   s¶   d}t jddddd�}|jdd| d� |jj ¡  | ¡ }tjj	|||d� t
| ¡ | ¡ | ¡ gƒD ]J\}}|| }	|j ¡ }
tjj	|	|
|d� || }| ¡ }tj ||¡ qfd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   )rP   rQ   Úvertical_axis)ÚrtolN)r   ZsubplotrW   r   rX   rY   Zget_projr3   rm   rÄ  rš  Z	get_xaxisZ	get_yaxisZ	get_zaxisr’  Úget_dataZ_get_tickdirrn   )r`  Zproj_expectedZaxis_lines_expectedZtickdirs_expectedra  r   Zproj_actualrd   rF  Zaxis_line_expectedZaxis_line_actualZtickdir_expectedZtickdir_actualr    r    r!   Útest_view_init_vertical_axisZ  s    D"

ÿrc  c                  C   sx   G dd„ dt jƒ} t ¡ }|jddd�}| ƒ }| |¡ d}tjt|d�� |j	 
¡  W d  ƒ n1 sj0    Y  dS )	zv
    Test that an external artist with an old-style calling convention raises
    a suitable deprecation warning.
    c                   @   s   e Zd Zdd„ Zdd„ ZdS )zOtest_do_3d_projection_renderer_deprecation_warn_on_argument.<locals>.DummyPatchc                 S   s   dS ©Nr   r    ©rì  Úrendererr    r    r!   r„  º  s    z`test_do_3d_projection_renderer_deprecation_warn_on_argument.<locals>.DummyPatch.do_3d_projectionc                 S   s   d S rð   r    re  r    r    r!   rY   ½  s    zTtest_do_3d_projection_renderer_deprecation_warn_on_argument.<locals>.DummyPatch.drawN©r  r  r  r„  rY   r    r    r    r!   Ú
DummyPatch¹  s   rh  rE  r   r   z?The 'renderer' parameter of do_3d_projection\(\) was deprecatedru  N)r   ÚPatch3Dr   r   r   rƒ  r   r  r   rX   rY   )rh  r   r   Úartistrv  r    r    r!   Ú;test_do_3d_projection_renderer_deprecation_warn_on_argument´  s    
rk  c                  C   sF   G dd„ dt jƒ} t ¡ }|jddd�}| ƒ }| |¡ |j ¡  dS )z�
    Test that an external artist with a calling convention compatible with
    both v3.3 and v3.4 does not raise a deprecation warning.
    c                   @   s   e Zd Zddd„Zdd„ ZdS )zZtest_do_3d_projection_renderer_deprecation_nowarn_on_optional_argument.<locals>.DummyPatchNc                 S   s   dS rd  r    re  r    r    r!   r„  Ð  s    zktest_do_3d_projection_renderer_deprecation_nowarn_on_optional_argument.<locals>.DummyPatch.do_3d_projectionc                 S   s   d S rð   r    re  r    r    r!   rY   Ó  s    z_test_do_3d_projection_renderer_deprecation_nowarn_on_optional_argument.<locals>.DummyPatch.draw)Nrg  r    r    r    r!   rh  Ï  s   
rh  rE  r   r   N©r   ri  r   r   r   rƒ  rX   rY   ©rh  r   r   rj  r    r    r!   ÚFtest_do_3d_projection_renderer_deprecation_nowarn_on_optional_argumentÊ  s    
rn  c                  C   sF   G dd„ dt jƒ} t ¡ }|jddd�}| ƒ }| |¡ |j ¡  dS )z„
    Test that an external artist with a calling convention compatible with
    only v3.4 does not raise a deprecation warning.
    c                   @   s   e Zd Zdd„ Zdd„ ZdS )zTtest_do_3d_projection_renderer_deprecation_nowarn_on_no_argument.<locals>.DummyPatchc                 S   s   dS rd  r    )rì  r    r    r!   r„  ã  s    zetest_do_3d_projection_renderer_deprecation_nowarn_on_no_argument.<locals>.DummyPatch.do_3d_projectionc                 S   s   d S rð   r    re  r    r    r!   rY   æ  s    zYtest_do_3d_projection_renderer_deprecation_nowarn_on_no_argument.<locals>.DummyPatch.drawNrg  r    r    r    r!   rh  â  s   rh  rE  r   r   Nrl  rm  r    r    r!   Ú@test_do_3d_projection_renderer_deprecation_nowarn_on_no_argumentÝ  s    
ro  )r@   )�Ú	functoolsrû   Úplatformr   Zmpl_toolkits.mplot3dr   r   r   r   Z
matplotlibr—  Zmatplotlib.backend_basesr   Zmatplotlib.cbookr   r   r	   rk   Zmatplotlib.testing.decoratorsr
   r   Zmatplotlib.testing.widgetsr   Zmatplotlib.collectionsr   r   Zmatplotlib.patchesr   Zmatplotlib.pyplotZpyplotr   Únumpyr3   Úpartialr  r"   r;   rD   r^   r_   rq   rƒ   r…   rŽ   ÚmarkZparametrizer¢   r©   r®   rµ   rº   rÎ   rÒ   rØ   rÜ   ré   r  r  r  r  r  r  r+  r/  r=  r?  rL  rM  rR  rS  rT  rV  rX  rg  rh  rj  ro  rq  ry  r€  r†  r‡  r“  r”  r�  rŸ  r¡  r¥  r¬  rµ  r¹  r¿  rÃ  rÅ  rÆ  rÌ  rÏ  rÕ  r×  rÞ  ÚinfÚnanrè  ré  r  r  r  r  r  r   r$  r)  r+  Úmachiner3  r9  r<  r@  rD  r   ÚcontextrH  rJ  rV  rY  rc  rk  rn  ro  r    r    r    r!   Ú<module>   s¼  ÿ







þ












6



	












ÿ


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

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