File size: 2,162 Bytes
fe31b61 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | """Rerun the controlled grid from immutable laws and stored sample streams."""
from pathlib import Path
import argparse,hashlib,json,time
import torch
from reproduce import ROOT,load,verify
from unionmind.decision_sufficiency import study,benchmark
def main():
parser=argparse.ArgumentParser(description=__doc__)
parser.add_argument('--device',default='cuda:0');parser.add_argument('--output',required=True)
parser.add_argument('--primary-only',action='store_true')
parser.add_argument('--benchmark',action='store_true')
a=parser.parse_args();verify()
assert a.device.startswith('cuda') and torch.cuda.is_available()
out=Path(a.output).resolve();assert not out.exists(),'Use a new output directory.'
(out/'confirmation').mkdir(parents=True)
torch.cuda.set_device(a.device);torch.backends.cuda.matmul.allow_tf32=False
config=json.loads((ROOT/'protocols/decision_sufficiency_protocol_01.json').read_text())
config['execution']['device']=a.device
if a.primary_only:config['estimation']['label_budgets']=[config['primary']['label_budget']]
protocol=out/'protocol.json';protocol.write_text(json.dumps(config,indent=2)+'\n')
archive=load('data/controlled/worlds',a.device);target=out/'confirmation/worlds.pt'
torch.save(archive,target)
manifest=json.loads((ROOT/'data/controlled/manifest.json').read_text())
manifest['file_sha256']=hashlib.sha256(target.read_bytes()).hexdigest()
(out/'confirmation/manifest.json').write_text(json.dumps(manifest,indent=2)+'\n')
paths=[protocol,target,*list((ROOT/'unionmind/decision_sufficiency').glob('*.py'))]
(out/'preconfirmation_lock.json').write_text(json.dumps(dict(
purpose='Reproduction from archived observations, not new confirmation',
timestamp_unix=time.time(),files={str(p):hashlib.sha256(p.read_bytes()).hexdigest() for p in paths}),indent=2)+'\n')
for module in [study,benchmark]:module.ROOT=out;module.PROTOCOL=protocol
study.evaluate('confirmation')
if a.benchmark:benchmark.run()
print('Controlled grid reconstructed. Original study results and criteria are unchanged.')
if __name__=='__main__':main()
|