
    IЦi!F                        S SK r S SKJrJrJrJr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\
R8                  R:                  R<                  rS	\S
\S\S\ S\4
S jr!S\
RD                  S\ S\
RF                  S\
RD                  4S jr$ SCS\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          SDS\S\\   S\S
\S\4
S! jj5       5       r,\" \RZ                  5      \" 5          SDS\S\\   S\S
\S\4
S" jj5       5       r.\" \R^                  5      \" 5          SDS\S\\   S\S
\S\4
S# jj5       5       r0\" \Rb                  5      \" 5          SDS\S\\   S\S
\S\4
S$ jj5       5       r2\" \Rf                  5      \" 5          SDS\S\\   S\S
\S\4
S% jj5       5       r4\" \Rj                  5      \" 5          SDS\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          SES\S/\\   S\\   S
\S\4
S0 jj5       5       r<\" \Rz                  5      \" 5          SES\S/\\   S\\   S
\S\4
S1 jj5       5       r>\" \R~                  5      \" 5          SES\S/\\   S\\   S
\S\4
S2 jj5       5       r@\" \R                  5      \" 5          SES\S/\\   S\\   S
\S\4
S3 jj5       5       rB " S4 S5\5      rCS6\'S\S/\\   S\\   S\C4
S7 jrD\" \R                  5      \" 5          SES\S/\\   S\\   S
\S\4
S8 jj5       5       rF\" \R                  5      \" 5          SES\S/\\   S\\   S
\S\4
S9 jj5       5       rH\" \R                  5      \" 5          SFS\S/\\   S\\   S
\S\4
S: jj5       5       rJ\" \R                  5      \" 5          SFS\S/\\   S\\   S
\S\4
S; jj5       5       rL\" \R                  5      \" 5          SFS\S/\\   S\\   S
\S\4
S< jj5       5       rN\" \R                  5      \" 5          SFS\S/\\   S\\   S
\S\4
S= jj5       5       rP\" \R                  5      \" 5          SFS\S/\\   S\\   S
\S\4
S> jj5       5       rR\" \R                  5      \" 5          SFS\S/\\   S\\   S
\S\4
S? jj5       5       rTS\\   S	\S\\   4S@ jrU\" \R                  5      SGS\S\\   S\4SA jj5       rW\" \R                  5      SGS\S\\   S\4SB jj5       rYg)H    N)IterableListLiteral
NamedTupleOptionalSequenceTuple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   N/var/www/html/ai-image-ml/venv/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_normr:   *   s     
LL%'TUwA		,//00E$$,"D$*2D %DI%  &/1L !5A5r2   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.   r;   s   r/   r0   #_promote_type_fft.<locals>.<lambda>I   s    3EeW1Mr2   )
is_complexis_floating_pointr4   get_default_dtypefloat32float64typeappendfloat16r5   utilscorresponding_complex_dtype)r;   r<   r=   allowed_typesmaybe_support_halfs   `    r/   _promote_type_fftrP   9   s      ""'')]]EMM2M(88U]]+	LL-')MN11%8Lr2   tc                 \    U R                   n[        X!U R                  5      n[        X5      $ )zEHelper to promote a tensor to a dtype supported by the FFT primitives)r;   rP   r=   r   )rQ   r<   cur_typenew_types       r/   _maybe_promote_tensor_fftrU   Q   s(     wwH AHHEH"1//r2   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      Tr3   )lenshaperangenarrowr4   constant_pad_nd)r(   rV   rW   	must_copyx_sizes
pad_amountipad_idxs           r/   _resize_fft_inputre   Z   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!Cr2   	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_scalarrY   r3   c                     > ST  S3$ NzInvalid number of data points (z) specifiedr.   last_dim_sizes   r/   r0   _fft_c2r.<locals>.<lambda>       1-Lr2   )rV   rW   ri   rq   r)   r*   r%   )rU   rL   canonicalize_dimndimr\   r4   r5   re   conjprimsfft_c2rr:   )	rf   rg   rh   ri   r)   r%   rV   outputrq   s	           @r/   _fft_c2rr|   t   s     &eTBE""5::sFHDAAS1AA1E,FM	LLL
 	}!%=A;MPQ;Q:ST

5!]]5-HFv}gVVr2   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 rB   rf   rg   s   r/   r0   _fft_r2c.<locals>.<lambda>   s    9+Mekk][r2   Frl   r3   c                     > ST  S3$ ro   r.   dim_sizes   r/   r0   r          !@
+Vr2   ri   r}   )r4   r5   r;   rD   rU   rL   rv   rw   r\   re   ry   fft_r2cr:   rx   )
rf   rg   rh   ri   r)   r%   r}   rV   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#.r2   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 rB   r   s   r/   r0   _fft_c2c.<locals>.<lambda>   s    9+Fu{{mTr2   Frl   r3   c                     > ST  S3$ ro   r.   r   s   r/   r0   r      r   r2   ri   r%   )r4   r5   r;   rD   rL   rv   rw   r\   re   ry   fft_c2cr:   )	rf   rg   rh   ri   r)   r%   rV   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4r2   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}   r;   rD   r   r   rg   rh   ri   r)   s       r/   r   r      s5     {{uDAAuD5QQr2   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Sr2   c           
          [        SXX#SSS9$ )Nr   Tr   r   r   s       r/   r   r      s     FEcMMr2   c           	          [        SXX#SS9$ )Nr    Fr   r|   r   s       r/   r    r       s     GUs%@@r2   c           	          [        SXX#SS9$ )Nr   Tr   r   r   s       r/   r   r      s     FEc>>r2   c           
          [        SXX#SSS9$ )Nr   FTr   r   r   s       r/   r   r     s     GUs%$OOr2   c                   >    \ rS rSr% \\S4   \S'   \\S4   \S'   Srg)_ShapeAndDimsi  .r\   rV   r.   N__name__
__module____qualname____firstlineno__r	   int__annotations____static_attributes__r.   r2   r/   r   r     s    c?
S/r2   r   r\   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 optionalNFrl   c                      g)NzFFT dims must be uniquer.   r.   r2   r/   r0   6_canonicalize_fft_shape_and_dim_args.<locals>.<lambda>!  s    9Rr2   c                      g)Nz=When given, dim and shape arguments must have the same lengthr.   r.   r2   r/   r0   r   +  s    Sr2   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/   r0   r   1  s    on%5 6!{,0r2   c              3   B   >#    U  H  u  pUS :w  a  UOTU   v   M     g7f)rZ   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   C  s     ;(Q+a.(s   r   c                     > ST  S3$ ro   r.   )rh   s   r/   r0   r   F  s    &EaS$Tr2   )r\   rV   )rw   r\   
isinstancer   rL   canonicalize_dimsr4   r5   r[   settupler]   zipr   )	rg   r\   ri   ret_dims	ret_shaper   r   rh   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8r2   xsc                 $    SnU  H  nX-  nM	     U$ )zCompute product of a listr3   r.   )r   prodr(   s      r/   _prodr   K  s    D	 Kr2   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   rB   )r   rg   s   r/   r0   _fftn_c2c.<locals>.<lambda>^  s    =/ ";;-!r2   r   ru   )	r4   r5   r;   rD   re   ry   r   r:   r   )r   rg   r\   ri   r)   r%   r(   r{   s   ``      r/   	_fftn_c2cr   S  sT     
LL	!
 	%,A]]1w7FvuU|WUUr2   r   c           	      J    [        XU5      u  pB[        U SS9n[        SXTX#SS9$ )NTrk   r   r   r   rU   r   rg   r   ri   r)   r\   r(   s         r/   r   r   f  s/     8#FLU!%>AVQs$??r2   c           	      J    [        XU5      u  pB[        U SS9n[        SXTX#SS9$ )NTrk   r   Fr   r   r   s         r/   r   r   s  s/     8#FLU!%>AWa5AAr2   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 rB   rg   s   r/   r0   rfftn.<locals>.<lambda>  s    DU[[MRr2   Frk   Tr   ru   )r4   r5   r;   rD   r   rU   re   ry   r   r:   r   )rg   r   ri   r)   r\   outs   `     r/   r   r     sq     
LLKK"""R 6eQDJE%eUCEeS0E
--3
6CsE%L$OOr2   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 rB   r   s   r/   r0   ihfftn.<locals>.<lambda>  s    Eekk]Sr2   r   c                      g)Nz'ihfftn must transform at least one axisr.   r.   r2   r/   r0   r     s    )Rr2   Frk   rZ   Tr   r3   ru   r   )r4   r5   r;   rD   r   r[   rU   re   ry   r   r:   rx   conj_physicalr   r   )rg   r   ri   r)   r\   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Pr2   c                   H    \ rS rSr% \\S4   \S'   \\S4   \S'   \\S'   Srg)_CanonicalizeC2rReturni  .r\   ri   rq   r.   Nr   r.   r2   r/   r   r     s$    c?	sCxr2   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/   r0   :_canonicalize_fft_c2r_shape_and_dim_args.<locals>.<lambda>  s    E72S)Tr2   rZ   rY   r3   c                     > ST  S3$ ro   r.   rp   s   r/   r0   r     rs   r2   )r\   ri   rq   )r   r4   r5   r[   r\   listr   r   )r   rg   r   ri   r\   
shape_listrq   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 r2   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"   Trk   rt   c              3   B   >#    U  H  nTR                   U   v   M     g 7fr   )r\   )r   r   r   s     r/   r   irfftn.<locals>.<genexpr>  s     'Bc		!cr   Fr   )r   rU   re   ry   rz   r:   r   )rg   r   ri   r)   r\   rq   r   s         @r/   r"   r"     sb     !I%C!E &eTBEe%0E
--m
DCsD%'Bc'B"BERRr2   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   Trk   r3   rZ   r   r   rt   )
r   rU   re   r[   ry   r   r:   r   r   rz   )rg   r   ri   r)   r\   rq   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->>r2   c                 >    [         R                  R                  XX#S9$ N)r   ri   r)   )r4   r   r   rg   r   ri   r)   s       r/   r   r     s     99>>%#>99r2   c                 >    [         R                  R                  XX#S9$ r   )r4   r   r   r   s       r/   r   r          99??53?::r2   c                 >    [         R                  R                  XX#S9$ r   )r4   r   r   r   s       r/   r   r     r   r2   c                 >    [         R                  R                  XX#S9$ r   )r4   r   r"   r   s       r/   r!   r!          99EC;;r2   c                 >    [         R                  R                  XX#S9$ r   )r4   r   r   r   s       r/   r   r   #  r   r2   c                 >    [         R                  R                  XX#S9$ r   )r4   r   r   r   s       r/   r   r   .  r   r2   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]   rw   r   r   )ri   r(   s     r/   _default_alldimsr   9  s8    
{E!&&M""X&&uCyr2   c                     [        X5      nU Vs/ s H  o0R                  U   S-  PM     nn[        R                  " XU5      $ s  snf )NrY   r   r\   r4   rollrg   ri   rV   r   shifts        r/   r#   r#   C  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 )Nr3   rY   r   r   s        r/   r$   r$   J  sF    C'D0451kk!nq Q&E5::eD)) 6s   A)F)NrZ   N)NNN)N)rZ   Nr   )Zr7   typingr   r   r   r   r   r   r	   r
   r4   torch._prims_primsry   torch._prims_common_prims_commonrL   torch._decompr   r   r   r   torch._prims_common.wrappersr   r   __all__NormTyper6   _opsopsatenr   boolr:   r;   r=   rP   rU   re   strr|   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   fft_fftshiftr#   fft_ifftshiftr$   r.   r2   r/   <module>r     s/    X X X   # 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*< * * ,*r2   