[yt-svn] commit/yt: jzuhone: Merged in MatthewTurk/yt (pull request #1647)

commits-noreply at bitbucket.org commits-noreply at bitbucket.org
Tue Jul 21 11:30:20 PDT 2015


1 new commit in yt:

https://bitbucket.org/yt_analysis/yt/commits/5c0e30b252d4/
Changeset:   5c0e30b252d4
Branch:      yt
User:        jzuhone
Date:        2015-07-21 18:30:05+00:00
Summary:     Merged in MatthewTurk/yt (pull request #1647)

Attempt to make hashing more robust and to work in 2 and 3.
Affected #:  1 file

diff -r 2fee18b574b436c4f19922aea6cd3f4e26eac221 -r 5c0e30b252d4e7062dea066945419186eca9939e yt/geometry/selection_routines.pyx
--- a/yt/geometry/selection_routines.pyx
+++ b/yt/geometry/selection_routines.pyx
@@ -603,20 +603,24 @@
         return mask.view("bool")
 
     def __hash__(self):
-        return hash(("mine", self._hash_vals()) +
-                    ("base", self._base_hash()))
+        cdef np.int64_t hash_val = 0
+        for v in self._hash_vals() + self._base_hash():
+            hash_val ^= hash(v)
+        return hash_val
 
     def _hash_vals(self):
         raise NotImplementedError
 
     def _base_hash(self):
-        return (self.min_level, self.max_level, self.overlap_cells,
-                self.periodicity[0],
-                self.periodicity[1],
-                self.periodicity[2],
-                self.domain_width[0],
-                self.domain_width[1],
-                self.domain_width[2])
+        return (("min_level", self.min_level),
+                ("max_level", self.max_level),
+                ("overlap_cells", self.overlap_cells),
+                ("periodicity[0]", self.periodicity[0]),
+                ("periodicity[1]", self.periodicity[1]),
+                ("periodicity[2]", self.periodicity[2]),
+                ("domain_width[0]", self.domain_width[0]),
+                ("domain_width[1]", self.domain_width[1]),
+                ("domain_width[2]", self.domain_width[2]))
 
 
 cdef class PointSelector(SelectorObject):
@@ -670,7 +674,9 @@
             return 0
 
     def _hash_vals(self):
-        return (self.p[0], self.p[1], self.p[2])
+        return (("p[0]", self.p[0]),
+                ("p[1]", self.p[1]),
+                ("p[2]", self.p[2]))
 
 point_selector = PointSelector
 
@@ -771,8 +777,11 @@
         return 1
 
     def _hash_vals(self):
-        return (self.radius, self.radius2,
-                self.center[0], self.center[1], self.center[2])
+        return (("radius", self.radius),
+                ("radius2", self.radius2),
+                ("center[0]", self.center[0]),
+                ("center[1]", self.center[1]),
+                ("center[2]", self.center[2]))
 
 sphere_selector = SphereSelector
 
@@ -867,8 +876,12 @@
         return 1
 
     def _hash_vals(self):
-        return (self.left_edge[0], self.left_edge[1], self.left_edge[2],
-                self.right_edge[0], self.right_edge[1], self.right_edge[2])
+        return (("left_edge[0]", self.left_edge[0]),
+                ("left_edge[1]", self.left_edge[1]),
+                ("left_edge[2]", self.left_edge[2]),
+                ("right_edge[0]", self.right_edge[0]),
+                ("right_edge[1]", self.right_edge[1]),
+                ("right_edge[2]", self.right_edge[2]))
 
 region_selector = RegionSelector
 
@@ -899,7 +912,10 @@
         return 1
 
     def _hash_vals(self):
-        return self._conditionals
+        t = ()
+        for i, c in enumerate(self._conditionals):
+            t += ("conditional[%s]" % i, c)
+        return ("conditionals", t)
 
 cut_region_selector = CutRegionSelector
 
@@ -1005,9 +1021,15 @@
         return 0
 
     def _hash_vals(self):
-        return (self.norm_vec[0], self.norm_vec[1], self.norm_vec[2],
-                self.center[0], self.center[1], self.center[2],
-                self.radius, self.radius2, self.height)
+        return (("norm_vec[0]", self.norm_vec[0]),
+                ("norm_vec[1]", self.norm_vec[1]),
+                ("norm_vec[2]", self.norm_vec[2]),
+                ("center[0]", self.center[0]),
+                ("center[1]", self.center[1]),
+                ("center[2]", self.center[2]),
+                ("radius", self.radius),
+                ("radius2", self.radius2),
+                ("height", self.height))
 
 disk_selector = DiskSelector
 
@@ -1084,8 +1106,10 @@
         return 1
 
     def _hash_vals(self):
-        return (self.norm_vec[0], self.norm_vec[1], self.norm_vec[2],
-                self.d)
+        return (("norm_vec[0]", self.norm_vec[0]),
+                ("norm_vec[1]", self.norm_vec[1]), 
+                ("norm_vec[2]", self.norm_vec[2]),
+                ("d", self.d))
 
 cutting_selector = CuttingPlaneSelector
 
@@ -1173,7 +1197,8 @@
         return 0
 
     def _hash_vals(self):
-        return (self.axis, self.coord)
+        return (("axis", self.axis),
+                ("coord", self.coord))
 
 slice_selector = SliceSelector
 
@@ -1271,7 +1296,11 @@
         return 0
 
     def _hash_vals(self):
-        return (self.px_ax, self.py_ax, self.px, self.py, self.axis)
+        return (("px_ax", self.px_ax),
+                ("py_ax", self.py_ax),
+                ("px", self.px),
+                ("py", self.py),
+                ("axis", self.axis))
 
 ortho_ray_selector = OrthoRaySelector
 
@@ -1495,9 +1524,15 @@
         return self.select_bbox(left_edge, right_edge)
 
     def _hash_vals(self):
-        return (self.p1[0], self.p1[1], self.p1[2],
-                self.p2[0], self.p2[1], self.p2[2],
-                self.vec[0], self.vec[1], self.vec[2])
+        return (("p1[0]", self.p1[0]),
+                ("p1[1]", self.p1[1]),
+                ("p1[2]", self.p1[2]),
+                ("p2[0]", self.p2[0]),
+                ("p2[1]", self.p2[1]),
+                ("p2[2]", self.p2[2]),
+                ("vec[0]", self.vec[0]),
+                ("vec[1]", self.vec[1]),
+                ("vec[2]", self.vec[2]))
 
 ray_selector = RaySelector
 
@@ -1622,11 +1657,21 @@
         return 0
 
     def _hash_vals(self):
-        return (self.vec[0][0], self.vec[0][1], self.vec[0][2],
-                self.vec[1][0], self.vec[1][1], self.vec[1][2],
-                self.vec[2][0], self.vec[2][1], self.vec[2][2],
-                self.mag[0], self.mag[1], self.mag[2],
-                self.center[0], self.center[1], self.center[2])
+        return (("vec[0][0]", self.vec[0][0]),
+                ("vec[0][1]", self.vec[0][1]),
+                ("vec[0][2]", self.vec[0][2]),
+                ("vec[1][0]", self.vec[1][0]),
+                ("vec[1][1]", self.vec[1][1]),
+                ("vec[1][2]", self.vec[1][2]),
+                ("vec[2][0]", self.vec[2][0]),
+                ("vec[2][1]", self.vec[2][1]),
+                ("vec[2][2]", self.vec[2][2]),
+                ("mag[0]", self.mag[0]),
+                ("mag[1]", self.mag[1]),
+                ("mag[2]", self.mag[2]),
+                ("center[0]", self.center[0]),
+                ("center[1]", self.center[1]),
+                ("center[2]", self.center[2]))
 
 ellipsoid_selector = EllipsoidSelector

Repository URL: https://bitbucket.org/yt_analysis/yt/

--

This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.



More information about the yt-svn mailing list