Opened 12 years ago

Closed 11 years ago

#4384 closed defect (fixed)

Axes computation for constant function causes division by zero

Reported by: rbeezer Owned by: somebody
Priority: minor Milestone: sage-4.1.2
Component: graphics Keywords: plot contant ZeroDivisionError
Cc: anakha, jason, mvngu Merged in:
Authors: Reviewers:
Report Upstream: Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Description

For a function which is constant, but not obviously so, it would appear that some computation for laying out the axis creates a step size of 0 (tick marks on the vertical axis?).

sage: h=plot(sin(x)^2+cos(x)^2, -6, 6)
sage: show(h)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/rob/.sage/sage_notebook/worksheets/admin/48/code/6.py", line 8, in <module>
    show(h)
  File "/opt/sage-3.1.4/local/lib/python2.5/site-packages/SQLAlchemy-0.4.6-py2.5.egg/", line 1, in <module>
    
  File "/opt/sage-3.1.4/local/lib/python2.5/site-packages/sage/misc/functional.py", line 882, in show
    return x.show(*args, **kwds)
  File "/opt/sage-3.1.4/local/lib/python2.5/site-packages/sage/plot/plot.py", line 1350, in show
    hgridlinesstyle=hgridlinesstyle)
  File "/opt/sage-3.1.4/local/lib/python2.5/site-packages/sage/plot/plot.py", line 1547, in save
    xmin, xmax, ymin, ymax = sage_axes.add_xy_axes(subplot, xmin, xmax, ymin, ymax)
  File "/opt/sage-3.1.4/local/lib/python2.5/site-packages/sage/plot/axes.py", line 325, in add_xy_axes
    x_axis_ypos, ystep, ytslminor, ytslmajor = self._find_axes(ymin, ymax)
  File "/opt/sage-3.1.4/local/lib/python2.5/site-packages/sage/plot/axes.py", line 239, in _find_axes
    tslmajor, oppaxis, step = self._tasteless_ticks(minval, maxval, 10)
  File "/opt/sage-3.1.4/local/lib/python2.5/site-packages/sage/plot/axes.py", line 217, in _tasteless_ticks
    tslmajor = sage.misc.misc.srange(minval, minval+(num_pieces+1)*step, step)
  File "/opt/sage-3.1.4/local/lib/python2.5/site-packages/sage/misc/misc.py", line 710, in srange
    count = int(math.ceil((float((end-start)/step))))
ZeroDivisionError: float division

Attachments (1)

plot.png (7.8 KB) - added by mvngu 11 years ago.
based on Sage 4.1.2.alpha4

Download all attachments as: .zip

Change History (12)

comment:1 Changed 12 years ago by mabshoff

  • Cc anakha added
  • Component changed from notebook to graphics

This is plotting related and has nothing to do with the notebook.

Cheers,

Michael

comment:2 Changed 12 years ago by jason

  • Cc jason added

comment:3 Changed 11 years ago by kcrisman

  • Summary changed from Axes computation for constant function causes division by zero to Axes computation for constant function causes very small y-axis range

This no longer causes an error, given #5448 being included, but has a different problem, in that matplotlib doesn't just extend the axes all the way to zero. I don't know if there is a way to fix this, though.

comment:4 Changed 11 years ago by jason

There's *always* a way to fix it :).

This is odd, since plot(1, -5, 5) seems to give an okay axis range. Even plot(1+x-x,-1,1) seems okay.

comment:5 Changed 11 years ago by kcrisman

Even weirder, for a second it did work on 4.1.2.alpha1 for me. Then I exited and started again, and it went back to this weird behavior.

Anyway, the problem is probably that we fixed something a while ago to catch constant function plotting, and 1+x-x evaluates to 1 in Sage, but the trig identity doesn't.

comment:6 Changed 11 years ago by jason

yes, it maybe has something to do with the fast_callable simplifying things or something.

We should probably add a special case for axes where the y-range is very small.

comment:7 follow-up: Changed 11 years ago by jason

Okay, this shows problems: plot(x^2-1-(x-1)*(x+1), -5, 5)

In fact, it shows a lot of random noise.

comment:8 in reply to: ↑ 7 Changed 11 years ago by kcrisman

Replying to jason:

Okay, this shows problems: plot(x^2-1-(x-1)*(x+1), -5, 5)

In fact, it shows a lot of random noise.

The noise is to be expected, since it's impossible for these to evaluate exactly to zero as a float, don't you think? But yes, the axes seems... weird. Did the default [-1,1]x[-1,1] disappear?

comment:9 Changed 11 years ago by jason

  • Cc mvngu added

Okay, the bug (the error) is fixed. If we want to open another ticket that somehow figures out the user doesn't want a small window, and instead gives a much bigger range, then I think that should go on another ticket and this should be closed as fixed (due to #5448).

comment:10 Changed 11 years ago by jason

  • Summary changed from Axes computation for constant function causes very small y-axis range to Axes computation for constant function causes division by zero

Changing subject back to the original bug...

Changed 11 years ago by mvngu

based on Sage 4.1.2.alpha4

comment:11 Changed 11 years ago by mvngu

  • Resolution set to fixed
  • Status changed from new to closed

I can confirm this has been fixed:

[mvngu@darkstar sage-4.1.2.alpha4]$ ./sage
----------------------------------------------------------------------
| Sage Version 4.1.2.alpha4, Release Date: 2009-09-27                |
| Type notebook() for the GUI, and license() for information.        |
----------------------------------------------------------------------
**********************************************************************
*                                                                    *
* Warning: this is a prerelease version, and it may be unstable.     *
*                                                                    *
**********************************************************************
sage: h=plot(sin(x)^2+cos(x)^2, -6, 6)
sage: show(h)

The resulting plot is attached. Closing this ticket as being fixed by #5448.

Note: See TracTickets for help on using tickets.