import json import argparse def main(): parser = argparse.ArgumentParser(description="") parser.add_argument('--error_nodes', default='output/error_nodes.json') parser.add_argument('--output_ignore_list', action='store_true') args = parser.parse_args() with open(args.error_nodes) as f: flat_error_nodes = json.load(f) error_nodes = {} for node, raw_node, generated_nodes in flat_error_nodes: if node not in error_nodes: error_nodes[node] = { 'raw_node': set(raw_node), 'generated_nodes': set(), } assert error_nodes[node]['raw_node'] == set(raw_node) error_nodes[node]['generated_nodes'].add( tuple(sorted(generated_nodes))) ignored_wires = set() for node, error in error_nodes.items(): combined_generated_nodes = set() for generated_node in error['generated_nodes']: combined_generated_nodes |= set(generated_node) # Make sure there are not extra wires in nodes. assert error['raw_node'] == combined_generated_nodes, (node, error) good_node = max(error['generated_nodes'], key=lambda x: len(x)) bad_nodes = error['generated_nodes'] - set((good_node, )) if args.output_ignore_list: for generated_node in bad_nodes: for wire in generated_node: ignored_wires.add(wire) continue if max(len(generated_node) for generated_node in bad_nodes) > 1: assert False, node else: not_pcie = False for generated_node in bad_nodes: for wire in generated_node: if not wire.startswith('PCIE'): not_pcie = True if not_pcie: #print(node, good_node, map(tuple, bad_nodes)) print(repr((node, tuple(map(tuple, bad_nodes))))) pass else: #print(repr((node, map(tuple, bad_nodes)))) pass if args.output_ignore_list: for wire in ignored_wires: print(wire) if __name__ == '__main__': main()