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.
- {opensportslib-0.3.0.dev1/opensportslib.egg-info → opensportslib-0.3.0.dev3}/PKG-INFO +1 -1
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/loader.py +42 -0
- opensportslib-0.3.0.dev3/opensportslib/tools/__init__.py +76 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/tools/hf_transfer.py +40 -4
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3/opensportslib.egg-info}/PKG-INFO +1 -1
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/pyproject.toml +1 -1
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_config_architecture.py +15 -1
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_config_split_override_sync.py +8 -0
- opensportslib-0.3.0.dev3/tools/convert/build_sn_vqa_2026_vqa.py +524 -0
- opensportslib-0.3.0.dev3/tools/convert/build_soccernet_gar_vqa.py +97 -0
- opensportslib-0.3.0.dev1/opensportslib/tools/__init__.py +0 -52
- opensportslib-0.3.0.dev1/tools/convert/build_sn_vqa_2026_vqa.py +0 -7
- opensportslib-0.3.0.dev1/tools/convert/build_soccernet_gar_vqa.py +0 -7
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/LICENSE +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/LICENSE-COMMERCIAL +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/MANIFEST.in +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/README.md +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/examples/quickstart/basic_classification.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/examples/quickstart/basic_localization.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/examples/quickstart/basic_vqa.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/__init__.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/apis/__init__.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/apis/base_task_model.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/apis/classification.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/apis/localization.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/apis/vqa.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/cli.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/classification/default.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/classification/sngar_frames.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/classification/sngar_tracking.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/classification/video.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/default.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/localization/calf_resnetpca512.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/localization/default.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/localization/h5_header_distance.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/localization/h5_header_distance_angle.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/localization/h5_header_distance_speed.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/localization/h5_header_distance_speed_angle.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/localization/h5_header_rule.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/localization/netvladpp_resnetpca512.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/localization/video_dali.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/localization/video_ocv.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/vqa/default.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/vqa/qwen.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/vqa/qwen3_vl_native.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/vqa/qwen_lora.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/vqa/qwen_sngar_frames.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/configs/vqa/xvars.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/__init__.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/__init__.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/accessors.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/conflicts.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/migrate.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/migrations/__init__.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/migrations/legacy_to_canonical.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/runtime_adapter.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/schema.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/schemas/__init__.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/schemas/schema_canonical.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/schemas/schema_legacy.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/config/validate.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/loss/__init__.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/loss/builder.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/loss/calf.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/loss/ce.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/loss/combine.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/loss/nll.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/optimizer/__init__.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/optimizer/builder.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/sampler/weighted_sampler.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/scheduler/__init__.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/scheduler/builder.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/trainer/__init__.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/trainer/classification_trainer.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/trainer/localization_trainer.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/trainer/vqa_trainer.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/checkpoint.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/config.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/config_normalize.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/data.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/ddp.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/default_args.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/hf_runtime.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/lightning.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/load_annotations.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/seed.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/video_processing.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/core/utils/wandb.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/datasets/__init__.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/datasets/builder.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/datasets/classification_dataset.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/datasets/localization_dataset.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/datasets/utils/__init__.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/datasets/utils/h5_tracking.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/datasets/utils/tracking.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/datasets/vqa_dataset.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/legacy_config/classification.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/legacy_config/localization-e2e-ocv.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/legacy_config/localization-json_calf_resnetpca512.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/legacy_config/localization-json_netvlad++_resnetpca512.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/legacy_config/localization.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/legacy_config/sngar-frames.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/legacy_config/sngar-tracking.yaml +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/metrics/classification_metric.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/metrics/localization_metric.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/metrics/vqa_metric.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/__init__.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/backbones/builder.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/contextaware.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/e2e.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/learnablepooling.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/qwen_vl_native.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/qwen_xvars.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/rule_based.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/tracking.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/vars.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/video.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/video_chatgpt_compat.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/video_mae.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/base/xvars_videochatgpt.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/builder.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/heads/builder.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/neck/builder.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/common.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/impl/__init__.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/impl/asformer.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/impl/calf.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/impl/gsm.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/impl/gtad.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/impl/tsm.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/litebase.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/modules.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/shift.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/utils.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/vqa_prediction_priors.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/vqa_prompting.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/models/utils/xvars_clip_index.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/setup/setup.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/tools/_common.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/tools/osl_json_to_parquet.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib/tools/parquet_to_osl_json.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib.egg-info/SOURCES.txt +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib.egg-info/dependency_links.txt +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib.egg-info/entry_points.txt +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib.egg-info/requires.txt +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/opensportslib.egg-info/top_level.txt +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/scripts/run_h5_header_rule_inference.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/setup.cfg +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/conftest.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_classification_dataset_paths.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_classification_trainer_dataloader.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_config_utils_smoke.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_conversion_tools.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_extract_xvars_features.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_h5_header_rule_spotter.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_h5_tracking_dataset.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_hf_transfer_tools.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_localization_dali_filenames.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_package_smoke.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_pretrained_config_merge_policy.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_public_apis_smoke.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_setup_cli.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_subset_train_infer_integration.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_task_model_api_contract.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_vqa_api.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_vqa_metrics_semantic.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_vqa_qwen_xvars.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_vqa_training_lora.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_vqa_xvars_videochatgpt.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/convert/build_soccernet_gar.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/convert/build_soccernet_gar_action_spotting.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/convert/build_xvars_indexes.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/convert/extract_xvars_clip_features.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/convert/osl_json_to_parquet_webdataset.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/convert/parquet_webdataset_to_osl_json.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/download/download_hf_repo.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/download/download_osl_hf.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/download/upload_osl_hf.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/training/classification.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/training/localization.py +0 -0
- {opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tools/training/vqa.py +0 -0
- {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.
|
|
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.
|
|
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.
|
|
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
|
|
{opensportslib-0.3.0.dev1 → opensportslib-0.3.0.dev3}/tests/test_config_split_override_sync.py
RENAMED
|
@@ -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"
|