a
    ze                     @   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	 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 G d
d deZdFddZdd Zdd Zdd Zdd Zdd Z dd Z!dGddZ"dd Z#dd  Z$d!d" Z%d#d$ Z&d%d& Z'd'd( Z(d)d* Z)dHd,d-Z*d.d/ Z+d0d1 Z,d2d3d4d5d6Z-dId7d8Z.dJd9d:Z/dKd;d<Z0dLd=d>Z1dMd?d@Z2dAdB Z3zddCl4m3Z3 W n e5y   Y n0 G dDdE dEZ6dS )N)
NormalDistStatisticsErrorfmeangeometric_meanharmonic_meanmeanmedianmedian_groupedmedian_high
median_lowmode	multimodepstdev	pvariance	quantilesstdevvariance    NFraction)Decimal)groupby)bisect_leftbisect_right)hypotsqrtfabsexperftaulogfsum)
itemgetter)Counterc                   @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r&   r&    /usr/lib/python3.9/statistics.pyr   u   s   r   c                 C   s   d}t |\}}||i}|j}ttt|}t| tD ]@\}}	t||}tt |	D ]"\}}|d7 }||d| ||< qRq6d |v r|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>       z_sum.<locals>.<genexpr>)
_exact_ratioget_coerceinttyper   mapsumsorteditems)datastartcountr,   r+   ZpartialsZpartials_getTtypvaluestotalr&   r&   r'   _sum{   s    $
r?   c                 C   s,   z
|   W S  ty&   t|  Y S 0 d S r)   )Z	is_finiteAttributeErrormathisfinite)xr&   r&   r'   	_isfinite   s    
rD   c                 C   s   | |u r| S |t u s|tu r | S | t u r,|S t|| r:|S t| |rH| S t| t rV|S t|t rd| S t| tr|t|tr||S t| trt|tr| S d}t|| j|jf d S )Nz"don't know how to coerce %s and %s)r2   bool
issubclassr   float	TypeErrorr#   )r;   Smsgr&   r&   r'   r1      s    r1   c                 C   s   znt | tu st | tu r$|  W S z| j| jfW W S  tyj   z|  W  Y W S  tyd   Y n0 Y n0 W n ttfy   | d f Y S 0 d}t	|
t | jd S )Nz0can't convert type '{}' to numerator/denominator)r3   rG   r   as_integer_ratio	numeratordenominatorr@   OverflowError
ValueErrorrH   formatr#   )rC   rJ   r&   r&   r'   r/      s    
r/   c                 C   sn   t | |u r| S t|tr(| jdkr(t}z
|| W S  tyh   t|trb|| j|| j  Y S  Y n0 d S )Nr(   )r3   rF   r2   rM   rG   rH   r   rL   )valuer;   r&   r&   r'   _convert   s    

rR   c                 C   s.   t | |}|t| kr&| | |kr&|S td S r)   )r   lenrO   )arC   ir&   r&   r'   
_find_lteq  s    
rV   c                 C   s>   t | ||d}|t| d kr6| |d  |kr6|d S td S )N)lor(   )r   rS   rO   )rT   lrC   rU   r&   r&   r'   
_find_rteq  s     rY   negative valuec                 c   s$   | D ]}|dk rt ||V  qd S )Nr   )r   )r=   errmsgrC   r&   r&   r'   	_fail_neg  s    r\   c                 C   sH   t | | u rt| } t| }|dk r,tdt| \}}}t|| |S )Nr(   z%mean requires at least one data point)iterlistrS   r   r?   rR   )r8   r,   r;   r>   r:   r&   r&   r'   r   '  s    r   c                    sp   zt |  W n. ty:   d  fdd}t|| }Y n
0 t| }z
|  W S  tyj   tdd Y n0 d S )Nr   c                 3   s    t | ddD ]\ }|V  qd S )Nr(   )r9   )	enumerate)iterablerC   r,   r&   r'   r:   O  s    zfmean.<locals>.countz&fmean requires at least one data point)rS   rH   r    ZeroDivisionErrorr   )r8   r:   r>   r&   ra   r'   r   A  s    	
r   c                 C   s6   zt ttt| W S  ty0   tdd Y n0 d S )NzGgeometric mean requires a non-empty dataset containing positive numbers)r   r   r4   r   rO   r   )r8   r&   r&   r'   r   \  s    r   c                 C   s   t | | u rt| } d}t| }|dk r2tdn<|dkrn| d }t|tjtfrf|dk rbt||S tdz"t	dd t
| |D \}}}W n ty   Y dS 0 t|| |S )Nz.harmonic mean does not support negative valuesr(   z.harmonic_mean requires at least one data pointr   zunsupported typec                 s   s   | ]}d | V  qdS )r(   Nr&   r*   rC   r&   r&   r'   r-     r.   z harmonic_mean.<locals>.<genexpr>)r]   r^   rS   r   
isinstancenumbersZRealr   rH   r?   r\   rb   rR   )r8   r[   r,   rC   r;   r>   r:   r&   r&   r'   r   o  s$    
"r   c                 C   s\   t | } t| }|dkr td|d dkr8| |d  S |d }| |d  | |  d S d S Nr   no median for empty data   r(   r6   rS   r   )r8   r,   rU   r&   r&   r'   r     s    r   c                 C   sL   t | } t| }|dkr td|d dkr8| |d  S | |d d  S d S rf   ri   r8   r,   r&   r&   r'   r
     s    r
   c                 C   s,   t | } t| }|dkr td| |d  S )Nr   rg   rh   ri   rj   r&   r&   r'   r	     s
    r	   r(   c           
      C   s   t | } t| }|dkr"tdn|dkr2| d S | |d  }||fD ]}t|ttfrFtd| qFz||d  }W n& ty   t|t|d  }Y n0 t| |}t	| ||}|}|| d }	|||d |  |	  S )Nr   rg   r(   rh   zexpected number but got %r)
r6   rS   r   rd   strbytesrH   rG   rV   rY   )
r8   intervalr,   rC   objLl1l2cffr&   r&   r'   r     s&    

r   c                 C   sB   t t| d}z|d d W S  ty<   tdd Y n0 d S )Nr(   r   zno mode for empty data)r"   r]   most_common
IndexErrorr   )r8   pairsr&   r&   r'   r     s
    r   c                 C   s@   t t|  }tt|tdddg f\}}tttd|S )Nr(   )keyr   )r"   r]   rt   nextr   r!   r^   r4   )r8   countsZmaxcountZ
mode_itemsr&   r&   r'   r   4  s    r      	exclusive)r,   methodc          
      C   sB  |dk rt dt| } t| }|dk r0t d|dkr|d }g }td|D ]D}t|| |\}}| | ||  | |d  |  | }	||	 qN|S |dkr0|d }g }td|D ]r}|| | }|dk rdn||d kr|d n|}|| ||  }| |d  ||  | | |  | }	||	 q|S td|d S )Nr(   zn must be at least 1rh   z"must have at least two data pointsZ	inclusiver{   zUnknown method: )r   r6   rS   rangedivmodappendrO   )
r8   r,   r|   ZldmresultrU   jZdeltaZinterpolatedr&   r&   r'   r   k  s2    $
$$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   s   | ]}|  d  V  qdS rh   Nr&   rc   cr&   r'   r-     r.   z_ss.<locals>.<genexpr>c                 3   s   | ]}|  d  V  qdS r   r&   rc   r   r&   r'   r-     r.   c                 3   s   | ]}|  V  qd S r)   r&   rc   r   r&   r'   r-     r.   rh   )r?   r   rS   )r8   r   r;   r>   r:   UZtotal2Zcount2r&   r   r'   _ss  s    r   c                 C   sL   t | | u rt| } t| }|dk r,tdt| |\}}t||d  |S )Nrh   z*variance requires at least two data pointsr(   r]   r^   rS   r   r   rR   )r8   xbarr,   r;   ssr&   r&   r'   r     s    &r   c                 C   sH   t | | u rt| } t| }|dk r,tdt| |\}}t|| |S )Nr(   z*pvariance requires at least one data pointr   )r8   mur,   r;   r   r&   r&   r'   r     s    #r   c                 C   s6   t | |}z
| W S  ty0   t| Y S 0 d S r)   )r   r   r@   rA   )r8   r   varr&   r&   r'   r     s
    	

r   c                 C   s6   t | |}z
| W S  ty0   t| Y S 0 d S r)   )r   r   r@   rA   )r8   r   r   r&   r&   r'   r   $  s
    	

r   c                 C   s  | d }t |dkrd||  }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denrC   r&   r&   r'   _normal_dist_inv_cdf7  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   rG   r   r   )selfr   r   r&   r&   r'   __init__  s    
zNormalDist.__init__c                 C   s.   t |ttfst|}t|}| |t||S r)   )rd   r^   tupler   r   )clsr8   r   r&   r&   r'   from_samples  s    zNormalDist.from_samplesN)seedc                   sB   |d u rt jn
t |j | j| j  fddt|D S )Nc                    s   g | ]} qS r&   r&   r*   rU   gaussr   r   r&   r'   
<listcomp>  r.   z&NormalDist.samples.<locals>.<listcomp>)randomr   Randomr   r   r}   )r   r,   r   r&   r   r'   samples  s    zNormalDist.samplesc                 C   s<   | j d }|stdt|| j d d|  tt|  S )N       @z$pdf() not defined when sigma is zerog       )r   r   r   r   r   r   )r   rC   r   r&   r&   r'   pdf  s    
zNormalDist.pdfc                 C   s2   | 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   rC   r&   r&   r'   cdf  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_cdf  s
    

zNormalDist.inv_cdfrz   c                    s    fddt d D S )Nc                    s   g | ]} |  qS r&   )r   r   r,   r   r&   r'   r     r.   z(NormalDist.quantiles.<locals>.<listcomp>r(   )r}   )r   r,   r&   r   r'   r     s    	zNormalDist.quantilesc                 C   s  t |tstd| | }}|j|jf|j|jfk r>|| }}|j|j }}|rT|s\td|| }t|j|j }|sd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   )rd   r   rH   r   r   r   r   r   r   r   r   r   )r   otherXYZX_varZY_varZdvZdmrT   bx1x2r&   r&   r'   overlap  s"    


(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   s   | j S r)   r   r   r&   r&   r'   r     s    zNormalDist.meanc                 C   s   | j S r)   r   r   r&   r&   r'   r     s    zNormalDist.medianc                 C   s   | j S r)   r   r   r&   r&   r'   r     s    zNormalDist.modec                 C   s   | j S r)   r   r   r&   r&   r'   r     s    zNormalDist.stdevc                 C   s
   | j d S )Nr   r   r   r&   r&   r'   r     s    zNormalDist.variancec                 C   s8   t |tr&t| j|j t| j|jS t| j| | jS r)   rd   r   r   r   r   r   r   r&   r&   r'   __add__  s    

zNormalDist.__add__c                 C   s8   t |tr&t| j|j t| j|jS t| j| | jS r)   r   r   r&   r&   r'   __sub__'  s    

zNormalDist.__sub__c                 C   s   t | j| | jt| S r)   r   r   r   r   r   r&   r&   r'   __mul__5  s    zNormalDist.__mul__c                 C   s   t | j| | jt| S r)   r   r   r&   r&   r'   __truediv__=  s    zNormalDist.__truediv__c                 C   s   t | j| jS r)   r   r   r   r   r&   r&   r'   __pos__E  s    zNormalDist.__pos__c                 C   s   t | j | jS r)   r   r   r&   r&   r'   __neg__I  s    zNormalDist.__neg__c                 C   s
   | |  S r)   r&   r   r&   r&   r'   __rsub__O  s    zNormalDist.__rsub__c                 C   s&   t |tstS | j|jko$| j|jkS r)   )rd   r   NotImplementedr   r   r   r&   r&   r'   __eq__U  s    
zNormalDist.__eq__c                 C   s   t | j| jfS r)   )hashr   r   r   r&   r&   r'   __hash__[  s    zNormalDist.__hash__c                 C   s    t | j d| jd| jdS )Nz(mu=z, sigma=))r3   r#   r   r   r   r&   r&   r'   __repr___  s    zNormalDist.__repr__)r   r   )rz   ) 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     sF   


"




r   )r   )rZ   )r(   )N)N)N)N)N)7__all__rA   re   r   Z	fractionsr   Zdecimalr   	itertoolsr   bisectr   r   r   r   r   r   r   r   r   r    operatorr!   collectionsr"   rO   r   r?   rD   r1   r/   rR   rV   rY   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   sR   (
: 

/
778

/
,

K