a
    f1b=                     @   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   sL   t  } | jdd}tt |d W d    n1 s>0    Y  d S )N3d
projectionequal)pltfigureadd_subplotpytestraisesNotImplementedErrorZ
set_aspectfigax r    >lib/python3.9/site-packages/mpl_toolkits/tests/test_mplot3d.pytest_aspect_equal_error   s    r"   z	bar3d.pngc               
   C   sv   t  } | jdd}tg dg dD ]J\}}td}td}|gt| }d|d< |j|||dd	|d
d q&d S )Nr   r   )rgby)      
   r   r(   cr   r&   Zedge皙?)zszdirZaligncoloralpha)r   r   r   zipnparangelenZbar)r   r   r*   zxsysZcsr    r    r!   
test_bar3d!   s    

r7   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 ]6\}\}	}
|j|||d	 dd|d
d |j|	|
d q|j  d S )N      r;   ))ir'   )r'   r'   )r'   )x   rB   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   rK   rL   r    r    r!   test_bar3d_shaded9   s    

rY   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@   rA   r   r;   FrH   )
r   r   r   r1   r2   rM   rN   r>   rS   rT   )r   r   rU   r&   rV   rW   r4   r    r    r!   test_bar3d_notshadedM   s    

rZ   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)   r@   c                    s   g | ]}t |  qS r    )r   coolwarm).0iZarear    r!   
<listcomp>h       z*test_bar3d_lightsource.<locals>.<listcomp>T)	rU   r&   r4   ZdxZdydzr.   rI   Zlightsource   )r   r   r   mcolorsZLightSourcer1   rM   r2   rN   ranger>   testingassert_array_equalZ_facecolor3d)
r   r   ZlslengthwidthrU   r&   rc   r.   Z
collectionr    r`   r!   test_bar3d_lightsourceZ   s    
rk   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   皙?r4   )r-   offsetcmaprU   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   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 rl   )r   r   r   r   rt   contourfr   r]   rv   rw   rx   ry   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   皙?rA   皙)ro   levelsrp   r;   )r   r   r   r1   rM   r2   clipr~   r   r]   rv   rw   rx   ry   r    r    r!   test_contourf3d_fill   s    $r   zextend, levelsboth)r   r@   rd   min)r   r@   rd      max)r   r   r@   rd   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 qd S )Nr   r   r   viridisr      r;      )vminvmaxrp   r   r   r   )r   r   r@   rd   r   extendr)   )r1   rM   r2   r   get_cmapcopyZ	set_underZset_overr   r~   rv   rw   rx   )fig_testfig_refr   r   rz   r{   r|   rp   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   rU   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randintru   )r   r   ZnxZnyrU   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   r@   rs   r   r   r;   )	r   r   r   r1   r   pisincosplot)r   r   thetar4   r#   rU   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          @rD   r   r;   Zbozk--r9   )markerfacecolorTr   r   rA   r   rr   r   F)rcountccount	linewidthantialiasedr   )r1   r2   r   r   rO   r   r   gridrM   hypotr   plot_surface
set_zlim3d)	r   t1t2r   r   rz   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   rz   r   r   r   scatterr1   r2   r   r   rU   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
  | sbJ |d | rxJ |	t
dd |d | j dd}|jtdtdtdddddd	gd
 dddd
 d S )Nr   r   r)   r   )r   C1C2g333333?ffffff?rA   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   s2  t jddddf \}}t |j|j}t |jd}d|ddddddf< d|ddddddf< t |jd}d	|dd
dd
f< d|ddddf< d|ddddf< t |jd}d|dd
dd
f< d|d
ddd
f< d|d
dd
df< t |jd}	d
|	ddddddf< d
|	ddddddf< dd |||||||	fD \}}}}}}}	| jdd}
dd ||||	fD }tj	| D ]p\}}}}||k||kB ||kB |	|kB }t j
j||td}t |t|j }|
j|||||||d|d	 q|jdd}|j|||||||	d|d	 dS )z1Test that marker properties are correctly sorted.Nr)      rs   r   r   r;   C0r   rA   r   rd   r@   ZC3ZC4ZC5ZC6	   ZC7c                 S   s   g | ]}|  qS r    )flattenr^   ar    r    r!   ra   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>_  rb   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&   rU   r4   Zsizes
facecolors
edgecolorsr   r   Zsetsr   r   r   r   Zsubsetr   r    r    r!   test_scatter3d_sorting?  sN    
r   rK      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*   rL   rK   N)r   r   rR   r   r   rK   rU   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   rR   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   rA   r)   rU   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   rA   r   rr   r   )r   r   rp   r   r   )\()\(?r   )Zshrinkaspect)r   rcParamsr   r   r1   r2   rM   r   r   r   r   r]   rx   colorbar)r   r   rz   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   rA   r   r   )r   r;   r   r;   F)rstridecstrider.   r   r   r  r  )
r   r   r   r1   r2   rM   sqrtr   r   rx   )r   r   rz   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\   r@   rA   rd   r   r   r   r)      )r;   r   r\   r@   rA   rd   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@   rA   rd   r   rd   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   r   Zplasmar   r'   i)r   r   r   r1   rM   arrayr   masked_lessre   	Normalizer   r   r   r   rR   )r   r   rU   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   r@   r  r  <   )	r   r   r   r1   r   r   r  r   rR   r   r    r    r!   test_surface3d_masked_strides  s    r"  z
text3d.png)r   c                  C   s   t  } | jdd}d}d}d}d}t||||D ].\}}}}	d|||	|f }
||||	|
| q2|jdddd	d	d
 |jddd|jd |dd |dd |	dd |
d |d |d d S )Nr   r   NrU   r&   r4   r;   r;   r   r;   r;   r;   r   rd   r@   r   r   r   rd   r@   r   r   r   r   r@   r   rA   rd   r;   r   z(%d, %d, %d), dir=%sr;   r8   r<   rm   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-   rU   r&   r4   labelr    r    r!   test_text3d  s"    

r0  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 )Nr#  r&  r'  r(  r   r   r   r)   (z, z), dir=)r-   )r   r)  r*  r   r0   r   Zset_position_3d)r   r   r.  r5   r6   r,   r   r-   rU   r&   r4   r   r   r    r    r!   test_text3d_modification  s"    (r2  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   皙?)rp   r   )r1   r   r   r   newaxisappendr   r   r   r   r   r   plot_trisurfr   Zjet	Zn_anglesZn_radiiZradiiZanglesrU   r&   r4   r   r   r    r    r!   test_trisurf3d&  s    $r?  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 )Nr4  r   r5  r6  r   r   Fr7  .r;   r8  r   r   )r;   r   r   r:  )r.   r   )r1   r   r   r   r;  r<  r   r   r   r   r   r   r=  r>  r    r    r!   test_trisurf3d_shaded8  s    $r@  zwireframe3d.pngc                  C   s<   t  } | jdd}td\}}}|j|||ddd d S )Nr   r   rm      r   r   r   r   r   r   rt   plot_wireframery   r    r    r!   test_wireframe3dJ  s    rE  zwireframe3dzerocstride.pngc                  C   s<   t  } | jdd}td\}}}|j|||ddd d S )Nr   r   rm   rA  r   rB  rC  ry   r    r    r!   test_wireframe3dzerocstrideR  s    rF  zwireframe3dzerorstride.pngc                  C   s<   t  } | jdd}td\}}}|j|||ddd d S )Nr   r   rm   r   r)   r  rC  ry   r    r    r!   test_wireframe3dzerorstrideZ  s    rG  c                  C   sf   t  } | jdd}td\}}}tt$ |j|||ddd W d    n1 sX0    Y  d S )Nr   r   rm   r   r  )	r   r   r   r   rt   r   r   
ValueErrorrD  ry   r    r    r!    test_wireframe3dzerostrideraisesb  s
    rI  c                  C   s   t  } | jdd}td\}}}tt$ |j|||ddd W d    n1 sX0    Y  tt$ |j	|||ddd W d    n1 s0    Y  d S )Nr   r   rm   r)   2   )r  r   )r  r   )
r   r   r   r   rt   r   r   rH  rD  r   ry   r    r    r!   test_mixedsamplesraisesj  s    2rK  )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   r+                 $@333333?              @>,p ?)tipmiddletailr   r   r   Tri   pivot	normalize)	r1   Zogridr   r   r   r   r   r   quiver)rU   r&   r4   uvwrT  r   r    r    r!   test_quiver3dt  s    (024rZ  c           	      C   sP   |j dd g  } } } } }}| j dd}|j||||||dddd	 d S )Nr   r   r   rP  TrS  )r   rV  )	r   r   rU   r&   r4   rW  rX  rY  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   r+   rL  rM  rN  rO  皙ٿr   F)r   r   rP  TrS  )r   r   r   r1   r   r   r   r   r   Zmasked_whererV  )r   r   rU   r&   r4   rW  rX  rY  r    r    r!   test_quiver3d_masked  s    (024r]  c                  C   sp   t  } | jdd}td}|| t| |d t	|
 dsNJ | j  t	|
 dslJ d S )Nr   r   r   r   )r6  r   r   r;   r;   r   r   r;   )r   r   r   r   	add_patchr   Zpatch_2d_to_3dr   re   Z
same_colorZget_facecolorrS   rT   )r   r   Zcircler    r    r!   test_patch_modification  s    



ra  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 |
 rJ 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 )Nr^  rm   )r   r   r3  )r   r   r   r6  )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*    








rc  c                  C   s   g dg dg dg dg} t jtdd t|  W d    n1 sJ0    Y  tj| td} t jtdd t|  W d    n1 s0    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   rH  r   Poly3DCollectionr1   r  r   )polyr    r    r!   &test_poly3dcollection_verts_validation  s    (rk  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   rd  re  rf  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   ri  rb  r   r   Zpoly1Zpoly2Zc1Zc2r    r    r!   test_poly3dcollection_closed  s    
rp  c                  C   sv   t g } t|  t| tjs"J |  g ks2J tjtddd\}}|	|  | 
 }t|shJ |j  d S )Nr   r   rF   )r   r   Zpoly_collection_2d_to_3d
isinstanceri  Z	get_pathsr   rP   rQ   
add_artistdo_3d_projectionr1   ZisnanrS   rT   )rj  r   r   Zminzr    r    r!   #test_poly_collection_2d_to_3d_empty  s    

rt  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   rd  re  rf  r%  r$  r\   rl  )r   r   r;   Trm  r   F)r   rn  )r;   r   r   )r   r   r   r1   r  r   r   ri  r   r   r   rb  ro  r    r    r!   test_poly3dcollection_alpha  s    




ru  zadd_collection3d_zs_array.pngc                  C   sD  t dt j dt j d} t ddd}|d d }|t |  }|t |  }t |||gddd}t j|d d |dd  gdd	}t	 }|j
d
d}tddt j }	t|d d d d d df d|	d}
|
t | dt j  |j|
|d d d d df d}|d usJ |dd |dd |dd d S )Nr   r@   rs   r   r   r;   r   r\   r8  r   r   r   twilightrp   r  r,   r   rA   rd   )r1   r   r   r   r   column_stackr   concatenater   r   r   r  r   	set_arraymodrb  rv   rw   rx   r   r4   r#   rU   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sJ |dd |dd |dd d S )Nr   r   rs   r;   r   r8  r   r   rv  rw  rx  r   rA   r   rd   )r1   r   r   r   r   ry  r   rz  r   r   r   r  r   r{  rb  rv   rw   rx   r}  r    r    r!   test_add_collection3d_zs_scalar  s"    "
r  zaxes3d_labelpad.pngc                  C   s   t  } | t| dd}|jjtjd ks0J |jddd |jjdksNJ |	d |
d d	|j_d
|j_t|j D ]\}}|| |d   qd S )NF)Zauto_add_to_figurezaxes.labelpadzX LABELr)   )labelpadzY LABELzZ LABELr(   rq   rA   )r   r   Zadd_axesr   xaxisr  mplr	  r+  r,  r-  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   rR   r   r    r    r!   test_axes3d_rotatedQ  s    r  c                  C   s   t jdddd} t jdddd}t | |\}}t jd}tjdd}|jdddd	d
}t	t
 |||| W d    n1 s0    Y  d S )Nr   r)   rs   )Znum)   rd   rD   r;   r   r   r   )r1   r   rM   r   randnr   r   r   r   r   rH  r   )rU   r&   rz   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  )rs   rs   rs   rd  rs   rn   )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_transformrg   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 ]\}}}|||| q||fS )Nr   )r   rU   r&   r4   )r   r  r0   r   rP   r   Zadd_collectionr   )r  r   argsr   r5   r6   r,   r  r  r  r   r   ZayZazlinesr   ZlinecrU   r&   r   r    r    r!   _test_proj_draw_axes~  s    
r  zproj3d_axes_cube.pngc                  C   s   t  } d }tg dd }tg dd }tg dd }t|||| \}}}t| dd\}}	|	j|||d |	j||d	d t	|||D ]\}
}}|	
|
|| q|	d
d |	d
d d S )N0 1 2 3 0 4 5 6 7 4r  r  r  r  i  r   r*   r#   皙ɿr:  )r  splitr1   r  r   r  r  r   r   r0   r   rv   rw   )r  tsr5   r6   r,   r  r  r  r   r   rU   r&   r   r    r    r!   test_proj_axes_cube  s    r  zproj3d_axes_cube_ortho.pngc                  C   s  t g d} t g d}t g d}t| ||}tdd}t ||}d }t g dd }t g d	d }t g d
d }	t|||	|\}
}}t|dd\}}|j	|
|d| d |j
|
|dd t|
||D ]\}}}|||| q|dd |dd d S )N)   rs   rs   rf  rd  r   r;   r  r  rs   r  r     r   ,  r#   r  i8r  )r1   r  r   r  Zortho_transformationr  r  r  r  r   r   r0   r   rv   rw   )r  r   r  r  ZorthoMr  r  r5   r6   r,   r  r  r  r   r   rU   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 )	Nr_  rd   )r   r;   r   r;   r   r\   r   r   r;   )r   Zrot_xr1   r   rg   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)rs   rC   )rn   rs   )r   r:  )rm   r   r   r   )r   g{Gzt?r   r   )r   r   g      $@r   )r   r   r   r;   )r   Zworld_transformationr1   rg   r  )ZxminZxmaxZyminZymaxZzminZzmaxr  r    r    r!   
test_world  s    r  zproj3d_lines_dists.pngc                  C   s   t jdtddd\} }d}d}||| t||\}}d}d}||| t|||d	 |d	 f}t||t	||f}t|||D ]&\}}}	t
||f|	d	d
}
||
 q|dd |d	d d S )N)r@   rd   r   )r  )rE   rG   )r   r'   )r(   r  )r   r   r(   r'   )rs   r  r'   r  r   )Zfillr   r  r  )r   rP   rQ   r   r0   r   r   Z_line2d_seg_distr1   r  r   r`  rv   rw   )r   r   r5   r6   Zp0Zp1ZdistrU   r&   dr*   r    r    r!   test_lines_dists  s    r  c                  C   s   t jddid\} }|jdddd |ddgddgddg | d	ksNJ |d
 |d |ddgddgddg | dksJ d S )Nr   r   rF   r   r   r:  rU   r&   r4   r;   )r   r;   r   皙?r  g333333?FTr   )r   r;   r   r  r\  g333333@)r   rP   Zmarginsr   Z
get_w_limsZ	autoscaleZset_autoscalez_onr   r    r    r!   test_autoscale  s    

r  r9  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sJ |j	  tj
| d d S )Nr   r   rs   r   r   Zget_autoscaleZ_onZset_ZlimZget_)      r   )r  )r   r   r   r1   r2   r   r   getattrrS   rT   rg   rh   )
r9  r  r   r   rU   r&   Zget_autoscale_onZset_limZget_limZ	post_autor    r    r!   test_unautoscale  s    

r  zaxes3d_ortho.pngc                  C   s"   t  } | jdd}|d d S )Nr   r   ortho)r   r   r   Zset_proj_typer   r    r    r!   test_axes3d_ortho  s    r  zaxes3d_isometric.pngc               	   C   s   ddl m} m} tjtddddd\}}d}| tt||||d	D ]>\}}t	|| 
 |d
 |d  krJ|jt||ddi qJ|jttdtd	 dd |d d S )Nr   )combinationsr   r   r  )r@   r@   r@   )r   Z	proj_typeZ
box_aspectrF   )r   r;   r   r;   r*   rl  r6  r!  r   T)r   r  r   r   rP   rQ   r1   r  listabsr   plot3Dr0   rR   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|| f i | W d    n1 sP0    Y  d S )Nr   r   )r   r   r   r   r   rH  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   rF   )rA   r@   r\   )r   rP   r1   indicesvoxels)selfr   r   rU   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   rF   )rA   rA   r@   r   g      ?g](\@r\   r   )r   r   r   )r   rP   r1   r  r  r   keysr   )r  r   r   rU   r&   r4   r  rX  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   rF   r)   r)   r)   r;   r   r   z0.25rA   Zcyanr)   r  N)r   rP   r1   r  r   Zobject_r  r  r   r   rU   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   rF   r  )r)   r)   r)   r\   r   .r   .r;   .r   r  N)r   rP   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 sJ |
	 D ](\}}|| sJ d
t
|tjsJ qd S )Nr   r   rF   r  r   )r)   r)   r)   r@   )r;   r   r   r   )r   r;   r   r   r  zfaces returned for absent voxel)r   rP   r1   r  r  r  r  typerQ   itemsrq  r   ri  )r  r   r   rU   r&   r4   Zv1Zv2r  r	   rX  Zcoordrj  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   rF   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   )rf   ndimr1   Z	index_exp)rU   Z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   rP   r1   r  r  r   r  r   )r  r   r   r  r#   r$   r%   ZrcgcZbcZspherer	   r    r    r!   test_xyzv  s     	(zTestVoxels.test_xyzc                 C   s\  t d\}}}t d}tjddid\}}t tddfD ]\}|j|fi | |jf d|i| |j||||fi | |j|||fd|i| q>tjt	d	d
$ |j|||||d W d    n1 s0    Y  tjt	d	d
 ||| W d    n1 s0    Y  tt
" |j||||d W d    n1 sN0    Y  d S )N)r\   r@   rA   )r   r\   r@   r   r   rF   rl  )r   filledr  rg  )r  )r  rU   r&   r4   )r1   r  Zonesr   rP   rQ   r  r   r   	TypeErrorAttributeError)r  rU   r&   r4   r  r   r   kwr    r    r!   test_calling_conventions  s    
2,z#TestVoxels.test_calling_conventionsN)__name__
__module____qualname__mpl3d_image_comparisonr  r  r  r  r  r  r  r    r    r    r!   r  6  s   






 r  c            
      C   s
  ddgddgddg  } }}ddgd	d
gddg  }}}t  }|jdd}|| ||}|d }	tj| ||f|	  |	||| tj|||f|	  |		|  |	
| |	j|dd tj| ||f|	  |	jddd tj| |t|f|	  d S )Nr   r;   r   r\   r@   rA   rd   r   r   r   r)   r  r   r   r4   r  )r   r   r   r   r1   rg   rh   Zget_data_3dZset_data_3dZ	set_xdataZ	set_ydataZset_3d_propertiesr=   )
rU   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 | r8J |dd |dd |dd | shJ | stJ | sJ |  | rJ | rJ | rJ d S )Nr   r   rF   r;   r   )	r   rP   Zxaxis_invertedZyaxis_invertedZzaxis_invertedrv   rw   rx   r  r   r    r    r!   test_inverted_cla  s    r  c                  C   s   t  } tt t| }W d    n1 s00    Y  |jddd |jddd |jddd | j  |j	
 D ]}|jjdksxJ qx|j
 D ]}|jjdksJ q|j
 D ]}|jjdksJ qd S )NrU   r8   )r9  r	   r&   r4   )r   r   r   warnsr   r   Ztick_paramsrS   rT   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 ]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g dgD ]\}}||d	 |D ]}|d q||d |D ]}|d q<||d |D ]}|	tjd   q\||d |D ]}|
tjd   q||d |D ]}|tjd   qqd S )Nr@   rA   r   r   rF   g    cAg   @cA)rU   r&   r4   r   r   Zplain)r9  r   r;   )r   r   )r9  Z	scilimitsr   zaxes.formatter.useoffset)r9  Z	useOffsetr\   zaxes.formatter.use_locale)r9  Z	useLocalezaxes.formatter.use_mathtext)r9  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!   ra     rb   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)rP   Zflatrv   r0   Zticklabel_formatr  r	  Zset_scientificZset_powerlimitsZset_useOffsetZset_useLocaleZset_useMathText)	r   r   rX   r   rowr  r  r  Zfmtr    r    r!   test_ticklabel_format  sN    



r  c                 C   s   d}t t dddt dddt ddd\}}}t | } }}t|| fdD ].\}	}
|	jdd}|j|||||||
|d	 qVd S )
NrQ  gr;   r:  r+   )r;   r6  r   r   )ri   rT  )r1   rM   r2   	ones_liker0   r   rV  )r   r   rT  rU   r&   r4   rW  rX  rY  r   ri   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\   rA   r   r      r:  )zuplimszlolimsZ
erroreveryN)
r1   r2   r   r   r   r   r   r   r   errorbar)
r   rU   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\   r@   rA   )r   r   r   r   r   r\   )FTFTT)TFFTFTZpurplezError lines)rU   r&   r4   ZxerrZyerrZzerrZcapsizer  r  ZyuplimsZecolorr/  N)r   r   r   r   Zlegend)r   r   r  r  r    r    r!   test_errorbar3dI  s    r  z
stem3d.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|  qlttj d tjd d}t
|}t|}t|d g d	D ]N\}}|j|||ddd|d\}}	}
|	d|  |jddd |
d qd S )Nr   r\   )r   rd   Tr   r   rE   Zconstrained_layoutrG   r   r  )orientationzorientation=r(   r;   zC4-.ZC1Dr   )ZlinefmtZ	markerfmtZbasefmtr  r   )r   Zmarkeredgewidth)r   rP   r1   r   r   r   r   r0   ZstemZ	set_titler  setZset_linewidth)r   rX   r   rU   r&   r4   r   r-   Z
markerlineZ	stemlinesZbaseliner    r    r!   test_stem3dY  s.    



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 ]B\}
}tt|
| |	d |	d  kr|jt|
|d	d
i qt| | | g}t|d t|d g}|| || || |d |d d S )Nr   )r   r  r   r   r   rs   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   ry  
get_xlim3d
get_ylim3d
get_zlim3dr   r   r)  r*  r   r9  Zset_box_aspect)r   r  r   r   rW  rX  rU   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 sJ d S )Nr   r;   )r@   rA   Tr   r   r  rA   Z
horizontal)r   r  r:  )r   rP   r=  r1   r   r  r
  rS   rT   r   Zget_positionZextents)Z	num_plotsr   rX   r   Zp_triZcbarr    r    r!   test_colorbar_pos  s    



r  c                  C   s   t  } | jddd}| jdd|d}|ddgddgddg |ddgddgddg |g d	 | d
ksxJ | d
ksJ d S )N   r   r      )r   Zsharezr   r;   r   )r  r   r         @)r  r  )r   r   r   r   r  Zget_zlim)r   r   r   r    r    r!   test_shared_axes_retick  s    r  c                  C   s8  dd } t  jdd}|ddd |jj  | |  \}}| |  \}}| |  \}}|	t
|tjddd |t
|tjddd | |  \}}	| |  \}
}| |  \}}|	t|ksJ |t|ksJ |t|ksJ |t|ksJ |
t|ks J |t|ks4J dS )	z1Test mouse panning using the middle mouse button.c                 S   s   | | d }||  }||fS )z+Convert min/max limits to center and range.r   r    )ZdminZdmaxcenterZrange_r    r    r!   convert_lim  s    ztest_pan.<locals>.convert_limr   r   r   )ZbuttonZxdataZydatar;   N)r   r   r   r   rS   rT   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   rA   r;   o   r   r   rr   r   )r*   r   rp   )r1   r  r  r   r   r2   Tr   r   rS   rT   Zchanged)
r   r   rU   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   r/  )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 ]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' qd S )(N   r   r      F)rf  )r   rA   r   )rA   rA   r   )rA   r   r   ZwhiteZblackr;   )r   r   zorder)r   r   )r   r@   r8   r   )r*   r  )r\   r\   )r;   r\   r)   )r   r   )r   r        r   r   r   r   r:   r   )r.   r/   r   r  rA   z--r9   )r   Z	linestyler.   r  r\   r@   ir(   rJ   r  )r   r   r   r  r   ri  rb  r   r   rv   rw   rx   r1   rM   r  r   r   r   r   r   rR   r9  )r   r   r   Zcornersr   ZtriZax3Zax4Zdimrz   r{   r|   ZangleZX2ZY2ZZ2ZX3ZY3ZZ3r#   r  thrU   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   rd      r;   rA   r   )r   r   r   r1   r   r   r   r   r   rS   rT   )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   r(  r)  )r   r   r   rU   )r   r   r$  r%  )r&  r   r   r'  )r   r(  r   r)  )r;   r   r;   c                 C   s   d}t jddddd}|jdd| d |jj  | }tjj	|||d t
| | | gD ]J\}}|| }	|j }
tjj	|	|
|d || }| }tj|| qfdS )	a  
    Test the actual projection, axis lines and ticks matches expected values.

    Parameters
    ----------
    vertical_axis : str
        Axis to align vertically.
    proj_expected : ndarray
        Expected values from ax.get_proj().
    axis_lines_expected : tuple of arrays
        Edgepoints of the axis line. Expected values retrieved according
        to ``ax.get_[xyz]axis().line.get_data()``.
    tickdirs_expected : list of int
        indexes indicating which axis to create a tick line along.
    g>r;   r   r   r   )rK   rL   vertical_axis)rtolN)r   ZsubplotrR   r   rS   rT   Zget_projr1   rg   r  r  Z	get_xaxisZ	get_yaxisZ	get_zaxisr~  get_dataZ_get_tickdirrh   )r*  Zproj_expectedZaxis_lines_expectedZtickdirs_expectedr+  r   Zproj_actualr_   r9  Zaxis_line_expectedZaxis_line_actualZtickdir_expectedZtickdir_actualr    r    r!   test_view_init_vertical_axisZ  s    D"

r-  c                  C   sx   G dd dt j} t }|jddd}|  }|| d}tjt|d |j	
  W d   n1 sj0    Y  dS )	zv
    Test that an external artist with an old-style calling convention raises
    a suitable deprecation warning.
    c                   @   s   e Zd Zdd Zdd ZdS )zOtest_do_3d_projection_renderer_deprecation_warn_on_argument.<locals>.DummyPatchc                 S   s   dS Nr   r    r  Zrendererr    r    r!   rs    s    z`test_do_3d_projection_renderer_deprecation_warn_on_argument.<locals>.DummyPatch.do_3d_projectionc                 S   s   d S r   r    r/  r    r    r!   rT     s    zTtest_do_3d_projection_renderer_deprecation_warn_on_argument.<locals>.DummyPatch.drawNr  r  r  rs  rT   r    r    r    r!   
DummyPatch  s   r1  r  r   r   z?The 'renderer' parameter of do_3d_projection\(\) was deprecatedrg  N)r   Patch3Dr   r   r   rr  r   r  r   rS   rT   )r1  r   r   artistrh  r    r    r!   ;test_do_3d_projection_renderer_deprecation_warn_on_argument  s    
r4  c                  C   sF   G dd dt j} t }|jddd}|  }|| |j  dS )z
    Test that an external artist with a calling convention compatible with
    both v3.3 and v3.4 does not raise a deprecation warning.
    c                   @   s   e Zd ZdddZdd ZdS )zZtest_do_3d_projection_renderer_deprecation_nowarn_on_optional_argument.<locals>.DummyPatchNc                 S   s   dS r.  r    r/  r    r    r!   rs    s    zktest_do_3d_projection_renderer_deprecation_nowarn_on_optional_argument.<locals>.DummyPatch.do_3d_projectionc                 S   s   d S r   r    r/  r    r    r!   rT     s    z_test_do_3d_projection_renderer_deprecation_nowarn_on_optional_argument.<locals>.DummyPatch.draw)Nr0  r    r    r    r!   r1    s   
r1  r  r   r   Nr   r2  r   r   r   rr  rS   rT   r1  r   r   r3  r    r    r!   Ftest_do_3d_projection_renderer_deprecation_nowarn_on_optional_argument  s    
r7  c                  C   sF   G dd dt j} t }|jddd}|  }|| |j  dS )z
    Test that an external artist with a calling convention compatible with
    only v3.4 does not raise a deprecation warning.
    c                   @   s   e Zd Zdd Zdd ZdS )zTtest_do_3d_projection_renderer_deprecation_nowarn_on_no_argument.<locals>.DummyPatchc                 S   s   dS r.  r    )r  r    r    r!   rs    s    zetest_do_3d_projection_renderer_deprecation_nowarn_on_no_argument.<locals>.DummyPatch.do_3d_projectionc                 S   s   d S r   r    r/  r    r    r!   rT     s    zYtest_do_3d_projection_renderer_deprecation_nowarn_on_no_argument.<locals>.DummyPatch.drawNr0  r    r    r    r!   r1    s   r1  r  r   r   Nr5  r6  r    r    r!   @test_do_3d_projection_renderer_deprecation_nowarn_on_no_argument  s    
r8  )r;   )	functoolsr   platformr   Zmpl_toolkits.mplot3dr   r   r   r   Z
matplotlibr  Zmatplotlib.backend_basesr   Zmatplotlib.cbookr   r   r	   re   Zmatplotlib.testing.decoratorsr
   r   Zmatplotlib.testing.widgetsr   Zmatplotlib.collectionsr   r   Zmatplotlib.patchesr   Zmatplotlib.pyplotZpyplotr   Znumpyr1   partialr  r"   r7   r?   rY   rZ   rk   r}   r   r   ZmarkZparametrizer   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r"  r0  r2  r?  r@  rE  rF  rG  rI  rK  rZ  r[  r]  ra  rc  rk  rp  rt  ru  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#  r-  r4  r7  r8  r    r    r    r!   <module>   s  




















6



	















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

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