refactor: prune orphaned attic modules and standardize project configurations
- Move orphaned modules (data_segment.py, contour_models.py, marching_squares.py) to attic/. - Standardize local settings logic, serial port parameters, and graph view plots. - Update pyproject.toml pyside6-project dependencies and configure gitignore.
This commit is contained in:
@@ -41,3 +41,6 @@ dist/
|
|||||||
*.ico
|
*.ico
|
||||||
# Superpowers brainstorming visual companion
|
# Superpowers brainstorming visual companion
|
||||||
.superpowers/
|
.superpowers/
|
||||||
|
.llm-wiki/
|
||||||
|
.agents/
|
||||||
|
.pi/
|
||||||
|
|||||||
+7
-3
@@ -49,7 +49,7 @@ files = [
|
|||||||
"src/pygui/ISC/Tabs/qmldir",
|
"src/pygui/ISC/Tabs/qmldir",
|
||||||
"src/pygui/__main__.py",
|
"src/pygui/__main__.py",
|
||||||
"src/pygui/backend/contour_models.py",
|
"src/pygui/backend/contour_models.py",
|
||||||
"src/pygui/backend/crypto_helper.py",
|
"src/pygui/backend/crypto/crypto_helper.py",
|
||||||
"src/pygui/backend/csv_file_metadata.py",
|
"src/pygui/backend/csv_file_metadata.py",
|
||||||
"src/pygui/backend/data_model.py",
|
"src/pygui/backend/data_model.py",
|
||||||
"src/pygui/backend/data_segment.py",
|
"src/pygui/backend/data_segment.py",
|
||||||
@@ -103,7 +103,7 @@ environments = [
|
|||||||
# ===== Ruff Linter and Formatter =====
|
# ===== Ruff Linter and Formatter =====
|
||||||
[tool.ruff]
|
[tool.ruff]
|
||||||
target-version = "py311"
|
target-version = "py311"
|
||||||
line-length = 100
|
line-length = 125
|
||||||
|
|
||||||
[tool.ruff.lint]
|
[tool.ruff.lint]
|
||||||
select = [
|
select = [
|
||||||
@@ -113,7 +113,11 @@ select = [
|
|||||||
"I", # isort (import sorting)
|
"I", # isort (import sorting)
|
||||||
"N", # pep8-naming
|
"N", # pep8-naming
|
||||||
]
|
]
|
||||||
ignore = []
|
ignore = [
|
||||||
|
"N802", # Function name should be lowercase (standard for Qt Slots and Properties)
|
||||||
|
"N815", # Class attribute should not be mixedCase (standard for Qt Properties and Signals)
|
||||||
|
"E702", # Multiple statements on one line (semicolon, standard for inline Qt property setters with self.update())
|
||||||
|
]
|
||||||
|
|
||||||
# ===== Mypy Static Type Checker =====
|
# ===== Mypy Static Type Checker =====
|
||||||
[tool.mypy]
|
[tool.mypy]
|
||||||
|
|||||||
@@ -225,7 +225,7 @@ Item {
|
|||||||
Layout.preferredWidth: 90
|
Layout.preferredWidth: 90
|
||||||
Layout.preferredHeight: Theme.settingsButtonHeight
|
Layout.preferredHeight: Theme.settingsButtonHeight
|
||||||
onClicked: {
|
onClicked: {
|
||||||
settingsModel.setChamberId(chamberField.text);
|
settingsModel.ChamberId = chamberField.text;
|
||||||
settingsModel.saveSettings();
|
settingsModel.saveSettings();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -296,7 +296,7 @@ Item {
|
|||||||
SettingsToggle {
|
SettingsToggle {
|
||||||
text: "Reverse Z Wafer"
|
text: "Reverse Z Wafer"
|
||||||
checked: settingsModel.reverseZWafer
|
checked: settingsModel.reverseZWafer
|
||||||
onToggled: settingsModel.setReverseZWafer(checked)
|
onToggled: settingsModel.reverseZWafer = checked
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ from pygui.backend.controllers.session_controller import SessionController # no
|
|||||||
from pygui.backend.data.csv_file_metadata import CSVFileMetadata # noqa: F401
|
from pygui.backend.data.csv_file_metadata import CSVFileMetadata # noqa: F401
|
||||||
from pygui.backend.data.csv_recorder import CsvRecorder # noqa: F401
|
from pygui.backend.data.csv_recorder import CsvRecorder # noqa: F401
|
||||||
from pygui.backend.data.data_records import read_data_records # noqa: F401
|
from pygui.backend.data.data_records import read_data_records # noqa: F401
|
||||||
from pygui.backend.data.data_segment import DataSegment # noqa: F401
|
|
||||||
from pygui.backend.data.file_browser import FileBrowser # noqa: F401
|
from pygui.backend.data.file_browser import FileBrowser # noqa: F401
|
||||||
from pygui.backend.data.local_settings import LocalSettings # noqa: F401
|
from pygui.backend.data.local_settings import LocalSettings # noqa: F401
|
||||||
from pygui.backend.data.local_settings_model import LocalSettingsModel # noqa: F401
|
from pygui.backend.data.local_settings_model import LocalSettingsModel # noqa: F401
|
||||||
@@ -19,7 +18,6 @@ from pygui.backend.models.sensor_editor import SensorEditor # noqa: F401
|
|||||||
from pygui.backend.models.session_model import SessionModel # noqa: F401
|
from pygui.backend.models.session_model import SessionModel # noqa: F401
|
||||||
from pygui.backend.models.stability_detector import StabilityDetector # noqa: F401
|
from pygui.backend.models.stability_detector import StabilityDetector # noqa: F401
|
||||||
from pygui.backend.models.threshold_classifier import ThresholdConfig # noqa: F401
|
from pygui.backend.models.threshold_classifier import ThresholdConfig # noqa: F401
|
||||||
from pygui.backend.visualization.contour_models import ContourLine, ContourSegment # noqa: F401
|
|
||||||
from pygui.backend.visualization.graph_view import GraphView # noqa: F401
|
from pygui.backend.visualization.graph_view import GraphView # noqa: F401
|
||||||
from pygui.backend.visualization.rbf_heatmap import interpolate_field # noqa: F401
|
from pygui.backend.visualization.rbf_heatmap import interpolate_field # noqa: F401
|
||||||
from pygui.backend.visualization.wafer_map_item import WaferMapItem # noqa: F401
|
from pygui.backend.visualization.wafer_map_item import WaferMapItem # noqa: F401
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@ from typing import List, Optional, Tuple
|
|||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
from pygui.backend.visualization.contour_models import ContourLine, ContourSegment
|
from pygui.backend.attic.contour_models import ContourLine, ContourSegment
|
||||||
|
|
||||||
|
|
||||||
# ===== Contour Generation =====
|
# ===== Contour Generation =====
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
from pygui.backend.data.csv_file_metadata import CSVFileMetadata
|
from pygui.backend.data.csv_file_metadata import CSVFileMetadata
|
||||||
from pygui.backend.data.csv_recorder import CsvRecorder
|
from pygui.backend.data.csv_recorder import CsvRecorder
|
||||||
from pygui.backend.data.data_records import is_official_csv, read_data_records, read_official_csv
|
from pygui.backend.data.data_records import is_official_csv, read_data_records, read_official_csv
|
||||||
from pygui.backend.data.data_segment import DataSegment
|
|
||||||
from pygui.backend.data.file_browser import FileBrowser
|
from pygui.backend.data.file_browser import FileBrowser
|
||||||
from pygui.backend.data.local_settings import LocalSettings
|
from pygui.backend.data.local_settings import LocalSettings
|
||||||
from pygui.backend.data.local_settings_model import LocalSettingsModel
|
from pygui.backend.data.local_settings_model import LocalSettingsModel
|
||||||
@@ -10,7 +9,6 @@ from pygui.backend.data.local_settings_model import LocalSettingsModel
|
|||||||
__all__ = [
|
__all__ = [
|
||||||
"CsvRecorder", "CSVFileMetadata",
|
"CsvRecorder", "CSVFileMetadata",
|
||||||
"read_data_records", "is_official_csv", "read_official_csv",
|
"read_data_records", "is_official_csv", "read_official_csv",
|
||||||
"DataSegment",
|
|
||||||
"FileBrowser",
|
"FileBrowser",
|
||||||
"LocalSettings", "LocalSettingsModel",
|
"LocalSettings", "LocalSettingsModel",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
import json
|
import json
|
||||||
|
import logging
|
||||||
import os
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
# ===== Settings Persistence Model =====
|
# ===== Settings Persistence Model =====
|
||||||
class LocalSettings:
|
class LocalSettings:
|
||||||
@@ -51,7 +54,8 @@ class LocalSettings:
|
|||||||
if hasattr(settings, key):
|
if hasattr(settings, key):
|
||||||
setattr(settings, key, value)
|
setattr(settings, key, value)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Error reading setting file: {e}")
|
log = logging.getLogger(__name__)
|
||||||
|
log.warning("Error reading setting file: %s",e)
|
||||||
|
|
||||||
return settings
|
return settings
|
||||||
|
|
||||||
@@ -66,7 +70,7 @@ class LocalSettings:
|
|||||||
with open(path, "w", encoding="utf-8") as f:
|
with open(path, "w", encoding="utf-8") as f:
|
||||||
json.dump(data, f, indent=4)
|
json.dump(data, f, indent=4)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Error saving settings: {e}")
|
log.exception("Error saving settings: %s",e)
|
||||||
|
|
||||||
# ===== Master File Helpers =====
|
# ===== Master File Helpers =====
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
@@ -334,27 +334,3 @@ class LocalSettingsModel(QObject):
|
|||||||
@Slot(str)
|
@Slot(str)
|
||||||
def clearMaster(self, family: str) -> None:
|
def clearMaster(self, family: str) -> None:
|
||||||
self.setMaster(family, "")
|
self.setMaster(family, "")
|
||||||
|
|
||||||
@Slot(str)
|
|
||||||
def setChamberId(self, value: str) -> None:
|
|
||||||
self.chamberId = value
|
|
||||||
|
|
||||||
@Slot(bool)
|
|
||||||
def setReverseZWafer(self, value: bool) -> None:
|
|
||||||
self.reverseZWafer = value
|
|
||||||
|
|
||||||
@Slot(bool)
|
|
||||||
def setDebugMode(self, value: bool) -> None:
|
|
||||||
self.debugMode = value
|
|
||||||
|
|
||||||
@Slot(int)
|
|
||||||
def setWaferReadTimeout(self, value: int) -> None:
|
|
||||||
self.waferReadTimeout = value
|
|
||||||
|
|
||||||
@Slot(int)
|
|
||||||
def setWaferDetectTimeout(self, value: int) -> None:
|
|
||||||
self.waferDetectTimeout = value
|
|
||||||
|
|
||||||
@Slot(int)
|
|
||||||
def setWaferRetries(self, value: int) -> None:
|
|
||||||
self.waferRetries = value
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# ===== Visualization Sub-package =====
|
# ===== Visualization Sub-package =====
|
||||||
from pygui.backend.visualization.contour_models import ContourLine, ContourSegment
|
|
||||||
from pygui.backend.visualization.graph_view import GraphView
|
from pygui.backend.visualization.graph_view import GraphView
|
||||||
from pygui.backend.visualization.rbf_heatmap import interpolate_field
|
from pygui.backend.visualization.rbf_heatmap import interpolate_field
|
||||||
from pygui.backend.visualization.wafer_map_item import WaferMapItem
|
from pygui.backend.visualization.wafer_map_item import WaferMapItem
|
||||||
@@ -7,5 +6,4 @@ from pygui.backend.visualization.wafer_map_item import WaferMapItem
|
|||||||
__all__ = [
|
__all__ = [
|
||||||
"WaferMapItem", "GraphView",
|
"WaferMapItem", "GraphView",
|
||||||
"interpolate_field",
|
"interpolate_field",
|
||||||
"ContourLine", "ContourSegment",
|
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -9,16 +9,13 @@ from __future__ import annotations
|
|||||||
import logging
|
import logging
|
||||||
from typing import Any, Optional
|
from typing import Any, Optional
|
||||||
|
|
||||||
|
import pyqtgraph as pg
|
||||||
|
from pyqtgraph import PlotWidget
|
||||||
from PySide6.QtCore import Property, QObject, Signal, Slot
|
from PySide6.QtCore import Property, QObject, Signal, Slot
|
||||||
from PySide6.QtWidgets import QWidget
|
from PySide6.QtWidgets import QWidget
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
# Import pyqtgraph after Qt is initialized
|
|
||||||
import pyqtgraph as pg
|
|
||||||
from pyqtgraph import PlotWidget
|
|
||||||
|
|
||||||
|
|
||||||
class GraphView(QObject):
|
class GraphView(QObject):
|
||||||
"""QML-exposed controller for a pyqtgraph line chart.
|
"""QML-exposed controller for a pyqtgraph line chart.
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ class ZWaferParser:
|
|||||||
# ===== Header Parsing =====
|
# ===== Header Parsing =====
|
||||||
def _process_header(self, file_obj) -> ZWaferData:
|
def _process_header(self, file_obj) -> ZWaferData:
|
||||||
"""Parse header and sensor layout from open file object.
|
"""Parse header and sensor layout from open file object.
|
||||||
|
|
||||||
Handles two CSV row orderings:
|
Handles two CSV row orderings:
|
||||||
1. Label/X/Y rows BEFORE 'data' (fixture test format)
|
1. Label/X/Y rows BEFORE 'data' (fixture test format)
|
||||||
2. 'data' row BEFORE Label/X/Y (some real CSV files)
|
2. 'data' row BEFORE Label/X/Y (some real CSV files)
|
||||||
|
|||||||
@@ -196,7 +196,6 @@ class SerialPort:
|
|||||||
bytes 1016-1019 : Runtime (2 bytes hex → decimal seconds)
|
bytes 1016-1019 : Runtime (2 bytes hex → decimal seconds)
|
||||||
bytes 1020-1023 : Cycle time (2 bytes hex → decimal cycles)
|
bytes 1020-1023 : Cycle time (2 bytes hex → decimal cycles)
|
||||||
"""
|
"""
|
||||||
raw = bytes.fromhex(hex_response)
|
|
||||||
|
|
||||||
family_code = self._hex_to_ascii(hex_response[0:2])
|
family_code = self._hex_to_ascii(hex_response[0:2])
|
||||||
serial_num = f"{family_code}{int(hex_response[2:6], 16):05d}"
|
serial_num = f"{family_code}{int(hex_response[2:6], 16):05d}"
|
||||||
|
|||||||
Reference in New Issue
Block a user