
    wgU                        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" Z1y#)$    )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                   x    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y	)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        e/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/sympy/stats/matrix_distributions.pyr!   zMatrixPSpace.__new__   sQ    $u  U%5%5<==}}S#|UE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    499Q< r(   c                 V    t        | j                  | j                  j                        S N)r   symbolr$   setr-   s    r'   domainzMatrixPSpace.domain#   s    DKK):):)>)>??r(   c                 f    t        | j                  | j                  d   | j                  d   |       S )N      )r   r4   r,   r-   s    r'   valuezMatrixPSpace.value'   s'    !$++tyy|TYYq\4PPr(   c                     | j                   hS r3   )r:   r-   s    r'   valueszMatrixPSpace.values+   s    

|r(   c                     |j                  t              }t        |      dkD  st        |t              st	        d      | j
                  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/   sQ    jj+,s8a<
41C D% '5 6 6   $$T**r(   Nc                 V    | j                   | j                  j                  |||      iS )zu
        Internal sample method

        Returns dictionary mapping RandomMatrixSymbol to realization value.
        )libraryseed)r:   r$   sample)r.   sizerG   rH   s       r'   rI   zMatrixPSpace.sample7   s,     

D--44T7QU4VWWr(    scipyN)__name__
__module____qualname____doc__r!   propertyr$   r4   r6   r:   r<   rE   rI   rL   r(   r'   r   r      sn    C 56L/0F@ @ Q Q  +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[   @   sU    GT"#D:DDJJ
..C&$AA7F<<r(   c                   (    e Zd ZdZddZed        Zy)SampleMatrixScipyz7Returns the sample from scipy of the given distributionNc                 (    | j                  |||      S r3   )_sample_scipyr"   rX   rJ   rH   s       r'   r!   zSampleMatrixScipy.__new__K         tT22r(   c                   
 ddl m
 ddl}
fd
fdd}d d d}|j                         }|j                  j
                  |vry|t        |t              r|j                  j                  |	      }n|} ||j                  j
                     |t        |      |      }	|	j                  | ||j                  j
                     |      z         S )
zSample from SciPy.r   )statsNc                     j                   j                  t        | j                        t	        | j
                  t              |      S )N)dfscalerJ   )wishartrvsintnr   scale_matrixfloatrX   rJ   
rand_statescipy_statss      r'   r/   z1SampleMatrixScipy._sample_scipy.<locals>.<lambda>U   s>    +BUBUBYBYtvv;l43D3De&LSW CZ CY r(   c                     j                   j                  t        | j                  t              t        | j
                  t              t        | j                  t              ||      S )N)meanrowcovcolcovrJ   random_state)matrix_normalrh   r   location_matrixrl   scale_matrix_1scale_matrix_2rm   s      r'   r/   z1SampleMatrixScipy._sample_scipy.<locals>.<lambda>W   sV    {G`G`GdGd!$"6"6>#D$7$7?#D$7$7?dYc He He r(   WishartDistributionMatrixNormalDistributionc                 .    | j                   j                  S r3   rk   shaperX   s    r'   r/   z1SampleMatrixScipy._sample_scipy.<locals>.<lambda>^       0A0A0G0G r(   c                 .    | j                   j                  S r3   rv   r~   r   s    r'   r/   z1SampleMatrixScipy._sample_scipy.<locals>.<lambda>_       d6J6J6P6P r(   rH   )rM   rc   numpykeys	__class__rN   r@   ri   randomdefault_rngr   reshape)r"   rX   rJ   rH   r   scipy_rv_mapsample_shape	dist_listrn   sampro   s             @r'   r_   zSampleMatrixScipy._sample_scipyN   s     	/$Y)e
 $H)P

 !%%'	>>"")3<:dC011t1<JJ4|DNN334T4:zR||D#H<0G0G#H#NNOOr(   r3   )rN   rO   rP   rQ   r!   classmethodr_   rL   r(   r'   r]   r]   I   s     A3 P Pr(   r]   c                   (    e Zd ZdZddZed        Zy)SampleMatrixNumpyz7Returns the sample from numpy of the given distributionNc                 (    | j                  |||      S r3   )_sample_numpyr`   s       r'   r!   zSampleMatrixNumpy.__new__s   ra   r(   c                 |   i }i }|j                         }|j                  j                  |vryddl}|t	        |t
              r|j                  j                  |      }n|} ||j                  j                     |t        |      |      }	|	j                  | ||j                  j                     |      z         S )zSample from NumPy.Nr   r   )
r   r   rN   r   r@   ri   r   r   r   r   )
r"   rX   rJ   rH   numpy_rv_mapr   r   r   rn   r   s
             r'   r   zSampleMatrixNumpy._sample_numpyv   s    

 !%%'	>>"")3<:dC011t1<JJ4|DNN334T4:zR||D#H<0G0G#H#NNOOr(   r3   )rN   rO   rP   rQ   r!   r   r   rL   r(   r'   r   r   o   s     A3 P Pr(   r   c                   (    e Zd ZdZddZed        Zy)SampleMatrixPymcz6Returns the sample from pymc of the given distributionNc                 (    | j                  |||      S r3   )_sample_pymcr`   s       r'   r!   zSampleMatrixPymc.__new__   s    dD11r(   c           	      8  	 	 ddl 		fd	fdd}d d d}|j                         }|j                  j
                  |vryddl}|j                  d	      j                  |j                         	j                         5   ||j                  j
                     |       	j                  t        |      d
d|dd      d   }ddd       j                  | ||j                  j
                     |      z         S # t        $ r ddl	Y w xY w# 1 sw Y   NxY w)zSample from PyMC.r   Nc           	          j                  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>   sY    T5F5Fs 4 4e<#D$7$7?#D$7$7?**00	 6G 62 r(   c                     j                  dt        | j                        t        | j                  t
                    S )Nr   )nur   )WishartBartlettri   rj   r   rk   rl   r   s    r'   r/   z/SampleMatrixPymc._sample_pymc.<locals>.<lambda>   s5    0D0DStvv;,t/@/@%"H 1E 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ModelrI   r   r   )
r"   rX   rJ   rH   pymc_rv_mapr   r   r   sampsr   s
            @r'   r   zSampleMatrixPymc._sample_pymc   s#   	!)2
$J
 $H)P

  $$&	>>"")3&!**7==9ZZ\ 	d0K//06KKd4j[_v{  Y^K  _  `c  dE	d }}T$IL1H1H$I$$OOPP5  	! 	!.	d 	ds   C<  AD<DDDr3   )rN   rO   rP   rQ   r!   r   r   rL   r(   r'   r   r      s     @2 Q Qr(   r   )rM   r   r   r   c                   4    e Zd ZdZd Zed        Zd ZddZy)MatrixDistributionz1
    Abstract class for Matrix Distribution.
    c                     |D cg c](  }t        |t              rt        |      n
t        |      * }}t	        j
                  | g| S c c}w r3   )r@   rT   r   r
   r   r!   )r"   r,   args      r'   r!   zMatrixDistribution.__new__   sR    .24'* )33(=$c]# 4 4}}S(4((4s   -A
c                       y r3   rL   r+   s    r'   rV   zMatrixDistribution.check   s    r(   c                 Z    t        |t              rt        |      }| j                  |      S r3   )r@   rT   r   rB   )r.   rC   s     r'   __call__zMatrixDistribution.__call__   s$    dD!"4(Dxx~r(   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.
        )rM   r   r   r   z&Sampling from %s is not supported yet.zFailed to import %szSampling for z# is not currently implemented from )rA   strr   r    _get_sample_class_matrixrvr   rN   )r.   rJ   rG   rH   	librariesr   s         r'   rI   zMatrixDistribution.sample   s     8	)#%&N*-g,'7 8 8W%2W<==*73D$EL!>>**G5 	r(   rK   )	rN   rO   rP   rQ   r!   staticmethodrV   r   rI   rL   r(   r'   r   r      s*    )
  
r(   r   c                   F    e Zd ZdZed        Zed        Zed        Zd Z	y)MatrixGammaDistributionalphabetark   c                     t        |t              st        |j                  d       t        |j                  d       t        | j
                  d       t        |j
                  d       y )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   sX    ,5:: =4 5\++ . 	U&&(MNT%%'LMr(   c                 j    | j                   j                  d   }t        ||t        j                        S r1   rk   r~   r   r   Realsr.   ks     r'   r5   zMatrixGammaDistribution.set   +    ##A&Aqww''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    $(JJ		4;L;L\tq!a"A!j,78 &(+A/ 0 0--a/$6E+&'$5/Zq=Q)QR\*uf5Q51QU8A:#56u}u$$r(   N
rN   rO   rP   	_argnamesr   rV   rR   r5   rW   rB   rL   r(   r'   r   r      sH    1IN N ( ( ' '%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     s0    V ,%&|4f-t\/JKKr(   c                   F    e Zd ZdZed        Zed        Zed        Zd Z	y)rz   rj   rk   c                     t        |t              st        |j                  d       t        |j                  d       t        | j
                  d       y )Nr   r   r   r   r   s     r'   rV   zWishartDistribution.checkL  sE    ,5:: =4 5\++ . 	Q]]$IJr(   c                 j    | 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"3<q!a"A!j,78 &(+A/ 0 0--a/!A$6E+&'!ac!A$h-:a!fa;P)PQ\*qb1g6Q1QUQY<>2u}u$$r(   Nr   rL   r(   r'   rz   rz   H  sH    %IK K ( ( ' '%r(   rz   c                 ^    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 ,%&|4f)A|+<==r(   c                   F    e Zd ZdZed        Zed        Zed        Zd Z	y)r{   )rv   rw   rx   c           	          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        |             y )	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<< ?4 5.,7<< ?4 5^-- 0 	^-- 0 	!!!$!!!$^))!,1!!fc!f4. 	/^))!,1!!fc!f4. 	/r(   c                 j    | j                   j                  \  }}t        ||t        j                        S r3   rv   r~   r   r   r   r.   rj   r   s      r'   r5   zMatrixNormalDistribution.set  *    ##))1Aqww''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=Pa1ww1a"A!j,78 &(+A/ 0 0
9QU++GAJ6A>5<-!$%tq1vax ;q>AaDF#;;k!nqQRtTUv>VV3wr(   Nr   rL   r(   r'   r{   r{     sF    GI/ /$ ( ( * *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()/:.$'(8.$'(8^^<Df.55r(   c                   F    e Zd ZdZed        Zed        Zed        Zd Z	y)MatrixStudentTDistribution)r   rv   rw   rx   c           	      J   t        |t              st        |j                  dk7  d       t        |t              st        |j                  dk7  d       t        |j                  dk7  d       t        |j                  dk7  d       |j
                  d   }|j
                  d   }t        |j
                  d   |k(  dt        |      dt        |             t        |j
                  d   |k(  d	t        |      dt        |             t        | j                  dk7  d
       y )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<<E Hb c.,7<<E Hb c^--6 9B 	C^--6 9B 	C!!!$!!!$^))!,1JMa&RUVWRX4Z 	[^))!,1JMa&RUVWRX4Z 	[R^^u,.STr(   c                 j    | 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  sY   ,a"A!j,78 /14Q8 9 9"ggt';';T=P=PRVReReeAueww1Q
Q)1-E0BaRT0JJ[Y^M_cdbdefbfMggac!e}z26A:q.!<<>KAQ)?)NyYZ]^Y^O_)_ _`FQJM"1$& & 	&r(   Nr   rL   r(   r'   r   r     sH    MIU U& ( ( * *&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()/:.$'(8.$'(8@Df0$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
  rL   r(   r'   <module>r     s     " ! " 6 > 0* * *K K K ()X6 )XX#P #PLP P>&Q &QR 	 '~ '`#%0 #%J-Ld"%, "%H*>^+1 +Z06j.&!3 .&d38r(   