opensportslib 0.3.1.dev21__tar.gz → 0.3.1.dev23__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 (243) hide show
  1. opensportslib-0.3.1.dev23/PKG-INFO +326 -0
  2. opensportslib-0.3.1.dev23/README.md +287 -0
  3. opensportslib-0.3.1.dev23/opensportslib.egg-info/PKG-INFO +326 -0
  4. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/pyproject.toml +1 -1
  5. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/data/test_hf_json_spotting.py +2 -2
  6. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/data/test_hf_json_tracking_spotting.py +1 -1
  7. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/data/test_hf_tracking_dataset.py +1 -1
  8. opensportslib-0.3.1.dev21/PKG-INFO +0 -695
  9. opensportslib-0.3.1.dev21/README.md +0 -656
  10. opensportslib-0.3.1.dev21/opensportslib.egg-info/PKG-INFO +0 -695
  11. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/LICENSE +0 -0
  12. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/LICENSE-COMMERCIAL +0 -0
  13. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/MANIFEST.in +0 -0
  14. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/examples/quickstart/basic_classification.py +0 -0
  15. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/examples/quickstart/basic_localization.py +0 -0
  16. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/examples/quickstart/basic_vqa.py +0 -0
  17. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/__init__.py +0 -0
  18. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/adaptation/__init__.py +0 -0
  19. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/adaptation/spotta.py +0 -0
  20. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/apis/__init__.py +0 -0
  21. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/apis/base_task_model.py +0 -0
  22. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/apis/classification.py +0 -0
  23. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/apis/config.py +0 -0
  24. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/apis/configuration.py +0 -0
  25. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/apis/localization.py +0 -0
  26. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/apis/vqa.py +0 -0
  27. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/cli.py +0 -0
  28. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/configs/classification/default.yaml +0 -0
  29. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/configs/classification/sngar_frames.yaml +0 -0
  30. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/configs/classification/sngar_tracking.yaml +0 -0
  31. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/configs/classification/video.yaml +0 -0
  32. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/configs/default.yaml +0 -0
  33. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/configs/localization/calf_resnetpca512.yaml +0 -0
  34. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/configs/localization/default.yaml +0 -0
  35. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/configs/localization/e2e_spotta.yaml +0 -0
  36. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/configs/localization/h5_header_distance.yaml +0 -0
  37. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/configs/localization/h5_header_skeleton.yaml +0 -0
  38. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/configs/localization/netvladpp_resnetpca512.yaml +0 -0
  39. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/configs/localization/tracking_action_spotting.yaml +0 -0
  40. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/configs/localization/video_dali.yaml +0 -0
  41. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/configs/localization/video_ocv.yaml +0 -0
  42. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/configs/vqa/default.yaml +0 -0
  43. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/configs/vqa/qwen.yaml +0 -0
  44. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/configs/vqa/qwen3_vl_native.yaml +0 -0
  45. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/configs/vqa/qwen_lora.yaml +0 -0
  46. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/configs/vqa/qwen_sngar_frames.yaml +0 -0
  47. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/configs/vqa/xvars.yaml +0 -0
  48. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/__init__.py +0 -0
  49. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/config/__init__.py +0 -0
  50. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/config/accessors.py +0 -0
  51. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/config/conflicts.py +0 -0
  52. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/config/editable.py +0 -0
  53. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/config/loader.py +0 -0
  54. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/config/migrate.py +0 -0
  55. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/config/migrations/__init__.py +0 -0
  56. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/config/migrations/legacy_to_canonical.py +0 -0
  57. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/config/rule_variants.py +0 -0
  58. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/config/runtime_adapter.py +0 -0
  59. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/config/schema.py +0 -0
  60. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/config/schemas/__init__.py +0 -0
  61. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/config/schemas/schema_canonical.py +0 -0
  62. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/config/schemas/schema_legacy.py +0 -0
  63. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/config/validate.py +0 -0
  64. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/loss/__init__.py +0 -0
  65. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/loss/builder.py +0 -0
  66. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/loss/calf.py +0 -0
  67. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/loss/ce.py +0 -0
  68. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/loss/combine.py +0 -0
  69. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/loss/nll.py +0 -0
  70. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/optimizer/__init__.py +0 -0
  71. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/optimizer/builder.py +0 -0
  72. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/sampler/weighted_sampler.py +0 -0
  73. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/scheduler/__init__.py +0 -0
  74. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/scheduler/builder.py +0 -0
  75. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/trainer/__init__.py +0 -0
  76. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/trainer/classification_trainer.py +0 -0
  77. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/trainer/localization_trainer.py +0 -0
  78. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/trainer/vqa_trainer.py +0 -0
  79. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/utils/checkpoint.py +0 -0
  80. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/utils/config.py +0 -0
  81. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/utils/config_normalize.py +0 -0
  82. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/utils/data.py +0 -0
  83. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/utils/ddp.py +0 -0
  84. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/utils/default_args.py +0 -0
  85. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/utils/direct_video.py +0 -0
  86. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/utils/hf_runtime.py +0 -0
  87. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/utils/lightning.py +0 -0
  88. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/utils/load_annotations.py +0 -0
  89. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/utils/seed.py +0 -0
  90. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/utils/video_processing.py +0 -0
  91. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/core/utils/wandb.py +0 -0
  92. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/datasets/__init__.py +0 -0
  93. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/datasets/builder.py +0 -0
  94. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/datasets/classification_dataset.py +0 -0
  95. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/datasets/hf_json.py +0 -0
  96. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/datasets/hf_tracking.py +0 -0
  97. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/datasets/localization_dataset.py +0 -0
  98. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/datasets/utils/__init__.py +0 -0
  99. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/datasets/utils/h5_tracking.py +0 -0
  100. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/datasets/utils/tracking.py +0 -0
  101. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/datasets/vqa_dataset.py +0 -0
  102. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/legacy_config/classification.yaml +0 -0
  103. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/legacy_config/localization-e2e-ocv.yaml +0 -0
  104. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/legacy_config/localization-json_calf_resnetpca512.yaml +0 -0
  105. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/legacy_config/localization-json_netvlad++_resnetpca512.yaml +0 -0
  106. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/legacy_config/localization.yaml +0 -0
  107. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/legacy_config/sngar-frames.yaml +0 -0
  108. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/legacy_config/sngar-tracking.yaml +0 -0
  109. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/metrics/classification_metric.py +0 -0
  110. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/metrics/localization_metric.py +0 -0
  111. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/metrics/vqa_metric.py +0 -0
  112. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/__init__.py +0 -0
  113. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/backbones/builder.py +0 -0
  114. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/base/contextaware.py +0 -0
  115. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/base/e2e.py +0 -0
  116. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/base/learnablepooling.py +0 -0
  117. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/base/qwen_vl_native.py +0 -0
  118. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/base/qwen_xvars.py +0 -0
  119. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/base/rule_based.py +0 -0
  120. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/base/tracking.py +0 -0
  121. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/base/vars.py +0 -0
  122. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/base/video.py +0 -0
  123. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/base/video_chatgpt_compat.py +0 -0
  124. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/base/video_mae.py +0 -0
  125. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/base/xvars_videochatgpt.py +0 -0
  126. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/builder.py +0 -0
  127. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/heads/builder.py +0 -0
  128. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/neck/builder.py +0 -0
  129. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/utils/common.py +0 -0
  130. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/utils/impl/__init__.py +0 -0
  131. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/utils/impl/asformer.py +0 -0
  132. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/utils/impl/calf.py +0 -0
  133. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/utils/impl/gsm.py +0 -0
  134. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/utils/impl/gtad.py +0 -0
  135. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/utils/impl/tsm.py +0 -0
  136. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/utils/litebase.py +0 -0
  137. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/utils/modules.py +0 -0
  138. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/utils/shift.py +0 -0
  139. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/utils/utils.py +0 -0
  140. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/utils/vqa_prediction_priors.py +0 -0
  141. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/utils/vqa_prompting.py +0 -0
  142. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/models/utils/xvars_clip_index.py +0 -0
  143. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/remote_registry.py +0 -0
  144. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/setup/setup.py +0 -0
  145. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/tools/__init__.py +0 -0
  146. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/tools/_common.py +0 -0
  147. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/tools/hf_transfer.py +0 -0
  148. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/tools/osl_json_to_parquet.py +0 -0
  149. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib/tools/parquet_to_osl_json.py +0 -0
  150. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib.egg-info/SOURCES.txt +0 -0
  151. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib.egg-info/dependency_links.txt +0 -0
  152. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib.egg-info/entry_points.txt +0 -0
  153. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib.egg-info/requires.txt +0 -0
  154. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/opensportslib.egg-info/top_level.txt +0 -0
  155. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/scripts/redact_test_stream.py +0 -0
  156. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/scripts/release_versions.py +0 -0
  157. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/scripts/run_h5_header_rule_inference.py +0 -0
  158. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/scripts/summarize_test_report.py +0 -0
  159. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/scripts/verify_release_manifests.py +0 -0
  160. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/scripts/write_release_manifest.py +0 -0
  161. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/setup.cfg +0 -0
  162. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/__init__.py +0 -0
  163. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/conftest.py +0 -0
  164. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/helpers/__init__.py +0 -0
  165. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/helpers/configs.py +0 -0
  166. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/helpers/pipeline_stubs.py +0 -0
  167. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/integration/classification/test_pipeline.py +0 -0
  168. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/integration/localization/test_pipeline.py +0 -0
  169. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/integration/localization/test_spotta.py +0 -0
  170. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/integration/vqa/test_pipeline.py +0 -0
  171. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/release/__init__.py +0 -0
  172. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/release/_release_common.py +0 -0
  173. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/release/test_00_environment.py +0 -0
  174. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/release/test_classification_release.py +0 -0
  175. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/release/test_localization_release.py +0 -0
  176. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/release/test_vqa_release.py +0 -0
  177. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/smoke/test_cli.py +0 -0
  178. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/smoke/test_config_utils.py +0 -0
  179. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/smoke/test_environment.py +0 -0
  180. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/smoke/test_package.py +0 -0
  181. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/smoke/test_public_apis.py +0 -0
  182. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/api/test_remote_registry.py +0 -0
  183. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/api/test_remote_sessions.py +0 -0
  184. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/api/test_server_jobs.py +0 -0
  185. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/api/test_server_registry.py +0 -0
  186. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/api/test_server_startup_scripts.py +0 -0
  187. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/api/test_task_model_contract.py +0 -0
  188. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/api/test_vqa.py +0 -0
  189. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/config/test_architecture.py +0 -0
  190. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/config/test_editable.py +0 -0
  191. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/config/test_optional_hf.py +0 -0
  192. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/config/test_pretrained_merge.py +0 -0
  193. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/config/test_split_overrides.py +0 -0
  194. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/contracts/test_architecture.py +0 -0
  195. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/contracts/test_dependencies.py +0 -0
  196. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/contracts/test_package.py +0 -0
  197. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/contracts/test_release_versions.py +0 -0
  198. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/contracts/test_runner_contract.py +0 -0
  199. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/core/test_classification_trainer.py +0 -0
  200. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/core/test_localization_hf_backend.py +0 -0
  201. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/core/test_training_components.py +0 -0
  202. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/core/test_video_processing.py +0 -0
  203. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/data/test_classification_paths.py +0 -0
  204. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/data/test_h5_tracking.py +0 -0
  205. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/data/test_localization_dali.py +0 -0
  206. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/data/test_localization_intervals.py +0 -0
  207. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/data/test_osl_formats.py +0 -0
  208. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/models/test_classification_metrics.py +0 -0
  209. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/models/test_header_rule_spotter.py +0 -0
  210. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/models/test_header_skeleton_spotter.py +0 -0
  211. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/models/test_localization_metrics.py +0 -0
  212. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/models/test_temporal_shift.py +0 -0
  213. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/models/test_vqa_metrics.py +0 -0
  214. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/models/test_vqa_qwen_xvars.py +0 -0
  215. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/models/test_vqa_training_lora.py +0 -0
  216. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/models/test_vqa_xvars_videochatgpt.py +0 -0
  217. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/tools/test_conversion.py +0 -0
  218. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/tools/test_extract_xvars_features.py +0 -0
  219. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/tools/test_hf_transfer.py +0 -0
  220. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/tools/test_release_manifest.py +0 -0
  221. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/tools/test_report_summary.py +0 -0
  222. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tests/unit/tools/test_setup.py +0 -0
  223. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tools/convert/build_sn_vqa_2026_vqa.py +0 -0
  224. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tools/convert/build_sngar_spotting.py +0 -0
  225. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tools/convert/build_soccernet_gar.py +0 -0
  226. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tools/convert/build_soccernet_gar_action_spotting.py +0 -0
  227. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tools/convert/build_soccernet_gar_vqa.py +0 -0
  228. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tools/convert/build_xvars_indexes.py +0 -0
  229. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tools/convert/extract_xvars_clip_features.py +0 -0
  230. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tools/convert/osl_json_to_parquet_webdataset.py +0 -0
  231. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tools/convert/parquet_webdataset_to_osl_json.py +0 -0
  232. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tools/convert/sngar_dataset_card.py +0 -0
  233. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tools/convert/sngar_events.py +0 -0
  234. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tools/convert/verify_sngar_spotting.py +0 -0
  235. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tools/download/download_hf_repo.py +0 -0
  236. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tools/download/download_osl_hf.py +0 -0
  237. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tools/download/push_sngar_spotting.py +0 -0
  238. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tools/download/upload_osl_hf.py +0 -0
  239. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tools/train/train_config.py +0 -0
  240. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tools/training/classification.py +0 -0
  241. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tools/training/localization.py +0 -0
  242. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tools/training/vqa.py +0 -0
  243. {opensportslib-0.3.1.dev21 → opensportslib-0.3.1.dev23}/tools/upload/upload_model_hf.py +0 -0
@@ -0,0 +1,326 @@
1
+ Metadata-Version: 2.4
2
+ Name: opensportslib
3
+ Version: 0.3.1.dev23
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
+ Author: Jeet Vora
6
+ Requires-Python: >=3.12
7
+ Description-Content-Type: text/markdown
8
+ License-File: LICENSE
9
+ License-File: LICENSE-COMMERCIAL
10
+ Requires-Dist: SoccerNet
11
+ Requires-Dist: av
12
+ Requires-Dist: decord; platform_system != "Darwin" and platform_machine != "arm64" and platform_machine != "aarch64"
13
+ Requires-Dist: evaluate
14
+ Requires-Dist: scikit-learn
15
+ Requires-Dist: torch
16
+ Requires-Dist: torchvision
17
+ Requires-Dist: transformers==4.57.3
18
+ Requires-Dist: tokenizers==0.22.1
19
+ Requires-Dist: accelerate
20
+ Requires-Dist: wandb
21
+ Requires-Dist: opencv-python
22
+ Requires-Dist: omegaconf
23
+ Requires-Dist: timm
24
+ Requires-Dist: seaborn
25
+ Requires-Dist: tabulate
26
+ Requires-Dist: pytorch-lightning
27
+ Requires-Dist: pandas
28
+ Requires-Dist: pyarrow
29
+ Requires-Dist: h5py==3.16.0
30
+ Requires-Dist: huggingface_hub
31
+ Requires-Dist: datasets<6,>=5.0.0
32
+ Requires-Dist: easydict
33
+ Provides-Extra: test
34
+ Requires-Dist: pytest; extra == "test"
35
+ Requires-Dist: pytest-cov; extra == "test"
36
+ Requires-Dist: pytest-json-report; extra == "test"
37
+ Requires-Dist: pytest-timeout; extra == "test"
38
+ Dynamic: license-file
39
+
40
+ # OpenSportsLib
41
+
42
+ <img src="docs/assets/osl.jpg" height="400">
43
+
44
+ OpenSportsLib is a modular Python library for sports video understanding.
45
+
46
+ It provides a unified framework to **train, evaluate, and run inference** for key temporal understanding tasks in sports video, including:
47
+
48
+ - **Action classification**
49
+ - **Action localization / spotting**
50
+ - **Visual Question Answering (VQA)**
51
+
52
+ Retrieval and action description/captioning are roadmap areas. They do not yet
53
+ have first-class task wrappers or training workflows in this package.
54
+
55
+ OpenSportsLib is designed for **researchers, ML engineers, and sports analytics teams** who want reproducible and extensible workflows for sports video AI.
56
+
57
+ ## Why OpenSportsLib?
58
+
59
+ - Unified workflow for training and inference
60
+ - Modular design for adding new tasks, datasets, and models
61
+ - Config driven experiments for reproducibility
62
+ - Optional SpoTTA test-time adaptation for E2ESpot inference
63
+ - Support for multiple modalities and sports workflows
64
+ - Research friendly while still usable in applied settings
65
+
66
+ ## Quick links
67
+
68
+ - **Documentation:** https://opensportslab.github.io/opensportslib/
69
+ - **OSL JSON format:** https://opensportslab.github.io/opensportslib/data/osl-json-format/
70
+ - **Inference server:** [server/README.md](server/README.md)
71
+ - **PyPI:** https://pypi.org/project/opensportslib/
72
+ - **Issues:** https://github.com/OpenSportsLab/opensportslib/issues
73
+
74
+ ---
75
+
76
+ ## Installation
77
+
78
+ > Requires **Python 3.12+**.
79
+ > Supports CUDA 12.6 / 12.8 / 13.0 (with CPU fallback).
80
+ > PyTorch Geometric uses a dedicated PyTorch 2.12.1 compatibility profile.
81
+
82
+ ### Create conda env
83
+
84
+ ```bash
85
+ conda create -n osl python=3.12 pip -y
86
+ conda activate osl
87
+ ```
88
+
89
+ ### Stable release
90
+
91
+ ```bash
92
+ pip install opensportslib
93
+ ```
94
+
95
+ ### Pre release
96
+
97
+ ```bash
98
+ pip install --pre opensportslib
99
+ ```
100
+
101
+ ### Source development version
102
+
103
+ ```bash
104
+ pip install -e .
105
+ ```
106
+
107
+ ### Setup Environment (PyTorch, CUDA aware & Optional Dependencies)
108
+ ```bash
109
+ # Install PyTorch (CPU/GPU auto-detected)
110
+ opensportslib setup
111
+
112
+ # Optional: install PyTorch Geometric support. This replaces the installed
113
+ # Torch stack with the PyG-compatible PyTorch 2.12.1 profile.
114
+ opensportslib setup --pyg
115
+
116
+ # Optional: install for DALI support
117
+ opensportslib setup --dali
118
+
119
+ # Optional: install the X-VARS-compatible VQA dependency profile
120
+ opensportslib setup --vqa_xvars
121
+
122
+ # Optional: install the Qwen-compatible VQA dependency profile
123
+ opensportslib setup --vqa_qwen
124
+ ```
125
+ ---
126
+
127
+ **Note:**
128
+ Run `opensportslib setup` to automatically configure dependencies.
129
+ If issues occur, manually install compatible versions of `torch`, `torchvision`, and related libraries according to your CUDA version or system compatibility.
130
+
131
+ For VQA, use exactly one backend-specific dependency profile:
132
+
133
+ - `--vqa_xvars` installs the X-VARS-compatible Hugging Face stack from `XVARS_DEPENDENCY_PINS`
134
+ - `--vqa_qwen` installs the Qwen-compatible Hugging Face stack from `QWEN_DEPENDENCY_PINS`
135
+
136
+ The `vqa_qwen` config supports `Qwen/Qwen2.5-7B-Instruct` and `Qwen/Qwen3.5-9B-Base`.
137
+
138
+ ---
139
+
140
+ ## Data and pretrained models
141
+
142
+ OpenSportsLib uses external annotation files, datasets, and pretrained checkpoints.
143
+
144
+ Public assets are hosted under the **OpenSportsLab Hugging Face organization**:
145
+
146
+ **https://huggingface.co/OpenSportsLab**
147
+
148
+ Use it as the main entry point to find:
149
+ - datasets
150
+ - annotation files
151
+ - extracted features
152
+ - pretrained models and checkpoints
153
+
154
+ See the [Model Zoo](docs/model-zoo.md) for available pretrained models,
155
+ reported scores, datasets, and loading snippets.
156
+
157
+ ---
158
+
159
+ ## Dataset format
160
+
161
+ OpenSportsLib uses the **OSL JSON v2.0** annotation format for multimodal
162
+ datasets and predictions. See the [OSL JSON format guide](docs/data/osl-json-format.md)
163
+ for its schema, examples, and conversion notes.
164
+
165
+ ---
166
+
167
+ ## Quickstart
168
+
169
+ ### Classification
170
+
171
+ ```python
172
+ from opensportslib.apis import ClassificationModel
173
+
174
+ my_model = ClassificationModel(
175
+ config="/path/to/classification.yaml",
176
+ weights=None, # optional: path or Hugging Face model ID
177
+ )
178
+
179
+ my_model.train(
180
+ train_set="/path/to/train_annotations.json",
181
+ valid_set="/path/to/valid_annotations.json",
182
+ )
183
+
184
+ predictions = my_model.infer(test_set="/path/to/test_annotations.json")
185
+ my_model.save_predictions(
186
+ output_path="/path/to/predictions.json",
187
+ predictions=predictions,
188
+ )
189
+ ```
190
+
191
+ For localization, VQA, and additional end-to-end examples, see the
192
+ [API guide](opensportslib/apis/README.md), [quickstart scripts](examples/quickstart/),
193
+ and [VQA guide](docs/tools/vqa.md).
194
+
195
+
196
+ ---
197
+
198
+ ## Hugging Face Dataset Transfer
199
+
200
+ OpenSportsLib provides APIs and scripts for downloading and uploading OSL datasets with Hugging Face.
201
+
202
+ For SN-GAR classification and action-spotting configurations, setup, caching,
203
+ and training commands, see the [SN-GAR examples](examples/sngar/README.md).
204
+
205
+ ### Python API
206
+
207
+ ```python
208
+ from opensportslib.tools import (
209
+ download_dataset_split_from_hf,
210
+ download_dataset_sample_inputs_from_hf,
211
+ upload_dataset_inputs_from_json_to_hf,
212
+ upload_dataset_as_parquet_to_hf,
213
+ )
214
+ ```
215
+
216
+ ### Scripts
217
+
218
+ ```bash
219
+ python tools/download/download_osl_hf.py --repo-id <org/repo> --revision main --split test --format parquet --output-dir downloaded_data --annotations-only
220
+ python tools/download/upload_osl_hf.py --repo-id <org/repo> --json-path <local_dataset.json> --split test --revision main
221
+ ```
222
+
223
+ ---
224
+
225
+ ## Examples and documentation
226
+
227
+ Use the README for the fast start, then go deeper through:
228
+
229
+ - Full documentation: https://opensportslab.github.io/opensportslib/
230
+ - OSL JSON format: [docs/data/osl-json-format.md](docs/data/osl-json-format.md)
231
+ - High-level API guide: [opensportslib/apis/README.md](opensportslib/apis/README.md)
232
+ - Configuration guide: https://opensportslab.github.io/opensportslib/config/configuration-guide/
233
+ - Example configs: [examples/configs/](examples/configs/)
234
+ - Quickstart scripts: [examples/quickstart/](examples/quickstart/)
235
+ - Contribution guide: [CONTRIBUTING.md](CONTRIBUTING.md)
236
+ - Developer guide: [DEVELOPERS.md](DEVELOPERS.md)
237
+
238
+ ---
239
+
240
+ ## Development setup
241
+
242
+ For contributors who want to work from source:
243
+
244
+ ```bash
245
+ git clone https://github.com/OpenSportsLab/opensportslib.git
246
+ cd opensportslib
247
+ pip install -e .
248
+ ```
249
+
250
+ ### Conda option
251
+
252
+ If you prefer conda:
253
+
254
+ ```bash
255
+ conda create -n osl python=3.12 pip
256
+ conda activate osl
257
+ pip install -e .
258
+ ```
259
+
260
+ ### Setup Environment (PyTorch, CUDA aware & Optional Dependencies)
261
+ ```bash
262
+ # Install PyTorch (CPU/GPU auto-detected)
263
+ opensportslib setup
264
+
265
+ # Optional: install PyTorch Geometric support. This replaces the installed
266
+ # Torch stack with the PyG-compatible PyTorch 2.12.1 profile.
267
+ opensportslib setup --pyg
268
+
269
+ # Optional: install for DALI support
270
+ opensportslib setup --dali
271
+
272
+ # Optional: install the X-VARS-compatible VQA dependency profile
273
+ opensportslib setup --vqa_xvars
274
+
275
+ # Optional: install the Qwen-compatible VQA dependency profile
276
+ opensportslib setup --vqa_qwen
277
+ ```
278
+
279
+ ---
280
+
281
+ ## Contributing
282
+
283
+ We welcome contributions. Pull requests must target `dev`, and each
284
+ GitHub-linked commit author must accept the [Individual Contributor License
285
+ Agreement](.github/CLA.md) when prompted by the `CLA check`.
286
+
287
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for the contribution workflow and
288
+ [DEVELOPERS.md](DEVELOPERS.md) for architecture and extension guidance.
289
+
290
+ ---
291
+
292
+ ## License
293
+
294
+ OpenSportsLib is available under dual licensing.
295
+
296
+ ### Open source license
297
+ [AGPL 3.0](LICENSE) for research, academic, and community use.
298
+
299
+ ### Commercial license
300
+ For proprietary or commercial deployment, please refer to [LICENSE-COMMERCIAL](LICENSE-COMMERCIAL).
301
+
302
+ ---
303
+
304
+ ## Citation
305
+
306
+ If you use OpenSportsLib in your research, please cite the project.
307
+
308
+ ```bibtex
309
+ @misc{opensportslib,
310
+ title={OpenSportsLib},
311
+ author={OpenSportsLab},
312
+ year={2026},
313
+ howpublished={\url{https://github.com/OpenSportsLab/opensportslib}}
314
+ }
315
+ ```
316
+
317
+ ---
318
+
319
+ ## Acknowledgments
320
+
321
+ OpenSportsLib is developed within the broader OpenSportsLab effort for sports
322
+ video understanding. Core contributors include:
323
+
324
+ - [Jeet Vora](https://jeetv.github.io/) — Remote Research Engineer
325
+ - [Dr. Merey Ramazanova](https://meryusha.github.io/) — Post-Doc
326
+ - [Dr. Silvio Giancola](https://www.silviogiancola.com/) — Research Scientist
@@ -0,0 +1,287 @@
1
+ # OpenSportsLib
2
+
3
+ <img src="docs/assets/osl.jpg" height="400">
4
+
5
+ OpenSportsLib is a modular Python library for sports video understanding.
6
+
7
+ It provides a unified framework to **train, evaluate, and run inference** for key temporal understanding tasks in sports video, including:
8
+
9
+ - **Action classification**
10
+ - **Action localization / spotting**
11
+ - **Visual Question Answering (VQA)**
12
+
13
+ Retrieval and action description/captioning are roadmap areas. They do not yet
14
+ have first-class task wrappers or training workflows in this package.
15
+
16
+ OpenSportsLib is designed for **researchers, ML engineers, and sports analytics teams** who want reproducible and extensible workflows for sports video AI.
17
+
18
+ ## Why OpenSportsLib?
19
+
20
+ - Unified workflow for training and inference
21
+ - Modular design for adding new tasks, datasets, and models
22
+ - Config driven experiments for reproducibility
23
+ - Optional SpoTTA test-time adaptation for E2ESpot inference
24
+ - Support for multiple modalities and sports workflows
25
+ - Research friendly while still usable in applied settings
26
+
27
+ ## Quick links
28
+
29
+ - **Documentation:** https://opensportslab.github.io/opensportslib/
30
+ - **OSL JSON format:** https://opensportslab.github.io/opensportslib/data/osl-json-format/
31
+ - **Inference server:** [server/README.md](server/README.md)
32
+ - **PyPI:** https://pypi.org/project/opensportslib/
33
+ - **Issues:** https://github.com/OpenSportsLab/opensportslib/issues
34
+
35
+ ---
36
+
37
+ ## Installation
38
+
39
+ > Requires **Python 3.12+**.
40
+ > Supports CUDA 12.6 / 12.8 / 13.0 (with CPU fallback).
41
+ > PyTorch Geometric uses a dedicated PyTorch 2.12.1 compatibility profile.
42
+
43
+ ### Create conda env
44
+
45
+ ```bash
46
+ conda create -n osl python=3.12 pip -y
47
+ conda activate osl
48
+ ```
49
+
50
+ ### Stable release
51
+
52
+ ```bash
53
+ pip install opensportslib
54
+ ```
55
+
56
+ ### Pre release
57
+
58
+ ```bash
59
+ pip install --pre opensportslib
60
+ ```
61
+
62
+ ### Source development version
63
+
64
+ ```bash
65
+ pip install -e .
66
+ ```
67
+
68
+ ### Setup Environment (PyTorch, CUDA aware & Optional Dependencies)
69
+ ```bash
70
+ # Install PyTorch (CPU/GPU auto-detected)
71
+ opensportslib setup
72
+
73
+ # Optional: install PyTorch Geometric support. This replaces the installed
74
+ # Torch stack with the PyG-compatible PyTorch 2.12.1 profile.
75
+ opensportslib setup --pyg
76
+
77
+ # Optional: install for DALI support
78
+ opensportslib setup --dali
79
+
80
+ # Optional: install the X-VARS-compatible VQA dependency profile
81
+ opensportslib setup --vqa_xvars
82
+
83
+ # Optional: install the Qwen-compatible VQA dependency profile
84
+ opensportslib setup --vqa_qwen
85
+ ```
86
+ ---
87
+
88
+ **Note:**
89
+ Run `opensportslib setup` to automatically configure dependencies.
90
+ If issues occur, manually install compatible versions of `torch`, `torchvision`, and related libraries according to your CUDA version or system compatibility.
91
+
92
+ For VQA, use exactly one backend-specific dependency profile:
93
+
94
+ - `--vqa_xvars` installs the X-VARS-compatible Hugging Face stack from `XVARS_DEPENDENCY_PINS`
95
+ - `--vqa_qwen` installs the Qwen-compatible Hugging Face stack from `QWEN_DEPENDENCY_PINS`
96
+
97
+ The `vqa_qwen` config supports `Qwen/Qwen2.5-7B-Instruct` and `Qwen/Qwen3.5-9B-Base`.
98
+
99
+ ---
100
+
101
+ ## Data and pretrained models
102
+
103
+ OpenSportsLib uses external annotation files, datasets, and pretrained checkpoints.
104
+
105
+ Public assets are hosted under the **OpenSportsLab Hugging Face organization**:
106
+
107
+ **https://huggingface.co/OpenSportsLab**
108
+
109
+ Use it as the main entry point to find:
110
+ - datasets
111
+ - annotation files
112
+ - extracted features
113
+ - pretrained models and checkpoints
114
+
115
+ See the [Model Zoo](docs/model-zoo.md) for available pretrained models,
116
+ reported scores, datasets, and loading snippets.
117
+
118
+ ---
119
+
120
+ ## Dataset format
121
+
122
+ OpenSportsLib uses the **OSL JSON v2.0** annotation format for multimodal
123
+ datasets and predictions. See the [OSL JSON format guide](docs/data/osl-json-format.md)
124
+ for its schema, examples, and conversion notes.
125
+
126
+ ---
127
+
128
+ ## Quickstart
129
+
130
+ ### Classification
131
+
132
+ ```python
133
+ from opensportslib.apis import ClassificationModel
134
+
135
+ my_model = ClassificationModel(
136
+ config="/path/to/classification.yaml",
137
+ weights=None, # optional: path or Hugging Face model ID
138
+ )
139
+
140
+ my_model.train(
141
+ train_set="/path/to/train_annotations.json",
142
+ valid_set="/path/to/valid_annotations.json",
143
+ )
144
+
145
+ predictions = my_model.infer(test_set="/path/to/test_annotations.json")
146
+ my_model.save_predictions(
147
+ output_path="/path/to/predictions.json",
148
+ predictions=predictions,
149
+ )
150
+ ```
151
+
152
+ For localization, VQA, and additional end-to-end examples, see the
153
+ [API guide](opensportslib/apis/README.md), [quickstart scripts](examples/quickstart/),
154
+ and [VQA guide](docs/tools/vqa.md).
155
+
156
+
157
+ ---
158
+
159
+ ## Hugging Face Dataset Transfer
160
+
161
+ OpenSportsLib provides APIs and scripts for downloading and uploading OSL datasets with Hugging Face.
162
+
163
+ For SN-GAR classification and action-spotting configurations, setup, caching,
164
+ and training commands, see the [SN-GAR examples](examples/sngar/README.md).
165
+
166
+ ### Python API
167
+
168
+ ```python
169
+ from opensportslib.tools import (
170
+ download_dataset_split_from_hf,
171
+ download_dataset_sample_inputs_from_hf,
172
+ upload_dataset_inputs_from_json_to_hf,
173
+ upload_dataset_as_parquet_to_hf,
174
+ )
175
+ ```
176
+
177
+ ### Scripts
178
+
179
+ ```bash
180
+ python tools/download/download_osl_hf.py --repo-id <org/repo> --revision main --split test --format parquet --output-dir downloaded_data --annotations-only
181
+ python tools/download/upload_osl_hf.py --repo-id <org/repo> --json-path <local_dataset.json> --split test --revision main
182
+ ```
183
+
184
+ ---
185
+
186
+ ## Examples and documentation
187
+
188
+ Use the README for the fast start, then go deeper through:
189
+
190
+ - Full documentation: https://opensportslab.github.io/opensportslib/
191
+ - OSL JSON format: [docs/data/osl-json-format.md](docs/data/osl-json-format.md)
192
+ - High-level API guide: [opensportslib/apis/README.md](opensportslib/apis/README.md)
193
+ - Configuration guide: https://opensportslab.github.io/opensportslib/config/configuration-guide/
194
+ - Example configs: [examples/configs/](examples/configs/)
195
+ - Quickstart scripts: [examples/quickstart/](examples/quickstart/)
196
+ - Contribution guide: [CONTRIBUTING.md](CONTRIBUTING.md)
197
+ - Developer guide: [DEVELOPERS.md](DEVELOPERS.md)
198
+
199
+ ---
200
+
201
+ ## Development setup
202
+
203
+ For contributors who want to work from source:
204
+
205
+ ```bash
206
+ git clone https://github.com/OpenSportsLab/opensportslib.git
207
+ cd opensportslib
208
+ pip install -e .
209
+ ```
210
+
211
+ ### Conda option
212
+
213
+ If you prefer conda:
214
+
215
+ ```bash
216
+ conda create -n osl python=3.12 pip
217
+ conda activate osl
218
+ pip install -e .
219
+ ```
220
+
221
+ ### Setup Environment (PyTorch, CUDA aware & Optional Dependencies)
222
+ ```bash
223
+ # Install PyTorch (CPU/GPU auto-detected)
224
+ opensportslib setup
225
+
226
+ # Optional: install PyTorch Geometric support. This replaces the installed
227
+ # Torch stack with the PyG-compatible PyTorch 2.12.1 profile.
228
+ opensportslib setup --pyg
229
+
230
+ # Optional: install for DALI support
231
+ opensportslib setup --dali
232
+
233
+ # Optional: install the X-VARS-compatible VQA dependency profile
234
+ opensportslib setup --vqa_xvars
235
+
236
+ # Optional: install the Qwen-compatible VQA dependency profile
237
+ opensportslib setup --vqa_qwen
238
+ ```
239
+
240
+ ---
241
+
242
+ ## Contributing
243
+
244
+ We welcome contributions. Pull requests must target `dev`, and each
245
+ GitHub-linked commit author must accept the [Individual Contributor License
246
+ Agreement](.github/CLA.md) when prompted by the `CLA check`.
247
+
248
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for the contribution workflow and
249
+ [DEVELOPERS.md](DEVELOPERS.md) for architecture and extension guidance.
250
+
251
+ ---
252
+
253
+ ## License
254
+
255
+ OpenSportsLib is available under dual licensing.
256
+
257
+ ### Open source license
258
+ [AGPL 3.0](LICENSE) for research, academic, and community use.
259
+
260
+ ### Commercial license
261
+ For proprietary or commercial deployment, please refer to [LICENSE-COMMERCIAL](LICENSE-COMMERCIAL).
262
+
263
+ ---
264
+
265
+ ## Citation
266
+
267
+ If you use OpenSportsLib in your research, please cite the project.
268
+
269
+ ```bibtex
270
+ @misc{opensportslib,
271
+ title={OpenSportsLib},
272
+ author={OpenSportsLab},
273
+ year={2026},
274
+ howpublished={\url{https://github.com/OpenSportsLab/opensportslib}}
275
+ }
276
+ ```
277
+
278
+ ---
279
+
280
+ ## Acknowledgments
281
+
282
+ OpenSportsLib is developed within the broader OpenSportsLab effort for sports
283
+ video understanding. Core contributors include:
284
+
285
+ - [Jeet Vora](https://jeetv.github.io/) — Remote Research Engineer
286
+ - [Dr. Merey Ramazanova](https://meryusha.github.io/) — Post-Doc
287
+ - [Dr. Silvio Giancola](https://www.silviogiancola.com/) — Research Scientist