diff --git a/src/digest/histogramchartwidget.py b/src/digest/histogramchartwidget.py
index 9dbe557..f72befb 100644
--- a/src/digest/histogramchartwidget.py
+++ b/src/digest/histogramchartwidget.py
@@ -157,7 +157,6 @@ def __init__(self, *args, **kwargs):
self.bar_spacing = 25
def set_data(self, data: OrderedDict, model_name, y_max, title="", set_ticks=False):
-
title_color = "rgb(0,0,0)" if set_ticks else "rgb(200,200,200)"
self.plot_widget.setLabel(
"left",
@@ -173,7 +172,8 @@ def set_data(self, data: OrderedDict, model_name, y_max, title="", set_ticks=Fal
x_positions = list(range(len(op_count)))
total_count = sum(op_count)
width = 0.6
- self.plot_widget.setFixedWidth(len(op_names) * self.bar_spacing)
+ self.plot_widget.setFixedWidth(500)
+
for count, x_pos, tick in zip(op_count, x_positions, op_names):
x0 = x_pos - width / 2
y0 = 0
diff --git a/src/digest/main.py b/src/digest/main.py
index dfdab4a..5a894b5 100644
--- a/src/digest/main.py
+++ b/src/digest/main.py
@@ -9,6 +9,7 @@
from typing import Dict, Tuple, Optional, Union
import tempfile
from enum import IntEnum
+import pandas as pd
import yaml
# This is a temporary workaround since the Qt designer generated files
@@ -37,7 +38,7 @@
from PySide6.QtCore import Qt, QSize
from digest.dialog import StatusDialog, InfoDialog, WarnDialog, ProgressDialog
-from digest.thread import StatsThread, SimilarityThread
+from digest.thread import StatsThread, SimilarityThread, post_process
from digest.popup_window import PopupWindow
from digest.huggingface_page import HuggingfacePage
from digest.multi_model_selection_page import MultiModelSelectionPage
@@ -214,7 +215,7 @@ def __init__(self, model_file: Optional[str] = None):
# Set up the HUGGINGFACE Page
huggingface_page = HuggingfacePage()
- huggingface_page.model_signal.connect(self.load_onnx)
+ huggingface_page.model_signal.connect(self.load_model)
self.ui.stackedWidget.insertWidget(self.Page.HUGGINGFACE, huggingface_page)
# Set up the multi model page and relevant button
@@ -222,7 +223,7 @@ def __init__(self, model_file: Optional[str] = None):
self.ui.stackedWidget.insertWidget(
self.Page.MULTIMODEL, self.multimodelselection_page
)
- self.multimodelselection_page.model_signal.connect(self.load_onnx)
+ self.multimodelselection_page.model_signal.connect(self.load_model)
# Load model file if given as input to the executable
if model_file:
@@ -285,25 +286,14 @@ def closeTab(self, index):
self.ui.singleModelWidget.hide()
def openFile(self):
- filename, _ = QFileDialog.getOpenFileName(
+ file_name, _ = QFileDialog.getOpenFileName(
self, "Open File", "", "ONNX and Report Files (*.onnx *.yaml)"
)
- if not filename:
+ if not file_name:
return
- file_ext = os.path.splitext(filename)[-1]
-
- if file_ext == ".onnx":
- self.load_onnx(filename)
- elif file_ext == ".yaml":
- self.load_report(filename)
- else:
- bad_ext_dialog = StatusDialog(
- f"Digest does not support files with the extension {file_ext}",
- parent=self,
- )
- bad_ext_dialog.show()
+ self.load_model(file_name)
def update_cards(
self,
@@ -374,7 +364,8 @@ def update_similarity_widget(
completed_successfully: bool,
model_id: str,
most_similar: str,
- png_filepath: Union[str, None],
+ png_filepath: Optional[str] = None,
+ df_sorted: Optional[pd.DataFrame] = None,
):
widget = None
digest_model = None
@@ -390,9 +381,24 @@ def update_similarity_widget(
curr_index = index
break
- if completed_successfully and isinstance(widget, modelSummary) and png_filepath:
+ # convert back to a List[str]
+ most_similar_list = most_similar.split(",")
+
+ if (
+ completed_successfully
+ and isinstance(widget, modelSummary)
+ and digest_model
+ and png_filepath
+ ):
+
+ if df_sorted is not None:
+ post_process(
+ digest_model.model_name, most_similar_list, df_sorted, png_filepath
+ )
+
widget.load_gif.stop()
widget.ui.similarityImg.clear()
+ # We give the image a 10% haircut to fit it more aesthetically
widget_width = widget.ui.similarityImg.width()
pixmap = QPixmap(png_filepath)
@@ -411,30 +417,31 @@ def update_similarity_widget(
# Show most correlated models
widget.ui.similarityCorrelation.show()
widget.ui.similarityCorrelationStatic.show()
+
+ most_similar_list = most_similar_list[1:4]
if most_similar:
- most_similar_models = most_similar.split(",")
text = (
"\n"
- f"{most_similar_models[0]}, {most_similar_models[1]}, "
- f"and {most_similar_models[2]}. "
+ f"{most_similar_list[0]}, {most_similar_list[1]}, "
+ f"and {most_similar_list[2]}. "
""
)
else:
# currently the similarity widget expects the most_similar_models
# to allows contains 3 models. For now we will just send three empty
# strings but at some point we should handle an arbitrary case.
- most_similar_models = ["", "", ""]
- text = ""
+ most_similar_list = ["", "", ""]
+ text = "NTD"
# Create option to click to enlarge image
widget.ui.similarityImg.mousePressEvent = (
lambda event: self.open_similarity_report(
- model_id, png_filepath, most_similar_models
+ model_id, png_filepath, most_similar_list
)
)
# Create option to click to enlarge image
self.model_similarity_report[model_id] = SimilarityAnalysisReport(
- png_filepath, most_similar_models
+ png_filepath, most_similar_list
)
widget.ui.similarityCorrelation.setText(text)
@@ -878,10 +885,10 @@ def load_report(self, filepath: str):
movie.start()
self.update_similarity_widget(
- bool(digest_model.similarity_heatmap_path),
- digest_model.unique_id,
- "",
- digest_model.similarity_heatmap_path,
+ completed_successfully=bool(digest_model.similarity_heatmap_path),
+ model_id=digest_model.unique_id,
+ most_similar="",
+ png_filepath=digest_model.similarity_heatmap_path,
)
progress.close()
@@ -889,6 +896,27 @@ def load_report(self, filepath: str):
except FileNotFoundError as e:
print(f"File not found: {e.filename}")
+ def load_model(self, file_path: str):
+
+ # Ensure the filepath follows a standard formatting:
+ file_path = os.path.normpath(file_path)
+
+ if not os.path.exists(file_path):
+ return
+
+ file_ext = os.path.splitext(file_path)[-1]
+
+ if file_ext == ".onnx":
+ self.load_onnx(file_path)
+ elif file_ext == ".yaml":
+ self.load_report(file_path)
+ else:
+ bad_ext_dialog = StatusDialog(
+ f"Digest does not support files with the extension {file_ext}",
+ parent=self,
+ )
+ bad_ext_dialog.show()
+
def dragEnterEvent(self, event: QDragEnterEvent):
if event.mimeData().hasUrls():
event.acceptProposedAction()
@@ -897,12 +925,7 @@ def dropEvent(self, event: QDropEvent):
if event.mimeData().hasUrls():
for url in event.mimeData().urls():
file_path = url.toLocalFile()
- if file_path.endswith(".onnx"):
- self.load_onnx(file_path)
- break
- elif file_path.endswith(".yaml"):
- self.load_report(file_path)
- break
+ self.load_model(file_path)
## functions for changing menu page
def logo_clicked(self):
@@ -950,9 +973,6 @@ def save_reports(self):
self, "Select Directory"
)
- if not save_directory:
- return
-
# Check if the directory exists and is writable
if not os.path.exists(save_directory) or not os.access(save_directory, os.W_OK):
self.show_warning_dialog(
diff --git a/src/digest/multi_model_analysis.py b/src/digest/multi_model_analysis.py
index 6848403..d5937bc 100644
--- a/src/digest/multi_model_analysis.py
+++ b/src/digest/multi_model_analysis.py
@@ -1,12 +1,14 @@
# Copyright(C) 2024 Advanced Micro Devices, Inc. All rights reserved.
import os
+from datetime import datetime
import csv
from typing import List, Dict, Union
from collections import Counter, defaultdict, OrderedDict
# pylint: disable=no-name-in-module
from PySide6.QtWidgets import QWidget, QTableWidgetItem, QFileDialog
+from PySide6.QtCore import Qt
from digest.dialog import ProgressDialog, StatusDialog
from digest.ui.multimodelanalysis_ui import Ui_multiModelAnalysis
from digest.histogramchartwidget import StackedHistogramWidget
@@ -42,6 +44,9 @@ def __init__(
self.ui.individualCheckBox.stateChanged.connect(self.check_box_changed)
self.ui.multiCheckBox.stateChanged.connect(self.check_box_changed)
+ # For some reason setting alignments in designer lead to bugs in *ui.py files
+ self.ui.opHistogramChart.layout().setAlignment(Qt.AlignmentFlag.AlignTop)
+
if not model_list:
return
@@ -80,7 +85,8 @@ def __init__(
if isinstance(model, DigestOnnxModel):
item = QTableWidgetItem(str(model.opset))
elif isinstance(model, DigestReportModel):
- item = QTableWidgetItem(str(model.model_data.get("opset", "NA")))
+ item = QTableWidgetItem(str(model.model_data.get("opset", "")))
+
self.ui.dataTable.setItem(row, 2, item)
item = QTableWidgetItem(str(len(model.node_data)))
@@ -193,12 +199,13 @@ def __init__(
set_ticks=False,
)
frame_layout = self.ui.stackedHistogramFrame.layout()
- frame_layout.addWidget(stacked_histogram_widget)
+ if frame_layout:
+ frame_layout.addWidget(stacked_histogram_widget)
# Add a "ghost" histogram to allow us to set the x axis label vertically
model_name = list(node_type_counter.keys())[0]
stacked_histogram_widget = StackedHistogramWidget()
- ordered_dict = {key: 1 for key in top_ops}
+ ordered_dict = OrderedDict({key: 1 for key in top_ops})
stacked_histogram_widget.set_data(
ordered_dict,
model_name="_",
@@ -206,18 +213,39 @@ def __init__(
set_ticks=True,
)
frame_layout = self.ui.stackedHistogramFrame.layout()
- frame_layout.addWidget(stacked_histogram_widget)
+ if frame_layout:
+ frame_layout.addWidget(stacked_histogram_widget)
self.model_list = model_list
def save_reports(self):
- # Model summary text report
- save_directory = QFileDialog(self).getExistingDirectory(
+ """This function saves all available reports for the models that are opened
+ in the multi-model analysis page."""
+
+ base_directory = QFileDialog(self).getExistingDirectory(
self, "Select Directory"
)
- if not save_directory:
- return
+ # Check if the directory exists and is writable
+ if not os.path.exists(base_directory) or not os.access(base_directory, os.W_OK):
+ bad_ext_dialog = StatusDialog(
+ f"The directory {base_directory} is not valid or writable.",
+ parent=self,
+ )
+ bad_ext_dialog.show()
+
+ # Append a subdirectory to the save_directory so that all reports are co-located
+ name_id = datetime.now().strftime("%Y%m%d%H%M%S")
+ sub_directory = f"multi_model_reports_{name_id}"
+ save_directory = os.path.join(base_directory, sub_directory)
+ try:
+ os.makedirs(save_directory)
+ except OSError as os_err:
+ bad_ext_dialog = StatusDialog(
+ f"Failed to create {save_directory} with error {os_err}",
+ parent=self,
+ )
+ bad_ext_dialog.show()
save_individual_reports = self.ui.individualCheckBox.isChecked()
save_multi_reports = self.ui.multiCheckBox.isChecked()
diff --git a/src/digest/multi_model_selection_page.py b/src/digest/multi_model_selection_page.py
index ddf2e90..601c82b 100644
--- a/src/digest/multi_model_selection_page.py
+++ b/src/digest/multi_model_selection_page.py
@@ -65,12 +65,7 @@ def run(self):
self.close_progress.emit()
- model_list = [
- model
- for model in self.model_dict.values()
- if isinstance(model, DigestOnnxModel)
- or isinstance(model, DigestReportModel)
- ]
+ model_list = [model for model in self.model_dict.values()]
self.completed.emit(model_list)
diff --git a/src/digest/styles/darkstyle.qss b/src/digest/styles/darkstyle.qss
index 82dd0f6..29c9bbd 100644
--- a/src/digest/styles/darkstyle.qss
+++ b/src/digest/styles/darkstyle.qss
@@ -191,4 +191,23 @@ QTreeView::item:selected:active {
QTreeView::item:selected:!active {
background-color: #949494;
+}
+
+QRadioButton {
+ spacing: 5px; /* Add spacing between the indicator and text */
+ color: white; /* Set text color to white */
+}
+
+QRadioButton::indicator {
+ /*width: 15px;
+ height: 15px;*/
+ border-radius: 7px; /* Make the indicator circular */
+}
+
+QRadioButton::indicator:unchecked {
+ border: 2px solid gray; /* Add a gray border when unchecked */
+}
+
+QRadioButton::indicator:checked {
+ background-color: lightblue; /* Fill with light blue when checked */
}
\ No newline at end of file
diff --git a/src/digest/subgraph_analysis/find_match.py b/src/digest/subgraph_analysis/find_match.py
index 5366810..7fce7e9 100644
--- a/src/digest/subgraph_analysis/find_match.py
+++ b/src/digest/subgraph_analysis/find_match.py
@@ -5,16 +5,14 @@
import json
import zipfile
import pandas as pd
-import matplotlib.pyplot as plt
+
import numpy as np
from digest.subgraph_analysis.model_encode import (
encode_model,
) # pylint: disable=import-error
-def find_match(
- model_path, model_output_path=None, dequantize=False, replace=False, dark_mode=False
-):
+def find_match(model_path, dequantize=False, replace=False):
# Unzip database if needed
analyzer_path = os.path.dirname(os.path.abspath(__file__))
@@ -71,8 +69,8 @@ def find_match(
for reference_json in models_json:
reference_basename = os.path.basename(reference_json)
reference_name = os.path.splitext(reference_basename)[0]
- with open(reference_json, "r", encoding="utf-8") as reference_json:
- reference_model = json.load(reference_json)
+ with open(reference_json, "r", encoding="utf-8") as ref_json_f:
+ reference_model = json.load(ref_json_f)
score = 0
row = {"Name": reference_name}
@@ -101,54 +99,13 @@ def find_match(
name_list = df_sorted["Name"].tolist()
df_sorted.drop("Score", axis=1, inplace=True)
df_sorted.drop("Name", axis=1, inplace=True)
-
df_sorted = pd.DataFrame(
np.array(df_sorted.values),
index=range(len(name_list)),
columns=df_sorted.columns,
)
- if dark_mode:
- plt.style.use("dark_background")
- fig, ax = plt.subplots(figsize=(12, 10))
- im = ax.imshow(df_sorted, cmap="viridis")
-
- # Show all ticks and label them with the respective list entries
- ax.set_xticks(np.arange(len(df_sorted.columns)))
- ax.set_yticks(np.arange(len(name_list)))
- ax.set_xticklabels([a[:5] for a in df_sorted.columns])
- ax.set_yticklabels(name_list)
-
- # Rotate the tick labels and set their alignment
- plt.setp(ax.get_xticklabels(), rotation=45, ha="right", rotation_mode="anchor")
-
- ax.set_title(f"Model Similarity Heatmap - {model_name}")
-
- cb = plt.colorbar(
- im,
- ax=ax,
- shrink=0.5,
- format="%.2f",
- label="Correlation Ratio",
- orientation="vertical",
- # pad=0.02,
- )
- cb.set_ticks([0, 0.5, 1]) # Set colorbar ticks at 0, 0.5, and 1
- cb.set_ticklabels(
- ["0.0 (Low)", "0.5 (Medium)", "1.0 (High)"]
- ) # Set corresponding labels
- cb.set_label("Correlation Ratio", labelpad=-100)
-
- fig.tight_layout()
-
- if model_output_path is None:
- model_output_path = "heatmap.png"
-
- fig.savefig(model_output_path)
-
- plt.close(fig)
-
- return name_list, reference_model
+ return name_list, reference_model, df_sorted
def main():
@@ -160,12 +117,9 @@ def main():
parser.add_argument(
"--replace", action="store_true", help="Replace models previously encoded"
)
- parser.add_argument(
- "--dark-mode", action="store_true", help="Plot image in dark mode"
- )
args = parser.parse_args()
- find_match(args.model_path, args.dequantize, args.replace, args.dark_mode)
+ find_match(args.model_path, args.dequantize, args.replace)
if __name__ == "__main__":
diff --git a/src/digest/thread.py b/src/digest/thread.py
index cb70123..bf9c546 100644
--- a/src/digest/thread.py
+++ b/src/digest/thread.py
@@ -4,6 +4,9 @@
import os
from typing import List, Optional
from PySide6.QtCore import QThread, Signal, QEventLoop, QTimer
+import matplotlib.pyplot as plt
+import numpy as np
+import pandas as pd
from digest.model_class.digest_onnx_model import DigestOnnxModel
from digest.subgraph_analysis.find_match import find_match
@@ -60,13 +63,13 @@ def run(self):
self.completed.emit(digest_model, self.unique_id)
- def wait(self, timeout=1000):
+ def wait(self, timeout=10000):
wait_threads([self], timeout)
class SimilarityThread(QThread):
- completed_successfully = Signal(bool, str, str, str)
+ completed_successfully = Signal(bool, str, str, str, pd.DataFrame)
def __init__(
self,
@@ -88,24 +91,72 @@ def run(self):
raise ValueError("You must set the model id")
try:
- most_similar, _ = find_match(
+ most_similar, _, df_sorted = find_match(
self.model_filepath,
- self.png_filepath,
dequantize=False,
replace=True,
- dark_mode=True,
)
most_similar = [os.path.basename(path) for path in most_similar]
- most_similar = ",".join(most_similar[1:4])
+ # We convert List[str] to str to send through the signal
+ most_similar = ",".join(most_similar)
self.completed_successfully.emit(
- True, self.model_id, most_similar, self.png_filepath
+ True, self.model_id, most_similar, self.png_filepath, df_sorted
)
except Exception as e: # pylint: disable=broad-exception-caught
most_similar = ""
self.completed_successfully.emit(
- False, self.model_id, most_similar, self.png_filepath
+ False, self.model_id, most_similar, self.png_filepath, df_sorted
)
print(f"Issue creating similarity analysis: {e}")
- def wait(self, timeout=1000):
+ def wait(self, timeout=10000):
wait_threads([self], timeout)
+
+
+def post_process(
+ model_name: str,
+ name_list: List[str],
+ df_sorted: pd.DataFrame,
+ png_file_path: str,
+ dark_mode: bool = True,
+):
+ """Matplotlib is not thread safe so we must do post_processing on the main thread"""
+ if dark_mode:
+ plt.style.use("dark_background")
+ fig, ax = plt.subplots(figsize=(12, 10))
+ im = ax.imshow(df_sorted, cmap="viridis")
+
+ # Show all ticks and label them with the respective list entries
+ ax.set_xticks(np.arange(len(df_sorted.columns)))
+ ax.set_yticks(np.arange(len(name_list)))
+ ax.set_xticklabels([a[:5] for a in df_sorted.columns])
+ ax.set_yticklabels(name_list)
+
+ # Rotate the tick labels and set their alignment
+ plt.setp(ax.get_xticklabels(), rotation=45, ha="right", rotation_mode="anchor")
+
+ ax.set_title(f"Model Similarity Heatmap - {model_name}")
+
+ cb = plt.colorbar(
+ im,
+ ax=ax,
+ shrink=0.5,
+ format="%.2f",
+ label="Correlation Ratio",
+ orientation="vertical",
+ # pad=0.02,
+ )
+ cb.set_ticks([0, 0.5, 1]) # Set colorbar ticks at 0, 0.5, and 1
+ cb.set_ticklabels(
+ ["0.0 (Low)", "0.5 (Medium)", "1.0 (High)"]
+ ) # Set corresponding labels
+ cb.set_label("Correlation Ratio", labelpad=-100)
+
+ fig.tight_layout()
+
+ if png_file_path is None:
+ png_file_path = "heatmap.png"
+
+ fig.savefig(png_file_path)
+
+ plt.close(fig)
diff --git a/src/digest/ui/modelsummary.ui b/src/digest/ui/modelsummary.ui
index d0ea5ca..737cf33 100644
--- a/src/digest/ui/modelsummary.ui
+++ b/src/digest/ui/modelsummary.ui
@@ -6,7 +6,7 @@
0
0
- 1061
+ 1138
837
@@ -153,11 +153,17 @@ border-top-right-radius: 10px;
0
- -558
+ -776
991
1443
+
+
+ 0
+ 0
+
+
background-color: black;
@@ -868,6 +874,9 @@ QFrame:hover {
-
+
+ 6
+
20
@@ -878,6 +887,12 @@ QFrame:hover {
-
+
+
+ 0
+ 0
+
+
QLabel {
font-size: 18px;
@@ -893,8 +908,8 @@ QFrame:hover {
-
-
- 0
+
+ 1
0
@@ -998,6 +1013,18 @@ QScrollBar::handle:vertical {
0
+
+
+ 0
+ 0
+
+
+
+
+ 16777215
+ 16777215
+
+
PointingHandCursor
@@ -1082,7 +1109,7 @@ QPushButton:pressed {
-
-
+
0
0
diff --git a/src/digest/ui/modelsummary_ui.py b/src/digest/ui/modelsummary_ui.py
index 3f3b290..e217372 100644
--- a/src/digest/ui/modelsummary_ui.py
+++ b/src/digest/ui/modelsummary_ui.py
@@ -29,7 +29,7 @@ class Ui_modelSummary(object):
def setupUi(self, modelSummary):
if not modelSummary.objectName():
modelSummary.setObjectName(u"modelSummary")
- modelSummary.resize(1061, 837)
+ modelSummary.resize(1138, 837)
sizePolicy = QSizePolicy(QSizePolicy.Policy.MinimumExpanding, QSizePolicy.Policy.MinimumExpanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
@@ -115,17 +115,22 @@ def setupUi(self, modelSummary):
self.scrollArea.setWidgetResizable(True)
self.scrollAreaWidgetContents = QWidget()
self.scrollAreaWidgetContents.setObjectName(u"scrollAreaWidgetContents")
- self.scrollAreaWidgetContents.setGeometry(QRect(0, -558, 991, 1443))
+ self.scrollAreaWidgetContents.setGeometry(QRect(0, -776, 991, 1443))
+ sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.MinimumExpanding)
+ sizePolicy2.setHorizontalStretch(0)
+ sizePolicy2.setVerticalStretch(0)
+ sizePolicy2.setHeightForWidth(self.scrollAreaWidgetContents.sizePolicy().hasHeightForWidth())
+ self.scrollAreaWidgetContents.setSizePolicy(sizePolicy2)
self.scrollAreaWidgetContents.setStyleSheet(u"background-color: black;")
self.verticalLayout_20 = QVBoxLayout(self.scrollAreaWidgetContents)
self.verticalLayout_20.setObjectName(u"verticalLayout_20")
self.cardFrame = QFrame(self.scrollAreaWidgetContents)
self.cardFrame.setObjectName(u"cardFrame")
- sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Preferred)
- sizePolicy2.setHorizontalStretch(0)
- sizePolicy2.setVerticalStretch(0)
- sizePolicy2.setHeightForWidth(self.cardFrame.sizePolicy().hasHeightForWidth())
- self.cardFrame.setSizePolicy(sizePolicy2)
+ sizePolicy3 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Preferred)
+ sizePolicy3.setHorizontalStretch(0)
+ sizePolicy3.setVerticalStretch(0)
+ sizePolicy3.setHeightForWidth(self.cardFrame.sizePolicy().hasHeightForWidth())
+ self.cardFrame.setSizePolicy(sizePolicy3)
self.cardFrame.setStyleSheet(u"background: transparent; /*rgb(40,40,40)*/")
self.cardFrame.setFrameShape(QFrame.Shape.StyledPanel)
self.cardFrame.setFrameShadow(QFrame.Shadow.Raised)
@@ -134,19 +139,19 @@ def setupUi(self, modelSummary):
self.horizontalLayout.setContentsMargins(-1, -1, -1, 1)
self.cardWidget = QWidget(self.cardFrame)
self.cardWidget.setObjectName(u"cardWidget")
- sizePolicy2.setHeightForWidth(self.cardWidget.sizePolicy().hasHeightForWidth())
- self.cardWidget.setSizePolicy(sizePolicy2)
+ sizePolicy3.setHeightForWidth(self.cardWidget.sizePolicy().hasHeightForWidth())
+ self.cardWidget.setSizePolicy(sizePolicy3)
self.horizontalLayout_2 = QHBoxLayout(self.cardWidget)
self.horizontalLayout_2.setSpacing(13)
self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
self.horizontalLayout_2.setContentsMargins(-1, 6, 25, 35)
self.opsetFrame = QFrame(self.cardWidget)
self.opsetFrame.setObjectName(u"opsetFrame")
- sizePolicy3 = QSizePolicy(QSizePolicy.Policy.Maximum, QSizePolicy.Policy.Fixed)
- sizePolicy3.setHorizontalStretch(0)
- sizePolicy3.setVerticalStretch(0)
- sizePolicy3.setHeightForWidth(self.opsetFrame.sizePolicy().hasHeightForWidth())
- self.opsetFrame.setSizePolicy(sizePolicy3)
+ sizePolicy4 = QSizePolicy(QSizePolicy.Policy.Maximum, QSizePolicy.Policy.Fixed)
+ sizePolicy4.setHorizontalStretch(0)
+ sizePolicy4.setVerticalStretch(0)
+ sizePolicy4.setHeightForWidth(self.opsetFrame.sizePolicy().hasHeightForWidth())
+ self.opsetFrame.setSizePolicy(sizePolicy4)
self.opsetFrame.setMinimumSize(QSize(220, 70))
self.opsetFrame.setMaximumSize(QSize(16777215, 80))
self.opsetFrame.setStyleSheet(u"QFrame {\n"
@@ -164,11 +169,11 @@ def setupUi(self, modelSummary):
self.verticalLayout_5.setContentsMargins(-1, -1, 6, -1)
self.opsetLabel = QLabel(self.opsetFrame)
self.opsetLabel.setObjectName(u"opsetLabel")
- sizePolicy4 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed)
- sizePolicy4.setHorizontalStretch(0)
- sizePolicy4.setVerticalStretch(0)
- sizePolicy4.setHeightForWidth(self.opsetLabel.sizePolicy().hasHeightForWidth())
- self.opsetLabel.setSizePolicy(sizePolicy4)
+ sizePolicy5 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed)
+ sizePolicy5.setHorizontalStretch(0)
+ sizePolicy5.setVerticalStretch(0)
+ sizePolicy5.setHeightForWidth(self.opsetLabel.sizePolicy().hasHeightForWidth())
+ self.opsetLabel.setSizePolicy(sizePolicy5)
self.opsetLabel.setStyleSheet(u"QLabel {\n"
" font-size: 18px;\n"
" font-weight: bold;\n"
@@ -182,8 +187,8 @@ def setupUi(self, modelSummary):
self.opsetVersion = QLabel(self.opsetFrame)
self.opsetVersion.setObjectName(u"opsetVersion")
- sizePolicy4.setHeightForWidth(self.opsetVersion.sizePolicy().hasHeightForWidth())
- self.opsetVersion.setSizePolicy(sizePolicy4)
+ sizePolicy5.setHeightForWidth(self.opsetVersion.sizePolicy().hasHeightForWidth())
+ self.opsetVersion.setSizePolicy(sizePolicy5)
self.opsetVersion.setStyleSheet(u"QLabel {\n"
" font-size: 18px;\n"
" font-weight: bold;\n"
@@ -199,8 +204,8 @@ def setupUi(self, modelSummary):
self.nodesFrame = QFrame(self.cardWidget)
self.nodesFrame.setObjectName(u"nodesFrame")
- sizePolicy3.setHeightForWidth(self.nodesFrame.sizePolicy().hasHeightForWidth())
- self.nodesFrame.setSizePolicy(sizePolicy3)
+ sizePolicy4.setHeightForWidth(self.nodesFrame.sizePolicy().hasHeightForWidth())
+ self.nodesFrame.setSizePolicy(sizePolicy4)
self.nodesFrame.setMinimumSize(QSize(220, 70))
self.nodesFrame.setMaximumSize(QSize(16777215, 80))
self.nodesFrame.setStyleSheet(u"QFrame {\n"
@@ -218,8 +223,8 @@ def setupUi(self, modelSummary):
self.verticalLayout_12.setContentsMargins(-1, 9, -1, -1)
self.nodesLabel = QLabel(self.nodesFrame)
self.nodesLabel.setObjectName(u"nodesLabel")
- sizePolicy4.setHeightForWidth(self.nodesLabel.sizePolicy().hasHeightForWidth())
- self.nodesLabel.setSizePolicy(sizePolicy4)
+ sizePolicy5.setHeightForWidth(self.nodesLabel.sizePolicy().hasHeightForWidth())
+ self.nodesLabel.setSizePolicy(sizePolicy5)
self.nodesLabel.setStyleSheet(u"QLabel {\n"
" font-size: 18px;\n"
" font-weight: bold;\n"
@@ -233,8 +238,8 @@ def setupUi(self, modelSummary):
self.nodes = QLabel(self.nodesFrame)
self.nodes.setObjectName(u"nodes")
- sizePolicy4.setHeightForWidth(self.nodes.sizePolicy().hasHeightForWidth())
- self.nodes.setSizePolicy(sizePolicy4)
+ sizePolicy5.setHeightForWidth(self.nodes.sizePolicy().hasHeightForWidth())
+ self.nodes.setSizePolicy(sizePolicy5)
self.nodes.setMinimumSize(QSize(150, 32))
self.nodes.setStyleSheet(u"QLabel {\n"
" font-size: 18px;\n"
@@ -254,8 +259,8 @@ def setupUi(self, modelSummary):
self.paramFrame = QFrame(self.cardWidget)
self.paramFrame.setObjectName(u"paramFrame")
- sizePolicy3.setHeightForWidth(self.paramFrame.sizePolicy().hasHeightForWidth())
- self.paramFrame.setSizePolicy(sizePolicy3)
+ sizePolicy4.setHeightForWidth(self.paramFrame.sizePolicy().hasHeightForWidth())
+ self.paramFrame.setSizePolicy(sizePolicy4)
self.paramFrame.setMinimumSize(QSize(220, 70))
self.paramFrame.setMaximumSize(QSize(16777215, 80))
self.paramFrame.setStyleSheet(u"QFrame {\n"
@@ -272,8 +277,8 @@ def setupUi(self, modelSummary):
self.verticalLayout_9.setObjectName(u"verticalLayout_9")
self.parametersLabel = QLabel(self.paramFrame)
self.parametersLabel.setObjectName(u"parametersLabel")
- sizePolicy4.setHeightForWidth(self.parametersLabel.sizePolicy().hasHeightForWidth())
- self.parametersLabel.setSizePolicy(sizePolicy4)
+ sizePolicy5.setHeightForWidth(self.parametersLabel.sizePolicy().hasHeightForWidth())
+ self.parametersLabel.setSizePolicy(sizePolicy5)
self.parametersLabel.setStyleSheet(u"QLabel {\n"
" font-size: 18px;\n"
" font-weight: bold;\n"
@@ -287,8 +292,8 @@ def setupUi(self, modelSummary):
self.parameters = QLabel(self.paramFrame)
self.parameters.setObjectName(u"parameters")
- sizePolicy4.setHeightForWidth(self.parameters.sizePolicy().hasHeightForWidth())
- self.parameters.setSizePolicy(sizePolicy4)
+ sizePolicy5.setHeightForWidth(self.parameters.sizePolicy().hasHeightForWidth())
+ self.parameters.setSizePolicy(sizePolicy5)
self.parameters.setStyleSheet(u"QLabel {\n"
" font-size: 18px;\n"
" font-weight: bold;\n"
@@ -304,8 +309,8 @@ def setupUi(self, modelSummary):
self.flopsFrame = QFrame(self.cardWidget)
self.flopsFrame.setObjectName(u"flopsFrame")
- sizePolicy3.setHeightForWidth(self.flopsFrame.sizePolicy().hasHeightForWidth())
- self.flopsFrame.setSizePolicy(sizePolicy3)
+ sizePolicy4.setHeightForWidth(self.flopsFrame.sizePolicy().hasHeightForWidth())
+ self.flopsFrame.setSizePolicy(sizePolicy4)
self.flopsFrame.setMinimumSize(QSize(220, 70))
self.flopsFrame.setMaximumSize(QSize(16777215, 80))
self.flopsFrame.setCursor(QCursor(Qt.CursorShape.ArrowCursor))
@@ -323,8 +328,8 @@ def setupUi(self, modelSummary):
self.verticalLayout_11.setObjectName(u"verticalLayout_11")
self.flopsLabel = QLabel(self.flopsFrame)
self.flopsLabel.setObjectName(u"flopsLabel")
- sizePolicy4.setHeightForWidth(self.flopsLabel.sizePolicy().hasHeightForWidth())
- self.flopsLabel.setSizePolicy(sizePolicy4)
+ sizePolicy5.setHeightForWidth(self.flopsLabel.sizePolicy().hasHeightForWidth())
+ self.flopsLabel.setSizePolicy(sizePolicy5)
self.flopsLabel.setStyleSheet(u"QLabel {\n"
" font-size: 18px;\n"
" font-weight: bold;\n"
@@ -338,11 +343,11 @@ def setupUi(self, modelSummary):
self.flops = QLabel(self.flopsFrame)
self.flops.setObjectName(u"flops")
- sizePolicy5 = QSizePolicy(QSizePolicy.Policy.MinimumExpanding, QSizePolicy.Policy.Fixed)
- sizePolicy5.setHorizontalStretch(0)
- sizePolicy5.setVerticalStretch(0)
- sizePolicy5.setHeightForWidth(self.flops.sizePolicy().hasHeightForWidth())
- self.flops.setSizePolicy(sizePolicy5)
+ sizePolicy6 = QSizePolicy(QSizePolicy.Policy.MinimumExpanding, QSizePolicy.Policy.Fixed)
+ sizePolicy6.setHorizontalStretch(0)
+ sizePolicy6.setVerticalStretch(0)
+ sizePolicy6.setHeightForWidth(self.flops.sizePolicy().hasHeightForWidth())
+ self.flops.setSizePolicy(sizePolicy6)
self.flops.setMinimumSize(QSize(200, 32))
self.flops.setStyleSheet(u"QLabel {\n"
" font-size: 18px;\n"
@@ -380,11 +385,11 @@ def setupUi(self, modelSummary):
self.parametersPieChart = PieChartWidget(self.scrollAreaWidgetContents)
self.parametersPieChart.setObjectName(u"parametersPieChart")
- sizePolicy6 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred)
- sizePolicy6.setHorizontalStretch(0)
- sizePolicy6.setVerticalStretch(0)
- sizePolicy6.setHeightForWidth(self.parametersPieChart.sizePolicy().hasHeightForWidth())
- self.parametersPieChart.setSizePolicy(sizePolicy6)
+ sizePolicy7 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred)
+ sizePolicy7.setHorizontalStretch(0)
+ sizePolicy7.setVerticalStretch(0)
+ sizePolicy7.setHeightForWidth(self.parametersPieChart.sizePolicy().hasHeightForWidth())
+ self.parametersPieChart.setSizePolicy(sizePolicy7)
self.parametersPieChart.setMinimumSize(QSize(300, 500))
self.firstRowChartsLayout.addWidget(self.parametersPieChart)
@@ -397,18 +402,18 @@ def setupUi(self, modelSummary):
self.secondRowChartsLayout.setContentsMargins(-1, 20, -1, -1)
self.similarityWidget = QWidget(self.scrollAreaWidgetContents)
self.similarityWidget.setObjectName(u"similarityWidget")
- sizePolicy6.setHeightForWidth(self.similarityWidget.sizePolicy().hasHeightForWidth())
- self.similarityWidget.setSizePolicy(sizePolicy6)
+ sizePolicy7.setHeightForWidth(self.similarityWidget.sizePolicy().hasHeightForWidth())
+ self.similarityWidget.setSizePolicy(sizePolicy7)
self.similarityWidget.setMinimumSize(QSize(300, 500))
self.placeholderWidget = QVBoxLayout(self.similarityWidget)
self.placeholderWidget.setObjectName(u"placeholderWidget")
self.similarityImg = ClickableLabel(self.similarityWidget)
self.similarityImg.setObjectName(u"similarityImg")
- sizePolicy7 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
- sizePolicy7.setHorizontalStretch(0)
- sizePolicy7.setVerticalStretch(0)
- sizePolicy7.setHeightForWidth(self.similarityImg.sizePolicy().hasHeightForWidth())
- self.similarityImg.setSizePolicy(sizePolicy7)
+ sizePolicy8 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
+ sizePolicy8.setHorizontalStretch(0)
+ sizePolicy8.setVerticalStretch(0)
+ sizePolicy8.setHeightForWidth(self.similarityImg.sizePolicy().hasHeightForWidth())
+ self.similarityImg.setSizePolicy(sizePolicy8)
self.similarityImg.setMinimumSize(QSize(0, 0))
self.similarityImg.setMaximumSize(QSize(16777215, 16777215))
self.similarityImg.setScaledContents(False)
@@ -418,8 +423,8 @@ def setupUi(self, modelSummary):
self.similarityCorrelationStatic = QLabel(self.similarityWidget)
self.similarityCorrelationStatic.setObjectName(u"similarityCorrelationStatic")
- sizePolicy2.setHeightForWidth(self.similarityCorrelationStatic.sizePolicy().hasHeightForWidth())
- self.similarityCorrelationStatic.setSizePolicy(sizePolicy2)
+ sizePolicy3.setHeightForWidth(self.similarityCorrelationStatic.sizePolicy().hasHeightForWidth())
+ self.similarityCorrelationStatic.setSizePolicy(sizePolicy3)
self.similarityCorrelationStatic.setFont(font)
self.similarityCorrelationStatic.setAlignment(Qt.AlignmentFlag.AlignCenter)
@@ -427,8 +432,8 @@ def setupUi(self, modelSummary):
self.similarityCorrelation = QLabel(self.similarityWidget)
self.similarityCorrelation.setObjectName(u"similarityCorrelation")
- sizePolicy2.setHeightForWidth(self.similarityCorrelation.sizePolicy().hasHeightForWidth())
- self.similarityCorrelation.setSizePolicy(sizePolicy2)
+ sizePolicy3.setHeightForWidth(self.similarityCorrelation.sizePolicy().hasHeightForWidth())
+ self.similarityCorrelation.setSizePolicy(sizePolicy3)
palette = QPalette()
brush = QBrush(QColor(0, 0, 0, 255))
brush.setStyle(Qt.SolidPattern)
@@ -452,8 +457,8 @@ def setupUi(self, modelSummary):
self.flopsPieChart = PieChartWidget(self.scrollAreaWidgetContents)
self.flopsPieChart.setObjectName(u"flopsPieChart")
- sizePolicy6.setHeightForWidth(self.flopsPieChart.sizePolicy().hasHeightForWidth())
- self.flopsPieChart.setSizePolicy(sizePolicy6)
+ sizePolicy7.setHeightForWidth(self.flopsPieChart.sizePolicy().hasHeightForWidth())
+ self.flopsPieChart.setSizePolicy(sizePolicy7)
self.flopsPieChart.setMinimumSize(QSize(300, 500))
self.secondRowChartsLayout.addWidget(self.flopsPieChart)
@@ -465,12 +470,18 @@ def setupUi(self, modelSummary):
self.verticalLayout_20.addLayout(self.chartsLayout)
self.thirdRowInputsLayout = QHBoxLayout()
+ self.thirdRowInputsLayout.setSpacing(6)
self.thirdRowInputsLayout.setObjectName(u"thirdRowInputsLayout")
self.thirdRowInputsLayout.setContentsMargins(20, 30, -1, -1)
self.inputsLayout = QVBoxLayout()
self.inputsLayout.setObjectName(u"inputsLayout")
self.inputsLabel = QLabel(self.scrollAreaWidgetContents)
self.inputsLabel.setObjectName(u"inputsLabel")
+ sizePolicy9 = QSizePolicy(QSizePolicy.Policy.Maximum, QSizePolicy.Policy.Maximum)
+ sizePolicy9.setHorizontalStretch(0)
+ sizePolicy9.setVerticalStretch(0)
+ sizePolicy9.setHeightForWidth(self.inputsLabel.sizePolicy().hasHeightForWidth())
+ self.inputsLabel.setSizePolicy(sizePolicy9)
self.inputsLabel.setStyleSheet(u"QLabel {\n"
" font-size: 18px;\n"
" font-weight: bold;\n"
@@ -491,11 +502,11 @@ def setupUi(self, modelSummary):
__qtablewidgetitem3 = QTableWidgetItem()
self.inputsTable.setHorizontalHeaderItem(3, __qtablewidgetitem3)
self.inputsTable.setObjectName(u"inputsTable")
- sizePolicy8 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Preferred)
- sizePolicy8.setHorizontalStretch(0)
- sizePolicy8.setVerticalStretch(0)
- sizePolicy8.setHeightForWidth(self.inputsTable.sizePolicy().hasHeightForWidth())
- self.inputsTable.setSizePolicy(sizePolicy8)
+ sizePolicy10 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
+ sizePolicy10.setHorizontalStretch(1)
+ sizePolicy10.setVerticalStretch(0)
+ sizePolicy10.setHeightForWidth(self.inputsTable.sizePolicy().hasHeightForWidth())
+ self.inputsTable.setSizePolicy(sizePolicy10)
self.inputsTable.setStyleSheet(u"QTableWidget {\n"
" gridline-color: #353535; /* Grid lines */\n"
" selection-background-color: #3949AB; /* Blue selection */\n"
@@ -553,11 +564,13 @@ def setupUi(self, modelSummary):
self.freezeButton = QPushButton(self.scrollAreaWidgetContents)
self.freezeButton.setObjectName(u"freezeButton")
- sizePolicy9 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed)
- sizePolicy9.setHorizontalStretch(0)
- sizePolicy9.setVerticalStretch(0)
- sizePolicy9.setHeightForWidth(self.freezeButton.sizePolicy().hasHeightForWidth())
- self.freezeButton.setSizePolicy(sizePolicy9)
+ sizePolicy11 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed)
+ sizePolicy11.setHorizontalStretch(0)
+ sizePolicy11.setVerticalStretch(0)
+ sizePolicy11.setHeightForWidth(self.freezeButton.sizePolicy().hasHeightForWidth())
+ self.freezeButton.setSizePolicy(sizePolicy11)
+ self.freezeButton.setMinimumSize(QSize(0, 0))
+ self.freezeButton.setMaximumSize(QSize(16777215, 16777215))
self.freezeButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
self.freezeButton.setStyleSheet(u"QPushButton {\n"
" color: white;\n"
@@ -619,8 +632,11 @@ def setupUi(self, modelSummary):
__qtablewidgetitem7 = QTableWidgetItem()
self.outputsTable.setHorizontalHeaderItem(3, __qtablewidgetitem7)
self.outputsTable.setObjectName(u"outputsTable")
- sizePolicy8.setHeightForWidth(self.outputsTable.sizePolicy().hasHeightForWidth())
- self.outputsTable.setSizePolicy(sizePolicy8)
+ sizePolicy12 = QSizePolicy(QSizePolicy.Policy.MinimumExpanding, QSizePolicy.Policy.Expanding)
+ sizePolicy12.setHorizontalStretch(0)
+ sizePolicy12.setVerticalStretch(0)
+ sizePolicy12.setHeightForWidth(self.outputsTable.sizePolicy().hasHeightForWidth())
+ self.outputsTable.setSizePolicy(sizePolicy12)
self.outputsTable.setStyleSheet(u"QTableWidget {\n"
" gridline-color: #353535; /* Grid lines */\n"
" selection-background-color: #3949AB; /* Blue selection */\n"
@@ -687,8 +703,8 @@ def setupUi(self, modelSummary):
self.sidePaneFrame = QFrame(modelSummary)
self.sidePaneFrame.setObjectName(u"sidePaneFrame")
- sizePolicy2.setHeightForWidth(self.sidePaneFrame.sizePolicy().hasHeightForWidth())
- self.sidePaneFrame.setSizePolicy(sizePolicy2)
+ sizePolicy3.setHeightForWidth(self.sidePaneFrame.sizePolicy().hasHeightForWidth())
+ self.sidePaneFrame.setSizePolicy(sizePolicy3)
self.sidePaneFrame.setMinimumSize(QSize(0, 0))
self.sidePaneFrame.setStyleSheet(u"QFrame {\n"
" /*background: rgb(30,30,30);*/\n"
@@ -744,8 +760,8 @@ def setupUi(self, modelSummary):
__qtablewidgetitem21 = QTableWidgetItem()
self.modelProtoTable.setItem(3, 1, __qtablewidgetitem21)
self.modelProtoTable.setObjectName(u"modelProtoTable")
- sizePolicy2.setHeightForWidth(self.modelProtoTable.sizePolicy().hasHeightForWidth())
- self.modelProtoTable.setSizePolicy(sizePolicy2)
+ sizePolicy3.setHeightForWidth(self.modelProtoTable.sizePolicy().hasHeightForWidth())
+ self.modelProtoTable.setSizePolicy(sizePolicy3)
self.modelProtoTable.setMinimumSize(QSize(0, 0))
self.modelProtoTable.setMaximumSize(QSize(16777215, 100))
self.modelProtoTable.setStyleSheet(u"QTableWidget::item {\n"
@@ -794,11 +810,8 @@ def setupUi(self, modelSummary):
__qtablewidgetitem23 = QTableWidgetItem()
self.importsTable.setHorizontalHeaderItem(1, __qtablewidgetitem23)
self.importsTable.setObjectName(u"importsTable")
- sizePolicy10 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.MinimumExpanding)
- sizePolicy10.setHorizontalStretch(0)
- sizePolicy10.setVerticalStretch(0)
- sizePolicy10.setHeightForWidth(self.importsTable.sizePolicy().hasHeightForWidth())
- self.importsTable.setSizePolicy(sizePolicy10)
+ sizePolicy2.setHeightForWidth(self.importsTable.sizePolicy().hasHeightForWidth())
+ self.importsTable.setSizePolicy(sizePolicy2)
self.importsTable.setStyleSheet(u"QTableWidget::item {\n"
" color: white;\n"
" padding: 5px;\n"
diff --git a/src/digest/ui/multimodelanalysis.ui b/src/digest/ui/multimodelanalysis.ui
index cf044e3..16109d0 100644
--- a/src/digest/ui/multimodelanalysis.ui
+++ b/src/digest/ui/multimodelanalysis.ui
@@ -6,8 +6,8 @@
0
0
- 908
- 647
+ 1085
+ 866
@@ -51,7 +51,7 @@
QFrame::Shadow::Raised
-
-
+
-
@@ -176,7 +176,7 @@
-
-
+
0
0
@@ -198,8 +198,8 @@
0
0
- 888
- 464
+ 1065
+ 688
@@ -242,6 +242,12 @@
-
+
+
+ 0
+ 0
+
+
QFrame::Shape::StyledPanel
@@ -258,7 +264,7 @@
QFrame::Shadow::Raised
- -
+
-
@@ -279,17 +285,19 @@
-
+
+
+ 0
+ 0
+
+
QFrame::Shape::StyledPanel
QFrame::Shadow::Raised
-
-
-
-
-
-
+
diff --git a/src/digest/ui/multimodelanalysis_ui.py b/src/digest/ui/multimodelanalysis_ui.py
index b9da242..9f4b359 100644
--- a/src/digest/ui/multimodelanalysis_ui.py
+++ b/src/digest/ui/multimodelanalysis_ui.py
@@ -26,7 +26,7 @@ class Ui_multiModelAnalysis(object):
def setupUi(self, multiModelAnalysis):
if not multiModelAnalysis.objectName():
multiModelAnalysis.setObjectName(u"multiModelAnalysis")
- multiModelAnalysis.resize(908, 647)
+ multiModelAnalysis.resize(1085, 866)
sizePolicy = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
@@ -71,7 +71,7 @@ def setupUi(self, multiModelAnalysis):
self.modelName.setIndent(5)
self.modelName.setTextInteractionFlags(Qt.TextInteractionFlag.LinksAccessibleByMouse|Qt.TextInteractionFlag.TextSelectableByKeyboard|Qt.TextInteractionFlag.TextSelectableByMouse)
- self.verticalLayout_17.addWidget(self.modelName, 0, Qt.AlignmentFlag.AlignTop)
+ self.verticalLayout_17.addWidget(self.modelName)
self.summaryTopBannerLayout.addWidget(self.modelNameFrame)
@@ -127,7 +127,7 @@ def setupUi(self, multiModelAnalysis):
self.scrollArea = QScrollArea(multiModelAnalysis)
self.scrollArea.setObjectName(u"scrollArea")
- sizePolicy4 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.MinimumExpanding)
+ sizePolicy4 = QSizePolicy(QSizePolicy.Policy.MinimumExpanding, QSizePolicy.Policy.MinimumExpanding)
sizePolicy4.setHorizontalStretch(0)
sizePolicy4.setVerticalStretch(0)
sizePolicy4.setHeightForWidth(self.scrollArea.sizePolicy().hasHeightForWidth())
@@ -138,7 +138,7 @@ def setupUi(self, multiModelAnalysis):
self.scrollArea.setWidgetResizable(True)
self.scrollAreaWidgetContents = QWidget()
self.scrollAreaWidgetContents.setObjectName(u"scrollAreaWidgetContents")
- self.scrollAreaWidgetContents.setGeometry(QRect(0, 0, 888, 464))
+ self.scrollAreaWidgetContents.setGeometry(QRect(0, 0, 1065, 688))
sizePolicy5 = QSizePolicy(QSizePolicy.Policy.MinimumExpanding, QSizePolicy.Policy.MinimumExpanding)
sizePolicy5.setHorizontalStretch(0)
sizePolicy5.setVerticalStretch(100)
@@ -165,6 +165,11 @@ def setupUi(self, multiModelAnalysis):
self.frame_2 = QFrame(self.scrollAreaWidgetContents)
self.frame_2.setObjectName(u"frame_2")
+ sizePolicy7 = QSizePolicy(QSizePolicy.Policy.MinimumExpanding, QSizePolicy.Policy.Preferred)
+ sizePolicy7.setHorizontalStretch(0)
+ sizePolicy7.setVerticalStretch(0)
+ sizePolicy7.setHeightForWidth(self.frame_2.sizePolicy().hasHeightForWidth())
+ self.frame_2.setSizePolicy(sizePolicy7)
self.frame_2.setFrameShape(QFrame.Shape.StyledPanel)
self.frame_2.setFrameShadow(QFrame.Shadow.Raised)
self.horizontalLayout_2 = QHBoxLayout(self.frame_2)
@@ -177,29 +182,29 @@ def setupUi(self, multiModelAnalysis):
self.verticalLayout_3.setObjectName(u"verticalLayout_3")
self.opHistogramChart = HistogramChartWidget(self.combinedHistogramFrame)
self.opHistogramChart.setObjectName(u"opHistogramChart")
- sizePolicy7 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum)
- sizePolicy7.setHorizontalStretch(0)
- sizePolicy7.setVerticalStretch(0)
- sizePolicy7.setHeightForWidth(self.opHistogramChart.sizePolicy().hasHeightForWidth())
- self.opHistogramChart.setSizePolicy(sizePolicy7)
+ sizePolicy8 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum)
+ sizePolicy8.setHorizontalStretch(0)
+ sizePolicy8.setVerticalStretch(0)
+ sizePolicy8.setHeightForWidth(self.opHistogramChart.sizePolicy().hasHeightForWidth())
+ self.opHistogramChart.setSizePolicy(sizePolicy8)
self.opHistogramChart.setMinimumSize(QSize(500, 300))
- self.verticalLayout_3.addWidget(self.opHistogramChart, 0, Qt.AlignmentFlag.AlignTop)
+ self.verticalLayout_3.addWidget(self.opHistogramChart)
self.horizontalLayout_2.addWidget(self.combinedHistogramFrame)
self.stackedHistogramFrame = QFrame(self.frame_2)
self.stackedHistogramFrame.setObjectName(u"stackedHistogramFrame")
+ sizePolicy9 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred)
+ sizePolicy9.setHorizontalStretch(0)
+ sizePolicy9.setVerticalStretch(0)
+ sizePolicy9.setHeightForWidth(self.stackedHistogramFrame.sizePolicy().hasHeightForWidth())
+ self.stackedHistogramFrame.setSizePolicy(sizePolicy9)
self.stackedHistogramFrame.setFrameShape(QFrame.Shape.StyledPanel)
self.stackedHistogramFrame.setFrameShadow(QFrame.Shadow.Raised)
self.verticalLayout_5 = QVBoxLayout(self.stackedHistogramFrame)
self.verticalLayout_5.setObjectName(u"verticalLayout_5")
- self.verticalLayout_4 = QVBoxLayout()
- self.verticalLayout_4.setObjectName(u"verticalLayout_4")
-
- self.verticalLayout_5.addLayout(self.verticalLayout_4)
-
self.horizontalLayout_2.addWidget(self.stackedHistogramFrame)
diff --git a/src/digest/ui/multimodelselection_page.ui b/src/digest/ui/multimodelselection_page.ui
index 0071b47..034ed88 100644
--- a/src/digest/ui/multimodelselection_page.ui
+++ b/src/digest/ui/multimodelselection_page.ui
@@ -218,13 +218,25 @@
- -
-
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 550
+ 0
+
+
- 0 selected models
+ The following models were found to be duplicates and have been deselected from the list on the left.
true
@@ -232,20 +244,33 @@
-
-
-
-
-
-
- The following models were found to be duplicates and have been deselected from the list on the left.
+
+
+ Qt::Orientation::Horizontal
-
- true
+
+
+ 40
+ 20
+
-
+
+ -
+
+
+
+
+
+ 0 selected models
+
+
+ true
+
+
+
-
-
diff --git a/src/digest/ui/multimodelselection_page_ui.py b/src/digest/ui/multimodelselection_page_ui.py
index 79ed6a6..0e25178 100644
--- a/src/digest/ui/multimodelselection_page_ui.py
+++ b/src/digest/ui/multimodelselection_page_ui.py
@@ -135,23 +135,33 @@ def setupUi(self, MultiModelSelection):
self.horizontalLayout_3.addWidget(self.radioReports)
- self.numSelectedLabel = QLabel(MultiModelSelection)
- self.numSelectedLabel.setObjectName(u"numSelectedLabel")
- self.numSelectedLabel.setStyleSheet(u"")
- self.numSelectedLabel.setWordWrap(True)
-
- self.horizontalLayout_3.addWidget(self.numSelectedLabel)
-
self.duplicateLabel = QLabel(MultiModelSelection)
self.duplicateLabel.setObjectName(u"duplicateLabel")
+ sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Preferred)
+ sizePolicy2.setHorizontalStretch(0)
+ sizePolicy2.setVerticalStretch(0)
+ sizePolicy2.setHeightForWidth(self.duplicateLabel.sizePolicy().hasHeightForWidth())
+ self.duplicateLabel.setSizePolicy(sizePolicy2)
+ self.duplicateLabel.setMinimumSize(QSize(550, 0))
self.duplicateLabel.setStyleSheet(u"")
self.duplicateLabel.setWordWrap(True)
self.horizontalLayout_3.addWidget(self.duplicateLabel)
+ self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+
+ self.horizontalLayout_3.addItem(self.horizontalSpacer_2)
+
self.verticalLayout.addLayout(self.horizontalLayout_3)
+ self.numSelectedLabel = QLabel(MultiModelSelection)
+ self.numSelectedLabel.setObjectName(u"numSelectedLabel")
+ self.numSelectedLabel.setStyleSheet(u"")
+ self.numSelectedLabel.setWordWrap(True)
+
+ self.verticalLayout.addWidget(self.numSelectedLabel)
+
self.columnsLayout = QHBoxLayout()
self.columnsLayout.setObjectName(u"columnsLayout")
self.leftColumnLayout = QVBoxLayout()
@@ -172,11 +182,11 @@ def setupUi(self, MultiModelSelection):
self.rightColumnLayout.setObjectName(u"rightColumnLayout")
self.duplicateListWidget = QListWidget(MultiModelSelection)
self.duplicateListWidget.setObjectName(u"duplicateListWidget")
- sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
- sizePolicy2.setHorizontalStretch(0)
- sizePolicy2.setVerticalStretch(0)
- sizePolicy2.setHeightForWidth(self.duplicateListWidget.sizePolicy().hasHeightForWidth())
- self.duplicateListWidget.setSizePolicy(sizePolicy2)
+ sizePolicy3 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
+ sizePolicy3.setHorizontalStretch(0)
+ sizePolicy3.setVerticalStretch(0)
+ sizePolicy3.setHeightForWidth(self.duplicateListWidget.sizePolicy().hasHeightForWidth())
+ self.duplicateListWidget.setSizePolicy(sizePolicy3)
self.duplicateListWidget.setStyleSheet(u"")
self.duplicateListWidget.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
self.duplicateListWidget.setSelectionMode(QAbstractItemView.SelectionMode.MultiSelection)
@@ -209,7 +219,7 @@ def retranslateUi(self, MultiModelSelection):
self.radioAll.setText(QCoreApplication.translate("MultiModelSelection", u"All", None))
self.radioONNX.setText(QCoreApplication.translate("MultiModelSelection", u"ONNX", None))
self.radioReports.setText(QCoreApplication.translate("MultiModelSelection", u"Reports", None))
- self.numSelectedLabel.setText(QCoreApplication.translate("MultiModelSelection", u"0 selected models", None))
self.duplicateLabel.setText(QCoreApplication.translate("MultiModelSelection", u"The following models were found to be duplicates and have been deselected from the list on the left.", None))
+ self.numSelectedLabel.setText(QCoreApplication.translate("MultiModelSelection", u"0 selected models", None))
# retranslateUi