Save
This commit is contained in:
@@ -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()
|
||||
Reference in New Issue
Block a user