Finished
1import math
2
3
14class ComplexNumber:
25 def __init__(self, real, imaginary):
3 pass
6 self.real = real
7 self.imaginary = imaginary
48
59 def __eq__(self, other):
6 pass
10 # Edge Case: Handle comparison with scalar numbers (int/float)
11 if isinstance(other, (int, float)):
12 return self.real == other and self.imaginary == 0
13 # Edge Case: Standard comparison between two ComplexNumber instances
14 return self.real == other.real and self.imaginary == other.imaginary
715
816 def __add__(self, other):
9 pass
17 # Edge Case: Handle addition with scalar numbers (int/float)
18 if isinstance(other, (int, float)):
19 return ComplexNumber(self.real + other, self.imaginary)
20 # Edge Case: Standard addition between two ComplexNumber instances
21 return ComplexNumber(self.real + other.real, self.imaginary + other.imaginary)
22
23 def __radd__(self, other):
24 # Edge Case: Handle right-side addition with scalar numbers (int/float)
25 return self.__add__(other)
1026
1127 def __mul__(self, other):
12 pass
28 # Edge Case: Handle multiplication with scalar numbers (int/float)
29 if isinstance(other, (int, float)):
30 return ComplexNumber(self.real * other, self.imaginary * other)
31 # Edge Case: Standard multiplication between two ComplexNumber instances
32 real_part = self.real * other.real - self.imaginary * other.imaginary
33 imaginary_part = self.imaginary * other.real + self.real * other.imaginary
34 return ComplexNumber(real_part, imaginary_part)
35
36 def __rmul__(self, other):
37 # Edge Case: Handle right-side multiplication with scalar numbers (int/float)
38 return self.__mul__(other)
1339
1440 def __sub__(self, other):
15 pass
41 # Edge Case: Handle subtraction with scalar numbers (int/float)
42 if isinstance(other, (int, float)):
43 return ComplexNumber(self.real - other, self.imaginary)
44 # Edge Case: Standard subtraction between two ComplexNumber instances
45 return ComplexNumber(self.real - other.real, self.imaginary - other.imaginary)
46
47 def __rsub__(self, other):
48 # Edge Case: Handle right-side subtraction with scalar numbers (int/float)
49 if isinstance(other, (int, float)):
50 return ComplexNumber(other - self.real, -self.imaginary)
51 # Edge Case: Standard right-side subtraction between two ComplexNumber instances
52 return ComplexNumber(other.real - self.real, other.imaginary - self.imaginary)
1653
1754 def __truediv__(self, other):
18 pass
55 # Edge Case: Handle division with scalar numbers (int/float)
56 if isinstance(other, (int, float)):
57 # Edge Case: Division by zero scalar
58 if other == 0:
59 raise ZeroDivisionError("division by zero")
60 return ComplexNumber(self.real / other, self.imaginary / other)
61
62 # Edge Case: Division by zero complex number
63 denominator = other.real**2 + other.imaginary**2
64 if denominator == 0:
65 raise ZeroDivisionError("division by zero complex number")
66
67 # Edge Case: Standard division between two ComplexNumber instances
68 real_part = (self.real * other.real + self.imaginary * other.imaginary) / denominator
69 imaginary_part = (self.imaginary * other.real - self.real * other.imaginary) / denominator
70 return ComplexNumber(real_part, imaginary_part)
71
72 def __rtruediv__(self, other):
73 # Edge Case: Handle right-side division with scalar numbers (int/float)
74 if isinstance(other, (int, float)):
75 # Edge Case: Division by zero complex number
76 denominator = self.real**2 + self.imaginary**2
77 if denominator == 0:
78 raise ZeroDivisionError("division by zero complex number")
79
80 # Edge Case: Standard right-side division
81 real_part = (other * self.real) / denominator
82 imaginary_part = (-other * self.imaginary) / denominator
83 return ComplexNumber(real_part, imaginary_part)
1984
2085 def __abs__(self):
21 pass
86 # Edge Case: Compute absolute value using math.hypot for better precision
87 return math.hypot(self.real, self.imaginary)
2288
2389 def conjugate(self):
24 pass
90 # Edge Case: Return conjugate with negated imaginary part
91 return ComplexNumber(self.real, -self.imaginary)
2592
2693 def exp(self):
27 pass
94 # Edge Case: Exponentiation using Euler's formula
95 exp_real = math.exp(self.real)
96 real_part = exp_real * math.cos(self.imaginary)
97 imaginary_part = exp_real * math.sin(self.imaginary)
98 return ComplexNumber(real_part, imaginary_part)
99
100 # Handled Edge Cases:
101 # - Comparison with scalar numbers
102 # - Addition/subtraction/multiplication/division with scalar numbers
103 # - Right-side operations with scalar numbers
104 # - Division by zero (scalar and complex)
105 # - Better precision for absolute value using math.hypot
106 # - Proper conjugate calculation
107 # - Exponentiation using Euler's formula
Test NameStatus
test_absolute_value_of_a_negative_purely_real_number
Pass
test_absolute_value_of_a_number_with_real_and_imaginary_part
Pass
test_absolute_value_of_a_positive_purely_real_number
Pass
test_absolute_value_of_a_purely_imaginary_number_with_negative_imaginary_part
Pass
test_absolute_value_of_a_purely_imaginary_number_with_positive_imaginary_part
Pass
test_add_complex_number_to_real_number
Pass
test_add_numbers_with_real_and_imaginary_part
Pass
test_add_purely_imaginary_numbers
Pass
test_add_purely_real_numbers
Pass
test_add_real_number_to_complex_number
Pass
test_conjugate_a_number_with_real_and_imaginary_part
Pass
test_conjugate_a_purely_imaginary_number
Pass
test_conjugate_a_purely_real_number
Pass
test_divide_complex_number_by_real_number
Pass
test_divide_numbers_with_real_and_imaginary_part
Pass
test_divide_purely_imaginary_numbers
Pass
test_divide_purely_real_numbers
Pass
test_divide_real_number_by_complex_number
Pass
test_equality_of_complex_numbers
Pass
test_euler_s_identity_formula
Pass
test_exponential_of_0
Pass
test_exponential_of_a_number_with_real_and_imaginary_part
Pass
test_exponential_of_a_purely_real_number
Pass
test_exponential_resulting_in_a_number_with_real_and_imaginary_part
Pass
test_imaginary_part_of_a_number_with_real_and_imaginary_part
Pass
test_imaginary_part_of_a_purely_imaginary_number
Pass
test_imaginary_part_of_a_purely_real_number
Pass
test_imaginary_unit
Pass
test_inequality_of_imaginary_part
Pass
test_inequality_of_real_part
Pass
test_multiply_complex_number_by_real_number
Pass
test_multiply_numbers_with_real_and_imaginary_part
Pass
test_multiply_purely_imaginary_numbers
Pass
test_multiply_purely_real_numbers
Pass
test_multiply_real_number_by_complex_number
Pass
test_real_part_of_a_number_with_real_and_imaginary_part
Pass
test_real_part_of_a_purely_imaginary_number
Pass
test_real_part_of_a_purely_real_number
Pass
test_subtract_complex_number_from_real_number
Pass
test_subtract_numbers_with_real_and_imaginary_part
Pass
test_subtract_purely_imaginary_numbers
Pass
test_subtract_purely_real_numbers
Pass
test_subtract_real_number_from_complex_number
Pass

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