
     hm3                        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n# e$ r  ed          ZY nw xY w 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j!        j"         eed           G d d                                  Z#d Z$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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dS )ProbArgz*Generate a set of probabilities on [0, 1].c                 "    d| _         d| _        d S )Nr      )abselfs    [/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/scipy/special/tests/test_cdflib.py__init__zProbArg.__init__*   s        c                 f   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    1a4LL[bhsmmQ//[c1q55999!""=RXc]]C333E"b"*y||r   N)__name__
__module____qualname____doc__r   r)    r   r   r   r   (   s8        44  
    r   r   c                       e Zd Zd Zd ZdS )EndpointFilterc                 >    || _         || _        || _        || _        d S N)r   r   rtolatol)r   r   r   r3   r4   s        r   r   zEndpointFilter.__init__:   s"    				r   c                 P   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~    q46z""TYrvdf~~%=	%IIq46z""TYrvdf~~%=	%IIxud333r   N)r*   r+   r,   r   r;   r.   r   r   r0   r0   9   s2          4 4 4 4 4r   r0   c                   .    e Zd Z	 	 	 d	dZd Zd Zd ZdS )
_CDFDataT     Nc                    || _         || _        || _        || _        || _        || _        || _        || _        |	| _        t          |t                    sd | _        d | _        d S |
|wt          |
t                    r|
| _        n|
gt          | j                  z  | _        t          |t                    r	|| _        d S |gt          | j                  z  | _        d S d | _        d | _        d S r2   )spfuncmpfuncindexargspecspfunc_firstdpsr#   r3   r4   
isinstancelist
endpt_rtol
endpt_atollen)r   rA   rB   rC   rD   rE   rF   r#   r3   r4   rI   rJ   s               r   r   z_CDFData.__init__G   s     
(		'4(( 	#"DO"DOOO#z'=*d++ A",#-,s4</@/@"@*d++ A",#-,s4</@/@"@"DO"DOOOr   c                 R   | j         r | j        | }t          j        |          rt          j        S t          |          }||| j        <   t          j        | j	                  5   | j
        t          |           }t          |j                  }d d d            n# 1 swxY w Y   nt          j        | j	                  5   | j
        | }t          |j                  }d d d            n# 1 swxY w Y   t          |          }||| j        <    | j        t          |           }|S r2   )rE   rA   r   isnannanrH   rC   r   workdpsrF   rB   tupler   real)r   argsress      r   idmapz_CDFData.idmapd   s    	,$+t$Cx}} v::D"D)) * *!dk5;;/))* * * * * * * * * * * * * * *
 )) * *!dk4())* * * * * * * * * * * * * * * ::D"D$+uT{{+C
s$   $,BB #B C,,C03C0c           	         | j         	| j        d S g }t          | j         | j        | j                  D ]X\  }}}|||                    d             |d}n|d}|                    t          |j        |j        ||                     Y|S )Ng        )rI   rJ   ziprD   appendr0   r   r   )r   filtersr3   r4   specs        r   get_param_filterz_CDFData.get_param_filterx   s    ?"t'>4 #DOT_dl S S 		G 		GD$|t$$$NN>$&$&$EEFFFFr   c           
         t          | j        | j                  }|                                 }t	          t          |j        d                             }|j        d         }t          j        ||d d | j	        f         
                    |j        d         d          f          }t          | j        |||| j        | j        d|                                           d S )Nr   r   F)param_columnsresult_columnsr3   r4   
vectorizedparam_filter)r
   rD   r#   rZ   rP   rangeshaper   hstackrC   reshaper   rT   r3   r4   check)r   rR   r_   r\   r]   s        r   rd   z_CDFData.check   s    df--,,..eDJqM2233Ay$QQQtz\ 2 : :4:a=! L LMNNT,^idiE*	, 	, 	, -2EGGGGGr   )Tr>   r?   NNNN)r*   r+   r,   r   rT   rZ   rd   r.   r   r   r=   r=   F   s^        DH15-1# # # #:  (  "
4 
4 
4 
4 
4r   r=   c                  F    t          | i |}|                                 d S r2   )r=   rd   )r   kwds      r   _assert_invertsrh      s%    !rAGGIIIIIr   c                 L   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    jmmVZ]]FJqMM!qAAvvz!}}	
az!}}K1D)))E>!a%Q5dCC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   ubrS   s        r   _f_cdfrz      sy    1uuz!}}*S//6:c??FJqMMa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xY w Y   d S )N      ?r   g      ?rv   )	r   mprF   rO   rn   hyp2f1gammasqrtpi)dftrF   facs       r   _student_t_cdfr      s   
{im			  
2
1AmCb1fsQTE"H==qc26l++++v{69R<((c"f)=)===Sy                 s   B-C""C&)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   ncrS   s       r   _noncentral_chi_pdfr      sg    
.A6;r!t#4#4
5
5C6:Bik""AbDBqD3J#7799CJr   c                 <   |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xY w Y   d S )Nc                 &    t          |           S r2   )r   )r   r   r   s    r   <lambda>z%_noncentral_chi_cdf.<locals>.<lambda>   s    $72r$B$B r   r   )r   r}   rF   rn   rO   quad)r8   r   r   rF   rS   s    ``  r   _noncentral_chi_cdfr      s    
{im
1vz"~~vz"~~IAr2			  kBBBBBQFKK                 s   'B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                      e Zd Zej                            d          d             Zd Zd Zd Z	ej                            d          d             Z
d Zd	 Zd
 Zd Zej                            d          d             Zd Zd Zej                            d          d             Zej                            d          d             Zd Zd Zd Zej                            d          d             ZdS )
TestCDFlibF)runc           
          t          t          j        t          dt	                      t          dd          t	                      gd           d S )Nr   r     -C6?r3   )rh   spbdtrikrt   r   r	   r   s    r   test_bdtrikzTestCDFlib.test_bdtrik   sJ    I		6!T??GII6		 	 	 	 	 	r   c           	          t          t          j        t          dt	          dd          t                      t                      gdg d           d S )Nr   r   r   )NNư>r3   rJ   )rh   r   bdtrinrt   r	   r   r   s    r   test_bdtrinzTestCDFlib.test_bdtrin   sS    Iq$GII6"4"4"4		6 	6 	6 	6 	6 	6r   c                     t          t          j        d dt                      t	          ddd          t	          dddd          gd	           d S )
Nc                 2    t          j        | ||d          S NTrk   r   rp   r   r   r8   s      r   r   z)TestCDFlib.test_btdtria.<locals>.<lambda>       FN1aA4HHH r   r         Y@Finclusive_ar   r   inclusive_br   r   )rh   r   btdtriar   r   r   s    r   test_btdtriazTestCDFlib.test_btdtria   se    JHH		3q#5999Aqe???A	 	 	 	 	 	r   c                     t          t          j        d dt          ddd          t	                      t          dddd          gdg d	
           d S )Nc                 2    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   sm    JHHAs...		A5e<<<>"6"6"6	8 	8 	8 	8 	8 	8r   c                     t          t          j        t          dt	          dd          t                      t          ddd          gd           d S )Nr   d   r   Fr   r   r   )rh   r   fdtridfdrz   r	   r   r   r   s    r   test_fdtridfdzTestCDFlib.test_fdtridfd   sU    Kq#		3q#5+I+I+IJ		 	 	 	 	 	r   c                     t          t          j        d dt                      t	          ddd          t	          ddd          gdg d	           d S )
Nc                 6    t          j        || |z  d          S NTr   rm   r   gammaincr   s      r   r   z(TestCDFlib.test_gdtria.<locals>.<lambda>       FOA1$GGG r   r        @@Fr   g     @r   Nr   绽|=r   )rh   r   gdtriar   r   r   s    r   test_gdtriazTestCDFlib.test_gdtria   sk    IGG		3q#5999As...06:***	, 	, 	, 	, 	, 	,r   c                     t          t          j        d dt          ddd          t	                      t          ddd          gd	           d S )
Nc                 6    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  sb    IGGAs...		As...06:		< 	< 	< 	< 	< 	<r   c                     t          t          j        d dt          ddd          t          ddd          t	                      gdg d	           d S )
Nc                 6    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
  sk    IGGAs...As0N0N0N		!%***	, 	, 	, 	, 	, 	,r   c           	          t          t          j        t          t	          dd          t          dt          j                  gd           d S )Nr   r   r   r   r   )r   r   stdtrr   r	   r   r   infr   s    r   
test_stdtrzTestCDFlib.test_stdtr  sI    HAs^^S//0t	= 	= 	= 	= 	= 	=r   c                     t          t          j        t          dt	                      t                      gd           d S )Nr   r   r   )rh   r   stdtridfr   r   r   r   s    r   test_stdtridfzTestCDFlib.test_stdtridf  s?    K		355!	. 	. 	. 	. 	. 	.r   c           	          t          t          j        t          dt	          dd          t                      gdd dg           d S )Nr   r   r   r   r   )rh   r   stdtritr   r	   r   r   s    r   test_stdtritzTestCDFlib.test_stdtrit   sJ    Jq#		*e}		& 	& 	& 	& 	& 	&r   c           
      |    t          t          j        d dt                      t	          dd          gd           d S )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FF r   r   r   r   r   r   )rh   r   chdtrivr   r	   r   s    r   test_chdtrivzTestCDFlib.test_chdtriv'  sF    JFF		6!S>>*	7 	7 	7 	7 	7 	7r   c                     t          t          j        t          dt	          ddd          t                      t	          ddd          gddd	           d S )
Nr   r   r   Fr   r   r   r   r#   r3   r4   )rh   r   	chndtridfr   r   r   r   s    r   test_chndtridfzTestCDFlib.test_chndtridf-  se     	LAs...		As...0E	+ 	+ 	+ 	+ 	+ 	+r   c           
          t          t          j        t          dt	          ddd          t          dd          t                      gddd	
           d S )Nrv   r   r   Fr   r   r   r   r   r   )rh   r   	chndtrincr   r   r	   r   r   s    r   test_chndtrinczTestCDFlib.test_chndtrinc7  s[     	L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	
           d S )Nr   r   r   Fr   r   r   r   )r   NN)r#   r3   r4   rJ   )rh   r   chndtrixr   r   r	   r   r   s    r   test_chndtrixzTestCDFlib.test_chndtrix@  sb    K		6!S>>3q#5+I+I+IJE)))	+ 	+ 	+ 	+ 	+ 	+r   c                 x    t          j        d          t          d fdt                      gd           d S )Nr   c                 ,    t          j        | d          S )Nr   )r   tklmbda)r8   s    r   r   z4TestCDFlib.test_tklmbda_zero_shape.<locals>.<lambda>M  s    bj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  sN    jmm&&0000UUG$	  	  	  	  	  	 r   c                     t          t          j        t          dt	                      t          ddd          gddddg           d S )Nr   iF)r   r   g&.>)rE   r3   rJ   rh   r   r   r   r   r   r   s    r   test_tklmbda_neg_shapez!TestCDFlib.test_tklmbda_neg_shapeQ  sT    J!		3sA5999:Td|	% 	% 	% 	% 	% 	%r   c                     t          t          j        t          dt	                      t          ddd          gdd           d S )Nr   r   Fr   r   )rE   r3   r   r   s    r   test_tklmbda_pos_shapez!TestCDFlib.test_tklmbda_pos_shapeY  sM    J!		3q#5999:T		+ 	+ 	+ 	+ 	+ 	+r   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   r   r   r      s        [5!!  "!6 6 6  8 8 8 [5!!  "!, , ,< < <, , ,= = = [5!!. . "!.& & &7 7 7 [5!!+ + "!+ [5!!+ + "!++ + +     % % % [5!!+ + "!+ + +r   r   c                  l   g d} t           j                            d           | D ]\  }}t          t          |          }d t           j                            |          D             }t          j        | D ];} || }t          d |D                       rt          |t           j
                   ;<d S )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                 r    g | ]4}t          |          t          j        t          j        t          j         f5S r.   )floatr   rN   r   .0r8   s     r   
<listcomp>z"test_nonfinite.<locals>.<listcomp>  s;     1 1 1q2626BF7; 1 1 1r   c              3   >   K   | ]}t          j        |          V  d S r2   )r   rM   r  s     r   	<genexpr>z!test_nonfinite.<locals>.<genexpr>  s*      --128A;;------r   )r   randomseedgetattrr   rand	itertoolsproductanyr   rN   )funcsfuncnumargsargs_choicesrR   rS   s         r   test_nonfiniter  b  s         ED INN1  gr4  1 1	w//1 1 1 %|4 		 		D$+C------- S"&)))) 		 r   c                      t          j        ddt          j        d          dz             } g d}t	          | |           d S )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   )rS   res_exps     r   test_chndtrix_gh2158r    sK    
+h29S>>$#6
7
7C5 5 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 7 7 7 7 7 7 7       , , , , , , , , , ,; ; ; ; ; ; ; ; ; ; ; ; ; ;%MMMM % % %]8$$FFF%       "
4 
4 
4 
4 
4 
4 
4 
4M4 M4 M4 M4 M4 M4 M4 M4`  
D D D          - - -
 vvO+ O+ O+ O+ O+ O+ O+  O+d4 4 4n" " " " "s   ; AA