
    bii~                        d Z ddlZddlZddlmZ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jD                  jF                   eed       G d d                    Z$g dZ%ejD                  jM                  de%e%D  cg c]  } | d   	 c}       d        Z'd Z(d Z)d Z*d Z+ejD                  jM                  dg d g d!g d"g d#g d$g d%g d&g d'g d(g d)g d*g d+g d,g      d-        Z,ejD                  jM                  d.g d/      d0        Z- G d1 d2      Z. G d3 d4      Z/ejD                  jM                  d5d6d7g      d8        Z0 G d9 d:      Z1ejD                  jM                  d;dddejd                  fddd<ejd                  fdejf                  dejd                  fdejf                  d<ejd                  fejf                  ddejd                  fejf                  dd<ejd                  fejf                  ejf                  dejd                  fejf                  ejf                  d<ejd                  fg      d=        Z4ejD                  jM                  d>dddejd                  fddejf                  ejd                  fdd<dejd                  fdd<ejf                  dfejf                  ddejd                  fejf                  dejf                  ejd                  fejf                  d<dejd                  fejf                  d<ejf                  ejd                  fg      d?        Z5y# e$ r  ed      ZY 3w xY wc c} w )Az
Test cdflib functions versus mpmath, if available.

The following functions still need tests:

- ncfdtridfn
- ncfdtridfd
- ncfdtrinc
- nbdtrik
- nbdtrin
- nctdtridf
- nctdtrinc

    N)assert_equalassert_allcloseassert_array_equal)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    Z/home/cdr/jupyterlab/.venv/lib/python3.12/site-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 )
z3Return an array containing approximately n numbers.r      i333333?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   r5   r6   s        r   r   zEndpointFilter.__init__4   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   r5   r6   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=   r0   r   r   r2   r2   3   s    4r   r2   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 r4   )spfuncmpfuncindexargspecspfunc_firstdpsr%   r5   r6   
isinstancelist
endpt_rtol
endpt_atollen)r   rA   rB   rC   rD   rE   rF   r%   r5   r6   rI   rJ   s               r   r   z_CDFData.__init__A   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r4   )rE   rA   r   isnannanrH   rC   r   workdpsrF   rB   tupler   real)r   argsress      r   idmapz_CDFData.idmap^   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        )rI   rJ   ziprD   appendr2   r   r   )r   filtersr5   r6   specs        r   get_param_filterz_CDFData.get_param_filterr   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_columnsr5   r6   
vectorizedparam_filter)r   rD   r%   r[   rP   rangeshaper   hstackrC   reshaper   rT   r5   r6   check)r   rR   r`   r]   r^   s        r   re   z_CDFData.check   s    dff-,,.eDJJqM23Ayy$Q

] 3 ; ;DJJqM1 MNOT,^iidiiE*	, -2EGr   )T   i  NNNN)r,   r-   r.   r   rT   r[   re   r0   r   r   r?   r?   @   s    DH15-1#:("
4r   r?   c                  :    t        | i |}|j                          y r4   )r?   re   )r   kwds      r   _assert_invertsrj      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_cdfrv      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      Trm   )r   rp   rr   )dfndfdr:   ubrS   s        r   _f_cdfr|      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         ?rx   )	r   mprF   rO   rp   hyp2f1gammasqrtpi)dftrF   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 )Nrx   r      r~   )r   besselir   exp)r   r   ncrS   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 r4   )r   )r   r   r   s    r   <lambda>z%_noncentral_chi_cdf.<locals>.<lambda>   s    $72r$B r   r   )r   r   rF   rp   rO   quad)r:   r   r   rF   rS   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   r0   )rt   lmbdas     r   _tukey_lmbda_quantiler      s    uHA~%u,,r   z0.19c                   @   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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                  j5                  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?r5   )rj   spbdtrikrv   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ư>r5   rJ   )rj   r   bdtrinrv   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 NTrm   r   rr   r   r   r:   s      r   r   z)TestCDFlib.test_btdtria.<locals>.<lambda>       FNN1aA4H r   r        r@Finclusive_ar   r   inclusive_b-q=r   )rj   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         Y@Fr   r   Hz>)NgC]r2<V瞯<r   )rj   r   btdtribr	   r   r   s    r   test_btdtribzTestCDFlib.test_btdtrib   s@    JJHCU+WYA5e<>+	-r   c                     t        t        j                  t        dt	        dd      t               t        ddd      gd       y )Nr   d   r   Fr   r   r   )rj   r   fdtridfdr|   r
   r   r	   r   s    r   test_fdtridfdzTestCDFlib.test_fdtridfd   s5    KKAs^WYAs(FG	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   ro   r   gammaincr   s      r   r   z(TestCDFlib.test_gdtria.<locals>.<lambda>       FOOA1$G r   r        @@Fr   g     @r   Nr   绽|=r   )rj   r   gdtriar   r	   r   s    r   test_gdtriazTestCDFlib.test_gdtria   s>    IIGYAs6CU+-*	,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   )rj   r   gdtribr	   r   r   s    r   test_gdtribzTestCDFlib.test_gdtrib  s;    IIGCU+WYCU+-	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   rx   r   r   Fr   r   r   r   )rj   r   gdtrixr	   r   r   s    r   test_gdtrixzTestCDFlib.test_gdtrix  s>    IIGCU+SCU-KY*	,r   c                     t        t        j                  d dt               t	        dt
        j                  dd      t	        dd      gd	       y )
Nc                 0    t        j                  || |      S r4   r   ncdfr:   yzs      r   r   z*TestCDFlib.test_nrdtrimn.<locals>.<lambda>      FKK1a0 r   r   皙?Fr   g    _g    _Br   r   )rj   r   nrdtrimnr   r	   r   infr   s    r   test_nrdtrimnzTestCDFlib.test_nrdtrimn  sB    KK0Ybff%UC 	r   c                     t        t        j                  d dt        t        j
                   ddd      t               t        dd      gd       y )	Nc                 0    t        j                  || |      S r4   r   r   s      r   r   z*TestCDFlib.test_nrdtrisd.<locals>.<lambda>(  r   r   r   
   Fr   }Ô%ITr   r   )rj   r   nrdtrisdr	   r   r   r   r   s    r   test_nrdtrisdzTestCDFlib.test_nrdtrisd%  sC    KK0"&&"%UCYU^ 	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   r   r   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   )rj   r   stdtridfr   r   r	   r   s    r   test_stdtridfzTestCDFlib.test_stdtridf6  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   )rj   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 )Nrx   Tr   r   )r*   r:   s     r   r   z)TestCDFlib.test_chdtriv.<locals>.<lambda>G  s    1!F r   r   r   r   r   r   )rj   r   chdtrivr   r
   r   s    r   test_chdtrivzTestCDFlib.test_chdtrivD  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%   r5   r6   )rj   r   	chndtridfr   r	   r   r   s    r   test_chndtridfzTestCDFlib.test_chndtridfK  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 )Nrx   r   r   Fr   r   r   r   r   r   )rj   r   	chndtrincr   r	   r
   r   r   s    r   test_chndtrinczTestCDFlib.test_chndtrincU  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%   r5   r6   rJ   )rj   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r:   s    r   r   z4TestCDFlib.test_tklmbda_zero_shape.<locals>.<lambda>k  s    bjjA& r   c                 <    t        j                  |        z   z  S r4   )r   r   )r:   ones    r   r   z4TestCDFlib.test_tklmbda_zero_shape.<locals>.<lambda>l  s    c6::qb>C/0 r   r   r   )r   rp   r   r	   )r   r  s    @r   test_tklmbda_zero_shapez"TestCDFlib.test_tklmbda_zero_shapeg  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   &.>)rE   r5   rJ   rj   r   r   r   r   r	   r   s    r   test_tklmbda_neg_shapez!TestCDFlib.test_tklmbda_neg_shapeo  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   )rE   r5   r  r   s    r   test_tklmbda_pos_shapez!TestCDFlib.test_tklmbda_pos_shapew  s.    JJ!	3q#59:T		+r   r   )r~         ?       @c                 X    d|z  }t        t        j                  | |g|      ddg       y )Nr   rV   r  )r   r   r   )r   r   bounds      r   test_tklmbda_lmbda1zTestCDFlib.test_tklmbda_lmbda1  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  r  r
  parametrizer  r0   r   r   r   r      sS    [[5! "6	- [[5! ",, = [[5!. ".&7 [[5!+ "+ [[5!+ "++ % [[5!+ "+ [[Wo6E 7Er   r   ))r   r   )r   r   )r   r   )r   r   )r   rx   )chndtrr   )r   r   )r   r   )r   r   )r   r   )ncfdtrr   )ncfdtrir   )
ncfdtridfnr   )
ncfdtridfdr   )	ncfdtrincr   )r   r   )r   r   )r   r   )nbdtrikr   )nbdtrinr   )r   r   )r   r   )pdtrikrx   )r   rx   )r   rx   )r   rx   )nctdtrr   )nctdtritr   )	nctdtridfr   )	nctdtrincr   )r   rx   zfunc,numargs)idsc                    t         j                  j                  d      }t        t        |       } |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 )Nl   7'}?J-0 c              3   F   K   | ]  }t        j                  |        y wr4   r   rM   ).0r:   s     r   	<genexpr>z!test_nonfinite.<locals>.<genexpr>  s     )qrxx{)s   !)r   randomdefault_rnggetattrr   floatrN   r   	itertoolsproductanyr   )funcnumargsrngr:   args_choicesrR   rS   s          r   test_nonfiniter2    s     ))

 0
1C2tDADGATUAU1Xrvvrvvw7ULU!!<0 	Dk)D))bff% 	 Vs   ACc                  ~    t        j                  ddt        j                  d      dz         } g d}t	        | |       y )Ng!?rx         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   )rS   res_exps     r   test_chndtrix_gh2158r7    s4    
++h299S>$#6
7C5G C!r   c                  p    g d} g d}g d}g d}t        j                  | ||      }t        ||dd       y )N)
MbP?\(\?皙#@b     i'  r<  r;  r:  r9  )
r9  r   r   皙?+?r9  r   r   r>  r?  )
~jtX?333333?r      ,  r@  rA  r   rB  rC  )
K ˸@gtI?x9" @g.$Bt+@gO,oq@rD  gZc^?rE  g@gjdy=rV   r5   r6   )r   r   r   )dfarrparrtarrdesiredactuals        r   test_nctdtrinc_gh19896rM    s=     EEEDCD#G \\%t,FFG%c:r   c                     t        j                  t        j                  t        j                  t         j
                   t         j
                   dddt         j
                  g                  sJ t        j                  t        j                  t        j                  t         j
                   g d                  sJ y )N      rV   r  )rV         ?r~   g      ?r  )r   allrM   r   r   r   r   r0   r   r   test_stdtr_stdtrit_neg_infrR    sp    66"((288RVVGrvvgtS#rvv-NOPQQQ66"((2::rvvg/JKLMMMr   c                  r   t        j                  t         j                  t         j                   ddddddddt         j                  g      } | d d d f   } t        j                  t         j                  t         j                   ddddddt         j                  g	      }t        j
                  t        j                  t        j                  | t         j                  |                  sJ t        j
                  t        j                  t        j                  | t         j                  |                  sJ y )	Ng      $rO  rV   r   r~   gH.?r        $@)
r   arrayrN   r   
atleast_2drQ  rM   r   r   r  )r   rt   s     r   test_bdtrik_nbdtrik_infrW    s    
	tS&"fc4P	RA	!D&	A
	"&&%sFBRVVD	FA66"((299Q2344466"((2::a34555r   zdfn,dfd,nc,f,expected_cdf)r   r   r   r   g,]?)r   r   {Gz?r   gsCr:)r   rX  r   rX  gnhUg?)rT  rX  r  r   g%g{E?)r   r   rX  rX  g 	
1)r  r   r   r   gڞ^)k;)r  rX  r   rT  glB?)r  rX  rT  rX  g)Dt^\,?)rT  r  r   r   g|?)r   r   r  r  g?)r   r   r   rT  r  )r  r   r   rT  g*}?)g0.++r   r   r   g0J?c                     t        t        j                  | |||      |dd       d|cxk  rdk  r(n y t        t        j                  | |||      |d       y y )NvIh%<=r   rG  r   g|=r   )r   r   r  r  )ry   rz   r   fexpected_cdfs        r   test_ncfdtr_ncfdtrir]    sQ    x BIIc3A.5qQ 	<!

3R>N r   rR   ))rO  r   r   r~   )r   rO  r   r~   )r   r   rO  r~   )r   r   r   r   )r   r   r   c                     t        j                  d      5  t        j                  t         j                  d      5  t        j
                  |   d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wNraise)domainrb  )match)r   errstater  raisesSpecialFunctionErrorr  )rR   s    r   test_ncfdtri_domain_errorrg  .  s_     
G	$ ]]222(C 	JJ	 	 	 s"   &A-A!A-!A*	&A--A6c                      e Zd Zej                  j                  dg dddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d? ej                  d@dAdBdCej                  j                  dDE      F      dG      dH        ZdI Z	ej                  j                  dJg dKg dLg dMg dNdOdOe
j                  dOdPgdOdOe
j                   dPdPgg      dQ        Zej                  j                  dg dR      dS        ZyT)UTestNoncentralTFunctionszdf, nc, x, expected_cdf)r:  ffffffr@  gD i?)r:  rj  rA  g?)r:  rj  r   g7?r:  rj  rB  gU?)r:  RQ?r@  g?)r:  rl  rA  gx$p?)r:  rl  r   g7?)r:  rl  rB  g]ŧe?)r:  ffffff@r@  g樼?)r:  rm  rA  g:GF ?)r:  rm  r   gpa?)r:  rm  rB  gfO!t?)r:  &   r@  g    )r:  rn  rA  gQb] r:  rn  r   gy+)r:  rn  rB  guQRm?)r;  rj  r@  g/C*i?)r;  rj  rA  g.b?)r;  rj  r   gI'v?)r;  rj  rB  g?)r;  rl  r@  g?)r;  rl  rA  gD-?)r;  rl  r   gy0 ?)r;  rl  rB  gC?)r;  rm  r@  g?)r;  rm  rA  g:e!?)r;  rm  r   gh?)r;  rm  rB  g?)r;  rn  r@  g+    )r;  rn  rA  gPDp   )r;  rn  r   gMr;  rn  rB  ggS>^X#>)r<  rj  r@  gNG0i?)r<  rj  rA  g%Wح?)r<  rj  r   g?)r<  rj  rB  r  )r<  rl  r@  g aYҏ?)r<  rl  rA  gpku+?)r<  rl  r   gZVq?)r<  rl  rB  r  )r<  rm  r@  g_a?)r<  rm  rA  g+,!?)r<  rm  r   gqgb?)r<  rm  rB  g?)r<  rn  r@  gQ    )r<  rn  rA  g%Q   )r<  rn  r   gTh-1)r<  rn  rB  g¤5)r=  rj  r@  geK0i?)r=  rj  rA  g?)r=  rj  r   gjS?)r=  rj  rB  r  )r=  rl  r@  g|S׏?)r=  rl  rA  gfG-?)r=  rl  r   g^"?)r=  rl  rB  r  )r=  rm  r@  gm?)r=  rm  rA  g|q]/!?)r=  rm  r   g+%αs?)r=  rm  rB  r  )r=  rn  r@  gn    )r=  rn  rA  gm   r=  rn  r   gDdz+Bug in underlying Boost math implementation)reason)marks)r=  rn  rB  g>H*c                 P    t        j                  |||      }t        ||dd       y )NrZ  grG  )r   r  r   )r   r   r   r:   r\  nctdtr_results         r   test_gh19896z%TestNoncentralTFunctions.test_gh19896c  s%    V 		"b!,|%fMr   c                 Z    d\  }}}d}t        t        j                  |||      |d       y )N)  r   r   -^?g+=r   r   r   r  )r   r   r   r:   expecteds        r   test_nctdtr_gh8344z+TestNoncentralTFunctions.test_nctdtr_gh8344  s+     	B(		"b!,hUCr   zdf, nc, x, expected, rtol)      @g      @g       gG>g:0yU>)r   rT  r  g'$ <rZ  )r   g             @gjx?rZ  )rT  r4  rA  ge*mt-rZ  r  rV   c                 J    t        t        j                  |||      ||       y )Nr   ry  )r   r   r   r:   rz  r5   s         r   test_nctdtr_accuracyz-TestNoncentralTFunctions.test_nctdtr_accuracy  s     			"b!,hTBr   )ro  )rw  r   r   rx  rk  rp  c                 J    t        t        j                  |||      |d       y )Nr   r   )r   r   r  )r   r   r   r:   r\  s        r   test_nctdtritz&TestNoncentralTFunctions.test_nctdtrit  s     	BL915Ir   N)r,   r-   r.   r  r  r  paramr  ru  r{  r   r   r  r  r0   r   r   ri  ri  ;  s   P [[6 E90E9.E9 	.E9 	-	E9
 	/E9 	0E9 	-E9 	-E9 	2E9 	2E9 	/E9 	,E9 	,E9 	1E9 	/E9  	-!E9" 	0#E9$ 	.%E9& 	-'E9( 	,)E9* 	0+E9, 	/-E9. 	-/E90 	,1E92 	23E94 	15E96 	.7E98 	*9E9: 	+;E9< 	,=E9> 	0?E9@ 	-AE9B 	/CE9D 	-EE9F 	,GE9H 	IE9J 	0KE9L 	.ME9N 	,OE9P 	QE9R 	1SE9T 	/UE9V 	-WE9X 	*YE9Z 	*[E9\ 	*]E9^ 	/_E9` 	-aE9b 	0cE9d 	.eE9f 	-gE9h 	iE9j 	0kE9l 	.mE9n 	-oE9p 	qE9r 	2sE9t 	1uE9v 	.wE9x 	yE9z 	*{E9| 	+}E9B 	S"c#:!;;,,L - N	OCE9H 	.IE9 ELNMELND [[# 
5	8	3	7
b"&&#s	#
b266'3	$	
	CC [[6 9 JJr   ri  c                      e Zd Zd Zej
                  j                  dg d      d        Zej
                  j                  ddddej                  fej                  dfg      d	        Z
ej
                  j                  d
ej                  ej                  ej                  ej                  g      ej
                  j                  dg d      d               Zej
                  j                  d
ej                  ej                  ej                  ej                  g      ej
                  j                  dej"                  ddfdej"                  dfddej"                  fej"                  ej"                  dfej"                  dej"                  fdej"                  ej"                  fej"                  ej"                  ej"                  fg      d               Zej
                  j                  ddddej"                  fddej                  ej"                  fdej                  dej"                  fdej                  ej                  dfddej                  dfej                  ddej"                  fej                  dej                  ej"                  fej                  dddfej                  ej                  ej                  ej"                  fg	      d        Zy)!TestNoncentralChiSquaredFunctionsc                    t        j                  g dg dg dg dg dg dg dg dg d	g d
g dg dg dg      }t        j                  |d d df   |d d df   |d d df         }t	        ||d d df   d       t        j
                  |d d df   |d d df   |d d df         }t	        |d d |d ddf   d       t        j                  |d d df   |d d df   |d d df         }t	        |d d |d ddf   d       t        j                  |d d df   |d d df   |d d df         }t	        |d d |d ddf   d       y )N)      9@r4    gL94)r  r     g7Fh9)r9  r        D@ggåc;)rX  r  r  g	;)r4  r}  k   g8x@x>)g     6@r}  r  gg1\>>)r  r}  r  g`>)r|  r}  r  gp!P?)g     u@r   rT  g j
?)r         +@rT  g]?)g     @r4  r  g4ۙ?)g     b@r  rT  g?)g      d@r  rT  r  r   r   rx   r   rZ  r   g:0yE>)r   rU  r   r  r   r   r   r   )r   r+   cdfr:   r   r   s         r   .test_chndtr_and_inverses_against_wolfram_alphazPTestNoncentralChiSquaredFunctions.test_chndtr_and_inverses_against_wolfram_alpha  sX    999:999666666
  iiq!tfQTlF1a4LAVAqD\6 KKq!tfQTlF1a4LA#2ssAvT:\\&A,q!tfQTlC3BQd;\\&A,q!tfQTlC3BQd;r   z+x, df, nc, expected_cdf, rtol_cdf, rtol_inv))r      2   g
8DLrZ  rZ  )r   rf   r  g"rZ  rZ  )r   r  r  ggI˘rZ  rZ  )g     @g     j@r   grd\\"rF  rF  )   r   r   gk?-a=r  )  rC  r   g;?rZ  r   )ix  r  r   g.?rZ  r  )r  r  r  g#%?rZ  gdy=c                    t        j                  |||      }t        |||       t        t        j                  |||      ||       t        t        j                  |||      ||       t        t        j
                  |||      ||       t        t        j                  |||      ||       t        t        j                  |||      |d       t        t        j
                  |||      |d       y )Nr   r   r   )r   r  r   r   r   r   )r   r:   r   r   r\  rtol_cdfrtol_invchndtr_results           r   
test_tailsz,TestNoncentralChiSquaredFunctions.test_tails  s     		!R,|(CL"b918LQb92HMQL92HM 	M2r:AHMQr:BTJQM:BTJr   zx, df)r   r   )r   r   r   c                 r    t        t        j                  ||d      t        j                  ||      d       y )Nr   r   r   )r   r   r  chdtr)r   r:   r   s      r   %test_chndtr_with_nc_zero_equals_chdtrzGTestNoncentralChiSquaredFunctions.test_chndtr_with_nc_zero_equals_chdtr  s'     			!R+RXXb!_5Ir   funrR   ))r^  r   r   )r   r^  r   )r   r   r^  )r^  r^  r   )r^  r   r^  )r   r^  r^  )r^  r^  r^  c                     t        j                  d      5  t        j                  t         j                  d      5   ||  d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wr`  )r   rd  r  re  rf  )r   rR   r  s      r   test_domain_errorz3TestNoncentralChiSquaredFunctions.test_domain_error$  sZ     [[( 	r66hG T
	 	 	 	s"   &A AA A	A  A)c                 8    t        j                   ||       sJ y r4   r$  )r   r  rR   s      r   test_nan_propagationz6TestNoncentralChiSquaredFunctions.test_nan_propagation0  s     xxT
###r   zx, df, nc, expectedr   c                 J    t        t        j                  |||      |d       y Nr   r   )r   r   r  )r   r:   r   r   rz  s        r   test_chndtr_edge_casesz8TestNoncentralChiSquaredFunctions.test_chndtr_edge_cases;  s     			!R,hUCr   N)r,   r-   r.   r  r  r  r  r  r   r   r  r   r  r   r   r   r  rN   r  r  r0   r   r   r  r    s   <h [[5	;

K

K [[W	!RVVrvvqk2JJ [[U	BKKr||< [[V	1	
 [[U	BKKr||< [[V
&&!Q!RVVQ!Q
&&"&&!	rvvq"&&1Arvvrvv3F
&&"&&"&&	!	#
$$ [[
Q266	
Q	
RVVQ	
RVVRVVQ	
Q	
&&!Q	
&&!RVVRVV	$
&&!Q	
&&"&&"&&"&&	)	+DDr   r  r:   r   r   c                 :    t        j                  d|       dk(  sJ y )Nr   r   )r   r   r  s    r   !test_chdtriv_p_equals_1_returns_0r  K  s    ::aq   r   c                       e Zd Zej                  j                  dddg      d        Zej                  j                  dd      d        Zd Zd	 Z	ej                  j                  d
g d      d        Z
y)
TestPdtrikzp, m, expected)r   r~   r   )r~   r   r   c                 :    t        j                  ||      |k(  sJ y r4   )r   r  )r   rt   r&   rz  s       r   test_edge_caseszTestPdtrik.test_edge_casesQ  s     yyA(***r   r&   )r   r   r   c                 Z    t        j                  t        j                  d|            sJ y r   )r   rM   r   r  )r   r&   s     r   test_p_equals_1_returns_nanz&TestPdtrik.test_p_equals_1_returns_nanW  s    xx		!Q(((r   c                 ~    t        j                  dgdgdggg d      }t        |t        j                  d             y )Nr   rP  gffffff?)r   g#B;r   )r   r   )r   r  r   r   zeros)r   rs   s     r   test_small_probabilitiesz#TestPdtrik.test_small_probabilities[  s3    IIsTFTF+-=>1bhhv./r   c                     g d}d}t        j                  ||      }t        t        j                  ||      |d       y )N)r   r  r     r   r   )r   pdtrr   r  )r   r&   rs   rt   s       r   test_roundtrip_against_pdtrz&TestPdtrik.test_roundtrip_against_pdtr`  s1    GGAqM		!Q7r   zp, m, k))gG:Ї7r   rx   )g;(&?r   c   )gkͧ1r   r  )g-i i_ c                 H    t        t        j                  ||      |d       y r  )r   r   r  )r   rt   r&   rs   s       r   test_accuracyzTestPdtrik.test_accuracyf  s     			!Q7r   N)r,   r-   r.   r  r  r  r  r  r  r  r  r0   r   r   r  r  P  s    [[-))+,+,+ [[S,/) 0)0
8 [[YIJ
8J
8r   r  za, b, p, refr   c                 F    t        t        j                  | ||      |       y r4   )r   r   r   )r   r   rt   refs       r   test_gdtrix_edge_casesr  p       1a#S)r   zp, b, x, refc                 F    t        t        j                  | ||      |       y r4   )r   r   r   )rt   r   r:   r  s       r   test_gdtria_edge_casesr  }  r  r   r4   )6r/   r+  numpyr   numpy.testingr   r   r   r  scipy.specialspecialr   scipy.special._testutilsr   r   r   scipy.special._mptestutilsr	   r
   r   r   r   r   ImportErrorr   r2   r?   rj   rv   r|   r   r   r   r   r  slowr   funcsr  r2  r7  rM  rR  rW  r]  rg  ri  r  r  r  rN   r   r  r  r  s   0r   <module>r     s     K K  , ,; ;%
 $
4 
4M4 M4`
D-
 vvyE yE  yEx 	F 54IaQqT4IJ K$"$;N6 263175310-#1/"/O#"/Ob 

SJ SJlwD wDt sCj)! *!8 8@ 1bff1bff266266VVQ266VVQ266VVRVVQVVRVVQ	* 	*	* 1bff2662661bff2661VVQ266VVQVVQ266VVQ	* 	*	*U  %8$F%X 5Js   M ?M3M0/M0