PyObject.GetHashCode overflow bug
PyObject.GetHashCode() can throw an OverflowException because IntPtr.ToInt32() does throw. See
| return Runtime.PyObject_Hash(obj).ToInt32(); |
. I suggest fixing this by xoring the high and low parts of that IntPtr together. Like this:
var ulongVal = (ulong)ptr;
return (int)((uint)ulongVal ^ (uint)(ulongVal >> 32));
This happened to me when inserting into a dictionary using tensorflow objects as keys:
new Dictionary<dynamic, dynamic>() { { x, 1.0 }, { y, 1.0 }, }
Environment
- Pythonnet version: 2.3
- Python version: 3.5
- Operating System: Windows 7