
    g                         d 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mZmZ ddlmZ d ZddZdS )z'Tools for arithmetic error propagation.    )repeatcombinations)Add)Mul)Pow)S)Symbol)exp)simplify)RandomSymbolVariance
Covariance)	is_randomc                 P    t          | j                  dk    r| j        d         n| S )Nr   )lenargs)vars    R/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/stats/error_prop.py<lambda>r      s"    #ch--!*;*;38A;;      Fc                    | j         }t          |          dk    r| |v rt          j        S t	          |           r!t          |                                           S t          | t                    r.t          t          |                                                     S t          j        S t          |          }t          t          t          |t          ||          t          ||                              }t          | t                    r3t          | }|r&d t          |d          D             }|t          | z  }nt          | t                     r{d t#          ||          D             }t%          | dz  t          | z            }|rBd t#          t          |d          t          |d                    D             }|t          | z  }nt          | t&                    r2|d         }|d         | |z  |d         z  dz  z  }	t%          |	          }n@t          | t(                    rt%          |d         | dz  z            }nt          |           }|S )a  Symbolically propagates variance (`\sigma^2`) for expressions.
    This is computed as as seen in [1]_.

    Parameters
    ==========

    expr : Expr
        A SymPy expression to compute the variance for.
    consts : sequence of Symbols, optional
        Represents symbols that are known constants in the expr,
        and thus have zero variance. All symbols not in consts are
        assumed to be variant.
    include_covar : bool, optional
        Flag for whether or not to include covariances, default=False.

    Returns
    =======

    var_expr : Expr
        An expression for the total variance of the expr.
        The variance for the original symbols (e.g. x) are represented
        via instance of the Variance symbol (e.g. Variance(x)).

    Examples
    ========

    >>> from sympy import symbols, exp
    >>> from sympy.stats.error_prop import variance_prop
    >>> x, y = symbols('x y')

    >>> variance_prop(x + y)
    Variance(x) + Variance(y)

    >>> variance_prop(x * y)
    x**2*Variance(y) + y**2*Variance(x)

    >>> variance_prop(exp(2*x))
    4*exp(4*x)*Variance(x)

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Propagation_of_uncertainty

    r   c           	          g | ]D\  }}d t          t          |          t          |                                                    z  ES    r   _arg0_or_varexpand).0xys      r   
<listcomp>z!variance_prop.<locals>.<listcomp>P   sS     < < <A LOO\!__EELLNNN < < <r   r   c                 $    g | ]\  }}||d z  z  S r   r   )r   avs      r   r"   z!variance_prop.<locals>.<listcomp>T   s$    888DAq1a4888r   c           	          g | ]P\  \  }}\  }}d t          t          |          t          |                                                    z  ||z  z  QS r   r   )r   r$   br    r!   s        r   r"   z!variance_prop.<locals>.<listcomp>W   sk     K K K'!Q!Q z,q//<??CCJJLLLaPQcR K K Kr      )r   r   r   Zeror   r   doit
isinstancer	   r   listmapvariance_propr   r   r   r   zipr   r   r
   )
exprconstsinclude_covarr   nargsvar_argsvar_exprtermsr'   r%   s
             r   r.   r.      s[   \ 9D
4yyA~~6>>6Mt__ 	D>>&&(((f%% 	L..//446666MIIECtVFE-B-B}e446 6 7 7H$ "> 	$< <!-h!:!:< < <EU#H	D#		 "88Ch$7$7888D!Gc5k122 	$K K+.|D!/D/D/;Ha/H/H,J ,JK K KE U#H	D#		 "GQK4!8d1g-11A;;	D#		 "HQK$'122 D>>Or   N)r   F)__doc__	itertoolsr   r   sympy.core.addr   sympy.core.mulr   sympy.core.powerr   sympy.core.singletonr   sympy.core.symbolr	   &sympy.functions.elementary.exponentialr
   sympy.simplify.simplifyr    sympy.stats.symbolic_probabilityr   r   r   sympy.stats.rvr   r   r.   r   r   r   <module>rB      s    - - * * * * * * * *                         " " " " " " $ $ $ $ $ $ 6 6 6 6 6 6 , , , , , , O O O O O O O O O O $ $ $ $ $ $DDR R R R R Rr   