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:
jack
2026-06-18 17:09:24 -07:00
parent 93868bcde4
commit 5514653b94
14 changed files with 23 additions and 47 deletions
+3
View File
@@ -41,3 +41,6 @@ dist/
*.ico *.ico
# Superpowers brainstorming visual companion # Superpowers brainstorming visual companion
.superpowers/ .superpowers/
.llm-wiki/
.agents/
.pi/
+7 -3
View File
@@ -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]
+2 -2
View File
@@ -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
} }
} }
} }
-2
View File
@@ -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
@@ -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
View File
@@ -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",
] ]
+6 -2
View File
@@ -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.
+2 -3
View File
@@ -33,10 +33,9 @@ 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)
The C# parser handles both by collecting sensor layout rows The C# parser handles both by collecting sensor layout rows
regardless of whether 'data' has been seen. regardless of whether 'data' has been seen.
""" """
-1
View File
@@ -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}"