yavih 1.0.0__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.
- yavih-1.0.0/.github/release.yml +18 -0
- yavih-1.0.0/.github/workflows/ci.yml +109 -0
- yavih-1.0.0/.github/workflows/headers.yml +60 -0
- yavih-1.0.0/.github/workflows/release.yml +105 -0
- yavih-1.0.0/.gitignore +32 -0
- yavih-1.0.0/LICENSE +21 -0
- yavih-1.0.0/PKG-INFO +200 -0
- yavih-1.0.0/README.md +157 -0
- yavih-1.0.0/assets/benchmark-header/base.css +39 -0
- yavih-1.0.0/assets/benchmark-header/template.html +20 -0
- yavih-1.0.0/assets/header.html +113 -0
- yavih-1.0.0/assets/header.png +0 -0
- yavih-1.0.0/assets/readme/agent.gif +0 -0
- yavih-1.0.0/assets/readme/contribute.gif +0 -0
- yavih-1.0.0/assets/readme/hash.gif +0 -0
- yavih-1.0.0/assets/readme/library.gif +0 -0
- yavih-1.0.0/docs/README.md +42 -0
- yavih-1.0.0/docs/adding-a-readout.md +111 -0
- yavih-1.0.0/docs/benchmark-folder.md +615 -0
- yavih-1.0.0/docs/bridge.md +592 -0
- yavih-1.0.0/docs/cli.md +289 -0
- yavih-1.0.0/docs/configuration.md +293 -0
- yavih-1.0.0/docs/conformance.md +218 -0
- yavih-1.0.0/docs/contributing-a-benchmark.md +370 -0
- yavih-1.0.0/docs/design.md +319 -0
- yavih-1.0.0/docs/development.md +241 -0
- yavih-1.0.0/docs/execution.md +605 -0
- yavih-1.0.0/docs/features.md +470 -0
- yavih-1.0.0/docs/hashing.md +446 -0
- yavih-1.0.0/docs/project-layout.md +154 -0
- yavih-1.0.0/docs/quickstart.md +187 -0
- yavih-1.0.0/docs/readouts.md +476 -0
- yavih-1.0.0/docs/registry.md +101 -0
- yavih-1.0.0/docs/releasing.md +79 -0
- yavih-1.0.0/docs/results.md +416 -0
- yavih-1.0.0/docs/suites.md +144 -0
- yavih-1.0.0/docs/trial-run.md +166 -0
- yavih-1.0.0/docs/validation.md +319 -0
- yavih-1.0.0/pyproject.toml +108 -0
- yavih-1.0.0/setup.cfg +4 -0
- yavih-1.0.0/src/yavih/__init__.py +53 -0
- yavih-1.0.0/src/yavih/__main__.py +8 -0
- yavih-1.0.0/src/yavih/_toml.py +311 -0
- yavih-1.0.0/src/yavih/_version.py +5 -0
- yavih-1.0.0/src/yavih/benchmark.py +3213 -0
- yavih-1.0.0/src/yavih/benchmarks/README.md +117 -0
- yavih-1.0.0/src/yavih/benchmarks/__init__.py +107 -0
- yavih-1.0.0/src/yavih/benchmarks/audioset20k/README.md +100 -0
- yavih-1.0.0/src/yavih/benchmarks/audioset20k/assets/header.png +0 -0
- yavih-1.0.0/src/yavih/benchmarks/audioset20k/assets/header.src.sha256 +1 -0
- yavih-1.0.0/src/yavih/benchmarks/audioset20k/benchmark.yaml +173 -0
- yavih-1.0.0/src/yavih/benchmarks/audioset20k/bridge_template.py +307 -0
- yavih-1.0.0/src/yavih/benchmarks/audioset20k/classes.csv +528 -0
- yavih-1.0.0/src/yavih/benchmarks/audioset20k/conformance/expected.json +43 -0
- yavih-1.0.0/src/yavih/benchmarks/audioset20k/make_manifest.py +346 -0
- yavih-1.0.0/src/yavih/benchmarks/audioset20k/manifest.csv.gz +0 -0
- yavih-1.0.0/src/yavih/benchmarks/audioset20k/prepare/01_download.sh +14 -0
- yavih-1.0.0/src/yavih/benchmarks/audioset20k/prepare/02_verify.sh +22 -0
- yavih-1.0.0/src/yavih/benchmarks/audioset20k/setup.md +180 -0
- yavih-1.0.0/src/yavih/benchmarks/audioset20k/tests/test_folder.py +691 -0
- yavih-1.0.0/src/yavih/benchmarks/ave/README.md +87 -0
- yavih-1.0.0/src/yavih/benchmarks/ave/assets/header.png +0 -0
- yavih-1.0.0/src/yavih/benchmarks/ave/assets/header.src.sha256 +1 -0
- yavih-1.0.0/src/yavih/benchmarks/ave/benchmark.yaml +185 -0
- yavih-1.0.0/src/yavih/benchmarks/ave/bridge_template.py +281 -0
- yavih-1.0.0/src/yavih/benchmarks/ave/classes.csv +30 -0
- yavih-1.0.0/src/yavih/benchmarks/ave/conformance/expected.json +58 -0
- yavih-1.0.0/src/yavih/benchmarks/ave/make_manifest.py +365 -0
- yavih-1.0.0/src/yavih/benchmarks/ave/manifest.csv.gz +0 -0
- yavih-1.0.0/src/yavih/benchmarks/ave/prepare/01_download.sh +38 -0
- yavih-1.0.0/src/yavih/benchmarks/ave/prepare/02_verify.sh +40 -0
- yavih-1.0.0/src/yavih/benchmarks/ave/prepare/03_index_tar.py +107 -0
- yavih-1.0.0/src/yavih/benchmarks/ave/prepare/04_media_census.py +137 -0
- yavih-1.0.0/src/yavih/benchmarks/ave/prepare/05_make_manifest.sh +21 -0
- yavih-1.0.0/src/yavih/benchmarks/ave/setup.md +185 -0
- yavih-1.0.0/src/yavih/benchmarks/ave/tests/test_folder.py +580 -0
- yavih-1.0.0/src/yavih/benchmarks/avsync/README.md +109 -0
- yavih-1.0.0/src/yavih/benchmarks/avsync/assets/header.png +0 -0
- yavih-1.0.0/src/yavih/benchmarks/avsync/assets/header.src.sha256 +1 -0
- yavih-1.0.0/src/yavih/benchmarks/avsync/benchmark.yaml +250 -0
- yavih-1.0.0/src/yavih/benchmarks/avsync/bridge_template.py +252 -0
- yavih-1.0.0/src/yavih/benchmarks/avsync/classes.csv +10 -0
- yavih-1.0.0/src/yavih/benchmarks/avsync/conformance/expected.json +59 -0
- yavih-1.0.0/src/yavih/benchmarks/avsync/make_manifest.py +840 -0
- yavih-1.0.0/src/yavih/benchmarks/avsync/manifest.csv.gz +0 -0
- yavih-1.0.0/src/yavih/benchmarks/avsync/prepare/01_vggsound_media.sh +37 -0
- yavih-1.0.0/src/yavih/benchmarks/avsync/prepare/03_materialize.py +637 -0
- yavih-1.0.0/src/yavih/benchmarks/avsync/prepare/04_verify_layout.sh +21 -0
- yavih-1.0.0/src/yavih/benchmarks/avsync/probe.py +241 -0
- yavih-1.0.0/src/yavih/benchmarks/avsync/setup.md +216 -0
- yavih-1.0.0/src/yavih/benchmarks/avsync/tests/test_folder.py +797 -0
- yavih-1.0.0/src/yavih/benchmarks/esc50/README.md +94 -0
- yavih-1.0.0/src/yavih/benchmarks/esc50/assets/header.png +0 -0
- yavih-1.0.0/src/yavih/benchmarks/esc50/assets/header.src.sha256 +1 -0
- yavih-1.0.0/src/yavih/benchmarks/esc50/benchmark.yaml +157 -0
- yavih-1.0.0/src/yavih/benchmarks/esc50/bridge_template.py +182 -0
- yavih-1.0.0/src/yavih/benchmarks/esc50/classes.csv +51 -0
- yavih-1.0.0/src/yavih/benchmarks/esc50/conformance/expected.json +58 -0
- yavih-1.0.0/src/yavih/benchmarks/esc50/make_manifest.py +264 -0
- yavih-1.0.0/src/yavih/benchmarks/esc50/manifest.csv.gz +0 -0
- yavih-1.0.0/src/yavih/benchmarks/esc50/prepare/01_download.sh +33 -0
- yavih-1.0.0/src/yavih/benchmarks/esc50/prepare/02_verify.sh +32 -0
- yavih-1.0.0/src/yavih/benchmarks/esc50/prepare/03_make_manifest.sh +22 -0
- yavih-1.0.0/src/yavih/benchmarks/esc50/setup.md +142 -0
- yavih-1.0.0/src/yavih/benchmarks/esc50/tests/test_folder.py +443 -0
- yavih-1.0.0/src/yavih/benchmarks/fsd50k/README.md +102 -0
- yavih-1.0.0/src/yavih/benchmarks/fsd50k/assets/header.png +0 -0
- yavih-1.0.0/src/yavih/benchmarks/fsd50k/assets/header.src.sha256 +1 -0
- yavih-1.0.0/src/yavih/benchmarks/fsd50k/benchmark.yaml +173 -0
- yavih-1.0.0/src/yavih/benchmarks/fsd50k/bridge_template.py +186 -0
- yavih-1.0.0/src/yavih/benchmarks/fsd50k/classes.csv +201 -0
- yavih-1.0.0/src/yavih/benchmarks/fsd50k/conformance/expected.json +48 -0
- yavih-1.0.0/src/yavih/benchmarks/fsd50k/make_manifest.py +301 -0
- yavih-1.0.0/src/yavih/benchmarks/fsd50k/manifest.csv.gz +0 -0
- yavih-1.0.0/src/yavih/benchmarks/fsd50k/prepare/01_download.sh +40 -0
- yavih-1.0.0/src/yavih/benchmarks/fsd50k/prepare/02_extract.sh +45 -0
- yavih-1.0.0/src/yavih/benchmarks/fsd50k/prepare/03_make_manifest.sh +25 -0
- yavih-1.0.0/src/yavih/benchmarks/fsd50k/setup.md +147 -0
- yavih-1.0.0/src/yavih/benchmarks/fsd50k/tests/test_folder.py +557 -0
- yavih-1.0.0/src/yavih/benchmarks/in1k/README.md +94 -0
- yavih-1.0.0/src/yavih/benchmarks/in1k/assets/header.png +0 -0
- yavih-1.0.0/src/yavih/benchmarks/in1k/assets/header.src.sha256 +1 -0
- yavih-1.0.0/src/yavih/benchmarks/in1k/benchmark.yaml +168 -0
- yavih-1.0.0/src/yavih/benchmarks/in1k/bridge_template.py +184 -0
- yavih-1.0.0/src/yavih/benchmarks/in1k/classes.csv +1001 -0
- yavih-1.0.0/src/yavih/benchmarks/in1k/conformance/expected.json +46 -0
- yavih-1.0.0/src/yavih/benchmarks/in1k/curation.json +38 -0
- yavih-1.0.0/src/yavih/benchmarks/in1k/make_manifest.py +238 -0
- yavih-1.0.0/src/yavih/benchmarks/in1k/manifest.csv.gz +0 -0
- yavih-1.0.0/src/yavih/benchmarks/in1k/prepare/01_locate_mirror.sh +49 -0
- yavih-1.0.0/src/yavih/benchmarks/in1k/prepare/02_extract_torchvision_root.sh +34 -0
- yavih-1.0.0/src/yavih/benchmarks/in1k/prepare/03_stage_probe_subset.sh +26 -0
- yavih-1.0.0/src/yavih/benchmarks/in1k/prepare/04_verify.sh +14 -0
- yavih-1.0.0/src/yavih/benchmarks/in1k/setup.md +173 -0
- yavih-1.0.0/src/yavih/benchmarks/in1k/tests/test_folder.py +520 -0
- yavih-1.0.0/src/yavih/benchmarks/k400/README.md +96 -0
- yavih-1.0.0/src/yavih/benchmarks/k400/assets/header.png +0 -0
- yavih-1.0.0/src/yavih/benchmarks/k400/assets/header.src.sha256 +1 -0
- yavih-1.0.0/src/yavih/benchmarks/k400/benchmark.yaml +172 -0
- yavih-1.0.0/src/yavih/benchmarks/k400/bridge_template.py +173 -0
- yavih-1.0.0/src/yavih/benchmarks/k400/classes.csv +401 -0
- yavih-1.0.0/src/yavih/benchmarks/k400/conformance/expected.json +46 -0
- yavih-1.0.0/src/yavih/benchmarks/k400/make_manifest.py +405 -0
- yavih-1.0.0/src/yavih/benchmarks/k400/manifest.csv.gz +0 -0
- yavih-1.0.0/src/yavih/benchmarks/k400/prepare/01_download_torrent.sh +71 -0
- yavih-1.0.0/src/yavih/benchmarks/k400/prepare/02_stage.sh +59 -0
- yavih-1.0.0/src/yavih/benchmarks/k400/prepare/03_verify_layout.sh +32 -0
- yavih-1.0.0/src/yavih/benchmarks/k400/prepare/04_pack_webdataset_optional.sh +74 -0
- yavih-1.0.0/src/yavih/benchmarks/k400/setup.md +188 -0
- yavih-1.0.0/src/yavih/benchmarks/k400/tests/test_folder.py +438 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/README.md +108 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/assets/header.png +0 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/assets/header.src.sha256 +1 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/benchmark.yaml +212 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/bridge_template.py +164 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/conformance/expected.json +56 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/curation.json +43 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/make_manifest.py +276 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/manifest.csv.gz +0 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/01_locate_mirror.sh +36 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/02_build_eval_index.sh +19 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/03_stage_train_subset.sh +17 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/04_derive_targets.sh +18 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/05_recontainer_png.sh +20 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/06_verify_readable.sh +15 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/07_verify.sh +29 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/build_eval_index.py +150 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/derive_targets.py +262 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/recontainer_png.py +326 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/verify_readable.py +112 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/probe.py +139 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/rgb_png.sha256.csv.gz +0 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/setup.md +265 -0
- yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/tests/test_folder.py +567 -0
- yavih-1.0.0/src/yavih/benchmarks/ssv2/README.md +104 -0
- yavih-1.0.0/src/yavih/benchmarks/ssv2/assets/header.png +0 -0
- yavih-1.0.0/src/yavih/benchmarks/ssv2/assets/header.src.sha256 +1 -0
- yavih-1.0.0/src/yavih/benchmarks/ssv2/benchmark.yaml +176 -0
- yavih-1.0.0/src/yavih/benchmarks/ssv2/bridge_template.py +203 -0
- yavih-1.0.0/src/yavih/benchmarks/ssv2/classes.csv +175 -0
- yavih-1.0.0/src/yavih/benchmarks/ssv2/conformance/expected.json +46 -0
- yavih-1.0.0/src/yavih/benchmarks/ssv2/curation.json +43 -0
- yavih-1.0.0/src/yavih/benchmarks/ssv2/make_manifest.py +203 -0
- yavih-1.0.0/src/yavih/benchmarks/ssv2/manifest.csv.gz +0 -0
- yavih-1.0.0/src/yavih/benchmarks/ssv2/prepare/01_portal_download.sh +41 -0
- yavih-1.0.0/src/yavih/benchmarks/ssv2/prepare/02_extract.sh +39 -0
- yavih-1.0.0/src/yavih/benchmarks/ssv2/prepare/03_stage_from_mirror.sh +40 -0
- yavih-1.0.0/src/yavih/benchmarks/ssv2/prepare/04_verify.sh +29 -0
- yavih-1.0.0/src/yavih/benchmarks/ssv2/setup.md +207 -0
- yavih-1.0.0/src/yavih/benchmarks/ssv2/tests/test_folder.py +512 -0
- yavih-1.0.0/src/yavih/benchmarks/vggsounder/README.md +96 -0
- yavih-1.0.0/src/yavih/benchmarks/vggsounder/assets/header.png +0 -0
- yavih-1.0.0/src/yavih/benchmarks/vggsounder/assets/header.src.sha256 +1 -0
- yavih-1.0.0/src/yavih/benchmarks/vggsounder/benchmark.yaml +201 -0
- yavih-1.0.0/src/yavih/benchmarks/vggsounder/bridge_template.py +332 -0
- yavih-1.0.0/src/yavih/benchmarks/vggsounder/classes.csv +310 -0
- yavih-1.0.0/src/yavih/benchmarks/vggsounder/conformance/expected.json +290 -0
- yavih-1.0.0/src/yavih/benchmarks/vggsounder/make_manifest.py +309 -0
- yavih-1.0.0/src/yavih/benchmarks/vggsounder/manifest.csv.gz +0 -0
- yavih-1.0.0/src/yavih/benchmarks/vggsounder/prepare/01_labels_vggsounder.sh +37 -0
- yavih-1.0.0/src/yavih/benchmarks/vggsounder/prepare/02_download_vggsound.sh +51 -0
- yavih-1.0.0/src/yavih/benchmarks/vggsounder/prepare/03_verify_layout.sh +32 -0
- yavih-1.0.0/src/yavih/benchmarks/vggsounder/prepare/04_media_facts.py +173 -0
- yavih-1.0.0/src/yavih/benchmarks/vggsounder/probe.py +536 -0
- yavih-1.0.0/src/yavih/benchmarks/vggsounder/setup.md +198 -0
- yavih-1.0.0/src/yavih/benchmarks/vggsounder/tests/test_folder.py +912 -0
- yavih-1.0.0/src/yavih/benchmarks/vggss_box/README.md +106 -0
- yavih-1.0.0/src/yavih/benchmarks/vggss_box/assets/header.png +0 -0
- yavih-1.0.0/src/yavih/benchmarks/vggss_box/assets/header.src.sha256 +1 -0
- yavih-1.0.0/src/yavih/benchmarks/vggss_box/benchmark.yaml +198 -0
- yavih-1.0.0/src/yavih/benchmarks/vggss_box/bridge_template.py +198 -0
- yavih-1.0.0/src/yavih/benchmarks/vggss_box/conformance/expected.json +71 -0
- yavih-1.0.0/src/yavih/benchmarks/vggss_box/make_manifest.py +565 -0
- yavih-1.0.0/src/yavih/benchmarks/vggss_box/manifest.csv.gz +0 -0
- yavih-1.0.0/src/yavih/benchmarks/vggss_box/prepare/01_annotations_vggss.sh +33 -0
- yavih-1.0.0/src/yavih/benchmarks/vggss_box/prepare/02_vggsound_media.sh +38 -0
- yavih-1.0.0/src/yavih/benchmarks/vggss_box/prepare/03_geometry_sidecars.sh +47 -0
- yavih-1.0.0/src/yavih/benchmarks/vggss_box/prepare/04_make_manifest.sh +20 -0
- yavih-1.0.0/src/yavih/benchmarks/vggss_box/prepare/05_verify.sh +8 -0
- yavih-1.0.0/src/yavih/benchmarks/vggss_box/prepare/audio_shorter_than_clip_seconds.txt +487 -0
- yavih-1.0.0/src/yavih/benchmarks/vggss_box/prepare/frame_sizes.json +20618 -0
- yavih-1.0.0/src/yavih/benchmarks/vggss_box/prepare/video_geometry.json +20618 -0
- yavih-1.0.0/src/yavih/benchmarks/vggss_box/setup.md +188 -0
- yavih-1.0.0/src/yavih/benchmarks/vggss_box/tests/test_folder.py +489 -0
- yavih-1.0.0/src/yavih/bridge.py +902 -0
- yavih-1.0.0/src/yavih/bridges/__init__.py +1 -0
- yavih-1.0.0/src/yavih/bridges/examples/__init__.py +2 -0
- yavih-1.0.0/src/yavih/bridges/examples/hf_reference.py +193 -0
- yavih-1.0.0/src/yavih/buildinfo.py +163 -0
- yavih-1.0.0/src/yavih/cli.py +2431 -0
- yavih-1.0.0/src/yavih/config.py +1456 -0
- yavih-1.0.0/src/yavih/conformance.py +772 -0
- yavih-1.0.0/src/yavih/deadline.py +145 -0
- yavih-1.0.0/src/yavih/doctables.py +340 -0
- yavih-1.0.0/src/yavih/external.py +335 -0
- yavih-1.0.0/src/yavih/extract.py +2171 -0
- yavih-1.0.0/src/yavih/freeze.py +111 -0
- yavih-1.0.0/src/yavih/hash_history.py +280 -0
- yavih-1.0.0/src/yavih/hashing.py +722 -0
- yavih-1.0.0/src/yavih/headers.py +253 -0
- yavih-1.0.0/src/yavih/io/__init__.py +37 -0
- yavih-1.0.0/src/yavih/io/claim.py +220 -0
- yavih-1.0.0/src/yavih/io/diff.py +128 -0
- yavih-1.0.0/src/yavih/io/finalize.py +254 -0
- yavih-1.0.0/src/yavih/io/format.py +145 -0
- yavih-1.0.0/src/yavih/io/inspect.py +157 -0
- yavih-1.0.0/src/yavih/io/layout.py +267 -0
- yavih-1.0.0/src/yavih/io/reader.py +529 -0
- yavih-1.0.0/src/yavih/io/shards.py +60 -0
- yavih-1.0.0/src/yavih/io/sidecar.py +525 -0
- yavih-1.0.0/src/yavih/io/stage.py +134 -0
- yavih-1.0.0/src/yavih/io/validate.py +2270 -0
- yavih-1.0.0/src/yavih/io/writer.py +579 -0
- yavih-1.0.0/src/yavih/lint.py +732 -0
- yavih-1.0.0/src/yavih/media/__init__.py +85 -0
- yavih-1.0.0/src/yavih/media/decode.py +301 -0
- yavih-1.0.0/src/yavih/media/ffmpeg.py +140 -0
- yavih-1.0.0/src/yavih/media/info.py +524 -0
- yavih-1.0.0/src/yavih/media/rules.py +436 -0
- yavih-1.0.0/src/yavih/media/tarindex.py +143 -0
- yavih-1.0.0/src/yavih/metrics/__init__.py +42 -0
- yavih-1.0.0/src/yavih/metrics/_common.py +121 -0
- yavih-1.0.0/src/yavih/metrics/box.py +188 -0
- yavih-1.0.0/src/yavih/metrics/classification.py +272 -0
- yavih-1.0.0/src/yavih/metrics/depth.py +141 -0
- yavih-1.0.0/src/yavih/metrics/intervals.py +282 -0
- yavih-1.0.0/src/yavih/metrics/registry.py +390 -0
- yavih-1.0.0/src/yavih/metrics/segment.py +131 -0
- yavih-1.0.0/src/yavih/plan/__init__.py +9 -0
- yavih-1.0.0/src/yavih/plan/calibrate.py +182 -0
- yavih-1.0.0/src/yavih/plan/estimate.py +169 -0
- yavih-1.0.0/src/yavih/plan/exec.py +949 -0
- yavih-1.0.0/src/yavih/plan/local.py +149 -0
- yavih-1.0.0/src/yavih/plan/matrix.py +506 -0
- yavih-1.0.0/src/yavih/plan/skeleton.py +252 -0
- yavih-1.0.0/src/yavih/plan/status.py +179 -0
- yavih-1.0.0/src/yavih/plan/units.py +827 -0
- yavih-1.0.0/src/yavih/probes/__init__.py +61 -0
- yavih-1.0.0/src/yavih/probes/_blocks.py +96 -0
- yavih-1.0.0/src/yavih/probes/attentive.py +71 -0
- yavih-1.0.0/src/yavih/probes/ckpt.py +56 -0
- yavih-1.0.0/src/yavih/probes/config.py +255 -0
- yavih-1.0.0/src/yavih/probes/dense.py +349 -0
- yavih-1.0.0/src/yavih/probes/floors.py +106 -0
- yavih-1.0.0/src/yavih/probes/losses.py +148 -0
- yavih-1.0.0/src/yavih/probes/trainer.py +703 -0
- yavih-1.0.0/src/yavih/project.py +486 -0
- yavih-1.0.0/src/yavih/readouts/__init__.py +35 -0
- yavih-1.0.0/src/yavih/readouts/_fit.py +438 -0
- yavih-1.0.0/src/yavih/readouts/_targets.py +181 -0
- yavih-1.0.0/src/yavih/readouts/base.py +2159 -0
- yavih-1.0.0/src/yavih/readouts/box.py +235 -0
- yavih-1.0.0/src/yavih/readouts/clf.py +257 -0
- yavih-1.0.0/src/yavih/readouts/coords.py +201 -0
- yavih-1.0.0/src/yavih/readouts/grid.py +179 -0
- yavih-1.0.0/src/yavih/readouts/registry.py +187 -0
- yavih-1.0.0/src/yavih/readouts/samples.py +118 -0
- yavih-1.0.0/src/yavih/readouts/seq.py +219 -0
- yavih-1.0.0/src/yavih/registry.py +538 -0
- yavih-1.0.0/src/yavih/report/__init__.py +38 -0
- yavih-1.0.0/src/yavih/report/compare.py +1219 -0
- yavih-1.0.0/src/yavih/report/index.py +273 -0
- yavih-1.0.0/src/yavih/report/join.py +246 -0
- yavih-1.0.0/src/yavih/report/migrate.py +125 -0
- yavih-1.0.0/src/yavih/report/store.py +644 -0
- yavih-1.0.0/src/yavih/report/tables.py +466 -0
- yavih-1.0.0/src/yavih/resources.py +220 -0
- yavih-1.0.0/src/yavih/sample.py +821 -0
- yavih-1.0.0/src/yavih/scaffold.py +425 -0
- yavih-1.0.0/src/yavih/shipped.py +462 -0
- yavih-1.0.0/src/yavih/skill/yavih/SKILL.md +250 -0
- yavih-1.0.0/src/yavih/skill/yavih/references/.gitkeep +0 -0
- yavih-1.0.0/src/yavih/skill/yavih/references/bridge.md +457 -0
- yavih-1.0.0/src/yavih/skill/yavih/references/cli.md +407 -0
- yavih-1.0.0/src/yavih/skill/yavih/references/data.md +171 -0
- yavih-1.0.0/src/yavih/skill/yavih/references/readouts.md +215 -0
- yavih-1.0.0/src/yavih/skill/yavih/references/slurm.md +361 -0
- yavih-1.0.0/src/yavih/suites/default.yaml +30 -0
- yavih-1.0.0/src/yavih/suites/minimal.yaml +18 -0
- yavih-1.0.0/src/yavih/suites.py +529 -0
- yavih-1.0.0/src/yavih/testing/__init__.py +1361 -0
- yavih-1.0.0/src/yavih/testing/folder.py +285 -0
- yavih-1.0.0/src/yavih/trial.py +421 -0
- yavih-1.0.0/src/yavih/versions.py +167 -0
- yavih-1.0.0/src/yavih/waivers.py +179 -0
- yavih-1.0.0/src/yavih.egg-info/PKG-INFO +200 -0
- yavih-1.0.0/src/yavih.egg-info/SOURCES.txt +405 -0
- yavih-1.0.0/src/yavih.egg-info/dependency_links.txt +1 -0
- yavih-1.0.0/src/yavih.egg-info/entry_points.txt +2 -0
- yavih-1.0.0/src/yavih.egg-info/requires.txt +17 -0
- yavih-1.0.0/src/yavih.egg-info/scm_file_list.json +400 -0
- yavih-1.0.0/src/yavih.egg-info/scm_version.json +8 -0
- yavih-1.0.0/src/yavih.egg-info/top_level.txt +1 -0
- yavih-1.0.0/tests/conftest.py +284 -0
- yavih-1.0.0/tests/data/avsync_metrics_golden.json +214 -0
- yavih-1.0.0/tests/docs_tables.py +87 -0
- yavih-1.0.0/tests/test_benchmark.py +1644 -0
- yavih-1.0.0/tests/test_bridge.py +701 -0
- yavih-1.0.0/tests/test_bridge_hf_reference.py +165 -0
- yavih-1.0.0/tests/test_bridge_preprocessing_source.py +244 -0
- yavih-1.0.0/tests/test_buildinfo.py +185 -0
- yavih-1.0.0/tests/test_cli.py +1419 -0
- yavih-1.0.0/tests/test_config.py +157 -0
- yavih-1.0.0/tests/test_config_layers.py +462 -0
- yavih-1.0.0/tests/test_conformance.py +413 -0
- yavih-1.0.0/tests/test_cross_area_consistency.py +166 -0
- yavih-1.0.0/tests/test_deadline.py +84 -0
- yavih-1.0.0/tests/test_determinism.py +118 -0
- yavih-1.0.0/tests/test_docs.py +268 -0
- yavih-1.0.0/tests/test_e2e_synthetic.py +576 -0
- yavih-1.0.0/tests/test_exec_slots.py +437 -0
- yavih-1.0.0/tests/test_extensibility.py +234 -0
- yavih-1.0.0/tests/test_external.py +198 -0
- yavih-1.0.0/tests/test_extract.py +1782 -0
- yavih-1.0.0/tests/test_extract_fixtures.py +550 -0
- yavih-1.0.0/tests/test_extract_throughput.py +50 -0
- yavih-1.0.0/tests/test_freeze.py +223 -0
- yavih-1.0.0/tests/test_hashing.py +650 -0
- yavih-1.0.0/tests/test_headers.py +154 -0
- yavih-1.0.0/tests/test_import_boundary.py +228 -0
- yavih-1.0.0/tests/test_io_core.py +1021 -0
- yavih-1.0.0/tests/test_io_validate.py +1883 -0
- yavih-1.0.0/tests/test_io_validate_rules.py +114 -0
- yavih-1.0.0/tests/test_media.py +690 -0
- yavih-1.0.0/tests/test_media_ffprobe.py +166 -0
- yavih-1.0.0/tests/test_media_helpers.py +167 -0
- yavih-1.0.0/tests/test_metrics_avsync.py +174 -0
- yavih-1.0.0/tests/test_metrics_box.py +108 -0
- yavih-1.0.0/tests/test_metrics_classification.py +169 -0
- yavih-1.0.0/tests/test_metrics_depth.py +100 -0
- yavih-1.0.0/tests/test_metrics_intervals.py +142 -0
- yavih-1.0.0/tests/test_metrics_registry_contract.py +147 -0
- yavih-1.0.0/tests/test_metrics_segment.py +72 -0
- yavih-1.0.0/tests/test_model_registry.py +297 -0
- yavih-1.0.0/tests/test_no_internal_refs.py +43 -0
- yavih-1.0.0/tests/test_packaged_folders.py +389 -0
- yavih-1.0.0/tests/test_plan_driver_loop.py +425 -0
- yavih-1.0.0/tests/test_plan_estimate.py +81 -0
- yavih-1.0.0/tests/test_plan_exec.py +487 -0
- yavih-1.0.0/tests/test_plan_helpers.py +311 -0
- yavih-1.0.0/tests/test_plan_init.py +173 -0
- yavih-1.0.0/tests/test_plan_matrix.py +321 -0
- yavih-1.0.0/tests/test_plan_status_calibrate.py +186 -0
- yavih-1.0.0/tests/test_plan_units.py +527 -0
- yavih-1.0.0/tests/test_probe_out_results_root.py +236 -0
- yavih-1.0.0/tests/test_probes_config.py +158 -0
- yavih-1.0.0/tests/test_probes_heads.py +277 -0
- yavih-1.0.0/tests/test_probes_trainer.py +675 -0
- yavih-1.0.0/tests/test_project.py +610 -0
- yavih-1.0.0/tests/test_readouts.py +1169 -0
- yavih-1.0.0/tests/test_readouts_contract.py +508 -0
- yavih-1.0.0/tests/test_readouts_integration.py +221 -0
- yavih-1.0.0/tests/test_readouts_per_sample_pos.py +228 -0
- yavih-1.0.0/tests/test_registry.py +190 -0
- yavih-1.0.0/tests/test_report.py +979 -0
- yavih-1.0.0/tests/test_report_join.py +451 -0
- yavih-1.0.0/tests/test_report_migrate.py +63 -0
- yavih-1.0.0/tests/test_report_store.py +226 -0
- yavih-1.0.0/tests/test_rules_fps_options.py +204 -0
- yavih-1.0.0/tests/test_sample.py +692 -0
- yavih-1.0.0/tests/test_scaffold.py +205 -0
- yavih-1.0.0/tests/test_shipped.py +227 -0
- yavih-1.0.0/tests/test_skill.py +634 -0
- yavih-1.0.0/tests/test_suites.py +271 -0
- yavih-1.0.0/tests/test_trial.py +113 -0
- yavih-1.0.0/tests/test_versions.py +114 -0
- yavih-1.0.0/tests/test_waivers.py +315 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Categories of the release notes GitHub generates (gh release create --generate-notes in workflows/release.yml).
|
|
2
|
+
# A pull request lands in the first category whose labels it carries.
|
|
3
|
+
changelog:
|
|
4
|
+
exclude:
|
|
5
|
+
labels: [skip-changelog]
|
|
6
|
+
categories:
|
|
7
|
+
- title: Breaking changes
|
|
8
|
+
labels: [breaking]
|
|
9
|
+
- title: Benchmarks
|
|
10
|
+
labels: [benchmark]
|
|
11
|
+
- title: New features
|
|
12
|
+
labels: [enhancement, feature]
|
|
13
|
+
- title: Bug fixes
|
|
14
|
+
labels: [bug, fix]
|
|
15
|
+
- title: Documentation
|
|
16
|
+
labels: [documentation, docs]
|
|
17
|
+
- title: Other changes
|
|
18
|
+
labels: ["*"]
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
concurrency:
|
|
10
|
+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
11
|
+
cancel-in-progress: true
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
lint:
|
|
18
|
+
name: ruff
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
- uses: actions/setup-python@v5
|
|
23
|
+
with:
|
|
24
|
+
python-version: "3.12"
|
|
25
|
+
cache: pip
|
|
26
|
+
cache-dependency-path: pyproject.toml
|
|
27
|
+
- run: python -m pip install ruff
|
|
28
|
+
- run: ruff check src tests
|
|
29
|
+
|
|
30
|
+
test:
|
|
31
|
+
name: pytest (Python ${{ matrix.python-version }})
|
|
32
|
+
runs-on: ubuntu-latest
|
|
33
|
+
timeout-minutes: 90
|
|
34
|
+
strategy:
|
|
35
|
+
fail-fast: false
|
|
36
|
+
matrix:
|
|
37
|
+
python-version: ["3.10", "3.11", "3.12", "3.13"]
|
|
38
|
+
steps:
|
|
39
|
+
- uses: actions/checkout@v4
|
|
40
|
+
with:
|
|
41
|
+
fetch-depth: 0 # setuptools-scm reads the version from the tags
|
|
42
|
+
- uses: actions/setup-python@v5
|
|
43
|
+
with:
|
|
44
|
+
python-version: ${{ matrix.python-version }}
|
|
45
|
+
cache: pip
|
|
46
|
+
cache-dependency-path: pyproject.toml
|
|
47
|
+
- name: System packages
|
|
48
|
+
run: sudo apt-get update && sudo apt-get install -y --no-install-recommends ffmpeg
|
|
49
|
+
- name: Install (CPU torch)
|
|
50
|
+
run: |
|
|
51
|
+
python -m pip install --upgrade pip
|
|
52
|
+
python -m pip install torch --index-url https://download.pytorch.org/whl/cpu
|
|
53
|
+
python -m pip install "setuptools>=77" "setuptools-scm>=10" wheel
|
|
54
|
+
python -m pip install -e ".[media,dev]"
|
|
55
|
+
- name: Versions
|
|
56
|
+
run: |
|
|
57
|
+
yavih --version
|
|
58
|
+
python -c "import torch, numpy; print('torch', torch.__version__, 'numpy', numpy.__version__)"
|
|
59
|
+
- name: Tests
|
|
60
|
+
# no site data here: tests that need staged benchmark data skip
|
|
61
|
+
run: pytest tests src/yavih/benchmarks -p no:cacheprovider -o addopts="--import-mode=importlib" -q -rfEs
|
|
62
|
+
|
|
63
|
+
package:
|
|
64
|
+
name: build and smoke-test the wheel
|
|
65
|
+
runs-on: ubuntu-latest
|
|
66
|
+
steps:
|
|
67
|
+
- uses: actions/checkout@v4
|
|
68
|
+
with:
|
|
69
|
+
fetch-depth: 0
|
|
70
|
+
- uses: actions/setup-python@v5
|
|
71
|
+
with:
|
|
72
|
+
python-version: "3.12"
|
|
73
|
+
cache: pip
|
|
74
|
+
cache-dependency-path: pyproject.toml
|
|
75
|
+
- name: Build sdist and wheel
|
|
76
|
+
# --sdist --wheel builds both from the checkout, so the wheel records the source commit
|
|
77
|
+
run: |
|
|
78
|
+
python -m pip install --upgrade build twine
|
|
79
|
+
python -m build --sdist --wheel
|
|
80
|
+
ls -l dist
|
|
81
|
+
- run: python -m twine check --strict dist/*
|
|
82
|
+
- name: No maintainer notes, header images or repository docs in the wheel
|
|
83
|
+
run: |
|
|
84
|
+
python - <<'PY'
|
|
85
|
+
import glob, re, zipfile
|
|
86
|
+
(whl,) = glob.glob("dist/*.whl")
|
|
87
|
+
names = zipfile.ZipFile(whl).namelist()
|
|
88
|
+
bad = [n for n in names if "/notes/" in n or n.endswith(".pyc") or n.startswith("docs/") or "/docs/" in n
|
|
89
|
+
or re.match(r"yavih/benchmarks/[^/]+/assets/", n)]
|
|
90
|
+
assert not bad, bad[:20]
|
|
91
|
+
assert "yavih/_version.py" in names
|
|
92
|
+
print(whl, len(names), "files")
|
|
93
|
+
PY
|
|
94
|
+
- name: Install the wheel into a clean venv (no torch)
|
|
95
|
+
run: |
|
|
96
|
+
python -m venv /tmp/venv
|
|
97
|
+
/tmp/venv/bin/python -m pip install numpy pyyaml
|
|
98
|
+
/tmp/venv/bin/python -m pip install --no-deps dist/*.whl
|
|
99
|
+
- name: Smoke-test from an empty directory
|
|
100
|
+
working-directory: ${{ runner.temp }}
|
|
101
|
+
run: |
|
|
102
|
+
/tmp/venv/bin/yavih --version
|
|
103
|
+
/tmp/venv/bin/yavih bench lint --all
|
|
104
|
+
/tmp/venv/bin/yavih bench files esc50
|
|
105
|
+
- uses: actions/upload-artifact@v4
|
|
106
|
+
with:
|
|
107
|
+
name: dist
|
|
108
|
+
path: dist/
|
|
109
|
+
retention-days: 7
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
name: headers
|
|
2
|
+
|
|
3
|
+
# Renders every benchmark folder's README header image for review and checks that the committed
|
|
4
|
+
# assets/header.src.sha256 files (the sha256 of the HTML each committed PNG was rendered from) are current.
|
|
5
|
+
on:
|
|
6
|
+
pull_request:
|
|
7
|
+
paths:
|
|
8
|
+
- "src/yavih/benchmarks/**"
|
|
9
|
+
- "assets/benchmark-header/**"
|
|
10
|
+
- "src/yavih/headers.py"
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
|
|
13
|
+
concurrency:
|
|
14
|
+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
15
|
+
cancel-in-progress: true
|
|
16
|
+
|
|
17
|
+
permissions:
|
|
18
|
+
contents: read
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
render:
|
|
22
|
+
name: render the header images
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
timeout-minutes: 30
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v4
|
|
27
|
+
with:
|
|
28
|
+
fetch-depth: 0 # setuptools-scm reads the version from the tags
|
|
29
|
+
- uses: actions/setup-python@v5
|
|
30
|
+
with:
|
|
31
|
+
python-version: "3.12"
|
|
32
|
+
cache: pip
|
|
33
|
+
cache-dependency-path: pyproject.toml
|
|
34
|
+
- name: Install
|
|
35
|
+
run: |
|
|
36
|
+
python -m pip install --upgrade pip
|
|
37
|
+
python -m pip install -e ".[media]" imagequant
|
|
38
|
+
- name: Chrome
|
|
39
|
+
run: google-chrome --version
|
|
40
|
+
- name: Render every header and the contact sheet
|
|
41
|
+
run: python -m yavih.headers --all --contact-sheet headers-contact-sheet.png
|
|
42
|
+
- name: The committed header sha files are current
|
|
43
|
+
run: |
|
|
44
|
+
python -m yavih.headers --all --html-only
|
|
45
|
+
changed="$(git status --porcelain -- 'src/yavih/benchmarks/*/assets/header.src.sha256')"
|
|
46
|
+
if [ -n "$changed" ]; then
|
|
47
|
+
echo "$changed"
|
|
48
|
+
git diff -- 'src/yavih/benchmarks/*/assets/header.src.sha256'
|
|
49
|
+
echo "::error::A header image is stale or missing its sha file: render it with 'python -m yavih.headers <name>' and commit assets/header.png and assets/header.src.sha256 (without Chrome: take the PNG from this run's 'headers' artifact and write the sha file with 'python -m yavih.headers <name> --html-only')."
|
|
50
|
+
exit 1
|
|
51
|
+
fi
|
|
52
|
+
- uses: actions/upload-artifact@v4
|
|
53
|
+
if: always()
|
|
54
|
+
with:
|
|
55
|
+
name: headers
|
|
56
|
+
path: |
|
|
57
|
+
headers-contact-sheet.png
|
|
58
|
+
src/yavih/benchmarks/*/assets/header.png
|
|
59
|
+
if-no-files-found: warn
|
|
60
|
+
retention-days: 14
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
# Push a tag vX.Y.Z on main -> build, check, publish to PyPI (trusted publishing), GitHub Release with
|
|
4
|
+
# generated notes. See docs/releasing.md.
|
|
5
|
+
# Re-run for an existing tag: Actions -> Release -> Run workflow, tag = vX.Y.Z.
|
|
6
|
+
on:
|
|
7
|
+
push:
|
|
8
|
+
tags: ["v*"]
|
|
9
|
+
workflow_dispatch:
|
|
10
|
+
inputs:
|
|
11
|
+
tag:
|
|
12
|
+
description: "Existing tag to release (vX.Y.Z)"
|
|
13
|
+
required: true
|
|
14
|
+
|
|
15
|
+
concurrency:
|
|
16
|
+
group: release-${{ github.event.inputs.tag || github.ref_name }}
|
|
17
|
+
cancel-in-progress: false
|
|
18
|
+
|
|
19
|
+
permissions:
|
|
20
|
+
contents: read
|
|
21
|
+
|
|
22
|
+
env:
|
|
23
|
+
TAG: ${{ github.event.inputs.tag || github.ref_name }}
|
|
24
|
+
|
|
25
|
+
jobs:
|
|
26
|
+
build:
|
|
27
|
+
name: build ${{ github.event.inputs.tag || github.ref_name }}
|
|
28
|
+
runs-on: ubuntu-latest
|
|
29
|
+
steps:
|
|
30
|
+
- uses: actions/checkout@v4
|
|
31
|
+
with:
|
|
32
|
+
ref: refs/tags/${{ env.TAG }}
|
|
33
|
+
fetch-depth: 0 # setuptools-scm reads the version from the tag
|
|
34
|
+
- uses: actions/setup-python@v5
|
|
35
|
+
with:
|
|
36
|
+
python-version: "3.12"
|
|
37
|
+
- name: Build sdist and wheel
|
|
38
|
+
run: |
|
|
39
|
+
python -m pip install --upgrade build twine
|
|
40
|
+
python -m build --sdist --wheel
|
|
41
|
+
ls -l dist
|
|
42
|
+
- name: Built version must equal the tag
|
|
43
|
+
run: |
|
|
44
|
+
expected="${TAG#v}"
|
|
45
|
+
for f in dist/*; do
|
|
46
|
+
case "$(basename "$f")" in
|
|
47
|
+
"yavih-${expected}.tar.gz"|"yavih-${expected}-py3-none-any.whl") ;;
|
|
48
|
+
*) echo "::error::$(basename "$f") does not match tag ${TAG} (expected version ${expected})"; exit 1 ;;
|
|
49
|
+
esac
|
|
50
|
+
done
|
|
51
|
+
- run: python -m twine check --strict dist/*
|
|
52
|
+
- name: Smoke-test the wheel (no torch)
|
|
53
|
+
run: |
|
|
54
|
+
python -m venv /tmp/venv
|
|
55
|
+
/tmp/venv/bin/python -m pip install numpy pyyaml
|
|
56
|
+
/tmp/venv/bin/python -m pip install --no-deps dist/*.whl
|
|
57
|
+
cd "$RUNNER_TEMP"
|
|
58
|
+
test "$(/tmp/venv/bin/yavih --version)" = "yavih ${TAG#v}"
|
|
59
|
+
/tmp/venv/bin/yavih bench lint --all
|
|
60
|
+
- uses: actions/upload-artifact@v4
|
|
61
|
+
with:
|
|
62
|
+
name: dist
|
|
63
|
+
path: dist/
|
|
64
|
+
|
|
65
|
+
pypi:
|
|
66
|
+
name: publish to PyPI
|
|
67
|
+
needs: build
|
|
68
|
+
runs-on: ubuntu-latest
|
|
69
|
+
environment:
|
|
70
|
+
name: pypi
|
|
71
|
+
url: https://pypi.org/project/yavih/
|
|
72
|
+
permissions:
|
|
73
|
+
id-token: write # trusted publishing (OIDC); no API token
|
|
74
|
+
steps:
|
|
75
|
+
- uses: actions/download-artifact@v4
|
|
76
|
+
with:
|
|
77
|
+
name: dist
|
|
78
|
+
path: dist/
|
|
79
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
80
|
+
with:
|
|
81
|
+
skip-existing: true # a re-run for an already published tag only (re)creates the GitHub Release
|
|
82
|
+
|
|
83
|
+
github-release:
|
|
84
|
+
name: GitHub Release
|
|
85
|
+
needs: [build, pypi]
|
|
86
|
+
runs-on: ubuntu-latest
|
|
87
|
+
permissions:
|
|
88
|
+
contents: write
|
|
89
|
+
steps:
|
|
90
|
+
- uses: actions/download-artifact@v4
|
|
91
|
+
with:
|
|
92
|
+
name: dist
|
|
93
|
+
path: dist/
|
|
94
|
+
- name: Create or update the release
|
|
95
|
+
env:
|
|
96
|
+
GH_TOKEN: ${{ github.token }}
|
|
97
|
+
GH_REPO: ${{ github.repository }}
|
|
98
|
+
run: |
|
|
99
|
+
# Notes are generated by GitHub from the pull requests merged since the previous tag, grouped by the
|
|
100
|
+
# categories in .github/release.yml. A re-run for an existing release only refreshes the files.
|
|
101
|
+
if gh release view "$TAG" >/dev/null 2>&1; then
|
|
102
|
+
gh release upload "$TAG" dist/* --clobber
|
|
103
|
+
else
|
|
104
|
+
gh release create "$TAG" dist/* --title "yavih ${TAG#v}" --generate-notes --verify-tag
|
|
105
|
+
fi
|
yavih-1.0.0/.gitignore
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# environments
|
|
2
|
+
.venv/
|
|
3
|
+
venv/
|
|
4
|
+
|
|
5
|
+
# python
|
|
6
|
+
__pycache__/
|
|
7
|
+
*.py[cod]
|
|
8
|
+
*.egg-info/
|
|
9
|
+
build/
|
|
10
|
+
dist/
|
|
11
|
+
.pytest_cache/
|
|
12
|
+
.ruff_cache/
|
|
13
|
+
|
|
14
|
+
# version file written by setuptools-scm at build / install time
|
|
15
|
+
src/yavih/_version.py
|
|
16
|
+
|
|
17
|
+
# yavih artefacts
|
|
18
|
+
runs/
|
|
19
|
+
results/
|
|
20
|
+
*.tmp
|
|
21
|
+
_stale/
|
|
22
|
+
*.tar
|
|
23
|
+
*.npy
|
|
24
|
+
*.log
|
|
25
|
+
# python -m yavih.headers --html-only (the committed record is assets/header.src.sha256)
|
|
26
|
+
src/yavih/benchmarks/*/assets/header.html
|
|
27
|
+
|
|
28
|
+
# editors / OS / agents
|
|
29
|
+
.DS_Store
|
|
30
|
+
.idea/
|
|
31
|
+
.vscode/
|
|
32
|
+
.claude/
|
yavih-1.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Daniil Zverev
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
yavih-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: yavih
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Frozen-feature benchmark harness for video and audio models
|
|
5
|
+
Author: Daniil Zverev
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/Bizilizi/yavih
|
|
8
|
+
Project-URL: Repository, https://github.com/Bizilizi/yavih
|
|
9
|
+
Project-URL: Issues, https://github.com/Bizilizi/yavih/issues
|
|
10
|
+
Project-URL: Documentation, https://github.com/Bizilizi/yavih/tree/main/docs
|
|
11
|
+
Project-URL: Changelog, https://github.com/Bizilizi/yavih/releases
|
|
12
|
+
Keywords: benchmark,evaluation,frozen features,linear probe,attentive probe,video,audio,audio-visual,representation learning,self-supervised learning
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
23
|
+
Classifier: Topic :: Multimedia :: Sound/Audio :: Analysis
|
|
24
|
+
Classifier: Topic :: Multimedia :: Video
|
|
25
|
+
Requires-Python: >=3.10
|
|
26
|
+
Description-Content-Type: text/markdown
|
|
27
|
+
License-File: LICENSE
|
|
28
|
+
Requires-Dist: numpy>=1.24
|
|
29
|
+
Requires-Dist: pyyaml>=6
|
|
30
|
+
Provides-Extra: media
|
|
31
|
+
Requires-Dist: av>=11; extra == "media"
|
|
32
|
+
Requires-Dist: soundfile>=0.12; extra == "media"
|
|
33
|
+
Requires-Dist: pillow>=9; extra == "media"
|
|
34
|
+
Requires-Dist: scipy>=1.10; extra == "media"
|
|
35
|
+
Provides-Extra: probe
|
|
36
|
+
Requires-Dist: torch>=2.1; extra == "probe"
|
|
37
|
+
Provides-Extra: dev
|
|
38
|
+
Requires-Dist: pytest; extra == "dev"
|
|
39
|
+
Requires-Dist: ruff; extra == "dev"
|
|
40
|
+
Requires-Dist: scikit-learn>=1.3; extra == "dev"
|
|
41
|
+
Requires-Dist: yavih[media,probe]; extra == "dev"
|
|
42
|
+
Dynamic: license-file
|
|
43
|
+
|
|
44
|
+
<p align="center">
|
|
45
|
+
<img src="https://raw.githubusercontent.com/Bizilizi/yavih/main/assets/header.png" alt="yavih — frozen-feature benchmark harness for video and audio models" width="100%">
|
|
46
|
+
</p>
|
|
47
|
+
|
|
48
|
+
<p align="center">
|
|
49
|
+
<a href="https://pypi.org/project/yavih/"><img alt="PyPI" src="https://img.shields.io/pypi/v/yavih?color=22d3ee"></a>
|
|
50
|
+
<a href="https://github.com/Bizilizi/yavih/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/Bizilizi/yavih/actions/workflows/ci.yml/badge.svg?branch=main"></a>
|
|
51
|
+
<a href="https://pypi.org/project/yavih/"><img alt="Python versions" src="https://img.shields.io/pypi/pyversions/yavih?logo=python&logoColor=white"></a>
|
|
52
|
+
<a href="https://github.com/Bizilizi/yavih/blob/main/LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-a78bfa"></a>
|
|
53
|
+
</p>
|
|
54
|
+
|
|
55
|
+
<h3 align="center">A growing library of video, audio and audio-visual benchmarks.<br>One harness, one protocol — and your coding agent does the wiring.</h3>
|
|
56
|
+
|
|
57
|
+
**yavih** (Yet Another Video Harness) evaluates frozen video, audio and audio-visual encoders. You bring a model;
|
|
58
|
+
yavih brings the benchmarks, the data recipes, the probes and the guarantees that your numbers mean the same thing
|
|
59
|
+
as everyone else's.
|
|
60
|
+
|
|
61
|
+
<p align="center"><img src="https://raw.githubusercontent.com/Bizilizi/yavih/main/assets/readme/agent.gif" alt="An agent benchmarks a model with yavih from one sentence" width="100%"></p>
|
|
62
|
+
|
|
63
|
+
## Get started in one sentence
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
pip install yavih # into the Python environment that runs your model
|
|
67
|
+
yavih skill install # teaches your coding agent (Claude Code, Codex, Cursor, …) how to use yavih
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Then tell your agent:
|
|
71
|
+
|
|
72
|
+
> **Benchmark my model with yavih.**
|
|
73
|
+
|
|
74
|
+
That's it. The agent picks the default suite, prepares each benchmark's data, writes the small adapter that feeds
|
|
75
|
+
your model, checks it, extracts features, trains the standard probes and hands you a report. What it cannot do on
|
|
76
|
+
its own — a licence you have to accept, a download only a person can make — it lists for you at the end, while the
|
|
77
|
+
rest runs.
|
|
78
|
+
|
|
79
|
+
## Why yavih
|
|
80
|
+
|
|
81
|
+
<table>
|
|
82
|
+
<tr>
|
|
83
|
+
<td width="50%" valign="top">
|
|
84
|
+
|
|
85
|
+
### 🗂 Many benchmarks, one harness
|
|
86
|
+
Classification, temporal, spatial, sync and dense tasks across audio, video and audio-visual data, all behind the
|
|
87
|
+
same commands. Pick a ready-made suite or define your own.
|
|
88
|
+
|
|
89
|
+
</td>
|
|
90
|
+
<td width="50%" valign="top">
|
|
91
|
+
|
|
92
|
+
### 🤖 One skill — your agent does the rest
|
|
93
|
+
yavih is built to be driven by a coding agent. Every benchmark explains itself to the agent: where the data comes
|
|
94
|
+
from, what the model receives, what it must return, and how to check each step.
|
|
95
|
+
|
|
96
|
+
</td>
|
|
97
|
+
</tr>
|
|
98
|
+
<tr>
|
|
99
|
+
<td width="50%" valign="top">
|
|
100
|
+
|
|
101
|
+
### 🔒 Same protocol, same data — provably
|
|
102
|
+
Every benchmark is frozen: the clips, the labels, the probe and the metric. A short hash names that exact protocol,
|
|
103
|
+
and two numbers are compared only when their hashes match. No silent drift, no "our split".
|
|
104
|
+
|
|
105
|
+
</td>
|
|
106
|
+
<td width="50%" valign="top">
|
|
107
|
+
|
|
108
|
+
### ➕ Add your own benchmark
|
|
109
|
+
Ask your agent to *add <your dataset> to yavih*. It follows the contributor guide, builds the folder, runs a
|
|
110
|
+
trial and opens the pull request — and everyone can run your benchmark the same way.
|
|
111
|
+
|
|
112
|
+
</td>
|
|
113
|
+
</tr>
|
|
114
|
+
</table>
|
|
115
|
+
|
|
116
|
+
## A growing library
|
|
117
|
+
|
|
118
|
+
You rarely choose benchmarks one by one. A **suite** is a named set: `default` is what "benchmark my model" runs,
|
|
119
|
+
`minimal` is a quick smoke pass, and `yavih suite new` makes your own.
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
yavih suite list # default, minimal, and any suite you define
|
|
123
|
+
yavih bench list # every benchmark: task, size, how to get the data, what's ready on your machine
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
<p align="center"><img src="https://raw.githubusercontent.com/Bizilizi/yavih/main/assets/readme/library.gif" alt="The benchmark library grouped by capability" width="100%"></p>
|
|
127
|
+
|
|
128
|
+
<!-- yavih:bench-table capabilities begin (generated from each folder's benchmark.yaml: python -m yavih.doctables --write) -->
|
|
129
|
+
| capability | benchmarks | examples |
|
|
130
|
+
|---|---|---|
|
|
131
|
+
| `audio` | 2 | [esc50](https://github.com/Bizilizi/yavih/blob/main/src/yavih/benchmarks/esc50/README.md), [fsd50k](https://github.com/Bizilizi/yavih/blob/main/src/yavih/benchmarks/fsd50k/README.md) |
|
|
132
|
+
| `visual` | 4 | [in1k](https://github.com/Bizilizi/yavih/blob/main/src/yavih/benchmarks/in1k/README.md), [k400](https://github.com/Bizilizi/yavih/blob/main/src/yavih/benchmarks/k400/README.md), [nyuv2_depth](https://github.com/Bizilizi/yavih/blob/main/src/yavih/benchmarks/nyuv2_depth/README.md), [ssv2](https://github.com/Bizilizi/yavih/blob/main/src/yavih/benchmarks/ssv2/README.md) |
|
|
133
|
+
| `audio-visual` | 5 | [audioset20k](https://github.com/Bizilizi/yavih/blob/main/src/yavih/benchmarks/audioset20k/README.md), [ave](https://github.com/Bizilizi/yavih/blob/main/src/yavih/benchmarks/ave/README.md), [avsync](https://github.com/Bizilizi/yavih/blob/main/src/yavih/benchmarks/avsync/README.md), [vggsounder](https://github.com/Bizilizi/yavih/blob/main/src/yavih/benchmarks/vggsounder/README.md) + 1 more |
|
|
134
|
+
| `temporal` | 2 | [ave](https://github.com/Bizilizi/yavih/blob/main/src/yavih/benchmarks/ave/README.md), [avsync](https://github.com/Bizilizi/yavih/blob/main/src/yavih/benchmarks/avsync/README.md) |
|
|
135
|
+
| `spatial` | 2 | [nyuv2_depth](https://github.com/Bizilizi/yavih/blob/main/src/yavih/benchmarks/nyuv2_depth/README.md), [vggss_box](https://github.com/Bizilizi/yavih/blob/main/src/yavih/benchmarks/vggss_box/README.md) |
|
|
136
|
+
|
|
137
|
+
[All 11 benchmarks → the index](https://github.com/Bizilizi/yavih/blob/main/src/yavih/benchmarks/README.md)
|
|
138
|
+
<!-- yavih:bench-table capabilities end -->
|
|
139
|
+
|
|
140
|
+
Each benchmark is one self-contained folder with its own page: the paper, how to get the data, and exactly how yavih
|
|
141
|
+
runs it.
|
|
142
|
+
|
|
143
|
+
## Numbers you can trust
|
|
144
|
+
|
|
145
|
+
A benchmark result is only useful if someone else can get the same number the same way. yavih freezes everything
|
|
146
|
+
that decides what a number means and leaves everything else to you:
|
|
147
|
+
|
|
148
|
+
- **Frozen by yavih:** which clips, which labels, which raw files your model receives, which probe is trained on top,
|
|
149
|
+
how it is trained, and which metric is reported — with a floor (what a model that ignores its input would score)
|
|
150
|
+
next to every result.
|
|
151
|
+
- **Yours to choose:** the model, how it reads the media (frames, crops, audio front end), its precision and batch
|
|
152
|
+
size. All of it is recorded with every number, none of it changes what the number is compared against.
|
|
153
|
+
|
|
154
|
+
That frozen protocol is summarised in one short hash, the `eval_hash`. Same hash ⇔ same data, same protocol, same
|
|
155
|
+
probe. The report only ever puts numbers with the same hash in one column; change a clip or a metric and you get a
|
|
156
|
+
new hash, never a quietly different number.
|
|
157
|
+
|
|
158
|
+
<p align="center"><img src="https://raw.githubusercontent.com/Bizilizi/yavih/main/assets/readme/hash.gif" alt="Matching hashes make results comparable; a changed protocol gets its own hash" width="100%"></p>
|
|
159
|
+
|
|
160
|
+
## Add your benchmark
|
|
161
|
+
|
|
162
|
+
Tell your agent:
|
|
163
|
+
|
|
164
|
+
> **Add Diving48 to yavih.**
|
|
165
|
+
|
|
166
|
+
It follows [contributing a benchmark](https://github.com/Bizilizi/yavih/blob/main/docs/contributing-a-benchmark.md)
|
|
167
|
+
step by step — scaffold the folder, freeze the manifest from the public release, write the data recipe and the
|
|
168
|
+
tests, render the header — then runs a synthetic trial and a fresh-agent
|
|
169
|
+
[trial run](https://github.com/Bizilizi/yavih/blob/main/docs/trial-run.md) before opening the pull request.
|
|
170
|
+
|
|
171
|
+
<p align="center"><img src="https://raw.githubusercontent.com/Bizilizi/yavih/main/assets/readme/contribute.gif" alt="An agent adds a new benchmark folder and opens a pull request" width="100%"></p>
|
|
172
|
+
|
|
173
|
+
## How it works
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
prepare ──► extract ──► validate ──► probe ──► report
|
|
177
|
+
data your model yavih checks standard comparable
|
|
178
|
+
recipe (a bridge) the features probe tables
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Your model connects through a **bridge**: a small Python file, written by your agent from a template, that turns a
|
|
182
|
+
benchmark's raw files into features. It runs in your model's own environment — yavih installs without touching your
|
|
183
|
+
torch. yavih checks the features, trains the same probe every model gets, and reports with floors and confidence
|
|
184
|
+
intervals. Everything runs on a laptop, a workstation or as job arrays on any cluster.
|
|
185
|
+
|
|
186
|
+
<details>
|
|
187
|
+
<summary><b>Learn more</b></summary>
|
|
188
|
+
|
|
189
|
+
- [Quickstart by hand](https://github.com/Bizilizi/yavih/blob/main/docs/quickstart.md) — every step without an agent, with a complete bridge.
|
|
190
|
+
- [Design](https://github.com/Bizilizi/yavih/blob/main/docs/design.md) — why yavih works the way it does.
|
|
191
|
+
- [The bridge contract](https://github.com/Bizilizi/yavih/blob/main/docs/bridge.md), [validation](https://github.com/Bizilizi/yavih/blob/main/docs/validation.md), [readouts](https://github.com/Bizilizi/yavih/blob/main/docs/readouts.md), [hashing](https://github.com/Bizilizi/yavih/blob/main/docs/hashing.md), [the CLI](https://github.com/Bizilizi/yavih/blob/main/docs/cli.md) — the reference.
|
|
192
|
+
- [The agent skill](https://github.com/Bizilizi/yavih/blob/main/src/yavih/skill/yavih/SKILL.md) — what your agent reads.
|
|
193
|
+
- [Developing yavih](https://github.com/Bizilizi/yavih/blob/main/docs/development.md) and the [releases](https://github.com/Bizilizi/yavih/releases).
|
|
194
|
+
|
|
195
|
+
</details>
|
|
196
|
+
|
|
197
|
+
## License
|
|
198
|
+
|
|
199
|
+
yavih is released under the [MIT License](https://github.com/Bizilizi/yavih/blob/main/LICENSE). Benchmark datasets
|
|
200
|
+
are not part of yavih and keep their own licences and terms of use (each benchmark's page says where they come from).
|