o
    :a=                     @   s\  d dl Z d dlZd dlZd dlZd dlmZmZmZmZ d dl	Z
d dlmZ d dlmZ d dl	mZ d dl	mZ d dlmZmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZ d dlZ e j!edddZ"dd Z#e"dgdd Z$dd Z%e"dgdd Z&e"dgdd Z'dd Z(e"dgdd Z)e"d gd!d" Z*e"d#gd$d% Z+ej,-d&d'g d(gd)g d*gd+g d,gged-gd.d/d0 Z.e"d1gd2d3d4d5 Z/d6d7 Z0e"d8gd9d: Z1ed-gd.d;d< Z2e"d=gd>d? Z3ed-gd.d@dA Z4e"dBgdCdD Z5e"dEgdFdG Z6ed-gd.dHdI Z7ej,-dJddKged-gd.dLdM Z8ej,-dNdOdPged-gd.dQdR Z9ed-gd.dSdT Z:e"dUgdVd3dWdX Z;e"dYgdZd[ Z<e"d\gd]d^ Z=e"d_gd`da Z>e"dbgdcdd Z?e"degdKdfdgdh Z@ed-gd.didj ZAe"dkgdld3dmdn ZBe"dogdld3dpdq ZCe"drgdsdt ZDe"dugdvdw ZEe"dxgdydz ZFd{d| ZGd}d~ ZHe"g ddd ZIed-gd.dd ZJe"dgdd ZKdd ZLed-gd.dd ZMdd ZNe"dgdd ZOdd ZPe"dgdd ZQe"dgdd ZRe"dgdd ZSe"dgdKdfdd ZTe"dgdKdfdd ZUe"dgdKdfdd ZVdd ZWdd ZXdd ZYd!ddZZe"dgdd Z[e"dgdd Z\dd Z]dd Z^e"dgdd Z_dd Z`ej,-ddej,-dddd Zae"dgdKdfddĄ Zbe"dgddǄ Zcej,-de jde jegej,-dg dʢdd̄ ZfG dd΄ d΃ZgddЄ Zhed-gd.dd҄ ZiddԄ Zjddք Zked-gd.dd؄ Zled-gd.ddڄ Zmedgddݍdd߄ Zne"dgdd Zoe"dgdd Zpedgdeq dkrdndddd Zredgddݍdd Zsdd Ztdd Zudd Zve
jwxded-gd.dd Zydd Zzedgdd-gddd Z{edgdddd d Z|ej,-ddg dg dg dg dgdd	gd
dgfdd	gddgfddgddgfgg dfdg dg dg dg dgd	dgddgfddgddgfdd	gd
dgfgg dfdg dg dg dg dgddgddgfd	dgdd
gfd	dgddgfgg dfgdd Z}dd Z~dd Zdd  ZdS ("      N)Axes3Daxes3dproj3dart3d)MouseButton)MatplotlibDeprecationWarning)cm)colors)image_comparisoncheck_figures_equal)
mock_event)LineCollectionPolyCollection)CircleTdefault)remove_textstylec                  C   sN   t  } | jdd}tt |d W d    d S 1 s w   Y  d S )N3d
projectionequal)pltfigureadd_subplotpytestraisesNotImplementedErrorZ
set_aspectfigax r    A/usr/lib/python3/dist-packages/mpl_toolkits/tests/test_mplot3d.pytest_aspect_equal_error   s
   "r"   z	bar3d.pngc               
   C   sv   t  } | jdd}tg dg dD ]%\}}td}td}|gt| }d|d< |j|||dd	|d
d qd S )Nr   r   )rgby)      
   r   r(   cr   r&   Zedge皙?)zszdirZaligncoloralpha)r   r   r   zipnparangelenZbar)r   r   r*   zxsyscsr    r    r!   
test_bar3d!   s   

r8   c               
   C   s\   t  } | jdd}dD ]}tt|}t|}t|}|j|||ddd|d qd S )Nr   r   )redgreenblueZyellow   r.   )r   r   r   r1   r2   r3   
zeros_likebar3d)r   r   r*   r5   r6   r,   r    r    r!   test_bar3d_colors-   s   

r@   zbar3d_shaded.pngc               
   C   s   t d} t d}t | |\}}| | }}|| d }g d}tjtdt| d}|jdt|t	ddd}t
||D ]\}\}	}
|j|||d	 dd|d
d |j|	|
d qD|j  d S )N      r<   ))ir'   )r'   r'   )r'   )x   rC   figsizer   r   
subplot_kwr   Tshadeazimelev)r1   r2   meshgridravelr   r   	figaspectr3   subplotsdictr0   r?   	view_initcanvasdraw)xr&   x2dy2dr4   Zviewsr   axsr   rL   rM   r    r    r!   test_bar3d_shaded9   s   

rZ   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   rA   rB   r   r<   FrI   )
r   r   r   r1   r2   rN   rO   r?   rT   rU   )r   r   rV   r&   rW   rX   r4   r    r    r!   test_bar3d_notshadedM   s   

r[   c            
         s   t  } | jddddd}tjddd}d\}}||  tt|t|\}}| }| }|| } fdd	t	 D }|j
||ddd||d
|d	}	tj||	jdd d  d S )Nr<   r   r   r   Z   )ZazdegZaltdeg)   rA   c                    s   g | ]	}t |  qS r    )r   coolwarm).0iZarear    r!   
<listcomp>h       z*test_bar3d_lightsource.<locals>.<listcomp>T)	rV   r&   r4   ZdxZdydzr.   rJ   Zlightsource   )r   r   r   mcolorsZLightSourcer1   rN   r2   rO   ranger?   testingassert_array_equalZ_facecolor3d)
r   r   ZlslengthwidthrV   r&   rd   r.   Z
collectionr    ra   r!   test_bar3d_lightsourceZ   s   
rl   zcontour3d.pngc                  C      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   皙?r4   )r-   offsetcmaprV   r&   (   d   )r   r   r   r   get_test_datacontourr   r^   set_xlimset_ylimset_zlimr   r   XYZr    r    r!   test_contour3du      r   zcontourf3d.pngc                  C   rm   rn   )r   r   r   r   rv   contourfr   r^   rx   ry   rz   r{   r    r    r!   test_contourf3d   r   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   皙?rB   皙)rq   levelsrr   r<   )r   r   r   r1   rN   r2   clipr   r   r^   rx   ry   rz   r{   r    r    r!   test_contourf3d_fill   s   $r   zextend, levelsboth)r   rA   re   min)r   rA   re      max)r   r   rA   re   Zpng)
extensionsc                 C   s   t t dddt ddd\}}|d |d  }td }||d ||d dd|d	}|jd
d}	|	j	|||fdg di| | jd
d}
|
j	||||fd|i| |	|
fD ]}|
dd |dd |dd qbd S )Nr   r   r   viridisr      r<      )vminvmaxrr   r   r   r   )r   r   rA   re   r   extendr)   )r1   rN   r2   r   get_cmapcopyZ	set_underZset_overr   r   rx   ry   rz   )fig_testfig_refr   r   r|   r}   r~   rr   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   )	r   r   r1   randomZseedZrandr   Z
tricontourZtricontourf)r   rV   r&   r4   r   r    r    r!   test_tricontour   s   r   c                  C   sb   t  } | jdd}d\}}tdd|}tdd|}tjdd||g}||||dg d S )	Nr   r   )r'   r(   r   r)   r   r   r   )r   r   r   r1   linspacer   Zrandintrw   )r   r   ZnxnyrV   r&   r4   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   rA   ru   r   r   r<   )	r   r   r   r1   r   pisincosplot)r   r   thetar4   r#   rV   r&   r    r    r!   test_lines3d   s   r   c                 C   s<   | j dd}|dgdgd |j dd}|ddd d S )Nr   r   r<   o)r   r   r   r   ax1ax2r    r    r!   test_plot_scalar   s   r   zmixedsubplot.pngc            	   	   C   s   dd } t ddd}t ddd}tjtdd}|d	d
d
}|j|| |d|| |ddd |d |jd	d
d	dd}t t dddt ddd\}}t 	||}t 
|}|j|||ddddd |dd
 d S )Nc                 S   s    t dt j |  t |   S )Nr   )r1   r   r   Zexp)tr    r    r!   f   s    ztest_mixedsubplots.<locals>.f              @r   r          @rE   r   r<   Zbozk--r:   )markerfacecolorTr   r   rB   r   rt   r   F)rcountccount	linewidthantialiasedr   )r1   r2   r   r   rP   r   r   gridrN   hypotr   plot_surface
set_zlim3d)	r   t1t2r   r   r|   r}   Rr~   r    r    r!   test_mixedsubplots   s    
$
r   c                 C   sP   | j dd}|jddddd |   |j dd}|  |jddddd d S )Nr   r   r   zsome strings)r   textZtight_layoutr   r    r    r!   test_tight_layout_text   s   r   zscatter3d.pngc                  C   s   t  } | jdd}|jtdtdtdddd tdd } }}|j|||dd	d d
|d< |jg g g ddd d S )Nr   r   r)   r#   r   )r*   markerr(   r%   ^r   r   r|   r   r   r   scatterr1   r2   r   r   rV   r&   r4   r    r    r!   test_scatter3d  s   r   zscatter3d_color.pngc                  C   s   t  } | jdd}|jtdtdtddddd |jtdtdtddddd |jtddtddtddd	d
d d S )Nr   r   r)   r#   noner   )	facecolor	edgecolorr   r(   r%   r   )r.   r   r   r   r    r    r!   test_scatter3d_color  s   "
r   c                 C   s   |j dd}|jtdtdtddd}|d |d |dd	gd
  | s1J |d | r<J |	t
dd |d | j dd}|jtdtdtdddddd	gd
 dddd
 d S )Nr   r   r)   r   )r   C1C2g333333?ffffff?rB   FK   r]   )r   r   r   r/   
depthshader   
linewidths)r   r   r1   r2   set_facecolorset_edgecolor	set_alphaget_depthshadeset_depthshadeZ	set_sizesfullZset_linewidths)r   r   r   r*   r   r    r    r!   test_scatter3d_modification*  s"   




r   r   Fc                 C   s0  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 ]7\}}}}||k||kB ||kB |	|kB }t j
j||td}t |t|j }|
j|||||||d|d	 q|jdd}|j|||||||	d|d	 dS )z1Test that marker properties are correctly sorted.Nr)      ru   r   r   r<   C0r   rB   r   re   rA   ZC3ZC4ZC5ZC6	   ZC7c                 S   s   g | ]}|  qS r    )flattenr_   ar    r    r!   rb   Y  s    z*test_scatter3d_sorting.<locals>.<listcomp>r   r   c                 s   s    | ]}t |V  qd S N)r1   uniquer   r    r    r!   	<genexpr>_  s    z)test_scatter3d_sorting.<locals>.<genexpr>Zdtype)r   fceclwr/   r   )r1   mgridr2   sizereshapeshaper   r   	itertoolsproductmaZmasked_arrayfloatrepeatsummaskr   )r   r   r   r&   rV   r4   Zsizes
facecolors
edgecolorsr   r   Zsetsr   r   r   r   Zsubsetr   r    r    r!   test_scatter3d_sorting?  sN   
r   rL      c              	   C   s   ddg}ddg}ddg}ddg}| j dd}|j|||d|d	 |jd|d
 |j dd}|j|ddd |ddd |ddd d|ddd d	 |jd|d
 dS )z
    Test that the draw order does not depend on the data point order.

    For the given viewing angle at azim=-50, the yellow marker should be in
    front. For azim=130, the blue marker should be in front.
    r   r<   r   r%   r&   r   r     r   r*   rM   rL   N)r   r   rS   r   r   rL   rV   r&   r4   r.   r   r    r    r!   $test_marker_draw_order_data_reversedw  s   	<r  c              	   C   s   d}ddg}ddg}ddg}ddg}| j dd}|  |j|||d	|d
 |jd|d |j dd}|  |j|||d	|ddd d
 |jd|d d dS )z
    Test that the draw order changes with the direction.

    If we rotate *azim* by 180 degrees and exchange the colors, the plot
    plot should look the same again.
    r   r   r<   r   r%   r&   r   r   r   r  r  N   )r   set_axis_offr   rS   r  r    r    r!   #test_marker_draw_order_view_rotated  s   r  zplot_3d_from_2d.pnggQ?c                  C   sT   t  } | jdd}tdd}tdd}|j||ddd |j||ddd d S )	Nr   r   r   rB   r)   rV   r,   r-   r&   )r   r   r   r1   r2   r   )r   r   r5   r6   r    r    r!   test_plot_3d_from_2d  s   r	  zsurface3d.pngc               
   C   s   dt jd< t  } | jdd}tddd}tddd}t||\}}t||}t|}|j	|||ddt
jd	dd
}|dd | j|ddd d S )NFzpcolormesh.snapr   r   r   rB   r   rt   r   )r   r   rr   r   r   )\()\(?r   )Zshrinkaspect)r   rcParamsr   r   r1   r2   rN   r   r   r   r   r^   rz   colorbar)r   r   r|   r}   r   r~   Zsurfr    r    r!   test_surface3d  s   

r  zsurface3d_shaded.pngc               
   C   s   t  } | jdd}tddd}tddd}t||\}}t|d |d  }t|}|j|||ddg ddd	d
 |	dd d S )Nr   r   r   rB   r   r   )r   r<   r   r<   F)rstridecstrider.   r   r   r
  r  )
r   r   r   r1   r2   rN   sqrtr   r   rz   )r   r   r|   r}   r   r~   r    r    r!   test_surface3d_shaded  s   

r  zsurface3d_masked.pngc                  C   s   t  } | jdd}g d}g d}t||\}}tg dg dg dg dg d	g d
g dg dg}tj|d}tj	|
 | d}t d||}|j||||d |dd d S )Nr   r   )r<   r   r]   rA   rB   re   r   r   r   r)      )r<   r   r]   rA   rB   re   r   r   )r   r   r   r   r   r   r   r   r   r   r   )r   r<   r   r]   rA   rA   rA   r]   r   r<   r<   )r         rA   rB   re   r   re   rB   rA   r]   r  )r   r  r   r   r     r  r   r   r  r  )r   r  r   r   r)      r)   r   r)   r   r  )r   r  r  r  r  r(   r  r  r  r  r  )r   r  r  r        r  r(      r  r  )r   r  r  r  r        r   r  r  r  r   )r   r   Zplasmar   r'   i)r   r   r   r1   rN   arrayr   masked_lessrf   	Normalizer   r   r   r   rS   )r   r   rV   r&   Zmatrixr4   normr	   r    r    r!   test_surface3d_masked  s*   r"  zsurface3d_masked_strides.pngc                  C   sh   t  } | jdd}tjddddddf \}}tj|| d}|j|||ddd |d	d
 d S )Nr   r   igffffff@r<   r   rA   r  r  <   )	r   r   r   r1   r   r   r  r   rS   r   r    r    r!   test_surface3d_masked_strides  s   r&  z
text3d.png)r   c                  C   s   t  } | jdd}d}d}d}d}t||||D ]\}}}}	d|||	|f }
||||	|
| q|jdddd	d	d
 |jddd|jd |dd |dd |	dd |
d |d |d d S )Nr   r   NrV   r&   r4   r<   r<   r   r<   r<   r<   r   re   rA   r   r   r   re   rA   r   r   r   r   rA   r   rB   re   r<   r   z(%d, %d, %d), dir=%sr<   r9   r=   ro   gffffff?z2D Text)Z	transformr   r)   zX axiszY axiszZ axis)r   r   r   r0   r   Ztext2DZ	transAxes
set_xlim3d
set_ylim3dr   
set_xlabel
set_ylabel
set_zlabel)r   r   zdirsr5   r6   r,   r-   rV   r&   r4   labelr    r    r!   test_text3d  s"   

r4  c                 C   s  d}d}d}d}|j dd}|dd |dd |dd t||||D ]$\}}}	}
|dddd	| d
|	 d
|
 d| }|j||	|
f|d q'| j dd}|dd |dd |dd t||||D ]\}}}	}
|j||	|
d	| d
|	 d
|
 d| |d qkd S )Nr'  r*  r+  r,  r   r   r   r)   (z, z), dir=)r-   )r   r-  r.  r   r0   r   Zset_position_3d)r   r   r2  r5   r6   r,   r   r-   rV   r&   r4   r   r   r    r    r!   test_text3d_modification  s$   (.r6  ztrisurf3d.pngQ?c            	      C   s   d} d}t dd|}t jddt j | dd}t j|d	t jf |d
d}|d d d
d df  t j|  7  < t d|t |  }t d|t |  }t | | }t	
 }|jdd}|j|||tjdd d S )N$   r         ?      ?r   r   FZendpoint.r<   axisr   r   皙?)rr   r   )r1   r   r   r   newaxisappendr   r   r   r   r   r   plot_trisurfr   Zjet	Zn_anglesZn_radiiZradiiZanglesrV   r&   r4   r   r   r    r    r!   test_trisurf3d&  s   $rC  ztrisurf3d_shaded.pngc            	      C   s   d} d}t dd|}t jddt j | dd}t j|d	t jf |d
d}|d d d
d df  t j|  7  < t d|t |  }t d|t |  }t | | }t	
 }|jdd}|j|||g ddd d S )Nr8  r   r9  r:  r   r   Fr;  .r<   r<  r   r   )r<   r   r   r>  )r.   r   )r1   r   r   r   r?  r@  r   r   r   r   r   r   rA  rB  r    r    r!   test_trisurf3d_shaded8  s   $rD  zwireframe3d.pngc                  C   s<   t  } | jdd}td\}}}|j|||ddd d S )Nr   r   ro      r   r   r   r   r   r   rv   plot_wireframer{   r    r    r!   test_wireframe3dJ     rI  zwireframe3dzerocstride.pngc                  C   <   t  } | jdd}td\}}}|j|||ddd d S )Nr   r   ro   rE  r   rF  rG  r{   r    r    r!   test_wireframe3dzerocstrideR  rJ  rL  zwireframe3dzerorstride.pngc                  C   rK  )Nr   r   ro   r   r)   r#  rG  r{   r    r    r!   test_wireframe3dzerorstrideZ  rJ  rM  c                  C   sh   t  } | jdd}td\}}}tt |j|||ddd W d    d S 1 s-w   Y  d S )Nr   r   ro   r   r#  )	r   r   r   r   rv   r   r   
ValueErrorrH  r{   r    r    r!    test_wireframe3dzerostrideraisesb  s   "rO  c                  C   s   t  } | jdd}td\}}}tt |j|||ddd W d    n1 s,w   Y  tt |j	|||ddd W d    d S 1 sLw   Y  d S )Nr   r   ro   r)   2   )r  r   )r  r   )
r   r   r   r   rv   r   r   rN  rH  r   r{   r    r    r!   test_mixedsamplesraisesj  s   "rQ  )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 ]}t jdd	}|j| |||||d
|dd	 qad S )Nr   r+                 $@333333?              @>,p ?)tipmiddletailr   r   r   Trj   pivot	normalize)	r1   Zogridr   r   r   r   r   r   quiver)rV   r&   r4   uvwrZ  r   r    r    r!   test_quiver3dt  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   rV  TrY  )r   r\  )	r   r   rV   r&   r4   r]  r^  r_  r   r    r    r!   test_quiver3d_empty  s    ra  zquiver3d_masked.pngc                  C   s.  t  } | jdd}tjdddddddddf \}}}ttj| ttj|  ttj|  }ttj|  ttj|  ttj|  }dttj|  ttj|  ttj|  }tjj	d	|k |d
k @ |dd}tjj	d
|k |dk @ |dd}|j
||||||d
ddd	 d S )Nr   r   r   r+   rR  rS  rT  rU  皙ٿr   F)r   r   rV  TrY  )r   r   r   r1   r   r   r   r   r   Zmasked_wherer\  )r   r   rV   r&   r4   r]  r^  r_  r    r    r!   test_quiver3d_masked  s   (024 rc  c                  C   sp   t  } | jdd}td}|| t| |d t	|
 ds'J | j  t	|
 ds6J d S )Nr   r   r   r   )r:  r   r   r<   r<   r   r   r<   )r   r   r   r   	add_patchr   Zpatch_2d_to_3dr   rf   Z
same_colorZget_facecolorrT   rU   )r   r   Zcircler    r    r!   test_patch_modification  s   



rg  c                 C   s   t dd}t dd}tg dg dg}tj||gdd}| jd	d
}|| |d || |	d |
 s>J |d |
 rIJ t dd}t dd}tg dg dg}tj||gdd|ddd}|jd	d
}|| d S )Nrd  ro   )r   r   r7  )r   r   r   r:  )r   r   r   r   r]   )r   r   r   r   r   F)r   r   r   r/   r   )r   r1   r  r   ZPatch3DCollectionr   add_collection3dr   r   r   r   r   )r   r   Zpatch1Zpatch2r   r*   r   r   r    r    r!   "test_patch_collection_modification  s*   








ri  c                  C   s   g dg dg dg dg} t jtdd t|  W d    n1 s%w   Y  tj| td} t jtdd t|  W d    d S 1 sIw   Y  d S )Nr   r   r<   r   r<   r<   )r   r<   r   r   r   r   zlist of \(N, 3\) array-likematchr   )r   r   rN  r   Poly3DCollectionr1   r  r   )polyr    r    r!   &test_poly3dcollection_verts_validation  s   "rq  zpoly3dcollection_closed.pngc                  C   s   t  } | jdd}tg dg dg dgt}tg dg dg dgt}tj|gdd	d
dd}tj|gdd	ddd}|| || d S )Nr   r   rj  rk  rl  r)  r(  r]   k)r   r   r<   r   Tr   r   r   closed)r<   r   r   r   F)	r   r   r   r1   r  r   r   ro  rh  r   r   Zpoly1Zpoly2Zc1Zc2r    r    r!   test_poly3dcollection_closed  s   
rv  c                  C   sv   t g } t|  t| tjsJ |  g ksJ tjtddd\}}|	|  | 
 }t|s4J |j  d S )Nr   r   rG   )r   r   Zpoly_collection_2d_to_3d
isinstancero  Z	get_pathsr   rQ   rR   
add_artistdo_3d_projectionr1   ZisnanrT   rU   )rp  r   r   Zminzr    r    r!   #test_poly_collection_2d_to_3d_empty  s   

rz  zpoly3dcollection_alpha.pngc                  C   s   t  } | jdd}tg dg dg dgt}tg dg dg dgt}tj|gdd	d
dd}|d tj|gddd}|	d |
d	 |d || || d S )Nr   r   rj  rk  rl  r)  r(  r]   rr  )r   r   r<   Trs  r   F)r   rt  )r<   r   r   )r   r   r   r1   r  r   r   ro  r   r   r   rh  ru  r    r    r!   test_poly3dcollection_alpha  s   




r{  zadd_collection3d_zs_array.pngc                  C   sB  t dt j dt j d} t ddd}|d d }|t |  }|t |  }t |||gddd}t j|d d |dd  gdd	}t	 }|j
d
d}tddt j }	t|d d d d d df d|	d}
|
t | dt j  |j|
|d d d d df d}|d usJ |dd |dd |dd d S )Nr   rA   ru   r   r   r<   r   r]   r<  r   r   r   twilightrr   r!  r,   r   rB   re   )r1   r   r   r   r   column_stackr   concatenater   r   r   r   r   	set_arraymodrh  rx   ry   rz   r   r4   r#   rV   r&   ZpointsZsegmentsr   r   r!  Zlcliner    r    r!   test_add_collection3d_zs_array  s"   "$ r  zadd_collection3d_zs_scalar.pngc                  C   s   t ddt j d} d}|d d }|t |  }|t |  }t ||gddd}t j|d d |dd  gdd}t	 }|j
dd}tddt j }	t|d	|	d
}
|
|  |j|
|d}|d usiJ |dd |dd |dd d S )Nr   r   ru   r<   r   r<  r   r   r|  r}  r~  r   rB   r   re   )r1   r   r   r   r   r  r   r  r   r   r   r   r   r  rh  rx   ry   rz   r  r    r    r!   test_add_collection3d_zs_scalar  s"   "
r  zaxes3d_labelpad.pngc                  C   s   t  } | t| dd}|jjtjd ksJ |jddd |jjdks'J |	d |
d d	|j_d
|j_t|j D ]\}}|| |d   q@d S )NF)Zauto_add_to_figurezaxes.labelpadzX LABELr)   )labelpadzY LABELzZ LABELr(   rs   rB   )r   r   Zadd_axesr   xaxisr  mplr  r/  r0  r1  yaxiszaxis	enumerateget_major_ticksZset_padZget_pad)r   r   r`   tickr    r    r!   test_axes3d_labelpad4  s   

r  zaxes3d_cla.pngc                  C   s.   t  } | jddddd}|  |  d S )Nr<   r   r   )r   r   r   r  clar   r    r    r!   test_axes3d_claH  s   r  zaxes3d_rotated.pngc                  C   s*   t  } | jddddd}|dd d S )Nr<   r   r   r\   -   )r   r   r   rS   r   r    r    r!   test_axes3d_rotatedQ  s   r  c                  C   s   t jdddd} t jdddd}t | |\}}t jd}tjdd}|jdddd	d
}t	t
 |||| W d    d S 1 sEw   Y  d S )Nr   r)   ru   )Znum)   re   rE   r<   r   r   r   )r1   r   rN   r   randnr   r   r   r   r   rN  r   )rV   r&   r|   r}   r4   r   r   r    r    r!   test_plotsurface_1d_raisesX  s   "r  c                  C   sT   t g d} t g d}t g d}t| ||}tdd}t ||}|S )N)r   ii  )ru   ru   ru   rj  ru   rp   )r1   r  r   view_transformationZpersp_transformationdot)Er   VviewMZperspMMr    r    r!   _test_proj_make_Md  s   r  c            
      C   s   t  } tg dd }tg dd }tg dd }t|||| \}}}t|||| \}}}	tj|| tj|| tj|	| d S )N
r   r<   r<   r   r   r   r<   r<   r   r        r@
r   r   r<   r<   r   r   r   r<   r<   r   
r   r   r   r   r   r<   r<   r<   r<   r<   )r  r1   r  r   proj_transformZinv_transformrh   Zassert_almost_equal)
r  r5   r6   r,   txstystzsZixsZiysZizsr    r    r!   test_proj_transformo  s   r  r<   c                 O   s   d|ddg}dd|dg}ddd|g}t |||| \}}}	t||\}
}}}|
|f|
|f|
|fg}tj|i |\}}t|}|| t||g dD ]\}}}|||| qL||fS )Nr   )r   rV   r&   r4   )r   r  r0   r   rQ   r   Zadd_collectionr   )r  r   argsr   r5   r6   r,   r  r  r  r   r   Zayazlinesr   ZlinecrV   r&   r   r    r    r!   _test_proj_draw_axes~  s   
r  zproj3d_axes_cube.pngc                  C   s   t  } d }tg dd }tg dd }tg dd }t|||| \}}}t| dd\}}	|	j|||d |	j||d	d t	|||D ]\}
}}|	
|
|| qK|	d
d |	d
d d S )N0 1 2 3 0 4 5 6 7 4r  r  r  r  i  r   r*   r#   皙ɿr>  )r  splitr1   r  r   r  r  r   r   r0   r   rx   ry   )r  tsr5   r6   r,   r  r  r  r   r   rV   r&   r   r    r    r!   test_proj_axes_cube  s   r  zproj3d_axes_cube_ortho.pngc                  C   s  t g d} t g d}t g d}t| ||}tdd}t ||}d }t g dd }t g d	d }t g d
d }	t|||	|\}
}}t|dd\}}|j	|
|d| d |j
|
|dd t|
||D ]\}}}|||| qr|dd |dd d S )N)   ru   ru   rl  rj  r   r<   r  r  ru   r  r     r   ,  r#   r  i8r  )r1   r  r   r  Zortho_transformationr  r  r  r  r   r   r0   r   rx   ry   )r  r   r  r  ZorthoMr  r  r5   r6   r,   r  r  r  r   r   rV   r&   r   r    r    r!   test_proj_axes_cube_ortho  s$   r  c                  C   sj   g d} t | tjd }tj|g d g d} t | tjd }tj|dtdd ddg d S )	Nre  re   )r   r<   r   r<   r   r]   r   r   r<   )r   Zrot_xr1   r   rh   assert_allcloser  )r  Z	rotated_Vr    r    r!   test_rot  s   $r  c                  C   sV   d\} }d\}}d\}}t | |||||}tj|g dg dg dg dg d S )N)ru   rD   )rp   ru   )r   r>  )ro   r   r   r   )r   g{Gzt?r   r   )r   r   g      $@r   )r   r   r   r<   )r   Zworld_transformationr1   rh   r  )ZxminZxmaxZyminZymaxZzminZzmaxr  r    r    r!   
test_world  s   r  zproj3d_lines_dists.pngc                  C   s   t jdtddd\} }d}d}||| t||\}}d}d}||| t|||d	 |d	 f}t||t	||f}t|||D ]\}}}	t
||f|	d	d
}
||
 qF|dd |d	d d S )N)rA   re   r   )r  )rF   rH   )r   r'   )r(   r  )r   r   r(   r'   )ru   r  r'   r  r   )fillr   r  r  )r   rQ   rR   r   r0   r   r   Z_line2d_seg_distr1   r  r   rf  rx   ry   )r   r   r5   r6   Zp0Zp1ZdistrV   r&   dr*   r    r    r!   test_lines_dists  s   r  c                  C   s   t jddid\} }|jdddd |ddgddgddg | d	ks'J |d
 |d |ddgddgddg | dksFJ d S )Nr   r   rG   r   r   r>  rV   r&   r4   r<   )r   r<   r   皙?r  g333333?FTr   )r   r<   r   r  rb  g333333@)r   rQ   Zmarginsr   Z
get_w_limsZ	autoscaleZset_autoscalez_onr   r    r    r!   test_autoscale  s   

r  r=  r  auto)TFNc           
      C   s   t  }|jdd}td}tddd}||| t|d|  d}t|d|  d	}t|d
|  d	}|d u r>| n|}	|d|d |	| ksMJ |j	  tj
| d d S )Nr   r   ru   r   r   Zget_autoscaleZ_onZset_ZlimZget_)      r   )r  )r   r   r   r1   r2   r   r   getattrrT   rU   rh   ri   )
r=  r  r   r   rV   r&   Zget_autoscale_onZset_limZget_limZ	post_autor    r    r!   test_unautoscale  s   

r  zaxes3d_ortho.pngc                  C   s"   t  } | jdd}|d d S )Nr   r   ortho)r   r   r   Zset_proj_typer   r    r    r!   test_axes3d_ortho  s   r  zaxes3d_isometric.pngc               	   C   s   ddl m} m} tjtddddd\}}d}| tt||||d	D ]\}}t	|| 
 |d
 |d  krD|jt||ddi q%|jttdtd	 dd |d d S )Nr   )combinationsr   r   r  )rA   rA   rA   )r   Z	proj_typeZ
box_aspectrG   )r   r<   r   r<   r*   rr  r:  r%  r  T)r   r  r   r   rQ   rR   r1   r  listabsr   plot3Dr0   rS   ZdegreesZarctanr  r   )r  r   r   r   r#   r   er    r    r!   test_axes3d_isometric  s   $ $r  value)setterside))r-  left)r-  right)r.  bottom)r.  top)r   r  )r   r  c                 C   s`   ||i}t  }|jdd}tt t|| di | W d    d S 1 s)w   Y  d S )Nr   r   r    )r   r   r   r   r   rN  r  )r  r  r  limitr   objr    r    r!   test_invalid_axes_limits%  s   
"r  c                   @   s   e Zd Zedgdd Zedgdd Zedgdd	 Zed
gdd Zedgdd Zedgddddd Z	dd Z
dS )
TestVoxelszvoxels-simple.pngc                 C   sB   t jddid\}}td\}}}||k||kB }|| d S )Nr   r   rG   )rB   rA   r]   )r   rQ   r1   indicesvoxels)selfr   r   rV   r&   r4   r  r    r    r!   test_simple7  s   zTestVoxels.test_simplezvoxels-edge-style.pngc                 C   sv   t jddid\}}td\}}}|d d |d d  |d d  dk }|j|dd	d
}|t|  d d S )Nr   r   rG   )rB   rB   rA   r   g      ?g](\@r]   r   )r   r   r   )r   rQ   r1   r  r  r   keysr   )r  r   r   rV   r&   r4   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   rG   r)   r)   r)   r<   r   r   z0.25rB   Zcyanr)   r  N)r   rQ   r1   r  r   Zobject_r  r  r   r   rV   r&   r4   r  r	   r    r    r!   test_named_colorsJ  s   zTestVoxels.test_named_colorszvoxels-rgb-data.pngc                 C   st   t jddid\}}td\}}}||k||kB }td}|d |d< |d |d< |d |d	< |j||d
 dS )z5Test with colors set to a 4d float array of rgb data.r   r   rG   r  )r)   r)   r)   r]   r   .r   .r<   .r   r  N)r   rQ   r1   r  zerosr  r  r    r    r!   test_rgb_dataW  s   
zTestVoxels.test_rgb_datazvoxels-alpha.pngc                 C   s   t jddid\}}td\}}}||k}t|| dk }||B }td}	g d|	|< g d|	|< |j||	d	}
t|
tu sCJ |
	 D ]\}}|| sSJ d
t
|tjs[J qGd S )Nr   r   rG   r  r   )r)   r)   r)   rA   )r<   r   r   r   )r   r<   r   r   r  zfaces returned for absent voxel)r   rQ   r1   r  r  r  r  typerR   itemsrw  r   ro  )r  r   r   rV   r&   r4   Zv1Zv2r  r	   r^  Zcoordrp  r    r    r!   
test_alphad  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   rG   c                 S   sZ   d}t | jD ]#}| |tjd d   | |tjdd     d } |tjd d  7 }q| S )Nr    r   r<   r   )rg   ndimr1   Z	index_exp)rV   slr`   r    r    r!   	midpointsz  s   z&TestVoxels.test_xyz.<locals>.midpoints)   r  r  g      0@r   r   r   )r]   r  r  r  r   r<   )r   r   r   )r   rQ   r1   r  r  r   r  r   )r  r   r   r  r#   r$   r%   ZrcZgcZbcZspherer	   r    r    r!   test_xyzv  s    	(
zTestVoxels.test_xyzc                 C   sZ  t d\}}}t d}tjddid\}}t tddfD ].}|j|fi | |jdd|i| |j||||fi | |j|||fd|i| qtjt	d	d
 |j|||||d W d    n1 sjw   Y  tjt	d	d
 ||| W d    n1 sw   Y  tt
 |j||||d W d    d S 1 sw   Y  d S )N)r]   rA   rB   )r   r]   rA   r   r   rG   rr  )r   filledr  rm  )r  )r  rV   r&   r4   r    )r1   r  Zonesr   rQ   rR   r  r   r   	TypeErrorAttributeError)r  rV   r&   r4   r  r   r   kwr    r    r!   test_calling_conventions  s"   
"z#TestVoxels.test_calling_conventionsN)__name__
__module____qualname__mpl3d_image_comparisonr  r  r  r  r  r  r  r    r    r    r!   r  6  s    






 r  c            
      C   s
  ddgddgddg} }}ddgd	d
gddg}}}t  }|jdd}|| ||}|d }	tj| ||f|	  |	||| tj|||f|	  |		|  |	
| |	j|dd tj| ||f|	  |	jddd tj| |t|f|	  d S )Nr   r<   r   r]   rA   rB   re   r   r   r   r)   r  r   r   r4   r  )r   r   r   r   r1   rh   ri   Zget_data_3dZset_data_3dZ	set_xdataZ	set_ydataZset_3d_propertiesr>   )
rV   r&   r4   Zx2Zy2Zz2r   r   r  r  r    r    r!   test_line3d_set_get_data_3d  s   

"r  c                 C   s`   | j dd}|g dg dg d |  |j dd}|  |g dg dg d d S )Nr   r   )r<   r<   r)   r)   )r<   r)   r)   r)   )r<   r<   r<   r)   )r   r   Zinvert_yaxis)r   r   r   r    r    r!   test_inverted  s   r  c                  C   s   t jddid\} }| rJ | rJ | rJ |dd |dd |dd | s4J | s:J | s@J |  | rJJ | rPJ | rVJ d S )Nr   r   rG   r<   r   )	r   rQ   Zxaxis_invertedZyaxis_invertedZzaxis_invertedrx   ry   rz   r  r   r    r    r!   test_inverted_cla  s   r  c                  C   s   t  } tt t| }W d    n1 sw   Y  |jddd |jddd |jddd | j  |j	
 D ]
}|jjdksFJ q<|j
 D ]
}|jjdksVJ qL|j
 D ]
}|jjdksfJ q\d S )NrV   r9   )r=  r	   r&   r4   )r   r   r   warnsr   r   Ztick_paramsrT   rU   r  r  Z	tick1lineZ_colorr  r  )r   r   r  r    r    r!   test_ax3d_tickcolour  s   

r  c           	      C   s  | j ddddid}|jD ]}|dd qt|g dD ]=\}}|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 qlt|dgdgdgg dgD ][\}}||d	 |D ]}|d q||d |D ]}|d q||d |D ]}|	tjd   q||d |D ]}|
tjd   q||d |D ]}|tjd   qqd S )NrA   rB   r   r   rG   g    cAg   @cA)rV   r&   r4   r   r   Z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!   rb     rc   zAtest_ticklabel_format.<locals>.get_formatters.<locals>.<listcomp>r    )r   namesr    r  r!   get_formatters  s   z-test_ticklabel_format.<locals>.get_formattersr  r  r  )r  r  r  F)rQ   Zflatrx   r0   Zticklabel_formatr  r  Zset_scientificZset_powerlimitsZset_useOffsetZset_useLocaleZset_useMathText)	r   r   rY   r   rowr  r  r  Zfmtr    r    r!   test_ticklabel_format  sR   



r  c                 C   s   d}t t dddt dddt ddd\}}}t | } }}t|| fdD ]\}	}
|	jdd}|j|||||||
|d	 q+d S )
NrW  gr<   r>  r+   )r<   r:  r   r   )rj   rZ  )r1   rN   r2   	ones_liker0   r   r\  )r   r   rZ  rV   r&   r4   r]  r^  r_  r   rj   r   r    r    r!   test_quiver3D_smoke  s   
r  zminor_ticks.pngZmpl20)r   c                  C   st   t  jdd} | jdgdd | jdgdd | jdgdd | jdgdd | jd	gdd | jd
gdd d S )Nr   r   r   T)minorZquartergQ?Zthirdr   Zhalf)	r   r   r   Z
set_xticksZset_xticklabelsZ
set_yticksZset_yticklabels
set_zticksZset_zticklabelsr  r    r    r!   test_minor_ticks,  s   r  zerrorbar3d_errorevery.pngc            
   	   C   s   t ddt j d d} t | t d|  t d|  }}}t }|jdd}d	}t | j}|| dk|| d dk@ }|| dk|| d dk@ }	|j	|||d
||	|d dS )z0Tests errorevery functionality for 3D errorbars.r   r   r   r  r]   rB   r   r      r>  )zuplimszlolimsZ
erroreveryN)
r1   r2   r   r   r   r   r   r   r   errorbar)
r   rV   r&   r4   r   r   Zestepr`   r  r  r    r    r!   test_errorbar3d_errorevery7  s   *
r	  zerrorbar3d.pngc                  C   sZ   t  } | jdd}g d}g d}|j||||||dg dg ddd	d
d |  dS )z9Tests limits, color styling, and legend for 3D errorbars.r   r   )r<   r   r]   rA   rB   )r   r   r   r   r   r]   )FTFTT)TFFTFTZpurplezError lines)rV   r&   r4   ZxerrZyerrZzerrZcapsizer  r  ZyuplimsZecolorr3  N)r   r   r   r  Zlegend)r   r   r  r  r    r    r!   test_errorbar3dI  s   r
  z
stem3d.pngZx86_64r   g~jth?)r   r   c               
   C   s.  t jddddddid\} }tddtj }t|tjd  }t|tjd  }|}t|d g d	D ]\}}|j||||d
 |	d|  q6ttj d tjd d}t
|}t|}t|d g d	D ]'\}}|j|||ddd|d\}}	}
|	d|  |jddd |
d qmd S )Nr   r]   )r   re   Tr   r   rF   Zconstrained_layoutrH   r   r  )orientationzorientation=r(   r<   zC4-.ZC1Dr   )ZlinefmtZ	markerfmtZbasefmtr  r   )r   Zmarkeredgewidth)r   rQ   r1   r   r   r   r   r0   ZstemZ	set_titler   setZset_linewidth)r   rY   r   rV   r&   r4   r   r-   Z
markerlineZ	stemlinesZbaseliner    r    r!   test_stem3dY  s0   



r  zequal_box_aspect.pngc                  C   sp  ddl m} m} t }|jdd}tddtj d}tdtjd}t	t
|t|}t	t|t|}t	t|t
|}|||| ddg}	|tt| |	|	|	dD ]!\}
}tt|
| |	d |	d  kr|jt|
|d	d
i qat| | | g}t|d t|d g}|| || || |d |d d S )Nr   )r   r  r   r   r   ru   r   r<   r.   r%   offr)  )r   r   r  r   r   r   r1   r   r   Zouterr   r   r   r   r  r  r   r  r  r0   r  
get_xlim3d
get_ylim3d
get_zlim3dr   r   r-  r.  r   r=  Zset_box_aspect)r   r  r   r   r]  r^  rV   r&   r4   r#   r   r  ZxyzlimZXYZlimr    r    r!   test_equal_box_aspectw  s.   $$



r  c                  C   s   d} t jd| ddddid\}}|D ]}|tjdtjdtjd}qt j||d	d
}|j  |j	
 jd dk sAJ d S )Nr   r<   )rA   rB   Tr   r   r  rB   Z
horizontal)r   r  r>  )r   rQ   rA  r1   r   r  r  rT   rU   r   Zget_positionZextents)Z	num_plotsr   rY   r   Zp_triZcbarr    r    r!   test_colorbar_pos  s   



r  c                  C   s   t  } | jddd}| jdd|d}|ddgddgddg |ddgddgddg |g d	 | d
ks<J | d
ksDJ d S )N   r   r      )r   Zsharezr   r<   r   )r  r   r         @)r  r  )r   r   r   r   r  Zget_zlim)r   r   r   r    r    r!   test_shared_axes_retick  s   r  c                  C   s2  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sjJ |t|kssJ |t|ks|J |t|ksJ |
t|ksJ |t|ksJ 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   )ZbuttonZxdataZydatar<   N)r   r   r   r   rT   rU   r  r  r  Z_button_pressr   r   ZMIDDLEZ_on_mover   Zapprox)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  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   rB   r<   o   r   r   rt   r   )r*   r   rr   )r1   r  r  r   r   r2   Tr   r   rT   rU   Zchanged)
r   r   rV   r&   r4   r*   r   Zsc_testr   Zsc_refr    r    r!   test_scalarmap_update  s   
r  c                  C   sF   t  } | dd}|d jddddd}|d jdddddd}d S )Nr<   r   r   r   r   other)r   r3  )r   r   Z
subfiguresr   )r   Zsfr   r    r    r!   test_subfigure_simple  s   r   computed_zorder)baseline_imagesr   r   c               
   C   s  t  } | jddd}| jddd}d|_d}||fD ]4}tj|gddd	d
}|| |jdddddd |jdddddd |	d |
d |d q| 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' qd S )(N   r   r      F)rl  )r   rB   r   )rB   rB   r   )rB   r   r   ZwhiteZblackr<   )r   r   zorder)r   r   )r   rA   r9   r   )r*   r%  )r]   r]   )r<   r]   r)   )r   r   )r   r        r   r   r   r   r;   r   )r.   r/   r   r%  rB   z--r:   )r   Z	linestyler.   r%  r]   rA   ir(   rK   r  )r   r   r   r!  r   ro  rh  r   r   rx   ry   rz   r1   rN   r  r   r   r   r   r   rS   r=  )r   r   r   Zcornersr   ZtriZax3Zax4Zdimr|   r}   r~   ZangleZX2ZY2ZZ2ZX3ZY3ZZ3r#   r  thrV   r&   r4   r    r    r!   test_computed_zorder  s   



2
"
$
$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   re      r<   rB   r  )r   r   r   r1   r   r   r   r   r   rT   rU   )r   r   r(  Zscr    r    r!   test_scatter_spiralM  s
   ,r+  zDvertical_axis, proj_expected, axis_lines_expected, tickdirs_expectedr4   )r   #k$I?r   ._x%I)r   r   (m?@mۿ)r   r   r   g      $)#k$Ir   r   W$%@g˗ì?g2m 3?g溾IgMg2m 3gM?)r<   r   r   r&   )r,  r   r   r-  )r   r.  r   r/  )r   r   r0  r1  )r   r   r   rV   )r   r   r,  r-  )r.  r   r   r/  )r   r0  r   r1  )r<   r   r<   c                 C   s   d}t jddddd}|jdd| d |jj  | }tjj	|||d t
| | | gD ]%\}}|| }	|j }
tjj	|	|
|d || }| }tj|| q3d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   )rL   rM   vertical_axis)rtolN)r   ZsubplotrS   r   rT   rU   Zget_projr1   rh   r  r  Z	get_xaxisZ	get_yaxisZ	get_zaxisr  get_dataZ_get_tickdirri   )r2  Zproj_expectedZaxis_lines_expectedZtickdirs_expectedr3  r   Zproj_actualr`   r=  Zaxis_line_expectedZaxis_line_actualZtickdir_expectedZtickdir_actualr    r    r!   test_view_init_vertical_axisZ  s    D"

r5  c                  C   sz   G dd dt j} t }|jddd}|  }|| d}tjt|d |j	
  W d   dS 1 s6w   Y  dS )	zv
    Test that an external artist with an old-style calling convention raises
    a suitable deprecation warning.
    c                   @      e Zd Zdd Zdd ZdS )zOtest_do_3d_projection_renderer_deprecation_warn_on_argument.<locals>.DummyPatchc                 S      dS Nr   r    r  Zrendererr    r    r!   ry       z`test_do_3d_projection_renderer_deprecation_warn_on_argument.<locals>.DummyPatch.do_3d_projectionc                 S      d S r   r    r9  r    r    r!   rU     r:  zTtest_do_3d_projection_renderer_deprecation_warn_on_argument.<locals>.DummyPatch.drawNr  r  r  ry  rU   r    r    r    r!   
DummyPatch      r=  r  r   r   z?The 'renderer' parameter of do_3d_projection\(\) was deprecatedrm  N)r   Patch3Dr   r   r   rx  r   r  r   rT   rU   )r=  r   r   artistrn  r    r    r!   ;test_do_3d_projection_renderer_deprecation_warn_on_argument  s   
"rA  c                  C   F   G dd dt j} t }|jddd}|  }|| |j  dS )z
    Test that an external artist with a calling convention compatible with
    both v3.3 and v3.4 does not raise a deprecation warning.
    c                   @   s   e Zd ZdddZdd ZdS )zZtest_do_3d_projection_renderer_deprecation_nowarn_on_optional_argument.<locals>.DummyPatchNc                 S   r7  r8  r    r9  r    r    r!   ry    r:  zktest_do_3d_projection_renderer_deprecation_nowarn_on_optional_argument.<locals>.DummyPatch.do_3d_projectionc                 S   r;  r   r    r9  r    r    r!   rU     r:  z_test_do_3d_projection_renderer_deprecation_nowarn_on_optional_argument.<locals>.DummyPatch.drawr   r<  r    r    r    r!   r=    s    
r=  r  r   r   Nr   r?  r   r   r   rx  rT   rU   r=  r   r   r@  r    r    r!   Ftest_do_3d_projection_renderer_deprecation_nowarn_on_optional_argument     
rE  c                  C   rB  )z
    Test that an external artist with a calling convention compatible with
    only v3.4 does not raise a deprecation warning.
    c                   @   r6  )zTtest_do_3d_projection_renderer_deprecation_nowarn_on_no_argument.<locals>.DummyPatchc                 S   r7  r8  r    )r  r    r    r!   ry    r:  zetest_do_3d_projection_renderer_deprecation_nowarn_on_no_argument.<locals>.DummyPatch.do_3d_projectionc                 S   r;  r   r    r9  r    r    r!   rU     r:  zYtest_do_3d_projection_renderer_deprecation_nowarn_on_no_argument.<locals>.DummyPatch.drawNr<  r    r    r    r!   r=    r>  r=  r  r   r   NrC  rD  r    r    r!   @test_do_3d_projection_renderer_deprecation_nowarn_on_no_argument  rF  rG  )r<   )	functoolsr   platformr   Zmpl_toolkits.mplot3dr   r   r   r   Z
matplotlibr  Zmatplotlib.backend_basesr   Zmatplotlib.cbookr   r   r	   rf   Zmatplotlib.testing.decoratorsr
   r   Zmatplotlib.testing.widgetsr   Zmatplotlib.collectionsr   r   Zmatplotlib.patchesr   Zmatplotlib.pyplotZpyplotr   Znumpyr1   partialr  r"   r8   r@   rZ   r[   rl   r   r   r   ZmarkZparametrizer   r   r   r   r   r   r   r   r   r   r   r  r  r	  r  r  r"  r&  r4  r6  rC  rD  rI  rL  rM  rO  rQ  r`  ra  rc  rg  ri  rq  rv  rz  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  infnanr  r  r  r  r  r  r  r  r  r	  r
  machiner  r  r  r  r  r   contextr  r   r)  r+  r5  rA  rE  rG  r    r    r    r!   <module>   s   




















6



	





















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




"
&

Q
2(