opensportslib 0.3.1.dev16__tar.gz → 0.3.1.dev18__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.1.dev16/opensportslib.egg-info → opensportslib-0.3.1.dev18}/PKG-INFO +1 -1
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/adaptation/spotta.py +38 -4
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/cli.py +8 -2
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/localization/e2e_spotta.yaml +10 -1
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/setup/setup.py +28 -16
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18/opensportslib.egg-info}/PKG-INFO +1 -1
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/pyproject.toml +1 -1
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/tools/test_setup.py +64 -11
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/LICENSE +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/LICENSE-COMMERCIAL +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/MANIFEST.in +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/README.md +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/examples/quickstart/basic_classification.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/examples/quickstart/basic_localization.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/examples/quickstart/basic_vqa.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/__init__.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/adaptation/__init__.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/apis/__init__.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/apis/base_task_model.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/apis/classification.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/apis/config.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/apis/configuration.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/apis/localization.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/apis/vqa.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/classification/default.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/classification/sngar_frames.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/classification/sngar_tracking.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/classification/video.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/default.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/localization/calf_resnetpca512.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/localization/default.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/localization/h5_header_distance.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/localization/h5_header_skeleton.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/localization/netvladpp_resnetpca512.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/localization/tracking_action_spotting.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/localization/video_dali.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/localization/video_ocv.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/vqa/default.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/vqa/qwen.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/vqa/qwen3_vl_native.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/vqa/qwen_lora.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/vqa/qwen_sngar_frames.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/vqa/xvars.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/__init__.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/__init__.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/accessors.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/conflicts.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/editable.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/loader.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/migrate.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/migrations/__init__.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/migrations/legacy_to_canonical.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/rule_variants.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/runtime_adapter.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/schema.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/schemas/__init__.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/schemas/schema_canonical.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/schemas/schema_legacy.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/validate.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/loss/__init__.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/loss/builder.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/loss/calf.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/loss/ce.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/loss/combine.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/loss/nll.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/optimizer/__init__.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/optimizer/builder.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/sampler/weighted_sampler.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/scheduler/__init__.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/scheduler/builder.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/trainer/__init__.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/trainer/classification_trainer.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/trainer/localization_trainer.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/trainer/vqa_trainer.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/utils/checkpoint.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/utils/config.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/utils/config_normalize.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/utils/data.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/utils/ddp.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/utils/default_args.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/utils/direct_video.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/utils/hf_runtime.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/utils/lightning.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/utils/load_annotations.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/utils/seed.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/utils/video_processing.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/utils/wandb.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/datasets/__init__.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/datasets/builder.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/datasets/classification_dataset.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/datasets/localization_dataset.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/datasets/utils/__init__.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/datasets/utils/h5_tracking.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/datasets/utils/tracking.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/datasets/vqa_dataset.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/legacy_config/classification.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/legacy_config/localization-e2e-ocv.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/legacy_config/localization-json_calf_resnetpca512.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/legacy_config/localization-json_netvlad++_resnetpca512.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/legacy_config/localization.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/legacy_config/sngar-frames.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/legacy_config/sngar-tracking.yaml +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/metrics/classification_metric.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/metrics/localization_metric.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/metrics/vqa_metric.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/__init__.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/backbones/builder.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/base/contextaware.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/base/e2e.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/base/learnablepooling.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/base/qwen_vl_native.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/base/qwen_xvars.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/base/rule_based.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/base/tracking.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/base/vars.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/base/video.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/base/video_chatgpt_compat.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/base/video_mae.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/base/xvars_videochatgpt.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/builder.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/heads/builder.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/neck/builder.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/utils/common.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/utils/impl/__init__.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/utils/impl/asformer.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/utils/impl/calf.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/utils/impl/gsm.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/utils/impl/gtad.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/utils/impl/tsm.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/utils/litebase.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/utils/modules.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/utils/shift.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/utils/utils.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/utils/vqa_prediction_priors.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/utils/vqa_prompting.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/models/utils/xvars_clip_index.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/remote_registry.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/tools/__init__.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/tools/_common.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/tools/hf_transfer.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/tools/osl_json_to_parquet.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/tools/parquet_to_osl_json.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib.egg-info/SOURCES.txt +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib.egg-info/dependency_links.txt +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib.egg-info/entry_points.txt +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib.egg-info/requires.txt +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib.egg-info/top_level.txt +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/scripts/redact_test_stream.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/scripts/release_versions.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/scripts/run_h5_header_rule_inference.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/scripts/summarize_test_report.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/setup.cfg +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/__init__.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/conftest.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/helpers/__init__.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/helpers/configs.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/helpers/pipeline_stubs.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/integration/classification/test_pipeline.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/integration/localization/test_pipeline.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/integration/localization/test_spotta.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/integration/vqa/test_pipeline.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/release/__init__.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/release/_release_common.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/release/test_00_environment.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/release/test_classification_release.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/release/test_localization_release.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/release/test_vqa_release.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/smoke/test_cli.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/smoke/test_config_utils.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/smoke/test_environment.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/smoke/test_package.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/smoke/test_public_apis.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/api/test_remote_registry.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/api/test_remote_sessions.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/api/test_server_jobs.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/api/test_server_registry.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/api/test_server_startup_scripts.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/api/test_task_model_contract.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/api/test_vqa.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/config/test_architecture.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/config/test_editable.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/config/test_optional_hf.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/config/test_pretrained_merge.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/config/test_split_overrides.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/contracts/test_architecture.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/contracts/test_dependencies.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/contracts/test_package.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/contracts/test_release_versions.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/contracts/test_runner_contract.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/core/test_classification_trainer.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/core/test_localization_hf_backend.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/core/test_training_components.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/core/test_video_processing.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/data/test_classification_paths.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/data/test_h5_tracking.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/data/test_localization_dali.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/data/test_localization_intervals.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/data/test_osl_formats.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/models/test_classification_metrics.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/models/test_header_rule_spotter.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/models/test_header_skeleton_spotter.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/models/test_localization_metrics.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/models/test_temporal_shift.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/models/test_vqa_metrics.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/models/test_vqa_qwen_xvars.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/models/test_vqa_training_lora.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/models/test_vqa_xvars_videochatgpt.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/tools/test_conversion.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/tools/test_extract_xvars_features.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/tools/test_hf_transfer.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tests/unit/tools/test_report_summary.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tools/convert/build_sn_vqa_2026_vqa.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tools/convert/build_sngar_spotting.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tools/convert/build_soccernet_gar.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tools/convert/build_soccernet_gar_action_spotting.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tools/convert/build_soccernet_gar_vqa.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tools/convert/build_xvars_indexes.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tools/convert/extract_xvars_clip_features.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tools/convert/osl_json_to_parquet_webdataset.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tools/convert/parquet_webdataset_to_osl_json.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tools/convert/sngar_dataset_card.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tools/convert/sngar_events.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tools/convert/verify_sngar_spotting.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tools/download/download_hf_repo.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tools/download/download_osl_hf.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tools/download/push_sngar_spotting.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tools/download/upload_osl_hf.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tools/training/classification.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tools/training/localization.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/tools/training/vqa.py +0 -0
- {opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/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.1.
|
|
3
|
+
Version: 0.3.1.dev18
|
|
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
|
|
@@ -59,6 +59,7 @@ class SpoTTAConfig:
|
|
|
59
59
|
drift_scale: float = 10.0
|
|
60
60
|
drift_threshold: float = 1.0
|
|
61
61
|
drift_gamma: float = 0.2
|
|
62
|
+
augmentation: bool = True
|
|
62
63
|
|
|
63
64
|
@classmethod
|
|
64
65
|
def from_mapping(cls, value: Any) -> "SpoTTAConfig":
|
|
@@ -69,6 +70,7 @@ class SpoTTAConfig:
|
|
|
69
70
|
memory = _mapping(root.get("memory"))
|
|
70
71
|
optimizer = _mapping(root.get("optimizer"))
|
|
71
72
|
teacher = _mapping(root.get("teacher"))
|
|
73
|
+
augmentation = _mapping(root.get("augmentation"))
|
|
72
74
|
|
|
73
75
|
_require_supported_value(
|
|
74
76
|
root,
|
|
@@ -76,6 +78,34 @@ class SpoTTAConfig:
|
|
|
76
78
|
"adapt_then_predict",
|
|
77
79
|
"adaptation",
|
|
78
80
|
)
|
|
81
|
+
_require_supported_value(tether, "mode", "bayesian", "robust_bn.tether")
|
|
82
|
+
_require_supported_value(
|
|
83
|
+
gate,
|
|
84
|
+
"uncertainty",
|
|
85
|
+
"one_minus_max_probability",
|
|
86
|
+
"confidence_gate",
|
|
87
|
+
)
|
|
88
|
+
_require_supported_value(
|
|
89
|
+
gate,
|
|
90
|
+
"aggregation",
|
|
91
|
+
"min_over_predicted_action_frames",
|
|
92
|
+
"confidence_gate",
|
|
93
|
+
)
|
|
94
|
+
_require_supported_value(optimizer, "type", "Adam", "optimizer")
|
|
95
|
+
_require_supported_value(
|
|
96
|
+
optimizer,
|
|
97
|
+
"trainable_parameters",
|
|
98
|
+
"batch_norm_affine_only",
|
|
99
|
+
"optimizer",
|
|
100
|
+
)
|
|
101
|
+
_require_supported_value(teacher, "type", "ema", "teacher")
|
|
102
|
+
_require_supported_value(
|
|
103
|
+
teacher, "adaptive_from_bn_drift", True, "teacher"
|
|
104
|
+
)
|
|
105
|
+
_require_supported_value(
|
|
106
|
+
augmentation, "mode", "framewise_rotta_strong", "augmentation"
|
|
107
|
+
)
|
|
108
|
+
|
|
79
109
|
config = cls(
|
|
80
110
|
alpha=float(robust_bn.get("alpha", cls.alpha)),
|
|
81
111
|
tether_cap=float(tether.get("cap", cls.tether_cap)),
|
|
@@ -103,6 +133,7 @@ class SpoTTAConfig:
|
|
|
103
133
|
teacher.get("drift_threshold", cls.drift_threshold)
|
|
104
134
|
),
|
|
105
135
|
drift_gamma=float(teacher.get("drift_gamma", cls.drift_gamma)),
|
|
136
|
+
augmentation=bool(augmentation.get("enabled", cls.augmentation)),
|
|
106
137
|
)
|
|
107
138
|
config.validate()
|
|
108
139
|
return config
|
|
@@ -546,10 +577,13 @@ class SpoTTA:
|
|
|
546
577
|
with torch.no_grad():
|
|
547
578
|
teacher_logits = _logits(self.teacher(clips))
|
|
548
579
|
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
580
|
+
if self.config.augmentation:
|
|
581
|
+
batch, time, channels, height, width = clips.shape
|
|
582
|
+
augmented = self.augmentation(
|
|
583
|
+
clips.reshape(batch * time, channels, height, width)
|
|
584
|
+
).reshape(batch, time, channels, height, width)
|
|
585
|
+
else:
|
|
586
|
+
augmented = clips
|
|
553
587
|
|
|
554
588
|
self.student.train()
|
|
555
589
|
student_logits = _logits(self.student(augmented))
|
|
@@ -10,6 +10,7 @@ def main(argv: Optional[list[str]] = None) -> int:
|
|
|
10
10
|
parser = argparse.ArgumentParser(prog="opensportslib")
|
|
11
11
|
parser.add_argument("command", choices=["setup"])
|
|
12
12
|
parser.add_argument("--pyg", action="store_true")
|
|
13
|
+
parser.add_argument("--pyg_extensions", action="store_true")
|
|
13
14
|
parser.add_argument("--dali", action="store_true")
|
|
14
15
|
parser.add_argument("--vqa_xvars", action="store_true")
|
|
15
16
|
parser.add_argument("--vqa_qwen", action="store_true")
|
|
@@ -17,12 +18,17 @@ def main(argv: Optional[list[str]] = None) -> int:
|
|
|
17
18
|
args = parser.parse_args(argv)
|
|
18
19
|
|
|
19
20
|
if args.command == "setup":
|
|
20
|
-
|
|
21
|
+
setup_kwargs = dict(
|
|
21
22
|
pyg=args.pyg,
|
|
22
23
|
dali=args.dali,
|
|
23
24
|
vqa_xvars=args.vqa_xvars,
|
|
24
|
-
vqa_qwen=args.vqa_qwen
|
|
25
|
+
vqa_qwen=args.vqa_qwen,
|
|
25
26
|
)
|
|
27
|
+
# Preserve the established setup() call contract unless the new,
|
|
28
|
+
# opt-in extension install was explicitly requested.
|
|
29
|
+
if args.pyg_extensions:
|
|
30
|
+
setup_kwargs["pyg_extensions"] = True
|
|
31
|
+
setup(**setup_kwargs)
|
|
26
32
|
return 0
|
|
27
33
|
|
|
28
34
|
return 2
|
|
@@ -39,7 +39,6 @@ DATA:
|
|
|
39
39
|
resize:
|
|
40
40
|
height: 224
|
|
41
41
|
width: 398
|
|
42
|
-
preserve_aspect_ratio: true
|
|
43
42
|
params:
|
|
44
43
|
crop_dim: 224
|
|
45
44
|
dilate_len: 0
|
|
@@ -70,10 +69,13 @@ MODEL:
|
|
|
70
69
|
robust_bn:
|
|
71
70
|
alpha: 0.05
|
|
72
71
|
tether:
|
|
72
|
+
mode: bayesian
|
|
73
73
|
cap: 0.5
|
|
74
74
|
confidence_gate:
|
|
75
75
|
action_class_index: 1
|
|
76
76
|
min_action_frames: 1
|
|
77
|
+
uncertainty: one_minus_max_probability
|
|
78
|
+
aggregation: min_over_predicted_action_frames
|
|
77
79
|
threshold: 0.3
|
|
78
80
|
memory:
|
|
79
81
|
capacity: 8
|
|
@@ -81,14 +83,21 @@ MODEL:
|
|
|
81
83
|
lambda_t: 1.0
|
|
82
84
|
lambda_u: 1.0
|
|
83
85
|
optimizer:
|
|
86
|
+
type: Adam
|
|
84
87
|
learning_rate: 0.001
|
|
85
88
|
beta: 0.9
|
|
89
|
+
trainable_parameters: batch_norm_affine_only
|
|
86
90
|
teacher:
|
|
91
|
+
type: ema
|
|
87
92
|
base_nu: 0.001
|
|
93
|
+
adaptive_from_bn_drift: true
|
|
88
94
|
max_nu: 0.02
|
|
89
95
|
drift_scale: 10.0
|
|
90
96
|
drift_threshold: 1.0
|
|
91
97
|
drift_gamma: 0.2
|
|
98
|
+
augmentation:
|
|
99
|
+
enabled: true
|
|
100
|
+
mode: framewise_rotta_strong
|
|
92
101
|
|
|
93
102
|
TRAIN:
|
|
94
103
|
execution:
|
|
@@ -16,8 +16,9 @@ LEGACY_GPU_CUDA_WHEEL_MAX_COMPUTE_CAPABILITY = (9, 0)
|
|
|
16
16
|
CUDA13_REQUIRED_MIN_COMPUTE_CAPABILITY = (10, 0)
|
|
17
17
|
|
|
18
18
|
# PyG extension wheels are published for a narrower PyTorch matrix than the
|
|
19
|
-
# base PyTorch packages.
|
|
20
|
-
#
|
|
19
|
+
# base PyTorch packages. They are optional: most OpenSportsLib graph paths
|
|
20
|
+
# only need ``torch-geometric`` and must remain usable on platforms where no
|
|
21
|
+
# matching extension wheels are published.
|
|
21
22
|
PYG_TORCH_VERSION = "2.12.1"
|
|
22
23
|
PYG_TORCH_PACKAGES = (
|
|
23
24
|
f"torch=={PYG_TORCH_VERSION}",
|
|
@@ -199,7 +200,7 @@ def pyg_wheel_url(torch_version=None, cuda_tag=None):
|
|
|
199
200
|
|
|
200
201
|
|
|
201
202
|
def validate_pyg_wheels():
|
|
202
|
-
"""Ensure every
|
|
203
|
+
"""Ensure every optional PyG extension wheel is available before installing it.
|
|
203
204
|
|
|
204
205
|
``--only-binary`` is intentional: pip otherwise falls back to a source
|
|
205
206
|
build, which is both slow and incompatible with its isolated build
|
|
@@ -246,7 +247,7 @@ def install_dali():
|
|
|
246
247
|
"cupy-cuda12x"
|
|
247
248
|
])
|
|
248
249
|
|
|
249
|
-
def install_pyg():
|
|
250
|
+
def install_pyg(*, extensions=False):
|
|
250
251
|
import torch
|
|
251
252
|
|
|
252
253
|
python = sys.executable
|
|
@@ -257,23 +258,25 @@ def install_pyg():
|
|
|
257
258
|
f"profile (PyTorch {PYG_TORCH_VERSION}); found PyTorch {torch_version}. "
|
|
258
259
|
"Run 'opensportslib setup --pyg' so the matching Torch stack is installed."
|
|
259
260
|
)
|
|
260
|
-
print("\nInstalling
|
|
261
|
-
url = pyg_wheel_url(torch_version)
|
|
261
|
+
print("\nInstalling PyTorch Geometric...\n")
|
|
262
262
|
|
|
263
263
|
subprocess.check_call([
|
|
264
264
|
python, "-m", "pip", "install", "torch-geometric",
|
|
265
265
|
])
|
|
266
|
-
subprocess.check_call([
|
|
267
|
-
python, "-m", "pip", "install",
|
|
268
|
-
*PYG_EXTENSION_PACKAGES, "--only-binary=:all:", "-f", url
|
|
269
|
-
])
|
|
270
266
|
|
|
271
|
-
|
|
267
|
+
if extensions:
|
|
268
|
+
url = pyg_wheel_url(torch_version)
|
|
269
|
+
subprocess.check_call([
|
|
270
|
+
python, "-m", "pip", "install",
|
|
271
|
+
*PYG_EXTENSION_PACKAGES, "--only-binary=:all:", "-f", url
|
|
272
|
+
])
|
|
273
|
+
|
|
274
|
+
def install_extras(dali=False, pyg=False, pyg_extensions=False):
|
|
272
275
|
if dali:
|
|
273
276
|
install_dali()
|
|
274
277
|
print("NVIDIA DALI installed successfully.")
|
|
275
278
|
if pyg:
|
|
276
|
-
install_pyg()
|
|
279
|
+
install_pyg(extensions=pyg_extensions)
|
|
277
280
|
print("PyTorch Geometric installed successfully.")
|
|
278
281
|
|
|
279
282
|
|
|
@@ -289,11 +292,13 @@ def verify():
|
|
|
289
292
|
else:
|
|
290
293
|
print("Running on CPU")
|
|
291
294
|
|
|
292
|
-
def setup(dali=False, pyg=False, vqa_xvars=False, vqa_qwen=False):
|
|
293
|
-
if pyg:
|
|
295
|
+
def setup(dali=False, pyg=False, pyg_extensions=False, vqa_xvars=False, vqa_qwen=False):
|
|
296
|
+
if pyg_extensions and not pyg:
|
|
297
|
+
raise ValueError("--pyg_extensions requires --pyg")
|
|
298
|
+
if pyg_extensions:
|
|
294
299
|
validate_pyg_wheels()
|
|
295
300
|
install_torch(pyg_compatible=pyg)
|
|
296
|
-
install_extras(dali=dali, pyg=pyg)
|
|
301
|
+
install_extras(dali=dali, pyg=pyg, pyg_extensions=pyg_extensions)
|
|
297
302
|
if vqa_xvars:
|
|
298
303
|
install_xvars_dependencies(XVARS_DEPENDENCY_PINS)
|
|
299
304
|
if vqa_qwen:
|
|
@@ -310,9 +315,16 @@ if __name__ == "__main__":
|
|
|
310
315
|
parser = argparse.ArgumentParser()
|
|
311
316
|
parser.add_argument("--dali", action="store_true")
|
|
312
317
|
parser.add_argument("--pyg", action="store_true")
|
|
318
|
+
parser.add_argument("--pyg_extensions", action="store_true")
|
|
313
319
|
parser.add_argument("--vqa_xvars", action="store_true")
|
|
314
320
|
parser.add_argument("--vqa_qwen", action="store_true")
|
|
315
321
|
|
|
316
322
|
args = parser.parse_args()
|
|
317
323
|
|
|
318
|
-
setup(
|
|
324
|
+
setup(
|
|
325
|
+
dali=args.dali,
|
|
326
|
+
pyg=args.pyg,
|
|
327
|
+
pyg_extensions=args.pyg_extensions,
|
|
328
|
+
vqa_xvars=args.vqa_xvars,
|
|
329
|
+
vqa_qwen=args.vqa_qwen,
|
|
330
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: opensportslib
|
|
3
|
-
Version: 0.3.1.
|
|
3
|
+
Version: 0.3.1.dev18
|
|
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.1.
|
|
7
|
+
version = "0.3.1.dev18"
|
|
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"
|
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import sys
|
|
4
|
+
import types
|
|
5
|
+
|
|
3
6
|
import pytest
|
|
4
7
|
|
|
5
8
|
from opensportslib import cli
|
|
6
9
|
from opensportslib.setup import setup as setup_lib
|
|
7
10
|
|
|
8
11
|
|
|
9
|
-
def test_select_cuda_wheel_uses_cu126_for_pre_sm75_gpu_with_cuda_13():
|
|
12
|
+
def test_select_cuda_wheel_uses_cu126_for_pre_sm75_gpu_with_cuda_13(monkeypatch):
|
|
13
|
+
monkeypatch.setattr(setup_lib.platform, "machine", lambda: "x86_64")
|
|
10
14
|
assert setup_lib.select_cuda_wheel("13.0", [(7, 0)]) == "cu126"
|
|
11
15
|
|
|
12
16
|
|
|
13
|
-
def test_select_cuda_wheel_uses_cu126_for_pascal_with_cuda_13():
|
|
17
|
+
def test_select_cuda_wheel_uses_cu126_for_pascal_with_cuda_13(monkeypatch):
|
|
18
|
+
monkeypatch.setattr(setup_lib.platform, "machine", lambda: "x86_64")
|
|
14
19
|
assert setup_lib.select_cuda_wheel("13.0", [(6, 0)]) == "cu126"
|
|
15
20
|
|
|
16
21
|
|
|
@@ -46,7 +51,7 @@ def test_install_torch_uses_the_pinned_pyg_compatibility_profile(monkeypatch):
|
|
|
46
51
|
)
|
|
47
52
|
|
|
48
53
|
|
|
49
|
-
def
|
|
54
|
+
def test_validate_pyg_wheels_checks_all_optional_binary_wheels(monkeypatch):
|
|
50
55
|
calls: list[list[str]] = []
|
|
51
56
|
|
|
52
57
|
monkeypatch.setattr(setup_lib.sys, "executable", "/usr/bin/python3")
|
|
@@ -71,7 +76,23 @@ def test_pyg_extension_packages_match_the_supported_optional_libraries():
|
|
|
71
76
|
)
|
|
72
77
|
|
|
73
78
|
|
|
74
|
-
def
|
|
79
|
+
def test_install_pyg_skips_optional_extension_downloads_by_default(monkeypatch):
|
|
80
|
+
calls: list[list[str]] = []
|
|
81
|
+
|
|
82
|
+
monkeypatch.setattr(setup_lib.sys, "executable", "/usr/bin/python3")
|
|
83
|
+
monkeypatch.setitem(
|
|
84
|
+
sys.modules,
|
|
85
|
+
"torch",
|
|
86
|
+
types.SimpleNamespace(__version__="2.12.1+cu130"),
|
|
87
|
+
)
|
|
88
|
+
monkeypatch.setattr(setup_lib.subprocess, "check_call", lambda cmd: calls.append(cmd) or 0)
|
|
89
|
+
|
|
90
|
+
setup_lib.install_pyg()
|
|
91
|
+
|
|
92
|
+
assert calls == [["/usr/bin/python3", "-m", "pip", "install", "torch-geometric"]]
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def test_setup_installs_pyg_without_optional_extensions(monkeypatch):
|
|
75
96
|
calls: list[object] = []
|
|
76
97
|
|
|
77
98
|
monkeypatch.setattr(
|
|
@@ -79,17 +100,41 @@ def test_setup_selects_pyg_torch_profile_before_installing_pyg(monkeypatch):
|
|
|
79
100
|
"install_torch",
|
|
80
101
|
lambda *, pyg_compatible=False: calls.append(("torch", pyg_compatible)),
|
|
81
102
|
)
|
|
82
|
-
monkeypatch.setattr(setup_lib, "validate_pyg_wheels", lambda: calls.append("validate"))
|
|
83
103
|
monkeypatch.setattr(
|
|
84
104
|
setup_lib,
|
|
85
105
|
"install_extras",
|
|
86
|
-
lambda dali=False, pyg=False: calls.append(
|
|
106
|
+
lambda dali=False, pyg=False, pyg_extensions=False: calls.append(
|
|
107
|
+
("extras", dali, pyg, pyg_extensions)
|
|
108
|
+
),
|
|
87
109
|
)
|
|
88
110
|
monkeypatch.setattr(setup_lib, "verify", lambda: calls.append("verify"))
|
|
89
111
|
|
|
90
112
|
setup_lib.setup(pyg=True)
|
|
91
113
|
|
|
92
|
-
assert calls == [
|
|
114
|
+
assert calls == [("torch", True), ("extras", False, True, False), "verify"]
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def test_setup_validates_extensions_only_when_explicitly_requested(monkeypatch):
|
|
118
|
+
calls: list[object] = []
|
|
119
|
+
|
|
120
|
+
monkeypatch.setattr(setup_lib, "validate_pyg_wheels", lambda: calls.append("validate"))
|
|
121
|
+
monkeypatch.setattr(
|
|
122
|
+
setup_lib,
|
|
123
|
+
"install_torch",
|
|
124
|
+
lambda *, pyg_compatible=False: calls.append(("torch", pyg_compatible)),
|
|
125
|
+
)
|
|
126
|
+
monkeypatch.setattr(
|
|
127
|
+
setup_lib,
|
|
128
|
+
"install_extras",
|
|
129
|
+
lambda dali=False, pyg=False, pyg_extensions=False: calls.append(
|
|
130
|
+
("extras", dali, pyg, pyg_extensions)
|
|
131
|
+
),
|
|
132
|
+
)
|
|
133
|
+
monkeypatch.setattr(setup_lib, "verify", lambda: calls.append("verify"))
|
|
134
|
+
|
|
135
|
+
setup_lib.setup(pyg=True, pyg_extensions=True)
|
|
136
|
+
|
|
137
|
+
assert calls == ["validate", ("torch", True), ("extras", False, True, True), "verify"]
|
|
93
138
|
|
|
94
139
|
|
|
95
140
|
def test_select_cuda_wheel_uses_cu130_for_dgx_spark():
|
|
@@ -108,9 +153,10 @@ def test_select_cuda_wheel_uses_highest_driver_compatible_wheel():
|
|
|
108
153
|
def test_cli_setup_forwards_xvars_flag(monkeypatch):
|
|
109
154
|
captured: dict[str, object] = {}
|
|
110
155
|
|
|
111
|
-
def fake_setup(*, dali: bool, pyg: bool, vqa_xvars: bool, vqa_qwen: bool):
|
|
156
|
+
def fake_setup(*, dali: bool, pyg: bool, vqa_xvars: bool, vqa_qwen: bool, **kwargs):
|
|
112
157
|
captured["dali"] = dali
|
|
113
158
|
captured["pyg"] = pyg
|
|
159
|
+
captured.update(kwargs)
|
|
114
160
|
captured["vqa_xvars"] = vqa_xvars
|
|
115
161
|
captured["vqa_qwen"] = vqa_qwen
|
|
116
162
|
|
|
@@ -125,9 +171,10 @@ def test_cli_setup_forwards_xvars_flag(monkeypatch):
|
|
|
125
171
|
def test_cli_setup_forwards_qwen_flag(monkeypatch):
|
|
126
172
|
captured: dict[str, object] = {}
|
|
127
173
|
|
|
128
|
-
def fake_setup(*, dali: bool, pyg: bool, vqa_xvars: bool, vqa_qwen: bool):
|
|
174
|
+
def fake_setup(*, dali: bool, pyg: bool, vqa_xvars: bool, vqa_qwen: bool, **kwargs):
|
|
129
175
|
captured["dali"] = dali
|
|
130
176
|
captured["pyg"] = pyg
|
|
177
|
+
captured.update(kwargs)
|
|
131
178
|
captured["vqa_xvars"] = vqa_xvars
|
|
132
179
|
captured["vqa_qwen"] = vqa_qwen
|
|
133
180
|
|
|
@@ -192,7 +239,13 @@ def test_install_xvars_dependencies_uninstalls_then_reinstalls(monkeypatch):
|
|
|
192
239
|
def test_setup_skips_vqa_dependency_install_when_flags_are_false(monkeypatch):
|
|
193
240
|
calls: list[str] = []
|
|
194
241
|
|
|
195
|
-
monkeypatch.setattr(
|
|
242
|
+
monkeypatch.setattr(
|
|
243
|
+
setup_lib,
|
|
244
|
+
"install_extras",
|
|
245
|
+
lambda dali=False, pyg=False, pyg_extensions=False: calls.append(
|
|
246
|
+
f"extras:{dali}:{pyg}:{pyg_extensions}"
|
|
247
|
+
),
|
|
248
|
+
)
|
|
196
249
|
monkeypatch.setattr(setup_lib, "install_xvars_dependencies", lambda pins: calls.append(f"deps:{sorted(pins)}"))
|
|
197
250
|
monkeypatch.setattr(setup_lib, "verify", lambda: calls.append("verify"))
|
|
198
251
|
monkeypatch.setattr(
|
|
@@ -203,4 +256,4 @@ def test_setup_skips_vqa_dependency_install_when_flags_are_false(monkeypatch):
|
|
|
203
256
|
|
|
204
257
|
setup_lib.setup(dali=True, pyg=False, vqa_xvars=False, vqa_qwen=False)
|
|
205
258
|
|
|
206
|
-
assert calls == ["torch:False", "extras:True:False", "verify"]
|
|
259
|
+
assert calls == ["torch:False", "extras:True:False:False", "verify"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/examples/quickstart/basic_classification.py
RENAMED
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/examples/quickstart/basic_localization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/adaptation/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/apis/base_task_model.py
RENAMED
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/apis/classification.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/vqa/default.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/vqa/qwen_lora.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/configs/vqa/xvars.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/__init__.py
RENAMED
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/accessors.py
RENAMED
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/conflicts.py
RENAMED
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/editable.py
RENAMED
|
File without changes
|
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/migrate.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/rule_variants.py
RENAMED
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/runtime_adapter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/config/validate.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/optimizer/__init__.py
RENAMED
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/optimizer/builder.py
RENAMED
|
File without changes
|
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/scheduler/__init__.py
RENAMED
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/scheduler/builder.py
RENAMED
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/trainer/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/trainer/vqa_trainer.py
RENAMED
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/utils/checkpoint.py
RENAMED
|
File without changes
|
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/utils/config_normalize.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/utils/default_args.py
RENAMED
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/utils/direct_video.py
RENAMED
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/utils/hf_runtime.py
RENAMED
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/utils/lightning.py
RENAMED
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/utils/load_annotations.py
RENAMED
|
File without changes
|
|
File without changes
|
{opensportslib-0.3.1.dev16 → opensportslib-0.3.1.dev18}/opensportslib/core/utils/video_processing.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|