§
    �Štj¸X  ã                   óö  — d dl mZmZ d dlmZ d dlmZ d dlZd dlmZ d dl	m
Z
mZmZ g d¢Z ed¦  «        Z e ed	¦  «        e
d
di¦  «        Zdedeegef         fd„Zdededej        dej        ddf
d„Z ed dj        dHi e¤Ž¦  «        ddddej        dddœdededz  dededej        dz  dej        dej        dz  dedefd„¦   «         Z ed  d!j        dHi e¤Ž¦  «        ddej        ddd"œdededej        dz  dej        dej        dz  dedefd#„¦   «         Z ed$ d%j        dHi e¤Ž¦  «        dddej        ddd&œded'ededej        dz  dej        dej        dz  dedefd(„¦   «         Z ed) d*j        dHi e¤Ž¦  «        d+ddej        ddd,œded-ededej        dz  dej        dej        dz  dedefd.„¦   «         Z ed/ d0j        dHi e¤Ž¦  «        ddej        ddd"œdededej        dz  dej        dej        dz  dedefd1„¦   «         Z ed2 d3j        dHi e¤Ž¦  «        ddej        ddd"œdededej        dz  dej        dej        dz  dedefd4„¦   «         Z  ed5 d6j        dHi e¤Ž¦  «        ddej        ddd"œdededej        dz  dej        dej        dz  dedefd7„¦   «         Z! ed8 d9j        dHi e¤Ž¦  «        ddej        ddd"œdededej        dz  dej        dej        dz  dedefd:„¦   «         Z" ed; d<j        dHi e¤Ž¦  «        ddej        ddd"œd=ededej        dz  dej        dej        dz  dedefd>„¦   «         Z# ed? d@j        dHi e¤Ž¦  «        dAddej        dddBœdCededej        dz  dej        dej        dz  dedefdD„¦   «         Z$ edE dFj        dHi e¤Ž¦  «        ddej        ddd"œdededej        dz  dej        dej        dz  dedefdG„¦   «         Z%dS )Ié    )ÚCallableÚIterable)Úsqrt)ÚTypeVarN)ÚTensor)Úfactory_common_argsÚmerge_dictsÚparse_kwargs)ÚbartlettÚblackmanÚcosineÚexponentialÚgaussianÚgeneral_cosineÚgeneral_hammingÚhammingÚhannÚkaiserÚnuttallÚ_Ta6  
    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`.ÚargsÚreturnc                  ó0   ‡ — dt           dt           fˆ fd„}|S )a6  Adds docstrings to a given decorated function.

    Specially useful when the docstrings need 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):
    Úor   c                 ó<   •— d                      ‰¦  «        | _        | S )NÚ )ÚjoinÚ__doc__)r   r   s    €úZ/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/signal/windows/windows.pyÚ	decoratorz_add_docstr.<locals>.decorator8   s   ø€ Ø—G’G˜D‘M”MˆŒ	Øˆó    )r   )r   r!   s   ` r    Ú_add_docstrr#   ,   s7   ø€ ð•Rð �Bð ð ð ð ð ð ð Ðr"   Úfunction_nameÚMÚdtypeÚlayoutc                 óÚ   — |dk     rt          | › d|› �¦  «        ‚|t          j        urt          | › d|› �¦  «        ‚|t          j        t          j        fvrt          | › d|› �¦  «        ‚dS )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€uÝØÐMÐMÈ!ÐMÐMñ
ô 
ð 	
ð •U”]Ð"Ð"ÝØÐUÐUÈVÐUÐUñ
ô 
ð 	
ð •U”]¥E¤MÐ2Ð2Ð2ÝØÐNÐNÀuÐNÐNñ
ô 
ð 	
ð 3Ð2r"   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_gradr0   r1   r2   r3   r4   c          	      ó¸  — |€t          j        ¦   «         }t          d| ||¦  «         |dk    rt          d|› d�¦  «        ‚|r|�t          d¦  «        ‚| dk    rt          j        d||||¬¦  «        S |€|s| dk    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'   r3   r4   é   ç       @©ÚstartÚendÚstepsr&   r'   r3   r4   )r*   Úget_default_dtyper.   r)   ÚemptyÚlinspaceÚexpÚabs)
r%   r0   r1   r2   r&   r'   r3   r4   ÚconstantÚks
             r    r   r   Y   s&  € ðn €}ÝÔ'Ñ)Ô)ˆå˜M¨1¨e°VÑ<Ô<Ð<à
ˆa‚x€xÝÐE°sÐEÐEÐEÑFÔFÐFà
ð FˆvÐ!ÝÐDÑEÔEÐEàˆA‚v€vÝŒ{Ø˜ f°VÈ=ð
ñ 
ô 
ð 	
ð €~ØÐ3 1 q¢5 5�!�!¨a°!©e°sÑ:ˆà�3‰w€HåŒØˆg˜Ñ ØˆW˜˜A™Ñ (Ñ*ØØØØØ#ð	ñ 	ô 	€Aõ Œ9•e”i ‘l”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])
©r2   r&   r'   r3   r4   c          	      ó@  — |€t          j        ¦   «         }t          d| ||¦  «         | dk    rt          j        d||||¬¦  «        S d}t           j        |s| dk    r| dz   n| z  }t          j        ||z  || dz
  z   |z  | ||||¬¦  «        }t          j        |¦  «        S )Nr   r   r7   r8   ç      à?r9   r;   )r*   r?   r.   r@   ÚpirA   Úsin©	r%   r2   r&   r'   r3   r4   r<   rD   rE   s	            r    r   r   ²   sÎ   € ðd €}ÝÔ'Ñ)Ô)ˆå˜H a¨°Ñ7Ô7Ð7àˆA‚v€vÝŒ{Ø˜ f°VÈ=ð
ñ 
ô 
ð 	
ð €EÝŒx¨Ð<°°A²°˜1˜q™5˜5¸1Ñ=€HåŒØ�hÑØ�a˜!‘e‰_ Ñ(ØØØØØ#ð	ñ 	ô 	€Aõ Œ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])
)Ústdr2   r&   r'   r3   r4   rL   c          	      óŽ  — |€t          j        ¦   «         }t          d| ||¦  «         |dk    rt          d|› d�¦  «        ‚| dk    rt          j        d||||¬¦  «        S |s| dk    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: r6   r7   r8   r9   r:   é   r;   )r*   r?   r.   r)   r@   r   rA   rB   )
r%   rL   r2   r&   r'   r3   r4   r<   rD   rE   s
             r    r   r   þ   s	  € ð` €}ÝÔ'Ñ)Ô)ˆå˜J¨¨5°&Ñ9Ô9Ð9à
ˆa‚x€xÝÐTÀcÐTÐTÐTÑUÔUÐUàˆA‚v€vÝŒ{Ø˜ f°VÈ=ð
ñ 
ô 
ð 	
ð Ð/˜q 1šu˜uˆaˆa¨!¨a©%Ð0°3Ñ6€Eà�C�$˜q™'œ'‘MÑ"€HåŒØ�hÑØ�a˜!‘e‰_ Ñ(ØØØØØ#ð	ñ 	ô 	€Aõ Œ9�q˜!‘t�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 Kaiser window with a shape parameter of 12.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 Kaiser window and shape parameter equal to 0.9.
    >>> torch.signal.windows.kaiser(5, sym=False, beta=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      (@)Úbetar2   r&   r'   r3   r4   rO   c          	      ój  — |€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: r6   r7   r8   r9   ©r9   )r&   r3   r:   r;   rN   )r*   r?   r.   r)   r@   ÚonesÚtensorÚminimumrA   Úi0r   Úpow)r%   rO   r2   r&   r'   r3   r4   r<   rD   r=   rE   s              r    r   r   L  s€  € ðb €}ÝÔ'Ñ)Ô)ˆå˜H a¨°Ñ7Ô7Ð7àˆa‚x€xÝÐK¸DÐKÐKÐKÑLÔLÐLàˆA‚v€vÝŒ{Ø˜ f°VÈ=ð
ñ 
ô 
ð 	
ð 	ˆA‚v€vÝŒzØ˜ f°VÈ=ð
ñ 
ô 
ð 	
õ Œ<˜ E°&Ð9Ñ9Ô9€DàˆE€EØ�T‰z cÐ4˜Q˜Q¨q°1©uÑ5€HÝ
Œ-àà��Q‘˜(Ñ"Ñ"ñ	ô €Cõ 	ŒØØØØØØØ#ð	ñ 	ô 	€Aõ Œ8•E”J˜t d™{­U¬Y°q¸!©_¬_Ñ<Ñ=Ô=Ñ>Ô>ÅÄàñBô Bñ ð r"   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 )NrF   ©r   ©r%   r2   r&   r'   r3   r4   s         r    r   r   ¬  s.   € õZ Ø	ØØØØØ#ðñ ô ð r"   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 )NrH   ©Úalphar2   r&   r'   r3   r4   rX   rY   s         r    r   r   ã  s1   € õX Ø	ØØØØØØ#ðñ ô ð r"   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          	      ó€   — |€t          j        ¦   «         }t          d| ||¦  «         t          | g d¢|||||¬¦  «        S )Nr   )gáz®GáÚ?rH   g{®Gáz´?©Úar2   r&   r'   r3   r4   )r*   r?   r.   r   rY   s         r    r   r     s^   € ðV €}ÝÔ'Ñ)Ô)ˆå˜J¨¨5°&Ñ9Ô9Ð9åØ	Ø
Ð
Ð
ØØØØØ#ðñ ô ð r"   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   r7   r8   r9   rQ   éÿÿÿÿrN   r;   )r*   r?   r.   r@   rR   rA   rC   rK   s	            r    r   r   U  sô   € ðZ €}ÝÔ'Ñ)Ô)ˆå˜J¨¨5°&Ñ9Ô9Ð9àˆA‚v€vÝŒ{Ø˜ f°VÈ=ð
ñ 
ô 
ð 	
ð 	ˆA‚v€vÝŒzØ˜ f°VÈ=ð
ñ 
ô 
ð 	
ð €EØ˜SÐ+�A�A a¨!¡eÑ,€HåŒØØ�Q˜‘U˜hÑ&Ñ&ØØØØØ#ð	ñ 	ô 	€Að �uŒ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 with 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        d„ t          |¦  «        D ¦   «         |||¬¦  «        }	t          j        |	j        d         |	j        |	j        |	j        ¬¦  «        }
|	                     d¦  «        t          j        |
                     d¦  «        |z  ¦  «        z                       d¦  «        S )Nr   r   r7   r8   r9   rQ   z!Coefficients must be a list/tuplezCoefficients cannot be emptyrN   r;   c                 ó$   — g | ]\  }}d |z  |z  ‘ŒS )ra   © )Ú.0ÚiÚws      r    ú
<listcomp>z"general_cosine.<locals>.<listcomp>ð  s$   € Ð0Ð0Ð0™4˜1˜aˆ"�‰�Q‰Ð0Ð0Ð0r"   )r3   r&   r4   )r&   r3   r4   ra   )r*   r?   r.   r@   rR   Ú
isinstancer   Ú	TypeErrorr)   rI   rA   rS   Ú	enumerateÚarangeÚshaper&   r3   r4   Ú	unsqueezeÚcosÚsum)r%   r_   r2   r&   r'   r3   r4   rD   rE   Úa_irf   s              r    r   r   ¡  s½  € ðZ €}ÝÔ'Ñ)Ô)ˆåÐ,¨a°¸Ñ?Ô?Ð?àˆA‚v€vÝŒ{Ø˜ f°VÈ=ð
ñ 
ô 
ð 	
ð 	ˆA‚v€vÝŒzØ˜ f°VÈ=ð
ñ 
ô 
ð 	
õ �a�Ñ"Ô"ð =ÝÐ;Ñ<Ô<Ð<àð 9ÝÐ7Ñ8Ô8Ð8à•5”8‰|¨Ð6˜q˜q°°Q±Ñ7€HåŒØØ�‰U�hÑØØØØØ#ð	ñ 	ô 	€Aõ Œ,Ø0Ð0¥9¨Q¡<¤<Ð0Ñ0Ô0ØØØ#ð	ñ ô €Cõ 	ŒØŒ	�!ŒØŒiØŒzØÔ'ð		ñ 	ô 	€Að �MŠM˜"ÑÔ¥¤	¨!¯+ª+°b©/¬/¸AÑ*=Ñ >Ô >Ñ>×CÒCÀAÑFÔFÐFr"   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á?r[   r\   c          	      ó8   — t          | |d|z
  g|||||¬¦  «        S )Nr/   r^   ©r   )r%   r\   r2   r&   r'   r3   r4   s          r    r   r   þ  s:   € õZ Ø	Ø�#˜‘+Ð
ØØØØØ#ðñ ô ð r"   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 Nuttall 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          	      ó2   — t          | g d¢|||||¬¦  «        S )N)g¹zíD×?g;%¯Nß?g¡1“¨|Á?gžòC Ë…?r^   rs   rY   s         r    r   r   6  s7   € õj Ø	Ø
6Ð
6Ð
6ØØØØØ#ðñ ô ð r"   rd   )&Úcollections.abcr   r   Úmathr   Útypingr   r*   r   Útorch._torch_docsr   r	   r
   Ú__all__r   Úwindow_common_argsÚstrr#   Úintr&   r'   r.   Úformatr+   ÚfloatÚboolr3   r   r   r   r   r   r   r   r   r   r   r   rd   r"   r    ú<module>r€      s�
  ðà .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ Lðð ð €ð €WˆT�]„]€à �[Ø€Lð	ñô ð àð 7ðñô Ð ð"�sð ˜x¨¨¨b¨Ô1ð ð ð ð ð&
Øð
Øð
Ø',¤{ð
Ø<A¼Lð
à	ð
ð 
ð 
ð 
ð4 €ð
ðð ô< 	ð=%ð %ð< $ð=%ð %ñ+ô +ð^  ØØØ $Ø œ=Ø"&Øð*$ð *$ð *$Ø
ð*$ð �D‰Lð*$ð 
ð	*$ð
 
ð*$ð Œ;˜Ñð*$ð ŒLð*$ð ŒL˜4Ñð*$ð ð*$ð ð*$ð *$ð *$ñY+ô +ðX*$ðZ €ððð ô. ð/ð ð0 ð1ð ñ(ô (ðX Ø $Ø œ=Ø"&Øð ð  ð  Ø
ð ð 
ð ð Œ;˜Ñð	 ð
 ŒLð ð ŒL˜4Ñð ð ð ð ð ð  ð  ñS(ô (ðR ðF €ððð ô2 ð3ð ð4 ð5ð ñ%ô %ðR ØØ $Ø œ=Ø"&Øð%ð %ð %Ø
ð%ð 
ð%ð 
ð	%ð
 Œ;˜Ñð%ð ŒLð%ð ŒL˜4Ñð%ð ð%ð ð%ð %ð %ñM%ô %ðL%ðP €ð
ðð ô. ð/ð ð0 ð1ð ñ&ô &ðT ØØ $Ø œ=Ø"&Øð6ð 6ð 6Ø
ð6ð ð6ð 
ð	6ð
 Œ;˜Ñð6ð ŒLð6ð ŒL˜4Ñð6ð ð6ð ð6ð 6ð 6ñO&ô &ðN6ðr €ððð ô2 ð3!ð !ð2  ð3!ð !ñ#ô #ðN Ø $Ø œ=Ø"&Øðð ð Ø
ðð 
ðð Œ;˜Ñð	ð
 ŒLðð ŒL˜4Ñðð ðð ðð ð ñI#ô #ðHð& €ððð ô. ð/!ð !ð.  ð/!ð !ñ"ô "ðL Ø $Ø œ=Ø"&Øðð ð Ø
ðð 
ðð Œ;˜Ñð	ð
 ŒLðð ŒL˜4Ñðð ðð ðð ð ñG"ô "ðFð( €ððð ô. ð/!ð !ð.  ð/!ð !ñ!ô !ðJ Ø $Ø œ=Ø"&Øðð ð Ø
ðð 
ðð Œ;˜Ñð	ð
 ŒLðð ŒL˜4Ñðð ðð ðð ð ñE!ô !ðDð2 €ð	ðð ô. ð/!ð !ð.  ð/!ð !ñ#ô #ðN Ø $Ø œ=Ø"&Øð%ð %ð %Ø
ð%ð 
ð%ð Œ;˜Ñð	%ð
 ŒLð%ð ŒL˜4Ñð%ð ð%ð ð%ð %ð %ñI#ô #ðH%ðP €ððð ô0 ð1!ð !ð0  ð1!ð !ñ"ô "ðN Ø $Ø œ=Ø"&Øð7Gð 7Gð 7Gð ð7Gð 
ð	7Gð
 Œ;˜Ñð7Gð ŒLð7Gð ŒL˜4Ñð7Gð ð7Gð ð7Gð 7Gð 7GñG"ô "ðF7Gðt €ððð ô0 ð1!ð !ð0  ð1!ð !ñ"ô "ðL ØØ $Ø œ=Ø"&Øðð ð ð ðð 
ð	ð
 Œ;˜Ñðð ŒLðð ŒL˜4Ñðð ðð ðð ð ñG"ô "ðFð* €ðð!ð !ôB ðC!!ð !!ðB  ðC!!ð !!ñ+ô +ð^ Ø $Ø œ=Ø"&Øðð ð Ø
ðð 
ðð Œ;˜Ñð	ð
 ŒLðð ŒL˜4Ñðð ðð ðð ð ñY+ô +ðXð ð r"   