o
    Eb	                     @   sf   d dl Z d dlZd dlmZ d dlmZmZ d dlm	Z	 dd Z
e jddd	d
 ZG dd dZdS )    N)assert_equallog_ndtr	ndtri_exp)assert_func_equalc                 C   s   t t| S Nr   y r
   D/usr/lib/python3/dist-packages/scipy/special/tests/test_ndtri_exp.pylog_ndtr_ndtri_exp   s   r   class)Zscopec                  C   s   t jd} | d}|S )Ni  i  )npZrandomZRandomStateZrandom_sample)Zrandom_statepointsr
   r
   r   uniform_random_points   s   
r   c                
   @   sl   e Zd ZdZejdddddee	j
 gdd Zejd	g d
dd Zdd Zdd Zdd ZdS )TestNdtriExpa  Tests that ndtri_exp is sufficiently close to an inverse of log_ndtr.

    We have separate tests for the five intervals (-inf, -10),
    [-10, -2), [-2, -0.14542), [-0.14542, -1e-6), and [-1e-6, 0).
    ndtri_exp(y) is computed in three different ways depending on if y
    is in (-inf, -2), [-2, log(1 - exp(-2))], or [log(1 - exp(-2), 0).
    Each of these intervals is given its own test with two additional tests
    for handling very small values and values very close to zero.
    
test_inputg      $g      Yg    _g@xc                 C   s.   |}|d| d  }t tdd |ddd d S )Ng      ?c                 S      | S r   r
   r   r
   r
   r   <lambda>&       z2TestNdtriExp.test_very_small_arg.<locals>.<lambda>+=TZrtolZnan_okr   r   )selfr   r   Zscaler   r
   r
   r   test_very_small_arg   s   
z TestNdtriExp.test_very_small_argzinterval,expected_rtol)))ir   ))r   ̗`¿-q=))r   ưg|=))r   r   gư>c                 C   s2   |\}}|| | | }t tdd ||dd d S )Nc                 S   r   r   r
   r   r
   r
   r   r   9   r   z/TestNdtriExp.test_in_interval.<locals>.<lambda>Tr   r   )r   intervalZexpected_rtolr   leftrightr   r
   r
   r   test_in_interval+   s   

zTestNdtriExp.test_in_intervalc                 C   s2   t tdd ttj ttj gddd d S )Nc                 S   r   r   r
   r   r
   r
   r   r   A   r   z+TestNdtriExp.test_extreme.<locals>.<lambda>r   Tr   )r   r   r   finfofloatmaxminr   r
   r
   r   test_extreme>   s   
zTestNdtriExp.test_extremec                 C   s$   t ttj dgtj tjg d S )Ng        )r   r   r   infr'   r
   r
   r   test_asymptotesG   s   $zTestNdtriExp.test_asymptotesc                 C   s   t tds	J d S )Ng      ?)r   Zisnanr   r'   r
   r
   r   test_outside_domainJ   s   z TestNdtriExp.test_outside_domainN)__name__
__module____qualname____doc__pytestZmarkZparametrizer   r#   r$   r%   r   r"   r(   r*   r+   r
   r
   r
   r   r      s    



	
	r   )r0   Znumpyr   Znumpy.testingr   Zscipy.specialr   r   Zscipy.special._testutilsr   r   Zfixturer   r   r
   r
   r
   r   <module>   s    

