o
    i	                     @   sR   d Z ddlZddlmZ dZdefdejdedefd	d
ZG dd dej	j
ZdS )zTime warp module.    N)pad_listbicubicP   xwindowmodec           	      C   s@  |   }|  dkr| dddf } | jd }|| |kr"| j| S t||| dd }t|| || dd d }tjjj| ddddd|f || jd f|dd}tjjj| dddd|df || | jd f|dd}| j	rtj
||gd	d
} n|| ddddd|f< || dddd|df< | j| S )zTime warping using torch.interpolate.

    Args:
        x: (Batch, Time, Freq)
        window: time warp parameter
        mode: Interpolate mode
       N   )   r   r
   F)r   align_corners)dim)sizer   shapeviewtorchrandintnn
functionalinterpolaterequires_gradcat)	r   r   r   org_sizetcenterwarpedleftright r   L/home/ubuntu/.local/lib/python3.10/site-packages/espnet2/layers/time_warp.py	time_warp	   s&   


(,
r    c                       sP   e Zd ZdZdefdedef fddZdd Zdd
e	j
de	j
fddZ  ZS )TimeWarpzxTime warping using torch.interpolate.

    Args:
        window: time warp parameter
        mode: Interpolate mode
    r   r   r   c                    s   t    || _|| _d S N)super__init__r   r   )selfr   r   	__class__r   r   r$   9   s   

zTimeWarp.__init__c                 C   s   d| j  d| j S )Nzwindow=z, mode=r   r   )r%   r   r   r   
extra_repr>   s   zTimeWarp.extra_reprNr   	x_lengthsc                    s    du st  fdd D rt|| j| jd}| fS g }t|dD ]}t|| dd | f | j| jdd }|| q%t|d}| fS )zlForward function.

        Args:
            x: (Batch, Time, Freq)
            x_lengths: (Batch,)
        Nc                 3   s    | ]	}| d  kV  qdS )r   Nr   ).0ler*   r   r   	<genexpr>I   s    z#TimeWarp.forward.<locals>.<genexpr>r(   r   g        )allr    r   r   ranger   appendr   )r%   r   r*   yysi_yr   r-   r   forwardA   s   
zTimeWarp.forwardr"   )__name__
__module____qualname____doc__DEFAULT_TIME_WARP_MODEintstrr$   r)   r   Tensorr6   __classcell__r   r   r&   r   r!   1   s
     r!   )r:   r   &espnet.nets.pytorch_backend.nets_utilsr   r;   r>   r<   r=   r    r   Moduler!   r   r   r   r   <module>   s    (