blob: 27c257246de44bf18d6b440ade4837da14233aa2 [file] [log] [blame] [edit]
"""
"""
import argparse
import functools
import pickle
import re
import sqlite3
import sys
def create_lookup_inode(conn, inode_to_graph_map):
cur = conn.cursor()
@functools.lru_cache(maxsize=1024 * 1024)
def lookup_inode(inode):
if inode not in inode_to_graph_map:
return '{}'.format(inode)
else:
cur.execute(
"""
SELECT phy_tile.name, wire_in_tile.name
FROM graph_node
INNER JOIN wire ON graph_node.node_pkey = wire.node_pkey
INNER JOIN wire_in_tile ON wire.wire_in_tile_pkey = wire_in_tile.pkey
INNER JOIN phy_tile ON wire.phy_tile_pkey = phy_tile.pkey
WHERE graph_node.pkey = ?
LIMIT 1;""", (inode_to_graph_map[inode], )
)
tile, wire = cur.fetchone()
return '{}/{} ({})'.format(tile, wire, inode)
return lookup_inode
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('--rrgraph_node_map', required=True)
parser.add_argument('--connection_database', required=True)
args = parser.parse_args()
with open(args.rrgraph_node_map, 'rb') as f:
node_map = pickle.load(f)
inode_to_graph_map = {}
for graph_node_pkey, rr_inode in node_map.items():
assert rr_inode not in inode_to_graph_map
inode_to_graph_map[rr_inode] = graph_node_pkey
conn = sqlite3.connect(
'file:{}?mode=ro'.format(args.connection_database), uri=True
)
lookup_inode = create_lookup_inode(conn, inode_to_graph_map)
def replace_inode(match):
return match.group(1) + ' ' + lookup_inode(int(match.group(2)))
NODE_RE = re.compile('(node|rt_node:) ([1-9][0-9]*)')
for line in sys.stdin:
sys.stdout.write(NODE_RE.sub(replace_inode, line))
if __name__ == "__main__":
main()