i discovered a bug when i tried to use a Set as a dictionary key. i've 
included a patch below. i have also created a test case illustrating the 
bug -- in the future, where do i put this in the code/docs so it can go in 
the patch too?

here is the test case:

---
In [72]: d={Set([2*I,1+I]):1}

In [73]: d[Set([1+I,2*I])]
<type 'exceptions.KeyError'>
---

note that this bug only occurs when python doesn't know 
how to sort the elements in the Set. e.g.:

In [74]: d={Set([1,2]):1}

In [75]: d[Set([2,1])]
Out[75]: 1

works because Set([1,2]) and Set([2,1]) print the same:

In [76]: Set([1,2])
Out[76]: {1, 2}

In [77]: Set([2,1])
Out[77]: {1, 2}

while

In [78]: Set([2*I,1+I]) 
Out[78]: {2.00000000000000*I, 1.00000000000000 + 1.00000000000000*I}

In [79]: Set([1+I,2*I]) 
Out[79]: {1.00000000000000 + 1.00000000000000*I, 2.00000000000000*I}

print differently.
this in turn led to a different hash value, since the default hash value 
comes from the string representation.
---

below is the patch.



# HG changeset patch
# User Kyle Schalm <[EMAIL PROTECTED]>>
# Date 1176451637 18000
# Node ID bca0cc86fd5e88dc21887c5d222c1fcfa71ae490
# Parent  76e21a785e866569cc43a15b01ee81d9dd131b43
fix bug when using Set as dictionary key

diff -r 76e21a785e86 -r bca0cc86fd5e sage/sets/set.py
--- a/sage/sets/set.py  Fri Apr 13 00:29:21 2007 -0500
+++ b/sage/sets/set.py  Fri Apr 13 03:07:17 2007 -0500
@@ -505,7 +505,7 @@ class Set_object_enumerated(Set_object):

      def _repr_(self):
          s = str(self.set())
-        return "{" + s[5:-2] + "}"
+        return "{" + s[11:-2] + "}"
          #    return "Finite set of elements of %s"%self.__object

      def set(self):
@@ -530,8 +530,11 @@ class Set_object_enumerated(Set_object):
          try:
              return self.__set
          except AttributeError:
-            self.__set = set(self.object())
+            self.__set = frozenset(self.object())
              return self.__set
+
+    def __hash__(self):
+        return hash(self.set())

      def __cmp__(self, other):
          """


--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to [EMAIL PROTECTED]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://sage.scipy.org/sage/ and http://modular.math.washington.edu/sage/
-~----------~----~----~----~------~----~------~--~---

Reply via email to