o
    ØtBh&ã  ã                   @   sL  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 d dl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 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j+ ,d&d'g d(¢gd)g d*¢gd+g d,¢gg¡ed-gd.d/d0„ ƒƒZ-e!d1gd2d3d4d5„ ƒZ.d6d7„ Z/e!d8gƒd9d:„ ƒZ0ed-gd.d;d<„ ƒZ1e!d=gƒd>d?„ ƒZ2ed-gd.d@dA„ ƒZ3e!dBgƒdCdD„ ƒZ4e!dEgƒdFdG„ ƒZ5ed-gd.dHdI„ ƒZ6ej+ ,dJddKg¡ed-gd.dLdM„ ƒƒZ7ej+ ,dNdOdPg¡ed-gd.dQdR„ ƒƒZ8ed-gd.dSdT„ ƒZ9e!dUgdVd3dWdX„ ƒZ:e!dYgƒdZd[„ ƒZ;e!d\gƒd]d^„ ƒZ<e!d_gƒd`da„ ƒZ=e!dbgƒdcdd„ ƒZ>e!degdKdfdgdh„ ƒZ?ed-gd.didj„ ƒZ@e!dkgdld3dmdn„ ƒZAe!dogdpd3dqdr„ ƒZBe!dsgƒdtdu„ ƒZCe!dvgƒdwdx„ ƒZDe!dygƒdzd{„ ƒZEd|d}„ ZFd~d„ ZGe!g d€¢ƒdd‚„ ƒZHed-gd.dƒd„„ ƒZIe!d…gƒd†d‡„ ƒZJdˆd‰„ ZKed-gd.dŠd‹„ ƒZLdŒd„ ZMe!dŽgƒdd„ ƒZNd‘d’„ ZOe!d“gƒd”d•„ ƒZPe!d–gƒd—d˜„ ƒZQe!d™gƒdšd›„ ƒZRe!dœgdKdfddž„ ƒZSe!dŸgdKdfd d¡„ ƒZTe!d¢gdKdfd£d¤„ ƒZUd¥d¦„ ZVd§d¨„ ZWd©dª„ ZXd"d¬d­„ZYe!d®gƒd¯d°„ ƒZZe!d±gƒd²d³„ ƒZ[d´dµ„ Z\d¶d·„ Z]e!d¸gƒd¹dº„ ƒZ^d»d¼„ Z_d½d¾„ Z`ej+ ,d¿dÀ¡ej+ ,dÁdÂ¡dÃdÄ„ ƒƒZae!dÅgdKdfdÆdÇ„ ƒZbe!dÈgƒdÉdÊ„ ƒZcej+ ,dËejdejeg¡ej+ ,dÌg dÍ¢¡dÎdÏ„ ƒƒZfG dÐdÑ„ dÑƒZgdÒdÓ„ Zhed-gd.dÔdÕ„ ƒZidÖd×„ ZjdØdÙ„ Zked-gd.dÚdÛ„ ƒZled-gd.dÜdÝ„ ƒZmedÞgdßdàdádâ„ ƒZne!dãgƒdädå„ ƒZoe!dægƒdçdè„ ƒZpedégdßdêdëdìdí„ ƒZqedîgdßdàdïdð„ ƒZrdñdò„ Zsdódô„ Ztdõdö„ Zue	jv wd¡ed-gd.d÷dø„ ƒƒZxdùdú„ Zyedûgdd-gdüdýdþ„ ƒZzedÿgddd dd„ ƒZ{ej+ ,ddg d¢g d¢g d¢g d¢gd	d
gddgfdd
gddgfddgddgfgg d¢fdg d¢g d¢g d¢g d¢gd
dgddgfddgddgfd	d
gddgfgg d¢fdg d¢g d¢g d¢g d¢gddgddgfd
d	gddgfd
dgddgfgg d¢fg¡dd„ ƒZ|dd„ Z}dd„ Z~d d!„ ZdS (#  é    N)ÚAxes3DÚaxes3dÚproj3dÚart3d)ÚMouseButton)ÚMatplotlibDeprecationWarning)Úcm)Úcolors)Úimage_comparisonÚcheck_figures_equal)Ú
mock_event)ÚLineCollectionÚPolyCollection)ÚCircleTÚdefault)Úremove_textÚstylec                  C   sN   t  ¡ } | jdd}t t¡ | d¡ W d   ƒ d S 1 s w   Y  d S )NÚ3d©Ú
projectionÚequal)ÚpltÚfigureÚadd_subplotÚpytestÚraisesÚNotImplementedErrorÚ
set_aspect©ÚfigÚax© r!   úv/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/mpl_toolkits/tests/test_mplot3d.pyÚtest_aspect_equal_error   s
   "ÿr#   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   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 ]}t t|ƒ¡}t |¡}t |¡}|j|||ddd|d qd S )Nr   r   )ÚredÚgreenÚblueÚyellowé   ©r1   )r   r   r   r4   r5   r6   Ú
zeros_likeÚbar3d)r   r    r+   r9   r:   r.   r!   r!   r"   Útest_bar3d_colors,   s   

úrE   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é   é   rA   ))iÄÿÿÿr(   )r(   r(   )r(   éâÿÿÿ)éx   rH   ©Úfigsizer   r   ©Ú
subplot_kwr   T©Úshade©ÚazimÚelev)r4   r5   ÚmeshgridÚravelr   r   Ú	figaspectr6   ÚsubplotsÚdictr3   rD   Ú	view_initÚcanvasÚdraw)Úxr'   Úx2dÚy2dr8   Úviewsr   Úaxsr    rQ   rR   r!   r!   r"   Útest_bar3d_shaded8   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   r   rF   rG   r   rA   FrN   )
r   r   r   r4   r5   rS   rT   rD   rY   rZ   )r   r    r[   r'   r\   r]   r8   r!   r!   r"   Útest_bar3d_notshadedL   s   

ra   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 )NrA   r   r   r   éZ   )ÚazdegÚaltdeg)é   rF   c                    s   g | ]	}t  |ˆ  ¡‘qS r!   )r   Úcoolwarm)Ú.0Úi©Úarear!   r"   Ú
<listcomp>g   ó    z*test_bar3d_lightsource.<locals>.<listcomp>T)	r[   r'   r8   ÚdxÚdyÚdzr1   rO   Úlightsourceé   )r   r   r   ÚmcolorsÚLightSourcer4   rS   r5   rT   ÚrangerD   ÚtestingÚassert_array_equalÚ_facecolor3d)
r   r    ÚlsÚlengthÚwidthr[   r'   ro   r1   Ú
collectionr!   ri   r"   Útest_bar3d_lightsourceY   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   r   çš™™™™™©?r8   éœÿÿÿ)r/   ÚoffsetÚcmapr[   éØÿÿÿr'   é(   éd   )r   r   r   r   Úget_test_dataÚcontourr   rf   Úset_xlimÚset_ylimÚset_zlim©r   r    ÚXÚYÚZr!   r!   r"   Útest_contour3dt   ó   r   zcontourf3d.pngc                  C   r}   r~   )r   r   r   r   r†   Úcontourfr   rf   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   çš™™™™™¹?rG   çš™™™™™¹¿)r   Úlevelsr‚   éÿÿÿÿrA   )r   r   r   r4   rS   r5   Úclipr‘   r   rf   rˆ   r‰   rŠ   r‹   r!   r!   r"   Útest_contourf3d_fillŽ   s   $r›   zextend, levelsÚboth)r”   rF   rq   Úmin)r”   rF   rq   é   Úmax)r   r”   rF   rq   Úpng)Ú
extensionsc                 C   sò   t  t  ddd¡t  ddd¡¡\}}|d |d  }t 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   éÿ   rA   é   )ÚvminÚvmaxr‚   r   r   r˜   )r   r”   rF   rq   rž   Úextendéöÿÿÿr*   )r4   rS   r5   r   Úget_cmapÚcopyÚ	set_underÚset_overr   r‘   rˆ   r‰   rŠ   )Úfig_testÚfig_refr§   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”   rA   r   r   )	r   r   r4   ÚrandomÚseedÚrandr   Ú
tricontourÚtricontourf)r   r[   r'   r8   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   r   )r(   r)   r¨   r*   r   r”   r¶   )r   r   r   r4   Úlinspacer·   Úrandintr‡   )r   r    ÚnxÚnyr[   r'   r8   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   r   éüÿÿÿrF   r…   r“   r”   rA   )	r   r   r   r4   r½   ÚpiÚsinÚcosÚplot)r   r    Úthetar8   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   r   rA   Úo)r   rÆ   ©r­   r®   Ú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”   )r4   rÅ   rÃ   Úexp)Útr!   r!   r"   Úfé   s    ztest_mixedsubplots.<locals>.fç        ç      @r–   r³   ç       @rJ   r”   rA   Úbozk--r>   )ÚmarkerfacecolorTr   r   éûÿÿÿrG   r•   r„   r   F)ÚrcountÚccountÚ	linewidthÚantialiasedr™   )r4   r5   r   r   rU   r   rÆ   ÚgridrS   Ú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   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   r   r*   r$   rÉ   )r+   Úmarkerr)   r&   ú^r   r™   rŒ   ©r   r   r   Úscatterr4   r5   ©r   r    r[   r'   r8   r!   r!   r"   Útest_scatter3d  s   ÿrí   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   r   r*   r$   ÚnonerÉ   )Ú	facecolorÚ	edgecolorrè   r)   r&   rä   )r1   rè   rê   r   r!   r!   r"   Útest_scatter3d_color  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   r   r*   rÉ   )rè   ÚC1ÚC2g333333Ó?çffffffæ?rG   FéK   re   )rè   rï   rð   r2   Ú
depthshaderä   Ú
linewidths)r   rë   r4   r5   Úset_facecolorÚset_edgecolorÚ	set_alphaÚget_depthshadeÚset_depthshadeÚ	set_sizesÚfullÚset_linewidths)r®   r­   r±   r+   r°   r!   r!   r"   Útest_scatter3d_modification)  s"   ÿ




þr   rö   Fc                 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”   rA   ÚC0rò   rG   ró   rq   rF   ÚC3ÚC4ÚC5ÚC6é	   ÚC7c                 S   s   g | ]}|  ¡ ‘qS r!   )Úflatten©rg   Úar!   r!   r"   rk   X  s    ÿÿz*test_scatter3d_sorting.<locals>.<listcomp>r   r   c                 s   s    | ]}t  |¡V  qd S ©N)r4   Úuniquer
  r!   r!   r"   Ú	<genexpr>^  s   € z)test_scatter3d_sorting.<locals>.<genexpr>©Údtype)rä   ÚfcÚecÚlwr2   rö   )r4   Úmgridr5   ÚsizeÚreshapeÚshaperþ   r   Ú	itertoolsÚproductÚmaÚmasked_arrayÚfloatÚrepeatÚsumÚmaskrë   )r®   r­   rö   r'   r[   r8   ÚsizesÚ
facecolorsÚ
edgecolorsr÷   r°   Úsetsrä   r  r  r  Úsubsetr±   r!   r!   r"   Útest_scatter3d_sorting>  sN   þÿþýÿÿ
ÿr%  rQ   éÎÿÿÿé‚   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™   rA   r   r&   r'   r   r   é¬  ©rä   r+   ©rR   rQ   N)r   rë   rX   ©r­   r®   rQ   r[   r'   r8   r1   r    r!   r!   r"   Ú$test_marker_draw_order_data_reversedv  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™   rA   r   r&   r'   r   r   r(  r)  r*  Né´   )r   Úset_axis_offrë   rX   r+  r!   r!   r"   Ú#test_marker_draw_order_view_rotated‹  s   r/  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   r   r   rG   r*   r[   ©r.   r/   r'   )r   r   r   r4   r5   rÆ   )r   r    r9   r:   r!   r!   r"   Útest_plot_3d_from_2d£  s   r1  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   r   rÖ   rG   r•   r„   r   )r×   rØ   r‚   r  rÚ   ç)\Âõ(ð¿ç)\Âõ(ð?r¶   )ÚshrinkÚaspect)r   ÚrcParamsr   r   r4   r5   rS   rÜ   rÄ   rÝ   r   rf   rŠ   Úcolorbar)r   r    rŒ   r   rá   rŽ   Úsurfr!   r!   r"   Útest_surface3d­  s   

ÿr9  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Ö   rG   r•   r”   )r•   rA   r•   rA   F)ÚrstrideÚcstrider1   r  rÚ   r2  r3  )
r   r   r   r4   r5   rS   ÚsqrtrÄ   rÝ   rŠ   )r   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  d¡||ƒƒ}|j||||d | dd¡ d S )Nr   r   )rA   r”   re   rF   rG   rq   r¤   rž   r  r*   é   )rA   r”   re   rF   rG   rq   r¤   rž   )r™   r   r   r   r   r   r   r   r   r   r   )r™   rA   r”   re   rF   rF   rF   re   r”   rA   rA   )r™   ç      ð¿rF   rG   rq   rž   rq   rG   rF   re   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@  rA  r)   rA  r@  r>  r?  r?  )r™   r?  r?  r?  é   é   rB  r)   é   r?  r?  )r™   r?  r?  r?  r?  é   é   r  r?  r?  r?  r   )r¦   r¥   Úplasma©r!  r(   i°ÿÿÿ)r   r   r   r4   rS   Úarrayr  Úmasked_lessrr   Ú	NormalizerŸ   r   r©   rÝ   rX   )r   r    r[   r'   Úmatrixr8   Únormr	   r!   r!   r"   Útest_surface3d_maskedÍ  s*   øÿrN  zsurface3d_masked_strides.pngc                  C   sh   t  ¡ } | jdd}tjddd…ddd…f \}}tj || d¡}|j|||ddd | d	d
¡ d S )Nr   r   iúÿÿÿgffffff@rA   r”   rF   ©r:  r;  é<   éÓÿÿÿ)	r   r   r   r4   r  r  rJ  rÝ   rX   rì   r!   r!   r"   Útest_surface3d_masked_stridesè  s   rR  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   ©Nr[   r'   r8   ©rA   rA   r   ©rA   rA   rA   ©r”   rq   rF   r  r¤   r”   ©rq   rF   rž   r¤   r”   r”   ©rF   r”   rG   rq   rA   r¤   z(%d, %d, %d), dir=%srA   r=   rB   r   gffffffî?z2D Text)Ú	transformr   r*   zX axiszY axiszZ axis)r   r   r   r3   rå   Útext2DÚ	transAxesÚ
set_xlim3dÚ
set_ylim3drÞ   Ú
set_xlabelÚ
set_ylabelÚ
set_zlabel)r   r    Úzdirsr9   r:   r.   r/   r[   r'   r8   Úlabelr!   r!   r"   Útest_text3dô  s"   

rc  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 )NrS  rV  rW  rX  r   r   r   r*   ú(z, z), dir=)r/   )r   r\  r]  rÞ   r3   rå   Úset_position_3d)r®   r­   ra  r9   r:   r.   r±   r/   r[   r'   r8   rÏ   r°   r!   r!   r"   Útest_text3d_modification  s$   (.ÿrf  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.rA   ©Úaxisr   r   çš™™™™™É?)r‚   rÙ   )r4   r½   rÃ   r  ÚnewaxisÚappendrÅ   r	  rÄ   r   r   r   Úplot_trisurfr   Újet©	Ún_anglesÚn_radiiÚradiiÚanglesr[   r'   r8   r   r    r!   r!   r"   Útest_trisurf3d%  s   $rx  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 )Nrg  rž   rh  ri  r   r”   Frj  .rA   rl  r   r   )rA   r¶   r   rn  )r1   rÙ   )r4   r½   rÃ   r  ro  rp  rÅ   r	  rÄ   r   r   r   rq  rs  r!   r!   r"   Útest_trisurf3d_shaded7  s   $rz  zwireframe3d.pngc                  C   s<   t  ¡ } | jdd}t d¡\}}}|j|||ddd d S )Nr   r   r   é   ©r×   rØ   ©r   r   r   r   r†   Úplot_wireframer‹   r!   r!   r"   Útest_wireframe3dI  ó   r  zwireframe3dzerocstride.pngc                  C   ó<   t  ¡ } | jdd}t d¡\}}}|j|||ddd d S )Nr   r   r   r{  r   r|  r}  r‹   r!   r!   r"   Útest_wireframe3dzerocstrideQ  r€  r‚  zwireframe3dzerorstride.pngc                  C   r  )Nr   r   r   r   r*   rO  r}  r‹   r!   r!   r"   Útest_wireframe3dzerorstrideY  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   r   r   r   rO  )	r   r   r   r   r†   r   r   Ú
ValueErrorr~  r‹   r!   r!   r"   Ú test_wireframe3dzerostrideraisesa  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   r   r   r*   é2   )r:  rØ   )r;  r×   )
r   r   r   r   r†   r   r   r„  r~  rÝ   r‹   r!   r!   r"   Útest_mixedsamplesraisesi  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 )Nr™   r-   ù              $@ç333333ã?ù              @ç>,p½ ê?)ÚtipÚmiddleÚtailr   r   r–   T©ry   ÚpivotÚ	normalize)	r4   ÚogridrÄ   rÃ   rÅ   r   r   r   Úquiver)r[   r'   r8   ÚuÚvÚwr  r    r!   r!   r"   Útest_quiver3ds  s   (024þr—  c           	      C   sP   |j dd g  } } } } }}| j dd}|j||||||dddd	 d S )Nr   r   r–   rŒ  Tr  )r   r“  )	r­   r®   r[   r'   r8   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   r   r™   r-   rˆ  r‰  rŠ  r‹  çš™™™™™Ù¿r–   F)rª   rô   rŒ  Tr  )r   r   r   r4   r  rÄ   rÃ   rÅ   r  Úmasked_wherer“  )r   r    r[   r'   r8   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   r   ©r   r   )ri  rÑ   rÑ   rA   ©rA   r   r   rA   )r   r   r   r   Ú	add_patchr   Úpatch_2d_to_3drø   rr   Ú
same_colorÚget_facecolorrY   rZ   )r   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–   ry  )rÑ   r¶   rÑ   ri  )r¶   rÑ   rÑ   r¶   re   )r÷   r   r   ró   rô   F)r÷   rð   rï   r2   rö   )r   r4   rI  r   ÚPatch3DCollectionr   Úadd_collection3drù   rø   rú   rû   rü   )r­   r®   Úpatch1Úpatch2r!  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   rA   ©r   rA   rA   )r   rA   r   ©r   r   r   zlist of \(N, 3\) array-like©Úmatchr  )r   r   r„  r   ÚPoly3DCollectionr4   rI  r  )Úpolyr!   r!   r"   Ú&test_poly3dcollection_verts_validationÂ  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   r   r©  rª  r«  rU  rT  re   Úk)r¶   r¶   rA   r¶   T©r÷   rð   rï   Úclosed)rA   r¶   r¶   r¶   F)	r   r   r   r4   rI  r  r   r®  r¥  ©r   r    Úpoly1Úpoly2Úc1Úc2r!   r!   r"   Útest_poly3dcollection_closedÌ  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   r   rL   )r   r   Úpoly_collection_2d_to_3dÚ
isinstancer®  Ú	get_pathsr   rV   rW   Ú
add_artistÚdo_3d_projectionr4   ÚisnanrY   rZ   )r¯  r   r    Úminzr!   r!   r"   Ú#test_poly_collection_2d_to_3d_emptyÛ  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   r   r©  rª  r«  rU  rT  re   r±  )r¶   r¶   rA   Tr²  r¶   F)r÷   r³  )rA   r¶   r¶   )r   r   r   r4   rI  r  r   r®  rú   rø   rù   r¥  r´  r!   r!   r"   Útest_poly3dcollection_alphaê  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”   rA   r™   re   rl  r   r   r   Útwilight©r‚   rM  ©r.   rÖ   rG   rq   )r4   r½   rÃ   rÄ   rÅ   Úcolumn_stackr  Úconcatenater   r   r   rK  r   Ú	set_arrayÚmodr¥  rˆ   r‰   rŠ   ©rÇ   r8   r$   r[   r'   ÚpointsÚsegmentsr   r    rM  ÚlcÚliner!   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…   rA   r™   rl  r   r   rÃ  rÄ  rÅ  rÖ   rG   rÂ   rq   )r4   r½   rÃ   rÄ   rÅ   rÆ  r  rÇ  r   r   r   rK  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| dd¡}|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 )NF)Úauto_add_to_figurezaxes.labelpadzX LABELr*   )ÚlabelpadzY LABELzZ LABELr)   rƒ   rG   )r   r   Úadd_axesr   ÚxaxisrÒ  Úmplr6  r^  r_  r`  ÚyaxisÚzaxisÚ	enumerateÚget_major_ticksÚset_padÚget_pad)r   r    rh   Útickr!   r!   r"   Útest_axes3d_labelpad3  s   

ÿrÝ  zaxes3d_cla.pngc                  C   s.   t  ¡ } | jddddd}| ¡  | ¡  d S )NrA   r   r   )r   r   r   r.  Úclar   r!   r!   r"   Útest_axes3d_claG  s   rß  zaxes3d_rotated.pngc                  C   s*   t  ¡ } | jddddd}| dd¡ d S )NrA   r   r   rb   é-   )r   r   r   rX   r   r!   r!   r"   Útest_axes3d_rotatedP  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)é   rq   rJ   rA   r”   r   r   )r4   r½   rS   r·   Úrandnr   r   r   r   r   r„  rÝ   )r[   r'   rŒ   r   r8   r   r    r!   r!   r"   Útest_plotsurface_1d_raisesW  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€   )r4   rI  r   Úview_transformationÚpersp_transformationÚdot)ÚErá   ÚVÚviewMÚperspMÚMr!   r!   r"   Ú_test_proj_make_Mc  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   rA   rA   r   r   r   rA   rA   r   r   ç     Àr@©
r   r   rA   rA   r   r   r   rA   rA   r   ©
r   r   r   r   r   rA   rA   rA   rA   rA   )rî  r4   rI  r   Úproj_transformÚinv_transformru   Úassert_almost_equal)
rí  r9   r:   r.   ÚtxsÚtysÚtzsÚixsÚiysÚizsr!   r!   r"   Útest_proj_transformn  s   rü  rA   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'   r8   )r   ró  r3   r   rV   r   Úadd_collectionrå   )rí  rä   Úargsr¯   r9   r:   r.   rö  r÷  rø  rÉ   r    ÚayÚazÚlinesr   Ú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$   çš™™™™™É¿rn  )rî  Úsplitr4   rI  r   ró  r  rë   rÆ   r3   rå   rˆ   r‰   )rí  Útsr9   r:   r.   rö  r÷  rø  r   r    r[   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™   rA   r  rï  r…   rñ  rò  é–   rã   é,  r$   r  i8ÿÿÿr
  )r4   rI  r   ræ  Úortho_transformationrè  r  ró  r  rë   rÆ   r3   rå   rˆ   r‰   )ré  rá   rê  rë  ÚorthoMrí  r  r9   r:   r.   rö  r÷  rø  r   r    r[   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 )	Nr  rq   )r   rA   r   rA   r   re   r”   r¶   rA   )r   Úrot_xr4   rÃ   ru   Ú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…   rI   )r€   r…   )r–   rn  )r   r   r   rÖ   )r   g{®Gázt?r   r¶   )r   r   g      $@r™   )r   r   r   rA   )r   Úworld_transformationr4   ru   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)rF   rq   r   )r5  )rK   rM   )r   r(   ©r)   r  )r   r   r)   r(   )r…   r  r(   r
  r   )Úfillr&  r  r  )r   rV   rW   rÆ   r3   rë   r   Ú_line2d_seg_distr4   rI  r   rž  rˆ   r‰   )r   r    r9   r:   Úp0Úp1Údistr[   r'   Údr+   r!   r!   r"   Útest_lines_distsÕ  s   r#  c                  C   s2   d} d}t  | | |¡ t | ¡} t  | | |¡ d S )N)r*   r(   r  )r   r  r4   rI  )r  r   r!   r!   r"   Útest_lines_dists_nowarningì  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   rL   r   r–   rn  ©r[   r'   r8   rA   )r   rA   r—   çš™™™™™ñ?r  g333333ó?FTr”   )r   rA   r—   r&  r™  g333333@)r   rV   ÚmarginsrÆ   Ú
get_w_limsÚ	autoscaleÚset_autoscalez_onr   r!   r!   r"   Útest_autoscaleö  s   

r+  rm  r%  Úauto)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   r   r…   r—   r–   Úget_autoscaleÚ_onÚset_ÚlimÚget_)ç      à¿r¶   )r,  )r   r   r   r4   r5   r½   rë   ÚgetattrrY   rZ   ru   rv   )
rm  r,  r   r    r[   r'   Úget_autoscale_onÚset_limÚget_limÚ	post_autor!   r!   r"   Útest_unautoscale  s   

r8  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;  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 S )Nr   )Úcombinationsr  r   r9  )rF   rF   rF   )r   Ú	proj_typeÚ
box_aspectrL   )r™   rA   r”   rA   r+   r±  ri  rQ  r*  T)r  r<  r  r   rV   rW   r4   rI  ÚlistÚabsr  Úplot3Dr3   rX   ÚdegreesÚarctanr<  rÛ   )r<  r  r   r    r$   rä   Úer!   r!   r"   Útest_axes3d_isometric  s   ý$ €$rE  Úvalue)ÚsetterÚside))r\  Úleft)r\  Úright)r]  Úbottom)r]  Útop)rÞ   rK  )rÞ   rL  c                 C   s`   ||i}t  ¡ }|j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„  r3  )rG  rH  rF  Úlimitr   Úobjr!   r!   r"   Útest_invalid_axes_limits.  s   
"ÿrO  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   rL   )rG   rF   re   )r   rV   r4   ÚindicesÚvoxels)Úselfr   r    r[   r'   r8   rR  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   rL   )rG   rG   rF   r”   g      ø?g]Âõ(\@re   rò   )r÷   rð   ró   )r   rV   r4   rQ  rR  rŸ   Úkeysrù   )rS  r   r    r[   r'   r8   rR  r•  r!   r!   r"   Útest_edge_styleH  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   rL   ©r*   r*   r*   rA   r  r  z0.25rG   Úcyanr*   rH  N)r   rV   r4   rQ  rþ   Úobject_rR  ©rS  r   r    r[   r'   r8   rR  r	   r!   r!   r"   Útest_named_colorsS  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   rL   rW  )r*   r*   r*   re   r  ©.r   ©.rA   ©.r”   rH  N)r   rV   r4   rQ  ÚzerosrR  rZ  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 )Nr   r   rL   rW  r”   )r*   r*   r*   rF   )rA   r   r   r¶   )r   rA   r   r¶   rH  zfaces returned for absent voxel)r   rV   r4   rQ  r@  r_  rR  ÚtyperW   Úitemsr»  r   r®  )rS  r   r    r[   r'   r8   Úv1Úv2rR  r	   r•  Úcoordr¯  r!   r!   r"   Ú
test_alpham  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 )Nr   r   rL   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™   rA   rÓ   )rt   Úndimr4   Ú	index_exp)r[   Úslrh   r!   r!   r"   Ú	midpointsƒ  s   ÿÿz&TestVoxels.test_xyz.<locals>.midpoints)é   rl  rl  g      0@r¶   r”   r•   )re   r\  r]  r^  r   rA   )r!  r"  rÙ   )r   rV   r4   rQ  r_  r  rR  rš   )rS  r   r    rk  r$   r%   r&   Ú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 )N)re   rF   rG   )r”   re   rF   r   r   rL   r±  )rð   ÚfilledrR  r¬  )rr  )rr  r[   r'   r8   r!   )r4   rQ  Úonesr   rV   rW   rR  r   r   Ú	TypeErrorÚAttributeError)rS  r[   r'   r8   rr  r   r    Úkwr!   r!   r"   Útest_calling_conventions   s"   
ÿÿ"ÿz#TestVoxels.test_calling_conventionsN)Ú__name__Ú
__module__Ú__qualname__Úmpl3d_image_comparisonrT  rV  r[  r`  rf  rq  rw  r!   r!   r!   r"   rP  ?  s    






 rP  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   rA   r”   re   rF   rG   rq   r¤   rž   r  r*   r>  r   r   r8   r0  )r   r   r   rÆ   r4   ru   rv   Úget_data_3dÚset_data_3dÚ	set_xdataÚ	set_ydataÚset_3d_propertiesrC   )
r[   r'   r8   Úx2Úy2Úz2r   r    r  rÎ  r!   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   )rA   rA   r*   r*   )rA   r*   r*   r*   )rA   rA   rA   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   rL   rA   r   )	r   rV   Úxaxis_invertedÚyaxis_invertedÚzaxis_invertedrˆ   r‰   rŠ   rÞ  r   r!   r!   r"   Útest_inverted_cla×  s   rŠ  c                  C   sÒ   t  ¡ } t t¡ t| ƒ}W d   ƒ n1 sw   Y  |jddd |jddd |jddd | j ¡  |j	 
¡ D ]
}|jjdksFJ ‚q<|j 
¡ D ]
}|jjdksVJ ‚qL|j 
¡ D ]
}|jjdksfJ ‚q\d S )Nr[   r=   )rm  r	   r'   r8   )r   r   r   Úwarnsr   r   Útick_paramsrY   rZ   rÔ  rÙ  Ú	tick1lineÚ_colorrÖ  r×  )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 )NrF   rG   r   r   rL   g    ÐcAg   @ÑcA)r[   r'   r8   rœ   r   Úplain)rm  r   rA   )r“   r”   )rm  Ú	scilimitsr”   zaxes.formatter.useoffset)rm  Ú	useOffsetre   zaxes.formatter.use_locale)rm  Ú	useLocalezaxes.formatter.use_mathtext)rm  ÚuseMathTextc                    s   ‡ fdd„|D ƒS )Nc                    s   g | ]	}t ˆ |ƒ ¡ ‘qS r!   )r3  Úget_major_formatter)rg   Úname©r    r!   r"   rk     rl   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)rV   Úflatrˆ   r3   Úticklabel_formatrÕ  r6  Úset_scientificÚset_powerlimitsÚset_useOffsetÚset_useLocaleÚset_useMathText)	r­   r®   r_   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š™™™™™é¿rA   rn  r-   )rA   ri  r   r   )ry   r  )r4   rS   r5   Ú	ones_liker3   r   r“  )r­   r®   r  r[   r'   r8   r”  r•  r–  r   ry   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   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_ticks5  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–   rg  re   rG   r   r   é   rn  )ÚzuplimsÚzlolimsÚ
erroreveryN)
r4   r5   rÃ   rÄ   rÅ   r   r   r   r  Úerrorbar)
rÏ   r[   r'   r8   r   r    Úesteprh   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   r   )rA   r”   re   rF   rG   )r¶   r¶   r¶   r¶   r¶   re   )FTFTT)TFFTFTÚpurplezError lines)r[   r'   r8   ÚxerrÚyerrÚzerrÚcapsizer³  r´  ÚyuplimsÚecolorrb  N)r   r   r   r¶  Úlegend)r   r    r"  rD  r!   r!   r"   Útest_errorbar3dR  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”   re   )rž   rq   Tr   r   ©rK   Úconstrained_layoutrM   r   r%  )Úorientationzorientation=r)   rA   zC4-.ÚC1Dró   )ÚlinefmtÚ	markerfmtÚbasefmtrÄ  rî   )rÕ   Úmarkeredgewidth)r   rV   r4   r½   rÃ   rÅ   rÄ   r3   ÚstemÚ	set_titler¤  ÚsetÚset_linewidth)r   r_   rÇ   r[   r'   r8   r    r/   Ú
markerlineÚ	stemlinesÚbaseliner!   r!   r"   Útest_stem3db  s0   

þ

ýùrÑ  zequal_box_aspect.pngc                  C   sp  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¡ d S )Nr   )r  r<  r   r   r”   r…   r™   rA   r1   r&   ÚoffrU  )r  r  r<  r   r   r   r4   r½   rÃ   ÚouterrÅ   rÄ   r¤  rÝ   rI  r?  r  r@  rA  r3   rÆ  Ú
get_xlim3dÚ
get_ylim3dÚ
get_zlim3dr   rŸ   r\  r]  rÞ   rm  Úset_box_aspect)r  r<  r   r    r”  r•  r[   r'   r8   r$   rä   rD  ÚxyzlimÚXYZlimr!   r!   r"   Útest_equal_box_aspect€  s.   $$€ÿ



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”   rA   )rF   rG   Tr   r   rÂ  rG   Ú
horizontal)r    rÄ  rn  )r   rV   rq  r4   r·   rä  r7  rY   rZ   r    Úget_positionÚextents)Ú	num_plotsr   r_   r    Úp_triÚcbarr!   r!   r"   Útest_colorbar_pos£  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   r   éÔ   )r   Úsharezr   rA   r”   )r2  r   r”   ç      @)r2  rå  )r   r   r   rÆ   r¯  Úget_zlim)r   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   r   r   )ÚbuttonÚxdataÚydatarA   N)r   r   r   rë   rY   rZ   rÔ  rÕ  rÖ  Ú_button_pressr   r   ÚMIDDLEÚ_on_mover   Úapprox)rì  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,   ÿÿr   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   rG   rA   éo   r   r   r„   r¢   )r+   rä   r‚   )r4   rI  r?  r  r  r5   ÚTr   rë   rY   rZ   Úchanged)
r­   r®   r[   r'   r8   r+   r±   Úsc_testr°   Úsc_refr!   r!   r"   Útest_scalarmap_updateå  s   þþ
r  c                  C   sF   t  ¡ } |  dd¡}|d jddddd}|d jdddddd}d S )NrA   r”   r   r   r   Úother)r   rb  )r   r   Ú
subfiguresr   )r   Úsfr    r!   r!   r"   Útest_subfigure_simpleû  s   r
  Úcomputed_zorder)Úbaseline_imagesr   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'¡ qÆd S )(NéÝ   r   r   éÞ   F)r«  )r   rG   r   )rG   rG   r   )rG   r   r   ÚwhiteÚblackrA   )r!  r"  Úzorder)r”   r”   )r   rF   r=   r”   )r+   r  )re   re   )rA   re   r*   )r   rÒ   )r   rå  éß   éà   r¶   r   r¤   rµ   r?   r™   )r1   r2   rÙ   r  rG   z--r>   )r  Ú	linestyler1   r  re   rF   iìÿÿÿr)   rP   rÒ  )r   r   r   r  r   r®  r¥  rÆ   rë   rˆ   r‰   rŠ   r4   rS   r_  r½   rÃ   rÅ   rÄ   rÝ   rX   rm  )r   rË   rÌ   Úcornersr    ÚtriÚax3Úax4ÚdimrŒ   r   rŽ   ÚangleÚX2ÚY2ÚZ2ÚX3ÚY3ÚZ3r$   rí  Úthr[   r'   r8   r!   r!   r"   Útest_computed_zorder  sŽ   ý



2
ü"ü
ü$ü
ü$ýÝ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   r   r   r”   rq   é   rA   rG   r)  )r   r   r   r4   r½   rÃ   rë   rÄ   rÅ   rY   rZ   )r   r    r!  Úscr!   r!   r"   Útest_scatter_spiralV  s
   ,r%  zDvertical_axis, proj_expected, axis_lines_expected, tickdirs_expectedr8   )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¨?)rA   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+  )rA   r”   rA   c                 C   s¶   d}t jddddd}|jdd| d |jj ¡  | ¡ }tjj	|||d t
| ¡ | ¡ | ¡ gƒD ]%\}}|| }	|j ¡ }
tjj	|	|
|d || }| ¡ }tj ||¡ q3d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íµ ÷ÆÀ>rA   r   r   r   )rQ   rR   Úvertical_axis)ÚrtolN)r   ÚsubplotrX   r   rY   rZ   Úget_projr4   ru   r  rØ  Ú	get_xaxisÚ	get_yaxisÚ	get_zaxisrÎ  Úget_dataÚ_get_tickdirrv   )r,  Úproj_expectedÚaxis_lines_expectedÚtickdirs_expectedr-  r    Úproj_actualrh   rm  Úaxis_line_expectedÚaxis_line_actualÚtickdir_expectedÚtickdir_actualr!   r!   r"   Útest_view_init_vertical_axisc  s    D"

ÿör=  c                  C   sz   G dd„ dt jƒ} t ¡ }|jddd}| ƒ }| |¡ d}tjt|d |j	 
¡  W d  ƒ dS 1 s6w   Y  dS )	zv
    Test that an external artist with an old-style calling convention raises
    a suitable deprecation warning.
    c                   @   ó   e Zd Zdd„ Zdd„ ZdS )zOtest_do_3d_projection_renderer_deprecation_warn_on_argument.<locals>.DummyPatchc                 S   ó   dS ©Nr   r!   ©rS  Úrendererr!   r!   r"   r¾  Ã  ó   z`test_do_3d_projection_renderer_deprecation_warn_on_argument.<locals>.DummyPatch.do_3d_projectionc                 S   ó   d S r  r!   rA  r!   r!   r"   rZ   Æ  rC  zTtest_do_3d_projection_renderer_deprecation_warn_on_argument.<locals>.DummyPatch.drawN©rx  ry  rz  r¾  rZ   r!   r!   r!   r"   Ú
DummyPatchÂ  ó    rF  r  r   r   z?The 'renderer' parameter of do_3d_projection\(\) was deprecatedr¬  N)r   ÚPatch3Dr   r   r   r½  r   r‹  r   rY   rZ   )rF  r   r    Úartistr­  r!   r!   r"   Ú;test_do_3d_projection_renderer_deprecation_warn_on_argument½  s   
"ÿrJ  c                  C   óF   G dd„ dt jƒ} t ¡ }|jddd}| ƒ }| |¡ |j ¡  dS )z
    Test that an external artist with a calling convention compatible with
    both v3.3 and v3.4 does not raise a deprecation warning.
    c                   @   s   e Zd Zddd„Zdd„ ZdS )zZtest_do_3d_projection_renderer_deprecation_nowarn_on_optional_argument.<locals>.DummyPatchNc                 S   r?  r@  r!   rA  r!   r!   r"   r¾  Ù  rC  zktest_do_3d_projection_renderer_deprecation_nowarn_on_optional_argument.<locals>.DummyPatch.do_3d_projectionc                 S   rD  r  r!   rA  r!   r!   r"   rZ   Ü  rC  z_test_do_3d_projection_renderer_deprecation_nowarn_on_optional_argument.<locals>.DummyPatch.drawr  rE  r!   r!   r!   r"   rF  Ø  s    
rF  r  r   r   N©r   rH  r   r   r   r½  rY   rZ   ©rF  r   r    rI  r!   r!   r"   ÚFtest_do_3d_projection_renderer_deprecation_nowarn_on_optional_argumentÓ  ó   
rN  c                  C   rK  )z„
    Test that an external artist with a calling convention compatible with
    only v3.4 does not raise a deprecation warning.
    c                   @   r>  )zTtest_do_3d_projection_renderer_deprecation_nowarn_on_no_argument.<locals>.DummyPatchc                 S   r?  r@  r!   )rS  r!   r!   r"   r¾  ì  rC  zetest_do_3d_projection_renderer_deprecation_nowarn_on_no_argument.<locals>.DummyPatch.do_3d_projectionc                 S   rD  r  r!   rA  r!   r!   r"   rZ   ï  rC  zYtest_do_3d_projection_renderer_deprecation_nowarn_on_no_argument.<locals>.DummyPatch.drawNrE  r!   r!   r!   r"   rF  ë  rG  rF  r  r   r   NrL  rM  r!   r!   r"   Ú@test_do_3d_projection_renderer_deprecation_nowarn_on_no_argumentæ  rO  rP  )rA   )€Ú	functoolsr  r   Úmpl_toolkits.mplot3dr   r   r   r   Ú
matplotlibrÕ  Úmatplotlib.backend_basesr   Úmatplotlib.cbookr   r   r	   rr   Úmatplotlib.testing.decoratorsr
   r   Úmatplotlib.testing.widgetsr   Úmatplotlib.collectionsr   r   Úmatplotlib.patchesr   Úmatplotlib.pyplotÚpyplotr   Únumpyr4   Úpartialr{  r#   r<   rE   r`   ra   r|   r   r’   r›   ÚmarkÚparametrizer²   r¼   rÁ   rÈ   rÍ   râ   rç   rí   rñ   r   r%  r,  r/  r1  r9  r=  rN  rR  rc  rf  rx  rz  r  r‚  rƒ  r…  r‡  r—  r˜  r›  r£  r¨  r°  r¹  rÁ  rÂ  rÏ  rÐ  rÝ  rß  rá  rå  rî  rü  r  r	  r  r  r  r#  r$  r+  r8  r;  rE  ÚinfÚnanrO  rP  r„  r†  rŠ  r  r£  r¥  r±  r¸  rÁ  rÑ  rÚ  rá  rç  r   r   Úcontextr  r
  r"  r%  r=  rJ  rN  rP  r!   r!   r!   r"   Ú<module>   s¾   ÿ







þ












6



	












ÿ





















z




'



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