oscura 0.4.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.
- oscura/__init__.py +1 -1
- oscura/analyzers/digital/__init__.py +48 -0
- oscura/analyzers/digital/extraction.py +195 -0
- oscura/analyzers/digital/ic_database.py +498 -0
- oscura/analyzers/digital/timing_paths.py +339 -0
- oscura/analyzers/digital/vintage.py +377 -0
- oscura/analyzers/digital/vintage_result.py +148 -0
- oscura/analyzers/protocols/__init__.py +22 -1
- oscura/analyzers/protocols/parallel_bus.py +449 -0
- oscura/automotive/__init__.py +1 -1
- oscura/export/__init__.py +12 -0
- oscura/export/wavedrom.py +430 -0
- oscura/exporters/json_export.py +47 -0
- oscura/exporters/vintage_logic_csv.py +247 -0
- oscura/reporting/__init__.py +7 -0
- oscura/reporting/vintage_logic_report.py +523 -0
- oscura/utils/autodetect.py +5 -1
- oscura/visualization/digital_advanced.py +718 -0
- oscura/visualization/figure_manager.py +156 -0
- {oscura-0.4.0.dist-info → oscura-0.5.0.dist-info}/METADATA +1 -1
- {oscura-0.4.0.dist-info → oscura-0.5.0.dist-info}/RECORD +24 -19
- oscura/automotive/dtc/data.json +0 -2763
- oscura/schemas/bus_configuration.json +0 -322
- oscura/schemas/device_mapping.json +0 -182
- oscura/schemas/packet_format.json +0 -418
- oscura/schemas/protocol_definition.json +0 -363
- {oscura-0.4.0.dist-info → oscura-0.5.0.dist-info}/WHEEL +0 -0
- {oscura-0.4.0.dist-info → oscura-0.5.0.dist-info}/entry_points.txt +0 -0
- {oscura-0.4.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
|
+
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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
oscura/__init__.py,sha256=
|
|
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
|
|
@@ -14,16 +14,20 @@ oscura/acquisition/visa.py,sha256=phUwdlbphvNhSCaRgIXuPb8YDP0jR4eqY-OuJXCgRCo,12
|
|
|
14
14
|
oscura/analyzers/__init__.py,sha256=LE-KFYoVePYsiPIy2NDNB2OrzbtqYezdCu9xqqPxgrY,985
|
|
15
15
|
oscura/analyzers/measurements.py,sha256=ng5Qt2jyAvfKw3JQbJY_JNUqAOJEZwPo3UWa0xSg5Xk,697
|
|
16
16
|
oscura/analyzers/validation.py,sha256=vHSKmLThwcU0j5Dat9QPbWImw_dqUGaZk_Ul6XbJ958,20376
|
|
17
|
-
oscura/analyzers/digital/__init__.py,sha256=
|
|
17
|
+
oscura/analyzers/digital/__init__.py,sha256=uvsCUtA1V3PIinIf2l2CXPShx4qIYzNtD-oIGfFBU6E,5399
|
|
18
18
|
oscura/analyzers/digital/bus.py,sha256=Wf3QUKNSxzXaWItR1rdf32kELayywrIg0TC-OhKEub0,22717
|
|
19
19
|
oscura/analyzers/digital/clock.py,sha256=2WihQyf2fUlKTDAOKrhQSStiuUw711CvR6bMbkiliAc,26088
|
|
20
20
|
oscura/analyzers/digital/correlation.py,sha256=_D-pmymVU1rTemSUfg_MklXCo03VkfAFcxSTLAV6jcY,23689
|
|
21
21
|
oscura/analyzers/digital/edges.py,sha256=-Mlyh_SFkqs7L2n11bfYlv8bHD-jrfV6UByhXS1DLp0,20018
|
|
22
|
-
oscura/analyzers/digital/extraction.py,sha256=
|
|
22
|
+
oscura/analyzers/digital/extraction.py,sha256=OhePZrtAPHmUKbtEc3_lVXBKak2wT8OQD0ELJI69uIA,17980
|
|
23
|
+
oscura/analyzers/digital/ic_database.py,sha256=UUyeK1ckJXzv3oKhNOMJQcm9kmCx6g6SBA-eVHvvGO4,12393
|
|
23
24
|
oscura/analyzers/digital/quality.py,sha256=bMXpmAhs15tjyiWW0Ao5aZcK_8AvEKyo_E3rtxDrFlo,27413
|
|
24
25
|
oscura/analyzers/digital/signal_quality.py,sha256=Ssb1MkUfqjiENJJFOslkTX8Ef6C65HFCM_Ra20Bvp4k,30130
|
|
25
26
|
oscura/analyzers/digital/thresholds.py,sha256=CrGgO1rtzkUOnYb40UT3_uD_0qVA853lGL2WNL95qv4,22428
|
|
26
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
|
|
27
31
|
oscura/analyzers/eye/__init__.py,sha256=SRW0Ir-1RWLwoaenk6FZhGOIWPkuhevYTPt_-8thPw0,974
|
|
28
32
|
oscura/analyzers/eye/diagram.py,sha256=T3QwuZ3nvlHzSkmjp47ariRlt3FnfsK6yh3WsPszhmI,13307
|
|
29
33
|
oscura/analyzers/eye/metrics.py,sha256=QDwtMxiBPSXbUCyFnTiAgWllbVCrcI4xEo6teZc3Cm8,17210
|
|
@@ -57,7 +61,7 @@ oscura/analyzers/power/ripple.py,sha256=4JZVeZxEivzoThKKTynSTgWEU_453QcoRtASmaYg
|
|
|
57
61
|
oscura/analyzers/power/soa.py,sha256=lz6ExB-j-nCWAFSuPVd-TeSA4KD3QEasvZTzhBCaKnE,11019
|
|
58
62
|
oscura/analyzers/power/switching.py,sha256=6GKfrM0LBfsSFoCCK8kAGQ48tbxnPsUWQ393iypBb0A,15884
|
|
59
63
|
oscura/analyzers/protocol/__init__.py,sha256=DKCoqmpPHgB-Bz65GXArcoqScd714GAbL2eFxcccZEY,3035
|
|
60
|
-
oscura/analyzers/protocols/__init__.py,sha256=
|
|
64
|
+
oscura/analyzers/protocols/__init__.py,sha256=B6ovQ3U_QFXrnaqIiEpywOYOFhYuRgwG9aoVqL1zd4I,3861
|
|
61
65
|
oscura/analyzers/protocols/base.py,sha256=muw9p0LbItduhB2qgt8F0aGodeyVrbM_-6rIIk6ZPfA,13651
|
|
62
66
|
oscura/analyzers/protocols/can.py,sha256=pJGzMrjYJcaPrShdCxw7EMzwUlSNyvhBfuzOUha4JeQ,17810
|
|
63
67
|
oscura/analyzers/protocols/can_fd.py,sha256=MYyB9y6LqUy1zZW0papzajU_RMJFnQeW2_6LTv9qjSM,12992
|
|
@@ -69,6 +73,7 @@ oscura/analyzers/protocols/jtag.py,sha256=CEQWx6g22v2fc14c7d8r2dyeqyfslA9BjKOdl0
|
|
|
69
73
|
oscura/analyzers/protocols/lin.py,sha256=JEzF105t-3NeZGx0o-jrOj8JJ5NbU-ZgIWa9r_tKEOw,13692
|
|
70
74
|
oscura/analyzers/protocols/manchester.py,sha256=C01r2u-DZQ-Zlb9P2wYHa-YpKz48HM7wSQAhSdrXNTI,10279
|
|
71
75
|
oscura/analyzers/protocols/onewire.py,sha256=rZHg1zEuIIeHDqKhGS5LEC8lwiWGtdtW0i3Eo8RblFo,15852
|
|
76
|
+
oscura/analyzers/protocols/parallel_bus.py,sha256=sv0e_GzmcwnP_3nPz10ycWrLbaciuD5QoKVaE7q6vpw,14498
|
|
72
77
|
oscura/analyzers/protocols/spi.py,sha256=gl0LVpZVI22tr7h5D1OAdDtlY_krb7CdNCNP10DirRI,10740
|
|
73
78
|
oscura/analyzers/protocols/swd.py,sha256=NAInX2bZyZFCM03CLjjxraYTV7cCGOzcl_OEXU21qZE,10155
|
|
74
79
|
oscura/analyzers/protocols/uart.py,sha256=6bf9EFHjHjkSeTxBq8b6GRlp1xWlBh65HuUcmWxWAEA,12188
|
|
@@ -110,7 +115,7 @@ oscura/api/fluent.py,sha256=Bvo1yVqqn3nmVWaoPv4C-YtYszBhHmdW8m5NdyhWEEo,15373
|
|
|
110
115
|
oscura/api/operators.py,sha256=To4PZUrwInD43T7i2Sy8YD04eLoRsmrD6XYePuExUX8,13853
|
|
111
116
|
oscura/api/optimization.py,sha256=5R6rPByVsyxla6oq4SjxjxEp9Uplog4owzsIuFcVoR0,11875
|
|
112
117
|
oscura/api/profiling.py,sha256=vkYinleXrznWdd0OT5zIJN_PW289GQE_ODmR9DaCcQ0,10567
|
|
113
|
-
oscura/automotive/__init__.py,sha256=
|
|
118
|
+
oscura/automotive/__init__.py,sha256=jq1rxBi385z0rwgZy6sgPGFGRrrzhg5vYi45-pO3VNc,2538
|
|
114
119
|
oscura/automotive/visualization.py,sha256=2ILQjzNwCwj6zZ4MEsBS-QLwYFKMO0_0xDsbv3gEXu0,10692
|
|
115
120
|
oscura/automotive/can/__init__.py,sha256=0WCLgE6juqQF_mTO716tWzfziOcM6cjshdb957G0edw,1283
|
|
116
121
|
oscura/automotive/can/analysis.py,sha256=0z6MycxuJGusqDQhYEpHnGRmDw3OMf5yDbS8zI6GJO0,11251
|
|
@@ -127,7 +132,6 @@ oscura/automotive/dbc/__init__.py,sha256=7s36h4LQrJKKkO3ICHeuVCoYVx8jGnHT_wKcJgO
|
|
|
127
132
|
oscura/automotive/dbc/generator.py,sha256=EqJKJikAK2Neaff2H9AGb8ZnseE8m4lFAFRMXEIwjsY,5616
|
|
128
133
|
oscura/automotive/dbc/parser.py,sha256=mOUOJEF82cb7pqMvjedowB8AggCnxoR252vpSy5kC2Q,4591
|
|
129
134
|
oscura/automotive/dtc/__init__.py,sha256=09CgvnClJTQIvzgDOQ22CbcjGAg_zOhPlbm1-k-gl30,895
|
|
130
|
-
oscura/automotive/dtc/data.json,sha256=OrymnbjQkVMdJlIeQ6MUDIihkd9Kea-YvAizZwOZWcc,80011
|
|
131
135
|
oscura/automotive/dtc/database.py,sha256=We6Kq_lQNHCy9eGKLg-5ArMZ5KOlWK8599_J-67h3DU,9550
|
|
132
136
|
oscura/automotive/j1939/__init__.py,sha256=aiyfUq3GkJhgpxfkzsX7n_-E7B9Ls0XSnFxRI12GF28,340
|
|
133
137
|
oscura/automotive/j1939/decoder.py,sha256=qSfok5RTuwc4vR5sjnEdTOi06TwaNfIhBtZq6Vpzhik,25115
|
|
@@ -236,7 +240,8 @@ oscura/exploratory/parse.py,sha256=1m3u6MAyGQOjkGESPT84YzyS-quI-73o0-bj041SzAk,1
|
|
|
236
240
|
oscura/exploratory/recovery.py,sha256=7nqk5nU6M0nViCvy3JnhgD64YgPDik1mgIyGGVCOj3g,9638
|
|
237
241
|
oscura/exploratory/sync.py,sha256=6lcLt7GmZoRj9luZkNSjTRIuG7kTnxgONdBp0YSQKns,12610
|
|
238
242
|
oscura/exploratory/unknown.py,sha256=_gByru0b0BvKfZWH0m8DgXNC0dGVW-O_vBo7Jwe6-qE,21614
|
|
239
|
-
oscura/export/__init__.py,sha256=
|
|
243
|
+
oscura/export/__init__.py,sha256=vk-N_lDoQG4DKhijOikusmgpP2B-2dIHupGhCt7k3S4,1014
|
|
244
|
+
oscura/export/wavedrom.py,sha256=jg07h8pZ7sHBh3wfW16xE4dtAbt7CDZpS1xixc20KvE,12388
|
|
240
245
|
oscura/export/wireshark/README.md,sha256=44ji8SuD7o-PCNKCGZ9Y3NIoKKnwUrwx2ZgSSuMI_2E,7395
|
|
241
246
|
oscura/export/wireshark/__init__.py,sha256=Int_19KSBJP8J78LfdibB0S6aDAfbQZJLMap6HZwWSc,1449
|
|
242
247
|
oscura/export/wireshark/generator.py,sha256=kCYtBxSyYdglriV3lcW2yfNBEYkfYV4K6oaegd3ulG0,10561
|
|
@@ -249,11 +254,12 @@ oscura/exporters/csv.py,sha256=4LLnWWnbmhjSMCq4ayBe0EIK53mp2l0OcK_FBUnnv_4,9186
|
|
|
249
254
|
oscura/exporters/exporters.py,sha256=wJAr2R62dWk6YCiJcK3QyUa9fS3Au8UhZb4nsY7CQJI,899
|
|
250
255
|
oscura/exporters/hdf5.py,sha256=6YsXtqlkkjeqlg2wh_QjUf7jQMu0J3eCvVgxjX3lW8Y,5956
|
|
251
256
|
oscura/exporters/html_export.py,sha256=kdlPCOTJzriY88i6ufDe6HMYo3fKDilgQazL3nADFQY,19446
|
|
252
|
-
oscura/exporters/json_export.py,sha256=
|
|
257
|
+
oscura/exporters/json_export.py,sha256=HhtjWrkQL-ziTlFM_AHvzBx37LUmIRz6AChkPfZgtWQ,9897
|
|
253
258
|
oscura/exporters/markdown_export.py,sha256=JdPDm9UmUcT6ikrDZvurdWGy0hXSUbjGjlMyUct8TpM,11957
|
|
254
259
|
oscura/exporters/matlab_export.py,sha256=YKAvPtFWj9-ISpN6cZu1s2wI0wNu_zKIrasZxh5ADnA,11003
|
|
255
260
|
oscura/exporters/npz_export.py,sha256=RMSZQH5M8C-ELoIVkQakcZ-ETQaOnnWJiHGEqcrtYVo,6063
|
|
256
261
|
oscura/exporters/spice_export.py,sha256=E0vkJ0AVxzzAOR4BX9afnGOfbltJQsIEWSumh1EZF9o,6515
|
|
262
|
+
oscura/exporters/vintage_logic_csv.py,sha256=CeiOkIcUe8MzPyIHQyIBrjMEDM0wAVJEBKx-Pbhr9ig,7405
|
|
257
263
|
oscura/extensibility/__init__.py,sha256=B2wrC7j-swzJkNdQwHS0lXr6FVBy3XWrwZ4dvtdt2gs,2955
|
|
258
264
|
oscura/extensibility/docs.py,sha256=BW5c-s-UvYmqkVoe7SidLw3I_FhzMhCeY--rE2pMex8,21738
|
|
259
265
|
oscura/extensibility/extensions.py,sha256=22QwZOS1D8KPKAQPnCIb9jRLwXi8fwCwqwPGcpeLTJI,38888
|
|
@@ -351,7 +357,7 @@ oscura/quality/ensemble.py,sha256=okfIQmsypHqQTmBfd_uRXLKshs7E1DbU-jFGSBMQTCc,28
|
|
|
351
357
|
oscura/quality/explainer.py,sha256=2WIaetGgS1ivwJaJbanOMWWwNTqQhrrn2zemxCCwZII,10729
|
|
352
358
|
oscura/quality/scoring.py,sha256=gsIl-2164vGS1LcSP7x29D2hfKLPxee3mmuaFPwQ9Ko,19020
|
|
353
359
|
oscura/quality/warnings.py,sha256=qdnoe9qh0WJnupqgJzgkEzAZMOgDckGJXC9fKF36Rs8,13469
|
|
354
|
-
oscura/reporting/__init__.py,sha256=
|
|
360
|
+
oscura/reporting/__init__.py,sha256=l6X2PxnE_ZwTMNHZWAtOFSmaUkxZmcWCBTxbF7586bo,6274
|
|
355
361
|
oscura/reporting/advanced.py,sha256=dcu2fjCA_a4R7lGhdUQbcAb7ioTg7lkUwDiQK4uopjM,36413
|
|
356
362
|
oscura/reporting/analyze.py,sha256=7tjXGsi3nWyX9I4Tw9nSX6BHD5E7Mu3tpuZAQi2S2hQ,14612
|
|
357
363
|
oscura/reporting/argument_preparer.py,sha256=L0FB0EGmUyP-GjTgEncvkpVbWMrbncoHTiBIOR5avUo,24095
|
|
@@ -376,6 +382,7 @@ oscura/reporting/standards.py,sha256=nC3wOZThj6IMCRpdE9HL8mwcvArRwzhkX92yHox2-qo
|
|
|
376
382
|
oscura/reporting/summary_generator.py,sha256=GOPVUCNNZPFn8aVM9YCqFG-wkCTFhRZt--kIyRkOzX4,10622
|
|
377
383
|
oscura/reporting/tables.py,sha256=VlUAwqv9sPGyj-1A93nCpP-JhYs5TunaJX2oNzHgVcw,11622
|
|
378
384
|
oscura/reporting/template_system.py,sha256=jPF5jkkjl8el8V6IGJGNZmPlNRFZd0_DBbcokOUMiTU,21135
|
|
385
|
+
oscura/reporting/vintage_logic_report.py,sha256=-RyYYEKhP1f6yyhJ41fCkaZHw-nUcSd_CWd-jFgXxDw,15111
|
|
379
386
|
oscura/reporting/content/__init__.py,sha256=MIU1IrYdFy7L7d6CY8RxkzL1_wL1qLYUfzUsKaASgJ4,874
|
|
380
387
|
oscura/reporting/content/executive.py,sha256=AQlQMPRLy2rPwPs6Y7somVeg8USIhlPGouYZlMq5rOA,4255
|
|
381
388
|
oscura/reporting/content/filtering.py,sha256=JrSPJPyGw_jsZUWlAi-ELt8b2ybh1Ui_wXWULv0R-ng,5184
|
|
@@ -394,10 +401,6 @@ oscura/reporting/templates/definition.py,sha256=KC--ESq6Ja9OA_hC3uVP3--Y_rhUEIUn
|
|
|
394
401
|
oscura/reporting/templates/index.html,sha256=V74N-0erqnu8tevVFjPT-zMXi5M-7RSvTfujW9pwQPQ,16007
|
|
395
402
|
oscura/reporting/templates/index.md,sha256=3PrVNVnI6kAdiG5l2JROH9AwarGYTG0GmAdVQKGyYPY,3533
|
|
396
403
|
oscura/schemas/__init__.py,sha256=0zVM3hatGgl3onywiWNia8ov0TJ-tFqXz_cBzuZW7nU,4317
|
|
397
|
-
oscura/schemas/bus_configuration.json,sha256=gpcDsg04760KCaLeIDuWvP6RzRUcPZuQplJbe7xpc8E,9562
|
|
398
|
-
oscura/schemas/device_mapping.json,sha256=sYOcc2zSe0rmMQN_vtg3Y5XeeDMktAO1ar8vAWl-E1M,5499
|
|
399
|
-
oscura/schemas/packet_format.json,sha256=y2KavMGeOUlmjDq7AW_85bfTk3nHlGPuistpuVDdlAk,12893
|
|
400
|
-
oscura/schemas/protocol_definition.json,sha256=VPHkgY4fAI-hUiRBtiqZvDNUGjp6_7O4xdi1z36IhCI,11256
|
|
401
404
|
oscura/search/__init__.py,sha256=eoX7yKNILdlmlFCpt-QHVuT2dUGw6m2GMYrQv5w-mhc,413
|
|
402
405
|
oscura/search/anomaly.py,sha256=JHcnB9Ba6Hk93vpYedj2Olv6_L_3xnOg8mn6UEyoE6A,9805
|
|
403
406
|
oscura/search/context.py,sha256=vJ4lWXcC3R7N0vTyTorsZa3KkFLHkd6vQpmhmMeSEIQ,4857
|
|
@@ -426,7 +429,7 @@ oscura/ui/__init__.py,sha256=BT4w05Hd7Tg2dM_00cs3G4RJQnj0a56o9uf-41FV7cs,919
|
|
|
426
429
|
oscura/ui/formatters.py,sha256=34Wjz1r4FsaGrzdcjltOAyDIvWAjji1wTJaSYn1QYBo,13650
|
|
427
430
|
oscura/ui/progressive_display.py,sha256=LKGRJrSAscdoUKrBhKZzpYJlnNBX-kOTUGmJCsufFSI,10314
|
|
428
431
|
oscura/utils/__init__.py,sha256=GaasTJFnZBru-vBPiZQaoGZq65x5ys9trDaIQWuclWc,2270
|
|
429
|
-
oscura/utils/autodetect.py,sha256=
|
|
432
|
+
oscura/utils/autodetect.py,sha256=wJI2qAs-Efz2eRmy61meSJHW9SyGZFZSUe0dYWBez_8,9473
|
|
430
433
|
oscura/utils/buffer.py,sha256=H-lKT0MBe0fqMoX5UCYftFUaadhSF_Ydwrf7VL8KBy8,10327
|
|
431
434
|
oscura/utils/lazy.py,sha256=tUy9oZGGjulS4raEbuKvUcdnToCO1y3hKxisCxY1Xm0,11825
|
|
432
435
|
oscura/utils/lazy_imports.py,sha256=GA1yAu3CowOGmsTmNnh42d2afP6DtG6o-6u2iJe85G8,3990
|
|
@@ -441,7 +444,9 @@ oscura/visualization/annotations.py,sha256=01ieilFN6CmmzrMzyWF_G9IR5I7W6XKW-5hTT
|
|
|
441
444
|
oscura/visualization/axis_scaling.py,sha256=19TSQgF5s0I2GSFdLNazwjtMdACBB7fDJwUyDtFCSuc,9300
|
|
442
445
|
oscura/visualization/colors.py,sha256=nw8h4u8lSN8Oq9sqJuKOmrlC8tOcnuvF8xYtP2LvZso,12046
|
|
443
446
|
oscura/visualization/digital.py,sha256=ChKrsQu6z9ZVoMmTdxWhkNu6B7od0SEtZ1fVq_y9ts0,10096
|
|
447
|
+
oscura/visualization/digital_advanced.py,sha256=9wMpDNtpDqHy2uZaP32NM7MMQfly5v4nqK5oHXQJ33U,22836
|
|
444
448
|
oscura/visualization/eye.py,sha256=rqv34ZtVE58bZUlUrO__5Cgps-PT-HeGbjPI6CrbEcg,12848
|
|
449
|
+
oscura/visualization/figure_manager.py,sha256=dG0xsvGVBBomaZPprogGHR2TG3DdK75u72agn8gwu_Q,4495
|
|
445
450
|
oscura/visualization/histogram.py,sha256=8MYLV9i3XufDChvo27BuruTRR2pOIUN592fqNsjC9jM,7068
|
|
446
451
|
oscura/visualization/interactive.py,sha256=KRSsBngArbs5LNZgzVQlMSLJPLvmG5u-ScSj43wvKRQ,25462
|
|
447
452
|
oscura/visualization/jitter.py,sha256=Zib_cShNShvH9qZT8crZHTsMk5hmGc2a7qgO2vvwEco,20526
|
|
@@ -474,8 +479,8 @@ oscura/workflows/power.py,sha256=fpTzoIfuZi69ldtu2KAHW-Qu6jzA5jBa_9LVy6xqpTI,608
|
|
|
474
479
|
oscura/workflows/protocol.py,sha256=x3T-M81vFVrW3mouaYA8WjxyLLzZyLATVJbiqcMAVFQ,15275
|
|
475
480
|
oscura/workflows/reverse_engineering.py,sha256=K_yrqrQqQNcCoB0jRAG92e2zy8er3oiKJWSF6lU4nGk,19929
|
|
476
481
|
oscura/workflows/signal_integrity.py,sha256=p-DOC-AhzQOkG_jyyBK3EUaIBAGZhAhdmo-Ub_ifC3U,8391
|
|
477
|
-
oscura-0.
|
|
478
|
-
oscura-0.
|
|
479
|
-
oscura-0.
|
|
480
|
-
oscura-0.
|
|
481
|
-
oscura-0.
|
|
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,,
|