44
55@author: Omar Belghaouti
66"""
7- from cmpx import print_err
7+ from colorama import Fore , Style
8+ from .error import print_err
89from math import sqrt
910
1011# Complex class for complex number manipulations
@@ -16,9 +17,60 @@ class Complex():
1617 restore : whenever an error occurs on any operation of a complex number, the last instance will be restored (By default it's true)
1718 """
1819 def __init__ (self , re = 0 , im = 0 , restore = True ):
20+ try :
21+ if not ((isinstance (re , int ) or isinstance (re , float )) and (isinstance (im , int ) or isinstance (im , float ))):
22+ raise ValueError ('Arguments re and im arguments are neither integers nor floats' )
23+ if not isinstance (restore , bool ):
24+ raise ValueError ('Argument restore is not boolean' )
25+ self .re = re
26+ self .im = im
27+ self .restore = restore
28+ except ValueError as err :
29+ print_err (err )
30+ """
31+ This method instanciate a Complex object from a complex number
32+ """
33+ @classmethod
34+ def fromComplex (self , comp , restore = True ):
35+ try :
36+ if isinstance (comp , complex ):
37+ self .re = comp .real
38+ self .im = comp .imag
39+ self .restore = restore
40+ else :
41+ raise ValueError ('The number you passed is not a complex' )
42+ except ValueError as err :
43+ print_err (err )
44+ # Getters
45+ @property
46+ def re (self ):
47+ return self .re
48+ @property
49+ def im (self ):
50+ return self .im
51+ @property
52+ def restore (self ):
53+ return self .restore
54+ # Setters
55+ @re .setter
56+ def re (self , re ):
1957 self .re = re
58+ @im .setter
59+ def im (self , im ):
2060 self .im = im
61+ @restore .setter
62+ def restore (self , restore ):
2163 self .restore = restore
64+ # Deleters
65+ @re .deleter
66+ def re (self ):
67+ del self .re
68+ @im .deleter
69+ def im (self ):
70+ del self .im
71+ @restore .deleter
72+ def restore (self ):
73+ del self .restore
2274 # Operator overloading 1 : +
2375 def __add__ (self , other ):
2476 try :
@@ -28,7 +80,7 @@ def __add__(self, other):
2880 other = Complex (other )
2981 return Complex (self .re + other .re , self .im + other .im , self .restore )
3082 except ValueError as err :
31- self . print_err (err )
83+ print_err (err )
3284 # Operator overloading 2 : -
3385 def __sub__ (self , other ):
3486 try :
@@ -38,7 +90,7 @@ def __sub__(self, other):
3890 other = Complex (other )
3991 return Complex (self .re - other .re , self .im - other .im , self .restore )
4092 except ValueError as err :
41- self . print_err (err )
93+ print_err (err )
4294 # Operator overloading 3 : *
4395 def __mul__ (self , other ):
4496 try :
@@ -48,7 +100,7 @@ def __mul__(self, other):
48100 other = Complex (other )
49101 return Complex (self .re * other .re - self .im * other .im , self .re * other .im + self .im * other .re , self .restore )
50102 except ValueError as err :
51- self . print_err (err )
103+ print_err (err )
52104 # Operator overloading 4 : /
53105 def __truediv__ (self , other ):
54106 try :
@@ -65,7 +117,7 @@ def __truediv__(self, other):
65117 return Complex (self .re , self .im , self .restore )
66118 return Complex (num .re / den .re , num .im / den .re , self .restore )
67119 except (ZeroDivisionError , ValueError ) as err :
68- self . print_err (err )
120+ print_err (err )
69121 # Operator overloading 5 : //
70122 def __floordiv__ (self , other ):
71123 try :
@@ -82,7 +134,7 @@ def __floordiv__(self, other):
82134 return Complex (self .re , self .im , self .restore )
83135 return Complex (num .re // den .re , num .im // den .re , self .restore )
84136 except (ZeroDivisionError , ValueError ) as err :
85- self . print_err (err )
137+ print_err (err )
86138 def __gt__ (self , other ):
87139 try :
88140 if other is None :
@@ -91,7 +143,7 @@ def __gt__(self, other):
91143 other = Complex (other )
92144 return self .mod () > other .mod ()
93145 except ValueError as err :
94- self . print_err (err )
146+ print_err (err )
95147 # Operator overloading 7 : >=
96148 def __ge__ (self , other ):
97149 try :
@@ -101,7 +153,7 @@ def __ge__(self, other):
101153 other = Complex (other )
102154 return self .mod () >= other .mod ()
103155 except ValueError as err :
104- self . print_err (err )
156+ print_err (err )
105157 # Operator overloading 8: <
106158 def __lt__ (self , other ):
107159 try :
@@ -111,7 +163,7 @@ def __lt__(self, other):
111163 other = Complex (other )
112164 return not self >= other
113165 except ValueError as err :
114- self . print_err (err )
166+ print_err (err )
115167 # Operator overloading 9: <=
116168 def __le__ (self , other ):
117169 try :
@@ -121,7 +173,7 @@ def __le__(self, other):
121173 other = Complex (other )
122174 return not self > other
123175 except ValueError as err :
124- self . print_err (err )
176+ print_err (err )
125177 # Operator overloading 10: ==
126178 def __eq__ (self , other ):
127179 try :
@@ -131,7 +183,7 @@ def __eq__(self, other):
131183 other = Complex (other )
132184 return (self .re == other .re ) and (self .im == other .im )
133185 except ValueError as err :
134- self . print_err (err )
186+ print_err (err )
135187 # Operator overloading 11: !=
136188 def __ne__ (self , other ):
137189 try :
@@ -141,7 +193,7 @@ def __ne__(self, other):
141193 other = Complex (other )
142194 return not self == other
143195 except ValueError as err :
144- self . print_err (err )
196+ print_err (err )
145197 # Operator overloading 12: +=
146198 def __iadd__ (self , other ):
147199 try :
@@ -153,7 +205,7 @@ def __iadd__(self, other):
153205 self .im += other .im
154206 return Complex (self .re , self .im , self .restore )
155207 except ValueError as err :
156- self . print_err (err )
208+ print_err (err )
157209 # Operator overloading 13: -=
158210 def __isub__ (self , other ):
159211 try :
@@ -165,7 +217,7 @@ def __isub__(self, other):
165217 self .im -= other .im
166218 return Complex (self .re , self .im , self .restore )
167219 except ValueError as err :
168- self . print_err (err )
220+ print_err (err )
169221 # Operator overloading 14: *=
170222 def __imul__ (self , other ):
171223 try :
@@ -177,7 +229,7 @@ def __imul__(self, other):
177229 self .im = self .re * other .im + self .im * other .re
178230 return Complex (self .re , self .im , self .restore )
179231 except ValueError as err :
180- self . print_err (err )
232+ print_err (err )
181233 # Operator overloading 15: /=
182234 def __idiv__ (self , other ):
183235 try :
@@ -196,7 +248,7 @@ def __idiv__(self, other):
196248 self .im = num .im / den .re
197249 return Complex (self .re , self .im , self .restore )
198250 except (ZeroDivisionError , ValueError ) as err :
199- self . print_err (err )
251+ print_err (err )
200252 # Operator overloading 16: //=
201253 def __ifloordiv__ (self , other ):
202254 try :
@@ -215,7 +267,7 @@ def __ifloordiv__(self, other):
215267 self .im = num .im // den .re
216268 return Complex (self .re , self .im , self .restore )
217269 except (ZeroDivisionError , ValueError ) as err :
218- self . print_err (err )
270+ print_err (err )
219271 # Operator overloading 17: - (Unary operator)
220272 def __neg__ (self ):
221273 return Complex (- self .re , - self .im , self .restore )
0 commit comments