§
    PŠtjà;  ã                   ór  — 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#j+        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@d3S )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                 ó   — dS )NT© )Úxs    ú^/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/stats/random_matrix_models.pyÚ_r)   #   s   € àˆ4ó    c                   óV   — e Zd ZdZdd„Z ed„ ¦  «        Z ed„ ¦  «        Zd„ Zd„ Z	dS )	Ú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__/   s^   € Ý$ SÑ)Ô)­8°C©=¬=ˆSˆØŒ>˜UÒ"Ð"Ýð AØBEñGñ Hô Hð HåŒ}˜S # sÑ+Ô+Ð+r*   c                 ó   — | j         d         S )Nr   ©Úargs©Úselfs    r(   ú<lambda>z"RandomMatrixEnsembleModel.<lambda>6   s   €  4¤9¨Q¤<€ r*   c                 ó   — | j         d         S )Né   r5   r7   s    r(   r9   z"RandomMatrixEnsembleModel.<lambda>7   s   €  d¤i°¤l€ r*   c                 ó    — t          |¦  «        S ©N)r   ©r8   Úexprs     r(   Údensityz!RandomMatrixEnsembleModel.density9   s   € Ý�t‰}Œ}Ðr*   c                 ó,   — |                       |¦  «        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,   (   sx   € € € € € ðð ð,ð ,ð ,ð ,ð ˆXÐ/Ð/Ñ0Ô0€FØ�Ð2Ð2Ñ3Ô3€Iðð ð ð"ð "ð "ð "ð "r*   r,   c                   ó   — e Zd ZdZd„ Zd„ ZdS )Ú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¦  «                             ¦   «         }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   s?   ø€ �e A¨­Q¨q©T¬T©	°!©¡OÑ4Ô4µU½1¼5À4ÍÈ!ÉÌÁ9Ñ;LÑ5MÔ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ŒDˆØMÐMÐMÐMˆ	Ý�#˜t¨dÐ3Ñ3Ô3ˆÝ˜	˜	 !™œ q¨!¨Q iÑ0Ô0×5Ò5Ñ7Ô7ˆØ�D˜‘F‘˜t A™v q¨1¡u™~¨aÑ/°!°A±#Ñ5Ñ6ˆØ•2‘˜˜1™‘ˆØ�u‰}˜uÑ$Ð$r*   c           
      ó  — | j         }|                      ||¦  «        }t          d¦  «        }t          ddd¬¦  «        }t          ddd¬¦  «        }t          ddd¬¦  «        }t	          t          |¦  «         dz  t          ||         dz  |d|f¦  «                             ¦   «         z  ¦  «        }t          |t          t          ||         ||         z
  ¦  «        |z  ||dz   |f¦  «        ¦  «        }	t           |	|¦  «                             ¦   «         |d|dz
  f¦  «                             ¦   «         }
t          ||         |d|f¦  «                             ¦   «         }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^   sd  € ð ŒNˆØ×2Ò2°4¸Ñ;Ô;ˆÝ˜ÑÔˆÝ�#˜t¨dÐ3Ñ3Ô3ˆÝ�#˜t¨dÐ3Ñ3Ô3ˆÝ�#˜t¨dÐ3Ñ3Ô3ˆÝ•a˜‘d”d�U˜1‘W¥ A a¤D¨!¡G¨a°°A¨YÑ 7Ô 7× <Ò <Ñ >Ô >Ñ>Ñ?Ô?ˆÝ˜!�W¥S¨¨1¬°°!´©Ñ%5Ô%5°tÑ%;¸aÀÀQÁÈ¸]ÑKÔKÑLÔLˆÝ˜˜ ™œ×(Ò(Ñ*Ô*¨Q°°1°q±5¨MÑ:Ô:×?Ò?ÑAÔAˆÝ! ! A¤$¨¨A¨q¨	Ñ2Ô2×7Ò7Ñ9Ô9ˆÝ•e˜D‘k”k E¨E¡M°3Ñ#6Ñ7Ô7Ð7r*   N)rC   rD   rE   rF   r\   re   r&   r*   r(   rK   rK   ?   s<   € € € € € ð
ð 
ð%ð %ð %ð&8ð 8ð 8ð 8ð 8r*   rK   c                   ó6   — e Zd Zed„ ¦   «         Zd„ Zd„ Zd„ ZdS )ÚGaussianUnitaryEnsembleModelc                 óv   — | 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   s4   € àŒNˆØ•1�Q‘4”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   óz   € Ø”. $Ô"=ˆ4ˆÝ% c°Ð6Ñ6Ô6ˆÝ˜s A q°Ð:Ñ:Ô:ˆØ9�v�a��a ™dœd˜U 1™W¥u¨Q°©T¡{¤{Ñ2Ñ3Ô3°DÑ8Ñ9Ô9¸$Ñ?Ô?Ð?r*   c                 óF   — |                       t          d¦  «        ¦  «        S ri   ©re   r	   r7   s    r(   r"   z5GaussianUnitaryEnsembleModel.joint_eigen_distribution|   ó   € Ø×5Ò5µa¸±d´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   sJ   € Ý�#‰JŒ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]   € € € € € Øð-ð -ñ „Xð-ð@ð @ð @ð<ð <ð <ðð ð ð ð r*   rg   c                   ó6   — e Zd Zed„ ¦   «         Zd„ Zd„ Zd„ ZdS )Ú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…   sK   € àŒNˆÝ˜$  1Ñ%Ô%ˆÝ��Q˜q™TœT˜E !™G¥e¨B°©E¡l¤lÑ2Ñ3Ô3Ñ4Ô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                 ó@   — |                       t          j        ¦  «        S r=   ©re   r	   rO   r7   s    r(   r"   z8GaussianOrthogonalEnsembleModel.joint_eigen_distribution‘   ó   € Ø×5Ò5µa´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”   sC   € Ý�#‰JŒJˆÝ�‰T�1‰H•S�2˜#˜a™%  A¡™Ñ&Ô&Ñ&ˆÝ�a˜‰|Œ|Ðr*   Nr�   r&   r*   r(   rƒ   rƒ   „   s]   € € € € € Øð5ð 5ñ „Xð5ð
@ð @ð @ð=ð =ð =ðð ð ð ð r*   rƒ   c                   ó6   — e Zd Zed„ ¦   «         Zd„ Zd„ Zd„ ZdS )ÚGaussianSymplecticEnsembleModelc           	      ó¬   — | j         }t          d||¦  «        }t          t          t	          |¦  «         t          |dz  ¦  «        z  ¦  «        ¦  «        S )Nr…   rN   r†   r‡   s      r(   rj   z6GaussianSymplecticEnsembleModel.normalization_constantš   sG   € àŒNˆÝ˜$  1Ñ%Ô%ˆÝ��Q˜q™TœT˜E¥E¨"¨a©%¡L¤LÑ0Ñ1Ô1Ñ2Ô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    sv   € Ø”. $Ô"=ˆ4ˆÝ% c°Ð6Ñ6Ô6ˆÝ˜s A q°Ð:Ñ:Ô:ˆØ7�v�a��a ™dœd˜U¥U¨1¨a©4¡[¤[Ñ0Ñ1Ô1°$Ñ6Ñ7Ô7¸Ñ=Ô=Ð=r*   c                 óF   — |                       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©   si   € Ý�#‰JŒJˆÝ�‰dŒd�B‰h�!˜A™$œ$ ™'¥B¨¡EÑ*Ñ+¨a°©dÑ3µC¸¸aÅ¹d¹ÀQÈÁTÑ8IÑ4JÔ4JÑJˆÝ�a˜‰|Œ|Ðr*   Nr�   r&   r*   r(   r�   r�   ™   sZ   € € € € € Øð3ð 3ñ „Xð3ð
>ð >ð >ð<ð <ð <ðð ð ð ð r*   r�   c                 ó¦   — t          | ¦  «        t          |¦  «        }} t          | |¦  «        }t          | |¬¦  «        }t	          | |||¬¦  «        S ©Nrn   rq   )r   r   rK   r   r   ©r2   r3   ro   Úrmps       r(   r   r   ®   óQ   € Ý  Ñ%Ô%¥x°¡}¤}ˆ€CÝ! # sÑ+Ô+€EÝ
˜S¨Ð
.Ñ
.Ô
.€CÝ˜c 3¨°CÐ8Ñ8Ô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   ´   sS   € õ ! Ñ%Ô%¥x°¡}¤}ˆ€CÝ(¨¨cÑ2Ô2€EÝ
˜S¨Ð
.Ñ
.Ô
.€CÝ˜c 3¨°CÐ8Ñ8Ô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    Ç   óS   € õ ! Ñ%Ô%¥x°¡}¤}ˆ€CÝ+¨C°Ñ5Ô5€EÝ
˜S¨Ð
.Ñ
.Ô
.€CÝ˜c 3¨°CÐ8Ñ8Ô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dS )Ú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ð 	Cr*   c                 óð  — | 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¦  «                             ¦   «         }t          t          t          t          t          ||         z  ¦  «        t          t          ||         z  ¦  «        z
  ¦  «        |z  ||dz   |f¦  «                             ¦   «         |d|dz
  f¦  «                             ¦   «         }	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ÿ   sO  € ð ŒNˆØ•"‘�q‰y�5  a¡¨¡¨A¡Ñ.Ô.­qµ°t¸A±vÀ±zÑ1BÔ1BÑ/CÔ/CÀQÑ/FÑFÑGˆÝ˜ÑÔˆÝ˜ dÐ+Ñ+Ô+­U°3ÀÐ-EÑ-EÔ-EÝ˜ dÐ+Ñ+Ô+ð ˆ1ˆå! ! A¤$¨¨A¨q¨	Ñ2Ô2×7Ò7Ñ9Ô9ˆÝ•G�C¥¥A a¨¤d¡F¡¤­cµ!°A°a´D±&©k¬kÑ 9Ñ:Ô:¸DÑ@À1ÀaÈ!ÁeÈQÀ-ÑPÔP×UÒUÑWÔWØ˜˜1˜q™5�Mñ#ô #ß#'¢4¡6¤6ð 	
å•e˜D‘k”k 1 S¡5Ñ)Ô)Ð)r*   N)rC   rD   rE   rF   r@   re   r&   r*   r(   r¤   r¤   í   s?   € € € € € ð	ð 	ðCð Cð Cð*ð *ð *ð *ð *r*   r¤   c                   ó   — e Zd Zd„ ZdS )ÚCircularUnitaryEnsembleModelc                 óF   — |                       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dS )ÚCircularOrthogonalEnsembleModelc                 ó@   — |                       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dS )ÚCircularSymplecticEnsembleModelc                 óF   — |                       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   !  sS   € õ( ! Ñ%Ô%¥x°¡}¤}ˆ€CÝ(¨¨cÑ2Ô2€EÝ
˜S¨Ð
.Ñ
.Ô
.€CÝ˜c 3¨°CÐ8Ñ8Ô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   :  óS   € õ( ! Ñ%Ô%¥x°¡}¤}ˆ€CÝ+¨C°Ñ5Ô5€EÝ
˜S¨Ð
.Ñ
.Ô
.€CÝ˜c 3¨°CÐ8Ñ8Ô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                             ¦   «         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  sC   € õ2 �cÕ-Ñ.Ô.ð IÝÐAÀ3ÑGÑHÔHÐHØŒ:Ô×4Ò4Ñ6Ô6Ð6r*   c                 óª   — |                       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   ó4   K  — | ]}t          |¦  «        V — Œd S r=   )r   )Ú.0Úeigenvals     r(   ú	<genexpr>z)JointEigenDistribution.<locals>.<genexpr>¦  s*   è è € ÐBÐB x�y˜Ñ"Ô"ÐBÐBÐBÐBÐBÐBr*   zWEigen values do not have any random expression, joint distribution cannot be generated.)Ú	eigenvalsÚallÚsetr/   r   )r¼   rÃ   s     r(   r#   r#   ‰  sc   € ð8 —’ t�Ñ,Ô,€IÝÐBÐBµ3°y±>´>ÐBÑBÔBÑBÔBð DÝð Cñ Dô Dð 	Då$ iÐ0Ð0r*   c                 ó>   — | 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Ô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Ð 4Ð 4Ð 4Ð 4Ð 4Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø .Ð .Ð .Ð .Ð .Ð .Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TØ @Ð @Ð @Ð @Ð @Ð @Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1ðð ð €ð €ÔÐ&Ñ'Ô'ðð ñ (Ô'ðð"ð "ð "ð "ð " ñ "ô "ð "ð./8ð /8ð /8ð /8ð /8Ð5ñ /8ô /8ð /8ðbð ð ð ð Ð#8ñ ô ð ð(ð ð ð ð Ð&;ñ ô ð ð*ð ð ð ð Ð&;ñ ô ð ð*9ð 9ð 9ð9ð 9ð 9ð&9ð 9ð 9ð&9ð 9ð 9ð& *ð  *ð  *ð  *ð  *Ð5ñ  *ô  *ð  *ðD<ð <ð <ð <ð <Ð#8ñ <ô <ð <ð=ð =ð =ð =ð =Ð&;ñ =ô =ð =ð<ð <ð <ð <ð <Ð&;ñ <ô <ð <ð9ð 9ð 9ð9ð 9ð 9ð29ð 9ð 9ð29ð 9ð 9ð27ð 7ð 7ð: 1ð  1ð  1ðD9ð 9ð 9ð 9ð 9r*   