Metadata-Version: 2.4
Name: udsxml2tex
Version: 0.42.0
Summary: Convert AUTOSAR DCM/CanTp/DEM arxml to LaTeX UDS (ISO 14229 / 15765) specification documents and ISO 22901-1 ODX/PDX
Author: udsxml2tex contributors
License: MIT
Project-URL: Homepage, https://github.com/YutaroNakagama/udsxml2tex
Project-URL: Repository, https://github.com/YutaroNakagama/udsxml2tex
Project-URL: Changelog, https://github.com/YutaroNakagama/udsxml2tex/blob/main/CHANGELOG.md
Project-URL: Issues, https://github.com/YutaroNakagama/udsxml2tex/issues
Keywords: autosar,arxml,uds,dcm,dem,cantp,iso14229,iso15765,iso22901,odx,pdx,latex,tex,diagnostics
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Manufacturing
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Topic :: Software Development :: Code Generators
Classifier: Topic :: Software Development :: Documentation
Classifier: Topic :: Software Development :: Embedded Systems
Classifier: Topic :: Text Processing :: Markup :: LaTeX
Classifier: Typing :: Typed
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: lxml>=4.9.0
Requires-Dist: Jinja2>=3.1.0
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-cov>=4.0; extra == "dev"
Requires-Dist: mypy>=1.0; extra == "dev"
Requires-Dist: ruff>=0.1; extra == "dev"
Provides-Extra: web
Requires-Dist: fastapi>=0.100.0; extra == "web"
Requires-Dist: uvicorn>=0.22.0; extra == "web"
Requires-Dist: python-multipart>=0.0.6; extra == "web"
Requires-Dist: PyYAML>=6.0; extra == "web"
Provides-Extra: yaml
Requires-Dist: PyYAML>=6.0; extra == "yaml"
Provides-Extra: watch
Requires-Dist: watchdog>=3.0; extra == "watch"
Provides-Extra: docx
Requires-Dist: python-docx>=1.0; extra == "docx"
Provides-Extra: lsp
Requires-Dist: pygls>=1.2; extra == "lsp"
Provides-Extra: progress
Requires-Dist: tqdm>=4.65; extra == "progress"
Provides-Extra: rich
Requires-Dist: rich>=13.0; extra == "rich"
Provides-Extra: viz
Requires-Dist: matplotlib>=3.5; extra == "viz"
Requires-Dist: numpy>=1.20; extra == "viz"
Provides-Extra: llm
Requires-Dist: anthropic>=0.40.0; extra == "llm"
Requires-Dist: openai>=1.0.0; extra == "llm"
Provides-Extra: ecu-test
Requires-Dist: python-can>=4.3.0; extra == "ecu-test"
Requires-Dist: python-isotp>=2.0.0; extra == "ecu-test"
Provides-Extra: all
Requires-Dist: fastapi>=0.100.0; extra == "all"
Requires-Dist: uvicorn>=0.22.0; extra == "all"
Requires-Dist: python-multipart>=0.0.6; extra == "all"
Requires-Dist: PyYAML>=6.0; extra == "all"
Requires-Dist: watchdog>=3.0; extra == "all"
Requires-Dist: python-docx>=1.0; extra == "all"
Requires-Dist: pygls>=1.2; extra == "all"
Requires-Dist: tqdm>=4.65; extra == "all"
Requires-Dist: rich>=13.0; extra == "all"
Requires-Dist: matplotlib>=3.5; extra == "all"
Requires-Dist: numpy>=1.20; extra == "all"
Requires-Dist: anthropic>=0.40.0; extra == "all"
Requires-Dist: openai>=1.0.0; extra == "all"
Requires-Dist: python-can>=4.3.0; extra == "all"
Requires-Dist: python-isotp>=2.0.0; extra == "all"
Dynamic: license-file

# udsxml2tex

**AUTOSAR DCM/CanTp/DEM ARXML → ISO 14229 (UDS) / ISO 15765 / ISO 22901-1 (ODX/PDX) specification documents.**

[![PyPI version](https://badge.fury.io/py/udsxml2tex.svg)](https://badge.fury.io/py/udsxml2tex)
[![Python](https://img.shields.io/pypi/pyversions/udsxml2tex.svg)](https://pypi.org/project/udsxml2tex/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

`udsxml2tex` parses AUTOSAR diagnostic ARXML (DCM, CanTp, DEM, DoIP, COM, AP)
and renders a complete UDS specification in **LaTeX / PDF / HTML / Markdown
/ RST / CSV / YAML / JSON / DOCX**, plus **ASAM ODX 2.2.0 / PDX**
(ISO 22901-1) for industry diagnostic tooling.

It also ships a local **browser UI** (`--serve`) that one-clicks an entire
BSW software repository through the pipeline, auto-detecting single-ECU
vs multi-ECU layouts.

---

## Install

```bash
pip install udsxml2tex                  # core (LaTeX / Markdown / JSON / YAML)
pip install udsxml2tex[web]             # browser UI (--serve)
pip install udsxml2tex[llm]             # LLM analysis (Anthropic + OpenAI / Ollama)
pip install udsxml2tex[ecu-test]        # CAN/ISO-TP hardware testing
pip install udsxml2tex[all]             # everything
```

Other extras: `yaml`, `watch`, `docx`, `lsp`, `progress`, `rich`, `viz`.

A LaTeX distribution (TeX Live / MiKTeX with `xelatex` for CJK) is required
to compile generated `.tex` to PDF. The HTML output renders standalone.

---

## Quick start

```bash
# Single ARXML → LaTeX
udsxml2tex dcm.arxml -o spec.tex

# Merge DCM + CanTp + DEM
udsxml2tex dcm.arxml cantp.arxml --dem dem.arxml -o spec.tex

# Auto-discover everything under a BSW repo (CLI mirror of the browser UI)
udsxml2tex --repo /path/to/bsw-project -o spec.tex
udsxml2tex --repo /path/to/bsw-project --repo-dry-run     # show classification

# Output formats
udsxml2tex dcm.arxml --format html  -o spec.html
udsxml2tex dcm.arxml --format md    -o spec.md
udsxml2tex dcm.arxml --format pdx   -o ecu.pdx            # ISO 22901-1 PDX
udsxml2tex dcm.arxml --pdf                                 # compile to PDF

# Multi-language output (English / German / Japanese in one run)
udsxml2tex dcm.arxml --langs en,ja,de -o spec.md --format md

# Validation, diff, multi-ECU systems
udsxml2tex dcm.arxml --validate
udsxml2tex new.arxml --diff old.arxml
udsxml2tex --system system.yaml --system-output-dir out/   # 1+1 / gateway

# Browser UI
udsxml2tex --serve                                         # http://127.0.0.1:8765
```

### Python API

```python
from udsxml2tex import ArxmlParser, TexGenerator, validate, diff_specs

spec = ArxmlParser().parse_multi(["dcm.arxml", "cantp.arxml"])
TexGenerator().generate(spec, "spec.tex")
TexGenerator().compile_pdf("spec.tex")

print(validate(spec).summary())                # ISO 14229-1 consistency
print(diff_specs(spec_a, spec_b).to_markdown())
```

---

## Features

**Coverage**

- DCM (ISO 14229-1) — sessions, security, all 24 standard services, DIDs,
  routines, DTCs, memory ranges, IO control / periodic / dynamic DIDs,
  Authentication, ResponseOnEvent, LinkControl, multi-client.
- CanTp (ISO 15765-2) — channels, BS/STmin, N_As/Bs/Cs/Ar/Br/Cr, addressing.
- DEM (ISO 14229-1 §11) — DTC config, OBD/WWH-OBD, freeze frames, extended
  data, operation cycles, indicators, combined DTCs.
- DoIP (ISO 13400), Communication ARXML, Adaptive Platform service interfaces.
- C/C++ source scanning — DID/RID global variables (transitive depth ≤3).
- Bootloader overlay — single document covering Drive + Boot domains via YAML.

**Output**

- `tex` (Jinja2 + structured ZIP), `pdf` (xelatex/latexmk), `html` (multi-page
  ZIP with offline Mermaid + NRC ladders), `md`, `rst`, `csv`, `yaml`,
  `json`, `docx`, `odx`, `pdx`.
- Visualizations: heatmaps, timing diagrams, UML sequences, byte-level
  DID maps, session/security FSMs.

**Quality**

- `--validate` — 17 ISO 14229-1 consistency checks.
- `--diff` — semantic spec diff (ARXML or JSON).
- `--iso-version {2006,2013,2020}` — drop features outside the chosen revision.
- `--autosar-compat-report` — flag features postdating the detected AUTOSAR release.
- Schema export: JSON Schema (draft-07), Pydantic v2 model source.

**LLM analysis** (`[llm]` extra)

- `--llm-summarize`, `--llm-query`, `--llm-nrc-descriptions`, `--llm-translate`.
- Backends: Anthropic Claude API or any OpenAI-compatible server (Ollama,
  llama.cpp, vLLM, OpenRouter, Azure). One-shot setup:
  `udsxml2tex --bootstrap-ollama` (Linux/macOS).

**ECU hardware testing** (`[ecu-test]` extra)

- Auto-generates UDS test cases from the parsed spec, executes over CAN /
  ISO-TP via python-can. Heuristic generator or formal `--ecu-formal`
  state-machine explorer (all-transitions coverage). HTML / JUnit XML /
  CSV / coverage reports.

**Multi-ECU systems**

- Declarative YAML config (`--system`) for redundant / gateway-with-forwarder
  topologies, per-ECU spec + integration document, ARXML coverage-gap
  routing inference, cross-ECU validator.

**Browser UI** (`--serve`, `[web]` extra)

- Local FastAPI server with three tabs:
  - **Generate** — pick a BSW repository folder; the server uploads
    UDS-relevant files (`.arxml`, `.c`, `.h`, `.yaml`, `.json`),
    classifies each ARXML by AUTOSAR module, **auto-detects single vs
    multi-ECU**, and generates the chosen format. `format=tex` ZIPs
    include a compiled `root.pdf` when `xelatex` is on PATH.
  - **Chat** — multi-turn LLM Q&A (Anthropic / Ollama / OpenAI-compatible)
    with streaming responses; spec is cached server-side per session.
  - **ECU Test** — drive CAN/ISO-TP test runs from the browser.

**Tooling**

- Interactive wizard (`-I`), config files (`--config`), file watching
  (`--watch`), parallel parse, incremental cache, XSD validation,
  pytest plugin (`uds_spec` fixture), LSP server, shell completion,
  plugin system (`ParserPlugin` / `GeneratorPlugin`), i18n (en / de / ja
  with bilingual `--lang ja+en` mode + multi-language `--langs en,ja,de`).

**Distribution**

- Docker image (TeX Live + `udsxml2tex[all]`).
- GitHub Action (Marketplace-ready).
- pre-commit hooks (validate / regen PDF / regen TeX ZIP).
- VS Code extension (right-click `.arxml` → generate / validate / diff / LLM).

---

## Documentation

- **Full feature reference & Python API**:
  [`docs/README_full.md`](docs/README_full.md)
- **Standards coverage matrices** (ISO ↔ AUTOSAR ECUC ↔ udsxml2tex,
  with `file:line` source citations):
  [`docs/standards/`](docs/standards/)
  — ISO 15765-2 (CanTp), ISO 14229-2 (session/timing),
  ISO 14229-1 (services, DTC/Dem), required-ARXMLs note.
- **Changelog**: [`CHANGELOG.md`](CHANGELOG.md)
- **Contributing**: [`CONTRIBUTING.md`](CONTRIBUTING.md)

---

## Requirements

- Python ≥ 3.9
- `lxml` ≥ 4.9, `Jinja2` ≥ 3.1
- LaTeX with `xelatex` (TeX Live / MiKTeX) for PDF output

---

## License

MIT
