U
    f»{jE“  ã                   @   s´  d dl mZ d dlmZ d dlZd dl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mZmZmZmZmZmZmZmZmZmZmZmZ d dl m!Z! d dl"m#Z#m$Z$m%Z%m&Z&m'Z' d d	l(m)Z) d d
l*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z;m<Z<m=Z= d dl>m?Z? d dl@mAZAmBZBmCZC d dlDmEZE d dlFmGZG d dlHmIZI d dlJmKZKmLZL eEjMdd�ZNe OeNd¡ZPe OeNddd¡ZQe OeNdddd¡ZRe OeNddd¡ZSe OeNdd¡ZTe OeNd d!d"¡ZUe Oe Ve WeX¡¡d#d#d$¡ZYe OeYd%d&¡ZZe OeZd'¡Z[e OeNddd(¡Z\e OeNddd)¡Z]e OeYd*d%d&¡ZZe OeZd+¡Z^e OeZd,¡Z_e OeZd-¡Z`e OeYd.d%d&d/¡Zad0Zbd1d2„ ZceEjde
jejfd3d4„ ƒƒZgeEjde
jejfd5d6„ ƒƒZhd7d8„ Zie
jejfe
je jd9d:e
jkdeE l¡ d;�d<d=g¡d>d?„ ƒƒZmeEjdd@dA„ ƒZne
jejfeEjddBdC„ ƒƒZoeEjddDdE„ ƒZpe
jejfeEjddFdG„ ƒƒZqdHdI„ ZrdJdK„ ZseEjdeAƒ dLdM„ ƒƒZte
jejfe
je udN¡eEjdeAƒ e
je jdOdPdQg¡dRdS„ ƒƒƒƒƒZveEjde
je jdTe
jkdUdVdde
jejfd;�e
jkddWdde
jejfd;�dXg¡dYdZ„ ƒƒZweEjdd[d\„ ƒZxe
jejfeEjdd]d^„ ƒƒZye
jejfeEjde
je jd_d`¡e
je jdadb¡dcdd„ ƒƒƒƒZze
je jdedf¡e
je jdgdh¡e
je jdidjdkdlgd dkdlgf¡dmdn„ ƒƒƒZ{e
jejfeEjddodp„ ƒƒZ|eEjde
jejfdqdr„ ƒƒZ}dS )sé    N)ÚPath)Úassert_array_equalÚassert_allclose)ÚColormap)ÚFigure)Úmake_field_mapÚpick_channels_evokedÚread_evokedsÚ
read_transÚread_dipoleÚSourceEstimateÚmake_sphere_modelÚuse_coil_defÚ
pick_typesÚsetup_volume_source_spaceÚread_forward_solutionÚconvert_forward_solutionÚMixedSourceEstimate)Ú_BaseVolSourceEstimate)Úread_raw_ctfÚread_raw_btiÚread_raw_kitÚ	read_infoÚread_raw_nirx)Ú	write_dig)Ú	pick_info)ÚFIFF)Úapply_inverse)	Úplot_sparse_source_estimatesÚplot_source_estimatesÚsnapshot_brain_montageÚplot_head_positionsÚplot_alignmentÚFigure3DÚplot_brain_colorbarÚlink_brainsÚmne_analyze_colormap)Ú_process_climÚ_linearize_mapÚ_get_map_ticks)Ú_fake_click)Úrequires_nibabelÚcatch_loggingÚ_record_warnings)Útesting)Úread_source_spaces)Ú	Transform)Úread_bem_solutionÚread_bem_surfacesF)ÚdownloadZsubjectsÚMEGÚsamplezsample_audvis_trunc-trans.fifÚbemzsample-oct-6-src.fifzsample_audvis_trunc_set1.dipÚCTFztestdata_ctf.dsZNIRxZnirscoutZnirx_15_2_recording_w_shortz..ÚioZtestsÚdataztest-ave.fifz%sample_audvis_trunc-meg-vol-7-fwd.fifú)sample_audvis_trunc-meg-eeg-oct-4-fwd.fifZbtiZtest_pdf_linuxZtest_config_linuxZtest_hs_linuxZkitztest.sqdal  # custom cube coil def
1   9999    1   8  3e-03  0.000e+00     "QuSpin ZFOPM 3mm cube"
  0.1250 -0.750e-03 -0.750e-03 -0.750e-03  0.000  0.000  1.000
  0.1250 -0.750e-03  0.750e-03 -0.750e-03  0.000  0.000  1.000
  0.1250  0.750e-03 -0.750e-03 -0.750e-03  0.000  0.000  1.000
  0.1250  0.750e-03  0.750e-03 -0.750e-03  0.000  0.000  1.000
  0.1250 -0.750e-03 -0.750e-03  0.750e-03  0.000  0.000  1.000
  0.1250 -0.750e-03  0.750e-03  0.750e-03  0.000  0.000  1.000
  0.1250  0.750e-03 -0.750e-03  0.750e-03  0.000  0.000  1.000
  0.1250  0.750e-03  0.750e-03  0.750e-03  0.000  0.000  1.000
1   9998    1   4  3e-03  0.000e+00     "3mm square"
  0.1250 -0.750e-03 -0.750e-03 0.000  0.000  0.000  1.000
  0.1250 -0.750e-03  0.750e-03 0.000  0.000  0.000  1.000
  0.1250  0.750e-03 -0.750e-03 0.000  0.000  0.000  1.000
  0.1250  0.750e-03  0.750e-03 0.000  0.000  0.000  1.000
c               	   C   sØ   t tƒ} tj d¡ dd¡}t t|ƒ¡|dd…df< d}tƒ �X t	|ƒ t	|d| |d� t	||gƒ t
 tt	dg¡ t
 tt	|dd…dd	…f ¡ W 5 Q R X t
 tt	|d
¡ t
jtdd�� t	|dd� W 5 Q R X dS )z Test plotting of head positions.r   é   é
   N)ç        r=   g{®Gáz¤?Úfield)ÚmodeÚinfoÚdestinationÚposé	   ÚfooÚshape©Úmatchç      ð?)Úaxes)r   Úevoked_fnameÚnpÚrandomÚRandomStateÚrandnÚarangeÚlenr-   r!   ÚpytestÚraisesÚ
ValueError)r@   rB   rA   © rT   úT/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/viz/tests/test_3d.pyÚtest_plot_head_positionsY   s    ÿ(rV   c              	   C   s^  t tƒ}dd„ |D ƒ}d}tdd„ |D ƒƒ}t || ¡}|j}tj d¡ |jd ¡|tj |d ¡|  	t
¡< ||f|_t||ddƒ}d	}	t|d
|	dtddd�}
|
 ¡  ~
tjtdd�� t|d
dddtd� W 5 Q R X |d d }ddg}t t|ƒ|f¡}d|d< d|d< || tjdtjd�g}t||ddƒ}t||dddd�}t|tƒ�sZt‚d S )!z+Test plotting of (sparse) source estimates.c                 S   s   g | ]}|d  ‘qS ©ÚvertnorT   ©Ú.0ÚsrT   rT   rU   Ú
<listcomp>r   s     z5test_plot_sparse_source_estimates.<locals>.<listcomp>é   c                 s   s   | ]}t |ƒV  qd S ©N©rP   ©rZ   ÚvrT   rT   rU   Ú	<genexpr>t   s     z4test_plot_sparse_source_estimates.<locals>.<genexpr>r   é   é   Úmne_analyzer5   ©rd   rd   r   TÚauto©ÚcolormapÚ
backgroundÚsubjects_dirÚcolorbarÚclimzfigure must berF   rD   Úboth)ÚfigureÚhemirm   rk   rX   éo   iM  rH   )r   rd   g       @)rd   r;   )Zdtype)rd   rd   rd   ç      à?F)ÚbgcolorZopacityZhigh_resolutionN)r/   Ú	src_fnameÚsumrK   ÚzerosÚsizerL   rM   ÚrandÚastypeÚintrE   r   r   rk   ÚcloserQ   rR   Ú	TypeErrorrP   ÚemptyZint64r   Ú
isinstancer#   ÚAssertionError)Úrenderer_interactiveÚbrain_gcÚ
sample_srcÚverticesÚn_timeÚn_vertsÚstc_dataÚstc_sizeÚstcri   ÚbrainZindsÚoutrT   rT   rU   Ú!test_plot_sparse_source_estimatesk   s\    ÿ
     þ    þ   þr‹   c              
   C   s‚   t tddd�}t||jddd… ƒ}tddgddgƒD ]F\}}tjtd	d
�� t|t	dt
d|d�}W 5 Q R X |j|d|d� q6dS )zTest plotting evoked field.zLeft Auditory)gš™™™™™É¿r=   )Ú	conditionZbaselineNr<   Úmegé   r   Z
projectionrF   r5   )Úsubjectrk   Zn_jobsZch_typegš™™™™™¹?)ÚtimeÚ
n_contours)r	   rJ   r   Úch_namesÚziprQ   ÚwarnsÚRuntimeWarningr   Útrans_fnamerk   Z
plot_field)ÚrendererÚevokedÚtr‘   ÚmapsrT   rT   rU   Útest_plot_evoked_field•   s    ÿ þr›   c                 C   s,   d}t | tƒst‚t| jjjƒ|ks(t‚d S )NT)r~   r#   r   rP   Zplotterr—   Zactors)Úfigr—   Ún_actorsÚ__tracebackhide__rT   rT   rU   Ú_assert_n_actors¤   s    rŸ   ÚsystemÚNeuromag)ZmarksÚBTiÚKITc              	   C   sÒ   |dkrt tƒ}nH|dkr&ttƒj}n4|dkrDttttddd�j}n|dksPt	‚t
tƒj}dd	g}|dkrt| d
¡ t|ttƒdt|dd�}t|tƒsšt	‚t|t|ddd
|kdd�ƒ}|d d }t|| |ƒ dS )z&Test plotting of MEG sensors + helmet.r¡   r7   r¢   TF)ÚconvertZpreloadr£   ÚhelmetÚsensorsÚrefr5   )r�   rk   r�   ÚeegrT   )r�   r¨   Zref_megÚexcludeÚnchané   N)r   rJ   r   Ú	ctf_fnamer@   r   Ú	pdf_fnameÚconfig_fnameÚhs_fnamer   r   Ú	sqd_fnameÚappendr"   r
   r–   rk   r~   r#   r   r   rŸ   )r—   r    Z	this_infor�   rœ   Zuse_infor�   rT   rT   rU   Útest_plot_alignment_megª   sF    	
   þ


    þ    ÿr²   c              
   C   s8   t tƒ}t|ttƒdtdddddgd�}t|| dƒ dS )zTest plotting of a surface.r5   FÚwhiteÚhead)r�   rk   r�   r¨   ÚdigÚsurfacesé   N)r   rJ   r"   r
   r–   rk   rŸ   )r—   r@   rœ   rT   rT   rU   Útest_plot_alignment_surfÍ   s         ýr¸   c                 C   sŒ  t | ƒ}t |d¡}ddddddgdœdddd	d
dgdœddddddgdœg}t||dƒ ttƒd }|j}ttƒ}t	j
ttdtdtd� t	j
tt|tdtdd� t	j
tt|tdt|d� |jtdddd� |d d }	|	jdksæt‚t|ddgddttƒd|t|	d�	}
t|
tƒ�st‚|j ¡  |j ¡  t	j
tdd �� t|d!td"� W 5 Q R X t	j
tdd �� t|d!dd#� W 5 Q R X t	j
tdd �� t|d!d$gd%� W 5 Q R X |	d d& tjk�s¾t‚t	j
td'd �� td!|	d(d)� W 5 Q R X t|ƒ d*D ](}t|ddgd|ttƒdt|td+�	 �qò|j ¡  | ¡ jd,dd-�}|j ¡ � g |jd.< W 5 Q R X | d/d0d1œ¡ tƒ �2}t|jdttdd2d3gddgd4d5gdddd6�
 W 5 Q R X |  ¡ }d7|k�s¼t‚d8|k�sÊt‚|j ¡  t!|d9d9d:�}t"t tdd;d<¡ƒ}t#t tdd;d=¡ƒ}d>|d d&< t|tdd5d|dd$d?d3d2gd@� t|tddtd5|dd$g|dA�	 t||d$gdB� t	j
tdCd �� t|tdtd5g dD� W 5 Q R X t	j
t$dEd �� t|tdtd$gdF� W 5 Q R X t%dGdH„ |dI D ƒƒ�sÜt‚t|tdg t|dddJd3d?gdK� t%dLdH„ |dI D ƒƒ�st‚t|tddtdd?g|dM� |dN dO tj&k�sJt‚t"t tdd;dP¡ƒ}|dNd!… |fD ]J}tƒ �"}t|tddtdd?g|ddQ� W 5 Q R X |  ¡ }dR|k�snt‚�qnt!d9d9|ƒ}t'|dS�}t|t(dd(ƒd5d||dd$d?d3d2gdT� t!d9d!|ƒ}t	j
t$dUd �� ttdtd$g|dV� W 5 Q R X ttdd,d(tdg|ddW� |j ¡  t)|t* +dX¡ƒ}| ¡ � d!|dY< W 5 Q R X dZ|d[ d d\< d]|d[ d d\< t	j
t$d^d �� t|dd_d`� W 5 Q R X t |da¡}t,|dbƒ�}| -t.¡ W 5 Q R X t/dcdƒD ]&\}}t0tdd|› �ƒ|d[ | d\< �qþt1|ƒ�* tƒ �}t|dd_ddedf� W 5 Q R X W 5 Q R X |  ¡ }dg|k�stt‚t	j
t$dhd ��  t|tdtd$dd?g|di� W 5 Q R X t	j
tdjd �� t|tdtddk� W 5 Q R X t	j
tdld �� t|tdtdmdn� W 5 Q R X t	j
tdod �� t|tdtddpgdq� W 5 Q R X t	j
tdrd �� t|tdtdgdq� W 5 Q R X t	j
tdsd �� t|tdtdgdq� W 5 Q R X t	j
tdtd �� t|tdtt2dudv�dq� W 5 Q R X t	j
tdwd �� t|tdtt2dxdv�dq� W 5 Q R X t t3dyddz¡}t4|ƒ}tdtt|ddd{� t5|dd|�}tdtt|ddd{� tj6|d&< t	j
td}d �� t|d!|d~� W 5 Q R X tddttdd€d!d�œd‚� d!S )ƒz9Test plotting of -trans.fif files and MEG sensor layouts.zfiducials.fifr]   rd   gs/îB£´¿gaà¹÷pÉ�¿gˆÂ>l¯&¥¿)Úcoord_frameÚidentÚkindÚrr«   gw‘¶¯X?gáÃ6óõÆµ?g´÷Vâ	Ö¡¿r·   g‘R¿ÁÍ˜µ?g«Õ.ØÓ/�¿gwkÓ·P"¥¿r   rD   r5   )r�   rk   )r�   rk   ÚsrcÚ	fsaverageTr³   )rk   r´   Úskullr‰   r½   Úmixedr¥   r¦   r´   )r�   rµ   r¹   Útransr�   Úmri_fiducialsrk   r½   ztransformation matrix.*in headrF   N)rÁ   r½   )rÁ   rÂ   r‰   )rÁ   r¶   r¹   z"head-coordinate source space in mrÚmri)rÁ   r½   r¹   )r�   r´   rÃ   )r�   rµ   r¹   rÁ   r�   r½   rÂ   rk   F)r�   r¨   ZprojsÚecogÚseeg)zEEG 001zEEG 002Z
outer_skinÚouter_skullÚoriginalZ	projected)	r�   rÁ   rk   r¶   r�   r¨   rÄ   rÅ   Úverbosezecog: 1zseeg: 1rg   )r@   Zr0Zhead_radiusr6   z!sample-1280-1280-1280-bem-sol.fifzsample-1280-1280-1280-bem.fifr;   Zinner_skull)r�   r¨   r�   r6   rµ   r¶   )r�   r�   rk   r¨   r6   r¶   r½   )r6   r¶   zA head surface is required)rÁ   r�   rk   r¨   r¶   zNo brain surface found)rÁ   r�   rk   r¶   c                 s   s   | ]}|d  t jkV  qdS ©r¹   N©r   ÚFIFFV_COORD_MRI©rZ   ÚsurfrT   rT   rU   rb   9  s   ÿz,test_plot_alignment_basic.<locals>.<genexpr>ZsurfsÚinflated)r�   r�   rk   r6   r¨   r¶   c                 s   s   | ]}|d  t jkV  qdS rÉ   rÊ   rÌ   rT   rT   rU   rb   >  s   ÿ)r�   r�   rk   r¶   r6   éÿÿÿÿÚidzsample-1280-bem-sol.fif)r�   r�   rk   r¶   r6   rÈ   z7not find the surface for head in the provided BEM model)Úsphere)rÁ   r¨   r�   r6   r½   rµ   r¶   zSphere model does not have)rÁ   r�   rk   r¶   r6   )rÁ   r�   r�   r¹   rk   r¶   r6   Z	show_axesé   rµ   i'  ÚchsZ	coil_typei'  zcoil definition not foundrT   )r�   r¶   ÚtempÚw)ZQUSPIN_ZFOPM_MAGZQUSPIN_ZFOPM_MAG2ZFIELDLINE_OPM_MAG_GEN1ZKERNEL_OPM_MAG_GEN1ZFIFFV_COIL_Údebug)r�   r¶   rµ   rÈ   zplanar geometryzSphere model does not.*boundary)r@   rÁ   r�   rk   r¶   r6   zInvalid value for the .eeg)r@   rÁ   r�   rk   r¨   zInvalid value for the .megÚbar)r@   rÁ   r�   rk   r�   z"Only one brain surface can be plotZpial)r@   rÁ   r�   rk   r¶   zsurfaces.*must bezUnknown surface typezmust be an instance of zsuper clear)r‰   zmust be between 0 and 1é*   r4   r:   )r�   rk   rÁ   Úfwdr¶   r¹   )Zforce_fixedz"transformation matrix.*in head coo)rÁ   rÙ   gš™™™™™Ù?g333333ã?)r³   rÆ   r´   )r�   r¹   rÁ   rk   r¶   )7ÚstrÚopÚjoinr   r	   rJ   r@   r/   rt   rQ   rR   r|   r"   r–   rk   ÚOSErrorrS   Úplotr»   r   r   r~   r#   ÚbackendÚ
_close_allr   ZFIFFV_COORD_HEADÚcopyr   Z_unlockZset_channel_typesr,   Úgetvaluer   r1   r2   ÚRuntimeErrorÚallZFIFFV_BEM_SURF_ID_BRAINr   r0   r   rK   rO   ÚopenÚwriteÚcoil_3dÚ	enumerateÚgetattrr   ÚdictÚdata_dirr   r   rË   )Útmp_pathr—   Zmixed_fwd_cov_evokedÚtempdirZfiducials_pathZfidr˜   r@   r‚   Z	mixed_srcrœ   r¹   Zevoked_eeg_ecog_seegÚlogrÑ   Zbem_solZ	bem_surfsZbem_sol_homogZuse_bemr½   Z	info_cubeZcoil_def_fnameÚiir»   Ú	fwd_fnamerÙ   rT   rT   rU   Útest_plot_alignment_basicØ   sH   ÿÿÿü ÿ  ÿ þ
ÿ     ü

      ý

ÿ   û
ÿÿ   ÿþ
   þ þ ÿÿ
  
þÿ  þÿ  ý
     
ý   þ     ý

þ ÿ

ÿ  þ  ÿ  ÿ þ þ þ þ þ
ÿ  þ  þ
 
þrñ   c              	   C   s¢   t tƒj}|d dkst‚tdddd|d�}tƒ �}t|f|Ž}W 5 Q R X | ¡ }d|d › �|ksht‚t|| |d ƒ t|fdd	d
dgi|—Ž}t|| dƒ dS )zTest fNIRS plotting.rª   é   r¾   rT   T)rÁ   r�   r¶   rÈ   rk   zfnirs_cw_amplitude: ZfnirsZchannelsÚsourcesZ	detectorsr·   N)	r   Ú
nirx_fnamer@   r   rê   r,   r"   râ   rŸ   )r—   rì   r@   Úkwargsrî   rœ   rT   rT   rU   Útest_plot_alignment_fnirs²  s&    
 ÿÿÿÿrö   c           
   	   C   s  t tƒ}ttdddd�}dd„ |D ƒ}d}tdd„ |D ƒƒ}tj d	¡ || ¡}||f|_	t
||ddd
ƒ}|jf |Ž}	|	jd dksŠt‚|	 ¡  |jf dtdd�i|—Ž}	|	jd dks¾t‚|	 ¡  |jf dddœ|—Ž}	|	 ¡  |jf dddœ|—Ž}	|	 ¡  |jf tddd�ddœ|—Ž}	|	 ¡  tjtdd�� |jf dd	gdœ|—Ž W 5 Q R X tjtdd��( |jf dtdd	dd	gd�i|—Ž W 5 Q R X tjtdd��" |jf dtdd�dœ|—Ž W 5 Q R X tjtdd��" |jf dtd d!d"�i|—Ž W 5 Q R X tjtd#d�� |jf dd!dœ|—Ž W 5 Q R X tjtd$d�� td+ddi|—Ž W 5 Q R X tjtd%d�� |jf d!dd&œ|—Ž W 5 Q R X tjtd'd��0 |jf dtd	dd(gd	dd(gdd)�i|—Ž W 5 Q R X |j d¡ tjtd*d�� t|f|Ž}	W 5 Q R X |	 ¡  dS ),z@Test functionality for determining control points with stc.plot.rd   F)rk   Úsmoothing_stepsÚtime_viewerÚshow_tracesc                 S   s   g | ]}|d  ‘qS rW   rT   rY   rT   rT   rU   r\   Ð  s     z*test_process_clim_plot.<locals>.<listcomp>r]   c                 s   s   | ]}t |ƒV  qd S r^   r_   r`   rT   rT   rU   rb   Ò  s     z)test_process_clim_plot.<locals>.<genexpr>r   r5   ÚcenterNrm   )r<   é2   éZ   ©Úpos_limsr=   Úhotrg   )ri   rm   ÚmneÚvalue©r»   Úlimséc   )rm   ro   z	must be arF   Zmonotonically©r»   rþ   z.*must be \(3,\))r]   r<   é   rc   z 'value', 'values', and 'percent')r]   r<   r  rD   )rþ   r»   zmust be "auto" or dictzmust be an instance ofrp   )rp   rm   zExactly oner«   )r  rþ   r»   zAll data were zero)rD   )r/   rt   rê   rk   ru   rK   rL   rM   rx   rE   r   rÞ   r9   r   r{   rQ   rR   r|   rS   r   Ú_dataÚfillr”   r•   )
r€   r�   r‚   rõ   rƒ   r„   r…   r†   rˆ   r‰   rT   rT   rU   Útest_process_clim_plotÈ  s^     ÿ
ÿ",&&  "ÿr	  c                 C   s  d}t |  ¡ ƒdddhkst‚|  ¡ | ¡ ks2t‚| d |d ksJtdƒ‚| d |d  }}| ¡ | ¡ ksttdƒ‚|d |d   kr�dks–n t‚d|kr¢dnd	}t|| || |d
� t| d tƒsÒtdƒ‚t|d tƒsètdƒ‚| d j|d jk�st‚d S )NTrm   ri   Útransparentz	clim keysr»   r  rþ   r  )Úerr_msgr   )ÚsetÚkeysr   r   r~   r   Úname)ÚaÚbrž   ZaaZbbÚkeyrT   rT   rU   Ú_assert_mapdata_equal   s    "r  c               	   C   s²  t ddddƒ} ttdddgdƒtddddgd	�dd
�}t| |ƒ t f | Ž}t| |ƒ t| ƒ t| ƒ}t|dddgƒ t ddddƒ} tt d¡tddddgd�dd
�}t| |ƒ t f | Ž}t| |ƒ t| ƒ t| ƒ}t|dgƒ tddddgd	�}t |ddƒ} ttdddgdƒ|dd
�}t| |ƒ t| ƒ t| ƒ}t|dddddgƒ tddddgd	�}t |ddƒ} ttdddgdƒ|dd
�}t| |ƒ t| ƒ t| ƒ}t|dddddddgƒ dS )z Test basic input-output support.rg   Tg      ð¿r   rr   rd   Ú
matplotlibr  r  )ri   rm   r
  rÏ   rH   rÿ   r  g      à¿g      Ð?g      Ð¿N)	r'   rê   r&   r  r(   r)   r   ÚpltZget_cmap)rŠ   ZwantZout2Úticksrm   rT   rT   rU   Útest_process_clim_round_trip  s\    ý


ý


 þ
 þ
r  c                  C   sô   t tƒ} dd„ | D ƒ}d}tdd„ |D ƒƒ}t || ¡}||f|_t||dddƒ}|jtdd	d
ddddddd�
 |jtdddddddddd�
}|j	}t
||jd dƒ |j d¡ |j d¡ tjt|jtdddd� tjt|jtdddd� d S )!z/Test plotting source estimates with matplotlib.c                 S   s   g | ]}|d  ‘qS rW   rT   rY   rT   rT   rU   r\   G  s     z test_stc_mpl.<locals>.<listcomp>r]   c                 s   s   | ]}t |ƒV  qd S r^   r_   r`   rT   rT   rU   rb   I  s     ztest_stc_mpl.<locals>.<genexpr>rd   r5   r[   ÚvenZrhé   r  Zoct1gü©ñÒMbP?ZReds)
rk   Ú	time_unitÚviewsrp   r÷   r�   rß   ÚspacingZinitial_timeri   ÚmsZdorÚlhZico2Tr   )
rk   r  r  rp   r÷   r�   rß   r  rø   ri   r   )rr   rr   z
ctrl+rightÚleftrn   )rk   rp   r�   rß   Úss)rk   r  r�   rß   N)r/   rt   ru   rK   ZonesrE   r   rÞ   rk   rø   r*   rI   ÚcanvasÚkey_press_eventrQ   rR   rS   )r‚   rƒ   r„   r…   r†   rˆ   rœ   rø   rT   rT   rU   Útest_stc_mplA  sN    

    ý
    ý  ÿ  ÿr"  é<   z!coord_frame, idx, show_all, title)r´   ZgofTZTest)rÃ   Z	amplitudeFNc              
   C   s¨   t tƒ}ttƒ}|j|dt| |||dd�}|j ddd¡ |j ddd¡ |j d¡ |j d¡ |j d	¡ | 	d
¡}t
jtdd�� |j|dt|d� W 5 Q R X dS )úTest mpl dipole plotting.r5   Z	orthoview)rÁ   r�   rk   r¹   ÚidxÚshow_allÚtitler?   rr   rd   rÏ   ÚupZdownr  éÓ   zinstance of Axes3DrF   )ÚaxN)r   Ú	dip_fnamer
   r–   Úplot_locationsrk   r   Zscroll_eventr!  Zadd_subplotrQ   rR   r|   )r¹   r%  r&  r'  ÚdipolesrÁ   rœ   r*  rT   rT   rU   Útest_plot_dipole_mri_orthoview_  s$    	  ü
r.  zsurf, coord_frame, ax, titler³   rÃ   r´   )NZmri_rotatedÚmplÚcheckc              
   C   s¬   t tƒ}ttƒ}|dk	r€t|tƒr*|dks2t|ƒ‚t dd¡\}}t	|ƒ}t
jtdd��" |j|dt|dd… d	d
� W 5 Q R X |j|dtd	|| ||d�}t|tƒs¨t‚dS )r$  Nr/  r·   rd   zbut the length is 2rF   r5   r«   Zoutlines)r*  r?   )rÁ   r�   rk   r?   r¹   rÍ   r*  r'  )r   r+  r
   r–   r~   rÚ   r   r  ÚsubplotsÚlistrQ   rR   rS   r,  rk   r   )rÍ   r¹   r*  r'  r-  rÁ   Ú_rœ   rT   rT   rU   Útest_plot_dipole_mri_outlinesy  s2       
 ÿ     ýr4  c                 C   s\   t tƒ}ttƒ}tddgddgƒD ]*\}}|j|dt||d�}t|tƒs"t	‚q"| j
 ¡  dS )zTest dipole plotting in 3d.r´   rÃ   ÚarrowrÑ   r5   )rÁ   r�   rk   r?   r¹   N)r   r+  r
   r–   r“   r,  rk   r~   r#   r   rß   rà   )r—   r-  rÁ   r¹   r?   rœ   rT   rT   rU   Útest_plot_dipole_orientations‘  s    ÿ   þr6  c                 C   s¢   t tƒ}t|tddƒdtd�}t dd„ |d D ƒ¡}dd„ |d D ƒ}tt||ƒƒ}d	d
g||d d d < t	 
tt||¡ t	 
tt||¡ t	 
ttd|¡ dS )zTest snapshot brain montage.r´   rÃ   r5   )rÁ   r�   rk   c                 S   s   g | ]}|d  dd… ‘qS )ÚlocNr·   rT   ©rZ   ZichrT   rT   rU   r\   ¨  s     z/test_snapshot_brain_montage.<locals>.<listcomp>rÓ   c                 S   s   g | ]}|d  ‘qS )Úch_namerT   r8  rT   rT   rU   r\   ©  s     rd   r«   r   r9  N)r   rJ   r"   r0   rk   rK   Zvstackrê   r“   rQ   rR   r|   r    rS   )r—   r@   rœ   Zxyzr’   Zxyz_dictrT   rT   rU   Útest_snapshot_brain_montageŸ  s      þr:  Úpick_ori)ÚvectorNr»   )ÚsurfaceÚvolumerÀ   c              
   C   s   |   ¡ }|\}}|| }tƒ � t|||d�}	W 5 Q R X |	jd  d9  < t|	tƒrXdnd}
d|	_t|	|
ƒ}tt	dddd|d	 td
d�d�}|dkr¤d|d< ||d< |f |Ž}| 
¡  ~| ¡ }d|d< tjtdd�� |f |Ž W 5 Q R X ~|dk�r0tjtdd��$ |f |dtdddgd�i—Ž W 5 Q R X |dk�rptjtdd��" | ¡ }| d	¡ |f |Ž W 5 Q R X tjtdd��& | ¡ }|jddd� |f |Ž W 5 Q R X | ¡ }|jddd d!d"� |dk�r$|dk�r$tƒ �*}tjtd#d�� |f |Ž W 5 Q R X W 5 Q R X | ¡ }d$|k�s$t‚|	 ¡ }d%|_t||
ƒ}| d	¡ |dk�rRnv|dk�r‚tjtd&d�� |f |Ž W 5 Q R X nF|f |Ž}| 
¡  ~|jd'dd(� tjtd)d�� |f |Ž W 5 Q R X |d*k�rÖd
S |f d+d,d-gd.d/d0œ|—Ž}| 
¡  |jd1k�s
t‚~| ¡ }tdd2�|d3< tjtd4d�� |f |Ž W 5 Q R X tdd5�|d3< tjtd6d�� |f |Ž W 5 Q R X td7d8d9�|d3< |f |Ž}| 
¡  ~d
S ):z4Test plotting of scalar and vector source estimates.)r;  rd   rÏ   Zplot_3drÞ   r5   FÚerrorr½   N)Ú
resolution)rk   rø   rù   r÷   rÈ   r½   Úvolume_optionsr<  r³   r=  rß   rD   rù   rF   zuse "pos_lims"rm   r«   r·   rý   )r>  rÀ   zwhen stc is a mixed or volzcannot be usedT)rù   rø   Zflatrg   rn   rÖ   )r=  r  rp   rÈ   Zflatmapz	offset: 0r¾   zSourceEstimate when a flatmaprÎ   )r=  r  zsurface="flat".*views="flat"rÀ   ÚlatZmedr  r  Ú
horizontal)r  rp   Zview_layout)rd   r·   )ZblendingrA  Zmip)ZbadkeyÚunknowng      4@r=   )r@  Zsurface_alpha)Z_get_3d_backendr-   r   r9   r~   r   r�   ré   rê   rk   r{   rá   rQ   rR   rS   r|   ÚpopÚupdater,   ÚFileNotFoundErrorrâ   r   Z_subplot_shape)r€   Zall_src_types_inv_evokedr;  r»   r�   rß   Zinvsr˜   Úinvrˆ   Zmeth_keyÚmethrõ   r‰   Zthese_kwargsrî   Zfs_stcZ	flat_methrT   rT   rU   Útest_plot_source_estimates·  s°    
   ý

(


ÿ





 þþ
rJ  Úorientation)rC  ÚverticalÚ	diverging)TFr  rr   rd   r<   c           
      C   sú   t  ¡ \}}tdd�}|r$||d< n||d< t||| d�}|j}| dkrX|j|j }}n|j|j }}|rÄ|d dkržtt 	|dd	… d	d	d
… ¡ ƒ| }	qÈtt 	|d	d	d
… ¡ ƒdg | }	n|}	|j
j ¡  tdd„ |ƒ D ƒ|	ƒ t|ƒ g ƒ d	S )zTest brain colorbar plotting.r  )r»   rþ   r  )rK  rL  r   rd   NrÏ   c                 S   s    g | ]}t | ¡  d d¡ƒ‘qS )u   âˆ’ú-)ÚfloatZget_textÚreplace)rZ   ÚhrT   rT   rU   r\   2  s     z'test_brain_colorbar.<locals>.<listcomp>)r  r1  rê   r$   r*  Zget_yticklabelsZget_xticklabelsr2  rK   Úarrayro   r   Z	draw_idler   )
rK  rM  r  r3  r*  rm   ZcbarZhaver}   r  rT   rT   rU   Útest_brain_colorbar  s*    

(& ÿrS  c           
      C   s„   t tƒ}t dd„ |D ƒ¡}d}d}tj d¡}| ||¡}|t || ¡g }t||ddƒ}| 	¡ j
ddd	td
d�}	|	 ¡  ~	dS )z+Test plot_surface() for mixed source space.c                 S   s   g | ]}|d  ‘qS )ZnuserT   rY   rT   rT   rU   r\   ;  s     z3test_mixed_sources_plot_surface.<locals>.<listcomp>r«   r·   r   rd   rB  Úsplitr¾   F)r  rp   r�   rk   rl   N)r/   Ú
fwd_fname2rK   ru   rL   rM   rN   rO   r   r=  rÞ   rk   r{   )
r€   r½   ÚNÚTÚSÚrngr9   rX   rˆ   r‰   rT   rT   rU   Útest_mixed_sources_plot_surface6  s     þrZ  c           
   	   C   sú   t tƒ}dd„ |D ƒ}d}tdd„ |D ƒƒ}t || ¡}|j}tj d¡ |jd ¡|tj |d ¡|  	t
¡< ||f|_t||ddƒ}d	}t|d
|dtddd�}	tjtdd�� tg ƒ W 5 Q R X tjtdd�� tdƒ W 5 Q R X t|	ddd� dS )zTest plotting linked brains.c                 S   s   g | ]}|d  ‘qS rW   rT   rY   rT   rT   rU   r\   R  s     z$test_link_brains.<locals>.<listcomp>r]   c                 s   s   | ]}t |ƒV  qd S r^   r_   r`   rT   rT   rU   rb   T  s     z#test_link_brains.<locals>.<genexpr>r   rc   rd   re   r5   rf   Trg   rh   zis emptyrF   ztype is BrainrD   )r�   ÚcameraN)r/   rt   ru   rK   rv   rw   rL   rM   rx   ry   rz   rE   r   r   rk   rQ   rR   rS   r%   r|   )
r€   r‚   rƒ   r„   r…   r†   r‡   rˆ   ri   r‰   rT   rT   rU   Útest_link_brainsM  s2    ÿ
   ür\  )~Úos.pathÚpathrÛ   Úpathlibr   ÚnumpyrK   Znumpy.testingr   r   rQ   Zmatplotlib.pyplotZpyplotr  Zmatplotlib.colorsr   Zmatplotlib.figurer   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   Zmne.source_estimater   Zmne.ior   r   r   r   r   Zmne.io._digitizationr   Zmne.io.pickr   Zmne.io.constantsr   Zmne.minimum_normr   Zmne.vizr   r   r    r!   r"   r#   r$   r%   r&   Zmne.viz._3dr'   r(   r)   Zmne.viz.utilsr*   Z	mne.utilsr+   r,   r-   Zmne.datasetsr.   Zmne.source_spacer/   Zmne.transformsr0   Zmne.bemr1   r2   Z	data_pathrë   rÜ   rk   r–   rt   r+  r¬   rô   ÚabspathÚdirnameÚ__file__Zio_dirÚbase_dirrJ   rð   rU  r­   r®   r¯   r°   rç   rV   Zrequires_testing_dataÚmarkZslowtestr‹   r›   rŸ   ZparametrizeÚparamZ_pytest_markr²   r¸   rñ   rö   r	  r  r  r"  Útimeoutr.  r4  r6  r:  rJ  rS  rZ  r\  rT   rT   rT   rU   Ú<module>
   sî   <,
ÿÿ
ÿ
ÿ
ÿ(ü

 Y
62
ÿÿý
]