| #!/usr/bin/env python3 |
| """ Print connection map lookahead in human readable format. """ |
| |
| import argparse |
| import capnp |
| from lib.connection_box_tools import load_connection_box, \ |
| iterate_connection_box, connection_box_to_numpy |
| import scipy.io as sio |
| import lib.rr_graph_xml.graph2 |
| |
| # Remove magic import hook. |
| capnp.remove_import_hook() |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser(description=__doc__) |
| parser.add_argument( |
| '--schema_path', help='Path to connection map schema', required=True |
| ) |
| parser.add_argument('--lookahead_map', required=True) |
| parser.add_argument('--rrgraph', required=True) |
| parser.add_argument('--outmat', required=True) |
| |
| args = parser.parse_args() |
| |
| with open(args.lookahead_map, 'rb') as f: |
| cost_map = load_connection_box(args.schema_path, f) |
| |
| mat_data = { |
| 'segments': {}, |
| 'connection_boxes': {}, |
| } |
| segments = {} |
| connection_boxes = {} |
| |
| have_segments = False |
| have_connection_boxes = False |
| |
| for path, element in lib.rr_graph_xml.graph2.iterate_xml(args.rrgraph): |
| if path == "rr_graph" and element.tag == "segments": |
| have_segments = True |
| |
| if path == "rr_graph" and element.tag == "connection_boxes": |
| have_connection_boxes = True |
| |
| if have_segments and have_connection_boxes: |
| break |
| |
| if path == "rr_graph/connection_boxes" and element.tag == "connection_box": |
| connection_boxes[int(element.attrib['id']) |
| ] = element.attrib['name'] |
| mat_data['connection_boxes'][element.attrib['name']] = int( |
| element.attrib['id'] |
| ) |
| |
| if path == "rr_graph/segments" and element.tag == "segment": |
| segments[int(element.attrib['id'])] = element.attrib['name'] |
| mat_data['segments'][element.attrib['name']] = int( |
| element.attrib['id'] |
| ) |
| |
| for segment, connection_box, offset, m in iterate_connection_box(cost_map): |
| |
| segment_str = segments[segment] |
| box_str = connection_boxes[connection_box] |
| print('Processing {} to {}'.format(segment_str, box_str)) |
| |
| x, y, delay, congestion, fill = connection_box_to_numpy(offset, m) |
| |
| if segment_str not in mat_data: |
| mat_data[segment_str] = {} |
| |
| if box_str not in mat_data[segment_str]: |
| mat_data[segment_str][box_str] = {} |
| |
| mat_data[segment_str][box_str]['x'] = x |
| mat_data[segment_str][box_str]['y'] = y |
| mat_data[segment_str][box_str]['delay'] = delay |
| mat_data[segment_str][box_str]['congestion'] = congestion |
| mat_data[segment_str][box_str]['fill'] = fill |
| |
| sio.savemat(args.outmat, mat_data) |
| |
| |
| if __name__ == "__main__": |
| main() |