def _prepare_edge_routing(self) -> None:
        """
        Create and initialize necessary data structions for edge routing.

        :return: None
        """

        self._edge_valid = []
        for _col in range(self._max_col + 2):
            self._edge_valid.append([True] * (self._max_row + 1))
        for col, row in self._node_locations.values():
            # edges should not overlap with existing nodes
            self._edge_valid[col][row] = False
            self._edge_valid[col + 1][row] = False

        self.vertical_edges = []
        self.horizontal_edges = []

        for _col in range(self._max_col + 2):
            v_edges = []
            h_edges = []
            for _row in range(self._max_row + 3):
                v_edges.append({})
                h_edges.append({})
            self.vertical_edges.append(v_edges)
            self.horizontal_edges.append(h_edges)

        Create and initialize necessary data structions for edge routing.

        :return: None
        
angrmanagement/utils/graph_layouter.py