
    ק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
j        j        j        Zd	ed
edede def
dZ!de
j"        de de
j#        de
j"        fdZ$	 dFd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j+                   e            	 	 	 dGdedee         ded
edef
d#                        Z, eej-                   e            	 	 	 dGdedee         ded
edef
d$                        Z. eej/                   e            	 	 	 dGdedee         ded
edef
d%                        Z0 eej1                   e            	 	 	 dGdedee         ded
edef
d&                        Z2 eej3                   e            	 	 	 dGdedee         ded
edef
d'                        Z4 eej5                   e            	 	 	 dGd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d0Z: eej;                   e            	 	 	 dHded1ee         dee         d
edef
d2                        Z< eej=                   e            	 	 	 dHded1ee         dee         d
edef
d3                        Z> eej?                   e            	 	 	 dHded1ee         dee         d
edef
d4                        Z@ eejA                   e            	 	 	 dHded1ee         dee         d
edef
d5                        ZB G d6 d7e          ZCd8e'ded1ee         dee         deCf
d9ZD eejE                   e            	 	 	 dHded1ee         dee         d
edef
d:                        ZF eejG                   e            	 	 	 dHded1ee         dee         d
edef
d;                        ZH eejI                   e            	 	 	 dIded1ee         dee         d
edef
d=                        ZJ eejK                   e            	 	 	 dIded1ee         dee         d
edef
d>                        ZL eejM                   e            	 	 	 dIded1ee         dee         d
edef
d?                        ZN eejO                   e            	 	 	 dIded1ee         dee         d
edef
d@                        ZP eejQ                   e            	 	 	 dIded1ee         dee         d
edef
dA                        ZR eejS                   e            	 	 	 dIded1ee         dee         d
edef
dB                        ZTdee         d	edee         fdCZU eejV                  dJdedee         defdD            ZW eejX                  dJdedee         defdE            ZYdS )K    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 | r
du pdk    p|odk    }|r| d|z  z  n| S )z3Apply normalization to the un-normalized FFT resultc                      d  S )NzInvalid normalization mode:  )r)   s   K/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/_refs/fft.py<lambda>z_apply_norm.<locals>.<lambda>.   s    /Td/T/T     r'      Nr&   r%   )torch_check_NORM_VALUESmathsqrt)r(   r)   r*   r%   	normalizes    `   r/   _apply_normr9   *   s     
L%'T'T'T'TUUUwA	,///00E$$,"D$*2D %DI%  &/51L !!A5r1   dtyperequire_complexdevicec                 2     j         r S  j        st          j                     t          j        t          j        g}|j        dv }|r|                    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    1Me1M1M 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       " *'))]EM2M(88 ,U]+++	L-')M)M)M)MNNN 91%88Lr1   F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.     wH ?AHEEH"1h///r1   dims.sizesc                 (   t          |          t          |          k    sJ d}| j        }dgt          |          z  dz  }t          t          |                    D ]}||         dk    r|||                  ||         k     r:d}t          |          d||         z  z
  dz
  }||         |||                  z
  ||<   |||                  ||         k    r#|                     ||         d||                   } |rt	          j        | |          n| 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    t99E

""""IgGs7||#a'J3t99 
/ 
/8r>>47eAh&&I*ooDG3a7G"'(WT!W-="=Jw47eAh&&a!U1X..A3<C5 J///!Cr1   	func_nameinputndimc                 |   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_scalarNrW   r2   c                      d  dS NzInvalid number of data points (z) specifiedr.   last_dim_sizes   r/   r0   z_fft_c2r.<locals>.<lambda>       L-LL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BBBE"5:sFFFHDAAAS1AA1E,FM	LLLLL  
 	}!%d=A;MPQ;Q:STTT "
5!!]5d-HHHFvD}gVV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|n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[[ek[[ r1   Frj   Nr2   c                      d  dS rm   r.   dim_sizes   r/   r0   z_fft_r2c.<locals>.<lambda>       VVV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     
LK""[[[[[   &e,,E"5:sFFFHDMqqu{3'7H	LAVVVV   	}!%t44
-4(
;
;
;C
c47
3
3C.33uz#.r1   c                 \    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TTu{TT r1   Frj   Nr2   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     
LTTTTT   "5:sFFFHDMqqu{3'7H	LAVVVV   	}!%t44
-4
9
9
9CsD(G444r1   rX   c           	      p    | 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      sJ     { RuadDAAAAuadD5QQQQr1   c           	      p    | j         j        rt          d| |||d          S t          d| |||dd          S )Nr   Fr   r   r   r   s       r/   r   r      sJ     { Tq#tUCCCCq#tUUSSSSr1   c           	      .    t          d| |||dd          S )Nr   Tr   r   r   s       r/   r   r      s!     FE1c4MM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OOOr1   c                   D    e Zd ZU eedf         ed<   eedf         ed<   dS )_ShapeAndDims.rZ   rT   N__name__
__module____qualname__r	   int__annotations__r.   r1   r/   r   r     s:         c?
S/r1   r   rZ   c                    | j         | j        |pt          |t                    s|f}t	          j        |d          }t          j        t          t          |                    t          |          k    d            |t          |t                    s|f}t          j        |du pt          |          t          |          k    d            t          |          t          j        k    fd           | t          t          z
                      }t          fdt          ||          D                       }nI|,t          t                              }t                    }nt          fd|D                       }|D ]t          j        d	k    fd
           t          ||          S )zTConvert the shape and dim arguments into a canonical form where neither are optionalNFrj   c                      dS )NzFFT dims must be uniquer.   r.   r1   r/   r0   z6_canonicalize_fft_shape_and_dim_args.<locals>.<lambda>!  s    9R r1   c                      dS )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>+  s    S 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(     0n 0 0!0 0 0 r1   c              3   >   K   | ]\  }}|d k    r|n|         V  dS )rX   Nr.   ).0sdinput_sizess      r/   	<genexpr>z7_canonicalize_fft_shape_and_dim_args.<locals>.<genexpr>:  sH       
 
17!QbAAk!n
 
 
 
 
 
r1   c              3   (   K   | ]}|         V  d S Nr.   )r   r   r   s     r/   r   z7_canonicalize_fft_shape_and_dim_args.<locals>.<genexpr>C  s'      ;;Q+a.;;;;;;r1   r   c                      d  dS rm   r.   )rf   s   r/   r0   z6_canonicalize_fft_shape_and_dim_args.<locals>.<lambda>F  s    $Ta$T$T$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     s    
I+K
#x(( 	&C*9cuMMM 	H#h--/1R1R	
 	
 	
 %** 	HE 	4K13s88s5zz1SS	
 	
 	
 Ui'0 0 0 0 0	
 	
 	
 ;U9~#=yIIJJH  
 
 
 
;>uh;O;O
 
 
 
 
		 
y))**+&&		 ;;;;(;;;;;	 V VQUTTTTUUUUyx88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  s     
L	! 	! 	! 	! 	!  
 	%e,,A]1#w777FvDuU||WUUUUr1   r   c                 v    t          | ||          \  }}t          | d          }t          d||||d          S )NTri   r   r   r   rS   r   re   r   rg   r)   rZ   r(   s         r/   r   r   f  sF     8q#FFLUC!%>>>AVQsD$????r1   c                 v    t          | ||          \  }}t          | d          }t          d||||d          S )NTri   r   Fr   r   r   s         r/   r   r   s  sF     8q#FFLUC!%>>>AWaT5AA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    RU[R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     s     
LK""RRRR   6eQDDJE3%eUCCCEeS%00E
-3
6
6
6CsE%LL$OOOOr1   c                 h    t          j         j        j          fd           t	           ||          \  }}t          j        t          |          dk    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    SekSS r1   r   c                      dS )Nz'ihfftn must transform at least one axisr.   r.   r1   r/   r0   zihfftn.<locals>.<lambda>  s    )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*    
LK""SSSS   6eQDDJE3	LUa!R!RSSS%eUCCCEeS%00E
-3rss8d
;
;
;C
3xx1}}#DuQxOOOz#

c
"
"C
-SbS5
9
9
9CsE%LL%PPPPr1   c                   N    e Zd ZU eedf         ed<   eedf         ed<   eed<   dS )_CanonicalizeC2rReturn.rZ   rg   ro   Nr   r.   r1   r/   r   r     sF         c?	sCxr1   r   fnamec                     t          |||          \  }}t          j        t          |          dk     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    E)T)T)T r1   NrX   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#FFLUC	LUa!T!T!T!TUUUyAbERKKU[R1A56b		LLLL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   2   K   | ]}j         |         V  d S r   rZ   )r   r   r   s     r/   r   zirfftn.<locals>.<genexpr>  s)      'B'B	!'B'B'B'B'B'Br1   Fr   )r   rS   rc   rv   rw   r9   r   )re   r   rg   r)   rZ   ro   r   s         @r/   r"   r"     s     !I%C! !E3 &eTBBBEeS%00E
-3m
D
D
DCsD%'B'B'B'Bc'B'B'B"B"BERRRRr1   c           	         t          d| ||          \  }}}t          | d          } t          | ||          } t          |          dk    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BBBEeS%00E>A#hhll%-3ss8T
:
:
:
:PUC
c4uSbSz!2!2D
A
A
AC

c
"
"C
-RSS
G
G
GCsD->>>>r1   rX   c                 H    t           j                            | |||          S N)r   rg   r)   )r3   r   r   re   r   rg   r)   s       r/   r   r     s      9>>%1#D>999r1   c                 H    t           j                            | |||          S r   )r3   r   r   r   s       r/   r   r           9??5A3T?:::r1   c                 H    t           j                            | |||          S r   )r3   r   r   r   s       r/   r   r     r   r1   c                 H    t           j                            | |||          S r   )r3   r   r"   r   s       r/   r!   r!     #     9EQCd;;;r1   c                 H    t           j                            | |||          S r   )r3   r   r   r   s       r/   r   r   #  r   r1   c                 H    t           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  sB    
{E!&MM"""X&& uCyyr1   c                 l     t          |           } fd|D             }t          j         ||          S )Nc                 0    g | ]}j         |         d z  S )rW   r   r   r   re   s     r/   
<listcomp>zfftshift.<locals>.<listcomp>F  s$    ///QU[^q ///r1   r   r3   rollre   rg   rT   shifts   `   r/   r#   r#   C  s?    C''D////$///E:eUD)))r1   c                 l     t          |           } fd|D             }t          j         ||          S )Nc                 6    g | ]}j         |         d z   dz  S )r2   rW   r   r   s     r/   r   zifftshift.<locals>.<listcomp>M  s)    5551ek!nq Q&555r1   r   r   s   `   r/   r$   r$   J  s?    C''D5555555E:eUD)))r1   )F)NrX   N)NNN)Nr   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 X X X X X X X X X X X X X X X X X        # # # # # # 0 0 0 0 0 0 C C C C C C C C C C M M M M M M M M  2 w=>>?555z~66%6586CG66 6 6 6;)-7<|
[   2 050 00(,00 0 0 0DD"38_D5:38_DD D D D4WWW }W 
	W
 W W W W W W6/// }/ 
	/
 / / / / / / /:555 }5 
	5
 5 5 5 5 5 54 %% 		R 	R	R}	R 
	R 		R
 	R 	R 	R  &%	R && 		T 	T	T}	T 
	T 		T
 	T 	T 	T  '&	T && 	N NN}N 
N 	N
 N N N  '&N '' 	A AA}A 
A 	A
 A A A  ('A && 	? ??}? 
? 	?
 ? ? ?  '&? '' 	P PP}P 
P 	P
 P P P  ('P    J   
5959"*9"559<DX<N5959 59 59 59phsm     VVV c?V 
sCx	V
 V V V V V V& && ""	@ @@	@ 
(	@ 	@
 @ @ @  '&@ '' ""	B BB	B 
(	B 	B
 B B B  ('B '' ""	P PP	P 
(	P 	P
 P P P  ('P" (( ""	Q QQ	Q 
(	Q 	Q
 Q Q Q  )(Q4    Z    	 
(		
    8 (( ""	S SS	S 
(	S 	S
 S S S  )(S '' ""	? ??	? 
(	? 	?
 ? ? ?  ('?& && "&	: ::	: 
(	: 	:
 : : :  '&: '' "&	; ;;	; 
(	; 	;
 ; ; ;  ('; '' "&	; ;;	; 
(	; 	;
 ; ; ;  ('; (( "&	< <<	< 
(	< 	<
 < < <  )(< '' "&	; ;;	; 
(	; 	;
 ; ; ;  ('; (( "&	< <<	< 
(	< 	<
 < < <  )(<(8,  DI     )*** *N *(); *~ * * * +** *++* *^ *(8*< * * * * ,+* * *r1   