
    5[gN                     &   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&y)    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     O/var/www/html/bid-api/venv/lib/python3.12/site-packages/scipy/stats/_ksstats.py_log_nfactorial_div_n_pow_nr   ]   sF     
QB66!9Q;?XaZ'"rzz:JBqD/Q*QQQ    c                 0    t        j                  | dd      S )z%clips a probability to range 0<=p<=1.        r   )r   clip)ps    r   
_clip_probr   g   s    771c3r   c                 F    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                    |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kD  r|dz  rt        j                  ||      }||z  }t        j                  ||      }|dz  }t        j                  ||dz
  |dz
  f         t        kD  r|t        z  }|t        z  }|dz  }|dkD  r||dz
  |dz
  f   }t        d| dz         D ]9  }||z  | z  }t        j                  |      t         k  s(|t        z  }|t        z  }; |dk7  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    	Cx$S#s33	
QB	Sy$S#s33BGGBKA	BA	A	A
!QA 99QADa4iA
A
C!a%q	!a%C  
QUS[!	a	!AqD&	(B2XAbE1a[!a%!)}!a%&!) AadGwwqq!Ab!eH66"((1+a.!D	
BEF
q&699T1%DVOEIIaO!66!AE1q5L/"V+KAeOF1W q& 	QUAE\A 1a!e_EAI66!9vKAUNE	  zHHQ CE3//r   c                 8   | dk(  r| |z
  dz
  ||z   dz
  }}nit        | 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    Av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kD  rdnd}|dkD  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 ]5  }|
|dz
     |z  |z  |
|<   ||dz
     |z  |z  ||<   ||dz
     |z  |z  ||<   7 t        j                  |	g      }t        j                  |	g      }d|d<   d\  }}t        d| |||      \  }}t        dd| z  dz         D ]  }|}||}}||}}|j                  d       t        || |||      \  }}|dk(  s|d| z  dz   k(  r|
}n	|dz  r|n|}||z
  dz   }|dkD  sZt        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 ]5  }t        j                  |      t        kD  r|t        z  }|t        z  }||z  }7 |dk7  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	RXXa[	Bq2vAAsQwAa%QQEs7aFaLEXXe_FI((5/K F1IIaLKNE56qS!A#a%!ac'12lH1e_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6Q!a%!)^D!"QIKD2gk7;;r"s(28c>:D#JGDbJBw{H J,ABByM266":&&f(R-C+ !0 QW+C1a!e_66#;6MCUNEq	  zhhsE"
S3Y
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 ]y  }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  }{ ||	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    	Cx$S#377Cx$S#377

QA$%qD!Q$1ad$:!HfeT<!h&Dh$S#3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HHQKE rwwrAv~&'D4BEAI !1adAqD%!QU#3X-X-E	9X-E	9CHDF G 	   
QJE	XE	RXXq!e)R!Q$Yq"u=>>E 	|a(*+A	4B	BQwHaZF552:D(]FffX&'G{X%sV|44G	!HHffftm6AFJKG{X%sTz22G	!HH((1s7BIIc%j$9C$?@K	[EaAu:DKr   c                    t        j                  |       r| S t        |       | k7  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\  r4dt        j                  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                  j                  | |      z  }t	        d|z
  ||      S |s9|dk\  ry|dk\  r.dt        j                  j                  | |      z  }t        |      S |dk\  rd}n-| 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    
xx{
1v{a1fvvCx$S#377Cx$S#377	AACx8(cs;;877299Q!,A6!A#'BCD665a81rvvac!e};LLMD$T3:3??AEzC!Ga<$QXt==Cx5==((A..$S4Z3??AICx  A40D(sTzsCC>$Qt4D(sTzsCC5==((A..$S4Z3?? u}},,Q22Dd##D	
fQVs*1$/#Aqd3 #-SAAr   c                     t        j                         r S t                k7  s dk  rt         j                  S |dk\  s|dk  ry |z  }|dk  r|dk  ry dk  r9t        j                  t        j
                  d       d z  z  d|z  dz
  z        }n@t        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                  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     sl   
 
xx{
1v{a1fvvCx16	AACx88''"))Aq/S1W5QCDC&&4Q71Q3"&&QQRBS:SSTCQwA~AEzC!G1%%))Cx5;;$$((A... KEq3q5y!EsQwE sA%q11r   c                     t        j                         r S t                k7  s dk  rt         j                  S dk  rd z  S |dk  ryt        j                  t        j
                        t        j                  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                  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'    
xx{
1v{a1fvvAv1uAvFFBFF1I 6 6qs ;;Q>?EA~a1$$	"&&3-/	""AAAI~	q	"''!*	$B	Rs1u	B" >>  SUBU ;;r   c                 p   t        j                  | ||dgdt         j                  t         j                  t         j                  g      }|D ]X  \  }}}}t        j                  |      r||d<   #t        |      |k7  rt        d|       t        t        |      ||      |d<   Z |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)	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$"BJJ"**E
GBBa88B<AcFr7b=22$788#b'240#  [[_FMr   c                    t        j                  | |dg      }|D ]U  \  }}}t        j                  |      r||d<   "t        |      |k7  rt	        d|       t        t        |      |      |d<   W |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88B<AcFr7b=22$788CGR(#  [[_FMr   c                 4   t        j                  | ||dg      }|D ]j  \  }}}}t        j                  |      r||d<   #t        |      |k7  rt	        d|       |r|d|z
  fnd|z
  |f\  }}	t        t        |      ||	      |d<   l |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Ba88B<AcFr7b=22$788$(r1R4jqtRjt3r7E4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	-"--"E	*	-"--"UF	+2771ruu9266!bee)	eeqj55A:
%%1*I R 
H0V&$QhPf9Bx'2T<:"J:r   