U
    f»{jÇ<  ã                   @   sZ  d dl mZ d dlZd dlmZ d dlmZmZ d dl	Z
d dlmZmZmZmZ d dlZd dl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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' d dl(m)Z) d dlm*Z* d dl+m,Z, d dl-m.Z.m/Z/m0Z0 e 1e 2e 3e4¡¡d¡Z5dZ6dd„ e6D ƒZ7dd„ e6D ƒZ8dd„ e6D ƒZ9dd„ e6D ƒZ:e 1e5d¡Z;e 1ej<dd�ddd¡Z=e 1ej<dd�ddd¡Z>e 1ej<dd�ddd¡Z?dZ@ejAdd „ ƒZBd!d"„ ZCd#d$„ ZDd%d&„ ZEd'd(„ ZFejGjHd)d*„ ƒZId+d,„ ZJd-d.„ ZKd/d0„ ZLd1d2„ ZMd3d4„ ZNejAejG Od5e>e?f¡ejG Od6d7¡d8d9„ ƒƒƒZPejAd:d;„ ƒZQdS )<é    )ÚBytesION)ÚreduceÚpartial)Úassert_array_almost_equalÚassert_array_equalÚassert_allcloseÚassert_equal)Útesting)Úread_raw_fifÚread_raw_bti)Ú_make_bti_dig_points)
Ú_read_configÚ_read_head_shapeÚ_read_bti_headerÚ_get_bti_dev_tÚ_correct_transÚ_get_bti_infoÚ_loc_to_coil_transÚ_convert_coil_transÚ_check_nan_dev_head_tÚ_rename_channels)Ú_test_raw_reader)Ú	pick_info)ÚFIFF)Ú
pick_types)Úassert_dig_allclose)Ú	TransformÚcombine_transformsÚinvert_transformÚdata)ÚlinuxÚsolarisc                 C   s   g | ]}t  td | ¡‘qS )ztest_pdf_%s©ÚopÚjoinÚbase_dir©Ú.0Úa© r)   úX/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/io/bti/tests/test_bti.pyÚ
<listcomp>"   s     r+   c                 C   s   g | ]}t  td | ¡‘qS )ztest_config_%sr"   r&   r)   r)   r*   r+   #   s     c                 C   s   g | ]}t  td | ¡‘qS )z
test_hs_%sr"   r&   r)   r)   r*   r+   $   s     c                 C   s   g | ]}t  td | ¡‘qS )zexported4D_%s_raw.fifr"   r&   r)   r)   r*   r+   %   s   ÿztmp_raw.fifF)ÚdownloadZBTiZerm_HFHzc,rfDCZ4Dsimzc,rfDC,fn50,oéø   c                   C   s   t ttdd� dS )z#Test reading data from 2500 system.N)Ú	pdf_fnameÚhead_shape_fname)r   r   Ú
fname_2500r)   r)   r)   r*   Útest_read_25004   s    r1   c                    s~   d‰ ‡ fdd„}|   tjjjd|¡ ttd td td ddd�}tf |Ž}|j	 
ˆ ¡}t|jd | d	 t d
tj¡ƒ dS )z:Test that we don't set loc to None when no trans is found.ZMLzAc                     s8   t | |Ž}dd„ |d D ƒ ˆ ¡}|d | d d= |S )Nc                 S   s   g | ]}|d  ‘qS )Únamer)   ©r'   Úchr)   r)   r*   r+   @   s     z>test_no_loc_none.<locals>._read_config_bad.<locals>.<listcomp>ÚchsÚdevZ	transform)r   Úindex)ÚargsÚkwargsÚcfgÚidx©Úch_namer)   r*   Ú_read_config_bad>   s    
z*test_no_loc_none.<locals>._read_config_badr   r   F)r.   Úconfig_fnamer/   Úrename_channelsÚsort_by_ch_namer5   Úlocé   N)ÚsetattrÚmneÚioZbtiÚdictÚ
pdf_fnamesÚconfig_fnamesÚ	hs_fnamesr   Úch_namesr7   r   ÚinfoÚnpÚfullÚnan)Zmonkeypatchr>   r9   Úrawr;   r)   r<   r*   Útest_no_loc_none:   s     þ
rQ   c                  C   s0   t D ]&} t| ƒ}tdd„ |d D ƒƒst‚qdS )zTest read bti config file.c                 s   s"   | ]}d |  ¡ ko|dkV  qdS )ÚunknownÚ N)Úlower)r'   Úblockr)   r)   r*   Ú	<genexpr>R   s   ÿz#test_read_config.<locals>.<genexpr>Zuser_blocksN)rI   r   ÚallÚAssertionError)Úconfigr:   r)   r)   r*   Útest_read_configM   s
    ÿrZ   c            	      C   s¨   t ttd td td d�} | dd… \}}d|d  d|d   }}||k||k }|  ¡  ||¡}|dd… \}}|jd | ¡ ksŒt	‚|jd |jd ks¤t	‚dS )zTest crop and append raw.r   )r.   r?   r/   Ng      Ð?éÿÿÿÿg      è?é   )
r   r   rH   rI   rJ   ÚcopyÚcropÚshapeÚsumrX   )	rP   ÚyÚtÚt0Út1ÚmaskZraw_Zy_Ú_r)   r)   r*   Útest_crop_appendV   s      þrg   c                  C   s¤   d} t ddtd| ƒƒ}ttttƒD ]|\}}}t|||dd�}|jd }|jd }|jd	 }t ddtd| ƒƒ}tt	|ƒ|dd
ƒ}	t|	|ddƒ}
t
|
d |d ƒ q"dS )zTest transformations.©ç        g{®Gáz”?g)\�Âõ(¼?Úctf_megÚmegri   F©ÚpreloadÚ	dev_ctf_tÚ
dev_head_tÚ
ctf_head_tÚctf_headÚheadÚtransN)r   r   ÚziprH   rI   rJ   r   rL   r   r   r   )Z	bti_transÚ	bti_dev_tÚpdfrY   ÚhsrP   rn   Zdev_head_t_oldrp   rb   Zdev_head_t_newr)   r)   r*   Útest_transformsd   s    



 ÿrx   c               	   C   s¼  t ttttƒD �]¦\} }}}tjtt| ddd� tjtt| |ddd� t	 
t¡rZt t¡ t|dd�}t| ||dd�}dt|ƒks†t‚t|jdt… |jdt… ƒ t|jd d	 |jd d	 d
ƒ t|jd ƒdksÚt‚t|j|jdd� dd„ ||fD ƒ\}}t||d
ƒ dd„ ||fD ƒ\}}	t||	ƒ t|dt… d |dt… d ƒ tdd„ |jd dt… D ƒdd„ |jd dt… D ƒƒ tdd„ |jd dt… D ƒdd„ |jd dt… D ƒƒ t|jdt… |jdt… ƒ dD ]V}
|j|
 dk�rün>|j|
 dk	�st‚dD ]$}t|j|
 | |j|
 | ƒ �q�qæ| t¡ ttƒ}t|ƒ dD ]N}
t|j|
 tƒ�svt‚|j|
 d	 }t|jdƒ t  !|t  "d¡¡�r\t‚�q\t t¡ qdS )z"Test bti conversion to Raw object.ÚeggsFrl   ZspamTZRawBTiNro   rs   é   Údig)ië  i"  éd   )Úlimitc                 S   s.   g | ]&}t  d d„ |jd dt… D ƒ¡‘qS )c                 S   s   g | ]}|d    ¡ ‘qS ©rB   ©Úflatten©r'   Údr)   r)   r*   r+   �   s   ÿú'test_raw.<locals>.<listcomp>.<listcomp>r5   N©rM   ZconcatenaterL   ÚNCH©r'   Zr_r)   r)   r*   r+   �   s   þ
ÿztest_raw.<locals>.<listcomp>c                 S   s.   g | ]&}t  d d„ |jd dt… D ƒ¡‘qS )c                 S   s   g | ]}|d    ¡ ‘qS r~   r   r�   r)   r)   r*   r+   ’   s   ÿrƒ   r5   Nr„   r†   r)   r)   r*   r+   ’   s   þ
ÿr   c                 S   s   g | ]}|d  ‘qS ©Úranger)   ©r'   Úcr)   r)   r*   r+   ˜   s     r5   c                 S   s   g | ]}|d  ‘qS r‡   r)   r‰   r)   r)   r*   r+   ™   s     c                 S   s   g | ]}|d  ‘qS ©Úcalr)   r‰   r)   r)   r*   r+   š   s     c                 S   s   g | ]}|d  ‘qS r‹   r)   r‰   r)   r)   r*   r+   ›   s     )ro   rn   rp   )ÚtoÚfromrs   )é   r�   r�   )#rt   rH   rI   rJ   Úexported_fnamesÚpytestZraisesÚ
ValueErrorr   r#   ÚexistsÚtmp_raw_fnameÚosÚremover
   ÚreprrX   r   rK   r…   r   rL   Úlenr   r   r   Z_calsÚsaveÚprintÚ
isinstancerG   r_   rM   ÚallcloseÚeye)rv   rY   rw   ZexportedÚexÚraZcoil1Zcoil2Zloc1Zloc2ÚkeyZentÚreZthis_tr)   r)   r*   Útest_rawz   sh    ÿÿ

 ÿþ
þ

"ÿÿÿ
r¢   c            	         sX  t tttƒD �]â\} }}t| ||dddddddd�
\}}td||dddddddd�
\}}t|d d	d
„ |d D ƒƒ tdd
„ |d D ƒdd… dddddgƒ tdd
„ |d D ƒdd… dddddgƒ t|t|dddd�ƒ}t|t|dddd�ƒ}|d dk	�st‚|d dk	�st‚|d dk	�s*t‚|d dk	�s<t‚t|d dƒ t|d dƒ t|d dƒ t|d dƒ t|d |d ƒ t|d |d ƒ d D ] }t	|| d! || d! ƒ �qœt	t
 d"d
„ |d D ƒ¡t
 d#d
„ |d D ƒ¡ƒ qt| |dddd$�‰ t| |ddddd%�}‡ fd&d
„|jD ƒ}ˆ j| ˆ _t	ˆ j|jƒ t	|j|jƒ dS )'zBTest private renaming, reordering and partial construction option.ri   rh   FÚE31©ZE63ZE64)
r.   r?   r/   Ú
rotation_xÚtranslationÚconvertÚecg_chÚeog_chr@   rA   NrK   c                 S   s   g | ]}|d  ‘qS r<   r)   r3   r)   r)   r*   r+   Ã   s     z9test_info_no_rename_no_reorder_no_pdf.<locals>.<listcomp>r5   c                 S   s   g | ]}|  d ¡r|‘qS ©ÚA©Ú
startswith©r'   Únr)   r)   r*   r+   Ä   s     
 é   ÚA22ÚA2ZA104ZA241ZA138c                 S   s   g | ]}|  d ¡r|‘qS rª   r¬   r®   r)   r)   r*   r+   Æ   s     
 éûÿÿÿZA133ZA158ZA44ZA134ZA216T)rk   ZstimÚrespZsfreqZlowpassZhighpassZ	meas_date)rn   ro   rp   rs   c                 S   s   g | ]}|d  ‘qS r~   r)   r3   r)   r)   r*   r+   Þ   s     c                 S   s   g | ]}|d  ‘qS r~   r)   r3   r)   r)   r*   r+   ß   s     )r.   r?   r/   rA   rm   )r.   r?   r/   r@   rA   rm   c                    s   g | ]}ˆ j  |¡‘qS r)   )Úbti_ch_labelsr7   r3   ©Zraw1r)   r*   r+   ë   s     )rt   rH   rI   rJ   r   r   r   r   rX   r   rM   Úarrayr   rµ   Ú_datarK   )	rv   rY   rw   rL   Úbti_infoZinfo2r    Úraw2Zsort_idxr)   r¶   r*   Ú%test_info_no_rename_no_reorder_no_pdf´   s–          ü
      ü
ÿÿÿÿÿþ   þ   ýr»   c               
   C   sr  t tdddddddd�} ttttƒD �]F\}}}| |||dd�\}}t|||ddd	�j}t|t	|ddd
�dd� t|t	|ddd
�dd� t
||ƒ}t|d d ƒ}t||d d ƒ t|d d t d¡ƒ t|d d t d¡ƒ t|ƒ\}	}
}}}t|	|
|||ddd�\}}}t|d t d¡ƒ tt||d |d ƒƒD ]^\}\}}}t|d |d ƒ t|d |d ƒ t |d |d ¡�rŠt‚|dk�r> �qž�q>dd„ |d D ƒ}t|d ƒD ]®\}}| d¡�sÔ�q¼|| }|d | d }|d | d }t||dd� t ||¡�rt‚|d  d ¡}|d  d!¡}t|d | d" tjƒ t|d | d" tjƒ �q¼q$d#S )$zTest bti no-conversion option.ri   rh   Fr£   r¤   )r¥   r¦   r§   r¨   r©   r@   rA   )r§   T)r.   r?   r/   r§   rm   )rk   Zref_meg)r]   Úbti_transformr   rn   rs   ro   r�   rp   )r§   Zuse_hpir{   ÚidentÚré
   c                 S   s   i | ]}|d  |d “qS )Ú
chan_labelrB   r)   r3   r)   r)   r*   Ú
<dictcomp>  s      z&test_no_conversion.<locals>.<dictcomp>r5   rK   r«   rB   gVçž¯Ò<)ZatolzMEG 001r±   Zcoord_frameN)r   r   rt   rH   rI   rJ   r   rL   r   r   r   r   r   rM   r�   r   r   Ú	enumerater   rœ   rX   r­   r   r7   r   ZFIFFV_COORD_DEVICEZFIFFV_MNE_COORD_4D_HEAD)Úget_inforv   rY   rw   Zraw_inforf   Zraw_info_conr¹   rn   ÚnasionÚlpaÚrpaÚhpiÚ
dig_pointsr{   rb   ÚiiÚoldÚnewÚconZch_mapZch_labelrd   Út2Zt3Zidx_aZidx_br)   r)   r*   Útest_no_conversionñ   s†        ü   þþ ÿ
 ÿ  ÿ

þþrÎ   c               
   C   sÐ   t tttƒD ]¾\} }}t| ||ddd�}t| dƒ�}t| ¡ ƒ} W 5 Q R X t|dƒ�}t| ¡ ƒ}W 5 Q R X t|dƒ�}t| ¡ ƒ}W 5 Q R X t| ||ddd�}t|ƒ t	|dd… d |dd… d ƒ qdS )zTest bti bytes-io API.TF)r§   rm   ÚrbNr   )
rt   rH   rI   rJ   r   Úopenr   Úreadr—   r   )rv   rY   rw   rP   Zfidrº   r)   r)   r*   Útest_bytes_io-  s    rÒ   c                  C   sh   t D ]^} t| ƒ\}}}}}t|||||ƒ\}}}dddh}	ttdd„ dd„ |D ƒƒƒ}
|	|
 rt‚qdS )	zTest reading bti headshape.Úkindr½   r¾   c                 S   s   t | ƒt |ƒ S )N)Úlist)Úxra   r)   r)   r*   Ú<lambda>E  ó    z&test_setup_headshape.<locals>.<lambda>c                 S   s   g | ]}|  ¡ ‘qS r)   )Úkeysr�   r)   r)   r*   r+   F  s     z(test_setup_headshape.<locals>.<listcomp>N)rJ   r   r   Úsetr   rX   )rw   rÄ   rÅ   rÆ   rÇ   rÈ   r{   rb   rf   ÚexpectedÚfoundr)   r)   r*   Útest_setup_headshape>  s    

ÿrÜ   c                  C   s0  t tƒD �] \} }t|t|  dd�}tddt|d d ƒƒ}d}d}d}t||ƒ}tdd	|ƒ}d
}d}	tƒ }
|d D ],}|d }| d¡s–| 	d|¡}|
 
|¡ qtt|
||	d�}t|
|ƒ}tj|d dd…df< t|ƒ t |ƒD ]H\}\}}|d | d }|dk	rà|ràt|d | d ƒ}t|||ƒ}qàqdS )z>Test unlikely case that the device to head transform is empty.T)rA   rj   rq   r¼   r   ri   rh   rk   r£   r¤   r5   r2   r«   rÀ   )r¨   r©   rs   Né   rB   )rÂ   rH   r   rI   r   r   r   rÔ   r­   ÚgetÚappendr   rt   rM   rO   r   r   r   )rÉ   r.   r¹   rn   r§   r¥   r¦   ru   r¨   r©   Zbti_ch_namesr4   r=   Zneuromag_ch_namesZ
ch_mappingr;   Zchan_4dZchan_neuromagrB   rb   r)   r)   r*   Útest_nan_transJ  sH      ÿÿ

  ÿ
rà   Úfnamerm   )TFc                 C   s   t | |d� dS )zTest for gh-6048.rl   N)r   )rá   rm   r)   r)   r*   Útest_bti_ch_datas  s    râ   c                  C   s*   t tddd�} ttt| jdd�ƒdƒ dS )z.Check that EOG channels can be set (gh-10092).F)ZX65ZX67ZX69ZX66ZX68)rm   r©   T)Zeogr°   N)r   Ú	fname_simr   r˜   r   rL   )rP   r)   r)   r*   Útest_bti_set_eog{  s
    þrä   )RrF   r   r•   Úos.pathÚpathr#   Ú	functoolsr   r   ÚnumpyrM   Znumpy.testingr   r   r   r   r‘   rE   Zmne.datasetsr	   Zmne.ior
   r   Zmne.io._digitizationr   Zmne.io.bti.btir   r   r   r   r   r   r   r   r   r   Zmne.io.tests.test_rawr   Zmne.io.pickr   Zmne.io.constantsr   r   Z	mne.utilsr   Zmne.transformsr   r   r   r$   ÚabspathÚdirnameÚ__file__r%   ÚarchsrH   rI   rJ   r�   r”   Z	data_pathr0   rã   Zfname_sim_filtr…   Zrequires_testing_datar1   rQ   rZ   rg   rx   ÚmarkZslowtestr¢   r»   rÎ   rÒ   rÜ   rà   Zparametrizerâ   rä   r)   r)   r)   r*   Ú<module>   sn   0ÿÿÿÿ
	
9=<)