o
    iG$                     @   sh  d dl Zd dlmZmZ d dlZ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mZ d dlmZ d dlmZ d dlmZmZ eejdgZejjZedZed	d
ejdee	feefgejdg dejdg dejdd dgejdg dejddd	gdd Zed	ddejdee	feefgejdg dejdej ej!ej"ej#ej$gejdd dgejdg dejdd	dgdd Z%ed	d
ejde
efeefgejdg dejdg dejdg dejddd	gd d! Z&ed	ddejde
efeefgejdg dejdg d"ejdej ej!ej"ej#ej$gejdg dejddd	gd#d$ Z'ed	d
ejd%g d&ejdg dejdg dd'd( Z(ed	d
ejd%eee
egejdg dd)d* Z)ed	d
ejdg d+ejd,ed-fedfed-fgd.d/ Z*ed0d1d	d2ejdg d+d3d4 Z+ed0d1d	d2ejdg d+ejd%eegd5d6 Z,ed0d1d	d2ejdg d+ejd%eegd7d8 Z-ed	d9dejd%ee	e
eeeeegd:d; Z.dS )<    N)assert_allcloseassert_array_equal)dctidctdctnidctndstidstdstnidstn)fftpack)array_api_compatible)xp_copyxp_assert_closeskip_xp_backends   T)cpu_onlyzforward, backwardtype)   r         n)r   r   r      
      axisr   norm)NbackwardorthoforwardorthogonalizeFc                 C   s   | tj||}| |||||d}	||	||||d}
t|
| dgd }d||< | tjt |	|dd}|||||||d}t|| d S )N)r   r   r    r   r   r   r   r   edgemoder    )asarraynprandomrandr   pad)r   r   r   r   r   r   r    xpxyzr+   y2z2 r2   ^/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/fft/tests/test_real_transforms.pytest_identity_1d   s   	

r4   z/`overwrite_x` only supported for NumPy backend.)Znp_onlyreasondtypeoverwrite_xc                 C   s   t jdd|}| }| |||||d}	|	 }
||	||||d}|s:t||ddd t|| t|	|
 d S t||ddd d S )N      )r   r   r7   ư>ZrtolZatol)r(   r)   r*   astypecopyr   r   )r   r   r   r6   r   r   r7   r-   x_origr.   y_origr/   r2   r2   r3   test_identity_1d_overwrite-   s   
r@   zshape, axes)	)r   r   r   )rA   r   )rA   N)rA   r   r   )r      N)rC   rB   )r   r      N)rE   r   )rE   )r   r   c                 C   s   | tj|}|d urt||}| |||||d}	||	||||d}
t|
| |d u r5dg|j }nt|trEdg|j }d||< ndg|j }|D ]}d||< qM| tjt |	|dd}|||||||d}t|| d S )N)axesr   r    r"   r!   r#   r$   r&   )	r'   r(   r)   taker   ndim
isinstanceintr+   )r   r   r   shaperG   r   r    r,   r-   r.   r/   r+   ar0   r1   r2   r2   r3   test_identity_ndG   s"   



rN   ))r   r   r   )rO   r   )rO   Nc                 C   s   t j||}| }	|d urt ||}| ||||d}
|
 }||
|||d}|r7t||	ddd d S t||ddd t||	 t|
| d S )N)rG   r   r:   r;   )r(   r)   r<   r=   rH   r   r   )r   r   r   rL   rG   r6   r   r7   r-   r>   r.   r?   r/   r2   r2   r3   test_identity_nd_overwritev   s   
rP   func)r   r   r   r
   c                 C   sT   t jdd}|tt| |||d}||}tt| |||d}t|| d S )Nr9   r   )r   )r(   r)   r*   r'   getattrr   fftr   )rQ   r   r   r,   r-   Zfftpack_resZfft_resr2   r2   r3   test_fftpack_equivalience   s
   
rT   c                 C   sL   | tjd}dD ]\}}| ||||d}| |||d}t|| qd S )Nd   ))r   F)r   F)r   Tr   r   r    )r   r   r'   r(   r)   r*   r   )rQ   r   r,   r-   r   r   rM   br2   r2   r3   test_orthogonalize_default   s   rY   )r   r   r   z
func, typer   c                 C   s@   | tjd}| |||dd}| |||dd}t|| d S )NrU   TrV   FrW   )rQ   r   r   r,   r-   y1r0   r2   r2   r3   test_orthogonalize_noop   s   r[   z	jax.numpyz)jax arrays do not support item assignment)r5   r   c                 C   s   | tjd}t||d}|d  t9  < |d  t9  < t|d| dd}t|d| dd}|d  t  < |d  t  < t|| d S )	NrU   r,   r   r   TrV   F)r'   r(   r)   r*   r   SQRT_2r   r   )r   r,   r-   x2rZ   r0   r2   r2   r3   test_orthogonalize_dct1   s   r`   c                 C   s\   | tjd}| |d|dd}| |d|dd}|| tkr dnd  t  < t|| d S )NrU   r   TrV   Fr   r]   )r'   r(   r)   r*   r   r^   r   )rQ   r   r,   r-   rZ   r0   r2   r2   r3   test_orthogonalize_dcst2   s
   ra   c                 C   sh   | tjd}t||d}|| tkrdnd  t9  < | |d|dd}| |d|dd}t|| d S )	NrU   r\   r   r]   r   TrV   F)r'   r(   r)   r*   r   r   r^   r   )rQ   r   r,   r-   r_   rZ   r0   r2   r2   r3   test_orthogonalize_dcst3   s   rb   z,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'   )r,   rQ   r-   r2   r2   r3   test_array_like   s
   rc   )/numpyr(   Znumpy.testingr   r   ZpytestmathZ	scipy.fftr   r   r   r   r   r	   r
   r   rS   Zscipyr   Zscipy.conftestr   Zscipy._lib._array_apir   r   markZusefixturesZ
pytestmarkr   sqrtr^   Zparametrizer4   Zfloat16Zfloat32Zfloat64Z	complex64Z
complex128r@   rN   rP   rT   rY   r[   r`   ra   rb   rc   r2   r2   r2   r3   <module>   s    (
			