o
    i                     @   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   U/home/kim/smarthome/.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   Zfloat64r   r   )
xpr   r   dlnr   r   r   aZoursZ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!>)Zrtol)
r   randomRandomStater"   standard_normaluniformr   r   r   r   )r)   r   r   r'   r#   rngr%   r$   r   AZa_r   r   r   test_fht_identity]   s   r7   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*   r-   r   )g      r(   T)recordr   z)fht warned about a well-defined transform)g            ?)g      r9   z+fht did not warn about a singular transformz,ifht did not warn about a singular transform)r   r1   r2   r"   r3   r4   warningscatch_warningsr   pytestZwarnsWarningr   )r#   r5   r%   r$   r   r   r8   r   r   r   test_fht_special_casess   s.   "r>   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      r-   r9   r.   r   r   r   r/   r   )r   r1   r2   r4   r    r"   r!   r   r   r   r   r   )r)   r#   r5   r   gammar   r%   r$   r   r6   kZAtr   r   r   test_fht_exact   s   (rB   z,array-likes only supported for NumPy backend)Z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#   rD   xr   r   r   test_array_like   s
   $rF         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
   )r0   r   r   r-   )Zaxisc                    s    | |d    | d  d  S r   )r   )rE   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)   oneZxp_testr   r   r$   r   rA   r   Za_rZfht_valZa_kZrel_errr   rJ   r   test_gh_21661   s   


rP   )r:   rK   numpyr   r<   Zscipy.fft._fftlogr   r   r   Zscipy.specialr   Zscipy.conftestr   Zscipy._lib._array_apir   r   r	   markZusefixturesZ
pytestmarkr
   r&   Zparametrizer7   Zthread_unsafer>   rB   rF   rP   r   r   r   r   <module>   s6    L
#
