
    Ǆg!F                     (   d dl Z d dlmZmZmZmZmZmZmZm	Z	 d dl
Z
d dlmZ d dlmZ d dlmZ d dlmZmZmZ d dlmZmZ g dZe	ded   f   Zh dZe
j8                  j:                  j<                  Zd	ed
edede def
dZ!de
jD                  de de
jF                  de
jD                  fdZ$	 dCdede defdZ%d	edeedf   deedf   defdZ&de'dedee   ded
ede defdZ(de'dedee   ded
ede de defdZ)de'dedee   ded
ede defd Z* eejV                         e       	 	 	 dDdedee   ded
edef
d!              Z, eejZ                         e       	 	 	 dDdedee   ded
edef
d"              Z. eej^                         e       	 	 	 dDdedee   ded
edef
d#              Z0 eejb                         e       	 	 	 dDdedee   ded
edef
d$              Z2 eejf                         e       	 	 	 dDdedee   ded
edef
d%              Z4 eejj                         e       	 	 	 dDdedee   ded
edef
d&              Z6 G d' d(e      Z7ded)ee   dee   de7fd*Z8d+ee   defd,Z9d-e'ded)eedf   deedf   d
ede defd.Z: eejv                         e       	 	 	 dEded/ee   dee   d
edef
d0              Z< eejz                         e       	 	 	 dEded/ee   dee   d
edef
d1              Z> eej~                         e       	 	 	 dEded/ee   dee   d
edef
d2              Z@ eej                         e       	 	 	 dEded/ee   dee   d
edef
d3              ZB G d4 d5e      ZCd6e'ded/ee   dee   deCf
d7ZD eej                         e       	 	 	 dEded/ee   dee   d
edef
d8              ZF eej                         e       	 	 	 dEded/ee   dee   d
edef
d9              ZH eej                         e       	 	 	 dFded/ee   dee   d
edef
d:              ZJ eej                         e       	 	 	 dFded/ee   dee   d
edef
d;              ZL eej                         e       	 	 	 dFded/ee   dee   d
edef
d<              ZN eej                         e       	 	 	 dFded/ee   dee   d
edef
d=              ZP eej                         e       	 	 	 dFded/ee   dee   d
edef
d>              ZR eej                         e       	 	 	 dFded/ee   dee   d
edef
d?              ZTdee   d	edee   fd@ZU eej                        dGdedee   defdA       ZW eej                        dGdedee   defdB       ZYy)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                     t        j                  t        v fd       dk(  r| dt        j                  |      z  z  S | xr du xs dk(  xs	 |xr dk(  }|r| d|z  z  S | S )z3Apply normalization to the un-normalized FFT resultc                      d  S )NzInvalid normalization mode:  )r)   s   W/home/mcse/projects/flask_80/flask-venv/lib/python3.12/site-packages/torch/_refs/fft.py<lambda>z_apply_norm.<locals>.<lambda>.   s    1MdV/T     r'      Nr&   r%   )torch_check_NORM_VALUESmathsqrt)r(   r)   r*   r%   	normalizes    `   r/   _apply_normr9   *   s     
LL%'TUwA		,//00E$$,"D$*2D %DI%  &/1L !5A5r1   dtyperequire_complexdevicec                 f     j                   r S  j                  st        j                          t        j                  t        j
                  g}|j                  dv }|r|j                  t        j                         t        j                   |v  fd       |rt        j                           S )z@Helper to promote a dtype to one supported by the FFT primitives)cudametac                      d  S )NzUnsupported dtype r.   r:   s   r/   r0   z#_promote_type_fft.<locals>.<lambda>I   s    3EeW1M r1   )
is_complexis_floating_pointr3   get_default_dtypefloat32float64typeappendfloat16r4   utilscorresponding_complex_dtype)r:   r;   r<   allowed_typesmaybe_support_halfs   `    r/   _promote_type_fftrN   9   s      ""'')]]EMM2M(88U]]+	LL-')MN11%8Lr1   tc                 `    | j                   }t        ||| j                        }t        | |      S )zEHelper to promote a tensor to a dtype supported by the FFT primitives)r:   rN   r<   r   )rO   r;   cur_typenew_types       r/   _maybe_promote_tensor_fftrS   Q   s,     wwH ?AHHEH"1h//r1   dims.sizesc                    t        |      t        |      k(  sJ d}| j                  }dgt        |      z  dz  }t        t        |            D ]k  }||   dk(  r|||      ||   k  r*d}t        |      d||   z  z
  dz
  }||   |||      z
  ||<   |||      ||   kD  sS| j                  ||   d||         } m |rt	        j
                  | |      S | S )z
    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      Tr2   )lenshaperangenarrowr3   constant_pad_nd)r(   rT   rU   	must_copyx_sizes
pad_amountipad_idxs           r/   _resize_fft_inputrc   Z   s     t9E
"""IggGs7|#a'J3t9 
/8r>47eAh&I*oDG3a7G"'(WT!W-="=Jw47eAh&a!U1X.A
/ 4=5  J/C!Cr1   	func_nameinputndimc                 x   t        |d      }t        j                  |j                  |d      f}||nd|j                  |   dz
  z  t        j                  dk\  fd       |t        ||dz  dz   f      }|rt        j                  |      }t        j                  ||	      }t        |||
      S )zBCommon code for performing any complex to real FFT (irfft or hfft)Tr;   Fwrap_scalarrW   r2   c                      d  dS NzInvalid number of data points (z) specifiedr.   last_dim_sizes   r/   r0   z_fft_c2r.<locals>.<lambda>       1-L r1   )rT   rU   rg   ro   r)   r*   r%   )rS   rJ   canonicalize_dimndimrZ   r3   r4   rc   conjprimsfft_c2rr9   )	rd   re   rf   rg   r)   r%   rT   outputro   s	           @r/   _fft_c2rry   t   s     &eTBE""5::sFHDAAS1AA1E,FM	LLL
 	}!%d=A;MPQ;Q:ST

5!]]5d-HFvD}gVVr1   onesidedc                    	 t        j                  j                  j                    fd       t	              t        j                  j                  |d      f}||nj                  |   	t        j                  	dk\  	fd       |t        ||f      t        j                  ||      }t        ||	|      }|r|S t        j                  |      S )zBCommon code for performing any real to complex FFT (rfft or ihfft)c                  &      dj                    S )Nz0 expects a floating point input tensor, but got rA   rd   re   s   r/   r0   z_fft_r2c.<locals>.<lambda>   s    9+Mekk][ r1   Frj   r2   c                      d  dS rm   r.   dim_sizes   r/   r0   z_fft_r2c.<locals>.<lambda>       !@
+V r1   rg   rz   )r3   r4   r:   rB   rS   rJ   rs   rt   rZ   rc   rv   fft_r2cr9   ru   )
rd   re   rf   rg   r)   r%   rz   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
c47
3C3.uzz#.r1   c                 t    t        j                  j                  j                   fd       t	        j
                  j                  |d      f}||nj                  |   t        j                  dk\  fd       |t        ||f      t        j                  ||      }t        |||      S )zCCommon code for performing any complex to complex FFT (fft or ifft)c                  &      dj                    S Nz) expects a complex input tensor, but got rA   r}   s   r/   r0   z_fft_c2c.<locals>.<lambda>   s    9+Fu{{mT r1   Frj   r2   c                      d  dS rm   r.   r   s   r/   r0   z_fft_c2c.<locals>.<lambda>   r   r1   rg   r%   )r3   r4   r:   rB   rJ   rs   rt   rZ   rc   rv   fft_c2cr9   )	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sD(G44r1   c           	      t    | j                   j                  rt        d| |||d      S t        d| |||dd      S )Nr   Tr%   Fr%   rz   r:   rB   r   r   re   rf   rg   r)   s       r/   r   r      s=     {{uadDAAuadD5QQr1   c           	      t    | j                   j                  rt        d| |||d      S t        d| |||dd      S )Nr   Fr   r   r   r   s       r/   r   r      s=     {{q#tUCCq#tUUSSr1   c           	      &    t        d| |||dd      S )Nr   Tr   r   r   s       r/   r   r      s     FE1c4MMr1   c                 $    t        d| |||d      S )Nr    Fr   ry   r   s       r/   r    r       s     GUAsD%@@r1   c                 $    t        d| |||d      S )Nr   Tr   r   r   s       r/   r   r      s     FE1c4>>r1   c           	      &    t        d| |||dd      S )Nr   FTr   r   r   s       r/   r   r     s     GUAsD%$OOr1   c                   6    e Zd ZU eedf   ed<   eedf   ed<   y)_ShapeAndDims.rZ   rT   N__name__
__module____qualname__r	   int__annotations__r.   r1   r/   r   r     s    c?
S/r1   r   rZ   c                    | j                   | j                  |`t        |t              s|f}t	        j
                  |d      }t        j                  t        t        |            t        |      k(  d        |t        |t              s|f}t        j                  |du xs t        |      t        |      k(  d        t        |      t        j                  k  fd       |t        t        z
              }t        fdt        |      D              }n6| t        t                    }t              }nt        fdD              }|D ]  t        j                  d	kD  fd
         t        ||      S )zTConvert the shape and dim arguments into a canonical form where neither are optionalNFrj   c                       y)NzFFT dims must be uniquer.   r.   r1   r/   r0   z6_canonicalize_fft_shape_and_dim_args.<locals>.<lambda>!      r1   c                       y)Nz=When given, dim and shape arguments must have the same lengthr.   r.   r1   r/   r0   z6_canonicalize_fft_shape_and_dim_args.<locals>.<lambda>+  r   r1   c                      d d  dS )NzGot shape with z" values but input tensor only has z dimensions.r.   )	input_dimtransform_ndims   r/   r0   z6_canonicalize_fft_shape_and_dim_args.<locals>.<lambda>1  s    on%5 6!{,0 r1   c              3   <   K   | ]  \  }}|d k7  r|n|     yw)rX   Nr.   ).0sdinput_sizess      r/   	<genexpr>z7_canonicalize_fft_shape_and_dim_args.<locals>.<genexpr>:  s)      
17!QbAk!n,
   c              3   (   K   | ]	  }|     y wNr.   )r   r   r   s     r/   r   z7_canonicalize_fft_shape_and_dim_args.<locals>.<genexpr>C  s     ;Q+a.;s   r   c                      d  dS rm   r.   )rf   s   r/   r0   z6_canonicalize_fft_shape_and_dim_args.<locals>.<lambda>F  s    &EaS$T r1   )rZ   rT   )rt   rZ   
isinstancer   rJ   canonicalize_dimsr3   r4   rY   settupler[   zipr   )	re   rZ   rg   ret_dims	ret_shaper   r   rf   r   s	        @@@@r/   $_canonicalize_fft_shape_and_dim_argsr     sp    

I++K
#x(&C**9cuM 	H#h-/1R	
 %*HE 	4K13s8s5z1S	
 Ui'0	
 ;U9~#=yIJH  
;>uh;O
 
	 
y)*+&	 ;(;;	 VQUTUV yx88r1   xsc                 "    d}| D ]  }||z  }	 |S )zCompute product of a listr2   r.   )r   prodr(   s      r/   _prodr   K  s$    D 	Kr1   function_namec                      t        j                  j                  j                   fd       t	        ||      }t        j                  |||      }t        ||t        |      |      S )zECommon code for n-dimensional complex to complex FFTs (fftn or ifftn)c                  &      dj                    S r   rA   )r   re   s   r/   r0   z_fftn_c2c.<locals>.<lambda>^  s    =/ ";;-! r1   r   rr   )	r3   r4   r:   rB   rc   rv   r   r9   r   )r   re   rZ   rg   r)   r%   r(   rx   s   ``      r/   	_fftn_c2cr   S  sZ     
LL	!
 	%e,A]]1#w7FvDuU|WUUr1   r   c                 ^    t        | ||      \  }}t        | d      }t        d||||d      S )NTri   r   r   r   rS   r   re   r   rg   r)   rZ   r(   s         r/   r   r   f  s7     8q#FLUC!%>AVQsD$??r1   c                 ^    t        | ||      \  }}t        | d      }t        d||||d      S )NTri   r   Fr   r   r   s         r/   r   r   s  s7     8q#FLUC!%>AWaT5AAr1   c                     t        j                   j                  j                    fd       t	         ||      \  }}t         d       t         ||       t        j                   |d      }t        ||t        |      d      S )Nc                  "    d j                    S )Nz2rfftn expects a real-valued input tensor, but got rA   re   s   r/   r0   zrfftn.<locals>.<lambda>  s    DU[[MR r1   Fri   Tr   rr   )r3   r4   r:   rB   r   rS   rc   rv   r   r9   r   )re   r   rg   r)   rZ   outs   `     r/   r   r     sy     
LLKK"""R 6eQDJE3%eUCEeS%0E
--3
6CsE%L$OOr1   c                 *    t        j                   j                  j                    fd       t	         ||      \  }}t        j                  t        |      dkD  d        t         d       t         ||       t        j                   |dd  d      }t        |      d	k(  r't        |||d   d
      }t        j                  |      S t        j                  |      }t        j                  ||d d d      }t        ||t        |      d
      S )Nc                  "    d j                    S )Nz3ihfftn expects a real-valued input tensor, but got rA   r   s   r/   r0   zihfftn.<locals>.<lambda>  s    Eekk]S r1   r   c                       y)Nz'ihfftn must transform at least one axisr.   r.   r1   r/   r0   zihfftn.<locals>.<lambda>  r   r1   Fri   rX   Tr   r2   rr   r   )r3   r4   r:   rB   r   rY   rS   rc   rv   r   r9   ru   conj_physicalr   r   )re   r   rg   r)   rZ   tmps   `     r/   r   r     s     
LLKK"""S 6eQDJE3	LLUa!RS%eUCEeS%0E
--3rs8d
;C
3x1}#DuQxOzz#


c
"C
--Sb5
9CsE%L%PPr1   c                   @    e Zd ZU eedf   ed<   eedf   ed<   eed<   y)_CanonicalizeC2rReturn.rZ   rg   ro   Nr   r.   r1   r/   r   r     s$    c?	sCxr1   r   fnamec                 R    t        |||      \  }}t        j                  t        |      dkD   fd       ||d   dk(  rd|j                  |d      dz
  z  n|d   t        j                  dk\  fd       t        |      }dz  dz   |d<   t        t        |      |      S )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                        dS )Nz! must transform at least one axisr.   )r   s   r/   r0   z:_canonicalize_fft_c2r_shape_and_dim_args.<locals>.<lambda>  s    E72S)T r1   rX   rW   r2   c                      d  dS rm   r.   rn   s   r/   r0   z:_canonicalize_fft_c2r_shape_and_dim_args.<locals>.<lambda>  rp   r1   )rZ   rg   ro   )r   r3   r4   rY   rZ   listr   r   )r   re   r   rg   rZ   
shape_listro   s   `     @r/   (_canonicalize_fft_c2r_shape_and_dim_argsr     s     8q#FLUC	LLUa!TUyAbERKU[[R1A56b		LLL
 eJ"a'!+JrN!JS r1   c                     t        d| ||      \  }}}t        | d      } t        | ||      } t        j                  | ||      t        |t        fd|D              d      S )Nr"   Tri   rq   c              3   <   K   | ]  }j                   |     y wr   )rZ   )r   r   r   s     r/   r   zirfftn.<locals>.<genexpr>  s     'B		!'Br   Fr   )r   rS   rc   rv   rw   r9   r   )re   r   rg   r)   rZ   ro   r   s         @r/   r"   r"     sj     !I%C!E3 &eTBEeS%0E
--3m
DCsD%'Bc'B"BERRr1   c           	      d   t        d| ||      \  }}}t        | d      } t        | ||      } t        |      dkD  rt	        j
                  | |d d d      n| }t        ||t        |d d       d      }t	        j                  |      }t	        j                  ||dd  |      }t        |||d      S )	Nr   Tri   r2   rX   r   r   rq   )
r   rS   rc   rY   rv   r   r9   r   r   rw   )re   r   rg   r)   rZ   ro   r   r   s           r/   r   r     s     !I3!E3 &eTBEeS%0E>A#hl%--3s8T
:PUC
c4uSbz!2D
AC


c
"C
--RS
GCsD->>r1   c                 H    t         j                  j                  | |||      S N)r   rg   r)   )r3   r   r   re   r   rg   r)   s       r/   r   r     s     99>>%1#D>99r1   c                 H    t         j                  j                  | |||      S r   )r3   r   r   r   s       r/   r   r          99??5A3T?::r1   c                 H    t         j                  j                  | |||      S r   )r3   r   r   r   s       r/   r   r     r   r1   c                 H    t         j                  j                  | |||      S r   )r3   r   r"   r   s       r/   r!   r!     "     99EQCd;;r1   c                 H    t         j                  j                  | |||      S r   )r3   r   r   r   s       r/   r   r   #  r   r1   c                 H    t         j                  j                  | |||      S r   )r3   r   r   r   s       r/   r   r   .  r   r1   c                 ~    | t        t        |j                              S t        | t              s| gS t        |       S )zIConvert Optional[DimsType] to a simple list, defaulting to all dimensions)r   r[   rt   r   r   )rg   r(   s     r/   _default_alldimsr   9  s5    
{E!&&M""X&uCyr1   c                     t        ||       }|D cg c]  }| j                  |   dz   }}t        j                  | ||      S c c}w )NrW   r   rZ   r3   rollre   rg   rT   r   shifts        r/   r#   r#   C  sF    C'D*./QU[[^q /E/::eUD)) 0s   Ac                     t        ||       }|D cg c]  }| j                  |   dz   dz   }}t        j                  | ||      S c c}w )Nr2   rW   r   r   s        r/   r$   r$   J  sK    C'D0451ekk!nq Q&5E5::eUD)) 6s   A)F)NrX   N)NNN)N)rX   Nr   )Zr6   typingr   r   r   r   r   r   r	   r
   r3   torch._prims_primsrv   torch._prims_common_prims_commonrJ   torch._decompr   r   r   r   torch._prims_common.wrappersr   r   __all__NormTyper5   _opsopsatenr   boolr9   r:   r<   rN   rS   rc   strry   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.   r1   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*< * * ,*r1   