| #!/usr/bin/env python3 |
| # -*- coding: utf-8 -*- |
| # |
| # Copyright (C) 2017-2020 The Project X-Ray Authors. |
| # |
| # Use of this source code is governed by a ISC-style |
| # license that can be found in the LICENSE file or at |
| # https://opensource.org/licenses/ISC |
| # |
| # SPDX-License-Identifier: ISC |
| import json |
| |
| with open('output/error_nodes.json') 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))) |
| |
| for node, error in error_nodes.items(): |
| combined_generated_nodes = set() |
| for generated_node in error['generated_nodes']: |
| combined_generated_nodes |= set(generated_node) |
| |
| 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 max(len(generated_node) for generated_node in bad_nodes) > 1: |
| assert False, node |
| else: |
| for generated_node in bad_nodes: |
| for wire in generated_node: |
| print(wire) |