K io6`ddlmZddlmZddlmZddlmZddlm Z ddl m Z m Z ddl mZddlmZdd lmZdd lmZd d lmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(gd Z)ddddZ*ddZ+ddZ,e,Z-ddZ.ddZ/ddZ0ddddZ1ddZ2ddZ3ddZ4ddZ5d dZ6ddZ7eZ8eZ9e.Z:y)!) FiniteSet)Rational)Eq)Dummy)FallingFactorial)explog)sqrt)piecewise_fold)Integral)solveset) probability expectationdensitywheregivenpspacecdfPSpacecharacteristic_functionsample sample_iterrandom_symbols independent dependentsampling_densitymoment_generating_functionquantile is_randomsample_stochastic_process)PEHrrrrrrrrvariancestdskewnesskurtosis covariancerentropymedianrr correlationfactorial_momentmomentcmomentrrsmomentrr!NT)evaluatec ddlm}|r|||||jS|||||jtS)a[ Return the nth moment of a random expression about c. .. math:: moment(X, c, n) = E((X-c)^{n}) Default value of c is 0. Examples ======== >>> from sympy.stats import Die, moment, E >>> X = Die('X', 6) >>> moment(X, 1, 6) -5/2 >>> moment(X, 2) 91/6 >>> moment(X, 1) == E(X) True r)Moment) sympy.stats.symbolic_probabilityr3doitrewriter )Xnc conditionr1kwargsr3s ^/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/stats/rv_interface.pyr.r.s@*8aAy)..00 !Q9 % - -h 77c ~t|r%t|tk(rddlm}|||St |d|fi|S)a Variance of a random expression. .. math:: variance(X) = E((X-E(X))^{2}) Examples ======== >>> from sympy.stats import Die, Bernoulli, variance >>> from sympy import simplify, Symbol >>> X = Die('X', 6) >>> p = Symbol('p') >>> B = Bernoulli('B', p, 1, 0) >>> variance(2*X) 35/3 >>> simplify(variance(B)) p*(1 - p) r)Variance)r rrr4r?r/)r7r:r;r?s r<r%r%5s<.|q VX-=9%% 1a -f --r=c .tt||fi|S)aK Standard Deviation of a random expression .. math:: std(X) = \sqrt(E((X-E(X))^{2})) Examples ======== >>> from sympy.stats import Bernoulli, std >>> from sympy import Symbol, simplify >>> p = Symbol('p') >>> B = Bernoulli('B', p, 1, 0) >>> simplify(std(B)) sqrt(p*(1 - p)) )r r%r7r:r;s r<standard_deviationrCSs& I00 11r=c t||fi|}|jdtdt|tr"t fd|j DStt|| S)am Calculates entropy of a probability distribution. Parameters ========== expression : the random expression whose entropy is to be calculated condition : optional, to specify conditions on random expression b: base of the logarithm, optional By default, it is taken as Euler's number Returns ======= result : Entropy of the expression, a constant Examples ======== >>> from sympy.stats import Normal, Die, entropy >>> X = Normal('X', 0, 1) >>> entropy(X) log(2)/2 + 1/2 + log(pi)/2 >>> D = Die('D', 4) >>> entropy(D) log(4) References ========== .. [1] https://en.wikipedia.org/wiki/Entropy_%28information_theory%29 .. [2] https://www.crmarsh.com/static/pdf/Charles_Marsh_Continuous_Entropy.pdf .. [3] https://kconrad.math.uconn.edu/blurbs/analysis/entropypost.pdf brc3>K|]}| t|zywN)r ).0probbases r< zentropy..sFuSt_,Fs) rgetr isinstancedictsumvaluesrr )exprr:r;pdfrJs @r<r*r*iseH $ ,V ,C ::c3q6 "D#tFFF F CIt,, --r=c t|rt|tk(s!t|r&t|tk(rddlm}||||St |t ||fi|z |t ||fi|z z|fi|S)aE Covariance of two random expressions. Explanation =========== The expectation that the two variables will rise and fall together .. math:: covariance(X,Y) = E((X-E(X)) (Y-E(Y))) Examples ======== >>> from sympy.stats import Exponential, covariance >>> from sympy import Symbol >>> rate = Symbol('lambda', positive=True, real=True) >>> X = Exponential('X', rate) >>> Y = Exponential('Y', rate) >>> covariance(X, X) lambda**(-2) >>> covariance(X, Y) 0 >>> covariance(X, Y + rate*X) 1/lambda r) Covariance)r rrr4rTr)r7Yr:r;rTs r<r)r)s: ! fh.IaLVAYRXRZEZ?!Q **  [I 0 0 0 [I 0 0 0 2  r=c Vt|||fi|t||fi|t||fi|zz S)a Correlation of two random expressions, also known as correlation coefficient or Pearson's correlation. Explanation =========== The normalized expectation that the two variables will rise and fall together .. math:: correlation(X,Y) = E((X-E(X))(Y-E(Y)) / (\sigma_x \sigma_y)) Examples ======== >>> from sympy.stats import Exponential, correlation >>> from sympy import Symbol >>> rate = Symbol('lambda', positive=True, real=True) >>> X = Exponential('X', rate) >>> Y = Exponential('Y', rate) >>> correlation(X, X) 1 >>> correlation(X, Y) 0 >>> correlation(X, Y + rate*X) 1/sqrt(1 + lambda**(-2)) )r)r&)r7rUr:r;s r<r,r,sA> aI 0 0#a2Mf2M 1i"6"3# $$r=c |ddlm}|r||||jS||||jtS)a\ Return the nth central moment of a random expression about its mean. .. math:: cmoment(X, n) = E((X - E(X))^{n}) Examples ======== >>> from sympy.stats import Die, cmoment, variance >>> X = Die('X', 6) >>> cmoment(X, 3) 0 >>> cmoment(X, 2) 35/12 >>> cmoment(X, 2) == variance(X) True r) CentralMoment)r4rXr5r6r )r7r8r:r1r;rXs r<r/r/s<&?Q9-2244 Ay ) 1 1( ;;r=c Jt||fi|}d|z |zt|||fi|zS)a Return the nth Standardized moment of a random expression. .. math:: smoment(X, n) = E(((X - \mu)/\sigma_X)^{n}) Examples ======== >>> from sympy.stats import skewness, Exponential, smoment >>> from sympy import Symbol >>> rate = Symbol('lambda', positive=True, real=True) >>> Y = Exponential('Y', rate) >>> smoment(Y, 4) 9 >>> smoment(Y, 4) == smoment(3*Y, 4) True >>> smoment(Y, 3) == skewness(Y) True r)r&r/)r7r8r:r;sigmas r<r0r0s6* 9 ' 'E eGa<1i:6: ::r=c t|dfd|i|S)aA Measure of the asymmetry of the probability distribution. Explanation =========== Positive skew indicates that most of the values lie to the right of the mean. .. math:: skewness(X) = E(((X - E(X))/\sigma_X)^{3}) Parameters ========== condition : Expr containing RandomSymbols A conditional expression. skewness(X, X>0) is skewness of X given X > 0 Examples ======== >>> from sympy.stats import skewness, Exponential, Normal >>> from sympy import Symbol >>> X = Normal('X', 0, 1) >>> skewness(X) 0 >>> skewness(X, X > 0) # find skewness given X > 0 (-sqrt(2)/sqrt(pi) + 4*sqrt(2)/pi**(3/2))/(1 - 2/pi)**(3/2) >>> rate = Symbol('lambda', positive=True, real=True) >>> Y = Exponential('Y', rate) >>> skewness(Y) 2 r:r0rBs r<r'r'sF 1a 79 7 77r=c t|dfd|i|S)a Characterizes the tails/outliers of a probability distribution. Explanation =========== Kurtosis of any univariate normal distribution is 3. Kurtosis less than 3 means that the distribution produces fewer and less extreme outliers than the normal distribution. .. math:: kurtosis(X) = E(((X - E(X))/\sigma_X)^{4}) Parameters ========== condition : Expr containing RandomSymbols A conditional expression. kurtosis(X, X>0) is kurtosis of X given X > 0 Examples ======== >>> from sympy.stats import kurtosis, Exponential, Normal >>> from sympy import Symbol >>> X = Normal('X', 0, 1) >>> kurtosis(X) 3 >>> kurtosis(X, X > 0) # find kurtosis given X > 0 (-4/pi - 12/pi**2 + 3)/(1 - 2/pi)**2 >>> rate = Symbol('lamda', positive=True, real=True) >>> Y = Exponential('Y', rate) >>> kurtosis(Y) 9 References ========== .. [1] https://en.wikipedia.org/wiki/Kurtosis .. [2] https://mathworld.wolfram.com/Kurtosis.html r:r]rBs r<r(r(3sT 1a 79 7 77r=c 2tt||fd|i|S)a The factorial moment is a mathematical quantity defined as the expectation or average of the falling factorial of a random variable. .. math:: factorial-moment(X, n) = E(X(X - 1)(X - 2)...(X - n + 1)) Parameters ========== n: A natural number, n-th factorial moment. condition : Expr containing RandomSymbols A conditional expression. Examples ======== >>> from sympy.stats import factorial_moment, Poisson, Binomial >>> from sympy import Symbol, S >>> lamda = Symbol('lamda') >>> X = Poisson('X', lamda) >>> factorial_moment(X, 2) lamda**2 >>> Y = Binomial('Y', 2, S.Half) >>> factorial_moment(Y, 2) 1/2 >>> factorial_moment(Y, 2, Y > 1) # find factorial moment for Y > 1 2 References ========== .. [1] https://en.wikipedia.org/wiki/Factorial_moment .. [2] https://mathworld.wolfram.com/FactorialMoment.html r:)rr)r7r8r:r;s r<r-r-`s"J '1- M Mf MMr=c t|s|Sddlm}ddlm}ddlm}tt||rt|j|}g}|jD]^\}} | tddk\sd| z t|jt||ztddk\sN|j|`t|Stt|||frct|j|}t!d} t#t%|| tddz | t|j&}|St)dt+t|z) aM Calculates the median of the probability distribution. Explanation =========== Mathematically, median of Probability distribution is defined as all those values of `m` for which the following condition is satisfied .. math:: P(X\leq m) \geq \frac{1}{2} \text{ and} \text{ } P(X\geq m)\geq \frac{1}{2} Parameters ========== X: The random expression whose median is to be calculated. Returns ======= The FiniteSet or an Interval which contains the median of the random expression. Examples ======== >>> from sympy.stats import Normal, Die, median >>> N = Normal('N', 3, 1) >>> median(N) {3} >>> D = Die('D') >>> median(D) {3, 4} References ========== .. [1] https://en.wikipedia.org/wiki/Median#Probability_distributions r)ContinuousPSpace)DiscretePSpace) FinitePSpacerr@xz$The median of %s is not implemented.)r sympy.stats.crvrbsympy.stats.drvrcsympy.stats.frvrdrMr compute_cdfitemsrrrappendrrr r setNotImplementedErrorstr) r7r1r;rbrcrdrresultkeyvalueres r<r+r+s/R Q<0.,&)\*Qi##A&##))+ #JCx1~%1u9 1I ! !"Q* -+.19!Q+@ c" #&!!&).?@Qi##A& #J.Q(1a.)@A1fQimmT DSPQ^S TTr=c t|t||fi|z |t||fi|z z|t||fi|z z|fi|}t||fi|t||fi|zt||fi|z}||z S)a% Calculates the co-skewness of three random variables. Explanation =========== Mathematically Coskewness is defined as .. math:: coskewness(X,Y,Z)=\frac{E[(X-E[X]) * (Y-E[Y]) * (Z-E[Z])]} {\sigma_{X}\sigma_{Y}\sigma_{Z}} Parameters ========== X : RandomSymbol Random Variable used to calculate coskewness Y : RandomSymbol Random Variable used to calculate coskewness Z : RandomSymbol Random Variable used to calculate coskewness condition : Expr containing RandomSymbols A conditional expression Examples ======== >>> from sympy.stats import coskewness, Exponential, skewness >>> from sympy import symbols >>> p = symbols('p', positive=True) >>> X = Exponential('X', p) >>> Y = Exponential('Y', 2*p) >>> coskewness(X, Y, Y) 0 >>> coskewness(X, Y + X, Y + 2*X) 16*sqrt(85)/85 >>> coskewness(X + 2*Y, Y + X, Y + 2*X, X > 3) 9*sqrt(170)/85 >>> coskewness(Y, Y, Y) == skewness(Y) True >>> coskewness(X, Y + p*X, Y + 2*p*X) 4/(sqrt(1 + 1/(4*p**2))*sqrt(4 + 1/(4*p**2))) Returns ======= coskewness : The coskewness of the three random variables References ========== .. [1] https://en.wikipedia.org/wiki/Coskewness )rr&)r7rUZr:r;numdens r< coskewnessrvsl q;q)>v>> Ay3F3 35 Ay3F3 356? KCI KC a %f %Ay(CF(C C q) &v & 'C s7Nr=)rNrG)T); sympy.setsrsympy.core.numbersrsympy.core.relationalrsympy.core.symbolr(sympy.functions.combinatorial.factorialsr&sympy.functions.elementary.exponentialrr (sympy.functions.elementary.miscellaneousr $sympy.functions.elementary.piecewiser sympy.integrals.integralsr sympy.solvers.solvesetr rvrrrrrrrrrrrrrrrrrr r!__all__r.r%rCr&r*r)r,r/r0r'r(r-r+rvr"r#r$r=r<rs '$#E=9?.+,,,,,,  <8$86.<2((.T$N $F