mg-pso-gui 0.1.50__py3-none-any.whl → 0.1.52__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mg-pso-gui
3
- Version: 0.1.50
3
+ Version: 0.1.52
4
4
  Summary: GUI for MG-PSO
5
5
  Author: Robert Cordingly
6
6
  Author-email: <rcording@uw.ed>
@@ -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=6Gtv_-fhnqWXqrkfjlU6b5TzeWzOhNXFNbcJRdk6CcE,23265
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=OhKGjlGzwGr4QX8ig5-D_QbcLbK3dOL9fy0md14Y-j8,6025
21
- mgpsogui/gui/VisualizeTab/VisualizeTab.py,sha256=zYu5NDEYkNa76fx_JU8iZ8hMTzdDNcP77cVZwR7Qhkw,3462
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=mVQkJwvw4DtQANPPm1dpbuNZ0xRIp3Fi0PDPI2cSS_A,11877
34
+ mgpsogui/util/GraphGenerator.py,sha256=tnpscm2pEE-ZK7fkfTNT-msKZ7AMzZ6ee7ZUVcmVeJI,14379
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.50.dist-info/METADATA,sha256=E9cbo-RlsUZl4HV6W35ZFdh8qPEV8icLjjMAIi8JNkc,9458
49
- mg_pso_gui-0.1.50.dist-info/WHEEL,sha256=Xo9-1PvkuimrydujYJAjF7pCkriuXBpUPEjma1nZyJ0,92
50
- mg_pso_gui-0.1.50.dist-info/entry_points.txt,sha256=jg82VOFjR1XDGrchs1wJSCqKYE4Ozv12aBcCSp--koA,117
51
- mg_pso_gui-0.1.50.dist-info/top_level.txt,sha256=y7JuS9xJN5YdxUsQ3PSVjN8MzQAnR146bP3ZN3PYWdE,9
52
- mg_pso_gui-0.1.50.dist-info/RECORD,,
48
+ mg_pso_gui-0.1.52.dist-info/METADATA,sha256=me9NxQPxOb8damEnddxBw1CM3bA14nWtuYS_v3sv530,9458
49
+ mg_pso_gui-0.1.52.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
50
+ mg_pso_gui-0.1.52.dist-info/entry_points.txt,sha256=jg82VOFjR1XDGrchs1wJSCqKYE4Ozv12aBcCSp--koA,117
51
+ mg_pso_gui-0.1.52.dist-info/top_level.txt,sha256=y7JuS9xJN5YdxUsQ3PSVjN8MzQAnR146bP3ZN3PYWdE,9
52
+ mg_pso_gui-0.1.52.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.41.3)
2
+ Generator: bdist_wheel (0.43.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
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
@@ -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,80 @@ 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
+ xx2 = None
370
+ if x == "time":
371
+ xx2 = pd.to_datetime(data2["time"], format='%Y-%m-%d', errors='coerce').iloc[2:]
372
+ else:
373
+ xx2 = pd.to_numeric(data2[x], errors="coerce").iloc[2:]
374
+
375
+ yy = pd.to_numeric(data[val], errors="coerce").iloc[2:]
376
+
377
+ #yy_unit = "N/A"
378
+ yy_unit = data[val].iloc[1]
379
+
380
+ yy2 = pd.to_numeric(data2[val2], errors="coerce").iloc[2:]
381
+
382
+ #yy2_unit = "N/A"
383
+ yy2_unit = data2[val2].iloc[1]
384
+
385
+ fig.add_trace(go.Scatter(x=xx, y=yy, name=val))
386
+ fig.add_trace(go.Scatter(x=xx2, y=yy2, name=val2, yaxis='y2'))
387
+
388
+ fig.update_layout(
389
+ title="",
390
+ xaxis_title=x,
391
+ yaxis_title=val,
392
+ font=dict(color='white'),
393
+ paper_bgcolor='rgba(42, 42, 42, 0)',
394
+ plot_bgcolor='rgb(62, 62, 62)',
395
+ xaxis=dict(
396
+ gridcolor='rgb(72, 72, 72)',
397
+ gridwidth=1
398
+ ),
399
+ yaxis=dict(
400
+ title=val + " (" + str(yy_unit) + ")",
401
+ autorange=True,
402
+ gridcolor='rgb(72, 72, 72)',
403
+ gridwidth=0.1
404
+ ),
405
+ yaxis2=dict(
406
+ title=val2 + " (" + str(yy2_unit) + ")",
407
+ overlaying='y',
408
+ side='right'
409
+ )
410
+ )
411
+
412
+ info = option_manager.get_project_data()
413
+ folder = os.path.join(info['path'], info['name'])
414
+
415
+ if not os.path.exists(folder):
416
+ os.makedirs(folder)
417
+
418
+ fig.write_image(os.path.join(folder, "compare_csv.png"), width=1280, height=720)
419
+ fig.write_html(os.path.join(folder, "compare_csv.html"), include_plotlyjs='cdn', auto_open=False)
420
+ with open(os.path.join(folder, "compare_csv.html"), "r") as f:
421
+ html = f.read()
422
+ html = html.replace("<body>", "<body bgcolor='#2a2a2a'>")
423
+ with open(os.path.join(folder, "compare_csv.html"), "w") as f:
424
+ f.write(html)
425
+
426
+ return fig