
    ^j                    t   d dl Z d dlZd dlZd dlZd dlm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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)m*Z+ d dl,Z- e j\                  edd      Z/d Z0 e       d        Z1 e/dgd      d        Z2 e/dgd      d        Z3 e/dgdd      d        Z4 e/dgdd      d        Z5d Z6d Z7 e/d gdd      d!        Z8 e/d"gdd      d#        Z9d$ Z: e/d%gdej                  d&k(  rd'nd (      d)        Z; e/d*gd      d+        Z<d, Z= e/d-gd      d.        Z> e/d/gd ee-j~                  j~                        j                  d0k  rd1nd (      d2        ZAd3 ZB e/d4gd ej                         d5k(  rd nd6(      d7        ZD e/d8gd      d9        ZE e/d:gd      d;        ZF e/d<gd      d=        ZGej                  j                  d>d?g d@gdAg dBgdCg dDgg       e       dE               ZJ e/dFgdGdH      dI        ZKdJ ZL e/dKgd      dL        ZM e       dM        ZNdN ZO e/dOgd      dP        ZP e       dQ        ZQ e/dRgd      dS        ZR e/dTgd      dU        ZS e/dVgd      dW        ZT e       dX        ZU e       dY        ZV e       dZ        ZW e       d[        ZXej                  j                  d\d]d^g       e       d_               ZY e       d`        ZZ e/dagdbdH      dc        Z[ e/ddgd      de        Z\ e/dfgd      dg        Z] e/dhgd      di        Z^ edjgd      dk        Z_ e/dlgd      dm        Z` e/dngd      do        Za e       dp        Zb e       dq        Zc e/drgd      ds        Zd e/dtgdd      du        Ze e       dv        Zf e/dwgdxdH      dy        Zg e/dzgd{dH      d|        Zh e/d}gd      d~        Zi e/dgd      d        Zj e/dgd      d        Zk e/dgd      d        Zld Zmd Zn e/dgdd(      d        Zo e       d        Zp e/dgd      d        Zq e/dgd      d        Zrd Zs e       d        Ztd Zu e/dgd      d        Zvd Zw e/dgd      d        Zx e/dgd      d        Zy e/dgd      d        Zzd Z{d Z| e/dgdd      d        Z} e/dgdd      d        Z~ e/dgdd      d        Zd Zd Zd ZddZ e/dgd      d        Z e/dgd      d        Zd Zd Zej                  j                  dd      ej                  j                  dd      d               Z e       d        Zd Z e/dgdd      d        Z e/dgdd      d        Z e/dgd      d        Z e       d        Zej                  j                  de-j                  e-j                   g      ej                  j                  dg d      d               Z G d d      Zd Z e       dÄ        ZdĄ Zdń Z e       dƄ        Z e       dǄ        Z edgd      dɄ        Z e/dgdd(      d˄        Z e/dgd ej                         d5k(  rd ndͬ(      d΄        Z edgd ej                         d5k(  rd ndЬ(      dф        Z edgd      dӄ        ZdԄ ZdՄ Zdք Z e       dׄ        Zd؄ Zdل Zej                  j                  dd۫      d܄        Zd݄ Zej                  j                  ddejL                  ddfdejL                  ddfdejL                  ddfdejN                  ddfdejL                  ddfdejL                  ddfdejL                  ddfg      d        ZejR                  jU                  d       e       d               Zd Z edgd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         Zd Z e       d        Z edg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,        ZÐd- Z e/d.gd      d/        ZŐd0 ZƐd1 Zǐd2 ZȐd3 Zɐd4 Zʐd5 Zːd6 Z̐d7 Z͐d8 Z e/d9gddd:;      d<        Z e/d=gdd>      d?        Zej                  j                  d@g dA      ejR                  jU                  d      dB               Z e       ej                  j                  dC      dD               Z e/dEgdd>      dF        Z e/dGgdd>      dH        Zej                  j                  dIdJdKdLifdJdKd0ifdJdMd0dNgifdJdOdPifdQdKd0ifdQdRdifdQdSdTifdQdMd0dNgifdUdVdTifdUdKd0ifdWdOdXifg      dY        Zej                  j                  dg d      dZ        Zאd[ Zej                  j                  d\g d]      d^        Zِd_ Zڐd` Zېda Zܐdb Zݐdc Zސdd Zy(e      N)parse)Axes3Daxes3dproj3dart3d)_Quaternion)MouseButton
MouseEventNavigationToolbar2)cm)colorspatches)image_comparisoncheck_figures_equal)LineCollectionPolyCollection)Circle	PathPatch)Path)Text)_apiT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         q/var/www/ramen.bs-engineer-server.com/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    c                 ^    | 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r0   zgrid_off.pngmpl20r   c                  r    t        j                         } | j                  d      }|j                  d       y Nr2   r3   F)pltfigureadd_subplotgridfigr(   s     r.   test_grid_offrH   .   s(    
**,C	D	)BGGENr0   zinvisible_ticks_axis.pngc                  <   t        j                         } | j                  d      }|j                  g        |j	                  g        |j                  g        |j                  |j                  |j                  fD ]  }|j                  j                  d        y rA   )rB   rC   rD   
set_xticks
set_yticks
set_zticksxaxisyaxiszaxisliner9   )rG   r(   axiss      r.   test_invisible_ticks_axisrR   5   su    
**,C	D	)BMM"MM"MM"288RXX. %		e$%r0   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   r4   r2   r5   xyzxlabelylabelzlabeltitle)
rB   r7   r'   flattenrM   rN   rO   set_label_positionset_ticks_positionset)	positionsrG   axsr(   posrQ   r_   s          r.   test_axis_positionsrg   @   s    2I||AqlD-ABHCs{{}i0 @CHHbhh0 	)D##C(##C(	) %
c#c?@r0   zaxis_positions_inverted.pngc                     t        t        j                  ddgd            } t        j                  ddddd	i
      \  }}t        |j                         |       D ]  \  }\  }}}|j                  g dg dg d       |r|j                          |r|j                          |r|j                          |rdnd d|rdnd d|rdnd d}|j                  ddd|        y )NFT   )repeatr      
      r4   r2   )figsizer6   r   r   r   r   r   r   - zx, zy, rZ   rX   rY   r[   )r"   r   r#   rB   r7   r'   r`   plotinvert_xaxisinvert_yaxisinvert_zaxisrc   )r   rG   re   r(   invert_xinvert_yinvert_zr_   s           r.   test_axis_positions_invertedr{   L   s     	))5$-BCL||Aq'(4d';=HC.1#++-.N @**Xx 		9i0OOOOOO#C,C#C,C#C,A/ 	c#c?@r0   c                  *   t        j                         } | j                  d      }|j                  ddgddgddg       | j                  j                          |j                         }|j                  dd	       | j                  j                          |j                         }|j                  d
d	       | j                  j                          |j                         }t        j                  ||      rJ t        j                  ||      sJ y )Nr2   r3   r   r   r   ri   equaldatalim
adjustableauto)
rB   rC   rD   rt   canvasdraw
get_w_lims
set_aspectr    allclose)rG   r(   default_limitsequal_limitsfinal_limitss        r.   'test_set_aspect_datalim_restores_limitsr   e   s    
**,C	D	)BGGQqEAa51Q% JJOO]]_NMM'iM0JJOO==?LMM&YM/JJOO==?L {{><888 ;;~|444r0   c                     t        j                         } | j                  d      }|j                  ddgddgddg       |j	                         }|j                  d	d
       |j                  dd       |j                  dd
       |j                         |j                         |j                         }}}|dk(  sJ ||dd k(  sJ ||dd k(  sJ y )Nr2   r3   r   r   ri   rk      rn   r}   r~   r   2   r   )r   r   )
rB   rC   rD   rt   r   r   set_xlim
get_xlim3d
get_ylim3d
get_zlim3d)rG   r(   	orig_limsxlimylimzlims         r.   /test_set_aspect_datalim_restores_untouched_axesr   ~   s    
**,C	D	)BGGQFQFQF#IMM'iM0KKRMM&YM/}}$D99Qq>!!!9Qq>!!!r0   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)r   r}   equalxyequalyzequalxzr}   r   ri   r4   r2   r5   r   )r   r   r   r)   r   r   r   r   ri   rk   r   r~   r   zequal (cube))rB   r7   r`   r/   	enumerate	set_titleset_box_aspectr   )aspects_re   r(   is        r.   test_aspectsr      s    IG\\!QL$+?@FAskkmAb! )Bi() Aq	+3;;=) 82
WQZ 
)$
gajY78 F1I'r0   zaspects_adjust_box.pngc                      d} t        j                  dt        |       ddid      \  }}t        |      D ]>  \  }}t	        |g d       |j                  | |          |j                  | |   d	
       @ y )N)r   r}   r   r   r   r   r4   r2   )   ri   r6   ro   )rk   ri   r   r   boxr   )rB   r7   lenr   r/   r   r   )r   rG   re   r   r(   s        r.   test_aspects_adjust_boxr      su     AG||As7|t8L$+-HC 3 42Bi(
WQZ 
gajU34r0   c                     t        j                         } | j                  d      }|j                  d       |j	                  d       |j                  d       |j                  d       |j                  d       t        |      dk(  sJ y )	Nr2   r3   labelr_   rX   rY   rZ   zV<Axes3D: label='label', title={'center': 'title'}, xlabel='x', ylabel='y', zlabel='z'>)	rB   rC   rD   	set_labelr   
set_xlabel
set_ylabel
set_zlabelreprrF   s     r.   test_axes3d_reprr      sx    
**,C	D	)BLLLLMM#MM#MM#8	IJ J Jr0   zaxes3d_primary_views.pngdarwing
ףp=
?)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   ri   r4   r2   r5   rX   rY   rZ   orthor   r   elevazimroll)
rB   r7   r   flatr   r   r   set_proj_type	view_inittight_layout)viewsrG   re   r   r(   s        r.   test_axes3d_primary_viewsr      s    E ||AqlD-ABHC388$ K2
c
c
c
!
%(1+E!HQKeAhqkJK r0   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 )Nr2   r3   )r*   gbrY   )      rm   r   r   cr   rY   edge皙?)zszdiraligncoloralpha)rB   rC   rD   r'   r    aranger   bar)rG   r(   r   rZ   xsyscss          r.   
test_bar3dr      s    
**,C	D	)B(/: J1YYr]YYr]S3r7]1
r2!#V2SIJr0   c            
         t        j                         } | j                  d      }dD ]b  }t        j                  t        |            }t        j                  |      }t        j                  |      }|j                  |||ddd|       d y )Nr2   r3   )redgreenblueyellowr   r   )rB   rC   rD   r    r   r   
zeros_likebar3d)rG   r(   r   r   r   r   s         r.   test_bar3d_colorsr      sv    
**,C	D	)B/ /YYs1v]]2]]2 	RQ1A./r0   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 )Nrk   r   r   ))r   r   )r   r   r   )r   r   ),  r   r   ro   r2   r3   r5   r   Tshader   )r    r   meshgridravelrB   rC   	figaspectr   r7   r8   r'   r   r   r   r   )rX   rY   x2dy2drZ   r   rG   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r0   zbar3d_notshaded.pngr   {Gz?c            	         t        j                         } | j                  d      }t        j                  d      }t        j                  d      }t        j
                  ||      \  }}|j                         |j                         }}||z   }|j                  |||dz  dd|d       | j                  j                          y )	Nr2   r3   rk   r   r   r   Fr   )
rB   rC   rD   r    r   r   r   r   r   r   )rG   r(   rX   rY   r   r   rZ   s          r.   test_bar3d_notshadedr      s     **,C	D	)B
		!A
		!A{{1a HCyy{CIIKCc	AHHS#sQw1auH5JJOOr0   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   r2   r3   r   r   )azdegaltdeg)ri   rk   T)	rX   rY   rZ   dxdydzr   r   lightsourcern   rk   )rB   rC   rD   mcolorsLightSourcer    r   r   r   ranger   coolwarmr   testingassert_array_max_ulp_facecolor3d)rG   r(   lslengthwidtharearX   rY   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x86_64Mb`?c                  `   dt         j                  d<   t        j                         } | j                  d      }t	        j
                  d      \  }}}|j                  |||ddd	       |j                  |||d
dd	       |j                  |||ddd	       |j                  dddddd       y )NTaxes3d.automarginr2   r3   皙?rZ   r   r   offsetcmaprX   rY   (   d   )xminxmaxyminymaxzminzmax)rB   rcParamsrC   rD   r   get_test_datacontourrQ   rG   r(   XYZs        r.   test_contour3dr#  $  s     )-CLL$%
**,C	D	)B""4(GAq!JJq!QSJJ?JJq!QS:J>JJq!QS*J=GG2Cbt#GFr0   zcontour3d_extend3d.pngc            	      D   dt         j                  d<   t        j                         } | j                  d      }t	        j
                  d      \  }}}|j                  |||dddd	       |j                  d
d       |j                  dd       |j                  dd       y )NTr  r2   r3   r  rZ   r  r   )r   r  r  extend3dr   r   r  P   )
rB   r  rC   rD   r   r  r  r   set_ylimset_zlimr  s        r.   test_contour3d_extend3dr+  1  s    (,CLL$%
**,C	D	)B""4(GAq!JJq!QSJJNKKRKKRKKRr0   zcontourf3d.pngc                     dt         j                  d<   t        j                         } | j                  d      }t	        j
                  d      \  }}}|j                  |||ddd	       |j                  |||d
dd	       |j                  |||ddd	       |j                  dd       |j                  dd       |j                  dd       y )NTr  r2   r3   r  rZ   r  r   r  rX   r  rY   r  r  )
rB   r  rC   rD   r   r  contourfr   r)  r*  r  s        r.   test_contourf3dr.  =  s    (,CLL$%
**,C	D	)B""4(GAq!KK1ac$ZK@KK1ac#JK?KK1ac":K>KKRKKRKKcr0   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d       |j                  dd       |j                  dd       |j                  dd       y )NTr  r2   r3   r         ?r   皙?r   皙r   )r  levelsr  r   r   )rB   r  rC   rD   r    r   r   clipr-  r   r)  r*  r  s        r.   test_contourf3d_fillr6  K  s    (,CLL$%
**,C	D	)B;;ryyQ-ryyQ/EFDAq	q!A Acc3Q3hKKK1a4)*KEKKAKKAKKAr0   zextend, levelsrV   )r   rk   rn   min)r   rk   rn      max)r   r   rk   rn   c           	         t        j                  t        j                  ddd      t        j                  ddd            \  }}|dz  |dz  z   }|j                  d      }|j	                  |||g ddd	       | j                  d      }|j	                  |||||dd
       ||fD ]8  }	|	j                  dd       |	j                  dd       |	j                  dd       : y )Nr0  r   r1  r2   r3   )r   r   rk   rn   r8  r      )r4  vminvmax)extendr<  r=  rm   )r    r   r   rD   r-  r   r)  r*  )
r;   r<   r>  r4  r   r!  r"  ax_refax_testr(   s
             r.   test_contourf3d_extendrB  [  s    
 ;;ryyQ-ryyQ/EFDAq	1q!tA  D 1F
OOAq!O!!OD""d"3GQ1fV!!Dw 
B
B
Cr0   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   r2   r3   )
rB   r  rC   r    randomseedrandrD   
tricontourtricontourf)rG   rX   rY   rZ   r(   s        r.   test_tricontourrL  p  s    (,CLL$%
**,CIINN8
		ts"A
		ts"A
Q$A+A	AqT	2BMM!Q	AqT	2BNN1ar0   c                  &   t        j                         } | j                  d      }d\  }}t        j                  dd|      }t        j                  dd|      }t        j
                  j                  dd||g      }|j                  |||dg       y )	Nr2   r3   )r   r   r?  rm   r   r   rF  )rB   rC   rD   r    linspacerG  randintr  )rG   r(   nxnyrX   rY   rZ   s          r.   test_contour3d_1d_inputrR    sz    
**,C	D	)BFB
CR A
CR A
		!QR)AJJq!Qr0   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 )	Nr2   r3   rk   r  r0  r   r   )	rB   rC   rD   r    rN  pisincosrt   )rG   r(   thetarZ   r*   rX   rY   s          r.   test_lines3drY    s    
**,C	D	)BKKRUU
AIs3E
B3A	Q
A	BFF5MA	BFF5MAGGAq!r0   c                     | j                  d      }|j                  dgdgd       |j                  d      }|j                  ddd       y )Nr2   r3   r   orD   rt   r;   r<   ax1ax2s       r.   test_plot_scalarr`    sL    


$

/CHHaS1#s




.CHHQ3r0   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)rP   s    r.   test_invalid_line_datari    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    rW  rU  exp)ts    r.   fztest_mixedsubplots.<locals>.f  s,    vvagai 2661":--r0                 @r2  rC  Tr         @r   r   r   bozk--r   )markerfacecolorr2   r3   r   r1  r  r   F)rcountccount	linewidthantialiasedr   )r    r   rB   r  rC   r   rD   rt   rE   r   hypotrV  plot_surface
set_zlim3d)	ro  t1t2rG   r(   r   r!  Rr"  s	            r.   test_mixedsubplotsr    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r0   c                     | j                  d      }|j                  dddd       | j                          |j                  d      }|j                          |j                  dddd       y )Nr2   r3   rF  zsome strings)rD   textr   r]  s       r.   test_tight_layout_textr    sj     

$

/CHHRR=H)




.CHHRR=H)r0   zscatter3d.pngc                     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 )Nr2   r3   rm   r*   r[  )r   markerr   r   ^r   r   r   rB   rC   rD   scatterr    r   rG   r(   rX   rY   rZ   s        r.   test_scatter3dr    s    
**,C	D	)BJJryy}biimRYYr]S  "		"b!!A!AJJq!Q#cJ*AbEJJr2rSJ-r0   zscatter3d_color.pngc                  4   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 )Nr2   r3   rm   r*   rW   r[  )	facecolor	edgecolorr  r   r   r  )r   r  r  rF   s     r.   test_scatter3d_colorr    s    
**,C	D	)B JJryy}biimRYYr]s  <JJryy}biimRYYr]3s  < JJryyR "))B"3RYYr25F  &r0   zscatter3d_linewidth.pngc            	         t        j                         } | j                  d      }|j                  t	        j
                  d      t	        j
                  d      t	        j
                  d      dt	        j
                  d             y )Nr2   r3   rm   r[  )r  rx  r  rF   s     r.   test_scatter3d_linewidthr    s[    
**,C	D	)B JJryy}biimRYYr]RYYr]  4r0   c                 p   t        j                  d      t        j                  d      t        j                  d      }}}t        j                  ddt         j                  ddg      }|j                  d      }|j                  ||||       | j                  d      }|j                  ||||d	       y )
Nr   r   r   ri   rk   r2   r3   r   )r   r   )r    r   zerosr!   nanrD   r  )r<   r;   rX   rY   rZ   r   rA  r@  s           r.   test_scatter3d_cmap_alphar    s     iilBHHQK1!qA
!Q1%&A""d"3GOOAq!qO!  D 1F
NN1aaqN)r0   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 )Nr2   r3   rm   r[  )r  )r  
linewidths)rD   r  r    r   set_linewidthsr<   r;   rA  r   r@  s        r.   %test_scatter3d_linewidth_modificationr  
  s     ""d"3G		"ryy}biim" 	 	$ARYYr]#  D 1F
NN299R="))B-2s iim  -r0   c                    |j                  d      }|j                  t        j                  d      t        j                  d      t        j                  d      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 )Nr2   r3   rm   r[  T)r  
depthshadeC1C2333333?ffffff?r   FK   ri   )r  r  r  r   r  r  r  )rD   r  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"t 	 	5AOODOODKKc
QU!!!KKB Q  D 1F
NN299R="))B-2s!T#sa#ra  9r0   c                    t         j                  ddddf   \  }}t        j                  |j                        j	                  |j
                        }d}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.Nrm   F   r  r   r   r   C0r  r   r  rn   rk   C3C4C5C6	   C7c              3   <   K   | ]  }|j                           y wN)r`   .0as     r.   	<genexpr>z)test_scatter3d_sorting.<locals>.<genexpr>G  s      : 	
		:s   r2   r3   c              3   F   K   | ]  }t        j                  |        y wr  )r    uniquer  s     r.   r  z)test_scatter3d_sorting.<locals>.<genexpr>M  s     NQBIIaLNs   !dtype)r  fceclwr   r  )r    mgridr   sizereshapeshaper  rD   r   r#   mamasked_arrayfloatrj   r$   maskr  )r<   r;   rY   rX   rZ   r  sizes
facecolors
edgecolorsr  r@  setsr  r  r  r  subsetrA  s                     r.   test_scatter3d_sortingr  -  s    88CRC"HDAq
		!&&!!!''*AJ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r0   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.
    r   r   r   r   rY   r2   r3     r  r   r   N)rD   r  r   r;   r<   r   rX   rY   rZ   r   r(   s           r.   $test_marker_draw_order_data_reversedr  e  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+r0   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  r   r   r   r   rY   r2   r3   r  r  r   Nr   )rD   set_axis_offr  r   r  s           r.   #test_marker_draw_order_view_rotatedr  z  s     D	QA	
BA	
AA#JE					.BOOJJq!Q$%J(LLadL+					-BOOJJq!Q$%"+J.LLadSjqL1r0   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 )	Nr2   r3   r   r   rm   rX   r   r   rY   )rB   rC   rD   r    r   rt   )rG   r(   r   r   s       r.   test_plot_3d_from_2dr    sd    
**,C	D	)B	1aB	1b	BGGBqsG#GGBqsG#r0   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 )Nr2   r3   r   r   r   r2  rn   333333?ri   r   rF  k)wheremoder   r  )	rB   rC   rD   r    rN  rU  rW  rV  fill_between)
rG   r(   rX  x1y1z1x2y2z2r  s
             r.   test_fill_between_quadr    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r0   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 )Nr2   r3   r   r   r   r   ri   r   r  )r  r  r  )rB   rC   rD   r    rN  rU  rW  r  )
rG   r(   rX  r  r  r  r  r  r  r  s
             r.   test_fill_between_polygonr    s    
**,C	D	)BKK1RUU7B'EOBKB	B	aBRUU1W_255!23E OOBBBf  =r0   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d	d
d      }dt         j                  d<   |j                  dd       | j                  |dd       y )NFzpcolormesh.snapr2   r3   ru  r   r1  r  r   r   )rv  rw  r  r  ry  Tr  )\()\(?rF  )shrinkaspect)rB   r  rC   rD   r    r   r   rz  rV  r{  r*  colorbar)rG   r(   r   r!  r  r"  surfs          r.   test_surface3dr    s     ',CLL"#
**,C	D	)B
		"aA
		"aA;;q!DAq
AA
q	A??1a2bzU  4D(,CLL$%KKtLLc!L,r0   z(surface3d_label_offset_tick_position.pngc                     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 )Nr2   r3   r   rn   r1  rk   g     j@g    .Ag    חAautumnr   )r  cstriderstrideX labelY labelZ label)rB   rC   rD   r    r  rU  sqrtr%   rW  r{  r   r   r   )r(   rX   rY   rZ   s       r.   )test_surface3d_label_offset_tick_positionr    s    		!	!T	!	2B88Aa"%%i$aBEE	$&667DAq
rvvay266!9,-.AOOAGQWa#gHaQROSMM)MM)MM)r0   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 )Nr2   r3   ru  r   r1  r   )r1  r   r1  r   F)r  r  r   r  ry  Tr  r  r  )rB   rC   rD   r    r   r   r  rV  r{  r  r*  )rG   r(   r   r!  r  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r0   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 )Nr2   r3   )r   r   ri   rk   r   rn   r;  r8  r  rm   r   )r   r   ri   rk   r   rn   r;  r8  )r   r   r   r   r   r   r   r   r   r   r   )r   r   r   ri   rk   rk   rk   ri   r   r   r   )r         rk   r   rn   r8  rn   r   rk   ri   r  )r   r  r;  r8  r      r   r8  r;  r  r  )r   r  r8  r  rm      rm   r  rm   r;  r  )r   r  r  r   r  r   r  r   r   r  r  )r   r  r  r        r  r      r  r  )r   r  r  r  r        r  r  r  r  r   )r=  r<  plasmar  r   r'  )rB   rC   rD   r    r   r!   r  masked_lessr   	Normalizer9  r7  mpl	colormapsr{  r   )rG   r(   rX   rY   matrixrZ   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!r0   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   rm   r  )r  r2   r3   )
r    rN  rV  rW  r  r!   rD   r  rt   r  )	r;   r<   rX   rY   rZ   r  z_maskedrA  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r0   c                 $   t        j                  t        j                  d      t        j                  d            \  }}||z   }| j                  d      }|j	                  |||d        |j                  d      }|j	                  |||       y )Nr   r2   r3   r  )r    r   r   rD   r{  )r;   r<   rX   rY   rZ   rA  r@  s          r.   test_plot_surface_None_argr  "  s~    ;;ryy|RYYq\2DAq	AA""d"3GAqT2  D 1F
1a r0   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 )Nr2   r3   gffffff@r   r   rk   r  r  <   r   )	rB   rC   rD   r    r  r  r	  r{  r   r  s        r.   test_surface3d_masked_stridesr  ,  s    
**,C	D	)B88Bs1HbQh&'DAq
!a%#AOOAq!QO2LLS!r0   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 )Nr2   r3   NrX   rY   rZ   r   r   r   r   r   rn   rk   r  r;  r   rn   rk   r8  r;  r   r   rk   r   r   rn   r   r;  z(%d, %d, %d), dir=%sr   r   r   r  gffffff?z2D Text)	transformTr  r   rm   zX axiszY axiszZ axis)rB   rC   rD   r'   r  text2D	transAxesr  
set_xlim3d
set_ylim3dr|  r   r   r   )rG   r(   zdirsr   r   r   r   rX   rY   rZ   r   s              r.   test_text3dr'  8  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(r0   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   r2   r3   r   rm   (z, z), dir=)r   )rD   r$  r%  r|  r'   r  set_position_3d)r<   r;   r&  r   r   r   rA  r   rX   rY   rZ   rn  r@  s                r.   test_text3d_modificationr+  Q  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r0   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                  |||dd       y )N$   r8        ?      ?r   r   Fendpoint.r   rQ   r2   r3   jet皙?)r  rx  r    rN  rU  rj   newaxisappendrW  r`   rV  rB   rC   rD   plot_trisurf	n_anglesn_radiiradiianglesrX   rY   rZ   rG   r(   s	            r.   test_trisurf3dr>  j  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!%3O7r0   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-  r8  r.  r/  r   r   Fr0  .r   r2  r2   r3   )r   rF  r   r4  )r   rx  r5  r9  s	            r.   test_trisurf3d_shadedrA  |  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>r0   zwireframe3d.pngc                      t        j                         } | j                  d      }t        j                  d      \  }}}|j                  |||dd       y )Nr2   r3   r     rv  rw  rB   rC   rD   r   r  plot_wireframer  s        r.   test_wireframe3drG    sL    
**,C	D	)B""4(GAq!aAb4r0   zwireframe3dasymmetric.pngc                      t        j                         } | j                  d      }t        j                  d      \  }}}|d d |d d |d d }}}|j                  |||dd       y )Nr2   r3   r  r   ri   rC  rD  rE  r  s        r.   test_wireframe3dasymmetricrI    sk    
**,C	D	)B""4(GAq!fafaf!qAaAa3r0   zwireframe3dzerocstride.pngc                      t        j                         } | j                  d      }t        j                  d      \  }}}|j                  |||dd       y )Nr2   r3   r  rC  r   rD  rE  r  s        r.   test_wireframe3dzerocstriderK    sL    
**,C	D	)B""4(GAq!aAb3r0   zwireframe3dzerorstride.pngc                      t        j                         } | j                  d      }t        j                  d      \  }}}|j                  |||dd       y )Nr2   r3   r  r   rm   r  rE  r  s        r.   test_wireframe3dzerorstriderM    sL    
**,C	D	)B""4(GAq!aAq"5r0   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)Nr2   r3   r  r   r  )	rB   rC   rD   r   r  rd  re  
ValueErrorrF  r  s        r.    test_wireframe3dzerostrideraisesrP    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)Nr2   r3   r  rm   r   )r  rw  )r  rv  )
rB   rC   rD   r   r  rd  re  rO  rF  r{  r  s        r.   test_mixedsamplesraisesrR    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                     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 )Nr2   r3   )tipmiddletail)ztab:bluez
tab:orangez	tab:green      rF  r   r   )r  pivotr   r   ri   r   r   )rB   rC   rD   r   r'   r    r   quiverr  r   r)  r*  )rG   r(   pivotsr   r   rX  r   rX   rY   rZ   uvws                r.   test_quiver3dr_    s    
**,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r0   c                     |j                  d       g x}x}x}x}x}}| j                  d      }|j                  ||||||ddd	       y )Nr2   r3   r2  rT  Tr  rX  	normalize)rD   rZ  )	r;   r<   rX   rY   rZ   r\  r]  r^  r(   s	            r.   test_quiver3d_emptyrc    sb    4(AAA					.BIIaAq!Qs%4IHr0   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 )Nr2   r3   r   r   y              $@r  y              @g>,p ?皙ٿr2  F)copyr  rT  Tra  )rB   rC   rD   r    r  rV  rU  rW  r  masked_whererZ  )rG   r(   rX   rY   rZ   r\  r]  r^  s           r.   test_quiver3d_maskedrh    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Hr0   zquiver3d_colorcoded.pngc            	      Z   t        j                         } | j                  d      }t        j                  d      x}x}x}}t        j
                  d      x}}t        j                  d   ||j                         z        }|j                  |||||||       |j                  dd       y )Nr2   r3   rm         $@Reds)r   r   )
rB   rC   rD   r    r  r   r  r9  rZ  r)  )	rG   r(   rX   rY   r   r   rZ   r   r   s	            r.   test_quiver3d_colorcodedrl    s    
**,C	D	)Bhhrl"A""BYYs^AMM&!"RVVX+.EIIaAr2r%I0KK2r0   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 )Nr2   r3   r   r   )r/  rp  rp  r   )r   r   r   r   )rB   rC   rD   r   	add_patchr   patch_2d_to_3dr  r   
same_colorget_facecolorr   r   )rG   r(   circles      r.   test_patch_modificationrt    s    
**,C	D	)BF^FLL	 
+,f224lCCCJJOOf224lCCCr0   c                    t        dd      }t        dd      }t        j                  g dg dg      }t        j                  ||gd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 )Nrn  r  )r2  r2  r?  )rp  rF  rp  r/  )rF  rp  rp  rF  ri   T)r  r  r2   r3   r  r  F)r  r  r  r   r  )r   r    r!   r   Patch3DCollectionrD   add_collection3dr  r  r  r  r  )r;   r<   patch1patch2r  r   rA  r@  s           r.   "test_patch_collection_modificationrz    s4    FD!FJ%F,.@ABJ 0Q4PA""d"3GQOODOOJKKU!!!FD!FJ%F,.@ABJ 0Q*.*&)e	=A   D 1F
Ar0   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)	Nrq   rp   r   r   r   r   zlist of \(N, 3\) array-likerb  r  zshape \(M, N, 3\))rd  re  rO  r   Poly3DCollectionr    r!   r  )polys    r.   &test_poly3dcollection_verts_validationr  '  s    y)Y7D	z)G	H %t$% 88D&D	z)=	> %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 )Nr2   r3   rq   rp   r   r   r  ri   r  )rF  rF  r   rF  Tr  r  r  closed)r   rF  rF  rF  Fautolim)	rB   rC   rD   r    r!   r  r   r}  rw  rG   r(   poly1poly2c1c2s         r.   test_poly3dcollection_closedr  1  s    
**,C	D	)BHHiI6>EHHiI6>E			A*<T
KB			A*<U
LBE*E*r0   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 )Nr2   r3   r5   )r   r   poly_collection_2d_to_3d
isinstancer}  	get_pathsrB   r7   r8   
add_artistdo_3d_projectionr    isnanr   r   )r~  rG   r(   minzs       r.   #test_poly_collection_2d_to_3d_emptyr  @  s    "D	""4(dE22333>>r!!!lldd&;<GCMM$  "D88D>> JJOOr0   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 )Nr2   r3   rq   rp   r   r   r  ri   r  rF  rF  r   Tr  rF  F)r  r  )r   rF  rF  r  )rB   rC   rD   r    r!   r  r   r}  r  r  r  rw  r  s         r.   test_poly3dcollection_alphar  O  s    
**,C	D	)BHHiI6>EHHiI6>E			A*7
FBLL			Ae	DB]#SLLE*E*r0   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 )NrT  rk   r  r0  r   r   r   ri   r2  r2   r3   r   twilightr  r  r   Tr  ru  r   rn   )r    rN  rU  rV  rW  column_stackr  concatenaterB   rC   rD   r
  r   	set_arraymodrw  r  r   r)  r*  rX  rZ   r*   rX   rY   pointssegmentsrG   r(   r  lcrP   s               r.   test_add_collection3d_zs_arrayr  b  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r0   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   r   r2  r2   r3   r  r  r  Tr  ru  r   rT  rn   )r    rN  rU  rV  rW  r  r  r  rB   rC   rD   r
  r   r  rw  r  r   r)  r*  r  s               r.   test_add_collection3d_zs_scalarr    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r0   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 )Nr2   r3   r   )r   rk   r   r   r   ri   )r   r   r   r   r   rk   )r   rk   r   )gUUUUUUgUUUUUU @gUUUUUUUUUUUU@)ggj@)rB   rC   rD   r   Line3DCollectionrw  r    r   r   r   r   )rG   r(   linesr  s       r.   !test_line3dCollection_autoscalingr    s    
**,C	D	)B###%E 
			&B;;r}}(STTT;;r}}(QRRR;;r}}(QRRRr0   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 )Nr2   r3   r   r  r  UUUUUUgUUUUUU?)gSUUUUUr  )rB   rC   rD   r    r!   r   r}  rw  r   r   r   r   )rG   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Qr0   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 LABELrm   )labelpadzY LABELzZ LABELr   r  r   )rB   rC   add_axesr   rM   r  r  r  r   r   r   rO   
get_zlabelrN   r   get_major_ticksset_padget_pad)rG   r(   r   ticks       r.   test_axes3d_labelpadr    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1r0   zaxes3d_cla.pngc                      t        j                         } | j                  dddd      }|j                          |j	                          y )Nr   r2   r3   )rB   rC   rD   r  clarF   s     r.   test_axes3d_clar    s8     **,C	AqT	2BOOFFHr0   zaxes3d_rotated.pngc                  |    t        j                         } | j                  dddd      }|j                  ddd       y )Nr   r2   r3   r   -   r   )rB   rC   rD   r   rF   s     r.   test_axes3d_rotatedr    s5     **,C	AqT	2BLLRr0   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)NrF  rm   r  )num)   rn   r   r   r   r2   r3   )r    rN  r   rG  randnrB   rC   rD   rd  re  rO  r{  )rX   rY   r   r!  rZ   rG   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)rE  ii  )r  r  r  rq   r   r  r  r   )r    r!   r   
_view_axes_view_transformation_uvw_persp_transformationdot)
Er  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Hr0   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+r0   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                  |d       t        ||g d      D ]  \  }}}|j                  |||        ||fS )Nr   _datalim_onlyr  )r[  rX   rY   rZ   )r   r  r'   rB   r7   r   add_collectionr  )r  r  argskwargsr   r   r   r  r  r  r[  r(   ayazr  rG   linecrX   rY   rn  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_5sC!56 1a
1a 7Nr0   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  r  r  r*   Tr  皙ɿr4  )r  splitr    r!   r   r  r  r  rt   r'   r  rB   r  r   r)  )r  tsr   r   r   r  r  r  rG   r(   rX   rY   rn  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r0   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   rq   r   r   r   r  r  r  r  r     r  r   r*   r  Tr  i8r  )r    r!   r   r  r  _ortho_transformationr  r  r  r  r  rt   r'   r  rB   r  r   r)  )r  r  r  r   r\  r]  r^  r  orthoMr  r  r   r   r   r  r  r  rG   r(   rX   rY   rn  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r0   c                      d\  } }d\  }}d\  }}t        j                  | |||||      }t        j                  j	                  |g dg dg dg dg       y )N)r  x   )r  r  )r2  r4  )r  r   r   ru  )r   g{Gzt?r   rF  )r   r   rj  r   r   r   r   r   )r   world_transformationr    r  assert_allclose)r  r  r  r  r  r  r  s          r.   
test_worldr  J  s\    JD$JD$JD$##D$dD$GAJJq 0 2 / , ./r0   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 )Nr4   r2   r5   linearr   r2  r4  rX   rY   rZ   r   )r   r   r3  皙?r  g333333?FTr   )r   r   r3  r  re  333333@rX   r2  )r   r   r3  r  re  r  )	rB   r7   
get_zscale_view_marginmarginsrt   r   	autoscaleset_autoscalez_onrF   s     r.   test_autoscaler	  V  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8r0   rQ   r  r   )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 )Nr2   r3   r  r3  r2  get_autoscale_onset_limget_)rW  rF  )r   )rB   rC   rD   r    r   rN  r  getattrr   r   r  assert_array_equal)
rQ   r   rG   r(   rX   rY   get_autoscale_onset_limget_lim	post_autos
             r.   test_unautoscaler  f  s     **,C	D	)B
		#A
D#s#AJJq!r]4&#<=bDc*+GbDc*+G&*l "IKd#(****JJOOJJ!!')[9r0   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   r2   r3   r   r   r  )ru  r   r   r   r   r   r   )
r'   rD   r%   r    rN  onesr  rt   rc   r   )
r;   r<   xminsrG   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	 r0   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)Nr2   r3   perspr   focal_lengthr   r   )rB   rC   rD   rd  re  rO  r   rF   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   r4   r2   r5   r   r  r  333333?)rB   r7   r   r    inf)rG   re   s     r.   test_axes3d_focal_lengthr%    sQ     ||AqlD-ABHCFrvv6Ft4r0   zaxes3d_ortho.pngc                  r    t        j                         } | j                  d      }|j                  d       y )Nr2   r3   r   )rB   rC   rD   r   rF   s     r.   test_axes3d_orthor'    s+    
**,C	D	)BWr0   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#   r2   r   )rk   rk   rk   )r4   	proj_type
box_aspectr5   )r   r   r   r   r   r  r/  r  r   T)r   r   r#   rB   r7   r8   r    r!   r"   r%   r$   r&   r'   r   degreesarctanr  rE   )r   r#   rG   r(   r*   r  es          r.   test_axes3d_isometricr.    s    /lld' GC
 	ARXXd71a+;&<=qA )1q1u:>>qtad{*BIIs1ay(C() LLbjj2
?!;<3QLOGGDMr0   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 )Nr2   r3   r   r   r   r  r   T)r  r  rv  rw  
axlim_cliprF        ?r  ri   r   )r   rx  zorderr0  )r0  r   )arrow_length_ratior0  r  )r   r0  r  rk   test)r   rF  r   r   )r   r   r  rn   F)rD   r    rN  r   r{  rt   r  r   rZ  r  rc   r  )	r;   r<   r(   rX   rY   r   r!  r"  idxs	            r.   test_axlim_clipr7    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3r0   value)setterside))r$  left)r$  right)r%  bottom)r%  top)r|  r=  )r|  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)Nr2   r3    )rB   rC   rD   rd  re  rO  r  )r9  r:  r8  limitrG   objs         r.   test_invalid_axes_limitsrC    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e	j                  dk(  rdn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 )Nr4   r2   r5   )r   rk   ri   )rB   r7   r    indicesvoxels)selfrG   r(   rX   rY   rZ   rH  s          r.   test_simplezTestVoxels.test_simple  sK    ,,<*>?R**Y'1aq&Q!V$
		&r0   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 )Nr4   r2   r5   )r   r   rk   r   r1  g](\@ri   r  )r  r  r  )rB   r7   r    rG  rH  r9  keysr  )rI  rG   r(   rX   rY   rZ   rH  r]  s           r.   test_edge_stylezTestVoxels.test_edge_style  s    ,,<*>?R**Y'1aq51*Az)QsUQJ6&@IIfdI; 	
#affh-&&t,r0   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.r4   r2   r5   rm   rm   rm   r   r  r  z0.25r   cyanrm   r  N)rB   r7   r    rG  r  object_rH  rI  rG   r(   rX   rY   rZ   rH  r   s           r.   test_named_colorszTestVoxels.test_named_colors  s     ,,<*>?R**\*1aq&Q!V$AEAIM**t2::>$*A!a% !%A|
		&V	,r0   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.r4   r2   r5   rO  )rm   rm   rm   ri   r  .r   .r   .r   r  N)rB   r7   r    rG  r  rH  rR  s           r.   test_rgb_datazTestVoxels.test_rgb_data  s     ,,<*>?R**\*1aq&Q!V$/*QvQvQv
		&V	,r0   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 )Nr4   r2   r5   rO  r   )rm   rm   rm   rk   )r   r   r   rF  )r   r   r   rF  r  zfaces returned for absent voxel)rB   r7   r    rG  r%   r  rH  typer8   itemsr  r   r}  )rI  rG   r(   rX   rY   rZ   v1v2rH  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$:$:;;;	<r0   zvoxels-xyz.pngFwin32r  r   )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 )Nr4   r2   r5   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@  r   r   rr  )r   ndimr    	index_exp)rX   slr   s      r.   	midpointsz&TestVoxels.test_xyz.<locals>.midpoints0  sv    B166] &rBLL"--.rBLL,,-.145bll1o%& Hr0   )   rg  rg  g      0@rF  r   r1  )ri   rU  rV  rW  r   r   )r  r  rx  )rB   r7   r    rG  r  r  rH  r5  )rI  rG   r(   rf  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: 	 	!r0   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)Nr   )r   ri   rk   r4   r2   r5   r  )r  filledrH  rb  )rn  zkeyword argument 'x')rn  rX   rY   rZ   rX   r@  )r    rG  r  rB   r7   r8   rH  rd  re  	TypeErrorAttributeErrorr8  name)	rI  rX   rY   rZ   rn  rG   r(   kw	exec_infos	            r.   test_calling_conventionsz#TestVoxels.test_calling_conventionsM  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_comparisonrJ  rM  rS  rX  r_  sysplatformrl  rt  r@  r0   r.   rE  rE    s    01A B 45WE- F- 67wG
- H
- 237C
- D
- /0@< A<" -.E),)@aI!I!@+r0   rE  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   ri   rk   r   rn   r;  r8  r  rm   r   r2   r3   rZ   r  )rB   rC   rD   rt   r    r  r  get_data_3drh  	set_xdata	set_ydataset_3d_propertiesr   )
rX   rY   rZ   r  r  r  rG   r(   r  rP   s
             r.   test_line3d_set_get_data_3dr  g  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Or0   c                     | j                  d      }|j                  g dg dg d       |j                          |j                  d      }|j                          |j                  g dg dg d       y )Nr2   r3   )r   r   rm   rm   )r   rm   rm   rm   )r   r   r   rm   )rD   rt   rv   r:   s      r.   test_invertedr  y  s^     
				.BGGNO];OO					-BOOGGNO];r0   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 )Nr4   r2   r5   r   r   )	rB   r7   xaxis_invertedyaxis_invertedzaxis_invertedr   r)  r*  r  rF   s     r.   test_inverted_clar    s     ll|T&:;GC  """  """  """KK1KK1KK1FFH  """  """  """"r0   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 )NrX   r   )rQ   r   rY   rZ   )rB   rC   r   tick_paramsr   r   rM   r  	tick1line_colorrN   rO   )rG   r(   r  s      r.   test_ax3d_tickcolourr    s    
**,C	BNNEN*NNEN*NNEN*JJOO((* .~~$$---.((* .~~$$---.((* .~~$$---.r0   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 )Nrk   r   r4   r2   r5   g    cAg   @cA)rX   rY   rZ   rV   r   plain)rQ   r   r   )r0  r   )rQ   	scilimitsr   zaxes.formatter.useoffset)rQ   	useOffsetri   zaxes.formatter.use_locale)rQ   	useLocalezaxes.formatter.use_mathtext)rQ   useMathTextc                 \    |D cg c]  }t        | |      j                          c}S c c}w r  )r  get_major_formatter)r(   namesrq  s      r.   get_formattersz-test_ticklabel_format.<locals>.get_formatters  s&    DIJDD!557JJJs   !)rM   rN   rO   )rM   rN   rO   F)r7   r   r   r'   ticklabel_formatr  r  set_scientificset_powerlimitsset_useOffsetset_useLocaleset_useMathText)	r;   r<   re   r(   rowrq  r  r  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r0   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 )
NrU  gr   r4  r   )r   r/  r2   r3   )r  rX  )r    r   r   	ones_liker'   rD   rZ  )r;   r<   rX  rX   rY   rZ   r\  r]  r^  rG   r  r(   s               r.   test_quiver3D_smoker    s    Ekk
		$3
		$3
		$3GAq!
 QAAGX.9 @V___-
		!Q1a6	?@r0   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 )Nr2   r3   r1  T)minorquartergQ?thirdrF  half)	rB   rC   rD   rJ   set_xticklabelsrK   set_yticklabelsrL   set_zticklabels)r(   s    r.   test_minor_ticksr    s    		!	!T	!	2BMM4&M%	{$/MM4&M%y-MM4&M%xt,r0   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   r2  r   ri   r   r2   r3      r4  )zuplimszlolims
erroreveryN)
r    r   rU  rV  rW  rB   rC   rD   r  errorbar)
rn  rX   rY   rZ   rG   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   "r0   zerrorbar3d.pnggQ?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.r2   r3   )r   r   ri   rk   r   )rF  rF  rF  rF  rF  ri   )FTFTT)TFFTFTpurplezError lines)rX   rY   rZ   xerryerrzerrcapsizer  r  yuplimsecolorr   N)rB   rC   rD   r  legend)rG   r(   dr-  s       r.   test_errorbar3dr     sa     **,C	D	)BAAKK!qAAAAq89}	  6
 IIKr0   z
stem3d.pnggMb?c            
      ^   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 )Nr   ri   )r8  rn   Tr4   r2   ro   constrained_layoutr6   r   r  )orientationzorientation=r   r   zC4-.C1Dr  )linefmt	markerfmtbasefmtr  rW   )rt  markeredgewidth)rB   r7   r    rN  rU  rW  rV  r'   stemr   r  rc   set_linewidth)rG   re   rX  rX   rY   rZ   r(   r   
markerline	stemlinesbaselines              r.   test_stem3dr    s{    ||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!"r0   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   r2   r3   r   r  r   r   r   r   offr   zArgument zoom =rb  )zoom)"r   r#   r   rB   rC   rD   r    rN  rU  outerrW  rV  r  r{  r!   r"   r$   r%   r&   r'   r  r   r   r   r7  r9  r$  r%  r|  rQ   r   rd  re  rO  )r#   r   rG   r(   r\  r]  rX   rY   rZ   r*   r  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   )rk   r   Tr4   r2   r  r   
horizontal)r(   r  r4  )rB   r7   r8  r    rG  r  r  r   r   r(   get_positionextents)	num_plotsrG   re   r(   p_tricbars         r.   test_colorbar_posr  U  s    I||Ay&/3(4d';=HC  4		 2BIIOOA4F "		 244 <<#<@DJJOO77!))!,s222r0   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 )Nr2   r3   r   r   r5  )r   r   )r   r   )rT   r   r   r   )rU   )r   r   r   r   )	rB   rC   rD   r*  r  get_zlim
get_zbound
set_zboundrw   rF   s     r.   test_inverted_zaxisr  e  s   
**,C	D	)BKK1  """;;=F"""==?f$$$ MM&  """;;=F"""==?f$$$ OO;;=F"""==?f$$$ MMM;;=F"""==?f$$$ MMM;;=F"""==?f$$$r0   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)Nr2   r3   r  r   )r  )r  r   r   )r  r  z"Cannot pass both 'lower' and 'min'rb  r   )r=  r  z"Cannot pass both 'upper' and 'max')r>  r  )
rB   rC   rD   r    r   r  r*  rd  re  ro  rF   s     r.   test_set_zlimr    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)r   r   r      r2   r3      )r4   	shareview   T)r   r   r   share)r  r  r  r   )rD   r  r   )
r;   r<   r   r   r   r^  r_  ax3subplot_numr(   s
             r.   test_shared_viewr    s     D$


st

4C


sts

CC


st

4CMM#MMt$TM>& 6   >
$T56r0   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   r2   r3      )r4   sharezr   r   r   )rW  r   r         @)rW  r  )rB   rC   rD   rt   rL   r  )rG   r^  r_  s      r.   test_shared_axes_retickr    s    
**,C
//#$/
/C
//#$s/
;CHHaVaVaV$HHaVaVaV$NN$%<<>[(((<<>[(((r0   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   r   r   r   r   r   r|  rq   r   r   rn   )r;  r8  r  i)r  0   ,   )ri   r   r   )r   rk   r   )r   r   r   r   r   ri   )r   r0  rY  rF  r   )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  rb  
reciprocalrotater    r!   r  rotate_from_tord  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    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	trackballrk  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                          t        j                  d|dt        j                        j                          t        j                  d|||z  |j                   z  ||z  |j"                  z  ft        j                        j                          |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/d0d1d2dd|fd3d4dd5d6d7d8d2dd|fd9d:d;d<d=d>dd|fd?d@dAdBdCdDdEd>dd|fdFi}|| |||f   \  }	}
}t        j&                  j)                  |j*                  |j,                  |j.                  f|	|
|fdGH        	 dIdIdI       yI# 1 sw Y   yIxY w)Jz*Test rotating using the left mouse button.r  rF  zaxes3d.trackballsizer   r   zaxes3d.trackballborderaxes3d.mouserotationstyler|  )r   r   r   rq   )r   r   r   ri   r   )r   r   r   r   r2   r3   button_press_eventrn  motion_notify_event)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@@)rk  r   r   r   )r   r   r   )rk  r   r   r   )r   r   r   rk  )`#I9v$$0g! _B@)rk  r   r   r   )rk  r   r   r   )g&s|,@u.:gu.:@)rk  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  rB   rC   rD   r   r   r   r
   _from_ax_coordsr	   LEFT_process	_pseudo_w	_pseudo_hrU  r  r  r   r   r   )r   r  r   r   r   rG   r(   r   expectationsnew_elevnew_azimnew_rolls               r.   test_rotater4    sv    LL/014HA-.CLL)*	4e<	= 9RCA&S"''!*Q,' 8	RLD"b **,CAqT:BLLAt$II!!# &&$b&+2B2BDDLHJ&&%rAbD,=qtBLL?P+Q  ""*(*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   IJ##J,c                     d } t        j                         }|j                  d      }|j                  ddd       |j                  j                           | |j                          \  }} | |j                          \  }} | |j                          \  }}t        j                  d|dt        j                        j                          t        j                  d|dt        j                        j                           | |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_limX  s#    +"v~r0   r2   r3   r   r  rn  r  r   r   N)rB   rC   rD   r  r   r   r   r   r   r
   r+  r	   MIDDLEr-  rd  approx)r;  rG   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_panrK  U  s    **,C	D	)BJJq!QJJOO%r}}7Ix%r}}7Ix%r}}7Ix b&+*<*<>>Fhjr6;+=+=??Gxz#R]]_5Hg#R]]_5Hg#R]]_5Hg fmmH----fmmH----fmmH---- v}}Y////v}}Y////v}}Y////r0   ztool,button,key,expectedr  ))rp  Q?)r   gQ?)rC  {Gz?rX   ))g{Gzr2  )gQrM  gQrL  rY   ))Q뱿r  )g{GzrM  )rp  gQ?))g
ףp=
r#  )g{Gzg(\?)rO  g
ףp=
?pan))gffffff(\)gp=
ףgQgRQgffffff))g
ףp=
gzG)rQ  gq=
ףpݿrN  ))r4  g{Gz?)gRQg(\ؿrR  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||||hd	}t        d
|j                  g||d|i}t        |j                        }| dk(  r|j                          n|j!                          |j#                          |j#                          |j#                          |\  }}}|j                         t%        j&                  |d      k(  sJ |j                         t%        j&                  |d      k(  sJ |j                         t%        j&                  |d      k(  sJ |j)                          |j                         t%        j&                  |      k(  sJ |j                         t%        j&                  |      k(  sJ |j                         t%        j&                  |      k(  sJ |j+                          |j                         t%        j&                  |d      k(  sJ |j                         t%        j&                  |d      k(  sJ |j                         t%        j&                  |d      k(  sJ |j-                          |j                         t%        j&                  |      k(  sJ |j                         t%        j&                  |      k(  sJ |j                         t%        j&                  |      k(  sJ y )Nr2   r3   r   rn  r<  r  keyr  )rT  buttonsbutton_release_eventr  r   )r%   )rB   rC   rD   r  r   r   r   r   r   	transDatar!  astypeintr
   r   r  rP  r-  rd  r>  backforwardhome)toolbuttonrT  expectedrG   r(   xlim0ylim0zlim0d0d1s0s1start_event
drag_event
stop_eventtbr   r   r   s                       r.   test_toolbar_zoom_panrk  |  s   ( **,C	D	)BJJq!QJJOO--/2==?BMMO%5E 
B	B 
			#	*	*3	/B				#	*	*3	/B cjj@+-@/5@;>@KszzS,.S06S<?&SJ

B-/B17B=@BJ 
CJJ	'Bv~
	
  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2r0   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   r   r   o   r2   r3   r  viridis)r   r  r  )r    r!   r"   r   r#   r   TrD   r  r   r   changed)
r;   r<   rX   rY   rZ   r   rA  sc_testr@  sc_refs
             r.   test_scalarmap_updaters    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^?Fr0   c                      t        j                         } | j                  dd      }|d   j                  dddd      }|d   j                  ddddd      }y )Nr   r   r   r2   r3   other)r4   r   )rB   rC   
subfiguresrD   )rG   sfr(   s      r.   test_subfigure_simplerx    sY    
**,C	1	B	A		1at		4B	A		1at7		CBr0   zcomputed_zorder.pngc            
      h   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d       |j                  dd       |j                  d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     r2   r3      F)r   )r   r   r   )r   r   r   )r   r   r   whiteblackr   )r  r  r2  )r   r   )r   rk   r   r   )r   r2  )ri   ri   )r   ri   rm   r   rq  r        rF  r;  rE  r   r   )r   r   rx  r2  r   z--r   )r  	linestyler   r2  ri   rk   r   r&  r   r  )rB   r  rC   rD   computed_zorderr   r}  rw  rt   r  r   r)  r*  r    r   r  rN  rU  rW  rV  r{  r   rQ   )rG   r^  r_  cornersr(   trir  ax4dimr   r!  r"  angleX2Y2Z2X3Y3Z3r*   r  thrX   rY   rZ   s                            r.   test_computed_zorderr    sW   (,CLL$%
**,C
//#$/
/C
//#$/
/CC ;GCj $$gY0707,-/ 	C  	%: 	

666U2
>
As
As
As" //#$/
/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#r0   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 )Nr2   r3   rm   r2  z"x=10.5227, y pane=1.0417, z=0.1444r   rY   )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)rB   rC   rD   r    r   rt   rV  r   r   format_coordr   r   )rG   r(   rX   xvyvs        r.   test_format_coordr  9	  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Ir0   c                  "   t        j                         } | j                  d      }t        j                  d      }|j                  |t        j                  |             | j                  j                          |j                         dk(  sJ y )Nr2   r3   rm   )FTF)
rB   rC   rD   r    r   rt   rV  r   r   get_axis_position)rG   r(   rX   s      r.   test_get_axis_positionr  X	  sf    
**,C	D	)B
		"AGGArvvayJJOO!%9999r0   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 )Nr2   r3   r4  )r4  r4  r4  r2  r  )r2  r4  r  r   )rX   )r   r4  r  )rY   )r   r2  r  rZ   )r   r2  r   )rB   rC   rD   r  rF   s     r.   test_marginsr  a	  s    
**,C	D	)BJJsO::<?***JJsC::<?***JJJO::<=(((JJJ::<=(((JJJO::<;&&&r0   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 )Nr2   r3   r2  r4  r  )rB   rC   rD   r  get_xmarginget_ymarginget_zmarginrF   s     r.   test_margin_gettersr  p	  sl    
**,C	D	)BJJsC>>s""">>s""">>s"""r0   zerr, args, kwargs, match)r   z!margin must be greater than -0\.5)r   r   r   )r   r   r   r   rZ   )r   z'Cannot pass both positional and keyword)rX   rY   r<  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)Nrb  r2   r3   )rd  re  rB   rC   rD   r  )errr  r  rc  rG   r(   s         r.   test_margins_errorsr  y	  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 )Nr2   r3   rF  zFoo bar $\int$r   r  r  )rD   r   r   text_2d_to_3dr  get_position_3dText3D)r;   r<   r(   txtt3ds        r.   test_text_3dr  	  s    					-B
sC*
+C	q!MM# M111					.B
,,sC$5
6CMM# M111r0   c                      t        j                         } | j                  d      }|j                  dgdggdgdggdgdgg       y )Nr2   r3   r   r   )rB   rC   rD   rt   rF   s     r.   test_draw_single_lines_from_Nx1r  	  sE    
**,C	D	)BGGaS1#J!qc
aS1#J/r0   c                 .   |j                  d      }t        j                         }t        |      }t	        j
                  |dd       |j                  |       | j                  d      }t	        j                  |dd      }|j                  |       y )Nr2   r3   )r   rF  r  r   r   rY   rZ   r   r  )rD   r   unit_rectangler   r   pathpatch_2d_to_3dr  PathPatch3D)r;   r<   r(   pathpatchpp3ds         r.   test_pathpatch_3dr  	  s    					-B DdOE	U&9DMM%					.BT&9DDMM$r0   zscatter_spiral.png)baseline_imagesr   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  r2   r3   r   r   rn      r   r   r  )rB   r  rC   rD   r    rN  rU  r  rV  rW  r   r   )rG   r(   r  scs       r.   test_scatter_spiralr  	  s     )-CLL$%
**,C	D	)B	QBEE	As	+B	BFF2Jr
B1rAv:"'	JB JJOOr0   c                      t        j                  ddi      \  } }t        dd      }|j                  |       t	        j
                  |       |j                          y )Nr4   r2   r5   rn  r/  )rB   r7   r   ro  r   r  get_path)rG   r(   ps      r.   test_Poly3DCollection_get_pathr  	  sI     ll|T&:;GCvsALLO	QJJLr0   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   rm   y              Y@ri   r   rm  r2   r3   hotr  )	r    ogridrW  rV  rB   rC   rD   r{  rr  rY   rX   r  rG   r(   r*   s         r.   #test_Poly3DCollection_get_facecolorr  	       88AbIqDy()DAq	a"&&)q.	(B
**,C		.B
1bu-AOOr0   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  rW  rV  rB   rC   rD   r{  get_edgecolorr  s         r.   #test_Poly3DCollection_get_edgecolorr  	  r  r0   zDvertical_axis, proj_expected, axis_lines_expected, tickdirs_expected)rp  #k$I?rp  ._x%I)rp  rp  (m?@mۿ)rp  rp  rp  g      $)#k$Irp  rp  W$%@g˗ì?g2m 3?g溾IgMg2m 3gM?r  )r  rp  rp  r  )rp  r  rp  r  )rp  rp  r  r  g˗ìg溾I?)r   r   r   )rp  rp  r  r  )r  rp  rp  r  )rp  r  rp  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   r2   r3   r   r   r   r   r  rtolr   N)rB   subplotr   
get_figurer   r   get_projr    r  r  r   	get_xaxis	get_yaxis	get_zaxisrP   get_data_get_tickdirr  )r  proj_expectedaxis_lines_expectedtickdirs_expectedr  r(   proj_actualr   rQ   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r0   r  returnc                    t        j                  dddd      }|j                  ddd|        |j                         j                  j                          |j                         }t        j                  d|dt        j                        j                          t        j                  d|d	t        j                        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   r2   r3   r   r  r  r5  r  )rF  r   N)rB   r  r   r  r   r   r  r
   r+  r	   r,  r-  _axis_namesindex_vertical_axisr    r  assert_raisesAssertionErrorr  )r  r(   proj_before
proj_afters       r.   test_on_move_vertical_axisr  9
  s    
 
Q1	.BLLaaa}LEMMO!++-Kb&+*:*:<<DHJr8[-=-=??Gxz>>."2C2CCCC JJJ

22Kr0   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   r2   r3   r   r  r  r  )rB   r  r   r  r   r   r   r    r  r  _box_aspect)r  aspect_expectedr(   s      r.   !test_set_box_aspect_vertical_axisr  Q
  so     
Q1	.BLLaaa}LEMMO!dJJTJr0   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   r2   r3   )rF  rF  rF  ?r   rm   r  )r  heightr  theta1theta2r   rZ   r  )rB   r  mpatchArcro  r   r  )r(   r  s     r.   test_arc_pathpatchr  c
  sP     
Q1	.B

:SBs	4ALLO	Q!#.r0   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.panecolorr<  r   r2   r3   )rB   r*  rC   rD   )rG   s    r.   test_panecolor_rcparamsr  n
  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
    rm  r2   r3   r  )rp  rp  rp  zo-Nr\  )r;   r<   r^  rX   rY   rZ   r_  s          r.   "test_mutating_input_arrays_y_and_zr   y
  s     

st

4CAAAHHQ1d AaDAaD 

cd

3CAAAHHQ1dr0   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   )rp  rp  rp  r   r2   r3   r   N)r    r  r$  rB   rC   rD   r  r   get_offsetssuperrZ  get_facecolors)rX   rY   rZ   r   rG   r(   path3ds          r.   test_scatter_masked_colorr  
  s     
AA	
BFFAA	
AwA	F **,C	D	)BZZ1avZ.F v!!#$uT&\69;<= = =r0   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  r2   r3   r0  r   r2  r   r   r3  r  r     )r   r   )rB   r  rC   rD   r    r  rV  rW  r$  r  r{  r   r  s        r.   test_surface3d_zsort_infr	  
  s    (,CLL$%
**,C	D	)B88BqHb3h&'DAq
q	1rvvay!|#A,.FFAaggajAo
a(()OOAq!%O(LLbsL#r0   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.rb  rq   rp   r   Tr   )rd  re  rO  r    r!   r  r   r}  )r~  r   s     r.   &test_Poly3DCollection_init_value_errorr  
  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 )Nrm  r2   r3   r   r   r  r   )rB   rC   rD   r  r    r!   r   r   rF   s     r.   %test_ndarray_color_kwargs_value_errorr  
  sL     **,C		.BJJq!Qbhh|4J5JJOOr0   c                     t        j                         } | j                  d      }g dddgg dg}|j                  t	        j
                  |      d      }t        j                  |j                         d	      sJ t        j                  |j                         d
      sJ t        j                  |j                         d	      sJ y)zGTest Line3DCollection with autolim=True and lines of different lengths.r2   r3   )r   r   )r   r   r   r|  r  ))r   r   r   )r   r   r   )ri   r   ri   )rk   ri   rk   Tr  r  )g      g     @N)rB   rC   rD   rw  r   r  r    r   r   r   r   )rG   r(   edgescollectionss       r.   $test_line3dcollection_autolim_raggedr  
  s    
**,C	D	)B 	*	I4E %%e&<&<U&CT%RK ;;r}}(QRRR;;r}}(9:::;;r}}(QRRRr0   c                     t        j                         } | j                  d      }t        j                  t
        j                  d      5  |j                  dd       ddd       t        j                  t
        j                  d	      5  |j                  dd
       ddd       |j                  dd       |j                         dk(  sJ |j                  dd       |j                         dk(  sJ t        j                  t        d      5  |j                  dd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)zr
    Test that using the deprecated 'anchor' and 'share' kwargs in
    set_aspect raises the correct warning.
    r2   r3   z'anchor' parameterrb  r}   C)anchorNz'share' parameterT)r  r   r   r~   r   invalid_value)rB   rC   rD   rd  r  r   MatplotlibDeprecationWarningr   get_adjustablere  rO  rF   s     r.   )test_axes3d_set_aspect_deperecated_paramsr  
  s   
 **,C	D	)B 
d77?S	T +
gc*+ 
d77?R	S +
gT*+
 MM'eM,%'''MM'iM0)+++	z	6 ;
g/:; ;+ ++ +; ;s$   D1D=E	1D:=E	Ec                     t        j                         } | j                  dd      }t        j                  ddgddgg      }|j
                  \  }}t        j                  |      }t        j                  |      }t        j                  ||      \  }}|j                  |||       | j                  j                          | j                  j                         }	|j                  }
|
j                  j                         rI|
j                  j                         r-|
j                  j!                  |	      }|
j#                  |	      }|J |J |j$                  |j$                  dz   k  s"J d|j$                   d	|j$                   d
       |j&                  |j&                  dz   k  s"J d|j&                   d|j&                   d
       |j(                  |j(                  dz
  k\  s"J d|j(                   d|j(                   d
       |j*                  |j*                  dz
  k\  s"J d|j*                   d|j*                   d
       y y y )Nrm  r2   r3   r2  g坙?g?r  z	bbox.x0 (z) should be <= offset_bbox.x0 ()z	bbox.y0 (z) should be <= offset_bbox.y0 (z	bbox.x1 (z) should be >= offset_bbox.x1 (z	bbox.y1 (z) should be >= offset_bbox.y1 ()rB   rC   rD   r    r!   r  r   r   r{  r   r   get_rendererrO   
offsetTextget_visibleget_textget_window_extentget_tightbboxx0y0r  r  )rG   r(   r"  rQ  rP  rX   rY   r   r!  rendererrO   offset_bboxbboxs                r.   ,test_axis_get_tightbbox_includes_offset_textr&     s*    **,C		.B 	3$~{&CDEAWWFB
		"A
		"A;;q!DAqOOAq! JJOOzz&&(H HHE
 	$$&!!#&&88B ""8,&&&
 ww+..4// 	Ry ??OqQ	R/ww+..4// 	Ry ??OqQ	R/ww+..4// 	Ry ??OqQ	R/ww+..4// 	Ry ??OqQ	R/# 	$ 	'r0   c                      t        j                         } | j                  d      }d} |j                  |  | j                  j                          d}t         j                  d   }t        j                  ddi      5  t        j                  d|d	t        j                        j                          t        j                  d
|||j                  z  ||j                  z  ft        j                        j                          d d d        | j                  j                          |j                   }|j"                  }|j$                  } |j                  |  | j                  j                          t        j                  ddi      5  t        j                  d|d	t        j                        j                          t        j                  d
|||j                  z  ||j                  z  ft        j                  d      j                          d d d        | j                  j                          |t'        ||z        z  }|t'        ||z        z  }	|t'        ||z        z  }
|j                   t)        j*                  |      k(  sJ |j"                  t)        j*                  |	      k(  sJ |j$                  t)        j*                  |
      k(  sJ t        j,                  |        y # 1 sw Y   xY w# 1 sw Y   xY w)Nr2   r3   )g(@g@@g@r1  zaxes3d.snap_rotationr  r  r  rn  r  control)rT  )rB   rC   rD   r   r   r   r  r  r*  r
   r+  r	   r,  r-  r.  r/  r   r   r   roundrd  r>  close)rG   r(   initialr  steprotated_elevrotated_azimrotated_rollexpected_elevexpected_azimexpected_rolls              r.    test_ctrl_rotation_snaps_to_5degr3  /  sa   
**,C	D	)BGBLL'JJOOA<<./D 
4f=	> 
"" "fk.>.>	

(*""!q2<</0		

 (*
 JJOO77L77L77L BLL'JJOO 
4f=	> "" "fk.>.>	

(*""!q2<</0	
 (* JJOO5!455M5!455M5!455M77fmmM222277fmmM222277fmmM2222IIcN]
 
. s   >BK'	BK4'K14K=c                      t        j                  ddt         j                  z  d      } d| dz  z  }ddt        j                  |       z   z  }dddt        j                  |       dz  z   z  z  }|||fS )z'Data spanning 1 to ~1000 for log scale.r   r   r   rm   r   )r    rN  rU  rV  rW  )rn  rX   rY   rZ   s       r.   _make_log_datar5  p  sj    
Aq255y"%A
q1uA
q266!9}A
qAq	A%&'Aa7Nr0   c                      t        j                  ddd      } t        j                  ddd      }t        j                  | |      \  }}||z  }|||fS )z&Grid data for surface with positive Z.r   rm   r   )r    rN  r   )rX   rY   r   r!  r"  s        r.   _make_surface_log_datar7  y  sN    
Ar2A
Ar2A;;q!DAq	AAa7Nr0   c                      t         j                  j                  d       t         j                  j                  ddd      } t         j                  j                  ddd      }| |z  dz  }| ||fS )z&Data for trisurf with positive values.*   r   r  rm   )r    rG  rH  uniformr  s      r.   _make_triangulation_datar;    sZ    IINN2
		!S#&A
		!S#&A	A
Aa7Nr0   zscale3d_artists_log.pnggMb?)r   r   r   c            	      t   t        j                  d      } t        ddd      }t               }t	               \  }}}| j                  dddd	      } |j                  |   |j                  d3i |d
di | j                  dddd	      }|j                  |||dd        |j                  d3i |d
di | j                  dddd	      } |j                  ||d   dd  |j                  d3i |d
di | j                  dddd	      }t        j                  g dg d      \  }}|j                         |j                         }}|j                  ||t        j                  |t              |dz  |dz  ||z  dz  d        |j                  d3i |d
di | j                  dddd	      }|j!                  |||dd        |j                  d3i |d
di | j                  dddd	      }t#               }	 |j$                  |	ddd  |j                  d3i |d
di | j                  dddd	      }|j'                  |||d        |j                  d3i |d
d i | j                  ddd!d	      }|j)                  |||dd"        |j                  d3i |d
d#i | j                  ddd$d	      }|j+                  g dg dg d%d&        |j                  d3i |d
d'i | j                  dddd	      }t        j,                  g d      }
|j/                  |
|
|
|
d(z  |
d(z  |
d(z          |j                  d3i |d
d)i | j                  ddd*d	      }|j1                  dddd+       |j1                  dddd,       |j1                  d-d-d-d.        |j                  d3i |d/d0d0d0d1 y2)4z(Test all 3D artist types with log scale.)r  r   r   logxscaleyscalezscaleri   rk   r   r2   r3   r_   rt   r   r   r  	wireframern  )r   r  r  r   rm   r  r  r  rm   r   )r   r   )r  r   surfacern   trisurfr;  )r4  r  r8  )r4  r   r-  r  )rm   r  rE  )r=  r  rF  rZ  r   zPoint AzPoint Br  zPoint Cr  )rF  r  )r_   r   r   r   Nr@  )rB   rC   r8   r5  r7  rD   rt   rc   rF  r  r    r   r`   r   r  r  r{  r;  r8  r  r-  r  r!   rZ  r  )rG   log_kw	line_datasurf_Xsurf_Ysurf_Zr(   bxbytri_dataqxyzs              r.   test_scale3d_artists_logrO    s    **X
&CuU;F I35FFF 
AqT	2BBGGY
BFF"V"6"	AqT	2BfffaC
BFF'V';'	AqT	2BBJJ	Yq\	:
BFF%V%9%	AqT	2B[[|4FBZZ\2::<BHHRR\\"E2#XrCxb2S  :
BFF#V#7# 
AqT	2BOOFFF#OF
BFF%V%9%	AqT	2B')HBOOXIS9
BFF%V%9%	AqT	2BJJvvvbJ1
BFF%V%9%	AqT	2BKKrK=
BFF&V&:& 
AqT	2BGGL,GB
BFF"V"6"	Ard	3B88L!DIIdD$s
D3Js
C
BFF$V$8$	Ard	3BGGAq!YGGBB	"GGCc9%
BFF >V >6*>r0   zscale3d_all_scales.png)r   r   c                     t        j                  ddddid      \  } }t        j                  ddd	      }|d
z  }|dz
  dz  }|}|d   j	                  |||       |d   j                  dddddd       |d   j	                  |||       |d   j                  d       |d   j                  dd d f       |d   j                  ddd       y)z4Test all scale types with mixed scales on each axis.r   r   r4   r2   rl   r   r2  r  r   r  rF  r   r   r=  symloglogit)r?  r@  rA  r\   r]   r^   asinhfunctionc                     | dz  S )NrF  r@  r]  s    r.   <lambda>z)test_scale3d_all_scales.<locals>.<lambda>  s
    q#v r0   c                     | dz  S rl  r@  rV  s    r.   rW  z)test_scale3d_all_scales.<locals>.<lambda>  s
    A r0   )	functionsr   )r\   r]   r^   N)rB   r7   r    rN  r  rc   
set_xscale
set_zscale)rG   re   rn  rX   rY   rZ   s         r.   test_scale3d_all_scalesr\    s     ||AqlD-A7SHC 	Cb!A	CA	
SBA	A FNN1aFJJeHWHW  > FNN1aFgFj-=~,NOFJJghzJBr0   zscale, expected_lims))r   r  )r=  )gr?gBm?)rQ  r  )rR  )g;&Z?g'.?)rS  r  c                    t        j                         }|j                  d      }|j                  |        |j	                  |        |j                  |        |j                  j                          |j                  |j                  |j                  fD ]'  }t        j                  j                   |       |       ) y)zFDefault axis limits on an empty plot should be correct for each scale.r2   r3   N)rB   rC   rD   rZ  
set_yscaler[  r   r   get_xlimget_ylimr  r    r  r  )r)   expected_limsrG   r(   r  s        r.   test_scale3d_default_limitsrb    s     **,C	D	)BMM%MM%MM%JJOOKKbkk: =


""79m<=r0   z"ignore:Data has no positive valuesc                 4   d}| j                  d      |j                  d      fD ]I  }|j                  d       |j                  d       |j                  d       |j	                  |||       K | j
                  d   j                  g dg dg d	       y
)zUFully clipped data (e.g. negative values on log) should look like an empty plot.
    )r2  rm   r2   r3   r=  r  r   )r   r0  rY  )rT  ru  r  )iiiN)rD   rZ  r^  r[  rc   axesrt   )r;   r<   limsr(   s       r.   test_scale3d_all_clippedrf    s    
 D##t#4""d"35 0
e
e
e
Dt$/0 MM!,lCr0   zscale3d_log_bases.pngc                  0   t        j                  ddddid      \  } }t               \  }}}|d   ddf|d	   dd
f|d   t        j                  dffD ]  \  }}}|j                  |||d       |j                  d|       |j                  d|       |j                  d|       |j                  |       |t        j                  k(  szdd}|j                  j                  |       |j                  j                  |       |j                  j                  |        |d   j                  |||d       |d   j                  dddg       |d   j                  dddg       |d   j                  dddg       |d   j                  d       y)z-Test log scale with different bases and subs.r   r4   r2   )rm   r8  r   rn  rm   zbase=10r5  zbase=2r  zbase=er  r=  )baseNc                     | dk  ryt        j                  |       }t        j                  |t        |            rdt        |      z  S y)Nr   rs   z$e^{%d}$)r    r=  r  r)  )rX   rf   rm  s      r.   fmt_ez%test_scale3d_log_bases.<locals>.fmt_e  s=    6ffQi::c5:.&s33r0   r<  r   )subsz
subs=[2,5]r  )rB   r7   r5  r    r-  r  rZ  r^  r[  r   rM   set_major_formatterrN   rO   )	rG   re   rX   rY   rZ   r(   rh  r_   rj  s	            r.   test_scale3d_log_basesrm  
  s    ||AqlD-A7SHCGAq! YI6 Y84 Yh79 0D% 	

1ab
!
e$'
e$'
e$'
U244< HH((/HH((/HH((/'0, IaA$IaV,IaV,IaV,I%r0   zscale3d_symlog_params.pngc            	         t        j                  ddddi      \  } }t        j                  ddd      }t        j                  |      d	z  }|dz  }t        j
                  |      t        j                  |      dz  z  }|d
   df|d   d	ffD ]|  \  }}|j                  |||t        j                  |      dd	       |j                  d|       |j                  d|       |j                  d|       |j                  d|        ~ y)z2Test symlog scale with different linthresh values.r   r   r4   r2   r5   rY  ri   r   rm   r   r2  rn  )r   r  r  rQ  )	linthreshz
linthresh=N)rB   r7   r    rN  sinhsignr%   r  rZ  r^  r[  r   )rG   re   rn  rX   rY   rZ   r(   ro  s           r.   test_scale3d_symlog_paramsrr  -  s     ||AqlD-ABHC 	B2A

RA	QA

RVVAY!^#Aq63-#a&"6 /I


1abffQii2
>
h)4
h)4
h)4
z)-./r0   zscale_type,kwargsr=  rh  rm   rk  r   nonpositiver  rQ  ro  linscalerF  rS  linear_widthrR  r5  c                 "   t        j                         }|j                  d      }|j                  |j                  |j
                  fD ]  } || fi |  |j                         |j                         |j                         f| fdz  k(  sJ y)z6Verify that scale keywords are accepted on all 3 axes.r2   r3   ri   N)	rB   rC   rD   rZ  r^  r[  
get_xscale
get_yscaler  )
scale_typer  rG   r(   r9  s        r.   test_scale3d_keywords_acceptedrz  A  s}     **,C	D	)B=="--? %z$V$%MMOR]]_bmmo>:-RSBSSSSr0   c                 
   t        j                         }|j                  d      } t        |d|  d      d       t	        j
                  t        d      5   t        |d|  d      d	d
       ddd       y# 1 sw Y   yxY w)z7Log scale should warn when setting non-positive limits.r2   r3   r  r)   r=  znon-positiverb  r  r?  r  N)rB   rC   rD   r  rd  r  r  )rQ   rG   r(   s      r.   test_scale3d_limit_range_logr|  W  sz     **,C	D	)B#GB$tfE"#E* 
k	8 0%d4&$%c3/0 0 0s   A99Bc                  @   t        j                         } | j                  d      }|j                  dddddd       d|j	                         fd|j                         fd|j                         ffD ])  \  }}|d	   d	kD  s
J | d
       |d   dk  r!J | d        y)z,Logit scale should constrain axis to (0, 1).r2   r3   rR  )rW  r1  )r?  r@  rA  r   r   r   rX   rY   rZ   r   z$ lower limit should be > 0 for logitr   z$ upper limit should be < 1 for logitN)rB   rC   rD   rc   r_  r`  r  rG   r(   rq  r  s       r.   test_scale3d_limit_range_logitr  c  s    
**,C	D	)BFF'''+K  A BKKM*S"++-,@BKKM*, I	c1vzHdV#GHHz1vzHdV#GHHzIr0   ry  )r=  rQ  rR  rS  c                    t        j                         }|j                  d      }|j                  | | |        g dg dg dg dd|    }t	        j
                  |      }|j                  |j                  |j                  fD ]  }|j                         }|j                  |j                  dd	            }|j                         j                  |      }t        j                  j                  |j                         |d
        y)z1Forward/inverse transform should preserve values.r2   r3   r>  )r   rm   r  rE  )r  r   r   r   r  )r   r2  rF  r  gGz?)r=  rQ  rS  rR  r   r   g|=r  N)rB   rC   rD   rc   r    r!   rM   rN   rO   get_transformr!  r  invertedr  r  r`   )ry  rG   r(   test_valuesrQ   transr[  inverses           r.    test_scale3d_transform_roundtripr  q  s     **,C	D	)BFF*Z
FC "'&,	
 K ((;'K 288RXX. O""$//+"5"5b!"<=..",,W5


""7??#4k"N	Or0   c                     t        j                         } | j                  d      }t        j                  t
              5  |j                  dd       dd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   txY w# 1 sw Y   KxY w# 1 sw Y   yxY w)	z&Invalid kwargs should raise TypeError.r2   r3   r=  T)invalid_kwargNrQ  rR  )	rB   rC   rD   rd  re  ro  rZ  r^  r[  rF   s     r.   #test_scale3d_invalid_keywords_raiser    s    
**,C	D	)B	y	! 1
e401 
y	! 4
hd34 
y	! 3
gT23 31 14 43 3s$    C5C*CCCC(c                     t        j                         } | j                  d      }|j                  ddd        |j                  t                 |j                         |j                         |j                         fdk(  sJ y)z,Scale should persist after adding plot data.r2   r3   r=  r>  )r=  r=  r=  N)	rB   rC   rD   rc   rt   r5  rw  rx  r  rF   s     r.    test_scale3d_persists_after_plotr    sg    
**,C	D	)BFF%eF4BGG^MMOR]]_bmmo>,NNNr0   c                  l   t        j                         } | j                  d      }|j                  ddd       |j	                  g dg dg d       d|j                         fd|j                         fd|j                         ffD ])  \  }}|d	   d	kD  s
J | d
       |d   d	kD  r!J | d        y)z/Autoscale should work correctly with log scale.r2   r3   r=  r>  rC  rX   rY   rZ   r   z lower limit should be positiver   z upper limit should be positiveN)rB   rC   rD   rc   r  r_  r`  r  r~  s       r.   test_scale3d_autoscale_with_logr    s    
**,C	D	)BFF%eF4JJ|\<8 BKKM*S"++-,@BKKM*, D	c1vzCdV#BCCz1vzCdV#BCCzDr0   c                  r   t        j                         } | j                  d      }|j                  g dg dg d       |j	                  ddd       | j
                  j                          |j                  dd      \  }}|dk(  sJ ||   t        j                  |j                         d         k(  sJ y)	zD_calc_coord should return data coordinates with correct pane values.r2   r3   rC  r=  r>  rF  r   N)rB   rC   rD   r  rc   r   r   _calc_coordrd  r>  r`  )rG   r(   pointpane_idxs       r.   test_scale3d_calc_coordr    s    
**,C	D	)BJJ|\<8FF%eF4JJOOnnS#.OE8q==?fmmBKKM!,<====r0   c                     t        j                         } | j                  d      }|j                  d       t	        j
                  t	        j                  ddd      t	        j                  ddd            \  }}||z  dz
  }|j                  |||       | j                  j                          |j                         \  }}d|cxk  r|cxk  rdk  sn J d	||f        y
)zCEnsure non-positive Z values on a log z-axis does not corrupt zlim.r2   r3   r=  r   ri   rk   gMbP?g     @@zzlim corrupted: N)rB   rC   rD   r[  r    r   rN  r{  r   r   r  )rG   r(   r   r!  r"  r  r  s          r.   *test_plot_surface_log_scale_invalid_valuesr    s    
**,C	D	)BMM%;;r{{1a+R[[Aq-ABDAq	A	AOOAq!JJOOJD$$###F'7t~%FF#r0   c                     t        j                         } | j                  d      }|j                  dgdgdg       | j	                          | j                         }|j                  |      }|j                  d       |j                  d       |j                  d       | j	                          |j                  |      }|j                  |j                  kD  s|j                  |j                  kD  sJ y y )Nr2   r3   r   r  r  r  )rB   rC   rD   r  draw_without_rendering_get_rendererr   r   r   r   r  r  )rG   r(   r#  bb_no_labelsbb_fulls        r.   *test_axes3d_tightbbox_includes_axis_labelsr    s    
**,C	D	)BJJsQC!   "H##H-LMM)MM)MM) x(G ==<---,BUBU1UUU1U-r0   )	functoolsr   rz  ry  packaging.versionr   parse_versionrd  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.collectionsr   r   matplotlib.patchesr   r   matplotlib.pathr   matplotlib.textr   r   matplotlib.pyplotpyplotrB   numpyr    partialrx  r/   r=   rH   rR   rg   r{   r   r   r   r   r   r   r   r   r   versionmajorr   r	  machiner#  r+  r.  r6  markparametrizerB  rL  rR  rY  r`  ri  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r+  r>  rA  rG  rI  rK  rM  rP  rR  r_  rc  rh  rl  rt  rz  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.  r7  r$  r  rC  rE  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r4  rK  r,  RIGHTrk  r   contextrs  rx  r  r  r  r  r  rO  tuplero  r  r  r  r  r  r  r  r  r  strr  r  r  r  r   r  r	  r  r  r  r  r&  r3  r5  r7  r;  rO  r\  rb  filterwarningsrf  rm  rr  rz  r|  r  r  r  r  r  r  r  r  r@  r0   r.   <module>r     s      
 4  > > A : :  ; O A 0        +**$i9 H  
 (8 9 34GD% E% -.EQ@ R@ 67U%'@'@.52"  U'J( K(  12$):4:4
J 34G%(\\X%=E1FF( W5J 6J	/ +,G< =& ./w$1"**2D2D$E$K$Ka$ODUVX	X	M6 )!1!1!1!3x!?AULGLG 12'B C )*':
 ;
 ./w? @ )VY,?-2L,A-2L,A,C D  D" )*GD E w7 8  $" +,G< =0 	* 	* )9	. :	. ./w?& @& 237C4 D4 	* 	* 
- 
- 9 9( 4C 4Cn #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8 E8" /0d'J? K?" *+7;5 <5 45WE4 F4 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 ./U'R1 S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"" )*'!1!1!1!3x!?AULL <.+8++-9auF"F"8 )*':". ;".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 ()t7KO L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  ;. $	,-	,-	,-KK #6"7"!/!/ #;"<"!)!)  2=4 237C
$ D
$7S,;8,R^:B 237$)u6<>6<>~ 12'uUC VC. / 2  9
= 
= @AD B D 01eT& U&D 45W$)+/+/$ ,
VRL
VQK
VaV
]F#${Q 
C !A ~s#$vqk}f%&/ TT 10 20I 'JKO LO.3OD>GVr0   