Opened 4 years ago
Last modified 4 years ago
#26297 new defect
Fix comparison of symbolic constants
Reported by: | embray | Owned by: | |
---|---|---|---|
Priority: | major | Milestone: | sage-pending |
Component: | symbolics | Keywords: | |
Cc: | chapoton | Merged in: | |
Authors: | Reviewers: | ||
Report Upstream: | N/A | Work issues: | |
Branch: | Commit: | ||
Dependencies: | Stopgaps: |
Description (last modified by )
Originally labeled this "python 3" but really this is buggy on Python 2 as well.
On Python 3 it at least straight up doesn't work:
sage: bool(golden_ratio < pi) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-5-e16abba7bd09> in <module>() ----> 1 bool(golden_ratio < pi) /home/embray/src/sagemath/sage-python3/local/lib/python3.6/site-packages/sage/symbolic/expression.pyx in sage.symbolic.expression.Expression.__nonzero__ (build/cythonized/sage/symbolic/expression.cpp:19335)() 2851 # constants are wrappers around Sage objects, compare directly 2852 if is_a_constant(self._gobj.lhs()) and is_a_constant(self._gobj.rhs()): -> 2853 return self.operator()(self.lhs().pyobject(), self.rhs().pyobject()) 2854 sig_on() 2855 try: TypeError: '<' not supported between instances of 'GoldenRatio' and 'Pi'
On Python 2 this may or may not give the right result, but in general it is wrong:
sage: bool(golden_ratio < pi) False
This is because Expression.__bool__
does this:
2849 if self.is_relational(): 2850 # constants are wrappers around Sage objects, compare directly 2851 if is_a_constant(self._gobj.lhs()) and is_a_constant(self._gobj.rhs()): 2852 return self.operator()(self.lhs().pyobject(), self.rhs().pyobject())
Where the pyobject()
s in this case are sage.symbolic.constants.Constant
instances, which does not implement rich comparison (only __eq__
).
How do we want to go about fixing this? What would be the best way? Realistically speaking we should be able to compare constants' float values. In theory one could define two constants that differ from each other only in the 100th decimal place or something, but is that really a realistic case?
Change History (4)
comment:1 Changed 4 years ago by
Milestone: | sage-8.4 → sage-8.5 |
---|
comment:2 Changed 4 years ago by
Milestone: | sage-8.5 → sage-8.7 |
---|
comment:3 Changed 4 years ago by
Description: | modified (diff) |
---|
comment:4 Changed 4 years ago by
Milestone: | sage-8.7 → sage-pending |
---|
Removing most of the rest of my open tickets out of the 8.7 milestone, which should be closed.
Retargeting some of my tickets (somewhat optimistically for now).