This commit is contained in:
khodowany
2026-10-04 15:51:18 -05:00
parent 405066eb43
commit f234dd6d51
54 changed files with 2104 additions and 330 deletions
+44
View File
@@ -0,0 +1,44 @@
"""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()