@@ -579,7 +579,8 @@ def __format__(self, format_spec, /):
579
579
f"for object of type { type (self ).__name__ !r} "
580
580
)
581
581
582
- def _operator_fallbacks (monomorphic_operator , fallback_operator ):
582
+ def _operator_fallbacks (monomorphic_operator , fallback_operator ,
583
+ handle_complex = True ):
583
584
"""Generates forward and reverse operators given a purely-rational
584
585
operator and a function from the operator module.
585
586
@@ -666,7 +667,7 @@ def forward(a, b):
666
667
return monomorphic_operator (a , Fraction (b ))
667
668
elif isinstance (b , float ):
668
669
return fallback_operator (float (a ), b )
669
- elif isinstance (b , complex ):
670
+ elif handle_complex and isinstance (b , complex ):
670
671
return fallback_operator (complex (a ), b )
671
672
else :
672
673
return NotImplemented
@@ -679,7 +680,7 @@ def reverse(b, a):
679
680
return monomorphic_operator (Fraction (a ), b )
680
681
elif isinstance (a , numbers .Real ):
681
682
return fallback_operator (float (a ), float (b ))
682
- elif isinstance (a , numbers .Complex ):
683
+ elif handle_complex and isinstance (a , numbers .Complex ):
683
684
return fallback_operator (complex (a ), complex (b ))
684
685
else :
685
686
return NotImplemented
@@ -830,22 +831,22 @@ def _floordiv(a, b):
830
831
"""a // b"""
831
832
return (a .numerator * b .denominator ) // (a .denominator * b .numerator )
832
833
833
- __floordiv__ , __rfloordiv__ = _operator_fallbacks (_floordiv , operator .floordiv )
834
+ __floordiv__ , __rfloordiv__ = _operator_fallbacks (_floordiv , operator .floordiv , False )
834
835
835
836
def _divmod (a , b ):
836
837
"""(a // b, a % b)"""
837
838
da , db = a .denominator , b .denominator
838
839
div , n_mod = divmod (a .numerator * db , da * b .numerator )
839
840
return div , Fraction (n_mod , da * db )
840
841
841
- __divmod__ , __rdivmod__ = _operator_fallbacks (_divmod , divmod )
842
+ __divmod__ , __rdivmod__ = _operator_fallbacks (_divmod , divmod , False )
842
843
843
844
def _mod (a , b ):
844
845
"""a % b"""
845
846
da , db = a .denominator , b .denominator
846
847
return Fraction ((a .numerator * db ) % (b .numerator * da ), da * db )
847
848
848
- __mod__ , __rmod__ = _operator_fallbacks (_mod , operator .mod )
849
+ __mod__ , __rmod__ = _operator_fallbacks (_mod , operator .mod , False )
849
850
850
851
def __pow__ (a , b ):
851
852
"""a ** b
0 commit comments