o
    l’×iò ã                   @   s°  d dl Z d dlZd dlZd dlmZmZmZmZ d dlZ	d dl
mZmZmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZ d dlmZmZ d d	lmZmZ d d
lmZ d dl m!Z! d dl"m#Z$ d dl%Z&e j'edddZ(dd„ Z)edgddd„ ƒZ*e(dgdddd„ ƒZ+e(dgdddd„ ƒZ,dd„ Z-e(dgƒd d!„ ƒZ.e(d"gƒd#d$„ ƒZ/d%d&„ Z0e(d'gƒd(d)„ ƒZ1e(d*gƒd+d,„ ƒZ2d-d.„ Z3e(d/gƒd0d1„ ƒZ4e(d2gƒd3d4„ ƒZ5e(d5gƒd6d7„ ƒZ6e(d8gƒd9d:„ ƒZ7ej8 9d;d<g d=¢gd>g d?¢gd@g dA¢gg¡edgddBdC„ ƒƒZ:e(dDgdEdFdGdH„ ƒZ;dIdJ„ Z<e(dKgƒdLdM„ ƒZ=edgddNdO„ ƒZ>dPdQ„ Z?e(dRgƒdSdT„ ƒZ@edgddUdV„ ƒZAe(dWgƒdXdY„ ƒZBe(dZgƒd[d\„ ƒZCe(d]gƒd^d_„ ƒZDedgdd`da„ ƒZEedgddbdc„ ƒZFej8 9ddddg¡edgddedf„ ƒƒZGej8 9dgdhdig¡edgddjdk„ ƒƒZHedgddldm„ ƒZIe(dngdodFdpdq„ ƒZJe(drgƒdsdt„ ƒZKe(dugƒdvdw„ ƒZLe(dxgƒdydz„ ƒZMedgdd{d|„ ƒZNe(d}gƒd~d„ ƒZOe(d€gdddd‚„ ƒZPedgddƒd„„ ƒZQe(d…gd†dFd‡dˆ„ ƒZRe(d‰gdŠdFd‹dŒ„ ƒZSe(dgƒdŽd„ ƒZTe(dgƒd‘d’„ ƒZUe(d“gƒd”d•„ ƒZVd–d—„ ZWd˜d™„ ZXe(g dš¢ƒd›dœ„ ƒZYedgdddž„ ƒZZe(dŸgƒd d¡„ ƒZ[d¢d£„ Z\edgdd¤d¥„ ƒZ]d¦d§„ Z^e(d¨gƒd©dª„ ƒZ_d«d¬„ Z`e(d­gƒd®d¯„ ƒZae(d°gƒd±d²„ ƒZbe(d³gƒd´dµ„ ƒZce(d¶gddd·d¸„ ƒZde(d¹gdddºd»„ ƒZee(d¼gddd½d¾„ ƒZfd¿dÀ„ ZgdÁdÂ„ ZhdÃdÄ„ Zid>dÆdÇ„Zje(dÈgƒdÉdÊ„ ƒZke(dËgƒdÌdÍ„ ƒZldÎdÏ„ ZmdÐdÑ„ Zne(dÒgƒdÓdÔ„ ƒZodÕdÖ„ Zpd×dØ„ Zqej8 9dÙdÚ¡ej8 9dÛdÜ¡dÝdÞ„ ƒƒZrdßdà„ Zse(dágdddâdã„ ƒZte(dägdddådæ„ ƒZue(dçgƒdèdé„ ƒZvej8 9dêe&jwe&jxg¡ej8 9dëg dì¢¡dídî„ ƒƒZyG dïdð„ dðƒZzdñdò„ Z{edgddódô„ ƒZ|dõdö„ Z}d÷dø„ Z~edgddùdú„ ƒZedgddûdü„ ƒZ€edýgdþdÿd d„ ƒZe(dgƒdd„ ƒZ‚e(dgƒdd„ ƒZƒedgdþd	d
dd„ ƒZ„edgdþdÿdd„ ƒZ…dd„ Z†dd„ Z‡dd„ Zˆdd„ Z‰dd„ ZŠej8 9ddej‹ddfdej‹ddfdej‹dd fdejŒdd!fd"ej‹dd#fd"ej‹dd$fd"ej‹dd%fg¡d&d'„ ƒZe	jŽ d¡edgdd(d)„ ƒƒZd*d+„ Z‘ed,gddgd-d.d/d0„ ƒZ’d1d2„ Z“d3d4„ Z”d5d6„ Z•ej8 9d7e–d8i d9fe–d:i d9fe–d;i d9fe–e—ƒ dd<id9fe–e—ƒ dd<id9fe–e—ƒ d=d<id9fe˜d>ddÅid?fe˜d>dÅdÅdÅdÚœd?fe˜d>dÅdÅd@œd?fe˜dAi dBff
¡dCdD„ ƒZ™edgddEdF„ ƒZšdGdH„ Z›edgddIdJ„ ƒZœedKgdddLdMdN„ ƒZdOdP„ ZždQdR„ ZŸej8 9dSd=g dT¢g dU¢g dV¢g dW¢gdXdYgdZd[gfd\dYgd[d[gfd\d\gd[d]gfgg d^¢fdg d_¢g d`¢g dV¢g da¢gd\dYgd]d]gfdYdYgd[d]gfdbd\gdcd]gfgg dd¢fdg de¢g df¢g dV¢g dg¢gd\d\gd]d[gfdYdXgd]dcgfdYd\gd]d]gfgg dh¢fg¡didj„ ƒZ edkgdddLdldm„ ƒZ¡edngddþdLdodp„ ƒZ¢edgddqdr„ ƒZ£dsdt„ Z¤dS (u  é    N)ÚAxes3DÚaxes3dÚproj3dÚart3d)ÚMouseButtonÚ
MouseEventÚNavigationToolbar2)Úcm)ÚcolorsÚpatches)Úimage_comparisonÚcheck_figures_equal)Ú
mock_event)ÚLineCollectionÚPolyCollection)ÚCircleÚ	PathPatch)ÚPath)ÚTextTÚdefault)Úremove_textÚstylec              
   C   s‚   ddg}t  t tt  |||¡ƒ¡d¡}|D ](\}}t t || ¡¡|d |d  kr>| jt	|t |¡ |t |¡ ƒŽ  qd S )Nr   é   é   )
Ú	itertoolsÚcombinationsÚnpÚarrayÚlistÚproductÚsumÚabsÚplot3DÚzip)ÚaxÚscaleÚrÚptsÚstartÚend© r*   úd/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/mpl_toolkits/mplot3d/tests/test_axes3d.pyÚplot_cuboid   s    $$€þr,   Úpng)Ú
extensionsc                 C   s    | j tddd}| d¡ d S )NÚ3d©Ú
projection©Ú
subplot_kwF)ÚsubplotsÚdictÚset_visible©Úfig_testÚfig_refr$   r*   r*   r+   Útest_invisible_axes$   s   r:   zaspects.pngF)r   c                  C   s°   d} t jddddid\}}| ¡ dd… D ]
}t|g d	¢d
 qt|d d g d¢d
 t| ¡ ƒD ]\}}| | | ¡ | d¡ |j| | dd q3|d d  d¡ d S )N)ÚautoÚequalÚequalxyÚequalyzÚequalxzr<   r   é   r1   r/   r2   r   éÿÿÿÿ)r   r   é   ©r%   r   ©r   r   r   ©r@   é   rB   Údatalim©Ú
adjustablezequal (cube))Úpltr4   Úflattenr,   Ú	enumerateÚ	set_titleÚset_box_aspectÚ
set_aspect)ÚaspectsÚ_Úaxsr$   Úir*   r*   r+   Útest_aspects*   s   
rT   zaspects_adjust_box.pngc                  C   sh   d} t jdt| ƒddidd\}}t|ƒD ]\}}t|g d¢d | | | ¡ |j| | d	d
 qd S )N)r;   r<   r=   r>   r?   r   r1   r/   )é   r@   )r3   Úfigsize)rF   r@   rB   rC   ÚboxrH   )rJ   r4   ÚlenrL   r,   rM   rO   )rP   ÚfigrR   rS   r$   r*   r*   r+   Útest_aspects_adjust_box;   s   
ÿýrZ   c                  C   sZ   t  ¡ } | jdd}| d¡ | d¡ | d¡ | d¡ | d¡ t|ƒdks+J ‚d S )	Nr/   r0   ÚlabelÚtitleÚxÚyÚzzV<Axes3D: label='label', title={'center': 'title'}, xlabel='x', ylabel='y', zlabel='z'>)	rJ   ÚfigureÚadd_subplotÚ	set_labelrM   Ú
set_xlabelÚ
set_ylabelÚ
set_zlabelÚrepr©rY   r$   r*   r*   r+   Útest_axes3d_reprG   s   




ÿrh   zaxes3d_primary_views.pngc                  C   s   g d¢} t jddddid\}}t|jƒD ],\}}| d¡ | d¡ | d	¡ | d
¡ |j| | d | | d | | d d qt  	¡  d S )N))éZ   é¦ÿÿÿr   )r   rj   r   ©r   r   r   )rj   ri   r   )r   ri   r   )r   é´   r   r   r@   r1   r/   r2   r]   r^   r_   Úorthor   r   ©ÚelevÚazimÚroll)
rJ   r4   rL   Úflatrc   rd   re   Úset_proj_typeÚ	view_initÚtight_layout)ÚviewsrY   rR   rS   r$   r*   r*   r+   Útest_axes3d_primary_viewsT   s   



*rw   z	bar3d.pngc               
   C   sv   t  ¡ } | jdd}tg d¢g d¢ƒD ]%\}}t d¡}t d¡}|gt|ƒ }d|d< |j|||dd	|d
d qd S )Nr/   r0   )r&   ÚgÚbr^   )é   é   é
   r   r{   Úcr   r^   Úedgeçš™™™™™é?)ÚzsÚzdirÚalignÚcolorÚalpha)rJ   r`   ra   r#   r   ÚarangerX   Úbar)rY   r$   r}   r_   ÚxsÚysÚcsr*   r*   r+   Ú
test_bar3di   s   

ûrŠ   c               
   C   s\   t  ¡ } | jdd}dD ]}t t|ƒ¡}t |¡}t |¡}|j|||ddd|d qd S )Nr/   r0   )ÚredÚgreenÚblueÚyellowr   ©rƒ   )rJ   r`   ra   r   r…   rX   Ú
zeros_likeÚbar3d)rY   r$   r}   r‡   rˆ   r€   r*   r*   r+   Útest_bar3d_colorsu   s   

úr’   zbar3d_shaded.pngc               
   C   sÒ   t  d¡} t  d¡}t  | |¡\}}| ¡ | ¡ }}|| d }g d¢}tjt dt|ƒ ¡d}|jdt|ƒt	ddd}t
||ƒD ]\}\}	}
}|j|||d	 dd|d
d |j|	|
|d qD|j ¡  d S )NrF   rB   r   ))rz   iÄÿÿÿr   )rz   rz   rz   )éâÿÿÿrz   rj   )é,  r“   r   ©rV   r/   r0   r2   r   T©Úshadern   )r   r…   ÚmeshgridÚravelrJ   r`   Ú	figaspectrX   r4   r5   r#   r‘   rt   ÚcanvasÚdraw)r]   r^   Úx2dÚy2dr_   rv   rY   rR   r$   ro   rp   rq   r*   r*   r+   Útest_bar3d_shaded   s   

þrŸ   zbar3d_notshaded.pngc               	   C   s|   t  ¡ } | jdd}t d¡}t d¡}t ||¡\}}| ¡ | ¡ }}|| }|j|||d dd|dd | j 	¡  d S )	Nr/   r0   rF   rB   r   r   Fr–   )
rJ   r`   ra   r   r…   r˜   r™   r‘   r›   rœ   )rY   r$   r]   r^   r   rž   r_   r*   r*   r+   Útest_bar3d_notshaded•   s   

r    c            
         s¾   t  ¡ } | jddddd}tjddd}d\}}|| ‰ t t |¡t |¡¡\}}| ¡ }| ¡ }|| }‡ fdd	„t	ˆ ƒD ƒ}|j
||ddd||d
|d	}	tj ||	jdd d… d¡ d S )Nr   r/   r0   r   ri   )ÚazdegÚaltdeg)r@   rF   c                    s   g | ]	}t  |ˆ  ¡‘qS r*   )r	   Úcoolwarm)Ú.0rS   ©Úarear*   r+   Ú
<listcomp>°   ó    z*test_bar3d_lightsource.<locals>.<listcomp>T)	r]   r^   r_   ÚdxÚdyÚdzrƒ   r—   Úlightsourceé   rF   )rJ   r`   ra   ÚmcolorsÚLightSourcer   r˜   r…   r™   Úranger‘   ÚtestingÚassert_array_max_ulpÚ_facecolor3d)
rY   r$   ÚlsÚlengthÚwidthr]   r^   r«   rƒ   Ú
collectionr*   r¥   r+   Útest_bar3d_lightsource¢   s   
þ r¸   zcontour3d.pngc                  C   ó”   t  ¡ } | jdd}t d¡\}}}|j|||ddtjd |j|||ddtjd |j|||d	d
tjd | dd
¡ | 	dd
¡ | 
dd¡ d S ©Nr/   r0   çš™™™™™©?r_   éœÿÿÿ)r   ÚoffsetÚcmapr]   éØÿÿÿr^   é(   éd   ©rJ   r`   ra   r   Úget_test_dataÚcontourr	   r£   Úset_xlimÚset_ylimÚset_zlim©rY   r$   ÚXÚYÚZr*   r*   r+   Útest_contour3d½   ó   rÌ   zcontour3d_extend3d.pngc               	   C   sf   t  ¡ } | jdd}t d¡\}}}|j|||ddtjdd | dd	¡ | 	d
d¡ | 
dd¡ d S )Nr/   r0   r»   r_   r¼   T)r   r½   r¾   Úextend3dr“   rz   éìÿÿÿrÀ   é°ÿÿÿéP   rÂ   rÈ   r*   r*   r+   Útest_contour3d_extend3dÊ   s   rÒ   zcontourf3d.pngc                  C   r¹   rº   )rJ   r`   ra   r   rÃ   Úcontourfr	   r£   rÅ   rÆ   rÇ   rÈ   r*   r*   r+   Útest_contourf3dÕ   rÍ   rÔ   zcontourf3d_fill.pngc                  C   s    t  ¡ } | jdd}t t ddd¡t ddd¡¡\}}| dd¡}d|d d d…d d d…f< |j|||dd	dgtj	d
 | 
dd¡ | dd¡ | dd¡ d S )Nr/   r0   éþÿÿÿr   ç      Ð?r   çš™™™™™¹?rB   çš™™™™™¹¿)r½   Úlevelsr¾   rA   r   )rJ   r`   ra   r   r˜   r…   ÚcliprÓ   r	   r£   rÅ   rÆ   rÇ   rÈ   r*   r*   r+   Útest_contourf3d_fillâ   s   $rÛ   zextend, levelsÚboth)r   rF   r­   Úmin)r   rF   r­   é   Úmax)r   r   rF   r­   c                 C   sò   t  t  ddd¡t  ddd¡¡\}}|d |d  }tjd  ¡ }| |dƒ¡ | |dƒ¡ dd|d	œ}|jd
d}	|	j	|||fdg d¢i|¤Ž | jd
d}
|
j	||||fd|i|¤Ž |	|
fD ]}| 
dd¡ | dd¡ | dd¡ qbd S )NrÕ   r   rÖ   Úviridisr   éÿ   r   é   )ÚvminÚvmaxr¾   r/   r0   rÙ   )r   r   rF   r­   rÞ   Úextendéöÿÿÿr|   )r   r˜   r…   ÚmplÚ	colormapsÚcopyÚ	set_underÚset_overra   rÓ   rÅ   rÆ   rÇ   )r8   r9   rå   rÙ   rÉ   rÊ   rË   r¾   ÚkwargsÚax_refÚax_testr$   r*   r*   r+   Útest_contourf3d_extendñ   s   $ýrï   ztricontour.pngç{®Gáz”?)Útolc                  C   sŠ   t  ¡ } tj d¡ tj d¡d }tj d¡d }|d |d   }| jddddd}| |||¡ | jddddd}| |||¡ d S )Ni!N,éè  ç      à?r   r   r/   r0   )	rJ   r`   r   ÚrandomÚseedÚrandra   Ú
tricontourÚtricontourf)rY   r]   r^   r_   r$   r*   r*   r+   Útest_tricontour  s   rù   c                  C   sb   t  ¡ } | jdd}d\}}t dd|¡}t dd|¡}tj dd||g¡}| |||dg¡ d S )	Nr/   r0   )rz   r{   ræ   r|   r   r   ró   )rJ   r`   ra   r   Úlinspacerô   ÚrandintrÄ   )rY   r$   ÚnxÚnyr]   r^   r_   r*   r*   r+   Útest_contour3d_1d_input  s   rþ   zlines3d.pngc                  C   sv   t  ¡ } | jdd}t dtj dtj d¡}t ddd¡}|d d }|t |¡ }|t |¡ }| |||¡ d S )	Nr/   r0   éüÿÿÿrF   rÁ   rÕ   r   r   )	rJ   r`   ra   r   rú   ÚpiÚsinÚcosÚplot)rY   r$   Úthetar_   r&   r]   r^   r*   r*   r+   Útest_lines3d'  s   r  c                 C   s<   | j dd}| dgdgd¡ |j dd}| ddd¡ d S )Nr/   r0   r   Úo©ra   r  ©r8   r9   Úax1Úax2r*   r*   r+   Útest_plot_scalar3  s   r  c                  C   s|  t jtdd t dg g ¡ W d   ƒ n1 sw   Y  t jtdd t g dg ¡ W d   ƒ n1 s7w   Y  t jtdd t g g d¡ W d   ƒ n1 sUw   Y  t g g g ¡} t jtdd |  dg g ¡ W d   ƒ n1 szw   Y  t jtdd |  g dg ¡ W d   ƒ n1 s˜w   Y  t jtdd |  g g d¡ W d   ƒ d S 1 s·w   Y  d S )Nz	x must be©Úmatchr   z	y must bez	z must be)ÚpytestÚraisesÚRuntimeErrorr   ÚLine3DÚset_data_3d)Úliner*   r*   r+   Útest_invalid_line_data;  s&   ÿÿÿÿÿ"ÿr  zmixedsubplot.pngc            	   	   C   sâ   dd„ } t  ddd¡}t  ddd¡}tjt d¡d}| d	d
d
¡}|j|| |ƒd|| |ƒddd | d¡ |jd	d
d	dd}t  t  ddd¡t  ddd¡¡\}}t  	||¡}t  
|¡}|j|||ddddd | dd
¡ d S )Nc                 S   s    t  dt j |  ¡t  |  ¡ S )Nr   )r   r  r   Úexp)Útr*   r*   r+   ÚfN  s    ztest_mixedsubplots.<locals>.fç        ç      @r×   rð   ç       @r•   r   r   Úbozk--rŒ   )ÚmarkerfacecolorTr/   r0   éûÿÿÿrB   rÖ   rÀ   r   F)ÚrcountÚccountÚ	linewidthÚantialiasedrA   )r   r…   rJ   r`   rš   ra   r  Úgridr˜   Úhypotr  Úplot_surfaceÚ
set_zlim3d)	r  Út1Út2rY   r$   rÉ   rÊ   ÚRrË   r*   r*   r+   Útest_mixedsubplotsL  s    
$
ÿr)  c                 C   sP   | j dd}|jddddd |  ¡  |j dd}| ¡  |jddddd d S )Nr/   r0   ró   zsome string©Ús)ra   Útextru   r  r*   r*   r+   Útest_tight_layout_textd  s   r-  zscatter3d.pngc                  C   s‚   t  ¡ } | jdd}|jt d¡t d¡t d¡ddd t dd¡ } }}|j|||dd	d d
|d< |jg g g ddd d S )Nr/   r0   r|   r&   r  )r}   Úmarkerr{   ry   ú^r   rA   rÉ   ©rJ   r`   ra   Úscatterr   r…   ©rY   r$   r]   r^   r_   r*   r*   r+   Útest_scatter3dq  s   ÿr3  zscatter3d_color.pngc                  C   s”   t  ¡ } | jdd}|jt d¡t d¡t d¡dddd |jt d¡t d¡t d¡dddd |jt dd¡t dd¡t dd¡d	d
d d S )Nr/   r0   r|   r&   Únoner  )Ú	facecolorÚ	edgecolorr.  r{   ry   r+  )rƒ   r.  r0  rg   r*   r*   r+   Útest_scatter3d_color~  s   ÿÿ"
ÿr7  zscatter3d_linewidth.pngc                  C   sD   t  ¡ } | jdd}|jt d¡t d¡t d¡dt d¡d d S )Nr/   r0   r|   r  )r.  r   r0  rg   r*   r*   r+   Útest_scatter3d_linewidthŽ  s
   

ÿr8  c                 C   s|   |j dd}|jt d¡t d¡t d¡dd}| t d¡¡ | j dd}|jt d¡t d¡t d¡dt d¡d d S )Nr/   r0   r|   r  ©r.  )r.  Ú
linewidths)ra   r1  r   r…   Úset_linewidths©r9   r8   rî   r}   rí   r*   r*   r+   Ú%test_scatter3d_linewidth_modification˜  s   ÿ
ÿr=  c                 C   sÜ   |j dd}|jt d¡t d¡t d¡dd}| d¡ | d¡ | dd	gd
 ¡ | ¡ s1J ‚| d¡ | ¡ r<J ‚| 	t 
dd¡¡ | d¡ | j dd}|jt d¡t d¡t d¡ddddd	gd
 dddd
 d S )Nr/   r0   r|   r  r9  ÚC1ÚC2ç333333Ó?çffffffæ?rB   FéK   r@   )r.  r5  r6  r„   Ú
depthshader+  r:  )ra   r1  r   r…   Úset_facecolorÚset_edgecolorÚ	set_alphaÚget_depthshadeÚset_depthshadeÚ	set_sizesÚfullr;  r<  r*   r*   r+   Útest_scatter3d_modification¦  s"   ÿ




þrK  rC  c                 C   s0  t jdd…dd…f \}}t  |j¡ |j¡}t  |jd¡}d|ddd…ddd…f< d|ddd…ddd…f< t  |jd¡}d	|dd
…dd
…f< d|dd…dd…f< d|dd…dd…f< t  |jd¡}d|dd
…dd
…f< d|d
d…dd
…f< d|d
d…d
d…f< t  |jd¡}	d
|	ddd…ddd…f< d
|	ddd…ddd…f< dd„ |||||||	fD ƒ\}}}}}}}	| jdd}
dd„ ||||	fD ƒ}tj	|Ž D ]7\}}}}||k||kB ||kB |	|kB }t j
j||td}t  |t|j ƒ¡}|
j|||||||d|d	 qÊ|jdd}|j|||||||	d|d	 dS )z1Test that marker properties are correctly sorted.Nr|   é   rÁ   r   r   r   ÚC0r>  rB   r?  r­   rF   ÚC3ÚC4ÚC5ÚC6é	   ÚC7c                 S   s   g | ]}|  ¡ ‘qS r*   )rK   ©r¤   Úar*   r*   r+   r§   Õ  s    ÿÿz*test_scatter3d_sorting.<locals>.<listcomp>r/   r0   c                 s   s    | ]}t  |¡V  qd S )N)r   ÚuniquerT  r*   r*   r+   Ú	<genexpr>Û  s   € z)test_scatter3d_sorting.<locals>.<genexpr>©Údtype)r+  ÚfcÚecÚlwr„   rC  )r   Úmgridr…   ÚsizeÚreshapeÚshaperJ  ra   r   r   ÚmaÚmasked_arrayÚfloatÚrepeatr    Úmaskr1  )r9   r8   rC  r^   r]   r_   ÚsizesÚ
facecolorsÚ
edgecolorsr:  rí   Úsetsr+  rZ  r[  r\  Úsubsetrî   r*   r*   r+   Útest_scatter3d_sorting»  sN   þÿþýÿÿ
ÿrk  rp   éÎÿÿÿé‚   c              	   C   s¬   ddg}ddg}ddg}ddg}| j dd}|j|||d|d	 |jd|dd
 |j dd}|j|ddd… |ddd… |ddd… d|ddd… d	 |jd|dd
 dS )zÕ
    Test that the draw order does not depend on the data point order.

    For the given viewing angle at azim=-50, the yellow marker should be in
    front. For azim=130, the blue marker should be in front.
    rA   r   r   ry   r^   r/   r0   é¬  ©r+  r}   rn   N)ra   r1  rt   ©r8   r9   rp   r]   r^   r_   rƒ   r$   r*   r*   r+   Ú$test_marker_draw_order_data_reversedó  s   	<rq  c              	   C   s¦   d}ddg}ddg}ddg}ddg}| j dd}| ¡  |j|||d	|d
 |jd|dd |j dd}| ¡  |j|||d	|ddd… d
 |jd|d dd dS )z­
    Test that the draw order changes with the direction.

    If we rotate *azim* by 180 degrees and exchange the colors, the plot
    plot should look the same again.
    rm  rA   r   r   ry   r^   r/   r0   rn  ro  rn   Nrl   )ra   Úset_axis_offr1  rt   rp  r*   r*   r+   Ú#test_marker_draw_order_view_rotated  s   rs  zplot_3d_from_2d.pngg¸…ëQ¸Ž?c                  C   sT   t  ¡ } | jdd}t dd¡}t dd¡}|j||ddd |j||ddd d S )	Nr/   r0   r   rB   r|   r]   ©r€   r   r^   )rJ   r`   ra   r   r…   r  )rY   r$   r‡   rˆ   r*   r*   r+   Útest_plot_3d_from_2d   s   ru  zsurface3d.pngc               
   C   sœ   dt jd< t  ¡ } | jdd}t ddd¡}t ddd¡}t ||¡\}}t ||¡}t |¡}|j	|||ddt
jd	dd
}| dd¡ | j|ddd d S )NFzpcolormesh.snapr/   r0   r  rB   rÖ   rÀ   r   )r  r  r¾   r\  r!  ç)\Âõ(ð¿ç)\Âõ(ð?ró   )ÚshrinkÚaspect)rJ   ÚrcParamsr`   ra   r   r…   r˜   r#  r  r$  r	   r£   rÇ   Úcolorbar)rY   r$   rÉ   rÊ   r(  rË   Úsurfr*   r*   r+   Útest_surface3d*  s   

ÿr}  zsurface3d_shaded.pngc               
   C   sŽ   t  ¡ } | jdd}t ddd¡}t ddd¡}t ||¡\}}t |d |d  ¡}t |¡}|j|||ddg d¢dd	d
 | 	dd¡ d S )Nr/   r0   r  rB   rÖ   r   )rÖ   r   rÖ   r   F)ÚrstrideÚcstriderƒ   r\  r!  rv  rw  )
rJ   r`   ra   r   r…   r˜   Úsqrtr  r$  rÇ   )rY   r$   rÉ   rÊ   r(  rË   r*   r*   r+   Útest_surface3d_shaded<  s   

ÿr  zsurface3d_masked.pngc                  C   sÈ   t  ¡ } | jdd}g d¢}g d¢}t ||¡\}}t g d¢g d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g¡}tj |d¡}tj	| 
¡ | ¡ d}tjd ||ƒƒ}|j||||d | ddd¡ d S )Nr/   r0   )r   r   r@   rF   rB   r­   râ   rÞ   rR  r|   rU   )r   r   r@   rF   rB   r­   râ   rÞ   )rA   r   r   r   r   r   r   r   r   r   r   )rA   r   r   r@   rF   rF   rF   r@   r   r   r   )rA   ç      ð¿rF   rB   r­   rÞ   r­   rB   rF   r@   r‚  )rA   r‚  râ   rÞ   rU   é   rU   rÞ   râ   r‚  r‚  )rA   r‚  rÞ   rR  r|   é   r|   rR  r|   râ   r‚  )rA   r‚  r‚  rƒ  r„  r{   r„  rƒ  rU   r‚  r‚  )rA   r‚  r‚  r‚  é   é   r…  r{   é   r‚  r‚  )rA   r‚  r‚  r‚  r‚  é   é   rL  r‚  r‚  r‚  r   )rä   rã   Úplasma©rg  rz   rÐ   )rJ   r`   ra   r   r˜   r   ra  Úmasked_lessr®   Ú	Normalizerß   rÝ   rç   rè   r$  rt   )rY   r$   r]   r^   Úmatrixr_   Únormr
   r*   r*   r+   Útest_surface3d_maskedJ  s*   øÿr  c                 C   s`   t  t  d¡t  d¡¡\}}|| }| jdd}|j|||d d |jdd}| |||¡ d S )NrB   r/   r0   r‹  )r   r˜   r…   ra   r$  )r8   r9   r]   r^   r_   rî   rí   r*   r*   r+   Útest_plot_surface_None_arge  s   r‘  zsurface3d_masked_strides.pngc                  C   sj   t  ¡ } | jdd}tjddd…ddd…f \}}tj || d¡}|j|||ddd | d	d
d¡ d S )Nr/   r0   iúÿÿÿgffffff@r   r   rF   ©r~  r  é<   éÓÿÿÿr   )	rJ   r`   ra   r   r]  ra  rŒ  r$  rt   r2  r*   r*   r+   Útest_surface3d_masked_strideso  s   r•  z
text3d.pngc                  C   sÐ   t  ¡ } | jdd}d}d}d}d}t||||ƒD ]\}}}}	d|||	|f }
| |||	|
|¡ q|jdddd	d	d
 |jddd|jd | dd¡ | dd¡ | 	dd¡ | 
d¡ | d¡ | d¡ d S )Nr/   r0   ©Nr]   r^   r_   ©r   r   r   rD   ©r   r­   rF   rR  râ   r   ©r­   rF   rÞ   râ   r   r   ©rF   r   rB   r­   r   râ   z(%d, %d, %d), dir=%sr   r‹   r   r»   gffffffî?z2D Text)Ú	transformr   r|   zX axiszY axiszZ axis)rJ   r`   ra   r#   r,  Útext2DÚ	transAxesÚ
set_xlim3dÚ
set_ylim3dr%  rc   rd   re   )rY   r$   Úzdirsr‡   rˆ   r€   r   r]   r^   r_   r[   r*   r*   r+   Útest_text3d{  s"   

r¡  c                 C   s  d}d}d}d}|j dd}| dd¡ | dd¡ | dd¡ t||||ƒD ]$\}}}	}
| dddd	|› d
|	› d
|
› d|› ¡}|j||	|
f|d q'| j dd}| dd¡ | dd¡ | dd¡ t||||ƒD ]\}}}	}
|j||	|
d	|› d
|	› d
|
› d|› |d qkd S )Nr–  r˜  r™  rš  r/   r0   r   r|   ú(z, z), dir=)r   )ra   rž  rŸ  r%  r#   r,  Úset_position_3d)r9   r8   r   r‡   rˆ   r€   rî   r   r]   r^   r_   r  rí   r*   r*   r+   Útest_text3d_modification“  s$   (.ÿr¤  ztrisurf3d.pngg¬Zd;¯?c            	      C   sÞ   d} d}t  dd|¡}t jddt j | dd}t j|d	t jf |d
d}|d d …d
d d…f  t j|  7  < t  d|t  |¡  ¡ ¡}t  d|t  |¡  ¡ ¡}t  | | ¡}t	 
¡ }|jdd}|j|||tjdd d S )Né$   rÞ   ç      À?ç      ð?r   r   F©Úendpoint.r   ©Úaxisr/   r0   çš™™™™™É?)r¾   r   )r   rú   r   rd  ÚnewaxisÚappendr  rK   r  rJ   r`   ra   Úplot_trisurfr	   Újet©	Ún_anglesÚn_radiiÚradiiÚanglesr]   r^   r_   rY   r$   r*   r*   r+   Útest_trisurf3d¬  s   $r¶  ztrisurf3d_shaded.pngç¸…ëQ¸ž?c            	      C   sà   d} d}t  dd|¡}t jddt j | dd}t j|d	t jf |d
d}|d d …d
d d…f  t j|  7  < t  d|t  |¡  ¡ ¡}t  d|t  |¡  ¡ ¡}t  | | ¡}t	 
¡ }|jdd}|j|||g d¢dd d S )Nr¥  rÞ   r¦  r§  r   r   Fr¨  .r   rª  r/   r0   )r   ró   r   r¬  )rƒ   r   )r   rú   r   rd  r­  r®  r  rK   r  rJ   r`   ra   r¯  r±  r*   r*   r+   Útest_trisurf3d_shaded¾  s   $r¸  zwireframe3d.pngc                  C   s<   t  ¡ } | jdd}t d¡\}}}|j|||ddd d S )Nr/   r0   r»   é   ©r  r  ©rJ   r`   ra   r   rÃ   Úplot_wireframerÈ   r*   r*   r+   Útest_wireframe3dÐ  ó   r½  zwireframe3dzerocstride.pngc                  C   ó<   t  ¡ } | jdd}t d¡\}}}|j|||ddd d S )Nr/   r0   r»   r¹  r   rº  r»  rÈ   r*   r*   r+   Útest_wireframe3dzerocstrideØ  r¾  rÀ  zwireframe3dzerorstride.pngc                  C   r¿  )Nr/   r0   r»   r   r|   r’  r»  rÈ   r*   r*   r+   Útest_wireframe3dzerorstrideà  r¾  rÁ  c                  C   sh   t  ¡ } | jdd}t d¡\}}}t t¡ |j|||ddd W d   ƒ d S 1 s-w   Y  d S )Nr/   r0   r»   r   r’  )	rJ   r`   ra   r   rÃ   r  r  Ú
ValueErrorr¼  rÈ   r*   r*   r+   Ú test_wireframe3dzerostrideraisesè  s   "ÿrÃ  c                  C   s¦   t  ¡ } | jdd}t d¡\}}}t t¡ |j|||ddd W d   ƒ n1 s,w   Y  t t¡ |j	|||ddd W d   ƒ d S 1 sLw   Y  d S )Nr/   r0   r»   r|   é2   )r~  r  )r  r  )
rJ   r`   ra   r   rÃ   r  r  rÂ  r¼  r$  rÈ   r*   r*   r+   Útest_mixedsamplesraisesð  s   ÿ"ÿrÅ  )zquiver3d.pngzquiver3d_pivot_middle.pngzquiver3d_pivot_tail.pngc                  C   sø   t jddd…ddd…ddd…f \} }}t  t j|  ¡t  t j| ¡ t  t j| ¡ }t  t j|  ¡ t  t j| ¡ t  t j| ¡ }dt  t j|  ¡ t  t j| ¡ t  t j| ¡ }dD ]}t ¡ jdd	}|j| |||||d
|dd	 qad S )NrA   r   ù              $@ç333333ã?ù              @ç>,p½ ê?)ÚtipÚmiddleÚtailr/   r0   r×   T©rµ   ÚpivotÚ	normalize)	r   Úogridr  r   r  rJ   r`   ra   Úquiver)r]   r^   r_   ÚuÚvÚwrÎ  r$   r*   r*   r+   Útest_quiver3dú  s   (024þrÕ  c           	      C   sP   |j dd g  } } } } }}| j dd}|j||||||dddd	 d S )Nr/   r0   r×   rÊ  TrÍ  )ra   rÑ  )	r8   r9   r]   r^   r_   rÒ  rÓ  rÔ  r$   r*   r*   r+   Útest_quiver3d_empty  s    rÖ  zquiver3d_masked.pngc                  C   s.  t  ¡ } | jdd}tjddd…ddd…ddd…f \}}}t tj| ¡t tj| ¡ t tj| ¡ }t tj| ¡ t tj| ¡ t tj| ¡ }dt tj| ¡ t tj| ¡ t tj| ¡ }tjj	d	|k |d
k @ |dd}tjj	d
|k |dk @ |dd}|j
||||||d
ddd	 d S )Nr/   r0   rA   r   rÆ  rÇ  rÈ  rÉ  çš™™™™™Ù¿r×   F)ré   rA  rÊ  TrÍ  )rJ   r`   ra   r   r]  r  r   r  ra  Úmasked_whererÑ  )rY   r$   r]   r^   r_   rÒ  rÓ  rÔ  r*   r*   r+   Útest_quiver3d_masked  s   (024 rÙ  c                  C   sp   t  ¡ } | jdd}tdƒ}| |¡ t |¡ | d¡ t 	| 
¡ d¡s'J ‚| j ¡  t 	| 
¡ d¡s6J ‚d S )Nr/   r0   ©r   r   )r§  r  r  r   ©r   r   r   r   )rJ   r`   ra   r   Ú	add_patchr   Úpatch_2d_to_3drD  r®   Ú
same_colorÚget_facecolorr›   rœ   )rY   r$   Úcircler*   r*   r+   Útest_patch_modification   s   



rá  c                 C   sð   t ddƒ}t ddƒ}t g d¢g d¢g¡}tj||gdd}| jd	d
}| |¡ | d¡ | |¡ | 	d¡ | 
¡ s>J ‚| d¡ | 
¡ rIJ ‚t ddƒ}t ddƒ}t g d¢g d¢g¡}tj||gdd|ddd}|jd	d
}| |¡ d S )NrÚ  r»   )r×   r×   r·  )r  ró   r  r§  )ró   r  r  ró   r@   )r:  r/   r0   r?  rA  F)r:  r6  r5  r„   rC  )r   r   r   r   ÚPatch3DCollectionra   Úadd_collection3drE  rD  rF  rG  rH  )r8   r9   Úpatch1Úpatch2rg  r}   rî   rí   r*   r*   r+   Ú"test_patch_collection_modification-  s*   








þræ  c                  C   s    g d¢g d¢g d¢g d¢g} t jtdd t | ¡ W d   ƒ n1 s%w   Y  tj| td} t jtdd t | ¡ W d   ƒ d S 1 sIw   Y  d S )N©r   r   r   ©r   r   r   )r   r   r   rk   zlist of \(N, 3\) array-liker  rX  )r  r  rÂ  r   ÚPoly3DCollectionr   r   rc  )Úpolyr*   r*   r+   Ú&test_poly3dcollection_verts_validationI  s   ÿ"ÿrë  zpoly3dcollection_closed.pngc                  C   s”   t  ¡ } | jdd}t g d¢g d¢g d¢gt¡}t g d¢g d¢g d¢gt¡}tj|gdd	d
dd}tj|gdd	ddd}| |¡ | |¡ d S )Nr/   r0   rç  rè  rk   rD   r—  r@   Úk)ró   ró   r   ró   T©r:  r6  r5  Úclosed)r   ró   ró   ró   F)	rJ   r`   ra   r   r   rc  r   ré  rã  ©rY   r$   Úpoly1Úpoly2Úc1Úc2r*   r*   r+   Útest_poly3dcollection_closedS  s   ÿÿ
rô  c                  C   sv   t g ƒ} t | ¡ t| tjƒsJ ‚|  ¡ g ksJ ‚tjtddd\}}| 	| ¡ |  
¡ }t |¡s4J ‚|j ¡  d S )Nr/   r0   r2   )r   r   Úpoly_collection_2d_to_3dÚ
isinstanceré  Ú	get_pathsrJ   r4   r5   Ú
add_artistÚdo_3d_projectionr   Úisnanr›   rœ   )rê  rY   r$   Úminzr*   r*   r+   Ú#test_poly_collection_2d_to_3d_emptyb  s   

rü  zpoly3dcollection_alpha.pngc                  C   s¸   t  ¡ } | jdd}t g d¢g d¢g d¢gt¡}t g d¢g d¢g d¢gt¡}tj|gdd	d
dd}| d¡ tj|gddd}| 	d¡ | 
d	¡ | d¡ | |¡ | |¡ d S )Nr/   r0   rç  rè  rk   rD   r—  r@   rì  ©ró   ró   r   Trí  ró   F)r:  rî  )r   ró   ró   )rJ   r`   ra   r   r   rc  r   ré  rF  rD  rE  rã  rï  r*   r*   r+   Útest_poly3dcollection_alphaq  s   ÿ




rþ  zadd_collection3d_zs_array.pngc                  C   sB  t  dt j dt j d¡} t  ddd¡}|d d }|t  | ¡ }|t  | ¡ }t  |||g¡ ddd¡}t j|d d… |dd … gdd	}t 	¡ }|j
d
d}t ddt j ¡}	t|d d …d d …d d…f d|	d}
|
 t  | dt j ¡¡ |j|
|d d …d d …df d}|d usJ ‚| dd¡ | dd¡ | dd¡ d S )Nrÿ   rF   rÁ   rÕ   r   r   rA   r@   rª  r/   r0   r   Útwilight©r¾   r  ©r€   r  rB   r­   )r   rú   r   r  r  Úcolumn_stackr_  ÚconcatenaterJ   r`   ra   r  r   Ú	set_arrayÚmodrã  rÅ   rÆ   rÇ   ©r  r_   r&   r]   r^   ÚpointsÚsegmentsrY   r$   r  Úlcr  r*   r*   r+   Útest_add_collection3d_zs_array„  s"   "$ r
  zadd_collection3d_zs_scalar.pngc                  C   sú   t  ddt j d¡} d}|d d }|t  | ¡ }|t  | ¡ }t  ||g¡ ddd¡}t j|d d… |dd … gdd}t 	¡ }|j
dd}t ddt j ¡}	t|d	|	d
}
|
 | ¡ |j|
|d}|d usiJ ‚| dd¡ | dd¡ | dd¡ d S )Nr   r   rÁ   r   rA   rª  r/   r0   rÿ  r   r  r  rB   rÿ   r­   )r   rú   r   r  r  r  r_  r  rJ   r`   ra   r  r   r  rã  rÅ   rÆ   rÇ   r  r*   r*   r+   Útest_add_collection3d_zs_scalar   s"   "
r  zaxes3d_labelpad.pngc                  C   sÄ   t  ¡ } |  t| ƒ¡}|jjtjd ksJ ‚|jddd |jjdks%J ‚| 	d¡ |j
ddd |jjdks9J ‚| ¡ dksAJ ‚d|j_d|j_t|j ¡ ƒD ]\}}| | ¡ |d	  ¡ qPd S )
Nzaxes.labelpadzX LABELr|   )ÚlabelpadzY LABELzZ LABELr{   r¿   rB   )rJ   r`   Úadd_axesr   Úxaxisr  rç   rz  rc   rd   re   ÚzaxisÚ
get_zlabelÚyaxisrL   Úget_major_ticksÚset_padÚget_pad)rY   r$   rS   Útickr*   r*   r+   Útest_axes3d_labelpadº  s   
ÿr  zaxes3d_cla.pngc                  C   s.   t  ¡ } | jddddd}| ¡  | ¡  d S )Nr   r/   r0   )rJ   r`   ra   rr  Úclarg   r*   r*   r+   Útest_axes3d_claÐ  s   r  zaxes3d_rotated.pngc                  C   s,   t  ¡ } | jddddd}| ddd¡ d S )Nr   r/   r0   ri   é-   r   )rJ   r`   ra   rt   rg   r*   r*   r+   Útest_axes3d_rotatedÙ  s   r  c                  C   s˜   t jdddd} t jdddd}t  | |¡\}}t j d¡}tjdd}|jdddd	d
}t 	t
¡ | |||¡ W d   ƒ d S 1 sEw   Y  d S )Nró   r|   rÁ   )Únum)é   r­   r•   r   r   r/   r0   )r   rú   r˜   rô   ÚrandnrJ   r`   ra   r  r  rÂ  r$  )r]   r^   rÉ   rÊ   r_   rY   r$   r*   r*   r+   Útest_plotsurface_1d_raisesà  s   "ÿr  c            
      C   sr   t  g d¢¡} t  g d¢¡}t  g d¢¡}d}t | |||¡\}}}t |||| ¡}t ddd¡}t  ||¡}	|	S )N)rò   iüÿÿiÐ  )rÁ   rÁ   rÁ   rç  r   rÁ   r¼   r   )r   r   r   Ú
_view_axesÚ_view_transformation_uvwÚpersp_transformationÚdot)
ÚEr(  ÚVrq   rÒ  rÓ  rÔ  ÚviewMÚperspMÚMr*   r*   r+   Ú_test_proj_make_Mì  s   r(  c            
      C   s–   t ƒ } t g d¢¡d }t g d¢¡d }t g d¢¡d }t |||| ¡\}}}t |||| ¡\}}}	tj ||¡ tj ||¡ tj |	|¡ d S )N©
r   r   r   r   r   r   r   r   r   r   ç     Àr@©
r   r   r   r   r   r   r   r   r   r   ©
r   r   r   r   r   r   r   r   r   r   )r(  r   r   r   Úproj_transformÚinv_transformr±   Úassert_almost_equal)
r'  r‡   rˆ   r€   ÚtxsÚtysÚtzsÚixsÚiysÚizsr*   r*   r+   Útest_proj_transformù  s   r6  r   c                 O   sº   d|ddg}dd|dg}ddd|g}t  |||| ¡\}}}	t||ƒ\}
}}}|
|f|
|f|
|fg}tj|i |¤Ž\}}t|ƒ}| |¡ t||g d¢ƒD ]\}}}| |||¡ qL||fS )Nr   )r  r]   r^   r_   )r   r-  r#   rJ   r4   r   Úadd_collectionr,  )r'  r+  Úargsrì   r‡   rˆ   r€   r0  r1  r2  r  r$   ÚayÚazÚlinesrY   Úlinecr]   r^   r  r*   r*   r+   Ú_test_proj_draw_axes  s   
r=  zproj3d_axes_cube.pngc                  C   sÌ   t ƒ } d ¡ }t g d¢¡d }t g d¢¡d }t g d¢¡d }t |||| ¡\}}}t| dd\}}	|	j|||d |	j||d	d t	|||ƒD ]\}
}}|	 
|
||¡ qK|	 d
d¡ |	 d
d¡ d S )Nú0 1 2 3 0 4 5 6 7 4r)  r*  r+  r,  i  r*  ©r}   r&   çš™™™™™É¿r¬  )r(  Úsplitr   r   r   r-  r=  r1  r  r#   r,  rÅ   rÆ   )r'  Útsr‡   rˆ   r€   r0  r1  r2  rY   r$   r]   r^   r  r*   r*   r+   Útest_proj_axes_cube  s   rC  zproj3d_axes_cube_ortho.pngc                  C   s6  t  g d¢¡} t  g d¢¡}t  g d¢¡}d}t | |||¡\}}}t |||| ¡}t dd¡}t  ||¡}	d ¡ }
t  g d¢¡d	 }t  g d
¢¡d	 }t  g d¢¡d	 }t ||||	¡\}}}t	|	dd\}}|j
||d| d |j||dd t|||
ƒD ]\}}}| |||¡ q€| dd¡ | dd¡ d S )N)éÈ   rÁ   rÁ   rk   rç  r   rA   r   r>  r)  rÁ   r+  r,  é–   r*  r”   r&   r?  i8ÿÿÿrD  )r   r   r   r  r   Úortho_transformationr"  rA  r-  r=  r1  r  r#   r,  rÅ   rÆ   )r#  r(  r$  rq   rÒ  rÓ  rÔ  r%  ÚorthoMr'  rB  r‡   rˆ   r€   r0  r1  r2  rY   r$   r]   r^   r  r*   r*   r+   Útest_proj_axes_cube_ortho/  s(   rH  c                  C   sj   g d¢} t  | tjd ¡}tj |g d¢¡ g d¢} t  | tjd ¡}tj |dt d¡d ddg¡ d S )	NrÛ  r­   )r   r   r   r   r   r@   r   ró   r   )r   Úrot_xr   r   r±   Úassert_allcloser€  )r$  Ú	rotated_Vr*   r*   r+   Útest_rotL  s   $rL  c                  C   sV   d\} }d\}}d\}}t  | |||||¡}tj |g d¢g d¢g d¢g d¢g¡ d S )N)rÁ   éx   )r¼   rÁ   )r×   r¬  )r»   r   r   r  )r   g{®Gázt?r   ró   )r   r   g      $@rA   )r   r   r   r   )r   Úworld_transformationr   r±   rJ  )ÚxminÚxmaxÚyminÚymaxÚzminÚzmaxr'  r*   r*   r+   Ú
test_worldV  s   ýÿrU  zproj3d_lines_dists.pngc                  C   sâ   t jdtddd\} }d}d}| ||¡ t||ƒ\}}d}d}| ||¡ t |d	 |d	 f||¡}t t 	||f¡j
||¡}||d	 ksIJ ‚t|||ƒD ]\}}	}
t||	f|
d	d
}| |¡ qO| dd¡ | d	d¡ d S )N)rF   r­   r<   )ry  )rV   r3   )r   rz   )r{   rE  )r   r   r{   rz   )rÁ   rE  rz   rD  r   )Úfillrl  rE  r”   )rJ   r4   r5   r  r#   r1  r   Ú_line2d_seg_distr   r   ÚTr   rÜ  rÅ   rÆ   )rY   r$   r‡   rˆ   Úp0Úp1Údist0Údistr]   r^   Údr}   r*   r*   r+   Útest_lines_distsb  s    r^  c                  C   s.   d} d}t  || | ¡ t  t |¡| | ¡ d S )N)r|   rz   rÄ  )r{   rE  rl   )r   rW  r   r   )Ús0Úpr*   r*   r+   Útest_lines_dists_nowarning{  s   ra  c                  C   sÖ   t jddid\} }| ¡ dksJ ‚|jdddd | dd	gdd	gdd	g¡ | ¡ d
ks/J ‚| d¡ | d¡ | ddgddgddg¡ | ¡ dksNJ ‚|jdd | ddgddgddg¡ | ¡ dksiJ ‚d S )Nr1   r/   r2   Úlinearr   r×   r¬  ©r]   r^   r_   r   )r   r   rØ   çš™™™™™ñ?r@  g333333ó?FTr   )r   r   rØ   rd  r×  ç333333@r]   rª  )r   r   rØ   rd  r×  re  )rJ   r4   Ú
get_zscaleÚmarginsr  Ú
get_w_limsÚ	autoscaleÚset_autoscalez_onrg   r*   r*   r+   Útest_autoscaleƒ  s   

rk  r«  rc  r;   )TFNc           
      C   s¸   t  ¡ }|jdd}t d¡}t ddd¡}| ||¡ t|d| › dƒ}t|d| › d	ƒ}t|d
| › d	ƒ}|d u r>|ƒ n|}	|d|d |	|ƒ ksMJ ‚|j 	¡  tj
 |ƒ d¡ d S )Nr/   r0   rÁ   rØ   r×   Úget_autoscaleÚ_onÚset_ÚlimÚget_)ç      à¿ró   )r;   )rJ   r`   ra   r   r…   rú   r1  Úgetattrr›   rœ   r±   Úassert_array_equal)
r«  r;   rY   r$   r]   r^   Úget_autoscale_onÚset_limÚget_limÚ	post_autor*   r*   r+   Útest_unautoscale’  s   

rx  c                  C   sŠ   t  ¡ } | jdd}t t¡ |jddd W d   ƒ n1 s!w   Y  t t¡ |jddd W d   ƒ d S 1 s>w   Y  d S )Nr/   r0   Úperspr   ©Úfocal_lengthrm   r   )rJ   r`   ra   r  r  rÂ  rs   rg   r*   r*   r+   Útest_axes3d_focal_length_checks¨  s   ÿ"ÿr|  zaxes3d_focal_length.pngc                  C   sB   t jddddid\} }|d jdtjd |d jdd	d d S )
Nr   r   r1   r/   r2   r   ry  rz  ç333333Ã?)rJ   r4   rs   r   Úinf)rY   rR   r*   r*   r+   Útest_axes3d_focal_length±  s   r  zaxes3d_ortho.pngc                  C   s"   t  ¡ } | jdd}| d¡ d S )Nr/   r0   rm   )rJ   r`   ra   rs   rg   r*   r*   r+   Útest_axes3d_ortho¸  s   r€  zaxes3d_isometric.pngc               	   C   s¾   ddl m} m} tjtddddd\}}d}| t t||||ƒƒ¡d	ƒD ]\}}t	|| ƒ 
¡ |d
 |d  krD|jt||ƒddiŽ q%|jt t dt d	¡ ¡¡ddd | d¡ d S )Nr   )r   r   r/   rm   )rF   rF   rF   )r1   Ú	proj_typeÚ
box_aspectr2   )rA   r   r   r   r}   rì  r§  r”  rn   T)r   r   r   rJ   r4   r5   r   r   r   r!   r    r"   r#   rt   ÚdegreesÚarctanr€  r"  )r   r   rY   r$   r&   r+  Úer*   r*   r+   Útest_axes3d_isometric¿  s   ý$ €&r†  Úvalue)ÚsetterÚside))rž  Úleft)rž  Úright)rŸ  Úbottom)rŸ  Útop)r%  rŒ  )r%  r  c                 C   s`   ||i}t  ¡ }|jdd}t t¡ t|| ƒdi |¤Ž W d   ƒ d S 1 s)w   Y  d S )Nr/   r0   r*   )rJ   r`   ra   r  r  rÂ  rr  )rˆ  r‰  r‡  ÚlimitrY   Úobjr*   r*   r+   Útest_invalid_axes_limitsÏ  s   
"ÿr  c                   @   s†   e Zd Zedgƒdd„ ƒZedgƒdd„ ƒZedgƒdd	„ ƒZed
gƒdd„ ƒZedgƒdd„ ƒZedgddddd„ ƒZ	dd„ Z
dS )Ú
TestVoxelszvoxels-simple.pngc                 C   sB   t jddid\}}t d¡\}}}||k||kB }| |¡ d S )Nr1   r/   r2   )rB   rF   r@   )rJ   r4   r   ÚindicesÚvoxels)ÚselfrY   r$   r]   r^   r_   r“  r*   r*   r+   Útest_simpleá  s   zTestVoxels.test_simplezvoxels-edge-style.pngc                 C   sv   t jddid\}}t d¡\}}}|d d |d d  |d d  dk }|j|dd	d
}|t| ¡ ƒ  d¡ d S )Nr1   r/   r2   )rB   rB   rF   r   g      ø?g]Âõ(\@r@   r>  )r:  r6  r?  )rJ   r4   r   r’  r“  rß   ÚkeysrE  )r”  rY   r$   r]   r^   r_   r“  rÓ  r*   r*   r+   Útest_edge_styleé  s
   (zTestVoxels.test_edge_stylezvoxels-named-colors.pngc                 C   s’   t jddid\}}t d¡\}}}||k||kB }||| | dk  @ }tjddtjd}d||d	k |d	k @ < d
||| dk < |j||d dS )z5Test with colors set to a 3D object array of strings.r1   r/   r2   ©r|   r|   r|   r   rM  rX  z0.25rB   Úcyanr|   r‹  N)rJ   r4   r   r’  rJ  Úobject_r“  ©r”  rY   r$   r]   r^   r_   r“  r
   r*   r*   r+   Útest_named_colorsô  s   zTestVoxels.test_named_colorszvoxels-rgb-data.pngc                 C   st   t jddid\}}t d¡\}}}||k||kB }t d¡}|d |d< |d |d< |d |d	< |j||d
 dS )z5Test with colors set to a 4d float array of rgb data.r1   r/   r2   r˜  )r|   r|   r|   r@   rR  ©.r   ©.r   ©.r   r‹  N)rJ   r4   r   r’  Úzerosr“  r›  r*   r*   r+   Útest_rgb_data  s   
zTestVoxels.test_rgb_datazvoxels-alpha.pngc                 C   s¼   t jddid\}}t d¡\}}}||k}t || ¡dk }||B }t d¡}	g d¢|	|< g d¢|	|< |j||	d	}
t|
ƒtu sCJ ‚|
 	¡ D ]\}}|| sSJ d
ƒ‚t
|tjƒs[J ‚qGd S )Nr1   r/   r2   r˜  r   )r|   r|   r|   rF   )r   r   r   ró   )r   r   r   ró   r‹  zfaces returned for absent voxel)rJ   r4   r   r’  r!   r   r“  Útyper5   Úitemsrö  r   ré  )r”  rY   r$   r]   r^   r_   Úv1Úv2r“  r
   rÓ  Úcoordrê  r*   r*   r+   Ú
test_alpha  s   
þzTestVoxels.test_alphazvoxels-xyz.pngç{®Gáz„?F)rñ   r   c                 C   sÆ   t jddid\}}dd„ }t d¡d \}}}||ƒ}||ƒ}||ƒ}	|d d	 |d d	  |	d d	  d
k }
t |
jd ¡}||d< ||d< |	|d< |j||||
|t d	| d dd¡dd d S )Nr1   r/   r2   c                 S   sZ   d}t | jƒD ]#}| |tjd d…   | |tjdd …    d } |tjd d … 7 }q| S )Nr*   rA   r   r  )r°   Úndimr   Ú	index_exp)r]   ÚslrS   r*   r*   r+   Ú	midpoints$  s   ÿÿz&TestVoxels.test_xyz.<locals>.midpoints)é   r­  r­  g      0@ró   r   rÖ   )r@   r  rž  rŸ  r   r   )rg  rh  r   )rJ   r4   r   r’  r   r`  r“  rÚ   )r”  rY   r$   r¬  r&   rx   ry   ÚrcÚgcÚbcÚspherer
   r*   r*   r+   Útest_xyz   s    	(
ýzTestVoxels.test_xyzc                 C   sZ  t  d¡\}}}t  d¡}tjddid\}}tƒ tddfD ].}|j|fi |¤Ž |jdd|i|¤Ž |j||||fi |¤Ž |j|||fd|i|¤Ž qtjt	d	d
 |j|||||d W d   ƒ n1 sjw   Y  tjt	d	d
 | ||¡ W d   ƒ n1 s‡w   Y  t t
¡ |j||||d W d   ƒ d S 1 s¦w   Y  d S )NrE   )r   r@   rF   r1   r/   r2   rì  )r6  Úfilledr“  r  )r³  )r³  r]   r^   r_   r*   )r   r’  ÚonesrJ   r4   r5   r“  r  r  Ú	TypeErrorÚAttributeError)r”  r]   r^   r_   r³  rY   r$   Úkwr*   r*   r+   Útest_calling_conventionsA  s"   
ÿÿ"ÿz#TestVoxels.test_calling_conventionsN)Ú__name__Ú
__module__Ú__qualname__Úmpl3d_image_comparisonr•  r—  rœ  r¡  r§  r²  r¸  r*   r*   r*   r+   r‘  à  s    






 r‘  c            
      C   s
  ddgddgddg} }}ddgd	d
gddg}}}t  ¡ }|jdd}| | ||¡}|d }	tj | ||f|	 ¡ ¡ |	 |||¡ tj |||f|	 ¡ ¡ |	 	| ¡ |	 
|¡ |	j|dd tj | ||f|	 ¡ ¡ |	jddd tj | |t |¡f|	 ¡ ¡ d S )Nr   r   r   r@   rF   rB   r­   râ   rÞ   rR  r|   rU   r/   r0   r_   rt  )rJ   r`   ra   r  r   r±   rs  Úget_data_3dr  Ú	set_xdataÚ	set_ydataÚset_3d_propertiesr   )
r]   r^   r_   Úx2Úy2Úz2rY   r$   r;  r  r*   r*   r+   Útest_line3d_set_get_data_3dZ  s   

"rÄ  c                 C   s`   | j dd}| g d¢g d¢g d¢¡ | ¡  |j dd}| ¡  | g d¢g d¢g d¢¡ d S )Nr/   r0   )r   r   r|   r|   )r   r|   r|   r|   )r   r   r   r|   )ra   r  Úinvert_yaxisr7   r*   r*   r+   Útest_invertedl  s   rÆ  c                  C   s°   t jddid\} }| ¡ rJ ‚| ¡ rJ ‚| ¡ rJ ‚| dd¡ | dd¡ | dd¡ | ¡ s4J ‚| ¡ s:J ‚| ¡ s@J ‚| ¡  | ¡ rJJ ‚| ¡ rPJ ‚| ¡ rVJ ‚d S )Nr1   r/   r2   r   r   )	rJ   r4   Úxaxis_invertedÚyaxis_invertedÚzaxis_invertedrÅ   rÆ   rÇ   r  rg   r*   r*   r+   Útest_inverted_clax  s   rÊ  c                  C   s¨   t  ¡ } t| ƒ}|jddd |jddd |jddd | j ¡  |j ¡ D ]
}|jj	dks1J ‚q'|j
 ¡ D ]
}|jj	dksAJ ‚q7|j ¡ D ]
}|jj	dksQJ ‚qGd S )Nr]   r‹   )r«  r
   r^   r_   )rJ   r`   r   Útick_paramsr›   rœ   r  r  Ú	tick1lineÚ_colorr  r  )rY   r$   r  r*   r*   r+   Útest_ax3d_tickcolourŒ  s   
ÿrÎ  c           	      C   sÂ  | j ddddid}|jD ]}| dd¡ qt|g d¢ƒD ]=\}}|d	 j|d
d |d j|dd |d j|tjd  d |d j|tjd  d |d j|tjd  d qdd„ }|j ddddid}|jD ]}| dd¡ qlt|dgdgdgg d¢gƒD ][\}}||d	 |ƒD ]}| d¡ qŽ||d |ƒD ]}| d¡ q||d |ƒD ]}| 	tjd  ¡ q¬||d |ƒD ]}| 
tjd  ¡ q¿||d |ƒD ]}| tjd  ¡ qÒqƒd S )NrF   rB   r1   r/   r2   g    ÐcAg   @ÑcA)r]   r^   r_   rÜ   r   Úplain)r«  r   r   )rÕ   r   )r«  Ú	scilimitsr   zaxes.formatter.useoffset)r«  Ú	useOffsetr@   zaxes.formatter.use_locale)r«  Ú	useLocalezaxes.formatter.use_mathtext)r«  ÚuseMathTextc                    s   ‡ fdd„|D ƒS )Nc                    s   g | ]	}t ˆ |ƒ ¡ ‘qS r*   )rr  Úget_major_formatter)r¤   Úname©r$   r*   r+   r§   °  r¨   zAtest_ticklabel_format.<locals>.get_formatters.<locals>.<listcomp>r*   )r$   Únamesr*   rÖ  r+   Úget_formatters¯  s   z-test_ticklabel_format.<locals>.get_formattersr  r  r  )r  r  r  F)r4   rr   rÅ   r#   Úticklabel_formatrç   rz  Úset_scientificÚset_powerlimitsÚset_useOffsetÚset_useLocaleÚset_useMathText)	r8   r9   rR   r$   ÚrowrÕ  rØ  r×  Úfmtr*   r*   r+   Útest_ticklabel_format  sR   
ÿÿÿÿ
þ
ÿ
ÿÿõrá  c                 C   sŠ   d}t  t  ddd¡t  ddd¡t  ddd¡¡\}}}t  |¡ } }}t|| fdƒD ]\}	}
|	jdd}|j|||||||
|d	 q+d S )
NrË  gš™™™™™é¿r   r¬  r   )r   r§  r/   r0   )rµ   rÎ  )r   r˜   r…   Ú	ones_liker#   ra   rÑ  )r8   r9   rÎ  r]   r^   r_   rÒ  rÓ  rÔ  rY   rµ   r$   r*   r*   r+   Útest_quiver3D_smokeÅ  s   
ýþrã  zminor_ticks.pngÚmpl20)r   c                  C   st   t  ¡ jdd} | jdgdd | jdgdd | jdgdd | jdgdd | jd	gdd | jd
gdd d S )Nr/   r0   rÖ   T)ÚminorÚquarterg…ëQ¸Õ?Úthirdró   Úhalf)	rJ   r`   ra   Ú
set_xticksÚset_xticklabelsÚ
set_yticksÚset_yticklabelsÚ
set_zticksÚset_zticklabelsrÖ  r*   r*   r+   Útest_minor_ticksÕ  s   rï  zerrorbar3d_errorevery.pngc            
   	   C   sº   t  ddt j d d¡} t  | ¡t  d|  ¡t  d|  ¡}}}t ¡ }|jdd}d	}t  | j¡}|| dk|| d dk@ }|| dk|| d dk@ }	|j	|||d
||	|d dS )z0Tests errorevery functionality for 3D errorbars.r   r   r×   r¨  r@   rB   r/   r0   é   r¬  )ÚzuplimsÚzlolimsÚ
erroreveryN)
r   r…   r   r  r  rJ   r`   ra   r^  Úerrorbar)
r  r]   r^   r_   rY   r$   ÚesteprS   rñ  rò  r*   r*   r+   Útest_errorbar3d_erroreveryà  s   *
ÿrö  zerrorbar3d.pngc                  C   sZ   t  ¡ } | jdd}g d¢}g d¢}|j||||||dg d¢g d¢dd	d
d | ¡  dS )z9Tests limits, color styling, and legend for 3D errorbars.r/   r0   )r   r   r@   rF   rB   )ró   ró   ró   ró   ró   r@   )FTFTT)TFFTFTÚpurplezError lines)r]   r^   r_   ÚxerrÚyerrÚzerrÚcapsizerñ  rò  ÚyuplimsÚecolorr[   N)rJ   r`   ra   rô  Úlegend)rY   r$   r]  r…  r*   r*   r+   Útest_errorbar3dò  s   ürÿ  z
stem3d.pnggú~j¼t“h?)r   rñ   c               
   C   s.  t jddddddid\} }t ddtj ¡}t |tjd  ¡}t |tjd  ¡}|}t|d g d	¢ƒD ]\}}|j||||d
 | 	d|› ¡ q6t tj d tjd d¡}t 
|¡}t |¡}t|d g d	¢ƒD ]'\}}|j|||ddd|d\}}	}
| 	d|› ¡ |jddd |
 d¡ qmd S )Nr   r@   )rÞ   r­   Tr1   r/   ©rV   Úconstrained_layoutr3   r   rc  )Úorientationzorientation=r{   r   zC4-.ÚC1Dr?  )ÚlinefmtÚ	markerfmtÚbasefmtr  r4  )r  Úmarkeredgewidth)rJ   r4   r   rú   r   r  r  r#   ÚstemrM   râ  ÚsetÚset_linewidth)rY   rR   r  r]   r^   r_   r$   r   Ú
markerlineÚ	stemlinesÚbaseliner*   r*   r+   Útest_stem3d  s0   

þ

ýùr  zequal_box_aspect.pngc                  C   s®  ddl m} m} t ¡ }|jdd}t ddtj d¡}t dtjd¡}t 	t 
|¡t |¡¡}t 	t |¡t |¡¡}t 	t |¡t 
|¡¡}| |||¡ ddg}	|t t| |	|	|	ƒƒ¡dƒD ]!\}
}t t |
| ¡¡|	d |	d  kr‚|jt|
|ƒd	d
iŽ qat | ¡ | ¡ | ¡ g¡}t|d ƒt|d ƒg}| |¡ | |¡ | |¡ | d¡ | d¡ tj t!dd |jddd W d   ƒ d S 1 sÐw   Y  d S )Nr   )r   r   r/   r0   r   rÁ   rA   r   rƒ   ry   ÚoffrD   zArgument zoom =r  )Úzoom)"r   r   r   rJ   r`   ra   r   rú   r   Úouterr  r  râ  r$  r   r   r    r!   r"   r#   r  Ú
get_xlim3dÚ
get_ylim3dÚ
get_zlim3drÝ   rß   rž  rŸ  r%  r«  rN   r  r  rÂ  )r   r   rY   r$   rÒ  rÓ  r]   r^   r_   r&   r+  r…  ÚxyzlimÚXYZlimr*   r*   r+   Útest_equal_box_aspect   s4   $$€ÿ




"ÿr  c                  C   s†   d} t jd| ddddid\}}|D ]}| tj d¡tj d¡tj d¡¡}qt j||d	d
}|j ¡  |j	 
¡ jd dk sAJ ‚d S )Nr   r   )rF   rB   Tr1   r/   r   rB   Ú
horizontal)r$   r  r¬  )rJ   r4   r¯  r   rô   r  r{  r›   rœ   r$   Úget_positionÚextents)Ú	num_plotsrY   rR   r$   Úp_triÚcbarr*   r*   r+   Útest_colorbar_posF  s   

þ
ÿ
r  c                  C   s  t  ¡ } | jdd}| ¡ rJ ‚| ¡ dksJ ‚| ¡ dks J ‚| d¡ | ¡ r+J ‚| ¡ dks3J ‚| ¡ dks;J ‚| ¡  | ¡ sEJ ‚| ¡ dksMJ ‚| ¡ dksUJ ‚|jdd | ¡ saJ ‚| ¡ dksiJ ‚| ¡ dksqJ ‚|jd	d
 | ¡ s}J ‚| ¡ dks…J ‚| ¡ dksJ ‚d S )Nr/   r0   ©r   r   ©r   r   )r   r   r   )Úupper)r   r   r   )Úlower)r   r   ©r   r   )rJ   r`   ra   rÉ  Úget_zlimÚ
get_zboundÚ
set_zboundÚinvert_zaxisrg   r*   r*   r+   Útest_inverted_zaxisV  s*   
r(  c                  C   sÚ   t  ¡ } | jdd}| ¡ dksJ ‚|jdd | ¡ dks J ‚|jdd | ¡ d	ks.J ‚tjtd
d |jddd W d   ƒ n1 sGw   Y  tjtdd |jddd W d   ƒ d S 1 sfw   Y  d S )Nr/   r0   r  r   )rT  r   r   )rS  r#  z$Cannot pass both 'bottom' and 'zmin'r  r   )rŒ  rS  z!Cannot pass both 'top' and 'zmax')r  rT  )rJ   r`   ra   r$  rÇ   r  r  rµ  rg   r*   r*   r+   Útest_set_zlimv  s"   ÿþÿ"þr)  c                  C   sŒ   t  ¡ } | jddd}| jdd|d}| ddgddgddg¡ | ddgddgddg¡ | g d	¢¡ | ¡ d
ks<J ‚| ¡ d
ksDJ ‚d S )NéÓ   r/   r0   éÔ   )r1   Úsharezr   r   r   )rq  r   r   ç      @)rq  r-  )rJ   r`   ra   r  rí  r$  )rY   r	  r
  r*   r*   r+   Útest_shared_axes_retick‡  s   r.  c                  C   s2  dd„ } t  ¡ jdd}| ddd¡ |jj ¡  | | ¡ Ž \}}| | ¡ Ž \}}| | ¡ Ž \}}| 	t
|tjddd¡ | t
|tjddd¡ | | ¡ Ž \}}	| | ¡ Ž \}
}| | ¡ Ž \}}|	t |¡ksjJ ‚|t |¡kssJ ‚|t |¡ks|J ‚|t |¡ks…J ‚|
t |¡ksŽJ ‚|t |¡ks—J ‚dS )	z1Test mouse panning using the middle mouse button.c                 S   s   | | d }||  }||fS )z+Convert min/max limits to center and range.r   r*   )ÚdminÚdmaxÚcenterÚrange_r*   r*   r+   Úconvert_lim–  s   ztest_pan.<locals>.convert_limr/   r0   r   )ÚbuttonÚxdataÚydatar   N)rJ   r`   ra   r1  r›   rœ   r  r  r  Ú_button_pressr   r   ÚMIDDLEÚ_on_mover  Úapprox)r3  r$   Ú	x_center0Úx_range0Ú	y_center0Úy_range0Ú	z_center0Úz_range0Úx_centerÚx_rangeÚy_centerÚy_rangeÚz_centerÚz_ranger*   r*   r+   Útest_pan“  s,   ÿÿrG  ztool,button,key,expectedr  ))r  ç¸…ëQ¸®?)r¨  gìQ¸…ë±?)rð   ç{®Gáz´?r]   ))g{®Gáz„¿r×   ©g¸…ëQ¸ž¿rI  ©ç¸…ëQ¸®¿rH  r^   ))çìQ¸…ë±¿g{®Gáz¤?rJ  )r  g)\Âõ(¼?))g
×£p=
·¿r}  )rM  gÃõ(\ÂÅ?)rL  g
×£p=
Ç?Úpan))gffffffæ¿çÂõ(\â¿)g{®Gázð¿g…ëQ¸í¿©gR¸…ëQô¿gffffffò¿))g¸…ëQ¸î¿gáz®Gáê¿)rO  gq=
×£pÝ¿rK  ))r¬  g{®GázÔ?)gR¸…ëQà¿gö(\ÂõØ¿rP  c                 C   s^  t  ¡ }|jdd}| ddd¡ |j ¡  | ¡ | ¡ | ¡ }}}d}	d}
|j	 
|	¡ t¡}|j	 
|
¡ t¡}td|jg|¢|‘R d|iŽ}td|jg|¢|‘R d|iŽ}t|jƒ}| d	kru| ¡  | |¡ | |¡ | |¡ n| ¡  | |¡ | |¡ | |¡ |\}}}| ¡ tj|d
dksšJ ‚| ¡ tj|d
dks§J ‚| ¡ tj|d
dks´J ‚| ¡  | ¡ t |¡ksÃJ ‚| ¡ t |¡ksÎJ ‚| ¡ t |¡ksÙJ ‚| ¡  | ¡ tj|d
dksêJ ‚| ¡ tj|d
dks÷J ‚| ¡ tj|d
dksJ ‚| ¡  | ¡ t |¡ksJ ‚| ¡ t |¡ks!J ‚| ¡ t |¡ks-J ‚d S )Nr/   r0   r   rÚ  ©r   r   Úbutton_press_eventÚkeyÚbutton_release_eventr  r¨  )r!   )rJ   r`   ra   r1  r›   rœ   r  r  r  Ú	transDatar›  ÚastypeÚintr   r   r  Ú
press_zoomÚ	drag_zoomÚrelease_zoomrN  Ú	press_panÚdrag_panÚrelease_panr  r:  ÚbackÚforwardÚhome)Útoolr4  rS  ÚexpectedrY   r$   Úxlim0Úylim0Úzlim0Úd0Úd1r_  Ús1Ústart_eventÚ
stop_eventÚtbÚxlimÚylimÚzlimr*   r*   r+   Útest_toolbar_zoom_pan¹  sj   
ÿÿÿÿÿÿÿÿ






ro  c           
      C   s¦   t  ttjt  ddd¡t  ddd¡t  ddd¡gŽ ƒ¡j\}}}|| }| jddd}|j||||ddd	}| j	 
¡  | ¡  |jddd}|j||||ddd	}	d S )
Nr   rB   r   éo   r/   r0   rÀ   rà   )r}   r+  r¾   )r   r   r   r   r   r…   rX  ra   r1  r›   rœ   Úchanged)
r8   r9   r]   r^   r_   r}   rî   Úsc_testrí   Úsc_refr*   r*   r+   Útest_scalarmap_update  s   þþ
rt  c                  C   sF   t  ¡ } |  dd¡}|d jddddd}|d jdddddd}d S )Nr   r   r   r/   r0   Úother)r1   r[   )rJ   r`   Ú
subfiguresra   )rY   Úsfr$   r*   r*   r+   Útest_subfigure_simple  s   rx  Úcomputed_zorder)ÚclassicÚ_classic_test_patch)Úbaseline_imagesr   r.   r   c               
   C   sŠ  t  ¡ } | jddd}| jddd}d|_d}||fD ]4}tj|gddd	d
}| |¡ |jdddddd |jdddddd | 	d¡ | 
d¡ | d¡ q| jddd}| jddd}d|_d}t | |f| |f¡\}	}
t d¡}d}t | |fd|f¡\}}|| }t | |f| df¡\}}|| }d}d}t ddtj |¡}|t |¡ |t |¡ || t |¡ }}}||fD ]|}|j|||ddddd |j||dk  ||dk  ||dk  ddd dd! |j|	|
|dddd	d |j|t |¡ |t |¡ t |¡ddddd! |j|||dddd"d |j||dk ||dk ||dk ddd d#d! |jd$d%dd& | d'¡ qÆd S )(NéÝ   r/   r0   éÞ   F)rk   )r   rB   r   )rB   rB   r   )rB   r   r   ÚwhiteÚblackr   )rg  rh  Úzorder)r   r   )r   rF   r‹   r   )r}   r  )r@   r@   )r   r@   r|   )r   r  )r   r-  éß   éà   ró   r   râ   rò   r   rA   )rƒ   r„   r   r  rB   z--rŒ   )r\  Ú	linestylerƒ   r  r@   rF   r{   rÏ   rn   r  )rJ   r`   ra   ry  r   ré  rã  r  r1  rÅ   rÆ   rÇ   r   r˜   r   rú   r   r  r  r$  rt   r«  )rY   r	  r
  Úcornersr$   ÚtriÚax3Úax4ÚdimrÉ   rÊ   rË   ÚangleÚX2ÚY2ÚZ2ÚX3ÚY3ÚZ3r&   r'  Úthr]   r^   r_   r*   r*   r+   Útest_computed_zorder$  sŽ   ý



2
ü"ü
ü$ü
ü$ýÝr’  c                  C   s¤   t  ¡ } | jdd}t d¡}| |t |¡¡ | j ¡  | 	dd¡dks'J ‚|j
ddd | j ¡  | 	dd¡d	ks=J ‚| 
¡  | j ¡  | 	dd¡dksPJ ‚d S )
Nr/   r0   r|   r   u   x=1.8066, y=1.0367, z=âˆ’0.0553rz   r^   )rq   Úvertical_axisu"   x=9.1651, y=âˆ’0.9215, z=âˆ’0.0359)rJ   r`   ra   r   r…   r  r  r›   rœ   Úformat_coordrt   ©rY   r$   r]   r*   r*   r+   Útest_format_coordw  s   



r–  c                  C   sN   t  ¡ } | jdd}t d¡}| |t |¡¡ | j ¡  | 	¡ dks%J ‚d S )Nr/   r0   r|   )FTF)
rJ   r`   ra   r   r…   r  r  r›   rœ   Úget_axis_positionr•  r*   r*   r+   Útest_get_axis_positionˆ  s   

r˜  c                  C   s¤   t  ¡ } | jdd}| d¡ | ¡ dksJ ‚| ddd¡ | ¡ dks&J ‚|jdd	 | ¡ d
ks4J ‚|jdd | ¡ dksBJ ‚|jdd | ¡ dksPJ ‚d S )Nr/   r0   r¬  )r¬  r¬  r¬  r×   r@  )r×   r¬  r@  r   )r]   )r   r¬  r@  )r^   )r   r×   r@  ©r_   )r   r×   r   )rJ   r`   ra   rg  rg   r*   r*   r+   Útest_margins‘  s   
rš  zerr, args, kwargs, match)rA   z!margin must be greater than -0\.5)r   rA   r   )r   r   rA   rA   r_   )r   z'Cannot pass both positional and keyword)r]   r^   rQ  z*Must pass a single positional argument forc                 C   sX   t j| |d t ¡ }|jdd}|j|i |¤Ž W d   ƒ d S 1 s%w   Y  d S )Nr  r/   r0   )r  r  rJ   r`   ra   rg  )Úerrr8  rì   r  rY   r$   r*   r*   r+   Útest_margins_errors   s
   "ýrœ  c                 C   sz   |j dd}tdddƒ}tj|dd | |¡ | ¡ dks J ‚| j dd}t dddd¡}| |¡ | ¡ dks;J ‚d S )Nr/   r0   ró   zFoo bar $\int$r   r™  rý  )ra   r   r   Útext_2d_to_3drø  Úget_position_3dÚText3D)r8   r9   r$   ÚtxtÚt3dr*   r*   r+   Útest_text_3d¶  s   

r¢  c                  C   s>   t  ¡ } | jdd}| dgdggdgdggdgdgg¡ d S )Nr/   r0   r   r   )rJ   r`   ra   r  rg   r*   r*   r+   Útest_draw_single_lines_from_Nx1Ä  s   *r£  c                 C   s`   |j dd}t ¡ }t|ƒ}tj|ddd | |¡ | j dd}tj|ddd}| |¡ d S )Nr/   r0   )r   ró   rA  r   r   r^   ©r_   r   rt  )ra   r   Úunit_rectangler   r   Úpathpatch_2d_to_3drø  ÚPathPatch3D)r8   r9   r$   ÚpathÚpatchÚpp3dr*   r*   r+   Útest_pathpatch_3dË  s   
r«  zscatter_spiral.png)r|  r   r   c                  C   sf   t  ¡ } | jdd}t ddtj d d¡}|jt |¡t |¡|d|d  |d d	}| j	 
¡  d S )
Nr/   r0   r   r   r­   é   r   rB   ro  )rJ   r`   ra   r   rú   r   r1  r  r  r›   rœ   )rY   r$   r‘  Úscr*   r*   r+   Útest_scatter_spiralØ  s
   ,r®  c                  C   ón   t jddd…ddd…f \} }t  |¡d t  | ¡d  }t ¡ }|jddd}|j|| |d	d
}| ¡  d S ©Nr   r|   y              Y@r@   r   rp  r/   r0   Úhot)r¾   )	r   rÐ  r  r  rJ   r`   ra   r$  rß  ©r^   r]   rÃ  rY   r$   r&   r*   r*   r+   Ú#test_Poly3DCollection_get_facecolorå  ó   r³  c                  C   r¯  r°  )	r   rÐ  r  r  rJ   r`   ra   r$  Úget_edgecolorr²  r*   r*   r+   Ú#test_Poly3DCollection_get_edgecolorð  r´  r¶  zDvertical_axis, proj_expected, axis_lines_expected, tickdirs_expected)r  ç#ðk$Iò?r  ç._x%Iâ¿)r  r  çºÙ(·më?ç£å@µmÛ¿)r  r  r  g      $À)ç#ðk$Iò¿r  r  çÓø…W’$%@gŽË—›˜Ã¬?gÞ2m Ù3°?gæº¾I²’¥¿g‰®°…ÅM¨¿gÞ2m Ù3°¿g‰®°…ÅM¨?)r   r   r   )r·  r  r  r¸  )r  r¹  r  rº  )r  r  r»  r¼  gŽË—›˜Ã¬¿gæº¾I²’¥?)r   r   r   )r  r  r·  r¸  )r¹  r  r  rº  )r  r»  r  r¼  )r   r   r   c                 C   s¸   d}t jddddd}|jddd| d |jj ¡  | ¡ }tjj	|||d t
| ¡ | ¡ | ¡ gƒD ]%\}}|| }	|j ¡ }
tjj	|	|
|d || }| ¡ }tj ||¡ q4dS )	a  
    Test the actual projection, axis lines and ticks matches expected values.

    Parameters
    ----------
    vertical_axis : str
        Axis to align vertically.
    proj_expected : ndarray
        Expected values from ax.get_proj().
    axis_lines_expected : tuple of arrays
        Edgepoints of the axis line. Expected values retrieved according
        to ``ax.get_[xyz]axis().line.get_data()``.
    tickdirs_expected : list of int
        indexes indicating which axis to create a tick line along.
    gíµ ÷ÆÀ>r   r/   r0   r   )ro   rp   rq   r“  )ÚrtolN)rJ   Úsubplotrt   r`   r›   rœ   Úget_projr   r±   rJ  rL   Ú	get_xaxisÚ	get_yaxisÚ	get_zaxisr  Úget_dataÚ_get_tickdirrs  )r“  Úproj_expectedÚaxis_lines_expectedÚtickdirs_expectedr½  r$   Úproj_actualrS   r«  Úaxis_line_expectedÚaxis_line_actualÚtickdir_expectedÚtickdir_actualr*   r*   r+   Útest_view_init_vertical_axisû  s    D"

ÿörÍ  zarc_pathpatch.pngc                  C   sF   t jddddd} tjdddddd	d
}|  |¡ tj|ddd d S )Nr   r/   r0   )ró   ró   ró   gÍÌÌÌÌÌì?r{   r|   rm  )r¶   ÚheightrŠ  Útheta1Útheta2r   r_   r¤  )rJ   r¾  ÚmpatchÚArcrÜ  r   r¦  )r$   rU  r*   r*   r+   Útest_arc_pathpatchU  s   
ÿ
rÓ  zpanecolor_rcparams.pngc                  C   sP   t  ddddœ¡ t jdd} | jdd W d   ƒ d S 1 s!w   Y  d S )	Nr&   rx   ry   )zaxes3d.xaxis.panecolorzaxes3d.yaxis.panecolorzaxes3d.zaxis.panecolorrQ  r•   r/   r0   )rJ   Ú
rc_contextr`   ra   )rY   r*   r*   r+   Útest_panecolor_rcparams`  s   
þ"ürÕ  c                 C   s   | j ddd}g d¢}g d¢}g d¢}| |||d¡ g d¢|dd…< g d¢|dd…< |j ddd}g d¢}g d¢}g d¢}| |||d¡ dS )z~
    Test to see if the `z` axis does not get mutated
    after a call to `Axes3D.plot`

    test cases came from GH#8990
    rp  r/   r0   )r   r   r@   )r  r  r  zo-Nr  )r8   r9   r	  r]   r^   r_   r
  r*   r*   r+   Ú"test_mutating_input_arrays_y_and_zk  s   rÖ  c                  C   sb   t jtdd  t g d¢g d¢g d¢gt¡} tj| gdd}W d   ƒ d S 1 s*w   Y  d S )NzCYou must provide facecolors, edgecolors, or both for shade to work.r  rç  rè  rk   Tr–   )r  r  rÂ  r   r   rc  r   ré  )rê  r}   r*   r*   r+   Ú&test_Poly3DCollection_init_value_error…  s   ÿ"ür×  )¥Ú	functoolsr   r  Úmpl_toolkits.mplot3dr   r   r   r   Ú
matplotlibrç   Úmatplotlib.backend_basesr   r   r   r	   r
   r®   r   rÑ  Úmatplotlib.testing.decoratorsr   r   Úmatplotlib.testing.widgetsr   Úmatplotlib.collectionsr   r   Úmatplotlib.patchesr   r   Úmatplotlib.pathr   Úmatplotlib.textr   Úmatplotlib.pyplotÚpyplotrJ   Únumpyr   Úpartialr¼  r,   r:   rT   rZ   rh   rw   rŠ   r’   rŸ   r    r¸   rÌ   rÒ   rÔ   rÛ   ÚmarkÚparametrizerï   rù   rþ   r  r  r  r)  r-  r3  r7  r8  r=  rK  rk  rq  rs  ru  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(  r6  r=  rC  rH  rL  rU  r^  ra  rk  rx  r|  r  r€  r†  r~  Únanr  r‘  rÄ  rÆ  rÊ  rÎ  rá  rã  rï  rö  rÿ  r  r  r  r(  r)  r.  rG  ÚLEFTÚRIGHTro  r   Úcontextrt  rx  r’  r–  r˜  rš  rÂ  Útuplerµ  rœ  r¢  r£  r«  r®  r³  r¶  rÍ  rÓ  rÕ  rÖ  r×  r*   r*   r*   r+   Ú<module>   sn   ÿ
	










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







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



ÿ% 
&
ÿÿÿ
ÿ
ÿÿÿôÿ
=

	ÿQ	
ÿÿÿó

þ
üýóüýóüýóáþ2(þþ
