oep-client-python 0.0.48__tar.gz → 0.0.49__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/CHANGELOG.md +24 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/PKG-INFO +1 -1
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/pyproject.toml +1 -1
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/__init__.py +1 -1
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/acquire.py +2 -2
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/virtual_bench_capture.py +140 -20
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_acquire.py +9 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_capture_formats.py +24 -6
- oep_client_python-0.0.49/tests/test_virtual_bench_fast_samples.py +64 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/.gitignore +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/LICENSE +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/README.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/README.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/README.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/allocator-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/analog-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/analog-payload-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/arm-adi-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/attach-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/block-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/capture-group-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/capture-group-geometry-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/capture-metadata-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/capture-serial-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/capture-timeline-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/capture-timeline-lifecycle-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/clock-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/config-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/config-execution-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/config-fallback-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/config-paging-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/config-power-loss-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/config-storage-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/conformance-checks.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/conformance-spec-compatibility.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/core-fixed-fields-review.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/core-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/corr-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/cut-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/data-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/debug-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/dependency-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/discovery-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/dmseq-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/dmseq-target-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/execution-order-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/exhausted-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/fixture-metadata-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/gpio-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/gpio-lifecycle-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/hardware-configuration.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/hardware-quickstart.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/hardware-schema.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/host-core-shapes-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/host-deadline-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/host-notification-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/host-request-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/host-resend-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/host-tlv-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/host-value-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/host-wait-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/i2c-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/interface-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/interface-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/lease-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/link-routes-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/link-transfer-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/logic-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/mailbox-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/notification-output-sample.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/notification-retention-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/notification-sequence-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/oep-declaration-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/oep-example-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/outcome-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/pin-constraints-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/pipeline-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/port-speed-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/probe-input-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/recovery-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/recovery-races-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/refusal-order-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/registered-ops-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/replay-pressure-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/reset-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/resource-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/response-race-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/restart-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/retention-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/retention-lifecycle-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/retry-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/route-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/run-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/scan-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/scan-options-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/selected-metadata-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/session-loss-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/session-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/spec-follow-notes.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/spi-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/step-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/stream-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/subscription-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/tcp-recovery-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/testing-consumers.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/testing-policy.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/tlv-request-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/trace/README.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/trace/capture.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/trace/common.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/trace/console.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/trace/core.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/trace/debug.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/trace/fixture.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/trace/link.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/trace/plan.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/trace/restart.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/trace/transports.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/uart-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/uart-stream-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/usb-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/wire-options-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/writer-lease-conformance.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/__main__.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/arm.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/capture.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/capture_blocks.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/catalog.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/ch32_flash.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/cobs.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/__init__.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/allocator.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/allocator_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/allocator_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/analog.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/analog_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/analog_payload.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/analog_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/arm_adi.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/arm_adi_blocks.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/arm_adi_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/arm_adi_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/attach.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/attach_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/attach_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/block_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/block_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/blocks.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/capture_group.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/capture_group_geometry.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/capture_group_geometry_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/capture_group_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/capture_group_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/capture_metadata.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/capture_metadata_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/capture_serial.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/capture_serial_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/capture_timeline.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/capture_timeline_lifecycle.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/capture_timeline_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/capture_timeline_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/clock.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/clock_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/clock_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/core_fixed_fields.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/core_smoke.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/corr.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/cut.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/cut_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/cut_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/data.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/data_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/data_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/debug.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/debug_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/debug_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/declaration_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/dependencies.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/dependency_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/dependency_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/discovery.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/dmseq.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/dmseq_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/dmseq_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/dmseq_target.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/dmseq_target_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/dmseq_target_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/execution_order.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/execution_order_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/exhausted.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/exhausted_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/fixture_metadata.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/fixture_metadata_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/force_hw.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/gpio.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/gpio_lifecycle.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/gpio_lifecycle_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/gpio_lifecycle_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/gpio_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/gpio_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/host_core.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/host_core_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/host_deadline.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/host_deadline_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/host_notifications.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/host_notifications_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/host_request_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/host_requests.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/host_resend.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/host_resend_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/host_tlv.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/host_tlv_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/host_values.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/host_values_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/host_wait.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/host_wait_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/i2c.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/i2c_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/i2c_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/interface_smoke.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/interfaces.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/lease.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/lease_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/link_routes.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/link_routes_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/link_routes_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/link_transfer_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/link_transfer_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/link_transfers.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/logic.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/logic_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/logic_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/mailbox.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/mailbox_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/mailbox_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/notification_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/notification_retention.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/notification_retention_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/notification_sequence.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/notification_sequence_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/notify_hw.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/oep_declaration_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/oep_declarations.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/oep_smoke.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/outcome_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/outcome_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/outcomes.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/pipeline.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/pipeline_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/pipeline_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/port_speed.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/port_speed_execution.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/port_speed_execution_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/port_speed_execution_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/port_speed_lifecycle.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/port_speed_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/port_speed_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/probe_input.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/probe_input_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/recovery.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/recovery_race_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/recovery_races.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/recovery_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/refusal_order.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/refusal_order_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/registered_ops.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/registered_ops_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/release_hw.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/replay_pressure.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/reset.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/reset_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/reset_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/resource_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/resource_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/resources.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/response_race.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/response_race_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/restart.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/restart_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/restart_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/retention.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/retention_lifecycle.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/retention_lifecycle_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/retention_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/retention_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/retry.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/retry_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/retry_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/route_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/route_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/routes.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/run.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/run_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/run_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/scan.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/scan_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/scan_options.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/scan_options_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/scan_options_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/scan_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/selected_metadata.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/selected_metadata_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/serial.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/session_loss.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/session_loss_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/session_smoke.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/spi.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/spi_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/spi_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/step.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/step_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/step_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/stream.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/stream_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/stream_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/subscription_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/subscriptions.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/tcp.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/tcp_peers.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/tcp_recovery.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/tcp_recovery_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/tlv_request_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/tlv_requests.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/uart.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/uart_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/uart_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/uart_stream.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/uart_stream_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/usb.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/usb_cases.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/usb_hw.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/usb_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/wire_options.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/wire_options_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/wire_options_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/writer_lease.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/writer_lease_model.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/conformance/writer_lease_sample.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/console.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/core.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/decode.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/discovery.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/dump.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/endpoint.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/fixture.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/frames.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/hardware.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/hid_stream.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/host.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/interfaces.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/kept_session.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/link.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/linktest.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/memo.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/message.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/names.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/pins.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/probe_log.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/pytest_conformance.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/registry.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/riscv.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/rp2350.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/settings.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/speed_record.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/stimulus.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/targets.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/uiapduino.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/usb_stream.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/virtual_bench.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/virtual_bench_mdns.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/virtual_bench_serial.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/virtual_bench_serve.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/virtual_bench_trigger.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/virtual_bench_usb.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/virtual_core.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/virtual_fixture_drive.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/virtual_names.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/conftest.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/equipment/.env.example +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/equipment/test_core_contract.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/equipment/test_preflight.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/fixtures/hardware.virtual.toml +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/.env.example +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/.env.virtual.example +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/README.ja.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/README.md +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/__init__.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/boards.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/conftest.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/firmware.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/flash.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/hardware.example.toml +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/hardware.resolved.example.toml +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/record.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/.gitignore +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.27+ec1df99-0.0.27.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.32+1491c13-0.0.31-20261016T133559.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.32+672bf7b-0.0.32-20261016T164655.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131458.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131510.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131526.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131532.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131656.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131703.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131708.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132050.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132057.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132104.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.36+f8ac55a-0.0.36-20261022T160307.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.36+f8ac55a-0.0.36-20261022T161655.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.37+1031feb-0.0.37-20261023T214002.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.38+7c158ff-0.0.38-20261027T081156.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.39+1ad47c7-0.0.39-20261027T182907.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.39+2c0c41f-0.0.39-20261027T174907.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.39+9317805-0.0.39-20261027T191153.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.39+a75fd45-0.0.39-20261027T205055.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201038.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201057.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201058.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201059.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896__crash_at_2106_s_-0.0.39-20261027T204608.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.39+d4d323c-0.0.39-20261028T190815.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/9489dd2ae0953650-0.0.39+d4d323c-0.0.39-20261028T191854.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/e8f60ae84e28-0.0.39+1ad47c7-0.0.39-20261027T181116.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/e8f60ae84e28-0.0.39+1ad47c7-0.0.39-20261027T181812.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/e8f60ae84e28-0.0.39+1ad47c7-0.0.39-20261027T182903.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/e8f60ae84e28-0.0.39+62463f2-0.0.39-20261029T145541.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/e8f60ae84e28-0.0.39+9317805-0.0.39-20261027T191150.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/e8f60ae84e28-0.0.39+a75fd45-0.0.39-20261028T190803.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/e8f60ae84e28-0.0.39+b7fbdf9-0.0.39-20261027T191727.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/e8f60ae84e28-0.0.39+b7fbdf9-0.0.39-20261027T204611.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/e8f60ae84e28-0.0.39+bb371fb-0.0.39-20261028T191811.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/e8f60ae84e28-0.0.39+bb371fb-0.0.39-20261028T191849.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/e8f60ae84e28-0.0.44+34c0b0b-0.0.44-20261104T190820.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/e8f60ae84e28-0.0.44+34c0b0b-0.0.44-20261104T190903.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/e8f60ae84e28-unknown-0.0.44-20261104T190857.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.26+4fad559-0.0.26.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32+1491c13-0.0.31-20261016T133501.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32+672bf7b-0.0.32-20261016T164559.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32-0.0.31-20261016T130922.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32-0.0.31-20261016T131024.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.36+12e1222-0.0.37-20261023T214016.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.36+f8ac55a-0.0.36-20261022T160134.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.37+1031feb-0.0.37-20261023T214230.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.38+7c158ff-0.0.38-20261027T081159.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+2c0c41f-0.0.39-20261027T174933.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+9317805-0.0.39-20261027T191154.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+b7fbdf9-0.0.39-20261027T204617.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+bb371fb-0.0.39-20261028T191816.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.25-0.0.26.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+e877631-0.0.26.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27+ac80e07-0.0.27.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27+ec1df99-0.0.27.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27-0.0.27.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.28-0.0.28.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb-0.0.37-20261023T220718.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb-0.0.37-20261023T221106.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb__panic_at_11_s_-0.0.37-20261023T220856.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb__panic_at_11_s_-0.0.37-20261023T220901.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb__panic_at_11_s_-0.0.37-20261023T220915.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.26.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.37-20261023T214102.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.39-20261028T190818.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0e31108-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0e31108-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0e31108-0.0.44+34c0b0b-0.0.44-20261104T190941.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0e343c6-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0e343c6-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0e343c6-0.0.27+ec1df99-0.0.27.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0e343c6-0.0.28+ffe4eb1-0.0.28.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0e343c6-0.0.28-0.0.28.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+0f013b7-0.0.28.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+1c940ca-0.0.28.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+4ef21db+4ef21db-dirty-0.0.28.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+68d9694-0.0.28.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+ec38b1d-0.0.28.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+ffe4eb1-0.0.28.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28-0.0.28.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.36+f8ac55a-0.0.36-20261022T160503.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.37+1031feb-0.0.37-20261023T214005.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.38+7c158ff-0.0.38-20261027T081145.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.38+7c158ff-0.0.38-20261027T081152.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+1ad47c7-0.0.39-20261027T180716.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+1ad47c7-0.0.39-20261027T182855.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+1ad47c7-0.0.39-20261027T183107.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f-0.0.39-20261027T174908.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f__task-wdt_at_18_s_-0.0.39-20261027T175743.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f__task-wdt_at_18_s_-0.0.39-20261027T175815.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f__task-wdt_at_33_s_-0.0.39-20261027T175634.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f__task-wdt_at_431_s_-0.0.39-20261027T175709.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+62463f2-0.0.39-20261029T145536.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+7445bee-0.0.39-20261027T155413.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+9317805-0.0.39-20261027T191146.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+b7fbdf9-0.0.39-20261027T191724.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+bb371fb-0.0.39-20261028T191806.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+bb371fb-0.0.39-20261028T191843.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+d4d323c-0.0.39-20261028T190809.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-unknown-0.0.36-20261022T160222.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-unknown-0.0.39-20261027T155301.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/results/esp32-series-30eda0ea068b-unknown-0.0.39-20261027T155340.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/test_harness.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/hw/test_probe.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/spec/DOCS_SHA256 +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/spec/oep-v1.toml +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/spec_names.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_address.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_capabilities.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_capture.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_capture_blocks.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_capture_generation_rules.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_capture_rules.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_cobs.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_allocator.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_analog.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_analog_payload.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_arm_adi.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_arm_adi_blocks.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_attach.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_blocks.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_capture_group.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_capture_group_geometry.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_capture_metadata.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_capture_serial.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_capture_timeline.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_capture_timeline_lifecycle.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_clock.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_core_fixed_fields.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_core_smoke.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_corr.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_cut.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_data.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_debug.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_dependencies.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_discovery.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_dmseq.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_dmseq_target.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_execution_order.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_exhausted.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_fixture_metadata.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_force_hw.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_gpio.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_gpio_lifecycle.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_host_core.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_host_critical_calls.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_host_deadline.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_host_notifications.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_host_requests.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_host_resend.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_host_tlv.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_host_values.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_host_wait.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_i2c.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_interface_smoke.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_interfaces.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_lease.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_link_routes.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_link_transfers.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_logic.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_mailbox.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_notification_output.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_notification_retention.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_notification_sequence.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_oep_declarations.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_oep_smoke.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_outcomes.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_pipeline.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_port_speed.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_port_speed_execution.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_port_speed_lifecycle.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_probe_input.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_reconnect.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_recovery.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_recovery_races.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_refusal_order.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_registered_ops.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_replay_pressure.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_replay_records_optional.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_reset.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_resources.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_response_race.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_restart.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_retention.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_retention_lifecycle.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_retry.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_reviewed_pins.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_routes.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_run.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_scan.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_scan_options.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_selected_metadata.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_serial.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_session_loss.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_session_smoke.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_spec_guard.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_spi.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_step.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_stream.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_subscriptions.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_tcp.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_tcp_peers.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_tcp_recovery.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_tlv_requests.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_uart.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_uart_stream.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_usb.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_wire_options.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_conformance_writer_lease.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_console_queue_and_reset_settle.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_core_rules.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_debug_attach.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_debug_rules.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_describe_unset_idle_rules.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_exact_payload_rules.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_extension_patterns.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_fixture_controllers.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_fixture_link_settings_rules.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_fixture_out.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_fixture_targets.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_flash_console.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_gpio_drive_and_serve_options.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_hardware.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_hid_stream.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_host_boot_lifecycle.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_host_recovery_rules.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_host_rules_bounds_options.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_host_rules_waits_lines.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_host_wait_bound.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_interfaces.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_link_drop.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_link_host.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_link_serial.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_linktest.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_literals.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_memo.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_minimal_ops.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_no_resume.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_open_extensions.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_passthrough.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_pins.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_plan.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_port_speed.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_probe_log.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_request_tails.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_request_validation_rules.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_restart.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_resubscribe_after_reopen.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_rvswd_rest.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_session.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_settings.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_spec_sections.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_spec_vectors.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_state_resource_rules.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_stimulus.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_target_parts.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_tcp_discovery.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_tlv_reader_rules.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_trace_capture.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_trace_common.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_trace_console.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_trace_core.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_trace_core_names.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_trace_debug.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_trace_fixture.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_trace_fixture_drive.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_trace_link.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_trace_plan.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_trace_restart.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_trace_transports.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_transport_session_rules.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_usb_identity.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_usb_stream.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_analog_roles.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_announce.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_capture.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_capture_changing_trigger.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_capture_channel_time.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_capture_format_2.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_capture_initial_trigger_time.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_capture_lifetime.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_capture_notifications.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_capture_one_shot_time.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_capture_options.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_capture_pretrigger.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_capture_query.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_capture_rates.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_capture_requests.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_capture_resume_calibration.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_capture_trigger_modes.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_capture_trigger_source.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_capture_trigger_source_more.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_capture_waiting.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_pin_constraints.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_rules_core.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_rules_ops_lines.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_serve_reboot.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_serve_tcp_connections.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_spec.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_targets.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_core.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_core_bool.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_wire_hold.py +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/vectors/SPEC_COMMIT +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/vectors/SPEC_SHA256 +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/vectors/capture_formats.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/vectors/checks.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/vectors/cobs.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/vectors/confirm.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/vectors/core_extensions.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/vectors/core_lifecycle.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/vectors/core_policy.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/vectors/discovery.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/vectors/headers.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/vectors/interface_boundaries.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/vectors/interface_profiles.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/vectors/logic_layout.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/vectors/ops.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/vectors/ops_encoding.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/vectors/refusals.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/vectors/sessions.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/vectors/settings_file.json +0 -0
- {oep_client_python-0.0.48 → oep_client_python-0.0.49}/udev/70-oep-probe.rules +0 -0
|
@@ -2,6 +2,30 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.0.49
|
|
6
|
+
- (EN) Changed (virtual bench): a stream follows the probe's clock as a real probe's does. Logic samples are made at once
|
|
7
|
+
with numpy (a second of 1 MS/s on 2 lines: format 0 0.04 s instead of 4.6 s, format 1 about 0.2 to 0.3 s), sample by
|
|
8
|
+
sample only where a track needs it (the glitch filter, the external clock, analog, a test's own value()). The samples
|
|
9
|
+
the clock has taken and the bench has not made yet count as held in its stream buffer: a tick makes a bounded number
|
|
10
|
+
and catches up over ticks; stop makes every sample up to the stop; behind by more than the stream buffer holds, the
|
|
11
|
+
track stops in error as a probe whose buffer overflowed (state 6, error storage). Before, on a busy host the stream ran
|
|
12
|
+
late and ended before the stop: a heading placed by the probe's clock fell past its end (4 cores with 8 busy
|
|
13
|
+
processes, during=steps at 1 MS/s on 2 lines: 8 of 8 by 0.5 to 1.1 s; now 0 of 8, none lost).
|
|
14
|
+
- (JA) 変更(仮想ベンチ): stream は、実機と同じくプローブの時計に従う。ロジックの標本は numpy でまとめて作る(2 本・
|
|
15
|
+
1 MS/s の 1 秒分が、format 0 で 4.6 s から 0.04 s、format 1 で約 0.2〜0.3 s)。1 標本ずつ作るのは、そうしか作れない track
|
|
16
|
+
だけ(グリッチフィルタ、外部クロック、アナログ、試験が差し替えた value())。時計が取ったのにまだ作っていない標本は、
|
|
17
|
+
ストリーム用のバッファに持っている分とみなす。tick は上限つきで作り、何回かで追いつく。stop は止めた時刻までの標本を
|
|
18
|
+
全部作る。遅れがストリーム用のバッファを超えたら、バッファのあふれた実機と同じく track を error で止める(state 6、
|
|
19
|
+
error storage)。これまでは、混んだ host で stream が遅れたまま止めた時刻より前で終わり、プローブの時計で置いた見出しが
|
|
20
|
+
その後になった(4 コアに 8 本の空回り、during=steps で 2 本・1 MS/s: 8 回中 8 回、0.5〜1.1 s。直した後は 8 回中 0 回、
|
|
21
|
+
欠損なし)。
|
|
22
|
+
- (EN) Fixed (0.0.48): a format 1 stream put together on disk failed with a KeyError (a segment's position): the loop
|
|
23
|
+
joining a segment's lines bit by bit reused the name of the loop over the segments, so the next segment taken was the
|
|
24
|
+
wrong one. A format 1 stream on disk is tested now.
|
|
25
|
+
- (JA) 修正(0.0.48): ディスクで組み立てる format 1 の stream が KeyError(区画の位置)で落ちていた。区画の線を 1 bit ずつ
|
|
26
|
+
つなぐループが、区画を回すループと同じ変数名を使っていて、次に取る区画を取り違えていた。ディスクで組み立てる format 1 の
|
|
27
|
+
stream の試験を足した。
|
|
28
|
+
|
|
5
29
|
## 0.0.48
|
|
6
30
|
- (EN) Fixed: a stream's segments join bit by bit, so a stream is one part unless data was lost. A segment whose
|
|
7
31
|
samples did not fill whole bytes of each line (the ESP32-P4's 65332 samples of 2 lines at 5 and 10 MS/s) started a new
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: oep-client-python
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.49
|
|
4
4
|
Summary: Open Embedded Probe (OEP) v1 host: serial / USB / TCP transports, the session rules, the standard interfaces, and a virtual bench
|
|
5
5
|
Project-URL: Homepage, https://github.com/Open-Embedded-Probe/oep-client-python
|
|
6
6
|
Project-URL: Repository, https://github.com/Open-Embedded-Probe/oep-client-python
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "oep-client-python"
|
|
7
|
-
version = "0.0.
|
|
7
|
+
version = "0.0.49"
|
|
8
8
|
description = "Open Embedded Probe (OEP) v1 host: serial / USB / TCP transports, the session rules, the standard interfaces, and a virtual bench"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -1660,9 +1660,9 @@ class _Spool:
|
|
|
1660
1660
|
self._open(p, x)
|
|
1661
1661
|
data = bytes(self.pending[p - self.at:nxt - self.at])
|
|
1662
1662
|
cols = _segment_columns(self.cap, data, samples, len(self.names), self.cfg)
|
|
1663
|
-
for
|
|
1663
|
+
for c, (col, f, ev) in enumerate(zip(cols, self.cur["files"], self.cur["events"])):
|
|
1664
1664
|
if isinstance(col, bytes): # joined bit by bit: a segment need not end on a whole byte
|
|
1665
|
-
self.cur["carry"][
|
|
1665
|
+
self.cur["carry"][c] = _write_bits(f, self.cur["carry"][c], col, samples)
|
|
1666
1666
|
else:
|
|
1667
1667
|
ev[0].append(col[0] + self.cur["samples"] // col[4])
|
|
1668
1668
|
ev[1].append(col[1])
|
{oep_client_python-0.0.48 → oep_client_python-0.0.49}/src/oep_client/virtual_bench_capture.py
RENAMED
|
@@ -82,11 +82,11 @@ BITS = 12 # the analog value's b (layout)
|
|
|
82
82
|
BLOCK_TOP = 4096 # its own: the longest block L it makes (§1.3)
|
|
83
83
|
STREAM_BUFFER_BYTES = 1 << 20 # its own: what a stream holds unsent, said in the answer (stream_buffer, §3.3)
|
|
84
84
|
UNKNOWN_END = 1 << 62 # streaming format 1: a segment dropped whole whose end is not taken yet
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
#
|
|
88
|
-
#
|
|
89
|
-
#
|
|
85
|
+
FAST_A_TICK = 1 << 17 # streaming: the most one tick makes when numpy makes them at once (a_tick)
|
|
86
|
+
BLOCKS_A_TICK = 1 << 14 # streaming: the most samples one tick makes sample by sample - catching up on all
|
|
87
|
+
# the time passed at once fell further behind every tick until the bench answered
|
|
88
|
+
# nothing (wireskein: format 1 at 2 MHz x 4 lines; format 0 at 1 MHz x 2 lines,
|
|
89
|
+
# stop answered after 12.8 s): it catches up over ticks (held_most)
|
|
90
90
|
|
|
91
91
|
|
|
92
92
|
TIMEBASE_HZ = 100_000_000 # its own: format 3's delta tick (the answer's timebase, §3.8)
|
|
@@ -206,6 +206,38 @@ def logic_block(raw: list[list[int]], events: list[list[int]], ds: list[int], be
|
|
|
206
206
|
return fallback + start + struct.pack("<I", len(ev)) + body + b"".join(ev)
|
|
207
207
|
|
|
208
208
|
|
|
209
|
+
def logic_block_np(np, raw: list, events: list, ds: list[int], before: list[int], L: int) -> bytes:
|
|
210
|
+
"""logic_block with each channel's levels a numpy array: the same bytes, made at once."""
|
|
211
|
+
r = len((raw + events)[0])
|
|
212
|
+
E = len(events)
|
|
213
|
+
fb, ev = [], []
|
|
214
|
+
for e, lv in enumerate(events):
|
|
215
|
+
d = ds[e]
|
|
216
|
+
q = -(-r // d)
|
|
217
|
+
prev = np.concatenate([np.array([before[e]], np.uint8), lv[:-1]])
|
|
218
|
+
changed = np.zeros(q * d, np.int64)
|
|
219
|
+
changed[:r] = lv != prev
|
|
220
|
+
counts = changed.reshape(q, d).sum(axis=1)
|
|
221
|
+
last = lv[np.minimum((np.arange(q) + 1) * d, r) - 1].astype(np.int64)
|
|
222
|
+
t = np.nonzero(counts)[0]
|
|
223
|
+
rec = np.zeros(len(t), dtype=[("t", "<u2"), ("e", "u1"), ("v", "u1")])
|
|
224
|
+
rec["t"], rec["e"], rec["v"] = t, e, (last[t] << 7) | np.minimum(counts[t], 127)
|
|
225
|
+
if len(t) * 4 > L // 8:
|
|
226
|
+
fb.append(e)
|
|
227
|
+
else:
|
|
228
|
+
ev.append(rec.tobytes())
|
|
229
|
+
nb = (E + 7) // 8
|
|
230
|
+
fallback = sum(1 << e for e in fb).to_bytes(nb, "little")
|
|
231
|
+
start = sum(before[e] << e for e in range(E)).to_bytes(nb, "little")
|
|
232
|
+
cols = raw + [events[e] for e in fb]
|
|
233
|
+
body = b""
|
|
234
|
+
if cols:
|
|
235
|
+
bits = np.stack(cols, axis=1).astype(np.uint8)
|
|
236
|
+
body = np.packbits(bits.reshape(-1), bitorder="little").tobytes()
|
|
237
|
+
n_ev = sum(len(x) // 4 for x in ev)
|
|
238
|
+
return fallback + start + struct.pack("<I", n_ev) + body + b"".join(ev)
|
|
239
|
+
|
|
240
|
+
|
|
209
241
|
def analog_part(values: list[int], kind: int, d: int, b: int) -> bytes:
|
|
210
242
|
"""One channel's part of a format 2 block (§1.4): packed the r values of b bits; else for every interval of d
|
|
211
243
|
(the last one partial) min and max (b bits each) and / or the sum (b + ceil(log2 d) bits), in that order - bits by
|
|
@@ -230,6 +262,15 @@ def analog_part(values: list[int], kind: int, d: int, b: int) -> bytes:
|
|
|
230
262
|
return acc.to_bytes((at + 7) // 8, "little")
|
|
231
263
|
|
|
232
264
|
|
|
265
|
+
class _wave:
|
|
266
|
+
"""A logic wave: wave(i, rate) for one sample, wave.many(np, samples, rate) for an array of them (numpy)."""
|
|
267
|
+
def __init__(self, one, many):
|
|
268
|
+
self.one, self.many = one, many
|
|
269
|
+
|
|
270
|
+
def __call__(self, i, rate):
|
|
271
|
+
return self.one(i, rate)
|
|
272
|
+
|
|
273
|
+
|
|
233
274
|
def logic_wave(spec: str):
|
|
234
275
|
"""A logic channel's waveform instead of the counter's bit: `counter`; `quiet[:LEVEL]` (never changes, default
|
|
235
276
|
high); `square:PERIOD` (samples); `uart:BAUD[:TEXT]` - 8N1 characters of TEXT (default "OEP\\n") one after another
|
|
@@ -239,10 +280,10 @@ def logic_wave(spec: str):
|
|
|
239
280
|
return None
|
|
240
281
|
if kind == "quiet":
|
|
241
282
|
level = int(args[0]) if args else 1
|
|
242
|
-
return lambda i, rate: level
|
|
283
|
+
return _wave(lambda i, rate: level, lambda np, i, rate: np.full(len(i), level, np.uint8))
|
|
243
284
|
if kind == "square":
|
|
244
285
|
half = max(1, int(args[0]) // 2)
|
|
245
|
-
return lambda i, rate: (i // half) & 1
|
|
286
|
+
return _wave(lambda i, rate: (i // half) & 1, lambda np, i, rate: ((i // half) & 1).astype(np.uint8))
|
|
246
287
|
if kind == "uart":
|
|
247
288
|
baud = int(args[0])
|
|
248
289
|
text = (args[1] if len(args) > 1 else "OEP\n").encode()
|
|
@@ -255,7 +296,14 @@ def logic_wave(spec: str):
|
|
|
255
296
|
if at <= 8:
|
|
256
297
|
return text[char % len(text)] >> (at - 1) & 1 # LSB first
|
|
257
298
|
return 1 # stop, idle
|
|
258
|
-
|
|
299
|
+
|
|
300
|
+
def many(np, i, rate): # the same, for an array of samples
|
|
301
|
+
r = Fraction(rate) # the track's rate is exact: so is the bit time
|
|
302
|
+
bit = (i * (baud * r.denominator)) // r.numerator
|
|
303
|
+
char, at = np.divmod(bit, 20)
|
|
304
|
+
data = (np.frombuffer(text, np.uint8)[char % len(text)] >> np.clip(at - 1, 0, 7)) & 1
|
|
305
|
+
return np.where(at == 0, 0, np.where(at <= 8, data, 1)).astype(np.uint8)
|
|
306
|
+
return _wave(uart, many)
|
|
259
307
|
raise ValueError(f"logic wave {spec!r}: counter, quiet[:LEVEL], square:PERIOD or uart:BAUD[:TEXT]")
|
|
260
308
|
|
|
261
309
|
|
|
@@ -702,8 +750,39 @@ class VirtualCapture:
|
|
|
702
750
|
slot = "H" if self.width == 2 * self.channels else "I"
|
|
703
751
|
return b"".join(struct.pack(f"<{self.channels}{slot}", *(self.value(k, first + i) for k in self.analog_roles))
|
|
704
752
|
for i in range(n))
|
|
753
|
+
levels = self._levels(first, n)
|
|
754
|
+
if levels is not None: # numpy: the samples at once
|
|
755
|
+
import numpy as np
|
|
756
|
+
bits = np.zeros((n, self.width), np.uint8)
|
|
757
|
+
bits[:, :] = np.stack(levels[:self.width], axis=1)
|
|
758
|
+
return np.packbits(bits.reshape(-1), bitorder="little").tobytes()
|
|
705
759
|
return pack_samples([sum(self.value(k, first + i) << k for k in range(self.width)) for i in range(n)], self.width)
|
|
706
760
|
|
|
761
|
+
def _levels(self, first: int, n: int):
|
|
762
|
+
"""Logic channels 0 .. max(width, channels) - 1 at samples first .. first + n - 1 as numpy arrays, as value() gives them; None
|
|
763
|
+
where only value() can (numpy missing, the glitch filter, the external clock, a wave without its array form, a
|
|
764
|
+
value() a test put on the track).
|
|
765
|
+
Python made a sample a microsecond or more: a bench behind 1 MS/s on a busy host."""
|
|
766
|
+
ns = max(self.glitch_ns.values(), default=0)
|
|
767
|
+
if self.analog or self.clock is not None or n <= 0 or (ns and -(-ns * self.rate // 1_000_000_000) > 1) or \
|
|
768
|
+
"value" in vars(self): # a test's own value(): only it says
|
|
769
|
+
return None
|
|
770
|
+
try:
|
|
771
|
+
import numpy as np
|
|
772
|
+
except ImportError:
|
|
773
|
+
return None
|
|
774
|
+
i = np.arange(first, first + n, dtype=np.int64)
|
|
775
|
+
out = []
|
|
776
|
+
for k in range(max(self.width, self.channels)): # format 1: the channels, its w apart (0 or less)
|
|
777
|
+
wave = self.waves.get(self.logic_roles[k]) if k < len(self.logic_roles) else None
|
|
778
|
+
if wave is None:
|
|
779
|
+
out.append(((i >> k) & 1).astype(np.uint8))
|
|
780
|
+
elif isinstance(wave, _wave):
|
|
781
|
+
out.append(wave.many(np, i, self.rate))
|
|
782
|
+
else:
|
|
783
|
+
return None
|
|
784
|
+
return out
|
|
785
|
+
|
|
707
786
|
def _blocks(self, first: int, n: int, contiguous: bool, segment_start: bool = True) -> bytes:
|
|
708
787
|
"""A format 1 segment (§1.3): blocks of L from its sample 0; start_level the sample before when it is
|
|
709
788
|
contiguous in the generation, else the block's first. Format 2: _analog_blocks; format 3: _timed."""
|
|
@@ -715,10 +794,18 @@ class VirtualCapture:
|
|
|
715
794
|
raw = [k for k in roles if self.carriages.get(k, (CARRIAGE["raw"], 1))[0] == CARRIAGE["raw"]]
|
|
716
795
|
ev = [k for k in roles if k not in raw]
|
|
717
796
|
ds = [self.carriages[k][1] for k in ev]
|
|
797
|
+
levels = self._levels(first, n) # numpy: the samples and the blocks at once
|
|
718
798
|
out = bytearray()
|
|
719
799
|
for b in range(0, n, self.block):
|
|
720
800
|
r = min(self.block, n - b)
|
|
721
801
|
at = first + b
|
|
802
|
+
if levels is not None:
|
|
803
|
+
before = [int(levels[k][b - 1]) if b else (self.value(k, at - 1) if contiguous else int(levels[k][0]))
|
|
804
|
+
for k in ev]
|
|
805
|
+
import numpy as np
|
|
806
|
+
out += logic_block_np(np, [levels[k][b:b + r] for k in raw], [levels[k][b:b + r] for k in ev], ds,
|
|
807
|
+
before, self.block)
|
|
808
|
+
continue
|
|
722
809
|
before = [self.value(k, at - 1) if (b or contiguous) else self.value(k, at) for k in ev]
|
|
723
810
|
out += logic_block([[self.value(k, at + i) for i in range(r)] for k in raw],
|
|
724
811
|
[[self.value(k, at + i) for i in range(r)] for k in ev], ds, before, self.block)
|
|
@@ -1018,22 +1105,43 @@ class VirtualCapture:
|
|
|
1018
1105
|
if len(self.segs) >= self.segments_max:
|
|
1019
1106
|
self.state = STATE["paused"]
|
|
1020
1107
|
break
|
|
1108
|
+
elif self.mode == MODE["streaming"] and due - self.produced > self.held_most():
|
|
1109
|
+
events += self.overflow() # behind by more than its stream holds (below)
|
|
1021
1110
|
elif self.mode == MODE["streaming"] and self.format in PIECES:
|
|
1022
1111
|
self._stream_blocks(due, whole=True)
|
|
1023
1112
|
elif self.mode == MODE["streaming"]:
|
|
1024
|
-
|
|
1025
|
-
n = min((due - self.produced) // per_byte * per_byte, BLOCKS_A_TICK)
|
|
1026
|
-
if n > 0:
|
|
1027
|
-
self.data += self._pack(self.produced, n)
|
|
1028
|
-
self.produced += n
|
|
1029
|
-
taken = self.produced - self.capture_begin
|
|
1030
|
-
first = self.first_segment_samples or self.samples
|
|
1031
|
-
complete = 0 if taken < first else 1 + (taken - first) // self.samples
|
|
1032
|
-
self.serial_done = complete & 0xFFFFFFFF
|
|
1033
|
-
done_samples = 0 if not complete else first + (complete - 1) * self.samples
|
|
1034
|
-
self.stream_committed_bytes = self.bytes_of(done_samples)
|
|
1113
|
+
self._stream_samples(due)
|
|
1035
1114
|
return events
|
|
1036
1115
|
|
|
1116
|
+
# Streaming follows the clock as a probe's does: sample i is the one taken at t0 + i / rate, and the samples the
|
|
1117
|
+
# clock has taken that the bench has not made yet are as a probe's samples held unsent in its stream buffer. A tick
|
|
1118
|
+
# makes a bounded number (the bench keeps answering), so it may be behind for a while and catch up; stop makes every
|
|
1119
|
+
# sample up to the stop (a probe sends all it holds); behind by more than the stream buffer holds, the track stops
|
|
1120
|
+
# in error as a probe whose buffer overflowed (state 6, error storage) - never a stream that silently ran late
|
|
1121
|
+
# (a section placed by the probe's clock past the stream's end, wireskein on a busy host).
|
|
1122
|
+
def held_most(self) -> int:
|
|
1123
|
+
"""The samples its stream buffer holds (stream_buffer, §3.3), at format 0's bytes a sample."""
|
|
1124
|
+
return STREAM_BUFFER_BYTES // max(1, self.width) if self.analog else STREAM_BUFFER_BYTES * 8 // max(1, self.width)
|
|
1125
|
+
|
|
1126
|
+
def a_tick(self) -> int:
|
|
1127
|
+
"""The most samples one tick makes: more when numpy makes them at once (a sample a microsecond or more in
|
|
1128
|
+
Python, about a hundredth of that at once)."""
|
|
1129
|
+
return FAST_A_TICK if self._levels(self.produced, 1) is not None else BLOCKS_A_TICK
|
|
1130
|
+
|
|
1131
|
+
def _stream_samples(self, due: int, most: int | None = None) -> None:
|
|
1132
|
+
"""Format 0 streaming: the samples up to `due`, at most `most` (a_tick() by default), whole bytes only."""
|
|
1133
|
+
per_byte = 1 if self.analog else 8 // math.gcd(self.width, 8) # whole bytes only (§2.2)
|
|
1134
|
+
n = min((due - self.produced) // per_byte * per_byte, self.a_tick() if most is None else most)
|
|
1135
|
+
if n > 0:
|
|
1136
|
+
self.data += self._pack(self.produced, n)
|
|
1137
|
+
self.produced += n
|
|
1138
|
+
taken = self.produced - self.capture_begin
|
|
1139
|
+
first = self.first_segment_samples or self.samples
|
|
1140
|
+
complete = 0 if taken < first else 1 + (taken - first) // self.samples
|
|
1141
|
+
self.serial_done = complete & 0xFFFFFFFF
|
|
1142
|
+
done_samples = 0 if not complete else first + (complete - 1) * self.samples
|
|
1143
|
+
self.stream_committed_bytes = self.bytes_of(done_samples)
|
|
1144
|
+
|
|
1037
1145
|
def _stream_geometry(self, rel: int) -> tuple[int, int, int]:
|
|
1038
1146
|
"""Streaming: the segment holding sample `rel` (from the retained start) -> (its number, first sample, size)."""
|
|
1039
1147
|
first = self.first_segment_samples or self.samples
|
|
@@ -1046,7 +1154,7 @@ class VirtualCapture:
|
|
|
1046
1154
|
"""Format 1 streaming: the blocks the clock has taken - each whole (a block counts its events first, §1.3), at
|
|
1047
1155
|
most BLOCKS_A_TICK samples a call; `whole` False at stop: the block being taken ends there, short."""
|
|
1048
1156
|
if whole:
|
|
1049
|
-
due = min(due, self.produced +
|
|
1157
|
+
due = min(due, self.produced + self.a_tick())
|
|
1050
1158
|
else: # stop: only the block begun, not all the time behind
|
|
1051
1159
|
rel = self.produced - self.capture_begin
|
|
1052
1160
|
_, at, size = self._stream_geometry(rel)
|
|
@@ -1104,6 +1212,18 @@ class VirtualCapture:
|
|
|
1104
1212
|
index = self.first_trigger_index if self.first_trigger_index < partial else NONE
|
|
1105
1213
|
segment = self._segment(partial, index, flags=FLAG["short"])
|
|
1106
1214
|
events.append(bytes([EVENT["segment"]]) + segment.pack())
|
|
1215
|
+
if self.state == STATE["capturing"] and self.mode == MODE["streaming"] and now_ms is not None:
|
|
1216
|
+
due = self.kept(int((now_ms - self.started_ms) * self.rate / 1000)) # every sample up to the stop: the
|
|
1217
|
+
if due - self.produced > self.held_most(): # stream holds them (tick's rules, above)
|
|
1218
|
+
return events + self.overflow()
|
|
1219
|
+
while self.state == STATE["capturing"]:
|
|
1220
|
+
before = self.produced
|
|
1221
|
+
if self.format in PIECES:
|
|
1222
|
+
self._stream_blocks(due, whole=True)
|
|
1223
|
+
else:
|
|
1224
|
+
self._stream_samples(due, most=due)
|
|
1225
|
+
if self.produced == before:
|
|
1226
|
+
break
|
|
1107
1227
|
if self.state == STATE["capturing"] and self.mode == MODE["streaming"] and self.format in PIECES:
|
|
1108
1228
|
if now_ms is not None: # the taken samples, a short last block
|
|
1109
1229
|
self._stream_blocks(self.kept(int((now_ms - self.started_ms) * self.rate / 1000)), whole=False)
|
|
@@ -115,6 +115,15 @@ def test_during_is_for_a_stream_in_place_of_seconds():
|
|
|
115
115
|
acquire.Request([("A", "GPIO10")], 1_000_000, 100, during=lambda wait: None, **kw)
|
|
116
116
|
|
|
117
117
|
|
|
118
|
+
def test_a_format_1_stream_on_disk(probe, tmp_path):
|
|
119
|
+
"""Streamed in format 1, raw and changes lines, put together on disk as it comes: every segment joined in order."""
|
|
120
|
+
for resolution in ({"B": 1}, {"A": 4, "B": 1}):
|
|
121
|
+
req = acquire.Request([("A", "GPIO10"), ("B", "GPIO11")], 1_000_000, 0, mode="stream", seconds=0.3,
|
|
122
|
+
resolution=resolution, spool_dir=str(tmp_path))
|
|
123
|
+
res = acquire.capture_at(probe(), req)
|
|
124
|
+
assert res.complete and len(res.parts) == 1, resolution
|
|
125
|
+
|
|
126
|
+
|
|
118
127
|
def test_format_1_lines_as_their_changes(probe):
|
|
119
128
|
req = acquire.Request([("A", "GPIO10"), ("B", "GPIO11")], 20_000_000, 1000, resolution={"B": 1})
|
|
120
129
|
res = acquire.capture_at(probe(), req)
|
{oep_client_python-0.0.48 → oep_client_python-0.0.49}/tests/test_virtual_bench_capture_formats.py
RENAMED
|
@@ -297,10 +297,10 @@ def test_streaming_answer_says_its_stream_buffer():
|
|
|
297
297
|
assert lc.configure(rate=10_000_000, samples=100).stream_buffer is None # one-shot: not said
|
|
298
298
|
|
|
299
299
|
|
|
300
|
-
def
|
|
301
|
-
"""Streaming format 0: a tick makes
|
|
302
|
-
|
|
303
|
-
|
|
300
|
+
def test_format_0_streaming_catches_up_over_ticks_and_stop_makes_every_sample():
|
|
301
|
+
"""Streaming format 0: a tick makes a bounded number of samples (a_tick), so a bench behind a fast rate still
|
|
302
|
+
answers and catches up over ticks; stop makes every sample up to the stop (a probe sends what its stream buffer
|
|
303
|
+
holds) - before, the stream ran late and ended before the stop (wireskein: a section past its end on a busy host)."""
|
|
304
304
|
from oep_client import virtual_bench_capture as vbc
|
|
305
305
|
ep, hst, lc, clock = bench()
|
|
306
306
|
planned(hst, lc, 2)
|
|
@@ -310,12 +310,30 @@ def test_format_0_streaming_makes_a_tick_at_most_and_stop_answers():
|
|
|
310
310
|
cap = ep.captures[lc.fn]
|
|
311
311
|
clock.t += 2_000 # 2 s (within the lease): two million samples due
|
|
312
312
|
cap.tick(clock.t)
|
|
313
|
-
assert cap.produced ==
|
|
313
|
+
assert cap.produced == cap.a_tick() < 2_000_000
|
|
314
314
|
lc.stop()
|
|
315
|
-
assert cap.produced
|
|
315
|
+
assert cap.produced == 2_000_000 # all of them, at the stop
|
|
316
316
|
assert lc.status().state == c.STATE["configured"]
|
|
317
317
|
|
|
318
318
|
|
|
319
|
+
def test_streaming_behind_more_than_its_buffer_stops_in_error(monkeypatch):
|
|
320
|
+
"""Behind by more than its stream buffer holds, the track stops in error as a probe whose buffer overflowed: never a
|
|
321
|
+
stream that silently ran late."""
|
|
322
|
+
from oep_client import virtual_bench_capture as vbc
|
|
323
|
+
monkeypatch.setattr(vbc, "STREAM_BUFFER_BYTES", 1 << 12) # 16384 samples of 2 lines: 16 ms at 1 MS/s
|
|
324
|
+
ep, hst, lc, clock = bench()
|
|
325
|
+
planned(hst, lc, 2)
|
|
326
|
+
lc.configure(rate=1_000_000, mode=c.STREAMING)
|
|
327
|
+
lc.subscribe(16384, 20)
|
|
328
|
+
lc.start()
|
|
329
|
+
cap = ep.captures[lc.fn]
|
|
330
|
+
assert cap.held_most() == 16384
|
|
331
|
+
clock.t += 30 # more than the buffer's time, in one go
|
|
332
|
+
cap.tick(clock.t)
|
|
333
|
+
st = lc.status()
|
|
334
|
+
assert st.state == c.STATE["error"]
|
|
335
|
+
|
|
336
|
+
|
|
319
337
|
def test_format_1_with_every_channel_events_has_w_and_c_0():
|
|
320
338
|
ep, hst, lc, clock = bench()
|
|
321
339
|
roles = planned(hst, lc, 3)
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"""The virtual bench's logic samples made at once with numpy are the ones value() gives, sample by sample: the counter,
|
|
2
|
+
the logic waves, every w, any first sample and length; and a second of 1 MS/s on 2 lines takes well under a second."""
|
|
3
|
+
|
|
4
|
+
import random
|
|
5
|
+
import time
|
|
6
|
+
from fractions import Fraction
|
|
7
|
+
|
|
8
|
+
import pytest
|
|
9
|
+
|
|
10
|
+
from oep_client import virtual_bench_capture as vbc
|
|
11
|
+
|
|
12
|
+
pytest.importorskip("numpy")
|
|
13
|
+
|
|
14
|
+
WAVES = ["quiet", "quiet:0", "square:6", "square:7", "uart:115200", "uart:9600:Hi", "uart:1000000:OEP\n"]
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def track(width, channels, rate, waves):
|
|
18
|
+
cap = vbc.VirtualCapture({0, 3}, {width}, 1, 1 << 30)
|
|
19
|
+
cap.width, cap.channels, cap.rate, cap.format = width, channels, Fraction(rate), vbc.FORMAT["raw"] \
|
|
20
|
+
if "raw" in vbc.FORMAT else 0
|
|
21
|
+
cap.logic_roles = tuple(range(channels))
|
|
22
|
+
cap.waves = {k: vbc.logic_wave(w) for k, w in waves.items()}
|
|
23
|
+
return cap
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def slow(cap, first, n):
|
|
27
|
+
return vbc.pack_samples([sum(cap.value(k, first + i) << k for k in range(cap.width)) for i in range(n)], cap.width)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def test_at_once_is_value_sample_by_sample():
|
|
31
|
+
rnd = random.Random(5)
|
|
32
|
+
for _ in range(200):
|
|
33
|
+
width = rnd.choice([1, 2, 3, 4, 5, 8, 12, 16])
|
|
34
|
+
channels = rnd.randint(1, width)
|
|
35
|
+
rate = rnd.choice([1_000_000, 3_000_000, Fraction(80_000_000, 3), 48_000])
|
|
36
|
+
waves = {k: rnd.choice(WAVES) for k in range(channels) if rnd.random() < 0.6}
|
|
37
|
+
cap = track(width, channels, rate, waves)
|
|
38
|
+
first, n = rnd.randrange(0, 1 << 24), rnd.randint(1, 300)
|
|
39
|
+
assert cap._levels(first, n) is not None
|
|
40
|
+
assert cap._pack(first, n) == slow(cap, first, n), (width, channels, rate, waves, first, n)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def test_a_second_of_1_ms_s_on_2_lines_is_fast():
|
|
44
|
+
cap = track(2, 2, 1_000_000, {1: "uart:115200"})
|
|
45
|
+
t = time.perf_counter()
|
|
46
|
+
for at in range(0, 1_000_000, vbc.BLOCKS_A_TICK):
|
|
47
|
+
cap._pack(at, vbc.BLOCKS_A_TICK)
|
|
48
|
+
assert time.perf_counter() - t < 0.5
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def test_format_1_blocks_at_once_are_the_same():
|
|
52
|
+
rnd = random.Random(6)
|
|
53
|
+
for _ in range(150):
|
|
54
|
+
channels = rnd.randint(1, 4)
|
|
55
|
+
cap = track(8, channels, 1_000_000, {k: rnd.choice(WAVES) for k in range(channels) if rnd.random() < 0.6})
|
|
56
|
+
cap.block = rnd.choice([64, 256])
|
|
57
|
+
cap.carriages = {k: (vbc.CARRIAGE["events"], rnd.choice([1, 4])) for k in range(channels) if rnd.random() < 0.5}
|
|
58
|
+
first, n = rnd.randrange(1, 1 << 20), rnd.randint(1, 700)
|
|
59
|
+
contiguous = rnd.random() < 0.5
|
|
60
|
+
fast = cap._blocks(first, n, contiguous=contiguous)
|
|
61
|
+
levels = cap._levels
|
|
62
|
+
cap._levels = lambda first, n: None
|
|
63
|
+
assert fast == cap._blocks(first, n, contiguous=contiguous)
|
|
64
|
+
cap._levels = levels
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/capture-group-geometry-conformance.ja.md
RENAMED
|
File without changes
|
{oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/capture-metadata-conformance.ja.md
RENAMED
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/capture-timeline-conformance.ja.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/config-execution-conformance.ja.md
RENAMED
|
File without changes
|
{oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/config-fallback-conformance.ja.md
RENAMED
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/config-power-loss-conformance.ja.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/conformance-spec-compatibility.ja.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/execution-order-conformance.ja.md
RENAMED
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/fixture-metadata-conformance.ja.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/host-core-shapes-conformance.ja.md
RENAMED
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/host-notification-conformance.ja.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/interface-smoke-conformance.ja.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/notification-retention-conformance.ja.md
RENAMED
|
File without changes
|
{oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/notification-sequence-conformance.ja.md
RENAMED
|
File without changes
|
{oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/oep-declaration-conformance.ja.md
RENAMED
|
File without changes
|
{oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/oep-example-smoke-conformance.ja.md
RENAMED
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.48 → oep_client_python-0.0.49}/docs/pin-constraints-conformance.ja.md
RENAMED
|
File without changes
|
|
File without changes
|