K iA dZddlmZddlmZddlmZddlmZddl m Z ddl m Z ddl mZmZdd lmZdd lmZdd lmZmZdd lmZdd lmZddlmZddlmZmZddl m!Z!ddl"m#Z#ddl$m%Z%ddlm&Z&ddlm'Z'ddl m(Z(ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5Gdde6Z7Gdde*Z8Gdde8Z9Gdde+e8Z:Gdd e,e:Z;Gd!d"e5e3Z<Gd#d$e-Z=Gd%d&e/e=Z>Gd'd(e.e=Z?y))*zq Finite Discrete Random Variables Module See Also ======== sympy.stats.frv_types sympy.stats.rv sympy.stats.crv )product)Sum)Basic)cacheit)Lambda)Mul)Inan)Eq)S)DummySymbolsympifyexp) Piecewise)AndOr) Intersection)Dict)Logic) Relational)_sympify FiniteSet) RandomDomain ProductDomainConditionalDomainPSpaceIndependentProductPSpace SinglePSpacerandom_symbolssumsetsrv_subsNamedArgsMixinDensity Distributionc&eZdZdZdZedZy) FiniteDensityz' A domain with Finite Density. c,t|}||vr||Sy)z Make instance of a class callable. If item belongs to current instance of a class, return it. Otherwise, return 0. rr)selfitems U/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/stats/frv.py__call__zFiniteDensity.__call__(s!t} 4<: ct|S)z, Return item as dictionary. )dictr,s r.r2zFiniteDensity.dict6s Dzr0N)__name__ __module__ __qualname____doc__r/propertyr2r0r.r*r*$s  r0r*cVeZdZdZdZedZedZedZdZ dZ dZ y ) FiniteDomainzS A domain with discrete finite support Represented using a FiniteSet. Tc:td|jDS)Nc3&K|] \}}| ywNr9).0symvals r. z'FiniteDomain.symbols..Gs;c;s)relementsr3s r.symbolszFiniteDomain.symbolsEs;T]];;;r0c |jdSNrargsr3s r.rCzFiniteDomain.elementsIyy|r0c pt|jDcgc]}tt|c}Scc}wr>)rrCrr2)r,els r.r2zFiniteDomain.dictMs'DMMBb4R>BCCBs3c||jvSr>)rCr,others r. __contains__zFiniteDomain.__contains__Qs %%r0c6|jjSr>)rC__iter__r3s r.rQzFiniteDomain.__iter__Ts}}%%''r0ct|Dcgc]'}t|Dcgc]\}}t||c}})c}}}Scc}}wcc}}}wr>)rrr )r,r-r@rAs r. as_booleanzFiniteDomain.as_booleanWs;$OO$Ct<83"S#,<=OPP<OsA >A A N) r4r5r6r7 is_Finiter8rDrCr2rOrQrSr9r0r.r;r;=sZ I <<DD&(Qr0r;cbeZdZdZdZedZedZedZedZ dZ dZ y ) SingleFiniteDomainzi A FiniteDomain over a single symbol/set Example: The possibilities of a *single* die roll. ct|tst|tst|}tj|||Sr>) isinstancerrr__new__)clssymbolsets r.rYzSingleFiniteDomain.__new__bs2#y)3 -S/C}}S&#..r0c |jdSrFrGr3s r.r[zSingleFiniteDomain.symbolhrIr0c,t|jSr>)rr[r3s r.rDzSingleFiniteDomain.symbolsls%%r0c |jdSNrGr3s r.r\zSingleFiniteDomain.setprIr0c xt|jDcgc]}t|j|ffc}Scc}wr>)rr\ frozensetr[r,elems r.rCzSingleFiniteDomain.elementsts0$((S$9t{{D&9%<=STTSs7c.fdjDS)Nc3NK|]}tj|ffywr>)rcr[r?rer,s r.rBz.SingleFiniteDomain.__iter__..ys"Gd DKK.01G"%r\r3s`r.rQzSingleFiniteDomain.__iter__xsGdhhGGr0cbt|d\}}||jk(xr||jvSrF)tupler[r\)r,rNr@rAs r.rOzSingleFiniteDomain.__contains__{s/<?Sdkk!5cTXXo5r0N) r4r5r6r7rYr8r[rDr\rCrQrOr9r0r.rVrV[si / &&UUH6r0rVc&eZdZdZdZedZy)ProductFiniteDomainz A Finite domain consisting of several other FiniteDomains Example: The possibilities of the rolls of three independent dice c8t|j}d|DS)Nc32K|]}t|ywr>)r$)r?itemss r.rBz/ProductFiniteDomain.__iter__..s555s)rdomains)r,proditers r.rQzProductFiniteDomain.__iter__sDLL)5H55r0ct|Sr>rr3s r.rCzProductFiniteDomain.elementss $r0N)r4r5r6r7rQr8rCr9r0r.rnrns  6  r0rnc>eZdZdZdZdZdZdZedZ dZ y) ConditionalFiniteDomainz A FiniteDomain that has been restricted by a condition Example: The possibilities of a die roll under the condition that the roll is even. cR|dur|St|}tj|||S)zH Create a new instance of ConditionalFiniteDomain class T)r%rrY)rZdomain conditionconds r.rYzConditionalFiniteDomain.__new__s.  My!}}S&$//r0c|jjt|}|dvr|S|jr|j|j k(St dt|z)z Test the value. If value is boolean, return it. If value is equality relational (two objects are equal), return it with left-hand side being equal to right-hand side. Otherwise, raise ValueError exception. )TFzUndecidable if %s)ryxreplacer2 is_Equalitylhsrhs ValueErrorstr)r,rerAs r._testzConditionalFiniteDomain._testsX nn%%d4j1 - J __77cgg% %,s3x788r0cD||jvxr|j|Sr>) fulldomainrrMs r.rOz$ConditionalFiniteDomain.__contains__s'=DJJu,==r0c.fdjDS)Nc3FK|]}j|s|ywr>)rrhs r.rBz3ConditionalFiniteDomain.__iter__..sEDJJt4DEs!!)rr3s`r.rQz ConditionalFiniteDomain.__iter__sEEEr0c t|jtrNt|jjDcgc](}t |jj |ff|vr|*c}Stdcc}w)Nz7Not implemented on multi-dimensional conditional domain)rXrrVrr\rcr[NotImplementedErrorrds r.r\zConditionalFiniteDomain.setsz doo'9 :0C0CX"+doo.D.Dd-K,M"NRV"V $XY Y&IK KXs-A4c,tj|Sr>)r;rSr3s r.rSz"ConditionalFiniteDomain.as_booleans&&t,,r0N) r4r5r6r7rYrrOrQr8r\rSr9r0r.rvrvs70 9>FKK-r0rvceZdZdZedZeedZdZ edZ edZ edZ edZ ed Zed Zd Zd Zy )SingleFiniteDistributionc`ttt|}tj|g|Sr>)listmaprrrY)rZrHs r.rYz SingleFiniteDistribution.__new__s'C&'}}S(4((r0cyr>r9rGs r.checkzSingleFiniteDistribution.checks r0c|jr t|S|jDcic]}||j|c}Scc}wr>) is_symbolicr'r\pmf)r,ks r.r2zSingleFiniteDistribution.dicts;   4= (,11488A;111sActr>rr,rHs r.rzSingleFiniteDistribution.pmfs !##r0ctr>rr3s r.r\zSingleFiniteDistribution.sets !##r0c.|jjSr>)r2valuesr3s r.z!SingleFiniteDistribution.s499#3#3r0c.|jjSr>)r2rqr3s r.rz!SingleFiniteDistribution.s$))//r0cy)NFr9r3s r.rz!SingleFiniteDistribution.sr0c.|jjSr>)r2rQr3s r.rz!SingleFiniteDistribution.sTYY%7%7r0c.|jjSr>)r2 __getitem__r3s r.rz!SingleFiniteDistribution.s (=(=r0c |j|Sr>)rrs r.r/z!SingleFiniteDistribution.__call__stxxr0c||jvSr>rjrMs r.rOz%SingleFiniteDistribution.__contains__s  r0N)r4r5r6rY staticmethodrr8rr2rr\rrqrrQrr/rOr9r0r.rrs)   2 2 $$$3 4F 1 2E-.K78H=>K!r0rceZdZdZdZdZdZdZdZe dZ e ddZ e d Z e d Z dd Zd ZdZdZddZy ) FinitePSpacezd A Finite Probability Space Represents the probabilities of a finite number of events. Tc|jDcic]\}}t|t|}}}t|}tj|||}||_|Scc}}wr>)rqrrr rY_density)rZrxdensitykeyrApublic_densityobjs r.rYzFinitePSpace.__new__sb ' 1C3<-11gnnS&.9  1sA!c"t|}|j}tt|j dt r |j |tjS|j t|ddtjS)Nrra) rrrXrkeysrgetr Zerorl)r,rers r.prob_ofzFinitePSpace.prob_ofset}-- d7<<>*1-y 9;;tQVV, ,{{5;q>!,aff55r0cntfdt|DsJtj|S)Nc3NK|]}|jjvywr>)r[rD)r?rr,s r.rBz%FinitePSpace.where..sO188t||+Ori)allr#rvrxr,rys` r.wherezFinitePSpace.wheres-O^I5NOOOO&t{{I>>r0c t||j}t}|jD]S}|j t |}|j |}|j|tj|z||<U|Sr>) r%rr*rxr|r2rrr r)r,exprdrerAprobs r.compute_densityzFinitePSpace.compute_densitysptT[[) OKK /D--T +C<<%DUU3'$.AcF /r0c|j|}tj}g}t|D]}||}||z }|j ||f!t |Sr>)rr rsortedappendr2)r,rrcum_probcdfrrs r. compute_cdfzFinitePSpace.compute_cdfsb   &66!9 (CS6D  H JJX ' ( Cyr0c|j|}t|j}t|d}|r|Dcgc]\}}|t |f}}}|Scc}}w)Nc |dSr`r9) val_cumprobs r.rz)FinitePSpace.sorted_cdf..s [^r0)r)rrrqrfloat)r,r python_floatrrq sorted_itemsvrs r. sorted_cdfzFinitePSpace.sorted_cdfsgt$SYY[!e)KL '35#8h05L55sAc|j|}tddttfd|j DS)NtTrealc3TK|]\}}tt|zz|z!ywr>)rr r?rrrs r.rBz?FinitePSpace.compute_characteristic_function..*s%?caS1QZ\?s%(rr rsumrqr,rrrs @r.compute_characteristic_functionz,FinitePSpace.compute_characteristic_function%s=   & #D !a?QWWY??@@r0c|j|}tddttfd|j DS)NrTrc3FK|]\}}t|z|zywr>rrs r.rBzBFinitePSpace.compute_moment_generating_function..1s!=CAaS1XaZ=s!rrs @r."compute_moment_generating_functionz/FinitePSpace.compute_moment_generating_function,s=   & #D !a=1779==>>r0Nc j|xs |j}t||}|jDcgc]}|j|}}t |t t frZ|jDcgc]}t|dd}}|jDcgc]}|jt|}}nJ|jDcgc]}|jt|}}|jDcgc]}d}}tdt|||DScc}wcc}wcc}wcc}wcc}w)NrraTc3fK|])\}}}t||z|ftjdf+yw)TN)rr r)r?rreblvs r.rBz3FinitePSpace.compute_expectation..=s8H#D$dTk3/!&&$@Hs/1) rr%rxrrXrrrlr|r2rzip)r,rrvskwargsreprobs parse_domainboolss r.compute_expectationz FinitePSpace.compute_expectation3s T[[tS!04 <d#<< dUJ/ 0:>++F$E$KN1-FLF;?;;G4T]]4:.GEGBF++N$DMM$t*5NLN&*kk2dT2E2H'*5,'FHH H=FGN2sD)D!!D&!D+4 D0c|j|}tdd}t|dk|dkDzff}|jD]\}}||||kffz}t |t |S)NpTrrra)rr r rqrr)r,rrrr\rvalues r.compute_quantilezFinitePSpace.compute_quantile@sxt$ #D !a!eA&')))+ .JC#qEz*--C .aC))r0cLtdtD}t}|jjs$t dt |jz zttr|jjjjsRtjtr jn jtfdjDSttfdj!DS)Nc34K|]}|jywr>)r[)r?rss r.rBz+FinitePSpace.probability..Is Or Osz)Cannot compare foreign random symbols, %sc 3K|]P}tj|jt|ddftj dfRyw)rraTN)rrsubsrr r)r?reryrvr,s r.rBz+FinitePSpace.probability..QsT@+/! T*INN2tDz!}Q?O,PQ~'@sAAc3@K|]}j|ywr>)rrhs r.rBz+FinitePSpace.probability..TsP$4<<-Ps)rcr#r%issubsetrDrrrXr free_symbolsrxrrr~rrr)r,ry cond_symbolsrzrs`` @r. probabilityzFinitePSpace.probabilityHs O^I5N OO y!$$T\\2H"<$,,#>?AB B i ,""++DKK,D,DE",Y]]F"CB@37;;@@ @sP$**Y:OPPQQr0c|j|}|j|}|jjDcic]\}}|j |r|||z }}}t ||Scc}}wr>)rrrrqrrr,ryrxrrrArs r.conditional_spacezFinitePSpace.conditional_spaceVswI& * $ 3 3 5LCc9Jd ?LLFG,,Ls!A0cT|j|jj|||iS)zo Internal sample method Returns dictionary mapping RandomSymbol to realization value. )r distributionsample)r,sizelibraryseeds r.rzFinitePSpace.sample]s(  D--44T7DIJJr0)Fr>)r9scipyN)r4r5r6r7rTrYrrrrrrrrrrrrrr9r0r.rrs I6?       A A  ? ? H* R-Kr0rceZdZdZedZedZedZdZee dZ e dZ e dZ d Z d Zd Zdd ZdZdZy )SingleFinitePSpacea A single finite probability space Represents the probabilities of a set of random events that can be attributed to a single variable/symbol. This class is implemented by many of the standard FiniteRV types such as Die, Bernoulli, Coin, etc.... cVt|j|jjSr>)rVr[rr\r3s r.rxzSingleFinitePSpace.domainps!$++t/@/@/D/DEEr0c.|jjS)z Helper property to check if the distribution of the random variable is having symbolic dimension. )rrr3s r. _is_symboliczSingleFinitePSpace._is_symbolicts  ,,,r0c |jdSr`rGr3s r.rzSingleFinitePSpace.distribution}rIr0c8|jj|Sr>)rrr,rs r.rzSingleFinitePSpace.pmfs  $$T**r0c|jjjDcic]\}}t|j|f|c}}Scc}}wr>)rr2rqrr[)r,rArs r.rzSingleFinitePSpace._densitysT&*%6%6%;%;%A%A%CE!T4;;,-t3E EEs"Ac |jr|j|}tdd}td}t|t ||t t |z|zz||jdj|jdjfSt||j}t|j|jj|SNrTrkira)rrr rrrr rHlowhighr%rrrxrrr,rrrrs r.rz2SingleFinitePSpace.compute_characteristic_functions   $$T*Ac%AtB!S2s1R46{!2R19I9I499UVD%%))4+<+<+A+ABDDHDF K~tS!O|DKK):):;OOPTVYd]cddr0c|jr tdt|}t|j|j j |S)NzhCurrently, probability queries are not supported for random variables with symbolic sized distributions.)rrr%rrxrrrs r.rzSingleFinitePSpace.probabilitysL   %'PQ QI& DKK):):;GG RRr0c|jr||j|}|j|}|jj Dcic]\}}|j |r|||z }}}t ||Scc}}w)z This method is used for transferring the computation to probability method because conditional space of random variables with symbolic dimensions is currently not possible. )rrrrrqrrrs r.rz$SingleFinitePSpace.conditional_spaces    I& * $ 3 3 5LCc9Jd ?LLFG,,Ls!A>r>)r4r5r6r7r8rxrrrrrrrrrrrrrr9r0r.rrfsFF--+ E E b b e eS RN eS -r0rc`eZdZdZedZeedZeedZdZ dZ y)ProductFinitePSpacezG A collection of several independent finite probability spaces c`t|jDcgc]}|jc}Scc}wr>)rnspacesrx)r,spaces r.rxzProductFinitePSpace.domains#"t{{$KeU\\$KLL$Ks+c Pt|jDcgc]%}t|jj 'c}}i}|D]O}t t |\}}t|}t|}|j|tj|z||<Qt|Scc}wr>) rriterrrqrrr$rrr rr) r,rrsrrqelemsrrers r.rzProductFinitePSpace._densitys&"%.."6"6"89&'  1EU ,LE55>D;DeeD!&&)D0AdG  1 Aw&s*B#c,t|jSr>)rrr3s r.rzProductFinitePSpace.densitysDMM""r0c.tj||Sr>)rrrs r.rzProductFinitePSpace.probabilitys''i88r0c.tj||Sr>)rrrs r.rz#ProductFinitePSpace.compute_densitys++D$77r0N) r4r5r6r7r8rxrrrrrr9r0r.rrs_MM     # #98r0rN)@r7 itertoolsrsympy.concrete.summationsrsympy.core.basicrsympy.core.cachersympy.core.functionrsympy.core.mulrsympy.core.numbersr r sympy.core.relationalr sympy.core.singletonr sympy.core.symbolr rsympy.core.sympifyr&sympy.functions.elementary.exponentialr$sympy.functions.elementary.piecewisersympy.logic.boolalgrrsympy.sets.setsrsympy.core.containersrsympy.core.logicrrrrsympy.stats.rvrrrr r!r"r#r$r%r&r'r(r2r*r;rVrnrvrrrrr9r0r.r1s)"$&'$"-&6:)(&",'%UUUU D2Q<Q<"6"6J  -  .-/1D.-b!!|^!!RyK6yKxy-|y-x82L8r0