a
    ‡ù»jÆ  ã                   @   sÒ   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 e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dd„ Zej dddg¡dd„ ƒZdS )é    N)ÚfhtÚifhtÚ	fhtoffset)Úpoch)Úarray_api_compatible)Úxp_assert_closec           
      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   úAE:\soccer\ml_env\Lib\site-packages\scipy/fft/tests/test_fftlog.pyÚf   s    z&test_fht_agrees_with_fftlog.<locals>.féüÿÿÿé   é   r   r   g333333Ó?ç        ©ÚoffsetÚbias)gÿÐ=lS¿gá–l¾1£Z?gp¢Rßð_¿gœ~]’
o?g€°0d±@?g–Åíº…œ?g0¨2†u¹?g7c4UoÝ?gUËû�/5Ô?gÀÞ 3²ßJ¿g QÊi©«I¿g!m¿ÞÃ9?g áä®1¿g?ˆàJÇb7?g »tj3B¿g šÂ	'K?)Zdtype©r   )g  Dy‡Ó?g ò¾T Iã¾g Ýí9¥4?g°B ûÖúM?gÈQº89Êw?g�ÀÄ¥™š?gZøT3%Á?gz;_x˜ÛÞ?g9%PÔúÑ?gv@žÀ‹Ý†¿gA”AÊÙY]?gayiìég;¿gGÁI<!?g FÌÚ\m¿gÿH¬žÒ ?g @(ÙLGü¾gš™™™™™é?)gáÿ×Uê_Àg0E>y7äÅ?g4â¬ž	F»?gR^Ø¡*9ª¿g¤-ägÑÿš?gÁ“Ó!a‘?gRÃèÞ´ À?gÍmžMUUÞ?g¨ å ð.Ò?g'?£eH�¿gŸZ7ZòÇP?gâmÜ·`�%¿gCGÎïT?gçž2œTà¾gÒ…°ýêuÀ>gå/”&ô®¾gš™™™™™é¿)göGãË3Øâ>g`4]<]?g[8„²ÛÖ+?g,8GédŠP?g¢°¢
¦u?g›,×—$5™?g~„}ç£¿?grƒa,‹4Þ?gœV—�°„Ò?gh¸`>E‘¿gDgôyÙ–?g¸P2�ZSŽ¿gÍ†ŽË�©Å?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   sz   t j d¡}| | | ¡¡}| dd¡}| dd¡}|rHt||||d�}t|||||d�}	t|	||||d�}
t	|
|ƒ d S )Nì   ÍE3  éÿÿÿÿr   éþÿÿÿr	   ©Úinitialr   r   )
r
   ÚrandomÚRandomStater   Ústandard_normalÚuniformr   r   r   r   )r"   r   r   r    r   Úrngr   r   r   ÚAZa_r   r   r   Útest_fht_identityZ   s    r0   c                 C   sn  t j d¡}|  | d¡¡}| dd¡}d\}}tjdd��,}t||||d� |rZJ d	ƒ‚W d   ƒ n1 sn0    Y  d
\}}tjdd��,}t||||d� |rªJ d	ƒ‚W d   ƒ n1 s¾0    Y  d\}}t	 
t¡�,}t||||d� |søJ dƒ‚W d   ƒ n1 �s0    Y  d
\}}t	 
t¡�.}t||||d� |�sJJ dƒ‚W d   ƒ n1 �s`0    Y  d S )Nr%   r#   r&   r   )g      Àr!   T)Úrecordr   z)fht warned about a well-defined transform)g      Àç      à?)g      Àr2   z+fht did not warn about a singular transformz,ifht did not warn about a singular transform)r
   r*   r+   r   r,   r-   ÚwarningsÚcatch_warningsr   ÚpytestZwarnsÚWarningr   )r   r.   r   r   r   r   r1   r   r   r   Útest_fht_special_casesn   s&    **,r7   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&   r2   r'   r	   r   r   r(   r   )r
   r*   r+   r-   r   r   r   r   r   r   r   r   )r"   r   r.   r   Úgammar   r   r   r   r/   ÚkZAtr   r   r   Útest_fht_exact�   s    (r;   )r3   Únumpyr
   r5   Zscipy.fft._fftlogr   r   r   Zscipy.specialr   Zscipy.conftestr   Zscipy._lib._array_apir   Z
pytestmarkr   ÚmarkZparametrizer0   r7   r;   r   r   r   r   Ú<module>   s    L!