o
    
j8                     @   s   d dl Z d dlZd dlZd dlmZ d dlmZ d1ddZd2d	d
Z	dd Z
dd Zdd Zdd Zdd Zd3ddZd4ddZd4ddZd5ddZd5d d!Zd6d"d#Zd$d% Zejjd&d' Zd(d) Zd7d*d+Zd,d- Zd8d/d0ZdS )9    N)nn)
functional        {Gz?c                 C   s.   | j j}|ddkr| jj|| d S d S )NConv)	__class____name__findweightdatanormal_)mmeanstd	classname r   P/home/kuhnn/.local/lib/python3.10/site-packages/TTS/vc/modules/freevc/commons.pyinit_weights	   s   r      c                 C   s   t | | | d S )N   )int)kernel_sizedilationr   r   r   get_padding   s   r   c                 C   s    | d d d }dd |D } | S )Nr   c                 S   s   g | ]	}|D ]}|qqS r   r   ).0sublistitemr   r   r   
<listcomp>   s    z%convert_pad_shape.<locals>.<listcomp>r   )	pad_shapelr   r   r   convert_pad_shape   s   r!   c                 C   s(   |gt | d d  }| |dd d< |S )Nr   r   )len)lstr   resultr   r   r   intersperse   s   r%   c                 C   s@   || d }|dt d| | | d   t d|  7 }|S )zKL(P||Q)g      ?g       @r   g       )torchexp)m_plogs_pm_qlogs_qklr   r   r   kl_divergence   s   0r-   c                 C   s&   t | d d }t t |  S )z<Sample from the Gumbel distribution, protect from overflows.g9?gh㈵>)r&   randlog)shapeuniform_samplesr   r   r   rand_gumbel&   s   r2   c                 C   s   t |  j| j| jd}|S Ndtypedevice)r2   sizetor5   r6   )xgr   r   r   rand_gumbel_like,   s   r;      c                 C   sb   t | d d d d d |f }t| dD ]}|| }|| }| |d d ||f ||< q|S Nr   )r&   
zeros_likeranger7   )r9   ids_strsegment_sizeretiidx_stridx_endr   r   r   slice_segments1   s    rF   c           	      C   s^   |   \}}}|d u r|}|| d }t|gj| jd| jtjd}t| ||}||fS )Nr   r6   r5   r7   r&   r.   r8   r6   longrF   	r9   	x_lengthsrA   bdtids_str_maxr@   rB   r   r   r   rand_slice_segments:   s   $rQ   c           	      C   sZ   |   \}}}|d u r|}|| }t|gj| jd| jtjd}t| ||}||fS )NrG   rH   rI   rK   r   r   r   rand_spec_segmentsD   s   $rR         ?     @c           
      C   s   t j| t jd}|d }tt|t| |d  }|t t j|t jd|   }|d|d }t t |t 	|gd}	t
|	ddd|d g}	|	d|| }	|	S )NrH   r   r   r   )r&   arangefloatmathr/   r'   	unsqueezecatsincosFpadview)
lengthchannelsmin_timescalemax_timescalepositionnum_timescaleslog_timescale_incrementinv_timescalesscaled_timesignalr   r   r   get_timing_signal_1dN   s   ri   c                 C   s2   |   \}}}t||||}| |j| j| jd S r3   )r7   ri   r8   r5   r6   )r9   ra   rb   rM   r`   r_   rh   r   r   r   add_timing_signal_1d\   s   rj   c                 C   s:   |   \}}}t||||}t| |j| j| jdg|S r3   )r7   ri   r&   rY   r8   r5   r6   )r9   ra   rb   axisrM   r`   r_   rh   r   r   r   cat_timing_signal_1db   s   rl   c                 C   s"   t t | | dd}|S r=   )r&   trilonesrX   )r_   maskr   r   r   subsequent_maskh   s   rp   c                 C   s\   |d }| | }t |d d d |d d f }t |d d |d d d f }|| }|S r=   )r&   tanhsigmoid)input_ainput_b
n_channelsn_channels_intin_actt_acts_actactsr   r   r   fused_add_tanh_sigmoid_multiplym   s     r{   c                 C   s<   t | tddgddgddggd d d d d df } | S )Nr   r   r   )r\   r]   r!   )r9   r   r   r   shift_1dw   s   8r|   c                 C   s8   |d u r|   }tj|| j| jd}|d| dk S )Nr4   r   r   )maxr&   rU   r5   r6   rX   )r_   
max_lengthr9   r   r   r   sequence_mask|   s   r   c           
   	   C   s   | j }|j\}}}}t| d}||| }t|||j}	|	|||}	|	t	|	t
ddgddgddggddddf  }	|	ddd| }	|	S )z:
    duration: [b, 1, t_x]
    mask: [b, 1, t_y, t_x]
    r   r   r   Nr      )r6   r0   r&   cumsumr^   r   r8   r5   r\   r]   r!   rX   	transpose)
durationro   r6   rM   _t_yt_xcum_durationcum_duration_flatpathr   r   r   generate_path   s   6r   r   c                 C   s   t | tjr	| g} ttdd | } t|}|d urt|}d}| D ]}|jj|}||	 | 7 }|d urA|jjj
| |d q"|d|  }|S )Nc                 S   s
   | j d uS N)grad)pr   r   r   <lambda>   s   
 z"clip_grad_value_.<locals>.<lambda>r   )minr}   rS   )
isinstancer&   TensorlistfilterrV   r   r   normr   clamp_)
parameters
clip_value	norm_type
total_normr   
param_normr   r   r   clip_grad_value_   s   r   )r   r   )r   )r<   )Nr<   )rS   rT   )rS   rT   r   r   )r   )rW   numpynpr&   r   torch.nnr   r\   r   r   r!   r%   r-   r2   r;   rF   rQ   rR   ri   rj   rl   rp   jitscriptr{   r|   r   r   r   r   r   r   r   <module>   s2    



	






	
