63 lines
1.1 KiB
Python
63 lines
1.1 KiB
Python
"""
|
|
Reversed Operations not available in the stdlib operator module.
|
|
Defining these instead of using lambdas allows us to reference them by name.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import operator
|
|
|
|
|
|
def radd(left, right):
|
|
return right + left
|
|
|
|
|
|
def rsub(left, right):
|
|
return right - left
|
|
|
|
|
|
def rmul(left, right):
|
|
return right * left
|
|
|
|
|
|
def rdiv(left, right):
|
|
return right / left
|
|
|
|
|
|
def rtruediv(left, right):
|
|
return right / left
|
|
|
|
|
|
def rfloordiv(left, right):
|
|
return right // left
|
|
|
|
|
|
def rmod(left, right):
|
|
# check if right is a string as % is the string
|
|
# formatting operation; this is a TypeError
|
|
# otherwise perform the op
|
|
if isinstance(right, str):
|
|
typ = type(left).__name__
|
|
raise TypeError(f"{typ} cannot perform the operation mod")
|
|
|
|
return right % left
|
|
|
|
|
|
def rdivmod(left, right):
|
|
return divmod(right, left)
|
|
|
|
|
|
def rpow(left, right):
|
|
return right**left
|
|
|
|
|
|
def rand_(left, right):
|
|
return operator.and_(right, left)
|
|
|
|
|
|
def ror_(left, right):
|
|
return operator.or_(right, left)
|
|
|
|
|
|
def rxor(left, right):
|
|
return operator.xor(right, left)
|