def learn_skeleton(self, X: pd.DataFrame) -> Tuple[(nx.Graph, Dict[(str, Dict[(str, Set)])])]:
    'Learn skeleton from data.\n\n        Parameters\n        ----------\n        X : pd.DataFrame\n            Dataset.\n\n        Returns\n        -------\n        skel_graph : nx.Graph\n            The skeleton graph.\n        sep_set : Dict[str, Dict[str, Set]]\n            The separating set.\n        '
    (graph, sep_set, fixed_edges) = self._initialize_graph(X)
    (skel_graph, sep_set) = self._learn_skeleton_from_neighbors(X, graph, sep_set, fixed_edges)
    return (skel_graph, sep_set)
Learn skeleton from data.

Parameters
----------
X : pd.DataFrame
    Dataset.

Returns
-------
skel_graph : nx.Graph
    The skeleton graph.
sep_set : Dict[str, Dict[str, Set]]
    The separating set.
def learn_skeleton(self, X: pd.DataFrame) -> Tuple[(nx.Graph, Dict[(str, Dict[(str, Set)])])]:
    'Learn skeleton from data.\n\n        Parameters\n        ----------\n        X : pd.DataFrame\n            Dataset.\n\n        Returns\n        -------\n        skel_graph : nx.Graph\n            The skeleton graph.\n        sep_set : Dict[str, Dict[str, Set]]\n            The separating set.\n        '
    (graph, sep_set, fixed_edges) = self._initialize_graph(X)
    (skel_graph, sep_set) = self._learn_skeleton_from_neighbors(X, graph, sep_set, fixed_edges)
    return (skel_graph, sep_set)