§
    Ÿ²ÅjoH  ã                   ó  — 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   €ú@C:\Projects\Historical\venv\Lib\site-packages\torch/_refs/fft.pyú<lambda>z_apply_norm.<locals>.<lambda>.   s   ø€ Ð/TÈdÐ/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ð ØÐ%�D˜IÒ%ð ð &/Ð5ˆ1��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   ø€ Ð1MÀeÐ1MÐ1M€ 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¨   ø€ ð Ôð Øˆð Ô"ð *ÝÔ'Ñ)Ô)ˆå”]¥E¤MÐ2€MØœÐ(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.   € ð Œw€HÝ  ¨?¸A¼HÑEÔE€HÝ" 1 hÑ/Ô/Ð/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  € õ ˆt‰9Œ9�˜E™
œ
Ò"Ð"Ð"Ð"Ø€IØŒg€GØ�•s˜7‘|”|Ñ# aÑ'€JÝ•3�t‘9”9ÑÔð 
/ð 
/ˆØ�Œ8�rŠ>ˆ>Øà�4˜”7Ô˜e AœhÒ&Ð&ØˆIÝ˜*‘o”o¨¨D°¬G©Ñ3°aÑ7ˆGØ"'¨¤(¨W°T¸!´WÔ-=Ñ"=ˆJ�wÑà�4˜”7Ô˜e AœhÒ&Ð&Ø—’˜˜aœ ! U¨1¤XÑ.Ô.ˆAøà3<ÐC�5Ô   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æ   ø€ õ & e¸TÐBÑBÔB€EÝÔ" 5¤:¨sÀÐFÑFÔFÐH€DØ˜�A�A¨A°´¸SÔ1AÀAÑ1EÑ,F€MÝ	„LØ˜ÒØLÐLÐLÐLñô ð ð
 	€}Ý! %¨d¸=ÈAÑ;MÐPQÑ;QÐ:SÐTÑTÔTˆàð "Ý”
˜5Ñ!Ô!ˆåŒ]˜5 d¸-ÐHÑHÔH€FÝ�v D°}È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Ð[Ð[ÈeÌkÐ[Ð[€ 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ÐH€DØ�Mˆqˆq u¤{°3Ô'7€HÝ	„LØ�AŠÐVÐVÐVÐVñô ð ð 	€}Ý! %¨°¨tÑ4Ô4ˆå
Œ-˜ 4°(Ð
;Ñ
;Ô
;€CÝ
�c˜4 ¨7Ñ
3Ô
3€CØÐ.ˆ3ˆ3�uœz¨#™œÐ.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ÐTÀuÄ{Ð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ÐH€DØ�Mˆqˆq u¤{°3Ô'7€HÝ	„LØ�AŠÐVÐVÐVÐVñô ð ð 	€}Ý! %¨°¨tÑ4Ô4ˆå
Œ-˜ 4°Ð
9Ñ
9Ô
9€CÝ�s˜D (¨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Ý˜˜u a¨¨d¸DÐAÑAÔAÐAå˜˜u a¨¨d¸DÈ5Ð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¨#¨t¸UÐCÑCÔCÐCå˜  q¨#¨t¸UÈUÐSÑSÔSÐSr1   c           	      ó.   — t          d| |||dd¬¦  «        S )Nr   Tr�   ©r…   r‘   s       r/   r   r   â   s!   € õ �F˜E 1 c¨4¸ÈÐMÑMÔMÐMr1   c                 ó,   — t          d| |||d¬¦  «        S )Nr    FrŽ   ©ry   r‘   s       r/   r    r    í   s   € õ �G˜U A s¨D¸%Ð@Ñ@Ô@Ð@r1   c                 ó,   — t          d| |||d¬¦  «        S )Nr   TrŽ   r–   r‘   s       r/   r   r   ø   s   € õ �F˜E 1 c¨4¸Ð>Ñ>Ô>Ð>r1   c           	      ó.   — t          d| |||dd¬¦  «        S )Nr   FTr�   r”   r‘   s       r/   r   r     s!   € õ �G˜U A s¨D¸%È$Ð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(   ø€ ð 0 nð 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’�ˆAˆA˜k¨!œ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   ø€ Ð$TÀaÐ$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ÝÔ*¨9°cÀuÐMÑMÔMˆõ 	ŒÝ•�H‘”ÑÔ¥# h¡-¤-Ò/Ð1RÐ1Rñ	
ô 	
ð 	
ð ÐÝ˜%¥Ñ*Ô*ð 	Ø�HˆEõ 	ŒØ�4ˆKÐ1�3˜s™8œ8¥s¨5¡z¤zÒ1ØSÐSñ	
ô 	
ð 	
õ ˜U™œˆåŒØ˜iÒ'ð0ð 0ð 0ð 0ð 0ñ	
ô 	
ð 	
ð ˆ;Ý�U 9¨~Ñ#=¸yÑIÔIÑJÔJˆHõ ð 
ð 
ð 
ð 
Ý;>¸uÀhÑ;OÔ;Oð
ñ 
ô 
ñ 
ô 
ˆ	ˆ	ð 
ˆå�˜yÑ)Ô)Ñ*Ô*ˆÝ˜+Ñ&Ô&ˆ	ˆ	õ Ð;Ð;Ð;Ð;°(Ð;Ñ;Ô;Ñ;Ô;ˆ	àð Vð VˆÝŒ�Q˜’UÐTÐTÐTÐTÑUÔUÐUÐUå˜y¨xÐ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Ô7€FÝ�v Dµu¸U±|´|È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ÔF�L€UˆCÝ! %¸Ð>Ñ>Ô>€AÝ�V˜Q  s¨D¸$Ð?Ñ?Ô?Ð?r1   c                 óv   — t          | ||¦  «        \  }}t          | d¬¦  «        }t          d||||d¬¦  «        S )NTri   r   FrŽ   rÁ   rÂ   s         r/   r   r   s  sF   € õ 8¸¸qÀ#ÑFÔF�L€UˆCÝ! %¸Ð>Ñ>Ô>€AÝ�W˜a ¨¨T¸5Ð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   ø€ ÐRÀUÄ[Ð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ñô ð õ 6°e¸QÀÑDÔD�J€Eˆ3Ý% e¸UÐCÑCÔC€EÝ˜e S¨%Ñ0Ô0€EÝ
Œ-˜ 3°Ð
6Ñ
6Ô
6€CÝ�s µE¸%±L´LÈ$Ð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   ø€ ÐSÀeÄkÐ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ñô ð õ 6°e¸QÀÑDÔD�J€Eˆ3Ý	„L•�U‘”˜a’Ð!RÐ!RÑSÔSÐSÝ% e¸UÐCÑCÔC€EÝ˜e S¨%Ñ0Ô0€Eå
Œ-˜ 3 r s s¤8°dÐ
;Ñ
;Ô
;€Cå
ˆ3�x„x�1‚}€}Ý˜# D°u¸Q´xÈÐOÑOÔOˆÝŒz˜#‰ŒÐå
Ô
˜cÑ
"Ô
"€CÝ
Œ-˜  S b S¤°5Ð
9Ñ
9Ô
9€CÝ�s µE¸%±L´LÈ%Ð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�Œ?ÐÐÑØ	ˆs�CˆxŒÐÐÑØÐÐÑÐÐ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 )	zšCanonicalize 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ÔF�L€UˆCÝ	„L•�U‘”˜a’Ð!TÐ!TÐ!TÐ!TÑUÔUÐUà€y�A�b”E˜R’K�KØ˜Uœ[¨¨R¬Ô1°AÑ5Ñ6ˆˆà˜bœ	ˆå	„LØ˜ÒØLÐLÐLÐLñô ð õ
 �e‘”€JØ" aÑ'¨!Ñ+€Jˆr�NÝ!Ý�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ñ!ô !Ñ€Eˆ3�õ & e¸TÐBÑBÔB€EÝ˜e S¨%Ñ0Ô0€EÝ
Œ-˜ 3°mÐ
DÑ
DÔ
D€CÝ�s˜D¥%Ð'BÐ'BÐ'BÐ'B¸cÐ'BÑ'BÔ'BÑ"BÔ"BÈEÐ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ñ!ô !Ñ€Eˆ3�õ & e¸TÐBÑBÔB€EÝ˜e S¨%Ñ0Ô0€Eå>AÀ#¹h¼hÈºl¸l�%Œ-˜ 3 s¨ s¤8°TÐ
:Ñ
:Ô
:Ð
:ÐPU€CÝ
�c˜4¥ u¨S¨b¨S¤zÑ!2Ô!2¸DÐ
AÑ
AÔ
A€CÝ
Ô
˜cÑ
"Ô
"€CÝ
Œ-˜  R S S¤¸Ð
GÑ
GÔ
G€CÝ�s˜D -¸Ð>Ñ>Ô>Ð>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�?Š?˜5 A¨3°Tˆ?Ñ:Ô:Ð: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×Ò˜E Q¨C°dÐÑ;Ô;Ð;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˜!œ&‘M”MÑ"Ô"Ð"Ý˜�XÑ&Ô&ð Øˆuˆå�C‰yŒyÐ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$   ø€ Ð/Ð/Ð/ QˆUŒ[˜Œ^˜qÑ Ð/Ð/Ð/r1   ©rç   r3   Úroll©re   rg   rT   Úshifts   `   r/   r#   r#   C  s?   ø€ å˜C Ñ'Ô'€DØ/Ð/Ð/Ð/¨$Ð/Ñ/Ô/€EÝŒ:�e˜U DÑ)Ô)Ð)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Ð5¨1ˆeŒk˜!Œn˜qÑ  QÑ&Ð5Ð5Ð5r1   rì   rî   s   `   r/   r$   r$   J  s?   ø€ å˜C Ñ'Ô'€DØ5Ð5Ð5Ð5°Ð5Ñ5Ô5€EÝŒ:�e˜U DÑ)Ô)Ð)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Ø%ð6Ø58ð6ØCGð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ð 5ð4 Ð˜œÑ%Ô%Ø€�„ð ØØð		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Ø<DÀXÔ<Nð59àð59ð 59ð 59ð 59ðpˆh�sŒmð  ð ð ð ð ðVØðVàðVð ��c�Œ?ðVð 
ˆs�CˆxŒð	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   