U
    f»{já8  ã                   @   sl  d dl Z d dlm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mZmZmZmZ d dlmZmZmZ d dlmZmZ d dlmZmZmZ d dl m!Z! e "e #e$¡ddd	¡Z%e "e%d
dd¡Z&e "e%d
d¡Z'e "e%dd
d¡Z(e "e%d
dd¡Z)e "e%dd
dd¡Z*e "e%dd
dd¡Z+dd„ Z,dd„ Z-dd„ Z.dd„ Z/dd„ Z0dd„ Z1dd„ Z2d d!„ Z3d"d#„ Z4dS )$é    N)Úassert_array_almost_equalÚassert_array_equalÚassert_allcloseÚassert_equal)Úmake_eeg_layoutÚmake_grid_layoutÚread_layoutÚfind_layoutÚHEAD_SIZE_DEFAULT)Ú	_box_sizeÚ_find_topomap_coordsÚgenerate_2d_layout)Ú
pick_typesÚ	pick_info)Úread_raw_kitÚ_empty_infoÚ	read_info)ÚFIFFz..ÚioZtestsÚdataztest_raw.fifZbtiztest_ctf_comp_raw.fifZkitztest.sqdztest_umd-raw.sqdc                  C   s¬   t dƒ} tjddddddddddddgtjd�}ddddd| ¡ dddd	dd
œddddd| ¡ dddd	dd
œddddd| ¡ dddddd
œg| d< d| _|  ¡  |  ¡  | S )zMake test info.iè  ç        ç      ð?)Zdtypeé   zICA 001r   iö  éÿÿÿÿ)ÚcalÚch_nameZ	coil_typeZcoord_frameÚkindÚlocZlognoÚrangeZscannoÚunitZunit_mulzICA 002é   g   €Œa?zEOG 061éÊ   é=   ix  ék   ÚchsF)r   ÚnpÚarrayZfloat32ÚcopyÚ	_unlockedZ_update_redundantÚ_check_consistency)Z	test_infor   © r*   ú]/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/channels/tests/test_layout.pyÚ_get_test_info"   sJ    ÿ     þ     þ      þù
r,   c                 C   sj   t | ƒ}tddd�}| t |d¡¡ tt |d¡ddd�}t|j|jdd� |j|jks^t‚t	|ƒ d	S )
zTest IO with .lout files.úVectorview-allF©Úscalezfoobar.loutú./©Úpathr/   r    ©ÚdecimalN)
Ústrr   ÚsaveÚopÚjoinr   ÚposÚnamesÚAssertionErrorÚprint©Útmp_pathÚtempdirÚlayoutZlayout_readr*   r*   r+   Útest_io_layout_lout7   s    ÿrA   c                 C   sb   t | ƒ}tddd�}| t |d¡¡ tt |d¡ddd�}t|j|jdd� |j|jks^t‚d	S )
zTest IO with .lay files.ZCTF151Fr.   z
foobar.layr0   r1   r    r3   N)	r5   r   r6   r7   r8   r   r9   r:   r;   r=   r*   r*   r+   Útest_io_layout_layC   s    ÿrB   c               	   C   sn  t tƒ} t| ddddd�}| d d= tddtd�}t| |f|Ž}| d D ]}|d  tj¡ qHt| |f|Ž}t	||d	d
� tddfdtdffD ]D}t 
|¡| d d d< t| |f|Ž}t	|d |dd… ddd� qŽt| dd�}tjtdd�� t| |f|Ž W 5 Q R X | d  dddgtjdœ¡ tjtdd�� t| |f|Ž W 5 Q R X d| _| d dd… | d< tjtdd�� t| |f|Ž W 5 Q R X | d  | d d ¡ tjtdd�� t| |f|Ž W 5 Q R X dd„ | d D ƒ| d< tjtdd�� t| |f|Ž W 5 Q R X d| d< tjtd d�� t| |f|Ž W 5 Q R X g | d< tjtd d�� t| |f|Ž W 5 Q R X dS )!z.Test mapping of coordinates in 3D space to 2D.FT)ÚmegÚeegZeogZstimÚdigéU   )Zignore_overlapZ	to_sphereZspherer$   r   gü©ñÒMbP?©Úatolr   r   ÚrNr    zZ=0 point movedg�íµ ÷Æ°>)Úerr_msgrH   Úmag©rC   zCannot determine location)Úmatchr   é   )rI   r   z!Number of EEG digitization pointséþÿÿÿzoverlapping positionsc                 S   s   g | ]}|d  t jkr|‘qS )r   )r   ÚFIFFV_POINT_EEG)Ú.0Údr*   r*   r+   Ú
<listcomp>€   s    ÿz,test_find_topomap_coords.<locals>.<listcomp>zDid not find any digitizationzNo digitization points found)r   Ú	fif_fnamer   Údictr
   r   Úfillr%   Únanr   r&   ÚpytestÚraisesÚ
ValueErrorÚappendr   rP   r(   ÚRuntimeError)ÚinfoÚpicksÚkwargsZl0ÚchÚl1Zz_ptZ	mag_picksr*   r*   r+   Útest_find_topomap_coordsN   sN    
ÿÿrb   c                 C   s(  t | ƒ}d}d}t|td�}ttƒ}|d  |d d ¡ t|g d�}tt|j	ƒtdd	„ |d D ƒƒƒ | 
t ||d
 ¡¡ t||dd�}t|j|ƒ t|j|jdd� t|j	|j	ƒ tjtt|dd� tjtt|dd� tjtt|dd� tjtt|dd� tjtt|dd� tjtt|dd� dS )zTest creation of EEG layout.ZfooZtest_raw©r   r2   ÚbadsÚch_namesih  )Úexcludec                 S   s   g | ]}|  d ¡r|‘qS )ZEE)Ú
startswith)rQ   r`   r*   r*   r+   rS   —   s    
ÿz(test_make_eeg_layout.<locals>.<listcomp>ú.loutF)r   r2   r/   çš™™™™™¹?rG   gš™™™™™¹¿)Zradiusg333333ã?©Úwidthgš™™™™™ñ?©ÚheightN)r5   r   Ú	lout_pathr   rT   r[   r   r   Úlenr:   r6   r7   r8   r   r   r9   rX   rY   rZ   )r>   r?   Útmp_nameÚ	lout_nameÚ	lout_origr]   r@   Úlout_newr*   r*   r+   Útest_make_eeg_layoutŽ   s&    "rt   c                 C   sØ   t | ƒ}d}d}t|td�}ttƒ ƒ}| t ||d ¡¡ t||d�}t|j	|ƒ t|j
|j
ƒ t|j|jƒ ttƒ dd�}|j
d |j
d ks–t‚|j
d	 |j
d
 ks®t‚t|j
ddd…f |j
ddd…f ƒ dS )zTest creation of grid layout.ÚbarZtest_icarc   rh   r    )Zn_col)r   r   )r   r   ©r   r   ©r   r   r   rN   Nr   )r5   r   rn   r   r,   r6   r7   r8   r   r   r9   r:   r;   )r>   r?   rp   rq   rr   r@   rs   r*   r*   r+   Útest_make_grid_layout¨   s    
rx   c               
   C   s,  t jtttƒ dd� ttƒ} t| dd�}t| |ƒ}t| dd�}t| |ƒ}t	 
| ¡}t|d ƒD ]$\}}| dd¡}||d	 | d
< q^t| ddd�}	t| |	ƒ}
t| dd�}|jdks¶t‚tdd„ |jD ƒƒsÎt‚t|dd�}t|jdƒ t|dd�}t|jdƒ tdd„ |jD ƒƒ�st‚t| dd�}t|jdƒ t|ƒ}t|jdƒ t|dd�}t|jdƒ t|dd�}t|jdƒ t| dd�}t|jdƒ t|ƒ}t|jdƒ t|dd�}t|jdƒ t|dd�}t|jdƒ t| dd�}t|jdƒ t|
ƒ}t|jdƒ t|
dd�}t|jdƒ tttƒƒ}t|jdƒ t td¡}tt|ƒƒ}t|jdƒ ttƒ}t|jƒ}t|jdƒ ddddg|jd < |j ¡  t|jƒ}t|jdƒ d!D ]@}|j ¡ � ||jd"< W 5 Q R X t|jƒ}|jd#k�s¤t‚�q¤ttƒ}t|jƒ}t|jd$ƒ | ¡  |jt d%¡d&� t  d'¡ dS )(zTest finding layout.Zmeep)Zch_typeZgradrL   rK   re   ú Ú r$   r   FT)rC   rD   Nr-   c                 s   s   | ]}d |kV  qdS ©ry   Nr*   ©rQ   Úkr*   r*   r+   Ú	<genexpr>Õ   s     z#test_find_layout.<locals>.<genexpr>rC   c                 s   s   | ]}d |kV  qdS r{   r*   r|   r*   r*   r+   r~   Ý   s     zVectorview-gradzVectorview-magrD   ZEEGzCTF-275zexported4D_linux_raw.fifZmagnesWH3600zKIT-157zMEG 013zMEG 014zMEG 015zMEG 016rd   )é#   é4   é6   ié  Zkit_system_idZcustomz	KIT-UMD-3é
   )r^   Úall)!rX   rY   rZ   r	   r,   r   rT   r   r   r'   ÚdeepcopyÚ	enumerateÚreplacer   r;   rƒ   r:   r   Úfname_ctf_rawr7   r8   Úbti_dirr   Úfname_kit_157r]   r)   Z_unlockÚfname_kit_umdZplotr%   ZarangeÚpltÚclose)Zsample_infoZgradsZsample_info2ZmagsZsample_info3Zsample_info4ÚiiÚnameÚnewZeegsZsample_info5ZloutZfname_bti_rawZraw_kitÚvalZraw_umdr*   r*   r+   Útest_find_layout¿   s‚    








r‘   c                  C   s¤  t tg ƒdƒ dg} t t| ƒdƒ ddg}t t|ƒdƒ dddg}t t|ƒd	ƒ t t d
dd¡t d
dd¡¡\}}| ¡ | ¡  }}t ttj||f ƒdƒ tj d¡}| 	dd¡}t|ƒ\}}|dk	sÎt
‚|dk	sÚt
‚dddg}t t|dd�dƒ dddg}t t|dd�dƒ dddg}t t|dd�dƒ dddg}t t|dd�dƒ dddg}tt|ddd�dƒ dddg}tt|dd�dƒ dddg}t t|dd�d ƒ dS )!zTest calculation of box sizes.)r   r   rv   )ç      Ð?ç      à?)ç      è?r“   )r“   r   )r’   r’   )r”   r’   )r“   r”   )r“   r“   g      à¿r“   é   )ri   ri   é*   éd   r    Nçš™™™™™Ù?rj   )r˜   r“   çš™™™™™É?)r™   r   rl   )r“   r˜   )r”   çÍÌÌÌÌÌÜ?ri   )r   ri   )rk   rm   r   rw   )Úpadding)rš   rš   )r   r   r%   ZmeshgridZlinspaceZravelZc_ÚrandomÚRandomStateZrandr;   r   )ÚpointZpointsÚxÚyÚrngrk   rm   r*   r*   r+   Útest_box_size  s:    
$






r¢   c            
   	      sn  d} d}t | ƒ‰ tj d¡ ||¡}ddg\}}t ‡ fdd„ˆ D ƒ¡}t|||d�}d	d
g\}}|jdd…dd…f  ¡ dks„t	‚|jdd…dd…f  
¡ dks¦t	‚tjdd��4 t|| t|| ƒ |j| t|j| ƒ ƒ W 5 Q R X t|jdddgf ||gƒ |jjd dk�st	‚t|jƒdk�s2t	‚t||d�}	t|	jdd…dd…f  ¡ | ¡ t|ƒ ƒ dS )z)Test creation of a layout from 2d points.r‚   é   r–   r™   r“   c                    s   g | ]}ˆ D ]}||f‘qqS r*   r*   )rQ   ÚiÚj©Zsider*   r+   rS   a  s       z+test_generate_2d_layout.<locals>.<listcomp>)ÚwÚh)é   r   )é   r   Nr    r   r   Úignore)ÚinvalidrN   é   )Úbg_image)r   r%   rœ   r�   Zrandnr&   r   r9   Úmaxr;   ÚminZerrstater   ÚfloatÚshapero   Úbox)
ZsnobgZsbgr®   r§   r¨   ZxyÚltZcomp_1Zcomp_2Zlt_bgr*   r¦   r+   Útest_generate_2d_layoutX  s&    ""ÿrµ   )5r'   Úos.pathr2   r7   Únumpyr%   Znumpy.testingr   r   r   r   rX   Zmatplotlib.pyplotZpyplotr‹   Zmne.channelsr   r   r   r	   r
   Zmne.channels.layoutr   r   r   Zmner   r   Zmne.ior   r   r   Zmne.io.constantsr   r8   ÚdirnameÚ__file__Zio_dirrT   rn   rˆ   r‡   r‰   rŠ   r,   rA   rB   rb   rt   rx   r‘   r¢   rµ   r*   r*   r*   r+   Ú<module>   s4   @Z?