mg-pso-gui 0.1.177__tar.gz → 0.1.178__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 (70) hide show
  1. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/PKG-INFO +1 -1
  2. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mg_pso_gui.egg-info/PKG-INFO +1 -1
  3. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/GraphGenerator.py +141 -0
  4. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/setup.py +1 -1
  5. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mg_pso_gui.egg-info/SOURCES.txt +0 -0
  6. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mg_pso_gui.egg-info/dependency_links.txt +0 -0
  7. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mg_pso_gui.egg-info/entry_points.txt +0 -0
  8. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mg_pso_gui.egg-info/requires.txt +0 -0
  9. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mg_pso_gui.egg-info/top_level.txt +0 -0
  10. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/__init__.py +0 -0
  11. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/HomePage.py +0 -0
  12. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/OptionManager.py +0 -0
  13. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/PlatformTab/PlatformTab.py +0 -0
  14. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/PlatformTab/__init__.py +0 -0
  15. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/RunTab/RunTab.py +0 -0
  16. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/RunTab/__init__.py +0 -0
  17. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/SetupTab/BoundsEditorWindow.py +0 -0
  18. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/SetupTab/BoundsList.py +0 -0
  19. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/SetupTab/CalibrationParametersView.py +0 -0
  20. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/SetupTab/FunctionsList.py +0 -0
  21. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/SetupTab/ListParametersView.py +0 -0
  22. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/SetupTab/OptimalParameterView.py +0 -0
  23. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/SetupTab/SetupTab.py +0 -0
  24. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/SetupTab/StaticParameterView.py +0 -0
  25. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/SetupTab/StepView.py +0 -0
  26. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/SetupTab/__init__.py +0 -0
  27. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/VisualizeTab/MatrixEditor.py +0 -0
  28. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/VisualizeTab/SideBar.py +0 -0
  29. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/VisualizeTab/VisualizeTab.py +0 -0
  30. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/VisualizeTab/__init__.py +0 -0
  31. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/__init__.py +0 -0
  32. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/images/IGOW 4 Logo.png +0 -0
  33. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/images/collapse.png +0 -0
  34. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/images/down.png +0 -0
  35. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/images/expand.png +0 -0
  36. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/images/play.png +0 -0
  37. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/images/refresh.png +0 -0
  38. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/images/refresh_hd.png +0 -0
  39. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/images/stop.png +0 -0
  40. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/images/test.png +0 -0
  41. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/images/trash.png +0 -0
  42. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/gui/images/up.png +0 -0
  43. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/mgpsogui.py +0 -0
  44. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/start.yaml +0 -0
  45. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/CTkToolTip/__init__.py +0 -0
  46. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/CTkToolTip/ctk_tooltip.py +0 -0
  47. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/PSORunner.py +0 -0
  48. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/__init__.py +0 -0
  49. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/debug.py +0 -0
  50. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/helpers.py +0 -0
  51. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/recosu/__init__.py +0 -0
  52. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/recosu/pso/__init__.py +0 -0
  53. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/recosu/pso/csip_access.py +0 -0
  54. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/recosu/pso/pso.py +0 -0
  55. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/recosu/sampling/__init__.py +0 -0
  56. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/recosu/sampling/halton/__init__.py +0 -0
  57. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/recosu/sampling/halton/halton.py +0 -0
  58. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/recosu/sampling/halton/prime.py +0 -0
  59. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/recosu/sampling/random/__init__.py +0 -0
  60. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/recosu/sampling/random/random_sampler.py +0 -0
  61. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/recosu/sampling/sample_trace_writer.py +0 -0
  62. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/recosu/sampling/sampler_task.py +0 -0
  63. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/recosu/sampling/sampling.py +0 -0
  64. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/recosu/utils/__init__.py +0 -0
  65. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/recosu/utils/plot/__init__.py +0 -0
  66. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/recosu/utils/plot/cost_steps.py +0 -0
  67. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/recosu/utils/trace_writer.py +0 -0
  68. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/recosu/utils/utils.py +0 -0
  69. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/mgpsogui/util/sampler_test_driver.py +0 -0
  70. {mg-pso-gui-0.1.177 → mg-pso-gui-0.1.178}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mg-pso-gui
3
- Version: 0.1.177
3
+ Version: 0.1.178
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.177
3
+ Version: 0.1.178
4
4
  Summary: GUI for MG-PSO
5
5
  Author: Robert Cordingly
6
6
  Author-email: <rcording@uw.ed>
@@ -1,5 +1,6 @@
1
1
  import plotly.express as px
2
2
  import plotly.graph_objs as go
3
+ from plotly.subplots import make_subplots
3
4
  import pandas as pd
4
5
  import numpy as np
5
6
  import os
@@ -38,6 +39,7 @@ def generate_graphs(HomePage):
38
39
  sampling_csv(HomePage, HomePage.option_manager)
39
40
  elif (selected_graph == "Matrix Editor"):
40
41
  HomePage.selected_graph_name = "matrix_editor"
42
+ matrix_editor(HomePage, HomePage.option_manager)
41
43
  pass
42
44
 
43
45
  image_path = os.path.join(folder, HomePage.selected_graph_name + ".png")
@@ -525,4 +527,143 @@ def sampling_csv(homepage, option_manager):
525
527
  with open(os.path.join(folder, "sampling_csv.html"), "w") as f:
526
528
  f.write(html)
527
529
 
530
+ return fig
531
+
532
+ def matrix_editor(homepage, option_manager):
533
+ style = homepage.figure_style.get()
534
+ data = homepage.csv_data
535
+ x = homepage.csv_x_selector.get()
536
+
537
+ all_figures = []
538
+ figure_parameters = option_manager.get_arguments()['figure_parameters']
539
+
540
+ color_list = ['#636EFA', '#EF553B', '#00CC96', '#AB63FA', '#FFA15A', '#19D3F3', '#FF6692', '#B6E880', '#FF97FF', '#FECB52']
541
+ color_index = 0
542
+ color_dict = {}
543
+
544
+ total_figures = 0
545
+ for parameter in figure_parameters:
546
+ name = parameter['name'].get()
547
+ if ("Fig" not in name):
548
+ continue
549
+ total_figures += 1
550
+
551
+ figures_per_row = 1
552
+ if (total_figures == 1):
553
+ figures_per_row = 1
554
+ elif (total_figures == 2):
555
+ figures_per_row = 2
556
+ elif (total_figures == 3 or total_figures == 4):
557
+ figures_per_row = 2
558
+ elif (total_figures == 5 or total_figures == 6):
559
+ figures_per_row = 3
560
+ elif (total_figures == 7 or total_figures == 8):
561
+ figures_per_row = 4
562
+ elif (total_figures == 9 or total_figures == 10):
563
+ figures_per_row = 5
564
+
565
+ fig_combined = make_subplots(rows=(total_figures // figures_per_row) + 1, cols=figures_per_row, shared_xaxes=False, shared_yaxes=False)
566
+
567
+ for parameter in figure_parameters:
568
+ name = parameter['name'].get()
569
+
570
+ if ("Fig" not in name):
571
+ continue
572
+
573
+ fig = go.Figure()
574
+ val = parameter['value'].get()
575
+
576
+ xx = None
577
+ if x == "time":
578
+ xx = pd.to_datetime(data["time"], format='%Y-%m-%d', errors='coerce')
579
+ elif x == "date":
580
+ xx = pd.to_datetime(data["date"], format='%d-%m-%Y', errors='coerce')
581
+ else:
582
+ xx = pd.to_numeric(data[x], errors="coerce")
583
+
584
+ yy = pd.to_numeric(data[val], errors="coerce")
585
+
586
+ yy_unit = ""
587
+
588
+ if (style == "Scatter"):
589
+ fig.add_trace(go.Scatter(x=xx, y=yy, name=val, mode='markers'))
590
+ elif (style == "Bars"):
591
+ fig.add_trace(go.Bar(x=xx, y=yy, name=val))
592
+ elif (style == "Lines"):
593
+ fig.add_trace(go.Scatter(x=xx, y=yy, name=val))
594
+ elif (style == "Area"):
595
+ fig.add_trace(go.Scatter(x=xx, y=yy, name=val, fill='tozeroy'))
596
+ elif (style == "Box"):
597
+ fig.add_trace(go.Box(x=xx, y=yy, name=val))
598
+
599
+ fig.update_layout(
600
+ title="",
601
+ xaxis_title=x,
602
+ yaxis_title=val,
603
+ font=dict(color='white'),
604
+ paper_bgcolor='rgba(42, 42, 42, 0)',
605
+ plot_bgcolor='rgb(62, 62, 62)',
606
+ xaxis=dict(
607
+ gridcolor='rgb(72, 72, 72)',
608
+ gridwidth=1
609
+ ),
610
+ yaxis=dict(
611
+ title=val,
612
+ autorange=True,
613
+ gridcolor='rgb(72, 72, 72)',
614
+ gridwidth=0.1
615
+ )
616
+ )
617
+ all_figures.append(fig)
618
+
619
+ row = 1
620
+ col = 1
621
+ for fig in all_figures:
622
+ for trace in fig.data:
623
+
624
+ if trace.name not in color_dict:
625
+ color_dict[trace.name] = color_list[color_index % len(color_list)]
626
+ color_index += 1
627
+
628
+ trace.marker.color = color_dict[trace.name]
629
+
630
+ if fig_combined.data:
631
+ trace.showlegend = not any(t.name == trace.name for t in fig_combined.data)
632
+ fig_combined.add_trace(trace, row=row, col=col)
633
+
634
+ # Get the layout titles from the individual figure
635
+ xaxis_title = fig.layout.xaxis.title.text
636
+ yaxis_title = fig.layout.yaxis.title.text
637
+
638
+ # Update the combined figure's subplot with the titles
639
+ fig_combined.update_xaxes(title_text=xaxis_title, row=row, col=col)
640
+ fig_combined.update_yaxes(title_text=yaxis_title, row=row, col=col)
641
+
642
+ col += 1
643
+ if col > figures_per_row:
644
+ row += 1
645
+ col = 1
646
+
647
+ info = option_manager.get_project_data()
648
+ folder = os.path.join(info['path'], info['name'])
649
+
650
+ fig = fig_combined
651
+ fig.update_layout(
652
+ title="",
653
+ font=dict(color='white'),
654
+ paper_bgcolor='rgba(42, 42, 42, 0)',
655
+ plot_bgcolor='rgb(62, 62, 62)'
656
+ )
657
+
658
+ if not os.path.exists(folder):
659
+ os.makedirs(folder)
660
+
661
+ fig.write_image(os.path.join(folder, "matrix_editor.png"), width=1280, height=720)
662
+ fig.write_html(os.path.join(folder, "matrix_editor.html"), include_plotlyjs='cdn', auto_open=False)
663
+ with open(os.path.join(folder, "matrix_editor.html"), "r") as f:
664
+ html = f.read()
665
+ html = html.replace("<body>", "<body bgcolor='#2a2a2a'>")
666
+ with open(os.path.join(folder, "matrix_editor.html"), "w") as f:
667
+ f.write(html)
668
+
528
669
  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.177'
5
+ VERSION = '0.1.178'
6
6
  DESCRIPTION = 'GUI for MG-PSO'
7
7
  LONG_DESCRIPTION = open('../README.md').read()
8
8
 
File without changes