-
Notifications
You must be signed in to change notification settings - Fork 0
/
nodes.py
87 lines (65 loc) · 2.23 KB
/
nodes.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
from dataclasses import dataclass
@dataclass
class NumberNode:
value: dict
# def __repr__(self):
# if self.value['variables'] is None:
# return f"{self.value['constant']}"
# elif self.value['constant'] == 0:
# result = ""
# for i in self.value['variables']:
# print(i['coef'])
# result += str(i['coef']) if i['coef'] != 0 else ''
# for x in i["name"]:
# result += f'{x}^' + str(i['variable'][x]) if i['variable'][x] != 1 else x
# return result
# else:
# result = str(self.value['constant']) + ' '
# for i in self.value['variables']:
# result += str(i['coef']) if i['coef'] != 1 else ''
# for x in i["name"]:
# result += f'{x}^' + str(i['variable'][x]) if i['variable'][x] != 1 else x
# return result
def __repr__(self):
if self.value['variables'] is None:
return f"{self.value['constant']}"
result = str(self.value['constant']) + ' + ' if self.value['constant'] != 0.0 else ''
for index, variable in enumerate(self.value['variables']):
result += ' + ' + str(variable['coef']) if (variable['coef'] != 1) else ''
for x in variable["name"]:
result += f'{x}^' + str(variable['variable'][x]) + '+' if variable['variable'][x] != 1 else x + '+' if index < len(self.value['variables']) - 1 else x
return result
@dataclass
class AddNode:
node_a: any
node_b: any
def __repr__(self):
return f"({self.node_a}+{self.node_b})"
@dataclass
class SubtractNode:
node_a: any
node_b: any
def __repr__(self):
return f"({self.node_a}-{self.node_b})"
@dataclass
class MultiplyNode:
node_a: any
node_b: any
def __repr__(self):
return f"({self.node_a}*{self.node_b})"
@dataclass
class DivideNode:
node_a: any
node_b: any
def __repr__(self):
return f"({self.node_a}/{self.node_b})"
@dataclass
class PlusNode:
node: any
def __repr__(self):
return f"(+{self.node})"
@dataclass
class MinusNode:
node: any
def __repr__(self):
return f"(-{self.node})"