/usr/lib/python3.10/__pycache__
NameSizeModeActions
abc.cpython-310.pyc67510644editdlrm
aifc.cpython-310.pyc246850644editdlrm
antigravity.cpython-310.pyc8220644editdlrm
argparse.cpython-310.pyc635390644editdlrm
ast.cpython-310.pyc557390644editdlrm
asynchat.cpython-310.pyc70250644editdlrm
asyncore.cpython-310.pyc160020644editdlrm
base64.cpython-310.pyc171620644editdlrm
bdb.cpython-310.pyc258320644editdlrm
binhex.cpython-310.pyc128700644editdlrm
bisect.cpython-310.pyc25880644editdlrm
bz2.cpython-310.pyc108700644editdlrm
calendar.cpython-310.pyc263030644editdlrm
cgi.cpython-310.pyc267230644editdlrm
cgitb.cpython-310.pyc99980644editdlrm
chunk.cpython-310.pyc48600644editdlrm
cmd.cpython-310.pyc127070644editdlrm
code.cpython-310.pyc99570644editdlrm
codecs.cpython-310.pyc332190644editdlrm
codeop.cpython-310.pyc55950644editdlrm
colorsys.cpython-310.pyc32650644editdlrm
compileall.cpython-310.pyc127330644editdlrm
configparser.cpython-310.pyc454580644editdlrm
contextlib.cpython-310.pyc208950644editdlrm
contextvars.cpython-310.pyc2460644editdlrm
copy.cpython-310.pyc69960644editdlrm
copyreg.cpython-310.pyc46830644editdlrm
cProfile.cpython-310.pyc51130644editdlrm
crypt.cpython-310.pyc35500644editdlrm
csv.cpython-310.pyc117980644editdlrm
dataclasses.cpython-310.pyc265780644editdlrm
datetime.cpython-310.pyc565330644editdlrm
decimal.cpython-310.pyc3620644editdlrm
difflib.cpython-310.pyc589050644editdlrm
dis.cpython-310.pyc156560644editdlrm
doctest.cpython-310.pyc761750644editdlrm
enum.cpython-310.pyc260630644editdlrm
filecmp.cpython-310.pyc87490644editdlrm
fileinput.cpython-310.pyc140720644editdlrm
fnmatch.cpython-310.pyc42440644editdlrm
fractions.cpython-310.pyc186000644editdlrm
ftplib.cpython-310.pyc290340644editdlrm
functools.cpython-310.pyc283350644editdlrm
genericpath.cpython-310.pyc39070644editdlrm
getopt.cpython-310.pyc63390644editdlrm
getpass.cpython-310.pyc42100644editdlrm
gettext.cpython-310.pyc182210644editdlrm
glob.cpython-310.pyc58520644editdlrm
graphlib.cpython-310.pyc76160644editdlrm
gzip.cpython-310.pyc185460644editdlrm
hashlib.cpython-310.pyc68450644editdlrm
heapq.cpython-310.pyc138650644editdlrm
hmac.cpython-310.pyc69730644editdlrm
imaplib.cpython-310.pyc423120644editdlrm
imghdr.cpython-310.pyc39050644editdlrm
imp.cpython-310.pyc97860644editdlrm
inspect.cpython-310.pyc851530644editdlrm
io.cpython-310.pyc36630644editdlrm
ipaddress.cpython-310.pyc626700644editdlrm
keyword.cpython-310.pyc9270644editdlrm
linecache.cpython-310.pyc41420644editdlrm
locale.cpython-310.pyc461540644editdlrm
lzma.cpython-310.pyc121000644editdlrm
mailbox.cpython-310.pyc600910644editdlrm
mailcap.cpython-310.pyc73200644editdlrm
mimetypes.cpython-310.pyc176190644editdlrm
modulefinder.cpython-310.pyc161660644editdlrm
netrc.cpython-310.pyc39330644editdlrm
nntplib.cpython-310.pyc316230644editdlrm
ntpath.cpython-310.pyc147040644editdlrm
nturl2path.cpython-310.pyc17470644editdlrm
numbers.cpython-310.pyc118660644editdlrm
opcode.cpython-310.pyc54470644editdlrm
operator.cpython-310.pyc135080644editdlrm
optparse.cpython-310.pyc477540644editdlrm
os.cpython-310.pyc315990644editdlrm
pathlib.cpython-310.pyc420520644editdlrm
pdb.cpython-310.pyc474400644editdlrm
pickle.cpython-310.pyc468820644editdlrm
pickletools.cpython-310.pyc677600644editdlrm
pipes.cpython-310.pyc77690644editdlrm
pkgutil.cpython-310.pyc183610644editdlrm
platform.cpython-310.pyc274290644editdlrm
plistlib.cpython-310.pyc237650644editdlrm
poplib.cpython-310.pyc135730644editdlrm
posixpath.cpython-310.pyc105600644editdlrm
pprint.cpython-310.pyc178750644editdlrm
profile.cpython-310.pyc143910644editdlrm
pstats.cpython-310.pyc236210644editdlrm
pty.cpython-310.pyc41430644editdlrm
pyclbr.cpython-310.pyc97750644editdlrm
pydoc.cpython-310.pyc856450644editdlrm
py_compile.cpython-310.pyc73390644editdlrm
queue.cpython-310.pyc107920644editdlrm
quopri.cpython-310.pyc57940644editdlrm
random.cpython-310.pyc227480644editdlrm
re.cpython-310.pyc142270644editdlrm
reprlib.cpython-310.pyc52500644editdlrm
rlcompleter.cpython-310.pyc59540644editdlrm
runpy.cpython-310.pyc94110644editdlrm
sched.cpython-310.pyc61150644editdlrm
secrets.cpython-310.pyc21750644editdlrm
selectors.cpython-310.pyc171050644editdlrm
shelve.cpython-310.pyc94920644editdlrm
shlex.cpython-310.pyc77820644editdlrm
shutil.cpython-310.pyc385360644editdlrm
signal.cpython-310.pyc29350644editdlrm
site.cpython-310.pyc179220644editdlrm
sitecustomize.cpython-310.pyc2250644editdlrm
smtpd.cpython-310.pyc261470644editdlrm
smtplib.cpython-310.pyc357660644editdlrm
sndhdr.cpython-310.pyc69620644editdlrm
socket.cpython-310.pyc289630644editdlrm
socketserver.cpython-310.pyc253470644editdlrm
sre_compile.cpython-310.pyc151940644editdlrm
sre_constants.cpython-310.pyc63570644editdlrm
sre_parse.cpython-310.pyc217550644editdlrm
ssl.cpython-310.pyc452710644editdlrm
stat.cpython-310.pyc42730644editdlrm
statistics.cpython-310.pyc370510644editdlrm
string.cpython-310.pyc71020644editdlrm
stringprep.cpython-310.pyc170750644editdlrm
struct.cpython-310.pyc3070644editdlrm
subprocess.cpython-310.pyc447410644editdlrm
sunau.cpython-310.pyc164820644editdlrm
symtable.cpython-310.pyc128350644editdlrm
sysconfig.cpython-310.pyc181510644editdlrm
tabnanny.cpython-310.pyc69500644editdlrm
tarfile.cpython-310.pyc715780644editdlrm
telnetlib.cpython-310.pyc185060644editdlrm
tempfile.cpython-310.pyc273390644editdlrm
textwrap.cpython-310.pyc138120644editdlrm
this.cpython-310.pyc12640644editdlrm
threading.cpython-310.pyc449690644editdlrm
timeit.cpython-310.pyc117690644editdlrm
token.cpython-310.pyc27380644editdlrm
tokenize.cpython-310.pyc171940644editdlrm
trace.cpython-310.pyc198700644editdlrm
traceback.cpython-310.pyc217120644editdlrm
tracemalloc.cpython-310.pyc175250644editdlrm
tty.cpython-310.pyc10790644editdlrm
turtle.cpython-310.pyc1288570644editdlrm
types.cpython-310.pyc95250644editdlrm
typing.cpython-310.pyc852770644editdlrm
uu.cpython-310.pyc38670644editdlrm
uuid.cpython-310.pyc224980644editdlrm
warnings.cpython-310.pyc136460644editdlrm
wave.cpython-310.pyc175940644editdlrm
weakref.cpython-310.pyc203430644editdlrm
webbrowser.cpython-310.pyc174630644editdlrm
xdrlib.cpython-310.pyc78800644editdlrm
zipapp.cpython-310.pyc60130644editdlrm
zipfile.cpython-310.pyc618450644editdlrm
zipimport.cpython-310.pyc170330644editdlrm
_aix_support.cpython-310.pyc28790644editdlrm
_bootsubprocess.cpython-310.pyc22940644editdlrm
_collections_abc.cpython-310.pyc329250644editdlrm
_compat_pickle.cpython-310.pyc58720644editdlrm
_compression.cpython-310.pyc45120644editdlrm
_distutils_system_mod.cpython-310.pyc54220644editdlrm
_markupbase.cpython-310.pyc75720644editdlrm
_osx_support.cpython-310.pyc115350644editdlrm
_pydecimal.cpython-310.pyc1577360644editdlrm
_pyio.cpython-310.pyc736540644editdlrm
_py_abc.cpython-310.pyc46830644editdlrm
_sitebuiltins.cpython-310.pyc35470644editdlrm
_strptime.cpython-310.pyc159450644editdlrm
_sysconfigdata__linux_x86_64-linux-gnu.cpython-310.pyc353850644editdlrm
_sysconfigdata__x86_64-linux-gnu.cpython-310.pyc353790644editdlrm
_threading_local.cpython-310.pyc65390644editdlrm
_weakrefset.cpython-310.pyc76080644editdlrm
__future__.cpython-310.pyc41310644editdlrm
__phello__.foo.cpython-310.pyc1300644editdlrm
Edit: /usr/lib/python3.10/__pycache__/statistics.cpython-310.pyc (37051B)
o 9jŨ@sdZgdZddlZddlZddlZddlmZddlmZddl m Z m Z ddl m Z mZddlmZmZmZmZmZmZmZmZdd lmZdd lmZmZGd d d eZd dZddZddZ ddZ!ddZ"ddZ#ddZ$dOddZ%ddZ&d d!Z'd"d#Z(dPd$d%Z)d&d'Z*d(d)Z+d*d+Z,dQd-d.Z-d/d0Z.d1d2Z/d3d4d5d6d7Z0dPd8d9Z1dPd:d;Z2dPdd?Z4dPd@dAZ5dBdCZ6dDdEZ7edFdGZ8dHdIZ9dJdKZ:zddLl;m:Z:Wn e>> mean([-1.0, 2.5, 3.25, 5.75]) 2.625 Calculate the standard median of discrete data: >>> median([2, 3, 4, 5]) 3.5 Calculate the median, or 50th percentile, of data grouped into class intervals centred on the data values provided. E.g. if your data points are rounded to the nearest whole number: >>> median_grouped([2, 2, 3, 3, 3, 4]) #doctest: +ELLIPSIS 2.8333333333... This should be interpreted in this way: you have two data points in the class interval 1.5-2.5, three data points in the class interval 2.5-3.5, and one in the class interval 3.5-4.5. The median of these data points is 2.8333... Calculating variability or spread --------------------------------- ================== ============================================= Function Description ================== ============================================= pvariance Population variance of data. variance Sample variance of data. pstdev Population standard deviation of data. stdev Sample standard deviation of data. ================== ============================================= Calculate the standard deviation of sample data: >>> stdev([2.5, 3.25, 5.5, 11.25, 11.75]) #doctest: +ELLIPSIS 4.38961843444... If you have previously calculated the mean, you can pass it as the optional second argument to the four "spread" functions to avoid recalculating it: >>> data = [1, 2, 2, 4, 4, 4, 5, 6] >>> mu = mean(data) >>> pvariance(data, mu) 2.5 Statistics for relations between two inputs ------------------------------------------- ================== ==================================================== Function Description ================== ==================================================== covariance Sample covariance for two variables. correlation Pearson's correlation coefficient for two variables. linear_regression Intercept and slope for simple linear regression. ================== ==================================================== Calculate covariance, Pearson's correlation, and simple linear regression for two inputs: >>> x = [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> y = [1, 2, 3, 1, 2, 3, 1, 2, 3] >>> covariance(x, y) 0.75 >>> correlation(x, y) #doctest: +ELLIPSIS 0.31622776601... >>> linear_regression(x, y) #doctest: LinearRegression(slope=0.1, intercept=1.5) Exceptions ---------- A single exception is defined: StatisticsError is a subclass of ValueError. ) NormalDistStatisticsError correlation covariancefmeangeometric_mean harmonic_meanlinear_regressionmeanmedianmedian_grouped median_high median_lowmode multimodepstdev pvariance quantilesstdevvarianceNFraction)Decimal)groupbyrepeat) bisect_left bisect_right)hypotsqrtfabsexperftaulogfsum) itemgetter)Counter namedtuplec@s eZdZdS)rN)__name__ __module__ __qualname__r+r+!/usr/lib/python3.10/statistics.pyrsrc Csd}i}|j}t}t|tD] \}}t||}tt|D]\}}|d7}||d|||<qqd|vr>|d} t| r=Jn tdd| D} || |fS)a_sum(data) -> (type, sum, count) Return a high-precision sum of the given numeric data as a fraction, together with the type to be converted to and the count of items. Examples -------- >>> _sum([3, 2.25, 4.5, -0.5, 0.25]) (, Fraction(19, 2), 5) Some sources of round-off error will be avoided: # Built-in sum returns zero. >>> _sum([1e50, 1, -1e50] * 1000) (, Fraction(1000, 1), 3000) Fractions and Decimals are also supported: >>> from fractions import Fraction as F >>> _sum([F(2, 3), F(7, 5), F(1, 4), F(5, 6)]) (, Fraction(63, 20), 4) >>> from decimal import Decimal as D >>> data = [D("0.1375"), D("0.2108"), D("0.3061"), D("0.0419")] >>> _sum(data) (, Fraction(6963, 10000), 4) Mixed types are currently treated as an error, except that int is allowed. rNcs|] \}}t||VqdSNr.0dnr+r+r, z_sum..) getintrtype_coercemap _exact_ratio _isfinitesumitems) datacountpartials partials_getTtypvaluesr3r2totalr+r+r,_sums   rGcCs(z|WStyt|YSwr/) is_finiteAttributeErrormathisfinite)xr+r+r,r<s   r<cCs|tusJd||ur|S|tus|tur|S|tur|St||r%|St||r,|St|tr3|St|tr:|St|trFt|trF|St|trRt|trR|Sd}t||j|jf)zCoerce types T and S to a common type, or raise TypeError. Coercion rules are currently an implementation detail. See the CoerceTest test class in test_statistics for details. zinitial type T is boolz"don't know how to coerce %s and %s)boolr7 issubclassrfloat TypeErrorr()rCSmsgr+r+r,r9s  r9c Cs~z|WStyYnttfy"t|rJ|dfYSwz|j|jfWSty>dt|jd}t |w)zReturn Real number x to exact (numerator, denominator) pair. >>> _exact_ratio(0.25) (1, 4) x is expected to be an int, Fraction, Decimal or float. Nzcan't convert type 'z' to numerator/denominator) as_integer_ratiorI OverflowError ValueErrorr< numerator denominatorr8r(rP)rLrRr+r+r,r;s     r;cCsft||ur|St|tr|jdkrt}z||WSty2t|tr1||j||jYSw)z&Convert value to given numeric type T.r-)r8rNr7rWrOrPrrV)valuerCr+r+r,_converts    rYcCs*t||}|t|kr|||kr|St)z,Locate the leftmost value exactly equal to x)rlenrU)arLir+r+r, _find_lteqs r]cCs:t|||d}|t|dkr||d|kr|dSt)z-Locate the rightmost value exactly equal to x)lor-)rrZrU)r[lrLr\r+r+r, _find_rteq"s r`negative valueccs&|D] }|dkr t||VqdS)z7Iterate over values, failing if any are less than zero.rN)r)rEerrmsgrLr+r+r, _fail_neg*s rccCsTt||ur t|}t|}|dkrtdt|\}}}||ks#Jt|||S)aReturn the sample arithmetic mean of data. >>> mean([1, 2, 3, 4, 4]) 2.8 >>> from fractions import Fraction as F >>> mean([F(3, 7), F(1, 21), F(5, 3), F(1, 3)]) Fraction(13, 21) >>> from decimal import Decimal as D >>> mean([D("0.5"), D("0.75"), D("0.625"), D("0.375")]) Decimal('0.5625') If ``data`` is empty, StatisticsError will be raised. r-z%mean requires at least one data point)iterlistrZrrGrY)r?r3rCrFr@r+r+r,r 4s  r cshzt|Wntydfdd}t||}Ynwt|}z|WSty3tddw)zConvert data to floats and compute the arithmetic mean. This runs faster than the mean() function and it always returns a float. If the input dataset is empty, it raises a StatisticsError. >>> fmean([3.5, 4.0, 5.25]) 4.25 rc3s"t|ddD]\}|VqdS)Nr-)start) enumerate)iterablerLr3r+r,r@\szfmean..countz&fmean requires at least one data pointN)rZrPr$ZeroDivisionErrorr)r?r@rFr+rir,rNs       rcCs.z tttt|WStytddw)aYConvert data to floats and compute the geometric mean. Raises a StatisticsError if the input dataset is empty, if it contains a zero, or if it contains a negative value. No special efforts are made to achieve exact results. (However, this may change in the future.) >>> round(geometric_mean([54, 24, 36]), 9) 36.0 zGgeometric mean requires a non-empty dataset containing positive numbersN)r rr:r#rUr)r?r+r+r,ris  rc Cs2t||ur t|}d}t|}|dkrtd|dkr:|dur:|d}t|tjtfr6|dkr4t||Std|durFt d|}|}n#t||urPt|}t||krZtdt dd t ||D\}}}zt ||}t d d t ||D\}}} Wn t yYdSw|dkrtd t|||S) aReturn the harmonic mean of data. The harmonic mean is the reciprocal of the arithmetic mean of the reciprocals of the data. It can be used for averaging ratios or rates, for example speeds. Suppose a car travels 40 km/hr for 5 km and then speeds-up to 60 km/hr for another 5 km. What is the average speed? >>> harmonic_mean([40, 60]) 48.0 Suppose a car travels 40 km/hr for 5 km, and when traffic clears, speeds-up to 60 km/hr for the remaining 30 km of the journey. What is the average speed? >>> harmonic_mean([40, 60], weights=[5, 30]) 56.0 If ``data`` is empty, or any element is less than zero, ``harmonic_mean`` will raise ``StatisticsError``. z.harmonic mean does not support negative valuesr-z.harmonic_mean requires at least one data pointNrzunsupported typez*Number of weights does not match data sizecss|]}|VqdSr/r+)r1wr+r+r,r4sz harmonic_mean..css$|] \}}|r ||ndVqdS)rNr+)r1rkrLr+r+r,r4"zWeighted sum must be positive)rdrerZr isinstancenumbersRealrrPrrGrcziprjrY) r?weightsrbr3rL sum_weights_rCrFr@r+r+r,r|s<     " rcCsXt|}t|}|dkrtd|ddkr||dS|d}||d||dS)aBReturn the median (middle value) of numeric data. When the number of data points is odd, return the middle data point. When the number of data points is even, the median is interpolated by taking the average of the two middle values: >>> median([1, 3, 5]) 3 >>> median([1, 3, 5, 7]) 4.0 rno median for empty datar-sortedrZr)r?r3r\r+r+r,r s   r cCsHt|}t|}|dkrtd|ddkr||dS||ddS)a Return the low median of numeric data. When the number of data points is odd, the middle value is returned. When it is even, the smaller of the two middle values is returned. >>> median_low([1, 3, 5]) 3 >>> median_low([1, 3, 5, 7]) 3 rrtrur-rvr?r3r+r+r,r s   r cCs,t|}t|}|dkrtd||dS)aReturn the high median of data. When the number of data points is odd, the middle value is returned. When it is even, the larger of the two middle values is returned. >>> median_high([1, 3, 5]) 3 >>> median_high([1, 3, 5, 7]) 5 rrtrurvrxr+r+r,r s   r r-c Cst|}t|}|dkrtd|dkr|dS||d}||fD]}t|ttfr1td|q"z||d}WntyMt|t|d}Ynwt||}t |||}|}||d} |||d|| S)aReturn the 50th percentile (median) of grouped continuous data. >>> median_grouped([1, 2, 2, 3, 4, 4, 4, 4, 4, 5]) 3.7 >>> median_grouped([52, 52, 53, 54]) 52.5 This calculates the median as the 50th percentile, and should be used when your data is continuous and grouped. In the above example, the values 1, 2, 3, etc. actually represent the midpoint of classes 0.5-1.5, 1.5-2.5, 2.5-3.5, etc. The middle value falls somewhere in class 3.5-4.5, and interpolation is used to estimate it. Optional argument ``interval`` represents the class interval, and defaults to 1. Changing the class interval naturally will change the interpolated 50th percentile value: >>> median_grouped([1, 3, 3, 5, 7], interval=1) 3.25 >>> median_grouped([1, 3, 3, 5, 7], interval=2) 3.5 This function does not check whether the data points are at least ``interval`` apart. rrtr-ruzexpected number but got %r) rwrZrrmstrbytesrPrOr]r`) r?intervalr3rLobjLl1l2cffr+r+r,r s*       r cCs:tt|d}z|ddWStytddw)axReturn the most common data point from discrete or nominal data. ``mode`` assumes discrete data, and returns a single value. This is the standard treatment of the mode as commonly taught in schools: >>> mode([1, 1, 2, 3, 3, 3, 3, 4]) 3 This also works with nominal (non-numeric) data: >>> mode(["red", "blue", "blue", "red", "green", "red", "red"]) 'red' If there are multiple modes with same frequency, return the first one encountered: >>> mode(['red', 'red', 'green', 'blue', 'blue']) 'red' If *data* is empty, ``mode``, raises StatisticsError. r-rzno mode for empty dataN)r&rd most_common IndexErrorr)r?pairsr+r+r,r,s   rcCs@tt|}tt|tdddgf\}}tttd|S)a.Return a list of the most frequently occurring values. Will return more than one result if there are multiple modes or an empty list if *data* is empty. >>> multimode('aabbbbbbbbcc') ['b'] >>> multimode('aabbbbccddddeeffffgg') ['b', 'd', 'f'] >>> multimode('') [] r-)keyr)r&rdrnextrr%rer:)r?countsmaxcount mode_itemsr+r+r,rJs r exclusive)r3methodc Cs<|dkrtdt|}t|}|dkrtd|dkrL|d}g}td|D]"}t|||\}}||||||d||} || q'|S|dkr|d}g}td|D]9}|||}|dkridn ||dkrs|dn|}||||}||d||||||} || q[|Std|)aDivide *data* into *n* continuous intervals with equal probability. Returns a list of (n - 1) cut points separating the intervals. Set *n* to 4 for quartiles (the default). Set *n* to 10 for deciles. Set *n* to 100 for percentiles which gives the 99 cuts points that separate *data* in to 100 equal sized groups. The *data* can be any iterable containing sample. The cut points are linearly interpolated between data points. If *method* is set to *inclusive*, *data* is treated as population data. The minimum value is treated as the 0th percentile and the maximum value is treated as the 100th percentile. r-zn must be at least 1ruz"must have at least two data points inclusiverzUnknown method: )rrwrZrangedivmodappendrU) r?r3rldmresultr\jdelta interpolatedr+r+r,rs2$  $$ rc sdurtfdd|D\}}}||fSt|\}}}||\}}t}tt|D]\}} ||| |} | |} || | | | 7<q-d|vr\|d}t|rXJ||fStdd|D}||fS)a;Return sum of square deviations of sequence data. If ``c`` is None, the mean is calculated in one pass, and the deviations from the mean are calculated in a second pass. Otherwise, deviations are calculated from ``c`` as given. Use the second case with care, as it can lead to garbage results. Nc3|] }|dVqdS)ruNr+)r1rLcr+r,r4z_ss..csr.r/rr0r+r+r,r4r5)rGrSr&r:r;r<r=r>) r?rrCrFr@mean_nmean_drAr3r2diff_ndiff_dr+rr,_sss  rcCsLt||ur t|}t|}|dkrtdt||\}}t||d|S)aReturn the sample variance of data. data should be an iterable of Real-valued numbers, with at least two values. The optional argument xbar, if given, should be the mean of the data. If it is missing or None, the mean is automatically calculated. Use this function when your data is a sample from a population. To calculate the variance from the entire population, see ``pvariance``. Examples: >>> data = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5] >>> variance(data) 1.3720238095238095 If you have already calculated the mean of your data, you can pass it as the optional second argument ``xbar`` to avoid recalculating it: >>> m = mean(data) >>> variance(data, m) 1.3720238095238095 This function does not check that ``xbar`` is actually the mean of ``data``. Giving arbitrary values for ``xbar`` may lead to invalid or impossible results. Decimals and Fractions are supported: >>> from decimal import Decimal as D >>> variance([D("27.5"), D("30.25"), D("30.25"), D("34.5"), D("41.75")]) Decimal('31.01875') >>> from fractions import Fraction as F >>> variance([F(1, 6), F(1, 2), F(5, 3)]) Fraction(67, 108) ruz*variance requires at least two data pointsr-rdrerZrrrY)r?xbarr3rCssr+r+r,rs &rcCsHt||ur t|}t|}|dkrtdt||\}}t|||S)a,Return the population variance of ``data``. data should be a sequence or iterable of Real-valued numbers, with at least one value. The optional argument mu, if given, should be the mean of the data. If it is missing or None, the mean is automatically calculated. Use this function to calculate the variance from the entire population. To estimate the variance from a sample, the ``variance`` function is usually a better choice. Examples: >>> data = [0.0, 0.25, 0.25, 1.25, 1.5, 1.75, 2.75, 3.25] >>> pvariance(data) 1.25 If you have already calculated the mean of the data, you can pass it as the optional second argument to avoid recalculating it: >>> mu = mean(data) >>> pvariance(data, mu) 1.25 Decimals and Fractions are supported: >>> from decimal import Decimal as D >>> pvariance([D("27.5"), D("30.25"), D("30.25"), D("34.5"), D("41.75")]) Decimal('24.815') >>> from fractions import Fraction as F >>> pvariance([F(1, 4), F(5, 4), F(1, 2)]) Fraction(13, 72) r-z*pvariance requires at least one data pointr)r?mur3rCrr+r+r,rs #rcC2t||}z|WStyt|YSw)zReturn the square root of the sample variance. See ``variance`` for arguments and other details. >>> stdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75]) 1.0810874155219827 )rrrIrJ)r?rvarr+r+r,r0   rcCr)zReturn the square root of the population variance. See ``pvariance`` for arguments and other details. >>> pstdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75]) 0.986893273527251 )rrrIrJ)r?rrr+r+r,rCrrcsnt|}t||krtd|dkrtdt||t||tfddt||D}||dS)apCovariance Return the sample covariance of two inputs *x* and *y*. Covariance is a measure of the joint variability of two inputs. >>> x = [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> y = [1, 2, 3, 1, 2, 3, 1, 2, 3] >>> covariance(x, y) 0.75 >>> z = [9, 8, 7, 6, 5, 4, 3, 2, 1] >>> covariance(x, z) -7.5 >>> covariance(z, x) -7.5 zDcovariance requires that both inputs have same number of data pointsruz,covariance requires at least two data pointsc3$|] \}}||VqdSr/r+r1xiyirybarr+r,r4urlzcovariance..r-)rZrr$rp)rLyr3sxyr+rr,r]s    rcst|}t||krtd|dkrtdt||t||tfddt||D}tfdd|D}tfdd|D}z |t||WSty[tdw) aPearson's correlation coefficient Return the Pearson's correlation coefficient for two inputs. Pearson's correlation coefficient *r* takes values between -1 and +1. It measures the strength and direction of the linear relationship, where +1 means very strong, positive linear relationship, -1 very strong, negative linear relationship, and 0 no linear relationship. >>> x = [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> y = [9, 8, 7, 6, 5, 4, 3, 2, 1] >>> correlation(x, x) 1.0 >>> correlation(x, y) -1.0 zEcorrelation requires that both inputs have same number of data pointsruz-correlation requires at least two data pointsc3rr/r+rrr+r,r4rlzcorrelation..c3r@Nr+r1rrr+r,r4rc3rrr+)r1r)rr+r,r4rz&at least one of the inputs is constant)rZrr$rprrj)rLrr3rsxxsyyr+rr,rys    rLinearRegressionslope interceptcst|}t||krtd|dkrtdt||t||tfddt||D}tfdd|D}z||}Wn tyMtdw|}t||dS) aSlope and intercept for simple linear regression. Return the slope and intercept of simple linear regression parameters estimated using ordinary least squares. Simple linear regression describes relationship between an independent variable *x* and a dependent variable *y* in terms of linear function: y = slope * x + intercept + noise where *slope* and *intercept* are the regression parameters that are estimated, and noise represents the variability of the data that was not explained by the linear regression (it is equal to the difference between predicted and actual values of the dependent variable). The parameters are returned as a named tuple. >>> x = [1, 2, 3, 4, 5] >>> noise = NormalDist().samples(5, seed=42) >>> y = [3 * x[i] + 2 + noise[i] for i in range(5)] >>> linear_regression(x, y) #doctest: +ELLIPSIS LinearRegression(slope=3.09078914170..., intercept=1.75684970486...) zKlinear regression requires that both inputs have same number of data pointsruz3linear regression requires at least two data pointsc3rr/r+rrr+r,r4rlz$linear_regression..c3rrr+rrr+r,r4rz x is constantr)rZrr$rprjr)rLrr3rrrrr+rr,rs        rcCs|d}t|dkrXd||}d|d|d|d|d|d |d |d |}d |d |d|d|d|d|d|d}||}|||S|dkr^|nd|}tt| }|dkr|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}||}|dkr| }|||S)5N?g333333?gQ?g^}o)@gE.kR@g Ul@g*u>l@gN@g"]Ξ@gnC`@gu @giK~j@gv|E@gd|1@gfRr@gu.2@g~y@gn8(E@?g@g?g鬷ZaI?ggElD?g7\?guSS?g=. @gj%b@gHw@gjRe?g9dh? >g('߿A?g~z ?g@3?gɅ3?g3fRx?gIFl@gt>g*Yn>gESB\T?gN;A+?gUR1?gEF?gPn@g&>@gigtcI,\>gŝI?g*F2v?gC4?gO1?)rrr#)prsigmaqrnumdenrLr+r+r,_normal_dist_inv_cdfsd     r)rc@seZdZdZdddZd>ddZed d Zd d d dZddZ ddZ ddZ d?ddZ ddZ ddZeddZeddZed d!Zed"d#Zed$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1ZeZd2d3ZeZd4d5Zd6d7Zd8d9Z d:d;Z!d8sz&NormalDist.samples..)randomrRandomrrr)rr3rr+rr,samples4szNormalDist.samplescCs<|jd}|s tdt||jdd|tt|S)z4Probability density function. P(x <= X < x+dx) / dxrz$pdf() not defined when sigma is zerog)rrr rrr")rrLrr+r+r,pdf:s &zNormalDist.pdfcCs2|jstdddt||j|jtdS)z,Cumulative distribution function. P(X <= x)z$cdf() not defined when sigma is zerorrr)rrr!rrrrLr+r+r,cdfAs$zNormalDist.cdfcCs:|dks|dkr td|jdkrtdt||j|jS)aSInverse cumulative distribution function. x : P(X <= x) = p Finds the value of the random variable such that the probability of the variable being less than or equal to that value equals the given probability. This function is also called the percent point function or quantile function. rrz$p must be in the range 0.0 < p < 1.0z-cdf() not defined when sigma at or below zero)rrrr)rrr+r+r,inv_cdfGs   zNormalDist.inv_cdfrcsfddtdDS)anDivide into *n* continuous intervals with equal probability. Returns a list of (n - 1) cut points separating the intervals. Set *n* to 4 for quartiles (the default). Set *n* to 10 for deciles. Set *n* to 100 for percentiles which gives the 99 cuts points that separate the normal distribution in to 100 equal sized groups. csg|] }|qSr+)rrr3rr+r,r`sz(NormalDist.quantiles..r-)r)rr3r+rr,rWs zNormalDist.quantilesc Cst|ts td||}}|j|jf|j|jfkr||}}|j|j}}|r*|s.td||}t|j|j}|sKdt|d|jt dS|j||j|}|j|jt |d|t ||} || |} || |} dt| | | | t| | | | S)aCompute the overlapping coefficient (OVL) between two normal distributions. Measures the agreement between two normal probability distributions. Returns a value between 0.0 and 1.0 giving the overlapping area in the two underlying probability density functions. >>> N1 = NormalDist(2.4, 1.6) >>> N2 = NormalDist(3.2, 2.0) >>> N1.overlap(N2) 0.8035050657330205 z$Expected another NormalDist instancez(overlap() not defined when sigma is zerorr) rmrrPrrrrrr!rr#r) rotherXYX_varY_vardvdmr[bx1x2r+r+r,overlapbs"   (  4zNormalDist.overlapcCs|jstd||j|jS)zCompute the Standard Score. (x - mean) / stdev Describes *x* in terms of the number of standard deviations above or below the mean of the normal distribution. z'zscore() not defined when sigma is zero)rrrrr+r+r,zscoreszNormalDist.zscorecC|jS)z+Arithmetic mean of the normal distribution.rrr+r+r,r zNormalDist.meancCr)z,Return the median of the normal distributionrrr+r+r,r rzNormalDist.mediancCr)zReturn the mode of the normal distribution The mode is the value x where which the probability density function (pdf) takes its maximum value. rrr+r+r,rszNormalDist.modecCr)z.Standard deviation of the normal distribution.rrr+r+r,rrzNormalDist.stdevcCs |jdS)z!Square of the standard deviation.rrrr+r+r,rs zNormalDist.variancecCs8t|trt|j|jt|j|jSt|j||jS)ajAdd a constant or another NormalDist instance. If *other* is a constant, translate mu by the constant, leaving sigma unchanged. If *other* is a NormalDist, add both the means and the variances. Mathematically, this works only if the two distributions are independent or if they are jointly normally distributed. rmrrrrrrr+r+r,__add__ zNormalDist.__add__cCs8t|trt|j|jt|j|jSt|j||jS)asSubtract a constant or another NormalDist instance. If *other* is a constant, translate by the constant mu, leaving sigma unchanged. If *other* is a NormalDist, subtract the means and add the variances. Mathematically, this works only if the two distributions are independent or if they are jointly normally distributed. rrr+r+r,__sub__rzNormalDist.__sub__cCst|j||jt|S)zMultiply both mu and sigma by a constant. Used for rescaling, perhaps to change measurement units. Sigma is scaled with the absolute value of the constant. rrrrrr+r+r,__mul__zNormalDist.__mul__cCst|j||jt|S)zDivide both mu and sigma by a constant. Used for rescaling, perhaps to change measurement units. Sigma is scaled with the absolute value of the constant. rrr+r+r, __truediv__rzNormalDist.__truediv__cCst|j|jS)zReturn a copy of the instance.rrrrr+r+r,__pos__szNormalDist.__pos__cCst|j |jS)z(Negates mu while keeping sigma the same.rrr+r+r,__neg__zNormalDist.__neg__cCs || S)zr__all__rJrnr fractionsrdecimalr itertoolsrrbisectrrrrrr r!r"r#r$operatorr% collectionsr&r'rUrrGr<r9r;rYr]r`rcr rrrr r r r rrrrrrrrrrrrr _statistics ImportErrorrr+r+r+r,s`j  ( 4   8 77 8  / ,  !-K