U
    »mœd»  ã                   @   sÆ   d dl Z d dlZd dlmZ d dlZd dlmZmZm	Z	 d dl
mZ dd„ Zej ddd	g¡ej d
dddg¡ej dd ddg¡ej dddg¡dd„ ƒƒƒƒZdd„ Zej dddg¡dd„ ƒZdS )é    N)Úassert_allclose)ÚfhtÚifhtÚ	fhtoffset)Úpochc            	      C   sx  dd„ } t  ddd¡}t  |d |d  ¡}d}d	}d	}| ||ƒ}t|||||d
�}ddddddddddddddddg}t||ƒ t|||d�}t|||||d
�}ddddd d!d"d#d$d%d&d'd(d)d*d+g}t||ƒ d,}t|||d�}t|||||d
�}d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<g}t||ƒ d=}t|||d�}t|||||d
�}d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMg}t||ƒ d S )NNc                 S   s    | |d  t  | d  d ¡ S )Né   é   )ÚnpÚexp)ÚrÚmu© r   úT/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/fft/tests/test_fftlog.pyÚf   s    z&test_fht_agrees_with_fftlog.<locals>.féüÿÿÿé   é   r   r   g333333Ó?ç        ©ÚoffsetÚbiasgÿÐ=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?©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Úlogr   r   r   )	r   r   Údlnr   r   r   ÚaZoursZtheirsr   r   r   Útest_fht_agrees_with_fftlog
   s¨    
       ù
       ù
       ù
       ùr   ÚoptimalTFr   r   ç      ð?g      ð¿r   gš™™™™™¹?gš™™™™™¹¿Úné@   é?   c           
      C   st   t j d¡}| | ¡}| dd¡}| dd¡}|rBt||||d�}t|||||d�}t|||||d�}	t||	ƒ d S )Nì   ÍE3  éÿÿÿÿr   éþÿÿÿr   ©Úinitialr   r   )	r	   ÚrandomÚRandomStateÚstandard_normalÚuniformr   r   r   r   )
r   r   r   r   Úrngr   r   r   ÚAZa_r   r   r   Útest_fht_identityR   s    
r-   c               	   C   s  t j d¡} |  d¡}|  dd¡}d\}}tjdd��"}t||||d� |rTtd	ƒ‚W 5 Q R X d
\}}tjdd��"}t||||d� |r�td	ƒ‚W 5 Q R X d\}}t	 
t¡�"}t||||d� |sÊtdƒ‚W 5 Q R X d
\}}t	 
t¡�$}t||||d� |�stdƒ‚W 5 Q R X d S )Nr"   r    r#   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	   r'   r(   r)   r*   ÚwarningsÚcatch_warningsr   ÚAssertionErrorÚpytestZwarnsÚWarningr   )r+   r   r   r   r   r.   r   r   r   Útest_fht_special_casesf   s&    
r5   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#   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    "r9   )r0   Únumpyr	   Znumpy.testingr   r3   Zscipy.fft._fftlogr   r   r   Zscipy.specialr   r   ÚmarkZparametrizer-   r5   r9   r   r   r   r   Ú<module>   s   H!