oep-client-python 0.0.41__py3-none-any.whl → 0.0.43__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. oep_client/__init__.py +1 -1
  2. oep_client/{conformance.py → conformance/__init__.py} +41 -38
  3. oep_client/{conformance_allocator.py → conformance/allocator.py} +2 -2
  4. oep_client/{virtual_allocator_model.py → conformance/allocator_model.py} +2 -2
  5. oep_client/{conformance_allocator_sample.py → conformance/allocator_sample.py} +2 -2
  6. oep_client/{conformance_analog.py → conformance/analog.py} +4 -4
  7. oep_client/{virtual_analog_model.py → conformance/analog_model.py} +6 -6
  8. oep_client/{conformance_analog_payload.py → conformance/analog_payload.py} +1 -1
  9. oep_client/{conformance_analog_sample.py → conformance/analog_sample.py} +1 -1
  10. oep_client/{conformance_arm_adi.py → conformance/arm_adi.py} +2 -2
  11. oep_client/{conformance_arm_adi_blocks.py → conformance/arm_adi_blocks.py} +2 -2
  12. oep_client/{virtual_arm_adi_model.py → conformance/arm_adi_model.py} +2 -2
  13. oep_client/{conformance_arm_adi_sample.py → conformance/arm_adi_sample.py} +1 -1
  14. oep_client/{conformance_attach.py → conformance/attach.py} +5 -6
  15. oep_client/{virtual_attach_model.py → conformance/attach_model.py} +7 -7
  16. oep_client/{conformance_attach_sample.py → conformance/attach_sample.py} +1 -1
  17. oep_client/{virtual_block_model.py → conformance/block_model.py} +2 -2
  18. oep_client/{conformance_block_sample.py → conformance/block_sample.py} +1 -1
  19. oep_client/{conformance_blocks.py → conformance/blocks.py} +3 -3
  20. oep_client/{conformance_capture_group.py → conformance/capture_group.py} +3 -3
  21. oep_client/{conformance_capture_group_geometry.py → conformance/capture_group_geometry.py} +1 -1
  22. oep_client/{virtual_capture_group_geometry_model.py → conformance/capture_group_geometry_model.py} +1 -1
  23. oep_client/{virtual_capture_group_model.py → conformance/capture_group_model.py} +7 -7
  24. oep_client/{conformance_capture_group_sample.py → conformance/capture_group_sample.py} +1 -1
  25. oep_client/{conformance_capture_metadata.py → conformance/capture_metadata.py} +2 -2
  26. oep_client/{virtual_capture_metadata_model.py → conformance/capture_metadata_model.py} +2 -2
  27. oep_client/{conformance_capture_serial.py → conformance/capture_serial.py} +3 -3
  28. oep_client/{conformance_capture_serial_sample.py → conformance/capture_serial_sample.py} +5 -5
  29. oep_client/{conformance_capture_timeline.py → conformance/capture_timeline.py} +2 -2
  30. oep_client/{conformance_capture_timeline_lifecycle.py → conformance/capture_timeline_lifecycle.py} +2 -2
  31. oep_client/{virtual_capture_timeline_model.py → conformance/capture_timeline_model.py} +7 -7
  32. oep_client/{conformance_capture_timeline_sample.py → conformance/capture_timeline_sample.py} +1 -1
  33. oep_client/{conformance_clock.py → conformance/clock.py} +1 -1
  34. oep_client/{virtual_clock_model.py → conformance/clock_model.py} +2 -2
  35. oep_client/{conformance_clock_sample.py → conformance/clock_sample.py} +1 -1
  36. oep_client/{conformance_core_fixed_fields.py → conformance/core_fixed_fields.py} +2 -2
  37. oep_client/{conformance_core_smoke.py → conformance/core_smoke.py} +3 -3
  38. oep_client/{conformance_corr.py → conformance/corr.py} +2 -2
  39. oep_client/{conformance_cut.py → conformance/cut.py} +2 -2
  40. oep_client/{virtual_cut_model.py → conformance/cut_model.py} +3 -3
  41. oep_client/{conformance_cut_sample.py → conformance/cut_sample.py} +1 -1
  42. oep_client/{conformance_data.py → conformance/data.py} +2 -2
  43. oep_client/{virtual_data_model.py → conformance/data_model.py} +4 -4
  44. oep_client/{conformance_data_sample.py → conformance/data_sample.py} +1 -1
  45. oep_client/{conformance_debug.py → conformance/debug.py} +2 -2
  46. oep_client/{virtual_debug_model.py → conformance/debug_model.py} +2 -2
  47. oep_client/{conformance_debug_sample.py → conformance/debug_sample.py} +1 -1
  48. oep_client/{virtual_declaration_model.py → conformance/declaration_model.py} +2 -2
  49. oep_client/{conformance_dependencies.py → conformance/dependencies.py} +1 -1
  50. oep_client/{virtual_dependency_model.py → conformance/dependency_model.py} +3 -3
  51. oep_client/{conformance_dependency_sample.py → conformance/dependency_sample.py} +1 -1
  52. oep_client/{conformance_discovery.py → conformance/discovery.py} +1 -1
  53. oep_client/{conformance_dmseq.py → conformance/dmseq.py} +2 -2
  54. oep_client/{virtual_dmseq_model.py → conformance/dmseq_model.py} +3 -3
  55. oep_client/{conformance_dmseq_sample.py → conformance/dmseq_sample.py} +1 -1
  56. oep_client/{conformance_dmseq_target.py → conformance/dmseq_target.py} +2 -2
  57. oep_client/{virtual_dmseq_target_model.py → conformance/dmseq_target_model.py} +1 -1
  58. oep_client/{conformance_dmseq_target_sample.py → conformance/dmseq_target_sample.py} +2 -2
  59. oep_client/{conformance_execution_order.py → conformance/execution_order.py} +2 -2
  60. oep_client/{conformance_execution_order_sample.py → conformance/execution_order_sample.py} +1 -1
  61. oep_client/{conformance_exhausted.py → conformance/exhausted.py} +5 -5
  62. oep_client/{conformance_exhausted_sample.py → conformance/exhausted_sample.py} +2 -2
  63. oep_client/{conformance_fixture_metadata.py → conformance/fixture_metadata.py} +2 -2
  64. oep_client/{virtual_fixture_metadata_model.py → conformance/fixture_metadata_model.py} +2 -2
  65. oep_client/{conformance_gpio.py → conformance/gpio.py} +2 -2
  66. oep_client/{conformance_gpio_lifecycle.py → conformance/gpio_lifecycle.py} +2 -2
  67. oep_client/{virtual_gpio_lifecycle_model.py → conformance/gpio_lifecycle_model.py} +1 -1
  68. oep_client/{conformance_gpio_lifecycle_sample.py → conformance/gpio_lifecycle_sample.py} +1 -1
  69. oep_client/{virtual_gpio_model.py → conformance/gpio_model.py} +2 -2
  70. oep_client/{conformance_gpio_sample.py → conformance/gpio_sample.py} +1 -1
  71. oep_client/{conformance_host_core.py → conformance/host_core.py} +3 -3
  72. oep_client/{conformance_host_deadline.py → conformance/host_deadline.py} +2 -2
  73. oep_client/{conformance_host_deadline_sample.py → conformance/host_deadline_sample.py} +2 -2
  74. oep_client/{conformance_host_notifications.py → conformance/host_notifications.py} +3 -3
  75. oep_client/{conformance_host_notifications_sample.py → conformance/host_notifications_sample.py} +1 -1
  76. oep_client/{conformance_host_request_sample.py → conformance/host_request_sample.py} +1 -1
  77. oep_client/{conformance_host_requests.py → conformance/host_requests.py} +7 -7
  78. oep_client/{conformance_host_resend.py → conformance/host_resend.py} +3 -3
  79. oep_client/{conformance_host_resend_sample.py → conformance/host_resend_sample.py} +4 -4
  80. oep_client/{conformance_host_tlv.py → conformance/host_tlv.py} +3 -3
  81. oep_client/{conformance_host_tlv_sample.py → conformance/host_tlv_sample.py} +1 -1
  82. oep_client/{conformance_host_values.py → conformance/host_values.py} +3 -3
  83. oep_client/{conformance_host_values_sample.py → conformance/host_values_sample.py} +1 -1
  84. oep_client/{conformance_host_wait.py → conformance/host_wait.py} +3 -3
  85. oep_client/{conformance_host_wait_sample.py → conformance/host_wait_sample.py} +2 -2
  86. oep_client/{conformance_i2c.py → conformance/i2c.py} +2 -2
  87. oep_client/{virtual_i2c_model.py → conformance/i2c_model.py} +5 -5
  88. oep_client/{conformance_i2c_sample.py → conformance/i2c_sample.py} +1 -1
  89. oep_client/{conformance_interface_smoke.py → conformance/interface_smoke.py} +5 -5
  90. oep_client/{conformance_interfaces.py → conformance/interfaces.py} +1 -1
  91. oep_client/{conformance_lease.py → conformance/lease.py} +2 -2
  92. oep_client/{conformance_lease_sample.py → conformance/lease_sample.py} +2 -2
  93. oep_client/{conformance_link_routes.py → conformance/link_routes.py} +3 -3
  94. oep_client/{virtual_link_routes_model.py → conformance/link_routes_model.py} +2 -2
  95. oep_client/{conformance_link_routes_sample.py → conformance/link_routes_sample.py} +1 -1
  96. oep_client/{virtual_link_transfer_model.py → conformance/link_transfer_model.py} +3 -3
  97. oep_client/{conformance_link_transfer_sample.py → conformance/link_transfer_sample.py} +1 -1
  98. oep_client/{conformance_link_transfers.py → conformance/link_transfers.py} +2 -2
  99. oep_client/{conformance_logic.py → conformance/logic.py} +5 -9
  100. oep_client/{virtual_logic_model.py → conformance/logic_model.py} +6 -6
  101. oep_client/{conformance_logic_sample.py → conformance/logic_sample.py} +1 -1
  102. oep_client/{conformance_mailbox.py → conformance/mailbox.py} +2 -2
  103. oep_client/{virtual_mailbox_model.py → conformance/mailbox_model.py} +2 -2
  104. oep_client/{conformance_mailbox_sample.py → conformance/mailbox_sample.py} +1 -1
  105. oep_client/{virtual_notification_model.py → conformance/notification_model.py} +5 -5
  106. oep_client/{conformance_notification_retention.py → conformance/notification_retention.py} +2 -2
  107. oep_client/{conformance_notification_retention_sample.py → conformance/notification_retention_sample.py} +3 -3
  108. oep_client/{conformance_notification_sequence.py → conformance/notification_sequence.py} +2 -2
  109. oep_client/{conformance_notification_sequence_sample.py → conformance/notification_sequence_sample.py} +1 -1
  110. oep_client/{virtual_oep_declaration_model.py → conformance/oep_declaration_model.py} +5 -5
  111. oep_client/{conformance_oep_declarations.py → conformance/oep_declarations.py} +1 -1
  112. oep_client/{conformance_oep_smoke.py → conformance/oep_smoke.py} +5 -5
  113. oep_client/{virtual_outcome_model.py → conformance/outcome_model.py} +2 -2
  114. oep_client/{conformance_outcome_sample.py → conformance/outcome_sample.py} +1 -1
  115. oep_client/{conformance_outcomes.py → conformance/outcomes.py} +1 -1
  116. oep_client/{conformance_pipeline.py → conformance/pipeline.py} +1 -1
  117. oep_client/{virtual_pipeline_model.py → conformance/pipeline_model.py} +1 -1
  118. oep_client/{conformance_pipeline_sample.py → conformance/pipeline_sample.py} +1 -1
  119. oep_client/{conformance_port_speed.py → conformance/port_speed.py} +2 -2
  120. oep_client/{conformance_port_speed_execution.py → conformance/port_speed_execution.py} +2 -2
  121. oep_client/{virtual_port_speed_execution_model.py → conformance/port_speed_execution_model.py} +2 -2
  122. oep_client/{conformance_port_speed_execution_sample.py → conformance/port_speed_execution_sample.py} +1 -1
  123. oep_client/{conformance_port_speed_lifecycle.py → conformance/port_speed_lifecycle.py} +2 -2
  124. oep_client/{virtual_port_speed_model.py → conformance/port_speed_model.py} +2 -2
  125. oep_client/{conformance_port_speed_sample.py → conformance/port_speed_sample.py} +1 -1
  126. oep_client/{conformance_probe_input.py → conformance/probe_input.py} +3 -3
  127. oep_client/{conformance_probe_input_sample.py → conformance/probe_input_sample.py} +4 -4
  128. oep_client/{conformance_recovery.py → conformance/recovery.py} +4 -4
  129. oep_client/{conformance_recovery_race_sample.py → conformance/recovery_race_sample.py} +2 -2
  130. oep_client/{conformance_recovery_races.py → conformance/recovery_races.py} +5 -5
  131. oep_client/{conformance_recovery_sample.py → conformance/recovery_sample.py} +2 -2
  132. oep_client/{conformance_refusal_order.py → conformance/refusal_order.py} +3 -3
  133. oep_client/{conformance_refusal_order_sample.py → conformance/refusal_order_sample.py} +4 -4
  134. oep_client/{conformance_registered_ops.py → conformance/registered_ops.py} +1 -1
  135. oep_client/{virtual_registered_ops_model.py → conformance/registered_ops_model.py} +3 -3
  136. oep_client/{conformance_replay_pressure.py → conformance/replay_pressure.py} +2 -2
  137. oep_client/{conformance_reset.py → conformance/reset.py} +4 -4
  138. oep_client/{virtual_reset_model.py → conformance/reset_model.py} +6 -6
  139. oep_client/{conformance_reset_sample.py → conformance/reset_sample.py} +1 -1
  140. oep_client/{virtual_resource_model.py → conformance/resource_model.py} +3 -3
  141. oep_client/{conformance_resource_sample.py → conformance/resource_sample.py} +1 -1
  142. oep_client/{conformance_resources.py → conformance/resources.py} +1 -1
  143. oep_client/{conformance_response_race.py → conformance/response_race.py} +3 -3
  144. oep_client/{conformance_response_race_sample.py → conformance/response_race_sample.py} +3 -3
  145. oep_client/{conformance_restart.py → conformance/restart.py} +2 -2
  146. oep_client/{virtual_restart_model.py → conformance/restart_model.py} +2 -2
  147. oep_client/{conformance_restart_sample.py → conformance/restart_sample.py} +2 -2
  148. oep_client/{conformance_retention.py → conformance/retention.py} +7 -14
  149. oep_client/{conformance_retention_lifecycle.py → conformance/retention_lifecycle.py} +2 -2
  150. oep_client/{conformance_retention_lifecycle_sample.py → conformance/retention_lifecycle_sample.py} +1 -1
  151. oep_client/{virtual_retention_model.py → conformance/retention_model.py} +3 -3
  152. oep_client/{conformance_retention_sample.py → conformance/retention_sample.py} +1 -1
  153. oep_client/{conformance_retry.py → conformance/retry.py} +2 -2
  154. oep_client/{virtual_retry_model.py → conformance/retry_model.py} +2 -2
  155. oep_client/{conformance_retry_sample.py → conformance/retry_sample.py} +1 -1
  156. oep_client/{virtual_route_model.py → conformance/route_model.py} +5 -5
  157. oep_client/{conformance_route_sample.py → conformance/route_sample.py} +1 -1
  158. oep_client/{conformance_routes.py → conformance/routes.py} +1 -1
  159. oep_client/{conformance_run.py → conformance/run.py} +4 -4
  160. oep_client/{virtual_run_model.py → conformance/run_model.py} +4 -4
  161. oep_client/{conformance_run_sample.py → conformance/run_sample.py} +1 -1
  162. oep_client/{conformance_scan.py → conformance/scan.py} +5 -8
  163. oep_client/{virtual_scan_model.py → conformance/scan_model.py} +4 -5
  164. oep_client/{conformance_scan_options.py → conformance/scan_options.py} +6 -6
  165. oep_client/{virtual_scan_options_model.py → conformance/scan_options_model.py} +8 -10
  166. oep_client/{conformance_scan_options_sample.py → conformance/scan_options_sample.py} +1 -1
  167. oep_client/{conformance_scan_sample.py → conformance/scan_sample.py} +1 -1
  168. oep_client/{conformance_selected_metadata.py → conformance/selected_metadata.py} +2 -2
  169. oep_client/{virtual_selected_metadata_model.py → conformance/selected_metadata_model.py} +2 -2
  170. oep_client/{conformance_session_loss.py → conformance/session_loss.py} +4 -4
  171. oep_client/{conformance_session_loss_sample.py → conformance/session_loss_sample.py} +2 -2
  172. oep_client/{conformance_session_smoke.py → conformance/session_smoke.py} +2 -2
  173. oep_client/{conformance_spi.py → conformance/spi.py} +2 -2
  174. oep_client/{virtual_spi_model.py → conformance/spi_model.py} +2 -2
  175. oep_client/{conformance_spi_sample.py → conformance/spi_sample.py} +1 -1
  176. oep_client/{conformance_step.py → conformance/step.py} +3 -3
  177. oep_client/{virtual_step_model.py → conformance/step_model.py} +3 -3
  178. oep_client/{conformance_step_sample.py → conformance/step_sample.py} +1 -1
  179. oep_client/{conformance_stream.py → conformance/stream.py} +1 -1
  180. oep_client/{virtual_stream_model.py → conformance/stream_model.py} +5 -5
  181. oep_client/{conformance_stream_sample.py → conformance/stream_sample.py} +1 -1
  182. oep_client/{conformance_subscription_sample.py → conformance/subscription_sample.py} +1 -1
  183. oep_client/{conformance_subscriptions.py → conformance/subscriptions.py} +1 -1
  184. oep_client/{conformance_tcp.py → conformance/tcp.py} +1 -1
  185. oep_client/{conformance_tcp_peers.py → conformance/tcp_peers.py} +3 -3
  186. oep_client/{conformance_tcp_recovery.py → conformance/tcp_recovery.py} +3 -3
  187. oep_client/{conformance_tcp_recovery_sample.py → conformance/tcp_recovery_sample.py} +6 -6
  188. oep_client/{virtual_tlv_request_model.py → conformance/tlv_request_model.py} +5 -4
  189. oep_client/{conformance_tlv_requests.py → conformance/tlv_requests.py} +4 -8
  190. oep_client/{conformance_uart.py → conformance/uart.py} +5 -6
  191. oep_client/{virtual_uart_model.py → conformance/uart_model.py} +5 -6
  192. oep_client/{conformance_uart_sample.py → conformance/uart_sample.py} +1 -1
  193. oep_client/{conformance_uart_stream.py → conformance/uart_stream.py} +2 -2
  194. oep_client/{conformance_uart_stream_sample.py → conformance/uart_stream_sample.py} +1 -1
  195. oep_client/{conformance_usb.py → conformance/usb.py} +4 -4
  196. oep_client/{conformance_usb_cases.py → conformance/usb_cases.py} +3 -3
  197. oep_client/{conformance_usb_model.py → conformance/usb_model.py} +4 -4
  198. oep_client/{conformance_wire_options.py → conformance/wire_options.py} +7 -4
  199. oep_client/{virtual_wire_options_model.py → conformance/wire_options_model.py} +5 -10
  200. oep_client/{conformance_wire_options_sample.py → conformance/wire_options_sample.py} +1 -1
  201. oep_client/{conformance_writer_lease.py → conformance/writer_lease.py} +2 -2
  202. oep_client/{virtual_writer_lease_model.py → conformance/writer_lease_model.py} +2 -2
  203. oep_client/{conformance_writer_lease_sample.py → conformance/writer_lease_sample.py} +1 -1
  204. oep_client/core.py +4 -3
  205. oep_client/endpoint.py +7 -7
  206. oep_client/host.py +15 -7
  207. oep_client/registry.py +4 -4
  208. oep_client/virtual_bench.py +2 -2
  209. oep_client/virtual_core.py +2 -2
  210. {oep_client_python-0.0.41.dist-info → oep_client_python-0.0.43.dist-info}/METADATA +1 -1
  211. oep_client_python-0.0.43.dist-info/RECORD +257 -0
  212. oep_client_python-0.0.41.dist-info/RECORD +0 -257
  213. /oep_client/{conformance_host_core_sample.py → conformance/host_core_sample.py} +0 -0
  214. /oep_client/{conformance_serial.py → conformance/serial.py} +0 -0
  215. {oep_client_python-0.0.41.dist-info → oep_client_python-0.0.43.dist-info}/WHEEL +0 -0
  216. {oep_client_python-0.0.41.dist-info → oep_client_python-0.0.43.dist-info}/entry_points.txt +0 -0
  217. {oep_client_python-0.0.41.dist-info → oep_client_python-0.0.43.dist-info}/licenses/LICENSE +0 -0
oep_client/__init__.py CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  __all__ = ["__version__"]
4
4
 
5
- __version__ = "0.0.41"
5
+ __version__ = "0.0.43"
@@ -18,7 +18,7 @@ import struct
18
18
  import subprocess
19
19
  import time
20
20
 
21
- from .hardware import equipment_lock, tomllib
21
+ from ..hardware import equipment_lock, tomllib
22
22
 
23
23
 
24
24
  CORE_CASES = (
@@ -112,39 +112,39 @@ def ops(value):
112
112
 
113
113
 
114
114
 
115
- CHECKER_SOURCES = ('conformance.py', 'conformance_core_smoke.py', 'conformance_session_smoke.py', 'conformance_interface_smoke.py', 'conformance_oep_smoke.py', 'conformance_execution_order.py', 'conformance_execution_order_sample.py', 'conformance_host_notifications.py', 'conformance_host_notifications_sample.py',
116
- 'conformance_host_values.py', 'conformance_host_values_sample.py',
117
- 'conformance_tlv_requests.py',
118
- 'conformance_host_requests.py', 'conformance_host_request_sample.py',
119
- 'conformance_link_transfers.py', 'conformance_link_transfer_sample.py',
120
- 'conformance_link_routes.py', 'conformance_link_routes_sample.py',
121
- 'conformance_port_speed.py', 'conformance_port_speed_sample.py', 'conformance_port_speed_lifecycle.py', 'conformance_port_speed_execution.py', 'conformance_port_speed_execution_sample.py',
122
- 'conformance_host_tlv.py', 'conformance_host_tlv_sample.py', 'conformance_host_core.py', 'conformance_core_fixed_fields.py', 'conformance_probe_input.py', 'conformance_probe_input_sample.py', 'conformance_refusal_order.py', 'conformance_refusal_order_sample.py', 'conformance_restart.py', 'conformance_restart_sample.py', 'conformance_host_wait.py', 'conformance_host_wait_sample.py', 'conformance_host_deadline.py', 'conformance_host_deadline_sample.py', 'conformance_host_resend.py', 'conformance_host_resend_sample.py', 'conformance_tcp_recovery.py', 'conformance_tcp_recovery_sample.py', 'conformance_host_core_sample.py', 'conformance_allocator.py', 'conformance_allocator_sample.py', 'conformance_discovery.py', 'conformance_clock.py', 'conformance_clock_sample.py',
123
- 'conformance_notification_sequence.py', 'conformance_notification_sequence_sample.py', 'conformance_notification_retention.py', 'conformance_notification_retention_sample.py', 'conformance_serial.py', 'conformance_tcp.py',
124
- 'conformance_tcp_peers.py', 'conformance_usb.py', 'conformance_usb_cases.py',
125
- 'pytest_conformance.py', 'conformance_resources.py', 'conformance_resource_sample.py',
126
- 'conformance_subscriptions.py', 'conformance_subscription_sample.py',
127
- 'conformance_data.py', 'conformance_data_sample.py',
128
- 'conformance_routes.py', 'conformance_route_sample.py',
129
- 'conformance_pipeline.py', 'conformance_pipeline_sample.py',
130
- 'conformance_replay_pressure.py', 'conformance_lease.py', 'conformance_lease_sample.py',
131
- 'conformance_retention.py', 'conformance_retention_sample.py',
132
- 'conformance_retention_lifecycle.py', 'conformance_retention_lifecycle_sample.py',
133
- 'conformance_corr.py', 'conformance_recovery.py', 'conformance_recovery_sample.py',
134
- 'conformance_recovery_races.py', 'conformance_recovery_race_sample.py',
135
- 'conformance_session_loss.py', 'conformance_session_loss_sample.py',
136
- 'conformance_exhausted.py', 'conformance_exhausted_sample.py', 'conformance_interfaces.py',
137
- 'conformance_stream.py', 'conformance_stream_sample.py',
138
- 'conformance_outcomes.py', 'conformance_outcome_sample.py',
139
- 'conformance_dependencies.py', 'conformance_dependency_sample.py', 'conformance_oep_declarations.py', 'conformance_attach.py', 'conformance_attach_sample.py', 'conformance_scan.py', 'conformance_scan_sample.py', 'conformance_mailbox.py', 'conformance_mailbox_sample.py', 'conformance_dmseq.py', 'conformance_dmseq_sample.py', 'conformance_dmseq_target.py', 'conformance_dmseq_target_sample.py', 'conformance_debug.py', 'conformance_debug_sample.py', 'conformance_blocks.py', 'conformance_block_sample.py', 'conformance_step.py', 'conformance_step_sample.py', 'conformance_reset.py', 'conformance_reset_sample.py', 'conformance_run.py', 'conformance_run_sample.py', 'conformance_wire_options.py', 'conformance_wire_options_sample.py', 'conformance_scan_options.py', 'conformance_scan_options_sample.py', 'conformance_retry.py', 'conformance_retry_sample.py', 'conformance_cut.py', 'conformance_cut_sample.py', 'conformance_writer_lease.py', 'conformance_writer_lease_sample.py', 'conformance_response_race.py', 'conformance_response_race_sample.py', 'conformance_registered_ops.py', 'conformance_selected_metadata.py','conformance_fixture_metadata.py','conformance_capture_metadata.py','conformance_gpio.py','conformance_gpio_sample.py','conformance_gpio_lifecycle.py','conformance_gpio_lifecycle_sample.py','conformance_uart.py','conformance_uart_sample.py','conformance_uart_stream.py','conformance_uart_stream_sample.py','conformance_i2c.py','conformance_i2c_sample.py','conformance_spi.py','conformance_spi_sample.py','conformance_logic.py','conformance_logic_sample.py','conformance_analog_payload.py','conformance_analog.py','conformance_analog_sample.py','conformance_capture_group.py','conformance_capture_group_sample.py','conformance_capture_group_geometry.py','conformance_capture_timeline.py','conformance_capture_timeline_sample.py','conformance_capture_timeline_lifecycle.py', 'conformance_capture_serial.py', 'conformance_capture_serial_sample.py','conformance_arm_adi.py','conformance_arm_adi_sample.py','conformance_arm_adi_blocks.py')
115
+ CHECKER_SOURCES = ('__init__.py', 'core_smoke.py', 'session_smoke.py', 'interface_smoke.py', 'oep_smoke.py', 'execution_order.py', 'execution_order_sample.py', 'host_notifications.py', 'host_notifications_sample.py',
116
+ 'host_values.py', 'host_values_sample.py',
117
+ 'tlv_requests.py',
118
+ 'host_requests.py', 'host_request_sample.py',
119
+ 'link_transfers.py', 'link_transfer_sample.py',
120
+ 'link_routes.py', 'link_routes_sample.py',
121
+ 'port_speed.py', 'port_speed_sample.py', 'port_speed_lifecycle.py', 'port_speed_execution.py', 'port_speed_execution_sample.py',
122
+ 'host_tlv.py', 'host_tlv_sample.py', 'host_core.py', 'core_fixed_fields.py', 'probe_input.py', 'probe_input_sample.py', 'refusal_order.py', 'refusal_order_sample.py', 'restart.py', 'restart_sample.py', 'host_wait.py', 'host_wait_sample.py', 'host_deadline.py', 'host_deadline_sample.py', 'host_resend.py', 'host_resend_sample.py', 'tcp_recovery.py', 'tcp_recovery_sample.py', 'host_core_sample.py', 'allocator.py', 'allocator_sample.py', 'discovery.py', 'clock.py', 'clock_sample.py',
123
+ 'notification_sequence.py', 'notification_sequence_sample.py', 'notification_retention.py', 'notification_retention_sample.py', 'serial.py', 'tcp.py',
124
+ 'tcp_peers.py', 'usb.py', 'usb_cases.py',
125
+ '../pytest_conformance.py', 'resources.py', 'resource_sample.py',
126
+ 'subscriptions.py', 'subscription_sample.py',
127
+ 'data.py', 'data_sample.py',
128
+ 'routes.py', 'route_sample.py',
129
+ 'pipeline.py', 'pipeline_sample.py',
130
+ 'replay_pressure.py', 'lease.py', 'lease_sample.py',
131
+ 'retention.py', 'retention_sample.py',
132
+ 'retention_lifecycle.py', 'retention_lifecycle_sample.py',
133
+ 'corr.py', 'recovery.py', 'recovery_sample.py',
134
+ 'recovery_races.py', 'recovery_race_sample.py',
135
+ 'session_loss.py', 'session_loss_sample.py',
136
+ 'exhausted.py', 'exhausted_sample.py', 'interfaces.py',
137
+ 'stream.py', 'stream_sample.py',
138
+ 'outcomes.py', 'outcome_sample.py',
139
+ 'dependencies.py', 'dependency_sample.py', 'oep_declarations.py', 'attach.py', 'attach_sample.py', 'scan.py', 'scan_sample.py', 'mailbox.py', 'mailbox_sample.py', 'dmseq.py', 'dmseq_sample.py', 'dmseq_target.py', 'dmseq_target_sample.py', 'debug.py', 'debug_sample.py', 'blocks.py', 'block_sample.py', 'step.py', 'step_sample.py', 'reset.py', 'reset_sample.py', 'run.py', 'run_sample.py', 'wire_options.py', 'wire_options_sample.py', 'scan_options.py', 'scan_options_sample.py', 'retry.py', 'retry_sample.py', 'cut.py', 'cut_sample.py', 'writer_lease.py', 'writer_lease_sample.py', 'response_race.py', 'response_race_sample.py', 'registered_ops.py', 'selected_metadata.py','fixture_metadata.py','capture_metadata.py','gpio.py','gpio_sample.py','gpio_lifecycle.py','gpio_lifecycle_sample.py','uart.py','uart_sample.py','uart_stream.py','uart_stream_sample.py','i2c.py','i2c_sample.py','spi.py','spi_sample.py','logic.py','logic_sample.py','analog_payload.py','analog.py','analog_sample.py','capture_group.py','capture_group_sample.py','capture_group_geometry.py','capture_timeline.py','capture_timeline_sample.py','capture_timeline_lifecycle.py', 'capture_serial.py', 'capture_serial_sample.py','arm_adi.py','arm_adi_sample.py','arm_adi_blocks.py')
140
140
 
141
141
 
142
142
  def checker_sources_sha256():
143
- return {name: hashlib.sha256(Path(__file__).with_name(name).read_bytes()).hexdigest()
143
+ return {name: hashlib.sha256((Path(__file__).parent / name).read_bytes()).hexdigest()
144
144
  for name in CHECKER_SOURCES}
145
145
 
146
146
 
147
- REVIEWED_CORE_SHA256 = 'd63f99f1809146ad41f1643526c81417b366d7a9d85af3845daee6654a229a14' # oep-spec 02c08c9 docs/oep-core.ja.md
147
+ REVIEWED_CORE_SHA256 = '699f7eb6333b6eb6678ddcf27074c03544f0f0a6ee0ef6ccdf02edd3757f962e' # oep-spec 364827b docs/oep-core.ja.md
148
148
 
149
149
 
150
150
  def require_reviewed_contract(registry, spec=None):
@@ -781,13 +781,16 @@ class Checks:
781
781
  tail = b'\x01' + struct.pack('<H', len(owner)) + owner
782
782
  if not self.owner_displayed(tail):
783
783
  raise NotApplicable('owner display not implemented (core §6.4: optional); a non-critical owner is ignored')
784
- tail += b'\x81\x06\x00second' # same tag, critical flag, first occurrence wins
784
+ twice = tail + b'\x81\x06\x00second' # the same tag again (critical bit set): malformed (core §2.3)
785
+ self.corr = 0
786
+ self.rejected(self.request(self.core['open'], struct.pack('<IB', 3000, 0) + twice,
787
+ session=secrets.randbelow(0xffffffff) + 1), 'malformed')
785
788
  with self.holding(tail=tail) as sid:
786
789
  def observed_owner():
787
790
  p = self.success(self.request(self.core['lock_state']))
788
791
  require(len(p) >= 5 and p[0] == 1, 'owner lock state')
789
792
  values = dict(reversed(tlvs(p[5:])))
790
- require(values.get(1) == owner, 'owner changed or first duplicate not used')
793
+ require(values.get(1) == owner, 'owner changed')
791
794
  observed_owner()
792
795
  self.success(self.request(self.core['open'], struct.pack('<IB', 3000, 0) + b'\x01\x06\x00second', session=sid))
793
796
  observed_owner()
@@ -838,7 +841,7 @@ class Checks:
838
841
  tlvs(self.success(self.request(self.core['keepalive'], session=new)))
839
842
 
840
843
  def serial_case(self, kind):
841
- from .conformance_serial import frame, WireError
844
+ from .serial import frame, WireError
842
845
  with self.holding(60000):
843
846
  req = self.request(self.core['clock'])
844
847
  good = frame(req)
@@ -897,8 +900,8 @@ class Checks:
897
900
  record['serial_wire'] = self.wire.last_exchange
898
901
 
899
902
  def tcp_case(self, kind):
900
- from .conformance_tcp import frame
901
- from .conformance_serial import WireError
903
+ from .tcp import frame
904
+ from .serial import WireError
902
905
  req = self.request(self.core['clock']) # no session or target mutations
903
906
  good = frame(req)
904
907
  pause, close = 0, False
@@ -984,12 +987,12 @@ class Checks:
984
987
  for name, kind in RECONNECT_CASES:
985
988
  self.check(name, 'transports §3; core §5.1/6.1/9', lambda kind=kind: self.reconnect(kind))
986
989
  if self.usb_wire is not None:
987
- from .conformance_usb_cases import USB_CASES, HID_CASES, run
990
+ from .usb_cases import USB_CASES, HID_CASES, run
988
991
  cases = USB_CASES + (HID_CASES if self.usb_wire.kind == 'hid' else ())
989
992
  for name, kind in cases:
990
993
  self.check(name, 'transports §1/2/3; core §2.4', lambda kind=kind: run(self, kind))
991
994
  if self.tcp_peer_open is not None:
992
- from .conformance_tcp_peers import Peers
995
+ from .tcp_peers import Peers
993
996
  peers = Peers(self)
994
997
  for name, kind in TCP_PEER_CASES:
995
998
  self.check(name, 'transports §1/3; core §4.2/4.4/6', lambda kind=kind: getattr(peers, kind)())
@@ -1036,7 +1039,7 @@ def main(argv=None):
1036
1039
  require_reviewed_contract(registry, spec)
1037
1040
  except Violation as exc:
1038
1041
  parser.error(str(exc))
1039
- from . import __version__, link
1042
+ from .. import __version__, link
1040
1043
  report = {'status': 'failed', 'spec': spec, 'client_version': __version__,
1041
1044
  'checker_sha256': hashlib.sha256(Path(__file__).read_bytes()).hexdigest(),
1042
1045
  'checker_sources_sha256': checker_sources_sha256(),
@@ -1051,7 +1054,7 @@ def main(argv=None):
1051
1054
  if args.framing == 'serial':
1052
1055
  if args.address.startswith(('usb:', 'tcp:', 'tcp://')):
1053
1056
  raise ValueError('serial framing needs an explicit serial port')
1054
- from .conformance_serial import SerialWire
1057
+ from .serial import SerialWire
1055
1058
  stream = link.open_serial(args.address)
1056
1059
  try:
1057
1060
  wire = SerialWire(stream)
@@ -1067,7 +1070,7 @@ def main(argv=None):
1067
1070
  link._exclusive_off(wire.stream)
1068
1071
  wire.stream.close()
1069
1072
  elif args.framing == 'tcp':
1070
- from .conformance_tcp import TcpWire
1073
+ from .tcp import TcpWire
1071
1074
  wire = TcpWire.open(args.address)
1072
1075
  try:
1073
1076
  checks = Checks(wire.send, registry, args.unit)
@@ -1,7 +1,7 @@
1
1
  """Core resource ID exhaustion, session retention and reboot boundary checks."""
2
2
  import struct
3
- from .conformance import require,tlvs
4
- from .conformance_resources import ResourceChecks
3
+ from . import require,tlvs
4
+ from .resources import ResourceChecks
5
5
 
6
6
 
7
7
  class AllocatorChecks(ResourceChecks):
@@ -1,7 +1,7 @@
1
1
  """Logical resource allocator boundary fixture; seed is not a history of real allocations."""
2
2
  import copy
3
- from .virtual_core import Core
4
- from .virtual_resource_model import ResourceModel, Resources
3
+ from ..virtual_core import Core
4
+ from .resource_model import ResourceModel, Resources
5
5
 
6
6
 
7
7
  class U32Resources(Resources):
@@ -1,6 +1,6 @@
1
1
  """Explicit allocator boundary controls; no probe-model imports."""
2
- from .conformance_resource_sample import SampleResourceAdapter
3
- from .conformance_route_sample import SampleRouteAdapter
2
+ from .resource_sample import SampleResourceAdapter
3
+ from .route_sample import SampleRouteAdapter
4
4
 
5
5
 
6
6
  class SampleAllocatorAdapter(SampleResourceAdapter,SampleRouteAdapter):
@@ -1,9 +1,9 @@
1
1
  """Selected-SPEC ADC operations checked independently of model and Host decoder."""
2
2
  import struct
3
- from .conformance import require, tlvs
4
- from .conformance_logic import LogicChecks
5
- from .conformance_analog_payload import AnalogPayloadChecks
6
- from .conformance_registered_ops import RegisteredOpsChecks
3
+ from . import require, tlvs
4
+ from .logic import LogicChecks
5
+ from .analog_payload import AnalogPayloadChecks
6
+ from .registered_ops import RegisteredOpsChecks
7
7
 
8
8
 
9
9
  class AnalogChecks(LogicChecks):
@@ -6,11 +6,11 @@ legacy virtual bench sampler or Host capture decoder.
6
6
  import struct
7
7
 
8
8
  from fractions import Fraction
9
- from .virtual_logic_model import Logic, LogicModel
10
- from .virtual_core import Core, Reject, tlv
11
- from . import registry as _reg
12
- from .catalog import pack_ops
13
- from .virtual_names import R, DC, cause
9
+ from .logic_model import Logic, LogicModel
10
+ from ..virtual_core import Core, Reject, tlv
11
+ from .. import registry as _reg
12
+ from ..catalog import pack_ops
13
+ from ..virtual_names import R, DC, cause
14
14
 
15
15
  # oep.fixture.analog's numbers by name (capture §3)
16
16
  _A = _reg.FIXTURE_ANALOG
@@ -77,7 +77,7 @@ class Analog(Logic):
77
77
  if not known: # every copy of an unknown tag: critical -> unsupported (core §2.3)
78
78
  if raw&128:raise Reject(R['unsupported'],bytes((raw,)))
79
79
  continue
80
- if key in seen and key!=C['frontend']:later.append((key,raw,value));continue # a later copy: checked in settings (core §2.3)
80
+ if key in seen and key!=C['frontend']:raise Reject(R['malformed']) # a non-repeating tag twice (core §2.3); frontend repeats
81
81
  seen.add(key)
82
82
  if key==C['frontend']:frontends.append((raw,value))
83
83
  else:got[key]=(raw,value)
@@ -6,7 +6,7 @@ checks payload contracts, not execution, session ownership or physical accuracy.
6
6
  import re
7
7
  import struct
8
8
  from fractions import Fraction
9
- from .conformance import require, tlvs
9
+ from . import require, tlvs
10
10
 
11
11
 
12
12
  class AnalogPayloadChecks:
@@ -1,5 +1,5 @@
1
1
  """Explicit ADC sample adapter; does not import any probe implementation."""
2
- from .conformance_route_sample import SampleRouteAdapter
2
+ from .route_sample import SampleRouteAdapter
3
3
 
4
4
 
5
5
  class SampleAnalogAdapter(SampleRouteAdapter):
@@ -1,7 +1,7 @@
1
1
  """Independent ARM-ADI transfer checks and basic logical bus-block checks (debug §6)."""
2
2
  import struct
3
- from .conformance import require, ops, tlvs
4
- from .conformance_attach import AttachChecks
3
+ from . import require, ops, tlvs
4
+ from .attach import AttachChecks
5
5
 
6
6
 
7
7
  class ArmAdiChecks(AttachChecks):
@@ -1,7 +1,7 @@
1
1
  """Logical MEM-AP block packet, wrap and progress checks; retains base ARM checks."""
2
2
  import struct
3
- from .conformance import require, tlvs
4
- from .conformance_arm_adi import ArmAdiChecks
3
+ from . import require, tlvs
4
+ from .arm_adi import ArmAdiChecks
5
5
 
6
6
 
7
7
  class ArmAdiBlockChecks(ArmAdiChecks):
@@ -1,8 +1,8 @@
1
1
  """Logical ARM raw transfers and abstract bus blocks; no SWD electrical implementation."""
2
2
  import copy
3
3
  import struct
4
- from .virtual_attach_model import Attachments, AttachModel
5
- from .virtual_core import Core, Completed, Reject, tlv
4
+ from .attach_model import Attachments, AttachModel
5
+ from ..virtual_core import Core, Completed, Reject, tlv
6
6
 
7
7
 
8
8
  def fixed_transfer(data):
@@ -1,5 +1,5 @@
1
1
  """Explicit ARM logical controls; no model imports or implicit device discovery."""
2
- from .conformance_attach_sample import SampleAttachAdapter
2
+ from .attach_sample import SampleAttachAdapter
3
3
 
4
4
 
5
5
  class SampleArmAdiAdapter(SampleAttachAdapter):
@@ -1,7 +1,7 @@
1
1
  """SPEC-driven standard attach admission and console open checks."""
2
2
  import struct
3
- from .conformance import require, ops, tlvs
4
- from .conformance_registered_ops import refusal_carries
3
+ from . import require, ops, tlvs
4
+ from .registered_ops import refusal_carries
5
5
 
6
6
 
7
7
  class AttachChecks:
@@ -96,9 +96,8 @@ class AttachChecks:
96
96
  for tail in (b'\0\0\0',bytes((reset,)),bytes((self.unknown|128,4,0))+b'x',self.reset_tlv()+self.tlv(reset,b'x')):
97
97
  self.refused(self.attach_request(sid,extra=tail),'malformed')
98
98
  elif kind=='UNMARKED':self.attach(sid,extra=self.reset_tlv(marked=False)+self.tlv(self.unknown,b'x'))
99
- elif kind=='FIRST-WINS':
100
- self.attach(sid,speed=1500,extra=self.reset_tlv(hold=10)+self.reset_tlv(hold=20))
101
- require(self.a.state()['touch'][-1][2]==10,'a later copy of reset was used')
99
+ elif kind=='TWICE': # a non-repeating tag twice: malformed (core §2.3)
100
+ self.refused(self.attach_request(sid,speed=1500,extra=self.reset_tlv(hold=10)+self.reset_tlv(hold=20)),'malformed')
102
101
  elif kind=='BUSY':
103
102
  self.attach(sid);self.refused(self.attach_request(sid,pair=(0,1)),'unavailable',cause='pin_in_use') # never joined
104
103
  self.refused(self.attach_request(sid,fn=2,pair=(0,65535)),'unavailable',cause='pin_in_use')
@@ -186,7 +185,7 @@ class AttachChecks:
186
185
  self.c.observed['attach_fixture']={'selection':self.a.selection,'pairs':self.a.pairs,'mechanisms':self.a.mechanisms,'scope':'logical-model','reference':self.a.reference}
187
186
  self.c.check('OEP-ATTACH-CONTEXT','debug §1/3/5; console §1',context)
188
187
  if self.c.results[-1]['status']!='passed':self.c.abort=True
189
- cases=[('WIRE-'+kind,lambda kind=kind:self.wire_case(kind)) for kind in ('SHORT','ZERO-SPEED','WIDTH','LOW-SPEED','PINS','METHOD','TLV','MALFORMED','UNMARKED','FIRST-WINS','BUSY','CAPACITY','FAILED','REPLAY')]
188
+ cases=[('WIRE-'+kind,lambda kind=kind:self.wire_case(kind)) for kind in ('SHORT','ZERO-SPEED','WIDTH','LOW-SPEED','PINS','METHOD','TLV','MALFORMED','UNMARKED','TWICE','BUSY','CAPACITY','FAILED','REPLAY')]
190
189
  cases += [('CONSOLE-'+kind,lambda kind=kind:self.console_case(kind)) for kind in ('UNSUPPORTED','RESOURCE','DUPLICATE','MALFORMED','INDEPENDENT','RECREATE-REPLAY')]+[('LOCKS',self.locks)]
191
190
  for name,case in cases:
192
191
  first=len(self.a.trace);self.c.check('OEP-ATTACH-'+name,'debug §1/3/5; console §1/2/3; core §2.3/5.2',case);self.c.results[-1]['adapter_trace']=self.a.trace[first:]
@@ -1,11 +1,11 @@
1
1
  """Logical standard attach/console fixture; no electrical target operations."""
2
2
  import struct
3
- from .virtual_core import Core, Completed, Reject, tlv
4
- from .virtual_dependency_model import Dependencies, DependencyModel
5
- from .virtual_stream_model import Stream
6
- from . import registry as _reg
7
- from .catalog import pack_ops
8
- from .virtual_names import R, DC, cause, extension
3
+ from ..virtual_core import Core, Completed, Reject, tlv
4
+ from .dependency_model import Dependencies, DependencyModel
5
+ from .stream_model import Stream
6
+ from .. import registry as _reg
7
+ from ..catalog import pack_ops
8
+ from ..virtual_names import R, DC, cause, extension
9
9
 
10
10
  # the wire family's and the console's numbers by name (debug §1-§3, console §1-§3)
11
11
  WOP, WT, WE = _reg.WIRE_RVSWD.op, _reg.WIRE_RVSWD.tlv, _reg.WIRE_RVSWD.enum
@@ -54,7 +54,7 @@ class Attachments(Dependencies):
54
54
  if tag not in known:
55
55
  if raw&128:raise Reject(R['unsupported'],bytes((raw,)))
56
56
  continue
57
- if size!=known[tag]:raise Reject(R['malformed']) # every copy is checked; the first is used
57
+ if size!=known[tag] or tag in result:raise Reject(R['malformed']) # another length, or the tag twice (core §2.3)
58
58
  channel,hold=struct.unpack('<HH',value)
59
59
  # not the reset line, or a hold past max_op_ms (debug §3, core §7.5): the tag as received, every copy
60
60
  if channel!=self.reset_channel or hold>self.ep.max_op_ms:raise Reject(R['unsupported'],bytes((raw,)))
@@ -1,5 +1,5 @@
1
1
  """Explicit logical standard attach/console fixture controls."""
2
- from .conformance_route_sample import SampleRouteAdapter
2
+ from .route_sample import SampleRouteAdapter
3
3
 
4
4
 
5
5
  class SampleAttachAdapter(SampleRouteAdapter):
@@ -1,8 +1,8 @@
1
1
  """Logical optional block fixture with explicit bus and scratch restoration."""
2
2
  import copy
3
3
  import struct
4
- from .virtual_debug_model import Debug, DebugModel, fixed_dmi
5
- from .virtual_core import Core, Completed, Reject, tlv
4
+ from .debug_model import Debug, DebugModel, fixed_dmi
5
+ from ..virtual_core import Core, Completed, Reject, tlv
6
6
 
7
7
 
8
8
  HARTSEL=(0x3ff<<6)|(0x3ff<<16)
@@ -1,5 +1,5 @@
1
1
  """Explicit block memory and scratch-register fixture controls."""
2
- from .conformance_debug_sample import SampleDebugAdapter
2
+ from .debug_sample import SampleDebugAdapter
3
3
 
4
4
 
5
5
  class SampleBlockAdapter(SampleDebugAdapter):
@@ -1,8 +1,8 @@
1
1
  """Independent optional riscv-dm block admission, progress and restoration checks."""
2
2
  import struct
3
- from .conformance import require, tlvs, ops
4
- from .conformance_debug import DebugChecks
5
- from .conformance_dmseq import target_frame
3
+ from . import require, tlvs, ops
4
+ from .debug import DebugChecks
5
+ from .dmseq import target_frame
6
6
 
7
7
 
8
8
  HARTSEL=(0x3ff<<6)|(0x3ff<<16)
@@ -1,9 +1,9 @@
1
1
  """Independent selected-SPEC group wire/lifecycle checker for paired sample fixtures."""
2
2
  import secrets
3
3
  import struct
4
- from .conformance import require, tlvs
5
- from .conformance_registered_ops import RegisteredOpsChecks
6
- from .conformance_analog_payload import AnalogPayloadChecks
4
+ from . import require, tlvs
5
+ from .registered_ops import RegisteredOpsChecks
6
+ from .analog_payload import AnalogPayloadChecks
7
7
 
8
8
  NO_TIME=(1<<64)-1
9
9
  LAST=0xffffffff
@@ -5,7 +5,7 @@ caller's controlled fixture, not a guarantee inferred from uncertainty metadata.
5
5
  """
6
6
  import struct
7
7
  from fractions import Fraction
8
- from .conformance import require, tlvs
8
+ from . import require, tlvs
9
9
 
10
10
  NO_TIME=(1<<64)-1
11
11
  NONE=(1<<32)-1
@@ -5,7 +5,7 @@ does not import this module or use its expected records.
5
5
  """
6
6
  import struct
7
7
 
8
- from . import registry as _reg
8
+ from .. import registry as _reg
9
9
 
10
10
  _A = _reg.FIXTURE_ANALOG.tlv["configure_answer"] # the capture family's answer tags (capture §3.3)
11
11
 
@@ -8,13 +8,13 @@ fn 4 is the checked group and fn 5 a peer group that only holds tracks; fns
8
8
  import copy
9
9
  import struct
10
10
  from fractions import Fraction
11
- from .virtual_gpio_model import Gpio
12
- from .virtual_logic_model import Logic, LogicModel
13
- from .virtual_analog_model import Analog, refuse_output_idle
14
- from .virtual_core import Core, Reject, tlv
15
- from . import registry as _reg
16
- from .catalog import pack_ops
17
- from .virtual_names import R, DC, cause, UNAVAILABLE_TLV
11
+ from .gpio_model import Gpio
12
+ from .logic_model import Logic, LogicModel
13
+ from .analog_model import Analog, refuse_output_idle
14
+ from ..virtual_core import Core, Reject, tlv
15
+ from .. import registry as _reg
16
+ from ..catalog import pack_ops
17
+ from ..virtual_names import R, DC, cause, UNAVAILABLE_TLV
18
18
 
19
19
  # the capture family's numbers by name (capture §2-§4)
20
20
  _L, _A, _G = _reg.FIXTURE_LOGIC, _reg.FIXTURE_ANALOG, _reg.FIXTURE_CAPTURE_GROUP
@@ -1,5 +1,5 @@
1
1
  """Explicit paired-sample group adapter, without implementation imports."""
2
- from .conformance_route_sample import SampleRouteAdapter
2
+ from .route_sample import SampleRouteAdapter
3
3
 
4
4
 
5
5
  class SampleCaptureGroupAdapter(SampleRouteAdapter):
@@ -1,7 +1,7 @@
1
1
  """Read-only selected capture describe contracts, not op behavior."""
2
2
  import struct
3
- from .conformance import require
4
- from .conformance_registered_ops import RegisteredOpsChecks
3
+ from . import require
4
+ from .registered_ops import RegisteredOpsChecks
5
5
 
6
6
 
7
7
  class CaptureMetadataChecks:
@@ -1,7 +1,7 @@
1
1
  """Independent capture describe fixture; no advertised op implementation."""
2
2
  import struct
3
- from .virtual_registered_ops_model import RegisteredOps, RegisteredOpsModel
4
- from .virtual_core import Core, tlv
3
+ from .registered_ops_model import RegisteredOps, RegisteredOpsModel
4
+ from ..virtual_core import Core, tlv
5
5
 
6
6
 
7
7
  class CaptureMetadata(RegisteredOps):
@@ -2,8 +2,8 @@
2
2
  import hashlib
3
3
  from pathlib import Path
4
4
  import struct
5
- from .conformance import require, tlvs
6
- from .conformance_registered_ops import refusal_carries
5
+ from . import require, tlvs
6
+ from .registered_ops import refusal_carries
7
7
 
8
8
 
9
9
  def answered(reply,fixed):
@@ -15,7 +15,7 @@ def answered(reply,fixed):
15
15
  def refused_stale(reply):
16
16
  """rejected unavailable carrying cause 6, other TLVs in any order around it (core §4.3)."""
17
17
  return reply[3:5]==b'\0\4' and refusal_carries('unavailable',reply[5:],b'\1\1\0\6')
18
- from .conformance_host_deadline import reviewed_identity as core_identity
18
+ from .host_deadline import reviewed_identity as core_identity
19
19
 
20
20
  REVIEWED={'interfaces/oep-if-capture.ja.md':'ffd89a6a1abf006aea788a6b47b270e6ac0e6d8190a716f4123c4f499bd3a61e',
21
21
  'interfaces/oep-if-common.ja.md':'25fed0b1b8b7f246a8b71d02cea810249803b1c3c1e9c3df466c04f38687f70c'}
@@ -2,10 +2,10 @@
2
2
  import hashlib
3
3
  from pathlib import Path
4
4
  import struct
5
- from . import message
6
- from .virtual_core import tlv
7
- from .virtual_logic_model import LogicModel
8
- from .virtual_analog_model import AnalogModel
5
+ from .. import message
6
+ from ..virtual_core import tlv
7
+ from .logic_model import LogicModel
8
+ from .analog_model import AnalogModel
9
9
 
10
10
 
11
11
  class SampleCaptureSerialAdapter:
@@ -58,4 +58,4 @@ class SampleCaptureSerialAdapter:
58
58
  def source_sha256(self):
59
59
  root=Path(__file__).parent
60
60
  return {n:hashlib.sha256((root/n).read_bytes()).hexdigest() for n in
61
- ('virtual_logic_model.py','virtual_analog_model.py','virtual_core.py','virtual_gpio_model.py','message.py')}
61
+ ('logic_model.py','analog_model.py','../virtual_core.py','gpio_model.py','../message.py')}
@@ -6,8 +6,8 @@ configure answers; the waveform and clock are the documented fixture's.
6
6
  """
7
7
  import struct
8
8
  from fractions import Fraction
9
- from .conformance import require,tlvs
10
- from .conformance_registered_ops import RegisteredOpsChecks
9
+ from . import require,tlvs
10
+ from .registered_ops import RegisteredOpsChecks
11
11
 
12
12
  NO_TIME=(1<<64)-1
13
13
  NONE=0xffffffff
@@ -1,8 +1,8 @@
1
1
  """Selected-SPEC cross-rate group stop/error/replay, generation exhaustion, start failure, state table and ownership checks."""
2
2
  import secrets
3
3
  import struct
4
- from .conformance import require,tlvs
5
- from .conformance_capture_timeline import CaptureTimelineChecks,NO_TIME,NONE,arrived
4
+ from . import require,tlvs
5
+ from .capture_timeline import CaptureTimelineChecks,NO_TIME,NONE,arrived
6
6
 
7
7
  LAST=0xffffffff
8
8
 
@@ -8,12 +8,12 @@ import copy
8
8
  import struct
9
9
 
10
10
  from fractions import Fraction
11
- from .virtual_gpio_model import Gpio, GpioModel
12
- from .virtual_core import Completed, Core, Reject, tlv
13
- from .virtual_analog_model import refuse_output_idle
14
- from . import registry as _reg
15
- from .catalog import pack_ops
16
- from .virtual_names import R, DC, cause, UNAVAILABLE_TLV
11
+ from .gpio_model import Gpio, GpioModel
12
+ from ..virtual_core import Completed, Core, Reject, tlv
13
+ from .analog_model import refuse_output_idle
14
+ from .. import registry as _reg
15
+ from ..catalog import pack_ops
16
+ from ..virtual_names import R, DC, cause, UNAVAILABLE_TLV
17
17
 
18
18
  # the capture family's numbers by name (capture §2-§4; one space for the family, core §2.5)
19
19
  _L, _A, _G = _reg.FIXTURE_LOGIC, _reg.FIXTURE_ANALOG, _reg.FIXTURE_CAPTURE_GROUP
@@ -83,7 +83,7 @@ class Track:
83
83
  if not known: # every copy of an unknown tag: critical -> unsupported (core §2.3)
84
84
  if raw&128:raise Reject(R['unsupported'],bytes((raw,)))
85
85
  continue
86
- if key in seen and key!=C['frontend']:later.append((key,raw,value));continue # a later copy: checked in settings (core §2.3)
86
+ if key in seen and key!=C['frontend']:raise Reject(R['malformed']) # a non-repeating tag twice (core §2.3); frontend repeats
87
87
  seen.add(key)
88
88
  if key==C['frontend']:frontends.append((raw,value))
89
89
  else:got[key]=(raw,value)
@@ -1,5 +1,5 @@
1
1
  """Explicit per-track nanosecond scheduler adapter, without implementation imports."""
2
- from .conformance_route_sample import SampleRouteAdapter
2
+ from .route_sample import SampleRouteAdapter
3
3
 
4
4
 
5
5
  class SampleCaptureTimelineAdapter(SampleRouteAdapter):
@@ -1,6 +1,6 @@
1
1
  """Core clock sampling, SID-zero isolation, replay exceptions and exact u64 checks."""
2
2
  import struct
3
- from .conformance import require,tlvs
3
+ from . import require,tlvs
4
4
 
5
5
 
6
6
  class ClockChecks: