U
    f                    @   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)   M/tmp/pip-target-lpfmz8o1/lib/python/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@   boxrC   )rD   r2   lenrF   r+   rG   rI   )rJ   figrL   rM   r$   r)   r)   r*   test_aspects_adjust_box;   s    
rT   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rS   r$   r)   r)   r*   test_axes3d_reprG   s    




rb   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   rd   r   r   r   r   )rd   rc   r   )r   rc   r   )r      r   r   r=   r/   r-   r0   rW   rX   rY   orthor   r   elevazimroll)
rD   r2   rF   flatr\   r]   r^   set_proj_type	view_inittight_layout)viewsrS   rL   rM   r$   r)   r)   r*   test_axes3d_primary_viewsT   s    



*rq   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brX         
   r   cedge皙?)zszdiraligncoloralpha)rD   rZ   r[   r#   r   arangerR   bar)rS   r$   rw   rY   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blueyellowr   r}   )rD   rZ   r[   r   r   rR   
zeros_likebar3d)rS   r$   rw   r   r   rz   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   )rt   ir   )rt   rt   rt   )rt   rd   ),  r   r   rP   r-   r.   r0   r   Tshaderh   )r   r   meshgridravelrD   rZ   	figaspectrR   r2   r3   r#   r   rn   canvasdraw)rW   rX   x2dy2drY   rp   rS   rL   r$   ri   rj   rk   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   rZ   r[   r   r   r   r   r   r   r   )rS   r$   rW   rX   r   r   rY   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   rc   )ZazdegZaltdeg)r=   rB   c                    s   g | ]}t |  qS r)   )r	   coolwarm).0rM   Zarear)   r*   
<listcomp>   s     z*test_bar3d_lightsource.<locals>.<listcomp>T)	rW   rX   rY   ZdxZdydzr}   r   Zlightsource   rB   )rD   rZ   r[   mcolorsZLightSourcer   r   r   r   ranger   testingZassert_array_max_ulpZ_facecolor3d)
rS   r$   ZlslengthwidthrW   rX   r   r}   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.   皙?rY   )r{   offsetcmaprW   rX   (   d   rD   rZ   r[   r   get_test_datacontourr	   r   set_xlimset_ylimset_zlimrS   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   rY   r   T)r{   r   r   Zextend3dr   rt   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   rZ   r[   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   rZ   r[   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   extendrv   )r   r   r   mpl	colormapscopyZ	set_underZset_overr[   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   rZ   r   randomseedZrandr[   Z
tricontourZtricontourf)rS   rW   rX   rY   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.   )rt   ru   r   rv   r   r   r   )rD   rZ   r[   r   linspacer   randintr   )rS   r$   nxnyrW   rX   rY   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   rZ   r[   r   r   pisincosplot)rS   r$   thetarY   r&   rW   rX   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   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   rZ   r   r[   r   gridr   hypotr   plot_surface
set_zlim3d)	r   t1t2rS   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)r[   textro   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.   rv   r&   r   )rw   markerru   rs   ^r   r>   r   rD   rZ   r[   scatterr   r   rS   r$   rW   rX   rY   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.   rv   r&   noner   )	facecolor	edgecolorr  ru   rs   r  )r}   r  r  ra   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.   rv   r   )r  r  r  ra   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.   rv   r   r  )r  
linewidths)r[   r  r   r   set_linewidthsr6   r5   r   rw   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.   rv   r   r  C1C2333333?ffffff?r?   FK   r=   )r  r  r  r~   
depthshader  r  )r[   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.Nrv      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   uniquer2  r)   r)   r*   	<genexpr>  s     z)test_scatter3d_sorting.<locals>.<genexpr>Zdtype)r  fceclwr~   r'  )r   mgridr   sizereshapeshaper-  r[   r   r   maZmasked_arrayfloatrepeatr    maskr  )r6   r5   r'  rX   rW   rY   sizes
facecolors
edgecolorsr  r   Zsetsr  r7  r8  r9  Zsubsetr   r)   r)   r*   test_scatter3d_sorting  sR    
  rE  rj      c              	   C   s   ddg}ddg}ddg}ddg}| j dd}|j|||d|d	 |jd|d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   rs   rX   r-   r.     r  rw   rh   N)r[   r  rn   r5   r6   rj   rW   rX   rY   r}   r$   r)   r)   r*   $test_marker_draw_order_data_reversed  s    	<rK  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.
    rG  r>   r   r   rs   rX   r-   r.   rH  rI  rh   Nrf   )r[   set_axis_offr  rn   rJ  r)   r)   r*   #test_marker_draw_order_view_rotated  s    rM  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?   rv   rW   rz   r{   rX   )rD   rZ   r[   r   r   r   )rS   r$   r   r   r)   r)   r*   test_plot_3d_from_2d   s    rO  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   r9  r  )\()\(?r   )shrinkaspect)rD   rcParamsrZ   r[   r   r   r   r  r   r  r	   r   r   colorbar)rS   r$   r   r   r  r   Zsurfr)   r)   r*   test_surface3d*  s    

 rV  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cstrider}   r9  r  rP  rQ  )
rD   rZ   r[   r   r   r   sqrtr   r  r   )rS   r$   r   r   r  r   r)   r)   r*   test_surface3d_shaded<  s    
  rZ  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   r1  rv   rO   r>   r   g            ru                  r/  )r   r   ZplasmarC  rt   r   )rD   rZ   r[   r   r   r   r>  masked_lessr   	Normalizer   r   r   r   r  rn   )rS   r$   rW   rX   matrixrY   normr
   r)   r)   r*   test_surface3d_maskedJ  s*    rg  c                 C   s`   t t dt d\}}|| }| jdd}|j|||d d |jdd}|||| d S )Nr?   r-   r.   rb  )r   r   r   r[   r  )r5   r6   rW   rX   rY   r   r   r)   r)   r*   test_plot_surface_None_arge  s    rh  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   rW  rX  <   r   )	rD   rZ   r[   r   r:  r>  rc  r  rn   r  r)   r)   r*   test_surface3d_masked_strideso  s    rl  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.   NrW   rX   rY   )r   r   r   r   r   r   r   r   rB   r1  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   rv   zX axiszY axiszZ axis)rD   rZ   r[   r#   r  Ztext2DZ	transAxes
set_xlim3d
set_ylim3dr	  r\   r]   r^   )rS   r$   zdirsr   r   rz   r{   rW   rX   rY   rU   r)   r)   r*   test_text3d{  s"    

rv  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 )Nrm  ro  rp  rq  r-   r.   r   rv   (z, z), dir=)r{   )r[   rs  rt  r	  r#   r  Zset_position_3d)r6   r5   ru  r   r   rz   r   r{   rW   rX   rY   r   r   r)   r)   r*   test_text3d_modification  s"    (rx  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   rZ   r[   plot_trisurfr	   Zjet	Zn_anglesZn_radiiZradiiZanglesrW   rX   rY   rS   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 )Nry  r   rz  r{  r   r   Fr|  .r   r}  r-   r.   r   r  )r}   r  )r   r   r   r@  r  r  r   rE   r   rD   rZ   r[   r  r  r)   r)   r*   test_trisurf3d_shaded  s    $r  zwireframe3d.pngc                  C   s<   t  } | jdd}td\}}}|j|||ddd d S )Nr-   r.   r      r  r  rD   rZ   r[   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   rv   ri  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   ri  )	rD   rZ   r[   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   rv   2   )rW  r  )rX  r  )
rD   rZ   r[   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>   ry                 $@333333?              @>,p ?)tipmiddletailr-   r.   r   Tr   pivot	normalize)	r   ogridr   r   r   rD   rZ   r[   quiver)rW   rX   rY   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  )r[   r  )	r5   r6   rW   rX   rY   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>   ry   r  r  r  r  皙ٿr   F)r   r%  r  Tr  )rD   rZ   r[   r   r:  r   r   r   r>  Zmasked_wherer  )rS   r$   rW   rX   rY   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   )r{  r   r   r   )r   r   r   r   )rD   rZ   r[   r   	add_patchr   Zpatch_2d_to_3dr(  r   Z
same_colorget_facecolorr`   r   r   )rS   r$   circler)   r)   r*   test_patch_modification   s    



r  c                 C   s   t dd}t dd}tddddgddddgg}tj||gdd	}| jd
d}|| |d || |	d |
 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   r{  r=   )r  r-   r.   r#  r%  F)r  r  r  r~   r'  )r   r   r   r   ZPatch3DCollectionr[   add_collection3dr)  r(  r*  r+  r`   r,  )r5   r6   Zpatch1Zpatch2rC  rw   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   r6  )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   rZ   r[   r   r   r?  r   r  r  rS   r$   Zpoly1Zpoly2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  rS   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   rZ   r[   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=   r}  r-   r.   r   twilightr   rf  rz   r  r?   r   )r   r   r   r   r   column_stackr<  concatenaterD   rZ   r[   rd  r   	set_arraymodr  r`   r   r   r   r   rY   r&   rW   rX   ZpointssegmentsrS   r$   rf  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>   r}  r-   r.   r  r  r  r  r?   r   r   )r   r   r   r   r   r  r<  r  rD   rZ   r[   rd  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 LABELrv   )labelpadzY LABELzZ LABELru   r   r?   )rD   rZ   Zadd_axesr   xaxisr  r   rT  r`   r\   r]   r^   zaxisZ
get_zlabelyaxisrF   get_major_ticksZset_padZget_pad)rS   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   rZ   r[   rL  clara   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.   rc   -   r   )rD   rZ   r[   rn   ra   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   rv   r   )num)   r   r   r   r   r-   r.   )r   r   r   r   randnrD   rZ   r[   r   r   r  r  )rW   rX   r   r   rY   rS   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  Vrk   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   rz   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   rW   rX   rY   )r   r  r#   rD   r2   r   Zadd_collectionr  )r  r  argsr   r   r   rz   r  r  r  r   r$   ZayazlinesrS   ZlinecrW   rX   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  rw   r&   皙ɿr  )r  splitr   r   r   r  r  r  r   r#   r  r   r   )r  tsr   r   rz   r  r  r  rS   r$   rW   rX   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  rk   r  r  r  r  ZorthoMr  r  r   r   rz   r  r  r  rS   r$   rW   rX   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_allcloserY  )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   r  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   )rS  )rP   r1   )r   rt   )ru   r  )r   r   ru   rt   )r   r  rt   r  r   )fillrF  r  r   )rD   r2   r3   r   r#   r  r   _line2d_seg_distr   r   Tr`   r   r  r   r   )rS   r$   r   r   p0p1Zdist0distrW   rX   drw   r)   r)   r*   test_lines_distsb  s     r   c                  C   s.   d} d}t || |  t t|| |  d S )N)rv   rt   r  )ru   r  rf   )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   r  rW   rX   rY   r   )r   r   r   皙?r  g333333?FTr   )r   r   r   r  r  333333@rW   r}  )r   r   r   r  r  r  )	rD   r2   Z
get_zscaler`   marginsr   Z
get_w_limsZ	autoscaleZset_autoscalez_onra   r)   r)   r*   test_autoscale  s    

r  r~  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   rZ   r[   r   r   r   r  getattrr`   r   r   r   assert_array_equal)
r~  r8   rS   r$   rW   rX   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_lengthrg   r   )rD   rZ   r[   r   r   r  rm   ra   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   rm   r   inf)rS   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.   rg   )rD   rZ   r[   rm   ra   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-   rg   )rB   rB   rB   )r/   Z	proj_typeZ
box_aspectr0   )r>   r   r   r   rw   r  r{  rk  rh   T)r   r   r   rD   r2   r3   r   r   r   r!   r    r"   r#   rn   degreesZarctanrY  r  )r   r   rS   r$   r&   r  er)   r)   r*   test_axes3d_isometric  s    $ &r  value)setterside)rs  left)rs  right)rt  bottom)rt  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   rZ   r[   r   r   r  r  )r  r  r  limitrS   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)selfrS   r$   rW   rX   rY   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&  rS   r$   rW   rX   rY   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   rv   rv   rv   r   r0  r6  z0.25r?   cyanrv   rb  N)rD   r2   r   r$  r-  Zobject_r%  r&  rS   r$   rW   rX   rY   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*  )rv   rv   rv   r=   r1  .r   .r   .r   rb  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   )rv   rv   rv   rB   r   r   r   rb  zfaces returned for absent voxel)rD   r2   r   r$  r!   r1  r%  typer3   r`   itemsr  r   r  )r&  rS   r$   rW   rX   rY   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)rW   slrM   r)   r)   r*   	midpoints$  s    z&TestVoxels.test_xyz.<locals>.midpoints)   r:  r:  g      0@r   r   r   )r=   r.  r/  r0  r   r   )rC  rD  r  )rD   r2   r   r$  r1  r=  r%  r   )r&  rS   r$   r9  r&   rr   rs   rcgcbcZspherer
   r)   r)   r*   test_xyz   s     	(zTestVoxels.test_xyzc              	   C   s  t d\}}}t d}tjddid\}}t tddfD ]T}|j|f| |jf d|i| |j||||f| |j|||fd|i| q>tjt	d	d
 |j|||||d W 5 Q R X tjt	d	d
 ||| W 5 Q R X tt
 |j||||d W 5 Q R X d S )NrA   )r   r=   rB   r/   r-   r0   r  )r  filledr%  r   )r?  )r?  rW   rX   rY   )r   r$  ZonesrD   r2   r3   r%  r   r   	TypeErrorAttributeError)r&  rW   rX   rY   r?  rS   r$   kwr)   r)   r*   test_calling_conventionsA  s    
z#TestVoxels.test_calling_conventionsN)__name__
__module____qualname__mpl3d_image_comparisonr'  r)  r-  r2  r5  r>  rC  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   r1  rv   rO   r-   r.   rY   rN  )rD   rZ   r[   r   r   r   r  Zget_data_3dr   Z	set_xdataZ	set_ydataZset_3d_propertiesr   )
rW   rX   rY   Zx2y2z2rS   r$   r  r   r)   r)   r*   test_line3d_set_get_data_3dZ  s    

rJ  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   rv   )r[   r   Zinvert_yaxisr4   r)   r)   r*   test_invertedl  s    &rK  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  ra   r)   r)   r*   test_inverted_clax  s    rM  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 )NrW   r   )r~  r
   rX   rY   )rD   rZ   r   Ztick_paramsr   r   r  r  Z	tick1line_colorr`   r  r  )rS   r$   r  r)   r)   r*   test_ax3d_tickcolour  s    
rO  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   @cArW   rX   rY   r   r   plain)r~  r   r   )r   r   )r~  Z	scilimitsr   zaxes.formatter.useoffset)r~  Z	useOffsetr=   zaxes.formatter.use_locale)r~  Z	useLocalezaxes.formatter.use_mathtext)r~  ZuseMathTextc                    s    fdd|D S )Nc                    s   g | ]}t  | qS r)   )r  Zget_major_formatter)r   namer$   r)   r*   r     s     zAtest_ticklabel_format.<locals>.get_formatters.<locals>.<listcomp>r)   )r$   namesr)   rR  r*   get_formatters  s    z-test_ticklabel_format.<locals>.get_formattersr  r  r  F)r2   rl   r   r#   Zticklabel_formatr   rT  Zset_scientificZset_powerlimitsZset_useOffsetZset_useLocaleZset_useMathText)	r5   r6   rL   r$   rowrQ  rT  rS  fmtr)   r)   r*   test_ticklabel_format  sX    
   
 


 
rW  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   r  ry   )r   r{  r-   r.   )r   r  )r   r   r   	ones_liker#   r[   r  )r5   r6   r  rW   rX   rY   r  r  r  rS   r   r$   r)   r)   r*   test_quiver3D_smoke  s    
rY  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   rZ   r[   Z
set_xticksZset_xticklabelsZ
set_yticksZset_yticklabels
set_zticksZset_zticklabelsrR  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   r6  r=   r?   r-   r.      r  )zuplimszlolimsZ
erroreveryN)
r   r   r   r   r   rD   rZ   r[   r;  errorbar)
r   rW   rX   rY   rS   r$   ZesteprM   r_  r`  r)   r)   r*   test_errorbar3d_errorevery  s    *rb  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   FTpurplezError lines)rW   rX   rY   ZxerrZyerrZzerrZcapsizer_  r`  ZyuplimsZecolorrU   N)rD   rZ   r[   ra  Zlegend)rS   r$   r  r  r)   r)   r*   test_errorbar3d  s     rd  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   rW   rX   rY   )orientationzorientation=ru   r   zC4-.ZC1Dr#  )linefmtZ	markerfmtZbasefmtrf  r  )r   Zmarkeredgewidth)rD   r2   r   r   r   r   r   r#   stemrG   rX  setZset_linewidth)rS   rL   r   rW   rX   rY   r$   r{   Z
markerlineZ	stemlinesZbaseliner)   r)   r*   test_stem3d  s6    



    rj  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   r}   rs   offrn  zArgument zoom =r   )zoom)"r   r   r   rD   rZ   r[   r   r   r   outerr   r   rX  r  r   r   r    r!   r"   r#   r  
get_xlim3d
get_ylim3d
get_zlim3dr   r   rs  rt  r	  r~  rH   r   r   r  )r   r   rS   r$   r  r  rW   rX   rY   r&   r  r  ZxyzlimZXYZlimr)   r)   r*   test_equal_box_aspect   s0    $$




rq  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-   re  r?   
horizontal)r$   rf  r  )rD   r2   r  r   r   r  rU  r   r   r$   Zget_positionZextentsr`   )Z	num_plotsrS   rL   r$   Zp_triZcbarr)   r)   r*   test_colorbar_posF  s    



rs  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   rZ   r[   rL  r`   get_zlimZ
get_zboundZ
set_zboundZinvert_zaxisra   r)   r)   r*   test_inverted_zaxisV  s*    
rz  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.   rt  r   )r  ru  r   )r  rx  z$Cannot pass both 'bottom' and 'zmin'r   r   )r  r  z!Cannot pass both 'top' and 'zmax')r  r  )	rD   rZ   r[   ry  r`   r   r   r   r@  ra   r)   r)   r*   test_set_zlimv  s"      r{  c                  C   s   t  } | jddd}| jdd|d}|ddgddgddg |ddgddgddg |d	ddd
g | dks|t| dkstd S )N   r-   r.      )r/   Zsharezr   r   r   r        @)r  r~  )rD   rZ   r[   r   r\  ry  r`   )rS   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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   rZ   r[   r  r   r   rn  ro  rp  Z_button_pressr   r   ZMIDDLEZ_on_mover   approxr`   )r  r$   Z	x_center0Zx_range0Z	y_center0Zy_range0Z	z_center0Zz_range0Zx_centerZx_rangeZy_centerZy_rangeZz_centerZz_ranger)   r)   r*   test_pan  s,    r  ztool,button,key,expectedrl  ))r   Q?)r6  gQ?)r   {Gz?rW   ))g{Gzr   gQr  Qr  rX   ))Q뱿g{Gz?r  )r   g)\(?))g
ףp=
r  )r  g(\?)r  g
ףp=
?pan))gffffff(\)g{GzgQgRQgffffff))gQgzG)r  gq=
ףpݿr  ))r  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_eventrl  r6  )r!   )rD   rZ   r[   r  r   r   rn  ro  rp  Z	transDatarr  Zastypeintr   r   rl  Z
press_zoomZ	drag_zoomZrelease_zoomr  Z	press_panZdrag_panZrelease_panr   r  r`   backforwardhome)Ztoolr  r  expectedrS   r$   Zxlim0Zylim0Zzlim0Zd0Zd1r  s1Zstart_eventZ
stop_eventtbZxlimZylimZzlimr)   r)   r*   test_toolbar_zoom_pan  sj    
    






r  c           
      C   s   t ttjt dddt dddt dddg j\}}}|| }| jddd}|j||||ddd	}| j	
  |  |jddd}|j||||ddd	}	d S )
Nr   r?   r   o   r-   r.   r   r   )rw   r  r   )r   r   r   r   r   r   r  r[   r  r   r   changed)
r5   r6   rW   rX   rY   rw   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/   rU   )rD   rZ   Z
subfiguresr[   )rS   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)re   )r   r?   r   )r?   r?   r   )r?   r   r   whiteblackr   )rC  rD  zorder)r   r   )r   rB   r   r   )rw   r  )r=   r=   )r   r=   rv   )r   r   )r   r~        r   r   r   r   r   r>   )r}   r~   r  r  r?   z--r   )r9  Z	linestyler}   r  r=   rB   ru   r   rh   rk  )rD   rZ   r[   r  r   r  r  r   r  r   r   r   r   r   r1  r   r   r   r   r  rn   r~  )rS   r   r   Zcornersr$   ZtriZax3Zax4dimr   r   r   angleZX2ZY2ZZ2ZX3ZY3ZZ3r&   r  thrW   rX   rY   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.   rv   r   u   x=1.8066, y=1.0367, z=−0.0553rt   rX   )rk   vertical_axisu"   x=9.1651, y=−0.9215, z=−0.0359)rD   rZ   r[   r   r   r   r   r   r   Zformat_coordr`   rn   rS   r$   rW   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.   rv   )FTF)rD   rZ   r[   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.   r  )r  r  r  r   r$  )r   r  r$  r   )rW   )r   r  r$  )rX   )r   r   r$  rY   )r   r   r   )rD   rZ   r[   r  r`   ra   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>   rY   )r   z'Cannot pass both positional and keyword)rW   rX   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   rZ   r[   r  )errr  r   r   rS   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  )r[   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   rZ   r[   r   ra   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   rX   rY   r{   rN  )r[   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?   rI  )rD   rZ   r[   r   r   r   r  r   r   r   r   )rS   r$   r  scr)   r)   r*   test_scatter_spiral  s
    ,r  c                  C   sn   t jddddddf \} }t |d t | d  }t }|jddd}|j|| |d	d
}|  d S Nr   rv   y              Y@r=   r   r  r-   r.   Zhot)r   )	r   r  r   r   rD   rZ   r[   r  r  rX   rW   rI  rS   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   rZ   r[   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   )ri   rj   rk   r  )rtolN)rD   subplotrn   rZ   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   r~  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?ru   rv   rG  )r   heightr  Ztheta1Ztheta2r   rY   r  )rD   r  mpatchZArcr  r   r  )r$   r3  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&   rr   rs   )zaxes3d.xaxis.panecolorzaxes3d.yaxis.panecolorzaxes3d.zaxis.panecolorr  r   r-   r.   )rD   Z
rc_contextrZ   r[   )rS   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   rW   rX   rY   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  rw   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   numpyr   partialrG  r+   r7   rN   rT   rb   rq   r   r   r   r   r   r   r   r   r   markZparametrizer   r   r   r   r   r   r  r  r  r  r  r!  r.  rE  rK  rM  rO  rV  rZ  rg  rh  rl  rv  rx  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#  rJ  rK  rM  rO  rW  rY  r]  rb  rd  rj  rq  rs  rz  r{  r  r  LEFTRIGHTr  r   contextr  r  r  r  r  r  r  tupler@  r  r  r  r  r  r  r  r  r  r  r  r  r)   r)   r)   r*   <module>   s    	










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


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

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