def _make_grids(self) -> None:
        """
        Determine the width of each column and the height of each row.

        :return: None
        """

        self._row_heights = [0] * (self._max_row + 2)
        self._col_widths = [0] * (self._max_col + 2)

        # update grid sizes based on nodes
        for node in self.graph.nodes():
            col, row = self._locations[node]

            width, height = self._node_sizes[node]

            if self._row_heights[row] < height:
                self._row_heights[row] = height

            if self._col_widths[col] < width // 2:
                self._col_widths[col] = width // 2
            if col + 1 < len(self._col_widths) and self._col_widths[col + 1] < width // 2:
                self._col_widths[col + 1] = width // 2

        # update grid sizes based on edges
        for col in range(self._max_col + 2):
            for row in range(self._max_row + 2):
                key = (col, row)
                if key in self._grid_max_vertical_id:
                    col_width = (self._grid_max_vertical_id[key] + 2) * self.x_margin
                    if self._col_widths[col] < col_width:
                        self._col_widths[col] = col_width
                if key in self._grid_max_horizontal_id:
                    row_height = (self._grid_max_horizontal_id[key] + 2) * self.y_margin
                    if self._row_heights[row] < row_height:
                        self._row_heights[row] = row_height

        # the left-most and the right-most column do not have any node assigned to it
        if self._col_widths[0] < 20:
            self._col_widths[0] = 20
        if self._col_widths[-1] < 20:
            self._col_widths[-1] = 20

        Determine the width of each column and the height of each row.

        :return: None
        
angrmanagement/utils/graph_layouter.py