Author: Armin Rigo <ar...@tunes.org> 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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit