def METHOD_NAME(
    graph: nx.DiGraph, pattern_graph: GraphPattern, strict: bool = True
) -> List[List[str]]:
    """
    Finds a list of nodes which define a subgraph matched a pattern in pattern_graph.
    Nodes in each subgraph is stored in lexicographical_topological_sort.
    :param graph: The model graph.
    :param pattern_graph: A graph consists of patterns to match.
    :param strict: If True returns only strict matched subgraphs, if False - all matched subgraphs.
    :return: A list of subgraphs are matched to the patterns. Each subgraph is defined as a list of node keys.
    """
    subgraphs = []
    matched_nodes = set()
    patterns = pattern_graph.get_weakly_connected_subgraphs()
    patterns = sorted(patterns, key=_sort_patterns_by_len, reverse=True)
    for pattern in patterns:
        matcher = ism.DiGraphMatcher(graph, pattern, node_match=_are_nodes_matched)
        for subgraph in matcher.subgraph_isomorphisms_iter():
            if strict and not _is_subgraph_matching_strict(graph, pattern, subgraph):
                continue
            subgraph = _copy_subgraph_excluding_non_pattern_node(subgraph, pattern_graph)
            is_any_node_matched = any(node in matched_nodes for node in subgraph)
            if is_any_node_matched:
                continue
            matched_nodes.update(subgraph)
            sorted_nodes_subgraph = list(nx.lexicographical_topological_sort(graph.subgraph(subgraph)))
            subgraphs.append(sorted_nodes_subgraph)
    return subgraphs