udsdoc 0.66.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. udsdoc-0.66.0/LICENSE +21 -0
  2. udsdoc-0.66.0/PKG-INFO +347 -0
  3. udsdoc-0.66.0/README.md +243 -0
  4. udsdoc-0.66.0/pyproject.toml +211 -0
  5. udsdoc-0.66.0/setup.cfg +4 -0
  6. udsdoc-0.66.0/src/udsdoc/__init__.py +288 -0
  7. udsdoc-0.66.0/src/udsdoc/__main__.py +7 -0
  8. udsdoc-0.66.0/src/udsdoc/_compat.py +74 -0
  9. udsdoc-0.66.0/src/udsdoc/_d3_interactive.py +324 -0
  10. udsdoc-0.66.0/src/udsdoc/_reprogramming.py +1288 -0
  11. udsdoc-0.66.0/src/udsdoc/_rich_output.py +208 -0
  12. udsdoc-0.66.0/src/udsdoc/_serialization.py +331 -0
  13. udsdoc-0.66.0/src/udsdoc/_style_presets.py +328 -0
  14. udsdoc-0.66.0/src/udsdoc/ap_parser.py +410 -0
  15. udsdoc-0.66.0/src/udsdoc/autosar_compat.py +208 -0
  16. udsdoc-0.66.0/src/udsdoc/boot_overlay.py +506 -0
  17. udsdoc-0.66.0/src/udsdoc/c_scanner.py +393 -0
  18. udsdoc-0.66.0/src/udsdoc/cantp_parser.py +493 -0
  19. udsdoc-0.66.0/src/udsdoc/cli.py +2299 -0
  20. udsdoc-0.66.0/src/udsdoc/comm_arxml_parser.py +420 -0
  21. udsdoc-0.66.0/src/udsdoc/completion.py +260 -0
  22. udsdoc-0.66.0/src/udsdoc/compliance_matrix.py +1357 -0
  23. udsdoc-0.66.0/src/udsdoc/config.py +64 -0
  24. udsdoc-0.66.0/src/udsdoc/csv_to_arxml.py +745 -0
  25. udsdoc-0.66.0/src/udsdoc/dem_parser.py +978 -0
  26. udsdoc-0.66.0/src/udsdoc/diff.py +562 -0
  27. udsdoc-0.66.0/src/udsdoc/doip_parser.py +268 -0
  28. udsdoc-0.66.0/src/udsdoc/ecu_log_analyzer.py +379 -0
  29. udsdoc-0.66.0/src/udsdoc/ecu_simulator.py +432 -0
  30. udsdoc-0.66.0/src/udsdoc/ecu_test/__init__.py +84 -0
  31. udsdoc-0.66.0/src/udsdoc/ecu_test/coverage.py +232 -0
  32. udsdoc-0.66.0/src/udsdoc/ecu_test/executor.py +296 -0
  33. udsdoc-0.66.0/src/udsdoc/ecu_test/formal_generator.py +298 -0
  34. udsdoc-0.66.0/src/udsdoc/ecu_test/fsm.py +565 -0
  35. udsdoc-0.66.0/src/udsdoc/ecu_test/generator.py +697 -0
  36. udsdoc-0.66.0/src/udsdoc/ecu_test/logger.py +532 -0
  37. udsdoc-0.66.0/src/udsdoc/ecu_test/models.py +122 -0
  38. udsdoc-0.66.0/src/udsdoc/ecu_test/transport.py +256 -0
  39. udsdoc-0.66.0/src/udsdoc/generator.py +7041 -0
  40. udsdoc-0.66.0/src/udsdoc/hardware.py +431 -0
  41. udsdoc-0.66.0/src/udsdoc/i18n.py +690 -0
  42. udsdoc-0.66.0/src/udsdoc/interactive.py +544 -0
  43. udsdoc-0.66.0/src/udsdoc/iso_versions.py +281 -0
  44. udsdoc-0.66.0/src/udsdoc/llm_integration.py +1436 -0
  45. udsdoc-0.66.0/src/udsdoc/lsp_server.py +322 -0
  46. udsdoc-0.66.0/src/udsdoc/models.py +1957 -0
  47. udsdoc-0.66.0/src/udsdoc/multi_ecu/__init__.py +59 -0
  48. udsdoc-0.66.0/src/udsdoc/multi_ecu/generator.py +2012 -0
  49. udsdoc-0.66.0/src/udsdoc/multi_ecu/inference.py +104 -0
  50. udsdoc-0.66.0/src/udsdoc/multi_ecu/loader.py +315 -0
  51. udsdoc-0.66.0/src/udsdoc/multi_ecu/models.py +406 -0
  52. udsdoc-0.66.0/src/udsdoc/multi_ecu/validator.py +207 -0
  53. udsdoc-0.66.0/src/udsdoc/multi_ecu/visualizations.py +379 -0
  54. udsdoc-0.66.0/src/udsdoc/obd_parser.py +245 -0
  55. udsdoc-0.66.0/src/udsdoc/odx/__init__.py +228 -0
  56. udsdoc-0.66.0/src/udsdoc/odx/mapper.py +1468 -0
  57. udsdoc-0.66.0/src/udsdoc/odx/models_odx.py +996 -0
  58. udsdoc-0.66.0/src/udsdoc/odx/pdx_packager.py +347 -0
  59. udsdoc-0.66.0/src/udsdoc/odx/serializers/__init__.py +85 -0
  60. udsdoc-0.66.0/src/udsdoc/odx/serializers/_shared.py +664 -0
  61. udsdoc-0.66.0/src/udsdoc/odx/serializers/odx_c.py +188 -0
  62. udsdoc-0.66.0/src/udsdoc/odx/serializers/odx_cs.py +143 -0
  63. udsdoc-0.66.0/src/udsdoc/odx/serializers/odx_d.py +935 -0
  64. udsdoc-0.66.0/src/udsdoc/odx/serializers/odx_e.py +268 -0
  65. udsdoc-0.66.0/src/udsdoc/odx/serializers/odx_f.py +260 -0
  66. udsdoc-0.66.0/src/udsdoc/odx/serializers/odx_fd.py +168 -0
  67. udsdoc-0.66.0/src/udsdoc/odx/serializers/odx_m.py +187 -0
  68. udsdoc-0.66.0/src/udsdoc/odx/serializers/odx_v.py +429 -0
  69. udsdoc-0.66.0/src/udsdoc/odx/supplement.py +342 -0
  70. udsdoc-0.66.0/src/udsdoc/odx/xsd/LICENSE +48 -0
  71. udsdoc-0.66.0/src/udsdoc/odx/xsd/odx-c.xsd +26 -0
  72. udsdoc-0.66.0/src/udsdoc/odx/xsd/odx-cs.xsd +26 -0
  73. udsdoc-0.66.0/src/udsdoc/odx/xsd/odx-d.xsd +28 -0
  74. udsdoc-0.66.0/src/udsdoc/odx/xsd/odx-e.xsd +27 -0
  75. udsdoc-0.66.0/src/udsdoc/odx/xsd/odx-f.xsd +26 -0
  76. udsdoc-0.66.0/src/udsdoc/odx/xsd/odx-fd.xsd +26 -0
  77. udsdoc-0.66.0/src/udsdoc/odx/xsd/odx-m.xsd +26 -0
  78. udsdoc-0.66.0/src/udsdoc/odx/xsd/odx-v.xsd +26 -0
  79. udsdoc-0.66.0/src/udsdoc/odx/xsd_validator.py +180 -0
  80. udsdoc-0.66.0/src/udsdoc/ollama_setup.py +513 -0
  81. udsdoc-0.66.0/src/udsdoc/parser.py +3480 -0
  82. udsdoc-0.66.0/src/udsdoc/plugin.py +110 -0
  83. udsdoc-0.66.0/src/udsdoc/py.typed +0 -0
  84. udsdoc-0.66.0/src/udsdoc/pytest_plugin.py +353 -0
  85. udsdoc-0.66.0/src/udsdoc/repo_scanner.py +1137 -0
  86. udsdoc-0.66.0/src/udsdoc/samples/boot_overlay_minimal.yaml +31 -0
  87. udsdoc-0.66.0/src/udsdoc/samples/boot_overlay_sample.yaml +103 -0
  88. udsdoc-0.66.0/src/udsdoc/samples/compliance_matrix_oem_annex.csv +103 -0
  89. udsdoc-0.66.0/src/udsdoc/samples/compliance_matrix_oem_did.csv +102 -0
  90. udsdoc-0.66.0/src/udsdoc/samples/compliance_matrix_oem_docan_ecu.csv +101 -0
  91. udsdoc-0.66.0/src/udsdoc/samples/compliance_matrix_oem_docan_standard.csv +102 -0
  92. udsdoc-0.66.0/src/udsdoc/samples/compliance_matrix_oem_dtc.csv +118 -0
  93. udsdoc-0.66.0/src/udsdoc/samples/compliance_matrix_oem_reprogramming.csv +99 -0
  94. udsdoc-0.66.0/src/udsdoc/samples/compliance_matrix_oem_rid.csv +106 -0
  95. udsdoc-0.66.0/src/udsdoc/samples/compliance_matrix_oem_sample.csv +7 -0
  96. udsdoc-0.66.0/src/udsdoc/samples/compliance_matrix_sources_sample.yaml +55 -0
  97. udsdoc-0.66.0/src/udsdoc/samples/compliance_matrix_supplier_sample.csv +5 -0
  98. udsdoc-0.66.0/src/udsdoc/samples/header_config_sample.yaml +22 -0
  99. udsdoc-0.66.0/src/udsdoc/samples/llm_config_ollama.json +9 -0
  100. udsdoc-0.66.0/src/udsdoc/samples/llm_config_openrouter.json +7 -0
  101. udsdoc-0.66.0/src/udsdoc/samples/odx_supplement_sample.yaml +87 -0
  102. udsdoc-0.66.0/src/udsdoc/samples/sample1_cantp.arxml +243 -0
  103. udsdoc-0.66.0/src/udsdoc/samples/sample1_dcm.arxml +2384 -0
  104. udsdoc-0.66.0/src/udsdoc/samples/sample1_dem.arxml +493 -0
  105. udsdoc-0.66.0/src/udsdoc/samples/sample1_did.c +127 -0
  106. udsdoc-0.66.0/src/udsdoc/samples/sample1_rid.c +104 -0
  107. udsdoc-0.66.0/src/udsdoc/samples/sample2_cantp.arxml +243 -0
  108. udsdoc-0.66.0/src/udsdoc/samples/sample2_dcm.arxml +1966 -0
  109. udsdoc-0.66.0/src/udsdoc/samples/sample2_dem.arxml +493 -0
  110. udsdoc-0.66.0/src/udsdoc/samples/sample2_did.c +110 -0
  111. udsdoc-0.66.0/src/udsdoc/samples/sample2_rid.c +104 -0
  112. udsdoc-0.66.0/src/udsdoc/samples/style_preset_demo.yaml +36 -0
  113. udsdoc-0.66.0/src/udsdoc/samples/system_redundant.yaml +76 -0
  114. udsdoc-0.66.0/src/udsdoc/samples/udsspec.cls +113 -0
  115. udsdoc-0.66.0/src/udsdoc/schema.py +286 -0
  116. udsdoc-0.66.0/src/udsdoc/templates/assets/mermaid.min.js +2029 -0
  117. udsdoc-0.66.0/src/udsdoc/templates/assets/search.js +138 -0
  118. udsdoc-0.66.0/src/udsdoc/templates/assets/tikz-uml.sty +5376 -0
  119. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/root.tex.j2 +197 -0
  120. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/0_intro/0_short_descript/short_descript.tex.j2 +113 -0
  121. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/0_intro/1_about_doc/about_doc.tex.j2 +79 -0
  122. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/0_intro/2_context/context.tex.j2 +75 -0
  123. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/0_intro/intro.tex.j2 +3 -0
  124. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/1_low_layer/2_datalink/datalink.tex.j2 +22 -0
  125. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/1_low_layer/3_network/network.tex.j2 +87 -0
  126. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/1_low_layer/4_transport/transport.tex.j2 +146 -0
  127. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/1_low_layer/5_session/session.tex.j2 +127 -0
  128. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/1_low_layer/low_layer.tex.j2 +7 -0
  129. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/09_overview/overview.tex.j2 +66 -0
  130. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/10-2_sid10/sid10.tex.j2 +148 -0
  131. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/10-3_sid11/sid11.tex.j2 +130 -0
  132. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/10-4_sid27/sid27.tex.j2 +312 -0
  133. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/10-5_sid28/sid28.tex.j2 +136 -0
  134. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/10-6_sid29/sid29.tex.j2 +144 -0
  135. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/10-7_sid3E/sid3E.tex.j2 +127 -0
  136. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/10-8_sid85/sid85.tex.j2 +136 -0
  137. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/11-2_sid22/sid22.tex.j2 +137 -0
  138. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/11-7_sid2E/sid2E.tex.j2 +140 -0
  139. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/12-2_sid14/sid14.tex.j2 +122 -0
  140. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/12-3_sid19/sid19.tex.j2 +126 -0
  141. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/14-2_sid31/sid31.tex.j2 +184 -0
  142. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/15-2_sid34/sid34.tex.j2 +127 -0
  143. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/15-4_sid36/sid36.tex.j2 +131 -0
  144. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/15-5_sid37/sid37.tex.j2 +118 -0
  145. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/high_layer.tex.j2 +50 -0
  146. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/3_bootloader/bootloader.tex.j2 +8 -0
  147. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/A_annex/annex.tex.j2 +249 -0
  148. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/C_references/references.tex.j2 +31 -0
  149. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/_cm_trace.tex.j2 +36 -0
  150. udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/section.tex.j2 +10 -0
  151. udsdoc-0.66.0/src/udsdoc/templates/tikz-uml.sty +5386 -0
  152. udsdoc-0.66.0/src/udsdoc/templates/uds_spec.html.j2 +737 -0
  153. udsdoc-0.66.0/src/udsdoc/templates/uds_spec.tex.j2 +2248 -0
  154. udsdoc-0.66.0/src/udsdoc/templates/udsspec.cls +130 -0
  155. udsdoc-0.66.0/src/udsdoc/templates/web_ui.html +4548 -0
  156. udsdoc-0.66.0/src/udsdoc/tikz_svg.py +213 -0
  157. udsdoc-0.66.0/src/udsdoc/validator.py +450 -0
  158. udsdoc-0.66.0/src/udsdoc/visualizations.py +441 -0
  159. udsdoc-0.66.0/src/udsdoc/webserver.py +4732 -0
  160. udsdoc-0.66.0/src/udsdoc.egg-info/PKG-INFO +347 -0
  161. udsdoc-0.66.0/src/udsdoc.egg-info/SOURCES.txt +186 -0
  162. udsdoc-0.66.0/src/udsdoc.egg-info/dependency_links.txt +1 -0
  163. udsdoc-0.66.0/src/udsdoc.egg-info/entry_points.txt +6 -0
  164. udsdoc-0.66.0/src/udsdoc.egg-info/requires.txt +85 -0
  165. udsdoc-0.66.0/src/udsdoc.egg-info/top_level.txt +1 -0
  166. udsdoc-0.66.0/tests/test_bilingual_i18n.py +642 -0
  167. udsdoc-0.66.0/tests/test_boot_arxml_split.py +257 -0
  168. udsdoc-0.66.0/tests/test_boot_overlay.py +714 -0
  169. udsdoc-0.66.0/tests/test_cantp_15765_gaps.py +410 -0
  170. udsdoc-0.66.0/tests/test_compliance_matrix_html_report.py +156 -0
  171. udsdoc-0.66.0/tests/test_compliance_matrix_req_trace.py +185 -0
  172. udsdoc-0.66.0/tests/test_compliance_matrix_two_way_comments.py +148 -0
  173. udsdoc-0.66.0/tests/test_csv_to_arxml.py +176 -0
  174. udsdoc-0.66.0/tests/test_domain_column.py +250 -0
  175. udsdoc-0.66.0/tests/test_multi_lang.py +132 -0
  176. udsdoc-0.66.0/tests/test_odx_foundation.py +741 -0
  177. udsdoc-0.66.0/tests/test_odx_integration.py +419 -0
  178. udsdoc-0.66.0/tests/test_odx_serializer_c_cs.py +839 -0
  179. udsdoc-0.66.0/tests/test_odx_serializer_d.py +736 -0
  180. udsdoc-0.66.0/tests/test_odx_serializer_f_fd_m.py +886 -0
  181. udsdoc-0.66.0/tests/test_odx_serializer_v_e.py +846 -0
  182. udsdoc-0.66.0/tests/test_pdx_packager.py +465 -0
  183. udsdoc-0.66.0/tests/test_rename_compat.py +60 -0
  184. udsdoc-0.66.0/tests/test_repo_scanner.py +556 -0
  185. udsdoc-0.66.0/tests/test_reprogramming.py +678 -0
  186. udsdoc-0.66.0/tests/test_style_presets.py +524 -0
  187. udsdoc-0.66.0/tests/test_udsxml2tex.py +4360 -0
  188. udsdoc-0.66.0/tests/test_xsd_validator.py +230 -0
udsdoc-0.66.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 udsdoc contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
udsdoc-0.66.0/PKG-INFO ADDED
@@ -0,0 +1,347 @@
1
+ Metadata-Version: 2.4
2
+ Name: udsdoc
3
+ Version: 0.66.0
4
+ Summary: Generate UDS (ISO 14229 / 15765) specification documents and ISO 22901-1 ODX/PDX from AUTOSAR DCM/CanTp/DEM ARXML (formerly udsxml2tex)
5
+ Author: udsdoc contributors
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/YutaroNakagama/udsdoc
8
+ Project-URL: Repository, https://github.com/YutaroNakagama/udsdoc
9
+ Project-URL: Changelog, https://github.com/YutaroNakagama/udsdoc/blob/main/CHANGELOG.md
10
+ Project-URL: Issues, https://github.com/YutaroNakagama/udsdoc/issues
11
+ Keywords: autosar,arxml,uds,dcm,dem,cantp,iso14229,iso15765,iso22901,odx,pdx,latex,tex,diagnostics,udsxml2tex
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Intended Audience :: Manufacturing
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.9
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Programming Language :: Python :: Implementation :: CPython
24
+ Classifier: Topic :: Software Development :: Code Generators
25
+ Classifier: Topic :: Software Development :: Documentation
26
+ Classifier: Topic :: Software Development :: Embedded Systems
27
+ Classifier: Topic :: Text Processing :: Markup :: LaTeX
28
+ Classifier: Typing :: Typed
29
+ Requires-Python: >=3.9
30
+ Description-Content-Type: text/markdown
31
+ License-File: LICENSE
32
+ Requires-Dist: lxml>=4.9.0
33
+ Requires-Dist: Jinja2>=3.1.0
34
+ Provides-Extra: dev
35
+ Requires-Dist: pytest>=7.0; extra == "dev"
36
+ Requires-Dist: pytest-cov>=4.0; extra == "dev"
37
+ Requires-Dist: mypy>=1.0; extra == "dev"
38
+ Requires-Dist: ruff>=0.1; extra == "dev"
39
+ Provides-Extra: web
40
+ Requires-Dist: fastapi>=0.100.0; extra == "web"
41
+ Requires-Dist: uvicorn>=0.22.0; extra == "web"
42
+ Requires-Dist: python-multipart>=0.0.6; extra == "web"
43
+ Requires-Dist: PyYAML>=6.0; extra == "web"
44
+ Requires-Dist: python-dotenv>=1.0; extra == "web"
45
+ Requires-Dist: pymupdf>=1.24; extra == "web"
46
+ Provides-Extra: yaml
47
+ Requires-Dist: PyYAML>=6.0; extra == "yaml"
48
+ Provides-Extra: svg
49
+ Requires-Dist: pymupdf>=1.24; extra == "svg"
50
+ Provides-Extra: watch
51
+ Requires-Dist: watchdog>=3.0; extra == "watch"
52
+ Provides-Extra: docx
53
+ Requires-Dist: python-docx>=1.0; extra == "docx"
54
+ Provides-Extra: lsp
55
+ Requires-Dist: pygls>=1.2; extra == "lsp"
56
+ Provides-Extra: progress
57
+ Requires-Dist: tqdm>=4.65; extra == "progress"
58
+ Provides-Extra: rich
59
+ Requires-Dist: rich>=13.0; extra == "rich"
60
+ Provides-Extra: viz
61
+ Requires-Dist: matplotlib>=3.5; extra == "viz"
62
+ Requires-Dist: numpy>=1.20; extra == "viz"
63
+ Provides-Extra: llm
64
+ Requires-Dist: anthropic>=0.40.0; extra == "llm"
65
+ Requires-Dist: openai>=1.0.0; extra == "llm"
66
+ Provides-Extra: ecu-test
67
+ Requires-Dist: python-can>=4.3.0; extra == "ecu-test"
68
+ Requires-Dist: python-isotp>=2.0.0; extra == "ecu-test"
69
+ Provides-Extra: all
70
+ Requires-Dist: fastapi>=0.100.0; extra == "all"
71
+ Requires-Dist: uvicorn>=0.22.0; extra == "all"
72
+ Requires-Dist: python-multipart>=0.0.6; extra == "all"
73
+ Requires-Dist: PyYAML>=6.0; extra == "all"
74
+ Requires-Dist: python-dotenv>=1.0; extra == "all"
75
+ Requires-Dist: pymupdf>=1.24; extra == "all"
76
+ Requires-Dist: watchdog>=3.0; extra == "all"
77
+ Requires-Dist: python-docx>=1.0; extra == "all"
78
+ Requires-Dist: pygls>=1.2; extra == "all"
79
+ Requires-Dist: tqdm>=4.65; extra == "all"
80
+ Requires-Dist: rich>=13.0; extra == "all"
81
+ Requires-Dist: matplotlib>=3.5; extra == "all"
82
+ Requires-Dist: numpy>=1.20; extra == "all"
83
+ Requires-Dist: anthropic>=0.40.0; extra == "all"
84
+ Requires-Dist: openai>=1.0.0; extra == "all"
85
+ Requires-Dist: python-can>=4.3.0; extra == "all"
86
+ Requires-Dist: python-isotp>=2.0.0; extra == "all"
87
+ Provides-Extra: ci-test
88
+ Requires-Dist: fastapi>=0.100.0; extra == "ci-test"
89
+ Requires-Dist: uvicorn>=0.22.0; extra == "ci-test"
90
+ Requires-Dist: python-multipart>=0.0.6; extra == "ci-test"
91
+ Requires-Dist: PyYAML>=6.0; extra == "ci-test"
92
+ Requires-Dist: python-dotenv>=1.0; extra == "ci-test"
93
+ Requires-Dist: pymupdf>=1.24; extra == "ci-test"
94
+ Requires-Dist: watchdog>=3.0; extra == "ci-test"
95
+ Requires-Dist: python-docx>=1.0; extra == "ci-test"
96
+ Requires-Dist: pygls>=1.2; extra == "ci-test"
97
+ Requires-Dist: tqdm>=4.65; extra == "ci-test"
98
+ Requires-Dist: rich>=13.0; extra == "ci-test"
99
+ Requires-Dist: matplotlib>=3.5; extra == "ci-test"
100
+ Requires-Dist: numpy>=1.20; extra == "ci-test"
101
+ Requires-Dist: anthropic>=0.40.0; extra == "ci-test"
102
+ Requires-Dist: openai>=1.0.0; extra == "ci-test"
103
+ Dynamic: license-file
104
+
105
+ # udsdoc
106
+
107
+ **AUTOSAR DCM/CanTp/DEM ARXML → ISO 14229 (UDS) / ISO 15765 / ISO 22901-1 (ODX/PDX) specification documents.**
108
+
109
+ [![PyPI version](https://badge.fury.io/py/udsdoc.svg)](https://badge.fury.io/py/udsdoc)
110
+ [![Python](https://img.shields.io/pypi/pyversions/udsdoc.svg)](https://pypi.org/project/udsdoc/)
111
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
112
+
113
+ > **Renamed from `udsxml2tex` (v0.66.0).** The old PyPI package now installs
114
+ > this one; the `udsxml2tex` CLI command, `UDSXML2TEX_*` environment
115
+ > variables, `~/.udsxml2tex/` config directory and `udsxml2tex-*` pre-commit
116
+ > hook ids keep working as deprecated aliases until v1.0.
117
+ > Migration: `pip install udsdoc`, command `udsdoc`, `import udsdoc`.
118
+
119
+ `udsdoc` parses AUTOSAR diagnostic ARXML (DCM, CanTp, DEM, DoIP, COM, AP)
120
+ and renders a complete UDS specification in **LaTeX / PDF / HTML / Markdown
121
+ / RST / CSV / YAML / JSON / DOCX**, plus **ASAM ODX 2.2.0 / PDX**
122
+ (ISO 22901-1) for industry diagnostic tooling.
123
+
124
+ It also ships a local **browser UI** (`--serve`) that one-clicks an entire
125
+ BSW software repository through the pipeline, auto-detecting single-ECU
126
+ vs multi-ECU layouts.
127
+
128
+ ---
129
+
130
+ ## Install
131
+
132
+ ```bash
133
+ pip install udsdoc # core (LaTeX / Markdown / JSON / YAML)
134
+ pip install udsdoc[web] # browser UI (--serve) + inline TikZ-UML SVG figures
135
+ pip install udsdoc[llm] # LLM analysis (Anthropic + OpenAI / Ollama)
136
+ pip install udsdoc[ecu-test] # CAN/ISO-TP hardware testing
137
+ pip install udsdoc[all] # everything
138
+ ```
139
+
140
+ Other extras: `yaml`, `svg`, `watch`, `docx`, `lsp`, `progress`, `rich`, `viz`.
141
+
142
+ A LaTeX distribution (TeX Live / MiKTeX with `xelatex` for CJK) is required
143
+ to compile generated `.tex` to PDF. The HTML output renders standalone.
144
+ TikZ-UML diagrams in the HTML output (SID 0x10 session FSM, SID 0x27
145
+ SecurityAccess FSM and sequence) are compiled to inline SVG when `xelatex`
146
+ plus a PDF→SVG tool are present — the `[web]` / `[svg]` extras pull in
147
+ `pymupdf`, which provides an in-process PDF→SVG converter so no system
148
+ binary (`pdftocairo` / `dvisvgm` / `pdf2svg` / `inkscape`) is required.
149
+ Without the toolchain the HTML output silently falls back to Mermaid.
150
+
151
+ ---
152
+
153
+ ## Quick start
154
+
155
+ ```bash
156
+ # Single ARXML → LaTeX
157
+ udsdoc dcm.arxml -o spec.tex
158
+
159
+ # Merge DCM + CanTp + DEM
160
+ udsdoc dcm.arxml cantp.arxml --dem dem.arxml -o spec.tex
161
+
162
+ # Auto-discover everything under a BSW repo (CLI mirror of the browser UI)
163
+ udsdoc --repo /path/to/bsw-project -o spec.tex
164
+ udsdoc --repo /path/to/bsw-project --repo-dry-run # show classification
165
+
166
+ # Application + Bootloader ARXMLs owned by separate teams — placed in
167
+ # parallel subtrees (app/, boot/) under the repo root. The scanner
168
+ # detects boot-domain files by path tokens (boot/, bootloader/, bl/,
169
+ # fbl/, pbl/, sbl/, *_boot*, *_bl*) and merges them into ONE spec with
170
+ # the Drive vs Boot domain tagged per session / service / DID / RID.
171
+ udsdoc --repo /path/to/bsw-project -o spec.tex
172
+ # → "INFO: …merged bootloader spec (1 sessions, 1 dids, 1 routines)"
173
+
174
+ # Hand-off helper: OEM team has only a requirement-analysis CSV (Compliance Matrix
175
+ # format from `udsdoc --compliance-matrix-csv …`) and needs a Dcm ARXML skeleton
176
+ # to give the external bootloader supplier as the contract. Generate one
177
+ # without parsing any ARXML at all:
178
+ udsdoc --gen-arxml-from-csv oem_boot_requirements.csv \
179
+ --gen-arxml-output boot_skeleton.arxml \
180
+ --gen-arxml-ecu-name BootMcuA \
181
+ --gen-arxml-domain boot # boot|drive|both|all
182
+
183
+ # Output formats
184
+ udsdoc dcm.arxml --format html -o spec.html
185
+ udsdoc dcm.arxml --format md -o spec.md
186
+ udsdoc dcm.arxml --format pdx -o ecu.pdx # ISO 22901-1 PDX
187
+ udsdoc dcm.arxml --pdf # compile to PDF
188
+
189
+ # Multi-language output:
190
+ # --lang en+ja+de → ONE document with stacked translations (browser UI default)
191
+ # --langs en,ja,de → one document per language (legacy multi-file mode)
192
+ udsdoc dcm.arxml --lang en+ja+de -o spec.tex
193
+ udsdoc dcm.arxml --langs en,ja,de -o spec.md --format md
194
+
195
+ # Validation, diff, multi-ECU systems
196
+ udsdoc dcm.arxml --validate
197
+ udsdoc new.arxml --diff old.arxml
198
+ udsdoc --system system.yaml --system-output-dir out/ # 1+1 / gateway
199
+
200
+ # Browser UI
201
+ udsdoc --serve # http://127.0.0.1:8765
202
+ ```
203
+
204
+ ### Python API
205
+
206
+ ```python
207
+ from udsdoc import ArxmlParser, TexGenerator, validate, diff_specs
208
+
209
+ spec = ArxmlParser().parse_multi(["dcm.arxml", "cantp.arxml"])
210
+ TexGenerator().generate(spec, "spec.tex")
211
+ TexGenerator().compile_pdf("spec.tex")
212
+
213
+ print(validate(spec).summary()) # ISO 14229-1 consistency
214
+ print(diff_specs(spec_a, spec_b).to_markdown())
215
+ ```
216
+
217
+ ---
218
+
219
+ ## Features
220
+
221
+ **Coverage**
222
+
223
+ - DCM (ISO 14229-1) — sessions, security, all 26 standard services, DIDs,
224
+ routines, DTCs, memory ranges, IO control / periodic / dynamic DIDs,
225
+ Authentication, ResponseOnEvent, LinkControl, multi-client.
226
+ - CanTp (ISO 15765-2) — channels, BS/STmin, N_As/Bs/Cs/Ar/Br/Cr, addressing.
227
+ - DEM (ISO 14229-1 §11) — DTC config, OBD/WWH-OBD, freeze frames, extended
228
+ data, operation cycles, indicators, combined DTCs.
229
+ - DoIP (ISO 13400), Communication ARXML, Adaptive Platform service interfaces.
230
+ - C/C++ source scanning — DID/RID global variables (transitive depth ≤3).
231
+ - Bootloader overlay — single document covering Drive + Boot domains via YAML.
232
+
233
+ **Output**
234
+
235
+ - `tex` (Jinja2 + structured ZIP), `pdf` (xelatex/latexmk), `html` (multi-page
236
+ ZIP with offline Mermaid + NRC ladders), `md`, `rst`, `csv`, `yaml`,
237
+ `json`, `docx`, `odx`, `pdx`.
238
+ - Visualizations: heatmaps, timing diagrams, UML sequences, byte-level
239
+ DID maps, session/security FSMs.
240
+
241
+ **Requirements Compliance (ASPICE SYS.2.BP4 / ISO 26262-8 §6.4.5)**
242
+
243
+ - `--compliance-matrix CSV [CSV ...]` + `--compliance-matrix-sources YAML` — append a Requirements
244
+ Compliance Matrix chapter to the LaTeX/PDF output that joins each
245
+ upstream requirement against the parsed ARXML (SID / DID / RID / DTC /
246
+ session / security level). Resolved coverage % is computed and shown;
247
+ unresolved rows are flagged with an asterisk.
248
+
249
+ **Quality**
250
+
251
+ - `--validate` — 17 ISO 14229-1 consistency checks.
252
+ - `--diff` — semantic spec diff (ARXML or JSON).
253
+ - `--iso-version {2006,2013,2020}` — drop features outside the chosen revision.
254
+ - `--autosar-compat-report` — flag features postdating the detected AUTOSAR release.
255
+ - Schema export: JSON Schema (draft-07), Pydantic v2 model source.
256
+
257
+ **LLM analysis** (`[llm]` extra)
258
+
259
+ - `--llm-summarize`, `--llm-query`, `--llm-nrc-descriptions`, `--llm-translate`.
260
+ - Backends: Anthropic Claude API or any OpenAI-compatible server (Ollama,
261
+ llama.cpp, vLLM, OpenRouter, Azure). One-shot setup:
262
+ `udsdoc --bootstrap-ollama` (Linux/macOS).
263
+
264
+ **ECU hardware testing** (`[ecu-test]` extra)
265
+
266
+ - Auto-generates UDS test cases from the parsed spec, executes over CAN /
267
+ ISO-TP via python-can. Heuristic generator or formal `--ecu-formal`
268
+ state-machine explorer (all-transitions coverage). HTML / JUnit XML /
269
+ CSV / coverage reports.
270
+
271
+ **Multi-ECU systems**
272
+
273
+ - Declarative YAML config (`--system`) for redundant / gateway-with-forwarder
274
+ topologies, per-ECU spec + integration document, ARXML coverage-gap
275
+ routing inference, cross-ECU validator.
276
+
277
+ **Browser UI** (`--serve`, `[web]` extra)
278
+
279
+ - Local FastAPI server with five sidebar tabs:
280
+ - **Generate** — pick a BSW repository folder; the server uploads
281
+ UDS-relevant files (`.arxml`, `.c`, `.h`, `.yaml`, `.json`),
282
+ classifies each ARXML by AUTOSAR module, **auto-detects single vs
283
+ multi-ECU**, and generates the chosen format. `format=tex` ZIPs
284
+ include a compiled `spec.pdf` when `xelatex` is on PATH; otherwise
285
+ the UI flags the failure (and the ZIP carries a
286
+ `PDF_NOT_COMPILED.txt` with the underlying reason). Optional
287
+ **Compliance Matrix (Compliance Matrix)** CSV upload (ASPICE
288
+ SYS.2.BP4 / ISO 26262-8 §6.4.5 — DOORS-style) appends a per-row
289
+ compliance chapter with LaTeX `\cite{}` references; a
290
+ *Load sample bundle* button materialises a complete demo repo +
291
+ two Compliance Matrix CSVs server-side for a one-click pipeline preview.
292
+ - **Spec** — parsed SID / NRC / DID / RID / DTC tables shown
293
+ after a successful Parse & Preview.
294
+ - **Chat** — multi-turn LLM Q&A with streaming responses
295
+ (Anthropic Claude API / Ollama / OpenAI-compatible). Installed
296
+ Ollama / OpenAI models are auto-detected, and host RAM is read
297
+ server-side to recommend a model size class.
298
+ - **UDS Workbench** — interactive UDS request simulator (no
299
+ hardware required), CAN trace log analyzer (ASC / BLF), one-click
300
+ ODX / PDX export for CANalyzer & CANoe, and a collapsible
301
+ hardware-in-the-loop test runner for CAN / ISO-TP campaigns.
302
+ - **About** — version, links, feature list.
303
+
304
+ **Tooling**
305
+
306
+ - Interactive wizard (`-I`), config files (`--config`), file watching
307
+ (`--watch`), parallel parse, incremental cache, XSD validation,
308
+ pytest plugin (`uds_spec` fixture), LSP server, shell completion,
309
+ plugin system (`ParserPlugin` / `GeneratorPlugin`), i18n (en / de / ja
310
+ with bilingual `--lang ja+en` mode + multi-language `--langs en,ja,de`).
311
+
312
+ **Distribution**
313
+
314
+ - Docker image (TeX Live + `udsdoc[all]`).
315
+ - GitHub Action (Marketplace-ready).
316
+ - pre-commit hooks (validate / regen PDF / regen TeX ZIP).
317
+ - VS Code extension (right-click `.arxml` → generate / validate / diff / LLM).
318
+
319
+ ---
320
+
321
+ ## Documentation
322
+
323
+ - **Full feature reference & Python API**:
324
+ [`docs/README_full.md`](docs/README_full.md)
325
+ - **Standards coverage matrices** (ISO ↔ AUTOSAR ECUC ↔ udsdoc,
326
+ with `file:line` source citations):
327
+ [`docs/standards/`](docs/standards/)
328
+ — ISO 15765-2 (CanTp), ISO 14229-2 (session/timing),
329
+ ISO 14229-1 (services, DTC/Dem), required-ARXMLs note.
330
+ - **App + Boot ARXML split & CSV → ARXML hand-off**:
331
+ [`docs/app-boot-arxml.md`](docs/app-boot-arxml.md)
332
+ - **Changelog**: [`CHANGELOG.md`](CHANGELOG.md)
333
+ - **Contributing**: [`CONTRIBUTING.md`](CONTRIBUTING.md)
334
+
335
+ ---
336
+
337
+ ## Requirements
338
+
339
+ - Python ≥ 3.9
340
+ - `lxml` ≥ 4.9, `Jinja2` ≥ 3.1
341
+ - LaTeX with `xelatex` (TeX Live / MiKTeX) for PDF output
342
+
343
+ ---
344
+
345
+ ## License
346
+
347
+ MIT
@@ -0,0 +1,243 @@
1
+ # udsdoc
2
+
3
+ **AUTOSAR DCM/CanTp/DEM ARXML → ISO 14229 (UDS) / ISO 15765 / ISO 22901-1 (ODX/PDX) specification documents.**
4
+
5
+ [![PyPI version](https://badge.fury.io/py/udsdoc.svg)](https://badge.fury.io/py/udsdoc)
6
+ [![Python](https://img.shields.io/pypi/pyversions/udsdoc.svg)](https://pypi.org/project/udsdoc/)
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
8
+
9
+ > **Renamed from `udsxml2tex` (v0.66.0).** The old PyPI package now installs
10
+ > this one; the `udsxml2tex` CLI command, `UDSXML2TEX_*` environment
11
+ > variables, `~/.udsxml2tex/` config directory and `udsxml2tex-*` pre-commit
12
+ > hook ids keep working as deprecated aliases until v1.0.
13
+ > Migration: `pip install udsdoc`, command `udsdoc`, `import udsdoc`.
14
+
15
+ `udsdoc` parses AUTOSAR diagnostic ARXML (DCM, CanTp, DEM, DoIP, COM, AP)
16
+ and renders a complete UDS specification in **LaTeX / PDF / HTML / Markdown
17
+ / RST / CSV / YAML / JSON / DOCX**, plus **ASAM ODX 2.2.0 / PDX**
18
+ (ISO 22901-1) for industry diagnostic tooling.
19
+
20
+ It also ships a local **browser UI** (`--serve`) that one-clicks an entire
21
+ BSW software repository through the pipeline, auto-detecting single-ECU
22
+ vs multi-ECU layouts.
23
+
24
+ ---
25
+
26
+ ## Install
27
+
28
+ ```bash
29
+ pip install udsdoc # core (LaTeX / Markdown / JSON / YAML)
30
+ pip install udsdoc[web] # browser UI (--serve) + inline TikZ-UML SVG figures
31
+ pip install udsdoc[llm] # LLM analysis (Anthropic + OpenAI / Ollama)
32
+ pip install udsdoc[ecu-test] # CAN/ISO-TP hardware testing
33
+ pip install udsdoc[all] # everything
34
+ ```
35
+
36
+ Other extras: `yaml`, `svg`, `watch`, `docx`, `lsp`, `progress`, `rich`, `viz`.
37
+
38
+ A LaTeX distribution (TeX Live / MiKTeX with `xelatex` for CJK) is required
39
+ to compile generated `.tex` to PDF. The HTML output renders standalone.
40
+ TikZ-UML diagrams in the HTML output (SID 0x10 session FSM, SID 0x27
41
+ SecurityAccess FSM and sequence) are compiled to inline SVG when `xelatex`
42
+ plus a PDF→SVG tool are present — the `[web]` / `[svg]` extras pull in
43
+ `pymupdf`, which provides an in-process PDF→SVG converter so no system
44
+ binary (`pdftocairo` / `dvisvgm` / `pdf2svg` / `inkscape`) is required.
45
+ Without the toolchain the HTML output silently falls back to Mermaid.
46
+
47
+ ---
48
+
49
+ ## Quick start
50
+
51
+ ```bash
52
+ # Single ARXML → LaTeX
53
+ udsdoc dcm.arxml -o spec.tex
54
+
55
+ # Merge DCM + CanTp + DEM
56
+ udsdoc dcm.arxml cantp.arxml --dem dem.arxml -o spec.tex
57
+
58
+ # Auto-discover everything under a BSW repo (CLI mirror of the browser UI)
59
+ udsdoc --repo /path/to/bsw-project -o spec.tex
60
+ udsdoc --repo /path/to/bsw-project --repo-dry-run # show classification
61
+
62
+ # Application + Bootloader ARXMLs owned by separate teams — placed in
63
+ # parallel subtrees (app/, boot/) under the repo root. The scanner
64
+ # detects boot-domain files by path tokens (boot/, bootloader/, bl/,
65
+ # fbl/, pbl/, sbl/, *_boot*, *_bl*) and merges them into ONE spec with
66
+ # the Drive vs Boot domain tagged per session / service / DID / RID.
67
+ udsdoc --repo /path/to/bsw-project -o spec.tex
68
+ # → "INFO: …merged bootloader spec (1 sessions, 1 dids, 1 routines)"
69
+
70
+ # Hand-off helper: OEM team has only a requirement-analysis CSV (Compliance Matrix
71
+ # format from `udsdoc --compliance-matrix-csv …`) and needs a Dcm ARXML skeleton
72
+ # to give the external bootloader supplier as the contract. Generate one
73
+ # without parsing any ARXML at all:
74
+ udsdoc --gen-arxml-from-csv oem_boot_requirements.csv \
75
+ --gen-arxml-output boot_skeleton.arxml \
76
+ --gen-arxml-ecu-name BootMcuA \
77
+ --gen-arxml-domain boot # boot|drive|both|all
78
+
79
+ # Output formats
80
+ udsdoc dcm.arxml --format html -o spec.html
81
+ udsdoc dcm.arxml --format md -o spec.md
82
+ udsdoc dcm.arxml --format pdx -o ecu.pdx # ISO 22901-1 PDX
83
+ udsdoc dcm.arxml --pdf # compile to PDF
84
+
85
+ # Multi-language output:
86
+ # --lang en+ja+de → ONE document with stacked translations (browser UI default)
87
+ # --langs en,ja,de → one document per language (legacy multi-file mode)
88
+ udsdoc dcm.arxml --lang en+ja+de -o spec.tex
89
+ udsdoc dcm.arxml --langs en,ja,de -o spec.md --format md
90
+
91
+ # Validation, diff, multi-ECU systems
92
+ udsdoc dcm.arxml --validate
93
+ udsdoc new.arxml --diff old.arxml
94
+ udsdoc --system system.yaml --system-output-dir out/ # 1+1 / gateway
95
+
96
+ # Browser UI
97
+ udsdoc --serve # http://127.0.0.1:8765
98
+ ```
99
+
100
+ ### Python API
101
+
102
+ ```python
103
+ from udsdoc import ArxmlParser, TexGenerator, validate, diff_specs
104
+
105
+ spec = ArxmlParser().parse_multi(["dcm.arxml", "cantp.arxml"])
106
+ TexGenerator().generate(spec, "spec.tex")
107
+ TexGenerator().compile_pdf("spec.tex")
108
+
109
+ print(validate(spec).summary()) # ISO 14229-1 consistency
110
+ print(diff_specs(spec_a, spec_b).to_markdown())
111
+ ```
112
+
113
+ ---
114
+
115
+ ## Features
116
+
117
+ **Coverage**
118
+
119
+ - DCM (ISO 14229-1) — sessions, security, all 26 standard services, DIDs,
120
+ routines, DTCs, memory ranges, IO control / periodic / dynamic DIDs,
121
+ Authentication, ResponseOnEvent, LinkControl, multi-client.
122
+ - CanTp (ISO 15765-2) — channels, BS/STmin, N_As/Bs/Cs/Ar/Br/Cr, addressing.
123
+ - DEM (ISO 14229-1 §11) — DTC config, OBD/WWH-OBD, freeze frames, extended
124
+ data, operation cycles, indicators, combined DTCs.
125
+ - DoIP (ISO 13400), Communication ARXML, Adaptive Platform service interfaces.
126
+ - C/C++ source scanning — DID/RID global variables (transitive depth ≤3).
127
+ - Bootloader overlay — single document covering Drive + Boot domains via YAML.
128
+
129
+ **Output**
130
+
131
+ - `tex` (Jinja2 + structured ZIP), `pdf` (xelatex/latexmk), `html` (multi-page
132
+ ZIP with offline Mermaid + NRC ladders), `md`, `rst`, `csv`, `yaml`,
133
+ `json`, `docx`, `odx`, `pdx`.
134
+ - Visualizations: heatmaps, timing diagrams, UML sequences, byte-level
135
+ DID maps, session/security FSMs.
136
+
137
+ **Requirements Compliance (ASPICE SYS.2.BP4 / ISO 26262-8 §6.4.5)**
138
+
139
+ - `--compliance-matrix CSV [CSV ...]` + `--compliance-matrix-sources YAML` — append a Requirements
140
+ Compliance Matrix chapter to the LaTeX/PDF output that joins each
141
+ upstream requirement against the parsed ARXML (SID / DID / RID / DTC /
142
+ session / security level). Resolved coverage % is computed and shown;
143
+ unresolved rows are flagged with an asterisk.
144
+
145
+ **Quality**
146
+
147
+ - `--validate` — 17 ISO 14229-1 consistency checks.
148
+ - `--diff` — semantic spec diff (ARXML or JSON).
149
+ - `--iso-version {2006,2013,2020}` — drop features outside the chosen revision.
150
+ - `--autosar-compat-report` — flag features postdating the detected AUTOSAR release.
151
+ - Schema export: JSON Schema (draft-07), Pydantic v2 model source.
152
+
153
+ **LLM analysis** (`[llm]` extra)
154
+
155
+ - `--llm-summarize`, `--llm-query`, `--llm-nrc-descriptions`, `--llm-translate`.
156
+ - Backends: Anthropic Claude API or any OpenAI-compatible server (Ollama,
157
+ llama.cpp, vLLM, OpenRouter, Azure). One-shot setup:
158
+ `udsdoc --bootstrap-ollama` (Linux/macOS).
159
+
160
+ **ECU hardware testing** (`[ecu-test]` extra)
161
+
162
+ - Auto-generates UDS test cases from the parsed spec, executes over CAN /
163
+ ISO-TP via python-can. Heuristic generator or formal `--ecu-formal`
164
+ state-machine explorer (all-transitions coverage). HTML / JUnit XML /
165
+ CSV / coverage reports.
166
+
167
+ **Multi-ECU systems**
168
+
169
+ - Declarative YAML config (`--system`) for redundant / gateway-with-forwarder
170
+ topologies, per-ECU spec + integration document, ARXML coverage-gap
171
+ routing inference, cross-ECU validator.
172
+
173
+ **Browser UI** (`--serve`, `[web]` extra)
174
+
175
+ - Local FastAPI server with five sidebar tabs:
176
+ - **Generate** — pick a BSW repository folder; the server uploads
177
+ UDS-relevant files (`.arxml`, `.c`, `.h`, `.yaml`, `.json`),
178
+ classifies each ARXML by AUTOSAR module, **auto-detects single vs
179
+ multi-ECU**, and generates the chosen format. `format=tex` ZIPs
180
+ include a compiled `spec.pdf` when `xelatex` is on PATH; otherwise
181
+ the UI flags the failure (and the ZIP carries a
182
+ `PDF_NOT_COMPILED.txt` with the underlying reason). Optional
183
+ **Compliance Matrix (Compliance Matrix)** CSV upload (ASPICE
184
+ SYS.2.BP4 / ISO 26262-8 §6.4.5 — DOORS-style) appends a per-row
185
+ compliance chapter with LaTeX `\cite{}` references; a
186
+ *Load sample bundle* button materialises a complete demo repo +
187
+ two Compliance Matrix CSVs server-side for a one-click pipeline preview.
188
+ - **Spec** — parsed SID / NRC / DID / RID / DTC tables shown
189
+ after a successful Parse & Preview.
190
+ - **Chat** — multi-turn LLM Q&A with streaming responses
191
+ (Anthropic Claude API / Ollama / OpenAI-compatible). Installed
192
+ Ollama / OpenAI models are auto-detected, and host RAM is read
193
+ server-side to recommend a model size class.
194
+ - **UDS Workbench** — interactive UDS request simulator (no
195
+ hardware required), CAN trace log analyzer (ASC / BLF), one-click
196
+ ODX / PDX export for CANalyzer & CANoe, and a collapsible
197
+ hardware-in-the-loop test runner for CAN / ISO-TP campaigns.
198
+ - **About** — version, links, feature list.
199
+
200
+ **Tooling**
201
+
202
+ - Interactive wizard (`-I`), config files (`--config`), file watching
203
+ (`--watch`), parallel parse, incremental cache, XSD validation,
204
+ pytest plugin (`uds_spec` fixture), LSP server, shell completion,
205
+ plugin system (`ParserPlugin` / `GeneratorPlugin`), i18n (en / de / ja
206
+ with bilingual `--lang ja+en` mode + multi-language `--langs en,ja,de`).
207
+
208
+ **Distribution**
209
+
210
+ - Docker image (TeX Live + `udsdoc[all]`).
211
+ - GitHub Action (Marketplace-ready).
212
+ - pre-commit hooks (validate / regen PDF / regen TeX ZIP).
213
+ - VS Code extension (right-click `.arxml` → generate / validate / diff / LLM).
214
+
215
+ ---
216
+
217
+ ## Documentation
218
+
219
+ - **Full feature reference & Python API**:
220
+ [`docs/README_full.md`](docs/README_full.md)
221
+ - **Standards coverage matrices** (ISO ↔ AUTOSAR ECUC ↔ udsdoc,
222
+ with `file:line` source citations):
223
+ [`docs/standards/`](docs/standards/)
224
+ — ISO 15765-2 (CanTp), ISO 14229-2 (session/timing),
225
+ ISO 14229-1 (services, DTC/Dem), required-ARXMLs note.
226
+ - **App + Boot ARXML split & CSV → ARXML hand-off**:
227
+ [`docs/app-boot-arxml.md`](docs/app-boot-arxml.md)
228
+ - **Changelog**: [`CHANGELOG.md`](CHANGELOG.md)
229
+ - **Contributing**: [`CONTRIBUTING.md`](CONTRIBUTING.md)
230
+
231
+ ---
232
+
233
+ ## Requirements
234
+
235
+ - Python ≥ 3.9
236
+ - `lxml` ≥ 4.9, `Jinja2` ≥ 3.1
237
+ - LaTeX with `xelatex` (TeX Live / MiKTeX) for PDF output
238
+
239
+ ---
240
+
241
+ ## License
242
+
243
+ MIT