
    G8c                        d dl Z d dlZd dlZd dlmZmZmZmZ d dlZ	d dl
mZ d dlmZ d dlmZmZ d dlmZmZ d dlmZ d dlmZmZ d d	lmZmZ d d
lmZ d dlmZ d dl m!Z" d dl#Z$ e jJ                  edd      Z& edg      d        Z' e&dgd      d        Z(d Z) e&dg      d        Z* e&dg      d        Z+d Z, e&dg      d        Z- e&dg      d        Z.d  Z/ e&d!g      d"        Z0 e&d#g      d$        Z1 e&d%g      d&        Z2 e&d'g      d(        Z3ejh                  jk                  d)d*g d+gd,g d-gd.g d/gg       edg      d0               Z6 e&d1gd23      d4        Z7d5 Z8 e&d6g      d7        Z9 edg      d8        Z: e&d9g      d:        Z; edg      d;        Z< e&d<g      d=        Z= e&d>g      d?        Z> e&d@g      dA        Z? edg      dB        Z@ edg      dC        ZAejh                  jk                  dDddg       edg      dE               ZBejh                  jk                  dFdGdHg       edg      dI               ZC edg      dJ        ZD e&dKgdL3      dM        ZE e&dNg      dO        ZF e&dPg      dQ        ZG e&dRg      dS        ZH e&dTg      dU        ZI e&dVgd      dW        ZJ edg      dX        ZK e&dYgdZ3      d[        ZL e&d\gd]3      d^        ZM e&d_g      d`        ZN e&dag      db        ZO e&dcg      dd        ZPde ZQdf ZR e&g dg      dh        ZS edg      di        ZT e&djg      dk        ZUdl ZV edg      dm        ZWdn ZX e&dog      dp        ZYdq ZZ e&drg      ds        Z[ e&dtg      du        Z\ e&dvg      dw        Z] e&dxgd      dy        Z^ e&dzgd      d{        Z_ e&d|gd      d}        Z`d~ Zad Zbd ZcddZd e&dg      d        Ze e&dg      d        Zfd Zgd Zh e&dg      d        Zid Zjd Zkejh                  jk                  dd      ejh                  jk                  dd      d               Zld Zm e&dgd      d        Zn e&dgd      d        Zo e&dg      d        Zpejh                  jk                  de$j                  e$j                  g      ejh                  jk                  dg d      d               Zs G d d      Ztd Zu edg      d        Zvd Zwd Zx edg      d        Zy edg      d        Zz edgd      d        Z{ e&dg      d        Z| e&dg      d        Z} edgdd      d        Z~ edgd      d        Zd Zd Zd Ze	j                  j	                  d       edg      d               Zd Z edgddg      d        Zd Zd Zd Zejh                  jk                  dedi dfedi dfedi dfe e       ddidfe e       ddidfe e       ddidfedddidfeddddddfeddddɜdfedi dff
      d̄        Z edg      d̈́        Zd΄ Z edg      dτ        Z edgddѫ      d҄        Zdӄ ZdԄ Zejh                  jk                  ddg d֢g dעg dآg d٢gddgddgfddgddgfddgddgfgg dfdg dg dg dآg dgddgddgfddgddgfddgddgfgg dfdg dg dg dآg dgddgddgfddgddgfddgddgfgg dfg      d        Z edgddѫ      d        Zy)    N)Axes3Daxes3dproj3dart3d)MouseButton)cm)colorspatches)image_comparisoncheck_figures_equal)
mock_event)LineCollectionPolyCollection)Circle	PathPatch)Path)TextTdefault)remove_textstylepng)
extensionsc                 ^    | j                  t        d            }|j                  d       y )N3d
projection
subplot_kwF)subplotsdictset_visiblefig_testfig_refaxs      A/usr/lib/python3/dist-packages/mpl_toolkits/tests/test_mplot3d.pytest_invisible_axesr'      s&    			dd&;		<BNN5    zaspects.pngF)r   c                  X   d} t        j                  dt        |       ddi      \  }}ddg}t        j                  g d      }t        j                  t        j                  t        t        j                  |||                  d      }|D ]c  \  }}t        j                  t        j                  ||z
              |d   |d   z
  k(  s>|D ]!  } |j                  t        ||z  ||z          # e t        |      D ]*  \  }	}|j                  d	       |j                  | |	          , y )
N)autoequalequalxyequalyzequalxz   r   r   r   r   )r/   r/               r0   )pltr   lennparray	itertoolscombinationslistproductsumabsplot3Dzip	enumerateset_box_aspect
set_aspect)
aspectsfigaxsrscaleptsstartendr%   is
             r&   test_aspectsrM       s   @G||As7|t8LMHC 
AAHHYE

 
 $y/@/@Aq/I*J!KQ
OC 8
s66"&&%&!A$1+5 8		3uU{CI6788 3 "2
)$
gaj!"r(   c                     t        j                         } | j                  d      }|j                  d       |j	                  d       |j                  d       |j                  d       |j                  d       t        |      dk(  sJ y )	Nr   r   labeltitlexyzz]<Axes3DSubplot: label='label', title={'center': 'title'}, xlabel='x', ylabel='y', zlabel='z'>)	r5   figureadd_subplot	set_label	set_title
set_xlabel
set_ylabel
set_zlabelreprrE   r%   s     r&   test_axes3d_reprr]   2   sx    
**,C	D	)BLLLLMM#MM#MM#8	IJ J Jr(   zaxes3d_primary_views.pngc                  |   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   r1   r3   r   r   r   rQ   rR   rS   orthor   r/   elevazimroll)
r5   r   rA   flatrX   rY   rZ   set_proj_type	view_inittight_layout)viewsrE   rF   rL   r%   s        r&   test_axes3d_primary_viewsrm   ?   s    E ||AqlD-ABHC388$ K2
c
c
c
!
%(1+E!HQKeAhqkJK r(   z	bar3d.pngc            
      ,   t        j                         } | j                  d      }t        g dg d      D ][  \  }}t	        j
                  d      }t	        j
                  d      }|gt        |      z  }d|d<   |j                  |||dd	|d
       ] y )Nr   r   )rG   gbrR   )      
   r   rr   cr   rR   edge皙?)zszdiraligncoloralpha)r5   rT   rU   r@   r7   aranger6   bar)rE   r%   rt   rS   xsyscss          r&   
test_bar3dr   T   s    
**,C	D	)B(/: J1YYr]YYr]S3r7]1
r2!#V2SIJr(   c            
         t        j                         } | j                  d      }dD ]b  }t        j                  t        |            }t        j                  |      }t        j                  |      }|j                  |||ddd|       d y )Nr   r   )redgreenblueyellowr/   rz   )r5   rT   rU   r7   r|   r6   
zeros_likebar3d)rE   r%   rt   r~   r   rw   s         r&   test_bar3d_colorsr   `   sv    
**,C	D	)B/ /YYs1v]]2]]2 	RQ1A./r(   zbar3d_shaded.pngc            
      \   t        j                  d      } t        j                  d      }t        j                  | |      \  }}|j                         |j                         }}||z   dz   }g d}t	        j
                  t	        j                  dt        |      z              }|j                  dt        |      t        d            }t        ||      D ]8  \  }\  }	}
}|j                  |||d	z  dd|d
       |j                  |	|
|       : |j                  j                          y )Nr4   r0   r/   ))rq   ir   )rq   rq   rq   )rq   r`   ),  r   r   figsizer   r   r   r   Tshaderd   )r7   r|   meshgridravelr5   rT   	figaspectr6   r   r    r@   r   rj   canvasdraw)rQ   rR   x2dy2drS   rl   rE   rF   r%   re   rf   rg   s               r&   test_bar3d_shadedr   l   s    
		!A
		!A{{1a HCyy{CIIKCc	AAGE
**S]]1s5z>:
;C
,,	3u:4(  C #&c5/ 6T4
c37Aq!48
$T56 JJOOr(   zbar3d_notshaded.pngc            	         t        j                         } | j                  d      }t        j                  d      }t        j                  d      }t        j
                  ||      \  }}|j                         |j                         }}||z   }|j                  |||dz  dd|d       | j                  j                          y )	Nr   r   r4   r0   r   r/   Fr   )
r5   rT   rU   r7   r|   r   r   r   r   r   )rE   r%   rQ   rR   r   r   rS   s          r&   test_bar3d_notshadedr      s    
**,C	D	)B
		!A
		!A{{1a HCyy{CIIKCc	AHHS#sQw1auH5JJOOr(   c                  Z   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
          y c c}	w )Nr/   r   r   r   r_   )azdegaltdeg)r3   r4   T)	rQ   rR   rS   dxdydzrz   r   lightsource   )r5   rT   rU   mcolorsLightSourcer7   r   r|   r   ranger   coolwarmr   testingassert_array_equal_facecolor3d)rE   r%   lslengthwidtharearQ   rR   r   rL   rz   
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!!%)@)@A)FG 7s   <D(zcontour3d.pngc                     t        j                         } | j                  d      }t        j                  d      \  }}}|j                  |||ddt        j                         |j                  |||ddt        j                         |j                  |||d	d
t        j                         |j                  dd
       |j                  dd
       |j                  dd       y Nr   r   皙?rS   )rx   offsetcmaprQ   rR   (   d   r5   rT   rU   r   get_test_datacontourr   r   set_xlimset_ylimset_zlimrE   r%   XYZs        r&   test_contour3dr      s    
**,C	D	)B""4(GAq!JJq!QSBKKJ@JJq!QS2;;J?JJq!QS"++J>KKRKKRKKcr(   zcontour3d_extend3d.pngc            	      :   t        j                         } | j                  d      }t        j                  d      \  }}}|j                  |||ddt        j                  d       |j                  dd	       |j                  d
d       |j                  dd       y )Nr   r   r   rS   r   T)rx   r   r   extend3dr   rq   r   P   r   r   s        r&   test_contour3d_extend3dr      s{    
**,C	D	)B""4(GAq!JJq!QSBKK$JOKKRKKRKKRr(   zcontourf3d.pngc                     t        j                         } | j                  d      }t        j                  d      \  }}}|j                  |||ddt        j                         |j                  |||ddt        j                         |j                  |||d	d
t        j                         |j                  dd
       |j                  dd
       |j                  dd       y r   )r5   rT   rU   r   r   contourfr   r   r   r   r   r   s        r&   test_contourf3dr      s    
**,C	D	)B""4(GAq!KK1ac$R[[KAKK1ac#BKKK@KK1ac"2;;K?KKRKKRKKcr(   zcontourf3d_fill.pngc                     t        j                         } | j                  d      }t        j                  t        j
                  ddd      t        j
                  ddd            \  }}|j                  dd      }d|d d dd d df<   |j                  |||dd	dgt        j                  
       |j                  dd       |j                  dd       |j                  dd       y )Nr   r   r1         ?r   皙?r0   皙)r   levelsr   r/   )r5   rT   rU   r7   r   r|   clipr   r   r   r   r   r   r   s        r&   test_contourf3d_fillr      s    
**,C	D	)B;;ryyQ-ryyQ/EFDAq	q!A Acc3Q3hKKK1a4)"++KFKKAKKAKKAr(   zextend, levelsboth)r1   r4   r   min)r1   r4   r      max)r   r1   r4   r   c                 r   t        j                  t        j                  ddd      t        j                  ddd            \  }}|dz  |dz  z   }t        j                  d   j                         }|j                   |d             |j                   |d             dd|d	}|j                  d
      }	 |	j                  |||fdg di| | j                  d
      }
 |
j                  ||||fd|i| |	|
fD ]8  }|j                  dd       |j                  dd       |j                  dd       : y )Nr   r1   r   viridisr      r/      )vminvmaxr   r   r   r   )r   r1   r4   r   r   extendrs   )r7   r   r|   mpl	colormapscopy	set_underset_overrU   r   r   r   r   )r#   r$   r   r   r   r   r   r   kwargsax_refax_testr%   s               r&   test_contourf3d_extendr      s(   
 ;;ryyQ-ryyQ/EFDAq	1q!tA ==#((*DNN47MM$s)D1F  D 1FFOOAq!>O>v>""d"3GGQ1f>V>v>w 
B
B
Cr(   ztricontour.png{Gz?)tolc                     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 )Ni!N,        ?r1   r/   r   r   )	r5   rT   r7   randomseedrandrU   
tricontourtricontourf)rE   rQ   rR   rS   r%   s        r&   test_tricontourr      s    
**,CIINN8
		ts"A
		ts"A
Q$A+A	AqT	2BMM!Q	AqT	2BNN1ar(   c                  &   t        j                         } | j                  d      }d\  }}t        j                  dd|      }t        j                  dd|      }t        j
                  j                  dd||g      }|j                  |||dg       y )	Nr   r   )rq   rr   r   rs   r   r1   r   )r5   rT   rU   r7   linspacer   randintr   )rE   r%   nxnyrQ   rR   rS   s          r&   test_contour3d_1d_inputr     sz    
**,C	D	)BFB
CR A
CR A
		!QR)AJJq!Qr(   zlines3d.pngc                     t        j                         } | j                  d      }t        j                  dt        j
                  z  dt        j
                  z  d      }t        j                  ddd      }|dz  dz   }|t        j                  |      z  }|t        j                  |      z  }|j                  |||       y )	Nr   r   r4   r   r   r1   r/   )	r5   rT   rU   r7   r   pisincosplot)rE   r%   thetarS   rG   rQ   rR   s          r&   test_lines3dr    s    
**,C	D	)BKKRUU
AIs3E
B3A	Q
A	BFF5MA	BFF5MAGGAq!r(   c                     | j                  d      }|j                  dgdgd       |j                  d      }|j                  ddd       y )Nr   r   r/   o)rU   r  r#   r$   ax1ax2s       r&   test_plot_scalarr
    sL    


$

/CHHaS1#s




.CHHQ3r(   zmixedsubplot.pngc            	         d } t        j                  ddd      }t        j                  dd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 )Nr1   )r7   r  r   exp)ts    r&   fztest_mixedsubplots.<locals>.f(  s,    vvagai 2661":--r(                 @r   r          @r   r1   r/   bozk--r   )markerfacecolorTr   r   r0   r   r   r   F)rcountccount	linewidthantialiasedr   )r7   r|   r5   rT   r   rU   r  gridr   hypotr   plot_surface
set_zlim3d)	r  t1t2rE   r%   r   r   Rr   s	            r&   test_mixedsubplotsr!  &  s   . 
3S	!B	3T	"B
**S]]2.
/C	Aq	!BGGB"tR2wGGGGDM	AqT	2B;;ryyQ-ryyQ/EFDAq
AA
q	AOOAq!BrU  4 MM"ar(   c                     | j                  d      }|j                  dddd       | j                          |j                  d      }|j                          |j                  dddd       y )Nr   r   r   zsome strings)rU   textrk   r  s       r&   test_tight_layout_textr&  >  sj     

$

/CHHRR=H)




.CHHRR=H)r(   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 )Nr   r   rs   rG   r  )rt   markerrr   rp   ^r   r   r   r5   rT   rU   scatterr7   r|   rE   r%   rQ   rR   rS   s        r&   test_scatter3dr-  K  s    
**,C	D	)BJJryy}biimRYYr]S  "		"b!!A!AJJq!Q#cJ*AbEJJr2rSJ-r(   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 )Nr   r   rs   rG   noner  )	facecolor	edgecolorr(  rr   rp   r$  )rz   r(  r*  r\   s     r&   test_scatter3d_colorr2  X  s    
**,C	D	)B JJryy}biimRYYr]s  <JJryy}biimRYYr]3s  < JJryyR "))B"3RYYr25F  &r(   zscatter3d_linewidth.pngc            	         t        j                         } | j                  d      }|j                  t	        j
                  d      t	        j
                  d      t	        j
                  d      dt	        j
                  d             y )Nr   r   rs   r  )r(  r  r*  r\   s     r&   test_scatter3d_linewidthr4  h  s[    
**,C	D	)B JJryy}biimRYYr]RYYr]  4r(   c           	         |j                  d      }|j                  t        j                  d      t        j                  d      t        j                  d      d      }|j	                  t        j                  d             | j                  d      }|j                  t        j                  d      t        j                  d      t        j                  d      dt        j                  d             y )Nr   r   rs   r  r(  )r(  
linewidths)rU   r+  r7   r|   set_linewidthsr$   r#   r   rt   r   s        r&   %test_scatter3d_linewidth_modificationr:  r  s     ""d"3G		"ryy}biim" 	 	$ARYYr]#  D 1F
NN299R="))B-2s iim  -r(   c                    |j                  d      }|j                  t        j                  d      t        j                  d      t        j                  d      d      }|j	                  d       |j                  d       |j                  dd	gd
z         |j                         sJ |j                  d       |j                         rJ |j                  t        j                  dd             |j                  d       | j                  d      }|j                  t        j                  d      t        j                  d      t        j                  d      ddddd	gd
z  ddd
       y )Nr   r   rs   r  r6  C1C2333333?ffffff?r0   FK   r3   )r(  r0  r1  r{   
depthshader$  r7  )rU   r+  r7   r|   set_facecolorset_edgecolor	set_alphaget_depthshadeset_depthshade	set_sizesfullr8  r9  s        r&   test_scatter3d_modificationrI    s'    ""d"3G		"ryy}biim" 	 	$AOODOODKKc
QU!!!KKB Q  D 1F
NN299R="))B-2s!T#sa#ra  9r(   rA  c                    t         j                  ddddf   \  }}t        j                  |j                        j	                  |j
                        }t        j                  |j
                  d      }d|ddddddf<   d|ddddddf<   t        j                  |j
                  d      }d	|dd
dd
f<   d|ddddf<   d|ddddf<   t        j                  |j
                  d      }d|dd
dd
f<   d|d
ddd
f<   d|d
dd
df<   t        j                  |j
                  d      }	d
|	ddddddf<   d
|	ddddddf<   |||||||	fD 
cg c]  }
|
j                          c}
\  }}}}}}}	| 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c c}
w )z1Test that marker properties are correctly sorted.Nrs      r   r   r1   r/   C0r<  r0   r=  r   r4   C3C4C5C6	   C7r   r   c              3   F   K   | ]  }t        j                  |        y wN)r7   unique).0as     r&   	<genexpr>z)test_scatter3d_sorting.<locals>.<genexpr>  s     NQBIIaLNs   !dtype)r$  fceclwr{   rA  )r7   mgridr|   sizereshapeshaperH  flattenrU   r9   r<   mamasked_arrayfloatrepeatr=   maskr+  )r$   r#   rA  rR   rQ   rS   sizes
facecolors
edgecolorsr7  rW  r   setsr$  r[  r\  r]  subsetr   s                      r&   test_scatter3d_sortingrm    s   
 88CRC"HDAq
		!&&!!!''*AGGAGGR EE!$Q$1*E!$Q$1*$'JJrr2A2vJqr2A2vJqr12v$'JJqsAaCxJqsAaCxJqsAaCx!$JJqt!tQTTzJqt!tQTTz Q5*j*E: 	
		:6Aq!UJ
J
   D 1FN5*j*"MND"**D1 .2r2aZ22 2 	 ##AvU#; YYr3|,-q!VqRB2Q", 	 	..$ ""d"3GOOAq!u
!z  C5:s   I!rf      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   rp   rR   r   r     r$  rt   rd   N)rU   r+  rj   r#   r$   rf   rQ   rR   rS   rz   r%   s           r&   $test_marker_draw_order_data_reversedrt    s     
QA	
BA	
AA#JE					.BJJq!Q$%J(LLadL+					-BJJq2w$B$4R4DE$B$KJ@LLadL+r(   c           
      j   d}ddg}ddg}ddg}ddg}| j                  d      }|j                          |j                  |||d	|
       |j                  d|d       |j                  d      }|j                          |j                  |||d	|ddd   
       |j                  d|dz
  d       y)z
    Test that the draw order changes with the direction.

    If we rotate *azim* by 180 degrees and exchange the colors, the plot
    plot should look the same again.
    ro  r   r/   r   rp   rR   r   r   rq  rr  rd   Nrb   )rU   set_axis_offr+  rj   rs  s           r&   #test_marker_draw_order_view_rotatedrw    s     D	QA	
BA	
AA#JE					.BOOJJq!Q$%J(LLadL+					-BOOJJq!Q$%"+J.LLadSjqL1r(   zplot_3d_from_2d.pnggQ?c                      t        j                         } | j                  d      }t        j                  dd      }t        j                  dd      }|j                  ||dd       |j                  ||dd       y )	Nr   r   r   r0   rs   rQ   rw   rx   rR   )r5   rT   rU   r7   r|   r  )rE   r%   r~   r   s       r&   test_plot_3d_from_2drz    sd    
**,C	D	)B	1aB	1b	BGGBqsG#GGBqsG#r(   zsurface3d.pngc            
         dt         j                  d<   t        j                         } | j                  d      }t	        j
                  ddd      }t	        j
                  ddd      }t	        j                  ||      \  }}t	        j                  ||      }t	        j                  |      }|j                  |||ddt        j                  d	d
      }|j                  dd       | j                  |dd       y )NFzpcolormesh.snapr   r   r  r0   r   r   r   )r  r  r   r]  r  )\()\(?r   )shrinkaspect)r5   rcParamsrT   rU   r7   r|   r   r  r   r  r   r   r   colorbar)rE   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2br{{U  4DKKtLLc!L,r(   zsurface3d_shaded.pngc            
         t        j                         } | j                  d      }t        j                  ddd      }t        j                  ddd      }t        j
                  ||      \  }}t        j                  |dz  |dz  z         }t        j                  |      }|j                  |||ddg ddd	
       |j                  dd       y )Nr   r   r  r0   r   r1   )r   r/   r   r/   F)rstridecstriderz   r]  r  r|  r}  )
r5   rT   rU   r7   r|   r   sqrtr   r  r   )rE   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KKtr(   zsurface3d_masked.pngc                     t        j                         } | j                  d      }g d}g d}t        j                  ||      \  }}t        j
                  g dg dg dg dg d	g d
g dg dg      }t        j                  j                  |d      }t        j                  |j                         |j                               }t        j                  d    ||            }|j                  ||||       |j                  ddd       y )Nr   r   )r/   r1   r3   r4   r0   r   r   r   rQ  rs      )r/   r1   r3   r4   r0   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   )r   r/   r1   r3   r4   r4   r4   r3   r1   r/   r/   )r         r4   r0   r   r   r   r0   r4   r3   r  )r   r  r   r   r     r  r   r   r  r  )r   r  r   rQ  rs      rs   rQ  rs   r   r  )r   r  r  r  r  rr   r  r  r  r  r  )r   r  r  r        r  rr      r  r  )r   r  r  r  r        rK  r  r  r  r   )r   r   plasmari  rq   r   )r5   rT   rU   r7   r   r8   rc  masked_lessr   	Normalizer   r   r   r   r  rj   )rE   r%   rQ   rR   matrixrS   normr	   s           r&   test_surface3d_maskedr  $  s    
**,C	D	)B+A A;;q!DAqXX..276<=?		
F 	&!$A!%%'8D]]8$T!W-FOOAq!O/LLS!r(   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 )Nr   r   igffffff@r/   r1   r4   r  r  <   r   )	r5   rT   rU   r7   r^  rc  r  r  rj   r,  s        r&   test_surface3d_masked_stridesr  ?  s    
**,C	D	)B88Bs1HbQh&'DAq
!a%#AOOAq!QO2LLS!r(   z
text3d.pngc                     t        j                         } | j                  d      }d}d}d}d}t        ||||      D ]%  \  }}}}	d|||	|fz  }
|j	                  |||	|
|       ' |j	                  dddd	d	
       |j                  ddd|j                         |j                  dd       |j                  dd       |j                  dd       |j                  d       |j                  d       |j                  d       y )Nr   r   NrQ   rR   rS   r/   r/   r   r/   r/   r/   r1   r   r4   rQ  r   r1   r   r4   r   r   r1   r1   r4   r1   r0   r   r/   r   z(%d, %d, %d), dir=%sr/   r   r   r   gffffff?z2D Text)	transformr   rs   zX axiszY axiszZ axis)r5   rT   rU   r@   r%  text2D	transAxes
set_xlim3d
set_ylim3dr  rX   rY   rZ   )rE   r%   zdirsr~   r   rw   rx   rQ   rR   rS   rO   s              r&   test_text3dr  K  s    
**,C	D	)B7E	B	B	BUBB/ &aA&!Q48
1a%& GGAq!U%G(IIdD)r||I<MM!RMM!RMM!RMM(MM(MM(r(   c                 D   d}d}d}d}|j                  d      }|j                  dd       |j                  dd       |j                  dd       t	        ||||      D ]=  \  }}}	}
|j                  dddd	| d
|	 d
|
 d|       }|j                  ||	|
f|       ? | j                  d      }|j                  dd       |j                  dd       |j                  dd       t	        ||||      D ])  \  }}}	}
|j                  ||	|
d	| d
|	 d
|
 d| |       + y )Nr  r  r  r  r   r   r   rs   (z, z), dir=)rx   )rU   r  r  r  r@   r%  set_position_3d)r$   r#   r  r~   r   rw   r   rx   rQ   rR   rS   r  r   s                r&   test_text3d_modificationr  c  s[    8E	B	B	B""d"3Gq"q"q"UBB/ 0aALLAqAaS1#Rs'$"@A	1a)$/0   D 1F
a
a
aUBB/ HaAAq!q2aS1#WTF;$GHr(   ztrisurf3d.pnggZd;?c                     d} d}t        j                  dd|      }t        j                  ddt         j                  z  | d      }t        j                  |d	t         j                  f   |d
      }|d d d
d dfxx   t         j                  | z  z  cc<   t        j
                  d|t        j                  |      z  j                               }t        j
                  d|t        j                  |      z  j                               }t        j                  | |z        }t        j                         }|j                  d      }|j                  |||t        j                  d       y )N$   r         ?      ?r   r1   Fendpoint.r/   axisr   r   皙?)r   r  )r7   r   r   rf  newaxisappendr  rb  r   r5   rT   rU   plot_trisurfr   jet	n_anglesn_radiiradiianglesrQ   rR   rS   rE   r%   s	            r&   test_trisurf3dr  |  s   HGKKsG,E[[AbeeGX>FYYvc2::o.a@F
1add7OruuX~%O
		!eBFF6N*3356A
		!eBFF6N*3356A
r!tA
**,C	D	)BOOAq!"&&CO8r(   ztrisurf3d_shaded.pngQ?c                     d} d}t        j                  dd|      }t        j                  ddt         j                  z  | d      }t        j                  |d	t         j                  f   |d
      }|d d d
d dfxx   t         j                  | z  z  cc<   t        j
                  d|t        j                  |      z  j                               }t        j
                  d|t        j                  |      z  j                               }t        j                  | |z        }t        j                         }|j                  d      }|j                  |||g dd       y )Nr  r   r  r  r   r1   Fr  .r/   r  r   r   )r/   r   r   r  )rz   r  )r7   r   r   rf  r  r  r  rb  r   r5   rT   rU   r  r  s	            r&   test_trisurf3d_shadedr    s	   HGKKsG,E[[AbeeGX>FYYvc2::o.a@F
1add7OruuX~%O
		!eBFF6N*3356A
		!eBFF6N*3356A
r!tA
**,C	D	)BOOAq!;#O>r(   zwireframe3d.pngc                      t        j                         } | j                  d      }t        j                  d      \  }}}|j                  |||dd       y )Nr   r   r      r  r  r5   rT   rU   r   r   plot_wireframer   s        r&   test_wireframe3dr    sL    
**,C	D	)B""4(GAq!aAb4r(   zwireframe3dzerocstride.pngc                      t        j                         } | j                  d      }t        j                  d      \  }}}|j                  |||dd       y )Nr   r   r   r  r   r  r  r   s        r&   test_wireframe3dzerocstrider    sL    
**,C	D	)B""4(GAq!aAb3r(   zwireframe3dzerorstride.pngc                      t        j                         } | j                  d      }t        j                  d      \  }}}|j                  |||dd       y )Nr   r   r   r   rs   r  r  r   s        r&   test_wireframe3dzerorstrider    sL    
**,C	D	)B""4(GAq!aAq"5r(   c                  
   t        j                         } | j                  d      }t        j                  d      \  }}}t        j                  t              5  |j                  |||dd       d d d        y # 1 sw Y   y xY w)Nr   r   r   r   r  )	r5   rT   rU   r   r   pytestraises
ValueErrorr  r   s        r&    test_wireframe3dzerostrideraisesr    sm    
**,C	D	)B""4(GAq!	z	" 9
!Q1a89 9 9s   A99Bc                     t        j                         } | j                  d      }t        j                  d      \  }}}t        j                  t              5  |j                  |||dd       d d d        t        j                  t              5  |j                  |||dd       d d d        y # 1 sw Y   BxY w# 1 sw Y   y xY w)Nr   r   r   rs   2   )r  r  )r  r  )
r5   rT   rU   r   r   r  r  r  r  r  r   s        r&   test_mixedsamplesraisesr    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.pngzquiver3d_pivot_middle.pngzquiver3d_pivot_tail.pngc                     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  }dD ]@  }t        j                         j                  d	      }|j                  | |||||d
|d	       B y )Nr   rv                 $@333333?              @>,p ?)tipmiddletailr   r   r   Tr   pivot	normalize)	r7   ogridr   r   r  r5   rT   rU   quiver)rQ   rR   rS   uvwr  r%   s           r&   test_quiver3dr    sG    hhr#cz2c#:r#by89GAq!
ruuqyBFF25519--ruuqy0AAA			RVVBEEAI..	1BBARVVBEEAI&&	)::RVVBEEAI=NNA* MZZ\%%%6
		!Q1a3et	LMr(   c                     |j                  d       g x}x}x}x}x}}| j                  d      }|j                  ||||||ddd	       y )Nr   r   r   r  Tr  )rU   r  )	r#   r$   rQ   rR   rS   r  r  r  r%   s	            r&   test_quiver3d_emptyr    sb    4(AAA					.BIIaAq!Qs%4IHr(   zquiver3d_masked.pngc                  6   t        j                         } | j                  d      }t        j                  dddddddddf   \  }}}t        j
                  t        j                  |z        t        j                  t        j                  |z        z  t        j                  t        j                  |z        z  }t        j                  t        j                  |z         t        j
                  t        j                  |z        z  t        j                  t        j                  |z        z  }dt        j                  t        j                  |z        z  t        j                  t        j                  |z        z  t        j
                  t        j                  |z        z  }t        j                  j                  d	|k  |d
k  z  |d      }t        j                  j                  d
|k  |dk  z  |d      }|j                  ||||||d
dd	       y )Nr   r   r   rv   r  r  r  r  皙ٿr   F)r   r?  r  Tr  )r5   rT   rU   r7   r^  r   r   r  rc  masked_wherer  )rE   r%   rQ   rR   rS   r  r  r  s           r&   test_quiver3d_maskedr    s   
**,C	D	)B hhr#cz2c#:r#by89GAq!
ruuqyBFF25519--ruuqy0AAA			RVVBEEAI..	1BBARVVBEEAI&&	)::RVVBEEAI=NNA
D1HS115AA
C!GC0!%@AIIaAq!Qs%4IHr(   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 )Nr   r   r   r   )r  r  r  r/   r/   r   r   r/   )r5   rT   rU   r   	add_patchr   patch_2d_to_3drB  r   
same_colorget_facecolorr   r   )rE   r%   circles      r&   test_patch_modificationr    s    
**,C	D	)BF^FLL	 
+,f224lCCCJJOOf224lCCCr(   c                    t        dd      }t        dd      }t        j                  g dg dg      }t        j                  ||gd      }| j                  d	
      }|j                  |       |j                  d       |j                  |       |j                  d       |j                         sJ |j                  d       |j                         rJ t        dd      }t        dd      }t        j                  g dg dg      }t        j                  ||gdd|dd      }|j                  d	
      }|j                  |       y )Nr  r   )r   r   r  )r  r   r  r  )r   r  r  r   r3   )r7  r   r   r=  r?  F)r7  r1  r0  r{   rA  )r   r7   r8   r   Patch3DCollectionrU   add_collection3drC  rB  rD  rE  rF  )r#   r$   patch1patch2ri  rt   r   r   s           r&   "test_patch_collection_modificationr    s2    FD!FJ%F,.@ABJ 0Q?A""d"3GQOODOOJKKU!!!FD!FJ%F,.@ABJ 0Q*.*&)e	=A   D 1F
Ar(   c                  j   g dg dg dg dg} t        j                  t        d      5  t        j                  |        d d d        t        j                  | t              } t        j                  t        d      5  t        j                  |        d d d        y # 1 sw Y   ^xY w# 1 sw Y   y xY w)Nr   r   r/   r   r/   r/   )r   r/   r   ra   zlist of \(N, 3\) array-likematchrY  )r  r  r  r   Poly3DCollectionr7   r8   re  )polys    r&   &test_poly3dcollection_verts_validationr    s    y)Y7D	z)G	H %t$% 88D&D	z)G	H %t$% %	% %% %s   B>B)B&)B2zpoly3dcollection_closed.pngc                     t        j                         } | j                  d      }t        j                  g dg dg dgt
              }t        j                  g dg dg dgt
              }t        j                  |gdd	d
d      }t        j                  |gdd	dd      }|j                  |       |j                  |       y )Nr   r   r   r  ra   r  r  r3   k)r   r   r/   r   Tr7  r1  r0  closed)r/   r   r   r   F)	r5   rT   rU   r7   r8   re  r   r  r  rE   r%   poly1poly2c1c2s         r&   test_poly3dcollection_closedr  #  s    
**,C	D	)BHHiI6>EHHiI6>E			A*<T
KB			A*<U
LBr(   c                     t        g       } t        j                  |        t        | t        j                        sJ | j                         g k(  sJ t        j                  t        d            \  }}|j                  |        | j                         }t        j                  |      sJ |j                  j                          y )Nr   r   r   )r   r   poly_collection_2d_to_3d
isinstancer  	get_pathsr5   r   r    
add_artistdo_3d_projectionr7   isnanr   r   )r  rE   r%   minzs       r&   #test_poly_collection_2d_to_3d_emptyr  2  s    "D	""4(dE22333>>r!!!lldd&;<GCMM$  "D88D>> JJOOr(   zpoly3dcollection_alpha.pngc                     t        j                         } | j                  d      }t        j                  g dg dg dgt
              }t        j                  g dg dg dgt
              }t        j                  |gdd	d
d      }|j                  d       t        j                  |gdd      }|j                  d       |j                  d	       |j                  d       |j                  |       |j                  |       y )Nr   r   r   r  ra   r  r  r3   r  r   r   r/   Tr	  r   F)r7  r
  )r/   r   r   )r5   rT   rU   r7   r8   re  r   r  rD  rB  rC  r  r  s         r&   test_poly3dcollection_alphar  A  s    
**,C	D	)BHHiI6>EHHiI6>E			A*7
FBLL			Ae	DB]#SLLr(   zadd_collection3d_zs_array.pngc                     t        j                  dt         j                  z  dt         j                  z  d      } t        j                  ddd      }|dz  dz   }|t        j                  |       z  }|t        j                  |       z  }t        j
                  |||g      j                  ddd      }t        j                  |d d |dd  gd	      }t        j                         }|j                  d
      }t        j                  ddt         j                  z        }	t        |d d d d d df   d|	      }
|
j                  t        j                  | dt         j                  z               |j                  |
|d d d d df         }|J |j!                  dd       |j#                  dd       |j%                  dd       y )Nr   r4   r   r   r1   r/   r   r3   r  r   r   r   twilightr   r  rw   r  r0   r   )r7   r   r   r   r  column_stackr`  concatenater5   rT   rU   r  r   	set_arraymodr  r   r   r   r  rS   rG   rQ   rR   pointssegmentsrE   r%   r  lclines               r&   test_add_collection3d_zs_arrayr*  T  sp   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KKAKKAKKAr(   zadd_collection3d_zs_scalar.pngc                     t        j                  ddt         j                  z  d      } d}|dz  dz   }|t        j                  |       z  }|t        j                  |       z  }t        j
                  ||g      j                  ddd      }t        j                  |d d |dd  gd      }t        j                         }|j                  d      }t        j                  ddt         j                  z        }	t        |d	|	
      }
|
j                  |        |j                  |
|      }|J |j                  dd       |j!                  dd       |j#                  dd       y )Nr   r1   r   r/   r   r  r   r   r  r  r   r  r0   r   r   )r7   r   r   r   r  r!  r`  r"  r5   rT   rU   r  r   r#  r  r   r   r   r%  s               r&   test_add_collection3d_zs_scalarr,  p  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KKAKKAKK1r(   zaxes3d_labelpad.pngc                  @   t        j                         } | j                  t        | d            }|j                  j
                  t        j                  d   k(  sJ |j                  dd       |j                  j
                  dk(  sJ |j                  d       |j                  d       d	|j                  _        d
|j                  _        t        |j                  j                               D ]*  \  }}|j                  |j!                         |dz  z
         , y )NF)auto_add_to_figurezaxes.labelpadzX LABELrs   )labelpadzY LABELzZ LABELrr   r   r0   )r5   rT   add_axesr   xaxisr/  r   r  rX   rY   rZ   yaxiszaxisrA   get_major_ticksset_padget_pad)rE   r%   rL   ticks       r&   test_axes3d_labelpadr8    s    
**,C	fSU;	<B88_ ====MM)bM)88"""MM)MM)BHHBHH RXX5578 -4T\\^a!e+,-r(   zaxes3d_cla.pngc                      t        j                         } | j                  dddd      }|j                          |j	                          y )Nr/   r   r   )r5   rT   rU   rv  clar\   s     r&   test_axes3d_clar;    s8     **,C	AqT	2BOOFFHr(   zaxes3d_rotated.pngc                  |    t        j                         } | j                  dddd      }|j                  ddd       y )Nr/   r   r   r_   -   r   )r5   rT   rU   rj   r\   s     r&   test_axes3d_rotatedr>    s3    
**,C	AqT	2BLLRr(   c                     t        j                  ddd      } t        j                  ddd      }t        j                  | |      \  }}t         j                  j	                  d      }t        j                  d      }|j                  dddd	
      }t        j                  t              5  |j                  |||       d d d        y # 1 sw Y   y xY w)Nr   rs   r   )num)   r   r   r/   r1   r   r   )r7   r   r   r   randnr5   rT   rU   r  r  r  r  )rQ   rR   r   r   rS   rE   r%   s          r&   test_plotsurface_1d_raisesrC    s    
C%A
C%A;;q!DAq
		A
**W
%C	AqT	2B	z	" !
1a ! ! !s   -C

Cc                     t        j                  g d      } t        j                  g d      }t        j                  g d      }d}t        j                  | |||      }t        j                  ddd      }t        j
                  ||      }|S )N)r   ii  )r   r   r   r   r   r   r   r/   )r7   r8   r   view_transformationpersp_transformationdot)Er   Vrg   viewMperspMMs          r&   _test_proj_make_MrM    sq    
$%A
!A
AD&&q!Q5E((dA6F
vuAHr(   c                     t               } 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/   )rM  r7   r8   r   proj_transforminv_transformr   assert_almost_equal)
rL  r~   r   rw   txstystzsixsiysizss
             r&   test_proj_transformr\    s    A	0	1E	9B	0	1E	9B	0	1E	9B))"b"a8MCc((c3:MCcJJ""3+JJ""3+JJ""3+r(   r/   c                 \   d|ddg}dd|dg}ddd|g}t        j                  ||||       \  }}}	t        ||      \  }
}}}|
|f|
|f|
|fg}t        j                  |i |\  }}t        |      }|j                  |       t        ||g d      D ]  \  }}}|j                  |||        ||fS )Nr   )r  rQ   rR   rS   )r   rS  r@   r5   r   r   add_collectionr%  )rL  r$  argsr   r~   r   rw   rV  rW  rX  r  r%   ayazlinesrE   linecrQ   rR   r  s                       r&   _test_proj_draw_axesrd    s    
Q1B
Q1B
Q1B))"b"a8MCcSMMAr2rWq"g2w'EllD+F+GC5!EesC!56 1a
1a 7Nr(   zproj3d_axes_cube.pngc                     t               } dj                         }t        j                  g d      dz  }t        j                  g d      dz  }t        j                  g d      dz  }t	        j
                  ||||       \  }}}t        | d      \  }}	|	j                  |||       |	j                  ||d	       t        |||      D ]  \  }
}}|	j                  |
||        |	j                  d
d       |	j                  d
d       y )N0 1 2 3 0 4 5 6 7 4rO  rP  rQ  rR  i  r#  rt   rG   皙ɿr  )rM  splitr7   r8   r   rS  rd  r+  r  r@   r%  r   r   )rL  tsr~   r   rw   rV  rW  rX  rE   r%   rQ   rR   r  s                r&   test_proj_axes_cuberk    s    A		$	$	&B	0	1E	9B	0	1E	9B	0	1E	9B))"b"a8MCc"1,GCJJsC3JGGCGsC$ 1a
1a KKcKKcr(   zproj3d_axes_cube_ortho.pngc                     t        j                  g d      } t        j                  g d      }t        j                  g d      }d}t        j                  | |||      }t        j                  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                  |||        |j                  dd       |j                  dd       y )N)   r   r   ra   r   r   r   r/   rf  rO  r   rQ  rR     r#  r   rG   rg  i8rm  )r7   r8   r   rE  ortho_transformationrG  ri  rS  rd  r+  r  r@   r%  r   r   )rH  r   rI  rg   rJ  orthoMrL  rj  r~   r   rw   rV  rW  rX  rE   r%   rQ   rR   r  s                      r&   test_proj_axes_cube_orthorq    sS   
!A
A
AD&&q!Q5E((Q/F
vuA		$	$	&B	0	1C	7B	0	1C	7B	0	1C	7B))"b"a8MCc"1,GCJJsC3s7J#GGCGsC$ 1a
1a KKcKKcr(   c                  h   g d} t        j                  | t        j                  dz        }t        j                  j                  |g d       g d} t        j                  | t        j                  dz        }t        j                  j                  |dt        j                  d      dz  ddg       y )	Nr  r   )r   r/   r   r/   r   r3   r1   r   r/   )r   rot_xr7   r   r   assert_allcloser  )rI  	rotated_Vs     r&   test_rotrv    sy    AQ	*IJJy,7AQ	*IJJy1bggaj1nc1*EFr(   c                      d\  } }d\  }}d\  }}t        j                  | |||||      }t        j                  j	                  |g dg dg dg dg       y )N)r   x   )r   r   )r   r  )r   r   r   r  )r   g{Gzt?r   r   )r   r   g      $@r   )r   r   r   r/   )r   world_transformationr7   r   rt  )xminxmaxyminymaxzminzmaxrL  s          r&   
test_worldr  "  s\    JD$JD$JD$##D$dD$GAJJq 0 2 / , ./r(   zproj3d_lines_dists.pngc                  "   t        j                  dt        d            \  } }d}d}|j                  ||       t	        ||      \  }}d}d}|j                  ||       t        j                  |||d	   |d	   f      }t        j                  ||t        j                  ||f            }||d	   k(  sJ t	        |||      D ]'  \  }}	}
t        ||	f|
d	
      }|j                  |       ) |j                  dd       |j                  d	d       y )N)r4   r   r+   )r  )r   r   )r   rq   rr   rn  )r   r   rr   rq   )r   rn  rq   rm  r   )fillrn  rn  r   )r5   r   r    r  r@   r+  r   _line2d_seg_distr7   r8   r   r  r   r   )rE   r%   r~   r   p0p1dist0distrQ   rR   drt   s               r&   test_lines_distsr  .  s   ll6d'6JKGC	B	BGGBOR[FB	B	BJJr2##BRUBqEN;E""2r288RH+=>DDGr2t$ 1aAq611%
Q KKSKK3r(   c                      d} d}d}t        j                  | | |       t        j                  | ||       t        j                  |       } t        j                  | | |       y )N)rs   rq   r  )rs   rq   rr   r  )r   r  r7   r8   )r  r  p2s      r&   test_lines_dists_nowarningr  G  sV     
B	B	B
BB'
BB'	"B
BB'r(   c                     t        j                  ddi      \  } }|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 )Nr   r   r   r   r   r  rQ   rR   rS   r/   )r   r/   r   皙?rh  g333333?FTr1   )r   r/   r   r  r  333333@rQ   r  )r   r1   r   r  r  r  )r5   r   marginsr  
get_w_lims	autoscaleset_autoscalez_onr\   s     r&   test_autoscaler  S  s    ll|T&:;GCJJbBJGGQFQFQF#==?8888LLGGQFQFQF#==?8888LLcLGGQFQFQF#==?8888r(   r  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 )Nr   r   r   r   r   get_autoscale_onset_limget_)      r   )r*   )r5   rT   rU   r7   r|   r   r+  getattrr   r   r   r   )
r  r*   rE   r%   rQ   rR   get_autoscale_onset_limget_lim	post_autos
             r&   test_unautoscaler  a  s     **,C	D	)B
		#A
D#s#AJJq!r]4&#<=bDc*+GbDc*+G&*l "IKd#(****JJOOJJ!!')[9r(   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)Nr   r   perspr   focal_lengthrc   r/   )r5   rT   rU   r  r  r  ri   r\   s     r&   test_axes3d_focal_length_checksr  w  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/   r1   r   r   r   r   r  r  g333333?)r5   r   ri   r7   inf)rE   rF   s     r&   test_axes3d_focal_lengthr    sO    ||AqlD-ABHCFrvv6Ft4r(   zaxes3d_ortho.pngc                  r    t        j                         } | j                  d      }|j                  d       y )Nr   r   rc   )r5   rT   rU   ri   r\   s     r&   test_axes3d_orthor    s+    
**,C	D	)BWr(   zaxes3d_isometric.pngc                     ddl m} m} t        j                  t        ddd            \  }}d} | t        j                  t         ||||                  d	      D ]J  \  }}t        ||z
        j                         |d
   |d   z
  k(  s/ |j                  t        ||      ddi L |j                  t        j                  t        j                  dt        j                   d	      z              dd       |j#                  d       y )Nr   )r:   r<   r   rc   )r4   r4   r4   )r   	proj_type
box_aspectr   )r   r/   r1   r/   rt   r  r  r  rd   T)r9   r:   r<   r5   r   r    r7   r8   r;   r>   r=   r?   r@   rj   degreesarctanr  r  )r:   r<   rE   r%   rG   r$  es          r&   test_axes3d_isometricr    s    /lld' GC
 	ARXXd71a+;&<=qA )1q1u:>>qtad{*BIIs1ay(C() LLbjj2
?!;<3QLOGGDMr(   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)Nr   r    )r5   rT   rU   r  r  r  r  )r  r  r  limitrE   objs         r&   test_invalid_axes_limitsr    s]     5ME
**,C
//T/
*C	z	" &V%u%& & &s   A  A)c                       e Zd Z edg      d        Z edg      d        Z edg      d        Z edg      d        Z ed	g      d
        Z edgdd      d        Z	d Z
y)
TestVoxelszvoxels-simple.pngc                     t        j                  ddi      \  }}t        j                  d      \  }}}||k(  ||k(  z  }|j	                  |       y )Nr   r   r   )r0   r4   r3   )r5   r   r7   indicesvoxels)selfrE   r%   rQ   rR   rS   r  s          r&   test_simplezTestVoxels.test_simple  sK    ,,<*>?R**Y'1aq&Q!V$
		&r(   zvoxels-edge-style.pngc                 $   t        j                  ddi      \  }}t        j                  d      \  }}}|dz
  dz  |dz
  dz  z   |dz
  dz  z   dk  }|j	                  |dd	
      }|t        |j                                  j                  d       y )Nr   r   r   )r0   r0   r4   r1   g      ?g](\@r3   r<  )r7  r1  r=  )r5   r   r7   r  r  r   keysrC  )r  rE   r%   rQ   rR   rS   r  r  s           r&   test_edge_stylezTestVoxels.test_edge_style  s    ,,<*>?R**Y'1aq51*Az)QsUQJ6&@IIfdI; 	
#affh-&&t,r(   zvoxels-named-colors.pngc                 D   t        j                  ddi      \  }}t        j                  d      \  }}}||k(  ||k(  z  }|||z  |z  dk   z  }t        j                  ddt        j
                        }d||d	k  |d	k  z  <   d
|||z   dk  <   |j                  ||       y)z5Test with colors set to a 3D object array of strings.r   r   r   rs   rs   rs   r/   rL  rY  z0.25r0   cyanrs   r  N)r5   r   r7   r  rH  object_r  r  rE   r%   rQ   rR   rS   r  r	   s           r&   test_named_colorszTestVoxels.test_named_colors  s     ,,<*>?R**\*1aq&Q!V$AEAIM**t2::>$*A!a% !%A|
		&V	,r(   zvoxels-rgb-data.pngc                    t        j                  ddi      \  }}t        j                  d      \  }}}||k(  ||k(  z  }t        j                  d      }|dz  |d<   |dz  |d<   |dz  |d	<   |j                  ||
       y)z5Test with colors set to a 4d float array of rgb data.r   r   r   r  )rs   rs   rs   r3   rQ  .r   .r/   .r1   r  N)r5   r   r7   r  zerosr  r  s           r&   test_rgb_datazTestVoxels.test_rgb_data  s     ,,<*>?R**\*1aq&Q!V$/*QvQvQv
		&V	,r(   zvoxels-alpha.pngc                    t        j                  ddi      \  }}t        j                  d      \  }}}||k(  }t        j                  ||z
        dk  }||z  }t        j
                  d      }	g d|	|<   g d|	|<   |j                  ||		      }
t        |
      t        u sJ |
j                         D ]-  \  }}||   sJ d
       t        |t        j                        r-J  y )Nr   r   r   r  r1   )rs   rs   rs   r4   )r/   r   r   r   )r   r/   r   r   r  zfaces returned for absent voxel)r5   r   r7   r  r>   r  r  typer    itemsr  r   r  )r  rE   r%   rQ   rR   rS   v1v2r  r	   r  coordr  s                r&   
test_alphazTestVoxels.test_alpha  s    ,,<*>?R**\*1a!VVVAE]Qb/*#r
#r
IIfI0Aw$779 	<KE4%=C"CC=dE$:$:;;;	<r(   zvoxels-xyz.png{Gz?F)r   r   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 )Nr   r   r   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/   r  )r   ndimr7   	index_exp)rQ   slrL   s      r&   	midpointsz&TestVoxels.test_xyz.<locals>.midpoints  sv    B166] &rBLL"--.rBLL,,-.145bll1o%& Hr(   )   r  r  g      0@r   r1   r   )r3   r  r  r  r   r/   )ri  rj  r  )r5   r   r7   r  r  ra  r  r   )r  rE   r%   r  rG   ro   rp   rcgcbcspherer	   s               r&   test_xyzzTestVoxels.test_xyz  s    ,,<*>?R	 **\*T11aq\q\q\ s(Q"s(Q."s(Q>G &,,-.vvv 			!Q6#WWQvX^Q: 	 	!r(   c                 
   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              5  |j                  ||||       d d d        y # 1 sw Y   wxY w# 1 sw Y   MxY w# 1 sw Y   y xY w)Nr2   )r1   r3   r4   r   r   r   r  )r1  filledr  r  )r  )r  rQ   rR   rS   r  )r7   r  onesr5   r   r    r  r  r  	TypeErrorAttributeError)r  rQ   rR   rS   r  rE   r%   kws           r&   test_calling_conventionsz#TestVoxels.test_calling_conventions  s_   **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	 ]]>* 	4IIVqAI3	4 	4	6 	6	 		4 	4s$   E!E-E9!E*-E69FN)__name__
__module____qualname__mpl3d_image_comparisonr  r  r  r  r  r  r  r  r(   r&   r  r    s    012 3 456- 7- 678
- 9
- 234
- 5
- /01< 2<" -.DeL! M!@4r(   r  c                     ddgddgddg}}} ddgd	d
gddg}}}t        j                         }|j                  d      }|j                  | ||      }|d   }	t        j
                  j                  | ||f|	j                                |	j                  |||       t        j
                  j                  |||f|	j                                |	j                  |        |	j                  |       |	j                  |d       t        j
                  j                  | ||f|	j                                |	j                  dd       t        j
                  j                  | |t	        j                  |      f|	j                                y )Nr   r/   r1   r3   r4   r0   r   r   r   rQ  rs   r  r   r   rS   ry  )r5   rT   rU   r  r7   r   r   get_data_3dset_data_3d	set_xdata	set_ydataset_3d_propertiesr   )
rQ   rR   rS   x2y2z2rE   r%   rb  r)  s
             r&   test_line3d_set_get_data_3dr  )  sP   !fq!fq!f!qAQ!Q"bBB
**,C	D	)BGGAq!E8DJJ!!1a)T-=-=-?@RR JJ!!2r2,0@0@0BCNN1NN1ac*JJ!!1a)T-=-=-?@ac*JJ!!1aq)9":D<L<L<NOr(   c                     | j                  d      }|j                  g dg dg d       |j                          |j                  d      }|j                          |j                  g dg dg d       y )Nr   r   )r/   r/   rs   rs   )r/   rs   rs   rs   )r/   r/   r/   rs   )rU   r  invert_yaxisr"   s      r&   test_invertedr  ;  s^     
				.BGGNO];OO					-BOOGGNO];r(   c                  
   t        j                  ddi      \  } }|j                         rJ |j                         rJ |j	                         rJ |j                  dd       |j                  dd       |j                  dd       |j                         sJ |j                         sJ |j	                         sJ |j                          |j                         rJ |j                         rJ |j	                         rJ y )Nr   r   r   r/   r   )	r5   r   xaxis_invertedyaxis_invertedzaxis_invertedr   r   r   r:  r\   s     r&   test_inverted_clar  G  s     ll|T&:;GC  """  """  """KK1KK1KK1FFH  """  """  """"r(   c                  D   t        j                         } t        |       }|j                  dd       |j                  dd       |j                  dd       | j                  j                          |j                  j                         D ]  }|j                  j                  dk(  rJ  |j                  j                         D ]  }|j                  j                  dk(  rJ  |j                  j                         D ]  }|j                  j                  dk(  rJ  y )NrQ   r   )r  r	   rR   rS   )r5   rT   r   tick_paramsr   r   r1  r4  	tick1line_colorr2  r3  )rE   r%   r7  s      r&   test_ax3d_tickcolourr  [  s    
**,C	BNNEN*NNEN*NNEN*JJOO((* .~~$$---.((* .~~$$---.((* .~~$$---.r(   c                 \   | j                  ddddi      }|j                  D ]  }|j                  dd        t        |g d      D ]  \  }}|d	   j	                  |d
       |d   j	                  |d       |d   j	                  |t
        j                  d           |d   j	                  |t
        j                  d           |d   j	                  |t
        j                  d            d }|j                  ddddi      }|j                  D ]  }|j                  dd        t        |dgdgdgg dg      D ]  \  }} ||d	   |      D ]  }|j                  d         ||d   |      D ]  }|j                  d         ||d   |      D ]%  }|j                  t
        j                  d           '  ||d   |      D ]%  }|j                  t
        j                  d           '  ||d   |      D ]%  }|j                  t
        j                  d           '  y )Nr4   r0   r   r   r   g    cAg   @cA)rQ   rR   rS   r   r   plain)r  r   r/   )r   r1   )r  	scilimitsr1   zaxes.formatter.useoffset)r  	useOffsetr3   zaxes.formatter.use_locale)r  	useLocalezaxes.formatter.use_mathtext)r  useMathTextc                 \    |D cg c]  }t        | |      j                          c}S c c}w rT  )r  get_major_formatter)r%   namesnames      r&   get_formattersz-test_ticklabel_format.<locals>.get_formatters~  s&    DIJDD!557JJJs   !)r1  r2  r3  )r1  r2  r3  F)r   rh   r   r@   ticklabel_formatr   r  set_scientificset_powerlimitsset_useOffsetset_useLocaleset_useMathText)	r#   r$   rF   r%   rowr  r  r  fmts	            r&   test_ticklabel_formatr   l  s   


AqlD-A

BChh #
C"#56 I	TAW 	  	&A 	  	*AS\\2L%M!M 	  	OAS\\2M%N!N 	  	PALL)FGG 	  	IIK 

1a\4,@

AChh #
C"#7)gY	3NO A
U "#a&%0 	&Cu%	&!#a&%0 	)C(	)!#a&%0 	LC#,,/I"JJK	L!#a&%0 	MC#,,/J"KKL	M!#a&%0 	ACLL!>??A	AAr(   c                 p   d}t        j                  t        j                  ddd      t        j                  ddd      t        j                  ddd            \  }}}t        j                  |      x}x}}t	        || fd      D ]0  \  }	}
|	j                  d      }|j                  |||||||
|	       2 y )
Nr  gr/   r  rv   )r/   r  r   r   )r   r  )r7   r   r|   	ones_liker@   rU   r  )r#   r$   r  rQ   rR   rS   r  r  r  rE   r   r%   s               r&   test_quiver3D_smoker#    s    Ekk
		$3
		$3
		$3GAq!
 QAAGX.9 @V___-
		!Q1a6	?@r(   zminor_ticks.pngmpl20)r   c                  <   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 )Nr   r   r   T)minorquartergQ?thirdr   half)	r5   rT   rU   
set_xticksset_xticklabels
set_yticksset_yticklabels
set_zticksset_zticklabels)r%   s    r&   test_minor_ticksr0    s    		!	!T	!	2BMM4&M%	{$/MM4&M%y-MM4&M%xt,r(   zerrorbar3d_errorevery.pngc            	         t        j                  ddt         j                  z  dz   d      } t        j                  |       t        j                  d| z        t        j                  d| z        }}}t        j                         }|j                  d      }d	}t        j                  | j                        }||z  dk(  ||z  dz  dk(  z  }||z  dk(  ||z  dz  dk(  z  }	|j                  |||d
||	|       y)z0Tests errorevery functionality for 3D errorbars.r   r1   r   r  r3   r0   r   r      r  )zuplimszlolims
erroreveryN)
r7   r|   r   r   r  r5   rT   rU   r_  errorbar)
r  rQ   rR   rS   rE   r%   esteprL   r3  r4  s
             r&   test_errorbar3d_erroreveryr8    s     			!QruuWRZ&AffQi!bffQqSk!qA
**,C	D	)BE
		!&&A5yA~!u*q.A"56G5yA~!u*q.A"56GKK1agw   "r(   zerrorbar3d.pngc                      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.r   r   )r/   r1   r3   r4   r0   )r   r   r   r   r   r3   )FTFTT)TFFTFTpurplezError lines)rQ   rR   rS   xerryerrzerrcapsizer3  r4  yuplimsecolorrO   N)r5   rT   rU   r6  legend)rE   r%   r  r  s       r&   test_errorbar3drB    sa     **,C	D	)BAAKK!qAAAAq89}	  6
 IIKr(   z
stem3d.pngg~jth?)r   r   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 )Nr1   r3   )r   r   Tr   r   r   constrained_layoutr   r   r  )orientationzorientation=rr   r/   zC4-.C1Dr=  )linefmt	markerfmtbasefmtrF  r/  )r  markeredgewidth)r5   r   r7   r   r   r  r   r@   stemrW   r"  setset_linewidth)rE   rF   r  rQ   rR   rS   r%   rx   
markerline	stemlinesbaselines              r&   test_stem3drR    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!"r(   zequal_box_aspect.pngc                     ddl m} m} t        j                         }|j                  d      }t        j                  ddt        j                  z  d      }t        j                  dt        j                  d      }t        j                  t        j                  |      t        j                  |            }t        j                  t        j                  |      t        j                  |            }t        j                  t        j                  |      t        j                  |            }|j                  |||       ddg}	 |t        j                  t         | |	|	|	                  d      D ]Y  \  }
}t        j                   t        j"                  |
|z
              |	d   |	d   z
  k(  s> |j$                  t'        |
|      d	d
i [ t        j(                  |j+                         |j-                         |j/                         g      }t1        |d         t3        |d         g}|j5                  |       |j7                  |       |j9                  |       |j;                  d       |j=                  d       y )Nr   )r<   r:   r   r   r1   r   r   r/   rz   rp   offr  )r9   r<   r:   r5   rT   rU   r7   r   r   outerr  r   r"  r  r8   r;   r=   r>   r?   r@   r!  
get_xlim3d
get_ylim3d
get_zlim3dr   r   r  r  r  r  rB   )r<   r:   rE   r%   r  r  rQ   rR   rS   rG   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 r(   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 )Nr1   r/   )r4   r0   Tr   r   rD  r0   
horizontal)r%   rF  r  )r5   r   r  r7   r   rB  r  r   r   r%   get_positionextents)	num_plotsrE   rF   r%   p_tricbars         r&   test_colorbar_posrc    s    I||Ay&/3(4d';=HC  4		 2BIIOOA4F "		 244 <<#<@DJJOO77!))!,s222r(   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   r   r      )r   sharezr   r/   r1   )r  r   r1         @)r  rh  )r5   rT   rU   r  r.  get_zlim)rE   r  r	  s      r&   test_shared_axes_retickrj  "  s    
**,C
//#$/
/C
//#$s/
;CHHaVaVaV$HHaVaVaV$NN$%<<>[(((<<>[(((r(   c                     d } t        j                         j                  d      }|j                  ddd       |j                  j                  j                           | |j                          \  }} | |j                          \  }} | |j                          \  }}|j                  t        |t        j                  dd             |j                  t        |t        j                  dd              | |j                          \  }}	 | |j                          \  }
} | |j                          \  }}|	t        j                  |      k(  sJ |t        j                  |      k(  sJ |t        j                  |      k(  sJ |t        j                  |      k7  sJ |
t        j                  |      k7  sJ |t        j                  |      k7  sJ y)z1Test mouse panning using the middle mouse button.c                 $    | |z   dz  }|| z
  }||fS )z+Convert min/max limits to center and range.r1   r  )dmindmaxcenterrange_s       r&   convert_limztest_pan.<locals>.convert_lim1  s#    +"v~r(   r   r   r   )buttonxdataydatar/   N)r5   rT   rU   r+  r   r   rV  rW  rX  _button_pressr   r   MIDDLE_on_mover  approx)rq  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_panr  .  s    
	!	!T	!	2BJJq!QII%r}}7Ix%r}}7Ix%r}}7Ix 2k00CEKK2k00CE $R]]_5Hg#R]]_5Hg#R]]_5Hg fmmH----fmmH----fmmH---- v}}Y////v}}Y////v}}Y////r(   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   r0   r/   o   r   r   r   r   )rt   r$  r   )r7   r8   r;   r9   r<   r|   TrU   r+  r   r   changed)
r#   r$   rQ   rR   rS   rt   r   sc_testr   sc_refs
             r&   test_scalarmap_updater  T  s     hhY..1a1C131a1C131a1C1E F G IIJ Aq! 	
AA ""34"8GooaAbyoAGOOOO    6F^^Aq!qBY^?Fr(   c                      t        j                         } | j                  dd      }|d   j                  dddd      }|d   j                  ddddd      }y )Nr/   r1   r   r   r   other)r   rO   )r5   rT   
subfiguresrU   )rE   sfr%   s      r&   test_subfigure_simpler  j  sY    
**,C	1	B	A		1at		4B	A		1at7		CBr(   computed_zorder)baseline_imagesr   r   c            
      <   t        j                         } | j                  dd      }| j                  dd      }d|_        d}||fD ]  }t	        j
                  |gddd	
      }|j                  |       |j                  ddddd       |j                  ddddd       |j                  d       |j                  d       |j                  d        | j                  dd      }| j                  dd      }d|_        d}t        j                  | |f| |f      \  }	}
t        j                  d      }d}t        j                  | |fd|f      \  }}||z  }t        j                  | |f| df      \  }}||z  }d}d}t        j                  ddt        j                   z  |      }|t        j"                  |      z  |t        j$                  |      z  ||z  t        j$                  |      z  }}}||fD ]  }|j'                  |||dddd       |j                  ||dk     ||dk     ||dk     ddd d!       |j'                  |	|
|dddd	       |j                  |t        j$                  |      z  |t        j"                  |      z  t        j                  |      dddd!       |j'                  |||dddd"       |j                  ||dkD     ||dkD     ||dkD     ddd d#!       |j)                  d$d%d&       |j+                  d'        y )(N   r   r      F)ra   )r   r0   r   )r0   r0   r   )r0   r   r   whiteblackr/   )ri  rj  zorder)r1   r1   )r   r4   r   r1   )rt   r  )r3   r3   )r/   r3   rs   )r   r  )r   rh        r   r   r   r   r   r   )rz   r{   r  r  r0   z--r   )r]  	linestylerz   r  r3   r4   rr   r   rd   rT  )r5   rT   rU   r  r   r  r  r  r+  r   r   r   r7   r   r  r   r   r  r   r  rj   r  )rE   r  r	  cornersr%   triax3ax4dimr   r   r   angleX2Y2Z2X3Y3Z3rG   rL  thrQ   rR   rS   s                            r&   test_computed_zorderr  r  sD    **,C
//#$/
/C
//#$/
/CC ;GCj $$gY0707,-/ 	C  	%: 	

666U2
>
H
H
H" //#$/
/C
//#$/
/CC
C;;c{cT3K0DAq
AE[[3$q#h/FB	eB[[3$tQi0FB	eB	AA	QBEE	1	%B"&&*nq266":~uqy266":/E!qACj #
B$!"#!	 	 	#
 	!a%!AE(Aa!eH	 	 	 	1a#!"# 	 	 	" 	BFF2JBFF2J	 	 	 	B$!"# 	 	 	" 	!a%!AE(Aa!eH 	 	 	"3Q/
G#r(   c                  0   t        j                         } | j                  d      }t        j                  d      }|j                  |t        j                  |             | j                  j                          |j                  dd      dk(  sJ |j                  dd       | j                  j                          |j                  dd      d	k(  sJ |j                          | j                  j                          |j                  dd      dk(  sJ y )
Nr   r   rs   r   u   x=1.8066, y=1.0367, z=−0.0553rq   rR   )rg   vertical_axisu"   x=9.1651, y=−0.9215, z=−0.0359)r5   rT   rU   r7   r|   r  r   r   r   format_coordrj   rE   r%   rQ   s      r&   test_format_coordr    s    
**,C	D	)B
		"AGGArvvayJJOO??1a $EEEELLbL,JJOO??1a $HHHHLLNJJOO??1a $EEEEr(   c                  "   t        j                         } | j                  d      }t        j                  d      }|j                  |t        j                  |             | j                  j                          |j                         dk(  sJ y )Nr   r   rs   )FTF)
r5   rT   rU   r7   r|   r  r   r   r   get_axis_positionr  s      r&   test_get_axis_positionr    sf    
**,C	D	)B
		"AGGArvvayJJOO!%9999r(   c                     t        j                         } | j                  d      }|j                  d       |j                         dk(  sJ |j                  ddd       |j                         dk(  sJ |j                  d	       |j                         d
k(  sJ |j                  d       |j                         dk(  sJ |j                  d       |j                         dk(  sJ y )Nr   r   r  )r  r  r  r   r>  )r   r  r>  r   )rQ   )r   r  r>  )rR   )r   r   r>  rS   )r   r   r   )r5   rT   rU   r  r\   s     r&   test_marginsr    s    
**,C	D	)BJJsO::<?***JJsC::<?***JJJO::<=(((JJJ::<=(((JJJO::<;&&&r(   zerr, args, kwargs, match)r   z!margin must be greater than -0\.5)r/   r   r/   )r/   r/   r   rQ   r   rR   rS   )r/   z'Cannot pass both positional and keyword)rQ   rR   )r/   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)Nr  r   r   )r  r  r5   rT   rU   r  )errr_  r   r  rE   r%   s         r&   test_margins_errorsr    sU      
s%	( $jjl___-

D#F#$ $ $s   9AA#c                 \   |j                  d      }t        ddd      }t        j                  |d       |j	                  |       |j                         dk(  sJ | j                  d      }t        j                  dddd      }|j	                  |       |j                         dk(  sJ y )Nr   r   r   zFoo bar $\int$r/   r  r  )rU   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1r(   c                      t        j                         } | j                  d      }|j                  dgdggdgdggdgdgg       y )Nr   r   r   r/   )r5   rT   rU   r  r\   s     r&   test_draw_single_lines_from_Nx1r    sE    
**,C	D	)BGGaS1#J!qc
aS1#J/r(   c                 .   |j                  d      }t        j                         }t        |      }t	        j
                  |dd       |j                  |       | j                  d      }t	        j                  |dd      }|j                  |       y )Nr   r   )r   r   r?  r/   r   rR   rS   rx   ry  )rU   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$r(   zscatter_spiral.png)r  r   r   c                  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 )
Nr   r   r   r1   r      r/   r0   rr  )r5   rT   rU   r7   r   r   r+  r   r  r   r   )rE   r%   r  scs       r&   test_scatter_spiralr  &  s     **,C	D	)B	QBEE	As	+B	BFF2Jr
B1rAv:"'	JB JJOOr(   c                  :   t         j                  ddddddf   \  } }t        j                  |      dz  t        j                  |       dz  z
  }t	        j
                         }|j                  dd      }|j                  || |d	
      }|j                          y Nr/   rs   y              Y@r3   r1   r  r   r   hot)r   )	r7   r  r  r   r5   rT   rU   r  r  rR   rQ   r  rE   r%   rG   s         r&   #test_Poly3DCollection_get_facecolorr  3       88AbIqDy()DAq	a"&&)q.	(B
**,C		.B
1bu-AOOr(   c                  :   t         j                  ddddddf   \  } }t        j                  |      dz  t        j                  |       dz  z
  }t	        j
                         }|j                  dd      }|j                  || |d	
      }|j                          y r  )	r7   r  r  r   r5   rT   rU   r  get_edgecolorr  s         r&   #test_Poly3DCollection_get_edgecolorr  >  r  r(   zDvertical_axis, proj_expected, axis_lines_expected, tickdirs_expected)r  #k$I?r  ._x%I)r  r  (m?@mۿ)r  r  r  g      $)#k$Ir  r  W$%@g˗ì?g2m 3?g溾IgMg2m 3gM?)r/   r   r   )r  r  r  r  )r  r  r  r  )r  r  r  r  g˗ìg溾I?)r1   r1   r   )r  r  r  r  )r  r  r  r  )r  r  r  r  )r/   r1   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!                         }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/   r   r   r   )re   rf   rg   r  )rtolN)r5   subplotrj   rT   r   r   get_projr7   r   rt  rA   	get_xaxis	get_yaxis	get_zaxisr)  get_data_get_tickdirr   )r  proj_expectedaxis_lines_expectedtickdirs_expectedr  r%   proj_actualrL   r  axis_line_expectedaxis_line_actualtickdir_expectedtickdir_actuals                r&   test_view_init_vertical_axisr  I  s   H D	Q1	.BLLaaa}LEII ++-KJJ}kEbllnbllnbllnMN 
H40399--/


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


%%&6G
Hr(   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/   r   r   )r   r   r   g?rr   rs   ro  )r   heightr  theta1theta2r   rS   r  )r5   r  mpatchArcr  r   r  )r%   rW  s     r&   test_arc_pathpatchr    sP     
Q1	.B

:SBs	4ALLO	Q!#.r(   )	functoolsr9   r  mpl_toolkits.mplot3dr   r   r   r   
matplotlibr   matplotlib.backend_basesr   r   r	   r   r
   r  matplotlib.testing.decoratorsr   r   matplotlib.testing.widgetsr   matplotlib.collectionsr   r   matplotlib.patchesr   r   matplotlib.pathr   matplotlib.textr   matplotlib.pyplotpyplotr5   numpyr7   partialr  r'   rM   r]   rm   r   r   r   r   r   r   r   r   r   markparametrizer   r   r   r  r
  r!  r&  r-  r2  r4  r:  rI  rm  rt  rw  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,  r8  r;  r>  rC  rM  r\  rd  rk  rq  rv  r  r  r  r  r  r  r  r  r  r  nanr  r  r  r  r  r  r   r#  r0  r8  rB  rR  r[  rc  rj  r  r   contextr  r  r  r  r  r  r  tupler  r  r  r  r  r  r  r  r  r  r  r(   r&   <module>r
     s      > >  0  ; O 1 A 0       +**$i9  ( )
 U;" <""
J 345 6( &J 'J	/ +,- .& ./0	 1	H6 )*	 +	 123 4 )*+	 ,	 ./0 1 )VY,?-2L,A-2L,A,C D ( )D0 )*5 6 ( ) ( ) +,- .. (	* )	* )*	. +	. ./0& 1& 2344 54 (
- )
- (9 )9( e}5(3C ) 63Cl #s,(, ) -,& (2 )2. ./U;$ <$ )*- +-" /01
 2
 /01 24 789 : E: ;. (H )H0 )u59 69" /0d;? <?" *+,5 -5 5674 84 5676 8698 LNMNM (I )I ./0I 1I"
D ( )6% 678 9 567 8$ 89: ;6 9:; <2 ./UC- D-& )*> ? -.EB C	!	," /01 2* 567 86G	/ 123 40	(9 1!45: 6 2:(2 23G5 H5 +,%@ A /01 2 266266"23+ . & 4&w4 w4tP$ (< )<#(." ($A )$AN (@ )@ $%W5- 6- 456" 7"" )*+ , <.""8 )*':! ;!D3 	)#0L 9(@ ) @(D #4"54#W&N&NbF":' 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 #6"7"!#/#/r(   