oscura 0.0.1__py3-none-any.whl → 0.1.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 +813 -8
- oscura/__main__.py +392 -0
- oscura/analyzers/__init__.py +37 -0
- oscura/analyzers/digital/__init__.py +177 -0
- oscura/analyzers/digital/bus.py +691 -0
- oscura/analyzers/digital/clock.py +805 -0
- oscura/analyzers/digital/correlation.py +720 -0
- oscura/analyzers/digital/edges.py +632 -0
- oscura/analyzers/digital/extraction.py +413 -0
- oscura/analyzers/digital/quality.py +878 -0
- oscura/analyzers/digital/signal_quality.py +877 -0
- oscura/analyzers/digital/thresholds.py +708 -0
- oscura/analyzers/digital/timing.py +1104 -0
- oscura/analyzers/eye/__init__.py +46 -0
- oscura/analyzers/eye/diagram.py +434 -0
- oscura/analyzers/eye/metrics.py +555 -0
- oscura/analyzers/jitter/__init__.py +83 -0
- oscura/analyzers/jitter/ber.py +333 -0
- oscura/analyzers/jitter/decomposition.py +759 -0
- oscura/analyzers/jitter/measurements.py +413 -0
- oscura/analyzers/jitter/spectrum.py +220 -0
- oscura/analyzers/measurements.py +40 -0
- oscura/analyzers/packet/__init__.py +171 -0
- oscura/analyzers/packet/daq.py +1077 -0
- oscura/analyzers/packet/metrics.py +437 -0
- oscura/analyzers/packet/parser.py +327 -0
- oscura/analyzers/packet/payload.py +2156 -0
- oscura/analyzers/packet/payload_analysis.py +1312 -0
- oscura/analyzers/packet/payload_extraction.py +236 -0
- oscura/analyzers/packet/payload_patterns.py +670 -0
- oscura/analyzers/packet/stream.py +359 -0
- oscura/analyzers/patterns/__init__.py +266 -0
- oscura/analyzers/patterns/clustering.py +1036 -0
- oscura/analyzers/patterns/discovery.py +539 -0
- oscura/analyzers/patterns/learning.py +797 -0
- oscura/analyzers/patterns/matching.py +1091 -0
- oscura/analyzers/patterns/periodic.py +650 -0
- oscura/analyzers/patterns/sequences.py +767 -0
- oscura/analyzers/power/__init__.py +116 -0
- oscura/analyzers/power/ac_power.py +391 -0
- oscura/analyzers/power/basic.py +383 -0
- oscura/analyzers/power/conduction.py +314 -0
- oscura/analyzers/power/efficiency.py +297 -0
- oscura/analyzers/power/ripple.py +356 -0
- oscura/analyzers/power/soa.py +372 -0
- oscura/analyzers/power/switching.py +479 -0
- oscura/analyzers/protocol/__init__.py +150 -0
- oscura/analyzers/protocols/__init__.py +150 -0
- oscura/analyzers/protocols/base.py +500 -0
- oscura/analyzers/protocols/can.py +620 -0
- oscura/analyzers/protocols/can_fd.py +448 -0
- oscura/analyzers/protocols/flexray.py +405 -0
- oscura/analyzers/protocols/hdlc.py +399 -0
- oscura/analyzers/protocols/i2c.py +368 -0
- oscura/analyzers/protocols/i2s.py +296 -0
- oscura/analyzers/protocols/jtag.py +393 -0
- oscura/analyzers/protocols/lin.py +445 -0
- oscura/analyzers/protocols/manchester.py +333 -0
- oscura/analyzers/protocols/onewire.py +501 -0
- oscura/analyzers/protocols/spi.py +334 -0
- oscura/analyzers/protocols/swd.py +325 -0
- oscura/analyzers/protocols/uart.py +393 -0
- oscura/analyzers/protocols/usb.py +495 -0
- oscura/analyzers/signal_integrity/__init__.py +63 -0
- oscura/analyzers/signal_integrity/embedding.py +294 -0
- oscura/analyzers/signal_integrity/equalization.py +370 -0
- oscura/analyzers/signal_integrity/sparams.py +484 -0
- oscura/analyzers/spectral/__init__.py +53 -0
- oscura/analyzers/spectral/chunked.py +273 -0
- oscura/analyzers/spectral/chunked_fft.py +571 -0
- oscura/analyzers/spectral/chunked_wavelet.py +391 -0
- oscura/analyzers/spectral/fft.py +92 -0
- oscura/analyzers/statistical/__init__.py +250 -0
- oscura/analyzers/statistical/checksum.py +923 -0
- oscura/analyzers/statistical/chunked_corr.py +228 -0
- oscura/analyzers/statistical/classification.py +778 -0
- oscura/analyzers/statistical/entropy.py +1113 -0
- oscura/analyzers/statistical/ngrams.py +614 -0
- oscura/analyzers/statistics/__init__.py +119 -0
- oscura/analyzers/statistics/advanced.py +885 -0
- oscura/analyzers/statistics/basic.py +263 -0
- oscura/analyzers/statistics/correlation.py +630 -0
- oscura/analyzers/statistics/distribution.py +298 -0
- oscura/analyzers/statistics/outliers.py +463 -0
- oscura/analyzers/statistics/streaming.py +93 -0
- oscura/analyzers/statistics/trend.py +520 -0
- oscura/analyzers/validation.py +598 -0
- oscura/analyzers/waveform/__init__.py +36 -0
- oscura/analyzers/waveform/measurements.py +943 -0
- oscura/analyzers/waveform/measurements_with_uncertainty.py +371 -0
- oscura/analyzers/waveform/spectral.py +1689 -0
- oscura/analyzers/waveform/wavelets.py +298 -0
- oscura/api/__init__.py +62 -0
- oscura/api/dsl.py +538 -0
- oscura/api/fluent.py +571 -0
- oscura/api/operators.py +498 -0
- oscura/api/optimization.py +392 -0
- oscura/api/profiling.py +396 -0
- oscura/automotive/__init__.py +73 -0
- oscura/automotive/can/__init__.py +52 -0
- oscura/automotive/can/analysis.py +356 -0
- oscura/automotive/can/checksum.py +250 -0
- oscura/automotive/can/correlation.py +212 -0
- oscura/automotive/can/discovery.py +355 -0
- oscura/automotive/can/message_wrapper.py +375 -0
- oscura/automotive/can/models.py +385 -0
- oscura/automotive/can/patterns.py +381 -0
- oscura/automotive/can/session.py +452 -0
- oscura/automotive/can/state_machine.py +300 -0
- oscura/automotive/can/stimulus_response.py +461 -0
- oscura/automotive/dbc/__init__.py +15 -0
- oscura/automotive/dbc/generator.py +156 -0
- oscura/automotive/dbc/parser.py +146 -0
- oscura/automotive/dtc/__init__.py +30 -0
- oscura/automotive/dtc/database.py +3036 -0
- oscura/automotive/j1939/__init__.py +14 -0
- oscura/automotive/j1939/decoder.py +745 -0
- oscura/automotive/loaders/__init__.py +35 -0
- oscura/automotive/loaders/asc.py +98 -0
- oscura/automotive/loaders/blf.py +77 -0
- oscura/automotive/loaders/csv_can.py +136 -0
- oscura/automotive/loaders/dispatcher.py +136 -0
- oscura/automotive/loaders/mdf.py +331 -0
- oscura/automotive/loaders/pcap.py +132 -0
- oscura/automotive/obd/__init__.py +14 -0
- oscura/automotive/obd/decoder.py +707 -0
- oscura/automotive/uds/__init__.py +48 -0
- oscura/automotive/uds/decoder.py +265 -0
- oscura/automotive/uds/models.py +64 -0
- oscura/automotive/visualization.py +369 -0
- oscura/batch/__init__.py +55 -0
- oscura/batch/advanced.py +627 -0
- oscura/batch/aggregate.py +300 -0
- oscura/batch/analyze.py +139 -0
- oscura/batch/logging.py +487 -0
- oscura/batch/metrics.py +556 -0
- oscura/builders/__init__.py +41 -0
- oscura/builders/signal_builder.py +1131 -0
- oscura/cli/__init__.py +14 -0
- oscura/cli/batch.py +339 -0
- oscura/cli/characterize.py +273 -0
- oscura/cli/compare.py +775 -0
- oscura/cli/decode.py +551 -0
- oscura/cli/main.py +247 -0
- oscura/cli/shell.py +350 -0
- oscura/comparison/__init__.py +66 -0
- oscura/comparison/compare.py +397 -0
- oscura/comparison/golden.py +487 -0
- oscura/comparison/limits.py +391 -0
- oscura/comparison/mask.py +434 -0
- oscura/comparison/trace_diff.py +30 -0
- oscura/comparison/visualization.py +481 -0
- oscura/compliance/__init__.py +70 -0
- oscura/compliance/advanced.py +756 -0
- oscura/compliance/masks.py +363 -0
- oscura/compliance/reporting.py +483 -0
- oscura/compliance/testing.py +298 -0
- oscura/component/__init__.py +38 -0
- oscura/component/impedance.py +365 -0
- oscura/component/reactive.py +598 -0
- oscura/component/transmission_line.py +312 -0
- oscura/config/__init__.py +191 -0
- oscura/config/defaults.py +254 -0
- oscura/config/loader.py +348 -0
- oscura/config/memory.py +271 -0
- oscura/config/migration.py +458 -0
- oscura/config/pipeline.py +1077 -0
- oscura/config/preferences.py +530 -0
- oscura/config/protocol.py +875 -0
- oscura/config/schema.py +713 -0
- oscura/config/settings.py +420 -0
- oscura/config/thresholds.py +599 -0
- oscura/convenience.py +457 -0
- oscura/core/__init__.py +299 -0
- oscura/core/audit.py +457 -0
- oscura/core/backend_selector.py +405 -0
- oscura/core/cache.py +590 -0
- oscura/core/cancellation.py +439 -0
- oscura/core/confidence.py +225 -0
- oscura/core/config.py +506 -0
- oscura/core/correlation.py +216 -0
- oscura/core/cross_domain.py +422 -0
- oscura/core/debug.py +301 -0
- oscura/core/edge_cases.py +541 -0
- oscura/core/exceptions.py +535 -0
- oscura/core/gpu_backend.py +523 -0
- oscura/core/lazy.py +832 -0
- oscura/core/log_query.py +540 -0
- oscura/core/logging.py +931 -0
- oscura/core/logging_advanced.py +952 -0
- oscura/core/memoize.py +171 -0
- oscura/core/memory_check.py +274 -0
- oscura/core/memory_guard.py +290 -0
- oscura/core/memory_limits.py +336 -0
- oscura/core/memory_monitor.py +453 -0
- oscura/core/memory_progress.py +465 -0
- oscura/core/memory_warnings.py +315 -0
- oscura/core/numba_backend.py +362 -0
- oscura/core/performance.py +352 -0
- oscura/core/progress.py +524 -0
- oscura/core/provenance.py +358 -0
- oscura/core/results.py +331 -0
- oscura/core/types.py +504 -0
- oscura/core/uncertainty.py +383 -0
- oscura/discovery/__init__.py +52 -0
- oscura/discovery/anomaly_detector.py +672 -0
- oscura/discovery/auto_decoder.py +415 -0
- oscura/discovery/comparison.py +497 -0
- oscura/discovery/quality_validator.py +528 -0
- oscura/discovery/signal_detector.py +769 -0
- oscura/dsl/__init__.py +73 -0
- oscura/dsl/commands.py +246 -0
- oscura/dsl/interpreter.py +455 -0
- oscura/dsl/parser.py +689 -0
- oscura/dsl/repl.py +172 -0
- oscura/exceptions.py +59 -0
- oscura/exploratory/__init__.py +111 -0
- oscura/exploratory/error_recovery.py +642 -0
- oscura/exploratory/fuzzy.py +513 -0
- oscura/exploratory/fuzzy_advanced.py +786 -0
- oscura/exploratory/legacy.py +831 -0
- oscura/exploratory/parse.py +358 -0
- oscura/exploratory/recovery.py +275 -0
- oscura/exploratory/sync.py +382 -0
- oscura/exploratory/unknown.py +707 -0
- oscura/export/__init__.py +25 -0
- oscura/export/wireshark/README.md +265 -0
- oscura/export/wireshark/__init__.py +47 -0
- oscura/export/wireshark/generator.py +312 -0
- oscura/export/wireshark/lua_builder.py +159 -0
- oscura/export/wireshark/templates/dissector.lua.j2 +92 -0
- oscura/export/wireshark/type_mapping.py +165 -0
- oscura/export/wireshark/validator.py +105 -0
- oscura/exporters/__init__.py +94 -0
- oscura/exporters/csv.py +303 -0
- oscura/exporters/exporters.py +44 -0
- oscura/exporters/hdf5.py +219 -0
- oscura/exporters/html_export.py +701 -0
- oscura/exporters/json_export.py +291 -0
- oscura/exporters/markdown_export.py +367 -0
- oscura/exporters/matlab_export.py +354 -0
- oscura/exporters/npz_export.py +219 -0
- oscura/exporters/spice_export.py +210 -0
- oscura/extensibility/__init__.py +131 -0
- oscura/extensibility/docs.py +752 -0
- oscura/extensibility/extensions.py +1125 -0
- oscura/extensibility/logging.py +259 -0
- oscura/extensibility/measurements.py +485 -0
- oscura/extensibility/plugins.py +414 -0
- oscura/extensibility/registry.py +346 -0
- oscura/extensibility/templates.py +913 -0
- oscura/extensibility/validation.py +651 -0
- oscura/filtering/__init__.py +89 -0
- oscura/filtering/base.py +563 -0
- oscura/filtering/convenience.py +564 -0
- oscura/filtering/design.py +725 -0
- oscura/filtering/filters.py +32 -0
- oscura/filtering/introspection.py +605 -0
- oscura/guidance/__init__.py +24 -0
- oscura/guidance/recommender.py +429 -0
- oscura/guidance/wizard.py +518 -0
- oscura/inference/__init__.py +251 -0
- oscura/inference/active_learning/README.md +153 -0
- oscura/inference/active_learning/__init__.py +38 -0
- oscura/inference/active_learning/lstar.py +257 -0
- oscura/inference/active_learning/observation_table.py +230 -0
- oscura/inference/active_learning/oracle.py +78 -0
- oscura/inference/active_learning/teachers/__init__.py +15 -0
- oscura/inference/active_learning/teachers/simulator.py +192 -0
- oscura/inference/adaptive_tuning.py +453 -0
- oscura/inference/alignment.py +653 -0
- oscura/inference/bayesian.py +943 -0
- oscura/inference/binary.py +1016 -0
- oscura/inference/crc_reverse.py +711 -0
- oscura/inference/logic.py +288 -0
- oscura/inference/message_format.py +1305 -0
- oscura/inference/protocol.py +417 -0
- oscura/inference/protocol_dsl.py +1084 -0
- oscura/inference/protocol_library.py +1230 -0
- oscura/inference/sequences.py +809 -0
- oscura/inference/signal_intelligence.py +1509 -0
- oscura/inference/spectral.py +215 -0
- oscura/inference/state_machine.py +634 -0
- oscura/inference/stream.py +918 -0
- oscura/integrations/__init__.py +59 -0
- oscura/integrations/llm.py +1827 -0
- oscura/jupyter/__init__.py +32 -0
- oscura/jupyter/display.py +268 -0
- oscura/jupyter/magic.py +334 -0
- oscura/loaders/__init__.py +526 -0
- oscura/loaders/binary.py +69 -0
- oscura/loaders/configurable.py +1255 -0
- oscura/loaders/csv.py +26 -0
- oscura/loaders/csv_loader.py +473 -0
- oscura/loaders/hdf5.py +9 -0
- oscura/loaders/hdf5_loader.py +510 -0
- oscura/loaders/lazy.py +370 -0
- oscura/loaders/mmap_loader.py +583 -0
- oscura/loaders/numpy_loader.py +436 -0
- oscura/loaders/pcap.py +432 -0
- oscura/loaders/preprocessing.py +368 -0
- oscura/loaders/rigol.py +287 -0
- oscura/loaders/sigrok.py +321 -0
- oscura/loaders/tdms.py +367 -0
- oscura/loaders/tektronix.py +711 -0
- oscura/loaders/validation.py +584 -0
- oscura/loaders/vcd.py +464 -0
- oscura/loaders/wav.py +233 -0
- oscura/math/__init__.py +45 -0
- oscura/math/arithmetic.py +824 -0
- oscura/math/interpolation.py +413 -0
- oscura/onboarding/__init__.py +39 -0
- oscura/onboarding/help.py +498 -0
- oscura/onboarding/tutorials.py +405 -0
- oscura/onboarding/wizard.py +466 -0
- oscura/optimization/__init__.py +19 -0
- oscura/optimization/parallel.py +440 -0
- oscura/optimization/search.py +532 -0
- oscura/pipeline/__init__.py +43 -0
- oscura/pipeline/base.py +338 -0
- oscura/pipeline/composition.py +242 -0
- oscura/pipeline/parallel.py +448 -0
- oscura/pipeline/pipeline.py +375 -0
- oscura/pipeline/reverse_engineering.py +1119 -0
- oscura/plugins/__init__.py +122 -0
- oscura/plugins/base.py +272 -0
- oscura/plugins/cli.py +497 -0
- oscura/plugins/discovery.py +411 -0
- oscura/plugins/isolation.py +418 -0
- oscura/plugins/lifecycle.py +959 -0
- oscura/plugins/manager.py +493 -0
- oscura/plugins/registry.py +421 -0
- oscura/plugins/versioning.py +372 -0
- oscura/py.typed +0 -0
- oscura/quality/__init__.py +65 -0
- oscura/quality/ensemble.py +740 -0
- oscura/quality/explainer.py +338 -0
- oscura/quality/scoring.py +616 -0
- oscura/quality/warnings.py +456 -0
- oscura/reporting/__init__.py +248 -0
- oscura/reporting/advanced.py +1234 -0
- oscura/reporting/analyze.py +448 -0
- oscura/reporting/argument_preparer.py +596 -0
- oscura/reporting/auto_report.py +507 -0
- oscura/reporting/batch.py +615 -0
- oscura/reporting/chart_selection.py +223 -0
- oscura/reporting/comparison.py +330 -0
- oscura/reporting/config.py +615 -0
- oscura/reporting/content/__init__.py +39 -0
- oscura/reporting/content/executive.py +127 -0
- oscura/reporting/content/filtering.py +191 -0
- oscura/reporting/content/minimal.py +257 -0
- oscura/reporting/content/verbosity.py +162 -0
- oscura/reporting/core.py +508 -0
- oscura/reporting/core_formats/__init__.py +17 -0
- oscura/reporting/core_formats/multi_format.py +210 -0
- oscura/reporting/engine.py +836 -0
- oscura/reporting/export.py +366 -0
- oscura/reporting/formatting/__init__.py +129 -0
- oscura/reporting/formatting/emphasis.py +81 -0
- oscura/reporting/formatting/numbers.py +403 -0
- oscura/reporting/formatting/standards.py +55 -0
- oscura/reporting/formatting.py +466 -0
- oscura/reporting/html.py +578 -0
- oscura/reporting/index.py +590 -0
- oscura/reporting/multichannel.py +296 -0
- oscura/reporting/output.py +379 -0
- oscura/reporting/pdf.py +373 -0
- oscura/reporting/plots.py +731 -0
- oscura/reporting/pptx_export.py +360 -0
- oscura/reporting/renderers/__init__.py +11 -0
- oscura/reporting/renderers/pdf.py +94 -0
- oscura/reporting/sections.py +471 -0
- oscura/reporting/standards.py +680 -0
- oscura/reporting/summary_generator.py +368 -0
- oscura/reporting/tables.py +397 -0
- oscura/reporting/template_system.py +724 -0
- oscura/reporting/templates/__init__.py +15 -0
- oscura/reporting/templates/definition.py +205 -0
- oscura/reporting/templates/index.html +649 -0
- oscura/reporting/templates/index.md +173 -0
- oscura/schemas/__init__.py +158 -0
- oscura/schemas/bus_configuration.json +322 -0
- oscura/schemas/device_mapping.json +182 -0
- oscura/schemas/packet_format.json +418 -0
- oscura/schemas/protocol_definition.json +363 -0
- oscura/search/__init__.py +16 -0
- oscura/search/anomaly.py +292 -0
- oscura/search/context.py +149 -0
- oscura/search/pattern.py +160 -0
- oscura/session/__init__.py +34 -0
- oscura/session/annotations.py +289 -0
- oscura/session/history.py +313 -0
- oscura/session/session.py +445 -0
- oscura/streaming/__init__.py +43 -0
- oscura/streaming/chunked.py +611 -0
- oscura/streaming/progressive.py +393 -0
- oscura/streaming/realtime.py +622 -0
- oscura/testing/__init__.py +54 -0
- oscura/testing/synthetic.py +808 -0
- oscura/triggering/__init__.py +68 -0
- oscura/triggering/base.py +229 -0
- oscura/triggering/edge.py +353 -0
- oscura/triggering/pattern.py +344 -0
- oscura/triggering/pulse.py +581 -0
- oscura/triggering/window.py +453 -0
- oscura/ui/__init__.py +48 -0
- oscura/ui/formatters.py +526 -0
- oscura/ui/progressive_display.py +340 -0
- oscura/utils/__init__.py +99 -0
- oscura/utils/autodetect.py +338 -0
- oscura/utils/buffer.py +389 -0
- oscura/utils/lazy.py +407 -0
- oscura/utils/lazy_imports.py +147 -0
- oscura/utils/memory.py +836 -0
- oscura/utils/memory_advanced.py +1326 -0
- oscura/utils/memory_extensions.py +465 -0
- oscura/utils/progressive.py +352 -0
- oscura/utils/windowing.py +362 -0
- oscura/visualization/__init__.py +321 -0
- oscura/visualization/accessibility.py +526 -0
- oscura/visualization/annotations.py +374 -0
- oscura/visualization/axis_scaling.py +305 -0
- oscura/visualization/colors.py +453 -0
- oscura/visualization/digital.py +337 -0
- oscura/visualization/eye.py +420 -0
- oscura/visualization/histogram.py +281 -0
- oscura/visualization/interactive.py +858 -0
- oscura/visualization/jitter.py +702 -0
- oscura/visualization/keyboard.py +394 -0
- oscura/visualization/layout.py +365 -0
- oscura/visualization/optimization.py +1028 -0
- oscura/visualization/palettes.py +446 -0
- oscura/visualization/plot.py +92 -0
- oscura/visualization/power.py +290 -0
- oscura/visualization/power_extended.py +626 -0
- oscura/visualization/presets.py +467 -0
- oscura/visualization/protocols.py +932 -0
- oscura/visualization/render.py +207 -0
- oscura/visualization/rendering.py +444 -0
- oscura/visualization/reverse_engineering.py +791 -0
- oscura/visualization/signal_integrity.py +808 -0
- oscura/visualization/specialized.py +553 -0
- oscura/visualization/spectral.py +811 -0
- oscura/visualization/styles.py +381 -0
- oscura/visualization/thumbnails.py +311 -0
- oscura/visualization/time_axis.py +351 -0
- oscura/visualization/waveform.py +367 -0
- oscura/workflow/__init__.py +13 -0
- oscura/workflow/dag.py +377 -0
- oscura/workflows/__init__.py +58 -0
- oscura/workflows/compliance.py +280 -0
- oscura/workflows/digital.py +272 -0
- oscura/workflows/multi_trace.py +502 -0
- oscura/workflows/power.py +178 -0
- oscura/workflows/protocol.py +492 -0
- oscura/workflows/reverse_engineering.py +639 -0
- oscura/workflows/signal_integrity.py +227 -0
- oscura-0.1.0.dist-info/METADATA +300 -0
- oscura-0.1.0.dist-info/RECORD +463 -0
- oscura-0.1.0.dist-info/entry_points.txt +2 -0
- {oscura-0.0.1.dist-info → oscura-0.1.0.dist-info}/licenses/LICENSE +1 -1
- oscura-0.0.1.dist-info/METADATA +0 -63
- oscura-0.0.1.dist-info/RECORD +0 -5
- {oscura-0.0.1.dist-info → oscura-0.1.0.dist-info}/WHEEL +0 -0
oscura/dsl/repl.py
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"""TraceKit DSL REPL (Read-Eval-Print Loop).
|
|
2
|
+
|
|
3
|
+
Interactive shell for TraceKit DSL.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import sys
|
|
7
|
+
|
|
8
|
+
from oscura.dsl.interpreter import Interpreter, InterpreterError
|
|
9
|
+
from oscura.dsl.parser import parse_dsl
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class REPL:
|
|
13
|
+
"""Interactive DSL shell."""
|
|
14
|
+
|
|
15
|
+
def __init__(self) -> None:
|
|
16
|
+
"""Initialize REPL with new interpreter."""
|
|
17
|
+
self.interpreter = Interpreter()
|
|
18
|
+
self.running = True
|
|
19
|
+
|
|
20
|
+
def print_banner(self) -> None:
|
|
21
|
+
"""Print welcome banner."""
|
|
22
|
+
print("TraceKit DSL REPL v0.1.0")
|
|
23
|
+
print("Type 'exit' or 'quit' to exit, 'help' for help")
|
|
24
|
+
print()
|
|
25
|
+
|
|
26
|
+
def print_help(self) -> None:
|
|
27
|
+
"""Print help message."""
|
|
28
|
+
print("TraceKit DSL Commands:")
|
|
29
|
+
print(" load <filename> - Load a trace file")
|
|
30
|
+
print(" filter <type> <params> - Apply filter (lowpass, highpass, etc.)")
|
|
31
|
+
print(" measure <name> - Measure property (rise_time, etc.)")
|
|
32
|
+
print(" plot - Plot trace")
|
|
33
|
+
print(" export <format> - Export data (json, csv, hdf5)")
|
|
34
|
+
print(" glob(<pattern>) - Match files")
|
|
35
|
+
print()
|
|
36
|
+
print("Variables:")
|
|
37
|
+
print(" $name = expression - Assign variable")
|
|
38
|
+
print(" $name - Reference variable")
|
|
39
|
+
print()
|
|
40
|
+
print("Pipelines:")
|
|
41
|
+
print(" expr | command | command - Chain operations")
|
|
42
|
+
print()
|
|
43
|
+
print("Loops:")
|
|
44
|
+
print(" for $var in expr: statement - Iterate")
|
|
45
|
+
print()
|
|
46
|
+
print("Special commands:")
|
|
47
|
+
print(" help - Show this help")
|
|
48
|
+
print(" vars - List variables")
|
|
49
|
+
print(" exit, quit - Exit REPL")
|
|
50
|
+
print()
|
|
51
|
+
|
|
52
|
+
def print_variables(self) -> None:
|
|
53
|
+
"""Print current variables."""
|
|
54
|
+
if not self.interpreter.variables:
|
|
55
|
+
print("No variables defined")
|
|
56
|
+
return
|
|
57
|
+
|
|
58
|
+
print("Variables:")
|
|
59
|
+
for name, value in self.interpreter.variables.items():
|
|
60
|
+
# Truncate long values
|
|
61
|
+
str_value = str(value)
|
|
62
|
+
if len(str_value) > 60:
|
|
63
|
+
str_value = str_value[:57] + "..."
|
|
64
|
+
print(f" {name} = {str_value}")
|
|
65
|
+
|
|
66
|
+
def read_input(self) -> str | None:
|
|
67
|
+
"""Read input line from user.
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
Input line or None on EOF
|
|
71
|
+
"""
|
|
72
|
+
try:
|
|
73
|
+
return input("tk> ")
|
|
74
|
+
except EOFError:
|
|
75
|
+
return None
|
|
76
|
+
|
|
77
|
+
def eval_special_command(self, line: str) -> bool:
|
|
78
|
+
"""Evaluate special REPL commands.
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
line: Input line
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
True if special command was handled, False otherwise
|
|
85
|
+
"""
|
|
86
|
+
line = line.strip()
|
|
87
|
+
|
|
88
|
+
if line in ("exit", "quit"):
|
|
89
|
+
self.running = False
|
|
90
|
+
return True
|
|
91
|
+
|
|
92
|
+
if line == "help":
|
|
93
|
+
self.print_help()
|
|
94
|
+
return True
|
|
95
|
+
|
|
96
|
+
if line == "vars":
|
|
97
|
+
self.print_variables()
|
|
98
|
+
return True
|
|
99
|
+
|
|
100
|
+
return False
|
|
101
|
+
|
|
102
|
+
def eval_line(self, line: str) -> None:
|
|
103
|
+
"""Evaluate a single line of input.
|
|
104
|
+
|
|
105
|
+
Args:
|
|
106
|
+
line: Input line
|
|
107
|
+
"""
|
|
108
|
+
line = line.strip()
|
|
109
|
+
|
|
110
|
+
# Skip empty lines
|
|
111
|
+
if not line:
|
|
112
|
+
return
|
|
113
|
+
|
|
114
|
+
# Skip comments
|
|
115
|
+
if line.startswith("#"):
|
|
116
|
+
return
|
|
117
|
+
|
|
118
|
+
# Check for special commands
|
|
119
|
+
if self.eval_special_command(line):
|
|
120
|
+
return
|
|
121
|
+
|
|
122
|
+
# Parse and execute
|
|
123
|
+
try:
|
|
124
|
+
ast = parse_dsl(line)
|
|
125
|
+
self.interpreter.execute(ast)
|
|
126
|
+
|
|
127
|
+
# Print result if expression statement (not assignment)
|
|
128
|
+
if ast and hasattr(ast[-1], "expression"):
|
|
129
|
+
# Assignment - don't print
|
|
130
|
+
pass
|
|
131
|
+
else:
|
|
132
|
+
# Expression - could print result
|
|
133
|
+
# For now, commands handle their own output
|
|
134
|
+
pass
|
|
135
|
+
|
|
136
|
+
except SyntaxError as e:
|
|
137
|
+
print(f"Syntax error: {e}", file=sys.stderr)
|
|
138
|
+
|
|
139
|
+
except InterpreterError as e:
|
|
140
|
+
print(f"Error: {e}", file=sys.stderr)
|
|
141
|
+
|
|
142
|
+
except Exception as e:
|
|
143
|
+
print(f"Unexpected error: {e}", file=sys.stderr)
|
|
144
|
+
|
|
145
|
+
def run(self) -> None:
|
|
146
|
+
"""Run REPL loop."""
|
|
147
|
+
self.print_banner()
|
|
148
|
+
|
|
149
|
+
while self.running:
|
|
150
|
+
line = self.read_input()
|
|
151
|
+
|
|
152
|
+
if line is None:
|
|
153
|
+
# EOF
|
|
154
|
+
print()
|
|
155
|
+
break
|
|
156
|
+
|
|
157
|
+
self.eval_line(line)
|
|
158
|
+
|
|
159
|
+
print("Goodbye!")
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def start_repl() -> None:
|
|
163
|
+
"""Start interactive REPL.
|
|
164
|
+
|
|
165
|
+
This is the main entry point for the DSL REPL.
|
|
166
|
+
"""
|
|
167
|
+
repl = REPL()
|
|
168
|
+
repl.run()
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
if __name__ == "__main__":
|
|
172
|
+
start_repl()
|
oscura/exceptions.py
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""TraceKit exception hierarchy - DEPRECATED compatibility module.
|
|
2
|
+
|
|
3
|
+
.. deprecated:: 1.0.0
|
|
4
|
+
This module is deprecated for backward compatibility only.
|
|
5
|
+
New code MUST import from `oscura.core.exceptions` directly.
|
|
6
|
+
This module will be removed in a future major version.
|
|
7
|
+
|
|
8
|
+
This module re-exports exceptions from oscura.core.exceptions.
|
|
9
|
+
The canonical location for all exception classes is `oscura.core.exceptions`.
|
|
10
|
+
|
|
11
|
+
Why two files exist:
|
|
12
|
+
- `oscura/core/exceptions.py`: Canonical implementation of all exception classes
|
|
13
|
+
- `oscura/exceptions.py` (this file): Deprecated re-export for backward compatibility
|
|
14
|
+
|
|
15
|
+
Migration guide:
|
|
16
|
+
Old (deprecated):
|
|
17
|
+
from oscura.exceptions import LoaderError
|
|
18
|
+
|
|
19
|
+
New (preferred):
|
|
20
|
+
from oscura.core.exceptions import LoaderError
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
import warnings
|
|
24
|
+
|
|
25
|
+
# Issue deprecation warning on import
|
|
26
|
+
warnings.warn(
|
|
27
|
+
"oscura.exceptions is deprecated. "
|
|
28
|
+
"Import from oscura.core.exceptions instead. "
|
|
29
|
+
"This module will be removed in a future major version.",
|
|
30
|
+
DeprecationWarning,
|
|
31
|
+
stacklevel=2,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
# Re-export all exceptions from core.exceptions
|
|
35
|
+
from oscura.core.exceptions import ( # noqa: E402
|
|
36
|
+
AnalysisError,
|
|
37
|
+
ConfigurationError,
|
|
38
|
+
ExportError,
|
|
39
|
+
FormatError,
|
|
40
|
+
InsufficientDataError,
|
|
41
|
+
LoaderError,
|
|
42
|
+
SampleRateError,
|
|
43
|
+
TraceKitError,
|
|
44
|
+
UnsupportedFormatError,
|
|
45
|
+
ValidationError,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
__all__ = [
|
|
49
|
+
"AnalysisError",
|
|
50
|
+
"ConfigurationError",
|
|
51
|
+
"ExportError",
|
|
52
|
+
"FormatError",
|
|
53
|
+
"InsufficientDataError",
|
|
54
|
+
"LoaderError",
|
|
55
|
+
"SampleRateError",
|
|
56
|
+
"TraceKitError",
|
|
57
|
+
"UnsupportedFormatError",
|
|
58
|
+
"ValidationError",
|
|
59
|
+
]
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"""Exploratory analysis for unknown and legacy signals.
|
|
2
|
+
|
|
3
|
+
This package provides tools for analyzing signals from unknown systems,
|
|
4
|
+
legacy hardware, and corrupted or noisy data.
|
|
5
|
+
|
|
6
|
+
- UNKNOWN-001: Binary Field Detection
|
|
7
|
+
- UNKNOWN-002: Protocol Auto-Detection with Fuzzy Matching
|
|
8
|
+
- UNKNOWN-003: Unknown Signal Characterization
|
|
9
|
+
- UNKNOWN-004: Pattern Frequency Analysis
|
|
10
|
+
- UNKNOWN-005: Reverse Engineering Workflow
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from oscura.exploratory.error_recovery import (
|
|
14
|
+
ErrorContext,
|
|
15
|
+
partial_decode,
|
|
16
|
+
recover_corrupted_data,
|
|
17
|
+
retry_with_adjustment,
|
|
18
|
+
)
|
|
19
|
+
from oscura.exploratory.fuzzy import (
|
|
20
|
+
fuzzy_pattern_match,
|
|
21
|
+
fuzzy_protocol_detect,
|
|
22
|
+
fuzzy_timing_match,
|
|
23
|
+
)
|
|
24
|
+
from oscura.exploratory.fuzzy_advanced import (
|
|
25
|
+
AlignmentResult,
|
|
26
|
+
PositionAnalysis,
|
|
27
|
+
VariantCharacterization,
|
|
28
|
+
align_sequences,
|
|
29
|
+
align_two_sequences,
|
|
30
|
+
characterize_variants,
|
|
31
|
+
compute_conservation_scores,
|
|
32
|
+
)
|
|
33
|
+
from oscura.exploratory.legacy import (
|
|
34
|
+
assess_signal_quality,
|
|
35
|
+
characterize_test_points,
|
|
36
|
+
cross_correlate_multi_reference,
|
|
37
|
+
detect_logic_families_multi_channel,
|
|
38
|
+
)
|
|
39
|
+
from oscura.exploratory.parse import (
|
|
40
|
+
DecodedFrame,
|
|
41
|
+
ErrorTolerance,
|
|
42
|
+
TimestampCorrection,
|
|
43
|
+
correct_timestamp_jitter,
|
|
44
|
+
decode_with_error_tolerance,
|
|
45
|
+
)
|
|
46
|
+
from oscura.exploratory.recovery import (
|
|
47
|
+
ErrorAnalysis,
|
|
48
|
+
ErrorPattern,
|
|
49
|
+
analyze_bit_errors,
|
|
50
|
+
generate_error_visualization_data,
|
|
51
|
+
)
|
|
52
|
+
from oscura.exploratory.sync import (
|
|
53
|
+
PacketParseResult,
|
|
54
|
+
RecoveryStrategy,
|
|
55
|
+
SyncMatch,
|
|
56
|
+
fuzzy_sync_search,
|
|
57
|
+
parse_variable_length_packets,
|
|
58
|
+
)
|
|
59
|
+
from oscura.exploratory.unknown import (
|
|
60
|
+
analyze_pattern_frequency,
|
|
61
|
+
characterize_unknown_signal,
|
|
62
|
+
detect_binary_fields,
|
|
63
|
+
reverse_engineer_protocol,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
__all__ = [
|
|
67
|
+
# Advanced fuzzy (FUZZY-004, FUZZY-005)
|
|
68
|
+
"AlignmentResult",
|
|
69
|
+
"DecodedFrame",
|
|
70
|
+
"ErrorAnalysis",
|
|
71
|
+
# Error recovery
|
|
72
|
+
"ErrorContext",
|
|
73
|
+
# DAQ - Bit error analysis (DAQ-005)
|
|
74
|
+
"ErrorPattern",
|
|
75
|
+
# DAQ - Error-tolerant parsing (DAQ-003, DAQ-004)
|
|
76
|
+
"ErrorTolerance",
|
|
77
|
+
"PacketParseResult",
|
|
78
|
+
"PositionAnalysis",
|
|
79
|
+
"RecoveryStrategy",
|
|
80
|
+
# DAQ - Fuzzy sync search (DAQ-001, DAQ-002)
|
|
81
|
+
"SyncMatch",
|
|
82
|
+
"TimestampCorrection",
|
|
83
|
+
"VariantCharacterization",
|
|
84
|
+
"align_sequences",
|
|
85
|
+
"align_two_sequences",
|
|
86
|
+
"analyze_bit_errors",
|
|
87
|
+
# Unknown signal analysis
|
|
88
|
+
"analyze_pattern_frequency",
|
|
89
|
+
# Legacy analysis
|
|
90
|
+
"assess_signal_quality",
|
|
91
|
+
"characterize_test_points",
|
|
92
|
+
"characterize_unknown_signal",
|
|
93
|
+
"characterize_variants",
|
|
94
|
+
"compute_conservation_scores",
|
|
95
|
+
"correct_timestamp_jitter",
|
|
96
|
+
"cross_correlate_multi_reference",
|
|
97
|
+
"decode_with_error_tolerance",
|
|
98
|
+
"detect_binary_fields",
|
|
99
|
+
"detect_logic_families_multi_channel",
|
|
100
|
+
# Fuzzy matching
|
|
101
|
+
"fuzzy_pattern_match",
|
|
102
|
+
"fuzzy_protocol_detect",
|
|
103
|
+
"fuzzy_sync_search",
|
|
104
|
+
"fuzzy_timing_match",
|
|
105
|
+
"generate_error_visualization_data",
|
|
106
|
+
"parse_variable_length_packets",
|
|
107
|
+
"partial_decode",
|
|
108
|
+
"recover_corrupted_data",
|
|
109
|
+
"retry_with_adjustment",
|
|
110
|
+
"reverse_engineer_protocol",
|
|
111
|
+
]
|