o
    Si/                     @   s~  d dl Z d dlmZ d dlmZ d dlmZmZ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mZ d dlmZmZmZ d dlmZ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%m&Z&m'Z' e j(dQddZ)ddde	de*de*de+def
ddZ,				dRde*de-de*de+de.defd d!Z/					dSd"e*de*d#eee*  de+d$e.defd%d&Z0					dTde*de-de*d'eee*  d(e+de+defd)d*Z1	dUd-e.d.e-de-dee.ee! f fd/d0Z2d,dd d+e2 fde*d.e-de-d1e
e*ee* f d-e.d2eee.ee! f  de"fd3d4Z3	dVde*d.e-de-de+def
d5d6Z4	,			7dWde*d.e-de-de*d8e-defd9d:Z5	,		dXde*d.e-de-d#eee*  def
d;d<Z6	,	=	>	7dYd.e-d?e*d@e*d8e-def
dAdBZ7defdCdDZ8	7dZd.e-d?e*d8e-defdEdFZ9	,						d[de*d.e-de-dGe-dHedIede+fdJdKZ:	,								d\de*d.e-de-dGe-dHedIedLe#d1eee*  d(e+de+fdMdNZ;dOdP Z<dS )]    N)BytesIO)NamedTemporaryFile)DictListOptionalTypeUnion)ArrayTemporalArray)AudioSource	RecordingRecordingSet)CutSetMonoCutMultiCut)Features
FeatureSet)MemoryRawWriter)Manifest)AlignmentItemSupervisionSegmentSupervisionSet)compute_num_framescompute_num_samplesfastcopy	.jsonl.gzc                 c   sX    t |d}| |j |  t| |jV  W d   dS 1 s%w   Y  dS )ze
    Context manager for converting eager manifests to lazy manifests.
    Intended for testing.
    )suffixN)r   to_filenameflushtypefrom_jsonl_lazy)manifestr   f r$   J/home/ubuntu/.local/lib/python3.10/site-packages/lhotse/testing/dummies.pyas_lazy   s   "r&   F	with_datatype_begin_idend_idr(   returnc                   s   | t krt  fddt||D S | tkr$tdd t||D S | tkr7t fddt||D S | tkrJt fddt||D S d S )Nc                 3       | ]	}t | d V  qdS r'   N)dummy_recording.0idxr'   r$   r%   	<genexpr>$       
z DummyManifest.<locals>.<genexpr>c                 s   s    | ]}t |V  qd S )N)dummy_supervisionr0   r$   r$   r%   r3   (   s    
c                 3   r-   r.   )dummy_featuresr0   r'   r$   r%   r3   -   r4   c                 3   s$    | ]}t |t|g d V  qdS ))supervisionsr(   N)	dummy_cutr5   r0   r'   r$   r%   r3   2   s
    
)	r   from_recordingsranger   from_segmentsr   from_featuresr   	from_cuts)r)   r*   r+   r(   r$   r'   r%   DummyManifest    s"   
r>         ?>  wav	unique_iddurationsampling_ratesource_formatc                 C   s2   t ||}td| dt||||dg|||dS )Ndummy-recording-04d)rD   num_samplesr(   formatidsourcesrD   rH   rC   )r   r   dummy_audio_source)rB   rC   rD   r(   rE   rH   r$   r$   r%   r/   8   s   

r/   rH   channelsrI   c           
      C   s2  |d u rdg}|st d|ddS dd l}d}||d k s+J d| d|d  d	| tdtj | | t|  }t|d
krf|d	t|d
dd
}tdd td
t|d
 D }|| }t }	|dkr}|j|	|  |dddd n|j|	|  ||dd |	d t d||	 dS )Nr   commandzecho "dummy waveform")r    rN   sourcei     zSine wave frequency z exceeds Nyquist frequency z for sampling rate    c                 S   s   g | ]}d | qS )rR   r$   r0   r$   r$   r%   
<listcomp>k   s    z&dummy_audio_source.<locals>.<listcomp>opusOGGOPUSF)rI   subtypeclosefd)rI   rY   memory)r   	soundfiletorchsinnppiarangelen	unsqueezeexpand	transposetensorr:   r   writecpunumpyseekgetvalue)
rH   rD   rN   r(   rI   r[   f_sinedatamultsbinary_datar$   r$   r%   rM   P   sJ   ""
	


rM   channel_idssource_per_channelc                    sb   t | |d u rddg}|rt |dg}n fdd|D }td| d| |dS )	Nr   rR   rH   rD   rN   r(   c                    s   g | ]}t  |gd qS )rq   )rM   r1   irH   rD   r(   r$   r%   rT      s    z1dummy_multi_channel_recording.<locals>.<listcomp>dummy-multi-channel-recording-rG   rJ   )r   rM   r   )rB   rC   rD   ro   rp   r(   rL   r$   rt   r%   dummy_multi_channel_recording   s*   
		
rv   
irrelevant        textstartc                    sJ   fddt dtdD }|t|   fddt|D }d|iS )Nc                    s   g | ]
} ||d   qS )   r$   rr   ry   r$   r%   rT      s    z#dummy_alignment.<locals>.<listcomp>r   r{   c                    s&   g | ]\}}t ||    d qS ))symbolrz   rC   )r   )r1   rs   sub)durrz   r$   r%   rT      s    subword)r:   ra   	enumerate)ry   rz   rC   subwords	alignmentr$   )r   rz   ry   r%   dummy_alignment   s   
r   channelr   c                 C   s2   t d| dd| d||||dddddi|dS )Nzdummy-segment-rG   rF   rw   custom_field)rK   recording_idrz   rC   r   ry   speakerlanguagegendercustomr   )r   )rB   rz   rC   r   ry   r   r$   r$   r%   r5      s   

r5   c                 C   s(   t d| dd||dddddd	d
ddS )NrF   rG   r   fbankd      {Gz?r@   lilcom_files!test/fixtures/dummy_feats/storage(dbf9a0ec-f79d-4eb8-ae83-143a6d5de64d.llcr   rN   rz   rC   r    
num_framesnum_featuresframe_shiftrD   storage_typestorage_pathstorage_keyr   )rB   rz   rC   r(   r$   r$   r%   r6      s   
r6   r   r   c           	      C   s^   t |||}d}tj||tj}t d|}td| dd||d||||tj	d|dS )	Nr   zdummy-featuresrF   rG   r   r    r   )
r   r^   randomrandastypefloat32r   rf   r   r   )	rB   rz   rC   rD   r   r   r   rl   bindatar$   r$   r%   dummy_in_memory_features   s$   
r   c                 C   s8   |d u rddg}t d| d|||ddddd	d
dddS )Nr   rR   ru   rG   r   r   r   r   r@   r   r   r   r   r   )rB   rz   rC   rN   r$   r$   r%   dummy_multi_channel_features  s    
r   r   r   r   r   c                 C   s,   t j||t j}t jd||d| dS )Nztemporal-array-float32r   )keyvaluer   temporal_dimrz   r^   r   r   r   r   r   store_array)rz   r   r   r   rl   r$   r$   r%   dummy_temporal_array  s   r   c                  C   s"   t jdt j} t d| S )N   zvector-float32r   )rl   r$   r$   r%   dummy_array+  s   r   c                 C   s,   t jjdd|t jd}t jd||d| dS )Nr      )dtypeztemporal-array-int8)r   r   rz   )r^   r   randintuint8r   r   )rz   r   r   rl   r$   r$   r%   dummy_temporal_array_uint80  s   r   recording_duration	recordingfeaturesc           	   
   C   s   ddd}|r| t t|t| |ddt|dd td| d	||d
|r)|n	t| t|||d|r6|nt| |d|d urD||dS g |dS )Nzdummy-valuezdummy-value-other)custom_attributecustom_attribute_otherT)rC   r(   )rz   )custom_embeddingcustom_featurescustom_recordingcustom_indexeszdummy-mono-cut-rG   r   r'   )rK   rz   rC   r   r   r   r7   r   )updater   r   r/   r   r   maxr6   )	rB   rz   rC   r   r   r   r7   r(   r   r$   r$   r%   r8   =  s@   



r8   r7   c
           
      C   sp   |d u rddg}||k r|}t d| d||||r|nt| |||	|d|r'|nt| |d|d ur4|dS g dS )Nr   rR   zdummy-multi-cut-rG   )rC   ro   r(   rp   )rN   )rK   rz   rC   r   r   r   r7   )r   rv   r   )
rB   rz   rC   r   r   r   r7   r   rp   r(   r$   r$   r%   dummy_multi_cuth  s2   


r   c                 C   s$   | j d u r| S t| | j dddS )N r   r|   )ry   r   replace)segmentr$   r$   r%   remove_spaces_from_segment_text  s   
r   )r   )r?   r@   FrA   )r@   r@   NFrA   )r?   r@   NFF)rw   rx   r?   )rx   r?   F)rx   r?   r@   r   )rx   r?   N)rx   r   r   r   )rx   r   r   )rx   r?   r?   NNNF)	rx   r?   r?   NNNNFF)=
contextlibior   tempfiler   typingr   r   r   r   r   rh   r^   r\   lhotse.arrayr	   r
   lhotse.audior   r   r   
lhotse.cutr   r   r   lhotse.featuresr   r   lhotse.features.ior   lhotse.manipulationr   lhotse.supervisionr   r   r   lhotse.utilsr   r   r   contextmanagerr&   intboolr>   floatstrr/   rM   rv   r   r5   r6   r   r   r   r   r   r8   r   r   r$   r$   r$   r%   <module>   s   



:

(








-
	

%