Ë
    Q/æja[  ã                   ó`	  — d dl mZmZ d dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
 g d¢Z e
 e	d«      edd	i«      Zd
„ Zdededej                   dej"                  ddf
d„Z ed dj&                  dEi e¤Ž«      ddddej(                  dddœdedee   dededeej                      dej"                  deej.                     dedefd„«       Z ed dj&                  dEi e¤Ž«      ddej(                  dddœdededeej                      dej"                  deej.                     dedefd „«       Z ed! d"j&                  dEi e¤Ž«      dddej(                  ddd#œded$ededeej                      dej"                  deej.                     dedefd%„«       Z ed& d'j&                  dEi e¤Ž«      d(ddej(                  ddd)œded*ededeej                      dej"                  deej.                     dedefd+„«       Z ed, d-j&                  dEi e¤Ž«      ddej(                  dddœdededeej                      dej"                  deej.                     dedefd.„«       Z ed/ d0j&                  dEi e¤Ž«      ddej(                  dddœdededeej                      dej"                  deej.                     dedefd1„«       Z ed2 d3j&                  dEi e¤Ž«      ddej(                  dddœdededeej                      dej"                  deej.                     dedefd4„«       Z ed5 d6j&                  dEi e¤Ž«      ddej(                  dddœdededeej                      dej"                  deej.                     dedefd7„«       Z ed8 d9j&                  dEi e¤Ž«      ddej(                  dddœd:ededeej                      dej"                  deej.                     dedefd;„«       Z  ed< d=j&                  dEi e¤Ž«      d>ddej(                  ddd?œd@ededeej                      dej"                  deej.                     dedefdA„«       Z! edB dCj&                  dEi e¤Ž«      ddej(                  dddœdededeej                      dej"                  deej.                     dedefdD„«       Z"y)Fé    )ÚOptionalÚIterableN)Úsqrt)ÚTensor)Úfactory_common_argsÚparse_kwargsÚmerge_dicts)ÚbartlettÚblackmanÚcosineÚexponentialÚgaussianÚgeneral_cosineÚgeneral_hammingÚhammingÚhannÚkaiserÚnuttalla6  
    M (int): the length of the window.
        In other words, the number of points of the returned window.
    sym (bool, optional): If `False`, returns a periodic window suitable for use in spectral analysis.
        If `True`, returns a symmetric window suitable for use in filter design. Default: `True`.
Únormalizationz�The window is normalized to 1 (maximum value is 1). However, the 1 doesn't appear if :attr:`M` is even and :attr:`sym` is `True`.c                  ó   ‡ — ˆ fd„}|S )a8  Adds docstrings to a given decorated function.

    Specially useful when then docstrings needs string interpolation, e.g., with
    str.format().
    REMARK: Do not use this function if the docstring doesn't need string
    interpolation, just write a conventional docstring.

    Args:
        args (str):
    c                 ó4   •— dj                  ‰«      | _        | S )NÚ )ÚjoinÚ__doc__)ÚoÚargss    €ú_/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/signal/windows/windows.pyÚ	decoratorz_add_docstr.<locals>.decorator6   s   ø€ Ø—G‘G˜D“MˆŒ	Øˆó    © )r   r   s   ` r   Ú_add_docstrr!   *   s   ø€ ôð Ðr   Úfunction_nameÚMÚdtypeÚlayoutÚreturnc                 óÖ   — |dk  rt        | › d|› �«      ‚|t        j                  urt        | › d|› �«      ‚|t        j                  t        j                  fvrt        | › d|› �«      ‚y)aŠ  Performs common checks for all the defined windows.
     This function should be called before computing any window.

     Args:
         function_name (str): name of the window function.
         M (int): length of the window.
         dtype (:class:`torch.dtype`): the desired data type of returned tensor.
         layout (:class:`torch.layout`): the desired layout of returned tensor.
     r   z, requires non-negative window length, got M=z/ is implemented for strided tensors only, got: z) expects float32 or float64 dtypes, got: N)Ú
ValueErrorÚtorchÚstridedÚfloat32Úfloat64)r"   r#   r$   r%   s       r   Ú_window_function_checksr-   =   s|   € ð 	ˆ1‚uÜ˜M˜?Ð*VÐWXÐVYÐZÓ[Ð[Ø”U—]‘]Ñ"Ü˜M˜?Ð*YÐZ`ÐYaÐbÓcÐcØ”U—]‘]¤E§M¡MÐ2Ñ2Ü˜M˜?Ð*SÐTYÐSZÐ[Ó\Ð\ð 3r   zì
Computes a window with an exponential waveform.
Also known as Poisson window.

The exponential window is defined as follows:

.. math::
    w_n = \exp{\left(-\frac{|n - c|}{\tau}\right)}

where `c` is the ``center`` of the window.
    aF  

{normalization}

Args:
    {M}

Keyword args:
    center (float, optional): where the center of the window will be located.
        Default: `M / 2` if `sym` is `False`, else `(M - 1) / 2`.
    tau (float, optional): the decay value.
        Tau is generally associated with a percentage, that means, that the value should
        vary within the interval (0, 100]. If tau is 100, it is considered the uniform window.
        Default: 1.0.
    {sym}
    {dtype}
    {layout}
    {device}
    {requires_grad}

Examples::

    >>> # Generates a symmetric exponential window of size 10 and with a decay value of 1.0.
    >>> # The center will be at (M - 1) / 2, where M is 10.
    >>> torch.signal.windows.exponential(10)
    tensor([0.0111, 0.0302, 0.0821, 0.2231, 0.6065, 0.6065, 0.2231, 0.0821, 0.0302, 0.0111])

    >>> # Generates a periodic exponential window and decay factor equal to .5
    >>> torch.signal.windows.exponential(10, sym=False,tau=.5)
    tensor([4.5400e-05, 3.3546e-04, 2.4788e-03, 1.8316e-02, 1.3534e-01, 1.0000e+00, 1.3534e-01, 1.8316e-02, 2.4788e-03, 3.3546e-04])
    ç      ð?TF)ÚcenterÚtauÚsymr$   r%   ÚdeviceÚrequires_gradr/   r0   r1   r2   r3   c          	      ó¤  — |€t        j                  «       }t        d| ||«       |dk  rt        d|› d�«      ‚|r|�t        d«      ‚| dk(  rt        j                  d||||¬«      S |€|s| dkD  r| n| dz
  d	z  }d|z  }t        j
                  | |z  | | dz
  z   |z  | ||||¬
«      }	t        j                  t        j                  |	«       «      S )Nr   r   zTau must be positive, got: ú	 instead.z)Center must be None for symmetric windows©r   ©r$   r%   r2   r3   é   ç       @©ÚstartÚendÚstepsr$   r%   r2   r3   )r)   Úget_default_dtyper-   r(   ÚemptyÚlinspaceÚexpÚabs)
r#   r/   r0   r1   r$   r%   r2   r3   ÚconstantÚks
             r   r   r   O   sï   € ðr €}Ü×'Ñ'Ó)ˆä˜M¨1¨e°VÔ<à
ˆa‚xÜÐ6°s°e¸9ÐEÓFÐFá
ˆvÐ!ÜÐDÓEÐEàˆA‚vÜ�{‰{˜4 u°VÀFÐZgÔhÐhà€~Ù 1 q¢5‘!¨a°!©e°sÑ:ˆà�3‰w€Hä�‰˜f˜W xÑ/Ø#˜G q¨1¡uÑ-°Ñ9ØØ"Ø$Ø$Ø%2ô	4€Aô �9‰9”e—i‘i “l�]Ó#Ð#r   aÒ  
Computes a window with a simple cosine waveform, following the same implementation as SciPy.
This window is also known as the sine window.

The cosine window is defined as follows:

.. math::
    w_n = \sin\left(\frac{\pi (n + 0.5)}{M}\right)

This formula differs from the typical cosine window formula by incorporating a 0.5 term in the numerator,
which shifts the sample positions. This adjustment results in a window that starts and ends with non-zero values.

aô  

{normalization}

Args:
    {M}

Keyword args:
    {sym}
    {dtype}
    {layout}
    {device}
    {requires_grad}

Examples::

    >>> # Generates a symmetric cosine window.
    >>> torch.signal.windows.cosine(10)
    tensor([0.1564, 0.4540, 0.7071, 0.8910, 0.9877, 0.9877, 0.8910, 0.7071, 0.4540, 0.1564])

    >>> # Generates a periodic cosine window.
    >>> torch.signal.windows.cosine(10, sym=False)
    tensor([0.1423, 0.4154, 0.6549, 0.8413, 0.9595, 1.0000, 0.9595, 0.8413, 0.6549, 0.4154])
©r1   r$   r%   r2   r3   c          	      óD  — |€t        j                  «       }t        d| ||«       | dk(  rt        j                  d||||¬«      S d}t         j                  |s
| dkD  r| dz   n| z  }t        j
                  ||z  || dz
  z   |z  | ||||¬«      }t        j                  |«      S )Nr   r   r6   r7   ç      à?r8   r:   )r)   r>   r-   r?   Úpir@   Úsin©	r#   r1   r$   r%   r2   r3   r;   rC   rD   s	            r   r   r   ¦   sª   € ðd €}Ü×'Ñ'Ó)ˆä˜H a¨°Ô7àˆA‚vÜ�{‰{˜4 u°VÀFÐZgÔhÐhà€EÜ�x‰x©°°A²˜1˜qš5¸1Ñ=€Hä�‰˜U XÑ-Ø! Q¨¡U™O¨xÑ7ØØ"Ø$Ø$Ø%2ô	4€Aô �9‰9�Q‹<Ðr   z§
Computes a window with a gaussian waveform.

The gaussian window is defined as follows:

.. math::
    w_n = \exp{\left(-\left(\frac{n}{2\sigma}\right)^2\right)}
    a   

{normalization}

Args:
    {M}

Keyword args:
    std (float, optional): the standard deviation of the gaussian. It controls how narrow or wide the window is.
        Default: 1.0.
    {sym}
    {dtype}
    {layout}
    {device}
    {requires_grad}

Examples::

    >>> # Generates a symmetric gaussian window with a standard deviation of 1.0.
    >>> torch.signal.windows.gaussian(10)
    tensor([4.0065e-05, 2.1875e-03, 4.3937e-02, 3.2465e-01, 8.8250e-01, 8.8250e-01, 3.2465e-01, 4.3937e-02, 2.1875e-03, 4.0065e-05])

    >>> # Generates a periodic gaussian window and standard deviation equal to 0.9.
    >>> torch.signal.windows.gaussian(10, sym=False,std=0.9)
    tensor([1.9858e-07, 5.1365e-05, 3.8659e-03, 8.4658e-02, 5.3941e-01, 1.0000e+00, 5.3941e-01, 8.4658e-02, 3.8659e-03, 5.1365e-05])
)Ústdr1   r$   r%   r2   r3   rK   c          	      óx  — |€t        j                  «       }t        d| ||«       |dk  rt        d|› d�«      ‚| dk(  rt        j                  d||||¬«      S |s| dkD  r| n| dz
   dz  }d|t        d	«      z  z  }t        j                  ||z  || dz
  z   |z  | ||||¬
«      }	t        j                  |	d	z   «      S )Nr   r   z*Standard deviation must be positive, got: r5   r6   r7   r8   r9   é   r:   )r)   r>   r-   r(   r?   r   r@   rA   )
r#   rK   r1   r$   r%   r2   r3   r;   rC   rD   s
             r   r   r   î   sÙ   € ð` €}Ü×'Ñ'Ó)ˆä˜J¨¨5°&Ô9à
ˆa‚xÜÐEÀcÀUÈ)ÐTÓUÐUàˆA‚vÜ�{‰{˜4 u°VÀFÐZgÔhÐhá˜q 1šu‰a¨!¨a©%Ð0°3Ñ6€Eà�Cœ$˜q›'‘MÑ"€Hä�‰˜U XÑ-Ø! Q¨¡U™O¨xÑ7ØØ"Ø$Ø$Ø%2ô	4€Aô �9‰9�a˜1‘f�WÓÐr   aK  
Computes the Kaiser window.

The Kaiser window is defined as follows:

.. math::
    w_n = I_0 \left( \beta \sqrt{1 - \left( {\frac{n - N/2}{N/2}} \right) ^2 } \right) / I_0( \beta )

where ``I_0`` is the zeroth order modified Bessel function of the first kind (see :func:`torch.special.i0`), and
``N = M - 1 if sym else M``.
    aò  

{normalization}

Args:
    {M}

Keyword args:
    beta (float, optional): shape parameter for the window. Must be non-negative. Default: 12.0
    {sym}
    {dtype}
    {layout}
    {device}
    {requires_grad}

Examples::

    >>> # Generates a symmetric gaussian window with a standard deviation of 1.0.
    >>> torch.signal.windows.kaiser(5)
    tensor([4.0065e-05, 2.1875e-03, 4.3937e-02, 3.2465e-01, 8.8250e-01, 8.8250e-01, 3.2465e-01, 4.3937e-02, 2.1875e-03, 4.0065e-05])
    >>> # Generates a periodic gaussian window and standard deviation equal to 0.9.
    >>> torch.signal.windows.kaiser(5, sym=False,std=0.9)
    tensor([1.9858e-07, 5.1365e-05, 3.8659e-03, 8.4658e-02, 5.3941e-01, 1.0000e+00, 5.3941e-01, 8.4658e-02, 3.8659e-03, 5.1365e-05])
g      (@)Úbetar1   r$   r%   r2   r3   rN   c          	      óh  — |€t        j                  «       }t        d| ||«       |dk  rt        d|› d�«      ‚| dk(  rt        j                  d||||¬«      S | dk(  rt        j
                  d||||¬«      S t        j                  |||¬	«      }| }d
|z  |s| n| dz
  z  }t        j                  ||| dz
  |z  z   «      }	t        j                  ||	| ||||¬«      }
t        j                  t        j                  ||z  t        j                  |
d«      z
  «      «      t        j                  |«      z  S )Nr   r   z beta must be non-negative, got: r5   r6   r7   r8   ©r8   )r$   r2   r9   r:   rM   )r)   r>   r-   r(   r?   ÚonesÚtensorÚminimumr@   Úi0r   Úpow)r#   rN   r1   r$   r%   r2   r3   r;   rC   r<   rD   s              r   r   r   8  s+  € ðb €}Ü×'Ñ'Ó)ˆä˜H a¨°Ô7àˆa‚xÜÐ;¸D¸6ÀÐKÓLÐLàˆA‚vÜ�{‰{˜4 u°VÀFÐZgÔhÐhàˆA‚vÜ�z‰z˜$ e°FÀ6ÐYfÔgÐgô �<‰<˜ E°&Ô9€DàˆE€EØ�T‰z¡c™Q¨q°1©uÑ5€HÜ
�-‰-˜˜e q¨1¡u°Ñ&8Ñ8Ó
9€Cä�‰˜UØØØ"Ø$Ø$Ø%2ô	4€Aô �8‰8”E—J‘J˜t d™{¬U¯Y©Y°q¸!«_Ñ<Ó=Ó>ÄÇÁÈ$ÃÑOÐOr   zœ
Computes the Hamming window.

The Hamming window is defined as follows:

.. math::
    w_n = \alpha - \beta\ \cos \left( \frac{2 \pi n}{M - 1} \right)
    a¡  

{normalization}

Arguments:
    {M}

Keyword args:
    {sym}
    alpha (float, optional): The coefficient :math:`\alpha` in the equation above.
    beta (float, optional): The coefficient :math:`\beta` in the equation above.
    {dtype}
    {layout}
    {device}
    {requires_grad}

Examples::

    >>> # Generates a symmetric Hamming window.
    >>> torch.signal.windows.hamming(10)
    tensor([0.0800, 0.1876, 0.4601, 0.7700, 0.9723, 0.9723, 0.7700, 0.4601, 0.1876, 0.0800])

    >>> # Generates a periodic Hamming window.
    >>> torch.signal.windows.hamming(10, sym=False)
    tensor([0.0800, 0.1679, 0.3979, 0.6821, 0.9121, 1.0000, 0.9121, 0.6821, 0.3979, 0.1679])
c                ó$   — t        | |||||¬«      S )NrE   ©r   ©r#   r1   r$   r%   r2   r3   s         r   r   r   ‰  s   € ôZ ˜1 #¨U¸6È&Ð`mÔnÐnr   zÔ
Computes the Hann window.

The Hann window is defined as follows:

.. math::
    w_n = \frac{1}{2}\ \left[1 - \cos \left( \frac{2 \pi n}{M - 1} \right)\right] =
    \sin^2 \left( \frac{\pi n}{M - 1} \right)
    añ  

{normalization}

Arguments:
    {M}

Keyword args:
    {sym}
    {dtype}
    {layout}
    {device}
    {requires_grad}

Examples::

    >>> # Generates a symmetric Hann window.
    >>> torch.signal.windows.hann(10)
    tensor([0.0000, 0.1170, 0.4132, 0.7500, 0.9698, 0.9698, 0.7500, 0.4132, 0.1170, 0.0000])

    >>> # Generates a periodic Hann window.
    >>> torch.signal.windows.hann(10, sym=False)
    tensor([0.0000, 0.0955, 0.3455, 0.6545, 0.9045, 1.0000, 0.9045, 0.6545, 0.3455, 0.0955])
c          	      ó&   — t        | d|||||¬«      S )NrG   ©Úalphar1   r$   r%   r2   r3   rW   rX   s         r   r   r   ¹  s&   € ôX ˜1Ø!$Ø"Ø!&Ø"(Ø"(Ø)6ô8ð 8r   zÊ
Computes the Blackman window.

The Blackman window is defined as follows:

.. math::
    w_n = 0.42 - 0.5 \cos \left( \frac{2 \pi n}{M - 1} \right) + 0.08 \cos \left( \frac{4 \pi n}{M - 1} \right)
    aá  

{normalization}

Arguments:
    {M}

Keyword args:
    {sym}
    {dtype}
    {layout}
    {device}
    {requires_grad}

Examples::

    >>> # Generates a symmetric Blackman window.
    >>> torch.signal.windows.blackman(5)
    tensor([-1.4901e-08,  3.4000e-01,  1.0000e+00,  3.4000e-01, -1.4901e-08])

    >>> # Generates a periodic Blackman window.
    >>> torch.signal.windows.blackman(5, sym=False)
    tensor([-1.4901e-08,  2.0077e-01,  8.4923e-01,  8.4923e-01,  2.0077e-01])
c          	      ór   — |€t        j                  «       }t        d| ||«       t        | g d¢|||||¬«      S )Nr   )gáz®GáÚ?rG   g{®Gáz´?©Úar1   r$   r%   r2   r3   )r)   r>   r-   r   rX   s         r   r   r   î  sD   € ðV €}Ü×'Ñ'Ó)ˆä˜J¨¨5°&Ô9ä˜!Ò0°cÀÈvÐ^dØ(5ô7ð 7r   a4  
Computes the Bartlett window.

The Bartlett window is defined as follows:

.. math::
    w_n = 1 - \left| \frac{2n}{M - 1} - 1 \right| = \begin{cases}
        \frac{2n}{M - 1} & \text{if } 0 \leq n \leq \frac{M - 1}{2} \\
        2 - \frac{2n}{M - 1} & \text{if } \frac{M - 1}{2} < n < M \\ \end{cases}
    a  

{normalization}

Arguments:
    {M}

Keyword args:
    {sym}
    {dtype}
    {layout}
    {device}
    {requires_grad}

Examples::

    >>> # Generates a symmetric Bartlett window.
    >>> torch.signal.windows.bartlett(10)
    tensor([0.0000, 0.2222, 0.4444, 0.6667, 0.8889, 0.8889, 0.6667, 0.4444, 0.2222, 0.0000])

    >>> # Generates a periodic Bartlett window.
    >>> torch.signal.windows.bartlett(10, sym=False)
    tensor([0.0000, 0.2000, 0.4000, 0.6000, 0.8000, 1.0000, 0.8000, 0.6000, 0.4000, 0.2000])
c          	      ó\  — |€t        j                  «       }t        d| ||«       | dk(  rt        j                  d||||¬«      S | dk(  rt        j                  d||||¬«      S d}d|s| n| dz
  z  }t        j
                  ||| dz
  |z  z   | ||||¬	«      }dt        j                  |«      z
  S )
Nr
   r   r6   r7   r8   rP   éÿÿÿÿrM   r:   )r)   r>   r-   r?   rQ   r@   rB   rJ   s	            r   r
   r
   "  sÀ   € ðZ €}Ü×'Ñ'Ó)ˆä˜J¨¨5°&Ô9àˆA‚vÜ�{‰{˜4 u°VÀFÐZgÔhÐhàˆA‚vÜ�z‰z˜$ e°FÀ6ÐYfÔgÐgà€EØ™S‘A a¨!¡eÑ,€Hä�‰˜UØ  A¨¡E¨XÑ#5Ñ5ØØ"Ø$Ø$Ø%2ô	4€Að Œu�y‰y˜‹|ÑÐr   z¹
Computes the general cosine window.

The general cosine window is defined as follows:

.. math::
    w_n = \sum^{M-1}_{i=0} (-1)^i a_i \cos{ \left( \frac{2 \pi i n}{M - 1}\right)}
    aÁ  

{normalization}

Arguments:
    {M}

Keyword args:
    a (Iterable): the coefficients associated to each of the cosine functions.
    {sym}
    {dtype}
    {layout}
    {device}
    {requires_grad}

Examples::

    >>> # Generates a symmetric general cosine window with 3 coefficients.
    >>> torch.signal.windows.general_cosine(10, a=[0.46, 0.23, 0.31], sym=True)
    tensor([0.5400, 0.3376, 0.1288, 0.4200, 0.9136, 0.9136, 0.4200, 0.1288, 0.3376, 0.5400])

    >>> # Generates a periodic general cosine window wit 2 coefficients.
    >>> torch.signal.windows.general_cosine(10, a=[0.5, 1 - 0.5], sym=False)
    tensor([0.0000, 0.0955, 0.3455, 0.6545, 0.9045, 1.0000, 0.9045, 0.6545, 0.3455, 0.0955])
r^   c          	      ó.  — |€t        j                  «       }t        d| ||«       | dk(  rt        j                  d||||¬«      S | dk(  rt        j                  d||||¬«      S t        |t        «      st        d«      ‚|st        d«      ‚d	t         j                  z  |s| n| dz
  z  }t        j                  d| dz
  |z  | ||||¬
«      }t        j                  t        |«      D �	�
cg c]  \  }	}
d|	z  |
z  ‘Œ c}
}	|||¬«      }t        j                  |j                  d   |j                  |j                   |j"                  ¬«      }	|j%                  d«      t        j&                  |	j%                  d«      |z  «      z  j)                  d«      S c c}
}	w )Nr   r   r6   r7   r8   rP   z!Coefficients must be a list/tuplezCoefficients cannot be emptyrM   r:   r`   )r2   r$   r3   )r$   r2   r3   )r)   r>   r-   r?   rQ   Ú
isinstancer   Ú	TypeErrorr(   rH   r@   rR   Ú	enumerateÚarangeÚshaper$   r2   r3   Ú	unsqueezeÚcosÚsum)r#   r^   r1   r$   r%   r2   r3   rC   rD   ÚiÚwÚa_is               r   r   r   h  sh  € ðX €}Ü×'Ñ'Ó)ˆäÐ,¨a°¸Ô?àˆA‚vÜ�{‰{˜4 u°VÀFÐZgÔhÐhàˆA‚vÜ�z‰z˜$ e°FÀ6ÐYfÔgÐgä�aœÔ"ÜÐ;Ó<Ð<áÜÐ7Ó8Ð8à”5—8‘8‰|©™q°°Q±Ñ7€Hä�‰˜QØ ™E XÑ-ØØ"Ø$Ø$Ø%2ô	4€Aô �,‰,´)¸A³,×?©$¨!¨Q˜ ™	 A›Ó?ÈÐV[ÐkxÔ
y€CÜ�‰�S—Y‘Y˜q‘\¨¯©¸3¿:¹:ÐUX×UfÑUfÔg€AØ�M‰M˜"Ó¤§	¡	¨!¯+©+°b«/¸AÑ*=Ó >Ñ>×CÑCÀAÓFÐFùó @s   Ã'F
z²
Computes the general Hamming window.

The general Hamming window is defined as follows:

.. math::
    w_n = \alpha - (1 - \alpha) \cos{ \left( \frac{2 \pi n}{M-1} \right)}
    a£  

{normalization}

Arguments:
    {M}

Keyword args:
    alpha (float, optional): the window coefficient. Default: 0.54.
    {sym}
    {dtype}
    {layout}
    {device}
    {requires_grad}

Examples::

    >>> # Generates a symmetric Hamming window with the general Hamming window.
    >>> torch.signal.windows.general_hamming(10, sym=True)
    tensor([0.0800, 0.1876, 0.4601, 0.7700, 0.9723, 0.9723, 0.7700, 0.4601, 0.1876, 0.0800])

    >>> # Generates a periodic Hann window with the general Hamming window.
    >>> torch.signal.windows.general_hamming(10, alpha=0.5, sym=False)
    tensor([0.0000, 0.0955, 0.3455, 0.6545, 0.9045, 1.0000, 0.9045, 0.6545, 0.3455, 0.0955])
gHáz®Gá?rZ   r[   c          	      ó0   — t        | |d|z
  g|||||¬«      S )Nr.   r]   ©r   )r#   r[   r1   r$   r%   r2   r3   s          r   r   r   ´  s/   € ôZ ˜!Ø" B¨¡JÐ/Ø!Ø %Ø!'Ø!'Ø(5ô7ð 7r   zè
Computes the minimum 4-term Blackman-Harris window according to Nuttall.

.. math::
    w_n = 1 - 0.36358 \cos{(z_n)} + 0.48917 \cos{(2z_n)} - 0.13659 \cos{(3z_n)} + 0.01064 \cos{(4z_n)}

where :math:`z_n = \frac{2 \pi n}{M}`.
    aÝ  

{normalization}

Arguments:
    {M}

Keyword args:
    {sym}
    {dtype}
    {layout}
    {device}
    {requires_grad}

References::

    - A. Nuttall, "Some windows with very good sidelobe behavior,"
      IEEE Transactions on Acoustics, Speech, and Signal Processing, vol. 29, no. 1, pp. 84-91,
      Feb 1981. https://doi.org/10.1109/TASSP.1981.1163506

    - Heinzel G. et al., "Spectrum and spectral density estimation by the Discrete Fourier transform (DFT),
      including a comprehensive list of window functions and some new flat-top windows",
      February 15, 2002 https://holometer.fnal.gov/GH_FFT.pdf

Examples::

    >>> # Generates a symmetric Nutall window.
    >>> torch.signal.windows.general_hamming(5, sym=True)
    tensor([3.6280e-04, 2.2698e-01, 1.0000e+00, 2.2698e-01, 3.6280e-04])

    >>> # Generates a periodic Nuttall window.
    >>> torch.signal.windows.general_hamming(5, sym=False)
    tensor([3.6280e-04, 1.1052e-01, 7.9826e-01, 7.9826e-01, 1.1052e-01])
c          	      ó*   — t        | g d¢|||||¬«      S )N)g¹zíD×?g;%¯Nß?g¡1“¨|Á?gžòC Ë…?r]   rn   rX   s         r   r   r   ê  s&   € ôn ˜!ÚHØ!Ø %Ø!'Ø!'Ø(5ô7ð 7r   r    )#Útypingr   r   r)   Úmathr   r   Útorch._torch_docsr   r   r	   Ú__all__Úwindow_common_argsr!   ÚstrÚintr$   r%   r-   Úformatr*   ÚfloatÚboolr2   r   r   r   r   r   r   r   r
   r   r   r   r    r   r   ú<module>rz      sn  ð÷ &ã Ý å ß LÑ Lò€ñ !Ùð	óð àð HðóÐ ò"ð&]¨3ð ]°3ð ]¸u¿{¹{ð ]ÐTY×T`ÑT`ð ]Ðeió ]ñ$ ð
ðð ÷< 	‰ñ= ð> ñ? ó-ðb #'ØØØ'+Ø$Ÿ}™}Ø)-Ø#ò&$Øð&$ð ˜‘ð&$ð ð	&$ð
 ð&$ð ˜Ÿ™Ñ$ð&$ð —‘ð&$ð ˜Ÿ™Ñ&ð&$ð ð&$ð ò&$ó]-ð\&$ñR ððð ÷. �Fñ/ð0 ñ1ó(ðX Ø'+Ø$Ÿ}™}Ø)-Ø#òØðð ðð ˜Ÿ™Ñ$ð	ð
 —‘ðð ˜Ÿ™Ñ&ðð ðð òóS(ðRñ> ððð ÷2 �Fñ3ð4 ñ5ó%ðR ØØ'+Ø$Ÿ}™}Ø)-Ø#ò!Øð!ð ð!ð ð	!ð
 ˜Ÿ™Ñ$ð!ð —‘ð!ð ˜Ÿ™Ñ&ð!ð ð!ð ò!óM%ðL!ñH ð
ðð ÷. �Fñ/ð0 ñ1ó&ðT ØØ'+Ø$Ÿ}™}Ø)-Ø#ò'PØð'Pð ð'Pð ð	'Pð
 ˜Ÿ™Ñ$ð'Pð —‘ð'Pð ˜Ÿ™Ñ&ð'Pð ð'Pð ò'PóO&ðN'PñT ððð ÷2 �Fñ3ð4 ñ5ó%ðP Ø+/Ø#(§=¡=Ø-1Ø"'òoˆsð oàðoð ˜EŸK™KÑ(ðoð —L‘Lð	oð
 ˜UŸ\™\Ñ*ðoð  ðoð -3òoóM%ðLoñ ððð ÷. �Fñ/ð0 ñ1ó$ðN Ø(,Ø %§¡Ø*.Ø$ò8ˆCð 8àð8ð ˜Ÿ™Ñ%ð8ð —‘ð	8ð
 ˜%Ÿ,™,Ñ'ð8ð ð8ð *0ò8óK$ðJ8ñ  ððð ÷. �Fñ/ð0 ñ1ó#ðL Ø,0Ø$)§M¡MØ.2Ø#(ò7�ð 7àð7ð ˜UŸ[™[Ñ)ð7ð —\‘\ð	7ð
 ˜eŸl™lÑ+ð7ð !ð7ð .4ò7óI#ðH7ñ  ð	ðð ÷. �Fñ/ð0 ñ1ó%ðP Ø,0Ø$)§M¡MØ.2Ø#(ò�ð àðð ˜UŸ[™[Ñ)ðð —\‘\ð	ð
 ˜eŸl™lÑ+ðð !ðð .4òóM%ðLñ@ ððð ÷0 �Fñ1ð2 ñ3ó$ðN  $Ø26Ø*/¯-©-Ø48Ø).ò$GØð$Gàð$Gð # 5§;¡;Ñ/ð$Gð !Ÿ<™<ð	$Gð
 $ E§L¡LÑ1ð$Gð #'ð$Gð 4:ò$GóK$ðJ$GñN ððð ÷0 �Fñ1ð2 ñ3ó$ðN $(Ø $Ø37Ø+0¯=©=Ø59Ø*/ò7à ð7ð ð7ð $ E§K¡KÑ0ð	7ð
 "ŸL™Lð7ð % U§\¡\Ñ2ð7ð $(ð7ð 5;ò7óK$ðJ7ñ" ðð!ð !÷B �FñC#ðD ñE#ó-ðb Ø'+Ø$Ÿ}™}Ø)-Ø#ò7Øð7ð ð7ð ˜Ÿ™Ñ$ð	7ð
 —‘ð7ð ˜Ÿ™Ñ&ð7ð ð7ð ò7ó]-ñ\7r   