K i dZddlmZmZddlmZddlmZddlm Z ddl m Z ddl m Z ddlmZdd lmZdd lmZmZmZdd lmZd Zdd Zy)z'Tools for arithmetic error propagation.)repeat combinations)Add)Mul)Pow)S)Symbol)exp)simplify) RandomSymbolVariance Covariance) is_randomcTt|jdkDr|jdS|S)Nr)lenargs)vars \/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/stats/error_prop.pyrs!#chh-!*;388A;c |j}t|dk(rz||vrtjSt |rt |j St|tr"t t|j StjSt|}ttt|t||t||}t|trbt|}|rVt|dDcgc]4\}}dt!t#|t#|j%z6} }}|t| z }|St|t&rt)||D cgc] \} } | | dzz } } } t+|dzt| z}|rzt)t|dt|dD cgc]@\\} } \}}dt!t#|t#|j%z| | zz B} }} } }|t| z }|St|t,r&|d} |d|| z|dz dzz} t+| }|St|t.rt+|d|dzz}|St |}|Scc}}wcc} } wcc}}} } w)aSymbolically 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)rrrZerorr doit isinstancer r listmap variance_proprrrr _arg0_or_varexpandrzipr rr ) exprconsts include_covarrnargsvar_argsvar_exprxytermsavbs rrrst\ 99D 4yA~ 6>66M t_D>&&( ( f %L./446 666M IEC tVFE-B}e467H$> !-h!:<ALO\!_ELLNN O)<9Ks89I3 I93AI? N)F)__doc__ itertoolsrrsympy.core.addrsympy.core.mulrsympy.core.powerrsympy.core.singletonrsympy.core.symbolr &sympy.functions.elementary.exponentialr sympy.simplify.simplifyr sympy.stats.symbolic_probabilityr r rsympy.stats.rvrr rr/rrr;s4-* "$6,OO$D Rr