o
    }oiF"                     @   s   d dl Z d dlZd dlmZ d dlmZmZmZ d dlZd dl	Z	d dl
mZmZ d dlmZmZ G dd de	jjZej e dd	 ZG d
d deeZG dd deZe dd ZG dd dZdS )    N)	dataclass)AnyDictList)
DataLoaderDataset)DiarizeConfigSpkDiarizationMixinc                       s$   e Zd Z fddZdd Z  ZS )
DummyModelc                    s*   t    tjdd| _d| _d| _d S )N   r   F)super__init__torchnnLinearencoderexecution_count
flag_beginself	__class__ k/home/ubuntu/.local/lib/python3.10/site-packages/tests/collections/speaker_tasks/mixins/test_diarization.pyr      s   

zDummyModel.__init__c                 C   s   |  |}|S N)r   )r   xoutr   r   r   forward$   s   
zDummyModel.forward)__name__
__module____qualname__r   r   __classcell__r   r   r   r   r
      s    r
   c              	   C   sd   ddl }tj| dddddd}tj| ddddd	d
}|j|dd\}}|j|dd\}}||fS )z4
    Returns a list of audio files for testing.
    r   Nan4_speakeran4wav	an4_clstkfashzan251-fash-b.wavffmmzcen1-ffmm-b.wavfloat32dtype)	soundfileospathjoinread)test_data_dirsfaudio_file1audio_file2audio1_audio2r   r   r   audio_files*   s   r7   c                       sj   e Zd Zdef fddZdee dedefddZded	e	fd
dZ
defddZdefddZ  ZS )DiarizableDummydiarcfgc                    s   t  || d| _d S )NT)r   _diarize_on_beginr   )r   audior9   r   r   r   r:   <   s   
z!DiarizableDummy._diarize_on_beginr7   temp_dirc           	      C   s   t j|d}t|ddd}|D ]}|ddd}|t|d  qW d    n1 s.w   Y  ||j||j|j	d	}|S )
Nzdummy_manifest.jsonwzutf-8)encodingi  )audio_filepathdurationtext
)paths2audio_files
batch_sizer<   session_len_secnum_workers)
r,   r-   r.   openwritejsondumpsrE   rF   rG   )	r   r7   r<   r9   manifest_pathfp
audio_fileentry	ds_configr   r   r   "_diarize_input_manifest_processing@   s   z2DiarizableDummy._diarize_input_manifest_processingconfigreturnc                 C   s8   G dd dt }||d |}t||d |d dddS )Nc                   @   s2   e Zd Zdee defddZdd Zdd Zd	S )
z?DiarizableDummy._setup_diarize_dataloader.<locals>.DummyDatasetr7   rR   c                 S      || _ || _d S r   )r7   rR   )r   r7   rR   r   r   r   r   S      
zHDiarizableDummy._setup_diarize_dataloader.<locals>.DummyDataset.__init__c                 S   s$   | j | }tt|gd}|S )Nr   )r7   r   tensorfloatview)r   indexdatar   r   r   __getitem__W   s   
zKDiarizableDummy._setup_diarize_dataloader.<locals>.DummyDataset.__getitem__c                 S   
   t | jS r   )lenr7   r   r   r   r   __len__\      
zGDiarizableDummy._setup_diarize_dataloader.<locals>.DummyDataset.__len__N	r   r   r    r   strr   r   r[   r^   r   r   r   r   DummyDatasetR   s    rb   rD   rE   rG   F)datasetrE   rG   
pin_memory	drop_last)r   r   )r   rR   rb   rc   r   r   r   _setup_diarize_dataloaderQ   s   z)DiarizableDummy._setup_diarize_dataloaderbatchc                 C   s   | |}|S r   r   )r   rg   outputr   r   r   _diarize_forwardi   s   z DiarizableDummy._diarize_forwardc                 C   s   |  j d7  _ g }|D ]}|t|  qt|dr'|jdkr'd|i}|S t|dr:|jdkr:dd |D }|S t|drJ|jdkrJt|}|S |S )	Nr   output_typedictrh   dict2c                 S   s   g | ]}d |iqS )rh   r   ).0resr   r   r   
<listcomp>y   s    z>DiarizableDummy._diarize_output_processing.<locals>.<listcomp>tuple)r   appendrW   itemhasattrrj   rp   )r   outputsuniq_idsr9   resultrh   resultsr   r   r   _diarize_output_processingm   s   z*DiarizableDummy._diarize_output_processing)r   r   r    r   r:   r   ra   rQ   r   r   rf   r   ri   rx   r!   r   r   r   r   r8   ;   s    r8   c                   @   s4   e Zd Zd
dee defddZdd Zdd	 ZdS )rb   Naudio_tensorsrR   c                 C   rT   r   )ry   rR   )r   ry   rR   r   r   r   r      rU   zDummyDataset.__init__c                 C   sX   | j | }t|}tj|jd tjd}tjdgtjd}tjdtjd}||||fS )Nr   r)   r   )ry   r   rV   shapelong)r   rY   rZ   samplesseq_lentargetstargets_lenr   r   r   r[      s   

zDummyDataset.__getitem__c                 C   r\   r   )r]   ry   r   r   r   r   r^      r_   zDummyDataset.__len__r   r`   r   r   r   r   rb      s    rb   c                   C   s   t  S r   )r8   r   r   r   r   dummy_model   s   r   c                   @   s|   e Zd Zejjdd Zejjdd Zejjdd Zejjdd Z	ejjd	d
 Z
ejjdd Zejjdd ZdS )TestSpkDiarizationMixinc                 C   s&   t  }t|tr
J t|drJ d S )Ndiarize)r
   
isinstancer	   rs   )r   modelr   r   r   test_constructor_non_instance   s   z5TestSpkDiarizationMixin.test_constructor_non_instancec                 C   s   |  }|jjjd |jjjd g d}|j|dd}t|dks'J |d dks/J |d dks7J |d	 d
ks?J d S )N      ?        z1.0z2.0z3.0r   rE      r          @         @)evalr   weightrZ   fill_biasr   r]   )r   r   r;   rt   r   r   r   test_diarize   s   z$TestSpkDiarizationMixin.test_diarizec                 C   s   |  }|jjjd |jjjd g d}tdd}|j||d}g }d}|D ]}|| t	|dks9J t	||ksAJ |d7 }q*t	|dksNJ |d dksVJ |d d	ks^J |d
 dksfJ d S )Nr   r   r   r   r   override_configr   r   r   r   r   )
r   r   r   rZ   r   r   r   diarize_generatorextendr]   r   r   r;   diarize_config	generatorrt   rY   rv   r   r   r   test_diarize_generator   s"   


z.TestSpkDiarizationMixin.test_diarize_generatorc                 C   s   |  }|jjjd |jjjd g d}tdd}|j||d}g }d}	 zt|}W n	 t	y8   Y nw |
| t|dksFJ t||ksNJ |d7 }q)t|dks[J |d	 dkscJ |d d
kskJ |d dkssJ d S )Nr   r   r   r   r   r   Tr   r   r   r   r   )r   r   r   rZ   r   r   r   r   nextStopIterationr   r]   r   r   r   r   *test_diarize_generator_explicit_stop_check   s.   


zBTestSpkDiarizationMixin.test_diarize_generator_explicit_stop_checkc                 C   s,   |  }g d}|j|dd |jsJ d S )Nr   r   r   )r   r   r   )r   r   r;   r   r   r   test_diarize_check_flags   s   z0TestSpkDiarizationMixin.test_diarize_check_flagsc                 C   sl   t G dd d}| }g d}|ddd}tt |j||d}W d    d S 1 s/w   Y  d S )Nc                   @   &   e Zd ZU dZeed< dZeed< dS )zXTestSpkDiarizationMixin.test_transribe_override_config_incorrect.<locals>.OverrideConfigr   rE   rk   rj   N)r   r   r    rE   int__annotations__rj   ra   r   r   r   r   OverrideConfig      
 r   )r   r   r   r   rk   rE   rj   r   )r   r   pytestraises
ValueErrorr   )r   r   r   r;   override_cfgr5   r   r   r   (test_transribe_override_config_incorrect   s   "z@TestSpkDiarizationMixin.test_transribe_override_config_incorrectc                 C   s   t G dd dt}| }|jjjd |jjjd g d}|ddd}|j||d	}t	|t
s6J t|d
ks>J |d dksFJ |d dksNJ |d dksVJ d S )Nc                   @   r   )zVTestSpkDiarizationMixin.test_transribe_override_config_correct.<locals>.OverrideConfigrk   rj   FverboseN)r   r   r    rj   ra   r   r   boolr   r   r   r   r      r   r   r   r   r   r   listr   r   r   r   r   r   r   )r   r   r   r   r   rZ   r   r   r   r   r   r]   )r   r   r   r;   r   rt   r   r   r   &test_transribe_override_config_correct   s   z>TestSpkDiarizationMixin.test_transribe_override_config_correctN)r   r   r    r   markunitr   r   r   r   r   r   r   r   r   r   r   r      s    





r   )rJ   r,   dataclassesr   typingr   r   r   r   r   torch.utils.datar   r   -nemo.collections.asr.parts.mixins.diarizationr   r	   r   Moduler
   r   with_downloadsfixturer7   r8   rb   r   r   r   r   r   r   <module>   s"   I
