U
    Hvf|                     @   sj   d dl Z d dlZd dlmZ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assert_allcloselog_ndtr	ndtri_exp)assert_func_equalc                 C   s   t t| S Nr   y r   F/tmp/pip-unpacked-wheel-96ln3f52/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  )nprandomZRandomStateZrandom_sample)Zrandom_statepointsr   r   r   uniform_random_points   s    
r   c                
   @   sp   e Zd ZdZejdddddee	j
 gdd Zejd	d
dddg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   | S r   r   r	   r   r   r   <lambda>&       z2TestNdtriExp.test_very_small_arg.<locals>.<lambda>+=T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   s   | S 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   sT   t jt tjddddg}t tj }t ||g}t|}t	||dd d S )Nr   r   )r   )
r   Z	nextafterreducefinfofloatminZtinyarrayr   r   )r   ZbignegZtinynegxresultr   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   infr   r   r   r   test_asymptotesZ   s    zTestNdtriExp.test_asymptotesc                 C   s   t tdstd S )Ng      ?)r   isnanr   AssertionErrorr.   r   r   r   test_outside_domain]   s    z TestNdtriExp.test_outside_domainN)__name__
__module____qualname____doc__pytestmarkZparametrizer   r&   r'   maxr   r$   r,   r/   r2   r   r   r   r   r      s$   
 

	

r   )r7   Znumpyr   Znumpy.testingr   r   Zscipy.specialr   r   Zscipy.special._testutilsr   r   Zfixturer   r   r   r   r   r   <module>   s   

