§
    PŠtj[>  ã                   óô  — d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
mZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZmZ ddlmZmZmZ ddl m!Z!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. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4  G d„ de'¦  «        Z5 G d„ d¦  «        Z6 G d„ d¦  «        Z7 G d„ d¦  «        Z8e6e8e8e7dœZ9 G d„ de)e(¦  «        Z: G d „ d!e+¦  «        Z; G d"„ d#e)¦  «        Z<d$S )%zq
Joint Random Variables Module

See Also
========
sympy.stats.rv
sympy.stats.frv
sympy.stats.crv
sympy.stats.drv
é    )Úprod)ÚBasic)ÚLambda)ÚS)ÚDummyÚSymbol)Úsympify)Ú
ProductSet©ÚIndexed)ÚProduct)ÚSumÚ	summation)ÚTuple)ÚIntegralÚ	integrate)ÚImmutableMatrixÚmatrix2numpyÚ
list2numpy)ÚSingleContinuousDistributionÚSingleContinuousPSpace)ÚSingleDiscreteDistributionÚSingleDiscretePSpace)ÚProductPSpaceÚNamedArgsMixinÚDistributionÚProductDomainÚRandomSymbolÚrandom_symbolsÚSingleDomainÚ_symbol_converter)Úiterable)Ú
filldedent)Ú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
ed„ ¦   «         Zed	„ ¦   «         Zd
„ Zd„ Zdd„Zd„ Zd„ Zdd„Zd„ ZdS )ÚJointPSpacezt
    Represents a joint probability space. Represented using symbols for
    each component and a distribution.
    c                 óà   — t          |t          ¦  «        rt          ||¦  «        S t          |t          ¦  «        rt	          ||¦  «        S t          |¦  «        }t          j        | ||¦  «        S ©N)Ú
isinstancer   r   r   r   r!   r   Ú__new__)ÚclsÚsymÚdists      úR/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/stats/joint_rv.pyr*   zJointPSpace.__new__)   si   € Ý�dÕ8Ñ9Ô9ð 	5Ý)¨#¨tÑ4Ô4Ð4Ý�dÕ6Ñ7Ô7ð 	3Ý'¨¨TÑ2Ô2Ð2Ý Ñ$Ô$ˆÝŒ}˜S # tÑ,Ô,Ð,ó    c                 ó   — | j         j        S r(   )ÚdomainÚset©Úselfs    r.   r2   zJointPSpace.set1   s   € àŒ{ŒÐr/   c                 ó   — | j         d         S )Nr   ©Úargsr3   s    r.   ÚsymbolzJointPSpace.symbol5   ó   € àŒy˜Œ|Ðr/   c                 ó   — | j         d         S ©Né   r6   r3   s    r.   ÚdistributionzJointPSpace.distribution9   r9   r/   c                 ó,   — t          | j        | ¦  «        S r(   )ÚJointRandomSymbolr8   r3   s    r.   ÚvaluezJointPSpace.value=   s   € å  ¤¨dÑ3Ô3Ð3r/   c                 óî   — | j         j        }t          |t          ¦  «        r!t	          t          |j        ¦  «        ¦  «        S t          |t          ¦  «        r|j        d         d         S t          j	        S )Nr   éÿÿÿÿ)
r=   r2   r)   r
   r   Úlenr7   r   ÚlimitsÚOne)r4   Ú_sets     r.   Úcomponent_countzJointPSpace.component_countA   s_   € àÔ Ô$ˆÝ�d�JÑ'Ô'ð 	&Ý•S˜œ‘^”^Ñ$Ô$Ð$Ý˜�gÑ&Ô&ð 	&Ø”;˜q”> "Ô%Ð%ÝŒuˆr/   c                 óX   ‡ — ˆ fd„t          ‰ j        ¦  «        D ¦   «         } ‰ j        |Ž S )Nc                 ó:   •— g | ]}t          ‰j        |¦  «        ‘ŒS © ©r   r8   ©Ú.0Úir4   s     €r.   ú
<listcomp>z#JointPSpace.pdf.<locals>.<listcomp>L   s%   ø€ ÐLÐLÐL¨1�w�t”{ AÑ&Ô&ÐLÐLÐLr/   )ÚrangerG   r=   )r4   r,   s   ` r.   ÚpdfzJointPSpace.pdfJ   s7   ø€ àLÐLÐLÐLµ°dÔ6JÑ0KÔ0KÐLÑLÔLˆØ ˆtÔ  #Ð&Ð&r/   c                 ó’   — t          | j        ¦  «        }|st          | j        | j        j        ¦  «        S t          d„ |D ¦   «         Ž S )Nc                 ó&   — g | ]}|j         j        ‘ŒS rJ   )Úpspacer1   ©rM   Úrvs     r.   rO   z&JointPSpace.domain.<locals>.<listcomp>T   s   € Ð>Ð>Ð>°B˜rœyÔ/Ð>Ð>Ð>r/   )r   r=   r    r8   r2   r   ©r4   Úrvss     r.   r1   zJointPSpace.domainO   sM   € å˜TÔ.Ñ/Ô/ˆØð 	DÝ ¤¨TÔ->Ô-BÑCÔCÐCÝÐ>Ð>¸#Ð>Ñ>Ô>Ð?Ð?r/   c                 ó&   — | j         j        |         S r(   )r2   r7   )r4   Úindexs     r.   Úcomponent_domainzJointPSpace.component_domainV   s   € ØŒxŒ}˜UÔ#Ð#r/   c                 óò  ‡ ‡
— ‰ j         }|                     t          ¦  «        rt          d¦  «        ‚ˆ fd„t	          |¦  «        D ¦   «         }d„ |D ¦   «         }t          t          ||¦  «        ¦  «        }t          ˆ fd„|D ¦   «         ¦  «        Š
ˆ
fd„|D ¦   «         }d}t	          |¦  «        D ]S}||vrM||                              ‰ j	        j
        j        |         ¦  «         t          ||         ¦  «        ||<   |dz  }ŒT‰ j	        j        r$t          ‰
t           ‰ j	        |Ž g|¢R Ž ¦  «        }	n/‰ j	        j        r#t          ‰
t!           ‰ j	        |Ž g|¢R Ž ¦  «        }	|	                     |¦  «        S )Nz_Marginal distributions cannot be computed for symbolic dimensions. It is a work under progress.c                 ó:   •— g | ]}t          ‰j        |¦  «        ‘ŒS rJ   rK   rL   s     €r.   rO   z5JointPSpace.marginal_distribution.<locals>.<listcomp>^   s%   ø€ Ð>Ð>Ð>¨A•˜œ QÑ'Ô'Ð>Ð>Ð>r/   c                 óF   — g | ]}t          t          |¦  «        ¦  «        ‘ŒS rJ   )r   Ústr©rM   rN   s     r.   rO   z5JointPSpace.marginal_distribution.<locals>.<listcomp>_   s$   € Ð1Ð1Ð1 q•F�3˜q™6œ6‘N”NÐ1Ð1Ð1r/   c           	   3   óv   •K  — | ]3}t          t          t          ‰j        |¦  «        ¦  «        ¦  «        V — Œ4d S r(   )r   r_   r   r8   rL   s     €r.   ú	<genexpr>z4JointPSpace.marginal_distribution.<locals>.<genexpr>a   s?   øè è € ÐJÐJ¸Q•F�3�w t¤{°AÑ6Ô6Ñ7Ô7Ñ8Ô8ÐJÐJÐJÐJÐJÐJr/   c                 ó   •— g | ]	}|‰v¯|g‘Œ
S rJ   rJ   )rM   rN   r,   s     €r.   rO   z5JointPSpace.marginal_distribution.<locals>.<listcomp>b   s    ø€ Ð9Ð9Ð9˜1¨A°S¨L¨L�1�$¨L¨L¨Lr/   r   r<   )rG   Úatomsr   Ú
ValueErrorrP   ÚdictÚzipÚtupleÚappendr=   r2   r7   Úis_Continuousr   r   Úis_Discreter   Úxreplace)r4   ÚindicesÚcountÚorigÚall_symsÚreplace_dictrD   rZ   rN   Úfr,   s   `         @r.   Úmarginal_distributionz!JointPSpace.marginal_distributionY   s°  øø€ ØÔ$ˆØ�;Š;•vÑÔð 	YÝð Xñ Yô Yð Yà>Ð>Ð>Ð>µ°u±´Ð>Ñ>Ô>ˆØ1Ð1¨DÐ1Ñ1Ô1ˆÝ�C ¨$Ñ/Ô/Ñ0Ô0ˆÝÐJÐJÐJÐJÀ'ÐJÑJÔJÑJÔJˆØ9Ð9Ð9Ð9 Ð9Ñ9Ô9ˆØˆÝ�u‘”ð 	ð 	ˆAØ˜ÐÐØ�u”×$Ò$ TÔ%6Ô%:Ô%?ÀÔ%BÑCÔCÐCÝ % f¨U¤mÑ 4Ô 4��u‘Ø˜‘
�øØÔÔ*ð 	NÝ�s�IÐ&7 dÔ&7¸Ð&BÐLÀVÐLÐLÐLÑMÔMˆAˆAØÔÔ*ð 	NÝ�s�IÐ&7 dÔ&7¸Ð&BÐLÀVÐLÐLÐLÑMÔMˆAØ�zŠz˜,Ñ'Ô'Ð'r/   NFc           	      ó†  ‡ ‡— t          ˆ fd„t          ‰ j        ¦  «        D ¦   «         ¦  «        }‰p|Št          ˆfd„|D ¦   «         ¦  «        s|S |‰ j        z  }‰D ]‹}t          |t          ¦  «        rC|                     |t          t          |j	        ¦  «        |j
        d         ¦  «        i¦  «        }ŒZt          |t          ¦  «        r|                     ||j        i¦  «        }ŒŒ‰ j        t          |¦  «        v rt          t!          d¦  «        ¦  «        ‚t          ˆ fd„|D ¦   «         ¦  «        }t#          |g|¢R Ž S )Nc              3   ó2   •K  — | ]}‰j         |         V — Œd S r(   )r@   rL   s     €r.   rb   z2JointPSpace.compute_expectation.<locals>.<genexpr>p   s)   øè è € ÐHÐH q�T”Z ”]ÐHÐHÐHÐHÐHÐHr/   c              3   ó    •K  — | ]}|‰v V — Œ	d S r(   rJ   ©rM   rN   rX   s     €r.   rb   z2JointPSpace.compute_expectation.<locals>.<genexpr>r   s'   øè è € Ð*Ð* �1˜�8Ð*Ð*Ð*Ð*Ð*Ð*r/   r<   zq
            Expectations of expression with unindexed joint random symbols
            cannot be calculated yet.c              3   ó¶   •K  — | ]S}t          t          |j        ¦  «        |j        d          ¦  «        ‰j        j        j        |j        d                   fV — ŒTdS )r<   N)r   r_   Úbaser7   r=   r2   )rM   rV   r4   s     €r.   rb   z2JointPSpace.compute_expectation.<locals>.<genexpr>~   ss   øè è € ð Dð DØ8:õ  ¥ B¤G¡¤¨R¬W°Q¬ZÑ8Ô8ØÔÔ!Ô& r¤w¨q¤zÔ2ð4ð Dð Dð Dð Dð Dð Dr/   )rh   rP   rG   ÚanyrQ   r)   r   rl   r_   ry   r7   r   r8   r@   r   ÚNotImplementedErrorr#   r   )r4   ÚexprrX   ÚevaluateÚkwargsÚsymsrV   rD   s   ` `     r.   Úcompute_expectationzJointPSpace.compute_expectationo   sx  øø€ ÝÐHÐHÐHÐH­E°$Ô2FÑ,GÔ,GÐHÑHÔHÑHÔHˆØˆk�TˆÝÐ*Ð*Ð*Ð* TÐ*Ñ*Ô*Ñ*Ô*ð 	ØˆKØ�D”H‰}ˆØð 	6ð 	6ˆBÝ˜"�gÑ&Ô&ð 6Ø—}’} b­'µ#°b´g±,´,ÀÄÈÄ
Ñ*KÔ*KÐ%LÑMÔM��Ý˜B¥Ñ-Ô-ð 6Ø—}’} b¨"¬) _Ñ5Ô5�øØŒ:�¨Ñ-Ô-Ð-Ð-Ý%¥jð 2)ñ '*ô '*ñ +ô +ð +õ ð Dð Dð Dð DØ>BðDñ Dô Dñ Dô Dˆå˜Ð&˜vÐ&Ð&Ð&Ð&r/   c                 ó   — t          ¦   «         ‚r(   ©r{   ©r4   Ú	conditions     r.   ÚwherezJointPSpace.where‚   ó   € Ý!Ñ#Ô#Ð#r/   c                 ó   — t          ¦   «         ‚r(   r‚   )r4   r|   s     r.   Úcompute_densityzJointPSpace.compute_density…   r†   r/   rJ   Úscipyc                 óf   — t          | j        | ¦  «        | j                             |||¬¦  «        iS )zo
        Internal sample method

        Returns dictionary mapping RandomSymbol to realization value.
        )ÚlibraryÚseed)r   r8   r=   Úsample)r4   Úsizer‹   rŒ   s       r.   r�   zJointPSpace.sampleˆ   s?   € õ ˜Tœ[¨$Ñ/Ô/°Ô1B×1IÒ1IÈ$Ø#¨$ð 2Jñ 20ô 20ð 1ð 	1r/   c                 ó   — t          ¦   «         ‚r(   r‚   rƒ   s     r.   ÚprobabilityzJointPSpace.probability‘   r†   r/   )NF©rJ   r‰   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r*   Úpropertyr2   r8   r=   r@   rG   rQ   r1   r[   rs   r€   r…   rˆ   r�   r�   rJ   r/   r.   r&   r&   $   s`  € € € € € ðð ð-ð -ð -ð ðð ñ „Xðð ðð ñ „Xðð ðð ñ „Xðð ð4ð 4ñ „Xð4ð ðð ñ „Xðð ð'ð 'ñ „Xð'ð ð@ð @ñ „Xð@ð$ð $ð $ð(ð (ð (ð,'ð 'ð 'ð 'ð&$ð $ð $ð$ð $ð $ð1ð 1ð 1ð 1ð$ð $ð $ð $ð $r/   r&   c                   ó0   — e Zd ZdZdd„Zed„ ¦   «         ZdS )ÚSampleJointScipyz7Returns the sample from scipy of the given distributionNc                 ó0   — |                       |||¦  «        S r(   )Ú_sample_scipy©r+   r-   rŽ   rŒ   s       r.   r*   zSampleJointScipy.__new__—   ó   € Ø× Ò   t¨TÑ2Ô2Ð2r/   c                 óœ  ‡	‡
— ddl }|�t          |t          ¦  «        r|j                             |¬¦  «        Š	n|Š	ddlmŠ
 ˆ	ˆ
fd„ˆ	ˆ
fd„ˆ	ˆ
fd„dœ}d	„ d
„ d„ dœ}|                     ¦   «         }|j        j	        |vrdS  ||j        j	                 ||¦  «        }| 
                    | ||j        j	                 |¦  «        z   ¦  «        S )zSample from SciPy.r   N©rŒ   )Ústatsc                 ó¬   •— ‰j                              t          | j        ¦  «                             ¦   «         t          | j        ¦  «        |‰¬¦  «        S )N)ÚmeanÚcovrŽ   Úrandom_state)Úmultivariate_normalrX   r   ÚmuÚflattenÚsigma©r-   rŽ   Ú
rand_stateÚscipy_statss     €€r.   ú<lambda>z0SampleJointScipy._sample_scipy.<locals>.<lambda>¥   sO   ø€ ÀÔA`×AdÒAdÝ! $¤'Ñ*Ô*×2Ò2Ñ4Ô4Ý  ¤Ñ,Ô,°4Àjð Beñ BRô BR€ r/   c                 ó’   •— ‰j                              t          | j        t          ¦  «                             ¦   «         |‰¬¦  «        S )N)ÚalpharŽ   r£   )Ú	dirichletrX   r   r­   Úfloatr¦   r¨   s     €€r.   r«   z0SampleJointScipy._sample_scipy.<locals>.<lambda>¨   sE   ø€ ¸{Ô?T×?XÒ?XÝ  ¤­UÑ3Ô3×;Ò;Ñ=Ô=ÀDÐWað @Yñ @cô @c€ r/   c                 ó¸   •— ‰j                              t          | j        ¦  «        t	          | j        t          ¦  «                             ¦   «         |‰¬¦  «        S )N)ÚnÚprŽ   r£   )ÚmultinomialrX   Úintr±   r   r²   r¯   r¦   r¨   s     €€r.   r«   z0SampleJointScipy._sample_scipy.<locals>.<lambda>ª   sL   ø€ ¸+Ô:Q×:UÒ:UÝ�d”f‘+”+¥¨D¬FµEÑ!:Ô!:×!BÒ!BÑ!DÔ!DÈ4Ð^hð ;Vñ ;jô ;j€ r/   ©ÚMultivariateNormalDistributionÚMultivariateBetaDistributionÚMultinomialDistributionc                 óX   — t          | j        ¦  «                             ¦   «         j        S r(   ©r   r¥   r¦   Úshape©r-   s    r.   r«   z0SampleJointScipy._sample_scipy.<locals>.<lambda>¯   ó   € ½<ÈÌÑ;PÔ;P×;XÒ;XÑ;ZÔ;ZÔ;`€ r/   c                 óX   — t          | j        ¦  «                             ¦   «         j        S r(   ©r   r­   r¦   r»   r¼   s    r.   r«   z0SampleJointScipy._sample_scipy.<locals>.<lambda>°   ó   € ½ÀDÄJÑ9OÔ9O×9WÒ9WÑ9YÔ9YÔ9_€ r/   c                 óX   — t          | j        ¦  «                             ¦   «         j        S r(   ©r   r²   r¦   r»   r¼   s    r.   r«   z0SampleJointScipy._sample_scipy.<locals>.<lambda>±   ó   € µJ¸t¼vÑ4FÔ4F×4NÒ4NÑ4PÔ4PÔ4V€ r/   )Únumpyr)   r´   ÚrandomÚdefault_rngr‰   rŸ   ÚkeysÚ	__class__r’   Úreshape)r+   r-   rŽ   rŒ   rÄ   Úscipy_rv_mapÚsample_shapeÚ	dist_listÚsamplesr©   rª   s            @@r.   rš   zSampleJointScipy._sample_scipyš   sI  øø€ ð 	ˆˆˆØˆ<�: d­CÑ0Ô0ˆ<Øœ×1Ò1°tÐ1Ñ<Ô<ˆJˆJàˆJØ.Ð.Ð.Ð.Ð.Ð.ð/Rð /Rð /Rð /Rð /Rð-cð -cð -cð -cð -cð(jð (jð (jð (jð (jð
ð 
ˆð /aÐ.`Ø,_Ð,_Ø'VÐ'Vð
ð 
ˆð !×%Ò%Ñ'Ô'ˆ	àŒ>Ô"¨)Ð3Ð3Ø�4à7�,˜tœ~Ô6Ô7¸¸dÑCÔCˆØ�Š˜tÐ&K l°4´>Ô3JÔ&KÈDÑ&QÔ&QÑQÑRÔRÐRr/   r(   )r’   r“   r”   r•   r*   Úclassmethodrš   rJ   r/   r.   r˜   r˜   •   sN   € € € € € ØAÐAð3ð 3ð 3ð 3ð ðSð Sñ „[ðSð Sð Sr/   r˜   c                   ó0   — e Zd ZdZdd„Zed„ ¦   «         ZdS )ÚSampleJointNumpyz7Returns the sample from numpy of the given distributionNc                 ó0   — |                       |||¦  «        S r(   )Ú_sample_numpyr›   s       r.   r*   zSampleJointNumpy.__new__¿   rœ   r/   c                 ó¢  ‡	— ddl }|�t          |t          ¦  «        r|j                             |¬¦  «        Š	n|Š	ˆ	fd„ˆ	fd„ˆ	fd„dœ}d„ d	„ d
„ dœ}|                     ¦   «         }|j        j        |vrdS  ||j        j                 |t          |¦  «        ¦  «        }| 	                    | ||j        j                 |¦  «        z   ¦  «        S )zSample from NumPy.r   Nrž   c                 ó¸   •— ‰                      t          | j        t          ¦  «                             ¦   «         t          | j        t          ¦  «        |¬¦  «        S )N)r¡   r¢   rŽ   )r¤   r   r¥   r¯   r¦   r§   ©r-   rŽ   r©   s     €r.   r«   z0SampleJointNumpy._sample_numpy.<locals>.<lambda>Ì   sN   ø€ À×A_ÒA_Ý! $¤'­5Ñ1Ô1×9Ò9Ñ;Ô;Ý  ¤­UÑ3Ô3¸$ð B`ñ B@ô B@€ r/   c                 ó†   •— ‰                      t          | j        t          ¦  «                             ¦   «         |¬¦  «        S )N)r­   rŽ   )r®   r   r­   r¯   r¦   rÕ   s     €r.   r«   z0SampleJointNumpy._sample_numpy.<locals>.<lambda>Ï   s?   ø€ ¸z×?SÒ?SÝ  ¤­UÑ3Ô3×;Ò;Ñ=Ô=ÀDð @Tñ @Jô @J€ r/   c                 ó¬   •— ‰                      t          | j        ¦  «        t          | j        t
          ¦  «                             ¦   «         |¬¦  «        S )N)r±   ÚpvalsrŽ   )r³   r´   r±   r   r²   r¯   r¦   rÕ   s     €r.   r«   z0SampleJointNumpy._sample_numpy.<locals>.<lambda>Ñ   sF   ø€ ¸*×:PÒ:PÝ�d”f‘+”+¥Z°´½Ñ%>Ô%>×%FÒ%FÑ%HÔ%HÈtð ;Qñ ;Uô ;U€ r/   rµ   c                 óX   — t          | j        ¦  «                             ¦   «         j        S r(   rº   r¼   s    r.   r«   z0SampleJointNumpy._sample_numpy.<locals>.<lambda>Ö   r½   r/   c                 óX   — t          | j        ¦  «                             ¦   «         j        S r(   r¿   r¼   s    r.   r«   z0SampleJointNumpy._sample_numpy.<locals>.<lambda>×   rÀ   r/   c                 óX   — t          | j        ¦  «                             ¦   «         j        S r(   rÂ   r¼   s    r.   r«   z0SampleJointNumpy._sample_numpy.<locals>.<lambda>Ø   rÃ   r/   )
rÄ   r)   r´   rÅ   rÆ   rÇ   rÈ   r’   r   rÉ   )
r+   r-   rŽ   rŒ   rÄ   Únumpy_rv_maprË   rÌ   rÍ   r©   s
            @r.   rÒ   zSampleJointNumpy._sample_numpyÂ   s*  ø€ ð 	ˆˆˆØˆ<�: d­CÑ0Ô0ˆ<Øœ×1Ò1°tÐ1Ñ<Ô<ˆJˆJàˆJð/@ð /@ð /@ð /@ð-Jð -Jð -Jð -Jð(Uð (Uð (Uð (Uð
ð 
ˆð /aÐ.`Ø,_Ð,_Ø'VÐ'Vð
ð 
ˆð !×%Ò%Ñ'Ô'ˆ	àŒ>Ô"¨)Ð3Ð3Ø�4à7�,˜tœ~Ô6Ô7¸½dÀ4¹j¼jÑIÔIˆØ�Š˜tÐ&K l°4´>Ô3JÔ&KÈDÑ&QÔ&QÑQÑRÔRÐRr/   r(   )r’   r“   r”   r•   r*   rÎ   rÒ   rJ   r/   r.   rÐ   rÐ   ¼   sN   € € € € € ØAÐAð3ð 3ð 3ð 3ð ðSð Sñ „[ðSð Sð Sr/   rÐ   c                   ó0   — e Zd ZdZdd„Zed„ ¦   «         ZdS )ÚSampleJointPymcz6Returns the sample from pymc of the given distributionNc                 ó0   — |                       |||¦  «        S r(   )Ú_sample_pymcr›   s       r.   r*   zSampleJointPymc.__new__æ   s   € Ø×Ò  d¨DÑ1Ô1Ð1r/   c           	      ón  ‡	— 	 ddl Š	n# t          $ r ddlŠ	Y nw xY wˆ	fd„ˆ	fd„ˆ	fd„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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          ¦  «        d| j        j        d         f¬¦  «        S )NÚXr<   r   )r¥   r¢   r»   )ÚMvNormalr   r¥   r¯   r¦   r§   r»   ©r-   Úpymcs    €r.   r«   z.SampleJointPymc._sample_pymc.<locals>.<lambda>ò   s[   ø€ Ø—’˜c¥l°4´7½EÑ&BÔ&B×&JÒ&JÑ&LÔ&LÝ  ¤­UÑ3Ô3¸A¸t¼w¼}ÈQÔ?OÐ;Pð ñ Rô Rð r/   c                 ó†   •— ‰                      dt          | j        t          ¦  «                             ¦   «         ¬¦  «        S )Nrã   )Úa)Ú	Dirichletr   r­   r¯   r¦   rå   s    €r.   r«   z.SampleJointPymc._sample_pymc.<locals>.<lambda>õ   s3   ø€ Ø—’˜s¥j°´½UÑ&CÔ&C×&KÒ&KÑ&MÔ&M�ÑNÔNð r/   c           	      óÖ   •— ‰                      dt          | j        ¦  «        t          | j        t
          ¦  «                             ¦   «         dt          | j        ¦  «        f¬¦  «        S )Nrã   r<   )r±   r²   r»   )ÚMultinomialr´   r±   r   r²   r¯   r¦   rC   rå   s    €r.   r«   z.SampleJointPymc._sample_pymc.<locals>.<lambda>÷   sX   ø€ Ø× Ò  ­¨D¬F©¬Ý˜TœV¥UÑ+Ô+×3Ò3Ñ5Ô5¸aÅÀTÄVÁÄÐ=Mð !ñ Oô Oð r/   rµ   c                 óX   — t          | j        ¦  «                             ¦   «         j        S r(   rº   r¼   s    r.   r«   z.SampleJointPymc._sample_pymc.<locals>.<lambda>ý   r½   r/   c                 óX   — t          | j        ¦  «                             ¦   «         j        S r(   r¿   r¼   s    r.   r«   z.SampleJointPymc._sample_pymc.<locals>.<lambda>þ   rÀ   r/   c                 óX   — t          | j        ¦  «                             ¦   «         j        S r(   rÂ   r¼   s    r.   r«   z.SampleJointPymc._sample_pymc.<locals>.<lambda>ÿ   rÃ   r/   Úpymc3r<   F)ÚdrawsÚchainsÚprogressbarÚrandom_seedÚreturn_inferencedataÚcompute_convergence_checksrã   )ræ   ÚImportErrorrï   rÇ   rÈ   r’   ÚloggingÚ	getLoggerÚsetLevelÚERRORÚModelr�   r   rÉ   )
r+   r-   rŽ   rŒ   Úpymc_rv_maprË   rÌ   r÷   rÍ   ræ   s
            @r.   rà   zSampleJointPymc._sample_pymcé   s  ø€ ð	!ØˆKˆKˆKˆKøÝð 	!ð 	!ð 	!Ø Ð Ð Ð Ð Ð ð	!øøøð/Rð /Rð /Rð /Rð-Oð -Oð -Oð -Oð(Oð (Oð (Oð (Oð	
ð 	
ˆð /aÐ.`Ø,_Ð,_Ø'VÐ'Vð
ð 
ˆð  ×$Ò$Ñ&Ô&ˆ	àŒ>Ô"¨)Ð3Ð3Ø�4àˆˆˆØ×Ò˜'Ñ"Ô"×+Ò+¨G¬MÑ:Ô:Ð:Ø�ZŠZ‰\Œ\ð 	ið 	iØ0ˆK˜œÔ/Ô0°Ñ6Ô6Ð6Ø—k’k­¨T©
¬
¸1È%Ð]aÐx}ð  [`�kñ  aô  að  bcð  bcð  bcô  dð  ehô  iˆGð	ið 	ið 	iñ 	iô 	ið 	ið 	ið 	ið 	ið 	ið 	iøøøð 	ið 	ið 	ið 	ið �Š˜tÐ&K l°4´>Ô3JÔ&KÈDÑ&QÔ&QÑQÑRÔRÐRs   ƒ ˆ˜ÂAC;Ã;C?ÄC?r(   )r’   r“   r”   r•   r*   rÎ   rà   rJ   r/   r.   rÞ   rÞ   ã   sN   € € € € € Ø@Ð@ð2ð 2ð 2ð 2ð ð"Sð "Sñ „[ð"Sð "Sð "Sr/   rÞ   )r‰   rï   ræ   rÄ   c                   ó\   — e Zd ZdZdZd„ Zed„ ¦   «         Zed„ ¦   «         Zd„ Z	dd
„Z
d„ Zd	S )ÚJointDistributionz“
    Represented by the random variables part of the joint distribution.
    Contains methods for PDF, CDF, sampling, marginal densities, etc.
    ©rQ   c                 ó  — t          t          t          |¦  «        ¦  «        }t          t	          |¦  «        ¦  «        D ]5}t          ||         t           ¦  «        rt          ||         ¦  «        ||<   Œ6t          j        | g|¢R Ž S r(   )	ÚlistÚmapr	   rP   rC   r)   r   r   r*   )r+   r7   rN   s      r.   r*   zJointDistribution.__new__  sz   € Ý•C� Ñ&Ô&Ñ'Ô'ˆÝ•s˜4‘y”yÑ!Ô!ð 	3ð 	3ˆAÝ˜$˜qœ'¥4Ñ(Ô(ð 3Ý)¨$¨q¬'Ñ2Ô2��Q‘øÝŒ}˜SÐ( 4Ð(Ð(Ð(Ð(r/   c                 ó*   — t          | j        ¦  «        S r(   )r   Úsymbolsr3   s    r.   r1   zJointDistribution.domain%  s   € å˜Tœ\Ñ*Ô*Ð*r/   c                 ó&   — | j         j        d         S r;   )Údensityr7   r3   s    r.   rQ   zJointDistribution.pdf)  s   € àŒ|Ô  Ô#Ð#r/   c           	      óR  — t          |t          ¦  «        s!t          |›dt          |¦  «        ›�¦  «        ‚|                     ¦   «         }| j        j        j        }|                      t          d„ | j
        D ¦   «         ¦  «        ¦  «        }t          t          |¦  «        ¦  «        D ]}}||         j        r1t          |||         ||         j        |||                  f¦  «        }Œ@||         j        r0t#          |||         ||         j        |||                  f¦  «        }Œ~|S )Nz should be of type dict, got c              3   ó0   K  — | ]}|j         d          V — ŒdS ©r   Nr6   r`   s     r.   rb   z(JointDistribution.cdf.<locals>.<genexpr>2  s(   è è € Ð>Ð>¨A˜aœf QœiÐ>Ð>Ð>Ð>Ð>Ð>r/   )r)   rf   re   ÚtyperÇ   r1   r2   ÚsetsrQ   rh   r  rP   rC   rj   r   Úinfrk   r   )r4   ÚotherrX   rF   r|   rN   r  s          r.   ÚcdfzJointDistribution.cdf-  s  € Ý˜%¥Ñ&Ô&ð 	WÝÀ%À%À%ÍÈeÉÌÈÐUÑVÔVÐVØ�jŠj‰lŒlˆØŒ{ŒÔ#ˆØ�xŠx�Ð>Ð>°´Ð>Ñ>Ô>Ñ>Ô>Ñ?Ô?ˆÝ•s˜5‘z”zÑ"Ô"ð 	$ð 	$ˆAØ�1ŒvÔ#ð $Ý" 4¨#¨a¬&°$°q´'´+Ø˜#˜aœ&”Mð*#ñ $ô $��à�Q”Ô#ð $Ý˜d S¨¤V¨T°!¬W¬[Ø˜#˜aœ&”Mð%#ñ $ô $�øàˆr/   rJ   r‰   Nc                 ó  — d}||vrt          dt          |¦  «        z  ¦  «        ‚t          |¦  «        st          d|z  ¦  «        ‚t	          |         | ||¬¦  «        }|�|S t          d| j        j        ›d|›�¦  «        ‚)z, A random realization from the distribution )r‰   rÄ   rï   ræ   z&Sampling from %s is not supported yet.zFailed to import %srž   NzSampling for z# is not currently implemented from )r{   r_   r$   re   Ú_get_sample_class_jrvrÈ   r’   )r4   rŽ   r‹   rŒ   Ú	librariesÚsampss         r.   r�   zJointDistribution.sample<  s«   € ð 8ˆ	Ø˜)Ð#Ð#Ý%Ð&NÝ*-¨g©,¬,ñ'7ñ 8ô 8ð 8å˜WÑ%Ô%ð 	>ÝÐ2°WÑ<Ñ=Ô=Ð=å% gÔ.¨t°TÀÐEÑEÔEˆàÐØˆLÝ!Ð!à”>Ô*Ð*Ð*¨G¨Gð5ñô ð 	r/   c                 ó   —  | j         |Ž S r(   rÿ   ©r4   r7   s     r.   Ú__call__zJointDistribution.__call__O  ó   € ØˆtŒx˜ˆÐr/   r‘   )r’   r“   r”   r•   Ú	_argnamesr*   r–   r1   rQ   r  r�   r  rJ   r/   r.   rþ   rþ     sœ   € € € € € ðð ð
 €Ið)ð )ð )ð ð+ð +ñ „Xð+ð ð$ð $ñ „Xð$ðð ð ðð ð ð ð&ð ð ð ð r/   rþ   c                   ó   — e Zd ZdZd„ ZdS )r?   zg
    Representation of random symbols with joint probability distributions
    to allow indexing."
    c                 óÒ   — t          | j        t          ¦  «        rL| j        j        |k    dk    r(t	          d| j        ›d| j        j        dz
  ›d�¦  «        ‚t          | |¦  «        S d S )NTzIndex keys for z can only up to r<   ú.)r)   rT   r&   rG   re   Únamer   )r4   Úkeys     r.   Ú__getitem__zJointRandomSymbol.__getitem__W  s}   € Ý�d”k¥;Ñ/Ô/ð 	&Ø”Ô+¨sÒ2°tÒ;Ð;Ý �jØ”Y�Y�Y ¤Ô ;¸aÑ ?Ð ?Ð ?ð"Añ Bô Bð Bå˜4 Ñ%Ô%Ð%ð		&ð 	&r/   N)r’   r“   r”   r•   r  rJ   r/   r.   r?   r?   R  s-   € € € € € ðð ð&ð &ð &ð &ð &r/   r?   c                   ób   — e Zd ZdZd„ Zd„ Zed„ ¦   «         Zed„ ¦   «         Zd„ Z	d„ Z
d„ Zd	„ Zd
S )ÚMarginalDistributionzî
    Represents the marginal distribution of a joint probability space.

    Initialised using a probability distribution and random variables(or
    their indexed components) which should be a part of the resultant
    distribution.
    c                 ó¼  — t          |¦  «        dk    r*t          |d         ¦  «        rt          |d         ¦  «        }t          d„ |D ¦   «         ¦  «        st	          t          d¦  «        ¦  «        ‚t          j        d„ |D ¦   «         ¦  «        }t          |t          ¦  «        s"t          t          |¦  «        ¦  «        dk    r|S t          j        | ||¦  «        S )Nr<   r   c              3   óN   K  — | ] }t          |t          t          f¦  «        V — Œ!d S r(   )r)   r   r   rU   s     r.   rb   z/MarginalDistribution.__new__.<locals>.<genexpr>l  s1   è è € ÐIÐI¸r•:˜b¥7­LÐ"9Ñ:Ô:ÐIÐIÐIÐIÐIÐIr/   z�Marginal distribution can be
             intitialised only in terms of random variables or indexed random
             variablesc              3   ó   K  — | ]}|V — Œd S r(   rJ   rU   s     r.   rb   z/MarginalDistribution.__new__.<locals>.<genexpr>p  s"   è è € Ð.Ð. B˜RÐ.Ð.Ð.Ð.Ð.Ð.r/   )rC   r"   rh   Úallre   r#   r   Úfromiterr)   rþ   r   r   r*   )r+   r-   rX   s      r.   r*   zMarginalDistribution.__new__i  sÙ   € Ýˆs‰8Œ8�qŠ=ˆ=�X c¨!¤fÑ-Ô-ˆ=Ý˜˜Aœ‘-”-ˆCÝÐIÐIÀSÐIÑIÔIÑIÔIð 	Ý�Zð )ñ ô ñ ô ð õ ŒnÐ.Ð.¨#Ð.Ñ.Ô.Ñ.Ô.ˆÝ˜$Õ 1Ñ2Ô2ð 	µs½>È$Ñ;OÔ;OÑ7PÔ7PÐTUÒ7UÐ7UØˆKÝŒ}˜S $¨Ñ,Ô,Ð,r/   c                 ó   — d S r(   rJ   r3   s    r.   ÚcheckzMarginalDistribution.checku  s   € Øˆr/   c                 óV   — d„ | j         d         D ¦   «         }t          d„ |D ¦   «         Ž S )Nc                 ó<   — g | ]}t          |t          ¦  «        ¯|‘ŒS rJ   )r)   r   r`   s     r.   rO   z,MarginalDistribution.set.<locals>.<listcomp>z  s'   € ÐFÐFÐF�Q­*°Q½Ñ*EÔ*EÐFˆqÐFÐFÐFr/   r<   c                 ó&   — g | ]}|j         j        ‘ŒS rJ   )rT   r2   rU   s     r.   rO   z,MarginalDistribution.set.<locals>.<listcomp>{  s   € Ð8Ð8Ð8¨b˜BœIœMÐ8Ð8Ð8r/   )r7   r
   rW   s     r.   r2   zMarginalDistribution.setx  s5   € àFÐF˜$œ) Aœ,ÐFÑFÔFˆÝÐ8Ð8°CÐ8Ñ8Ô8Ð9Ð9r/   c                 ó4   — | j         d         }d„ |D ¦   «         S )Nr<   c                 ó&   — h | ]}|j         j        ’ŒS rJ   )rT   r8   rU   s     r.   ú	<setcomp>z/MarginalDistribution.symbols.<locals>.<setcomp>€  s   € Ð/Ð/Ð/ R�”	Ô Ð/Ð/Ð/r/   r6   rW   s     r.   r  zMarginalDistribution.symbols}  s!   € àŒi˜ŒlˆØ/Ð/¨3Ð/Ñ/Ô/Ð/r/   c                 óÒ  ‡‡— | j         d         | j         d         c}Šˆfd„t          |¦  «        D ¦   «         }t          |t          ¦  «        r[t	          |j        j         ¦  «        }t          dd¬¦  «        Št          ˆfd„|D ¦   «         ¦  «        }|                     |¦  «        }nt          d„ ‰D ¦   «         ¦  «        } t          ||  
                    ||¦  «        ¦  «        ‰Ž S )	Nr   r<   c                 ó   •— g | ]}|‰v¯|‘Œ	S rJ   rJ   rw   s     €r.   rO   z,MarginalDistribution.pdf.<locals>.<listcomp>„  s   ø€ ÐKÐKÐK ¸aÀs¸l¸l˜1¸l¸l¸lr/   ÚxT)Úrealc              3   ó8   •K  — | ]}t          ‰|¦  «        V — Œd S r(   r   )rM   rN   r/  s     €r.   rb   z+MarginalDistribution.pdf.<locals>.<genexpr>ˆ  s+   øè è € Ð6Ð6¨1�  A™œÐ6Ð6Ð6Ð6Ð6Ð6r/   c              3   ór   K  — | ]2}t          |t          ¦  «        r|j        j        n|j        d          V — Œ3dS r	  )r)   r   rT   r8   r7   rU   s     r.   rb   z+MarginalDistribution.pdf.<locals>.<genexpr>‹  sC   è è € ÐhÐhÐ^`­Z¸½LÑ-IÔ-IÐY˜œÔ)Ð)ÈrÌwÐWXÌzÐhÐhÐhÐhÐhÐhr/   )r7   r   r)   rþ   rC   r1   r   rh   rQ   r   Úcompute_pdf)r4   r/  r|   Úmarginalise_outrn   r   rX   s    `    @r.   rQ   zMarginalDistribution.pdf‚  së   øø€ Ø”I˜a”L $¤)¨A¤,ˆ	ˆˆcØKÐKÐKÐK¥n°TÑ&:Ô&:ÐKÑKÔKˆÝ�dÕ-Ñ.Ô.ð 	iÝ˜œÔ(Ñ)Ô)ˆEÝ�c Ð%Ñ%Ô%ˆAÝÐ6Ð6Ð6Ð6°Ð6Ñ6Ô6Ñ6Ô6ˆDØ—8’8˜D‘>”>ˆDˆDåÐhÐhÐdgÐhÑhÔhÑhÔhˆDØD�v�d˜D×,Ò,¨T°?ÑCÔCÑDÔDÀaÐHÐHr/   c                 óˆ   — |D ]>}d}t          |t          ¦  «        r|j        j        }|                      ||z  |¦  «        }Œ?|S r;   )r)   r   rT   rQ   r4  )r4   r|   rX   rV   Úlpdfs        r.   r3  z MarginalDistribution.compute_pdfŽ  sQ   € Øð 	7ð 	7ˆBØˆDÝ˜"�lÑ+Ô+ð %Ø”y”}�Ø×'Ò'¨¨T©	°2Ñ6Ô6ˆDˆDØˆr/   c                 ó<  — ddl m} t          |t          ¦  «        r|j        j        }nRt          |t          ¦  «        r=|j                             |j                             |j	        d         ¦  «        ¦  «        }| 
                    ||j        j        i¦  «        }|j        j        rt          ||j        j        |f¦  «        }nW|j        j        rK|t          j        t          j        t          j        fv r|j        |j        f} |||j        j        |f¦  «        }|S )Nr   )r   r<   )Úsympy.concrete.summationsr   r)   r   rT   r2   r   ry   r[   r7   rl   r8   rj   r   rk   r   ÚIntegersÚNaturalsÚ	Naturals0r  Úsup)r4   r|   rV   r   Údoms        r.   r4  z$MarginalDistribution.marginalise_out–  s  € Ø1Ð1Ð1Ð1Ð1Ð1Ý�b�,Ñ'Ô'ð 	8Ø”)”-ˆCˆCÝ˜�GÑ$Ô$ð 	8Ø”'×*Ò*Ø”	×*Ò*¨2¬7°1¬:Ñ6Ô6ñ8ô 8ˆCà�}Š}˜b "¤)Ô"2Ð3Ñ4Ô4ˆØŒ9Ô"ð 	6õ ˜D 2¤9Ô#3°SÐ"9Ñ:Ô:ˆDˆDØŒYÔ"ð 	6à•q”z¥1¤:­q¬{Ð;Ð;Ð;Ø”w ¤Ð(�Ø�3�t˜bœiÔ.°Ð4Ñ5Ô5ˆDØˆr/   c                 ó   —  | j         |Ž S r(   rÿ   r  s     r.   r  zMarginalDistribution.__call__©  r  r/   N)r’   r“   r”   r•   r*   r&  r–   r2   r  rQ   r3  r4  r  rJ   r/   r.   r  r  `  s±   € € € € € ðð ð
-ð 
-ð 
-ðð ð ð ð:ð :ñ „Xð:ð ð0ð 0ñ „Xð0ð
Ið 
Ið 
Iðð ð ðð ð ð&ð ð ð ð r/   r  N)=r•   Úmathr   Úsympy.core.basicr   Úsympy.core.functionr   Úsympy.core.singletonr   Úsympy.core.symbolr   r   Úsympy.core.sympifyr	   Úsympy.sets.setsr
   Úsympy.tensor.indexedr   Úsympy.concrete.productsr   r8  r   r   Úsympy.core.containersr   Úsympy.integrals.integralsr   r   Úsympy.matricesr   r   r   Úsympy.stats.crvr   r   Úsympy.stats.drvr   r   Úsympy.stats.rvr   r   r   r   r   r   r    r!   Úsympy.utilities.iterablesr"   Úsympy.utilities.miscr#   Úsympy.externalr$   r&   r˜   rÐ   rÞ   r  rþ   r?   r  rJ   r/   r.   ú<module>rQ     s[  ðð	ð 	ð Ð Ð Ð Ð Ð à "Ð "Ð "Ð "Ð "Ð "Ø &Ð &Ð &Ð &Ð &Ð &Ø "Ð "Ð "Ð "Ð "Ð "Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø &Ð &Ð &Ð &Ð &Ð &Ø &Ð &Ð &Ð &Ð &Ð &Ø (Ð (Ð (Ð (Ð (Ð (Ø +Ð +Ð +Ð +Ð +Ð +Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PØ LÐ LÐ LÐ LÐ LÐ LÐ LÐ Lð=ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð /Ð .Ð .Ð .Ð .Ð .Ø +Ð +Ð +Ð +Ð +Ð +Ø (Ð (Ð (Ð (Ð (Ð (ðn$ð n$ð n$ð n$ð n$�-ñ n$ô n$ð n$ðb%Sð %Sð %Sð %Sð %Sñ %Sô %Sð %SðN%Sð %Sð %Sð %Sð %Sñ %Sô %Sð %SðN)Sð )Sð )Sð )Sð )Sñ )Sô )Sð )SðZ ØØØð	ð Ð ð:ð :ð :ð :ð :˜ nñ :ô :ð :ðx
&ð 
&ð 
&ð 
&ð 
&˜ñ 
&ô 
&ð 
&ðJð Jð Jð Jð J˜<ñ Jô Jð Jð Jð Jr/   