Ë
    �\;j³1  ã                   ó  — d dl Z d dlmZmZmZ d dlZd dlZd dlmZ  G d„ d«      Z	 e	«       Z
e
j                  «       dee   dedefd	„«       Ze
j                  «       deeef   defd
„«       Ze
j                  «       dededefd„«       Ze
j                  «       dedefd„«       Ze
j                  «       dededefd„«       Ze
j                  «       	 d'dedededefd„«       Ze
j                  «       	 d'dededededef
d„«       Ze
j                  «       	 d'dededededef
d„«       Ze
j                  «       	 d(dedededefd„«       Ze
j                  «       d'dedededefd„«       Ze
j                  «       d'dedededefd„«       Ze
j                  «       	 d)dedededefd„«       Ze
j                  «       	 d'dededededef
d„«       Ze
j                  «       	 d*dedededefd„«       Ze
j                  «       d'dedededefd„«       Ze
j                  «       d'dedededefd „«       Ze
j                  «       d'dedededefd!„«       Z e
j                  «       d'dedededefd"„«       Z!	 	 d'd#eeeeef   f   d$ed%ededef
d&„Z"y)+é    N)ÚListÚTupleÚUnion)ÚTensorc                   ó    — e Zd Zd„ Zdd„Zd„ Zy)ÚWindowFunctionRegisterc                 ó   — i | _         y ©N©Ú_functions_dict)Úselfs    úgG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddle/audio/functional/window.pyÚ__init__zWindowFunctionRegister.__init__   s
   € Ø!ˆÕó    Nc                 ó   ‡ — ˆ fd„}|S )Nc                 ó>   •— | j                   }| ‰j                  |<   | S r
   )Ú__name__r   )ÚfuncÚnamer   s     €r   Úadd_subfunctionz8WindowFunctionRegister.register.<locals>.add_subfunction   s!   ø€ Ø—=‘=ˆDØ)-ˆD× Ñ  Ñ&ØˆKr   © )r   r   r   s   `  r   ÚregisterzWindowFunctionRegister.register   s   ø€ ô	ð
 Ðr   c                 ó    — | j                   |   S r
   r   )r   r   s     r   ÚgetzWindowFunctionRegister.get"   s   € Ø×#Ñ# DÑ)Ð)r   r
   )r   Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r      s   „ ò"óó*r   r   ÚxÚ	data_typeÚreturnc                 ó   — g }| D ]s  }t        j                  |«      r7t        |t        «      s'|j	                  t        j                  |g|«      «       ŒO|j	                  t        j                  ||«      «       Œu t        j                  |«      S r
   )ÚnpÚisscalarÚ
isinstanceÚstrÚappendÚpaddleÚ	to_tensorÚconcat)r   r   ÚlÚts       r   Ú_catr+   )   sj   € à
€AÛˆÜ�;‰;�qŒ>¤*¨Q´Ô"4Ø�H‰H”V×%Ñ% q c¨9Ó5Õ6à�H‰H”V×%Ñ% a¨Ó3Õ4ð	 ô
 �=‰=˜ÓÐr   c                 ó  — t        | t        «      r1t        j                  | t        j                  | dz  dz
  «      z   «      S t        j                  | t        j                  t        j                  | «      dz
  «      z   «      S )Né   é   )r#   ÚfloatÚmathÚlogÚsqrtr&   Úsquare)r   s    r   Ú_acoshr4   4   s\   € ä�!”UÔÜ�x‰x˜œDŸI™I a¨¡d¨Q¡hÓ/Ñ/Ó0Ð0Ü�:‰:�aœ&Ÿ+™+¤f§m¡m°AÓ&6¸Ñ&:Ó;Ñ;Ó<Ð<r   ÚMÚsymc                 ó   — |s| dz   dfS | dfS )z:Extend window by 1 sample if needed for DFT-even symmetry.r.   TFr   )r5   r6   s     r   Ú_extendr8   ;   s   € ñ Ø�1‰u�dˆ{Ðà�%ˆxˆr   c                 óH   — t        | «      | k7  s| dk  rt        d«      ‚| dk  S )z)Handle small or incorrect window lengths.r   z.Window length M must be a non-negative integerr.   )ÚintÚ
ValueError)r5   s    r   Ú_len_guardsr<   D   s*   € ô ˆ1ƒv�‚{�a˜!’eÜÐIÓJÐJà�‰6€Mr   ÚwÚneededc                 ó   — |r| dd S | S )z<Truncate window by 1 sample if needed for DFT-even symmetry.Néÿÿÿÿr   )r=   r>   s     r   Ú	_truncaterA   M   s   € ñ Ø��"ˆvˆàˆr   Údtypec                 ó(  — t        | «      rt        j                  | f|¬«      S t        | |«      \  } }t        j                  d| |¬«      | dz
  dz  z
  }t        j
                  dt        j                  ||z  «      d|z  z  z  «      }t        ||«      S )z†Compute a window with a generalized Gaussian shape.
    This function is consistent with scipy.signal.windows.general_gaussian().
    ©rB   r   ç      ð?ç       @g      à¿r-   )r<   r&   Úonesr8   ÚarangeÚexpÚabsrA   )r5   ÚpÚsigr6   rB   Úneeds_truncÚnr=   s           r   Ú_general_gaussianrO   V   s‚   € ô �1„~Ü�{‰{˜A˜4 uÔ-Ð-Ü˜Q “_�N€A€{ä�‰�a˜ %Ô(¨A°©G°s©?Ñ:€AÜ�
‰
�4œ&Ÿ*™* Q¨¡WÓ-°!°a±%Ñ8Ñ8Ó9€Aä�Q˜Ó$Ð$r   Úac                 óŽ  — t        | «      rt        j                  | f|¬«      S t        | |«      \  } }t        j                  t
        j                   t
        j                  | |¬«      }t        j                  | f|¬«      }t        t        |«      «      D ]#  }|||   t        j                  ||z  «      z  z  }Œ% t        ||«      S )z‡Compute a generic weighted sum of cosine terms window.
    This function is consistent with scipy.signal.windows.general_cosine().
    rD   )r<   r&   rG   r8   Úlinspacer0   ÚpiÚzerosÚrangeÚlenÚcosrA   )r5   rP   r6   rB   rM   Úfacr=   Úks           r   Ú_general_cosinerZ   g   sœ   € ô �1„~Ü�{‰{˜A˜4 uÔ-Ð-Ü˜Q “_�N€A€{Ü
�/‰/œ4Ÿ7™7˜(¤D§G¡G¨Q°eÔ
<€CÜ�‰�a�T Ô'€AÜ”3�q“6Ž]ˆØ	ˆQˆq‰T”F—J‘J˜q 3™wÓ'Ñ'Ñ'‰ð ä�Q˜Ó$Ð$r   Úalphac                 ó*   — t        | |d|z
  g||¬«      S )zvCompute a generalized Hamming window.
    This function is consistent with scipy.signal.windows.general_hamming()
    rE   rD   ©rZ   )r5   r[   r6   rB   s       r   Ú_general_hammingr^   x   s   € ô ˜1˜u c¨E¡kÐ2°C¸uÔEÐEr   c           	      óH  ‡ ‡‡— t        ‰ «      rt        j                  ‰ f|¬«      S t        ‰ |«      \  Š }d|dz  z  }t	        |«      t
        j                  z  }|dz  |dz  |dz
  dz  z   z  }	t        j                  d||¬«      Št        j                  |dz
  f|¬«      Št        j                  ‰«      }
d|
ddd…<   d|
ddd…<   ‰‰z  }t        t        ‰«      «      D ]é  }|
|   t        j                  d||   |	z  |dz  ‰dz
  dz  z   z  z
  «      z  }|d	k(  r(dt        j                  d||   ||dz   d z  z
  «      z  }n|t        ‰«      dz
  k(  r%dt        j                  d||   |d| z  z
  «      z  }nIdt        j                  d||   |d| z  z
  «      z  t        j                  d||   ||dz   d z  z
  «      z  }||z  ‰|<   Œë ˆˆ ˆfd
„} |t        j                  d	‰ |¬«      «      }|rd |‰ dz
  dz  «      z  }||z  }|j                  «       }t        ||«      S )z¹Compute a Taylor window.
    The Taylor window taper function approximates the Dolph-Chebyshev window's
    constant sidelobe level for a parameterized number of near-in sidelobes.
    rD   é
   é   r-   ç      à?r.   Nr@   r   c                 óä   •— ddt        j                  ‰j                  d«      t        j                  dt        j
                  z  ‰j                  d«      z  | ‰dz  z
  dz   z  ‰z  «      «      z  z   S )Nr.   r-   r   rF   rb   )r&   ÚmatmulÚ	unsqueezerW   r0   rS   )rN   ÚFmr5   Úmas    €€€r   ÚWz_taylor.<locals>.W«   se   ø€ Ø�1”v—}‘}Ø�L‰L˜‹OÜ�J‰J�qœ4Ÿ7™7‘{ R§\¡\°!£_Ñ4¸¸AÀ¹G¹ÀcÑ8IÑJÈQÑNÓOó
ñ 
ñ 
ð 	
r   rE   )r<   r&   rG   r8   r4   r0   rS   rH   ÚemptyÚ
empty_likerU   rV   ÚprodÚsqueezerA   )r5   ÚnbarÚsllÚnormr6   rB   rM   ÚBÚAÚs2ÚsignsÚm2ÚmiÚnumerÚdenomrh   r=   Úscalerf   rg   s   `                 @@r   Ú_taylorry   ‚   sJ  ú€ ô �1„~Ü�{‰{˜A˜4 uÔ-Ð-Ü˜Q “_�N€A€{ð 	ˆs�R‰xÑ€AÜˆq‹	”D—G‘GÑ€AØ	ˆq‰�A�q‘D˜D 3™J¨1Ñ,Ñ,Ñ	-€BÜ	�‰�q˜$ eÔ	,€Bä	�‰�t˜a‘x�k¨Ô	/€BÜ×Ñ˜bÓ!€EØ€E‰#ˆAˆ#�JØ€Eˆ!ˆ$ˆQˆ$�KØ	ˆb‰€BÜ”C˜“GŽnˆØ�b‘	œFŸK™KØ��2‘˜‘˜q !™t r¨C¡x°A¡oÑ5Ñ6Ñ6ó
ñ 
ˆð �Š7ØœŸ™ A¨¨2©°°B¸±F°H°Ñ(=Ñ$=Ó>Ñ>‰EØ”3�r“7˜Q‘;ÒØœŸ™ A¨¨2©°°C°R°Ñ(8Ñ$8Ó9Ñ9‰Eð Ü—+‘+˜a " R¡&¨2¨c¨r¨7Ñ"2Ñ2Ó3ñ4ä—+‘+˜a " R¡&¨2¨b°1©f¨h¨<Ñ"7Ñ7Ó8ñ9ð ð ˜‘ˆˆ2Šð ö"
ñ 	
Œ&�-‰-˜˜1 EÔ
*Ó+€Añ Ø‘a˜˜Q™ !™“nÑ$ˆØ	ˆU‰
ˆØ	�	‰	‹€AÜ�Q˜Ó$Ð$r   c                 ó    — t        | d||¬«      S )zªCompute a Hamming window.
    The Hamming window is a taper formed by using a raised cosine with
    non-zero endpoints, optimized to minimize the nearest side lobe.
    gHáz®Gá?rD   ©r^   ©r5   r6   rB   s      r   Ú_hammingr}   »   s   € ô ˜A˜t S°Ô6Ð6r   c                 ó    — t        | d||¬«      S )z‰Compute a Hann window.
    The Hann window is a taper formed by using a raised cosine or sine-squared
    with ends that touch zero.
    rb   rD   r{   r|   s      r   Ú_hannr   Ä   s   € ô ˜A˜s C¨uÔ5Ð5r   c           	      óà  — t        | «      rt        j                  | f|¬«      S |dk  rt        j                  | f|¬«      S |dk\  rt        | |¬«      S t	        | |«      \  } }t        j
                  d| |¬«      }t        || dz
  z  dz  «      }|d|dz    }||dz   | |z
  dz
   }|| |z
  dz
  d }	ddt        j                  t        j                  d	d|z  |z  | dz
  z  z   z  «      z   z  }
t        j                  |j                  |¬«      }ddt        j                  t        j                  d
|z  dz   d|	z  |z  | dz
  z  z   z  «      z   z  }t        j                  |
||g«      }t        ||«      S )z[Compute a Tukey window.
    The Tukey window is also known as a tapered cosine window.
    rD   r   rE   )r6   r.   rF   Nrb   r@   g       À)r<   r&   rG   r   r8   rH   r:   rW   r0   rS   Úshaper(   rA   )r5   r[   r6   rB   rM   rN   ÚwidthÚn1Ún2Ún3Úw1Úw2Úw3r=   s                 r   Ú_tukeyr‰   Í   sw  € ô �1„~Ü�{‰{˜A˜4 uÔ-Ð-à�‚zÜ�{‰{˜A˜4 uÔ-Ð-Ø	�#ŠÜ�Q˜CÔ Ð ä˜Q “_�N€A€{ä�‰�a˜ %Ô(€AÜ�˜˜Q™‘ #Ñ%Ó&€EØ	
ˆ1ˆu�q‰yÐ	€BØ	
ˆ5�1‰9�q˜5‘y 1‘}Ð	%€BØ	
ˆ1ˆu‰9�q‰=ˆ?Ð	€Bà	�”F—J‘JœtŸw™w¨"¨s°R©x¸%Ñ/?À1ÀqÁ5Ñ/IÑ*IÑJÓKÑKÑ	L€BÜ	�‰�R—X‘X UÔ	+€BØ	Ø	Ü
�*‰*”T—W‘W  u¡¨qÑ 0°3¸±8¸eÑ3CÀqÈ1ÁuÑ3MÑ MÑNÓ
Oñ	Pñ
€Bô 	�‰�r˜2˜r�lÓ#€Aä�Q˜Ó$Ð$r   Ústdc                 ó  — t        | «      rt        j                  | f|¬«      S t        | |«      \  } }t        j                  d| |¬«      | dz
  dz  z
  }d|z  |z  }t        j
                  |dz   |z  «      }t        ||«      S )ztCompute a Gaussian window.
    The Gaussian widows has a Gaussian shape defined by the standard deviation(std).
    rD   r   rE   rF   r-   )r<   r&   rG   r8   rH   rI   rA   )r5   rŠ   r6   rB   rM   rN   Úsig2r=   s           r   Ú	_gaussianr�   ï   s~   € ô �1„~Ü�{‰{˜A˜4 uÔ-Ð-Ü˜Q “_�N€A€{ä�‰�a˜ %Ô(¨A°©G°s©?Ñ:€AØˆs‰7�S‰=€DÜ�
‰
�Q˜‘T�7˜T‘>Ó"€Aä�Q˜Ó$Ð$r   c                 ó>  — |r|�t        d«      ‚t        | «      rt        j                  | f|¬«      S t	        | |«      \  } }|€| dz
  dz  }t        j
                  d| |¬«      }t        j                  t        j                  ||z
  «       |z  «      }t        ||«      S )z+Compute an exponential (or Poisson) window.z"If sym==True, center must be None.rD   r.   r-   r   )	r;   r<   r&   rG   r8   rH   rI   rJ   rA   )r5   ÚcenterÚtaur6   rB   rM   rN   r=   s           r   Ú_exponentialr‘     s•   € ñ
 ˆvÐ!ÜÐ=Ó>Ð>Ü�1„~Ü�{‰{˜A˜4 uÔ-Ð-Ü˜Q “_�N€A€{à€~Ø�a‘%˜1‘ˆä�‰�a˜ %Ô(€AÜ�
‰
”F—J‘J˜q 6™zÓ*Ð*¨SÑ0Ó1€Aä�Q˜Ó$Ð$r   c                 ór  — t        | «      rt        j                  | f|¬«      S t        | |«      \  } }t        j                  d| dz   dz  dz   |¬«      }| dz  dk(  r)d|z  dz
  | z  }t        j
                  ||ddd…   g«      }n(d|z  | dz   z  }t        j
                  ||ddd…   g«      }t        ||«      S )	zCompute a triangular window.rD   r.   r-   r   rE   Nr@   éþÿÿÿ)r<   r&   rG   r8   rH   r(   rA   )r5   r6   rB   rM   rN   r=   s         r   Ú_triangr”     s¾   € ô �1„~Ü�{‰{˜A˜4 uÔ-Ð-Ü˜Q “_�N€A€{ä�‰�a˜!˜a™% A™¨Ñ)°Ô7€AØˆ1�u�‚zØ�‰U�S‰[˜AÑˆÜ�M‰M˜1˜a¡ " ™g˜,Ó'‰à�‰E�Q˜‘WÑˆÜ�M‰M˜1˜a   B ™i˜.Ó)ˆä�Q˜Ó$Ð$r   c                 óÈ  — t        | «      rt        j                  | f|¬«      S t        | |«      \  } }t        j                  t        j
                  dd| |¬«      dd «      }d|z
  t        j                  t        j                  |z  «      z  dt        j                  z  t        j                  t        j                  |z  «      z  z   }t        d|dg|«      }t        ||«      S )z^Compute a Bohman window.
    The Bohman window is the autocorrelation of a cosine window.
    rD   r@   r.   rE   r   )r<   r&   rG   r8   rJ   rR   rW   r0   rS   Úsinr+   rA   )r5   r6   rB   rM   rX   r=   s         r   Ú_bohmanr—   '  s¼   € ô
 �1„~Ü�{‰{˜A˜4 uÔ-Ð-Ü˜Q “_�N€A€{ä
�*‰*”V—_‘_ R¨¨A°UÔ;¸A¸bÐAÓ
B€CØ	
ˆS‰”F—J‘JœtŸw™w¨™}Ó-Ñ-°´d·g±g±ÄÇ
Á
Ü�‰�#‰óAñ 1ñ 	€Aô 	ˆa��AˆY˜Ó€Aä�Q˜Ó$Ð$r   c                 ó$   — t        | g d¢||¬«      S )a  Compute a Blackman window.
    The Blackman window is a taper formed by using the first three terms of
    a summation of cosines. It was designed to have close to the minimal
    leakage possible.  It is close to optimal, only slightly worse than a
    Kaiser window.
    )gáz®GáÚ?rb   g{®Gáz´?rD   r]   r|   s      r   Ú	_blackmanr™   9  s   € ô ˜1Ò0°#¸UÔCÐCr   c                 ó  — t        | «      rt        j                  | f|¬«      S t        | |«      \  } }t        j                  t
        j                  | z  t        j                  d| |¬«      dz   z  «      }t        ||«      S )z,Compute a window with a simple cosine shape.rD   r   rb   )	r<   r&   rG   r8   r–   r0   rS   rH   rA   )r5   r6   rB   rM   r=   s        r   Ú_cosiner›   D  sg   € ô �1„~Ü�{‰{˜A˜4 uÔ-Ð-Ü˜Q “_�N€A€{Ü�
‰
”4—7‘7˜Q‘;¤&§-¡-°°1¸EÔ"BÀSÑ"HÑIÓJ€Aä�Q˜Ó$Ð$r   ÚwindowÚ
win_lengthÚfftbinsc                 ó‚  — | }d}t        | t        «      r| d   }t        | «      dkD  rN| dd }nHt        | t        «      r| dv rt	        d| z   dz   «      ‚| }n t	        dt        t        | «      «      z  «      ‚	 t        j                  d	|z   «      }|f|z   }	d|i}
 ||	d|i|
¤ŽS # t        $ r}t	        d
«      |‚d}~ww xY w)aç  Return a window of a given length and type.

    Args:
        window (Union[str, Tuple[str, float]]): The window function applied to the signal before the Fourier transform. Supported window functions: 'hamming', 'hann', 'gaussian', 'general_gaussian', 'exponential', 'triang', 'bohman', 'blackman', 'cosine', 'tukey', 'taylor'.
        win_length (int): Number of samples.
        fftbins (bool, optional): If True, create a "periodic" window. Otherwise, create a "symmetric" window, for use in filter design. Defaults to True.
        dtype (str, optional): The data type of the return window. Defaults to 'float64'.

    Returns:
        Tensor: The window represented as a tensor.

    Examples:
        .. code-block:: python

            >>> import paddle

            >>> n_fft = 512
            >>> cosine_window = paddle.audio.functional.get_window('cosine', n_fft)

            >>> std = 7
            >>> gaussian_window = paddle.audio.functional.get_window(('gaussian',std), n_fft)
    r   r   r.   N)ÚgaussianÚexponentialzThe 'z6' window needs one or more parameters -- pass a tuple.z#%s as window type is not supported.Ú_zUnknown window type.r6   rB   )	r#   ÚtuplerV   r$   r;   ÚtypeÚwindow_function_registerr   ÚKeyError)rœ   r�   rž   rB   r6   ÚargsÚwinstrÚwinfuncÚeÚparamsÚkwargss              r   Ú
get_windowr­   O  sõ   € ð8 ˆ+€Cà€DÜ�&œ%Ô Ø˜‘ˆÜˆv‹;˜Š?Ø˜!˜"�:‰DÜ	�FœCÔ	 ØÐ0Ñ0ÜØ˜&Ñ ð $3ñ 3óð ð
 ‰FäØ1´C¼¸V»Ó4EÑEó
ð 	
ð8Ü*×.Ñ.¨s°V©|Ó<ˆð ˆ]˜TÑ!€FØ�Sˆ\€FÙ�FÐ2 %Ð2¨6Ñ2Ð2øô ò 8ÜÐ/Ó0°aÐ7ûð8ús   Á8B$ Â$	B>Â-B9Â9B>)TÚfloat64)é   é   TTr®   )rb   Tr®   )NrE   Tr®   )#r0   Útypingr   r   r   Únumpyr!   r&   r   r   r¥   r   r$   r+   r/   r4   r:   Úboolr8   r<   rA   rO   rZ   r^   ry   r}   r   r‰   r�   r‘   r”   r—   r™   r›   r­   r   r   r   Ú<module>r´      s²  ðó ß %Ñ %ã ã Ý ÷*ñ *ñ  2Ó3Ð ð ×"Ñ"Ó$ðˆD�‰Lð  Sð ¨Vò ó %ðð ×"Ñ"Ó$ð=ˆe�F˜E�MÑ"ð = vò =ó %ð=ð ×"Ñ"Ó$ðˆsð ˜ð  $ò ó %ðð ×"Ñ"Ó$ð�3ð ˜4ò ó %ðð ×"Ñ"Ó$ð�ð  ð ¨&ò ó %ðð ×"Ñ"Ó$à3<ñ%Ø
ð%Øð%Ø-0ð%àò%ó %ð%ð  ×"Ñ"Ó$à5>ñ%Ø
ð%Øð%Øð%Ø/2ð%àò%ó %ð%ð  ×"Ñ"Ó$à9BñFØ
ðFØðFØ#ðFØ36ðFàòFó %ðFð ×"Ñ"Ó$àFOñ5%Ø
ð5%Ø,0ð5%Ø@Cð5%àò5%ó %ð5%ðp ×"Ñ"Ó$ñ7�ð 7˜$ð 7¨cð 7À&ò 7ó %ð7ð ×"Ñ"Ó$ñ6ˆSð 6�tð 6¨3ð 6¸vò 6ó %ð6ð ×"Ñ"Ó$à6?ñ%Ø
ð%Ø ð%Ø03ð%àò%ó %ð%ðB ×"Ñ"Ó$à7@ñ%Ø
ð%Øð%Ø!ð%Ø14ð%àò%ó %ð%ð" ×"Ñ"Ó$àAJñ%Ø
ð%Ø'+ð%Ø;>ð%àò%ó %ð%ð& ×"Ñ"Ó$ñ%ˆsð %˜ð %¨Sð %Àò %ó %ð%ð" ×"Ñ"Ó$ñ%ˆsð %˜ð %¨Sð %Àò %ó %ð%ð" ×"Ñ"Ó$ñD�ð D˜4ð D¨sð DÀ6ò Dó %ðDð ×"Ñ"Ó$ñ%ˆsð %˜ð %¨Sð %Àò %ó %ð%ð Øñ	73Ø�#�u˜S %˜ZÑ(Ð(Ñ)ð73àð73ð ð73ð ð	73ð
 ô73r   