o
    i                     @   s$   d dl Zd dlZG dd deZdS )    Nc                   @   s"   e Zd ZdZdddZdd ZdS )SegmentStreamingE2EzSegmentStreamingE2E constructor.

    :param E2E e2e: E2E ASR object
    :param recog_args: arguments for "recognize" method of E2E
    Nc                 C   s   || _ || _|j| _|| _| j   d| _tt| jD ]}| j| | j j	kr,|| _ nqt
|j| _d| _d| _g | _d | _g | _g | _| jjdksPJ dd| j jvsZJ dd S )Nr      z3SegmentStreamingE2E works only with batch size <= 1bz<SegmentStreamingE2E works only with uni-directional encoders)_e2e_recog_args	char_list
_char_list_rnnlmeval_blank_idx_in_char_listrangelenblanknpprod	subsample_subsampling_factor
_activates
_blank_dur_previous_input!_previous_encoder_recurrent_state_encoder_states_ctc_posteriors	batchsizeetype)selfe2e
recog_argsrnnlmidx r!   a/home/ubuntu/.local/lib/python3.10/site-packages/espnet/nets/pytorch_backend/streaming/segment.py__init__   s0   
zSegmentStreamingE2E.__init__c              	   C   s  | j | | j|\}}| j|d|| j\}}| _| jj|	d}| j
dkrh|d | jkrhd| _
| j| jjd  }| jt| j | d dt| j d g\}}| j|d|d\}}| _d}| j
dkrG| j|	d | j| jj|	d |d | jkr|  jd7  _nd| _| j| jjkrGt| j| j | jj }|dkrGtj| jd| ddd| jd d}| jjdkrtj| jd| ddd| jd d}	| jjdkr|	d}	d}
nd}	d}
| jjdkr| jj||	| j| j | j!}nt"|j#d g}| jjj$|d||	| j| j | j!|
d	d }d| _
d| _| j| jj }| j | d | _ g | _g | _|S )
z=Call this method each time a new batch of input is available.r   r   Nr   )dimg        FT)normalize_score)%r   extendr   subsample_framesenc	unsqueezer   ctcargmaxsqueezer   r   r   r   streaming_onset_marginr   reshaper   r   r   log_softmaxr   streaming_min_blank_durstreaming_offset_margintorchcatviewsize
ctc_weightr   decrecognize_beamr	   r
   tensorshaperecognize_beam_batch)r   xhilen_ztail_lenhypseg_lenlpzr%   hlensr!   r!   r"   accept_input*   s   



z SegmentStreamingE2E.accept_input)N)__name__
__module____qualname____doc__r#   rF   r!   r!   r!   r"   r      s    
r   )numpyr   r2   objectr   r!   r!   r!   r"   <module>   s    