"""Isolated production-role benchmark. No target discovery or audition capture.""" from __future__ import annotations import argparse import cProfile import hashlib import json import os from pathlib import Path import platform import pstats import time from generator import production, parts, musicxml, vocabulary def main(): p=argparse.ArgumentParser(description=__doc__) p.add_argument('--source',type=Path,required=True) p.add_argument('--data-dir',type=Path,default=Path('data')) p.add_argument('--role',choices=production.ROLES,required=True) p.add_argument('--cache',type=Path) p.add_argument('--output',type=Path,required=True) p.add_argument('--profile',action='store_true') args=p.parse_args();args.output.mkdir(parents=True,exist_ok=True) start=time.monotonic() source=production.SourceAnalysis.read(parts.prepare_document(musicxml.load_musicxml(args.source))) analysis_seconds=time.monotonic()-start profile=cProfile.Profile() if args.profile else None if profile:profile.enable() start=time.monotonic() result=production.generate_role(source,args.role,args.data_dir,cache_dir=args.cache) seconds=time.monotonic()-start if profile: profile.disable();profile.dump_stats(args.output/'role.prof') with (args.output/'profile.txt').open('w') as out:pstats.Stats(profile,stream=out).sort_stats('cumulative').print_stats(70) evidence={'source':str(args.source),'canonical_source':source.musical_key,'role':args.role, 'platform':platform.platform(),'processor':platform.processor(),'cpu_count':os.cpu_count(),'workers':1, 'cache_hit':result['cache_hit'],'analysis_seconds':analysis_seconds,'role_seconds':seconds, 'cprofile_enabled':bool(profile),'musical_document_hash':vocabulary.fingerprint(result['document']), 'input_trace':result['trace'],'observed_reads':result.get('observed_reads',[])} (args.output/'result.json').write_text(json.dumps(result,sort_keys=True,indent=2)) (args.output/'benchmark.json').write_text(json.dumps(evidence,sort_keys=True,indent=2)) print(json.dumps({k:v for k,v in evidence.items() if k!='input_trace'},indent=2)) if __name__=='__main__':main()