File size: 1,852 Bytes
bfe13e2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
37
"""Build a compact UI payload from the independently hashed full result snapshot."""
from __future__ import annotations
import datetime
import hashlib
import json
from pathlib import Path

ROOT = Path(__file__).resolve().parent

def build() -> None:
    source = ROOT / 'data.json'
    data = json.loads(source.read_text())
    rows = data['dataset_results']
    fields = {'datasets': 'dataset', 'scopes': 'scope', 'runtimes': 'runtime',
              'families': 'family', 'configurations': 'algorithm_variant'}
    tables = {key: sorted({r[field] for r in rows}) for key, field in fields.items()}
    indices = {key: {v:i for i,v in enumerate(values)} for key,values in tables.items()}
    compact = []
    for r in rows:
        compact.append([*(indices[key][r[field]] for key,field in fields.items()),
                        r['compression_rate'], r['compression_time_ns_per_point'],
                        r['decompression_time_ns_per_point'], r['original_size_bytes'],
                        r['compressed_size_bytes']])
    payload = {key: data[key] for key in ('schema_version','benchmark','coverage','datasets','methods','scopes','source','paper_table3')}
    payload['exported_at'] = datetime.datetime.now(datetime.timezone.utc).isoformat()
    payload['source_data_sha256'] = hashlib.sha256(source.read_bytes()).hexdigest()
    payload['record_tables'] = tables
    payload['compact_records'] = compact
    output = ROOT / 'ui-data.json'
    output.write_text(json.dumps(payload, ensure_ascii=False, separators=(',', ':'), allow_nan=False)+'\n')
    print(json.dumps({'file':output.name,'records':len(rows),'bytes':output.stat().st_size,
                      'source_data_sha256':payload['source_data_sha256'],
                      'ui_sha256':hashlib.sha256(output.read_bytes()).hexdigest()}))

if __name__ == '__main__':
    build()