o
    Ö­jïP  ã                   @   s  d dl Z d dlZd dlZd dlZd dlZd dl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mZmZmZ eej d¡gZejjZdd	„ Zd
d„ ZG dd„ dƒZedd�ej dejejej ej!ej"ej#g¡ej dddg¡ej dejej$ej%ej&ej'ej(g¡dd„ ƒƒƒƒZ)edd�G dd„ dƒƒZ*edd�ej dejej&ej+ej,g¡dd„ ƒƒZ-G dd„ dƒZ.ej dejej&ej+ej,ej%ej(ej/ej0ej1ej2g
¡dd „ ƒZ3ej dd!d"g¡ej dejej&ej,ej%ej(ej0ej1g¡d#d$„ ƒƒZ4dS )%é    N)Úrandom)Úassert_array_almost_equalÚassert_allclose)Úraises)Úarray_api_compatible)Úarray_namespaceÚxp_sizeÚxp_assert_closeÚxp_assert_equalÚskip_xp_backendsc                 C   sz   | t j t jt jt jt jt jt jt jt jt j	t j
t jfv r!|j}|S | t jt jt jt jt jt jfv r6|j}|S td| › �ƒ‚)NzUnknown FFT function: )ÚfftÚfftnÚfft2ÚifftÚifftnÚifft2ÚhfftÚhfftnÚhfft2ÚirfftÚirfftnÚirfft2Ú
complex128ÚrfftÚrfftnÚrfft2ÚihfftÚihfftnÚihfft2Úfloat64Ú
ValueError)ÚfuncÚxpÚdtype© r$   úW/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/fft/tests/test_basic.pyÚget_expected_input_dtype   s   ýúÿþr&   c                 C   sR   t | ƒ}dtj t |¡t|ƒ  }t |¡ dd¡| }tj| t |¡ dd�S )Ny       €       Àéÿÿÿÿé   ©Úaxis)ÚlenÚnpÚpiÚarangeÚfloatÚreshapeÚsumÚexp)ÚxÚLÚphaser$   r$   r%   Úfft1%   s   r6   c                   @   sB  e Zd Zdd„ Zeddd�dd„ ƒZdd	„ Zedd
d�dd„ ƒZdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zej d1ejejej ej!g¡d2d3„ ƒZ"ej d1ej#ej$g¡d4d5„ ƒZ%ej d1ejejej ej!g¡d6d7„ ƒZ&ej d1ej'ej(ej)ej*ej+ej,ej#ej$g¡d8d9„ ƒZ-d:d;„ Z.edd<�ej d=e/j0e/j1g¡d>d?„ ƒƒZ2ej d=d@dAg¡dBdC„ ƒZ3ej d=dDdEg¡dFdG„ ƒZ4eddHd�ej d1ejej5ej'ej(ejejej6ej7ej)ej*ej ej!ej8ej9ej+ej,ej#ej$g¡dIdJ„ ƒƒZ:dKS )LÚTestFFTc              	   C   sˆ   d}|  t|ƒdt|ƒ  ¡}|  t|ƒ¡}dD ])}tt t |d|… ¡¡|d|… ƒ tt t |d|… ¡|¡|d|… ƒ qd S )Né   ù              ð?)	r(   é   é   é€   r8   é5   é•   i  i�  r   )Úasarrayr   r	   r   r   r   r   ©Úselfr"   Úmaxlenr3   ÚxrÚir$   r$   r%   Útest_identity-   s   &*þzTestFFT.test_identityTz&significant overhead for some backends)Únp_onlyÚreasonc              	   C   sŽ   d}|  t|ƒdt|ƒ  ¡}|  t|ƒ¡}td|ƒD ])}tt t |d|… ¡¡|d|… ƒ tt t |d|… ¡|¡|d|… ƒ qd S )Nr8   r9   r(   r   )r?   r   Úranger	   r   r   r   r   r@   r$   r$   r%   Útest_identity_extensive6   s   &*þzTestFFT.test_identity_extensivec              	   C   s–   t dƒdt dƒ  }| t|ƒ¡}| |¡}tt |¡|ƒ ttj|dd�|ƒ ttj|dd�|| |jd|jd�¡ ƒ ttj|dd�|d ƒ d S )Né   r9   Úbackward©ÚnormÚortho©r#   Úforward)r   r?   r6   r	   r   Úsqrtr   ©rA   r"   r3   Úexpectr$   r$   r%   Útest_fft?   s   
ÿzTestFFT.test_fftzsome backends allow `n=0`c                 C   s(   |j g d¢|jd�}tttj|dƒ d S )N©r(   r:   é   rO   r   )r?   r   Úassert_raisesr    r   )rA   r"   r3   r$   r$   r%   Ú
test_fft_nI   s   zTestFFT.test_fft_nc                 C   s\   |  tdƒdtdƒ  ¡}tt t |¡¡|ƒ dD ]}ttjtj||d�|d�|ƒ qd S )NrJ   r9   ©rK   rN   rP   rL   )r?   r   r	   r   r   ©rA   r"   r3   rM   r$   r$   r%   Ú	test_ifftN   s
    ÿzTestFFT.test_ifftc              	   C   sœ   |  tdƒdtdƒ  ¡}tjtj|dd�dd�}tt |¡|ƒ ttj|dd�|ƒ ttj|dd�|| |j d	|jd
�¡ ƒ ttj|dd�|d	 ƒ d S ©N©rJ   é   r9   r(   r)   r   rK   rL   rN   éX  rO   rP   )r?   r   r   r	   r   rQ   r   rR   r$   r$   r%   Ú	test_fft2T   ó   ÿzTestFFT.test_fft2c              	   C   sœ   |  tdƒdtdƒ  ¡}tjtj|dd�dd�}tt |¡|ƒ ttj|dd�|ƒ ttj|dd�|| |j d	|jd
�¡ ƒ ttj|dd�|d	 ƒ d S r\   )r?   r   r   r   r	   r   rQ   r   rR   r$   r$   r%   Ú
test_ifft2]   ra   zTestFFT.test_ifft2c              	   C   s¦   |  tdƒdtdƒ  ¡}tjtjtj|dd�dd�dd�}tt |¡|ƒ ttj|dd�|ƒ ttj|d	d�|| |j d
|jd�¡ ƒ ttj|dd�|d
 ƒ d S )N©rJ   r^   é
   r9   r:   r)   r(   r   rK   rL   rN   ép  rO   rP   )r?   r   r   r	   r   rQ   r   rR   r$   r$   r%   Ú	test_fftnf   s   "ÿzTestFFT.test_fftnc              	   C   s¸   |  tdƒdtdƒ  ¡}tjtjtj|dd�dd�dd�}tt |¡|dd� ttj|d	d
�|dd� ttj|dd
�t |¡| |j d|jd�¡ ƒ ttj|dd
�|d dd� d S )Nrc   r9   r:   r)   r(   r   gH¯¼šò×z>)ÚrtolrK   rL   rN   re   rO   rP   )r?   r   r   r   r	   r   rQ   r   rR   r$   r$   r%   Ú
test_ifftno   s   "þ
þzTestFFT.test_ifftnc              
   C   s°   |j tdƒ|jd�}t|ƒdt|ƒ fD ]A}dD ]!}ttj|||d�tj|j ||jd�||d�d |d d … ƒ qttj||dd�tj||d�| |j ||jd�¡ ƒ qd S )	Né   rO   r:   )NrK   rN   rP   ©ÚnrM   r(   rN   )rk   )	r?   r   r   r   r	   r   r   r   rQ   )rA   r"   r3   rk   rM   r$   r$   r%   Ú	test_rfft|   s   ÿÿÿ"þûzTestFFT.test_rfftc                 C   óP   |  tdƒ¡}tt t |¡¡|ƒ dD ]}ttjtj||d�|d�|ƒ qd S )NrJ   rY   rL   )r?   r   r	   r   r   r   rZ   r$   r$   r%   Ú
test_irfftˆ   ó
    ÿzTestFFT.test_irfftc              	   C   s¤   |j tdƒ|jd�}t |j ||jd�¡d d …d d…f }tt |¡|ƒ ttj|dd�|ƒ ttj|dd�|| |j d|jd�¡ ƒ ttj|dd�|d ƒ d S ©	Nr]   rO   é   rK   rL   rN   r_   rP   )	r?   r   r   r   r   r   r	   r   rQ   rR   r$   r$   r%   Ú
test_rfft2Ž   s   &ÿzTestFFT.test_rfft2c                 C   rm   ©Nr]   rY   rL   )r?   r   r	   r   r   r   rZ   r$   r$   r%   Útest_irfft2—   ro   zTestFFT.test_irfft2c              	   C   sª   |j tdƒ|jd�}t |j ||jd�¡d d …d d …d d…f }tt |¡|ƒ ttj|dd�|ƒ ttj|dd�|| |j d|jd�¡ ƒ ttj|dd�|d ƒ d S ©	Nrc   rO   é   rK   rL   rN   re   rP   )	r?   r   r   r   r   r   r	   r   rQ   rR   r$   r$   r%   Ú
test_rfftn�   s   ,ÿzTestFFT.test_rfftnc                 C   rm   ©Nrc   rY   rL   )r?   r   r	   r   r   r   rZ   r$   r$   r%   Útest_irfftn¦   ro   zTestFFT.test_irfftnc              	   C   sÖ   t dƒdt dƒ  }t t dƒ|t dƒf¡}t ||d d d…  ¡ f¡}| |¡}| |¡}| t |¡¡}tt |¡|ƒ ttj|dd�|ƒ ttj|dd�|| 	|jd|j
d	�¡ ƒ ttj|d
d�|d ƒ d S )Né   r9   r(   r'   rK   rL   rN   rJ   rO   rP   )r   r,   ÚconcatenateÚconjr?   Úrealr   r	   r   rQ   r   )rA   r"   r3   Úx_hermrS   r$   r$   r%   Ú	test_hfft¬   s   

ÿzTestFFT.test_hfftc                 C   sž   t dƒdt dƒ  }t t dƒ|t dƒf¡}t ||d d d…  ¡ f¡}| |¡}| |¡}tt t |¡¡|ƒ dD ]}ttjtj||d�|d�|ƒ q;d S )Nrz   r9   r(   r'   rY   rL   )	r   r,   r{   r|   r?   r	   r   r   r   )rA   r"   r3   r~   rM   r$   r$   r%   Ú
test_ihfft¹   s   

 ÿzTestFFT.test_ihfftc                 C   rm   rs   )r?   r   r	   r   r   r   rZ   r$   r$   r%   Ú
test_hfft2Ã   ro   zTestFFT.test_hfft2c              	   C   s¤   |j tdƒ|jd�}t |j ||jd�¡d d …d d…f }tt |¡|ƒ ttj|dd�|ƒ ttj|dd�|| |j d|jd�¡ ƒ ttj|dd�|d ƒ d S rp   )	r?   r   r   r   r   r   r	   r   rQ   rR   r$   r$   r%   Útest_ihfft2É   s   &þzTestFFT.test_ihfft2c                 C   rm   rx   )r?   r   r	   r   r   r   rZ   r$   r$   r%   Ú
test_hfftnÔ   ro   zTestFFT.test_hfftnc              	   C   sª   |j tdƒ|jd�}t |j ||jd�¡d d …d d …d d…f }t|t |¡ƒ t|tj|dd�ƒ ttj|dd�|| |j d|jd�¡ ƒ ttj|dd�|d ƒ d S ru   )	r?   r   r   r   r   r   r	   r   rQ   rR   r$   r$   r%   Útest_ihfftnÚ   s   ,þzTestFFT.test_ihfftnc           
      C   sl   t ||ƒ}|jtdƒ|d�}g d¢}t|ƒ}|D ]}||j||d�ƒ}|j|||d�|d�}	t||	ƒ qd S )Nrc   rO   )©r   r(   r:   ©r   r:   r(   )r(   r   r:   ©r(   r:   r   )r:   r   r(   )r:   r(   r   ©Úaxes)r&   r?   r   r   Úpermute_dimsr	   )
rA   Úopr"   r#   r3   r‰   Úxp_testÚaÚop_trÚtr_opr$   r$   r%   Ú_check_axeså   s   
ýzTestFFT._check_axesr‹   c                 C   ó   |   ||¡ d S ©N©r�   ©rA   r‹   r"   r$   r$   r%   Útest_axes_standardï   ó   zTestFFT.test_axes_standardc                 C   r‘   r’   r“   r”   r$   r$   r%   Útest_axes_non_standardó   r–   zTestFFT.test_axes_non_standardc           	         óª   t ||ƒ}|jtdƒ|d�‰g d¢}tˆƒ}|D ]:‰ t‡ ‡fdd„tˆjƒD ƒƒ}||jˆˆ d�|d d… dd	�}|j|ˆ|d d… ˆ d d… d	�ˆ d�}t||ƒ qd S )
N©r;   é   é   rO   ©r…   r†   r‡   c                    ó4   g | ]}|ˆ d d… v rdˆj |  nˆj | ‘qS ©Nr:   ©Úshape©Ú.0Úax©r�   r3   r$   r%   Ú
<listcomp>   ó    ,ÿz@TestFFT.test_axes_subset_with_shape_standard.<locals>.<listcomp>rˆ   r:   ©r   r(   ©Úsr‰   ©	r&   r?   r   r   ÚtuplerH   ÚndimrŠ   r	   ©	rA   r‹   r"   r#   r‰   rŒ   r    rŽ   r�   r$   r¤   r%   Ú$test_axes_subset_with_shape_standard÷   s    
ÿÿ ÿ÷z,TestFFT.test_axes_subset_with_shape_standardc           	         r˜   )
Nr™   rO   rœ   c                    r�   rž   rŸ   r¡   r¤   r$   r%   r¥     r¦   zDTestFFT.test_axes_subset_with_shape_non_standard.<locals>.<listcomp>rˆ   r:   r§   r¨   rª   r­   r$   r¤   r%   Ú(test_axes_subset_with_shape_non_standard	  s   
ÿ (ùz0TestFFT.test_axes_subset_with_shape_non_standardc                 C   sà   |j tdƒ|jd�}t|ƒ}|j |¡}t|ƒd }tjtj	ftj
tjftjtjfg}|D ]@\}}|tjkrD|j ||jd�}|j |¡}t|ƒdt|ƒ fD ]}dD ]}	||||	d�}
||
||	d�}
t|j |
¡|ƒ qRqNq-d S )NrJ   rO   r:   rY   rj   )r?   r   r   r   ÚlinalgÚvector_normr   r   r   r   r   r   r   r   r	   )rA   r"   r3   rŒ   Úx_normrk   Ú
func_pairsÚforwÚbackrM   Útmpr$   r$   r%   Útest_all_1d_norm_preserving  s(   


û
ýÿüz#TestFFT.test_all_1d_norm_preserving©rF   r#   c                 C   sÎ   t dƒ |¡}tjtjtjtji}| || ¡}t t |¡¡}t 	t 
|¡¡}t t |¡|jd ¡}t||ƒ t||ƒ t||ƒ |j|jksKJ ‚|jt tj|j¡ksXJ ‚|jt tj|j¡kseJ ‚d S )NrJ   r   )r   Úastyper,   Úfloat16Ú	complex64Ú
longdoubleÚclongdoubler   r   r   r   r   r   r    r   r#   Úresult_typeÚfloat32)rA   r#   r3   Ú
out_dtypesÚ	x_complexÚres_fftÚres_rfftÚres_hfftr$   r$   r%   Útest_dtypes_nonstandard2  s   


zTestFFT.test_dtypes_nonstandardr¿   r   c                 C   sX   |j tdƒt||ƒd�}t t |¡¡}t t |¡|jd ¡}t	||ƒ t	||ƒ d S )NrJ   rO   r   )
r?   r   Úgetattrr   r   r   r   r   r    r	   )rA   r#   r"   r3   rÃ   rÄ   r$   r$   r%   Útest_dtypes_realD  s
   
zTestFFT.test_dtypes_realr»   r   c                 C   sD   t j d¡}|j| d¡t||ƒd�}t t |¡¡}t||ƒ d S )NiÒ  rJ   rO   )r,   r   Údefault_rngr?   rÆ   r   r   r	   )rA   r#   r"   Úrngr3   rÂ   r$   r$   r%   Útest_dtypes_complexN  s   zTestFFT.test_dtypes_complexz,array-likes only supported for NumPy backendc                 C   sJ   ddgddggddgddggddgddggg}t ||ƒ|| |¡ƒƒ d S )Ng      ð?)r	   r?   )rA   r"   r‹   r3   r$   r$   r%   Útest_array_likeW  s
   þzTestFFT.test_array_likeN);Ú__name__Ú
__module__Ú__qualname__rE   r   rI   rT   rX   r[   r`   rb   rf   rh   rl   rn   rr   rt   rw   ry   r   r€   r�   r‚   rƒ   r„   r�   ÚpytestÚmarkÚparametrizer   r   r   r   r   r•   r   r   r—   r®   r   r   r   r   r   r   r¯   r·   r,   rº   r¼   rÅ   rÇ   rÊ   r   r   r   r   r   rË   r$   r$   r$   r%   r7   +   sz    
	



					



ÿ
ý

	
ÿø	r7   Tr¸   r#   ÚorderÚFznon-contiguousr   c                 C   sü   t j d¡}| ddd¡j| dd�}|dkrt  |¡}n|d d d… }t  |d d d… ¡}|j d	¡rMt	d
ƒD ]}|||d�}|||d�}t
||ƒ q7d S |j d¡r|g d¢}	|j d¡rd|	 g d¢¡ |	D ]}
|||
d�}|||
d�}t
||ƒ qfd S t‚)Né*   rš   é   é   F)ÚcopyrÓ   r'   r   rV   r)   )r   r   )r§   )r(   r:   )r   r:   r   ))r   )r(   )r:   Nrˆ   )r,   r   ÚRandomStateÚrandr¹   ÚasfortranarrayÚascontiguousarrayrÌ   ÚendswithrH   r   Úextendr    )r#   rÒ   r   rÉ   ÚXÚYr*   ÚX_resÚY_resr‰   r£   r$   r$   r%   Útest_fft_with_orderi  s,   ýýrâ   )Úcpu_onlyc                   @   sR   e Zd ZdZdZddœdd„Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚTestFFTThreadSafer;   )i   éÈ   N©r"   c                   s~   ‡fdd„‰t  ¡ ‰ˆˆ Ž }‡ ‡‡fdd„t| jƒD ƒ}dd„ |D ƒ dd„ |D ƒ t| jƒD ]}tˆjdd�|d	d
� q/d S )Nc                    s   |  ˆ | Ž ¡ d S r’   )Úput)ÚargsÚq)r!   r$   r%   Úworker–  s   z.TestFFTThreadSafe._test_mtsame.<locals>.workerc                    s   g | ]}t jˆˆ ˆfd �‘qS ))Útargetrè   )Ú	threadingÚThread)r¢   rD   )rè   ré   rê   r$   r%   r¥   �  s    ÿz2TestFFTThreadSafe._test_mtsame.<locals>.<listcomp>c                 S   ó   g | ]}|  ¡ ‘qS r$   )Ústart©r¢   r3   r$   r$   r%   r¥   Ÿ  ó    c                 S   rî   r$   )Újoinrð   r$   r$   r%   r¥   ¡  rñ   é   )Útimeoutz6Function returned wrong value in multithreaded context)Úerr_msg)ÚqueueÚQueuerH   Úthreadsr
   Úget)rA   r!   r"   rè   ÚexpectedÚtrD   r$   )rè   r!   ré   rê   r%   Ú_test_mtsame•  s   ÿþÿzTestFFTThreadSafe._test_mtsamec                 C   s(   |j | j|jd�}| jtj||d� d S ©NrO   ræ   )ÚonesÚinput_shaper   rü   r   ©rA   r"   r�   r$   r$   r%   rT   ª  ó   zTestFFTThreadSafe.test_fftc                 C   ó$   |  | jd¡}| jtj||d� d S ©Ny      ð?        ræ   )Úfullrÿ   rü   r   r   r   r$   r$   r%   r[   ®  ó   zTestFFTThreadSafe.test_ifftc                 C   ó"   |  | j¡}| jtj||d� d S ©Nræ   )rþ   rÿ   rü   r   r   r   r$   r$   r%   rl   ²  ó   zTestFFTThreadSafe.test_rfftc                 C   r  r  )r  rÿ   rü   r   r   r   r$   r$   r%   rn   ¶  r  zTestFFTThreadSafe.test_irfftc                 C   s(   |j | j|jd�}| jtj||d� d S rý   )rþ   rÿ   r»   rü   r   r   r   r$   r$   r%   r   º  r  zTestFFTThreadSafe.test_hfftc                 C   r  r  )rþ   rÿ   rü   r   r   r   r$   r$   r%   r€   ¾  r  zTestFFTThreadSafe.test_ihfft)rÌ   rÍ   rÎ   rø   rÿ   rü   rT   r[   rl   rn   r   r€   r$   r$   r$   r%   rä   �  s    rä   r!   c                 C   sj   t  d¡�}| | dd„ tdƒD ƒ¡}W d   ƒ n1 sw   Y  | t d¡ƒ}|D ]}t||ƒ q+d S )Nr:   c                 S   s   g | ]}t  d ¡‘qS )éd   )r,   rþ   )r¢   Ú_r$   r$   r%   r¥   É  s    z%test_multiprocess.<locals>.<listcomp>r›   r	  )ÚmultiprocessingÚPoolÚmaprH   r,   rþ   r   )r!   ÚpÚresrS   r3   r$   r$   r%   Útest_multiprocessÃ  s   ÿÿr  c                   @   s   e Zd Zdd„ ZdS )Ú
TestIRFFTNc                 C   s<   t j d¡\}}|d|  }| |¡}d}tj||d� d S )N)r:   r;   rš   é    r9   )éþÿÿÿrˆ   )r,   r   r?   r   r   )rA   r"   ÚarÚair�   r‰   r$   r$   r%   Útest_not_last_axis_successÒ  s
   
z%TestIRFFTN.test_not_last_axis_successN)rÌ   rÍ   rÎ   r  r$   r$   r$   r%   r  Ð  s    r  c                 C   s^   | t jt jt jfv r|j}n|j}|jdkr-|jg d¢|d�}| |ƒ tt	| |dd� d S d S )NÚnumpyrU   rO   r:   )Úworkers)
r   r   r   r   r   r   rÌ   r?   rW   r    )r!   r"   r#   r3   r$   r$   r%   Útest_non_standard_paramsÝ  s   
ür  r¿   r   c                 C   s$   |j g d¢t||ƒd�}| |ƒ d S )NrU   rO   )r?   rÆ   )r!   r#   r"   r3   r$   r$   r%   Útest_real_inputï  s   r  )5rö   rì   r  r  r,   rÏ   Únumpy.randomr   Únumpy.testingr   r   r   rW   Ú	scipy.fftr   Úscipy.conftestr   Úscipy._lib._array_apir   r   r	   r
   rÐ   ÚusefixturesÚ
pytestmarkr   r&   r6   r7   rÑ   r¿   r   r¼   r»   r   r½   r   r   r   r   r   râ   rä   r   r   r  r  r   r   r   r   r  r  r$   r$   r$   r%   Ú<module>   sd      @ÿþÿþ2þ
þ