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.
Files changed (407) hide show
  1. yavih-1.0.0/.github/release.yml +18 -0
  2. yavih-1.0.0/.github/workflows/ci.yml +109 -0
  3. yavih-1.0.0/.github/workflows/headers.yml +60 -0
  4. yavih-1.0.0/.github/workflows/release.yml +105 -0
  5. yavih-1.0.0/.gitignore +32 -0
  6. yavih-1.0.0/LICENSE +21 -0
  7. yavih-1.0.0/PKG-INFO +200 -0
  8. yavih-1.0.0/README.md +157 -0
  9. yavih-1.0.0/assets/benchmark-header/base.css +39 -0
  10. yavih-1.0.0/assets/benchmark-header/template.html +20 -0
  11. yavih-1.0.0/assets/header.html +113 -0
  12. yavih-1.0.0/assets/header.png +0 -0
  13. yavih-1.0.0/assets/readme/agent.gif +0 -0
  14. yavih-1.0.0/assets/readme/contribute.gif +0 -0
  15. yavih-1.0.0/assets/readme/hash.gif +0 -0
  16. yavih-1.0.0/assets/readme/library.gif +0 -0
  17. yavih-1.0.0/docs/README.md +42 -0
  18. yavih-1.0.0/docs/adding-a-readout.md +111 -0
  19. yavih-1.0.0/docs/benchmark-folder.md +615 -0
  20. yavih-1.0.0/docs/bridge.md +592 -0
  21. yavih-1.0.0/docs/cli.md +289 -0
  22. yavih-1.0.0/docs/configuration.md +293 -0
  23. yavih-1.0.0/docs/conformance.md +218 -0
  24. yavih-1.0.0/docs/contributing-a-benchmark.md +370 -0
  25. yavih-1.0.0/docs/design.md +319 -0
  26. yavih-1.0.0/docs/development.md +241 -0
  27. yavih-1.0.0/docs/execution.md +605 -0
  28. yavih-1.0.0/docs/features.md +470 -0
  29. yavih-1.0.0/docs/hashing.md +446 -0
  30. yavih-1.0.0/docs/project-layout.md +154 -0
  31. yavih-1.0.0/docs/quickstart.md +187 -0
  32. yavih-1.0.0/docs/readouts.md +476 -0
  33. yavih-1.0.0/docs/registry.md +101 -0
  34. yavih-1.0.0/docs/releasing.md +79 -0
  35. yavih-1.0.0/docs/results.md +416 -0
  36. yavih-1.0.0/docs/suites.md +144 -0
  37. yavih-1.0.0/docs/trial-run.md +166 -0
  38. yavih-1.0.0/docs/validation.md +319 -0
  39. yavih-1.0.0/pyproject.toml +108 -0
  40. yavih-1.0.0/setup.cfg +4 -0
  41. yavih-1.0.0/src/yavih/__init__.py +53 -0
  42. yavih-1.0.0/src/yavih/__main__.py +8 -0
  43. yavih-1.0.0/src/yavih/_toml.py +311 -0
  44. yavih-1.0.0/src/yavih/_version.py +5 -0
  45. yavih-1.0.0/src/yavih/benchmark.py +3213 -0
  46. yavih-1.0.0/src/yavih/benchmarks/README.md +117 -0
  47. yavih-1.0.0/src/yavih/benchmarks/__init__.py +107 -0
  48. yavih-1.0.0/src/yavih/benchmarks/audioset20k/README.md +100 -0
  49. yavih-1.0.0/src/yavih/benchmarks/audioset20k/assets/header.png +0 -0
  50. yavih-1.0.0/src/yavih/benchmarks/audioset20k/assets/header.src.sha256 +1 -0
  51. yavih-1.0.0/src/yavih/benchmarks/audioset20k/benchmark.yaml +173 -0
  52. yavih-1.0.0/src/yavih/benchmarks/audioset20k/bridge_template.py +307 -0
  53. yavih-1.0.0/src/yavih/benchmarks/audioset20k/classes.csv +528 -0
  54. yavih-1.0.0/src/yavih/benchmarks/audioset20k/conformance/expected.json +43 -0
  55. yavih-1.0.0/src/yavih/benchmarks/audioset20k/make_manifest.py +346 -0
  56. yavih-1.0.0/src/yavih/benchmarks/audioset20k/manifest.csv.gz +0 -0
  57. yavih-1.0.0/src/yavih/benchmarks/audioset20k/prepare/01_download.sh +14 -0
  58. yavih-1.0.0/src/yavih/benchmarks/audioset20k/prepare/02_verify.sh +22 -0
  59. yavih-1.0.0/src/yavih/benchmarks/audioset20k/setup.md +180 -0
  60. yavih-1.0.0/src/yavih/benchmarks/audioset20k/tests/test_folder.py +691 -0
  61. yavih-1.0.0/src/yavih/benchmarks/ave/README.md +87 -0
  62. yavih-1.0.0/src/yavih/benchmarks/ave/assets/header.png +0 -0
  63. yavih-1.0.0/src/yavih/benchmarks/ave/assets/header.src.sha256 +1 -0
  64. yavih-1.0.0/src/yavih/benchmarks/ave/benchmark.yaml +185 -0
  65. yavih-1.0.0/src/yavih/benchmarks/ave/bridge_template.py +281 -0
  66. yavih-1.0.0/src/yavih/benchmarks/ave/classes.csv +30 -0
  67. yavih-1.0.0/src/yavih/benchmarks/ave/conformance/expected.json +58 -0
  68. yavih-1.0.0/src/yavih/benchmarks/ave/make_manifest.py +365 -0
  69. yavih-1.0.0/src/yavih/benchmarks/ave/manifest.csv.gz +0 -0
  70. yavih-1.0.0/src/yavih/benchmarks/ave/prepare/01_download.sh +38 -0
  71. yavih-1.0.0/src/yavih/benchmarks/ave/prepare/02_verify.sh +40 -0
  72. yavih-1.0.0/src/yavih/benchmarks/ave/prepare/03_index_tar.py +107 -0
  73. yavih-1.0.0/src/yavih/benchmarks/ave/prepare/04_media_census.py +137 -0
  74. yavih-1.0.0/src/yavih/benchmarks/ave/prepare/05_make_manifest.sh +21 -0
  75. yavih-1.0.0/src/yavih/benchmarks/ave/setup.md +185 -0
  76. yavih-1.0.0/src/yavih/benchmarks/ave/tests/test_folder.py +580 -0
  77. yavih-1.0.0/src/yavih/benchmarks/avsync/README.md +109 -0
  78. yavih-1.0.0/src/yavih/benchmarks/avsync/assets/header.png +0 -0
  79. yavih-1.0.0/src/yavih/benchmarks/avsync/assets/header.src.sha256 +1 -0
  80. yavih-1.0.0/src/yavih/benchmarks/avsync/benchmark.yaml +250 -0
  81. yavih-1.0.0/src/yavih/benchmarks/avsync/bridge_template.py +252 -0
  82. yavih-1.0.0/src/yavih/benchmarks/avsync/classes.csv +10 -0
  83. yavih-1.0.0/src/yavih/benchmarks/avsync/conformance/expected.json +59 -0
  84. yavih-1.0.0/src/yavih/benchmarks/avsync/make_manifest.py +840 -0
  85. yavih-1.0.0/src/yavih/benchmarks/avsync/manifest.csv.gz +0 -0
  86. yavih-1.0.0/src/yavih/benchmarks/avsync/prepare/01_vggsound_media.sh +37 -0
  87. yavih-1.0.0/src/yavih/benchmarks/avsync/prepare/03_materialize.py +637 -0
  88. yavih-1.0.0/src/yavih/benchmarks/avsync/prepare/04_verify_layout.sh +21 -0
  89. yavih-1.0.0/src/yavih/benchmarks/avsync/probe.py +241 -0
  90. yavih-1.0.0/src/yavih/benchmarks/avsync/setup.md +216 -0
  91. yavih-1.0.0/src/yavih/benchmarks/avsync/tests/test_folder.py +797 -0
  92. yavih-1.0.0/src/yavih/benchmarks/esc50/README.md +94 -0
  93. yavih-1.0.0/src/yavih/benchmarks/esc50/assets/header.png +0 -0
  94. yavih-1.0.0/src/yavih/benchmarks/esc50/assets/header.src.sha256 +1 -0
  95. yavih-1.0.0/src/yavih/benchmarks/esc50/benchmark.yaml +157 -0
  96. yavih-1.0.0/src/yavih/benchmarks/esc50/bridge_template.py +182 -0
  97. yavih-1.0.0/src/yavih/benchmarks/esc50/classes.csv +51 -0
  98. yavih-1.0.0/src/yavih/benchmarks/esc50/conformance/expected.json +58 -0
  99. yavih-1.0.0/src/yavih/benchmarks/esc50/make_manifest.py +264 -0
  100. yavih-1.0.0/src/yavih/benchmarks/esc50/manifest.csv.gz +0 -0
  101. yavih-1.0.0/src/yavih/benchmarks/esc50/prepare/01_download.sh +33 -0
  102. yavih-1.0.0/src/yavih/benchmarks/esc50/prepare/02_verify.sh +32 -0
  103. yavih-1.0.0/src/yavih/benchmarks/esc50/prepare/03_make_manifest.sh +22 -0
  104. yavih-1.0.0/src/yavih/benchmarks/esc50/setup.md +142 -0
  105. yavih-1.0.0/src/yavih/benchmarks/esc50/tests/test_folder.py +443 -0
  106. yavih-1.0.0/src/yavih/benchmarks/fsd50k/README.md +102 -0
  107. yavih-1.0.0/src/yavih/benchmarks/fsd50k/assets/header.png +0 -0
  108. yavih-1.0.0/src/yavih/benchmarks/fsd50k/assets/header.src.sha256 +1 -0
  109. yavih-1.0.0/src/yavih/benchmarks/fsd50k/benchmark.yaml +173 -0
  110. yavih-1.0.0/src/yavih/benchmarks/fsd50k/bridge_template.py +186 -0
  111. yavih-1.0.0/src/yavih/benchmarks/fsd50k/classes.csv +201 -0
  112. yavih-1.0.0/src/yavih/benchmarks/fsd50k/conformance/expected.json +48 -0
  113. yavih-1.0.0/src/yavih/benchmarks/fsd50k/make_manifest.py +301 -0
  114. yavih-1.0.0/src/yavih/benchmarks/fsd50k/manifest.csv.gz +0 -0
  115. yavih-1.0.0/src/yavih/benchmarks/fsd50k/prepare/01_download.sh +40 -0
  116. yavih-1.0.0/src/yavih/benchmarks/fsd50k/prepare/02_extract.sh +45 -0
  117. yavih-1.0.0/src/yavih/benchmarks/fsd50k/prepare/03_make_manifest.sh +25 -0
  118. yavih-1.0.0/src/yavih/benchmarks/fsd50k/setup.md +147 -0
  119. yavih-1.0.0/src/yavih/benchmarks/fsd50k/tests/test_folder.py +557 -0
  120. yavih-1.0.0/src/yavih/benchmarks/in1k/README.md +94 -0
  121. yavih-1.0.0/src/yavih/benchmarks/in1k/assets/header.png +0 -0
  122. yavih-1.0.0/src/yavih/benchmarks/in1k/assets/header.src.sha256 +1 -0
  123. yavih-1.0.0/src/yavih/benchmarks/in1k/benchmark.yaml +168 -0
  124. yavih-1.0.0/src/yavih/benchmarks/in1k/bridge_template.py +184 -0
  125. yavih-1.0.0/src/yavih/benchmarks/in1k/classes.csv +1001 -0
  126. yavih-1.0.0/src/yavih/benchmarks/in1k/conformance/expected.json +46 -0
  127. yavih-1.0.0/src/yavih/benchmarks/in1k/curation.json +38 -0
  128. yavih-1.0.0/src/yavih/benchmarks/in1k/make_manifest.py +238 -0
  129. yavih-1.0.0/src/yavih/benchmarks/in1k/manifest.csv.gz +0 -0
  130. yavih-1.0.0/src/yavih/benchmarks/in1k/prepare/01_locate_mirror.sh +49 -0
  131. yavih-1.0.0/src/yavih/benchmarks/in1k/prepare/02_extract_torchvision_root.sh +34 -0
  132. yavih-1.0.0/src/yavih/benchmarks/in1k/prepare/03_stage_probe_subset.sh +26 -0
  133. yavih-1.0.0/src/yavih/benchmarks/in1k/prepare/04_verify.sh +14 -0
  134. yavih-1.0.0/src/yavih/benchmarks/in1k/setup.md +173 -0
  135. yavih-1.0.0/src/yavih/benchmarks/in1k/tests/test_folder.py +520 -0
  136. yavih-1.0.0/src/yavih/benchmarks/k400/README.md +96 -0
  137. yavih-1.0.0/src/yavih/benchmarks/k400/assets/header.png +0 -0
  138. yavih-1.0.0/src/yavih/benchmarks/k400/assets/header.src.sha256 +1 -0
  139. yavih-1.0.0/src/yavih/benchmarks/k400/benchmark.yaml +172 -0
  140. yavih-1.0.0/src/yavih/benchmarks/k400/bridge_template.py +173 -0
  141. yavih-1.0.0/src/yavih/benchmarks/k400/classes.csv +401 -0
  142. yavih-1.0.0/src/yavih/benchmarks/k400/conformance/expected.json +46 -0
  143. yavih-1.0.0/src/yavih/benchmarks/k400/make_manifest.py +405 -0
  144. yavih-1.0.0/src/yavih/benchmarks/k400/manifest.csv.gz +0 -0
  145. yavih-1.0.0/src/yavih/benchmarks/k400/prepare/01_download_torrent.sh +71 -0
  146. yavih-1.0.0/src/yavih/benchmarks/k400/prepare/02_stage.sh +59 -0
  147. yavih-1.0.0/src/yavih/benchmarks/k400/prepare/03_verify_layout.sh +32 -0
  148. yavih-1.0.0/src/yavih/benchmarks/k400/prepare/04_pack_webdataset_optional.sh +74 -0
  149. yavih-1.0.0/src/yavih/benchmarks/k400/setup.md +188 -0
  150. yavih-1.0.0/src/yavih/benchmarks/k400/tests/test_folder.py +438 -0
  151. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/README.md +108 -0
  152. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/assets/header.png +0 -0
  153. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/assets/header.src.sha256 +1 -0
  154. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/benchmark.yaml +212 -0
  155. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/bridge_template.py +164 -0
  156. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/conformance/expected.json +56 -0
  157. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/curation.json +43 -0
  158. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/make_manifest.py +276 -0
  159. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/manifest.csv.gz +0 -0
  160. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/01_locate_mirror.sh +36 -0
  161. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/02_build_eval_index.sh +19 -0
  162. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/03_stage_train_subset.sh +17 -0
  163. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/04_derive_targets.sh +18 -0
  164. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/05_recontainer_png.sh +20 -0
  165. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/06_verify_readable.sh +15 -0
  166. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/07_verify.sh +29 -0
  167. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/build_eval_index.py +150 -0
  168. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/derive_targets.py +262 -0
  169. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/recontainer_png.py +326 -0
  170. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/prepare/verify_readable.py +112 -0
  171. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/probe.py +139 -0
  172. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/rgb_png.sha256.csv.gz +0 -0
  173. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/setup.md +265 -0
  174. yavih-1.0.0/src/yavih/benchmarks/nyuv2_depth/tests/test_folder.py +567 -0
  175. yavih-1.0.0/src/yavih/benchmarks/ssv2/README.md +104 -0
  176. yavih-1.0.0/src/yavih/benchmarks/ssv2/assets/header.png +0 -0
  177. yavih-1.0.0/src/yavih/benchmarks/ssv2/assets/header.src.sha256 +1 -0
  178. yavih-1.0.0/src/yavih/benchmarks/ssv2/benchmark.yaml +176 -0
  179. yavih-1.0.0/src/yavih/benchmarks/ssv2/bridge_template.py +203 -0
  180. yavih-1.0.0/src/yavih/benchmarks/ssv2/classes.csv +175 -0
  181. yavih-1.0.0/src/yavih/benchmarks/ssv2/conformance/expected.json +46 -0
  182. yavih-1.0.0/src/yavih/benchmarks/ssv2/curation.json +43 -0
  183. yavih-1.0.0/src/yavih/benchmarks/ssv2/make_manifest.py +203 -0
  184. yavih-1.0.0/src/yavih/benchmarks/ssv2/manifest.csv.gz +0 -0
  185. yavih-1.0.0/src/yavih/benchmarks/ssv2/prepare/01_portal_download.sh +41 -0
  186. yavih-1.0.0/src/yavih/benchmarks/ssv2/prepare/02_extract.sh +39 -0
  187. yavih-1.0.0/src/yavih/benchmarks/ssv2/prepare/03_stage_from_mirror.sh +40 -0
  188. yavih-1.0.0/src/yavih/benchmarks/ssv2/prepare/04_verify.sh +29 -0
  189. yavih-1.0.0/src/yavih/benchmarks/ssv2/setup.md +207 -0
  190. yavih-1.0.0/src/yavih/benchmarks/ssv2/tests/test_folder.py +512 -0
  191. yavih-1.0.0/src/yavih/benchmarks/vggsounder/README.md +96 -0
  192. yavih-1.0.0/src/yavih/benchmarks/vggsounder/assets/header.png +0 -0
  193. yavih-1.0.0/src/yavih/benchmarks/vggsounder/assets/header.src.sha256 +1 -0
  194. yavih-1.0.0/src/yavih/benchmarks/vggsounder/benchmark.yaml +201 -0
  195. yavih-1.0.0/src/yavih/benchmarks/vggsounder/bridge_template.py +332 -0
  196. yavih-1.0.0/src/yavih/benchmarks/vggsounder/classes.csv +310 -0
  197. yavih-1.0.0/src/yavih/benchmarks/vggsounder/conformance/expected.json +290 -0
  198. yavih-1.0.0/src/yavih/benchmarks/vggsounder/make_manifest.py +309 -0
  199. yavih-1.0.0/src/yavih/benchmarks/vggsounder/manifest.csv.gz +0 -0
  200. yavih-1.0.0/src/yavih/benchmarks/vggsounder/prepare/01_labels_vggsounder.sh +37 -0
  201. yavih-1.0.0/src/yavih/benchmarks/vggsounder/prepare/02_download_vggsound.sh +51 -0
  202. yavih-1.0.0/src/yavih/benchmarks/vggsounder/prepare/03_verify_layout.sh +32 -0
  203. yavih-1.0.0/src/yavih/benchmarks/vggsounder/prepare/04_media_facts.py +173 -0
  204. yavih-1.0.0/src/yavih/benchmarks/vggsounder/probe.py +536 -0
  205. yavih-1.0.0/src/yavih/benchmarks/vggsounder/setup.md +198 -0
  206. yavih-1.0.0/src/yavih/benchmarks/vggsounder/tests/test_folder.py +912 -0
  207. yavih-1.0.0/src/yavih/benchmarks/vggss_box/README.md +106 -0
  208. yavih-1.0.0/src/yavih/benchmarks/vggss_box/assets/header.png +0 -0
  209. yavih-1.0.0/src/yavih/benchmarks/vggss_box/assets/header.src.sha256 +1 -0
  210. yavih-1.0.0/src/yavih/benchmarks/vggss_box/benchmark.yaml +198 -0
  211. yavih-1.0.0/src/yavih/benchmarks/vggss_box/bridge_template.py +198 -0
  212. yavih-1.0.0/src/yavih/benchmarks/vggss_box/conformance/expected.json +71 -0
  213. yavih-1.0.0/src/yavih/benchmarks/vggss_box/make_manifest.py +565 -0
  214. yavih-1.0.0/src/yavih/benchmarks/vggss_box/manifest.csv.gz +0 -0
  215. yavih-1.0.0/src/yavih/benchmarks/vggss_box/prepare/01_annotations_vggss.sh +33 -0
  216. yavih-1.0.0/src/yavih/benchmarks/vggss_box/prepare/02_vggsound_media.sh +38 -0
  217. yavih-1.0.0/src/yavih/benchmarks/vggss_box/prepare/03_geometry_sidecars.sh +47 -0
  218. yavih-1.0.0/src/yavih/benchmarks/vggss_box/prepare/04_make_manifest.sh +20 -0
  219. yavih-1.0.0/src/yavih/benchmarks/vggss_box/prepare/05_verify.sh +8 -0
  220. yavih-1.0.0/src/yavih/benchmarks/vggss_box/prepare/audio_shorter_than_clip_seconds.txt +487 -0
  221. yavih-1.0.0/src/yavih/benchmarks/vggss_box/prepare/frame_sizes.json +20618 -0
  222. yavih-1.0.0/src/yavih/benchmarks/vggss_box/prepare/video_geometry.json +20618 -0
  223. yavih-1.0.0/src/yavih/benchmarks/vggss_box/setup.md +188 -0
  224. yavih-1.0.0/src/yavih/benchmarks/vggss_box/tests/test_folder.py +489 -0
  225. yavih-1.0.0/src/yavih/bridge.py +902 -0
  226. yavih-1.0.0/src/yavih/bridges/__init__.py +1 -0
  227. yavih-1.0.0/src/yavih/bridges/examples/__init__.py +2 -0
  228. yavih-1.0.0/src/yavih/bridges/examples/hf_reference.py +193 -0
  229. yavih-1.0.0/src/yavih/buildinfo.py +163 -0
  230. yavih-1.0.0/src/yavih/cli.py +2431 -0
  231. yavih-1.0.0/src/yavih/config.py +1456 -0
  232. yavih-1.0.0/src/yavih/conformance.py +772 -0
  233. yavih-1.0.0/src/yavih/deadline.py +145 -0
  234. yavih-1.0.0/src/yavih/doctables.py +340 -0
  235. yavih-1.0.0/src/yavih/external.py +335 -0
  236. yavih-1.0.0/src/yavih/extract.py +2171 -0
  237. yavih-1.0.0/src/yavih/freeze.py +111 -0
  238. yavih-1.0.0/src/yavih/hash_history.py +280 -0
  239. yavih-1.0.0/src/yavih/hashing.py +722 -0
  240. yavih-1.0.0/src/yavih/headers.py +253 -0
  241. yavih-1.0.0/src/yavih/io/__init__.py +37 -0
  242. yavih-1.0.0/src/yavih/io/claim.py +220 -0
  243. yavih-1.0.0/src/yavih/io/diff.py +128 -0
  244. yavih-1.0.0/src/yavih/io/finalize.py +254 -0
  245. yavih-1.0.0/src/yavih/io/format.py +145 -0
  246. yavih-1.0.0/src/yavih/io/inspect.py +157 -0
  247. yavih-1.0.0/src/yavih/io/layout.py +267 -0
  248. yavih-1.0.0/src/yavih/io/reader.py +529 -0
  249. yavih-1.0.0/src/yavih/io/shards.py +60 -0
  250. yavih-1.0.0/src/yavih/io/sidecar.py +525 -0
  251. yavih-1.0.0/src/yavih/io/stage.py +134 -0
  252. yavih-1.0.0/src/yavih/io/validate.py +2270 -0
  253. yavih-1.0.0/src/yavih/io/writer.py +579 -0
  254. yavih-1.0.0/src/yavih/lint.py +732 -0
  255. yavih-1.0.0/src/yavih/media/__init__.py +85 -0
  256. yavih-1.0.0/src/yavih/media/decode.py +301 -0
  257. yavih-1.0.0/src/yavih/media/ffmpeg.py +140 -0
  258. yavih-1.0.0/src/yavih/media/info.py +524 -0
  259. yavih-1.0.0/src/yavih/media/rules.py +436 -0
  260. yavih-1.0.0/src/yavih/media/tarindex.py +143 -0
  261. yavih-1.0.0/src/yavih/metrics/__init__.py +42 -0
  262. yavih-1.0.0/src/yavih/metrics/_common.py +121 -0
  263. yavih-1.0.0/src/yavih/metrics/box.py +188 -0
  264. yavih-1.0.0/src/yavih/metrics/classification.py +272 -0
  265. yavih-1.0.0/src/yavih/metrics/depth.py +141 -0
  266. yavih-1.0.0/src/yavih/metrics/intervals.py +282 -0
  267. yavih-1.0.0/src/yavih/metrics/registry.py +390 -0
  268. yavih-1.0.0/src/yavih/metrics/segment.py +131 -0
  269. yavih-1.0.0/src/yavih/plan/__init__.py +9 -0
  270. yavih-1.0.0/src/yavih/plan/calibrate.py +182 -0
  271. yavih-1.0.0/src/yavih/plan/estimate.py +169 -0
  272. yavih-1.0.0/src/yavih/plan/exec.py +949 -0
  273. yavih-1.0.0/src/yavih/plan/local.py +149 -0
  274. yavih-1.0.0/src/yavih/plan/matrix.py +506 -0
  275. yavih-1.0.0/src/yavih/plan/skeleton.py +252 -0
  276. yavih-1.0.0/src/yavih/plan/status.py +179 -0
  277. yavih-1.0.0/src/yavih/plan/units.py +827 -0
  278. yavih-1.0.0/src/yavih/probes/__init__.py +61 -0
  279. yavih-1.0.0/src/yavih/probes/_blocks.py +96 -0
  280. yavih-1.0.0/src/yavih/probes/attentive.py +71 -0
  281. yavih-1.0.0/src/yavih/probes/ckpt.py +56 -0
  282. yavih-1.0.0/src/yavih/probes/config.py +255 -0
  283. yavih-1.0.0/src/yavih/probes/dense.py +349 -0
  284. yavih-1.0.0/src/yavih/probes/floors.py +106 -0
  285. yavih-1.0.0/src/yavih/probes/losses.py +148 -0
  286. yavih-1.0.0/src/yavih/probes/trainer.py +703 -0
  287. yavih-1.0.0/src/yavih/project.py +486 -0
  288. yavih-1.0.0/src/yavih/readouts/__init__.py +35 -0
  289. yavih-1.0.0/src/yavih/readouts/_fit.py +438 -0
  290. yavih-1.0.0/src/yavih/readouts/_targets.py +181 -0
  291. yavih-1.0.0/src/yavih/readouts/base.py +2159 -0
  292. yavih-1.0.0/src/yavih/readouts/box.py +235 -0
  293. yavih-1.0.0/src/yavih/readouts/clf.py +257 -0
  294. yavih-1.0.0/src/yavih/readouts/coords.py +201 -0
  295. yavih-1.0.0/src/yavih/readouts/grid.py +179 -0
  296. yavih-1.0.0/src/yavih/readouts/registry.py +187 -0
  297. yavih-1.0.0/src/yavih/readouts/samples.py +118 -0
  298. yavih-1.0.0/src/yavih/readouts/seq.py +219 -0
  299. yavih-1.0.0/src/yavih/registry.py +538 -0
  300. yavih-1.0.0/src/yavih/report/__init__.py +38 -0
  301. yavih-1.0.0/src/yavih/report/compare.py +1219 -0
  302. yavih-1.0.0/src/yavih/report/index.py +273 -0
  303. yavih-1.0.0/src/yavih/report/join.py +246 -0
  304. yavih-1.0.0/src/yavih/report/migrate.py +125 -0
  305. yavih-1.0.0/src/yavih/report/store.py +644 -0
  306. yavih-1.0.0/src/yavih/report/tables.py +466 -0
  307. yavih-1.0.0/src/yavih/resources.py +220 -0
  308. yavih-1.0.0/src/yavih/sample.py +821 -0
  309. yavih-1.0.0/src/yavih/scaffold.py +425 -0
  310. yavih-1.0.0/src/yavih/shipped.py +462 -0
  311. yavih-1.0.0/src/yavih/skill/yavih/SKILL.md +250 -0
  312. yavih-1.0.0/src/yavih/skill/yavih/references/.gitkeep +0 -0
  313. yavih-1.0.0/src/yavih/skill/yavih/references/bridge.md +457 -0
  314. yavih-1.0.0/src/yavih/skill/yavih/references/cli.md +407 -0
  315. yavih-1.0.0/src/yavih/skill/yavih/references/data.md +171 -0
  316. yavih-1.0.0/src/yavih/skill/yavih/references/readouts.md +215 -0
  317. yavih-1.0.0/src/yavih/skill/yavih/references/slurm.md +361 -0
  318. yavih-1.0.0/src/yavih/suites/default.yaml +30 -0
  319. yavih-1.0.0/src/yavih/suites/minimal.yaml +18 -0
  320. yavih-1.0.0/src/yavih/suites.py +529 -0
  321. yavih-1.0.0/src/yavih/testing/__init__.py +1361 -0
  322. yavih-1.0.0/src/yavih/testing/folder.py +285 -0
  323. yavih-1.0.0/src/yavih/trial.py +421 -0
  324. yavih-1.0.0/src/yavih/versions.py +167 -0
  325. yavih-1.0.0/src/yavih/waivers.py +179 -0
  326. yavih-1.0.0/src/yavih.egg-info/PKG-INFO +200 -0
  327. yavih-1.0.0/src/yavih.egg-info/SOURCES.txt +405 -0
  328. yavih-1.0.0/src/yavih.egg-info/dependency_links.txt +1 -0
  329. yavih-1.0.0/src/yavih.egg-info/entry_points.txt +2 -0
  330. yavih-1.0.0/src/yavih.egg-info/requires.txt +17 -0
  331. yavih-1.0.0/src/yavih.egg-info/scm_file_list.json +400 -0
  332. yavih-1.0.0/src/yavih.egg-info/scm_version.json +8 -0
  333. yavih-1.0.0/src/yavih.egg-info/top_level.txt +1 -0
  334. yavih-1.0.0/tests/conftest.py +284 -0
  335. yavih-1.0.0/tests/data/avsync_metrics_golden.json +214 -0
  336. yavih-1.0.0/tests/docs_tables.py +87 -0
  337. yavih-1.0.0/tests/test_benchmark.py +1644 -0
  338. yavih-1.0.0/tests/test_bridge.py +701 -0
  339. yavih-1.0.0/tests/test_bridge_hf_reference.py +165 -0
  340. yavih-1.0.0/tests/test_bridge_preprocessing_source.py +244 -0
  341. yavih-1.0.0/tests/test_buildinfo.py +185 -0
  342. yavih-1.0.0/tests/test_cli.py +1419 -0
  343. yavih-1.0.0/tests/test_config.py +157 -0
  344. yavih-1.0.0/tests/test_config_layers.py +462 -0
  345. yavih-1.0.0/tests/test_conformance.py +413 -0
  346. yavih-1.0.0/tests/test_cross_area_consistency.py +166 -0
  347. yavih-1.0.0/tests/test_deadline.py +84 -0
  348. yavih-1.0.0/tests/test_determinism.py +118 -0
  349. yavih-1.0.0/tests/test_docs.py +268 -0
  350. yavih-1.0.0/tests/test_e2e_synthetic.py +576 -0
  351. yavih-1.0.0/tests/test_exec_slots.py +437 -0
  352. yavih-1.0.0/tests/test_extensibility.py +234 -0
  353. yavih-1.0.0/tests/test_external.py +198 -0
  354. yavih-1.0.0/tests/test_extract.py +1782 -0
  355. yavih-1.0.0/tests/test_extract_fixtures.py +550 -0
  356. yavih-1.0.0/tests/test_extract_throughput.py +50 -0
  357. yavih-1.0.0/tests/test_freeze.py +223 -0
  358. yavih-1.0.0/tests/test_hashing.py +650 -0
  359. yavih-1.0.0/tests/test_headers.py +154 -0
  360. yavih-1.0.0/tests/test_import_boundary.py +228 -0
  361. yavih-1.0.0/tests/test_io_core.py +1021 -0
  362. yavih-1.0.0/tests/test_io_validate.py +1883 -0
  363. yavih-1.0.0/tests/test_io_validate_rules.py +114 -0
  364. yavih-1.0.0/tests/test_media.py +690 -0
  365. yavih-1.0.0/tests/test_media_ffprobe.py +166 -0
  366. yavih-1.0.0/tests/test_media_helpers.py +167 -0
  367. yavih-1.0.0/tests/test_metrics_avsync.py +174 -0
  368. yavih-1.0.0/tests/test_metrics_box.py +108 -0
  369. yavih-1.0.0/tests/test_metrics_classification.py +169 -0
  370. yavih-1.0.0/tests/test_metrics_depth.py +100 -0
  371. yavih-1.0.0/tests/test_metrics_intervals.py +142 -0
  372. yavih-1.0.0/tests/test_metrics_registry_contract.py +147 -0
  373. yavih-1.0.0/tests/test_metrics_segment.py +72 -0
  374. yavih-1.0.0/tests/test_model_registry.py +297 -0
  375. yavih-1.0.0/tests/test_no_internal_refs.py +43 -0
  376. yavih-1.0.0/tests/test_packaged_folders.py +389 -0
  377. yavih-1.0.0/tests/test_plan_driver_loop.py +425 -0
  378. yavih-1.0.0/tests/test_plan_estimate.py +81 -0
  379. yavih-1.0.0/tests/test_plan_exec.py +487 -0
  380. yavih-1.0.0/tests/test_plan_helpers.py +311 -0
  381. yavih-1.0.0/tests/test_plan_init.py +173 -0
  382. yavih-1.0.0/tests/test_plan_matrix.py +321 -0
  383. yavih-1.0.0/tests/test_plan_status_calibrate.py +186 -0
  384. yavih-1.0.0/tests/test_plan_units.py +527 -0
  385. yavih-1.0.0/tests/test_probe_out_results_root.py +236 -0
  386. yavih-1.0.0/tests/test_probes_config.py +158 -0
  387. yavih-1.0.0/tests/test_probes_heads.py +277 -0
  388. yavih-1.0.0/tests/test_probes_trainer.py +675 -0
  389. yavih-1.0.0/tests/test_project.py +610 -0
  390. yavih-1.0.0/tests/test_readouts.py +1169 -0
  391. yavih-1.0.0/tests/test_readouts_contract.py +508 -0
  392. yavih-1.0.0/tests/test_readouts_integration.py +221 -0
  393. yavih-1.0.0/tests/test_readouts_per_sample_pos.py +228 -0
  394. yavih-1.0.0/tests/test_registry.py +190 -0
  395. yavih-1.0.0/tests/test_report.py +979 -0
  396. yavih-1.0.0/tests/test_report_join.py +451 -0
  397. yavih-1.0.0/tests/test_report_migrate.py +63 -0
  398. yavih-1.0.0/tests/test_report_store.py +226 -0
  399. yavih-1.0.0/tests/test_rules_fps_options.py +204 -0
  400. yavih-1.0.0/tests/test_sample.py +692 -0
  401. yavih-1.0.0/tests/test_scaffold.py +205 -0
  402. yavih-1.0.0/tests/test_shipped.py +227 -0
  403. yavih-1.0.0/tests/test_skill.py +634 -0
  404. yavih-1.0.0/tests/test_suites.py +271 -0
  405. yavih-1.0.0/tests/test_trial.py +113 -0
  406. yavih-1.0.0/tests/test_versions.py +114 -0
  407. 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 &lt;your dataset&gt; 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).