oscura 0.3.0__py3-none-any.whl → 0.5.0__py3-none-any.whl

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 (59) hide show
  1. oscura/__init__.py +1 -7
  2. oscura/acquisition/__init__.py +147 -0
  3. oscura/acquisition/file.py +255 -0
  4. oscura/acquisition/hardware.py +186 -0
  5. oscura/acquisition/saleae.py +340 -0
  6. oscura/acquisition/socketcan.py +315 -0
  7. oscura/acquisition/streaming.py +38 -0
  8. oscura/acquisition/synthetic.py +229 -0
  9. oscura/acquisition/visa.py +376 -0
  10. oscura/analyzers/__init__.py +3 -0
  11. oscura/analyzers/digital/__init__.py +48 -0
  12. oscura/analyzers/digital/clock.py +9 -1
  13. oscura/analyzers/digital/edges.py +1 -1
  14. oscura/analyzers/digital/extraction.py +195 -0
  15. oscura/analyzers/digital/ic_database.py +498 -0
  16. oscura/analyzers/digital/timing.py +41 -11
  17. oscura/analyzers/digital/timing_paths.py +339 -0
  18. oscura/analyzers/digital/vintage.py +377 -0
  19. oscura/analyzers/digital/vintage_result.py +148 -0
  20. oscura/analyzers/protocols/__init__.py +22 -1
  21. oscura/analyzers/protocols/parallel_bus.py +449 -0
  22. oscura/analyzers/side_channel/__init__.py +52 -0
  23. oscura/analyzers/side_channel/power.py +690 -0
  24. oscura/analyzers/side_channel/timing.py +369 -0
  25. oscura/analyzers/signal_integrity/sparams.py +1 -1
  26. oscura/automotive/__init__.py +4 -2
  27. oscura/automotive/can/patterns.py +3 -1
  28. oscura/automotive/can/session.py +277 -78
  29. oscura/automotive/can/state_machine.py +5 -2
  30. oscura/builders/__init__.py +9 -11
  31. oscura/builders/signal_builder.py +99 -191
  32. oscura/core/exceptions.py +5 -1
  33. oscura/export/__init__.py +12 -0
  34. oscura/export/wavedrom.py +430 -0
  35. oscura/exporters/json_export.py +47 -0
  36. oscura/exporters/vintage_logic_csv.py +247 -0
  37. oscura/loaders/__init__.py +1 -0
  38. oscura/loaders/chipwhisperer.py +393 -0
  39. oscura/loaders/touchstone.py +1 -1
  40. oscura/reporting/__init__.py +7 -0
  41. oscura/reporting/vintage_logic_report.py +523 -0
  42. oscura/session/session.py +54 -46
  43. oscura/sessions/__init__.py +70 -0
  44. oscura/sessions/base.py +323 -0
  45. oscura/sessions/blackbox.py +640 -0
  46. oscura/sessions/generic.py +189 -0
  47. oscura/utils/autodetect.py +5 -1
  48. oscura/visualization/digital_advanced.py +718 -0
  49. oscura/visualization/figure_manager.py +156 -0
  50. {oscura-0.3.0.dist-info → oscura-0.5.0.dist-info}/METADATA +86 -5
  51. {oscura-0.3.0.dist-info → oscura-0.5.0.dist-info}/RECORD +54 -33
  52. oscura/automotive/dtc/data.json +0 -2763
  53. oscura/schemas/bus_configuration.json +0 -322
  54. oscura/schemas/device_mapping.json +0 -182
  55. oscura/schemas/packet_format.json +0 -418
  56. oscura/schemas/protocol_definition.json +0 -363
  57. {oscura-0.3.0.dist-info → oscura-0.5.0.dist-info}/WHEEL +0 -0
  58. {oscura-0.3.0.dist-info → oscura-0.5.0.dist-info}/entry_points.txt +0 -0
  59. {oscura-0.3.0.dist-info → oscura-0.5.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,156 @@
1
+ """Figure management for saving and organizing matplotlib figures.
2
+
3
+ This module provides utilities for saving matplotlib figures in multiple formats
4
+ and managing collections of figures for report generation.
5
+
6
+ Example:
7
+ >>> from oscura.visualization.figure_manager import FigureManager
8
+ >>> manager = FigureManager(output_dir="./plots")
9
+ >>> paths = manager.save_figure(fig, "timing_diagram", formats=["png", "svg"])
10
+ >>> base64_img = manager.embed_as_base64(fig, format="png")
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ import base64
16
+ from io import BytesIO
17
+ from pathlib import Path
18
+ from typing import TYPE_CHECKING, Any
19
+
20
+ if TYPE_CHECKING:
21
+ from matplotlib.figure import Figure
22
+
23
+
24
+ class FigureManager:
25
+ """Manager for saving and organizing matplotlib figures.
26
+
27
+ Attributes:
28
+ output_dir: Directory for saving figures.
29
+ saved_figures: Dictionary mapping figure names to saved paths.
30
+ """
31
+
32
+ def __init__(self, output_dir: str | Path):
33
+ """Initialize figure manager.
34
+
35
+ Args:
36
+ output_dir: Directory for saving figures.
37
+ """
38
+ self.output_dir = Path(output_dir)
39
+ self.output_dir.mkdir(parents=True, exist_ok=True)
40
+ self.saved_figures: dict[str, dict[str, Path]] = {}
41
+
42
+ def save_figure(
43
+ self,
44
+ fig: Figure,
45
+ name: str,
46
+ *,
47
+ formats: list[str] | None = None,
48
+ dpi: int = 300,
49
+ **savefig_kwargs: Any,
50
+ ) -> dict[str, Path]:
51
+ """Save figure in multiple formats.
52
+
53
+ Args:
54
+ fig: Matplotlib figure to save.
55
+ name: Base name for the saved files (without extension).
56
+ formats: List of formats to save ("png", "svg", "pdf"). Defaults to ["png"].
57
+ dpi: Resolution for raster formats (default: 300).
58
+ **savefig_kwargs: Additional kwargs passed to fig.savefig().
59
+
60
+ Returns:
61
+ Dictionary mapping format to saved file path.
62
+
63
+ Example:
64
+ >>> paths = manager.save_figure(fig, "timing_diagram", formats=["png", "svg"])
65
+ >>> print(paths["png"]) # PosixPath('./plots/timing_diagram.png')
66
+ """
67
+ if formats is None:
68
+ formats = ["png"]
69
+
70
+ saved_paths: dict[str, Path] = {}
71
+
72
+ for fmt in formats:
73
+ # Construct file path
74
+ file_path = self.output_dir / f"{name}.{fmt}"
75
+
76
+ # Save figure
77
+ fig.savefig(
78
+ file_path,
79
+ dpi=dpi,
80
+ bbox_inches="tight",
81
+ format=fmt,
82
+ **savefig_kwargs,
83
+ )
84
+
85
+ saved_paths[fmt] = file_path
86
+
87
+ # Store in saved_figures registry
88
+ self.saved_figures[name] = saved_paths
89
+
90
+ return saved_paths
91
+
92
+ def embed_as_base64(
93
+ self,
94
+ fig: Figure,
95
+ format: str = "png",
96
+ dpi: int = 150,
97
+ **savefig_kwargs: Any,
98
+ ) -> str:
99
+ """Convert figure to base64-encoded string for HTML embedding.
100
+
101
+ Args:
102
+ fig: Matplotlib figure to convert.
103
+ format: Image format ("png", "jpg", "svg"). Default: "png".
104
+ dpi: Resolution for raster formats (default: 150).
105
+ **savefig_kwargs: Additional kwargs passed to fig.savefig().
106
+
107
+ Returns:
108
+ Base64-encoded image string (without data URI prefix).
109
+
110
+ Example:
111
+ >>> base64_img = manager.embed_as_base64(fig)
112
+ >>> html = f'<img src="data:image/png;base64,{base64_img}" />'
113
+ """
114
+ # Save figure to bytes buffer
115
+ buf = BytesIO()
116
+ fig.savefig(
117
+ buf,
118
+ format=format,
119
+ dpi=dpi,
120
+ bbox_inches="tight",
121
+ **savefig_kwargs,
122
+ )
123
+ buf.seek(0)
124
+
125
+ # Encode to base64
126
+ img_base64 = base64.b64encode(buf.read()).decode("utf-8")
127
+ buf.close()
128
+
129
+ return img_base64
130
+
131
+ def get_saved_path(self, name: str, format: str) -> Path | None:
132
+ """Get path to a saved figure.
133
+
134
+ Args:
135
+ name: Figure name.
136
+ format: Image format.
137
+
138
+ Returns:
139
+ Path to saved figure, or None if not found.
140
+ """
141
+ if name in self.saved_figures:
142
+ return self.saved_figures[name].get(format)
143
+ return None
144
+
145
+ def list_saved_figures(self) -> list[str]:
146
+ """Get list of all saved figure names.
147
+
148
+ Returns:
149
+ List of figure names.
150
+ """
151
+ return list(self.saved_figures.keys())
152
+
153
+
154
+ __all__ = [
155
+ "FigureManager",
156
+ ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oscura
3
- Version: 0.3.0
3
+ Version: 0.5.0
4
4
  Summary: Unified hardware reverse engineering framework. Extract all information from any system through signals and data. Unknown protocol discovery, state machine extraction, CRC recovery, security analysis. 16+ protocols, IEEE-compliant measurements.
5
5
  Project-URL: Homepage, https://github.com/oscura-re/oscura
6
6
  Project-URL: Documentation, https://github.com/oscura-re/oscura/tree/main/docs
@@ -57,6 +57,8 @@ Requires-Dist: pytest-timeout<3.0.0,>=2.3.0; extra == 'all'
57
57
  Requires-Dist: pytest<10.0.0,>=8.0; extra == 'all'
58
58
  Requires-Dist: python-can<5.0.0,>=4.4.0; extra == 'all'
59
59
  Requires-Dist: python-pptx<1.0.0,>=0.6.21; extra == 'all'
60
+ Requires-Dist: pyvisa-py<1.0.0,>=0.7.0; extra == 'all'
61
+ Requires-Dist: pyvisa<2.0.0,>=1.13.0; extra == 'all'
60
62
  Requires-Dist: pywavelets<2.0.0,>=1.0.0; extra == 'all'
61
63
  Requires-Dist: reportlab<6.0.0,>=4.4.7; extra == 'all'
62
64
  Requires-Dist: rigolwfm<2.0.0,>=1.0.0; extra == 'all'
@@ -82,6 +84,9 @@ Requires-Dist: pytest-timeout<3.0.0,>=2.3.0; extra == 'dev'
82
84
  Requires-Dist: pytest<10.0.0,>=8.0; extra == 'dev'
83
85
  Requires-Dist: types-pyyaml<7.0.0,>=6.0; extra == 'dev'
84
86
  Requires-Dist: yamllint<2.0.0,>=1.35; extra == 'dev'
87
+ Provides-Extra: hardware
88
+ Requires-Dist: pyvisa-py<1.0.0,>=0.7.0; extra == 'hardware'
89
+ Requires-Dist: pyvisa<2.0.0,>=1.13.0; extra == 'hardware'
85
90
  Provides-Extra: hdf5
86
91
  Requires-Dist: h5py<4.0.0,>=3.0.0; extra == 'hdf5'
87
92
  Provides-Extra: jupyter
@@ -127,11 +132,15 @@ Description-Content-Type: text/markdown
127
132
 
128
133
  Oscura is a hardware reverse engineering framework for security researchers, right-to-repair advocates, defense analysts, and commercial intelligence teams. From oscilloscope captures to complete system understanding.
129
134
 
130
- **Reverse Engineering**: Unknown protocol discovery • State machine extraction • CRC/checksum recovery • Proprietary device replication • Security vulnerability analysis
135
+ **Reverse Engineering**: Unknown protocol discovery • State machine extraction • CRC/checksum recovery • Proprietary device replication • Security vulnerability analysis • Black-box protocol analysis
131
136
 
132
- **Signal Analysis**: IEEE-compliant measurements (181/1241/1459/2414) • Comprehensive protocol decoding (16+ protocols) • Spectral analysis • Timing characterization
137
+ **Signal Analysis**: IEEE-compliant measurements (181/1241/1459/2414) • Comprehensive protocol decoding (16+ protocols) • Spectral analysis • Timing characterization • Side-channel analysis (DPA/CPA/timing attacks)
133
138
 
134
- **Built For**: ExploitationReplication Defense analysisCommercial intelligenceRight-to-repair
139
+ **Unified Acquisition**: File-basedHardware sources (SocketCAN, Saleae, PyVISA - Phase 2) Synthetic generationPolymorphic Source protocol
140
+
141
+ **Interactive Sessions**: Domain-specific analysis sessions • BlackBoxSession for protocol RE • Differential analysis • Field hypothesis generation • Protocol specification export
142
+
143
+ **Built For**: Exploitation • Replication • Defense analysis • Commercial intelligence • Right-to-repair • Cryptographic research
135
144
 
136
145
  ---
137
146
 
@@ -155,6 +164,8 @@ cd oscura
155
164
 
156
165
  ## Quick Start
157
166
 
167
+ ### Signal Analysis
168
+
158
169
  ```python
159
170
  import oscura as osc
160
171
 
@@ -171,6 +182,57 @@ decoder = UARTDecoder(baud_rate=115200)
171
182
  messages = decoder.decode(trace)
172
183
  ```
173
184
 
185
+ ### Black-Box Protocol Reverse Engineering
186
+
187
+ ```python
188
+ from oscura.sessions import BlackBoxSession
189
+ from oscura.acquisition import FileSource
190
+
191
+ # Create analysis session
192
+ session = BlackBoxSession(name="IoT Device RE")
193
+
194
+ # Add recordings from different stimuli
195
+ session.add_recording("idle", FileSource("idle.bin"))
196
+ session.add_recording("button_press", FileSource("button.bin"))
197
+
198
+ # Differential analysis
199
+ diff = session.compare("idle", "button_press")
200
+ print(f"Changed bytes: {diff.changed_bytes}")
201
+
202
+ # Generate protocol specification
203
+ spec = session.generate_protocol_spec()
204
+ print(f"Detected {len(spec['fields'])} protocol fields")
205
+
206
+ # Export Wireshark dissector
207
+ session.export_results("dissector", "protocol.lua")
208
+ ```
209
+
210
+ ### CAN Protocol Analysis
211
+
212
+ ```python
213
+ from oscura.automotive.can import CANSession
214
+ from oscura.acquisition import FileSource
215
+
216
+ # Create session
217
+ session = CANSession(name="Vehicle Analysis")
218
+
219
+ # Add recordings from CAN bus captures
220
+ session.add_recording("idle", FileSource("idle.blf"))
221
+ session.add_recording("accelerate", FileSource("accelerate.blf"))
222
+
223
+ # Analyze traffic
224
+ analysis = session.analyze()
225
+ print(f"Messages: {analysis['inventory']['total_messages']}")
226
+ print(f"Unique IDs: {len(analysis['inventory']['message_ids'])}")
227
+
228
+ # Compare recordings
229
+ diff = session.compare("idle", "accelerate")
230
+ print(f"Changed IDs: {len(diff.details['changed_ids'])}")
231
+
232
+ # Export DBC file
233
+ session.export_dbc("vehicle.dbc")
234
+ ```
235
+
174
236
  ---
175
237
 
176
238
  ## Learn by Example
@@ -285,9 +347,28 @@ uv sync --all-extras
285
347
 
286
348
  ## Documentation
287
349
 
288
- - **[Demos](demos/)** - Start here (working examples)
350
+ ### Getting Started
351
+
352
+ - **[Quick Start Guide](docs/guides/quick-start.md)** - Begin here
353
+ - **[Demos](demos/)** - Working examples for every feature
354
+ - **[Migration Guide](docs/migration/v0-to-v1.md)** - Upgrade from older versions
355
+
356
+ ### User Guides
357
+
358
+ - **[Black-Box Protocol Analysis](docs/guides/blackbox-analysis.md)** - Unknown protocol reverse engineering
359
+ - **[Hardware Acquisition](docs/guides/hardware-acquisition.md)** - Direct hardware integration (Phase 2)
360
+ - **[Side-Channel Analysis](docs/guides/side-channel-analysis.md)** - Power/timing/EM attacks
361
+ - **[Workflows](docs/guides/workflows.md)** - Complete analysis workflows
362
+
363
+ ### API Reference
364
+
289
365
  - **[API Reference](docs/api/)** - Complete API documentation
366
+ - **[Session Management](docs/api/session-management.md)** - Interactive analysis sessions
290
367
  - **[CLI Reference](docs/cli.md)** - Command line usage
368
+
369
+ ### Development
370
+
371
+ - **[Architecture](docs/architecture/)** - Design principles and patterns
291
372
  - **[Testing Guide](docs/testing/)** - Test suite architecture
292
373
  - **[CHANGELOG](CHANGELOG.md)** - Version history
293
374
 
@@ -1,21 +1,33 @@
1
- oscura/__init__.py,sha256=V1fB6L32oWxgv5OtAHJKWTAtb9DqD_QXkfAcsEge-pw,18443
1
+ oscura/__init__.py,sha256=JQy7jHn9bhuDQajZSL5Eq4H31pUdqNMEakzDrEf1FIQ,18313
2
2
  oscura/__main__.py,sha256=l1rnaD-tpI1W3cp1VHGhSdq9NDqw6Gxjf_gnqXf-zzE,11786
3
3
  oscura/convenience.py,sha256=o8f1Im8WpakGXRz8D4bV-XSNkzpgnVjsyVxnaxZ-dg4,14612
4
4
  oscura/exceptions.py,sha256=Ywyi7IhEG9XmbceCxAcLGKAddAOdP9Ph1ZT2NioMQCU,1606
5
5
  oscura/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- oscura/analyzers/__init__.py,sha256=UNSltiHbqKbkuBOSeOqy9R2VkFcBIAFwPErJ0H1pswM,896
6
+ oscura/acquisition/__init__.py,sha256=JAQt5FXsGiKPkqHuyWJoGVnGf1ElSRXqGxJdjcDLLho,4834
7
+ oscura/acquisition/file.py,sha256=nrOWunIGxUaF-B946ZKwME4f-8jbWhp3z3BadvCuUw0,8426
8
+ oscura/acquisition/hardware.py,sha256=-BrIi0aLoVBTVIh5gdTvYY5OrDPIv06wxrx28GJw7j8,6598
9
+ oscura/acquisition/saleae.py,sha256=D61v7_k-zZzor-jiYHFwjd-u8VFo93spQ3_m7Jhk_Dc,11438
10
+ oscura/acquisition/socketcan.py,sha256=ifs7Chv-pk4LLYTvfe4-9xS2-vbe4efqVd1azIYLexE,10575
11
+ oscura/acquisition/streaming.py,sha256=P57M8S33DGIeoDUSBHm3bzoKfNIDZkYE4dODPNeJy78,1191
12
+ oscura/acquisition/synthetic.py,sha256=VXhz5W0gzwE3_Ezo7hADwfFoTV5pOixpPCVNPMngNAo,7823
13
+ oscura/acquisition/visa.py,sha256=phUwdlbphvNhSCaRgIXuPb8YDP0jR4eqY-OuJXCgRCo,12272
14
+ oscura/analyzers/__init__.py,sha256=LE-KFYoVePYsiPIy2NDNB2OrzbtqYezdCu9xqqPxgrY,985
7
15
  oscura/analyzers/measurements.py,sha256=ng5Qt2jyAvfKw3JQbJY_JNUqAOJEZwPo3UWa0xSg5Xk,697
8
16
  oscura/analyzers/validation.py,sha256=vHSKmLThwcU0j5Dat9QPbWImw_dqUGaZk_Ul6XbJ958,20376
9
- oscura/analyzers/digital/__init__.py,sha256=CrZxLveYI-nZ7INCZg-4zp8UP_uQRpMmX2vljzudJ6s,4228
17
+ oscura/analyzers/digital/__init__.py,sha256=uvsCUtA1V3PIinIf2l2CXPShx4qIYzNtD-oIGfFBU6E,5399
10
18
  oscura/analyzers/digital/bus.py,sha256=Wf3QUKNSxzXaWItR1rdf32kELayywrIg0TC-OhKEub0,22717
11
- oscura/analyzers/digital/clock.py,sha256=Ls9-YgH0qRLhkZWG9qVadcGw9koT21UPvFk-Ia5OuZ8,25802
19
+ oscura/analyzers/digital/clock.py,sha256=2WihQyf2fUlKTDAOKrhQSStiuUw711CvR6bMbkiliAc,26088
12
20
  oscura/analyzers/digital/correlation.py,sha256=_D-pmymVU1rTemSUfg_MklXCo03VkfAFcxSTLAV6jcY,23689
13
- oscura/analyzers/digital/edges.py,sha256=uQf00dxcN8h8dni3l-ksZ8XsMswk5Gzhtdqp7GpFkk8,20000
14
- oscura/analyzers/digital/extraction.py,sha256=wBOPZi3H1llCHsq36txz_jkEO--Sj6pbsxPZXXGk5_c,12144
21
+ oscura/analyzers/digital/edges.py,sha256=-Mlyh_SFkqs7L2n11bfYlv8bHD-jrfV6UByhXS1DLp0,20018
22
+ oscura/analyzers/digital/extraction.py,sha256=OhePZrtAPHmUKbtEc3_lVXBKak2wT8OQD0ELJI69uIA,17980
23
+ oscura/analyzers/digital/ic_database.py,sha256=UUyeK1ckJXzv3oKhNOMJQcm9kmCx6g6SBA-eVHvvGO4,12393
15
24
  oscura/analyzers/digital/quality.py,sha256=bMXpmAhs15tjyiWW0Ao5aZcK_8AvEKyo_E3rtxDrFlo,27413
16
25
  oscura/analyzers/digital/signal_quality.py,sha256=Ssb1MkUfqjiENJJFOslkTX8Ef6C65HFCM_Ra20Bvp4k,30130
17
26
  oscura/analyzers/digital/thresholds.py,sha256=CrGgO1rtzkUOnYb40UT3_uD_0qVA853lGL2WNL95qv4,22428
18
- oscura/analyzers/digital/timing.py,sha256=ilk6iacaIup2epB_VOnNjg0jGBFT5wBX-CpaZLFVScM,33138
27
+ oscura/analyzers/digital/timing.py,sha256=eOo1jk-FfUd3tkqDndPTz-JO5tnfW9w4dEI-klgW-QU,34862
28
+ oscura/analyzers/digital/timing_paths.py,sha256=SQY7L7QPEm3IuiZGRULJtRJT1AbSLrc4OtKbahwb4eo,10433
29
+ oscura/analyzers/digital/vintage.py,sha256=3Ayufv-q2B4flhSG2DOrJkrIuiHnHDv5hbUHTR3dQQU,13910
30
+ oscura/analyzers/digital/vintage_result.py,sha256=Rn71FVyptdbP1gF-TvR3VX5ANIW2bi5YpM8huxyLKyU,4575
19
31
  oscura/analyzers/eye/__init__.py,sha256=SRW0Ir-1RWLwoaenk6FZhGOIWPkuhevYTPt_-8thPw0,974
20
32
  oscura/analyzers/eye/diagram.py,sha256=T3QwuZ3nvlHzSkmjp47ariRlt3FnfsK6yh3WsPszhmI,13307
21
33
  oscura/analyzers/eye/metrics.py,sha256=QDwtMxiBPSXbUCyFnTiAgWllbVCrcI4xEo6teZc3Cm8,17210
@@ -49,7 +61,7 @@ oscura/analyzers/power/ripple.py,sha256=4JZVeZxEivzoThKKTynSTgWEU_453QcoRtASmaYg
49
61
  oscura/analyzers/power/soa.py,sha256=lz6ExB-j-nCWAFSuPVd-TeSA4KD3QEasvZTzhBCaKnE,11019
50
62
  oscura/analyzers/power/switching.py,sha256=6GKfrM0LBfsSFoCCK8kAGQ48tbxnPsUWQ393iypBb0A,15884
51
63
  oscura/analyzers/protocol/__init__.py,sha256=DKCoqmpPHgB-Bz65GXArcoqScd714GAbL2eFxcccZEY,3035
52
- oscura/analyzers/protocols/__init__.py,sha256=nSW_dtZOL_m-qBvrQ8cgFiVKqsr8zehKvm3sf-9O8Rs,3376
64
+ oscura/analyzers/protocols/__init__.py,sha256=B6ovQ3U_QFXrnaqIiEpywOYOFhYuRgwG9aoVqL1zd4I,3861
53
65
  oscura/analyzers/protocols/base.py,sha256=muw9p0LbItduhB2qgt8F0aGodeyVrbM_-6rIIk6ZPfA,13651
54
66
  oscura/analyzers/protocols/can.py,sha256=pJGzMrjYJcaPrShdCxw7EMzwUlSNyvhBfuzOUha4JeQ,17810
55
67
  oscura/analyzers/protocols/can_fd.py,sha256=MYyB9y6LqUy1zZW0papzajU_RMJFnQeW2_6LTv9qjSM,12992
@@ -61,14 +73,18 @@ oscura/analyzers/protocols/jtag.py,sha256=CEQWx6g22v2fc14c7d8r2dyeqyfslA9BjKOdl0
61
73
  oscura/analyzers/protocols/lin.py,sha256=JEzF105t-3NeZGx0o-jrOj8JJ5NbU-ZgIWa9r_tKEOw,13692
62
74
  oscura/analyzers/protocols/manchester.py,sha256=C01r2u-DZQ-Zlb9P2wYHa-YpKz48HM7wSQAhSdrXNTI,10279
63
75
  oscura/analyzers/protocols/onewire.py,sha256=rZHg1zEuIIeHDqKhGS5LEC8lwiWGtdtW0i3Eo8RblFo,15852
76
+ oscura/analyzers/protocols/parallel_bus.py,sha256=sv0e_GzmcwnP_3nPz10ycWrLbaciuD5QoKVaE7q6vpw,14498
64
77
  oscura/analyzers/protocols/spi.py,sha256=gl0LVpZVI22tr7h5D1OAdDtlY_krb7CdNCNP10DirRI,10740
65
78
  oscura/analyzers/protocols/swd.py,sha256=NAInX2bZyZFCM03CLjjxraYTV7cCGOzcl_OEXU21qZE,10155
66
79
  oscura/analyzers/protocols/uart.py,sha256=6bf9EFHjHjkSeTxBq8b6GRlp1xWlBh65HuUcmWxWAEA,12188
67
80
  oscura/analyzers/protocols/usb.py,sha256=jBjmqfqnwys6Zvd7Ku-zZRNlOVZB7xKPmocM2NynGg4,14541
81
+ oscura/analyzers/side_channel/__init__.py,sha256=XGD7uvvL6Mf2FO6VU5fbBTtfARA-WGXa-rvHAbjNBxc,1361
82
+ oscura/analyzers/side_channel/power.py,sha256=036A5ygwGVa5jqOFoOWm1bV-x63FrztyCS8cIEc68wo,17995
83
+ oscura/analyzers/side_channel/timing.py,sha256=loNKa5dgWu9sFTsKCNt087vqYCjBIVVQn3lzQBb3pQc,12128
68
84
  oscura/analyzers/signal_integrity/__init__.py,sha256=RXt5K79WFsy3NvJuNjVxWCf0r6Z8kOIBvJSBBw4X2Y8,1410
69
85
  oscura/analyzers/signal_integrity/embedding.py,sha256=LV-8TwSfCfFe-TavXXKOw7eIeigxkvKeJktyQiqcZXg,8036
70
86
  oscura/analyzers/signal_integrity/equalization.py,sha256=cVomry8n-U5pS8F2LKuEdZBwmi1wfbQo2vyWettn2A0,9906
71
- oscura/analyzers/signal_integrity/sparams.py,sha256=uLusiE942QR6rmB5c_VfhRWjGEM4zC9nwCcMxXG2Twg,8289
87
+ oscura/analyzers/signal_integrity/sparams.py,sha256=TK4o-IOfnVVbfycBgJ0XhTgBYxHcBNdFbmC9TXhfMJs,8303
72
88
  oscura/analyzers/spectral/__init__.py,sha256=YeUKiUOtN3LkWjPmjiG55OWMldSaBJ4BE4OSem7sdm0,850
73
89
  oscura/analyzers/spectral/chunked.py,sha256=KS1Jtv_o9vripQVH3CeaTBx-Lq4AAU-eOXF9_En3rc4,8551
74
90
  oscura/analyzers/spectral/chunked_fft.py,sha256=VKslVgXv7xuSuVVx-Fk2eh255AG6D0D-hQFzAbz1Hk4,18593
@@ -99,7 +115,7 @@ oscura/api/fluent.py,sha256=Bvo1yVqqn3nmVWaoPv4C-YtYszBhHmdW8m5NdyhWEEo,15373
99
115
  oscura/api/operators.py,sha256=To4PZUrwInD43T7i2Sy8YD04eLoRsmrD6XYePuExUX8,13853
100
116
  oscura/api/optimization.py,sha256=5R6rPByVsyxla6oq4SjxjxEp9Uplog4owzsIuFcVoR0,11875
101
117
  oscura/api/profiling.py,sha256=vkYinleXrznWdd0OT5zIJN_PW289GQE_ODmR9DaCcQ0,10567
102
- oscura/automotive/__init__.py,sha256=b1LX9vQXG4FhN_XRq2LJgUNq36-xuAgMjGyEl-EzLS4,2423
118
+ oscura/automotive/__init__.py,sha256=jq1rxBi385z0rwgZy6sgPGFGRrrzhg5vYi45-pO3VNc,2538
103
119
  oscura/automotive/visualization.py,sha256=2ILQjzNwCwj6zZ4MEsBS-QLwYFKMO0_0xDsbv3gEXu0,10692
104
120
  oscura/automotive/can/__init__.py,sha256=0WCLgE6juqQF_mTO716tWzfziOcM6cjshdb957G0edw,1283
105
121
  oscura/automotive/can/analysis.py,sha256=0z6MycxuJGusqDQhYEpHnGRmDw3OMf5yDbS8zI6GJO0,11251
@@ -108,15 +124,14 @@ oscura/automotive/can/correlation.py,sha256=B7MXSz_uzce-dSkwON4ssmFzC53hYc6GupZW
108
124
  oscura/automotive/can/discovery.py,sha256=E4Z-zc8cOP_yUklhVp2tBLOIw2I9KU4mLoSb37VsgTk,11237
109
125
  oscura/automotive/can/message_wrapper.py,sha256=xCyHLMvvTiloifWXELoeuN6Qz_vrLL8iPjxZG1FvJYY,12640
110
126
  oscura/automotive/can/models.py,sha256=fGnCt8FBKURKAz295s2duUas--w2rVfJpMEZ4O9uPvA,12046
111
- oscura/automotive/can/patterns.py,sha256=PPAnWrOFgh3EWlzgtT0H8TJcw1kA41uYZWviwOIQvts,13837
112
- oscura/automotive/can/session.py,sha256=6weEsM8AqgET7hVXwTW7QPpIGgblRVHR5RMOKJXbNnA,15597
113
- oscura/automotive/can/state_machine.py,sha256=NDwCFYw42J3M1QuigA7XNY5E9L0sfUygcvfALb6kt70,10205
127
+ oscura/automotive/can/patterns.py,sha256=XkiBnxaL20Zbpt9aK7dS8BGXQtbNe8PoyTyZNsj-BLY,13960
128
+ oscura/automotive/can/session.py,sha256=bLbDuKw2uuGvIr25E0njYJGWw1urRVhWVMckVUL2EI4,24577
129
+ oscura/automotive/can/state_machine.py,sha256=yeHwydg5RegCPg_zvzS7lLZX-JfBdfMySUcNgMszuIY,10407
114
130
  oscura/automotive/can/stimulus_response.py,sha256=y_oN297KypsFewjM6kvjGII0-7Ubpz2RZBPr8pjW-Gc,16543
115
131
  oscura/automotive/dbc/__init__.py,sha256=7s36h4LQrJKKkO3ICHeuVCoYVx8jGnHT_wKcJgOsQFQ,380
116
132
  oscura/automotive/dbc/generator.py,sha256=EqJKJikAK2Neaff2H9AGb8ZnseE8m4lFAFRMXEIwjsY,5616
117
133
  oscura/automotive/dbc/parser.py,sha256=mOUOJEF82cb7pqMvjedowB8AggCnxoR252vpSy5kC2Q,4591
118
134
  oscura/automotive/dtc/__init__.py,sha256=09CgvnClJTQIvzgDOQ22CbcjGAg_zOhPlbm1-k-gl30,895
119
- oscura/automotive/dtc/data.json,sha256=OrymnbjQkVMdJlIeQ6MUDIihkd9Kea-YvAizZwOZWcc,80011
120
135
  oscura/automotive/dtc/database.py,sha256=We6Kq_lQNHCy9eGKLg-5ArMZ5KOlWK8599_J-67h3DU,9550
121
136
  oscura/automotive/j1939/__init__.py,sha256=aiyfUq3GkJhgpxfkzsX7n_-E7B9Ls0XSnFxRI12GF28,340
122
137
  oscura/automotive/j1939/decoder.py,sha256=qSfok5RTuwc4vR5sjnEdTOi06TwaNfIhBtZq6Vpzhik,25115
@@ -138,8 +153,8 @@ oscura/batch/aggregate.py,sha256=NBc1RmSGbSRUdpuZG_3wy-vSkGlegGRSj_6WqPqhTkM,105
138
153
  oscura/batch/analyze.py,sha256=RfRJQ9w9rlutDlT9nTdqSCswi9FxAsznYbCN51Cx2-Y,4891
139
154
  oscura/batch/logging.py,sha256=ay8BxwBfH75k5qgs68gI1LdAjPJQg31ZtBxwmWs2XIo,15502
140
155
  oscura/batch/metrics.py,sha256=KrY9R0fKttVSW7wL3ra3A4XHVfAeUaLeoM0BtU3GEWI,17312
141
- oscura/builders/__init__.py,sha256=EhiubV1xFlhfERyoKtgPSD_mIj8BUW1_s0kUv7BrNl8,1187
142
- oscura/builders/signal_builder.py,sha256=SgmSkOfSFQ6vge2861rbiZ7ZCKf6g-RpezI88tfLROE,35293
156
+ oscura/builders/__init__.py,sha256=7ryrfaFlT4zAh5zKr76LLQDionMFsPv57E_1OlxrkE0,1326
157
+ oscura/builders/signal_builder.py,sha256=nH7AK6YJZZ_KoDcqL3zsxCFwgBQNFieP1k_fChnD4EU,33099
143
158
  oscura/cli/__init__.py,sha256=OsdCTexpFCKn-o7FPnwTEAZE52E2s-NbXwpADUOfhDM,275
144
159
  oscura/cli/batch.py,sha256=6WkdQF5G03cwCGxfErqr-nq2llOXJqLrfk3u2agUlXY,10773
145
160
  oscura/cli/characterize.py,sha256=yMAm4Ji_Dq4Hml3PeDftoUFq60z1BpU_6O7HJ9dUDtc,8898
@@ -185,7 +200,7 @@ oscura/core/correlation.py,sha256=3kG-scCs7Lv3uYJhvGYbnSyCsf9gQOqX9hnRTsZjAII,64
185
200
  oscura/core/cross_domain.py,sha256=ZGJGieFpLEMTHEeQ8GFZnNZL0WgKLW_fn7joEptovpE,16118
186
201
  oscura/core/debug.py,sha256=1fz5Mwx6dcMXwsGNQMhPCVduAf2ZTSGSvvwjpqIS3Cc,8160
187
202
  oscura/core/edge_cases.py,sha256=-z95foSBKZb3V2DhGQSw1A2VaVOGRBdhMfxDooWbLhg,16367
188
- oscura/core/exceptions.py,sha256=h_s0HX9SkZYcHyTmpQvDMRD93cmY47z4VYw_pfDBGf4,17500
203
+ oscura/core/exceptions.py,sha256=VOvd6iY4SQWz_fPx9EgwdbaIHpqydyFAou8SeZa7w48,17691
189
204
  oscura/core/gpu_backend.py,sha256=U7DoPKHltlGNTFk6cOhpuVUC5VuglahbBRu1jZ83nDE,17700
190
205
  oscura/core/lazy.py,sha256=XwXPznvfpgfJqRvONO2YcgLE9IxekhHLQboiLm3a2jw,26302
191
206
  oscura/core/log_query.py,sha256=qV7NrZH3W6Xq1BEsEIc6Z4ZW8k3vi6U16Br23tSynhk,17051
@@ -225,7 +240,8 @@ oscura/exploratory/parse.py,sha256=1m3u6MAyGQOjkGESPT84YzyS-quI-73o0-bj041SzAk,1
225
240
  oscura/exploratory/recovery.py,sha256=7nqk5nU6M0nViCvy3JnhgD64YgPDik1mgIyGGVCOj3g,9638
226
241
  oscura/exploratory/sync.py,sha256=6lcLt7GmZoRj9luZkNSjTRIuG7kTnxgONdBp0YSQKns,12610
227
242
  oscura/exploratory/unknown.py,sha256=_gByru0b0BvKfZWH0m8DgXNC0dGVW-O_vBo7Jwe6-qE,21614
228
- oscura/export/__init__.py,sha256=TVVAw5rmbmQSNed3VOD4Fy2mSknwaAzI-oCoLgPKhXI,770
243
+ oscura/export/__init__.py,sha256=vk-N_lDoQG4DKhijOikusmgpP2B-2dIHupGhCt7k3S4,1014
244
+ oscura/export/wavedrom.py,sha256=jg07h8pZ7sHBh3wfW16xE4dtAbt7CDZpS1xixc20KvE,12388
229
245
  oscura/export/wireshark/README.md,sha256=44ji8SuD7o-PCNKCGZ9Y3NIoKKnwUrwx2ZgSSuMI_2E,7395
230
246
  oscura/export/wireshark/__init__.py,sha256=Int_19KSBJP8J78LfdibB0S6aDAfbQZJLMap6HZwWSc,1449
231
247
  oscura/export/wireshark/generator.py,sha256=kCYtBxSyYdglriV3lcW2yfNBEYkfYV4K6oaegd3ulG0,10561
@@ -238,11 +254,12 @@ oscura/exporters/csv.py,sha256=4LLnWWnbmhjSMCq4ayBe0EIK53mp2l0OcK_FBUnnv_4,9186
238
254
  oscura/exporters/exporters.py,sha256=wJAr2R62dWk6YCiJcK3QyUa9fS3Au8UhZb4nsY7CQJI,899
239
255
  oscura/exporters/hdf5.py,sha256=6YsXtqlkkjeqlg2wh_QjUf7jQMu0J3eCvVgxjX3lW8Y,5956
240
256
  oscura/exporters/html_export.py,sha256=kdlPCOTJzriY88i6ufDe6HMYo3fKDilgQazL3nADFQY,19446
241
- oscura/exporters/json_export.py,sha256=n0tkVSlsNaEmch-cuEF3F0247RWYDqpaA07fzmrMDOM,8443
257
+ oscura/exporters/json_export.py,sha256=HhtjWrkQL-ziTlFM_AHvzBx37LUmIRz6AChkPfZgtWQ,9897
242
258
  oscura/exporters/markdown_export.py,sha256=JdPDm9UmUcT6ikrDZvurdWGy0hXSUbjGjlMyUct8TpM,11957
243
259
  oscura/exporters/matlab_export.py,sha256=YKAvPtFWj9-ISpN6cZu1s2wI0wNu_zKIrasZxh5ADnA,11003
244
260
  oscura/exporters/npz_export.py,sha256=RMSZQH5M8C-ELoIVkQakcZ-ETQaOnnWJiHGEqcrtYVo,6063
245
261
  oscura/exporters/spice_export.py,sha256=E0vkJ0AVxzzAOR4BX9afnGOfbltJQsIEWSumh1EZF9o,6515
262
+ oscura/exporters/vintage_logic_csv.py,sha256=CeiOkIcUe8MzPyIHQyIBrjMEDM0wAVJEBKx-Pbhr9ig,7405
246
263
  oscura/extensibility/__init__.py,sha256=B2wrC7j-swzJkNdQwHS0lXr6FVBy3XWrwZ4dvtdt2gs,2955
247
264
  oscura/extensibility/docs.py,sha256=BW5c-s-UvYmqkVoe7SidLw3I_FhzMhCeY--rE2pMex8,21738
248
265
  oscura/extensibility/extensions.py,sha256=22QwZOS1D8KPKAQPnCIb9jRLwXi8fwCwqwPGcpeLTJI,38888
@@ -289,8 +306,9 @@ oscura/integrations/llm.py,sha256=sPt58GZYW6G4rkwX4956RP-FsFNDXCffyiPlBuah6Y4,58
289
306
  oscura/jupyter/__init__.py,sha256=L5un2-sVNGP46rzJ7e3qrJOyXmhj2BkhLc7DGQzSLj0,726
290
307
  oscura/jupyter/display.py,sha256=HuLg5NEIKAGEZe_3EmABaRkTzLAfdAm6VTBw9LCl030,8597
291
308
  oscura/jupyter/magic.py,sha256=O1m9N6I5nMUKhCnNANiOdr2pouQxI9oRIcLeRNtrdTc,9953
292
- oscura/loaders/__init__.py,sha256=6osTOOBd1Q7w2wwxOU9kiLD-Q2CE--kCYsN7mdEBmRI,16793
309
+ oscura/loaders/__init__.py,sha256=JKlIsEY0vKEtnXAccgQ6SJMkWYRm9ijM13SSPaqQQJg,16870
293
310
  oscura/loaders/binary.py,sha256=Y5j0jaDggSmhFRZvGHT2Fph2dvhTWsqoYWwkOHIBug4,1875
311
+ oscura/loaders/chipwhisperer.py,sha256=vUsmt6Pamybivp6cqqxe70QUlNrVPdQDn-OS5wEdqxo,12049
294
312
  oscura/loaders/configurable.py,sha256=dJKv3nFSgmWe22ZNB1kTZZyIWgiMhWTf8ZU-SNahefk,41267
295
313
  oscura/loaders/csv.py,sha256=hjToCQkXQEMUCOSBTf3a1d4AAsntvxYbW_jiccQ9JaM,918
296
314
  oscura/loaders/csv_loader.py,sha256=Y4MOJQ-95tZsi9hDdu9ru1vTJQyGtGxkhV7RUqGBLWg,14252
@@ -305,7 +323,7 @@ oscura/loaders/rigol.py,sha256=nwf5aNpH0bWerDgneUpLNlDQfouQ9E_PChv6vG8GLTA,9238
305
323
  oscura/loaders/sigrok.py,sha256=puyj357BPiJpzNB-hcv6ofp6DZFEnOv_usdi-_zs6Co,10250
306
324
  oscura/loaders/tdms.py,sha256=QngrFLJTpctfqcCtv2x3PJmNwfIeWgyug97N_xSdaMA,10483
307
325
  oscura/loaders/tektronix.py,sha256=rLqTefIwGCCmkpUwflEJMuKSfGG1qX_pAFF7Kk0j6-I,24069
308
- oscura/loaders/touchstone.py,sha256=-rg5cj6kNzVBbrloErY2a5_yfcNihlbhZKk3PfNb4sY,6128
326
+ oscura/loaders/touchstone.py,sha256=HdrpVsyHACSMD8DR86iCI5cj9vdXGXbpADNkjaQRUng,6179
309
327
  oscura/loaders/validation.py,sha256=JA_vVYQJB4gC9KFKa2lsGV5D-_agmIjP9kE_dXpv4Wk,17835
310
328
  oscura/loaders/vcd.py,sha256=YtRqU6AEkZjZhNnyNOfgBsxZ8rueB5pALrYIoiRYHQ8,13662
311
329
  oscura/loaders/wav.py,sha256=UYPc1A1ZRuw5zC7XmBdEqjZpsi2QvSW1noNmXZqpy2k,7251
@@ -339,7 +357,7 @@ oscura/quality/ensemble.py,sha256=okfIQmsypHqQTmBfd_uRXLKshs7E1DbU-jFGSBMQTCc,28
339
357
  oscura/quality/explainer.py,sha256=2WIaetGgS1ivwJaJbanOMWWwNTqQhrrn2zemxCCwZII,10729
340
358
  oscura/quality/scoring.py,sha256=gsIl-2164vGS1LcSP7x29D2hfKLPxee3mmuaFPwQ9Ko,19020
341
359
  oscura/quality/warnings.py,sha256=qdnoe9qh0WJnupqgJzgkEzAZMOgDckGJXC9fKF36Rs8,13469
342
- oscura/reporting/__init__.py,sha256=b3w_Q-nmCNjn99eyLgVUHEDkzwzdYupx8lmlrpxS-eQ,6068
360
+ oscura/reporting/__init__.py,sha256=l6X2PxnE_ZwTMNHZWAtOFSmaUkxZmcWCBTxbF7586bo,6274
343
361
  oscura/reporting/advanced.py,sha256=dcu2fjCA_a4R7lGhdUQbcAb7ioTg7lkUwDiQK4uopjM,36413
344
362
  oscura/reporting/analyze.py,sha256=7tjXGsi3nWyX9I4Tw9nSX6BHD5E7Mu3tpuZAQi2S2hQ,14612
345
363
  oscura/reporting/argument_preparer.py,sha256=L0FB0EGmUyP-GjTgEncvkpVbWMrbncoHTiBIOR5avUo,24095
@@ -364,6 +382,7 @@ oscura/reporting/standards.py,sha256=nC3wOZThj6IMCRpdE9HL8mwcvArRwzhkX92yHox2-qo
364
382
  oscura/reporting/summary_generator.py,sha256=GOPVUCNNZPFn8aVM9YCqFG-wkCTFhRZt--kIyRkOzX4,10622
365
383
  oscura/reporting/tables.py,sha256=VlUAwqv9sPGyj-1A93nCpP-JhYs5TunaJX2oNzHgVcw,11622
366
384
  oscura/reporting/template_system.py,sha256=jPF5jkkjl8el8V6IGJGNZmPlNRFZd0_DBbcokOUMiTU,21135
385
+ oscura/reporting/vintage_logic_report.py,sha256=-RyYYEKhP1f6yyhJ41fCkaZHw-nUcSd_CWd-jFgXxDw,15111
367
386
  oscura/reporting/content/__init__.py,sha256=MIU1IrYdFy7L7d6CY8RxkzL1_wL1qLYUfzUsKaASgJ4,874
368
387
  oscura/reporting/content/executive.py,sha256=AQlQMPRLy2rPwPs6Y7somVeg8USIhlPGouYZlMq5rOA,4255
369
388
  oscura/reporting/content/filtering.py,sha256=JrSPJPyGw_jsZUWlAi-ELt8b2ybh1Ui_wXWULv0R-ng,5184
@@ -382,10 +401,6 @@ oscura/reporting/templates/definition.py,sha256=KC--ESq6Ja9OA_hC3uVP3--Y_rhUEIUn
382
401
  oscura/reporting/templates/index.html,sha256=V74N-0erqnu8tevVFjPT-zMXi5M-7RSvTfujW9pwQPQ,16007
383
402
  oscura/reporting/templates/index.md,sha256=3PrVNVnI6kAdiG5l2JROH9AwarGYTG0GmAdVQKGyYPY,3533
384
403
  oscura/schemas/__init__.py,sha256=0zVM3hatGgl3onywiWNia8ov0TJ-tFqXz_cBzuZW7nU,4317
385
- oscura/schemas/bus_configuration.json,sha256=gpcDsg04760KCaLeIDuWvP6RzRUcPZuQplJbe7xpc8E,9562
386
- oscura/schemas/device_mapping.json,sha256=sYOcc2zSe0rmMQN_vtg3Y5XeeDMktAO1ar8vAWl-E1M,5499
387
- oscura/schemas/packet_format.json,sha256=y2KavMGeOUlmjDq7AW_85bfTk3nHlGPuistpuVDdlAk,12893
388
- oscura/schemas/protocol_definition.json,sha256=VPHkgY4fAI-hUiRBtiqZvDNUGjp6_7O4xdi1z36IhCI,11256
389
404
  oscura/search/__init__.py,sha256=eoX7yKNILdlmlFCpt-QHVuT2dUGw6m2GMYrQv5w-mhc,413
390
405
  oscura/search/anomaly.py,sha256=JHcnB9Ba6Hk93vpYedj2Olv6_L_3xnOg8mn6UEyoE6A,9805
391
406
  oscura/search/context.py,sha256=vJ4lWXcC3R7N0vTyTorsZa3KkFLHkd6vQpmhmMeSEIQ,4857
@@ -393,7 +408,11 @@ oscura/search/pattern.py,sha256=pqCtlFDKZwms1LrX64Halt25EQAI1VKr3X_6W4XQ_xI,5735
393
408
  oscura/session/__init__.py,sha256=LAeHbROHU-OBSep1NWffhhcOxVuK30hoKnYgzBsnmn4,926
394
409
  oscura/session/annotations.py,sha256=btHVzA6CedrqVI-c_uFVi_lo7-NByxBLTDHoXWYtY08,8713
395
410
  oscura/session/history.py,sha256=3YAMhON7wlzNdR03HpGSYWJEuxBsrYeYq19YALc8k8M,9578
396
- oscura/session/session.py,sha256=fK5YD5nDKOGHaRTkwhLfkr6TkDTBJx2vTCImPzcMf3s,16185
411
+ oscura/session/session.py,sha256=MWx2cE_ZtyWwl5v8QR_X2MGEBn-TAaFftwKNyZktwIU,16321
412
+ oscura/sessions/__init__.py,sha256=BCmLuo95CfyutHrjEFdWSKRDzKKpDGVMcFi3989HiFA,2371
413
+ oscura/sessions/base.py,sha256=S2ka5o01w1YVBHH59EV64tmW9fXErfNuG2zu9g13-t8,10820
414
+ oscura/sessions/blackbox.py,sha256=CyYA6o7d9pMSR6rsbUOQYq6lBSfUUq-ivtr1QKUppdU,22176
415
+ oscura/sessions/generic.py,sha256=hqwhGO_DT3rS0EOKhLtcebJPu81PPLfHSLH1qVmAWj0,6642
397
416
  oscura/streaming/__init__.py,sha256=uJKpXU6-uBW1lWqh8_8WNzUKSLhMYzxrJstsNMDLVcM,959
398
417
  oscura/streaming/chunked.py,sha256=tWK7m_fHJVJKGq2y6I3RRfioUER2ObMUDPvJ78K73d0,19487
399
418
  oscura/streaming/progressive.py,sha256=YRdAd4P9Zvckerm2kG5bFWZtcuUB1FlRklpS1078s9c,13089
@@ -410,7 +429,7 @@ oscura/ui/__init__.py,sha256=BT4w05Hd7Tg2dM_00cs3G4RJQnj0a56o9uf-41FV7cs,919
410
429
  oscura/ui/formatters.py,sha256=34Wjz1r4FsaGrzdcjltOAyDIvWAjji1wTJaSYn1QYBo,13650
411
430
  oscura/ui/progressive_display.py,sha256=LKGRJrSAscdoUKrBhKZzpYJlnNBX-kOTUGmJCsufFSI,10314
412
431
  oscura/utils/__init__.py,sha256=GaasTJFnZBru-vBPiZQaoGZq65x5ys9trDaIQWuclWc,2270
413
- oscura/utils/autodetect.py,sha256=cP-_be6XK9neO28J2le1iZ8YLvPmfpc8L-p6KAlA6h8,9324
432
+ oscura/utils/autodetect.py,sha256=wJI2qAs-Efz2eRmy61meSJHW9SyGZFZSUe0dYWBez_8,9473
414
433
  oscura/utils/buffer.py,sha256=H-lKT0MBe0fqMoX5UCYftFUaadhSF_Ydwrf7VL8KBy8,10327
415
434
  oscura/utils/lazy.py,sha256=tUy9oZGGjulS4raEbuKvUcdnToCO1y3hKxisCxY1Xm0,11825
416
435
  oscura/utils/lazy_imports.py,sha256=GA1yAu3CowOGmsTmNnh42d2afP6DtG6o-6u2iJe85G8,3990
@@ -425,7 +444,9 @@ oscura/visualization/annotations.py,sha256=01ieilFN6CmmzrMzyWF_G9IR5I7W6XKW-5hTT
425
444
  oscura/visualization/axis_scaling.py,sha256=19TSQgF5s0I2GSFdLNazwjtMdACBB7fDJwUyDtFCSuc,9300
426
445
  oscura/visualization/colors.py,sha256=nw8h4u8lSN8Oq9sqJuKOmrlC8tOcnuvF8xYtP2LvZso,12046
427
446
  oscura/visualization/digital.py,sha256=ChKrsQu6z9ZVoMmTdxWhkNu6B7od0SEtZ1fVq_y9ts0,10096
447
+ oscura/visualization/digital_advanced.py,sha256=9wMpDNtpDqHy2uZaP32NM7MMQfly5v4nqK5oHXQJ33U,22836
428
448
  oscura/visualization/eye.py,sha256=rqv34ZtVE58bZUlUrO__5Cgps-PT-HeGbjPI6CrbEcg,12848
449
+ oscura/visualization/figure_manager.py,sha256=dG0xsvGVBBomaZPprogGHR2TG3DdK75u72agn8gwu_Q,4495
429
450
  oscura/visualization/histogram.py,sha256=8MYLV9i3XufDChvo27BuruTRR2pOIUN592fqNsjC9jM,7068
430
451
  oscura/visualization/interactive.py,sha256=KRSsBngArbs5LNZgzVQlMSLJPLvmG5u-ScSj43wvKRQ,25462
431
452
  oscura/visualization/jitter.py,sha256=Zib_cShNShvH9qZT8crZHTsMk5hmGc2a7qgO2vvwEco,20526
@@ -458,8 +479,8 @@ oscura/workflows/power.py,sha256=fpTzoIfuZi69ldtu2KAHW-Qu6jzA5jBa_9LVy6xqpTI,608
458
479
  oscura/workflows/protocol.py,sha256=x3T-M81vFVrW3mouaYA8WjxyLLzZyLATVJbiqcMAVFQ,15275
459
480
  oscura/workflows/reverse_engineering.py,sha256=K_yrqrQqQNcCoB0jRAG92e2zy8er3oiKJWSF6lU4nGk,19929
460
481
  oscura/workflows/signal_integrity.py,sha256=p-DOC-AhzQOkG_jyyBK3EUaIBAGZhAhdmo-Ub_ifC3U,8391
461
- oscura-0.3.0.dist-info/METADATA,sha256=5q5ASfeIwK-qE3ipz29nutrQyxZZMZ6odN9GtUhOVn8,13291
462
- oscura-0.3.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
463
- oscura-0.3.0.dist-info/entry_points.txt,sha256=QLBxd-iTjBQ5HidaVSkLBwvUsqxSG1ZTJ6i-0juu960,48
464
- oscura-0.3.0.dist-info/licenses/LICENSE,sha256=p1_oEK-oqWDXMFSv5mKbyYkgW-CPbCnFUvdICu490aY,1077
465
- oscura-0.3.0.dist-info/RECORD,,
482
+ oscura-0.5.0.dist-info/METADATA,sha256=W_eBFGCar4hKFM9LNN_hFgSh8iN092gAbE2QmilSIgw,16212
483
+ oscura-0.5.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
484
+ oscura-0.5.0.dist-info/entry_points.txt,sha256=QLBxd-iTjBQ5HidaVSkLBwvUsqxSG1ZTJ6i-0juu960,48
485
+ oscura-0.5.0.dist-info/licenses/LICENSE,sha256=p1_oEK-oqWDXMFSv5mKbyYkgW-CPbCnFUvdICu490aY,1077
486
+ oscura-0.5.0.dist-info/RECORD,,