
    xfk4                     p   d Z ddlZddlZddlmZmZ ddlZddlm	Z
 ddlmZmZmZ ddlmZmZmZmZmZ 	 ddlZ G d d      Z G d	 d
      Z G d d      Zd Zd Zd ZddZd ZddZd Z ejB                  jD                   eed       G d d                    Z#d Z$d Z%y# e$ r  ed      ZY zw xY w)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assert_allclose)MissingModulecheck_versionFuncData)ArgIntArgget_args	mpf2floatassert_mpmath_equalmpmathc                       e Zd ZdZd Zd Zy)ProbArgz*Generate a set of probabilities on [0, 1].c                      d| _         d| _        y )Nr      )abselfs    A/usr/lib/python3/dist-packages/scipy/special/tests/test_cdflib.py__init__zProbArg.__init__*   s        c                 b   t        d|dz        }t        j                  dt        j                  d      |      }t        j                  dd|dz   d      dd }dt        j                  t        j                  d      d	|      z
  }t        j
                  |||f   }t        j                  |      S )
z5Return an array containing approximatively n numbers.r      ig333333?gffffff?F)endpointNi)maxnplogspacelog10linspacer_unique)r   nmv1v2v3vs          r   valueszProbArg.values/   s    1a4L[[bhhsmQ/[[c1q559!"=RXXc]C33EE"b"*yy|r   N)__name__
__module____qualname____doc__r   r)    r   r   r   r   (   s    4
r   r   c                       e Zd Zd Zd Zy)EndpointFilterc                 <    || _         || _        || _        || _        y N)r   r   rtolatol)r   r   r   r3   r4   s        r   r   zEndpointFilter.__init__:   s    		r   c                    t        j                  || j                  z
        | j                  t        j                  | j                        z  | j                  z   k  }t        j                  || j
                  z
        | j                  t        j                  | j
                        z  | j                  z   k  }t        j                  ||z  dd      S )NFT)r   absr   r3   r4   r   where)r   xmask1mask2s       r   __call__zEndpointFilter.__call__@   s    q466z"TYYrvvdff~%=		%IIq466z"TYYrvvdff~%=		%IIxxud33r   N)r*   r+   r,   r   r;   r.   r   r   r0   r0   9   s    4r   r0   c                   ,    e Zd Z	 	 	 ddZd Zd Zd Zy)_CDFDataNc                    || _         || _        || _        || _        || _        || _        || _        || _        |	| _        t        |t              sd | _        d | _        y |
|mt        |
t              r|
| _        n|
gt        | j                        z  | _        t        |t              r|| _        y |gt        | j                        z  | _        y d | _        d | _        y r2   )spfuncmpfuncindexargspecspfunc_firstdpsr#   r3   r4   
isinstancelist
endpt_rtol
endpt_atollen)r   r?   r@   rA   rB   rC   rD   r#   r3   r4   rG   rH   s               r   r   z_CDFData.__init__G   s     
(		'4("DO"DO#z'=*d+",#-,s4<</@"@*d+",#-,s4<</@"@"DO"DOr   c                    | j                   r | j                  | }t        j                  |      rt        j                  S t        |      }||| j                  <   t        j                  | j                        5   | j                  t        |       }t        |j                        }d d d        |S t        j                  | j                        5   | j                  | }t        |j                        }d d d        t        |      }|| j                  <    | j                  t        |       }|S # 1 sw Y   |S xY w# 1 sw Y   JxY wr2   )rC   r?   r   isnannanrF   rA   r   workdpsrD   r@   tupler   real)r   argsress      r   idmapz_CDFData.idmapd   s   $++t$Cxx}vv:D"D) *!dkk5;/)* 
 ) *!dkk4()* :D"D$++uT{+C
* 
* *s   :.D2%D?2D<?Ec           	      D   | j                   | j                  y g }t        | j                   | j                  | j                        D ]V  \  }}}|||j	                  d        |d}n|d}|j	                  t        |j                  |j                  ||             X |S )N        )rG   rH   ziprB   appendr0   r   r   )r   filtersr3   r4   specs        r   get_param_filterz_CDFData.get_param_filterx   s    ??"t'> #DOOT__dll S 		GD$|t$NN>$&&$&&$EF		G r   c           
         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|      j                          y )Nr   r   F)param_columnsresult_columnsr3   r4   
vectorizedparam_filter)r
   rB   r#   rY   rN   rangeshaper   hstackrA   reshaper   rR   r3   r4   check)r   rP   r^   r[   r\   s        r   rc   z_CDFData.check   s    dff-,,.eDJJqM23Ayy$Qtzz\ 2 : :4::a=! LMNT,^iidiiE*	, -2EGr   )T   i  NNNN)r*   r+   r,   r   rR   rY   rc   r.   r   r   r=   r=   F   s    DH15-1#:("
4r   r=   c                  :    t        | i |}|j                          y r2   )r=   rc   )r   kwds      r   _assert_invertsrh      s    !rAGGIr   c                 V   t        j                  |       t        j                  |      t        j                  |      }}} | dk  rt        j                  d      S | |k\  rt        j                  d      S t        j                  d|d      }t        j                  || z
  | dz   |d      S )Nr   r   T)exactx2regularized)r   mpffsubbetainc)kr#   ponemps       r   _binomial_cdfrt      s    jjmVZZ]FJJqM!qAAvzz!}	
azz!}KK1D)E>>!a%Q5dCCr   c                    |dk  rt        j                  d      S t        j                  |       t        j                  |      t        j                  |      }}} | |z  | |z  |z   z  }t        j                  | dz  |dz  |d      }|S )Nr      Trk   )r   rn   rp   )dfndfdr8   ubrQ   s        r   _f_cdfrz      ss    1uzz!}**S/6::c?FJJqMaC	QA	B
..QA"$
?CJr   c                    |t         j                  j                  }t        j                  |      5  t        j                  |       t        j                  |      }} t        j
                  dd| dz   z  d|dz   | z        }||t        j                  d| dz   z        z  z  }|t        j                  t         j                  | z        t        j                  d| z        z  z  }d|z   cd d d        S # 1 sw Y   y xY w)N      ?r   g      ?rv   )	r   mprD   rM   rn   hyp2f1gammasqrtpi)dftrD   facs       r   _student_t_cdfr      s    
{iimm		 

2

1AmmCb1fsQTE"H=qc26l+++v{{699R<(c"f)===Sy  s   B7C33C<c                     t        j                  |dz  dz
  t        j                  || z              }|t        j                  | |z    dz        | |z  |dz  dz
  z  z  dz  z  }|S )Nrv   r      r|   )r   besselir   exp)r   r   ncrQ   s       r   _noncentral_chi_pdfr      sd    
..A6;;r!t#4
5C6::Bik"AbDBqD3J#7799CJr   c                 P   |t         j                  j                  }t        j                  |       t        j                        t        j                        c} t        j                  |      5  t        j
                  fdd| g      }|cd d d        S # 1 sw Y   y xY w)Nc                     t        |       S r2   )r   )r   r   r   s    r   <lambda>z%_noncentral_chi_cdf.<locals>.<lambda>   s    $72r$B r   r   )r   r}   rD   rn   rM   quad)r8   r   r   rD   rQ   s    ``  r   _noncentral_chi_cdfr      su    
{iimm

1vzz"~vzz"~IAr2		 kkBQFK  s   4BB%c                 $    | |z  d| z
  |z  z
  |z  S )Nr   r.   )rr   lmbdas     r   _tukey_lmbda_quantiler      s    uHA~%u,,r   z0.19c                   4   e Zd Zej                  j                  d      d        Zd Zd Zd Z	ej                  j                  d      d        Z
d Zd	 Zd
 Zd Zej                  j                  d      d        Zd Zd Zej                  j                  d      d        Zej                  j                  d      d        Zd Zd Zd Zej                  j                  d      d        Zej                  j1                  dg d      d        Zy)
TestCDFlibF)runc           
          t        t        j                  t        dt	               t        dd      t	               gd       y )Nr   r     -C6?r3   )rh   spbdtrikrt   r   r	   r   s    r   test_bdtrikzTestCDFlib.test_bdtrik   s-    II	6!T?GI6		r   c           	          t        t        j                  t        dt	        dd      t               t               gdg d       y )Nr   r   r   )NNư>r3   rH   )rh   r   bdtrinrt   r	   r   r   s    r   test_bdtrinzTestCDFlib.test_bdtrin   s0    IIq$GI6"4		6r   c                     t        t        j                  d dt               t	        ddd      t	        dddd      gd	       y )
Nc                 4    t        j                  | ||d      S NTrk   r   rp   r   r   r8   s      r   r   z)TestCDFlib.test_btdtria.<locals>.<lambda>       FNN1aA4H r   r         Y@Finclusive_ar   r   inclusive_br   r   )rh   r   btdtriar   r   r   s    r   test_btdtriazTestCDFlib.test_btdtria   s=    JJH	3q#59Aqe?A	r   c                     t        t        j                  d dt        ddd      t	               t        dddd      gdg d	
       y )Nc                 4    t        j                  | ||d      S r   r   r   s      r   r   z)TestCDFlib.test_btdtrib.<locals>.<lambda>   r   r   r   r   r   Fr   r   Hz>)NgC]r2<V瞯<r   )rh   r   btdtribr   r   r   s    r   test_btdtribzTestCDFlib.test_btdtrib   s?    JJHAs.	A5e<>"6	8r   c                     t        t        j                  t        dt	        dd      t               t        ddd      gd       y )Nr   d   r   Fr   r   r   )rh   r   fdtridfdrz   r	   r   r   r   s    r   test_fdtridfdzTestCDFlib.test_fdtridfd   s4    KKq#	3q#5+IJ		r   c                     t        t        j                  d dt               t	        ddd      t	        ddd      gdg d	       y )
Nc                 8    t        j                  || |z  d      S NTr   rm   r   gammaincr   s      r   r   z(TestCDFlib.test_gdtria.<locals>.<lambda>       FOOA1$G r   r        @@Fr   g     @r   Nr   绽|=r   )rh   r   gdtriar   r   r   s    r   test_gdtriazTestCDFlib.test_gdtria   s=    IIG	3q#59As.06:*	,r   c                     t        t        j                  d dt        ddd      t	               t        ddd      gd	       y )
Nc                 8    t        j                  || |z  d      S r   r   r   s      r   r   z(TestCDFlib.test_gdtrib.<locals>.<lambda>  r   r   r   r   r   Fr   r   h㈵>r   )rh   r   gdtribr   r   r   s    r   test_gdtribzTestCDFlib.test_gdtrib  s:    IIGAs.	As.06:		<r   c                     t        t        j                  d dt        ddd      t        ddd      t	               gdg d	       y )
Nc                 8    t        j                  || |z  d      S r   r   r   s      r   r   z(TestCDFlib.test_gdtrix.<locals>.<lambda>  r   r   rv   r   r   Fr   r   r   r   )rh   r   gdtrixr   r   r   s    r   test_gdtrixzTestCDFlib.test_gdtrix
  s=    IIGAs.As0N	!%*	,r   c           	          t        t        j                  t        t	        dd      t        dt        j                        gd       y )Nr   r   r   r   r   )r   r   stdtrr   r	   r   r   infr   s    r   
test_stdtrzTestCDFlib.test_stdtr  s/    HHAs^S/0t	=r   c                 l    t        t        j                  t        dt	               t               gd       y )Nr   r   r   )rh   r   stdtridfr   r   r   r   s    r   test_stdtridfzTestCDFlib.test_stdtridf  s$    KK	35!	.r   c           	      v    t        t        j                  t        dt	        dd      t               gdd dg       y )Nr   r   r   r   r   )rh   r   stdtritr   r	   r   r   s    r   test_stdtritzTestCDFlib.test_stdtrit   s/    JJq#	*e}		&r   c           
      j    t        t        j                  d dt               t	        dd      gd       y )Nc                 >    t        j                  | dz  |dz  d      S )Nrv   Tr   r   )r(   r8   s     r   r   z)TestCDFlib.test_chdtriv.<locals>.<lambda>*  s    1!F r   r   r   r   r   r   )rh   r   chdtrivr   r	   r   s    r   test_chdtrivzTestCDFlib.test_chdtriv'  s(    JJF	6!S>*	7r   c                     t        t        j                  t        dt	        ddd      t               t	        ddd      gddd	       y )
Nr   r   r   Fr   r   r   r   r#   r3   r4   )rh   r   	chndtridfr   r   r   r   s    r   test_chndtridfzTestCDFlib.test_chndtridf-  s@     	LLAs.	As.0E	+r   c           
          t        t        j                  t        dt	        ddd      t        dd      t               gddd	
       y )Nrv   r   r   Fr   r   r   r   r   r   )rh   r   	chndtrincr   r   r	   r   r   s    r   test_chndtrinczTestCDFlib.test_chndtrinc7  s:     	LLAs.q#	JE		+r   c                     t        t        j                  t        dt	               t        dd      t        ddd      gdddg d	
       y )Nr   r   r   Fr   r   r   r   )r   NN)r#   r3   r4   rH   )rh   r   chndtrixr   r   r	   r   r   s    r   test_chndtrixzTestCDFlib.test_chndtrix@  s;    KK	6!S>3q#5+IJE)	+r   c                 h    t        j                  d      t        d fdt               gd       y )Nr   c                 .    t        j                  | d      S )Nr   )r   tklmbda)r8   s    r   r   z4TestCDFlib.test_tklmbda_zero_shape.<locals>.<lambda>M  s    bjjA& r   c                 <    t        j                  |        z   z  S r2   )r   r   )r8   ones    r   r   z4TestCDFlib.test_tklmbda_zero_shape.<locals>.<lambda>N  s    c6::qb>C/0 r   r   r   )r   rn   r   r   )r   r   s    @r   test_tklmbda_zero_shapez"TestCDFlib.test_tklmbda_zero_shapeI  s'    jjm&0UG$	 r   c                 |    t        t        j                  t        dt	               t        ddd      gddddg       y )Nr   iF)r   r   g&.>)rC   r3   rH   rh   r   r   r   r   r   r   s    r   test_tklmbda_neg_shapez!TestCDFlib.test_tklmbda_neg_shapeQ  s5    JJ!	3sA59:Td|	%r   c                 v    t        t        j                  t        dt	               t        ddd      gdd       y )Nr   r   Fr   r   )rC   r3   r   r   s    r   test_tklmbda_pos_shapez!TestCDFlib.test_tklmbda_pos_shapeY  s.    JJ!	3q#59:T		+r   r   )r|         ?g       @c                 X    d|z  }t        t        j                  | |g|      ddg       y )Nr   rT   r   )r   r   r   )r   r   bounds      r   test_tklmbda_lmbda1zTestCDFlib.test_tklmbda_lmbda1b  s*    %RZZ%7#sDr   N)r*   r+   r,   pytestmarkxfailr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   parametrizer   r.   r   r   r   r      sI    [[5! "68 [[5! ",<,= [[5!. ".&7 [[5!+ "+ [[5!+ "++ % [[5!+ "+ [[Wo6E 7Er   r   c                     g d} t         j                  j                  d       | D ]  \  }}t        t        |      }t         j                  j                  |      D cg c]<  }t        |      t         j                  t         j                  t         j                   f> }}t        j                  | D ]4  } || }t        d |D              rt        |t         j                         56  y c c}w )N))r   r   )r   r   )r   r   )r   r   )r   rv   )chndtrr   )r   r   )r   r   )r   r   )r   r   )ncfdtrr   )ncfdtrir   )
ncfdtridfnr   )
ncfdtridfdr   )	ncfdtrincr   )r   r   )r   r   )r   r   )nbdtrikr   )nbdtrinr   )nrdtrimnr   )nrdtrisdr   )pdtrikrv   )r   rv   )r   rv   )r   rv   )nctdtrr   )nctdtritr   )	nctdtridfr   )	nctdtrincr   )r   rv   r   c              3   F   K   | ]  }t        j                  |        y wr2   )r   rK   ).0r8   s     r   	<genexpr>z!test_nonfinite.<locals>.<genexpr>  s     -1288A;-s   !)r   randomseedgetattrr   randfloatrL   r   	itertoolsproductanyr   )funcsfuncnumargsr8   args_choicesrP   rQ   s          r   test_nonfiniter  h  s     ED IINN1 gr4  		w/1q266266BFF7; 1 1 %%|4 		D+C---S"&&) 		1s   AC,c                  ~    t        j                  ddt        j                  d      dz         } g d}t	        | |       y )Ng!?rv   g      4@r   )gyY;@gA@gʾC@g-E@g-oG@gNCEI@g0_{J@gY-L@gjrM@gZǧ9N@g-]fP@gmj#P@ggAQ@gl@Q@gndhR@g$܂R@g@FTxS@gēT@g]gϖT@gc$U@)r   r   r   aranger   )rQ   res_exps     r   test_chndtrix_gh2158r    s4    
++h299S>$#6
7C5G C!r   r2   )&r-   r  numpyr   numpy.testingr   r   r   scipy.specialspecialr   scipy.special._testutilsr   r   r   scipy.special._mptestutilsr   r	   r
   r   r   r   ImportErrorr   r0   r=   rh   rt   rz   r   r   r   r   r   slowr   r  r  r.   r   r   <module>r&     s   *   7  , ,; ;%
 "
4 
4M4 M4`
D-
 vvUE UE  UEp4n"w  %8$F%s   B% %B54B5