o
     JAf9                     @   s  	 g d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
 ddlmZmZ ddlmZmZmZmZmZmZmZmZ ddlmZ dd	lmZmZ G d
d deZdd Zdd Zdd Zdd Z dd Z!dd Z"dd Z#dNddZ$dd Z%dd  Z&d!d" Z'dOd#d$Z(d%d& Z)d'd( Z*d)d* Z+dPd,d-Z,d.d/ Z-d0d1 Z.d2d3d4d5d6Z/dOd7d8Z0dOd9d:Z1dOd;d<Z2dOd=d>Z3dOd?d@Z4dAdB Z5dCdD Z6edEdFZ7dGdH Z8dIdJ Z9zddKl:m9Z9 W n	 e;y   Y nw G dLdM dMZ<dS )Q)
NormalDistStatisticsErrorcorrelation
covariancefmeangeometric_meanharmonic_meanlinear_regressionmeanmedianmedian_groupedmedian_high
median_lowmode	multimodepstdev	pvariance	quantilesstdevvariance    NFraction)Decimal)groupbyrepeat)bisect_leftbisect_right)hypotsqrtfabsexperftaulogfsum)
itemgetter)Counter
namedtuplec                   @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r+   r+   !/usr/lib/python3.10/statistics.pyr      s    r   c           
      C   s   	 d}i }|j }t}t| tD ] \}}t||}tt|D ]\}}|d7 }||d| ||< qqd |v r9|d  }	ntdd | D }	||	|fS )Nr      c                 s       | ]
\}}t ||V  qd S Nr   .0dnr+   r+   r,   	<genexpr>       z_sum.<locals>.<genexpr>)	getintr   type_coercemap_exact_ratiosumitems)
datacountpartialsZpartials_getTtypvaluesr3   r2   totalr+   r+   r,   _sum   s   


rE   c                 C   s(   z|   W S  ty   t|  Y S w r/   )Z	is_finiteAttributeErrormathisfinite)xr+   r+   r,   	_isfinite   s
   
rJ   c                 C   s   	 | |u r| S |t u s|tu r| S | t u r|S t|| r|S t| |r%| S t| t r,|S t|t r3| S t| tr?t|tr?|S t| trKt|trK| S d}t|| j|jf )Nz"don't know how to coerce %s and %s)r7   bool
issubclassr   float	TypeErrorr(   )rA   Smsgr+   r+   r,   r9      s   
r9   c              	   C   st   	 z|   W S  ty   Y n ttfy   | d f Y S w z| j| jfW S  ty9   dt| j d}t|w )Nzcan't convert type 'z' to numerator/denominator)	as_integer_ratiorF   OverflowError
ValueError	numeratordenominatorr8   r(   rN   )rI   rP   r+   r+   r,   r;      s   
r;   c                 C   sh   	 t | |u r	| S t|tr| jdkrt}z|| W S  ty3   t|tr2|| j|| j  Y S  w )Nr-   )r8   rL   r7   rU   rM   rN   r   rT   )valuerA   r+   r+   r,   _convert  s   

rW   c                 C   s,   	 t | |}|t| kr| | |kr|S tr/   )r   lenrS   )arI   ir+   r+   r,   
_find_lteq  s
   
r[   c                 C   s<   	 t | ||d}|t| d kr| |d  |kr|d S t)N)lor-   )r   rX   rS   )rY   lrI   rZ   r+   r+   r,   
_find_rteq"  s
    r^   negative valuec                 c   s(    	 | D ]}|dk rt ||V  qd S )Nr   )r   )rC   errmsgrI   r+   r+   r,   	_fail_neg*  s   ra   c                 C   sJ   	 t | | u rt| } t| }|dk rtdt| \}}}t|| |S )Nr-   z%mean requires at least one data point)iterlistrX   r   rE   rW   )r>   r3   rA   rD   r?   r+   r+   r,   r	   4  s   r	   c                    sj   	 zt |  W n ty   d  fdd}t|| }Y nw t| }z|  W S  ty4   tdd w )Nr   c                 3   s"    t | ddD ]\ }|V  qd S )Nr-   )start)	enumerate)iterablerI   r3   r+   r,   r?   \  s   zfmean.<locals>.countz&fmean requires at least one data point)rX   rN   r$   ZeroDivisionErrorr   )r>   r?   rD   r+   rg   r,   r   N  s   	

r   c                 C   s0   	 z
t ttt| W S  ty   tdd w )NzGgeometric mean requires a non-empty dataset containing positive numbers)r    r   r:   r#   rS   r   )r>   r+   r+   r,   r   i  s   r   c           
      C   s4  	 t | | u rt| } d}t| }|dk rtd|dkr;|d u r;| d }t|tjtfr7|dk r5t||S td|d u rGt	d|}|}n#t ||u rQt|}t||kr[tdt
dd t||D \}}}zt| |} t
d	d t|| D \}}}	W n
 ty   Y dS w |dkrtd
t|| |S )Nz.harmonic mean does not support negative valuesr-   z.harmonic_mean requires at least one data pointr   zunsupported typez*Number of weights does not match data sizec                 s   s    | ]}|V  qd S r/   r+   )r1   wr+   r+   r,   r4     s    z harmonic_mean.<locals>.<genexpr>c                 s   s$    | ]\}}|r|| nd V  qdS )r   Nr+   )r1   ri   rI   r+   r+   r,   r4        " zWeighted sum must be positive)rb   rc   rX   r   
isinstancenumbersZRealr   rN   r   rE   ra   ziprh   rW   )
r>   weightsr`   r3   rI   Zsum_weights_rA   rD   r?   r+   r+   r,   r   |  s>   

"r   c                 C   sZ   	 t | } t| }|dkrtd|d dkr| |d  S |d }| |d  | |  d S Nr   no median for empty data   r-   sortedrX   r   )r>   r3   rZ   r+   r+   r,   r
     s   r
   c                 C   sJ   	 t | } t| }|dkrtd|d dkr| |d  S | |d d  S rp   rs   r>   r3   r+   r+   r,   r     s   r   c                 C   s.   	 t | } t| }|dkrtd| |d  S )Nr   rq   rr   rs   ru   r+   r+   r,   r     s   r   r-   c           
      C   s   	 t | } t| }|dkrtd|dkr| d S | |d  }||fD ]}t|ttfr2td| q#z||d  }W n tyN   t|t|d  }Y nw t| |}t	| ||}|}|| d }	|||d |  |	  S )Nr   rq   r-   rr   zexpected number but got %r)
rt   rX   r   rk   strbytesrN   rM   r[   r^   )
r>   intervalr3   rI   objLl1l2cffr+   r+   r,   r     s,   
r   c                 C   s<   	 t t| d}z|d d W S  ty   tdd w )Nr-   r   zno mode for empty data)r&   rb   most_common
IndexErrorr   )r>   pairsr+   r+   r,   r   ,  s   
r   c                 C   sB   	 t t|  }tt|tdddg f\}}tttd|S )Nr-   )keyr   )r&   rb   r   nextr   r%   rc   r:   )r>   countsZmaxcountZ
mode_itemsr+   r+   r,   r   J  s   r      	exclusive)r3   methodc          
      C   s>  	 |dk r	t dt| } t| }|dk rt d|dkrM|d }g }td|D ]"}t|| |\}}| | ||  | |d  |  | }	||	 q(|S |dkr|d }g }td|D ]9}|| | }|dk rjdn||d krt|d n|}|| ||  }| |d  ||  | | |  | }	||	 q\|S td|)Nr-   zn must be at least 1rr   z"must have at least two data pointsZ	inclusiver   zUnknown method: )r   rt   rX   rangedivmodappendrS   )
r>   r3   r   ZldmresultrZ   jZdeltaZinterpolatedr+   r+   r,   r     s4   $$$r   c                    s   	  d urt  fdd| D \}}}||fS t | \}}}||  \}}t }tt| D ]\}}	|| |	|  }
|	| }|||   |
|
 7  < q.d |v rW|d  }||fS tdd | D }||fS )Nc                 3       | ]	}|  d  V  qdS )rr   Nr+   )r1   rI   cr+   r,   r4         z_ss.<locals>.<genexpr>c                 s   r.   r/   r   r0   r+   r+   r,   r4     r5   )rE   rQ   r&   r:   r;   r<   r=   )r>   r   rA   rD   r?   Zmean_nZmean_dr@   r3   r2   Zdiff_nZdiff_dr+   r   r,   _ss  s    r   c                 C   sN   	 t | | u rt| } t| }|dk rtdt| |\}}t||d  |S )Nrr   z*variance requires at least two data pointsr-   rb   rc   rX   r   r   rW   )r>   xbarr3   rA   ssr+   r+   r,   r     s   %r   c                 C   sJ   	 t | | u rt| } t| }|dk rtdt| |\}}t|| |S )Nr-   z*pvariance requires at least one data pointr   )r>   mur3   rA   r   r+   r+   r,   r     s   "r   c                 C   4   	 t | |}z| W S  ty   t| Y S w r/   )r   r   rF   rG   )r>   r   varr+   r+   r,   r   0     

r   c                 C   r   r/   )r   r   rF   rG   )r>   r   r   r+   r+   r,   r   C  r   r   c                   sp   	 t | }t ||krtd|dk rtdt| |  t|| t fddt| |D }||d  S )NzDcovariance requires that both inputs have same number of data pointsrr   z,covariance requires at least two data pointsc                 3   $    | ]\}}|  |  V  qd S r/   r+   r1   xiyir   ybarr+   r,   r4   u  rj   zcovariance.<locals>.<genexpr>r-   )rX   r   r$   rm   )rI   yr3   sxyr+   r   r,   r   ]  s   r   c                   s   	 t | }t ||krtd|dk rtdt| |  t|| t fddt| |D }t fdd| D }tfdd|D }z	|t||  W S  ty\   tdw )	NzEcorrelation requires that both inputs have same number of data pointsrr   z-correlation requires at least two data pointsc                 3   r   r/   r+   r   r   r+   r,   r4     rj   zcorrelation.<locals>.<genexpr>c                 3   r          @Nr+   r1   r   r   r+   r,   r4     r   c                 3   r   r   r+   )r1   r   )r   r+   r,   r4     r   z&at least one of the inputs is constant)rX   r   r$   rm   r   rh   )rI   r   r3   r   sxxZsyyr+   r   r,   r   y  s    r   LinearRegressionslope	interceptc                   s   	 t | }t ||krtd|dk rtdt| |  t|| t fddt| |D }t fdd| D }z|| }W n tyN   tdw |   }t||dS )	NzKlinear regression requires that both inputs have same number of data pointsrr   z3linear regression requires at least two data pointsc                 3   r   r/   r+   r   r   r+   r,   r4     rj   z$linear_regression.<locals>.<genexpr>c                 3   r   r   r+   r   r   r+   r,   r4     r   zx is constantr   )rX   r   r$   rm   rh   r   )rI   r   r3   r   r   r   r   r+   r   r,   r     s"   r   c                 C   s  | d }t |dkrXd||  }d| d | d | d | d | d	 | d
 | d | }d| d | d | d | d | d | d | d }|| }|||  S |dkr^| nd|  }tt| }|dkr|d }d| d | d | d | d | d | d | d }d| d  | d! | d" | d# | d$ | d% | d }n@|d }d&| d' | d( | d) | d* | d+ | d, | d- }d.| d/ | d0 | d1 | d2 | d3 | d4 | d }|| }|dk r| }|||  S )5N      ?g333333?gQ?g^}o)@gE.kR@g Ul@g*u>l@gN@g"]Ξ@gnC`@gu@giK~j@gv|E@gd|1@gfRr@gu.2@g~y@gn8(E@      ?        g      @g?g鬷ZaI?ggElD?g7\?guSS?g=.@gj%b@gHw@gjRe?g9dh?>g('߿A?g~z ?g@3?gɅ3?g3fRx?gIFl @gt>g*Yn>gESB\T?gN;A+?gUR1?gEF?gPn@g&>@gi<g@F>gtcI,\>gŝI?g*F2v?gC4?gO1?)r   r   r#   )pr   sigmaqrnumZdenrI   r+   r+   r,   _normal_dist_inv_cdf  sd  	r   )r   c                   @   s  e Zd Z	 dddZd9ddZedd	 Zd
dddZdd Zdd Z	dd Z
d:ddZdd Zdd Zedd Zedd Zedd  Zed!d" Zed#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 ZeZd1d2 ZeZd3d4 Zd5d6 Zd7d8 Zd
S );r   z(Arithmetic mean of a normal distributionz+Standard deviation of a normal distribution)_mu_sigmar   r   c                 C   s*   	 |dk r	t dt|| _t|| _d S )Nr   zsigma must be non-negative)r   rM   r   r   )selfr   r   r+   r+   r,   __init__%  s
   
zNormalDist.__init__c                 C   s0   	 t |ttfst|}t|}| |t||S r/   )rk   rc   tupler   r   )clsr>   r   r+   r+   r,   from_samples,  s
   zNormalDist.from_samplesN)seedc                   sD   	 |d u rt jnt |j | j| j fddt|D S )Nc                    s   g | ]} qS r+   r+   r1   rZ   gaussr   r   r+   r,   
<listcomp>8  s    z&NormalDist.samples.<locals>.<listcomp>)randomr   Randomr   r   r   )r   r3   r   r+   r   r,   samples4  s   zNormalDist.samplesc                 C   s>   	 | j d }|stdt|| j d d|  tt|  S )Nr   z$pdf() not defined when sigma is zerog       )r   r   r    r   r   r"   )r   rI   r   r+   r+   r,   pdf:  s
   
&zNormalDist.pdfc                 C   s4   	 | j stdddt|| j | j td    S )Nz$cdf() not defined when sigma is zeror   r   r   )r   r   r!   r   r   r   rI   r+   r+   r,   cdfA  s   $zNormalDist.cdfc                 C   s<   	 |dks	|dkrt d| jdkrt dt|| j| jS )Nr   r   z$p must be in the range 0.0 < p < 1.0z-cdf() not defined when sigma at or below zero)r   r   r   r   )r   r   r+   r+   r,   inv_cdfG  s   	
zNormalDist.inv_cdfr   c                    s   	  fddt d D S )Nc                    s   g | ]	} |  qS r+   )r   r   r3   r   r+   r,   r   `  s    z(NormalDist.quantiles.<locals>.<listcomp>r-   )r   )r   r3   r+   r   r,   r   W  s   zNormalDist.quantilesc                 C   s   	 t |ts
td| |}}|j|jf|j|jfk r ||}}|j|j}}|r+|s/td|| }t|j|j }|sLdt|d|j t	d   S |j| |j|  }|j|j t	|d |t
||    }	||	 | }
||	 | }dt||
||
 t||||   S )Nz$Expected another NormalDist instancez(overlap() not defined when sigma is zeror   r   )rk   r   rN   r   r   r   r   r   r!   r   r#   r   )r   otherXYZX_varZY_varZdvZdmrY   bx1x2r+   r+   r,   overlapb  s$   


(4zNormalDist.overlapc                 C   s    	 | j std|| j | j  S )Nz'zscore() not defined when sigma is zero)r   r   r   r   r+   r+   r,   zscore  s   zNormalDist.zscorec                 C      	 | j S r/   r   r   r+   r+   r,   r	        zNormalDist.meanc                 C   r   r/   r   r   r+   r+   r,   r
     r   zNormalDist.medianc                 C   r   r/   r   r   r+   r+   r,   r     s   zNormalDist.modec                 C   r   r/   r   r   r+   r+   r,   r     r   zNormalDist.stdevc                 C   s   	 | j d S )Nr   r   r   r+   r+   r,   r     s   
zNormalDist.variancec                 C   s:   	 t |trt| j|j t| j|jS t| j| | jS r/   rk   r   r   r   r   r   r   r+   r+   r,   __add__     
	zNormalDist.__add__c                 C   s:   	 t |trt| j|j t| j|jS t| j| | jS r/   r   r   r+   r+   r,   __sub__  r   zNormalDist.__sub__c                 C   s   	 t | j| | jt| S r/   r   r   r   r   r   r+   r+   r,   __mul__     zNormalDist.__mul__c                 C   s   	 t | j| | jt| S r/   r   r   r+   r+   r,   __truediv__  r   zNormalDist.__truediv__c                 C   s   	 t | j| jS r/   r   r   r   r   r+   r+   r,   __pos__  s   zNormalDist.__pos__c                 C   s   	 t | j | jS r/   r   r   r+   r+   r,   __neg__     zNormalDist.__neg__c                 C   s   	 | |  S r/   r+   r   r+   r+   r,   __rsub__  s   
zNormalDist.__rsub__c                 C   s(   	 t |tstS | j|jko| j|jkS r/   )rk   r   NotImplementedr   r   r   r+   r+   r,   __eq__  s   
zNormalDist.__eq__c                 C   s   	 t | j| jfS r/   )hashr   r   r   r+   r+   r,   __hash__  r   zNormalDist.__hash__c                 C   s    t | j d| jd| jdS )Nz(mu=z, sigma=))r8   r(   r   r   r   r+   r+   r,   __repr__  s    zNormalDist.__repr__)r   r   )r   ) r(   r)   r*   	__slots__r   classmethodr   r   r   r   r   r   r   r   propertyr	   r
   r   r   r   r   r   r   r   r   r   __radd__r   __rmul__r   r   r   r+   r+   r+   r,   r     sJ    


"




r   )r_   r/   )r-   )=__all__rG   rl   r   Z	fractionsr   Zdecimalr   	itertoolsr   r   bisectr   r   r   r   r   r    r!   r"   r#   r$   operatorr%   collectionsr&   r'   rS   r   rE   rJ   r9   r;   rW   r[   r^   ra   r	   r   r   r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Z_statisticsImportErrorr   r+   r+   r+   r,   <module>   s`    j(4


8
77
8

/
,

!-K