mg-pso-gui 0.1.191__py3-none-any.whl → 0.1.193__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.191
3
+ Version: 0.1.193
4
4
  Summary: GUI for MG-PSO
5
5
  Author: Robert Cordingly
6
6
  Author-email: <rcording@uw.ed>
@@ -2,7 +2,7 @@ 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
4
  mgpsogui/gui/HomePage.py,sha256=S4vm9gtwoWjfbNmFSX5e-_l18ti0YIFulrH9a3v953s,22845
5
- mgpsogui/gui/OptionManager.py,sha256=FVj3HIDeoPgr8rn1XZs1-erYxwP572kOHHjEGNSda6M,13391
5
+ mgpsogui/gui/OptionManager.py,sha256=CmwUV6FdgBf1DN8EhCVM1IRptCGVlArZFjpgWvHUwpE,14807
6
6
  mgpsogui/gui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  mgpsogui/gui/PlatformTab/PlatformTab.py,sha256=q8x_tvVgSoyGINuQbivXRThF3gaSSfg8X_dsLSPv4F0,10492
8
8
  mgpsogui/gui/PlatformTab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -12,13 +12,14 @@ mgpsogui/gui/SetupTab/BoundsEditorWindow.py,sha256=_6_xEl46PY9MmNvpmoMNdNDbVav6O
12
12
  mgpsogui/gui/SetupTab/BoundsList.py,sha256=L77UEaUJNiUE-ZsYIl44tWRb1zBfxaEQ-bAG1V5_IH0,12268
13
13
  mgpsogui/gui/SetupTab/CalibrationParametersView.py,sha256=ppVBHG3nphku9-P6Z8az-HTpgk8vHxnj-A5m80BZTgA,2784
14
14
  mgpsogui/gui/SetupTab/FunctionsList.py,sha256=tUqW43VWpxFpdo9UHaPvFQ0CtCo9mFI3mri52ikntrE,4092
15
+ mgpsogui/gui/SetupTab/ListEditor.py,sha256=62QQntINnSGxHmT5yX9uJ2k9mI4nDOPxAkHEHTdSrsU,3215
15
16
  mgpsogui/gui/SetupTab/ListParametersView.py,sha256=wYcDcaooYkw-y7XW6dJUwhTWxLuUUOK5tGUFVHBf3ck,7352
16
17
  mgpsogui/gui/SetupTab/OptimalParameterView.py,sha256=VKn-4BlVyqspFIOkbWsM0q9pYVsmqnSND0xP2hDKb60,1785
17
18
  mgpsogui/gui/SetupTab/SetupTab.py,sha256=_cehQwQhDbX92da_AwqYQ2mQo7sFDGkN1IsYQmctK5o,2776
18
19
  mgpsogui/gui/SetupTab/StaticParameterView.py,sha256=iEG-UpBBlAJabZo3MG768oLqOROjUPc23tKOSd47IUc,2739
19
- mgpsogui/gui/SetupTab/StepView.py,sha256=DqLoH1qKdlE2uQxX0DMYozl9tSx0SF69ULpHwgQP0es,6635
20
+ mgpsogui/gui/SetupTab/StepView.py,sha256=0WwamCZRSpZlC7EThXr6-IMCQt8ejfyQtsRppAm2v18,9067
20
21
  mgpsogui/gui/SetupTab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- mgpsogui/gui/VisualizeTab/MatrixEditor.py,sha256=WqF7gx76EQZz92n3ajYtOAKLFAUwCbWwCEbEmsNih-Y,3314
22
+ mgpsogui/gui/VisualizeTab/MatrixEditor.py,sha256=JPQmfljdddIwHtTKpFqUdk7hRzVdX-IKl4neOk3DsjM,3132
22
23
  mgpsogui/gui/VisualizeTab/SideBar.py,sha256=o-6vdHNZMNsdG7zC-B14hLZXbqNKhT_9q_kYg2ZSUbk,21947
23
24
  mgpsogui/gui/VisualizeTab/VisualizeTab.py,sha256=_SiRDUvYJ7VUmMZ_VzylWP2tFygbLzWeUCGW3TU3yZM,3466
24
25
  mgpsogui/gui/VisualizeTab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -59,8 +60,8 @@ mgpsogui/util/recosu/utils/trace_writer.py,sha256=V9BJlOjCbNYGoXGEk3CF5wjifBxvar
59
60
  mgpsogui/util/recosu/utils/utils.py,sha256=QB8vftq3142ekG0ORjz0ZBHU5YknXbR0oTsrxrPAsF0,3951
60
61
  mgpsogui/util/recosu/utils/plot/__init__.py,sha256=h1KjM7_tNDv351pcwt8A6Ibb1jhwWyx5Gbu-zj-sI3Q,71
61
62
  mgpsogui/util/recosu/utils/plot/cost_steps.py,sha256=1Ce11AJyweWkmvjXPxEygzS-h8yVLmQEDLS53yjPLqQ,3779
62
- mg_pso_gui-0.1.191.dist-info/METADATA,sha256=EzaUDJ79fsvH0Inc3HggE16kzDDanIkz0wgp7FyAvWY,9456
63
- mg_pso_gui-0.1.191.dist-info/WHEEL,sha256=Z4pYXqR_rTB7OWNDYFOm1qRk0RX6GFP2o8LgvP453Hk,91
64
- mg_pso_gui-0.1.191.dist-info/entry_points.txt,sha256=jg82VOFjR1XDGrchs1wJSCqKYE4Ozv12aBcCSp--koA,117
65
- mg_pso_gui-0.1.191.dist-info/top_level.txt,sha256=y7JuS9xJN5YdxUsQ3PSVjN8MzQAnR146bP3ZN3PYWdE,9
66
- mg_pso_gui-0.1.191.dist-info/RECORD,,
63
+ mg_pso_gui-0.1.193.dist-info/METADATA,sha256=bSrGVk4AsPiIAMf2_yDjrzktl22wAUpAVGfUduc8nZA,9456
64
+ mg_pso_gui-0.1.193.dist-info/WHEEL,sha256=Z4pYXqR_rTB7OWNDYFOm1qRk0RX6GFP2o8LgvP453Hk,91
65
+ mg_pso_gui-0.1.193.dist-info/entry_points.txt,sha256=jg82VOFjR1XDGrchs1wJSCqKYE4Ozv12aBcCSp--koA,117
66
+ mg_pso_gui-0.1.193.dist-info/top_level.txt,sha256=y7JuS9xJN5YdxUsQ3PSVjN8MzQAnR146bP3ZN3PYWdE,9
67
+ mg_pso_gui-0.1.193.dist-info/RECORD,,
@@ -15,7 +15,10 @@ class OptionManager():
15
15
  "mode": sv(),
16
16
  "files": {},
17
17
  "calibration_parameters": [],
18
- "figure_parameters": []}
18
+ "figure_parameters": [],
19
+ "sensitivity_parameters": [],
20
+ "sensitivity_positiveBestMetrics": [],
21
+ "sensitivity_negativeBestMetrics": []}
19
22
  self.steps = []
20
23
  self.service_parameters = {}
21
24
 
@@ -33,6 +36,9 @@ class OptionManager():
33
36
  self.arguments['files'] = {}
34
37
  self.arguments['calibration_parameters'].clear()
35
38
  self.arguments['figure_parameters'].clear()
39
+ self.arguments['sensitivity_parameters'].clear()
40
+ self.arguments['sensitivity_positiveBestMetrics'].clear()
41
+ self.arguments['sensitivity_negativeBestMetrics'].clear()
36
42
  self.steps = []
37
43
  self.service_parameters = {}
38
44
 
@@ -199,6 +205,24 @@ class OptionManager():
199
205
  obj["name"].set(key)
200
206
  obj["value"].set(value)
201
207
  self.arguments["figure_parameters"].append(obj)
208
+
209
+ def add_sensitivity_param(self, key, value):
210
+ obj = {"name": sv(), "value": sv()}
211
+ obj["name"].set(key)
212
+ obj["value"].set(value)
213
+ self.arguments["sensitivity_parameters"].append(obj)
214
+
215
+ def add_sensitivity_positiveBestMetrics(self, key, value):
216
+ obj = {"name": sv(), "value": sv()}
217
+ obj["name"].set(key)
218
+ obj["value"].set(value)
219
+ self.arguments["sensitivity_positiveBestMetrics"].append(obj)
220
+
221
+ def add_sensitivity_negativeBestMetrics(self, key, value):
222
+ obj = {"name": sv(), "value": sv()}
223
+ obj["name"].set(key)
224
+ obj["value"].set(value)
225
+ self.arguments["sensitivity_negativeBestMetrics"].append(obj)
202
226
 
203
227
  def move_argument_up(self, index):
204
228
  if index > 0:
@@ -227,6 +251,15 @@ class OptionManager():
227
251
 
228
252
  def remove_figure_parameter(self, index):
229
253
  self.arguments["figure_parameters"].pop(index)
254
+
255
+ def remove_sensitivity_parameter(self, index):
256
+ self.arguments["sensitivity_parameters"].pop(index)
257
+
258
+ def remove_sensitivity_positiveBestMetrics(self, index):
259
+ self.arguments["sensitivity_positiveBestMetrics"].pop(index)
260
+
261
+ def remove_sensitivity_negativeBestMetrics(self, index):
262
+ self.arguments["sensitivity_negativeBestMetrics"].pop(index)
230
263
 
231
264
  def remove_step(self, index):
232
265
  self.steps.pop(index)
@@ -0,0 +1,74 @@
1
+ from customtkinter import CTkScrollableFrame
2
+ from customtkinter import CTkFrame
3
+ from customtkinter import CTkLabel
4
+ from customtkinter import CTkButton
5
+ from customtkinter import CTkEntry
6
+ from customtkinter import CTkOptionMenu
7
+ import tkinter as tk
8
+
9
+ global option_manager
10
+
11
+ class ListEditor(CTkFrame):
12
+ def __init__(self, *args,
13
+ option_manager: None,
14
+ home_page: None,
15
+ columns: None,
16
+ parameter_name: None,
17
+ parameter_remove_func: None,
18
+ parameter_add_func: None,
19
+ **kwargs):
20
+ super().__init__(*args, **kwargs)
21
+
22
+ self.option_manager = option_manager
23
+ self.home_page = home_page
24
+ self.columns = columns
25
+ self.parameter_name = parameter_name
26
+ self.parameter_remove_func = parameter_remove_func
27
+ self.parameter_add_func = parameter_add_func
28
+ self.key_values = option_manager.get_arguments()[self.parameter_name]
29
+ self.edit_mode = False
30
+
31
+ self.render()
32
+
33
+ def clear(self):
34
+ self.containerFrame.destroy()
35
+
36
+ def set_columns(self, columns):
37
+ self.columns = columns
38
+
39
+ def toggle_edit_mode(self):
40
+ self.clear()
41
+ self.edit_mode = not self.edit_mode
42
+ self.render()
43
+
44
+ def render(self):
45
+ row = 0
46
+ index = 0
47
+
48
+ self.containerFrame = CTkFrame(self)
49
+ self.containerFrame.grid(row=0, column=0, padx=(0, 0), pady=(0, 0), sticky="new")
50
+ self.containerFrame.grid_columnconfigure((0, 1), weight=1)
51
+
52
+ CTkLabel(self.containerFrame, text="TITLE:").grid(row=row, column=0, columnspan=2, padx=5, pady=5, sticky="ew")
53
+ row += 1
54
+
55
+ for key_value_pair in self.key_values:
56
+ if self.edit_mode:
57
+ bb = CTkOptionMenu(self.containerFrame, values=self.columns, variable=self.key_values[index]["value"])
58
+ bb.grid(row=row, column=0, padx=(5, 5), pady=(5, 5), sticky="ew")
59
+
60
+ return_func = lambda index=index: (self.clear(), self.parameter_remove_func(index), self.render())
61
+ CTkButton(self.containerFrame, text="Remove", command=return_func).grid(row=row, column=1, padx=(5, 5), pady=(5, 5), sticky="ew")
62
+ else:
63
+ bb = CTkOptionMenu(self.containerFrame, values=self.columns, variable=self.key_values[index]["value"])
64
+ bb.grid(row=row, column=0, columnspan=2, padx=(5, 5), pady=(5, 5), sticky="ew")
65
+ row += 1
66
+ index += 1
67
+
68
+ if self.edit_mode:
69
+ CTkButton(self.containerFrame, text="Exit", command=self.toggle_edit_mode).grid(row=row, column=0, padx=(5, 5), pady=(5, 5), sticky="ew")
70
+ else:
71
+ CTkButton(self.containerFrame, text="Edit", command=self.toggle_edit_mode).grid(row=row, column=0, padx=(5, 5), pady=(5, 5), sticky="ew")
72
+
73
+ add_key_func = lambda: (self.clear(), self.parameter_add_func("Param " + str(len(self.key_values)) , self.columns[2]), self.render())
74
+ CTkButton(self.containerFrame, text="Add Figure", command=add_key_func).grid(row=row, column=1, padx=(5, 5), pady=(5, 5), sticky="ew")
@@ -10,6 +10,7 @@ import os
10
10
 
11
11
  from . import BoundsList
12
12
  from . import FunctionsList
13
+ from . import ListEditor
13
14
 
14
15
 
15
16
  class StepView(CTkScrollableFrame):
@@ -105,7 +106,7 @@ class StepView(CTkScrollableFrame):
105
106
 
106
107
  row += 1
107
108
 
108
- if step['open'] or (self.mode == "Sampling: Halton" or self.mode == "Sampling: Random"):
109
+ if step['open'] or (self.mode == "Sampling: Halton" or self.mode == "Sampling: Random" or self.mode == "Sensitivity Analysis"):
109
110
  bounds = BoundsList.BoundsList(
110
111
  self.containerFrame, option_manager=self.option_manager, step_index=index)
111
112
  bounds.grid(row=row, column=0, padx=(10, 10),
@@ -131,10 +132,40 @@ class StepView(CTkScrollableFrame):
131
132
  CTkButton(self.containerFrame, text="Add Group", command=self.create_new_step).grid(
132
133
  row=row, columnspan=2, column=0, padx=(10, 10), pady=(10, 10), sticky="ew")
133
134
 
134
- if (self.mode == "Sensitivity Analysis"):
135
+ if (self.mode == "Sampling: Halton" or self.mode == "Sampling: Random" or self.mode == "Sensitivity Analysis"):
135
136
  self.analysisFrame = CTkFrame(self)
136
137
  self.analysisFrame.grid(row=2, column=0, columnspan=2, padx=(10, 10), pady=(10, 10), sticky="nsew")
137
138
  self.analysisFrame.grid_columnconfigure((0, 1, 2), weight=1)
138
- CTkLabel(self.analysisFrame, text="Parameters").grid(row=0, column=0, padx=(10, 10), pady=(10, 10), sticky="nsew")
139
- CTkLabel(self.analysisFrame, text="Positive Best Metrics").grid(row=0, column=1, padx=(10, 10), pady=(10, 10), sticky="nsew")
140
- CTkLabel(self.analysisFrame, text="Zero Best Metrics").grid(row=0, column=2, padx=(10, 10), pady=(10, 10), sticky="nsew")
139
+
140
+ columns = ["n1", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9", "n10"]
141
+
142
+ self.params_editor = ListEditor.ListEditor(self.containerFrame, option_manager=self.option_manager,
143
+ home_page=self.home_page,
144
+ columns=columns,
145
+ parameter_name="sensitivity_parameters",
146
+ parameter_remove_func=self.option_manager.remove_sensitivity_parameter,
147
+ parameter_add_func=self.option_manager.add_sensitivity_param)
148
+ self.params_editor.grid(row=0, rowspan=0, column=0, padx=(10, 10), pady=(10, 0), sticky="nsew")
149
+ self.params_editor.grid_columnconfigure(0, weight=1)
150
+ self.params_editor.grid_rowconfigure(0, weight=1)
151
+
152
+
153
+ self.positive_editor = ListEditor.ListEditor(self.containerFrame, option_manager=self.option_manager,
154
+ home_page=self.home_page,
155
+ columns=columns,
156
+ parameter_name="sensitivity_positiveBestMetrics",
157
+ parameter_remove_func=self.option_manager.remove_sensitivity_positiveBestMetrics,
158
+ parameter_add_func=self.option_manager.add_sensitivity_positiveBestMetrics)
159
+ self.positive_editor.grid(row=0, rowspan=0, column=1, padx=(10, 10), pady=(10, 0), sticky="nsew")
160
+ self.positive_editor.grid_columnconfigure(0, weight=1)
161
+ self.positive_editor.grid_rowconfigure(0, weight=1)
162
+
163
+ self.negative_editor = ListEditor.ListEditor(self.containerFrame, option_manager=self.option_manager,
164
+ home_page=self.home_page,
165
+ columns=columns,
166
+ parameter_name="sensitivity_negativeBestMetrics",
167
+ parameter_remove_func=self.option_manager.add_sensitivity_negativeBestMetrics,
168
+ parameter_add_func=self.option_manager.remove_sensitivity_negativeBestMetrics)
169
+ self.negative_editor.grid(row=0, rowspan=0, column=2, padx=(10, 10), pady=(10, 0), sticky="nsew")
170
+ self.negative_editor.grid_columnconfigure(0, weight=1)
171
+ self.negative_editor.grid_rowconfigure(0, weight=1)
@@ -39,22 +39,20 @@ class MatrixEditor(CTkFrame):
39
39
  row = 0
40
40
  index = 0
41
41
 
42
- self.containerFrame = CTkFrame(self, width=100)
43
- self.containerFrame.grid(row=0, column=0, padx=(0, 0), pady=(0, 0), sticky="nsew")
42
+ self.containerFrame = CTkFrame(self)
43
+ self.containerFrame.grid(row=0, column=0, padx=(0, 0), pady=(0, 0), sticky="new")
44
44
  self.containerFrame.grid_columnconfigure((0, 1), weight=1)
45
45
 
46
- CTkLabel(self.containerFrame, text="X Axes:").grid(row=row, column=0, columnspan=2, padx=5, pady=5, sticky="")
46
+ CTkLabel(self.containerFrame, text="X Axes:").grid(row=row, column=0, columnspan=2, padx=5, pady=5, sticky="ew")
47
47
  row += 1
48
48
 
49
49
  for key_value_pair in self.key_values:
50
- #CTkLabel(self.containerFrame, text=self.key_values[index]["name"].get()).grid(row=row, column=0, padx=5, pady=5, sticky="")
51
-
52
50
  if self.edit_mode:
53
- bb = CTkOptionMenu(self.containerFrame, values=self.columns, width=100, variable=self.key_values[index]["value"], command=self.home_page.update_graph)
51
+ bb = CTkOptionMenu(self.containerFrame, values=self.columns, variable=self.key_values[index]["value"], command=self.home_page.update_graph)
54
52
  bb.grid(row=row, column=0, padx=(5, 5), pady=(5, 5), sticky="ew")
55
53
 
56
54
  return_func = lambda index=index: (self.clear(), self.option_manager.remove_figure_parameter(index), self.home_page.update_graph(0), self.render())
57
- CTkButton(self.containerFrame, text="Remove", width=100, command=return_func).grid(row=row, column=1, padx=(5, 5), pady=(5, 5), sticky="ew")
55
+ CTkButton(self.containerFrame, text="Remove", command=return_func).grid(row=row, column=1, padx=(5, 5), pady=(5, 5), sticky="ew")
58
56
  else:
59
57
  bb = CTkOptionMenu(self.containerFrame, values=self.columns, variable=self.key_values[index]["value"], command=self.home_page.update_graph)
60
58
  bb.grid(row=row, column=0, columnspan=2, padx=(5, 5), pady=(5, 5), sticky="ew")