Dealing with piecewise equations returned by sympy integrate

computer-algebra-systems, python, symbolic-computation, symbolic-math, sympy

Solution

In general, using `.args` is the correct way to access parts of an expression.

In this case, though, there is an option to `integrate` that will let you ignore convergence conditions

In [39]: integrate(test, (x, 0, oo), conds='none')
Out[39]:
  ___
╲╱ π ⋅z
───────
   2

Also, if you explicitly set the assumptions that you know on your variables, often the convergence conditions resolve themselves (it doesn't seem to happen in this case for any simple assumptions on `z`, though). For example, if you knew that `z` was real, use `z = Symbol('z', real=True)`. Usually assuming that things are real, or even better positive, when you know it will help a lot in ensuring convergence.

Problem

In sympy I have an integral which returns a Piecewise object, e.g. ``` In [2]: from sympy.abc import x,y,z In [3]: test = exp(-x**2/z**2) In [4]: itest = integrate(test,(x,0,oo)) In [5]: itest Out[5]: ⎧ ___ ⎪ ╲╱ π ⋅z │ ⎛ 1 ⎞│ π ⎪ ─────── for │periodic_argument⎜──────────────, ∞⎟│ ≤ ─ ⎪ 2 │ ⎜ 2 ⎟│ 2 ⎪ │ ⎝polar_lift (z) ⎠│ ⎪ ⎪∞ ⎪⌠ ⎨⎮ 2 ⎪⎮ -x ⎪⎮ ─── ⎪⎮ 2 ⎪⎮ z ⎪⎮ ℯ dx otherwise ⎪⌡ ⎪0 ⎩ ``` I would like to extract just the first branch of this piecewise equation, in other words, I would like to be able to do something like `itest.parts(0)`to extract simply `sqrt(pi)*z/2`. I can't seem to find any way to do this, but perhaps I am using the wrong search terms in the documentation. Any ideas? Edit Poking around a bit, I've managed to find that if I do `itest.args[0][0]` I can extract this expression. This seems like a bit of a hack, however. Is there a better approach?

Original source