[Scipy-svn] r6752 - trunk/scipy/spatial
scipy-svn at scipy.org
scipy-svn at scipy.org
Sat Sep 11 20:58:37 EDT 2010
Author: ptvirtan
Date: 2010-09-11 19:58:37 -0500 (Sat, 11 Sep 2010)
New Revision: 6752
Modified:
trunk/scipy/spatial/kdtree.py
Log:
3K: spatial: adapt kdtree to undefined comparison in Python 3 for None and instances
Modified: trunk/scipy/spatial/kdtree.py
===================================================================
--- trunk/scipy/spatial/kdtree.py 2010-09-12 00:58:25 UTC (rev 6751)
+++ trunk/scipy/spatial/kdtree.py 2010-09-12 00:58:37 UTC (rev 6752)
@@ -1,5 +1,6 @@
# Copyright Anne M. Archibald 2008
# Released under the scipy license
+import sys
import numpy as np
from heapq import heappush, heappop
import scipy.sparse
@@ -136,7 +137,12 @@
self.tree = self.__build(np.arange(self.n), self.maxes, self.mins)
class node(object):
- pass
+ if sys.version_info[0] >= 3:
+ def __lt__(self, other): id(self) < id(other)
+ def __gt__(self, other): id(self) > id(other)
+ def __le__(self, other): id(self) <= id(other)
+ def __ge__(self, other): id(self) >= id(other)
+ def __eq__(self, other): id(self) == id(other)
class leafnode(node):
def __init__(self, idx):
self.idx = idx
@@ -364,7 +370,10 @@
raise ValueError("Only p-norms with 1<=p<=infinity permitted")
retshape = np.shape(x)[:-1]
if retshape!=():
- if k>1:
+ if k is None:
+ dd = np.empty(retshape,dtype=np.object)
+ ii = np.empty(retshape,dtype=np.object)
+ elif k>1:
dd = np.empty(retshape+(k,),dtype=np.float)
dd.fill(np.inf)
ii = np.empty(retshape+(k,),dtype=np.int)
@@ -374,14 +383,14 @@
dd.fill(np.inf)
ii = np.empty(retshape,dtype=np.int)
ii.fill(self.n)
- elif k is None:
- dd = np.empty(retshape,dtype=np.object)
- ii = np.empty(retshape,dtype=np.object)
else:
raise ValueError("Requested %s nearest neighbors; acceptable numbers are integers greater than or equal to one, or None")
for c in np.ndindex(retshape):
hits = self.__query(x[c], k=k, p=p, distance_upper_bound=distance_upper_bound)
- if k>1:
+ if k is None:
+ dd[c] = [d for (d,i) in hits]
+ ii[c] = [i for (d,i) in hits]
+ elif k>1:
for j in range(len(hits)):
dd[c+(j,)], ii[c+(j,)] = hits[j]
elif k==1:
@@ -390,13 +399,12 @@
else:
dd[c] = np.inf
ii[c] = self.n
- elif k is None:
- dd[c] = [d for (d,i) in hits]
- ii[c] = [i for (d,i) in hits]
return dd, ii
else:
hits = self.__query(x, k=k, p=p, distance_upper_bound=distance_upper_bound)
- if k==1:
+ if k is None:
+ return [d for (d,i) in hits], [i for (d,i) in hits]
+ elif k==1:
if len(hits)>0:
return hits[0]
else:
@@ -409,8 +417,6 @@
for j in range(len(hits)):
dd[j], ii[j] = hits[j]
return dd, ii
- elif k is None:
- return [d for (d,i) in hits], [i for (d,i) in hits]
else:
raise ValueError("Requested %s nearest neighbors; acceptable numbers are integers greater than or equal to one, or None")
More information about the Scipy-svn
mailing list