+
    &jX                        ^ RI HtHt ^ RIHt ^ RIHt ^ RIt^ RIHt ^ RI	H
t
HtHt . RJOt]! R4      t]! ]! R4      ]
R	R
/4      tR R ltR R lt]! RRP$                  ! RK/ ]B 4      RRRRRRRRR]P&                  RRRR/R R ll4       t]! RRP$                  ! RK/ ]B 4      RRRRR]P&                  RRRR/R R  ll4       t]! R!R"P$                  ! RK/ ]B 4      R#RRRRRR]P&                  RRRR/R$ R% ll4       t]! R&R'P$                  ! RK/ ]B 4      R(R)RRRRR]P&                  RRRR/R* R+ ll4       t]! R,R-P$                  ! RK/ ]B 4      RRRRR]P&                  RRRR/R. R/ ll4       t]! R0R1P$                  ! RK/ ]B 4      RRRRR]P&                  RRRR/R2 R3 ll4       t]! R4R5P$                  ! RK/ ]B 4      RRRRR]P&                  RRRR/R6 R7 ll4       t]! R8R9P$                  ! RK/ ]B 4      RRRRR]P&                  RRRR/R: R; ll4       t]! R<R=P$                  ! RK/ ]B 4      RRRRR]P&                  RRRR/R> R? ll4       t]! R@RAP$                  ! RK/ ]B 4      RBRCRRRRR]P&                  RRRR/RD RE ll4       t]! RFRGP$                  ! RK/ ]B 4      RRRRR]P&                  RRRR/RH RI ll4       tR# )L    )CallableIterable)sqrt)TypeVarN)Tensor)factory_common_argsmerge_dictsparse_kwargs_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`.
normalizationzThe 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                T    V ^8  d   QhR\         R\        \        .\        3,          /# )   argsreturn)strr   r   )formats   "t/Users/jameslopez/projects/CWCArchive/cwc-podcast/.venv/lib/python3.14/site-packages/torch/signal/windows/windows.py__annotate__r   ,   s%      s xb1     c                    a  R V 3R llpV# )a  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                0    V ^8  d   QhR\         R\         /# )r   or   )r   )r   s   "r   r   !_add_docstr.<locals>.__annotate__8   s      R B r   c                 4   < R P                  S4      V n        V # ) )join__doc__)r   r   s   &r   	decorator_add_docstr.<locals>.decorator8   s    GGDM	r    )r   r   s   j r   _add_docstrr!   ,   s      r   c          
      t    V ^8  d   QhR\         R\        R\        P                  R\        P                  RR/# )r   function_nameMdtypelayoutr   N)r   inttorchr%   r&   )r   s   "r   r   r   ?   s<     
 


',{{
<ALL
	
r   c                    V^ 8  d   \        V  RV 24      hV\        P                  Jd   \        V  RV 24      hV\        P                  \        P                  39  d   \        V  RV 24      hR# )ag  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.
z, requires non-negative window length, got M=z/ is implemented for strided tensors only, got: z) expects float32 or float64 dtypes, got: N)
ValueErrorr(   stridedfloat32float64)r#   r$   r%   r&   s   &&&&r   _window_function_checksr.   ?   s     	1uoI!M
 	
 U]]"oLVHU
 	
 U]]EMM22oFugN
 	
 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])
    centertau      ?symTr%   r&   devicerequires_gradFc                    V ^8  d   QhR\         R\        R,          R\        R\        R\        P                  R,          R\        P
                  R\        P                  R,          R	\        R
\        /	# )r   r$   r/   Nr0   r2   r%   r&   r3   r4   r   r'   floatboolr(   r%   r&   r3   r   )r   s   "r   r   r      s~     *$ *$
*$ DL*$ 
	*$
 
*$ ;;*$ LL*$ LL4*$ *$ *$r   c          
         Vf   \         P                  ! 4       p\        RWV4       V^ 8:  d   \        RV R24      hV'       d   Ve   \        R4      hV ^ 8X  d   \         P                  ! RWEWgR7      # Vf"   V'       g
   V ^8  d   T MV ^,
          R,          p^V,          p\         P
                  ! V) V,          V) V ^,
          ,           V,          V VVVVR7      p	\         P                  ! \         P                  ! V	4      ) 4      # )	NexponentialzTau must be positive, got: 	 instead.z)Center must be None for symmetric windowsr%   r&   r3   r4          @startendstepsr%   r&   r3   r4   r   )r(   get_default_dtyper.   r*   emptylinspaceexpabs)
r$   r/   r0   r2   r%   r&   r3   r4   constantks
   &$$$$$$$  r   r:   r:   Y   s    n }'')M1V<
ax6se9EFF
v!DEEAv{{V
 	
 ~1q5!a!es:3wHg WA(*#	A 99eii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])
c                    V ^8  d   QhR\         R\        R\        P                  R,          R\        P                  R\        P
                  R,          R\        R\        /# 	r   r$   r2   r%   Nr&   r3   r4   r   r'   r8   r(   r%   r&   r3   r   )r   s   "r   r   r      sf        
  
  ;;	 
 LL  LL4     r   c          
         Vf   \         P                  ! 4       p\        RWV4       V ^ 8X  d   \         P                  ! RW#WER7      # Rp\         P                  V'       g   V ^8  d
   V ^,           MT ,          p\         P
                  ! Wg,          W`^,
          ,           V,          V VVVVR7      p\         P                  ! V4      # )Ncosiner<         ?r>   rB   )r(   rC   r.   rD   pirE   sin	r$   r2   r%   r&   r3   r4   r?   rH   rI   s	   &$$$$$   r   rN   rN      s    d }'')Ha7Av{{V
 	
 ExxA1q51=H!e_(#	A 99Q<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])
stdc                    V ^8  d   QhR\         R\        R\        R\        P                  R,          R\        P
                  R\        P                  R,          R\        R	\        /# )
r   r$   rS   r2   r%   Nr&   r3   r4   r   r6   )r   s   "r   r   r   $  sp     % %
% 
% 
	%
 ;;% LL% LL4% % %r   c          
         Vf   \         P                  ! 4       p\        RWV4       V^ 8:  d   \        RV R24      hV ^ 8X  d   \         P                  ! RW4WVR7      # V'       g
   V ^8  d   T MV ^,
          ) R,          p^V\        ^4      ,          ,          p\         P                  ! Wx,          Wp^,
          ,           V,          V VVVVR7      p	\         P                  ! V	^,          ) 4      # )Ngaussianz*Standard deviation must be positive, got: r;   r<   r=   r>   rB   )r(   rC   r.   r*   rD   r   rE   rF   )
r$   rS   r2   r%   r&   r3   r4   r?   rH   rI   s
   &$$$$$$   r   rV   rV      s    ` }'')J&9
axEcU)TUUAv{{V
 	
 q1ua!a%036EC$q'M"H!e_(#	A 99q!tW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])
betag      (@c                    V ^8  d   QhR\         R\        R\        R\        P                  R,          R\        P
                  R\        P                  R,          R\        R	\        /# )
r   r$   rW   r2   r%   Nr&   r3   r4   r   r6   )r   s   "r   r   r   s  sp     6 6
6 6 
	6
 ;;6 LL6 LL46 6 6r   c          
         Vf   \         P                  ! 4       p\        RWV4       V^ 8  d   \        RV R24      hV ^ 8X  d   \         P                  ! RW4WVR7      # V ^8X  d   \         P
                  ! R	W4WVR7      # \         P                  ! WVR7      pV) pRV,          V'       g   T MV ^,
          ,          p\         P                  ! VWp^,
          V,          ,           4      p	\         P                  ! VV	V VVVVR7      p
\         P                  ! \         P                  ! W,          \         P                  ! V
^4      ,
          4      4      \         P                  ! V4      ,          # )
Nkaiserz beta must be non-negative, got: r;   r<   )r%   r3   r=   r>   rB      )r(   rC   r.   r*   rD   onestensorminimumrE   i0r   pow)r$   rW   r2   r%   r&   r3   r4   r?   rH   r@   rI   s   &$$$$$$    r   rZ   rZ   L  s5   b }'')Ha7ax;D6KLLAv{{V
 	
 	AvzzV
 	
 <<&9DEETzcQq1u5H
--Q(""	C 	#	A 88EJJt{UYYq!_<=>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                    V ^8  d   QhR\         R\        R\        P                  R,          R\        P                  R\        P
                  R,          R\        R\        /# rK   rL   )r   s   "r   r   r     sf      
 
 ;;	
 LL LL4  r   c          	      $    \        V VVVVVR 7      # ))r2   r%   r&   r3   r4   general_hammingr$   r2   r%   r&   r3   r4   s   &$$$$$r   hammingrg     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                    V ^8  d   QhR\         R\        R\        P                  R,          R\        P                  R\        P
                  R,          R\        R\        /# rK   rL   )r   s   "r   r   r     f      
 
 ;;	
 LL LL4  r   c          
      &    \        V R VVVVVR7      # )rO   )alphar2   r%   r&   r3   r4   rd   rf   s   &$$$$$r   hannrl     s'    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                    V ^8  d   QhR\         R\        R\        P                  R,          R\        P                  R\        P
                  R,          R\        R\        /# rK   rL   )r   s   "r   r   r   <  sf      
 
 ;;	
 LL LL4  r   c          
      v    Vf   \         P                  ! 4       p\        RWV4       \        V . ROVVVVVR7      # )Nblackmanar2   r%   r&   r3   r4   )gzG?rO   g{Gz?)r(   rC   r.   general_cosinerf   s   &$$$$$r   ro   ro     sF    V }'')J&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                    V ^8  d   QhR\         R\        R\        P                  R,          R\        P                  R\        P
                  R,          R\        R\        /# rK   rL   )r   s   "r   r   r   y  sf     % %
% 
% ;;	%
 LL% LL4% % %r   c          
         Vf   \         P                  ! 4       p\        RWV4       V ^ 8X  d   \         P                  ! RW#WER7      # V ^8X  d   \         P                  ! RW#WER7      # Rp^V'       g   T MV ^,
          ,          p\         P
                  ! VW`^,
          V,          ,           V VVVVR7      p^\         P                  ! V4      ,
          # )Nbartlettr<   r>   rB   r[   )r(   rC   r.   rD   r]   rE   rG   rR   s	   &$$$$$   r   ru   ru   U  s    Z }'')J&9Av{{V
 	
 	AvzzV
 	
 ESAa!e,HUh&&#	A uyy|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])
c                    V ^8  d   QhR\         R\        R\        P                  R,          R\        P                  R\        P
                  R,          R\        R\        /# )	r   rq   r2   r%   Nr&   r3   r4   r   )r   r8   r(   r%   r&   r3   r   )r   s   "r   r   r     sq     7G 7G 7G 
	7G
 ;;7G LL7G LL47G 7G 7Gr   c          
         Vf   \         P                  ! 4       p\        RWV4       V ^ 8X  d   \         P                  ! RW4WVR7      # V ^8X  d   \         P                  ! R	W4WVR7      # \        V\        4      '       g   \        R4      hV'       g   \        R4      h^\         P                  ,          V'       g   T MV ^,
          ,          p\         P                  ! ^ V ^,
          V,          V VVVVR7      p\         P                  ! \        V4       U	U
u. uF  w  rR
V	,          V
,          NK  	  up
p	VVVR7      p\         P                  ! VP                  ^ ,          VP                  VP                   VP"                  R7      p	VP%                  R
4      \         P&                  ! V	P%                  R
4      V,          4      ,          P)                  ^ 4      # u up
p	i )Nrr   r<   z!Coefficients must be a list/tuplezCoefficients cannot be emptyr>   )r3   r%   r4   )r%   r3   r4   rB   r[   rv   )r(   rC   r.   rD   r]   
isinstancer   	TypeErrorr*   rP   rE   r^   	enumeratearangeshaper%   r3   r4   	unsqueezecossum)r$   rq   r2   r%   r&   r3   r4   rH   rI   iwa_is   &$$$$$$     r   rr   rr     s~   Z }''),a?Av{{V
 	
 	AvzzV
 	
 a"";<<788588|qQ7HUh#	A ,,#,Q<0<41"Q<0#	C 			!iizz''		A MM"		!++b/A*= >>CCAFF 	1s   G
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])
rk   gHzG?c                    V ^8  d   QhR\         R\        R\        P                  R,          R\        P                  R\        P
                  R,          R\        R\        /# )	r   rk   r2   r%   Nr&   r3   r4   r   )r7   r8   r(   r%   r&   r3   r   )r   s   "r   r   r   !  sh        
	
 ;; LL LL4  r   c          
      8    \        V VR V,
          .VVVVVR7      # )r1   rp   rr   )r$   rk   r2   r%   r&   r3   r4   s   &$$$$$$r   re   re     s0    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 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                    V ^8  d   QhR\         R\        R\        P                  R,          R\        P                  R\        P
                  R,          R\        R\        /# rK   rL   )r   s   "r   r   r   b  ri   r   c          
      *    \        V . ROVVVVVR7      # )zD?rp   )r   g;%N?g1|?gC ˅?r   rf   s   &$$$$$r   nuttallr   6  s'    j 	
6# r   )ru   ro   rN   r:   rV   rr   re   rg   rl   rZ   r   r    )collections.abcr   r   mathr   typingr   r(   r   torch._torch_docsr   r	   r
   __all__r   window_common_argsr!   r.   r   r+   r:   rN   rV   rZ   rg   rl   ro   ru   rr   re   r   r    r   r   <module>r      s   .     L L T] 	  7 "&
4 
< 	= %< $=%+X*$  *$ 	*$
 *$ !%*$ !==*$ #'*$  *$Y+X*$Z . F/ 0 1(R    !%	 
 !==  #'    S(R F 2 F3 4 5%L% % 	%
 !%% !==% #'%  %M%L%P 
. F/ 0 1&N6 6 	6
 !%6 !==6 #'6  6O&N6r 2 F3 !2  3!#H  !%	
 !== #'  I#H& . F/ !.  /!"F  !%	
 !== #'  G"F( . F/ !.  /!!D  !%	
 !== #'  E!D2 	. F/ !.  /!#H% % !%	%
 !==% #'%  %I#H%P 0 F1 !0  1!"F7G 	7G
 !%7G !==7G #'7G  7GG"F7Gt 0 F1 !0  1!"F  	
 !% !== #'  G"F* !B FC! !!B  C!!+X  !%	
 !== #'  Y+Xr   