@@ -395,8 +395,10 @@ class doesn't subclass a concrete type, there's no
395
395
396
396
"""
397
397
def forward (a , b ):
398
- if isinstance (b , ( int , Fraction ) ):
398
+ if isinstance (b , Fraction ):
399
399
return monomorphic_operator (a , b )
400
+ elif isinstance (b , int ):
401
+ return monomorphic_operator (a , Fraction (b ))
400
402
elif isinstance (b , float ):
401
403
return fallback_operator (float (a ), b )
402
404
elif isinstance (b , complex ):
@@ -409,7 +411,7 @@ def forward(a, b):
409
411
def reverse (b , a ):
410
412
if isinstance (a , numbers .Rational ):
411
413
# Includes ints.
412
- return monomorphic_operator (a , b )
414
+ return monomorphic_operator (Fraction ( a ) , b )
413
415
elif isinstance (a , numbers .Real ):
414
416
return fallback_operator (float (a ), float (b ))
415
417
elif isinstance (a , numbers .Complex ):
@@ -491,8 +493,8 @@ def reverse(b, a):
491
493
492
494
def _add (a , b ):
493
495
"""a + b"""
494
- na , da = a .numerator , a .denominator
495
- nb , db = b .numerator , b .denominator
496
+ na , da = a ._numerator , a ._denominator
497
+ nb , db = b ._numerator , b ._denominator
496
498
g = math .gcd (da , db )
497
499
if g == 1 :
498
500
return Fraction (na * db + da * nb , da * db , _normalize = False )
@@ -507,8 +509,8 @@ def _add(a, b):
507
509
508
510
def _sub (a , b ):
509
511
"""a - b"""
510
- na , da = a .numerator , a .denominator
511
- nb , db = b .numerator , b .denominator
512
+ na , da = a ._numerator , a ._denominator
513
+ nb , db = b ._numerator , b ._denominator
512
514
g = math .gcd (da , db )
513
515
if g == 1 :
514
516
return Fraction (na * db - da * nb , da * db , _normalize = False )
@@ -523,8 +525,8 @@ def _sub(a, b):
523
525
524
526
def _mul (a , b ):
525
527
"""a * b"""
526
- na , da = a .numerator , a .denominator
527
- nb , db = b .numerator , b .denominator
528
+ na , da = a ._numerator , a ._denominator
529
+ nb , db = b ._numerator , b ._denominator
528
530
g1 = math .gcd (na , db )
529
531
if g1 > 1 :
530
532
na //= g1
@@ -540,8 +542,8 @@ def _mul(a, b):
540
542
def _div (a , b ):
541
543
"""a / b"""
542
544
# Same as _mul(), with inversed b.
543
- na , da = a .numerator , a .denominator
544
- nb , db = b .numerator , b .denominator
545
+ na , da = a ._numerator , a ._denominator
546
+ nb , db = b ._numerator , b ._denominator
545
547
g1 = math .gcd (na , nb )
546
548
if g1 > 1 :
547
549
na //= g1
0 commit comments