Skip to content

Commit 71ace91

Browse files
authored
Merge pull request #802 from dcodrut/bug/RNG2
BUG: RNG pruning condition and loop bound
2 parents fa9575b + f134a92 commit 71ace91

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

libpysal/weights/gabriel.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -332,9 +332,9 @@ def _filter_relativehood(edges, coordinates, return_dkmax=False):
332332
2. for each edge of the delaunay (i,j), compute
333333
dkmax = max(d(k,i), d(k,j)) for k in 1..n, k != i, j
334334
3. for each edge of the delaunay (i,j), prune
335-
if any dkmax is greater than d(i,j)
335+
if any dkmax is smaller than d(i,j)
336336
"""
337-
n = edges.max()
337+
n = len(coordinates)
338338
out = []
339339
r = []
340340
for edge in edges:
@@ -345,11 +345,12 @@ def _filter_relativehood(edges, coordinates, return_dkmax=False):
345345
dij = ((pi - pj) ** 2).sum() ** 0.5
346346
prune = False
347347
for k in range(n):
348+
if k in (i, j):
349+
continue
348350
pk = coordinates[k]
349351
dik = ((pi - pk) ** 2).sum() ** 0.5
350352
djk = ((pj - pk) ** 2).sum() ** 0.5
351-
distances = numpy.array([dik, djk, dkmax])
352-
dkmax = distances.max()
353+
dkmax = max(dik, djk)
353354
prune = dkmax < dij
354355
if (not return_dkmax) & prune:
355356
break

libpysal/weights/tests/test_gabriel.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,12 @@ def test_rng():
3939

4040
assert e.neighbors == f.neighbors
4141

42+
# RNG should be a subgraph of Delaunay
43+
for k, neighbors in e.neighbors.items():
44+
assert set(neighbors) <= set(dty[k])
45+
4246
assert e[1] != dty[1]
43-
assert list(e[1].keys()) == [0, 3, 6, 30, 38]
47+
assert list(e[1].keys()) == [0, 3]
4448
for focal, neighbors in e.neighbors.items():
4549
dneighbors = dty[focal]
4650
assert set(neighbors) <= set(dneighbors)

0 commit comments

Comments
 (0)