From 877bc5c50132e662860102abcb00be0646819780 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Mon, 8 Mar 2021 16:05:34 -0600
Subject: [PATCH] Use (hopefully) faster hash functions in KeyBuilder for int,
 float

---
 pytools/persistent_dict.py | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/pytools/persistent_dict.py b/pytools/persistent_dict.py
index 9e961a3..7836b44 100644
--- a/pytools/persistent_dict.py
+++ b/pytools/persistent_dict.py
@@ -263,14 +263,21 @@ class KeyBuilder:
 
     @staticmethod
     def update_for_int(key_hash, key):
-        key_hash.update(str(key).encode("utf8"))
+        sz = 8
+        while True:
+            try:
+                key_hash.update(key.to_bytes(sz, byteorder="little", signed=True))
+                return
+            except OverflowError:
+                sz *= 2
 
-    update_for_long = update_for_int
-    update_for_bool = update_for_int
+    @staticmethod
+    def update_for_bool(key_hash, key):
+        key_hash.update(str(key).encode("utf8"))
 
     @staticmethod
     def update_for_float(key_hash, key):
-        key_hash.update(repr(key).encode("utf8"))
+        key_hash.update(key.hex().encode("utf8"))
 
     @staticmethod
     def update_for_str(key_hash, key):
-- 
GitLab