Ë
    7^(hâZ  ã                   óì  — d dl 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 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*m+Z+ g d¢Z, e(jZ                  e«      d„ «       Z. e(jZ                  e"«      d„ «       Z. G d„ de«      Z/ G d„ de«      Z0 G d„ de«      Z1 G d„ de«      Z2 G d„ de«      Z3 G d „ d!e«      Z4y)"é    N)ÚSum)ÚAdd)ÚExpr)Úexpand)ÚMul)ÚEq)ÚS)ÚSymbol)ÚIntegral)ÚNot)Úglobal_parameters)Údefault_sort_key)Ú_sympify)Ú
Relational)ÚBoolean)ÚvarianceÚ
covariance)
ÚRandomSymbolÚpspaceÚ	dependentÚgivenÚ
sampling_EÚRandomIndexedSymbolÚ	is_randomÚPSpaceÚ
sampling_PÚrandom_symbols)ÚProbabilityÚExpectationÚVarianceÚ
Covariancec                 óŠ   — | j                   }t        |«      dk(  rt        t        |«      «      | k(  ryt	        d„ |D «       «      S )Né   Fc              3   ó2   K  — | ]  }t        |«      –— Œ y ­w©N)r   )Ú.0Úis     ú^/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/stats/symbolic_probability.pyú	<genexpr>z_.<locals>.<genexpr>   s   è ø€ Ò+ Œy˜�|Ñ+ùs   ‚)Úfree_symbolsÚlenÚnextÚiterÚany)ÚxÚatomss     r(   Ú_r1      s:   € à�N‰N€EÜ
ˆ5ƒz�Q‚œ4¤ U£Ó,°Ò1ØÜÑ+ UÔ+Ó+Ð+ó    c                  ó   — y)NT© )r/   s    r(   r1   r1       s   € àr2   c                   ó4   — e Zd ZdZdZdd„Zd„ Zdd„ZeZd„ Z	y)	r   a  
    Symbolic expression for the probability.

    Examples
    ========

    >>> from sympy.stats import Probability, Normal
    >>> from sympy import Integral
    >>> X = Normal("X", 0, 1)
    >>> prob = Probability(X > 1)
    >>> prob
    Probability(X > 1)

    Integral representation:

    >>> prob.rewrite(Integral)
    Integral(sqrt(2)*exp(-_z**2/2)/(2*sqrt(pi)), (_z, 1, oo))

    Evaluation of the integral:

    >>> prob.evaluate_integral()
    sqrt(2)*(-sqrt(2)*sqrt(pi)*erf(sqrt(2)/2) + sqrt(2)*sqrt(pi))/(4*sqrt(pi))
    TNc                 ó    — t        |«      }|€t        j                  | |«      }n"t        |«      }t        j                  | ||«      }||_        |S r%   )r   r   Ú__new__Ú
_condition)ÚclsÚprobÚ	conditionÚkwargsÚobjs        r(   r7   zProbability.__new__@   sI   € Ü˜‹~ˆØÐÜ—,‘,˜s DÓ)‰Cä  Ó+ˆIÜ—,‘,˜s D¨)Ó4ˆCØ"ˆŒØˆ
r2   c                 ó  ‡— | j                   d   }| j                  Š|j                  dd«      }|j                  dd«      }t        |t        «      rBt
        j                   | j                  |j                   d   ‰|¬«      j                  di |¤Žz
  S |j                  t        «      rt        |«      j                  |‰|¬«      S t        ‰t        «      r‰t        |«      }t        |«      dk(  r7|d   ‰k(  r/ddlm}  | | j                  |«      j                  di |¤Ždd«      S t%        ˆfd	„|D «       «      rt'        |‰«      S t'        |«      j                  «       S ‰�$t        ‰t(        t*        f«      st-        d
‰z  «      ‚‰dk(  s|t
        j.                  u rt
        j0                  S t        |t(        t*        f«      st-        d
|z  «      ‚|t
        j2                  u rt
        j                  S |rt5        |‰|¬«      S ‰�#t'        t7        |‰«      «      j                  «       S t        |«      t9        «       k(  rt'        |‰«      S t        |«      j                  |«      }t;        |d«      r|r|j                  «       S |S )Nr   Ú
numsamplesFÚevaluateT©r@   r#   )ÚBernoulliDistributionc              3   ó6   •K  — | ]  }t        |‰«      –— Œ y ­wr%   )r   )r&   ÚrvÚgiven_conditions     €r(   r)   z#Probability.doit.<locals>.<genexpr>]   s   øè ø€ ÒC°b”9˜R ×1ÑCùs   ƒz4%s is not a relational or combination of relationals)r?   Údoitr4   )Úargsr8   ÚgetÚ
isinstancer   r	   ÚOneÚfuncrF   Úhasr   r   Úprobabilityr   r   r+   Úsympy.stats.frv_typesrB   r.   r   r   r   Ú
ValueErrorÚfalseÚZeroÚtruer   r   r   Úhasattr)	ÚselfÚhintsr;   r?   r@   ÚcondrvrB   ÚresultrE   s	           @r(   rF   zProbability.doitJ   sX  ø€ Ø—I‘I˜a‘Lˆ	ØŸ/™/ˆØ—Y‘Y˜|¨UÓ3ˆ
Ø—9‘9˜Z¨Ó.ˆä�i¤Ô%Ü—5‘5ð <˜4Ÿ9™9 Y§^¡^°AÑ%6¸Ø-5ð %ó 7ß7;±tñEØ>CñEñ Eð Eð �=‰=Ô,Ô-Ü˜)Ó$×0Ñ0°¸OØ6>ð 1ó @ð @ô �o¤|Ô4Ü# IÓ.ˆFÜ�6‹{˜aÒ F¨1¡I°Ò$@ÝGÙ,Ð-F¨T¯Y©Y°yÓ-A×-FÑ-FÑ-OÈÑ-OÐQRÐTUÓVÐVÜÓC¸FÔCÔCÜ" 9¨oÓ>Ð>ä" 9Ó-×2Ñ2Ó4Ð4àÐ&Ü˜´¼WÐ0EÔFÜÐSØ&ñ(ó )ð )ð ˜eÒ# y´A·G±GÑ';Ü—6‘6ˆMÜ˜)¤j´'Ð%:Ô;ÜÐSØ ñ"ó #ð #àœŸ™ÑÜ—5‘5ˆLáÜ˜i¨ÀZÔPÐPØÐ&äœu Y°Ó@ÓA×FÑFÓHÐHô �)Ó¤£Ò(Ü˜y¨/Ó:Ð:ä˜	Ó"×.Ñ.¨yÓ9ˆÜ�6˜6Ô"¡xØ—;‘;“=Ð àˆMr2   c                 óH   — | j                  ||¬«      j                  d¬«      S )N©r;   FrA   ©rK   rF   ©rT   Úargr;   r<   s       r(   Ú_eval_rewrite_as_Integralz%Probability._eval_rewrite_as_Integral   s#   € Ø�y‰y˜¨	ˆyÓ2×7Ñ7ÀÐ7ÓGÐGr2   c                 óH   — | j                  t        «      j                  «       S r%   ©Úrewriter   rF   ©rT   s    r(   Úevaluate_integralzProbability.evaluate_integral„   ó   € Ø�|‰|œHÓ%×*Ñ*Ó,Ð,r2   r%   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úis_commutativer7   rF   r]   Ú_eval_rewrite_as_Sumrb   r4   r2   r(   r   r   %   s,   „ ñð0 €Nóò3ójHð 5Ðó-r2   r   c                   óH   — e Zd ZdZd
d„Zd„ Zd„ Zd„ Zd
d„Zdd„Z	e	Z
d	„ ZeZy)r   a(  
    Symbolic expression for the expectation.

    Examples
    ========

    >>> from sympy.stats import Expectation, Normal, Probability, Poisson
    >>> from sympy import symbols, Integral, Sum
    >>> mu = symbols("mu")
    >>> sigma = symbols("sigma", positive=True)
    >>> X = Normal("X", mu, sigma)
    >>> Expectation(X)
    Expectation(X)
    >>> Expectation(X).evaluate_integral().simplify()
    mu

    To get the integral expression of the expectation:

    >>> Expectation(X).rewrite(Integral)
    Integral(sqrt(2)*X*exp(-(X - mu)**2/(2*sigma**2))/(2*sqrt(pi)*sigma), (X, -oo, oo))

    The same integral expression, in more abstract terms:

    >>> Expectation(X).rewrite(Probability)
    Integral(x*Probability(Eq(X, x)), (x, -oo, oo))

    To get the Summation expression of the expectation for discrete random variables:

    >>> lamda = symbols('lamda', positive=True)
    >>> Z = Poisson('Z', lamda)
    >>> Expectation(Z).rewrite(Sum)
    Sum(Z*lamda**Z*exp(-lamda)/factorial(Z), (Z, 0, oo))

    This class is aware of some properties of the expectation:

    >>> from sympy.abc import a
    >>> Expectation(a*X)
    Expectation(a*X)
    >>> Y = Normal("Y", 1, 2)
    >>> Expectation(X + Y)
    Expectation(X + Y)

    To expand the ``Expectation`` into its expression, use ``expand()``:

    >>> Expectation(X + Y).expand()
    Expectation(X) + Expectation(Y)
    >>> Expectation(a*X + Y).expand()
    a*Expectation(X) + Expectation(Y)
    >>> Expectation(a*X + Y)
    Expectation(a*X + Y)
    >>> Expectation((X + Y)*(X - Y)).expand()
    Expectation(X**2) - Expectation(Y**2)

    To evaluate the ``Expectation``, use ``doit()``:

    >>> Expectation(X + Y).doit()
    mu + 1
    >>> Expectation(X + Expectation(Y + Expectation(2*X))).doit()
    3*mu + 1

    To prevent evaluating nested ``Expectation``, use ``doit(deep=False)``

    >>> Expectation(X + Expectation(Y)).doit(deep=False)
    mu + Expectation(Expectation(Y))
    >>> Expectation(X + Expectation(Y + Expectation(2*X))).doit(deep=False)
    mu + Expectation(Expectation(Expectation(2*X) + Y))

    Nc                 óð   — t        |«      }|j                  rddlm}  |||«      S |€$t	        |«      s|S t        j                  | |«      }n"t        |«      }t        j                  | ||«      }||_        |S )Nr   )ÚExpectationMatrix)r   Ú	is_MatrixÚ-sympy.stats.symbolic_multivariate_probabilityrl   r   r   r7   r8   )r9   Úexprr;   r<   rl   r=   s         r(   r7   zExpectation.__new__Î   sl   € Ü˜‹~ˆØ�>Š>ÝWÙ$ T¨9Ó5Ð5ØÐÜ˜T”?Ø�Ü—,‘,˜s DÓ)‰Cä  Ó+ˆIÜ—,‘,˜s D¨)Ó4ˆCØ"ˆŒØˆ
r2   c                 ó4   — | j                   d   j                  S ©Nr   ©rG   rh   ra   s    r(   Ú_eval_is_commutativez Expectation._eval_is_commutativeÝ   s   € Ø�y‰y˜‰|×*Ñ*Ð+r2   c                 ó`  ‡— | j                   d   }| j                  Št        |«      s|S t        |t        «      r(t	        j
                  ˆfd„|j                   D «       «      S t        |«      }t        |t        «      r(t	        j
                  ˆfd„|j                   D «       «      S t        |t        «      ryg }g }|j                   D ]0  }t        |«      r|j                  |«       Œ |j                  |«       Œ2 t        j
                  |«      t        t        j
                  |«      ‰¬«      z  S | S )Nr   c              3   óT   •K  — | ]  }t        |‰¬ «      j                  «       –— Œ! y­w©rY   N©r   r   ©r&   Úar;   s     €r(   r)   z%Expectation.expand.<locals>.<genexpr>è   s)   øè ø€ ò  (Øô !,¨A¸Ô C× JÑ J× Lñ  (ùó   ƒ%(c              3   óT   •K  — | ]  }t        |‰¬ «      j                  «       –— Œ! y­wrv   rw   rx   s     €r(   r)   z%Expectation.expand.<locals>.<genexpr>í   s)   øè ø€ ò  /Øô !,¨A¸Ô C× JÑ J× Lñ  /ùrz   rY   )
rG   r8   r   rI   r   ÚfromiterÚ_expandr   Úappendr   )rT   rU   ro   Úexpand_exprrD   Únonrvry   r;   s          @r(   r   zExpectation.expandà   sû   ø€ Ø�y‰y˜‰|ˆØ—O‘Oˆ	ä˜ŒØˆKä�dœCÔ Ü—<‘<ó  (Ø!ŸY™Yô (ó (ð (ô ˜d“mˆÜ�k¤3Ô'Ü—<‘<ó  /Ø(×-Ñ-ô /ó /ð /ô ˜œcÔ"ØˆBØˆEØ—Y‘Yò $�Ü˜Q”<Ø—I‘I˜a•Là—L‘L •Oð	$ô
 —<‘< Ó&¤{´3·<±<ÀÓ3CÈyÔ'YÑYÐYàˆr2   c           
      óü  — |j                  dd«      }| j                  }| j                  d   }|j                  dd«      }|j                  dd«      }|r |j                  di |¤Ž}t	        |«      rt        |t        «      r|S |r!|j                  dd«      }t        ||||¬«      S |j                  t        «      rt        |«      j                  ||«      S |�+ | j                  t        ||«      «      j                  di |¤ŽS |j                  rbt        |j                  D �cg c]F  }t        |t        «      s" | j                  ||«      j                  di |¤Žn| j                  ||«      ‘ŒH c}Ž S |j                   r|j#                  t        «      r|S t        |«      t%        «       k(  r| j                  |«      S t        |«      j                  ||¬	«      }	t'        |	d
«      r|r |	j                  di |¤ŽS |	S c c}w )NÚdeepTr   r?   Fr@   Úevalf)r?   rƒ   rA   rF   r4   )rH   r8   rG   rF   r   rI   r   r   rL   r   r   Úcompute_expectationrK   r   Úis_Addr   Úis_Mulr0   r   rS   )
rT   rU   r‚   r;   ro   r?   r@   rƒ   r\   rW   s
             r(   rF   zExpectation.doitü   sÍ  € Ø�y‰y˜ Ó&ˆØ—O‘Oˆ	Ø�y‰y˜‰|ˆØ—Y‘Y˜|¨UÓ3ˆ
Ø—9‘9˜Z¨Ó.ˆáØ�4—9‘9Ñ%˜uÑ%ˆDä˜Œ¤*¨T´;Ô"?ØˆKÙØ—I‘I˜g tÓ,ˆEÜ˜d I¸*ÈEÔRÐRà�8‰8Ô'Ô(Ü˜$“<×3Ñ3°D¸)ÓDÐDð Ð Ø9�4—9‘9œU 4¨Ó3Ó4×9Ñ9ÑB¸EÑBÐBð �;Š;Üà$(§I¡Iö/à ô & c¬;Ô7ð 8˜Ÿ™ 3¨	Ó2×7Ñ7Ñ@¸%Ò@Ø=A¿Y¹YÀsÈIÓ=VñWò /ð 0ð 0ð �;Š;Ø�z‰zœ+Ô&Ø�ä�$‹<œ6›8Ò#Ø—9‘9˜T“?Ð"ä˜“×1Ñ1°$ÀÐ1ÓJˆÜ�6˜6Ô"¡xØ�6—;‘;Ñ' Ñ'Ð'àˆMùò/s   Ä"AG9c           	      óü  — |j                  t        «      }t        |«      dkD  r
t        «       ‚t        |«      dk(  r|S |j	                  «       }|j
                  €t        d«      ‚|j                  }|j                  d   j                  «       r$t        |j                  j                  «       «      }nt        |j                  dz   «      }|j
                  j                  r†t        |j                  ||«      t        t!        ||«      |«      z  ||j
                  j"                  j$                  j&                  |j
                  j"                  j$                  j(                  f«      S |j
                  j*                  rt        ‚t-        |j                  ||«      t        t!        ||«      |«      z  ||j
                  j"                  j$                  j&                  |j
                  j$                  j(                  f«      S )Nr#   r   zProbability space not knownÚ_1)r0   r   r+   ÚNotImplementedErrorÚpopr   rO   ÚsymbolÚnameÚisupperr
   ÚlowerÚis_Continuousr   Úreplacer   r   ÚdomainÚsetÚinfÚsupÚ	is_Finiter   )rT   r\   r;   r<   ÚrvsrD   r‹   s          r(   Ú_eval_rewrite_as_Probabilityz(Expectation._eval_rewrite_as_Probability'  sÓ  € Ø�i‰iœÓ%ˆÜˆs‹8�aŠ<Ü%Ó'Ð'Üˆs‹8�qŠ=ØˆJà�W‰W‹YˆØ�9‰9ÐÜÐ:Ó;Ð;à—‘ˆØ�;‰;�q‰>×!Ñ!Ô#Ü˜FŸK™K×-Ñ-Ó/Ó0‰Fä˜FŸK™K¨$Ñ.Ó/ˆFà�9‰9×"Ò"Ü˜CŸK™K¨¨FÓ3´KÄÀ2ÀvÃÐPYÓ4ZÑZÐ]cÐeg×enÑen×euÑeu×eyÑey×e}Ñe}ð  @B÷  @Iñ  @I÷  @Pñ  @P÷  @Tñ  @T÷  @Xñ  @Xð  ]Yó  Zð  Zà�y‰y×"Ò"Ü)Ð)ä˜3Ÿ;™; r¨6Ó2´;¼rÀ"Àf»~ÈyÓ3YÑYÐ\bÐdf×dmÑdm×dtÑdt×dxÑdx×d|Ñd|ð  A÷  Hñ  H÷  Lñ  L÷  Pñ  Pð  \Qó  Rð  Rr2   c                 óJ   — | j                  ||¬«      j                  d|¬«      S )NrY   F)r‚   r@   rZ   )rT   r\   r;   r@   r<   s        r(   r]   z%Expectation._eval_rewrite_as_Integral@  s%   € Ø�y‰y˜¨	ˆyÓ2×7Ñ7¸UÈXÐ7ÓVÐVr2   c                 óH   — | j                  t        «      j                  «       S r%   r_   ra   s    r(   rb   zExpectation.evaluate_integralE  rc   r2   r%   )NF)rd   re   rf   rg   r7   rs   r   rF   r—   r]   ri   rb   Úevaluate_sumr4   r2   r(   r   r   ˆ   s>   „ ñCóJò,òò8(óVRó2Wð 5Ðò-ð %�Lr2   r   c                   óF   — e Zd ZdZd
d„Zd„ Zd„ Zd
d„Zd
d„Zd
d„Z	e	Z
d	„ Zy)r    a¶  
    Symbolic expression for the variance.

    Examples
    ========

    >>> from sympy import symbols, Integral
    >>> from sympy.stats import Normal, Expectation, Variance, Probability
    >>> mu = symbols("mu", positive=True)
    >>> sigma = symbols("sigma", positive=True)
    >>> X = Normal("X", mu, sigma)
    >>> Variance(X)
    Variance(X)
    >>> Variance(X).evaluate_integral()
    sigma**2

    Integral representation of the underlying calculations:

    >>> Variance(X).rewrite(Integral)
    Integral(sqrt(2)*(X - Integral(sqrt(2)*X*exp(-(X - mu)**2/(2*sigma**2))/(2*sqrt(pi)*sigma), (X, -oo, oo)))**2*exp(-(X - mu)**2/(2*sigma**2))/(2*sqrt(pi)*sigma), (X, -oo, oo))

    Integral representation, without expanding the PDF:

    >>> Variance(X).rewrite(Probability)
    -Integral(x*Probability(Eq(X, x)), (x, -oo, oo))**2 + Integral(x**2*Probability(Eq(X, x)), (x, -oo, oo))

    Rewrite the variance in terms of the expectation

    >>> Variance(X).rewrite(Expectation)
    -Expectation(X)**2 + Expectation(X**2)

    Some transformations based on the properties of the variance may happen:

    >>> from sympy.abc import a
    >>> Y = Normal("Y", 0, 1)
    >>> Variance(a*X)
    Variance(a*X)

    To expand the variance in its expression, use ``expand()``:

    >>> Variance(a*X).expand()
    a**2*Variance(X)
    >>> Variance(X + Y)
    Variance(X + Y)
    >>> Variance(X + Y).expand()
    2*Covariance(X, Y) + Variance(X) + Variance(Y)

    Nc                 óÖ   — t        |«      }|j                  rddlm}  |||«      S |€t	        j
                  | |«      }n"t        |«      }t	        j
                  | ||«      }||_        |S )Nr   )ÚVarianceMatrix)r   rm   rn   r�   r   r7   r8   )r9   r\   r;   r<   r�   r=   s         r(   r7   zVariance.__new__{  s`   € Ü�s‹mˆà�=Š=ÝTÙ! # yÓ1Ð1ØÐÜ—,‘,˜s CÓ(‰Cä  Ó+ˆIÜ—,‘,˜s C¨Ó3ˆCØ"ˆŒØˆ
r2   c                 ó4   — | j                   d   j                  S rq   rr   ra   s    r(   rs   zVariance._eval_is_commutative‰  ó   € Ø�y‰y˜‰|×*Ñ*Ð*r2   c           	      óì  ‡	— | j                   d   }| j                  Š	t        |«      st        j                  S t        |t        «      r| S t        |t        «      rqg }|j                   D ]  }t        |«      sŒ|j                  |«       Œ! t        ˆ	fd„|D «       Ž }ˆ	fd„}t        t        |t        j                  |d«      «      Ž }||z   S t        |t        «      r™g }g }|j                   D ]3  }t        |«      r|j                  |«       Œ |j                  |dz  «       Œ5 t        |«      dk(  rt        j                  S t        j                  |«      t        t        j                  |«      ‰	«      z  S | S )Nr   c              3   óR   •K  — | ]  }t        |‰«      j                  «       –— Œ  y ­wr%   )r    r   )r&   Úxvr;   s     €r(   r)   z"Variance.expand.<locals>.<genexpr>š  s!   øè ø€ ÒLÀ2œh r¨9Ó5×<Ñ<×>ÑLùs   ƒ$'c                 ó<   •— dt        | d‰iŽj                  «       z  S )Né   r;   )r!   r   )r/   r;   s    €r(   ú<lambda>z!Variance.expand.<locals>.<lambda>›  s   ø€  Q¤z°1Ð'JÀ	Ñ'J×'QÑ'QÓ'SÑ%S€ r2   r¤   )rG   r8   r   r	   rQ   rI   r   r   r~   ÚmapÚ	itertoolsÚcombinationsr   r+   r|   r    )
rT   rU   r\   rD   ry   Ú	variancesÚmap_to_covarÚcovariancesr€   r;   s
            @r(   r   zVariance.expandŒ  s6  ø€ Ø�i‰i˜‰lˆØ—O‘Oˆ	ä˜Œ~Ü—6‘6ˆMä�cœ<Ô(ØˆKÜ˜œSÔ!ØˆBØ—X‘Xò !�Ü˜Q•<Ø—I‘I˜a•Lð!ô ÓLÈÔLÐMˆIÛSˆLÜœs <´×1GÑ1GÈÈAÓ1NÓOÐPˆKØ˜{Ñ*Ð*Ü˜œSÔ!ØˆEØˆBØ—X‘Xò '�Ü˜Q”<Ø—I‘I˜a•Là—L‘L  A¡Õ&ð	'ô
 �2‹w˜!Š|Ü—v‘v�Ü—<‘< Ó&¤x´·±¸RÓ0@À)Ó'LÑLÐLð ˆr2   c                 óH   — t        |dz  |«      }t        ||«      dz  }||z
  S )Nr¤   ©r   )rT   r\   r;   r<   Úe1Úe2s         r(   Ú_eval_rewrite_as_Expectationz%Variance._eval_rewrite_as_Expectation­  s,   € Ü˜S !™V YÓ/ˆBÜ˜S )Ó,¨aÑ/ˆBØ˜‘7ˆNr2   c                 óR   — | j                  t        «      j                  t        «      S r%   ©r`   r   r   r[   s       r(   r—   z%Variance._eval_rewrite_as_Probability²  ó   € Ø�|‰|œKÓ(×0Ñ0´Ó=Ð=r2   c                 óL   — t        | j                  d   | j                  d¬«      S )Nr   FrA   )r   rG   r8   r[   s       r(   r]   z"Variance._eval_rewrite_as_Integralµ  s   € Ü˜Ÿ	™	 !™ d§o¡oÀÔFÐFr2   c                 óH   — | j                  t        «      j                  «       S r%   r_   ra   s    r(   rb   zVariance.evaluate_integralº  rc   r2   r%   )rd   re   rf   rg   r7   rs   r   r°   r—   r]   ri   rb   r4   r2   r(   r    r    J  s5   „ ñ/ó`ò+òóBó
>óGð 5Ðó-r2   r    c                   óf   — e Zd ZdZdd„Zd„ Zd„ Zed„ «       Zed„ «       Z	dd„Z
dd	„Zdd
„ZeZd„ Zy)r!   a˜  
    Symbolic expression for the covariance.

    Examples
    ========

    >>> from sympy.stats import Covariance
    >>> from sympy.stats import Normal
    >>> X = Normal("X", 3, 2)
    >>> Y = Normal("Y", 0, 1)
    >>> Z = Normal("Z", 0, 1)
    >>> W = Normal("W", 0, 1)
    >>> cexpr = Covariance(X, Y)
    >>> cexpr
    Covariance(X, Y)

    Evaluate the covariance, `X` and `Y` are independent,
    therefore zero is the result:

    >>> cexpr.evaluate_integral()
    0

    Rewrite the covariance expression in terms of expectations:

    >>> from sympy.stats import Expectation
    >>> cexpr.rewrite(Expectation)
    Expectation(X*Y) - Expectation(X)*Expectation(Y)

    In order to expand the argument, use ``expand()``:

    >>> from sympy.abc import a, b, c, d
    >>> Covariance(a*X + b*Y, c*Z + d*W)
    Covariance(a*X + b*Y, c*Z + d*W)
    >>> Covariance(a*X + b*Y, c*Z + d*W).expand()
    a*c*Covariance(X, Z) + a*d*Covariance(W, X) + b*c*Covariance(Y, Z) + b*d*Covariance(W, Y)

    This class is aware of some properties of the covariance:

    >>> Covariance(X, X).expand()
    Variance(X)
    >>> Covariance(a*X, b*Y).expand()
    a*b*Covariance(X, Y)
    Nc                 óv  — t        |«      }t        |«      }|j                  s|j                  rddlm}  ||||«      S |j	                  dt
        j                  «      rt        ||gt        ¬«      \  }}|€t        j                  | ||«      }n#t        |«      }t        j                  | |||«      }||_        |S )Nr   )ÚCrossCovarianceMatrixr@   ©Úkey)r   rm   rn   r¸   rŠ   r   r@   Úsortedr   r   r7   r8   )r9   Úarg1Úarg2r;   r<   r¸   r=   s          r(   r7   zCovariance.__new__ë  sŸ   € Ü˜‹~ˆÜ˜‹~ˆà�>Š>˜TŸ^š^Ý[Ù(¨¨t°YÓ?Ð?à�:‰:�jÔ"3×"<Ñ"<Ô=Ü  t Ô2BÔC‰JˆD�$àÐÜ—,‘,˜s D¨$Ó/‰Cä  Ó+ˆIÜ—,‘,˜s D¨$°	Ó:ˆCØ"ˆŒØˆ
r2   c                 ó4   — | j                   d   j                  S rq   rr   ra   s    r(   rs   zCovariance._eval_is_commutativeþ  rŸ   r2   c                 óÀ  — | j                   d   }| j                   d   }| j                  }||k(  rt        ||«      j                  «       S t	        |«      st
        j                  S t	        |«      st
        j                  S t        ||gt        ¬«      \  }}t        |t        «      rt        |t        «      rt        |||«      S | j                  |j                  «       «      }| j                  |j                  «       «      }|D ���	�
cg c]1  \  }}|D ]'  \  }	}
||	z  t        t        ||
gt        ¬«      d|iŽz  ‘Œ) Œ3 }}	}}}
t        j                  |«      S c c}
}	}}w )Nr   r#   r¹   r;   )rG   r8   r    r   r   r	   rQ   r»   r   rI   r   r!   Ú_expand_single_argumentr   r|   )rT   rU   r¼   r½   r;   Úcoeff_rv_list1Úcoeff_rv_list2ry   Úr1ÚbÚr2Úaddendss               r(   r   zCovariance.expand  s>  € Ø�y‰y˜‰|ˆØ�y‰y˜‰|ˆØ—O‘Oˆ	à�4Š<Ü˜D )Ó,×3Ñ3Ó5Ð5ä˜ŒÜ—6‘6ˆMÜ˜ŒÜ—6‘6ˆMä˜T 4˜LÔ.>Ô?‰
ˆˆdä�dœLÔ)¬j¸¼|Ô.LÜ˜d D¨)Ó4Ð4à×5Ñ5°d·k±k³mÓDˆØ×5Ñ5°d·k±k³mÓDˆð #1÷Pñ PÙ˜˜2ÀòPÙ5<°a¸ð �Q‘3”z¤6¨2¨r¨(Ô8HÔ#IÐ_ÐU^Ñ_Ó_ð PÐ_ð Pˆó Pä�|‰|˜GÓ$Ð$ùõPs   Ä6E
c                 óÐ  — t        |t        «      rt        j                  |fgS t        |t        «      rsg }|j
                  D ]`  }t        |t        «      r!|j                  | j                  |«      «       Œ4t        |«      sŒ@|j                  t        j                  |f«       Œb |S t        |t        «      r| j                  |«      gS t        |«      rt        j                  |fgS y r%   )
rI   r   r	   rJ   r   rG   r   r~   Ú_get_mul_nonrv_rv_tupler   )r9   ro   Úoutvalry   s       r(   rÀ   z"Covariance._expand_single_argument  s½   € ô �dœLÔ)Ü—U‘U˜D�M�?Ð"Ü˜œcÔ"ØˆFØ—Y‘Yò .�Ü˜a¤Ô%Ø—M‘M #×"=Ñ"=¸aÓ"@ÕAÜ˜q•\Ø—M‘M¤1§5¡5¨! *Õ-ð	.ð ˆMÜ˜œcÔ"Ø×/Ñ/°Ó5Ð6Ð6Ü�tŒ_Ü—U‘U˜D�M�?Ð"ð r2   c                 óÜ   — g }g }|j                   D ]0  }t        |«      r|j                  |«       Œ |j                  |«       Œ2 t        j                  |«      t        j                  |«      fS r%   )rG   r   r~   r   r|   )r9   ÚmrD   r€   ry   s        r(   rÈ   z"Covariance._get_mul_nonrv_rv_tuple-  s[   € àˆØˆØ—‘ò 	 ˆAÜ˜Œ|Ø—	‘	˜!•à—‘˜Q•ð		 ô
 —‘˜UÓ#¤S§\¡\°"Ó%5Ð6Ð6r2   c                 ó\   — t        ||z  |«      }t        ||«      t        ||«      z  }||z
  S r%   r­   )rT   r¼   r½   r;   r<   r®   r¯   s          r(   r°   z'Covariance._eval_rewrite_as_Expectation8  s3   € Ü˜˜d™ IÓ.ˆÜ˜˜yÓ)¬+°d¸IÓ*FÑFˆØ�B‰wˆr2   c                 óR   — | j                  t        «      j                  t        «      S r%   r²   ©rT   r¼   r½   r;   r<   s        r(   r—   z'Covariance._eval_rewrite_as_Probability=  r³   r2   c                 óh   — t        | j                  d   | j                  d   | j                  d¬«      S )Nr   r#   FrA   )r   rG   r8   rÎ   s        r(   r]   z$Covariance._eval_rewrite_as_Integral@  s(   € Ü˜$Ÿ)™) A™,¨¯	©	°!©°d·o±oÐPUÔVÐVr2   c                 óH   — | j                  t        «      j                  «       S r%   r_   ra   s    r(   rb   zCovariance.evaluate_integralE  rc   r2   r%   )rd   re   rf   rg   r7   rs   r   ÚclassmethodrÀ   rÈ   r°   r—   r]   ri   rb   r4   r2   r(   r!   r!   ¾  s\   „ ñ*óXò&+ò%ð2 ñ#ó ð#ð$ ñ7ó ð7óó
>óWð 5Ðó-r2   r!   c                   óB   ‡ — e Zd ZdZdˆ fd„	Zd„ Zdd„Zdd„Zdd„Zˆ xZ	S )ÚMomenta�  
    Symbolic class for Moment

    Examples
    ========

    >>> from sympy import Symbol, Integral
    >>> from sympy.stats import Normal, Expectation, Probability, Moment
    >>> mu = Symbol('mu', real=True)
    >>> sigma = Symbol('sigma', positive=True)
    >>> X = Normal('X', mu, sigma)
    >>> M = Moment(X, 3, 1)

    To evaluate the result of Moment use `doit`:

    >>> M.doit()
    mu**3 - 3*mu**2 + 3*mu*sigma**2 + 3*mu - 3*sigma**2 - 1

    Rewrite the Moment expression in terms of Expectation:

    >>> M.rewrite(Expectation)
    Expectation((X - 1)**3)

    Rewrite the Moment expression in terms of Probability:

    >>> M.rewrite(Probability)
    Integral((x - 1)**3*Probability(Eq(X, x)), (x, -oo, oo))

    Rewrite the Moment expression in terms of Integral:

    >>> M.rewrite(Integral)
    Integral(sqrt(2)*(X - 1)**3*exp(-(X - mu)**2/(2*sigma**2))/(2*sqrt(pi)*sigma), (X, -oo, oo))

    c                 óª   •— t        |«      }t        |«      }t        |«      }|�t        |«      }t        ‰| �	  | ||||«      S t        ‰| �	  | |||«      S r%   ©r   Úsuperr7   )r9   ÚXÚnÚcr;   r<   Ú	__class__s         €r(   r7   zMoment.__new__l  sZ   ø€ Ü�Q‹KˆÜ�Q‹KˆÜ�Q‹KˆØÐ Ü  Ó+ˆIÜ‘7‘? 3¨¨1¨a°Ó;Ð;ä‘7‘? 3¨¨1¨aÓ0Ð0r2   c                 óL   —  | j                  t        «      j                  di |¤ŽS ©Nr4   ©r`   r   rF   ©rT   rU   s     r(   rF   zMoment.doitv  ó!   € Ø-ˆt�|‰|œKÓ(×-Ñ-Ñ6°Ñ6Ð6r2   c                 ó&   — t        ||z
  |z  |«      S r%   r­   ©rT   r×   rØ   rÙ   r;   r<   s         r(   r°   z#Moment._eval_rewrite_as_Expectationy  s   € Ü˜A ™E A™: yÓ1Ð1r2   c                 óR   — | j                  t        «      j                  t        «      S r%   r²   rá   s         r(   r—   z#Moment._eval_rewrite_as_Probability|  r³   r2   c                 óR   — | j                  t        «      j                  t        «      S r%   ©r`   r   r   rá   s         r(   r]   z Moment._eval_rewrite_as_Integral  ó   € Ø�|‰|œKÓ(×0Ñ0´Ó:Ð:r2   )r   N©
rd   re   rf   rg   r7   rF   r°   r—   r]   Ú__classcell__©rÚ   s   @r(   rÓ   rÓ   I  s"   ø„ ñ!õD1ò7ó2ó>÷;r2   rÓ   c                   óB   ‡ — e Zd ZdZdˆ fd„	Zd„ Zdd„Zdd„Zdd„Zˆ xZ	S )ÚCentralMomenta'  
    Symbolic class Central Moment

    Examples
    ========

    >>> from sympy import Symbol, Integral
    >>> from sympy.stats import Normal, Expectation, Probability, CentralMoment
    >>> mu = Symbol('mu', real=True)
    >>> sigma = Symbol('sigma', positive=True)
    >>> X = Normal('X', mu, sigma)
    >>> CM = CentralMoment(X, 4)

    To evaluate the result of CentralMoment use `doit`:

    >>> CM.doit().simplify()
    3*sigma**4

    Rewrite the CentralMoment expression in terms of Expectation:

    >>> CM.rewrite(Expectation)
    Expectation((-Expectation(X) + X)**4)

    Rewrite the CentralMoment expression in terms of Probability:

    >>> CM.rewrite(Probability)
    Integral((x - Integral(x*Probability(True), (x, -oo, oo)))**4*Probability(Eq(X, x)), (x, -oo, oo))

    Rewrite the CentralMoment expression in terms of Integral:

    >>> CM.rewrite(Integral)
    Integral(sqrt(2)*(X - Integral(sqrt(2)*X*exp(-(X - mu)**2/(2*sigma**2))/(2*sqrt(pi)*sigma), (X, -oo, oo)))**4*exp(-(X - mu)**2/(2*sigma**2))/(2*sqrt(pi)*sigma), (X, -oo, oo))

    c                 ó�   •— t        |«      }t        |«      }|�t        |«      }t        ‰| �	  | |||«      S t        ‰| �	  | ||«      S r%   rÕ   )r9   r×   rØ   r;   r<   rÚ   s        €r(   r7   zCentralMoment.__new__¦  sM   ø€ Ü�Q‹KˆÜ�Q‹KˆØÐ Ü  Ó+ˆIÜ‘7‘? 3¨¨1¨iÓ8Ð8ä‘7‘? 3¨¨1Ó-Ð-r2   c                 óL   —  | j                  t        «      j                  di |¤ŽS rÜ   rÝ   rÞ   s     r(   rF   zCentralMoment.doit¯  rß   r2   c                 ó`   — t        ||fi |¤Ž}t        ||||fi |¤Žj                  t         «      S r%   )r   rÓ   r`   )rT   r×   rØ   r;   r<   Úmus         r(   r°   z*CentralMoment._eval_rewrite_as_Expectation²  s4   € Ü˜˜IÑ0¨Ñ0ˆÜ�a˜˜B 	Ñ4¨VÑ4×<Ñ<¼[ÓIÐIr2   c                 óR   — | j                  t        «      j                  t        «      S r%   r²   ©rT   r×   rØ   r;   r<   s        r(   r—   z*CentralMoment._eval_rewrite_as_Probability¶  r³   r2   c                 óR   — | j                  t        «      j                  t        «      S r%   rä   rð   s        r(   r]   z'CentralMoment._eval_rewrite_as_Integral¹  rå   r2   r%   ræ   rè   s   @r(   rê   rê   ƒ  s#   ø„ ñ!õD.ò7óJó>÷;r2   rê   )5r§   Úsympy.concrete.summationsr   Úsympy.core.addr   Úsympy.core.exprr   Úsympy.core.functionr   r}   Úsympy.core.mulr   Úsympy.core.relationalr   Úsympy.core.singletonr	   Úsympy.core.symbolr
   Úsympy.integrals.integralsr   Úsympy.logic.boolalgr   Úsympy.core.parametersr   Úsympy.core.sortingr   Úsympy.core.sympifyr   r   r   Úsympy.statsr   r   Úsympy.stats.rvr   r   r   r   r   r   r   r   r   r   Ú__all__Úregisterr1   r   r   r    r!   rÓ   rê   r4   r2   r(   ú<module>r     sé   ðÛ Ý )Ý Ý  Ý 1Ý Ý $Ý "Ý $Ý .Ý #Ý 3Ý /Ý 'Ý ,Ý 'ß ,÷@÷ @÷ @ò C€ð €×Ñ�DÓñ,ó ð,ð €×Ñ�LÓ!ñó "ðô`-�$ô `-ôF@%�$ô @%ôDq-ˆtô q-ôhH-�ô H-ôV7;ˆTô 7;ôt7;�Dõ 7;r2   