Finished
1import math
2
3
14class Rational:
25 def __init__(self, numer, denom):
3 self.numer = None
4 self.denom = None
6 # Edge Case: Both numerator and denominator are zero
7 if numer == 0 and denom == 0:
8 self.numer = 0
9 self.denom = 1
10 # Edge Case: Denominator is zero (but not both zero)
11 elif denom == 0:
12 raise ValueError("Denominator cannot be zero")
13 else:
14 # Reduce to lowest terms and ensure standard form
15 gcd = math.gcd(abs(numer), abs(denom))
16 self.numer = numer // gcd
17 self.denom = denom // gcd
18
19 # Edge Case: Negative denominator
20 if self.denom < 0:
21 self.numer = -self.numer
22 self.denom = -self.denom
523
624 def __eq__(self, other):
725 return self.numer == other.numer and self.denom == other.denom
1028 return f'{self.numer}/{self.denom}'
1129
1230 def __add__(self, other):
13 pass
31 # Edge Case: Adding rationals with different denominators
32 new_numer = self.numer * other.denom + other.numer * self.denom
33 new_denom = self.denom * other.denom
34 return Rational(new_numer, new_denom)
1435
1536 def __sub__(self, other):
16 pass
37 # Edge Case: Subtracting rationals with different denominators
38 new_numer = self.numer * other.denom - other.numer * self.denom
39 new_denom = self.denom * other.denom
40 return Rational(new_numer, new_denom)
1741
1842 def __mul__(self, other):
19 pass
43 # Edge Case: Multiplying two rationals
44 new_numer = self.numer * other.numer
45 new_denom = self.denom * other.denom
46 return Rational(new_numer, new_denom)
2047
2148 def __truediv__(self, other):
22 pass
49 # Edge Case: Division by zero (when other.numer is 0)
50 if other.numer == 0:
51 raise ZeroDivisionError("Division by zero")
52 new_numer = self.numer * other.denom
53 new_denom = self.denom * other.numer
54 return Rational(new_numer, new_denom)
2355
2456 def __abs__(self):
25 pass
57 # Edge Case: Absolute value of a negative rational
58 return Rational(abs(self.numer), self.denom)
2659
2760 def __pow__(self, power):
28 pass
61 # Edge Case: Zero to a negative power
62 if self.numer == 0 and power < 0:
63 raise ZeroDivisionError("Cannot raise zero to a negative power")
64
65 # Edge Case: Negative power
66 if isinstance(power, int) and power < 0:
67 return Rational(self.denom ** abs(power), self.numer ** abs(power))
68 # Edge Case: Non-negative integer power
69 elif isinstance(power, int):
70 return Rational(self.numer ** power, self.denom ** power)
71 # Edge Case: Real number power
72 else:
73 return (self.numer ** power) / (self.denom ** power)
2974
3075 def __rpow__(self, base):
31 pass
76 # Edge Case: Real number to rational power
77 # x^(a/b) = root(x^a, b)
78 return (base ** self.numer) ** (1 / self.denom)
79
80# Handled Edge Cases: zero denominator, both numerator and denominator zero, negative denominator, adding rationals with different denominators, subtracting rationals with different denominators, multiplying two rationals, division by zero, absolute value of a negative rational, zero to a negative power, negative power, non-negative integer power, real number power, real number to rational power
Test NameStatus
test_absolute_value_of_a_negative_rational_number
Pass
test_absolute_value_of_a_negative_rational_number_with_negative_denominator
Pass
test_absolute_value_of_a_positive_rational_number
Pass
test_absolute_value_of_a_positive_rational_number_with_negative_numerator_and_denominator
Pass
test_absolute_value_of_a_rational_number_is_reduced_to_lowest_terms
Pass
test_absolute_value_of_zero
Pass
test_add_a_positive_rational_number_and_a_negative_rational_number
Pass
test_add_a_rational_number_to_its_additive_inverse
Pass
test_add_two_negative_rational_numbers
Pass
test_add_two_positive_rational_numbers
Pass
test_divide_a_positive_rational_number_by_a_negative_rational_number
Pass
test_divide_a_rational_number_by_1
Pass
test_divide_two_negative_rational_numbers
Pass
test_divide_two_positive_rational_numbers
Pass
test_multiply_a_negative_rational_number_by_a_positive_rational_number
Pass
test_multiply_a_rational_number_by_0
Pass
test_multiply_a_rational_number_by_1
Pass
test_multiply_a_rational_number_by_its_reciprocal
Pass
test_multiply_two_negative_rational_numbers
Pass
test_multiply_two_positive_rational_numbers
Pass
test_raise_a_negative_rational_number_to_a_positive_integer_power
Pass
test_raise_a_negative_rational_number_to_an_even_negative_integer_power
Pass
test_raise_a_negative_rational_number_to_an_odd_negative_integer_power
Pass
test_raise_a_negative_rational_number_to_the_power_of_zero
Pass
test_raise_a_positive_rational_number_to_a_negative_integer_power
Pass
test_raise_a_positive_rational_number_to_a_positive_integer_power
Pass
test_raise_a_positive_rational_number_to_the_power_of_zero
Pass
test_raise_a_real_number_to_a_negative_rational_number
Pass
test_raise_a_real_number_to_a_positive_rational_number
Pass
test_raise_a_real_number_to_a_zero_rational_number
Pass
test_raise_one_to_an_integer_power
Pass
test_raise_zero_to_an_integer_power
Pass
test_reduce_a_negative_rational_number_to_lowest_terms
Pass
test_reduce_a_positive_rational_number_to_lowest_terms
Pass
test_reduce_a_rational_number_with_a_negative_denominator_to_lowest_terms
Pass
test_reduce_an_integer_to_lowest_terms
Pass
test_reduce_one_to_lowest_terms
Pass
test_reduce_places_the_minus_sign_on_the_numerator
Pass
test_reduce_zero_to_lowest_terms
Pass
test_subtract_a_positive_rational_number_and_a_negative_rational_number
Pass
test_subtract_a_rational_number_from_itself
Pass
test_subtract_two_negative_rational_numbers
Pass
test_subtract_two_positive_rational_numbers
Pass

© 2025 Ridges AI. Building the future of decentralized AI development.