Zero division bug in patches.py

Hi all!

I'm using version 0.91.2, but by looking at the svn repository is seems this issue still exists.

There seems to be a bug in the getpoints() method in the YAArrow class. When I execute the commands

from pylab import *
annotate('Oops...', (.2, .2), (.2, .6), arrowprops=dict(width=3))
show()

(note that the x2-x1==0) I get the error:

Traceback (most recent call last):
   File "/usr/lib/python2.5/site-packages/matplotlib/backends/backend_gtk.py", line 331, in expose_event
     self._render_figure(self._pixmap, w, h)
   File "/usr/lib/python2.5/site-packages/matplotlib/backends/backend_gtkagg.py", line 75, in _render_figure
     FigureCanvasAgg.draw(self)
   File "/usr/lib/python2.5/site-packages/matplotlib/backends/backend_agg.py", line 358, in draw
     self.figure.draw(self.renderer)
   File "/usr/lib/python2.5/site-packages/matplotlib/figure.py", line 624, in draw
     for a in self.axes: a.draw(renderer)
   File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line 1345, in draw
     a.draw(renderer)
   File "/usr/lib/python2.5/site-packages/matplotlib/text.py", line 1246, in draw
     self.update_positions(renderer)
   File "/usr/lib/python2.5/site-packages/matplotlib/text.py", line 1242, in update_positions
     **d)
   File "/usr/lib/python2.5/site-packages/matplotlib/patches.py", line 678, in __init__
     verts = self.get_verts()
   File "/usr/lib/python2.5/site-packages/matplotlib/patches.py", line 690, in get_verts
     xb1, yb1, xb2, yb2 = self.getpoints(x1, y1, x2, y2, k1)
   File "/usr/lib/python2.5/site-packages/matplotlib/patches.py", line 714, in getpoints
     m = (y2-y1)/(x2-x1)
ZeroDivisionError: float division
Traceback (most recent call last):
   File "/usr/lib/python2.5/site-packages/matplotlib/backends/backend_gtk.py", line 331, in expose_event
     self._render_figure(self._pixmap, w, h)
   File "/usr/lib/python2.5/site-packages/matplotlib/backends/backend_gtkagg.py", line 75, in _render_figure
     FigureCanvasAgg.draw(self)
   File "/usr/lib/python2.5/site-packages/matplotlib/backends/backend_agg.py", line 358, in draw
     self.figure.draw(self.renderer)
   File "/usr/lib/python2.5/site-packages/matplotlib/figure.py", line 624, in draw
     for a in self.axes: a.draw(renderer)
   File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line 1345, in draw
     a.draw(renderer)
   File "/usr/lib/python2.5/site-packages/matplotlib/text.py", line 1246, in draw
     self.update_positions(renderer)
   File "/usr/lib/python2.5/site-packages/matplotlib/text.py", line 1242, in update_positions
     **d)
   File "/usr/lib/python2.5/site-packages/matplotlib/patches.py", line 678, in __init__
     verts = self.get_verts()
   File "/usr/lib/python2.5/site-packages/matplotlib/patches.py", line 690, in get_verts
     xb1, yb1, xb2, yb2 = self.getpoints(x1, y1, x2, y2, k1)
   File "/usr/lib/python2.5/site-packages/matplotlib/patches.py", line 714, in getpoints
     m = (y2-y1)/(x2-x1)
ZeroDivisionError: float division

It seems that the function getpoints() doesn't take care of the situations when the slope of the line (x1,y1,x2,y2) is zero or infinity. This could be solved with the simple check in the function:

if y2-y1 == 0:
  return x2, y2+k, x2, y2-k
elif x2-x1 == 0:
  return x2+k, y2, x2-k, y2

This fixes it for me.

By the way, I just found out about matplotlib, and I find it extremely useful! Thanks to all devs for creating this :).

Cheers,
Tuukka Verho

It seems that the function getpoints() doesn't take care of the
situations when the slope of the line (x1,y1,x2,y2) is zero or infinity.
This could be solved with the simple check in the function:

if y2-y1 == 0:
       return x2, y2+k, x2, y2-k
elif x2-x1 == 0:
       return x2+k, y2, x2-k, y2

This fixes it for me.

Thanks for the bug report and fix -- I've committed the changes to the
91 branch and the svn trunk.

By the way, I just found out about matplotlib, and I find it extremely
useful! Thanks to all devs for creating this :).

Glad you're liking it, and thanks for the help!

JDH

···

On Fri, Jul 18, 2008 at 9:31 AM, Tuukka Verho <tyverho@...625...> wrote: