o
    Eb                     @   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
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)assert_allclose)fhtifht	fhtoffset)pochc            	      C   s  dd } t ddd}t |d |d  }d}d	}d	}| ||}t|||||d
}g d}t|| t|||d}t|||||d
}g d}t|| d}t|||d}t|||||d
}g d}t|| d}t|||d}t|||||d
}g d}t|| d S )Nc                 S   s    | |d  t | d  d  S )N      )npexp)rmu r   =/usr/lib/python3/dist-packages/scipy/fft/tests/test_fftlog.pyf   s    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?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logr   r   r   )	r   r   dlnr   r   r   aZoursZtheirsr   r   r   test_fht_agrees_with_fftlog
   s0   



r   optimalTFr   )r         ?g      r   )r   g?gn@   ?   c           
      C   st   t jd}|| }|dd}|dd}|r!t||||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   sd  t jd} | d}| dd}d\}}tjdd}t||||d |r*J d	W d    n1 s4w   Y  d
\}}tjdd}t||||d |rRJ d	W d    n1 s\w   Y  d\}}t	t
}t||||d |syJ 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      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   pytestZwarnsWarningr   )r+   r   r   r   r   r.   r   r   r   test_fht_special_casesf   s.   
"r4   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   Zgammar   r   r   r   r,   kZAtr   r   r   test_fht_exact   s   "r7   )r0   Znumpyr	   Znumpy.testingr   r2   Zscipy.fft._fftlogr   r   r   Zscipy.specialr   r   ZmarkZparametrizer-   r4   r7   r   r   r   r   <module>   s    H!