
    _MhN                        d dl Zd dlZd dlmc mZ d dlm	Z	 dZ
 ej         ej        d          e
          Z ej         ej        d          e
           Z ej        dej        z            Z ej        dej        z            ZdZ ej        d          Zej        dz  Zej        dz  Zej        d	z  Zg d
Zd Zd ZddZddZd ZddZddZ ddZ!d Z"d Z#ddZ$d Z%ddZ&dS )    N)_derivative         i<         )gSˆBgAAz?g}<ٰj_g#+K?g88CgJ?gllfgUUUUUU?c                     d| z  }t          j        |           dz  | z
  t          dz  z   |t          j        t          || z            z  z   S )N      ?r   )nplog_LOG_2PIpolyval_STIRLING_COEFFS)nrns     T/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/stats/_ksstats.py_log_nfactorial_div_n_pow_nr   ]   sG     
QB6!99Q;?XaZ'"rz:JBqD/Q/Q*QQQ    c                 .    t          j        | dd          S )z%clips a probability to range 0<=p<=1.        r   )r   clip)ps    r   
_clip_probr   g   s    71c3r   Tc                 L    t          j        || |          }t          |          S )z>Selects either the CDF or SF, and then clips to range 0<=p<=1.)r   wherer   )cdfprobsfprobcdfr   s       r   _select_and_clip_probr    l   s!    
gv&&Aa==r   c                 8   |dk    rt          dd|          S | |z  }|dk    rt          dd|          S t          t          j        |                    }||z
  }d|z  dz
  }t          j        ||g          }t          j        d|dz             }d||z  z
  }	t          j        |          }
d}|D ]"}||
|dz
  <   ||z  }|	|dz
  xx         |z  cc<   #t          d|z  dz
  d          |z  d||z  z  z
  }d|z   |z  |	d<   t          d|          D ]}|
d||z
  dz            ||dz
  d|f<   |	|dddf<   t          j	        |	d	          |dddf<   t          j
        t          j        |          d                   }| }d}d}|dk    r|dz  rt          j        ||          }||z  }t          j        ||          }|dz  }t          j        ||dz
  |dz
  f                   t          k    r|t          z  }|t          z  }|dz  }|dk    ||dz
  |dz
  f         }t          d| dz             D ];}||z  | z  }t          j        |          t           k     r|t          z  }|t          z  }<|dk    rt          j        ||          }t          |d|z
  |          S )
zComputes the Kolmogorov CDF:  Pr(D_n <= d) using the MTW approach to
    the Durbin matrix algorithm.

    Durbin (1968); Marsaglia, Tsang, Wang (2003). [1], [3].
    r   r         ?r   r   r   N)axis)r    intr   ceilzerosarangeemptymaxrangeflipeyeshapematmulabs_EP128_E128_EM128ldexp)r   dr   ndkhmHintmvwfacjttiHpwrnnexpntHexpntr   s                       r   _kolmogn_DMTWrF   r   s    	Cxx$S#s333	
QB	Syy$S#s333BGBKKA	BA	A	A
!QA 9QADa4iA
A
C  !a%q	!a%C	QUS[!		a	!AqD&	(B2XAbE1a[[ % %!a%!)}!a%&&!)AaaadGwqq!!!Ab!!!eH6"(1++a.!!D	
BEF
q&&6 	9T1%%DVOEIaOO!6!AE1q5L/""V++KAeOF1W q&& 	QUAE\A 1a!e__  EAI6!99vKAUNE zzHQ CE3///r   c                 V   | dk    r| |z
  dz
  ||z   dz
  }}not          | dz   d          \  }}|dk    r=||dz   k    r||z
  |z
  dz
  ||z   |z   dz
  }}n3|dz
  |z
  |z
  dz
  ||z   dz
  |z   dz
  }}n|dz
  |z
  dz
  ||z   |z   dz
  }}t          |dz   d          t          ||          fS )z0Compute the endpoints of the interval for row i.r   r   r   )divmodr*   min)	rA   r   llceilfroundfj1j2ip1div2ip1mod2s	            r   _pomeranz_compute_j1j2rQ      s    Avvuq"u*q.B "!a%++a<<!a%R%!+QVe^a-?B 1r)F2Q6"q8H58PST8TBq[2%)7R<&+@1+DBrAvq>>3r1::%%r   c                    | |z  }t          t          j        |                    }d||z
  z  }t          |d|z
            }|dk    rdnd}|dk    rdnd}d|dz   z  }	t          j        |	          }
t          j        |	          }t          j        |	          }d|
d<   d|d<   d|d<   d}|| z  d|z  | z  dd|z  z
  | z  }}}t          d|	          D ]>}|
|dz
           |z  |z  |
|<   ||dz
           |z  |z  ||<   ||dz
           |z  |z  ||<   ?t          j        |	g          }t          j        |	g          }d|d<   d\  }}t          d| |||          \  }}t          dd| z  dz             D ]}|}||}}||}}|                    d           t          || |||          \  }}|dk    s|d| z  dz   k    r|
}n	|dz  r|n|}||z
  dz   }|dk    rt          j	        |||z
  ||z
  |z            |d|                   }||z
  }||z
  dz   }||||z            |d|<   dt          j
        |          cxk     rt          k     rn n|t          z  }|t          z  }||z   |z
  }|| |z
           }t          d| dz             D ]8}t          j        |          t          k    r|t          z  }|t          z  }||z  }9|dk    rt          j        ||          }t!          |d|z
  |          }|S )	z[Computes Pr(D_n <= d) using the Pomeranz recursion algorithm.

    Pomeranz (1974) [2]
    r   r   r   r"   r   )r   r   r   N)r%   r   floorrI   r)   r+   r'   rQ   fillconvolver*   r3   r1   r2   r0   r4   r    ) r   xr   trJ   fgrK   rL   npwrsgpower	twogpoweronem2gpowerrD   g_over_ntwo_g_over_none_minus_two_g_over_nr9   V0V1V0sV1srM   rN   rA   k1pwrsln2conv
conv_startconv_lenanss                                    r   _kolmogn_Pomeranzrl      s}   $ 	
AA	RXa[[		Bq2vAAsQwAa%%QQQEs77aaFaLEXe__FI(5//K F1IIaLKNE56qS!A#a%!ac'12lH1e__ I I1q5MH,q0q	 Q',6:	!$QU+.DDqHA	5'		B	5'		BBqEHC#Aq"eV<<FB1a!eai      RBS
'1b%@@B66Q!a%!)^^DD!"Q7IIKD2gk77;r"s(28c>"9:D#JGGDbJBw{H J,A!ABByyM26"::&&&&&&&&&f(R-C QW+C1a!e__  6#;;6MCUNEq zzhsE""
S3Y
4
4CJr   c           	         |dk    rt          dd|          S |dk    rt          dd|          S t          j        |           |z  }|dz  |dz  |dz  |dz  f\  }}}}t           dz  |z  }|t          k     rt          dd|          S t          j        |          }	| }
t          dz  }d|z  d|z  z   }d|z  d	|z  z
  t          z  dz  }t          d
d|z  z
  z  dz  }t          d	d|z  z
  z  dz  }t          d|z  d|z  z   z  dz  }t          d|z  d|z  z
  z  dz  }d|z  d|dz  z  z
  }t          j        d          }t          t          j
        d|z  t          j        z                      }t          |dd          D ]w}d|z  d
z
  }|dz  |dz  |dz  }}}t          j        |	d|z            }t          j        d|
||z  z   |||z  z   ||z  z   |||z  z   ||z  z   ||z  z   g          }||z  }||z  }x||	z  }|t          z  }|t          j        |d|z  d|dz  z  d|dz  z  g          z  }t          j        t           dz  |z            }	t          j        |dd          }|dz  }t"          |z  }t          j        |z  }|	|z  } t          j        || z            }!|!t          t          z  d|z  z  z  }!|dxx         |!z  cc<   t          j        ||z   ||z
  z  |z  | z            }"|"t          t          z  d|z  z  z  }"|dxx         |"z  cc<   t          j        | dz  t          j        t'          |                    dz            }#||#z  }|s|dz  }|dxx         d
z  cc<   t%          |          }$|$S )aP  Computes the Pelz-Good approximation to Prob(Dn <= x) with 0<=x<=1.

    Start with Li-Chien, Korolyuk approximation:
        Prob(Dn <= x) ~ K0(z) + K1(z)/sqrt(n) + K2(z)/n + K3(z)/n**1.5
    where z = x*sqrt(n).
    Transform each K_(z) using Jacobi theta functions into a form suitable
    for small z.
    Pelz-Good (1976). [6]
    r   r   r   r   r   r   r	         r         @   i      `   iZ   r   r#   H      iP  
   i          @)r    r   sqrt_PI_SQUARED_MIN_LOGexp_PI_FOUR_PI_SIXr'   r%   r&   pir+   powerarray_SQRT2PIr(   _SQRT3sumlen)%r   rV   r   zzsquaredzthreezfourzsixqlogqk1ak1bk2ak2bk2ck3dk3ck3bk3aK0to3maxkr7   r9   msquaredmfourmsixqpowercoeffsksksquaredsqrt3zkspiqpwersk2extrak3extrapowers_of_nKsums%                                        r   _kolmogn_PelzGoodr   #  s    	Cxx$S#37777Cxx$S#37777


QA$%qD!Q$1ad$:!HfeT<!h&Dh$S#37777
tA )C
/C
d(QY
Cu9q8|#{
2Q
6C
a!h,&
'"
,C
Qh&
'"
,C
cHnsU{2
3b
8C
urDy0
1A
5C
*rAqDy
 CHQKKE rwrAv~&&''D4B 	 	EAI !1adAqD%!QU##3X-X-E	9X-E	9CHDF G G 		QJE	XE	RXq!e)R!Q$Yq"u=>>>E 	|a(*++A	4B		BQwHaZF52:D(]FfX&''G{X%sV|44G	!HHHHHHfftm6AFJKKG{X%sTz22G	!HHHHHH(1s7BIc%jj$9$9C$?@@K	[E aAu::DKr   c                 |   t          j        |           r| S t          |           | k    s| dk    rt           j        S |dk    rt	          dd|          S |dk    rt	          dd|          S | |z  }|dk    r|dk    rt	          dd|          S | dk    r:t          j        t          j        d| dz             d| z  z  d|z  dz
  z            }n?t          j        t          |           | t          j	        d|z  dz
            z  z             }t	          |d|z
  |          S || dz
  k    r dd|z
  | z  z  }t	          d|z
  ||          S |dk    r8dt          j                            | |          z  }t	          d|z
  ||          S ||z  }| dk    r|d	k    r't          | |d
          }t	          |d|z
  |          S |dk    r't          | |d
          }t	          |d|z
  |          S dt          j                            | |          z  }t	          d|z
  ||          S |s@|dk    rdS |dk    r2dt          j                            | |          z  }t          |          S |dk    rd}n7| dk    r| |dz  z  dk    rt          | |d
          }nt!          | |d
          }t	          |d|z
  |          S )zComputes the CDF(or SF) for the two-sided Kolmogorov-Smirnov statistic.

    x must be of type float, n of type integer.

    Simard & L'Ecuyer (2011) [7].
    r   r   r   rn   r"      r   r   g0q&?Tr   g      w@g@g      2@i g      ?gffffff?)r   isnanr%   nanr    prodr(   r   r   r   scipyspecialsmirnovrF   rl   r   r   )r   rV   r   rW   prob	nxsquaredr   s          r   _kolmognr   v  s    
x{{ 
1vv{{a1ffvCxx$S#37777Cxx$S#37777	AACxx88(cs;;;;88729Q!,,A6!A#'BCCDD65a881rvac!e}};LLMMD$T3:3????AEzzC!Ga<$QXt====Cxx5=((A...$S4Z3????AICxx   A4000D(sTzsCCCC>>$Qt444D(sTzsCCCC5=((A...$S4Z3????  $3u},,Q222Dd###D	
fQVs**1$///#Aqd333 #-SAAAAr   c                     t          j                   r S t                      k    s dk    rt           j        S |dk    s|dk    rdS  |z  }|dk    r|dk    rdS  dk    r7t          j        t          j        d           d z  z  d|z  dz
  z            }nBt          j        t                      dz
  t          j        d|z  dz
            z  z             }|dz   dz  z  S | dz
  k    rdd|z
   dz
  z  z   z  S |dk    r(dt          j
        j                            |           z  S |dz  }t          ||d z  z
            }t          |d|z
            } fd	}t          |||d
          S )zvComputes the PDF for the two-sided Kolmogorov-Smirnov statistic.

    x must be of type float, n of type integer.
    r   r   r"   r   r   r   r   g      @c                 $    t          |           S N)kolmogn)_xr   s    r   _kkz_kolmogn_p.<locals>._kk  s    q"~~r   rp   )dxorder)r   r   r%   r   r   r(   r   r   r   r   statsksonepdfrI   r   )r   rV   rW   prddeltar   s   `     r   
_kolmogn_pr     s   
 
x{{ 
1vv{{a1ffvCxx166q	AACxx88388'")Aq//S1W5QCDDCC&4Q771Q3"&QQRBSBS:SSTTCQwA~AEzzC!G1%%))Cxx5;$((A.... KEq3q5y!!EsQwE     sA%q1111r   c                     t          j                   r S t                      k    s dk    rt           j        S dk    rd z  S |dk    rdS t          j        t          j                  t          j                             dz             z
   z            }|d z  k    r|d z  z   dz  S t          j	        t          j        |dz             z             }|dd z  z
  k    r|S t          j                  t          j                   z  }t          |dd z  z
            } fd}t          j                            |d z  |d          S )	zeComputes the PPF/ISF of kolmogn.

    n of type integer, n>= 1
    p is the CDF, q the SF, p+q=1
    r   r   r   r   r|   c                 *    t          |           z
  S r   )r   )rV   r   r   s    r   _fz_kolmogni.<locals>._f  s    1~~!!r   g+=)xtol)r   r   r%   r   r   r   r   r   loggammaexpm1scu	_kolmogcir}   rI   optimizebrentq)r   r   r   r   rV   x1r   s   ``     r   	_kolmognir     s\    
x{{ 
1vv{{a1ffvAvv1uAvvsFBF1II 6 6qs ; ;;Q>??EA~~a1$$	"&3--/	"	""AAAI~~	q		"'!**	$B	Rs1u		B" " " " " " >  SUBU ;;;r   c                 r   t          j        | ||dgdgdt           j        t           j        t           j        g          }|D ]h\  }}}}t          j        |          r||d<   !t          |          |k    rt          d|           t          t          |          ||          |d<   i|j        d         }|S )a  Computes the CDF for the two-sided Kolmogorov-Smirnov distribution.

    The two-sided Kolmogorov-Smirnov distribution has as its CDF Pr(D_n <= x),
    for a sample of size n drawn from a distribution with CDF F(t), where
    :math:`D_n &= sup_t |F_n(t) - F(t)|`, and
    :math:`F_n(t)` is the Empirical Cumulative Distribution Function of the sample.

    Parameters
    ----------
    n : integer, array_like
        the number of samples
    x : float, array_like
        The K-S statistic, float between 0 and 1
    cdf : bool, optional
        whether to compute the CDF(default=true) or the SF.

    Returns
    -------
    cdf : ndarray
        CDF (or SF it cdf is False) at the specified locations.

    The return value has shape the result of numpy broadcasting n and x.
    Nzerosize_ok)flags	op_dtypes.n is not integral: rn   r#   )	r   nditerfloat64bool_r   r%   
ValueErrorr   operands)	r   rV   r   it_nr   _cdfr   results	            r   r   r     s    0 
Aq#t$]O"BJ"*E
G 
G 
GB 1 1Ba8B<< 	AcFr77b==7277888#b''24000#[_FMr   c                    t          j        | |dg          }|D ]e\  }}}t          j        |          r||d<    t          |          |k    rt	          d|           t          t          |          |          |d<   f|j        d         }|S )a  Computes the PDF for the two-sided Kolmogorov-Smirnov distribution.

    Parameters
    ----------
    n : integer, array_like
        the number of samples
    x : float, array_like
        The K-S statistic, float between 0 and 1

    Returns
    -------
    pdf : ndarray
        The PDF at the specified locations

    The return value has shape the result of numpy broadcasting n and x.
    N.r   r#   )r   r   r   r%   r   r   r   )r   rV   r   r   r   r   r   s          r   kolmognpr     s    " 
Aq$<	 	 B ) )	B8B<< 	AcFr77b==7277888CGGR((#[_FMr   c                 J   t          j        | ||dg          }|D ]z\  }}}}t          j        |          r||d<   !t          |          |k    rt	          d|           |r|d|z
  fnd|z
  |f\  }}	t          t          |          ||	          |d<   {|j        d         }
|
S )a  Computes the PPF(or ISF) for the two-sided Kolmogorov-Smirnov distribution.

    Parameters
    ----------
    n : integer, array_like
        the number of samples
    q : float, array_like
        Probabilities, float between 0 and 1
    cdf : bool, optional
        whether to compute the PPF(default=true) or the ISF.

    Returns
    -------
    ppf : ndarray
        PPF (or ISF if cdf is False) at the specified locations

    The return value has shape the result of numpy broadcasting n and x.
    N.r   r   r#   )r   r   r   r%   r   r   r   )r   r   r   r   r   _qr   r   _pcdf_psfr   s              r   kolmognir   ;  s    & 
Aq#t$	%	%B 1 1Ba8B<< 	AcFr77b==7277888$(8r1R4jjqtRjt3r77E400#[_FMr   )T)'numpyr   scipy.specialr   scipy.special._ufuncsr   _ufuncsr   scipy._lib._finite_differencesr   r2   r4   
longdoubler1   r3   r}   r   r   r   r   r   r   r~   r   r   r   r   r   r    rF   rQ   rl   r   r   r   r   r   r   r    r   r   <module>r      s  H         # # # # # # # # # 6 6 6 6 6 6	-"-""E	*	*	-"-""UF	+	+271ru926!be)	eqj5A:
%1*I I I R R R     
   H0 H0 H0 H0V& & &$Q Q Q QhP P P Pf9B 9B 9B 9Bx'2 '2 '2T< < <:" " " "J  :     r   