o
    ?Hh                     @   s>  d dl Z d dlZd dlZd dlZd dlmZmZmZ d dl	m
Z
 d dlmZ d dlmZmZmZ eejdgZejjZdd Zejd	d
dgejdg dejdg dejdddgdd Zejjdd Zejdddgdd Zed
ddejdeegdd Zejdddgd d! ZdS )"    N)fhtifht	fhtoffset)poch)array_api_compatible)xp_assert_closexp_assert_lessarray_namespaceskip_xp_backendsc           
      C   sN  dd }t ddd}t |d |d  }d}d	}d	}| |||}t|||||d
}g d}	| j|	| jd}	t||	 t|||d}t|||||d
}g d}	| j|	| jd}	t||	 d}t|||d}t|||||d
}g d}	| j|	| jd}	t||	 d}t|||d}t|||||d
}g d}	| j|	| jd}	t||	 d S )Nc                 S   s    | |d  t | d  d  S N      )npexp)rmu r   [/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/scipy/fft/tests/test_fftlog.pyf       z&test_fht_agrees_with_fftlog.<locals>.f      r   r   g333333?        offsetbias)g=lSgl1Z?gpR_g~]
o?g0d@?g?g02u?g7c4Uo?gU/5?gޠ3JgQiIg!m9?g 1g?Jb7?g tj3Bg 	'K?dtyper   )g Dy?g TIg 94?gB M?gQ89w?gĥ?gZT3%?gz;_x?g9%P?gv@݆gAAY]?gayig;gGI<!?g F\mgH ?g @(LGg?)gU_g0E>y7?g4⬞	F?gR^ء*9g-g?g!a?gR޴ ?gmMUU?g .?g'?eHgZ7ZP?gmܷ`%gCGT?g2Tg҅u>g/&g)gG3>g`4]<]?g[8+?g,8GdP?g
u?g,ח$5?g~}?gra,4?gV?gh`>EgDgyٖ?gP2ZSg͆˝?gܺJ?g[U+@g"%@)r   logspacelogasarrayr   float64r   r   )
xpr   r   dlnr   r   r   aourstheirsr   r   r   test_fht_agrees_with_fftlog   s8   


r)   optimalTFr   )r         ?g      r   )r   g?gn@   ?   c                 C   s~   t jd}||| }|dd}|dd}|r$t||||d}t|||||d}	t|	||||d}
t	|
|dd	 d S )
N   E3  r   r   initialr   r   gv!>)rtol)
r   randomRandomStater"   standard_normaluniformr   r   r   r   )r,   r   r   r*   r$   rngr&   r%   r   Aa_r   r   r   test_fht_identity]   s   r<   c                 C   sj  t jd}| |d}|dd}d\}}tjdd}t||||d |r-J d	W d    n1 s7w   Y  d
\}}tjdd}t||||d |rUJ d	W d    n1 s_w   Y  d\}}t	
t}t||||d |s|J dW d    n1 sw   Y  d
\}}t	
t}t||||d |sJ dW d    d S 1 sw   Y  d S )Nr/   r-   r0   r   )g      r+   T)recordr   z)fht warned about a well-defined transform)g            ?)g      r>   z+fht did not warn about a singular transformz,ifht did not warn about a singular transform)r   r5   r6   r"   r7   r8   warningscatch_warningsr   pytestwarnsWarningr   )r$   r9   r&   r%   r   r   r=   r   r   r   test_fht_special_casess   s.   "rD   c                 C   s   t jd}|dd}|d| d}t dd| }||| }t |d |d  }t||d	|d
}t|||||d}	t 	||d d d  }
|d|
 | t
|d | d | }t|	| d S )Nr/   r      r0   r>   r1   r   r   r   r2   r   )r   r5   r6   r8   r    r"   r!   r   r   r   r   r   )r,   r$   r9   r   gammar   r&   r%   r   r:   kAtr   r   r   test_fht_exact   s   (rI   z,array-likes only supported for NumPy backend)np_onlyreasonopc                 C   sR   ddgddggddgddggddgddggg}t ||dd|| |dd d S )Nr+   g       @)r   r"   )r$   rL   xr   r   r   test_array_like   s
   $rN         c                    s     d}t|}d}tdd|}t|d |d  }t|dtd |d} j ||jd	}t||j	|d
d } fdd}	|	||}
t
|
|||d}|	||}  || | }t|  dd  d S )Nr+   r   ir   r   i
   )r3   r   r   r0   )axisc                    s    | |d    | d  d  S r   )r   )rM   r   r$   r   r   r      r   ztest_gh_21661.<locals>.f)r   r   g `m3*pCr   )r"   r	   r   r    mathr!   r   r   r   flipr   maxabsr   )r$   r,   onexp_testr   r   r%   r   rG   r   a_rfht_vala_krel_errr   rS   r   test_gh_21661   s   


r^   )r?   rT   numpyr   rA   scipy.fft._fftlogr   r   r   scipy.specialr   scipy.conftestr   scipy._lib._array_apir   r   r	   markusefixtures
pytestmarkr
   r)   parametrizer<   thread_unsaferD   rI   rN   r^   r   r   r   r   <module>   s6    L
#
