U
    f»{j  ã                	   @   sÈ   d dl Z d dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZ ej dejded	�ejd
ejjed�d	�g¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )é    N)Úrun_subprocess)Úset_3d_backendÚget_3d_backendÚFigure3D)Ú_get_renderer)Úskips_if_not_pyvistaqt)ÚALLOWED_QUIVER_MODESÚbackendZ	pyvistaqt)ZmarksÚfoo)Úraisesc                 C   sb   |  d| ¡ | dd¡ tjd | ks*t‚ddlm} | | ¡ |j| ksNt‚| 	¡ | ks^t‚dS )z$Test set up 3d backend based on env.ÚMNE_3D_BACKENDú(mne.viz.backends.renderer.MNE_3D_BACKENDNr   )Úrenderer)
ÚsetenvÚsetattrÚosÚenvironÚAssertionErrorZmne.viz.backendsr   r   r   r   )r	   Úmonkeypatchr   © r   úc/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/viz/backends/tests/test_renderer.pyÚtest_backend_environment_setup   s     ÿ
r   c                 C   s’   |   d¡}t|tƒst‚| jj|d�}| t dddg¡dd¡ | j 	|¡ | j
|ddddd� | j|d	d
� | jj|d� |  |¡ |  ¡  dS )z!Test figure management functions.)é,  r   )Úfigç        Úwç      ð?N)r   r   r   )ÚfigureÚazimuthÚ	elevationÚ
focalpointÚdistancer
   )r   Útitle)r   )Úcreate_3d_figureÚ
isinstancer   r   r	   Z	_RendererÚsphereÚnpÚarrayZ_check_3d_figureZset_3d_viewZset_3d_titleZ_take_3d_screenshotZclose_3d_figureZclose_all_3d_figures)r   r   Zwrap_rendererr   r   r   Útest_3d_functions(   s    

 ÿ
r(   c           !         s  d}d}d}t  d|ddg¡}t  dd|dg¡}t  ddd|g¡}t  dddgdddgdddgdddgg¡}d}t  |||f¡‰ d	}	|d
 }
t  ddddg¡}ddddg}ˆ |dœ}d}|d }t  ‡ fdd„|D ƒ¡}t j|dd�}|| }d}t  ddd¡}d}d}d}d}d| }| j||ddd�}dD ]}| |¡ �q.|j|||||d�}| |¡ |j	|||d d!� |j	|||d"d!� |j
ˆ |	|
dd#� t|d$d$…df |d$d$…df |d$d$…df |d$d$…df |d$d$…df |d$d$…df ||||d%�
}tD ]}|jf d&|i|—Ž �qütjtd'd(�� |jf d&d)i|—Ž W 5 Q R X |jt  dddgg¡t  dddgg¡d*� |jt  dddgg¡t  dddgg¡t  ddgg¡d+�\}} |j| d,dddgd-� |j||||d.d/� |jddd|dd0� |jd1d2||d3� | ¡  | ¡  d$S )4zTest default plot.)éX  r)   Úblackr   r   é   é   é   ÚwhiteÚredg      @r   gš™™™™™É?gš™™™™™Ù?g333333ã?gš™™™™™é?)ZrrZtrisÚblueg       @c              	      sJ   g | ]B\}}}t jˆ |d d …f ˆ |d d …f ˆ |d d …f fdd�‘qS )Nr   ©Zaxis)r&   Úmean)Ú.0ÚvaZvbÚvc©Z
sph_centerr   r   Ú
<listcomp>T   s   ýþþz#test_3d_backend.<locals>.<listcomp>r1   Zscalaré   r   é   é   TF)ÚsizeÚbgcolorZsmooth_shadingZscene)ZterrainÚ	trackball)ÚxÚyÚzZ	trianglesÚcolorÚline)ZsurfaceÚscalarsZcontoursÚkindÚtube)ÚcenterrA   ÚscaleZradiusN)
r>   r?   r@   ÚuÚvr   rA   rG   Z
scale_moderC   ÚmodezInvalid value©Úmatchr
   )ÚoriginÚdestination)rM   rN   rC   z
Scalar Bar)Úsourcer"   r<   Úright)Zx_windowZy_windowÚtextr;   Zjustification)r>   r?   r@   rQ   rG   g     €f@g     €V@)r   r   r!   r    )r&   r'   Zcolumn_stackr2   Zlinspacer#   Zset_interactionZmeshZremove_meshZcontourr%   Údictr   Zquiver3dÚpytestr   Ú
ValueErrorrE   Z	scalarbarZtext2dZtext3dZ
set_cameraZreset_cameraÚshow)!r   Zwin_sizeZ	win_colorZtet_sizeZtet_xZtet_yZtet_zZtet_indicesZ	tet_colorZ	sph_colorZ	sph_scaleZ
ct_scalarsZ	ct_levelsZ
ct_surfaceZqv_colorZqv_scaleZ	qv_centerrF   Zqv_dirZqv_scale_modeZ
qv_scalarsZtxt_xZtxt_yZtxt_textZtxt_sizeZcam_distanceZrendZinteractionZ	mesh_dataÚkwargsrJ   Ú_rE   r   r6   r   Útest_3d_backend7   sÆ    ýþýüû
 ÿ ÿ ÿöÿþ
ÿ
 ÿþrX   c                 C   s*   | j }|  ¡ |kst‚|  ¡ |ks&t‚dS )z3Test get_3d_backend function call for side-effects.N)r   r   r   )r   Zorig_backendr   r   r   Útest_get_3d_backendª   s    rY   c                 C   s2   |   ¡ }tjdd|f g}| d|¡ t|ƒ dS )z,Test that renderers are available on demand.z-ucz~import mne; mne.viz.create_3d_figure((800, 600), show=True); backend = mne.viz.get_3d_backend(); assert backend == %r, backendr   N)r   ÚsysÚ
executabler   r   )r   r   r	   Úcmdr   r   r   Útest_renderer²   s    þÿr]   c              	   C   s|   d}t jt|d�� tdƒ W 5 Q R X dd„ }|  d|¡ |  dd¡ d	}tƒ dksXt‚t jt|d�� tƒ  W 5 Q R X dS )
z<Test that the error emitted when a bad backend name is used.z-Allowed values are 'pyvistaqt' and 'notebook'rK   Úinvalidc                 S   s   t | ƒ‚d S )N)ÚModuleNotFoundError)r>   r   r   r   ÚfailÄ   s    z%test_set_3d_backend_bad.<locals>.failz)mne.viz.backends.renderer._reload_backendr   Nz+Could not load any valid 3D.*
pyvistaqt: .*)	rS   r   rT   r   r   r   r   ÚRuntimeErrorr   )r   Ztmp_pathrL   r`   r   r   r   Útest_set_3d_backend_bad½   s     ÿrb   )r   rZ   rS   Únumpyr&   Z	mne.utilsr   Zmne.vizr   r   r   Zmne.viz.backends.rendererr   Zmne.viz.backends.tests._utilsr   Zmne.viz.backends._utilsr   ÚmarkZparametrizeÚparamZxfailrT   r   r(   rX   rY   r]   rb   r   r   r   r   Ú<module>   s$   þ
s