
    gh                       d dl Z 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
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 jX                  edd      Z-d Z. edg      d        Z/ e-dgd      d        Z0 e-dgd      d        Z1 e-dgdd      d        Z2 e-dgdd      d        Z3 e-dgdd      d         Z4d! Z5 e-d"gdej                  d#k(  rd$nd %      d&        Z6 e-d'gd      d(        Z7d) Z8 e-d*gd      d+        Z9 e-d,gd      d-        Z:d. Z; e-d/gd ejx                         d0v rd1nd %      d2        Z= e-d3gd      d4        Z> e-d5gd      d6        Z? e-d7gd      d8        Z@ej                  j                  d9d:g d;gd<g d=gd>g d?gg       edg      d@               ZC e-dAgdBdC      dD        ZDdE ZE e-dFgd      dG        ZF edg      dH        ZGdI ZH e-dJgd      dK        ZI edg      dL        ZJ e-dMgd      dN        ZK e-dOgd      dP        ZL e-dQgd      dR        ZM edg      dS        ZN edg      dT        ZOej                  j                  dUddg       edg      dV               ZPej                  j                  dWdXdYg       edg      dZ               ZQ edg      d[        ZR e-d\gd]dC      d^        ZS e-d_gd      d`        ZT e-dagd      db        ZU e-dcgd      dd        ZV edegd      df        ZW e-dggd      dh        ZX e-digd      dj        ZY edg      dk        ZZ edg      dl        Z[ e-dmgd      dn        Z\ e-dogdd      dp        Z] edg      dq        Z^ e-drgdsdC      dt        Z_ e-dugdvdC      dw        Z` e-dxgd      dy        Za e-dzgd      d{        Zb e-d|gd      d}        Zcd~ Zdd Ze e-dgdd%      d        Zf edg      d        Zg e-dgd      d        Zh e-dgd      d        Zid Zj edg      d        Zkd Zl e-dgd      d        Zmd Zn e-dgd      d        Zo e-dgd      d        Zp e-dgd      d        Zqd Zrd Zs e-dgdd      d        Zt e-dgdd      d        Zu e-dgdd      d        Zvd Zwd Zxd ZyddZz e-dgd      d        Z{ e-dgd      d        Z|d Z}d Z~ej                  j                  dd      ej                  j                  dd      d               Z edg      d        Zd Z e-dgdd      d        Z e-dgdd      d        Z e-dgd      d        Z edg      d        Zej                  j                  de+j                  e+j                  g      ej                  j                  dg d      d               Z G d d      Zd Z edg      d        Zd Zd Z edg      d        Z edg      d        Z edgd      d        Z e-dgdd%      dĄ        Z e-dgd ejx                         dk(  rdBnd %      dǄ        Z edgddɬ%      dʄ        Z edgd      d̄        Zd̈́ Zd΄ Zdτ Z edg      dЄ        Zdф Zd҄ Zej                  j                  ddԫ      dՄ        Zdք Zej                  j                  ddej:                  ddfdej:                  ddfdej:                  ddfdej<                  ddfdej:                  ddfdej:                  ddfdej:                  ddfg      d        Zej@                  jC                  d       edg      d               Zd Z edgddgd      d        Zd Zd Zd Zd Zej                  j                  dedi dfedi dfedi dfe e       ddidfe e       ddidfe e       ddidfedddidfeddddddfedddddfedi dff
      d        Z edg      d        Zd Z edg      d        Z edgdd      d        Zd  Zd Zd Zej                  j                  ddg dg dg dg dgdd	gd
dgfdd	gddgfddgddgfgg dfdg dg dg dg dgdd	gddgfd	d	gddgfddgddgfgg dfdg dg dg dg dgddgddgfd	dgddgfd	dgddgfgg dfg      d        Zej                  j                  dg d      deddfd       Zej                  j                  ddg dfdg dfdg d fg      d!        Z ed"gdd      d#        Z ed$gdd      d%        Z edg      d&        Zd' Z e-d(gd      d)        Zd* Zd+ Zy(,      N)Axes3Daxes3dproj3dart3d)_Quaternion)MouseButton
MouseEventNavigationToolbar2)cm)colorspatches)image_comparisoncheck_figures_equal)
mock_event)LineCollectionPolyCollection)Circle	PathPatch)Path)TextTdefault)remove_textstylec                    ddg}t        j                  t        j                  t	        t        j
                  |||                  d      }|D ]  \  }}t        j                  t        j                  ||z
              |d   |d   z
  k(  s> | j                  t        |t        j                  |      z  |t        j                  |      z           y )Nr         )
	itertoolscombinationsnparraylistproductsumabsplot3Dzip)axscalerptsstartends         c/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/test_axes3d.pyplot_cuboidr.      s    	
AA

 
 $y/@/@Aq/I*J!KQ
OC H
s66"&&%&!A$1+5BIIs5%0#bhhuo2EFGH    png)
extensionsc                 ^    | j                  t        d            }|j                  d       y )N3d
projection
subplot_kwF)subplotsdictset_visiblefig_testfig_refr'   s      r-   test_invisible_axesr>   '   s&    			dd&;		<BNN5r/   zgrid_off.pngmpl20r   c                  r    t        j                         } | j                  d      }|j                  d       y Nr3   r4   F)pltfigureadd_subplotgridfigr'   s     r-   test_grid_offrI   -   s(    
**,C	D	)BGGENr/   zinvisible_ticks_axis.pngc                  <   t        j                         } | j                  d      }|j                  g        |j	                  g        |j                  g        |j                  |j                  |j                  fD ]  }|j                  j                  d        y rB   )rC   rD   rE   
set_xticks
set_yticks
set_zticksxaxisyaxiszaxisliner:   )rH   r'   axiss      r-   test_invisible_ticks_axisrS   4   su    
**,C	D	)BMM"MM"MM"288RXX. %		e$%r/   zaxis_positions.pngFc                  N   g d} t        j                  ddddi      \  }}t        |j                         |       D ]g  \  }}|j                  |j
                  |j                  fD ]$  }|j                  |       |j                  |       & | }|j                  ddd|	       i y )
N)upperlowerbothnoner   r5   r3   r6   xyz)xlabelylabelzlabeltitle)
rC   r8   r&   flattenrN   rO   rP   set_label_positionset_ticks_positionset)	positionsrH   axsr'   posrR   r_   s          r-   test_axis_positionsrg   ?   s    2I||AqlD-ABHCs{{}i0 @CHHbhh0 	)D##C(##C(	) %
c#c?@r/   zaspects.pngc                     d} t        j                  ddddi      \  }}|j                         dd D ]  }t        |g d	
        t        |d   d   g d
       t	        |j                               D ]@  \  }}|j                  | |          |j                  d       |j                  | |   d       B |d   d   j                  d       y )N)autoequalequalxyequalyzequalxzrj   r      r5   r3   r6   r   )r   r      r(   r   r   r   r   rn      rp   datalim
adjustablezequal (cube))rC   r8   r`   r.   	enumerate	set_titleset_box_aspect
set_aspect)aspects_re   r'   is        r-   test_aspectsr   K   s    IG\\!QL$+?@FAskkmAb! )Bi() Aq	+3;;=) 82
WQZ 
)$
gajY78 F1I'r/   zaspects_adjust_box.pngc                      d} t        j                  dt        |       ddid      \  }}t        |      D ]>  \  }}t	        |g d       |j                  | |          |j                  | |   d	
       @ y )N)ri   rj   rk   rl   rm   r   r5   r3   )   rn   )r7   figsize)rt   rn   rp   rq   boxrv   )rC   r8   lenrx   r.   ry   r{   )r|   rH   re   r~   r'   s        r-   test_aspects_adjust_boxr   \   su     AG||As7|t8L$+-HC 3 42Bi(
WQZ 
gajU34r/   c                     t        j                         } | j                  d      }|j                  d       |j	                  d       |j                  d       |j                  d       |j                  d       t        |      dk(  sJ y )	Nr3   r4   labelr_   rY   rZ   r[   zV<Axes3D: label='label', title={'center': 'title'}, xlabel='x', ylabel='y', zlabel='z'>)	rC   rD   rE   	set_labelry   
set_xlabel
set_ylabel
set_zlabelreprrG   s     r-   test_axes3d_reprr   i   sx    
**,C	D	)BLLLLMM#MM#MM#8	IJ J Jr/   zaxes3d_primary_views.pngdarwin皙?)r   tolc                  |   g d} t        j                  ddddi      \  }}t        |j                        D ]o  \  }}|j	                  d       |j                  d       |j                  d	       |j                  d
       |j                  | |   d   | |   d   | |   d          q t        j                          y )N))Z   r   r   r   r   r   r   r   )r   r   r   r   r   r   r      r   r   rn   r5   r3   r6   rY   rZ   r[   orthor   r   elevazimroll)
rC   r8   rx   flatr   r   r   set_proj_type	view_inittight_layout)viewsrH   re   r~   r'   s        r-   test_axes3d_primary_viewsr   v   s    E ||AqlD-ABHC388$ K2
c
c
c
!
%(1+E!HQKeAhqkJK r/   z	bar3d.pngc            
      ,   t        j                         } | j                  d      }t        g dg d      D ][  \  }}t	        j
                  d      }t	        j
                  d      }|gt        |      z  }d|d<   |j                  |||dd	|d
       ] y )Nr3   r4   )r)   gbrZ   )      
   r   r   cr   rZ   edge皙?)zszdiraligncoloralpha)rC   rD   rE   r&   r   aranger   bar)rH   r'   r   r[   xsyscss          r-   
test_bar3dr      s    
**,C	D	)B(/: J1YYr]YYr]S3r7]1
r2!#V2SIJr/   c            
         t        j                         } | j                  d      }dD ]b  }t        j                  t        |            }t        j                  |      }t        j                  |      }|j                  |||ddd|       d y )Nr3   r4   )redgreenblueyellowr   r   )rC   rD   rE   r   r   r   
zeros_likebar3d)rH   r'   r   r   r   r   s         r-   test_bar3d_colorsr      sv    
**,C	D	)B/ /YYs1v]]2]]2 	RQ1A./r/   zbar3d_shaded.pngc            
      \   t        j                  d      } t        j                  d      }t        j                  | |      \  }}|j                         |j                         }}||z   dz   }g d}t	        j
                  t	        j                  dt        |      z              }|j                  dt        |      t        d            }t        ||      D ]8  \  }\  }	}
}|j                  |||d	z  dd|d
       |j                  |	|
|       : |j                  j                          y )Nrt   rp   r   ))r   r   )r   r   r   )r   r   ),  r   r   r   r3   r4   r6   r   Tshader   )r   r   meshgridravelrC   rD   	figaspectr   r8   r9   r&   r   r   canvasdraw)rY   rZ   x2dy2dr[   r   rH   re   r'   r   r   r   s               r-   test_bar3d_shadedr      s    
		!A
		!A{{1a HCyy{CIIKCc	AAGE
**S]]1s5z>:
;C
,,	3u:4(  C #&c5/ 6T4
c37Aq!48
$T56 JJOOr/   zbar3d_notshaded.pngc            	         t        j                         } | j                  d      }t        j                  d      }t        j                  d      }t        j
                  ||      \  }}|j                         |j                         }}||z   }|j                  |||dz  dd|d       | j                  j                          y )	Nr3   r4   rt   rp   r   r   Fr   )
rC   rD   rE   r   r   r   r   r   r   r   )rH   r'   rY   rZ   r   r   r[   s          r-   test_bar3d_notshadedr      s    
**,C	D	)B
		!A
		!A{{1a HCyy{CIIKCc	AHHS#sQw1auH5JJOOr/   c                  \   t        j                         } | j                  dddd      }t        j                  dd      }d\  }}||z  }t        j                  t        j                  |      t        j                  |            \  }}|j                         }|j                         }||z   }t        |      D 	cg c]  }	t        j                  |	|z         }
}	|j                  ||ddd||
d|		      }t
        j                  j                  |
|j                  dd d
   d       y c c}	w )Nr   r3   r4   r   r   )azdegaltdeg)rn   rt   T)	rY   rZ   r[   dxdydzr   r   lightsource   rt   )rC   rD   rE   mcolorsLightSourcer   r   r   r   ranger   coolwarmr   testingassert_array_max_ulp_facecolor3d)rH   r'   lslengthwidtharearY   rZ   r   r~   r   
collections               r-   test_bar3d_lightsourcer      s   
**,C	AqT	2B			1R	0BMFEE>D;;ryy("))E*:;DAq		A		A	
QB*/+6QR[[4 6E6Aa1 %Tr  CJ JJ##E:+B+B14a4+H!L 7s   <D)zcontour3d.png)aarch64arm64ppc64les390xgMb`?c                     dt         j                  d<   t        j                         } | j                  d      }t	        j
                  d      \  }}}|j                  |||ddt        j                         |j                  |||d	d
t        j                         |j                  |||ddt        j                         |j                  d
dd
ddd       y )NTaxes3d.automarginr3   r4   r   r[   r   offsetcmaprY   rZ   (   d   )xminxmaxyminymaxzminzmax)
rC   rcParamsrD   rE   r   get_test_datacontourr   r   rR   rH   r'   XYZs        r-   test_contour3dr     s     )-CLL$%
**,C	D	)B""4(GAq!JJq!QSBKKJ@JJq!QS2;;J?JJq!QS"++J>GG2Cbt#GFr/   zcontour3d_extend3d.pngc            	      `   dt         j                  d<   t        j                         } | j                  d      }t	        j
                  d      \  }}}|j                  |||ddt        j                  d       |j                  d	d
       |j                  dd       |j                  dd       y )NTr   r3   r4   r   r[   r   )r   r   r   extend3dr   r   r   P   )rC   r   rD   rE   r   r   r   r   r   set_xlimset_ylimset_zlimr   s        r-   test_contour3d_extend3dr
     s    (,CLL$%
**,C	D	)B""4(GAq!JJq!QSBKK$JOKKRKKRKKRr/   zcontourf3d.pngc                     dt         j                  d<   t        j                         } | j                  d      }t	        j
                  d      \  }}}|j                  |||ddt        j                         |j                  |||d	d
t        j                         |j                  |||ddt        j                         |j                  d
d       |j                  d
d       |j                  dd       y )NTr   r3   r4   r   r[   r   r   rY   r   rZ   r   r   )rC   r   rD   rE   r   r   contourfr   r   r  r  r	  r   s        r-   test_contourf3dr     s    (,CLL$%
**,C	D	)B""4(GAq!KK1ac$R[[KAKK1ac#BKKK@KK1ac"2;;K?KKRKKRKKcr/   zcontourf3d_fill.pngc                     dt         j                  d<   t        j                         } | j                  d      }t	        j
                  t	        j                  ddd      t	        j                  ddd            \  }}|j                  dd      }d	|d d d
d d d
f<   |j                  |||dddgt        j                         |j                  dd       |j                  dd       |j                  dd       y )NTr   r3   r4   r         ?r   皙?rp   皙)r   levelsr   ro   r   )rC   r   rD   rE   r   r   r   clipr  r   r   r  r  r	  r   s        r-   test_contourf3d_fillr    s    (,CLL$%
**,C	D	)B;;ryyQ-ryyQ/EFDAq	q!A Acc3Q3hKKK1a4)"++KFKKAKKAKKAr/   zextend, levelsrW   )r   rt   r   min)r   rt   r      max)r   r   rt   r   c                 r   t        j                  t        j                  ddd      t        j                  ddd            \  }}|dz  |dz  z   }t        j                  d   j                         }|j                   |d             |j                   |d             dd|d	}|j                  d
      }	 |	j                  |||fdg di| | j                  d
      }
 |
j                  ||||fd|i| |	|
fD ]8  }|j                  dd       |j                  dd       |j                  dd       : y )Nr  r   r  viridisr      r      )vminvmaxr   r3   r4   r  )r   r   rt   r   r  extendr   )r   r   r   mpl	colormapscopy	set_underset_overrE   r  r  r  r	  )r<   r=   r  r  r   r   r   r   kwargsax_refax_testr'   s               r-   test_contourf3d_extendr)    s(   
 ;;ryyQ-ryyQ/EFDAq	1q!tA ==#((*DNN47MM$s)D1F  D 1FFOOAq!>O>v>""d"3GGQ1f>V>v>w 
B
B
Cr/   ztricontour.png{Gz?)r   r   c                     dt         j                  d<   t        j                         } t        j                  j                  d       t        j                  j                  d      dz
  }t        j                  j                  d      dz
  }|dz  |dz  z    }| j                  dddd	      }|j                  |||       | j                  dddd	      }|j                  |||       y )
NTr   i!N,        ?r   r   r3   r4   )
rC   r   rD   r   randomseedrandrE   
tricontourtricontourf)rH   rY   rZ   r[   r'   s        r-   test_tricontourr3  4  s    (,CLL$%
**,CIINN8
		ts"A
		ts"A
Q$A+A	AqT	2BMM!Q	AqT	2BNN1ar/   c                  &   t        j                         } | j                  d      }d\  }}t        j                  dd|      }t        j                  dd|      }t        j
                  j                  dd||g      }|j                  |||dg       y )	Nr3   r4   )r   r   r   r   r   r   r-  )rC   rD   rE   r   linspacer.  randintr   )rH   r'   nxnyrY   rZ   r[   s          r-   test_contour3d_1d_inputr9  D  sz    
**,C	D	)BFB
CR A
CR A
		!QR)AJJq!Qr/   zlines3d.pngc                     t        j                         } | j                  d      }t        j                  dt        j
                  z  dt        j
                  z  d      }t        j                  ddd      }|dz  dz   }|t        j                  |      z  }|t        j                  |      z  }|j                  |||       y )	Nr3   r4   rt   r   r  r   r   )	rC   rD   rE   r   r5  pisincosplot)rH   r'   thetar[   r)   rY   rZ   s          r-   test_lines3drA  O  s    
**,C	D	)BKKRUU
AIs3E
B3A	Q
A	BFF5MA	BFF5MAGGAq!r/   c                     | j                  d      }|j                  dgdgd       |j                  d      }|j                  ddd       y )Nr3   r4   r   orE   r?  r<   r=   ax1ax2s       r-   test_plot_scalarrH  [  sL    


$

/CHHaS1#s




.CHHQ3r/   c                  r   t        j                  t        d      5  t        j                  dg g        d d d        t        j                  t        d      5  t        j                  g dg        d d d        t        j                  t        d      5  t        j                  g g d       d d d        t        j                  g g g       } t        j                  t        d      5  | j                  dg g        d d d        t        j                  t        d      5  | j                  g dg        d d d        t        j                  t        d      5  | j                  g g d       d d d        y # 1 sw Y   =xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   sxY w# 1 sw Y   y xY w)Nz	x must bematchr   z	y must bez	z must be)pytestraisesRuntimeErrorr   Line3Dset_data_3d)rQ   s    r-   test_invalid_line_datarQ  c  sS   	|;	7  QB 	|;	7  RB 	|;	7  RQ  <<B#D	|;	7 $B#$	|;	7 $Q#$	|;	7 $R#$ $         $ $$ $$ $sG   E/E<F	$FF!F-/E9<F	FF!F*-F6zmixedsubplot.pngc            	         d } t        j                  ddd      }t        j                  ddd      }dt        j                  d<   t        j                  t        j
                  d      	      }|j                  d
dd      }|j                  | | |      d| | |      dd       |j                  d       |j                  d
dd
d      }t        j                  t        j                  ddd      t        j                  ddd            \  }}t        j                  ||      }t        j                  |      }|j                  |||dddd       |j                  dd       y )Nc                     t        j                  dt         j                  z  | z        t        j                  |        z  S )Nr   )r   r>  r<  exp)ts    r-   fztest_mixedsubplots.<locals>.fv  s,    vvagai 2661":--r/                 @r  r*  Tr          @r   r   r   bozk--r   )markerfacecolorr3   r4   rp   r  r   r   F)rcountccount	linewidthantialiasedro   )r   r   rC   r   rD   r   rE   r?  rF   r   hypotr=  plot_surface
set_zlim3d)	rV  t1t2rH   r'   r   r   Rr   s	            r-   test_mixedsubplotsrg  t  s"   . 
3S	!B	3T	"B(,CLL$%
**S]]2.
/C	Aq	!BGGB"tR2wGGGGDM	AqT	2B;;ryyQ-ryyQ/EFDAq
AA
q	AOOAq!BrU  4 MM"ar/   c                     | j                  d      }|j                  dddd       | j                          |j                  d      }|j                          |j                  dddd       y )Nr3   r4   r-  zsome strings)rE   textr   rE  s       r-   test_tight_layout_textrl    sj     

$

/CHHRR=H)




.CHHRR=H)r/   zscatter3d.pngc                     dt         j                  d<   t        j                         } | j                  d      }|j	                  t        j                  d      t        j                  d      t        j                  d      dd       t        j                  dd	      x}x}}|j	                  |||d
d       d|d<   |j	                  g g g dd       y )NTr   r3   r4   r   r)   rC  )r   markerr   r   ^r   ro   r   rC   r   rD   rE   scatterr   r   rH   r'   rY   rZ   r[   s        r-   test_scatter3drs    s    (,CLL$%
**,C	D	)BJJryy}biimRYYr]S  "		"b!!A!AJJq!Q#cJ*AbEJJr2rSJ-r/   zscatter3d_color.pngc                  Z   dt         j                  d<   t        j                         } | j                  d      }|j	                  t        j                  d      t        j                  d      t        j                  d      ddd	       |j	                  t        j                  d      t        j                  d      t        j                  d      ddd	       |j	                  t        j                  dd
      t        j                  dd
      t        j                  dd
      dd       y )NTr   r3   r4   r   r)   rX   rC  )	facecolor	edgecolorrn  r   r   rj  )r   rn  rp  rG   s     r-   test_scatter3d_colorrw    s    (,CLL$%
**,C	D	)B JJryy}biimRYYr]s  <JJryy}biimRYYr]3s  < JJryyR "))B"3RYYr25F  &r/   zscatter3d_linewidth.pngc            	         t        j                         } | j                  d      }|j                  t	        j
                  d      t	        j
                  d      t	        j
                  d      dt	        j
                  d             y )Nr3   r4   r   rC  )rn  r_  )rC   rD   rE   rq  r   r   rG   s     r-   test_scatter3d_linewidthry    s[    
**,C	D	)B JJryy}biimRYYr]RYYr]  4r/   c           	         |j                  d      }|j                  t        j                  d      t        j                  d      t        j                  d      d      }|j	                  t        j                  d             | j                  d      }|j                  t        j                  d      t        j                  d      t        j                  d      dt        j                  d             y )Nr3   r4   r   rC  rn  )rn  
linewidths)rE   rq  r   r   set_linewidthsr=   r<   r(  r   r'  s        r-   %test_scatter3d_linewidth_modificationr    s     ""d"3G		"ryy}biim" 	 	$ARYYr]#  D 1F
NN299R="))B-2s iim  -r/   c                    |j                  d      }|j                  t        j                  d      t        j                  d      t        j                  d      d      }|j	                  d       |j                  d       |j                  dd	gd
z         |j                         sJ |j                  d       |j                         rJ |j                  t        j                  dd             |j                  d       | j                  d      }|j                  t        j                  d      t        j                  d      t        j                  d      ddddd	gd
z  ddd
       y )Nr3   r4   r   rC  r{  C1C2333333?ffffff?rp   FK   rn   )rn  ru  rv  r   
depthshaderj  r|  )rE   rq  r   r   set_facecolorset_edgecolor	set_alphaget_depthshadeset_depthshade	set_sizesfullr}  r~  s        r-   test_scatter3d_modificationr    s'    ""d"3G		"ryy}biim" 	 	$AOODOODKKc
QU!!!KKB Q  D 1F
NN299R="))B-2s!T#sa#ra  9r/   r  c                    t         j                  ddddf   \  }}t        j                  |j                        j	                  |j
                        }t        j                  |j
                  d      }d|ddddddf<   d|ddddddf<   t        j                  |j
                  d      }d	|dd
dd
f<   d|ddddf<   d|ddddf<   t        j                  |j
                  d      }d|dd
dd
f<   d|d
ddd
f<   d|d
dd
df<   t        j                  |j
                  d      }	d
|	ddddddf<   d
|	ddddddf<   d |||||||	fD        \  }}}}}}}	| j                  d      }
d ||||	fD        }t        j                  | D ]  \  }}}}||k7  ||k7  z  ||k7  z  |	|k7  z  }t         j                  j                  ||t              }t        j                  |t        |j                               }|
j!                  |||||||d|	        |j                  d      }|j!                  |||||||	d|	       y)z1Test that marker properties are correctly sorted.Nr      r   r   r   r   C0r  rp   r  r   rt   C3C4C5C6	   C7c              3   <   K   | ]  }|j                           y wN)r`   .0as     r-   	<genexpr>z)test_scatter3d_sorting.<locals>.<genexpr>   s      : 	
		:s   r3   r4   c              3   F   K   | ]  }t        j                  |        y wr  )r   uniquer  s     r-   r  z)test_scatter3d_sorting.<locals>.<genexpr>  s     NQBIIaLNs   !dtype)rj  fceclwr   r  )r   mgridr   sizereshapeshaper  rE   r   r"   mamasked_arrayfloatrepeatr#   maskrq  )r=   r<   r  rZ   rY   r[   sizes
facecolors
edgecolorsr|  r'  setsrj  r  r  r  subsetr(  s                     r-   test_scatter3d_sortingr    s   
 88CRC"HDAq
		!&&!!!''*AGGAGGR EE!$Q$1*E!$Q$1*$'JJrr2A2vJqr2A2vJqr12v$'JJqsAaCxJqsAaCxJqsAaCx!$JJqt!tQTTzJqt!tQTTz:Q5*j*E:6Aq!UJ
J
   D 1FN5*j*"MND"**D1 .2r2aZ22 2 	 ##AvU#; YYr3|,-q!VqRB2Q", 	 	..$ ""d"3GOOAq!u
!z  Cr/   r      c           
      D   ddg}ddg}ddg}ddg}| j                  d      }|j                  |||d|	       |j                  d|d
       |j                  d      }|j                  |ddd   |ddd   |ddd   d|ddd   	       |j                  d|d
       y)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.
    ro   r   r   r   rZ   r3   r4     rj  r   r   N)rE   rq  r   r<   r=   r   rY   rZ   r[   r   r'   s           r-   $test_marker_draw_order_data_reversedr    s     
QA	
BA	
AA#JE					.BJJq!Q$%J(LLadL+					-BJJq2w$B$4R4DE$B$KJ@LLadL+r/   c           
      j   d}ddg}ddg}ddg}ddg}| j                  d      }|j                          |j                  |||d	|
       |j                  d|d       |j                  d      }|j                          |j                  |||d	|ddd   
       |j                  d|dz
  d       y)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  ro   r   r   r   rZ   r3   r4   r  r  r   Nr   )rE   set_axis_offrq  r   r  s           r-   #test_marker_draw_order_view_rotatedr  3  s     D	QA	
BA	
AA#JE					.BOOJJq!Q$%J(LLadL+					-BOOJJq!Q$%"+J.LLadSjqL1r/   zplot_3d_from_2d.pngg~jt?c                      t        j                         } | j                  d      }t        j                  dd      }t        j                  dd      }|j                  ||dd       |j                  ||dd       y )	Nr3   r4   r   rp   r   rY   r   r   rZ   )rC   rD   rE   r   r   r?  )rH   r'   r   r   s       r-   test_plot_3d_from_2dr  K  sd    
**,C	D	)B	1aB	1b	BGGBqsG#GGBqsG#r/   zfill_between_quad.pngc                  $   t        j                         } | j                  d      }t        j                  ddt        j
                  z  d      }t        j                  |      }t        j                  |      }dt        j                  d|z        z  }dt        j                  |      z  }dt        j                  |      z  }d}|t        j
                  dz  k  |d	t        j
                  z  dz  kD  z  }	|j                  |||||||	d
dd
       y )Nr3   r4   r   r   2   r  r   333333?rn   ri   r-  k)wheremoder   rv  )	rC   rD   rE   r   r5  r<  r>  r=  fill_between)
rH   r'   r@  x1y1z1x2y2z2r  s
             r-   test_fill_between_quadr  U  s    
**,C	D	)BKK1RUU7B'E	B	B	rvva%i 	 B	rvve}	B	rvve}	B	
BRUU1W_255!23E OOBBBfC3  Hr/   zfill_between_polygon.pngc                  x   t        j                         } | j                  d      }t        j                  ddt        j
                  z  d      }|x}}dx}}t        j                  |      }|dz   }|t        j
                  dz  k  |dt        j
                  z  dz  kD  z  }	|j                  |||||||	dd	
	       y )Nr3   r4   r   r   r  r   rn   ri   r  )r  r  rv  )rC   rD   rE   r   r5  r<  r>  r  )
rH   r'   r@  r  r  r  r  r  r  r  s
             r-   test_fill_between_polygonr  l  s    
**,C	D	)BKK1RUU7B'EOBKB	B	aBRUU1W_255!23E OOBBBf  =r/   zsurface3d.pngc            
         dt         j                  d<   t        j                         } | j                  d      }t	        j
                  ddd      }t	        j
                  ddd      }t	        j                  ||      \  }}t	        j                  ||      }t	        j                  |      }|j                  |||ddt        j                  d	d
      }dt         j                  d<   |j                  dd       | j                  |dd       y )NFzpcolormesh.snapr3   r4   r\  rp   r  r   r   )r]  r^  r   r  r`  Tr   )\()\(?r-  )shrinkaspect)rC   r   rD   rE   r   r   r   ra  r=  rb  r   r   r	  colorbar)rH   r'   r   r   rf  r   surfs          r-   test_surface3dr    s     ',CLL"#
**,C	D	)B
		"aA
		"aA;;q!DAq
AA
q	A??1a2br{{U  4D(,CLL$%KKtLLc!L,r/   z(surface3d_label_offset_tick_position.pngc                  :   dt         j                  d<   t        j                         j                  d      } t        j
                  ddt        j                  z  dddt        j                  z  df   \  }}t	        j                  t	        j                  t	        j                  |      t	        j                  |      z               }| j                  |d	z  |d
z  |dz  ddd       | j                  d       | j                  d       | j                  d       y )NTr   r3   r4   r   r   r  rt   g     j@g    .Ag    חAautumnr   )r   cstriderstridezX labelzY labelzZ label)rC   r   rD   rE   r   r  r<  sqrtr$   r>  rb  r   r   r   )r'   rY   rZ   r[   s       r-   )test_surface3d_label_offset_tick_positionr    s    (,CLL$%		!	!T	!	2B88Aa"%%i$aBEE	$&667DAq
rvvay266!9,-.AOOAGQWa#gHaQROSMM)MM)MM)r/   zsurface3d_shaded.pngc            
         t        j                         } | j                  d      }t        j                  ddd      }t        j                  ddd      }t        j
                  ||      \  }}t        j                  |dz  |dz  z         }t        j                  |      }|j                  |||ddg ddd	
       dt         j                  d<   |j                  dd       y )Nr3   r4   r\  rp   r  r   )r  r   r  r   F)r  r  r   r  r`  Tr   r  r  )rC   rD   rE   r   r   r   r  r=  rb  r   r	  )rH   r'   r   r   rf  r   s         r-   test_surface3d_shadedr    s    
**,C	D	)B
		"aA
		"aA;;q!DAq
Qa A
q	AOOAq!Q)aU  D(,CLL$%KKtr/   zsurface3d_masked.pngc                     t        j                         } | j                  d      }g d}g d}t        j                  ||      \  }}t        j
                  g dg dg dg dg d	g d
g dg dg      }t        j                  j                  |d      }t        j                  |j                         |j                               }t        j                  d    ||            }|j                  ||||       |j                  ddd       y )Nr3   r4   )r   r   rn   rt   rp   r   r  r  r  r   r   )r   r   rn   rt   rp   r   r  r  )ro   r   r   r   r   r   r   r   r   r   r   )ro   r   r   rn   rt   rt   rt   rn   r   r   r   )ro         rt   rp   r   r  r   rp   rt   rn   r  )ro   r  r  r  r      r   r  r  r  r  )ro   r  r  r  r      r   r  r   r  r  )ro   r  r  r  r  r   r  r  r   r  r  )ro   r  r  r        r  r      r  r  )ro   r  r  r  r        r  r  r  r  r   )r  r  plasmar  r   r  )rC   rD   rE   r   r   r    r  masked_lessr   	Normalizer  r  r!  r"  rb  r   )rH   r'   rY   rZ   matrixr[   normr   s           r-   test_surface3d_maskedr    s    
**,C	D	)B+A A;;q!DAqXX..276<=?		
F 	&!$A!%%'8D]]8$T!W-FOOAq!O/LLS!r/   c                    t        j                  ddd      }t        j                  ddd      }t        j                  |      t        j                  |      z  }|dkD  }t         j                  j                  ||      }| j                  d      }|j                  |||       |j                  |||       t         j                  x||<   x||<   ||<   |j                  d      }|j                  |||       |j                  |||       y )Nr   r   r   )r  r3   r4   )
r   r5  r=  r>  r  r    rE   rq  r?  nan)	r<   r=   rY   rZ   r[   r  z_maskedr(  r'  s	            r-   test_plot_scatter_masksr    s    
Ar3A
Ar3A
q	BFF1IAq5Duu{{14{(H""d"3GOOAq(#LLAx "$&&(AdG(ag$  D 1F
NN1a
KK1ar/   c                 $   t        j                  t        j                  d      t        j                  d            \  }}||z   }| j                  d      }|j	                  |||d        |j                  d      }|j	                  |||       y )Nrp   r3   r4   r  )r   r   r   rE   rb  )r<   r=   rY   rZ   r[   r(  r'  s          r-   test_plot_surface_None_argr    s~    ;;ryy|RYYq\2DAq	AA""d"3GAqT2  D 1F
1a r/   zsurface3d_masked_strides.pngc                  $   t        j                         } | j                  d      }t        j                  ddddddf   \  }}t        j
                  j                  ||z  d      }|j                  |||dd       |j                  d	d
d       y )Nr3   r4   igffffff@r   r   rt   r  r  <   r   )	rC   rD   rE   r   r  r  r  rb  r   rr  s        r-   test_surface3d_masked_stridesr    s    
**,C	D	)B88Bs1HbQh&'DAq
!a%#AOOAq!QO2LLS!r/   z
text3d.pngc                  .   t        j                         } | j                  d      }d}d}d}d}t        ||||      D ]%  \  }}}}	d|||	|fz  }
|j	                  |||	|
|       ' |j	                  dddd	d	
       |j                  ddd|j                         dt         j                  d<   |j                  dd       |j                  dd       |j                  dd       |j                  d       |j                  d       |j                  d       y )Nr3   r4   NrY   rZ   r[   r   r   r   rr   r   r   rt   r  r  r   r   rt   r  r  r   r   rt   r   rp   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)rC   rD   rE   r&   rk  text2D	transAxesr   
set_xlim3d
set_ylim3drc  r   r   r   )rH   r'   zdirsr   r   r   r   rY   rZ   r[   r   s              r-   test_text3dr    s   
**,C	D	)B7E	B	B	BUBB/ &aA&!Q48
1a%& GGAq!U%G(IIdD)r||I<(,CLL$%MM!RMM!RMM!RMM(MM(MM(r/   c                 D   d}d}d}d}|j                  d      }|j                  dd       |j                  dd       |j                  dd       t	        ||||      D ]=  \  }}}	}
|j                  dddd	| d
|	 d
|
 d|       }|j                  ||	|
f|       ? | j                  d      }|j                  dd       |j                  dd       |j                  dd       t	        ||||      D ])  \  }}}	}
|j                  ||	|
d	| d
|	 d
|
 d| |       + y )Nr  r  r   r  r3   r4   r   r   (z, z), dir=)r   )rE   r  r  rc  r&   rk  set_position_3d)r=   r<   r  r   r   r   r(  r   rY   rZ   r[   rU  r'  s                r-   test_text3d_modificationr    s[    8E	B	B	B""d"3Gq"q"q"UBB/ 0aALLAqAaS1#Rs'$"@A	1a)$/0   D 1F
a
a
aUBB/ HaAAq!q2aS1#WTF;$GHr/   ztrisurf3d.pnggZd;?c                     d} d}t        j                  dd|      }t        j                  ddt         j                  z  | d      }t        j                  |d	t         j                  f   |d
      }|d d d
d dfxx   t         j                  | z  z  cc<   t        j
                  d|t        j                  |      z  j                               }t        j
                  d|t        j                  |      z  j                               }t        j                  | |z        }t        j                         }|j                  d      }|j                  |||t        j                  d       y )N$   r        ?      ?r   r   Fendpoint.r   rR   r3   r4   皙?)r   r_  )r   r5  r<  r  newaxisappendr>  r`   r=  rC   rD   rE   plot_trisurfr   jet	n_anglesn_radiiradiianglesrY   rZ   r[   rH   r'   s	            r-   test_trisurf3dr  $  s   HGKKsG,E[[AbeeGX>FYYvc2::o.a@F
1add7OruuX~%O
		!eBFF6N*3356A
		!eBFF6N*3356A
r!tA
**,C	D	)BOOAq!"&&CO8r/   ztrisurf3d_shaded.pngQ?c                     d} d}t        j                  dd|      }t        j                  ddt         j                  z  | d      }t        j                  |d	t         j                  f   |d
      }|d d d
d dfxx   t         j                  | z  z  cc<   t        j
                  d|t        j                  |      z  j                               }t        j
                  d|t        j                  |      z  j                               }t        j                  | |z        }t        j                         }|j                  d      }|j                  |||g dd       y )Nr  r  r  r  r   r   Fr  .r   r  r3   r4   )r   r-  r   r  )r   r_  )r   r5  r<  r  r  r  r>  r`   r=  rC   rD   rE   r  r  s	            r-   test_trisurf3d_shadedr!  6  s	   HGKKsG,E[[AbeeGX>FYYvc2::o.a@F
1add7OruuX~%O
		!eBFF6N*3356A
		!eBFF6N*3356A
r!tA
**,C	D	)BOOAq!;#O>r/   zwireframe3d.pngc                      t        j                         } | j                  d      }t        j                  d      \  }}}|j                  |||dd       y )Nr3   r4   r      r]  r^  rC   rD   rE   r   r   plot_wireframer   s        r-   test_wireframe3dr'  H  sL    
**,C	D	)B""4(GAq!aAb4r/   zwireframe3dzerocstride.pngc                      t        j                         } | j                  d      }t        j                  d      \  }}}|j                  |||dd       y )Nr3   r4   r   r#  r   r$  r%  r   s        r-   test_wireframe3dzerocstrider)  P  sL    
**,C	D	)B""4(GAq!aAb3r/   zwireframe3dzerorstride.pngc                      t        j                         } | j                  d      }t        j                  d      \  }}}|j                  |||dd       y )Nr3   r4   r   r   r   r  r%  r   s        r-   test_wireframe3dzerorstrider+  X  sL    
**,C	D	)B""4(GAq!aAq"5r/   c                  
   t        j                         } | j                  d      }t        j                  d      \  }}}t        j                  t              5  |j                  |||dd       d d d        y # 1 sw Y   y xY w)Nr3   r4   r   r   r  )	rC   rD   rE   r   r   rL  rM  
ValueErrorr&  r   s        r-    test_wireframe3dzerostrideraisesr.  `  sm    
**,C	D	)B""4(GAq!	z	" 9
!Q1a89 9 9s   A99Bc                     t        j                         } | j                  d      }t        j                  d      \  }}}t        j                  t              5  |j                  |||dd       d d d        t        j                  t              5  |j                  |||dd       d d d        y # 1 sw Y   BxY w# 1 sw Y   y xY w)Nr3   r4   r   r   r  )r  r^  )r  r]  )
rC   rD   rE   r   r   rL  rM  r-  r&  rb  r   s        r-   test_mixedsamplesraisesr0  h  s    
**,C	D	)B""4(GAq!	z	" :
!Q2b9:	z	" 8
1aB78 8: :8 8s   B1B=1B:=Czquiver3d.pngg~jth?c                     dt         j                  d<   t        j                         } | j                  d      }g d}g d}t	        t        ||            D ]i  \  }\  }}t        j                  ddgddgddg      \  }}}	| }
| }|	 }|	d	|z  z  }	|j                  |||	|
||d
||	       |j                  |||	|       k |j                  dd       |j                  dd       |j                  dd       y )NTr   r3   r4   )tipmiddletail)ztab:bluez
tab:orangez	tab:green      r-  r   r   )r   pivotr   r   rn   ro   rp   )rC   r   rD   rE   rx   r&   r   r   quiverrq  r  r  r	  )rH   r'   pivotsr   r~   r6  r   rY   rZ   r[   uvws                r-   test_quiver3dr=  s  s    (,CLL$%
**,C	D	)B&F4F&s66':; )>E5++tSkD#;sD1aBBB	QU

		!Q1a1E	G


1a%
() KKAKKAKKAr/   c                     |j                  d       g x}x}x}x}x}}| j                  d      }|j                  ||||||ddd	       y )Nr3   r4   r  r2  Tr   r6  	normalize)rE   r8  )	r<   r=   rY   rZ   r[   r:  r;  r<  r'   s	            r-   test_quiver3d_emptyrA    sb    4(AAA					.BIIaAq!Qs%4IHr/   zquiver3d_masked.pngc                  6   t        j                         } | j                  d      }t        j                  dddddddddf   \  }}}t        j
                  t        j                  |z        t        j                  t        j                  |z        z  t        j                  t        j                  |z        z  }t        j                  t        j                  |z         t        j
                  t        j                  |z        z  t        j                  t        j                  |z        z  }dt        j                  t        j                  |z        z  t        j                  t        j                  |z        z  t        j
                  t        j                  |z        z  }t        j                  j                  d	|k  |d
k  z  |d      }t        j                  j                  d
|k  |dk  z  |d      }|j                  ||||||d
dd	       y )Nr3   r4   ro   r   y              $@r  y              @g>,p ?皙ٿr  F)r#  r  r2  Tr?  )rC   rD   rE   r   r  r=  r<  r>  r  masked_wherer8  )rH   r'   rY   rZ   r[   r:  r;  r<  s           r-   test_quiver3d_maskedrE    s   
**,C	D	)B hhr#cz2c#:r#by89GAq!
ruuqyBFF25519--ruuqy0AAA			RVVBEEAI..	1BBARVVBEEAI&&	)::RVVBEEAI=NNA
D1HS115AA
C!GC0!%@AIIaAq!Qs%4IHr/   zquiver3d_colorcoded.pngc            	      h   t        j                         } | j                  d      }t        j                  d      x}x}x}}t        j
                  d      x}}t         j                  j                  ||j                         z        }|j                  |||||||       |j                  dd       y )Nr3   r4   r         $@)r   r   )rC   rD   rE   r   zerosr   r   Redsr  r8  r  )	rH   r'   rY   rZ   r   r   r[   r   r   s	            r-   test_quiver3d_colorcodedrJ    s    
**,C	D	)Bhhrl"A""BYYs^AFFKK2668$EIIaAr2r%I0KK2r/   c                     t        j                         } | j                  d      }t        d      }|j	                  |       t        j                  |       |j                  d       t        j                  |j                         d      sJ | j                  j                          t        j                  |j                         d      sJ y )Nr3   r4   r   r   )r  rW  rW  r   )r   r   r   r   )rC   rD   rE   r   	add_patchr   patch_2d_to_3dr  r   
same_colorget_facecolorr   r   )rH   r'   circles      r-   test_patch_modificationrR    s    
**,C	D	)BF^FLL	 
+,f224lCCCJJOOf224lCCCr/   c                    t        dd      }t        dd      }t        j                  g dg dg      }t        j                  ||gd      }| j                  d	
      }|j                  |       |j                  d       |j                  |       |j                  d       |j                         sJ |j                  d       |j                         rJ t        dd      }t        dd      }t        j                  g dg dg      }t        j                  ||gdd|dd      }|j                  d	
      }|j                  |       y )NrL  r   )r  r  r  )rW  r-  rW  r  )r-  rW  rW  r-  rn   )r|  r3   r4   r  r  F)r|  rv  ru  r   r  )r   r   r    r   Patch3DCollectionrE   add_collection3dr  r  r  r  r  )r<   r=   patch1patch2r  r   r(  r'  s           r-   "test_patch_collection_modificationrX    s2    FD!FJ%F,.@ABJ 0Q?A""d"3GQOODOOJKKU!!!FD!FJ%F,.@ABJ 0Q*.*&)e	=A   D 1F
Ar/   c                  j   g dg dg dg dg} t        j                  t        d      5  t        j                  |        d d d        t        j                  | t              } t        j                  t        d      5  t        j                  |        d d d        y # 1 sw Y   ^xY w# 1 sw Y   y xY w)Nr   r   r   r   r   r   r   r   r   r   zlist of \(N, 3\) array-likerJ  r  )rL  rM  r-  r   Poly3DCollectionr   r    r  )polys    r-   &test_poly3dcollection_verts_validationr_    s    y)Y7D	z)G	H %t$% 88D&D	z)G	H %t$% %	% %% %s   B>B)B&)B2zpoly3dcollection_closed.pngc                     t        j                         } | j                  d      }t        j                  g dg dg dgt
              }t        j                  g dg dg dgt
              }t        j                  |gdd	d
d      }t        j                  |gdd	dd      }|j                  |d       |j                  |d       y )Nr3   r4   rZ  r[  r   rr   r  rn   r  )r-  r-  r   r-  Tr|  rv  ru  closed)r   r-  r-  r-  Fautolim)	rC   rD   rE   r   r    r  r   r]  rU  rH   r'   poly1poly2c1c2s         r-   test_poly3dcollection_closedrj    s    
**,C	D	)BHHiI6>EHHiI6>E			A*<T
KB			A*<U
LBE*E*r/   c                     t        g       } t        j                  |        t        | t        j                        sJ | j                         g k(  sJ t        j                  t        d            \  }}|j                  |        | j                         }t        j                  |      sJ |j                  j                          y )Nr3   r4   r6   )r   r   poly_collection_2d_to_3d
isinstancer]  	get_pathsrC   r8   r9   
add_artistdo_3d_projectionr   isnanr   r   )r^  rH   r'   minzs       r-   #test_poly_collection_2d_to_3d_emptyrs    s    "D	""4(dE22333>>r!!!lldd&;<GCMM$  "D88D>> JJOOr/   zpoly3dcollection_alpha.pngc                     t        j                         } | j                  d      }t        j                  g dg dg dgt
              }t        j                  g dg dg dgt
              }t        j                  |gdd	d
d      }|j                  d       t        j                  |gdd      }|j                  d       |j                  d	       |j                  d       |j                  |d       |j                  |d       y )Nr3   r4   rZ  r[  r   rr   r  rn   r  r-  r-  r   Tra  r-  F)r|  rb  )r   r-  r-  rc  )rC   rD   rE   r   r    r  r   r]  r  r  r  rU  re  s         r-   test_poly3dcollection_alpharv    s    
**,C	D	)BHHiI6>EHHiI6>E			A*7
FBLL			Ae	DB]#SLLE*E*r/   zadd_collection3d_zs_array.pngc                     t        j                  dt         j                  z  dt         j                  z  d      } t        j                  ddd      }|dz  dz   }|t        j                  |       z  }|t        j                  |       z  }t        j
                  |||g      j                  ddd      }t        j                  |d d |dd  gd	      }t        j                         }|j                  d
      }t        j                  ddt         j                  z        }	t        |d d d d d df   d|	      }
|
j                  t        j                  | dt         j                  z               |j                  |
|d d d d df         }|J dt        j                   d<   |j#                  dd       |j%                  dd       |j'                  dd       y )Nr;  rt   r   r  r   r   ro   rn   r  r3   r4   r   twilightr   r  r   Tr   r\  rp   r   )r   r5  r<  r=  r>  column_stackr  concatenaterC   rD   rE   r  r   	set_arraymodrU  r   r  r  r	  r@  r[   r)   rY   rZ   pointssegmentsrH   r'   r  lcrQ   s               r-   test_add_collection3d_zs_arrayr    s   KKRUU
AIs3E
B3A	1qA	BFF5MA	BFF5MA__aAY'//Aq9F~~vcr{F12J7a@H
**,C	D	)B==AbeeG$D	Arr*$	GBLLqw'(rhq!Qw&78D(,CLL$%KKAKKAKKAr/   zadd_collection3d_zs_scalar.pngc                     t        j                  ddt         j                  z  d      } d}|dz  dz   }|t        j                  |       z  }|t        j                  |       z  }t        j
                  ||g      j                  ddd      }t        j                  |d d |dd  gd      }t        j                         }|j                  d      }t        j                  ddt         j                  z        }	t        |d	|	
      }
|
j                  |        |j                  |
|      }|J dt        j                  d<   |j!                  dd       |j#                  dd       |j%                  dd       y )Nr   r   r   r   ro   r  r3   r4   rx  ry  rz  Tr   r\  rp   r;  r   )r   r5  r<  r=  r>  r{  r  r|  rC   rD   rE   r  r   r}  rU  r   r  r  r	  r  s               r-   test_add_collection3d_zs_scalarr  1  s;   KK1ruu9c*E	A	1qA	BFF5MA	BFF5MA__aV$,,RA6F~~vcr{F12J7a@H
**,C	D	)B==AbeeG$D	z	=BLLra(D(,CLL$%KKAKKAKK1r/   c                     t        j                         } | j                  d      }ddgddgddgg}t        j                  |      }|j                  |       t        j                  |j                         d	      sJ t        j                  |j                         d
      sJ t        j                  |j                         d      sJ y )Nr3   r4   r   )r   rt   r   r   r   rn   )r   r   r   r   r   rt   )r   rt   rp   )gUUUUUUgUUUUUU @)gUUUUUUUUUUUU@)ggj@)rC   rD   rE   r   Line3DCollectionrU  r   allclose
get_xlim3d
get_ylim3d
get_zlim3d)rH   r'   linesr  s       r-   !test_line3dCollection_autoscalingr  L  s    
**,C	D	)B###%E 
			&B;;r}}(STTT;;r}}(QRRR;;r}}(QRRRr/   c                     t        j                         } | j                  d      }t        j                  g dg dg dg      }t        j                  |g      }|j                  |       t        j                  |j                         d      sJ t        j                  |j                         d      sJ t        j                  |j                         d      sJ y )Nr3   r4   r   r  r  UUUUUUgUUUUUU?)gSUUUUUr  )rC   rD   rE   r   r    r   r]  rU  r  r  r  r  )rH   r'   r^  cols       r-   !test_poly3dCollection_autoscalingr  [  s    
**,C	D	)B88Y	956D

 
 $
(C;;r}}(STTT;;r}}(STTT;;r}}(PQQQr/   zaxes3d_labelpad.pngc                     t        j                         } | j                  t        |             }|j                  j
                  t        j                  d   k(  sJ |j                  dd       |j                  j
                  dk(  sJ |j                  d       |j                  dd       |j                  j
                  dk(  sJ |j                         dk(  sJ d|j                  _        d|j                  _        t        |j                  j                               D ]-  \  }}|j!                  |j#                         d	z   |d	z  z
         / y )
Nzaxes.labelpadzX LABELr   )labelpadzY LABELzZ LABELr   r   rp   )rC   rD   add_axesr   rN   r  r!  r   r   r   r   rP   
get_zlabelrO   rx   get_major_ticksset_padget_pad)rH   r'   r~   ticks       r-   test_axes3d_labelpadr  f  s    **,C	fSk	"B88_ ====MM)bM)88"""MM)MM)bM)88"""==?i'''BHHBHH RXX5578 14T\\^a'!a%/01r/   zaxes3d_cla.pngc                      t        j                         } | j                  dddd      }|j                          |j	                          y )Nr   r3   r4   )rC   rD   rE   r  clarG   s     r-   test_axes3d_clar  }  s8     **,C	AqT	2BOOFFHr/   zaxes3d_rotated.pngc                  |    t        j                         } | j                  dddd      }|j                  ddd       y )Nr   r3   r4   r   -   r   )rC   rD   rE   r   rG   s     r-   test_axes3d_rotatedr    s5     **,C	AqT	2BLLRr/   c                     t        j                  ddd      } t        j                  ddd      }t        j                  | |      \  }}t         j                  j	                  d      }t        j                  d      }|j                  dddd	
      }t        j                  t              5  |j                  |||       d d d        y # 1 sw Y   y xY w)Nr-  r   r   )num)   r   r   r   r   r3   r4   )r   r5  r   r.  randnrC   rD   rE   rL  rM  r-  rb  )rY   rZ   r   r   r[   rH   r'   s          r-   test_plotsurface_1d_raisesr    s    
C%A
C%A;;q!DAq
		A
**W
%C	AqT	2B	z	" !
1a ! ! !s   -C

Cc                  V   t        j                  g d      } t        j                  g d      }t        j                  g d      }d}t        j                  | |||      \  }}}t        j                  ||||       }t        j
                  ddd      }t        j                  ||      }	|	S )N)r,  ii  )r   r   r   rZ  r   r   r   r   )r   r    r   
_view_axes_view_transformation_uvw_persp_transformationdot)
Erf  Vr   r:  r;  r<  viewMperspMMs
             r-   _test_proj_make_Mr    s    
$%A
!A
AD1a.GAq!++Aq!Q7E))#tQ7F
vuAHr/   c                  "   t               } t        j                  j                  |       }t        j                  g d      dz  }t        j                  g d      dz  }t        j                  g d      dz  }t        j                  ||||       \  }}}t        j                  ||||      \  }}	}
t        j                  j                  ||       t        j                  j                  |	|       t        j                  j                  |
|       y )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   linalginvr    r   proj_transforminv_transformr   assert_almost_equal)r  invMr   r   r   txstystzsixsiysizss              r-   test_proj_transformr    s    A99==D	0	1E	9B	0	1E	9B	0	1E	9B))"b"a8MCc((c3=MCcJJ""3+JJ""3+JJ""3+r/   r   c                 \   d|ddg}dd|dg}ddd|g}t        j                  ||||       \  }}}	t        ||      \  }
}}}|
|f|
|f|
|fg}t        j                  |i |\  }}t        |      }|j                  |       t        ||g d      D ]  \  }}}|j                  |||        ||fS )Nr   )rC  rY   rZ   r[   )r   r  r&   rC   r8   r   add_collectionrk  )r  rj  argsr&  r   r   r   r  r  r  rC  r'   ayazr  rH   linecrY   rZ   rU  s                       r-   _test_proj_draw_axesr    s    
Q1B
Q1B
Q1B))"b"a8MCcSMMAr2rWq"g2w'EllD+F+GC5!EesC!56 1a
1a 7Nr/   zproj3d_axes_cube.pngc                  <   t               } dj                         }t        j                  g d      dz  }t        j                  g d      dz  }t        j                  g d      dz  }t	        j
                  ||||       \  }}}t        | d      \  }}	|	j                  |||       |	j                  ||d	       t        |||      D ]  \  }
}}|	j                  |
||        d
t        j                  d<   |	j                  dd       |	j                  dd       y )N0 1 2 3 0 4 5 6 7 4r  r  r  r  i  ri  r   r)   Tr   皙ɿr  )r  splitr   r    r   r  r  rq  r?  r&   rk  rC   r   r  r  )r  tsr   r   r   r  r  r  rH   r'   rY   rZ   rU  s                r-   test_proj_axes_cuber    s    A		$	$	&B	0	1E	9B	0	1E	9B	0	1E	9B))"b"a8MCc"1,GCJJsC3JGGCGsC$ 1a
1a )-CLL$%KKcKKcr/   zproj3d_axes_cube_ortho.pngc                  |   t        j                  g d      } t        j                  g d      }t        j                  g d      }d}t        j                  | |||      \  }}}t        j                  ||||       }t        j
                  dd      }t        j                  ||      }	dj                         }
t        j                  g d      d	z  }t        j                  g d
      d	z  }t        j                  g d      d	z  }t        j                  ||||	      \  }}}t        |	d      \  }}|j                  ||d|z
         |j                  ||d       t        |||
      D ]  \  }}}|j                  |||        dt        j                  d<   |j!                  dd       |j#                  dd       y )N)   r   r   r   rZ  r   ro   r   r  r  r   r  r     ri  r   r)   r  Tr   i8r  )r   r    r   r  r  _ortho_transformationr  r  r  r  rq  r?  r&   rk  rC   r   r  r  )r  rf  r  r   r:  r;  r<  r  orthoMr  r  r   r   r   r  r  r  rH   r'   rY   rZ   rU  s                         r-   test_proj_axes_cube_orthor    s~   
!A
A
AD1a.GAq!++Aq!Q7E))"a0F
vuA		$	$	&B	0	1C	7B	0	1C	7B	0	1C	7B))"b"a8MCc"1,GCJJsC3s7J#GGCGsC$ 1a
1a )-CLL$%KKcKKcr/   c                      d\  } }d\  }}d\  }}t        j                  | |||||      }t        j                  j	                  |g dg dg dg dg       y )N)r   x   )r   r   )r  r  )r   r   r   r\  )r   g{Gzt?r   r-  )r   r   rG  ro   r   r   r   r   )r   world_transformationr   r   assert_allclose)r   r   r   r   r   r   r  s          r-   
test_worldr    s\    JD$JD$JD$##D$dD$GAJJq 0 2 / , ./r/   c                     t        j                  ddi      \  } }|j                         dk(  sJ d|_        |j	                  ddd       |j                  dd	gdd	gdd	g       |j                         d
k(  sJ |j                  d       |j                  d       |j                  ddgddgddg       |j                         dk(  sJ |j                  d       |j                  ddgddgddg       |j                         dk(  sJ y )Nr5   r3   r6   linearr   r  r  rY   rZ   r[   r   )r   r   r  皙?r  g333333?FTr   )r   r   r  r  rC  333333@rY   r  )r   r   r  r  rC  r  )	rC   r8   
get_zscale_view_marginmarginsr?  
get_w_lims	autoscaleset_autoscalez_onrG   s     r-   test_autoscaler  	  s   ll|T&:;GC==?h&&&BOJJbBJGGQFQFQF#==?8888LLGGQFQFQF#==?8888LLcLGGQFQFQF#==?8888r/   rR   r  ri   )TFNc                    t        j                         }|j                  d      }t        j                  d      }t        j
                  ddd      }|j                  ||       t        |d|  d      }t        |d|  d	      }t        |d
|  d	      }| |       n|}	 |d|       |	 |       k(  sJ |j                  j                          t        j                  j                   |       d       y )Nr3   r4   r   r  r  get_autoscale_onset_limget_)r5  r-  )ri   )rC   rD   rE   r   r   r5  rq  getattrr   r   r   assert_array_equal)
rR   ri   rH   r'   rY   rZ   get_autoscale_onset_limget_lim	post_autos
             r-   test_unautoscaler    s     **,C	D	)B
		#A
D#s#AJJq!r]4&#<=bDc*+GbDc*+G&*l "IKd#(****JJOOJJ!!')[9r/   c                 l   d}t        | |f|      D ]  \  }}|j                  d      }t        |      dz   }t        j                  d||      }t        j
                  |      }t        j                  |      }	|j                  |||	d       |j                  ddd       |j                  d	d
d        y )N)r   r  r3   r4   r   r   r  )r\  rp   xlimylimzlimrp   r   )
r&   rE   r$   r   r5  onesrH  r?  rc   r   )
r<   r=   xminsrH   r   r'   nr   r   r   s
             r-   test_cullingr  /  s    E(G,e4 	 	T___-IM[[D!$WWQZXXa[
BC 
G'8
QQ	 r/   c                  T   t        j                         } | j                  d      }t        j                  t
              5  |j                  dd       d d d        t        j                  t
              5  |j                  dd       d d d        y # 1 sw Y   ?xY w# 1 sw Y   y xY w)Nr3   r4   perspr   focal_lengthr   r   )rC   rD   rE   rL  rM  r-  r   rG   s     r-   test_axes3d_focal_length_checksr  >  s    
**,C	D	)B	z	" 2
q12	z	" 2
q12 22 22 2s    B5BBB'zaxes3d_focal_length.pngc                      t        j                  ddddi      \  } }|d   j                  dt        j                         |d   j                  dd	       y )
Nr   r   r5   r3   r6   r   r  r  333333?)rC   r8   r   r   inf)rH   re   s     r-   test_axes3d_focal_lengthr  G  sQ     ||AqlD-ABHCFrvv6Ft4r/   zaxes3d_ortho.pngc                  r    t        j                         } | j                  d      }|j                  d       y )Nr3   r4   r   )rC   rD   rE   r   rG   s     r-   test_axes3d_orthor  O  s+    
**,C	D	)BWr/   zaxes3d_isometric.pngc                     ddl m} m} t        j                  t        ddd            \  }}d} | t        j                  t         ||||                  d	      D ]J  \  }}t        ||z
        j                         |d
   |d   z
  k(  s/ |j                  t        ||      ddi L |j                  t        j                  t        j                  dt        j                   d	      z              dd       |j#                  d       y )Nr   )r   r"   r3   r   )rt   rt   rt   )r5   	proj_type
box_aspectr6   )ro   r   r   r   r   r  r  r  r   T)r   r   r"   rC   r8   r9   r   r    r!   r$   r#   r%   r&   r   degreesarctanr  rF   )r   r"   rH   r'   r)   rj  es          r-   test_axes3d_isometricr  V  s    /lld' GC
 	ARXXd71a+;&<=qA )1q1u:>>qtad{*BIIs1ay(C() LLbjj2
?!;<3QLOGGDMr/   c           
      D   | j                  d      }t        j                  ddd      }t        j                  ddd      }t        j                  ||      \  }}||z   }|j	                  |||dd ddd	       |j                  d
d
gddgd
dgdddd       |j                  |j                         |j                         |j                         dz   d       |j                  |j                         |j                         |j                         dz   d|j                         z  d|j                         z  d|j                         z  dz   dd       |j                  |d   |d   |d   dz   dd       |j                  dd
ddd       |j                  ddd       |j                  d      }|d
k  }||   j                  dd      }||   j                  dd      }||   j                  dd      }|j	                  |||dd ddd	       |j                  d
d
gddgd
dgdddd       |j                  |j                         |j                         |j                         dz   d       |j                  |j                         |j                         |j                         dz   d|j                         z  d|j                         z  d|j                         z  dz   dd       |j                  |d   |d   |d   dz   dd       |j                  ddd       y )Nr3   r4   r   r   r   r  r  T)ru  r  r]  r^  
axlim_clipr-        ?r  rn   rp   )r   r_  zorderr  )r  r   )arrow_length_ratior  r  )r   r  r  rt   test)r   r-  r   r   )r   rp   r  r   F)rE   r   r5  r   rb  r?  rq  r   r8  rk  rc   r  )	r<   r=   r'   rY   rZ   r   r   r   idxs	            r-   test_axlim_clipr  f  s    
				.B
Aq"A
Aq"A;;q!DAq	AAOOAq!tbT  ; GGS#JAc
1  ?JJqwwy!'')QWWY]tJDIIaggiAGGIM	k1QWWY;!'')a!"t  5 GGAaD!A$!qG>GGCaDG1FFvFF3 
				-B8C	#r1A	#r1A	#r1AOOAq!tbU  <GGS#JAc
1  @JJqwwy!'')QWWY]uJEIIaggiAGGIM	k1QWWY;!'')a!"u  6 GGAaD!A$!qG?FFvFF3r/   value)setterside))r  left)r  right)r  bottom)r  top)rc  r#  )rc  r$  c                     ||i}t        j                         }|j                  d      }t        j                  t
              5   t        ||       di | d d d        y # 1 sw Y   y xY w)Nr3   r4    )rC   rD   rE   rL  rM  r-  r  )r  r   r  limitrH   objs         r-   test_invalid_axes_limitsr)    s]     5ME
**,C
//T/
*C	z	" &V%u%& & &s   A  A)c                       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        Z	d Z
y)
TestVoxelszvoxels-simple.pngr?   r@   c                     t        j                  ddi      \  }}t        j                  d      \  }}}||k(  ||k(  z  }|j	                  |       y )Nr5   r3   r6   )rp   rt   rn   )rC   r8   r   indicesvoxels)selfrH   r'   rY   rZ   r[   r.  s          r-   test_simplezTestVoxels.test_simple  sK    ,,<*>?R**Y'1aq&Q!V$
		&r/   zvoxels-edge-style.pngc                 $   t        j                  ddi      \  }}t        j                  d      \  }}}|dz
  dz  |dz
  dz  z   |dz
  dz  z   dk  }|j	                  |dd	
      }|t        |j                                  j                  d       y )Nr5   r3   r6   )rp   rp   rt   r   r  g](\@rn   r  )r|  rv  r  )rC   r8   r   r-  r.  r  keysr  )r/  rH   r'   rY   rZ   r[   r.  r;  s           r-   test_edge_stylezTestVoxels.test_edge_style  s    ,,<*>?R**Y'1aq51*Az)QsUQJ6&@IIfdI; 	
#affh-&&t,r/   zvoxels-named-colors.pngc                 D   t        j                  ddi      \  }}t        j                  d      \  }}}||k(  ||k(  z  }|||z  |z  dk   z  }t        j                  ddt        j
                        }d||d	k  |d	k  z  <   d
|||z   dk  <   |j                  ||       y)z5Test with colors set to a 3D object array of strings.r5   r3   r6   r   r   r   r   r  r  z0.25rp   cyanr   r  N)rC   r8   r   r-  r  object_r.  r/  rH   r'   rY   rZ   r[   r.  r   s           r-   test_named_colorszTestVoxels.test_named_colors  s     ,,<*>?R**\*1aq&Q!V$AEAIM**t2::>$*A!a% !%A|
		&V	,r/   zvoxels-rgb-data.pngc                    t        j                  ddi      \  }}t        j                  d      \  }}}||k(  ||k(  z  }t        j                  d      }|dz  |d<   |dz  |d<   |dz  |d	<   |j                  ||
       y)z5Test with colors set to a 4d float array of rgb data.r5   r3   r6   r5  )r   r   r   rn   r  .r   .r   .r   r  N)rC   r8   r   r-  rH  r.  r8  s           r-   test_rgb_datazTestVoxels.test_rgb_data  s     ,,<*>?R**\*1aq&Q!V$/*QvQvQv
		&V	,r/   zvoxels-alpha.pngc                    t        j                  ddi      \  }}t        j                  d      \  }}}||k(  }t        j                  ||z
        dk  }||z  }t        j
                  d      }	g d|	|<   g d|	|<   |j                  ||		      }
t        |
      t        u sJ |
j                         D ]-  \  }}||   sJ d
       t        |t        j                        r-J  y )Nr5   r3   r6   r5  r   )r   r   r   rt   )r   r   r   r-  )r   r   r   r-  r  zfaces returned for absent voxel)rC   r8   r   r-  r$   rH  r.  typer9   itemsrm  r   r]  )r/  rH   r'   rY   rZ   r[   v1v2r.  r   r;  coordr^  s                r-   
test_alphazTestVoxels.test_alpha  s    ,,<*>?R**\*1a!VVVAE]Qb/*#r
#r
IIfI0Aw$779 	<KE4%=C"CC=dE$:$:;;;	<r/   zvoxels-xyz.png{Gz?F)r   r   r   c                    t        j                  ddi      \  }}d }t        j                  d      dz  \  }}} ||      } ||      } ||      }	|dz
  dz  |dz
  dz  z   |	dz
  dz  z   d	k  }
t        j                  |
j
                  d
z         }||d<   ||d<   |	|d<   |j                  ||||
|t        j                  d|z  dz
  dd      d       y )Nr5   r3   r6   c                     d}t        | j                        D ]N  }| |t        j                  d d z      | |t        j                  dd  z      z   dz  } |t        j                  d d  z  }P | S )Nr&  ro   r   rY  )r   ndimr   	index_exp)rY   slr~   s      r-   	midpointsz&TestVoxels.test_xyz.<locals>.midpoints  sv    B166] &rBLL"--.rBLL,,-.145bll1o%& Hr/   )   rM  rM  g      0@r-  r   r  )rn   r;  r<  r=  r   r   )r  r  r_  )rC   r8   r   r-  rH  r  r.  r  )r/  rH   r'   rL  r)   r   r   rcgcbcspherer   s               r-   test_xyzzTestVoxels.test_xyz  s     ,,<*>?R	 **\*T11aq\q\q\ s(Q"s(Q."s(Q>G &,,-.vvv 			!Q6#WWQvX^Q: 	 	!r/   c                 D   t        j                  d      \  }}}t        j                  d      }t        j                  ddi      \  }}t               t        d      fD ]V  } |j                  |fi |  |j                  dd|i|  |j                  ||||fi |  |j                  |||fd|i| X t        j                  t        d	
      5  |j                  |||||       d d d        t        j                  t        d	
      5  |j                  ||       d d d        t        j                  t        d
      5 }|j                  ||||       d d d        j                  j                  dk(  sJ y # 1 sw Y   xY w# 1 sw Y   jxY w# 1 sw Y   =xY w)Nrs   )r   rn   rt   r5   r3   r6   r  )rv  filledr.  rJ  )rT  zkeyword argument 'x')rT  rY   rZ   r[   rY   r&  )r   r-  r  rC   r8   r9   r.  rL  rM  	TypeErrorAttributeErrorr  name)	r/  rY   rZ   r[   rT  rH   r'   kw	exec_infos	            r-   test_calling_conventionsz#TestVoxels.test_calling_conventions   sw   **Y'1a#,,<*>?R 64#./ 	4BBIIf##BII*V*r*BIIaAv,,BIIaA3f33		4 ]]9H5 	6IIaAvfI5	6 ]]9H5 	IIaO	 ]]>1GH 	4IIIVqAI3	4##s***	6 	6	 		4 	4s$   E>F
F>F
FFN)__name__
__module____qualname__mpl3d_image_comparisonr0  r3  r9  r>  rE  rR  rZ  r&  r/   r-   r+  r+    s    01A B 45WE- F- 67wG
- H
- 237C
- D
- /0@< A<" -. $%wH!H!@+r/   r+  c                     ddgddgddg}}} ddgd	d
gddg}}}t        j                         }|j                  d      }|j                  | ||      }|d   }	t        j
                  j                  | ||f|	j                                |	j                  |||       t        j
                  j                  |||f|	j                                |	j                  |        |	j                  |       |	j                  |d       t        j
                  j                  | ||f|	j                                |	j                  dd       t        j
                  j                  | |t	        j                  |      f|	j                                y )Nr   r   r   rn   rt   rp   r   r  r  r  r   r   r3   r4   r[   r  )rC   rD   rE   r?  r   r   r  get_data_3drP  	set_xdata	set_ydataset_3d_propertiesr   )
rY   rZ   r[   r  r  r  rH   r'   r  rQ   s
             r-   test_line3d_set_get_data_3drd    sP   !fq!fq!f!qAQ!Q"bBB
**,C	D	)BGGAq!E8DJJ!!1a)T-=-=-?@RR JJ!!2r2,0@0@0BCNN1NN1ac*JJ!!1a)T-=-=-?@ac*JJ!!1aq)9":D<L<L<NOr/   c                     | j                  d      }|j                  g dg dg d       |j                          |j                  d      }|j                          |j                  g dg dg d       y )Nr3   r4   )r   r   r   r   )r   r   r   r   )r   r   r   r   )rE   r?  invert_yaxisr;   s      r-   test_invertedrg  ,  s^     
				.BGGNO];OO					-BOOGGNO];r/   c                  
   t        j                  ddi      \  } }|j                         rJ |j                         rJ |j	                         rJ |j                  dd       |j                  dd       |j                  dd       |j                         sJ |j                         sJ |j	                         sJ |j                          |j                         rJ |j                         rJ |j	                         rJ y )Nr5   r3   r6   r   r   )	rC   r8   xaxis_invertedyaxis_invertedzaxis_invertedr  r  r	  r  rG   s     r-   test_inverted_clarl  8  s     ll|T&:;GC  """  """  """KK1KK1KK1FFH  """  """  """"r/   c                  D   t        j                         } t        |       }|j                  dd       |j                  dd       |j                  dd       | j                  j                          |j                  j                         D ]  }|j                  j                  dk(  rJ  |j                  j                         D ]  }|j                  j                  dk(  rJ  |j                  j                         D ]  }|j                  j                  dk(  rJ  y )NrY   r   )rR   r   rZ   r[   )rC   rD   r   tick_paramsr   r   rN   r  	tick1line_colorrO   rP   )rH   r'   r  s      r-   test_ax3d_tickcolourrq  L  s    
**,C	BNNEN*NNEN*NNEN*JJOO((* .~~$$---.((* .~~$$---.((* .~~$$---.r/   c                 \   | j                  ddddi      }|j                  D ]  }|j                  dd        t        |g d      D ]  \  }}|d	   j	                  |d
       |d   j	                  |d       |d   j	                  |t
        j                  d           |d   j	                  |t
        j                  d           |d   j	                  |t
        j                  d            d }|j                  ddddi      }|j                  D ]  }|j                  dd        t        |dgdgdgg d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           '  y )Nrt   rp   r5   r3   r6   g    cAg   @cA)rY   rZ   r[   rW   r   plain)rR   r   r   )r  r   )rR   	scilimitsr   zaxes.formatter.useoffset)rR   	useOffsetrn   zaxes.formatter.use_locale)rR   	useLocalezaxes.formatter.use_mathtext)rR   useMathTextc                 \    |D cg c]  }t        | |      j                          c}S c c}w r  )r  get_major_formatter)r'   namesrW  s      r-   get_formattersz-test_ticklabel_format.<locals>.get_formatterso  s&    DIJDD!557JJJs   !)rN   rO   rP   )rN   rO   rP   F)r8   r   r  r&   ticklabel_formatr!  r   set_scientificset_powerlimitsset_useOffsetset_useLocaleset_useMathText)	r<   r=   re   r'   rowrW  r{  rz  fmts	            r-   test_ticklabel_formatr  ]  s   


AqlD-A

BChh #
C"#56 I	TAW 	  	&A 	  	*AS\\2L%M!M 	  	OAS\\2M%N!N 	  	PALL)FGG 	  	IIK 

1a\4,@

AChh #
C"#7)gY	3NO A
U "#a&%0 	&Cu%	&!#a&%0 	)C(	)!#a&%0 	LC#,,/I"JJK	L!#a&%0 	MC#,,/J"KKL	M!#a&%0 	ACLL!>??A	AAr/   c                 p   d}t        j                  t        j                  ddd      t        j                  ddd      t        j                  ddd            \  }}}t        j                  |      x}x}}t	        || fd      D ]0  \  }	}
|	j                  d      }|j                  |||||||
|	       2 y )
Nr3  gr   r  r   )r   r  r3   r4   )r   r6  )r   r   r   	ones_liker&   rE   r8  )r<   r=   r6  rY   rZ   r[   r:  r;  r<  rH   r   r'   s               r-   test_quiver3D_smoker    s    Ekk
		$3
		$3
		$3GAq!
 QAAGX.9 @V___-
		!Q1a6	?@r/   zminor_ticks.pngc                  <   t        j                         j                  d      } | j                  dgd       | j	                  dgd       | j                  dgd       | j                  dgd       | j                  d	gd       | j                  d
gd       y )Nr3   r4   r  T)minorquartergQ?thirdr-  half)	rC   rD   rE   rK   set_xticklabelsrL   set_yticklabelsrM   set_zticklabels)r'   s    r-   test_minor_ticksr    s    		!	!T	!	2BMM4&M%	{$/MM4&M%y-MM4&M%xt,r/   zerrorbar3d_errorevery.pngc            	         t        j                  ddt         j                  z  dz   d      } t        j                  |       t        j                  d| z        t        j                  d| z        }}}t        j                         }|j                  d      }d	}t        j                  | j                        }||z  dk(  ||z  dz  dk(  z  }||z  dk(  ||z  dz  dk(  z  }	|j                  |||d
||	|       y)z0Tests errorevery functionality for 3D errorbars.r   r   r  rF  rn   rp   r3   r4      r  )zuplimszlolims
erroreveryN)
r   r   r<  r=  r>  rC   rD   rE   r  errorbar)
rU  rY   rZ   r[   rH   r'   estepr~   r  r  s
             r-   test_errorbar3d_erroreveryr    s     			!QruuWRZ&AffQi!bffQqSk!qA
**,C	D	)BE
		!&&A5yA~!u*q.A"56G5yA~!u*q.A"56GKK1agw   "r/   zerrorbar3d.pngr   c                      t        j                         } | j                  d      }g d}g d}|j                  ||||||dg dg ddd	d
       |j	                          y)z9Tests limits, color styling, and legend for 3D errorbars.r3   r4   )r   r   rn   rt   rp   )r-  r-  r-  r-  r-  rn   )FTFTT)TFFTFTpurplezError lines)rY   rZ   r[   xerryerrzerrcapsizer  r  yuplimsecolorr   N)rC   rD   rE   r  legend)rH   r'   dr  s       r-   test_errorbar3dr    sa     **,C	D	)BAAKK!qAAAAq89}	  6
 IIKr/   z
stem3d.pnggMb?c            
         dt         j                  d<   t        j                  ddddddi      \  } }t        j                  d	dt        j
                  z        }t        j                  |t        j
                  dz  z
        }t        j                  |t        j
                  dz  z
        }|}t        |d	   g d
      D ].  \  }}|j                  ||||       |j                  d|        0 t        j                  t        j
                   dz  t        j
                  dz  d      }t        j                  |      }t        j                  |      }t        |d   g d
      D ]Y  \  }}|j                  |||ddd|      \  }}	}
|j                  d|        |j                  dd       |
j                  d       [ y )NTr   r   rn   )r  r   r5   r3   r   constrained_layoutr7   r   r  )orientationzorientation=r   r   zC4-.C1Dr  )linefmt	markerfmtbasefmtr  rX   )r[  markeredgewidth)rC   r   r8   r   r5  r<  r>  r=  r&   stemry   r  rc   set_linewidth)rH   re   r@  rY   rZ   r[   r'   r   
markerline	stemlinesbaselines              r-   test_stem3dr    s   (,CLL$%||Aq&/3(4d';=HC KK1RUU7#E
uruuQwA
uruuQwAAA0 ,D
1aT*
|D6*+, 	RUUF1HbeeAgr*A
QA
q	AA0 "D*,''q!eT +2 +'
Ix 	|D6*+vqAq!"r/   zequal_box_aspect.pngc                     ddl m} m} t        j                         }|j                  d      }t        j                  ddt        j                  z  d      }t        j                  dt        j                  d      }t        j                  t        j                  |      t        j                  |            }t        j                  t        j                  |      t        j                  |            }t        j                  t        j                  |      t        j                  |            }|j                  |||       ddg}	 |t        j                  t         | |	|	|	                  d      D ]Y  \  }
}t        j                   t        j"                  |
|z
              |	d   |	d   z
  k(  s> |j$                  t'        |
|      d	d
i [ t        j(                  |j+                         |j-                         |j/                         g      }t1        |d         t3        |d         g}|j5                  |       |j7                  |       |j9                  |       |j;                  d       |j=                  d       t?        j@                  tB        d      5  |j=                  dd       d d d        y # 1 sw Y   y xY w)Nr   )r"   r   r3   r4   r   r   ro   r   r   r   offrr   zArgument zoom =rJ  )zoom)"r   r"   r   rC   rD   rE   r   r5  r<  outerr>  r=  r  rb  r    r!   r#   r$   r%   r&   r{  r  r  r  r  r  r  r  rc  rR   rz   rL  rM  r-  )r"   r   rH   r'   r:  r;  rY   rZ   r[   r)   rj  r  xyzlimXYZlims                 r-   test_equal_box_aspectr    s   /
**,C	D	)B 	Aq255y#&A
Aruuc"A
BFF1I&A
BFF1I&A
a"&&),A OOAq! 
QARXXd71a+;&<=qA -166"&&Q- AaD1Q4K/BIIs1ay,,-
 __	"--/2==?;F &)nc&)n-FMM&MM&MM&GGENi 	z):	; .
)"-. . .s   J;;Kc                     d} t        j                  d| ddddi      \  }}|D ]l  }|j                  t        j                  j                  d      t        j                  j                  d      t        j                  j                  d            }n t        j                  |d	
      }|j                  j                          |j                  j                         j                  d   dk  sJ y )Nr   r   )rt   rp   Tr5   r3   r  rp   
horizontal)r'   r  r  )rC   r8   r  r   r.  r  r  r   r   r'   get_positionextents)	num_plotsrH   re   r'   p_tricbars         r-   test_colorbar_posr    s    I||Ay&/3(4d';=HC  4		 2BIIOOA4F "		 244 <<#<@DJJOO77!))!,s222r/   c                  V   t        j                         } | j                  d      }|j                  dd       |j	                         rJ |j                         dk(  sJ |j                         dk(  sJ |j                  d       |j	                         rJ |j                         dk(  sJ |j                         dk(  sJ |j                          |j	                         sJ |j                         dk(  sJ |j                         dk(  sJ |j                  d       |j	                         sJ |j                         d	k(  sJ |j                         dk(  sJ |j                  d
       |j	                         sJ |j                         dk(  sJ |j                         dk(  sJ y )Nr3   r4   r   r   r  )r   r   )r   r   )rU   )r   r   r   )rV   )r   r   r   r   )	rC   rD   rE   r	  rk  get_zlim
get_zbound
set_zboundinvert_zaxisrG   s     r-   test_inverted_zaxisr    s   
**,C	D	)BKK1  """;;=F"""==?f$$$ MM&  """;;=F"""==?f$$$ OO;;=F"""==?f$$$ MMM;;=F"""==?f$$$ MMM;;=F"""==?f$$$r/   c                  f   t        j                         } | j                  d      }t        j                  |j                         d      sJ |j                  d       t        j                  |j                         d      sJ |j                  d       |j                         d	k(  sJ t        j                  t        d
      5  |j                  dd       d d d        t        j                  t        d      5  |j                  dd       d d d        y # 1 sw Y   AxY w# 1 sw Y   y xY w)Nr3   r4   r  r   )r   )r  r   r   )r   r  z"Cannot pass both 'lower' and 'min'rJ  r   )r#  r   z"Cannot pass both 'upper' and 'max')r$  r   )
rC   rD   rE   r   r  r  r	  rL  rM  rU  rG   s     r-   test_set_zlimr  9  s    
**,C	D	)B;;r{{}n555KKQK;;r{{}j111KKQK;;=F"""	A
C &
11%& 
A
C #
"# #& &# #s   D>D'D$'D0c                 ,   d\  }}}| j                  dd      }| j                  dd|      }| j                  dd      }|j                  |       |j                  |||d	       d
D ])  }|j                  |d      }	|	j                  |||       + y )N)rp   r   r      r3   r4      )r5   	shareview   T)r   r   r   share)r  r  r  r   )rE   r  r   )
r<   r=   r   r   r   rF  rG  ax3subplot_numr'   s
             r-   test_shared_viewr  J  s     D$


st

4C


sts

CC


st

4CMM#MMt$TM>& 6   >
$T56r/   c                  X   t        j                         } | j                  dd      }| j                  dd|      }|j                  ddgddgddg       |j                  ddgddgddg       |j	                  g d	       |j                         d
k(  sJ |j                         d
k(  sJ y )N   r3   r4      )r5   sharezr   r   r   )r5  r   r         @)r5  r  )rC   rD   rE   r?  rM   r  )rH   rF  rG  s      r-   test_shared_axes_retickr  X  s    
**,C
//#$/
/C
//#$s/
;CHHaVaVaV$HHaVaVaV$NN$%<<>[(((<<>[(((r/   c            
         t        dg d      } | j                  dk(  sJ | j                  g dk(  j                  sJ |  j                  dk(  sJ |  j                  g dk(  j                  sJ t        dg d      }|j                  dk(  sJ |j                  g dk(  j                  sJ t        dg d      }|j                  dk(  sJ |j                  g dk(  j                  sJ t        dg d      }|j                  dk(  sJ |j                  g dk(  j                  sJ ||z  |  k(  sJ ||z  |  k(  sJ ||z  |  k(  sJ | |z  |k(  sJ | |z  |k(  sJ | |z  |k(  sJ ||z  |k(  sJ ||z  |k(  sJ ||z  |k(  sJ ||z  | k(  sJ ||z  | k(  sJ ||z  | k(  sJ t        dg d	      t        d
g d      z  t        dg d      k(  sJ | |||fD ]  }|j	                         j                  |j                  k(  sJ |j	                         j                  |j                   k(  j                  sJ |j	                         j	                         |k(  sJ ||j	                         z  j                  dk(  j                  rJ  t        dg d      }|j
                  dk(  sJ | j
                  dk(  sJ |j
                  dk(  sJ |j
                  dk(  sJ |j
                  dk(  sJ || |||fD ].  }|j
                  ||j	                         z  j                  k(  r.J  t        dg d      t        dg d      t        dg d      t        dg d      t        d
g d      fD ]!  }|j                         j
                  dk(  r!J  | |||fD ]2  }||j                         z  | k(  sJ |j                         |z  | k(  r2J  |j                  g d      t        j                  g d      k(  j                  sJ g dg dt        t        j                  d      ddt        j                  d      g      fg dg dt        t        j                  d      dt        j                  d       dg      fg dg dt        dg d      ffD ]!  \  }}}t        j                  ||      |k(  r!J  g dg dg dg dfD ]  }t        j                  |      }t        j                  t              5  t        j                  ||       }d d d        t        j                   j
                  d      sJ t        j"                  |j                  |      dk(  rJ  dD ]  \  }}	}
dD ]  }t        j$                  t        j&                  |      t        j&                  |	      t        j&                  |
            }t        j                   |j
                  d      sJ t        ||j                  z  ||j                  z        }t        j(                  j+                  t        j,                  t        j.                  |            ||	|
fd         y # 1 sw Y   IxY w)Nr   r   ro   r   r   r   r   r\  rZ  r   rs   r   )r  r  r  i)r  0   ,   )rn   r   r   )r   rt   r   )r   r   rp   r   r   rn   )r   r  r7  r-  rr   )r   )r   r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )/   r   ir  ư>atol)
Quaternionscalarvectorall	conjugater  r@  
reciprocalrotater   r    r  rotate_from_torL  warnsUserWarningiscloser  from_cardan_anglesdeg2radr   r  rad2degas_cardan_angles)q1qiqjqkqq0r1r2r   r   r   mags               r-   test_quaternionr  d  s   	Ay	!B99>>II"''''C<<2SLLI%****	Ay	!B99>>II"''''	Ay	!B99>>II"''''	Ay	!B99>>II"''''b5RC<<b5RC<<b5RC<<b5B;;b5B;;b5B;;b5B;;b5B;;b5B;;b5RC<<b5RC<<b5RC<<q)$z!Y'??#|,- . - "b" 3{{}##qxx///$$	16666{{}&&(A---1;;=((A-2222	3 
Ay	!B77a<<77a<<77a<<77a<<77a<<"b"b! 2vv!AKKM/111112 	1i 1i 1i 1i 1i  ' {{}!!Q&&&' "b" &2%%%||~a2%%%& IIi BHH[$99>>>> 
Iz"''#,Arwws|8LMN	Iz"''#,RWWS\M18MNO	Iz!Y78 6	B
 ((R0A5556 )Y	: )XXb\\\+& 	3))"rc2A	3zz!&&!$$$vvahh#q(((), 
FdD  	FC--

4 "**T"2BJJt4DFA::affa(((3>3>:AJJ&&rzz*2M2Ma2P'Q(,dD'9 ' F	F	
F	3 	3s   (YY	r   )azel	trackballrQ  arcballc                 :   | dk(  rd}nt         j                  d   dz  }|dz  }dt         j                  d<   t        j                  d| i      5  g dg d	g d
g dddt        j                  d      dz  gddt        j                  d      dz  gg dfD ]  \  }}}t        j                         }|j                  dddd      }|j                  dd|       |j                  j                  j                          |j                  t        |t        j                  dd             |j                  t        |t        j                  ||z  |j                   z  ||z  |j"                  z               |j                  j                  j                          t        j                  d      dz  }i ddddddd|fdddddddddd|fddd d!d"d#dd|fd$d%dd&t        j$                  z  dfd'd(d)d*d#dd|fd+d,d-d.d/d0dd|fd1d2dd3d4d5d6d0dd|fd7d8d9d:d;d<dd|fd=d>d?d@dAdBdCd<dd|fdDi}|| |||f   \  }	}
}t        j&                  j)                  |j*                  |j,                  |j.                  f|	|
|fdEF        	 dGdGdG       yG# 1 sw Y   yGxY w)Hz*Test rotating using the left mouse button.r  r-  zaxes3d.trackballsizer   r   zaxes3d.trackballborderzaxes3d.mouserotationstyler\  )r   r   r   rZ  )r   r   r   rn   r   )r   r   r   r   r3   r4   buttonxdataydata)r  r   r   r   )r   r  r   )r  r   r   r   )r  r   r   )^iN|C     6r   )r  r   r   r   r   )r  r   r   r   )g     6@r  r   )r  r   r   r   )r  r  r   )r  r  r   )r  r   r   r   )r   gyܥ<r   )r  r   r   r   )r  r   r   r  )E~8o.2.gC5%
@)r  r   r   r   iL)r  r   r   r   )gi:+@=!7Q9gX:@)r  r   r   r   )r  r  g:TS@@)gi:+r	  gT7@@)rQ  r   r   r   )r   r   r   )rQ  r   r   r   )r   r   r   rQ  )`#I9v$$0g! _B@)rQ  r   r   r   )rQ  r   r   r   )g&s|,@u.:gu.:@)rQ  r   r   r   )r
  r  g%T@@)g&s|,r  g6h@@)r  r   r   r   )r   r   r   )r  r   r   r   )r   r   r   r  )#KHxqZrDgwJ3@)r  r   r   r   r   )r  r   r   r   )g`#I9@ګ'Lgv$$0@)r  r   r   r   )r  r  gK;H@)r
  r  gĮE@r  r  N)r!  r   
rc_contextr   r  rC   rD   rE   r   r   r   _button_pressr   r   LEFT_on_move	_pseudo_w	_pseudo_hr<  r   r  r   r   r   )r   rj  r   r   r   rH   r'   r   expectationsnew_elevnew_azimnew_rolls               r-   test_rotater    sq    LL/014HA-.CLL)*	4e<	= 9RCA&S"''!*Q,' 8	RLD"b **,CAqT:BLLAt$II!!# 2k&6&6aqIKKK2k&6&6!"2bll!2!B$r||:KMN II!!#
1AN!<N!;N C#%;N ";	N
 #$:N #$;N S!$&=N '(9N '(9N aa(*LN 'DJ(:N ()JN ()LN b#q)+NN" $[#N$ $[%N& 1c1%'I'N( $[$&H$&I2sA&(K$k$kAsA&(K$k%'I%'JBQ')L?NL@ ,8b"8M+N(HhJJ&&"'''B(0(H'ED ' Ro8	R9R 9R 9Rs   H9JJc                     d } t        j                         }|j                  d      }|j                  ddd       |j                  j                           | |j                          \  }} | |j                          \  }} | |j                          \  }}|j                  t        |t        j                  dd             |j                  t        |t        j                  dd              | |j                          \  }	}
 | |j                          \  }} | |j                          \  }}|
t        j                  |      k(  sJ |t        j                  |      k(  sJ |t        j                  |      k(  sJ |	t        j                  |      k7  sJ |t        j                  |      k7  sJ |t        j                  |      k7  sJ y)z1Test mouse panning using the middle mouse button.c                 $    | |z   dz  }|| z
  }||fS )z+Convert min/max limits to center and range.r   r&  )dmindmaxcenterrange_s       r-   convert_limztest_pan.<locals>.convert_lim  s#    +"v~r/   r3   r4   r   r   r   N)rC   rD   rE   rq  r   r   r  r  r  r  r   r   MIDDLEr  rL  approx)r!  rH   r'   	x_center0x_range0	y_center0y_range0	z_center0z_range0x_centerx_rangey_centery_rangez_centerz_ranges                  r-   test_panr0    s    **,C	D	)BJJq!QJJOO%r}}7Ix%r}}7Ix%r}}7Ix 2k00CEKK2k00CE $R]]_5Hg#R]]_5Hg#R]]_5Hg fmmH----fmmH----fmmH---- v}}Y////v}}Y////v}}Y////r/   ztool,button,key,expectedr  ))rW  Q?)rF  gQ?)r*  {Gz?rY   ))g{Gzr  )gQr2  gQr1  rZ   ))Q뱿r   )g{Gzr2  )rW  gQ?))g
ףp=
r	  )g{Gzg(\?)r4  g
ףp=
?pan))gffffff(\)gp=
ףgQgRQgffffff))g
ףp=
gzG)r6  gq=
ףpݿr3  ))r  g{Gz?)gRQg(\ؿr7  c                    t        j                         }|j                  d      }|j                  ddd       |j                  j                          |j                         |j                         |j                         }}}d}	d}
|j                  j                  |	      j                  t              }|j                  j                  |
      j                  t              }t        d|j                  g||d|i}t        d|j                  g||d|i}t        |j                        }| d	k(  rD|j                          |j!                  |       |j#                  |       |j%                  |       nC|j'                          |j)                  |       |j+                  |       |j-                  |       |\  }}}|j                         t/        j0                  |d
      k(  sJ |j                         t/        j0                  |d
      k(  sJ |j                         t/        j0                  |d
      k(  sJ |j3                          |j                         t/        j0                  |      k(  sJ |j                         t/        j0                  |      k(  sJ |j                         t/        j0                  |      k(  sJ |j5                          |j                         t/        j0                  |d
      k(  sJ |j                         t/        j0                  |d
      k(  sJ |j                         t/        j0                  |d
      k(  sJ |j7                          |j                         t/        j0                  |      k(  sJ |j                         t/        j0                  |      k(  sJ |j                         t/        j0                  |      k(  sJ y )Nr3   r4   r   rL  r   r   button_press_eventkeybutton_release_eventr  rF  )r$   )rC   rD   rE   rq  r   r   r  r  r  	transDatar  astypeintr	   r
   r  
press_zoom	drag_zoomrelease_zoomr5  	press_pandrag_panrelease_panrL  r#  backforwardhome)toolr  r;  expectedrH   r'   xlim0ylim0zlim0d0d1s0s1start_event
stop_eventtbr  r  r  s                      r-   test_toolbar_zoom_panrU  /  s   ( **,C	D	)BJJq!QJJOO--/2==?BMMO%5E 
B	B 
			#	*	*3	/B				#	*	*3	/B cjj@+-@/5@;>@K

B-/B17B=@BJ 
CJJ	'Bv~
	
k"
Z 

#

[!
J
z"  D$==?fmmDd;;;;==?fmmDd;;;;==?fmmDd;;;; GGI==?fmmE2222==?fmmE2222==?fmmE2222JJL==?fmmDd;;;;==?fmmDd;;;;==?fmmDd;;;;GGI==?fmmE2222==?fmmE2222==?fmmE2222r/   c                    t        j                  t        t        j                  t        j
                  ddd      t        j
                  ddd      t        j
                  ddd      g             j                  \  }}}||z   }| j                  dd      }|j                  ||||dd	      }| j                  j                          |j                          |j                  dd      }|j                  ||||dd	      }	y )
Nr   rp   r   o   r3   r4   r   r  )r   rj  r   )r   r    r!   r   r"   r   TrE   rq  r   r   changed)
r<   r=   rY   rZ   r[   r   r(  sc_testr'  sc_refs
             r-   test_scalarmap_updater\  {  s     hhtI--		!Q0B02		!Q0B02		!Q0B0D E F GGHq Aq! 	
AA ""34"8GooaAbyoAGOOOO    6F^^Aq!qBY^?Fr/   c                      t        j                         } | j                  dd      }|d   j                  dddd      }|d   j                  ddddd      }y )Nr   r   r   r3   r4   other)r5   r   )rC   rD   
subfiguresrE   )rH   sfr'   s      r-   test_subfigure_simplera    sY    
**,C	1	B	A		1at		4B	A		1at7		CBr/   computed_zorder)baseline_imagesr   r1   r   c            
      b   dt         j                  d<   t        j                         } | j                  dd      }| j                  dd      }d|_        d}||fD ]  }t        j                  |gd	d
d      }|j                  |       |j                  ddddd       |j                  ddddd       |j                  d       |j                  d       |j                  d        | j                  dd      }| j                  dd      }d|_        d}t        j                  | |f| |f      \  }	}
t        j                  d      }d}t        j                  | |fd|f      \  }}||z  }t        j                  | |f| df      \  }}||z  }d}d}t        j                   ddt        j"                  z  |      }|t        j$                  |      z  |t        j&                  |      z  ||z  t        j&                  |      z  }}}||fD ]  }|j)                  |||dddd       |j                  ||dk     ||dk     ||dk     d d!d"d#       |j)                  |	|
|dddd       |j                  |t        j&                  |      z  |t        j$                  |      z  t        j                  |      d d!d
d#       |j)                  |||dddd$       |j                  ||dkD     ||dkD     ||dkD     d d!d"d%#       |j+                  d&d'd(       |j-                  d)        y )*NTr      r3   r4      F)r   )r   rp   r   )rp   rp   r   )rp   r   r   whiteblackr   )r  r  r  )r   r   )r   rt   r   r   )r   r  )rn   rn   )r   rn   r   )r   rX  )r   r        r-  r   r  r,  r   ro   )r   r   r_  r  rp   z--r   )r  	linestyler   r  rn   rt   r   r  r   r  )rC   r   rD   rE   rb  r   r]  rU  r?  rq  r  r  r	  r   r   rH  r5  r<  r>  r=  rb  r   rR   )rH   rF  rG  cornersr'   trir  ax4dimr   r   r   angleX2Y2Z2X3Y3Z3r)   r  thrY   rZ   r[   s                            r-   test_computed_zorderrx    sS    )-CLL$%
**,C
//#$/
/C
//#$/
/CC ;GCj $$gY0707,-/ 	C  	%: 	

666U2
>
H
H
H" //#$/
/C
//#$/
/CC
C;;c{cT3K0DAq
AE[[3$q#h/FB	eB[[3$tQi0FB	eB	AA	QBEE	1	%B"&&*nq266":~uqy266":/E!qACj #
B$!"#!	 	 	#
 	!a%!AE(Aa!eH	 	 	 	1a#!"# 	 	 	" 	BFF2JBFF2J	 	 	 	B$!"# 	 	 	" 	!a%!AE(Aa!eH 	 	 	"3Q/
G#r/   c                  D   t        j                         } | j                  d      }t        j                  d      }|j                  |t        j                  |             d}d}| j                  j                          |j                  ||      dk(  sJ |j                  dd       | j                  j                          |j                  ||      d	k(  sJ |j                          | j                  j                          |j                  ||      dk(  sJ |j                  d
       | j                  j                          |j                  ||      dk(  sJ |j                  dd       | j                  j                          |j                  ||      dk(  sJ y )Nr3   r4   r   r  z"x=10.5227, y pane=1.0417, z=0.1444r   rZ   )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)rC   rD   rE   r   r   r?  r=  r   r   format_coordr   r   )rH   r'   rY   xvyvs        r-   test_format_coordr~    sT   
**,C	D	)B
		"AGGArvvay	B	BJJOO??2r"&JJJJ LLbL,JJOO??2r"&IIII LLNJJOO??2r"&JJJJ WJJOO??2r"&JJJJ W3/JJOO??2r"&IIIIr/   c                  "   t        j                         } | j                  d      }t        j                  d      }|j                  |t        j                  |             | j                  j                          |j                         dk(  sJ y )Nr3   r4   r   )FTF)
rC   rD   rE   r   r   r?  r=  r   r   get_axis_position)rH   r'   rY   s      r-   test_get_axis_positionr  	  sf    
**,C	D	)B
		"AGGArvvayJJOO!%9999r/   c                     t        j                         } | j                  d      }|j                  d       |j                         dk(  sJ |j                  ddd       |j                         dk(  sJ |j                  d	       |j                         d
k(  sJ |j                  d       |j                         dk(  sJ |j                  d       |j                         dk(  sJ y )Nr3   r4   r  )r  r  r  r  r  )r  r  r  r   )rY   )r   r  r  )rZ   )r   r  r  r[   )r   r  r   )rC   rD   rE   r  rG   s     r-   test_marginsr  	  s    
**,C	D	)BJJsO::<?***JJsC::<?***JJJO::<=(((JJJ::<=(((JJJO::<;&&&r/   c                      t        j                         } | j                  d      }|j                  ddd       |j	                         dk(  sJ |j                         dk(  sJ |j                         dk(  sJ y )Nr3   r4   r  r  r  )rC   rD   rE   r  get_xmarginget_ymarginget_zmarginrG   s     r-   test_margin_gettersr  %	  sl    
**,C	D	)BJJsC>>s""">>s""">>s"""r/   zerr, args, kwargs, match)ro   z!margin must be greater than -0\.5)r   ro   r   )r   r   ro   ro   r[   )r   z'Cannot pass both positional and keyword)rY   rZ   r9  z*Must pass a single positional argument forc                     t        j                  | |      5  t        j                         }|j	                  d      } |j
                  |i | d d d        y # 1 sw Y   y xY w)NrJ  r3   r4   )rL  rM  rC   rD   rE   r  )errr  r&  rK  rH   r'   s         r-   test_margins_errorsr  .	  sU      
s%	( $jjl___-

D#F#$ $ $s   9AA#c                 \   |j                  d      }t        ddd      }t        j                  |d       |j	                  |       |j                         dk(  sJ | j                  d      }t        j                  dddd      }|j	                  |       |j                         dk(  sJ y )Nr3   r4   r-  zFoo bar $\int$r   r  ru  )rE   r   r   text_2d_to_3dro  get_position_3dText3D)r<   r=   r'   txtt3ds        r-   test_text_3dr  D	  s    					-B
sC*
+C	q!MM# M111					.B
,,sC$5
6CMM# M111r/   c                      t        j                         } | j                  d      }|j                  dgdggdgdggdgdgg       y )Nr3   r4   r   r   )rC   rD   rE   r?  rG   s     r-   test_draw_single_lines_from_Nx1r  R	  sE    
**,C	D	)BGGaS1#J!qc
aS1#J/r/   c                 .   |j                  d      }t        j                         }t        |      }t	        j
                  |dd       |j                  |       | j                  d      }t	        j                  |dd      }|j                  |       y )Nr3   r4   )r   r-  r  r   r   rZ   r[   r   r  )rE   r   unit_rectangler   r   pathpatch_2d_to_3dro  PathPatch3D)r<   r=   r'   pathpatchpp3ds         r-   test_pathpatch_3dr  Y	  s    					-B DdOE	U&9DMM%					.BT&9DDMM$r/   zscatter_spiral.png)rc  r   r   c                     dt         j                  d<   t        j                         } | j                  d      }t	        j
                  ddt        j                  z  dz  d      }|j                  t	        j                  |      t	        j                  |      |d	|d
z  z   |dz        }| j                  j                          y )NTr   r3   r4   r   r   r      r   rp   r  )rC   r   rD   rE   r   r5  r<  rq  r=  r>  r   r   )rH   r'   rw  scs       r-   test_scatter_spiralr  f	  s     )-CLL$%
**,C	D	)B	QBEE	As	+B	BFF2Jr
B1rAv:"'	JB JJOOr/   c                      t        j                  ddi      \  } }t        dd      }|j                  |       t	        j
                  |       |j                          y )Nr5   r3   r6   rL  r  )rC   r8   r   rM  r   r  get_path)rH   r'   ps      r-   test_Poly3DCollection_get_pathr  t	  sI     ll|T&:;GCvsALLO	QJJLr/   c                  :   t         j                  ddddddf   \  } }t        j                  |      dz  t        j                  |       dz  z
  }t	        j
                         }|j                  dd      }|j                  || |d	
      }|j                          y Nr   r   y              Y@rn   r   rW  r3   r4   hotr   )	r   ogridr>  r=  rC   rD   rE   rb  rP  rZ   rY   r  rH   r'   r)   s         r-   #test_Poly3DCollection_get_facecolorr  ~	       88AbIqDy()DAq	a"&&)q.	(B
**,C		.B
1bu-AOOr/   c                  :   t         j                  ddddddf   \  } }t        j                  |      dz  t        j                  |       dz  z
  }t	        j
                         }|j                  dd      }|j                  || |d	
      }|j                          y r  )	r   r  r>  r=  rC   rD   rE   rb  get_edgecolorr  s         r-   #test_Poly3DCollection_get_edgecolorr  	  r  r/   zDvertical_axis, proj_expected, axis_lines_expected, tickdirs_expected)rW  #k$I?rW  ._x%I)rW  rW  (m?@mۿ)rW  rW  rW  g      $)#k$IrW  rW  W$%@g˗ì?g2m 3?g溾IgMg2m 3gM?r  )r  rW  rW  r  )rW  r  rW  r  )rW  rW  r  r  g˗ìg溾I?)r   r   r   )rW  rW  r  r  )r  rW  rW  r  )rW  r  rW  r  )r   r   r   c                    d}t        j                  dddd      }|j                  ddd|        |j                         j                  j                          |j                         }t        j                  j                  |||       t        |j                         |j                         |j                         g      D ]|  \  }}||   }	|j                  j                         }
t        j                  j                  |	|
|       ||   }|j!                  d      }t        j                  j#                  ||       ~ y	)
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   r3   r4   r   r   r   r   rz  rtolr   N)rC   subplotr   
get_figurer   r   get_projr   r   r  rx   	get_xaxis	get_yaxis	get_zaxisrQ   get_data_get_tickdirr  )rz  proj_expectedaxis_lines_expectedtickdirs_expectedr  r'   proj_actualr~   rR   axis_line_expectedaxis_line_actualtickdir_expectedtickdir_actuals                r-   test_view_init_vertical_axisr  	  s   H D	Q1	.BLLaaa}LEMMO! ++-KJJ}kEbllnbllnbllnMN 
H40399--/


""#57G(, 	# 	. -Q/**95


%%&6G
Hr/   rz  returnc                 x   t        j                  dddd      }|j                  ddd|        |j                         j                  j                          |j                         }t        |t        j                  dd      }|j                  |       t        |t        j                  dd      }|j                  |       |j                  j                  |       |j                  k(  sJ |j                         }t        j                   j#                  t$        t        j                   j&                  ||       y	)
zO
    Test vertical axis is respected when rotating the plot interactively.
    r   r3   r4   r   r  r   r-  r   N)rC   r  r   r  r   r   r  r   r   r  r  r  _axis_namesindex_vertical_axisr   r   assert_raisesAssertionErrorr  )rz  r'   proj_beforeevent_click
event_move
proj_afters         r-   test_on_move_vertical_axisr  	  s    
 
Q1	.BLLaaa}LEMMO!++-KR(8(8KK[!B{'7'7s#NJKK
>>."2C2CCCC JJJ

22Kr/   zvertical_axis, aspect_expected)/0?F&H?r  )r  r  r  )r  r  r  c                 *   t        j                  dddd      }|j                  ddd|        |j                         j                  j                          |j                  d        t        j                  j                  ||j                  d       y )Nr   r3   r4   r   r  r  r  )rC   r  r   r  r   r   rz   r   r   r  _box_aspect)rz  aspect_expectedr'   s      r-   !test_set_box_aspect_vertical_axisr  
  so     
Q1	.BLLaaa}LEMMO!dJJTJr/   zarc_pathpatch.pngc                      t        j                  dddd      } t        j                  dddddd	
      }| j	                  |       t        j                  |dd       y )Nr   r3   r4   )r-  r-  r-  g?r   r   r  )r   heightrp  theta1theta2r   r[   r  )rC   r  mpatchArcrM  r   r  )r'   r  s     r-   test_arc_pathpatchr  
  sP     
Q1	.B

:SBs	4ALLO	Q!#.r/   zpanecolor_rcparams.pngc                      t        j                  dddd      5  t        j                  d      } | j                  d       d d d        y # 1 sw Y   y xY w)	Nr)   r   r   )zaxes3d.xaxis.panecolorzaxes3d.yaxis.panecolorzaxes3d.zaxis.panecolorr9  r   r3   r4   )rC   r  rD   rE   )rH   s    r-   test_panecolor_rcparamsr  $
  sP     
336368 
9 ) jj(4(	) ) )s   )AAc                     | j                  dd      }g d}g d}g d}|j                  |||d       g d|dd g d|dd |j                  dd      }g d}g d}g d}|j                  |||d       y)z~
    Test to see if the `z` axis does not get mutated
    after a call to `Axes3D.plot`

    test cases came from GH#8990
    rW  r3   r4   r  )rW  rW  rW  zo-NrD  )r<   r=   rF  rY   rZ   r[   rG  s          r-   "test_mutating_input_arrays_y_and_zr  /
  s     

st

4CAAAHHQ1d AaDAaD 

cd

3CAAAHHQ1dr/   c                     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                         }|j                  d      }|j                  | |||      }t        |j                               t        t        t        |      |/               k(  sJ y)	zU
    Test color parameter usage with non-finite coordinate arrays.

    GH#26236
    r   r   r   )rW  rW  rW  r   r3   r4   r   N)r   r  r
  rC   rD   rE   rq  r   get_offsetssuperr@  get_facecolors)rY   rZ   r[   r   rH   r'   path3ds          r-   test_scatter_masked_colorr  I
  s     
AA	
BFFAA	
AwA	F **,C	D	)BZZ1avZ.F v!!#$uT&\69;<= = =r/   zsurface3d_zsort_inf.pngc                     dt         j                  d<   t        j                         } | j                  d      }t        j
                  ddddddf   \  }}t	        j                  |      dz  t	        j                  |      dz  z   }t        j                  ||j                  d   dz  d |j                  d	   dz  d f<   |j                  |||d
       |j                  dd       y )NTr   r3   r4   r  r   r  r   r   r  r  r     )r   r   )rC   r   rD   rE   r   r  r=  r>  r
  r  rb  r   rr  s        r-   test_surface3d_zsort_infr  c
  s    (,CLL$%
**,C	D	)B88BqHb3h&'DAq
q	1rvvay!|#A,.FFAaggajAo
a(()OOAq!%O(LLbsL#r/   c                      t        j                  t        d      5  t        j                  g dg dg dgt
              } t        j                  | gd      }d d d        y # 1 sw Y   y xY w)NzCYou must provide facecolors, edgecolors, or both for shade to work.rJ  rZ  r[  r   Tr   )rL  rM  r-  r   r    r  r   r]  )r^  r   s     r-   &test_Poly3DCollection_init_value_errorr  q
  sY     
z5
6 7 xxIy95A""D66	7 7 7s   <A!!A*c            	          t        j                         } | j                  dd      }|j                  dddt	        j
                  g d             | j                  j                          y )NrW  r3   r4   r   r   r  r   )rC   rD   rE   rq  r   r    r   r   rG   s     r-   %test_ndarray_color_kwargs_value_errorr  {
  sL     **,C		.BJJq!Qbhh|4J5JJOOr/   )	functoolsr   platformsysrL  mpl_toolkits.mplot3dr   r   r   r   mpl_toolkits.mplot3d.axes3dr   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pyplotrC   numpyr   partialr^  r.   r>   rI   rS   rg   r   r   r   r   r   r   r   r   r   machiner  r
  r  r  markparametrizer)  r3  r9  rA  rH  rQ  rg  rl  rs  rw  ry  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=  rA  rE  rJ  rR  rX  r_  rj  rs  rv  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+  rd  rg  rl  rq  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r0  r  RIGHTrU  r   contextr\  ra  rx  r~  r  r  r  r-  tuplerU  r  r  r  r  r  r  r  r  r  strr  r  r  r  r  r  r  r  r  r&  r/   r-   <module>r     sJ      
  > > A : :  ; O 1 A 0       +**$i9 H ( )
 (8 9 34GD% E% -.EQ@ R@ U'J( K(  12$):4:4
J 34G$'LLH$<D!EE( W5J 6J	/ +,G< =& ./w?	 @	M6 W!!!#'OOUVXGXG 12'B C )*':
 ;
 ./w? @ )VY,?-2L,A-2L,A,C D ( )D0 )*GD E w7 8 ( )$" +,G< =0 (	* )	* )9
. :
. ./w?& @&  237C4 D4 (
- )
- (9 )9( e}5(3C ) 63Cl #s,(, ) -,& (2 )2. ./U'J$ K$ 01AH BH, 34GD= E=$ )9- :-$ =>gN
 O
 /0@ A /0@ A4 ( )" (! )! 78H I EI J0 (H )H0 )uGD9 E9" /0d'J? K?" *+7;5 <5 56gF4 G4 56gF6 G698 (UC D* (I )I ./w?I @I" 237C	 D	
D ( )6% 67wG+ H+ 56gF+ G+$ 89I J8 9:'J K4SR ./$):1:1* )*WM N -.$)::	!
, " /0@ A, 56gF G:	/9  1!45: 6 2:( (  ) 2 23$):5:5 +,%wO P /0@ A (#4 )#4L 266266"23+ . & 4&y+ y+xP$ (< )<#(." ($A )$AN (@ )@ $%W5- 6- 45W%P" Q"" )*'$4H$4$4$6'$ADqJJ <.U;" <": )*':". ;".J3 %B#" (
6 )
6	)[F| CEAREARH$0N 3!;#3#3TDF!;#3#3SGI!;#3#3SFH!;#4#4dGI +"2"2DJL +"2"2CIK +"2"2CHJKL:3L:3z 9(@ ) @(D #4"54#WW7O7OdJ>:'# 3	UB DE	Z%IJ	Z%IJ	UWsBi)MN	UWsBi)MN	UWsBi)MN	EC8	2	4	E3	2	4	E+	2	4	FB LM6 $$ (
2 )
20 (	 )	 #7"8"!! J //&0	 j)K+EFz*[+,FG{+k:-FG
 	
  //&0	 z*Z,DEj)K+DE{+j*-EF
 	
  //&0	 {+j+-FGj)J
+CDk*Z,DE
 	
?.1d%He1d%HP /:c d  ;0 $	,-	,-	,-KK #6"7"!/!/ #;"<"!)!) ( )2=4 237C
$ D
$7r/   