The API has changed in a recent PR https://github.com/sympy/sympy/pull/2341
>>> imageset(x, 2*x, Interval(0, 1) [0, 2] On Thu, Aug 1, 2013 at 7:43 AM, Matthew Rocklin <[email protected]> wrote: > I'm renaming TransformationSet to ImageSet (I think this is a more precise > name). > > https://github.com/sympy/sympy/pull/2341 > > 2340 is in by the way but the interface will change shortly to > > >>> Interval(0, 1).image(x, 2*x) > [0, 2] > > > On Tue, Jul 30, 2013 at 8:33 AM, Matthew Rocklin <[email protected]>wrote: > >> Really I just like working on sets. They're fairly simple and fun to >> play with. Here is a pull request adding a `transform` method to sets >> >> https://github.com/sympy/sympy/pull/2340 >> >> >> On Tue, Jul 30, 2013 at 7:14 AM, Ben Lucato <[email protected]> wrote: >> >>> Awesome! You are a gentleman and a scholar, Matthew Rocklin. >>> >>> Thanks for letting me know there is no way to do this in the current >>> sympy. >>> >>> >>> On 30 July 2013 13:18, Matthew Rocklin <[email protected]> wrote: >>> >>>> At some point we might do a simplify sort of treatment for sets. >>>> >>>> In the meantime something like the following could work in the case of >>>> monotonic functions. In general we know how to transform Intervals and >>>> FiniteSets. We know that unions and intersections will compose well with >>>> these transformations. That's all you really need. >>>> >>>> This should eventually be broken out into methods on the various >>>> classes: >>>> >>>> def transform_set(x, expr, set): >>>> """ Transform a set by an expression >>>> >>>> >>> domain = Interval(-pi, 0, True, True) + Interval(0, pi/2, True, >>>> True) >>>> (0, pi/2) U (-pi, 0) >>>> >>>> >>> transform(x, 2*x, domain) >>>> (0, pi) U (-2*pi, 0) >>>> >>>> >>> transform(x, x**2, domain) >>>> (0, pi**2) >>>> """ >>>> if isinstance(set, Union): >>>> return Union(transform_set(x, expr, arg) for arg in set.args) >>>> if isinstance(set, Intersection): >>>> return Intersection(transform_set(x, expr, arg) for arg in >>>> set.args) >>>> z = Dummy('z', real=True) >>>> f = Lambda(x, expr) >>>> if isinstance(set, Interval): >>>> # TODO: manage left_open and right_open better >>>> left, right = f(set.left), f(set.right) >>>> return Interval(Min(left, right), Max(left, right), >>>> set.left_open, set.right_open) >>>> if isinstance(set, FiniteSet): >>>> return FiniteSet(map(f, set)) >>>> >>>> >>>> >>>> On Mon, Jul 29, 2013 at 9:37 PM, Ben Lucato <[email protected]>wrote: >>>> >>>>> Thanks - I updated to the git master and now the TransformationSet >>>>> works. Is there some way to take this new TransformationSet object and >>>>> rewrite it as a Union/Interval? >>>>> >>>>> i.e. >>>>> >>>>> get this: >>>>> >>>>> Interval(-2*pi, 0, True, True) + Interval(0, pi, True, True) >>>>> >>>>> >>>>> On Tuesday, 30 July 2013 10:34:48 UTC+10, Matthew wrote: >>>>> >>>>>> This is what I get. Can you verify that things don't work for you? >>>>>> This was done in sympy/master. >>>>>> >>>>>> In [1]: domain = Interval(-pi, 0, True, True) + Interval(0, pi/2, >>>>>> True, True) >>>>>> >>>>>> In [2]: new_domain = TransformationSet(Lambda(x, 2*x), domain) >>>>>> >>>>>> In [3]: domain >>>>>> Out[3]: >>>>>> ⎛ π⎞ >>>>>> ⎜0, ─⎟ ∪ (-π, 0) >>>>>> ⎝ 2⎠ >>>>>> >>>>>> In [4]: new_domain >>>>>> Out[4]: >>>>>> ⎧ ⎛ π⎞ ⎫ >>>>>> ⎨2⋅x | x ∊ ⎜0, ─⎟ ∪ (-π, 0)⎬ >>>>>> ⎩ ⎝ 2⎠ ⎭ >>>>>> >>>>>> In [5]: 3*pi/4 in new_domain >>>>>> Out[5]: True >>>>>> >>>>>> >>>>>> >>>>>> On Mon, Jul 29, 2013 at 7:24 PM, Ben Lucato <[email protected]>wrote: >>>>>> >>>>>>> Howdy, say I do: >>>>>>> >>>>>>> domain = Interval(-pi, 0, True, True) + Interval(0, pi/2, True, True) >>>>>>> >>>>>>> >>>>>>> I could hope to do a transformation to dilate this domain by a >>>>>>> factor 2 from the origin, like so: >>>>>>> >>>>>>> >>>>>>> new_domain = domain.replace(lambda expr: expr.is_Real, lambda expr: >>>>>>> 2*expr) >>>>>>> OR: >>>>>>> new_domain = TransformationSet(Lambda(x, 2*x), domain) >>>>>>> >>>>>>> in either case, checking: >>>>>>> >>>>>>> 3*pi/4 in new_domain >>>>>>> >>>>>>> returns False. >>>>>>> >>>>>>> I may be using TransformationSet incorrectly - I just looked in the >>>>>>> docs and it looked like something relevant. Perhaps it only works for >>>>>>> sets? >>>>>>> >>>>>>> -- >>>>>>> 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+un...@**googlegroups.com. >>>>>>> To post to this group, send email to [email protected]. >>>>>>> >>>>>>> Visit this group at >>>>>>> http://groups.google.com/**group/sympy<http://groups.google.com/group/sympy> >>>>>>> . >>>>>>> For more options, visit >>>>>>> https://groups.google.com/**groups/opt_out<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 [email protected]. >>>>> To post to this group, send email to [email protected]. >>>>> 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 a topic in the >>>> Google Groups "sympy" group. >>>> To unsubscribe from this topic, visit >>>> https://groups.google.com/d/topic/sympy/WlG3XirFAzM/unsubscribe. >>>> To unsubscribe from this group and all its topics, send an email to >>>> [email protected]. >>>> >>>> To post to this group, send email to [email protected]. >>>> Visit this group at http://groups.google.com/group/sympy. >>>> For more options, visit https://groups.google.com/groups/opt_out. >>>> >>>> >>>> >>> >>> >>> >>> -- >>> >>> >>> Ben Lucato >>> >>> ---------------------------------------------------------------------------------- >>> Phone: +61 400 159 632 | Email: [email protected] >>> >>> -- >>> 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 [email protected]. >>> To post to this group, send email to [email protected]. >>> 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 [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sympy. For more options, visit https://groups.google.com/groups/opt_out.
