grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026o ®û|jŨã@sæ gd¢ZddlZddlZddlZddlmZddlmZddlm Z m Z ddl m Z m Z ddlmZmZmZmZmZmZmZmZddlmZdd lmZmZGd d „d eƒZd d „Zdd„Zdd„Zdd„Z dd„Z!dd„Z"dd„Z#dNdd„Z$dd„Z%dd „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„Z6edEdFƒZ7dGdH„Z8dIdJ„Z9zddKl:m9Z9Wn e;yéYnwGdLdM„dMƒZÆó€z_sum..) ÚgetÚintrÚtypeÚ_coerceÚmapÚ _exact_ratioÚsumÚitems) ÚdataÚcountÚpartialsZ partials_getÚTÚtypÚvaluesr3r2Útotalr+r+r,Ú_sum–s þ  rEcCs(z| ¡WStyt |¡YSwr/)Z is_finiteÚAttributeErrorÚmathZisfinite)Úxr+r+r,Ú _isfiniteÊs   ÿrIcCs® ||ur|S|tus|tur|S|tur|St||ƒr|St||ƒr%|St|tƒr,|St|tƒr3|St|tƒr?t|tƒr?|St|tƒrKt|tƒrK|Sd}t||j|jfƒ‚)Nz"don't know how to coerce %s and %s)r7ÚboolÚ issubclassrÚfloatÚ TypeErrorr()rAÚSÚmsgr+r+r,r9Ñs  r9c Cst z| ¡WStyYnttfy|dfYSwz|j|jfWSty9dt|ƒj›d�}t|ƒ‚w)Nzcan't convert type 'z' to numerator/denominator) Úas_integer_ratiorFÚ OverflowErrorÚ ValueErrorÚ numeratorÚ denominatorr8r(rM)rHrOr+r+r,r;ðs   ý þr;cCsh t|ƒ|ur |St|tƒr|jdkrt}z||ƒWSty3t|tƒr2||jƒ||jƒYS‚w)Nr-)r8rKr7rTrLrMrrS)ÚvaluerAr+r+r,Ú_converts    ürVcCs, t||ƒ}|t|ƒkr|||kr|St‚r/)rÚlenrR)ÚarHÚir+r+r,Ú _find_lteqs  rZcCs< t|||d�}|t|ƒdkr||d|kr|dSt‚)N)Úlor-)rrWrR)rXÚlrHrYr+r+r,Ú _find_rteq"s  r]únegative valueccs(� |D] }|dkrt|ƒ‚|VqdS)Nr)r)rCÚerrmsgrHr+r+r,Ú _fail_neg*s€ýr`cCsJ t|ƒ|ur t|ƒ}t|ƒ}|dkrtdƒ‚t|ƒ\}}}t|||ƒS)Nr-z%mean requires at least one data point)ÚiterÚlistrWrrErV)r>r3rArDr?r+r+r,r 4s r csj zt|ƒ‰Wntyd‰‡fdd„}t||ƒƒ}Ynwt|ƒ}z|ˆWSty4tdƒd‚w)Nrc3s"�t|dd�D]\‰}|VqdS)Nr-)Ústart)Ú enumerate)ÚiterablerH©r3r+r,r?\s€ÿzfmean..countz&fmean requires at least one data point)rWrMr$ÚZeroDivisionErrorr)r>r?rDr+rfr,rNs   ù    ÿrcCs0 z tttt|ƒƒƒWStytdƒd‚w)NzGgeometric mean requires a non-empty dataset containing positive numbers)r rr:r#rRr)r>r+r+r,ris  ÿÿrc Cs4 t|ƒ|ur t|ƒ}d}t|ƒ}|dkrtdƒ‚|dkr;|dur;|d}t|tjtfƒr7|dkr5t|ƒ‚|Stdƒ‚|durGt d|ƒ}|}n#t|ƒ|urQt|ƒ}t|ƒ|kr[tdƒ‚t dd„t ||ƒDƒƒ\}}}zt ||ƒ}t d d„t ||ƒDƒƒ\}}} Wn t yŠYdSw|dkr“td ƒ‚t|||ƒS) Nz.harmonic mean does not support negative valuesr-z.harmonic_mean requires at least one data pointrzunsupported typez*Number of weights does not match data sizecss�|]}|VqdSr/r+)r1Úwr+r+r,r4©s€z harmonic_mean..css$�|] \}}|r ||ndVqdS)rNr+)r1rhrHr+r+r,r4¬ó€"zWeighted sum must be positive)rarbrWrÚ isinstanceÚnumbersZRealrrMrrEr`ÚziprgrV) r>Zweightsr_r3rHZ sum_weightsÚ_rArDr?r+r+r,r|s>     " ÿrcCsZ t|ƒ}t|ƒ}|dkrtdƒ‚|ddkr||dS|d}||d||dS©Nrúno median for empty dataér-©ÚsortedrWr)r>r3rYr+r+r,r ´s   r cCsJ t|ƒ}t|ƒ}|dkrtdƒ‚|ddkr||dS||ddSrnrq©r>r3r+r+r,r Ìs   r cCs. t|ƒ}t|ƒ}|dkrtdƒ‚||dS)Nrrorprqrsr+r+r,r âs   r r-c CsÜ t|ƒ}t|ƒ}|dkrtdƒ‚|dkr|dS||d}||fD]}t|ttfƒr2td|ƒ‚q#z||d}WntyNt|ƒt|ƒd}Ynwt||ƒ}t |||ƒ}|}||d} |||d|| S)Nrror-rpzexpected number but got %r) rrrWrrjÚstrÚbytesrMrLrZr]) r>Zintervalr3rHÚobjÚLÚl1Úl2ZcfÚfr+r+r,r õs,   ÿ þ   r cCs< tt|ƒƒ d¡}z|ddWStytdƒd‚w)Nr-rzno mode for empty data)r&raÚ most_commonÚ IndexErrorr)r>Zpairsr+r+r,r,s  ÿrcCsB tt|ƒƒ ¡}tt|tdƒd�dgfƒ\}}tttdƒ|ƒƒS)Nr-)Úkeyr)r&rar{Únextrr%rbr:)r>ZcountsZmaxcountZ mode_itemsr+r+r,rJs réÚ exclusive)r3Úmethodc Cs> |dkr tdƒ‚t|ƒ}t|ƒ}|dkrtdƒ‚|dkrM|d}g}td|ƒD]"}t|||ƒ\}}||||||d||} | | ¡q(|S|dkr˜|d}g}td|ƒD]9}|||}|dkrjdn ||dkrt|dn|}||||}||d||||||} | | ¡q\|Std|›�ƒ‚)Nr-zn must be at least 1rpz"must have at least two data pointsZ inclusiver€zUnknown method: )rrrrWÚrangeÚdivmodÚappendrR) r>r3r�ZldÚmÚresultrYÚjZdeltaZ interpolatedr+r+r,r�s4$  $$ rc sÌ ˆdurt‡fdd„|Dƒƒ\}}}||fSt|ƒ\}}}|| ¡\}}tƒ}tt|ƒD]\}} ||| |} | |} || | | | 7<q.d|vrW|d}||fStdd„| ¡Dƒƒ}||fS)Nc3ó�|] }|ˆdVqdS)rpNr+)r1rH©Úcr+r,r4Âó€z_ss..csr.r/rr0r+r+r,r4Ñr5)rErPr&r:r;r<r=) r>rŠrArDr?Zmean_nZmean_dr@r3r2Zdiff_nZdiff_dr+r‰r,Ú_ss¹s ÿrŒcCsN t|ƒ|ur t|ƒ}t|ƒ}|dkrtdƒ‚t||ƒ\}}t||d|ƒS)Nrpz*variance requires at least two data pointsr-©rarbrWrrŒrV)r>Úxbarr3rAÚssr+r+r,rÕs %rcCsJ t|ƒ|ur t|ƒ}t|ƒ}|dkrtdƒ‚t||ƒ\}}t|||ƒS)Nr-z*pvariance requires at least one data pointr�)r>Úmur3rAr�r+r+r,rs "rcCó4 t||ƒ}z| ¡WStyt |¡YSwr/)rrrFrG)r>rŽÚvarr+r+r,r0ó   ÿrcCr‘r/)rrrFrG)r>r�r’r+r+r,rCr“rcsp t|ƒ}t|ƒ|krtdƒ‚|dkrtdƒ‚t|ƒ|‰t|ƒ|‰t‡‡fdd„t||ƒDƒƒ}||dS)NzDcovariance requires that both inputs have same number of data pointsrpz,covariance requires at least two data pointsc3ó$�|] \}}|ˆ|ˆVqdSr/r+©r1ÚxiÚyi©rŽÚybarr+r,r4urizcovariance..r-)rWrr$rl)rHÚyr3Úsxyr+r˜r,r]s    rcsº t|ƒ}t|ƒ|krtdƒ‚|dkrtdƒ‚t|ƒ|‰t|ƒ|‰t‡‡fdd„t||ƒDƒƒ}t‡fdd„|Dƒƒ}t‡fdd„|Dƒƒ}z |t||ƒWSty\tdƒ‚w) NzEcorrelation requires that both inputs have same number of data pointsrpz-correlation requires at least two data pointsc3r”r/r+r•r˜r+r,r4‘rizcorrelation..c3rˆ©ç@Nr+©r1r–©rŽr+r,r4’r‹c3rˆrœr+)r1r—)r™r+r,r4“r‹z&at least one of the inputs is constant)rWrr$rlrrg)rHršr3r›ÚsxxZsyyr+r˜r,rys     ÿrÚLinearRegression©ÚslopeÚ interceptcs¶ t|ƒ}t|ƒ|krtdƒ‚|dkrtdƒ‚t|ƒ|‰t|ƒ|‰t‡‡fdd„t||ƒDƒƒ}t‡fdd„|Dƒƒ}z||}Wn tyNtdƒ‚wˆ|ˆ}t||d�S) NzKlinear regression requires that both inputs have same number of data pointsrpz3linear regression requires at least two data pointsc3r”r/r+r•r˜r+r,r4½riz$linear_regression..c3rˆrœr+ržrŸr+r,r4¾r‹z x is constantr¢)rWrr$rlrgr¡)rHršr3r›r r£r¤r+r˜r,r�s"     ÿ  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Û?g…ëQ¸Ç?g^’}o)š£@gäE.kÒRà@g �·Ulð@g*u›†>læ@gçNÍØÑÊ@gÌÀ"]Ξ@gnC‹ˆ¤`@guïžÙ @giK˜Ê~j´@gv®±|EÜ@g¾ôdª|1ã@gfRÖÕr·Ô@gŸÈu.2µ@g÷³Èý~y…@gµn8(E@çð?çg@gš™™™™™ù?g鬷ÀZaI?ggìElëD—?g7\¸¹«òÎ?g²uSÌSô?gÄ=Ë. @gj%b÷@g›±ÊHw…@gjRéýeÆö?gä9dh? >g('ß¿ŒñA?g¿«~z �?g@ð”3õÂ?gÉ…3ò’æ?g3fRæxÒú?gI¤F»ïl@g“¿“ÖtûŠ>g*àYÌÆnü>gESB\T?gçN;A+›?gÏUR1ÙúÒ?gE¤F¦Žü?gP‡nêÚ@g&å>Á±¡@g�Áøñ¿iâg¿tcI,\ó>g×Å�—¼ÈI?g*F2ùvŽ?gûC4ë†Á?g×ÇOÓ1ã?)rrr#)Úpr�ÚsigmaÚqÚrZnumZdenrHr+r+r,Ú_normal_dist_inv_cdfÊsd  ÿÿþþýýüüûûúúùùÿÿþþýýüüûûúúù ÿÿþþýýüüûûúúùÿÿþþýýüüûûúúù ÿÿþþýýüüûûúúùÿÿþþýýüüûûúúù r¬)r¬c@seZdZ dddœZd=dd„Zedd „ƒZd d œd d „Zdd„Zdd„Z dd„Z d>dd„Z dd„Z dd„Z edd„ƒZedd„ƒZedd „ƒZed!d"„ƒZed#d$„ƒZd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„ZeZd1d2„ZeZd3d4„Zd5d6„Zd7d8„Zd9d:„Z d;d<„Z!d S)?rz(Arithmetic mean of a normal distributionz+Standard deviation of a normal distribution©Ú_muÚ_sigmar§r¦cCs* |dkr tdƒ‚t|ƒ|_t|ƒ|_dS)Nr§zsigma must be non-negative)rrLr®r¯)Úselfr�r©r+r+r,Ú__init__%s  zNormalDist.__init__cCs0 t|ttfƒs t|ƒ}t|ƒ}||t||ƒƒSr/)rjrbÚtuplerr)Úclsr>rŽr+r+r,Ú from_samples,s zNormalDist.from_samplesN)ÚseedcsD |durtjnt |¡j‰|j|j‰‰‡‡‡fdd„t|ƒDƒS)Ncsg|]}ˆˆˆƒ‘qSr+r+©r1rY©Úgaussr�r©r+r,Ú 8sz&NormalDist.samples..)Úrandomr¸ZRandomr®r¯r‚)r°r3rµr+r·r,Úsamples4szNormalDist.samplescCs> |jd}|s tdƒ‚t||jdd|ƒtt|ƒS)Nr�z$pdf() not defined when sigma is zerogÀ)r¯rr r®rr")r°rHrr+r+r,Úpdf:s  &zNormalDist.pdfcCs4 |jstdƒ‚ddt||j|jtdƒƒS)Nz$cdf() not defined when sigma is zeror¥r¦r�)r¯rr!r®r©r°rHr+r+r,ÚcdfAs$zNormalDist.cdfcCs< |dks |dkr tdƒ‚|jdkrtdƒ‚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)rr¯r¬r®)r°r¨r+r+r,Úinv_cdfGs   zNormalDist.inv_cdfrcs ‡‡fdd„tdˆƒDƒS)Ncsg|] }ˆ |ˆ¡‘qSr+)r¿r¶©r3r°r+r,r¹`sz(NormalDist.quantiles..r-)r‚)r°r3r+rÀr,rWszNormalDist.quantilesc Cs  t|tƒs tdƒ‚||}}|j|jf|j|jfkr ||}}|j|j}}|r+|s/tdƒ‚||}t|j|jƒ}|sLdt|d|jt dƒƒS|j||j|}|j|jt |d|t ||ƒƒ} || |} || |} dt|  | ¡|  | ¡ƒt|  | ¡|  | ¡ƒS)Nz$Expected another NormalDist instancez(overlap() not defined when sigma is zeror¦r�) rjrrMr¯r®rrrr!rr#r¾) r°ÚotherÚXÚYZX_varZY_varZdvZdmrXÚbÚx1Úx2r+r+r,Úoverlapbs$   (  4zNormalDist.overlapcCs |jstdƒ‚||j|jS)Nz'zscore() not defined when sigma is zero)r¯rr®r½r+r+r,Úzscore„szNormalDist.zscorecCó |jSr/©r®©r°r+r+r,r �ózNormalDist.meancCrÉr/rÊrËr+r+r,r ”rÌzNormalDist.mediancCrÉr/rÊrËr+r+r,r™szNormalDist.modecCrÉr/©r¯rËr+r+r,r¢rÌzNormalDist.stdevcCs |jdS)Nr�rÍrËr+r+r,r§s zNormalDist.variancecCs: t|tƒrt|j|jt|j|jƒƒSt|j||jƒSr/©rjrr®rr¯©rÅrÆr+r+r,Ú__add__¬ó zNormalDist.__add__cCs: t|tƒrt|j|jt|j|jƒƒSt|j||jƒSr/rÎrÏr+r+r,Ú__sub__ºrÑzNormalDist.__sub__cCs t|j||jt|ƒƒSr/©rr®r¯rrÏr+r+r,Ú__mul__ÈózNormalDist.__mul__cCs t|j||jt|ƒƒSr/rÓrÏr+r+r,Ú __truediv__ÐrÕzNormalDist.__truediv__cCs t|j|jƒSr/©rr®r¯©rÅr+r+r,Ú__pos__ØszNormalDist.__pos__cCs t|j |jƒSr/r×rØr+r+r,Ú__neg__ÜózNormalDist.__neg__cCs || Sr/r+rÏr+r+r,Ú__rsub__âs zNormalDist.__rsub__cCs( t|tƒstS|j|jko|j|jkSr/)rjrÚNotImplementedr®r¯rÏr+r+r,Ú__eq__ès zNormalDist.__eq__cCs t|j|jfƒSr/)Úhashr®r¯rËr+r+r,Ú__hash__îrÛzNormalDist.__hash__cCs t|ƒj›d|j›d|j›d�S)Nz(mu=z, sigma=ú))r8r(r®r¯rËr+r+r,Ú__repr__òs zNormalDist.__repr__cCs |j|jfSr/r­rËr+r+r,Ú __getstate__õs zNormalDist.__getstate__cCs|\|_|_dSr/r­)r°Ústater+r+r,Ú __setstate__øszNormalDist.__setstate__)r§r¦)r)"r(r)r*Ú __slots__r±Ú classmethodr´r»r¼r¾r¿rrÇrÈÚpropertyr r rrrrÐrÒrÔrÖrÙrÚÚ__radd__rÜÚ__rmul__rÞràrârãrår+r+r+r,rsNþ    "      r)r^r/)r-)=Ú__all__rGrkrºZ fractionsrZdecimalrÚ itertoolsrrZbisectrrrrrr r!r"r#r$Úoperatorr%Ú collectionsr&r'rRrrErIr9r;rVrZr]r`r rrrr r r r rrrrŒrrrrrrr¡rr¬Z _statisticsÚ ImportErrorrr+r+r+r,Ús`j  ( 4   8 77 8  / ,  !-K ÿ