mg-pso-gui 0.1.49__tar.gz → 0.1.51__tar.gz

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.
Files changed (56) hide show
  1. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/PKG-INFO +1 -1
  2. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mg_pso_gui.egg-info/PKG-INFO +1 -1
  3. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/HomePage.py +5 -0
  4. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/VisualizeTab/SideBar.py +74 -0
  5. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/VisualizeTab/VisualizeTab.py +1 -1
  6. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/util/GraphGenerator.py +77 -5
  7. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/setup.py +1 -1
  8. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mg_pso_gui.egg-info/SOURCES.txt +0 -0
  9. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mg_pso_gui.egg-info/dependency_links.txt +0 -0
  10. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mg_pso_gui.egg-info/entry_points.txt +0 -0
  11. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mg_pso_gui.egg-info/requires.txt +0 -0
  12. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mg_pso_gui.egg-info/top_level.txt +0 -0
  13. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/__init__.py +0 -0
  14. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/OptionManager.py +0 -0
  15. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/PlatformTab/PlatformTab.py +0 -0
  16. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/PlatformTab/__init__.py +0 -0
  17. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/RunTab/RunTab.py +0 -0
  18. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/RunTab/__init__.py +0 -0
  19. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/SetupTab/BoundsEditorWindow.py +0 -0
  20. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/SetupTab/BoundsList.py +0 -0
  21. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/SetupTab/CalibrationParametersView.py +0 -0
  22. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/SetupTab/FunctionsList.py +0 -0
  23. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/SetupTab/ListParametersView.py +0 -0
  24. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/SetupTab/SetupTab.py +0 -0
  25. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/SetupTab/StaticParameterView.py +0 -0
  26. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/SetupTab/StepView.py +0 -0
  27. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/SetupTab/__init__.py +0 -0
  28. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/VisualizeTab/__init__.py +0 -0
  29. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/__init__.py +0 -0
  30. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/images/IGOW 4 Logo.png +0 -0
  31. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/images/collapse.png +0 -0
  32. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/images/down.png +0 -0
  33. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/images/expand.png +0 -0
  34. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/images/play.png +0 -0
  35. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/images/refresh.png +0 -0
  36. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/images/refresh_hd.png +0 -0
  37. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/images/stop.png +0 -0
  38. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/images/test.png +0 -0
  39. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/images/trash.png +0 -0
  40. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/gui/images/up.png +0 -0
  41. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/mgpsogui.py +0 -0
  42. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/start.yaml +0 -0
  43. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/util/CTkToolTip/__init__.py +0 -0
  44. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/util/CTkToolTip/ctk_tooltip.py +0 -0
  45. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/util/PSORunner.py +0 -0
  46. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/util/__init__.py +0 -0
  47. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/util/recosu/__init__.py +0 -0
  48. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/util/recosu/pso/__init__.py +0 -0
  49. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/util/recosu/pso/csip_access.py +0 -0
  50. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/util/recosu/pso/pso.py +0 -0
  51. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/util/recosu/utils/__init__.py +0 -0
  52. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/util/recosu/utils/plot/__init__.py +0 -0
  53. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/util/recosu/utils/plot/cost_steps.py +0 -0
  54. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/util/recosu/utils/trace_writer.py +0 -0
  55. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/mgpsogui/util/recosu/utils/utils.py +0 -0
  56. {mg-pso-gui-0.1.49 → mg-pso-gui-0.1.51}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mg-pso-gui
3
- Version: 0.1.49
3
+ Version: 0.1.51
4
4
  Summary: GUI for MG-PSO
5
5
  Author: Robert Cordingly
6
6
  Author-email: <rcording@uw.ed>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mg-pso-gui
3
- Version: 0.1.49
3
+ Version: 0.1.51
4
4
  Summary: GUI for MG-PSO
5
5
  Author: Robert Cordingly
6
6
  Author-email: <rcording@uw.ed>
@@ -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
@@ -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
 
@@ -292,15 +295,15 @@ def custom_csv(homepage, option_manager):
292
295
  else:
293
296
  xx = pd.to_numeric(data[x], errors="coerce").iloc[2:]
294
297
 
295
- yy = pd.to_numeric(data[val], errors="coerce").iloc[2]
298
+ yy = pd.to_numeric(data[val], errors="coerce").iloc[2:]
296
299
 
297
- yy_unit = "N/A"
298
- #yy_unit = data[val].iloc[1]
300
+ #yy_unit = "N/A"
301
+ yy_unit = data[val].iloc[1]
299
302
 
300
303
  yy2 = pd.to_numeric(data[val2], errors="coerce").iloc[2:]
301
304
 
302
- yy2_unit = "N/A"
303
- #yy2_unit = data[val2].iloc[1]
305
+ #yy2_unit = "N/A"
306
+ yy2_unit = data[val2].iloc[1]
304
307
 
305
308
  fig.add_trace(go.Scatter(x=xx, y=yy, name=val))
306
309
  fig.add_trace(go.Scatter(x=xx, y=yy2, name=val2, yaxis='y2'))
@@ -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
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
  import codecs
3
3
  import os
4
4
 
5
- VERSION = '0.1.49'
5
+ VERSION = '0.1.51'
6
6
  DESCRIPTION = 'GUI for MG-PSO'
7
7
  LONG_DESCRIPTION = open('../README.md').read()
8
8
 
File without changes