o
    u#gE                    @   s  d dl Z d dlZd dlZd dlZd dlmZmZmZmZ d dl	Z
d dlmZ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-e)dgddddd  Z.e)d!gdddd"d# Z/e)d$gdddd%d& Z0d'd( Z1e)d)gde2 d*krd+nd d,d-d. Z3e)d/gddd0d1 Z4d2d3 Z5e)d4gddd5d6 Z6e)d7gddd8d9 Z7d:d; Z8e)d<gde2 d=v r
d>nd d,d?d@ Z9e)dAgdddBdC Z:e)dDgdddEdF Z;e)dGgdddHdI Z<ej=>dJdKg dLgdMg dNgdOg dPggedgddQdR Z?e)dSgdTddUdVdW Z@dXdY ZAe)dZgddd[d\ ZBedgdd]d^ ZCd_d` ZDe)dagdddbdc ZEedgdddde ZFe)dfgdddgdh ZGe)digdddjdk ZHe)dlgdddmdn ZIedgddodp ZJedgddqdr ZKej=>dsddgedgddtdu ZLej=>dvdwdxgedgddydz ZMedgdd{d| ZNe)d}gd~ddUdd ZOe)dgdddd ZPedgdddd ZQe)dgdddd ZRe)dgdddd ZSedgddd ZTedgddd ZUe)dgdddd ZVe)dgddddd ZWedgddd ZXe)dgdddUdd ZYe)dgdddUdd ZZe)dgdddd Z[e)dgdddd Z\e)dgdddd Z]dd Z^dd Z_e)dgddd,dd Z`edgddd Zae)dgdddd Zbe)dgdddd Zcdd Zdedgddd Zedd Zfe)dgdddd ZgddĄ Zhe)dgddddǄ Zie)dgddddʄ Zje)dgdddd̈́ Zkddτ Zlddф Zme)dgdddddԄ Zne)dgdddddׄ Zoe)dgdddddڄ Zpdd܄ Zqddބ Zrdd ZsdUddZte)dgdddd Zue)dgdddd Zvdd Zwdd Zxej=>ddej=>dddd Zydd Zze)dgddddd Z{e)dgddddd Z|e)dgdddd Z}ej=>de'j~e'jgej=>d g ddd ZG dd dZdd Zedgddd	 Zd
d Zdd Zedgddd Zedgddd Zedgdddd Ze)dgddd,dd Ze)dgde2 d*kr.dTnd d,dd Zedgddd,dd Zedgddd d! Zd"d# Zd$d% Zd&d' Zedgdd(d) Zd*d+ Zd,d- Zd.d/ Zej=>d0d1ejdd2fd1ejd3d4fd1ejd5d6fd1ejdd7fd8ejdd9fd8ejd3d:fd8ejd5d;fgd<d= Ze
jdedgdd>d? Zd@dA ZedBgddgddCdDdE ZdFdG ZdHdI ZdJdK ZdLdM Zej=>dNedOi dPfedQi dPfedRi dPfee d3dSidPfee d5dSidPfee dTdSidPfedUd3didVfedUdddddVfedUdddWdVfedXi dYff
dZd[ Zedgdd\d] Zd^d_ Zedgdd`da Zedbgdddcddde Zdfdg Zdhdi Zdjdk Zej=>dldTg dmg dng dog dpgdqdrgdsdtgfdudrgdtdtgfdudugdtdvgfgg dwfd5g dxg dyg dog dzgdudrgdvdvgfdrdrgdtdvgfd{dugd|dvgfgg d}fd3g d~g dg dog dgdudugdvdtgfdrdqgdvd|gfdrdugdvdvgfgg dfgdd Zej=>dg ddeddfddZej=>dd3g dfd5g dfdTg dfgdd Zedgdddcdd Zedgdddcdd Zedgddd Zdd Ze)dgdddd Zdd Zdd ZdS (      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 ](\}}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rptsstartend r*   /var/www/static.ux5.de/https/Moving-Object-Detection-with-OpenCV/env/lib/python3.10/site-packages/mpl_toolkits/mplot3d/tests/test_axes3d.pyplot_cuboid   s    $$r,   png)
extensionsc                 C   s    | j tddd}|d d S )N3d
projection
subplot_kwF)subplotsdictset_visiblefig_testfig_refr$   r*   r*   r+   test_invisible_axes%   s   r:   zgrid_off.pngmpl20r   c                  C   "   t  } | jdd}|d d S Nr/   r0   F)pltfigureadd_subplotgridfigr$   r*   r*   r+   test_grid_off+      rE   zinvisible_ticks_axis.pngc                  C   sX   t  } | jdd}|g  |g  |g  |j|j|jfD ]}|j	
d q!d S r>   )r?   r@   rA   
set_xticks
set_yticks
set_zticksxaxisyaxiszaxisliner6   )rD   r$   axisr*   r*   r+   test_invisible_ticks_axis2   s   


rO   zaxis_positions.pngFc                  C   s~   g d} t jddddid\}}t| | D ]%\}}|j|j|jfD ]}|| || q#| }|j	ddd|d	 qd S )
N)upperlowerbothnoner   r1   r/   r2   xyz)xlabelylabelzlabeltitle)
r?   r4   r#   flattenrJ   rK   rL   set_label_positionset_ticks_positionset)	positionsrD   axsr$   posrN   rZ   r*   r*   r+   test_axis_positions=   s   
rb   zaspects.pngc                  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 ]\}}|| |  |d |j| | dd q3|d d d d S )N)autoequalequalxyequalyzequalxzrd   r      r1   r/   r2   r   )r   r      r%   r   r   r   r   rh      rj   datalim
adjustablezequal (cube))r?   r4   r[   r,   	enumerate	set_titleset_box_aspect
set_aspect)aspects_r`   r$   ir*   r*   r+   test_aspectsI   s   
ry   zaspects_adjust_box.pngc                  C   sh   d} t jdt| ddidd\}}t|D ]\}}t|g dd || |  |j| | d	d
 qd S )N)rc   rd   re   rf   rg   r   r1   r/   )   rh   )r3   figsize)rn   rh   rj   rk   boxrp   )r?   r4   lenrr   r,   rs   ru   )rv   rD   r`   rx   r$   r*   r*   r+   test_aspects_adjust_boxZ   s   
r~   c                  C   sZ   t  } | jdd}|d |d |d |d |d t|dks+J d S )	Nr/   r0   labelrZ   rT   rU   rV   zV<Axes3D: label='label', title={'center': 'title'}, xlabel='x', ylabel='y', zlabel='z'>)	r?   r@   rA   	set_labelrs   
set_xlabel
set_ylabel
set_zlabelreprrC   r*   r*   r+   test_axes3d_reprg   s   




r   zaxes3d_primary_views.pngarm64皙?)r   tolc                  C   s   g d} t jddddid\}}t|jD ],\}}|d |d |d	 |d
 |j| | d | | d | | d d qt 	  d S )N))Z   r   )r   r   r   r   r   r   )r   r   r   )r   r   r   )r      r   r   rh   r1   r/   r2   rT   rU   rV   orthor   r   elevazimroll)
r?   r4   rr   flatr   r   r   set_proj_type	view_inittight_layout)viewsrD   r`   rx   r$   r*   r*   r+   test_axes3d_primary_viewst   s   



*r   z	bar3d.pngc               
   C   sv   t  } | jdd}tg dg dD ]%\}}td}td}|gt| }d|d< |j|||dd	|d
d qd S )Nr/   r0   )r&   gbrU   )      
   r   r   cr   rU   edge皙?)zszdiraligncoloralpha)r?   r@   rA   r#   r   aranger}   bar)rD   r$   r   rV   xsyscsr*   r*   r+   
test_bar3d   s   

r   c               
   C   s\   t  } | jdd}dD ]}tt|}t|}t|}|j|||ddd|d qd S )Nr/   r0   )redgreenblueyellowr   r   )r?   r@   rA   r   r   r}   
zeros_likebar3d)rD   r$   r   r   r   r   r*   r*   r+   test_bar3d_colors   s   

r   zbar3d_shaded.pngc               
   C   s   t d} t d}t | |\}}| | }}|| d }g d}tjtdt| d}|jdt|t	ddd}t
||D ]\}\}	}
}|j|||d	 dd|d
d |j|	|
|d qD|j  d S )Nrn   rj   r   ))r   ir   )r   r   r   )r   r   ),  r   r   r{   r/   r0   r2   r   Tshader   )r   r   meshgridravelr?   r@   	figaspectr}   r4   r5   r#   r   r   canvasdraw)rT   rU   x2dy2drV   r   rD   r`   r$   r   r   r   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/   r0   rn   rj   r   r   Fr   )
r?   r@   rA   r   r   r   r   r   r   r   )rD   r$   rT   rU   r   r   rV   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/   r0   r   r   )azdegaltdeg)rh   rn   c                    s   g | ]	}t |  qS r*   )r	   coolwarm).0rx   arear*   r+   
<listcomp>       z*test_bar3d_lightsource.<locals>.<listcomp>T)	rT   rU   rV   dxdydzr   r   lightsource   rn   )r?   r@   rA   mcolorsLightSourcer   r   r   r   ranger   testingassert_array_max_ulp_facecolor3d)
rD   r$   lslengthwidthrT   rU   r   r   
collectionr*   r   r+   test_bar3d_lightsource   s   
 r   zcontour3d.png)aarch64ppc64les390xgMb`?c                  C   s   dt jd< t  } | jdd}td\}}}|j|||ddtjd |j|||d	d
tjd |j|||ddtjd |j	d
dd
dddd d S )NTaxes3d.automarginr/   r0   r   rV   r   offsetcmaprT   rU   (   d   )xminxmaxyminymaxzminzmax)
r?   rcParamsr@   rA   r   get_test_datacontourr	   r   rN   rD   r$   XYZr*   r*   r+   test_contour3d   s   
r   zcontour3d_extend3d.pngc               	   C   sp   dt jd< t  } | jdd}td\}}}|j|||ddtjdd |	d	d
 |
dd |dd d S )NTr   r/   r0   r   rV   r   )r   r   r   extend3dr   r   r   P   )r?   r   r@   rA   r   r   r   r	   r   set_xlimset_ylimset_zlimr   r*   r*   r+   test_contour3d_extend3d   s   
r   zcontourf3d.pngc                  C   s   dt jd< 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 )NTr   r/   r0   r   rV   r   r   rT   r   rU   r   r   )r?   r   r@   rA   r   r   contourfr	   r   r   r   r   r   r*   r*   r+   test_contourf3d   s   
r   zcontourf3d_fill.pngc                  C   s   dt jd< 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 )NTr   r/   r0   r         ?r   皙?rj   皙)r   levelsr   ri   r   )r?   r   r@   rA   r   r   r   clipr   r	   r   r   r   r   r   r*   r*   r+   test_contourf3d_fill  s   
$r  zextend, levelsrR   )r   rn   r   min)r   rn   r      max)r   r   rn   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 qbd S )Nr   r   r   viridisr      r      )vminvmaxr   r/   r0   r   )r   r   rn   r   r  extendr   )r   r   r   mpl	colormapscopy	set_underset_overrA   r   r   r   r   )r8   r9   r  r   r   r   r   r   kwargsax_refax_testr$   r*   r*   r+   test_contourf3d_extend  s   $r  ztricontour.png{Gz?)r   r   c                  C   s   dt jd< 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 )
NTr   i!N,        ?r   r   r/   r0   )
r?   r   r@   r   randomseedrandrA   
tricontourtricontourf)rD   rT   rU   rV   r$   r*   r*   r+   test_tricontour2  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/   r0   )r   r   r  r   r   r   r  )r?   r@   rA   r   linspacer  randintr   )rD   r$   nxnyrT   rU   rV   r*   r*   r+   test_contour3d_1d_inputB  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/   r0   rn   r   r   r   r   )	r?   r@   rA   r   r  pisincosplot)rD   r$   thetarV   r&   rT   rU   r*   r*   r+   test_lines3dM  s   r*  c                 C   s<   | j dd}|dgdgd |j dd}|ddd d S )Nr/   r0   r   orA   r(  r8   r9   ax1ax2r*   r*   r+   test_plot_scalarY  s   r0  c                  C   s|  t jtdd tdg g  W d    n1 sw   Y  t jtdd tg dg  W d    n1 s7w   Y  t jtdd tg g d W d    n1 sUw   Y  tg g g } t jtdd | dg g  W d    n1 szw   Y  t jtdd | g dg  W d    n1 sw   Y  t jtdd | g g d W d    d S 1 sw   Y  d S )Nz	x must bematchr   z	y must bez	z must be)pytestraisesRuntimeErrorr   Line3Dset_data_3d)rM   r*   r*   r+   test_invalid_line_dataa  s&   "r8  zmixedsubplot.pngc            	   	   C   s   dd } t ddd}t ddd}dtj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+   ft  s    ztest_mixedsubplots.<locals>.f              @r   r  Tr          @r   r   r   bozk--r   )markerfacecolorr/   r0   rj   r   r   r   F)rcountccount	linewidthantialiasedri   )r   r   r?   r   r@   r   rA   r(  rB   r   hypotr&  plot_surface
set_zlim3d)	r;  t1t2rD   r$   r   r   Rr   r*   r*   r+   test_mixedsubplotsr  s    
 
$
rL  c                 C   sP   | j dd}|jddddd |   |j dd}|  |jddddd d S )Nr/   r0   r  zsome strings)rA   textr   r-  r*   r*   r+   test_tight_layout_text  s   rP  zscatter3d.pngc                  C   s   dt jd< 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 )NTr   r/   r0   r   r&   r+  )r   markerr   r   ^r   ri   r   r?   r   r@   rA   scatterr   r   rD   r$   rT   rU   rV   r*   r*   r+   test_scatter3d  s   
rV  zscatter3d_color.pngc                  C   s   dt jd< 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 )NTr   r/   r0   r   r&   rS   r+  )	facecolor	edgecolorrQ  r   r   rN  )r   rQ  rS  rC   r*   r*   r+   test_scatter3d_color  s   
"
rY  zscatter3d_linewidth.pngc                  C   sD   t  } | jdd}|jtdtdtddtdd d S )Nr/   r0   r   r+  )rQ  rD  )r?   r@   rA   rT  r   r   rC   r*   r*   r+   test_scatter3d_linewidth  s
   

rZ  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/   r0   r   r+  rQ  )rQ  
linewidths)rA   rT  r   r   set_linewidthsr9   r8   r  r   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
  | s1J |d | r<J |	t
dd |d | j dd}|jtdtdtdddddd	gd
 dddd
 d S )Nr/   r0   r   r+  r[  C1C2333333?ffffff?rj   FK   rh   )rQ  rW  rX  r   
depthshaderN  r\  )rA   rT  r   r   set_facecolorset_edgecolor	set_alphaget_depthshadeset_depthshade	set_sizesfullr]  r^  r*   r*   r+   test_scatter3d_modification  s"   




rm  re  c                 C   s0  t jddddf \}}t |j|j}t |jd}d|ddddddf< d|ddddddf< t |jd}d	|dd
dd
f< d|ddddf< d|ddddf< t |jd}d|dd
dd
f< d|d
ddd
f< d|d
dd
df< t |jd}	d
|	ddddddf< d
|	ddddddf< dd |||||||	fD \}}}}}}}	| jdd}
dd ||||	fD }tj	| D ]7\}}}}||k||kB ||kB |	|kB }t j
j||td}t |t|j }|
j|||||||d|d	 q|jdd}|j|||||||	d|d	 dS )z1Test that marker properties are correctly sorted.Nr      r   r   r   r   C0r`  rj   ra  r   rn   C3C4C5C6	   C7c                 S   s   g | ]}|  qS r*   )r[   r   ar*   r*   r+   r     s    z*test_scatter3d_sorting.<locals>.<listcomp>r/   r0   c                 s   s    | ]}t |V  qd S )N)r   uniquerv  r*   r*   r+   	<genexpr>  s    z)test_scatter3d_sorting.<locals>.<genexpr>dtype)rN  fceclwr   re  )r   mgridr   sizereshapeshaperl  rA   r   r   mamasked_arrayfloatrepeatr    maskrT  )r9   r8   re  rU   rT   rV   sizes
facecolors
edgecolorsr\  r  setsrN  r|  r}  r~  subsetr  r*   r*   r+   test_scatter3d_sorting  sN   
r  r   i   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.
    ri   r   r   r   rU   r/   r0     rN  r   r   N)rA   rT  r   r8   r9   r   rT   rU   rV   r   r$   r*   r*   r+   $test_marker_draw_order_data_reversed  s   	<r  c              	   C   s   d}ddg}ddg}ddg}ddg}| j dd}|  |j|||d	|d
 |jd|d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.
    r  ri   r   r   r   rU   r/   r0   r  r  r   Nr   )rA   set_axis_offrT  r   r  r*   r*   r+   #test_marker_draw_order_view_rotated1  s   r  zplot_3d_from_2d.pngg~jt?c                  C   sT   t  } | jdd}tdd}tdd}|j||ddd |j||ddd d S )	Nr/   r0   r   rj   r   rT   r   r   rU   )r?   r@   rA   r   r   r(  )rD   r$   r   r   r*   r*   r+   test_plot_3d_from_2dI  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t jd< |dd | j|ddd d S )NFzpcolormesh.snapr/   r0   rA  rj   r   r   r   )rB  rC  r   r~  rE  Tr   )\()\(?r  )shrinkaspect)r?   r   r@   rA   r   r   r   rF  r&  rG  r	   r   r   colorbar)rD   r$   r   r   rK  r   surfr*   r*   r+   test_surface3dS  s   


r  z(surface3d_label_offset_tick_position.pngc                  C   s   dt jd< t  jdd} tjddtj dddtj df \}}ttt	|t	| }| j
|d	 |d
 |d dddd | d | d | d | jj  d S )NTr   r/   r0   r   r   r   rn   g     j@g    .Ag    חAautumnr   )r   cstriderstridezX labelzY labelzZ label)r?   r   r@   rA   r   r  r%  sqrtr!   r'  rG  r   r   r   r   r   )r$   rT   rU   rV   r*   r*   r+   )test_surface3d_label_offset_tick_positionf  s   
* "


r  zsurface3d_shaded.pngc               
   C   s   t  } | jdd}tddd}tddd}t||\}}t|d |d  }t|}|j|||ddg ddd	d
 dt j	d< |
dd d S )Nr/   r0   rA  rj   r   r   )r   r   r   r   F)r  r  r   r~  rE  Tr   r  r  )r?   r@   rA   r   r   r   r  r&  rG  r   r   )rD   r$   r   r   rK  r   r*   r*   r+   test_surface3d_shadedv  s   


r  zsurface3d_masked.pngc                  C   s   t  } | jdd}g d}g d}t||\}}tg dg dg dg dg d	g d
g dg dg}tj|d}tj	|
 | d}tjd ||}|j||||d |ddd d S )Nr/   r0   )r   r   rh   rn   rj   r   r  r  rt  r   rz   )r   r   rh   rn   rj   r   r  r  )ri   r   r   r   r   r   r   r   r   r   r   )ri   r   r   rh   rn   rn   rn   rh   r   r   r   )ri         rn   rj   r   r  r   rj   rn   rh   r  )ri   r  r  r  rz      rz   r  r  r  r  )ri   r  r  rt  r      r   rt  r   r  r  )ri   r  r  r  r  r   r  r  rz   r  r  )ri   r  r  r        r  r      r  r  )ri   r  r  r  r        rn  r  r  r  r   )r
  r	  plasmar  r   r   )r?   r@   rA   r   r   r   r  masked_lessr   	Normalizer  r  r  r  rG  r   )rD   r$   rT   rU   matrixrV   normr
   r*   r*   r+   test_surface3d_masked  s*   r  c           	      C   s   t ddd}t ddd}t |t | }|dk}t jj||d}| jdd}|||| |||| t j	 ||<  ||< ||< |jdd}|||| |||| d S )Nr   r   r   )r  r/   r0   )
r   r  r&  r'  r  r   rA   rT  r(  nan)	r8   r9   rT   rU   rV   r  z_maskedr  r  r*   r*   r+   test_plot_scatter_masks  s   r  c                 C   s`   t t dt d\}}|| }| jdd}|j|||d d |jdd}|||| d S )Nrj   r/   r0   r  )r   r   r   rA   rG  )r8   r9   rT   rU   rV   r  r  r*   r*   r+   test_plot_surface_None_arg  s   r  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/   r0   igffffff@r   r   rn   r  r  <   r   )	r?   r@   rA   r   r  r  r  rG  r   rU  r*   r*   r+   test_surface3d_masked_strides  s   r  z
text3d.pngc                  C   s   t  } | jdd}d}d}d}d}t||||D ]\}}}}	d|||	|f }
||||	|
| q|jdddd	d	d
 |jddd|jd dt jd< |dd |	dd |
dd |d |d |d d S )Nr/   r0   NrT   rU   rV   r   r   r   rl   r   r   rn   rt  r  r   r   rn   r  r  r   r   rn   r   rj   r   r   r  z(%d, %d, %d), dir=%sr   r   r   r   gffffff?z2D Text)	transformTr   r   r   zX axiszY axiszZ axis)r?   r@   rA   r#   rO  text2D	transAxesr   
set_xlim3d
set_ylim3drH  r   r   r   )rD   r$   zdirsr   r   r   r   rT   rU   rV   r   r*   r*   r+   test_text3d  s$   


r  c                 C   s  d}d}d}d}|j dd}|dd |dd |dd t||||D ]$\}}}	}
|dddd	| d
|	 d
|
 d| }|j||	|
f|d q'| j dd}|dd |dd |dd t||||D ]\}}}	}
|j||	|
d	| d
|	 d
|
 d| |d qkd S )Nr  r  r  r  r/   r0   r   r   (z, z), dir=)r   )rA   r  r  rH  r#   rO  set_position_3d)r9   r8   r  r   r   r   r  r   rT   rU   rV   r:  r  r*   r*   r+   test_text3d_modification  s$   (.r  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endpoint.r   rN   r/   r0   皙?)r   rD  )r   r  r%  r  newaxisappendr'  r[   r&  r?   r@   rA   plot_trisurfr	   jet	n_anglesn_radiiradiianglesrT   rU   rV   rD   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 )Nr  r  r  r  r   r   Fr  .r   r  r/   r0   )r   r  r   r  )r   rD  )r   r  r%  r  r  r  r'  r[   r&  r?   r@   rA   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/   r0   r      rB  rC  r?   r@   rA   r   r   plot_wireframer   r*   r*   r+   test_wireframe3d     r  zwireframe3dzerocstride.pngc                  C   <   t  } | jdd}td\}}}|j|||ddd d S )Nr/   r0   r   r  r   r  r  r   r*   r*   r+   test_wireframe3dzerocstride&  r  r  zwireframe3dzerorstride.pngc                  C   r  )Nr/   r0   r   r   r   r  r  r   r*   r*   r+   test_wireframe3dzerorstride.  r  r  c                  C   sh   t  } | jdd}td\}}}tt |j|||ddd W d    d S 1 s-w   Y  d S )Nr/   r0   r   r   r  )	r?   r@   rA   r   r   r3  r4  
ValueErrorr  r   r*   r*   r+    test_wireframe3dzerostrideraises6  s   "r  c                  C   s   t  } | jdd}td\}}}tt |j|||ddd W d    n1 s,w   Y  tt |j	|||ddd W d    d S 1 sLw   Y  d S )Nr/   r0   r   r   2   )r  rC  )r  rB  )
r?   r@   rA   r   r   r3  r4  r  r  rG  r   r*   r*   r+   test_mixedsamplesraises>  s   "r  zquiver3d.pngg~jth?c                  C   s   dt jd< t  } | jdd}g d}g d}tt||D ]<\}\}}tddgddgddg\}}}	| }
| }|	 }|	d	| 7 }	|j|||	|
||d
||d	 |j	|||	|d q|
dd |dd |dd d S )NTr   r/   r0   )tipmiddletail)ztab:bluez
tab:orangez	tab:green      r  r   r   )r   pivotr   r   rh   ri   rj   )r?   r   r@   rA   rr   r#   r   r   quiverrT  r   r   r   )rD   r$   pivotsr
   rx   r  r   rT   rU   rV   uvwr*   r*   r+   test_quiver3dI  s    
 r  c           	      C   sP   |j dd g  } } } } }}| j dd}|j||||||dddd	 d S )Nr/   r0   r   r  Tr   r  	normalize)rA   r  )	r8   r9   rT   rU   rV   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/   r0   ri   r   y              $@g333333?y              @g>,p ?皙ٿr   F)r  rc  r  Tr  )r?   r@   rA   r   r  r&  r%  r'  r  masked_wherer  )rD   r$   rT   rU   rV   r  r  r  r*   r*   r+   test_quiver3d_maskedg  s   (024 r  zquiver3d_colorcoded.pngc            	   	   C   st   t  } | jdd}td } } }}td }}t j||  }|j	|||||||d |
dd d S )Nr/   r0   r         $@)r
   r   )r?   r@   rA   r   zerosr   r	   Redsr  r  r   )	rD   r$   rT   rU   r   r   rV   r   r   r*   r*   r+   test_quiver3d_colorcodedy  s   r  c                  C   sp   t  } | jdd}td}|| t| |d t	|
 ds'J | j  t	|
 ds6J d S )Nr/   r0   r   r   )r  r<  r<  r   )r   r   r   r   )r?   r@   rA   r   	add_patchr   patch_2d_to_3drf  r   
same_colorget_facecolorr   r   )rD   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 |
 rIJ t dd}t dd}tg dg dg}tj||gdd|ddd}|jd	d
}|| d S )Nr   r   )r   r   r  )r<  r  r<  r  )r  r<  r<  r  rh   )r\  r/   r0   ra  rc  F)r\  rX  rW  r   re  )r   r   r   r   Patch3DCollectionrA   add_collection3drg  rf  rh  ri  rj  )r8   r9   patch1patch2r  r   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 s%w   Y  tj| td} t jtdd t|  W d    d S 1 sIw   Y  d S )Nr   r   r   r   r   r   )r   r   r   r   zlist of \(N, 3\) array-liker1  rz  )r3  r4  r  r   Poly3DCollectionr   r   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}|j|dd |j|dd d S )Nr/   r0   r  r  r   rl   r  rh   k)r  r  r   r  Tr\  rX  rW  closed)r   r  r  r  Fautolim)	r?   r@   rA   r   r   r  r   r  r  rD   r$   poly1poly2c1c2r*   r*   r+   test_poly3dcollection_closed  s   r  c                  C   sv   t g } t|  t| tjsJ |  g ksJ tjtddd\}}|	|  | 
 }t|s4J |j  d S )Nr/   r0   r2   )r   r   poly_collection_2d_to_3d
isinstancer  	get_pathsr?   r4   r5   
add_artistdo_3d_projectionr   isnanr   r   )r  rD   r$   minzr*   r*   r+   #test_poly_collection_2d_to_3d_empty  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 |j|dd |j|dd d S )Nr/   r0   r  r  r   rl   r  rh   r  r  r  r   Tr  r  F)r\  r  )r   r  r  r  )r?   r@   rA   r   r   r  r   r  rh  rf  rg  r  r  r*   r*   r+   test_poly3dcollection_alpha  s   



r%  zadd_collection3d_zs_array.pngc                  C   sL  t dt j dt j d} t ddd}|d d }|t |  }|t |  }t |||gddd}t j|d d |dd  gdd	}t	 }|j
d
d}tddt j }	t|d d d d d df d|	d}
|
t | dt j  |j|
|d d d d df d}|d usJ dtjd< |dd |dd |dd d S )Nr$  rn   r   r   r   r   ri   rh   r  r/   r0   r   twilightr   r  r   Tr   rA  rj   r   )r   r  r%  r&  r'  column_stackr  concatenater?   r@   rA   r  r   	set_arraymodr  r   r   r   r   r)  rV   r&   rT   rU   pointssegmentsrD   r$   r  lcrM   r*   r*   r+   test_add_collection3d_zs_array  s$   "$ 
r1  zadd_collection3d_zs_scalar.pngc                  C   s  t ddt j d} d}|d d }|t |  }|t |  }t ||gddd}t j|d d |dd  gdd}t	 }|j
dd}tddt j }	t|d	|	d
}
|
|  |j|
|d}|d usiJ dtjd< |dd |dd |dd d S )Nr   r   r   r   ri   r  r/   r0   r&  r'  r(  Tr   rA  rj   r$  r   )r   r  r%  r&  r'  r)  r  r*  r?   r@   rA   r  r   r+  r  r   r   r   r   r-  r*   r*   r+   test_add_collection3d_zs_scalar  s$   "

r2  c                  C   s~   t  } | jdd}ddgddgddgg}t|}|| t| d	s)J t|	 d
s3J t|
 ds=J d S )Nr/   r0   r   )r   rn   r   r   r   rh   )r   r   r   r   r   rn   )r   rn   rj   )gUUUUUUgUUUUUU @)gUUUUUUUUUUUU@)ggj@)r?   r@   rA   r   Line3DCollectionr  r   allclose
get_xlim3d
get_ylim3d
get_zlim3d)rD   r$   linesr0  r*   r*   r+   !test_line3dCollection_autoscaling"  s   

r<  c                  C   s   t  } | jdd}tg dg dg dg}t|g}|| t|	 ds-J t|
 ds7J t| dsAJ d S )Nr/   r0   r   r3  r4  UUUUUUgUUUUUU?)gSUUUUUr5  )r?   r@   rA   r   r   r   r  r  r7  r8  r9  r:  )rD   r$   r  colr*   r*   r+   !test_poly3dCollection_autoscaling1  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s%J |	d |j
ddd |jjdks9J | dksAJ d|j_d|j_t|j D ]\}}|| d	 |d	   qPd S )
Nzaxes.labelpadzX LABELr   )labelpadzY LABELzZ LABELr   r   rj   )r?   r@   add_axesr   rJ   rA  r  r   r   r   r   rL   
get_zlabelrK   rr   get_major_ticksset_padget_pad)rD   r$   rx   tickr*   r*   r+   test_axes3d_labelpad<  s   
rH  zaxes3d_cla.pngc                  C   s.   t  } | jddddd}|  |  d S )Nr   r/   r0   )r?   r@   rA   r  clarC   r*   r*   r+   test_axes3d_claS  s   rJ  zaxes3d_rotated.pngc                  C   s,   t  } | jddddd}|ddd d S )Nr   r/   r0   r   -   r   )r?   r@   rA   r   rC   r*   r*   r+   test_axes3d_rotated\  s   rL  c                  C   s   t jdddd} t jdddd}t | |\}}t jd}tjdd}|jdddd	d
}t	t
 |||| W d    d S 1 sEw   Y  d S )Nr  r   r   )num)   r   r   r   r   r/   r0   )r   r  r   r  randnr?   r@   rA   r3  r4  r  rG  )rT   rU   r   r   rV   rD   r$   r*   r*   r+   test_plotsurface_1d_raisesd  s   "rP  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_uvw_persp_transformationdot)
ErK  Vr   r  r  r  viewMperspMMr*   r*   r+   _test_proj_make_Mp  s   rZ  c                  C   s   t  } tj| }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   )
rZ  r   linalginvr   r   proj_transforminv_transformr   assert_almost_equal)rY  invMr   r   r   txstystzsixsiysizsr*   r*   r+   test_proj_transform}  s   rk  r   c                 O   s   d|ddg}dd|dg}ddd|g}t |||| \}}}	t||\}
}}}|
|f|
|f|
|fg}tj|i |\}}t|}|| t||g dD ]\}}}|||| qL||fS )Nr   )r+  rT   rU   rV   )r   ra  r#   r?   r4   r   add_collectionrO  )rY  rN  argsr  r   r   r   re  rf  rg  r+  r$   ayazr;  rD   linecrT   rU   r:  r*   r*   r+   _test_proj_draw_axes  s   
rq  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 ]\}
}}|	
|
|| qKd
tjd< |	dd |	dd d S )N0 1 2 3 0 4 5 6 7 4r[  r\  r]  r^  i  rM  r   r&   Tr   皙ɿr  )rZ  splitr   r   r   ra  rq  rT  r(  r#   rO  r?   r   r   r   )rY  tsr   r   r   re  rf  rg  rD   r$   rT   rU   r:  r*   r*   r+   test_proj_axes_cube  s   
rw  zproj3d_axes_cube_ortho.pngc                  C   s@  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 ]\}}}|||| qdtjd< |dd |dd d S )N)   r   r   r   r  r   ri   r   rr  r[  r   r]  r^     rM  r   r&   rs  Tr   i8rx  )r   r   r   rQ  rR  _ortho_transformationrT  ru  ra  rq  rT  r(  r#   rO  r?   r   r   r   )rU  rK  rV  r   r  r  r  rW  orthoMrY  rv  r   r   r   re  rf  rg  rD   r$   rT   rU   r:  r*   r*   r+   test_proj_axes_cube_ortho  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   rA  )r   g{Gzt?r   r  )r   r   r  ri   r   r   r   r   )r   world_transformationr   r   assert_allclose)r   r   r   r   r   r   rY  r*   r*   r+   
test_world  s   r  c                  C   s   t jddid\} }| dksJ d|_|jdddd |dd	gdd	gdd	g | d
ks2J |d |d |ddgddgddg | dksQJ |jdd |ddgddgddg | dkslJ d S )Nr1   r/   r2   linearr   r   r  rT   rU   rV   r   )r   r   r   皙?rt  g333333?FTr   )r   r   r   r  r  333333@rT   r  )r   r   r   r  r  r  )	r?   r4   
get_zscale_view_marginmarginsr(  
get_w_lims	autoscaleset_autoscalez_onrC   r*   r*   r+   test_autoscale  s   

r  rN   r  rc   )TFNc           
      C   s   t  }|jdd}td}tddd}||| t|d|  d}t|d|  d	}t|d
|  d	}|d u r>| n|}	|d|d |	| ksMJ |j	  tj
| d d S )Nr/   r0   r   r   r   get_autoscale_onset_limget_)r  r  )rc   )r?   r@   rA   r   r   r  rT  getattrr   r   r   assert_array_equal)
rN   rc   rD   r$   rT   rU   get_autoscale_onset_limget_lim	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 s!w   Y  tt |jddd W d    d S 1 s>w   Y  d S )Nr/   r0   perspr   focal_lengthr   r   )r?   r@   rA   r3  r4  r  r   rC   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   r1   r/   r2   r   r  r  333333?)r?   r4   r   r   inf)rD   r`   r*   r*   r+   test_axes3d_focal_length  s   r  zaxes3d_ortho.pngc                  C   r=   )Nr/   r0   r   )r?   r@   rA   r   rC   r*   r*   r+   test_axes3d_ortho  rF   r  zaxes3d_isometric.pngc               	   C   s   ddl m} m} tjtddddd\}}d}| tt||||d	D ]\}}t	|| 
 |d
 |d  krD|jt||ddi q%|jttdtd	 ddd |d d S )Nr   )r   r   r/   r   )rn   rn   rn   )r1   	proj_type
box_aspectr2   )ri   r   r   r   r   r  r  r  r   T)r   r   r   r?   r4   r5   r   r   r   r!   r    r"   r#   r   degreesarctanr  rB   )r   r   rD   r$   r&   rN  er*   r*   r+   test_axes3d_isometric  s   $ &r  value)setterside))r  left)r  right)r  bottom)r  top)rH  r  )rH  r  c                 C   s`   ||i}t  }|jdd}tt t|| di | W d    d S 1 s)w   Y  d S )Nr/   r0   r*   )r?   r@   rA   r3  r4  r  r  )r  r  r  limitrD   objr*   r*   r+   test_invalid_axes_limits-  s   
"r  c                   @   s   e Zd Zedgdddd Zedgdddd Zed	gddd
d Zedgdddd Zedgdddd Zedgdddddd Z	dd Z
dS )
TestVoxelszvoxels-simple.pngr;   r<   c                 C   sB   t jddid\}}td\}}}||k||kB }|| d S )Nr1   r/   r2   )rj   rn   rh   )r?   r4   r   indicesvoxels)selfrD   r$   rT   rU   rV   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 )Nr1   r/   r2   )rj   rj   rn   r   g      ?g](\@rh   r`  )r\  rX  ra  )r?   r4   r   r  r  r  keysrg  )r  rD   r$   rT   rU   rV   r  r  r*   r*   r+   test_edge_styleG  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.r1   r/   r2   r   r   r   r   ro  rz  z0.25rj   cyanr   r  N)r?   r4   r   r  rl  object_r  r  rD   r$   rT   rU   rV   r  r
   r*   r*   r+   test_named_colorsR  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.r1   r/   r2   r  )r   r   r   rh   rt  .r   .r   .r   r  N)r?   r4   r   r  r  r  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 sCJ |
	 D ]\}}|| sSJ d
t
|tjs[J qGd S )Nr1   r/   r2   r  r   )r   r   r   rn   )r   r   r   r  )r   r   r   r  r  zfaces returned for absent voxel)r?   r4   r   r  r!   r  r  typer5   itemsr  r   r  )r  rD   r$   rT   rU   rV   v1v2r  r
   r  coordr  r*   r*   r+   
test_alphal  s   
zTestVoxels.test_alphazvoxels-xyz.png{Gz?F)r   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 )Nr1   r/   r2   c                 S   sZ   d}t | jD ]#}| |tjd d   | |tjdd     d } |tjd d  7 }q| S )Nr*   ri   r   r>  )r   ndimr   	index_exp)rT   slrx   r*   r*   r+   	midpoints  s   z&TestVoxels.test_xyz.<locals>.midpoints)   r  r  g      0@r  r   r   )rh   r  r  r  r   r   )r  r  rD  )r?   r4   r   r  r  r  r  r  )r  rD   r$   r  r&   r   r   rcgcbcspherer
   r*   r*   r+   test_xyz~  s    	(
zTestVoxels.test_xyzc                 C   sZ  t d\}}}t d}tjddid\}}t tddfD ].}|j|fi | |jdd|i| |j||||fi | |j|||fd|i| qtjt	d	d
 |j|||||d W d    n1 sjw   Y  tjt	d	d
 ||| W d    n1 sw   Y  tt
 |j||||d W d    d S 1 sw   Y  d S )Nrm   )r   rh   rn   r1   r/   r2   r  )rX  filledr  r1  )r  )r  rT   rU   rV   r*   )r   r  onesr?   r4   r5   r  r3  r4  	TypeErrorAttributeError)r  rT   rU   rV   r  rD   r$   kwr*   r*   r+   test_calling_conventions  s"   
"z#TestVoxels.test_calling_conventionsN)__name__
__module____qualname__mpl3d_image_comparisonr  r  r  r  r  r  r  r*   r*   r*   r+   r  >  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   rh   rn   rj   r   r  r  rt  r   rz   r/   r0   rV   r  )r?   r@   rA   r(  r   r   r  get_data_3dr7  	set_xdata	set_ydataset_3d_propertiesr   )
rT   rU   rV   x2y2z2rD   r$   r;  rM   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/   r0   )r   r   r   r   )r   r   r   r   )r   r   r   r   )rA   r(  invert_yaxisr7   r*   r*   r+   test_inverted  s   r  c                  C   s   t jddid\} }| rJ | rJ | rJ |dd |dd |dd | s4J | s:J | s@J |  | rJJ | rPJ | rVJ d S )Nr1   r/   r2   r   r   )	r?   r4   xaxis_invertedyaxis_invertedzaxis_invertedr   r   r   rI  rC   r*   r*   r+   test_inverted_cla  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s1J q'|j
 D ]
}|jj	dksAJ q7|j D ]
}|jj	dksQJ qGd S )NrT   r   )rN   r
   rU   rV   )r?   r@   r   tick_paramsr   r   rJ   rD  	tick1line_colorrK   rL   )rD   r$   rG  r*   r*   r+   test_ax3d_tickcolour  s   
r  c           	      C   s  | j ddddid}|jD ]}|dd qt|g dD ]=\}}|d	 j|d
d |d j|dd |d j|tjd  d |d j|tjd  d |d j|tjd  d qdd }|j ddddid}|jD ]}|dd qlt|dgdgdgg dgD ][\}}||d	 |D ]}|d q||d |D ]}|d q||d |D ]}|	tjd   q||d |D ]}|
tjd   q||d |D ]}|tjd   qqd S )Nrn   rj   r1   r/   r2   g    cAg   @cA)rT   rU   rV   rR   r   plain)rN   r   r   )r   r   )rN   	scilimitsr   zaxes.formatter.useoffset)rN   	useOffsetrh   zaxes.formatter.use_locale)rN   	useLocalezaxes.formatter.use_mathtext)rN   useMathTextc                    s    fdd|D S )Nc                    s   g | ]	}t  | qS r*   )r  get_major_formatter)r   namer$   r*   r+   r     r   zAtest_ticklabel_format.<locals>.get_formatters.<locals>.<listcomp>r*   )r$   namesr*   r  r+   get_formatters  s   z-test_ticklabel_format.<locals>.get_formattersrJ   rK   rL   )rJ   rK   rL   F)r4   r   r   r#   ticklabel_formatr  r   set_scientificset_powerlimitsset_useOffsetset_useLocaleset_useMathText)	r8   r9   r`   r$   rowr  r  r  fmtr*   r*   r+   test_ticklabel_format  sR   



r   c                 C   s   d}t t dddt dddt ddd\}}}t | } }}t|| fdD ]\}	}
|	jdd}|j|||||||
|d	 q+d S )
Nr  gr   r  r   )r   r  r/   r0   )r   r  )r   r   r   	ones_liker#   rA   r  )r8   r9   r  rT   rU   rV   r  r  r  rD   r   r$   r*   r*   r+   test_quiver3D_smoke$  s   
r  zminor_ticks.pngc                  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/   r0   r   T)minorquartergQ?thirdr  half)	r?   r@   rA   rG   set_xticklabelsrH   set_yticklabelsrI   set_zticklabelsr  r*   r*   r+   test_minor_ticks4  s   r
  zerrorbar3d_errorevery.pngc            
   	   C   s   t ddt j d d} t | t d|  t d|  }}}t }|jdd}d	}t | j}|| dk|| d dk@ }|| dk|| d dk@ }	|j	|||d
||	|d dS )z0Tests errorevery functionality for 3D errorbars.r   r   r   r  rh   rj   r/   r0      r  )zuplimszlolims
erroreveryN)
r   r   r%  r&  r'  r?   r@   rA   r  errorbar)
r:  rT   rU   rV   rD   r$   esteprx   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/   r0   )r   r   rh   rn   rj   )r  r  r  r  r  rh   )FTFTT)TFFTFTpurplezError lines)rT   rU   rV   xerryerrzerrcapsizer  r  yuplimsecolorr   N)r?   r@   rA   r  legend)rD   r$   dr  r*   r*   r+   test_errorbar3dR  s   r  z
stem3d.pnggMb?c               
   C   s8  dt jd< 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|  q;ttj d tjd d}t|}t|}t|d g d
D ]'\}}|j	|||ddd|d\}}	}
|
d|  |jddd |
d qrd S )NTr   r   rh   )r  r   r1   r/   r{   constrained_layoutr3   r   r  )orientationzorientation=r   r   zC4-.C1Dra  )linefmt	markerfmtbasefmtr  rS   )r@  markeredgewidth)r?   r   r4   r   r  r%  r'  r&  r#   stemrs   r  r^   set_linewidth)rD   r`   r)  rT   rU   rV   r$   r   
markerline	stemlinesbaseliner*   r*   r+   test_stem3dc  s2   




r)  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 ]!\}
}tt|
| |	d |	d  kr|jt|
|d	d
i qat| | | g}t|d t|d g}|| || || |d |d tj t!dd |jddd W d    d S 1 sw   Y  d S )Nr   )r   r   r/   r0   r   r   ri   r   r   r   offrl   zArgument zoom =r1  )zoom)"r   r   r   r?   r@   rA   r   r  r%  outerr'  r&  r  rG  r   r   r    r!   r"   r#   r)  r8  r9  r:  r  r  r  r  rH  rN   rt   r3  r4  r  )r   r   rD   r$   r  r  rT   rU   rV   r&   rN  r  xyzlimXYZlimr*   r*   r+   test_equal_box_aspect  s4   $$




"r/  c                  C   s   d} t jd| ddddid\}}|D ]}|tjdtjdtjd}qt j||d	d
}|j  |j	
 jd dk sAJ d S )Nr   r   )rn   rj   Tr1   r/   r  rj   
horizontal)r$   r  r  )r?   r4   r  r   r  rO  r  r   r   r$   get_positionextents)	num_plotsrD   r`   r$   p_tricbarr*   r*   r+   test_colorbar_pos  s   



r6  c                  C   s*  t  } | jdd}|dd | rJ | dksJ | dks&J |d | r1J | dks9J | dksAJ |  | sKJ | dksSJ | dks[J |jdd | sgJ | d	ksoJ | dkswJ |jd
d | sJ | dksJ | dksJ d S )Nr/   r0   r   r   )r   r   )r   r   )r   r   )rP   )r   r   r   )rQ   )r   r   r   r   )	r?   r@   rA   r   r  get_zlim
get_zbound
set_zboundinvert_zaxisrC   r*   r*   r+   test_inverted_zaxis  s,   
r<  c                  C   s   t  } | jdd}t| dsJ |jdd t| ds$J |jdd | d	ks2J tjt	d
d |jddd W d    n1 sKw   Y  tjt	dd |jddd W d    d S 1 sjw   Y  d S )Nr/   r0   r=  r   )r   )r>  r   r   )r   r7  z"Cannot pass both 'lower' and 'min'r1  r   )r  r   z"Cannot pass both 'upper' and 'max')r  r   )
r?   r@   rA   r   r7  r8  r   r3  r4  r  rC   r*   r*   r+   test_set_zlim  s"   "r=  c           
      C   s~   d\}}}| j ddd}| j dd|d}| j ddd}|| |j|||dd	 d
D ]}|j |dd}	|	j|||d q+d S )N)rj   r   r      r/   r0      )r1   	shareview   T)r   r   r   share)r>  r?  rA  r   )rA   r@  r   )
r8   r9   r   r   r   r.  r/  ax3subplot_numr$   r*   r*   r+   test_shared_view  s   

rE  c                  C   s   t  } | jddd}| jdd|d}|ddgddgddg |ddgddgddg |g d	 | d
ks<J | d
ksDJ d S )N   r/   r0      )r1   sharezr   r   r   )r  r   r         @)r  rI  )r?   r@   rA   r(  rI   r8  )rD   r.  r/  r*   r*   r+   test_shared_axes_retick  s   rJ  c               	   C   s  dD ]} t  }|jddddd}|dd|  |jj  d}d}|t|tj	ddd |
t|tj	||j ||j d |jj  t|j}t|}t|}|j| d	 | |d	 |  kshJ |j| d	 | |d	 |  kszJ |j| ksJ qd
S )z*Test rotating using the left mouse button.)r   r   r   r/   r0   r   r   r  buttonxdataydatar   N)r?   r@   rA   r   r   r   _button_pressr   r   LEFT_on_move	_pseudo_w	_pseudo_hr   deg2radr   r'  r&  r   r   )r   rD   r$   r   r   roll_radiansr   snr*   r*   r+   test_rotate  s.   

$$rW  c                  C   s2  dd } t  jdd}|ddd |jj  | |  \}}| |  \}}| |  \}}|	t
|tjddd |t
|tjddd | |  \}}	| |  \}
}| |  \}}|	t|ksjJ |t|kssJ |t|ks|J |t|ksJ |
t|ksJ |t|ksJ dS )	z1Test mouse panning using the middle mouse button.c                 S   s   | | d }||  }||fS )z+Convert min/max limits to center and range.r   r*   )dmindmaxcenterrange_r*   r*   r+   convert_lim  s   ztest_pan.<locals>.convert_limr/   r0   r   rK  r   N)r?   r@   rA   rT  r   r   r8  r9  r:  rO  r   r   MIDDLErQ  r3  approx)r\  r$   	x_center0x_range0	y_center0y_range0	z_center0z_range0x_centerx_rangey_centery_rangez_centerz_ranger*   r*   r+   test_pan  s,   rk  ztool,button,key,expectedr+  ))r<  Q?)r  gQ?)r  {Gz?rT   ))g{Gzr   )gQrm  gQrl  rU   ))Q뱿r   )g{Gzrm  )r<  gQ?))g
ףp=
r  )g{Gzg(\?)ro  g
ףp=
?pan))gffffff(\)gp=
ףgQgRQgffffff))g
ףp=
gzG)rq  gq=
ףpݿrn  ))r  g{Gz?)gRQg(\ؿrr  c                 C   s^  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ru|  || || || n|  || || || |\}}}| tj|d
dksJ | tj|d
dksJ | tj|d
dksJ |  | 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s!J | t|ks-J d S )Nr/   r0   r   r   r   r   button_press_eventkeybutton_release_eventr+  r  )r!   )r?   r@   rA   rT  r   r   r8  r9  r:  	transDatar  astypeintr   r   r+  
press_zoom	drag_zoomrelease_zoomrp  	press_pandrag_panrelease_panr3  r^  backforwardhome)toolrL  ru  expectedrD   r$   xlim0ylim0zlim0d0d1s0s1start_event
stop_eventtbxlimylimzlimr*   r*   r+   test_toolbar_zoom_panB  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   rj   r   o   r/   r0   r   r  )r   rN  r   )r   r   r   r   r   r   TrA   rT  r   r   changed)
r8   r9   rT   rU   rV   r   r  sc_testr  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/   r0   other)r1   r   )r?   r@   
subfiguresrA   )rD   sfr$   r*   r*   r+   test_subfigure_simple  s   r  computed_zorder)baseline_imagesr   r.   r   c               
   C   s  dt jd< t  } | jddd}| jddd}d|_d}||fD ]4}tj|gd	d
dd}|| |jdddddd |j	dddddd |
d |d |d q | jddd}| jddd}d|_d}t| |f| |f\}	}
td}d}t| |fd|f\}}|| }t| |f| df\}}|| }d}d}tddtj |}|t| |t| || t| }}}||fD ]|}|j|||ddddd |j||dk  ||dk  ||dk  d d!d"dd# |j|	|
|ddddd |j|t| |t| t|d d!d
dd# |j|||dddd$d |j||dk ||dk ||dk d d!d"d%d# |jd&d'dd( |d) qd S )*NTr      r/   r0      F)r   )r   rj   r   )rj   rj   r   )rj   r   r   whiteblackr   )r  r  zorder)r   r   )r   rn   r   r   )r   r  )rh   rh   )r   rh   r   )r   r=  )r   rI        r  r   r  r  r   ri   )r   r   rD  r  rj   z--r   )r~  	linestyler   r  rh   rn   r   r   r   r*  )r?   r   r@   rA   r  r   r  r  r(  rT  r   r   r   r   r   r  r  r%  r'  r&  rG  r   rN   )rD   r.  r/  cornersr$   trirC  ax4dimr   r   r   angleX2Y2Z2X3Y3Z3r&   rY  thrT   rU   rV   r*   r*   r+   test_computed_zorder  s   




2
"
$
$r  c                  C   s   t  } | jdd}td}||t| d}d}| j  |	||dks+J |j
ddd | j  |	||d	ksAJ |
  | j  |	||dksTJ |d
 | j  |	||dkshJ |jddd | j  |	||dks~J d S )Nr/   r0   r   r   z"x=10.5227, y pane=1.0417, z=0.1444r   rU   )r   vertical_axisz!x pane=9.1875, y=0.9761, z=0.1291r   z"x=10.8869, y pane=1.0417, z=0.1528r  r  z!x=9.0620, y pane=1.0417, z=0.1110)r?   r@   rA   r   r   r(  r&  r   r   format_coordr   r   )rD   r$   rT   xvyvr*   r*   r+   test_format_coord  s(   






r  c                  C   sN   t  } | jdd}td}||t| | j  |	 dks%J d S )Nr/   r0   r   )FTF)
r?   r@   rA   r   r   r(  r&  r   r   get_axis_position)rD   r$   rT   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s&J |jdd	 | d
ks4J |jdd | dksBJ |jdd | dksPJ d S )Nr/   r0   r  )r  r  r  r   rb  )r   r  rb  r   )rT   )r   r  rb  )rU   )r   r   rb  rV   )r   r   r   )r?   r@   rA   r  rC   r*   r*   r+   test_margins)  s   
r  c                  C   sV   t  } | jdd}|ddd | dksJ | dks!J | dks)J d S )Nr/   r0   r   r  rb  )r?   r@   rA   r  get_xmarginget_ymarginget_zmarginrC   r*   r*   r+   test_margin_getters8  s   r  zerr, args, kwargs, match)ri   z!margin must be greater than -0\.5)r   ri   r   )r   r   ri   ri   rV   )r   z'Cannot pass both positional and keyword)rT   rU   rs  z*Must pass a single positional argument forc                 C   sX   t j| |d t }|jdd}|j|i | W d    d S 1 s%w   Y  d S )Nr1  r/   r0   )r3  r4  r?   r@   rA   r  )errrm  r  r2  rD   r$   r*   r*   r+   test_margins_errorsA  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s;J d S )Nr/   r0   r  zFoo bar $\int$r   r  r$  )rA   r   r   text_2d_to_3dr  get_position_3dText3D)r8   r9   r$   txtt3dr*   r*   r+   test_text_3dW  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/   r0   r   r   )r?   r@   rA   r(  rC   r*   r*   r+   test_draw_single_lines_from_Nx1e  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/   r0   )r   r  rc  r   r   rU   rV   r   r  )rA   r   unit_rectangler   r   pathpatch_2d_to_3dr  PathPatch3D)r8   r9   r$   pathpatchpp3dr*   r*   r+   test_pathpatch_3dl  s   
r  zscatter_spiral.png)r  r   r   c                  C   sp   dt jd< t  } | jdd}tddtj d d}|jt|t	||d	|d
  |d d}| j
  d S )NTr   r/   r0   r   r   r      r   rj   r  )r?   r   r@   rA   r   r  r%  rT  r&  r'  r   r   )rD   r$   r  scr*   r*   r+   test_scatter_spiraly  s   
,r  c                  C   s>   t jddid\} }tdd}|| t| |  d S )Nr1   r/   r2   r   r  )r?   r4   r   r  r   r  get_path)rD   r$   pr*   r*   r+   test_Poly3DCollection_get_path  s
   


r  c                  C   n   t jddddddf \} }t |d t | d  }t }|jddd}|j|| |d	d
}|  d S Nr   r   y              Y@rh   r   r  r/   r0   hotr   )	r   ogridr'  r&  r?   r@   rA   rG  r  rU   rT   r  rD   r$   r&   r*   r*   r+   #test_Poly3DCollection_get_facecolor     r  c                  C   r  r  )	r   r  r'  r&  r?   r@   rA   rG  get_edgecolorr  r*   r*   r+   #test_Poly3DCollection_get_edgecolor  r  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 }
tjj	|	|
|d || }|d}tj|| q4d	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/   r0   r   r   r   r   r  rtolr   N)r?   subplotr   r@   r   r   get_projr   r   r  rr   	get_xaxis	get_yaxis	get_zaxisrM   get_data_get_tickdirr  )r  proj_expectedaxis_lines_expectedtickdirs_expectedr  r$   proj_actualrx   rN   axis_line_expectedaxis_line_actualtickdir_expectedtickdir_actualr*   r*   r+   test_view_init_vertical_axis  s    D"


r  r  returnc                 C   s   t jddddd}|jddd| d |jj  | }t|tj	ddd}|
| t|tj	ddd}|| |j| |jksCJ | }tjttjj|| d	S )
zO
    Test vertical axis is respected when rotating the plot interactively.
    r   r/   r0   r   r  rK  r  r   N)r?   r  r   r@   r   r   r  r   r   rP  rO  rQ  _axis_namesindex_vertical_axisr   r   assert_raisesAssertionErrorr  )r  r$   proj_beforeevent_click
event_move
proj_afterr*   r*   r+   test_on_move_vertical_axis	  s   

r  zvertical_axis, aspect_expected)/0?F&H?r  )r  r  r  )r  r  r  c                 C   sR   t jddddd}|jddd| d |jj  |d  tjj	||j
dd d S )Nr   r/   r0   r   r  gư>r  )r?   r  r   r@   r   r   rt   r   r   r  _box_aspect)r  aspect_expectedr$   r*   r*   r+   !test_set_box_aspect_vertical_axis	  s
   	
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/   r0   )r  r  r  g?r   r   r  )r   heightr  theta1theta2r   rV   r  )r?   r  mpatchArcr  r   r  )r$   rw  r*   r*   r+   test_arc_pathpatch,	  s   

r  zpanecolor_rcparams.pngc                  C   sP   t dddd t jdd} | jdd W d    d S 1 s!w   Y  d S )	Nr&   r   r   )zaxes3d.xaxis.panecolorzaxes3d.yaxis.panecolorzaxes3d.zaxis.panecolorrs  r   r/   r0   )r?   
rc_contextr@   rA   )rD   r*   r*   r+   test_panecolor_rcparams7	  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/   r0   )r   r   rh   )r<  r<  r<  zo-Nr,  )r8   r9   r.  rT   rU   rV   r/  r*   r*   r+   "test_mutating_input_arrays_y_and_zB	  s   r  c                  C   s   t jdddg} dt jddg}ddt j dg}g dg dg dg dg}t }|jdd}|j| |||d}t| tt	t
|| ksJJ dS )	zU
    Test color parameter usage with non-finite coordinate arrays.

    GH#26236
    r   r   r   )r<  r<  r<  r   r/   r0   r   N)r   r  r  r?   r@   rA   rT  r}   get_offsetssuperr  get_facecolors)rT   rU   rV   r
   rD   r$   path3dr*   r*   r+   test_scatter_masked_color\	  s   
r  zsurface3d_zsort_inf.pngc                  C   s   dt jd< t  } | jdd}tjddddddf \}}t|d t|d  }tj||j	d d d |j	d	 d d f< |j
|||d
d |jddd d S )NTr   r/   r0   r   r   r   r   r   r  r  rK     )r   r   )r?   r   r@   rA   r   r  r&  r'  r  r  rG  r   rU  r*   r*   r+   test_surface3d_zsort_infv	  s   
*r  c                  C   sb   t jtdd  tg dg dg dgt} tj| gdd}W d    d S 1 s*w   Y  d S )NzCYou must provide facecolors, edgecolors, or both for shade to work.r1  r  r  r   Tr   )r3  r4  r  r   r   r  r   r  )r  r   r*   r*   r+   &test_Poly3DCollection_init_value_error	  s   "r  c                  C   s@   t  } | jddd}|jdddtg dd | j  d S )Nr  r/   r0   r   r   r~  r   )r?   r@   rA   rT  r   r   r   r   rC   r*   r*   r+   %test_ndarray_color_kwargs_value_error	  s   r  )	functoolsr   platformr3  mpl_toolkits.mplot3dr   r   r   r   
matplotlibr  matplotlib.backend_basesr   r   r   r	   r
   r   r   r  matplotlib.testing.decoratorsr   r   matplotlib.testing.widgetsr   matplotlib.collectionsr   r   matplotlib.patchesr   r   matplotlib.pathr   matplotlib.textr   matplotlib.pyplotpyplotr?   numpyr   partialr  r,   r:   rE   rO   rb   ry   r~   r   machiner   r   r   r   r   r   r   r   r   r  markparametrizer  r  r#  r*  r0  r8  rL  rP  rV  rY  rZ  r_  rm  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r%  r1  r2  r<  r@  rH  rJ  rL  rP  rZ  rk  rq  rw  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r
  r  r  r)  r/  r6  r<  r=  rE  rJ  rW  rk  rP  RIGHTr  r   contextr  r  r  r  r  r  r  r  tupler  r  r  r  r  r  r  r  r  r  strr  r
  r  r  r  r  r  r  r  r*   r*   r*   r+   <module>   s   
	




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









	


{


'
%!

&



=

	R	
	


2(


