You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-e763c033a75e> in <module>()
----> 1 joblib.hashing.hash({'a': 1, 1: 2})
/home/le243287/dev/joblib/joblib/hashing.py in hash(obj, hash_name, coerce_mmap)
231 else:
232 hasher = Hasher(hash_name=hash_name)
--> 233 return hasher.hash(obj)
/home/le243287/dev/joblib/joblib/hashing.py in hash(self, obj, return_digest)
52 def hash(self, obj, return_digest=True):
53 try:
---> 54 self.dump(obj)
55 except pickle.PicklingError as e:
56 warnings.warn('PicklingError while hashing %r: %r' % (obj, e))
/volatile/le243287/miniconda3/lib/python3.4/pickle.py in dump(self, obj)
410 if self.proto >= 4:
411 self.framer.start_framing()
--> 412 self.save(obj)
413 self.write(STOP)
414 self.framer.end_framing()
/home/le243287/dev/joblib/joblib/hashing.py in save(self, obj)
211 klass = obj.__class__
212 obj = (klass, ('HASHED', obj.descr))
--> 213 Hasher.save(self, obj)
214
215
/home/le243287/dev/joblib/joblib/hashing.py in save(self, obj)
77 cls = obj.__self__.__class__
78 obj = _MyHash(func_name, inst, cls)
---> 79 Pickler.save(self, obj)
80
81 def memoize(self, obj):
/volatile/le243287/miniconda3/lib/python3.4/pickle.py in save(self, obj, save_persistent_id)
477 f = self.dispatch.get(t)
478 if f is not None:
--> 479 f(self, obj) # Call unbound method with explicit self
480 return
481
/volatile/le243287/miniconda3/lib/python3.4/pickle.py in save_dict(self, obj)
812
813 self.memoize(obj)
--> 814 self._batch_setitems(obj.items())
815
816 dispatch[dict] = save_dict
/home/le243287/dev/joblib/joblib/hashing.py in _batch_setitems(self, items)
124 def _batch_setitems(self, items):
125 # forces order of keys in dict to ensure consistent hash
--> 126 Pickler._batch_setitems(self, iter(sorted(items)))
127
128 def save_set(self, set_items):
TypeError: unorderable types: str() < int()
The reason: we rely on sorted to guarantee the reproducibility of the hash for non ordered containers and in Python 3 you can not compare arbitrary types.
Maybe the first thing to do would be to just catch the error in Python 3 and raise a more user-friendly one saying that set with mixed types or dict with mixed type keys are not supported ?
A possible fix (suggested by @ogrisel): using joblib.hashing.hash to hash the elements (in the set case) or keys (in the dict case) and use key= in the sorted call.
The text was updated successfully, but these errors were encountered:
A possible fix (suggested by @ogrisel): using joblib.hashing.hash to hash the
elements (in the set case) or keys (in the dict case) and use key= in the
sorted call.
How reproducible will the sorting based on hashes be?
The traceback:
The reason: we rely on
sorted
to guarantee the reproducibility of the hash for non ordered containers and in Python 3 you can not compare arbitrary types.Maybe the first thing to do would be to just catch the error in Python 3 and raise a more user-friendly one saying that set with mixed types or dict with mixed type keys are not supported ?
A possible fix (suggested by @ogrisel): using joblib.hashing.hash to hash the elements (in the set case) or keys (in the dict case) and use
key=
in thesorted
call.The text was updated successfully, but these errors were encountered: