3
Od{0                 @   s&  d Z ddlZddlZddlmZ ddlZddljZ	ddl
mZmZmZ ddlmZmZmZmZmZ yddlZW n ek
r   edZY nX G dd deZG d	d
 d
eZG dd deZdd Zdd Zdd Zd ddZdd Zd!ddZdd Z ej!j"eedG dd deZ#dd Z$dS )"z
Test cdflib functions versus mpmath, if available.

The following functions still need tests:

- ncfdtr
- ncfdtri
- ncfdtridfn
- ncfdtridfd
- ncfdtrinc
- nbdtrik
- nbdtrin
- nrdtrimn
- nrdtrisd
- pdtrik
- nctdtr
- nctdtrit
- nctdtridf
- nctdtrinc

    N)assert_equal)MissingModulecheck_versionFuncData)ArgIntArgget_args	mpf2floatassert_mpmath_equalmpmathc               @   s    e Zd ZdZdd Zdd ZdS )ProbArgz*Generate a set of probabilities on [0, 1].c             C   s   d| _ d| _d S )Nr      )ab)self r   S/var/www/html/virt/lib64/python3.6/site-packages/scipy/special/tests/test_cdflib.py__init__*   s    zProbArg.__init__c             C   sr   t d|d }tjd
tjd|}tjdd|d dddd }dtjtjdd| }tj|||f }tj|S )z5Return an array containing approximatively n numbers.r         g333333?gffffff?F)ZendpointN   ii)maxnpZlogspacelog10ZlinspaceZr_unique)r   nmv1v2Zv3vr   r   r   values/   s    zProbArg.valuesN)__name__
__module____qualname____doc__r   r    r   r   r   r   r   (   s   r   c               @   s   e Zd Zdd Zdd ZdS )EndpointFilterc             C   s   || _ || _|| _|| _d S )N)r   r   rtolatol)r   r   r   r&   r'   r   r   r   r   :   s    zEndpointFilter.__init__c             C   sb   t j|| j | jt j| j | j k }t j|| j | jt j| j | j k }t j||B ddS )NFT)r   absr   r&   r'   r   where)r   xZmask1Zmask2r   r   r   __call__@   s    ((zEndpointFilter.__call__N)r!   r"   r#   r   r+   r   r   r   r   r%   9   s   r%   c               @   s.   e Zd ZdddZdd Zd	d
 Zdd ZdS )_CDFDataT     Nc             C   s   || _ || _|| _|| _|| _|| _|| _|| _|	| _t	|t
sNd | _d | _nf|
d k	s^|d k	rt	|
t
rp|
| _n|
gt| j | _t	|t
r|| _q|gt| j | _nd | _d | _d S )N)spfuncmpfuncindexargspecspfunc_firstdpsr   r&   r'   
isinstancelist
endpt_rtol
endpt_atollen)r   r/   r0   r1   r2   r3   r4   r   r&   r'   r7   r8   r   r   r   r   G   s*    


z_CDFData.__init__c          
   G   s   | j rd| j| }tj|r tjS t|}||| j< tj| j	 | j
t| }t|j}W d Q R X nLtj| j	 | j
| }t|j}W d Q R X t|}||| j< | jt| }|S )N)r3   r/   r   isnannanr6   r1   r   workdpsr4   r0   tupler	   real)r   argsresr   r   r   idmapd   s     




z_CDFData.idmapc             C   s   | j d kr| jd krd S g }xpt| j | j| jD ]Z\}}}|d krX|d krX|jd  q0n|d krfd}n|d krrd}|jt|j|j|| q0W |S )Ng        )r7   r8   zipr2   appendr%   r   r   )r   filtersr&   r'   specr   r   r   get_param_filterx   s    
z_CDFData.get_param_filterc          
   C   s   t | j| j}| j }tt|jd }|jd }tj||d d | j	f j
|jd df}t| j|||| j| jd|dj  d S )Nr   r   F)param_columnsresult_columnsr&   r'   Z
vectorizedparam_filter)r   r2   r   rF   r=   rangeshaper   Zhstackr1   Zreshaper   rA   r&   r'   check)r   r?   rI   rG   rH   r   r   r   rL      s    
*
z_CDFData.check)Tr-   r.   NNNN)r!   r"   r#   r   rA   rF   rL   r   r   r   r   r,   F   s     
r,   c              O   s   t | |}|j  d S )N)r,   rL   )r   kwdr   r   r   _assert_inverts   s    
rO   c             C   sp   t j| t j|t j|  } }}| dkr4t jdS | |krFt jdS t jd|dd}t j||  | d |ddS )Nr   r   T)exact)x2regularized)r   mpfZfsubbetainc)kr   pZonempr   r   r   _binomial_cdf   s    "

rW   c             C   sf   |dk rt jdS t j| t j|t j|  } }}| | | | |  }t j| d |d |dd}|S )Nr      T)rQ   rR   )r   rS   rT   )dfnZdfdr*   Zubr@   r   r   r   _f_cdf   s    
"rZ   c             C   s   |d krt jj}t j|~ t j| t j| } }t jdd| d  d|d  |  }||t jd| d   9 }|t jt j|  t jd|    }d| S Q R X d S )Ng      ?r   g      ?rX   )	r   mpr4   r<   rS   Zhyp2f1gammasqrtpi)dftr4   Zfacr   r   r   _student_t_cdf   s    ""ra   c             C   sR   t j|d d t j||  }|t j| |  d | | |d d   d 9 }|S )NrX   r      g      ?)r   Zbesselir]   exp)r`   r_   ncr@   r   r   r   _noncentral_chi_pdf   s    0re   c                sf   |d krt jj}t j| t j t j  }  t j|  t j fddd| g}|S Q R X d S )Nc                s   t |  S )N)re   )r`   )r_   rd   r   r   <lambda>   s    z%_noncentral_chi_cdf.<locals>.<lambda>r   )r   r[   r4   rS   r<   Zquad)r*   r_   rd   r4   r@   r   )r_   rd   r   _noncentral_chi_cdf   s    "rg   c             C   s   | | d|  |  | S )Nr   r   )rV   Zlmbdar   r   r   _tukey_lmbda_quantile   s    rh   z0.19c               @   s   e Zd Zejjdddd Zdd Zdd Zd	d
 Z	ejjdddd Z
dd Zdd Zdd Zdd Zejjdddd Zdd Zdd Zejjdddd Zejjdddd Zdd  Zd!d" Zd#d$ Zejjddd%d& Zd'S )(
TestCDFlibF)runc             C   s(   t tjtdt tddt gdd d S )Nr   r   i  g-C6?)r&   )rO   spbdtrikrW   r   r   )r   r   r   r   test_bdtrik   s
    zTestCDFlib.test_bdtrikc          	   C   s0   t tjtdtddt t gdd d dgd d S )Nr   i  g-C6?gư>)r&   r8   )rO   rk   bdtrinrW   r   r   )r   r   r   r   test_bdtrin   s
    zTestCDFlib.test_bdtrinc             C   s:   t tjdd dt tddddtdddddgd	d
 d S )Nc             S   s   t j| ||ddS )NT)rQ   rR   )r   rT   )r   r   r*   r   r   r   rf      s    z)TestCDFlib.test_btdtria.<locals>.<lambda>r   g      Y@F)inclusive_ar   )rp   inclusive_bgư>)r&   )rO   rk   btdtriar   r   )r   r   r   r   test_btdtria   s    zTestCDFlib.test_btdtriac             C   sB   t tjdd dtddddt tdddddgd	d d
dgd d S )Nc             S   s   t j| ||ddS )NT)rQ   rR   )r   rT   )r   r   r*   r   r   r   rf      s    z)TestCDFlib.test_btdtrib.<locals>.<lambda>r   r   g      Y@F)rp   )rp   rq   gHz>gC]r2<gV瞯<)r&   r8   )rO   rk   btdtribr   r   )r   r   r   r   test_btdtrib   s    zTestCDFlib.test_btdtribc             C   s0   t tjtdtddt tddddgdd d S )Nr   d   r   F)rp   gHz>)r&   )rO   rk   fdtridfdrZ   r   r   r   )r   r   r   r   test_fdtridfd   s
    zTestCDFlib.test_fdtridfdc             C   s@   t tjdd dt tddddtddddgdd dd	gd
 d S )Nc             S   s   t j|| | ddS )NT)r   rR   )r   gammainc)r   r   r*   r   r   r   rf      s    z(TestCDFlib.test_gdtria.<locals>.<lambda>r   g     @@F)rp   g     @gHz>g|=)r&   r8   )rO   rk   gdtriar   r   )r   r   r   r   test_gdtria   s    zTestCDFlib.test_gdtriac             C   s8   t tjdd dtddddt tddddgd	d
 d S )Nc             S   s   t j|| | ddS )NT)r   rR   )r   ry   )r   r   r*   r   r   r   rf     s    z(TestCDFlib.test_gdtrib.<locals>.<lambda>r   r   g      Y@F)rp   g     @@gh㈵>)r&   )rO   rk   gdtribr   r   )r   r   r   r   test_gdtrib  s
    zTestCDFlib.test_gdtribc          
   C   s@   t tjdd dtddddtddddt gdd dd	gd
 d S )Nc             S   s   t j|| | ddS )NT)r   rR   )r   ry   )r   r   r*   r   r   r   rf     s    z(TestCDFlib.test_gdtrix.<locals>.<lambda>rX   r   g     @@F)rp   gHz>g|=)r&   r8   )rO   rk   gdtrixr   r   )r   r   r   r   test_gdtrix
  s    zTestCDFlib.test_gdtrixc             C   s(   t tjttddtdtjgdd d S )Nr   rv   g|=gHz>)r&   )r
   rk   stdtrra   r   r   r   inf)r   r   r   r   
test_stdtr  s    zTestCDFlib.test_stdtrc             C   s    t tjtdt t gdd d S )Nr   gHz>)r&   )rO   rk   stdtridfra   r   r   )r   r   r   r   test_stdtridf  s    zTestCDFlib.test_stdtridfc             C   s*   t tjtdtddt gdd dgd d S )Nr   rv   gHz>g|=)r&   r8   )rO   rk   stdtritra   r   r   )r   r   r   r   test_stdtrit   s
    zTestCDFlib.test_stdtritc             C   s(   t tjdd dt tddgdd d S )Nc             S   s   t j| d |d ddS )NrX   T)r   rR   )r   ry   )r   r*   r   r   r   rf   *  s    z)TestCDFlib.test_chdtriv.<locals>.<lambda>r   r   rv   g-C6?)r&   )rO   rk   chdtrivr   r   )r   r   r   r   test_chdtriv'  s    zTestCDFlib.test_chdtrivc             C   s8   t tjtdtddddt tddddgdddd	 d S )
Nr   r   rv   F)rp   i  g-C6?gV瞯<)r   r&   r'   )rO   rk   	chndtridfrg   r   r   )r   r   r   r   test_chndtridf-  s    zTestCDFlib.test_chndtridfc          	   C   s4   t tjtdtddddtddt gddd	d
 d S )NrX   r   rv   F)rp   r   i  g-C6?gV瞯<)r   r&   r'   )rO   rk   	chndtrincrg   r   r   r   )r   r   r   r   test_chndtrinc7  s
    zTestCDFlib.test_chndtrincc             C   s<   t tjtdt tddtddddgdddd	d d gd
 d S )Nr   r   rv   F)rp   i  g-C6?gV瞯<gư>)r   r&   r'   r8   )rO   rk   chndtrixrg   r   r   r   )r   r   r   r   test_chndtrix@  s    zTestCDFlib.test_chndtrixc                s.   t jd tdd  fddt gdd d S )Nr   c             S   s   t j| dS )Nr   )rk   tklmbda)r*   r   r   r   rf   M  s    z4TestCDFlib.test_tklmbda_zero_shape.<locals>.<lambda>c                s    t j|     S )N)r   rc   )r*   )oner   r   rf   N  s    gHz>)r&   )r   rS   r
   r   )r   r   )r   r   test_tklmbda_zero_shapeI  s
    

z"TestCDFlib.test_tklmbda_zero_shapec          
   C   s0   t tjtdt tddddgddddgd d S )	Nr      F)rq   gh㈵>g&.>)r3   r&   r8   i)rO   rk   r   rh   r   r   )r   r   r   r   test_tklmbda_neg_shapeQ  s    z!TestCDFlib.test_tklmbda_neg_shapec          
   C   s*   t tjtdt tddddgddd d S )Nr   rv   F)rp   gh㈵>)r3   r&   )rO   rk   r   rh   r   r   )r   r   r   r   test_tklmbda_pos_shapeY  s
    z!TestCDFlib.test_tklmbda_pos_shapeN)r!   r"   r#   pytestmarkZxfailrm   ro   rs   ru   rx   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ri      s$   	
		ri   c               C   s   d(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFg} t jjd# xp| D ]h\}}tt|}d$d% t jj|D }x>tj| D ]0}|| }td&d' |D  rt	|t j
 n  qW qTW d S )GNrr   r   rt   rl   rn   r   rX   chndtrr   r   r   rw   ncfdtrrb   ncfdtri
ncfdtridfn
ncfdtridfd	ncfdtrincr~   r|   rz   nbdtriknbdtrinnrdtrimnnrdtrisdpdtrikr   r   r   nctdtrnctdtrit	nctdtridf	nctdtrincr   r   c             S   s$   g | ]}t |tjtjtj fqS r   )floatr   r;   r   ).0r*   r   r   r   
<listcomp>  s    z"test_nonfinite.<locals>.<listcomp>c             s   s   | ]}t j|V  qd S )N)r   r:   )r   r*   r   r   r   	<genexpr>  s    z!test_nonfinite.<locals>.<genexpr>)rr   r   )rt   r   )rl   r   )rn   r   )r   rX   )r   r   )r   r   )r   r   )r   r   )rw   r   )r   rb   )r   rb   )r   rb   )r   rb   )r   rb   )r~   r   )r|   r   )rz   r   )r   r   )r   r   )r   r   )r   r   )r   rX   )r   rX   )r   rX   )r   rX   )r   r   )r   r   )r   r   )r   r   )r   rX   )r   randomseedgetattrrk   Zrand	itertoolsproductanyr   r;   )funcsfuncZnumargsZargs_choicesr?   r@   r   r   r   test_nonfiniteb  sR    
r   )N)N)%r$   r   Znumpyr   Znumpy.testingr   r   Zscipy.specialZspecialrk   Zscipy.special._testutilsr   r   r   Zscipy.special._mptestutilsr   r   r   r	   r
   r   ImportErrorobjectr   r%   r,   rO   rW   rZ   ra   re   rg   rh   r   Zslowri   r   r   r   r   r   <module>   s4   
P	

	
 