From c38cac8b693722f68577bda97b239c7472950491 Mon Sep 17 00:00:00 2001 From: Keith Rothman <537074+litghost@users.noreply.github.com> Date: Fri, 5 Oct 2018 08:33:11 -0700 Subject: [PATCH] Handle new grid format and merge with segment info. Signed-off-by: Keith Rothman <537074+litghost@users.noreply.github.com> --- fuzzers/074-dump_all/generate_after_dump.sh | 8 +++++ fuzzers/074-dump_all/generate_grid.py | 11 +++--- utils/merge_tilegrid.py | 37 +++++++++++++++++++++ 3 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 utils/merge_tilegrid.py diff --git a/fuzzers/074-dump_all/generate_after_dump.sh b/fuzzers/074-dump_all/generate_after_dump.sh index 75d38f60..bf615774 100755 --- a/fuzzers/074-dump_all/generate_after_dump.sh +++ b/fuzzers/074-dump_all/generate_after_dump.sh @@ -12,3 +12,11 @@ python3 create_node_tree.py \ python3 reduce_site_types.py --output_dir output python3 generate_grid.py --root_dir specimen_001/ --output_dir output \ --ignored_wires ${XRAY_DATABASE}_ignored_wires.txt + +BASE_TILEGRID=../../database/${XRAY_DATABASE}/tilegrid.json +if [ -f $BASE_TILEGRID ]; then + mv output/tilegrid.json output/tilegrid_full.json.tmp + python3 ../../utils/merge_tilegrid.py \ + --base_grid $BASE_TILEGRID \ + --overlay_grid output/tilegrid_full.json.tmp \ + --output_grid output/tilegrid.json diff --git a/fuzzers/074-dump_all/generate_grid.py b/fuzzers/074-dump_all/generate_grid.py index c841be53..d401cbcd 100644 --- a/fuzzers/074-dump_all/generate_grid.py +++ b/fuzzers/074-dump_all/generate_grid.py @@ -489,10 +489,7 @@ def connect_wires(tiles, tileconn, wire_map): def generate_tilegrid(pool, tiles): wire_map = {} - grid = { - 'segments': {}, - 'tiles': {}, - } + grid = {} num_tiles = 0 for tile_type in tiles: @@ -522,7 +519,7 @@ def generate_tilegrid(pool, tiles): } del tile[tilename]['wires'] - grid['tiles'].update(tile) + grid.update(tile) idx += 1 bar.update(idx) @@ -544,7 +541,7 @@ def generate_tileconn(pool, node_tree, nodes, wire_map, grid): raw_node_data.append(node) process_node( tileconn, key_history, node, wire_map, node_tree, - grid['tiles']) + grid) bar.update(idx + 1) tileconn = flatten_tile_conn(tileconn) @@ -629,7 +626,7 @@ def main(): print( "{} Connecting wires to verify tileconn".format( datetime.datetime.now())) - wire_nodes = connect_wires(grid['tiles'], tileconn, wire_map) + wire_nodes = connect_wires(grid, tileconn, wire_map) with open(wire_nodes_file, 'wb') as f: pickle.dump(wire_nodes, f) diff --git a/utils/merge_tilegrid.py b/utils/merge_tilegrid.py new file mode 100644 index 00000000..828aa192 --- /dev/null +++ b/utils/merge_tilegrid.py @@ -0,0 +1,37 @@ +import json +import argparse + +def main(): + parser = argparse.ArgumentParser() + + parser.add_argument('--base_grid', required=True) + parser.add_argument('--output_grid', required=True) + parser.add_argument('--overlay_grid', required=True) + parser.add_argument('--old_format', action='store_true') + + args = parser.parse_args() + + with open(args.base_grid) as f: + base_grid = json.load(f) + + with open(args.overlay_grid) as f: + overlay_grid = json.load(f) + + if args.old_format: + overlay_grid = overlay_grid['tiles'] + + for tile in overlay_grid: + if tile in base_grid: + for k in overlay_grid[tile]: + if k in base_grid[tile]: + assert base_grid[tile][k] == overlay_grid[tile][k], (k, base_grid[tile][k], overlay_grid[tile][k]) + else: + base_grid[tile][k] = overlay_grid[tile][k] + else: + base_grid[tile] = overlay_grid[tile] + + with open(args.output_grid, 'w') as f: + json.dump(base_grid, f, indent=2) + +if __name__ == '__main__': + main()