o
    i	                     @   s   d dl mZ d dlZd dlmZ d dlmZ d dlmZ G dd deZ						
ddej
dej
dedededeej
ej
f fddZdS )    )TupleN)check_argument_types)AbsNormalize)make_pad_maskc                	       sd   e Zd Z			ddededef fddZd	d
 Z	ddejdejde	ejejf fddZ
  ZS )UtteranceMVNTF#B;
norm_means	norm_varsepsc                    s*   t  sJ t   || _|| _|| _d S N)r   super__init__r   r	   r
   )selfr   r	   r
   	__class__ P/home/ubuntu/.local/lib/python3.10/site-packages/espnet2/layers/utterance_mvn.pyr      s
   


zUtteranceMVN.__init__c                 C   s   d| j  d| j S )Nznorm_means=z, norm_vars=)r   r	   )r   r   r   r   
extra_repr   s   zUtteranceMVN.extra_reprNxilensreturnc                 C   s   t ||| j| j| jdS )z\Forward function

        Args:
            x: (B, L, ...)
            ilens: (B,)

        )r   r	   r
   )utterance_mvnr   r	   r
   )r   r   r   r   r   r   forward   s   
zUtteranceMVN.forward)TFr   r   )__name__
__module____qualname__boolfloatr   r   torchTensorr   r   __classcell__r   r   r   r   r   
   s(    r   TFr   r   r   r   r	   r
   r   c           
      C   s<  |du r|  | dg| d}|| j| jjdgdd t|  d D R  }| jr9| 	t
|| dd} n
| t
|| dd | jddd	| }|rq| |8 } |rm| d
jddd	| }tj| |d}| | } | |fS |r| | }	|	t
||	dd |	d
jddd	| }tj| |d}| | } | |fS )zApply utterance mean and variance normalization

    Args:
        x: (B, T, D), assumed zero padded
        ilens: (B,)
        norm_means:
        norm_vars:
        eps:

    Nr      c                 S   s   g | ]}d qS )r!   r   ).0_r   r   r   
<listcomp>@   s    z!utterance_mvn.<locals>.<listcomp>g        T)dimkeepdim   )min)new_fullsizetodevicedtypeviewranger&   requires_gradmasked_fillr   masked_fill_sumpowr   clampsqrt)
r   r   r   r	   r
   ilens_meanvarstdyr   r   r   r   -   s*   4r   )NTFr   )typingr   r   	typeguardr   espnet2.layers.abs_normalizer   &espnet.nets.pytorch_backend.nets_utilsr   r   r   r   r   r   r   r   r   r   <module>   s.    %