mg-pso-gui 0.1.50__py3-none-any.whl → 0.1.51__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mg_pso_gui-0.1.50.dist-info → mg_pso_gui-0.1.51.dist-info}/METADATA +1 -1
- {mg_pso_gui-0.1.50.dist-info → mg_pso_gui-0.1.51.dist-info}/RECORD +9 -9
- {mg_pso_gui-0.1.50.dist-info → mg_pso_gui-0.1.51.dist-info}/WHEEL +1 -1
- mgpsogui/gui/HomePage.py +5 -0
- mgpsogui/gui/VisualizeTab/SideBar.py +74 -0
- mgpsogui/gui/VisualizeTab/VisualizeTab.py +1 -1
- mgpsogui/util/GraphGenerator.py +72 -0
- {mg_pso_gui-0.1.50.dist-info → mg_pso_gui-0.1.51.dist-info}/entry_points.txt +0 -0
- {mg_pso_gui-0.1.50.dist-info → mg_pso_gui-0.1.51.dist-info}/top_level.txt +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
mgpsogui/__init__.py,sha256=q7AfBjeJABnFtbsZnsObpUwaXKPDVYtz46G6MKXLF74,42
|
|
2
2
|
mgpsogui/mgpsogui.py,sha256=NIZmyNcbwC8EgSwf1ubdMUSJscrIEgoD4jLYziqHQ-k,148
|
|
3
3
|
mgpsogui/start.yaml,sha256=ZjCVLb-MLqAxrGRm9kA7_SDpa-45EuKIELNQ2QqCAiU,4713
|
|
4
|
-
mgpsogui/gui/HomePage.py,sha256=
|
|
4
|
+
mgpsogui/gui/HomePage.py,sha256=JF4bSw84lfUgjGT3jLY2WcJHix4NccL6vIgEqNENxkY,23403
|
|
5
5
|
mgpsogui/gui/OptionManager.py,sha256=bFN2jWJbx1Din3waOFLmbWGt0BXD_KthGJ8Mgue_FEE,11712
|
|
6
6
|
mgpsogui/gui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
7
|
mgpsogui/gui/PlatformTab/PlatformTab.py,sha256=KyIoHlMKD9nfQqHeGJwRDA4RCoe4UykjB2l6xMTKK_M,10486
|
|
@@ -17,8 +17,8 @@ mgpsogui/gui/SetupTab/SetupTab.py,sha256=Doy_6xLq1BjhLTFHRQm7CAbpQzUnNJW4KkBcdfr
|
|
|
17
17
|
mgpsogui/gui/SetupTab/StaticParameterView.py,sha256=iEG-UpBBlAJabZo3MG768oLqOROjUPc23tKOSd47IUc,2739
|
|
18
18
|
mgpsogui/gui/SetupTab/StepView.py,sha256=oG5Q-3xpTRP1f_PbNvohKctrbpD63zLAJzHD00bN44k,5531
|
|
19
19
|
mgpsogui/gui/SetupTab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
-
mgpsogui/gui/VisualizeTab/SideBar.py,sha256=
|
|
21
|
-
mgpsogui/gui/VisualizeTab/VisualizeTab.py,sha256=
|
|
20
|
+
mgpsogui/gui/VisualizeTab/SideBar.py,sha256=XV5VnX5UT7OniLSIRFNzxj87zB1i2Rxfnvx0g36SvQc,10713
|
|
21
|
+
mgpsogui/gui/VisualizeTab/VisualizeTab.py,sha256=y3ZjLR78yXjHTcHMpB637ipBKxb1CCEM3qzG8OUJvpQ,3477
|
|
22
22
|
mgpsogui/gui/VisualizeTab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
23
|
mgpsogui/gui/images/IGOW 4 Logo.png,sha256=JixNXz5gOEj898VF-_PHthAlGU-6W-y9ucb4EVNPtjs,433752
|
|
24
24
|
mgpsogui/gui/images/collapse.png,sha256=yicb16LaY7Nl5q9V8HHlht-Fbg5xU-l4_LJ_Arfmu1c,2989
|
|
@@ -31,7 +31,7 @@ mgpsogui/gui/images/stop.png,sha256=JPuxXQerCGpLikcp7cAj3iLCOjULMYYZ2sZe0lArh68,
|
|
|
31
31
|
mgpsogui/gui/images/test.png,sha256=MUnVpRK-isxhEHzx4Q6Yh0M6FRZD1qvgCHH2XmiSBbk,3642
|
|
32
32
|
mgpsogui/gui/images/trash.png,sha256=j8cf0kWbJd-4Jp20lUVV1o1NSeQ4v1Ej4gfcIA3DVRQ,2958
|
|
33
33
|
mgpsogui/gui/images/up.png,sha256=AQvFWCUqSQNaQ1E6LKZ9zNfSvW6t4mgy8uswdg9T2Hg,2457
|
|
34
|
-
mgpsogui/util/GraphGenerator.py,sha256=
|
|
34
|
+
mgpsogui/util/GraphGenerator.py,sha256=4GiHeaoCW6-8GB00x80trZKfSMGYJvadtyzjWi1ByJU,14106
|
|
35
35
|
mgpsogui/util/PSORunner.py,sha256=wfkrZLysgSS_5BrdFEm8U-0S7DHYpxmHPau_Ec5W8ak,4510
|
|
36
36
|
mgpsogui/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
37
|
mgpsogui/util/CTkToolTip/__init__.py,sha256=G1jxV55hGtGgwyC1sR-uUUdasDdh0XZgcI-aILgGYA0,225
|
|
@@ -45,8 +45,8 @@ mgpsogui/util/recosu/utils/trace_writer.py,sha256=V9BJlOjCbNYGoXGEk3CF5wjifBxvar
|
|
|
45
45
|
mgpsogui/util/recosu/utils/utils.py,sha256=QB8vftq3142ekG0ORjz0ZBHU5YknXbR0oTsrxrPAsF0,3951
|
|
46
46
|
mgpsogui/util/recosu/utils/plot/__init__.py,sha256=h1KjM7_tNDv351pcwt8A6Ibb1jhwWyx5Gbu-zj-sI3Q,71
|
|
47
47
|
mgpsogui/util/recosu/utils/plot/cost_steps.py,sha256=1Ce11AJyweWkmvjXPxEygzS-h8yVLmQEDLS53yjPLqQ,3779
|
|
48
|
-
mg_pso_gui-0.1.
|
|
49
|
-
mg_pso_gui-0.1.
|
|
50
|
-
mg_pso_gui-0.1.
|
|
51
|
-
mg_pso_gui-0.1.
|
|
52
|
-
mg_pso_gui-0.1.
|
|
48
|
+
mg_pso_gui-0.1.51.dist-info/METADATA,sha256=Y9xmLBynARzndB92H-WhDxtZm3uGFmj0f3XzKhFwYKo,9458
|
|
49
|
+
mg_pso_gui-0.1.51.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
50
|
+
mg_pso_gui-0.1.51.dist-info/entry_points.txt,sha256=jg82VOFjR1XDGrchs1wJSCqKYE4Ozv12aBcCSp--koA,117
|
|
51
|
+
mg_pso_gui-0.1.51.dist-info/top_level.txt,sha256=y7JuS9xJN5YdxUsQ3PSVjN8MzQAnR146bP3ZN3PYWdE,9
|
|
52
|
+
mg_pso_gui-0.1.51.dist-info/RECORD,,
|
mgpsogui/gui/HomePage.py
CHANGED
|
@@ -69,6 +69,11 @@ class App(customtkinter.CTk):
|
|
|
69
69
|
self.selected_csv.set("No files found...")
|
|
70
70
|
self.open_file = "None"
|
|
71
71
|
self.csv_data = None
|
|
72
|
+
|
|
73
|
+
self.selected_csv2 = tk.StringVar()
|
|
74
|
+
self.selected_csv2.set("No files found...")
|
|
75
|
+
self.open_file2 = "None"
|
|
76
|
+
self.csv_data2 = None
|
|
72
77
|
|
|
73
78
|
self.selected_x = tk.StringVar()
|
|
74
79
|
self.selected_x.set("time")
|
|
@@ -116,5 +116,79 @@ class SideBar(CTkScrollableFrame):
|
|
|
116
116
|
self.home_page.csv_y2_selector = CTkOptionMenu(self.containerFrame, values=columns, variable=self.home_page.selected_y2, command=self.home_page.update_graph)
|
|
117
117
|
self.home_page.csv_y2_selector.grid(row=7, column=0, padx=(20, 20), pady=(5, 5), sticky="ew")
|
|
118
118
|
|
|
119
|
+
if (self.home_page.csv_y2_selector.get() not in columns):
|
|
120
|
+
self.home_page.csv_y2_selector.set(columns[3])
|
|
121
|
+
|
|
122
|
+
elif (selected_graph == "Compare CSV"):
|
|
123
|
+
info = self.option_manager.get_project_data()
|
|
124
|
+
folder = os.path.join(info['path'], info['name'])
|
|
125
|
+
if not os.path.exists(folder):
|
|
126
|
+
os.makedirs(folder)
|
|
127
|
+
|
|
128
|
+
# Get all CSV files in the folder and add their paths to a list
|
|
129
|
+
path_map = {}
|
|
130
|
+
name_list = []
|
|
131
|
+
for root, dirs, files in os.walk(folder):
|
|
132
|
+
for file in files:
|
|
133
|
+
if file.endswith(".csv"):
|
|
134
|
+
name = file.replace(".csv", "")
|
|
135
|
+
name_list.append(name)
|
|
136
|
+
path_map[name] = os.path.join(root, file)
|
|
137
|
+
|
|
138
|
+
if (len(name_list) == 0):
|
|
139
|
+
name_list.append("No files found...")
|
|
140
|
+
else:
|
|
141
|
+
if (self.home_page.selected_csv.get() not in name_list):
|
|
142
|
+
self.home_page.selected_csv.set(name_list[0])
|
|
143
|
+
if (self.home_page.selected_csv2.get() not in name_list):
|
|
144
|
+
self.home_page.selected_csv2.set(name_list[0])
|
|
145
|
+
|
|
146
|
+
file_label = CTkLabel(self.containerFrame, text="CSV Files:")
|
|
147
|
+
file_label.grid(row=0, column=0, padx=(20, 20), pady=(20, 5), sticky="w")
|
|
148
|
+
|
|
149
|
+
self.home_page.csv_file_selector = CTkOptionMenu(self.containerFrame, values=name_list, variable=self.home_page.selected_csv, command=self.home_page.update_graph)
|
|
150
|
+
self.home_page.csv_file_selector.grid(row=1, column=0, padx=(20, 20), pady=(5, 5), sticky="ew")
|
|
151
|
+
|
|
152
|
+
self.home_page.csv_file_selector2 = CTkOptionMenu(self.containerFrame, values=name_list, variable=self.home_page.selected_csv2, command=self.home_page.update_graph)
|
|
153
|
+
self.home_page.csv_file_selector2.grid(row=2, column=0, padx=(20, 20), pady=(5, 5), sticky="ew")
|
|
154
|
+
|
|
155
|
+
selected_file = self.home_page.selected_csv.get()
|
|
156
|
+
if (selected_file in path_map and selected_file != self.home_page.open_file):
|
|
157
|
+
self.home_page.csv_data = pd.read_csv(path_map[selected_file], skiprows=3)
|
|
158
|
+
self.home_page.open_file = selected_file
|
|
159
|
+
|
|
160
|
+
selected_file2 = self.home_page.selected_csv2.get()
|
|
161
|
+
if (selected_file2 in path_map and selected_file2 != self.home_page.open_file2):
|
|
162
|
+
self.home_page.csv_data2 = pd.read_csv(path_map[selected_file2], skiprows=3)
|
|
163
|
+
self.home_page.open_file2 = selected_file2
|
|
164
|
+
|
|
165
|
+
if (self.home_page.csv_data is not None and self.home_page.csv_data2 is not None):
|
|
166
|
+
# Get all column names of CSV
|
|
167
|
+
columns = self.home_page.csv_data.columns
|
|
168
|
+
|
|
169
|
+
x_axis_label = CTkLabel(self.containerFrame, text="X Axis:")
|
|
170
|
+
x_axis_label.grid(row=3, column=0, padx=(20, 20), pady=(40, 5), sticky="w")
|
|
171
|
+
|
|
172
|
+
self.home_page.csv_x_selector = CTkOptionMenu(self.containerFrame, values=columns, variable=self.home_page.selected_x, command=self.home_page.update_graph)
|
|
173
|
+
self.home_page.csv_x_selector.grid(row=4, column=0, padx=(20, 20), pady=(5, 5), sticky="ew")
|
|
174
|
+
|
|
175
|
+
if (self.home_page.csv_x_selector.get() not in columns):
|
|
176
|
+
self.home_page.csv_x_selector.set(columns[1])
|
|
177
|
+
|
|
178
|
+
y1_axis_label = CTkLabel(self.containerFrame, text="Y Axis:")
|
|
179
|
+
y1_axis_label.grid(row=5, column=0, padx=(20, 20), pady=(20, 5), sticky="w")
|
|
180
|
+
|
|
181
|
+
self.home_page.csv_y1_selector = CTkOptionMenu(self.containerFrame, values=columns, variable=self.home_page.selected_y1, command=self.home_page.update_graph)
|
|
182
|
+
self.home_page.csv_y1_selector.grid(row=6, column=0, padx=(20, 20), pady=(5, 5), sticky="ew")
|
|
183
|
+
|
|
184
|
+
if (self.home_page.csv_y1_selector.get() not in columns):
|
|
185
|
+
self.home_page.csv_y1_selector.set(columns[2])
|
|
186
|
+
|
|
187
|
+
y2_axis_label = CTkLabel(self.containerFrame, text="Secondary Y Axis:")
|
|
188
|
+
y2_axis_label.grid(row=7, column=0, padx=(20, 20), pady=(20, 5), sticky="w")
|
|
189
|
+
|
|
190
|
+
self.home_page.csv_y2_selector = CTkOptionMenu(self.containerFrame, values=columns, variable=self.home_page.selected_y2, command=self.home_page.update_graph)
|
|
191
|
+
self.home_page.csv_y2_selector.grid(row=8, column=0, padx=(20, 20), pady=(5, 5), sticky="ew")
|
|
192
|
+
|
|
119
193
|
if (self.home_page.csv_y2_selector.get() not in columns):
|
|
120
194
|
self.home_page.csv_y2_selector.set(columns[3])
|
|
@@ -61,7 +61,7 @@ def create_tab(self, tab):
|
|
|
61
61
|
self.graph_container.grid_columnconfigure(0, weight=1)
|
|
62
62
|
self.graph_container.grid_rowconfigure(0, weight=1)
|
|
63
63
|
|
|
64
|
-
self.graph_selector = customtkinter.CTkOptionMenu(self.graph_sidebar, values=["Best Cost Stacked", "Best Cost by Round", "Calibrated Parameters", "Iteration Table", "Custom CSV"], variable=self.graph_selector_value, command=self.update_graph)
|
|
64
|
+
self.graph_selector = customtkinter.CTkOptionMenu(self.graph_sidebar, values=["Best Cost Stacked", "Best Cost by Round", "Calibrated Parameters", "Iteration Table", "Custom CSV", "Compare CSV"], variable=self.graph_selector_value, command=self.update_graph)
|
|
65
65
|
self.graph_selector.grid(row=0, column=0, padx=(20, 20), pady=(20, 20), sticky="nsew")
|
|
66
66
|
|
|
67
67
|
# Create SideBar
|
mgpsogui/util/GraphGenerator.py
CHANGED
|
@@ -29,6 +29,9 @@ def generate_graphs(HomePage):
|
|
|
29
29
|
elif (selected_graph == "Custom CSV"):
|
|
30
30
|
HomePage.selected_graph_name = "custom_csv"
|
|
31
31
|
custom_csv(HomePage, HomePage.option_manager)
|
|
32
|
+
elif (selected_graph == "Compare CSV"):
|
|
33
|
+
HomePage.selected_graph_name = "compare_csv"
|
|
34
|
+
compare_csv(HomePage, HomePage.option_manager)
|
|
32
35
|
|
|
33
36
|
image_path = os.path.join(folder, HomePage.selected_graph_name + ".png")
|
|
34
37
|
|
|
@@ -344,3 +347,72 @@ def custom_csv(homepage, option_manager):
|
|
|
344
347
|
f.write(html)
|
|
345
348
|
|
|
346
349
|
return fig
|
|
350
|
+
|
|
351
|
+
def compare_csv(homepage, option_manager):
|
|
352
|
+
fig = go.Figure()
|
|
353
|
+
|
|
354
|
+
data = homepage.csv_data
|
|
355
|
+
data2 = homepage.csv_data2
|
|
356
|
+
|
|
357
|
+
x = homepage.csv_x_selector.get()
|
|
358
|
+
val = homepage.csv_y1_selector.get()
|
|
359
|
+
val2 = homepage.csv_y2_selector.get()
|
|
360
|
+
|
|
361
|
+
xx = None
|
|
362
|
+
if x == "time":
|
|
363
|
+
xx = pd.to_datetime(data["time"], format='%Y-%m-%d', errors='coerce').iloc[2:]
|
|
364
|
+
else:
|
|
365
|
+
xx = pd.to_numeric(data[x], errors="coerce").iloc[2:]
|
|
366
|
+
|
|
367
|
+
yy = pd.to_numeric(data[val], errors="coerce").iloc[2:]
|
|
368
|
+
|
|
369
|
+
#yy_unit = "N/A"
|
|
370
|
+
yy_unit = data[val].iloc[1]
|
|
371
|
+
|
|
372
|
+
yy2 = pd.to_numeric(data2[val2], errors="coerce").iloc[2:]
|
|
373
|
+
|
|
374
|
+
#yy2_unit = "N/A"
|
|
375
|
+
yy2_unit = data2[val2].iloc[1]
|
|
376
|
+
|
|
377
|
+
fig.add_trace(go.Scatter(x=xx, y=yy, name=val))
|
|
378
|
+
fig.add_trace(go.Scatter(x=xx, y=yy2, name=val2, yaxis='y2'))
|
|
379
|
+
|
|
380
|
+
fig.update_layout(
|
|
381
|
+
title="",
|
|
382
|
+
xaxis_title=x,
|
|
383
|
+
yaxis_title=val,
|
|
384
|
+
font=dict(color='white'),
|
|
385
|
+
paper_bgcolor='rgba(42, 42, 42, 0)',
|
|
386
|
+
plot_bgcolor='rgb(62, 62, 62)',
|
|
387
|
+
xaxis=dict(
|
|
388
|
+
gridcolor='rgb(72, 72, 72)',
|
|
389
|
+
gridwidth=1
|
|
390
|
+
),
|
|
391
|
+
yaxis=dict(
|
|
392
|
+
title=val + " (" + str(yy_unit) + ")",
|
|
393
|
+
autorange=True,
|
|
394
|
+
gridcolor='rgb(72, 72, 72)',
|
|
395
|
+
gridwidth=0.1
|
|
396
|
+
),
|
|
397
|
+
yaxis2=dict(
|
|
398
|
+
title=val2 + " (" + str(yy2_unit) + ")",
|
|
399
|
+
overlaying='y',
|
|
400
|
+
side='right'
|
|
401
|
+
)
|
|
402
|
+
)
|
|
403
|
+
|
|
404
|
+
info = option_manager.get_project_data()
|
|
405
|
+
folder = os.path.join(info['path'], info['name'])
|
|
406
|
+
|
|
407
|
+
if not os.path.exists(folder):
|
|
408
|
+
os.makedirs(folder)
|
|
409
|
+
|
|
410
|
+
fig.write_image(os.path.join(folder, "compare_csv.png"), width=1280, height=720)
|
|
411
|
+
fig.write_html(os.path.join(folder, "compare_csv.html"), include_plotlyjs='cdn', auto_open=False)
|
|
412
|
+
with open(os.path.join(folder, "compare_csv.html"), "r") as f:
|
|
413
|
+
html = f.read()
|
|
414
|
+
html = html.replace("<body>", "<body bgcolor='#2a2a2a'>")
|
|
415
|
+
with open(os.path.join(folder, "compare_csv.html"), "w") as f:
|
|
416
|
+
f.write(html)
|
|
417
|
+
|
|
418
|
+
return fig
|
|
File without changes
|
|
File without changes
|