
    Vh;                     j   U d dl Z d dlmZ d dlmZ d dlmZ d dlZd dlZd dl	m
Z
 d dlmZ d dlmZmZmZmZ erd dlZd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdefdZ ddde!dedededede"edf   fdZ# e#d er& e ejH                  jJ                  jL                        ndeee!       e#d"er& e ejH                  jJ                  jN                        ndeee!       e#d#er& e ejH                  jJ                  jP                        ndeee!       e#d$er& e ejH                  jJ                  jR                        ndeee!       e#d%er& e ejH                  jJ                  jT                        ndeee!       e#d&er& e ejH                  jJ                  jV                        nd eed'(       eed'(      e!       e#d)er& e ejH                  jJ                  jX                        nd eed*+       eed*+      e e e jZ                  d,      d-d.      f/       e#d0er& e ejH                  jJ                  j\                        nd eed12       eed12      e!       e#d3er& e ejH                  jJ                  j^                        nd eed4d5g6       eed4d5g6      e!       e#d7er& e ejH                  jJ                  j`                        nd eed48       eed48      e!       e#d9er& e ejH                  jJ                  jb                        ndeee!      gZ2e3e   e4d:<   y);    N)partial)product)Callable)floating_types)
TEST_SCIPY)DecorateInfo
ErrorInputOpInfoSampleInputc           	   /      K   |j                  dd       t        t        d      d      D ]  \  }}t        |g|||||d|  yw)zBase function used to create sample inputs for windows.

    For additional required args you should use *args, as well as **kwargs for
    additional keyword arguments.
    include_conjugated_inputsN   )TF)symdevicedtyperequires_grad)popr   ranger   )op_infor   r   r   argskwargssizer   s           a/home/dcms/DCMS/lib/python3.12/site-packages/torch/testing/_internal/opinfo/definitions/signal.pysample_inputs_windowr      sj      JJ*D1U1X}5 	
	c

 '
 
 	
	
s   AA	c              /      K   t        | |||g|i |E d{    d}|D ]   }t        |d       t        |d       " y7 ,w)zReference inputs function to use for windows which have a common signature, i.e.,
    window size and sym only.

    Implement other special functions for windows that have a specific signature.
    See exponential and gaussian windows for instance.
    N)          @         F)r   Tr   r   )r   r   r   r   r   r   casesr   s           r   reference_inputs_windowr$   /   sh      $048>   &E *$E**$D))*s   AA-Ac              +      K   t        | |||fi |E d {    ddddfddddfddddfd	d
ddfddddfdddiff}|D ]*  \  }}t        |fddi| d |d<   t        |fddi| , y 7 Yw)Nr            ?)centertaur   g      @r   g     E@r      g@r    >   c   r!   r)   
   r   Fr(   Tr"   r   r   r   r   r   r#   r   kws           r   #reference_inputs_exponential_windowr0   A   s      $GVUMTVTTT 
q%&	#&'	4()	3'(	B'(	ubkE  0b$0E0R008$/D/B//0 Us   A1A/AA1c              +      K   t        | |||fi |E d {    dddifdddifdddifddd	ifd
ddifdddiff}|D ]%  \  }}t        |fddi| t        |fddi| ' y 7 Ow)Nr   std皙?r   g333333?r   g @r   g333333@r    g      @r!   r-   r   FTr"   r.   s           r    reference_inputs_gaussian_windowr4   U   s     #GVUMTVTTT 
UCL	eS\	eS\	eS\	ucl	ubkE  0b$0E0R00$/D/B//0 U   A'A%AA'c              +      K   t        | |||fi |E d {    dddifdddifdddifddd	ifd
ddifdddiff}|D ]%  \  }}t        |fddi| t        |fddi| ' y 7 Ow)Nr   beta   r      r      r   #   r    gD@r!   d   r   FTr"   r.   s           r   reference_inputs_kaiser_windowr=   f   s     #GVUMTVTTT 
VQK	fb\	fb\	fb\	vtn	vsmE  0b$0E0R00$/D/B//0 Ur5   c           	   +      K   t        | |||fi |E d {    ddddgifddddgifddg difd	ddgifd
dg difddg diff}|D ]%  \  }}t        |fddi| t        |fddi| ' y 7 Zw)Nr   ar'   r   q=
ףp?HzG?r   )r@   q=
ףp?gףp=
?r   r    )r3   皙?皙?rD   r!   )皙?rE   rE   rE   rE   r   FTr"   r.   s           r   &reference_inputs_general_cosine_windowrF   w   s      $GVUMTVTTT 
S3*	cD$< !	c%&'	cC5\	s*+,	s-./E  0b$0E0R00$/D/B//0 Us   A2A0AA2c              +      K   t        | |||fi |E d {    dddifdddifdddifddd	ifd
ddifdddiff}|D ]%  \  }}t        |fddi| t        |fddi| ' y 7 Ow)Nr   alpharA   r   r'   r   rB   r   rC   r    g?r!   rD   r   FTr"   r.   s           r   'reference_inputs_general_hamming_windowrI      s      $GVUMTVTTT 
WdO	gs^	gt_	gs^	wn	woE  0b$0E0R00$/D/B//0 Ur5   c           	   /     K   t        t        dg|t        j                  |d|t        d       t        t        dg|t        j
                  |t        j                  d|t        d       t        t        dg|t        j                  |d|t        d       t        t        dg|t        j                  |d|t        d	       t        t        dg|t        j                  |d|t        d
       y w)N)r   r   z-requires non-negative window length, got M=-1
error_typeerror_regex   )layoutr   r   z>is implemented for strided tensors only, got: torch.sparse_cooz3expects float32 or float64 dtypes, got: torch.int64z6expects float32 or float64 dtypes, got: torch.bfloat16z5expects float32 or float64 dtypes, got: torch.float16)	r	   r   torchfloat32
ValueError
sparse_coolongbfloat16float16)r   r   r   r   s       r   error_inputs_windowrX      s    
BLLU]]6LVLC  	
	
 ##--	
 	
 T  AHHEJJvHHI  ALLENN6LVLL  AKKEMM&KFKK s   DDc           	   +      K   t        | |fi |E d {    t        t        d
dt        j                  |d|t
        d       t        t        dddt        j                  |      t
        d	       y 7 dw)NrO   rK   )r)   r   r   z&Tau must be positive, got: -1 instead.rL      T)r(   r   r   r   z)Center must be None for symmetric windowsrO   rX   r	   r   rQ   rR   rS   r   r   r   s      r   error_inputs_exponential_windowr^      sv     "7F=f=== L2U]]6LVL<  AaTvN?  >s   A:A8A%A:c           	   +      K   t        | |fddi|E d {    t        t        ddt        j                  |d|t
        d       y 7 4w)Nr2   r'   rK   )r2   r   r   z5Standard deviation must be positive, got: -1 instead.rL   r[   r\   r]   s      r   error_inputs_gaussian_windowr`      sS     "7FFFvFFF L2U]]6LVLK  G   AA
5Ac           	   +      K   t        | |fddi|E d {    t        t        ddt        j                  |d|t
        d       y 7 4w)Nr7   r9   rK   )r7   r   r   z+beta must be non-negative, got: -1 instead.rL   r[   r\   r]   s      r   error_inputs_kaiser_windowrc      sS     "7FFFvFFF MBemmFMfMA  Gra   c           	   +      K   t        | |fdddgi|E d {    t        t        dd t        j                  |d|t
        d       t        t        dg t        j                  |d|t        d       y 7 cw)	Nr?   rA   r@   )r?   r   r   z!Coefficients must be a list/tuplerL   zCoefficients cannot be emptyr[   )rX   r	   r   rQ   rR   	TypeErrorrS   r]   s      r   "error_inputs_general_cosine_windowrf      s     "7FMtTlMfMMM LU]]6LVL7  J5==J6J2  Ns   A=A;A$A=fnc                 V     t         j                  dt        j                  dd fd
}|S )zWrapper for scipy signal window references.

    Discards keyword arguments for window reference functions that don't have a matching signature with
    torch, e.g., gaussian window.
    NF)r   r   rP   r   c                 2     |i |j                  |       S )z:The unused arguments are defined to disregard those values)astype)r   r   rP   r   r   r   rg   s         r   _fnz$reference_signal_window.<locals>._fn  s      4"6"))%00    )numpyfloat64rQ   strided)rg   rk   s   ` r   reference_signal_windowrp     s%     mm}}	1 Jrl    )skipsnamerefsample_inputs_funcreference_inputs_funcerror_inputs_funcrr   .c                   t        | t        r|ndt               |||ddt        t        j
                  dd      t        t        j
                  dd      t        t	        j                  d      dd	      t        t	        j                  d      dd
      t        t	        j                  d      dd      t        t	        j                  d      dd      t        t	        j                  d      dd      t        t	        j                  d      dd      t        t	        j                  d      dd      t        t	        j                  d      dd      g
|	      S )zFHelper function to create OpInfo objects related to different windows.NFTestOperatorSignatures(test_get_torch_func_signature_exhaustiveTestJittest_variant_consistency_jitzSkipped!
TestCommontest_noncontiguous_samplestest_variant_consistency_eagerTestMathBitstest_conj_viewtest_neg_conj_viewtest_neg_viewTestVmapOperatorsOpInfotest_vmap_exhaustivetest_op_has_batch_rule5Buggy on MPS for now (mistakenly promotes to float64)test_numpy_ref_mps)	rs   rt   dtypesru   rv   rw   supports_outsupports_autogradrr   )r
   r   r   r   unittestexpectedFailureskiprs   rt   ru   rv   rw   rr   s         r   make_signal_windows_opinfor     sE    C4-3+ (((: (()5S j)<9U j)0
 z2NDTUj)>;O z2NOTj))&
 j))(
 UV$M,
V W,
6 6rl   zsignal.windows.hamming)rs   rt   ru   rv   rw   zsignal.windows.hannzsignal.windows.bartlettzsignal.windows.blackmanzsignal.windows.cosinezsignal.windows.exponentialg=
ףp=@)r)   zsignal.windows.gaussiangQ?)r2   r   r}   r   r   zsignal.windows.kaiserg      (@)r7   zsignal.windows.general_cosinerA   r@   )r?   zsignal.windows.general_hamming)rH   zsignal.windows.nuttallop_db)5r   	functoolsr   	itertoolsr   typingr   rm   rQ   $torch.testing._internal.common_dtyper   $torch.testing._internal.common_utilsr   #torch.testing._internal.opinfo.corer   r	   r
   r   scipy.signalscipyr   r$   r0   r4   r=   rF   rI   rX   r^   r`   rc   rf   rp   strtupler   signalwindowshamminghannbartlettblackmancosineexponentialgaussianr   kaisergeneral_cosinegeneral_hammingnuttallr   list__annotations__rq   rl   r   <module>r      s         ? ;  
,*$0(0"0"0&0&)X&		$ 8 ')@
@	@ !@ $	@
  @ s"#@H % $ELL$8$8$@$@A/5- "BL#ELL$8$8$=$=>RV/5- & $ELL$8$8$A$AB/5- & $ELL$8$8$A$AB/5- $ $ELL$8$8$?$?@/5- ) $ELL$8$8$D$DE"#7TB%&ItT9 & $ELL$8$8$A$AB"#7TB%&FDQ6UV$
  $ $ELL$8$8$?$?@"#7dC%&D4P4 , $ELL$8$8$G$GH"#7D$<H%2tTl
 =
 - $ELL$8$8$H$HI"#7tD%34
 .
 % $ELL$8$8$@$@A/5-ImtF| mrl   