jack f4621f1faf feat(viz): implement RBF heatmap and custom QPainter trend chart item
Introduce Radial Basis Function interpolation for fine wafer thermal gradients and GraphQuickItem for high-performance trend line rendering.
2026-06-25 13:47:48 -07:00
2026-06-18 13:16:54 -07:00

ISC QtQuick App

Small PySide6 + Qt Quick application scaffold for the ISenseCloud desktop UI shell.

Requirements

  • Python 3.11+ (tested with Python 3.14 in this workspace)
  • macOS, Linux, or Windows with GUI support

Setup

From the project root:

If you have uv installed:

uv sync

Option B: Using pip

python3 -m venv .venv
source .venv/bin/activate   # or .venv\Scripts\activate on Windows
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install -e .            # install the `pygui` package (src/ layout) in editable mode

Run

make run

This launches the Qt window and loads the ISC QML module from src/pygui/ISC/Main.qml.

Development

The project uses uv for dependency management and tooling, Ruff for linting and formatting, Mypy for static type checking, and pytest for unit tests.

A Makefile is provided to simplify common development and verification tasks:

Command Description
make install Sync dependencies and set up the local .venv using uv
make run Launch the ISenseCloud application
make test Run the pytest test suite
make lint Check code style and quality with the Ruff linter
make fix Automatically fix fixable Ruff style violations
make typecheck Run the Mypy static type checker
make clean Clean build and tool caches (.pytest_cache, .ruff_cache, .mypy_cache, __pycache__)

Ruff Configuration

Ruff is configured in pyproject.toml to enforce:

  • E/W: Pycodestyle errors and warnings
  • F: Pyflakes linter rules
  • I: Import sorting (isort parity)
  • N: PEP 8 naming conventions

Project Structure

The application lives under a src/ layout as the pygui package:

  • src/pygui/__main__.py: PySide6 bootstrap; creates the Qt app and loads QML module ISC/Main. Entry point for python -m pygui.
  • src/pygui/backend/: Qt-facing models, controllers, and visualizers organized into subdirectories:
    • controllers/: QML-facing controllers (Session & Device controllers).
    • data/: local settings, file browser, and CSV recorder utilities.
    • models/: data models (Session, Thresholds, Frame Player, Frame representation).
    • visualization/: QML wafer map item integration.
    • wafer/: layout definitions, coordinate mappings, and files parser.
  • src/pygui/serialcomm/: serial port transport, device service scanning, and protocol data-parser layer.
  • src/pygui/ISC/: the ISC QML module (UI).
    • Main.qml: top-level window definition.
    • HomePage.qml: main UI layout (left action rail, workspace panel, footer tabs).
    • Theme.qml: shared theme constants and dark/light mode tokens.
    • qmldir: QML module registration.
  • tests/: pytest suite.
  • packaging/: PyInstaller spec (isc.spec) and app icons.

Window Configuration

Window dimensions and constraints are defined in src/pygui/ISC/Main.qml:

  • Default size: 1400 × 820 pixels
  • Minimum size: 1100 × 700 pixels
  • Title bar: "ISenseCloud"

To adjust the window, edit the Window block in src/pygui/ISC/Main.qml:

Window {
    width: 1400
    height: 820
    minimumWidth: 1100
    minimumHeight: 700
    visible: true
    title: qsTr("ISenseCloud")
}

Customization

  • Toggle dark/light mode in src/pygui/ISC/Theme.qml via isDarkMode.
  • Update sidebar and footer labels in src/pygui/ISC/HomePage.qml through sideActions and bottomTabs.

Troubleshooting

  • If the app does not start, verify the virtual environment is active and dependencies are installed:

    Using uv:

    uv sync
    

    Using pip:

    source .venv/bin/activate   # or .venv\Scripts\activate on Windows
    pip install -r requirements.txt
    
  • If no window appears, ensure you are running in a desktop session with GUI access.

  • Windows COM Port Connection Issues:

    • Standard Windows serial drivers don't support custom baud rates (e.g. 888888), throwing an expected OSError(22) warning before falling back to 115200 baud.

Step-by-Step Windows Simulator Connection Guide

Step 1: Create the Virtual Serial Port Bridge

Open HHD Virtual Serial Port Tools. Under the Local Bridges panel on the left, click the green + (Add) button to create a new port pair. Configure it to bridge COM5 ↔ COM6.

HHD Virtual Serial Port Tools showing COM5 ↔ COM6 Local Bridge

Step 2: Configure and Start the Wafer Simulator

Launch the Wafer Simulator Control Panel (wafer_sim_gui.py):

  1. Set the Serial Port to COM5.
  2. Uncheck the Auto-create Virtual Port (com0com) checkbox.
  3. Choose your desired Wafer Type (e.g., aepwafer) and Family Code (e.g., A).
  4. Click Start Simulator. Once the client connects, you will see Streaming (D2) status and active data transfer logs.

Wafer Simulator Control Panel configured on COM5 and streaming

Step 3: Run the UI and Connect

Launch the pygui client application. On the left navigation rail, click DETECT WAFER. The application will scan all active COM ports, automatically detect the virtual wafer simulator on COM6, and update the status indicator to Connected (green).

ISenseCloud UI displaying successful connection on COM6

S
Description
No description provided
Readme 2 MiB
Languages
Python 58.4%
QML 41.5%