U
    f»{jæD  ã                   @   sÔ  d dl m Z mZ d dlmZ d dlmZ d dlZd dlZ	d dl
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 d dlmZ d dlm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%m&Z&m'Z'm(Z( ej)dd�Z*e +e*d¡Z,e +e*dd¡Z-e +e*ddd¡Z.e +e,d¡Z/e +e,d¡Z0e +e,d¡Z1e +e,d¡Z2e +e,d¡Z3e +e,d¡Z4e +e,d¡Z5e +e,d ¡Z6e +e,d!¡Z7ej8d"d#�d$d%„ ƒZ9ej:ej; <d&ej=e1d'd(d)�ej=e3d'd*d)�ej=e2d+d,d)�ej=e4d+d-d)�g¡ej; <d.d/dg¡d0d1„ ƒƒƒZ>d2Z?d3Z@e	 Ad4d5d6d7gd8d9d:d;gd<d=d>d?gd@d@d@dAgg¡ZBej:ej; <d&ej=e/dBd(d)�ej=e0dCd*d)�g¡ej; <dDd/dg¡dEdF„ ƒƒƒZCej:ej; <dGej=e1d(d)�ej=e3d*d)�g¡dHdI„ ƒƒZDej:dJdK„ ƒZEdLdM„ ZFej8ej=eGdNd dO�dPd)�ej=eGd dQdO�dRd)�ej=eGdNdQdO�dSd)�ej=eGd d dO�dTej;jHeIdU�dV�ej=eGdNdWdO�dXej;jHeIdU�dV�gdY�dZd[„ ƒZJej:d\d]„ ƒZKej:ej; <dGej=e,d^ d_d)�ej=e,d` dad)�ej=e,db dcd)�ej=e,dd ded)�g¡dfdg„ ƒƒZLdhdi„ ZMej:ej; <djej=dkd_d)�ej=dldad)�ej=dmdnd)�ej=dodpd)�g¡dqdr„ ƒƒZNej:ej; <dsej=e6dtdudvdwdxdygdzd)�ej=e7dvdudtdwdxdygd{d)�g¡d|d}„ ƒƒZOej:ej; <d~ej=e6e dd€d�d‚dƒd„d…ejPd†�d‡d)�ej=e/ddˆd)�ej=e1dd‰d)�g¡dŠd‹„ ƒƒZQdS )Œé    )ÚdatetimeÚtimezoneN)Úcopyfile)Úassert_allcloseÚassert_array_equal)Úevents_from_annotations)Ú_fit_sphere)Útesting)Úfind_events)Ú_loc_to_coil_trans)ÚFIFF)Úread_raw_bdf)Úread_raw_bti)Úread_raw_curry)Úcheck_versionÚcatch_loggingÚ_record_warnings)Úread_annotations)Ú_get_curry_versionÚ_get_curry_file_structureÚ_read_events_curryÚFILE_EXTENSIONSF)ÚdownloadÚcurryZBDFztest_bdf_stim_channel.bdfZBTiZerm_HFHzc,rfDCzc,rfDC Curry 7.datzc,rfDC Curry 8.cdtz!test_bdf_stim_channel Curry 7.datz'test_bdf_stim_channel Curry 7 ASCII.datz!test_bdf_stim_channel Curry 8.cdtz'test_bdf_stim_channel Curry 8 ASCII.cdtztest_sfreq_0.datzRef_channel_omitted Curry7.datz(Ref_channel_omitted reordered Curry7.datÚsession)Úscopec                  C   s   t tdd� dg¡} | S )zBReturn a view of the reference bdf used to create the curry files.T©ÚpreloadÚStatus)r   Úbdf_fileZdrop_channels)Úraw© r!   ú\/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/io/curry/tests/test_curry.pyÚbdf_curry_ref8   s    r#   z	fname,tolgH¯¼šò×z>zcurry 7)Úidzcurry 8g-Cëâ6?zcurry 7 asciizcurry 8 asciir   Tc           	   	      s<  t ƒ �}t| |d�}W 5 Q R X tddƒsH|rH|  d¡rHt|ƒdksXt‚nt|ƒdksXt‚t|dƒ|ksjt‚|j|jkszt‚|jd |jd ks’t‚dD ]6‰ t	‡ fd	d
„|jd D ƒ‡ fdd
„|jd D ƒƒ q–t
|jdd�| ¡ |d� ddgdd  }}}t
|j|||dd�|j|||d�|d� |jd dk�s8t‚dS )úTest reading CURRY files.r   Únumpyz1.16z	ASCII.datr   Ú_dataÚsfreq©ÚkindZch_namec                    s   g | ]}|ˆ  ‘qS r!   r!   ©Ú.0Úch©Úfieldr!   r"   Ú
<listcomp>W   s     z'test_read_raw_curry.<locals>.<listcomp>Úchsc                    s   g | ]}|ˆ  ‘qS r!   r!   r+   r.   r!   r"   r0   X   s     Úerror©Úverbose©ZatolZC3ZC4éÈ   i   )ÚpicksÚstartÚstopr4   )r7   r8   r9   ©ZrtolÚ
dev_head_tN)r   r   r   ÚendswithÚlenÚAssertionErrorÚhasattrZn_timesÚinfor   r   Úget_data)	ÚfnameÚtolr   r#   Zwrnr    r7   r8   r9   r!   r.   r"   Útest_read_raw_curry?   s2    
ÿÿ ÿýrD   aE  FileVersion:	804
NumCoils:	10

0	1	-50.67	50.98	133.15	0.006406		1	46.45	51.51	143.15	0.006789		1	39.38	-26.67	155.51	0.008034		1	-36.72	-39.95	142.83	0.007700		1	1.61	16.95	172.76	0.001788		0	0.00	0.00	0.00	0.000000		0	0.00	0.00	0.00	0.000000		0	0.00	0.00	0.00	0.000000		0	0.00	0.00	0.00	0.000000		0	0.00	0.00	0.00	0.000000
aˆ  

LANDMARKS_MAG1 START
   ListDescription      = functional landmark positions
   ListUnits            = mm
   ListNrColumns        =  3
   ListNrRows           =  8
   ListNrTimepts        =  1
   ListNrBlocks         =  1
   ListBinary           =  0
   ListType             =  1
   ListTrafoType        =  1
   ListGridType         =  2
   ListFirstColumn      =  1
   ListIndexMin         = -1
   ListIndexMax         = -1
   ListIndexAbsMax      = -1
LANDMARKS_MAG1 END

LANDMARKS_MAG1 START_LIST	# Do not edit!
  75.4535	 5.32907e-15	 2.91434e-16
  1.42109e-14	-75.3212	 9.71445e-16
 -74.4568	-1.42109e-14	 2.51188e-15
 -59.7558	 35.5804	 66.822
  43.15	 43.4107	 78.0027
  38.8415	-41.1884	 81.9941
 -36.683	-59.5119	 66.4338
 -1.07259	-1.88025	 103.747
LANDMARKS_MAG1 END_LIST

LM_INDICES_MAG1 START
   ListDescription      = functional landmark PAN info
   ListUnits            =
   ListNrColumns        =  1
   ListNrRows           =  3
   ListNrTimepts        =  1
   ListNrBlocks         =  1
   ListBinary           =  0
   ListType             =  0
   ListTrafoType        =  0
   ListGridType         =  2
   ListFirstColumn      =  1
   ListIndexMin         = -1
   ListIndexMax         = -1
   ListIndexAbsMax      = -1
LM_INDICES_MAG1 END

LM_INDICES_MAG1 START_LIST	# Do not edit!
  2
  1
  3
LM_INDICES_MAG1 END_LIST

LM_REMARKS_MAG1 START
   ListDescription      = functional landmark labels
   ListUnits            =
   ListNrColumns        =  40
   ListNrRows           =  8
   ListNrTimepts        =  1
   ListNrBlocks         =  1
   ListBinary           =  0
   ListType             =  5
   ListTrafoType        =  0
   ListGridType         =  2
   ListFirstColumn      =  1
   ListIndexMin         = -1
   ListIndexMax         = -1
   ListIndexAbsMax      = -1
LM_REMARKS_MAG1 END

LM_REMARKS_MAG1 START_LIST	# Do not edit!
Left ear
Nasion
Right ear
HPI1
HPI2
HPI3
HPI4
HPI5
LM_REMARKS_MAG1 END_LIST

g¿XkjÑéï?gï(çîçÒ²¿g�Ý�f S¿gªÞ3uËÌT?gR.*5½¼²?g€Ò×µï?g7«™Î½?gÂYï`Y›?géÄq"òD}¿g‹5ž qô¼¿g›ÍüÍ8Ëï?g¾ñ?-¨?g        ç      ð?g�íµ ÷Æ°>gü©ñÒMbP?Úmock_dev_head_tc              
   C   sJ  |r®d| krdS t  | ¡d }dD ]T}|| }t  |t  |¡| ¡}t||ƒ |dkr"t|dƒ�}| t¡ W 5 Q R X q"t  |t  | ¡¡} t| d dƒ�}| t¡ W 5 Q R X t	t
dd	�}	tƒ �}
t| d
d�}W 5 Q R X |
 ¡ }
|ròd|
ksðt‚nd|
ksþt‚d|
k�st‚dd„ |jd D ƒ}t| |¡|	 |¡|d� |	jd dk	�sNt‚|�r‚|jd dk	�sht‚t|jd d tdd� n|jd dk�s–t‚d } }}tƒ }tƒ }|jd D ]Ì}|d tjk�r8|d tjk�sàt‚t|d ƒ}| |dd…df ¡ | |dd…df ¡ ttj |d ¡dƒ |d7 }nJ|d tjk�rf|d tjk�s\t‚|d7 }n|d tjk�szt‚|d7 }�q¸|dk�s”t‚|d k�s¢t‚|d!k�s°t‚t |¡}t |¡}t |d"d#�\}}d$|  k �rìd%k �sòn t‚||8 }|tjj|dd
d&� }t !t "t #||  $d¡¡¡¡}|d'k  $¡ d(k�sFt‚dS ))r%   zCurry 7Nr   )z.cdtú.cdt.dparG   Úaz.hpiÚw)Z	pdf_fnameZhead_shape_fnameTr3   zComposing devicezLeaving devicezno landmarkc                 S   s"   g | ]}|d  t jkr|d ‘qS r)   )r   ÚFIFFV_EEG_CHr+   r!   r!   r"   r0   î   s    ÿz,test_read_raw_curry_rfDC.<locals>.<listcomp>r1   r:   r;   Ztransgñhãˆµøä>r5   r*   Z	coil_typeÚlocé   é   éÿÿÿÿrE   é   é”   é   é   F)Zdispg)\�Âõ(¼?g¤p=
×£À?)ZaxisZkeepdimsé   éd   )%ÚopÚsplitextÚjoinÚbasenamer   ÚopenÚwriteÚ
LM_CONTENTÚHPI_CONTENTr   Úbti_rfDC_filer   r   Úgetvaluer>   r@   r   rA   Ú
WANT_TRANSÚlistr   ZFIFFV_MEG_CHZFIFFV_COIL_CTF_GRADr   ÚappendÚnpZlinalgZnormrJ   ZFIFFV_COIL_EEGZFIFFV_COIL_NONEÚarrayr   ÚabsZrad2degZarccosÚsum)rB   rC   rF   Útmp_pathÚbaseÚextÚsrcÚdstZfidZbti_rfDCÚlogr    Z	eeg_namesZn_megZn_eegZn_otherÚposÚnnr-   ÚtZradÚoriginZanglesr!   r!   r"   Útest_read_raw_curry_rfDCÊ   sv    

 ÿ



 rp   rB   c                 C   sZ   dd„ t dƒD ƒ}tttdd�ƒ}t| ƒ}t||d�\}}t||ƒ |jd dksVt‚dS )	z=Test events from curry annotations recovers the right events.c                 S   s   i | ]}t |ƒ|“qS r!   )Ústr)r,   Úiir!   r!   r"   Ú
<dictcomp>!  s      z:test_read_events_curry_are_same_as_bdf.<locals>.<dictcomp>é   Tr   )Zevent_idr;   N)	Úranger
   r   r   r   r   r   r@   r>   )rB   ZEVENT_IDZ
REF_EVENTSr    ÚeventsÚ_r!   r!   r"   Ú&test_read_events_curry_are_same_as_bdf  s    
rx   c               	   C   sv   d} t jtdd�� t| ƒ W 5 Q R X t jtdd�� t| ƒ W 5 Q R X t jtdd�� ttddgd� W 5 Q R X d	S )
z3Test checking for missing curry files (smoke test).z/invalid/path/name.xyzfile type .*? must end with©Úmatchzdoes not existzfiles cannot be foundr@   rv   )ÚrequiredN)ÚpytestÚraisesÚIOErrorr   ÚFileNotFoundErrorr   Úmissing_event_file)Zinvalid_fnamer!   r!   r"   Útest_check_missing_files*  s    ÿr�   c              
   C   s„   t | dƒ�p}t |dƒ�Z}|D ]N}d|kr@| | dt|ƒ¡¡ qd|kr`| | dt|ƒ¡¡ q| |¡ qW 5 Q R X W 5 Q R X d S )NÚrrI   ZSampleFreqHzÚ500ZSampleTimeUsecÚ2000)rY   rZ   Úreplacerq   )ri   rj   r(   Ú	time_stepÚin_fileÚout_fileÚliner!   r!   r"   Ú_mock_info_file:  s    rŠ   éô  )r(   r†   zcorrect sfreqéÐ  zcorrect time_stepzboth correctzboth 0)r}   )r$   Zmarksé*   Zmismatch)Úparamsc                    sŠ   |j d |j d  }}t d¡}t| d ƒ‰ ‡ fdd„dD ƒD ]}t|dƒ ¡  q>t|d	 ˆ d	 ||d
� t|d ˆ d ||d
� ˆ d S )z;Generate different sfreq, time_step scenarios to be tested.r(   r†   Údatzcurry.c                    s   g | ]}ˆ | ‘qS r!   r!   )r,   rh   ©Zout_base_namer!   r"   r0   V  s     z&sfreq_testing_data.<locals>.<listcomp>)r�   Úrs3rH   Zdap©ri   rj   r(   r†   r‘   )ÚparamÚcurry7_bdf_fileÚstriprq   rY   ÚcloserŠ   )rf   Úrequestr(   r†   Zin_base_namerB   r!   r�   r"   Úsfreq_testing_dataE  s    
 ÿ ÿr˜   c                 C   s"   t | dd�}|jd dkst‚dS )zTest sfreq and time_step.Fr   r(   r‹   N©r   r@   r>   )r˜   r    r!   r!   r"   Ú
test_sfreq`  s    rš   z"/test_bdf_stim_channel Curry 7.cefÚ7z&/test_bdf_stim_channel Curry 8.cdt.cefÚ8z(/test_bdf_stim_channel Curry 7 ASCII.cefz7 asciiz,/test_bdf_stim_channel Curry 8 ASCII.cdt.cefz8 asciic                 C   sœ   ddddddddd	d
ddddddddg}t  |¡}ddddddddddddddddddg}t| dd�}|jdkstt‚t|j|ƒ t|j|ƒ t|j|ƒ dS )ú#Test reading for Curry events file.ç`åÐ"ÛùÞ?ç´Èv¾Ÿß?ç×£p=
×ã?ç�•C‹lçã?çX9´Èvþ?çåÐ"Ûù~þ?çV-²	@çƒÀÊ¡E¶	@çË¡E¶óý@ç      @ç333333@çh‘í|?5@ç²�ï§ÆK@ççû©ñÒM@çÙÎ÷Sã¥ @çôýÔxé¦ @ç)\�Âõ(#@çD‹lçû)#@Ú4Ú50000Ú2Ú1Úauto©r(   N)	rb   Ú
zeros_liker   Ú	orig_timer>   r   ÚonsetÚdurationÚdescription)rB   ÚEXPECTED_ONSETÚEXPECTED_DURATIONÚEXPECTED_DESCRIPTIONÚannotr!   r!   r"   Útest_read_curry_annotationsg  s>            þ
         þr¿   c                 C   s    t ƒ t ƒ  }}td |  |d< |d jddd�\|d< }t|ƒ}|d t| d  |d< t|d ƒ|d< |d t| d	  |d< |d t| d  |d< ||fS )
Nz/test_bdf_stim_channel ÚeventÚ.rO   )Úmaxsplitrg   r@   r   Z
events_cef)ÚdictÚ	curry_dirÚsplitr   r   rq   )Ú	name_partZmock_dirÚoriginalÚmodifiedrh   Úversionr!   r!   r"   Ú_get_read_annotations_mock_info‚  s    
ÿrÊ   rÆ   z7.cefz	8.cdt.cefz7 ASCII.cefz	7 (ascii)z8 ASCII.cdt.cefz	8 (ascii)c           	      C   s  ddddddddd	d
ddddddddg}t  |¡}ddddddddddddddddddg}td| | ƒ\}}t|d |d d� d}tjt|d�� t|d dd� W 5 Q R X t|d |d dd d!� t|d dd�}|j	d"ksät
‚t|j|ƒ t|j|ƒ t|j|ƒ d"S )#r�   rž   rŸ   r    r¡   r¢   r£   r¤   r¥   r¦   r§   r¨   r©   rª   r«   r¬   r­   r®   r¯   r°   r±   r²   r³   zCurry rÀ   )ri   rj   zrequired files cannot be foundry   r´   rµ   r@   r   rŒ   r’   N)rb   r¶   rÊ   r   r|   r}   r   r   rŠ   r·   r>   r   r¸   r¹   rº   )	rf   rÆ   r»   r¼   r½   rÇ   rB   Z_msgr¾   r!   r!   r"   Ú-test_read_curry_annotations_using_mocked_info’  sT    	        þ
         þÿ ÿrË   zfname,expected_channel_listZFP1ZFPZZFP2ZVEOZEKGZTriggerzRef omitted, normal orderzRef omitted, reorderedc                 C   s   t | dd�}|j|kst‚dS )z4Test reading data files that has an omitted channel.Tr   N)r   Zch_namesr>   )rB   Zexpected_channel_listr    r!   r!   r"   Útest_read_files_missing_channel¶  s    rÌ   zfname,expected_meas_dateiâ  é   é   é   é5   é0   iÈ )Útzinfozvalid start datezstart date year is 0zstart date seconds invalidc                 C   s"   t | dd�}|jd |kst‚dS )z?Test reading acquisition start datetime info info['meas_date'].Fr   Z	meas_dateNr™   )rB   Zexpected_meas_dater    r!   r!   r"   Útest_meas_dateÍ  s    rÓ   )Rr   r   Úos.pathÚpathrU   Úshutilr   r|   r&   rb   Znumpy.testingr   r   Zmne.annotationsr   Zmne.bemr   Zmne.datasetsr	   Z	mne.eventr
   Zmne.ior   Zmne.io.constantsr   Z
mne.io.edfr   Z
mne.io.btir   Zmne.io.curryr   Z	mne.utilsr   r   r   r   Zmne.io.curry.curryr   r   r   r   Z	data_pathÚdata_dirrW   rÄ   r   r]   Zcurry7_rfDC_fileZcurry8_rfDC_filer”   Zcurry7_bdf_ascii_fileZcurry8_bdf_fileZcurry8_bdf_ascii_filer€   ZRef_chan_omitted_fileZRef_chan_omitted_reordered_fileZfixturer#   Zrequires_testing_dataÚmarkZparametrizer“   rD   r\   r[   rc   r_   rp   rx   r�   rŠ   rÃ   ZxfailÚ
ValueErrorr˜   rš   r¿   rÊ   rË   rÌ   ÚutcrÓ   r!   r!   r!   r"   Ú<module>   s  ÿÿ

ü!S



ýÿþJþ
ÿÿú	


ÿ
ÿûüþþü ÿýþþø