§
    ­˜ºh/F  ã                   ó  — d dl Z d dlmZmZ d dl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#	 dGd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¦   «         	 	 	 dHdedee         dededef
d$„¦   «         ¦   «         Z, eej-        ¦  «         e¦   «         	 	 	 dHdedee         dededef
d%„¦   «         ¦   «         Z. eej/        ¦  «         e¦   «         	 	 	 dHdedee         dededef
d&„¦   «         ¦   «         Z0 eej1        ¦  «         e¦   «         	 	 	 dHdedee         dededef
d'„¦   «         ¦   «         Z2 eej3        ¦  «         e¦   «         	 	 	 dHdedee         dededef
d(„¦   «         ¦   «         Z4 eej5        ¦  «         e¦   «         	 	 	 dHd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/„Z9d0e'ded,e%edf         de%edf         dededefd1„Z: eej;        ¦  «         e¦   «         	 	 	 dIded2ee         dee         dedef
d3„¦   «         ¦   «         Z< eej=        ¦  «         e¦   «         	 	 	 dIded2ee         dee         dedef
d4„¦   «         ¦   «         Z> eej?        ¦  «         e¦   «         	 	 	 dIded2ee         dee         dedef
d5„¦   «         ¦   «         Z@ eejA        ¦  «         e¦   «         	 	 	 dIded2ee         dee         dedef
d6„¦   «         ¦   «         ZB G d7„ d8e¦  «        ZCd9e'ded2ee         dee         deCf
d:„ZD eejE        ¦  «         e¦   «         	 	 	 dIded2ee         dee         dedef
d;„¦   «         ¦   «         ZF eejG        ¦  «         e¦   «         	 	 	 dIded2ee         dee         dedef
d<„¦   «         ¦   «         ZH eejI        ¦  «         e¦   «         	 	 	 dJded2ee         dee         dedef
d>„¦   «         ¦   «         ZJ eejK        ¦  «         e¦   «         	 	 	 dJded2ee         dee         dedef
d?„¦   «         ¦   «         ZL eejM        ¦  «         e¦   «         	 	 	 dJded2ee         dee         dedef
d@„¦   «         ¦   «         ZN eejO        ¦  «         e¦   «         	 	 	 dJded2ee         dee         dedef
dA„¦   «         ¦   «         ZP eejQ        ¦  «         e¦   «         	 	 	 dJded2ee         dee         dedef
dB„¦   «         ¦   «         ZR eejS        ¦  «         e¦   «         	 	 	 dJded2ee         dee         dedef
dC„¦   «         ¦   «         ZTdee         d
edeUe         fdD„ZV eejW        ¦  «        dKdedee         defdE„¦   «         ZX eejY        ¦  «        dKdedee         defdF„¦   «         ZZdS )Lé    N)ÚIterableÚSequence)ÚLiteralÚ
NamedTupleÚOptionalÚ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   €úW/var/www/html/services/rag-service/venv/lib/python3.11/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_normr7   +   s”   ø€ õ 
„L��Ð%Ð'TÐ'TÐ'TÐ'TÑUÔUÐUàˆw‚€Ø�A�œ	 ,Ñ/Ô/Ñ/Ñ0Ð0à�ÐE $¨$ ,Ð"D°$¸*Ò2Dð ØÐ%�D˜IÒ%ð ð &/Ð5ˆ1��LÑ Ñ!Ð!°AÐ5r/   Ú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,   ©r8   s   €r-   r.   z#_promote_type_fft.<locals>.<lambda>J   s   ø€ Ð1MÀeÐ1MÐ1M€ r/   )Ú
is_complexÚis_floating_pointr1   Úget_default_dtypeÚfloat32Úfloat64ÚtypeÚappendÚfloat16r2   ÚutilsÚcorresponding_complex_dtype)r8   r9   r:   Úallowed_typesÚmaybe_support_halfs   `    r-   Ú_promote_type_fftrL   :   s¨   ø€ ð Ôð Øˆð Ô"ð *ÝÔ'Ñ)Ô)ˆå”]¥E¤MÐ2€MØœÐ(8Ð8Ðàð ,Ø×Ò�Uœ]Ñ+Ô+Ð+Ý	„L�˜-Ð'Ð)MÐ)MÐ)MÐ)MÑNÔNÐNàð 9ÝÔ1°%Ñ8Ô8ˆà€Lr/   FÚtc                 ó\   — | j         }t          ||| j        ¦  «        }t          | |¦  «        S )zEHelper to promote a tensor to a dtype supported by the FFT primitives)r8   rL   r:   r   )rM   r9   Úcur_typeÚnew_types       r-   Ú_maybe_promote_tensor_fftrQ   R   s.   € ð Œw€HÝ  ¨?¸A¼HÑEÔE€HÝ" 1 hÑ/Ô/Ð/r/   Ú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   é   éÿÿÿÿTr0   )ÚlenÚshapeÚrangeÚnarrowr1   Úconstant_pad_nd)r&   rR   rS   Ú	must_copyÚx_sizesÚ
pad_amountÚiÚpad_idxs           r-   Ú_resize_fft_inputra   [   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Ñ/Ô/Ð/À!ÐCr/   Ú	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©r9   F©Úwrap_scalarNrU   r0   c                  ó   •— d‰ › d�S ©NzInvalid number of data points (z) specifiedr,   ©Úlast_dim_sizes   €r-   r.   z_fft_c2r.<locals>.<lambda>ƒ   ó   ø€ ÐL°-ÐLÐLÐL€ r/   )rR   rS   ©re   rm   ©r'   r(   r#   )rQ   rH   Úcanonicalize_dimÚndimrX   r1   r2   ra   ÚconjÚprimsÚfft_c2rr7   )	rb   rc   rd   re   r'   r#   rR   Úoutputrm   s	           @r-   Ú_fft_c2rrw   u   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ÐVr/   Ú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 r?   ©rb   rc   s   €€r-   r.   z_fft_r2c.<locals>.<lambda>œ   s   ø€ �9Ð[Ð[ÈeÌkÐ[Ð[€ r/   Frh   Nr0   c                  ó   •— d‰ › d�S rk   r,   ©Údim_sizes   €r-   r.   z_fft_r2c.<locals>.<lambda>¢   ó   ø€ ÐVÀÐVÐVÐV€ r/   ©re   rx   )r1   r2   r8   r@   rQ   rH   rq   rr   rX   ra   rt   Úfft_r2cr7   rs   )
rb   rc   rd   re   r'   r#   rx   rR   Ú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¨#™œÐ.r/   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 r?   r{   s   €€r-   r.   z_fft_c2c.<locals>.<lambda>¸   s   ø€ �9ÐTÐTÀuÄ{ÐTÐT€ r/   Frh   Nr0   c                  ó   •— d‰ › d�S rk   r,   r}   s   €r-   r.   z_fft_c2c.<locals>.<lambda>½   r   r/   ©re   r#   )r1   r2   r8   r@   rH   rq   rr   rX   ra   rt   Úfft_c2cr7   )	rb   rc   rd   re   r'   r#   rR   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Ð4r/   rV   c           	      óp   — | j         j        rt          d| |||d¬¦  «        S t          d| |||dd¬¦  «        S )Nr   T©r#   F©r#   rx   ©r8   r@   rŠ   rƒ   ©rc   rd   re   r'   s       r-   r   r   Ç   sJ   € ð „{Ôð RÝ˜˜u a¨¨d¸DÐAÑAÔAÐAå˜˜u a¨¨d¸DÈ5ÐQÑQÔQÐQr/   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ÐSr/   c           	      ó.   — t          d| |||dd¬¦  «        S )Nr   Tr�   ©rƒ   r�   s       r-   r   r   ã   s!   € õ �F˜E 1 c¨4¸ÈÐMÑMÔMÐMr/   c                 ó,   — t          d| |||d¬¦  «        S )Nr   FrŒ   ©rw   r�   s       r-   r   r   î   s   € õ �G˜U A s¨D¸%Ð@Ñ@Ô@Ð@r/   c                 ó,   — t          d| |||d¬¦  «        S )Nr   TrŒ   r”   r�   s       r-   r   r   ù   s   € õ �F˜E 1 c¨4¸Ð>Ñ>Ô>Ð>r/   c           	      ó.   — t          d| |||dd¬¦  «        S )Nr   FTr�   r’   r�   s       r-   r   r     s!   € õ �G˜U A s¨D¸%È$ÐOÑOÔOÐOr/   c                   óD   — e Zd ZU eedf         ed<   eedf         ed<   dS )Ú_ShapeAndDims.rX   rR   N©Ú__name__Ú
__module__Ú__qualname__ÚtupleÚintÚ__annotations__r,   r/   r-   r˜   r˜     s:   € € € € € € Ø��c�Œ?ÐÐÑØ
��S�Œ/ÐÐÑÐÐr/   r˜   rX   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 optionalNFrh   c                  ó   — dS )NzFFT dims must be uniquer,   r,   r/   r-   r.   z6_canonicalize_fft_shape_and_dim_args.<locals>.<lambda>"  s   € Ð9R€ r/   c                  ó   — dS )Nz=When given, dim and shape arguments must have the same lengthr,   r,   r/   r-   r.   z6_canonicalize_fft_shape_and_dim_args.<locals>.<lambda>,  s   € ÐS€ r/   c                  ó   •— d‰› d‰ › d�S )NzGot shape with z" values but input tensor only has z dimensions.r,   )Ú	input_dimÚtransform_ndims   €€r-   r.   z6_canonicalize_fft_shape_and_dim_args.<locals>.<lambda>2  s(   ø€ ð 0 nð 0ð 0Ø!ð0ð 0ð 0€ r/   c              3   ó>   •K  — | ]\  }}|d k    r|n‰|         V — ŒdS )rV   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ð
ð 
ð 
ð 
ð 
ð 
r/   c              3   ó(   •K  — | ]}‰|         V — Œd S ©Nr,   )r§   r©   rª   s     €r-   r«   z7_canonicalize_fft_shape_and_dim_args.<locals>.<genexpr>D  s'   øè è € Ð;Ð;¨Q˜+ aœ.Ð;Ð;Ð;Ð;Ð;Ð;r/   r   c                  ó   •— d‰ › d�S rk   r,   )rd   s   €r-   r.   z6_canonicalize_fft_shape_and_dim_args.<locals>.<lambda>G  s   ø€ Ð$TÀaÐ$TÐ$TÐ$T€ r/   )rX   rR   )rr   rX   Ú
isinstancer   rH   Úcanonicalize_dimsr1   r2   rW   Úsetr�   rY   Úzipr˜   )	rc   rX   re   Úret_dimsÚ	ret_shaper¤   rª   rd   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Ð8r/   Úxsc                 ó   — d}| D ]}||z  }Œ|S )zCompute product of a listr0   r,   )r¶   Úprodr&   s      r-   Ú_prodr¹   L  s&   € à€DØð ð ˆØ�‰	ˆˆØ€Kr/   Ú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†   r?   )rº   rc   s   €€r-   r.   z_fftn_c2c.<locals>.<lambda>_  s    ø€ �=ð !ð !Ø”;ð!ð !€ r/   rˆ   rp   )	r1   r2   r8   r@   ra   rt   r‰   r7   r¹   )rº   rc   rX   re   r'   r#   r&   rv   s   ``      r-   Ú	_fftn_c2cr½   T  s�   øø€ õ 
„LØŒÔð	!ð 	!ð 	!ð 	!ð 	!ñô ð õ
 	˜%  eÑ,Ô,€AÝŒ]˜1 #¨wÐ7Ñ7Ô7€FÝ�v Dµu¸U±|´|ÈWÐUÑUÔUÐUr/   r¨   c                 óv   — t          | ||¦  «        \  }}t          | d¬¦  «        }t          d||||d¬¦  «        S )NTrg   r   rŒ   ©rµ   rQ   r½   ©rc   r¨   re   r'   rX   r&   s         r-   r   r   g  sF   € õ 8¸¸qÀ#ÑFÔF�L€UˆCÝ! %¸Ð>Ñ>Ô>€AÝ�V˜Q  s¨D¸$Ð?Ñ?Ô?Ð?r/   c                 óv   — t          | ||¦  «        \  }}t          | d¬¦  «        }t          d||||d¬¦  «        S )NTrg   r   FrŒ   r¿   rÀ   s         r-   r   r   t  sF   € õ 8¸¸qÀ#ÑFÔF�L€UˆCÝ! %¸Ð>Ñ>Ô>€AÝ�W˜a ¨¨T¸5ÐAÑAÔAÐAr/   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 r?   ©rc   s   €r-   r.   zrfftn.<locals>.<lambda>‹  s   ø€ ÐRÀUÄ[ÐRÐR€ r/   Frg   Tr€   rp   )r1   r2   r8   r@   rµ   rQ   ra   rt   r�   r7   r¹   )rc   r¨   re   r'   rX   Ú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ÐOr/   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 r?   rÄ   s   €r-   r.   zihfftn.<locals>.<lambda>ž  s   ø€ ÐSÀeÄkÐSÐS€ r/   r   c                  ó   — dS )Nz'ihfftn must transform at least one axisr,   r,   r/   r-   r.   zihfftn.<locals>.<lambda>¡  s   € Ð)R€ r/   Frg   rV   Tr€   r0   rp   rˆ   )r1   r2   r8   r@   rµ   rW   rQ   ra   rt   r�   r7   rs   Úconj_physicalr‰   r¹   )rc   r¨   re   r'   rX   Ú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ÐPr/   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.rX   re   rm   Nr™   r,   r/   r-   rÌ   rÌ   °  sF   € € € € € € Ø��c�Œ?ÐÐÑØ	ˆs�CˆxŒÐÐÑØÐÐÑÐÐr/   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-   r.   z:_canonicalize_fft_c2r_shape_and_dim_args.<locals>.<lambda>¿  s   ø€ ¨EÐ)TÐ)TÐ)T€ r/   NrV   rU   r0   c                  ó   •— d‰ › d�S rk   r,   rl   s   €r-   r.   z:_canonicalize_fft_c2r_shape_and_dim_args.<locals>.<lambda>È  rn   r/   )rX   re   rm   )rµ   r1   r2   rW   rX   ÚlistrÌ   r�   )rÍ   rc   r¨   re   rX   Ú
shape_listrm   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¸ðñ ô ð r/   c                 óú   ‡— t          d| ||¦  «        \  }}}t          | d¬¦  «        } t          | ||¦  «        } t          j        | ||¬¦  «        Št          ‰|t          ˆfd„|D ¦   «         ¦  «        d¬¦  «        S )Nr    Trg   ro   c              3   ó2   •K  — | ]}‰j         |         V — Œd S r­   ©rX   )r§   r©   rÅ   s     €r-   r«   zirfftn.<locals>.<genexpr>à  s)   øè è € Ð'BÐ'B¸¨¬	°!¬Ð'BÐ'BÐ'BÐ'BÐ'BÐ'Br/   FrŒ   )rÓ   rQ   ra   rt   ru   r7   r¹   )rc   r¨   re   r'   rX   rm   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ÐRr/   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   Trg   r0   rV   rˆ   rŒ   ro   )
rÓ   rQ   ra   rW   rt   r‰   r7   r¹   rÉ   ru   )rc   r¨   re   r'   rX   rm   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 -¸Ð>Ñ>Ô>Ð>r/   ©éþÿÿÿrV   c                 óH   — t           j                             | |||¬¦  «        S ©N)r¨   re   r'   )r1   r   r   ©rc   r¨   re   r'   s       r-   r   r   ø  s    € õ Œ9�>Š>˜% 1¨#°Dˆ>Ñ9Ô9Ð9r/   c                 óH   — t           j                             | |||¬¦  «        S rÛ   )r1   r   r   rÜ   s       r-   r   r     ó    € õ Œ9�?Š?˜5 A¨3°Tˆ?Ñ:Ô:Ð:r/   c                 óH   — t           j                             | |||¬¦  «        S rÛ   )r1   r   r   rÜ   s       r-   r   r     rÞ   r/   c                 óH   — t           j                             | |||¬¦  «        S rÛ   )r1   r   r    rÜ   s       r-   r   r     ó#   € õ Œ9×Ò˜E Q¨C°dÐÑ;Ô;Ð;r/   c                 óH   — t           j                             | |||¬¦  «        S rÛ   )r1   r   r   rÜ   s       r-   r   r   $  rÞ   r/   c                 óH   — t           j                             | |||¬¦  «        S rÛ   )r1   r   r   rÜ   s       r-   r   r   /  rá   r/   c                 ó–   — | €!t          t          |j        ¦  «        ¦  «        S t          | t          ¦  «        s| gS t          | ¦  «        S )zIConvert Optional[DimsType] to a simple list, defaulting to all dimensions)rÑ   rY   rr   r¯   r   )re   r&   s     r-   Ú_default_alldimsrå   :  sB   € à
€{Ý•E˜!œ&‘M”MÑ"Ô"Ð"Ý˜�XÑ&Ô&ð Øˆuˆå�C‰yŒyÐr/   c                 ól   ‡ — t          |‰ ¦  «        }ˆ fd„|D ¦   «         }t          j        ‰ ||¦  «        S )Nc                 ó0   •— g | ]}‰j         |         d z  ‘ŒS )rU   rÖ   ©r§   r©   rc   s     €r-   ú
<listcomp>zfftshift.<locals>.<listcomp>G  s$   ø€ Ð/Ð/Ð/ QˆUŒ[˜Œ^˜qÑ Ð/Ð/Ð/r/   ©rå   r1   Úroll©rc   re   rR   Úshifts   `   r-   r!   r!   D  s?   ø€ å˜C Ñ'Ô'€DØ/Ð/Ð/Ð/¨$Ð/Ñ/Ô/€EÝŒ:�e˜U DÑ)Ô)Ð)r/   c                 ól   ‡ — t          |‰ ¦  «        }ˆ fd„|D ¦   «         }t          j        ‰ ||¦  «        S )Nc                 ó6   •— g | ]}‰j         |         d z   dz  ‘ŒS )r0   rU   rÖ   rè   s     €r-   ré   zifftshift.<locals>.<listcomp>N  s)   ø€ Ð5Ð5Ð5¨1ˆeŒk˜!Œn˜qÑ  QÑ&Ð5Ð5Ð5r/   rê   rì   s   `   r-   r"   r"   K  s?   ø€ å˜C Ñ'Ô'€DØ5Ð5Ð5Ð5°Ð5Ñ5Ô5€EÝŒ:�e˜U DÑ)Ô)Ð)r/   )F)NrV   N)NNN)NrØ   Nr­   )[r4   Úcollections.abcr   r   Útypingr   r   r   r   r1   Útorch._primsÚ_primsrt   Útorch._prims_commonÚ_prims_commonrH   Útorch._decompr	   r
   r   r   Útorch._prims_common.wrappersr   r   Ú__all__ÚNormTyper3   Ú_opsÚopsÚatenrž   Úboolr7   r8   r:   rL   rQ   r�   ra   Ústrrw   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Ñ   rå   Úfft_fftshiftr!   Úfft_ifftshiftr"   r,   r/   r-   ú<module>r     s  ðØ €€€Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à €€€Ø Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø 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Ô*<ð *Èð *ð *ð *ñ ,Ô+ð*ð *ð *r/   