U
    mdG                    @   s<  d dl Z d dlZd dlZd dlmZmZmZmZ d dlZ	d dl
mZ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(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$ Z/e(d%gd&d' Z0e(d(gd)d* Z1d+d, Z2e(d-gd.d/ Z3e(d0gd1d2 Z4e(d3gd4d5 Z5e(d6gd7d8 Z6ej78d9d:d;d<d=ggd>d;d<d=d?ggd@d d;d<d=gggedgddAdB Z9e(dCgdDdEdFdG Z:dHdI Z;e(dJgdKdL Z<edgddMdN Z=dOdP Z>e(dQgdRdS Z?edgddTdU Z@e(dVgdWdX ZAe(dYgdZd[ ZBe(d\gd]d^ ZCedgdd_d` ZDedgddadb ZEej78dcddgedgdddde ZFej78dfdgdhgedgddidj ZGedgddkdl ZHe(dmgdndEdodp ZIe(dqgdrds ZJe(dtgdudv ZKe(dwgdxdy ZLedgddzd{ ZMe(d|gd}d~ ZNe(dgdddd ZOedgddd ZPe(dgddEdd ZQe(dgddEdd ZRe(dgdd ZSe(dgdd ZTe(dgdd ZUdd ZVdd ZWe(dddgdd ZXedgddd ZYe(dgdd ZZdd Z[edgddd Z\dd Z]e(dgdd Z^dd Z_e(dgdd Z`e(dgdd Zae(dgdd Zbe(dgdddd Zce(dgdddd Zde(dgdddd Zedd ZfddÄ Zgddń ZhdtddȄZie(dgdd˄ Zje(dgdd΄ ZkddЄ Zldd҄ Zme(dgddՄ Znddׄ Zoddل Zpej78ddۡej78ddݡdd߄ Zqdd Zre(dgdddd Zse(dgdddd Zte(dgdd Zuej78de&jve&jwgej78dddddddgdd ZxG dd dZydd Zzedgddd Z{dd Z|dd Z}edgddd  Z~edgddd Ze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j78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d.d/ Zd0d1 Zed2gddgd3d4d5d6 Zd7d8 Zd9d: Zd;d< Zej78d=ed>i d?fed@i d?fedAi d?fee d#dBid?fee d%dBid?fee dCdBid?fedDd#didEfedDddddۜdEfedDddƐdFdEfedGi dHff
dIdJ ZedgddKdL ZdMdN ZedgddOdP ZedQgdddRdSdT ZdUdV ZdWdX Zej78dYdCdZd[dZd\gdZdZd]d^gdZdZdZd_gd`dZdZdaggdbdcgdddegfdfdcgdedegfdfdfgdedggfgdd d gfd%d[dZdZd\gdZd]dZd^gdZdZdZd_gdZdZd`daggdfdcgdgdggfdcdcgdedggfdhdfgdidggfgd;d;d gfd#dZdZd[d\gd]dZdZd^gdZdZdZd_gdZd`dZdaggdfdfgdgdegfdcdbgdgdigfdcdfgdgdggfgdd;dgfgdjdk ZedlgdddRdmdn ZedogdddRdpdq Zedgddrds ZdS (u      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styleZpng)
extensionsc                 C   s    | j tddd}|d d S )N3d
projection
subplot_kwF)subplotsdictZset_visiblefig_testfig_refax r$   _/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/mpl_toolkits/mplot3d/tests/test_axes3d.pytest_invisible_axes   s    r&   zaspects.pngF)r   c            
   
   C   s   d} t jdt| ddid\}}ddg}tdddg}tttt|||d}|D ]N\}}t	t
|| |d |d  kr\|D ]}|jt|| ||   qq\t|D ]$\}	}|d	 |j| |	 d
d qd S )NautoequalZequalxyZequalyzZequalxz   r   r   r   r               r+   ZdatalimZ
adjustable)pltr   lennparray	itertoolscombinationslistproductsumabsplot3Dzip	enumerateset_box_aspect
set_aspect
ZaspectsfigaxsrscaleZptsstartendr#   ir$   r$   r%   test_aspects!   s     $
rH   zaspects_adjust_box.pngc            
   
   C   s   d} t jdt| ddidd\}}ddg}tdd	d
g}tttt|||d}|D ]N\}}t	t
|| |d |d  kr^|D ]}|jt|| ||   qq^t|D ]\}	}|j| |	 dd qd S )Nr'   r*   r   r   )   r.   )r   figsizer   r/   r.   r+   r,   boxr0   )r1   r   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r?   r@   r$   r$   r%   test_aspects_adjust_box3   s    
 $rL   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'>)
r1   figureadd_subplotZ	set_label	set_title
set_xlabel
set_ylabel
set_zlabelreprAssertionErrorrA   r#   r$   r$   r%   test_axes3d_reprE   s    




r[   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   r]   r   r   r   r   )r]   r\   r   )r   r\   r   )r      r   r,   r.   r   r   r   rO   rP   rQ   orthor   r*   elevazimroll)
r1   r   r=   flatrU   rV   rW   set_proj_type	view_inittight_layout)viewsrA   rB   rG   r#   r$   r$   r%   test_axes3d_primary_viewsR   s    



*rj   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   rC   gbrP         
   r   cedge皙?)zszdiraligncoloralpha)r1   rR   rS   r<   r3   aranger2   bar)rA   r#   rp   rQ   xsyscsr$   r$   r%   
test_bar3dg   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*   rv   )r1   rR   rS   r3   rx   r2   
zeros_likebar3d)rA   r#   rp   rz   r{   rs   r$   r$   r%   test_bar3d_colorss   s    

r   zbar3d_shaded.pngc               
   C   s   t d} t d}t | |\}}| |  }}|| d }ddddg}tjtdt| d}|jdt|t	d	d
d}t
||D ]:\}\}	}
}|j|||d dd|dd |j|	|
|d q|j  d S )Nr/   r+   r*   )rm   ir   )rm   rm   rm   )rm   r]   ),  r   r   rJ   r   r   r   r   Tshadera   )r3   rx   meshgridravelr1   rR   	figaspectr2   r   r   r<   r   rg   canvasdraw)rO   rP   x2dy2drQ   ri   rA   rB   r#   rb   rc   rd   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   r/   r+   r   r*   Fr   )
r1   rR   rS   r3   rx   r   r   r   r   r   )rA   r#   rO   rP   r   r   rQ   r$   r$   r%   test_bar3d_notshaded   s    

r   c            
         s   t  } | jddddd}tjddd}d\}}||  tt|t|\}}| }| }|| } fdd	t	 D }|j
||ddd||d
|d	}	tj||	jdd d  d S )Nr*   r   r   r   r\   )ZazdegZaltdeg)r.   r/   c                    s   g | ]}t |  qS r$   )r	   coolwarm).0rG   Zarear$   r%   
<listcomp>   s     z*test_bar3d_lightsource.<locals>.<listcomp>T)	rO   rP   rQ   ZdxZdydzrv   r   Zlightsource   )r1   rR   rS   mcolorsZLightSourcer3   r   rx   r   ranger   testingassert_array_equalZ_facecolor3d)
rA   r#   ZlslengthwidthrO   rP   r   rv   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   皙?rQ   )rt   offsetcmaprO   rP   (   d   r1   rR   rS   r   get_test_datacontourr	   r   set_xlimset_ylimset_zlimrA   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   rQ   r   T)rt   r   r   Zextend3dr   rm   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   )r1   rR   rS   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*   )r1   rR   rS   r3   r   rx   clipr   r	   r   r   r   r   r   r$   r$   r%   test_contourf3d_fill   s    $r   zextend, levelsbothr,   r/   r   min   maxc                 C   s   t t dddt ddd\}}|d |d  }tjd  }||d ||d dd|d	}|jd
d}	|	j	|||fddddddgi| | jd
d}
|
j	||||fd|i| |	|
fD ](}|
dd |dd |dd qd S )Nr   r,   r   viridisr      r*      )vminvmaxr   r   r   r   r/   r   r   extendro   )r3   r   rx   mpl	colormapscopyZ	set_underZset_overrS   r   r   r   r   )r!   r"   r   r   r   r   r   r   kwargsax_refax_testr#   r$   r$   r%   test_contourf3d_extend   s    $$r   ztricontour.png{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   )	r1   rR   r3   randomseedZrandrS   Z
tricontourZtricontourf)rA   rO   rP   rQ   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   )rm   rn   r   ro   r   r,   r   )r1   rR   rS   r3   linspacer   randintr   )rA   r#   nxnyrO   rP   rQ   r$   r$   r%   test_contour3d_1d_input  s    r   zlines3d.pngc                  C   sv   t  } | jdd}tdtj dtj d}tddd}|d d }|t| }|t| }|||| d S )	Nr   r   r/   r   r   r,   r*   )	r1   rR   rS   r3   r   pisincosplot)rA   r#   thetarQ   rC   rO   rP   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rS   r   r!   r"   ax1ax2r$   r$   r%   test_plot_scalar1  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_data9  s    r   zmixedsubplot.pngc            	   	   C   s   dd } t ddd}t ddd}tjtdd}|d	d
d
}|j|| |d|| |ddd |d |jd	d
d	dd}t t dddt ddd\}}t 	||}t 
|}|j|||ddddd |dd
 d S )Nc                 S   s    t dt j |  t |   S )Nr,   )r3   r   r   exp)tr$   r$   r%   fL  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   )r3   rx   r1   rR   r   rS   r   gridr   hypotr   plot_surface
set_zlim3d)	r   t1t2rA   r#   r   r   Rr   r$   r$   r%   test_mixedsubplotsJ  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)rS   textrh   r   r$   r$   r%   test_tight_layout_textb  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   ro   rC   r   )rp   markerrn   rl   ^r   r   r   r1   rR   rS   scatterr3   rx   rA   r#   rO   rP   rQ   r$   r$   r%   test_scatter3do  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   ro   rC   noner   )	facecolor	edgecolorr  rn   rl   r
  )rv   r  r  rZ   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   ro   r   )r  r   r  rZ   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   ro   r   r  )r  
linewidths)rS   r  r3   rx   set_linewidthsr"   r!   r   rp   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   ro   r   r  C1C2333333?ffffff?r+   FK   r.   )r  r  r  rw   
depthshader
  r  )rS   r  r3   rx   set_facecolorset_edgecolor	set_alphaget_depthshaderY   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.Nro      r   r   r,   r*   C0r  r+   r  r   r/   ZC3ZC4ZC5ZC6	   ZC7c                 S   s   g | ]}|  qS r$   )flattenr   ar$   r$   r%   r     s   z*test_scatter3d_sorting.<locals>.<listcomp>r   r   c                 s   s   | ]}t |V  qd S )N)r3   uniquer.  r$   r$   r%   	<genexpr>  s     z)test_scatter3d_sorting.<locals>.<genexpr>Zdtype)r
  fceclwrw   r"  )r3   mgridrx   sizereshapeshaper(  rS   r5   r8   maZmasked_arrayfloatrepeatr9   maskr  )r"   r!   r"  rP   rO   rQ   sizes
facecolors
edgecolorsr  r   Zsetsr
  r3  r4  r5  Zsubsetr   r$   r$   r%   test_scatter3d_sorting  sR    
  rA  rc      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   rl   rP   r   r     r
  rp   ra   N)rS   r  rg   r!   r"   rc   rO   rP   rQ   rv   r#   r$   r$   r%   $test_marker_draw_order_data_reversed  s    	<rG  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.
    rC  r   r*   r   rl   rP   r   r   rD  rE  ra   Nr_   )rS   set_axis_offr  rg   rF  r$   r$   r%   #test_marker_draw_order_view_rotated  s    rI  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+   ro   rO   rs   rt   rP   )r1   rR   rS   r3   rx   r   )rA   r#   rz   r{   r$   r$   r%   test_plot_3d_from_2d  s    rK  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)r1   rcParamsrR   rS   r3   rx   r   r  r   r  r	   r   r   colorbar)rA   r#   r   r   r  r   Zsurfr$   r$   r%   test_surface3d(  s    

 rR  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cstriderv   r5  r   rL  rM  )
r1   rR   rS   r3   rx   r   sqrtr   r  r   )rA   r#   r   r   r  r   r$   r$   r%   test_surface3d_shaded:  s    
  rV  zsurface3d_masked.pngc                  C   sv  t  } | jdd}ddddddd	d
dddg}ddddddd	d
g}t||\}}tdddddddddddgdddddddddddgdddddd
dddddgddd	d
dddd
d	ddgddd
ddddddd	dgdddddddddddgdddddddddddgdddddddddddgg}tj|d}tj	|
 | d}tjd ||}|j||||d |ddd d S )Nr   r   r*   r,   r.   r/   r+   r   r   r   r,  ro   rI   r   r   g            rn                  r*  )r   r   Zplasmar?  rm   r   )r1   rR   rS   r3   r   r4   r:  masked_lessr   	Normalizer   r   r   r   r  rg   )rA   r#   rO   rP   matrixrQ   normr
   r$   r$   r%   test_surface3d_maskedH  s*    rc  c                 C   s`   t t dt d\}}|| }| jdd}|j|||d d |jdd}|||| d S )Nr+   r   r   r^  )r3   r   rx   rS   r  )r!   r"   rO   rP   rQ   r   r   r$   r$   r%   test_plot_surface_None_argc  s    rd  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,   r/   rS  rT  <   r   )	r1   rR   rS   r3   r6  r:  r_  r  rg   r  r$   r$   r%   test_surface3d_masked_stridesm  s    rh  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   NrO   rP   rQ   )r*   r*   r   r*   r*   r*   r,   r   r/   r,  r   r,   r   r/   r   r   r,   r,   r/   r,   r+   r   r*   r   z(%d, %d, %d), dir=%sr*   r~   r   r   gffffff?z2D Text)	transformr   ro   zX axiszY axiszZ axis)r1   rR   rS   r<   r  Ztext2DZ	transAxes
set_xlim3d
set_ylim3dr  rU   rV   rW   )rA   r#   zdirsrz   r{   rs   rt   rO   rP   rQ   rM   r$   r$   r%   test_text3dy  s"    

rr  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 )Nri  rk  rl  rm  r   r   r   ro   (z, z), dir=)rt   )rS   ro  rp  r  r<   r  Zset_position_3d)r"   r!   rq  rz   r{   rs   r   rt   rO   rP   rQ   r   r   r$   r$   r%   test_text3d_modification  s"    (rt  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   )r3   r   r   r<  newaxisappendr   r-  r   r1   rR   rS   plot_trisurfr	   Zjet	Zn_anglesZn_radiiZradiiZanglesrO   rP   rQ   rA   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 )Nru  r   rv  rw  r   r,   Frx  .r*   ry  r   r   r   r{  )rv   r   )r3   r   r   r<  r|  r}  r   r-  r   r1   rR   rS   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   r1   rR   rS   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   ro   re  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   re  )	r1   rR   rS   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   ro   2   )rS  r   )rT  r   )
r1   rR   rS   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   rr                 $@333333?              @>,p ?)tipmiddletailr   r   r   Tr   pivot	normalize)	r3   ogridr   r   r   r1   rR   rS   quiver)rO   rP   rQ   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  )rS   r  )	r!   r"   rO   rP   rQ   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   rr   r  r  r  r  皙ٿr   F)r   r   r  Tr  )r1   rR   rS   r3   r6  r   r   r   r:  Zmasked_wherer  )rA   r#   rO   rP   rQ   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   )rw  r   r   r*   )r*   r   r   r*   )r1   rR   rS   r   	add_patchr   Zpatch_2d_to_3dr#  r   Z
same_colorget_facecolorrY   r   r   )rA   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   rw  r.   )r  r   r   r  r   F)r  r  r  rw   r"  )r   r3   r4   r   ZPatch3DCollectionrS   add_collection3dr$  r#  r%  r&  rY   r'  )r!   r"   Zpatch1Zpatch2r?  rp   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   Poly3DCollectionr3   r4   r;  )polyr$   r$   r%   &test_poly3dcollection_verts_validationG  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)	r1   rR   rS   r3   r4   r;  r   r  r  rA   r#   Zpoly1Zpoly2c1c2r$   r$   r%   test_poly3dcollection_closedQ  s    $$  
r  c                  C   sv   t g } t|  t| tjs"t|  g ks2ttjt	ddd\}}|
|  |  }t|sht|j  d S )Nr   r   r   )r   r   Zpoly_collection_2d_to_3d
isinstancer  rY   	get_pathsr1   r   r   
add_artistZdo_3d_projectionr3   isnanr   r   )r  rA   r#   Zminzr$   r$   r%   #test_poly_collection_2d_to_3d_empty`  s    

r  zpoly3dcollection_alpha.pngc                  C   s   t  } | jdd}t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   )r1   rR   rS   r3   r4   r;  r   r  r%  r#  r$  r  r  r$   r$   r%   test_poly3dcollection_alphao  s    $$ 




r  zadd_collection3d_zs_array.pngc                  C   sD  t dt j dt j d} t ddd}|d d }|t |  }|t |  }t |||gddd}t j|d d |dd  gdd	}t	 }|j
d
d}tddt j }	t|d d d d d df d|	d}
|
t | dt j  |j|
|d d d d df d}|d k	st|dd |dd |dd d S )Nr   r/   r   r   r,   r*   r   r.   ry  r   r   r   twilightr   rb  rs   r   r+   r   )r3   r   r   r   r   column_stackr8  concatenater1   rR   rS   r`  r   	set_arraymodr  rY   r   r   r   r   rQ   rC   rO   rP   ZpointssegmentsrA   r#   rb  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   ry  r   r   r  r  r  r   r+   r   r   )r3   r   r   r   r   r  r8  r  r1   rR   rS   r`  r   r  r  rY   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 LABELro   )labelpadzY LABELzZ LABELrn   r   r+   )r1   rR   Zadd_axesr   xaxisr  r   rP  rY   rU   rV   rW   zaxisZ
get_zlabelyaxisr=   get_major_ticksZset_padZget_pad)rA   r#   rG   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   )r1   rR   rS   rH  clarZ   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   r\   -   r   )r1   rR   rS   rg   rZ   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   ro   r   )num)   r   r   r*   r,   r   r   )r3   r   r   r   randnr1   rR   rS   r   r   r  r  )rO   rP   r   r   rQ   rA   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   )r3   r4   r   
_view_axes_view_transformation_uvwZpersp_transformationdot)
Er  Vrd   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  r3   r4   r   proj_transformZinv_transformr   Zassert_almost_equal)
r  rz   r{   rs   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   rO   rP   rQ   )r   r  r<   r1   r   r   Zadd_collectionr  )r  r
  argsr   rz   r{   rs   r  r  r  r   r#   ZayazlinesrA   ZlinecrO   rP   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	  rp   rC   皙ɿr{  )r  splitr3   r4   r   r  r  r  r   r<   r  r   r   )r  tsrz   r{   rs   r  r  r  rA   r#   rO   rP   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   rC   r  i8)r3   r4   r   r  r  Zortho_transformationr  r  r  r  r  r   r<   r  r   r   )r  r  r  rd   r  r  r  r  ZorthoMr  r  rz   r{   rs   r  r  r  rA   r#   rO   rP   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_xr3   r   r   assert_allcloserU  )r  Z	rotated_Vr$   r$   r%   test_rotJ  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_transformationr3   r   r  )ZxminZxmaxZyminZymaxzminzmaxr  r$   r$   r%   
test_worldT  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)r/   r   r)   )rO  )rJ   r   )r   rm   )rn   r  )r   r   rn   rm   )r   r  rm   r  r   )fillrB  r  r   )r1   r   r   r   r<   r  r   _line2d_seg_distr3   r4   TrY   r   r  r   r   )rA   r#   rz   r{   p0p1Zdist0distrO   rP   drp   r$   r$   r%   test_lines_dists`  s     r  c                  C   s.   d} d}t || |  t t|| |  d S )N)ro   rm   r  )rn   r  r_   )r   r  r3   r4   )s0pr$   r$   r%   test_lines_dists_nowarningy  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   r   Zlinearr   r   r{  rO   rP   rQ   r*   )r   r*   r   皙?r  g333333?FTr,   )r   r*   r   r  r  333333@rO   ry  )r   r,   r   r  r  r  )	r1   r   Z
get_zscalerY   marginsr   Z
get_w_limsZ	autoscaleZset_autoscalez_onrZ   r$   r$   r%   test_autoscale  s    

r  rz  r   r(   )TFNc           
      C   s   t  }|jdd}td}tddd}||| t|d|  d}t|d|  d	}t|d
|  d	}|d kr|| n|}	|d|d |	| kst|j	
  tj| d d S )Nr   r   r   r   r   Zget_autoscaleZ_onset_Zlimget_)      r   )r(   )r1   rR   rS   r3   rx   r   r  getattrrY   r   r   r   r   )
rz  r(   rA   r#   rO   rP   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_lengthr`   r*   )r1   rR   rS   r   r   r  rf   rZ   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   r   r   r
  r  333333?)r1   r   rf   r3   inf)rA   rB   r$   r$   r%   test_axes3d_focal_length  s    r  zaxes3d_ortho.pngc                  C   s"   t  } | jdd}|d d S )Nr   r   r`   )r1   rR   rS   rf   rZ   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   )r6   r8   r   r`   )r/   r/   r/   )r   Z	proj_typeZ
box_aspectr   )r   r*   r,   r*   rp   r  rw  rg  ra   T)r5   r6   r8   r1   r   r   r3   r4   r7   r:   r9   r;   r<   rg   degreesZarctanrU  r  )r6   r8   rA   r#   rC   r
  er$   r$   r%   test_axes3d_isometric  s    $ &r  value)setterside)ro  left)ro  right)rp  bottom)rp  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   )r1   rR   rS   r   r   r  r  )r  r  r  limitrA   objr$   r$   r%   test_invalid_axes_limits  s
    
r  c                   @   s   e Zd Zedgdd Zedgdd Zedgdd	 Zed
gdd Zedgdd Zedgddddd Z	dd Z
dS )
TestVoxelszvoxels-simple.pngc                 C   sB   t jddid\}}td\}}}||k||kB }|| d S )Nr   r   r   )r+   r/   r.   )r1   r   r3   indicesvoxels)selfrA   r#   rO   rP   rQ   r   r$   r$   r%   test_simple  s    zTestVoxels.test_simplezvoxels-edge-style.pngc                 C   sv   t jddid\}}td\}}}|d d |d d  |d d  dk }|j|dd	d
}|t|  d d S )Nr   r   r   )r+   r+   r/   r,   g      ?g](\@r.   r  )r  r  r  )r1   r   r3   r  r   r   keysr$  )r!  rA   r#   rO   rP   rQ   r   r  r$   r$   r%   test_edge_style  s
    (zTestVoxels.test_edge_stylezvoxels-named-colors.pngc                 C   s   t jddid\}}td\}}}||k||kB }||| | dk  @ }tjddtjd}d||d	k |d	k @ < d
||| dk < |j||d dS )z5Test with colors set to a 3D object array of strings.r   r   r   ro   ro   ro   r*   r+  r2  z0.25r+   cyanro   r^  N)r1   r   r3   r  r(  Zobject_r   r!  rA   r#   rO   rP   rQ   r   r
   r$   r$   r%   test_named_colors  s    zTestVoxels.test_named_colorszvoxels-rgb-data.pngc                 C   st   t jddid\}}td\}}}||k||kB }td}|d |d< |d |d< |d |d	< |j||d
 dS )z5Test with colors set to a 4d float array of rgb data.r   r   r   r%  )ro   ro   ro   r.   r,  .r   .r*   .r,   r^  N)r1   r   r3   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   r   r%  r,   )ro   ro   ro   r/   r*   r   r   r^  zfaces returned for absent voxel)r1   r   r3   r  r:   r,  r   typer   rY   itemsr  r   r  )r!  rA   r#   rO   rP   rQ   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   r   c                 S   sZ   d}t | jD ]F}| |tjd d   | |tjdd     d } |tjd d  7 }q| S )Nr$   r   r*   r   )r   ndimr3   Z	index_exp)rO   slrG   r$   r$   r%   	midpoints"  s    z&TestVoxels.test_xyz.<locals>.midpoints)   r5  r5  g      0@r   r,   r   )r.   r)  r*  r+  r   r*   )r?  r@  r   )r1   r   r3   r  r,  r9  r   r   )r!  rA   r#   r4  rC   rk   rl   rcgcbcZspherer
   r$   r$   r%   test_xyz  s     	(zTestVoxels.test_xyzc              	   C   s  t d\}}}t d}tjddid\}}t tddfD ]T}|j|f| |jf d|i| |j||||f| |j|||fd|i| q>tjt	d	d
 |j|||||d W 5 Q R X tjt	d	d
 ||| W 5 Q R X tt
 |j||||d W 5 Q R X d S )Nr-   )r,   r.   r/   r   r   r   r  )r  filledr   r   )r:  )r:  rO   rP   rQ   )r3   r  Zonesr1   r   r   r   r   r   	TypeErrorAttributeError)r!  rO   rP   rQ   r:  rA   r#   kwr$   r$   r%   test_calling_conventions?  s    
z#TestVoxels.test_calling_conventionsN)__name__
__module____qualname__mpl3d_image_comparisonr"  r$  r(  r-  r0  r9  r>  r$   r$   r$   r%   r    s   






 r  c            
      C   s
  ddgddgddg  } }}ddgd	d
gddg  }}}t  }|jdd}|| ||}|d }	tj| ||f|	  |	||| tj|||f|	  |		|  |	
| |	j|dd tj| ||f|	  |	jddd tj| |t|f|	  d S )Nr   r*   r,   r.   r/   r+   r   r   r   r,  ro   rI   r   r   rQ   rJ  )r1   rR   rS   r   r3   r   r   Zget_data_3dr   Z	set_xdataZ	set_ydataZset_3d_propertiesr   )
rO   rP   rQ   Zx2y2z2rA   r#   r  r   r$   r$   r%   test_line3d_set_get_data_3dX  s    

rE  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*   ro   )rS   r   Zinvert_yaxisr    r$   r$   r%   test_invertedj  s    &rF  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   r   r*   r   )
r1   r   Zxaxis_invertedrY   Zyaxis_invertedzaxis_invertedr   r   r   r  rZ   r$   r$   r%   test_inverted_clav  s    rH  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 )NrO   r~   )rz  r
   rP   rQ   )r1   rR   r   Ztick_paramsr   r   r  r  Z	tick1line_colorrY   r  r  )rA   r#   r  r$   r$   r%   test_ax3d_tickcolour  s    
rJ  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 ) Nr/   r+   r   r   r   g    cAg   @cArO   rP   rQ   r   r   plain)rz  r   r*   )r   r,   )rz  Z	scilimitsr,   zaxes.formatter.useoffset)rz  Z	useOffsetr.   zaxes.formatter.use_locale)rz  Z	useLocalezaxes.formatter.use_mathtext)rz  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$   rM  r%   get_formatters  s    z-test_ticklabel_format.<locals>.get_formattersr  r  r  F)r   re   r   r<   Zticklabel_formatr   rP  Zset_scientificZset_powerlimitsZset_useOffsetZset_useLocaleZset_useMathText)	r!   r"   rB   r#   rowrL  rO  rN  fmtr$   r$   r%   test_ticklabel_format  sX    
   
 


 
rR  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{  rr   )r*   rw  r   r   )r   r  )r3   r   rx   	ones_liker<   rS   r  )r!   r"   r  rO   rP   rQ   r  r  r  rA   r   r#   r$   r$   r%   test_quiver3D_smoke  s    
rT  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)	r1   rR   rS   Z
set_xticksZset_xticklabelsZ
set_yticksZset_yticklabels
set_zticksZset_zticklabelsrM  r$   r$   r%   test_minor_ticks  s    rX  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   r1  r.   r+   r   r      r{  )zuplimszlolimsZ
erroreveryN)
r3   rx   r   r   r   r1   rR   rS   r7  errorbar)
r   rO   rP   rQ   rA   r#   ZesteprG   rZ  r[  r$   r$   r%   test_errorbar3d_errorevery  s    *r]  zerrorbar3d.pngc                  C   sr   t  } | jdd}dddddg}dddddg}|j||||||dd	d
d	d
d
gd
d	d	d
d	gd
ddd |  dS )z9Tests limits, color styling, and legend for 3D errorbars.r   r   r*   r,   r.   r/   r+   r   FTpurplezError lines)rO   rP   rQ   ZxerrZyerrZzerrZcapsizerZ  r[  ZyuplimsZecolorrM   N)r1   rR   rS   r\  Zlegend)rA   r#   r  r  r$   r$   r%   test_errorbar3d  s     r_  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   rJ   Zconstrained_layoutr   r   rO   rP   rQ   )orientationzorientation=rn   r*   zC4-.ZC1Dr  )linefmtZ	markerfmtZbasefmtra  r  )r   Zmarkeredgewidth)r1   r   r3   r   r   r   r   r<   stemrT   rS  setZset_linewidth)rA   rB   r   rO   rP   rQ   r#   rt   Z
markerlineZ	stemlinesZbaseliner$   r$   r%   test_stem3d   s6    



    re  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   )r8   r6   r   r   r,   r   r   r*   rv   rl   offrj  zArgument zoom =r   )zoom)"r5   r8   r6   r1   rR   rS   r3   r   r   outerr   r   rS  r  r4   r7   r9   r:   r;   r<   r  
get_xlim3d
get_ylim3d
get_zlim3dr   r   ro  rp  r  rz  r>   r   r   r  )r8   r6   rA   r#   r  r  rO   rP   rQ   rC   r
  r  ZxyzlimZXYZlimr$   r$   r%   test_equal_box_aspect  s0    $$




rl  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*   )r/   r+   Tr   r   r`  r+   
horizontal)r#   ra  r{  )r1   r   r~  r3   r   r  rQ  r   r   r#   Zget_positionZextentsrY   )Z	num_plotsrA   rB   r#   Zp_triZcbarr$   r$   r%   test_colorbar_posD  s    



rn  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,   )	r1   rR   rS   rG  rY   get_zlimZ
get_zboundZ
set_zboundZinvert_zaxisrZ   r$   r$   r%   test_inverted_zaxisT  s*    
ru  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   ro  r,   )r  rp  r*   )r  rs  z$Cannot pass both 'bottom' and 'zmin'r   r   )r  r  z!Cannot pass both 'top' and 'zmax')r  r  )	r1   rR   rS   rt  rY   r   r   r   r;  rZ   r$   r$   r%   test_set_zlimt  s"      rv  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  ry  )r1   rR   rS   r   rW  rt  rY   )rA   r   r   r$   r$   r%   test_shared_axes_retick  s    rz  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)r1   rR   rS   r  r   r   ri  rj  rk  Z_button_pressr   r   ZMIDDLEZ_on_mover   approxrY   )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,expectedrg  ))r   Q?)r1  gQ?)r   {Gz?rO   ))g{Gzr   gQr  Qr  rP   ))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_eventrg  r1  )r:   )r1   rR   rS   r  r   r   ri  rj  rk  Z	transDatarn  Zastypeintr   r   rg  Z
press_zoomZ	drag_zoomZrelease_zoomr  Z	press_panZdrag_panZrelease_panr   r~  rY   backforwardhome)Ztoolr}  r  expectedrA   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   )rp   r
  r   )r3   r4   r7   r5   r8   rx   r  rS   r  r   r   changed)
r!   r"   rO   rP   rQ   rp   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   rM   )r1   rR   Z
subfiguresrS   )rA   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)r^   )r   r+   r   )r+   r+   r   )r+   r   r   whiteblackr*   )r?  r@  zorder)r,   r,   )r   r/   r~   r,   )rp   r  )r.   r.   )r*   r.   ro   )r   r   )r   ry        r   r   r   r   r   r   )rv   rw   r   r  r+   z--r   )r5  Z	linestylerv   r  r.   r/   rn   r   ra   rf  )r1   rR   rS   r  r   r  r  r   r  r   r   r   r3   r   r,  r   r   r   r   r  rg   rz  )rA   r   r   Zcornersr#   ZtriZax3Zax4dimr   r   r   angleZX2ZY2ZZ2ZX3ZY3ZZ3rC   r  thrO   rP   rQ   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   ro   r   u   x=1.8066, y=1.0367, z=−0.0553rm   rP   )rd   vertical_axisu"   x=9.1651, y=−0.9215, z=−0.0359)r1   rR   rS   r3   rx   r   r   r   r   Zformat_coordrY   rg   rA   r#   rO   r$   r$   r%   test_format_coordu  s    



r  c                  C   sN   t  } | jdd}td}||t| | j  |	 dksJt
d S )Nr   r   ro   )FTF)r1   rR   rS   r3   rx   r   r   r   r   Zget_axis_positionrY   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   )rO   )r   r{  r  )rP   )r   r   r  rQ   )r   r   r   )r1   rR   rS   r  rY   rZ   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   rQ   )r*   z'Cannot pass both positional and keyword)rO   rP   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   r1   rR   rS   r  )errr  r   r   rA   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  )rS   r   r   Ztext_2d_to_3dr  Zget_position_3drY   ZText3D)r!   r"   r#   txtZt3dr$   r$   r%   test_text_3d  s    

r  c                  C   s>   t  } | jdd}|dgdggdgdggdgdgg d S )Nr   r   r   r*   )r1   rR   rS   r   rZ   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   rP   rQ   rt   rJ  )rS   r   Zunit_rectangler   r   pathpatch_2d_to_3dr  ZPathPatch3D)r!   r"   r#   pathpatchZpp3dr$   r$   r%   test_pathpatch_3d  s    
r  zscatter_spiral.png)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+   rE  )r1   rR   rS   r3   r   r   r  r   r   r   r   )rA   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*   ro   y              Y@r.   r,   r  r   r   Zhot)r   )	r3   r  r   r   r1   rR   rS   r  r  rP   rO   rD  rA   r#   rC   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  )	r3   r  r   r   r1   rR   rS   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   )rb   rc   rd   r  )rtolN)r1   subplotrg   rR   r   r   Zget_projr3   r   r  r=   Z	get_xaxisZ	get_yaxisZ	get_zaxisr   get_dataZ_get_tickdirr   )r  Zproj_expectedZaxis_lines_expectedZtickdirs_expectedr  r#   Zproj_actualrG   rz  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?rn   ro   rC  )r   heightr  Ztheta1Ztheta2r   rQ   r  )r1   r  mpatchZArcr  r   r  )r#   r/  r$   r$   r%   test_arc_pathpatchS  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 )	NrC   rk   rl   )zaxes3d.xaxis.panecolorzaxes3d.yaxis.panecolorzaxes3d.zaxis.panecolorr  r   r   r   )r1   Z
rc_contextrR   rS   )rA   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   )r!   r"   r   rO   rP   rQ   r   r$   r$   r%   "test_mutating_input_arrays_y_and_zi  s    





r  )r*   )	functoolsr5   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pyplotr1   numpyr3   partialrB  r&   rH   rL   r[   rj   r}   r   r   r   r   r   r   r   r   markZparametrizer   r   r   r   r   r   r  r  r  r  r  r  r)  rA  rG  rI  rK  rR  rV  rc  rd  rh  rr  rt  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  rE  rF  rH  rJ  rR  rT  rX  r]  r_  re  rl  rn  ru  rv  rz  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%   <module>   s|    










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


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

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