U
    f»{jB<  ã                   @   s  d dl mZ d dlZd dlmZmZmZ d dl	Z	d dl
mZ d dlmZmZmZmZ d dlmZ d dlmZmZmZ d dlmZ ejdd	�Ze ed
dd¡ZdddgZe ed¡Ze	jde ¡ gd�dd„ ƒZ dd„ Z!dd„ Z"dd„ Z#dd„ Z$dd„ Z%ej&dd „ ƒZ'd!d"„ Z(dS )#é    N)Úassert_array_almost_equalÚassert_array_equalÚassert_equal)Útesting)Ú
read_labelÚread_forward_solutionÚpick_types_forwardÚconvert_forward_solution)ÚLabel)Úsimulate_stcÚsimulate_sparse_stcÚSourceSimulator)Úcheck_versionF)ÚdownloadÚMEGÚsamplez)sample_audvis_trunc-meg-eeg-oct-6-fwd.fifzAud-lhzAud-rhzVis-rhZsubjectsÚmodule)ÚscopeÚparamsc                  C   s:   t tƒ} t| ddd�} t| ddd�} dd„ tD ƒ}| |fS )NT)Zforce_fixedZuse_cpsF)ZmegZeegc                 S   s&   g | ]}t t td ddd| ¡ƒ‘qS )r   r   Úlabelsz%s.label)r   ÚopÚjoinÚ	data_path)Ú.0Úlabel© r   ú_/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/simulation/tests/test_source.pyÚ
<listcomp>"   s   ÿÿz#_get_fwd_labels.<locals>.<listcomp>)r   Ú	fname_fwdr	   r   Úlabel_names)Úfwdr   r   r   r   Ú_get_fwd_labels   s    ÿr!   c                 C   sZ   t ddd�}|| j }t |j| | j¡}t |j| |¡}|dkrV|t|jd ƒ7 }|S )Nr   é   ©ÚlhÚrh)ÚdictÚhemiÚnpÚintersect1dÚverticesÚsearchsortedÚlen)r   ÚstcZhemi_idx_mappingÚhemi_idxÚidxr   r   r   Ú_get_idx_label_stc'   s    
r0   c              
   C   sF  | \}}g }t |ƒD ]@\}}t|j|jd| t t|jƒ¡ |j|j	d�}| 
|¡ qd}d}d}	t t|ƒ|f¡}
t|d ||
||	ƒ}t|jdƒ |D ]>}t||ƒ}t |j| dk¡s¾t‚|j| jd	 |ks˜t‚q˜d
d„ }t|d ||
||	|ƒ}t |ƒD ]@\}}t||ƒ}d| d t t|ƒ|f¡ }t|j| |ƒ qþ|dd… }|
dd… }t|d ||||	|ƒ}t tt|d ||dd… ||	|¡ t tt|d |d tj|gd dd�||	|¡ t |d d d dk¡d d }t|g|d d d ||d	 …dd…f dd�}t|d |g|
dd	… ||	ƒ}tt|jƒd	ƒ dS )z#Test generation of source estimate.é   ©r*   ÚposÚvaluesr'   Úcommenté
   r   çü©ñÒMbP?Úsrcr   ç      ð?r"   c                 S   s   | d S ©Nr1   r   ©Úxr   r   r   ÚfunN   s    ztest_simulate_stc.<locals>.funç       @Néÿÿÿÿ)ZaxisZinuseZrrr$   )r*   r3   r'   )Ú	enumerater
   r*   r3   r(   Úonesr,   r4   r'   r5   Úappendr   r   Úsubjectr0   ÚallÚdataÚAssertionErrorÚshaper   ÚpytestÚraisesÚ
ValueErrorÚRuntimeErrorZconcatenateÚwhereÚ	lh_vertno)r!   r    r   ÚmylabelsÚir   Ú	new_labelÚn_timesÚtminÚtstepÚstc_datar-   r/   r=   ÚresZlabel_subsetZdata_subsetZlabel_single_vertr   r   r   Útest_simulate_stc4   sf    ü

 
   ÿ   ÿ""þÿrV   c                 C   sî  | \}}d}d}d}t j|t jd�| | }tjtt|d t|ƒ||ddtd�	 g }|D ]"}| 	¡ }	|	j
 d	¡ | |	¡ qXd
D ]¤}
|
dkr�dnd}t|d t|ƒ||||
td�}t|jdƒ |jjd t|ƒksÖt‚|jjd |ksêt‚t|d t|ƒ||||
td�}t|j|jƒ t|j|jƒ q€tjtt|d t|ƒ||ddtd�	 |d d d= tjtt|d t|ƒ||dtd� d|d d d< tjtt|d t|ƒ||dd� d}tjt|d��( t|d t|ƒd ||||
td� W 5 Q R X dS )ú*Test generation of sparse source estimate.r6   r   r7   ©Zdtyper8   Úcenterr   )r   ÚlocationrC   Úsubjects_dirr9   )ÚrandomrY   r\   N)r   Úrandom_staterZ   r[   r"   ZfooZsubject_his_id)r   rZ   r[   )r   rZ   zNumber of labels©Úmatch)r(   ÚarangeÚfloat64rH   rI   rJ   r   r,   r[   Úcopyr4   ÚfillrB   r   rC   rE   rG   rF   r   rM   Ú	rh_vertno)r!   r    r   rQ   rR   rS   ÚtimesrN   r   Z
this_labelrZ   r]   Ústc_1Ústc_2Zerr_strr   r   r   Útest_simulate_sparse_stcm   s†       þ ý ý   þ  þ  ÿ 
   ýrh   c              	   C   s’  | \}}|dd… }g }t |ƒD ]@\}}t|j|jd| t t|jƒ¡ |j|j	d�}| 
|¡ q d}d}	d}
t t|ƒ|f¡}t|d |||	|
ƒ}|D ]>}t||ƒ}t |j| d	k¡s¾t‚|j| jd |ks˜t‚q˜d
d„ }t|d |||	|
|ƒ}t |ƒD ]Ž\}}|jdk�rd}nd}t |j| |j¡}t |j| |¡}|dk�r^|t|jd ƒ7 }d| d t t|ƒ|f¡ }t|j| |ƒ qþdS )z0Test generation of source estimate, single hemi.r"   Nr1   r2   r6   r   r7   r8   r9   c                 S   s   | d S r:   r   r;   r   r   r   r=   Á   s    z*test_generate_stc_single_hemi.<locals>.funr$   r>   )r@   r
   r*   r3   r(   rA   r,   r4   r'   r5   rB   r   r0   rD   rE   rF   rG   r)   r+   r   )r!   r    r   Úlabels_single_hemirN   rO   r   rP   rQ   rR   rS   rT   r-   r/   r=   r.   rU   r   r   r   Útest_generate_stc_single_hemi¦   s@    ü

rj   c           
      C   sä   | \}}|dd… }d}d}d}t j|t jd�| | }t|d t|ƒ||dd�}|jjd t|ƒksjt‚|jjd |ks~t‚t|d t|ƒ||dd�}	t|j	|	j	ƒ t|j
|	j
ƒ td	d
ƒràt|d t|ƒ||t j d¡d� dS )rW   r"   Nr6   r   r7   rX   r8   )r   r]   Únumpyz1.17)r(   r`   ra   r   r,   rE   rG   rF   r   rM   rd   r   r\   Zdefault_rng)
r!   r    r   ri   rQ   rR   rS   re   rf   rg   r   r   r   Ú$test_simulate_sparse_stc_single_hemi×   s.     ÿ ÿ

þrl   c              	   C   sú   | \}}g }t |ƒD ]@\}}t|j|jd| t t|jƒ¡ |j|j	d�}| 
|¡ q| 
|¡ d}d}d}	t t|ƒ|f¡}
tjtdd�� t|d ||
||	d	d
� W 5 Q R X t|d ||
||	dd
�}t|jdƒ |jjd |ksèt‚d|jksöt‚dS )z7Test generation of source estimate, overlapping labels.r1   r2   r6   r   r7   zmust be non-overlappingr^   r8   F)Zallow_overlapTr   r"   N)r@   r
   r*   r3   r(   rA   r,   r4   r'   r5   rB   rH   rI   rK   r   r   rC   rE   rG   rF   )r!   r    r   rN   rO   r   rP   rQ   rR   rS   rT   r-   r   r   r   Ú test_simulate_stc_labels_overlapõ   s2    ü
ÿÿrm   c           %   	   C   sn  | \}}|d }dddœ}d}g g g g}t  d¡|d< t  dd¡|d< t  d¡|d	< d
d
dg}g }g }	t|ƒD ]F\}
}t|||
 d�}| |¡ |	 t  ||||
   d |j¡¡ qng g g g}t  dddg¡|d< t  dddg¡t  dddg¡g|d< t  dddgg¡|d	< g g g g}t  dddgdddgg¡|d< t  dddgdddgg¡|d< t  dddgd	ddgg¡|d	< t  tdƒ|d d ¡}t  tdƒ|d d ¡}t	t  
|	d |	d ¡ƒ}t	t  
|	d |	d ¡ƒ}t	t  |	d |	d ¡ƒ}t  t	|ƒdg¡}t  ddddddg¡}t  ||df¡|d|…dd…f< t  dd	ddddg¡}t  ||df¡|||| …dd…f< t  ddddddg¡}t  ||df¡||| d…dd…f< t  ddd	dddg¡}t  |t	|	d	 ƒdf¡}t  ||g¡}t||ƒ}tdƒD ] }
| ||
 ||
 ||
 ¡ �qô| ¡ }| ¡ }|jdk�s6t‚|jdk�sFt‚|jdk�sVt‚t	|ƒ|jjd k�spt‚t  |jd |k¡�sŠt‚t  |jd |k¡�s¤t‚t|j|ƒ t|j|ƒ t|j|ƒ d}|D ](\}}|jjd dk�sît‚|d7 }�qÐ|dk�st‚t||dd�}tdƒD ] }
| ||
 ||
 ||
 ¡ �qtjtdd��& | |d |d |d  t ¡¡ W 5 Q R X | ¡ }t|jdd…dd…f |jƒ |jddd�} | jdk�s¾t‚| j!d |k�sÒt‚tjt"dd�� | d	d¡ W 5 Q R X t|ƒ}tjt"dd�� | ¡  W 5 Q R X tjt"dd�� | d||¡ W 5 Q R X tjt"dd��  | |d |dd	… |¡ W 5 Q R X tjt"d d�� t|||d	 ƒ}W 5 Q R X t||ƒ}d!}!tdƒD ]<}
||
 dd…df  |!7  < | ||
 ||
 ||
 ¡ �q¾| ¡ }"|jd"k�st‚|j#dk�s$t‚|"jj|jjd |jjd |! fk�sNt‚t|||!d#�}tdƒD ] }
| ||
 ||
 ||
 ¡ �qd| ¡ }"|jdk�sžt‚|j#|!k�s®t‚|j|!d k�sÂt‚|"jj|jjk�sØt‚t||d$| d%�}#|# |d t  dddg¡dddgg¡ d|#_$d&d'„ |#D ƒ}$t	|$ƒd	k�s6t‚|$d jjd dk�sPt‚|$d jjd dk�sjt‚dS )(zTest Source Simulator.r8   r   r"   r#   gUUUUUUÅ?iè  iô  iÜ  r1   r$   r%   )r*   r'   Zvertnor9   g      ø?é   é   Ng      @é   g      à?)Údurationzarray of integersr^   é   )Zstart_sampleZstop_sample)é   rr   zstart_sample must bezNo simulation parameterszlabel must be a Labelz+Number of waveforms and events should matchzduration must be None oré2   é8   )Ú
first_sampr6   )rS   rq   c                 S   s   g | ]\}}|‘qS r   r   )r   r-   Ú_r   r   r   r   ›  s     z)test_source_simulator.<locals>.<listcomp>)%r(   r`   r@   r
   rB   r)   r*   ÚarrayÚranger,   Z	setdiff1dZzerosZtileZvstackr   Zadd_dataZget_stcZget_stim_channelrq   rF   rQ   Z	last_samprE   rG   rD   r   Zlh_dataZrh_datarH   rI   Ú	TypeErrorZastypeÚfloatre   rJ   rv   Z_chk_duration)%r!   r    rw   r8   Zhemi_to_indrS   Zlabel_verticesZhemisrN   Zsrc_verticesrO   ZvertrP   ZwfsÚeventsZverts_lhZverts_rhZdiff_01Zdiff_10Zinter_10Zoutput_data_lhÚtmpZ
data_rh_wfZoutput_data_rhZoutput_dataÚssr-   Zstim_channelÚcounterZstimZhalf_ssZhalf_stcZpart_stcÚoffsetZ
offset_stcZsource_simulatorZstcsr   r   r   Útest_source_simulator  sÚ    



þ
ÿ
 $$
*$
ÿ&r�   ))Úos.pathÚpathr   rk   r(   Znumpy.testingr   r   r   rH   Zmne.datasetsr   Zmner   r   r   r	   Z	mne.labelr
   Zmne.simulationr   r   r   Z	mne.utilsr   r   r   r   r   r[   ZfixtureZ_pytest_paramr!   r0   rV   rh   rj   rl   Zrequires_testing_datarm   r�   r   r   r   r   Ú<module>   s0   
ÿ

	991
!