Skip to content

Commit 46e65e9

Browse files
committed
Fix int handling.
1 parent 88a2bfd commit 46e65e9

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

src/quicktions.pyx

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,9 +197,18 @@ cdef extern from *:
197197
int trailing_zeros_ullong "__Quicktions_trailing_zeros_ullong" (unsigned long long x)
198198

199199

200-
cpdef _gcd(a: int, b: int):
200+
def _gcd(a, b):
201201
"""Calculate the Greatest Common Divisor of a and b as a non-negative number.
202202
"""
203+
if not isinstance(a, int):
204+
raise ValueError(f"Expected int, got {type(a).__name__}")
205+
if not isinstance(b, int):
206+
raise ValueError(f"Expected int, got {type(b).__name__}")
207+
208+
return _igcd(int(a), int(b))
209+
210+
211+
cdef _igcd(a, b):
203212
if HAS_ISLONGLONG:
204213
if PyLong_IsLongLong(a) and PyLong_IsLongLong(b):
205214
return _c_gcd(<unsigned long long> a, <unsigned long long> b)
@@ -211,7 +220,7 @@ cpdef _gcd(a: int, b: int):
211220
if HAS_OLD_PYLONG_GCD:
212221
return _PyLong_GCD(a, b)
213222

214-
return _gcd_fallback(a, b)
223+
return _gcd_fallback(int(a), int(b))
215224

216225

217226
ctypedef unsigned long long ullong
@@ -760,7 +769,7 @@ cdef class Fraction:
760769
numerator = int(numerator)
761770
if not isinstance(denominator, int):
762771
denominator = int(denominator)
763-
g = _gcd(numerator, denominator)
772+
g = _igcd(numerator, denominator)
764773
# NOTE: 'is' tests on integers are generally a bad idea, but
765774
# they are fast and if they fail here, it'll still be correct
766775
if denominator < 0:

0 commit comments

Comments
 (0)