a
    r=ic                     @   sh
  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mZ d dlmZmZ d dlmZ d dlmZmZ d d	lmZmZ d d
lmZ d dlmZ d dl m!Z" d dl#Z$e j%edddZ&edgddd Z'e&dgdddd Z(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.d(d) Z/e&d*gd+d, Z0e&d-gd.d/ Z1e&d0gd1d2 Z2e&d3gd4d5 Z3ej45d6d7g d8gd9g d:gd;g d<ggedgdd=d> Z6e&d?gd@dAdBdC Z7dDdE Z8e&dFgdGdH Z9edgddIdJ Z:e&dKgdLdM Z;edgddNdO Z<e&dPgdQdR Z=e&dSgdTdU Z>e&dVgdWdX Z?edgddYdZ Z@edgdd[d\ ZAej45d]ddgedgdd^d_ ZBej45d`dadbgedgddcdd ZCedgddedf ZDe&dggdhdAdidj ZEe&dkgdldm ZFe&dngdodp ZGe&dqgdrds ZHe&dtgdudv ZIe&dwgdddxdy ZJedgddzd{ ZKe&d|gd}dAd~d ZLe&dgddAdd ZMe&dgdd ZNe&dgdd ZOe&dgdd ZPdd ZQdd ZRe&g ddd ZSedgddd ZTe&dgdd ZUdd ZVedgddd ZWdd ZXe&dgdd ZYdd ZZe&dgdd Z[e&dgdd Z\e&dgdd Z]e&dgdddd Z^e&dgdddd Z_e&dgdddd Z`dd Zadd Zbdd ZcdTddZde&dgdd Zee&dgddĄ ZfddƄ ZgddȄ Zhe&dgdd˄ Zidd̈́ Zjddτ Zkej45ddѡej45ddӡddՄ Zlddׄ Zme&dgddddڄ Zne&dgdddd݄ Zoe&dgdd Zpej45de$jqe$jrgej45dg ddd ZsG dd dZtdd Zuedgddd Zvdd Zwdd Zxedgddd Zyedgddd Zzedgdddd Z{e&dgdd Z|e&dgdd Z}edgdd ddd Z~edgdddd Zdd Zd	d
 Zdd Ze	jdedgddd Zdd Zedgddgddd Zdd Zdd Zdd Zej45dedi dfedi dfedi dfee d d!idfee d"d!idfee d#d!idfed$d did%fed$ddddќd%fed$ddd&d%fed'i d(ff
d)d* Zedgdd+d, Zd-d. Zedgdd/d0 Zed1gddd2d3d4 Zd5d6 Zd7d8 Zej45d9d#g d:g d;g d<g d=gd>d?gd@dAgfdBd?gdAdAgfdBdBgdAdCgfgg dDfd"g dEg dFg d<g dGgdBd?gdCdCgfd?d?gdAdCgfdHdBgdIdCgfgg dJfd g dKg dLg d<g dMgdBdBgdCdAgfd?d>gdCdIgfd?dBgdCdCgfgg dNfgdOdP ZedQgddd2dRdS ZdS (U      N)Axes3Daxes3dproj3dart3d)MouseButton)cm)colorspatches)image_comparisoncheck_figures_equal)
mock_event)LineCollectionPolyCollection)Circle	PathPatch)Path)TextTdefault)remove_textstyleZpng)
extensionsc                 C   s    | j tddd}|d d S )N3d
projection
subplot_kwF)subplotsdictZset_visiblefig_testfig_refax r"   p/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/mpl_toolkits/tests/test_mplot3d.pytest_invisible_axes   s    r$   zaspects.pngF)r   c            
   
   C   s   d} t jdt| ddid\}}ddg}tg d}tttt|||d}|D ]N\}}t	t
|| |d |d  krZ|D ]}|jt|| ||   qqZt|D ] \}	}|d	 || |	  qd S )
N)autoequalZequalxyZequalyzZequalxz   r   r   r   r   )r'   r'               r(   )pltr   lennparray	itertoolscombinationslistproductsumabsplot3Dzip	enumerateset_box_aspectZ
set_aspect)
ZaspectsfigaxsrscaleZptsstartendr!   ir"   r"   r#   test_aspects    s     $
rB   c                  C   sZ   t  } | jdd}|d |d |d |d |d t|dksVJ d S )	Nr   r   labeltitlexyzz]<Axes3DSubplot: label='label', title={'center': 'title'}, xlabel='x', ylabel='y', zlabel='z'>)	r-   figureadd_subplotZ	set_label	set_title
set_xlabel
set_ylabel
set_zlabelreprr;   r!   r"   r"   r#   test_axes3d_repr2   s    




rP   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   rR   r   r   r   r   )rR   rQ   r   )r   rQ   r   )r      r   r)   r+   r   r   r   rE   rF   rG   orthor   r'   elevazimroll)
r-   r   r9   flatrK   rL   rM   set_proj_type	view_inittight_layout)viewsr;   r<   rA   r!   r"   r"   r#   test_axes3d_primary_views?   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brF   )      
   r   rc   cr   rF   edge皙?)zszdiraligncoloralpha)r-   rH   rI   r8   r/   aranger.   bar)r;   r!   re   rG   xsyscsr"   r"   r#   
test_bar3dT   s    

rr   c               
   C   s\   t  } | jdd}dD ]>}tt|}t|}t|}|j|||ddd|d qd S )Nr   r   )redgreenblueyellowr'   rk   )r-   rH   rI   r/   rm   r.   
zeros_likebar3d)r;   r!   re   ro   rp   rh   r"   r"   r#   test_bar3d_colors`   s    

rz   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 )Nr,   r(   r'   ))rb   ir   )rb   rb   rb   )rb   rR   ),  r{   r   figsizer   r   r   r   TshaderV   )r/   rm   meshgridravelr-   rH   	figaspectr.   r   r   r8   ry   r\   canvasdraw)rE   rF   x2dy2drG   r^   r;   r<   r!   rW   rX   rY   r"   r"   r#   test_bar3d_shadedl   s    

r   zbar3d_notshaded.pngc               	   C   s|   t  } | jdd}td}td}t||\}}| |  }}|| }|j|||d dd|dd | j	  d S )	Nr   r   r,   r(   r   r'   Fr   )
r-   rH   rI   r/   rm   r   r   ry   r   r   )r;   r!   rE   rF   r   r   rG   r"   r"   r#   test_bar3d_notshaded   s    

r   c            
         s   t  } | jddddd}tjddd}d\}}||  tt|t|\}}| }| }|| } fdd	t	 D }|j
||ddd||d
|d	}	tj||	jdd d  d S )Nr'   r   r   r   rQ   )ZazdegZaltdeg)r+   r,   c                    s   g | ]}t |  qS r"   )r   coolwarm).0rA   Zarear"   r#   
<listcomp>       z*test_bar3d_lightsource.<locals>.<listcomp>T)	rE   rF   rG   ZdxZdydzrk   r   Zlightsource   )r-   rH   rI   mcolorsZLightSourcer/   r   rm   r   rangery   testingassert_array_equalZ_facecolor3d)
r;   r!   ZlslengthwidthrE   rF   r   rk   
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   皙?rG   )ri   offsetcmaprE   rF   (   d   r-   rH   rI   r   get_test_datacontourr   r   set_xlimset_ylimset_zlimr;   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   rG   r   T)ri   r   r   Zextend3dr{   rb   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   )r-   rH   rI   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-   rH   rI   r/   r   rm   clipr   r   r   r   r   r   r   r"   r"   r#   test_contourf3d_fill   s    $r   zextend, levelsboth)r)   r,   r   min)r)   r,   r      max)r   r)   r,   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)   r,   r   r   extendrd   )r/   r   rm   mpl	colormapscopyZ	set_underZset_overrI   r   r   r   r   )r   r    r   r   r   r   r   r   kwargsax_refax_testr!   r"   r"   r#   test_contourf3d_extend   s    $r   ztricontour.png{Gz?)tolc                  C   s   t  } tjd tjdd }tjdd }|d |d   }| jddddd}|||| | jddddd}|||| d S )Ni!N,        ?r)   r'   r   r   )	r-   rH   r/   randomseedZrandrI   Z
tricontourZtricontourf)r;   rE   rF   rG   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   )rb   rc   r   rd   r   r)   r   )r-   rH   rI   r/   linspacer   randintr   )r;   r!   nxnyrE   rF   rG   r"   r"   r#   test_contour3d_1d_input  s    r   zlines3d.pngc                  C   sv   t  } | jdd}tdtj dtj d}tddd}|d d }|t| }|t| }|||| d S )	Nr   r   r,   r   r   r)   r'   )	r-   rH   rI   r/   r   pisincosplot)r;   r!   thetarG   r=   rE   rF   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)rI   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)   )r/   r   r   exp)tr"   r"   r#   f(  s    ztest_mixedsubplots.<locals>.f              @r   r          @r}   r)   r'   Zbozk--rt   )markerfacecolorTr   r   r(   r   r   r   F)rcountccount	linewidthantialiasedr   )r/   rm   r-   rH   r   rI   r   gridr   hypotr   plot_surface
set_zlim3d)	r   t1t2r;   r!   r   r   Rr   r"   r"   r#   test_mixedsubplots&  s     
$
r   c                 C   sP   | j dd}|jddddd |   |j dd}|  |jddddd d S )Nr   r   r   zsome strings)rI   textr]   r   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   rd   r=   r   )re   markerrc   ra   ^r   r   r   r-   rH   rI   scatterr/   rm   r;   r!   rE   rF   rG   r"   r"   r#   test_scatter3dK  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   rd   r=   noner   )	facecolor	edgecolorr   rc   ra   r   )rk   r   r   rO   r"   r"   r#   test_scatter3d_colorX  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   rd   r   )r   r   r   rO   r"   r"   r#   test_scatter3d_linewidthh  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   rd   r   r   )r   
linewidths)rI   r   r/   rm   set_linewidthsr    r   r   re   r   r"   r"   r#   %test_scatter3d_linewidth_modificationr  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   rd   r   r  C1C2333333?ffffff?r(   FK   r+   )r   r  r  rl   
depthshader   r  )rI   r   r/   rm   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.Nrd      r   r   r)   r'   C0r  r(   r  r   r,   ZC3ZC4ZC5ZC6	   ZC7c                 S   s   g | ]}|  qS r"   )flattenr   ar"   r"   r#   r     s   z*test_scatter3d_sorting.<locals>.<listcomp>r   r   c                 s   s   | ]}t |V  qd S )N)r/   uniquer  r"   r"   r#   	<genexpr>  r   z)test_scatter3d_sorting.<locals>.<genexpr>Zdtype)r   fceclwrl   r  )r/   mgridrm   sizereshapeshaper  rI   r1   r4   maZmasked_arrayfloatrepeatr5   maskr   )r    r   r  rF   rE   rG   sizes
facecolors
edgecolorsr  r   Zsetsr   r"  r#  r$  Zsubsetr   r"   r"   r#   test_scatter3d_sorting  sN    
r0  rX      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   ra   rF   r   r     r   re   rV   N)rI   r   r\   r   r    rX   rE   rF   rG   rk   r!   r"   r"   r#   $test_marker_draw_order_data_reversed  s    	<r6  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.
    r2  r   r'   r   ra   rF   r   r   r3  r4  rV   NrT   )rI   set_axis_offr   r\   r5  r"   r"   r#   #test_marker_draw_order_view_rotated  s    r8  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(   rd   rE   rh   ri   rF   )r-   rH   rI   r/   rm   r   )r;   r!   ro   rp   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   r(   r   r   r   )r   r   r   r$  r   )\()\(?r   )shrinkaspect)r-   rcParamsrH   rI   r/   rm   r   r   r   r   r   r   r   colorbar)r;   r!   r   r   r   r   Zsurfr"   r"   r#   test_surface3d  s    

rA  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cstriderk   r$  r   r;  r<  )
r-   rH   rI   r/   rm   r   sqrtr   r   r   )r;   r!   r   r   r   r   r"   r"   r#   test_surface3d_shaded  s    

rE  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+   r,   r(   r   r   r   r  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,   r+   r)   r'   r'   )r         r,   r(   r   r   r   r(   r,   r+   rG  )r   rG  r   r   rF     rF  r   r   rG  rG  )r   rG  r   r  rd      rd   r  rd   r   rG  )r   rG  rG  rH  rI  rc   rI  rH  rF  rG  rG  )r   rG  rG  rG        rJ  rc      rG  rG  )r   rG  rG  rG  rG        r  rG  rG  rG  r   )r   r   Zplasmar.  rb   r   )r-   rH   rI   r/   r   r0   r)  masked_lessr   	Normalizer   r   r   r   r   r\   )r;   r!   rE   rF   matrixrG   normr   r"   r"   r#   test_surface3d_masked$  s*    rT  zsurface3d_masked_strides.pngc                  C   sj   t  } | jdd}tjddddddf \}}tj|| d}|j|||ddd |d	d
d d S )Nr   r   igffffff@r'   r)   r,   rB  rC  <   r   )	r-   rH   rI   r/   r%  r)  rP  r   r\   r   r"   r"   r#   test_surface3d_masked_strides?  s    rX  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   NrE   rF   rG   r'   r'   r   r'   r'   r'   r)   r   r,   r  r   r)   r   r,   r   r   r)   r)   r,   r)   r(   r   r'   r   z(%d, %d, %d), dir=%sr'   rs   rw   r   gffffff?z2D Text)Z	transformr   rd   zX axiszY axiszZ axis)r-   rH   rI   r8   r   Ztext2DZ	transAxes
set_xlim3d
set_ylim3dr   rK   rL   rM   )r;   r!   zdirsro   rp   rh   ri   rE   rF   rG   rC   r"   r"   r#   test_text3dK  s"    

rb  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 )NrY  r\  r]  r^  r   r   r   rd   (z, z), dir=)ri   )rI   r_  r`  r   r8   r   Zset_position_3d)r    r   ra  ro   rp   rh   r   ri   rE   rF   rG   r   r   r"   r"   r#   test_text3d_modificationc  s"    (rd  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   r  r   r-   rH   rI   plot_trisurfr   Zjet	Zn_anglesZn_radiiZradiiZanglesrE   rF   rG   r;   r!   r"   r"   r#   test_trisurf3d|  s    $rp  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 )Nre  r   rf  rg  r   r)   Frh  .r'   ri  r   r   )r'   r   r   rk  )rk   r   )r/   r   r   r+  rl  rm  r   r  r   r-   rH   rI   rn  ro  r"   r"   r#   test_trisurf3d_shaded  s    $rr  zwireframe3d.pngc                  C   s<   t  } | jdd}td\}}}|j|||ddd d S )Nr   r   r      r   r   r-   rH   rI   r   r   plot_wireframer   r"   r"   r#   test_wireframe3d  s    rw  zwireframe3dzerocstride.pngc                  C   s<   t  } | jdd}td\}}}|j|||ddd d S )Nr   r   r   rs  r   rt  ru  r   r"   r"   r#   test_wireframe3dzerocstride  s    rx  zwireframe3dzerorstride.pngc                  C   s<   t  } | jdd}td\}}}|j|||ddd d S )Nr   r   r   r   rd   rU  ru  r   r"   r"   r#   test_wireframe3dzerorstride  s    ry  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   rU  )	r-   rH   rI   r   r   pytestraises
ValueErrorrv  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   rd   2   )rB  r   )rC  r   )
r-   rH   rI   r   r   rz  r{  r|  rv  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   rg                 $@333333?              @>,p ?)tipmiddletailr   r   r   Tr   pivot	normalize)	r/   ogridr   r   r   r-   rH   rI   quiver)rE   rF   rG   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  )rI   r  )	r   r    rE   rF   rG   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   rg   r  r  r  r  皙ٿr   F)r   r  r  Tr  )r-   rH   rI   r/   r%  r   r   r   r)  Zmasked_wherer  )r;   r!   rE   rF   rG   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   )rg  r   r   r'   r'   r   r   r'   )r-   rH   rI   r   	add_patchr   Zpatch_2d_to_3dr  r   Z
same_colorget_facecolorr   r   )r;   r!   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   rq  )r   r   r   rg  )r   r   r   r   r+   )r  r   r   r  r  F)r  r  r  rl   r  )r   r/   r0   r   ZPatch3DCollectionrI   add_collection3dr  r  r  r  r  )r   r    Zpatch1Zpatch2r.  re   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   rS   zlist of \(N, 3\) array-likematchr!  )rz  r{  r|  r   Poly3DCollectionr/   r0   r*  )polyr"   r"   r#   &test_poly3dcollection_verts_validation  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  rS   r[  rZ  r+   k)r   r   r'   r   Tr  r  r  closed)r'   r   r   r   F)	r-   rH   rI   r/   r0   r*  r   r  r  r;   r!   Zpoly1Zpoly2c1c2r"   r"   r#   test_poly3dcollection_closed#  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   r   )r   r   Zpoly_collection_2d_to_3d
isinstancer  	get_pathsr-   r   r   
add_artistZdo_3d_projectionr/   isnanr   r   )r  r;   r!   Zminzr"   r"   r#   #test_poly_collection_2d_to_3d_empty2  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  rS   r[  rZ  r+   r  r   r   r'   Tr  r   F)r  r  )r'   r   r   )r-   rH   rI   r/   r0   r*  r   r  r  r  r  r  r  r"   r"   r#   test_poly3dcollection_alphaA  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   r,   r   r   r)   r'   r   r+   ri  r   r   r   twilightr   rS  rh   r   r(   r   )r/   r   r   r   r   column_stackr'  concatenater-   rH   rI   rQ  r   	set_arraymodr  r   r   r   r   rG   r=   rE   rF   Zpointssegmentsr;   r!   rS  lcliner"   r"   r#   test_add_collection3d_zs_arrayT  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   ri  r   r   r  r  r  r   r(   r   r   )r/   r   r   r   r   r  r'  r  r-   rH   rI   rQ  r   r  r  r   r   r   r  r"   r"   r#   test_add_collection3d_zs_scalarp  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 LABELrd   )labelpadzY LABELzZ LABELrc   r   r(   )r-   rH   Zadd_axesr   xaxisr  r   r?  rK   rL   rM   yaxiszaxisr9   get_major_ticksZset_padZget_pad)r;   r!   rA   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   )r-   rH   rI   r7  clarO   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   rQ   -   r   )r-   rH   rI   r\   rO   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   rd   r   )num)   r   r}   r'   r)   r   r   )r/   r   r   r   randnr-   rH   rI   rz  r{  r|  r   )rE   rF   r   r   rG   r;   r!   r"   r"   r#   test_plotsurface_1d_raises  s    r  c                  C   s\   t g d} t g d}t g d}d}t| |||}tddd}t ||}|S )N)r   ii  )r   r   r   r  r   r   r   r'   )r/   r0   r   view_transformationZpersp_transformationdot)Er   VrY   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/   r0   r   proj_transformZinv_transformr   Zassert_almost_equal)
r  ro   rp   rh   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   rE   rF   rG   )r   r  r8   r-   r   r   Zadd_collectionr   )r  r   argsr   ro   rp   rh   r  r  r  r   r!   Zayazlinesr;   ZlinecrE   rF   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   re   r=   皙ɿrk  )r  splitr/   r0   r   r  r  r   r   r8   r   r   r   )r  tsro   rp   rh   r  r  r  r;   r!   rE   rF   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}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)   r   r   rS   r  r   r   r'   r  r  r   r  r     r   r|   r=   r  i8r  )r/   r0   r   r  Zortho_transformationr  r  r  r  r   r   r8   r   r   r   )r  r   r  rY   r  ZorthoMr  r  ro   rp   rh   r  r  r  r;   r!   rE   rF   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_allcloserD  )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)r   x   )r   r   )r   rk  )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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}||d	 ksJ t|||D ]&\}}	}
t
||	f|
d	d
}|| q|dd |d	d d S )N)r,   r   r&   )r>  )r~   r   )r   rb   rc   r  )r   r   rc   rb   )r   r  rb   r  r   )fillr1  r  r|   )r-   r   r   r   r8   r   r   _line2d_seg_distr/   r0   r   r  r   r   )r;   r!   ro   rp   p0p1Zdist0distrE   rF   dre   r"   r"   r#   test_lines_dists.  s     r  c                  C   sD   d} d}d}t | | | t | || t| } t | | | d S )N)rd   rb   r~  )rd   rb   rc   r  )r   r  r/   r0   )r  r  p2r"   r"   r#   test_lines_dists_nowarningG  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 |jdd |ddgddgddg | dksJ d S )Nr   r   r   r   r   rk  rE   rF   rG   r'   )r   r'   r   皙?r  g333333?FTr)   )r   r'   r   r  r  333333@rE   ri  )r   r)   r   r  r  r  )r-   r   marginsr   Z
get_w_limsZ	autoscaleZset_autoscalez_onrO   r"   r"   r#   test_autoscaleS  s    

r  rj  r  r%   )TFNc           
      C   s   t  }|jdd}td}tddd}||| t|d|  d}t|d|  d	}t|d
|  d	}|d 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   )r%   )r-   rH   rI   r/   rm   r   r   getattrr   r   r   r   )
rj  r%   r;   r!   rE   rF   Zget_autoscale_onZset_limZget_limZ	post_autor"   r"   r#   test_unautoscalea  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_lengthrU   r'   )r-   rH   rI   rz  r{  r|  r[   rO   r"   r"   r#   test_axes3d_focal_length_checksw  s    ,r  zaxes3d_focal_length.pngc                  C   sB   t jddddid\} }|d jdtjd |d jdd	d d S )
Nr'   r)   r   r   r   r   r  r  g333333?)r-   r   r[   r/   inf)r;   r<   r"   r"   r#   test_axes3d_focal_length  s    r  zaxes3d_ortho.pngc                  C   s"   t  } | jdd}|d d S )Nr   r   rU   )r-   rH   rI   r[   rO   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   )r2   r4   r   rU   )r,   r,   r,   )r   Z	proj_typeZ
box_aspectr   )r   r'   r)   r'   re   r  rg  rW  rV   T)r1   r2   r4   r-   r   r   r/   r0   r3   r6   r5   r7   r8   r\   degreesZarctanrD  r   )r2   r4   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-   rH   rI   rz  r{  r|  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   r   )r(   r,   r+   )r-   r   r/   indicesvoxels)selfr;   r!   rE   rF   rG   r  r"   r"   r#   test_simple  s    zTestVoxels.test_simplezvoxels-edge-style.pngc                 C   sv   t jddid\}}td\}}}|d d |d d  |d d  dk }|j|dd	d
}|t|  d d S )Nr   r   r   )r(   r(   r,   r)   g      ?g](\@r+   r  )r  r  r  )r-   r   r/   r  r  r   keysr  )r  r;   r!   rE   rF   rG   r  r  r"   r"   r#   test_edge_style  s
    (zTestVoxels.test_edge_stylezvoxels-named-colors.pngc                 C   s   t jddid\}}td\}}}||k||kB }||| | dk  @ }tjddtjd}d||d	k |d	k @ < d
||| dk < |j||d dS )z5Test with colors set to a 3D object array of strings.r   r   r   rd   rd   rd   r'   r  r!  z0.25r(   cyanrd   rO  N)r-   r   r/   r  r  Zobject_r  r  r;   r!   rE   rF   rG   r  r   r"   r"   r#   test_named_colors  s    zTestVoxels.test_named_colorszvoxels-rgb-data.pngc                 C   st   t jddid\}}td\}}}||k||kB }td}|d |d< |d |d< |d |d	< |j||d
 dS )z5Test with colors set to a 4d float array of rgb data.r   r   r   r  )rd   rd   rd   r+   r  .r   .r'   .r)   rO  N)r-   r   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   r   r  r)   )rd   rd   rd   r,   )r'   r   r   r   )r   r'   r   r   rO  zfaces returned for absent voxel)r-   r   r/   r  r6   r"  r  typer   itemsr  r   r  )r  r;   r!   rE   rF   rG   v1v2r  r   r  Zcoordr  r"   r"   r#   
test_alpha  s    
zTestVoxels.test_alphazvoxels-xyz.png{Gz?F)r   r   c                 C   s   t jddid\}}dd }tdd \}}}||}||}||}	|d d	 |d d	  |	d d	  d
k }
t|
jd }||d< ||d< |	|d< |j||||
|td	| d dddd d S )Nr   r   r   c                 S   sZ   d}t | jD ]F}| |tjd d   | |tjdd     d } |tjd d  7 }q| S )Nr"   r   r'   r   )r   ndimr/   Z	index_exp)rE   slrA   r"   r"   r#   	midpoints  s    z&TestVoxels.test_xyz.<locals>.midpoints)   r-  r-  g      0@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   rcgcbcZspherer   r"   r"   r#   test_xyz  s     	(zTestVoxels.test_xyzc                 C   s\  t d\}}}t d}tjddid\}}t tddfD ]\}|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 )Nr*   )r)   r+   r,   r   r   r   r  )r  filledr  r  )r2  )r2  rE   rF   rG   )r/   r  Zonesr-   r   r   r  rz  r{  	TypeErrorAttributeError)r  rE   rF   rG   r2  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(  r1  r6  r"   r"   r"   r#   r    s   






 r  c            
      C   s
  ddgddgddg  } }}ddgd	d
gddg  }}}t  }|jdd}|| ||}|d }	tj| ||f|	  |	||| tj|||f|	  |		|  |	
| |	j|dd tj| ||f|	  |	jddd tj| |t|f|	  d S )Nr   r'   r)   r+   r,   r(   r   r   r   r  rd   rF  r   r   rG   r9  )r-   rH   rI   r   r/   r   r   Zget_data_3dZset_data_3dZ	set_xdataZ	set_ydataZset_3d_propertiesrx   )
rE   rF   rG   Zx2y2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'   rd   rd   )r'   rd   rd   rd   )r'   r'   r'   rd   )rI   r   Zinvert_yaxisr   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   r   r'   r   )	r-   r   Zxaxis_invertedZyaxis_invertedZzaxis_invertedr   r   r   r  rO   r"   r"   r#   test_inverted_claG  s    r?  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 )NrE   rs   )rj  r   rF   rG   )r-   rH   r   Ztick_paramsr   r   r  r  Z	tick1line_colorr  r  )r;   r!   r  r"   r"   r#   test_ax3d_tickcolour[  s    
rA  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,   r(   r   r   r   g    cAg   @cA)rE   rF   rG   r   r   plain)rj  r   r'   )r   r)   )rj  Z	scilimitsr)   zaxes.formatter.useoffset)rj  Z	useOffsetr+   zaxes.formatter.use_locale)rj  Z	useLocalezaxes.formatter.use_mathtext)rj  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"   rD  r#   get_formatters~  s    z-test_ticklabel_format.<locals>.get_formattersr  r  r  )r  r  r  F)r   rZ   r   r8   Zticklabel_formatr   r?  Zset_scientificZset_powerlimitsZset_useOffsetZset_useLocaleZset_useMathText)	r   r    r<   r!   rowrC  rF  rE  fmtr"   r"   r#   test_ticklabel_formatl  sN    



rI  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'   rk  rg   )r'   rg  r   r   )r   r  )r/   r   rm   	ones_liker8   rI   r  )r   r    r  rE   rF   rG   r  r  r  r;   r   r!   r"   r"   r#   test_quiver3D_smoke  s    
rK  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)	r-   rH   rI   Z
set_xticksZset_xticklabelsZ
set_yticksZset_yticklabels
set_zticksZset_zticklabelsrD  r"   r"   r#   test_minor_ticks  s    rO  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+   r(   r   r      rk  )zuplimszlolimsZ
erroreveryN)
r/   rm   r   r   r   r-   rH   rI   r&  errorbar)
r   rE   rF   rG   r;   r!   ZesteprA   rQ  rR  r"   r"   r#   test_errorbar3d_errorevery  s    *rT  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,   r(   )r   r   r   r   r   r+   )FTFTT)TFFTFTpurplezError lines)rE   rF   rG   ZxerrZyerrZzerrZcapsizerQ  rR  ZyuplimsZecolorrC   N)r-   rH   rI   rS  legend)r;   r!   r  r  r"   r"   r#   test_errorbar3d  s    rW  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   r~   Zconstrained_layoutr   r   r  )orientationzorientation=rc   r'   zC4-.ZC1Dr  )linefmtZ	markerfmtZbasefmtrY  r  )r   Zmarkeredgewidth)r-   r   r/   r   r   r   r   r8   stemrJ   rJ  setZset_linewidth)r;   r<   r   rE   rF   rG   r!   ri   Z
markerlineZ	stemlinesZbaseliner"   r"   r#   test_stem3d  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   )r4   r2   r   r   r)   r   r   r'   rk   ra   offr[  )r1   r4   r2   r-   rH   rI   r/   r   r   outerr   r   rJ  r   r0   r3   r5   r6   r7   r8   r  
get_xlim3d
get_ylim3d
get_zlim3dr   r   r_  r`  r   rj  r:   )r4   r2   r;   r!   r  r  rE   rF   rG   r=   r   r  ZxyzlimZXYZlimr"   r"   r#   test_equal_box_aspect  s,    $$



rc  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,   r(   Tr   r   rX  r(   
horizontal)r!   rY  rk  )r-   r   rn  r/   r   r  r@  r   r   r!   get_positionZextents)Z	num_plotsr;   r<   r!   Zp_triZcbarr"   r"   r#   test_colorbar_pos  s    



rf  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  ri  )r-   rH   rI   r   rN  Zget_zlim)r;   r   r   r"   r"   r#   test_shared_axes_retick"  s    rj  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_lim1  s    ztest_pan.<locals>.convert_limr   r   r   )ZbuttonZxdataZydatar'   N)r-   rH   rI   r   r   r   r`  ra  rb  Z_button_pressr   r   ZMIDDLEZ_on_moverz  Zapprox)rl  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,    rm  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   )re   r   r   )r/   r0   r3   r1   r4   rm   TrI   r   r   r   changed)
r   r    rE   rF   rG   re   r   Zsc_testr   Zsc_refr"   r"   r#   test_scalarmap_updateT  s    
rq  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   rC   )r-   rH   Z
subfiguresrI   )r;   Zsfr!   r"   r"   r#   test_subfigure_simplej  s    rs  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& |d' qd S )(N   r   r      F)rS   )r   r(   r   )r(   r(   r   )r(   r   r   whiteblackr'   )r.  r/  zorder)r)   r)   )r   r,   rs   r)   )re   rz  )r+   r+   )r'   r+   rd   )r   r   )r   ri        r   r   r   r   ru   r   )rk   rl   r   rz  r(   z--rt   )r$  Z	linestylerk   rz  r+   r,   rc   r   rV   r^  )r-   rH   rI   rt  r   r  r  r   r   r   r   r   r/   r   r"  r   r   r   r   r   r\   rj  )r;   r   r   Zcornersr!   ZtriZax3Zax4dimr   r   r   angleZX2ZY2ZZ2ZX3ZY3ZZ3r=   r  thrE   rF   rG   r"   r"   r#   test_computed_zorderr  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   rd   r   u   x=1.8066, y=1.0367, z=−0.0553rb   rF   )rY   vertical_axisu"   x=9.1651, y=−0.9215, z=−0.0359)r-   rH   rI   r/   rm   r   r   r   r   Zformat_coordr\   r;   r!   rE   r"   r"   r#   test_format_coord  s    



r  c                  C   sN   t  } | jdd}td}||t| | j  |	 dksJJ d S )Nr   r   rd   )FTF)
r-   rH   rI   r/   rm   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   rk  )rk  rk  rk  r   r  )r   rk  r  r   )rE   )r   rk  r  )rF   )r   r   r  rG   )r   r   r   )r-   rH   rI   r  rO   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   rE   r   rF   rG   )r'   z'Cannot pass both positional and keyword)rE   rF   )r'   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   )rz  r{  r-   rH   rI   r  )errr  r   r  r;   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  )rI   r   r   Ztext_2d_to_3dr  Zget_position_3dZText3D)r   r    r!   txtZt3dr"   r"   r#   test_text_3d  s    

r  c                  C   s>   t  } | jdd}|dgdggdgdggdgdgg d S )Nr   r   r   r'   )r-   rH   rI   r   rO   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   rF   rG   ri   r9  )rI   r   Zunit_rectangler   r   pathpatch_2d_to_3dr  ZPathPatch3D)r   r    r!   pathpatchZpp3dr"   r"   r#   test_pathpatch_3d  s    
r  zscatter_spiral.png)ru  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(   r4  )r-   rH   rI   r/   r   r   r   r   r   r   r   )r;   r!   r  scr"   r"   r#   test_scatter_spiral&  s
    ,r  c                  C   sn   t jddddddf \} }t |d t | d  }t }|jddd}|j|| |d	d
}|  d S Nr'   rd   y              Y@r+   r)   rn  r   r   Zhot)r   )	r/   r  r   r   r-   rH   rI   r   r  rF   rE   r<  r;   r!   r=   r"   r"   r#   #test_Poly3DCollection_get_facecolor3  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   r-   rH   rI   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   )rW   rX   rY   r  )rtolN)r-   subplotr\   rH   r   r   Zget_projr/   r   r  r9   Z	get_xaxisZ	get_yaxisZ	get_zaxisr  get_dataZ_get_tickdirr   )r  Zproj_expectedZaxis_lines_expectedZtickdirs_expectedr  r!   Zproj_actualrA   rj  Zaxis_line_expectedZaxis_line_actualZtickdir_expectedZtickdir_actualr"   r"   r#   test_view_init_vertical_axisI  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?rc   rd   r2  )r   heightr~  Ztheta1Ztheta2r   rG   r  )r-   r  mpatchZArcr  r   r  )r!   r  r"   r"   r#   test_arc_pathpatch  s    

r  )r'   )	functoolsr1   rz  Zmpl_toolkits.mplot3dr   r   r   r   Z
matplotlibr   Zmatplotlib.backend_basesr   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pyplotr-   numpyr/   partialr:  r$   rB   rP   r_   rr   rz   r   r   r   r   r   r   r   markZparametrizer   r   r   r   r   r   r   r  r  r  r  r  r0  r6  r8  r:  rA  rE  rT  rX  rb  rd  rp  rr  rw  rx  ry  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  r=  r>  r?  rA  rI  rK  rO  rT  rW  r]  rc  rf  rj  rm  r   contextrq  rs  r  r  r  r  r|  tupler3  r  r  r  r  r  r  r  r  r  r"   r"   r"   r#   <module>   s  









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


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

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