[SciPy-user] Memory leak in delaunay interpolator

Pauli Virtanen pav at iki.fi
Thu Jan 17 14:57:35 EST 2008


Thu, 17 Jan 2008 14:35:50 -0500, william ratcliff wrote:

> Does it still crash if you give it a degenerate list of points?

It removes duplicate points prior to triangulation, and I think the 
segfault associated with this is now patched by Robert Kern. But there 
are still datasets that it can't diagonalize (raises KeyError now instead 
of a hard segfault); I managed to reduce the problematic example in #376 
to a simpler one:

>>> import scikits.delaunay as d
>>> import numpy as np
>>> data = np.array([
...     [-1, -1                          ], [-1, 0], [-1, 1],
...     [ 0, -1                          ], [ 0, 0], [ 0, 1],
...     [ 1, -1 - np.finfo(np.float_).eps], [ 1, 0], [ 1, 1],
... ])
>>> tri = d.Triangulation(data[:,0], data[:,1])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/pauli/koodi/proj/delaunay/main/scikits/delaunay/
triangulate.py", line 90, in __init__
    self.hull = self._compute_convex_hull()
  File "/home/pauli/koodi/proj/delaunay/main/scikits/delaunay/
triangulate.py", line 125, in _compute_convex_hull
    hull.append(edges.pop(hull[-1]))
KeyError: 6
>>> data[6,1] = -1
>>> tri = d.Triangulation(data[:,0], data[:,1])
>>> data[6,1] = -1 - 1e6*np.finfo(np.float_).eps
>>> tri = d.Triangulation(data[:,0], data[:,1])

That is, it works only after rounding off the epsilon. Also, it seems to 
work if instead of eps, 1e6*eps is subtracted from data[6,1].

-- 
Pauli Virtanen




More information about the SciPy-User mailing list