Ë
    7^(hà;  ã                   ó8  — 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 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!m"Z"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z) g d¢Z* e#jV                  e"«      d„ «       Z, G d„ de«      Z- G d„ de-«      Z. G d„ de.«      Z/ G d„ de.«      Z0 G d„ de.«      Z1d „ Z2d!„ Z3d"„ Z4d#„ Z5 G d$„ d%e-«      Z6 G d&„ d'e6«      Z7 G d(„ d)e6«      Z8 G d*„ d+e6«      Z9d,„ Z:d-„ Z;d.„ Z<d/„ Z=d0„ Z>d1„ Z?d2„ Z@y3)4é    )ÚProduct)ÚSum)ÚBasic)ÚLambda)ÚIÚpi)ÚS)ÚDummy)ÚAbs)Úexp)Úgamma)ÚIntegral)ÚMatrixSymbol)ÚTrace)ÚIndexedBase)Ú_sympify)Ú_symbol_converterÚDensityÚRandomMatrixSymbolÚ	is_random)ÚJointDistributionHandmade)ÚRandomMatrixPSpace)ÚArrayComprehension)ÚCircularEnsembleÚCircularUnitaryEnsembleÚCircularOrthogonalEnsembleÚCircularSymplecticEnsembleÚGaussianEnsembleÚGaussianUnitaryEnsembleÚGaussianOrthogonalEnsembleÚGaussianSymplecticEnsembleÚjoint_eigen_distributionÚJointEigenDistributionÚlevel_spacing_distributionc                  ó   — y)NT© )Úxs    ú^/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/stats/random_matrix_models.pyÚ_r)   #   s   € àó    c                   óH   — e Zd ZdZdd„Z ed„ «      Z ed„ «      Zd„ Zd„ Z	y)	ÚRandomMatrixEnsembleModelz¶
    Base class for random matrix ensembles.
    It acts as an umbrella and contains
    the methods common to all the ensembles
    defined in sympy.stats.random_matrix_models.
    Nc                 ó–   — t        |«      t        |«      }}|j                  dk(  rt        d|z  «      ‚t	        j
                  | ||«      S )NFzGDimension of the random matrices must be integers, received %s instead.)r   r   Ú
is_integerÚ
ValueErrorr   Ú__new__)ÚclsÚsymÚdims      r(   r0   z!RandomMatrixEnsembleModel.__new__/   sQ   € Ü$ SÓ)¬8°C«=ˆSˆØ�>‰>˜UÒ"Üð AØBEñGó Hð Hä�}‰}˜S # sÓ+Ð+r*   c                 ó    — | j                   d   S )Nr   ©Úargs©Úselfs    r(   ú<lambda>z"RandomMatrixEnsembleModel.<lambda>6   s   €  4§9¡9¨Q¡<€ r*   c                 ó    — | j                   d   S )Né   r5   r7   s    r(   r9   z"RandomMatrixEnsembleModel.<lambda>7   s   €  d§i¡i°¡l€ r*   c                 ó   — t        |«      S ©N)r   ©r8   Úexprs     r(   Údensityz!RandomMatrixEnsembleModel.density9   s   € Ü�t‹}Ðr*   c                 ó$   — | j                  |«      S r=   )r@   r>   s     r(   Ú__call__z"RandomMatrixEnsembleModel.__call__<   s   € Ø�|‰|˜DÓ!Ð!r*   r=   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r0   ÚpropertyÚsymbolÚ	dimensionr@   rB   r&   r*   r(   r,   r,   (   s.   „ ñó,ñ Ñ/Ó0€FÙÑ2Ó3€Iòó"r*   r,   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚGaussianEnsembleModela  
    Abstract class for Gaussian ensembles.
    Contains the properties common to all the
    gaussian ensembles.

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Random_matrix#Gaussian_ensembles
    .. [2] https://arxiv.org/pdf/1712.07903.pdf
    c                 óî   ‡— t        |«      }ˆfd„}t        ddd¬«      }t         ||«      |d|f«      j                  «       }d‰|z  z  ‰|z  |dz
  z  dz  |dz  z   z  }dt        z  |dz  z  }||z  |z  S )a  
        Helper function for computing normalization
        constant for joint probability density of eigen
        values of Gaussian ensembles.

        References
        ==========

        .. [1] https://en.wikipedia.org/wiki/Selberg_integral#Mehta's_integral
        c                 ó�   •— t        d‰t        | «      z  dz  z   «      t        t        j                  ‰t        d«      z  z   «      z  S )Nr;   é   )r   r	   ÚOne)ÚjÚbetas    €r(   r9   zGGaussianEnsembleModel._compute_normalization_constant.<locals>.<lambda>W   s7   ø€ œe A¨¬Q¨q«T©	°!©¡OÓ4´U¼1¿5¹5À4ÌÈ!ËÁ9Ñ;LÓ5MÑM€ r*   rP   T©ÚintegerÚpositiver;   rN   é   )r	   r
   r   Údoitr   )r8   rQ   ÚnÚ	prod_termrP   Úterm1Úterm2Úterm3s    `      r(   Ú_compute_normalization_constantz5GaussianEnsembleModel._compute_normalization_constantK   sŒ   ø€ ô ˆa‹DˆÛMˆ	Ü�#˜t¨dÔ3ˆÜ™	 !› q¨!¨Q iÓ0×5Ñ5Ó7ˆØ�D˜‘F‘˜t A™v q¨1¡u™~¨aÑ/°!°A±#Ñ5Ñ6ˆØ”2‘˜˜1™‘ˆØ�u‰}˜uÑ$Ð$r*   c           
      ó`  — | j                   }| j                  ||«      }t        d«      }t        ddd¬«      }t        ddd¬«      }t        ddd¬«      }t	        t        |«       dz  t        ||   dz  |d|f«      j                  «       z  «      }t        |t        t        ||   ||   z
  «      |z  ||dz   |f«      «      }	t         |	|«      j                  «       |d|dz
  f«      j                  «       }
t        ||   |d|f«      j                  «       }t        t        |«      ||
z  |z  «      S )	zˆ
        Helper function for computing the joint
        probability distribution of eigen values
        of the random matrix.
        ÚlÚiTrR   rP   ÚkrN   r;   )rI   r\   r   r
   r   r	   r   rV   r   r   r   r   Útuple)r8   rQ   rW   ÚZbnr^   r_   rP   r`   rY   Úsub_termrZ   Úsymss               r(   Ú!_compute_joint_eigen_distributionz7GaussianEnsembleModel._compute_joint_eigen_distribution^   s"  € ð �N‰NˆØ×2Ñ2°4¸Ó;ˆÜ˜ÓˆÜ�#˜t¨dÔ3ˆÜ�#˜t¨dÔ3ˆÜ�#˜t¨dÔ3ˆÜ”a˜“d�U˜1‘W¤ A a¡D¨!¡G¨a°°A¨YÓ 7× <Ñ <Ó >Ñ>Ó?ˆÜ˜!œW¤S¨¨1©°°!±©Ó%5°tÑ%;¸aÀÀQÁÈ¸]ÓKÓLˆÜ™ ›×(Ñ(Ó*¨Q°°1°q±5¨MÓ:×?Ñ?ÓAˆÜ! ! A¡$¨¨A¨q¨	Ó2×7Ñ7Ó9ˆÜ”e˜D“k E¨E¡M°3Ñ#6Ó7Ð7r*   N)rC   rD   rE   rF   r\   re   r&   r*   r(   rK   rK   ?   s   „ ñ
ò%ó&8r*   rK   c                   ó.   — e Zd Zed„ «       Zd„ Zd„ Zd„ Zy)ÚGaussianUnitaryEnsembleModelc                 ón   — | j                   }dt        |«      dz  z  t        t        |dz  «      dz  z  z  S ©NrN   )rI   r	   r   )r8   rW   s     r(   Únormalization_constantz3GaussianUnitaryEnsembleModel.normalization_constantq   s2   € à�N‰NˆØ”1�Q“4˜‘6‰{œR¤! A q¡D£'¨!¡)™_Ñ,Ð,r*   c                 óÞ   — | j                   | j                  }}t        d| ¬«      }t        d|||¬«      } t	        |t        t        |«       dz  t        |dz  «      z  «      |z  «      |«      S ©NÚP©ÚmodelÚH©ÚpspacerN   ©rI   rj   r   r   r   r   r	   r   )r8   r?   rW   ÚZGUEÚh_pspacerp   s         r(   r@   z$GaussianUnitaryEnsembleModel.densityv   óf   € Ø—.‘. $×"=Ñ"=ˆ4ˆÜ% c°Ô6ˆÜ˜s A q°Ô:ˆØ9Œv�aœœa ›d˜U 1™W¤u¨Q°©T£{Ñ2Ó3°DÑ8Ó9¸$Ó?Ð?r*   c                 ó6   — | j                  t        d«      «      S ri   ©re   r	   r7   s    r(   r"   z5GaussianUnitaryEnsembleModel.joint_eigen_distribution|   ó   € Ø×5Ñ5´a¸³dÓ;Ð;r*   c                 ó†   — t        d«      }dt        dz  z  |dz  z  t        dt        z  |dz  z  «      z  }t        ||«      S )NÚsé    rN   éüÿÿÿ©r
   r   r   r   ©r8   r{   Úfs      r(   r$   z7GaussianUnitaryEnsembleModel.level_spacing_distribution   sC   € Ü�#‹JˆØ”�A‘‰X˜˜1™Ñœc 2¤b¡5¨!¨Q©$¡,Ó/Ñ/ˆÜ�a˜‹|Ðr*   N©rC   rD   rE   rG   rj   r@   r"   r$   r&   r*   r(   rg   rg   p   s$   „ Øñ-ó ð-ò@ò<ór*   rg   c                   ó.   — e Zd Zed„ «       Zd„ Zd„ Zd„ Zy)ÚGaussianOrthogonalEnsembleModelc           	      ó”   — | j                   }t        d||«      }t        t        t	        |«       dz  t        |dz  «      z  «      «      S )NÚ_HrU   rN   ©rI   r   r   r   r	   r   ©r8   rW   r…   s      r(   rj   z6GaussianOrthogonalEnsembleModel.normalization_constant…   s@   € à�N‰NˆÜ˜$  1Ó%ˆÜœœQ˜q›T˜E !™G¤e¨B°©E£lÑ2Ó3Ó4Ð4r*   c                 óÞ   — | j                   | j                  }}t        d| ¬«      }t        d|||¬«      } t	        |t        t        |«       dz  t        |dz  «      z  «      |z  «      |«      S )Nrm   rn   rp   rq   rU   rN   rs   )r8   r?   rW   ÚZGOEru   rp   s         r(   r@   z'GaussianOrthogonalEnsembleModel.density‹   rv   r*   c                 ó@   — | j                  t        j                  «      S r=   ©re   r	   rO   r7   s    r(   r"   z8GaussianOrthogonalEnsembleModel.joint_eigen_distribution‘   ó   € Ø×5Ñ5´a·e±eÓ<Ð<r*   c                 ó|   — t        d«      }t        dz  |z  t        t         dz  |dz  z  «      z  }t        ||«      S )Nr{   rN   rU   r~   r   s      r(   r$   z:GaussianOrthogonalEnsembleModel.level_spacing_distribution”   s<   € Ü�#‹JˆÜ�‰T�1‰H”Sœ2˜#˜a™%  A¡™Ó&Ñ&ˆÜ�a˜‹|Ðr*   Nr�   r&   r*   r(   rƒ   rƒ   „   s$   „ Øñ5ó ð5ò
@ò=ór*   rƒ   c                   ó.   — e Zd Zed„ «       Zd„ Zd„ Zd„ Zy)ÚGaussianSymplecticEnsembleModelc           	      óŽ   — | j                   }t        d||«      }t        t        t	        |«       t        |dz  «      z  «      «      S )Nr…   rN   r†   r‡   s      r(   rj   z6GaussianSymplecticEnsembleModel.normalization_constantš   s<   € à�N‰NˆÜ˜$  1Ó%ˆÜœœQ˜q›T˜E¤E¨"¨a©%£LÑ0Ó1Ó2Ð2r*   c                 óØ   — | j                   | j                  }}t        d| ¬«      }t        d|||¬«      } t	        |t        t        |«       t        |dz  «      z  «      |z  «      |«      S rl   rs   )r8   r?   rW   ÚZGSEru   rp   s         r(   r@   z'GaussianSymplecticEnsembleModel.density    sb   € Ø—.‘. $×"=Ñ"=ˆ4ˆÜ% c°Ô6ˆÜ˜s A q°Ô:ˆØ7Œv�aœœa ›d˜U¤U¨1¨a©4£[Ñ0Ó1°$Ñ6Ó7¸Ó=Ð=r*   c                 ó6   — | j                  t        d«      «      S ©NrU   rx   r7   s    r(   r"   z8GaussianSymplecticEnsembleModel.joint_eigen_distribution¦   ry   r*   c                 óÂ   — t        d«      }t        d«      dz  t        d«      dz  t        dz  z  z  |dz  z  t        ddt        z  z  |dz  z  «      z  }t	        ||«      S )	Nr{   rN   é   é   é   rU   iÀÿÿÿé	   )r
   r	   r   r   r   r   s      r(   r$   z:GaussianSymplecticEnsembleModel.level_spacing_distribution©   s^   € Ü�#‹JˆÜ�‹d�B‰hœ!˜A›$ ™'¤B¨¡EÑ*Ñ+¨a°©dÑ3´C¸¸aÄ¹d¹ÀQÈÁTÑ8IÓ4JÑJˆÜ�a˜‹|Ðr*   Nr�   r&   r*   r(   r�   r�   ™   s#   „ Øñ3ó ð3ò
>ò<ór*   r�   c                 ó~   — t        | «      t        |«      }} t        | |«      }t        | |¬«      }t	        | |||¬«      S ©Nrn   rq   )r   r   rK   r   r   ©r2   r3   ro   Úrmps       r(   r   r   ®   ó=   € Ü  Ó%¤x°£}ˆ€CÜ! # sÓ+€EÜ
˜S¨Ô
.€CÜ˜c 3¨°CÔ8Ð8r*   c                 ó~   — t        | «      t        |«      }} t        | |«      }t        | |¬«      }t	        | |||¬«      S )a-  
    Represents Gaussian Unitary Ensembles.

    Examples
    ========

    >>> from sympy.stats import GaussianUnitaryEnsemble as GUE, density
    >>> from sympy import MatrixSymbol
    >>> G = GUE('U', 2)
    >>> X = MatrixSymbol('X', 2, 2)
    >>> density(G)(X)
    exp(-Trace(X**2))/(2*pi**2)
    rn   rq   )r   r   rg   r   r   rœ   s       r(   r   r   ´   s?   € ô ! Ó%¤x°£}ˆ€CÜ(¨¨cÓ2€EÜ
˜S¨Ô
.€CÜ˜c 3¨°CÔ8Ð8r*   c                 ó~   — t        | «      t        |«      }} t        | |«      }t        | |¬«      }t	        | |||¬«      S )aN  
    Represents Gaussian Orthogonal Ensembles.

    Examples
    ========

    >>> from sympy.stats import GaussianOrthogonalEnsemble as GOE, density
    >>> from sympy import MatrixSymbol
    >>> G = GOE('U', 2)
    >>> X = MatrixSymbol('X', 2, 2)
    >>> density(G)(X)
    exp(-Trace(X**2)/2)/Integral(exp(-Trace(_H**2)/2), _H)
    rn   rq   )r   r   rƒ   r   r   rœ   s       r(   r    r    Ç   ó?   € ô ! Ó%¤x°£}ˆ€CÜ+¨C°Ó5€EÜ
˜S¨Ô
.€CÜ˜c 3¨°CÔ8Ð8r*   c                 ó~   — t        | «      t        |«      }} t        | |«      }t        | |¬«      }t	        | |||¬«      S )aN  
    Represents Gaussian Symplectic Ensembles.

    Examples
    ========

    >>> from sympy.stats import GaussianSymplecticEnsemble as GSE, density
    >>> from sympy import MatrixSymbol
    >>> G = GSE('U', 2)
    >>> X = MatrixSymbol('X', 2, 2)
    >>> density(G)(X)
    exp(-2*Trace(X**2))/Integral(exp(-2*Trace(_H**2)), _H)
    rn   rq   )r   r   r�   r   r   rœ   s       r(   r!   r!   Ú   r¡   r*   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚCircularEnsembleModelzÝ
    Abstract class for Circular ensembles.
    Contains the properties and methods
    common to all the circular ensembles.

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Circular_ensemble
    c                 ó   — t        d| z  «      ‚)NzeSupport for Haar measure hasn't been implemented yet, therefore the density of %s cannot be computed.)ÚNotImplementedErrorr>   s     r(   r@   zCircularEnsembleModel.densityø   s!   € ô "ð #;à<@ñ#Bó Cð 	Cr*   c                 óR  — | j                   }dt        z  |z  t        ||z  dz  dz   «      t        t        |dz  dz   «      «      |z  z  z  }t	        d«      }t        dd¬«      t        dd¬«      t        dd¬«      }}}t        ||   |d|f«      j                  «       }t        t        t        t        t        ||   z  «      t        t        ||   z  «      z
  «      |z  ||dz   |f«      j                  «       |d|dz
  f«      j                  «       }	t        t        |«      |	|z  «      S )	zª
        Helper function to compute the joint distribution of phases
        of the complex eigen values of matrices belonging to any
        circular ensembles.
        rN   r;   Útr_   T)rS   rP   r`   )rI   r   r   r	   r   r
   r   rV   r   r   r   r   r   ra   )
r8   rQ   rW   rb   r¨   r_   rP   r`   rd   r€   s
             r(   re   z7CircularEnsembleModel._compute_joint_eigen_distributionÿ   s  € ð �N‰NˆØ”"‘�q‰yœ5  a¡¨¡¨A¡Ó.¬q´°t¸A±vÀ±zÓ1BÓ/CÀQÑ/FÑFÑGˆÜ˜ÓˆÜ˜ dÔ+¬U°3ÀÔ-EÜ˜ dÔ+ð ˆ1ˆä! ! A¡$¨¨A¨q¨	Ó2×7Ñ7Ó9ˆÜ”GœC¤¤A a¨¡d¡F£¬c´!°A°a±D±&«kÑ 9Ó:¸DÑ@À1ÀaÈ!ÁeÈQÀ-ÓP×UÑUÓWØ˜˜1˜q™5�Mó#ß#'¡4£6ð 	
ä”e˜D“k 1 S¡5Ó)Ð)r*   N)rC   rD   rE   rF   r@   re   r&   r*   r(   r¤   r¤   í   s   „ ñ	òCó*r*   r¤   c                   ó   — e Zd Zd„ Zy)ÚCircularUnitaryEnsembleModelc                 ó6   — | j                  t        d«      «      S ri   rx   r7   s    r(   r"   z5CircularUnitaryEnsembleModel.joint_eigen_distribution  ry   r*   N©rC   rD   rE   r"   r&   r*   r(   rª   rª     ó   „ ó<r*   rª   c                   ó   — e Zd Zd„ Zy)ÚCircularOrthogonalEnsembleModelc                 ó@   — | j                  t        j                  «      S r=   r‹   r7   s    r(   r"   z8CircularOrthogonalEnsembleModel.joint_eigen_distribution  rŒ   r*   Nr¬   r&   r*   r(   r¯   r¯     s   „ ó=r*   r¯   c                   ó   — e Zd Zd„ Zy)ÚCircularSymplecticEnsembleModelc                 ó6   — | j                  t        d«      «      S r”   rx   r7   s    r(   r"   z8CircularSymplecticEnsembleModel.joint_eigen_distribution  ry   r*   Nr¬   r&   r*   r(   r²   r²     r­   r*   r²   c                 ó~   — t        | «      t        |«      }} t        | |«      }t        | |¬«      }t	        | |||¬«      S r›   )r   r   r¤   r   r   rœ   s       r(   r   r     rž   r*   c                 ó~   — t        | «      t        |«      }} t        | |«      }t        | |¬«      }t	        | |||¬«      S )a8  
    Represents Circular Unitary Ensembles.

    Examples
    ========

    >>> from sympy.stats import CircularUnitaryEnsemble as CUE
    >>> from sympy.stats import joint_eigen_distribution
    >>> C = CUE('U', 1)
    >>> joint_eigen_distribution(C)
    Lambda(t[1], Product(Abs(exp(I*t[_j]) - exp(I*t[_k]))**2, (_j, _k + 1, 1), (_k, 1, 0))/(2*pi))

    Note
    ====

    As can be seen above in the example, density of CiruclarUnitaryEnsemble
    is not evaluated because the exact definition is based on haar measure of
    unitary group which is not unique.
    rn   rq   )r   r   rª   r   r   rœ   s       r(   r   r   !  s?   € ô( ! Ó%¤x°£}ˆ€CÜ(¨¨cÓ2€EÜ
˜S¨Ô
.€CÜ˜c 3¨°CÔ8Ð8r*   c                 ó~   — t        | «      t        |«      }} t        | |«      }t        | |¬«      }t	        | |||¬«      S )a>  
    Represents Circular Orthogonal Ensembles.

    Examples
    ========

    >>> from sympy.stats import CircularOrthogonalEnsemble as COE
    >>> from sympy.stats import joint_eigen_distribution
    >>> C = COE('O', 1)
    >>> joint_eigen_distribution(C)
    Lambda(t[1], Product(Abs(exp(I*t[_j]) - exp(I*t[_k])), (_j, _k + 1, 1), (_k, 1, 0))/(2*pi))

    Note
    ====

    As can be seen above in the example, density of CiruclarOrthogonalEnsemble
    is not evaluated because the exact definition is based on haar measure of
    unitary group which is not unique.
    rn   rq   )r   r   r¯   r   r   rœ   s       r(   r   r   :  ó?   € ô( ! Ó%¤x°£}ˆ€CÜ+¨C°Ó5€EÜ
˜S¨Ô
.€CÜ˜c 3¨°CÔ8Ð8r*   c                 ó~   — t        | «      t        |«      }} t        | |«      }t        | |¬«      }t	        | |||¬«      S )aA  
    Represents Circular Symplectic Ensembles.

    Examples
    ========

    >>> from sympy.stats import CircularSymplecticEnsemble as CSE
    >>> from sympy.stats import joint_eigen_distribution
    >>> C = CSE('S', 1)
    >>> joint_eigen_distribution(C)
    Lambda(t[1], Product(Abs(exp(I*t[_j]) - exp(I*t[_k]))**4, (_j, _k + 1, 1), (_k, 1, 0))/(2*pi))

    Note
    ====

    As can be seen above in the example, density of CiruclarSymplecticEnsemble
    is not evaluated because the exact definition is based on haar measure of
    unitary group which is not unique.
    rn   rq   )r   r   r²   r   r   rœ   s       r(   r   r   S  r·   r*   c                 ó†   — t        | t        «      st        d| z  «      ‚| j                  j                  j                  «       S )aA  
    For obtaining joint probability distribution
    of eigen values of random matrix.

    Parameters
    ==========

    mat: RandomMatrixSymbol
        The matrix symbol whose eigen values are to be considered.

    Returns
    =======

    Lambda

    Examples
    ========

    >>> from sympy.stats import GaussianUnitaryEnsemble as GUE
    >>> from sympy.stats import joint_eigen_distribution
    >>> U = GUE('U', 2)
    >>> joint_eigen_distribution(U)
    Lambda((l[1], l[2]), exp(-l[1]**2 - l[2]**2)*Product(Abs(l[_i] - l[_j])**2, (_j, _i + 1, 2), (_i, 1, 1))/pi)
    z&%s is not of type, RandomMatrixSymbol.)Ú
isinstancer   r/   rr   ro   r"   ©Úmats    r(   r"   r"   l  s9   € ô2 �cÔ-Ô.ÜÐAÀ3ÑGÓHÐHØ�:‰:×Ñ×4Ñ4Ó6Ð6r*   c                 ó‚   — | j                  d¬«      }t        d„ t        |«      D «       «      st        d«      ‚t	        |Ž S )a¦  
    Creates joint distribution of eigen values of matrices with random
    expressions.

    Parameters
    ==========

    mat: Matrix
        The matrix under consideration.

    Returns
    =======

    JointDistributionHandmade

    Examples
    ========

    >>> from sympy.stats import Normal, JointEigenDistribution
    >>> from sympy import Matrix
    >>> A = [[Normal('A00', 0, 1), Normal('A01', 0, 1)],
    ... [Normal('A10', 0, 1), Normal('A11', 0, 1)]]
    >>> JointEigenDistribution(Matrix(A))
    JointDistributionHandmade(-sqrt(A00**2 - 2*A00*A11 + 4*A01*A10 + A11**2)/2
    + A00/2 + A11/2, sqrt(A00**2 - 2*A00*A11 + 4*A01*A10 + A11**2)/2 + A00/2 + A11/2)

    T)Úmultiplec              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr=   )r   )Ú.0Úeigenvals     r(   ú	<genexpr>z)JointEigenDistribution.<locals>.<genexpr>¦  s   è ø€ ÒB xŒy˜×"ÑBùs   ‚zWEigen values do not have any random expression, joint distribution cannot be generated.)Ú	eigenvalsÚallÚsetr/   r   )r¼   rÃ   s     r(   r#   r#   ‰  sF   € ð8 —‘ t�Ó,€IÜÑB´3°y³>ÔBÔBÜð Có Dð 	Dä$ iÐ0Ð0r*   c                 óJ   — | j                   j                  j                  «       S )aƒ  
    For obtaining distribution of level spacings.

    Parameters
    ==========

    mat: RandomMatrixSymbol
        The random matrix symbol whose eigen values are
        to be considered for finding the level spacings.

    Returns
    =======

    Lambda

    Examples
    ========

    >>> from sympy.stats import GaussianUnitaryEnsemble as GUE
    >>> from sympy.stats import level_spacing_distribution
    >>> U = GUE('U', 2)
    >>> level_spacing_distribution(U)
    Lambda(_s, 32*_s**2*exp(-4*_s**2/pi)/pi**2)

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Random_matrix#Distribution_of_level_spacings
    )rr   ro   r$   r»   s    r(   r$   r$   «  s   € ð< �:‰:×Ñ×6Ñ6Ó8Ð8r*   N)AÚsympy.concrete.productsr   Úsympy.concrete.summationsr   Úsympy.core.basicr   Úsympy.core.functionr   Úsympy.core.numbersr   r   Úsympy.core.singletonr	   Úsympy.core.symbolr
   Ú$sympy.functions.elementary.complexesr   Ú&sympy.functions.elementary.exponentialr   Ú'sympy.functions.special.gamma_functionsr   Úsympy.integrals.integralsr   Ú"sympy.matrices.expressions.matexprr   Ú sympy.matrices.expressions.tracer   Úsympy.tensor.indexedr   Úsympy.core.sympifyr   Úsympy.stats.rvr   r   r   r   Úsympy.stats.joint_rv_typesr   Úsympy.stats.random_matrixr   Úsympy.tensor.arrayr   Ú__all__Úregisterr)   r,   rK   rg   rƒ   r�   r   r   r    r!   r¤   rª   r¯   r²   r   r   r   r   r"   r#   r$   r&   r*   r(   ú<module>rÜ      s  ðÝ +Ý )Ý "Ý &ß &Ý "Ý #Ý 4Ý 6Ý 9Ý .Ý ;Ý 2Ý ,Ý 'ß TÓ TÝ @Ý 8Ý 1ò€ð €×ÑÐ&Ó'ñó (ðô" ô "ô./8Ð5ô /8ôbÐ#8ô ô(Ð&;ô ô*Ð&;ô ò*9ò9ò&9ò&9ô& *Ð5ô  *ôD<Ð#8ô <ô=Ð&;ô =ô<Ð&;ô <ò9ò9ò29ò29ò27ò: 1óD9r*   