
    tKg                        d Z ddlZddlZddlmZ ddlmZm	Z	m
Z
mZmZmZmZ 	 	 d dddZ ej                   ed	      Zd
e_         ej                   ed      Zde_        	 	 d dddZ ej                   ed	      Zde_         ej                   ed      Zde_        	 	 d dddZ ej                   ed	      Zde_         ej                   ed      Zde_        d!dddZd!dddZ	 	 d"dddZ ej                   ed	      Zde_         ej                   ed      Zde_        	 	 d"dddZ ej                   ed	      Z de _         ej                   ed      Z!de!_        	 	 d"dddZ" ej                   e"d	      Z#de#_         ej                   e"d      Z$de$_        d#dZ% ej                   e%d	      Z&de&_         ej                   e%d      Z'de'_        y)$z(
Discrete Fourier Transforms - basic.py
    N   )pypocketfft)	_asfarray_init_nd_shape_and_axes_datacopied
_fix_shape_fix_shape_1d_normalization_workersF)planc                   |t        d      t        |      }|xs t        ||      }t        ||       }t	        |      }|t        |||      \  }}	|xs |	}n0|j                  |   dk  rd|j                  |    d}
t        |
      |r|j                  j                  dk(  r|nd}t        j                  ||f| |||      S )z@ Return discrete Fourier transform of real or complex sequence. NFPassing a precomputed plan is not yet supported by scipy.fft functionsr   invalid number of data points () specifiedc)NotImplementedErrorr   r   r
   r   r	   shape
ValueErrordtypekindpfftc2c)forwardxnaxisnormoverwrite_xworkersr   tmpcopiedmessageouts               ^/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/fft/_pocketfft/basic.pyr   r      s     ! #E F 	F
A,C4S!!4K$(DwG}#CD1V!+V	41	3CIIdO3DKP!!#))..C"73TC88C$'4g>>    Tfftifftc                X   |t        d      t        |      }t        ||       }t        |      }t	        j
                  |      st        d      |t        |||      \  }}	n.|j                  |   dk  rt        d|j                  |    d      t        j                  ||f| |d|      S )z8
    Discrete Fourier transform of a real sequence.
    Nr   x must be a real sequencer   r   r   )r   r   r
   r   np	isrealobj	TypeErrorr	   r   r   r   r2c
r   r   r   r   r   r   r   r   r    _s
             r$   r-   r-   (   s    
 ! #E F 	F
A,C$(DwG<<344}sAt,Q	41	:399T?:K;WXX 88C$'4w??r%   rfftihfftc          	      N   |t        d      t        |      }t        ||       }t        |      }t	        j
                  |      r|dz   }|)|j                  |   dz
  dz  }|dk  r%t        d| d      t        ||dz  dz   |      \  }}	t        j                  ||f|| |d|      S )zG
    Return inverse discrete Fourier transform of real sequence x.
    Nr                   r      zInvalid number of data points (r   )r   r   r
   r   r*   r+   r   r   r	   r   c2rr.   s
             r$   r5   r5   F   s    
 ! #E F 	F
A,C$(DwG 
||CCi 	yYYt_q A%q5>qcMNNsQTQJ5Q 88C$!WdD'BBr%   hfftirfftc                <    |t        d      t        | |||||      S )z@
    2-D discrete Fourier transform of a Hermitian sequence
    r   )r   hfftnr   saxesr   r   r   r   s          r$   hfft2r=   h   s4    
 ! #E F 	FAtT;88r%   c                <    |t        d      t        | |||||      S )zH
    2-D discrete inverse Fourier transform of a Hermitian sequence
    r   )r   ihfftnr:   s          r$   ihfft2r@   s   s4    
 ! #E F 	F!QdK99r%   c                ^   |t        d      t        |      }t        |||      \  }	}|xs t        ||      }t	        |      }t        |      dk(  r|S t        ||	|      \  }}
|xs |
}t        ||       }|r|j                  j                  dk(  r|nd}t        j                  ||| |||      S )z=
    Return multidimensional discrete Fourier transform.
    Nr   r   r   )r   r   r   r   r   lenr   r
   r   r   r   r   )r   r   r;   r<   r   r   r   r   r    r   r!   r#   s               r$   c2cnrC   ~   s    
 ! #E F 	F
A,C)#q$7KE44S!!4KwG
4yA~S%.KC'K$(D#))..C"73TC88Cwc7;;r%   fftnifftnc                F   |t        d      t        |      }t        j                  |      st	        d      t        |||      \  }	}t        ||	|      \  }}
t        ||       }t        |      }t        |      dk(  rt        d      t        j                  ||| |d|      S )z@Return multidimensional discrete Fourier transform of real inputNr   r)   r   #at least 1 axis must be transformed)r   r   r*   r+   r,   r   r   r
   r   rB   r   r   r-   )r   r   r;   r<   r   r   r   r   r    r   r/   s              r$   r2cnrH      s     ! #E F 	F
A,C<<344)#q$7KE4UD)FC$(DwG
4yA~>?? 88CwdG<<r%   rfftnr?   c          	         |t        d      t        |      }t        j                  |      r|dz   }|du }	t	        |||      \  }
}t        |      dk(  rt        d      t        |
      }
|	r|j                  |d      dz
  dz  |
d<   t        ||       }t        |      }|
d   }|
d   dz  dz   |
d<   t        t        ||
|            \  }}t        j                  |||| |d|      S )	zDMultidimensional inverse discrete fourier transform with real outputNr   r3   r   rG   r   r4   )r   r   r*   r+   r   rB   r   listr   r
   r   tupler   r   r5   )r   r   r;   r<   r   r   r   r   r    noshaper   lastsizer/   s                r$   c2rnrP      s    ! #E F 	F
A,C 
||CCi4iG)#q$7KE4
4yA~>??KEWWT"X&*a/b	$(DwG RyHra1$E"I:c5$/0FC 88Cx$gFFr%   r9   irfftnc           	         t        |      }|xs t        ||      }t        ||       }t        d      }|j                  j
                  dk(  rt        d      |t        |||      \  }}|xs |}n.|j                  |   dk  rt        d|j                  |    d      |r|nd}	t        j                  ||f| | ||	|      S )z=FFT of a real sequence, returning fftpack half complex formatNr   r)   r   r   r   )r   r   r
   r   r   r   r,   r	   r   r   r   r2r_fftpack)
r   r   r   r   r   r   r    r   r!   r#   s
             r$   rS   rS      s    
A,C4S!!4K$(DtnG
yy~~344}#CD1V!+V	41	:399T?:K;WXX34CC$'7D#wOOr%   rfft_fftpackirfft_fftpack)NrK   NFN)N)rK   NFN)NNNFN)NrK   NF)(__doc__numpyr*   	functools r   r   helperr   r   r   r   r	   r
   r   r   partialr&   __name__r'   r-   r0   r1   r5   r6   r7   r=   r@   rC   rD   rE   rH   rI   r?   rP   r9   rQ   rS   rT   rU    r%   r$   <module>r_      sX     !   =B?"?. iT"ye$ =B@"@0 yd#	#u% =BC"C8 yd#	#u%99:: @E<#<4 yt$	$&?D=#=. 		$%			4	' @E G# GF 		$%			4	'P* !y  d3& !	!!+u5( r%   