oscura 0.5.0__py3-none-any.whl → 0.5.1__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 (34) hide show
  1. oscura/__init__.py +1 -1
  2. oscura/analyzers/digital/__init__.py +0 -48
  3. oscura/analyzers/digital/extraction.py +0 -195
  4. oscura/analyzers/protocols/__init__.py +1 -22
  5. oscura/automotive/__init__.py +1 -1
  6. oscura/automotive/dtc/data.json +2763 -0
  7. oscura/export/__init__.py +0 -12
  8. oscura/export/wireshark/README.md +15 -15
  9. oscura/exporters/json_export.py +0 -47
  10. oscura/inference/active_learning/README.md +7 -7
  11. oscura/pipeline/composition.py +10 -2
  12. oscura/reporting/__init__.py +0 -7
  13. oscura/reporting/templates/index.md +13 -13
  14. oscura/schemas/bus_configuration.json +322 -0
  15. oscura/schemas/device_mapping.json +182 -0
  16. oscura/schemas/packet_format.json +418 -0
  17. oscura/schemas/protocol_definition.json +363 -0
  18. oscura/utils/autodetect.py +1 -5
  19. oscura-0.5.1.dist-info/METADATA +583 -0
  20. {oscura-0.5.0.dist-info → oscura-0.5.1.dist-info}/RECORD +23 -28
  21. oscura/analyzers/digital/ic_database.py +0 -498
  22. oscura/analyzers/digital/timing_paths.py +0 -339
  23. oscura/analyzers/digital/vintage.py +0 -377
  24. oscura/analyzers/digital/vintage_result.py +0 -148
  25. oscura/analyzers/protocols/parallel_bus.py +0 -449
  26. oscura/export/wavedrom.py +0 -430
  27. oscura/exporters/vintage_logic_csv.py +0 -247
  28. oscura/reporting/vintage_logic_report.py +0 -523
  29. oscura/visualization/digital_advanced.py +0 -718
  30. oscura/visualization/figure_manager.py +0 -156
  31. oscura-0.5.0.dist-info/METADATA +0 -407
  32. {oscura-0.5.0.dist-info → oscura-0.5.1.dist-info}/WHEEL +0 -0
  33. {oscura-0.5.0.dist-info → oscura-0.5.1.dist-info}/entry_points.txt +0 -0
  34. {oscura-0.5.0.dist-info → oscura-0.5.1.dist-info}/licenses/LICENSE +0 -0
@@ -1,4 +1,4 @@
1
- oscura/__init__.py,sha256=JQy7jHn9bhuDQajZSL5Eq4H31pUdqNMEakzDrEf1FIQ,18313
1
+ oscura/__init__.py,sha256=HLrjN-2YU438b35k94HDMDFbOpzj3_2zc9NlcB7ImHM,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,20 +14,16 @@ 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=uvsCUtA1V3PIinIf2l2CXPShx4qIYzNtD-oIGfFBU6E,5399
17
+ oscura/analyzers/digital/__init__.py,sha256=CrZxLveYI-nZ7INCZg-4zp8UP_uQRpMmX2vljzudJ6s,4228
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=OhePZrtAPHmUKbtEc3_lVXBKak2wT8OQD0ELJI69uIA,17980
23
- oscura/analyzers/digital/ic_database.py,sha256=UUyeK1ckJXzv3oKhNOMJQcm9kmCx6g6SBA-eVHvvGO4,12393
22
+ oscura/analyzers/digital/extraction.py,sha256=wBOPZi3H1llCHsq36txz_jkEO--Sj6pbsxPZXXGk5_c,12144
24
23
  oscura/analyzers/digital/quality.py,sha256=bMXpmAhs15tjyiWW0Ao5aZcK_8AvEKyo_E3rtxDrFlo,27413
25
24
  oscura/analyzers/digital/signal_quality.py,sha256=Ssb1MkUfqjiENJJFOslkTX8Ef6C65HFCM_Ra20Bvp4k,30130
26
25
  oscura/analyzers/digital/thresholds.py,sha256=CrGgO1rtzkUOnYb40UT3_uD_0qVA853lGL2WNL95qv4,22428
27
26
  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
31
27
  oscura/analyzers/eye/__init__.py,sha256=SRW0Ir-1RWLwoaenk6FZhGOIWPkuhevYTPt_-8thPw0,974
32
28
  oscura/analyzers/eye/diagram.py,sha256=T3QwuZ3nvlHzSkmjp47ariRlt3FnfsK6yh3WsPszhmI,13307
33
29
  oscura/analyzers/eye/metrics.py,sha256=QDwtMxiBPSXbUCyFnTiAgWllbVCrcI4xEo6teZc3Cm8,17210
@@ -61,7 +57,7 @@ oscura/analyzers/power/ripple.py,sha256=4JZVeZxEivzoThKKTynSTgWEU_453QcoRtASmaYg
61
57
  oscura/analyzers/power/soa.py,sha256=lz6ExB-j-nCWAFSuPVd-TeSA4KD3QEasvZTzhBCaKnE,11019
62
58
  oscura/analyzers/power/switching.py,sha256=6GKfrM0LBfsSFoCCK8kAGQ48tbxnPsUWQ393iypBb0A,15884
63
59
  oscura/analyzers/protocol/__init__.py,sha256=DKCoqmpPHgB-Bz65GXArcoqScd714GAbL2eFxcccZEY,3035
64
- oscura/analyzers/protocols/__init__.py,sha256=B6ovQ3U_QFXrnaqIiEpywOYOFhYuRgwG9aoVqL1zd4I,3861
60
+ oscura/analyzers/protocols/__init__.py,sha256=nSW_dtZOL_m-qBvrQ8cgFiVKqsr8zehKvm3sf-9O8Rs,3376
65
61
  oscura/analyzers/protocols/base.py,sha256=muw9p0LbItduhB2qgt8F0aGodeyVrbM_-6rIIk6ZPfA,13651
66
62
  oscura/analyzers/protocols/can.py,sha256=pJGzMrjYJcaPrShdCxw7EMzwUlSNyvhBfuzOUha4JeQ,17810
67
63
  oscura/analyzers/protocols/can_fd.py,sha256=MYyB9y6LqUy1zZW0papzajU_RMJFnQeW2_6LTv9qjSM,12992
@@ -73,7 +69,6 @@ oscura/analyzers/protocols/jtag.py,sha256=CEQWx6g22v2fc14c7d8r2dyeqyfslA9BjKOdl0
73
69
  oscura/analyzers/protocols/lin.py,sha256=JEzF105t-3NeZGx0o-jrOj8JJ5NbU-ZgIWa9r_tKEOw,13692
74
70
  oscura/analyzers/protocols/manchester.py,sha256=C01r2u-DZQ-Zlb9P2wYHa-YpKz48HM7wSQAhSdrXNTI,10279
75
71
  oscura/analyzers/protocols/onewire.py,sha256=rZHg1zEuIIeHDqKhGS5LEC8lwiWGtdtW0i3Eo8RblFo,15852
76
- oscura/analyzers/protocols/parallel_bus.py,sha256=sv0e_GzmcwnP_3nPz10ycWrLbaciuD5QoKVaE7q6vpw,14498
77
72
  oscura/analyzers/protocols/spi.py,sha256=gl0LVpZVI22tr7h5D1OAdDtlY_krb7CdNCNP10DirRI,10740
78
73
  oscura/analyzers/protocols/swd.py,sha256=NAInX2bZyZFCM03CLjjxraYTV7cCGOzcl_OEXU21qZE,10155
79
74
  oscura/analyzers/protocols/uart.py,sha256=6bf9EFHjHjkSeTxBq8b6GRlp1xWlBh65HuUcmWxWAEA,12188
@@ -115,7 +110,7 @@ oscura/api/fluent.py,sha256=Bvo1yVqqn3nmVWaoPv4C-YtYszBhHmdW8m5NdyhWEEo,15373
115
110
  oscura/api/operators.py,sha256=To4PZUrwInD43T7i2Sy8YD04eLoRsmrD6XYePuExUX8,13853
116
111
  oscura/api/optimization.py,sha256=5R6rPByVsyxla6oq4SjxjxEp9Uplog4owzsIuFcVoR0,11875
117
112
  oscura/api/profiling.py,sha256=vkYinleXrznWdd0OT5zIJN_PW289GQE_ODmR9DaCcQ0,10567
118
- oscura/automotive/__init__.py,sha256=jq1rxBi385z0rwgZy6sgPGFGRrrzhg5vYi45-pO3VNc,2538
113
+ oscura/automotive/__init__.py,sha256=MB7wS93P5QUEWv_DjhlcTgGb1bYD9bib0uKBZksnylc,2538
119
114
  oscura/automotive/visualization.py,sha256=2ILQjzNwCwj6zZ4MEsBS-QLwYFKMO0_0xDsbv3gEXu0,10692
120
115
  oscura/automotive/can/__init__.py,sha256=0WCLgE6juqQF_mTO716tWzfziOcM6cjshdb957G0edw,1283
121
116
  oscura/automotive/can/analysis.py,sha256=0z6MycxuJGusqDQhYEpHnGRmDw3OMf5yDbS8zI6GJO0,11251
@@ -132,6 +127,7 @@ oscura/automotive/dbc/__init__.py,sha256=7s36h4LQrJKKkO3ICHeuVCoYVx8jGnHT_wKcJgO
132
127
  oscura/automotive/dbc/generator.py,sha256=EqJKJikAK2Neaff2H9AGb8ZnseE8m4lFAFRMXEIwjsY,5616
133
128
  oscura/automotive/dbc/parser.py,sha256=mOUOJEF82cb7pqMvjedowB8AggCnxoR252vpSy5kC2Q,4591
134
129
  oscura/automotive/dtc/__init__.py,sha256=09CgvnClJTQIvzgDOQ22CbcjGAg_zOhPlbm1-k-gl30,895
130
+ oscura/automotive/dtc/data.json,sha256=OrymnbjQkVMdJlIeQ6MUDIihkd9Kea-YvAizZwOZWcc,80011
135
131
  oscura/automotive/dtc/database.py,sha256=We6Kq_lQNHCy9eGKLg-5ArMZ5KOlWK8599_J-67h3DU,9550
136
132
  oscura/automotive/j1939/__init__.py,sha256=aiyfUq3GkJhgpxfkzsX7n_-E7B9Ls0XSnFxRI12GF28,340
137
133
  oscura/automotive/j1939/decoder.py,sha256=qSfok5RTuwc4vR5sjnEdTOi06TwaNfIhBtZq6Vpzhik,25115
@@ -240,9 +236,8 @@ oscura/exploratory/parse.py,sha256=1m3u6MAyGQOjkGESPT84YzyS-quI-73o0-bj041SzAk,1
240
236
  oscura/exploratory/recovery.py,sha256=7nqk5nU6M0nViCvy3JnhgD64YgPDik1mgIyGGVCOj3g,9638
241
237
  oscura/exploratory/sync.py,sha256=6lcLt7GmZoRj9luZkNSjTRIuG7kTnxgONdBp0YSQKns,12610
242
238
  oscura/exploratory/unknown.py,sha256=_gByru0b0BvKfZWH0m8DgXNC0dGVW-O_vBo7Jwe6-qE,21614
243
- oscura/export/__init__.py,sha256=vk-N_lDoQG4DKhijOikusmgpP2B-2dIHupGhCt7k3S4,1014
244
- oscura/export/wavedrom.py,sha256=jg07h8pZ7sHBh3wfW16xE4dtAbt7CDZpS1xixc20KvE,12388
245
- oscura/export/wireshark/README.md,sha256=44ji8SuD7o-PCNKCGZ9Y3NIoKKnwUrwx2ZgSSuMI_2E,7395
239
+ oscura/export/__init__.py,sha256=TVVAw5rmbmQSNed3VOD4Fy2mSknwaAzI-oCoLgPKhXI,770
240
+ oscura/export/wireshark/README.md,sha256=3UQGQA3fd0mK-OLOhfjZv1XzE_7bloKzP8toEvTP8GU,7728
246
241
  oscura/export/wireshark/__init__.py,sha256=Int_19KSBJP8J78LfdibB0S6aDAfbQZJLMap6HZwWSc,1449
247
242
  oscura/export/wireshark/generator.py,sha256=kCYtBxSyYdglriV3lcW2yfNBEYkfYV4K6oaegd3ulG0,10561
248
243
  oscura/export/wireshark/lua_builder.py,sha256=8SqRivyzW0lzBY1O_oOhFt3vujL-CSgqBkhpU9kz_58,4533
@@ -254,12 +249,11 @@ oscura/exporters/csv.py,sha256=4LLnWWnbmhjSMCq4ayBe0EIK53mp2l0OcK_FBUnnv_4,9186
254
249
  oscura/exporters/exporters.py,sha256=wJAr2R62dWk6YCiJcK3QyUa9fS3Au8UhZb4nsY7CQJI,899
255
250
  oscura/exporters/hdf5.py,sha256=6YsXtqlkkjeqlg2wh_QjUf7jQMu0J3eCvVgxjX3lW8Y,5956
256
251
  oscura/exporters/html_export.py,sha256=kdlPCOTJzriY88i6ufDe6HMYo3fKDilgQazL3nADFQY,19446
257
- oscura/exporters/json_export.py,sha256=HhtjWrkQL-ziTlFM_AHvzBx37LUmIRz6AChkPfZgtWQ,9897
252
+ oscura/exporters/json_export.py,sha256=n0tkVSlsNaEmch-cuEF3F0247RWYDqpaA07fzmrMDOM,8443
258
253
  oscura/exporters/markdown_export.py,sha256=JdPDm9UmUcT6ikrDZvurdWGy0hXSUbjGjlMyUct8TpM,11957
259
254
  oscura/exporters/matlab_export.py,sha256=YKAvPtFWj9-ISpN6cZu1s2wI0wNu_zKIrasZxh5ADnA,11003
260
255
  oscura/exporters/npz_export.py,sha256=RMSZQH5M8C-ELoIVkQakcZ-ETQaOnnWJiHGEqcrtYVo,6063
261
256
  oscura/exporters/spice_export.py,sha256=E0vkJ0AVxzzAOR4BX9afnGOfbltJQsIEWSumh1EZF9o,6515
262
- oscura/exporters/vintage_logic_csv.py,sha256=CeiOkIcUe8MzPyIHQyIBrjMEDM0wAVJEBKx-Pbhr9ig,7405
263
257
  oscura/extensibility/__init__.py,sha256=B2wrC7j-swzJkNdQwHS0lXr6FVBy3XWrwZ4dvtdt2gs,2955
264
258
  oscura/extensibility/docs.py,sha256=BW5c-s-UvYmqkVoe7SidLw3I_FhzMhCeY--rE2pMex8,21738
265
259
  oscura/extensibility/extensions.py,sha256=22QwZOS1D8KPKAQPnCIb9jRLwXi8fwCwqwPGcpeLTJI,38888
@@ -294,7 +288,7 @@ oscura/inference/signal_intelligence.py,sha256=inPsdnq47vxotdJt5PWP8ca_ecFuWFXit
294
288
  oscura/inference/spectral.py,sha256=r2YTTD9x2vuz44inzr2BCcLrRaQqIRksfz4C0YgwAQY,7100
295
289
  oscura/inference/state_machine.py,sha256=wNzjFivXOT_eE7hTCDAVBh8r8v2A4NQGUpYFH0C5vWk,19846
296
290
  oscura/inference/stream.py,sha256=pzmbBAx03N9SP9sjtAzfx6iZHiIGsTISSyGhXny4MSs,29448
297
- oscura/inference/active_learning/README.md,sha256=dJovCRA305SquowxlCw_InkG1cgKY73h7NON8xom-vw,4506
291
+ oscura/inference/active_learning/README.md,sha256=h7yvXZNRS1NqL8Jdp0Dy-0M3ciUN9nZqBN11N-4xniw,4834
298
292
  oscura/inference/active_learning/__init__.py,sha256=CEay1z0T0VxZnvSM7CM7xJZDdnODq3yU5eIkYFMGN5M,1353
299
293
  oscura/inference/active_learning/lstar.py,sha256=fvR0XGnIO3lfZ7ho9ot_qL5OkAgaRIeEKcJZGJbswA4,8590
300
294
  oscura/inference/active_learning/observation_table.py,sha256=T0MP5ePONYx_K8L2768zmxOiAtYXVSmizDDKrrJlFVQ,7632
@@ -339,7 +333,7 @@ oscura/optimization/parallel.py,sha256=30Qy-QDbDt0_cQisBMhbkIQ_adSLaPE8S2BxIo0o2
339
333
  oscura/optimization/search.py,sha256=-rJQFlMVanCV3oXg35go8tZg5ywUhMYxbhiekEA5rxc,17241
340
334
  oscura/pipeline/__init__.py,sha256=W1ObXXo0wn4pGkl8hPfxaElOSLK5b8pjZ-aRxwfksow,964
341
335
  oscura/pipeline/base.py,sha256=2-6yXeucDoWf8HJAVXqocLxVcKcPBytyEfonKRarNX4,11353
342
- oscura/pipeline/composition.py,sha256=pRGBkPjO5pYBOjUbgKikFJ7lLGW7ItNQskyIBA6BibQ,7566
336
+ oscura/pipeline/composition.py,sha256=RF1LGcRMPXmR9TAJqMUO-h6OAl2iywtNFyCVBXv9bdU,7870
343
337
  oscura/pipeline/parallel.py,sha256=cTEWq5Ele_EoWQr23OtV1YQVxsWBGM6hchmCwMYvZAk,16984
344
338
  oscura/pipeline/pipeline.py,sha256=APEIDaapwVnoeBixkYo5VAtpFOsPh9GaOdMRr_j5ByU,13284
345
339
  oscura/pipeline/reverse_engineering.py,sha256=hSPRkaEAnnR84X-ocXwmFRRDnL5iHtl9M_8OGd8kZVw,38590
@@ -357,7 +351,7 @@ oscura/quality/ensemble.py,sha256=okfIQmsypHqQTmBfd_uRXLKshs7E1DbU-jFGSBMQTCc,28
357
351
  oscura/quality/explainer.py,sha256=2WIaetGgS1ivwJaJbanOMWWwNTqQhrrn2zemxCCwZII,10729
358
352
  oscura/quality/scoring.py,sha256=gsIl-2164vGS1LcSP7x29D2hfKLPxee3mmuaFPwQ9Ko,19020
359
353
  oscura/quality/warnings.py,sha256=qdnoe9qh0WJnupqgJzgkEzAZMOgDckGJXC9fKF36Rs8,13469
360
- oscura/reporting/__init__.py,sha256=l6X2PxnE_ZwTMNHZWAtOFSmaUkxZmcWCBTxbF7586bo,6274
354
+ oscura/reporting/__init__.py,sha256=b3w_Q-nmCNjn99eyLgVUHEDkzwzdYupx8lmlrpxS-eQ,6068
361
355
  oscura/reporting/advanced.py,sha256=dcu2fjCA_a4R7lGhdUQbcAb7ioTg7lkUwDiQK4uopjM,36413
362
356
  oscura/reporting/analyze.py,sha256=7tjXGsi3nWyX9I4Tw9nSX6BHD5E7Mu3tpuZAQi2S2hQ,14612
363
357
  oscura/reporting/argument_preparer.py,sha256=L0FB0EGmUyP-GjTgEncvkpVbWMrbncoHTiBIOR5avUo,24095
@@ -382,7 +376,6 @@ oscura/reporting/standards.py,sha256=nC3wOZThj6IMCRpdE9HL8mwcvArRwzhkX92yHox2-qo
382
376
  oscura/reporting/summary_generator.py,sha256=GOPVUCNNZPFn8aVM9YCqFG-wkCTFhRZt--kIyRkOzX4,10622
383
377
  oscura/reporting/tables.py,sha256=VlUAwqv9sPGyj-1A93nCpP-JhYs5TunaJX2oNzHgVcw,11622
384
378
  oscura/reporting/template_system.py,sha256=jPF5jkkjl8el8V6IGJGNZmPlNRFZd0_DBbcokOUMiTU,21135
385
- oscura/reporting/vintage_logic_report.py,sha256=-RyYYEKhP1f6yyhJ41fCkaZHw-nUcSd_CWd-jFgXxDw,15111
386
379
  oscura/reporting/content/__init__.py,sha256=MIU1IrYdFy7L7d6CY8RxkzL1_wL1qLYUfzUsKaASgJ4,874
387
380
  oscura/reporting/content/executive.py,sha256=AQlQMPRLy2rPwPs6Y7somVeg8USIhlPGouYZlMq5rOA,4255
388
381
  oscura/reporting/content/filtering.py,sha256=JrSPJPyGw_jsZUWlAi-ELt8b2ybh1Ui_wXWULv0R-ng,5184
@@ -399,8 +392,12 @@ oscura/reporting/renderers/pdf.py,sha256=EYJyXQRPuSFIDl-6M55UvxOG4HKlKAQ-_SypvZp
399
392
  oscura/reporting/templates/__init__.py,sha256=Snm9Ygw2EIe4DnDAxHcu5NIYLCEVeoZjyw8MDmrcWLM,301
400
393
  oscura/reporting/templates/definition.py,sha256=KC--ESq6Ja9OA_hC3uVP3--Y_rhUEIUnm_1QJDIg7nQ,5204
401
394
  oscura/reporting/templates/index.html,sha256=V74N-0erqnu8tevVFjPT-zMXi5M-7RSvTfujW9pwQPQ,16007
402
- oscura/reporting/templates/index.md,sha256=3PrVNVnI6kAdiG5l2JROH9AwarGYTG0GmAdVQKGyYPY,3533
395
+ oscura/reporting/templates/index.md,sha256=HJANTLpIw7pB6xvTZzAKlM3FWVCpyJtLlA7hjKnMqM0,3754
403
396
  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
404
401
  oscura/search/__init__.py,sha256=eoX7yKNILdlmlFCpt-QHVuT2dUGw6m2GMYrQv5w-mhc,413
405
402
  oscura/search/anomaly.py,sha256=JHcnB9Ba6Hk93vpYedj2Olv6_L_3xnOg8mn6UEyoE6A,9805
406
403
  oscura/search/context.py,sha256=vJ4lWXcC3R7N0vTyTorsZa3KkFLHkd6vQpmhmMeSEIQ,4857
@@ -429,7 +426,7 @@ oscura/ui/__init__.py,sha256=BT4w05Hd7Tg2dM_00cs3G4RJQnj0a56o9uf-41FV7cs,919
429
426
  oscura/ui/formatters.py,sha256=34Wjz1r4FsaGrzdcjltOAyDIvWAjji1wTJaSYn1QYBo,13650
430
427
  oscura/ui/progressive_display.py,sha256=LKGRJrSAscdoUKrBhKZzpYJlnNBX-kOTUGmJCsufFSI,10314
431
428
  oscura/utils/__init__.py,sha256=GaasTJFnZBru-vBPiZQaoGZq65x5ys9trDaIQWuclWc,2270
432
- oscura/utils/autodetect.py,sha256=wJI2qAs-Efz2eRmy61meSJHW9SyGZFZSUe0dYWBez_8,9473
429
+ oscura/utils/autodetect.py,sha256=cP-_be6XK9neO28J2le1iZ8YLvPmfpc8L-p6KAlA6h8,9324
433
430
  oscura/utils/buffer.py,sha256=H-lKT0MBe0fqMoX5UCYftFUaadhSF_Ydwrf7VL8KBy8,10327
434
431
  oscura/utils/lazy.py,sha256=tUy9oZGGjulS4raEbuKvUcdnToCO1y3hKxisCxY1Xm0,11825
435
432
  oscura/utils/lazy_imports.py,sha256=GA1yAu3CowOGmsTmNnh42d2afP6DtG6o-6u2iJe85G8,3990
@@ -444,9 +441,7 @@ oscura/visualization/annotations.py,sha256=01ieilFN6CmmzrMzyWF_G9IR5I7W6XKW-5hTT
444
441
  oscura/visualization/axis_scaling.py,sha256=19TSQgF5s0I2GSFdLNazwjtMdACBB7fDJwUyDtFCSuc,9300
445
442
  oscura/visualization/colors.py,sha256=nw8h4u8lSN8Oq9sqJuKOmrlC8tOcnuvF8xYtP2LvZso,12046
446
443
  oscura/visualization/digital.py,sha256=ChKrsQu6z9ZVoMmTdxWhkNu6B7od0SEtZ1fVq_y9ts0,10096
447
- oscura/visualization/digital_advanced.py,sha256=9wMpDNtpDqHy2uZaP32NM7MMQfly5v4nqK5oHXQJ33U,22836
448
444
  oscura/visualization/eye.py,sha256=rqv34ZtVE58bZUlUrO__5Cgps-PT-HeGbjPI6CrbEcg,12848
449
- oscura/visualization/figure_manager.py,sha256=dG0xsvGVBBomaZPprogGHR2TG3DdK75u72agn8gwu_Q,4495
450
445
  oscura/visualization/histogram.py,sha256=8MYLV9i3XufDChvo27BuruTRR2pOIUN592fqNsjC9jM,7068
451
446
  oscura/visualization/interactive.py,sha256=KRSsBngArbs5LNZgzVQlMSLJPLvmG5u-ScSj43wvKRQ,25462
452
447
  oscura/visualization/jitter.py,sha256=Zib_cShNShvH9qZT8crZHTsMk5hmGc2a7qgO2vvwEco,20526
@@ -479,8 +474,8 @@ oscura/workflows/power.py,sha256=fpTzoIfuZi69ldtu2KAHW-Qu6jzA5jBa_9LVy6xqpTI,608
479
474
  oscura/workflows/protocol.py,sha256=x3T-M81vFVrW3mouaYA8WjxyLLzZyLATVJbiqcMAVFQ,15275
480
475
  oscura/workflows/reverse_engineering.py,sha256=K_yrqrQqQNcCoB0jRAG92e2zy8er3oiKJWSF6lU4nGk,19929
481
476
  oscura/workflows/signal_integrity.py,sha256=p-DOC-AhzQOkG_jyyBK3EUaIBAGZhAhdmo-Ub_ifC3U,8391
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,,
477
+ oscura-0.5.1.dist-info/METADATA,sha256=hnDRI0G8XD3TZZj6UBcr-f1FSWT_wgMeguPzUuyczvU,38933
478
+ oscura-0.5.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
479
+ oscura-0.5.1.dist-info/entry_points.txt,sha256=QLBxd-iTjBQ5HidaVSkLBwvUsqxSG1ZTJ6i-0juu960,48
480
+ oscura-0.5.1.dist-info/licenses/LICENSE,sha256=p1_oEK-oqWDXMFSv5mKbyYkgW-CPbCnFUvdICu490aY,1077
481
+ oscura-0.5.1.dist-info/RECORD,,
@@ -1,498 +0,0 @@
1
- """IC timing database for vintage and modern logic ICs.
2
-
3
- This module provides timing specifications for common ICs to enable automatic
4
- validation and identification.
5
-
6
- Example:
7
- >>> from oscura.analyzers.digital.ic_database import IC_DATABASE, identify_ic
8
- >>> spec = IC_DATABASE["74LS74"]
9
- >>> print(f"Setup time: {spec.timing['t_su']*1e9:.1f}ns")
10
- >>>
11
- >>> # Auto-identify IC from measurements
12
- >>> ic_name, conf = identify_ic(measured_timings)
13
- """
14
-
15
- from __future__ import annotations
16
-
17
- from dataclasses import dataclass, field
18
-
19
-
20
- @dataclass
21
- class ICTiming:
22
- """Timing specification for an IC.
23
-
24
- Attributes:
25
- part_number: IC part number (e.g., "74LS74").
26
- description: Brief description of function.
27
- family: Logic family (e.g., "TTL", "LS-TTL", "HC-CMOS").
28
- vcc_nom: Nominal supply voltage.
29
- vcc_range: Supply voltage range (min, max).
30
- timing: Dictionary of timing parameters in seconds.
31
- voltage_levels: Dictionary of voltage thresholds.
32
- """
33
-
34
- part_number: str
35
- description: str
36
- family: str
37
- vcc_nom: float
38
- vcc_range: tuple[float, float]
39
- timing: dict[str, float] = field(default_factory=dict)
40
- voltage_levels: dict[str, float] = field(default_factory=dict)
41
-
42
-
43
- # Timing parameter definitions:
44
- # t_pd: Propagation delay
45
- # t_su: Setup time
46
- # t_h: Hold time
47
- # t_w: Pulse width (minimum)
48
- # t_r: Rise time
49
- # t_f: Fall time
50
- # t_co: Clock-to-output delay
51
-
52
- # 74xx TTL Series (Standard TTL - 1970s era)
53
- IC_7400_STD = ICTiming(
54
- part_number="7400",
55
- description="Quad 2-input NAND gate",
56
- family="TTL",
57
- vcc_nom=5.0,
58
- vcc_range=(4.75, 5.25),
59
- timing={
60
- "t_pd": 22e-9, # Typ 22ns, max 33ns
61
- "t_r": 12e-9,
62
- "t_f": 8e-9,
63
- },
64
- voltage_levels={
65
- "VIL_max": 0.8,
66
- "VIH_min": 2.0,
67
- "VOL_max": 0.4,
68
- "VOH_min": 2.4,
69
- },
70
- )
71
-
72
- IC_7474_STD = ICTiming(
73
- part_number="7474",
74
- description="Dual D-type flip-flop",
75
- family="TTL",
76
- vcc_nom=5.0,
77
- vcc_range=(4.75, 5.25),
78
- timing={
79
- "t_pd": 25e-9, # Clock-to-output
80
- "t_su": 20e-9, # Setup time
81
- "t_h": 5e-9, # Hold time
82
- "t_w": 25e-9, # Minimum clock pulse width
83
- "t_r": 12e-9,
84
- "t_f": 8e-9,
85
- },
86
- voltage_levels={
87
- "VIL_max": 0.8,
88
- "VIH_min": 2.0,
89
- "VOL_max": 0.4,
90
- "VOH_min": 2.4,
91
- },
92
- )
93
-
94
- # 74LSxx Low-Power Schottky TTL Series (1970s-1980s)
95
- IC_74LS00 = ICTiming(
96
- part_number="74LS00",
97
- description="Quad 2-input NAND gate",
98
- family="LS-TTL",
99
- vcc_nom=5.0,
100
- vcc_range=(4.75, 5.25),
101
- timing={
102
- "t_pd": 10e-9, # Typ 10ns, max 15ns
103
- "t_r": 10e-9,
104
- "t_f": 7e-9,
105
- },
106
- voltage_levels={
107
- "VIL_max": 0.8,
108
- "VIH_min": 2.0,
109
- "VOL_max": 0.5,
110
- "VOH_min": 2.7,
111
- },
112
- )
113
-
114
- IC_74LS74 = ICTiming(
115
- part_number="74LS74",
116
- description="Dual D-type flip-flop",
117
- family="LS-TTL",
118
- vcc_nom=5.0,
119
- vcc_range=(4.75, 5.25),
120
- timing={
121
- "t_pd": 25e-9, # Clock-to-output (typ), max 40ns
122
- "t_su": 20e-9, # Setup time
123
- "t_h": 5e-9, # Hold time
124
- "t_w": 25e-9, # Min clock pulse width
125
- "t_r": 10e-9,
126
- "t_f": 7e-9,
127
- },
128
- voltage_levels={
129
- "VIL_max": 0.8,
130
- "VIH_min": 2.0,
131
- "VOL_max": 0.5,
132
- "VOH_min": 2.7,
133
- },
134
- )
135
-
136
- IC_74LS244 = ICTiming(
137
- part_number="74LS244",
138
- description="Octal buffer/line driver",
139
- family="LS-TTL",
140
- vcc_nom=5.0,
141
- vcc_range=(4.75, 5.25),
142
- timing={
143
- "t_pd": 12e-9, # Typ 12ns, max 18ns
144
- "t_r": 7e-9,
145
- "t_f": 5e-9,
146
- },
147
- voltage_levels={
148
- "VIL_max": 0.8,
149
- "VIH_min": 2.0,
150
- "VOL_max": 0.5,
151
- "VOH_min": 2.7,
152
- },
153
- )
154
-
155
- IC_74LS245 = ICTiming(
156
- part_number="74LS245",
157
- description="Octal bus transceiver",
158
- family="LS-TTL",
159
- vcc_nom=5.0,
160
- vcc_range=(4.75, 5.25),
161
- timing={
162
- "t_pd": 12e-9, # Typ 12ns, max 18ns
163
- "t_r": 7e-9,
164
- "t_f": 5e-9,
165
- },
166
- voltage_levels={
167
- "VIL_max": 0.8,
168
- "VIH_min": 2.0,
169
- "VOL_max": 0.5,
170
- "VOH_min": 2.7,
171
- },
172
- )
173
-
174
- IC_74LS138 = ICTiming(
175
- part_number="74LS138",
176
- description="3-to-8 line decoder/demultiplexer",
177
- family="LS-TTL",
178
- vcc_nom=5.0,
179
- vcc_range=(4.75, 5.25),
180
- timing={
181
- "t_pd": 21e-9, # Typ 21ns, max 41ns
182
- "t_r": 10e-9,
183
- "t_f": 7e-9,
184
- },
185
- voltage_levels={
186
- "VIL_max": 0.8,
187
- "VIH_min": 2.0,
188
- "VOL_max": 0.5,
189
- "VOH_min": 2.7,
190
- },
191
- )
192
-
193
- IC_74LS273 = ICTiming(
194
- part_number="74LS273",
195
- description="Octal D-type flip-flop with clear",
196
- family="LS-TTL",
197
- vcc_nom=5.0,
198
- vcc_range=(4.75, 5.25),
199
- timing={
200
- "t_pd": 20e-9, # Clock-to-output
201
- "t_su": 20e-9, # Setup time
202
- "t_h": 5e-9, # Hold time
203
- "t_w": 20e-9, # Min clock pulse width
204
- "t_r": 10e-9,
205
- "t_f": 7e-9,
206
- },
207
- voltage_levels={
208
- "VIL_max": 0.8,
209
- "VIH_min": 2.0,
210
- "VOL_max": 0.5,
211
- "VOH_min": 2.7,
212
- },
213
- )
214
-
215
- IC_74LS374 = ICTiming(
216
- part_number="74LS374",
217
- description="Octal D-type flip-flop with 3-state outputs",
218
- family="LS-TTL",
219
- vcc_nom=5.0,
220
- vcc_range=(4.75, 5.25),
221
- timing={
222
- "t_pd": 20e-9, # Clock-to-output
223
- "t_su": 20e-9, # Setup time
224
- "t_h": 5e-9, # Hold time
225
- "t_w": 20e-9, # Min clock pulse width
226
- "t_pz": 18e-9, # Output enable to output
227
- "t_pzh": 30e-9, # Output disable to high-Z
228
- "t_r": 10e-9,
229
- "t_f": 7e-9,
230
- },
231
- voltage_levels={
232
- "VIL_max": 0.8,
233
- "VIH_min": 2.0,
234
- "VOL_max": 0.5,
235
- "VOH_min": 2.7,
236
- },
237
- )
238
-
239
- # 74HCxx High-Speed CMOS Series (1980s-present)
240
- IC_74HC00 = ICTiming(
241
- part_number="74HC00",
242
- description="Quad 2-input NAND gate",
243
- family="HC-CMOS",
244
- vcc_nom=5.0,
245
- vcc_range=(2.0, 6.0),
246
- timing={
247
- "t_pd": 8e-9, # At 5V, typ 8ns
248
- "t_r": 6e-9,
249
- "t_f": 6e-9,
250
- },
251
- voltage_levels={
252
- "VIL_max": 1.35,
253
- "VIH_min": 3.15,
254
- "VOL_max": 0.33,
255
- "VOH_min": 3.84,
256
- },
257
- )
258
-
259
- IC_74HC74 = ICTiming(
260
- part_number="74HC74",
261
- description="Dual D-type flip-flop",
262
- family="HC-CMOS",
263
- vcc_nom=5.0,
264
- vcc_range=(2.0, 6.0),
265
- timing={
266
- "t_pd": 16e-9, # Clock-to-output at 5V
267
- "t_su": 14e-9, # Setup time
268
- "t_h": 3e-9, # Hold time
269
- "t_w": 14e-9, # Min clock pulse width
270
- "t_r": 6e-9,
271
- "t_f": 6e-9,
272
- },
273
- voltage_levels={
274
- "VIL_max": 1.35,
275
- "VIH_min": 3.15,
276
- "VOL_max": 0.33,
277
- "VOH_min": 3.84,
278
- },
279
- )
280
-
281
- IC_74HC595 = ICTiming(
282
- part_number="74HC595",
283
- description="8-bit shift register with output latches",
284
- family="HC-CMOS",
285
- vcc_nom=5.0,
286
- vcc_range=(2.0, 6.0),
287
- timing={
288
- "t_pd": 16e-9, # Clock-to-output
289
- "t_su": 14e-9, # Setup time
290
- "t_h": 3e-9, # Hold time
291
- "t_w": 14e-9, # Min clock pulse width
292
- "t_r": 6e-9,
293
- "t_f": 6e-9,
294
- },
295
- voltage_levels={
296
- "VIL_max": 1.35,
297
- "VIH_min": 3.15,
298
- "VOL_max": 0.33,
299
- "VOH_min": 3.84,
300
- },
301
- )
302
-
303
- # 4000 Series CMOS (1970s-1980s)
304
- IC_4011 = ICTiming(
305
- part_number="4011",
306
- description="Quad 2-input NAND gate",
307
- family="CMOS_5V",
308
- vcc_nom=5.0,
309
- vcc_range=(3.0, 18.0),
310
- timing={
311
- "t_pd": 90e-9, # At 5V, typ 90ns
312
- "t_r": 60e-9,
313
- "t_f": 60e-9,
314
- },
315
- voltage_levels={
316
- "VIL_max": 1.5,
317
- "VIH_min": 3.5,
318
- "VOL_max": 0.05,
319
- "VOH_min": 4.95,
320
- },
321
- )
322
-
323
- IC_4013 = ICTiming(
324
- part_number="4013",
325
- description="Dual D-type flip-flop",
326
- family="CMOS_5V",
327
- vcc_nom=5.0,
328
- vcc_range=(3.0, 18.0),
329
- timing={
330
- "t_pd": 140e-9, # Clock-to-output at 5V
331
- "t_su": 60e-9, # Setup time
332
- "t_h": 40e-9, # Hold time
333
- "t_w": 100e-9, # Min clock pulse width
334
- "t_r": 60e-9,
335
- "t_f": 60e-9,
336
- },
337
- voltage_levels={
338
- "VIL_max": 1.5,
339
- "VIH_min": 3.5,
340
- "VOL_max": 0.05,
341
- "VOH_min": 4.95,
342
- },
343
- )
344
-
345
- # Comprehensive IC database
346
- IC_DATABASE: dict[str, ICTiming] = {
347
- # Standard TTL
348
- "7400": IC_7400_STD,
349
- # LS-TTL (74LS series preferred over 74 for specificity)
350
- "74LS00": IC_74LS00,
351
- "74LS74": IC_74LS74,
352
- "74LS138": IC_74LS138,
353
- "74LS244": IC_74LS244,
354
- "74LS245": IC_74LS245,
355
- "74LS273": IC_74LS273,
356
- "74LS374": IC_74LS374,
357
- # HC-CMOS
358
- "74HC00": IC_74HC00,
359
- "74HC74": IC_74HC74,
360
- "74HC595": IC_74HC595,
361
- # 4000 series CMOS
362
- "4011": IC_4011,
363
- "4013": IC_4013,
364
- }
365
-
366
-
367
- def identify_ic(
368
- measured_timings: dict[str, float],
369
- *,
370
- tolerance: float = 0.5,
371
- min_confidence: float = 0.6,
372
- ) -> tuple[str, float]:
373
- """Identify IC from measured timing parameters.
374
-
375
- Args:
376
- measured_timings: Dictionary of measured timing values (e.g., {'t_pd': 25e-9}).
377
- tolerance: Allowable deviation (0.0-1.0, 0.5 = 50% tolerance).
378
- min_confidence: Minimum confidence score (0.0-1.0).
379
-
380
- Returns:
381
- Tuple of (ic_name, confidence_score).
382
- Returns ("unknown", 0.0) if no match above min_confidence.
383
-
384
- Example:
385
- >>> timings = {'t_pd': 25e-9, 't_su': 20e-9, 't_h': 5e-9}
386
- >>> ic, conf = identify_ic(timings)
387
- >>> print(f"Identified: {ic} ({conf*100:.1f}% confidence)")
388
- """
389
- scores: dict[str, float] = {}
390
-
391
- for ic_name, ic_spec in IC_DATABASE.items():
392
- # Calculate match score for this IC
393
- param_scores = []
394
-
395
- for param, measured_value in measured_timings.items():
396
- if param not in ic_spec.timing:
397
- continue
398
-
399
- spec_value = ic_spec.timing[param]
400
-
401
- # Calculate relative error
402
- if spec_value == 0:
403
- continue
404
-
405
- error = abs(measured_value - spec_value) / spec_value
406
-
407
- # Score based on error (within tolerance gets high score)
408
- if error <= tolerance:
409
- param_score = 1.0 - (error / tolerance)
410
- else:
411
- param_score = 0.0
412
-
413
- param_scores.append(param_score)
414
-
415
- # Overall score is average of parameter scores
416
- if param_scores:
417
- scores[ic_name] = sum(param_scores) / len(param_scores)
418
-
419
- # Find best match
420
- if not scores:
421
- return ("unknown", 0.0)
422
-
423
- best_ic = max(scores.items(), key=lambda x: x[1])
424
-
425
- if best_ic[1] < min_confidence:
426
- return ("unknown", best_ic[1])
427
-
428
- return best_ic
429
-
430
-
431
- def validate_ic_timing(
432
- ic_name: str,
433
- measured_timings: dict[str, float],
434
- *,
435
- tolerance: float = 0.3,
436
- ) -> dict[str, dict[str, float | bool | None]]:
437
- """Validate measured timings against IC specification.
438
-
439
- Args:
440
- ic_name: IC part number (e.g., "74LS74").
441
- measured_timings: Dictionary of measured timing values.
442
- tolerance: Allowable deviation (0.0-1.0).
443
-
444
- Returns:
445
- Dictionary mapping parameter names to validation results:
446
- {'t_pd': {'measured': 25e-9, 'spec': 25e-9, 'passes': True, 'error': 0.0}}
447
-
448
- Raises:
449
- KeyError: If IC not found in database.
450
-
451
- Example:
452
- >>> results = validate_ic_timing("74LS74", {'t_pd': 30e-9})
453
- >>> if not results['t_pd']['passes']:
454
- ... print(f"Propagation delay out of spec!")
455
- """
456
- if ic_name not in IC_DATABASE:
457
- raise KeyError(f"IC '{ic_name}' not found in database")
458
-
459
- ic_spec = IC_DATABASE[ic_name]
460
- results: dict[str, dict[str, float | bool | None]] = {}
461
-
462
- for param, measured_value in measured_timings.items():
463
- if param not in ic_spec.timing:
464
- results[param] = {
465
- "measured": measured_value,
466
- "spec": None,
467
- "passes": None,
468
- "error": None,
469
- }
470
- continue
471
-
472
- spec_value = ic_spec.timing[param]
473
-
474
- # Calculate relative error
475
- if spec_value == 0:
476
- error = 0.0
477
- else:
478
- error = abs(measured_value - spec_value) / spec_value
479
-
480
- # Check if within tolerance
481
- passes = error <= tolerance
482
-
483
- results[param] = {
484
- "measured": measured_value,
485
- "spec": spec_value,
486
- "passes": passes,
487
- "error": error,
488
- }
489
-
490
- return results
491
-
492
-
493
- __all__ = [
494
- "IC_DATABASE",
495
- "ICTiming",
496
- "identify_ic",
497
- "validate_ic_timing",
498
- ]