Ë
    7^(hÒ(  ã                   óð   — d dl Z d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZ d dlmZ d dlmZmZmZ  G d„ dee«      Z G d„ dee«      Z G d„ dee«      Zy)é    N)ÚAdd)ÚExpr)Úexpand)ÚMul)ÚS)Ú
ShapeError)Ú
MatrixExpr)ÚMatMul)Ú
ZeroMatrix)ÚRandomSymbolÚ	is_random)Ú_sympify)ÚVarianceÚ
CovarianceÚExpectationc                   ó.   — e Zd ZdZdd„Zed„ «       Zd„ Zy)Ú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]])

    Nc                 óÜ   — t        |«      }|€$t        |«      s|S t        j                  | |«      }n"t        |«      }t        j                  | ||«      }|j                  |_        ||_        |S ©N)r   r   r   Ú__new__ÚshapeÚ_shapeÚ
_condition)ÚclsÚexprÚ	conditionÚobjs       úk/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/stats/symbolic_multivariate_probability.pyr   zExpectationMatrix.__new__8   s`   € Ü˜‹~ˆØÐÜ˜T”?Ø�Ü—,‘,˜s DÓ)‰Cä  Ó+ˆIÜ—,‘,˜s D¨)Ó4ˆCà—Z‘ZˆŒ
Ø"ˆŒØˆ
ó    c                 ó   — | j                   S r   ©r   ©Úselfs    r   r   zExpectationMatrix.shapeF   ó   € à�{‰{Ðr   c                 óF  ‡— | j                   d   }| j                  Št        |«      s|S t        |t        «      r(t	        j
                  ˆfd„|j                   D «       «      S t        |«      }t        |t        «      r(t	        j
                  ˆfd„|j                   D «       «      S t        |t        t        f«      ræg }g }g }|j                   D ]u  }t        |«      r9|r|j                  |«       n|j                  |«       g }|j                  |«       ŒG|j                  r|j                  |«       Œe|j                  |«       Œw t        |«      dk(  r| S t        j
                  |«      t        t        j
                  |«      ‰¬«      z  t        j
                  |«      z  S | S )Nr   c              3   óT   •K  — | ]  }t        |‰¬ «      j                  «       –— Œ! y­w©©r   N©r   r   ©Ú.0Úar   s     €r   ú	<genexpr>z+ExpectationMatrix.expand.<locals>.<genexpr>Q   s)   øè ø€ ò  (Øô !,¨A¸Ô C× JÑ J× Lñ  (ùó   ƒ%(c              3   óT   •K  — | ]  }t        |‰¬ «      j                  «       –— Œ! y­wr'   r)   r*   s     €r   r-   z+ExpectationMatrix.expand.<locals>.<genexpr>V   s)   øè ø€ ò  /Øô !,¨A¸Ô C× JÑ J× Lñ  /ùr.   r(   )Úargsr   r   Ú
isinstancer   ÚfromiterÚ_expandr   r
   ÚextendÚappendÚ	is_MatrixÚlenr   )	r#   Úhintsr   Úexpand_exprÚrvÚnonrvÚpostnonr,   r   s	           @r   r   zExpectationMatrix.expandJ   sa  ø€ Ø�y‰y˜‰|ˆØ—O‘Oˆ	Ü˜ŒØˆKä�dœCÔ Ü—<‘<ó  (Ø!ŸY™Yô (ó (ð (ô ˜d“mˆÜ�k¤3Ô'Ü—<‘<ó  /Ø(×-Ñ-ô /ó /ð /ô ˜œs¤F˜mÔ,ØˆBØˆEØˆGà—Y‘Yò $�Ü˜Q”<ÙØŸ	™	 'Õ*àŸ™ WÔ-Ø �GØ—I‘I˜a•LØ—[’[Ø—N‘N 1Õ%à—L‘L •Oð$ô �5‹z˜QŠØ�Ü—<‘< Ó&¤{´3·<±<ÀÓ3CØ'ô()ñ )Ü),¯©°gÓ)>ñ?ð ?ð ˆr   r   ©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   r   © r   r   r   r      s&   „ ñ%óLð ñó ðó(r   r   c                   ó.   — e Zd ZdZdd„Zed„ «       Zd„ Zy)Ú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
    Nc                 óf  — t        |«      }d|j                  vrt        d«      ‚|j                  d   dk(  r|j                  d   |j                  d   fn|j                  d   |j                  d   f}|rt        j                  | ||«      }nt        j                  | |«      }||_        ||_        |S )Né   úExpression is not a vectorr   ©r   r   r   r   r   r   r   )r   Úargr   r   r   s        r   r   zVarianceMatrix.__new__�   s¡   € Ü�s‹mˆà�C—I‘IÑÜÐ9Ó:Ð:à03·	±	¸!±ÀÒ0A�—‘˜1‘˜sŸy™y¨™|Ñ,ÈÏ	É	ÐRSÉÐVY×V_ÑV_Ð`aÑVbÐGcˆáÜ—,‘,˜s C¨Ó3‰Cä—,‘,˜s CÓ(ˆCàˆŒ
Ø"ˆŒØˆ
r   c                 ó   — | j                   S r   r!   r"   s    r   r   zVarianceMatrix.shape    r$   r   c           	      ó‚  ‡	— | j                   d   }| j                  Š	t        |«      st        | j                  Ž S t        |t        «      r| S t        |t        «      rqg }|j                   D ]  }t        |«      sŒ|j                  |«       Œ! t        ˆ	fd„|D «       Ž }ˆ	fd„}t        t        |t        j                  |d«      «      Ž }||z   S t        |t        t        f«      rÜg }g }|j                   D ]0  }t        |«      r|j                  |«       Œ |j                  |«       Œ2 t        |«      dk(  rt        | j                  Ž S t        |«      dk(  r| S t        |«      dkD  r| S t        j                  |«      t!        t        j                  |«      ‰	«      z  t        j                  |«      j#                  «       z  S | S )Nr   c              3   óR   •K  — | ]  }t        |‰«      j                  «       –— Œ  y ­wr   )r   r   )r+   Úxvr   s     €r   r-   z(VarianceMatrix.expand.<locals>.<genexpr>²   s!   øè ø€ ÒLÀ2œh r¨9Ó5×<Ñ<×>ÑLùs   ƒ$'c                 ó<   •— dt        | d‰iŽj                  «       z  S )Né   r   )r   r   )Úxr   s    €r   ú<lambda>z'VarianceMatrix.expand.<locals>.<lambda>³   s   ø€  Q¤z°1Ð'JÀ	Ñ'J×'QÑ'QÓ'SÑ%S€ r   rP   rG   )r0   r   r   r   r   r1   r   r   r5   ÚmapÚ	itertoolsÚcombinationsr   r
   r7   r2   r   Ú	transpose)
r#   r8   rJ   r:   r,   Ú	variancesÚmap_to_covarÚcovariancesr;   r   s
            @r   r   zVarianceMatrix.expand¤   s„  ø€ Ø�i‰i˜‰lˆØ—O‘Oˆ	ä˜Œ~Ü˜tŸz™zÐ*Ð*ä�cœ<Ô(ØˆKÜ˜œSÔ!ØˆBØ—X‘Xò !�Ü˜Q•<Ø—I‘I˜a•Lð!ô ÓLÈÔLÐMˆIÛSˆLÜœs <´×1GÑ1GÈÈAÓ1NÓOÐPˆKØ˜{Ñ*Ð*Ü˜œc¤6˜]Ô+ØˆEØˆBØ—X‘Xò $�Ü˜Q”<Ø—I‘I˜a•Là—L‘L •Oð	$ô
 �2‹w˜!Š|Ü! 4§:¡:Ð.Ð.ä�5‹z˜QŠØ�ä�2‹w˜Š{Ø�Ü—<‘< Ó&¤x´·±¸RÓ0@Ø%ó('ñ 'Ü(+¯©°UÓ(;×'FÑ'FÓ'HñIð Ið ˆr   r   r=   rC   r   r   rE   rE   t   s%   „ ñó4ð" ñó ðó&r   rE   c                   óN   — e Zd ZdZdd„Zed„ «       Zd„ Zed„ «       Z	ed„ «       Z
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

    Nc                 óÆ  — t        |«      }t        |«      }d|j                  vs-d|j                  vs|j                  d   |j                  d   k7  rt        d«      ‚|j                  d   dk(  r0|j                  d   dk(  r|j                  d   |j                  d   fnd}|rt        j                  | |||«      }nt        j                  | ||«      }||_        ||_        |S )NrG   rH   r   )rG   rG   rI   )r   Úarg1Úarg2r   r   r   s         r   r   zCrossCovarianceMatrix.__new__ì   sÍ   € Ü˜‹~ˆÜ˜‹~ˆà�T—Z‘ZÑ Q¨d¯j©jÑ%8¸d¿j¹jÈ¹mÈtÏzÉzÐZ[É}Ò>\ÜÐ9Ó:Ð:à26·*±*¸Q±-À1Ò2DÈÏÉÐTUÉÐZ[ÒI[�—‘˜A‘ §
¡
¨1¡Ñ.Øð 	ñ Ü—,‘,˜s D¨$°	Ó:‰Cä—,‘,˜s D¨$Ó/ˆCàˆŒ
Ø"ˆŒØˆ
r   c                 ó   — | j                   S r   r!   r"   s    r   r   zCrossCovarianceMatrix.shapeÿ   r$   r   c                 óx  — | j                   d   }| j                   d   }| j                  }||k(  rt        ||«      j                  «       S t	        |«      rt	        |«      st        | j                  Ž S t        |t        «      rt        |t        «      rt        |||«      S | j                  |j                  «       «      }| j                  |j                  «       «      }|D ���	�
cg c]1  \  }}|D ]'  \  }	}
|t        ||
|¬«      z  |	j                  «       z  ‘Œ) Œ3 }}	}}}
t        j                  |«      S c c}
}	}}w )Nr   rG   r(   )r0   r   rE   r   r   r   r   r1   r   r[   Ú_expand_single_argumentrV   r   r2   )r#   r8   r]   r^   r   Úcoeff_rv_list1Úcoeff_rv_list2r,   Úr1ÚbÚr2Úaddendss               r   r   zCrossCovarianceMatrix.expand  s  € Ø�y‰y˜‰|ˆØ�y‰y˜‰|ˆØ—O‘Oˆ	à�4Š<Ü! $¨	Ó2×9Ñ9Ó;Ð;ä˜Œ¤i°¤oÜ˜tŸz™zÐ*Ð*ä�dœLÔ)¬j¸¼|Ô.LÜ(¨¨t°YÓ?Ð?à×5Ñ5°d·k±k³mÓDˆØ×5Ñ5°d·k±k³mÓDˆð #1÷Pñ PÙ˜˜2ÀòPÙ5<°a¸ð Ô*¨2¨r¸YÔGÑGÈÏÉËÓUð PÐUð Pˆó Pä�|‰|˜GÓ$Ð$ùõPs   Ã$6D4
c                 óè  — t        |t        «      rt        j                  |fgS t        |t        «      ryg }|j
                  D ]f  }t        |t        t        f«      r!|j                  | j                  |«      «       Œ:t        |«      sŒF|j                  t        j                  |f«       Œh |S t        |t        t        f«      r| j                  |«      gS t        |«      rt        j                  |fgS y r   )r1   r   r   ÚOner   r0   r   r
   r5   Ú_get_mul_nonrv_rv_tupler   )r   r   Úoutvalr,   s       r   ra   z-CrossCovarianceMatrix._expand_single_argument  sÅ   € ô �dœLÔ)Ü—U‘U˜D�M�?Ð"Ü˜œcÔ"ØˆFØ—Y‘Yò .�Ü˜a¤#¤v Ô/Ø—M‘M #×"=Ñ"=¸aÓ"@ÕAÜ˜q•\Ø—M‘M¤1§5¡5¨! *Õ-ð	.ð ˆMÜ˜œs¤F˜mÔ,Ø×/Ñ/°Ó5Ð6Ð6Ü�tŒ_Ü—U‘U˜D�M�?Ð"ð r   c                 óÜ   — g }g }|j                   D ]0  }t        |«      r|j                  |«       Œ |j                  |«       Œ2 t        j                  |«      t        j                  |«      fS r   )r0   r   r5   r   r2   )r   Úmr:   r;   r,   s        r   rj   z-CrossCovarianceMatrix._get_mul_nonrv_rv_tuple+  s[   € àˆØˆØ—‘ò 	 ˆAÜ˜Œ|Ø—	‘	˜!•à—‘˜Q•ð		 ô
 —‘˜UÓ#¤S§\¡\°"Ó%5Ð6Ð6r   r   )r>   r?   r@   rA   r   rB   r   r   Úclassmethodra   rj   rC   r   r   r[   r[   Ì   sM   „ ñó>ð& ñó ðò%ð* ñ#ó ð#ð$ ñ7ó ñ7r   r[   ) rT   Úsympy.core.addr   Úsympy.core.exprr   Úsympy.core.functionr   r3   Ú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   rE   r[   rC   r   r   ú<module>r{      sa   ðÛ å Ý  Ý 1Ý Ý "Ý 0Ý 9Ý 4Ý 9ß 2Ý 'ß NÑ Nôa˜ Zô aôFV�X˜zô Vôph7˜J¨
õ h7r   