Thanks for this. So, we are trying to convert something like `[(x, x >
0), (-x , x <=0)]` to `[(x, (0, oo) ), (-x, (-oo, 0] ) ]`. I wrote a
small script to try it out for univariate functions

```
def to_expr_set(p, input_set=None):
    if input_set is None:
        U = Interval(-oo, oo)  # U: current universal set
    else:
        U = input_set
    exp_ints = []
    for expr, cond in p.args:
        cond_int = U.intersect(isolve(cond))
        # isolve returns the solution of a relation as Set
        U = U - cond_int
        exp_ints.append((expr, cond_int))
    return exp_ints
```

I guess this transformation will be useful in general, not just for imageset.
After all the work that is being done on Set like SetExpr and
Set.boundary, I think sets will be much more easier to work with than
relations.

For bool->Set transformation I noticed your comment on #2736. But I'll
implement this after we have a more user/developer friendly bool->set
transformation tool which I plan pull out as a part of #2736.



On 7 January 2014 01:36, Matthew Rocklin <mrock...@gmail.com> wrote:
> A piecewise could be thought of as a list of (Expr, Boolean) pairs.  We can
> translate this into a set of (Expr, Set) pairs, intersect each set with the
> set that is input to imageset, apply that particular expr, and then Union
> all of the imagesets together.  That may have been a little unclear.  To
> make it more explicit consider the following transformation:
>
> imageset(x, Piecewise((expr1, set1), (expr2, set2), (expr3, set3)),
> input_set)
>
> ->
>
> Union(imageset(x, expr1, Intersection(set1, input_set)),
>       imageset(x, expr2, Intersection(set2, input_set)),
>       imageset(x, expr3, Intersection(set3, input_set)))
>
> In translating the booleans to sets there are good tools in SymPy to help
> with this for any particular bool->set transformation.  If you're interested
> in this I can poke around a bit to find them.  We'll also have to be careful
> about this transformation because Piecewise booleans are ordered so that the
> first ones take precedence.  We'll have to use either set subtraction or
> boolean arithmetic here to remove parts.
>
> Again, I'm not sure how clear this was.  Please ask for clarification where
> needed.
>
>
>
> On Sun, Jan 5, 2014 at 11:49 PM, Harsh Gupta <gupta.hars...@gmail.com>
> wrote:
>>
>> I'm working on improving the imageset evaluation for Intervals on
>> https://github.com/sympy/sympy/pull/2723
>>  imagset basically returns the set of possible outputs of a functions
>> given an input set. I want to extend this functionality to piecewise
>> functions.
>> So I want to know if there is a general method to find the critical points
>> of piecewise functions.
>>
>> --
>> Harsh Gupta
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "sympy" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to sympy+unsubscr...@googlegroups.com.
>> To post to this group, send email to sympy@googlegroups.com.
>> Visit this group at http://groups.google.com/group/sympy.
>> For more options, visit https://groups.google.com/groups/opt_out.
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "sympy" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to sympy+unsubscr...@googlegroups.com.
> To post to this group, send email to sympy@googlegroups.com.
> Visit this group at http://groups.google.com/group/sympy.
> For more options, visit https://groups.google.com/groups/opt_out.



-- 
Harsh

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sympy+unsubscr...@googlegroups.com.
To post to this group, send email to sympy@googlegroups.com.
Visit this group at http://groups.google.com/group/sympy.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to