opensportslib 0.3.0.dev1__tar.gz → 0.3.0.dev3__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 (182) hide show
  1. {opensportslib-0.3.0.dev1/opensportslib.egg-info → opensportslib-0.3.0.dev3}/PKG-INFO +1 -1
  2. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/loader.py +42 -0
  3. opensportslib-0.3.0.dev3/opensportslib/tools/__init__.py +76 -0
  4. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/tools/hf_transfer.py +40 -4
  5. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3/opensportslib.egg-info}/PKG-INFO +1 -1
  6. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/pyproject.toml +1 -1
  7. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_config_architecture.py +15 -1
  8. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_config_split_override_sync.py +8 -0
  9. opensportslib-0.3.0.dev3/tools/convert/build_sn_vqa_2026_vqa.py +524 -0
  10. opensportslib-0.3.0.dev3/tools/convert/build_soccernet_gar_vqa.py +97 -0
  11. opensportslib-0.3.0.dev1/opensportslib/tools/__init__.py +0 -52
  12. opensportslib-0.3.0.dev1/tools/convert/build_sn_vqa_2026_vqa.py +0 -7
  13. opensportslib-0.3.0.dev1/tools/convert/build_soccernet_gar_vqa.py +0 -7
  14. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/LICENSE +0 -0
  15. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/LICENSE-COMMERCIAL +0 -0
  16. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/MANIFEST.in +0 -0
  17. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/README.md +0 -0
  18. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/examples/quickstart/basic_classification.py +0 -0
  19. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/examples/quickstart/basic_localization.py +0 -0
  20. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/examples/quickstart/basic_vqa.py +0 -0
  21. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/__init__.py +0 -0
  22. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/apis/__init__.py +0 -0
  23. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/apis/base_task_model.py +0 -0
  24. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/apis/classification.py +0 -0
  25. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/apis/localization.py +0 -0
  26. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/apis/vqa.py +0 -0
  27. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/cli.py +0 -0
  28. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/classification/default.yaml +0 -0
  29. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/classification/sngar_frames.yaml +0 -0
  30. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/classification/sngar_tracking.yaml +0 -0
  31. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/classification/video.yaml +0 -0
  32. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/default.yaml +0 -0
  33. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/localization/calf_resnetpca512.yaml +0 -0
  34. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/localization/default.yaml +0 -0
  35. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/localization/h5_header_distance.yaml +0 -0
  36. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/localization/h5_header_distance_angle.yaml +0 -0
  37. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/localization/h5_header_distance_speed.yaml +0 -0
  38. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/localization/h5_header_distance_speed_angle.yaml +0 -0
  39. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/localization/h5_header_rule.yaml +0 -0
  40. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/localization/netvladpp_resnetpca512.yaml +0 -0
  41. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/localization/video_dali.yaml +0 -0
  42. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/localization/video_ocv.yaml +0 -0
  43. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/vqa/default.yaml +0 -0
  44. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/vqa/qwen.yaml +0 -0
  45. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/vqa/qwen3_vl_native.yaml +0 -0
  46. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/vqa/qwen_lora.yaml +0 -0
  47. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/vqa/qwen_sngar_frames.yaml +0 -0
  48. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/vqa/xvars.yaml +0 -0
  49. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/__init__.py +0 -0
  50. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/__init__.py +0 -0
  51. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/accessors.py +0 -0
  52. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/conflicts.py +0 -0
  53. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/migrate.py +0 -0
  54. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/migrations/__init__.py +0 -0
  55. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/migrations/legacy_to_canonical.py +0 -0
  56. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/runtime_adapter.py +0 -0
  57. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/schema.py +0 -0
  58. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/schemas/__init__.py +0 -0
  59. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/schemas/schema_canonical.py +0 -0
  60. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/schemas/schema_legacy.py +0 -0
  61. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/validate.py +0 -0
  62. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/loss/__init__.py +0 -0
  63. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/loss/builder.py +0 -0
  64. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/loss/calf.py +0 -0
  65. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/loss/ce.py +0 -0
  66. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/loss/combine.py +0 -0
  67. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/loss/nll.py +0 -0
  68. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/optimizer/__init__.py +0 -0
  69. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/optimizer/builder.py +0 -0
  70. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/sampler/weighted_sampler.py +0 -0
  71. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/scheduler/__init__.py +0 -0
  72. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/scheduler/builder.py +0 -0
  73. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/trainer/__init__.py +0 -0
  74. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/trainer/classification_trainer.py +0 -0
  75. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/trainer/localization_trainer.py +0 -0
  76. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/trainer/vqa_trainer.py +0 -0
  77. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/checkpoint.py +0 -0
  78. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/config.py +0 -0
  79. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/config_normalize.py +0 -0
  80. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/data.py +0 -0
  81. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/ddp.py +0 -0
  82. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/default_args.py +0 -0
  83. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/hf_runtime.py +0 -0
  84. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/lightning.py +0 -0
  85. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/load_annotations.py +0 -0
  86. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/seed.py +0 -0
  87. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/video_processing.py +0 -0
  88. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/wandb.py +0 -0
  89. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/datasets/__init__.py +0 -0
  90. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/datasets/builder.py +0 -0
  91. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/datasets/classification_dataset.py +0 -0
  92. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/datasets/localization_dataset.py +0 -0
  93. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/datasets/utils/__init__.py +0 -0
  94. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/datasets/utils/h5_tracking.py +0 -0
  95. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/datasets/utils/tracking.py +0 -0
  96. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/datasets/vqa_dataset.py +0 -0
  97. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/legacy_config/classification.yaml +0 -0
  98. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/legacy_config/localization-e2e-ocv.yaml +0 -0
  99. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/legacy_config/localization-json_calf_resnetpca512.yaml +0 -0
  100. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/legacy_config/localization-json_netvlad++_resnetpca512.yaml +0 -0
  101. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/legacy_config/localization.yaml +0 -0
  102. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/legacy_config/sngar-frames.yaml +0 -0
  103. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/legacy_config/sngar-tracking.yaml +0 -0
  104. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/metrics/classification_metric.py +0 -0
  105. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/metrics/localization_metric.py +0 -0
  106. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/metrics/vqa_metric.py +0 -0
  107. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/__init__.py +0 -0
  108. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/backbones/builder.py +0 -0
  109. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/contextaware.py +0 -0
  110. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/e2e.py +0 -0
  111. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/learnablepooling.py +0 -0
  112. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/qwen_vl_native.py +0 -0
  113. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/qwen_xvars.py +0 -0
  114. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/rule_based.py +0 -0
  115. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/tracking.py +0 -0
  116. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/vars.py +0 -0
  117. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/video.py +0 -0
  118. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/video_chatgpt_compat.py +0 -0
  119. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/video_mae.py +0 -0
  120. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/xvars_videochatgpt.py +0 -0
  121. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/builder.py +0 -0
  122. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/heads/builder.py +0 -0
  123. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/neck/builder.py +0 -0
  124. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/common.py +0 -0
  125. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/impl/__init__.py +0 -0
  126. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/impl/asformer.py +0 -0
  127. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/impl/calf.py +0 -0
  128. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/impl/gsm.py +0 -0
  129. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/impl/gtad.py +0 -0
  130. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/impl/tsm.py +0 -0
  131. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/litebase.py +0 -0
  132. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/modules.py +0 -0
  133. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/shift.py +0 -0
  134. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/utils.py +0 -0
  135. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/vqa_prediction_priors.py +0 -0
  136. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/vqa_prompting.py +0 -0
  137. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/xvars_clip_index.py +0 -0
  138. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/setup/setup.py +0 -0
  139. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/tools/_common.py +0 -0
  140. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/tools/osl_json_to_parquet.py +0 -0
  141. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/tools/parquet_to_osl_json.py +0 -0
  142. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib.egg-info/SOURCES.txt +0 -0
  143. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib.egg-info/dependency_links.txt +0 -0
  144. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib.egg-info/entry_points.txt +0 -0
  145. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib.egg-info/requires.txt +0 -0
  146. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib.egg-info/top_level.txt +0 -0
  147. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/scripts/run_h5_header_rule_inference.py +0 -0
  148. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/setup.cfg +0 -0
  149. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/conftest.py +0 -0
  150. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_classification_dataset_paths.py +0 -0
  151. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_classification_trainer_dataloader.py +0 -0
  152. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_config_utils_smoke.py +0 -0
  153. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_conversion_tools.py +0 -0
  154. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_extract_xvars_features.py +0 -0
  155. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_h5_header_rule_spotter.py +0 -0
  156. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_h5_tracking_dataset.py +0 -0
  157. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_hf_transfer_tools.py +0 -0
  158. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_localization_dali_filenames.py +0 -0
  159. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_package_smoke.py +0 -0
  160. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_pretrained_config_merge_policy.py +0 -0
  161. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_public_apis_smoke.py +0 -0
  162. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_setup_cli.py +0 -0
  163. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_subset_train_infer_integration.py +0 -0
  164. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_task_model_api_contract.py +0 -0
  165. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_vqa_api.py +0 -0
  166. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_vqa_metrics_semantic.py +0 -0
  167. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_vqa_qwen_xvars.py +0 -0
  168. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_vqa_training_lora.py +0 -0
  169. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_vqa_xvars_videochatgpt.py +0 -0
  170. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/convert/build_soccernet_gar.py +0 -0
  171. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/convert/build_soccernet_gar_action_spotting.py +0 -0
  172. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/convert/build_xvars_indexes.py +0 -0
  173. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/convert/extract_xvars_clip_features.py +0 -0
  174. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/convert/osl_json_to_parquet_webdataset.py +0 -0
  175. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/convert/parquet_webdataset_to_osl_json.py +0 -0
  176. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/download/download_hf_repo.py +0 -0
  177. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/download/download_osl_hf.py +0 -0
  178. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/download/upload_osl_hf.py +0 -0
  179. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/training/classification.py +0 -0
  180. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/training/localization.py +0 -0
  181. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/training/vqa.py +0 -0
  182. {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/upload/upload_model_hf.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opensportslib
3
- Version: 0.3.0.dev1
3
+ Version: 0.3.0.dev3
4
4
  Summary: OpenSportsLib is the professional library, designed for advanced video understanding in sports. It provides state-of-the-art tools for action recognition, spotting, retrieval, and captioning, making it ideal for researchers, analysts, and developers working with sports video data.
5
5
  Author: Jeet Vora
6
6
  Requires-Python: >=3.12
@@ -20,6 +20,10 @@ from .runtime_adapter import maybe_namespace, namespace_to_plain_dict
20
20
  _YAML_SUFFIXES = {".yaml", ".yml"}
21
21
  _TASK_DIRS = {"classification", "localization", "vqa"}
22
22
  _INTERPOLATION_RE = re.compile(r"\$\{([^}]+)\}")
23
+ _CPU_OPENCV_SPLIT_TYPES = {
24
+ "VideoGameWithDali": "VideoGameWithOpencv",
25
+ "VideoGameWithDaliVideo": "VideoGameWithOpencvVideo",
26
+ }
23
27
 
24
28
 
25
29
  def _load_single_yaml(path: str | Path) -> Any:
@@ -131,6 +135,42 @@ def load_raw_config(path: str | Path) -> dict[str, Any]:
131
135
  raise ValueError("Unsupported config format. Use YAML or JSON.")
132
136
 
133
137
 
138
+ def _normalize_cpu_loader_backend(payload: dict[str, Any]) -> dict[str, Any]:
139
+ system = payload.get("SYSTEM", {})
140
+ if not isinstance(system, dict):
141
+ return payload
142
+
143
+ if str(system.get("device", "auto")).lower() != "cpu":
144
+ return payload
145
+
146
+ data = payload.get("DATA", {})
147
+ if not isinstance(data, dict):
148
+ return payload
149
+
150
+ common = data.get("common", {})
151
+ if not isinstance(common, dict):
152
+ return payload
153
+
154
+ runtime = common.get("runtime", {})
155
+ if not isinstance(runtime, dict):
156
+ runtime = {}
157
+ common["runtime"] = runtime
158
+ runtime["loader_backend"] = "opencv"
159
+
160
+ splits = common.get("splits", {})
161
+ if not isinstance(splits, dict):
162
+ return payload
163
+
164
+ for split_cfg in splits.values():
165
+ if not isinstance(split_cfg, dict):
166
+ continue
167
+ split_type = split_cfg.get("type")
168
+ if split_type in _CPU_OPENCV_SPLIT_TYPES:
169
+ split_cfg["type"] = _CPU_OPENCV_SPLIT_TYPES[split_type]
170
+
171
+ return payload
172
+
173
+
134
174
  def load_config(
135
175
  config_path: str | Path,
136
176
  *,
@@ -139,6 +179,7 @@ def load_config(
139
179
  ) -> Any:
140
180
  raw = load_raw_config(config_path)
141
181
  canonical = migrate_config(raw, as_namespace=False)
182
+ canonical = _normalize_cpu_loader_backend(canonical)
142
183
  assert_no_legacy_aliases(canonical)
143
184
 
144
185
  if validate:
@@ -168,6 +209,7 @@ def resolve_config(
168
209
  ) -> Any:
169
210
  payload = namespace_to_plain_dict(config)
170
211
  canonical = migrate_config(payload, as_namespace=False)
212
+ canonical = _normalize_cpu_loader_backend(canonical)
171
213
  assert_no_legacy_aliases(canonical)
172
214
  return maybe_namespace(canonical, as_namespace=as_namespace)
173
215
 
@@ -0,0 +1,76 @@
1
+ """OpenSportsLib dataset conversion and Hugging Face transfer tools."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import importlib
6
+
7
+
8
+ _EXPORTS = {
9
+ "convert_json_to_parquet": ("opensportslib.tools.osl_json_to_parquet", "convert_json_to_parquet"),
10
+ "DEFAULT_SHARD_SIZE": ("opensportslib.tools.osl_json_to_parquet", "DEFAULT_SHARD_SIZE"),
11
+ "parse_shard_size": ("opensportslib.tools.osl_json_to_parquet", "parse_shard_size"),
12
+ "convert_parquet_to_json": ("opensportslib.tools.parquet_to_osl_json", "convert_parquet_to_json"),
13
+ "convert_sn_vqa_2026_to_osl": ("opensportslib.tools.sn_vqa_2026_qwen_native", "convert_sn_vqa_2026_to_osl"),
14
+ "evaluate_sn_vqa_predictions": ("opensportslib.tools.sn_vqa_2026_qwen_native", "evaluate_sn_vqa_predictions"),
15
+ "HfTransferCancelled": ("opensportslib.tools.hf_transfer", "HfTransferCancelled"),
16
+ "HF_REPO_ID_KEY": ("opensportslib.tools.hf_transfer", "HF_REPO_ID_KEY"),
17
+ "HF_BRANCH_KEY": ("opensportslib.tools.hf_transfer", "HF_BRANCH_KEY"),
18
+ "HF_SPLIT_KEY": ("opensportslib.tools.hf_transfer", "HF_SPLIT_KEY"),
19
+ "download_dataset_split_from_hf": ("opensportslib.tools.hf_transfer", "download_dataset_split_from_hf"),
20
+ "upload_dataset_inputs_from_json_to_hf": ("opensportslib.tools.hf_transfer", "upload_dataset_inputs_from_json_to_hf"),
21
+ "upload_dataset_as_parquet_to_hf": ("opensportslib.tools.hf_transfer", "upload_dataset_as_parquet_to_hf"),
22
+ "create_dataset_repo_on_hf": ("opensportslib.tools.hf_transfer", "create_dataset_repo_on_hf"),
23
+ "dataset_repo_exists_on_hf": ("opensportslib.tools.hf_transfer", "dataset_repo_exists_on_hf"),
24
+ "create_dataset_branch_on_hf": ("opensportslib.tools.hf_transfer", "create_dataset_branch_on_hf"),
25
+ "read_hf_source_metadata_from_dataset": ("opensportslib.tools.hf_transfer", "read_hf_source_metadata_from_dataset"),
26
+ "write_hf_source_metadata_to_dataset_json": ("opensportslib.tools.hf_transfer", "write_hf_source_metadata_to_dataset_json"),
27
+ "is_hf_repo_not_found_error": ("opensportslib.tools.hf_transfer", "is_hf_repo_not_found_error"),
28
+ "is_hf_revision_not_found_error": ("opensportslib.tools.hf_transfer", "is_hf_revision_not_found_error"),
29
+ "is_hf_download_url_not_found_error": ("opensportslib.tools.hf_transfer", "is_hf_download_url_not_found_error"),
30
+ "get_json_repo_folder": ("opensportslib.tools.hf_transfer", "get_json_repo_folder"),
31
+ "extract_repo_paths_from_json": ("opensportslib.tools.hf_transfer", "extract_repo_paths_from_json"),
32
+ "extract_local_input_upload_entries_from_json": ("opensportslib.tools.hf_transfer", "extract_local_input_upload_entries_from_json"),
33
+ }
34
+
35
+ __all__ = [
36
+ "convert_json_to_parquet",
37
+ "DEFAULT_SHARD_SIZE",
38
+ "parse_shard_size",
39
+ "convert_parquet_to_json",
40
+ "convert_sn_vqa_2026_to_osl",
41
+ "evaluate_sn_vqa_predictions",
42
+ "HfTransferCancelled",
43
+ "HF_REPO_ID_KEY",
44
+ "HF_BRANCH_KEY",
45
+ "HF_SPLIT_KEY",
46
+ "download_dataset_split_from_hf",
47
+ "upload_dataset_inputs_from_json_to_hf",
48
+ "upload_dataset_as_parquet_to_hf",
49
+ "create_dataset_repo_on_hf",
50
+ "dataset_repo_exists_on_hf",
51
+ "create_dataset_branch_on_hf",
52
+ "read_hf_source_metadata_from_dataset",
53
+ "write_hf_source_metadata_to_dataset_json",
54
+ "is_hf_repo_not_found_error",
55
+ "is_hf_revision_not_found_error",
56
+ "is_hf_download_url_not_found_error",
57
+ "get_json_repo_folder",
58
+ "extract_repo_paths_from_json",
59
+ "extract_local_input_upload_entries_from_json",
60
+ ]
61
+
62
+
63
+ def __getattr__(name: str):
64
+ try:
65
+ module_name, attr_name = _EXPORTS[name]
66
+ except KeyError as exc:
67
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}") from exc
68
+
69
+ module = importlib.import_module(module_name)
70
+ value = getattr(module, attr_name)
71
+ globals()[name] = value
72
+ return value
73
+
74
+
75
+ def __dir__() -> list[str]:
76
+ return sorted(set(globals()) | set(__all__))
@@ -5,22 +5,58 @@ import tempfile
5
5
  from pathlib import Path
6
6
  from typing import Any, Callable
7
7
 
8
- from .osl_json_to_parquet import DEFAULT_SHARD_SIZE, convert_json_to_parquet, parse_shard_size
9
- from .parquet_to_osl_json import convert_parquet_to_json
10
-
11
-
12
8
  ProgressCallback = Callable[[str], None]
13
9
  CancelCheck = Callable[[], bool]
14
10
 
15
11
  HF_REPO_ID_KEY = "hf_repo_id"
16
12
  HF_BRANCH_KEY = "hf_branch"
17
13
  HF_SPLIT_KEY = "hf_split"
14
+ DEFAULT_SHARD_SIZE = 1_000_000_000
18
15
 
19
16
 
20
17
  class HfTransferCancelled(RuntimeError):
21
18
  pass
22
19
 
23
20
 
21
+ def _import_osl_json_to_parquet():
22
+ try:
23
+ from .osl_json_to_parquet import DEFAULT_SHARD_SIZE as module_default_shard_size
24
+ from .osl_json_to_parquet import convert_json_to_parquet as module_convert_json_to_parquet
25
+ from .osl_json_to_parquet import parse_shard_size as module_parse_shard_size
26
+ except ImportError as exc:
27
+ raise RuntimeError(
28
+ "Missing conversion dependencies for OSL JSON -> Parquet tools. "
29
+ "Install the package with its data-conversion dependencies, including 'pandas' and 'pyarrow'."
30
+ ) from exc
31
+ return module_default_shard_size, module_convert_json_to_parquet, module_parse_shard_size
32
+
33
+
34
+ def _import_parquet_to_osl_json():
35
+ try:
36
+ from .parquet_to_osl_json import convert_parquet_to_json as module_convert_parquet_to_json
37
+ except ImportError as exc:
38
+ raise RuntimeError(
39
+ "Missing conversion dependencies for Parquet -> OSL JSON tools. "
40
+ "Install the package with its data-conversion dependencies, including 'pandas' and 'pyarrow'."
41
+ ) from exc
42
+ return module_convert_parquet_to_json
43
+
44
+
45
+ def parse_shard_size(value: int | str) -> int:
46
+ _, _, module_parse_shard_size = _import_osl_json_to_parquet()
47
+ return module_parse_shard_size(value)
48
+
49
+
50
+ def convert_json_to_parquet(*args, **kwargs):
51
+ _, module_convert_json_to_parquet, _ = _import_osl_json_to_parquet()
52
+ return module_convert_json_to_parquet(*args, **kwargs)
53
+
54
+
55
+ def convert_parquet_to_json(*args, **kwargs):
56
+ module_convert_parquet_to_json = _import_parquet_to_osl_json()
57
+ return module_convert_parquet_to_json(*args, **kwargs)
58
+
59
+
24
60
  def _emit_progress(progress_cb: ProgressCallback | None, message: str) -> None:
25
61
  if progress_cb:
26
62
  progress_cb(message)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opensportslib
3
- Version: 0.3.0.dev1
3
+ Version: 0.3.0.dev3
4
4
  Summary: OpenSportsLib is the professional library, designed for advanced video understanding in sports. It provides state-of-the-art tools for action recognition, spotting, retrieval, and captioning, making it ideal for researchers, analysts, and developers working with sports video data.
5
5
  Author: Jeet Vora
6
6
  Requires-Python: >=3.12
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "opensportslib"
7
- version = "0.3.0.dev1"
7
+ version = "0.3.0.dev3"
8
8
  description = "OpenSportsLib is the professional library, designed for advanced video understanding in sports. It provides state-of-the-art tools for action recognition, spotting, retrieval, and captioning, making it ideal for researchers, analysts, and developers working with sports video data."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -2,7 +2,7 @@ from pathlib import Path
2
2
 
3
3
  import pytest
4
4
 
5
- from opensportslib.core.config import load_config, migrate_config, validate_config
5
+ from opensportslib.core.config import load_config, migrate_config, resolve_config, validate_config
6
6
  from opensportslib.core.config.accessors import (
7
7
  get_vqa_xvars_feature_mode,
8
8
  get_xvars_feature_token_len_for_mode,
@@ -85,6 +85,20 @@ def test_localization_experiment_composes_all_layers():
85
85
  assert cfg["MODEL"]["components"]["video_encoder"]["source"]["name"] == "rny008_gsm"
86
86
 
87
87
 
88
+ def test_resolve_config_cpu_normalizes_canonical_dali_localization_config():
89
+ cfg = load_config("opensportslib/configs/localization/video_dali.yaml", as_namespace=False)
90
+ cfg["SYSTEM"]["device"] = "cpu"
91
+
92
+ resolved = migrate_config(cfg, as_namespace=False)
93
+ resolved = validate_config(resolved)
94
+ resolved = resolve_config(resolved, as_namespace=False)
95
+
96
+ assert resolved["DATA"]["common"]["runtime"]["loader_backend"] == "opencv"
97
+ assert resolved["DATA"]["common"]["splits"]["train"]["type"] == "VideoGameWithOpencv"
98
+ assert resolved["DATA"]["common"]["splits"]["valid"]["type"] == "VideoGameWithOpencv"
99
+ assert resolved["DATA"]["common"]["splits"]["test"]["type"] == "VideoGameWithOpencvVideo"
100
+
101
+
88
102
  def test_vqa_xvars_experiment_composes_all_layers():
89
103
  cfg = load_config("opensportslib/configs/vqa/xvars.yaml", as_namespace=False)
90
104
 
@@ -35,3 +35,11 @@ def test_resolve_config_keeps_canonical_split_sources():
35
35
  cfg = resolve_config(migrate_config(_legacy_localization_cfg(), as_namespace=False), as_namespace=False)
36
36
  assert cfg["DATA"]["common"]["splits"]["valid"]["annotation_path"].endswith("valid.json")
37
37
  assert cfg["DATA"]["common"]["splits"]["valid_data_frames"]["annotation_path"].endswith("valid.json")
38
+
39
+
40
+ def test_resolve_config_cpu_forces_opencv_backend_and_split_types():
41
+ cfg = resolve_config(migrate_config(_legacy_localization_cfg(), as_namespace=False), as_namespace=False)
42
+ assert cfg["DATA"]["common"]["runtime"]["loader_backend"] == "opencv"
43
+ assert cfg["DATA"]["common"]["splits"]["train"]["type"] == "VideoGameWithOpencv"
44
+ assert cfg["DATA"]["common"]["splits"]["valid"]["type"] == "VideoGameWithOpencv"
45
+ assert cfg["DATA"]["common"]["splits"]["valid_data_frames"]["type"] == "VideoGameWithOpencvVideo"