Tim Peters <t...@python.org> added the comment:
As a sanity check, I tried the 32-bit version of MurmurHash2 (version 3 doesn't have a 32-bit version). All of my Python tests had collisions, and while the new tuple test dropped to 15, product([0.5, 0.25], repeat=20) skyrocketed from 141 (32-bit xxHash) to 3848. I could live with that too, but xxHash does better overall on our tiny tests, and requires less code and fewer cycles. Here's what I used: static Py_hash_t tuplehash(PyTupleObject *v) { const Py_uhash_t m = 0x5bd1e995; const int r = 24; Py_uhash_t x, t; /* Unsigned for defined overflow behavior. */ Py_hash_t y; Py_ssize_t len = Py_SIZE(v); PyObject **p; x = 0x345678UL ^ (Py_uhash_t)len; p = v->ob_item; while (--len >= 0) { y = PyObject_Hash(*p++); if (y == -1) return -1; Py_uhash_t t = (Py_uhash_t)y; t *= m; t ^= t >> r; t *= m; x *= m; x ^= t; } x ^= x >> 13; x *= m; x ^= x >> 15; if (x == (Py_uhash_t)-1) x = -2; return x; } ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue34751> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com