
    3j3F                        S SK r S SKJrJr  S SK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   -  r1 S	kr\R2                  R4                  R6                  rS
\S\S\S\S\4
S jrS\R>                  S\S\R@                  S\R>                  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\S\4S jr&S\%S\S\S-  S\S\S\S\S\4S  jr'S\%S\S\S-  S\S\S\S\4S! jr(\" \RR                  5      \" 5          SES\S\S-  S\S\S\4
S" jj5       5       r*\" \RV                  5      \" 5          SES\S\S-  S\S\S\4
S# jj5       5       r,\" \RZ                  5      \" 5          SES\S\S-  S\S\S\4
S$ jj5       5       r.\" \R^                  5      \" 5          SES\S\S-  S\S\S\4
S% jj5       5       r0\" \Rb                  5      \" 5          SES\S\S-  S\S\S\4
S& jj5       5       r2\" \Rf                  5      \" 5          SES\S\S-  S\S\S\4
S' jj5       5       r4 " S( S)\5      r5S\S*\S-  S\S-  S\54S+ jr6S,\\   S\4S- jr7S.\%S\S*\#\S4   S\#\S4   S\S\S\4S/ jr8\" \Rr                  5      \" 5          SFS\S0\S-  S\S-  S\S\4
S1 jj5       5       r:\" \Rv                  5      \" 5          SFS\S0\S-  S\S-  S\S\4
S2 jj5       5       r<\" \Rz                  5      \" 5          SFS\S0\S-  S\S-  S\S\4
S3 jj5       5       r>\" \R~                  5      \" 5          SFS\S0\S-  S\S-  S\S\4
S4 jj5       5       r@ " S5 S6\5      rAS7\%S\S0\S-  S\S-  S\A4
S8 jrB\" \R                  5      \" 5          SFS\S0\S-  S\S-  S\S\4
S9 jj5       5       rD\" \R                  5      \" 5          SFS\S0\S-  S\S-  S\S\4
S: jj5       5       rF\" \R                  5      \" 5          SGS\S0\S-  S\S-  S\S\4
S; jj5       5       rH\" \R                  5      \" 5          SGS\S0\S-  S\S-  S\S\4
S< jj5       5       rJ\" \R                  5      \" 5          SGS\S0\S-  S\S-  S\S\4
S= jj5       5       rL\" \R                  5      \" 5          SGS\S0\S-  S\S-  S\S\4
S> jj5       5       rN\" \R                  5      \" 5          SGS\S0\S-  S\S-  S\S\4
S? jj5       5       rP\" \R                  5      \" 5          SGS\S0\S-  S\S-  S\S\4
S@ jj5       5       rRS\S-  S
\S\S\   4SA jrT\" \R                  5      SHS\S\S-  S\4SB jj5       rV\" \R                  5      SHS\S\S-  S\4SC jj5       rXg)I    N)IterableSequence)Literal
NamedTuple)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   I/home/wildlama/miniconda3/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_normr6   +   s     
LL%'TUwA		,//00E$$,"D$*2D %DI%  &/1L !5A5r.   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metaxpuc                     > ST  3$ )NzUnsupported dtype r*   r7   s   r+   r,   #_promote_type_fft.<locals>.<lambda>J   s    3EeW1Mr.   )
is_complexis_floating_pointr0   get_default_dtypefloat32float64typeappendfloat16r1   utilscorresponding_complex_dtype)r7   r8   r9   allowed_typesmaybe_support_halfs   `    r+   _promote_type_fftrM   :   s      ""'')]]EMM2M(??U]]+	LL-')MN11%8Lr.   tc                 \    U R                   n[        X!U R                  5      n[        X5      $ )zEHelper to promote a tensor to a dtype supported by the FFT primitives)r7   rM   r9   r   )rN   r8   cur_typenew_types       r+   _maybe_promote_tensor_fftrR   R   s(     wwH AHHEH"1//r.   dims.sizesc                    [        U5      [        U5      :w  a#  [        S[        U5       S[        U5       35      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.
z.dims and sizes must have the same length, got z and Fr      Tr/   )lenAssertionErrorshaperangenarrowr0   constant_pad_nd)r$   rS   rT   	must_copyx_sizes
pad_amountipad_idxs           r+   _resize_fft_inputrc   [   s    4yCJ<SYKuSQVZLY
 	
 IggGs7|#a'J3t98r>7eh&I*oDG3a7G"'(W!W-="=J7eh&!UX.A  4=5  /C!Cr.   	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r8   Fwrap_scalarrV   r/   c                     > ST  S3$ NzInvalid number of data points (z) specifiedr*   last_dim_sizes   r+   r,   _fft_c2r.<locals>.<lambda>       1-Lr.   )rS   rT   rg   ro   r%   r&   r!   )rR   rI   canonicalize_dimndimrZ   r0   r1   rc   conjprimsfft_c2rr6   )	rd   re   rf   rg   r%   r!   rS   outputro   s	           @r+   _fft_c2rrz   y   s     &eTBE""5::sFHDAAS1AA1E,FM	LLL
 	}!%=A;MPQ;Q:ST

5!]]5-HFv}gVVr.   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][r.   Frj   r/   c                     > ST  S3$ rm   r*   dim_sizes   r+   r,   r          !@
+Vr.   rg   r{   )r0   r1   r7   rA   rR   rI   rt   ru   rZ   rc   rw   fft_r2cr6   rv   )
rd   re   rf   rg   r%   r!   r{   rS   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#.r.   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Tr.   Frj   r/   c                     > ST  S3$ rm   r*   r   s   r+   r,   r      r   r.   rg   r!   )r0   r1   r7   rA   rI   rt   ru   rZ   rc   rw   fft_c2cr6   )	rd   re   rf   rg   r%   r!   rS   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4r.   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{   r7   rA   r   r   re   rf   rg   r%   s       r+   r   r      s5     {{uDAAuD5QQr.   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Sr.   c           
          [        SXX#SSS9$ )Nr   Tr   r   r   s       r+   r   r      s     FEcMMr.   c           	          [        SXX#SS9$ )Nr   Fr   rz   r   s       r+   r   r      s     GUs%@@r.   c           	          [        SXX#SS9$ )Nr   Tr   r   r   s       r+   r   r      s     FEc>>r.   c           
          [        SXX#SSS9$ )Nr   FTr   r   r   s       r+   r   r     s     GUs%$OOr.   c                   >    \ rS rSr% \\S4   \S'   \\S4   \S'   Srg)_ShapeAndDimsi  .rZ   rS   r*   N__name__
__module____qualname____firstlineno__tupleint__annotations____static_attributes__r*   r.   r+   r   r     s    c?
S/r.   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*   r.   r+   r,   6_canonicalize_fft_shape_and_dim_args.<locals>.<lambda>&  s    9Rr.   c                      g)Nz=When given, dim and shape arguments must have the same lengthr*   r*   r.   r+   r,   r   0  s    Sr.   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   6  s    on%5 6!{,0r.   c              3   B   >#    U  H  u  pUS :w  a  UOTU   v   M     g7f)rW   Nr*   ).0sdinput_sizess      r+   	<genexpr>7_canonicalize_fft_shape_and_dim_args.<locals>.<genexpr>?  s)      
. bAk!n,.   c              3   .   >#    U  H
  nTU   v   M     g 7fNr*   )r   r   r   s     r+   r   r   I  s     ;(Q+a.(s   r   c                     > ST  S3$ rm   r*   )rf   s   r+   r,   r   L  s    &EaS$Tr.   )rZ   rS   )ru   rZ   
isinstancer   rI   canonicalize_dimsr0   r1   rX   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  
eX.
 
	 
y)*+&	 ;(;;	QUTU  y88r.   xsc                 $    SnU  H  nX-  nM	     U$ )zCompute product of a listr/   r*   )r   prodr$   s      r+   _prodr   Q  s    D	 Kr.   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>d  s    =/ ";;-!r.   r   rs   )	r0   r1   r7   rA   rc   rw   r   r6   r   )r   re   rZ   rg   r%   r!   r$   ry   s   ``      r+   	_fftn_c2cr   Y  sT     
LL	!
 	%,A]]1w7FvuU|WUUr.   r   c           	      J    [        XU5      u  pB[        U SS9n[        SXTX#SS9$ )NTri   r   r   r   rR   r   re   r   rg   r%   rZ   r$   s         r+   r   r   l  s/     8#FLU!%>AVQs$??r.   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   y  s/     8#FLU!%>AWa5AAr.   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Rr.   Fri   Tr   rs   )r0   r1   r7   rA   r   rR   rc   rw   r   r6   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Or.   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]Sr.   r   c                      g)Nz'ihfftn must transform at least one axisr*   r*   r.   r+   r,   r     s    )Rr.   Fri   rW   Tr   r/   rs   r   )r0   r1   r7   rA   r   rX   rR   rc   rw   r   r6   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Pr.   c                   H    \ rS rSr% \\S4   \S'   \\S4   \S'   \\S'   Srg)_CanonicalizeC2rReturni  .rZ   rg   ro   r*   Nr   r*   r.   r+   r   r     s$    c?	sCxr.   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)Tr.   rW   rV   r/   c                     > ST  S3$ rm   r*   rn   s   r+   r,   r     rq   r.   )rZ   rg   ro   )r   r0   r1   rX   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 r.   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   rR   rc   rw   rx   r6   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Rr.   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   r/   rW   r   r   rr   )
r   rR   rc   rX   rw   r   r6   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->>r.   c                 >    [         R                  R                  XX#S9$ N)r   rg   r%   )r0   r   r   re   r   rg   r%   s       r+   r   r     s     99>>%#>99r.   c                 >    [         R                  R                  XX#S9$ r   )r0   r   r   r   s       r+   r   r          99??53?::r.   c                 >    [         R                  R                  XX#S9$ r   )r0   r   r   r   s       r+   r   r     r   r.   c                 >    [         R                  R                  XX#S9$ r   )r0   r   r   r   s       r+   r   r          99EC;;r.   c                 >    [         R                  R                  XX#S9$ r   )r0   r   r   r   s       r+   r   r   )  r   r.   c                 >    [         R                  R                  XX#S9$ r   )r0   r   r   r   s       r+   r   r   4  r   r.   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r.   c                     [        X5      nU Vs/ s H  o0R                  U   S-  PM     nn[        R                  " XU5      $ s  snf )NrV   r   rZ   r0   rollre   rg   rS   r   shifts        r+   r   r   I  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 )Nr/   rV   r   r   s        r+   r    r    P  sF    C'D0451kk!nq Q&E5::eD)) 6s   A)F)NrW   N)NNN)N)rW   Nr   )Yr3   collections.abcr   r   typingr   r   r0   torch._prims_primsrw   torch._prims_common_prims_commonrI   torch._decompr   r   r	   r
   torch._prims_common.wrappersr   r   __all__NormTyper2   _opsopsatenr   boolr6   r7   r9   rM   rR   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*   r.   r+   <module>r     s    . &   # 0 C C M2 '899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<WWW TzW 
	W
 W W W6/// Tz/ 
	/
 / / / /:555 Tz5 
	5
 5 5 54 % 		R	R
Tz	R 
	R 		R
 	R  &	R & 		T	T
Tz	T 
	T 		T
 	T  '	T & 	NN
TzN 
N 	N
 N  'N ' 	AA
TzA 
A 	A
 A  (A & 	??
Tz? 
? 	?
 ?  '? ' 	PP
TzP 
P 	P
 P  (PJ 
6969"+d"2699AD6969rhsm  VVV c?V 
sCx	V
 V V V& & 	@@4@ 
D@ 	@
 @  '@ ' 	BB4B 
DB 	B
 B  (B ' 	PP4P 
DP 	P
 P  (P" ( 	QQ4Q 
DQ 	Q
 Q  )Q4Z  4 
D	
 8 ( 	SS4S 
DS 	S
 S  )S ' 	??4? 
D? 	?
 ?  (?& & #	::4: 
D: 	:
 :  ': ' #	;;4; 
D; 	;
 ;  (; ' #	;;4; 
D; 	;
 ;  (; ( #	<<4< 
D< 	<
 <  )< ' #	;;4; 
D; 	;
 ;  (; ( #	<<4< 
D< 	<
 <  )<(T/ n c  ))**N *D *N * +* **+*^ *(T/ *^ * ,*r.   