Commit Graph

86 Commits

Author SHA1 Message Date
ca48541b91 Add thermal chamber simulator tests
Tests for ThermalChamberSim SCPI command responses:
- Basic IEEE 488.2 commands (*IDN?, *RST, *OPC?)
- TEMP:SETPOINT set/query
- TEMP:ACTUAL? query
- TEMP:STAB? stability query
- Physics engine integration tests
2025-12-02 13:27:41 +00:00
6fae05f52d Implement thermal chamber SCPI commands
- TEMP:SETPOINT: Set/query target temperature
- TEMP:ACTUAL?: Query actual chamber temperature from physics engine
- TEMP:STAB?: Query temperature stability (within 0.5°C threshold)
2025-12-02 13:26:23 +00:00
a7926d0690 Add thermal chamber simulator stub
Defines ThermalChamberSim class with stub SCPI command handlers for
TEMP:SETPOINT, TEMP:ACTUAL?, and TEMP:STAB? commands.
2025-12-02 13:25:33 +00:00
a9f2b92fc6 Add base instrument class
Provides SCPI command parsing and dispatch mechanism for virtual
instruments. Includes IEEE 488.2 common commands (*IDN?, *RST, *CLS,
*OPC) and abstract methods for instrument-specific implementations.
2025-12-02 13:25:01 +00:00
fb7945fc84 Add SCPI parser tests
Comprehensive test suite for SCPI command parsing:
- SCPICommand dataclass tests (creation, keyword property)
- Parser tests for queries, commands, arguments
- IEEE 488.2 common command tests (*IDN?, *RST, etc.)
- Edge cases (whitespace, empty strings)
- Instrument-specific command tests

Also fixed bug where is_query was determined from command string
ending rather than header ending (handles queries with arguments).
2025-12-02 12:39:00 +00:00
dd9b722c33 Implement SCPI parser
Adds SCPIParser class with parse() method that handles:
- IEEE 488.2 common commands (*IDN?, *RST, etc.)
- Query commands (ending with '?')
- Commands with comma-separated arguments
- Whitespace stripping
2025-12-02 12:18:49 +00:00
93131431d5 Add SCPI command dataclass
Defines SCPICommand dataclass for parsed SCPI commands with:
- header: command header (e.g., "TEMP:SETPOINT")
- arguments: list of command arguments
- is_query: whether command is a query
- keyword property: header without trailing '?'
2025-12-02 12:18:16 +00:00
c112e2d691 Remove fragment from sidebar controls (not supported)
Sidebar controls cannot be in a fragment. Brief blank on
slider change is a Streamlit limitation.
2025-12-02 11:57:05 +00:00
a221913a9d Put sidebar controls in fragment to prevent page blanking
Both controls and display are now fragments, so slider
changes don't trigger full page reruns.
2025-12-02 11:56:00 +00:00
6af12d895a Use st.fragment for smooth dashboard updates
Replace st.rerun() with @st.fragment decorator to prevent
full page reloads and eliminate UI greying out.
2025-12-02 11:50:26 +00:00
7c5953ea18 Fix dashboard simulation speed with time multiplier
- Add time multiplier control (1× to 100× speed)
- Calculate steps based on real elapsed time
- Add 50ms delay to prevent UI thrashing
- Display current speed in Sim Time metric
2025-12-02 11:40:54 +00:00
217a1d1472 Release v0.1.0-alpha.2 2025-12-02 03:12:08 +00:00
02101fd4b9 Add self-heating visualisation 2025-12-02 03:11:28 +00:00
0e270dee88 Add interactive physics controls 2025-12-02 03:10:37 +00:00
29bf371834 Add physics visualisation panel 2025-12-02 03:09:58 +00:00
f210e00743 Add Streamlit dashboard skeleton 2025-12-02 03:09:12 +00:00
3dcd1b9ca5 Release v0.1.0-alpha.1
Physics engine working milestone:
- Thermal-electrical coupling simulation
- LDO DUT model with temperature dependence
- Comprehensive test suite
2025-12-02 02:59:52 +00:00
f3873081ae Add physics engine tests
Integration tests for thermal-electrical coupling:
- Thermal settling (chamber, case, junction)
- Self-heating effects with power dissipation
- Temperature-dependent electrical behaviour
- Complete thermal-electrical feedback loop
2025-12-02 02:59:01 +00:00
1429bf34a7 Implement physics engine stepping
Full implementation of step() method with thermal-electrical coupling:
- Chamber temperature first-order response to setpoint
- Case temperature with self-heating via thermal calculations
- Junction temperature from θ_jc thermal resistance
- Electrical state from temperature-dependent DUT model
- Default LDO model when none provided
2025-12-02 02:57:19 +00:00
151ad8d673 Implement LDO DUT model
Temperature-dependent LDO voltage regulator model with:
- Output voltage tempco (ppm/°C)
- Quiescent current tempco
- Dropout voltage temperature dependence
- Power dissipation calculation (Vin-Vout)*Iload + Vin*Iq
- Dropout detection

Implements DUTModel protocol for physics engine integration.
2025-12-02 02:56:19 +00:00
37b3ca912a Implement thermal calculation functions
Pure functions for first-order thermal response calculations:
- Temperature derivative and update using Euler integration
- Case temperature with self-heating via θ_ca
- Junction temperature calculation via θ_jc
- Steady-state junction temperature helper
2025-12-02 02:55:07 +00:00
feab2e0bdc Add physics model unit tests
Test dataclass creation, immutability, equality, and hashability for
ThermalState and ElectricalState. Also test PhysicsEngine stub methods.
2025-12-02 02:38:50 +00:00
47d02f6a12 Rename models.py to state.py to avoid conflict with models/ directory
The models.py file conflicts with the models/ subdirectory when
importing. Renamed to state.py for clarity.
2025-12-02 02:38:25 +00:00
13a7516773 Add physics engine stub
Define PhysicsEngine class with stub methods for thermal-electrical
simulation. Methods return placeholder values; full implementation
will be added in Sprint 3.
2025-12-02 02:21:44 +00:00
65f57ccf86 Add DUT model protocol
Define the DUTModel Protocol interface that all device models must
implement to integrate with the physics engine.
2025-12-02 02:21:01 +00:00
2edb7b7c10 Add physics state dataclasses
Define frozen dataclasses for ThermalState and ElectricalState to
represent immutable simulation state snapshots.
2025-12-02 02:20:22 +00:00
99f70bb23b Restructure package for domain-driven design
Reorganise package structure to improve separation of concerns:
- instruments/ - SCPI, transport, drivers, interfaces, factory
- simulation/ - physics engine, virtual instruments, server
- framework/ - test runner, logger, limits, context
- tests/ - thermal/, electrical/ (DVT test implementations)
- data/ - repository, models
- reporting/ - generator, templates
- app/ - CLI, config, dashboard

This structure enables:
- Reusable instruments package for other test suites
- Clear separation of simulation (dev) vs production code
- Domain-focused package organisation

Updated documentation to reflect new paths.
2025-12-02 01:53:33 +00:00
111666945e Release v0.0.1 2025-12-01 23:52:26 +00:00
d2bda909ae Add CLI entry point with version command 2025-12-01 23:51:49 +00:00
14223e54ca Configure development tooling (ruff, mypy, pytest) 2025-12-01 23:51:26 +00:00
2ecbb976bf Add package directory structure 2025-12-01 23:50:57 +00:00
8ee73d443a Add pyproject.toml with core dependencies 2025-12-01 23:49:12 +00:00
b164252a92 Add versioning strategy and CI/CD pipeline
Some checks failed
CI / Lint (push) Failing after 2m51s
CI / Type Check (push) Failing after 32s
CI / Test (push) Failing after 37s
CI / Release (push) Has been skipped
- Add semantic versioning section to development plan
- Map sprint milestones to version tags
- Create Gitea Actions CI workflow (lint, typecheck, test, release)
- Add CHANGELOG.md following Keep a Changelog format
2025-12-01 23:42:41 +00:00
afb5bd2075 Update development plan with vertical slice approach
- Reorder sprints for visual-first development
- Dashboard (Sprint 4) now follows Physics Engine (Sprint 3)
- Infrastructure layers (SCPI, TCP, HAL) follow visual demo
- Update project references to py-dvt-ate
2025-12-01 22:55:15 +00:00
356b5dcebc docs: add iterative development plan for Phase 1
- Break Phase 1 into 25 sprints with atomic tasks
- Define stub-first approach for manageable complexity
- Specify commit messages for each task
- Include LLM optimisation notes for context management
2025-12-01 22:37:04 +00:00
ed535e86ea Initial project setup with documentation
- Add project requirements document (01_requirements.md)
- Add technical specification (02_technical_specification.md)
- Add architecture decisions (03_architecture_decisions.md)
- Add README with project overview
- Add .gitignore for Python projects
2025-12-01 22:26:57 +00:00