o
    	h|                     @   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   V/var/www/vscode/kcb/lib/python3.10/site-packages/scipy/special/tests/test_ndtri_exp.pylog_ndtr_ndtri_exp   s   r   class)scopec                  C   s   t jd} | d}|S )Ni  i  )nprandomRandomStaterandom_sample)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rtolnan_okr   r   )selfr   r   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!   interval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   	nextafterreducefinfofloatmintinyarrayr   r   )r!   bigneg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	J d S )Ng      ?)r   isnanr   r:   r   r   r   test_outside_domain]   s   z TestNdtriExp.test_outside_domainN)__name__
__module____qualname____doc__pytestmarkparametrizer   r/   r0   maxr#   r,   r8   r;   r=   r   r   r   r   r      s    



	
r   )rB   numpyr   numpy.testingr   r   scipy.specialr   r   scipy.special._testutilsr   r   fixturer   r   r   r   r   r   <module>   s    

