Skip to content

Commit efdfce1

Browse files
committed
Change Complex.py to number.py+Updating version to 0.7.7
Things are getting better, hopefully
1 parent 95a8125 commit efdfce1

5 files changed

Lines changed: 81 additions & 97 deletions

File tree

cmpx/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
from .Complex import Complex
1+
from .number import Complex
22
from .error import print_err
33

44
__title__ = 'PythonComplex'
55
__author__ = 'Omar Belghaouti'
66
__maintainer__ = 'Omar Belghaouti'
77
__email__ = 'bel_omar18@yahoo.com'
8-
__version__ = '0.7.5'
8+
__version__ = '0.7.7'
99
__license__ = 'MIT'
1010
__all__ = [
1111
'Complex'

cmpx/equations/solve.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
# Function to solve a second degree (or linear) equation with passing arguments seperatly
77
def solve(a, b, c=0):
88
try:
9-
if a and b == 0:
9+
if a or a and b == 0 :
1010
raise ValueError('At least give a number to the first two coefficents')
1111
if c != 0:
1212
delta = b**2 - 4 * a * c

cmpx/Complex.py renamed to cmpx/number.py

Lines changed: 69 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
55
@author: Omar Belghaouti
66
"""
7-
from cmpx import print_err
7+
from colorama import Fore, Style
8+
from .error import print_err
89
from 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)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
setup_args = dict(
77
name='cmpx',
8-
version='0.7.5',
8+
version='0.7.7',
99
description='A package for different operations on complex numbers',
1010
long_description_content_type='text/markdown',
1111
long_description=README,

tests/main.py

Lines changed: 8 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,10 @@
1-
# -*- coding: utf-8 -*-
2-
"""
3-
Created on Tue Sep 10 17:37:40 2019
4-
5-
@author: Omar Belghaouti
6-
"""
7-
from cmpx.Complex import Complex
1+
from cmpx import Complex
82

93
def main():
10-
# Instanciation 1
11-
number = Complex() # --> Real = 0, Imaginary = 0
12-
print(number)
13-
# Instanctiation 2
14-
number = Complex(42) # --> Real = 42, Imaginary = 0
15-
print(number)
16-
# Instanciation 3
17-
number = Complex(12, -3.2) # --> Real = 12, Imaginary = -3.2
18-
print(number)
19-
# Instanciation 4
20-
number = Complex(im=13.2, re=5) # --> Real = 5, Imaginary = 13.2
21-
print(number)
22-
23-
# Basic operations
24-
num1 = Complex(re=3, im=-2.5)
25-
num2 = Complex(re=4.2, im=13.2)
26-
# Summation
27-
print('({}) + ({}) = {}'.format(num1, num2, num1 + num2))
28-
# Substraction
29-
print('({}) - ({}) = {}'.format(num1, num2, num1 - num2))
30-
# Multiplication
31-
print('({}) * ({}) = {}'.format(num1, num2, num1 * num2))
32-
# Division
33-
print('({}) / ({}) = {}'.format(num1, num2, num1 / num2))
34-
# Floor division
35-
print('({}) // ({}) = {}'.format(num1, num2, num1 // num2))
36-
## Affecting the result directly on the number
37-
# Summation
38-
print('({}) += ({})'.format(num1, 2), end=' --> ')
39-
num1 += 2
40-
print(num1)
41-
# Substraction
42-
print('({}) -= ({})'.format(num1, num2), end=' --> ')
43-
num1 -= num2
44-
print(num1)
45-
# Multiplication
46-
print('({}) *= ({})'.format(num1, 2), end=' --> ')
47-
num1 *= 2
48-
print(num1)
49-
# Division
50-
print('({}) /= ({})'.format(num1, num2), end=' --> ')
51-
num1 /= num2
52-
print(num1)
53-
# Floor division
54-
print('({}) //= ({})'.format(num1, 2), end=' --> ')
55-
num1 /= 2
56-
print(num1)
57-
# Congugated of a complex number
58-
print('con({}) = {}'.format(num2, num2.con()))
59-
# Module of a complex number
60-
print('mod({}) = {}'.format(num2, num2.mod()))
61-
62-
# Basic comparisons
63-
num1 = Complex(im=3.1, re=-5)
64-
num2 = Complex(im=-1.5, re=0.6)
65-
# Greater than
66-
if(num1 > num2): print('({}) > ({})'.format(num1, num2))
67-
# Greater or equal
68-
if(num1 >= num2): print('({}) >= ({})'.format(num1, num2))
69-
# Less than
70-
if(num1 < num2): print('({}) < ({})'.format(num1, num2))
71-
# Less or equal
72-
if(num1 <= num2): print('({}) <= ({})'.format(num1, num2))
73-
# Equal
74-
if(num1 == num2): print('({}) == ({})'.format(num1, num2))
75-
# Not equal
76-
if(num1 != num2): print('({}) != ({})'.format(num1, num2))
77-
78-
if __name__ == '__main__': main()
4+
a = 4 + 3 - 5j
5+
print(a.real)
6+
print(a.imag)
7+
cmplx = Complex(a, 1)
8+
print(cmplx)
9+
10+
if __name__ == '__main__': main()

0 commit comments

Comments
 (0)