Responsive Textual TUI for Double Compression / Texture Profile Analysis (TPA) of Zwick exports (.csv / .tra), with grouped statistics, QC reporting, and flexible custom plotting.
- Packaged
src/layout with separated analysis, stats, plotting, config, core, and UI modules - Responsive Textual layout for wide, medium, and narrow terminal sizes
- Unified custom plot builder for trace variables and calculated metrics
- Multi-select
xandygraph specs with auto expansion per selectedx - All calculated metrics available for plotting and grouped export:
- Hardness
- Cohesiveness
- Springiness
- Resilience
- Chewiness
- Adhesiveness
- Modulus
- Environment-backed runtime defaults
- Pytest, Ruff,
uv, and GitHub Actions CI support
src/tpa_analyzer/
analysis/ Zwick parsing and TPA calculations
config/ env-backed settings and logging
core/ constants, models, errors, export/session helpers
plotting/ trace, metric, QC, and custom graph rendering
stats/ grouped hypothesis testing
ui/ Textual app and responsive layout helpers
tests/ pytest suite
app.py thin compatibility entrypoint
Install dependencies with uv:
uv sync --all-groupsRun the app:
uv run python app.pyRun tests:
uv run pytestRun Ruff:
uv run ruff check .Environment variables:
TPA_ANALYZER_LOG_LEVELTPA_ANALYZER_DEFAULT_DATA_DIRTPA_ANALYZER_EXPORT_ROOTTPA_ANALYZER_PLOTS_ROOTTPA_ANALYZER_SESSION_AUTOSAVETPA_ANALYZER_DEBUG
Export Tables writes:
tpa_results_summary.csvtpa_qc_summary.csvtpa_group_stats.csvtpa_pairwise_stats.csv
Export Plots writes:
default_stack.pnggrouped_metrics.pngoverlays/custom/qc_report/
Export All writes tables plus plots under one timestamped export root.
Two GitHub Actions workflows are expected:
quality.ymlfor Ruff, pytest, and packaging smoke checks on pushes and pull requestsbuild-binaries.ymlfor release artifact builds on tags or manual dispatch