o
    i                  
   @   sf   d Z ddlmZ ddlZdejdejdedeejejf fdd	Zdejd
ejdedejfddZdS )z Function to get random segments.    )TupleNx	x_lengthssegment_sizereturnc           	      C   sL   |   \}}}|| }t|g| j| jtjd}t| ||}||fS )a  Get random segments.

    Args:
        x (Tensor): Input tensor (B, C, T).
        x_lengths (Tensor): Length tensor (B,).
        segment_size (int): Segment size.

    Returns:
        Tensor: Segmented tensor (B, C, segment_size).
        Tensor: Start index tensor (B,).

    )dtype)sizetorchrandtodevicelongget_segments)	r   r   r   bctmax_start_idx
start_idxssegments r   ]/home/ubuntu/.local/lib/python3.10/site-packages/espnet2/gan_tts/utils/get_random_segments.pyget_random_segments   s   r   r   c           	      C   sP   |   \}}}| |||}t|D ]\}}| |dd||| f ||< q|S )zGet segments.

    Args:
        x (Tensor): Input tensor (B, C, T).
        start_idxs (Tensor): Start index tensor (B,).
        segment_size (int): Segment size.

    Returns:
        Tensor: Segmented tensor (B, C, segment_size).

    N)r   	new_zeros	enumerate)	r   r   r   r   r   r   r   i	start_idxr   r   r   r   %   s
    r   )__doc__typingr   r	   Tensorintr   r   r   r   r   r   <module>   s*   
