mg-pso-gui 0.1.198__tar.gz → 0.1.200__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 (71) hide show
  1. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/PKG-INFO +1 -1
  2. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mg_pso_gui.egg-info/PKG-INFO +1 -1
  3. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/OptionManager.py +1 -1
  4. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/SetupTab/FunctionsList.py +20 -1
  5. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/SetupTab/StepView.py +4 -2
  6. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/PSORunner.py +106 -1
  7. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/setup.py +1 -1
  8. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mg_pso_gui.egg-info/SOURCES.txt +0 -0
  9. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mg_pso_gui.egg-info/dependency_links.txt +0 -0
  10. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mg_pso_gui.egg-info/entry_points.txt +0 -0
  11. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mg_pso_gui.egg-info/requires.txt +0 -0
  12. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mg_pso_gui.egg-info/top_level.txt +0 -0
  13. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/__init__.py +0 -0
  14. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/HomePage.py +0 -0
  15. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/PlatformTab/PlatformTab.py +0 -0
  16. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/PlatformTab/__init__.py +0 -0
  17. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/RunTab/RunTab.py +0 -0
  18. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/RunTab/__init__.py +0 -0
  19. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/SetupTab/BoundsEditorWindow.py +0 -0
  20. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/SetupTab/BoundsList.py +0 -0
  21. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/SetupTab/CalibrationParametersView.py +0 -0
  22. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/SetupTab/ListEditor.py +0 -0
  23. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/SetupTab/ListParametersView.py +0 -0
  24. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/SetupTab/OptimalParameterView.py +0 -0
  25. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/SetupTab/SetupTab.py +0 -0
  26. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/SetupTab/StaticParameterView.py +0 -0
  27. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/SetupTab/__init__.py +0 -0
  28. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/VisualizeTab/MatrixEditor.py +0 -0
  29. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/VisualizeTab/SideBar.py +0 -0
  30. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/VisualizeTab/VisualizeTab.py +0 -0
  31. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/VisualizeTab/__init__.py +0 -0
  32. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/__init__.py +0 -0
  33. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/images/IGOW 4 Logo.png +0 -0
  34. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/images/collapse.png +0 -0
  35. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/images/down.png +0 -0
  36. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/images/expand.png +0 -0
  37. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/images/play.png +0 -0
  38. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/images/refresh.png +0 -0
  39. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/images/refresh_hd.png +0 -0
  40. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/images/stop.png +0 -0
  41. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/images/test.png +0 -0
  42. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/images/trash.png +0 -0
  43. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/gui/images/up.png +0 -0
  44. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/mgpsogui.py +0 -0
  45. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/start.yaml +0 -0
  46. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/CTkToolTip/__init__.py +0 -0
  47. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/CTkToolTip/ctk_tooltip.py +0 -0
  48. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/GraphGenerator.py +0 -0
  49. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/__init__.py +0 -0
  50. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/debug.py +0 -0
  51. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/helpers.py +0 -0
  52. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/recosu/__init__.py +0 -0
  53. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/recosu/pso/__init__.py +0 -0
  54. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/recosu/pso/csip_access.py +0 -0
  55. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/recosu/pso/pso.py +0 -0
  56. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/recosu/sampling/__init__.py +0 -0
  57. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/recosu/sampling/halton/__init__.py +0 -0
  58. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/recosu/sampling/halton/halton.py +0 -0
  59. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/recosu/sampling/halton/prime.py +0 -0
  60. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/recosu/sampling/random/__init__.py +0 -0
  61. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/recosu/sampling/random/random_sampler.py +0 -0
  62. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/recosu/sampling/sample_trace_writer.py +0 -0
  63. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/recosu/sampling/sampler_task.py +0 -0
  64. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/recosu/sampling/sampling.py +0 -0
  65. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/recosu/utils/__init__.py +0 -0
  66. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/recosu/utils/plot/__init__.py +0 -0
  67. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/recosu/utils/plot/cost_steps.py +0 -0
  68. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/recosu/utils/trace_writer.py +0 -0
  69. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/recosu/utils/utils.py +0 -0
  70. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/mgpsogui/util/sampler_test_driver.py +0 -0
  71. {mg_pso_gui-0.1.198 → mg_pso_gui-0.1.200}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mg-pso-gui
3
- Version: 0.1.198
3
+ Version: 0.1.200
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.198
3
+ Version: 0.1.200
4
4
  Summary: GUI for MG-PSO
5
5
  Author: Robert Cordingly
6
6
  Author-email: <rcording@uw.ed>
@@ -22,7 +22,7 @@ class OptionManager():
22
22
  self.steps = []
23
23
  self.service_parameters = {}
24
24
 
25
- self.service_modes = ["Optimization: MG-PSO", "Sampling: Halton", "Sampling: Random", "Sensitivity Analysis"]
25
+ self.service_modes = ["Optimization: MG-PSO", "Sampling: Halton", "Sampling: Random", "Sensitivity: Halton", "Sensitivity: Random"]
26
26
  for mode in self.service_modes:
27
27
  self.arguments["urls"][mode] = sv()
28
28
 
@@ -47,8 +47,27 @@ class FunctionsList(CTkFrame):
47
47
 
48
48
  row += 1
49
49
 
50
+ columns = ["absdiff",
51
+ "absdifflog",
52
+ "ave",
53
+ "bias",
54
+ "fhf",
55
+ "ioa",
56
+ "ioa2",
57
+ "kge",
58
+ "kge09",
59
+ "mns",
60
+ "mse",
61
+ "ns",
62
+ "ns2log",
63
+ "nslog1p",
64
+ "nslog2",
65
+ "pbias",
66
+ "pmcc",
67
+ "rmse",
68
+ "trmse"]
50
69
  CTkEntry(self.containerFrame, textvariable=func["name"]).grid(row=row, column=0, padx=(5, 5), pady=(5, 5), sticky="ew")
51
- CTkEntry(self.containerFrame, textvariable=func["of"]).grid(row=row, column=1, padx=(5, 5), pady=(5, 5), sticky="ew")
70
+ CTkOptionMenu(self.containerFrame, values=columns, variable=func["of"]).grid(row=row, column=1, padx=(5, 5), pady=(5, 5), sticky="ew")
52
71
  CTkEntry(self.containerFrame, textvariable=func["weight"]).grid(row=row, column=2, padx=(5, 5), pady=(5, 5), sticky="ew")
53
72
 
54
73
  row += 1
@@ -106,7 +106,7 @@ class StepView(CTkScrollableFrame):
106
106
 
107
107
  row += 1
108
108
 
109
- if step['open'] or (self.mode == "Sampling: Halton" or self.mode == "Sampling: Random" or self.mode == "Sensitivity Analysis"):
109
+ if step['open'] or (self.mode == "Sampling: Halton" or self.mode == "Sampling: Random" or self.mode == "Sensitivity: Halton" or self.mode == "Sensitivity: Random"):
110
110
  bounds = BoundsList.BoundsList(
111
111
  self.containerFrame, option_manager=self.option_manager, step_index=index)
112
112
  bounds.grid(row=row, column=0, padx=(10, 10),
@@ -132,6 +132,7 @@ class StepView(CTkScrollableFrame):
132
132
  CTkButton(self.containerFrame, text="Add Group", command=self.create_new_step).grid(
133
133
  row=row, columnspan=2, column=0, padx=(10, 10), pady=(10, 10), sticky="ew")
134
134
 
135
+ """
135
136
  if (self.mode == "Sampling: Halton" or self.mode == "Sampling: Random" or self.mode == "Sensitivity Analysis"):
136
137
  self.analysisFrame = CTkFrame(self)
137
138
  self.analysisFrame.grid(row=2, column=0, columnspan=2, padx=(10, 10), pady=(10, 10), sticky="nsew")
@@ -161,7 +162,7 @@ class StepView(CTkScrollableFrame):
161
162
  self.positive_editor.grid_rowconfigure(0, weight=1)
162
163
 
163
164
  self.negative_editor = ListEditor.ListEditor(self.analysisFrame, option_manager=self.option_manager,
164
- title = "Negative Best Metrics",
165
+ title = "Zero Best Metrics",
165
166
  columns=columns,
166
167
  parameter_name="sensitivity_negativeBestMetrics",
167
168
  parameter_remove_func=self.option_manager.remove_sensitivity_negativeBestMetrics,
@@ -169,3 +170,4 @@ class StepView(CTkScrollableFrame):
169
170
  self.negative_editor.grid(row=0, column=2, padx=(10, 10), pady=(10, 0), sticky="nsew")
170
171
  self.negative_editor.grid_columnconfigure(0, weight=1)
171
172
  self.negative_editor.grid_rowconfigure(0, weight=1)
173
+ """
@@ -7,6 +7,10 @@ import time
7
7
  import os
8
8
  from .recosu.sampling.sampling import run_sampler
9
9
  from .recosu.pso import global_best
10
+ from csip import Client
11
+ import traceback
12
+ import urllib
13
+ import shutil
10
14
 
11
15
  def enqueue_output(out, queue):
12
16
  for line in iter(out.readline, b''):
@@ -131,6 +135,80 @@ def run_process(stdout_queue, stderr_queue, results_queue, data, folder):
131
135
  trace_file=os.path.join(folder, 'results', 'random_trace.csv'))
132
136
  results_queue.put(trace)
133
137
  print(trace, flush=True)
138
+ elif my_mode == "Sensitivity: Halton":
139
+ shutil.copyfile(os.path.join(folder, 'results', 'halton_trace.csv'), os.path.join(folder, 'results', 'trace.csv'))
140
+ trace_path = os.path.join(folder, 'results', 'trace.csv')
141
+
142
+ # Get list of parameters from steps
143
+ parameters = []
144
+ for param in steps[0]['parameters']:
145
+ parameters.append(param['name'])
146
+
147
+ request_json = {
148
+ "metainfo": {
149
+ "service_url": None,
150
+ "description": "",
151
+ "name": "",
152
+ "mode": "async"
153
+ },
154
+ "parameter": [
155
+ {
156
+ "name": "parameters",
157
+ "value": parameters
158
+ },
159
+ {
160
+ "name": "positiveBestMetrics",
161
+ "value": ["ns","kge","mns","kge09","nslog2"]
162
+ },
163
+ {
164
+ "name": "zeroBestMetrics",
165
+ "value": ["pbias","rmse"]
166
+ }
167
+ ]
168
+ }
169
+ # Write the request to a file
170
+ with open(os.path.join(folder, 'results', 'request.json'), 'w') as f:
171
+ f.write(str(request_json))
172
+ request_path = os.path.join(folder, 'results', 'request.json')
173
+
174
+ sensitivity_analysis(args['url'], request_path, trace_path, folder)
175
+ elif my_mode == "Sensitivity: Random":
176
+ shutil.copyfile(os.path.join(folder, 'results', 'random_trace.csv'), os.path.join(folder, 'results', 'trace.csv'))
177
+ trace_path = os.path.join(folder, 'results', 'trace.csv')
178
+
179
+ # Get list of parameters from steps
180
+ parameters = []
181
+ for param in steps[0]['parameters']:
182
+ parameters.append(param['name'])
183
+
184
+ request_json = {
185
+ "metainfo": {
186
+ "service_url": None,
187
+ "description": "",
188
+ "name": "",
189
+ "mode": "async"
190
+ },
191
+ "parameter": [
192
+ {
193
+ "name": "parameters",
194
+ "value": parameters
195
+ },
196
+ {
197
+ "name": "positiveBestMetrics",
198
+ "value": ["ns","kge","mns","kge09","nslog2"]
199
+ },
200
+ {
201
+ "name": "zeroBestMetrics",
202
+ "value": ["pbias","rmse"]
203
+ }
204
+ ]
205
+ }
206
+ # Write the request to a file
207
+ with open(os.path.join(folder, 'results', 'request.json'), 'w') as f:
208
+ f.write(str(request_json))
209
+ request_path = os.path.join(folder, 'results', 'request.json')
210
+
211
+ sensitivity_analysis(args['url'], request_path, trace_path, folder)
134
212
  else:
135
213
  print("Running MG-PSO Optimization...\n", flush=True)
136
214
  optimizer, trace = global_best(steps,
@@ -166,4 +244,31 @@ def run_process(stdout_queue, stderr_queue, results_queue, data, folder):
166
244
  stderr_thread.join()
167
245
 
168
246
  sys.stdout = old_stdout
169
- sys.stderr = old_stderr
247
+ sys.stderr = old_stderr
248
+
249
+ def create_request(request_file: str) -> Client:
250
+ request: Client = Client.from_file(request_file)
251
+ return request
252
+
253
+ def download_output(response: Client, target_directory) -> None:
254
+ data_names: list[str] = response.get_data_names()
255
+ for name in data_names:
256
+ url = response.get_data_value(name)
257
+ file_path = os.path.join(target_directory, name)
258
+ urllib.request.urlretrieve(url, file_path)
259
+
260
+ def sensitivity_analysis(url, request_file, trace_file, output_directory):
261
+ request: Client = create_request(request_file)
262
+ files: list[str] = [trace_file] if os.path.isfile(trace_file) else []
263
+ conf = {
264
+ 'service_timeout': 60.0, # (sec)
265
+ }
266
+ result: Client = Client()
267
+ try:
268
+ result = request.execute(url, files=files, sync=True, conf=conf)
269
+ except Exception as ex:
270
+ traceback.print_exc()
271
+ exit(1)
272
+
273
+ if result.is_finished():
274
+ download_output(result, output_directory)
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
  import codecs
3
3
  import os
4
4
 
5
- VERSION = '0.1.198'
5
+ VERSION = '0.1.200'
6
6
  DESCRIPTION = 'GUI for MG-PSO'
7
7
  LONG_DESCRIPTION = open('../README.md').read()
8
8
 
File without changes