§
    PŠtjÒ(  ã                   ó  — 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dS )é    N)ÚAdd)ÚExpr)Úexpand)ÚMul)ÚS)Ú
ShapeError)Ú
MatrixExpr)ÚMatMul)Ú
ZeroMatrix)ÚRandomSymbolÚ	is_random)Ú_sympify)ÚVarianceÚ
CovarianceÚExpectationc                   ó6   — e Zd ZdZdd„Zed„ ¦   «         Zd„ ZdS )Ú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/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/stats/symbolic_multivariate_probability.pyr   zExpectationMatrix.__new__8   sn   € Ý˜‰~Œ~ˆØÐÝ˜T‘?”?ð Ø�Ý”,˜s DÑ)Ô)ˆCˆCå  Ñ+Ô+ˆIÝ”,˜s D¨)Ñ4Ô4ˆCà”ZˆŒ
Ø"ˆŒØˆ
ó    c                 ó   — | j         S r   ©r   ©Úselfs    r   r   zExpectationMatrix.shapeF   ó
   € àŒ{Ðr   c                 ó€  ‡— | 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 ]ˆ}t          |¦  «        rE|r| 	                    |¦  «         n| 	                    |¦  «         g }| 
                    |¦  «         ŒV|j        r| 
                    |¦  «         Œs| 
                    |¦  «         Œ‰t          |¦  «        dk    r| S t          j        |¦  «        t          t          j        |¦  «        ‰¬¦  «        z  t          j        |¦  «        z  S | S )Nr   c              3   ó^   •K  — | ]'}t          |‰¬ ¦  «                             ¦   «         V — Œ(dS ©©r   N©r   r   ©Ú.0Úar   s     €r   ú	<genexpr>z+ExpectationMatrix.expand.<locals>.<genexpr>Q   sP   øè è € ð  (ð  (Øõ !,¨A¸Ð CÑ CÔ C× JÒ JÑ LÔ Lð  (ð  (ð  (ð  (ð  (ð  (r   c              3   ó^   •K  — | ]'}t          |‰¬ ¦  «                             ¦   «         V — Œ(dS r'   r)   r*   s     €r   r-   z+ExpectationMatrix.expand.<locals>.<genexpr>V   sP   øè è € ð  /ð  /Øõ !,¨A¸Ð CÑ CÔ C× JÒ JÑ LÔ 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   só  ø€ ØŒy˜Œ|ˆØ”Oˆ	Ý˜‰Œð 	ØˆKå�d�CÑ Ô ð 	(Ý”<ð  (ð  (ð  (ð  (Ø!œYð (ñ  (ô  (ñ (ô (ð (õ ˜d‘m”mˆÝ�k¥3Ñ'Ô'ð 	?Ý”<ð  /ð  /ð  /ð  /Ø(Ô-ð /ñ  /ô  /ñ /ô /ð /õ ˜�s¥F˜mÑ,Ô,ð 	?ØˆBØˆEØˆGà”Yð $ð $�Ý˜Q‘<”<ð 
$Øð .ØŸ	š	 'Ñ*Ô*Ð*Ð*àŸš WÑ-Ô-Ð-Ø �GØ—I’I˜a‘L”L�L�LØ”[ð $Ø—N’N 1Ñ%Ô%Ð%Ð%à—L’L ‘O”O�O�Oõ �5‰zŒz˜QŠˆØ�Ý”< Ñ&Ô&¥{µ3´<ÀÑ3CÔ3CØ'ð()ñ ()ô ()ñ )Ý),¬°gÑ)>Ô)>ñ?ð ?ð ˆr   r   ©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   r   © r   r   r   r      s]   € € € € € ð%ð %ðLð ð ð ð ðð ñ „Xðð(ð (ð (ð (ð (r   r   c                   ó6   — e Zd ZdZdd„Zed„ ¦   «         Zd„ ZdS )Ú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                 óV  — 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Œmˆà�C”IÐÐÝÐ9Ñ:Ô:Ð:à03´	¸!´ÀÒ0AÐ0A�”˜1”˜sœy¨œ|Ð,Ð,ÈÌ	ÐRSÌÐVYÔV_Ð`aÔVbÐGcˆàð 	)Ý”,˜s C¨Ñ3Ô3ˆCˆ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          ¦  «        ryg }|j         D ]&}t          |¦  «        r|                     |¦  «         Œ't          ˆ	fd„|D ¦   «         Ž }ˆ	fd„}t          t          |t          j        |d¦  «        ¦  «        Ž }||z   S t          |t          t          f¦  «        rñg }g }|j         D ]<}t          |¦  «        r|                     |¦  «         Œ'|                     |¦  «         Œ=t          |¦  «        dk    rt          | j        Ž S t          |¦  «        dk    r| S t          |¦  «        dk    r| S t          j        |¦  «        t!          t          j        |¦  «        ‰	¦  «        z  t          j        |¦  «                             ¦   «         z  S | S )Nr   c              3   ó\   •K  — | ]&}t          |‰¦  «                             ¦   «         V — Œ'd S r   )r   r   )r+   Úxvr   s     €r   r-   z(VarianceMatrix.expand.<locals>.<genexpr>²   s9   øè è € ÐLÐLÀ2�h r¨9Ñ5Ô5×<Ò<Ñ>Ô>ÐLÐLÐLÐLÐLÐLr   c                 óF   •— dt          | d‰iŽ                     ¦   «         z  S )Né   r   )r   r   )Úxr   s    €r   ú<lambda>z'VarianceMatrix.expand.<locals>.<lambda>³   s%   ø€  Q¥z°1Ð'JÀ	Ð'JÐ'J×'QÒ'QÑ'SÔ'SÑ%S€ r   rO   rF   )r/   r   r   r   r   r0   r   r   r4   ÚmapÚ	itertoolsÚcombinationsr   r
   r6   r1   r   Ú	transpose)
r#   r7   rI   r9   r,   Ú	variancesÚmap_to_covarÚcovariancesr:   r   s
            @r   r   zVarianceMatrix.expand¤   sç  ø€ ØŒi˜ŒlˆØ”Oˆ	å˜‰~Œ~ð 	+Ý˜tœzÐ*Ð*å�c�<Ñ(Ô(ð 	IØˆKÝ˜�SÑ!Ô!ð 	IØˆBØ”Xð !ð !�Ý˜Q‘<”<ð !Ø—I’I˜a‘L”L�LøÝÐLÐLÐLÐLÈÐLÑLÔLÐMˆIØSÐSÐSÐSˆLÝ�s <µÔ1GÈÈAÑ1NÔ1NÑOÔOÐPˆKØ˜{Ñ*Ð*Ý˜�c¥6˜]Ñ+Ô+ð 	IØˆEØˆBØ”Xð $ð $�Ý˜Q‘<”<ð $Ø—I’I˜a‘L”L�L�Là—L’L ‘O”O�O�OÝ�2‰wŒw˜!Š|ˆ|Ý! 4¤:Ð.Ð.å�5‰zŒz˜QŠˆØ�å�2‰wŒw˜Š{ˆ{Ø�Ý”< Ñ&Ô&¥xµ´¸RÑ0@Ô0@Ø%ñ('ô ('ñ 'Ý(+¬°UÑ(;Ô(;×'FÒ'FÑ'HÔ'HñIð Ið ˆr   r   r<   rB   r   r   rD   rD   t   s\   € € € € € ðð ð4ð ð ð ð" ðð ñ „Xðð&ð &ð &ð &ð &r   rD   c                   ób   — e Zd ZdZdd„Zed„ ¦   «         Zd„ Zed„ ¦   «         Z	ed„ ¦   «         Z
dS )	Ú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         k    rt          d¦  «        ‚|j        d         dk    r+|j        d         dk    r|j        d         |j        d         fnd}|rt          j        | |||¦  «        }nt          j        | ||¦  «        }||_        ||_        |S )NrF   rG   r   )rF   rF   rH   )r   Úarg1Úarg2r   r   r   s         r   r   zCrossCovarianceMatrix.__new__ì   sß   € Ý˜‰~Œ~ˆÝ˜‰~Œ~ˆà�T”ZÐÐ Q¨d¬jÐ%8Ð%8¸d¼jÈ¼mÈtÌzÐZ[Ì}Ò>\Ð>\ÝÐ9Ñ:Ô:Ð:à26´*¸Q´-À1Ò2DÐ2DÈÌÐTUÌÐZ[ÒI[ÐI[�”˜A” ¤
¨1¤Ð.Ð.Øð 	ð ð 	0Ý”,˜s D¨$°	Ñ:Ô:ˆCˆCå”,˜s D¨$Ñ/Ô/ˆCàˆŒ
Ø"ˆŒØˆ
r   c                 ó   — | j         S r   r!   r"   s    r   r   zCrossCovarianceMatrix.shapeÿ   r$   r   c                 óH  ‡‡— | j         d         }| j         d         }| j        Š||k    r"t          |‰¦  «                             ¦   «         S t	          |¦  «        rt	          |¦  «        st          | j        Ž S t          |t          ¦  «        r&t          |t          ¦  «        rt          ||‰¦  «        S |  
                    |                     ¦   «         ¦  «        }|  
                    |                     ¦   «         ¦  «        Šˆˆfd„|D ¦   «         }t          j        |¦  «        S )Nr   rF   c           	      óz   •— g | ]7\  }}‰D ]/\  }}|t          ||‰¬ ¦  «        z  |                     ¦   «         z  ‘Œ0Œ8S )r(   )rZ   rU   )r+   r,   Úr1ÚbÚr2Úcoeff_rv_list2r   s        €€r   ú
<listcomp>z0CrossCovarianceMatrix.expand.<locals>.<listcomp>  sp   ø€ ð Pð Pð PÙ˜˜2ÀðPð PÙ5<°a¸ð Õ*¨2¨r¸YÐGÑGÔGÑGÈÏÊÉÌÑUð Pð Pð Pð Pr   )r/   r   rD   r   r   r   r   r0   r   rZ   Ú_expand_single_argumentr   r1   )r#   r7   r\   r]   Úcoeff_rv_list1Úaddendsrd   r   s         @@r   r   zCrossCovarianceMatrix.expand  s   øø€ ØŒy˜Œ|ˆØŒy˜Œ|ˆØ”Oˆ	à�4Š<ˆ<Ý! $¨	Ñ2Ô2×9Ò9Ñ;Ô;Ð;å˜‰Œð 	+¥i°¡o¤oð 	+Ý˜tœzÐ*Ð*å�d�LÑ)Ô)ð 	@­j¸½|Ñ.LÔ.Lð 	@Ý(¨¨t°YÑ?Ô?Ð?à×5Ò5°d·k²k±m´mÑDÔDˆØ×5Ò5°d·k²k±m´mÑDÔDˆðPð Pð Pð Pð PØ"0ðPñ Pô PˆåŒ|˜GÑ$Ô$Ð$r   c                 ó  — t          |t          ¦  «        rt          j        |fgS t          |t          ¦  «        rƒg }|j        D ]w}t          |t          t          f¦  «        r)|                     |  	                    |¦  «        ¦  «         ŒGt          |¦  «        r!|                     t          j        |f¦  «         Œx|S t          |t          t          f¦  «        r|  	                    |¦  «        gS t          |¦  «        rt          j        |fgS d S r   )r0   r   r   ÚOner   r/   r   r
   r4   Ú_get_mul_nonrv_rv_tupler   )r   r   Úoutvalr,   s       r   rf   z-CrossCovarianceMatrix._expand_single_argument  s  € õ �d�LÑ)Ô)ð 	#Ý”U˜D�M�?Ð"Ý˜�cÑ"Ô"ð 	#ØˆFØ”Yð .ð .�Ý˜a¥#¥v Ñ/Ô/ð .Ø—M’M #×"=Ò"=¸aÑ"@Ô"@ÑAÔAÐAÐAÝ˜q‘\”\ð .Ø—M’M¥1¤5¨! *Ñ-Ô-Ð-øàˆMÝ˜�s¥F˜mÑ,Ô,ð 	#Ø×/Ò/°Ñ5Ô5Ð6Ð6Ý�t‰_Œ_ð 	#Ý”U˜D�M�?Ð"ð	#ð 	#r   c                 óâ   — g }g }|j         D ]<}t          |¦  «        r|                     |¦  «         Œ'|                     |¦  «         Œ=t          j        |¦  «        t          j        |¦  «        fS r   )r/   r   r4   r   r1   )r   Úmr9   r:   r,   s        r   rk   z-CrossCovarianceMatrix._get_mul_nonrv_rv_tuple+  sl   € àˆØˆØ”ð 	 ð 	 ˆAÝ˜‰|Œ|ð  Ø—	’	˜!‘”��à—’˜Q‘”��Ý”˜UÑ#Ô#¥S¤\°"Ñ%5Ô%5Ð6Ð6r   r   )r=   r>   r?   r@   r   rA   r   r   Úclassmethodrf   rk   rB   r   r   rZ   rZ   Ì   s’   € € € € € ðð ð>ð ð ð ð& ðð ñ „Xðð%ð %ð %ð* ð#ð #ñ „[ð#ð$ ð7ð 7ñ „[ð7ð 7ð 7r   rZ   ) rS   Úsympy.core.addr   Úsympy.core.exprr   Úsympy.core.functionr   r2   Ú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   rD   rZ   rB   r   r   ú<module>r|      s¥  ðØ Ð Ð Ð à Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ Nðað að að að a˜ Zñ aô að aðFVð Vð Vð Vð V�X˜zñ Vô Vð Vðph7ð h7ð h7ð h7ð h7˜J¨
ñ h7ô h7ð h7ð h7ð h7r   