See this issue <https://github.com/sympy/sympy/issues/5031> for previous discussion.
On Saturday, October 27, 2018 at 12:44:09 PM UTC-5, Oscar wrote: > > Hi all, > > I find the behaviour of operations involving Eq strange. I would > really like to be able to use Eqs for algebra but they don't seem to > do anything useful. Is this behaviour intentional or is it something > that could be improved? > > Setup: > >>> from sympy import * > >>> x = Symbol('x') > >>> y = Symbol('y') > >>> eq = Eq(x, y) > >>> eq > Eq(x, y) > >>> pprint(eq) > x = y > > I don't understand what any of these mean: > >>> pprint(2*eq) > 2⋅(x = y) > >>> pprint((2*eq).expand()) > 2⋅(x = y) > >>> exp(eq) > exp(Eq(x, y)) > >>> pprint(abs(eq)) > │x = y│ > >>> eq - 1 > -1 + Eq(x, y) > >>> pprint(eq - 1) > -1 + (x = y) > > Integration works but differentiation doesn't: > >>> pprint(integrate(eq, x)) > ⌠ ⌠ > ⎮ x dx = ⎮ y dx > ⌡ ⌡ > >>> pprint(integrate(eq, x).doit()) > 2 > x > ── = x⋅y > 2 > >>> diff(eq, x) > Derivative(Eq(x, y), x) > >>> pprint(diff(eq, x)) > ∂ > ──(x = y) > ∂x > >>> pprint(diff(eq, x).doit()) > ∂ > ──(x = y) > ∂x > > Functions of Eq raise errors: > >>> sin(eq) > ... > TypeError: cannot determine truth value of Relational > > It looks as if I can chain equations and inequalities but does it > actually mean what it looks like mathematically? > >>> eq < 3 > Eq(x, y) < 3 > >>> pprint(eq < 3) > x = y < 3 > > Apart from the inequality example at the end I would like it if all of > the above operations acted on both lhs and rhs separately as in the > case of integration e.g.: > > >>> eq > x = y > >>> 2*eq > 2*x = 2*y > >>> sin(eq) > sin(x) = sin(y) > > The other thing that I don't understand although it is clearly > documented is this: > >>> Eq(1, 1) > True > >>> Eq(1, 0) > False > > These True/False values are annoying if you are building up Eqs > programatically e.g. to pass to solve: > >>> solve([Eq(1, 1), Eq(x, y), Eq(x, 1)], [x, y]) > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > File "/Users/enojb/current/sympy/sympy/sympy/solvers/solvers.py", > line 980, in solve > return reduce_inequalities(f, symbols=symbols) > File "/Users/enojb/current/sympy/sympy/sympy/solvers/inequalities.py", > line 987, in reduce_inequalities > rv = _reduce_inequalities(inequalities, symbols) > File "/Users/enojb/current/sympy/sympy/sympy/solvers/inequalities.py", > line 907, in _reduce_inequalities > ''')) > NotImplementedError: > inequality has more than one symbol of interest. > > You can solve this last problem with evaluate=False but I really don't > understand why any evaluation is desirable here. I think that solve > has probably gotten confused here for the same reason that any other > code would: the True/False objects don't have any of the same > attributes that an Eq would have: > > >>> Eq(0, 1).lhs > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > AttributeError: 'BooleanFalse' object has no attribute 'lhs' > > > -- > Oscar > -- 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 https://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/420d940b-663f-4af7-b4eb-59a048d0bdb3%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.