Opened 12 years ago

Closed 9 years ago

problems with maxima inequalities

Reported by: Owned by: dsm burcin minor sage-5.1 symbolics sd40.5 sage-5.1.beta5 Douglas McNeil Karl-Dieter Crisman N/A

'Sage Version 4.4.1, Release Date: 2010-05-02'

mac 10.4 32 bit running on 10.5.8.

```sage: solve([2*x==3, x < 10], x)
[[x == (3/2)]]
sage: solve([2*x==3, x > 10], x)
[]
sage: solve([2*x==3, x == 10], x)
[]
sage: solve([2*x==3, x == 3/2], x)
[[x == (3/2)]]

sage: solve([2*x==3, x < 4, x > 4], x)
[]
```

all work as expected, but:

```sage: solve([2*x==3, x != 5], x)
-----------------------------------------------------------
!TypeError                                 Traceback (most recent call last)

/Applications/sage/devel/sage-main/build/sage/<ipython console> in <module>()
/Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/relation.pyc in solve(f, *args, **kwds)
670                 s = []
671
--> 672         sol_list = string_to_list_of_solutions(repr(s))
673         if 'solution_dict' in kwds and kwds!['solution_dict']==True:
674             if isinstance(sol_list![0], list):
]/Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/relation.pyc in string_to_list_of_solutions(s)
455     from sage.structure.sequence import Sequence
456     from sage.calculus.calculus import symbolic_expression_from_maxima_string
--> 457     v = symbolic_expression_from_maxima_string(s, equals_sub=True)
458     return Sequence(v, universe=Objects(), cr_str=True)
459
/Applications/sage/local/lib/python2.6/site-packages/sage/calculus/calculus.py in symbolic_expression_from_maxima_string(x, equals_sub, maxima)
1527         return symbolic_expression_from_string(s, syms, accept_sequence=True)
1528     except !!!!SyntaxError:
-> 1529         raise !TypeError, "unable to make sense of Maxima expression '%s' in Sage"%s
1530     finally:
1531         is_simplified = False
!TypeError: unable to make sense of Maxima expression '[[x==3/2,-7/2!==0]]' in Sage
```

--

The `!==` which is causing trouble is due to the

```if equals_sub:
s = s.replace('=','==')
```

lines in `symbolic_expression_from_maxima_string`. This could be fixed by changing the replace to a regexp, or adding a hack `s = s.replace('!==', '!=')` afterwards.

comment:1 Changed 12 years ago by dsm

• Description modified (diff)

comment:2 Changed 10 years ago by kcrisman

• Description modified (diff)

DSM, is this really all one ticket? It's kind of confusing.

comment:3 Changed 10 years ago by dsm

• Authors set to Douglas McNeil
• Description modified (diff)
• Status changed from new to needs_review

comment:4 Changed 10 years ago by dsm

It was all one ticket in my head, but maybe it makes more sense to separate them. Might as well address the low-hanging fruit.

comment:5 Changed 10 years ago by kcrisman

The problem wasn't really our translation of Maxima's inequality (`#`, which we finally fixed a while ago) but rather that we then had this little hack already.

But all of your tests already work in Sage 5.0, because of the `#` replacement. It really has to test the original bug report example, otherwise this is trivial. I suggest

```sage: from sage.calculus.calculus import symbolic_expression_from_maxima_string as sefms
sage: sefms("x != 3") == SR(x != 3)
True
sage: sefms("x # 3") == SR(x != 3)
True
sage:  solve([2*x==3, x != 5], x)
[[x == (3/2), (-7/2) != 0]]
```

comment:6 Changed 10 years ago by dsm

Oy, you're right that I truncated the original bug test (!). But we do need to fix `!==` to round-trip neq, so I think it's worth doing.

revised version

comment:7 Changed 10 years ago by kcrisman

• Reviewers set to Karl-Dieter Crisman
• Status changed from needs_review to positive_review

Positive review.

comment:8 Changed 10 years ago by jdemeyer

• Milestone set to sage-5.1

comment:9 Changed 9 years ago by jdemeyer

• Merged in set to sage-5.1.beta5
• Resolution set to fixed
• Status changed from positive_review to closed
Note: See TracTickets for help on using tickets.