import json import tempfile import unittest from concurrent.futures import ThreadPoolExecutor from pathlib import Path import numpy as np from eval_segmentqa_vllm import ( VideoCache, load_fixed64_rows, load_fixed80_absmeta_requests, pending_rows, resolve_checkpoint, row_id, sample_frames, ) class EvalSegmentQATest(unittest.TestCase): def test_single_frame_is_duplicated(self): frame = np.ones((2, 2, 3), dtype=np.uint8) sampled = sample_frames([frame], 64) self.assertEqual(len(sampled), 2) self.assertTrue(np.array_equal(sampled[0], sampled[1])) def test_cache_concurrent_copy(self): with tempfile.TemporaryDirectory() as root: src = Path(root) / 'dataset' / 'videos' / 'v.bin' src.parent.mkdir(parents=True); src.write_bytes(b'video') cache = VideoCache(Path(root) / 'cache', 1) with ThreadPoolExecutor(max_workers=4) as pool: paths = list(pool.map(cache.get, [src] * 4)) self.assertEqual(len(set(paths)), 1) self.assertEqual(paths[0].read_bytes(), b'video') self.assertEqual(cache.bytes, 5) def test_resume_skips_ids_and_only_changes_execution_order(self): rows = [ {'id': 1, '_dataset': 'd', 'video': 'b', 'timestamp_start': '00:00:02', '_input_index': 0}, {'id': 2, '_dataset': 'd', 'video': 'a', 'timestamp_start': '00:00:03', '_input_index': 1}, {'id': 3, '_dataset': 'd', 'video': 'a', 'timestamp_start': '00:00:01', '_input_index': 2}, ] by_id, done, pending = pending_rows(rows, [{'id': 1}], 'video_time') self.assertEqual(done, {'1'}) self.assertEqual([r['id'] for r in pending], [3, 2]) self.assertEqual([by_id[str(i)]['_input_index'] for i in (1, 2, 3)], [0, 1, 2]) def test_load_fixed64_rows_validates_counts_and_root(self): with tempfile.TemporaryDirectory() as root: dataset = Path(root) / 'test.jsonl' dataset.write_text(json.dumps({ 'id': 'q1', 'dataset': 'heico-focus-vqa', 'derived_video': 'videos/a.mp4', 'derived_frame_count': 64, 'verified_frame_count': 64, 'output_fps': 2.0, 'question': 'q', 'answer': 'a', 'answer_format': 'free-form' }) + '\n') rows = load_fixed64_rows(dataset) self.assertEqual(rows[0]['_dataset'], 'heico') self.assertEqual(rows[0]['_fixed64_root'], root) dataset.write_text(json.dumps({ 'id': 'bad', 'dataset': 'heico-focus-vqa', 'derived_frame_count': 63, 'verified_frame_count': 64 }) + '\n') with self.assertRaises(ValueError): load_fixed64_rows(dataset) def test_load_fixed80_requests_uses_segment_metadata_id_and_rejects_answers(self): with tempfile.TemporaryDirectory() as root: video = Path(root) / 'clip.mp4' video.write_bytes(b'placeholder') dataset = Path(root) / 'requests.jsonl' row = { 'messages': [{'role': 'system', 'content': 'sys'}, {'role': 'user', 'content': '