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
# Superpowers brainstorming visual companion
.superpowers/
.llm-wiki/
.agents/
.pi/
+7 -3
View File
@@ -49,7 +49,7 @@ files = [
"src/pygui/ISC/Tabs/qmldir",
"src/pygui/__main__.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/data_model.py",
"src/pygui/backend/data_segment.py",
@@ -103,7 +103,7 @@ environments = [
# ===== Ruff Linter and Formatter =====
[tool.ruff]
target-version = "py311"
line-length = 100
line-length = 125
[tool.ruff.lint]
select = [
@@ -113,7 +113,11 @@ select = [
"I", # isort (import sorting)
"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 =====
[tool.mypy]
+2 -2
View File
@@ -225,7 +225,7 @@ Item {
Layout.preferredWidth: 90
Layout.preferredHeight: Theme.settingsButtonHeight
onClicked: {
settingsModel.setChamberId(chamberField.text);
settingsModel.ChamberId = chamberField.text;
settingsModel.saveSettings();
}
}
@@ -296,7 +296,7 @@ Item {
SettingsToggle {
text: "Reverse Z Wafer"
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_recorder import CsvRecorder # 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.local_settings import LocalSettings # 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.stability_detector import StabilityDetector # 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.rbf_heatmap import interpolate_field # 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
from pygui.backend.visualization.contour_models import ContourLine, ContourSegment
from pygui.backend.attic.contour_models import ContourLine, ContourSegment
# ===== Contour Generation =====
-2
View File
@@ -2,7 +2,6 @@
from pygui.backend.data.csv_file_metadata import CSVFileMetadata
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_segment import DataSegment
from pygui.backend.data.file_browser import FileBrowser
from pygui.backend.data.local_settings import LocalSettings
from pygui.backend.data.local_settings_model import LocalSettingsModel
@@ -10,7 +9,6 @@ from pygui.backend.data.local_settings_model import LocalSettingsModel
__all__ = [
"CsvRecorder", "CSVFileMetadata",
"read_data_records", "is_official_csv", "read_official_csv",
"DataSegment",
"FileBrowser",
"LocalSettings", "LocalSettingsModel",
]
+6 -2
View File
@@ -1,7 +1,10 @@
import json
import logging
import os
from pathlib import Path
log = logging.getLogger(__name__)
# ===== Settings Persistence Model =====
class LocalSettings:
@@ -51,7 +54,8 @@ class LocalSettings:
if hasattr(settings, key):
setattr(settings, key, value)
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
@@ -66,7 +70,7 @@ class LocalSettings:
with open(path, "w", encoding="utf-8") as f:
json.dump(data, f, indent=4)
except Exception as e:
print(f"Error saving settings: {e}")
log.exception("Error saving settings: %s",e)
# ===== Master File Helpers =====
@classmethod
@@ -334,27 +334,3 @@ class LocalSettingsModel(QObject):
@Slot(str)
def clearMaster(self, family: str) -> None:
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 =====
from pygui.backend.visualization.contour_models import ContourLine, ContourSegment
from pygui.backend.visualization.graph_view import GraphView
from pygui.backend.visualization.rbf_heatmap import interpolate_field
from pygui.backend.visualization.wafer_map_item import WaferMapItem
@@ -7,5 +6,4 @@ from pygui.backend.visualization.wafer_map_item import WaferMapItem
__all__ = [
"WaferMapItem", "GraphView",
"interpolate_field",
"ContourLine", "ContourSegment",
]
@@ -9,16 +9,13 @@ from __future__ import annotations
import logging
from typing import Any, Optional
import pyqtgraph as pg
from pyqtgraph import PlotWidget
from PySide6.QtCore import Property, QObject, Signal, Slot
from PySide6.QtWidgets import QWidget
log = logging.getLogger(__name__)
# Import pyqtgraph after Qt is initialized
import pyqtgraph as pg
from pyqtgraph import PlotWidget
class GraphView(QObject):
"""QML-exposed controller for a pyqtgraph line chart.
+2 -3
View File
@@ -33,10 +33,9 @@ class ZWaferParser:
# ===== Header Parsing =====
def _process_header(self, file_obj) -> ZWaferData:
"""Parse header and sensor layout from open file object.
Handles two CSV row orderings:
1. Label/X/Y rows BEFORE 'data' (fixture test format)
2. 'data' row BEFORE Label/X/Y (some real CSV files)
1. Label/X/Y rows BEFORE 'data' (fixture test format)
2. 'data' row BEFORE Label/X/Y (some real CSV files)
The C# parser handles both by collecting sensor layout rows
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 1020-1023 : Cycle time (2 bytes hex → decimal cycles)
"""
raw = bytes.fromhex(hex_response)
family_code = self._hex_to_ascii(hex_response[0:2])
serial_num = f"{family_code}{int(hex_response[2:6], 16):05d}"