U
    f»{jµU  ã                   @   sj  d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	Z
d dlmZmZ d dl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 d d
l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'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z;m<Z< e =e >e?¡ddddd¡Z@e =e@d¡ZAe =e@d¡ZBe =e@d¡ZCdd„ ZDdd„ ZEdd„ ZFdd„ ZGdd„ ZHdd „ ZId!d"„ ZJd#d$„ ZKd%d&„ ZLe7d'd(ƒejM Nd)d*¡d+d,„ ƒƒZOd-d.„ ZPd/d0„ ZQd1d2„ ZRe/ejM Nd3d4¡ejM Nd5d6¡d7d8„ ƒƒƒZSd9d:„ ZTd;d<„ ZUd=d>„ ZVd?d@„ ZWdAdB„ ZXejM NdCdD¡ejM NdEdF¡dGdH„ ƒƒZYdIdJ„ ZZdS )Ké    )Údeepcopy)ÚStringION)ÚdatetimeÚtimezone)Úassert_array_equalÚassert_allclose)Úsparse)Úread_evokedsÚread_covÚ
pick_types)Ú_picks_by_type)Úmake_fixed_length_epochs)Úread_raw_fif)Ú
tfr_morlet)Ú_get_inst_dataÚhashfuncÚsum_squaredÚcompute_corrÚcreate_slicesÚ
_time_maskÚ
_freq_maskÚrandom_permutationÚ	_reg_pinvÚobject_sizeÚobject_hashÚobject_diffÚ_apply_scaling_covÚ_undo_scaling_covÚ_apply_scaling_arrayÚ_undo_scaling_arrayÚ_PCAÚrequires_sklearnÚ_array_equal_nanÚ_julian_to_calÚ_cal_to_julianÚ_dt_to_julianÚ_julian_to_dtÚgrand_averageÚ_ReuseCycleÚrequires_versionÚnumericsÚ_custom_lru_cache)Ú_LRU_CACHESÚ_LRU_CACHE_MAXSIZESz..ÚioZtestsÚdataztest_raw.fifztest-ave.fifztest-cov.fifc                  C   sÂ   t tƒ} | jdd� tt| ƒ| jƒ |  | jdd… ¡ t| dƒ}tt|ƒ|jƒ | 	¡ }tt|ƒ|j
ƒ |jdd� ttdƒƒ}ddg}d	}t|||d
|d�}tt|ƒ|j
ƒ t ttd¡ dS )zTest _get_inst_data.ç      ð?)ÚtmaxNé   ç      à?çš™™™™™¹?g      I@g     €K@é   F)Z
return_itcÚpicksÚfoo)r   Ú	fname_rawÚcropr   r   Ú_dataÚpick_channelsÚch_namesr   Zaverager/   ÚlistÚranger   ÚpytestÚraisesÚ	TypeError)ÚrawZepochsÚevokedr6   ZfreqsZn_cyclesZtfr© rD   ú\/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/utils/tests/test_numerics.pyÚtest_get_inst_data#   s    
rF   c           
   	   C   sÆ   t | ƒ}t |d¡}t |d¡}t|dƒ�}| d¡ W 5 Q R X t|dƒ�}| d¡ W 5 Q R X dD ]\}t||d�}t|d|d�}t||d�}t|d	|d�}	||ks¨t‚||	ks´t‚||ksdt‚qdd
S )z Test md5/sha1 hash calculations.r7   ÚbarÚwbs   abcds   efgh)Úmd5Úsha1)Ú	hash_typeé   i   N)ÚstrÚopÚjoinÚopenÚwriter   ÚAssertionError)
Ztmp_pathÚtempdirZfname1Zfname2ZfidrK   Zhash1Zhash1_Zhash2Zhash2_rD   rD   rE   Útest_hashfunc:   s    rT   c                  C   s4   t j d¡ ddd¡} t  | d ¡t| ƒks0t‚dS )zTest optimized sum of squares.r   é2   ©r5   r5   r2   N)ÚnpÚrandomÚRandomStateÚrandintÚsumr   rR   )ÚXrD   rD   rE   Útest_sum_squaredP   s    r]   c                     sò   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dddddddddd d!gd"d#d$d%d&d'd(d)d*d+d,gdddddddd-dddgd.d/d0d'd1d2d3d4d5d6d7gg¡‰tˆ ˆjƒ} t  ‡ ‡fd8d9„ttˆƒƒD ƒ¡}t| |ƒ t t	td:d;gg ¡ d<S )=zTest Anscombe's Quartett.é
   é   é   é	   é   é   é   é   é   é   é   g®Gáz @gÍÌÌÌÌÌ@gR¸…ëQ@g…ëQ¸ž!@g)\�Âõ¨ @gìQ¸…ë#@gö(\�Âõ@g
×£p=
@g®Gáz®%@gHáz®G@g¸…ëQ¸@gHáz®G"@gHáz®G @g{®Gáz!@g
×£p=Š!@g…ëQ¸…"@g333333 @g…ëQ¸…@gÍÌÌÌÌÌ@gÃõ(\�B"@g
×£p=
@gö(\�Âõ@g×£p=
×@g®Gáz@g{®Gáz)@gq=
×£p@g=
×£p=@g®Gáz®!@gR¸…ëQ@g�Âõ(\�@gÍÌÌÌÌL @g®Gáz®@gìQ¸…ë@é   gR¸…ëQ@g
×£p=
@g×£p=
×@gq=
×£ð @g)\�Âõ(@g      @g      )@g=
×£p=@g¤p=
×£@g�Âõ(\�@c                    s    g | ]}t  ˆ ˆ| ¡d  ‘qS ))r   rL   )rW   Zcorrcoef)Ú.0Úi©ÚxÚyrD   rE   Ú
<listcomp>d   s   ÿz%test_compute_corr.<locals>.<listcomp>rL   r2   N)
rW   Úarrayr   ÚTr>   Úlenr   r?   r@   Ú
ValueError)ÚrÚr2rD   rl   rE   Útest_compute_corrV   sJ         ÿ    ÿ    ÿ    ÿù

ÿ
rv   c                  C   s´  t ddƒg kst‚tt ddƒƒdks(t‚tt ddƒƒdks>t‚tt dddd�ƒdksXt‚tt dddd�ƒdksrt‚tt ddddd	�ƒd
ksŽt‚t ddƒ} | d jdksªt‚| d jdks¼t‚| d jdksÎt‚| d jdksàt‚t dddd�} | d jdk�st‚| d jdk�st‚| d jdk�s*t‚| d jdk�s>t‚t ddddd	�} t| ƒdk�s`t‚| d jdk�stt‚| d jdk�sˆt‚| d jdk�sœt‚| d jdk�s°t‚dS )z/Test checking the create of time create_slices.r   éd   rU   r2   )Úlengthr^   )Ústepéô  )rx   ry   é.   rL   éÿÿÿÿra   r5   rg   rd   N)r   rR   rr   Ústartry   Ústop)ZslicesrD   rD   rE   Útest_create_slicesj   s,    
r   c               	   C   sF  d} t  | ¡ t¡}t|d| d ƒ ¡ | ks0t‚t|d d| d dd� ¡ | ksTt‚t|d d| d dd� ¡ | ksxt‚t|d dddd� ¡ | ks˜t‚t|d t j ddd� ¡ | ks¼t‚t|d dt jdd� ¡ | ksÞt‚t  ddg¡}t|dd… ddd	d
� ¡ dk�st‚t|dd… dddd	d� ¡ dk�s:t‚t|ddd� ¡ dk�sVt‚t|ddd� ¡ dk�srt‚t|ddd� ¡ dk�sŽt‚t|ddd� ¡ dk�sªt‚t|ddd� ¡ dk�sÆt‚t|ddd� ¡ dk�sât‚t	j
tdd�� t|dd… ddd� W 5 Q R X t	j
tdd�� t|dd… ddd� W 5 Q R X dS )zTest safe time masking.r^   r   rL   ç»½×Ùß|Û=ç     @�@)ÚsfreqNre   F)Útminr‚   Úraise_errorrb   rf   )rƒ   r1   r‚   r„   )rƒ   r‚   rd   rh   çëâ6 @çäÉåÿ@r2   zNo samples remain©Úmatch)rƒ   r1   z"must be less than or equal to tmax)rW   ÚarangeÚastypeÚfloatr   r[   rR   Úinfrp   r?   r@   rs   ©ÚNrm   rD   rD   rE   Útest_time_mask�   s2    $$ $"&ÿÿ
 r�   c               	   C   s~  d} t  | ¡ t¡}t|dd| d d� ¡ | ks4t‚t|d dd| d d� ¡ | ksXt‚t|d dd| d d� ¡ | ks|t‚t|d dddd� ¡ | ksœt‚t|d dt j dd� ¡ | ksÀt‚t|d ddt jd� ¡ | ksât‚t  ddg¡}t|dd… ddd	d
� ¡ dk�st‚t|dd… dddd	d� ¡ dk�s>t‚t|ddd� ¡ dk�sZt‚t|ddd� ¡ dk�svt‚t|ddd� ¡ dk�s’t‚t|ddd� ¡ dk�s®t‚t|ddd� ¡ dk�sÊt‚t|ddd� ¡ dk�sæt‚t	j
tdd�� t|dd… dddd� W 5 Q R X t	j
tdd�� t|dd… dddd� W 5 Q R X t	j
tdd�� t|dd… ddd� W 5 Q R X dS )zTest safe frequency masking.r^   r�   r   rL   )ÚfminÚfmaxr€   Nre   F)r�   r„   rb   rf   )r�   r‘   r„   )r‚   r�   rd   rh   r…   r†   r2   zsfreq can not be Noner‡   r5   )r‚   r�   r‘   zNo frequencies remainz"must be less than or equal to fmax)rW   r‰   rŠ   r‹   r   r[   rR   rŒ   rp   r?   r@   rs   r�   rD   rD   rE   Útest_freq_mask©   s6     $$ $"&ÿÿ
""r’   c                  C   sB   d} d}t | |ƒ}t dddddddd	d
dg
¡}t||d ƒ dS )z!Test random permutation function.r^   é*   rg   rd   rh   rL   re   ra   r5   r_   r2   N)r   rW   rp   r   )Ú	n_samplesZrandom_stateZpython_randpermZmatlab_randpermrD   rD   rE   Útest_random_permutationÇ   s
    
r•   c                     s  t tdddd�‰ ttƒd } ttƒd }t| |ƒ ˆ  ‡ fdd„tˆ jddd�D ƒ¡ tˆ jƒ}t	d	d
dd�}t
|||d� t
| ||d� t| |ƒ |  ¡ dks¤t‚t|||d� t| ||d� t| |ƒ |  ¡ dk sÚt‚ˆ j ¡ }t|||d� t|||d� t|ˆ jdd� dS )zTest rescaling covs.r   )Nr   T)Ú	conditionZbaselineÚprojr/   c                    s   g | ]}ˆ j | ‘qS rD   )r<   )rj   Úk©rC   rD   rE   ro   Û   s     z$test_cov_scaling.<locals>.<listcomp>)ZmegÚeegg  4&õkCg  @åœ0¢Bg    €„.A)ÚmagZgradrš   )ÚscalingsrL   g#B’¡œÇ;©ZatolN)r	   Ú	ave_fnamer
   Ú	cov_fnamer   r;   r   Úinfor   Údictr   ÚmaxrR   r   r/   Úcopyr   r   r   )ZcovZcov2Z
picks_listrœ   r/   rD   r™   rE   Útest_cov_scalingÓ   s2    ÿ
  ÿ



r¤   Únumpyz1.17Úndim)r2   r5   c           	   	   C   s°  t  dddgdddgdddgg¡}t| d ƒD ]}|t j }q.tjtdd�� t|dd� W 5 Q R X t jj	|dd�}t|dd	�\}}}|d
ks’t
‚|dksžt
‚t||dd� t|dd	�\}}}t||dd� |dksØt
‚t|dd�\}}}|dksöt
‚|dk�st
‚t jj	||t  d¡  dd�}t||dd� t jj	|dd�}t|dd�\}}}t||dd� |dk�snt
‚tt  d¡dd�\}}}t|d
ƒ |d
k�sžt
‚|d
k�s¬t
‚dS )z7Test regularization and inversion of covariance matrix.r0   g        r2   Z	deficientr‡   )ÚregT)Z	hermitian)Úrankr   g›+¡†›„=r�   Nr5   r3   )ZrcondrL   rV   )rW   rp   r>   Znewaxisr?   ÚwarnsÚRuntimeWarningr   ZlinalgZpinvrR   r   ÚeyeZzerosr   )	r¦   ÚaÚ_Za_inv_npZ	a_inv_mneZloading_factorr¨   Zestimated_rankZa_invrD   rD   rE   Útest_reg_pinvñ   s4    "
r®   c                  C   sÎ  t t dtj¡ƒt t dtj¡ƒk s(t‚ddddddt d¡fddt d¡fdd	t d
¡fddtƒ fddtt d¡d�fddtj	d
dd�fddtj	d
dd�ffD ]<\} }}t |ƒ}| |  k rÆ|k s n td| |||f ƒ‚q tdd�}t |ƒdk søt‚t dt
¡|d< |d j}t |ƒ}||  k �r6|d k �s<n t‚|d |d< t |ƒ}||  k �rl|d k �srn t‚|d  ¡ |d< d|d j_|d jj�s t‚t |ƒ}||  k �rÄ|d k �sÊn t‚dS )zTest object size estimation.r^   )r   é<   Ú )r   é   rL   )r   r±   r0   )r   éF   r7   r   é–   rL   rz   é   r±   i�  éè  rU   )r¬   éÈ   i„  Úcsc©ÚformatÚcsrz%s < %s < %s:
%si † r¬   g)\�Âõ(ð?ÚbFN)r   rW   ÚonesZfloat32Zfloat64rR   Zint32r¡   r   r«   r‹   ÚnbytesÚviewÚflagsZ	writeable)ÚlowerÚupperÚobjÚsizerm   ÚnbÚszrD   rD   rE   Útest_object_size#  sB    ÿ
öÿ

""rÆ   c                  C   sˆ   t  dt jdg¡} t  dt jdg¡}t  t jddg¡}t| |ƒdksHt‚t| |ƒdksZt‚tt jt jƒdkspt‚tt jdƒdks„t‚dS )z!Test object diff can handle NaNs.rL   r   r°   g      @z value mismatch (nan, 3.5)
N)rW   rp   Únanr   rR   )Úd0Úd1Úd2rD   rD   rE   Útest_object_diff_with_nanF  s    rË   c                  C   sZ  t t dddd�ddgdt d¡dd	�} d| d< d
| d< t| ƒ}tt| |ƒƒdksTt‚tt|| ƒƒdksjt‚t| ƒt|ƒks~t‚t dt¡|d< d|d d< t| ƒt|ƒks®t‚t| ƒ}t| ƒt|ƒksÊt‚d|d d< tt| |ƒƒdksìt‚tt|| ƒƒdk�st‚t| ƒt|ƒk�st‚t| ƒ}t| ƒt|ƒk�s8t‚d|d d< tt| |ƒƒdk�s\t‚tt|| ƒƒdk�stt‚t| ƒt|ƒk�sŠt‚t| ƒ}t| ƒt|ƒk�s¨t‚|d  	d¡ tt| |ƒƒdk�sÎt‚tt|| ƒƒdk�sæt‚t| ƒt|ƒk�süt‚t| ƒ}t| ƒt|ƒk�st‚d|d< tt| |ƒƒdk�s:t‚tt|| ƒƒdk�sRt‚t| ƒt|ƒk�sht‚t| ƒ}t| ƒ}t
ƒ |d< t
ƒ |d< |d  d¡ tt| |ƒƒdk�s²t‚tt|| ƒƒdk�sÊt‚t| ƒ}d|d< tt| |ƒƒdk�sòt‚tt|| ƒƒdk�s
t‚t| ƒt|ƒk�s t‚t| ƒ}t| ƒ}dd„ | D ƒ|d< dd„ | D ƒ|d< t tt||¡ t tt|¡ tjdddd�}tjdddd�}dt||ƒk�s¦t‚tjdddd�}tt||ƒƒdk�sÎt‚d|d< dt||ƒk�sêt‚tjdddd�}dt||ƒk�st‚d}dt||ƒk�s&t‚tt d¡ƒdk�s>t‚tt d¡ƒdk�sVt‚dS )z1Test dictionary hashing and comparison functions.r4   ÚforL   )r¬   r»   Úcr»   rD   r5   N)r¬   r»   rÍ   ÚdÚes   123g       @r   r/   rÎ   g)\�Âõ(¼?r¬   r7   rÏ   r2   c                 s   s   | ]
}|V  qd S ©NrD   ©rj   rm   rD   rD   rE   Ú	<genexpr>’  s     ztest_hash.<locals>.<genexpr>c                 s   s   | ]
}|V  qd S rÐ   rD   rÑ   rD   rD   rE   rÒ   “  s     r·   r¸   rº   ztype mismatch)rL   rL   ÚelementsÚshapeT)r¡   rW   r¼   r   rr   r   rR   r   ÚintÚappendr   rQ   r?   r@   ÚRuntimeErrorr   r«   Zint64Zbool_)rÈ   rÉ   rÊ   rm   rn   rD   rD   rE   Ú	test_hashR  s†    ÿ

rØ   Ún_components)Ng§èH.ÿï?r_   ÚmleÚwhiten)TFc                 C   sb  ddl m} d\}}tj d¡ ||¡}tj|dd…dd…f dd�|dd…df< | ¡ }|| |dd�}t| |d	�}| 	|¡}	t
||ƒ | 	|¡}
t
||ƒ t|	|
ƒ |j|jks¶t‚d
D ]$}t||ƒt||ƒ }}t||ƒ qºt| tƒ�r|j|d k�s^t‚n\t| tƒ�r |j| k�s^t‚n>| dk�r@|j|d k�s^t‚n| dk�sNt‚|j|k�s^t‚dS )zTest PCA equivalence.r   )ÚPCA)rµ   r^   Nr|   )ZaxisÚfull)rÛ   Z
svd_solver)rÛ   )Zmean_Zcomponents_Zexplained_variance_Zexplained_variance_ratio_rL   rÚ   )Zsklearn.decompositionrÜ   rW   rX   rY   ZrandnZmeanr£   r    Zfit_transformr   r   Zn_components_rR   ÚgetattrÚ
isinstancer‹   rÕ   )rÙ   rÛ   rÜ   r”   Zn_dimr\   ZX_origZpca_sklZpca_mneZX_sklZX_mneÚkeyZval_sklZval_mnerD   rD   rE   Útest_pca¨  s0    *





rá   c                  C   sj   dt jdg } }t  | |¡r t‚t| |ƒs.t‚t jddg}t| |ƒrHt‚t jgd  } }t| |ƒsft‚dS )z Test comparing arrays with NaNs.rL   r   r2   N)rW   rÇ   Zarray_equalrR   r"   )r¬   r»   rD   rD   rE   Útest_array_equal_nanÉ  s    râ   c                  C   sÆ   dddg} t ddddddtjd	�t d
dddddtjd	�t ddddddtjd	�g}dddg}t||| ƒD ]Z\}}}|t|ƒks€t‚|t|ƒks�t‚|t|ƒks t‚|t|d |d |d ƒksft‚qfdS )z!Test julian calendar conversions.i³ù$ iƒ% i…Q% é‚  rd   r`   rf   r   )Útzinfoéâ  r^   r5   éÀ  rL   )rã   rd   r`   )rå   r^   r5   )ræ   rL   rL   r2   N)	r   r   ÚutcÚzipr&   rR   r#   r%   r$   )ZjdsZddsZcalsÚddÚcalZjdrD   rD   rE   Útest_julian_conversionsÔ  s    
þ
rë   c                	   C   s&   t jtdd�� tg ƒ W 5 Q R X dS )z>Test if mne.grand_average handles an empty sequence correctly.zPlease pass a list of Evokedr‡   N)r?   r@   rs   r'   rD   rD   rD   rE   Ú!test_grand_average_empty_sequenceè  s    rì   c               	   C   sH   t tdgdd�} tjtdd�� t| ƒ}W 5 Q R X t|j| d jƒ dS )zCTest if mne.grand_average handles a sequence of length 1 correctly.r   T)r–   r—   zOnly a single datasetr‡   N)r	   rž   r?   r©   rª   r'   r   r/   )ZevokedsZgaverD   rD   rE   Útest_grand_average_len_1î  s    rí   c               	      sN  d} t | ƒ‰ d ‡ fdd„tdt| ƒ ƒD ƒ¡| |  ks<t‚d ‡ fdd„tdƒD ƒ¡dks`t‚ˆ  d¡ d ‡ fd	d„td
ƒD ƒ¡dksŽt‚d ‡ fdd„tdƒD ƒ¡dks²t‚d ‡ fdd„tdƒD ƒ¡dksÖt‚ˆ  d¡ ˆ  d¡ ˆ  d¡ d ‡ fdd„tdƒD ƒ¡dk�st‚d ‡ fdd„tdƒD ƒ¡dk�s@t‚ˆ  d¡ ˆ  d¡ d ‡ fdd„tdƒD ƒ¡dk�szt‚d ‡ fdd„tdƒD ƒ¡dk�s t‚d ‡ fdd„tdƒD ƒ¡dk�sÆt‚ˆ  d¡ ˆ  d¡ tjtdd�� ˆ  d¡ W 5 Q R X d ‡ fdd„tdƒD ƒ¡dk�s$t‚d ‡ fdd„tdƒD ƒ¡dk�sJt‚dS ) zTest _ReuseCycle.Zabcder°   c                 3   s   | ]}t ˆ ƒV  qd S rÐ   ©Únext©rj   r­   ©ÚiterablerD   rE   rÒ   ý  s     z#test_reuse_cycle.<locals>.<genexpr>r2   c                 3   s   | ]}t ˆ ƒV  qd S rÐ   rî   rð   rñ   rD   rE   rÒ   ÿ  s     Úabr¬   c                 3   s   | ]}t ˆ ƒV  qd S rÐ   rî   rð   rñ   rD   rE   rÒ     s     r^   Z
acdeabcdeac                 3   s   | ]}t ˆ ƒV  qd S rÐ   rî   rð   rñ   rD   rE   rÒ     s     re   Zbcdec                 3   s   | ]}t ˆ ƒV  qd S rÐ   rî   rð   rñ   rD   rE   rÒ     s     r5   Úabcr»   rÍ   c                 3   s   | ]}t ˆ ƒV  qd S rÐ   rî   rð   rñ   rD   rE   rÒ     s     rh   c                 3   s   | ]}t ˆ ƒV  qd S rÐ   rî   rð   rñ   rD   rE   rÒ   
  s     c                 3   s   | ]}t ˆ ƒV  qd S rÐ   rî   rð   rñ   rD   rE   rÒ     s     Zacdec                 3   s   | ]}t ˆ ƒV  qd S rÐ   rî   rð   rñ   rD   rE   rÒ     s     c                 3   s   | ]}t ˆ ƒV  qd S rÐ   rî   rð   rñ   rD   rE   rÒ     s     zCould not findr‡   c                 3   s   | ]}t ˆ ƒV  qd S rÐ   rî   rð   rñ   rD   rE   rÒ     s     c                 3   s   | ]}t ˆ ƒV  qd S rÐ   rî   rð   rñ   rD   rE   rÒ     s     N)	r(   rO   r>   rr   rR   Zrestorer?   r©   rª   )ÚvalsrD   rñ   rE   Útest_reuse_cycleù  s0    0$
$$$


&&

&&&

&rö   Ún)r   rL   r^   rµ   rÎ   )g-Cëâ6?rL   g      @rµ   c                 C   s(   t  |¡| }t ||¡}t||ƒ dS )zTest Numba arange_div.N)rW   r‰   r*   Z_arange_divr   )Znumba_conditionalr÷   rÎ   ZwantÚgotrD   rD   rE   Útest_arange_div  s    rù   c               	      s<  ddg‰ t tƒ} tdƒ‡ fdd„ƒ}t tƒ| d ks8t‚ttƒd }t| dksTt‚tdƒ‡ fdd„ƒ}t tƒ| d ks|t‚ttƒd }t| dks˜t‚ˆ ddgks¨t‚|ddd	ƒd
ks¼t‚ˆ ddgksÌt‚|dddƒdksàt‚ˆ ddgksðt‚|ddd	ƒd
k�st‚ˆ ddgk�st‚|dddƒdk�s.t‚ˆ ddgk�s@t‚t t| ƒdk�sVt‚t t| ƒdk�slt‚|dt dg¡d	ƒdk�sŠt‚ˆ ddgk�sœt‚t t| ƒdk�s²t‚|dtj	ddd�ƒdk�sÐt‚ˆ ddgk�sât‚t t| ƒdk�søt‚t
jtdd�� |dtj	ddd�ƒ W 5 Q R X ˆ ddgk�s8t‚dS )z*Test our _custom_lru_cache implementation.r   r2   c                     s$   ˆ d  d7  < d  dd„ | D ƒ¡S )Nr   rL   ú, c                 s   s   | ]}|j jV  qd S rÐ   ©Ú	__class__Ú__name__©rj   ÚargrD   rD   rE   rÒ   *  s     z8test_custom_lru_cache.<locals>.my_fun.<locals>.<genexpr>©rO   ©Úargs©Zn_callsrD   rE   Úmy_fun'  s    z%test_custom_lru_cache.<locals>.my_funrL   r|   c                     s$   ˆ d  d7  < d  dd„ | D ƒ¡S )NrL   rú   c                 s   s   | ]}|j jV  qd S rÐ   rû   rþ   rD   rD   rE   rÒ   3  s     z:test_custom_lru_cache.<locals>.my_fun_2.<locals>.<genexpr>r   r  r  rD   rE   Úmy_fun_20  s    z'test_custom_lru_cache.<locals>.my_fun_2r5   zint, int, intg      @zint, int, floatzint, ndarray, intr·   r¸   zint, csc_matrixzUnsupported sparse typer‡   ZcooN)rr   r,   r+   rR   r=   r-   rW   rp   r   r«   r?   r@   r×   )Z
start_sizer  Zfun_hashr  Z
fun_2_hashrD   r  rE   Útest_custom_lru_cache"  s@    r  )[r£   r   r.   r   Úos.pathÚpathrN   r   r   r¥   rW   Znumpy.testingr   r   r?   Zscipyr   Zmner	   r
   r   Zmne.io.pickr   Z
mne.epochsr   Zmne.ior   Zmne.time_frequencyr   Z	mne.utilsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   Zmne.utils.numericsr,   r-   rO   ÚdirnameÚ__file__Úbase_dirr8   rž   rŸ   rF   rT   r]   rv   r   r�   r’   r•   r¤   ÚmarkZparametrizer®   rÆ   rË   rØ   rá   râ   rë   rì   rí   rö   rù   r  rD   rD   rD   rE   Ú<module>   s\   x
#0#V 