L i;F( ddlZddlmZmZddlmZmZmZmZddl Z ddl m Z ddl mZddlmZddl mZmZmZddlmZmZgdZededfZhd Ze j6j8j:Zd ed ed ed edef dZ de jBdede jDde jBfdZ# dDdededefdZ$d ede%edfde%edfdefdZ&de'dedeeded ed edefdZ(de'dedeeded ed ededefd Z)de'dedeeded ed edefd!Z*eejVe dEdedeeded edef d"Z,eejZe dEdedeeded edef d#Z.eej^e dEdedeeded edef d$Z0eejbe dEdedeeded edef d%Z2eejfe dEdedeeded edef d&Z4eejje dEdedeeded edef d'Z6Gd(d)eZ7ded*eedeede7fd+Z8d,eedefd-Z9d.e'ded*e%edfde%edfd ed edefd/Z:eejve dFded0eedeed edef d1Z<eejze dFded0eedeed edef d2Z>eej~e dFded0eedeed edef d3Z@eeje dFded0eedeed edef d4ZBGd5d6eZCd7e'ded0eedeedeCf d8ZDeeje dFded0eedeed edef d9ZFeeje dFded0eedeed edef d:ZHeeje dGded0eedeed edef d;ZJeeje dGded0eedeed edef d<ZLeeje dGded0eedeed edef d=ZNeeje dGded0eedeed edef d>ZPeeje dGded0eedeed edef d?ZReeje dGded0eedeed edef d@ZTdeed edeUefdAZVeejdHdedeedefdBZXeejdHdedeedefdCZZy)IN)IterableSequence)Literal NamedTupleOptionalUnion)register_decomposition)DimsType ShapeTypeTensorLikeType)_maybe_convert_to_dtype out_wrapper)fftfft2fftnhffthfft2hfftnrfftrfft2rfftnifftifft2ifftnihfftihfft2ihfftnirfftirfft2irfftnfftshift ifftshift)forwardbackwardortho>Nr%r#r$xnorm signal_numelr#returnctjtvfddk(r|dtj|z zS| xr duxsdk(xs |xrdk(}|r|d|z zS|S)z3Apply normalization to the un-normalized FFT resultcdS)NzInvalid normalization mode: )r'sU/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/torch/_refs/fft.pyz_apply_norm../s1MdV/Tr%Nr$r#)torch_check _NORM_VALUESmathsqrt)r&r'r(r# normalizes ` r- _apply_normr7+s LL%'TU wA ,//00E$$,"D$*2D%DI%&/1L !5A5r/dtyperequire_complexdevicecfjrSjstjtjtj g}|j dv}|r|jtjtj|vfd|rtjS)z@Helper to promote a dtype to one supported by the FFT primitives)cudametacdS)NzUnsupported dtype r,r8sr-r.z#_promote_type_fft..Js3EeW1Mr/) is_complexis_floating_pointr1get_default_dtypefloat32float64typeappendfloat16r2utilscorresponding_complex_dtype)r8r9r: allowed_typesmaybe_support_halfs` r-_promote_type_fftrL:s    " "'')]]EMM2M(88U]]+ LL-')MN11%8 Lr/tc`|j}t|||j}t||S)zEHelper to promote a tensor to a dtype supported by the FFT primitives)r8rLr:r )rMr9cur_typenew_types r-_maybe_promote_tensor_fftrQRs,wwH ?AHHEH "1h //r/dims.sizesct|t|k(sJd}|j}dgt|zdz}tt|D]k}||dk(r |||||kr*d}t|d||zz dz }|||||z ||<|||||kDsS|j||d||}m|rt 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. FrTr0)lenshaperangenarrowr1constant_pad_nd)r&rRrS must_copyx_sizes pad_amountipad_idxs r-_resize_fft_inputra[s t9E "" "IggGs7|#a'J 3t9  / 8r>  47 eAh &I*oDG 3a7G"'(WT!W-="=Jw  47 eAh &a!U1X.A /4=5 J /C!Cr/ func_nameinputndimcxt|d}tj|j|df}||nd|j|dz zt j dk\fd|t||dzdzf}|rt j|}tj|| }t||| S) zBCommon code for performing any complex to real FFT (irfft or hfft)Tr9F wrap_scalarrUr0cddSNzInvalid number of data points (z ) specifiedr, last_dim_sizesr-r.z_fft_c2r..1- Lr/)rRrSrermr'r(r#) rQrHcanonicalize_dimndimrXr1r2raconjprimsfft_c2rr7) rbrcrdrer'r#rRoutputrms @r-_fft_c2rrwus &eT BE  " "5::s F HDAAS1AA1E,FM LLL  }!%d=A;MPQ;Q:ST 5! ]]5d- HF vD}g VVr/onesidedc tjjj fdt t j j|df}||nj| tj dk\ fd|t||ftj||}t|| |}|r|Stj|S)zBCommon code for performing any real to complex FFT (rfft or ihfft)c&djS)Nz0 expects a floating point input tensor, but got r?rbrcsr-r.z_fft_r2c..s9+Mekk][r/Frhr0cddSrkr,dim_sizesr-r.z_fft_r2c..!@ +Vr/rerx)r1r2r8r@rQrHrqrrrXrartfft_r2cr7rs) rbrcrdrer'r#rxrRretr~s `` @r-_fft_r2crs LL KK " ""[ &e ,E  " "5::s F HDMqu{{3'7H LLA V }!%t4 --4( ;C c47 3C3.uzz#.r/cttjjjfdt j j |df}||nj|tjdk\fd|t||ftj||}t|||S)zCCommon code for performing any complex to complex FFT (fft or ifft)c&djSNz) expects a complex input tensor, but got r?r{sr-r.z_fft_c2c..s9+Fu{{mTr/Frhr0cddSrkr,r}sr-r.z_fft_c2c..rr/rer#) r1r2r8r@rHrqrrrXrartfft_c2cr7) rbrcrdrer'r#rRrr~s `` @r-_fft_c2crs LL T  " "5::s F HDMqu{{3'7H LLA V }!%t4 --4 9C sD(G 44r/c t|jjrtd||||dStd||||ddS)NrTr#Fr#rxr8r@rrrcrdrer's r-rrs= {{uadDAAuadD5QQr/c t|jjrtd||||dStd||||ddS)NrFrrrrs r-rrs= {{q#tUCCq#tUUSSr/c &td||||ddS)NrTrrrs r-rrs FE1c4 MMr/c$td||||dS)NrFrrwrs r-rrs GUAsD% @@r/c$td||||dS)NrTrrrs r-rrs FE1c4 >>r/c &td||||ddS)NrFTrrrs r-rrs GUAsD%$ OOr/c6eZdZUeedfed<eedfed<y) _ShapeAndDims.rXrRN__name__ __module__ __qualname__tupleint__annotations__r,r/r-rrs c? S/r/rrXc|j|j|`t|ts|f}t j |d}t jtt|t|k(d|t|ts|f}t j|duxst|t|k(dt|t jkfd|ttz }tfdt|D}n6| tt}t}ntfdD}|D]t jd kDfd  t|| S) zTConvert the shape and dim arguments into a canonical form where neither are optionalNFrhcy)NzFFT dims must be uniquer,r,r/r-r.z6_canonicalize_fft_shape_and_dim_args.."r/cy)Nz=When given, dim and shape arguments must have the same lengthr,r,r/r-r.z6_canonicalize_fft_shape_and_dim_args..,rr/cdddS)NzGot shape with z" values but input tensor only has z dimensions.r,) input_dimtransform_ndimsr-r.z6_canonicalize_fft_shape_and_dim_args..2son%56!{,0r/c3<K|]\}}|dk7r|n|yw)rVNr,).0sd input_sizess r- z7_canonicalize_fft_shape_and_dim_args..;s, AbAk!n , c3(K|] }| ywNr,)rrrs r-rz7_canonicalize_fft_shape_and_dim_args..Es;Q+a.;srcddSrkr,)rdsr-r.z6_canonicalize_fft_shape_and_dim_args..Hs&EaS $Tr/)rXrR)rrrX isinstancerrHcanonicalize_dimsr1r2rWsetrrYzipr) rcrXreret_dims ret_shaperrrdrs @@@@r-$_canonicalize_fft_shape_and_dim_argsrsp I++K #x(&C**9cuM  H #h- /1R  %*HE  4K 13s8s5z1 S U i ' 0  ;U9~#=yIJH eX.   y)*+& ;(;; V QUTUV yx 88r/xsc"d}|D]}||z} |S)zCompute product of a listr0r,)rprodr&s r-_prodrMs$ D    Kr/ function_namectjjjfdt ||}t j |||}t||t||S)zECommon code for n-dimensional complex to complex FFTs (fftn or ifftn)c&djSrr?)rrcsr-r.z_fftn_c2c..`s=/";;-!r/rrp) r1r2r8r@rartrr7r)rrcrXrer'r#r&rvs`` r- _fftn_c2crUsZ LL  ! %e,A ]]1#w 7F vDuU|W UUr/rc^t|||\}}t|d}td||||dS)NTrgrrrrQrrcrrer'rXr&s r-rrhs78q#FLUC!%>A VQsD$ ??r/c^t|||\}}t|d}td||||dS)NTrgrFrrrs r-rrus78q#FLUC!%>A WaT5 AAr/ctjjj fdt ||\}}t dt ||tj|d}t||t|dS)Nc"djS)Nz2rfftn expects a real-valued input tensor, but got r?rcsr-r.zrfftn..sDU[[MRr/FrgTrrp) r1r2r8r@rrQrartrr7r)rcrrer'rXouts` r-rrsy LL KK " ""R6eQDJE3 %eU CE eS% 0E --3 6C sE%L$ OOr/c*tjjj fdt ||\}}tjt |dkDdt dt||tj|ddd}t |d k(r't|||dd }tj|Stj|}tj||ddd }t||t|d S) Nc"djS)Nz3ihfftn expects a real-valued input tensor, but got r?rsr-r.zihfftn..sEekk]Sr/rcy)Nz'ihfftn must transform at least one axisr,r,r/r-r.zihfftn..rr/FrgrVTrr0rpr)r1r2r8r@rrWrQrartrr7rs conj_physicalrr)rcrrer'rXtmps` r-rrs LL KK " ""S6eQDJE3 LLUa!RS %eU CE eS% 0E --3rs8d ;C 3x1}#DuQxOzz#   c "C --Sb5 9C sE%L% PPr/c@eZdZUeedfed<eedfed<eed<y)_CanonicalizeC2rReturn.rXrermNrr,r/r-rrs$ c? sCxr/rfnamecRt|||\}}tjt|dkDfd||ddk(rd|j|ddz zn|dtjdk\fdt |}dzdz|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 outputrcdS)Nz! must transform at least one axisr,)rsr-r.z:_canonicalize_fft_c2r_shape_and_dim_args..sE72S)Tr/rVrUr0cddSrkr,rlsr-r.z:_canonicalize_fft_c2r_shape_and_dim_args..rnr/)rXrerm)rr1r2rWrXlistrr)rrcrrerX shape_listrms` @r-(_canonicalize_fft_c2r_shape_and_dim_argsrs8q#FLUC LLUa!TUyAbERKU[[R1A56 b  LLL eJ"a'!+JrN !JS  r/ctd|||\}}}t|d}t|||}tj|||t |t fd|DdS)Nr Trgroc3<K|]}j|ywr)rX)rrrs r-rzirfftn..s'B ! 'BrFr)rrQrartrur7r)rcrrer'rXrmrs @r-r r sj!I%C!E3  &eT BE eS% 0E --3m DC sD%'Bc'B"BE RRr/c dtd|||\}}}t|d}t|||}t|dkDrt j ||dddn|}t ||t|ddd}t j|}t j||dd|}t |||dS) NrTrgr0rVrrro) rrQrarWrtrr7rrru)rcrrer'rXrmrrs r-rrs!I3!E3  &eT BE eS% 0E>A#hl%--3s8T :PUC c4uSbz!2D AC   c "C --RS GC sD- >>r/cHtjj||||SN)rrer')r1rrrcrrer's r-rrs 99>>%1#D> 99r/cHtjj||||Sr)r1rrrs r-rr 99??5A3T? ::r/cHtjj||||Sr)r1rrrs r-rrrr/cHtjj||||Sr)r1rr rs r-rr" 99  EQCd  ;;r/cHtjj||||Sr)r1rrrs r-rr%rr/cHtjj||||Sr)r1rrrs r-rr0rr/c~|tt|jSt|ts|gSt|S)zIConvert Optional[DimsType] to a simple list, defaulting to all dimensions)rrYrrrr)rer&s r-_default_alldimsr;s5 {E!&&M"" X &u Cyr/ct||}|Dcgc]}|j|dz}}tj|||Scc}w)NrUrrXr1rollrcrerRrshifts r-r!r!EsF C 'D*. /QU[[^q /E / ::eUD )) 0sAct||}|Dcgc]}|j|dzdz}}tj|||Scc}w)Nr0rUrrs r-r"r"LsK C 'D04 51ekk!nq Q & 5E 5 ::eUD )) 6sA)F)NrVN)NNN)N)rVNr)[r4collections.abcrrtypingrrrrr1 torch._prims_primsrttorch._prims_common _prims_commonrH torch._decompr r r r torch._prims_common.wrappersr r__all__NormTyper3_opsopsatenrboolr7r8r:rLrQrrastrrwrrfft_fftrfft_ifftrfft_rfftr fft_irfftrfft_hfftr fft_ihfftrrrrrfft_fftnr fft_ifftnr fft_rfftnr fft_ihfftnrrr fft_irfftnr fft_hfftnrfft_fft2r fft_ifft2r fft_rfft2r fft_irfft2r fft_hfft2r fft_ihfft2rrr fft_fftshiftr! fft_ifftshiftr"r,r/r-rs/  .77 #0CCM 2 w=>> ?5  zz~~ 6 6% 658 6CG 6 6 ;;)-7<|| [[20500(,00DD"38_D5:38_DD4WW W}W W  W  WW6// /}/ /  /  ///:55 5}5 5  5  554 %  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(PJ 69 69"*9"569