test_error_prop.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. from sympy.core.function import Function
  2. from sympy.core.symbol import symbols
  3. from sympy.functions.elementary.exponential import exp
  4. from sympy.stats.error_prop import variance_prop
  5. from sympy.stats.symbolic_probability import (RandomSymbol, Variance,
  6. Covariance)
  7. def test_variance_prop():
  8. x, y, z = symbols('x y z')
  9. phi, t = consts = symbols('phi t')
  10. a = RandomSymbol(x)
  11. var_x = Variance(a)
  12. var_y = Variance(RandomSymbol(y))
  13. var_z = Variance(RandomSymbol(z))
  14. f = Function('f')(x)
  15. cases = {
  16. x + y: var_x + var_y,
  17. a + y: var_x + var_y,
  18. x + y + z: var_x + var_y + var_z,
  19. 2*x: 4*var_x,
  20. x*y: var_x*y**2 + var_y*x**2,
  21. 1/x: var_x/x**4,
  22. x/y: (var_x*y**2 + var_y*x**2)/y**4,
  23. exp(x): var_x*exp(2*x),
  24. exp(2*x): 4*var_x*exp(4*x),
  25. exp(-x*t): t**2*var_x*exp(-2*t*x),
  26. f: Variance(f),
  27. }
  28. for inp, out in cases.items():
  29. obs = variance_prop(inp, consts=consts)
  30. assert out == obs
  31. def test_variance_prop_with_covar():
  32. x, y, z = symbols('x y z')
  33. phi, t = consts = symbols('phi t')
  34. a = RandomSymbol(x)
  35. var_x = Variance(a)
  36. b = RandomSymbol(y)
  37. var_y = Variance(b)
  38. c = RandomSymbol(z)
  39. var_z = Variance(c)
  40. covar_x_y = Covariance(a, b)
  41. covar_x_z = Covariance(a, c)
  42. covar_y_z = Covariance(b, c)
  43. cases = {
  44. x + y: var_x + var_y + 2*covar_x_y,
  45. a + y: var_x + var_y + 2*covar_x_y,
  46. x + y + z: var_x + var_y + var_z + \
  47. 2*covar_x_y + 2*covar_x_z + 2*covar_y_z,
  48. 2*x: 4*var_x,
  49. x*y: var_x*y**2 + var_y*x**2 + 2*covar_x_y/(x*y),
  50. 1/x: var_x/x**4,
  51. exp(x): var_x*exp(2*x),
  52. exp(2*x): 4*var_x*exp(4*x),
  53. exp(-x*t): t**2*var_x*exp(-2*t*x),
  54. }
  55. for inp, out in cases.items():
  56. obs = variance_prop(inp, consts=consts, include_covar=True)
  57. assert out == obs