I agree. If anything, I think we may need to have separate classes to
represent a < b the inequality and a < b the boolean. One problem
with Le(3, 4) not returning True is that constructs like
if a < b:
do something
will break if a or b are sympified, because a < b returns Lt(a, b) in
that case. But I think those should really be using the assumptions,
i.e.,
if Ask(b - a, Q.positive):
do something
I think the main problem is that it doesn't play so nice if you want
to include an inequality in a boolean expression. So for that case, I
think we should have a separate boolean Le, Eq, Gt, etc., which would
be shortcuts to the Ask(b - a, Q.positive/nonnegative/zero/etc.), or
would return an instance of Boolean otherwise (I'm not sure what they
should be called, though). See issue 1887 and issue 2030.
See also the discussion over at
http://code.google.com/p/sympy/issues/detail?id=1932 (I don't know if
I still agree with myself there, but I am basically saying what smichr
said in comment 5).
Aaron Meurer
On Wed, Nov 24, 2010 at 1:40 PM, Filip Dominec <[email protected]> wrote:
> If I can contribute to the discussion, I support the simpler behavior
> when Le(3,4) stays as a inequation until it has to be evaluated. Not
> only the shortcut to True/False has now proven to bring in an error in
> the solving routine, it is possible that in some situation one will
> want to extract the left and right sides back into two expressions.
>
> On Nov 24, 5:22 pm, Aaron Meurer <[email protected]> wrote:
>> Perhaps it has something to do with solve not taking into account that
>> Le() and friends evaluate themselves to a boolean in trivial cases:
>>
>> In [1]: Le(3,4)
>> Out[1]: True
>>
>> But the only way to really know for sure is to debug the code.
>>
>> By the way, there's been some debate before on whether or not it is a
>> good idea for Le() to be doing this, so maybe now a working
>> implementation of an inequality solve can shed some more light on the
>> matter.
>>
>> Aaron Meurer
>>
>>
>>
>>
>>
>>
>>
>> On Wed, Nov 24, 2010 at 3:12 AM, Filip Dominec <[email protected]>
>> wrote:
>> > I am working on a new solve() routine to fix the issue discussed in my
>> > previous post.
>>
>> > However, I observed a bug (?) that sticks deep in the code. I am using
>> > the "git clone https://[email protected]/mattpap/sympy-polys.git; cd
>> > sympy-polys ; git checkout polys11" version.
>>
>> > In [388]: solve([Le(3,0), Assume(x,Q.real)],x,relational=False)
>> > Out[388]: False
>>
>> > In [389]: solve([Le(3,4), Assume(x,Q.real)],x,relational=False)
>> > ---------------------------------------------------------------------------
>> > UnboundLocalError Traceback (most recent call
>> > last)
>>
>> > /home/filip/<ipython console> in <module>()
>>
>> > /home/filip/bin/sympy101118/sympy-polys/sympy/solvers/solvers.pyc in
>> > solve(f, *symbols, **flags)
>> > 153
>> > 154 if any(isinstance(fi, bool) or (fi.is_Relational and not
>> > fi.is_Equality) for fi in f):
>> > --> 155 return solve_poly_inequalities(f,
>> > relational=relational)
>> > 156
>> > 157 for i, fi in enumerate(f):
>>
>> > /home/filip/bin/sympy101118/sympy-polys/sympy/solvers/inequalities.pyc
>> > in solve_poly_inequalities(inequalities, relational)
>> > 152 results[gen] = result
>> > 153
>> > --> 154 if relational or not real:
>> > 155 solution = And(*results.values())
>> > 156 else:
>>
>> > UnboundLocalError: local variable 'real' referenced before assignment
>>
>> > --
>> > You received this message because you are subscribed to the Google Groups
>> > "sympy" group.
>> > To post to this group, send email to [email protected].
>> > To unsubscribe from this group, send email to
>> > [email protected].
>> > For more options, visit this group
>> > athttp://groups.google.com/group/sympy?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups
> "sympy" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/sympy?hl=en.
>
>
--
You received this message because you are subscribed to the Google Groups
"sympy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sympy?hl=en.