
    _i                     `    S SK r S SKrS SKr " S S\R                  R
                  5      rS rg)    Nc                      ^  \ rS rSr S	S\R
                  S\R
                  S\4U 4S jjjrS\R
                  4S jrSr	U =r
$ )

GlobalCMVN   meanistdnorm_varc                    > [         TU ]  5         UR                  UR                  :X  d   eX0l        U R	                  SU5        U R	                  SU5        g)zh
Args:
    mean (torch.Tensor): mean stats
    istd (torch.Tensor): inverse std, std which is 1.0 / std
r   r   N)super__init__shaper   register_buffer)selfr   r   r   	__class__s       f/var/www/html/land-ocr/venv/lib/python3.13/site-packages/modelscope/models/audio/kws/nearfield/cmvn.pyr   GlobalCMVN.__init__   sK     	zzTZZ''' VT*VT*    xc                 `    XR                   -
  nU R                  (       a  XR                  -  nU$ )zi
Args:
    x (torch.Tensor): (batch, max_len, feat_dim)

Returns:
    (torch.Tensor): normalized feature
)r   r   r   )r   r   s     r   forwardGlobalCMVN.forward(   s&     		M==IIAr   )r   )T)__name__
__module____qualname____firstlineno__torchTensorboolr   r   __static_attributes____classcell__)r   s   @r   r   r      sI    
 #'+||+||+  + +   r   r   c           	         SnSn[        U 5       nUR                  5       n[        U5       GHG  u  pVUR                  S5      S:w  a  UR	                  5       R                  S5      n[        U5      S:X  d   eXES-      n[        R                  " SU5      S   n	U	R	                  5       R                  S5      n
U
 Vs/ s H  nS[        U5      -
  PM     nn[        U5      [        US   5      :X  d   eM  UR                  S	5      S:w  a  UR	                  5       R                  S5      n[        U5      S:X  d   eXES-      n[        R                  " SU5      S   nUR	                  5       R                  S5      nU Vs/ s H  n[        U5      PM     nn[        U5      [        US   5      :X  d   eGM  UR                  S
5      S:w  a  UR	                  5       R                  S5      n[        U5      S:X  d   eXES-      n[        R                  " SU5      S   nUR	                  5       R                  S5      n[        U5      [        US   5      -  [        US   5      :X  d   e[        U5      nGMG  GMJ     SSS5        [        R                  " X/5      n[        R                  " USW45      nU$ s  snf s  snf ! , (       d  f       NJ= f)zLoad the kaldi format cmvn stats file and no need to calculate

Args:
    cmvn_file: cmvn stats file in kaldi format

Returns:
    a numpy array of [means, vars]
NAddShift       z[\[](.*?)[\]]r   RescaleSplice   )open	readlines	enumeratefindstripsplitlenrefindallfloatintnparraytile)	cmvn_filemeansvariancef	all_linesidxlinesegs	next_line	means_str
means_listsvars_str	vars_list
splice_strsplice_list
copy_timescmvns                     r   load_kaldi_cmvnrI   6   se    EH	iAKKM	"9-ICyy$*zz|))#.4yA~%~%Ag.	JJ'7CAF	&__.44S9
/9:z!U1Xz:5zSa\1119%+zz|))#.4yA~%~%Ag.	::&6	B1E$NN,2237	.78iE!Hi88}DG4448$*zz|))#.4yA~%~%Ag.	ZZ(8)DQG
(..066s;;'#d1g,6#d1g,FFF -
5 . 
< 88U%&D774!Z)DK1 ; 9# 
s,   B+J<;J2B*J<=J7C&J<2
J<<
K
)r0   numpyr4   r   nnModuler   rI    r   r   <module>rN      s*     
   @-r   