o
    ¹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
 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Ze jedd	d
Zdd„ Zedgƒdd„ ƒZdd„ Zedgƒdd„ ƒZedgƒdd„ ƒZ 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(„ ƒZ&ed)gd*d+d,„ ƒZ'ed-gƒd.d/„ ƒZ(ed)gd*d0d1„ ƒZ)ed2gƒd3d4„ ƒZ*ed5gƒd6d7„ ƒZ+ej, -d8dd9g¡ed)gd*d:d;„ ƒƒZ.ej, -d<d=d>g¡ed)gd*d?d@„ ƒƒZ/ed)gd*dAdB„ ƒZ0edCgdDdEdFdG„ ƒZ1edHgƒdIdJ„ ƒZ2edKgƒdLdM„ ƒZ3edNgd9dOdPdQ„ ƒZ4edRgdSdEdTdU„ ƒZ5edVgdSdEdWdX„ ƒZ6edYgƒdZd[„ ƒZ7ed\gƒd]d^„ ƒZ8ed_gƒd`da„ ƒZ9dbdc„ Z:ddde„ Z;eg df¢ƒdgdh„ ƒZ<ed)gd*didj„ ƒZ=edkgƒdldm„ ƒZ>edngƒdodp„ ƒZ?dqdr„ Z@edsgƒdtdu„ ƒZAedvgd9dOdwdx„ ƒZBedygd9dOdzd{„ ƒZCed|gd9dOd}d~„ ƒZDdd€„ ZEdd‚„ ZFdƒd„„ ZGd¹d†d‡„ZHedˆgƒd‰dŠ„ ƒZIed‹gƒdŒd„ ƒZJdŽd„ ZKdd‘„ ZLed’gƒd“d”„ ƒZMd•d–„ ZNed—gd9dOd˜d™„ ƒZOej, -dšejPejQg¡ej, -d›g dœ¢¡ddž„ ƒƒZRG dŸd „ d ƒZSd¡d¢„ ZTed)gd*d£d¤„ ƒZUd¥d¦„ ZVd§d¨„ ZWed)gd*d©dª„ ƒZXed)gd*d«d¬„ ƒZYed­gd®d¯d°d±„ ƒZZed²gd®d¯d³d´„ ƒZ[dµd¶„ Z\ej, ]d	¡ed)gd*d·d¸„ ƒƒZ^dS )ºé    N)ÚAxes3DÚaxes3dÚproj3dÚart3d)Úcm)Úcolors)Úimage_comparisonÚcheck_figures_equal)ÚLineCollectionÚPolyCollection)ÚCircleTÚdefault)Úremove_textÚstylec                  C   sP   t  ¡ } | jddd}t t¡ | d¡ W d   ƒ d S 1 s!w   Y  d S )Néo   Ú3d©Ú
projectionÚequal)ÚpltÚfigureÚadd_subplotÚpytestÚraisesÚNotImplementedErrorÚ
set_aspect©ÚfigÚax© r   úZ/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/mpl_toolkits/tests/test_mplot3d.pyÚtest_aspect_equal_error   s
   "ÿr!   z	bar3d.pngc               
   C   sx   t  ¡ } | jd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   r   r   )ÚrÚgÚbÚy)é   é   é
   r   r'   Úcr   r%   Úedgeçš™™™™™é?)ÚzsÚzdirÚalignÚcolorÚalpha)r   r   r   ÚzipÚnpÚarangeÚlenÚbar)r   r   r)   ÚzÚxsÚysÚcsr   r   r    Ú
test_bar3d   s   

ûr:   c               
   C   s^   t  ¡ } | jddd}dD ]}t t|ƒ¡}t |¡}t |¡}|j|||ddd|d qd S )Nr   r   r   )ÚredÚgreenÚblueÚyellowé   ©r/   )r   r   r   r2   r3   r4   Ú
zeros_likeÚbar3d)r   r   r)   r7   r8   r,   r   r   r    Útest_bar3d_colors(   s   

úrC   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 )Né   é   r?   ))iÄÿÿÿr&   )r&   r&   )r&   éâÿÿÿ)éx   rF   ©Úfigsizer   r   ©Ú
subplot_kwr   T©Úshade)ÚazimÚelev)r2   r3   ÚmeshgridÚravelr   r   Ú	figaspectr4   ÚsubplotsÚdictr1   rB   Ú	view_initÚcanvasÚdraw)Úxr%   Úx2dÚy2dr6   Úviewsr   Úaxsr   rN   rO   r   r   r    Útest_bar3d_shaded4   s   

þr]   zbar3d_notshaded.pngc               	   C   s~   t  ¡ } | jddd}t d¡}t d¡}t ||¡\}}| ¡ | ¡ }}|| }|j|||d dd|dd	 | j 	¡  d S )
Nr   r   r   rD   rE   r   r?   FrL   )
r   r   r   r2   r3   rP   rQ   rB   rV   rW   )r   r   rX   r%   rY   rZ   r6   r   r   r    Útest_bar3d_notshadedH   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 S )Nr?   r   r   r   éZ   )ÚazdegÚaltdeg)é   rD   c                    s   g | ]	}t  |ˆ  ¡‘qS r   )r   Úcoolwarm)Ú.0Úi©Úarear   r    Ú
<listcomp>c   ó    z*test_bar3d_lightsource.<locals>.<listcomp>T)	rX   r%   r6   ÚdxÚdyÚdzr/   rM   Úlightsourceé   )r   r   r   ÚmcolorsÚLightSourcer2   rP   r3   rQ   ÚrangerB   ÚtestingÚassert_array_equalÚ_facecolor3d)
r   r   ÚlsÚlengthÚwidthrX   r%   rl   r/   Ú
collectionr   rf   r    Útest_bar3d_lightsourceU   s   
þry   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   r   çš™™™™™©?r6   éœÿÿÿ)r-   ÚoffsetÚcmaprX   éØÿÿÿr%   é(   éd   )r   r   Úgcar   Úget_test_dataÚcontourr   rc   Úset_xlimÚset_ylimÚset_zlim©r   r   ÚXÚYÚZr   r   r    Útest_contour3dp   ó   r   zcontourf3d.pngc                  C   rz   r{   )r   r   rƒ   r   r„   Úcontourfr   rc   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   r   éþÿÿÿé   ç      Ð?r   çš™™™™™¹?rE   çš™™™™™¹¿)r~   Úlevelsr   éÿÿÿÿr?   )r   r   rƒ   r2   rP   r3   Úclipr   r   rc   r†   r‡   rˆ   r‰   r   r   r    Útest_contourf3d_fillŠ   s   $r™   ztricontour.pngc                  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   r   )	r   r   r2   ÚrandomÚseedÚrandr   Ú
tricontourÚtricontourf)r   rX   r%   r6   r   r   r   r    Útest_tricontour™   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   r   éüÿÿÿrD   r‚   r‘   r’   r?   )	r   r   rƒ   r2   ÚlinspaceÚpiÚsinÚcosÚplot)r   r   Úthetar6   r"   rX   r%   r   r   r    Útest_lines3d¨   s   r©   Úpng)Ú
extensionsc                 C   s<   | j dd}| dgdgd¡ |j dd}| ddd¡ d S )Nr   r   r?   Úo)rƒ   r§   ©Úfig_testÚfig_refÚax1Úax2r   r   r    Útest_plot_scalar´   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’   )r2   r¦   r¤   Úexp)Útr   r   r    Úf¾   s    ztest_mixedsubplots.<locals>.fg        g      @r”   g{®Gáz”?ç       @rH   r’   r?   Úbozk--r<   )ÚmarkerfacecolorTr   r   éûÿÿÿrE   r“   r   r   F)ÚrcountÚccountÚ	linewidthÚantialiasedr—   )r2   r3   r   r   rR   r   r§   ÚgridrP   Úhypotr¥   Úplot_surfaceÚ
set_zlim3d)	rµ   Út1Út2r   r   rŠ   r‹   ÚRrŒ   r   r   r    Útest_mixedsubplots¼   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   r   r›   zsome string©Ús)rƒ   ÚtextÚtight_layoutr­   r   r   r    Útest_tight_layout_textÔ   s   rÊ   zscatter3d.pngc                  C   sp   t  ¡ } | jddd}|jt d¡t d¡t d¡ddd t dd¡ } }}|j|||d	d
d d|d< d S )Nr   r   r   r(   r"   r¬   )r)   Úmarkerr'   r$   ú^r   r—   ©r   r   r   Úscatterr2   r3   )r   r   rX   r%   r6   r   r   r    Útest_scatter3dá   s   ÿrÏ   zscatter3d_color.pngc                  C   s–   t  ¡ } | jd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   r   r   r(   r"   Únoner¬   )Ú	facecolorÚ	edgecolorrË   r'   r$   rÇ   )r/   rË   rÍ   r   r   r   r    Útest_scatter3d_colorì   s   ÿÿ"
ÿrÓ   Ú
depthshadeFc                 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?   ÚC0ÚC1rE   ÚC2rn   rD   ÚC3ÚC4ÚC5ÚC6é	   ÚC7c                 S   s   g | ]}|  ¡ ‘qS r   )Úflatten©rd   Úar   r   r    rh     s    ÿÿz*test_scatter3d_sorting.<locals>.<listcomp>r   r   c                 s   s    | ]}t  |¡V  qd S ©N)r2   Úuniquerà   r   r   r    Ú	<genexpr>  s   € z)test_scatter3d_sorting.<locals>.<genexpr>©Údtype)rÇ   ÚfcÚecÚlwr0   rÔ   )r2   Úmgridr3   ÚsizeÚreshapeÚshapeÚfullrƒ   Ú	itertoolsÚproductÚmaÚmasked_arrayÚfloatÚrepeatÚsumÚmaskrÎ   )r¯   r®   rÔ   r%   rX   r6   ÚsizesÚ
facecolorsÚ
edgecolorsÚ
linewidthsÚax_refÚsetsrÇ   rç   rè   ré   ÚsubsetÚax_testr   r   r    Útest_scatter3d_sortingü   sN   þÿþýÿÿ
ÿrÿ   rN   éÎÿÿÿé‚   c              	   C   s¨   ddg}ddg}ddg}ddg}| j dd}|j|||d|d	 |jd|d
 |j dd}|j|ddd… |ddd… |ddd… d|ddd… d	 |j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.
    r—   r?   r   r$   r%   r   r   é¬  ©rÇ   r)   ©rO   rN   N)r   rÎ   rU   ©r®   r¯   rN   rX   r%   r6   r/   r   r   r   r    Ú$test_marker_draw_order_data_reversed4  s   	<r  c              	   C   s¢   d}ddg}ddg}ddg}ddg}| j dd}| ¡  |j|||d	|d
 |jd|d |j dd}| ¡  |j|||d	|ddd… d
 |jd|d d dS )z­
    Test that the draw order changes with the direction.

    If we rotate *azim* by 180 degrees and exchange the colors, the plot
    plot should look the same again.
    r  r—   r?   r   r$   r%   r   r   r  r  r  Né´   )r   Úset_axis_offrÎ   rU   r  r   r   r    Ú#test_marker_draw_order_view_rotatedI  s   r	  zplot_3d_from_2d.pngç{®Gáz„?)Útolc                  C   sV   t  ¡ } | jddd}t dd¡}t dd¡}|j||ddd |j||dd	d d S )
Nr   r   r   r   rE   r(   rX   )r,   r-   r%   )r   r   r   r2   r3   r§   )r   r   r7   r8   r   r   r    Útest_plot_3d_from_2da  s   r  zsurface3d.pngc               
   C   s’   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 )Nr   r   r¹   rE   r“   r   r   F)rº   r»   r   ré   r½   ç)\Âõ(ð¿ç)\Âõ(ð?r›   )ÚshrinkÚaspect)r   r   rƒ   r2   r3   rP   r¿   r¥   rÀ   r   rc   rˆ   Úcolorbar)r   r   rŠ   r‹   rÄ   rŒ   Úsurfr   r   r    Útest_surface3dk  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   r   r¹   rE   r“   r’   )r“   r?   r“   r?   F)ÚrstrideÚcstrider/   ré   r½   r  r  )
r   r   rƒ   r2   r3   rP   Úsqrtr¥   rÀ   rˆ   )r   r   rŠ   r‹   rÄ   rŒ   r   r   r    Útest_surface3d_shadedz  s   

ÿr  z
text3d.png)r   c                  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   r   )NrX   r%   r6   ©r?   r?   r   ©r?   r?   r?   )r’   rn   rD   rÝ   é   r’   )rn   rD   é   r  r’   r’   )rD   r’   rE   rn   r?   r  z(%d, %d, %d), dir=%sr?   r;   r@   r|   gffffffî?z2D Text)Ú	transformr   r(   zX axiszY axiszZ axis)r   r   rƒ   r1   rÈ   Útext2DÚ	transAxesÚ
set_xlim3dÚ
set_ylim3drÁ   Ú
set_xlabelÚ
set_ylabelÚ
set_zlabel)r   r   Úzdirsr7   r8   r,   r-   rX   r%   r6   Úlabelr   r   r    Útest_text3dˆ  s"   

r&  ztrisurf3d.pngg¸…ë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|||tjdd d S )Né$   r  ç      À?ç      ð?r   r’   F©Úendpoint.r?   ©Úaxisr   r   çš™™™™™É?)r   r¼   )r2   r£   r¤   rô   ÚnewaxisÚappendr¦   rß   r¥   r   r   rƒ   Úplot_trisurfr   Újet©	Ún_anglesÚn_radiiÚradiiÚanglesrX   r%   r6   r   r   r   r   r    Útest_trisurf3d   s   $r8  ztrisurf3d_shaded.pngc            	      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   r   )r?   r›   r   r.  )r/   r¼   )r2   r£   r¤   rô   r/  r0  r¦   rß   r¥   r   r   rƒ   r1  r3  r   r   r    Útest_trisurf3d_shaded²  s   $r9  zwireframe3d.pngc                  C   s>   t  ¡ } | jddd}t d¡\}}}|j|||ddd d S )Nr   r   r   r|   é   ©rº   r»   ©r   r   r   r   r„   Úplot_wireframer‰   r   r   r    Útest_wireframe3dÄ  ó   r>  zwireframe3dzerocstride.pngc                  C   ó>   t  ¡ } | jddd}t d¡\}}}|j|||ddd d S )Nr   r   r   r|   r:  r   r;  r<  r‰   r   r   r    Útest_wireframe3dzerocstrideÌ  r?  rA  zwireframe3dzerorstride.pngc                  C   r@  )Nr   r   r   r|   r   r(   ©r  r  r<  r‰   r   r   r    Útest_wireframe3dzerorstrideÔ  r?  rC  c                  C   sj   t  ¡ } | jddd}t d¡\}}}t t¡ |j|||ddd W d   ƒ d S 1 s.w   Y  d S )Nr   r   r   r|   r   rB  )	r   r   r   r   r„   r   r   Ú
ValueErrorr=  r‰   r   r   r    Ú test_wireframe3dzerostrideraisesÜ  s   "ÿrE  c                  C   s¨   t  ¡ } | jd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 sMw   Y  d S )	Nr   r   r   r|   r(   é2   )r  r»   )r  rº   )
r   r   r   r   r„   r   r   rD  r=  rÀ   r‰   r   r   r    Útest_mixedsamplesraisesä  s   ÿ"ÿrG  )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 )Nr—   r+   ù              $@ç333333ã?ù              @ç>,p½ ê?)ÚtipÚmiddleÚtailr   r   r”   T©rv   ÚpivotÚ	normalize)	r2   Úogridr¥   r¤   r¦   r   r   r   Úquiver)rX   r%   r6   ÚuÚvÚwrP  r   r   r   r    Útest_quiver3dî  s   (024þrW  c           	      C   sP   |j dd g  } } } } }}| j dd}|j||||||dddd	 d S )Nr   r   r”   rL  TrO  )r   rS  )	r®   r¯   rX   r%   r6   rT  rU  rV  r   r   r   r    Útest_quiver3d_emptyú  s    rX  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   r   r—   r+   rH  rI  rJ  rK  çš™™™™™Ù¿r”   F)Úcopygffffffæ?rL  TrO  )r   r   rƒ   r2   rê   r¥   r¤   r¦   rñ   Úmasked_whererS  )r   r   rX   r%   r6   rT  rU  rV  r   r   r    Útest_quiver3d_masked  s   (024 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   r   ©r   r   r?   ©r   r?   r?   ©r   r   r   r  r  rb   Úk)r›   r›   r?   r›   T©rú   rÒ   rÑ   Úclosed)r?   r›   r›   r›   F)	r   r   rƒ   r2   Úarrayró   r   ÚPoly3DCollectionÚadd_collection3d©r   r   Úpoly1Úpoly2Úc1Úc2r   r   r    Útest_poly3dcollection_closed  s   ÿÿ
rk  c                  C   s6   t g ƒ} t | ¡ t| tjƒsJ ‚|  ¡ g ksJ ‚d S râ   )r   r   Úpoly_collection_2d_to_3dÚ
isinstancerd  Ú	get_paths)Úpolyr   r   r    Ú#test_poly_collection_2d_to_3d_empty#  s   
rp  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   r   r]  r^  r_  r  r  rb   r`  )r›   r›   r?   Tra  r›   )r?   r›   r›   F)
r   r   rƒ   r2   rc  ró   r   rd  Ú	set_alphare  rf  r   r   r    Útest_poly3dcollection_alpha*  s   ÿ
ÿ

rr  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¡ | 	d¡ d|j
_d|j_t|j
 ¡ ƒD ]\}}| | ¡ |d	  ¡ q;d S )
Nzaxes.labelpadzX LABELr(   )ÚlabelpadzY LABELzZ LABELr'   r€   rE   )r   r   r   Úxaxisrs  ÚmplÚrcParamsr!  r"  r#  ÚyaxisÚzaxisÚ	enumerateÚget_major_ticksÚset_padÚget_pad)r   r   re   Ú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   r   )r   r   r   r  Úclar   r   r   r    Útest_axes3d_claO  s   r€  zaxes3d_rotated.pngc                  C   s*   t  ¡ } | jddddd}| dd¡ d S )Nr?   r   r   r_   é-   )r   r   r   rU   r   r   r   r    Útest_axes3d_rotatedX  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)é   rn   rH   r?   r’   r   r   )r2   r£   rP   rœ   Úrandnr   r   r   r   r   rD  rÀ   )rX   r%   rŠ   r‹   r6   r   r   r   r   r    Útest_plotsurface_1d_raises_  s   "ÿr†  c                  C   sT   t  g d¢¡} t  g d¢¡}t  g d¢¡}t | ||¡}t dd¡}t  ||¡}|S )N)rš   iüÿÿiÐ  )r‚   r‚   r‚   r]  r‚   r}   )r2   rc  r   Úview_transformationÚpersp_transformationÚdot)ÚErÄ   ÚVÚviewMÚperspMÚMr   r   r    Ú_test_proj_make_Mk  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  r2   rc  r   Úproj_transformÚinv_transformrr   Úassert_almost_equal)
rŽ  r7   r8   r,   ÚtxsÚtysÚtzsÚixsÚiysÚizsr   r   r    Útest_proj_transformv  s   r  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¬   rX   r%   r6   )r   r”  r1   r   rS   r
   Úadd_collectionrÈ   )rŽ  rÇ   ÚargsÚkwargsr7   r8   r,   r—  r˜  r™  r¬   r   ÚayÚazÚlinesr   ÚlinecrX   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  Úsplitr2   rc  r   r”  r¥  rÎ   r§   r1   rÈ   r†   r‡   )rŽ  Útsr7   r8   r,   r—  r˜  r™  r   r   rX   r%   r´   r   r   r    Útest_proj_axes_cube–  s   r«  zproj3d_axes_cube_ortho.pngc                  C   s  t  g d¢¡} t  g d¢¡}t  g d¢¡}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 ]\}}}| |||¡ qr| dd¡ | dd¡ d S )N)éÈ   r‚   r‚   r_  r]  r—   r?   r¦  r  r‚   r’  r“  é–   rÆ   é,  r"   r§  i8ÿÿÿr¬  )r2   rc  r   r‡  Úortho_transformationr‰  r©  r”  r¥  rÎ   r§   r1   rÈ   r†   r‡   )rŠ  rÄ   r‹  rŒ  ÚorthoMrŽ  rª  r7   r8   r,   r—  r˜  r™  r   r   rX   r%   r´   r   r   r    Útest_proj_axes_cube_ortho¬  s$   r±  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 )	N)r?   r   r   r?   rn   )r   r?   r   r?   r   rb   r’   r›   r?   )r   Úrot_xr2   r¤   rr   Úassert_allcloser  )r‹  Ú	rotated_Vr   r   r    Útest_rotÇ  s   $rµ  c                  C   sV   d\} }d\}}d\}}t  | |||||¡}tj |g d¢g d¢g d¢g d¢g¡ d S )N)r‚   rG   )r}   r‚   )r”   r.  )r|   r   r   r¹   )r   g{®Gázt?r   r›   )r   r   g      $@r—   )r   r   r   r?   )r   Úworld_transformationr2   rr   r³  )ÚxminÚxmaxÚyminÚymaxÚzminÚzmaxrŽ  r   r   r    Ú
test_worldÑ  s   ýÿr½  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¡¡}t|||ƒD ]\}}}	t
||f|	d	d
}
| |
¡ qF| dd¡ | d	d¡ d S )N)rD   rn   r   )r  )rI   rK   )r   r&   )r'   r­  )r   r   r'   r&   )r‚   r­  r&   r¬  r   )Úfillr   r­  r®  )r   rS   rT   r§   r1   rÎ   r   Ú_line2d_seg_distr2   rc  r   Ú	add_patchr†   r‡   )r   r   r7   r8   Úp0Úp1ÚdistrX   r%   Údr)   r   r   r    Útest_lines_distsÝ  s   rÅ  c                  C   s   t jddid\} }|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sFJ ‚d S )Nr   r   rJ   r   r”   r.  )rX   r%   r6   r?   )r   r?   r•   çš™™™™™ñ?r¨  g333333ó?FTr’   )r   r?   r•   rÆ  rY  g333333@)r   rS   Úmarginsr§   Ú
get_w_limsÚ	autoscaleÚset_autoscalez_onr   r   r   r    Útest_autoscaleô  s   

rË  zaxes3d_ortho.pngc                  C   s"   t  ¡ } | jdd}| d¡ d S )Nr   r   Úortho)r   r   rƒ   Úset_proj_typer   r   r   r    Útest_axes3d_orthoÿ  s   rÎ  Úvalue)ÚsetterÚside))r  Úleft)r  Úright)r   Úbottom)r   Útop)rÁ   rÔ  )rÁ   rÕ  c                 C   sb   ||i}t  ¡ }|jddd}t t¡ t|| ƒdi |¤Ž W d   ƒ d S 1 s*w   Y  d S )Nr   r   r   r   )r   r   r   r   r   rD  Úgetattr)rÐ  rÑ  rÏ  Úlimitr   Ú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 )Nr   r   rJ   )rE   rD   rb   )r   rS   r2   ÚindicesÚvoxels)Úselfr   r   rX   r%   r6   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 )Nr   r   rJ   )rE   rE   rD   r’   g      ø?g]Âõ(\@rb   r×   )rú   rÒ   rØ   )r   rS   r2   rÛ  rÜ  ÚmaxÚkeysÚset_edgecolor)rÝ  r   r   rX   r%   r6   rÜ  rU  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.r   r   rJ   ©r(   r(   r(   r?   rÖ   rå   z0.25rE   Úcyanr(   ©rø   N)r   rS   r2   rÛ  rî   Úobject_rÜ  ©rÝ  r   r   rX   r%   r6   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.r   r   rJ   rã  )r(   r(   r(   rb   rÝ   ©.r   ©.r?   ©.r’   rå  N)r   rS   r2   rÛ  ÚzerosrÜ  rç  r   r   r    Útest_rgb_data8  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 )Nr   r   rJ   rã  r’   )r(   r(   r(   rD   )r?   r   r   r›   )r   r?   r   r›   rå  zfaces returned for absent voxel)r   rS   r2   rÛ  Úabsrì  rÜ  ÚtyperT   Úitemsrm  r   rd  )rÝ  r   r   rX   r%   r6   Úv1Úv2rÜ  r   rU  Úcoordro  r   r   r    Ú
test_alphaE  s   
þzTestVoxels.test_alphazvoxels-xyz.pngr
  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 )Nr   r   rJ   c                 S   sZ   d}t | jƒD ]#}| |tjd d…   | |tjdd …    d } |tjd d … 7 }q| S )Nr   r—   r?   r¶   )rq   Úndimr2   Ú	index_exp)rX   Úslre   r   r   r    Ú	midpoints[  s   ÿÿz&TestVoxels.test_xyz.<locals>.midpoints)é   rù  rù  g      0@r›   r’   r“   )rb   ré  rê  rë  r   r?   )rø   rù   r¼   )r   rS   r2   rÛ  rì  rí   rÜ  r˜   )rÝ  r   r   rø  r"   r#   r$   ÚrcÚgcÚbcÚspherer   r   r   r    Útest_xyzW  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 )N)rb   rD   rE   )r’   rb   rD   r   r   rJ   r`  )rÒ   ÚfilledrÜ  )Úmatch)rÿ  )rÿ  rX   r%   r6   r   )r2   rÛ  Úonesr   rS   rT   rÜ  r   r   Ú	TypeErrorÚAttributeError)rÝ  rX   r%   r6   rÿ  r   r   Úkwr   r   r    Útest_calling_conventionsx  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}| | ||¡}|d }	tj | ||f|	 ¡ ¡ |	 |||¡ tj |||f|	 ¡ ¡ d S )Nr   r?   r’   rb   rD   rE   rn   r  r  rÝ   r(   é   r   r   r   )	r   r   r   r§   r2   rr   rs   Úget_data_3dÚset_data_3d)
rX   r%   r6   Úx2Úy2Úz2r   r   r£  Úliner   r   r    Útest_line3d_set_get_data_3d‘  s   r  c                 C   s`   | j dd}| g d¢g d¢g d¢¡ | ¡  |j dd}| ¡  | g d¢g d¢g d¢¡ d S )Nr   r   )r?   r?   r(   r(   )r?   r(   r(   r(   )r?   r?   r?   r(   )r   r§   Úinvert_yaxis)r®   r¯   r   r   r   r    Útest_inverted  s   r  c                  C   s°   t jddid\} }| ¡ rJ ‚| ¡ rJ ‚| ¡ rJ ‚| dd¡ | dd¡ | dd¡ | ¡ s4J ‚| ¡ s:J ‚| ¡ s@J ‚| ¡  | ¡ rJJ ‚| ¡ rPJ ‚| ¡ rVJ ‚d S )Nr   r   rJ   r?   r   )	r   rS   Úxaxis_invertedÚyaxis_invertedÚzaxis_invertedr†   r‡   rˆ   r  r   r   r   r    Útest_inverted_cla©  s   r  c                  C   s¨   t  ¡ } t| ƒ}|jddd |jddd |jddd | j ¡  |j ¡ D ]
}|jj	dks1J ‚q'|j
 ¡ D ]
}|jj	dksAJ ‚q7|j ¡ D ]
}|jj	dksQJ ‚qGd S )NrX   r;   )r-  r   r%   r6   )r   r   r   Útick_paramsrV   rW   rt  rz  Ú	tick1lineÚ_colorrw  rx  )r   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 )NrD   rE   r   r   rJ   g    ÐcAg   @ÑcA)rX   r%   r6   Úbothr   Úplain)r-  r   r?   )r‘   r’   )r-  Ú	scilimitsr’   zaxes.formatter.useoffset)r-  Ú	useOffsetrb   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   )rÖ  Úget_major_formatter)rd   Úname©r   r   r    rh   á  ri   zAtest_ticklabel_format.<locals>.get_formatters.<locals>.<listcomp>r   )r   Únamesr   r$  r    Úget_formattersà  s   z-test_ticklabel_format.<locals>.get_formattersrt  rw  rx  )rt  rw  rx  F)rS   Úflatr†   r1   Úticklabel_formatru  rv  Úset_scientificÚset_powerlimitsÚset_useOffsetÚset_useLocaleÚset_useMathText)	r®   r¯   r\   r   Úrowr#  r&  r%  Úfmtr   r   r    Útest_ticklabel_formatÎ  sR   
ÿÿÿÿ
þ
ÿ
ÿÿõr0  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 )
NrM  gš™™™™™é¿r?   r.  r+   )r?   r)  r   r   )rv   rP  )r2   rP   r3   Ú	ones_liker1   rƒ   rS  )r®   r¯   rP  rX   r%   r6   rT  rU  rV  r   rv   r   r   r   r    Útest_quiver3D_smokeö  s   
ýþr2  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   r   r“   T)ÚminorÚquarterg…ëQ¸Õ?Úthirdr›   Úhalf)	r   r   r   Ú
set_xticksÚset_xticklabelsÚ
set_yticksÚset_yticklabelsÚ
set_zticksÚset_zticklabelsr$  r   r   r    Útest_minor_ticks  s   r>  zequal_box_aspect.pngc                  C   sr  ddl m} m} t ¡ }|jd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Ž qbt | ¡ | ¡ | ¡ g¡}t|d ƒt|d	 ƒg}| |¡ | |¡ | |¡ | d¡ | d¡ d S )Nr   )rð   Úcombinationsr   r   r   r’   r‚   r—   r?   r/   r$   Úoffr  )rï   rð   r?  r   r   r   r2   r£   r¤   Úouterr¦   r¥   r1  rÀ   rc  Úlistrõ   rî  Úplot3Dr1   Úcolumn_stackÚ
get_xlim3dÚ
get_ylim3dÚ
get_zlim3dÚminrß  r  r   rÁ   r-  Úset_box_aspect)rð   r?  r   r   rT  rU  rX   r%   r6   r"   rÇ   ÚeÚxyzlimÚXYZlimr   r   r    Útest_equal_box_aspect  s.   $$€ÿ



rM  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?   )rD   rE   Tr   r   )rI   Úconstrained_layoutrK   rE   Ú
horizontal)r   Úorientationr.  )r   rS   r1  r2   rœ   r…  r  rV   rW   r   Úget_positionÚextents)Ú	num_plotsr   r\   r   Úp_triÚcbarr   r   r    Útest_colorbar_pos4  s   

þ
ÿ
rV  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   rE   r?   r   r   r   r   Úviridis)r)   rÇ   r   )r2   rc  rB  rï   rð   r3   ÚTr   rÎ   rV   rW   Úchanged)
r®   r¯   rX   r%   r6   r)   rþ   Úsc_testrû   Úsc_refr   r   r    Útest_scalarmap_updateD  s   þþ
r\  )r?   )_Ú	functoolsrï   r   Úmpl_toolkits.mplot3dr   r   r   r   Ú
matplotlibru  r   r   ro   Úmatplotlib.testing.decoratorsr   r	   Úmatplotlib.collectionsr
   r   Úmatplotlib.patchesr   Úmatplotlib.pyplotÚpyplotr   Únumpyr2   Úpartialr	  r!   r:   rC   r]   r^   ry   r   r   r™   r¡   r©   r²   rÅ   rÊ   rÏ   rÓ   ÚmarkÚparametrizerÿ   r  r	  r  r  r  r&  r8  r9  r>  rA  rC  rE  rG  rW  rX  r\  rk  rp  rr  r~  r€  r‚  r†  r  r  r¥  r«  r±  rµ  r½  rÅ  rË  rÎ  ÚinfÚnanrÙ  rÚ  r  r  r  r  r0  r2  r>  rM  rV  r   r\  r   r   r   r    Ú<module>   sþ    ÿ
















6



	








ÿ















z




'



"

