oep-client-python 0.0.46__tar.gz → 0.0.48__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.46 → oep_client_python-0.0.48}/CHANGELOG.md +27 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/PKG-INFO +1 -1
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/pyproject.toml +2 -2
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/__init__.py +1 -1
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/acquire.py +127 -44
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_acquire.py +73 -4
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/.gitignore +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/LICENSE +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/README.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/README.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/README.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/allocator-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/analog-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/analog-payload-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/arm-adi-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/attach-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/block-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/capture-group-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/capture-group-geometry-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/capture-metadata-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/capture-serial-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/capture-timeline-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/capture-timeline-lifecycle-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/clock-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/config-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/config-execution-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/config-fallback-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/config-paging-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/config-power-loss-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/config-storage-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/conformance-checks.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/conformance-spec-compatibility.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/core-fixed-fields-review.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/core-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/corr-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/cut-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/data-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/debug-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/dependency-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/discovery-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/dmseq-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/dmseq-target-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/execution-order-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/exhausted-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/fixture-metadata-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/gpio-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/gpio-lifecycle-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/hardware-configuration.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/hardware-quickstart.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/hardware-schema.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/host-core-shapes-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/host-deadline-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/host-notification-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/host-request-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/host-resend-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/host-tlv-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/host-value-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/host-wait-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/i2c-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/interface-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/interface-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/lease-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/link-routes-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/link-transfer-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/logic-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/mailbox-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/notification-output-sample.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/notification-retention-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/notification-sequence-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/oep-declaration-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/oep-example-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/outcome-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/pin-constraints-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/pipeline-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/port-speed-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/probe-input-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/recovery-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/recovery-races-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/refusal-order-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/registered-ops-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/replay-pressure-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/reset-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/resource-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/response-race-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/restart-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/retention-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/retention-lifecycle-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/retry-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/route-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/run-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/scan-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/scan-options-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/selected-metadata-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/session-loss-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/session-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/spec-follow-notes.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/spi-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/step-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/stream-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/subscription-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/tcp-recovery-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/testing-consumers.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/testing-policy.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/tlv-request-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/trace/README.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/trace/capture.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/trace/common.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/trace/console.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/trace/core.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/trace/debug.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/trace/fixture.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/trace/link.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/trace/plan.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/trace/restart.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/trace/transports.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/uart-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/uart-stream-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/usb-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/wire-options-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/writer-lease-conformance.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/__main__.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/arm.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/capture.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/capture_blocks.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/catalog.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/ch32_flash.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/cobs.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/__init__.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/allocator.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/allocator_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/allocator_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/analog.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/analog_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/analog_payload.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/analog_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/arm_adi.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/arm_adi_blocks.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/arm_adi_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/arm_adi_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/attach.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/attach_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/attach_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/block_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/block_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/blocks.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/capture_group.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/capture_group_geometry.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/capture_group_geometry_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/capture_group_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/capture_group_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/capture_metadata.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/capture_metadata_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/capture_serial.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/capture_serial_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/capture_timeline.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/capture_timeline_lifecycle.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/capture_timeline_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/capture_timeline_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/clock.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/clock_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/clock_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/core_fixed_fields.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/core_smoke.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/corr.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/cut.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/cut_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/cut_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/data.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/data_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/data_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/debug.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/debug_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/debug_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/declaration_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/dependencies.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/dependency_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/dependency_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/discovery.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/dmseq.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/dmseq_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/dmseq_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/dmseq_target.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/dmseq_target_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/dmseq_target_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/execution_order.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/execution_order_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/exhausted.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/exhausted_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/fixture_metadata.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/fixture_metadata_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/force_hw.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/gpio.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/gpio_lifecycle.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/gpio_lifecycle_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/gpio_lifecycle_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/gpio_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/gpio_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/host_core.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/host_core_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/host_deadline.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/host_deadline_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/host_notifications.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/host_notifications_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/host_request_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/host_requests.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/host_resend.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/host_resend_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/host_tlv.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/host_tlv_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/host_values.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/host_values_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/host_wait.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/host_wait_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/i2c.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/i2c_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/i2c_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/interface_smoke.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/interfaces.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/lease.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/lease_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/link_routes.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/link_routes_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/link_routes_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/link_transfer_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/link_transfer_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/link_transfers.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/logic.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/logic_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/logic_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/mailbox.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/mailbox_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/mailbox_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/notification_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/notification_retention.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/notification_retention_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/notification_sequence.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/notification_sequence_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/notify_hw.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/oep_declaration_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/oep_declarations.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/oep_smoke.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/outcome_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/outcome_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/outcomes.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/pipeline.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/pipeline_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/pipeline_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/port_speed.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/port_speed_execution.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/port_speed_execution_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/port_speed_execution_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/port_speed_lifecycle.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/port_speed_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/port_speed_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/probe_input.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/probe_input_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/recovery.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/recovery_race_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/recovery_races.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/recovery_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/refusal_order.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/refusal_order_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/registered_ops.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/registered_ops_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/release_hw.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/replay_pressure.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/reset.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/reset_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/reset_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/resource_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/resource_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/resources.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/response_race.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/response_race_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/restart.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/restart_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/restart_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/retention.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/retention_lifecycle.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/retention_lifecycle_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/retention_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/retention_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/retry.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/retry_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/retry_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/route_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/route_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/routes.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/run.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/run_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/run_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/scan.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/scan_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/scan_options.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/scan_options_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/scan_options_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/scan_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/selected_metadata.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/selected_metadata_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/serial.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/session_loss.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/session_loss_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/session_smoke.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/spi.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/spi_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/spi_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/step.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/step_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/step_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/stream.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/stream_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/stream_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/subscription_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/subscriptions.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/tcp.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/tcp_peers.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/tcp_recovery.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/tcp_recovery_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/tlv_request_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/tlv_requests.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/uart.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/uart_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/uart_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/uart_stream.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/uart_stream_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/usb.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/usb_cases.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/usb_hw.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/usb_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/wire_options.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/wire_options_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/wire_options_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/writer_lease.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/writer_lease_model.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/conformance/writer_lease_sample.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/console.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/core.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/decode.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/discovery.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/dump.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/endpoint.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/fixture.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/frames.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/hardware.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/hid_stream.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/host.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/interfaces.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/kept_session.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/link.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/linktest.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/memo.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/message.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/names.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/pins.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/probe_log.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/pytest_conformance.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/registry.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/riscv.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/rp2350.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/settings.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/speed_record.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/stimulus.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/targets.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/uiapduino.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/usb_stream.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/virtual_bench.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/virtual_bench_capture.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/virtual_bench_mdns.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/virtual_bench_serial.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/virtual_bench_serve.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/virtual_bench_trigger.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/virtual_bench_usb.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/virtual_core.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/virtual_fixture_drive.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/src/oep_client/virtual_names.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/conftest.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/equipment/.env.example +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/equipment/test_core_contract.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/equipment/test_preflight.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/fixtures/hardware.virtual.toml +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/.env.example +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/.env.virtual.example +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/README.ja.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/README.md +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/__init__.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/boards.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/conftest.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/firmware.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/flash.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/hardware.example.toml +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/hardware.resolved.example.toml +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/record.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/.gitignore +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.27+ec1df99-0.0.27.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.32+1491c13-0.0.31-20261016T133559.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.32+672bf7b-0.0.32-20261016T164655.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131458.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131510.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131526.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131532.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131656.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131703.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131708.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132050.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132057.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132104.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.36+f8ac55a-0.0.36-20261022T160307.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.36+f8ac55a-0.0.36-20261022T161655.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.37+1031feb-0.0.37-20261023T214002.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.38+7c158ff-0.0.38-20261027T081156.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.39+1ad47c7-0.0.39-20261027T182907.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.39+2c0c41f-0.0.39-20261027T174907.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.39+9317805-0.0.39-20261027T191153.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.39+a75fd45-0.0.39-20261027T205055.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201038.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201057.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201058.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201059.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896__crash_at_2106_s_-0.0.39-20261027T204608.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.39+d4d323c-0.0.39-20261028T190815.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/9489dd2ae0953650-0.0.39+d4d323c-0.0.39-20261028T191854.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/e8f60ae84e28-0.0.39+1ad47c7-0.0.39-20261027T181116.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/e8f60ae84e28-0.0.39+1ad47c7-0.0.39-20261027T181812.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/e8f60ae84e28-0.0.39+1ad47c7-0.0.39-20261027T182903.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/e8f60ae84e28-0.0.39+62463f2-0.0.39-20261029T145541.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/e8f60ae84e28-0.0.39+9317805-0.0.39-20261027T191150.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/e8f60ae84e28-0.0.39+a75fd45-0.0.39-20261028T190803.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/e8f60ae84e28-0.0.39+b7fbdf9-0.0.39-20261027T191727.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/e8f60ae84e28-0.0.39+b7fbdf9-0.0.39-20261027T204611.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/e8f60ae84e28-0.0.39+bb371fb-0.0.39-20261028T191811.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/e8f60ae84e28-0.0.39+bb371fb-0.0.39-20261028T191849.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/e8f60ae84e28-0.0.44+34c0b0b-0.0.44-20261104T190820.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/e8f60ae84e28-0.0.44+34c0b0b-0.0.44-20261104T190903.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/e8f60ae84e28-unknown-0.0.44-20261104T190857.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.26+4fad559-0.0.26.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32+1491c13-0.0.31-20261016T133501.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32+672bf7b-0.0.32-20261016T164559.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32-0.0.31-20261016T130922.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32-0.0.31-20261016T131024.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.36+12e1222-0.0.37-20261023T214016.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.36+f8ac55a-0.0.36-20261022T160134.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.37+1031feb-0.0.37-20261023T214230.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.38+7c158ff-0.0.38-20261027T081159.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+2c0c41f-0.0.39-20261027T174933.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+9317805-0.0.39-20261027T191154.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+b7fbdf9-0.0.39-20261027T204617.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+bb371fb-0.0.39-20261028T191816.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.25-0.0.26.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+e877631-0.0.26.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27+ac80e07-0.0.27.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27+ec1df99-0.0.27.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27-0.0.27.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.28-0.0.28.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb-0.0.37-20261023T220718.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb-0.0.37-20261023T221106.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/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.46 → oep_client_python-0.0.48}/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.46 → oep_client_python-0.0.48}/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.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.26.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.37-20261023T214102.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.39-20261028T190818.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0e31108-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0e31108-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0e31108-0.0.44+34c0b0b-0.0.44-20261104T190941.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0e343c6-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0e343c6-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0e343c6-0.0.27+ec1df99-0.0.27.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0e343c6-0.0.28+ffe4eb1-0.0.28.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0e343c6-0.0.28-0.0.28.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+0f013b7-0.0.28.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+1c940ca-0.0.28.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+4ef21db+4ef21db-dirty-0.0.28.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+68d9694-0.0.28.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+ec38b1d-0.0.28.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+ffe4eb1-0.0.28.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28-0.0.28.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.36+f8ac55a-0.0.36-20261022T160503.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.37+1031feb-0.0.37-20261023T214005.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.38+7c158ff-0.0.38-20261027T081145.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.38+7c158ff-0.0.38-20261027T081152.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+1ad47c7-0.0.39-20261027T180716.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+1ad47c7-0.0.39-20261027T182855.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+1ad47c7-0.0.39-20261027T183107.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f-0.0.39-20261027T174908.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/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.46 → oep_client_python-0.0.48}/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.46 → oep_client_python-0.0.48}/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.46 → oep_client_python-0.0.48}/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.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+62463f2-0.0.39-20261029T145536.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+7445bee-0.0.39-20261027T155413.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+9317805-0.0.39-20261027T191146.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+b7fbdf9-0.0.39-20261027T191724.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+bb371fb-0.0.39-20261028T191806.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+bb371fb-0.0.39-20261028T191843.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+d4d323c-0.0.39-20261028T190809.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-unknown-0.0.36-20261022T160222.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-unknown-0.0.39-20261027T155301.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/results/esp32-series-30eda0ea068b-unknown-0.0.39-20261027T155340.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/test_harness.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/hw/test_probe.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/spec/DOCS_SHA256 +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/spec/oep-v1.toml +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/spec_names.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_address.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_capabilities.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_capture.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_capture_blocks.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_capture_generation_rules.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_capture_rules.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_cobs.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_allocator.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_analog.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_analog_payload.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_arm_adi.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_arm_adi_blocks.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_attach.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_blocks.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_capture_group.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_capture_group_geometry.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_capture_metadata.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_capture_serial.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_capture_timeline.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_capture_timeline_lifecycle.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_clock.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_core_fixed_fields.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_core_smoke.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_corr.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_cut.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_data.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_debug.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_dependencies.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_discovery.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_dmseq.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_dmseq_target.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_execution_order.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_exhausted.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_fixture_metadata.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_force_hw.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_gpio.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_gpio_lifecycle.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_host_core.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_host_critical_calls.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_host_deadline.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_host_notifications.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_host_requests.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_host_resend.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_host_tlv.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_host_values.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_host_wait.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_i2c.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_interface_smoke.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_interfaces.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_lease.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_link_routes.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_link_transfers.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_logic.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_mailbox.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_notification_output.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_notification_retention.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_notification_sequence.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_oep_declarations.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_oep_smoke.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_outcomes.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_pipeline.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_port_speed.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_port_speed_execution.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_port_speed_lifecycle.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_probe_input.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_reconnect.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_recovery.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_recovery_races.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_refusal_order.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_registered_ops.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_replay_pressure.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_replay_records_optional.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_reset.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_resources.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_response_race.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_restart.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_retention.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_retention_lifecycle.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_retry.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_reviewed_pins.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_routes.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_run.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_scan.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_scan_options.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_selected_metadata.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_serial.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_session_loss.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_session_smoke.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_spec_guard.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_spi.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_step.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_stream.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_subscriptions.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_tcp.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_tcp_peers.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_tcp_recovery.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_tlv_requests.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_uart.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_uart_stream.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_usb.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_wire_options.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_conformance_writer_lease.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_console_queue_and_reset_settle.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_core_rules.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_debug_attach.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_debug_rules.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_describe_unset_idle_rules.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_exact_payload_rules.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_extension_patterns.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_fixture_controllers.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_fixture_link_settings_rules.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_fixture_out.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_fixture_targets.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_flash_console.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_gpio_drive_and_serve_options.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_hardware.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_hid_stream.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_host_boot_lifecycle.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_host_recovery_rules.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_host_rules_bounds_options.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_host_rules_waits_lines.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_host_wait_bound.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_interfaces.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_link_drop.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_link_host.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_link_serial.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_linktest.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_literals.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_memo.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_minimal_ops.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_no_resume.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_open_extensions.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_passthrough.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_pins.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_plan.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_port_speed.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_probe_log.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_request_tails.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_request_validation_rules.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_restart.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_resubscribe_after_reopen.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_rvswd_rest.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_session.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_settings.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_spec_sections.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_spec_vectors.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_state_resource_rules.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_stimulus.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_target_parts.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_tcp_discovery.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_tlv_reader_rules.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_trace_capture.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_trace_common.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_trace_console.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_trace_core.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_trace_core_names.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_trace_debug.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_trace_fixture.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_trace_fixture_drive.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_trace_link.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_trace_plan.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_trace_restart.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_trace_transports.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_transport_session_rules.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_usb_identity.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_usb_stream.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_analog_roles.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_announce.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_capture.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_capture_changing_trigger.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_capture_channel_time.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_capture_format_2.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_capture_formats.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_capture_initial_trigger_time.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_capture_lifetime.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_capture_notifications.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_capture_one_shot_time.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_capture_options.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_capture_pretrigger.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_capture_query.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_capture_rates.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_capture_requests.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_capture_resume_calibration.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_capture_trigger_modes.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_capture_trigger_source.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_capture_trigger_source_more.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_capture_waiting.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_pin_constraints.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_rules_core.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_rules_ops_lines.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_serve_reboot.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_serve_tcp_connections.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_spec.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_bench_targets.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_core.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_virtual_core_bool.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/test_wire_hold.py +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/vectors/SPEC_COMMIT +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/vectors/SPEC_SHA256 +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/vectors/capture_formats.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/vectors/checks.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/vectors/cobs.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/vectors/confirm.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/vectors/core_extensions.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/vectors/core_lifecycle.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/vectors/core_policy.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/vectors/discovery.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/vectors/headers.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/vectors/interface_boundaries.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/vectors/interface_profiles.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/vectors/logic_layout.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/vectors/ops.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/vectors/ops_encoding.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/vectors/refusals.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/vectors/sessions.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/tests/vectors/settings_file.json +0 -0
- {oep_client_python-0.0.46 → oep_client_python-0.0.48}/udev/70-oep-probe.rules +0 -0
|
@@ -2,6 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.0.48
|
|
6
|
+
- (EN) Fixed: a stream's segments join bit by bit, so a stream is one part unless data was lost. A segment whose
|
|
7
|
+
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
|
|
8
|
+
part every time: 300 to 550 parts, none lost. A format 1 segment whose samples are not a multiple of every D still
|
|
9
|
+
starts a new part (its ticks restart, capture §1.3).
|
|
10
|
+
- (JA) 修正: stream の区画を 1 bit ずつつなぐ。欠損がなければ、stream は 1 つの部分になる。線ごとに標本がバイトの切れ目で
|
|
11
|
+
終わらない区画(ESP32-P4 の 2 本の線の 65332 標本、5 MS/s と 10 MS/s)では、そのたびに新しい部分を始めていて、欠損なしで
|
|
12
|
+
300〜550 の部分に分かれていた。format 1 で標本数がどの D の倍数でもない区画は、今までどおり新しい部分を始める
|
|
13
|
+
(その刻みが始め直しになるため、capture §1.3)。
|
|
14
|
+
|
|
15
|
+
## 0.0.47
|
|
16
|
+
- (EN) Added: `acquire.Request(during=steps)` for a stream in place of `seconds`: it streams until `steps(wait)`
|
|
17
|
+
returns, `wait(seconds)` collecting while it waits, so a script marks sections and sends ops or console commands on
|
|
18
|
+
the same session (no second thread or session) while one long capture runs. A loss with on_loss "stop" raises
|
|
19
|
+
`acquire.StreamStopped` out of `wait`; the stream ends there. An exception of the steps stops the capture and comes out.
|
|
20
|
+
- (JA) 追加: stream の `acquire.Request(during=steps)`(`seconds` の代わり)。`steps(wait)` が戻るまで取り込み、
|
|
21
|
+
`wait(秒)` の間に受け取る。1 本の長い取り込みの間に、同じセッションで区間の見出しを書き、op やコンソールの命令を送れる
|
|
22
|
+
(別のスレッドもセッションも要らない)。on_loss "stop" で欠損があると、`wait` から `acquire.StreamStopped` が出て、
|
|
23
|
+
そこで取り込みを終える。steps の例外は、取り込みを止めてから外に出る。
|
|
24
|
+
- (EN) Added: acquire's channels take a port's line by the target pin, `S@P` (host guide §5.3; `x035@pb9`), besides
|
|
25
|
+
`S.N` and the probe's channel names.
|
|
26
|
+
- (JA) 追加: acquire のチャネルに、口の線を相手のピンで指す `S@P`(host ガイド §5.3、`x035@pb9`)も使える。`S.N` と
|
|
27
|
+
プローブのチャネル名に加えて。
|
|
28
|
+
- (EN) CI and the release run the tests four at a time by file (pytest-xdist, a dev dependency): most tests wait on real
|
|
29
|
+
timeouts, so the run drops from about 6 minutes to about 2.
|
|
30
|
+
- (JA) CI とリリースは、試験をファイルごとに並べて流す(pytest-xdist、開発用の依存)。多くの試験は実際の時間切れを待つので、約 6 分が約 2 分になる。
|
|
31
|
+
|
|
5
32
|
## 0.0.46
|
|
6
33
|
- (EN) Changed (oep-spec 4d28f24): `SpiController.transfer` and `Pwm.set` read the answer's count n(u8) first, and the
|
|
7
34
|
virtual bench sends it; the memo's max_objects is read as u16. Registry, documents and vectors synced; the checkers'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: oep-client-python
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.48
|
|
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.48"
|
|
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"
|
|
@@ -42,7 +42,7 @@ packages = ["src/oep_client"]
|
|
|
42
42
|
only-include = ["src/oep_client", "tests", "docs", "udev", "README.md", "README.ja.md", "CHANGELOG.md", "LICENSE", "pyproject.toml"]
|
|
43
43
|
|
|
44
44
|
[dependency-groups]
|
|
45
|
-
dev = ["pytest>=8"]
|
|
45
|
+
dev = ["pytest>=8", "pytest-xdist>=3"]
|
|
46
46
|
|
|
47
47
|
[tool.pytest.ini_options]
|
|
48
48
|
markers = ["hw: needs a probe board (OEP_HW_BOARDS=<board-identify ids>); skipped otherwise (tests/hw/README.md)",
|
|
@@ -11,14 +11,25 @@ probe's facts out.
|
|
|
11
11
|
|
|
12
12
|
Logic channels go to oep.fixture.logic, analog ones to oep.fixture.analog; with both, oep.fixture.capture-group
|
|
13
13
|
starts them together, a trigger on either track as the group's trigger source (capture §4.4). A line is named as a
|
|
14
|
-
script keeps it - the probe's channel name (fn 0's channel_name, core §7.5) or a port's line label (
|
|
15
|
-
|
|
14
|
+
script keeps it - the probe's channel name (fn 0's channel_name, core §7.5) or a port's line label (host guide §5.3:
|
|
15
|
+
S.N by its role, S@P by the target pin) - and looked up on the session (a channel number holds for one boot only); a track's channels are its plan roles
|
|
16
16
|
0..C-1 in the order given. The plans are released afterwards.
|
|
17
17
|
|
|
18
18
|
Modes: "oneshot" (the probe's memory), "repeat" (`segments` acquisitions read and released as they come: with a
|
|
19
19
|
trigger one part each, layout "segments"; without, a timeline), "stream" (for `seconds`, sent as taken,
|
|
20
20
|
put together on disk while it runs: a timeline, cut where data was lost).
|
|
21
21
|
|
|
22
|
+
A stream can run while the script does its steps on the same session (marking sections, sending console commands):
|
|
23
|
+
`during=steps` in place of `seconds` streams until steps(wait) returns, `wait(seconds)` collecting while it waits.
|
|
24
|
+
Steps should call wait often (the probe holds only its stream buffer meanwhile); a loss with on_loss "stop" raises
|
|
25
|
+
StreamStopped out of wait, and the stream ends there.
|
|
26
|
+
|
|
27
|
+
def steps(wait):
|
|
28
|
+
for duty in (64, 128):
|
|
29
|
+
with rec.section(2, f"duty={duty}"):
|
|
30
|
+
console.write(f"PWM {duty}\n".encode()); wait(0.5)
|
|
31
|
+
res = acquire.capture(hst, acquire.Request(chans, 1_000_000, 0, mode="stream", during=steps))
|
|
32
|
+
|
|
22
33
|
Times: tick 0 of a part is its first logic sample, `start_ns` on the probe's clock; an analog channel starts at
|
|
23
34
|
t0_ticks = (its segment's start_ns - that) plus its skew_ns, in ticks. These are the probe's estimates; each track's
|
|
24
35
|
uncertainty is kept. ADC values are kept raw with the probe's linear conversion; the input range, reference, Vrefint
|
|
@@ -37,13 +48,14 @@ import array
|
|
|
37
48
|
import math
|
|
38
49
|
import struct
|
|
39
50
|
import sys
|
|
51
|
+
from collections.abc import Callable
|
|
40
52
|
from dataclasses import dataclass, field
|
|
41
53
|
from fractions import Fraction
|
|
42
54
|
from pathlib import Path
|
|
43
55
|
|
|
44
56
|
from . import registry as _reg
|
|
45
57
|
|
|
46
|
-
__all__ = ["Analog", "Bits", "Changes", "OnDisk", "Part", "Request", "Result", "capture", "capture_at"]
|
|
58
|
+
__all__ = ["Analog", "Bits", "Changes", "OnDisk", "Part", "Request", "Result", "StreamStopped", "capture", "capture_at"]
|
|
47
59
|
|
|
48
60
|
TRIGGERS = ("high", "low", "rise", "fall", "both")
|
|
49
61
|
ANALOG_TRIGGERS = ("high", "low", "rise", "fall")
|
|
@@ -52,7 +64,8 @@ ANALOG_TRIGGERS = ("high", "low", "rise", "fall")
|
|
|
52
64
|
@dataclass
|
|
53
65
|
class Request:
|
|
54
66
|
channels: list[tuple[str, str]] # logic: (name to record, the line): the probe's channel name (fn 0's
|
|
55
|
-
# channel_name, GPIO47) or a port's line label (S.N, x035.swdio
|
|
67
|
+
# channel_name, GPIO47) or a port's line label (S.N, x035.swdio; S@P,
|
|
68
|
+
# x035@pb9), in order
|
|
56
69
|
rate: int # logic samples per second asked for (the probe may answer another)
|
|
57
70
|
samples: int
|
|
58
71
|
trigger: tuple | None = None # (logic channel, one of TRIGGERS) or (analog channel, rise / fall / high /
|
|
@@ -69,6 +82,8 @@ class Request:
|
|
|
69
82
|
segments: int | None = None # repeat: how many acquisitions
|
|
70
83
|
on_loss: str = "stop" # stream: "stop" at the first loss, or "continue" to the end
|
|
71
84
|
spool_dir: str | None = None # stream: where its channels are put together on disk while it runs
|
|
85
|
+
during: Callable[[Callable[[float], None]], None] | None = None # stream: instead of `seconds`, runs until this
|
|
86
|
+
# returns - called with wait(seconds), which collects while it waits
|
|
72
87
|
|
|
73
88
|
def __post_init__(self):
|
|
74
89
|
names = [n for n, _ in self.channels] + [n for n, *_ in self.analog]
|
|
@@ -92,8 +107,10 @@ class Request:
|
|
|
92
107
|
raise ValueError("repeat: logic channels only")
|
|
93
108
|
elif self.segments is not None:
|
|
94
109
|
raise ValueError("segments is for repeat only")
|
|
95
|
-
if self.
|
|
96
|
-
raise ValueError("a stream
|
|
110
|
+
if self.during is not None and (self.mode != "stream" or self.seconds is not None):
|
|
111
|
+
raise ValueError("during is for a stream, in place of seconds")
|
|
112
|
+
if self.mode == "stream" and self.during is None and not (self.seconds and self.seconds > 0):
|
|
113
|
+
raise ValueError("a stream needs seconds (how long) or during")
|
|
97
114
|
if self.arm not in ("pretrigger", "now"):
|
|
98
115
|
raise ValueError(f"arm {self.arm!r}: pretrigger or now")
|
|
99
116
|
logic = {n for n, _ in self.channels}
|
|
@@ -567,7 +584,8 @@ def _describe(core, hst, fn: int) -> list[tuple[int, bytes]]:
|
|
|
567
584
|
|
|
568
585
|
def _channels(core, hst, lines: list[str]) -> list[int]:
|
|
569
586
|
"""The probe's channel numbers (valid for this boot) of lines named as kept in scripts: a channel name (fn 0's
|
|
570
|
-
channel_name, core §7.5; GPIO47) or a port's line label (
|
|
587
|
+
channel_name, core §7.5; GPIO47) or a port's line label (host guide §5.3: S.N by its role, x035.swdio; S@P by the target pin, x035@pb9). ASCII
|
|
588
|
+
case aside."""
|
|
571
589
|
if not lines:
|
|
572
590
|
return []
|
|
573
591
|
from . import registry, settings
|
|
@@ -581,11 +599,13 @@ def _channels(core, hst, lines: list[str]) -> list[int]:
|
|
|
581
599
|
labels = None
|
|
582
600
|
out = []
|
|
583
601
|
for line in lines:
|
|
584
|
-
|
|
585
|
-
if
|
|
602
|
+
label = settings.parse_label(line)
|
|
603
|
+
if label is not None:
|
|
586
604
|
if labels is None:
|
|
587
605
|
labels = settings.labels(hst)
|
|
588
|
-
|
|
606
|
+
port, role, pin = label
|
|
607
|
+
ch = (settings.line_from_labels(labels, role, port) if role
|
|
608
|
+
else settings.pin_from_labels(labels, pin, port))
|
|
589
609
|
if ch is None:
|
|
590
610
|
raise ValueError(f"{line}: no channel carries that label (host guide §5.3)")
|
|
591
611
|
else:
|
|
@@ -1133,6 +1153,35 @@ STREAM_MAX_DELAY_MS = 20 # ... or after this long. With (0, 0) the P4X sent eac
|
|
|
1133
1153
|
# quiet lines) as a transfer of its own, 2000 a second, and dropped 35 % it could not send
|
|
1134
1154
|
|
|
1135
1155
|
|
|
1156
|
+
class StreamStopped(Exception):
|
|
1157
|
+
"""Raised by a stream's `wait` (Request.during) when data was lost and on_loss is "stop": the stream stops there."""
|
|
1158
|
+
|
|
1159
|
+
|
|
1160
|
+
def _drive(req: Request, poll, lost) -> None:
|
|
1161
|
+
"""Collect a started stream: for req.seconds, or while req.during(wait) runs - its `wait(seconds)` collecting
|
|
1162
|
+
meanwhile. poll(seconds) takes what comes, lost() says whether anything was lost; with on_loss "stop" a loss ends
|
|
1163
|
+
it (a StreamStopped out of wait, caught here)."""
|
|
1164
|
+
import time
|
|
1165
|
+
|
|
1166
|
+
def wait(seconds: float) -> None:
|
|
1167
|
+
deadline = time.monotonic() + seconds
|
|
1168
|
+
while True:
|
|
1169
|
+
now = time.monotonic()
|
|
1170
|
+
if now >= deadline:
|
|
1171
|
+
return
|
|
1172
|
+
poll(min(STREAM_POLL_S, deadline - now))
|
|
1173
|
+
if req.on_loss == "stop" and lost():
|
|
1174
|
+
raise StreamStopped("data was lost while streaming")
|
|
1175
|
+
|
|
1176
|
+
try:
|
|
1177
|
+
if req.during is None:
|
|
1178
|
+
wait(req.seconds)
|
|
1179
|
+
else:
|
|
1180
|
+
req.during(wait)
|
|
1181
|
+
except StreamStopped:
|
|
1182
|
+
pass
|
|
1183
|
+
|
|
1184
|
+
|
|
1136
1185
|
def _collect_group(group, tracks, link, req: Request, oc, spool=None):
|
|
1137
1186
|
"""_collect for a group's streaming tracks (capture §4.1: each subscribed, started at once): -> ({fn: Received},
|
|
1138
1187
|
seconds). The first track's Received goes to the spool as it comes; a loss in any track stops it with "stop"."""
|
|
@@ -1141,20 +1190,22 @@ def _collect_group(group, tracks, link, req: Request, oc, spool=None):
|
|
|
1141
1190
|
t.subscribe(STREAM_MIN_BYTES, STREAM_MAX_DELAY_MS)
|
|
1142
1191
|
group.start(tracks)
|
|
1143
1192
|
t_read = time.monotonic()
|
|
1144
|
-
|
|
1193
|
+
got = {t.fn: oc.Received() for t in tracks}
|
|
1145
1194
|
lead = tracks[0].fn
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
break
|
|
1150
|
-
got = group.stream(link, tracks, seconds=min(STREAM_POLL_S, deadline - now), into=got)
|
|
1195
|
+
|
|
1196
|
+
def poll(seconds):
|
|
1197
|
+
group.stream(link, tracks, seconds=seconds, into=got)
|
|
1151
1198
|
if spool is not None:
|
|
1152
1199
|
spool.take(got[lead])
|
|
1153
|
-
|
|
1200
|
+
|
|
1201
|
+
def lost():
|
|
1202
|
+
return (spool is not None and spool.lost) or any(
|
|
1154
1203
|
g.gaps or (g.start or 0) > 0 for fn, g in got.items() if spool is None or fn != lead)
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1204
|
+
|
|
1205
|
+
try:
|
|
1206
|
+
_drive(req, poll, lost)
|
|
1207
|
+
finally:
|
|
1208
|
+
group.stop() # also when the caller's `during` raised: the probe is left stopped
|
|
1158
1209
|
got = group.finish(link, tracks, got)
|
|
1159
1210
|
return got, time.monotonic() - t_read
|
|
1160
1211
|
|
|
@@ -1182,25 +1233,26 @@ def _analog_runs(an, acfg, got) -> tuple[list, list]:
|
|
|
1182
1233
|
|
|
1183
1234
|
|
|
1184
1235
|
def _collect(track, link, req: Request, oc, spool=None):
|
|
1185
|
-
"""Subscribe, start, collect for req.seconds, stop and collect the rest -> (Received,
|
|
1186
|
-
at once with on_loss "stop"."""
|
|
1236
|
+
"""Subscribe, start, collect for req.seconds (or while req.during runs), stop and collect the rest -> (Received,
|
|
1237
|
+
seconds). A loss stops it at once with on_loss "stop"."""
|
|
1187
1238
|
import time
|
|
1188
1239
|
track.subscribe(STREAM_MIN_BYTES, STREAM_MAX_DELAY_MS) # batched: a capture wants bandwidth, not a frame per block
|
|
1189
1240
|
track.start()
|
|
1190
1241
|
t_read = time.monotonic()
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
break
|
|
1196
|
-
got = track.stream(link, seconds=min(STREAM_POLL_S, deadline - now), into=got)
|
|
1242
|
+
got = oc.Received()
|
|
1243
|
+
|
|
1244
|
+
def poll(seconds): # stream() renews the lease across calls on the same Received
|
|
1245
|
+
track.stream(link, seconds=seconds, into=got)
|
|
1197
1246
|
if spool is not None: # put together as it comes: memory holds a poll's worth, not the stream
|
|
1198
1247
|
spool.take(got)
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1248
|
+
|
|
1249
|
+
def lost():
|
|
1250
|
+
return spool.lost if spool is not None else bool(got.gaps or (got.start or 0) > 0)
|
|
1251
|
+
|
|
1252
|
+
try:
|
|
1253
|
+
_drive(req, poll, lost)
|
|
1254
|
+
finally:
|
|
1255
|
+
track.stop()
|
|
1204
1256
|
got = track.finish(link, got)
|
|
1205
1257
|
return got, time.monotonic() - t_read
|
|
1206
1258
|
|
|
@@ -1603,14 +1655,14 @@ class _Spool:
|
|
|
1603
1655
|
p, nxt = ready[k][0], ready[j][1]
|
|
1604
1656
|
x = self.segs[p]
|
|
1605
1657
|
samples = sum(self.segs.pop(q).samples for q, _ in ready[k:j + 1])
|
|
1606
|
-
if self.cur is not None and
|
|
1658
|
+
if self.cur is not None and any(self.cur["samples"] % d for d in self.ds):
|
|
1607
1659
|
self._close(follows=True) # a grid restart (format 1) is not a loss: the next part follows on
|
|
1608
1660
|
self._open(p, x)
|
|
1609
1661
|
data = bytes(self.pending[p - self.at:nxt - self.at])
|
|
1610
1662
|
cols = _segment_columns(self.cap, data, samples, len(self.names), self.cfg)
|
|
1611
|
-
for col, f, ev in zip(cols, self.cur["files"], self.cur["events"]):
|
|
1612
|
-
if isinstance(col, bytes):
|
|
1613
|
-
|
|
1663
|
+
for j, (col, f, ev) in enumerate(zip(cols, self.cur["files"], self.cur["events"])):
|
|
1664
|
+
if isinstance(col, bytes): # joined bit by bit: a segment need not end on a whole byte
|
|
1665
|
+
self.cur["carry"][j] = _write_bits(f, self.cur["carry"][j], col, samples)
|
|
1614
1666
|
else:
|
|
1615
1667
|
ev[0].append(col[0] + self.cur["samples"] // col[4])
|
|
1616
1668
|
ev[1].append(col[1])
|
|
@@ -1641,7 +1693,7 @@ class _Spool:
|
|
|
1641
1693
|
k = len(self.parts)
|
|
1642
1694
|
files = [open(os.path.join(self.dir, f"p{k}-{j}.bits"), "wb") for j in range(len(self.names))]
|
|
1643
1695
|
self.cur = {"tick0": tick0, "meta": _seg_meta(seg) if seg is not None else {}, "samples": 0, "files": files,
|
|
1644
|
-
"events": [[[], [], [], None] for _ in self.names]}
|
|
1696
|
+
"events": [[[], [], [], None] for _ in self.names], "carry": [None] * len(self.names)}
|
|
1645
1697
|
self._follows = False
|
|
1646
1698
|
|
|
1647
1699
|
_last_samples, _last_end, _follows = 0, None, False
|
|
@@ -1653,6 +1705,7 @@ class _Spool:
|
|
|
1653
1705
|
cur, n = self.cur, self.cur["samples"]
|
|
1654
1706
|
chans = []
|
|
1655
1707
|
for role, (name, ch, f, ev) in enumerate(zip(self.names, self.ids, cur["files"], cur["events"])):
|
|
1708
|
+
_flush_bits(f, cur["carry"][role])
|
|
1656
1709
|
f.close()
|
|
1657
1710
|
d = self.cfg.event_d.get(role) if self.blocks else None
|
|
1658
1711
|
if d is not None:
|
|
@@ -1739,7 +1792,7 @@ def _stream_parts(cap, cfg, got, names, ids, req: Request) -> tuple[list, list]:
|
|
|
1739
1792
|
chans = from_interleaved(data, names, cfg.width, cfg.positions, samples)
|
|
1740
1793
|
else:
|
|
1741
1794
|
chans = _from_blocks(cap, data, names, samples, cfg)
|
|
1742
|
-
restart = acc is not None and
|
|
1795
|
+
restart = acc is not None and any(acc_samples % d for d in ds)
|
|
1743
1796
|
if acc is None or restart: # a grid restart (format 1) is not a loss: the next part follows on
|
|
1744
1797
|
if acc is not None:
|
|
1745
1798
|
parts.append(_part(_built(acc, acc_samples, ids), acc_meta, tick0))
|
|
@@ -1813,10 +1866,41 @@ def _samples_at_once(run, names, ids, cfg, samples: int) -> list:
|
|
|
1813
1866
|
for name, ch, bits in zip(names, ids, packed)]
|
|
1814
1867
|
|
|
1815
1868
|
|
|
1869
|
+
def _write_bits(f, carry, col: bytes, samples: int):
|
|
1870
|
+
"""Append `samples` bits of `col` (sample i at bit i % 8 of byte i // 8) to file `f` after the `carry` bits not
|
|
1871
|
+
yet written (None: none): whole bytes go to the file, the bits left over (fewer than 8) come back as the carry."""
|
|
1872
|
+
if carry is None and samples % 8 == 0:
|
|
1873
|
+
f.write(col[:samples // 8])
|
|
1874
|
+
return None
|
|
1875
|
+
import numpy as np
|
|
1876
|
+
bits = np.unpackbits(np.frombuffer(col, np.uint8, (samples + 7) // 8), bitorder="little")[:samples]
|
|
1877
|
+
if carry is not None:
|
|
1878
|
+
bits = np.concatenate([carry, bits])
|
|
1879
|
+
whole = len(bits) // 8 * 8
|
|
1880
|
+
f.write(np.packbits(bits[:whole], bitorder="little").tobytes())
|
|
1881
|
+
return bits[whole:] if whole < len(bits) else None
|
|
1882
|
+
|
|
1883
|
+
|
|
1884
|
+
def _flush_bits(f, carry) -> None:
|
|
1885
|
+
"""The last carry of _write_bits: its bits in one byte, the rest 0."""
|
|
1886
|
+
if carry is not None and len(carry):
|
|
1887
|
+
import numpy as np
|
|
1888
|
+
f.write(np.packbits(carry, bitorder="little").tobytes())
|
|
1889
|
+
|
|
1890
|
+
|
|
1891
|
+
def _join_bits(pieces) -> bytes:
|
|
1892
|
+
"""Pieces (bits, n) joined bit by bit: n need not be a multiple of 8."""
|
|
1893
|
+
if all(n % 8 == 0 for _, n in pieces[:-1]):
|
|
1894
|
+
return b"".join(b[:(n + 7) // 8] for b, n in pieces)
|
|
1895
|
+
import numpy as np
|
|
1896
|
+
return np.packbits(np.concatenate([np.unpackbits(np.frombuffer(b, np.uint8, (n + 7) // 8), bitorder="little")[:n]
|
|
1897
|
+
for b, n in pieces]), bitorder="little").tobytes()
|
|
1898
|
+
|
|
1899
|
+
|
|
1816
1900
|
class _Acc:
|
|
1817
|
-
"""One channel of a part being joined from its segments (bits:
|
|
1818
|
-
|
|
1819
|
-
|
|
1901
|
+
"""One channel of a part being joined from its segments (bits: joined bit by bit; events: quanta offset by the
|
|
1902
|
+
samples so far, a multiple of D). A segment that follows on carries the level before it as its start (§1.3), so
|
|
1903
|
+
its changes join the part's as they are."""
|
|
1820
1904
|
def __init__(self, c):
|
|
1821
1905
|
self.first, self.pieces = c, []
|
|
1822
1906
|
self.start = getattr(c, "start_level", None)
|
|
@@ -1842,8 +1926,7 @@ def _built(acc: list, samples: int, ids) -> list:
|
|
|
1842
1926
|
ct += c_
|
|
1843
1927
|
out.append(changes(c.name, ks, lv, ct, -(-samples // c.step), c.step, 0, a.start, pin=ch))
|
|
1844
1928
|
else:
|
|
1845
|
-
out.append(Bits(c.name,
|
|
1846
|
-
{"pin": ch}))
|
|
1929
|
+
out.append(Bits(c.name, _join_bits(a.pieces)[:(samples + 7) // 8], samples, 1, 0, {"pin": ch}))
|
|
1847
1930
|
return out
|
|
1848
1931
|
|
|
1849
1932
|
|
|
@@ -86,6 +86,35 @@ def test_a_stream_is_put_together_on_a_timeline(probe, tmp_path):
|
|
|
86
86
|
assert n > 0 and all(isinstance(c, acquire.Bits) for p in res.parts for c in p.channels)
|
|
87
87
|
|
|
88
88
|
|
|
89
|
+
def test_a_stream_runs_while_the_caller_works_on_the_same_session(probe, tmp_path):
|
|
90
|
+
hst = link.open_host(probe())
|
|
91
|
+
try:
|
|
92
|
+
core.take(hst, 30_000, owner="test")
|
|
93
|
+
seen = []
|
|
94
|
+
|
|
95
|
+
def steps(wait): # sections: a request on the session, then collect meanwhile
|
|
96
|
+
for _ in range(3):
|
|
97
|
+
seen.append(hst.clock_best(2).uptime_ns)
|
|
98
|
+
wait(0.1)
|
|
99
|
+
req = acquire.Request([("A", "GPIO10")], 1_000_000, 0, mode="stream", during=steps, spool_dir=str(tmp_path))
|
|
100
|
+
res = acquire.capture(hst, req)
|
|
101
|
+
assert res.complete and res.parts and len(seen) == 3 and seen == sorted(seen)
|
|
102
|
+
assert sum(p.channels[0].n for p in res.parts) > 0
|
|
103
|
+
with pytest.raises(RuntimeError): # the caller's own failure stops the stream and comes out
|
|
104
|
+
acquire.capture(hst, acquire.Request([("A", "GPIO10")], 1_000_000, 0, mode="stream",
|
|
105
|
+
during=lambda wait: (wait(0.05), (_ for _ in ()).throw(RuntimeError()))))
|
|
106
|
+
assert acquire.capture(hst, acquire.Request([("A", "GPIO10")], 1_000_000, 0, mode="stream", seconds=0.1)).complete
|
|
107
|
+
finally:
|
|
108
|
+
hst.end()
|
|
109
|
+
hst.link.close()
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def test_during_is_for_a_stream_in_place_of_seconds():
|
|
113
|
+
for kw in ({"mode": "oneshot"}, {"mode": "stream", "seconds": 1.0}):
|
|
114
|
+
with pytest.raises(ValueError):
|
|
115
|
+
acquire.Request([("A", "GPIO10")], 1_000_000, 100, during=lambda wait: None, **kw)
|
|
116
|
+
|
|
117
|
+
|
|
89
118
|
def test_format_1_lines_as_their_changes(probe):
|
|
90
119
|
req = acquire.Request([("A", "GPIO10"), ("B", "GPIO11")], 20_000_000, 1000, resolution={"B": 1})
|
|
91
120
|
res = acquire.capture_at(probe(), req)
|
|
@@ -128,11 +157,51 @@ def test_probe_clock_against_the_host():
|
|
|
128
157
|
|
|
129
158
|
|
|
130
159
|
def test_lines_are_named_by_channel_name_or_label(probe):
|
|
131
|
-
src = probe("--label", "13=bus.sda")
|
|
132
|
-
res = acquire.capture_at(src, acquire.Request([("D", "bus.SDA"), ("E", "gpio11")], 20_000_000, 100))
|
|
133
|
-
assert [c.acquisition["pin"] for c in res.channels] == [13, 11]
|
|
134
|
-
assert res.meta["probe_channels"] == {"D": 13, "E": 11}
|
|
160
|
+
src = probe("--label", "13=bus.sda", "--label", "12=bus@PB9")
|
|
161
|
+
res = acquire.capture_at(src, acquire.Request([("D", "bus.SDA"), ("E", "gpio11"), ("F", "BUS@pb9")], 20_000_000, 100))
|
|
162
|
+
assert [c.acquisition["pin"] for c in res.channels] == [13, 11, 12] # by role, by name, by the target pin (S@P)
|
|
163
|
+
assert res.meta["probe_channels"] == {"D": 13, "E": 11, "F": 12}
|
|
135
164
|
with pytest.raises(ValueError, match="no channel of that name"):
|
|
136
165
|
acquire.capture_at(probe(), acquire.Request([("A", "10")], 20_000_000, 100)) # a number is not a name
|
|
137
166
|
with pytest.raises(ValueError, match="no channel carries that label"):
|
|
138
167
|
acquire.capture_at(probe(), acquire.Request([("A", "x035.nrst")], 20_000_000, 100))
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def test_stream_segments_join_bit_by_bit(tmp_path):
|
|
171
|
+
"""A stream's segments need not end on a whole byte of each line (2 lines in 2-bit samples, 65332 samples a
|
|
172
|
+
segment on the P4): they join into one part, bit by bit - parts are cut only where data was lost."""
|
|
173
|
+
import random
|
|
174
|
+
import types
|
|
175
|
+
from oep_client.capture import SegmentInfo
|
|
176
|
+
rnd = random.Random(1)
|
|
177
|
+
n_seg, per = 3, 12 # 12 samples: 3 bytes of the stream, 1.5 bytes a line
|
|
178
|
+
a = [rnd.randrange(2) for _ in range(n_seg * per)]
|
|
179
|
+
b = [rnd.randrange(2) for _ in range(n_seg * per)]
|
|
180
|
+
data = bytearray()
|
|
181
|
+
for i in range(0, len(a), 4): # sample i: bits 2i (A) and 2i + 1 (B) of the stream
|
|
182
|
+
v = 0
|
|
183
|
+
for j in range(4):
|
|
184
|
+
v |= (a[i + j] | b[i + j] << 1) << (2 * j)
|
|
185
|
+
data.append(v)
|
|
186
|
+
segs = {k * 3: SegmentInfo(k * 3, per, 1_000_000 + k * per * 200, 50) for k in range(n_seg)}
|
|
187
|
+
got = types.SimpleNamespace(data=data, segments=segs, gaps=[], start=0)
|
|
188
|
+
cfg = types.SimpleNamespace(rate=5_000_000, width=2, positions=None, event_d={})
|
|
189
|
+
req = acquire.Request([("A", "x"), ("B", "y")], 5_000_000, 0, mode="stream", seconds=1)
|
|
190
|
+
parts, lost = acquire._stream_parts(None, cfg, got, ["A", "B"], [10, 11], req)
|
|
191
|
+
assert not lost and len(parts) == 1
|
|
192
|
+
got_a, got_b = (list(levels(c)) for c in parts[0].channels)
|
|
193
|
+
assert got_a == a and got_b == b
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def test_bits_written_across_bytes(tmp_path):
|
|
197
|
+
import io
|
|
198
|
+
rnd = __import__("random").Random(2)
|
|
199
|
+
want, f, carry = [], io.BytesIO(), None
|
|
200
|
+
for n in (5, 12, 3, 16, 7):
|
|
201
|
+
bits = [rnd.randrange(2) for _ in range(n)]
|
|
202
|
+
want += bits
|
|
203
|
+
col = bytes(sum(bits[i + j] << j for j in range(min(8, n - i))) for i in range(0, n, 8))
|
|
204
|
+
carry = acquire._write_bits(f, carry, col, n)
|
|
205
|
+
acquire._flush_bits(f, carry)
|
|
206
|
+
out = np.unpackbits(np.frombuffer(f.getvalue(), np.uint8), bitorder="little")[: len(want)]
|
|
207
|
+
assert list(out) == want and len(f.getvalue()) == (len(want) + 7) // 8
|
|
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.46 → oep_client_python-0.0.48}/docs/capture-group-geometry-conformance.ja.md
RENAMED
|
File without changes
|
{oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/capture-metadata-conformance.ja.md
RENAMED
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/capture-timeline-conformance.ja.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/config-execution-conformance.ja.md
RENAMED
|
File without changes
|
{oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/config-fallback-conformance.ja.md
RENAMED
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.46 → oep_client_python-0.0.48}/docs/config-power-loss-conformance.ja.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.46 → oep_client_python-0.0.48}/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.46 → oep_client_python-0.0.48}/docs/execution-order-conformance.ja.md
RENAMED
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.46 → oep_client_python-0.0.48}/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.46 → oep_client_python-0.0.48}/docs/host-core-shapes-conformance.ja.md
RENAMED
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.46 → oep_client_python-0.0.48}/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.46 → oep_client_python-0.0.48}/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
|