Author: Armin Rigo <[email protected]>
Branch:
Changeset: r94814:7160ef7f4d63
Date: 2018-07-06 16:01 +0200
http://bitbucket.org/pypy/pypy/changeset/7160ef7f4d63/
Log: Good speed boost on Fraction.__hash__(). Not compatible with Python
3, needs a different hack.
diff --git a/lib-python/2.7/fractions.py b/lib-python/2.7/fractions.py
--- a/lib-python/2.7/fractions.py
+++ b/lib-python/2.7/fractions.py
@@ -517,8 +517,13 @@
# Get integers right.
return hash(self._numerator)
# Expensive check, but definitely correct.
- if self == float(self):
- return hash(float(self))
+ # PyPy: the following 4 lines used to be almost twice slower:
+ # if self == float(self):
+ # return hash(float(self))
+ f = float(self)
+ x, y = f.as_integer_ratio() # signs are correct: y is positive
+ if self._numerator == x and self._denominator == y:
+ return hash(f)
else:
# Use tuple's hash to avoid a high collision rate on
# simple fractions.
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit