def bfs_paths(self, start: str, goal: str) -> List[List[str]]:
        """
        Breadth-first search of all routes from start to goal.

        Args:
            start: starting node
            goal: goal node

        Returns:
            list of paths from start to goal.
        """
        queue = [(start, [start])]
        while queue:
            (node, path) = queue.pop(0)
            if node not in self.graph:
                yield []
            for _next in set(self.graph[node].keys()) - set(path):
                if _next == goal:
                    yield path + [_next]
                elif _next in self.graph:
                    queue.append((_next, path + [_next]))

        Breadth-first search of all routes from start to goal.

        Args:
            start: starting node
            goal: goal node

        Returns:
            list of paths from start to goal.
        
metadrive/component/road_network/node_road_network.py