U
    f»{j†ž  ã                   @   s~  d dl m Z mZmZmZ d dlZd dlmZ d dlZd dl	Z	d dl
Zd dlmZmZ d dlmZ d dl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m Z 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+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 d d
l7m8Z8 d dl9m:Z:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZH d dlImJZJmKZKmLZLmMZM d dlNmOZOmPZPmQZQ d dlRmSZS d dlTmUZUmVZVmWZW e Xe YeZ¡ddddd¡Z[e Xe YeZ¡d¡Z\e Xe\d¡Z]e Xe\d¡Z^e Xe\d¡Z_e Xe YeZ¡dddd¡Z`e Xe`d¡Zae Xe`d¡Zbe)jcdd�Zce Xecd¡Zde Xedd¡Zeeed  Zfe Xecd!d"¡Zge Xecd#d$¡Zhe	ji jd%ekdd&d'�d gfekdd&d(�d)gfekdd*d(�d)gfekdd+d(�g fekdd&d,�d-gfekd&d.�d/d0d1gfekd2d.�d/d0gfekd3d.�d/gfekd4d.�d0gfekd5d.�d1gfg
¡d6d7„ ƒZld8d9„ Zmd:d;„ Znd<d=„ Zod>d?„ Zpd@dA„ ZqdBdC„ ZrdDdE„ ZsdFdG„ ZtdHdI„ ZudJdK„ ZvdLdM„ ZwdNdO„ ZxdPdQ„ ZydRdS„ Zze	ji jdTdUdVgdWdXgdYdZgg¡d[d\„ ƒZ{d]d^„ Z|d_d`„ Z}e)j~dadb„ ƒZe)j~dcdd„ ƒZ€dedf„ Z�dgdh„ Z‚didj„ Zƒdkdl„ Z„e)j~dmdn„ ƒZ…e	ji jdoe	j†ege) ‡¡ dp�e]g¡dqdr„ ƒZˆe	ji jdse]dtf¡e	ji jdudv¡dwdx„ ƒƒZ‰dydz„ ZŠd{d|„ Z‹dS )}é    )ÚdatetimeÚ	timedeltaÚtimezoneÚdateN)Úassert_array_equalÚassert_allclose)Úsparse)ÚEpochsÚread_eventsÚ	pick_infoÚ
pick_typesÚAnnotationsÚread_evokedsÚmake_forward_solutionÚmake_sphere_modelÚsetup_volume_source_spaceÚwrite_forward_solutionÚread_forward_solutionÚ	write_covÚread_covÚread_epochsÚcompute_covariance)Úread_polhemus_fastscanÚmake_standard_montageÚequalize_channels)Úmake_fixed_length_events)Útesting)Úread_fiducialsÚwrite_fiducialsÚ_coil_trans_to_locÚ_loc_to_coil_transÚread_raw_fifÚ	read_infoÚ
write_infoÚ	meas_infoÚ
ProjectionÚBaseRawÚread_raw_ctfÚRawArray)ÚFIFF)Ú_generate_meas_idÚ	DATE_NONE)ÚInfoÚcreate_infoÚ_merge_infoÚ_force_update_infoÚRAW_INFO_FIELDSÚ_bad_chans_compÚ_get_valid_unitsÚanonymize_infoÚ_stamp_to_dtÚ_dt_to_stampÚ_add_timedelta_to_stampÚ_read_extended_ch_info)Úmake_inverse_operatorÚwrite_inverse_operatorÚread_inverse_operatorÚapply_inverse)Ú_write_dig_pointsÚ_make_dig_pointsÚDigPoint)Ú	Transform)Úcatch_loggingÚassert_object_equalÚ_record_warningsz..ÚdataZ	fsaveragezfsaverage-fiducials.fifztest_raw.fifztest_chpi_raw_sss.fifztest-eve.fifZkitZtestsztest_hsp.txtztest_elp.txtF)ÚdownloadZSSSZtest_move_anon_zcrossTalk_raw_sss.fifZCTFztestdata_ctf.dsÚmisczsample_invalid_birthday_raw.fifzkwargs, wantT)ÚmegÚeeg)rF   Zfnirsé   ÚhboÚhbr)rF   rE   é   )rF   é   é   é   ÚgradZplanar1Zplanar2Úmagc              	   C   sP   t ddddddddgƒ}dd	„ |d
 D ƒddgks6t‚t|f| Ž}t||ƒ dS )z*Test create_info behavior with grad coils.é   é   rG   rE   rO   rP   rI   c                 S   s"   g | ]}|d  t jkr|d ‘qS )Ú	coil_typeÚch_name)r)   ZFIFFV_COIL_VV_PLANAR_T1©Ú.0Úch© rX   úZ/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/io/tests/test_meas_info.pyÚ
<listcomp>P   s    ÿz)test_create_info_grad.<locals>.<listcomp>ÚchsÚ2Ú3N)r-   ÚAssertionErrorr   r   )ÚkwargsZwantÚinfoÚpicksrX   rX   rY   Útest_create_info_grad?   s    ÿrb   c                  C   s:   t ƒ } t| tƒst‚tdd„ | D ƒƒs*t‚d| ks6t‚dS )zTest the valid units.c                 s   s   | ]}t |tƒV  qd S ©N)Ú
isinstanceÚstr)rV   ÚunitrX   rX   rY   Ú	<genexpr>Z   s     z'test_get_valid_units.<locals>.<genexpr>zn/aN)r2   rd   Útupler^   Úall)Zvalid_unitsrX   rX   rY   Útest_get_valid_unitsV   s    rj   c                  C   sZ   t j d¡} |  dd¡}ddddg|d< ttt|ƒƒ|ƒ |  d¡}ttt|ƒƒ|ƒ dS )z Test loc<->coil_trans functions.r   rN   rK   rM   é   N)ÚnpÚrandomZRandomStateZrandnr   r    r   )ÚrngÚxrX   rX   rY   Útest_coil_trans^   s    
rp   c                     sn  t  d¡} t| ddƒ}t| ¡ ƒttƒks.t‚dd„ |d D ƒ}tj|ksNt‚t	j
ttddd	� t	j
ttdgd
d	� t	j
ttdgdddgd� t	j
ttt  dg¡gdd	� t	j
ttdgdt  dg¡d� t	j
ttdgddd� t	j
ttdgdt  dg¡d� tdƒ}t|jddd�}| |¡ dd„ |d D ƒ}| ¡ ‰ t  ‡ fdd„|d D ƒ¡‰ ˆ d7 ‰ t|ˆ dd� dS )z!Test some create_info properties.rK   ç     @�@rG   c                 S   s   h | ]}|d  ’qS )rS   rX   rU   rX   rX   rY   Ú	<setcomp>n   s     z!test_make_info.<locals>.<setcomp>r[   úTest Chéè  ©Úch_namesÚsfreqiüÿÿ©rv   rw   Zch_typesZawesome)rw   ZmontageZ	biosemi32c                 S   s   g | ]}|d  dd… ‘qS )ÚlocNrM   rX   rU   rX   rX   rY   rZ   €   s     z"test_make_info.<locals>.<listcomp>c                    s   g | ]}ˆ | ‘qS rX   rX   )rV   rT   ©Z
ch_pos_monrX   rY   rZ   ƒ   s     rv   )ç        r{   gwÛ…æ:�¤?gñhãˆµøä>)ZatolN)rl   Zlonglongr-   ÚsetÚkeysr0   r^   r)   ZFIFFV_COIL_EEGÚpytestÚraisesÚ	TypeErrorÚ
ValueErrorÚarrayÚKeyErrorr   rv   Úset_montageZ_get_ch_posr   )Zn_chr`   Z
coil_typesÚmZch_posrX   rz   rY   Útest_make_infoh   s@    
ÿÿ
ÿÿ
ÿ
ÿr†   c               	      s¦   t dddgddd�} | d dddgks*t‚t dddgddd�} | d d	ddgksTt‚tjtd
d��: ddg‰ ˆ  ‡ fdd„tjd D ƒ¡ t ˆ ddd� W 5 Q R X dS )z1Test duplicate channel names with running number.ÚArq   Úerror©Úverboserv   zA-0zA-1zA-2zA-azAdding a single alphanumeric©Úmatchc                    s   g | ]}ˆ d  › d|› �‘qS )r   ú-rX   )rV   Úc©Zch_nrX   rY   rZ   —   s     z2test_duplicate_name_correction.<locals>.<listcomp>Ú0N)r-   r^   r~   r   r�   ÚextendÚstringÚascii_lowercase©r`   rX   r�   rY   Útest_duplicate_name_correction‰   s    r•   c              	   C   s$  t tƒ\}}|d d tjks"t‚|d d tjks8t‚| d }t|||ƒ t |ƒ\}}||ksdt‚t||ƒD ]r\}}|d |d ksŠt‚|d |d ksžt‚|d |d ks²t‚t|d |d ƒ t	|t
ƒsÒt‚t	|t
ƒsnt‚qn|d d  d7  < tjtdd	�� t|||d
d� W 5 Q R X dS )zTest fiducials i/o.r   Úcoord_frameÚidentútest.fifÚkindÚrrK   z"coord_frame entries that are incomr‹   T©Ú	overwriteN)r   Úfiducials_fnamer)   ZFIFFV_COORD_MRIr^   ZFIFFV_POINT_CARDINALr   Úzipr   rd   r>   r~   r   r�   )Útmp_pathZptsr–   Z
temp_fnameZpts_1Zcoord_frame_1ÚptZpt_1rX   rX   rY   Útest_fiducials_io›   s"    r¡   c                  C   s  t tƒ} d\}}}ttƒ}t|d ƒ}t| |dd… |||dd�}| ¡ }tddd�}d	|ksbt‚d
|ksnt‚| ||fD ]¨}t	|j
tƒsŒt‚t|j
ƒ}	d|	ks¦t|	ƒ‚d|	ks²t‚t|j
d d ƒ}
d|
ksÔt|
ƒ‚d|
ksät|
ƒ‚d|
ksôt|
ƒ‚ttfD ]"}d||j
d d d ƒksüt‚qüqx| j
 ¡ }t|d ƒ}dd„ |d D ƒ}|d |k�s\t‚t|d ƒ|k�srt‚d|d< |d= |d d= | ¡  |d |d k�s¨t‚t|d ƒ|dd… k�sÆt‚d|d d d< | ¡  |d d dk�sôt‚t|ƒ}t|ƒ}||k�st‚dS )zTest info object.)rK   çš™™™™™É¿g      à?)r   rL   NrK   )ra   é   Zaaaaa)ÚaÚbr¤   r¥   z2002-12-03 19:01:10 UTCz/146 items (3 Cardinal, 4 HPI, 61 EEG, 78 Extra)Údigr   ZLPAz(-71.4, 0.0, 0.0) mmz
head framez4 (FIFFV_COORD_HEAD)r–   r[   c                 S   s   g | ]}|d  ‘qS )rT   rX   rU   rX   rX   rY   rZ   Ô   s     ztest_info.<locals>.<listcomp>Únchanrv   ÚbarÚexperimenteréÿÿÿÿÚfoorT   )r!   Ú	raw_fnamer
   Ú
event_nameÚintr	   Úaverager,   r^   rd   r`   Úreprre   ÚcopyÚlenÚlistZ_update_redundantÚdict)ÚrawZevent_idZtminZtmaxÚeventsÚepochsÚevokedr`   ÚobjÚrepZdig_repÚfuncr§   rv   Z	info_dictÚinfo2rX   rX   rY   Ú	test_info³   sN    

ÿ

r½   c              
   C   sN  t tƒ}| d }t d¡|d d< |d d }t||ƒ t |ƒ}|d d }t|d ƒt|d ƒksht‚t||ƒ d}t tƒ}||d d d	< ||d
 d d	< ||d d< d|d d< d|d d< | 	¡ � |d dkràd|d< W 5 Q R X |d }|d }t||ƒ t |ƒ}|d d d	 |k�s&t‚|d
 d d	 |k�s@t‚|d d |k�sVt‚|d |k�sht‚|d d dk�s~t‚|d d dk�s”t‚dD ] }	|d |	 ||	 k�s˜t‚�q˜t|d d |d ƒ t
 ¡ }
t|dƒ�}|
 | ¡ ¡ W 5 Q R X |
 ¡ }
| d }||k�st‚t||ƒ t
 ¡ }tt|ƒdƒ�}| | ¡ ¡ W 5 Q R X | ¡ }|
|k�sjt‚t tƒ}| 	¡ � d|d< W 5 Q R X t|dd� |d dk�s¬t‚| d }t||ƒ |d dk�sÐt‚t |ƒ}|d dk�sêt‚|j	dd��" tdd d dddtjd!�|d< W 5 Q R X | d" }tjtd#d$�� t||ƒ W 5 Q R X dS )%zTest IO of info.zinfo.fifrN   Ú
dev_head_tZtransr[   õ   Ã©Úproc_historyr   ÚcreatorÚhpi_measÚsubject_infoÚhis_idg333333&@Úweightgffffff@ÚheightÚgantry_angleNr{   Úmeas_id)ÚsecsÚusecsÚversionÚmachidÚrbz	info2.fifÚ	meas_daterˆ   r‰   z	info3.fifT©Zcheck_afteri  rK   ©Útzinfor˜   zmust be between r‹   )r"   r¬   rl   Úeyer#   r²   r^   r   Ú
chpi_fnameÚ_unlockÚhashlibÚmd5ÚopenÚupdateÚreadÚ	hexdigestre   r3   r   r   Úutcr~   r   ÚRuntimeError)rŸ   r`   Ú	temp_fileÚt1r¼   Út2rÁ   rÇ   rÈ   ÚkeyÚm1ZfidZtemp_file_2Úm2Ztmp_fname_3ÚfnamerX   rX   rY   Útest_read_write_infoì   sv    






&rä   c              
   C   s  t tdd�}| d }| d }tjtdd��  t||dd…dd…f ƒ W 5 Q R X tjtd	d�� t||ƒ W 5 Q R X t||ƒ t |d
dd�}d}t|||ƒ t ddgddgg¡}tj	||ddd� tjtdd��, tj
tdd�� t |dd� W 5 Q R X W 5 Q R X dS )zTest Writing for dig files.Úignore©Úon_header_missingztest.txtztest.mnezmust be of shaper‹   NrL   Ú	extensionr…   )rf   rç   z.Dig points diverged after writing and reading.gìQ¸…»ZÀg33333óX@g¤p=
×3Q@ú	Ú
)Ú	delimiterÚnewlinezFastSCAN headerÚwarn)r   Ú	hsp_fnamer~   r   r�   r<   r   rl   r‚   ZsavetxtÚwarnsÚRuntimeWarning)rŸ   ZpointsÚdestZdest_badZpoints1ÚerrZpoints2rX   rX   rY   Útest_io_dig_points4  s(    $
  ÿró   c                 C   sr   | d }dD ]`}t dgd|gd�}dddg|d	 d
 d dd…< t||ƒ t|ƒ}|d	 d
 d tjkst‚qdS )z%Test round trip for coordinate frame.r˜   )rG   ZseegZecogZdbsrI   rJ   rs   rq   rx   gš™™™™™©?g{®Gáz„?g¸…ëQ¸ž¿r[   r   ry   NrM   r–   )r-   r#   r"   r)   ZFIFFV_COORD_HEADr^   )rŸ   rã   Zch_typer`   r¼   rX   rX   rY   Útest_io_coord_frameK  s      ÿ
rô   c                  C   s¸  t tdd�} tdgdd�}|d dks*t‚| ¡ � t| d�|d< W 5 Q R X |d sXt‚t|d d	 d
 dddgƒ t tdd�}|dd… \}}}tdgdd�}|d dks°t‚| ¡ �" t||||dd… dƒ|d< W 5 Q R X |d sìt‚dd„ |d D ƒ t	j
¡}t|d | d
 dddgƒ t tt|dd… ¡ t ttd|dd… ¡ t ttdd|dd… ¡ t ttddd|dd…dd…f ¡ t ttdddd|dd…dd…f ¡ dS )z)Test application of Polhemus HSP to info.rå   ræ   rs   rq   ru   r¦   N)Úextra_pointsr   rš   grö´Ã_»¿gx$(~Œ¹?g=D£;ˆ�±?rM   c                 S   s   g | ]}|d  ‘qS )r—   rX   )rV   ÚdrX   rX   rY   rZ   k  s     z(test_make_dig_points.<locals>.<listcomp>gg|_\ªÒV?g¨/•ÈOôŠ?gÏbÎØ<s¿rL   )r   rî   r-   r^   rÔ   r=   r   Ú	elp_fnameÚindexr)   ZFIFFV_POINT_NASIONr~   r   r�   )rõ   r`   Z
elp_pointsZnasionZlpaZrpaÚidxrX   rX   rY   Útest_make_dig_pointsW  s8     ÿ

&ÿÿrú   c                  C   sª   t dddgdd�} | d d dks&t‚| d d dks:t‚| d d	 dksNt‚| d | d ksbt‚| d dddgksxt‚t g dd�} | d g ks”t‚t dddgdd�} d
S )z.Test some of the redundant properties of info.r¤   r¥   rŽ   rq   ru   rv   r   rK   rL   N)r-   r^   r”   rX   rX   rY   Útest_redundantv  s    rû   c                  C   s  t dddgdd�} t dddgdd�}t| |gƒ}|d	 s@td
ƒ‚|d s\tddddddgƒ‚t tt| | g¡ t dddgdd�}t tt| |g¡ t| |ƒ |d | d ks°t‚|d d | d d ksÌt‚t| |gƒ t tt| tdgƒ¡ d | _	|_	d| d< t| |fƒd dk�st‚d|d< t| |fƒd dk�s>t‚d|d< t tt| |f¡ t dddgdd�}t| |gƒ}|d �r„t‚|d �r’t‚dddœg| d< t| |gƒd | d k�sÀt‚d|_	dddœg|d< t| |gƒd |d k�sôt‚dddœg|d< t tt| |g¡ t
tƒ}ddg|d< t|d  ƒd!k�s@t‚t|d" ƒd#k�sVt‚t d$g|d d%gƒ}|d g k�s|t‚t||gdd&�}t|d  ƒd'k�s¢t‚t|d ƒd(k�s¸t‚t|d" ƒd#k�sÎt‚t|d  ƒd!k�sät‚t|d ƒd(k�sút‚t|d" ƒd#k�st‚d)S )*z&Test merging of multiple Info objects.r¤   r¥   rŽ   rq   ru   rö   ÚeÚfr§   rQ   rv   ÚgÚhÚig     @@rw   r   )rw   rq   Té2   Zkit_system_idé<   rÂ   Zhpi_resultsrM   rN   )Úf1Úf2rH   úMEG 2443úEEG 053Úbadsr[   ix  r¦   é’   zSTI YYYZstim)Zforce_update_to_firstiy  rL   N)r-   r.   r^   r~   r   r�   rÜ   r/   r´   Ú	_unlockedr"   r¬   r²   )Zinfo_aZinfo_bZinfo_mergedZinfo_cZinfo_dZinfo_0Zinfo_1Zinfo_outrX   rX   rY   Útest_merge_infoŠ  s\    

ÿr
  c            
   
   C   s  t dddgdd�} |  ¡  t g dd�}| ¡  |  ¡ }dddg|d< t t|j¡ |  ¡ }| ¡ � d|d	< W 5 Q R X t t|j¡ |  ¡ }| ¡ � d|d
< W 5 Q R X t t|j¡ |  ¡ }| ¡ � d|d< W 5 Q R X t t|j¡ |  ¡ }|jdd�� d|d	< d|d
< d|d< W 5 Q R X t|d	 t	ƒ�s4t
‚t|d
 t	ƒ�sHt
‚t|d t	ƒ�s\t
‚|  ¡ }| ¡ � d|d d d< W 5 Q R X t t|j¡ tjtdd�� t dddddgdd�}W 5 Q R X t|d dddddgƒ d}| d | }ddt d¡dfdt d¡dffD ]z\}}}|  ¡  || }	|||< |dk�rH|| d |< tjt|d�� |  ¡  W 5 Q R X |	||< |dk�r|	| d |< �q|  ¡ }d|d d d< tjtdd�� | ¡  W 5 Q R X |  ¡ }|d d d= tjtd d�� | ¡  W 5 Q R X d!S )"z'Test consistency check of Info objects.r¤   r¥   rŽ   rq   ru   r«   r¨   r  rw   ZhighpassZlowpassTrÏ   rK   rL   r[   rT   zChannel names are notr‹   rv   zb-0zb-1zb-2r   )rT   ç      ð?znot a stringry   é   z12 elementsÚcalzfloat or intzkey errantly presentzkey missingN)r-   Z_check_consistencyr±   r~   r   rÜ   rÔ   r�   rd   Úfloatr^   rï   rð   r   rl   ÚzerosÚonesr€   rƒ   )
r`   Z
info_emptyr¼   Zinfo3rù   rW   rà   ÚbadrŒ   ÚoldrX   rX   rY   Útest_check_consistencyÅ  st    



 þ

r  c              
   C   s  t  ttd¡ tddddddtjd�}d}d}d}|  ¡ }| d¡ t|ƒ td	dddddtjd�}|  	¡ �( || d
< t
dddddddd�| d< W 5 Q R X |  ¡ }d|_||d< ||d< ||d< t dg¡|d< ||d d< ||d d< ||d d< t|ƒ|d d< d|d d< |d d= d|d d< ||d
< d|_| ¡ }tdd�}	d D ]h}
| |
¡}|d!k	�rJd"|k�spt‚t|d# |d$ f|	 ƒ}|d |d#< |d |d$< d|d% d!d!…< �qJ| ¡ }| 	¡ �* d|d d< d|d d< d|d d< W 5 Q R X td&d�}| 	¡ � d'|d d< || |d
< W 5 Q R X d D ]h}
| |
¡}|d!k	�r.d"|k�sTt‚t|d# |d$ f| ƒ}|d |d#< |d |d$< d|d% d!d!…< �q.td(d�}t|  ¡ ƒ}t||ƒ t|  ¡ dd)�}t||ƒ t|  ¡ |jd*�}t||ƒ t jtd+d,�� t|  ¡ |jd*� W 5 Q R X |  	¡ � d!| d
< W 5 Q R X d|_d!|d
< td |d d#< td |d d$< td |d- d#< td |d- d$< |d  dd!¡ d|_| d
 d!k�rÖt jtd.d,�� t|  ¡ |jd*�}W 5 Q R X nt|  ¡ |jd*�}t||ƒ tƒ � t|  ¡ ƒ}W 5 Q R X t||ƒ d!S )/ú2Test that sensitive information can be anonymized.r«   iÐ  rK   r   rÐ   Zmne_anonymizez<Anonymized using a time shift to preserve age at acquisitionÚfile_idiÚ  rÎ   Zfoobarr¨   )éÃ  rN   é   )ÚidrÄ   Ú	last_nameÚ
first_nameÚbirthdayÚsexÚhandrÃ   TÚdescriptionr©   Z	proj_nameZproj_idr  r  r  rÄ   r  r  )i¹  rN   r£   r  FiE  )Údays©r  rÈ   NÚmsecsrÉ   rÊ   rÌ   é+   )r  rL   é   iÏÇ ©Úkeep_his©Údaysbackzanonymize_info generatedr‹   rÈ   zall information)r~   r   r€   r3   r   r   rÛ   r±   ÚpoprÔ   r´   r	  rl   r‚   re   r   Úgetr^   r6   rA   r  rÜ   r+   rï   rð   rB   )Z	base_infoZdefault_anon_dosZdefault_strZdefault_subject_idZdefault_descr`   rÎ   Zexp_infoZ
exp_info_3Zdelta_trà   ÚvalueÚtmpZ
exp_info_2Z	delta_t_2Z	delta_t_3Znew_inforX   rX   rY   Ú_test_anonymize_info  sÀ    

 û




 ÿ




 ÿ




ÿ
r,  z	stamp, dt)iÑNIPéÆÀ )iÜ  é	   r£   rK   é!   rH   r-  )iñ‚™¤é>_  )i�  rH   é   é   é   é9   r0  )i®ÞÉéý )i•  rM   é   é   rN   é   r5  c              	   C   sx   t | ƒ}t|ƒ}| |kst‚|t|dtjiŽks4t‚tdddƒ}| ¡ � ||d< W 5 Q R X t|d ƒt	|ƒkstt‚dS )z2Test conversions of meas_date to datetime objects.rÑ   rK   rq   rG   rÎ   r   N)
r4   r5   r^   r   r   rÛ   r-   rÔ   re   r°   )ÚstampÚdtZmeas_datetimeZstamp2r`   rX   rX   rY   Útest_meas_date_convert•  s    	
r;  c              	   C   s|  t  ttd¡ ttƒ}| tddgddgddd�¡ |j}t	 
d¡|j }|j|ksXt‚t|jj|ƒ ttƒ}t||dd… ddd	dd
�}t|j ¡ ƒ t|j ¡ ƒ t||fdƒD ]Þ\}}| ¡ }tdddd�}||jd< |j|d� |jd }	|�r|	|k�s:t‚n2|	d dk�st‚|	d dk�s,t‚d|	k�s:t‚t|tƒ�rJdnd}
|
dk�r\dnd}| | }|j|dd� |
dk�rŠt|ƒ q´t|ƒ q´| ¡  |j|k�s¬t‚t|jj|ƒ |jj|jd k�sÒt‚t|jd ƒ}|jjt|ƒk�söt‚|j  ¡ � d|jd< W 5 Q R X |jdd� t j!t"dd�� |jdd� W 5 Q R X |jjdk�sZt‚|j|k�sjt‚t|jj|ƒ dS )r  r«   r   rK   ÚdummyN)ÚonsetÚdurationr  Ú	orig_timerL   r{   gš™™™™™¹?)Zbaseline©TFZ	Volunteer)rÄ   r  r  rÃ   r$  rÄ   r�   r  r  rµ   Zepoútmp_raw.fifztmp_epo.fifTr›   rÎ   r&  ÚNoner‹   é{   )#r~   r   r€   r3   r!   r¬   Zset_annotationsr   Ú
first_samprl   ZarangeZ_first_timer^   r   Úannotationsr=  r
   r­   r	   r,  r`   r±   rž   r´   Ú	anonymizerd   r&   Úsaver   r?  r5   r4   rÔ   rï   rð   )rŸ   rµ   rD  Zexpected_onsetr¶   r·   Úinstr%  rÃ   ÚsiZ	inst_typerã   Zout_pathr9  rX   rX   rY   Útest_anonymize©  s^    ý




rJ  c                 C   sN   t tƒ}| d }| |¡ t |ƒ}|jd  ¡ tdddƒ j}|j|d� dS )z*Test that IO does not break anonymization.rA  rÎ   i„  rK   r&  N)r!   r¬   rG  r`   r   r  rF  )rŸ   rµ   Z	temp_pathZraw2r'  rX   rX   rY   Útest_anonymize_with_ioê  s    
rK  c                 C   s<  t tƒ}t|t|dg d�ƒ}|d d d d }|d  ¡ }t|tjƒsLt‚| d }t	||ƒ t |ƒ}|d d d d d }t|tjƒsŽt‚t
| ¡ | ¡ ƒ | ¡ }t|tjƒs¸t‚t
| ¡ | ¡ ƒ ||d d d d d< | d	 }t	||ƒ t |ƒ}|d d d d d }t|tjƒ�s&t‚t
| ¡ | ¡ ƒ d
S )zTest CSR and CSC.T)rF   ÚexcluderÀ   r   Zmax_infoÚsss_ctcZ	decouplerr˜   z	test1.fifN)r"   Ússs_ctc_fnamer   r   r±   rd   r   Z
csc_matrixr^   r#   r   ZtoarrayZtocsrZ
csr_matrix)rŸ   r`   rM  Úctrã   Ú	info_readZct_readZcsrrX   rX   rY   Útest_csr_csc÷  s*    

rQ  c                     s\  t tdd�‰ tˆ dƒ} tˆ jdg dd�}‡ fdd„|D ƒ}tdd	gddgƒD ]T\}}ˆ  |¡ tˆ j|ƒ\}}||kszt‚t	|ƒdksŠt‚t
ˆ | d
ddd|d� qLtˆ jdg dd�}‡ fdd„|D ƒ}tdd	gddgƒD ]~\}}ˆ  |¡ tˆ j|ƒ\}}||k�st‚t	|ƒdk�st‚tƒ �0}t
ˆ | d
ddd|dd� d| ¡ k�sLt‚W 5 Q R X qØd
S )zTest check picks compensation.F)ÚpreloadiŸ† T)rF   rL  Úref_megc                    s   g | ]}ˆ j d  | ‘qS ©rv   r”   ©rV   rù   ©rµ   rX   rY   rZ     s     z7test_check_compensation_consistency.<locals>.<listcomp>r   rK   Nr¢   gš™™™™™É?)rR  ra   c                    s   g | ]}ˆ j d  | ‘qS rT  r”   rU  rV  rX   rY   rZ   "  s     é   )rR  ra   rŠ   zRemoving 5 compensators)r'   Ú	ctf_fnamer   r   r`   rž   Úapply_gradient_compensationr1   r^   r²   r	   r@   Úgetvalue)r¶   ra   Zpick_ch_namesÚcompZexpected_resultÚretÚmissingÚlogrX   rV  rY   Ú#test_check_compensation_consistency  s.    


 ÿr_  c              	   C   s„   t dddƒ}| ¡ �B dD ]}tƒ ||< qtddddd	�|d
< tddddd�|d< W 5 Q R X | d }t||ƒ t|ƒ}t||ƒ dS )zTest round-trip for new fields.rK   rq   rG   r   r¤   r¥   rŽ   rö   )ÚtypeÚmodelÚserialÚsiteZdevice_infor  g       @rü   )rK   rL   )Zhe_level_rawZhelium_levelZorig_file_guidrÎ   Zhelium_infoztemp-info.fifN)r-   rÔ   r*   r´   r#   r"   rA   )rŸ   r`   rà   rã   rP  rX   rX   rY   Útest_field_round_trip/  s(    
   ÿ
  þ
rd  c                  C   s\   t dddgdd�} t dddgdd�}t| |gƒ\} }| jddgksFt‚|jddgksXt‚dS )z4Test equalization of channels for instances of Info.ZCH1ZCH2ZCH3r  )rw   ZCH4N)r-   r   rv   r^   )Zinfo1r¼   rX   rX   rY   Útest_equalize_channels@  s
    re  c                  C   sJ   t dddƒ} dt| ƒkst‚tddt d¡ƒ}|| d< d	t| ƒksFt‚d
S )zTest Info repr.rK   rt   rG   z7 non-empty valuesrF   Úhead)rN   rN   r¾   z(dev_head_t: MEG device -> head transformN)r-   r°   r^   r?   rl   r  )r`   ÚtrX   rX   rY   Ú	test_reprJ  s
    rh  c               	   C   sª   t tƒ} d|  ¡ kst‚|  ¡ � g | d< W 5 Q R X d|  ¡ ksDt‚g | d< d|  ¡ ks\t‚ddg| d< d|  ¡ ksxt‚d|  ¡ ksˆt‚|  ¡ }dD ]}||ks”t‚q”dS )	zTest Info HTML repr.ZProjectionsÚprojsr  rB  r  r  )z204 Gradiometersz102 Magnetometersz
9 Stimulusz60 EEGz1 EOGN)r"   r¬   Z_repr_html_r^   rÔ   )r`   ÚhtmlrW   rX   rX   rY   Útest_repr_htmlT  s    
rk  c               	   C   s8   t jtdd�� ttƒ} W 5 Q R X d| jd ks4t‚dS )z5Test handling of an invalid birthday in the raw file.zNo birthday will be setr‹   r  rÃ   N)r~   rï   rð   r!   Úraw_invalid_bday_fnamer`   r^   rV  rX   rX   rY   Útest_invalid_subject_birthdayg  s    rm  rã   )Zmarksc           !   	      s(  |  d¡r2t|ƒ‰ˆ ˆjdd… ¡ g ‰ˆj}nB|  d¡s@t‚t|ƒ‰‡fdd„tˆjddd	�D ƒ‰ˆjd
d… }tt	 
dt|ƒf¡|dd…  ¡ ddd�}t|ddddd�}ˆj|dd� ˆj ¡  ˆ |ˆ ¡ dd¡ dd„ ˆjD ƒ}| d }tƒ �}ˆ |¡ W 5 Q R X | ¡ }d|k�s(t‚ttˆj|ƒƒ‰‡fdd„|D ƒ}|dd… }ˆ ˆ¡ ˆjd D ]6}	dD ]*}
|	d |
 D ]}|ˆjk�s‚t‚�q‚�qr�qjˆjd �rØˆjdk�s¾t‚ˆ d¡ ˆjdk�sØt‚tˆjd ƒdk�sðt‚ˆjd d d d |k�st‚|dd…  ˆjd< ‰ ‡ fdd„|D ƒ}tƒ �}ˆj|ddd� W 5 Q R X | ¡ }d |k�spt‚ˆjD ]}t|ƒd!k�svt‚�qvtƒ �}t|dd"�}W 5 Q R X | ¡ }d#|k�sÄt‚ˆ|fD ]}|j|k�sÌt‚�qÌ|jd d d d |k�st‚~| td$d%d&„ ¡ tƒ �}t|dd"�}W 5 Q R X | ¡ }d'|k�sLt‚ˆjd �r‚|jdk�sht‚| d¡ |jdk�s‚t‚| td$t¡ ‡fd(d„t|dd… ƒD ƒ}|jd d d d |k�sÎt‚tˆtˆƒƒ}| d) }| |¡ t|ƒ}||fD ]*}|jd* |k�st‚|j|k�sþt‚�qþŠ~g |jd< t|d+d"�}| d, }t ||ƒ t!|ƒ}||fD ]*}|d- |k�s|t‚|d g k�sft‚�qf~| "¡ }ˆ |jd< |j#dk�s¶t‚| d. }| |¡ t$|ƒd }||fD ]*}|j|k�sðt‚|jd ˆ k�sÜt‚�qÜ~~t%ƒ � t&d/d/|jƒ}W 5 Q R X t'tddd0ggdd1dggd2�d3�}t(|jd||ƒ}| d4 }t)||ƒ t*|ƒ}||fD ]H}|d5 d6 |k�sšt‚|d7 d* |k�s°t‚|d7 d ˆ k�s€t‚�q€~t+|j||ƒ}| d8 }t,||ƒ t-|ƒ}||fD ]} | d7 d* |k�süt‚�qüt.||ƒ dS )9z'Test that our remapping works properly.ÚfifNrM   z.dsc                    s   g | ]}ˆ j | ‘qS rX   rT  )rV   ÚpickrV  rX   rY   rZ   €  s   ÿz+test_channel_name_limit.<locals>.<listcomp>FT)rF   rS  é    é#   rK   rL   )rC   Ú	col_namesÚ	row_namesZnrowÚtestr   r{   )rC   ZactiveÚdescr™   Zexplained_var)Zremove_existingc                 S   s   g | ]}d | ‘qS )Z123456789abcdefgrX   ©rV   ÚnamerX   rX   rY   rZ   Š  s     ztest-raw.fifÚ	truncatedc                    s   g | ]}ˆ | ‘qS rX   rX   rv  )ÚrenamerX   rY   rZ   ‘  s     Úcomps)rs  rr  rC   ri  rr  r  c                    s   g | ]}|ˆ kr|‘qS rX   rX   rv  )r  rX   rY   rZ   Ÿ  s     )rœ   rŠ   ztruncated to 15r  r‰   z$Reading extended channel informationr7   c                 S   s   d S rc   rX   )ro   ÚyÚzrX   rX   rY   Ú<lambda>²  ó    z)test_channel_name_limit.<locals>.<lambda>Úextendedc                    s:   g | ]2\}}|d dt tˆ ƒƒ … › dtˆ ƒ| › �‘qS )Né   r�   )Úboolr²   )rV   Únirw  )Ú	ref_namesrX   rY   rZ   ½  s   ÿztest-epo.fifrv   rˆ   ztest-cov.fifÚnamesztest-ave.fifÚautog{®Gáz¤?r  )ZrrÚnn)Úposztemp-fwd.fifZsolrs  r`   ztest-inv.fif)/Úendswithr!   Zpick_channelsrv   r^   r'   r   r`   r´   rl   r  r²   r±   r%   Zadd_projZnormalize_projÚcropr@   rG  rZ  rž   Zrename_channelsZcompensation_graderY  Úsetattrr$   r7   Ú	enumerater	   r   r   r   r   r   r¯   Znaver   rB   r   r   r   r   r   r8   r9   r:   r;   )!rŸ   Zmonkeypatchrã   Z
data_namesZprojZ
long_namesr^  Zlong_data_namesZlong_proj_namesr[  rà   rw  Zgood_long_data_namesZraw_readÚraZshort_proj_namesr·   Zepochs_readÚepZcovZcov_readÚcor¸   Zevoked_readZevZsphereÚsrcZfwdZfwd_readÚfwÚinvZinv_readZivrX   )r  rµ   rƒ  ry  rY   Útest_channel_name_limito  s   	

ÿ  ÿ    ÿ


 
ÿ
   ÿ
  ÿ
þ 




ÿ

r’  Ú
fname_infor-   Úunlockedr@  c                 C   sl   | dkrt dddƒ}nt| ƒ}|jr(t‚||_t |¡}t |¡}t|tƒsPt‚t	||ƒ |j|ksht‚dS )z"Test that Info can be (un)pickled.r-   rM   rq   rG   N)
r-   r"   r	  r^   ÚpickleÚdumpsÚloadsrd   r,   rA   )r“  r”  r`   rC   Zinfo_unrX   rX   rY   Útest_pickle  s    



r˜  c               
   C   sÒ   t dddƒ} d| d< d| d< d| d	< | d
 dd… | d< d| d< tjt }}||dd�� d| d< W 5 Q R X dD ],\}}|||d�� | | | |< W 5 Q R X qptjtdd�� tddt d¡ƒ| d< W 5 Q R X dS )zTest our info sanity checkers.rL   rq   rG   r«   r  r¨   r©   g      I@Z	line_freqrv   NrK   r  )Zwhateverr  Útempzinfo\['temp'\]r‹   r  Zbad_key))rw   zinst\.resample)r[   zinst\.add_channelszbetween meg<->headZmrirf  rN   r¾   )r-   r~   r   rÜ   r�   r?   rl   rÒ   )r`   ÚcheckÚklassrà   rŒ   rX   rX   rY   Útest_info_bad  s    rœ  c                  C   sì   t dƒj} d}t t| ƒ|d f¡}t|t| |dƒƒ}| d¡ t| ¡ jƒt| ƒksZt	‚| d g|j
d< t| ¡ jƒt| ƒks„t	‚t|t| |dƒƒ}| d¡ t|j
 ¡ jƒt| ƒks¼t	‚| d g|j
d< t|j
 ¡ jƒt| ƒksèt	‚dS )z!Test ContainsMixin.get_montage().Zstandard_1020i   rL   rG   r   r  N)r   rv   rl   r  r²   r(   r-   r„   Zget_montager^   r`   )rv   rw   rC   rµ   rX   rX   rY   Útest_get_montage(  s    


r�  )Œr   r   r   r   rÕ   Úos.pathÚpathÚopr•  r~   Únumpyrl   Znumpy.testingr   r   Zscipyr   r’   Zmner	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   Zmne.channelsr   r   r   Z	mne.eventr   Zmne.datasetsr   Zmne.ior   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   Zmne.io.constantsr)   Zmne.io.writer*   r+   Zmne.io.meas_infor,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   Zmne.minimum_normr8   r9   r:   r;   Zmne.io._digitizationr<   r=   r>   Zmne.transformsr?   Z	mne.utilsr@   rA   rB   ÚjoinÚdirnameÚ__file__r�   Úbase_dirr¬   rÓ   r­   Zkit_data_dirrî   r÷   Z	data_pathZsss_pathÚprerN  rX  rl  ÚmarkZparametrizer´   rb   rj   rp   r†   r•   r¡   r½   rä   ró   rô   rú   rû   r
  r  r,  r;  rJ  rK  Zrequires_testing_datarQ  r_  rd  re  rh  rk  rm  ÚparamZ_pytest_markr’  r˜  rœ  r�  rX   rX   rX   rY   Ú<module>   s¾   D88 ÿÿö

!9H;Qû
A




þ
 