
    [Th/F                        S SK r S SKJrJr  S SKJrJrJrJr  S SK	r	S SK
Jr  S SKJr  S SKJr  S SKJrJrJr  S SKJrJr  / SQr\S\S   4   r1 S	kr\	R6                  R8                  R:                  rS
\S\S\S\S\4
S jr S\	RB                  S\S\	RD                  S\	RB                  4S jr# SDS\S\S\4S jjr$S
\S\%\S4   S\%\S4   S\4S jr&S\'S\S\\   S\S\S\S\4S jr(S\'S\S\\   S\S\S\S\S\4S  jr)S\'S\S\\   S\S\S\S\4S! jr*\" \RV                  5      \" 5          SES\S\\   S\S\S\4
S" jj5       5       r,\" \RZ                  5      \" 5          SES\S\\   S\S\S\4
S# jj5       5       r.\" \R^                  5      \" 5          SES\S\\   S\S\S\4
S$ jj5       5       r0\" \Rb                  5      \" 5          SES\S\\   S\S\S\4
S% jj5       5       r2\" \Rf                  5      \" 5          SES\S\\   S\S\S\4
S& jj5       5       r4\" \Rj                  5      \" 5          SES\S\\   S\S\S\4
S' jj5       5       r6 " S( S)\5      r7S\S*\\   S\\   S\74S+ jr8S,\\   S\4S- jr9S.\'S\S*\%\S4   S\%\S4   S\S\S\4S/ jr:\" \Rv                  5      \" 5          SFS\S0\\   S\\   S\S\4
S1 jj5       5       r<\" \Rz                  5      \" 5          SFS\S0\\   S\\   S\S\4
S2 jj5       5       r>\" \R~                  5      \" 5          SFS\S0\\   S\\   S\S\4
S3 jj5       5       r@\" \R                  5      \" 5          SFS\S0\\   S\\   S\S\4
S4 jj5       5       rB " S5 S6\5      rCS7\'S\S0\\   S\\   S\C4
S8 jrD\" \R                  5      \" 5          SFS\S0\\   S\\   S\S\4
S9 jj5       5       rF\" \R                  5      \" 5          SFS\S0\\   S\\   S\S\4
S: jj5       5       rH\" \R                  5      \" 5          SGS\S0\\   S\\   S\S\4
S; jj5       5       rJ\" \R                  5      \" 5          SGS\S0\\   S\\   S\S\4
S< jj5       5       rL\" \R                  5      \" 5          SGS\S0\\   S\\   S\S\4
S= jj5       5       rN\" \R                  5      \" 5          SGS\S0\\   S\\   S\S\4
S> jj5       5       rP\" \R                  5      \" 5          SGS\S0\\   S\\   S\S\4
S? jj5       5       rR\" \R                  5      \" 5          SGS\S0\\   S\\   S\S\4
S@ jj5       5       rTS\\   S
\S\U\   4SA jrV\" \R                  5      SHS\S\\   S\4SB jj5       rX\" \R                  5      SHS\S\\   S\4SC jj5       rZg)I    N)IterableSequence)Literal
NamedTupleOptionalUnion)register_decomposition)DimsType	ShapeTypeTensorLikeType)_maybe_convert_to_dtypeout_wrapper)fftfft2fftnhffthfft2hfftnrfftrfft2rfftnifftifft2ifftnihfftihfft2ihfftnirfftirfft2irfftnfftshift	ifftshift)forwardbackwardortho>   Nr%   r#   r$   xnormsignal_numelr#   returnc                   ^ [         R                  " T[        ;   U4S j5        TS:X  a  U S[        R                  " U5      -  -  $ U(       + =(       a    TSL =(       d    TS:H  =(       d    U=(       a    TS:H  nU(       a  U SU-  -  $ U $ )z3Apply normalization to the un-normalized FFT resultc                     > ST  3$ )NzInvalid normalization mode:  )r'   s   G/var/www/auris/envauris/lib/python3.13/site-packages/torch/_refs/fft.py<lambda>_apply_norm.<locals>.<lambda>/   s    1MdV/T    r%      Nr$   r#   )torch_check_NORM_VALUESmathsqrt)r&   r'   r(   r#   	normalizes    `   r-   _apply_normr8   +   s     
LL%'TUwA		,//00E$$,"D$*2D %DI%  &/1L !5A5r0   dtyperequire_complexdevicec                   ^  T R                   (       a  T $ T R                  (       d  [        R                  " 5       m [        R                  [        R
                  /nUR                  S;   nU(       a  UR                  [        R                  5        [        R                  " T U;   U 4S j5        U(       a  [        R                  " T 5      m T $ )z@Helper to promote a dtype to one supported by the FFT primitives)cudametac                     > ST  3$ )NzUnsupported dtype r,   r9   s   r-   r.   #_promote_type_fft.<locals>.<lambda>J   s    3EeW1Mr0   )
is_complexis_floating_pointr2   get_default_dtypefloat32float64typeappendfloat16r3   utilscorresponding_complex_dtype)r9   r:   r;   allowed_typesmaybe_support_halfs   `    r-   _promote_type_fftrN   :   s      ""'')]]EMM2M(88U]]+	LL-')MN11%8Lr0   tc                 \    U R                   n[        X!U R                  5      n[        X5      $ )zEHelper to promote a tensor to a dtype supported by the FFT primitives)r9   rN   r;   r   )rO   r:   cur_typenew_types       r-   _maybe_promote_tensor_fftrS   R   s(     wwH AHHEH"1//r0   dims.sizesc                    [        U5      [        U5      :X  d   eSnU R                  nS/[        U5      -  S-  n[        [        U5      5       Hf  nX&   S:X  a  M  XAU      X&   :  a&  Sn[        U5      SX   -  -
  S-
  nX&   XAU      -
  XW'   XAU      X&   :  d  MO  U R                  X   SX&   5      n Mh     U(       a  [        R
                  " X5      $ U $ )zv
Fixes the shape of x such that x.size(dims[i]) == sizes[i],
either by zero-padding, or by slicing x starting from 0.
Fr      Tr1   )lenshaperangenarrowr2   constant_pad_nd)r&   rT   rU   	must_copyx_sizes
pad_amountipad_idxs           r-   _resize_fft_inputrc   [   s     t9E
"""IggGs7|#a'J3t98r>7eh&I*oDG3a7G"'(W!W-="=J7eh&!UX.A  4=5  /C!Cr0   	func_nameinputndimc                 l  ^ [        USS9n[        R                  " UR                  USS94nUb  UOSUR                  U   S-
  -  m[
        R                  " TS:  U4S j5        Ub  [        XTS-  S-   4S9nU(       a  [
        R                  " U5      n[        R                  " XTS	9n[        XtTUS
9$ )zBCommon code for performing any complex to real FFT (irfft or hfft)Tr:   Fwrap_scalarrW   r1   c                     > ST  S3$ NzInvalid number of data points (z) specifiedr,   last_dim_sizes   r-   r.   _fft_c2r.<locals>.<lambda>       1-Lr0   )rT   rU   rg   ro   r'   r(   r#   )rS   rJ   canonicalize_dimndimrZ   r2   r3   rc   conjprimsfft_c2rr8   )	rd   re   rf   rg   r'   r#   rT   outputro   s	           @r-   _fft_c2rrz   u   s     &eTBE""5::sFHDAAS1AA1E,FM	LLL
 	}!%=A;MPQ;Q:ST

5!]]5-HFv}gVVr0   onesidedc                   ^ ^^	 [         R                  " TR                  R                  (       + U U4S j5        [	        T5      m[
        R                  " TR                  USS94nUb  UOTR                  U   m	[         R                  " T	S:  U	4S j5        Ub  [        TXr45      m[        R                  " TXvS9n[        XT	U5      nU(       a  U$ [         R                  " U5      $ )zBCommon code for performing any real to complex FFT (rfft or ihfft)c                  &   > T  STR                    3$ )Nz0 expects a floating point input tensor, but got r@   rd   re   s   r-   r.   _fft_r2c.<locals>.<lambda>   s    9+Mekk][r0   Frj   r1   c                     > ST  S3$ rm   r,   dim_sizes   r-   r.   r          !@
+Vr0   rg   r{   )r2   r3   r9   rB   rS   rJ   rt   ru   rZ   rc   rw   fft_r2cr8   rv   )
rd   re   rf   rg   r'   r#   r{   rT   retr   s
   ``       @r-   _fft_r2cr      s     
LLKK"""[ &e,E""5::sFHDMqu{{3'7H	LLAV 	}!%t4
--4
;C
c7
3C3.uzz#.r0   c                 r  ^ ^^ [         R                  " TR                  R                  U U4S j5        [        R
                  " TR                  USS94nUb  UOTR                  U   m[         R                  " TS:  U4S j5        Ub  [        TXb45      m[        R                  " TXeS9n[        XtTU5      $ )zCCommon code for performing any complex to complex FFT (fft or ifft)c                  &   > T  STR                    3$ Nz) expects a complex input tensor, but got r@   r~   s   r-   r.   _fft_c2c.<locals>.<lambda>   s    9+Fu{{mTr0   Frj   r1   c                     > ST  S3$ rm   r,   r   s   r-   r.   r      r   r0   rg   r#   )r2   r3   r9   rB   rJ   rt   ru   rZ   rc   rw   fft_c2cr8   )	rd   re   rf   rg   r'   r#   rT   r   r   s	   ``      @r-   _fft_c2cr      s     
LLT ""5::sFHDMqu{{3'7H	LLAV 	}!%t4
--4
9Cs(G44r0   c           
      j    U R                   R                  (       a  [        SXX#SS9$ [        SXX#SSS9$ )Nr   Tr#   Fr#   r{   r9   rB   r   r   re   rf   rg   r'   s       r-   r   r      s5     {{uDAAuD5QQr0   c           
      j    U R                   R                  (       a  [        SXX#SS9$ [        SXX#SSS9$ )Nr   Fr   r   r   r   s       r-   r   r      s5     {{#UCC#UUSSr0   c           
          [        SXX#SSS9$ )Nr   Tr   r   r   s       r-   r   r      s     FEcMMr0   c           	          [        SXX#SS9$ )Nr   Fr   rz   r   s       r-   r   r      s     GUs%@@r0   c           	          [        SXX#SS9$ )Nr   Tr   r   r   s       r-   r   r      s     FEc>>r0   c           
          [        SXX#SSS9$ )Nr   FTr   r   r   s       r-   r   r     s     GUs%$OOr0   c                   >    \ rS rSr% \\S4   \S'   \\S4   \S'   Srg)_ShapeAndDimsi  .rZ   rT   r,   N__name__
__module____qualname____firstlineno__tupleint__annotations____static_attributes__r,   r0   r-   r   r     s    c?
S/r0   r   rZ   c                 H  ^^^^ U R                   mU R                  mUbd  [        U[        5      (       d  U4n[        R
                  " TUSS9n[        R                  " [        [        U5      5      [        U5      :H  S 5        Ub  [        U[        5      (       d  U4n[        R                  " USL =(       d    [        U5      [        U5      :H  S 5        [        U5      m[        R                  " TT:*  UU4S j5        Uc  [        [        TT-
  T5      5      n[        U4S j[        UW5       5       5      nO8Uc   [        [        T5      5      n[        T5      nO[        U4S jW 5       5      nU H!  m[        R                  " TS	:  U4S
 j5        M#     [        XCS9$ )zTConvert the shape and dim arguments into a canonical form where neither are optionalNFrj   c                      g)NzFFT dims must be uniquer,   r,   r0   r-   r.   6_canonicalize_fft_shape_and_dim_args.<locals>.<lambda>"  s    9Rr0   c                      g)Nz=When given, dim and shape arguments must have the same lengthr,   r,   r0   r-   r.   r   ,  s    Sr0   c                     > ST ST  S3$ )NzGot shape with z" values but input tensor only has z dimensions.r,   )	input_dimtransform_ndims   r-   r.   r   2  s    on%5 6!{,0r0   c              3   B   >#    U  H  u  pUS :w  a  UOTU   v   M     g7f)rX   Nr,   ).0sdinput_sizess      r-   	<genexpr>7_canonicalize_fft_shape_and_dim_args.<locals>.<genexpr>;  s&      
;O!bAk!n,;O   c              3   .   >#    U  H
  nTU   v   M     g 7fNr,   )r   r   r   s     r-   r   r   D  s     ;(Q+a.(s   r   c                     > ST  S3$ rm   r,   )rf   s   r-   r.   r   G  s    &EaS$Tr0   )rZ   rT   )ru   rZ   
isinstancer   rJ   canonicalize_dimsr2   r3   rY   setr   r[   zipr   )	re   rZ   rg   ret_dims	ret_shaper   r   rf   r   s	        @@@@r-   $_canonicalize_fft_shape_and_dim_argsr     sm    

I++K
#x((&C**9cuM 	H#h-/1R	
 %**HE 	4K13s8s5z1S	
 Ui'0	
 ;U9~#=yIJH  
;>uh;O
 
	 
y)*+&	 ;(;;	QUTU  y88r0   xsc                 $    SnU  H  nX-  nM	     U$ )zCompute product of a listr1   r,   )r   prodr&   s      r-   _prodr   L  s    D	 Kr0   function_namec                    ^ ^ [         R                  " TR                  R                  U U4S j5        [	        TX25      n[
        R                  " XcUS9n[        Xt[        U5      US9$ )zECommon code for n-dimensional complex to complex FFTs (fftn or ifftn)c                  &   > T  STR                    3$ r   r@   )r   re   s   r-   r.   _fftn_c2c.<locals>.<lambda>_  s    =/ ";;-!r0   r   rs   )	r2   r3   r9   rB   rc   rw   r   r8   r   )r   re   rZ   rg   r'   r#   r&   ry   s   ``      r-   	_fftn_c2cr   T  sT     
LL	!
 	%,A]]1w7FvuU|WUUr0   r   c           	      J    [        XU5      u  pB[        U SS9n[        SXTX#SS9$ )NTri   r   r   r   rS   r   re   r   rg   r'   rZ   r&   s         r-   r   r   g  s/     8#FLU!%>AVQs$??r0   c           	      J    [        XU5      u  pB[        U SS9n[        SXTX#SS9$ )NTri   r   Fr   r   r   s         r-   r   r   t  s/     8#FLU!%>AWa5AAr0   c                   ^  [         R                  " T R                  R                  (       + U 4S j5        [	        T X5      u  pB[        T SS9m [        T X$5      m [        R                  " T USS9n[        XS[        U5      SS9$ )Nc                  "   > ST R                    3$ )Nz2rfftn expects a real-valued input tensor, but got r@   re   s   r-   r.   rfftn.<locals>.<lambda>  s    DU[[MRr0   Fri   Tr   rs   )r2   r3   r9   rB   r   rS   rc   rw   r   r8   r   )re   r   rg   r'   rZ   outs   `     r-   r   r     sq     
LLKK"""R 6eQDJE%eUCEeS0E
--3
6CsE%L$OOr0   c                   ^  [         R                  " T R                  R                  (       + U 4S j5        [	        T X5      u  pB[         R                  " [        U5      S:  S 5        [        T SS9m [        T X$5      m [        R                  " T USS  SS9n[        U5      S	:X  a$  [        XSUS   SS
9n[        R                  " U5      $ [        R                  " U5      n[        R                  " XRS S SS9n[        XS[        U5      SS
9$ )Nc                  "   > ST R                    3$ )Nz3ihfftn expects a real-valued input tensor, but got r@   r   s   r-   r.   ihfftn.<locals>.<lambda>  s    Eekk]Sr0   r   c                      g)Nz'ihfftn must transform at least one axisr,   r,   r0   r-   r.   r     s    )Rr0   Fri   rX   Tr   r1   rs   r   )r2   r3   r9   rB   r   rY   rS   rc   rw   r   r8   rv   conj_physicalr   r   )re   r   rg   r'   rZ   tmps   `     r-   r   r     s     
LLKK"""S 6eQDJE	LLUa!RS%eUCEeS0E
--3rs8d
;C
3x1}#uQxOzz#


c
"C
--Sb5
9CsE%L%PPr0   c                   H    \ rS rSr% \\S4   \S'   \\S4   \S'   \\S'   Srg)_CanonicalizeC2rReturni  .rZ   rg   ro   r,   Nr   r,   r0   r-   r   r     s$    c?	sCxr0   r   fnamec                 T  ^ ^ [        XU5      u  pC[        R                  " [        U5      S:  U 4S j5        Ub	  US   S:X  a  SUR                  US      S-
  -  mOUS   m[        R                  " TS:  U4S j5        [        U5      nTS-  S-   US'   [        [        U5      UTS9$ )zCanonicalize shape and dim arguments for n-dimensional c2r transforms,
as well as calculating the last_dim_size which is shape[dim[-1]] for the outputr   c                     > T  S3$ )Nz! must transform at least one axisr,   )r   s   r-   r.   :_canonicalize_fft_c2r_shape_and_dim_args.<locals>.<lambda>  s    E72S)Tr0   rX   rW   r1   c                     > ST  S3$ rm   r,   rn   s   r-   r.   r     rq   r0   )rZ   rg   ro   )r   r2   r3   rY   rZ   listr   r   )r   re   r   rg   rZ   
shape_listro   s   `     @r-   (_canonicalize_fft_c2r_shape_and_dim_argsr     s     8#FLU	LLUa!TUyAbERKU[[R1A56b		LLL
 eJ"a'!+JrN!JS r0   c                    ^ [        SXU5      u  pBn[        U SS9n [        XU5      n [        R                  " XUS9m[        TU[        U4S jU 5       5      SS9$ )Nr    Tri   rr   c              3   B   >#    U  H  nTR                   U   v   M     g 7fr   )rZ   )r   r   r   s     r-   r   irfftn.<locals>.<genexpr>  s     'Bc		!cr   Fr   )r   rS   rc   rw   rx   r8   r   )re   r   rg   r'   rZ   ro   r   s         @r-   r    r      sb     !I%C!E &eTBEe%0E
--m
DCsD%'Bc'B"BERRr0   c           	      @   [        SXU5      u  pBn[        U SS9n [        XU5      n [        U5      S:  a  [        R
                  " XS S SS9OU n[        Xc[        US S 5      SS9n[        R                  " U5      n[        R                  " XbSS  US9n[        XsUSS9$ )	Nr   Tri   r1   rX   r   r   rr   )
r   rS   rc   rY   rw   r   r8   r   r   rx   )re   r   rg   r'   rZ   ro   r   r   s           r-   r   r     s     !I3!E &eTBEe%0E>A#hl%--s8T
:PUC
cuSbz!2D
AC


c
"C
--RS
GCs->>r0   c                 >    [         R                  R                  XX#S9$ N)r   rg   r'   )r2   r   r   re   r   rg   r'   s       r-   r   r     s     99>>%#>99r0   c                 >    [         R                  R                  XX#S9$ r   )r2   r   r   r   s       r-   r   r          99??53?::r0   c                 >    [         R                  R                  XX#S9$ r   )r2   r   r   r   s       r-   r   r     r   r0   c                 >    [         R                  R                  XX#S9$ r   )r2   r   r    r   s       r-   r   r          99EC;;r0   c                 >    [         R                  R                  XX#S9$ r   )r2   r   r   r   s       r-   r   r   $  r   r0   c                 >    [         R                  R                  XX#S9$ r   )r2   r   r   r   s       r-   r   r   /  r   r0   c                     U c  [        [        UR                  5      5      $ [        U [        5      (       d  U /$ [        U 5      $ )zIConvert Optional[DimsType] to a simple list, defaulting to all dimensions)r   r[   ru   r   r   )rg   r&   s     r-   _default_alldimsr   :  s8    
{E!&&M""X&&uCyr0   c                     [        X5      nU Vs/ s H  o0R                  U   S-  PM     nn[        R                  " XU5      $ s  snf )NrW   r   rZ   r2   rollre   rg   rT   r   shifts        r-   r!   r!   D  sA    C'D*./$Q[[^q $E/::eD)) 0s   Ac                     [        X5      nU Vs/ s H  o0R                  U   S-   S-  PM     nn[        R                  " XU5      $ s  snf )Nr1   rW   r   r   s        r-   r"   r"   K  sF    C'D0451kk!nq Q&E5::eD)) 6s   A)F)NrX   N)NNN)N)rX   Nr   )[r5   collections.abcr   r   typingr   r   r   r   r2   torch._prims_primsrw   torch._prims_common_prims_commonrJ   torch._decompr	   r
   r   r   torch._prims_common.wrappersr   r   __all__NormTyper4   _opsopsatenr   boolr8   r9   r;   rN   rS   r   rc   strrz   r   r   fft_fftr   fft_ifftr   fft_rfftr   	fft_irfftr   fft_hfftr   	fft_ihfftr   r   r   r   r   fft_fftnr   	fft_ifftnr   	fft_rfftnr   
fft_ihfftnr   r   r   
fft_irfftnr    	fft_hfftnr   fft_fft2r   	fft_ifft2r   	fft_rfft2r   
fft_irfft2r   	fft_hfft2r   
fft_ihfft2r   r   r   fft_fftshiftr!   fft_ifftshiftr"   r,   r0   r-   <module>r     s/    . 7 7   # 0 C C M2 w=>>?5zz~~66%6586CG66;;)-7<||
[[2 0500(,00DD"38_D5:38_DD4WWW }W 
	W
 W W W6/// }/ 
	/
 / / / /:555 }5 
	5
 5 5 54 % 		R	R}	R 
	R 		R
 	R  &	R & 		T	T}	T 
	T 		T
 	T  '	T & 	NN}N 
N 	N
 N  'N ' 	AA}A 
A 	A
 A  (A & 	??}? 
? 	?
 ?  '? ' 	PP}P 
P 	P
 P  (PJ 
5959"*9"559<DX<N5959phsm  VVV c?V 
sCx	V
 V V V& & ""	@@	@ 
(	@ 	@
 @  '@ ' ""	BB	B 
(	B 	B
 B  (B ' ""	PP	P 
(	P 	P
 P  (P" ( ""	QQ	Q 
(	Q 	Q
 Q  )Q4Z  	 
(		
 8 ( ""	SS	S 
(	S 	S
 S  )S ' ""	??	? 
(	? 	?
 ?  (?& & "&	::	: 
(	: 	:
 :  ': ' "&	;;	; 
(	; 	;
 ;  (; ' "&	;;	; 
(	; 	;
 ;  (; ( "&	<<	< 
(	< 	<
 <  )< ' "&	;;	; 
(	; 	;
 ;  (; ( "&	<<	< 
(	< 	<
 <  )<(8,  DI  ))**N *(); *~ * +* **+*^ *(8*< * * ,*r0   