o
    g                     @   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dNddZdd Zdd Zd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)d'd( Z*d)d* Z+dQd,d-Z,d.d/ Z-d0d1 Z.d2d3d4d5d6Z/dPd7d8Z0dPd9d:Z1dPd;d<Z2dPd=d>Z3dPd?d@Z4dAdB Z5dCdD Z6edEdFZ7dGdH Z8dIdJ Z9zddKl:m9Z9 W n	 e;y   Y nw G dLdM dMZ<dS )R)
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+   @/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/statistics.pyr      s    r   c                 C   s   	 d}t |\}}||i}|j}ttt|}t| tD ] \}}	t||}tt |	D ]\}}|d7 }||d| ||< q*qd |v rF|d  }
ntdd t|	 D }
||
|fS )Nr      c                 s   s    | ]
\}}t ||V  qd S Nr   ).0dnr+   r+   r,   	<genexpr>   s    z_sum.<locals>.<genexpr>)
_exact_ratioget_coerceinttyper   mapsumsorteditems)datastartcountr1   r0   ZpartialsZpartials_getTtypvaluestotalr+   r+   r,   _sum   s    #


rC   c                 C   s(   z|   W S  ty   t|  Y S w r.   )Z	is_finiteAttributeErrormathisfinite)xr+   r+   r,   	_isfinite   s
   
rH   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)r6   bool
issubclassr   float	TypeErrorr(   )r?   Smsgr+   r+   r,   r5      s   
r5   c                 C   s   	 z7t | tu st | tu r|  W S z| j| jfW W S  ty6   z|  W  Y W S  ty3   Y nw Y nw W n ttfyG   | d f Y S w d}t	|
t | j)Nz0can't convert type '{}' to numerator/denominator)r7   rK   r   as_integer_ratio	numeratordenominatorrD   OverflowError
ValueErrorrL   formatr(   )rG   rN   r+   r+   r,   r3      s(   
r3   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-   )r7   rJ   r6   rQ   rK   rL   r   rP   )valuer?   r+   r+   r,   _convert  s   

rV   c                 C   s,   	 t | |}|t| kr| | |kr|S tr.   )r   lenrS   )arG   ir+   r+   r,   
_find_lteq(  s
   
rZ   c                 C   s<   	 t | ||d}|t| d kr| |d  |kr|d S t)N)lor-   )r   rW   rS   )rX   lrG   rY   r+   r+   r,   
_find_rteq0  s
    r]   negative valuec                 c   s(    	 | D ]}|dk rt ||V  qd S )Nr   )r   )rA   errmsgrG   r+   r+   r,   	_fail_neg8  s   r`   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listrW   r   rC   rV   )r<   r1   r?   rB   r>   r+   r+   r,   r	   B  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-   )r=   )	enumerate)iterablerG   r1   r+   r,   r>   j  s   zfmean.<locals>.countz&fmean requires at least one data point)rW   rL   r$   ZeroDivisionErrorr   )r<   r>   rB   r+   re   r,   r   \  s   	

r   c                 C   s0   	 z
t ttt| W S  ty   tdd w )NzHgeometric mean requires a non-empty dataset  containing positive numbers)r    r   r8   r#   rS   r   )r<   r+   r+   r,   r   w  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+   )r/   wr+   r+   r,   r2     s    z harmonic_mean.<locals>.<genexpr>c                 s   s$    | ]\}}|r|| nd V  qdS )r   Nr+   )r/   rg   rG   r+   r+   r,   r2        " zWeighted sum must be positive)ra   rb   rW   r   
isinstancenumbersZRealr   rL   r   rC   r`   ziprf   rV   )
r<   weightsr_   r1   rG   Zsum_weights_r?   rB   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-   r:   rW   r   )r<   r1   rY   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 rn   rq   r<   r1   r+   r+   r,   r     s   r   c                 C   s.   	 t | } t| }|dkrtd| |d  S )Nr   ro   rp   rq   rr   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   ro   r-   rp   zexpected number but got %r)
r:   rW   r   ri   strbytesrL   rK   rZ   r]   )
r<   intervalr1   rG   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&   ra   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&   ra   r|   nextr   r%   rb   r8   )r<   countsZmaxcountZ
mode_itemsr+   r+   r,   r   X  s   r      	exclusive)r1   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 1rp   z"must have at least two data pointsZ	inclusiver   zUnknown method: )r   r:   rW   rangedivmodappendrS   )
r<   r1   r   ZldmresultrY   jZdeltaZinterpolatedr+   r+   r,   r     s4   $$$r   c                    s   	  d urt  fdd| D \}}}||fS t|  t  fdd| D \}}}t  fdd| D \}}}||d t|  8 }||fS )Nc                 3       | ]	}|  d  V  qdS rp   Nr+   r/   rG   cr+   r,   r2         z_ss.<locals>.<genexpr>c                 3   r   r   r+   r   r   r+   r,   r2     r   c                 3   s    | ]}|  V  qd S r.   r+   r   r   r+   r,   r2     s    rp   )rC   r	   rW   )r<   r   r?   rB   r>   UZtotal2Zcount2r+   r   r,   _ss  s   r   c                 C   sN   	 t | | u rt| } t| }|dk rtdt| |\}}t||d  |S )Nrp   z*variance requires at least two data pointsr-   ra   rb   rW   r   r   rV   )r<   xbarr1   r?   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<   mur1   r?   r   r+   r+   r,   r     s   "r   c                 C   4   	 t | |}z| W S  ty   t| Y S w r.   )r   r   rD   rE   )r<   r   varr+   r+   r,   r   8     

r   c                 C   r   r.   )r   r   rD   rE   )r<   r   r   r+   r+   r,   r   H  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 pointsrp   z,covariance requires at least two data pointsc                 3   $    | ]\}}|  |  V  qd S r.   r+   r/   xiyir   ybarr+   r,   r2   w  rh   zcovariance.<locals>.<genexpr>r-   )rW   r   r$   rk   )rG   yr1   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 pointsrp   z-correlation requires at least two data pointsc                 3   r   r.   r+   r   r   r+   r,   r2     rh   zcorrelation.<locals>.<genexpr>c                 3   r          @Nr+   r/   r   r   r+   r,   r2     r   c                 3   r   r   r+   )r/   r   )r   r+   r,   r2     r   z&at least one of the inputs is constant)rW   r   r$   rk   r   rf   )rG   r   r1   r   sxxZsyyr+   r   r,   r   {  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 pointsrp   z3linear regression requires at least two data pointsc                 3   r   r.   r+   r   r   r+   r,   r2     rh   z$linear_regression.<locals>.<genexpr>c                 3   r   r   r+   r   r   r+   r,   r2     r   zx is constantr   )rW   r   r$   rk   rf   r   )rG   r   r1   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denrG   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   rK   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.   )ri   rb   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+   r/   rY   gaussr   r   r+   r,   
<listcomp>:  s    z&NormalDist.samples.<locals>.<listcomp>)randomr   Randomr   r   r   )r   r1   r   r+   r   r,   samples6  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   rG   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   rG   r+   r+   r,   cdfC  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_cdfI  s   	
zNormalDist.inv_cdfr   c                    s   	  fddt d D S )Nc                    s   g | ]	} |  qS r+   )r   r   r1   r   r+   r,   r   b  s    z(NormalDist.quantiles.<locals>.<listcomp>r-   )r   )r   r1   r+   r   r,   r   Y  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   )ri   r   rL   r   r   r   r   r   r!   r   r#   r   )r   otherXYZX_varZY_varZdvZdmrX   bx1x2r+   r+   r,   overlapd  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.   ri   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.   )ri   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=))r7   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.   )r-   )=__all__rE   rj   r   Z	fractionsr   Zdecimalr   	itertoolsr   r   bisectr   r   r   r   r   r    r!   r"   r#   r$   operatorr%   collectionsr&   r'   rS   r   rC   rH   r5   r3   rV   rZ   r]   r`   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(
: 


8
77
8

/
,

!-K