
    Vpf                    $   d dl mZ d dlmZ d dlmZ d dlZd dl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 d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZmZ ddgZd(dZ  eed          d)d            Z!d Z"d Z#d Z$d  Z%d! Z&d" Z' eed#          d$             Z(d% Z)d& Z*d' Z+ ed          Z,e,-                    e"           e,.                    e%            ej/        e,e&            ej0        e,e*           e+ej1        e,<   dS )*    )annotations)Sequence)partialN)lax)dispatch)jitlinear_transposeShapeDtypeStruct)	Primitiveis_constant_shape)ad)batching)mlir)hlo)
xla_client)promote_dtypes_complexpromote_dtypes_inexactfftfft_psstrreturnxla_client.FftTypec                    | dv rt           j        j        S | dv rt           j        j        S | dv rt           j        j        S | dv rt           j        j        S t          d|  d          )N)r   FFT)ifftIFFT)rfftRFFT)irfftIRFFTzUnknown FFT type '')r   FftTyper   r   r   r!   
ValueError)r   s    P/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/jax/_src/lax/fft.py_str_to_fft_typer&   (   s{    .!!""""##
.!...
/
//    )      )static_argnumsfft_typexla_client.FftType | strfft_lengthsSequence[int]c                   t          |t                    rt          |          }n0t          |t          j                  r|}nt          d| d          |t          j        j        k    r5t          j        |           rt          d          t          |           \  } nt          |           \  } t          |          dk    r| S t          |          }t                              | ||          S )NzUnknown FFT type value 'r"   z*only real valued inputs supported for rfftr   r+   r-   )
isinstancer   r&   r   r#   	TypeErrorr   npiscomplexobjr$   r   r   lentupler   bind)xr+   r-   typs       r%   r   r   4   s    # <
8
$
$CC(J.// <
CC
:x:::
;
;;J###	q ECDDD		"	"BAA		"	"BAHk""+	A	=	==r'   c                <    t          j        t          | ||          S )Nr0   )r   apply_primitiver   )r8   r+   r-   s      r%   	_fft_implr<   I   s    		!%X;	W	W	WWr'   c                v    t          j        d|           t          j        dt           j                  z   j        S )N )r3   zeros	complex64dtyperA   s    r%   <lambda>rC   L   s(    U 3 3bhr2<6P6P PW r'   c                4    t          j        |           j        S N)r3   finforA   rB   s    r%   rC   rC   M   s    BHUOO1 r'   c                   t          |          | j        k    rt          d| j         d| d          |t          j        j        k    r| j        t          j	        t          j
        fvrt          d| j                   | j        t          |           d          |k    rt          d| j         d|           | j        d t          |                    |d d         z   |d         dz  d	z   fz   }t          | j                  }nL|t          j        j        k    rt          j        | j        t          j                  st          d
| j                   | j        t          |           d         |d d         k    rt          d| j         d|          | j        d t          |                    |z   }t          | j                  }nt          j        | j        t          j                  st          d| j                   | j        t          |           d          |k    rt          d| j         d|           | j        }| j        }|                     ||          S )NzFFT input shape z< must have at least as many input dimensions as fft_lengths .z+RFFT input must be float32 or float64, got zRFFT input shape z/ minor dimensions must be equal to fft_lengths r)   r(   z1IRFFT input must be complex64 or complex128, got zIRFFT input shape zS minor dimensions must be equal to all except the last fft_length, got fft_lengths=z/FFT input must be complex64 or complex128, got )shaperA   )r5   ndimr$   rJ   r   r#   r   rA   r3   float32float64_complex_dtyper!   
issubdtypecomplexfloating_real_dtypeupdate)r8   r+   r-   rJ   rA   s        r%   fft_abstract_evalrS   O   s   
 F F F7BF F F G G G#(((wrz2:...NQWNNOOOwK   !!"k11 ?17 ? ?1<? ? @ @ @W's;''''(;ss+;;B1$q(*+E17##EE:%+++=""455 % $'$ $ % % %wK   #$CRC(888 (AG ( ($( ( ) ) ) G&c+&&&&'+5E  EE=""455 % $'$ $ % % %wK   !!"k11 ?!' ? ?1<? ? @ @ @GEGE	
U	+	++r'   c                   t          |          st          d          t          j        |t          j                            |j                  t          j        |                    j	        gS )NzZShape polymorphism for FFT with non-constant fft_length is not implemented for TPU and GPU)
r   NotImplementedErrorr   FftOpFftTypeAttrgetnamer   dense_int_arrayresult)ctxr8   r+   r-   s       r%   _fft_loweringr]   q   sb    	;	'	' |
z
{
{{	i3?&&x}55$[113 339
 r'   c                v    t          | t          j        j        |          }|d         }|dd |dz  dz   f         S )NrI   .r)   r(   )r   r   r#   r   )r8   r-   yns       r%   _naive_rfftra   {   s=    	!Z#[11!"o!	
3
!Q$(
?	r'   r(   c                R   | j         d t          |                    |z   }t          |t          | j                            }t          t          t          |          |          } ||           \  }|j        t          | j                  k    sJ |j        | j        f            |S )N)r-   )rJ   r5   r
   rQ   rA   r	   r   ra   )tr-   dummy_shapedummy_primal	transposer[   s         r%   _rfft_transposerg      s     *#k****+k9+!+{17/C/CDD,k{333\C C)IaLL'&	QW--	-	-	-ag/F	-	-	-	-r'   c           	     Z   t          | t          j        j        |          }|j        d         }|d         dz  }t          t          j        | |j                  }t          j	         |dd           |d|dz
  |z   f           |dd|z
  f          gd	
          }dt          j        |          z  }|t          j        |t          |j        dz
                      z  |z  }|j        t          | j                  k    sJ |j        | j        f            t          j        |          S )NrI   r)   rB   g      ?)r(   )rJ   g       @r(   r   )	dimension)r   r   r#   r   rJ   r   r   	full_likerA   concatenatemathprodexpand_dimsrangerK   rN   conj)	rc   r-   r8   r`   is_oddfullmaskscaleouts	            r%   _irfft_transposerv      s0   
 
!Z$k22!gbk!r?Q&		1	1	1$	tCttCA()))tCF
}%%%' 	
 
 
$
 di$$
$%eAFQJ&7&78881<#	nQW--	-	-	-	17/C	-	-	- 
#r'   c                    |t           j        j        k    rt          | |          }n7|t           j        j        k    rt          | |          }nt          | ||          }|fS rE   )r   r#   r   rg   r!   rv   r   )rc   operandr+   r-   r[   s        r%   _fft_transpose_rulery      s^    #(((Q,,FF:%+++a--FFHk**F	.r'   c                d    | \  }|\  }t          j        ||d          }t          |||          dfS )Nr   )r   moveaxisr   )batched_args
batch_dimsr+   r-   r8   bds         r%   _fft_batching_ruler      s;    "!#"2q!!!	Q+	&	&	))r'   )r   r   r   r   )r+   r,   r-   r.   )2
__future__r   collections.abcr   	functoolsr   rl   numpyr3   jaxr   jax._srcr   jax._src.apir   r	   r
   jax._src.corer   r   jax._src.interpretersr   r   r   jax._src.lib.mlir.dialectsr   jax._src.libr   jax._src.numpy.utilr   r   __all__r&   r   r<   rN   rQ   rS   r]   ra   rg   rv   ry   r   r   def_impldef_abstract_evalregister_lowering
deflinear2primitive_batchersr>   r'   r%   <module>r      s   # " " " " " $ $ $ $ $ $                        @ @ @ @ @ @ @ @ @ @ 6 6 6 6 6 6 6 6 $ $ $ $ $ $ * * * * * * & & & & & & * * * * * * # # # # # # N N N N N N N N 	

0 
0 
0 
0 	V$$$> > > %$>(X X X XW11 ,  ,  ,D    
 	Q     *  * * * 		% y      ) * * *  um , , , e( ) ) )%7 E " " "r'   