K i(ddlZddlmZddlmZddlmZddlm Z ddl m Z ddl m Z ddlmZdd lmZdd lmZdd lmZmZdd lmZdd lmZmZmZGddeeZGddeeZGddeeZy)N)Add)Expr)expand)Mul)S) ShapeError) MatrixExpr)MatMul) ZeroMatrix) RandomSymbol is_random)_sympify)Variance Covariance Expectationc.eZdZdZddZedZdZy)ExpectationMatrixa0 Expectation of a random matrix expression. Examples ======== >>> from sympy.stats import ExpectationMatrix, Normal >>> from sympy.stats.rv import RandomMatrixSymbol >>> from sympy import symbols, MatrixSymbol, Matrix >>> k = symbols("k") >>> A, B = MatrixSymbol("A", k, k), MatrixSymbol("B", k, k) >>> X, Y = RandomMatrixSymbol("X", k, 1), RandomMatrixSymbol("Y", k, 1) >>> ExpectationMatrix(X) ExpectationMatrix(X) >>> ExpectationMatrix(A*X).shape (k, 1) To expand the expectation in its expression, use ``expand()``: >>> ExpectationMatrix(A*X + B*Y).expand() A*ExpectationMatrix(X) + B*ExpectationMatrix(Y) >>> ExpectationMatrix((X + Y)*(X - Y).T).expand() ExpectationMatrix(X*X.T) - ExpectationMatrix(X*Y.T) + ExpectationMatrix(Y*X.T) - ExpectationMatrix(Y*Y.T) To evaluate the ``ExpectationMatrix``, use ``doit()``: >>> N11, N12 = Normal('N11', 11, 1), Normal('N12', 12, 1) >>> N21, N22 = Normal('N21', 21, 1), Normal('N22', 22, 1) >>> M11, M12 = Normal('M11', 1, 1), Normal('M12', 2, 1) >>> M21, M22 = Normal('M21', 3, 1), Normal('M22', 4, 1) >>> x1 = Matrix([[N11, N12], [N21, N22]]) >>> x2 = Matrix([[M11, M12], [M21, M22]]) >>> ExpectationMatrix(x1 + x2).doit() Matrix([ [12, 14], [24, 26]]) Nct|}|$t|s|Stj||}n"t|}tj|||}|j|_||_|SN)rr r__new__shape_shape _condition)clsexpr conditionobjs s/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/stats/symbolic_multivariate_probability.pyrzExpectationMatrix.__new__8s`~  T? ,,sD)C +I,,sD)4CZZ " c|jSrrselfs rrzExpectationMatrix.shapeF {{rc F|jd}|jt|s|St|tr(t j fd|jDSt |}t|tr(t j fd|jDSt|ttfrg}g}g}|jD]u}t|r9|r|j|n|j|g}|j|G|jr|j|e|j|wt|dk(r|Stj |ttj |ztj |zS|S)Nrc3TK|]}t|j!ywrNrr.0ars r z+ExpectationMatrix.expand..Qs) (!,A C J J L (%(c3TK|]}t|j!ywr'r)r*s rr-z+ExpectationMatrix.expand..Vs) /!,A C J J L /r.r()argsrr isinstancerfromiter_expandrr extendappend is_Matrixlenr) r#hintsr expand_exprrvnonrvpostnonr,rs @rrzExpectationMatrix.expandJsayy|OO K dC << (!YY (( (dm k3 '<< /(-- // /sFm ,BEGYY $Q< '* W- GIIaL[[NN1%LLO $5zQ <<&{3<<3C'())),g)>? ? rr__name__ __module__ __qualname____doc__rpropertyrrrrrrs&%L (rrc.eZdZdZddZedZdZy)VarianceMatrixak Variance of a random matrix probability expression. Also known as Covariance matrix, auto-covariance matrix, dispersion matrix, or variance-covariance matrix. Examples ======== >>> from sympy.stats import VarianceMatrix >>> from sympy.stats.rv import RandomMatrixSymbol >>> from sympy import symbols, MatrixSymbol >>> k = symbols("k") >>> A, B = MatrixSymbol("A", k, k), MatrixSymbol("B", k, k) >>> X, Y = RandomMatrixSymbol("X", k, 1), RandomMatrixSymbol("Y", k, 1) >>> VarianceMatrix(X) VarianceMatrix(X) >>> VarianceMatrix(X).shape (k, k) To expand the variance in its expression, use ``expand()``: >>> VarianceMatrix(A*X).expand() A*VarianceMatrix(X)*A.T >>> VarianceMatrix(A*X + B*Y).expand() 2*A*CrossCovarianceMatrix(X, Y)*B.T + A*VarianceMatrix(X)*A.T + B*VarianceMatrix(Y)*B.T Ncft|}d|jvr td|jddk(r|jd|jdfn|jd|jdf}|rtj|||}ntj||}||_||_|S)NExpression is not a vectorrrrrrrrr)rargrrrs rrzVarianceMatrix.__new__ssm CII 9: :03 ! 0A1syy|, RS VYV_V_`aVbGc ,,sC3C,,sC(C " rc|jSrr!r"s rrzVarianceMatrix.shaper$rc  |jd}|j t|st|jSt |t r|St |trqg}|jD]}t|s|j|!t fd|D} fd}tt|tj|d}||zSt |ttfrg}g}|jD]0}t|r|j| |j|2t|dk(rt|jSt|dk(r|St|dkDr|Stj|t!tj| ztj|j#zS|S)Nrc3RK|]}t|j ywr)rr)r+xvrs rr-z(VarianceMatrix.expand..s!L2hr95<<>Ls$'c<dt|dijzS)Nr)rr)xrs rz'VarianceMatrix.expand..sQz1'J 'J'Q'Q'S%SrrPrG)r0rr r rr1r rr5map itertools combinationsrr r7r2r transpose) r#r8rJr:r, variances map_to_covar covariancesr;rs @rrzVarianceMatrix.expandsiilOO ~tzz* * c< (K S !BXX !Q<IIaL !LLMISLs<1G1GA1NOPK{* * c6] +EBXX $Q<IIaLLLO  $ 2w!|!4::..5zQ 2w{ <<&x R0@%(''(+ U(;'F'F'HI I rrr=rCrrrErEts%4"&rrEcNeZdZdZddZedZdZedZ edZ y) CrossCovarianceMatrixa Covariance of a random matrix probability expression. Examples ======== >>> from sympy.stats import CrossCovarianceMatrix >>> from sympy.stats.rv import RandomMatrixSymbol >>> from sympy import symbols, MatrixSymbol >>> k = symbols("k") >>> A, B = MatrixSymbol("A", k, k), MatrixSymbol("B", k, k) >>> C, D = MatrixSymbol("C", k, k), MatrixSymbol("D", k, k) >>> X, Y = RandomMatrixSymbol("X", k, 1), RandomMatrixSymbol("Y", k, 1) >>> Z, W = RandomMatrixSymbol("Z", k, 1), RandomMatrixSymbol("W", k, 1) >>> CrossCovarianceMatrix(X, Y) CrossCovarianceMatrix(X, Y) >>> CrossCovarianceMatrix(X, Y).shape (k, k) To expand the covariance in its expression, use ``expand()``: >>> CrossCovarianceMatrix(X + Y, Z).expand() CrossCovarianceMatrix(X, Z) + CrossCovarianceMatrix(Y, Z) >>> CrossCovarianceMatrix(A*X, Y).expand() A*CrossCovarianceMatrix(X, Y) >>> CrossCovarianceMatrix(A*X, B.T*Y).expand() A*CrossCovarianceMatrix(X, Y)*B >>> CrossCovarianceMatrix(A*X + B*Y, C.T*Z + D.T*W).expand() A*CrossCovarianceMatrix(X, W)*D + A*CrossCovarianceMatrix(X, Z)*C + B*CrossCovarianceMatrix(Y, W)*D + B*CrossCovarianceMatrix(Y, Z)*C Nct|}t|}d|jvs-d|jvs|jd|jdk7r td|jddk(r0|jddk(r|jd|jdfnd}|rtj||||}ntj|||}||_||_|S)NrGrHr)rGrGrI)rarg1arg2rrrs rrzCrossCovarianceMatrix.__new__s~~ TZZ Qdjj%8djjmtzzZ[}>\9: :26**Q-12DTUZ[I[A 1 .  ,,sD$ :C,,sD$/C " rc|jSrr!r"s rrzCrossCovarianceMatrix.shaper$rc x|jd}|jd}|j}||k(rt||jSt |r t |st |j St|trt|tr t|||S|j|j}|j|j}|D cgc]1\}}|D]'\} } |t|| |z| jz)3} } }}} tj| Scc} } }}w)NrrGr()r0rrErr r rr1r r[_expand_single_argumentrVrr2) r#r8r]r^rcoeff_rv_list1coeff_rv_list2r,r1br2addendss rrzCrossCovarianceMatrix.expandsyy|yy|OO 4<!$ 299; ;iotzz* * dL )j|.L(tY? ?55dkkmD55dkkmD#1PP2P5r?r@rArrBrr classmethodrarjrCrrr[r[sM>&%*##$77rr[) rTsympy.core.addrsympy.core.exprrsympy.core.functionrr3sympy.core.mulrsympy.core.singletonrsympy.matrices.exceptionsr"sympy.matrices.expressions.matexprr !sympy.matrices.expressions.matmulr "sympy.matrices.expressions.specialr sympy.stats.rvr r sympy.core.sympifyr sympy.stats.symbolic_probabilityrrrrrEr[rCrrr{sa 1"09492'NNa ZaFVXzVph7J h7r