x4d-devkit 0.53.0rc2__tar.gz → 0.53.0rc3__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.
Files changed (172) hide show
  1. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/PKG-INFO +1 -1
  2. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/pyproject.toml +1 -1
  3. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_image_schema_migration.py +45 -0
  4. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_sdk_api.py +1 -1
  5. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/image_schema_migration.py +10 -3
  6. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit.egg-info/PKG-INFO +1 -1
  7. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/LICENSE +0 -0
  8. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/README.md +0 -0
  9. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/setup.cfg +0 -0
  10. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_accounts.py +0 -0
  11. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_annotation_contract.py +0 -0
  12. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_annotation_document_hash.py +0 -0
  13. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_annotation_reference.py +0 -0
  14. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_assets_client.py +0 -0
  15. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_boundary.py +0 -0
  16. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_box.py +0 -0
  17. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_build_info.py +0 -0
  18. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_category_audit.py +0 -0
  19. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_clean_basemap.py +0 -0
  20. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_clean_basemap_client.py +0 -0
  21. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_cli_auth.py +0 -0
  22. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_client_json_contract.py +0 -0
  23. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_client_projects.py +0 -0
  24. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_clip_archives.py +0 -0
  25. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_contract_validation.py +0 -0
  26. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_coordinate_frames.py +0 -0
  27. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_current_state.py +0 -0
  28. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_current_state_identity_consumers_example.py +0 -0
  29. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_dataset_contract.py +0 -0
  30. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_dataset_identity.py +0 -0
  31. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_detection_eval.py +0 -0
  32. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_evaluate.py +0 -0
  33. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_export_bundle.py +0 -0
  34. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_image_clip.py +0 -0
  35. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_image_conditional_rules.py +0 -0
  36. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_image_enum_set.py +0 -0
  37. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_image_export.py +0 -0
  38. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_image_geometry.py +0 -0
  39. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_image_groups.py +0 -0
  40. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_image_preannotation.py +0 -0
  41. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_image_reference.py +0 -0
  42. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_image_review.py +0 -0
  43. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_image_schema_registry_client.py +0 -0
  44. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_image_schema_upgrade.py +0 -0
  45. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_image_work_session.py +0 -0
  46. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_inference_input.py +0 -0
  47. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_inference_schemas.py +0 -0
  48. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_inference_service.py +0 -0
  49. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_label_schemas.py +0 -0
  50. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_lidar_materialization.py +0 -0
  51. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_loader.py +0 -0
  52. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_matching.py +0 -0
  53. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_metrics.py +0 -0
  54. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_models.py +0 -0
  55. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_parse_equivalence.py +0 -0
  56. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_platform_pose.py +0 -0
  57. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_preannotation_client.py +0 -0
  58. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_project_discovery.py +0 -0
  59. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_reconstruction_client.py +0 -0
  60. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_release_gate.py +0 -0
  61. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_roadmark_preview.py +0 -0
  62. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_semantic_scene_authoring.py +0 -0
  63. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_semantic_scene_client.py +0 -0
  64. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_semantic_scene_contract.py +0 -0
  65. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_semantic_scene_independent.py +0 -0
  66. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_semantic_scene_native_clip.py +0 -0
  67. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_source_attributes.py +0 -0
  68. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_time_contract.py +0 -0
  69. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_token.py +0 -0
  70. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_tracking_eval.py +0 -0
  71. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_training_identity.py +0 -0
  72. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_transform.py +0 -0
  73. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_transform_chain.py +0 -0
  74. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_validation.py +0 -0
  75. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_vector_map.py +0 -0
  76. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_vector_map_geometry.py +0 -0
  77. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_vector_map_session.py +0 -0
  78. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_work_session.py +0 -0
  79. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/tests/test_work_session_validation_reuse.py +0 -0
  80. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/__init__.py +0 -0
  81. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/_image_contract.py +0 -0
  82. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/accounts.py +0 -0
  83. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/annotation_contract.py +0 -0
  84. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/annotation_reference.py +0 -0
  85. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/audit.py +0 -0
  86. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/build_info.py +0 -0
  87. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/clean_basemap.py +0 -0
  88. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/cli.py +0 -0
  89. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/__init__.py +0 -0
  90. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/_origin.py +0 -0
  91. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/accounts.py +0 -0
  92. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/annotation_reference.py +0 -0
  93. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/assets.py +0 -0
  94. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/bags.py +0 -0
  95. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/capabilities.py +0 -0
  96. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/checkpoints.py +0 -0
  97. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/clean_basemap.py +0 -0
  98. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/client.py +0 -0
  99. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/clip_work_sessions.py +0 -0
  100. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/clips.py +0 -0
  101. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/dataset_identity.py +0 -0
  102. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/image_clips.py +0 -0
  103. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/image_exports.py +0 -0
  104. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/image_preannotations.py +0 -0
  105. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/image_review.py +0 -0
  106. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/image_schemas.py +0 -0
  107. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/image_work_sessions.py +0 -0
  108. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/label_schemas.py +0 -0
  109. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/preannotation.py +0 -0
  110. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/projects.py +0 -0
  111. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/reconstruction.py +0 -0
  112. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/semantic_scene.py +0 -0
  113. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/semantic_scene_authoring.py +0 -0
  114. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/services.py +0 -0
  115. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/client/test_sets.py +0 -0
  116. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/consumer_identity.py +0 -0
  117. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/coordinate_contract.py +0 -0
  118. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/core/__init__.py +0 -0
  119. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/core/loader.py +0 -0
  120. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/core/models.py +0 -0
  121. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/core/token.py +0 -0
  122. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/core/transform.py +0 -0
  123. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/current_state.py +0 -0
  124. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/dataset_contract.py +0 -0
  125. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/dataset_identity.py +0 -0
  126. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/eval/__init__.py +0 -0
  127. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/eval/api.py +0 -0
  128. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/eval/box.py +0 -0
  129. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/eval/detection.py +0 -0
  130. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/eval/matching.py +0 -0
  131. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/eval/metrics.py +0 -0
  132. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/eval/tracking.py +0 -0
  133. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/export_bundle.py +0 -0
  134. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/image_clip.py +0 -0
  135. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/image_export.py +0 -0
  136. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/image_geometry.py +0 -0
  137. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/image_groups.py +0 -0
  138. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/image_preannotation.py +0 -0
  139. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/image_reference.py +0 -0
  140. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/image_review.py +0 -0
  141. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/image_schema.py +0 -0
  142. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/image_schema_upgrade.py +0 -0
  143. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/image_work_session.py +0 -0
  144. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/inference/__init__.py +0 -0
  145. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/inference/input.py +0 -0
  146. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/inference/models.py +0 -0
  147. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/inference/schemas.py +0 -0
  148. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/inference/service.py +0 -0
  149. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/inference/tasks.py +0 -0
  150. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/json_contract.py +0 -0
  151. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/label_schema.py +0 -0
  152. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/lidar_materialization.py +0 -0
  153. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/materialize.py +0 -0
  154. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/project_discovery.py +0 -0
  155. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/roadmark_preview.py +0 -0
  156. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/semantic_scene_authoring.py +0 -0
  157. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/semantic_scene_contract.py +0 -0
  158. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/time_contract.py +0 -0
  159. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/training_identity.py +0 -0
  160. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/validation/__init__.py +0 -0
  161. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/validation/contract.py +0 -0
  162. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/validation/platform_pose.py +0 -0
  163. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/validation/report.py +0 -0
  164. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/validation/validator.py +0 -0
  165. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/vector_map.py +0 -0
  166. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/vector_map_geometry.py +0 -0
  167. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit/work_session.py +0 -0
  168. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit.egg-info/SOURCES.txt +0 -0
  169. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit.egg-info/dependency_links.txt +0 -0
  170. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit.egg-info/entry_points.txt +0 -0
  171. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit.egg-info/requires.txt +0 -0
  172. {x4d_devkit-0.53.0rc2 → x4d_devkit-0.53.0rc3}/x4d_devkit.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: x4d-devkit
3
- Version: 0.53.0rc2
3
+ Version: 0.53.0rc3
4
4
  Summary: Official X-4D external SDK and CLI for datasets, platform APIs, training bridges, and automation
5
5
  Author: windzu
6
6
  License-Expression: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "x4d-devkit"
7
- version = "0.53.0rc2"
7
+ version = "0.53.0rc3"
8
8
  description = "Official X-4D external SDK and CLI for datasets, platform APIs, training bridges, and automation"
9
9
  readme = "README.md"
10
10
  license = "Apache-2.0"
@@ -281,3 +281,48 @@ def test_typed_client_verifies_the_exact_preview_and_receipt():
281
281
  with pytest.raises(ValueError, match="another request"):
282
282
  client.image_schemas.commit_migration(request)
283
283
  assert build_image_schema_migration_request(parsed, "k").to_dict()["preview"] == preview
284
+
285
+
286
+ def box_object(attributes=None):
287
+ return {
288
+ "id": "box_a",
289
+ "image_id": "image_a",
290
+ "view_id": "objects",
291
+ "category_id": "box",
292
+ "geometry": {"geometry_type": "box_2d", "box": {"x_min": 10, "y_min": 20, "x_max": 40, "y_max": 60}},
293
+ "attributes": attributes or {},
294
+ "attribute_ranges": [],
295
+ }
296
+
297
+
298
+ def test_box_objects_migrate_alongside_lines():
299
+ clip = clip_payload()
300
+ clip["image_annotation"]["objects"] = [line_object(), box_object()]
301
+ clip["identity"] = build_image_identity(clip)
302
+ candidate, _ = image_schema_migration_candidate(
303
+ clip, target(clip), mapping(VISIBLE_TO_RANGE, DISCARD_STYLE)
304
+ )
305
+ assert candidate.to_dict()["image_annotation"]["objects"][1] == box_object()
306
+
307
+
308
+ def test_a_box_value_cannot_become_a_range():
309
+ clip = clip_payload()
310
+ body = deepcopy(clip["label_schema"]["body"])
311
+ body["categories"][1]["attributes"] = [
312
+ {"id": "flag", "display_name": "Flag", "type": "boolean", "required": False, "scopes": ["object"], "values": []}
313
+ ]
314
+ clip["label_schema"] = snapshot(body)
315
+ clip["image_annotation"]["objects"] = [box_object({"flag": True})]
316
+ clip["identity"] = build_image_identity(clip)
317
+ new = deepcopy(body)
318
+ new["version"] = "2.0.0"
319
+ new["categories"][1]["attributes"] = []
320
+ rules = mapping(
321
+ {
322
+ "match": {"category_id": "box", "scope": "object", "attribute_id": "flag", "value": True},
323
+ "action": {"kind": "range", "attribute_id": "flag", "value": True},
324
+ }
325
+ )
326
+ with pytest.raises(ImageSchemaMigrationConflict) as caught:
327
+ image_schema_migration_candidate(clip, snapshot(new), rules)
328
+ assert [row["code"] for row in caught.value.conflicts] == ["mapped_value_invalid"]
@@ -11,7 +11,7 @@ from x4d_devkit.eval.matching import MetricData
11
11
 
12
12
 
13
13
  def test_package_version_is_current_release():
14
- assert x4d_devkit.__version__ == "0.53.0rc2"
14
+ assert x4d_devkit.__version__ == "0.53.0rc3"
15
15
 
16
16
 
17
17
  def test_loader_exposes_and_enforces_only_current_schema(tmp_path):
@@ -181,7 +181,7 @@ def migrate_image_annotation(annotation, *, target_schema, mapping):
181
181
  changes, removed, conflicts = [], [], []
182
182
  carried = 0
183
183
 
184
- def convert(object_id, category, scope, values, range_id, base_path):
184
+ def convert(object_id, category, scope, values, range_id, base_path, polyline):
185
185
  nonlocal carried
186
186
  output, added = {}, []
187
187
  for attribute_id in sorted(values):
@@ -230,6 +230,11 @@ def migrate_image_annotation(annotation, *, target_schema, mapping):
230
230
  )
231
231
  continue
232
232
  change["after"] = {"attribute_id": action["attribute_id"], "value": action["value"]}
233
+ if action["kind"] == "range" and not polyline:
234
+ conflicts.append(
235
+ _conflict("mapped_value_invalid", f"rule {index}: only a polyline can carry ranges", path, **context)
236
+ )
237
+ continue
233
238
  if action["kind"] == "range":
234
239
  change["range_id"] = _range_id(object_id, index)
235
240
  added.append((change["range_id"], action))
@@ -256,8 +261,9 @@ def migrate_image_annotation(annotation, *, target_schema, mapping):
256
261
  _conflict("object_unrepresentable", "target category geometry differs", path, object_id=object_id)
257
262
  )
258
263
  continue
264
+ polyline = category["geometry_type"] == "polyline_2d"
259
265
  row["attributes"], added = convert(
260
- object_id, category, "object", row["attributes"], None, path + ".attributes"
266
+ object_id, category, "object", row["attributes"], None, path + ".attributes", polyline
261
267
  )
262
268
  ranges = []
263
269
  for range_index, interval in enumerate(row["attribute_ranges"]):
@@ -268,14 +274,15 @@ def migrate_image_annotation(annotation, *, target_schema, mapping):
268
274
  interval["attributes"],
269
275
  interval["range_id"],
270
276
  f"{path}.attribute_ranges[{range_index}].attributes",
277
+ polyline,
271
278
  )
272
279
  assert not nested # range actions are object-scope only
273
280
  if values:
274
281
  ranges.append({**interval, "attributes": values})
275
282
  else:
276
283
  removed.append({"object_id": object_id, "range_id": interval["range_id"]})
277
- vertices = row["geometry"]["vertices"]
278
284
  for range_id, action in added:
285
+ vertices = row["geometry"]["vertices"]
279
286
  ranges.append(
280
287
  {
281
288
  "range_id": range_id,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: x4d-devkit
3
- Version: 0.53.0rc2
3
+ Version: 0.53.0rc3
4
4
  Summary: Official X-4D external SDK and CLI for datasets, platform APIs, training bridges, and automation
5
5
  Author: windzu
6
6
  License-Expression: Apache-2.0
File without changes
File without changes
File without changes