U
    i2e                    @   sT  d dl Z d dlZd dlZd dlmZmZmZmZ d dlZ	d dl
mZmZmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZ d dlmZmZ d d	lmZmZ d d
lmZ d dl m!Z! d dl"m#Z$ d dl%Z&e j'edddZ(dd Z)edgddd Z*e(dgdddd Z+e(dgdddd Z,dd Z-e(dgd d! Z.e(d"gd#d$ Z/d%d& Z0e(d'gd(d) Z1e(d*gd+d, Z2d-d. Z3e(d/gd0d1 Z4e(d2gd3d4 Z5e(d5gd6d7 Z6e(d8gd9d: Z7ej89d;d<d=d>d?ggd@d=d>d?dAggdBd d=d>d?gggedgddCdD Z:e(dEgdFdGdHdI Z;dJdK Z<e(dLgdMdN Z=edgddOdP Z>dQdR Z?e(dSgdTdU Z@edgddVdW ZAe(dXgdYdZ ZBe(d[gd\d] ZCe(d^gd_d` ZDedgddadb ZEedgddcdd ZFej89deddgedgddfdg ZGej89dhdidjgedgddkdl ZHedgddmdn ZIe(dogdpdGdqdr ZJe(dsgdtdu ZKe(dvgdwdx ZLe(dygdzd{ ZMedgdd|d} ZNe(d~gdd ZOe(dgdddd ZPedgddd ZQe(dgddGdd ZRe(dgddGdd ZSe(dgdd ZTe(dgdd ZUe(dgdd ZVdd ZWdd ZXe(dddgdd ZYedgddd ZZe(dgdd Z[dd Z\edgddd Z]dd Z^e(dgdd Z_dd Z`e(dgdd Zae(dgdd Zbe(dgdd Zce(dgdddd Zde(dgdddd Zee(dgdddd ZfddÄ Zgddń ZhddǄ ZidxddʄZje(dgdd̈́ Zke(dgddЄ Zldd҄ ZmddԄ Zne(dgddׄ Zoddل Zpddۄ Zqej89ddݡej89ddߡdd Zrdd Zse(dgdddd Zte(dgdddd Zue(dgdd Zvej89de&jwe&jxgej89dddddddgdd ZyG dd dZzdd Z{edgddd Z|dd Z}dd  Z~edgddd Zedgddd Zedgdddd	 Ze(d
gdd Ze(dgdd Zedgddddd Zedgdddd Zdd Zdd Zdd Zdd Zd d! Zej89d"d#ejdd$fd#ejd%d&fd#ejd'd(fd#ejdd)fd*ejdd+fd*ejd%d,fd*ejd'd-fgd.d/ Ze	jdedgdd0d1 Zd2d3 Zed4gddgd5d6d7d8 Zd9d: Zd;d< Zd=d> Zej89d?ed@i dAfedBi dAfedCi dAfee d%dDidAfee d'dDidAfee dEdDidAfedFd%didGfedFddddݜdGfedFddȐdHdGfedIi dJff
dKdL ZedgddMdN ZdOdP ZedgddQdR ZedSgdddTdUdV ZdWdX ZdYdZ Zej89d[dEd\d]d\d^gd\d\d_d`gd\d\d\dagdbd\d\dcggdddegdfdggfdhdegdgdggfdhdhgdgdigfgdd d gfd'd]d\d\d^gd\d_d\d`gd\d\d\dagd\d\dbdcggdhdegdidigfdedegdgdigfdjdhgdkdigfgd=d=d gfd%d\d\d]d^gd_d\d\d`gd\d\d\dagd\dbd\dcggdhdhgdidggfdeddgdidkgfdedhgdidigfgdd=dgfgdldm ZedngdddTdodp ZedqgdddTdrds Zedgddtdu Zdvdw ZdS (y      N)Axes3Daxes3dproj3dart3d)MouseButton
MouseEventNavigationToolbar2)cm)colorspatches)image_comparisoncheck_figures_equal)
mock_event)LineCollectionPolyCollection)Circle	PathPatch)Path)TextTdefault)remove_textstylec              
   C   s   ddg}t ttt |||d}|D ]P\}}tt|| |d |d  kr,| jt	|t| |t|   q,d S )Nr         )
	itertoolscombinationsnparraylistproductsumabsplot3Dzip)axscalerZptsstartend r)   J/tmp/pip-unpacked-wheel-qhyxngld/mpl_toolkits/mplot3d/tests/test_axes3d.pyplot_cuboid   s
     $r+   Zpng)
extensionsc                 C   s    | j tddd}|d d S )N3d
projection
subplot_kwF)subplotsdictZset_visiblefig_testfig_refr$   r)   r)   r*   test_invisible_axes$   s    r7   zaspects.pngF)r   c                  C   s   d} t jddddid\}}| dd D ]}t|d	d	d
gd q,t|d	 d d	d	d	gd t| D ]2\}}|| |  |d |j| | dd qj|d	 d d d S )N)autoequalequalxyequalyzequalxzr9   r      r/   r-   r0   r   r      r%   r=      r?   ZdatalimZ
adjustablezequal (cube))pltr2   flattenr+   	enumerate	set_titleset_box_aspect
set_aspect)aspects_axsr$   ir)   r)   r*   test_aspects*   s    
rN   zaspects_adjust_box.pngc                  C   sj   d} t jdt| ddidd\}}t|D ]:\}}t|ddd	gd
 || |  |j| | dd q*d S )N)r8   r9   r:   r;   r<   r   r/   r-   )   r=   )r1   figsizerB   r=   r?   r@   ZboxrC   )rD   r2   lenrF   r+   rG   rI   )rJ   figrL   rM   r$   r)   r)   r*   test_aspects_adjust_box;   s    
rS   c                  C   sZ   t  } | jdd}|d |d |d |d |d t|dksVt	d S )	Nr-   r.   labeltitlexyzzV<Axes3D: label='label', title={'center': 'title'}, xlabel='x', ylabel='y', zlabel='z'>)
rD   figureadd_subplotZ	set_labelrG   
set_xlabel
set_ylabel
set_zlabelreprAssertionErrorrR   r$   r)   r)   r*   test_axes3d_reprG   s    




ra   zaxes3d_primary_views.pngc                  C   s   ddddddg} t jddd	d
id\}}t|jD ]X\}}|d |d |d |d |j| | d | | d | | d d q2t 	  d S )N)Z   r   )r   rc   r   r   r   r   )rc   rb   r   )r   rb   r   )r      r   r   r=   r/   r-   r0   rV   rW   rX   orthor   r   elevazimroll)
rD   r2   rF   flatr[   r\   r]   set_proj_type	view_inittight_layout)viewsrR   rL   rM   r$   r)   r)   r*   test_axes3d_primary_viewsT   s    



*rp   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brW         
   r   cZedge皙?)zszdirZaligncoloralpha)rD   rY   rZ   r#   r   arangerQ   bar)rR   r$   rv   rX   xsyscsr)   r)   r*   
test_bar3di   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blueZyellowr   rz   )rD   rY   rZ   r   r|   rQ   
zeros_likebar3d)rR   r$   rv   r~   r   rx   r)   r)   r*   test_bar3d_colorsu   s    

r   zbar3d_shaded.pngc               
   C   s   t d} t d}t | |\}}| |  }}|| d }ddddg}tjtdt| d}|jdt|t	d	d
d}t
||D ]:\}\}	}
}|j|||d dd|dd |j|	|
|d q|j  d S )NrB   r?   r   )rs   ir   )rs   rs   rs   )rs   rc   ),  r   r   rP   r-   r.   r0   r   Tshaderg   )r   r|   meshgridravelrD   rY   	figaspectrQ   r2   r3   r#   r   rm   canvasdraw)rV   rW   x2dy2drX   ro   rR   rL   r$   rh   ri   rj   r)   r)   r*   test_bar3d_shaded   s     

 r   zbar3d_notshaded.pngc               	   C   s|   t  } | jdd}td}td}t||\}}| |  }}|| }|j|||d dd|dd | j	  d S )	Nr-   r.   rB   r?   r   r   Fr   )
rD   rY   rZ   r   r|   r   r   r   r   r   )rR   r$   rV   rW   r   r   rX   r)   r)   r*   test_bar3d_notshaded   s    

r   c            
         s   t  } | jddddd}tjddd}d\}}||  tt|t|\}}| }| }|| } fdd	t	 D }|j
||ddd||d
|d	}	tj||	jdd d d d S )Nr   r-   r.   r   rb   )ZazdegZaltdeg)r=   rB   c                    s   g | ]}t |  qS r)   )r	   coolwarm).0rM   arear)   r*   
<listcomp>   s     z*test_bar3d_lightsource.<locals>.<listcomp>T)	rV   rW   rX   ZdxZdydzrz   r   Zlightsource   rB   )rD   rY   rZ   mcolorsZLightSourcer   r   r|   r   ranger   testingZassert_array_max_ulpZ_facecolor3d)
rR   r$   ZlslengthwidthrV   rW   r   rz   Z
collectionr)   r   r*   test_bar3d_lightsource   s&    
    r   zcontour3d.pngc                  C   s   t  } | jdd}td\}}}|j|||ddtjd |j|||ddtjd |j|||d	d
tjd |dd
 |	dd
 |
dd d S Nr-   r.   皙?rX   )ry   offsetcmaprV   rW   (   d   rD   rY   rZ   r   get_test_datacontourr	   r   set_xlimset_ylimset_zlimrR   r$   XYZr)   r)   r*   test_contour3d   s    r   zcontour3d_extend3d.pngc               	   C   sf   t  } | jdd}td\}}}|j|||ddtjdd |dd	 |	d
d |
dd d S )Nr-   r.   r   rX   r   T)ry   r   r   Zextend3dr   rs   r   P   r   r   r)   r)   r*   test_contour3d_extend3d   s    r   zcontourf3d.pngc                  C   s   t  } | jdd}td\}}}|j|||ddtjd |j|||ddtjd |j|||d	d
tjd |dd
 |	dd
 |
dd d S r   )rD   rY   rZ   r   r   contourfr	   r   r   r   r   r   r)   r)   r*   test_contourf3d   s    r   zcontourf3d_fill.pngc                  C   s   t  } | jdd}ttdddtddd\}}|dd}d|d d dd d df< |j|||dd	dgtj	d
 |
dd |dd |dd d S )Nr-   r.   r         ?r   皙?r?   皙)r   levelsr   r>   r   )rD   rY   rZ   r   r   r|   clipr   r	   r   r   r   r   r   r)   r)   r*   test_contourf3d_fill   s    $r   zextend, levelsbothr   rB   r   min   maxc                 C   s   t t dddt ddd\}}|d |d  }tjd  }||d ||d dd|d	}|jd
d}	|	j	|||fddddddgi| | jd
d}
|
j	||||fd|i| |	|
fD ](}|
dd |dd |dd qd S )Nr   r   r   viridisr      r      )vminvmaxr   r-   r.   r   rB   r   r   extendru   )r   r   r|   mpl	colormapscopyZ	set_underZset_overrZ   r   r   r   r   )r5   r6   r   r   r   r   r   r   kwargsax_refax_testr$   r)   r)   r*   test_contourf3d_extend   s    $$r   ztricontour.png{Gz?)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.   )	rD   rY   r   randomseedZrandrZ   Z
tricontourZtricontourf)rR   rV   rW   rX   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.   )rs   rt   r   ru   r   r   r   )rD   rY   rZ   r   linspacer   randintr   )rR   r$   ZnxnyrV   rW   rX   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.   rB   r   r   r   r   )	rD   rY   rZ   r   r   pisincosplot)rR   r$   thetarX   r&   rV   rW   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rZ   r   r5   r6   ax1ax2r)   r)   r*   test_plot_scalar3  s    r   c               	   C   s  t jtdd tdg g  W 5 Q R X t jtdd tg dg  W 5 Q R X t jtdd tg g d W 5 Q R X tg g g } t jtdd | dg g  W 5 Q R X t jtdd | g dg  W 5 Q R X t jtdd | g g d W 5 Q R X d S )Nz	x must bematchr   z	y must bez	z must be)pytestraisesRuntimeErrorr   ZLine3Dset_data_3d)liner)   r)   r*   test_invalid_line_data;  s    r   zmixedsubplot.pngc            	   	   C   s   dd } t ddd}t ddd}tjtdd}|d	d
d
}|j|| |d|| |ddd |d |jd	d
d	dd}t t dddt ddd\}}t 	||}t 
|}|j|||ddddd |dd
 d S )Nc                 S   s    t dt j |  t |   S )Nr   )r   r   r   exp)tr)   r)   r*   fN  s    ztest_mixedsubplots.<locals>.f              @r   r          @r   r   r   Zbozk--r   )markerfacecolorTr-   r.   r?   r   r   r   F)rcountccount	linewidthantialiasedr>   )r   r|   rD   rY   r   rZ   r   gridr   hypotr   plot_surface
set_zlim3d)	r   t1t2rR   r$   r   r   Rr   r)   r)   r*   test_mixedsubplotsL  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)rZ   textrn   r   r)   r)   r*   test_tight_layout_textd  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.   ru   r&   r   )rv   markerrt   rr   ^r   r>   r   rD   rY   rZ   scatterr   r|   rR   r$   rV   rW   rX   r)   r)   r*   test_scatter3dq  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.   ru   r&   noner   )	facecolor	edgecolorr  rt   rr   r  )rz   r  r  r`   r)   r)   r*   test_scatter3d_color~  s         " r  zscatter3d_linewidth.pngc                  C   sD   t  } | jdd}|jtdtdtddtdd d S )Nr-   r.   ru   r   )r  r   r  r`   r)   r)   r*   test_scatter3d_linewidth  s     r  c                 C   s|   |j dd}|jtdtdtddd}|td | j dd}|jtdtdtddtdd d S )Nr-   r.   ru   r   r  )r  
linewidths)rZ   r  r   r|   set_linewidthsr6   r5   r   rv   r   r)   r)   r*   %test_scatter3d_linewidth_modification  s    r  c                 C   s   |j dd}|jtdtdtddd}|d |d |dd	gd
  | sbt|	d | rxt|
tdd |d | j dd}|jtdtdtdddddd	gd
 dddd
 d S )Nr-   r.   ru   r   r  C1C2333333?ffffff?r?   FK   r=   )r  r  r  r{   
depthshader  r  )rZ   r  r   r|   set_facecolorset_edgecolor	set_alphaget_depthshader_   set_depthshadeZ	set_sizesfullr  r  r)   r)   r*   test_scatter3d_modification  s*    



  
  r*  r#  c                 C   s2  t jddddf \}}t |j|j}t |jd}d|ddddddf< d|ddddddf< t |jd}d	|dd
dd
f< d|ddddf< d|ddddf< t |jd}d|dd
dd
f< d|d
ddd
f< d|d
dd
df< t |jd}	d
|	ddddddf< d
|	ddddddf< dd |||||||	fD \}}}}}}}	| jdd}
dd ||||	fD }tj	| D ]p\}}}}||k||kB ||kB |	|kB }t j
j||td}t |t|j }|
j|||||||d|d	 q|jdd}|j|||||||	d|d	 dS )z1Test that marker properties are correctly sorted.Nru      r   r   r   r   C0r  r?   r  r   rB   ZC3ZC4ZC5ZC6	   ZC7c                 S   s   g | ]}|  qS r)   )rE   r   ar)   r)   r*   r     s   z*test_scatter3d_sorting.<locals>.<listcomp>r-   r.   c                 s   s   | ]}t |V  qd S )N)r   uniquer.  r)   r)   r*   	<genexpr>  s     z)test_scatter3d_sorting.<locals>.<genexpr>Zdtype)r  fceclwr{   r#  )r   mgridr|   sizereshapeshaper)  rZ   r   r   maZmasked_arrayfloatrepeatr    maskr  )r6   r5   r#  rW   rV   rX   Zsizes
facecolors
edgecolorsr  r   Zsetsr  r3  r4  r5  Zsubsetr   r)   r)   r*   test_scatter3d_sorting  sR    
  r@  ri      c              	   C   s   ddg}ddg}ddg}ddg}| j dd}|j|||d|d	 |jd|dd
 |j dd}|j|ddd |ddd |ddd d|ddd d	 |jd|dd
 dS )z
    Test that the draw order does not depend on the data point order.

    For the given viewing angle at azim=-50, the yellow marker should be in
    front. For azim=130, the blue marker should be in front.
    r>   r   r   rr   rW   r-   r.     r  rv   rg   N)rZ   r  rm   r5   r6   ri   rV   rW   rX   rz   r$   r)   r)   r*   $test_marker_draw_order_data_reversed  s    	<rF  c              	   C   s   d}ddg}ddg}ddg}ddg}| j dd}|  |j|||d	|d
 |jd|dd |j dd}|  |j|||d	|ddd d
 |jd|d dd dS )z
    Test that the draw order changes with the direction.

    If we rotate *azim* by 180 degrees and exchange the colors, the plot
    plot should look the same again.
    rB  r>   r   r   rr   rW   r-   r.   rC  rD  rg   Nre   )rZ   set_axis_offr  rm   rE  r)   r)   r*   #test_marker_draw_order_view_rotated  s    rH  zplot_3d_from_2d.pnggQ?c                  C   sT   t  } | jdd}tdd}tdd}|j||ddd |j||ddd d S )	Nr-   r.   r   r?   ru   rV   rx   ry   rW   )rD   rY   rZ   r   r|   r   )rR   r$   r~   r   r)   r)   r*   test_plot_3d_from_2d   s    rJ  zsurface3d.pngc               
   C   s   dt jd< t  } | jdd}tddd}tddd}t||\}}t||}t|}|j	|||ddt
jd	dd
}|dd | j|ddd d S )NFzpcolormesh.snapr-   r.   r   r?   r   r   r   )r   r   r   r5  r  )\()\(?r   )shrinkaspect)rD   rcParamsrY   rZ   r   r|   r   r  r   r  r	   r   r   colorbar)rR   r$   r   r   r  r   Zsurfr)   r)   r*   test_surface3d*  s    

 rQ  zsurface3d_shaded.pngc               
   C   s   t  } | jdd}tddd}tddd}t||\}}t|d |d  }t|}|j|||dddddgddd	 |	d
d d S )Nr-   r.   r   r?   r   r   r   F)rstridecstriderz   r5  r  rK  rL  )
rD   rY   rZ   r   r|   r   sqrtr   r  r   )rR   r$   r   r   r  r   r)   r)   r*   test_surface3d_shaded<  s    
  rU  zsurface3d_masked.pngc                  C   sv  t  } | jdd}ddddddd	d
dddg}ddddddd	d
g}t||\}}tdddddddddddgdddddddddddgdddddd
dddddgddd	d
dddd
d	ddgddd
ddddddd	dgdddddddddddgdddddddddddgdddddddddddgg}tj|d}tj	|
 | d}tjd ||}|j||||d |ddd d S )Nr-   r.   r   r   r=   rB   r?   r   r   r   r-  ru   rO   r>   r   g            rt                  r+  )r   r   Zplasmar>  rs   r   )rD   rY   rZ   r   r   r   r:  masked_lessr   	Normalizer   r   r   r   r  rm   )rR   r$   rV   rW   ZmatrixrX   normr
   r)   r)   r*   test_surface3d_maskedJ  s*    ra  c                 C   s`   t t dt d\}}|| }| jdd}|j|||d d |jdd}|||| d S )Nr?   r-   r.   r]  )r   r   r|   rZ   r  )r5   r6   rV   rW   rX   r   r   r)   r)   r*   test_plot_surface_None_arge  s    rb  zsurface3d_masked_strides.pngc                  C   sj   t  } | jdd}tjddddddf \}}tj|| d}|j|||ddd |d	d
d d S )Nr-   r.   igffffff@r   r   rB   rR  rS  <   r   )	rD   rY   rZ   r   r6  r:  r^  r  rm   r  r)   r)   r*   test_surface3d_masked_strideso  s    rf  z
text3d.pngc                  C   s   t  } | jdd}d}d}d}d}t||||D ].\}}}}	d|||	|f }
||||	|
| q2|jdddd	d	d
 |jddd|jd |dd |dd |	dd |
d |d |d d S )Nr-   r.   NrV   rW   rX   )r   r   r   r   r   r   r   r   rB   r-  r   r   r   rB   r   r   r   r   rB   r   r?   r   r   r   z(%d, %d, %d), dir=%sr   r   r   r   gffffff?z2D Text)	transformr   ru   zX axiszY axiszZ axis)rD   rY   rZ   r#   r  Ztext2DZ	transAxes
set_xlim3d
set_ylim3dr  r[   r\   r]   )rR   r$   zdirsr~   r   rx   ry   rV   rW   rX   rT   r)   r)   r*   test_text3d{  s"    

rp  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 qd S )Nrg  ri  rj  rk  r-   r.   r   ru   (z, z), dir=)ry   )rZ   rm  rn  r  r#   r  Zset_position_3d)r6   r5   ro  r~   r   rx   r   ry   rV   rW   rX   r   r   r)   r)   r*   test_text3d_modification  s"    (rr  ztrisurf3d.pnggZd;?c            	      C   s   d} d}t dd|}t jddt j | dd}t j|d	t jf |d
d}|d d d
d df  t j|  7  < t d|t |  }t d|t |  }t | | }t	
 }|jdd}|j|||tjdd d S )N$   r         ?      ?r   r   FZendpoint.r   axisr-   r.   皙?)r   r   )r   r   r   r<  newaxisappendr   rE   r   rD   rY   rZ   plot_trisurfr	   Zjet	Zn_anglesZn_radiiZradiiZanglesrV   rW   rX   rR   r$   r)   r)   r*   test_trisurf3d  s    $r~  ztrisurf3d_shaded.pngQ?c            	      C   s   d} d}t dd|}t jddt j | dd}t j|d	t jf |d
d}|d d d
d df  t j|  7  < t d|t |  }t d|t |  }t | | }t	
 }|jdd}|j|||d
ddgdd d S )Nrs  r   rt  ru  r   r   Frv  .r   rw  r-   r.   r   ry  )rz   r   )r   r   r   r<  rz  r{  r   rE   r   rD   rY   rZ   r|  r}  r)   r)   r*   test_trisurf3d_shaded  s    $r  zwireframe3d.pngc                  C   s<   t  } | jdd}td\}}}|j|||ddd d S )Nr-   r.   r      r   r   rD   rY   rZ   r   r   plot_wireframer   r)   r)   r*   test_wireframe3d  s    r  zwireframe3dzerocstride.pngc                  C   s<   t  } | jdd}td\}}}|j|||ddd d S )Nr-   r.   r   r  r   r  r  r   r)   r)   r*   test_wireframe3dzerocstride  s    r  zwireframe3dzerorstride.pngc                  C   s<   t  } | jdd}td\}}}|j|||ddd d S )Nr-   r.   r   r   ru   rc  r  r   r)   r)   r*   test_wireframe3dzerorstride  s    r  c               	   C   sR   t  } | jdd}td\}}}tt |j|||ddd W 5 Q R X d S )Nr-   r.   r   r   rc  )	rD   rY   rZ   r   r   r   r   
ValueErrorr  r   r)   r)   r*    test_wireframe3dzerostrideraises  s
    r  c               	   C   s|   t  } | jdd}td\}}}tt |j|||ddd W 5 Q R X tt |j	|||ddd W 5 Q R X d S )Nr-   r.   r   ru   2   )rR  r   )rS  r   )
rD   rY   rZ   r   r   r   r   r  r  r  r   r)   r)   r*   test_mixedsamplesraises  s    r  zquiver3d.pngzquiver3d_pivot_middle.pngzquiver3d_pivot_tail.pngc                  C   s   t jdddddddddf \} }}t t j|  t t j|  t t j|  }t t j|   t t j|  t t j|  }dt t j|   t t j|  t t j|  }dD ]0}t jdd	}|j| |||||d
|dd	 qd S )Nr>   rw                 $@333333?              @>,p ?)tipmiddletailr-   r.   r   Tr   pivot	normalize)	r   ogridr   r   r   rD   rY   rZ   quiver)rV   rW   rX   uvwr  r$   r)   r)   r*   test_quiver3d  s    (024r  c           	      C   sP   |j dd g  } } } } }}| j dd}|j||||||dddd	 d S )Nr-   r.   r   r  Tr  )rZ   r  )	r5   r6   rV   rW   rX   r  r  r  r$   r)   r)   r*   test_quiver3d_empty  s    r  zquiver3d_masked.pngc                  C   s.  t  } | jdd}tjdddddddddf \}}}ttj| ttj|  ttj|  }ttj|  ttj|  ttj|  }dttj|  ttj|  ttj|  }tjj	d	|k |d
k @ |dd}tjj	d
|k |dk @ |dd}|j
||||||d
ddd	 d S )Nr-   r.   r>   rw   r  r  r  r  皙ٿr   F)r   r!  r  Tr  )rD   rY   rZ   r   r6  r   r   r   r:  Zmasked_wherer  )rR   r$   rV   rW   rX   r  r  r  r)   r)   r*   test_quiver3d_masked  s    (024r  c                  C   sp   t  } | jdd}td}|| t| |d t	|
 dsNt| j  t	|
 dsltd S )Nr-   r.   r   r   )ru  r   r   r   )r   r   r   r   )rD   rY   rZ   r   	add_patchr   Zpatch_2d_to_3dr$  r   Z
same_colorget_facecolorr_   r   r   )rR   r$   Zcircler)   r)   r*   test_patch_modification   s    



r  c                 C   s   t dd}t dd}tddddgddddgg}tj||gdd	}| jd
d}|| |d || |	d |
 st|d |
 rtt dd}t dd}tddddgddddgg}tj||gdd|ddd}|jd
d}|| d S )Nr  r   )r   r   r  r   r   ru  r=   )r  r-   r.   r  r!  F)r  r  r  r{   r#  )r   r   r   r   ZPatch3DCollectionrZ   add_collection3dr%  r$  r&  r'  r_   r(  )r5   r6   Zpatch1Zpatch2r>  rv   r   r   r)   r)   r*   "test_patch_collection_modification-  s.    








  r  c               	   C   s~   dddgdddgdddgdddgg} t jtdd t|  W 5 Q R X tj| td} t jtdd t|  W 5 Q R X d S )Nr   r   zlist of \(N, 3\) array-liker   r2  )r   r   r  r   Poly3DCollectionr   r   r;  )polyr)   r)   r*   &test_poly3dcollection_verts_validationI  s    $r  zpoly3dcollection_closed.pngc                  C   s   t  } | jdd}tdddgdddgdddggt}tdddgdddgdddggt}tj|gddddd	}tj|gddd
dd	}|| || d S )Nr-   r.   r   r   r=   k)r   r   r   r   Tr  r  r  closed)r   r   r   r   F)	rD   rY   rZ   r   r   r;  r   r  r  rR   r$   Zpoly1Zpoly2Zc1c2r)   r)   r*   test_poly3dcollection_closedS  s    $$  
r  c                  C   sv   t g } t|  t| tjs"t|  g ks2ttjt	ddd\}}|
|  |  }t|sht|j  d S )Nr-   r.   r0   )r   r   Zpoly_collection_2d_to_3d
isinstancer  r_   	get_pathsrD   r2   r3   
add_artistZdo_3d_projectionr   isnanr   r   )r  rR   r$   Zminzr)   r)   r*   #test_poly_collection_2d_to_3d_emptyb  s    

r  zpoly3dcollection_alpha.pngc                  C   s   t  } | jdd}tdddgdddgdddggt}tdddgdddgdddggt}tj|gddddd	}|d
 tj|gddd}|	d |
d |d
 || || d S )Nr-   r.   r   r   r=   r  r   r   r   Tr  r   F)r  r  )r   r   r   )rD   rY   rZ   r   r   r;  r   r  r&  r$  r%  r  r  r)   r)   r*   test_poly3dcollection_alphaq  s    $$ 




r  zadd_collection3d_zs_array.pngc                  C   sD  t dt j dt j d} t ddd}|d d }|t |  }|t |  }t |||gddd}t j|d d |dd  gdd	}t	 }|j
d
d}tddt j }	t|d d d d d df d|	d}
|
t | dt j  |j|
|d d d d df d}|d k	st|dd |dd |dd d S )Nr   rB   r   r   r   r   r>   r=   rw  r-   r.   r   twilightr   r`  rx   r   r?   r   )r   r   r   r   r   column_stackr8  concatenaterD   rY   rZ   r_  r   	set_arraymodr  r_   r   r   r   r   rX   r&   rV   rW   ZpointssegmentsrR   r$   r`  lcr   r)   r)   r*   test_add_collection3d_zs_array  s"    "$ r  zadd_collection3d_zs_scalar.pngc                  C   s   t ddt j d} d}|d d }|t |  }|t |  }t ||gddd}t j|d d |dd  gdd}t	 }|j
dd}tddt j }	t|d	|	d
}
|
|  |j|
|d}|d k	st|dd |dd |dd d S )Nr   r   r   r   r>   rw  r-   r.   r  r  r  r   r?   r   r   )r   r   r   r   r   r  r8  r  rD   rY   rZ   r_  r   r  r  r_   r   r   r   r  r)   r)   r*   test_add_collection3d_zs_scalar  s"    "
r  zaxes3d_labelpad.pngc                  C   s   t  } | t| }|jjtjd ks,t|j	ddd |jjdksJt|
d |jddd |jjdksrt| dkstd|j_d|j_t|j D ]\}}|| |d	   qd S )
Nzaxes.labelpadzX LABELru   )labelpadzY LABELzZ LABELrt   r   r?   )rD   rY   Zadd_axesr   xaxisr  r   rO  r_   r[   r\   r]   zaxisZ
get_zlabelyaxisrF   get_major_ticksZset_padZget_pad)rR   r$   rM   tickr)   r)   r*   test_axes3d_labelpad  s    
r  zaxes3d_cla.pngc                  C   s.   t  } | jddddd}|  |  d S )Nr   r-   r.   )rD   rY   rZ   rG  clar`   r)   r)   r*   test_axes3d_cla  s    r  zaxes3d_rotated.pngc                  C   s,   t  } | jddddd}|ddd d S )Nr   r-   r.   rb   -   r   )rD   rY   rZ   rm   r`   r)   r)   r*   test_axes3d_rotated  s    r  c               	   C   s   t jdddd} t jdddd}t | |\}}t jd}tjdd}|jdddd	d
}t	t
 |||| W 5 Q R X d S )Nr   ru   r   )num)   r   r   r   r   r-   r.   )r   r   r   r   randnrD   rY   rZ   r   r   r  r  )rV   rW   r   r   rX   rR   r$   r)   r)   r*   test_plotsurface_1d_raises  s    r  c            
      C   sx   t dddg} t dddg}t dddg}d}t| |||\}}}t|||| }tddd}t ||}	|	S )Nr   ii  r   r   r   r   )r   r   r   
_view_axes_view_transformation_uvwZpersp_transformationdot)
Er  Vrj   r  r  r  viewMZperspMMr)   r)   r*   _test_proj_make_M  s    r  c            
      C   s   t  } tddddddddddg
d }tddddddddddg
d }tddddddddddg
d }t|||| \}}}t|||| \}}}	tj|| tj|| tj|	| d S )Nr   r        r@)r  r   r   r   proj_transformZinv_transformr   Zassert_almost_equal)
r  r~   r   rx   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   rV   rW   rX   )r   r  r#   rD   r2   r   Zadd_collectionr  )r  r  argsr   r~   r   rx   r  r  r  r   r$   ZayazlinesrR   ZlinecrV   rW   r   r)   r)   r*   _test_proj_draw_axes  s    
r  zproj3d_axes_cube.pngc                  C   s   t  } d }tddddddddddg
d }tddddddddddg
d }tddddddddddg
d }t|||| \}}}t| dd\}}	|	j|||d |	j||dd t	|||D ]\}
}}|	
|
|| q|	d	d
 |	d	d
 d S )N0 1 2 3 0 4 5 6 7 4r   r   r  i  r
  rv   r&   皙ɿry  )r  splitr   r   r   r  r  r  r   r#   r  r   r   )r  tsr~   r   rx   r  r  r  rR   r$   rV   rW   r   r)   r)   r*   test_proj_axes_cube  s    """r  zproj3d_axes_cube_ortho.pngc                  C   sn  t dddg} t dddg}t dddg}d}t| |||\}}}t|||| }tdd}t ||}	d }
t ddddddddddg
d }t ddddddddddg
d }t ddddddddddg
d }t||||	\}}}t	|	dd\}}|j
||d	| d |j||d
d t|||
D ]\}}}|||| q6|dd |dd d S )N   r   r   r   r>   r     r
  r   r&   r  i8)r   r   r   r  r  Zortho_transformationr  r  r  r  r  r   r#   r  r   r   )r  r  r  rj   r  r  r  r  ZorthoMr  r  r~   r   rx   r  r  r  rR   r$   rV   rW   r   r)   r)   r*   test_proj_axes_cube_ortho/  s(    """r  c                  C   sv   ddddg} t | tjd }tj|ddddg ddddg} t | tjd }tj|dtdd ddg d S )Nr   r   r   r=   r   r   )r   Zrot_xr   r   r   assert_allcloserT  )r  Z	rotated_Vr)   r)   r*   test_rotL  s    r  c               
   C   sf   d\} }d\}}d\}}t | |||||}tj|ddddgddddgddd	d
gddddgg d S )N)r   x   )r   r   )r   ry  r   r   r   g{Gzt?r   g      $@r>   r   )r   Zworld_transformationr   r   r  )ZxminZxmaxZyminZymaxzminzmaxr  r)   r)   r*   
test_worldV  s    



r  zproj3d_lines_dists.pngc                  C   s   t jdtddd\} }d}d}||| t||\}}d}d}||| t|d	 |d	 f||}tt	||fj
||}||d	 kstt|||D ]&\}}	}
t||	f|
d	d
}|| q|dd |d	d d S )N)rB   r   r9   )rN  )rP   r1   )r   rs   )rt   r  )r   r   rt   rs   )r   r  rs   r  r   )fillrA  r  r   )rD   r2   r3   r   r#   r  r   _line2d_seg_distr   r   Tr_   r   r  r   r   )rR   r$   r~   r   Zp0p1Zdist0distrV   rW   drv   r)   r)   r*   test_lines_distsb  s     r  c                  C   s.   d} d}t || |  t t|| |  d S )N)ru   rs   r  )rt   r  re   )r   r  r   r   )s0pr)   r)   r*   test_lines_dists_nowarning{  s    r  c                  C   s   t jddid\} }| dks$t|jdddd |dd	gdd	gdd	g | d
ks^t|d |d |ddgddgddg | dkst|jdd |ddgddgddg | dkstd S )Nr/   r-   r0   Zlinearr   r   ry  rV   rW   rX   r   )r   r   r   皙?r  g333333?FTr   )r   r   r   r  r  333333@rV   rw  )r   r   r   r  r  r  )	rD   r2   Z
get_zscaler_   marginsr   Z
get_w_limsZ	autoscaleZset_autoscalez_onr`   r)   r)   r*   test_autoscale  s    

r  rx  r  r8   )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st|j	
  tj| d d S )Nr-   r.   r   r   r   Zget_autoscaleZ_onset_Zlimget_)      r   )r8   )rD   rY   rZ   r   r|   r   r  getattrr_   r   r   r   assert_array_equal)
rx  r8   rR   r$   rV   rW   Zget_autoscale_onZset_limZget_limZ	post_autor)   r)   r*   test_unautoscale  s    

r  c               	   C   s`   t  } | jdd}tt |jddd W 5 Q R X tt |jddd W 5 Q R X d S )Nr-   r.   perspr   Zfocal_lengthrf   r   )rD   rY   rZ   r   r   r  rl   r`   r)   r)   r*   test_axes3d_focal_length_checks  s    r  zaxes3d_focal_length.pngc                  C   sB   t jddddid\} }|d jdtjd |d jdd	d d S )
Nr   r   r/   r-   r0   r   r  r  333333?)rD   r2   rl   r   inf)rR   rL   r)   r)   r*   test_axes3d_focal_length  s    r  zaxes3d_ortho.pngc                  C   s"   t  } | jdd}|d d S )Nr-   r.   rf   )rD   rY   rZ   rl   r`   r)   r)   r*   test_axes3d_ortho  s    r  zaxes3d_isometric.pngc               	   C   s   ddl m} m} tjtddddd\}}d}| tt||||d	D ]>\}}t	|| 
 |d
 |d  krJ|jt||ddi qJ|jttdtd	 ddd |d d S )Nr   )r   r   r-   rf   )rB   rB   rB   )r/   Z	proj_typeZ
box_aspectr0   )r>   r   r   r   rv   r  ru  re  rg   T)r   r   r   rD   r2   r3   r   r   r   r!   r    r"   r#   rm   degreesZarctanrT  r  )r   r   rR   r$   r&   r  er)   r)   r*   test_axes3d_isometric  s    $ &r  value)setterside)rm  left)rm  right)rn  bottom)rn  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.   )rD   rY   rZ   r   r   r  r  )r  r  r  limitrR   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-   r0   )r?   rB   r=   )rD   r2   r   indicesvoxels)selfrR   r$   rV   rW   rX   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-   r0   )r?   r?   rB   r   g      ?g](\@r=   r  )r  r  r  )rD   r2   r   r  r  r   keysr%  )r  rR   r$   rV   rW   rX   r  r  r)   r)   r*   test_edge_style  s
    (zTestVoxels.test_edge_stylezvoxels-named-colors.pngc                 C   s   t jddid\}}td\}}}||k||kB }||| | dk  @ }tjddtjd}d||d	k |d	k @ < d
||| dk < |j||d dS )z5Test with colors set to a 3D object array of strings.r/   r-   r0   ru   ru   ru   r   r,  r2  z0.25r?   Zcyanru   r]  N)rD   r2   r   r  r)  Zobject_r  r  rR   r$   rV   rW   rX   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-   r0   r!  )ru   ru   ru   r=   r-  .r   .r   .r   r]  N)rD   r2   r   r  zerosr  r"  r)   r)   r*   test_rgb_data  s    
zTestVoxels.test_rgb_datazvoxels-alpha.pngc                 C   s   t jddid\}}td\}}}||k}t|| dk }||B }td}	dddd	g|	|< dddd	g|	|< |j||	d
}
t|
tkst	|

 D ](\}}|| st	dt|tjst	qd S )Nr/   r-   r0   r!  r   )ru   ru   ru   rB   r   r   r   r]  zfaces returned for absent voxel)rD   r2   r   r  r!   r'  r  typer3   r_   itemsr  r   r  )r  rR   r$   rV   rW   rX   Zv1Zv2r  r
   r  Zcoordr  r)   r)   r*   
test_alpha  s    
zTestVoxels.test_alphazvoxels-xyz.png{Gz?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-   r0   c                 S   sZ   d}t | jD ]F}| |tjd d   | |tjdd     d } |tjd d  7 }q| S )Nr)   r>   r   r   )r   ndimr   Z	index_exp)rV   slrM   r)   r)   r*   	midpoints$  s    z&TestVoxels.test_xyz.<locals>.midpoints)   r0  r0  g      0@r   r   r   )r=   r$  r%  r&  r   r   )r>  r?  r   )rD   r2   r   r  r'  r9  r  r   )r  rR   r$   r/  r&   rq   rr   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 )NrA   )r   r=   rB   r/   r-   r0   r  )r  filledr  r   )r4  )r4  rV   rW   rX   )r   r  ZonesrD   r2   r3   r  r   r   	TypeErrorAttributeError)r  rV   rW   rX   r4  rR   r$   kwr)   r)   r*   test_calling_conventionsA  s    
z#TestVoxels.test_calling_conventionsN)__name__
__module____qualname__mpl3d_image_comparisonr  r   r#  r(  r+  r3  r8  r)   r)   r)   r*   r    s   






 r  c            
      C   s
  ddgddgddg  } }}ddgd	d
gddg  }}}t  }|jdd}|| ||}|d }	tj| ||f|	  |	||| tj|||f|	  |		|  |	
| |	j|dd tj| ||f|	  |	jddd tj| |t|f|	  d S )Nr   r   r   r=   rB   r?   r   r   r   r-  ru   rO   r-   r.   rX   rI  )rD   rY   rZ   r   r   r   r  Zget_data_3dr   Z	set_xdataZ	set_ydataZset_3d_propertiesr   )
rV   rW   rX   Zx2y2z2rR   r$   r  r   r)   r)   r*   test_line3d_set_get_data_3dZ  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   ru   )rZ   r   Zinvert_yaxisr4   r)   r)   r*   test_invertedl  s    &r@  c                  C   s   t jddid\} }| r t| r,t| r8t|dd |dd |dd | sht| stt| st|	  | rt| rt| rtd S )Nr/   r-   r0   r   r   )
rD   r2   Zxaxis_invertedr_   Zyaxis_invertedzaxis_invertedr   r   r   r  r`   r)   r)   r*   test_inverted_clax  s    rB  c                  C   s   t  } t| }|jddd |jddd |jddd | j  |j D ]}|jj	dksNt
qN|j D ]}|jj	dksnt
qn|j D ]}|jj	dkst
qd S )NrV   r   )rx  r
   rW   rX   )rD   rY   r   Ztick_paramsr   r   r  r  Z	tick1lineZ_colorr_   r  r  )rR   r$   r  r)   r)   r*   test_ax3d_tickcolour  s    
rC  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 qt|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 ) NrB   r?   r/   r-   r0   g    cAg   @cArV   rW   rX   r   r   plain)rx  r   r   )r   r   )rx  Z	scilimitsr   zaxes.formatter.useoffset)rx  Z	useOffsetr=   zaxes.formatter.use_locale)rx  Z	useLocalezaxes.formatter.use_mathtext)rx  ZuseMathTextc                    s    fdd|D S )Nc                    s   g | ]}t  | qS r)   )r  Zget_major_formatter)r   namer$   r)   r*   r     s     zAtest_ticklabel_format.<locals>.get_formatters.<locals>.<listcomp>r)   )r$   namesr)   rF  r*   get_formatters  s    z-test_ticklabel_format.<locals>.get_formattersr  r  r  F)r2   rk   r   r#   Zticklabel_formatr   rO  Zset_scientificZset_powerlimitsZset_useOffsetZset_useLocaleZset_useMathText)	r5   r6   rL   r$   rowrE  rH  rG  fmtr)   r)   r*   test_ticklabel_format  sX    
   
 


 
rK  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  gr   ry  rw   )r   ru  r-   r.   )r   r  )r   r   r|   	ones_liker#   rZ   r  )r5   r6   r  rV   rW   rX   r  r  r  rR   r   r$   r)   r)   r*   test_quiver3D_smoke  s    
rM  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)	rD   rY   rZ   Z
set_xticksZset_xticklabelsZ
set_yticksZset_yticklabels
set_zticksZset_zticklabelsrF  r)   r)   r*   test_minor_ticks  s    rQ  zerrorbar3d_errorevery.pngc            
   	   C   s   t ddt j d d} t | t d|  t d|    }}}t }|jdd}d	}t | j}|| dk|| d dk@ }|| dk|| d dk@ }	|j	|||d
||	|d dS )z0Tests errorevery functionality for 3D errorbars.r   r   r   r,  r=   r?   r-   r.      ry  )zuplimszlolimsZ
erroreveryN)
r   r|   r   r   r   rD   rY   rZ   r7  errorbar)
r   rV   rW   rX   rR   r$   ZesteprM   rS  rT  r)   r)   r*   test_errorbar3d_errorevery  s    *rV  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=   rB   r?   r   FTZpurplezError lines)rV   rW   rX   ZxerrZyerrZzerrZcapsizerS  rT  ZyuplimsZecolorrT   N)rD   rY   rZ   rU  Zlegend)rR   r$   r  r  r)   r)   r*   test_errorbar3d  s     rW  z
stem3d.pngg~jth?)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 qd S )Nr   r=   )r   r   Tr/   r-   rP   Zconstrained_layoutr1   r   rV   rW   rX   )orientationzorientation=rt   r   zC4-.ZC1Dr  )linefmtZ	markerfmtZbasefmtrY  r  )r   Zmarkeredgewidth)rD   r2   r   r   r   r   r   r#   stemrG   rL  setZset_linewidth)rR   rL   r   rV   rW   rX   r$   ry   Z
markerlineZ	stemlinesZbaseliner)   r)   r*   test_stem3d  s6    



    r]  zequal_box_aspect.pngc               	   C   s  ddl m} m} t }|jdd}tddtj d}tdtjd}t	t
|t|}t	t|t|}t	t|t
|}|||| ddg}	|tt| |	|	|	dD ]B\}
}tt|
| |	d |	d  kr|jt|
|d	d
i qt| | | g}t|d t|d g}|| || || |d |d tj t!dd |jddd W 5 Q R X d S )Nr   )r   r   r-   r.   r   r   r>   r   rz   rr   offrh  zArgument zoom =r   )zoom)"r   r   r   rD   rY   rZ   r   r   r   outerr   r   rL  r  r   r   r    r!   r"   r#   r  
get_xlim3d
get_ylim3d
get_zlim3dr   r   rm  rn  r  rx  rH   r   r   r  )r   r   rR   r$   r  r  rV   rW   rX   r&   r  r  ZxyzlimZXYZlimr)   r)   r*   test_equal_box_aspect   s0    $$




rd  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 std S )Nr   r   )rB   r?   Tr/   r-   rX  r?   Z
horizontal)r$   rY  ry  )rD   r2   r|  r   r   r  rP  r   r   r$   get_positionZextentsr_   )Z	num_plotsrR   rL   r$   Zp_triZcbarr)   r)   r*   test_colorbar_posF  s    



rf  c                  C   s"  t  } | jdd}| r t| dks0t| dks@t|d | rVt| dksft| dksvt|  | st| dkst| dkst|jdd | st| dkst| dkst|jd	d
 | st| dkst| dkstd S )Nr-   r.   r   r   r   r   )r   r   r   )upper)r   r   r   )lower)r   r   r   r   )	rD   rY   rZ   rA  r_   get_zlimZ
get_zboundZ
set_zboundZinvert_zaxisr`   r)   r)   r*   test_inverted_zaxisV  s*    
rm  c               	   C   s   t  } | jdd}| dks$t|jdd | dks@t|jdd | d	ks\ttjtd
d |jddd W 5 Q R X tjtdd |jddd W 5 Q R X d S )Nr-   r.   rg  r   )r  rh  r   )r  rk  z$Cannot pass both 'bottom' and 'zmin'r   r   )r  r  z!Cannot pass both 'top' and 'zmax')r  r  )	rD   rY   rZ   rl  r_   r   r   r   r5  r`   r)   r)   r*   test_set_zlimv  s"      rn  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std S )N   r-   r.      )r/   Zsharezr   r   r   r        @)r  rq  )rD   rY   rZ   r   rP  rl  r_   )rR   r   r   r)   r)   r*   test_shared_axes_retick  s    rr  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st|t|kst|t|kst|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)rD   rY   rZ   r  r   r   ra  rb  rc  Z_button_pressr   r   ZMIDDLEZ_on_mover   approxr_   )rt  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,    rw  ztool,button,key,expectedr_  ))r   Q?)r,  gQ?)r   {Gz?rV   ))g{Gzr   gQry  Qrx  rW   ))Q뱿g{Gz?rz  )r   g)\(?))g
ףp=
r	  )r}  g(\?)r|  g
ףp=
?pan))gffffff(\)g{GzgQgRQgffffff))gQgzG)r  gq=
ףpݿr{  ))ry  g{Gz?)gRQg(\ؿr  c                 C   sj  t  }|jdd}|ddd |j  | | |   }}}d}	d}
|j	
|	t}|j	
|
t}td|jf||fd|i}td|jf||fd|i}t|j}| d	kr|  || || || n&|  || || || |\}}}| tj|d
dks2t| tj|d
dksNt| tj|d
dksjt|  | t|kst| t|kst| t|kst|  | tj|d
dkst| tj|d
dkst| tj|d
dkst|  | t|ks6t| t|ksNt| t|ksftd S )Nr-   r.   r   r  r   r   Zbutton_press_eventkeyZbutton_release_eventr_  r,  )r!   )rD   rY   rZ   r  r   r   ra  rb  rc  Z	transDatarl  Zastypeintr   r   r_  Z
press_zoomZ	drag_zoomZrelease_zoomr~  Z	press_panZdrag_panZrelease_panr   rv  r_   backZforwardhome)Ztoolru  r  expectedrR   r$   Zxlim0Zylim0Zzlim0Zd0d1r  s1Zstart_eventZ
stop_eventtbZxlimZylimZzlimr)   r)   r*   test_toolbar_zoom_pan  sj    
    






r  c           
      C   s   t ttjt dddt dddt dddg j\}}}|| }| jddd}|j||||ddd	}| j	
  |  |jddd}|j||||ddd	}	d S )
Nr   r?   r   o   r-   r.   r   r   )rv   r  r   )r   r   r   r   r   r|   r  rZ   r  r   r   changed)
r5   r6   rV   rW   rX   rv   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/   rT   )rD   rY   Z
subfiguresrZ   )rR   Zsfr$   r)   r)   r*   test_subfigure_simple  s    r  computed_zorder)ZclassicZ_classic_test_patch)baseline_imagesr   r,   r   c               
   C   s  t  } | jddd}| jddd}d|_d}||fD ]h}tj|gddd	d
}|| |jdddddd |jdddddd |	d |
d |d q6| jddd}| jddd}d|_d}t| |f| |f\}	}
td}d}t| |fd|f\}}|| }t| |f| df\}}|| }d}d}tddtj |}|t| |t| || t|   }}}||fD ]}|j|||ddddd |j||dk  ||dk  ||dk  ddd dd! |j|	|
|dddd	d |j|t| |t| t|ddddd! |j|||dddd"d |j||dk ||dk ||dk ddd d#d! |jd$d%dd& |d' qd S )(N   r-   r.      F)rd   )r   r?   r   )r?   r?   r   )r?   r   r   ZwhiteZblackr   )r>  r?  zorder)r   r   )r   rB   r   r   )rv   r  )r=   r=   )r   r=   ru   )r   r   )r   rq        r   r   r   r   r   r>   )rz   r{   r   r  r?   z--r   )r5  Z	linestylerz   r  r=   rB   rt   r   rg   r^  )rD   rY   rZ   r  r   r  r  r   r  r   r   r   r   r   r'  r   r   r   r   r  rm   rx  )rR   r   r   Zcornersr$   ZtriZax3Zax4Zdimr   r   r   angleZX2ZY2ZZ2ZX3ZY3ZZ3r&   r  thrV   rW   rX   r)   r)   r*   test_computed_zorder$  s    



2
"
$
$r  c                  C   s   t  } | jdd}td}||t| | j  |	dddksNt
|jddd | j  |	ddd	kszt
|  | j  |	dddkst
d S )
Nr-   r.   ru   r   u   x=1.8066, y=1.0367, z=−0.0553rs   rW   )rj   vertical_axisu"   x=9.1651, y=−0.9215, z=−0.0359)rD   rY   rZ   r   r|   r   r   r   r   Zformat_coordr_   rm   rR   r$   rV   r)   r)   r*   test_format_coordw  s    



r  c                  C   sN   t  } | jdd}td}||t| | j  |	 dksJt
d S )Nr-   r.   ru   )FTF)rD   rY   rZ   r   r|   r   r   r   r   Zget_axis_positionr_   r  r)   r)   r*   test_get_axis_position  s    

r  c                  C   s   t  } | jdd}|d | dks.t|ddd | dksLt|jdd	 | d
ksht|jdd | dkst|jdd | dkstd S )Nr-   r.   ry  )ry  ry  ry  r   r   )r   ry  r   r   )rV   )r   ry  r   )rW   )r   r   r   rX   )r   r   r   )rD   rY   rZ   r  r_   r`   r)   r)   r*   test_margins  s    
r  zerr, args, kwargs, match)r>   z!margin must be greater than -0\.5)r   r>   r   )r   r   r>   r>   rX   )r   z'Cannot pass both positional and keyword)rV   rW   r  z*Must pass a single positional argument forc              	   C   s>   t j| |d& t }|jdd}|j|| W 5 Q R X d S )Nr   r-   r.   )r   r   rD   rY   rZ   r  )errr  r   r   rR   r$   r)   r)   r*   test_margins_errors  s    r  c                 C   sz   |j dd}tddd}tj|dd || | dks@t| j dd}tdddd}|| | dksvtd S )Nr-   r.   r   zFoo bar $\int$r   r  r  )rZ   r   r   Ztext_2d_to_3dr  Zget_position_3dr_   ZText3D)r5   r6   r$   txtZt3dr)   r)   r*   test_text_3d  s    

r  c                  C   s>   t  } | jdd}|dgdggdgdggdgdgg d S )Nr-   r.   r   r   )rD   rY   rZ   r   r`   r)   r)   r*   test_draw_single_lines_from_Nx1  s    r  c                 C   s`   |j dd}t }t|}tj|ddd || | j dd}tj|ddd}|| d S )Nr-   r.   )r   r   r!  r   r   rW   rX   ry   rI  )rZ   r   Zunit_rectangler   r   pathpatch_2d_to_3dr  ZPathPatch3D)r5   r6   r$   pathpatchZpp3dr)   r)   r*   test_pathpatch_3d  s    
r  zscatter_spiral.png)r  r   r   c                  C   sf   t  } | jdd}tddtj d d}|jt|t||d|d  |d d	}| j	
  d S )
Nr-   r.   r   r   r      r   r?   rD  )rD   rY   rZ   r   r   r   r  r   r   r   r   )rR   r$   r  Zscr)   r)   r*   test_scatter_spiral  s
    ,r  c                  C   sn   t jddddddf \} }t |d t | d  }t }|jddd}|j|| |d	d
}|  d S Nr   ru   y              Y@r=   r   r  r-   r.   Zhot)r   )	r   r  r   r   rD   rY   rZ   r  r  rW   rV   r>  rR   r$   r&   r)   r)   r*   #test_Poly3DCollection_get_facecolor  s    r  c                  C   sn   t jddddddf \} }t |d t | d  }t }|jddd}|j|| |d	d
}|  d S r  )	r   r  r   r   rD   rY   rZ   r  Zget_edgecolorr  r)   r)   r*   #test_Poly3DCollection_get_edgecolor  s    r  zDvertical_axis, proj_expected, axis_lines_expected, tickdirs_expectedr   g#k$I?g._x%Ig(m?g@mۿg      $g#k$IgW$%@g˗ì?g2m 3?g溾IgMg2m 3gM?g˗ìg溾I?c                 C   s   d}t jddddd}|jddd| d |jj  | }tjj	|||d t
| | | gD ]J\}}|| }	|j }
tjj	|	|
|d || }| }tj|| qhdS )	a  
    Test the actual projection, axis lines and ticks matches expected values.

    Parameters
    ----------
    vertical_axis : str
        Axis to align vertically.
    proj_expected : ndarray
        Expected values from ax.get_proj().
    axis_lines_expected : tuple of arrays
        Edgepoints of the axis line. Expected values retrieved according
        to ``ax.get_[xyz]axis().line.get_data()``.
    tickdirs_expected : list of int
        indexes indicating which axis to create a tick line along.
    g>r   r-   r.   r   )rh   ri   rj   r  )rtolN)rD   subplotrm   rY   r   r   Zget_projr   r   r  rF   Z	get_xaxisZ	get_yaxisZ	get_zaxisr   get_dataZ_get_tickdirr  )r  Zproj_expectedZaxis_lines_expectedZtickdirs_expectedr  r$   Zproj_actualrM   rx  Zaxis_line_expectedZaxis_line_actualZtickdir_expectedZtickdir_actualr)   r)   r*   test_view_init_vertical_axis  s    D"

r  zarc_pathpatch.pngc                  C   sF   t jddddd} tjdddddd	d
}| | tj|ddd d S )Nr   r-   r.   )r   r   r   g?rt   ru   rB  )r   heightr  Ztheta1Ztheta2r   rX   r  )rD   r  mpatchZArcr  r   r  )r$   r/  r)   r)   r*   test_arc_pathpatchU  s    
  
r  zpanecolor_rcparams.pngc               	   C   s:   t dddd t jdd} | jdd W 5 Q R X d S )	Nr&   rq   rr   )zaxes3d.xaxis.panecolorzaxes3d.yaxis.panecolorzaxes3d.zaxis.panecolorr  r   r-   r.   )rD   Z
rc_contextrY   rZ   )rR   r)   r)   r*   test_panecolor_rcparams`  s    
r  c                 C   s   | j ddd}dddg}dddg}dddg}||||d dddg|d	d	< dddg|d	d	< |j ddd}dddg}dddg}dddg}||||d d	S )
z~
    Test to see if the `z` axis does not get mutated
    after a call to `Axes3D.plot`

    test cases came from GH#8990
    r  r-   r.   r   r   r=   r   zo-Nr   )r5   r6   r   rV   rW   rX   r   r)   r)   r*   "test_mutating_input_arrays_y_and_zk  s    





r  c               	   C   sR   t jtdd: tdddgdddgdddggt} tj| gdd}W 5 Q R X d S )NzCYou must provide facecolors, edgecolors, or both for shade to work.r   r   r   Tr   )r   r   r  r   r   r;  r   r  )r  rv   r)   r)   r*   &test_Poly3DCollection_init_value_error  s
    $r  )r   )	functoolsr   r   Zmpl_toolkits.mplot3dr   r   r   r   Z
matplotlibr   Zmatplotlib.backend_basesr   r   r   r	   r
   r   r   r  Zmatplotlib.testing.decoratorsr   r   Zmatplotlib.testing.widgetsr   Zmatplotlib.collectionsr   r   Zmatplotlib.patchesr   r   Zmatplotlib.pathr   Zmatplotlib.textr   Zmatplotlib.pyplotZpyplotrD   Znumpyr   partialr<  r+   r7   rN   rS   ra   rp   r   r   r   r   r   r   r   r   r   markZparametrizer   r   r   r   r   r   r	  r  r  r  r  r  r*  r@  rF  rH  rJ  rQ  rU  ra  rb  rf  rp  rr  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  nanr  r  r?  r@  rB  rC  rK  rM  rQ  rV  rW  r]  rd  rf  rm  rn  rr  rw  LEFTRIGHTr  r   contextr  r  r  r  r  r  r  tupler5  r  r  r  r  r  r  r  r  r  r  r  r  r)   r)   r)   r*   <module>   s    	










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


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


% &



=

	
 Q	



2(
