
    \h(                         S SK r S SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJrJr  S SKJr  S SKJrJrJr   " S S\\5      r " S S\\5      r " S S\\5      rg)    N)Add)Expr)expand)Mul)S)
ShapeError)
MatrixExpr)MatMul)
ZeroMatrix)RandomSymbol	is_random)_sympify)Variance
CovarianceExpectationc                   8    \ rS rSrSrSS jr\S 5       rS rSr	g)	ExpectationMatrix   a  
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]])

Nc                     [        U5      nUc)  [        U5      (       d  U$ [        R                  " X5      nO"[        U5      n[        R                  " XU5      nUR                  Ul        X#l        U$ N)r   r   r   __new__shape_shape
_condition)clsexpr	conditionobjs       e/var/www/auris/envauris/lib/python3.13/site-packages/sympy/stats/symbolic_multivariate_probability.pyr   ExpectationMatrix.__new__8   s\    ~T??,,s)C +I,,s)4CZZ
"
    c                     U R                   $ r   r   selfs    r   r   ExpectationMatrix.shapeF       {{r!   c                   ^ U R                   S   nU R                  m[        U5      (       d  U$ [        U[        5      (       a*  [        R
                  " U4S jUR                    5       5      $ [        U5      n[        U[        5      (       a*  [        R
                  " U4S jUR                    5       5      $ [        U[        [        45      (       a  / n/ n/ nUR                    H  n[        U5      (       a?  U(       a  UR                  U5        OUR                  U5        / nUR                  U5        MR  UR                  (       a  UR                  U5        Mv  UR                  U5        M     [        U5      S:X  a  U $ [        R
                  " U5      [        [        R
                  " U5      TS9-  [        R
                  " U5      -  $ U $ )Nr   c              3   T   >#    U  H  n[        UTS 9R                  5       v   M     g7fr   Nr   r   .0ar   s     r   	<genexpr>+ExpectationMatrix.expand.<locals>.<genexpr>Q   s+       (& !,A C J J L L&   %(c              3   T   >#    U  H  n[        UTS 9R                  5       v   M     g7fr*   r,   r-   s     r   r0   r1   V   s+       /- !,A C J J L L-r2   r+   )argsr   r   
isinstancer   fromiter_expandr   r
   extendappend	is_Matrixlenr   )	r%   hintsr   expand_exprrvnonrvpostnonr/   r   s	           @r   r   ExpectationMatrix.expandJ   si   yy|OO	KdC  <<  (!YY ( ( ( dmk3''<<  /(-- / / / sFm,,BEGYYQ<<		'*W- GIIaL[[NN1%LLO  5zQ<<&{3<<3C'() )),g)>? ? r!    r   
__name__
__module____qualname____firstlineno____doc__r   propertyr   r   __static_attributes__rB   r!   r   r   r      s&    %L  (r!   r   c                   8    \ rS rSrSrSS jr\S 5       rS rSr	g)	VarianceMatrixt   a  
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
Nc                 r   [        U5      nSUR                  ;  a  [        S5      eUR                  S   S:X  a  UR                  S   UR                  S   4OUR                  S   UR                  S   4nU(       a  [        R                  " XU5      nO[        R                  " X5      nX4l        X$l        U$ )N   Expression is not a vectorr   r   r   r   r   r   r   r   )r   argr   r   r   s        r   r   VarianceMatrix.__new__   s    smCII9::03		!0A1syy|,		RSVYV_V_`aVbGc,,s3C,,s(C
"
r!   c                     U R                   $ r   r#   r$   s    r   r   VarianceMatrix.shape   r'   r!   c           	        ^	 U R                   S   nU R                  m	[        U5      (       d  [        U R                  6 $ [        U[        5      (       a  U $ [        U[        5      (       a{  / nUR                    H&  n[        U5      (       d  M  UR                  U5        M(     [        U	4S jU 5       6 nU	4S jn[        [        U[        R                  " US5      5      6 nXW-   $ [        U[        [        45      (       a  / n/ nUR                    H7  n[        U5      (       a  UR                  U5        M&  UR                  U5        M9     [        U5      S:X  a  [        U R                  6 $ [        U5      S:X  a  U $ [        U5      S:  a  U $ [        R                  " U5      [!        [        R                  " U5      T	5      -  [        R                  " U5      R#                  5       -  $ U $ )Nr   c              3   X   >#    U  H  n[        UT5      R                  5       v   M!     g 7fr   )r   r   )r.   xvr   s     r   r0   (VarianceMatrix.expand.<locals>.<genexpr>   s$     L2hr95<<>>s   '*c                 <   > S[        U ST06R                  5       -  $ )N   r   )r   r   )xr   s    r   <lambda>'VarianceMatrix.expand.<locals>.<lambda>   s    Qz1'J	'J'Q'Q'S%Sr!   r[   rO   )r4   r   r   r   r   r5   r   r   r9   map	itertoolscombinationsr   r
   r;   r6   r   	transpose)
r%   r<   rR   r>   r/   	variancesmap_to_covarcovariancesr?   r   s
            @r   r   VarianceMatrix.expand   s   iilOO	~~tzz**c<((KS!!BXXQ<<IIaL  LLMISLs<1G1GA1NOPK**c6]++EBXXQ<<IIaLLLO	 
 2w!|!4::..5zQ2w{<<&xR0@%(' '(+U(;'F'F'HI I r!   rB   r   rC   rB   r!   r   rL   rL   t   s%    4"  &r!   rL   c                   X    \ rS rSrSrS
S jr\S 5       rS r\	S 5       r
\	S 5       rS	rg)CrossCovarianceMatrix   ad  
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

Nc                    [        U5      n[        U5      nSUR                  ;  d0  SUR                  ;  d   UR                  S   UR                  S   :w  a  [        S5      eUR                  S   S:X  a1  UR                  S   S:X  a  UR                  S   UR                  S   4OSnU(       a  [        R                  " XX#5      nO[        R                  " XU5      nXEl        X5l        U$ )NrO   rP   r   )rO   rO   rQ   )r   arg1arg2r   r   r   s         r   r   CrossCovarianceMatrix.__new__   s    ~~TZZQdjj%8djjmtzzZ[}>\9::26**Q-12DTUZ[I[A

1. 	 ,,s$:C,,s$/C
"
r!   c                     U R                   $ r   r#   r$   s    r   r   CrossCovarianceMatrix.shape   r'   r!   c                    U R                   S   nU R                   S   nU R                  nX#:X  a  [        X$5      R                  5       $ [	        U5      (       a  [	        U5      (       d  [        U R                  6 $ [        U[        5      (       a!  [        U[        5      (       a  [        X#U5      $ U R                  UR                  5       5      nU R                  UR                  5       5      nU VVV	V
s/ s H/  u  pxU  H#  u  pU[        XUS9-  U	R                  5       -  PM%     M1     nn	nnn
[        R                  " U5      $ s  sn
n	nnf )Nr   rO   r+   )r4   r   rL   r   r   r   r   r5   r   rh   _expand_single_argumentrb   r   r6   )r%   r<   rk   rl   r   coeff_rv_list1coeff_rv_list2r/   r1br2addendss               r   r   CrossCovarianceMatrix.expand  s   yy|yy|OO	<!$299;;iootzz**dL))j|.L.L(Y??55dkkmD55dkkmD #1P"0wWa *2YGGU@N V"0 	 P||G$$Ps   66E
c                 ,   [        U[        5      (       a  [        R                  U4/$ [        U[        5      (       a  / nUR
                   Hs  n[        U[        [        45      (       a"  UR                  U R                  U5      5        M@  [        U5      (       d  MR  UR                  [        R                  U45        Mu     U$ [        U[        [        45      (       a  U R                  U5      /$ [        U5      (       a  [        R                  U4/$ g r   )r5   r   r   Oner   r4   r   r
   r9   _get_mul_nonrv_rv_tupler   )r   r   outvalr/   s       r   rq   -CrossCovarianceMatrix._expand_single_argument  s     dL))UUDM?"c""FYYa#v//MM#"="=a"@Aq\\MM155!*-	  MsFm,,//566t__UUDM?" r!   c                     / n/ nUR                    H7  n[        U5      (       a  UR                  U5        M&  UR                  U5        M9     [        R                  " U5      [        R                  " U5      4$ r   )r4   r   r9   r   r6   )r   mr>   r?   r/   s        r   r{   -CrossCovarianceMatrix._get_mul_nonrv_rv_tuple+  sX    A||		!Q	 
 U#S\\"%566r!   rB   r   )rD   rE   rF   rG   rH   r   rI   r   r   classmethodrq   r{   rJ   rB   r!   r   rh   rh      sM    >&  %* # #$ 7 7r!   rh   ) r`   sympy.core.addr   sympy.core.exprr   sympy.core.functionr   r7   sympy.core.mulr   sympy.core.singletonr   sympy.matrices.exceptionsr   "sympy.matrices.expressions.matexprr	   !sympy.matrices.expressions.matmulr
   "sympy.matrices.expressions.specialr   sympy.stats.rvr   r   sympy.core.sympifyr    sympy.stats.symbolic_probabilityr   r   r   r   rL   rh   rB   r!   r   <module>r      sa        1  " 0 9 4 9 2 ' N NaZ aFVXz Vph7J
 h7r!   