oscura 0.4.0__tar.gz → 0.5.1__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 (693) hide show
  1. oscura-0.5.1/.vscode/extensions.json +70 -0
  2. {oscura-0.4.0 → oscura-0.5.1}/.vscode/launch.json +39 -0
  3. {oscura-0.4.0 → oscura-0.5.1}/.vscode/markdown.css +119 -74
  4. {oscura-0.4.0 → oscura-0.5.1}/.vscode/settings.json +4 -4
  5. oscura-0.5.1/CHANGELOG.md +47 -0
  6. oscura-0.5.1/CLAUDE.md +388 -0
  7. {oscura-0.4.0 → oscura-0.5.1}/CONTRIBUTING.md +19 -18
  8. oscura-0.5.1/PKG-INFO +583 -0
  9. oscura-0.5.1/README.md +475 -0
  10. {oscura-0.4.0 → oscura-0.5.1}/SECURITY.md +9 -8
  11. oscura-0.5.1/demonstrations/00_getting_started/00_hello_world.py +133 -0
  12. oscura-0.5.1/demonstrations/00_getting_started/01_core_types.py +373 -0
  13. oscura-0.5.1/demonstrations/00_getting_started/02_supported_formats.py +496 -0
  14. oscura-0.5.1/demonstrations/00_getting_started/README.md +485 -0
  15. oscura-0.5.1/demonstrations/01_data_loading/01_oscilloscopes.py +507 -0
  16. oscura-0.5.1/demonstrations/01_data_loading/02_logic_analyzers.py +399 -0
  17. oscura-0.5.1/demonstrations/01_data_loading/03_automotive_formats.py +511 -0
  18. oscura-0.5.1/demonstrations/01_data_loading/04_scientific_formats.py +685 -0
  19. oscura-0.5.1/demonstrations/01_data_loading/05_custom_binary.py +629 -0
  20. oscura-0.5.1/demonstrations/01_data_loading/06_streaming_large_files.py +615 -0
  21. oscura-0.5.1/demonstrations/01_data_loading/07_multi_channel.py +719 -0
  22. oscura-0.5.1/demonstrations/01_data_loading/08_network_formats.py +770 -0
  23. oscura-0.5.1/demonstrations/01_data_loading/09_specialized_formats.py +735 -0
  24. oscura-0.5.1/demonstrations/01_data_loading/10_performance_loading.py +610 -0
  25. oscura-0.5.1/demonstrations/01_data_loading/README.md +492 -0
  26. oscura-0.5.1/demonstrations/02_basic_analysis/01_waveform_measurements.py +439 -0
  27. oscura-0.5.1/demonstrations/02_basic_analysis/02_statistics.py +491 -0
  28. oscura-0.5.1/demonstrations/02_basic_analysis/03_spectral_analysis.py +392 -0
  29. oscura-0.5.1/demonstrations/02_basic_analysis/04_filtering.py +448 -0
  30. oscura-0.5.1/demonstrations/02_basic_analysis/05_triggering.py +521 -0
  31. oscura-0.5.1/demonstrations/02_basic_analysis/06_math_operations.py +554 -0
  32. oscura-0.5.1/demonstrations/02_basic_analysis/07_wavelet_analysis.py +558 -0
  33. oscura-0.5.1/demonstrations/02_basic_analysis/README.md +557 -0
  34. oscura-0.5.1/demonstrations/03_protocol_decoding/01_serial_comprehensive.py +653 -0
  35. oscura-0.5.1/demonstrations/03_protocol_decoding/02_automotive_protocols.py +827 -0
  36. oscura-0.5.1/demonstrations/03_protocol_decoding/03_debug_protocols.py +613 -0
  37. oscura-0.5.1/demonstrations/03_protocol_decoding/04_parallel_bus.py +439 -0
  38. oscura-0.5.1/demonstrations/03_protocol_decoding/05_encoded_protocols.py +491 -0
  39. oscura-0.5.1/demonstrations/03_protocol_decoding/06_auto_detection.py +369 -0
  40. oscura-0.5.1/demonstrations/03_protocol_decoding/README.md +563 -0
  41. oscura-0.5.1/demonstrations/04_advanced_analysis/01_jitter_analysis.py +447 -0
  42. oscura-0.5.1/demonstrations/04_advanced_analysis/02_power_analysis.py +545 -0
  43. oscura-0.5.1/demonstrations/04_advanced_analysis/03_signal_integrity.py +488 -0
  44. oscura-0.5.1/demonstrations/04_advanced_analysis/04_eye_diagrams.py +475 -0
  45. oscura-0.5.1/demonstrations/04_advanced_analysis/05_pattern_discovery.py +468 -0
  46. oscura-0.5.1/demonstrations/04_advanced_analysis/06_quality_assessment.py +483 -0
  47. oscura-0.5.1/demonstrations/04_advanced_analysis/07_component_characterization.py +762 -0
  48. oscura-0.5.1/demonstrations/04_advanced_analysis/08_transmission_lines.py +544 -0
  49. oscura-0.5.1/demonstrations/04_advanced_analysis/09_digital_timing.py +606 -0
  50. oscura-0.5.1/demonstrations/04_advanced_analysis/README.md +587 -0
  51. oscura-0.5.1/demonstrations/04_advanced_analysis/__init__.py +6 -0
  52. oscura-0.5.1/demonstrations/05_domain_specific/01_automotive_diagnostics.py +530 -0
  53. oscura-0.5.1/demonstrations/05_domain_specific/02_emc_compliance.py +522 -0
  54. oscura-0.5.1/demonstrations/05_domain_specific/03_vintage_logic.py +517 -0
  55. oscura-0.5.1/demonstrations/05_domain_specific/04_side_channel.py +662 -0
  56. oscura-0.5.1/demonstrations/05_domain_specific/README.md +611 -0
  57. oscura-0.5.1/demonstrations/06_reverse_engineering/01_unknown_protocol.py +321 -0
  58. oscura-0.5.1/demonstrations/06_reverse_engineering/02_crc_recovery.py +351 -0
  59. oscura-0.5.1/demonstrations/06_reverse_engineering/03_state_machines.py +377 -0
  60. oscura-0.5.1/demonstrations/06_reverse_engineering/04_field_inference.py +369 -0
  61. oscura-0.5.1/demonstrations/06_reverse_engineering/05_pattern_discovery.py +410 -0
  62. oscura-0.5.1/demonstrations/06_reverse_engineering/06_wireshark_export.py +552 -0
  63. oscura-0.5.1/demonstrations/06_reverse_engineering/07_entropy_analysis.py +502 -0
  64. oscura-0.5.1/demonstrations/06_reverse_engineering/08_data_classification.py +501 -0
  65. oscura-0.5.1/demonstrations/06_reverse_engineering/09_signal_classification.py +480 -0
  66. oscura-0.5.1/demonstrations/06_reverse_engineering/10_anomaly_detection.py +563 -0
  67. oscura-0.5.1/demonstrations/06_reverse_engineering/README.md +231 -0
  68. oscura-0.5.1/demonstrations/06_reverse_engineering/__init__.py +26 -0
  69. oscura-0.5.1/demonstrations/07_advanced_api/01_pipeline_api.py +352 -0
  70. oscura-0.5.1/demonstrations/07_advanced_api/02_dsl_syntax.py +370 -0
  71. oscura-0.5.1/demonstrations/07_advanced_api/03_operators.py +394 -0
  72. oscura-0.5.1/demonstrations/07_advanced_api/04_composition.py +405 -0
  73. oscura-0.5.1/demonstrations/07_advanced_api/05_optimization.py +409 -0
  74. oscura-0.5.1/demonstrations/07_advanced_api/06_streaming_api.py +463 -0
  75. oscura-0.5.1/demonstrations/07_advanced_api/07_parallel_processing.py +366 -0
  76. oscura-0.5.1/demonstrations/07_advanced_api/08_gpu_acceleration.py +392 -0
  77. oscura-0.5.1/demonstrations/07_advanced_api/README.md +226 -0
  78. oscura-0.5.1/demonstrations/07_advanced_api/__init__.py +11 -0
  79. oscura-0.5.1/demonstrations/08_extensibility/01_plugin_basics.py +293 -0
  80. oscura-0.5.1/demonstrations/08_extensibility/02_custom_measurement.py +410 -0
  81. oscura-0.5.1/demonstrations/08_extensibility/03_custom_algorithm.py +462 -0
  82. oscura-0.5.1/demonstrations/08_extensibility/04_plugin_development.py +521 -0
  83. oscura-0.5.1/demonstrations/08_extensibility/05_measurement_registry.py +480 -0
  84. oscura-0.5.1/demonstrations/08_extensibility/06_plugin_templates.py +495 -0
  85. oscura-0.5.1/demonstrations/08_extensibility/README.md +600 -0
  86. oscura-0.5.1/demonstrations/09_batch_processing/01_parallel_batch.py +413 -0
  87. oscura-0.5.1/demonstrations/09_batch_processing/02_result_aggregation.py +515 -0
  88. oscura-0.5.1/demonstrations/09_batch_processing/03_progress_tracking.py +413 -0
  89. oscura-0.5.1/demonstrations/09_batch_processing/04_optimization.py +568 -0
  90. oscura-0.5.1/demonstrations/09_batch_processing/README.md +657 -0
  91. oscura-0.5.1/demonstrations/10_sessions/01_analysis_session.py +319 -0
  92. oscura-0.5.1/demonstrations/10_sessions/02_can_session.py +331 -0
  93. oscura-0.5.1/demonstrations/10_sessions/03_blackbox_session.py +333 -0
  94. oscura-0.5.1/demonstrations/10_sessions/04_session_persistence.py +376 -0
  95. oscura-0.5.1/demonstrations/10_sessions/05_interactive_analysis.py +425 -0
  96. oscura-0.5.1/demonstrations/10_sessions/README.md +678 -0
  97. oscura-0.5.1/demonstrations/10_sessions/__init__.py +5 -0
  98. oscura-0.5.1/demonstrations/11_integration/01_cli_usage.py +427 -0
  99. oscura-0.5.1/demonstrations/11_integration/02_jupyter_notebooks.py +364 -0
  100. oscura-0.5.1/demonstrations/11_integration/03_llm_integration.py +473 -0
  101. oscura-0.5.1/demonstrations/11_integration/04_configuration_files.py +522 -0
  102. oscura-0.5.1/demonstrations/11_integration/05_hardware_integration.py +566 -0
  103. oscura-0.5.1/demonstrations/11_integration/README.md +364 -0
  104. oscura-0.5.1/demonstrations/12_quality_tools/01_ensemble_methods.py +404 -0
  105. oscura-0.5.1/demonstrations/12_quality_tools/02_quality_scoring.py +556 -0
  106. oscura-0.5.1/demonstrations/12_quality_tools/03_warning_system.py +679 -0
  107. oscura-0.5.1/demonstrations/12_quality_tools/04_recommendations.py +510 -0
  108. oscura-0.5.1/demonstrations/12_quality_tools/README.md +718 -0
  109. oscura-0.5.1/demonstrations/13_guidance/01_smart_recommendations.py +527 -0
  110. oscura-0.5.1/demonstrations/13_guidance/02_analysis_wizards.py +429 -0
  111. oscura-0.5.1/demonstrations/13_guidance/03_onboarding_helpers.py +418 -0
  112. oscura-0.5.1/demonstrations/13_guidance/README.md +380 -0
  113. oscura-0.5.1/demonstrations/14_exploratory/01_unknown_signals.py +530 -0
  114. oscura-0.5.1/demonstrations/14_exploratory/02_fuzzy_matching.py +378 -0
  115. oscura-0.5.1/demonstrations/14_exploratory/03_signal_recovery.py +438 -0
  116. oscura-0.5.1/demonstrations/14_exploratory/04_exploratory_analysis.py +564 -0
  117. oscura-0.5.1/demonstrations/14_exploratory/05_advanced_search.py +454 -0
  118. oscura-0.5.1/demonstrations/14_exploratory/README.md +488 -0
  119. oscura-0.5.1/demonstrations/15_export_visualization/01_export_formats.py +391 -0
  120. oscura-0.5.1/demonstrations/15_export_visualization/02_wavedrom_timing.py +319 -0
  121. oscura-0.5.1/demonstrations/15_export_visualization/03_wireshark_dissectors.py +341 -0
  122. oscura-0.5.1/demonstrations/15_export_visualization/04_report_generation.py +435 -0
  123. oscura-0.5.1/demonstrations/15_export_visualization/05_visualization_gallery.py +382 -0
  124. oscura-0.5.1/demonstrations/15_export_visualization/06_comprehensive_export.py +827 -0
  125. oscura-0.5.1/demonstrations/15_export_visualization/README.md +608 -0
  126. oscura-0.5.1/demonstrations/16_complete_workflows/01_unknown_device_re.py +452 -0
  127. oscura-0.5.1/demonstrations/16_complete_workflows/02_automotive_diagnostics.py +500 -0
  128. oscura-0.5.1/demonstrations/16_complete_workflows/03_emc_testing.py +486 -0
  129. oscura-0.5.1/demonstrations/16_complete_workflows/04_production_testing.py +481 -0
  130. oscura-0.5.1/demonstrations/16_complete_workflows/05_failure_analysis.py +580 -0
  131. oscura-0.5.1/demonstrations/16_complete_workflows/06_device_characterization.py +587 -0
  132. oscura-0.5.1/demonstrations/16_complete_workflows/__init__.py +19 -0
  133. oscura-0.5.1/demonstrations/17_signal_generation/01_signal_builder_comprehensive.py +428 -0
  134. oscura-0.5.1/demonstrations/17_signal_generation/02_protocol_generation.py +433 -0
  135. oscura-0.5.1/demonstrations/17_signal_generation/03_impairment_simulation.py +427 -0
  136. oscura-0.5.1/demonstrations/17_signal_generation/README.md +556 -0
  137. oscura-0.5.1/demonstrations/18_comparison_testing/01_golden_reference.py +360 -0
  138. oscura-0.5.1/demonstrations/18_comparison_testing/02_limit_testing.py +384 -0
  139. oscura-0.5.1/demonstrations/18_comparison_testing/03_mask_testing.py +144 -0
  140. oscura-0.5.1/demonstrations/18_comparison_testing/04_regression_testing.py +190 -0
  141. oscura-0.5.1/demonstrations/18_comparison_testing/README.md +600 -0
  142. oscura-0.5.1/demonstrations/19_standards_compliance/01_ieee_181.py +213 -0
  143. oscura-0.5.1/demonstrations/19_standards_compliance/02_ieee_1241.py +102 -0
  144. oscura-0.5.1/demonstrations/19_standards_compliance/03_ieee_1459.py +104 -0
  145. oscura-0.5.1/demonstrations/19_standards_compliance/04_ieee_2414.py +129 -0
  146. oscura-0.5.1/demonstrations/19_standards_compliance/README.md +636 -0
  147. oscura-0.5.1/demonstrations/CAPABILITY_CROSSREF.md +576 -0
  148. oscura-0.5.1/demonstrations/README.md +287 -0
  149. oscura-0.5.1/demonstrations/STATUS.md +451 -0
  150. oscura-0.5.1/demonstrations/__init__.py +3 -0
  151. oscura-0.5.1/demonstrations/capability_index.py +318 -0
  152. oscura-0.5.1/demonstrations/common/__init__.py +55 -0
  153. oscura-0.5.1/demonstrations/common/base_demo.py +288 -0
  154. oscura-0.5.1/demonstrations/common/data_generation.py +193 -0
  155. oscura-0.5.1/demonstrations/common/formatting.py +154 -0
  156. oscura-0.5.1/demonstrations/common/plotting.py +136 -0
  157. oscura-0.5.1/demonstrations/common/validation.py +149 -0
  158. oscura-0.5.1/demonstrations/data/.gitignore +8 -0
  159. oscura-0.5.1/demonstrations/data/README.md +32 -0
  160. oscura-0.5.1/demonstrations/generate_all_data.py +113 -0
  161. oscura-0.5.1/demonstrations/validate_all.py +250 -0
  162. {oscura-0.4.0 → oscura-0.5.1}/pyproject.toml +12 -2
  163. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/__init__.py +1 -1
  164. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/__init__.py +1 -1
  165. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/export/wireshark/README.md +15 -15
  166. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/active_learning/README.md +7 -7
  167. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/pipeline/composition.py +10 -2
  168. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/templates/index.md +13 -13
  169. {oscura-0.4.0 → oscura-0.5.1}/uv.lock +75 -3
  170. oscura-0.4.0/.vscode/extensions.json +0 -55
  171. oscura-0.4.0/CHANGELOG.md +0 -1259
  172. oscura-0.4.0/CLAUDE.md +0 -235
  173. oscura-0.4.0/PKG-INFO +0 -407
  174. oscura-0.4.0/README.md +0 -304
  175. {oscura-0.4.0 → oscura-0.5.1}/.claude/summaries/.gitkeep +0 -0
  176. {oscura-0.4.0 → oscura-0.5.1}/.cspell/.gitkeep +0 -0
  177. {oscura-0.4.0 → oscura-0.5.1}/.cspell/custom-dictionary.txt +0 -0
  178. {oscura-0.4.0 → oscura-0.5.1}/.editorconfig +0 -0
  179. {oscura-0.4.0 → oscura-0.5.1}/.env.example +0 -0
  180. {oscura-0.4.0 → oscura-0.5.1}/.gitattributes +0 -0
  181. {oscura-0.4.0 → oscura-0.5.1}/.gitignore +0 -0
  182. {oscura-0.4.0 → oscura-0.5.1}/.gitleaks.toml +0 -0
  183. {oscura-0.4.0 → oscura-0.5.1}/.importlinter +0 -0
  184. {oscura-0.4.0 → oscura-0.5.1}/.lycheeignore +0 -0
  185. {oscura-0.4.0 → oscura-0.5.1}/.markdownlint.yaml +0 -0
  186. {oscura-0.4.0 → oscura-0.5.1}/.markdownlintignore +0 -0
  187. {oscura-0.4.0 → oscura-0.5.1}/.pre-commit-config.yaml +0 -0
  188. {oscura-0.4.0 → oscura-0.5.1}/.prettierignore +0 -0
  189. {oscura-0.4.0 → oscura-0.5.1}/.python-version +0 -0
  190. {oscura-0.4.0 → oscura-0.5.1}/.shellcheckrc +0 -0
  191. {oscura-0.4.0 → oscura-0.5.1}/.yamllint.yaml +0 -0
  192. {oscura-0.4.0 → oscura-0.5.1}/CITATION.cff +0 -0
  193. {oscura-0.4.0 → oscura-0.5.1}/CODE_OF_CONDUCT.md +0 -0
  194. {oscura-0.4.0 → oscura-0.5.1}/LICENSE +0 -0
  195. {oscura-0.4.0 → oscura-0.5.1}/Makefile +0 -0
  196. {oscura-0.4.0 → oscura-0.5.1}/cspell.json +0 -0
  197. {oscura-0.4.0 → oscura-0.5.1}/demos/01_waveform_analysis/demo_data/.gitkeep +0 -0
  198. {oscura-0.4.0 → oscura-0.5.1}/demos/01_waveform_analysis/generate_demo_data.py +0 -0
  199. {oscura-0.4.0 → oscura-0.5.1}/demos/03_custom_daq/demo_data/.gitkeep +0 -0
  200. {oscura-0.4.0 → oscura-0.5.1}/demos/03_custom_daq/generate_demo_data.py +0 -0
  201. {oscura-0.4.0 → oscura-0.5.1}/demos/04_serial_protocols/demo_data/.gitkeep +0 -0
  202. {oscura-0.4.0 → oscura-0.5.1}/demos/05_protocol_decoding/demo_data/.gitkeep +0 -0
  203. {oscura-0.4.0 → oscura-0.5.1}/demos/05_protocol_decoding/generate_demo_data.py +0 -0
  204. {oscura-0.4.0 → oscura-0.5.1}/demos/06_udp_packet_analysis/demo_data/.gitkeep +0 -0
  205. {oscura-0.4.0 → oscura-0.5.1}/demos/06_udp_packet_analysis/generate_demo_data.py +0 -0
  206. {oscura-0.4.0 → oscura-0.5.1}/demos/07_protocol_inference/demo_data/.gitkeep +0 -0
  207. {oscura-0.4.0 → oscura-0.5.1}/demos/09_automotive/demo_data/.gitkeep +0 -0
  208. {oscura-0.4.0 → oscura-0.5.1}/demos/09_automotive/generate_demo_data.py +0 -0
  209. {oscura-0.4.0 → oscura-0.5.1}/demos/11_mixed_signal/demo_data/.gitkeep +0 -0
  210. {oscura-0.4.0 → oscura-0.5.1}/demos/11_mixed_signal/generate_demo_data.py +0 -0
  211. {oscura-0.4.0 → oscura-0.5.1}/demos/12_spectral_compliance/demo_data/.gitkeep +0 -0
  212. {oscura-0.4.0 → oscura-0.5.1}/demos/12_spectral_compliance/generate_demo_data.py +0 -0
  213. {oscura-0.4.0 → oscura-0.5.1}/demos/13_jitter_analysis/generate_demo_data.py +0 -0
  214. {oscura-0.4.0 → oscura-0.5.1}/demos/16_emc_compliance/demo_data/.gitkeep +0 -0
  215. {oscura-0.4.0 → oscura-0.5.1}/demos/16_emc_compliance/generate_demo_data.py +0 -0
  216. {oscura-0.4.0 → oscura-0.5.1}/demos/17_signal_reverse_engineering/demo_data/.gitkeep +0 -0
  217. {oscura-0.4.0 → oscura-0.5.1}/demos/17_signal_reverse_engineering/generate_demo_data.py +0 -0
  218. {oscura-0.4.0 → oscura-0.5.1}/demos/generate_all_demo_data.py +0 -0
  219. {oscura-0.4.0 → oscura-0.5.1}/lychee.toml +0 -0
  220. {oscura-0.4.0 → oscura-0.5.1}/mkdocs.yml +0 -0
  221. {oscura-0.4.0 → oscura-0.5.1}/run_all_demos.py +0 -0
  222. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/__main__.py +0 -0
  223. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/acquisition/__init__.py +0 -0
  224. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/acquisition/file.py +0 -0
  225. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/acquisition/hardware.py +0 -0
  226. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/acquisition/saleae.py +0 -0
  227. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/acquisition/socketcan.py +0 -0
  228. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/acquisition/streaming.py +0 -0
  229. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/acquisition/synthetic.py +0 -0
  230. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/acquisition/visa.py +0 -0
  231. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/__init__.py +0 -0
  232. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/digital/__init__.py +0 -0
  233. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/digital/bus.py +0 -0
  234. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/digital/clock.py +0 -0
  235. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/digital/correlation.py +0 -0
  236. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/digital/edges.py +0 -0
  237. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/digital/extraction.py +0 -0
  238. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/digital/quality.py +0 -0
  239. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/digital/signal_quality.py +0 -0
  240. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/digital/thresholds.py +0 -0
  241. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/digital/timing.py +0 -0
  242. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/eye/__init__.py +0 -0
  243. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/eye/diagram.py +0 -0
  244. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/eye/metrics.py +0 -0
  245. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/jitter/__init__.py +0 -0
  246. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/jitter/ber.py +0 -0
  247. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/jitter/decomposition.py +0 -0
  248. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/jitter/measurements.py +0 -0
  249. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/jitter/spectrum.py +0 -0
  250. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/measurements.py +0 -0
  251. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/packet/__init__.py +0 -0
  252. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/packet/daq.py +0 -0
  253. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/packet/metrics.py +0 -0
  254. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/packet/parser.py +0 -0
  255. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/packet/payload.py +0 -0
  256. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/packet/payload_analysis.py +0 -0
  257. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/packet/payload_extraction.py +0 -0
  258. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/packet/payload_patterns.py +0 -0
  259. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/packet/stream.py +0 -0
  260. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/patterns/__init__.py +0 -0
  261. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/patterns/clustering.py +0 -0
  262. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/patterns/discovery.py +0 -0
  263. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/patterns/learning.py +0 -0
  264. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/patterns/matching.py +0 -0
  265. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/patterns/periodic.py +0 -0
  266. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/patterns/sequences.py +0 -0
  267. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/power/__init__.py +0 -0
  268. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/power/ac_power.py +0 -0
  269. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/power/basic.py +0 -0
  270. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/power/conduction.py +0 -0
  271. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/power/efficiency.py +0 -0
  272. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/power/ripple.py +0 -0
  273. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/power/soa.py +0 -0
  274. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/power/switching.py +0 -0
  275. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/protocol/__init__.py +0 -0
  276. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/protocols/__init__.py +0 -0
  277. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/protocols/base.py +0 -0
  278. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/protocols/can.py +0 -0
  279. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/protocols/can_fd.py +0 -0
  280. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/protocols/flexray.py +0 -0
  281. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/protocols/hdlc.py +0 -0
  282. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/protocols/i2c.py +0 -0
  283. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/protocols/i2s.py +0 -0
  284. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/protocols/jtag.py +0 -0
  285. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/protocols/lin.py +0 -0
  286. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/protocols/manchester.py +0 -0
  287. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/protocols/onewire.py +0 -0
  288. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/protocols/spi.py +0 -0
  289. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/protocols/swd.py +0 -0
  290. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/protocols/uart.py +0 -0
  291. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/protocols/usb.py +0 -0
  292. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/side_channel/__init__.py +0 -0
  293. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/side_channel/power.py +0 -0
  294. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/side_channel/timing.py +0 -0
  295. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/signal_integrity/__init__.py +0 -0
  296. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/signal_integrity/embedding.py +0 -0
  297. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/signal_integrity/equalization.py +0 -0
  298. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/signal_integrity/sparams.py +0 -0
  299. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/spectral/__init__.py +0 -0
  300. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/spectral/chunked.py +0 -0
  301. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/spectral/chunked_fft.py +0 -0
  302. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/spectral/chunked_wavelet.py +0 -0
  303. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/spectral/fft.py +0 -0
  304. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/statistical/__init__.py +0 -0
  305. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/statistical/checksum.py +0 -0
  306. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/statistical/chunked_corr.py +0 -0
  307. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/statistical/classification.py +0 -0
  308. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/statistical/entropy.py +0 -0
  309. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/statistical/ngrams.py +0 -0
  310. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/statistics/__init__.py +0 -0
  311. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/statistics/advanced.py +0 -0
  312. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/statistics/basic.py +0 -0
  313. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/statistics/correlation.py +0 -0
  314. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/statistics/distribution.py +0 -0
  315. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/statistics/outliers.py +0 -0
  316. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/statistics/streaming.py +0 -0
  317. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/statistics/trend.py +0 -0
  318. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/validation.py +0 -0
  319. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/waveform/__init__.py +0 -0
  320. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/waveform/measurements.py +0 -0
  321. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/waveform/measurements_with_uncertainty.py +0 -0
  322. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/waveform/spectral.py +0 -0
  323. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/analyzers/waveform/wavelets.py +0 -0
  324. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/api/__init__.py +0 -0
  325. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/api/dsl.py +0 -0
  326. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/api/fluent.py +0 -0
  327. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/api/operators.py +0 -0
  328. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/api/optimization.py +0 -0
  329. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/api/profiling.py +0 -0
  330. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/can/__init__.py +0 -0
  331. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/can/analysis.py +0 -0
  332. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/can/checksum.py +0 -0
  333. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/can/correlation.py +0 -0
  334. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/can/discovery.py +0 -0
  335. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/can/message_wrapper.py +0 -0
  336. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/can/models.py +0 -0
  337. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/can/patterns.py +0 -0
  338. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/can/session.py +0 -0
  339. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/can/state_machine.py +0 -0
  340. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/can/stimulus_response.py +0 -0
  341. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/dbc/__init__.py +0 -0
  342. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/dbc/generator.py +0 -0
  343. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/dbc/parser.py +0 -0
  344. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/dtc/__init__.py +0 -0
  345. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/dtc/data.json +0 -0
  346. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/dtc/database.py +0 -0
  347. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/j1939/__init__.py +0 -0
  348. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/j1939/decoder.py +0 -0
  349. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/loaders/__init__.py +0 -0
  350. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/loaders/asc.py +0 -0
  351. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/loaders/blf.py +0 -0
  352. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/loaders/csv_can.py +0 -0
  353. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/loaders/dispatcher.py +0 -0
  354. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/loaders/mdf.py +0 -0
  355. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/loaders/pcap.py +0 -0
  356. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/obd/__init__.py +0 -0
  357. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/obd/decoder.py +0 -0
  358. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/uds/__init__.py +0 -0
  359. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/uds/decoder.py +0 -0
  360. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/uds/models.py +0 -0
  361. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/automotive/visualization.py +0 -0
  362. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/batch/__init__.py +0 -0
  363. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/batch/advanced.py +0 -0
  364. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/batch/aggregate.py +0 -0
  365. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/batch/analyze.py +0 -0
  366. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/batch/logging.py +0 -0
  367. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/batch/metrics.py +0 -0
  368. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/builders/__init__.py +0 -0
  369. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/builders/signal_builder.py +0 -0
  370. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/cli/__init__.py +0 -0
  371. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/cli/batch.py +0 -0
  372. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/cli/characterize.py +0 -0
  373. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/cli/compare.py +0 -0
  374. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/cli/decode.py +0 -0
  375. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/cli/main.py +0 -0
  376. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/cli/shell.py +0 -0
  377. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/comparison/__init__.py +0 -0
  378. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/comparison/compare.py +0 -0
  379. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/comparison/golden.py +0 -0
  380. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/comparison/limits.py +0 -0
  381. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/comparison/mask.py +0 -0
  382. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/comparison/trace_diff.py +0 -0
  383. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/comparison/visualization.py +0 -0
  384. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/compliance/__init__.py +0 -0
  385. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/compliance/advanced.py +0 -0
  386. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/compliance/masks.py +0 -0
  387. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/compliance/reporting.py +0 -0
  388. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/compliance/testing.py +0 -0
  389. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/component/__init__.py +0 -0
  390. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/component/impedance.py +0 -0
  391. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/component/reactive.py +0 -0
  392. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/component/transmission_line.py +0 -0
  393. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/config/__init__.py +0 -0
  394. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/config/defaults.py +0 -0
  395. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/config/loader.py +0 -0
  396. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/config/memory.py +0 -0
  397. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/config/migration.py +0 -0
  398. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/config/pipeline.py +0 -0
  399. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/config/preferences.py +0 -0
  400. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/config/protocol.py +0 -0
  401. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/config/schema.py +0 -0
  402. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/config/settings.py +0 -0
  403. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/config/thresholds.py +0 -0
  404. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/convenience.py +0 -0
  405. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/__init__.py +0 -0
  406. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/audit.py +0 -0
  407. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/backend_selector.py +0 -0
  408. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/cache.py +0 -0
  409. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/cancellation.py +0 -0
  410. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/confidence.py +0 -0
  411. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/config.py +0 -0
  412. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/correlation.py +0 -0
  413. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/cross_domain.py +0 -0
  414. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/debug.py +0 -0
  415. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/edge_cases.py +0 -0
  416. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/exceptions.py +0 -0
  417. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/gpu_backend.py +0 -0
  418. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/lazy.py +0 -0
  419. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/log_query.py +0 -0
  420. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/logging.py +0 -0
  421. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/logging_advanced.py +0 -0
  422. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/memoize.py +0 -0
  423. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/memory_check.py +0 -0
  424. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/memory_guard.py +0 -0
  425. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/memory_limits.py +0 -0
  426. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/memory_monitor.py +0 -0
  427. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/memory_progress.py +0 -0
  428. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/memory_warnings.py +0 -0
  429. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/numba_backend.py +0 -0
  430. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/performance.py +0 -0
  431. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/progress.py +0 -0
  432. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/provenance.py +0 -0
  433. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/results.py +0 -0
  434. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/types.py +0 -0
  435. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/core/uncertainty.py +0 -0
  436. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/discovery/__init__.py +0 -0
  437. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/discovery/anomaly_detector.py +0 -0
  438. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/discovery/auto_decoder.py +0 -0
  439. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/discovery/comparison.py +0 -0
  440. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/discovery/quality_validator.py +0 -0
  441. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/discovery/signal_detector.py +0 -0
  442. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/dsl/__init__.py +0 -0
  443. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/dsl/commands.py +0 -0
  444. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/dsl/interpreter.py +0 -0
  445. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/dsl/parser.py +0 -0
  446. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/dsl/repl.py +0 -0
  447. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/exceptions.py +0 -0
  448. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/exploratory/__init__.py +0 -0
  449. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/exploratory/error_recovery.py +0 -0
  450. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/exploratory/fuzzy.py +0 -0
  451. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/exploratory/fuzzy_advanced.py +0 -0
  452. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/exploratory/legacy.py +0 -0
  453. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/exploratory/parse.py +0 -0
  454. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/exploratory/recovery.py +0 -0
  455. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/exploratory/sync.py +0 -0
  456. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/exploratory/unknown.py +0 -0
  457. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/export/__init__.py +0 -0
  458. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/export/wireshark/__init__.py +0 -0
  459. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/export/wireshark/generator.py +0 -0
  460. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/export/wireshark/lua_builder.py +0 -0
  461. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/export/wireshark/templates/dissector.lua.j2 +0 -0
  462. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/export/wireshark/type_mapping.py +0 -0
  463. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/export/wireshark/validator.py +0 -0
  464. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/exporters/__init__.py +0 -0
  465. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/exporters/csv.py +0 -0
  466. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/exporters/exporters.py +0 -0
  467. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/exporters/hdf5.py +0 -0
  468. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/exporters/html_export.py +0 -0
  469. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/exporters/json_export.py +0 -0
  470. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/exporters/markdown_export.py +0 -0
  471. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/exporters/matlab_export.py +0 -0
  472. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/exporters/npz_export.py +0 -0
  473. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/exporters/spice_export.py +0 -0
  474. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/extensibility/__init__.py +0 -0
  475. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/extensibility/docs.py +0 -0
  476. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/extensibility/extensions.py +0 -0
  477. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/extensibility/logging.py +0 -0
  478. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/extensibility/measurements.py +0 -0
  479. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/extensibility/plugins.py +0 -0
  480. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/extensibility/registry.py +0 -0
  481. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/extensibility/templates.py +0 -0
  482. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/extensibility/validation.py +0 -0
  483. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/filtering/__init__.py +0 -0
  484. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/filtering/base.py +0 -0
  485. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/filtering/convenience.py +0 -0
  486. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/filtering/design.py +0 -0
  487. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/filtering/filters.py +0 -0
  488. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/filtering/introspection.py +0 -0
  489. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/guidance/__init__.py +0 -0
  490. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/guidance/recommender.py +0 -0
  491. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/guidance/wizard.py +0 -0
  492. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/__init__.py +0 -0
  493. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/active_learning/__init__.py +0 -0
  494. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/active_learning/lstar.py +0 -0
  495. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/active_learning/observation_table.py +0 -0
  496. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/active_learning/oracle.py +0 -0
  497. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/active_learning/teachers/__init__.py +0 -0
  498. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/active_learning/teachers/simulator.py +0 -0
  499. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/adaptive_tuning.py +0 -0
  500. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/alignment.py +0 -0
  501. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/bayesian.py +0 -0
  502. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/binary.py +0 -0
  503. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/crc_reverse.py +0 -0
  504. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/logic.py +0 -0
  505. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/message_format.py +0 -0
  506. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/protocol.py +0 -0
  507. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/protocol_dsl.py +0 -0
  508. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/protocol_library.py +0 -0
  509. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/sequences.py +0 -0
  510. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/signal_intelligence.py +0 -0
  511. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/spectral.py +0 -0
  512. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/state_machine.py +0 -0
  513. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/inference/stream.py +0 -0
  514. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/integrations/__init__.py +0 -0
  515. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/integrations/llm.py +0 -0
  516. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/jupyter/__init__.py +0 -0
  517. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/jupyter/display.py +0 -0
  518. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/jupyter/magic.py +0 -0
  519. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/loaders/__init__.py +0 -0
  520. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/loaders/binary.py +0 -0
  521. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/loaders/chipwhisperer.py +0 -0
  522. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/loaders/configurable.py +0 -0
  523. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/loaders/csv.py +0 -0
  524. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/loaders/csv_loader.py +0 -0
  525. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/loaders/hdf5.py +0 -0
  526. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/loaders/hdf5_loader.py +0 -0
  527. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/loaders/lazy.py +0 -0
  528. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/loaders/mmap_loader.py +0 -0
  529. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/loaders/numpy_loader.py +0 -0
  530. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/loaders/pcap.py +0 -0
  531. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/loaders/preprocessing.py +0 -0
  532. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/loaders/rigol.py +0 -0
  533. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/loaders/sigrok.py +0 -0
  534. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/loaders/tdms.py +0 -0
  535. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/loaders/tektronix.py +0 -0
  536. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/loaders/touchstone.py +0 -0
  537. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/loaders/validation.py +0 -0
  538. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/loaders/vcd.py +0 -0
  539. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/loaders/wav.py +0 -0
  540. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/math/__init__.py +0 -0
  541. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/math/arithmetic.py +0 -0
  542. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/math/interpolation.py +0 -0
  543. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/onboarding/__init__.py +0 -0
  544. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/onboarding/help.py +0 -0
  545. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/onboarding/tutorials.py +0 -0
  546. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/onboarding/wizard.py +0 -0
  547. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/optimization/__init__.py +0 -0
  548. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/optimization/parallel.py +0 -0
  549. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/optimization/search.py +0 -0
  550. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/pipeline/__init__.py +0 -0
  551. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/pipeline/base.py +0 -0
  552. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/pipeline/parallel.py +0 -0
  553. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/pipeline/pipeline.py +0 -0
  554. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/pipeline/reverse_engineering.py +0 -0
  555. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/plugins/__init__.py +0 -0
  556. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/plugins/base.py +0 -0
  557. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/plugins/cli.py +0 -0
  558. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/plugins/discovery.py +0 -0
  559. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/plugins/isolation.py +0 -0
  560. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/plugins/lifecycle.py +0 -0
  561. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/plugins/manager.py +0 -0
  562. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/plugins/registry.py +0 -0
  563. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/plugins/versioning.py +0 -0
  564. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/py.typed +0 -0
  565. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/quality/__init__.py +0 -0
  566. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/quality/ensemble.py +0 -0
  567. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/quality/explainer.py +0 -0
  568. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/quality/scoring.py +0 -0
  569. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/quality/warnings.py +0 -0
  570. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/__init__.py +0 -0
  571. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/advanced.py +0 -0
  572. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/analyze.py +0 -0
  573. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/argument_preparer.py +0 -0
  574. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/auto_report.py +0 -0
  575. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/batch.py +0 -0
  576. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/chart_selection.py +0 -0
  577. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/comparison.py +0 -0
  578. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/config.py +0 -0
  579. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/content/__init__.py +0 -0
  580. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/content/executive.py +0 -0
  581. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/content/filtering.py +0 -0
  582. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/content/minimal.py +0 -0
  583. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/content/verbosity.py +0 -0
  584. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/core.py +0 -0
  585. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/core_formats/__init__.py +0 -0
  586. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/core_formats/multi_format.py +0 -0
  587. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/engine.py +0 -0
  588. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/export.py +0 -0
  589. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/formatting/__init__.py +0 -0
  590. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/formatting/emphasis.py +0 -0
  591. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/formatting/numbers.py +0 -0
  592. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/formatting/standards.py +0 -0
  593. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/formatting.py +0 -0
  594. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/html.py +0 -0
  595. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/index.py +0 -0
  596. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/multichannel.py +0 -0
  597. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/output.py +0 -0
  598. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/pdf.py +0 -0
  599. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/plots.py +0 -0
  600. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/pptx_export.py +0 -0
  601. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/renderers/__init__.py +0 -0
  602. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/renderers/pdf.py +0 -0
  603. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/sections.py +0 -0
  604. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/standards.py +0 -0
  605. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/summary_generator.py +0 -0
  606. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/tables.py +0 -0
  607. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/template_system.py +0 -0
  608. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/templates/__init__.py +0 -0
  609. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/templates/definition.py +0 -0
  610. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/reporting/templates/index.html +0 -0
  611. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/schemas/__init__.py +0 -0
  612. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/schemas/bus_configuration.json +0 -0
  613. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/schemas/device_mapping.json +0 -0
  614. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/schemas/packet_format.json +0 -0
  615. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/schemas/protocol_definition.json +0 -0
  616. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/search/__init__.py +0 -0
  617. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/search/anomaly.py +0 -0
  618. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/search/context.py +0 -0
  619. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/search/pattern.py +0 -0
  620. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/session/__init__.py +0 -0
  621. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/session/annotations.py +0 -0
  622. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/session/history.py +0 -0
  623. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/session/session.py +0 -0
  624. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/sessions/__init__.py +0 -0
  625. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/sessions/base.py +0 -0
  626. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/sessions/blackbox.py +0 -0
  627. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/sessions/generic.py +0 -0
  628. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/streaming/__init__.py +0 -0
  629. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/streaming/chunked.py +0 -0
  630. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/streaming/progressive.py +0 -0
  631. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/streaming/realtime.py +0 -0
  632. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/testing/__init__.py +0 -0
  633. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/testing/synthetic.py +0 -0
  634. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/triggering/__init__.py +0 -0
  635. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/triggering/base.py +0 -0
  636. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/triggering/edge.py +0 -0
  637. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/triggering/pattern.py +0 -0
  638. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/triggering/pulse.py +0 -0
  639. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/triggering/window.py +0 -0
  640. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/ui/__init__.py +0 -0
  641. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/ui/formatters.py +0 -0
  642. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/ui/progressive_display.py +0 -0
  643. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/utils/__init__.py +0 -0
  644. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/utils/autodetect.py +0 -0
  645. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/utils/buffer.py +0 -0
  646. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/utils/lazy.py +0 -0
  647. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/utils/lazy_imports.py +0 -0
  648. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/utils/memory.py +0 -0
  649. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/utils/memory_advanced.py +0 -0
  650. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/utils/memory_extensions.py +0 -0
  651. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/utils/progressive.py +0 -0
  652. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/utils/windowing.py +0 -0
  653. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/__init__.py +0 -0
  654. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/accessibility.py +0 -0
  655. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/annotations.py +0 -0
  656. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/axis_scaling.py +0 -0
  657. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/colors.py +0 -0
  658. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/digital.py +0 -0
  659. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/eye.py +0 -0
  660. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/histogram.py +0 -0
  661. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/interactive.py +0 -0
  662. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/jitter.py +0 -0
  663. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/keyboard.py +0 -0
  664. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/layout.py +0 -0
  665. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/optimization.py +0 -0
  666. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/palettes.py +0 -0
  667. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/plot.py +0 -0
  668. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/power.py +0 -0
  669. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/power_extended.py +0 -0
  670. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/presets.py +0 -0
  671. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/protocols.py +0 -0
  672. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/render.py +0 -0
  673. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/rendering.py +0 -0
  674. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/reverse_engineering.py +0 -0
  675. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/signal_integrity.py +0 -0
  676. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/specialized.py +0 -0
  677. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/spectral.py +0 -0
  678. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/styles.py +0 -0
  679. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/thumbnails.py +0 -0
  680. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/time_axis.py +0 -0
  681. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/visualization/waveform.py +0 -0
  682. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/workflow/__init__.py +0 -0
  683. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/workflow/dag.py +0 -0
  684. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/workflows/__init__.py +0 -0
  685. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/workflows/compliance.py +0 -0
  686. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/workflows/digital.py +0 -0
  687. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/workflows/multi_trace.py +0 -0
  688. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/workflows/power.py +0 -0
  689. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/workflows/protocol.py +0 -0
  690. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/workflows/reverse_engineering.py +0 -0
  691. {oscura-0.4.0 → oscura-0.5.1}/src/oscura/workflows/signal_integrity.py +0 -0
  692. {oscura-0.4.0 → oscura-0.5.1}/test_data/README.md +0 -0
  693. {oscura-0.4.0 → oscura-0.5.1}/validate_all_demos.py +0 -0
@@ -0,0 +1,70 @@
1
+ {
2
+ "recommendations": [
3
+ // Python
4
+ "ms-python.python", // Python language support
5
+ "ms-python.vscode-pylance", // Language server (intellisense, navigation)
6
+ "charliermarsh.ruff", // Linting & formatting (replaces black/flake8/isort)
7
+ "ms-python.mypy-type-checker", // Type checking
8
+
9
+ // Shell scripting
10
+ "mads-hartmann.bash-ide-vscode", // Bash language server
11
+ "timonwong.shellcheck", // Shell script linting
12
+
13
+ // Markdown & documentation
14
+ "yzhang.markdown-all-in-one", // Markdown editing & TOC
15
+ "davidanson.vscode-markdownlint", // Markdown linting
16
+ "bierner.markdown-mermaid", // Mermaid diagram preview
17
+ "streetsidesoftware.code-spell-checker", // Spell checking for docs
18
+
19
+ // Formatting & style
20
+ "esbenp.prettier-vscode", // Multi-format formatter (MD, YAML, JSON)
21
+ "editorconfig.editorconfig", // EditorConfig support
22
+
23
+ // Data & config files
24
+ "tamasfe.even-better-toml", // TOML language support
25
+ "redhat.vscode-yaml", // YAML language support
26
+ "redhat.vscode-xml", // XML language support
27
+ "mechatroner.rainbow-csv", // CSV/TSV visualization
28
+
29
+ // Templates
30
+ "samuelcolvin.jinjahtml", // Jinja2 template support
31
+
32
+ // Development utilities
33
+ "mhutchie.git-graph", // Lightweight git history
34
+ "usernamehw.errorlens", // Inline error display
35
+ "gruntfuggly.todo-tree", // TODO/FIXME highlighting
36
+ "christian-kohler.path-intellisense" // Path autocomplete
37
+ ],
38
+
39
+ "unwantedRecommendations": [
40
+ // Replaced by Ruff
41
+ "ms-python.black-formatter",
42
+ "ms-python.flake8",
43
+ "ms-python.isort",
44
+ "ms-python.autopep8",
45
+ "ms-python.pylint",
46
+ "himanoa.python-autopep8",
47
+ "ms-python.bandit",
48
+
49
+ // Replaced by better alternatives
50
+ "wholroyd.jinja", // Use samuelcolvin.jinjahtml
51
+ "bungcip.better-toml", // Use tamasfe.even-better-toml
52
+ "janisdd.vscode-edit-csv", // Use mechatroner.rainbow-csv
53
+ "donjayamanne.githistory", // Use mhutchie.git-graph
54
+
55
+ // Conflicts with Pylance
56
+ "magicstack.MagicPython",
57
+ "njpwerner.autodocstring",
58
+ "tushortz.python-extended-snippets",
59
+
60
+ // Not applicable to this project
61
+ "visualstudioexptteam.vscodeintellicode",
62
+ "eamodio.gitlens",
63
+ "ms-vscode.vscode-typescript-tslint-plugin",
64
+ "dbaeumer.vscode-eslint",
65
+ "ritwickdey.liveserver",
66
+ "yzane.markdown-pdf",
67
+ "shd101wyy.markdown-preview-enhanced",
68
+ "littlefoxteam.vscode-python-test-adapter"
69
+ ]
70
+ }
@@ -161,6 +161,45 @@
161
161
  "env": {
162
162
  "PYTHONPATH": "${workspaceFolder}/src"
163
163
  }
164
+ },
165
+ // ========================================================================
166
+ // Validation & Script Debugging
167
+ // ========================================================================
168
+ {
169
+ "name": "Debug Validator (validate_all.py)",
170
+ "type": "debugpy",
171
+ "request": "launch",
172
+ "program": "${workspaceFolder}/.claude/hooks/validate_all.py",
173
+ "console": "integratedTerminal",
174
+ "justMyCode": false,
175
+ "cwd": "${workspaceFolder}"
176
+ },
177
+ {
178
+ "name": "Debug Validator (validate_config_consistency.py)",
179
+ "type": "debugpy",
180
+ "request": "launch",
181
+ "program": "${workspaceFolder}/.claude/hooks/validate_config_consistency.py",
182
+ "console": "integratedTerminal",
183
+ "justMyCode": false,
184
+ "cwd": "${workspaceFolder}"
185
+ },
186
+ {
187
+ "name": "Debug Validator (validate_ssot.py)",
188
+ "type": "debugpy",
189
+ "request": "launch",
190
+ "program": "${workspaceFolder}/.claude/hooks/validate_ssot.py",
191
+ "console": "integratedTerminal",
192
+ "justMyCode": false,
193
+ "cwd": "${workspaceFolder}"
194
+ },
195
+ {
196
+ "name": "Debug Health Check",
197
+ "type": "debugpy",
198
+ "request": "launch",
199
+ "program": "${workspaceFolder}/.claude/hooks/health_check.py",
200
+ "console": "integratedTerminal",
201
+ "justMyCode": false,
202
+ "cwd": "${workspaceFolder}"
164
203
  }
165
204
  ],
166
205
  // ==========================================================================
@@ -7,11 +7,13 @@
7
7
  --base-text-weight-normal: 400;
8
8
  --base-text-weight-medium: 500;
9
9
  --base-text-weight-semibold: 600;
10
- --fontStack-monospace: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
10
+ --fontStack-monospace:
11
+ ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
11
12
  --fgColor-accent: Highlight;
12
13
  }
13
14
  @media (prefers-color-scheme: dark) {
14
- .markdown-body, [data-theme="dark"] {
15
+ .markdown-body,
16
+ [data-theme="dark"] {
15
17
  /* dark */
16
18
  color-scheme: dark;
17
19
  --focus-outlineColor: #1f6feb;
@@ -67,7 +69,8 @@
67
69
  }
68
70
  }
69
71
  @media (prefers-color-scheme: light) {
70
- .markdown-body, [data-theme="light"] {
72
+ .markdown-body,
73
+ [data-theme="light"] {
71
74
  /* light */
72
75
  color-scheme: light;
73
76
  --focus-outlineColor: #0969da;
@@ -129,7 +132,9 @@
129
132
  margin: 0;
130
133
  color: var(--fgColor-default);
131
134
  background-color: var(--bgColor-default);
132
- font-family: -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";
135
+ font-family:
136
+ -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif,
137
+ "Apple Color Emoji", "Segoe UI Emoji";
133
138
  font-size: 16px;
134
139
  line-height: 1.5;
135
140
  word-wrap: break-word;
@@ -149,7 +154,7 @@
149
154
  .markdown-body h6:hover .anchor .octicon-link:before {
150
155
  width: 16px;
151
156
  height: 16px;
152
- content: ' ';
157
+ content: " ";
153
158
  display: inline-block;
154
159
  background-color: currentColor;
155
160
  -webkit-mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg>");
@@ -192,9 +197,9 @@
192
197
  }
193
198
 
194
199
  .markdown-body h1 {
195
- margin: .67em 0;
200
+ margin: 0.67em 0;
196
201
  font-weight: var(--base-text-weight-semibold, 600);
197
- padding-bottom: .3em;
202
+ padding-bottom: 0.3em;
198
203
  font-size: 2em;
199
204
  border-bottom: 1px solid var(--borderColor-muted);
200
205
  }
@@ -247,7 +252,7 @@
247
252
  overflow: hidden;
248
253
  background: transparent;
249
254
  border-bottom: 1px solid var(--borderColor-muted);
250
- height: .25em;
255
+ height: 0.25em;
251
256
  padding: 0;
252
257
  margin: var(--base-size-24) 0;
253
258
  background-color: var(--borderColor-default);
@@ -263,33 +268,33 @@
263
268
  line-height: inherit;
264
269
  }
265
270
 
266
- .markdown-body [type=button],
267
- .markdown-body [type=reset],
268
- .markdown-body [type=submit] {
271
+ .markdown-body [type="button"],
272
+ .markdown-body [type="reset"],
273
+ .markdown-body [type="submit"] {
269
274
  -webkit-appearance: button;
270
275
  appearance: button;
271
276
  }
272
277
 
273
- .markdown-body [type=checkbox],
274
- .markdown-body [type=radio] {
278
+ .markdown-body [type="checkbox"],
279
+ .markdown-body [type="radio"] {
275
280
  box-sizing: border-box;
276
281
  padding: 0;
277
282
  }
278
283
 
279
- .markdown-body [type=number]::-webkit-inner-spin-button,
280
- .markdown-body [type=number]::-webkit-outer-spin-button {
284
+ .markdown-body [type="number"]::-webkit-inner-spin-button,
285
+ .markdown-body [type="number"]::-webkit-outer-spin-button {
281
286
  height: auto;
282
287
  }
283
288
 
284
- .markdown-body [type=search]::-webkit-search-cancel-button,
285
- .markdown-body [type=search]::-webkit-search-decoration {
289
+ .markdown-body [type="search"]::-webkit-search-cancel-button,
290
+ .markdown-body [type="search"]::-webkit-search-decoration {
286
291
  -webkit-appearance: none;
287
292
  appearance: none;
288
293
  }
289
294
 
290
295
  .markdown-body ::-webkit-input-placeholder {
291
296
  color: inherit;
292
- opacity: .54;
297
+ opacity: 0.54;
293
298
  }
294
299
 
295
300
  .markdown-body ::-webkit-file-upload-button {
@@ -338,25 +343,25 @@
338
343
  }
339
344
 
340
345
  .markdown-body a:focus,
341
- .markdown-body [role=button]:focus,
342
- .markdown-body input[type=radio]:focus,
343
- .markdown-body input[type=checkbox]:focus {
346
+ .markdown-body [role="button"]:focus,
347
+ .markdown-body input[type="radio"]:focus,
348
+ .markdown-body input[type="checkbox"]:focus {
344
349
  outline: 2px solid var(--focus-outlineColor);
345
350
  outline-offset: -2px;
346
351
  box-shadow: none;
347
352
  }
348
353
 
349
354
  .markdown-body a:focus:not(:focus-visible),
350
- .markdown-body [role=button]:focus:not(:focus-visible),
351
- .markdown-body input[type=radio]:focus:not(:focus-visible),
352
- .markdown-body input[type=checkbox]:focus:not(:focus-visible) {
355
+ .markdown-body [role="button"]:focus:not(:focus-visible),
356
+ .markdown-body input[type="radio"]:focus:not(:focus-visible),
357
+ .markdown-body input[type="checkbox"]:focus:not(:focus-visible) {
353
358
  outline: solid 1px transparent;
354
359
  }
355
360
 
356
361
  .markdown-body a:focus-visible,
357
- .markdown-body [role=button]:focus-visible,
358
- .markdown-body input[type=radio]:focus-visible,
359
- .markdown-body input[type=checkbox]:focus-visible {
362
+ .markdown-body [role="button"]:focus-visible,
363
+ .markdown-body input[type="radio"]:focus-visible,
364
+ .markdown-body input[type="checkbox"]:focus-visible {
360
365
  outline: 2px solid var(--focus-outlineColor);
361
366
  outline-offset: -2px;
362
367
  box-shadow: none;
@@ -364,17 +369,27 @@
364
369
 
365
370
  .markdown-body a:not([class]):focus,
366
371
  .markdown-body a:not([class]):focus-visible,
367
- .markdown-body input[type=radio]:focus,
368
- .markdown-body input[type=radio]:focus-visible,
369
- .markdown-body input[type=checkbox]:focus,
370
- .markdown-body input[type=checkbox]:focus-visible {
372
+ .markdown-body input[type="radio"]:focus,
373
+ .markdown-body input[type="radio"]:focus-visible,
374
+ .markdown-body input[type="checkbox"]:focus,
375
+ .markdown-body input[type="checkbox"]:focus-visible {
371
376
  outline-offset: 0;
372
377
  }
373
378
 
374
379
  .markdown-body kbd {
375
380
  display: inline-block;
376
381
  padding: var(--base-size-4);
377
- font: 11px var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace);
382
+ font: 11px
383
+ var(
384
+ --fontStack-monospace,
385
+ ui-monospace,
386
+ SFMono-Regular,
387
+ SF Mono,
388
+ Menlo,
389
+ Consolas,
390
+ Liberation Mono,
391
+ monospace
392
+ );
378
393
  line-height: 10px;
379
394
  color: var(--fgColor-default);
380
395
  vertical-align: middle;
@@ -399,7 +414,7 @@
399
414
 
400
415
  .markdown-body h2 {
401
416
  font-weight: var(--base-text-weight-semibold, 600);
402
- padding-bottom: .3em;
417
+ padding-bottom: 0.3em;
403
418
  font-size: 1.5em;
404
419
  border-bottom: 1px solid var(--borderColor-muted);
405
420
  }
@@ -416,12 +431,12 @@
416
431
 
417
432
  .markdown-body h5 {
418
433
  font-weight: var(--base-text-weight-semibold, 600);
419
- font-size: .875em;
434
+ font-size: 0.875em;
420
435
  }
421
436
 
422
437
  .markdown-body h6 {
423
438
  font-weight: var(--base-text-weight-semibold, 600);
424
- font-size: .85em;
439
+ font-size: 0.85em;
425
440
  color: var(--fgColor-muted);
426
441
  }
427
442
 
@@ -434,7 +449,7 @@
434
449
  margin: 0;
435
450
  padding: 0 1em;
436
451
  color: var(--fgColor-muted);
437
- border-left: .25em solid var(--borderColor-default);
452
+ border-left: 0.25em solid var(--borderColor-default);
438
453
  }
439
454
 
440
455
  .markdown-body ul,
@@ -463,14 +478,32 @@
463
478
  .markdown-body tt,
464
479
  .markdown-body code,
465
480
  .markdown-body samp {
466
- font-family: var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace);
481
+ font-family: var(
482
+ --fontStack-monospace,
483
+ ui-monospace,
484
+ SFMono-Regular,
485
+ SF Mono,
486
+ Menlo,
487
+ Consolas,
488
+ Liberation Mono,
489
+ monospace
490
+ );
467
491
  font-size: 12px;
468
492
  }
469
493
 
470
494
  .markdown-body pre {
471
495
  margin-top: 0;
472
496
  margin-bottom: 0;
473
- font-family: var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace);
497
+ font-family: var(
498
+ --fontStack-monospace,
499
+ ui-monospace,
500
+ SFMono-Regular,
501
+ SF Mono,
502
+ Menlo,
503
+ Consolas,
504
+ Liberation Mono,
505
+ monospace
506
+ );
474
507
  font-size: 12px;
475
508
  word-wrap: normal;
476
509
  }
@@ -503,11 +536,11 @@
503
536
  content: "";
504
537
  }
505
538
 
506
- .markdown-body>*:first-child {
539
+ .markdown-body > *:first-child {
507
540
  margin-top: 0 !important;
508
541
  }
509
542
 
510
- .markdown-body>*:last-child {
543
+ .markdown-body > *:last-child {
511
544
  margin-bottom: 0 !important;
512
545
  }
513
546
 
@@ -543,11 +576,11 @@
543
576
  margin-bottom: var(--base-size-16);
544
577
  }
545
578
 
546
- .markdown-body blockquote>:first-child {
579
+ .markdown-body blockquote > :first-child {
547
580
  margin-top: 0;
548
581
  }
549
582
 
550
- .markdown-body blockquote>:last-child {
583
+ .markdown-body blockquote > :last-child {
551
584
  margin-bottom: 0;
552
585
  }
553
586
 
@@ -592,7 +625,7 @@
592
625
  .markdown-body h5 code,
593
626
  .markdown-body h6 tt,
594
627
  .markdown-body h6 code {
595
- padding: 0 .2em;
628
+ padding: 0 0.2em;
596
629
  font-size: inherit;
597
630
  }
598
631
 
@@ -646,7 +679,7 @@
646
679
  list-style-type: decimal;
647
680
  }
648
681
 
649
- .markdown-body div>ol:not([type]) {
682
+ .markdown-body div > ol:not([type]) {
650
683
  list-style-type: decimal;
651
684
  }
652
685
 
@@ -658,12 +691,12 @@
658
691
  margin-bottom: 0;
659
692
  }
660
693
 
661
- .markdown-body li>p {
694
+ .markdown-body li > p {
662
695
  margin-top: var(--base-size-16);
663
696
  }
664
697
 
665
- .markdown-body li+li {
666
- margin-top: .25em;
698
+ .markdown-body li + li {
699
+ margin-top: 0.25em;
667
700
  }
668
701
 
669
702
  .markdown-body dl {
@@ -693,7 +726,7 @@
693
726
  border: 1px solid var(--borderColor-default);
694
727
  }
695
728
 
696
- .markdown-body table td>:last-child {
729
+ .markdown-body table td > :last-child {
697
730
  margin-bottom: 0;
698
731
  }
699
732
 
@@ -710,11 +743,11 @@
710
743
  background-color: transparent;
711
744
  }
712
745
 
713
- .markdown-body img[align=right] {
746
+ .markdown-body img[align="right"] {
714
747
  padding-left: 20px;
715
748
  }
716
749
 
717
- .markdown-body img[align=left] {
750
+ .markdown-body img[align="left"] {
718
751
  padding-right: 20px;
719
752
  }
720
753
 
@@ -729,7 +762,7 @@
729
762
  overflow: hidden;
730
763
  }
731
764
 
732
- .markdown-body span.frame>span {
765
+ .markdown-body span.frame > span {
733
766
  display: block;
734
767
  float: left;
735
768
  width: auto;
@@ -757,7 +790,7 @@
757
790
  clear: both;
758
791
  }
759
792
 
760
- .markdown-body span.align-center>span {
793
+ .markdown-body span.align-center > span {
761
794
  display: block;
762
795
  margin: 13px auto 0;
763
796
  overflow: hidden;
@@ -775,7 +808,7 @@
775
808
  clear: both;
776
809
  }
777
810
 
778
- .markdown-body span.align-right>span {
811
+ .markdown-body span.align-right > span {
779
812
  display: block;
780
813
  margin: 13px 0 0;
781
814
  overflow: hidden;
@@ -805,7 +838,7 @@
805
838
  overflow: hidden;
806
839
  }
807
840
 
808
- .markdown-body span.float-right>span {
841
+ .markdown-body span.float-right > span {
809
842
  display: block;
810
843
  margin: 13px auto 0;
811
844
  overflow: hidden;
@@ -814,7 +847,7 @@
814
847
 
815
848
  .markdown-body code,
816
849
  .markdown-body tt {
817
- padding: .2em .4em;
850
+ padding: 0.2em 0.4em;
818
851
  margin: 0;
819
852
  font-size: 85%;
820
853
  white-space: break-spaces;
@@ -839,7 +872,7 @@
839
872
  font-size: 100%;
840
873
  }
841
874
 
842
- .markdown-body pre>code {
875
+ .markdown-body pre > code {
843
876
  padding: 0;
844
877
  margin: 0;
845
878
  word-break: normal;
@@ -938,10 +971,10 @@
938
971
 
939
972
  .markdown-body .footnotes li:target::before {
940
973
  position: absolute;
941
- top: calc(var(--base-size-8)*-1);
942
- right: calc(var(--base-size-8)*-1);
943
- bottom: calc(var(--base-size-8)*-1);
944
- left: calc(var(--base-size-24)*-1);
974
+ top: calc(var(--base-size-8) * -1);
975
+ right: calc(var(--base-size-8) * -1);
976
+ bottom: calc(var(--base-size-8) * -1);
977
+ left: calc(var(--base-size-24) * -1);
945
978
  pointer-events: none;
946
979
  content: "";
947
980
  border: 2px solid var(--borderColor-accent-emphasis);
@@ -1076,8 +1109,8 @@
1076
1109
  color: var(--color-prettylights-syntax-constant-other-reference-link);
1077
1110
  }
1078
1111
 
1079
- .markdown-body [role=button]:focus:not(:focus-visible),
1080
- .markdown-body [role=tabpanel][tabindex="0"]:focus:not(:focus-visible),
1112
+ .markdown-body [role="button"]:focus:not(:focus-visible),
1113
+ .markdown-body [role="tabpanel"][tabindex="0"]:focus:not(:focus-visible),
1081
1114
  .markdown-body button:focus:not(:focus-visible),
1082
1115
  .markdown-body summary:focus:not(:focus-visible),
1083
1116
  .markdown-body a:focus:not(:focus-visible) {
@@ -1093,7 +1126,7 @@
1093
1126
  .markdown-body g-emoji {
1094
1127
  display: inline-block;
1095
1128
  min-width: 1ch;
1096
- font-family: "Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";
1129
+ font-family: "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
1097
1130
  font-size: 1em;
1098
1131
  font-style: normal !important;
1099
1132
  font-weight: var(--base-text-weight-normal, 400);
@@ -1118,7 +1151,7 @@
1118
1151
  cursor: pointer;
1119
1152
  }
1120
1153
 
1121
- .markdown-body .task-list-item+.task-list-item {
1154
+ .markdown-body .task-list-item + .task-list-item {
1122
1155
  margin-top: var(--base-size-4);
1123
1156
  }
1124
1157
 
@@ -1127,16 +1160,16 @@
1127
1160
  }
1128
1161
 
1129
1162
  .markdown-body .task-list-item-checkbox {
1130
- margin: 0 .2em .25em -1.4em;
1163
+ margin: 0 0.2em 0.25em -1.4em;
1131
1164
  vertical-align: middle;
1132
1165
  }
1133
1166
 
1134
1167
  .markdown-body ul:dir(rtl) .task-list-item-checkbox {
1135
- margin: 0 -1.6em .25em .2em;
1168
+ margin: 0 -1.6em 0.25em 0.2em;
1136
1169
  }
1137
1170
 
1138
1171
  .markdown-body ol:dir(rtl) .task-list-item-checkbox {
1139
- margin: 0 -1.6em .25em .2em;
1172
+ margin: 0 -1.6em 0.25em 0.2em;
1140
1173
  }
1141
1174
 
1142
1175
  .markdown-body .contains-task-list:hover .task-list-item-convert-container,
@@ -1156,14 +1189,14 @@
1156
1189
  padding: var(--base-size-8) var(--base-size-16);
1157
1190
  margin-bottom: var(--base-size-16);
1158
1191
  color: inherit;
1159
- border-left: .25em solid var(--borderColor-default);
1192
+ border-left: 0.25em solid var(--borderColor-default);
1160
1193
  }
1161
1194
 
1162
- .markdown-body .markdown-alert>:first-child {
1195
+ .markdown-body .markdown-alert > :first-child {
1163
1196
  margin-top: 0;
1164
1197
  }
1165
1198
 
1166
- .markdown-body .markdown-alert>:last-child {
1199
+ .markdown-body .markdown-alert > :last-child {
1167
1200
  margin-bottom: 0;
1168
1201
  }
1169
1202
 
@@ -1214,7 +1247,7 @@
1214
1247
  color: var(--fgColor-danger);
1215
1248
  }
1216
1249
 
1217
- .markdown-body>*:first-child>.heading-element:first-child {
1250
+ .markdown-body > *:first-child > .heading-element:first-child {
1218
1251
  margin-top: 0 !important;
1219
1252
  }
1220
1253
 
@@ -1236,7 +1269,8 @@
1236
1269
  --base-text-weight-normal: 400;
1237
1270
  --base-text-weight-medium: 500;
1238
1271
  --base-text-weight-semibold: 600;
1239
- --fontStack-monospace: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
1272
+ --fontStack-monospace:
1273
+ ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
1240
1274
 
1241
1275
  /* Dark theme as default */
1242
1276
  color-scheme: dark;
@@ -1369,7 +1403,9 @@ body {
1369
1403
  min-height: 100%;
1370
1404
  color: var(--fgColor-default);
1371
1405
  background-color: var(--bgColor-default);
1372
- font-family: -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";
1406
+ font-family:
1407
+ -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif,
1408
+ "Apple Color Emoji", "Segoe UI Emoji";
1373
1409
  font-size: 16px;
1374
1410
  line-height: 1.5;
1375
1411
  word-wrap: break-word;
@@ -1397,7 +1433,16 @@ pre code {
1397
1433
  background-color: #151b23;
1398
1434
  padding: 0.2em 0.4em;
1399
1435
  border-radius: 6px;
1400
- font-family: var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace);
1436
+ font-family: var(
1437
+ --fontStack-monospace,
1438
+ ui-monospace,
1439
+ SFMono-Regular,
1440
+ SF Mono,
1441
+ Menlo,
1442
+ Consolas,
1443
+ Liberation Mono,
1444
+ monospace
1445
+ );
1401
1446
  }
1402
1447
 
1403
1448
  pre {
@@ -138,14 +138,14 @@
138
138
  },
139
139
 
140
140
  // Python Testing: pytest configuration for team consistency
141
- // Note: --strict-markers and --strict-config are in pyproject.toml addopts (SSOT)
142
- // Only UI-focused args here: --tb=short for readable tracebacks, -v for verbosity
141
+ // SSOT COMPLIANCE: All pytest config in pyproject.toml [tool.pytest.ini_options]
142
+ // VS Code uses those settings automatically. Only specify minimal UI-specific args here.
143
+ // Note: pyproject.toml has --tb=line (CLI optimized), but UI benefits from --tb=short
143
144
  "python.testing.pytestEnabled": true,
144
145
  "python.testing.unittestEnabled": false,
145
146
  "python.testing.pytestArgs": [
146
147
  "tests",
147
- "--tb=short", // Short traceback format for readability in UI
148
- "-v" // Verbose output for test discovery
148
+ "--tb=short" // UI override for readability (pyproject.toml has --tb=line for CLI speed)
149
149
  ],
150
150
  "python.testing.autoTestDiscoverOnSaveEnabled": true,
151
151
 
@@ -0,0 +1,47 @@
1
+ # Changelog
2
+
3
+ All notable changes to Oscura will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.5.1] - 2026-01-24
11
+
12
+ **Clean History Release**: Production-ready framework with ultra-clean git history.
13
+
14
+ ### Added
15
+
16
+ - Comprehensive hardware reverse engineering framework
17
+ - 112 working demonstrations across 19 categories
18
+ - 16+ protocol decoders (UART, SPI, I2C, CAN, LIN, FlexRay, JTAG, SWD, etc.)
19
+ - IEEE-compliant measurements (181/1241/1459/2414 standards)
20
+ - Side-channel analysis (DPA, CPA, timing attacks)
21
+ - Unknown protocol reverse engineering capabilities
22
+ - State machine extraction and field inference
23
+ - CRC/checksum recovery tools
24
+ - Diff coverage test suite achieving 80%+ coverage
25
+ - Python 3.13 test isolation fixes
26
+ - CI/CD pipeline with merge queue
27
+ - 5/5 quality validators passing
28
+
29
+ ### Infrastructure
30
+
31
+ - Complete test coverage with parallel execution
32
+ - Automated quality checks (ruff, mypy, pytest)
33
+ - Claude Code orchestration with 6 specialized agents
34
+ - Comprehensive documentation and user guides
35
+ - Demonstration system with validation framework
36
+
37
+ ## [0.1.2] - 2025-01-18
38
+
39
+ **Initial Public Release**: Foundation of the Oscura framework.
40
+
41
+ ### Added
42
+
43
+ - Core signal processing and analysis capabilities
44
+ - Basic protocol decoding infrastructure
45
+ - Initial test suite and CI/CD pipeline
46
+ - Fundamental documentation and examples
47
+ - Package structure and build system