"""Run the canonical scorer, then attach measured route observations separately.""" import json from pathlib import Path import re import subprocess import sys lab = Path(__file__).resolve().parent root = lab.parents[2] subprocess.run([sys.executable, str(root / 'tools/lab_score.py'), '--lab', str(lab), '--out', str(lab / 'scores.json'), '--markdown', str(lab / 'scores.md')], check=True) scores = json.loads((lab / 'scores.json').read_text()) experiment = json.loads((lab / 'media-experiment.json').read_text()) observations = [] for source in experiment['sources']: name = Path(source['file']).stem lines = source['stream_lines'] # Input stream descriptions precede output mapping and indented output streams. descriptions = [] for line in lines: if line not in descriptions: descriptions.append(line) observations.append({'sample': name, 'input_video_stream_present': any('Video:' in x for x in descriptions), 'input_audio_stream_present': any('Audio:' in x for x in descriptions), 'input_subtitle_stream_present': any('Subtitle:' in x for x in descriptions), 'markitdown_output_characters': len((lab / 'markitdown' / (name + '.md')).read_text()), 'ffmpeg_extracted_subtitle_cues': len(re.findall(r'^\d+\n\d\d:\d\d:', (lab / 'ffmpeg' / (name + '.md')).read_text(), re.M))}) scores['media_observations'] = observations scores['media_boundary'] = experiment['boundary'] scores['media_method'] = 'Input stream descriptions from FFmpeg inspection; raw UTF-8 Markdown character count; SRT cue number followed by timestamp. Not ASR accuracy.' (lab / 'scores.json').write_text(json.dumps(scores, indent=2) + '\n') print(json.dumps({'cells': len(scores['cells']), 'media_observations': observations}, indent=2))