U
    f»{jÅ1  ã                
   @   s  d dl mZ d dlZd dlZd dlZd dl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mZ d dlmZmZmZmZmZmZmZmZmZ ddd	d
dgZddd	gZddgZddgZe e !eee¡ƒZ"e e !eee¡ƒZ#e#e"fD ]\Z$dD ]Z%e$ &e$ 'e%¡¡ qðe(e$ƒD ]4\Z)Z%e%d dk�rej*e$e) dej+j,iŽe$e)< �qqèe-edœZ.e /d¡Z0e	j1jj2dd�Z3ej+j,ej4ej+ 5d¡ej+ 5d¡ej+ 6de#¡dd„ ƒƒƒƒƒZ7ej4ej+ 5d¡ej+ 5d¡ej+ 6de#¡ej+j8e 9dd¡ :¡ dkdd�d d!„ ƒƒƒƒƒZ;ej4ej+ 5d¡ej+ 5d¡ej+ 6de"¡d"d#„ ƒƒƒƒZ<ej4d$d%„ ƒZ=ej4d&d'„ ƒZ>ej4d(d)„ ƒZ?ej4ej+ 6d*e¡d+d,„ ƒƒZ@ej4ej+ 5d¡ej+ 5d¡ej+ 6d*e¡ej+ 6d-d.d/d0g¡d1d2„ ƒƒƒƒƒZAej4d3d4„ ƒZBej4ej+ 5d5¡ej+ 5d6¡d7d8„ ƒƒƒZCej4ej+ 5d5¡d9d:„ ƒƒZDdS );é    )ÚnullcontextN)Útesting)ÚNOINFO_WARNINGÚ_create_events)Ú_check_pandas_installedÚ_record_warnings)	Úcheck_info_fieldsÚget_data_pathsÚget_raw_dataÚ
get_epochsÚ
get_evokedÚpandas_not_found_warning_msgÚget_raw_infoÚ
check_dataÚassert_warning_in_recordÚneuromag306ÚCTFÚCNTÚBTIÚeximiaZv7Úv73TF))r   r   T)r   r   Fé   Zmarks)Zexpected_warningÚmatchÚpymatreader)Údownloadz)ignore:.*parse meas date.*:RuntimeWarningz)ignore:.*number of bytes.*:RuntimeWarningzcur_system, version, use_infoc              	   C   sž   t | ƒ}t| ƒ}|r$t| ƒ}tƒ }nd}tjf tŽ}tj 	|d|f ¡}|� t
j ||¡}W 5 Q R X |jdd…dd…f }	|j}
t|	|
| ƒ t|||ƒ dS )zBTest comparing reading an Evoked object and the FieldTrip version.Nzaveraged_%s.matéÿÿÿÿ)r	   r   r   r   ÚpytestÚwarnsÚno_info_warningÚosÚpathÚjoinÚmneÚioÚread_evoked_fieldtripÚdatar   r   )Ú
cur_systemÚversionÚuse_infoÚtest_data_folder_ftZmne_avgÚinfoÚctxÚ	cur_fnameZavg_ftÚmne_dataÚft_data© r/   úd/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/io/fieldtrip/tests/test_fieldtrip.pyÚtest_read_evoked5   s     
ÿr1   ZAZURE_CI_WINDOWSÚfalseÚtruezPandas problem on Azure CI)Úreasonc              	      sf  t dd�}|dk	}t| ƒ}t| ƒ}|r6t| ƒ}tƒ }	nd}tjf tŽ}	tj	 
|d|f ¡}
|r�|	� tj |
|¡}W 5 Q R X t|j|jƒsÚt‚nJtƒ �>}tj |
|¡}|jdks´t‚tt|ƒ |dkrÐtt|ƒ W 5 Q R X | ¡ dd…dd…dd…f }| ¡ }t||| ƒ t|||ƒ tj‰ d‡ fdd„	}| td|¡ tjtd	d
�� tj |
|¡ W 5 Q R X dS )zBTest comparing reading an Epochs object and the FieldTrip version.F)ÚstrictNzepoched_%s.matr   c                    s8   ˆ | ||ƒ}d|d kr4t  |d d d¡|d d< |S )NZfsampler%   é   )ÚnpÚrepeat)ÚfnameZvariable_namesZignore_fieldsÚout©Úread_matr/   r0   Ú
modify_matƒ   s    z$test_read_epochs.<locals>.modify_matr<   Zmultiple©r   )NN)r   r	   r   r   r   r   r   r   r   r    r!   r"   r#   Úread_epochs_fieldtripÚ
isinstanceÚmetadataZ	DataFrameÚAssertionErrorr   r   r   r   Úget_datar   r   r   r<   ÚsetattrÚRuntimeWarning)r&   r'   r(   ZmonkeypatchZpandasZ
has_pandasr)   Zmne_epochedr*   r+   r,   Z
epoched_ftZwarn_recordr-   r.   r=   r/   r;   r0   Útest_read_epochsT   s>    
ÿ
rF   c           	   	   C   sä   t | ƒ}t| dd�}|r@t| ƒ}| dkr8tjtdd�}qPtƒ }nd}tjf tŽ}tj	 
|d|f ¡}|� tj ||¡}W 5 Q R X | dkr¤|s¤| d	d
ddddg¡ | dkrÀ|sÀ| dddg¡ t| ¡ | ¡ | ƒ t|||ƒ dS )zATest comparing reading a raw fiff file and the FieldTrip version.T)Zdrop_extra_chs)r   r   zcannot be found inr>   Nz
raw_%s.matr   ZMzAZMxAZMyaAZMyAZMxaAZMzaAr   ZTRIG2ZTRIG1ZGATE)r	   r
   r   r   r   rE   r   r   r   r    r!   r"   r#   Úread_raw_fieldtripZdrop_channelsr   rC   r   )	r&   r'   r(   r)   Zraw_fiff_mner*   r+   r,   Zraw_fiff_ftr/   r/   r0   Útest_rawŽ   s6    	ÿ
  ÿþrH   c               	   C   sF   t dƒ} tdƒ}tj | d¡}t t¡� tj	 
||¡ W 5 Q R X dS )z<Test whether exception is thrown when loading epochs as raw.r   úepoched_v7.matN)r	   r   r   r    r!   r   ÚraisesÚRuntimeErrorr"   r#   rG   ©r)   r*   r,   r/   r/   r0   Útest_load_epoched_as_raw¹   s
    rM   c               	   C   sr   t dƒ} tdƒ}tj | d¡}t t¡� tj	j
||dd� W 5 Q R X t t¡� tj	j
||dd� W 5 Q R X dS )zDTest for exceptions when using wrong values for trialinfo parameter.r   rI   r   )Ztrialinfo_columné   N)r	   r   r   r    r!   r   rJ   Ú
ValueErrorr"   r#   r?   rL   r/   r/   r0   Útest_invalid_trialinfocolumnÄ   s    rP   c               	   C   sÚ   t dƒ} tj | d¡}t |dg¡}t |¡}t 	ddddgddddgddddgg¡|d< t
 t¡� t|d	ƒ W 5 Q R X t d¡D ]0}t||ƒ}t |d
d
…df |d k¡s„t‚q„t
 t¡� t|dƒ W 5 Q R X d
S )zTest 2dim trialinfo fields.r   rI   r%   r   r6   rN   é   Z	trialinfor   N)r	   r   r    r!   r   r<   ÚcopyÚdeepcopyr7   Úarrayr   rJ   rO   r   ZarangeÚallrB   )r)   r,   Zoriginal_dataZnew_dataZcur_colZevtsr/   r/   r0   Útest_create_eventsÒ   s    


þ

$rV   r'   c              	   C   sB   t j tdd| f ¡}tjf tŽ� tjj	|dd� W 5 Q R X dS )zBTest if loading data having only one elec in the elec field works.Ú	fieldtripz one_channel_elec_bug_data_%s.matN©r*   )
r   r    r!   Útesting_pathr   r   r   r"   r#   rG   )r'   r9   r/   r/   r0   Útest_one_channel_elec_bugé   s
    
ÿrZ   ÚtypeÚaveragedÚepochedÚrawc              	   C   s‚   t j tdƒd|| f ¡}tdƒ}tjtdd��H |dkrHt 	||¡ n,|dkr^t 
||¡ n|dkrttj ||¡ W 5 Q R X d	S )
z>Test for a meaningful exception when the data is a cell array.Z	cellarrayz	%s_%s.matr   z/Loading of data in cell arrays is not supportedr>   r\   r]   r^   N)r   r    r!   r	   r   r   rJ   rK   r"   r$   r?   r#   rG   )r'   r[   r9   r*   r/   r/   r0   Ú!test_throw_exception_on_cellarrayô   s    	
ÿr_   c               	   C   sˆ   d} t | ƒ}t| ƒ}|d dd…= | ¡  t t¡�J tj t	j
 |d¡|¡ t t	j
 |d¡|¡ t t	j
 |d¡|¡ W 5 Q R X dS )	z6Test _create_info when channels are missing from info.r   Zchsr   é   z
raw_v7.matzaveraged_v7.matrI   N)r	   r   Z_update_redundantr   r   rE   r"   r#   rG   r   r    r!   r$   r?   )r&   r)   r*   r/   r/   r0   Útest_with_missing_channels  s$     ÿ ÿ ÿra   z0ignore: Importing FieldTrip data without an infoz%ignore: Cannot guess the correct typec               	   C   s>   t j tdd¡} tjtdd�� tjj	| dd� W 5 Q R X dS )z<Test if an error is thrown when time fields are not uniform.rW   znot_uniform_time.matz>Loading data with non-uniform times per epoch is not supportedr>   NrX   ©
r   r    r!   rY   r   rJ   rK   r"   r#   r?   ©r9   r/   r/   r0   Ú*test_throw_error_on_non_uniform_time_field  s    rd   c               	   C   s>   t j tdd¡} tjtdd�� tjj	| dd� W 5 Q R X dS )zETest if an error is thrown if the data was saved with an old version.rW   zold_version.matzçThis file was created with an old version of FieldTrip. You can convert the data to the new version by loading it into FieldTrip and applying ft_selectdata with an empty cfg structure on it. Otherwise you can supply the Info field.r>   NrX   rb   rc   r/   r/   r0   Ú3test_throw_error_when_importing_old_ft_version_data*  s    	re   )EÚ
contextlibr   rR   Ú	itertoolsÚos.pathr   r   Únumpyr7   r"   Zmne.datasetsr   Zmne.io.fieldtrip.utilsr   r   Z	mne.utilsr   r   Zmne.io.fieldtrip.tests.helpersr   r	   r
   r   r   r   r   r   r   Zall_systems_rawZall_systems_epochsZall_versionsr(   ÚlistÚproductZall_test_params_rawZall_test_params_epochsÚobjÚkeyÚpopÚindexÚ	enumerateZkiÚparamÚmarkZslowtestrE   r   Zimportorskipr   ZdatasetsZ	data_pathrY   Zrequires_testing_dataÚfilterwarningsZparametrizer1   ZskipifÚgetenvÚlowerrF   rH   rM   rP   rV   rZ   r_   ra   rd   re   r/   r/   r/   r0   Ú<module>   sž   ,	

ÿþ"ÿ


ÿ

ÿÿ.

%



	




	
