docs: def _get_ancestors_of(self, obs_nodes_list):
          """
          Returns a dictionary of all ancestors of all the observed nodes including the
          node itself.
          Parameters
          ----------
          obs_nodes_list: string, list-type
              name of all the observed nodes
          Examples
          --------
          >>> from pgmpy.base import DAG
          >>> model = DAG([('D', 'G'), ('I', 'G'), ('G', 'L'),
          ...                        ('I', 'L')])
          >>> model._get_ancestors_of('G')
          {'D', 'G', 'I'}
          >>> model._get_ancestors_of(['G', 'I'])
          {'D', 'G', 'I'}
          """
          if not isinstance(obs_nodes_list, (list, tuple)):
              obs_nodes_list = [obs_nodes_list]
  
          for node in obs_nodes_list:
              if node not in self.nodes():
                  raise ValueError('Node {s} not in not in graph'.format(s=node))
  
          ancestors_list = set()
          nodes_list = set(obs_nodes_list)
          while nodes_list:
              node = nodes_list.pop()
              if node not in ancestors_list:
                  nodes_list.update(self.predecessors(node))
              ancestors_list.add(node)
          return ancestors_list