a
    
df                    @   s  d dl Z d dlZd dlZd dlmZmZmZmZ d dlZ	d dl
mZmZmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZ d dlmZmZ d d	lmZmZ d d
lmZ d dl m!Z! d dl"m#Z$ d dl%Z&e j'edddZ(dd Z)edgddd Z*e(dgdddd Z+e(dgdddd Z,dd Z-e(dgd d! Z.e(d"gd#d$ Z/d%d& Z0e(d'gd(d) Z1e(d*gd+d, Z2d-d. Z3e(d/gd0d1 Z4e(d2gd3d4 Z5e(d5gd6d7 Z6e(d8gd9d: Z7ej89d;d<g d=gd>g d?gd@g dAggedgddBdC Z:e(dDgdEdFdGdH Z;dIdJ Z<e(dKgdLdM Z=edgddNdO Z>dPdQ Z?e(dRgdSdT Z@edgddUdV ZAe(dWgdXdY ZBe(dZgd[d\ ZCe(d]gd^d_ ZDedgdd`da ZEedgddbdc ZFej89ddddgedgddedf ZGej89dgdhdigedgddjdk ZHedgddldm ZIe(dngdodFdpdq ZJe(drgdsdt ZKe(dugdvdw ZLe(dxgdydz ZMedgdd{d| ZNe(d}gd~d ZOe(dgdddd ZPedgddd ZQe(dgddFdd ZRe(dgddFdd ZSe(dgdd ZTe(dgdd ZUe(dgdd ZVdd ZWdd ZXe(g ddd ZYedgddd ZZe(dgdd Z[dd Z\edgddd Z]dd Z^e(dgdd Z_dd Z`e(dgdd Zae(dgdd Zbe(dgdd Zce(dgdddd Zde(dgdddd Zee(dgdddd Zfdd Zgdd ZhddĄ ZidsddǄZje(dgddʄ Zke(dgdd̈́ Zlddτ Zmddф Zne(dgddԄ Zoddք Zpdd؄ Zqej89ddڡej89ddܡddބ Zrdd Zse(dgdddd Zte(dgdddd Zue(dgdd Zvej89de&jwe&jxgej89dg ddd ZyG dd dZzdd Z{edgddd Z|dd Z}dd Z~edgddd Zedgddd Zedgddd d Ze(dgdd Ze(dgdd Zedgdd	d
dd Zedgdddd Zdd Zdd Zdd Zdd Zdd Zej89ddejddfdejddfdejdd fdejdd!fd"ejdd#fd"ejdd$fd"ejdd%fgd&d' Ze	jdedgdd(d) Zd*d+ Zed,gddgd-d.d/d0 Zd1d2 Zd3d4 Zd5d6 Zej89d7ed8i d9fed:i d9fed;i d9fee dd<id9fee dd<id9fee d=d<id9fed>ddid?fed>ddddڜd?fed>ddŐd@d?fedAi dBff
dCdD ZedgddEdF ZdGdH ZedgddIdJ ZedKgdddLdMdN ZdOdP ZdQdR Zej89dSd=g dTg dUg dVg dWgdXdYgdZd[gfd\dYgd[d[gfd\d\gd[d]gfgg d^fdg d_g d`g dVg dagd\dYgd]d]gfdYdYgd[d]gfdbd\gdcd]gfgg ddfdg deg dfg dVg dggd\d\gd]d[gfdYdXgd]dcgfdYd\gd]d]gfgg dhfgdidj ZedkgdddLdldm ZedngdddLdodp Zedgddqdr ZdS (t      N)Axes3Daxes3dproj3dart3d)MouseButton
MouseEventNavigationToolbar2)cm)colorspatches)image_comparisoncheck_figures_equal)
mock_event)LineCollectionPolyCollection)Circle	PathPatch)Path)TextTdefault)remove_textstylec              
   C   s   ddg}t ttt |||d}|D ]P\}}tt|| |d |d  kr,| jt	|t| |t|   q,d S )Nr         )
	itertoolscombinationsnparraylistproductsumabsplot3Dzip)axscalerZptsstartend r)   o/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/mpl_toolkits/mplot3d/tests/test_axes3d.pyplot_cuboid   s
     $r+   Zpng)
extensionsc                 C   s    | j tddd}|d d S )N3d
projection
subplot_kwF)subplotsdictZset_visiblefig_testfig_refr$   r)   r)   r*   test_invisible_axes$   s    r7   zaspects.pngF)r   c                  C   s   d} t jddddid\}}| dd D ]}t|g d	d
 q,t|d d g dd
 t| D ]2\}}|| |  |d |j| | dd qf|d d d d S )N)autoequalequalxyequalyzequalxzr9   r      r/   r-   r0   r   )r   r      r%   r   r   r   r   r=      r?   ZdatalimZ
adjustablezequal (cube))pltr2   flattenr+   	enumerate	set_titleset_box_aspect
set_aspect)aspects_axsr$   ir)   r)   r*   test_aspects*   s    
rO   zaspects_adjust_box.pngc                  C   sh   d} t jdt| ddidd\}}t|D ]8\}}t|g dd || |  |j| | d	d
 q*d S )N)r8   r9   r:   r;   r<   r   r/   r-   )   r=   )r1   figsize)rC   r=   r?   r@   ZboxrD   )rE   r2   lenrG   r+   rH   rJ   )rK   figrM   rN   r$   r)   r)   r*   test_aspects_adjust_box;   s    
rT   c                  C   sZ   t  } | jdd}|d |d |d |d |d t|dksVJ d S )	Nr-   r.   labeltitlexyzzV<Axes3D: label='label', title={'center': 'title'}, xlabel='x', ylabel='y', zlabel='z'>)	rE   figureadd_subplotZ	set_labelrH   
set_xlabel
set_ylabel
set_zlabelreprrS   r$   r)   r)   r*   test_axes3d_reprG   s    




ra   zaxes3d_primary_views.pngc                  C   s   g d} t jddddid\}}t|jD ]X\}}|d |d |d	 |d
 |j| | d | | d | | d d q*t 	  d S )N))Z   r   )r   rc   r   r   r   r   )rc   rb   r   )r   rb   r   )r      r   r   r=   r/   r-   r0   rW   rX   rY   orthor   r   elevazimroll)
rE   r2   rG   flatr\   r]   r^   set_proj_type	view_inittight_layout)viewsrS   rM   rN   r$   r)   r)   r*   test_axes3d_primary_viewsT   s    



*rp   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brX   )      
   r   rt   cr   rX   Zedge皙?)zszdirZaligncoloralpha)rE   rZ   r[   r#   r   arangerR   bar)rS   r$   rv   rY   xsyscsr)   r)   r*   
test_bar3di   s    

r   c               
   C   s\   t  } | jdd}dD ]>}tt|}t|}t|}|j|||ddd|d qd S )Nr-   r.   )redgreenblueZyellowr   rz   )rE   rZ   r[   r   r|   rR   
zeros_likebar3d)rS   r$   rv   r~   r   rx   r)   r)   r*   test_bar3d_colorsu   s    

r   zbar3d_shaded.pngc               
   C   s   t d} t d}t | |\}}| |  }}|| d }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 q|j  d S )NrC   r?   r   ))rs   ir   )rs   rs   rs   )rs   rc   ),  r   r   rQ   r-   r.   r0   r   Tshaderg   )r   r|   meshgridravelrE   rZ   	figaspectrR   r2   r3   r#   r   rm   canvasdraw)rW   rX   x2dy2drY   ro   rS   rM   r$   rh   ri   rj   r)   r)   r*   test_bar3d_shaded   s    

r   zbar3d_notshaded.pngc               	   C   s|   t  } | jdd}td}td}t||\}}| |  }}|| }|j|||d dd|dd | j	  d S )	Nr-   r.   rC   r?   r   r   Fr   )
rE   rZ   r[   r   r|   r   r   r   r   r   )rS   r$   rW   rX   r   r   rY   r)   r)   r*   test_bar3d_notshaded   s    

r   c            
         s   t  } | jddddd}tjddd}d\}}||  tt|t|\}}| }| }|| } fdd	t	 D }|j
||ddd||d
|d	}	tj||	jdd d d d S )Nr   r-   r.   r   rb   )ZazdegZaltdeg)r=   rC   c                    s   g | ]}t |  qS r)   )r	   coolwarm).0rN   arear)   r*   
<listcomp>       z*test_bar3d_lightsource.<locals>.<listcomp>T)	rW   rX   rY   ZdxZdydzrz   r   Zlightsource   rC   )rE   rZ   r[   mcolorsZLightSourcer   r   r|   r   ranger   testingZassert_array_max_ulpZ_facecolor3d)
rS   r$   ZlslengthwidthrW   rX   r   rz   Z
collectionr)   r   r*   test_bar3d_lightsource   s    
r   zcontour3d.pngc                  C   s   t  } | jdd}td\}}}|j|||ddtjd |j|||ddtjd |j|||d	d
tjd |dd
 |	dd
 |
dd d S Nr-   r.   皙?rY   )ry   offsetcmaprW   rX   (   d   rE   rZ   r[   r   get_test_datacontourr	   r   set_xlimset_ylimset_zlimrS   r$   XYZr)   r)   r*   test_contour3d   s    r   zcontour3d_extend3d.pngc               	   C   sf   t  } | jdd}td\}}}|j|||ddtjdd |dd	 |	d
d |
dd d S )Nr-   r.   r   rY   r   T)ry   r   r   Zextend3dr   rs   r   P   r   r   r)   r)   r*   test_contour3d_extend3d   s    r   zcontourf3d.pngc                  C   s   t  } | jdd}td\}}}|j|||ddtjd |j|||ddtjd |j|||d	d
tjd |dd
 |	dd
 |
dd d S r   )rE   rZ   r[   r   r   contourfr	   r   r   r   r   r   r)   r)   r*   test_contourf3d   s    r   zcontourf3d_fill.pngc                  C   s   t  } | jdd}ttdddtddd\}}|dd}d|d d dd d df< |j|||dd	dgtj	d
 |
dd |dd |dd d S )Nr-   r.   r         ?r   皙?r?   皙)r   levelsr   r>   r   )rE   rZ   r[   r   r   r|   clipr   r	   r   r   r   r   r   r)   r)   r*   test_contourf3d_fill   s    $r   zextend, levelsboth)r   rC   r   min)r   rC   r      max)r   r   rC   r   c                 C   s   t t dddt ddd\}}|d |d  }tjd  }||d ||d dd|d	}|jd
d}	|	j	|||fd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vmaxr   r-   r.   r   )r   r   rC   r   r   extendru   )r   r   r|   mpl	colormapscopyZ	set_underZset_overr[   r   r   r   r   )r5   r6   r   r   r   r   r   r   kwargsax_refax_testr$   r)   r)   r*   test_contourf3d_extend   s    $r   ztricontour.png{Gz?)tolc                  C   s   t  } tjd tjdd }tjdd }|d |d   }| jddddd}|||| | jddddd}|||| d S )Ni!N,        ?r   r   r-   r.   )	rE   rZ   r   randomseedZrandr[   Z
tricontourZtricontourf)rS   rW   rX   rY   r$   r)   r)   r*   test_tricontour  s    r   c                  C   sb   t  } | jdd}d\}}tdd|}tdd|}tjdd||g}||||dg d S )	Nr-   r.   )rs   rt   r   ru   r   r   r   )rE   rZ   r[   r   linspacer   randintr   )rS   r$   ZnxnyrW   rX   rY   r)   r)   r*   test_contour3d_1d_input  s    r   zlines3d.pngc                  C   sv   t  } | jdd}tdtj dtj d}tddd}|d d }|t| }|t| }|||| d S )	Nr-   r.   rC   r   r   r   r   )	rE   rZ   r[   r   r   pisincosplot)rS   r$   thetarY   r&   rW   rX   r)   r)   r*   test_lines3d'  s    r   c                 C   s<   | j dd}|dgdgd |j dd}|ddd d S )Nr-   r.   r   or[   r   r5   r6   ax1ax2r)   r)   r*   test_plot_scalar3  s    r   c                  C   s~  t jtdd tdg g  W d    n1 s20    Y  t jtdd tg dg  W d    n1 sn0    Y  t jtdd tg g d W d    n1 s0    Y  tg g g } t jtdd | dg g  W d    n1 s0    Y  t jtdd | g dg  W d    n1 s20    Y  t jtdd | g g d W d    n1 sp0    Y  d S )Nz	x must bematchr   z	y must bez	z must be)pytestraisesRuntimeErrorr   ZLine3Dset_data_3d)liner)   r)   r*   test_invalid_line_data;  s    ,,,,.r   zmixedsubplot.pngc            	   	   C   s   dd } t ddd}t ddd}tjtdd}|d	d
d
}|j|| |d|| |ddd |d |jd	d
d	dd}t t dddt ddd\}}t 	||}t 
|}|j|||ddddd |dd
 d S )Nc                 S   s    t dt j |  t |   S )Nr   )r   r   r   exp)tr)   r)   r*   fN  s    ztest_mixedsubplots.<locals>.f              @r   r          @r   r   r   Zbozk--r   )markerfacecolorTr-   r.   r?   r   r   r   F)rcountccount	linewidthantialiasedr>   )r   r|   rE   rZ   r   r[   r   gridr   hypotr   plot_surface
set_zlim3d)	r   t1t2rS   r$   r   r   Rr   r)   r)   r*   test_mixedsubplotsL  s     
$
r
  c                 C   sP   | j dd}|jddddd |   |j dd}|  |jddddd d S )Nr-   r.   r   zsome strings)r[   textrn   r   r)   r)   r*   test_tight_layout_textd  s    r  zscatter3d.pngc                  C   s   t  } | jdd}|jtdtdtdddd tdd } }}|j|||dd	d d
|d< |jg g g ddd d S )Nr-   r.   ru   r&   r   )rv   markerrt   rr   ^r   r>   r   rE   rZ   r[   scatterr   r|   rS   r$   rW   rX   rY   r)   r)   r*   test_scatter3dq  s    r  zscatter3d_color.pngc                  C   s   t  } | jdd}|jtdtdtddddd |jtdtdtddddd |jtddtddtddd	d
d d S )Nr-   r.   ru   r&   noner   )	facecolor	edgecolorr  rt   rr   r  )rz   r  r  r`   r)   r)   r*   test_scatter3d_color~  s    "r  zscatter3d_linewidth.pngc                  C   sD   t  } | jdd}|jtdtdtddtdd d S )Nr-   r.   ru   r   )r  r  r  r`   r)   r)   r*   test_scatter3d_linewidth  s
    
r  c                 C   s|   |j dd}|jtdtdtddd}|td | j dd}|jtdtdtddtdd d S )Nr-   r.   ru   r   r  )r  
linewidths)r[   r  r   r|   set_linewidthsr6   r5   r   rv   r   r)   r)   r*   %test_scatter3d_linewidth_modification  s    r  c                 C   s   |j dd}|jtdtdtddd}|d |d |dd	gd
  | 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.   ru   r   r  C1C2333333?ffffff?r?   FK   r=   )r  r  r  r{   
depthshader  r  )r[   r  r   r|   set_facecolorset_edgecolor	set_alphaget_depthshadeset_depthshadeZ	set_sizesfullr  r  r)   r)   r*   test_scatter3d_modification  s"    



r+  r$  c                 C   s2  t jddddf \}}t |j|j}t |jd}d|ddddddf< d|ddddddf< t |jd}d	|dd
dd
f< d|ddddf< d|ddddf< t |jd}d|dd
dd
f< d|d
ddd
f< d|d
dd
df< t |jd}	d
|	ddddddf< d
|	ddddddf< dd |||||||	fD \}}}}}}}	| jdd}
dd ||||	fD }tj	| D ]p\}}}}||k||kB ||kB |	|kB }t j
j||td}t |t|j }|
j|||||||d|d	 q|jdd}|j|||||||	d|d	 dS )z1Test that marker properties are correctly sorted.Nru      r   r   r   r   C0r  r?   r   r   rC   ZC3ZC4ZC5ZC6	   ZC7c                 S   s   g | ]}|  qS r)   )rF   r   ar)   r)   r*   r     s   z*test_scatter3d_sorting.<locals>.<listcomp>r-   r.   c                 s   s   | ]}t |V  qd S )N)r   uniquer/  r)   r)   r*   	<genexpr>  r   z)test_scatter3d_sorting.<locals>.<genexpr>Zdtype)r  fceclwr{   r$  )r   mgridr|   sizereshapeshaper*  r[   r   r   maZmasked_arrayfloatrepeatr    maskr  )r6   r5   r$  rX   rW   rY   sizes
facecolors
edgecolorsr  r   Zsetsr  r4  r5  r6  Zsubsetr   r)   r)   r*   test_scatter3d_sorting  sN    
rB  ri      c              	   C   s   ddg}ddg}ddg}ddg}| j dd}|j|||d|d	 |jd|dd
 |j dd}|j|ddd |ddd |ddd d|ddd d	 |jd|dd
 dS )z
    Test that the draw order does not depend on the data point order.

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

    If we rotate *azim* by 180 degrees and exchange the colors, the plot
    plot should look the same again.
    rD  r>   r   r   rr   rX   r-   r.   rE  rF  rg   Nre   )r[   set_axis_offr  rm   rG  r)   r)   r*   #test_marker_draw_order_view_rotated  s    rJ  zplot_3d_from_2d.pnggQ?c                  C   sT   t  } | jdd}tdd}tdd}|j||ddd |j||ddd d S )	Nr-   r.   r   r?   ru   rW   rx   ry   rX   )rE   rZ   r[   r   r|   r   )rS   r$   r~   r   r)   r)   r*   test_plot_3d_from_2d   s    rL  zsurface3d.pngc               
   C   s   dt jd< t  } | jdd}tddd}tddd}t||\}}t||}t|}|j	|||ddt
jd	dd
}|dd | j|ddd d S )NFzpcolormesh.snapr-   r.   r   r?   r   r   r   )r   r   r   r6  r  )\()\(?r   )shrinkaspect)rE   rcParamsrZ   r[   r   r|   r   r  r   r  r	   r   r   colorbar)rS   r$   r   r   r	  r   Zsurfr)   r)   r*   test_surface3d*  s    

rS  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   r?   r   r   )r   r   r   r   F)rstridecstriderz   r6  r  rM  rN  )
rE   rZ   r[   r   r|   r   sqrtr   r  r   )rS   r$   r   r   r	  r   r)   r)   r*   test_surface3d_shaded<  s    

rW  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jd ||}|j||||d |ddd d S )Nr-   r.   )r   r   r=   rC   r?   r   r   r   r.  ru   rP   )r   r   r=   rC   r?   r   r   r   )r>   r   r   r   r   r   r   r   r   r   r   )r>   r   r   r=   rC   rC   rC   r=   r   r   r   )r>         rC   r?   r   r   r   r?   rC   r=   rX  )r>   rX  r   r   rP      rP   r   r   rX  rX  )r>   rX  r   r.  ru      ru   r.  ru   r   rX  )r>   rX  rX  rY  rZ  rt   rZ  rY  rP   rX  rX  )r>   rX  rX  rX        r[  rt      rX  rX  )r>   rX  rX  rX  rX        r,  rX  rX  rX  r   )r   r   Zplasmar@  rs   r   )rE   rZ   r[   r   r   r   r;  masked_lessr   	Normalizer   r   r   r   r  rm   )rS   r$   rW   rX   ZmatrixrY   normr
   r)   r)   r*   test_surface3d_maskedJ  s*    rd  c                 C   s`   t t dt d\}}|| }| jdd}|j|||d d |jdd}|||| d S )Nr?   r-   r.   r`  )r   r   r|   r[   r  )r5   r6   rW   rX   rY   r   r   r)   r)   r*   test_plot_surface_None_arge  s    re  zsurface3d_masked_strides.pngc                  C   sj   t  } | jdd}tjddddddf \}}tj|| d}|j|||ddd |d	d
d d S )Nr-   r.   igffffff@r   r   rC   rT  rU  <   r   )	rE   rZ   r[   r   r7  r;  ra  r  rm   r  r)   r)   r*   test_surface3d_masked_strideso  s    ri  z
text3d.pngc                  C   s   t  } | jdd}d}d}d}d}t||||D ].\}}}}	d|||	|f }
||||	|
| q2|jdddd	d	d
 |jddd|jd |dd |dd |	dd |
d |d |d d S )Nr-   r.   NrW   rX   rY   r   r   r   rA   r   r   rC   r.  r   r   r   rC   r   r   r   r   rC   r   r?   r   r   r   z(%d, %d, %d), dir=%sr   r   r   r   gffffff?z2D Text)	transformr   ru   zX axiszY axiszZ axis)rE   rZ   r[   r#   r  Ztext2DZ	transAxes
set_xlim3d
set_ylim3dr  r\   r]   r^   )rS   r$   zdirsr~   r   rx   ry   rW   rX   rY   rU   r)   r)   r*   test_text3d{  s"    

rs  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 )Nrj  rl  rm  rn  r-   r.   r   ru   (z, z), dir=)ry   )r[   rp  rq  r  r#   r  Zset_position_3d)r6   r5   rr  r~   r   rx   r   ry   rW   rX   rY   r   r   r)   r)   r*   test_text3d_modification  s"    (ru  ztrisurf3d.pnggZd;?c            	      C   s   d} d}t dd|}t jddt j | dd}t j|d	t jf |d
d}|d d d
d df  t j|  7  < t d|t |  }t d|t |  }t | | }t	
 }|jdd}|j|||tjdd d S )N$   r         ?      ?r   r   FZendpoint.r   axisr-   r.   皙?)r   r  )r   r   r   r=  newaxisappendr   rF   r   rE   rZ   r[   plot_trisurfr	   Zjet	Zn_anglesZn_radiiZradiiZanglesrW   rX   rY   rS   r$   r)   r)   r*   test_trisurf3d  s    $r  ztrisurf3d_shaded.pngQ?c            	      C   s   d} d}t dd|}t jddt j | dd}t j|d	t jf |d
d}|d d d
d df  t j|  7  < t d|t |  }t d|t |  }t | | }t	
 }|jdd}|j|||g ddd d S )Nrv  r   rw  rx  r   r   Fry  .r   rz  r-   r.   )r   r   r   r|  )rz   r  )r   r   r   r=  r}  r~  r   rF   r   rE   rZ   r[   r  r  r)   r)   r*   test_trisurf3d_shaded  s    $r  zwireframe3d.pngc                  C   s<   t  } | jdd}td\}}}|j|||ddd d S )Nr-   r.   r      r   r   rE   rZ   r[   r   r   plot_wireframer   r)   r)   r*   test_wireframe3d  s    r  zwireframe3dzerocstride.pngc                  C   s<   t  } | jdd}td\}}}|j|||ddd d S )Nr-   r.   r   r  r   r  r  r   r)   r)   r*   test_wireframe3dzerocstride  s    r  zwireframe3dzerorstride.pngc                  C   s<   t  } | jdd}td\}}}|j|||ddd d S )Nr-   r.   r   r   ru   rf  r  r   r)   r)   r*   test_wireframe3dzerorstride  s    r  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.   r   r   rf  )	rE   rZ   r[   r   r   r   r   
ValueErrorr  r   r)   r)   r*    test_wireframe3dzerostrideraises  s
    r  c                  C   s   t  } | jdd}td\}}}tt$ |j|||ddd W d    n1 sX0    Y  tt$ |j	|||ddd W d    n1 s0    Y  d S )Nr-   r.   r   ru   2   )rT  r   )rU  r   )
rE   rZ   r[   r   r   r   r   r  r  r  r   r)   r)   r*   test_mixedsamplesraises  s    2r  )zquiver3d.pngzquiver3d_pivot_middle.pngzquiver3d_pivot_tail.pngc                  C   s   t jdddddddddf \} }}t t j|  t t j|  t t j|  }t t j|   t t j|  t t j|  }dt t j|   t t j|  t t j|  }dD ]0}t jdd	}|j| |||||d
|dd	 qd S )Nr>   rw                 $@333333?              @>,p ?)tipmiddletailr-   r.   r   Tr   pivot	normalize)	r   ogridr   r   r   rE   rZ   r[   quiver)rW   rX   rY   uvwr  r$   r)   r)   r*   test_quiver3d  s    (024r  c           	      C   sP   |j dd g  } } } } }}| j dd}|j||||||dddd	 d S )Nr-   r.   r   r  Tr  )r[   r  )	r5   r6   rW   rX   rY   r  r  r  r$   r)   r)   r*   test_quiver3d_empty  s    r  zquiver3d_masked.pngc                  C   s.  t  } | jdd}tjdddddddddf \}}}ttj| ttj|  ttj|  }ttj|  ttj|  ttj|  }dttj|  ttj|  ttj|  }tjj	d	|k |d
k @ |dd}tjj	d
|k |dk @ |dd}|j
||||||d
ddd	 d S )Nr-   r.   r>   rw   r  r  r  r  皙ٿr   F)r   r"  r  Tr  )rE   rZ   r[   r   r7  r   r   r   r;  Zmasked_wherer  )rS   r$   rW   rX   rY   r  r  r  r)   r)   r*   test_quiver3d_masked  s    (024r  c                  C   sp   t  } | jdd}td}|| t| |d t	|
 dsNJ | j  t	|
 dslJ d S )Nr-   r.   r   r   )rx  r   r   r   r   r   r   r   )rE   rZ   r[   r   	add_patchr   Zpatch_2d_to_3dr%  r   Z
same_colorget_facecolorr   r   )rS   r$   Zcircler)   r)   r*   test_patch_modification   s    



r  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  r   )r   r   r  )r   r   r   rx  )r   r   r   r   r=   )r  r-   r.   r   r"  F)r  r  r  r{   r$  )r   r   r   r   ZPatch3DCollectionr[   add_collection3dr&  r%  r'  r(  r)  )r5   r6   Zpatch1Zpatch2r@  rv   r   r   r)   r)   r*   "test_patch_collection_modification-  s*    








r  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   rd   zlist of \(N, 3\) array-liker   r3  )r   r   r  r   Poly3DCollectionr   r   r<  )polyr)   r)   r*   &test_poly3dcollection_verts_validationI  s    (r  zpoly3dcollection_closed.pngc                  C   s   t  } | jdd}t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.   r  r  rd   rA   rk  r=   k)r   r   r   r   Tr  r  r  closed)r   r   r   r   F)	rE   rZ   r[   r   r   r<  r   r  r  rS   r$   Zpoly1Zpoly2Zc1c2r)   r)   r*   test_poly3dcollection_closedS  s    
r  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.   r0   )r   r   Zpoly_collection_2d_to_3d
isinstancer  	get_pathsrE   r2   r3   
add_artistZdo_3d_projectionr   isnanr   r   )r  rS   r$   Zminzr)   r)   r*   #test_poly_collection_2d_to_3d_emptyb  s    

r  zpoly3dcollection_alpha.pngc                  C   s   t  } | jdd}t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.   r  r  rd   rA   rk  r=   r  r   r   r   Tr  r   F)r  r  )r   r   r   )rE   rZ   r[   r   r   r<  r   r  r'  r%  r&  r  r  r)   r)   r*   test_poly3dcollection_alphaq  s    




r  zadd_collection3d_zs_array.pngc                  C   sD  t dt j dt j d} t ddd}|d d }|t |  }|t |  }t |||gddd}t j|d d |dd  gdd	}t	 }|j
d
d}tddt j }	t|d d d d d df d|	d}
|
t | dt j  |j|
|d d d d df d}|d usJ |dd |dd |dd d S )Nr   rC   r   r   r   r   r>   r=   rz  r-   r.   r   twilightr   rc  rx   r   r?   r   )r   r   r   r   r   column_stackr9  concatenaterE   rZ   r[   rb  r   	set_arraymodr  r   r   r   r   rY   r&   rW   rX   ZpointssegmentsrS   r$   rc  lcr   r)   r)   r*   test_add_collection3d_zs_array  s"    "$ r  zadd_collection3d_zs_scalar.pngc                  C   s   t ddt j d} d}|d d }|t |  }|t |  }t ||gddd}t j|d d |dd  gdd}t	 }|j
dd}tddt j }	t|d	|	d
}
|
|  |j|
|d}|d usJ |dd |dd |dd d S )Nr   r   r   r   r>   rz  r-   r.   r  r  r  r   r?   r   r   )r   r   r   r   r   r  r9  r  rE   rZ   r[   rb  r   r  r  r   r   r   r  r)   r)   r*   test_add_collection3d_zs_scalar  s"    "
r  zaxes3d_labelpad.pngc                  C   s   t  } | t| }|jjtjd ks,J |jddd |jjdksJJ |	d |j
ddd |jjdksrJ | dksJ d|j_d|j_t|j D ]\}}|| |d	   qd S )
Nzaxes.labelpadzX LABELru   )labelpadzY LABELzZ LABELrt   r   r?   )rE   rZ   Zadd_axesr   xaxisr  r   rQ  r\   r]   r^   zaxisZ
get_zlabelyaxisrG   get_major_ticksZset_padZget_pad)rS   r$   rN   tickr)   r)   r*   test_axes3d_labelpad  s    
r  zaxes3d_cla.pngc                  C   s.   t  } | jddddd}|  |  d S )Nr   r-   r.   )rE   rZ   r[   rI  clar`   r)   r)   r*   test_axes3d_cla  s    r  zaxes3d_rotated.pngc                  C   s,   t  } | jddddd}|ddd d S )Nr   r-   r.   rb   -   r   )rE   rZ   r[   rm   r`   r)   r)   r*   test_axes3d_rotated  s    r  c                  C   s   t jdddd} t jdddd}t | |\}}t jd}tjdd}|jdddd	d
}t	t
 |||| W d    n1 s0    Y  d S )Nr   ru   r   )num)   r   r   r   r   r-   r.   )r   r   r   r   randnrE   rZ   r[   r   r   r  r  )rW   rX   r   r   rY   rS   r$   r)   r)   r*   test_plotsurface_1d_raises  s    r  c            
      C   sr   t g d} t g d}t g d}d}t| |||\}}}t|||| }tddd}t ||}	|	S )N)r   ii  )r   r   r   r  r   r   r   r   )r   r   r   
_view_axes_view_transformation_uvwZpersp_transformationdot)
Er	  Vrj   r  r  r  viewMZperspMMr)   r)   r*   _test_proj_make_M  s    r  c            
      C   s   t  } t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  r   r   r   proj_transformZinv_transformr   Zassert_almost_equal)
r  r~   r   rx   txstystzsZixsZiysZizsr)   r)   r*   test_proj_transform  s    r  r   c                 O   s   d|ddg}dd|dg}ddd|g}t |||| \}}}	t||\}
}}}|
|f|
|f|
|fg}tj|i |\}}t|}|| t||g dD ]\}}}|||| q||fS )Nr   )r   rW   rX   rY   )r   r  r#   rE   r2   r   Zadd_collectionr  )r  r  argsr   r~   r   rx   r  r  r  r   r$   ZayazlinesrS   ZlinecrW   rX   r   r)   r)   r*   _test_proj_draw_axes  s    
r  zproj3d_axes_cube.pngc                  C   s   t  } d }t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  rv   r&   皙ɿr|  )r  splitr   r   r   r  r  r  r   r#   r  r   r   )r  tsr~   r   rx   r  r  r  rS   r$   rW   rX   r   r)   r)   r*   test_proj_axes_cube  s    r  zproj3d_axes_cube_ortho.pngc                  C   s8  t g d} t g d}t g d}d}t| |||\}}}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)   r   r   rd   r  r   r>   r   r  r  r   r  r     r  r   r&   r  i8r  )r   r   r   r  r  Zortho_transformationr  r  r  r  r  r   r#   r  r   r   )r  r	  r  rj   r  r  r  r  ZorthoMr  r  r~   r   rx   r  r  r  rS   r$   rW   rX   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  r   )r   r   r   r   r   r=   r   r   r   )r   Zrot_xr   r   r   assert_allcloserV  )r  Z	rotated_Vr)   r)   r*   test_rotL  s    r  c                  C   sV   d\} }d\}}d\}}t | |||||}tj|g dg dg dg dg d S )N)r   x   )r   r   )r   r|  )r   r   r   r   )r   g{Gzt?r   r   )r   r   g      $@r>   )r   r   r   r   )r   Zworld_transformationr   r   r  )ZxminZxmaxZyminZymaxzminzmaxr  r)   r)   r*   
test_worldV  s    r  zproj3d_lines_dists.pngc                  C   s   t jdtddd\} }d}d}||| t||\}}d}d}||| t|d	 |d	 f||}tt	||fj
||}||d	 ksJ t|||D ]&\}}	}
t||	f|
d	d
}|| q|dd |d	d d S )N)rC   r   r9   )rP  )rQ   r1   )r   rs   )rt   r  )r   r   rt   rs   )r   r  rs   r  r   )fillrC  r  r   )rE   r2   r3   r   r#   r  r   _line2d_seg_distr   r   Tr   r  r   r   )rS   r$   r~   r   Zp0p1Zdist0distrW   rX   drv   r)   r)   r*   test_lines_distsb  s     r   c                  C   s.   d} d}t || |  t t|| |  d S )N)ru   rs   r  )rt   r  re   )r   r  r   r   )s0pr)   r)   r*   test_lines_dists_nowarning{  s    r  c                  C   s   t jddid\} }| dks$J |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sJ |jdd |ddgddgddg | dksJ d S )Nr/   r-   r0   Zlinearr   r   r|  rW   rX   rY   r   )r   r   r   皙?r  g333333?FTr   )r   r   r   r  r  333333@rW   rz  )r   r   r   r  r  r  )rE   r2   Z
get_zscalemarginsr   Z
get_w_limsZ	autoscaleZset_autoscalez_onr`   r)   r)   r*   test_autoscale  s    

r  r{  r  r8   )TFNc           
      C   s   t  }|jdd}td}tddd}||| t|d|  d}t|d|  d	}t|d
|  d	}|d u r|| n|}	|d|d |	| ksJ |j	  tj
| d d S )Nr-   r.   r   r   r   Zget_autoscaleZ_onset_Zlimget_)      r   )r8   )rE   rZ   r[   r   r|   r   r  getattrr   r   r   assert_array_equal)
r{  r8   rS   r$   rW   rX   Zget_autoscale_onZset_limZget_limZ	post_autor)   r)   r*   test_unautoscale  s    

r  c                  C   s   t  } | jdd}tt |jddd W d    n1 sB0    Y  tt |jddd W d    n1 sz0    Y  d S )Nr-   r.   perspr   Zfocal_lengthrf   r   )rE   rZ   r[   r   r   r  rl   r`   r)   r)   r*   test_axes3d_focal_length_checks  s    ,r  zaxes3d_focal_length.pngc                  C   sB   t jddddid\} }|d jdtjd |d jdd	d d S )
Nr   r   r/   r-   r0   r   r  r  333333?)rE   r2   rl   r   inf)rS   rM   r)   r)   r*   test_axes3d_focal_length  s    r  zaxes3d_ortho.pngc                  C   s"   t  } | jdd}|d d S )Nr-   r.   rf   )rE   rZ   r[   rl   r`   r)   r)   r*   test_axes3d_ortho  s    r  zaxes3d_isometric.pngc               	   C   s   ddl m} m} tjtddddd\}}d}| tt||||d	D ]>\}}t	|| 
 |d
 |d  krJ|jt||ddi qJ|jttdtd	 ddd |d d S )Nr   )r   r   r-   rf   )rC   rC   rC   )r/   Z	proj_typeZ
box_aspectr0   )r>   r   r   r   rv   r  rx  rh  rg   T)r   r   r   rE   r2   r3   r   r   r   r!   r    r"   r#   rm   degreesZarctanrV  r  )r   r   rS   r$   r&   r  er)   r)   r*   test_axes3d_isometric  s    $ &r  value)setterside))rp  left)rp  right)rq  bottom)rq  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.   )rE   rZ   r[   r   r   r  r  )r  r  r  limitrS   objr)   r)   r*   test_invalid_axes_limits  s
    
r"  c                   @   s   e Zd Zedgdd Zedgdd Zedgdd	 Zed
gdd Zedgdd Zedgddddd Z	dd Z
dS )
TestVoxelszvoxels-simple.pngc                 C   sB   t jddid\}}td\}}}||k||kB }|| d S )Nr/   r-   r0   )r?   rC   r=   )rE   r2   r   indicesvoxels)selfrS   r$   rW   rX   rY   r%  r)   r)   r*   test_simple  s    zTestVoxels.test_simplezvoxels-edge-style.pngc                 C   sv   t jddid\}}td\}}}|d d |d d  |d d  dk }|j|dd	d
}|t|  d d S )Nr/   r-   r0   )r?   r?   rC   r   g      ?g](\@r=   r  )r  r  r   )rE   r2   r   r$  r%  r   keysr&  )r&  rS   r$   rW   rX   rY   r%  r  r)   r)   r*   test_edge_style  s
    (zTestVoxels.test_edge_stylezvoxels-named-colors.pngc                 C   s   t jddid\}}td\}}}||k||kB }||| | dk  @ }tjddtjd}d||d	k |d	k @ < d
||| dk < |j||d dS )z5Test with colors set to a 3D object array of strings.r/   r-   r0   ru   ru   ru   r   r-  r3  z0.25r?   Zcyanru   r`  N)rE   r2   r   r$  r*  Zobject_r%  r&  rS   r$   rW   rX   rY   r%  r
   r)   r)   r*   test_named_colors  s    zTestVoxels.test_named_colorszvoxels-rgb-data.pngc                 C   st   t jddid\}}td\}}}||k||kB }td}|d |d< |d |d< |d |d	< |j||d
 dS )z5Test with colors set to a 4d float array of rgb data.r/   r-   r0   r*  )ru   ru   ru   r=   r.  .r   .r   .r   r`  N)rE   r2   r   r$  zerosr%  r+  r)   r)   r*   test_rgb_data  s    
zTestVoxels.test_rgb_datazvoxels-alpha.pngc                 C   s   t jddid\}}td\}}}||k}t|| dk }||B }td}	g d|	|< g d|	|< |j||	d	}
t|
tu sJ |
	 D ](\}}|| sJ d
t
|tjsJ qd S )Nr/   r-   r0   r*  r   )ru   ru   ru   rC   )r   r   r   r   )r   r   r   r   r`  zfaces returned for absent voxel)rE   r2   r   r$  r!   r0  r%  typer3   itemsr  r   r  )r&  rS   r$   rW   rX   rY   Zv1Zv2r%  r
   r  Zcoordr  r)   r)   r*   
test_alpha  s    
zTestVoxels.test_alphazvoxels-xyz.png{Gz?F)r   r   c                 C   s   t jddid\}}dd }tdd \}}}||}||}||}	|d d	 |d d	  |	d d	  d
k }
t|
jd }||d< ||d< |	|d< |j||||
|td	| d dddd d S )Nr/   r-   r0   c                 S   sZ   d}t | jD ]F}| |tjd d   | |tjdd     d } |tjd d  7 }q| S )Nr)   r>   r   r   )r   ndimr   Z	index_exp)rW   slrN   r)   r)   r*   	midpoints$  s    z&TestVoxels.test_xyz.<locals>.midpoints)   r9  r9  g      0@r   r   r   )r=   r-  r.  r/  r   r   )r@  rA  r  )rE   r2   r   r$  r0  r:  r%  r   )r&  rS   r$   r8  r&   rq   rr   rcgcZbcZspherer
   r)   r)   r*   test_xyz   s     	(zTestVoxels.test_xyzc                 C   s\  t d\}}}t d}tjddid\}}t tddfD ]\}|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 )NrB   )r   r=   rC   r/   r-   r0   r  )r  filledr%  r   )r=  )r=  rW   rX   rY   )r   r$  ZonesrE   r2   r3   r%  r   r   	TypeErrorAttributeError)r&  rW   rX   rY   r=  rS   r$   kwr)   r)   r*   test_calling_conventionsA  s    
2,z#TestVoxels.test_calling_conventionsN)__name__
__module____qualname__mpl3d_image_comparisonr'  r)  r,  r1  r4  r<  rA  r)   r)   r)   r*   r#    s   






 r#  c            
      C   s
  ddgddgddg  } }}ddgd	d
gddg  }}}t  }|jdd}|| ||}|d }	tj| ||f|	  |	||| tj|||f|	  |		|  |	
| |	j|dd tj| ||f|	  |	jddd tj| |t|f|	  d S )Nr   r   r   r=   rC   r?   r   r   r   r.  ru   rP   r-   r.   rY   rK  )rE   rZ   r[   r   r   r   r  Zget_data_3dr   Z	set_xdataZ	set_ydataZset_3d_propertiesr   )
rW   rX   rY   Zx2y2z2rS   r$   r  r   r)   r)   r*   test_line3d_set_get_data_3dZ  s    

rH  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   ru   ru   )r   ru   ru   ru   )r   r   r   ru   )r[   r   Zinvert_yaxisr4   r)   r)   r*   test_invertedl  s    rI  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-   r0   r   r   )	rE   r2   Zxaxis_invertedZyaxis_invertedzaxis_invertedr   r   r   r  r`   r)   r)   r*   test_inverted_clax  s    rK  c                  C   s   t  } t| }|jddd |jddd |jddd | j  |j D ]}|jj	dksNJ qN|j
 D ]}|jj	dksnJ qn|j D ]}|jj	dksJ qd S )NrW   r   )r{  r
   rX   rY   )rE   rZ   r   Ztick_paramsr   r   r  r  Z	tick1lineZ_colorr  r  )rS   r$   r  r)   r)   r*   test_ax3d_tickcolour  s    
rL  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 )NrC   r?   r/   r-   r0   g    cAg   @cA)rW   rX   rY   r   r   plain)r{  r   r   )r   r   )r{  Z	scilimitsr   zaxes.formatter.useoffset)r{  Z	useOffsetr=   zaxes.formatter.use_locale)r{  Z	useLocalezaxes.formatter.use_mathtext)r{  ZuseMathTextc                    s    fdd|D S )Nc                    s   g | ]}t  | qS r)   )r  Zget_major_formatter)r   namer$   r)   r*   r     r   zAtest_ticklabel_format.<locals>.get_formatters.<locals>.<listcomp>r)   )r$   namesr)   rO  r*   get_formatters  s    z-test_ticklabel_format.<locals>.get_formattersr  r  r  )r  r  r  F)r2   rk   r   r#   Zticklabel_formatr   rQ  Zset_scientificZset_powerlimitsZset_useOffsetZset_useLocaleZset_useMathText)	r5   r6   rM   r$   rowrN  rQ  rP  fmtr)   r)   r*   test_ticklabel_format  sN    



rT  c                 C   s   d}t t dddt dddt ddd\}}}t | } }}t|| fdD ].\}	}
|	jdd}|j|||||||
|d	 qVd S )
Nr  gr   r|  rw   )r   rx  r-   r.   )r   r  )r   r   r|   	ones_liker#   r[   r  )r5   r6   r  rW   rX   rY   r  r  r  rS   r   r$   r)   r)   r*   test_quiver3D_smoke  s    
rV  zminor_ticks.pngZmpl20)r   c                  C   st   t  jdd} | jdgdd | jdgdd | jdgdd | jdgdd | jd	gdd | jd
gdd d S )Nr-   r.   r   T)minorZquartergQ?thirdr   Zhalf)	rE   rZ   r[   Z
set_xticksZset_xticklabelsZ
set_yticksZset_yticklabels
set_zticksZset_zticklabelsrO  r)   r)   r*   test_minor_ticks  s    rZ  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   r5  r=   r?   r-   r.      r|  )zuplimszlolimsZ
erroreveryN)
r   r|   r   r   r   rE   rZ   r[   r8  errorbar)
r   rW   rX   rY   rS   r$   ZesteprN   r\  r]  r)   r)   r*   test_errorbar3d_errorevery  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=   rC   r?   )r   r   r   r   r   r=   )FTFTT)TFFTFTZpurplezError lines)rW   rX   rY   ZxerrZyerrZzerrZcapsizer\  r]  ZyuplimsZecolorrU   N)rE   rZ   r[   r^  Zlegend)rS   r$   r  r  r)   r)   r*   test_errorbar3d  s    r`  z
stem3d.pngg~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   r   Tr/   r-   rQ   Zconstrained_layoutr1   r   r  )orientationzorientation=rt   r   zC4-.ZC1Dr   )linefmtZ	markerfmtZbasefmtrb  r  )r   Zmarkeredgewidth)rE   r2   r   r   r   r   r   r#   stemrH   rU  setZset_linewidth)rS   rM   r   rW   rX   rY   r$   ry   Z
markerlineZ	stemlinesZbaseliner)   r)   r*   test_stem3d  s.    



rf  zequal_box_aspect.pngc                  C   s  ddl m} m} t }|jdd}tddtj d}tdtjd}t	t
|t|}t	t|t|}t	t|t
|}|||| ddg}	|tt| |	|	|	dD ]B\}
}tt|
| |	d |	d  kr|jt|
|d	d
i qt| | | g}t|d t|d g}|| || || |d |d tj t!dd |jddd W d    n1 s0    Y  d S )Nr   )r   r   r-   r.   r   r   r>   r   rz   rr   offrA   zArgument zoom =r   )zoom)"r   r   r   rE   rZ   r[   r   r   r   outerr   r   rU  r  r   r   r    r!   r"   r#   r  
get_xlim3d
get_ylim3d
get_zlim3dr   r   rp  rq  r  r{  rI   r   r   r  )r   r   rS   r$   r  r  rW   rX   rY   r&   r  r  ZxyzlimZXYZlimr)   r)   r*   test_equal_box_aspect   s0    $$




rm  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   )rC   r?   Tr/   r-   ra  r?   Z
horizontal)r$   rb  r|  )rE   r2   r  r   r   r  rR  r   r   r$   get_positionZextents)Z	num_plotsrS   rM   r$   Zp_triZcbarr)   r)   r*   test_colorbar_posF  s    



ro  c                  C   s"  t  } | jdd}| r J | dks0J | dks@J |d | rVJ | dksfJ | dksvJ |  | sJ | dksJ | dksJ |jdd | sJ | dksJ | dksJ |jd	d
 | sJ | dksJ | dksJ d S )Nr-   r.   r   r   r   r   )r   r   r   )upper)r   r   r   )lower)r   r   r   r   )rE   rZ   r[   rJ  get_zlimZ
get_zboundZ
set_zboundZinvert_zaxisr`   r)   r)   r*   test_inverted_zaxisV  s*    
rv  c                  C   s   t  } | jdd}| dks$J |jdd | dks@J |jdd | d	ks\J tjtd
d |jddd W d    n1 s0    Y  tjtdd |jddd W d    n1 s0    Y  d S )Nr-   r.   rp  r   )r  rq  r   )r  rt  z$Cannot pass both 'bottom' and 'zmin'r   r   )r  r  z!Cannot pass both 'top' and 'zmax')r  r  )rE   rZ   r[   ru  r   r   r   r>  r`   r)   r)   r*   test_set_zlimv  s    ,rw  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  rz  )rE   rZ   r[   r   rY  ru  )rS   r   r   r)   r)   r*   test_shared_axes_retick  s    r{  c                  C   s8  dd } t  jdd}|ddd |jj  | |  \}}| |  \}}| |  \}}|	t
|tjddd |t
|tjddd | |  \}}	| |  \}
}| |  \}}|	t|k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   )buttonZxdataZydatar   N)rE   rZ   r[   r  r   r   rj  rk  rl  Z_button_pressr   r   ZMIDDLEZ_on_mover   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  ztool,button,key,expectedrh  ))r   Q?)r5  gQ?)r   {Gz?rW   ))g{Gzr   gQr  Qr  rX   ))Q뱿g{Gz?r  )r   g)\(?))g
ףp=
r  )r  g(\?)r  g
ףp=
?pan))gffffff(\)g{GzgQgRQgffffff))gQgzG)r  gq=
ףpݿr  ))r|  g{Gz?)gRQg(\ؿr  c                 C   sn  t  }|jdd}|ddd |j  | | |   }}}d}	d}
|j	
|	t}|j	
|
t}td|jg||R d|i}td|jg||R d|i}t|j}| d	kr|  || || || n&|  || || || |\}}}| tj|d
dks6J | tj|d
dksRJ | tj|d
dksnJ |  | t|ksJ | t|ksJ | t|ksJ |  | tj|d
dksJ | tj|d
dksJ | tj|d
dksJ |  | t|ks:J | t|ksRJ | t|ksjJ d S )Nr-   r.   r   r  r   r   Zbutton_press_eventkeyZbutton_release_eventrh  r5  )r!   )rE   rZ   r[   r  r   r   rj  rk  rl  Z	transDataro  Zastypeintr   r   rh  Z
press_zoomZ	drag_zoomZrelease_zoomr  Z	press_panZdrag_panZrelease_panr   r  backZforwardhome)Ztoolr~  r  expectedrS   r$   Zxlim0Zylim0Zzlim0Zd0d1r  s1Zstart_eventZ
stop_eventtbZxlimZylimZzlimr)   r)   r*   test_toolbar_zoom_pan  sj    







r  c           
      C   s   t ttjt dddt dddt dddg j\}}}|| }| jddd}|j||||ddd	}| j	
  |  |jddd}|j||||ddd	}	d S )
Nr   r?   r   o   r-   r.   r   r   )rv   r  r   )r   r   r   r   r   r|   r  r[   r  r   r   changed)
r5   r6   rW   rX   rY   rv   r   Zsc_testr   Zsc_refr)   r)   r*   test_scalarmap_update  s    
r  c                  C   sF   t  } | dd}|d jddddd}|d jdddddd}d S )Nr   r   r   r-   r.   other)r/   rU   )rE   rZ   Z
subfiguresr[   )rS   Zsfr$   r)   r)   r*   test_subfigure_simple  s    r  computed_zorder)ZclassicZ_classic_test_patch)baseline_imagesr   r,   r   c               
   C   s  t  } | jddd}| jddd}d|_d}||fD ]h}tj|gddd	d
}|| |jdddddd |jdddddd |	d |
d |d q6| jddd}| jddd}d|_d}t| |f| |f\}	}
td}d}t| |fd|f\}}|| }t| |f| df\}}|| }d}d}tddtj |}|t| |t| || t|   }}}||fD ]}|j|||ddddd |j||dk  ||dk  ||dk  ddd dd! |j|	|
|dddd	d |j|t| |t| t|ddddd! |j|||dddd"d |j||dk ||dk ||dk ddd d#d! |jd$d%dd& |d' qd S )(N   r-   r.      F)rd   )r   r?   r   )r?   r?   r   )r?   r   r   ZwhiteZblackr   )r@  rA  zorder)r   r   )r   rC   r   r   )rv   r  )r=   r=   )r   r=   ru   )r   r   )r   rz        r   r   r   r   r   r>   )rz   r{   r  r  r?   z--r   )r6  Z	linestylerz   r  r=   rC   rt   r   rg   rg  )rE   rZ   r[   r  r   r  r  r   r  r   r   r   r   r   r0  r   r   r   r   r  rm   r{  )rS   r   r   Zcornersr$   ZtriZax3Zax4Zdimr   r   r   angleZX2ZY2ZZ2ZX3ZY3ZZ3r&   r  thrW   rX   rY   r)   r)   r*   test_computed_zorder$  s    



2
"
$
$r  c                  C   s   t  } | jdd}td}||t| | j  |	dddksNJ |j
ddd | j  |	ddd	kszJ |
  | j  |	dddksJ d S )
Nr-   r.   ru   r   u   x=1.8066, y=1.0367, z=−0.0553rs   rX   )rj   vertical_axisu"   x=9.1651, y=−0.9215, z=−0.0359)rE   rZ   r[   r   r|   r   r   r   r   Zformat_coordrm   rS   r$   rW   r)   r)   r*   test_format_coordw  s    



r  c                  C   sN   t  } | jdd}td}||t| | j  |	 dksJJ d S )Nr-   r.   ru   )FTF)
rE   rZ   r[   r   r|   r   r   r   r   Zget_axis_positionr  r)   r)   r*   test_get_axis_position  s    

r  c                  C   s   t  } | jdd}|d | dks.J |ddd | dksLJ |jdd	 | d
kshJ |jdd | dksJ |jdd | dksJ d S )Nr-   r.   r|  )r|  r|  r|  r   r!  )r   r|  r!  r   )rW   )r   r|  r!  )rX   )r   r   r!  rY   )r   r   r   )rE   rZ   r[   r  r`   r)   r)   r*   test_margins  s    
r  zerr, args, kwargs, match)r>   z!margin must be greater than -0\.5)r   r>   r   )r   r   r>   r>   rY   )r   z'Cannot pass both positional and keyword)rW   rX   r  z*Must pass a single positional argument forc                 C   sV   t j| |d4 t }|jdd}|j|i | W d    n1 sH0    Y  d S )Nr   r-   r.   )r   r   rE   rZ   r[   r  )errr  r   r   rS   r$   r)   r)   r*   test_margins_errors  s    r  c                 C   sz   |j dd}tddd}tj|dd || | dks@J | j dd}tdddd}|| | dksvJ d S )Nr-   r.   r   zFoo bar $\int$r   r  r  )r[   r   r   Ztext_2d_to_3dr  Zget_position_3dZText3D)r5   r6   r$   txtZt3dr)   r)   r*   test_text_3d  s    

r  c                  C   s>   t  } | jdd}|dgdggdgdggdgdgg d S )Nr-   r.   r   r   )rE   rZ   r[   r   r`   r)   r)   r*   test_draw_single_lines_from_Nx1  s    r  c                 C   s`   |j dd}t }t|}tj|ddd || | j dd}tj|ddd}|| d S )Nr-   r.   )r   r   r"  r   r   rX   rY   ry   rK  )r[   r   Zunit_rectangler   r   pathpatch_2d_to_3dr  ZPathPatch3D)r5   r6   r$   pathpatchZpp3dr)   r)   r*   test_pathpatch_3d  s    
r  zscatter_spiral.png)r  r   r   c                  C   sf   t  } | jdd}tddtj d d}|jt|t||d|d  |d d	}| j	
  d S )
Nr-   r.   r   r   r      r   r?   rF  )rE   rZ   r[   r   r   r   r  r   r   r   r   )rS   r$   r  Zscr)   r)   r*   test_scatter_spiral  s
    ,r  c                  C   sn   t jddddddf \} }t |d t | d  }t }|jddd}|j|| |d	d
}|  d S Nr   ru   y              Y@r=   r   r  r-   r.   Zhot)r   )	r   r  r   r   rE   rZ   r[   r  r  rX   rW   rG  rS   r$   r&   r)   r)   r*   #test_Poly3DCollection_get_facecolor  s    r  c                  C   sn   t jddddddf \} }t |d t | d  }t }|jddd}|j|| |d	d
}|  d S r  )	r   r  r   r   rE   rZ   r[   r  Zget_edgecolorr  r)   r)   r*   #test_Poly3DCollection_get_edgecolor  s    r  zDvertical_axis, proj_expected, axis_lines_expected, tickdirs_expected)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  g˗ìg溾I?)r   r   r   )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| d |jj  | }tjj	|||d t
| | | gD ]J\}}|| }	|j }
tjj	|	|
|d || }| }tj|| qhdS )	a  
    Test the actual projection, axis lines and ticks matches expected values.

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

    test cases came from GH#8990
    r  r-   r.   )r   r   r=   )r   r   r   zo-Nr   )r5   r6   r   rW   rX   rY   r   r)   r)   r*   "test_mutating_input_arrays_y_and_zk  s    r  )r   )	functoolsr   r   Zmpl_toolkits.mplot3dr   r   r   r   Z
matplotlibr   Zmatplotlib.backend_basesr   r   r   r	   r
   r   r   r  Zmatplotlib.testing.decoratorsr   r   Zmatplotlib.testing.widgetsr   Zmatplotlib.collectionsr   r   Zmatplotlib.patchesr   r   Zmatplotlib.pathr   Zmatplotlib.textr   Zmatplotlib.pyplotZpyplotrE   numpyr   partialrE  r+   r7   rO   rT   ra   rp   r   r   r   r   r   r   r   r   r   markZparametrizer   r   r   r   r   r   r
  r  r  r  r  r  r+  rB  rH  rJ  rL  rS  rW  rd  re  ri  rs  ru  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  nanr"  r#  rH  rI  rK  rL  rT  rV  rZ  r_  r`  rf  rm  ro  rv  rw  r{  r  LEFTRIGHTr  r   contextr  r  r  r  r  r  r  tupler>  r  r  r  r  r  r  r  r  r  r  r  r)   r)   r)   r*   <module>   sj  	










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


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

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