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 <mrock...@gmail.com> 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 <mrock...@gmail.com>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 <ben.luc...@gmail.com> 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 <mrock...@gmail.com> 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 <ben.luc...@gmail.com>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 <ben.l...@gmail.com>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 sy...@googlegroups.com.
>>>>>>>
>>>>>>> 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 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 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
>>>> 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.
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>> --
>>>
>>>
>>> Ben Lucato
>>>
>>> ----------------------------------------------------------------------------------
>>> Phone: +61 400 159 632 | Email: ben.luc...@gmail.com
>>>
>>> --
>>> 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.


Reply via email to