1"""
2Reversed Operations not available in the stdlib operator module.
3Defining these instead of using lambdas allows us to reference them by name.
4"""
5import operator
6
7
8def radd(left, right):
9    return right + left
10
11
12def rsub(left, right):
13    return right - left
14
15
16def rmul(left, right):
17    return right * left
18
19
20def rdiv(left, right):
21    return right / left
22
23
24def rtruediv(left, right):
25    return right / left
26
27
28def rfloordiv(left, right):
29    return right // left
30
31
32def rmod(left, right):
33    # check if right is a string as % is the string
34    # formatting operation; this is a TypeError
35    # otherwise perform the op
36    if isinstance(right, str):
37        typ = type(left).__name__
38        raise TypeError(f"{typ} cannot perform the operation mod")
39
40    return right % left
41
42
43def rdivmod(left, right):
44    return divmod(right, left)
45
46
47def rpow(left, right):
48    return right ** left
49
50
51def rand_(left, right):
52    return operator.and_(right, left)
53
54
55def ror_(left, right):
56    return operator.or_(right, left)
57
58
59def rxor(left, right):
60    return operator.xor(right, left)
61