I think making a subclass is easier:
class VectorizedEq(Equality):
def __getattr__(self, attr):
return VectorizedEq(self.lhs.attr, self.rhs.attr)
Unfortunately, things like __add__ will not work, because they are
already defined in the base class. I'm not sure if there's a slick
way to "forget" all those in a small amount of code.
Aaron Meurer
On Wed, Feb 13, 2013 at 10:25 PM, Chris Smith <[email protected]> wrote:
> On Thu, Feb 14, 2013 at 10:48 AM, G B <[email protected]> wrote:
>> Sorry if this is covered in the documentation somewhere, I tried to check...
>>
>> Is there a way to subtract one equation from another? What I'm looking to
>> do boils down to:
>> a,b,r,s=symbols('a,b,r,s')
>> eq1=Eq(a,r) #a==r
>> eq2=Eq(b,s) #b==s
>> eq3=eq1-eq2
>
>
> You've got to write your own helpers do do this:
>
>>>> def do2(a, b, op):
> ... return Eq(op(a.lhs, b.lhs), op(a.rhs, b.rhs))
> ...
>>>> def do(a, op):
> ... return Eq(op(a.lhs), op(a.rhs))
> ...
>>>> def neg(a):
> ... return do(a, lambda x: -x)
> ...
>>>> def inv(a):
> ... return do(a, lambda x: 1/x)
> ...
>>>> a=Eq(x+3,y);b=Eq(x+y,4)
>>>> b
> x + y == 4
>>>> neg(b)
> -x - y == -4
>>>> do2(a, neg(b), Add)
> -y + 3 == y - 4
>>>> do2(a, b, lambda x, y: x-y)
> -y + 3 == y - 4
>>>> do(_, lambda x: x - y) # subtract y from both sides
> -2*y + 3 == -4
>>>> inv(_)
> 1/(-2*y + 3) == -1/4
>>>> inv(_)
> -2*y + 3 == -4
>>>> do(_, lambda x: x - 3) # subtract 3 from both sides
> -2*y == -7
>>>> do(_, lambda x: x/-2) # div by -2
> y == 7/2
>
> That's a little awkward using lambda. Let's define the operation by example:
>
>>>> side = Dummy()
>>>> def do(a, pat):
> ... return Eq(*[pat.subs(pat.free_symbols.pop(),i) for i in a.args])
> ...
>>>> a
> x + 3 == y
>>>> do(a, side-3)
> x == y - 3
>>>> do(a, 1/side)
> 1/(x + 3) == 1/y
>>>> do(_, 1/side)
> x + 3 == y
>>>> do(_, x-3) # you can use any variable to indicate "side"
> x == y - 3
>
> --
> 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?hl=en.
> 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?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.