U
    Hvf                     @   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   ?/tmp/pip-unpacked-wheel-96ln3f52/scipy/fft/tests/test_fftlog.pyf   s    z&test_fht_agrees_with_fftlog.<locals>.f      r   r   g333333?        offsetbiasg=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?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/&ggG3>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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 |rtd	W 5 Q R X d\}}t	
t"}t||||d |st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   Z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!