I am using SymPy 1.5.1. My package manager shows that as the newest.

On Thursday, April 30, 2020 at 7:43:28 PM UTC+2, Oscar wrote:
>
> What version of sympy are you using? I get an exception from eq3 = eq1 + 
> eq2. 
>
> We need a new Equation class that works properly with arithmetic 
> operations etc. I have made written one but haven't added it to sympy 
> yet. I got sidetracked at the time because deeper structural changes 
> were needed like ensuring that Relational does not subclass Expr. 
>
> Here's my new Equation class which supports arithmetic operations: 
>
> from sympy.core.basic import Basic 
> from sympy.core.sympify import _sympify 
> from sympy.simplify import simplify 
> from sympy.core.relational import Equality 
>
> class Equation(Basic): 
>
>     def __new__(cls, lhs, rhs): 
>         lhs = _sympify(lhs) 
>         rhs = _sympify(rhs) 
>         return Basic.__new__(cls, lhs, rhs) 
>
>     @property 
>     def lhs(self): 
>         return self.args[0] 
>
>     @property 
>     def rhs(self): 
>         return self.args[1] 
>
>     def as_Boolean(self): 
>         return Equality(self.lhs, self.rhs) 
>
>     @property 
>     def reversed(self): 
>         return Equation(self.rhs, self.lhs) 
>
>     def applyfunc(self, func): 
>         return Equation(func(self.lhs), func(self.rhs)) 
>
>     def applylhs(self, func): 
>         return Equation(func(self.lhs), self.rhs) 
>
>     def applyrhs(self, func): 
>         return Equation(self.lhs, func(self.rhs)) 
>
>     @classmethod 
>     def _binary_op(cls, a, b, opfunc_ab): 
>         if isinstance(a, Equation) and not isinstance(b, Equation): 
>             return Equation(opfunc_ab(a.lhs, b), opfunc_ab(a.rhs, b)) 
>         elif isinstance(b, Equation) and not isinstance(a, Equation): 
>             return Equation(opfunc_ab(a, b.lhs), opfunc_ab(a, b.rhs)) 
>         elif isinstance(a, Equation) and isinstance(b, Equation): 
>             return Equation(opfunc_ab(a.lhs, b.lhs), opfunc_ab(a.rhs, 
> b.rhs)) 
>         else: 
>             raise TypeError('One of a or b should be an equation') 
>
>     def __add__(self, other): 
>         return self._binary_op(self, other, lambda a, b: a + b) 
>
>     def __radd__(self, other): 
>         return self._binary_op(other, self, lambda a, b: a + b) 
>
>     def __mul__(self, other): 
>         return self._binary_op(self, other, lambda a, b: a * b) 
>
>     def __rmul__(self, other): 
>         return self._binary_op(other, self, lambda a, b: a * b) 
>
>     def __sub__(self, other): 
>         return self._binary_op(self, other, lambda a, b: a - b) 
>
>     def __rsub__(self, other): 
>         return self._binary_op(other, self, lambda a, b: a - b) 
>
>     def __truediv__(self, other): 
>         return self._binary_op(self, other, lambda a, b: a / b) 
>
>     def __rtruediv__(self, other): 
>         return self._binary_op(other, self, lambda a, b: a / b) 
>
>     def __pow__(self, other): 
>         return self._binary_op(self, other, lambda a, b: a ** b) 
>
>     def __rpow__(self, other): 
>         return self._binary_op(other, self, lambda a, b: a ** b) 
>
>     def __str__(self): 
>         return '%r = %r' % self.args 
>
>     def expand(self, *args, **kwargs): 
>         return self.func(*(arg.expand(*args, **kwargs) for arg in 
> self.args)) 
>
>     def simplify(self, *args, **kwargs): 
>         return simplify(self, *args, **kwargs) 
>
>     def _eval_simplify(self, *args, **kwargs): 
>         return self.func(*(arg.simplify(*args, **kwargs) for arg in 
> self.args)) 
>
>     def factor(self, *args, **kwargs): 
>         return factor(self, *args, **kwargs) 
>
>     def evalf(self, *args, **kwargs): 
>         return self.func(*(arg.evalf(*args, **kwargs) for arg in 
> self.args)) 
>
>     def n(self, *args, **kwargs): 
>         return self.func(*(arg.n(*args, **kwargs) for arg in self.args)) 
>
> from sympy import symbols, cos, sin 
>
> x, y = symbols('x, y') 
> eq = Equation(x, y) 
> print(eq) 
> eq = Equation(1, 2) 
> print(eq) 
> eq = Equation(1, 2) + 3 
> print(eq) 
> eq = Equation(1, 2) + Equation(x, y) 
> print(eq) 
> eq = Equation(1, 2) - 3 
> print(eq) 
> eq = Equation(1, 2) - Equation(x, y) 
> print(eq) 
> eq = 1 - Equation(1, 2) 
> print(eq) 
> eq = 1 + Equation(x, y) 
> print(eq) 
>
> eq = Equation(cos(x)**2 + sin(x)**2 - 1, 2) 
>
>
> Oscar 
>
> On Thu, 30 Apr 2020 at 16:18, Thomas Ligon <[email protected] 
> <javascript:>> wrote: 
> > 
> > I have a few small questions where I can solve the issues manually and 
> have the feeling that in my attempts to solve them with SymPy I am 
> overlooking something. The examples below are trivial and easy to solve 
> manually, but the project I am working on involves much more complex 
> expressions where it would be great to have a better solution in SymPy. 
> > Basically, adding two equations does not produce the desired solution, 
> and sums do not expand or simplify as expected. 
> > PS. The print('end') statement is just there as a convenient place for a 
> breakpoint in my debugger. 
> > 
> > from sympy import symbols, Eq, expand, simplify, latex, oo, Sum 
> > x, y, p, q, a, j, Aj, Bj = symbols('x y p q a j A_j B_j') 
> > eq1 = Eq(x, y) 
> > print(latex(eq1)) # OK 
> > eq2 = Eq(p, q) 
> > print(latex(eq2)) # OK 
> > eq3 = eq1 + eq2 
> > print(latex(eq3)) # not what I want 
> > eq4 = Eq(eq1.lhs + eq2.lhs, eq1.rhs + eq2.rhs) 
> > print(latex(eq4)) # yes, what I want, but tedious 
> > eq5 = a*eq1 
> > print(latex(eq5)) # not exactly what I want 
> > eq6 = Eq(a*eq1.lhs, a*eq1.rhs) 
> > print(latex(eq6)) # yes, what I want, but tedious 
> > ex1 = Sum(Aj + Bj, (j, -oo, oo)) 
> > print(latex(ex1)) # OK 
> > ex2 = Sum(Aj - Bj, (j, -oo, oo)) 
> > print(latex(ex2)) # OK 
> > ex3 = ex1 + ex2 
> > print(latex(ex3)) # correct, but needs consolidation 
> > ex4 = expand(ex3) 
> > print(latex(ex4)) # latex looks bad 
> > ex5 = simplify(ex3) 
> > print(latex(ex5)) # latex completely wrong 
> > print('end') 
> > 
> > -- 
> > 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] <javascript:>. 
> > To view this discussion on the web visit 
> https://groups.google.com/d/msgid/sympy/71f9f37a-1b10-4fe5-b7ef-65f92fe3bc86%40googlegroups.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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/a9a6e326-12c3-4838-8b5a-6cd5aa90c58d%40googlegroups.com.

Reply via email to