§
    PŠtjÁU  ã                   óÞ  — 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mZmZmZmZmZmZmZmZ d d	lmZmZmZmZmZmZm Z  d d
l!m"Z"  G d„ de¦  «        Z#d„ Z$ G d„ d¦  «        Z% G d„ d¦  «        Z& G d„ d¦  «        Z'e%e'e'e&dœZ( G d„ de e¦  «        Z) G d„ de)¦  «        Z*d„ Z+ G d„ de)¦  «        Z,d„ Z- G d„ de)¦  «        Z.d„ Z/ G d „ d!e)¦  «        Z0d"„ Z1d#S )$é    )Úprod)ÚBasic)Úpi)ÚS)Úexp)Ú
multigamma)ÚsympifyÚ_sympify)	ÚImmutableMatrixÚInverseÚTraceÚDeterminantÚMatrixSymbolÚ
MatrixBaseÚ	TransposeÚ	MatrixSetÚmatrix2numpy)Ú_value_checkÚRandomMatrixSymbolÚNamedArgsMixinÚPSpaceÚ_symbol_converterÚMatrixDomainÚDistribution)Úimport_modulec                   ó˜   — e Zd ZdZd„ Z ed„ ¦  «        Z ed„ ¦  «        Zed„ ¦   «         Zed„ ¦   «         Z	ed„ ¦   «         Z
d„ Zdd„ZdS )ÚMatrixPSpacezD
    Represents probability space for
    Matrix Distributions.
    c                 óÆ   — t          |¦  «        }t          |¦  «        t          |¦  «        }}|j        r|j        st          d¦  «        ‚t	          j        | ||||¦  «        S )NzDimensions should be integers)r   r
   Ú
is_integerÚ
ValueErrorr   Ú__new__)ÚclsÚsymÚdistributionÚdim_nÚdim_ms        ú^/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/stats/matrix_distributions.pyr!   zMatrixPSpace.__new__   s`   € Ý Ñ$Ô$ˆÝ ‘”­°©¬ˆuˆØÔ ð 	> UÔ%5ð 	>ÝÐ<Ñ=Ô=Ð=ÝŒ}˜S # |°U¸EÑBÔBÐBó    c                 ó   — | j         d         S )Né   ©Úargs©Úselfs    r'   ú<lambda>zMatrixPSpace.<lambda>    s   € ¨¬°1¬€ r(   c                 ó   — | j         d         S ©Nr   r+   r-   s    r'   r/   zMatrixPSpace.<lambda>!   s   €  4¤9¨Q¤<€ r(   c                 ó@   — t          | j        | j        j        ¦  «        S ©N)r   Úsymbolr$   Úsetr-   s    r'   ÚdomainzMatrixPSpace.domain#   s   € å˜DœK¨Ô):Ô)>Ñ?Ô?Ð?r(   c                 ó\   — t          | j        | j        d         | j        d         | ¦  «        S )Né   é   )r   r4   r,   r-   s    r'   ÚvaluezMatrixPSpace.value'   s$   € å! $¤+¨t¬y¸¬|¸T¼YÀq¼\È4ÑPÔPÐPr(   c                 ó   — | j         hS r3   )r:   r-   s    r'   ÚvalueszMatrixPSpace.values+   s   € à”
ˆ|Ðr(   c                 óØ   — |                      t          ¦  «        }t          |¦  «        dk    st          |t          ¦  «        st	          d¦  «        ‚| j                             |¦  «        S )Nr*   ztCurrently, no algorithm has been implemented to handle general expressions containing multiple matrix distributions.)Úatomsr   ÚlenÚ
isinstanceÚNotImplementedErrorr$   Úpdf)r.   Úexprr,   Úrmss       r'   Úcompute_densityzMatrixPSpace.compute_density/   sb   € Ø�jŠjÕ+Ñ,Ô,ˆÝˆs‰8Œ8�aŠ<ˆ<¥
¨4Õ1CÑ DÔ Dˆ<Ý%ð '5ñ 6ô 6ð 6ð Ô ×$Ò$ TÑ*Ô*Ð*r(   © ÚscipyNc                 óJ   — | j         | j                             |||¬¦  «        iS )zu
        Internal sample method

        Returns dictionary mapping RandomMatrixSymbol to realization value.
        )ÚlibraryÚseed)r:   r$   Úsample)r.   ÚsizerI   rJ   s       r'   rK   zMatrixPSpace.sample7   s*   € ð ”
˜DÔ-×4Ò4°TÀ7ÐQUÐ4ÑVÔVÐWÐWr(   ©rF   rG   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   Úpropertyr$   r4   r6   r:   r<   rE   rK   rF   r(   r'   r   r      sÖ   € € € € € ðð ðCð Cð Cð �8Ð5Ð5Ñ6Ô6€LØˆXÐ/Ð/Ñ0Ô0€Fàð@ð @ñ „Xð@ð ðQð Qñ „XðQð ðð ñ „Xðð+ð +ð +ðXð Xð Xð Xð Xð Xr(   r   c                 ó¼   — t          t          t          |¦  «        ¦  «        } ||Ž } |j        |Ž  |j        }t          | ||d         |d         ¦  «        }|j        S )Nr   r*   )ÚlistÚmapr	   ÚcheckÚ	dimensionr   r:   )r4   r"   r,   ÚdistÚdimÚpspaces         r'   Úrvr[   @   s]   € Ý••G˜TÑ"Ô"Ñ#Ô#€DØˆ3�ˆ:€DØ€D„J�ÐÐØ
Œ.€CÝ˜& $¨¨A¬°°A´Ñ7Ô7€FØŒ<Ðr(   c                   ó0   — e Zd ZdZdd„Zed„ ¦   «         ZdS )ÚSampleMatrixScipyz7Returns the sample from scipy of the given distributionNc                 ó0   — |                       |||¦  «        S r3   )Ú_sample_scipy©r"   rX   rL   rJ   s       r'   r!   zSampleMatrixScipy.__new__K   ó   € Ø× Ò   t¨TÑ2Ô2Ð2r(   c                 ó¤  ‡
— ddl mŠ
 ddl}ˆ
fd„ˆ
fd„dœ}d„ d„ dœ}|                     ¦   «         }|j        j        |vrdS |�t          |t          ¦  «        r|j         	                    |¬	¦  «        }n|} ||j        j                 |t          |¦  «        |¦  «        }	|	                     | ||j        j                 |¦  «        z   ¦  «        S )
zSample from SciPy.r   )ÚstatsNc                 ó’   •— ‰j                              t          | j        ¦  «        t	          | j        t          ¦  «        |¬¦  «        S )N)ÚdfÚscalerL   )ÚwishartÚrvsÚintÚnr   Úscale_matrixÚfloat©rX   rL   Ú
rand_stateÚscipy_statss      €r'   r/   z1SampleMatrixScipy._sample_scipy.<locals>.<lambda>U   sB   ø€ À+ÔBU×BYÒBYÝ�t”v‘;”;¥l°4Ô3DÅeÑ&LÔ&LÐSWð CZñ CYô CY€ r(   c                 óÒ   •— ‰j                              t          | j        t          ¦  «        t          | j        t          ¦  «        t          | j        t          ¦  «        ||¬¦  «        S )N)ÚmeanÚrowcovÚcolcovrL   Úrandom_state)Úmatrix_normalrh   r   Úlocation_matrixrl   Úscale_matrix_1Úscale_matrix_2rm   s      €r'   r/   z1SampleMatrixScipy._sample_scipy.<locals>.<lambda>W   sZ   ø€ À{ÔG`×GdÒGdÝ! $Ô"6½Ñ>Ô>Ý# DÔ$7½Ñ?Ô?Ý# DÔ$7½Ñ?Ô?ÀdÐYcð Heñ Heô He€ r(   ©ÚWishartDistributionÚMatrixNormalDistributionc                 ó   — | j         j        S r3   ©rk   Úshape©rX   s    r'   r/   z1SampleMatrixScipy._sample_scipy.<locals>.<lambda>^   ó   € °Ô0AÔ0G€ r(   c                 ó   — | j         j        S r3   ©rv   r~   r   s    r'   r/   z1SampleMatrixScipy._sample_scipy.<locals>.<lambda>_   ó   € °dÔ6JÔ6P€ r(   ©rJ   )rG   rc   ÚnumpyÚkeysÚ	__class__rN   r@   ri   ÚrandomÚdefault_rngr   Úreshape)r"   rX   rL   rJ   r…   Úscipy_rv_mapÚsample_shapeÚ	dist_listrn   Úsampro   s             @r'   r_   zSampleMatrixScipy._sample_scipyN   s   ø€ ð 	/Ð.Ð.Ð.Ð.Ð.Øˆˆˆð$Yð $Yð $Yð $Yð)eð )eð )eð )eð
ð 
ˆð $HÐ#GØ)PÐ)Pð
ð 
ˆð
 !×%Ò%Ñ'Ô'ˆ	àŒ>Ô"¨)Ð3Ð3Ø�4àˆ<�: d­CÑ0Ô0ˆ<Øœ×1Ò1°tÐ1Ñ<Ô<ˆJˆJàˆJØ4ˆ|˜DœNÔ3Ô4°T½4À¹:¼:ÀzÑRÔRˆØ�|Š|˜DÐ#H <°´Ô0GÔ#HÈÑ#NÔ#NÑNÑOÔOÐOr(   r3   )rN   rO   rP   rQ   r!   Úclassmethodr_   rF   r(   r'   r]   r]   I   sN   € € € € € ØAÐAð3ð 3ð 3ð 3ð ðPð Pñ „[ðPð Pð Pr(   r]   c                   ó0   — e Zd ZdZdd„Zed„ ¦   «         ZdS )ÚSampleMatrixNumpyz7Returns the sample from numpy of the given distributionNc                 ó0   — |                       |||¦  «        S r3   )Ú_sample_numpyr`   s       r'   r!   zSampleMatrixNumpy.__new__s   ra   r(   c                 óz  — i }i }|                      ¦   «         }|j        j        |vrdS ddl}|�t	          |t
          ¦  «        r|j                             |¬¦  «        }n|} ||j        j                 |t          |¦  «        |¦  «        }	|	 	                    | ||j        j                 |¦  «        z   ¦  «        S )zSample from NumPy.Nr   r„   )
r†   r‡   rN   r…   r@   ri   rˆ   r‰   r   rŠ   )
r"   rX   rL   rJ   Únumpy_rv_maprŒ   r�   r…   rn   rŽ   s
             r'   r“   zSampleMatrixNumpy._sample_numpyv   sÂ   € ð
ˆð
ˆð !×%Ò%Ñ'Ô'ˆ	àŒ>Ô"¨)Ð3Ð3Ø�4àˆˆˆØˆ<�: d­CÑ0Ô0ˆ<Øœ×1Ò1°tÐ1Ñ<Ô<ˆJˆJàˆJØ4ˆ|˜DœNÔ3Ô4°T½4À¹:¼:ÀzÑRÔRˆØ�|Š|˜DÐ#H <°´Ô0GÔ#HÈÑ#NÔ#NÑNÑOÔOÐOr(   r3   )rN   rO   rP   rQ   r!   r�   r“   rF   r(   r'   r‘   r‘   o   sN   € € € € € ØAÐAð3ð 3ð 3ð 3ð ðPð Pñ „[ðPð Pð Pr(   r‘   c                   ó0   — e Zd ZdZdd„Zed„ ¦   «         ZdS )ÚSampleMatrixPymcz6Returns the sample from pymc of the given distributionNc                 ó0   — |                       |||¦  «        S r3   )Ú_sample_pymcr`   s       r'   r!   zSampleMatrixPymc.__new__‘   s   € Ø×Ò  d¨DÑ1Ô1Ð1r(   c           	      óR  ‡	— 	 ddl Š	n# t          $ r ddlŠ	Y nw xY wˆ	fd„ˆ	fd„dœ}d„ d„ dœ}|                     ¦   «         }|j        j        |vrdS ddl}|                     d	¦  «                             |j	        ¦  «         ‰	 
                    ¦   «         5   ||j        j                 |¦  «         ‰	                     t          |¦  «        d
d|dd¬¦  «        d         }ddd¦  «         n# 1 swxY w Y   |                     | ||j        j                 |¦  «        z   ¦  «        S )zSample from PyMC.r   Nc           	      óÜ   •— ‰                      dt          | j        t          ¦  «        t          | j        t          ¦  «        t          | j        t          ¦  «        | j        j        ¬¦  «        S )NÚX)Úmurr   rs   r~   )ÚMatrixNormalr   rv   rl   rw   rx   r~   ©rX   Úpymcs    €r'   r/   z/SampleMatrixPymc._sample_pymc.<locals>.<lambda>�   sX   ø€ °T×5FÒ5FÀsÝ Ô 4µeÑ<Ô<Ý# DÔ$7½Ñ?Ô?Ý# DÔ$7½Ñ?Ô?ØÔ*Ô0ð	 6Gñ 62ô 62€ r(   c                 óˆ   •— ‰                      dt          | j        ¦  «        t          | j        t
          ¦  «        ¬¦  «        S )Nrœ   )Únur   )ÚWishartBartlettri   rj   r   rk   rl   rŸ   s    €r'   r/   z/SampleMatrixPymc._sample_pymc.<locals>.<lambda>¢   s;   ø€ °×0DÒ0DÀSÝ�t”v‘;”;¥,¨tÔ/@Å%Ñ"HÔ"Hð 1Eñ 1Jô 1J€ r(   )r{   rz   c                 ó   — | j         j        S r3   r}   r   s    r'   r/   z/SampleMatrixPymc._sample_pymc.<locals>.<lambda>§   r€   r(   c                 ó   — | j         j        S r3   r‚   r   s    r'   r/   z/SampleMatrixPymc._sample_pymc.<locals>.<lambda>¨   rƒ   r(   ry   r    r*   F)ÚdrawsÚchainsÚprogressbarÚrandom_seedÚreturn_inferencedataÚcompute_convergence_checksrœ   )r    ÚImportErrorÚpymc3r†   r‡   rN   ÚloggingÚ	getLoggerÚsetLevelÚERRORÚModelrK   r   rŠ   )
r"   rX   rL   rJ   Úpymc_rv_maprŒ   r�   r®   Úsampsr    s
            @r'   r™   zSampleMatrixPymc._sample_pymc”   sá  ø€ ð	!ØˆKˆKˆKˆKøÝð 	!ð 	!ð 	!Ø Ð Ð Ð Ð Ð ð	!øøøð)2ð )2ð )2ð )2ð
$Jð $Jð $Jð $Jð
ð 
ˆð $HÐ#GØ)PÐ)Pð
ð 
ˆð
  ×$Ò$Ñ&Ô&ˆ	àŒ>Ô"¨)Ð3Ð3Ø�4ØˆˆˆØ×Ò˜&Ñ!Ô!×*Ò*¨7¬=Ñ9Ô9Ð9Ø�ZŠZ‰\Œ\ð 	dð 	dØ0ˆK˜œÔ/Ô0°Ñ6Ô6Ð6Ø—K’K¥d¨4¡j¤j¸ÈÐ[_Ðv{ð  Y^�Kñ  _ô  _ð  `cô  dˆEð	dð 	dð 	dñ 	dô 	dð 	dð 	dð 	dð 	dð 	dð 	døøøð 	dð 	dð 	dð 	dð �}Š}˜TÐ$I L°´Ô1HÔ$IÈ$Ñ$OÔ$OÑOÑPÔPÐPs   ƒ ˆ˜ÂA
C-Ã-C1Ã4C1r3   )rN   rO   rP   rQ   r!   r�   r™   rF   r(   r'   r—   r—   Ž   sN   € € € € € Ø@Ð@ð2ð 2ð 2ð 2ð ðQð Qñ „[ðQð Qð Qr(   r—   )rG   r­   r    r…   c                   ó<   — e Zd ZdZd„ Zed„ ¦   «         Zd„ Zd	d„ZdS )
ÚMatrixDistributionz1
    Abstract class for Matrix Distribution.
    c                 ó>   — d„ |D ¦   «         }t          j        | g|¢R Ž S )Nc                 ót   — g | ]5}t          |t          ¦  «        rt          |¦  «        nt          |¦  «        ‘Œ6S rF   )r@   rT   r   r
   )Ú.0Úargs     r'   ú
<listcomp>z.MatrixDistribution.__new__.<locals>.<listcomp>Æ   sM   € ð 4ð 4ð 4Ø'*õ )3°3½Ñ(=Ô(=ð #• Ñ$Ô$Ð$Ý˜c‘]”]ð4ð 4ð 4r(   )r   r!   )r"   r,   s     r'   r!   zMatrixDistribution.__new__Å   s8   € ð4ð 4Ø.2ð4ñ 4ô 4ˆåŒ}˜SÐ( 4Ð(Ð(Ð(Ð(r(   c                  ó   — d S r3   rF   r+   s    r'   rV   zMatrixDistribution.checkÊ   s   € àˆr(   c                 ót   — t          |t          ¦  «        rt          |¦  «        }|                      |¦  «        S r3   )r@   rT   r   rB   )r.   rC   s     r'   Ú__call__zMatrixDistribution.__call__Î   s1   € Ý�d�DÑ!Ô!ð 	)Ý" 4Ñ(Ô(ˆDØ�xŠx˜‰~Œ~Ðr(   rF   rG   Nc                 ó  — g d¢}||vrt          dt          |¦  «        z  ¦  «        ‚t          |¦  «        st          d|z  ¦  «        ‚t	          |         | ||¦  «        }|�|S t          d| j        j        ›d|›�¦  «        ‚)zo
        Internal sample method

        Returns dictionary mapping RandomSymbol to realization value.
        )rG   r…   r­   r    z&Sampling from %s is not supported yet.zFailed to import %sNzSampling for z# is not currently implemented from )rA   Ústrr   r    Ú_get_sample_class_matrixrvr‡   rN   )r.   rL   rI   rJ   Ú	librariesr´   s         r'   rK   zMatrixDistribution.sampleÓ   s®   € ð 8Ð7Ð7ˆ	Ø˜)Ð#Ð#Ý%Ð&NÝ*-¨g©,¬,ñ'7ñ 8ô 8ð 8å˜WÑ%Ô%ð 	>ÝÐ2°WÑ<Ñ=Ô=Ð=å*¨7Ô3°D¸$ÀÑEÔEˆàÐØˆLÝ!Ð!à”>Ô*Ð*Ð*¨G¨Gð5ñô ð 	r(   rM   )	rN   rO   rP   rQ   r!   ÚstaticmethodrV   r¾   rK   rF   r(   r'   r¶   r¶   Á   sk   € € € € € ðð ð)ð )ð )ð
 ðð ñ „\ððð ð ð
ð ð ð ð ð r(   r¶   c                   óZ   — e Zd ZdZed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Z	dS )ÚMatrixGammaDistribution©ÚalphaÚbetark   c                 óØ   — t          |t          ¦  «        st          |j        d¦  «         t          |j        d¦  «         t          | j        d¦  «         t          |j        d¦  «         d S )Nú+The shape matrix must be positive definite.úShould be square matrixú#Shape parameter should be positive.z#Scale parameter should be positive.©r@   r   r   Úis_positive_definiteÚ	is_squareÚis_positiverÆ   s      r'   rV   zMatrixGammaDistribution.checkõ   sz   € å˜,­Ñ5Ô5ð 	5Ý˜Ô:ð =4ñ 5ô 5ð 5å�\Ô+ð .ñ 	ô 	ð 	å�UÔ&Ð(MÑNÔNÐNÝ�TÔ%Ð'LÑMÔMÐMÐMÐMr(   c                 ó\   — | j         j        d         }t          ||t          j        ¦  «        S r1   ©rk   r~   r   r   ÚReals©r.   Úks     r'   r5   zMatrixGammaDistribution.setÿ   ó&   € àÔÔ# AÔ&ˆÝ˜˜A�qœwÑ'Ô'Ð'r(   c                 ó   — | j         j        S r3   r}   r-   s    r'   rW   z!MatrixGammaDistribution.dimension  ó   € àÔ Ô&Ð&r(   c                 ó"  — | j         | j        | j        }}}|j        d         }t	          |t
          ¦  «        rt          |¦  «        }t	          |t          t          f¦  «        st          dt          |¦  «        z  ¦  «        ‚t          |¦  «         |z  |z  }t          t          |¦  «        ¦  «        |||z  z  t          ||¦  «        z  z  }t          |¦  «        | z  }t          |¦  «        |t!          |dz   ¦  «        dz  z
  z  }	||z  |	z  S )Nr   ú4%s should be an isinstance of Matrix or MatrixSymbolr*   r8   )rÇ   rÈ   rk   r~   r@   rT   r   r   r   r    rÀ   r   r   r   r   r   r   )
r.   ÚxrÇ   rÈ   rk   ÚpÚsigma_inv_xÚterm1Úterm2Úterm3s
             r'   rB   zMatrixGammaDistribution.pdf  s  € Ø$(¤J°´	¸4Ô;L�\ˆtˆØÔ˜qÔ!ˆÝ�a�ÑÔð 	#Ý Ñ"Ô"ˆAÝ˜!�j­,Ð7Ñ8Ô8ð 	0Ýð &Ý(+¨A©¬ñ/ñ 0ô 0ð 0å Ñ-Ô-Ð-¨aÑ/°$Ñ6ˆÝ•E˜+Ñ&Ô&Ñ'Ô'¨$°°5±©/½ZÈÈqÑ=QÔ=QÑ)QÑRˆÝ˜\Ñ*Ô*¨u¨fÑ5ˆÝ˜Q‘” 5­1¨Q°©U©8¬8°A©:Ñ#5Ñ6ˆØ�u‰}˜uÑ$Ð$r(   N©
rN   rO   rP   Ú	_argnamesrÃ   rV   rR   r5   rW   rB   rF   r(   r'   rÅ   rÅ   ñ   sz   € € € € € à1€IàðNð Nñ „\ðNð ð(ð (ñ „Xð(ð ð'ð 'ñ „Xð'ð%ð %ð %ð %ð %r(   rÅ   c                 ó|   — t          |t          ¦  «        rt          |¦  «        }t          | t          |||f¦  «        S )a  
    Creates a random variable with Matrix Gamma Distribution.

    The density of the said distribution can be found at [1].

    Parameters
    ==========

    alpha: Positive Real number
        Shape Parameter
    beta: Positive Real number
        Scale Parameter
    scale_matrix: Positive definite real square matrix
        Scale Matrix

    Returns
    =======

    RandomSymbol

    Examples
    ========

    >>> from sympy.stats import density, MatrixGamma
    >>> from sympy import MatrixSymbol, symbols
    >>> a, b = symbols('a b', positive=True)
    >>> M = MatrixGamma('M', a, b, [[2, 1], [1, 2]])
    >>> X = MatrixSymbol('X', 2, 2)
    >>> density(M)(X).doit()
    exp(Trace(Matrix([
    [-2/3,  1/3],
    [ 1/3, -2/3]])*X)/b)*Determinant(X)**(a - 3/2)/(3**a*sqrt(pi)*b**(2*a)*gamma(a)*gamma(a - 1/2))
    >>> density(M)([[1, 0], [0, 1]]).doit()
    exp(-4/(3*b))/(3**a*sqrt(pi)*b**(2*a)*gamma(a)*gamma(a - 1/2))


    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Matrix_gamma_distribution

    )r@   rT   r   r[   rÅ   )r4   rÇ   rÈ   rk   s       r'   ÚMatrixGammarä     s>   € õV �,¥Ñ%Ô%ð 5Ý& |Ñ4Ô4ˆÝˆfÕ-°°t¸\Ð/JÑKÔKÐKr(   c                   óZ   — e Zd ZdZed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Z	dS )rz   ©rj   rk   c                 ó®   — t          |t          ¦  «        st          |j        d¦  «         t          |j        d¦  «         t          | j        d¦  «         d S )NrÊ   rË   rÌ   rÍ   ræ   s     r'   rV   zWishartDistribution.checkL  se   € å˜,­Ñ5Ô5ð 	5Ý˜Ô:ð =4ñ 5ô 5ð 5å�\Ô+ð .ñ 	ô 	ð 	å�Q”]Ð$IÑJÔJÐJÐJÐJr(   c                 ó\   — | j         j        d         }t          ||t          j        ¦  «        S r1   rÒ   rÔ   s     r'   r5   zWishartDistribution.setU  rÖ   r(   c                 ó   — | j         j        S r3   r}   r-   s    r'   rW   zWishartDistribution.dimensionZ  rØ   r(   c                 óŽ  — | j         | j        }}|j        d         }t          |t          ¦  «        rt          |¦  «        }t          |t          t          f¦  «        st          dt          |¦  «        z  ¦  «        ‚t          |¦  «         |z  t          d¦  «        z  }t          t          |¦  «        ¦  «        d||z  t          d¦  «        z  z  t          |t          d¦  «        z  |¦  «        z  z  }t          |¦  «        | t          d¦  «        z  z  }t          |¦  «        t          ||z
  dz
  ¦  «        dz  z  }||z  |z  S )Nr   rÚ   r8   r*   )rj   rk   r~   r@   rT   r   r   r   r    rÀ   r   r   r   r   r   r   )	r.   rÛ   rj   rk   rÜ   rÝ   rÞ   rß   rà   s	            r'   rB   zWishartDistribution.pdf^  s,  € Øœ& $Ô"3ˆ<ˆØÔ˜qÔ!ˆÝ�a�ÑÔð 	#Ý Ñ"Ô"ˆAÝ˜!�j­,Ð7Ñ8Ô8ð 	0Ýð &Ý(+¨A©¬ñ/ñ 0ô 0ð 0å Ñ-Ô-Ð-¨aÑ/µ!°A±$´$Ñ6ˆÝ•E˜+Ñ&Ô&Ñ'Ô'¨!¨a°©cµ!°A±$´$©h©-½:ÀaÍÈ!ÉÌÁfÈaÑ;PÔ;PÑ)PÑQˆÝ˜\Ñ*Ô*¨q¨bµ°1±´©gÑ6ˆÝ˜Q‘”¥1 Q¨¡U¨Q¡Y¡<¤<°¡>Ñ2ˆØ�u‰}˜uÑ$Ð$r(   Nrá   rF   r(   r'   rz   rz   H  sz   € € € € € à%€IàðKð Kñ „\ðKð ð(ð (ñ „Xð(ð ð'ð 'ñ „Xð'ð%ð %ð %ð %ð %r(   rz   c                 óz   — t          |t          ¦  «        rt          |¦  «        }t          | t          ||f¦  «        S )aÉ  
    Creates a random variable with Wishart Distribution.

    The density of the said distribution can be found at [1].

    Parameters
    ==========

    n: Positive Real number
        Represents degrees of freedom
    scale_matrix: Positive definite real square matrix
        Scale Matrix

    Returns
    =======

    RandomSymbol

    Examples
    ========

    >>> from sympy.stats import density, Wishart
    >>> from sympy import MatrixSymbol, symbols
    >>> n = symbols('n', positive=True)
    >>> W = Wishart('W', n, [[2, 1], [1, 2]])
    >>> X = MatrixSymbol('X', 2, 2)
    >>> density(W)(X).doit()
    exp(Trace(Matrix([
    [-1/3,  1/6],
    [ 1/6, -1/3]])*X))*Determinant(X)**(n/2 - 3/2)/(2**n*3**(n/2)*sqrt(pi)*gamma(n/2)*gamma(n/2 - 1/2))
    >>> density(W)([[1, 0], [0, 1]]).doit()
    exp(-2/3)/(2**n*3**(n/2)*sqrt(pi)*gamma(n/2)*gamma(n/2 - 1/2))

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Wishart_distribution

    )r@   rT   r   r[   rz   )r4   rj   rk   s      r'   ÚWishartrì   l  s<   € õP �,¥Ñ%Ô%ð 5Ý& |Ñ4Ô4ˆÝˆfÕ)¨A¨|Ð+<Ñ=Ô=Ð=r(   c                   óZ   — e Zd ZdZed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Z	dS )r{   )rv   rw   rx   c           	      ó2  — t          |t          ¦  «        st          |j        d¦  «         t          |t          ¦  «        st          |j        d¦  «         t          |j        d¦  «         t          |j        d¦  «         | j        d         }| j        d         }t          |j        d         |k    dt          |¦  «        ›dt          |¦  «        ›�¦  «         t          |j        d         |k    dt          |¦  «        ›dt          |¦  «        ›�¦  «         d S )	NrÊ   ú)Scale matrix 1 should be be square matrixú)Scale matrix 2 should be be square matrixr   r*   ú"Scale matrix 1 should be of shape ú x ú"Scale matrix 2 should be of shape )r@   r   r   rÎ   rÏ   r~   rÀ   )rv   rw   rx   rj   rÜ   s        r'   rV   zMatrixNormalDistribution.checkŸ  s:  € å˜.­,Ñ7Ô7ð 	5Ý˜Ô<ð ?4ñ 5ô 5ð 5å˜.­,Ñ7Ô7ð 	5Ý˜Ô<ð ?4ñ 5ô 5ð 5å�^Ô-ð 0ñ 	ô 	ð 	å�^Ô-ð 0ñ 	ô 	ð 	àÔ! !Ô$ˆØÔ! !Ô$ˆÝ�^Ô)¨!Ô,°Ò1Ð1Ý! !™fœf˜f˜f¥c¨!¡f¤f fð4.ñ 	/ô 	/ð 	/å�^Ô)¨!Ô,°Ò1Ð1Ý! !™fœf˜f˜f¥c¨!¡f¤f fð4.ñ 	/ô 	/ð 	/ð 	/ð 	/r(   c                 óV   — | j         j        \  }}t          ||t          j        ¦  «        S r3   ©rv   r~   r   r   rÓ   ©r.   rj   rÜ   s      r'   r5   zMatrixNormalDistribution.set²  ó%   € àÔ#Ô)‰ˆˆ1Ý˜˜A�qœwÑ'Ô'Ð'r(   c                 ó   — | j         j        S r3   r‚   r-   s    r'   rW   z"MatrixNormalDistribution.dimension·  ó   € àÔ#Ô)Ð)r(   c                 óž  — | j         | j        | j        }}}|j        \  }}t	          |t
          ¦  «        rt          |¦  «        }t	          |t          t          f¦  «        st          dt          |¦  «        z  ¦  «        ‚t          |¦  «        t          ||z
  ¦  «        z  t          |¦  «        z  ||z
  z  }t          t          |¦  «         t          d¦  «        z  ¦  «        }dt           z  t          ||z  ¦  «        dz  z  t#          |¦  «        t          |¦  «        dz  z  z  t#          |¦  «        t          |¦  «        dz  z  z  }	||	z  S )NrÚ   r8   )rv   rw   rx   r~   r@   rT   r   r   r   r    rÀ   r   r   r   r   r   r   r   )
r.   rÛ   ÚMÚUÚVrj   rÜ   rÞ   ÚnumÚdens
             r'   rB   zMatrixNormalDistribution.pdf»  s)  € ØÔ&¨Ô(;¸TÔ=Pˆaˆ1ˆØŒw‰ˆˆ1Ý�a�ÑÔð 	#Ý Ñ"Ô"ˆAÝ˜!�j­,Ð7Ñ8Ô8ð 	0Ýð &Ý(+¨A©¬ñ/ñ 0ô 0ð 0å˜‘
”
�9 Q¨¡UÑ+Ô+Ñ+­G°A©J¬JÑ6¸¸A¹Ñ>ˆÝ•5˜‘<”<�-¥ !¡¤Ñ$Ñ%Ô%ˆØ•‰t•q˜˜1™‘v”v˜a‘xÑ ¥;¨q¡>¤>µA°a±D´D¸±FÑ#;Ñ;½kÈ!¹n¼nÍqÐQRÉtÌtÐTUÉvÑ>VÑVˆØ�3‰wˆr(   Nrá   rF   r(   r'   r{   r{   ›  sw   € € € € € àG€Iàð/ð /ñ „\ð/ð$ ð(ð (ñ „Xð(ð ð*ð *ñ „Xð*ðð ð ð ð r(   r{   c                 ó  — t          |t          ¦  «        rt          |¦  «        }t          |t          ¦  «        rt          |¦  «        }t          |t          ¦  «        rt          |¦  «        }|||f}t          | t          |¦  «        S )a·  
    Creates a random variable with Matrix Normal Distribution.

    The density of the said distribution can be found at [1].

    Parameters
    ==========

    location_matrix: Real ``n x p`` matrix
        Represents degrees of freedom
    scale_matrix_1: Positive definite matrix
        Scale Matrix of shape ``n x n``
    scale_matrix_2: Positive definite matrix
        Scale Matrix of shape ``p x p``

    Returns
    =======

    RandomSymbol

    Examples
    ========

    >>> from sympy import MatrixSymbol
    >>> from sympy.stats import density, MatrixNormal
    >>> M = MatrixNormal('M', [[1, 2]], [1], [[1, 0], [0, 1]])
    >>> X = MatrixSymbol('X', 1, 2)
    >>> density(M)(X).doit()
    exp(-Trace((Matrix([
    [-1],
    [-2]]) + X.T)*(Matrix([[-1, -2]]) + X))/2)/(2*pi)
    >>> density(M)([[3, 4]]).doit()
    exp(-4)/(2*pi)

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Matrix_normal_distribution

    )r@   rT   r   r[   r{   )r4   rv   rw   rx   r,   s        r'   rž   rž   È  s�   € õR �/¥4Ñ(Ô(ð ;Ý)¨/Ñ:Ô:ˆÝ�.¥$Ñ'Ô'ð 9Ý(¨Ñ8Ô8ˆÝ�.¥$Ñ'Ô'ð 9Ý(¨Ñ8Ô8ˆØ˜^¨^Ð<€DÝˆfÕ.°Ñ5Ô5Ð5r(   c                   óZ   — e Zd ZdZed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Z	dS )ÚMatrixStudentTDistribution)r¢   rv   rw   rx   c           	      ó„  — t          |t          ¦  «        st          |j        dk    d¦  «         t          |t          ¦  «        st          |j        dk    d¦  «         t          |j        dk    d¦  «         t          |j        dk    d¦  «         |j        d         }|j        d         }t          |j        d         |k    dt          |¦  «        ›dt          |¦  «        ›�¦  «         t          |j        d         |k    d	t          |¦  «        ›dt          |¦  «        ›�¦  «         t          | j        dk    d
¦  «         d S )NFrÊ   rï   rð   r   r*   rñ   rò   ró   z#Degrees of freedom must be positive)r@   r   r   rÎ   rÏ   r~   rÀ   rÐ   )r¢   rv   rw   rx   rj   rÜ   s         r'   rV   z MatrixStudentTDistribution.check  sˆ  € å˜.­,Ñ7Ô7ð 	cÝ˜Ô<ÀÒEð Hbñ cô cð cå˜.­,Ñ7Ô7ð 	cÝ˜Ô<ÀÒEð Hbñ cô cð cå�^Ô-°Ò6ð 9Bñ 	Cô 	Cð 	Cå�^Ô-°Ò6ð 9Bñ 	Cô 	Cð 	CàÔ! !Ô$ˆØÔ! !Ô$ˆÝ�^Ô)¨!Ô,°Ò1Ð1ÝJMÈaÉ&Ì&È&È&ÕRUÐVWÑRXÔRXÐRXð4Zñ 	[ô 	[ð 	[å�^Ô)¨!Ô,°Ò1Ð1ÝJMÈaÉ&Ì&È&È&ÕRUÐVWÑRXÔRXÐRXð4Zñ 	[ô 	[ð 	[å�R”^ uÒ,Ð.SÑTÔTÐTÐTÐTr(   c                 óV   — | j         j        \  }}t          ||t          j        ¦  «        S r3   rõ   rö   s      r'   r5   zMatrixStudentTDistribution.set  r÷   r(   c                 ó   — | j         j        S r3   r‚   r-   s    r'   rW   z$MatrixStudentTDistribution.dimension  rù   r(   c           	      óÐ  — ddl m} t          |t          ¦  «        rt	          |¦  «        }t          |t
          t          f¦  «        st          dt          |¦  «        z  ¦  «        ‚| j	        | j
        | j        | j        f\  }}}}|j        \  }}t          ||z   |z   dz
  dz  |¦  «        t          |¦  «        | dz  z  z  t          |¦  «        | dz  z  z  t           ||z  dz  z  t          ||z   dz
  dz  |¦  «        z  z  }	|	t           ||¦  «        t#          |¦  «        ||z
  z  t#          |¦  «        z  t%          ||z
  ¦  «        z  z   ¦  «        ||z   |z   dz
   dz  z  z  S )Nr   )ÚeyerÚ   r*   r8   )Úsympy.matrices.denser  r@   rT   r   r   r   r    rÀ   r¢   rv   rw   rx   r~   r   r   r   r   r   )
r.   rÛ   r  r¢   rû   ÚOmegaÚSigmarj   rÜ   ÚKs
             r'   rB   zMatrixStudentTDistribution.pdf  s�  € Ø,Ð,Ð,Ð,Ð,Ð,Ý�a�ÑÔð 	#Ý Ñ"Ô"ˆAÝ˜!�j­,Ð7Ñ8Ô8ð 	9Ýð /Ý14°Q±´ñ8ñ 9ô 9ð 9à"œg tÔ';¸TÔ=PÐRVÔReÐeÑˆˆAˆu�eØŒw‰ˆˆ1å˜˜Q™ ™
 Q™¨Ñ)¨1Ñ-Ô-µ¸EÑ0BÔ0BÀaÀRÈÁTÑ0JÑJÍ[ÐY^ÑM_ÔM_ÐcdÐbdÐefÑbfÑMgÑgÝ�a˜‘c˜!‘e‰}�z¨2°©6°A©:°q©.¸!Ñ<Ô<Ñ<ñ>ˆà•K   A¡¤­°©¬¸¸Q¹Ñ)?ÅÈÁÄÑ)NÍyÐYZÐ]^ÑY^ÑO_ÔO_Ñ)_Ñ _Ñ`Ô`Ø˜‘F˜Q‘J ‘MÐ" 1Ñ$ñ&ñ &ð 	&r(   Nrá   rF   r(   r'   r  r  ý  sz   € € € € € àM€IàðUð Uñ „\ðUð& ð(ð (ñ „Xð(ð ð*ð *ñ „Xð*ð&ð &ð &ð &ð &r(   r  c                 ó  — t          |t          ¦  «        rt          |¦  «        }t          |t          ¦  «        rt          |¦  «        }t          |t          ¦  «        rt          |¦  «        }||||f}t          | t          |¦  «        S )a˜  
    Creates a random variable with Matrix Gamma Distribution.

    The density of the said distribution can be found at [1].

    Parameters
    ==========

    nu: Positive Real number
        degrees of freedom
    location_matrix: Positive definite real square matrix
        Location Matrix of shape ``n x p``
    scale_matrix_1: Positive definite real square matrix
        Scale Matrix of shape ``p x p``
    scale_matrix_2: Positive definite real square matrix
        Scale Matrix of shape ``n x n``

    Returns
    =======

    RandomSymbol

    Examples
    ========

    >>> from sympy import MatrixSymbol,symbols
    >>> from sympy.stats import density, MatrixStudentT
    >>> v = symbols('v',positive=True)
    >>> M = MatrixStudentT('M', v, [[1, 2]], [[1, 0], [0, 1]], [1])
    >>> X = MatrixSymbol('X', 1, 2)
    >>> density(M)(X)
    gamma(v/2 + 1)*Determinant((Matrix([[-1, -2]]) + X)*(Matrix([
    [-1],
    [-2]]) + X.T) + Matrix([[1]]))**(-v/2 - 1)/(pi**1.0*gamma(v/2)*Determinant(Matrix([[1]]))**1.0*Determinant(Matrix([
    [1, 0],
    [0, 1]]))**0.5)

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Matrix_t-distribution

    )r@   rT   r   r[   r  )r4   r¢   rv   rw   rx   r,   s         r'   ÚMatrixStudentTr  /  sƒ   € õX �/¥4Ñ(Ô(ð ;Ý)¨/Ñ:Ô:ˆÝ�.¥$Ñ'Ô'ð 9Ý(¨Ñ8Ô8ˆÝ�.¥$Ñ'Ô'ð 9Ý(¨Ñ8Ô8ˆØ� °Ð@€DÝˆfÕ0°$Ñ7Ô7Ð7r(   N)2Úmathr   Úsympy.core.basicr   Úsympy.core.numbersr   Úsympy.core.singletonr   Ú&sympy.functions.elementary.exponentialr   Ú'sympy.functions.special.gamma_functionsr   Úsympy.core.sympifyr	   r
   Úsympy.matricesr   r   r   r   r   r   r   r   r   Úsympy.stats.rvr   r   r   r   r   r   r   Úsympy.externalr   r   r[   r]   r‘   r—   rÁ   r¶   rÅ   rä   rz   rì   r{   rž   r  r  rF   r(   r'   ú<module>r     s�  ðØ Ð Ð Ð Ð Ð à "Ð "Ð "Ð "Ð "Ð "Ø !Ð !Ð !Ð !Ð !Ð !Ø "Ð "Ð "Ð "Ð "Ð "Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø >Ð >Ð >Ð >Ð >Ð >Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0ð*ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *ðKð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kà (Ð (Ð (Ð (Ð (Ð (ð)Xð )Xð )Xð )Xð )X�6ñ )Xô )Xð )XðXð ð ð#Pð #Pð #Pð #Pð #Pñ #Pô #Pð #PðLPð Pð Pð Pð Pñ Pô Pð Pð>&Qð &Qð &Qð &Qð &Qñ &Qô &Qð &QðR ØØØð	ð Ð ð'ð 'ð 'ð 'ð '˜ ~ñ 'ô 'ð 'ð`#%ð #%ð #%ð #%ð #%Ð0ñ #%ô #%ð #%ðJ-Lð -Lð -Lðd"%ð "%ð "%ð "%ð "%Ð,ñ "%ô "%ð "%ðH*>ð *>ð *>ð^+ð +ð +ð +ð +Ð1ñ +ô +ð +ðZ06ð 06ð 06ðj.&ð .&ð .&ð .&ð .&Ð!3ñ .&ô .&ð .&ðd38ð 38ð 38ð 38ð 38r(   